vitest 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +8 -8
- package/dist/{create-0d7ef684.js → create-b3e0df3f.js} +15 -9
- package/dist/{diff-f479c2ad.js → diff-abc9f1a4.js} +3 -3
- package/dist/entry.js +5 -5
- package/dist/{globals-54e252e6.js → globals-67f38862.js} +5 -5
- package/dist/{index-bf8aa0b4.js → index-6102d563.js} +2 -2
- package/dist/{index-a2ff0e29.js → index-87602a5a.js} +2 -28
- package/dist/index.js +4 -4
- package/dist/node.js +4 -4
- package/dist/{setup-82880a85.js → setup-0edb4bff.js} +4 -4
- package/dist/{source-map-f7a4da05.js → source-map-002462f4.js} +2 -2
- package/dist/{vi-dce4c3b0.js → vi-7f0c5d26.js} +3 -3
- package/dist/worker.js +1 -1
- package/package.json +4 -4
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as noop, i as isObject } from './index-
|
|
1
|
+
import { n as noop, i as isObject } from './index-87602a5a.js';
|
|
2
2
|
import { i as isMockFunction, a as spyOn, f as fn, s as spies } from './jest-mock-113430de.js';
|
|
3
|
-
import { p as parseStacktrace } from './source-map-
|
|
3
|
+
import { p as parseStacktrace } from './source-map-002462f4.js';
|
|
4
4
|
import { c as commonjsGlobal } from './_commonjsHelpers-bdec4bbd.js';
|
|
5
5
|
import require$$0 from 'util';
|
|
6
6
|
|
|
@@ -5747,4 +5747,4 @@ const vitest = new VitestUtils();
|
|
|
5747
5747
|
const vi = vitest;
|
|
5748
5748
|
|
|
5749
5749
|
export { JestChaiExpect as J, getDefaultHookTimeout as a, getState as b, suite as c, describe as d, vi as e, format_1 as f, getCurrentSuite as g, getSerializers as h, it as i, equals as j, iterableEquality as k, subsetEquality as l, isA as m, clearContext as n, defaultSuite as o, plugins_1 as p, setHooks as q, getHooks as r, setState as s, test$7 as t, context as u, vitest as v, withTimeout as w, getFn as x };
|
|
5750
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmktZGNlNGMzYjAuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lL2NoYWluLnRzIiwiLi4vc3JjL3J1bnRpbWUvY29udGV4dC50cyIsIi4uL3NyYy9ydW50aW1lL21hcC50cyIsIi4uL3NyYy9ydW50aW1lL3N1aXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Fuc2ktc3R5bGVzQDUuMi4wL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmV0dHktZm9ybWF0QDI3LjQuNi9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9jb2xsZWN0aW9ucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmV0dHktZm9ybWF0QDI3LjQuNi9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9wbHVnaW5zL0FzeW1tZXRyaWNNYXRjaGVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Fuc2ktcmVnZXhANS4wLjEvbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9Db252ZXJ0QW5zaS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmV0dHktZm9ybWF0QDI3LjQuNi9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9wbHVnaW5zL0RPTUNvbGxlY3Rpb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9saWIvZXNjYXBlSFRNTC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmV0dHktZm9ybWF0QDI3LjQuNi9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9wbHVnaW5zL2xpYi9tYXJrdXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9ET01FbGVtZW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZXR0eS1mb3JtYXRAMjcuNC42L25vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0L2J1aWxkL3BsdWdpbnMvSW1tdXRhYmxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWlzQDE3LjAuMi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWlzQDE3LjAuMi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWlzQDE3LjAuMi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9SZWFjdEVsZW1lbnQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9SZWFjdFRlc3RDb21wb25lbnQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvaW5kZXguanMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L3BvcnQvcGx1Z2lucy50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvY2hhaS9qZXN0LXV0aWxzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9jaGFpL2plc3QtZXhwZWN0LnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2dsb2JhbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL2NvcHktcHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3Byb3RvdHlwZXMvYXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHNpbm9uanMrY29tbW9uc0AxLjguMy9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvY2FsbGVkLWluLW9yZGVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2Z1bmN0aW9uLW5hbWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHNpbm9uanMrY29tbW9uc0AxLjguMy9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvY2xhc3MtbmFtZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9kZXByZWNhdGVkLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2V2ZXJ5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL29yZGVyLWJ5LWZpcnN0LWNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHNpbm9uanMrY29tbW9uc0AxLjguMy9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9mdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL21hcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL29iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3NldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3R5cGUtZGV0ZWN0QDQuMC44L25vZGVfbW9kdWxlcy90eXBlLWRldGVjdC90eXBlLWRldGVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi90eXBlLW9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3ZhbHVlLXRvLXN0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytmYWtlLXRpbWVyc0A4LjEuMC9ub2RlX21vZHVsZXMvQHNpbm9uanMvZmFrZS10aW1lcnMvc3JjL2Zha2UtdGltZXJzLXNyYy5qcyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvdGltZXJzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy92aS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBDaGFpbmFibGVGdW5jdGlvbjxUIGV4dGVuZHMgc3RyaW5nLCBBcmdzIGV4dGVuZHMgYW55W10sIFIgPSBhbnk+ID0ge1xuICAoLi4uYXJnczogQXJncyk6IFJcbn0gJiB7XG4gIFt4IGluIFRdOiBDaGFpbmFibGVGdW5jdGlvbjxULCBBcmdzLCBSPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlPFQgZXh0ZW5kcyBzdHJpbmcsIEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUiA9IGFueT4oXG4gIGtleXM6IFRbXSxcbiAgZm46ICh0aGlzOiBSZWNvcmQ8VCwgYm9vbGVhbiB8IHVuZGVmaW5lZD4sIC4uLmFyZ3M6IEFyZ3MpID0+IFIsXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxULCBBcmdzLCBSPiB7XG4gIGZ1bmN0aW9uIGNyZWF0ZShvYmo6IFJlY29yZDxULCBib29sZWFuIHwgdW5kZWZpbmVkPikge1xuICAgIGNvbnN0IGNoYWluID0gZnVuY3Rpb24odGhpczogYW55LCAuLi5hcmdzOiBBcmdzKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBhcmdzKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hhaW4sIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZSh7IC4uLm9iaiwgW2tleV06IHRydWUgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGFpblxuICB9XG5cbiAgY29uc3QgY2hhaW4gPSBjcmVhdGUoe30gYXMgYW55KSBhcyBhbnlcbiAgY2hhaW4uZm4gPSBmblxuICByZXR1cm4gY2hhaW5cbn1cbiIsImltcG9ydCB0eXBlIHsgQXdhaXRhYmxlLCBEb25lQ2FsbGJhY2ssIFJ1bnRpbWVDb250ZXh0LCBTdWl0ZUNvbGxlY3RvciwgVGVzdEZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBjb250ZXh0OiBSdW50aW1lQ29udGV4dCA9IHtcbiAgdGFza3M6IFtdLFxuICBjdXJyZW50U3VpdGU6IG51bGwsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0VGFzayh0YXNrOiBTdWl0ZUNvbGxlY3Rvcikge1xuICBjb250ZXh0LmN1cnJlbnRTdWl0ZT8udGFza3MucHVzaCh0YXNrKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFN1aXRlKHN1aXRlOiBTdWl0ZUNvbGxlY3RvciwgZm46ICgoKSA9PiBBd2FpdGFibGU8dm9pZD4pKSB7XG4gIGNvbnN0IHByZXYgPSBjb250ZXh0LmN1cnJlbnRTdWl0ZVxuICBjb250ZXh0LmN1cnJlbnRTdWl0ZSA9IHN1aXRlXG4gIGF3YWl0IGZuKClcbiAgY29udGV4dC5jdXJyZW50U3VpdGUgPSBwcmV2XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VGVzdFRpbWVvdXQoKSB7XG4gIHJldHVybiBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fIS5jb25maWchLnRlc3RUaW1lb3V0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0SG9va1RpbWVvdXQoKSB7XG4gIHJldHVybiBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fIS5jb25maWchLmhvb2tUaW1lb3V0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUIGV4dGVuZHMoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpPihmbjogVCwgX3RpbWVvdXQ/OiBudW1iZXIpOiBUIHtcbiAgY29uc3QgdGltZW91dCA9IF90aW1lb3V0ID8/IGdldERlZmF1bHRUZXN0VGltZW91dCgpXG4gIGlmICh0aW1lb3V0IDw9IDAgfHwgdGltZW91dCA9PT0gSW5maW5pdHkpXG4gICAgcmV0dXJuIGZuXG5cbiAgcmV0dXJuICgoLi4uYXJnczogKFQgZXh0ZW5kcyAoKC4uLmFyZ3M6IGluZmVyIEEpID0+IGFueSkgPyBBIDogbmV2ZXIpKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbZm4oLi4uYXJncyksIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgVGVzdCB0aW1lZCBvdXQgaW4gJHt0aW1lb3V0fW1zLmApKVxuICAgICAgfSwgdGltZW91dClcbiAgICAgIHRpbWVyLnVucmVmKClcbiAgICB9KV0pIGFzIEF3YWl0YWJsZTx2b2lkPlxuICB9KSBhcyBUXG59XG5cbmZ1bmN0aW9uIGVuc3VyZUFzeW5jVGVzdChmbjogVGVzdEZ1bmN0aW9uKTogKCkgPT4gQXdhaXRhYmxlPHZvaWQ+IHtcbiAgaWYgKCFmbi5sZW5ndGgpXG4gICAgcmV0dXJuIGZuIGFzICgpID0+IEF3YWl0YWJsZTx2b2lkPlxuXG4gIHJldHVybiAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZG9uZTogRG9uZUNhbGxiYWNrID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhcmdzWzBdIC8vIHJlamVjdCBvbiB0cnV0aHkgdmFsdWVzXG4gICAgICA/IHJlamVjdChhcmdzWzBdKVxuICAgICAgOiByZXNvbHZlKClcbiAgICBmbihkb25lKVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGVzdChmbjogVGVzdEZ1bmN0aW9uLCB0aW1lb3V0PzogbnVtYmVyKTogKCkgPT4gQXdhaXRhYmxlPHZvaWQ+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGVuc3VyZUFzeW5jVGVzdChmbiksIHRpbWVvdXQpXG59XG4iLCJpbXBvcnQgdHlwZSB7IEF3YWl0YWJsZSwgU3VpdGUsIFN1aXRlSG9va3MsIFRlc3QgfSBmcm9tICcuLi90eXBlcydcblxuLy8gdXNlIFdlYWtNYXAgaGVyZSB0byBtYWtlIHRoZSBUZXN0IGFuZCBTdWl0ZSBvYmplY3Qgc2VyaWFsaXphYmxlXG5jb25zdCBmbk1hcCA9IG5ldyBXZWFrTWFwKClcbmNvbnN0IGhvb2tzTWFwID0gbmV3IFdlYWtNYXAoKVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm4oa2V5OiBUZXN0LCBmbjogKCkgPT4gQXdhaXRhYmxlPHZvaWQ+KSB7XG4gIGZuTWFwLnNldChrZXksIGZuKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm4oa2V5OiBUZXN0KTogKCkgPT4gQXdhaXRhYmxlPHZvaWQ+IHtcbiAgcmV0dXJuIGZuTWFwLmdldChrZXkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIb29rcyhrZXk6IFN1aXRlLCBob29rczogU3VpdGVIb29rcykge1xuICBob29rc01hcC5zZXQoa2V5LCBob29rcylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tzKGtleTogU3VpdGUpOiBTdWl0ZUhvb2tzIHtcbiAgcmV0dXJuIGhvb2tzTWFwLmdldChrZXkpXG59XG4iLCJpbXBvcnQgdHlwZSB7IEZpbGUsIFJ1bk1vZGUsIFN1aXRlLCBTdWl0ZUNvbGxlY3RvciwgU3VpdGVIb29rcywgVGVzdCwgVGVzdENvbGxlY3RvciwgVGVzdEZhY3RvcnksIFRlc3RGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlQ2hhaW5hYmxlIH0gZnJvbSAnLi9jaGFpbidcbmltcG9ydCB7IGNvbGxlY3RUYXNrLCBjb250ZXh0LCBub3JtYWxpemVUZXN0LCBydW5XaXRoU3VpdGUgfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgeyBnZXRIb29rcywgc2V0Rm4sIHNldEhvb2tzIH0gZnJvbSAnLi9tYXAnXG5cbi8vIGFwaXNcbmV4cG9ydCBjb25zdCBzdWl0ZSA9IGNyZWF0ZVN1aXRlKClcbmV4cG9ydCBjb25zdCB0ZXN0OiBUZXN0Q29sbGVjdG9yID0gY3JlYXRlQ2hhaW5hYmxlKFxuICBbJ2NvbmN1cnJlbnQnLCAnc2tpcCcsICdvbmx5JywgJ3RvZG8nLCAnZmFpbHMnXSxcbiAgZnVuY3Rpb24obmFtZTogc3RyaW5nLCBmbj86IFRlc3RGdW5jdGlvbiwgdGltZW91dD86IG51bWJlcikge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdW50eXBlZCBpbnRlcm5hbCBwcm9wXG4gICAgZ2V0Q3VycmVudFN1aXRlKCkudGVzdC5mbi5jYWxsKHRoaXMsIG5hbWUsIGZuLCB0aW1lb3V0KVxuICB9LFxuKVxuXG4vLyBhbGlhc1xuZXhwb3J0IGNvbnN0IGRlc2NyaWJlID0gc3VpdGVcbmV4cG9ydCBjb25zdCBpdCA9IHRlc3RcblxuLy8gaW1wbGVtZW50YXRpb25zXG5leHBvcnQgY29uc3QgZGVmYXVsdFN1aXRlID0gc3VpdGUoJycpXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbnRleHQoKSB7XG4gIGNvbnRleHQudGFza3MubGVuZ3RoID0gMFxuICBkZWZhdWx0U3VpdGUuY2xlYXIoKVxuICBjb250ZXh0LmN1cnJlbnRTdWl0ZSA9IGRlZmF1bHRTdWl0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFN1aXRlKCkge1xuICByZXR1cm4gY29udGV4dC5jdXJyZW50U3VpdGUgfHwgZGVmYXVsdFN1aXRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWl0ZUhvb2tzKCkge1xuICByZXR1cm4ge1xuICAgIGJlZm9yZUFsbDogW10sXG4gICAgYWZ0ZXJBbGw6IFtdLFxuICAgIGJlZm9yZUVhY2g6IFtdLFxuICAgIGFmdGVyRWFjaDogW10sXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3VpdGVDb2xsZWN0b3IobmFtZTogc3RyaW5nLCBmYWN0b3J5OiBUZXN0RmFjdG9yeSA9ICgpID0+IHsgfSwgbW9kZTogUnVuTW9kZSwgY29uY3VycmVudD86IGJvb2xlYW4pIHtcbiAgY29uc3QgdGFza3M6IChUZXN0IHwgU3VpdGUgfCBTdWl0ZUNvbGxlY3RvcilbXSA9IFtdXG4gIGNvbnN0IGZhY3RvcnlRdWV1ZTogKFRlc3QgfCBTdWl0ZSB8IFN1aXRlQ29sbGVjdG9yKVtdID0gW11cblxuICBsZXQgc3VpdGU6IFN1aXRlXG5cbiAgaW5pdFN1aXRlKClcblxuICBjb25zdCB0ZXN0ID0gY3JlYXRlQ2hhaW5hYmxlKFxuICAgIFsnY29uY3VycmVudCcsICdza2lwJywgJ29ubHknLCAndG9kbycsICdmYWlscyddLFxuICAgIGZ1bmN0aW9uKG5hbWU6IHN0cmluZywgZm4/OiBUZXN0RnVuY3Rpb24sIHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLm9ubHkgPyAnb25seScgOiB0aGlzLnNraXAgPyAnc2tpcCcgOiB0aGlzLnRvZG8gPyAndG9kbycgOiAncnVuJ1xuXG4gICAgICBjb25zdCB0ZXN0OiBUZXN0ID0ge1xuICAgICAgICBpZDogJycsXG4gICAgICAgIHR5cGU6ICd0ZXN0JyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgc3VpdGU6IHVuZGVmaW5lZCEsXG4gICAgICAgIGZhaWxzOiB0aGlzLmZhaWxzLFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29uY3VycmVudCB8fCBjb25jdXJyZW50KVxuICAgICAgICB0ZXN0LmNvbmN1cnJlbnQgPSB0cnVlXG5cbiAgICAgIHNldEZuKHRlc3QsIG5vcm1hbGl6ZVRlc3QoZm4gfHwgbm9vcCwgdGltZW91dCkpXG4gICAgICB0YXNrcy5wdXNoKHRlc3QpXG4gICAgfSxcbiAgKVxuXG4gIGNvbnN0IGNvbGxlY3RvcjogU3VpdGVDb2xsZWN0b3IgPSB7XG4gICAgdHlwZTogJ2NvbGxlY3RvcicsXG4gICAgbmFtZSxcbiAgICBtb2RlLFxuICAgIHRlc3QsXG4gICAgdGFza3MsXG4gICAgY29sbGVjdCxcbiAgICBjbGVhcixcbiAgICBvbjogYWRkSG9vayxcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEhvb2s8VCBleHRlbmRzIGtleW9mIFN1aXRlSG9va3M+KG5hbWU6IFQsIC4uLmZuOiBTdWl0ZUhvb2tzW1RdKSB7XG4gICAgZ2V0SG9va3Moc3VpdGUpW25hbWVdLnB1c2goLi4uZm4gYXMgYW55KVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdFN1aXRlKCkge1xuICAgIHN1aXRlID0ge1xuICAgICAgaWQ6ICcnLFxuICAgICAgdHlwZTogJ3N1aXRlJyxcbiAgICAgIG5hbWUsXG4gICAgICBtb2RlLFxuICAgICAgdGFza3M6IFtdLFxuICAgIH1cbiAgICBzZXRIb29rcyhzdWl0ZSwgY3JlYXRlU3VpdGVIb29rcygpKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGFza3MubGVuZ3RoID0gMFxuICAgIGZhY3RvcnlRdWV1ZS5sZW5ndGggPSAwXG4gICAgaW5pdFN1aXRlKClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3QoZmlsZT86IEZpbGUpIHtcbiAgICBmYWN0b3J5UXVldWUubGVuZ3RoID0gMFxuICAgIGlmIChmYWN0b3J5KVxuICAgICAgYXdhaXQgcnVuV2l0aFN1aXRlKGNvbGxlY3RvciwgKCkgPT4gZmFjdG9yeSh0ZXN0KSlcblxuICAgIGNvbnN0IGFsbENoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBbLi4uZmFjdG9yeVF1ZXVlLCAuLi50YXNrc11cbiAgICAgICAgLm1hcChpID0+IGkudHlwZSA9PT0gJ2NvbGxlY3RvcicgPyBpLmNvbGxlY3QoZmlsZSkgOiBpKSxcbiAgICApXG5cbiAgICBzdWl0ZS5maWxlID0gZmlsZVxuICAgIHN1aXRlLnRhc2tzID0gYWxsQ2hpbGRyZW5cblxuICAgIGFsbENoaWxkcmVuLmZvckVhY2goKHRhc2spID0+IHtcbiAgICAgIHRhc2suc3VpdGUgPSBzdWl0ZVxuICAgICAgaWYgKGZpbGUpXG4gICAgICAgIHRhc2suZmlsZSA9IGZpbGVcbiAgICB9KVxuXG4gICAgcmV0dXJuIHN1aXRlXG4gIH1cblxuICBjb2xsZWN0VGFzayhjb2xsZWN0b3IpXG5cbiAgcmV0dXJuIGNvbGxlY3RvclxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdWl0ZSgpIHtcbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZShcbiAgICBbJ2NvbmN1cnJlbnQnLCAnc2tpcCcsICdvbmx5JywgJ3RvZG8nXSxcbiAgICBmdW5jdGlvbihuYW1lOiBzdHJpbmcsIGZhY3Rvcnk/OiBUZXN0RmFjdG9yeSkge1xuICAgICAgY29uc3QgbW9kZSA9IHRoaXMub25seSA/ICdvbmx5JyA6IHRoaXMuc2tpcCA/ICdza2lwJyA6IHRoaXMudG9kbyA/ICd0b2RvJyA6ICdydW4nXG4gICAgICByZXR1cm4gY3JlYXRlU3VpdGVDb2xsZWN0b3IobmFtZSwgZmFjdG9yeSwgbW9kZSwgdGhpcy5jb25jdXJyZW50KVxuICAgIH0sXG4gIClcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQU5TSV9CQUNLR1JPVU5EX09GRlNFVCA9IDEwO1xuXG5jb25zdCB3cmFwQW5zaTI1NiA9IChvZmZzZXQgPSAwKSA9PiBjb2RlID0+IGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xuXG5jb25zdCB3cmFwQW5zaTE2bSA9IChvZmZzZXQgPSAwKSA9PiAocmVkLCBncmVlbiwgYmx1ZSkgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07Mjske3JlZH07JHtncmVlbn07JHtibHVlfW1gO1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRtb2RpZmllcjoge1xuXHRcdFx0cmVzZXQ6IFswLCAwXSxcblx0XHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0XHRkaW06IFsyLCAyMl0sXG5cdFx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0XHRvdmVybGluZTogWzUzLCA1NV0sXG5cdFx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XVxuXHRcdH0sXG5cdFx0Y29sb3I6IHtcblx0XHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRcdGN5YW46IFszNiwgMzldLFxuXHRcdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldXG5cdFx0fSxcblx0XHRiZ0NvbG9yOiB7XG5cdFx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV1cblx0XHR9XG5cdH07XG5cblx0Ly8gQWxpYXMgYnJpZ2h0IGJsYWNrIGFzIGdyYXkgKGFuZCBncmV5KVxuXHRzdHlsZXMuY29sb3IuZ3JheSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmF5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblx0c3R5bGVzLmNvbG9yLmdyZXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JleSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHN0eWxlcy5jb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bSgpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IChyZWQsIGdyZWVuLCBibHVlKSA9PiB7XG5cdFx0XHRcdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdFx0XHRcdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRcdFx0XHRpZiAocmVkID09PSBncmVlbiAmJiBncmVlbiA9PT0gYmx1ZSkge1xuXHRcdFx0XHRcdGlmIChyZWQgPCA4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMTY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHJlZCA+IDI0OCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDIzMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHJlZCAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAxNiArXG5cdFx0XHRcdFx0KDM2ICogTWF0aC5yb3VuZChyZWQgLyAyNTUgKiA1KSkgK1xuXHRcdFx0XHRcdCg2ICogTWF0aC5yb3VuZChncmVlbiAvIDI1NSAqIDUpKSArXG5cdFx0XHRcdFx0TWF0aC5yb3VuZChibHVlIC8gMjU1ICogNSk7XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9LFxuXHRcdGhleFRvUmdiOiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0Y2hlcyA9IC8oPzxjb2xvclN0cmluZz5bYS1mXFxkXXs2fXxbYS1mXFxkXXszfSkvaS5leGVjKGhleC50b1N0cmluZygxNikpO1xuXHRcdFx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHtjb2xvclN0cmluZ30gPSBtYXRjaGVzLmdyb3VwcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBjb2xvclN0cmluZy5zcGxpdCgnJykubWFwKGNoYXJhY3RlciA9PiBjaGFyYWN0ZXIgKyBjaGFyYWN0ZXIpLmpvaW4oJycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaW50ZWdlciA9IE51bWJlci5wYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0KGludGVnZXIgPj4gMTYpICYgMHhGRixcblx0XHRcdFx0XHQoaW50ZWdlciA+PiA4KSAmIDB4RkYsXG5cdFx0XHRcdFx0aW50ZWdlciAmIDB4RkZcblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZVxuXHRcdH0sXG5cdFx0aGV4VG9BbnNpMjU2OiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHN0eWxlcy5yZ2JUb0Fuc2kyNTYoLi4uc3R5bGVzLmhleFRvUmdiKGhleCkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbi8vIE1ha2UgdGhlIGV4cG9ydCBpbW11dGFibGVcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRnZXQ6IGFzc2VtYmxlU3R5bGVzXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByaW50SXRlcmF0b3JFbnRyaWVzID0gcHJpbnRJdGVyYXRvckVudHJpZXM7XG5leHBvcnRzLnByaW50SXRlcmF0b3JWYWx1ZXMgPSBwcmludEl0ZXJhdG9yVmFsdWVzO1xuZXhwb3J0cy5wcmludExpc3RJdGVtcyA9IHByaW50TGlzdEl0ZW1zO1xuZXhwb3J0cy5wcmludE9iamVjdFByb3BlcnRpZXMgPSBwcmludE9iamVjdFByb3BlcnRpZXM7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5jb25zdCBnZXRLZXlzT2ZFbnVtZXJhYmxlUHJvcGVydGllcyA9IChvYmplY3QsIGNvbXBhcmVLZXlzKSA9PiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpLnNvcnQoY29tcGFyZUtleXMpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpLmZvckVhY2goc3ltYm9sID0+IHtcbiAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltYm9sKS5lbnVtZXJhYmxlKSB7XG4gICAgICAgIGtleXMucHVzaChzeW1ib2wpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59O1xuLyoqXG4gKiBSZXR1cm4gZW50cmllcyAoZm9yIGV4YW1wbGUsIG9mIGEgbWFwKVxuICogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4gKiB3aXRob3V0IHN1cnJvdW5kaW5nIHB1bmN0dWF0aW9uIChmb3IgZXhhbXBsZSwgYnJhY2VzKVxuICovXG5cbmZ1bmN0aW9uIHByaW50SXRlcmF0b3JFbnRyaWVzKFxuICBpdGVyYXRvcixcbiAgY29uZmlnLFxuICBpbmRlbnRhdGlvbixcbiAgZGVwdGgsXG4gIHJlZnMsXG4gIHByaW50ZXIsIC8vIFRvbyBiYWQsIHNvIHNhZCB0aGF0IHNlcGFyYXRvciBmb3IgRUNNQVNjcmlwdCBNYXAgaGFzIGJlZW4gJyA9PiAnXG4gIC8vIFdoYXQgYSBkaXN0cmFjdGluZyBkaWZmIGlmIHlvdSBjaGFuZ2UgYSBkYXRhIHN0cnVjdHVyZSB0by9mcm9tXG4gIC8vIEVDTUFTY3JpcHQgT2JqZWN0IG9yIEltbXV0YWJsZS5NYXAvT3JkZXJlZE1hcCB3aGljaCB1c2UgdGhlIGRlZmF1bHQuXG4gIHNlcGFyYXRvciA9ICc6ICdcbikge1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGxldCBjdXJyZW50ID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIGlmICghY3VycmVudC5kb25lKSB7XG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXI7XG4gICAgY29uc3QgaW5kZW50YXRpb25OZXh0ID0gaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50O1xuXG4gICAgd2hpbGUgKCFjdXJyZW50LmRvbmUpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwcmludGVyKFxuICAgICAgICBjdXJyZW50LnZhbHVlWzBdLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZGVudGF0aW9uTmV4dCxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIHJlZnNcbiAgICAgICk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByaW50ZXIoXG4gICAgICAgIGN1cnJlbnQudmFsdWVbMV0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb25OZXh0LFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgcmVmc1xuICAgICAgKTtcbiAgICAgIHJlc3VsdCArPSBpbmRlbnRhdGlvbk5leHQgKyBuYW1lICsgc2VwYXJhdG9yICsgdmFsdWU7XG4gICAgICBjdXJyZW50ID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICBpZiAoIWN1cnJlbnQuZG9uZSkge1xuICAgICAgICByZXN1bHQgKz0gJywnICsgY29uZmlnLnNwYWNpbmdJbm5lcjtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbmZpZy5taW4pIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlciArIGluZGVudGF0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJuIHZhbHVlcyAoZm9yIGV4YW1wbGUsIG9mIGEgc2V0KVxuICogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4gKiB3aXRob3V0IHN1cnJvdW5kaW5nIHB1bmN0dWF0aW9uIChicmFjZXMgb3IgYnJhY2tldHMpXG4gKi9cblxuZnVuY3Rpb24gcHJpbnRJdGVyYXRvclZhbHVlcyhcbiAgaXRlcmF0b3IsXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb24sXG4gIGRlcHRoLFxuICByZWZzLFxuICBwcmludGVyXG4pIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgY3VycmVudCA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICBpZiAoIWN1cnJlbnQuZG9uZSkge1xuICAgIHJlc3VsdCArPSBjb25maWcuc3BhY2luZ091dGVyO1xuICAgIGNvbnN0IGluZGVudGF0aW9uTmV4dCA9IGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudDtcblxuICAgIHdoaWxlICghY3VycmVudC5kb25lKSB7XG4gICAgICByZXN1bHQgKz1cbiAgICAgICAgaW5kZW50YXRpb25OZXh0ICtcbiAgICAgICAgcHJpbnRlcihjdXJyZW50LnZhbHVlLCBjb25maWcsIGluZGVudGF0aW9uTmV4dCwgZGVwdGgsIHJlZnMpO1xuICAgICAgY3VycmVudCA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgaWYgKCFjdXJyZW50LmRvbmUpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJyArIGNvbmZpZy5zcGFjaW5nSW5uZXI7XG4gICAgICB9IGVsc2UgaWYgKCFjb25maWcubWluKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXIgKyBpbmRlbnRhdGlvbjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldHVybiBpdGVtcyAoZm9yIGV4YW1wbGUsIG9mIGFuIGFycmF5KVxuICogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4gKiB3aXRob3V0IHN1cnJvdW5kaW5nIHB1bmN0dWF0aW9uIChmb3IgZXhhbXBsZSwgYnJhY2tldHMpXG4gKiovXG5cbmZ1bmN0aW9uIHByaW50TGlzdEl0ZW1zKGxpc3QsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG4gIGxldCByZXN1bHQgPSAnJztcblxuICBpZiAobGlzdC5sZW5ndGgpIHtcbiAgICByZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlcjtcbiAgICBjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdCArPSBpbmRlbnRhdGlvbk5leHQ7XG5cbiAgICAgIGlmIChpIGluIGxpc3QpIHtcbiAgICAgICAgcmVzdWx0ICs9IHByaW50ZXIobGlzdFtpXSwgY29uZmlnLCBpbmRlbnRhdGlvbk5leHQsIGRlcHRoLCByZWZzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGkgPCBsaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJyArIGNvbmZpZy5zcGFjaW5nSW5uZXI7XG4gICAgICB9IGVsc2UgaWYgKCFjb25maWcubWluKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXIgKyBpbmRlbnRhdGlvbjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldHVybiBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdFxuICogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4gKiB3aXRob3V0IHN1cnJvdW5kaW5nIHB1bmN0dWF0aW9uIChmb3IgZXhhbXBsZSwgYnJhY2VzKVxuICovXG5cbmZ1bmN0aW9uIHByaW50T2JqZWN0UHJvcGVydGllcyh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgY29uc3Qga2V5cyA9IGdldEtleXNPZkVudW1lcmFibGVQcm9wZXJ0aWVzKHZhbCwgY29uZmlnLmNvbXBhcmVLZXlzKTtcblxuICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICByZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlcjtcbiAgICBjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBjb25zdCBuYW1lID0gcHJpbnRlcihrZXksIGNvbmZpZywgaW5kZW50YXRpb25OZXh0LCBkZXB0aCwgcmVmcyk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByaW50ZXIodmFsW2tleV0sIGNvbmZpZywgaW5kZW50YXRpb25OZXh0LCBkZXB0aCwgcmVmcyk7XG4gICAgICByZXN1bHQgKz0gaW5kZW50YXRpb25OZXh0ICsgbmFtZSArICc6ICcgKyB2YWx1ZTtcblxuICAgICAgaWYgKGkgPCBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJyArIGNvbmZpZy5zcGFjaW5nSW5uZXI7XG4gICAgICB9IGVsc2UgaWYgKCFjb25maWcubWluKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXIgKyBpbmRlbnRhdGlvbjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbnMgPSByZXF1aXJlKCcuLi9jb2xsZWN0aW9ucycpO1xuXG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGdsb2JhbDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gIH1cbn0pKCk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxbJ2plc3Qtc3ltYm9sLWRvLW5vdC10b3VjaCddIHx8IGdsb2JhbC5TeW1ib2w7XG5jb25zdCBhc3ltbWV0cmljTWF0Y2hlciA9XG4gIHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvclxuICAgID8gU3ltYm9sLmZvcignamVzdC5hc3ltbWV0cmljTWF0Y2hlcicpXG4gICAgOiAweDEzNTdhNTtcbmNvbnN0IFNQQUNFID0gJyAnO1xuXG5jb25zdCBzZXJpYWxpemUgPSAodmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikgPT4ge1xuICBjb25zdCBzdHJpbmdlZFZhbHVlID0gdmFsLnRvU3RyaW5nKCk7XG5cbiAgaWYgKFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdBcnJheUNvbnRhaW5pbmcnIHx8XG4gICAgc3RyaW5nZWRWYWx1ZSA9PT0gJ0FycmF5Tm90Q29udGFpbmluZydcbiAgKSB7XG4gICAgaWYgKCsrZGVwdGggPiBjb25maWcubWF4RGVwdGgpIHtcbiAgICAgIHJldHVybiAnWycgKyBzdHJpbmdlZFZhbHVlICsgJ10nO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBzdHJpbmdlZFZhbHVlICtcbiAgICAgIFNQQUNFICtcbiAgICAgICdbJyArXG4gICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50TGlzdEl0ZW1zKShcbiAgICAgICAgdmFsLnNhbXBsZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIHJlZnMsXG4gICAgICAgIHByaW50ZXJcbiAgICAgICkgK1xuICAgICAgJ10nXG4gICAgKTtcbiAgfVxuXG4gIGlmIChcbiAgICBzdHJpbmdlZFZhbHVlID09PSAnT2JqZWN0Q29udGFpbmluZycgfHxcbiAgICBzdHJpbmdlZFZhbHVlID09PSAnT2JqZWN0Tm90Q29udGFpbmluZydcbiAgKSB7XG4gICAgaWYgKCsrZGVwdGggPiBjb25maWcubWF4RGVwdGgpIHtcbiAgICAgIHJldHVybiAnWycgKyBzdHJpbmdlZFZhbHVlICsgJ10nO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBzdHJpbmdlZFZhbHVlICtcbiAgICAgIFNQQUNFICtcbiAgICAgICd7JyArXG4gICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50T2JqZWN0UHJvcGVydGllcykoXG4gICAgICAgIHZhbC5zYW1wbGUsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgIGRlcHRoLFxuICAgICAgICByZWZzLFxuICAgICAgICBwcmludGVyXG4gICAgICApICtcbiAgICAgICd9J1xuICAgICk7XG4gIH1cblxuICBpZiAoXG4gICAgc3RyaW5nZWRWYWx1ZSA9PT0gJ1N0cmluZ01hdGNoaW5nJyB8fFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdTdHJpbmdOb3RNYXRjaGluZydcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN0cmluZ2VkVmFsdWUgK1xuICAgICAgU1BBQ0UgK1xuICAgICAgcHJpbnRlcih2YWwuc2FtcGxlLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcylcbiAgICApO1xuICB9XG5cbiAgaWYgKFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdTdHJpbmdDb250YWluaW5nJyB8fFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdTdHJpbmdOb3RDb250YWluaW5nJ1xuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3RyaW5nZWRWYWx1ZSArXG4gICAgICBTUEFDRSArXG4gICAgICBwcmludGVyKHZhbC5zYW1wbGUsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsLnRvQXN5bW1ldHJpY01hdGNoZXIoKTtcbn07XG5cbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuXG5jb25zdCB0ZXN0ID0gdmFsID0+IHZhbCAmJiB2YWwuJCR0eXBlb2YgPT09IGFzeW1tZXRyaWNNYXRjaGVyO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoe29ubHlGaXJzdCA9IGZhbHNlfSA9IHt9KSA9PiB7XG5cdGNvbnN0IHBhdHRlcm4gPSBbXG5cdFx0J1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuXHRcdCcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW50cXJ5PT48fl0pKSdcblx0XS5qb2luKCd8Jyk7XG5cblx0cmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgb25seUZpcnN0ID8gdW5kZWZpbmVkIDogJ2cnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfYW5zaVJlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCdhbnNpLXJlZ2V4JykpO1xuXG52YXIgX2Fuc2lTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJ2Fuc2ktc3R5bGVzJykpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge2RlZmF1bHQ6IG9ian07XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmNvbnN0IHRvSHVtYW5SZWFkYWJsZUFuc2kgPSB0ZXh0ID0+XG4gIHRleHQucmVwbGFjZSgoMCwgX2Fuc2lSZWdleC5kZWZhdWx0KSgpLCBtYXRjaCA9PiB7XG4gICAgc3dpdGNoIChtYXRjaCkge1xuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LnJlZC5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5ncmVlbi5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5jeWFuLmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmdyYXkuY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQud2hpdGUuY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQueWVsbG93LmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmJnUmVkLmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmJnR3JlZW4uY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuYmdZZWxsb3cuY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuaW52ZXJzZS5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5kaW0uY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuYm9sZC5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5yZXNldC5vcGVuOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LnJlc2V0LmNsb3NlOlxuICAgICAgICByZXR1cm4gJzwvPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5yZWQub3BlbjpcbiAgICAgICAgcmV0dXJuICc8cmVkPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5ncmVlbi5vcGVuOlxuICAgICAgICByZXR1cm4gJzxncmVlbj4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuY3lhbi5vcGVuOlxuICAgICAgICByZXR1cm4gJzxjeWFuPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5ncmF5Lm9wZW46XG4gICAgICAgIHJldHVybiAnPGdyYXk+JztcblxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LndoaXRlLm9wZW46XG4gICAgICAgIHJldHVybiAnPHdoaXRlPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC55ZWxsb3cub3BlbjpcbiAgICAgICAgcmV0dXJuICc8eWVsbG93Pic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5iZ1JlZC5vcGVuOlxuICAgICAgICByZXR1cm4gJzxiZ1JlZD4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuYmdHcmVlbi5vcGVuOlxuICAgICAgICByZXR1cm4gJzxiZ0dyZWVuPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5iZ1llbGxvdy5vcGVuOlxuICAgICAgICByZXR1cm4gJzxiZ1llbGxvdz4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuaW52ZXJzZS5vcGVuOlxuICAgICAgICByZXR1cm4gJzxpbnZlcnNlPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5kaW0ub3BlbjpcbiAgICAgICAgcmV0dXJuICc8ZGltPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5ib2xkLm9wZW46XG4gICAgICAgIHJldHVybiAnPGJvbGQ+JztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSk7XG5cbmNvbnN0IHRlc3QgPSB2YWwgPT5cbiAgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgISF2YWwubWF0Y2goKDAsIF9hbnNpUmVnZXguZGVmYXVsdCkoKSk7XG5cbmV4cG9ydHMudGVzdCA9IHRlc3Q7XG5cbmNvbnN0IHNlcmlhbGl6ZSA9ICh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PlxuICBwcmludGVyKHRvSHVtYW5SZWFkYWJsZUFuc2kodmFsKSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMpO1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcbmNvbnN0IHBsdWdpbiA9IHtcbiAgc2VyaWFsaXplLFxuICB0ZXN0XG59O1xudmFyIF9kZWZhdWx0ID0gcGx1Z2luO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbnMgPSByZXF1aXJlKCcuLi9jb2xsZWN0aW9ucycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGxvY2FsL2Jhbi10eXBlcy1ldmVudHVhbGx5ICovXG5jb25zdCBTUEFDRSA9ICcgJztcbmNvbnN0IE9CSkVDVF9OQU1FUyA9IFsnRE9NU3RyaW5nTWFwJywgJ05hbWVkTm9kZU1hcCddO1xuY29uc3QgQVJSQVlfUkVHRVhQID0gL14oSFRNTFxcdypDb2xsZWN0aW9ufE5vZGVMaXN0KSQvO1xuXG5jb25zdCB0ZXN0TmFtZSA9IG5hbWUgPT5cbiAgT0JKRUNUX05BTUVTLmluZGV4T2YobmFtZSkgIT09IC0xIHx8IEFSUkFZX1JFR0VYUC50ZXN0KG5hbWUpO1xuXG5jb25zdCB0ZXN0ID0gdmFsID0+XG4gIHZhbCAmJlxuICB2YWwuY29uc3RydWN0b3IgJiZcbiAgISF2YWwuY29uc3RydWN0b3IubmFtZSAmJlxuICB0ZXN0TmFtZSh2YWwuY29uc3RydWN0b3IubmFtZSk7XG5cbmV4cG9ydHMudGVzdCA9IHRlc3Q7XG5cbmNvbnN0IGlzTmFtZWROb2RlTWFwID0gY29sbGVjdGlvbiA9PlxuICBjb2xsZWN0aW9uLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdOYW1lZE5vZGVNYXAnO1xuXG5jb25zdCBzZXJpYWxpemUgPSAoY29sbGVjdGlvbiwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgY29uc3QgbmFtZSA9IGNvbGxlY3Rpb24uY29uc3RydWN0b3IubmFtZTtcblxuICBpZiAoKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aCkge1xuICAgIHJldHVybiAnWycgKyBuYW1lICsgJ10nO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAoY29uZmlnLm1pbiA/ICcnIDogbmFtZSArIFNQQUNFKSArXG4gICAgKE9CSkVDVF9OQU1FUy5pbmRleE9mKG5hbWUpICE9PSAtMVxuICAgICAgPyAneycgK1xuICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50T2JqZWN0UHJvcGVydGllcykoXG4gICAgICAgICAgaXNOYW1lZE5vZGVNYXAoY29sbGVjdGlvbilcbiAgICAgICAgICAgID8gQXJyYXkuZnJvbShjb2xsZWN0aW9uKS5yZWR1Y2UoKHByb3BzLCBhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wc1thdHRyaWJ1dGUubmFtZV0gPSBhdHRyaWJ1dGUudmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICAgICAgICB9LCB7fSlcbiAgICAgICAgICAgIDogey4uLmNvbGxlY3Rpb259LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICByZWZzLFxuICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgKSArXG4gICAgICAgICd9J1xuICAgICAgOiAnWycgK1xuICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50TGlzdEl0ZW1zKShcbiAgICAgICAgICBBcnJheS5mcm9tKGNvbGxlY3Rpb24pLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICByZWZzLFxuICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgKSArXG4gICAgICAgICddJylcbiAgKTtcbn07XG5cbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBlc2NhcGVIVE1MO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5mdW5jdGlvbiBlc2NhcGVIVE1MKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludFRleHQgPVxuICBleHBvcnRzLnByaW50UHJvcHMgPVxuICBleHBvcnRzLnByaW50RWxlbWVudEFzTGVhZiA9XG4gIGV4cG9ydHMucHJpbnRFbGVtZW50ID1cbiAgZXhwb3J0cy5wcmludENvbW1lbnQgPVxuICBleHBvcnRzLnByaW50Q2hpbGRyZW4gPVxuICAgIHZvaWQgMDtcblxudmFyIF9lc2NhcGVIVE1MID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL2VzY2FwZUhUTUwnKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ZGVmYXVsdDogb2JqfTtcbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLy8gUmV0dXJuIGVtcHR5IHN0cmluZyBpZiBrZXlzIGlzIGVtcHR5LlxuY29uc3QgcHJpbnRQcm9wcyA9IChrZXlzLCBwcm9wcywgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgY29uc3QgaW5kZW50YXRpb25OZXh0ID0gaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50O1xuICBjb25zdCBjb2xvcnMgPSBjb25maWcuY29sb3JzO1xuICByZXR1cm4ga2V5c1xuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNba2V5XTtcbiAgICAgIGxldCBwcmludGVkID0gcHJpbnRlcih2YWx1ZSwgY29uZmlnLCBpbmRlbnRhdGlvbk5leHQsIGRlcHRoLCByZWZzKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHByaW50ZWQuaW5kZXhPZignXFxuJykgIT09IC0xKSB7XG4gICAgICAgICAgcHJpbnRlZCA9XG4gICAgICAgICAgICBjb25maWcuc3BhY2luZ091dGVyICtcbiAgICAgICAgICAgIGluZGVudGF0aW9uTmV4dCArXG4gICAgICAgICAgICBwcmludGVkICtcbiAgICAgICAgICAgIGNvbmZpZy5zcGFjaW5nT3V0ZXIgK1xuICAgICAgICAgICAgaW5kZW50YXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBwcmludGVkID0gJ3snICsgcHJpbnRlZCArICd9JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgY29uZmlnLnNwYWNpbmdJbm5lciArXG4gICAgICAgIGluZGVudGF0aW9uICtcbiAgICAgICAgY29sb3JzLnByb3Aub3BlbiArXG4gICAgICAgIGtleSArXG4gICAgICAgIGNvbG9ycy5wcm9wLmNsb3NlICtcbiAgICAgICAgJz0nICtcbiAgICAgICAgY29sb3JzLnZhbHVlLm9wZW4gK1xuICAgICAgICBwcmludGVkICtcbiAgICAgICAgY29sb3JzLnZhbHVlLmNsb3NlXG4gICAgICApO1xuICAgIH0pXG4gICAgLmpvaW4oJycpO1xufTsgLy8gUmV0dXJuIGVtcHR5IHN0cmluZyBpZiBjaGlsZHJlbiBpcyBlbXB0eS5cblxuZXhwb3J0cy5wcmludFByb3BzID0gcHJpbnRQcm9wcztcblxuY29uc3QgcHJpbnRDaGlsZHJlbiA9IChjaGlsZHJlbiwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+XG4gIGNoaWxkcmVuXG4gICAgLm1hcChcbiAgICAgIGNoaWxkID0+XG4gICAgICAgIGNvbmZpZy5zcGFjaW5nT3V0ZXIgK1xuICAgICAgICBpbmRlbnRhdGlvbiArXG4gICAgICAgICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBwcmludFRleHQoY2hpbGQsIGNvbmZpZylcbiAgICAgICAgICA6IHByaW50ZXIoY2hpbGQsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKSlcbiAgICApXG4gICAgLmpvaW4oJycpO1xuXG5leHBvcnRzLnByaW50Q2hpbGRyZW4gPSBwcmludENoaWxkcmVuO1xuXG5jb25zdCBwcmludFRleHQgPSAodGV4dCwgY29uZmlnKSA9PiB7XG4gIGNvbnN0IGNvbnRlbnRDb2xvciA9IGNvbmZpZy5jb2xvcnMuY29udGVudDtcbiAgcmV0dXJuIChcbiAgICBjb250ZW50Q29sb3Iub3BlbiArICgwLCBfZXNjYXBlSFRNTC5kZWZhdWx0KSh0ZXh0KSArIGNvbnRlbnRDb2xvci5jbG9zZVxuICApO1xufTtcblxuZXhwb3J0cy5wcmludFRleHQgPSBwcmludFRleHQ7XG5cbmNvbnN0IHByaW50Q29tbWVudCA9IChjb21tZW50LCBjb25maWcpID0+IHtcbiAgY29uc3QgY29tbWVudENvbG9yID0gY29uZmlnLmNvbG9ycy5jb21tZW50O1xuICByZXR1cm4gKFxuICAgIGNvbW1lbnRDb2xvci5vcGVuICtcbiAgICAnPCEtLScgK1xuICAgICgwLCBfZXNjYXBlSFRNTC5kZWZhdWx0KShjb21tZW50KSArXG4gICAgJy0tPicgK1xuICAgIGNvbW1lbnRDb2xvci5jbG9zZVxuICApO1xufTsgLy8gU2VwYXJhdGUgdGhlIGZ1bmN0aW9ucyB0byBmb3JtYXQgcHJvcHMsIGNoaWxkcmVuLCBhbmQgZWxlbWVudCxcbi8vIHNvIGEgcGx1Z2luIGNvdWxkIG92ZXJyaWRlIGEgcGFydGljdWxhciBmdW5jdGlvbiwgaWYgbmVlZGVkLlxuLy8gVG9vIGJhZCwgc28gc2FkOiB0aGUgdHJhZGl0aW9uYWwgKGJ1dCB1bm5lY2Vzc2FyeSkgc3BhY2Vcbi8vIGluIGEgc2VsZi1jbG9zaW5nIHRhZ0NvbG9yIHJlcXVpcmVzIGEgc2Vjb25kIHRlc3Qgb2YgcHJpbnRlZFByb3BzLlxuXG5leHBvcnRzLnByaW50Q29tbWVudCA9IHByaW50Q29tbWVudDtcblxuY29uc3QgcHJpbnRFbGVtZW50ID0gKFxuICB0eXBlLFxuICBwcmludGVkUHJvcHMsXG4gIHByaW50ZWRDaGlsZHJlbixcbiAgY29uZmlnLFxuICBpbmRlbnRhdGlvblxuKSA9PiB7XG4gIGNvbnN0IHRhZ0NvbG9yID0gY29uZmlnLmNvbG9ycy50YWc7XG4gIHJldHVybiAoXG4gICAgdGFnQ29sb3Iub3BlbiArXG4gICAgJzwnICtcbiAgICB0eXBlICtcbiAgICAocHJpbnRlZFByb3BzICYmXG4gICAgICB0YWdDb2xvci5jbG9zZSArXG4gICAgICAgIHByaW50ZWRQcm9wcyArXG4gICAgICAgIGNvbmZpZy5zcGFjaW5nT3V0ZXIgK1xuICAgICAgICBpbmRlbnRhdGlvbiArXG4gICAgICAgIHRhZ0NvbG9yLm9wZW4pICtcbiAgICAocHJpbnRlZENoaWxkcmVuXG4gICAgICA/ICc+JyArXG4gICAgICAgIHRhZ0NvbG9yLmNsb3NlICtcbiAgICAgICAgcHJpbnRlZENoaWxkcmVuICtcbiAgICAgICAgY29uZmlnLnNwYWNpbmdPdXRlciArXG4gICAgICAgIGluZGVudGF0aW9uICtcbiAgICAgICAgdGFnQ29sb3Iub3BlbiArXG4gICAgICAgICc8LycgK1xuICAgICAgICB0eXBlXG4gICAgICA6IChwcmludGVkUHJvcHMgJiYgIWNvbmZpZy5taW4gPyAnJyA6ICcgJykgKyAnLycpICtcbiAgICAnPicgK1xuICAgIHRhZ0NvbG9yLmNsb3NlXG4gICk7XG59O1xuXG5leHBvcnRzLnByaW50RWxlbWVudCA9IHByaW50RWxlbWVudDtcblxuY29uc3QgcHJpbnRFbGVtZW50QXNMZWFmID0gKHR5cGUsIGNvbmZpZykgPT4ge1xuICBjb25zdCB0YWdDb2xvciA9IGNvbmZpZy5jb2xvcnMudGFnO1xuICByZXR1cm4gKFxuICAgIHRhZ0NvbG9yLm9wZW4gK1xuICAgICc8JyArXG4gICAgdHlwZSArXG4gICAgdGFnQ29sb3IuY2xvc2UgK1xuICAgICcg4oCmJyArXG4gICAgdGFnQ29sb3Iub3BlbiArXG4gICAgJyAvPicgK1xuICAgIHRhZ0NvbG9yLmNsb3NlXG4gICk7XG59O1xuXG5leHBvcnRzLnByaW50RWxlbWVudEFzTGVhZiA9IHByaW50RWxlbWVudEFzTGVhZjtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRlc3QgPSBleHBvcnRzLnNlcmlhbGl6ZSA9IGV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9tYXJrdXAgPSByZXF1aXJlKCcuL2xpYi9tYXJrdXAnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuY29uc3QgRUxFTUVOVF9OT0RFID0gMTtcbmNvbnN0IFRFWFRfTk9ERSA9IDM7XG5jb25zdCBDT01NRU5UX05PREUgPSA4O1xuY29uc3QgRlJBR01FTlRfTk9ERSA9IDExO1xuY29uc3QgRUxFTUVOVF9SRUdFWFAgPSAvXigoSFRNTHxTVkcpXFx3Kik/RWxlbWVudCQvO1xuXG5jb25zdCB0ZXN0SGFzQXR0cmlidXRlID0gdmFsID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbC5oYXNBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbicgJiYgdmFsLmhhc0F0dHJpYnV0ZSgnaXMnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCB0ZXN0Tm9kZSA9IHZhbCA9PiB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IHZhbC5jb25zdHJ1Y3Rvci5uYW1lO1xuICBjb25zdCB7bm9kZVR5cGUsIHRhZ05hbWV9ID0gdmFsO1xuICBjb25zdCBpc0N1c3RvbUVsZW1lbnQgPVxuICAgICh0eXBlb2YgdGFnTmFtZSA9PT0gJ3N0cmluZycgJiYgdGFnTmFtZS5pbmNsdWRlcygnLScpKSB8fFxuICAgIHRlc3RIYXNBdHRyaWJ1dGUodmFsKTtcbiAgcmV0dXJuIChcbiAgICAobm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJlxuICAgICAgKEVMRU1FTlRfUkVHRVhQLnRlc3QoY29uc3RydWN0b3JOYW1lKSB8fCBpc0N1c3RvbUVsZW1lbnQpKSB8fFxuICAgIChub2RlVHlwZSA9PT0gVEVYVF9OT0RFICYmIGNvbnN0cnVjdG9yTmFtZSA9PT0gJ1RleHQnKSB8fFxuICAgIChub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIGNvbnN0cnVjdG9yTmFtZSA9PT0gJ0NvbW1lbnQnKSB8fFxuICAgIChub2RlVHlwZSA9PT0gRlJBR01FTlRfTk9ERSAmJiBjb25zdHJ1Y3Rvck5hbWUgPT09ICdEb2N1bWVudEZyYWdtZW50JylcbiAgKTtcbn07XG5cbmNvbnN0IHRlc3QgPSB2YWwgPT4ge1xuICB2YXIgX3ZhbCRjb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gKFxuICAgICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB2b2lkIDBcbiAgICAgID8gdm9pZCAwXG4gICAgICA6IChfdmFsJGNvbnN0cnVjdG9yID0gdmFsLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fFxuICAgICAgICBfdmFsJGNvbnN0cnVjdG9yID09PSB2b2lkIDBcbiAgICAgID8gdm9pZCAwXG4gICAgICA6IF92YWwkY29uc3RydWN0b3IubmFtZSkgJiYgdGVzdE5vZGUodmFsKVxuICApO1xufTtcblxuZXhwb3J0cy50ZXN0ID0gdGVzdDtcblxuZnVuY3Rpb24gbm9kZUlzVGV4dChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIG5vZGVJc0NvbW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBub2RlSXNGcmFnbWVudChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBGUkFHTUVOVF9OT0RFO1xufVxuXG5jb25zdCBzZXJpYWxpemUgPSAobm9kZSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgaWYgKG5vZGVJc1RleHQobm9kZSkpIHtcbiAgICByZXR1cm4gKDAsIF9tYXJrdXAucHJpbnRUZXh0KShub2RlLmRhdGEsIGNvbmZpZyk7XG4gIH1cblxuICBpZiAobm9kZUlzQ29tbWVudChub2RlKSkge1xuICAgIHJldHVybiAoMCwgX21hcmt1cC5wcmludENvbW1lbnQpKG5vZGUuZGF0YSwgY29uZmlnKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBub2RlSXNGcmFnbWVudChub2RlKVxuICAgID8gYERvY3VtZW50RnJhZ21lbnRgXG4gICAgOiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aCkge1xuICAgIHJldHVybiAoMCwgX21hcmt1cC5wcmludEVsZW1lbnRBc0xlYWYpKHR5cGUsIGNvbmZpZyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50KShcbiAgICB0eXBlLFxuICAgICgwLCBfbWFya3VwLnByaW50UHJvcHMpKFxuICAgICAgbm9kZUlzRnJhZ21lbnQobm9kZSlcbiAgICAgICAgPyBbXVxuICAgICAgICA6IEFycmF5LmZyb20obm9kZS5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgLm1hcChhdHRyID0+IGF0dHIubmFtZSlcbiAgICAgICAgICAgIC5zb3J0KCksXG4gICAgICBub2RlSXNGcmFnbWVudChub2RlKVxuICAgICAgICA/IHt9XG4gICAgICAgIDogQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpLnJlZHVjZSgocHJvcHMsIGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHNbYXR0cmlidXRlLm5hbWVdID0gYXR0cmlidXRlLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICAgIH0sIHt9KSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCxcbiAgICAgIGRlcHRoLFxuICAgICAgcmVmcyxcbiAgICAgIHByaW50ZXJcbiAgICApLFxuICAgICgwLCBfbWFya3VwLnByaW50Q2hpbGRyZW4pKFxuICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobm9kZS5jaGlsZE5vZGVzIHx8IG5vZGUuY2hpbGRyZW4pLFxuICAgICAgY29uZmlnLFxuICAgICAgaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50LFxuICAgICAgZGVwdGgsXG4gICAgICByZWZzLFxuICAgICAgcHJpbnRlclxuICAgICksXG4gICAgY29uZmlnLFxuICAgIGluZGVudGF0aW9uXG4gICk7XG59O1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcbmNvbnN0IHBsdWdpbiA9IHtcbiAgc2VyaWFsaXplLFxuICB0ZXN0XG59O1xudmFyIF9kZWZhdWx0ID0gcGx1Z2luO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbnMgPSByZXF1aXJlKCcuLi9jb2xsZWN0aW9ucycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4vLyBTRU5USU5FTCBjb25zdGFudHMgYXJlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ltbXV0YWJsZS1qc1xuY29uc3QgSVNfSVRFUkFCTEVfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9JVEVSQUJMRV9fQEAnO1xuY29uc3QgSVNfTElTVF9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX0xJU1RfX0BAJztcbmNvbnN0IElTX0tFWUVEX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfS0VZRURfX0BAJztcbmNvbnN0IElTX01BUF9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX01BUF9fQEAnO1xuY29uc3QgSVNfT1JERVJFRF9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX09SREVSRURfX0BAJztcbmNvbnN0IElTX1JFQ09SRF9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX1JFQ09SRF9fQEAnOyAvLyBpbW11dGFibGUgdjRcblxuY29uc3QgSVNfU0VRX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfU0VRX19AQCc7XG5jb25zdCBJU19TRVRfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9TRVRfX0BAJztcbmNvbnN0IElTX1NUQUNLX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfU1RBQ0tfX0BAJztcblxuY29uc3QgZ2V0SW1tdXRhYmxlTmFtZSA9IG5hbWUgPT4gJ0ltbXV0YWJsZS4nICsgbmFtZTtcblxuY29uc3QgcHJpbnRBc0xlYWYgPSBuYW1lID0+ICdbJyArIG5hbWUgKyAnXSc7XG5cbmNvbnN0IFNQQUNFID0gJyAnO1xuY29uc3QgTEFaWSA9ICfigKYnOyAvLyBTZXEgaXMgbGF6eSBpZiBpdCBjYWxscyBhIG1ldGhvZCBsaWtlIGZpbHRlclxuXG5jb25zdCBwcmludEltbXV0YWJsZUVudHJpZXMgPSAoXG4gIHZhbCxcbiAgY29uZmlnLFxuICBpbmRlbnRhdGlvbixcbiAgZGVwdGgsXG4gIHJlZnMsXG4gIHByaW50ZXIsXG4gIHR5cGVcbikgPT5cbiAgKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aFxuICAgID8gcHJpbnRBc0xlYWYoZ2V0SW1tdXRhYmxlTmFtZSh0eXBlKSlcbiAgICA6IGdldEltbXV0YWJsZU5hbWUodHlwZSkgK1xuICAgICAgU1BBQ0UgK1xuICAgICAgJ3snICtcbiAgICAgICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvckVudHJpZXMpKFxuICAgICAgICB2YWwuZW50cmllcygpLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgcmVmcyxcbiAgICAgICAgcHJpbnRlclxuICAgICAgKSArXG4gICAgICAnfSc7IC8vIFJlY29yZCBoYXMgYW4gZW50cmllcyBtZXRob2QgYmVjYXVzZSBpdCBpcyBhIGNvbGxlY3Rpb24gaW4gaW1tdXRhYmxlIHYzLlxuLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIGZvciBJbW11dGFibGUgUmVjb3JkIGZyb20gdmVyc2lvbiB2MyBvciB2NC5cblxuZnVuY3Rpb24gZ2V0UmVjb3JkRW50cmllcyh2YWwpIHtcbiAgbGV0IGkgPSAwO1xuICByZXR1cm4ge1xuICAgIG5leHQoKSB7XG4gICAgICBpZiAoaSA8IHZhbC5fa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdmFsLl9rZXlzW2krK107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IFtrZXksIHZhbC5nZXQoa2V5KV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IHByaW50SW1tdXRhYmxlUmVjb3JkID0gKFxuICB2YWwsXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb24sXG4gIGRlcHRoLFxuICByZWZzLFxuICBwcmludGVyXG4pID0+IHtcbiAgLy8gX25hbWUgcHJvcGVydHkgaXMgZGVmaW5lZCBvbmx5IGZvciBhbiBJbW11dGFibGUgUmVjb3JkIGluc3RhbmNlXG4gIC8vIHdoaWNoIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIGEgc2Vjb25kIG9wdGlvbmFsIGRlc2NyaXB0aXZlIG5hbWUgYXJnXG4gIGNvbnN0IG5hbWUgPSBnZXRJbW11dGFibGVOYW1lKHZhbC5fbmFtZSB8fCAnUmVjb3JkJyk7XG4gIHJldHVybiArK2RlcHRoID4gY29uZmlnLm1heERlcHRoXG4gICAgPyBwcmludEFzTGVhZihuYW1lKVxuICAgIDogbmFtZSArXG4gICAgICAgIFNQQUNFICtcbiAgICAgICAgJ3snICtcbiAgICAgICAgKDAsIF9jb2xsZWN0aW9ucy5wcmludEl0ZXJhdG9yRW50cmllcykoXG4gICAgICAgICAgZ2V0UmVjb3JkRW50cmllcyh2YWwpLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICByZWZzLFxuICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgKSArXG4gICAgICAgICd9Jztcbn07XG5cbmNvbnN0IHByaW50SW1tdXRhYmxlU2VxID0gKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgY29uc3QgbmFtZSA9IGdldEltbXV0YWJsZU5hbWUoJ1NlcScpO1xuXG4gIGlmICgrK2RlcHRoID4gY29uZmlnLm1heERlcHRoKSB7XG4gICAgcmV0dXJuIHByaW50QXNMZWFmKG5hbWUpO1xuICB9XG5cbiAgaWYgKHZhbFtJU19LRVlFRF9TRU5USU5FTF0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgbmFtZSArXG4gICAgICBTUEFDRSArXG4gICAgICAneycgKyAvLyBmcm9tIEltbXV0YWJsZSBjb2xsZWN0aW9uIG9mIGVudHJpZXMgb3IgZnJvbSBFQ01BU2NyaXB0IG9iamVjdFxuICAgICAgKHZhbC5faXRlciB8fCB2YWwuX29iamVjdFxuICAgICAgICA/ICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvckVudHJpZXMpKFxuICAgICAgICAgICAgdmFsLmVudHJpZXMoKSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgcHJpbnRlclxuICAgICAgICAgIClcbiAgICAgICAgOiBMQVpZKSArXG4gICAgICAnfSdcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBuYW1lICtcbiAgICBTUEFDRSArXG4gICAgJ1snICtcbiAgICAodmFsLl9pdGVyIHx8IC8vIGZyb20gSW1tdXRhYmxlIGNvbGxlY3Rpb24gb2YgdmFsdWVzXG4gICAgdmFsLl9hcnJheSB8fCAvLyBmcm9tIEVDTUFTY3JpcHQgYXJyYXlcbiAgICB2YWwuX2NvbGxlY3Rpb24gfHwgLy8gZnJvbSBFQ01BU2NyaXB0IGNvbGxlY3Rpb24gaW4gaW1tdXRhYmxlIHY0XG4gICAgdmFsLl9pdGVyYWJsZSAvLyBmcm9tIEVDTUFTY3JpcHQgY29sbGVjdGlvbiBpbiBpbW11dGFibGUgdjNcbiAgICAgID8gKDAsIF9jb2xsZWN0aW9ucy5wcmludEl0ZXJhdG9yVmFsdWVzKShcbiAgICAgICAgICB2YWwudmFsdWVzKCksXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgIHJlZnMsXG4gICAgICAgICAgcHJpbnRlclxuICAgICAgICApXG4gICAgICA6IExBWlkpICtcbiAgICAnXSdcbiAgKTtcbn07XG5cbmNvbnN0IHByaW50SW1tdXRhYmxlVmFsdWVzID0gKFxuICB2YWwsXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb24sXG4gIGRlcHRoLFxuICByZWZzLFxuICBwcmludGVyLFxuICB0eXBlXG4pID0+XG4gICsrZGVwdGggPiBjb25maWcubWF4RGVwdGhcbiAgICA/IHByaW50QXNMZWFmKGdldEltbXV0YWJsZU5hbWUodHlwZSkpXG4gICAgOiBnZXRJbW11dGFibGVOYW1lKHR5cGUpICtcbiAgICAgIFNQQUNFICtcbiAgICAgICdbJyArXG4gICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50SXRlcmF0b3JWYWx1ZXMpKFxuICAgICAgICB2YWwudmFsdWVzKCksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgIGRlcHRoLFxuICAgICAgICByZWZzLFxuICAgICAgICBwcmludGVyXG4gICAgICApICtcbiAgICAgICddJztcblxuY29uc3Qgc2VyaWFsaXplID0gKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgaWYgKHZhbFtJU19NQVBfU0VOVElORUxdKSB7XG4gICAgcmV0dXJuIHByaW50SW1tdXRhYmxlRW50cmllcyhcbiAgICAgIHZhbCxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGluZGVudGF0aW9uLFxuICAgICAgZGVwdGgsXG4gICAgICByZWZzLFxuICAgICAgcHJpbnRlcixcbiAgICAgIHZhbFtJU19PUkRFUkVEX1NFTlRJTkVMXSA/ICdPcmRlcmVkTWFwJyA6ICdNYXAnXG4gICAgKTtcbiAgfVxuXG4gIGlmICh2YWxbSVNfTElTVF9TRU5USU5FTF0pIHtcbiAgICByZXR1cm4gcHJpbnRJbW11dGFibGVWYWx1ZXMoXG4gICAgICB2YWwsXG4gICAgICBjb25maWcsXG4gICAgICBpbmRlbnRhdGlvbixcbiAgICAgIGRlcHRoLFxuICAgICAgcmVmcyxcbiAgICAgIHByaW50ZXIsXG4gICAgICAnTGlzdCdcbiAgICApO1xuICB9XG5cbiAgaWYgKHZhbFtJU19TRVRfU0VOVElORUxdKSB7XG4gICAgcmV0dXJuIHByaW50SW1tdXRhYmxlVmFsdWVzKFxuICAgICAgdmFsLFxuICAgICAgY29uZmlnLFxuICAgICAgaW5kZW50YXRpb24sXG4gICAgICBkZXB0aCxcbiAgICAgIHJlZnMsXG4gICAgICBwcmludGVyLFxuICAgICAgdmFsW0lTX09SREVSRURfU0VOVElORUxdID8gJ09yZGVyZWRTZXQnIDogJ1NldCdcbiAgICApO1xuICB9XG5cbiAgaWYgKHZhbFtJU19TVEFDS19TRU5USU5FTF0pIHtcbiAgICByZXR1cm4gcHJpbnRJbW11dGFibGVWYWx1ZXMoXG4gICAgICB2YWwsXG4gICAgICBjb25maWcsXG4gICAgICBpbmRlbnRhdGlvbixcbiAgICAgIGRlcHRoLFxuICAgICAgcmVmcyxcbiAgICAgIHByaW50ZXIsXG4gICAgICAnU3RhY2snXG4gICAgKTtcbiAgfVxuXG4gIGlmICh2YWxbSVNfU0VRX1NFTlRJTkVMXSkge1xuICAgIHJldHVybiBwcmludEltbXV0YWJsZVNlcSh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKTtcbiAgfSAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGltbXV0YWJsZSB2MyBhbmQgdjQsIGxldCByZWNvcmQgYmUgdGhlIGRlZmF1bHQuXG5cbiAgcmV0dXJuIHByaW50SW1tdXRhYmxlUmVjb3JkKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpO1xufTsgLy8gRXhwbGljaXRseSBjb21wYXJpbmcgc2VudGluZWwgcHJvcGVydGllcyB0byB0cnVlIGF2b2lkcyBmYWxzZSBwb3NpdGl2ZVxuLy8gd2hlbiBtb2NrIGlkZW50aXR5LW9iai1wcm94eSByZXR1cm5zIHRoZSBrZXkgYXMgdGhlIHZhbHVlIGZvciBhbnkga2V5LlxuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcblxuY29uc3QgdGVzdCA9IHZhbCA9PlxuICB2YWwgJiZcbiAgKHZhbFtJU19JVEVSQUJMRV9TRU5USU5FTF0gPT09IHRydWUgfHwgdmFsW0lTX1JFQ09SRF9TRU5USU5FTF0gPT09IHRydWUpO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGI9NjAxMDMsYz02MDEwNixkPTYwMTA3LGU9NjAxMDgsZj02MDExNCxnPTYwMTA5LGg9NjAxMTAsaz02MDExMixsPTYwMTEzLG09NjAxMjAsbj02MDExNSxwPTYwMTE2LHE9NjAxMjEscj02MDEyMix1PTYwMTE3LHY9NjAxMjksdz02MDEzMTtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciB4PVN5bWJvbC5mb3I7Yj14KFwicmVhY3QuZWxlbWVudFwiKTtjPXgoXCJyZWFjdC5wb3J0YWxcIik7ZD14KFwicmVhY3QuZnJhZ21lbnRcIik7ZT14KFwicmVhY3Quc3RyaWN0X21vZGVcIik7Zj14KFwicmVhY3QucHJvZmlsZXJcIik7Zz14KFwicmVhY3QucHJvdmlkZXJcIik7aD14KFwicmVhY3QuY29udGV4dFwiKTtrPXgoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtsPXgoXCJyZWFjdC5zdXNwZW5zZVwiKTttPXgoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpO249eChcInJlYWN0Lm1lbW9cIik7cD14KFwicmVhY3QubGF6eVwiKTtxPXgoXCJyZWFjdC5ibG9ja1wiKTtyPXgoXCJyZWFjdC5zZXJ2ZXIuYmxvY2tcIik7dT14KFwicmVhY3QuZnVuZGFtZW50YWxcIik7dj14KFwicmVhY3QuZGVidWdfdHJhY2VfbW9kZVwiKTt3PXgoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpfVxuZnVuY3Rpb24geShhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdD1hLiQkdHlwZW9mO3N3aXRjaCh0KXtjYXNlIGI6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgZDpjYXNlIGY6Y2FzZSBlOmNhc2UgbDpjYXNlIG06cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgaDpjYXNlIGs6Y2FzZSBwOmNhc2UgbjpjYXNlIGc6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdH19Y2FzZSBjOnJldHVybiB0fX19dmFyIHo9ZyxBPWIsQj1rLEM9ZCxEPXAsRT1uLEY9YyxHPWYsSD1lLEk9bDtleHBvcnRzLkNvbnRleHRDb25zdW1lcj1oO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPXo7ZXhwb3J0cy5FbGVtZW50PUE7ZXhwb3J0cy5Gb3J3YXJkUmVmPUI7ZXhwb3J0cy5GcmFnbWVudD1DO2V4cG9ydHMuTGF6eT1EO2V4cG9ydHMuTWVtbz1FO2V4cG9ydHMuUG9ydGFsPUY7ZXhwb3J0cy5Qcm9maWxlcj1HO2V4cG9ydHMuU3RyaWN0TW9kZT1IO1xuZXhwb3J0cy5TdXNwZW5zZT1JO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1ofTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09Z307ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWJ9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09a307ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09ZH07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1wfTtleHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PW59O1xuZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PWN9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PWZ9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09ZX07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09bH07ZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWR8fGE9PT1mfHxhPT09dnx8YT09PWV8fGE9PT1sfHxhPT09bXx8YT09PXd8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09cHx8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT1nfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT11fHxhLiQkdHlwZW9mPT09cXx8YVswXT09PXIpPyEwOiExfTtcbmV4cG9ydHMudHlwZU9mPXk7XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBSZWFjdElzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZSgncmVhY3QtaXMnKSk7XG5cbnZhciBfbWFya3VwID0gcmVxdWlyZSgnLi9saWIvbWFya3VwJyk7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICBpZiAodHlwZW9mIFdlYWtNYXAgIT09ICdmdW5jdGlvbicpIHJldHVybiBudWxsO1xuICB2YXIgY2FjaGVCYWJlbEludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgY2FjaGVOb2RlSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKG5vZGVJbnRlcm9wKSB7XG4gICAgcmV0dXJuIG5vZGVJbnRlcm9wID8gY2FjaGVOb2RlSW50ZXJvcCA6IGNhY2hlQmFiZWxJbnRlcm9wO1xuICB9KShub2RlSW50ZXJvcCk7XG59XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaiwgbm9kZUludGVyb3ApIHtcbiAgaWYgKCFub2RlSW50ZXJvcCAmJiBvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwgfHwgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmogIT09ICdmdW5jdGlvbicpKSB7XG4gICAgcmV0dXJuIHtkZWZhdWx0OiBvYmp9O1xuICB9XG4gIHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCk7XG4gIGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkge1xuICAgIHJldHVybiBjYWNoZS5nZXQob2JqKTtcbiAgfVxuICB2YXIgbmV3T2JqID0ge307XG4gIHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGtleSAhPT0gJ2RlZmF1bHQnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yXG4gICAgICAgID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG4gIGlmIChjYWNoZSkge1xuICAgIGNhY2hlLnNldChvYmosIG5ld09iaik7XG4gIH1cbiAgcmV0dXJuIG5ld09iajtcbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLy8gR2l2ZW4gZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgb3Igc3VidHJlZSBkdXJpbmcgcmVjdXJzaXZlIHRyYXZlcnNhbCxcbi8vIHJldHVybiBmbGF0dGVuZWQgYXJyYXkgb2YgY2hpbGRyZW4uXG5jb25zdCBnZXRDaGlsZHJlbiA9IChhcmcsIGNoaWxkcmVuID0gW10pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGFyZy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgZ2V0Q2hpbGRyZW4oaXRlbSwgY2hpbGRyZW4pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGFyZyAhPSBudWxsICYmIGFyZyAhPT0gZmFsc2UpIHtcbiAgICBjaGlsZHJlbi5wdXNoKGFyZyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59O1xuXG5jb25zdCBnZXRUeXBlID0gZWxlbWVudCA9PiB7XG4gIGNvbnN0IHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJztcbiAgfVxuXG4gIGlmIChSZWFjdElzLmlzRnJhZ21lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gJ1JlYWN0LkZyYWdtZW50JztcbiAgfVxuXG4gIGlmIChSZWFjdElzLmlzU3VzcGVuc2UoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gJ1JlYWN0LlN1c3BlbnNlJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmIChSZWFjdElzLmlzQ29udGV4dFByb3ZpZGVyKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gJ0NvbnRleHQuUHJvdmlkZXInO1xuICAgIH1cblxuICAgIGlmIChSZWFjdElzLmlzQ29udGV4dENvbnN1bWVyKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gJ0NvbnRleHQuQ29uc3VtZXInO1xuICAgIH1cblxuICAgIGlmIChSZWFjdElzLmlzRm9yd2FyZFJlZihlbGVtZW50KSkge1xuICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGUucmVuZGVyLmRpc3BsYXlOYW1lIHx8IHR5cGUucmVuZGVyLm5hbWUgfHwgJyc7XG4gICAgICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJ1xuICAgICAgICA/ICdGb3J3YXJkUmVmKCcgKyBmdW5jdGlvbk5hbWUgKyAnKSdcbiAgICAgICAgOiAnRm9yd2FyZFJlZic7XG4gICAgfVxuXG4gICAgaWYgKFJlYWN0SXMuaXNNZW1vKGVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPVxuICAgICAgICB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUudHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLnR5cGUubmFtZSB8fCAnJztcbiAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gJ01lbW8oJyArIGZ1bmN0aW9uTmFtZSArICcpJyA6ICdNZW1vJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJ1VOREVGSU5FRCc7XG59O1xuXG5jb25zdCBnZXRQcm9wS2V5cyA9IGVsZW1lbnQgPT4ge1xuICBjb25zdCB7cHJvcHN9ID0gZWxlbWVudDtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKVxuICAgIC5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBwcm9wc1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgLnNvcnQoKTtcbn07XG5cbmNvbnN0IHNlcmlhbGl6ZSA9IChlbGVtZW50LCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikgPT5cbiAgKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aFxuICAgID8gKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50QXNMZWFmKShnZXRUeXBlKGVsZW1lbnQpLCBjb25maWcpXG4gICAgOiAoMCwgX21hcmt1cC5wcmludEVsZW1lbnQpKFxuICAgICAgICBnZXRUeXBlKGVsZW1lbnQpLFxuICAgICAgICAoMCwgX21hcmt1cC5wcmludFByb3BzKShcbiAgICAgICAgICBnZXRQcm9wS2V5cyhlbGVtZW50KSxcbiAgICAgICAgICBlbGVtZW50LnByb3BzLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICksXG4gICAgICAgICgwLCBfbWFya3VwLnByaW50Q2hpbGRyZW4pKFxuICAgICAgICAgIGdldENoaWxkcmVuKGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb25cbiAgICAgICk7XG5cbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuXG5jb25zdCB0ZXN0ID0gdmFsID0+IHZhbCAhPSBudWxsICYmIFJlYWN0SXMuaXNFbGVtZW50KHZhbCk7XG5cbmV4cG9ydHMudGVzdCA9IHRlc3Q7XG5jb25zdCBwbHVnaW4gPSB7XG4gIHNlcmlhbGl6ZSxcbiAgdGVzdFxufTtcbnZhciBfZGVmYXVsdCA9IHBsdWdpbjtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGVzdCA9IGV4cG9ydHMuc2VyaWFsaXplID0gZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX21hcmt1cCA9IHJlcXVpcmUoJy4vbGliL21hcmt1cCcpO1xuXG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGdsb2JhbDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gIH1cbn0pKCk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxbJ2plc3Qtc3ltYm9sLWRvLW5vdC10b3VjaCddIHx8IGdsb2JhbC5TeW1ib2w7XG5jb25zdCB0ZXN0U3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yXG4gICAgPyBTeW1ib2wuZm9yKCdyZWFjdC50ZXN0Lmpzb24nKVxuICAgIDogMHhlYTcxMzU3O1xuXG5jb25zdCBnZXRQcm9wS2V5cyA9IG9iamVjdCA9PiB7XG4gIGNvbnN0IHtwcm9wc30gPSBvYmplY3Q7XG4gIHJldHVybiBwcm9wc1xuICAgID8gT2JqZWN0LmtleXMocHJvcHMpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IHByb3BzW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgLnNvcnQoKVxuICAgIDogW107XG59O1xuXG5jb25zdCBzZXJpYWxpemUgPSAob2JqZWN0LCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikgPT5cbiAgKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aFxuICAgID8gKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50QXNMZWFmKShvYmplY3QudHlwZSwgY29uZmlnKVxuICAgIDogKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50KShcbiAgICAgICAgb2JqZWN0LnR5cGUsXG4gICAgICAgIG9iamVjdC5wcm9wc1xuICAgICAgICAgID8gKDAsIF9tYXJrdXAucHJpbnRQcm9wcykoXG4gICAgICAgICAgICAgIGdldFByb3BLZXlzKG9iamVjdCksXG4gICAgICAgICAgICAgIG9iamVjdC5wcm9wcyxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsXG4gICAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgICBwcmludGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgb2JqZWN0LmNoaWxkcmVuXG4gICAgICAgICAgPyAoMCwgX21hcmt1cC5wcmludENoaWxkcmVuKShcbiAgICAgICAgICAgICAgb2JqZWN0LmNoaWxkcmVuLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCxcbiAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgIHJlZnMsXG4gICAgICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZGVudGF0aW9uXG4gICAgICApO1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcblxuY29uc3QgdGVzdCA9IHZhbCA9PiB2YWwgJiYgdmFsLiQkdHlwZW9mID09PSB0ZXN0U3ltYm9sO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLkRFRkFVTFRfT1BUSU9OUyA9IHZvaWQgMDtcbmV4cG9ydHMuZm9ybWF0ID0gZm9ybWF0O1xuZXhwb3J0cy5wbHVnaW5zID0gdm9pZCAwO1xuXG52YXIgX2Fuc2lTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJ2Fuc2ktc3R5bGVzJykpO1xuXG52YXIgX2NvbGxlY3Rpb25zID0gcmVxdWlyZSgnLi9jb2xsZWN0aW9ucycpO1xuXG52YXIgX0FzeW1tZXRyaWNNYXRjaGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChcbiAgcmVxdWlyZSgnLi9wbHVnaW5zL0FzeW1tZXRyaWNNYXRjaGVyJylcbik7XG5cbnZhciBfQ29udmVydEFuc2kgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJy4vcGx1Z2lucy9Db252ZXJ0QW5zaScpKTtcblxudmFyIF9ET01Db2xsZWN0aW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL3BsdWdpbnMvRE9NQ29sbGVjdGlvbicpKTtcblxudmFyIF9ET01FbGVtZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL3BsdWdpbnMvRE9NRWxlbWVudCcpKTtcblxudmFyIF9JbW11dGFibGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJy4vcGx1Z2lucy9JbW11dGFibGUnKSk7XG5cbnZhciBfUmVhY3RFbGVtZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL3BsdWdpbnMvUmVhY3RFbGVtZW50JykpO1xuXG52YXIgX1JlYWN0VGVzdENvbXBvbmVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoXG4gIHJlcXVpcmUoJy4vcGx1Z2lucy9SZWFjdFRlc3RDb21wb25lbnQnKVxuKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtkZWZhdWx0OiBvYmp9O1xufVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGxvY2FsL2Jhbi10eXBlcy1ldmVudHVhbGx5ICovXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCB0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuY29uc3QgZXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IHJlZ0V4cFRvU3RyaW5nID0gUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogRXhwbGljaXRseSBjb21wYXJpbmcgdHlwZW9mIGNvbnN0cnVjdG9yIHRvIGZ1bmN0aW9uIGF2b2lkcyB1bmRlZmluZWQgYXMgbmFtZVxuICogd2hlbiBtb2NrIGlkZW50aXR5LW9iai1wcm94eSByZXR1cm5zIHRoZSBrZXkgYXMgdGhlIHZhbHVlIGZvciBhbnkga2V5LlxuICovXG5cbmNvbnN0IGdldENvbnN0cnVjdG9yTmFtZSA9IHZhbCA9PlxuICAodHlwZW9mIHZhbC5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IubmFtZSkgfHwgJ09iamVjdCc7XG4vKiBnbG9iYWwgd2luZG93ICovXG5cbi8qKiBJcyB2YWwgaXMgZXF1YWwgdG8gZ2xvYmFsIHdpbmRvdyBvYmplY3Q/IFdvcmtzIGV2ZW4gaWYgaXQgZG9lcyBub3QgZXhpc3QgOikgKi9cblxuY29uc3QgaXNXaW5kb3cgPSB2YWwgPT4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsID09PSB3aW5kb3c7XG5cbmNvbnN0IFNZTUJPTF9SRUdFWFAgPSAvXlN5bWJvbFxcKCguKilcXCkoLiopJC87XG5jb25zdCBORVdMSU5FX1JFR0VYUCA9IC9cXG4vZ2k7XG5cbmNsYXNzIFByZXR0eUZvcm1hdFBsdWdpbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGFjaykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUb1N0cmluZ2VkQXJyYXlUeXBlKHRvU3RyaW5nZWQpIHtcbiAgcmV0dXJuIChcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBBcnJheV0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyB8fFxuICAgIHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IERhdGFWaWV3XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyB8fFxuICAgIHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgSW50OEFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBJbnQxNkFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBJbnQzMkFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBVaW50OEFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgVWludDE2QXJyYXldJyB8fFxuICAgIHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IFVpbnQzMkFycmF5XSdcbiAgKTtcbn1cblxuZnVuY3Rpb24gcHJpbnROdW1iZXIodmFsKSB7XG4gIHJldHVybiBPYmplY3QuaXModmFsLCAtMCkgPyAnLTAnIDogU3RyaW5nKHZhbCk7XG59XG5cbmZ1bmN0aW9uIHByaW50QmlnSW50KHZhbCkge1xuICByZXR1cm4gU3RyaW5nKGAke3ZhbH1uYCk7XG59XG5cbmZ1bmN0aW9uIHByaW50RnVuY3Rpb24odmFsLCBwcmludEZ1bmN0aW9uTmFtZSkge1xuICBpZiAoIXByaW50RnVuY3Rpb25OYW1lKSB7XG4gICAgcmV0dXJuICdbRnVuY3Rpb25dJztcbiAgfVxuXG4gIHJldHVybiAnW0Z1bmN0aW9uICcgKyAodmFsLm5hbWUgfHwgJ2Fub255bW91cycpICsgJ10nO1xufVxuXG5mdW5jdGlvbiBwcmludFN5bWJvbCh2YWwpIHtcbiAgcmV0dXJuIFN0cmluZyh2YWwpLnJlcGxhY2UoU1lNQk9MX1JFR0VYUCwgJ1N5bWJvbCgkMSknKTtcbn1cblxuZnVuY3Rpb24gcHJpbnRFcnJvcih2YWwpIHtcbiAgcmV0dXJuICdbJyArIGVycm9yVG9TdHJpbmcuY2FsbCh2YWwpICsgJ10nO1xufVxuLyoqXG4gKiBUaGUgZmlyc3QgcG9ydCBvZiBjYWxsIGZvciBwcmludGluZyBhbiBvYmplY3QsIGhhbmRsZXMgbW9zdCBvZiB0aGVcbiAqIGRhdGEtdHlwZXMgaW4gSlMuXG4gKi9cblxuZnVuY3Rpb24gcHJpbnRCYXNpY1ZhbHVlKHZhbCwgcHJpbnRGdW5jdGlvbk5hbWUsIGVzY2FwZVJlZ2V4LCBlc2NhcGVTdHJpbmcpIHtcbiAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICcnICsgdmFsO1xuICB9XG5cbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9XG5cbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICBjb25zdCB0eXBlT2YgPSB0eXBlb2YgdmFsO1xuXG4gIGlmICh0eXBlT2YgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHByaW50TnVtYmVyKHZhbCk7XG4gIH1cblxuICBpZiAodHlwZU9mID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiBwcmludEJpZ0ludCh2YWwpO1xuICB9XG5cbiAgaWYgKHR5cGVPZiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoZXNjYXBlU3RyaW5nKSB7XG4gICAgICByZXR1cm4gJ1wiJyArIHZhbC5yZXBsYWNlKC9cInxcXFxcL2csICdcXFxcJCYnKSArICdcIic7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcIicgKyB2YWwgKyAnXCInO1xuICB9XG5cbiAgaWYgKHR5cGVPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcmludEZ1bmN0aW9uKHZhbCwgcHJpbnRGdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgaWYgKHR5cGVPZiA9PT0gJ3N5bWJvbCcpIHtcbiAgICByZXR1cm4gcHJpbnRTeW1ib2wodmFsKTtcbiAgfVxuXG4gIGNvbnN0IHRvU3RyaW5nZWQgPSB0b1N0cmluZy5jYWxsKHZhbCk7XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IFdlYWtNYXBdJykge1xuICAgIHJldHVybiAnV2Vha01hcCB7fSc7XG4gIH1cblxuICBpZiAodG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgV2Vha1NldF0nKSB7XG4gICAgcmV0dXJuICdXZWFrU2V0IHt9JztcbiAgfVxuXG4gIGlmIChcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBGdW5jdGlvbl0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJ1xuICApIHtcbiAgICByZXR1cm4gcHJpbnRGdW5jdGlvbih2YWwsIHByaW50RnVuY3Rpb25OYW1lKTtcbiAgfVxuXG4gIGlmICh0b1N0cmluZ2VkID09PSAnW29iamVjdCBTeW1ib2xdJykge1xuICAgIHJldHVybiBwcmludFN5bWJvbCh2YWwpO1xuICB9XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIHJldHVybiBpc05hTigrdmFsKSA/ICdEYXRlIHsgTmFOIH0nIDogdG9JU09TdHJpbmcuY2FsbCh2YWwpO1xuICB9XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IEVycm9yXScpIHtcbiAgICByZXR1cm4gcHJpbnRFcnJvcih2YWwpO1xuICB9XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgaWYgKGVzY2FwZVJlZ2V4KSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZWdFeHAuZXNjYXBlL2Jsb2IvbWFpbi9wb2x5ZmlsbC5qc1xuICAgICAgcmV0dXJuIHJlZ0V4cFRvU3RyaW5nLmNhbGwodmFsKS5yZXBsYWNlKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHJldHVybiByZWdFeHBUb1N0cmluZy5jYWxsKHZhbCk7XG4gIH1cblxuICBpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4gcHJpbnRFcnJvcih2YWwpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEhhbmRsZXMgbW9yZSBjb21wbGV4IG9iamVjdHMgKCBzdWNoIGFzIG9iamVjdHMgd2l0aCBjaXJjdWxhciByZWZlcmVuY2VzLlxuICogbWFwcyBhbmQgc2V0cyBldGMgKVxuICovXG5cbmZ1bmN0aW9uIHByaW50Q29tcGxleFZhbHVlKFxuICB2YWwsXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb24sXG4gIGRlcHRoLFxuICByZWZzLFxuICBoYXNDYWxsZWRUb0pTT05cbikge1xuICBpZiAocmVmcy5pbmRleE9mKHZhbCkgIT09IC0xKSB7XG4gICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgfVxuXG4gIHJlZnMgPSByZWZzLnNsaWNlKCk7XG4gIHJlZnMucHVzaCh2YWwpO1xuICBjb25zdCBoaXRNYXhEZXB0aCA9ICsrZGVwdGggPiBjb25maWcubWF4RGVwdGg7XG4gIGNvbnN0IG1pbiA9IGNvbmZpZy5taW47XG5cbiAgaWYgKFxuICAgIGNvbmZpZy5jYWxsVG9KU09OICYmXG4gICAgIWhpdE1heERlcHRoICYmXG4gICAgdmFsLnRvSlNPTiAmJlxuICAgIHR5cGVvZiB2YWwudG9KU09OID09PSAnZnVuY3Rpb24nICYmXG4gICAgIWhhc0NhbGxlZFRvSlNPTlxuICApIHtcbiAgICByZXR1cm4gcHJpbnRlcih2YWwudG9KU09OKCksIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCB0cnVlKTtcbiAgfVxuXG4gIGNvbnN0IHRvU3RyaW5nZWQgPSB0b1N0cmluZy5jYWxsKHZhbCk7XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nKSB7XG4gICAgcmV0dXJuIGhpdE1heERlcHRoXG4gICAgICA/ICdbQXJndW1lbnRzXSdcbiAgICAgIDogKG1pbiA/ICcnIDogJ0FyZ3VtZW50cyAnKSArXG4gICAgICAgICAgJ1snICtcbiAgICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50TGlzdEl0ZW1zKShcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgcHJpbnRlclxuICAgICAgICAgICkgK1xuICAgICAgICAgICddJztcbiAgfVxuXG4gIGlmIChpc1RvU3RyaW5nZWRBcnJheVR5cGUodG9TdHJpbmdlZCkpIHtcbiAgICByZXR1cm4gaGl0TWF4RGVwdGhcbiAgICAgID8gJ1snICsgdmFsLmNvbnN0cnVjdG9yLm5hbWUgKyAnXSdcbiAgICAgIDogKG1pblxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6ICFjb25maWcucHJpbnRCYXNpY1Byb3RvdHlwZSAmJiB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FycmF5J1xuICAgICAgICAgID8gJydcbiAgICAgICAgICA6IHZhbC5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnKSArXG4gICAgICAgICAgJ1snICtcbiAgICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50TGlzdEl0ZW1zKShcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgcHJpbnRlclxuICAgICAgICAgICkgK1xuICAgICAgICAgICddJztcbiAgfVxuXG4gIGlmICh0b1N0cmluZ2VkID09PSAnW29iamVjdCBNYXBdJykge1xuICAgIHJldHVybiBoaXRNYXhEZXB0aFxuICAgICAgPyAnW01hcF0nXG4gICAgICA6ICdNYXAgeycgK1xuICAgICAgICAgICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvckVudHJpZXMpKFxuICAgICAgICAgICAgdmFsLmVudHJpZXMoKSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgcHJpbnRlcixcbiAgICAgICAgICAgICcgPT4gJ1xuICAgICAgICAgICkgK1xuICAgICAgICAgICd9JztcbiAgfVxuXG4gIGlmICh0b1N0cmluZ2VkID09PSAnW29iamVjdCBTZXRdJykge1xuICAgIHJldHVybiBoaXRNYXhEZXB0aFxuICAgICAgPyAnW1NldF0nXG4gICAgICA6ICdTZXQgeycgK1xuICAgICAgICAgICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvclZhbHVlcykoXG4gICAgICAgICAgICB2YWwudmFsdWVzKCksXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgcmVmcyxcbiAgICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgICApICtcbiAgICAgICAgICAnfSc7XG4gIH0gLy8gQXZvaWQgZmFpbHVyZSB0byBzZXJpYWxpemUgZ2xvYmFsIHdpbmRvdyBvYmplY3QgaW4ganNkb20gdGVzdCBlbnZpcm9ubWVudC5cbiAgLy8gRm9yIGV4YW1wbGUsIG5vdCBldmVuIHJlbGV2YW50IGlmIHdpbmRvdyBpcyBwcm9wIG9mIFJlYWN0IGVsZW1lbnQuXG5cbiAgcmV0dXJuIGhpdE1heERlcHRoIHx8IGlzV2luZG93KHZhbClcbiAgICA/ICdbJyArIGdldENvbnN0cnVjdG9yTmFtZSh2YWwpICsgJ10nXG4gICAgOiAobWluXG4gICAgICAgID8gJydcbiAgICAgICAgOiAhY29uZmlnLnByaW50QmFzaWNQcm90b3R5cGUgJiYgZ2V0Q29uc3RydWN0b3JOYW1lKHZhbCkgPT09ICdPYmplY3QnXG4gICAgICAgID8gJydcbiAgICAgICAgOiBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsKSArICcgJykgK1xuICAgICAgICAneycgK1xuICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50T2JqZWN0UHJvcGVydGllcykoXG4gICAgICAgICAgdmFsLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICByZWZzLFxuICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgKSArXG4gICAgICAgICd9Jztcbn1cblxuZnVuY3Rpb24gaXNOZXdQbHVnaW4ocGx1Z2luKSB7XG4gIHJldHVybiBwbHVnaW4uc2VyaWFsaXplICE9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHByaW50UGx1Z2luKHBsdWdpbiwgdmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcykge1xuICBsZXQgcHJpbnRlZDtcblxuICB0cnkge1xuICAgIHByaW50ZWQgPSBpc05ld1BsdWdpbihwbHVnaW4pXG4gICAgICA/IHBsdWdpbi5zZXJpYWxpemUodmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcilcbiAgICAgIDogcGx1Z2luLnByaW50KFxuICAgICAgICAgIHZhbCxcbiAgICAgICAgICB2YWxDaGlsZCA9PiBwcmludGVyKHZhbENoaWxkLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcyksXG4gICAgICAgICAgc3RyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGVudGF0aW9uTmV4dCA9IGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudDtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGluZGVudGF0aW9uTmV4dCArXG4gICAgICAgICAgICAgIHN0ci5yZXBsYWNlKE5FV0xJTkVfUkVHRVhQLCAnXFxuJyArIGluZGVudGF0aW9uTmV4dClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlZGdlU3BhY2luZzogY29uZmlnLnNwYWNpbmdPdXRlcixcbiAgICAgICAgICAgIG1pbjogY29uZmlnLm1pbixcbiAgICAgICAgICAgIHNwYWNpbmc6IGNvbmZpZy5zcGFjaW5nSW5uZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbmZpZy5jb2xvcnNcbiAgICAgICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgUHJldHR5Rm9ybWF0UGx1Z2luRXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2spO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcmludGVkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBwcmV0dHktZm9ybWF0OiBQbHVnaW4gbXVzdCByZXR1cm4gdHlwZSBcInN0cmluZ1wiIGJ1dCBpbnN0ZWFkIHJldHVybmVkIFwiJHt0eXBlb2YgcHJpbnRlZH1cIi5gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwcmludGVkO1xufVxuXG5mdW5jdGlvbiBmaW5kUGx1Z2luKHBsdWdpbnMsIHZhbCkge1xuICBmb3IgKGxldCBwID0gMDsgcCA8IHBsdWdpbnMubGVuZ3RoOyBwKyspIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHBsdWdpbnNbcF0udGVzdCh2YWwpKSB7XG4gICAgICAgIHJldHVybiBwbHVnaW5zW3BdO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgUHJldHR5Rm9ybWF0UGx1Z2luRXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2spO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwcmludGVyKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIGhhc0NhbGxlZFRvSlNPTikge1xuICBjb25zdCBwbHVnaW4gPSBmaW5kUGx1Z2luKGNvbmZpZy5wbHVnaW5zLCB2YWwpO1xuXG4gIGlmIChwbHVnaW4gIT09IG51bGwpIHtcbiAgICByZXR1cm4gcHJpbnRQbHVnaW4ocGx1Z2luLCB2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKTtcbiAgfVxuXG4gIGNvbnN0IGJhc2ljUmVzdWx0ID0gcHJpbnRCYXNpY1ZhbHVlKFxuICAgIHZhbCxcbiAgICBjb25maWcucHJpbnRGdW5jdGlvbk5hbWUsXG4gICAgY29uZmlnLmVzY2FwZVJlZ2V4LFxuICAgIGNvbmZpZy5lc2NhcGVTdHJpbmdcbiAgKTtcblxuICBpZiAoYmFzaWNSZXN1bHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYmFzaWNSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gcHJpbnRDb21wbGV4VmFsdWUoXG4gICAgdmFsLFxuICAgIGNvbmZpZyxcbiAgICBpbmRlbnRhdGlvbixcbiAgICBkZXB0aCxcbiAgICByZWZzLFxuICAgIGhhc0NhbGxlZFRvSlNPTlxuICApO1xufVxuXG5jb25zdCBERUZBVUxUX1RIRU1FID0ge1xuICBjb21tZW50OiAnZ3JheScsXG4gIGNvbnRlbnQ6ICdyZXNldCcsXG4gIHByb3A6ICd5ZWxsb3cnLFxuICB0YWc6ICdjeWFuJyxcbiAgdmFsdWU6ICdncmVlbidcbn07XG5jb25zdCBERUZBVUxUX1RIRU1FX0tFWVMgPSBPYmplY3Qua2V5cyhERUZBVUxUX1RIRU1FKTtcbmNvbnN0IERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgY2FsbFRvSlNPTjogdHJ1ZSxcbiAgY29tcGFyZUtleXM6IHVuZGVmaW5lZCxcbiAgZXNjYXBlUmVnZXg6IGZhbHNlLFxuICBlc2NhcGVTdHJpbmc6IHRydWUsXG4gIGhpZ2hsaWdodDogZmFsc2UsXG4gIGluZGVudDogMixcbiAgbWF4RGVwdGg6IEluZmluaXR5LFxuICBtaW46IGZhbHNlLFxuICBwbHVnaW5zOiBbXSxcbiAgcHJpbnRCYXNpY1Byb3RvdHlwZTogdHJ1ZSxcbiAgcHJpbnRGdW5jdGlvbk5hbWU6IHRydWUsXG4gIHRoZW1lOiBERUZBVUxUX1RIRU1FXG59O1xuZXhwb3J0cy5ERUZBVUxUX09QVElPTlMgPSBERUZBVUxUX09QVElPTlM7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoIURFRkFVTFRfT1BUSU9OUy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXR0eS1mb3JtYXQ6IFVua25vd24gb3B0aW9uIFwiJHtrZXl9XCIuYCk7XG4gICAgfVxuICB9KTtcblxuICBpZiAob3B0aW9ucy5taW4gJiYgb3B0aW9ucy5pbmRlbnQgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmluZGVudCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdwcmV0dHktZm9ybWF0OiBPcHRpb25zIFwibWluXCIgYW5kIFwiaW5kZW50XCIgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuJ1xuICAgICk7XG4gIH1cblxuICBpZiAob3B0aW9ucy50aGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKG9wdGlvbnMudGhlbWUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJldHR5LWZvcm1hdDogT3B0aW9uIFwidGhlbWVcIiBtdXN0IG5vdCBiZSBudWxsLmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50aGVtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHByZXR0eS1mb3JtYXQ6IE9wdGlvbiBcInRoZW1lXCIgbXVzdCBiZSBvZiB0eXBlIFwib2JqZWN0XCIgYnV0IGluc3RlYWQgcmVjZWl2ZWQgXCIke3R5cGVvZiBvcHRpb25zLnRoZW1lfVwiLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGdldENvbG9yc0hpZ2hsaWdodCA9IG9wdGlvbnMgPT5cbiAgREVGQVVMVF9USEVNRV9LRVlTLnJlZHVjZSgoY29sb3JzLCBrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICBvcHRpb25zLnRoZW1lICYmIG9wdGlvbnMudGhlbWVba2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gb3B0aW9ucy50aGVtZVtrZXldXG4gICAgICAgIDogREVGQVVMVF9USEVNRVtrZXldO1xuICAgIGNvbnN0IGNvbG9yID0gdmFsdWUgJiYgX2Fuc2lTdHlsZXMuZGVmYXVsdFt2YWx1ZV07XG5cbiAgICBpZiAoXG4gICAgICBjb2xvciAmJlxuICAgICAgdHlwZW9mIGNvbG9yLmNsb3NlID09PSAnc3RyaW5nJyAmJlxuICAgICAgdHlwZW9mIGNvbG9yLm9wZW4gPT09ICdzdHJpbmcnXG4gICAgKSB7XG4gICAgICBjb2xvcnNba2V5XSA9IGNvbG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBwcmV0dHktZm9ybWF0OiBPcHRpb24gXCJ0aGVtZVwiIGhhcyBhIGtleSBcIiR7a2V5fVwiIHdob3NlIHZhbHVlIFwiJHt2YWx1ZX1cIiBpcyB1bmRlZmluZWQgaW4gYW5zaS1zdHlsZXMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3JzO1xuICB9LCBPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3QgZ2V0Q29sb3JzRW1wdHkgPSAoKSA9PlxuICBERUZBVUxUX1RIRU1FX0tFWVMucmVkdWNlKChjb2xvcnMsIGtleSkgPT4ge1xuICAgIGNvbG9yc1trZXldID0ge1xuICAgICAgY2xvc2U6ICcnLFxuICAgICAgb3BlbjogJydcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnM7XG4gIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBnZXRQcmludEZ1bmN0aW9uTmFtZSA9IG9wdGlvbnMgPT5cbiAgb3B0aW9ucyAmJiBvcHRpb25zLnByaW50RnVuY3Rpb25OYW1lICE9PSB1bmRlZmluZWRcbiAgICA/IG9wdGlvbnMucHJpbnRGdW5jdGlvbk5hbWVcbiAgICA6IERFRkFVTFRfT1BUSU9OUy5wcmludEZ1bmN0aW9uTmFtZTtcblxuY29uc3QgZ2V0RXNjYXBlUmVnZXggPSBvcHRpb25zID0+XG4gIG9wdGlvbnMgJiYgb3B0aW9ucy5lc2NhcGVSZWdleCAhPT0gdW5kZWZpbmVkXG4gICAgPyBvcHRpb25zLmVzY2FwZVJlZ2V4XG4gICAgOiBERUZBVUxUX09QVElPTlMuZXNjYXBlUmVnZXg7XG5cbmNvbnN0IGdldEVzY2FwZVN0cmluZyA9IG9wdGlvbnMgPT5cbiAgb3B0aW9ucyAmJiBvcHRpb25zLmVzY2FwZVN0cmluZyAhPT0gdW5kZWZpbmVkXG4gICAgPyBvcHRpb25zLmVzY2FwZVN0cmluZ1xuICAgIDogREVGQVVMVF9PUFRJT05TLmVzY2FwZVN0cmluZztcblxuY29uc3QgZ2V0Q29uZmlnID0gb3B0aW9ucyA9PiB7XG4gIHZhciBfb3B0aW9ucyRwcmludEJhc2ljUHI7XG5cbiAgcmV0dXJuIHtcbiAgICBjYWxsVG9KU09OOlxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNhbGxUb0pTT04gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG9wdGlvbnMuY2FsbFRvSlNPTlxuICAgICAgICA6IERFRkFVTFRfT1BUSU9OUy5jYWxsVG9KU09OLFxuICAgIGNvbG9yczpcbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5oaWdobGlnaHRcbiAgICAgICAgPyBnZXRDb2xvcnNIaWdobGlnaHQob3B0aW9ucylcbiAgICAgICAgOiBnZXRDb2xvcnNFbXB0eSgpLFxuICAgIGNvbXBhcmVLZXlzOlxuICAgICAgb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5jb21wYXJlS2V5cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IG9wdGlvbnMuY29tcGFyZUtleXNcbiAgICAgICAgOiBERUZBVUxUX09QVElPTlMuY29tcGFyZUtleXMsXG4gICAgZXNjYXBlUmVnZXg6IGdldEVzY2FwZVJlZ2V4KG9wdGlvbnMpLFxuICAgIGVzY2FwZVN0cmluZzogZ2V0RXNjYXBlU3RyaW5nKG9wdGlvbnMpLFxuICAgIGluZGVudDpcbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5taW5cbiAgICAgICAgPyAnJ1xuICAgICAgICA6IGNyZWF0ZUluZGVudChcbiAgICAgICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5pbmRlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG9wdGlvbnMuaW5kZW50XG4gICAgICAgICAgICAgIDogREVGQVVMVF9PUFRJT05TLmluZGVudFxuICAgICAgICAgICksXG4gICAgbWF4RGVwdGg6XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMubWF4RGVwdGggIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG9wdGlvbnMubWF4RGVwdGhcbiAgICAgICAgOiBERUZBVUxUX09QVElPTlMubWF4RGVwdGgsXG4gICAgbWluOlxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLm1pbiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5taW4gOiBERUZBVUxUX09QVElPTlMubWluLFxuICAgIHBsdWdpbnM6XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMucGx1Z2lucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gb3B0aW9ucy5wbHVnaW5zXG4gICAgICAgIDogREVGQVVMVF9PUFRJT05TLnBsdWdpbnMsXG4gICAgcHJpbnRCYXNpY1Byb3RvdHlwZTpcbiAgICAgIChfb3B0aW9ucyRwcmludEJhc2ljUHIgPVxuICAgICAgICBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMFxuICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgOiBvcHRpb25zLnByaW50QmFzaWNQcm90b3R5cGUpICE9PSBudWxsICYmXG4gICAgICBfb3B0aW9ucyRwcmludEJhc2ljUHIgIT09IHZvaWQgMFxuICAgICAgICA/IF9vcHRpb25zJHByaW50QmFzaWNQclxuICAgICAgICA6IHRydWUsXG4gICAgcHJpbnRGdW5jdGlvbk5hbWU6IGdldFByaW50RnVuY3Rpb25OYW1lKG9wdGlvbnMpLFxuICAgIHNwYWNpbmdJbm5lcjogb3B0aW9ucyAmJiBvcHRpb25zLm1pbiA/ICcgJyA6ICdcXG4nLFxuICAgIHNwYWNpbmdPdXRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm1pbiA/ICcnIDogJ1xcbidcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUluZGVudChpbmRlbnQpIHtcbiAgcmV0dXJuIG5ldyBBcnJheShpbmRlbnQgKyAxKS5qb2luKCcgJyk7XG59XG4vKipcbiAqIFJldHVybnMgYSBwcmVzZW50YXRpb24gc3RyaW5nIG9mIHlvdXIgYHZhbGAgb2JqZWN0XG4gKiBAcGFyYW0gdmFsIGFueSBwb3RlbnRpYWwgSmF2YVNjcmlwdCBvYmplY3RcbiAqIEBwYXJhbSBvcHRpb25zIEN1c3RvbSBzZXR0aW5nc1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdCh2YWwsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5wbHVnaW5zKSB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBmaW5kUGx1Z2luKG9wdGlvbnMucGx1Z2lucywgdmFsKTtcblxuICAgICAgaWYgKHBsdWdpbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJpbnRQbHVnaW4ocGx1Z2luLCB2YWwsIGdldENvbmZpZyhvcHRpb25zKSwgJycsIDAsIFtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBiYXNpY1Jlc3VsdCA9IHByaW50QmFzaWNWYWx1ZShcbiAgICB2YWwsXG4gICAgZ2V0UHJpbnRGdW5jdGlvbk5hbWUob3B0aW9ucyksXG4gICAgZ2V0RXNjYXBlUmVnZXgob3B0aW9ucyksXG4gICAgZ2V0RXNjYXBlU3RyaW5nKG9wdGlvbnMpXG4gICk7XG5cbiAgaWYgKGJhc2ljUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGJhc2ljUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHByaW50Q29tcGxleFZhbHVlKHZhbCwgZ2V0Q29uZmlnKG9wdGlvbnMpLCAnJywgMCwgW10pO1xufVxuXG5jb25zdCBwbHVnaW5zID0ge1xuICBBc3ltbWV0cmljTWF0Y2hlcjogX0FzeW1tZXRyaWNNYXRjaGVyLmRlZmF1bHQsXG4gIENvbnZlcnRBbnNpOiBfQ29udmVydEFuc2kuZGVmYXVsdCxcbiAgRE9NQ29sbGVjdGlvbjogX0RPTUNvbGxlY3Rpb24uZGVmYXVsdCxcbiAgRE9NRWxlbWVudDogX0RPTUVsZW1lbnQuZGVmYXVsdCxcbiAgSW1tdXRhYmxlOiBfSW1tdXRhYmxlLmRlZmF1bHQsXG4gIFJlYWN0RWxlbWVudDogX1JlYWN0RWxlbWVudC5kZWZhdWx0LFxuICBSZWFjdFRlc3RDb21wb25lbnQ6IF9SZWFjdFRlc3RDb21wb25lbnQuZGVmYXVsdFxufTtcbmV4cG9ydHMucGx1Z2lucyA9IHBsdWdpbnM7XG52YXIgX2RlZmF1bHQgPSBmb3JtYXQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBQbHVnaW4gYXMgUHJldHR5Rm9ybWF0UGx1Z2luLFxuICBQbHVnaW5zIGFzIFByZXR0eUZvcm1hdFBsdWdpbnMsXG59IGZyb20gJ3ByZXR0eS1mb3JtYXQnXG5pbXBvcnQge1xuICBwbHVnaW5zIGFzIHByZXR0eUZvcm1hdFBsdWdpbnMsXG59IGZyb20gJ3ByZXR0eS1mb3JtYXQnXG5cbmNvbnN0IHtcbiAgRE9NQ29sbGVjdGlvbixcbiAgRE9NRWxlbWVudCxcbiAgSW1tdXRhYmxlLFxuICBSZWFjdEVsZW1lbnQsXG4gIFJlYWN0VGVzdENvbXBvbmVudCxcbiAgQXN5bW1ldHJpY01hdGNoZXIsXG59ID0gcHJldHR5Rm9ybWF0UGx1Z2luc1xuXG5sZXQgUExVR0lOUzogUHJldHR5Rm9ybWF0UGx1Z2lucyA9IFtcbiAgUmVhY3RUZXN0Q29tcG9uZW50LFxuICBSZWFjdEVsZW1lbnQsXG4gIERPTUVsZW1lbnQsXG4gIERPTUNvbGxlY3Rpb24sXG4gIEltbXV0YWJsZSxcbiAgQXN5bW1ldHJpY01hdGNoZXIsXG4gIC8vIFRPRE86IHdyaXRlIHNpbm9uIG1vY2sgc2VyaWFsaXplclxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svamVzdC9ibG9iLzRlYjRmNmE1OWI2ZWFlMGUwNWI4ZTUxZGQ4Y2QzZmRjYTFjN2FmZjEvcGFja2FnZXMvamVzdC1zbmFwc2hvdC9zcmMvbW9ja1NlcmlhbGl6ZXIudHMjTDRcbl1cblxuLy8gVE9ETzogZXhwb3NlIHRoZXNlIGFuZCBhbGxvdyB1c2VyIHRvIGFkZCBjdXN0b20gc2VyaWFsaXplcnNcbi8vIFByZXBlbmQgdG8gbGlzdCBzbyB0aGUgbGFzdCBhZGRlZCBpcyB0aGUgZmlyc3QgdGVzdGVkLlxuZXhwb3J0IGNvbnN0IGFkZFNlcmlhbGl6ZXIgPSAocGx1Z2luOiBQcmV0dHlGb3JtYXRQbHVnaW4pOiB2b2lkID0+IHtcbiAgUExVR0lOUyA9IFtwbHVnaW5dLmNvbmNhdChQTFVHSU5TKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0U2VyaWFsaXplcnMgPSAoKTogUHJldHR5Rm9ybWF0UGx1Z2lucyA9PiBQTFVHSU5TXG4iLCIvKlxuQ29weXJpZ2h0IChjKSAyMDA4LTIwMTYgUGl2b3RhbCBMYWJzXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG5cIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbk5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkVcbkxJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT05cbk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbiovXG5cbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFRlc3RlciB9IGZyb20gJy4vdHlwZXMnXG5cbi8vIEV4dHJhY3RlZCBvdXQgb2YgamFzbWluZSAyLjUuMlxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhcbiAgYTogdW5rbm93bixcbiAgYjogdW5rbm93bixcbiAgY3VzdG9tVGVzdGVycz86IEFycmF5PFRlc3Rlcj4sXG4gIHN0cmljdENoZWNrPzogYm9vbGVhbixcbik6IGJvb2xlYW4ge1xuICBjdXN0b21UZXN0ZXJzID0gY3VzdG9tVGVzdGVycyB8fCBbXVxuICByZXR1cm4gZXEoYSwgYiwgW10sIFtdLCBjdXN0b21UZXN0ZXJzLCBzdHJpY3RDaGVjayA/IGhhc0tleSA6IGhhc0RlZmluZWRLZXkpXG59XG5cbmNvbnN0IGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmdcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bW1ldHJpYyhvYmo6IGFueSkge1xuICByZXR1cm4gISFvYmogJiYgaXNBKCdGdW5jdGlvbicsIG9iai5hc3ltbWV0cmljTWF0Y2gpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNBc3ltbWV0cmljKG9iajogYW55LCBzZWVuID0gbmV3IFNldCgpKTogYm9vbGVhbiB7XG4gIGlmIChzZWVuLmhhcyhvYmopKVxuICAgIHJldHVybiBmYWxzZVxuICBzZWVuLmFkZChvYmopXG4gIGlmIChpc0FzeW1tZXRyaWMob2JqKSlcbiAgICByZXR1cm4gdHJ1ZVxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKVxuICAgIHJldHVybiBvYmouc29tZShpID0+IGhhc0FzeW1tZXRyaWMoaSwgc2VlbikpXG4gIGlmIChvYmogaW5zdGFuY2VvZiBTZXQpXG4gICAgcmV0dXJuIEFycmF5LmZyb20ob2JqKS5zb21lKGkgPT4gaGFzQXN5bW1ldHJpYyhpLCBzZWVuKSlcbiAgaWYgKGlzT2JqZWN0KG9iaikpXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMob2JqKS5zb21lKHYgPT4gaGFzQXN5bW1ldHJpYyh2LCBzZWVuKSlcbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFzeW1tZXRyaWNNYXRjaChhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCBhc3ltbWV0cmljQSA9IGlzQXN5bW1ldHJpYyhhKVxuICBjb25zdCBhc3ltbWV0cmljQiA9IGlzQXN5bW1ldHJpYyhiKVxuXG4gIGlmIChhc3ltbWV0cmljQSAmJiBhc3ltbWV0cmljQilcbiAgICByZXR1cm4gdW5kZWZpbmVkXG5cbiAgaWYgKGFzeW1tZXRyaWNBKVxuICAgIHJldHVybiBhLmFzeW1tZXRyaWNNYXRjaChiKVxuXG4gIGlmIChhc3ltbWV0cmljQilcbiAgICByZXR1cm4gYi5hc3ltbWV0cmljTWF0Y2goYSlcbn1cblxuLy8gRXF1YWxpdHkgZnVuY3Rpb24gbG92aW5nbHkgYWRhcHRlZCBmcm9tIGlzRXF1YWwgaW5cbi8vICAgW1VuZGVyc2NvcmVdKGh0dHA6Ly91bmRlcnNjb3JlanMub3JnKVxuZnVuY3Rpb24gZXEoXG4gIGE6IGFueSxcbiAgYjogYW55LFxuICBhU3RhY2s6IEFycmF5PHVua25vd24+LFxuICBiU3RhY2s6IEFycmF5PHVua25vd24+LFxuICBjdXN0b21UZXN0ZXJzOiBBcnJheTxUZXN0ZXI+LFxuICBoYXNLZXk6IGFueSxcbik6IGJvb2xlYW4ge1xuICBsZXQgcmVzdWx0ID0gdHJ1ZVxuXG4gIGNvbnN0IGFzeW1tZXRyaWNSZXN1bHQgPSBhc3ltbWV0cmljTWF0Y2goYSwgYilcbiAgaWYgKGFzeW1tZXRyaWNSZXN1bHQgIT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gYXN5bW1ldHJpY1Jlc3VsdFxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY3VzdG9tVGVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1c3RvbVRlc3RlclJlc3VsdCA9IGN1c3RvbVRlc3RlcnNbaV0oYSwgYilcbiAgICBpZiAoY3VzdG9tVGVzdGVyUmVzdWx0ICE9PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gY3VzdG9tVGVzdGVyUmVzdWx0XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIEVycm9yICYmIGIgaW5zdGFuY2VvZiBFcnJvcilcbiAgICByZXR1cm4gYS5tZXNzYWdlID09PSBiLm1lc3NhZ2VcblxuICBpZiAoT2JqZWN0LmlzKGEsIGIpKVxuICAgIHJldHVybiB0cnVlXG5cbiAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICBpZiAoYSA9PT0gbnVsbCB8fCBiID09PSBudWxsKVxuICAgIHJldHVybiBhID09PSBiXG5cbiAgY29uc3QgY2xhc3NOYW1lID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpXG4gIGlmIChjbGFzc05hbWUgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiKSlcbiAgICByZXR1cm4gZmFsc2VcblxuICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzpcbiAgICAgIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICAgICAgLy8gT25lIGlzIGEgcHJpbWl0aXZlLCBvbmUgYSBgbmV3IFByaW1pdGl2ZSgpYFxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGVvZiBhICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gYm90aCBhcmUgcHJvcGVyIHByaW1pdGl2ZXNcbiAgICAgICAgcmV0dXJuIE9iamVjdC5pcyhhLCBiKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIGJvdGggYXJlIGBuZXcgUHJpbWl0aXZlKClgc1xuICAgICAgICByZXR1cm4gT2JqZWN0LmlzKGEudmFsdWVPZigpLCBiLnZhbHVlT2YoKSlcbiAgICAgIH1cbiAgICBjYXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIC8vIENvZXJjZSBkYXRlcyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgcmV0dXJuICthID09PSArYlxuICAgIC8vIFJlZ0V4cHMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIHNvdXJjZSBwYXR0ZXJucyBhbmQgZmxhZ3MuXG4gICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgIHJldHVybiBhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiYgYS5mbGFncyA9PT0gYi5mbGFnc1xuICB9XG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIC8vIFVzZSBET00zIG1ldGhvZCBpc0VxdWFsTm9kZSAoSUU+PTkpXG4gIGlmIChpc0RvbU5vZGUoYSkgJiYgaXNEb21Ob2RlKGIpKVxuICAgIHJldHVybiBhLmlzRXF1YWxOb2RlKGIpXG5cbiAgLy8gVXNlZCB0byBkZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbiAgbGV0IGxlbmd0aCA9IGFTdGFjay5sZW5ndGhcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgIC8vIGNpcmN1bGFyIHJlZmVyZW5jZXMgYXQgc2FtZSBkZXB0aCBhcmUgZXF1YWxcbiAgICAvLyBjaXJjdWxhciByZWZlcmVuY2UgaXMgbm90IGVxdWFsIHRvIG5vbi1jaXJjdWxhciBvbmVcbiAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpXG4gICAgICByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGJcblxuICAgIGVsc2UgaWYgKGJTdGFja1tsZW5ndGhdID09PSBiKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICBhU3RhY2sucHVzaChhKVxuICBiU3RhY2sucHVzaChiKVxuICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gIGlmIChjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XScgJiYgYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICBjb25zdCBhS2V5cyA9IGtleXMoYSwgaGFzS2V5KVxuICBsZXQga2V5XG4gIGxldCBzaXplID0gYUtleXMubGVuZ3RoXG5cbiAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICBpZiAoa2V5cyhiLCBoYXNLZXkpLmxlbmd0aCAhPT0gc2l6ZSlcbiAgICByZXR1cm4gZmFsc2VcblxuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAga2V5ID0gYUtleXNbc2l6ZV1cblxuICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgIHJlc3VsdFxuICAgICAgPSBoYXNLZXkoYiwga2V5KVxuICAgICAgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrLCBjdXN0b21UZXN0ZXJzLCBoYXNLZXkpXG5cbiAgICBpZiAoIXJlc3VsdClcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICBhU3RhY2sucG9wKClcbiAgYlN0YWNrLnBvcCgpXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBrZXlzKG9iajogb2JqZWN0LCBoYXNLZXk6IChvYmo6IG9iamVjdCwga2V5OiBzdHJpbmcpID0+IGJvb2xlYW4pIHtcbiAgY29uc3Qga2V5cyA9IFtdXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzS2V5KG9iaiwga2V5KSlcbiAgICAgIGtleXMucHVzaChrZXkpXG4gIH1cbiAgcmV0dXJuIGtleXMuY29uY2F0KFxuICAgIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikgYXMgQXJyYXk8YW55PikuZmlsdGVyKFxuICAgICAgc3ltYm9sID0+XG4gICAgICAgIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltYm9sKSBhcyBQcm9wZXJ0eURlc2NyaXB0b3IpXG4gICAgICAgICAgLmVudW1lcmFibGUsXG4gICAgKSxcbiAgKVxufVxuXG5mdW5jdGlvbiBoYXNEZWZpbmVkS2V5KG9iajogYW55LCBrZXk6IHN0cmluZykge1xuICByZXR1cm4gaGFzS2V5KG9iaiwga2V5KSAmJiBvYmpba2V5XSAhPT0gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGhhc0tleShvYmo6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQSh0eXBlTmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09IGBbb2JqZWN0ICR7dHlwZU5hbWV9XWBcbn1cblxuZnVuY3Rpb24gaXNEb21Ob2RlKG9iajogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgb2JqICE9PSBudWxsXG4gICAgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbiAgICAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlID09PSAnbnVtYmVyJ1xuICAgICYmIHR5cGVvZiBvYmoubm9kZU5hbWUgPT09ICdzdHJpbmcnXG4gICAgJiYgdHlwZW9mIG9iai5pc0VxdWFsTm9kZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbk5hbWVGb3IoZnVuYzogRnVuY3Rpb24pIHtcbiAgaWYgKGZ1bmMubmFtZSlcbiAgICByZXR1cm4gZnVuYy5uYW1lXG5cbiAgY29uc3QgbWF0Y2hlcyA9IGZ1bmN0aW9uVG9TdHJpbmdcbiAgICAuY2FsbChmdW5jKVxuICAgIC5tYXRjaCgvXig/OmFzeW5jKT9cXHMqZnVuY3Rpb25cXHMqXFwqP1xccyooW1xcdyRdKylcXHMqXFwoLylcbiAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzWzFdIDogJzxhbm9ueW1vdXM+J1xufVxuXG5mdW5jdGlvbiBnZXRQcm90b3R5cGUob2JqOiBvYmplY3QpIHtcbiAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZilcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iailcblxuICBpZiAob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gb2JqKVxuICAgIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BlcnR5KG9iajogb2JqZWN0IHwgbnVsbCwgcHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIW9iailcbiAgICByZXR1cm4gZmFsc2VcblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcGVydHkpKVxuICAgIHJldHVybiB0cnVlXG5cbiAgcmV0dXJuIGhhc1Byb3BlcnR5KGdldFByb3RvdHlwZShvYmopLCBwcm9wZXJ0eSlcbn1cblxuLy8gU0VOVElORUwgY29uc3RhbnRzIGFyZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9pbW11dGFibGUtanNcbmNvbnN0IElTX0tFWUVEX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfS0VZRURfX0BAJ1xuY29uc3QgSVNfU0VUX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfU0VUX19AQCdcbmNvbnN0IElTX09SREVSRURfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9PUkRFUkVEX19AQCdcblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1tdXRhYmxlVW5vcmRlcmVkS2V5ZWQobWF5YmVLZXllZDogYW55KSB7XG4gIHJldHVybiAhIShcbiAgICBtYXliZUtleWVkXG4gICAgJiYgbWF5YmVLZXllZFtJU19LRVlFRF9TRU5USU5FTF1cbiAgICAmJiAhbWF5YmVLZXllZFtJU19PUkRFUkVEX1NFTlRJTkVMXVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ltbXV0YWJsZVVub3JkZXJlZFNldChtYXliZVNldDogYW55KSB7XG4gIHJldHVybiAhIShcbiAgICBtYXliZVNldFxuICAgICYmIG1heWJlU2V0W0lTX1NFVF9TRU5USU5FTF1cbiAgICAmJiAhbWF5YmVTZXRbSVNfT1JERVJFRF9TRU5USU5FTF1cbiAgKVxufVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuY29uc3QgSXRlcmF0b3JTeW1ib2wgPSBTeW1ib2wuaXRlcmF0b3JcblxuY29uc3QgaGFzSXRlcmF0b3IgPSAob2JqZWN0OiBhbnkpID0+XG4gICEhKG9iamVjdCAhPSBudWxsICYmIG9iamVjdFtJdGVyYXRvclN5bWJvbF0pXG5cbmV4cG9ydCBjb25zdCBpdGVyYWJsZUVxdWFsaXR5ID0gKFxuICBhOiBhbnksXG4gIGI6IGFueSxcbiAgYVN0YWNrOiBBcnJheTxhbnk+ID0gW10sXG4gIGJTdGFjazogQXJyYXk8YW55PiA9IFtdLFxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChcbiAgICB0eXBlb2YgYSAhPT0gJ29iamVjdCdcbiAgICB8fCB0eXBlb2YgYiAhPT0gJ29iamVjdCdcbiAgICB8fCBBcnJheS5pc0FycmF5KGEpXG4gICAgfHwgQXJyYXkuaXNBcnJheShiKVxuICAgIHx8ICFoYXNJdGVyYXRvcihhKVxuICAgIHx8ICFoYXNJdGVyYXRvcihiKVxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGlmIChhLmNvbnN0cnVjdG9yICE9PSBiLmNvbnN0cnVjdG9yKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIGxldCBsZW5ndGggPSBhU3RhY2subGVuZ3RoXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAvLyBjaXJjdWxhciByZWZlcmVuY2VzIGF0IHNhbWUgZGVwdGggYXJlIGVxdWFsXG4gICAgLy8gY2lyY3VsYXIgcmVmZXJlbmNlIGlzIG5vdCBlcXVhbCB0byBub24tY2lyY3VsYXIgb25lXG4gICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKVxuICAgICAgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiXG4gIH1cbiAgYVN0YWNrLnB1c2goYSlcbiAgYlN0YWNrLnB1c2goYilcblxuICBjb25zdCBpdGVyYWJsZUVxdWFsaXR5V2l0aFN0YWNrID0gKGE6IGFueSwgYjogYW55KSA9PlxuICAgIGl0ZXJhYmxlRXF1YWxpdHkoYSwgYiwgWy4uLmFTdGFja10sIFsuLi5iU3RhY2tdKVxuXG4gIGlmIChhLnNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQSgnU2V0JywgYSkgfHwgaXNJbW11dGFibGVVbm9yZGVyZWRTZXQoYSkpIHtcbiAgICAgIGxldCBhbGxGb3VuZCA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgYVZhbHVlIG9mIGEpIHtcbiAgICAgICAgaWYgKCFiLmhhcyhhVmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGhhcyA9IGZhbHNlXG4gICAgICAgICAgZm9yIChjb25zdCBiVmFsdWUgb2YgYikge1xuICAgICAgICAgICAgY29uc3QgaXNFcXVhbCA9IGVxdWFscyhhVmFsdWUsIGJWYWx1ZSwgW2l0ZXJhYmxlRXF1YWxpdHlXaXRoU3RhY2tdKVxuICAgICAgICAgICAgaWYgKGlzRXF1YWwgPT09IHRydWUpXG4gICAgICAgICAgICAgIGhhcyA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYWxsRm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIHZhbHVlcy5cbiAgICAgIGFTdGFjay5wb3AoKVxuICAgICAgYlN0YWNrLnBvcCgpXG4gICAgICByZXR1cm4gYWxsRm91bmRcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBKCdNYXAnLCBhKSB8fCBpc0ltbXV0YWJsZVVub3JkZXJlZEtleWVkKGEpKSB7XG4gICAgICBsZXQgYWxsRm91bmQgPSB0cnVlXG4gICAgICBmb3IgKGNvbnN0IGFFbnRyeSBvZiBhKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYi5oYXMoYUVudHJ5WzBdKVxuICAgICAgICAgIHx8ICFlcXVhbHMoYUVudHJ5WzFdLCBiLmdldChhRW50cnlbMF0pLCBbaXRlcmFibGVFcXVhbGl0eVdpdGhTdGFja10pXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBoYXMgPSBmYWxzZVxuICAgICAgICAgIGZvciAoY29uc3QgYkVudHJ5IG9mIGIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRLZXkgPSBlcXVhbHMoYUVudHJ5WzBdLCBiRW50cnlbMF0sIFtcbiAgICAgICAgICAgICAgaXRlcmFibGVFcXVhbGl0eVdpdGhTdGFjayxcbiAgICAgICAgICAgIF0pXG5cbiAgICAgICAgICAgIGxldCBtYXRjaGVkVmFsdWUgPSBmYWxzZVxuICAgICAgICAgICAgaWYgKG1hdGNoZWRLZXkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgbWF0Y2hlZFZhbHVlID0gZXF1YWxzKGFFbnRyeVsxXSwgYkVudHJ5WzFdLCBbXG4gICAgICAgICAgICAgICAgaXRlcmFibGVFcXVhbGl0eVdpdGhTdGFjayxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaGVkVmFsdWUgPT09IHRydWUpXG4gICAgICAgICAgICAgIGhhcyA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYWxsRm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIHZhbHVlcy5cbiAgICAgIGFTdGFjay5wb3AoKVxuICAgICAgYlN0YWNrLnBvcCgpXG4gICAgICByZXR1cm4gYWxsRm91bmRcbiAgICB9XG4gIH1cblxuICBjb25zdCBiSXRlcmF0b3IgPSBiW0l0ZXJhdG9yU3ltYm9sXSgpXG5cbiAgZm9yIChjb25zdCBhVmFsdWUgb2YgYSkge1xuICAgIGNvbnN0IG5leHRCID0gYkl0ZXJhdG9yLm5leHQoKVxuICAgIGlmIChcbiAgICAgIG5leHRCLmRvbmVcbiAgICAgIHx8ICFlcXVhbHMoYVZhbHVlLCBuZXh0Qi52YWx1ZSwgW2l0ZXJhYmxlRXF1YWxpdHlXaXRoU3RhY2tdKVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICghYkl0ZXJhdG9yLm5leHQoKS5kb25lKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIC8vIFJlbW92ZSB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIHZhbHVlcy5cbiAgYVN0YWNrLnBvcCgpXG4gIGJTdGFjay5wb3AoKVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgaGFzT3duUHJvcGVydHkob2JqZWN0LCBrZXkpYCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLCBzdG9wcGluZyBhdCBgT2JqZWN0LnByb3RvdHlwZWAuXG4gKi9cbmNvbnN0IGhhc1Byb3BlcnR5SW5PYmplY3QgPSAob2JqZWN0OiBvYmplY3QsIGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHNob3VsZFRlcm1pbmF0ZVxuICAgID0gIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBvYmplY3QgPT09IE9iamVjdC5wcm90b3R5cGVcblxuICBpZiAoc2hvdWxkVGVybWluYXRlKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiAoXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KVxuICAgIHx8IGhhc1Byb3BlcnR5SW5PYmplY3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCksIGtleSlcbiAgKVxufVxuXG5jb25zdCBpc09iamVjdFdpdGhLZXlzID0gKGE6IGFueSkgPT5cbiAgaXNPYmplY3QoYSlcbiAgJiYgIShhIGluc3RhbmNlb2YgRXJyb3IpXG4gICYmICEoYSBpbnN0YW5jZW9mIEFycmF5KVxuICAmJiAhKGEgaW5zdGFuY2VvZiBEYXRlKVxuXG5leHBvcnQgY29uc3Qgc3Vic2V0RXF1YWxpdHkgPSAoXG4gIG9iamVjdDogdW5rbm93bixcbiAgc3Vic2V0OiB1bmtub3duLFxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9PiB7XG4gIC8vIHN1YnNldEVxdWFsaXR5IG5lZWRzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHJlZmVyZW5jZXNcbiAgLy8gaXQgaGFzIGFscmVhZHkgdmlzaXRlZCB0byBhdm9pZCBpbmZpbml0ZSBsb29wcyBpbiBjYXNlXG4gIC8vIHRoZXJlIGFyZSBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSBzdWJzZXQgcGFzc2VkIHRvIGl0LlxuICBjb25zdCBzdWJzZXRFcXVhbGl0eVdpdGhDb250ZXh0XG4gICAgPSAoc2VlblJlZmVyZW5jZXM6IFdlYWtNYXA8b2JqZWN0LCBib29sZWFuPiA9IG5ldyBXZWFrTWFwKCkpID0+XG4gICAgICAob2JqZWN0OiBhbnksIHN1YnNldDogYW55KTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGlmICghaXNPYmplY3RXaXRoS2V5cyhzdWJzZXQpKVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc3Vic2V0KS5ldmVyeSgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGlzT2JqZWN0V2l0aEtleXMoc3Vic2V0W2tleV0pKSB7XG4gICAgICAgICAgICBpZiAoc2VlblJlZmVyZW5jZXMuaGFzKHN1YnNldFtrZXldKSlcbiAgICAgICAgICAgICAgcmV0dXJuIGVxdWFscyhvYmplY3Rba2V5XSwgc3Vic2V0W2tleV0sIFtpdGVyYWJsZUVxdWFsaXR5XSlcblxuICAgICAgICAgICAgc2VlblJlZmVyZW5jZXMuc2V0KHN1YnNldFtrZXldLCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXN1bHRcbiAgICAgICAgICA9IG9iamVjdCAhPSBudWxsXG4gICAgICAgICAgJiYgaGFzUHJvcGVydHlJbk9iamVjdChvYmplY3QsIGtleSlcbiAgICAgICAgICAmJiBlcXVhbHMob2JqZWN0W2tleV0sIHN1YnNldFtrZXldLCBbXG4gICAgICAgICAgICBpdGVyYWJsZUVxdWFsaXR5LFxuICAgICAgICAgICAgc3Vic2V0RXF1YWxpdHlXaXRoQ29udGV4dChzZWVuUmVmZXJlbmNlcyksXG4gICAgICAgICAgXSlcbiAgICAgICAgICAvLyBUaGUgbWFpbiBnb2FsIG9mIHVzaW5nIHNlZW5SZWZlcmVuY2UgaXMgdG8gYXZvaWQgY2lyY3VsYXIgbm9kZSBvbiB0cmVlLlxuICAgICAgICAgIC8vIEl0IHdpbGwgb25seSBoYXBwZW4gd2l0aGluIGEgcGFyZW50IGFuZCBpdHMgY2hpbGQsIG5vdCBhIG5vZGUgYW5kIG5vZGVzIG5leHQgdG8gaXQgKHNhbWUgbGV2ZWwpXG4gICAgICAgICAgLy8gV2Ugc2hvdWxkIGtlZXAgdGhlIHJlZmVyZW5jZSBmb3IgYSBwYXJlbnQgYW5kIGl0cyBjaGlsZCBvbmx5XG4gICAgICAgICAgLy8gVGh1cyB3ZSBzaG91bGQgZGVsZXRlIHRoZSByZWZlcmVuY2UgaW1tZWRpYXRlbHkgc28gdGhhdCBpdCBkb2Vzbid0IGludGVyZmVyZVxuICAgICAgICAgIC8vIG90aGVyIG5vZGVzIHdpdGhpbiB0aGUgc2FtZSBsZXZlbCBvbiB0cmVlLlxuICAgICAgICAgIHNlZW5SZWZlcmVuY2VzLmRlbGV0ZShzdWJzZXRba2V5XSlcbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgcmV0dXJuIHN1YnNldEVxdWFsaXR5V2l0aENvbnRleHQoKShvYmplY3QsIHN1YnNldClcbn1cblxuZXhwb3J0IGNvbnN0IHR5cGVFcXVhbGl0eSA9IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCB8fCBhLmNvbnN0cnVjdG9yID09PSBiLmNvbnN0cnVjdG9yKVxuICAgIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGFycmF5QnVmZmVyRXF1YWxpdHkgPSAoXG4gIGE6IHVua25vd24sXG4gIGI6IHVua25vd24sXG4pOiBib29sZWFuIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAhKGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGRhdGFWaWV3QSA9IG5ldyBEYXRhVmlldyhhKVxuICBjb25zdCBkYXRhVmlld0IgPSBuZXcgRGF0YVZpZXcoYilcblxuICAvLyBCdWZmZXJzIGFyZSBub3QgZXF1YWwgd2hlbiB0aGV5IGRvIG5vdCBoYXZlIHRoZSBzYW1lIGJ5dGUgbGVuZ3RoXG4gIGlmIChkYXRhVmlld0EuYnl0ZUxlbmd0aCAhPT0gZGF0YVZpZXdCLmJ5dGVMZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlXG5cbiAgLy8gQ2hlY2sgaWYgZXZlcnkgYnl0ZSB2YWx1ZSBpcyBlcXVhbCB0byBlYWNoIG90aGVyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVZpZXdBLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgIGlmIChkYXRhVmlld0EuZ2V0VWludDgoaSkgIT09IGRhdGFWaWV3Qi5nZXRVaW50OChpKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IHNwYXJzZUFycmF5RXF1YWxpdHkgPSAoXG4gIGE6IHVua25vd24sXG4gIGI6IHVua25vd24sXG4pOiBib29sZWFuIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGEpIHx8ICFBcnJheS5pc0FycmF5KGIpKVxuICAgIHJldHVybiB1bmRlZmluZWRcblxuICAvLyBBIHNwYXJzZSBhcnJheSBbLCAsIDFdIHdpbGwgaGF2ZSBrZXlzIFtcIjJcIl0gd2hlcmVhcyBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDFdIHdpbGwgaGF2ZSBrZXlzIFtcIjBcIiwgXCIxXCIsIFwiMlwiXVxuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGEpXG4gIGNvbnN0IGJLZXlzID0gT2JqZWN0LmtleXMoYilcbiAgcmV0dXJuIChcbiAgICBlcXVhbHMoYSwgYiwgW2l0ZXJhYmxlRXF1YWxpdHksIHR5cGVFcXVhbGl0eV0sIHRydWUpICYmIGVxdWFscyhhS2V5cywgYktleXMpXG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgRW5oYW5jZWRTcHkgfSBmcm9tICcuLi9qZXN0LW1vY2snXG5pbXBvcnQgeyBpc01vY2tGdW5jdGlvbiB9IGZyb20gJy4uL2plc3QtbW9jaydcbmltcG9ydCB7IGFkZFNlcmlhbGl6ZXIgfSBmcm9tICcuLi9zbmFwc2hvdC9wb3J0L3BsdWdpbnMnXG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdGFibGUgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2hhaVBsdWdpbiwgTWF0Y2hlclN0YXRlIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IGFycmF5QnVmZmVyRXF1YWxpdHksIGl0ZXJhYmxlRXF1YWxpdHksIGVxdWFscyBhcyBqZXN0RXF1YWxzLCBzcGFyc2VBcnJheUVxdWFsaXR5LCBzdWJzZXRFcXVhbGl0eSwgdHlwZUVxdWFsaXR5IH0gZnJvbSAnLi9qZXN0LXV0aWxzJ1xuaW1wb3J0IHR5cGUgeyBBc3ltbWV0cmljTWF0Y2hlciB9IGZyb20gJy4vamVzdC1hc3ltbWV0cmljLW1hdGNoZXJzJ1xuXG5jb25zdCBNQVRDSEVSU19PQkpFQ1QgPSBTeW1ib2wuZm9yKCdtYXRjaGVycy1vYmplY3QnKVxuXG5pZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnbG9iYWwsIE1BVENIRVJTX09CSkVDVCkpIHtcbiAgY29uc3QgZGVmYXVsdFN0YXRlOiBQYXJ0aWFsPE1hdGNoZXJTdGF0ZT4gPSB7XG4gICAgYXNzZXJ0aW9uQ2FsbHM6IDAsXG4gICAgaXNFeHBlY3RpbmdBc3NlcnRpb25zOiBmYWxzZSxcbiAgICBpc0V4cGVjdGluZ0Fzc2VydGlvbnNFcnJvcjogbnVsbCxcbiAgICBleHBlY3RlZEFzc2VydGlvbnNOdW1iZXI6IG51bGwsXG4gICAgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyRXJyb3I6IG51bGwsXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgTUFUQ0hFUlNfT0JKRUNULCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHN0YXRlOiBkZWZhdWx0U3RhdGUsXG4gICAgfSxcbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGdldFN0YXRlID0gPFN0YXRlIGV4dGVuZHMgTWF0Y2hlclN0YXRlID0gTWF0Y2hlclN0YXRlPigpOiBTdGF0ZSA9PlxuICAoZ2xvYmFsIGFzIGFueSlbTUFUQ0hFUlNfT0JKRUNUXS5zdGF0ZVxuXG5leHBvcnQgY29uc3Qgc2V0U3RhdGUgPSA8U3RhdGUgZXh0ZW5kcyBNYXRjaGVyU3RhdGUgPSBNYXRjaGVyU3RhdGU+KFxuICBzdGF0ZTogUGFydGlhbDxTdGF0ZT4sXG4pOiB2b2lkID0+IHtcbiAgT2JqZWN0LmFzc2lnbigoZ2xvYmFsIGFzIGFueSlbTUFUQ0hFUlNfT0JKRUNUXS5zdGF0ZSwgc3RhdGUpXG59XG5cbi8vIEplc3QgRXhwZWN0IENvbXBhY3RcbmV4cG9ydCBjb25zdCBKZXN0Q2hhaUV4cGVjdDogQ2hhaVBsdWdpbiA9IChjaGFpLCB1dGlscykgPT4ge1xuICBmdW5jdGlvbiBkZWYobmFtZToga2V5b2YgVmkuQXNzZXJ0aW9uIHwgKGtleW9mIFZpLkFzc2VydGlvbilbXSwgZm46ICgodGhpczogQ2hhaS5Bc3NlcnRpb25TdGF0aWMgJiBWaS5Bc3NlcnRpb24sIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpKSB7XG4gICAgY29uc3QgYWRkTWV0aG9kID0gKG46IGtleW9mIFZpLkFzc2VydGlvbikgPT4ge1xuICAgICAgdXRpbHMuYWRkTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgbiwgZm4pXG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpXG4gICAgICBuYW1lLmZvckVhY2gobiA9PiBhZGRNZXRob2QobikpXG5cbiAgICBlbHNlXG4gICAgICBhZGRNZXRob2QobmFtZSlcbiAgfVxuXG4gIChbJ3Rocm93JywgJ3Rocm93cycsICdUaHJvdyddIGFzIGNvbnN0KS5mb3JFYWNoKChtKSA9PiB7XG4gICAgdXRpbHMub3ZlcndyaXRlTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgbSwgKF9zdXBlcjogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odGhpczogQ2hhaS5Bc3NlcnRpb24gJiBDaGFpLkFzc2VydGlvblN0YXRpYywgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHV0aWxzLmZsYWcodGhpcywgJ3Byb21pc2UnKVxuICAgICAgICBjb25zdCBvYmplY3QgPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICBpZiAocHJvbWlzZSA9PT0gJ3JlamVjdHMnKSB7XG4gICAgICAgICAgdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgb2JqZWN0XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIGRlZigndG9FcXVhbCcsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgY29uc3QgYWN0dWFsID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICBjb25zdCBlcXVhbCA9IGplc3RFcXVhbHMoXG4gICAgICBhY3R1YWwsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIFtpdGVyYWJsZUVxdWFsaXR5XSxcbiAgICApXG5cbiAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICBlcXVhbCxcbiAgICAgICdleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCAje2V4cH0nLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGRlZXBseSBlcXVhbCAje2V4cH0nLFxuICAgICAgZXhwZWN0ZWQsXG4gICAgICBhY3R1YWwsXG4gICAgKVxuICB9KVxuXG4gIGRlZigndG9TdHJpY3RFcXVhbCcsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgY29uc3Qgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICBjb25zdCBlcXVhbCA9IGplc3RFcXVhbHMoXG4gICAgICBvYmosXG4gICAgICBleHBlY3RlZCxcbiAgICAgIFtcbiAgICAgICAgaXRlcmFibGVFcXVhbGl0eSxcbiAgICAgICAgdHlwZUVxdWFsaXR5LFxuICAgICAgICBzcGFyc2VBcnJheUVxdWFsaXR5LFxuICAgICAgICBhcnJheUJ1ZmZlckVxdWFsaXR5LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgZXF1YWwsXG4gICAgICAnZXhwZWN0ZWQgI3t0aGlzfSB0byBzdHJpY3RseSBlcXVhbCAje2V4cH0nLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHN0cmljdGx5IGVxdWFsICN7ZXhwfScsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIG9iaixcbiAgICApXG4gIH0pXG4gIGRlZigndG9CZScsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgY29uc3QgYWN0dWFsID0gdGhpcy5fb2JqXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgT2JqZWN0LmlzKGFjdHVhbCwgZXhwZWN0ZWQpLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgI3tleHB9IC8vIE9iamVjdC5pcyBlcXVhbGl0eScsXG4gICAgICAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgI3tleHB9IC8vIE9iamVjdC5pcyBlcXVhbGl0eScsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIGFjdHVhbCxcbiAgICApXG4gIH0pXG4gIGRlZigndG9NYXRjaE9iamVjdCcsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgY29uc3QgYWN0dWFsID0gdGhpcy5fb2JqXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgamVzdEVxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBbaXRlcmFibGVFcXVhbGl0eSwgc3Vic2V0RXF1YWxpdHldKSxcbiAgICAgICdleHBlY3RlZCAje3RoaXN9IHRvIG1hdGNoIG9iamVjdCAje2V4cH0nLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IG1hdGNoIG9iamVjdCAje2V4cH0nLFxuICAgICAgZXhwZWN0ZWQsXG4gICAgICBhY3R1YWwsXG4gICAgKVxuICB9KVxuICBkZWYoJ3RvTWF0Y2gnLCBmdW5jdGlvbihleHBlY3RlZDogc3RyaW5nIHwgUmVnRXhwKSB7XG4gICAgaWYgKHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gdGhpcy5pbmNsdWRlKGV4cGVjdGVkKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLm1hdGNoKGV4cGVjdGVkKVxuICB9KVxuICBkZWYoJ3RvQ29udGFpbicsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5jb250YWluKGl0ZW0pXG4gIH0pXG4gIGRlZigndG9Db250YWluRXF1YWwnLCBmdW5jdGlvbihleHBlY3RlZCkge1xuICAgIGNvbnN0IG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgY29uc3QgaW5kZXggPSBBcnJheS5mcm9tKG9iaikuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gamVzdEVxdWFscyhpdGVtLCBleHBlY3RlZClcbiAgICB9KVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpbmRleCAhPT0gLTEsXG4gICAgICAnZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwIGVxdWFsbHkgY29udGFpbiAje2V4cH0nLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGRlZXAgZXF1YWxseSBjb250YWluICN7ZXhwfScsXG4gICAgICBleHBlY3RlZCxcbiAgICApXG4gIH0pXG4gIGRlZigndG9CZVRydXRoeScsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBCb29sZWFuKG9iaiksXG4gICAgICAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnV0aHknLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIHRydXRoeScsXG4gICAgICBvYmosXG4gICAgKVxuICB9KVxuICBkZWYoJ3RvQmVGYWxzeScsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAhb2JqLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc3knLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGZhbHN5JyxcbiAgICAgIG9iaixcbiAgICApXG4gIH0pXG4gIGRlZigndG9CZUdyZWF0ZXJUaGFuJywgZnVuY3Rpb24oZXhwZWN0ZWQ6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnRvLmdyZWF0ZXJUaGFuKGV4cGVjdGVkKVxuICB9KVxuICBkZWYoJ3RvQmVHcmVhdGVyVGhhbk9yRXF1YWwnLCBmdW5jdGlvbihleHBlY3RlZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMudG8uZ3JlYXRlclRoYW5PckVxdWFsKGV4cGVjdGVkKVxuICB9KVxuICBkZWYoJ3RvQmVMZXNzVGhhbicsIGZ1bmN0aW9uKGV4cGVjdGVkOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy50by5sZXNzVGhhbihleHBlY3RlZClcbiAgfSlcbiAgZGVmKCd0b0JlTGVzc1RoYW5PckVxdWFsJywgZnVuY3Rpb24oZXhwZWN0ZWQ6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnRvLmxlc3NUaGFuT3JFcXVhbChleHBlY3RlZClcbiAgfSlcbiAgZGVmKCd0b0JlTmFOJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYmUuTmFOXG4gIH0pXG4gIGRlZigndG9CZVVuZGVmaW5lZCcsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJlLnVuZGVmaW5lZFxuICB9KVxuICBkZWYoJ3RvQmVOdWxsJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYmUubnVsbFxuICB9KVxuICBkZWYoJ3RvQmVEZWZpbmVkJywgZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgbmVnYXRlID0gdXRpbHMuZmxhZyh0aGlzLCAnbmVnYXRlJylcbiAgICB1dGlscy5mbGFnKHRoaXMsICduZWdhdGUnLCBmYWxzZSlcblxuICAgIGlmIChuZWdhdGUpXG4gICAgICByZXR1cm4gdGhpcy5iZS51bmRlZmluZWRcblxuICAgIHJldHVybiB0aGlzLm5vdC5iZS51bmRlZmluZWRcbiAgfSlcbiAgZGVmKCd0b0JlSW5zdGFuY2VPZicsIGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VPZihvYmopXG4gIH0pXG4gIGRlZigndG9IYXZlTGVuZ3RoJywgZnVuY3Rpb24obGVuZ3RoOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5oYXZlLmxlbmd0aChsZW5ndGgpXG4gIH0pXG4gIC8vIGRlc3RydWN0dXJpbmcsIGJlY2F1c2UgaXQgY2hlY2tzIGBhcmd1bWVudHNgIGluc2lkZSwgYW5kIHZhbHVlIGlzIHBhc3NpbmcgYXMgYHVuZGVmaW5lZGBcbiAgZGVmKCd0b0hhdmVQcm9wZXJ0eScsIGZ1bmN0aW9uKC4uLmFyZ3M6IFtwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZT86IGFueV0pIHtcbiAgICByZXR1cm4gdGhpcy5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KC4uLmFyZ3MpXG4gIH0pXG4gIGRlZigndG9CZUNsb3NlVG8nLCBmdW5jdGlvbihyZWNlaXZlZDogbnVtYmVyLCBwcmVjaXNpb24gPSAyKSB7XG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9vYmpcbiAgICBsZXQgcGFzcyA9IGZhbHNlXG4gICAgbGV0IGV4cGVjdGVkRGlmZiA9IDBcbiAgICBsZXQgcmVjZWl2ZWREaWZmID0gMFxuXG4gICAgaWYgKHJlY2VpdmVkID09PSBJbmZpbml0eSAmJiBleHBlY3RlZCA9PT0gSW5maW5pdHkpIHtcbiAgICAgIHBhc3MgPSB0cnVlXG4gICAgfVxuICAgIGVsc2UgaWYgKHJlY2VpdmVkID09PSAtSW5maW5pdHkgJiYgZXhwZWN0ZWQgPT09IC1JbmZpbml0eSkge1xuICAgICAgcGFzcyA9IHRydWVcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBleHBlY3RlZERpZmYgPSBNYXRoLnBvdygxMCwgLXByZWNpc2lvbikgLyAyXG4gICAgICByZWNlaXZlZERpZmYgPSBNYXRoLmFicyhleHBlY3RlZCAtIHJlY2VpdmVkKVxuICAgICAgcGFzcyA9IHJlY2VpdmVkRGlmZiA8IGV4cGVjdGVkRGlmZlxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICBwYXNzLFxuICAgICAgYGV4cGVjdGVkICN7dGhpc30gdG8gYmUgY2xvc2UgdG8gI3tleHB9LCByZWNlaXZlZCBkaWZmZXJlbmNlIGlzICR7cmVjZWl2ZWREaWZmfSwgYnV0IGV4cGVjdGVkICR7ZXhwZWN0ZWREaWZmfWAsXG4gICAgICBgZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgY2xvc2UgdG8gI3tleHB9LCByZWNlaXZlZCBkaWZmZXJlbmNlIGlzICR7cmVjZWl2ZWREaWZmfSwgYnV0IGV4cGVjdGVkICR7ZXhwZWN0ZWREaWZmfWAsXG4gICAgICByZWNlaXZlZCxcbiAgICAgIGV4cGVjdGVkLFxuICAgIClcbiAgfSlcblxuICBjb25zdCBhc3NlcnRJc01vY2sgPSAoYXNzZXJ0aW9uOiBhbnkpID0+IHtcbiAgICBpZiAoIWlzTW9ja0Z1bmN0aW9uKGFzc2VydGlvbi5fb2JqKSlcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dXRpbHMuaW5zcGVjdChhc3NlcnRpb24uX29iail9IGlzIG5vdCBhIHNweSBvciBhIGNhbGwgdG8gYSBzcHkhYClcbiAgfVxuICBjb25zdCBnZXRTcHkgPSAoYXNzZXJ0aW9uOiBhbnkpID0+IHtcbiAgICBhc3NlcnRJc01vY2soYXNzZXJ0aW9uKVxuICAgIHJldHVybiBhc3NlcnRpb24uX29iaiBhcyBFbmhhbmNlZFNweVxuICB9XG4gIGRlZihbJ3RvSGF2ZUJlZW5DYWxsZWRUaW1lcycsICd0b0JlQ2FsbGVkVGltZXMnXSwgZnVuY3Rpb24obnVtYmVyOiBudW1iZXIpIHtcbiAgICBjb25zdCBzcHkgPSBnZXRTcHkodGhpcylcbiAgICBjb25zdCBzcHlOYW1lID0gc3B5LmdldE1vY2tOYW1lKClcbiAgICBjb25zdCBjYWxsQ291bnQgPSBzcHkubW9jay5jYWxscy5sZW5ndGhcbiAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICBjYWxsQ291bnQgPT09IG51bWJlcixcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBiZSBjYWxsZWQgI3tleHB9IHRpbWVzYCxcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBub3QgYmUgY2FsbGVkICN7ZXhwfSB0aW1lc2AsXG4gICAgICBudW1iZXIsXG4gICAgICBjYWxsQ291bnQsXG4gICAgKVxuICB9KVxuICBkZWYoJ3RvSGF2ZUJlZW5DYWxsZWRPbmNlJywgZnVuY3Rpb24oKSB7XG4gICAgY29uc3Qgc3B5ID0gZ2V0U3B5KHRoaXMpXG4gICAgY29uc3Qgc3B5TmFtZSA9IHNweS5nZXRNb2NrTmFtZSgpXG4gICAgY29uc3QgY2FsbENvdW50ID0gc3B5Lm1vY2suY2FsbHMubGVuZ3RoXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgY2FsbENvdW50ID09PSAxLFxuICAgICAgYGV4cGVjdGVkIFwiJHtzcHlOYW1lfVwiIHRvIGJlIGNhbGxlZCBvbmNlYCxcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBub3QgYmUgY2FsbGVkIG9uY2VgLFxuICAgICAgMSxcbiAgICAgIGNhbGxDb3VudCxcbiAgICApXG4gIH0pXG4gIGRlZihbJ3RvSGF2ZUJlZW5DYWxsZWQnLCAndG9CZUNhbGxlZCddLCBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBzcHkgPSBnZXRTcHkodGhpcylcbiAgICBjb25zdCBzcHlOYW1lID0gc3B5LmdldE1vY2tOYW1lKClcbiAgICBjb25zdCBjYWxsZWQgPSBzcHkubW9jay5jYWxscy5sZW5ndGggPiAwXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgY2FsbGVkLFxuICAgICAgYGV4cGVjdGVkIFwiJHtzcHlOYW1lfVwiIHRvIGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlYCxcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBub3QgYmUgY2FsbGVkIGF0IGFsbGAsXG4gICAgICB0cnVlLFxuICAgICAgY2FsbGVkLFxuICAgIClcbiAgfSlcbiAgZGVmKFsndG9IYXZlQmVlbkNhbGxlZFdpdGgnLCAndG9CZUNhbGxlZFdpdGgnXSwgZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGNvbnN0IHNweSA9IGdldFNweSh0aGlzKVxuICAgIGNvbnN0IHNweU5hbWUgPSBzcHkuZ2V0TW9ja05hbWUoKVxuICAgIGNvbnN0IHBhc3MgPSBzcHkubW9jay5jYWxscy5zb21lKGNhbGxBcmcgPT4gamVzdEVxdWFscyhjYWxsQXJnLCBhcmdzLCBbaXRlcmFibGVFcXVhbGl0eV0pKVxuICAgIHJldHVybiB0aGlzLmFzc2VydChcbiAgICAgIHBhc3MsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzOiAje2V4cH1gLFxuICAgICAgYGV4cGVjdGVkIFwiJHtzcHlOYW1lfVwiIHRvIG5vdCBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHM6ICN7ZXhwfWAsXG4gICAgICBhcmdzLFxuICAgICAgc3B5Lm1vY2suY2FsbHMsXG4gICAgKVxuICB9KVxuICBjb25zdCBvcmRpbmFsT2YgPSAoaTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaiA9IGkgJSAxMFxuICAgIGNvbnN0IGsgPSBpICUgMTAwXG5cbiAgICBpZiAoaiA9PT0gMSAmJiBrICE9PSAxMSlcbiAgICAgIHJldHVybiBgJHtpfXN0YFxuXG4gICAgaWYgKGogPT09IDIgJiYgayAhPT0gMTIpXG4gICAgICByZXR1cm4gYCR7aX1uZGBcblxuICAgIGlmIChqID09PSAzICYmIGsgIT09IDEzKVxuICAgICAgcmV0dXJuIGAke2l9cmRgXG5cbiAgICByZXR1cm4gYCR7aX10aGBcbiAgfVxuICBkZWYoWyd0b0hhdmVCZWVuTnRoQ2FsbGVkV2l0aCcsICdudGhDYWxsZWRXaXRoJ10sIGZ1bmN0aW9uKHRpbWVzOiBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgY29uc3Qgc3B5ID0gZ2V0U3B5KHRoaXMpXG4gICAgY29uc3Qgc3B5TmFtZSA9IHNweS5nZXRNb2NrTmFtZSgpXG4gICAgY29uc3QgbnRoQ2FsbCA9IHNweS5tb2NrLmNhbGxzW3RpbWVzIC0gMV1cblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgamVzdEVxdWFscyhudGhDYWxsLCBhcmdzLCBbaXRlcmFibGVFcXVhbGl0eV0pLFxuICAgICAgYGV4cGVjdGVkICR7b3JkaW5hbE9mKHRpbWVzKX0gXCIke3NweU5hbWV9XCIgY2FsbCB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggI3tleHB9YCxcbiAgICAgIGBleHBlY3RlZCAke29yZGluYWxPZih0aW1lcyl9IFwiJHtzcHlOYW1lfVwiIGNhbGwgdG8gbm90IGhhdmUgYmVlbiBjYWxsZWQgd2l0aCAje2V4cH1gLFxuICAgICAgYXJncyxcbiAgICAgIG50aENhbGwsXG4gICAgKVxuICB9KVxuICBkZWYoWyd0b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgnLCAnbGFzdENhbGxlZFdpdGgnXSwgZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCBzcHkgPSBnZXRTcHkodGhpcylcbiAgICBjb25zdCBzcHlOYW1lID0gc3B5LmdldE1vY2tOYW1lKClcbiAgICBjb25zdCBsYXN0Q2FsbCA9IHNweS5tb2NrLmNhbGxzW3NweS5jYWxscy5sZW5ndGggLSAxXVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBqZXN0RXF1YWxzKGxhc3RDYWxsLCBhcmdzLCBbaXRlcmFibGVFcXVhbGl0eV0pLFxuICAgICAgYGV4cGVjdGVkIGxhc3QgXCIke3NweU5hbWV9XCIgY2FsbCB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggI3tleHB9YCxcbiAgICAgIGBleHBlY3RlZCBsYXN0IFwiJHtzcHlOYW1lfVwiIGNhbGwgdG8gbm90IGhhdmUgYmVlbiBjYWxsZWQgd2l0aCAje2V4cH1gLFxuICAgICAgYXJncyxcbiAgICAgIGxhc3RDYWxsLFxuICAgIClcbiAgfSlcbiAgZGVmKFsndG9UaHJvdycsICd0b1Rocm93RXJyb3InXSwgZnVuY3Rpb24oZXhwZWN0ZWQ/OiBzdHJpbmcgfCBDb25zdHJ1Y3RhYmxlIHwgUmVnRXhwIHwgRXJyb3IpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9vYmpcbiAgICBjb25zdCBwcm9taXNlID0gdXRpbHMuZmxhZyh0aGlzLCAncHJvbWlzZScpXG4gICAgbGV0IHRocm93bjogYW55ID0gbnVsbFxuXG4gICAgaWYgKHByb21pc2UpIHtcbiAgICAgIHRocm93biA9IG9ialxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9iaigpXG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93biA9IGVyclxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBleHBlY3RlZC5uYW1lIHx8IGV4cGVjdGVkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICAgIHRocm93biAmJiB0aHJvd24gaW5zdGFuY2VvZiBleHBlY3RlZCxcbiAgICAgICAgYGV4cGVjdGVkIGVycm9yIHRvIGJlIGluc3RhbmNlIG9mICR7bmFtZX1gLFxuICAgICAgICBgZXhwZWN0ZWQgZXJyb3Igbm90IHRvIGJlIGluc3RhbmNlIG9mICR7bmFtZX1gLFxuICAgICAgICBleHBlY3RlZCxcbiAgICAgICAgdGhyb3duLFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RlZCAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICAgIHRocm93biAmJiBleHBlY3RlZC5tZXNzYWdlID09PSB0aHJvd24ubWVzc2FnZSxcbiAgICAgICAgYGV4cGVjdGVkIGVycm9yIHRvIGhhdmUgbWVzc2FnZTogJHtleHBlY3RlZC5tZXNzYWdlfWAsXG4gICAgICAgIGBleHBlY3RlZCBlcnJvciBub3QgdG8gaGF2ZSBtZXNzYWdlOiAke2V4cGVjdGVkLm1lc3NhZ2V9YCxcbiAgICAgICAgZXhwZWN0ZWQubWVzc2FnZSxcbiAgICAgICAgdGhyb3duICYmIHRocm93bi5tZXNzYWdlLFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RlZCAmJiB0eXBlb2YgKGV4cGVjdGVkIGFzIGFueSkuYXN5bW1ldHJpY01hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBtYXRjaGVyID0gZXhwZWN0ZWQgYXMgYW55IGFzIEFzeW1tZXRyaWNNYXRjaGVyPGFueT5cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydChcbiAgICAgICAgdGhyb3duICYmIG1hdGNoZXIuYXN5bW1ldHJpY01hdGNoKHRocm93biksXG4gICAgICAgICdleHBlY3RlZCBlcnJvciB0byBtYXRjaCBhc3ltbWV0cmljIG1hdGNoZXInLFxuICAgICAgICAnZXhwZWN0ZWQgZXJyb3Igbm90IHRvIG1hdGNoIGFzeW1tZXRyaWMgbWF0Y2hlcicsXG4gICAgICAgIG1hdGNoZXIudG9TdHJpbmcoKSxcbiAgICAgICAgdGhyb3duLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRvLnRocm93cyhleHBlY3RlZClcbiAgfSlcbiAgZGVmKFsndG9IYXZlUmV0dXJuZWQnLCAndG9SZXR1cm4nXSwgZnVuY3Rpb24oKSB7XG4gICAgY29uc3Qgc3B5ID0gZ2V0U3B5KHRoaXMpXG4gICAgY29uc3Qgc3B5TmFtZSA9IHNweS5nZXRNb2NrTmFtZSgpXG4gICAgY29uc3QgY2FsbGVkQW5kTm90VGhyZXcgPSBzcHkubW9jay5jYWxscy5sZW5ndGggPiAwICYmICFzcHkubW9jay5yZXN1bHRzLnNvbWUoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAndGhyb3cnKVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgY2FsbGVkQW5kTm90VGhyZXcsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBhdCBsZWFzdCBvbmNlYCxcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBub3QgYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZGAsXG4gICAgICBjYWxsZWRBbmROb3RUaHJldyxcbiAgICAgICFjYWxsZWRBbmROb3RUaHJldyxcbiAgICApXG4gIH0pXG4gIGRlZihbJ3RvSGF2ZVJldHVybmVkVGltZXMnLCAndG9SZXR1cm5UaW1lcyddLCBmdW5jdGlvbih0aW1lczogbnVtYmVyKSB7XG4gICAgY29uc3Qgc3B5ID0gZ2V0U3B5KHRoaXMpXG4gICAgY29uc3Qgc3B5TmFtZSA9IHNweS5nZXRNb2NrTmFtZSgpXG4gICAgY29uc3Qgc3VjY2Vzc2Z1bGxSZXR1cm5zID0gc3B5Lm1vY2sucmVzdWx0cy5yZWR1Y2UoKHN1Y2Nlc3MsIHsgdHlwZSB9KSA9PiB0eXBlID09PSAndGhyb3cnID8gc3VjY2VzcyA6ICsrc3VjY2VzcywgMClcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHN1Y2Nlc3NmdWxsUmV0dXJucyA9PT0gdGltZXMsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCAke3RpbWVzfSB0aW1lc2AsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gbm90IGJlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgJHt0aW1lc30gdGltZXNgLFxuICAgICAgYGV4cGVjdGVkIG51bWJlciBvZiByZXR1cm5zOiAke3RpbWVzfWAsXG4gICAgICBgcmVjZWl2ZWQgbnVtYmVyIG9mIHJldHVybnM6ICR7c3VjY2Vzc2Z1bGxSZXR1cm5zfWAsXG4gICAgKVxuICB9KVxuICBkZWYoWyd0b0hhdmVSZXR1cm5lZFdpdGgnLCAndG9SZXR1cm5XaXRoJ10sIGZ1bmN0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzcHkgPSBnZXRTcHkodGhpcylcbiAgICBjb25zdCBzcHlOYW1lID0gc3B5LmdldE1vY2tOYW1lKClcbiAgICBjb25zdCBwYXNzID0gc3B5Lm1vY2sucmVzdWx0cy5zb21lKCh7IHR5cGUsIHZhbHVlOiByZXN1bHQgfSkgPT4gdHlwZSA9PT0gJ3JldHVybicgJiYgamVzdEVxdWFscyh2YWx1ZSwgcmVzdWx0KSlcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHBhc3MsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCB3aXRoICN7ZXhwfWAsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gbm90IGJlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgd2l0aCAje2V4cH1gLFxuICAgICAgdmFsdWUsXG4gICAgKVxuICB9KVxuICBkZWYoWyd0b0hhdmVMYXN0UmV0dXJuZWRXaXRoJywgJ2xhc3RSZXR1cm5lZFdpdGgnXSwgZnVuY3Rpb24odmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNweSA9IGdldFNweSh0aGlzKVxuICAgIGNvbnN0IHNweU5hbWUgPSBzcHkuZ2V0TW9ja05hbWUoKVxuICAgIGNvbnN0IHsgdmFsdWU6IGxhc3RSZXN1bHQgfSA9IHNweS5tb2NrLnJlc3VsdHNbc3B5LnJldHVybnMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBwYXNzID0gamVzdEVxdWFscyhsYXN0UmVzdWx0LCB2YWx1ZSlcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHBhc3MsXG4gICAgICBgZXhwZWN0ZWQgbGFzdCBcIiR7c3B5TmFtZX1cIiBjYWxsIHRvIHJldHVybiAje2V4cH1gLFxuICAgICAgYGV4cGVjdGVkIGxhc3QgXCIke3NweU5hbWV9XCIgY2FsbCB0byBub3QgcmV0dXJuICN7ZXhwfWAsXG4gICAgICB2YWx1ZSxcbiAgICAgIGxhc3RSZXN1bHQsXG4gICAgKVxuICB9KVxuICBkZWYoWyd0b0hhdmVOdGhSZXR1cm5lZFdpdGgnLCAnbnRoUmV0dXJuZWRXaXRoJ10sIGZ1bmN0aW9uKG50aENhbGw6IG51bWJlciwgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNweSA9IGdldFNweSh0aGlzKVxuICAgIGNvbnN0IHNweU5hbWUgPSBzcHkuZ2V0TW9ja05hbWUoKVxuICAgIGNvbnN0IGlzTm90ID0gdXRpbHMuZmxhZyh0aGlzLCAnbmVnYXRlJykgYXMgYm9vbGVhblxuICAgIGNvbnN0IHsgdHlwZTogY2FsbFR5cGUsIHZhbHVlOiBjYWxsUmVzdWx0IH0gPSBzcHkubW9jay5yZXN1bHRzW250aENhbGwgLSAxXVxuICAgIGNvbnN0IG9yZGluYWxDYWxsID0gYCR7b3JkaW5hbE9mKG50aENhbGwpfSBjYWxsYFxuXG4gICAgaWYgKCFpc05vdCAmJiBjYWxsVHlwZSA9PT0gJ3Rocm93JylcbiAgICAgIGNoYWkuYXNzZXJ0LmZhaWwoYGV4cGVjdGVkICR7b3JkaW5hbENhbGx9IHRvIHJldHVybiAje2V4cH0sIGJ1dCBpbnN0ZWFkIGl0IHRocmV3IGFuIGVycm9yYClcblxuICAgIGNvbnN0IG50aENhbGxSZXR1cm4gPSBqZXN0RXF1YWxzKGNhbGxSZXN1bHQsIHZhbHVlKVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBudGhDYWxsUmV0dXJuLFxuICAgICAgYGV4cGVjdGVkICR7b3JkaW5hbENhbGx9IFwiJHtzcHlOYW1lfVwiIGNhbGwgdG8gcmV0dXJuICN7ZXhwfWAsXG4gICAgICBgZXhwZWN0ZWQgJHtvcmRpbmFsQ2FsbH0gXCIke3NweU5hbWV9XCIgY2FsbCB0byBub3QgcmV0dXJuICN7ZXhwfWAsXG4gICAgICB2YWx1ZSxcbiAgICAgIGNhbGxSZXN1bHQsXG4gICAgKVxuICB9KVxuXG4gIHV0aWxzLmFkZFByb3BlcnR5KGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ3Jlc29sdmVzJywgZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgdXRpbHMuZmxhZyh0aGlzLCAncHJvbWlzZScsICdyZXNvbHZlcycpXG4gICAgY29uc3Qgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICBjb25zdCBwcm94eTogYW55ID0gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldDogKHRhcmdldCwga2V5LCByZWNpZXZlcikgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjaWV2ZXIpXG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBpbnN0YW5jZW9mIGNoYWkuQXNzZXJ0aW9uID8gcHJveHkgOiByZXN1bHRcblxuICAgICAgICByZXR1cm4gYXN5bmMoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICByZXR1cm4gb2JqLnRoZW4oXG4gICAgICAgICAgICAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnLCB2YWx1ZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsKHRoaXMsIC4uLmFyZ3MpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvbWlzZSByZWplY3RlZCBcIiR7ZXJyfVwiIGluc3RlYWQgb2YgcmVzb2x2aW5nYClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4gcHJveHlcbiAgfSlcblxuICB1dGlscy5hZGRQcm9wZXJ0eShjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdyZWplY3RzJywgZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgdXRpbHMuZmxhZyh0aGlzLCAncHJvbWlzZScsICdyZWplY3RzJylcbiAgICBjb25zdCBvYmogPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKVxuICAgIGNvbnN0IHdyYXBwZXIgPSB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nID8gb2JqKCkgOiBvYmogLy8gZm9yIGplc3QgY29tcGF0XG4gICAgY29uc3QgcHJveHk6IGFueSA9IG5ldyBQcm94eSh0aGlzLCB7XG4gICAgICBnZXQ6ICh0YXJnZXQsIGtleSwgcmVjaWV2ZXIpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2lldmVyKVxuXG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIHJldHVybiByZXN1bHQgaW5zdGFuY2VvZiBjaGFpLkFzc2VydGlvbiA/IHByb3h5IDogcmVzdWx0XG5cbiAgICAgICAgcmV0dXJuIGFzeW5jKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHdyYXBwZXIudGhlbihcbiAgICAgICAgICAgICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvbWlzZSByZXNvbHZlZCBcIiR7dmFsdWV9XCIgaW5zdGVhZCBvZiByZWplY3RpbmdgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnLCBlcnIpXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0aGlzLCAuLi5hcmdzKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHJldHVybiBwcm94eVxuICB9KVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnYXNzZXJ0aW9ucycsXG4gICAgZnVuY3Rpb24gYXNzZXJ0aW9ucyhleHBlY3RlZDogbnVtYmVyKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgZXhwZWN0ZWQgbnVtYmVyIG9mIGFzc2VydGlvbnMgdG8gYmUgJHtleHBlY3RlZH0sIGJ1dCBnb3QgJHtnZXRTdGF0ZSgpLmFzc2VydGlvbkNhbGxzfWApXG4gICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBhc3NlcnRpb25zKVxuXG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlcjogZXhwZWN0ZWQsXG4gICAgICAgIGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlckVycm9yOiBlcnJvcixcbiAgICAgIH0pXG4gICAgfSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnaGFzQXNzZXJ0aW9ucycsXG4gICAgZnVuY3Rpb24gaGFzQXNzZXJ0aW9ucygpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdleHBlY3RlZCBhbnkgbnVtYmVyIG9mIGFzc2VydGlvbiwgYnV0IGdvdCBub25lJylcbiAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIGhhc0Fzc2VydGlvbnMpXG5cbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgaXNFeHBlY3RpbmdBc3NlcnRpb25zOiB0cnVlLFxuICAgICAgICBpc0V4cGVjdGluZ0Fzc2VydGlvbnNFcnJvcjogZXJyb3IsXG4gICAgICB9KVxuICAgIH0sXG4gIClcblxuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5leHBlY3QsXG4gICAgJ2FkZFNuYXBzaG90U2VyaWFsaXplcicsXG4gICAgYWRkU2VyaWFsaXplcixcbiAgKVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3RcbiAqXG4gKiBAdHlwZSB7b2JqZWN0fSBnbG9iYWxPYmplY3RcbiAqL1xudmFyIGdsb2JhbE9iamVjdDtcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbmlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy8gTm9kZVxuICAgIGdsb2JhbE9iamVjdCA9IGdsb2JhbDtcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vIEJyb3dzZXJcbiAgICBnbG9iYWxPYmplY3QgPSB3aW5kb3c7XG59IGVsc2Uge1xuICAgIC8vIFdlYldvcmtlclxuICAgIGdsb2JhbE9iamVjdCA9IHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsT2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24uY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb3B5UHJvdG90eXBlTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlKS5yZWR1Y2UoZnVuY3Rpb24ocmVzdWx0LCBuYW1lKSB7XG4gICAgICAgIC8vIGlnbm9yZSBzaXplIGJlY2F1c2UgaXQgdGhyb3dzIGZyb20gTWFwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG5hbWUgIT09IFwic2l6ZVwiICYmXG4gICAgICAgICAgICBuYW1lICE9PSBcImNhbGxlclwiICYmXG4gICAgICAgICAgICBuYW1lICE9PSBcImNhbGxlZVwiICYmXG4gICAgICAgICAgICBuYW1lICE9PSBcImFyZ3VtZW50c1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcHJvdG90eXBlW25hbWVdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBjYWxsLmJpbmQocHJvdG90eXBlW25hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShBcnJheS5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVyeSA9IHJlcXVpcmUoXCIuL3Byb3RvdHlwZXMvYXJyYXlcIikuZXZlcnk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFzQ2FsbHNMZWZ0KGNhbGxNYXAsIHNweSkge1xuICAgIGlmIChjYWxsTWFwW3NweS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsTWFwW3NweS5pZF0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBjYWxsTWFwW3NweS5pZF0gPCBzcHkuY2FsbENvdW50O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQWRqYWNlbnRDYWxscyhjYWxsTWFwLCBzcHksIGluZGV4LCBzcGllcykge1xuICAgIHZhciBjYWxsZWRCZWZvcmVOZXh0ID0gdHJ1ZTtcblxuICAgIGlmIChpbmRleCAhPT0gc3BpZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICBjYWxsZWRCZWZvcmVOZXh0ID0gc3B5LmNhbGxlZEJlZm9yZShzcGllc1tpbmRleCArIDFdKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQ2FsbHNMZWZ0KGNhbGxNYXAsIHNweSkgJiYgY2FsbGVkQmVmb3JlTmV4dCkge1xuICAgICAgICBjYWxsTWFwW3NweS5pZF0gKz0gMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEEgU2lub24gcHJveHkgb2JqZWN0IChmYWtlLCBzcHksIHN0dWIpXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gU2lub25Qcm94eVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gY2FsbGVkQmVmb3JlIC0gQSBtZXRob2QgdGhhdCBkZXRlcm1pbmVzIGlmIHRoaXMgcHJveHkgd2FzIGNhbGxlZCBiZWZvcmUgYW5vdGhlciBvbmVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFNvbWUgaWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjYWxsQ291bnQgLSBOdW1iZXIgb2YgdGltZXMgdGhpcyBwcm94eSBoYXMgYmVlbiBjYWxsZWRcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBzcGllcyBoYXZlIGJlZW4gY2FsbGVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgc3VwcGxpZWQgaW5cbiAqXG4gKiBAcGFyYW0gIHtTaW5vblByb3h5W10gfCBTaW5vblByb3h5fSBzcGllcyBBbiBhcnJheSBvZiBwcm94aWVzLCBvciBzZXZlcmFsIHByb3hpZXMgYXMgYXJndW1lbnRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB3aGVuIHNwaWVzIGFyZSBjYWxsZWQgaW4gb3JkZXIsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBjYWxsZWRJbk9yZGVyKHNwaWVzKSB7XG4gICAgdmFyIGNhbGxNYXAgPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICB2YXIgX3NwaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHMgOiBzcGllcztcblxuICAgIHJldHVybiBldmVyeShfc3BpZXMsIGNoZWNrQWRqYWNlbnRDYWxscy5iaW5kKG51bGwsIGNhbGxNYXApKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWxsZWRJbk9yZGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBhIGRpc3BsYXkgbmFtZSBmb3IgYSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZ1bmN0aW9uTmFtZShmdW5jKSB7XG4gICAgaWYgKCFmdW5jKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBmdW5jLmRpc3BsYXlOYW1lIHx8XG4gICAgICAgICAgICBmdW5jLm5hbWUgfHxcbiAgICAgICAgICAgIC8vIFVzZSBmdW5jdGlvbiBkZWNvbXBvc2l0aW9uIGFzIGEgbGFzdCByZXNvcnQgdG8gZ2V0IGZ1bmN0aW9uXG4gICAgICAgICAgICAvLyBuYW1lLiBEb2VzIG5vdCByZWx5IG9uIGZ1bmN0aW9uIGRlY29tcG9zaXRpb24gdG8gd29yayAtIGlmIGl0XG4gICAgICAgICAgICAvLyBkb2Vzbid0IGRlYnVnZ2luZyB3aWxsIGJlIHNsaWdodGx5IGxlc3MgaW5mb3JtYXRpdmVcbiAgICAgICAgICAgIC8vIChpLmUuIHRvU3RyaW5nIHdpbGwgc2F5ICdzcHknIHJhdGhlciB0aGFuICdteUZ1bmMnKS5cbiAgICAgICAgICAgIChTdHJpbmcoZnVuYykubWF0Y2goL2Z1bmN0aW9uIChbXlxccyhdKykvKSB8fCBbXSlbMV1cbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBhbmQgd2UgbWlnaHQgZ2V0IGFuIGV4Y2VwdGlvbiwgYXMgYSBsYXN0LWxhc3RcbiAgICAgICAgLy8gcmVzb3J0IGZhbGwgYmFjayB0byBlbXB0eSBzdHJpbmcuXG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uLW5hbWVcIik7XG5cbi8qKlxuICogUmV0dXJucyBhIGRpc3BsYXkgbmFtZSBmb3IgYSB2YWx1ZSBmcm9tIGEgY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0gIHtvYmplY3R9IHZhbHVlIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHJldHVybnMgeyhzdHJpbmd8bnVsbCl9IEEgc3RyaW5nIG9yIG51bGxcbiAqL1xuZnVuY3Rpb24gY2xhc3NOYW1lKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHx8XG4gICAgICAgIC8vIFRoZSBuZXh0IGJyYW5jaCBpcyBmb3IgSUUxMSBzdXBwb3J0IG9ubHk6XG4gICAgICAgIC8vIEJlY2F1c2UgdGhlIG5hbWUgcHJvcGVydHkgaXMgbm90IHNldCBvbiB0aGUgcHJvdG90eXBlXG4gICAgICAgIC8vIG9mIHRoZSBGdW5jdGlvbiBvYmplY3QsIHdlIGZpbmFsbHkgdHJ5IHRvIGdyYWIgdGhlXG4gICAgICAgIC8vIG5hbWUgZnJvbSBpdHMgZGVmaW5pdGlvbi4gVGhpcyB3aWxsIG5ldmVyIGJlIHJlYWNoZWRcbiAgICAgICAgLy8gaW4gbm9kZSwgc28gd2UgYXJlIG5vdCBhYmxlIHRvIHRlc3QgdGhpcyBwcm9wZXJseS5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vbmFtZVxuICAgICAgICAodHlwZW9mIHZhbHVlLmNvbnN0cnVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUodmFsdWUuY29uc3RydWN0b3IpKSB8fFxuICAgICAgICBudWxsXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWU7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGludm9rZSB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gYW5kIHByaW50IGFcbiAqIGRlcHJlY2F0aW9uIHdhcm5pbmcgdG8gdGhlIGNvbnNvbGUgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuY1xuICogQHBhcmFtICB7c3RyaW5nfSBtc2dcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0cy53cmFwID0gZnVuY3Rpb24oZnVuYywgbXNnKSB7XG4gICAgdmFyIHdyYXBwZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZXhwb3J0cy5wcmludFdhcm5pbmcobXNnKTtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIGlmIChmdW5jLnByb3RvdHlwZSkge1xuICAgICAgICB3cmFwcGVkLnByb3RvdHlwZSA9IGZ1bmMucHJvdG90eXBlO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyB3aGljaCBjYW4gYmUgc3VwcGxpZWQgdG8gYHdyYXAoKWAgdG8gbm90aWZ5IHRoZSB1c2VyIHRoYXQgYVxuICogcGFydGljdWxhciBwYXJ0IG9mIHRoZSBzaW5vbiBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHBhY2thZ2VOYW1lXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGZ1bmNOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmRlZmF1bHRNc2cgPSBmdW5jdGlvbihwYWNrYWdlTmFtZSwgZnVuY05hbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBwYWNrYWdlTmFtZSArXG4gICAgICAgIFwiLlwiICtcbiAgICAgICAgZnVuY05hbWUgK1xuICAgICAgICBcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIEFQSSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFwiICtcbiAgICAgICAgcGFja2FnZU5hbWUgK1xuICAgICAgICBcIi5cIlxuICAgICk7XG59O1xuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgb24gdGhlIGNvbnNvbGUsIHdoZW4gaXQgZXhpc3RzXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBtc2dcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmV4cG9ydHMucHJpbnRXYXJuaW5nID0gZnVuY3Rpb24obXNnKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy5lbWl0V2FybmluZykge1xuICAgICAgICAvLyBFbWl0IFdhcm5pbmdzIGluIE5vZGVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhtc2cpO1xuICAgIH0gZWxzZSBpZiAoY29uc29sZS5pbmZvKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhtc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XG4gICAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIGZuIHJldHVybnMgdHJ1ZSBmb3IgYWxsIG1lbWJlcnMgb2Ygb2JqLlxuICogVGhpcyBpcyBhbiBldmVyeSBpbXBsZW1lbnRhdGlvbiB0aGF0IHdvcmtzIGZvciBhbGwgaXRlcmFibGVzXG4gKlxuICogQHBhcmFtICB7b2JqZWN0fSAgIG9ialxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBldmVyeShvYmosIGZuKSB7XG4gICAgdmFyIHBhc3MgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCFmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3dpbmcgYW4gZXJyb3IgaXMgdGhlIG9ubHkgd2F5IHRvIGJyZWFrIGBmb3JFYWNoYFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHBhc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFzcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHNvcnQgPSByZXF1aXJlKFwiLi9wcm90b3R5cGVzL2FycmF5XCIpLnNvcnQ7XG52YXIgc2xpY2UgPSByZXF1aXJlKFwiLi9wcm90b3R5cGVzL2FycmF5XCIpLnNsaWNlO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmF0b3IoYSwgYikge1xuICAgIC8vIHV1aWQsIHdvbid0IGV2ZXIgYmUgZXF1YWxcbiAgICB2YXIgYUNhbGwgPSBhLmdldENhbGwoMCk7XG4gICAgdmFyIGJDYWxsID0gYi5nZXRDYWxsKDApO1xuICAgIHZhciBhSWQgPSAoYUNhbGwgJiYgYUNhbGwuY2FsbElkKSB8fCAtMTtcbiAgICB2YXIgYklkID0gKGJDYWxsICYmIGJDYWxsLmNhbGxJZCkgfHwgLTE7XG5cbiAgICByZXR1cm4gYUlkIDwgYklkID8gLTEgOiAxO1xufVxuXG4vKipcbiAqIEEgU2lub24gcHJveHkgb2JqZWN0IChmYWtlLCBzcHksIHN0dWIpXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gU2lub25Qcm94eVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0Q2FsbCAtIEEgbWV0aG9kIHRoYXQgY2FuIHJldHVybiB0aGUgZmlyc3QgY2FsbFxuICovXG5cbi8qKlxuICogU29ydHMgYW4gYXJyYXkgb2YgU2lub25Qcm94eSBpbnN0YW5jZXMgKGZha2UsIHNweSwgc3R1YikgYnkgdGhlaXIgZmlyc3QgY2FsbFxuICpcbiAqIEBwYXJhbSAge1Npbm9uUHJveHlbXSB8IFNpbm9uUHJveHl9IHNwaWVzXG4gKiBAcmV0dXJucyB7U2lub25Qcm94eVtdfVxuICovXG5mdW5jdGlvbiBvcmRlckJ5Rmlyc3RDYWxsKHNwaWVzKSB7XG4gICAgcmV0dXJuIHNvcnQoc2xpY2Uoc3BpZXMpLCBjb21wYXJhdG9yKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvcmRlckJ5Rmlyc3RDYWxsO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShGdW5jdGlvbi5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShNYXAucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlQcm90b3R5cGUoT2JqZWN0LnByb3RvdHlwZSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNvcHlQcm90b3R5cGUgPSByZXF1aXJlKFwiLi9jb3B5LXByb3RvdHlwZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5UHJvdG90eXBlKFNldC5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShTdHJpbmcucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhcnJheTogcmVxdWlyZShcIi4vYXJyYXlcIiksXG4gICAgZnVuY3Rpb246IHJlcXVpcmUoXCIuL2Z1bmN0aW9uXCIpLFxuICAgIG1hcDogcmVxdWlyZShcIi4vbWFwXCIpLFxuICAgIG9iamVjdDogcmVxdWlyZShcIi4vb2JqZWN0XCIpLFxuICAgIHNldDogcmVxdWlyZShcIi4vc2V0XCIpLFxuICAgIHN0cmluZzogcmVxdWlyZShcIi4vc3RyaW5nXCIpXG59O1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLnR5cGVEZXRlY3QgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIHR5cGUtZGV0ZWN0XG4gKiBDb3B5cmlnaHQoYykgMjAxMyBqYWtlIGx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG52YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xudmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaWQtYmxhY2tsaXN0XG5cbnZhciBzeW1ib2xFeGlzdHMgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJztcbnZhciBtYXBFeGlzdHMgPSB0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJztcbnZhciBzZXRFeGlzdHMgPSB0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJztcbnZhciB3ZWFrTWFwRXhpc3RzID0gdHlwZW9mIFdlYWtNYXAgIT09ICd1bmRlZmluZWQnO1xudmFyIHdlYWtTZXRFeGlzdHMgPSB0eXBlb2YgV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgZGF0YVZpZXdFeGlzdHMgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xudmFyIHN5bWJvbEl0ZXJhdG9yRXhpc3RzID0gc3ltYm9sRXhpc3RzICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09ICd1bmRlZmluZWQnO1xudmFyIHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzID0gc3ltYm9sRXhpc3RzICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgIT09ICd1bmRlZmluZWQnO1xudmFyIHNldEVudHJpZXNFeGlzdHMgPSBzZXRFeGlzdHMgJiYgdHlwZW9mIFNldC5wcm90b3R5cGUuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBtYXBFbnRyaWVzRXhpc3RzID0gbWFwRXhpc3RzICYmIHR5cGVvZiBNYXAucHJvdG90eXBlLmVudHJpZXMgPT09ICdmdW5jdGlvbic7XG52YXIgc2V0SXRlcmF0b3JQcm90b3R5cGUgPSBzZXRFbnRyaWVzRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgU2V0KCkuZW50cmllcygpKTtcbnZhciBtYXBJdGVyYXRvclByb3RvdHlwZSA9IG1hcEVudHJpZXNFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBNYXAoKS5lbnRyaWVzKCkpO1xudmFyIGFycmF5SXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xJdGVyYXRvckV4aXN0cyAmJiB0eXBlb2YgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG52YXIgYXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGFycmF5SXRlcmF0b3JFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG52YXIgc3RyaW5nSXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xJdGVyYXRvckV4aXN0cyAmJiB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xudmFyIHN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlID0gc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG52YXIgdG9TdHJpbmdMZWZ0U2xpY2VMZW5ndGggPSA4O1xudmFyIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCA9IC0xO1xuLyoqXG4gKiAjIyMgdHlwZU9mIChvYmopXG4gKlxuICogVXNlcyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGFuIG9iamVjdCxcbiAqIG5vcm1hbGlzaW5nIGJlaGF2aW91ciBhY3Jvc3MgZW5naW5lIHZlcnNpb25zICYgd2VsbCBvcHRpbWlzZWQuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IG9iamVjdCB0eXBlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiB0eXBlRGV0ZWN0KG9iaikge1xuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAgKiBQcmU6XG4gICAqICAgc3RyaW5nIGxpdGVyYWwgICAgIHggMywwMzksMDM1IG9wcy9zZWMgwrExLjYyJSAoNzggcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDEsNDI0LDEzOCBvcHMvc2VjIMKxNC41NCUgKDc1IHJ1bnMgc2FtcGxlZClcbiAgICogICBudW1iZXIgbGl0ZXJhbCAgICAgeCAxLDY1MywxNTMgb3BzL3NlYyDCsTEuOTElICg4MiBydW5zIHNhbXBsZWQpXG4gICAqICAgdW5kZWZpbmVkICAgICAgICAgIHggOSw5NzgsNjYwIG9wcy9zZWMgwrExLjkyJSAoNzUgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDIsNTU2LDc2OSBvcHMvc2VjIMKxMS43MyUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBzdHJpbmcgbGl0ZXJhbCAgICAgeCAzOCw1NjQsNzk2IG9wcy9zZWMgwrExLjE1JSAoNzkgcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDMxLDE0OCw5NDAgb3BzL3NlYyDCsTEuMTAlICg3OSBydW5zIHNhbXBsZWQpXG4gICAqICAgbnVtYmVyIGxpdGVyYWwgICAgIHggMzIsNjc5LDMzMCBvcHMvc2VjIMKxMS45MCUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgICogICB1bmRlZmluZWQgICAgICAgICAgeCAzMiwzNjMsMzY4IG9wcy9zZWMgwrExLjA3JSAoODIgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDMxLDI5Niw4NzAgb3BzL3NlYyDCsTAuOTYlICg4MyBydW5zIHNhbXBsZWQpXG4gICAqL1xuICB2YXIgdHlwZW9mT2JqID0gdHlwZW9mIG9iajtcbiAgaWYgKHR5cGVvZk9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mT2JqO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIG51bGwgICAgICAgICAgICAgICB4IDI4LDY0NSw3NjUgb3BzL3NlYyDCsTEuMTclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgbnVsbCAgICAgICAgICAgICAgIHggMzYsNDI4LDk2MiBvcHMvc2VjIMKxMS4zNyUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93KWBgXG4gICAqICAtIE5vZGUgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gQ2hyb21lID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gUGhhbnRvbUpTID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBJRSBFZGdlID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcylgYFxuICAgKiAgLSBDaHJvbWUgV29ya2VyID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIEZpcmVmb3ggV29ya2VyID09PSBcIltvYmplY3QgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gU2FmYXJpIFdvcmtlciA9PT0gXCJbb2JqZWN0IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIElFIDExIFdvcmtlciA9PT0gXCJbb2JqZWN0IFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIElFIEVkZ2UgV29ya2VyID09PSBcIltvYmplY3QgV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICovXG4gIGlmIChvYmogPT09IGdsb2JhbE9iamVjdCkge1xuICAgIHJldHVybiAnZ2xvYmFsJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICAqIFByZTpcbiAgICogICBhcnJheSBsaXRlcmFsICAgICAgeCAyLDg4OCwzNTIgb3BzL3NlYyDCsTAuNjclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgYXJyYXkgbGl0ZXJhbCAgICAgIHggMjIsNDc5LDY1MCBvcHMvc2VjIMKxMC45NiUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgICAoc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPT09IGZhbHNlIHx8ICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIG9iaikpXG4gICkge1xuICAgIHJldHVybiAnQXJyYXknO1xuICB9XG5cbiAgLy8gTm90IGNhY2hpbmcgZXhpc3RlbmNlIG9mIGB3aW5kb3dgIGFuZCByZWxhdGVkIHByb3BlcnRpZXMgZHVlIHRvIHBvdGVudGlhbFxuICAvLyBmb3IgYHdpbmRvd2AgdG8gYmUgdW5zZXQgYmVmb3JlIHRlc3RzIGluIHF1YXNpLWJyb3dzZXIgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93ICE9PSBudWxsKSB7XG4gICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjbG9jYXRpb24pXG4gICAgICogV2hhdFdHIEhUTUwkNy43LjMgLSBUaGUgYExvY2F0aW9uYCBpbnRlcmZhY2VcbiAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5sb2NhdGlvbilgYFxuICAgICAqICAtIElFIDw9MTEgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKiAgLSBJRSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhdGlvbiA9PT0gJ29iamVjdCcgJiYgb2JqID09PSB3aW5kb3cubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiAnTG9jYXRpb24nO1xuICAgIH1cblxuICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkb2N1bWVudClcbiAgICAgKiBXaGF0V0cgSFRNTCQzLjEuMSAtIFRoZSBgRG9jdW1lbnRgIG9iamVjdFxuICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAqICAgICAgIChodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC9odG1sLmh0bWwjSUQtMjY4MDkyNjgpXG4gICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAqICAgICAgIFdoYXRXRyBIVE1MIHN0YXRlczpcbiAgICAgKiAgICAgICAgID4gRm9yIGhpc3RvcmljYWwgcmVhc29ucywgV2luZG93IG9iamVjdHMgbXVzdCBhbHNvIGhhdmUgYVxuICAgICAqICAgICAgICAgPiB3cml0YWJsZSwgY29uZmlndXJhYmxlLCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lZFxuICAgICAqICAgICAgICAgPiBIVE1MRG9jdW1lbnQgd2hvc2UgdmFsdWUgaXMgdGhlIERvY3VtZW50IGludGVyZmFjZSBvYmplY3QuXG4gICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudClgYFxuICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIElFIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93LmRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiBvYmogPT09IHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuICdEb2N1bWVudCc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yID09PSAnb2JqZWN0Jykge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI21pbWV0eXBlYXJyYXkpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ4LjYuMS41IC0gUGx1Z2lucyAtIEludGVyZmFjZSBNaW1lVHlwZUFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5taW1lVHlwZXMpYGBcbiAgICAgICAqICAtIElFIDw9MTAgPT09IFwiW29iamVjdCBNU01pbWVUeXBlc0NvbGxlY3Rpb25dXCJcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzKSB7XG4gICAgICAgIHJldHVybiAnTWltZVR5cGVBcnJheSc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNwbHVnaW5hcnJheSlcbiAgICAgICAqIFdoYXRXRyBIVE1MJDguNi4xLjUgLSBQbHVnaW5zIC0gSW50ZXJmYWNlIFBsdWdpbkFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5wbHVnaW5zKWBgXG4gICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgTVNQbHVnaW5zQ29sbGVjdGlvbl1cIlxuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucykge1xuICAgICAgICByZXR1cm4gJ1BsdWdpbkFycmF5JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCA9PT0gJ29iamVjdCcpICYmXG4gICAgICAgIG9iaiBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCkge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjcGx1Z2luYXJyYXkpXG4gICAgICAqIFdoYXRXRyBIVE1MJDQuNC40IC0gVGhlIGBibG9ja3F1b3RlYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MUXVvdGVFbGVtZW50YFxuICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jsb2NrcXVvdGUnKSlgYFxuICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgSFRNTEJsb2NrRWxlbWVudF1cIlxuICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ0JMT0NLUVVPVEUnKSB7XG4gICAgICAgIHJldHVybiAnSFRNTFF1b3RlRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWRhdGFjZWxsZWxlbWVudClcbiAgICAgICAqIFdoYXRXRyBIVE1MJDQuOS45IC0gVGhlIGB0ZGAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50YFxuICAgICAgICogTm90ZTogTW9zdCBicm93c2VycyBjdXJyZW50bHkgYWRoZXIgdG8gdGhlIFczQyBET00gTGV2ZWwgMiBzcGVjXG4gICAgICAgKiAgICAgICAoaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvaHRtbC5odG1sI0lELTgyOTE1MDc1KVxuICAgICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAgICogICAgICAgYm90aCBURCBhbmQgVEggZWxlbWVudHMuIFdoYXRXRyBzZXBhcmF0ZXMgdGhlc2UuXG4gICAgICAgKiBUZXN0OiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSlcbiAgICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ1REJykge1xuICAgICAgICByZXR1cm4gJ0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWhlYWRlcmNlbGxlbGVtZW50KVxuICAgICAgICogV2hhdFdHIEhUTUwkNC45LjkgLSBUaGUgYHRkYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudGBcbiAgICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAgICogICAgICAgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1ML2h0bWwuaHRtbCNJRC04MjkxNTA3NSlcbiAgICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAgICogVGVzdDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpXG4gICAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgcmV0dXJuICdIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA2MjUsNjQ0IG9wcy9zZWMgwrExLjU4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgRmxvYXQzMkFycmF5ICAgICAgIHggMSwyNzksODUyIG9wcy9zZWMgwrEyLjkxJSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggMSwxNzgsMTg1IG9wcy9zZWMgwrExLjk1JSAoODMgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggMSwwMDgsMzgwIG9wcy9zZWMgwrEyLjI1JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhBcnJheSAgICAgICAgIHggMSwxMjgsMDQwIG9wcy9zZWMgwrEyLjExJSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggMSwxNzAsMTE5IG9wcy9zZWMgwrEyLjg4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggMSwxNzYsMzQ4IG9wcy9zZWMgwrE1Ljc5JSAoODYgcnVucyBzYW1wbGVkKVxuICAqICAgSW50OEFycmF5ICAgICAgICAgIHggMSwwNTgsNzA3IG9wcy9zZWMgwrE0Ljk0JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggMSwxMTAsNjMzIG9wcy9zZWMgwrE0LjIwJSAoODAgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA3LDEwNSw2NzEgb3BzL3NlYyDCsTEzLjQ3JSAoNjQgcnVucyBzYW1wbGVkKVxuICAqICAgRmxvYXQzMkFycmF5ICAgICAgIHggNSw4ODcsOTEyIG9wcy9zZWMgwrExLjQ2JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggNiw0OTEsNjYxIG9wcy9zZWMgwrExLjc2JSAoNzkgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggNiw1NTksNzk1IG9wcy9zZWMgwrExLjY3JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhBcnJheSAgICAgICAgIHggNiw0NjMsOTY2IG9wcy9zZWMgwrExLjQzJSAoODUgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggNSw2NDEsODQxIG9wcy9zZWMgwrEzLjQ5JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggNiw1ODMsNTExIG9wcy9zZWMgwrExLjk4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50OEFycmF5ICAgICAgICAgIHggNiw2MDYsMDc4IG9wcy9zZWMgwrExLjc0JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggNiw2MDIsMjI0IG9wcy9zZWMgwrExLjc3JSAoODMgcnVucyBzYW1wbGVkKVxuICAqL1xuICB2YXIgc3RyaW5nVGFnID0gKHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuXG4gIHZhciBvYmpQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICByZWdleCBsaXRlcmFsICAgICAgeCAxLDc3MiwzODUgb3BzL3NlYyDCsTEuODUlICg3NyBydW5zIHNhbXBsZWQpXG4gICogICByZWdleCBjb25zdHJ1Y3RvciAgeCAyLDE0Myw2MzQgb3BzL3NlYyDCsTIuNDYlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHJlZ2V4IGxpdGVyYWwgICAgICB4IDMsOTI4LDAwOSBvcHMvc2VjIMKxMC42NSUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiAgIHJlZ2V4IGNvbnN0cnVjdG9yICB4IDMsOTMxLDEwOCBvcHMvc2VjIMKxMC41OCUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG9ialByb3RvdHlwZSA9PT0gUmVnRXhwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnUmVnRXhwJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgZGF0ZSAgICAgICAgICAgICAgIHggMiwxMzAsMDc0IG9wcy9zZWMgwrE0LjQyJSAoNjggcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBkYXRlICAgICAgICAgICAgICAgeCAzLDk1Myw3Nzkgb3BzL3NlYyDCsTEuMzUlICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IERhdGUucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdEYXRlJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1wcm9taXNlLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjUuNC41LjQgLSBQcm9taXNlLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJQcm9taXNlXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUHJvbWlzZS5yZXNvbHZlKCkpYGBcbiAgICogIC0gQ2hyb21lIDw9NDcgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICogIC0gRWRnZSA8PTIwID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqICAtIEZpcmVmb3ggMjktTGF0ZXN0ID09PSBcIltvYmplY3QgUHJvbWlzZV1cIlxuICAgKiAgLSBTYWZhcmkgNy4xLUxhdGVzdCA9PT0gXCJbb2JqZWN0IFByb21pc2VdXCJcbiAgICovXG4gIGlmIChwcm9taXNlRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gUHJvbWlzZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1Byb21pc2UnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBzZXQgICAgICAgICAgICAgICAgeCAyLDIyMiwxODYgb3BzL3NlYyDCsTEuMzElICg4MiBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHNldCAgICAgICAgICAgICAgICB4IDQsNTQ1LDg3OSBvcHMvc2VjIMKxMS4xMyUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFNldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1NldCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIG1hcCAgICAgICAgICAgICAgICB4IDIsMzk2LDg0MiBvcHMvc2VjIMKxMS41OSUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgbWFwICAgICAgICAgICAgICAgIHggNCwxODMsOTQ1IG9wcy9zZWMgwrE2LjU5JSAoODIgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnTWFwJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgd2Vha3NldCAgICAgICAgICAgIHggMSwzMjMsMjIwIG9wcy9zZWMgwrEyLjE3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICB3ZWFrc2V0ICAgICAgICAgICAgeCA0LDIzNyw1MTAgb3BzL3NlYyDCsTIuMDElICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmICh3ZWFrU2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gV2Vha1NldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1dlYWtTZXQnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICB3ZWFrbWFwICAgICAgICAgICAgeCAxLDUwMCwyNjAgb3BzL3NlYyDCsTIuMDIlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHdlYWttYXAgICAgICAgICAgICB4IDMsODgxLDM4NCBvcHMvc2VjIMKxMS40NSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHdlYWtNYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBXZWFrTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnV2Vha01hcCc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZGF0YXZpZXcucHJvdG90eXBlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyNC4yLjQuMjEgLSBEYXRhVmlldy5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiRGF0YVZpZXdcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChkYXRhVmlld0V4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IERhdGFWaWV3LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnRGF0YVZpZXcnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVtYXBpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIzLjEuNS4yLjIgLSAlTWFwSXRlcmF0b3JQcm90b3R5cGUlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIk1hcCBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBNYXAoKS5lbnRyaWVzKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gbWFwSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ01hcCBJdGVyYXRvcic7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtJXNldGl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjMuMi41LjIuMiAtICVTZXRJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiU2V0IEl0ZXJhdG9yXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IFNldCgpLmVudHJpZXMoKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChzZXRFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzZXRJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU2V0IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIyLjEuNS4yLjIgLSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiQXJyYXkgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IGFycmF5SXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ0FycmF5IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyMS4xLjUuMi4yIC0gJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJTdHJpbmcgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCgnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzdHJpbmdJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU3RyaW5nIEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgb2JqZWN0IGZyb20gbnVsbCAgIHggMiw0MjQsMzIwIG9wcy9zZWMgwrExLjY3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBvYmplY3QgZnJvbSBudWxsICAgeCA1LDgzOCwwMDAgb3BzL3NlYyDCsTAuOTklICg4NCBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0XG4gICAgLnByb3RvdHlwZVxuICAgIC50b1N0cmluZ1xuICAgIC5jYWxsKG9iailcbiAgICAuc2xpY2UodG9TdHJpbmdMZWZ0U2xpY2VMZW5ndGgsIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCk7XG59XG5cbnJldHVybiB0eXBlRGV0ZWN0O1xuXG59KSkpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB0eXBlID0gcmVxdWlyZShcInR5cGUtZGV0ZWN0XCIpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxvd2VyLWNhc2UgcmVzdWx0IG9mIHJ1bm5pbmcgdHlwZSBmcm9tIHR5cGUtZGV0ZWN0IG9uIHRoZSB2YWx1ZVxuICpcbiAqIEBwYXJhbSAgeyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gKlxuICogQHBhcmFtICB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHZhbHVlVG9TdHJpbmcodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUudG9TdHJpbmcpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZVRvU3RyaW5nO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdsb2JhbDogcmVxdWlyZShcIi4vZ2xvYmFsXCIpLFxuICAgIGNhbGxlZEluT3JkZXI6IHJlcXVpcmUoXCIuL2NhbGxlZC1pbi1vcmRlclwiKSxcbiAgICBjbGFzc05hbWU6IHJlcXVpcmUoXCIuL2NsYXNzLW5hbWVcIiksXG4gICAgZGVwcmVjYXRlZDogcmVxdWlyZShcIi4vZGVwcmVjYXRlZFwiKSxcbiAgICBldmVyeTogcmVxdWlyZShcIi4vZXZlcnlcIiksXG4gICAgZnVuY3Rpb25OYW1lOiByZXF1aXJlKFwiLi9mdW5jdGlvbi1uYW1lXCIpLFxuICAgIG9yZGVyQnlGaXJzdENhbGw6IHJlcXVpcmUoXCIuL29yZGVyLWJ5LWZpcnN0LWNhbGxcIiksXG4gICAgcHJvdG90eXBlczogcmVxdWlyZShcIi4vcHJvdG90eXBlc1wiKSxcbiAgICB0eXBlT2Y6IHJlcXVpcmUoXCIuL3R5cGUtb2ZcIiksXG4gICAgdmFsdWVUb1N0cmluZzogcmVxdWlyZShcIi4vdmFsdWUtdG8tc3RyaW5nXCIpXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGdsb2JhbE9iamVjdCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmdsb2JhbDtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBJZGxlRGVhZGxpbmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlkVGltZW91dCAtIHdoZXRoZXIgb3Igbm90IHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgb3B0aW9uYWwgdGltZW91dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOm51bWJlcn0gdGltZVJlbWFpbmluZyAtIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgcHJvdmlkaW5nIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHJlbWFpbmluZyBpbiB0aGUgY3VycmVudCBpZGxlIHBlcmlvZFxuICovXG5cbi8qKlxuICogUXVldWVzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGR1cmluZyBhIGJyb3dzZXIncyBpZGxlIHBlcmlvZHNcbiAqXG4gKiBAY2FsbGJhY2sgUmVxdWVzdElkbGVDYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbihJZGxlRGVhZGxpbmUpfSBjYWxsYmFja1xuICogQHBhcmFtIHt7dGltZW91dDogbnVtYmVyfX0gb3B0aW9ucyAtIGFuIG9wdGlvbnMgb2JqZWN0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgaWRcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBOZXh0VGlja1xuICogQHBhcmFtIHtWb2lkVmFyQXJnc0Z1bmN9IGNhbGxiYWNrIC0gdGhlIGNhbGxiYWNrIHRvIHJ1blxuICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMgLSBvcHRpb25hbCBhcmd1bWVudHMgdG8gY2FsbCB0aGUgY2FsbGJhY2sgd2l0aFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgU2V0SW1tZWRpYXRlXG4gKiBAcGFyYW0ge1ZvaWRWYXJBcmdzRnVuY30gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdG8gcnVuXG4gKiBAcGFyYW0gey4uLip9IGFyZ3VtZW50cyAtIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBjYWxsYmFjayB3aXRoXG4gKiBAcmV0dXJucyB7Tm9kZUltbWVkaWF0ZX1cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBWb2lkVmFyQXJnc0Z1bmNcbiAqIEBwYXJhbSB7Li4uKn0gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdG8gcnVuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFJlcXVlc3RBbmltYXRpb25GcmFtZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIpOnZvaWR9IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICogQHJldHVybnMge251bWJlcn0gLSB0aGUgaWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBlcmZvcm1hbmNlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gbm93XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbG9ja1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vdyAtIHRoZSBjdXJyZW50IHRpbWVcbiAqIEBwcm9wZXJ0eSB7RGF0ZX0gRGF0ZSAtIHRoZSBEYXRlIGNvbnN0cnVjdG9yXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9vcExpbWl0IC0gdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVycyBiZWZvcmUgYXNzdW1pbmcgYW4gaW5maW5pdGUgbG9vcFxuICogQHByb3BlcnR5IHtSZXF1ZXN0SWRsZUNhbGxiYWNrfSByZXF1ZXN0SWRsZUNhbGxiYWNrXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6dm9pZH0gY2FuY2VsSWRsZUNhbGxiYWNrXG4gKiBAcHJvcGVydHkge3NldFRpbWVvdXR9IHNldFRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7Y2xlYXJUaW1lb3V0fSBjbGVhclRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7TmV4dFRpY2t9IG5leHRUaWNrXG4gKiBAcHJvcGVydHkge3F1ZXVlTWljcm90YXNrfSBxdWV1ZU1pY3JvdGFza1xuICogQHByb3BlcnR5IHtzZXRJbnRlcnZhbH0gc2V0SW50ZXJ2YWxcbiAqIEBwcm9wZXJ0eSB7Y2xlYXJJbnRlcnZhbH0gY2xlYXJJbnRlcnZhbFxuICogQHByb3BlcnR5IHtTZXRJbW1lZGlhdGV9IHNldEltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihOb2RlSW1tZWRpYXRlKTp2b2lkfSBjbGVhckltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOm51bWJlcn0gY291bnRUaW1lcnNcbiAqIEBwcm9wZXJ0eSB7UmVxdWVzdEFuaW1hdGlvbkZyYW1lfSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyKTp2b2lkfSBjYW5jZWxBbmltYXRpb25GcmFtZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOnZvaWR9IHJ1bk1pY3JvdGFza3NcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyfSB0aWNrXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8bnVtYmVyPn0gdGlja0FzeW5jXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gbmV4dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBQcm9taXNlPG51bWJlcj59IG5leHRBc3luY1xuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IHJ1bkFsbFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IHJ1blRvRnJhbWVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogUHJvbWlzZTxudW1iZXI+fSBydW5BbGxBc3luY1xuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IHJ1blRvTGFzdFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBQcm9taXNlPG51bWJlcj59IHJ1blRvTGFzdEFzeW5jXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IHJlc2V0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlciB8IERhdGUpOiB2b2lkfSBzZXRTeXN0ZW1UaW1lXG4gKiBAcHJvcGVydHkge1BlcmZvcm1hbmNlfSBwZXJmb3JtYW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXJbXSk6IG51bWJlcltdfSBocnRpbWUgLSBwcm9jZXNzLmhydGltZSAobGVnYWN5KVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSB1bmluc3RhbGwgVW5pbnN0YWxsIHRoZSBjbG9jay5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb25bXX0gbWV0aG9kcyAtIHRoZSBtZXRob2RzIHRoYXQgYXJlIGZha2VkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG91bGRDbGVhck5hdGl2ZVRpbWVyc10gaW5oZXJpdGVkIGZyb20gY29uZmlnXG4gKi9cbi8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYGluc3RhbGxgIG1ldGhvZC5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb25maWdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfERhdGV9IFtub3ddIGEgbnVtYmVyIChpbiBtaWxsaXNlY29uZHMpIG9yIGEgRGF0ZSBvYmplY3QgKGRlZmF1bHQgZXBvY2gpXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbdG9GYWtlXSBuYW1lcyBvZiB0aGUgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBmYWtlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbG9vcExpbWl0XSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXJzIHRoYXQgd2lsbCBiZSBydW4gd2hlbiBjYWxsaW5nIHJ1bkFsbCgpXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG91bGRBZHZhbmNlVGltZV0gdGVsbHMgRmFrZVRpbWVycyB0byBpbmNyZW1lbnQgbW9ja2VkIHRpbWUgYXV0b21hdGljYWxseSAoZGVmYXVsdCBmYWxzZSlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYWR2YW5jZVRpbWVEZWx0YV0gaW5jcmVtZW50IG1vY2tlZCB0aW1lIGV2ZXJ5IDw8YWR2YW5jZVRpbWVEZWx0YT4+IG1zIChkZWZhdWx0OiAyMG1zKVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnNdIGZvcndhcmRzIGNsZWFyIHRpbWVyIGNhbGxzIHRvIG5hdGl2ZSBmdW5jdGlvbnMgaWYgdGhleSBhcmUgbm90IGZha2VzIChkZWZhdWx0OiBmYWxzZSlcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLXByb3BlcnR5LWRlc2NyaXB0aW9uICovXG4vKipcbiAqIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYSBzY2hlZHVsZWQgZmFrZSB0aW1lclxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRpbWVyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBmdW5jXG4gKiBAcHJvcGVydHkgeypbXX0gYXJnc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGRlbGF5XG4gKiBAcHJvcGVydHkge251bWJlcn0gY2FsbEF0XG4gKiBAcHJvcGVydHkge251bWJlcn0gY3JlYXRlZEF0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkXG4gKiBAcHJvcGVydHkge0Vycm9yfSBbZXJyb3JdXG4gKi9cblxuLyoqXG4gKiBBIE5vZGUgdGltZXJcbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb2RlSW1tZWRpYXRlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGJvb2xlYW59IGhhc1JlZlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBOb2RlSW1tZWRpYXRlfSByZWZcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogTm9kZUltbWVkaWF0ZX0gdW5yZWZcbiAqL1xuLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLXByb3BlcnR5LWRlc2NyaXB0aW9uICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cblxuLyoqXG4gKiBNb2NrcyBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhlIHNwZWNpZmllZCBnbG9iYWwgbmFtZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7Kn0gX2dsb2JhbCBOYW1lc3BhY2UgdG8gbW9jayAoZS5nLiBgd2luZG93YClcbiAqIEByZXR1cm5zIHtGYWtlVGltZXJzfVxuICovXG5mdW5jdGlvbiB3aXRoR2xvYmFsKF9nbG9iYWwpIHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBfZ2xvYmFsLm5hdmlnYXRvciAmJiBfZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgaXNSdW5uaW5nSW5JRSA9IHVzZXJBZ2VudCAmJiB1c2VyQWdlbnQuaW5kZXhPZihcIk1TSUUgXCIpID4gLTE7XG4gICAgY29uc3QgbWF4VGltZW91dCA9IE1hdGgucG93KDIsIDMxKSAtIDE7IC8vc2VlIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Fic3RyYWN0LW9wZGVmLWNvbnZlcnR0b2ludFxuICAgIGNvbnN0IGlkQ291bnRlclN0YXJ0ID0gMWUxMjsgLy8gYXJiaXRyYXJpbHkgbGFyZ2UgbnVtYmVyIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBuYXRpdmUgdGltZXIgSURzXG4gICAgY29uc3QgTk9PUCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IE5PT1BfQVJSQVkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIGNvbnN0IHRpbWVvdXRSZXN1bHQgPSBfZ2xvYmFsLnNldFRpbWVvdXQoTk9PUCwgMCk7XG4gICAgY29uc3QgYWRkVGltZXJSZXR1cm5zT2JqZWN0ID0gdHlwZW9mIHRpbWVvdXRSZXN1bHQgPT09IFwib2JqZWN0XCI7XG4gICAgY29uc3QgaHJ0aW1lUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwucHJvY2VzcyAmJiB0eXBlb2YgX2dsb2JhbC5wcm9jZXNzLmhydGltZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IGhydGltZUJpZ2ludFByZXNlbnQgPVxuICAgICAgICBocnRpbWVQcmVzZW50ICYmIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lLmJpZ2ludCA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IG5leHRUaWNrUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwucHJvY2VzcyAmJiB0eXBlb2YgX2dsb2JhbC5wcm9jZXNzLm5leHRUaWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgdXRpbFByb21pc2lmeSA9IF9nbG9iYWwucHJvY2VzcyAmJiByZXF1aXJlKFwidXRpbFwiKS5wcm9taXNpZnk7XG4gICAgY29uc3QgcGVyZm9ybWFuY2VQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5wZXJmb3JtYW5jZSAmJiB0eXBlb2YgX2dsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBoYXNQZXJmb3JtYW5jZVByb3RvdHlwZSA9XG4gICAgICAgIF9nbG9iYWwuUGVyZm9ybWFuY2UgJiZcbiAgICAgICAgKHR5cGVvZiBfZ2xvYmFsLlBlcmZvcm1hbmNlKS5tYXRjaCgvXihmdW5jdGlvbnxvYmplY3QpJC8pO1xuICAgIGNvbnN0IHF1ZXVlTWljcm90YXNrUHJlc2VudCA9IF9nbG9iYWwuaGFzT3duUHJvcGVydHkoXCJxdWV1ZU1pY3JvdGFza1wiKTtcbiAgICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgJiZcbiAgICAgICAgdHlwZW9mIF9nbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgY2FuY2VsQW5pbWF0aW9uRnJhbWVQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSAmJlxuICAgICAgICB0eXBlb2YgX2dsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IHJlcXVlc3RJZGxlQ2FsbGJhY2tQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrICYmXG4gICAgICAgIHR5cGVvZiBfZ2xvYmFsLnJlcXVlc3RJZGxlQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBjYW5jZWxJZGxlQ2FsbGJhY2tQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5jYW5jZWxJZGxlQ2FsbGJhY2sgJiZcbiAgICAgICAgdHlwZW9mIF9nbG9iYWwuY2FuY2VsSWRsZUNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3Qgc2V0SW1tZWRpYXRlUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwuc2V0SW1tZWRpYXRlICYmIHR5cGVvZiBfZ2xvYmFsLnNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgLy8gTWFrZSBwcm9wZXJ0aWVzIHdyaXRhYmxlIGluIElFLCBhcyBwZXJcbiAgICAvLyBodHRwczovL3d3dy5hZGVxdWF0ZWx5Z29vZC5jb20vUmVwbGFjaW5nLXNldFRpbWVvdXQtR2xvYmFsbHkuaHRtbFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduICovXG4gICAgaWYgKGlzUnVubmluZ0luSUUpIHtcbiAgICAgICAgX2dsb2JhbC5zZXRUaW1lb3V0ID0gX2dsb2JhbC5zZXRUaW1lb3V0O1xuICAgICAgICBfZ2xvYmFsLmNsZWFyVGltZW91dCA9IF9nbG9iYWwuY2xlYXJUaW1lb3V0O1xuICAgICAgICBfZ2xvYmFsLnNldEludGVydmFsID0gX2dsb2JhbC5zZXRJbnRlcnZhbDtcbiAgICAgICAgX2dsb2JhbC5jbGVhckludGVydmFsID0gX2dsb2JhbC5jbGVhckludGVydmFsO1xuICAgICAgICBfZ2xvYmFsLkRhdGUgPSBfZ2xvYmFsLkRhdGU7XG4gICAgfVxuXG4gICAgLy8gc2V0SW1tZWRpYXRlIGlzIG5vdCBhIHN0YW5kYXJkIGZ1bmN0aW9uXG4gICAgLy8gYXZvaWQgYWRkaW5nIHRoZSBwcm9wIHRvIHRoZSB3aW5kb3cgb2JqZWN0IGlmIG5vdCBwcmVzZW50XG4gICAgaWYgKHNldEltbWVkaWF0ZVByZXNlbnQpIHtcbiAgICAgICAgX2dsb2JhbC5zZXRJbW1lZGlhdGUgPSBfZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgX2dsb2JhbC5jbGVhckltbWVkaWF0ZSA9IF9nbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gKi9cblxuICAgIF9nbG9iYWwuY2xlYXJUaW1lb3V0KHRpbWVvdXRSZXN1bHQpO1xuXG4gICAgY29uc3QgTmF0aXZlRGF0ZSA9IF9nbG9iYWwuRGF0ZTtcbiAgICBsZXQgdW5pcXVlVGltZXJJZCA9IGlkQ291bnRlclN0YXJ0O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTnVtYmVyRmluaXRlKG51bSkge1xuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNGaW5pdGUobnVtKTtcbiAgICB9XG5cbiAgICBsZXQgaXNOZWFySW5maW5pdGVMaW1pdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSkge1xuICAgICAgICBpZiAoY2xvY2subG9vcExpbWl0ICYmIGkgPT09IGNsb2NrLmxvb3BMaW1pdCAtIDEpIHtcbiAgICAgICAgICAgIGlzTmVhckluZmluaXRlTGltaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXNldElzTmVhckluZmluaXRlTGltaXQoKSB7XG4gICAgICAgIGlzTmVhckluZmluaXRlTGltaXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBzdHJpbmdzIGxpa2UgXCIwMToxMDowMFwiIChtZWFuaW5nIDEgaG91ciwgMTAgbWludXRlcywgMCBzZWNvbmRzKSBpbnRvXG4gICAgICogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgaHVtYW4tcmVhZGFibGUgc3RyaW5ncyBwYXNzZWRcbiAgICAgKiB0byBjbG9jay50aWNrKClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlVGltZShzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IHN0ci5zcGxpdChcIjpcIik7XG4gICAgICAgIGNvbnN0IGwgPSBzdHJpbmdzLmxlbmd0aDtcbiAgICAgICAgbGV0IGkgPSBsO1xuICAgICAgICBsZXQgbXMgPSAwO1xuICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgIGlmIChsID4gMyB8fCAhL14oXFxkXFxkOil7MCwyfVxcZFxcZD8kLy50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcInRpY2sgb25seSB1bmRlcnN0YW5kcyBudW1iZXJzLCAnbTpzJyBhbmQgJ2g6bTpzJy4gRWFjaCBwYXJ0IG11c3QgYmUgdHdvIGRpZ2l0c1wiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nc1tpXSwgMTApO1xuXG4gICAgICAgICAgICBpZiAocGFyc2VkID49IDYwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRpbWUgJHtzdHJ9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1zICs9IHBhcnNlZCAqIE1hdGgucG93KDYwLCBsIC0gaSAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1zICogMTAwMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlY2ltYWwgcGFydCBvZiB0aGUgbWlsbGlzZWNvbmQgdmFsdWUgYXMgbmFub3NlY29uZHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtc0Zsb2F0IHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gICAgICogQHJldHVybnMge251bWJlcn0gYW4gaW50ZWdlciBudW1iZXIgb2YgbmFub3NlY29uZHMgaW4gdGhlIHJhbmdlIFswLDFlNilcbiAgICAgKlxuICAgICAqIEV4YW1wbGU6IG5hbm9SZW1haW5lcigxMjMuNDU2Nzg5KSAtPiA0NTY3ODlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuYW5vUmVtYWluZGVyKG1zRmxvYXQpIHtcbiAgICAgICAgY29uc3QgbW9kdWxvID0gMWU2O1xuICAgICAgICBjb25zdCByZW1haW5kZXIgPSAobXNGbG9hdCAqIDFlNikgJSBtb2R1bG87XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlUmVtYWluZGVyID1cbiAgICAgICAgICAgIHJlbWFpbmRlciA8IDAgPyByZW1haW5kZXIgKyBtb2R1bG8gOiByZW1haW5kZXI7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IocG9zaXRpdmVSZW1haW5kZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZ3JvayB0aGUgYG5vd2AgcGFyYW1ldGVyIHRvIGNyZWF0ZUNsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtEYXRlfG51bWJlcn0gZXBvY2ggdGhlIHN5c3RlbSB0aW1lXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRFcG9jaChlcG9jaCkge1xuICAgICAgICBpZiAoIWVwb2NoKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVwb2NoLmdldFRpbWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIGVwb2NoLmdldFRpbWUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVwb2NoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXBvY2g7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5vdyBzaG91bGQgYmUgbWlsbGlzZWNvbmRzIHNpbmNlIFVOSVggZXBvY2hcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9cbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluUmFuZ2UoZnJvbSwgdG8sIHRpbWVyKSB7XG4gICAgICAgIHJldHVybiB0aW1lciAmJiB0aW1lci5jYWxsQXQgPj0gZnJvbSAmJiB0aW1lci5jYWxsQXQgPD0gdG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSBqb2JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRJbmZpbml0ZUxvb3BFcnJvcihjbG9jaywgam9iKSB7XG4gICAgICAgIGNvbnN0IGluZmluaXRlTG9vcEVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFib3J0aW5nIGFmdGVyIHJ1bm5pbmcgJHtjbG9jay5sb29wTGltaXR9IHRpbWVycywgYXNzdW1pbmcgYW4gaW5maW5pdGUgbG9vcCFgXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFqb2IuZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZpbml0ZUxvb3BFcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBhdHRlcm4gbmV2ZXIgbWF0Y2hlZCBpbiBOb2RlXG4gICAgICAgIGNvbnN0IGNvbXB1dGVkVGFyZ2V0UGF0dGVybiA9IC90YXJnZXRcXC4qWzx8KHxbXS4qP1s+fFxcXXwpXVxccyovO1xuICAgICAgICBsZXQgY2xvY2tNZXRob2RQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgIFN0cmluZyhPYmplY3Qua2V5cyhjbG9jaykuam9pbihcInxcIikpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFkZFRpbWVyUmV0dXJuc09iamVjdCkge1xuICAgICAgICAgICAgLy8gbm9kZS5qcyBlbnZpcm9ubWVudFxuICAgICAgICAgICAgY2xvY2tNZXRob2RQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICBgXFxcXHMrYXQgKE9iamVjdFxcXFwuKT8oPzoke09iamVjdC5rZXlzKGNsb2NrKS5qb2luKFwifFwiKX0pXFxcXHMrYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtYXRjaGVkTGluZUluZGV4ID0gLTE7XG4gICAgICAgIGpvYi5lcnJvci5zdGFjay5zcGxpdChcIlxcblwiKS5zb21lKGZ1bmN0aW9uIChsaW5lLCBpKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBtYXRjaGVkIGEgY29tcHV0ZWQgdGFyZ2V0IGxpbmUgKGUuZy4gc2V0VGltZW91dCkgdGhlbiB3ZVxuICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBsb29rIGFueSBmdXJ0aGVyLiBSZXR1cm4gdHJ1ZSB0byBzdG9wIGl0ZXJhdGluZy5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb21wdXRlZFRhcmdldCA9IGxpbmUubWF0Y2goY29tcHV0ZWRUYXJnZXRQYXR0ZXJuKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb21wdXRlZFRhcmdldCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRMaW5lSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBtYXRjaGVkIGEgY2xvY2sgbWV0aG9kIGxpbmUsIHRoZW4gdGhlcmUgbWF5IHN0aWxsIGJlXG4gICAgICAgICAgICAvLyBvdGhlcnMgZnVydGhlciBkb3duIHRoZSB0cmFjZS4gUmV0dXJuIGZhbHNlIHRvIGtlZXAgaXRlcmF0aW5nLlxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZENsb2NrTWV0aG9kID0gbGluZS5tYXRjaChjbG9ja01ldGhvZFBhdHRlcm4pO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDbG9ja01ldGhvZCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRMaW5lSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIGFueXRoaW5nIG9uIHRoaXMgbGluZSwgYnV0IHdlIG1hdGNoZWRcbiAgICAgICAgICAgIC8vIHByZXZpb3VzbHkgYW5kIHNldCB0aGUgbWF0Y2hlZCBsaW5lIGluZGV4LCB0aGVuIHdlIGNhbiBzdG9wLlxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIHByZXZpb3VzbHksIHRoZW4gd2Ugc2hvdWxkIGtlZXAgaXRlcmF0aW5nLlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRMaW5lSW5kZXggPj0gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSBgJHtpbmZpbml0ZUxvb3BFcnJvcn1cXG4ke2pvYi50eXBlIHx8IFwiTWljcm90YXNrXCJ9IC0gJHtcbiAgICAgICAgICAgIGpvYi5mdW5jLm5hbWUgfHwgXCJhbm9ueW1vdXNcIlxuICAgICAgICB9XFxuJHtqb2IuZXJyb3Iuc3RhY2tcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLnNsaWNlKG1hdGNoZWRMaW5lSW5kZXggKyAxKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIil9YDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluZmluaXRlTG9vcEVycm9yLCBcInN0YWNrXCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RhY2ssXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZmluaXRlTG9vcEVycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHtEYXRlfSBzb3VyY2VcbiAgICAgKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHRhcmdldCBhZnRlciBtb2RpZmljYXRpb25zXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWlycm9yRGF0ZVByb3BlcnRpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgbGV0IHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc3BlY2lhbCBub3cgaW1wbGVtZW50YXRpb25cbiAgICAgICAgaWYgKHNvdXJjZS5ub3cpIHtcbiAgICAgICAgICAgIHRhcmdldC5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jbG9jay5ub3c7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC5ub3c7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc3BlY2lhbCB0b1NvdXJjZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICBpZiAoc291cmNlLnRvU291cmNlKSB7XG4gICAgICAgICAgICB0YXJnZXQudG9Tb3VyY2UgPSBmdW5jdGlvbiB0b1NvdXJjZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLnRvU291cmNlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC50b1NvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBzcGVjaWFsIHRvU3RyaW5nIGltcGxlbWVudGF0aW9uXG4gICAgICAgIHRhcmdldC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS50b1N0cmluZygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUgPSBzb3VyY2UucHJvdG90eXBlO1xuICAgICAgICB0YXJnZXQucGFyc2UgPSBzb3VyY2UucGFyc2U7XG4gICAgICAgIHRhcmdldC5VVEMgPSBzb3VyY2UuVVRDO1xuICAgICAgICB0YXJnZXQucHJvdG90eXBlLnRvVVRDU3RyaW5nID0gc291cmNlLnByb3RvdHlwZS50b1VUQ1N0cmluZztcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHllYXJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBob3VyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW51dGVcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNlY29uZFxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbXNcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBDbG9ja0RhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtcykge1xuICAgICAgICAgICAgLy8gdGhlIERhdGUgY29uc3RydWN0b3IgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIHJlZiBFY21hLTI2MiBFZGl0aW9uIDUuMSwgc2VjdGlvbiAxNS45LjIuXG4gICAgICAgICAgICAvLyBUaGlzIHJlbWFpbnMgc28gaW4gdGhlIDEwdGggZWRpdGlvbiBvZiAyMDE5IGFzIHdlbGwuXG4gICAgICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2xvY2tEYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZShDbG9ja0RhdGUuY2xvY2subm93KS50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBEYXRlIGlzIGNhbGxlZCBhcyBhIGNvbnN0cnVjdG9yIHdpdGggJ25ldycga2V5d29yZFxuICAgICAgICAgICAgLy8gRGVmZW5zaXZlIGFuZCB2ZXJib3NlIHRvIGF2b2lkIHBvdGVudGlhbCBoYXJtIGluIHBhc3NpbmdcbiAgICAgICAgICAgIC8vIGV4cGxpY2l0IHVuZGVmaW5lZCB3aGVuIHVzZXIgZG9lcyBub3QgcGFzcyBhcmd1bWVudFxuICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoQ2xvY2tEYXRlLmNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhcik7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgpO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cik7XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtaXJyb3JEYXRlUHJvcGVydGllcyhDbG9ja0RhdGUsIE5hdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBlbnF1ZXVlSm9iKGNsb2NrLCBqb2IpIHtcbiAgICAgICAgLy8gZW5xdWV1ZXMgYSBtaWNyb3RpY2stZGVmZXJyZWQgdGFzayAtIGVjbWEyNjIvI3NlYy1lbnF1ZXVlam9iXG4gICAgICAgIGlmICghY2xvY2suam9icykge1xuICAgICAgICAgICAgY2xvY2suam9icyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNsb2NrLmpvYnMucHVzaChqb2IpO1xuICAgIH1cblxuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBydW5Kb2JzKGNsb2NrKSB7XG4gICAgICAgIC8vIHJ1bnMgYWxsIG1pY3JvdGljay1kZWZlcnJlZCB0YXNrcyAtIGVjbWEyNjIvI3NlYy1ydW5qb2JzXG4gICAgICAgIGlmICghY2xvY2suam9icykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xvY2suam9icy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgam9iID0gY2xvY2suam9ic1tpXTtcbiAgICAgICAgICAgIGpvYi5mdW5jLmFwcGx5KG51bGwsIGpvYi5hcmdzKTtcblxuICAgICAgICAgICAgY2hlY2tJc05lYXJJbmZpbml0ZUxpbWl0KGNsb2NrLCBpKTtcbiAgICAgICAgICAgIGlmIChjbG9jay5sb29wTGltaXQgJiYgaSA+IGNsb2NrLmxvb3BMaW1pdCkge1xuICAgICAgICAgICAgICAgIHRocm93IGdldEluZmluaXRlTG9vcEVycm9yKGNsb2NrLCBqb2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICBjbG9jay5qb2JzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGlkIG9mIHRoZSBjcmVhdGVkIHRpbWVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkVGltZXIoY2xvY2ssIHRpbWVyKSB7XG4gICAgICAgIGlmICh0aW1lci5mdW5jID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQgdG8gdGltZXIgY2FsbHNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkVGltZXJSZXR1cm5zT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBOb2RlLmpzIGVudmlyb25tZW50XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVyLmZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBbRVJSX0lOVkFMSURfQ0FMTEJBQ0tdOiBDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uIFJlY2VpdmVkICR7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lci5mdW5jXG4gICAgICAgICAgICAgICAgICAgIH0gb2YgdHlwZSAke3R5cGVvZiB0aW1lci5mdW5jfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckluZmluaXRlTGltaXQpIHtcbiAgICAgICAgICAgIHRpbWVyLmVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lci50eXBlID0gdGltZXIuaW1tZWRpYXRlID8gXCJJbW1lZGlhdGVcIiA6IFwiVGltZW91dFwiO1xuXG4gICAgICAgIGlmICh0aW1lci5oYXNPd25Qcm9wZXJ0eShcImRlbGF5XCIpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVyLmRlbGF5ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGltZXIuZGVsYXkgPSBwYXJzZUludCh0aW1lci5kZWxheSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzTnVtYmVyRmluaXRlKHRpbWVyLmRlbGF5KSkge1xuICAgICAgICAgICAgICAgIHRpbWVyLmRlbGF5ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbWVyLmRlbGF5ID0gdGltZXIuZGVsYXkgPiBtYXhUaW1lb3V0ID8gMSA6IHRpbWVyLmRlbGF5O1xuICAgICAgICAgICAgdGltZXIuZGVsYXkgPSBNYXRoLm1heCgwLCB0aW1lci5kZWxheSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXIuaGFzT3duUHJvcGVydHkoXCJpbnRlcnZhbFwiKSkge1xuICAgICAgICAgICAgdGltZXIudHlwZSA9IFwiSW50ZXJ2YWxcIjtcbiAgICAgICAgICAgIHRpbWVyLmludGVydmFsID0gdGltZXIuaW50ZXJ2YWwgPiBtYXhUaW1lb3V0ID8gMSA6IHRpbWVyLmludGVydmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWVyLmhhc093blByb3BlcnR5KFwiYW5pbWF0aW9uXCIpKSB7XG4gICAgICAgICAgICB0aW1lci50eXBlID0gXCJBbmltYXRpb25GcmFtZVwiO1xuICAgICAgICAgICAgdGltZXIuYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lci5oYXNPd25Qcm9wZXJ0eShcImlkbGVDYWxsYmFja1wiKSkge1xuICAgICAgICAgICAgdGltZXIudHlwZSA9IFwiSWRsZUNhbGxiYWNrXCI7XG4gICAgICAgICAgICB0aW1lci5pZGxlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjbG9jay50aW1lcnMpIHtcbiAgICAgICAgICAgIGNsb2NrLnRpbWVycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZXIuaWQgPSB1bmlxdWVUaW1lcklkKys7XG4gICAgICAgIHRpbWVyLmNyZWF0ZWRBdCA9IGNsb2NrLm5vdztcbiAgICAgICAgdGltZXIuY2FsbEF0ID1cbiAgICAgICAgICAgIGNsb2NrLm5vdyArIChwYXJzZUludCh0aW1lci5kZWxheSkgfHwgKGNsb2NrLmR1cmluZ1RpY2sgPyAxIDogMCkpO1xuXG4gICAgICAgIGNsb2NrLnRpbWVyc1t0aW1lci5pZF0gPSB0aW1lcjtcblxuICAgICAgICBpZiAoYWRkVGltZXJSZXR1cm5zT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgcmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1bnJlZjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIuaWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gW3RpbWVyLmZ1bmMsIHRpbWVyLmRlbGF5XS5jb25jYXQodGltZXIuYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1N5bWJvbC50b1ByaW1pdGl2ZV06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVyLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aW1lci5pZDtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQgY29uc2lzdGVudC1yZXR1cm46IFwib2ZmXCIgKi9cbiAgICAvKipcbiAgICAgKiBUaW1lciBjb21wYXJpdG9yXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSBhXG4gICAgICogQHBhcmFtIHtUaW1lcn0gYlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZVRpbWVycyhhLCBiKSB7XG4gICAgICAgIC8vIFNvcnQgZmlyc3QgYnkgYWJzb2x1dGUgdGltaW5nXG4gICAgICAgIGlmIChhLmNhbGxBdCA8IGIuY2FsbEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuY2FsbEF0ID4gYi5jYWxsQXQpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBuZXh0IGJ5IGltbWVkaWF0ZSwgaW1tZWRpYXRlIHRpbWVycyB0YWtlIHByZWNlZGVuY2VcbiAgICAgICAgaWYgKGEuaW1tZWRpYXRlICYmICFiLmltbWVkaWF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYS5pbW1lZGlhdGUgJiYgYi5pbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBuZXh0IGJ5IGNyZWF0aW9uIHRpbWUsIGVhcmxpZXItY3JlYXRlZCB0aW1lcnMgdGFrZSBwcmVjZWRlbmNlXG4gICAgICAgIGlmIChhLmNyZWF0ZWRBdCA8IGIuY3JlYXRlZEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuY3JlYXRlZEF0ID4gYi5jcmVhdGVkQXQpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBuZXh0IGJ5IGlkLCBsb3dlci1pZCB0aW1lcnMgdGFrZSBwcmVjZWRlbmNlXG4gICAgICAgIGlmIChhLmlkIDwgYi5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmlkID4gYi5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcyB0aW1lciBpZHMgYXJlIHVuaXF1ZSwgbm8gZmFsbGJhY2sgYDBgIGlzIG5lY2Vzc2FyeVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaW1lcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgZnJvbSwgdG8pIHtcbiAgICAgICAgY29uc3QgdGltZXJzID0gY2xvY2sudGltZXJzO1xuICAgICAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgICAgICBsZXQgaWQsIGlzSW5SYW5nZTtcblxuICAgICAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICBpc0luUmFuZ2UgPSBpblJhbmdlKGZyb20sIHRvLCB0aW1lcnNbaWRdKTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgaXNJblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IDEpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcmV0dXJucyB7VGltZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlyc3RUaW1lcihjbG9jaykge1xuICAgICAgICBjb25zdCB0aW1lcnMgPSBjbG9jay50aW1lcnM7XG4gICAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICAgIGxldCBpZDtcblxuICAgICAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbWVyIHx8IGNvbXBhcmVUaW1lcnModGltZXIsIHRpbWVyc1tpZF0pID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcmV0dXJucyB7VGltZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdFRpbWVyKGNsb2NrKSB7XG4gICAgICAgIGNvbnN0IHRpbWVycyA9IGNsb2NrLnRpbWVycztcbiAgICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgICAgbGV0IGlkO1xuXG4gICAgICAgIGZvciAoaWQgaW4gdGltZXJzKSB7XG4gICAgICAgICAgICBpZiAodGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhbGxUaW1lcihjbG9jaywgdGltZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lci5pbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgY2xvY2sudGltZXJzW3RpbWVyLmlkXS5jYWxsQXQgKz0gdGltZXIuaW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgY2xvY2sudGltZXJzW3RpbWVyLmlkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdGltZXIuZnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aW1lci5mdW5jLmFwcGx5KG51bGwsIHRpbWVyLmFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyogZXNsaW50IG5vLWV2YWw6IFwib2ZmXCIgKi9cbiAgICAgICAgICAgIGNvbnN0IGV2YWwyID0gZXZhbDtcbiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXZhbDIodGltZXIuZnVuYyk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBjbGVhciBoYW5kbGVyIG5hbWUgZm9yIGEgZ2l2ZW4gdGltZXIgdHlwZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0dHlwZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldENsZWFySGFuZGxlcih0dHlwZSkge1xuICAgICAgICBpZiAodHR5cGUgPT09IFwiSWRsZUNhbGxiYWNrXCIgfHwgdHR5cGUgPT09IFwiQW5pbWF0aW9uRnJhbWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIGBjYW5jZWwke3R0eXBlfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBjbGVhciR7dHR5cGV9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHNjaGVkdWxlIGhhbmRsZXIgbmFtZSBmb3IgYSBnaXZlbiB0aW1lciB0eXBlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0U2NoZWR1bGVIYW5kbGVyKHR0eXBlKSB7XG4gICAgICAgIGlmICh0dHlwZSA9PT0gXCJJZGxlQ2FsbGJhY2tcIiB8fCB0dHlwZSA9PT0gXCJBbmltYXRpb25GcmFtZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYHJlcXVlc3Qke3R0eXBlfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBzZXQke3R0eXBlfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gdG8gd2FybiBvbmx5IG9uY2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVXYXJuT25jZSgpIHtcbiAgICAgICAgbGV0IGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgIWNhbGxzKysgJiYgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHdhcm5PbmNlID0gY3JlYXRlV2Fybk9uY2UoKTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVySWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHR5cGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCB0dHlwZSkge1xuICAgICAgICBpZiAoIXRpbWVySWQpIHtcbiAgICAgICAgICAgIC8vIG51bGwgYXBwZWFycyB0byBiZSBhbGxvd2VkIGluIG1vc3QgYnJvd3NlcnMsIGFuZCBhcHBlYXJzIHRvIGJlXG4gICAgICAgICAgICAvLyByZWxpZWQgdXBvbiBieSBzb21lIGxpYnJhcmllcywgbGlrZSBCb290c3RyYXAgY2Fyb3VzZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICBjbG9jay50aW1lcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluIE5vZGUsIHRoZSBJRCBpcyBzdG9yZWQgYXMgdGhlIHByaW1pdGl2ZSB2YWx1ZSBmb3IgYFRpbWVvdXRgIG9iamVjdHNcbiAgICAgICAgLy8gZm9yIGBJbW1lZGlhdGVgIG9iamVjdHMsIG5vIElEIGV4aXN0cywgc28gaXQgZ2V0cyBjb2VyY2VkIHRvIE5hTlxuICAgICAgICBjb25zdCBpZCA9IE51bWJlcih0aW1lcklkKTtcblxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGlkKSB8fCBpZCA8IGlkQ291bnRlclN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyTmFtZSA9IGdldENsZWFySGFuZGxlcih0dHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChjbG9jay5zaG91bGRDbGVhck5hdGl2ZVRpbWVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUhhbmRsZXIgPSBjbG9ja1tgXyR7aGFuZGxlck5hbWV9YF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBuYXRpdmVIYW5kbGVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyBuYXRpdmVIYW5kbGVyKHRpbWVySWQpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgYEZha2VUaW1lcnM6ICR7aGFuZGxlck5hbWV9IHdhcyBpbnZva2VkIHRvIGNsZWFyIGEgbmF0aXZlIHRpbWVyIGluc3RlYWQgb2Ygb25lIGNyZWF0ZWQgYnkgdGhpcyBsaWJyYXJ5LmAgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcblRvIGF1dG9tYXRpY2FsbHkgY2xlYW4tdXAgbmF0aXZlIHRpbWVycywgdXNlIGBzaG91bGRDbGVhck5hdGl2ZVRpbWVyc2AuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvY2sudGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgSUQgbWF0Y2hlcyBhIHRpbWVyIG9mIHRoZSBjb3JyZWN0IHR5cGVcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gY2xvY2sudGltZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aW1lci50eXBlID09PSB0dHlwZSB8fFxuICAgICAgICAgICAgICAgICh0aW1lci50eXBlID09PSBcIlRpbWVvdXRcIiAmJiB0dHlwZSA9PT0gXCJJbnRlcnZhbFwiKSB8fFxuICAgICAgICAgICAgICAgICh0aW1lci50eXBlID09PSBcIkludGVydmFsXCIgJiYgdHR5cGUgPT09IFwiVGltZW91dFwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNsb2NrLnRpbWVyc1tpZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFyID0gZ2V0Q2xlYXJIYW5kbGVyKHR0eXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlZHVsZSA9IGdldFNjaGVkdWxlSGFuZGxlcih0aW1lci50eXBlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBDYW5ub3QgY2xlYXIgdGltZXI6IHRpbWVyIGNyZWF0ZWQgd2l0aCAke3NjaGVkdWxlfSgpIGJ1dCBjbGVhcmVkIHdpdGggJHtjbGVhcn0oKWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge0NvbmZpZ30gY29uZmlnXG4gICAgICogQHJldHVybnMge1RpbWVyW119XG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pbnN0YWxsKGNsb2NrLCBjb25maWcpIHtcbiAgICAgICAgbGV0IG1ldGhvZCwgaSwgbDtcbiAgICAgICAgY29uc3QgaW5zdGFsbGVkSHJUaW1lID0gXCJfaHJ0aW1lXCI7XG4gICAgICAgIGNvbnN0IGluc3RhbGxlZE5leHRUaWNrID0gXCJfbmV4dFRpY2tcIjtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gY2xvY2subWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIG1ldGhvZCA9IGNsb2NrLm1ldGhvZHNbaV07XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImhydGltZVwiICYmIF9nbG9iYWwucHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIF9nbG9iYWwucHJvY2Vzcy5ocnRpbWUgPSBjbG9ja1tpbnN0YWxsZWRIclRpbWVdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwibmV4dFRpY2tcIiAmJiBfZ2xvYmFsLnByb2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2sgPSBjbG9ja1tpbnN0YWxsZWROZXh0VGlja107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJwZXJmb3JtYW5jZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLFxuICAgICAgICAgICAgICAgICAgICBgXyR7bWV0aG9kfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yLmdldCAmJlxuICAgICAgICAgICAgICAgICAgICAhb3JpZ2luYWxQZXJmRGVzY3JpcHRvci5zZXRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgX2dsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9nbG9iYWxbbWV0aG9kXSA9IGNsb2NrW2BfJHttZXRob2R9YF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoX2dsb2JhbFttZXRob2RdICYmIF9nbG9iYWxbbWV0aG9kXS5oYWRPd25Qcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBfZ2xvYmFsW21ldGhvZF0gPSBjbG9ja1tgXyR7bWV0aG9kfWBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX2dsb2JhbFttZXRob2RdO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVzbGludCBuby1lbXB0eTogXCJvZmZcIiAqL1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zaG91bGRBZHZhbmNlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgX2dsb2JhbC5jbGVhckludGVydmFsKGNsb2NrLmF0dGFjaGVkSW50ZXJ2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBtdWx0aXBsZSBleGVjdXRpb25zIHdoaWNoIHdpbGwgY29tcGxldGVseSByZW1vdmUgdGhlc2UgcHJvcHNcbiAgICAgICAgY2xvY2subWV0aG9kcyA9IFtdO1xuXG4gICAgICAgIC8vIHJldHVybiBwZW5kaW5nIHRpbWVycywgdG8gZW5hYmxlIGNoZWNraW5nIHdoYXQgdGltZXJzIHJlbWFpbmVkIG9uIHVuaW5zdGFsbFxuICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjbG9jay50aW1lcnMpLm1hcChmdW5jdGlvbiBtYXBwZXIoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2sudGltZXJzW2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXQgdGhlIHRhcmdldCBjb250YWluaW5nIHRoZSBtZXRob2QgdG8gcmVwbGFjZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgdGhlIGtleW5hbWUgb2YgdGhlIG1ldGhvZCBvbiB0aGUgdGFyZ2V0XG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoaWphY2tNZXRob2QodGFyZ2V0LCBtZXRob2QsIGNsb2NrKSB7XG4gICAgICAgIGNsb2NrW21ldGhvZF0uaGFkT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2RcbiAgICAgICAgKTtcbiAgICAgICAgY2xvY2tbYF8ke21ldGhvZH1gXSA9IHRhcmdldFttZXRob2RdO1xuXG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbWlycm9yRGF0ZVByb3BlcnRpZXMoY2xvY2tbbWV0aG9kXSwgdGFyZ2V0W21ldGhvZF0pO1xuICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0gPSBkYXRlO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJwZXJmb3JtYW5jZVwiKSB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgbWV0aG9kXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gSlNET00gaGFzIGEgcmVhZCBvbmx5IHBlcmZvcm1hbmNlIGZpZWxkIHNvIHdlIGhhdmUgdG8gc2F2ZS9jb3B5IGl0IGRpZmZlcmVudGx5XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IuZ2V0ICYmXG4gICAgICAgICAgICAgICAgIW9yaWdpbmFsUGVyZkRlc2NyaXB0b3Iuc2V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLFxuICAgICAgICAgICAgICAgICAgICBgXyR7bWV0aG9kfWAsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZkRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICBjbG9jayxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBtZXRob2QsIHBlcmZEZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0gPSBjbG9ja1ttZXRob2RdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb2NrW21ldGhvZF0uYXBwbHkoY2xvY2ssIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgICB0YXJnZXRbbWV0aG9kXSxcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjbG9ja1ttZXRob2RdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFttZXRob2RdLmNsb2NrID0gY2xvY2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWR2YW5jZVRpbWVEZWx0YVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvSW50ZXJ2YWxUaWNrKGNsb2NrLCBhZHZhbmNlVGltZURlbHRhKSB7XG4gICAgICAgIGNsb2NrLnRpY2soYWR2YW5jZVRpbWVEZWx0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge29iamVjdH0gVGltZXJzXG4gICAgICogQHByb3BlcnR5IHtzZXRUaW1lb3V0fSBzZXRUaW1lb3V0XG4gICAgICogQHByb3BlcnR5IHtjbGVhclRpbWVvdXR9IGNsZWFyVGltZW91dFxuICAgICAqIEBwcm9wZXJ0eSB7c2V0SW50ZXJ2YWx9IHNldEludGVydmFsXG4gICAgICogQHByb3BlcnR5IHtjbGVhckludGVydmFsfSBjbGVhckludGVydmFsXG4gICAgICogQHByb3BlcnR5IHtEYXRlfSBEYXRlXG4gICAgICogQHByb3BlcnR5IHtTZXRJbW1lZGlhdGU9fSBzZXRJbW1lZGlhdGVcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKE5vZGVJbW1lZGlhdGUpOiB2b2lkPX0gY2xlYXJJbW1lZGlhdGVcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcltdKTpudW1iZXJbXT19IGhydGltZVxuICAgICAqIEBwcm9wZXJ0eSB7TmV4dFRpY2s9fSBuZXh0VGlja1xuICAgICAqIEBwcm9wZXJ0eSB7UGVyZm9ybWFuY2U9fSBwZXJmb3JtYW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7UmVxdWVzdEFuaW1hdGlvbkZyYW1lPX0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICogQHByb3BlcnR5IHtib29sZWFuPX0gcXVldWVNaWNyb3Rhc2tcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6IHZvaWQ9fSBjYW5jZWxBbmltYXRpb25GcmFtZVxuICAgICAqIEBwcm9wZXJ0eSB7UmVxdWVzdElkbGVDYWxsYmFjaz19IHJlcXVlc3RJZGxlQ2FsbGJhY2tcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6IHZvaWQ9fSBjYW5jZWxJZGxlQ2FsbGJhY2tcbiAgICAgKi9cblxuICAgIC8qKiBAdHlwZSB7VGltZXJzfSAqL1xuICAgIGNvbnN0IHRpbWVycyA9IHtcbiAgICAgICAgc2V0VGltZW91dDogX2dsb2JhbC5zZXRUaW1lb3V0LFxuICAgICAgICBjbGVhclRpbWVvdXQ6IF9nbG9iYWwuY2xlYXJUaW1lb3V0LFxuICAgICAgICBzZXRJbnRlcnZhbDogX2dsb2JhbC5zZXRJbnRlcnZhbCxcbiAgICAgICAgY2xlYXJJbnRlcnZhbDogX2dsb2JhbC5jbGVhckludGVydmFsLFxuICAgICAgICBEYXRlOiBfZ2xvYmFsLkRhdGUsXG4gICAgfTtcblxuICAgIGlmIChzZXRJbW1lZGlhdGVQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5zZXRJbW1lZGlhdGUgPSBfZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgdGltZXJzLmNsZWFySW1tZWRpYXRlID0gX2dsb2JhbC5jbGVhckltbWVkaWF0ZTtcbiAgICB9XG5cbiAgICBpZiAoaHJ0aW1lUHJlc2VudCkge1xuICAgICAgICB0aW1lcnMuaHJ0aW1lID0gX2dsb2JhbC5wcm9jZXNzLmhydGltZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFRpY2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5uZXh0VGljayA9IF9nbG9iYWwucHJvY2Vzcy5uZXh0VGljaztcbiAgICB9XG5cbiAgICBpZiAocGVyZm9ybWFuY2VQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5wZXJmb3JtYW5jZSA9IF9nbG9iYWwucGVyZm9ybWFuY2U7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RBbmltYXRpb25GcmFtZVByZXNlbnQpIHtcbiAgICAgICAgdGltZXJzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IF9nbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIH1cblxuICAgIGlmIChxdWV1ZU1pY3JvdGFza1ByZXNlbnQpIHtcbiAgICAgICAgdGltZXJzLnF1ZXVlTWljcm90YXNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2FuY2VsQW5pbWF0aW9uRnJhbWVQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IF9nbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RJZGxlQ2FsbGJhY2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5yZXF1ZXN0SWRsZUNhbGxiYWNrID0gX2dsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrO1xuICAgIH1cblxuICAgIGlmIChjYW5jZWxJZGxlQ2FsbGJhY2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5jYW5jZWxJZGxlQ2FsbGJhY2sgPSBfZ2xvYmFsLmNhbmNlbElkbGVDYWxsYmFjaztcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbFNldFRpbWVvdXQgPSBfZ2xvYmFsLnNldEltbWVkaWF0ZSB8fCBfZ2xvYmFsLnNldFRpbWVvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0RhdGV8bnVtYmVyfSBbc3RhcnRdIHRoZSBzeXN0ZW0gdGltZSAtIG5vbi1pbnRlZ2VyIHZhbHVlcyBhcmUgZmxvb3JlZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9vcExpbWl0XSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcnMgdGhhdCB3aWxsIGJlIHJ1biB3aGVuIGNhbGxpbmcgcnVuQWxsKClcbiAgICAgKiBAcmV0dXJucyB7Q2xvY2t9XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2xvY2soc3RhcnQsIGxvb3BMaW1pdCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgc3RhcnQgPSBNYXRoLmZsb29yKGdldEVwb2NoKHN0YXJ0KSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBsb29wTGltaXQgPSBsb29wTGltaXQgfHwgMTAwMDtcbiAgICAgICAgbGV0IG5hbm9zID0gMDtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRTeXN0ZW1UaW1lID0gWzAsIDBdOyAvLyBbbWlsbGlzLCBuYW5vcmVtYWluZGVyXVxuXG4gICAgICAgIGlmIChOYXRpdmVEYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBnbG9iYWwgc2NvcGUgZG9lc24ndCBoYXZlIGEgYERhdGVgIG9iamVjdFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vc2lub25qcy9zaW5vbi9pc3N1ZXMvMTg1MiNpc3N1ZWNvbW1lbnQtNDE5NjIyNzgwKVwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xvY2sgPSB7XG4gICAgICAgICAgICBub3c6IHN0YXJ0LFxuICAgICAgICAgICAgRGF0ZTogY3JlYXRlRGF0ZSgpLFxuICAgICAgICAgICAgbG9vcExpbWl0OiBsb29wTGltaXQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suRGF0ZS5jbG9jayA9IGNsb2NrO1xuXG4gICAgICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICAgICAgZnVuY3Rpb24gZ2V0VGltZVRvTmV4dEZyYW1lKCkge1xuICAgICAgICAgICAgcmV0dXJuIDE2IC0gKChjbG9jay5ub3cgLSBzdGFydCkgJSAxNik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgICAgIGZ1bmN0aW9uIGhydGltZShwcmV2KSB7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXNTaW5jZVN0YXJ0ID0gY2xvY2subm93IC0gYWRqdXN0ZWRTeXN0ZW1UaW1lWzBdIC0gc3RhcnQ7XG4gICAgICAgICAgICBjb25zdCBzZWNzU2luY2VTdGFydCA9IE1hdGguZmxvb3IobWlsbGlzU2luY2VTdGFydCAvIDEwMDApO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluZGVySW5OYW5vcyA9XG4gICAgICAgICAgICAgICAgKG1pbGxpc1NpbmNlU3RhcnQgLSBzZWNzU2luY2VTdGFydCAqIDFlMykgKiAxZTYgK1xuICAgICAgICAgICAgICAgIG5hbm9zIC1cbiAgICAgICAgICAgICAgICBhZGp1c3RlZFN5c3RlbVRpbWVbMV07XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZbMV0gPiAxZTkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTnVtYmVyIG9mIG5hbm9zZWNvbmRzIGNhbid0IGV4Y2VlZCBhIGJpbGxpb25cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFNlY3MgPSBwcmV2WzBdO1xuICAgICAgICAgICAgICAgIGxldCBuYW5vRGlmZiA9IHJlbWFpbmRlckluTmFub3MgLSBwcmV2WzFdO1xuICAgICAgICAgICAgICAgIGxldCBzZWNEaWZmID0gc2Vjc1NpbmNlU3RhcnQgLSBvbGRTZWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5hbm9EaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuYW5vRGlmZiArPSAxZTk7XG4gICAgICAgICAgICAgICAgICAgIHNlY0RpZmYgLT0gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW3NlY0RpZmYsIG5hbm9EaWZmXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbc2Vjc1NpbmNlU3RhcnQsIHJlbWFpbmRlckluTmFub3NdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhydGltZUJpZ2ludFByZXNlbnQpIHtcbiAgICAgICAgICAgIGhydGltZS5iaWdpbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBocnRpbWUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gQmlnSW50KHBhcnRzWzBdKSAqIEJpZ0ludCgxZTkpICsgQmlnSW50KHBhcnRzWzFdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLnJlcXVlc3RJZGxlQ2FsbGJhY2sgPSBmdW5jdGlvbiByZXF1ZXN0SWRsZUNhbGxiYWNrKFxuICAgICAgICAgICAgZnVuYyxcbiAgICAgICAgICAgIHRpbWVvdXRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgdGltZVRvTmV4dElkbGVQZXJpb2QgPSAwO1xuXG4gICAgICAgICAgICBpZiAoY2xvY2suY291bnRUaW1lcnMoKSA+IDApIHtcbiAgICAgICAgICAgICAgICB0aW1lVG9OZXh0SWRsZVBlcmlvZCA9IDUwOyAvLyBjb25zdCBmb3Igbm93XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLFxuICAgICAgICAgICAgICAgIGRlbGF5OlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGltZW91dCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aW1lVG9OZXh0SWRsZVBlcmlvZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBNYXRoLm1pbih0aW1lb3V0LCB0aW1lVG9OZXh0SWRsZVBlcmlvZCksXG4gICAgICAgICAgICAgICAgaWRsZUNhbGxiYWNrOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5jYW5jZWxJZGxlQ2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxJZGxlQ2FsbGJhY2sodGltZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiSWRsZUNhbGxiYWNrXCIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnNldFRpbWVvdXQgPSBmdW5jdGlvbiBzZXRUaW1lb3V0KGZ1bmMsIHRpbWVvdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICAgICAgYXJnczogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSxcbiAgICAgICAgICAgICAgICBkZWxheTogdGltZW91dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZW9mIF9nbG9iYWwuUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB1dGlsUHJvbWlzaWZ5KSB7XG4gICAgICAgICAgICBjbG9jay5zZXRUaW1lb3V0W1xuICAgICAgICAgICAgICAgIHV0aWxQcm9taXNpZnkuY3VzdG9tXG4gICAgICAgICAgICBdID0gZnVuY3Rpb24gcHJvbWlzaWZpZWRTZXRUaW1lb3V0KHRpbWVvdXQsIGFyZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIHNldFRpbWVvdXRFeGVjdXRvcihcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuYzogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFthcmddLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IHRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyVGltZW91dCh0aW1lcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJUaW1lb3V0XCIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLm5leHRUaWNrID0gZnVuY3Rpb24gbmV4dFRpY2soZnVuYykge1xuICAgICAgICAgICAgcmV0dXJuIGVucXVldWVKb2IoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGlzTmVhckluZmluaXRlTGltaXQgPyBuZXcgRXJyb3IoKSA6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5xdWV1ZU1pY3JvdGFzayA9IGZ1bmN0aW9uIHF1ZXVlTWljcm90YXNrKGZ1bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9jay5uZXh0VGljayhmdW5jKTsgLy8gZXhwbGljaXRseSBkcm9wIGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbiBzZXRJbnRlcnZhbChmdW5jLCB0aW1lb3V0KSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0LCAxMCk7XG4gICAgICAgICAgICByZXR1cm4gYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgICAgICAgICAgICAgZGVsYXk6IHRpbWVvdXQsXG4gICAgICAgICAgICAgICAgaW50ZXJ2YWw6IHRpbWVvdXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5jbGVhckludGVydmFsID0gZnVuY3Rpb24gY2xlYXJJbnRlcnZhbCh0aW1lcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJJbnRlcnZhbFwiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc2V0SW1tZWRpYXRlUHJlc2VudCkge1xuICAgICAgICAgICAgY2xvY2suc2V0SW1tZWRpYXRlID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZ1bmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgdXRpbFByb21pc2lmeSkge1xuICAgICAgICAgICAgICAgIGNsb2NrLnNldEltbWVkaWF0ZVtcbiAgICAgICAgICAgICAgICAgICAgdXRpbFByb21pc2lmeS5jdXN0b21cbiAgICAgICAgICAgICAgICBdID0gZnVuY3Rpb24gcHJvbWlzaWZpZWRTZXRJbW1lZGlhdGUoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIHNldEltbWVkaWF0ZUV4ZWN1dG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYzogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbYXJnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xvY2suY2xlYXJJbW1lZGlhdGUgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZSh0aW1lcklkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiSW1tZWRpYXRlXCIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLmNvdW50VGltZXJzID0gZnVuY3Rpb24gY291bnRUaW1lcnMoKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGNsb2NrLnRpbWVycyB8fCB7fSkubGVuZ3RoICtcbiAgICAgICAgICAgICAgICAoY2xvY2suam9icyB8fCBbXSkubGVuZ3RoXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGdldFRpbWVUb05leHRGcmFtZSgpLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtjbG9jay5ub3cgKyBnZXRUaW1lVG9OZXh0RnJhbWUoKV0sXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVySWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCBcIkFuaW1hdGlvbkZyYW1lXCIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnJ1bk1pY3JvdGFza3MgPSBmdW5jdGlvbiBydW5NaWNyb3Rhc2tzKCkge1xuICAgICAgICAgICAgcnVuSm9icyhjbG9jayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdGlja1ZhbHVlIG1pbGxpc2Vjb25kcyBvciBhIHN0cmluZyBwYXJzZWFibGUgYnkgcGFyc2VUaW1lXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNBc3luY1xuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfHVuZGVmaW5lZH0gd2lsbCByZXR1cm4gdGhlIG5ldyBgbm93YCB2YWx1ZSBvciBub3RoaW5nIGZvciBhc3luY1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZG9UaWNrKHRpY2tWYWx1ZSwgaXNBc3luYywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBtc0Zsb2F0ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdGlja1ZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgID8gdGlja1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogcGFyc2VUaW1lKHRpY2tWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBtcyA9IE1hdGguZmxvb3IobXNGbG9hdCk7XG4gICAgICAgICAgICBjb25zdCByZW1haW5kZXIgPSBuYW5vUmVtYWluZGVyKG1zRmxvYXQpO1xuICAgICAgICAgICAgbGV0IG5hbm9zVG90YWwgPSBuYW5vcyArIHJlbWFpbmRlcjtcbiAgICAgICAgICAgIGxldCB0aWNrVG8gPSBjbG9jay5ub3cgKyBtcztcblxuICAgICAgICAgICAgaWYgKG1zRmxvYXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5lZ2F0aXZlIHRpY2tzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZGp1c3QgZm9yIHBvc2l0aXZlIG92ZXJmbG93XG4gICAgICAgICAgICBpZiAobmFub3NUb3RhbCA+PSAxZTYpIHtcbiAgICAgICAgICAgICAgICB0aWNrVG8gKz0gMTtcbiAgICAgICAgICAgICAgICBuYW5vc1RvdGFsIC09IDFlNjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFub3MgPSBuYW5vc1RvdGFsO1xuICAgICAgICAgICAgbGV0IHRpY2tGcm9tID0gY2xvY2subm93O1xuICAgICAgICAgICAgbGV0IHByZXZpb3VzID0gY2xvY2subm93O1xuICAgICAgICAgICAgLy8gRVNMaW50IGZhaWxzIHRvIGRldGVjdCB0aGlzIGNvcnJlY3RseVxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWNvbnN0ICovXG4gICAgICAgICAgICBsZXQgdGltZXIsXG4gICAgICAgICAgICAgICAgZmlyc3RFeGNlcHRpb24sXG4gICAgICAgICAgICAgICAgb2xkTm93LFxuICAgICAgICAgICAgICAgIG5leHRQcm9taXNlVGljayxcbiAgICAgICAgICAgICAgICBjb21wZW5zYXRpb25DaGVjayxcbiAgICAgICAgICAgICAgICBwb3N0VGltZXJDYWxsO1xuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBwcmVmZXItY29uc3QgKi9cblxuICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIHBlcmZvcm0gbWljcm90YXNrc1xuICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgcnVuSm9icyhjbG9jayk7XG4gICAgICAgICAgICBpZiAob2xkTm93ICE9PSBjbG9jay5ub3cpIHtcbiAgICAgICAgICAgICAgICAvLyBjb21wZW5zYXRlIGZvciBhbnkgc2V0U3lzdGVtVGltZSgpIGNhbGwgZHVyaW5nIG1pY3JvdGFzayBjYWxsYmFja1xuICAgICAgICAgICAgICAgIHRpY2tGcm9tICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgICAgICB0aWNrVG8gKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgICAgICAgICBmdW5jdGlvbiBkb1RpY2tJbm5lcigpIHtcbiAgICAgICAgICAgICAgICAvLyBwZXJmb3JtIGVhY2ggdGltZXIgaW4gdGhlIHJlcXVlc3RlZCByYW5nZVxuICAgICAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHRpY2tGcm9tLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRpbWVyICYmIHRpY2tGcm9tIDw9IHRpY2tUbykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xvY2sudGltZXJzW3RpbWVyLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGlja0Zyb20gPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5ub3cgPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGROb3cgPSBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RXhjZXB0aW9uID0gZmlyc3RFeGNlcHRpb24gfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggdXAgYWZ0ZXIgbmF0aXZlIHNldEltbWVkaWF0ZSBjYWxsYmFjayB0byBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBuYXRpdmUgZXM2IHByb21pc2VzIHRvIHByb2Nlc3MgdGhlaXIgY2FsbGJhY2tzIGFmdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCB0aW1lciBmaXJlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQobmV4dFByb21pc2VUaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBlbnNhdGlvbkNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwb3N0VGltZXJDYWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gcGVyZm9ybSBwcm9jZXNzLm5leHRUaWNrKClzIGFnYWluXG4gICAgICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIGlmIChvbGROb3cgIT09IGNsb2NrLm5vdykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb21wZW5zYXRlIGZvciBhbnkgc2V0U3lzdGVtVGltZSgpIGNhbGwgZHVyaW5nIHByb2Nlc3MubmV4dFRpY2soKSBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tUbyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIGNvcm5lciBjYXNlOiBkdXJpbmcgcnVuSm9icyBuZXcgdGltZXJzIHdlcmUgc2NoZWR1bGVkIHdoaWNoIGNvdWxkIGJlIGluIHRoZSByYW5nZSBbY2xvY2subm93LCB0aWNrVG9dXG4gICAgICAgICAgICAgICAgdGltZXIgPSBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgdGlja0Zyb20sIHRpY2tUbyk7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay50aWNrKHRpY2tUbyAtIGNsb2NrLm5vdyk7IC8vIGRvIGl0IGFsbCBhZ2FpbiAtIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXF1ZXN0ZWQgcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RFeGNlcHRpb24gPSBmaXJzdEV4Y2VwdGlvbiB8fCBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gdGltZXJzIHJlbWFpbmluZyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlOiBtb3ZlIHRoZSBjbG9jayBhbGwgdGhlIHdheSB0byB0aGUgZW5kXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLm5vdyA9IHRpY2tUbztcblxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgbmFub3NcbiAgICAgICAgICAgICAgICAgICAgbmFub3MgPSBuYW5vc1RvdGFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZmlyc3RFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0UHJvbWlzZVRpY2sgPVxuICAgICAgICAgICAgICAgIGlzQXN5bmMgJiZcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wZW5zYXRpb25DaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFRpbWVyQ2FsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9UaWNrSW5uZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29tcGVuc2F0aW9uQ2hlY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gY29tcGVuc2F0ZSBmb3IgYW55IHNldFN5c3RlbVRpbWUoKSBjYWxsIGR1cmluZyB0aW1lciBjYWxsYmFja1xuICAgICAgICAgICAgICAgIGlmIChvbGROb3cgIT09IGNsb2NrLm5vdykge1xuICAgICAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tUbyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwb3N0VGltZXJDYWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHByZXZpb3VzLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzID0gdGlja0Zyb207XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gZG9UaWNrSW5uZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRpY2tWYWx1ZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIG9yIGEgaHVtYW4tcmVhZGFibGUgdmFsdWUgbGlrZSBcIjAxOjExOjE1XCJcbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gd2lsbCByZXR1cm4gdGhlIG5ldyBgbm93YCB2YWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgY2xvY2sudGljayA9IGZ1bmN0aW9uIHRpY2sodGlja1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9UaWNrKHRpY2tWYWx1ZSwgZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdGlja1ZhbHVlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgb3IgYSBodW1hbi1yZWFkYWJsZSB2YWx1ZSBsaWtlIFwiMDE6MTE6MTVcIlxuICAgICAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNsb2NrLnRpY2tBc3luYyA9IGZ1bmN0aW9uIHRpY2tBc3luYyh0aWNrVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9nbG9iYWwuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVGljayh0aWNrVmFsdWUsIHRydWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbG9jay5kdXJpbmdUaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIF9nbG9iYWwuUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY2xvY2submV4dEFzeW5jID0gZnVuY3Rpb24gbmV4dEFzeW5jKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLnJ1bkFsbCA9IGZ1bmN0aW9uIHJ1bkFsbCgpIHtcbiAgICAgICAgICAgIGxldCBudW1UaW1lcnMsIGk7XG4gICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjbG9jay5sb29wTGltaXQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG51bVRpbWVycyA9IE9iamVjdC5rZXlzKGNsb2NrLnRpbWVycykubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChudW1UaW1lcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRJc05lYXJJbmZpbml0ZUxpbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xvY2submV4dCgpO1xuICAgICAgICAgICAgICAgIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGV4Y2Vzc0pvYiA9IGZpcnN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgdGhyb3cgZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGV4Y2Vzc0pvYik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2sucnVuVG9GcmFtZSA9IGZ1bmN0aW9uIHJ1blRvRnJhbWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2sudGljayhnZXRUaW1lVG9OZXh0RnJhbWUoKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNsb2NrLnJ1bkFsbEFzeW5jID0gZnVuY3Rpb24gcnVuQWxsQXN5bmMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZ2xvYmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9SdW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1UaW1lcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgY2xvY2subG9vcExpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVRpbWVycyA9IE9iamVjdC5rZXlzKGNsb2NrLnRpbWVycylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVRpbWVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLm5leHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1J1bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJc05lYXJJbmZpbml0ZUxpbWl0KGNsb2NrLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2Vzc0pvYiA9IGZpcnN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGV4Y2Vzc0pvYikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvUnVuKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2sucnVuVG9MYXN0ID0gZnVuY3Rpb24gcnVuVG9MYXN0KCkge1xuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBsYXN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbG9jay50aWNrKHRpbWVyLmNhbGxBdCAtIGNsb2NrLm5vdyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNsb2NrLnJ1blRvTGFzdEFzeW5jID0gZnVuY3Rpb24gcnVuVG9MYXN0QXN5bmMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZ2xvYmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IGxhc3RUaW1lcihjbG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay50aWNrQXN5bmModGltZXIuY2FsbEF0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICAgICAgbmFub3MgPSAwO1xuICAgICAgICAgICAgY2xvY2sudGltZXJzID0ge307XG4gICAgICAgICAgICBjbG9jay5qb2JzID0gW107XG4gICAgICAgICAgICBjbG9jay5ub3cgPSBzdGFydDtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5zZXRTeXN0ZW1UaW1lID0gZnVuY3Rpb24gc2V0U3lzdGVtVGltZShzeXN0ZW1UaW1lKSB7XG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgdGltZSBkaWZmZXJlbmNlXG4gICAgICAgICAgICBjb25zdCBuZXdOb3cgPSBnZXRFcG9jaChzeXN0ZW1UaW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXdOb3cgLSBjbG9jay5ub3c7XG4gICAgICAgICAgICBsZXQgaWQsIHRpbWVyO1xuXG4gICAgICAgICAgICBhZGp1c3RlZFN5c3RlbVRpbWVbMF0gPSBhZGp1c3RlZFN5c3RlbVRpbWVbMF0gKyBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgYWRqdXN0ZWRTeXN0ZW1UaW1lWzFdID0gYWRqdXN0ZWRTeXN0ZW1UaW1lWzFdICsgbmFub3M7XG4gICAgICAgICAgICAvLyB1cGRhdGUgJ3N5c3RlbSBjbG9jaydcbiAgICAgICAgICAgIGNsb2NrLm5vdyA9IG5ld05vdztcbiAgICAgICAgICAgIG5hbm9zID0gMDtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRpbWVycyBhbmQgaW50ZXJ2YWxzIHRvIGtlZXAgdGhlbSBzdGFibGVcbiAgICAgICAgICAgIGZvciAoaWQgaW4gY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNsb2NrLnRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBjbG9jay50aW1lcnNbaWRdO1xuICAgICAgICAgICAgICAgICAgICB0aW1lci5jcmVhdGVkQXQgKz0gZGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIuY2FsbEF0ICs9IGRpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChwZXJmb3JtYW5jZVByZXNlbnQpIHtcbiAgICAgICAgICAgIGNsb2NrLnBlcmZvcm1hbmNlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgaWYgKGhhc1BlcmZvcm1hbmNlUHJvdG90eXBlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdG8gPSBfZ2xvYmFsLlBlcmZvcm1hbmNlLnByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmluZGV4T2YoXCJnZXRFbnRyaWVzXCIpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBleHBlY3RlZCByZXR1cm4gdHlwZSBmb3IgZ2V0RW50cmllcyBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnBlcmZvcm1hbmNlW25hbWVdID0gTk9PUF9BUlJBWTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnBlcmZvcm1hbmNlW25hbWVdID0gTk9PUDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiBGYWtlVGltZXJzTm93KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhydCA9IGhydGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbGxpcyA9IGhydFswXSAqIDEwMDAgKyBocnRbMV0gLyAxZTY7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pbGxpcztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaHJ0aW1lUHJlc2VudCkge1xuICAgICAgICAgICAgY2xvY2suaHJ0aW1lID0gaHJ0aW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb2NrO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q29uZmlnPX0gW2NvbmZpZ10gT3B0aW9uYWwgY29uZmlnXG4gICAgICogQHJldHVybnMge0Nsb2NrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3RhbGwoY29uZmlnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxIHx8XG4gICAgICAgICAgICBjb25maWcgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGNvbmZpZykgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcgPT09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBGYWtlVGltZXJzLmluc3RhbGwgY2FsbGVkIHdpdGggJHtTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgICAgICl9IGluc3RhbGwgcmVxdWlyZXMgYW4gb2JqZWN0IHBhcmFtZXRlcmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgY29uZmlnID0gdHlwZW9mIGNvbmZpZyAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbmZpZyA6IHt9O1xuICAgICAgICBjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgPSBjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgfHwgZmFsc2U7XG4gICAgICAgIGNvbmZpZy5hZHZhbmNlVGltZURlbHRhID0gY29uZmlnLmFkdmFuY2VUaW1lRGVsdGEgfHwgMjA7XG4gICAgICAgIGNvbmZpZy5zaG91bGRDbGVhck5hdGl2ZVRpbWVycyA9XG4gICAgICAgICAgICBjb25maWcuc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnMgfHwgZmFsc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy50YXJnZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJjb25maWcudGFyZ2V0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFVzZSBgd2l0aEdsb2JhbCh0YXJnZXQpYCBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGksIGw7XG4gICAgICAgIGNvbnN0IGNsb2NrID0gY3JlYXRlQ2xvY2soY29uZmlnLm5vdywgY29uZmlnLmxvb3BMaW1pdCk7XG4gICAgICAgIGNsb2NrLnNob3VsZENsZWFyTmF0aXZlVGltZXJzID0gY29uZmlnLnNob3VsZENsZWFyTmF0aXZlVGltZXJzO1xuXG4gICAgICAgIGNsb2NrLnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmluc3RhbGwoY2xvY2ssIGNvbmZpZyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2subWV0aG9kcyA9IGNvbmZpZy50b0Zha2UgfHwgW107XG5cbiAgICAgICAgaWYgKGNsb2NrLm1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBkbyBub3QgZmFrZSBuZXh0VGljayBieSBkZWZhdWx0IC0gR2l0SHViIzEyNlxuICAgICAgICAgICAgY2xvY2subWV0aG9kcyA9IE9iamVjdC5rZXlzKHRpbWVycykuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5ICE9PSBcIm5leHRUaWNrXCIgJiYga2V5ICE9PSBcInF1ZXVlTWljcm90YXNrXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsVGljayA9IGRvSW50ZXJ2YWxUaWNrLmJpbmQoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjbG9jayxcbiAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZVRpbWVEZWx0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBfZ2xvYmFsLnNldEludGVydmFsKFxuICAgICAgICAgICAgICAgIGludGVydmFsVGljayxcbiAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZVRpbWVEZWx0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNsb2NrLmF0dGFjaGVkSW50ZXJ2YWwgPSBpbnRlcnZhbElkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGNsb2NrLm1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPSBjbG9jay5tZXRob2RzW2ldO1xuICAgICAgICAgICAgaWYgKG5hbWVPZk1ldGhvZFRvUmVwbGFjZSA9PT0gXCJocnRpbWVcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaGlqYWNrTWV0aG9kKF9nbG9iYWwucHJvY2VzcywgbmFtZU9mTWV0aG9kVG9SZXBsYWNlLCBjbG9jayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPT09IFwibmV4dFRpY2tcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2sgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBoaWphY2tNZXRob2QoX2dsb2JhbC5wcm9jZXNzLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpamFja01ldGhvZChfZ2xvYmFsLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9jaztcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVyczogdGltZXJzLFxuICAgICAgICBjcmVhdGVDbG9jazogY3JlYXRlQ2xvY2ssXG4gICAgICAgIGluc3RhbGw6IGluc3RhbGwsXG4gICAgICAgIHdpdGhHbG9iYWw6IHdpdGhHbG9iYWwsXG4gICAgfTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGYWtlVGltZXJzXG4gKiBAcHJvcGVydHkge1RpbWVyc30gdGltZXJzXG4gKiBAcHJvcGVydHkge2NyZWF0ZUNsb2NrfSBjcmVhdGVDbG9ja1xuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gaW5zdGFsbFxuICogQHByb3BlcnR5IHt3aXRoR2xvYmFsfSB3aXRoR2xvYmFsXG4gKi9cblxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKiBAdHlwZSB7RmFrZVRpbWVyc30gKi9cbmNvbnN0IGRlZmF1bHRJbXBsZW1lbnRhdGlvbiA9IHdpdGhHbG9iYWwoZ2xvYmFsT2JqZWN0KTtcblxuZXhwb3J0cy50aW1lcnMgPSBkZWZhdWx0SW1wbGVtZW50YXRpb24udGltZXJzO1xuZXhwb3J0cy5jcmVhdGVDbG9jayA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbi5jcmVhdGVDbG9jaztcbmV4cG9ydHMuaW5zdGFsbCA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbi5pbnN0YWxsO1xuZXhwb3J0cy53aXRoR2xvYmFsID0gd2l0aEdsb2JhbDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9qZXN0LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRmFrZVRpbWVyV2l0aENvbnRleHQsXG4gIEluc3RhbGxlZENsb2NrLFxufSBmcm9tICdAc2lub25qcy9mYWtlLXRpbWVycydcbmltcG9ydCB7XG4gIHdpdGhHbG9iYWwsXG59IGZyb20gJ0BzaW5vbmpzL2Zha2UtdGltZXJzJ1xuXG5leHBvcnQgY2xhc3MgRmFrZVRpbWVycyB7XG4gIHByaXZhdGUgX2Nsb2NrITogSW5zdGFsbGVkQ2xvY2tcbiAgcHJpdmF0ZSBfZmFraW5nVGltZTogYm9vbGVhblxuICBwcml2YXRlIF9mYWtlVGltZXJzOiBGYWtlVGltZXJXaXRoQ29udGV4dFxuICBwcml2YXRlIF9tYXhMb29wczogbnVtYmVyXG4gIHByaXZhdGUgX25vdyA9IERhdGUubm93XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGdsb2JhbCxcbiAgICBtYXhMb29wcyA9IDEwXzAwMCxcbiAgfToge1xuICAgIGdsb2JhbDogdHlwZW9mIGdsb2JhbFRoaXNcbiAgICBtYXhMb29wcz86IG51bWJlclxuICB9KSB7XG4gICAgdGhpcy5fbWF4TG9vcHMgPSBtYXhMb29wc1xuXG4gICAgdGhpcy5fZmFraW5nVGltZSA9IGZhbHNlXG4gICAgdGhpcy5fZmFrZVRpbWVycyA9IHdpdGhHbG9iYWwoZ2xvYmFsKVxuICB9XG5cbiAgY2xlYXJBbGxUaW1lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Zha2luZ1RpbWUpXG4gICAgICB0aGlzLl9jbG9jay5yZXNldCgpXG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMudXNlUmVhbFRpbWVycygpXG4gIH1cblxuICBydW5BbGxUaW1lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKVxuICAgICAgdGhpcy5fY2xvY2sucnVuQWxsKClcbiAgfVxuXG4gIHJ1bk9ubHlQZW5kaW5nVGltZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGVja0Zha2VUaW1lcnMoKSlcbiAgICAgIHRoaXMuX2Nsb2NrLnJ1blRvTGFzdCgpXG4gIH1cblxuICBhZHZhbmNlVGltZXJzVG9OZXh0VGltZXIoc3RlcHMgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKSB7XG4gICAgICBmb3IgKGxldCBpID0gc3RlcHM7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgdGhpcy5fY2xvY2submV4dCgpXG4gICAgICAgIC8vIEZpcmUgYWxsIHRpbWVycyBhdCB0aGlzIHBvaW50OiBodHRwczovL2dpdGh1Yi5jb20vc2lub25qcy9mYWtlLXRpbWVycy9pc3N1ZXMvMjUwXG4gICAgICAgIHRoaXMuX2Nsb2NrLnRpY2soMClcblxuICAgICAgICBpZiAodGhpcy5fY2xvY2suY291bnRUaW1lcnMoKSA9PT0gMClcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkdmFuY2VUaW1lcnNCeVRpbWUobXNUb1J1bjogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKVxuICAgICAgdGhpcy5fY2xvY2sudGljayhtc1RvUnVuKVxuICB9XG5cbiAgcnVuQWxsVGlja3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG1ldGhvZCBub3QgZXhwb3NlZFxuICAgICAgdGhpcy5fY2xvY2sucnVuTWljcm90YXNrcygpXG4gICAgfVxuICB9XG5cbiAgdXNlUmVhbFRpbWVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZmFraW5nVGltZSkge1xuICAgICAgdGhpcy5fY2xvY2sudW5pbnN0YWxsKClcbiAgICAgIHRoaXMuX2Zha2luZ1RpbWUgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHVzZUZha2VUaW1lcnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9mYWtpbmdUaW1lKSB7XG4gICAgICBjb25zdCB0b0Zha2UgPSBPYmplY3Qua2V5cyh0aGlzLl9mYWtlVGltZXJzLnRpbWVycykgYXMgQXJyYXk8a2V5b2YgRmFrZVRpbWVyV2l0aENvbnRleHRbJ3RpbWVycyddPlxuXG4gICAgICB0aGlzLl9jbG9jayA9IHRoaXMuX2Zha2VUaW1lcnMuaW5zdGFsbCh7XG4gICAgICAgIGxvb3BMaW1pdDogdGhpcy5fbWF4TG9vcHMsXG4gICAgICAgIG5vdzogRGF0ZS5ub3coKSxcbiAgICAgICAgdG9GYWtlLFxuICAgICAgICBzaG91bGRDbGVhck5hdGl2ZVRpbWVyczogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMuX2Zha2luZ1RpbWUgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKSB7XG4gICAgICBjb25zdCB7IG5vdyB9ID0gdGhpcy5fY2xvY2tcbiAgICAgIHRoaXMuX2Nsb2NrLnJlc2V0KClcbiAgICAgIHRoaXMuX2Nsb2NrLnNldFN5c3RlbVRpbWUobm93KVxuICAgIH1cbiAgfVxuXG4gIHNldFN5c3RlbVRpbWUobm93PzogbnVtYmVyIHwgRGF0ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGVja0Zha2VUaW1lcnMoKSlcbiAgICAgIHRoaXMuX2Nsb2NrLnNldFN5c3RlbVRpbWUobm93KVxuICB9XG5cbiAgZ2V0UmVhbFN5c3RlbVRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbm93KClcbiAgfVxuXG4gIGdldFRpbWVyQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5fY2hlY2tGYWtlVGltZXJzKCkpXG4gICAgICByZXR1cm4gdGhpcy5fY2xvY2suY291bnRUaW1lcnMoKVxuXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRmFrZVRpbWVycygpIHtcbiAgICBpZiAoIXRoaXMuX2Zha2luZ1RpbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RpbWVycyBhcmUgbm90IG1vY2tlZC4gVHJ5IGNhbGxpbmcgXCJ2aS51c2VGYWtlVGltZXJzKClcIiBmaXJzdC4nLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mYWtpbmdUaW1lXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5pbXBvcnQgeyBwYXJzZVN0YWNrdHJhY2UgfSBmcm9tICcuLi91dGlscy9zb3VyY2UtbWFwJ1xuaW1wb3J0IHR5cGUgeyBWaXRlc3RNb2NrZXIgfSBmcm9tICcuLi9ub2RlL21vY2tlcidcbmltcG9ydCB7IEZha2VUaW1lcnMgfSBmcm9tICcuL3RpbWVycydcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRTcHksIE1heWJlTW9ja2VkLCBNYXliZU1vY2tlZERlZXAgfSBmcm9tICcuL2plc3QtbW9jaydcbmltcG9ydCB7IGZuLCBpc01vY2tGdW5jdGlvbiwgc3BpZXMsIHNweU9uIH0gZnJvbSAnLi9qZXN0LW1vY2snXG5cbmNsYXNzIFZpdGVzdFV0aWxzIHtcbiAgcHJpdmF0ZSBfdGltZXJzOiBGYWtlVGltZXJzXG4gIHByaXZhdGUgX21vY2tlZERhdGU6IHN0cmluZyB8IG51bWJlciB8IERhdGUgfCBudWxsXG4gIHByaXZhdGUgX21vY2tlcjogVml0ZXN0TW9ja2VyXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGltZXJzID0gbmV3IEZha2VUaW1lcnMoe1xuICAgICAgZ2xvYmFsOiBnbG9iYWxUaGlzLFxuICAgICAgbWF4TG9vcHM6IDEwXzAwMCxcbiAgICB9KVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgaW5qZWN0ZWQgYnkgdml0ZS1uaWRlXG4gICAgdGhpcy5fbW9ja2VyID0gdHlwZW9mIF9fdml0ZXN0X21vY2tlcl9fICE9PSAndW5kZWZpbmVkJyA/IF9fdml0ZXN0X21vY2tlcl9fIDogbnVsbFxuICAgIHRoaXMuX21vY2tlZERhdGUgPSBudWxsXG5cbiAgICBpZiAoIXRoaXMuX21vY2tlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcignVml0ZXN0IHdhcyBpbml0aWFsaXNlZCB3aXRoIG5hdGl2ZSBOb2RlIGluc3RlYWQgb2YgVml0ZSBOb2RlJylcbiAgfVxuXG4gIC8vIHRpbWVyc1xuXG4gIHB1YmxpYyB1c2VGYWtlVGltZXJzKCkge1xuICAgIHRoaXMuX3RpbWVycy51c2VGYWtlVGltZXJzKClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHVibGljIHVzZVJlYWxUaW1lcnMoKSB7XG4gICAgdGhpcy5fdGltZXJzLnVzZVJlYWxUaW1lcnMoKVxuICAgIHRoaXMuX21vY2tlZERhdGUgPSBudWxsXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHB1YmxpYyBydW5Pbmx5UGVuZGluZ1RpbWVycygpIHtcbiAgICB0aGlzLl90aW1lcnMucnVuT25seVBlbmRpbmdUaW1lcnMoKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwdWJsaWMgcnVuQWxsVGltZXJzKCkge1xuICAgIHRoaXMuX3RpbWVycy5ydW5BbGxUaW1lcnMoKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwdWJsaWMgcnVuQWxsVGlja3MoKSB7XG4gICAgdGhpcy5fdGltZXJzLnJ1bkFsbFRpY2tzKClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHVibGljIGFkdmFuY2VUaW1lcnNCeVRpbWUobXM6IG51bWJlcikge1xuICAgIHRoaXMuX3RpbWVycy5hZHZhbmNlVGltZXJzQnlUaW1lKG1zKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwdWJsaWMgYWR2YW5jZVRpbWVyc1RvTmV4dFRpbWVyKCkge1xuICAgIHRoaXMuX3RpbWVycy5hZHZhbmNlVGltZXJzVG9OZXh0VGltZXIoKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZXJDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZXJzLmdldFRpbWVyQ291bnQoKVxuICB9XG5cbiAgcHVibGljIHNldFN5c3RlbVRpbWUodGltZTogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSkge1xuICAgIGNvbnN0IGRhdGUgPSB0aW1lIGluc3RhbmNlb2YgRGF0ZSA/IHRpbWUgOiBuZXcgRGF0ZSh0aW1lKVxuICAgIHRoaXMuX21vY2tlZERhdGUgPSBkYXRlXG4gICAgdGhpcy5fdGltZXJzLnNldFN5c3RlbVRpbWUoZGF0ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHVibGljIGdldE1vY2tlZFN5c3RlbVRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vY2tlZERhdGVcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWFsU3lzdGVtVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZXJzLmdldFJlYWxTeXN0ZW1UaW1lKClcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFsbFRpbWVycygpIHtcbiAgICB0aGlzLl90aW1lcnMuY2xlYXJBbGxUaW1lcnMoKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBtb2Nrc1xuXG4gIHNweU9uID0gc3B5T25cbiAgZm4gPSBmblxuXG4gIHByaXZhdGUgZ2V0SW1wb3J0ZXIoKSB7XG4gICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdtb2NrJylcbiAgICBjb25zdCBbLCwgaW1wb3J0ZXJdID0gcGFyc2VTdGFja3RyYWNlKGVyciwgdHJ1ZSlcbiAgICByZXR1cm4gaW1wb3J0ZXIuZmlsZVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGFsbCBgaW1wb3J0c2AgdG8gcGFzc2VkIG1vZHVsZSB0byBiZSBtb2NrZWQuXG4gICAqIC0gSWYgdGhlcmUgaXMgYSBmYWN0b3J5LCB3aWxsIHJldHVybiBpdCdzIHJlc3VsdC4gVGhlIGNhbGwgdG8gYHZpLm1vY2tgIGlzIGhvaXN0ZWQgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZSxcbiAgICogc28geW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHZhcmlhYmxlcyBkZWNsYXJlZCBpbiB0aGUgZ2xvYmFsIGZpbGUgc2NvcGUsIGlmIHlvdSBkaWRuJ3QgcHV0IHRoZW0gYmVmb3JlIGltcG9ydHMhXG4gICAqIC0gSWYgYF9fbW9ja3NfX2AgZm9sZGVyIHdpdGggZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGV4aXN0LCBhbGwgaW1wb3J0cyB3aWxsXG4gICAqIHJldHVybiBpdC5cbiAgICogLSBJZiB0aGVyZSBpcyBubyBgX19tb2Nrc19fYCBmb2xkZXIgb3IgYSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpbnNpZGUsIHdpbGwgY2FsbCBvcmlnaW5hbFxuICAgKiBtb2R1bGUgYW5kIG1vY2sgaXQuXG4gICAqIEBwYXJhbSBwYXRoIFBhdGggdG8gdGhlIG1vZHVsZS4gQ2FuIGJlIGFsaWFzZWQsIGlmIHlvdXIgY29uZmlnIHN1cHBvcnMgaXRcbiAgICogQHBhcmFtIGZhY3RvcnkgRmFjdG9yeSBmb3IgdGhlIG1vY2tlZCBtb2R1bGUuIEhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS5cbiAgICovXG4gIHB1YmxpYyBtb2NrKHBhdGg6IHN0cmluZywgZmFjdG9yeT86ICgpID0+IGFueSkge1xuICAgIHRoaXMuX21vY2tlci5xdWV1ZU1vY2socGF0aCwgdGhpcy5nZXRJbXBvcnRlcigpLCBmYWN0b3J5KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgbW9kdWxlIGZyb20gbW9ja2VkIHJlZ2lzdHJ5LiBBbGwgc3Vic2VxdWVudCBjYWxscyB0byBpbXBvcnQgd2lsbFxuICAgKiByZXR1cm4gb3JpZ2luYWwgbW9kdWxlIGV2ZW4gaWYgaXQgd2FzIG1vY2tlZC5cbiAgICogQHBhcmFtIHBhdGggUGF0aCB0byB0aGUgbW9kdWxlLiBDYW4gYmUgYWxpYXNlZCwgaWYgeW91ciBjb25maWcgc3VwcG9ycyBpdFxuICAgKi9cbiAgcHVibGljIHVubW9jayhwYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9tb2NrZXIucXVldWVVbm1vY2socGF0aCwgdGhpcy5nZXRJbXBvcnRlcigpKVxuICB9XG5cbiAgcHVibGljIGRvTW9jayhwYXRoOiBzdHJpbmcsIGZhY3Rvcnk/OiAoKSA9PiBhbnkpIHtcbiAgICB0aGlzLl9tb2NrZXIucXVldWVNb2NrKHBhdGgsIHRoaXMuZ2V0SW1wb3J0ZXIoKSwgZmFjdG9yeSlcbiAgfVxuXG4gIHB1YmxpYyBkb1VubW9jayhwYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9tb2NrZXIucXVldWVVbm1vY2socGF0aCwgdGhpcy5nZXRJbXBvcnRlcigpKVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgbW9kdWxlLCBieXBhc3NpbmcgYWxsIGNoZWNrcyBpZiBpdCBzaG91bGQgYmUgbW9ja2VkLlxuICAgKiBDYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1vY2sgbW9kdWxlIHBhcnRpYWxseS5cbiAgICogQGV4YW1wbGVcbiAgICogdmkubW9jaygnLi9leGFtcGxlJywgYXN5bmMgKCkgPT4ge1xuICAgKiAgY29uc3QgYXhpb3MgPSBhd2FpdCB2aS5pbXBvcnRBY3R1YWwoJy4vZXhhbXBsZScpXG4gICAqXG4gICAqICByZXR1cm4geyAuLi5heGlvcywgZ2V0OiB2aS5mbigpIH1cbiAgICogfSlcbiAgICogQHBhcmFtIHBhdGggUGF0aCB0byB0aGUgbW9kdWxlLiBDYW4gYmUgYWxpYXNlZCwgaWYgeW91ciBjb25maWcgc3VwcG9ycyBpdFxuICAgKiBAcmV0dXJucyBBY3R1YWwgbW9kdWxlIHdpdGhvdXQgc3BpZXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbXBvcnRBY3R1YWw8VD4ocGF0aDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX21vY2tlci5pbXBvcnRBY3R1YWw8VD4ocGF0aCwgdGhpcy5nZXRJbXBvcnRlcigpKVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYSBtb2R1bGUgd2l0aCBhbGwgb2YgaXRzIHByb3BlcnRpZXMgYW5kIG5lc3RlZCBwcm9wZXJ0aWVzIG1vY2tlZC5cbiAgICogRm9yIHRoZSBydWxlcyBhcHBsaWVkLCBzZWUgZG9jcy5cbiAgICogQHBhcmFtIHBhdGggUGF0aCB0byB0aGUgbW9kdWxlLiBDYW4gYmUgYWxpYXNlZCwgaWYgeW91ciBjb25maWcgc3VwcG9ycyBpdFxuICAgKiBAcmV0dXJucyBGdWxseSBtb2NrZWQgbW9kdWxlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW1wb3J0TW9jazxUPihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1heWJlTW9ja2VkRGVlcDxUPj4ge1xuICAgIHJldHVybiB0aGlzLl9tb2NrZXIuaW1wb3J0TW9jayhwYXRoLCB0aGlzLmdldEltcG9ydGVyKCkpXG4gIH1cblxuICAvKipcbiAgICogVHlwZSBoZWxwZXJzIGZvciBUeXBlU2NyaXB0LiBJbiByZWFsaXR5IGp1c3QgcmV0dXJucyB0aGUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZC5cbiAgICogQGV4YW1wbGVcbiAgICogaW1wb3J0IGV4YW1wbGUgZnJvbSAnLi9leGFtcGxlJ1xuICAgKiB2aS5tb2NrKCcuL2V4YW1wbGUnKVxuICAgKlxuICAgKiB0ZXN0KCcxKzEgZXF1YWxzIDInIGFzeW5jICgpID0+IHtcbiAgICogIHZpLm1vY2tlZChleGFtcGxlLmNhbGMpLm1vY2tSZXN0b3JlKClcbiAgICpcbiAgICogIGNvbnN0IHJlcyA9IGV4YW1wbGUuY2FsYygxLCAnKycsIDEpXG4gICAqXG4gICAqICBleHBlY3QocmVzKS50b0JlKDIpXG4gICAqIH0pXG4gICAqIEBwYXJhbSBpdGVtIEFueXRoaW5nIHRoYXQgY2FuIGJlIG1vY2tlZFxuICAgKiBAcGFyYW0gZGVlcCBJZiB0aGUgb2JqZWN0IGlzIGRlZXBseSBtb2NrZWRcbiAgICovXG4gIHB1YmxpYyBtb2NrZWQ8VD4oaXRlbTogVCwgZGVlcD86IGZhbHNlKTogTWF5YmVNb2NrZWQ8VD5cbiAgcHVibGljIG1vY2tlZDxUPihpdGVtOiBULCBkZWVwOiB0cnVlKTogTWF5YmVNb2NrZWREZWVwPFQ+XG4gIHB1YmxpYyBtb2NrZWQ8VD4oaXRlbTogVCwgX2RlZXAgPSBmYWxzZSk6IE1heWJlTW9ja2VkPFQ+IHwgTWF5YmVNb2NrZWREZWVwPFQ+IHtcbiAgICByZXR1cm4gaXRlbSBhcyBhbnlcbiAgfVxuXG4gIHB1YmxpYyBpc01vY2tGdW5jdGlvbihmbjogYW55KTogZm4gaXMgRW5oYW5jZWRTcHkge1xuICAgIHJldHVybiBpc01vY2tGdW5jdGlvbihmbilcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFsbE1vY2tzKCkge1xuICAgIHRoaXMuX21vY2tlci5jbGVhck1vY2tzKHsgY2xlYXJNb2NrczogdHJ1ZSB9KVxuICAgIHNwaWVzLmZvckVhY2goc3B5ID0+IHNweS5tb2NrQ2xlYXIoKSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHVibGljIHJlc2V0QWxsTW9ja3MoKSB7XG4gICAgdGhpcy5fbW9ja2VyLmNsZWFyTW9ja3MoeyBtb2NrUmVzZXQ6IHRydWUgfSlcbiAgICBzcGllcy5mb3JFYWNoKHNweSA9PiBzcHkubW9ja1Jlc2V0KCkpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHB1YmxpYyByZXN0b3JlQWxsTW9ja3MoKSB7XG4gICAgdGhpcy5fbW9ja2VyLmNsZWFyTW9ja3MoeyByZXN0b3JlTW9ja3M6IHRydWUgfSlcbiAgICBzcGllcy5mb3JFYWNoKHNweSA9PiBzcHkubW9ja1Jlc3RvcmUoKSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB2aXRlc3QgPSBuZXcgVml0ZXN0VXRpbHMoKVxuZXhwb3J0IGNvbnN0IHZpID0gdml0ZXN0XG4iXSwibmFtZXMiOlsidGVzdCIsIkFzeW1tZXRyaWNNYXRjaGVyIiwiX2NvbGxlY3Rpb25zIiwicmVxdWlyZSQkMCIsImdsb2JhbCIsIlN5bWJvbCIsIlNQQUNFIiwic2VyaWFsaXplIiwicGx1Z2luIiwiX2RlZmF1bHQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2Fuc2lTdHlsZXMiLCJyZXF1aXJlJCQxIiwiRE9NQ29sbGVjdGlvbiIsImVzY2FwZUhUTUxfMSIsIkRPTUVsZW1lbnQiLCJfbWFya3VwIiwiSW1tdXRhYmxlIiwiSVNfS0VZRURfU0VOVElORUwiLCJJU19PUkRFUkVEX1NFTlRJTkVMIiwiSVNfU0VUX1NFTlRJTkVMIiwicmVhY3RJc01vZHVsZSIsIlJlYWN0RWxlbWVudCIsImdldFByb3BLZXlzIiwiUmVhY3RUZXN0Q29tcG9uZW50IiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsInByZXR0eUZvcm1hdFBsdWdpbnMiLCJqZXN0RXF1YWxzIiwiZ2xvYmFsT2JqZWN0IiwiY29weVByb3RvdHlwZSIsImV2ZXJ5IiwiZnVuY3Rpb25OYW1lIiwidGhpcyIsInJlcXVpcmUkJDkiLCJ3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QUFRLEdBQUdELFFBQU0sQ0FBQzttQkFDUCxHQUFHQzs7Ozs7Ozs7Ozs7Ozs7OztBQzlPTCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN6SixHQUFHLFVBQVUsR0FBRyxPQUFPLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBQyxDQUFDO0FBQ2xjLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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
|
|
5750
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmktN2YwYzVkMjYuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lL2NoYWluLnRzIiwiLi4vc3JjL3J1bnRpbWUvY29udGV4dC50cyIsIi4uL3NyYy9ydW50aW1lL21hcC50cyIsIi4uL3NyYy9ydW50aW1lL3N1aXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Fuc2ktc3R5bGVzQDUuMi4wL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmV0dHktZm9ybWF0QDI3LjQuNi9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9jb2xsZWN0aW9ucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmV0dHktZm9ybWF0QDI3LjQuNi9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9wbHVnaW5zL0FzeW1tZXRyaWNNYXRjaGVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Fuc2ktcmVnZXhANS4wLjEvbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9Db252ZXJ0QW5zaS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmV0dHktZm9ybWF0QDI3LjQuNi9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9wbHVnaW5zL0RPTUNvbGxlY3Rpb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9saWIvZXNjYXBlSFRNTC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmV0dHktZm9ybWF0QDI3LjQuNi9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9idWlsZC9wbHVnaW5zL2xpYi9tYXJrdXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9ET01FbGVtZW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZXR0eS1mb3JtYXRAMjcuNC42L25vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0L2J1aWxkL3BsdWdpbnMvSW1tdXRhYmxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWlzQDE3LjAuMi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWlzQDE3LjAuMi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWlzQDE3LjAuMi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9SZWFjdEVsZW1lbnQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvcGx1Z2lucy9SZWFjdFRlc3RDb21wb25lbnQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LWZvcm1hdEAyNy40LjYvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvYnVpbGQvaW5kZXguanMiLCIuLi9zcmMvaW50ZWdyYXRpb25zL3NuYXBzaG90L3BvcnQvcGx1Z2lucy50cyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvY2hhaS9qZXN0LXV0aWxzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy9jaGFpL2plc3QtZXhwZWN0LnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2dsb2JhbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL2NvcHktcHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3Byb3RvdHlwZXMvYXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHNpbm9uanMrY29tbW9uc0AxLjguMy9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvY2FsbGVkLWluLW9yZGVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2Z1bmN0aW9uLW5hbWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHNpbm9uanMrY29tbW9uc0AxLjguMy9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvY2xhc3MtbmFtZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9kZXByZWNhdGVkLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL2V2ZXJ5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL29yZGVyLWJ5LWZpcnN0LWNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHNpbm9uanMrY29tbW9uc0AxLjguMy9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucy9saWIvcHJvdG90eXBlcy9mdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL21hcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL29iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3NldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL3N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9wcm90b3R5cGVzL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3R5cGUtZGV0ZWN0QDQuMC44L25vZGVfbW9kdWxlcy90eXBlLWRldGVjdC90eXBlLWRldGVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi90eXBlLW9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BzaW5vbmpzK2NvbW1vbnNAMS44LjMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMvbGliL3ZhbHVlLXRvLXN0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytjb21tb25zQDEuOC4zL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zL2xpYi9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2lub25qcytmYWtlLXRpbWVyc0A4LjEuMC9ub2RlX21vZHVsZXMvQHNpbm9uanMvZmFrZS10aW1lcnMvc3JjL2Zha2UtdGltZXJzLXNyYy5qcyIsIi4uL3NyYy9pbnRlZ3JhdGlvbnMvdGltZXJzLnRzIiwiLi4vc3JjL2ludGVncmF0aW9ucy92aS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBDaGFpbmFibGVGdW5jdGlvbjxUIGV4dGVuZHMgc3RyaW5nLCBBcmdzIGV4dGVuZHMgYW55W10sIFIgPSBhbnk+ID0ge1xuICAoLi4uYXJnczogQXJncyk6IFJcbn0gJiB7XG4gIFt4IGluIFRdOiBDaGFpbmFibGVGdW5jdGlvbjxULCBBcmdzLCBSPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlPFQgZXh0ZW5kcyBzdHJpbmcsIEFyZ3MgZXh0ZW5kcyBhbnlbXSwgUiA9IGFueT4oXG4gIGtleXM6IFRbXSxcbiAgZm46ICh0aGlzOiBSZWNvcmQ8VCwgYm9vbGVhbiB8IHVuZGVmaW5lZD4sIC4uLmFyZ3M6IEFyZ3MpID0+IFIsXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxULCBBcmdzLCBSPiB7XG4gIGZ1bmN0aW9uIGNyZWF0ZShvYmo6IFJlY29yZDxULCBib29sZWFuIHwgdW5kZWZpbmVkPikge1xuICAgIGNvbnN0IGNoYWluID0gZnVuY3Rpb24odGhpczogYW55LCAuLi5hcmdzOiBBcmdzKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBhcmdzKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hhaW4sIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZSh7IC4uLm9iaiwgW2tleV06IHRydWUgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGFpblxuICB9XG5cbiAgY29uc3QgY2hhaW4gPSBjcmVhdGUoe30gYXMgYW55KSBhcyBhbnlcbiAgY2hhaW4uZm4gPSBmblxuICByZXR1cm4gY2hhaW5cbn1cbiIsImltcG9ydCB0eXBlIHsgQXdhaXRhYmxlLCBEb25lQ2FsbGJhY2ssIFJ1bnRpbWVDb250ZXh0LCBTdWl0ZUNvbGxlY3RvciwgVGVzdEZ1bmN0aW9uIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBjb250ZXh0OiBSdW50aW1lQ29udGV4dCA9IHtcbiAgdGFza3M6IFtdLFxuICBjdXJyZW50U3VpdGU6IG51bGwsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0VGFzayh0YXNrOiBTdWl0ZUNvbGxlY3Rvcikge1xuICBjb250ZXh0LmN1cnJlbnRTdWl0ZT8udGFza3MucHVzaCh0YXNrKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFN1aXRlKHN1aXRlOiBTdWl0ZUNvbGxlY3RvciwgZm46ICgoKSA9PiBBd2FpdGFibGU8dm9pZD4pKSB7XG4gIGNvbnN0IHByZXYgPSBjb250ZXh0LmN1cnJlbnRTdWl0ZVxuICBjb250ZXh0LmN1cnJlbnRTdWl0ZSA9IHN1aXRlXG4gIGF3YWl0IGZuKClcbiAgY29udGV4dC5jdXJyZW50U3VpdGUgPSBwcmV2XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VGVzdFRpbWVvdXQoKSB7XG4gIHJldHVybiBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fIS5jb25maWchLnRlc3RUaW1lb3V0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0SG9va1RpbWVvdXQoKSB7XG4gIHJldHVybiBwcm9jZXNzLl9fdml0ZXN0X3dvcmtlcl9fIS5jb25maWchLmhvb2tUaW1lb3V0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVGltZW91dDxUIGV4dGVuZHMoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpPihmbjogVCwgX3RpbWVvdXQ/OiBudW1iZXIpOiBUIHtcbiAgY29uc3QgdGltZW91dCA9IF90aW1lb3V0ID8/IGdldERlZmF1bHRUZXN0VGltZW91dCgpXG4gIGlmICh0aW1lb3V0IDw9IDAgfHwgdGltZW91dCA9PT0gSW5maW5pdHkpXG4gICAgcmV0dXJuIGZuXG5cbiAgcmV0dXJuICgoLi4uYXJnczogKFQgZXh0ZW5kcyAoKC4uLmFyZ3M6IGluZmVyIEEpID0+IGFueSkgPyBBIDogbmV2ZXIpKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmFjZShbZm4oLi4uYXJncyksIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgVGVzdCB0aW1lZCBvdXQgaW4gJHt0aW1lb3V0fW1zLmApKVxuICAgICAgfSwgdGltZW91dClcbiAgICAgIHRpbWVyLnVucmVmKClcbiAgICB9KV0pIGFzIEF3YWl0YWJsZTx2b2lkPlxuICB9KSBhcyBUXG59XG5cbmZ1bmN0aW9uIGVuc3VyZUFzeW5jVGVzdChmbjogVGVzdEZ1bmN0aW9uKTogKCkgPT4gQXdhaXRhYmxlPHZvaWQ+IHtcbiAgaWYgKCFmbi5sZW5ndGgpXG4gICAgcmV0dXJuIGZuIGFzICgpID0+IEF3YWl0YWJsZTx2b2lkPlxuXG4gIHJldHVybiAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZG9uZTogRG9uZUNhbGxiYWNrID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhcmdzWzBdIC8vIHJlamVjdCBvbiB0cnV0aHkgdmFsdWVzXG4gICAgICA/IHJlamVjdChhcmdzWzBdKVxuICAgICAgOiByZXNvbHZlKClcbiAgICBmbihkb25lKVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVGVzdChmbjogVGVzdEZ1bmN0aW9uLCB0aW1lb3V0PzogbnVtYmVyKTogKCkgPT4gQXdhaXRhYmxlPHZvaWQ+IHtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGVuc3VyZUFzeW5jVGVzdChmbiksIHRpbWVvdXQpXG59XG4iLCJpbXBvcnQgdHlwZSB7IEF3YWl0YWJsZSwgU3VpdGUsIFN1aXRlSG9va3MsIFRlc3QgfSBmcm9tICcuLi90eXBlcydcblxuLy8gdXNlIFdlYWtNYXAgaGVyZSB0byBtYWtlIHRoZSBUZXN0IGFuZCBTdWl0ZSBvYmplY3Qgc2VyaWFsaXphYmxlXG5jb25zdCBmbk1hcCA9IG5ldyBXZWFrTWFwKClcbmNvbnN0IGhvb2tzTWFwID0gbmV3IFdlYWtNYXAoKVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Rm4oa2V5OiBUZXN0LCBmbjogKCkgPT4gQXdhaXRhYmxlPHZvaWQ+KSB7XG4gIGZuTWFwLnNldChrZXksIGZuKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm4oa2V5OiBUZXN0KTogKCkgPT4gQXdhaXRhYmxlPHZvaWQ+IHtcbiAgcmV0dXJuIGZuTWFwLmdldChrZXkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRIb29rcyhrZXk6IFN1aXRlLCBob29rczogU3VpdGVIb29rcykge1xuICBob29rc01hcC5zZXQoa2V5LCBob29rcylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tzKGtleTogU3VpdGUpOiBTdWl0ZUhvb2tzIHtcbiAgcmV0dXJuIGhvb2tzTWFwLmdldChrZXkpXG59XG4iLCJpbXBvcnQgdHlwZSB7IEZpbGUsIFJ1bk1vZGUsIFN1aXRlLCBTdWl0ZUNvbGxlY3RvciwgU3VpdGVIb29rcywgVGVzdCwgVGVzdENvbGxlY3RvciwgVGVzdEZhY3RvcnksIFRlc3RGdW5jdGlvbiB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlQ2hhaW5hYmxlIH0gZnJvbSAnLi9jaGFpbidcbmltcG9ydCB7IGNvbGxlY3RUYXNrLCBjb250ZXh0LCBub3JtYWxpemVUZXN0LCBydW5XaXRoU3VpdGUgfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgeyBnZXRIb29rcywgc2V0Rm4sIHNldEhvb2tzIH0gZnJvbSAnLi9tYXAnXG5cbi8vIGFwaXNcbmV4cG9ydCBjb25zdCBzdWl0ZSA9IGNyZWF0ZVN1aXRlKClcbmV4cG9ydCBjb25zdCB0ZXN0OiBUZXN0Q29sbGVjdG9yID0gY3JlYXRlQ2hhaW5hYmxlKFxuICBbJ2NvbmN1cnJlbnQnLCAnc2tpcCcsICdvbmx5JywgJ3RvZG8nLCAnZmFpbHMnXSxcbiAgZnVuY3Rpb24obmFtZTogc3RyaW5nLCBmbj86IFRlc3RGdW5jdGlvbiwgdGltZW91dD86IG51bWJlcikge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdW50eXBlZCBpbnRlcm5hbCBwcm9wXG4gICAgZ2V0Q3VycmVudFN1aXRlKCkudGVzdC5mbi5jYWxsKHRoaXMsIG5hbWUsIGZuLCB0aW1lb3V0KVxuICB9LFxuKVxuXG4vLyBhbGlhc1xuZXhwb3J0IGNvbnN0IGRlc2NyaWJlID0gc3VpdGVcbmV4cG9ydCBjb25zdCBpdCA9IHRlc3RcblxuLy8gaW1wbGVtZW50YXRpb25zXG5leHBvcnQgY29uc3QgZGVmYXVsdFN1aXRlID0gc3VpdGUoJycpXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNvbnRleHQoKSB7XG4gIGNvbnRleHQudGFza3MubGVuZ3RoID0gMFxuICBkZWZhdWx0U3VpdGUuY2xlYXIoKVxuICBjb250ZXh0LmN1cnJlbnRTdWl0ZSA9IGRlZmF1bHRTdWl0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFN1aXRlKCkge1xuICByZXR1cm4gY29udGV4dC5jdXJyZW50U3VpdGUgfHwgZGVmYXVsdFN1aXRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWl0ZUhvb2tzKCkge1xuICByZXR1cm4ge1xuICAgIGJlZm9yZUFsbDogW10sXG4gICAgYWZ0ZXJBbGw6IFtdLFxuICAgIGJlZm9yZUVhY2g6IFtdLFxuICAgIGFmdGVyRWFjaDogW10sXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3VpdGVDb2xsZWN0b3IobmFtZTogc3RyaW5nLCBmYWN0b3J5OiBUZXN0RmFjdG9yeSA9ICgpID0+IHsgfSwgbW9kZTogUnVuTW9kZSwgY29uY3VycmVudD86IGJvb2xlYW4pIHtcbiAgY29uc3QgdGFza3M6IChUZXN0IHwgU3VpdGUgfCBTdWl0ZUNvbGxlY3RvcilbXSA9IFtdXG4gIGNvbnN0IGZhY3RvcnlRdWV1ZTogKFRlc3QgfCBTdWl0ZSB8IFN1aXRlQ29sbGVjdG9yKVtdID0gW11cblxuICBsZXQgc3VpdGU6IFN1aXRlXG5cbiAgaW5pdFN1aXRlKClcblxuICBjb25zdCB0ZXN0ID0gY3JlYXRlQ2hhaW5hYmxlKFxuICAgIFsnY29uY3VycmVudCcsICdza2lwJywgJ29ubHknLCAndG9kbycsICdmYWlscyddLFxuICAgIGZ1bmN0aW9uKG5hbWU6IHN0cmluZywgZm4/OiBUZXN0RnVuY3Rpb24sIHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLm9ubHkgPyAnb25seScgOiB0aGlzLnNraXAgPyAnc2tpcCcgOiB0aGlzLnRvZG8gPyAndG9kbycgOiAncnVuJ1xuXG4gICAgICBjb25zdCB0ZXN0OiBUZXN0ID0ge1xuICAgICAgICBpZDogJycsXG4gICAgICAgIHR5cGU6ICd0ZXN0JyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgc3VpdGU6IHVuZGVmaW5lZCEsXG4gICAgICAgIGZhaWxzOiB0aGlzLmZhaWxzLFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29uY3VycmVudCB8fCBjb25jdXJyZW50KVxuICAgICAgICB0ZXN0LmNvbmN1cnJlbnQgPSB0cnVlXG5cbiAgICAgIHNldEZuKHRlc3QsIG5vcm1hbGl6ZVRlc3QoZm4gfHwgbm9vcCwgdGltZW91dCkpXG4gICAgICB0YXNrcy5wdXNoKHRlc3QpXG4gICAgfSxcbiAgKVxuXG4gIGNvbnN0IGNvbGxlY3RvcjogU3VpdGVDb2xsZWN0b3IgPSB7XG4gICAgdHlwZTogJ2NvbGxlY3RvcicsXG4gICAgbmFtZSxcbiAgICBtb2RlLFxuICAgIHRlc3QsXG4gICAgdGFza3MsXG4gICAgY29sbGVjdCxcbiAgICBjbGVhcixcbiAgICBvbjogYWRkSG9vayxcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEhvb2s8VCBleHRlbmRzIGtleW9mIFN1aXRlSG9va3M+KG5hbWU6IFQsIC4uLmZuOiBTdWl0ZUhvb2tzW1RdKSB7XG4gICAgZ2V0SG9va3Moc3VpdGUpW25hbWVdLnB1c2goLi4uZm4gYXMgYW55KVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdFN1aXRlKCkge1xuICAgIHN1aXRlID0ge1xuICAgICAgaWQ6ICcnLFxuICAgICAgdHlwZTogJ3N1aXRlJyxcbiAgICAgIG5hbWUsXG4gICAgICBtb2RlLFxuICAgICAgdGFza3M6IFtdLFxuICAgIH1cbiAgICBzZXRIb29rcyhzdWl0ZSwgY3JlYXRlU3VpdGVIb29rcygpKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGFza3MubGVuZ3RoID0gMFxuICAgIGZhY3RvcnlRdWV1ZS5sZW5ndGggPSAwXG4gICAgaW5pdFN1aXRlKClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3QoZmlsZT86IEZpbGUpIHtcbiAgICBmYWN0b3J5UXVldWUubGVuZ3RoID0gMFxuICAgIGlmIChmYWN0b3J5KVxuICAgICAgYXdhaXQgcnVuV2l0aFN1aXRlKGNvbGxlY3RvciwgKCkgPT4gZmFjdG9yeSh0ZXN0KSlcblxuICAgIGNvbnN0IGFsbENoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBbLi4uZmFjdG9yeVF1ZXVlLCAuLi50YXNrc11cbiAgICAgICAgLm1hcChpID0+IGkudHlwZSA9PT0gJ2NvbGxlY3RvcicgPyBpLmNvbGxlY3QoZmlsZSkgOiBpKSxcbiAgICApXG5cbiAgICBzdWl0ZS5maWxlID0gZmlsZVxuICAgIHN1aXRlLnRhc2tzID0gYWxsQ2hpbGRyZW5cblxuICAgIGFsbENoaWxkcmVuLmZvckVhY2goKHRhc2spID0+IHtcbiAgICAgIHRhc2suc3VpdGUgPSBzdWl0ZVxuICAgICAgaWYgKGZpbGUpXG4gICAgICAgIHRhc2suZmlsZSA9IGZpbGVcbiAgICB9KVxuXG4gICAgcmV0dXJuIHN1aXRlXG4gIH1cblxuICBjb2xsZWN0VGFzayhjb2xsZWN0b3IpXG5cbiAgcmV0dXJuIGNvbGxlY3RvclxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdWl0ZSgpIHtcbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZShcbiAgICBbJ2NvbmN1cnJlbnQnLCAnc2tpcCcsICdvbmx5JywgJ3RvZG8nXSxcbiAgICBmdW5jdGlvbihuYW1lOiBzdHJpbmcsIGZhY3Rvcnk/OiBUZXN0RmFjdG9yeSkge1xuICAgICAgY29uc3QgbW9kZSA9IHRoaXMub25seSA/ICdvbmx5JyA6IHRoaXMuc2tpcCA/ICdza2lwJyA6IHRoaXMudG9kbyA/ICd0b2RvJyA6ICdydW4nXG4gICAgICByZXR1cm4gY3JlYXRlU3VpdGVDb2xsZWN0b3IobmFtZSwgZmFjdG9yeSwgbW9kZSwgdGhpcy5jb25jdXJyZW50KVxuICAgIH0sXG4gIClcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQU5TSV9CQUNLR1JPVU5EX09GRlNFVCA9IDEwO1xuXG5jb25zdCB3cmFwQW5zaTI1NiA9IChvZmZzZXQgPSAwKSA9PiBjb2RlID0+IGBcXHUwMDFCWyR7MzggKyBvZmZzZXR9OzU7JHtjb2RlfW1gO1xuXG5jb25zdCB3cmFwQW5zaTE2bSA9IChvZmZzZXQgPSAwKSA9PiAocmVkLCBncmVlbiwgYmx1ZSkgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07Mjske3JlZH07JHtncmVlbn07JHtibHVlfW1gO1xuXG5mdW5jdGlvbiBhc3NlbWJsZVN0eWxlcygpIHtcblx0Y29uc3QgY29kZXMgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRtb2RpZmllcjoge1xuXHRcdFx0cmVzZXQ6IFswLCAwXSxcblx0XHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRcdGJvbGQ6IFsxLCAyMl0sXG5cdFx0XHRkaW06IFsyLCAyMl0sXG5cdFx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0XHR1bmRlcmxpbmU6IFs0LCAyNF0sXG5cdFx0XHRvdmVybGluZTogWzUzLCA1NV0sXG5cdFx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdFx0aGlkZGVuOiBbOCwgMjhdLFxuXHRcdFx0c3RyaWtldGhyb3VnaDogWzksIDI5XVxuXHRcdH0sXG5cdFx0Y29sb3I6IHtcblx0XHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRcdHJlZDogWzMxLCAzOV0sXG5cdFx0XHRncmVlbjogWzMyLCAzOV0sXG5cdFx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdFx0Ymx1ZTogWzM0LCAzOV0sXG5cdFx0XHRtYWdlbnRhOiBbMzUsIDM5XSxcblx0XHRcdGN5YW46IFszNiwgMzldLFxuXHRcdFx0d2hpdGU6IFszNywgMzldLFxuXG5cdFx0XHQvLyBCcmlnaHQgY29sb3Jcblx0XHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRcdHJlZEJyaWdodDogWzkxLCAzOV0sXG5cdFx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0XHR5ZWxsb3dCcmlnaHQ6IFs5MywgMzldLFxuXHRcdFx0Ymx1ZUJyaWdodDogWzk0LCAzOV0sXG5cdFx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRcdGN5YW5CcmlnaHQ6IFs5NiwgMzldLFxuXHRcdFx0d2hpdGVCcmlnaHQ6IFs5NywgMzldXG5cdFx0fSxcblx0XHRiZ0NvbG9yOiB7XG5cdFx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRcdGJnUmVkOiBbNDEsIDQ5XSxcblx0XHRcdGJnR3JlZW46IFs0MiwgNDldLFxuXHRcdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdFx0YmdCbHVlOiBbNDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YTogWzQ1LCA0OV0sXG5cdFx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdFx0YmdXaGl0ZTogWzQ3LCA0OV0sXG5cblx0XHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRcdGJnR3JlZW5CcmlnaHQ6IFsxMDIsIDQ5XSxcblx0XHRcdGJnWWVsbG93QnJpZ2h0OiBbMTAzLCA0OV0sXG5cdFx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRcdGJnTWFnZW50YUJyaWdodDogWzEwNSwgNDldLFxuXHRcdFx0YmdDeWFuQnJpZ2h0OiBbMTA2LCA0OV0sXG5cdFx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV1cblx0XHR9XG5cdH07XG5cblx0Ly8gQWxpYXMgYnJpZ2h0IGJsYWNrIGFzIGdyYXkgKGFuZCBncmV5KVxuXHRzdHlsZXMuY29sb3IuZ3JheSA9IHN0eWxlcy5jb2xvci5ibGFja0JyaWdodDtcblx0c3R5bGVzLmJnQ29sb3IuYmdHcmF5ID0gc3R5bGVzLmJnQ29sb3IuYmdCbGFja0JyaWdodDtcblx0c3R5bGVzLmNvbG9yLmdyZXkgPSBzdHlsZXMuY29sb3IuYmxhY2tCcmlnaHQ7XG5cdHN0eWxlcy5iZ0NvbG9yLmJnR3JleSA9IHN0eWxlcy5iZ0NvbG9yLmJnQmxhY2tCcmlnaHQ7XG5cblx0Zm9yIChjb25zdCBbZ3JvdXBOYW1lLCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoc3R5bGVzKSkge1xuXHRcdGZvciAoY29uc3QgW3N0eWxlTmFtZSwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwKSkge1xuXHRcdFx0c3R5bGVzW3N0eWxlTmFtZV0gPSB7XG5cdFx0XHRcdG9wZW46IGBcXHUwMDFCWyR7c3R5bGVbMF19bWAsXG5cdFx0XHRcdGNsb3NlOiBgXFx1MDAxQlske3N0eWxlWzFdfW1gXG5cdFx0XHR9O1xuXG5cdFx0XHRncm91cFtzdHlsZU5hbWVdID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cblx0XHRcdGNvZGVzLnNldChzdHlsZVswXSwgc3R5bGVbMV0pO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsIGdyb3VwTmFtZSwge1xuXHRcdFx0dmFsdWU6IGdyb3VwLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0fSk7XG5cblx0c3R5bGVzLmNvbG9yLmNsb3NlID0gJ1xcdTAwMUJbMzltJztcblx0c3R5bGVzLmJnQ29sb3IuY2xvc2UgPSAnXFx1MDAxQls0OW0nO1xuXG5cdHN0eWxlcy5jb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bSgpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IChyZWQsIGdyZWVuLCBibHVlKSA9PiB7XG5cdFx0XHRcdC8vIFdlIHVzZSB0aGUgZXh0ZW5kZWQgZ3JleXNjYWxlIHBhbGV0dGUgaGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mXG5cdFx0XHRcdC8vIGJsYWNrIGFuZCB3aGl0ZS4gbm9ybWFsIHBhbGV0dGUgb25seSBoYXMgNCBncmV5c2NhbGUgc2hhZGVzLlxuXHRcdFx0XHRpZiAocmVkID09PSBncmVlbiAmJiBncmVlbiA9PT0gYmx1ZSkge1xuXHRcdFx0XHRcdGlmIChyZWQgPCA4KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMTY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHJlZCA+IDI0OCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDIzMTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoKHJlZCAtIDgpIC8gMjQ3KSAqIDI0KSArIDIzMjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAxNiArXG5cdFx0XHRcdFx0KDM2ICogTWF0aC5yb3VuZChyZWQgLyAyNTUgKiA1KSkgK1xuXHRcdFx0XHRcdCg2ICogTWF0aC5yb3VuZChncmVlbiAvIDI1NSAqIDUpKSArXG5cdFx0XHRcdFx0TWF0aC5yb3VuZChibHVlIC8gMjU1ICogNSk7XG5cdFx0XHR9LFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9LFxuXHRcdGhleFRvUmdiOiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0Y2hlcyA9IC8oPzxjb2xvclN0cmluZz5bYS1mXFxkXXs2fXxbYS1mXFxkXXszfSkvaS5leGVjKGhleC50b1N0cmluZygxNikpO1xuXHRcdFx0XHRpZiAoIW1hdGNoZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gWzAsIDAsIDBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHtjb2xvclN0cmluZ30gPSBtYXRjaGVzLmdyb3VwcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBjb2xvclN0cmluZy5zcGxpdCgnJykubWFwKGNoYXJhY3RlciA9PiBjaGFyYWN0ZXIgKyBjaGFyYWN0ZXIpLmpvaW4oJycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaW50ZWdlciA9IE51bWJlci5wYXJzZUludChjb2xvclN0cmluZywgMTYpO1xuXG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0KGludGVnZXIgPj4gMTYpICYgMHhGRixcblx0XHRcdFx0XHQoaW50ZWdlciA+PiA4KSAmIDB4RkYsXG5cdFx0XHRcdFx0aW50ZWdlciAmIDB4RkZcblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZVxuXHRcdH0sXG5cdFx0aGV4VG9BbnNpMjU2OiB7XG5cdFx0XHR2YWx1ZTogaGV4ID0+IHN0eWxlcy5yZ2JUb0Fuc2kyNTYoLi4uc3R5bGVzLmhleFRvUmdiKGhleCkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2Vcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbi8vIE1ha2UgdGhlIGV4cG9ydCBpbW11dGFibGVcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRnZXQ6IGFzc2VtYmxlU3R5bGVzXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByaW50SXRlcmF0b3JFbnRyaWVzID0gcHJpbnRJdGVyYXRvckVudHJpZXM7XG5leHBvcnRzLnByaW50SXRlcmF0b3JWYWx1ZXMgPSBwcmludEl0ZXJhdG9yVmFsdWVzO1xuZXhwb3J0cy5wcmludExpc3RJdGVtcyA9IHByaW50TGlzdEl0ZW1zO1xuZXhwb3J0cy5wcmludE9iamVjdFByb3BlcnRpZXMgPSBwcmludE9iamVjdFByb3BlcnRpZXM7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5jb25zdCBnZXRLZXlzT2ZFbnVtZXJhYmxlUHJvcGVydGllcyA9IChvYmplY3QsIGNvbXBhcmVLZXlzKSA9PiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpLnNvcnQoY29tcGFyZUtleXMpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpLmZvckVhY2goc3ltYm9sID0+IHtcbiAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltYm9sKS5lbnVtZXJhYmxlKSB7XG4gICAgICAgIGtleXMucHVzaChzeW1ib2wpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59O1xuLyoqXG4gKiBSZXR1cm4gZW50cmllcyAoZm9yIGV4YW1wbGUsIG9mIGEgbWFwKVxuICogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4gKiB3aXRob3V0IHN1cnJvdW5kaW5nIHB1bmN0dWF0aW9uIChmb3IgZXhhbXBsZSwgYnJhY2VzKVxuICovXG5cbmZ1bmN0aW9uIHByaW50SXRlcmF0b3JFbnRyaWVzKFxuICBpdGVyYXRvcixcbiAgY29uZmlnLFxuICBpbmRlbnRhdGlvbixcbiAgZGVwdGgsXG4gIHJlZnMsXG4gIHByaW50ZXIsIC8vIFRvbyBiYWQsIHNvIHNhZCB0aGF0IHNlcGFyYXRvciBmb3IgRUNNQVNjcmlwdCBNYXAgaGFzIGJlZW4gJyA9PiAnXG4gIC8vIFdoYXQgYSBkaXN0cmFjdGluZyBkaWZmIGlmIHlvdSBjaGFuZ2UgYSBkYXRhIHN0cnVjdHVyZSB0by9mcm9tXG4gIC8vIEVDTUFTY3JpcHQgT2JqZWN0IG9yIEltbXV0YWJsZS5NYXAvT3JkZXJlZE1hcCB3aGljaCB1c2UgdGhlIGRlZmF1bHQuXG4gIHNlcGFyYXRvciA9ICc6ICdcbikge1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGxldCBjdXJyZW50ID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIGlmICghY3VycmVudC5kb25lKSB7XG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXI7XG4gICAgY29uc3QgaW5kZW50YXRpb25OZXh0ID0gaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50O1xuXG4gICAgd2hpbGUgKCFjdXJyZW50LmRvbmUpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwcmludGVyKFxuICAgICAgICBjdXJyZW50LnZhbHVlWzBdLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZGVudGF0aW9uTmV4dCxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIHJlZnNcbiAgICAgICk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByaW50ZXIoXG4gICAgICAgIGN1cnJlbnQudmFsdWVbMV0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb25OZXh0LFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgcmVmc1xuICAgICAgKTtcbiAgICAgIHJlc3VsdCArPSBpbmRlbnRhdGlvbk5leHQgKyBuYW1lICsgc2VwYXJhdG9yICsgdmFsdWU7XG4gICAgICBjdXJyZW50ID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICBpZiAoIWN1cnJlbnQuZG9uZSkge1xuICAgICAgICByZXN1bHQgKz0gJywnICsgY29uZmlnLnNwYWNpbmdJbm5lcjtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbmZpZy5taW4pIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlciArIGluZGVudGF0aW9uO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJuIHZhbHVlcyAoZm9yIGV4YW1wbGUsIG9mIGEgc2V0KVxuICogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4gKiB3aXRob3V0IHN1cnJvdW5kaW5nIHB1bmN0dWF0aW9uIChicmFjZXMgb3IgYnJhY2tldHMpXG4gKi9cblxuZnVuY3Rpb24gcHJpbnRJdGVyYXRvclZhbHVlcyhcbiAgaXRlcmF0b3IsXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb24sXG4gIGRlcHRoLFxuICByZWZzLFxuICBwcmludGVyXG4pIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgY3VycmVudCA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICBpZiAoIWN1cnJlbnQuZG9uZSkge1xuICAgIHJlc3VsdCArPSBjb25maWcuc3BhY2luZ091dGVyO1xuICAgIGNvbnN0IGluZGVudGF0aW9uTmV4dCA9IGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudDtcblxuICAgIHdoaWxlICghY3VycmVudC5kb25lKSB7XG4gICAgICByZXN1bHQgKz1cbiAgICAgICAgaW5kZW50YXRpb25OZXh0ICtcbiAgICAgICAgcHJpbnRlcihjdXJyZW50LnZhbHVlLCBjb25maWcsIGluZGVudGF0aW9uTmV4dCwgZGVwdGgsIHJlZnMpO1xuICAgICAgY3VycmVudCA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgaWYgKCFjdXJyZW50LmRvbmUpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJyArIGNvbmZpZy5zcGFjaW5nSW5uZXI7XG4gICAgICB9IGVsc2UgaWYgKCFjb25maWcubWluKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXIgKyBpbmRlbnRhdGlvbjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldHVybiBpdGVtcyAoZm9yIGV4YW1wbGUsIG9mIGFuIGFycmF5KVxuICogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4gKiB3aXRob3V0IHN1cnJvdW5kaW5nIHB1bmN0dWF0aW9uIChmb3IgZXhhbXBsZSwgYnJhY2tldHMpXG4gKiovXG5cbmZ1bmN0aW9uIHByaW50TGlzdEl0ZW1zKGxpc3QsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG4gIGxldCByZXN1bHQgPSAnJztcblxuICBpZiAobGlzdC5sZW5ndGgpIHtcbiAgICByZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlcjtcbiAgICBjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdCArPSBpbmRlbnRhdGlvbk5leHQ7XG5cbiAgICAgIGlmIChpIGluIGxpc3QpIHtcbiAgICAgICAgcmVzdWx0ICs9IHByaW50ZXIobGlzdFtpXSwgY29uZmlnLCBpbmRlbnRhdGlvbk5leHQsIGRlcHRoLCByZWZzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGkgPCBsaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJyArIGNvbmZpZy5zcGFjaW5nSW5uZXI7XG4gICAgICB9IGVsc2UgaWYgKCFjb25maWcubWluKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXIgKyBpbmRlbnRhdGlvbjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFJldHVybiBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdFxuICogd2l0aCBzcGFjaW5nLCBpbmRlbnRhdGlvbiwgYW5kIGNvbW1hXG4gKiB3aXRob3V0IHN1cnJvdW5kaW5nIHB1bmN0dWF0aW9uIChmb3IgZXhhbXBsZSwgYnJhY2VzKVxuICovXG5cbmZ1bmN0aW9uIHByaW50T2JqZWN0UHJvcGVydGllcyh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSB7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgY29uc3Qga2V5cyA9IGdldEtleXNPZkVudW1lcmFibGVQcm9wZXJ0aWVzKHZhbCwgY29uZmlnLmNvbXBhcmVLZXlzKTtcblxuICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICByZXN1bHQgKz0gY29uZmlnLnNwYWNpbmdPdXRlcjtcbiAgICBjb25zdCBpbmRlbnRhdGlvbk5leHQgPSBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBjb25zdCBuYW1lID0gcHJpbnRlcihrZXksIGNvbmZpZywgaW5kZW50YXRpb25OZXh0LCBkZXB0aCwgcmVmcyk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByaW50ZXIodmFsW2tleV0sIGNvbmZpZywgaW5kZW50YXRpb25OZXh0LCBkZXB0aCwgcmVmcyk7XG4gICAgICByZXN1bHQgKz0gaW5kZW50YXRpb25OZXh0ICsgbmFtZSArICc6ICcgKyB2YWx1ZTtcblxuICAgICAgaWYgKGkgPCBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcsJyArIGNvbmZpZy5zcGFjaW5nSW5uZXI7XG4gICAgICB9IGVsc2UgaWYgKCFjb25maWcubWluKSB7XG4gICAgICAgIHJlc3VsdCArPSAnLCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ICs9IGNvbmZpZy5zcGFjaW5nT3V0ZXIgKyBpbmRlbnRhdGlvbjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbnMgPSByZXF1aXJlKCcuLi9jb2xsZWN0aW9ucycpO1xuXG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGdsb2JhbDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gIH1cbn0pKCk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxbJ2plc3Qtc3ltYm9sLWRvLW5vdC10b3VjaCddIHx8IGdsb2JhbC5TeW1ib2w7XG5jb25zdCBhc3ltbWV0cmljTWF0Y2hlciA9XG4gIHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvclxuICAgID8gU3ltYm9sLmZvcignamVzdC5hc3ltbWV0cmljTWF0Y2hlcicpXG4gICAgOiAweDEzNTdhNTtcbmNvbnN0IFNQQUNFID0gJyAnO1xuXG5jb25zdCBzZXJpYWxpemUgPSAodmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikgPT4ge1xuICBjb25zdCBzdHJpbmdlZFZhbHVlID0gdmFsLnRvU3RyaW5nKCk7XG5cbiAgaWYgKFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdBcnJheUNvbnRhaW5pbmcnIHx8XG4gICAgc3RyaW5nZWRWYWx1ZSA9PT0gJ0FycmF5Tm90Q29udGFpbmluZydcbiAgKSB7XG4gICAgaWYgKCsrZGVwdGggPiBjb25maWcubWF4RGVwdGgpIHtcbiAgICAgIHJldHVybiAnWycgKyBzdHJpbmdlZFZhbHVlICsgJ10nO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBzdHJpbmdlZFZhbHVlICtcbiAgICAgIFNQQUNFICtcbiAgICAgICdbJyArXG4gICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50TGlzdEl0ZW1zKShcbiAgICAgICAgdmFsLnNhbXBsZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIHJlZnMsXG4gICAgICAgIHByaW50ZXJcbiAgICAgICkgK1xuICAgICAgJ10nXG4gICAgKTtcbiAgfVxuXG4gIGlmIChcbiAgICBzdHJpbmdlZFZhbHVlID09PSAnT2JqZWN0Q29udGFpbmluZycgfHxcbiAgICBzdHJpbmdlZFZhbHVlID09PSAnT2JqZWN0Tm90Q29udGFpbmluZydcbiAgKSB7XG4gICAgaWYgKCsrZGVwdGggPiBjb25maWcubWF4RGVwdGgpIHtcbiAgICAgIHJldHVybiAnWycgKyBzdHJpbmdlZFZhbHVlICsgJ10nO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBzdHJpbmdlZFZhbHVlICtcbiAgICAgIFNQQUNFICtcbiAgICAgICd7JyArXG4gICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50T2JqZWN0UHJvcGVydGllcykoXG4gICAgICAgIHZhbC5zYW1wbGUsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgIGRlcHRoLFxuICAgICAgICByZWZzLFxuICAgICAgICBwcmludGVyXG4gICAgICApICtcbiAgICAgICd9J1xuICAgICk7XG4gIH1cblxuICBpZiAoXG4gICAgc3RyaW5nZWRWYWx1ZSA9PT0gJ1N0cmluZ01hdGNoaW5nJyB8fFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdTdHJpbmdOb3RNYXRjaGluZydcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN0cmluZ2VkVmFsdWUgK1xuICAgICAgU1BBQ0UgK1xuICAgICAgcHJpbnRlcih2YWwuc2FtcGxlLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcylcbiAgICApO1xuICB9XG5cbiAgaWYgKFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdTdHJpbmdDb250YWluaW5nJyB8fFxuICAgIHN0cmluZ2VkVmFsdWUgPT09ICdTdHJpbmdOb3RDb250YWluaW5nJ1xuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3RyaW5nZWRWYWx1ZSArXG4gICAgICBTUEFDRSArXG4gICAgICBwcmludGVyKHZhbC5zYW1wbGUsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsLnRvQXN5bW1ldHJpY01hdGNoZXIoKTtcbn07XG5cbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuXG5jb25zdCB0ZXN0ID0gdmFsID0+IHZhbCAmJiB2YWwuJCR0eXBlb2YgPT09IGFzeW1tZXRyaWNNYXRjaGVyO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoe29ubHlGaXJzdCA9IGZhbHNlfSA9IHt9KSA9PiB7XG5cdGNvbnN0IHBhdHRlcm4gPSBbXG5cdFx0J1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuXHRcdCcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW50cXJ5PT48fl0pKSdcblx0XS5qb2luKCd8Jyk7XG5cblx0cmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwgb25seUZpcnN0ID8gdW5kZWZpbmVkIDogJ2cnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfYW5zaVJlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCdhbnNpLXJlZ2V4JykpO1xuXG52YXIgX2Fuc2lTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJ2Fuc2ktc3R5bGVzJykpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge2RlZmF1bHQ6IG9ian07XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmNvbnN0IHRvSHVtYW5SZWFkYWJsZUFuc2kgPSB0ZXh0ID0+XG4gIHRleHQucmVwbGFjZSgoMCwgX2Fuc2lSZWdleC5kZWZhdWx0KSgpLCBtYXRjaCA9PiB7XG4gICAgc3dpdGNoIChtYXRjaCkge1xuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LnJlZC5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5ncmVlbi5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5jeWFuLmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmdyYXkuY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQud2hpdGUuY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQueWVsbG93LmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmJnUmVkLmNsb3NlOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LmJnR3JlZW4uY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuYmdZZWxsb3cuY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuaW52ZXJzZS5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5kaW0uY2xvc2U6XG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuYm9sZC5jbG9zZTpcbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5yZXNldC5vcGVuOlxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LnJlc2V0LmNsb3NlOlxuICAgICAgICByZXR1cm4gJzwvPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5yZWQub3BlbjpcbiAgICAgICAgcmV0dXJuICc8cmVkPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5ncmVlbi5vcGVuOlxuICAgICAgICByZXR1cm4gJzxncmVlbj4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuY3lhbi5vcGVuOlxuICAgICAgICByZXR1cm4gJzxjeWFuPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5ncmF5Lm9wZW46XG4gICAgICAgIHJldHVybiAnPGdyYXk+JztcblxuICAgICAgY2FzZSBfYW5zaVN0eWxlcy5kZWZhdWx0LndoaXRlLm9wZW46XG4gICAgICAgIHJldHVybiAnPHdoaXRlPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC55ZWxsb3cub3BlbjpcbiAgICAgICAgcmV0dXJuICc8eWVsbG93Pic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5iZ1JlZC5vcGVuOlxuICAgICAgICByZXR1cm4gJzxiZ1JlZD4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuYmdHcmVlbi5vcGVuOlxuICAgICAgICByZXR1cm4gJzxiZ0dyZWVuPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5iZ1llbGxvdy5vcGVuOlxuICAgICAgICByZXR1cm4gJzxiZ1llbGxvdz4nO1xuXG4gICAgICBjYXNlIF9hbnNpU3R5bGVzLmRlZmF1bHQuaW52ZXJzZS5vcGVuOlxuICAgICAgICByZXR1cm4gJzxpbnZlcnNlPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5kaW0ub3BlbjpcbiAgICAgICAgcmV0dXJuICc8ZGltPic7XG5cbiAgICAgIGNhc2UgX2Fuc2lTdHlsZXMuZGVmYXVsdC5ib2xkLm9wZW46XG4gICAgICAgIHJldHVybiAnPGJvbGQ+JztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSk7XG5cbmNvbnN0IHRlc3QgPSB2YWwgPT5cbiAgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgISF2YWwubWF0Y2goKDAsIF9hbnNpUmVnZXguZGVmYXVsdCkoKSk7XG5cbmV4cG9ydHMudGVzdCA9IHRlc3Q7XG5cbmNvbnN0IHNlcmlhbGl6ZSA9ICh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKSA9PlxuICBwcmludGVyKHRvSHVtYW5SZWFkYWJsZUFuc2kodmFsKSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMpO1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcbmNvbnN0IHBsdWdpbiA9IHtcbiAgc2VyaWFsaXplLFxuICB0ZXN0XG59O1xudmFyIF9kZWZhdWx0ID0gcGx1Z2luO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbnMgPSByZXF1aXJlKCcuLi9jb2xsZWN0aW9ucycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGxvY2FsL2Jhbi10eXBlcy1ldmVudHVhbGx5ICovXG5jb25zdCBTUEFDRSA9ICcgJztcbmNvbnN0IE9CSkVDVF9OQU1FUyA9IFsnRE9NU3RyaW5nTWFwJywgJ05hbWVkTm9kZU1hcCddO1xuY29uc3QgQVJSQVlfUkVHRVhQID0gL14oSFRNTFxcdypDb2xsZWN0aW9ufE5vZGVMaXN0KSQvO1xuXG5jb25zdCB0ZXN0TmFtZSA9IG5hbWUgPT5cbiAgT0JKRUNUX05BTUVTLmluZGV4T2YobmFtZSkgIT09IC0xIHx8IEFSUkFZX1JFR0VYUC50ZXN0KG5hbWUpO1xuXG5jb25zdCB0ZXN0ID0gdmFsID0+XG4gIHZhbCAmJlxuICB2YWwuY29uc3RydWN0b3IgJiZcbiAgISF2YWwuY29uc3RydWN0b3IubmFtZSAmJlxuICB0ZXN0TmFtZSh2YWwuY29uc3RydWN0b3IubmFtZSk7XG5cbmV4cG9ydHMudGVzdCA9IHRlc3Q7XG5cbmNvbnN0IGlzTmFtZWROb2RlTWFwID0gY29sbGVjdGlvbiA9PlxuICBjb2xsZWN0aW9uLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdOYW1lZE5vZGVNYXAnO1xuXG5jb25zdCBzZXJpYWxpemUgPSAoY29sbGVjdGlvbiwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgY29uc3QgbmFtZSA9IGNvbGxlY3Rpb24uY29uc3RydWN0b3IubmFtZTtcblxuICBpZiAoKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aCkge1xuICAgIHJldHVybiAnWycgKyBuYW1lICsgJ10nO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAoY29uZmlnLm1pbiA/ICcnIDogbmFtZSArIFNQQUNFKSArXG4gICAgKE9CSkVDVF9OQU1FUy5pbmRleE9mKG5hbWUpICE9PSAtMVxuICAgICAgPyAneycgK1xuICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50T2JqZWN0UHJvcGVydGllcykoXG4gICAgICAgICAgaXNOYW1lZE5vZGVNYXAoY29sbGVjdGlvbilcbiAgICAgICAgICAgID8gQXJyYXkuZnJvbShjb2xsZWN0aW9uKS5yZWR1Y2UoKHByb3BzLCBhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICBwcm9wc1thdHRyaWJ1dGUubmFtZV0gPSBhdHRyaWJ1dGUudmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICAgICAgICB9LCB7fSlcbiAgICAgICAgICAgIDogey4uLmNvbGxlY3Rpb259LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICByZWZzLFxuICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgKSArXG4gICAgICAgICd9J1xuICAgICAgOiAnWycgK1xuICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50TGlzdEl0ZW1zKShcbiAgICAgICAgICBBcnJheS5mcm9tKGNvbGxlY3Rpb24pLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICByZWZzLFxuICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgKSArXG4gICAgICAgICddJylcbiAgKTtcbn07XG5cbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBlc2NhcGVIVE1MO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5mdW5jdGlvbiBlc2NhcGVIVE1MKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludFRleHQgPVxuICBleHBvcnRzLnByaW50UHJvcHMgPVxuICBleHBvcnRzLnByaW50RWxlbWVudEFzTGVhZiA9XG4gIGV4cG9ydHMucHJpbnRFbGVtZW50ID1cbiAgZXhwb3J0cy5wcmludENvbW1lbnQgPVxuICBleHBvcnRzLnByaW50Q2hpbGRyZW4gPVxuICAgIHZvaWQgMDtcblxudmFyIF9lc2NhcGVIVE1MID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL2VzY2FwZUhUTUwnKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ZGVmYXVsdDogb2JqfTtcbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLy8gUmV0dXJuIGVtcHR5IHN0cmluZyBpZiBrZXlzIGlzIGVtcHR5LlxuY29uc3QgcHJpbnRQcm9wcyA9IChrZXlzLCBwcm9wcywgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgY29uc3QgaW5kZW50YXRpb25OZXh0ID0gaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50O1xuICBjb25zdCBjb2xvcnMgPSBjb25maWcuY29sb3JzO1xuICByZXR1cm4ga2V5c1xuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNba2V5XTtcbiAgICAgIGxldCBwcmludGVkID0gcHJpbnRlcih2YWx1ZSwgY29uZmlnLCBpbmRlbnRhdGlvbk5leHQsIGRlcHRoLCByZWZzKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHByaW50ZWQuaW5kZXhPZignXFxuJykgIT09IC0xKSB7XG4gICAgICAgICAgcHJpbnRlZCA9XG4gICAgICAgICAgICBjb25maWcuc3BhY2luZ091dGVyICtcbiAgICAgICAgICAgIGluZGVudGF0aW9uTmV4dCArXG4gICAgICAgICAgICBwcmludGVkICtcbiAgICAgICAgICAgIGNvbmZpZy5zcGFjaW5nT3V0ZXIgK1xuICAgICAgICAgICAgaW5kZW50YXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBwcmludGVkID0gJ3snICsgcHJpbnRlZCArICd9JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgY29uZmlnLnNwYWNpbmdJbm5lciArXG4gICAgICAgIGluZGVudGF0aW9uICtcbiAgICAgICAgY29sb3JzLnByb3Aub3BlbiArXG4gICAgICAgIGtleSArXG4gICAgICAgIGNvbG9ycy5wcm9wLmNsb3NlICtcbiAgICAgICAgJz0nICtcbiAgICAgICAgY29sb3JzLnZhbHVlLm9wZW4gK1xuICAgICAgICBwcmludGVkICtcbiAgICAgICAgY29sb3JzLnZhbHVlLmNsb3NlXG4gICAgICApO1xuICAgIH0pXG4gICAgLmpvaW4oJycpO1xufTsgLy8gUmV0dXJuIGVtcHR5IHN0cmluZyBpZiBjaGlsZHJlbiBpcyBlbXB0eS5cblxuZXhwb3J0cy5wcmludFByb3BzID0gcHJpbnRQcm9wcztcblxuY29uc3QgcHJpbnRDaGlsZHJlbiA9IChjaGlsZHJlbiwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+XG4gIGNoaWxkcmVuXG4gICAgLm1hcChcbiAgICAgIGNoaWxkID0+XG4gICAgICAgIGNvbmZpZy5zcGFjaW5nT3V0ZXIgK1xuICAgICAgICBpbmRlbnRhdGlvbiArXG4gICAgICAgICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBwcmludFRleHQoY2hpbGQsIGNvbmZpZylcbiAgICAgICAgICA6IHByaW50ZXIoY2hpbGQsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKSlcbiAgICApXG4gICAgLmpvaW4oJycpO1xuXG5leHBvcnRzLnByaW50Q2hpbGRyZW4gPSBwcmludENoaWxkcmVuO1xuXG5jb25zdCBwcmludFRleHQgPSAodGV4dCwgY29uZmlnKSA9PiB7XG4gIGNvbnN0IGNvbnRlbnRDb2xvciA9IGNvbmZpZy5jb2xvcnMuY29udGVudDtcbiAgcmV0dXJuIChcbiAgICBjb250ZW50Q29sb3Iub3BlbiArICgwLCBfZXNjYXBlSFRNTC5kZWZhdWx0KSh0ZXh0KSArIGNvbnRlbnRDb2xvci5jbG9zZVxuICApO1xufTtcblxuZXhwb3J0cy5wcmludFRleHQgPSBwcmludFRleHQ7XG5cbmNvbnN0IHByaW50Q29tbWVudCA9IChjb21tZW50LCBjb25maWcpID0+IHtcbiAgY29uc3QgY29tbWVudENvbG9yID0gY29uZmlnLmNvbG9ycy5jb21tZW50O1xuICByZXR1cm4gKFxuICAgIGNvbW1lbnRDb2xvci5vcGVuICtcbiAgICAnPCEtLScgK1xuICAgICgwLCBfZXNjYXBlSFRNTC5kZWZhdWx0KShjb21tZW50KSArXG4gICAgJy0tPicgK1xuICAgIGNvbW1lbnRDb2xvci5jbG9zZVxuICApO1xufTsgLy8gU2VwYXJhdGUgdGhlIGZ1bmN0aW9ucyB0byBmb3JtYXQgcHJvcHMsIGNoaWxkcmVuLCBhbmQgZWxlbWVudCxcbi8vIHNvIGEgcGx1Z2luIGNvdWxkIG92ZXJyaWRlIGEgcGFydGljdWxhciBmdW5jdGlvbiwgaWYgbmVlZGVkLlxuLy8gVG9vIGJhZCwgc28gc2FkOiB0aGUgdHJhZGl0aW9uYWwgKGJ1dCB1bm5lY2Vzc2FyeSkgc3BhY2Vcbi8vIGluIGEgc2VsZi1jbG9zaW5nIHRhZ0NvbG9yIHJlcXVpcmVzIGEgc2Vjb25kIHRlc3Qgb2YgcHJpbnRlZFByb3BzLlxuXG5leHBvcnRzLnByaW50Q29tbWVudCA9IHByaW50Q29tbWVudDtcblxuY29uc3QgcHJpbnRFbGVtZW50ID0gKFxuICB0eXBlLFxuICBwcmludGVkUHJvcHMsXG4gIHByaW50ZWRDaGlsZHJlbixcbiAgY29uZmlnLFxuICBpbmRlbnRhdGlvblxuKSA9PiB7XG4gIGNvbnN0IHRhZ0NvbG9yID0gY29uZmlnLmNvbG9ycy50YWc7XG4gIHJldHVybiAoXG4gICAgdGFnQ29sb3Iub3BlbiArXG4gICAgJzwnICtcbiAgICB0eXBlICtcbiAgICAocHJpbnRlZFByb3BzICYmXG4gICAgICB0YWdDb2xvci5jbG9zZSArXG4gICAgICAgIHByaW50ZWRQcm9wcyArXG4gICAgICAgIGNvbmZpZy5zcGFjaW5nT3V0ZXIgK1xuICAgICAgICBpbmRlbnRhdGlvbiArXG4gICAgICAgIHRhZ0NvbG9yLm9wZW4pICtcbiAgICAocHJpbnRlZENoaWxkcmVuXG4gICAgICA/ICc+JyArXG4gICAgICAgIHRhZ0NvbG9yLmNsb3NlICtcbiAgICAgICAgcHJpbnRlZENoaWxkcmVuICtcbiAgICAgICAgY29uZmlnLnNwYWNpbmdPdXRlciArXG4gICAgICAgIGluZGVudGF0aW9uICtcbiAgICAgICAgdGFnQ29sb3Iub3BlbiArXG4gICAgICAgICc8LycgK1xuICAgICAgICB0eXBlXG4gICAgICA6IChwcmludGVkUHJvcHMgJiYgIWNvbmZpZy5taW4gPyAnJyA6ICcgJykgKyAnLycpICtcbiAgICAnPicgK1xuICAgIHRhZ0NvbG9yLmNsb3NlXG4gICk7XG59O1xuXG5leHBvcnRzLnByaW50RWxlbWVudCA9IHByaW50RWxlbWVudDtcblxuY29uc3QgcHJpbnRFbGVtZW50QXNMZWFmID0gKHR5cGUsIGNvbmZpZykgPT4ge1xuICBjb25zdCB0YWdDb2xvciA9IGNvbmZpZy5jb2xvcnMudGFnO1xuICByZXR1cm4gKFxuICAgIHRhZ0NvbG9yLm9wZW4gK1xuICAgICc8JyArXG4gICAgdHlwZSArXG4gICAgdGFnQ29sb3IuY2xvc2UgK1xuICAgICcg4oCmJyArXG4gICAgdGFnQ29sb3Iub3BlbiArXG4gICAgJyAvPicgK1xuICAgIHRhZ0NvbG9yLmNsb3NlXG4gICk7XG59O1xuXG5leHBvcnRzLnByaW50RWxlbWVudEFzTGVhZiA9IHByaW50RWxlbWVudEFzTGVhZjtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRlc3QgPSBleHBvcnRzLnNlcmlhbGl6ZSA9IGV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9tYXJrdXAgPSByZXF1aXJlKCcuL2xpYi9tYXJrdXAnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuY29uc3QgRUxFTUVOVF9OT0RFID0gMTtcbmNvbnN0IFRFWFRfTk9ERSA9IDM7XG5jb25zdCBDT01NRU5UX05PREUgPSA4O1xuY29uc3QgRlJBR01FTlRfTk9ERSA9IDExO1xuY29uc3QgRUxFTUVOVF9SRUdFWFAgPSAvXigoSFRNTHxTVkcpXFx3Kik/RWxlbWVudCQvO1xuXG5jb25zdCB0ZXN0SGFzQXR0cmlidXRlID0gdmFsID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbC5oYXNBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbicgJiYgdmFsLmhhc0F0dHJpYnV0ZSgnaXMnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCB0ZXN0Tm9kZSA9IHZhbCA9PiB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IHZhbC5jb25zdHJ1Y3Rvci5uYW1lO1xuICBjb25zdCB7bm9kZVR5cGUsIHRhZ05hbWV9ID0gdmFsO1xuICBjb25zdCBpc0N1c3RvbUVsZW1lbnQgPVxuICAgICh0eXBlb2YgdGFnTmFtZSA9PT0gJ3N0cmluZycgJiYgdGFnTmFtZS5pbmNsdWRlcygnLScpKSB8fFxuICAgIHRlc3RIYXNBdHRyaWJ1dGUodmFsKTtcbiAgcmV0dXJuIChcbiAgICAobm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJlxuICAgICAgKEVMRU1FTlRfUkVHRVhQLnRlc3QoY29uc3RydWN0b3JOYW1lKSB8fCBpc0N1c3RvbUVsZW1lbnQpKSB8fFxuICAgIChub2RlVHlwZSA9PT0gVEVYVF9OT0RFICYmIGNvbnN0cnVjdG9yTmFtZSA9PT0gJ1RleHQnKSB8fFxuICAgIChub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIGNvbnN0cnVjdG9yTmFtZSA9PT0gJ0NvbW1lbnQnKSB8fFxuICAgIChub2RlVHlwZSA9PT0gRlJBR01FTlRfTk9ERSAmJiBjb25zdHJ1Y3Rvck5hbWUgPT09ICdEb2N1bWVudEZyYWdtZW50JylcbiAgKTtcbn07XG5cbmNvbnN0IHRlc3QgPSB2YWwgPT4ge1xuICB2YXIgX3ZhbCRjb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gKFxuICAgICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB2b2lkIDBcbiAgICAgID8gdm9pZCAwXG4gICAgICA6IChfdmFsJGNvbnN0cnVjdG9yID0gdmFsLmNvbnN0cnVjdG9yKSA9PT0gbnVsbCB8fFxuICAgICAgICBfdmFsJGNvbnN0cnVjdG9yID09PSB2b2lkIDBcbiAgICAgID8gdm9pZCAwXG4gICAgICA6IF92YWwkY29uc3RydWN0b3IubmFtZSkgJiYgdGVzdE5vZGUodmFsKVxuICApO1xufTtcblxuZXhwb3J0cy50ZXN0ID0gdGVzdDtcblxuZnVuY3Rpb24gbm9kZUlzVGV4dChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIG5vZGVJc0NvbW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBub2RlSXNGcmFnbWVudChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBGUkFHTUVOVF9OT0RFO1xufVxuXG5jb25zdCBzZXJpYWxpemUgPSAobm9kZSwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgaWYgKG5vZGVJc1RleHQobm9kZSkpIHtcbiAgICByZXR1cm4gKDAsIF9tYXJrdXAucHJpbnRUZXh0KShub2RlLmRhdGEsIGNvbmZpZyk7XG4gIH1cblxuICBpZiAobm9kZUlzQ29tbWVudChub2RlKSkge1xuICAgIHJldHVybiAoMCwgX21hcmt1cC5wcmludENvbW1lbnQpKG5vZGUuZGF0YSwgY29uZmlnKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBub2RlSXNGcmFnbWVudChub2RlKVxuICAgID8gYERvY3VtZW50RnJhZ21lbnRgXG4gICAgOiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aCkge1xuICAgIHJldHVybiAoMCwgX21hcmt1cC5wcmludEVsZW1lbnRBc0xlYWYpKHR5cGUsIGNvbmZpZyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50KShcbiAgICB0eXBlLFxuICAgICgwLCBfbWFya3VwLnByaW50UHJvcHMpKFxuICAgICAgbm9kZUlzRnJhZ21lbnQobm9kZSlcbiAgICAgICAgPyBbXVxuICAgICAgICA6IEFycmF5LmZyb20obm9kZS5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgLm1hcChhdHRyID0+IGF0dHIubmFtZSlcbiAgICAgICAgICAgIC5zb3J0KCksXG4gICAgICBub2RlSXNGcmFnbWVudChub2RlKVxuICAgICAgICA/IHt9XG4gICAgICAgIDogQXJyYXkuZnJvbShub2RlLmF0dHJpYnV0ZXMpLnJlZHVjZSgocHJvcHMsIGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgcHJvcHNbYXR0cmlidXRlLm5hbWVdID0gYXR0cmlidXRlLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzO1xuICAgICAgICAgIH0sIHt9KSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCxcbiAgICAgIGRlcHRoLFxuICAgICAgcmVmcyxcbiAgICAgIHByaW50ZXJcbiAgICApLFxuICAgICgwLCBfbWFya3VwLnByaW50Q2hpbGRyZW4pKFxuICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobm9kZS5jaGlsZE5vZGVzIHx8IG5vZGUuY2hpbGRyZW4pLFxuICAgICAgY29uZmlnLFxuICAgICAgaW5kZW50YXRpb24gKyBjb25maWcuaW5kZW50LFxuICAgICAgZGVwdGgsXG4gICAgICByZWZzLFxuICAgICAgcHJpbnRlclxuICAgICksXG4gICAgY29uZmlnLFxuICAgIGluZGVudGF0aW9uXG4gICk7XG59O1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcbmNvbnN0IHBsdWdpbiA9IHtcbiAgc2VyaWFsaXplLFxuICB0ZXN0XG59O1xudmFyIF9kZWZhdWx0ID0gcGx1Z2luO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbnMgPSByZXF1aXJlKCcuLi9jb2xsZWN0aW9ucycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4vLyBTRU5USU5FTCBjb25zdGFudHMgYXJlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ltbXV0YWJsZS1qc1xuY29uc3QgSVNfSVRFUkFCTEVfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9JVEVSQUJMRV9fQEAnO1xuY29uc3QgSVNfTElTVF9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX0xJU1RfX0BAJztcbmNvbnN0IElTX0tFWUVEX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfS0VZRURfX0BAJztcbmNvbnN0IElTX01BUF9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX01BUF9fQEAnO1xuY29uc3QgSVNfT1JERVJFRF9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX09SREVSRURfX0BAJztcbmNvbnN0IElTX1JFQ09SRF9TRU5USU5FTCA9ICdAQF9fSU1NVVRBQkxFX1JFQ09SRF9fQEAnOyAvLyBpbW11dGFibGUgdjRcblxuY29uc3QgSVNfU0VRX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfU0VRX19AQCc7XG5jb25zdCBJU19TRVRfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9TRVRfX0BAJztcbmNvbnN0IElTX1NUQUNLX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfU1RBQ0tfX0BAJztcblxuY29uc3QgZ2V0SW1tdXRhYmxlTmFtZSA9IG5hbWUgPT4gJ0ltbXV0YWJsZS4nICsgbmFtZTtcblxuY29uc3QgcHJpbnRBc0xlYWYgPSBuYW1lID0+ICdbJyArIG5hbWUgKyAnXSc7XG5cbmNvbnN0IFNQQUNFID0gJyAnO1xuY29uc3QgTEFaWSA9ICfigKYnOyAvLyBTZXEgaXMgbGF6eSBpZiBpdCBjYWxscyBhIG1ldGhvZCBsaWtlIGZpbHRlclxuXG5jb25zdCBwcmludEltbXV0YWJsZUVudHJpZXMgPSAoXG4gIHZhbCxcbiAgY29uZmlnLFxuICBpbmRlbnRhdGlvbixcbiAgZGVwdGgsXG4gIHJlZnMsXG4gIHByaW50ZXIsXG4gIHR5cGVcbikgPT5cbiAgKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aFxuICAgID8gcHJpbnRBc0xlYWYoZ2V0SW1tdXRhYmxlTmFtZSh0eXBlKSlcbiAgICA6IGdldEltbXV0YWJsZU5hbWUodHlwZSkgK1xuICAgICAgU1BBQ0UgK1xuICAgICAgJ3snICtcbiAgICAgICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvckVudHJpZXMpKFxuICAgICAgICB2YWwuZW50cmllcygpLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgcmVmcyxcbiAgICAgICAgcHJpbnRlclxuICAgICAgKSArXG4gICAgICAnfSc7IC8vIFJlY29yZCBoYXMgYW4gZW50cmllcyBtZXRob2QgYmVjYXVzZSBpdCBpcyBhIGNvbGxlY3Rpb24gaW4gaW1tdXRhYmxlIHYzLlxuLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIGZvciBJbW11dGFibGUgUmVjb3JkIGZyb20gdmVyc2lvbiB2MyBvciB2NC5cblxuZnVuY3Rpb24gZ2V0UmVjb3JkRW50cmllcyh2YWwpIHtcbiAgbGV0IGkgPSAwO1xuICByZXR1cm4ge1xuICAgIG5leHQoKSB7XG4gICAgICBpZiAoaSA8IHZhbC5fa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdmFsLl9rZXlzW2krK107XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IFtrZXksIHZhbC5nZXQoa2V5KV1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IHByaW50SW1tdXRhYmxlUmVjb3JkID0gKFxuICB2YWwsXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb24sXG4gIGRlcHRoLFxuICByZWZzLFxuICBwcmludGVyXG4pID0+IHtcbiAgLy8gX25hbWUgcHJvcGVydHkgaXMgZGVmaW5lZCBvbmx5IGZvciBhbiBJbW11dGFibGUgUmVjb3JkIGluc3RhbmNlXG4gIC8vIHdoaWNoIHdhcyBjb25zdHJ1Y3RlZCB3aXRoIGEgc2Vjb25kIG9wdGlvbmFsIGRlc2NyaXB0aXZlIG5hbWUgYXJnXG4gIGNvbnN0IG5hbWUgPSBnZXRJbW11dGFibGVOYW1lKHZhbC5fbmFtZSB8fCAnUmVjb3JkJyk7XG4gIHJldHVybiArK2RlcHRoID4gY29uZmlnLm1heERlcHRoXG4gICAgPyBwcmludEFzTGVhZihuYW1lKVxuICAgIDogbmFtZSArXG4gICAgICAgIFNQQUNFICtcbiAgICAgICAgJ3snICtcbiAgICAgICAgKDAsIF9jb2xsZWN0aW9ucy5wcmludEl0ZXJhdG9yRW50cmllcykoXG4gICAgICAgICAgZ2V0UmVjb3JkRW50cmllcyh2YWwpLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICByZWZzLFxuICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgKSArXG4gICAgICAgICd9Jztcbn07XG5cbmNvbnN0IHByaW50SW1tdXRhYmxlU2VxID0gKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgY29uc3QgbmFtZSA9IGdldEltbXV0YWJsZU5hbWUoJ1NlcScpO1xuXG4gIGlmICgrK2RlcHRoID4gY29uZmlnLm1heERlcHRoKSB7XG4gICAgcmV0dXJuIHByaW50QXNMZWFmKG5hbWUpO1xuICB9XG5cbiAgaWYgKHZhbFtJU19LRVlFRF9TRU5USU5FTF0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgbmFtZSArXG4gICAgICBTUEFDRSArXG4gICAgICAneycgKyAvLyBmcm9tIEltbXV0YWJsZSBjb2xsZWN0aW9uIG9mIGVudHJpZXMgb3IgZnJvbSBFQ01BU2NyaXB0IG9iamVjdFxuICAgICAgKHZhbC5faXRlciB8fCB2YWwuX29iamVjdFxuICAgICAgICA/ICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvckVudHJpZXMpKFxuICAgICAgICAgICAgdmFsLmVudHJpZXMoKSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgcHJpbnRlclxuICAgICAgICAgIClcbiAgICAgICAgOiBMQVpZKSArXG4gICAgICAnfSdcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBuYW1lICtcbiAgICBTUEFDRSArXG4gICAgJ1snICtcbiAgICAodmFsLl9pdGVyIHx8IC8vIGZyb20gSW1tdXRhYmxlIGNvbGxlY3Rpb24gb2YgdmFsdWVzXG4gICAgdmFsLl9hcnJheSB8fCAvLyBmcm9tIEVDTUFTY3JpcHQgYXJyYXlcbiAgICB2YWwuX2NvbGxlY3Rpb24gfHwgLy8gZnJvbSBFQ01BU2NyaXB0IGNvbGxlY3Rpb24gaW4gaW1tdXRhYmxlIHY0XG4gICAgdmFsLl9pdGVyYWJsZSAvLyBmcm9tIEVDTUFTY3JpcHQgY29sbGVjdGlvbiBpbiBpbW11dGFibGUgdjNcbiAgICAgID8gKDAsIF9jb2xsZWN0aW9ucy5wcmludEl0ZXJhdG9yVmFsdWVzKShcbiAgICAgICAgICB2YWwudmFsdWVzKCksXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgIHJlZnMsXG4gICAgICAgICAgcHJpbnRlclxuICAgICAgICApXG4gICAgICA6IExBWlkpICtcbiAgICAnXSdcbiAgKTtcbn07XG5cbmNvbnN0IHByaW50SW1tdXRhYmxlVmFsdWVzID0gKFxuICB2YWwsXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb24sXG4gIGRlcHRoLFxuICByZWZzLFxuICBwcmludGVyLFxuICB0eXBlXG4pID0+XG4gICsrZGVwdGggPiBjb25maWcubWF4RGVwdGhcbiAgICA/IHByaW50QXNMZWFmKGdldEltbXV0YWJsZU5hbWUodHlwZSkpXG4gICAgOiBnZXRJbW11dGFibGVOYW1lKHR5cGUpICtcbiAgICAgIFNQQUNFICtcbiAgICAgICdbJyArXG4gICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50SXRlcmF0b3JWYWx1ZXMpKFxuICAgICAgICB2YWwudmFsdWVzKCksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb24sXG4gICAgICAgIGRlcHRoLFxuICAgICAgICByZWZzLFxuICAgICAgICBwcmludGVyXG4gICAgICApICtcbiAgICAgICddJztcblxuY29uc3Qgc2VyaWFsaXplID0gKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpID0+IHtcbiAgaWYgKHZhbFtJU19NQVBfU0VOVElORUxdKSB7XG4gICAgcmV0dXJuIHByaW50SW1tdXRhYmxlRW50cmllcyhcbiAgICAgIHZhbCxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGluZGVudGF0aW9uLFxuICAgICAgZGVwdGgsXG4gICAgICByZWZzLFxuICAgICAgcHJpbnRlcixcbiAgICAgIHZhbFtJU19PUkRFUkVEX1NFTlRJTkVMXSA/ICdPcmRlcmVkTWFwJyA6ICdNYXAnXG4gICAgKTtcbiAgfVxuXG4gIGlmICh2YWxbSVNfTElTVF9TRU5USU5FTF0pIHtcbiAgICByZXR1cm4gcHJpbnRJbW11dGFibGVWYWx1ZXMoXG4gICAgICB2YWwsXG4gICAgICBjb25maWcsXG4gICAgICBpbmRlbnRhdGlvbixcbiAgICAgIGRlcHRoLFxuICAgICAgcmVmcyxcbiAgICAgIHByaW50ZXIsXG4gICAgICAnTGlzdCdcbiAgICApO1xuICB9XG5cbiAgaWYgKHZhbFtJU19TRVRfU0VOVElORUxdKSB7XG4gICAgcmV0dXJuIHByaW50SW1tdXRhYmxlVmFsdWVzKFxuICAgICAgdmFsLFxuICAgICAgY29uZmlnLFxuICAgICAgaW5kZW50YXRpb24sXG4gICAgICBkZXB0aCxcbiAgICAgIHJlZnMsXG4gICAgICBwcmludGVyLFxuICAgICAgdmFsW0lTX09SREVSRURfU0VOVElORUxdID8gJ09yZGVyZWRTZXQnIDogJ1NldCdcbiAgICApO1xuICB9XG5cbiAgaWYgKHZhbFtJU19TVEFDS19TRU5USU5FTF0pIHtcbiAgICByZXR1cm4gcHJpbnRJbW11dGFibGVWYWx1ZXMoXG4gICAgICB2YWwsXG4gICAgICBjb25maWcsXG4gICAgICBpbmRlbnRhdGlvbixcbiAgICAgIGRlcHRoLFxuICAgICAgcmVmcyxcbiAgICAgIHByaW50ZXIsXG4gICAgICAnU3RhY2snXG4gICAgKTtcbiAgfVxuXG4gIGlmICh2YWxbSVNfU0VRX1NFTlRJTkVMXSkge1xuICAgIHJldHVybiBwcmludEltbXV0YWJsZVNlcSh2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCBwcmludGVyKTtcbiAgfSAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGltbXV0YWJsZSB2MyBhbmQgdjQsIGxldCByZWNvcmQgYmUgdGhlIGRlZmF1bHQuXG5cbiAgcmV0dXJuIHByaW50SW1tdXRhYmxlUmVjb3JkKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIHByaW50ZXIpO1xufTsgLy8gRXhwbGljaXRseSBjb21wYXJpbmcgc2VudGluZWwgcHJvcGVydGllcyB0byB0cnVlIGF2b2lkcyBmYWxzZSBwb3NpdGl2ZVxuLy8gd2hlbiBtb2NrIGlkZW50aXR5LW9iai1wcm94eSByZXR1cm5zIHRoZSBrZXkgYXMgdGhlIHZhbHVlIGZvciBhbnkga2V5LlxuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcblxuY29uc3QgdGVzdCA9IHZhbCA9PlxuICB2YWwgJiZcbiAgKHZhbFtJU19JVEVSQUJMRV9TRU5USU5FTF0gPT09IHRydWUgfHwgdmFsW0lTX1JFQ09SRF9TRU5USU5FTF0gPT09IHRydWUpO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGI9NjAxMDMsYz02MDEwNixkPTYwMTA3LGU9NjAxMDgsZj02MDExNCxnPTYwMTA5LGg9NjAxMTAsaz02MDExMixsPTYwMTEzLG09NjAxMjAsbj02MDExNSxwPTYwMTE2LHE9NjAxMjEscj02MDEyMix1PTYwMTE3LHY9NjAxMjksdz02MDEzMTtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciB4PVN5bWJvbC5mb3I7Yj14KFwicmVhY3QuZWxlbWVudFwiKTtjPXgoXCJyZWFjdC5wb3J0YWxcIik7ZD14KFwicmVhY3QuZnJhZ21lbnRcIik7ZT14KFwicmVhY3Quc3RyaWN0X21vZGVcIik7Zj14KFwicmVhY3QucHJvZmlsZXJcIik7Zz14KFwicmVhY3QucHJvdmlkZXJcIik7aD14KFwicmVhY3QuY29udGV4dFwiKTtrPXgoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtsPXgoXCJyZWFjdC5zdXNwZW5zZVwiKTttPXgoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpO249eChcInJlYWN0Lm1lbW9cIik7cD14KFwicmVhY3QubGF6eVwiKTtxPXgoXCJyZWFjdC5ibG9ja1wiKTtyPXgoXCJyZWFjdC5zZXJ2ZXIuYmxvY2tcIik7dT14KFwicmVhY3QuZnVuZGFtZW50YWxcIik7dj14KFwicmVhY3QuZGVidWdfdHJhY2VfbW9kZVwiKTt3PXgoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpfVxuZnVuY3Rpb24geShhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdD1hLiQkdHlwZW9mO3N3aXRjaCh0KXtjYXNlIGI6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgZDpjYXNlIGY6Y2FzZSBlOmNhc2UgbDpjYXNlIG06cmV0dXJuIGE7ZGVmYXVsdDpzd2l0Y2goYT1hJiZhLiQkdHlwZW9mLGEpe2Nhc2UgaDpjYXNlIGs6Y2FzZSBwOmNhc2UgbjpjYXNlIGc6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdH19Y2FzZSBjOnJldHVybiB0fX19dmFyIHo9ZyxBPWIsQj1rLEM9ZCxEPXAsRT1uLEY9YyxHPWYsSD1lLEk9bDtleHBvcnRzLkNvbnRleHRDb25zdW1lcj1oO2V4cG9ydHMuQ29udGV4dFByb3ZpZGVyPXo7ZXhwb3J0cy5FbGVtZW50PUE7ZXhwb3J0cy5Gb3J3YXJkUmVmPUI7ZXhwb3J0cy5GcmFnbWVudD1DO2V4cG9ydHMuTGF6eT1EO2V4cG9ydHMuTWVtbz1FO2V4cG9ydHMuUG9ydGFsPUY7ZXhwb3J0cy5Qcm9maWxlcj1HO2V4cG9ydHMuU3RyaWN0TW9kZT1IO1xuZXhwb3J0cy5TdXNwZW5zZT1JO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1ofTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09Z307ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWJ9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09a307ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09ZH07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSk9PT1wfTtleHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PW59O1xuZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PWN9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geShhKT09PWZ9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09ZX07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB5KGEpPT09bH07ZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWR8fGE9PT1mfHxhPT09dnx8YT09PWV8fGE9PT1sfHxhPT09bXx8YT09PXd8fFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEmJihhLiQkdHlwZW9mPT09cHx8YS4kJHR5cGVvZj09PW58fGEuJCR0eXBlb2Y9PT1nfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT11fHxhLiQkdHlwZW9mPT09cXx8YVswXT09PXIpPyEwOiExfTtcbmV4cG9ydHMudHlwZU9mPXk7XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE3LjAuMlxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50ZXN0ID0gZXhwb3J0cy5zZXJpYWxpemUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBSZWFjdElzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZSgncmVhY3QtaXMnKSk7XG5cbnZhciBfbWFya3VwID0gcmVxdWlyZSgnLi9saWIvbWFya3VwJyk7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICBpZiAodHlwZW9mIFdlYWtNYXAgIT09ICdmdW5jdGlvbicpIHJldHVybiBudWxsO1xuICB2YXIgY2FjaGVCYWJlbEludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuICB2YXIgY2FjaGVOb2RlSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKG5vZGVJbnRlcm9wKSB7XG4gICAgcmV0dXJuIG5vZGVJbnRlcm9wID8gY2FjaGVOb2RlSW50ZXJvcCA6IGNhY2hlQmFiZWxJbnRlcm9wO1xuICB9KShub2RlSW50ZXJvcCk7XG59XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaiwgbm9kZUludGVyb3ApIHtcbiAgaWYgKCFub2RlSW50ZXJvcCAmJiBvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwgfHwgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmogIT09ICdmdW5jdGlvbicpKSB7XG4gICAgcmV0dXJuIHtkZWZhdWx0OiBvYmp9O1xuICB9XG4gIHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCk7XG4gIGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkge1xuICAgIHJldHVybiBjYWNoZS5nZXQob2JqKTtcbiAgfVxuICB2YXIgbmV3T2JqID0ge307XG4gIHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGtleSAhPT0gJ2RlZmF1bHQnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yXG4gICAgICAgID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG4gIGlmIChjYWNoZSkge1xuICAgIGNhY2hlLnNldChvYmosIG5ld09iaik7XG4gIH1cbiAgcmV0dXJuIG5ld09iajtcbn1cblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLy8gR2l2ZW4gZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgb3Igc3VidHJlZSBkdXJpbmcgcmVjdXJzaXZlIHRyYXZlcnNhbCxcbi8vIHJldHVybiBmbGF0dGVuZWQgYXJyYXkgb2YgY2hpbGRyZW4uXG5jb25zdCBnZXRDaGlsZHJlbiA9IChhcmcsIGNoaWxkcmVuID0gW10pID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGFyZy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgZ2V0Q2hpbGRyZW4oaXRlbSwgY2hpbGRyZW4pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGFyZyAhPSBudWxsICYmIGFyZyAhPT0gZmFsc2UpIHtcbiAgICBjaGlsZHJlbi5wdXNoKGFyZyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59O1xuXG5jb25zdCBnZXRUeXBlID0gZWxlbWVudCA9PiB7XG4gIGNvbnN0IHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJztcbiAgfVxuXG4gIGlmIChSZWFjdElzLmlzRnJhZ21lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gJ1JlYWN0LkZyYWdtZW50JztcbiAgfVxuXG4gIGlmIChSZWFjdElzLmlzU3VzcGVuc2UoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gJ1JlYWN0LlN1c3BlbnNlJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmIChSZWFjdElzLmlzQ29udGV4dFByb3ZpZGVyKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gJ0NvbnRleHQuUHJvdmlkZXInO1xuICAgIH1cblxuICAgIGlmIChSZWFjdElzLmlzQ29udGV4dENvbnN1bWVyKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gJ0NvbnRleHQuQ29uc3VtZXInO1xuICAgIH1cblxuICAgIGlmIChSZWFjdElzLmlzRm9yd2FyZFJlZihlbGVtZW50KSkge1xuICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGUucmVuZGVyLmRpc3BsYXlOYW1lIHx8IHR5cGUucmVuZGVyLm5hbWUgfHwgJyc7XG4gICAgICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJ1xuICAgICAgICA/ICdGb3J3YXJkUmVmKCcgKyBmdW5jdGlvbk5hbWUgKyAnKSdcbiAgICAgICAgOiAnRm9yd2FyZFJlZic7XG4gICAgfVxuXG4gICAgaWYgKFJlYWN0SXMuaXNNZW1vKGVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPVxuICAgICAgICB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUudHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLnR5cGUubmFtZSB8fCAnJztcbiAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gJ01lbW8oJyArIGZ1bmN0aW9uTmFtZSArICcpJyA6ICdNZW1vJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJ1VOREVGSU5FRCc7XG59O1xuXG5jb25zdCBnZXRQcm9wS2V5cyA9IGVsZW1lbnQgPT4ge1xuICBjb25zdCB7cHJvcHN9ID0gZWxlbWVudDtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKVxuICAgIC5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBwcm9wc1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgLnNvcnQoKTtcbn07XG5cbmNvbnN0IHNlcmlhbGl6ZSA9IChlbGVtZW50LCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikgPT5cbiAgKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aFxuICAgID8gKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50QXNMZWFmKShnZXRUeXBlKGVsZW1lbnQpLCBjb25maWcpXG4gICAgOiAoMCwgX21hcmt1cC5wcmludEVsZW1lbnQpKFxuICAgICAgICBnZXRUeXBlKGVsZW1lbnQpLFxuICAgICAgICAoMCwgX21hcmt1cC5wcmludFByb3BzKShcbiAgICAgICAgICBnZXRQcm9wS2V5cyhlbGVtZW50KSxcbiAgICAgICAgICBlbGVtZW50LnByb3BzLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICksXG4gICAgICAgICgwLCBfbWFya3VwLnByaW50Q2hpbGRyZW4pKFxuICAgICAgICAgIGdldENoaWxkcmVuKGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsXG4gICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgcmVmcyxcbiAgICAgICAgICBwcmludGVyXG4gICAgICAgICksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5kZW50YXRpb25cbiAgICAgICk7XG5cbmV4cG9ydHMuc2VyaWFsaXplID0gc2VyaWFsaXplO1xuXG5jb25zdCB0ZXN0ID0gdmFsID0+IHZhbCAhPSBudWxsICYmIFJlYWN0SXMuaXNFbGVtZW50KHZhbCk7XG5cbmV4cG9ydHMudGVzdCA9IHRlc3Q7XG5jb25zdCBwbHVnaW4gPSB7XG4gIHNlcmlhbGl6ZSxcbiAgdGVzdFxufTtcbnZhciBfZGVmYXVsdCA9IHBsdWdpbjtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGVzdCA9IGV4cG9ydHMuc2VyaWFsaXplID0gZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX21hcmt1cCA9IHJlcXVpcmUoJy4vbGliL21hcmt1cCcpO1xuXG52YXIgZ2xvYmFsID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGdsb2JhbDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gIH1cbn0pKCk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxbJ2plc3Qtc3ltYm9sLWRvLW5vdC10b3VjaCddIHx8IGdsb2JhbC5TeW1ib2w7XG5jb25zdCB0ZXN0U3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yXG4gICAgPyBTeW1ib2wuZm9yKCdyZWFjdC50ZXN0Lmpzb24nKVxuICAgIDogMHhlYTcxMzU3O1xuXG5jb25zdCBnZXRQcm9wS2V5cyA9IG9iamVjdCA9PiB7XG4gIGNvbnN0IHtwcm9wc30gPSBvYmplY3Q7XG4gIHJldHVybiBwcm9wc1xuICAgID8gT2JqZWN0LmtleXMocHJvcHMpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IHByb3BzW2tleV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgLnNvcnQoKVxuICAgIDogW107XG59O1xuXG5jb25zdCBzZXJpYWxpemUgPSAob2JqZWN0LCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcikgPT5cbiAgKytkZXB0aCA+IGNvbmZpZy5tYXhEZXB0aFxuICAgID8gKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50QXNMZWFmKShvYmplY3QudHlwZSwgY29uZmlnKVxuICAgIDogKDAsIF9tYXJrdXAucHJpbnRFbGVtZW50KShcbiAgICAgICAgb2JqZWN0LnR5cGUsXG4gICAgICAgIG9iamVjdC5wcm9wc1xuICAgICAgICAgID8gKDAsIF9tYXJrdXAucHJpbnRQcm9wcykoXG4gICAgICAgICAgICAgIGdldFByb3BLZXlzKG9iamVjdCksXG4gICAgICAgICAgICAgIG9iamVjdC5wcm9wcyxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArIGNvbmZpZy5pbmRlbnQsXG4gICAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgICBwcmludGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgb2JqZWN0LmNoaWxkcmVuXG4gICAgICAgICAgPyAoMCwgX21hcmt1cC5wcmludENoaWxkcmVuKShcbiAgICAgICAgICAgICAgb2JqZWN0LmNoaWxkcmVuLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudCxcbiAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgIHJlZnMsXG4gICAgICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZGVudGF0aW9uXG4gICAgICApO1xuXG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcblxuY29uc3QgdGVzdCA9IHZhbCA9PiB2YWwgJiYgdmFsLiQkdHlwZW9mID09PSB0ZXN0U3ltYm9sO1xuXG5leHBvcnRzLnRlc3QgPSB0ZXN0O1xuY29uc3QgcGx1Z2luID0ge1xuICBzZXJpYWxpemUsXG4gIHRlc3Rcbn07XG52YXIgX2RlZmF1bHQgPSBwbHVnaW47XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLkRFRkFVTFRfT1BUSU9OUyA9IHZvaWQgMDtcbmV4cG9ydHMuZm9ybWF0ID0gZm9ybWF0O1xuZXhwb3J0cy5wbHVnaW5zID0gdm9pZCAwO1xuXG52YXIgX2Fuc2lTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJ2Fuc2ktc3R5bGVzJykpO1xuXG52YXIgX2NvbGxlY3Rpb25zID0gcmVxdWlyZSgnLi9jb2xsZWN0aW9ucycpO1xuXG52YXIgX0FzeW1tZXRyaWNNYXRjaGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChcbiAgcmVxdWlyZSgnLi9wbHVnaW5zL0FzeW1tZXRyaWNNYXRjaGVyJylcbik7XG5cbnZhciBfQ29udmVydEFuc2kgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJy4vcGx1Z2lucy9Db252ZXJ0QW5zaScpKTtcblxudmFyIF9ET01Db2xsZWN0aW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL3BsdWdpbnMvRE9NQ29sbGVjdGlvbicpKTtcblxudmFyIF9ET01FbGVtZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL3BsdWdpbnMvRE9NRWxlbWVudCcpKTtcblxudmFyIF9JbW11dGFibGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoJy4vcGx1Z2lucy9JbW11dGFibGUnKSk7XG5cbnZhciBfUmVhY3RFbGVtZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCcuL3BsdWdpbnMvUmVhY3RFbGVtZW50JykpO1xuXG52YXIgX1JlYWN0VGVzdENvbXBvbmVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoXG4gIHJlcXVpcmUoJy4vcGx1Z2lucy9SZWFjdFRlc3RDb21wb25lbnQnKVxuKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtkZWZhdWx0OiBvYmp9O1xufVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGxvY2FsL2Jhbi10eXBlcy1ldmVudHVhbGx5ICovXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCB0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuY29uc3QgZXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IHJlZ0V4cFRvU3RyaW5nID0gUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZztcbi8qKlxuICogRXhwbGljaXRseSBjb21wYXJpbmcgdHlwZW9mIGNvbnN0cnVjdG9yIHRvIGZ1bmN0aW9uIGF2b2lkcyB1bmRlZmluZWQgYXMgbmFtZVxuICogd2hlbiBtb2NrIGlkZW50aXR5LW9iai1wcm94eSByZXR1cm5zIHRoZSBrZXkgYXMgdGhlIHZhbHVlIGZvciBhbnkga2V5LlxuICovXG5cbmNvbnN0IGdldENvbnN0cnVjdG9yTmFtZSA9IHZhbCA9PlxuICAodHlwZW9mIHZhbC5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IubmFtZSkgfHwgJ09iamVjdCc7XG4vKiBnbG9iYWwgd2luZG93ICovXG5cbi8qKiBJcyB2YWwgaXMgZXF1YWwgdG8gZ2xvYmFsIHdpbmRvdyBvYmplY3Q/IFdvcmtzIGV2ZW4gaWYgaXQgZG9lcyBub3QgZXhpc3QgOikgKi9cblxuY29uc3QgaXNXaW5kb3cgPSB2YWwgPT4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsID09PSB3aW5kb3c7XG5cbmNvbnN0IFNZTUJPTF9SRUdFWFAgPSAvXlN5bWJvbFxcKCguKilcXCkoLiopJC87XG5jb25zdCBORVdMSU5FX1JFR0VYUCA9IC9cXG4vZ2k7XG5cbmNsYXNzIFByZXR0eUZvcm1hdFBsdWdpbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGFjaykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuc3RhY2sgPSBzdGFjaztcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUb1N0cmluZ2VkQXJyYXlUeXBlKHRvU3RyaW5nZWQpIHtcbiAgcmV0dXJuIChcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBBcnJheV0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyB8fFxuICAgIHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IERhdGFWaWV3XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyB8fFxuICAgIHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgSW50OEFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBJbnQxNkFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBJbnQzMkFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBVaW50OEFycmF5XScgfHxcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgVWludDE2QXJyYXldJyB8fFxuICAgIHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IFVpbnQzMkFycmF5XSdcbiAgKTtcbn1cblxuZnVuY3Rpb24gcHJpbnROdW1iZXIodmFsKSB7XG4gIHJldHVybiBPYmplY3QuaXModmFsLCAtMCkgPyAnLTAnIDogU3RyaW5nKHZhbCk7XG59XG5cbmZ1bmN0aW9uIHByaW50QmlnSW50KHZhbCkge1xuICByZXR1cm4gU3RyaW5nKGAke3ZhbH1uYCk7XG59XG5cbmZ1bmN0aW9uIHByaW50RnVuY3Rpb24odmFsLCBwcmludEZ1bmN0aW9uTmFtZSkge1xuICBpZiAoIXByaW50RnVuY3Rpb25OYW1lKSB7XG4gICAgcmV0dXJuICdbRnVuY3Rpb25dJztcbiAgfVxuXG4gIHJldHVybiAnW0Z1bmN0aW9uICcgKyAodmFsLm5hbWUgfHwgJ2Fub255bW91cycpICsgJ10nO1xufVxuXG5mdW5jdGlvbiBwcmludFN5bWJvbCh2YWwpIHtcbiAgcmV0dXJuIFN0cmluZyh2YWwpLnJlcGxhY2UoU1lNQk9MX1JFR0VYUCwgJ1N5bWJvbCgkMSknKTtcbn1cblxuZnVuY3Rpb24gcHJpbnRFcnJvcih2YWwpIHtcbiAgcmV0dXJuICdbJyArIGVycm9yVG9TdHJpbmcuY2FsbCh2YWwpICsgJ10nO1xufVxuLyoqXG4gKiBUaGUgZmlyc3QgcG9ydCBvZiBjYWxsIGZvciBwcmludGluZyBhbiBvYmplY3QsIGhhbmRsZXMgbW9zdCBvZiB0aGVcbiAqIGRhdGEtdHlwZXMgaW4gSlMuXG4gKi9cblxuZnVuY3Rpb24gcHJpbnRCYXNpY1ZhbHVlKHZhbCwgcHJpbnRGdW5jdGlvbk5hbWUsIGVzY2FwZVJlZ2V4LCBlc2NhcGVTdHJpbmcpIHtcbiAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICcnICsgdmFsO1xuICB9XG5cbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9XG5cbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICBjb25zdCB0eXBlT2YgPSB0eXBlb2YgdmFsO1xuXG4gIGlmICh0eXBlT2YgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHByaW50TnVtYmVyKHZhbCk7XG4gIH1cblxuICBpZiAodHlwZU9mID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiBwcmludEJpZ0ludCh2YWwpO1xuICB9XG5cbiAgaWYgKHR5cGVPZiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoZXNjYXBlU3RyaW5nKSB7XG4gICAgICByZXR1cm4gJ1wiJyArIHZhbC5yZXBsYWNlKC9cInxcXFxcL2csICdcXFxcJCYnKSArICdcIic7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcIicgKyB2YWwgKyAnXCInO1xuICB9XG5cbiAgaWYgKHR5cGVPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcmludEZ1bmN0aW9uKHZhbCwgcHJpbnRGdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgaWYgKHR5cGVPZiA9PT0gJ3N5bWJvbCcpIHtcbiAgICByZXR1cm4gcHJpbnRTeW1ib2wodmFsKTtcbiAgfVxuXG4gIGNvbnN0IHRvU3RyaW5nZWQgPSB0b1N0cmluZy5jYWxsKHZhbCk7XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IFdlYWtNYXBdJykge1xuICAgIHJldHVybiAnV2Vha01hcCB7fSc7XG4gIH1cblxuICBpZiAodG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgV2Vha1NldF0nKSB7XG4gICAgcmV0dXJuICdXZWFrU2V0IHt9JztcbiAgfVxuXG4gIGlmIChcbiAgICB0b1N0cmluZ2VkID09PSAnW29iamVjdCBGdW5jdGlvbl0nIHx8XG4gICAgdG9TdHJpbmdlZCA9PT0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJ1xuICApIHtcbiAgICByZXR1cm4gcHJpbnRGdW5jdGlvbih2YWwsIHByaW50RnVuY3Rpb25OYW1lKTtcbiAgfVxuXG4gIGlmICh0b1N0cmluZ2VkID09PSAnW29iamVjdCBTeW1ib2xdJykge1xuICAgIHJldHVybiBwcmludFN5bWJvbCh2YWwpO1xuICB9XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IERhdGVdJykge1xuICAgIHJldHVybiBpc05hTigrdmFsKSA/ICdEYXRlIHsgTmFOIH0nIDogdG9JU09TdHJpbmcuY2FsbCh2YWwpO1xuICB9XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IEVycm9yXScpIHtcbiAgICByZXR1cm4gcHJpbnRFcnJvcih2YWwpO1xuICB9XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgaWYgKGVzY2FwZVJlZ2V4KSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZWdFeHAuZXNjYXBlL2Jsb2IvbWFpbi9wb2x5ZmlsbC5qc1xuICAgICAgcmV0dXJuIHJlZ0V4cFRvU3RyaW5nLmNhbGwodmFsKS5yZXBsYWNlKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHJldHVybiByZWdFeHBUb1N0cmluZy5jYWxsKHZhbCk7XG4gIH1cblxuICBpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4gcHJpbnRFcnJvcih2YWwpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEhhbmRsZXMgbW9yZSBjb21wbGV4IG9iamVjdHMgKCBzdWNoIGFzIG9iamVjdHMgd2l0aCBjaXJjdWxhciByZWZlcmVuY2VzLlxuICogbWFwcyBhbmQgc2V0cyBldGMgKVxuICovXG5cbmZ1bmN0aW9uIHByaW50Q29tcGxleFZhbHVlKFxuICB2YWwsXG4gIGNvbmZpZyxcbiAgaW5kZW50YXRpb24sXG4gIGRlcHRoLFxuICByZWZzLFxuICBoYXNDYWxsZWRUb0pTT05cbikge1xuICBpZiAocmVmcy5pbmRleE9mKHZhbCkgIT09IC0xKSB7XG4gICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgfVxuXG4gIHJlZnMgPSByZWZzLnNsaWNlKCk7XG4gIHJlZnMucHVzaCh2YWwpO1xuICBjb25zdCBoaXRNYXhEZXB0aCA9ICsrZGVwdGggPiBjb25maWcubWF4RGVwdGg7XG4gIGNvbnN0IG1pbiA9IGNvbmZpZy5taW47XG5cbiAgaWYgKFxuICAgIGNvbmZpZy5jYWxsVG9KU09OICYmXG4gICAgIWhpdE1heERlcHRoICYmXG4gICAgdmFsLnRvSlNPTiAmJlxuICAgIHR5cGVvZiB2YWwudG9KU09OID09PSAnZnVuY3Rpb24nICYmXG4gICAgIWhhc0NhbGxlZFRvSlNPTlxuICApIHtcbiAgICByZXR1cm4gcHJpbnRlcih2YWwudG9KU09OKCksIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzLCB0cnVlKTtcbiAgfVxuXG4gIGNvbnN0IHRvU3RyaW5nZWQgPSB0b1N0cmluZy5jYWxsKHZhbCk7XG5cbiAgaWYgKHRvU3RyaW5nZWQgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nKSB7XG4gICAgcmV0dXJuIGhpdE1heERlcHRoXG4gICAgICA/ICdbQXJndW1lbnRzXSdcbiAgICAgIDogKG1pbiA/ICcnIDogJ0FyZ3VtZW50cyAnKSArXG4gICAgICAgICAgJ1snICtcbiAgICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50TGlzdEl0ZW1zKShcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgcHJpbnRlclxuICAgICAgICAgICkgK1xuICAgICAgICAgICddJztcbiAgfVxuXG4gIGlmIChpc1RvU3RyaW5nZWRBcnJheVR5cGUodG9TdHJpbmdlZCkpIHtcbiAgICByZXR1cm4gaGl0TWF4RGVwdGhcbiAgICAgID8gJ1snICsgdmFsLmNvbnN0cnVjdG9yLm5hbWUgKyAnXSdcbiAgICAgIDogKG1pblxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6ICFjb25maWcucHJpbnRCYXNpY1Byb3RvdHlwZSAmJiB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FycmF5J1xuICAgICAgICAgID8gJydcbiAgICAgICAgICA6IHZhbC5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnKSArXG4gICAgICAgICAgJ1snICtcbiAgICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50TGlzdEl0ZW1zKShcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgcHJpbnRlclxuICAgICAgICAgICkgK1xuICAgICAgICAgICddJztcbiAgfVxuXG4gIGlmICh0b1N0cmluZ2VkID09PSAnW29iamVjdCBNYXBdJykge1xuICAgIHJldHVybiBoaXRNYXhEZXB0aFxuICAgICAgPyAnW01hcF0nXG4gICAgICA6ICdNYXAgeycgK1xuICAgICAgICAgICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvckVudHJpZXMpKFxuICAgICAgICAgICAgdmFsLmVudHJpZXMoKSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGluZGVudGF0aW9uLFxuICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgcHJpbnRlcixcbiAgICAgICAgICAgICcgPT4gJ1xuICAgICAgICAgICkgK1xuICAgICAgICAgICd9JztcbiAgfVxuXG4gIGlmICh0b1N0cmluZ2VkID09PSAnW29iamVjdCBTZXRdJykge1xuICAgIHJldHVybiBoaXRNYXhEZXB0aFxuICAgICAgPyAnW1NldF0nXG4gICAgICA6ICdTZXQgeycgK1xuICAgICAgICAgICgwLCBfY29sbGVjdGlvbnMucHJpbnRJdGVyYXRvclZhbHVlcykoXG4gICAgICAgICAgICB2YWwudmFsdWVzKCksXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgcmVmcyxcbiAgICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgICApICtcbiAgICAgICAgICAnfSc7XG4gIH0gLy8gQXZvaWQgZmFpbHVyZSB0byBzZXJpYWxpemUgZ2xvYmFsIHdpbmRvdyBvYmplY3QgaW4ganNkb20gdGVzdCBlbnZpcm9ubWVudC5cbiAgLy8gRm9yIGV4YW1wbGUsIG5vdCBldmVuIHJlbGV2YW50IGlmIHdpbmRvdyBpcyBwcm9wIG9mIFJlYWN0IGVsZW1lbnQuXG5cbiAgcmV0dXJuIGhpdE1heERlcHRoIHx8IGlzV2luZG93KHZhbClcbiAgICA/ICdbJyArIGdldENvbnN0cnVjdG9yTmFtZSh2YWwpICsgJ10nXG4gICAgOiAobWluXG4gICAgICAgID8gJydcbiAgICAgICAgOiAhY29uZmlnLnByaW50QmFzaWNQcm90b3R5cGUgJiYgZ2V0Q29uc3RydWN0b3JOYW1lKHZhbCkgPT09ICdPYmplY3QnXG4gICAgICAgID8gJydcbiAgICAgICAgOiBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsKSArICcgJykgK1xuICAgICAgICAneycgK1xuICAgICAgICAoMCwgX2NvbGxlY3Rpb25zLnByaW50T2JqZWN0UHJvcGVydGllcykoXG4gICAgICAgICAgdmFsLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBpbmRlbnRhdGlvbixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICByZWZzLFxuICAgICAgICAgIHByaW50ZXJcbiAgICAgICAgKSArXG4gICAgICAgICd9Jztcbn1cblxuZnVuY3Rpb24gaXNOZXdQbHVnaW4ocGx1Z2luKSB7XG4gIHJldHVybiBwbHVnaW4uc2VyaWFsaXplICE9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHByaW50UGx1Z2luKHBsdWdpbiwgdmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcykge1xuICBsZXQgcHJpbnRlZDtcblxuICB0cnkge1xuICAgIHByaW50ZWQgPSBpc05ld1BsdWdpbihwbHVnaW4pXG4gICAgICA/IHBsdWdpbi5zZXJpYWxpemUodmFsLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcywgcHJpbnRlcilcbiAgICAgIDogcGx1Z2luLnByaW50KFxuICAgICAgICAgIHZhbCxcbiAgICAgICAgICB2YWxDaGlsZCA9PiBwcmludGVyKHZhbENoaWxkLCBjb25maWcsIGluZGVudGF0aW9uLCBkZXB0aCwgcmVmcyksXG4gICAgICAgICAgc3RyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGVudGF0aW9uTmV4dCA9IGluZGVudGF0aW9uICsgY29uZmlnLmluZGVudDtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGluZGVudGF0aW9uTmV4dCArXG4gICAgICAgICAgICAgIHN0ci5yZXBsYWNlKE5FV0xJTkVfUkVHRVhQLCAnXFxuJyArIGluZGVudGF0aW9uTmV4dClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlZGdlU3BhY2luZzogY29uZmlnLnNwYWNpbmdPdXRlcixcbiAgICAgICAgICAgIG1pbjogY29uZmlnLm1pbixcbiAgICAgICAgICAgIHNwYWNpbmc6IGNvbmZpZy5zcGFjaW5nSW5uZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbmZpZy5jb2xvcnNcbiAgICAgICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgUHJldHR5Rm9ybWF0UGx1Z2luRXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2spO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcmludGVkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBwcmV0dHktZm9ybWF0OiBQbHVnaW4gbXVzdCByZXR1cm4gdHlwZSBcInN0cmluZ1wiIGJ1dCBpbnN0ZWFkIHJldHVybmVkIFwiJHt0eXBlb2YgcHJpbnRlZH1cIi5gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwcmludGVkO1xufVxuXG5mdW5jdGlvbiBmaW5kUGx1Z2luKHBsdWdpbnMsIHZhbCkge1xuICBmb3IgKGxldCBwID0gMDsgcCA8IHBsdWdpbnMubGVuZ3RoOyBwKyspIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHBsdWdpbnNbcF0udGVzdCh2YWwpKSB7XG4gICAgICAgIHJldHVybiBwbHVnaW5zW3BdO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgUHJldHR5Rm9ybWF0UGx1Z2luRXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2spO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwcmludGVyKHZhbCwgY29uZmlnLCBpbmRlbnRhdGlvbiwgZGVwdGgsIHJlZnMsIGhhc0NhbGxlZFRvSlNPTikge1xuICBjb25zdCBwbHVnaW4gPSBmaW5kUGx1Z2luKGNvbmZpZy5wbHVnaW5zLCB2YWwpO1xuXG4gIGlmIChwbHVnaW4gIT09IG51bGwpIHtcbiAgICByZXR1cm4gcHJpbnRQbHVnaW4ocGx1Z2luLCB2YWwsIGNvbmZpZywgaW5kZW50YXRpb24sIGRlcHRoLCByZWZzKTtcbiAgfVxuXG4gIGNvbnN0IGJhc2ljUmVzdWx0ID0gcHJpbnRCYXNpY1ZhbHVlKFxuICAgIHZhbCxcbiAgICBjb25maWcucHJpbnRGdW5jdGlvbk5hbWUsXG4gICAgY29uZmlnLmVzY2FwZVJlZ2V4LFxuICAgIGNvbmZpZy5lc2NhcGVTdHJpbmdcbiAgKTtcblxuICBpZiAoYmFzaWNSZXN1bHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYmFzaWNSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gcHJpbnRDb21wbGV4VmFsdWUoXG4gICAgdmFsLFxuICAgIGNvbmZpZyxcbiAgICBpbmRlbnRhdGlvbixcbiAgICBkZXB0aCxcbiAgICByZWZzLFxuICAgIGhhc0NhbGxlZFRvSlNPTlxuICApO1xufVxuXG5jb25zdCBERUZBVUxUX1RIRU1FID0ge1xuICBjb21tZW50OiAnZ3JheScsXG4gIGNvbnRlbnQ6ICdyZXNldCcsXG4gIHByb3A6ICd5ZWxsb3cnLFxuICB0YWc6ICdjeWFuJyxcbiAgdmFsdWU6ICdncmVlbidcbn07XG5jb25zdCBERUZBVUxUX1RIRU1FX0tFWVMgPSBPYmplY3Qua2V5cyhERUZBVUxUX1RIRU1FKTtcbmNvbnN0IERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgY2FsbFRvSlNPTjogdHJ1ZSxcbiAgY29tcGFyZUtleXM6IHVuZGVmaW5lZCxcbiAgZXNjYXBlUmVnZXg6IGZhbHNlLFxuICBlc2NhcGVTdHJpbmc6IHRydWUsXG4gIGhpZ2hsaWdodDogZmFsc2UsXG4gIGluZGVudDogMixcbiAgbWF4RGVwdGg6IEluZmluaXR5LFxuICBtaW46IGZhbHNlLFxuICBwbHVnaW5zOiBbXSxcbiAgcHJpbnRCYXNpY1Byb3RvdHlwZTogdHJ1ZSxcbiAgcHJpbnRGdW5jdGlvbk5hbWU6IHRydWUsXG4gIHRoZW1lOiBERUZBVUxUX1RIRU1FXG59O1xuZXhwb3J0cy5ERUZBVUxUX09QVElPTlMgPSBERUZBVUxUX09QVElPTlM7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoIURFRkFVTFRfT1BUSU9OUy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXR0eS1mb3JtYXQ6IFVua25vd24gb3B0aW9uIFwiJHtrZXl9XCIuYCk7XG4gICAgfVxuICB9KTtcblxuICBpZiAob3B0aW9ucy5taW4gJiYgb3B0aW9ucy5pbmRlbnQgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmluZGVudCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdwcmV0dHktZm9ybWF0OiBPcHRpb25zIFwibWluXCIgYW5kIFwiaW5kZW50XCIgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuJ1xuICAgICk7XG4gIH1cblxuICBpZiAob3B0aW9ucy50aGVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKG9wdGlvbnMudGhlbWUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJldHR5LWZvcm1hdDogT3B0aW9uIFwidGhlbWVcIiBtdXN0IG5vdCBiZSBudWxsLmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50aGVtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHByZXR0eS1mb3JtYXQ6IE9wdGlvbiBcInRoZW1lXCIgbXVzdCBiZSBvZiB0eXBlIFwib2JqZWN0XCIgYnV0IGluc3RlYWQgcmVjZWl2ZWQgXCIke3R5cGVvZiBvcHRpb25zLnRoZW1lfVwiLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGdldENvbG9yc0hpZ2hsaWdodCA9IG9wdGlvbnMgPT5cbiAgREVGQVVMVF9USEVNRV9LRVlTLnJlZHVjZSgoY29sb3JzLCBrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICBvcHRpb25zLnRoZW1lICYmIG9wdGlvbnMudGhlbWVba2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gb3B0aW9ucy50aGVtZVtrZXldXG4gICAgICAgIDogREVGQVVMVF9USEVNRVtrZXldO1xuICAgIGNvbnN0IGNvbG9yID0gdmFsdWUgJiYgX2Fuc2lTdHlsZXMuZGVmYXVsdFt2YWx1ZV07XG5cbiAgICBpZiAoXG4gICAgICBjb2xvciAmJlxuICAgICAgdHlwZW9mIGNvbG9yLmNsb3NlID09PSAnc3RyaW5nJyAmJlxuICAgICAgdHlwZW9mIGNvbG9yLm9wZW4gPT09ICdzdHJpbmcnXG4gICAgKSB7XG4gICAgICBjb2xvcnNba2V5XSA9IGNvbG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBwcmV0dHktZm9ybWF0OiBPcHRpb24gXCJ0aGVtZVwiIGhhcyBhIGtleSBcIiR7a2V5fVwiIHdob3NlIHZhbHVlIFwiJHt2YWx1ZX1cIiBpcyB1bmRlZmluZWQgaW4gYW5zaS1zdHlsZXMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3JzO1xuICB9LCBPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3QgZ2V0Q29sb3JzRW1wdHkgPSAoKSA9PlxuICBERUZBVUxUX1RIRU1FX0tFWVMucmVkdWNlKChjb2xvcnMsIGtleSkgPT4ge1xuICAgIGNvbG9yc1trZXldID0ge1xuICAgICAgY2xvc2U6ICcnLFxuICAgICAgb3BlbjogJydcbiAgICB9O1xuICAgIHJldHVybiBjb2xvcnM7XG4gIH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBnZXRQcmludEZ1bmN0aW9uTmFtZSA9IG9wdGlvbnMgPT5cbiAgb3B0aW9ucyAmJiBvcHRpb25zLnByaW50RnVuY3Rpb25OYW1lICE9PSB1bmRlZmluZWRcbiAgICA/IG9wdGlvbnMucHJpbnRGdW5jdGlvbk5hbWVcbiAgICA6IERFRkFVTFRfT1BUSU9OUy5wcmludEZ1bmN0aW9uTmFtZTtcblxuY29uc3QgZ2V0RXNjYXBlUmVnZXggPSBvcHRpb25zID0+XG4gIG9wdGlvbnMgJiYgb3B0aW9ucy5lc2NhcGVSZWdleCAhPT0gdW5kZWZpbmVkXG4gICAgPyBvcHRpb25zLmVzY2FwZVJlZ2V4XG4gICAgOiBERUZBVUxUX09QVElPTlMuZXNjYXBlUmVnZXg7XG5cbmNvbnN0IGdldEVzY2FwZVN0cmluZyA9IG9wdGlvbnMgPT5cbiAgb3B0aW9ucyAmJiBvcHRpb25zLmVzY2FwZVN0cmluZyAhPT0gdW5kZWZpbmVkXG4gICAgPyBvcHRpb25zLmVzY2FwZVN0cmluZ1xuICAgIDogREVGQVVMVF9PUFRJT05TLmVzY2FwZVN0cmluZztcblxuY29uc3QgZ2V0Q29uZmlnID0gb3B0aW9ucyA9PiB7XG4gIHZhciBfb3B0aW9ucyRwcmludEJhc2ljUHI7XG5cbiAgcmV0dXJuIHtcbiAgICBjYWxsVG9KU09OOlxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNhbGxUb0pTT04gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG9wdGlvbnMuY2FsbFRvSlNPTlxuICAgICAgICA6IERFRkFVTFRfT1BUSU9OUy5jYWxsVG9KU09OLFxuICAgIGNvbG9yczpcbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5oaWdobGlnaHRcbiAgICAgICAgPyBnZXRDb2xvcnNIaWdobGlnaHQob3B0aW9ucylcbiAgICAgICAgOiBnZXRDb2xvcnNFbXB0eSgpLFxuICAgIGNvbXBhcmVLZXlzOlxuICAgICAgb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5jb21wYXJlS2V5cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IG9wdGlvbnMuY29tcGFyZUtleXNcbiAgICAgICAgOiBERUZBVUxUX09QVElPTlMuY29tcGFyZUtleXMsXG4gICAgZXNjYXBlUmVnZXg6IGdldEVzY2FwZVJlZ2V4KG9wdGlvbnMpLFxuICAgIGVzY2FwZVN0cmluZzogZ2V0RXNjYXBlU3RyaW5nKG9wdGlvbnMpLFxuICAgIGluZGVudDpcbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5taW5cbiAgICAgICAgPyAnJ1xuICAgICAgICA6IGNyZWF0ZUluZGVudChcbiAgICAgICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5pbmRlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG9wdGlvbnMuaW5kZW50XG4gICAgICAgICAgICAgIDogREVGQVVMVF9PUFRJT05TLmluZGVudFxuICAgICAgICAgICksXG4gICAgbWF4RGVwdGg6XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMubWF4RGVwdGggIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG9wdGlvbnMubWF4RGVwdGhcbiAgICAgICAgOiBERUZBVUxUX09QVElPTlMubWF4RGVwdGgsXG4gICAgbWluOlxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLm1pbiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5taW4gOiBERUZBVUxUX09QVElPTlMubWluLFxuICAgIHBsdWdpbnM6XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMucGx1Z2lucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gb3B0aW9ucy5wbHVnaW5zXG4gICAgICAgIDogREVGQVVMVF9PUFRJT05TLnBsdWdpbnMsXG4gICAgcHJpbnRCYXNpY1Byb3RvdHlwZTpcbiAgICAgIChfb3B0aW9ucyRwcmludEJhc2ljUHIgPVxuICAgICAgICBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMFxuICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgOiBvcHRpb25zLnByaW50QmFzaWNQcm90b3R5cGUpICE9PSBudWxsICYmXG4gICAgICBfb3B0aW9ucyRwcmludEJhc2ljUHIgIT09IHZvaWQgMFxuICAgICAgICA/IF9vcHRpb25zJHByaW50QmFzaWNQclxuICAgICAgICA6IHRydWUsXG4gICAgcHJpbnRGdW5jdGlvbk5hbWU6IGdldFByaW50RnVuY3Rpb25OYW1lKG9wdGlvbnMpLFxuICAgIHNwYWNpbmdJbm5lcjogb3B0aW9ucyAmJiBvcHRpb25zLm1pbiA/ICcgJyA6ICdcXG4nLFxuICAgIHNwYWNpbmdPdXRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm1pbiA/ICcnIDogJ1xcbidcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUluZGVudChpbmRlbnQpIHtcbiAgcmV0dXJuIG5ldyBBcnJheShpbmRlbnQgKyAxKS5qb2luKCcgJyk7XG59XG4vKipcbiAqIFJldHVybnMgYSBwcmVzZW50YXRpb24gc3RyaW5nIG9mIHlvdXIgYHZhbGAgb2JqZWN0XG4gKiBAcGFyYW0gdmFsIGFueSBwb3RlbnRpYWwgSmF2YVNjcmlwdCBvYmplY3RcbiAqIEBwYXJhbSBvcHRpb25zIEN1c3RvbSBzZXR0aW5nc1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdCh2YWwsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5wbHVnaW5zKSB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBmaW5kUGx1Z2luKG9wdGlvbnMucGx1Z2lucywgdmFsKTtcblxuICAgICAgaWYgKHBsdWdpbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJpbnRQbHVnaW4ocGx1Z2luLCB2YWwsIGdldENvbmZpZyhvcHRpb25zKSwgJycsIDAsIFtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBiYXNpY1Jlc3VsdCA9IHByaW50QmFzaWNWYWx1ZShcbiAgICB2YWwsXG4gICAgZ2V0UHJpbnRGdW5jdGlvbk5hbWUob3B0aW9ucyksXG4gICAgZ2V0RXNjYXBlUmVnZXgob3B0aW9ucyksXG4gICAgZ2V0RXNjYXBlU3RyaW5nKG9wdGlvbnMpXG4gICk7XG5cbiAgaWYgKGJhc2ljUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGJhc2ljUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHByaW50Q29tcGxleFZhbHVlKHZhbCwgZ2V0Q29uZmlnKG9wdGlvbnMpLCAnJywgMCwgW10pO1xufVxuXG5jb25zdCBwbHVnaW5zID0ge1xuICBBc3ltbWV0cmljTWF0Y2hlcjogX0FzeW1tZXRyaWNNYXRjaGVyLmRlZmF1bHQsXG4gIENvbnZlcnRBbnNpOiBfQ29udmVydEFuc2kuZGVmYXVsdCxcbiAgRE9NQ29sbGVjdGlvbjogX0RPTUNvbGxlY3Rpb24uZGVmYXVsdCxcbiAgRE9NRWxlbWVudDogX0RPTUVsZW1lbnQuZGVmYXVsdCxcbiAgSW1tdXRhYmxlOiBfSW1tdXRhYmxlLmRlZmF1bHQsXG4gIFJlYWN0RWxlbWVudDogX1JlYWN0RWxlbWVudC5kZWZhdWx0LFxuICBSZWFjdFRlc3RDb21wb25lbnQ6IF9SZWFjdFRlc3RDb21wb25lbnQuZGVmYXVsdFxufTtcbmV4cG9ydHMucGx1Z2lucyA9IHBsdWdpbnM7XG52YXIgX2RlZmF1bHQgPSBmb3JtYXQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBQbHVnaW4gYXMgUHJldHR5Rm9ybWF0UGx1Z2luLFxuICBQbHVnaW5zIGFzIFByZXR0eUZvcm1hdFBsdWdpbnMsXG59IGZyb20gJ3ByZXR0eS1mb3JtYXQnXG5pbXBvcnQge1xuICBwbHVnaW5zIGFzIHByZXR0eUZvcm1hdFBsdWdpbnMsXG59IGZyb20gJ3ByZXR0eS1mb3JtYXQnXG5cbmNvbnN0IHtcbiAgRE9NQ29sbGVjdGlvbixcbiAgRE9NRWxlbWVudCxcbiAgSW1tdXRhYmxlLFxuICBSZWFjdEVsZW1lbnQsXG4gIFJlYWN0VGVzdENvbXBvbmVudCxcbiAgQXN5bW1ldHJpY01hdGNoZXIsXG59ID0gcHJldHR5Rm9ybWF0UGx1Z2luc1xuXG5sZXQgUExVR0lOUzogUHJldHR5Rm9ybWF0UGx1Z2lucyA9IFtcbiAgUmVhY3RUZXN0Q29tcG9uZW50LFxuICBSZWFjdEVsZW1lbnQsXG4gIERPTUVsZW1lbnQsXG4gIERPTUNvbGxlY3Rpb24sXG4gIEltbXV0YWJsZSxcbiAgQXN5bW1ldHJpY01hdGNoZXIsXG4gIC8vIFRPRE86IHdyaXRlIHNpbm9uIG1vY2sgc2VyaWFsaXplclxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svamVzdC9ibG9iLzRlYjRmNmE1OWI2ZWFlMGUwNWI4ZTUxZGQ4Y2QzZmRjYTFjN2FmZjEvcGFja2FnZXMvamVzdC1zbmFwc2hvdC9zcmMvbW9ja1NlcmlhbGl6ZXIudHMjTDRcbl1cblxuLy8gVE9ETzogZXhwb3NlIHRoZXNlIGFuZCBhbGxvdyB1c2VyIHRvIGFkZCBjdXN0b20gc2VyaWFsaXplcnNcbi8vIFByZXBlbmQgdG8gbGlzdCBzbyB0aGUgbGFzdCBhZGRlZCBpcyB0aGUgZmlyc3QgdGVzdGVkLlxuZXhwb3J0IGNvbnN0IGFkZFNlcmlhbGl6ZXIgPSAocGx1Z2luOiBQcmV0dHlGb3JtYXRQbHVnaW4pOiB2b2lkID0+IHtcbiAgUExVR0lOUyA9IFtwbHVnaW5dLmNvbmNhdChQTFVHSU5TKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0U2VyaWFsaXplcnMgPSAoKTogUHJldHR5Rm9ybWF0UGx1Z2lucyA9PiBQTFVHSU5TXG4iLCIvKlxuQ29weXJpZ2h0IChjKSAyMDA4LTIwMTYgUGl2b3RhbCBMYWJzXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG5cIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbndpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbmRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xucGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG50aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG5pbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbkVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbk5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkVcbkxJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT05cbk9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbiovXG5cbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFRlc3RlciB9IGZyb20gJy4vdHlwZXMnXG5cbi8vIEV4dHJhY3RlZCBvdXQgb2YgamFzbWluZSAyLjUuMlxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhcbiAgYTogdW5rbm93bixcbiAgYjogdW5rbm93bixcbiAgY3VzdG9tVGVzdGVycz86IEFycmF5PFRlc3Rlcj4sXG4gIHN0cmljdENoZWNrPzogYm9vbGVhbixcbik6IGJvb2xlYW4ge1xuICBjdXN0b21UZXN0ZXJzID0gY3VzdG9tVGVzdGVycyB8fCBbXVxuICByZXR1cm4gZXEoYSwgYiwgW10sIFtdLCBjdXN0b21UZXN0ZXJzLCBzdHJpY3RDaGVjayA/IGhhc0tleSA6IGhhc0RlZmluZWRLZXkpXG59XG5cbmNvbnN0IGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmdcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bW1ldHJpYyhvYmo6IGFueSkge1xuICByZXR1cm4gISFvYmogJiYgaXNBKCdGdW5jdGlvbicsIG9iai5hc3ltbWV0cmljTWF0Y2gpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNBc3ltbWV0cmljKG9iajogYW55LCBzZWVuID0gbmV3IFNldCgpKTogYm9vbGVhbiB7XG4gIGlmIChzZWVuLmhhcyhvYmopKVxuICAgIHJldHVybiBmYWxzZVxuICBzZWVuLmFkZChvYmopXG4gIGlmIChpc0FzeW1tZXRyaWMob2JqKSlcbiAgICByZXR1cm4gdHJ1ZVxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKVxuICAgIHJldHVybiBvYmouc29tZShpID0+IGhhc0FzeW1tZXRyaWMoaSwgc2VlbikpXG4gIGlmIChvYmogaW5zdGFuY2VvZiBTZXQpXG4gICAgcmV0dXJuIEFycmF5LmZyb20ob2JqKS5zb21lKGkgPT4gaGFzQXN5bW1ldHJpYyhpLCBzZWVuKSlcbiAgaWYgKGlzT2JqZWN0KG9iaikpXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMob2JqKS5zb21lKHYgPT4gaGFzQXN5bW1ldHJpYyh2LCBzZWVuKSlcbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGFzeW1tZXRyaWNNYXRjaChhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCBhc3ltbWV0cmljQSA9IGlzQXN5bW1ldHJpYyhhKVxuICBjb25zdCBhc3ltbWV0cmljQiA9IGlzQXN5bW1ldHJpYyhiKVxuXG4gIGlmIChhc3ltbWV0cmljQSAmJiBhc3ltbWV0cmljQilcbiAgICByZXR1cm4gdW5kZWZpbmVkXG5cbiAgaWYgKGFzeW1tZXRyaWNBKVxuICAgIHJldHVybiBhLmFzeW1tZXRyaWNNYXRjaChiKVxuXG4gIGlmIChhc3ltbWV0cmljQilcbiAgICByZXR1cm4gYi5hc3ltbWV0cmljTWF0Y2goYSlcbn1cblxuLy8gRXF1YWxpdHkgZnVuY3Rpb24gbG92aW5nbHkgYWRhcHRlZCBmcm9tIGlzRXF1YWwgaW5cbi8vICAgW1VuZGVyc2NvcmVdKGh0dHA6Ly91bmRlcnNjb3JlanMub3JnKVxuZnVuY3Rpb24gZXEoXG4gIGE6IGFueSxcbiAgYjogYW55LFxuICBhU3RhY2s6IEFycmF5PHVua25vd24+LFxuICBiU3RhY2s6IEFycmF5PHVua25vd24+LFxuICBjdXN0b21UZXN0ZXJzOiBBcnJheTxUZXN0ZXI+LFxuICBoYXNLZXk6IGFueSxcbik6IGJvb2xlYW4ge1xuICBsZXQgcmVzdWx0ID0gdHJ1ZVxuXG4gIGNvbnN0IGFzeW1tZXRyaWNSZXN1bHQgPSBhc3ltbWV0cmljTWF0Y2goYSwgYilcbiAgaWYgKGFzeW1tZXRyaWNSZXN1bHQgIT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gYXN5bW1ldHJpY1Jlc3VsdFxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY3VzdG9tVGVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1c3RvbVRlc3RlclJlc3VsdCA9IGN1c3RvbVRlc3RlcnNbaV0oYSwgYilcbiAgICBpZiAoY3VzdG9tVGVzdGVyUmVzdWx0ICE9PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gY3VzdG9tVGVzdGVyUmVzdWx0XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIEVycm9yICYmIGIgaW5zdGFuY2VvZiBFcnJvcilcbiAgICByZXR1cm4gYS5tZXNzYWdlID09PSBiLm1lc3NhZ2VcblxuICBpZiAoT2JqZWN0LmlzKGEsIGIpKVxuICAgIHJldHVybiB0cnVlXG5cbiAgLy8gQSBzdHJpY3QgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBgbnVsbCA9PSB1bmRlZmluZWRgLlxuICBpZiAoYSA9PT0gbnVsbCB8fCBiID09PSBudWxsKVxuICAgIHJldHVybiBhID09PSBiXG5cbiAgY29uc3QgY2xhc3NOYW1lID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpXG4gIGlmIChjbGFzc05hbWUgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiKSlcbiAgICByZXR1cm4gZmFsc2VcblxuICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzpcbiAgICAgIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICAgICAgLy8gT25lIGlzIGEgcHJpbWl0aXZlLCBvbmUgYSBgbmV3IFByaW1pdGl2ZSgpYFxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGVvZiBhICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gYm90aCBhcmUgcHJvcGVyIHByaW1pdGl2ZXNcbiAgICAgICAgcmV0dXJuIE9iamVjdC5pcyhhLCBiKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIGJvdGggYXJlIGBuZXcgUHJpbWl0aXZlKClgc1xuICAgICAgICByZXR1cm4gT2JqZWN0LmlzKGEudmFsdWVPZigpLCBiLnZhbHVlT2YoKSlcbiAgICAgIH1cbiAgICBjYXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIC8vIENvZXJjZSBkYXRlcyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpclxuICAgICAgLy8gbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zLiBOb3RlIHRoYXQgaW52YWxpZCBkYXRlcyB3aXRoIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9uc1xuICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgcmV0dXJuICthID09PSArYlxuICAgIC8vIFJlZ0V4cHMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIHNvdXJjZSBwYXR0ZXJucyBhbmQgZmxhZ3MuXG4gICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgIHJldHVybiBhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiYgYS5mbGFncyA9PT0gYi5mbGFnc1xuICB9XG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIC8vIFVzZSBET00zIG1ldGhvZCBpc0VxdWFsTm9kZSAoSUU+PTkpXG4gIGlmIChpc0RvbU5vZGUoYSkgJiYgaXNEb21Ob2RlKGIpKVxuICAgIHJldHVybiBhLmlzRXF1YWxOb2RlKGIpXG5cbiAgLy8gVXNlZCB0byBkZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbiAgbGV0IGxlbmd0aCA9IGFTdGFjay5sZW5ndGhcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgIC8vIGNpcmN1bGFyIHJlZmVyZW5jZXMgYXQgc2FtZSBkZXB0aCBhcmUgZXF1YWxcbiAgICAvLyBjaXJjdWxhciByZWZlcmVuY2UgaXMgbm90IGVxdWFsIHRvIG5vbi1jaXJjdWxhciBvbmVcbiAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpXG4gICAgICByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGJcblxuICAgIGVsc2UgaWYgKGJTdGFja1tsZW5ndGhdID09PSBiKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgLy8gQWRkIHRoZSBmaXJzdCBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICBhU3RhY2sucHVzaChhKVxuICBiU3RhY2sucHVzaChiKVxuICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgLy8gQ29tcGFyZSBhcnJheSBsZW5ndGhzIHRvIGRldGVybWluZSBpZiBhIGRlZXAgY29tcGFyaXNvbiBpcyBuZWNlc3NhcnkuXG4gIGlmIChjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XScgJiYgYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICBjb25zdCBhS2V5cyA9IGtleXMoYSwgaGFzS2V5KVxuICBsZXQga2V5XG4gIGxldCBzaXplID0gYUtleXMubGVuZ3RoXG5cbiAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICBpZiAoa2V5cyhiLCBoYXNLZXkpLmxlbmd0aCAhPT0gc2l6ZSlcbiAgICByZXR1cm4gZmFsc2VcblxuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAga2V5ID0gYUtleXNbc2l6ZV1cblxuICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlclxuICAgIHJlc3VsdFxuICAgICAgPSBoYXNLZXkoYiwga2V5KVxuICAgICAgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrLCBjdXN0b21UZXN0ZXJzLCBoYXNLZXkpXG5cbiAgICBpZiAoIXJlc3VsdClcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG4gIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICBhU3RhY2sucG9wKClcbiAgYlN0YWNrLnBvcCgpXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBrZXlzKG9iajogb2JqZWN0LCBoYXNLZXk6IChvYmo6IG9iamVjdCwga2V5OiBzdHJpbmcpID0+IGJvb2xlYW4pIHtcbiAgY29uc3Qga2V5cyA9IFtdXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzS2V5KG9iaiwga2V5KSlcbiAgICAgIGtleXMucHVzaChrZXkpXG4gIH1cbiAgcmV0dXJuIGtleXMuY29uY2F0KFxuICAgIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikgYXMgQXJyYXk8YW55PikuZmlsdGVyKFxuICAgICAgc3ltYm9sID0+XG4gICAgICAgIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltYm9sKSBhcyBQcm9wZXJ0eURlc2NyaXB0b3IpXG4gICAgICAgICAgLmVudW1lcmFibGUsXG4gICAgKSxcbiAgKVxufVxuXG5mdW5jdGlvbiBoYXNEZWZpbmVkS2V5KG9iajogYW55LCBrZXk6IHN0cmluZykge1xuICByZXR1cm4gaGFzS2V5KG9iaiwga2V5KSAmJiBvYmpba2V5XSAhPT0gdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGhhc0tleShvYmo6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQSh0eXBlTmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09IGBbb2JqZWN0ICR7dHlwZU5hbWV9XWBcbn1cblxuZnVuY3Rpb24gaXNEb21Ob2RlKG9iajogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgb2JqICE9PSBudWxsXG4gICAgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbiAgICAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlID09PSAnbnVtYmVyJ1xuICAgICYmIHR5cGVvZiBvYmoubm9kZU5hbWUgPT09ICdzdHJpbmcnXG4gICAgJiYgdHlwZW9mIG9iai5pc0VxdWFsTm9kZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbk5hbWVGb3IoZnVuYzogRnVuY3Rpb24pIHtcbiAgaWYgKGZ1bmMubmFtZSlcbiAgICByZXR1cm4gZnVuYy5uYW1lXG5cbiAgY29uc3QgbWF0Y2hlcyA9IGZ1bmN0aW9uVG9TdHJpbmdcbiAgICAuY2FsbChmdW5jKVxuICAgIC5tYXRjaCgvXig/OmFzeW5jKT9cXHMqZnVuY3Rpb25cXHMqXFwqP1xccyooW1xcdyRdKylcXHMqXFwoLylcbiAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzWzFdIDogJzxhbm9ueW1vdXM+J1xufVxuXG5mdW5jdGlvbiBnZXRQcm90b3R5cGUob2JqOiBvYmplY3QpIHtcbiAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZilcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iailcblxuICBpZiAob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gb2JqKVxuICAgIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BlcnR5KG9iajogb2JqZWN0IHwgbnVsbCwgcHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIW9iailcbiAgICByZXR1cm4gZmFsc2VcblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcGVydHkpKVxuICAgIHJldHVybiB0cnVlXG5cbiAgcmV0dXJuIGhhc1Byb3BlcnR5KGdldFByb3RvdHlwZShvYmopLCBwcm9wZXJ0eSlcbn1cblxuLy8gU0VOVElORUwgY29uc3RhbnRzIGFyZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9pbW11dGFibGUtanNcbmNvbnN0IElTX0tFWUVEX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfS0VZRURfX0BAJ1xuY29uc3QgSVNfU0VUX1NFTlRJTkVMID0gJ0BAX19JTU1VVEFCTEVfU0VUX19AQCdcbmNvbnN0IElTX09SREVSRURfU0VOVElORUwgPSAnQEBfX0lNTVVUQUJMRV9PUkRFUkVEX19AQCdcblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1tdXRhYmxlVW5vcmRlcmVkS2V5ZWQobWF5YmVLZXllZDogYW55KSB7XG4gIHJldHVybiAhIShcbiAgICBtYXliZUtleWVkXG4gICAgJiYgbWF5YmVLZXllZFtJU19LRVlFRF9TRU5USU5FTF1cbiAgICAmJiAhbWF5YmVLZXllZFtJU19PUkRFUkVEX1NFTlRJTkVMXVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ltbXV0YWJsZVVub3JkZXJlZFNldChtYXliZVNldDogYW55KSB7XG4gIHJldHVybiAhIShcbiAgICBtYXliZVNldFxuICAgICYmIG1heWJlU2V0W0lTX1NFVF9TRU5USU5FTF1cbiAgICAmJiAhbWF5YmVTZXRbSVNfT1JERVJFRF9TRU5USU5FTF1cbiAgKVxufVxuXG4vKipcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuY29uc3QgSXRlcmF0b3JTeW1ib2wgPSBTeW1ib2wuaXRlcmF0b3JcblxuY29uc3QgaGFzSXRlcmF0b3IgPSAob2JqZWN0OiBhbnkpID0+XG4gICEhKG9iamVjdCAhPSBudWxsICYmIG9iamVjdFtJdGVyYXRvclN5bWJvbF0pXG5cbmV4cG9ydCBjb25zdCBpdGVyYWJsZUVxdWFsaXR5ID0gKFxuICBhOiBhbnksXG4gIGI6IGFueSxcbiAgYVN0YWNrOiBBcnJheTxhbnk+ID0gW10sXG4gIGJTdGFjazogQXJyYXk8YW55PiA9IFtdLFxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChcbiAgICB0eXBlb2YgYSAhPT0gJ29iamVjdCdcbiAgICB8fCB0eXBlb2YgYiAhPT0gJ29iamVjdCdcbiAgICB8fCBBcnJheS5pc0FycmF5KGEpXG4gICAgfHwgQXJyYXkuaXNBcnJheShiKVxuICAgIHx8ICFoYXNJdGVyYXRvcihhKVxuICAgIHx8ICFoYXNJdGVyYXRvcihiKVxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGlmIChhLmNvbnN0cnVjdG9yICE9PSBiLmNvbnN0cnVjdG9yKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIGxldCBsZW5ndGggPSBhU3RhY2subGVuZ3RoXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZlxuICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAvLyBjaXJjdWxhciByZWZlcmVuY2VzIGF0IHNhbWUgZGVwdGggYXJlIGVxdWFsXG4gICAgLy8gY2lyY3VsYXIgcmVmZXJlbmNlIGlzIG5vdCBlcXVhbCB0byBub24tY2lyY3VsYXIgb25lXG4gICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKVxuICAgICAgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiXG4gIH1cbiAgYVN0YWNrLnB1c2goYSlcbiAgYlN0YWNrLnB1c2goYilcblxuICBjb25zdCBpdGVyYWJsZUVxdWFsaXR5V2l0aFN0YWNrID0gKGE6IGFueSwgYjogYW55KSA9PlxuICAgIGl0ZXJhYmxlRXF1YWxpdHkoYSwgYiwgWy4uLmFTdGFja10sIFsuLi5iU3RhY2tdKVxuXG4gIGlmIChhLnNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQSgnU2V0JywgYSkgfHwgaXNJbW11dGFibGVVbm9yZGVyZWRTZXQoYSkpIHtcbiAgICAgIGxldCBhbGxGb3VuZCA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgYVZhbHVlIG9mIGEpIHtcbiAgICAgICAgaWYgKCFiLmhhcyhhVmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGhhcyA9IGZhbHNlXG4gICAgICAgICAgZm9yIChjb25zdCBiVmFsdWUgb2YgYikge1xuICAgICAgICAgICAgY29uc3QgaXNFcXVhbCA9IGVxdWFscyhhVmFsdWUsIGJWYWx1ZSwgW2l0ZXJhYmxlRXF1YWxpdHlXaXRoU3RhY2tdKVxuICAgICAgICAgICAgaWYgKGlzRXF1YWwgPT09IHRydWUpXG4gICAgICAgICAgICAgIGhhcyA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYWxsRm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIHZhbHVlcy5cbiAgICAgIGFTdGFjay5wb3AoKVxuICAgICAgYlN0YWNrLnBvcCgpXG4gICAgICByZXR1cm4gYWxsRm91bmRcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBKCdNYXAnLCBhKSB8fCBpc0ltbXV0YWJsZVVub3JkZXJlZEtleWVkKGEpKSB7XG4gICAgICBsZXQgYWxsRm91bmQgPSB0cnVlXG4gICAgICBmb3IgKGNvbnN0IGFFbnRyeSBvZiBhKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhYi5oYXMoYUVudHJ5WzBdKVxuICAgICAgICAgIHx8ICFlcXVhbHMoYUVudHJ5WzFdLCBiLmdldChhRW50cnlbMF0pLCBbaXRlcmFibGVFcXVhbGl0eVdpdGhTdGFja10pXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBoYXMgPSBmYWxzZVxuICAgICAgICAgIGZvciAoY29uc3QgYkVudHJ5IG9mIGIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRLZXkgPSBlcXVhbHMoYUVudHJ5WzBdLCBiRW50cnlbMF0sIFtcbiAgICAgICAgICAgICAgaXRlcmFibGVFcXVhbGl0eVdpdGhTdGFjayxcbiAgICAgICAgICAgIF0pXG5cbiAgICAgICAgICAgIGxldCBtYXRjaGVkVmFsdWUgPSBmYWxzZVxuICAgICAgICAgICAgaWYgKG1hdGNoZWRLZXkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgbWF0Y2hlZFZhbHVlID0gZXF1YWxzKGFFbnRyeVsxXSwgYkVudHJ5WzFdLCBbXG4gICAgICAgICAgICAgICAgaXRlcmFibGVFcXVhbGl0eVdpdGhTdGFjayxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaGVkVmFsdWUgPT09IHRydWUpXG4gICAgICAgICAgICAgIGhhcyA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYWxsRm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIHZhbHVlcy5cbiAgICAgIGFTdGFjay5wb3AoKVxuICAgICAgYlN0YWNrLnBvcCgpXG4gICAgICByZXR1cm4gYWxsRm91bmRcbiAgICB9XG4gIH1cblxuICBjb25zdCBiSXRlcmF0b3IgPSBiW0l0ZXJhdG9yU3ltYm9sXSgpXG5cbiAgZm9yIChjb25zdCBhVmFsdWUgb2YgYSkge1xuICAgIGNvbnN0IG5leHRCID0gYkl0ZXJhdG9yLm5leHQoKVxuICAgIGlmIChcbiAgICAgIG5leHRCLmRvbmVcbiAgICAgIHx8ICFlcXVhbHMoYVZhbHVlLCBuZXh0Qi52YWx1ZSwgW2l0ZXJhYmxlRXF1YWxpdHlXaXRoU3RhY2tdKVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICghYkl0ZXJhdG9yLm5leHQoKS5kb25lKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIC8vIFJlbW92ZSB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIHZhbHVlcy5cbiAgYVN0YWNrLnBvcCgpXG4gIGJTdGFjay5wb3AoKVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgaGFzT3duUHJvcGVydHkob2JqZWN0LCBrZXkpYCB1cCB0aGUgcHJvdG90eXBlIGNoYWluLCBzdG9wcGluZyBhdCBgT2JqZWN0LnByb3RvdHlwZWAuXG4gKi9cbmNvbnN0IGhhc1Byb3BlcnR5SW5PYmplY3QgPSAob2JqZWN0OiBvYmplY3QsIGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHNob3VsZFRlcm1pbmF0ZVxuICAgID0gIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBvYmplY3QgPT09IE9iamVjdC5wcm90b3R5cGVcblxuICBpZiAoc2hvdWxkVGVybWluYXRlKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiAoXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KVxuICAgIHx8IGhhc1Byb3BlcnR5SW5PYmplY3QoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCksIGtleSlcbiAgKVxufVxuXG5jb25zdCBpc09iamVjdFdpdGhLZXlzID0gKGE6IGFueSkgPT5cbiAgaXNPYmplY3QoYSlcbiAgJiYgIShhIGluc3RhbmNlb2YgRXJyb3IpXG4gICYmICEoYSBpbnN0YW5jZW9mIEFycmF5KVxuICAmJiAhKGEgaW5zdGFuY2VvZiBEYXRlKVxuXG5leHBvcnQgY29uc3Qgc3Vic2V0RXF1YWxpdHkgPSAoXG4gIG9iamVjdDogdW5rbm93bixcbiAgc3Vic2V0OiB1bmtub3duLFxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9PiB7XG4gIC8vIHN1YnNldEVxdWFsaXR5IG5lZWRzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHJlZmVyZW5jZXNcbiAgLy8gaXQgaGFzIGFscmVhZHkgdmlzaXRlZCB0byBhdm9pZCBpbmZpbml0ZSBsb29wcyBpbiBjYXNlXG4gIC8vIHRoZXJlIGFyZSBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSBzdWJzZXQgcGFzc2VkIHRvIGl0LlxuICBjb25zdCBzdWJzZXRFcXVhbGl0eVdpdGhDb250ZXh0XG4gICAgPSAoc2VlblJlZmVyZW5jZXM6IFdlYWtNYXA8b2JqZWN0LCBib29sZWFuPiA9IG5ldyBXZWFrTWFwKCkpID0+XG4gICAgICAob2JqZWN0OiBhbnksIHN1YnNldDogYW55KTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGlmICghaXNPYmplY3RXaXRoS2V5cyhzdWJzZXQpKVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc3Vic2V0KS5ldmVyeSgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGlzT2JqZWN0V2l0aEtleXMoc3Vic2V0W2tleV0pKSB7XG4gICAgICAgICAgICBpZiAoc2VlblJlZmVyZW5jZXMuaGFzKHN1YnNldFtrZXldKSlcbiAgICAgICAgICAgICAgcmV0dXJuIGVxdWFscyhvYmplY3Rba2V5XSwgc3Vic2V0W2tleV0sIFtpdGVyYWJsZUVxdWFsaXR5XSlcblxuICAgICAgICAgICAgc2VlblJlZmVyZW5jZXMuc2V0KHN1YnNldFtrZXldLCB0cnVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXN1bHRcbiAgICAgICAgICA9IG9iamVjdCAhPSBudWxsXG4gICAgICAgICAgJiYgaGFzUHJvcGVydHlJbk9iamVjdChvYmplY3QsIGtleSlcbiAgICAgICAgICAmJiBlcXVhbHMob2JqZWN0W2tleV0sIHN1YnNldFtrZXldLCBbXG4gICAgICAgICAgICBpdGVyYWJsZUVxdWFsaXR5LFxuICAgICAgICAgICAgc3Vic2V0RXF1YWxpdHlXaXRoQ29udGV4dChzZWVuUmVmZXJlbmNlcyksXG4gICAgICAgICAgXSlcbiAgICAgICAgICAvLyBUaGUgbWFpbiBnb2FsIG9mIHVzaW5nIHNlZW5SZWZlcmVuY2UgaXMgdG8gYXZvaWQgY2lyY3VsYXIgbm9kZSBvbiB0cmVlLlxuICAgICAgICAgIC8vIEl0IHdpbGwgb25seSBoYXBwZW4gd2l0aGluIGEgcGFyZW50IGFuZCBpdHMgY2hpbGQsIG5vdCBhIG5vZGUgYW5kIG5vZGVzIG5leHQgdG8gaXQgKHNhbWUgbGV2ZWwpXG4gICAgICAgICAgLy8gV2Ugc2hvdWxkIGtlZXAgdGhlIHJlZmVyZW5jZSBmb3IgYSBwYXJlbnQgYW5kIGl0cyBjaGlsZCBvbmx5XG4gICAgICAgICAgLy8gVGh1cyB3ZSBzaG91bGQgZGVsZXRlIHRoZSByZWZlcmVuY2UgaW1tZWRpYXRlbHkgc28gdGhhdCBpdCBkb2Vzbid0IGludGVyZmVyZVxuICAgICAgICAgIC8vIG90aGVyIG5vZGVzIHdpdGhpbiB0aGUgc2FtZSBsZXZlbCBvbiB0cmVlLlxuICAgICAgICAgIHNlZW5SZWZlcmVuY2VzLmRlbGV0ZShzdWJzZXRba2V5XSlcbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgcmV0dXJuIHN1YnNldEVxdWFsaXR5V2l0aENvbnRleHQoKShvYmplY3QsIHN1YnNldClcbn1cblxuZXhwb3J0IGNvbnN0IHR5cGVFcXVhbGl0eSA9IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCB8fCBhLmNvbnN0cnVjdG9yID09PSBiLmNvbnN0cnVjdG9yKVxuICAgIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGFycmF5QnVmZmVyRXF1YWxpdHkgPSAoXG4gIGE6IHVua25vd24sXG4gIGI6IHVua25vd24sXG4pOiBib29sZWFuIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAhKGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGRhdGFWaWV3QSA9IG5ldyBEYXRhVmlldyhhKVxuICBjb25zdCBkYXRhVmlld0IgPSBuZXcgRGF0YVZpZXcoYilcblxuICAvLyBCdWZmZXJzIGFyZSBub3QgZXF1YWwgd2hlbiB0aGV5IGRvIG5vdCBoYXZlIHRoZSBzYW1lIGJ5dGUgbGVuZ3RoXG4gIGlmIChkYXRhVmlld0EuYnl0ZUxlbmd0aCAhPT0gZGF0YVZpZXdCLmJ5dGVMZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlXG5cbiAgLy8gQ2hlY2sgaWYgZXZlcnkgYnl0ZSB2YWx1ZSBpcyBlcXVhbCB0byBlYWNoIG90aGVyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVZpZXdBLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgIGlmIChkYXRhVmlld0EuZ2V0VWludDgoaSkgIT09IGRhdGFWaWV3Qi5nZXRVaW50OChpKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IHNwYXJzZUFycmF5RXF1YWxpdHkgPSAoXG4gIGE6IHVua25vd24sXG4gIGI6IHVua25vd24sXG4pOiBib29sZWFuIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGEpIHx8ICFBcnJheS5pc0FycmF5KGIpKVxuICAgIHJldHVybiB1bmRlZmluZWRcblxuICAvLyBBIHNwYXJzZSBhcnJheSBbLCAsIDFdIHdpbGwgaGF2ZSBrZXlzIFtcIjJcIl0gd2hlcmVhcyBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIDFdIHdpbGwgaGF2ZSBrZXlzIFtcIjBcIiwgXCIxXCIsIFwiMlwiXVxuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGEpXG4gIGNvbnN0IGJLZXlzID0gT2JqZWN0LmtleXMoYilcbiAgcmV0dXJuIChcbiAgICBlcXVhbHMoYSwgYiwgW2l0ZXJhYmxlRXF1YWxpdHksIHR5cGVFcXVhbGl0eV0sIHRydWUpICYmIGVxdWFscyhhS2V5cywgYktleXMpXG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgRW5oYW5jZWRTcHkgfSBmcm9tICcuLi9qZXN0LW1vY2snXG5pbXBvcnQgeyBpc01vY2tGdW5jdGlvbiB9IGZyb20gJy4uL2plc3QtbW9jaydcbmltcG9ydCB7IGFkZFNlcmlhbGl6ZXIgfSBmcm9tICcuLi9zbmFwc2hvdC9wb3J0L3BsdWdpbnMnXG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdGFibGUgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2hhaVBsdWdpbiwgTWF0Y2hlclN0YXRlIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IGFycmF5QnVmZmVyRXF1YWxpdHksIGl0ZXJhYmxlRXF1YWxpdHksIGVxdWFscyBhcyBqZXN0RXF1YWxzLCBzcGFyc2VBcnJheUVxdWFsaXR5LCBzdWJzZXRFcXVhbGl0eSwgdHlwZUVxdWFsaXR5IH0gZnJvbSAnLi9qZXN0LXV0aWxzJ1xuaW1wb3J0IHR5cGUgeyBBc3ltbWV0cmljTWF0Y2hlciB9IGZyb20gJy4vamVzdC1hc3ltbWV0cmljLW1hdGNoZXJzJ1xuXG5jb25zdCBNQVRDSEVSU19PQkpFQ1QgPSBTeW1ib2wuZm9yKCdtYXRjaGVycy1vYmplY3QnKVxuXG5pZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnbG9iYWwsIE1BVENIRVJTX09CSkVDVCkpIHtcbiAgY29uc3QgZGVmYXVsdFN0YXRlOiBQYXJ0aWFsPE1hdGNoZXJTdGF0ZT4gPSB7XG4gICAgYXNzZXJ0aW9uQ2FsbHM6IDAsXG4gICAgaXNFeHBlY3RpbmdBc3NlcnRpb25zOiBmYWxzZSxcbiAgICBpc0V4cGVjdGluZ0Fzc2VydGlvbnNFcnJvcjogbnVsbCxcbiAgICBleHBlY3RlZEFzc2VydGlvbnNOdW1iZXI6IG51bGwsXG4gICAgZXhwZWN0ZWRBc3NlcnRpb25zTnVtYmVyRXJyb3I6IG51bGwsXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgTUFUQ0hFUlNfT0JKRUNULCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHN0YXRlOiBkZWZhdWx0U3RhdGUsXG4gICAgfSxcbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGdldFN0YXRlID0gPFN0YXRlIGV4dGVuZHMgTWF0Y2hlclN0YXRlID0gTWF0Y2hlclN0YXRlPigpOiBTdGF0ZSA9PlxuICAoZ2xvYmFsIGFzIGFueSlbTUFUQ0hFUlNfT0JKRUNUXS5zdGF0ZVxuXG5leHBvcnQgY29uc3Qgc2V0U3RhdGUgPSA8U3RhdGUgZXh0ZW5kcyBNYXRjaGVyU3RhdGUgPSBNYXRjaGVyU3RhdGU+KFxuICBzdGF0ZTogUGFydGlhbDxTdGF0ZT4sXG4pOiB2b2lkID0+IHtcbiAgT2JqZWN0LmFzc2lnbigoZ2xvYmFsIGFzIGFueSlbTUFUQ0hFUlNfT0JKRUNUXS5zdGF0ZSwgc3RhdGUpXG59XG5cbi8vIEplc3QgRXhwZWN0IENvbXBhY3RcbmV4cG9ydCBjb25zdCBKZXN0Q2hhaUV4cGVjdDogQ2hhaVBsdWdpbiA9IChjaGFpLCB1dGlscykgPT4ge1xuICBmdW5jdGlvbiBkZWYobmFtZToga2V5b2YgVmkuQXNzZXJ0aW9uIHwgKGtleW9mIFZpLkFzc2VydGlvbilbXSwgZm46ICgodGhpczogQ2hhaS5Bc3NlcnRpb25TdGF0aWMgJiBWaS5Bc3NlcnRpb24sIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpKSB7XG4gICAgY29uc3QgYWRkTWV0aG9kID0gKG46IGtleW9mIFZpLkFzc2VydGlvbikgPT4ge1xuICAgICAgdXRpbHMuYWRkTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgbiwgZm4pXG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpXG4gICAgICBuYW1lLmZvckVhY2gobiA9PiBhZGRNZXRob2QobikpXG5cbiAgICBlbHNlXG4gICAgICBhZGRNZXRob2QobmFtZSlcbiAgfVxuXG4gIChbJ3Rocm93JywgJ3Rocm93cycsICdUaHJvdyddIGFzIGNvbnN0KS5mb3JFYWNoKChtKSA9PiB7XG4gICAgdXRpbHMub3ZlcndyaXRlTWV0aG9kKGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgbSwgKF9zdXBlcjogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odGhpczogQ2hhaS5Bc3NlcnRpb24gJiBDaGFpLkFzc2VydGlvblN0YXRpYywgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IHV0aWxzLmZsYWcodGhpcywgJ3Byb21pc2UnKVxuICAgICAgICBjb25zdCBvYmplY3QgPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICBpZiAocHJvbWlzZSA9PT0gJ3JlamVjdHMnKSB7XG4gICAgICAgICAgdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgb2JqZWN0XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIGRlZigndG9FcXVhbCcsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgY29uc3QgYWN0dWFsID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICBjb25zdCBlcXVhbCA9IGplc3RFcXVhbHMoXG4gICAgICBhY3R1YWwsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIFtpdGVyYWJsZUVxdWFsaXR5XSxcbiAgICApXG5cbiAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICBlcXVhbCxcbiAgICAgICdleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCAje2V4cH0nLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGRlZXBseSBlcXVhbCAje2V4cH0nLFxuICAgICAgZXhwZWN0ZWQsXG4gICAgICBhY3R1YWwsXG4gICAgKVxuICB9KVxuXG4gIGRlZigndG9TdHJpY3RFcXVhbCcsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgY29uc3Qgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICBjb25zdCBlcXVhbCA9IGplc3RFcXVhbHMoXG4gICAgICBvYmosXG4gICAgICBleHBlY3RlZCxcbiAgICAgIFtcbiAgICAgICAgaXRlcmFibGVFcXVhbGl0eSxcbiAgICAgICAgdHlwZUVxdWFsaXR5LFxuICAgICAgICBzcGFyc2VBcnJheUVxdWFsaXR5LFxuICAgICAgICBhcnJheUJ1ZmZlckVxdWFsaXR5LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgZXF1YWwsXG4gICAgICAnZXhwZWN0ZWQgI3t0aGlzfSB0byBzdHJpY3RseSBlcXVhbCAje2V4cH0nLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IHN0cmljdGx5IGVxdWFsICN7ZXhwfScsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIG9iaixcbiAgICApXG4gIH0pXG4gIGRlZigndG9CZScsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgY29uc3QgYWN0dWFsID0gdGhpcy5fb2JqXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgT2JqZWN0LmlzKGFjdHVhbCwgZXhwZWN0ZWQpLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgI3tleHB9IC8vIE9iamVjdC5pcyBlcXVhbGl0eScsXG4gICAgICAnZXhwZWN0ZWQgI3t0aGlzfSBub3QgdG8gYmUgI3tleHB9IC8vIE9iamVjdC5pcyBlcXVhbGl0eScsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIGFjdHVhbCxcbiAgICApXG4gIH0pXG4gIGRlZigndG9NYXRjaE9iamVjdCcsIGZ1bmN0aW9uKGV4cGVjdGVkKSB7XG4gICAgY29uc3QgYWN0dWFsID0gdGhpcy5fb2JqXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgamVzdEVxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBbaXRlcmFibGVFcXVhbGl0eSwgc3Vic2V0RXF1YWxpdHldKSxcbiAgICAgICdleHBlY3RlZCAje3RoaXN9IHRvIG1hdGNoIG9iamVjdCAje2V4cH0nLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IG1hdGNoIG9iamVjdCAje2V4cH0nLFxuICAgICAgZXhwZWN0ZWQsXG4gICAgICBhY3R1YWwsXG4gICAgKVxuICB9KVxuICBkZWYoJ3RvTWF0Y2gnLCBmdW5jdGlvbihleHBlY3RlZDogc3RyaW5nIHwgUmVnRXhwKSB7XG4gICAgaWYgKHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gdGhpcy5pbmNsdWRlKGV4cGVjdGVkKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLm1hdGNoKGV4cGVjdGVkKVxuICB9KVxuICBkZWYoJ3RvQ29udGFpbicsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5jb250YWluKGl0ZW0pXG4gIH0pXG4gIGRlZigndG9Db250YWluRXF1YWwnLCBmdW5jdGlvbihleHBlY3RlZCkge1xuICAgIGNvbnN0IG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgY29uc3QgaW5kZXggPSBBcnJheS5mcm9tKG9iaikuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gamVzdEVxdWFscyhpdGVtLCBleHBlY3RlZClcbiAgICB9KVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpbmRleCAhPT0gLTEsXG4gICAgICAnZXhwZWN0ZWQgI3t0aGlzfSB0byBkZWVwIGVxdWFsbHkgY29udGFpbiAje2V4cH0nLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGRlZXAgZXF1YWxseSBjb250YWluICN7ZXhwfScsXG4gICAgICBleHBlY3RlZCxcbiAgICApXG4gIH0pXG4gIGRlZigndG9CZVRydXRoeScsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBCb29sZWFuKG9iaiksXG4gICAgICAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB0cnV0aHknLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIHRydXRoeScsXG4gICAgICBvYmosXG4gICAgKVxuICB9KVxuICBkZWYoJ3RvQmVGYWxzeScsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IG9iaiA9IHV0aWxzLmZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICAhb2JqLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc3knLFxuICAgICAgJ2V4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGZhbHN5JyxcbiAgICAgIG9iaixcbiAgICApXG4gIH0pXG4gIGRlZigndG9CZUdyZWF0ZXJUaGFuJywgZnVuY3Rpb24oZXhwZWN0ZWQ6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnRvLmdyZWF0ZXJUaGFuKGV4cGVjdGVkKVxuICB9KVxuICBkZWYoJ3RvQmVHcmVhdGVyVGhhbk9yRXF1YWwnLCBmdW5jdGlvbihleHBlY3RlZDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMudG8uZ3JlYXRlclRoYW5PckVxdWFsKGV4cGVjdGVkKVxuICB9KVxuICBkZWYoJ3RvQmVMZXNzVGhhbicsIGZ1bmN0aW9uKGV4cGVjdGVkOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy50by5sZXNzVGhhbihleHBlY3RlZClcbiAgfSlcbiAgZGVmKCd0b0JlTGVzc1RoYW5PckVxdWFsJywgZnVuY3Rpb24oZXhwZWN0ZWQ6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLnRvLmxlc3NUaGFuT3JFcXVhbChleHBlY3RlZClcbiAgfSlcbiAgZGVmKCd0b0JlTmFOJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYmUuTmFOXG4gIH0pXG4gIGRlZigndG9CZVVuZGVmaW5lZCcsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJlLnVuZGVmaW5lZFxuICB9KVxuICBkZWYoJ3RvQmVOdWxsJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYmUubnVsbFxuICB9KVxuICBkZWYoJ3RvQmVEZWZpbmVkJywgZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgbmVnYXRlID0gdXRpbHMuZmxhZyh0aGlzLCAnbmVnYXRlJylcbiAgICB1dGlscy5mbGFnKHRoaXMsICduZWdhdGUnLCBmYWxzZSlcblxuICAgIGlmIChuZWdhdGUpXG4gICAgICByZXR1cm4gdGhpcy5iZS51bmRlZmluZWRcblxuICAgIHJldHVybiB0aGlzLm5vdC5iZS51bmRlZmluZWRcbiAgfSlcbiAgZGVmKCd0b0JlSW5zdGFuY2VPZicsIGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VPZihvYmopXG4gIH0pXG4gIGRlZigndG9IYXZlTGVuZ3RoJywgZnVuY3Rpb24obGVuZ3RoOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5oYXZlLmxlbmd0aChsZW5ndGgpXG4gIH0pXG4gIC8vIGRlc3RydWN0dXJpbmcsIGJlY2F1c2UgaXQgY2hlY2tzIGBhcmd1bWVudHNgIGluc2lkZSwgYW5kIHZhbHVlIGlzIHBhc3NpbmcgYXMgYHVuZGVmaW5lZGBcbiAgZGVmKCd0b0hhdmVQcm9wZXJ0eScsIGZ1bmN0aW9uKC4uLmFyZ3M6IFtwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZT86IGFueV0pIHtcbiAgICByZXR1cm4gdGhpcy5oYXZlLmRlZXAubmVzdGVkLnByb3BlcnR5KC4uLmFyZ3MpXG4gIH0pXG4gIGRlZigndG9CZUNsb3NlVG8nLCBmdW5jdGlvbihyZWNlaXZlZDogbnVtYmVyLCBwcmVjaXNpb24gPSAyKSB7XG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLl9vYmpcbiAgICBsZXQgcGFzcyA9IGZhbHNlXG4gICAgbGV0IGV4cGVjdGVkRGlmZiA9IDBcbiAgICBsZXQgcmVjZWl2ZWREaWZmID0gMFxuXG4gICAgaWYgKHJlY2VpdmVkID09PSBJbmZpbml0eSAmJiBleHBlY3RlZCA9PT0gSW5maW5pdHkpIHtcbiAgICAgIHBhc3MgPSB0cnVlXG4gICAgfVxuICAgIGVsc2UgaWYgKHJlY2VpdmVkID09PSAtSW5maW5pdHkgJiYgZXhwZWN0ZWQgPT09IC1JbmZpbml0eSkge1xuICAgICAgcGFzcyA9IHRydWVcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBleHBlY3RlZERpZmYgPSBNYXRoLnBvdygxMCwgLXByZWNpc2lvbikgLyAyXG4gICAgICByZWNlaXZlZERpZmYgPSBNYXRoLmFicyhleHBlY3RlZCAtIHJlY2VpdmVkKVxuICAgICAgcGFzcyA9IHJlY2VpdmVkRGlmZiA8IGV4cGVjdGVkRGlmZlxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICBwYXNzLFxuICAgICAgYGV4cGVjdGVkICN7dGhpc30gdG8gYmUgY2xvc2UgdG8gI3tleHB9LCByZWNlaXZlZCBkaWZmZXJlbmNlIGlzICR7cmVjZWl2ZWREaWZmfSwgYnV0IGV4cGVjdGVkICR7ZXhwZWN0ZWREaWZmfWAsXG4gICAgICBgZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgY2xvc2UgdG8gI3tleHB9LCByZWNlaXZlZCBkaWZmZXJlbmNlIGlzICR7cmVjZWl2ZWREaWZmfSwgYnV0IGV4cGVjdGVkICR7ZXhwZWN0ZWREaWZmfWAsXG4gICAgICByZWNlaXZlZCxcbiAgICAgIGV4cGVjdGVkLFxuICAgIClcbiAgfSlcblxuICBjb25zdCBhc3NlcnRJc01vY2sgPSAoYXNzZXJ0aW9uOiBhbnkpID0+IHtcbiAgICBpZiAoIWlzTW9ja0Z1bmN0aW9uKGFzc2VydGlvbi5fb2JqKSlcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dXRpbHMuaW5zcGVjdChhc3NlcnRpb24uX29iail9IGlzIG5vdCBhIHNweSBvciBhIGNhbGwgdG8gYSBzcHkhYClcbiAgfVxuICBjb25zdCBnZXRTcHkgPSAoYXNzZXJ0aW9uOiBhbnkpID0+IHtcbiAgICBhc3NlcnRJc01vY2soYXNzZXJ0aW9uKVxuICAgIHJldHVybiBhc3NlcnRpb24uX29iaiBhcyBFbmhhbmNlZFNweVxuICB9XG4gIGRlZihbJ3RvSGF2ZUJlZW5DYWxsZWRUaW1lcycsICd0b0JlQ2FsbGVkVGltZXMnXSwgZnVuY3Rpb24obnVtYmVyOiBudW1iZXIpIHtcbiAgICBjb25zdCBzcHkgPSBnZXRTcHkodGhpcylcbiAgICBjb25zdCBzcHlOYW1lID0gc3B5LmdldE1vY2tOYW1lKClcbiAgICBjb25zdCBjYWxsQ291bnQgPSBzcHkubW9jay5jYWxscy5sZW5ndGhcbiAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICBjYWxsQ291bnQgPT09IG51bWJlcixcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBiZSBjYWxsZWQgI3tleHB9IHRpbWVzYCxcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBub3QgYmUgY2FsbGVkICN7ZXhwfSB0aW1lc2AsXG4gICAgICBudW1iZXIsXG4gICAgICBjYWxsQ291bnQsXG4gICAgKVxuICB9KVxuICBkZWYoJ3RvSGF2ZUJlZW5DYWxsZWRPbmNlJywgZnVuY3Rpb24oKSB7XG4gICAgY29uc3Qgc3B5ID0gZ2V0U3B5KHRoaXMpXG4gICAgY29uc3Qgc3B5TmFtZSA9IHNweS5nZXRNb2NrTmFtZSgpXG4gICAgY29uc3QgY2FsbENvdW50ID0gc3B5Lm1vY2suY2FsbHMubGVuZ3RoXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgY2FsbENvdW50ID09PSAxLFxuICAgICAgYGV4cGVjdGVkIFwiJHtzcHlOYW1lfVwiIHRvIGJlIGNhbGxlZCBvbmNlYCxcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBub3QgYmUgY2FsbGVkIG9uY2VgLFxuICAgICAgMSxcbiAgICAgIGNhbGxDb3VudCxcbiAgICApXG4gIH0pXG4gIGRlZihbJ3RvSGF2ZUJlZW5DYWxsZWQnLCAndG9CZUNhbGxlZCddLCBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBzcHkgPSBnZXRTcHkodGhpcylcbiAgICBjb25zdCBzcHlOYW1lID0gc3B5LmdldE1vY2tOYW1lKClcbiAgICBjb25zdCBjYWxsZWQgPSBzcHkubW9jay5jYWxscy5sZW5ndGggPiAwXG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0KFxuICAgICAgY2FsbGVkLFxuICAgICAgYGV4cGVjdGVkIFwiJHtzcHlOYW1lfVwiIHRvIGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlYCxcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBub3QgYmUgY2FsbGVkIGF0IGFsbGAsXG4gICAgICB0cnVlLFxuICAgICAgY2FsbGVkLFxuICAgIClcbiAgfSlcbiAgZGVmKFsndG9IYXZlQmVlbkNhbGxlZFdpdGgnLCAndG9CZUNhbGxlZFdpdGgnXSwgZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGNvbnN0IHNweSA9IGdldFNweSh0aGlzKVxuICAgIGNvbnN0IHNweU5hbWUgPSBzcHkuZ2V0TW9ja05hbWUoKVxuICAgIGNvbnN0IHBhc3MgPSBzcHkubW9jay5jYWxscy5zb21lKGNhbGxBcmcgPT4gamVzdEVxdWFscyhjYWxsQXJnLCBhcmdzLCBbaXRlcmFibGVFcXVhbGl0eV0pKVxuICAgIHJldHVybiB0aGlzLmFzc2VydChcbiAgICAgIHBhc3MsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gYmUgY2FsbGVkIHdpdGggYXJndW1lbnRzOiAje2V4cH1gLFxuICAgICAgYGV4cGVjdGVkIFwiJHtzcHlOYW1lfVwiIHRvIG5vdCBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudHM6ICN7ZXhwfWAsXG4gICAgICBhcmdzLFxuICAgICAgc3B5Lm1vY2suY2FsbHMsXG4gICAgKVxuICB9KVxuICBjb25zdCBvcmRpbmFsT2YgPSAoaTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaiA9IGkgJSAxMFxuICAgIGNvbnN0IGsgPSBpICUgMTAwXG5cbiAgICBpZiAoaiA9PT0gMSAmJiBrICE9PSAxMSlcbiAgICAgIHJldHVybiBgJHtpfXN0YFxuXG4gICAgaWYgKGogPT09IDIgJiYgayAhPT0gMTIpXG4gICAgICByZXR1cm4gYCR7aX1uZGBcblxuICAgIGlmIChqID09PSAzICYmIGsgIT09IDEzKVxuICAgICAgcmV0dXJuIGAke2l9cmRgXG5cbiAgICByZXR1cm4gYCR7aX10aGBcbiAgfVxuICBkZWYoWyd0b0hhdmVCZWVuTnRoQ2FsbGVkV2l0aCcsICdudGhDYWxsZWRXaXRoJ10sIGZ1bmN0aW9uKHRpbWVzOiBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgY29uc3Qgc3B5ID0gZ2V0U3B5KHRoaXMpXG4gICAgY29uc3Qgc3B5TmFtZSA9IHNweS5nZXRNb2NrTmFtZSgpXG4gICAgY29uc3QgbnRoQ2FsbCA9IHNweS5tb2NrLmNhbGxzW3RpbWVzIC0gMV1cblxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgamVzdEVxdWFscyhudGhDYWxsLCBhcmdzLCBbaXRlcmFibGVFcXVhbGl0eV0pLFxuICAgICAgYGV4cGVjdGVkICR7b3JkaW5hbE9mKHRpbWVzKX0gXCIke3NweU5hbWV9XCIgY2FsbCB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggI3tleHB9YCxcbiAgICAgIGBleHBlY3RlZCAke29yZGluYWxPZih0aW1lcyl9IFwiJHtzcHlOYW1lfVwiIGNhbGwgdG8gbm90IGhhdmUgYmVlbiBjYWxsZWQgd2l0aCAje2V4cH1gLFxuICAgICAgYXJncyxcbiAgICAgIG50aENhbGwsXG4gICAgKVxuICB9KVxuICBkZWYoWyd0b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgnLCAnbGFzdENhbGxlZFdpdGgnXSwgZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCBzcHkgPSBnZXRTcHkodGhpcylcbiAgICBjb25zdCBzcHlOYW1lID0gc3B5LmdldE1vY2tOYW1lKClcbiAgICBjb25zdCBsYXN0Q2FsbCA9IHNweS5tb2NrLmNhbGxzW3NweS5jYWxscy5sZW5ndGggLSAxXVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBqZXN0RXF1YWxzKGxhc3RDYWxsLCBhcmdzLCBbaXRlcmFibGVFcXVhbGl0eV0pLFxuICAgICAgYGV4cGVjdGVkIGxhc3QgXCIke3NweU5hbWV9XCIgY2FsbCB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggI3tleHB9YCxcbiAgICAgIGBleHBlY3RlZCBsYXN0IFwiJHtzcHlOYW1lfVwiIGNhbGwgdG8gbm90IGhhdmUgYmVlbiBjYWxsZWQgd2l0aCAje2V4cH1gLFxuICAgICAgYXJncyxcbiAgICAgIGxhc3RDYWxsLFxuICAgIClcbiAgfSlcbiAgZGVmKFsndG9UaHJvdycsICd0b1Rocm93RXJyb3InXSwgZnVuY3Rpb24oZXhwZWN0ZWQ/OiBzdHJpbmcgfCBDb25zdHJ1Y3RhYmxlIHwgUmVnRXhwIHwgRXJyb3IpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9vYmpcbiAgICBjb25zdCBwcm9taXNlID0gdXRpbHMuZmxhZyh0aGlzLCAncHJvbWlzZScpXG4gICAgbGV0IHRocm93bjogYW55ID0gbnVsbFxuXG4gICAgaWYgKHByb21pc2UpIHtcbiAgICAgIHRocm93biA9IG9ialxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9iaigpXG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93biA9IGVyclxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBleHBlY3RlZC5uYW1lIHx8IGV4cGVjdGVkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICAgIHRocm93biAmJiB0aHJvd24gaW5zdGFuY2VvZiBleHBlY3RlZCxcbiAgICAgICAgYGV4cGVjdGVkIGVycm9yIHRvIGJlIGluc3RhbmNlIG9mICR7bmFtZX1gLFxuICAgICAgICBgZXhwZWN0ZWQgZXJyb3Igbm90IHRvIGJlIGluc3RhbmNlIG9mICR7bmFtZX1gLFxuICAgICAgICBleHBlY3RlZCxcbiAgICAgICAgdGhyb3duLFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RlZCAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnQoXG4gICAgICAgIHRocm93biAmJiBleHBlY3RlZC5tZXNzYWdlID09PSB0aHJvd24ubWVzc2FnZSxcbiAgICAgICAgYGV4cGVjdGVkIGVycm9yIHRvIGhhdmUgbWVzc2FnZTogJHtleHBlY3RlZC5tZXNzYWdlfWAsXG4gICAgICAgIGBleHBlY3RlZCBlcnJvciBub3QgdG8gaGF2ZSBtZXNzYWdlOiAke2V4cGVjdGVkLm1lc3NhZ2V9YCxcbiAgICAgICAgZXhwZWN0ZWQubWVzc2FnZSxcbiAgICAgICAgdGhyb3duICYmIHRocm93bi5tZXNzYWdlLFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RlZCAmJiB0eXBlb2YgKGV4cGVjdGVkIGFzIGFueSkuYXN5bW1ldHJpY01hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBtYXRjaGVyID0gZXhwZWN0ZWQgYXMgYW55IGFzIEFzeW1tZXRyaWNNYXRjaGVyPGFueT5cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydChcbiAgICAgICAgdGhyb3duICYmIG1hdGNoZXIuYXN5bW1ldHJpY01hdGNoKHRocm93biksXG4gICAgICAgICdleHBlY3RlZCBlcnJvciB0byBtYXRjaCBhc3ltbWV0cmljIG1hdGNoZXInLFxuICAgICAgICAnZXhwZWN0ZWQgZXJyb3Igbm90IHRvIG1hdGNoIGFzeW1tZXRyaWMgbWF0Y2hlcicsXG4gICAgICAgIG1hdGNoZXIudG9TdHJpbmcoKSxcbiAgICAgICAgdGhyb3duLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRvLnRocm93cyhleHBlY3RlZClcbiAgfSlcbiAgZGVmKFsndG9IYXZlUmV0dXJuZWQnLCAndG9SZXR1cm4nXSwgZnVuY3Rpb24oKSB7XG4gICAgY29uc3Qgc3B5ID0gZ2V0U3B5KHRoaXMpXG4gICAgY29uc3Qgc3B5TmFtZSA9IHNweS5nZXRNb2NrTmFtZSgpXG4gICAgY29uc3QgY2FsbGVkQW5kTm90VGhyZXcgPSBzcHkubW9jay5jYWxscy5sZW5ndGggPiAwICYmICFzcHkubW9jay5yZXN1bHRzLnNvbWUoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAndGhyb3cnKVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgY2FsbGVkQW5kTm90VGhyZXcsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBhdCBsZWFzdCBvbmNlYCxcbiAgICAgIGBleHBlY3RlZCBcIiR7c3B5TmFtZX1cIiB0byBub3QgYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZGAsXG4gICAgICBjYWxsZWRBbmROb3RUaHJldyxcbiAgICAgICFjYWxsZWRBbmROb3RUaHJldyxcbiAgICApXG4gIH0pXG4gIGRlZihbJ3RvSGF2ZVJldHVybmVkVGltZXMnLCAndG9SZXR1cm5UaW1lcyddLCBmdW5jdGlvbih0aW1lczogbnVtYmVyKSB7XG4gICAgY29uc3Qgc3B5ID0gZ2V0U3B5KHRoaXMpXG4gICAgY29uc3Qgc3B5TmFtZSA9IHNweS5nZXRNb2NrTmFtZSgpXG4gICAgY29uc3Qgc3VjY2Vzc2Z1bGxSZXR1cm5zID0gc3B5Lm1vY2sucmVzdWx0cy5yZWR1Y2UoKHN1Y2Nlc3MsIHsgdHlwZSB9KSA9PiB0eXBlID09PSAndGhyb3cnID8gc3VjY2VzcyA6ICsrc3VjY2VzcywgMClcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHN1Y2Nlc3NmdWxsUmV0dXJucyA9PT0gdGltZXMsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCAke3RpbWVzfSB0aW1lc2AsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gbm90IGJlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgJHt0aW1lc30gdGltZXNgLFxuICAgICAgYGV4cGVjdGVkIG51bWJlciBvZiByZXR1cm5zOiAke3RpbWVzfWAsXG4gICAgICBgcmVjZWl2ZWQgbnVtYmVyIG9mIHJldHVybnM6ICR7c3VjY2Vzc2Z1bGxSZXR1cm5zfWAsXG4gICAgKVxuICB9KVxuICBkZWYoWyd0b0hhdmVSZXR1cm5lZFdpdGgnLCAndG9SZXR1cm5XaXRoJ10sIGZ1bmN0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzcHkgPSBnZXRTcHkodGhpcylcbiAgICBjb25zdCBzcHlOYW1lID0gc3B5LmdldE1vY2tOYW1lKClcbiAgICBjb25zdCBwYXNzID0gc3B5Lm1vY2sucmVzdWx0cy5zb21lKCh7IHR5cGUsIHZhbHVlOiByZXN1bHQgfSkgPT4gdHlwZSA9PT0gJ3JldHVybicgJiYgamVzdEVxdWFscyh2YWx1ZSwgcmVzdWx0KSlcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHBhc3MsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gYmUgc3VjY2Vzc2Z1bGx5IGNhbGxlZCB3aXRoICN7ZXhwfWAsXG4gICAgICBgZXhwZWN0ZWQgXCIke3NweU5hbWV9XCIgdG8gbm90IGJlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgd2l0aCAje2V4cH1gLFxuICAgICAgdmFsdWUsXG4gICAgKVxuICB9KVxuICBkZWYoWyd0b0hhdmVMYXN0UmV0dXJuZWRXaXRoJywgJ2xhc3RSZXR1cm5lZFdpdGgnXSwgZnVuY3Rpb24odmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNweSA9IGdldFNweSh0aGlzKVxuICAgIGNvbnN0IHNweU5hbWUgPSBzcHkuZ2V0TW9ja05hbWUoKVxuICAgIGNvbnN0IHsgdmFsdWU6IGxhc3RSZXN1bHQgfSA9IHNweS5tb2NrLnJlc3VsdHNbc3B5LnJldHVybnMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBwYXNzID0gamVzdEVxdWFscyhsYXN0UmVzdWx0LCB2YWx1ZSlcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIHBhc3MsXG4gICAgICBgZXhwZWN0ZWQgbGFzdCBcIiR7c3B5TmFtZX1cIiBjYWxsIHRvIHJldHVybiAje2V4cH1gLFxuICAgICAgYGV4cGVjdGVkIGxhc3QgXCIke3NweU5hbWV9XCIgY2FsbCB0byBub3QgcmV0dXJuICN7ZXhwfWAsXG4gICAgICB2YWx1ZSxcbiAgICAgIGxhc3RSZXN1bHQsXG4gICAgKVxuICB9KVxuICBkZWYoWyd0b0hhdmVOdGhSZXR1cm5lZFdpdGgnLCAnbnRoUmV0dXJuZWRXaXRoJ10sIGZ1bmN0aW9uKG50aENhbGw6IG51bWJlciwgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNweSA9IGdldFNweSh0aGlzKVxuICAgIGNvbnN0IHNweU5hbWUgPSBzcHkuZ2V0TW9ja05hbWUoKVxuICAgIGNvbnN0IGlzTm90ID0gdXRpbHMuZmxhZyh0aGlzLCAnbmVnYXRlJykgYXMgYm9vbGVhblxuICAgIGNvbnN0IHsgdHlwZTogY2FsbFR5cGUsIHZhbHVlOiBjYWxsUmVzdWx0IH0gPSBzcHkubW9jay5yZXN1bHRzW250aENhbGwgLSAxXVxuICAgIGNvbnN0IG9yZGluYWxDYWxsID0gYCR7b3JkaW5hbE9mKG50aENhbGwpfSBjYWxsYFxuXG4gICAgaWYgKCFpc05vdCAmJiBjYWxsVHlwZSA9PT0gJ3Rocm93JylcbiAgICAgIGNoYWkuYXNzZXJ0LmZhaWwoYGV4cGVjdGVkICR7b3JkaW5hbENhbGx9IHRvIHJldHVybiAje2V4cH0sIGJ1dCBpbnN0ZWFkIGl0IHRocmV3IGFuIGVycm9yYClcblxuICAgIGNvbnN0IG50aENhbGxSZXR1cm4gPSBqZXN0RXF1YWxzKGNhbGxSZXN1bHQsIHZhbHVlKVxuXG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBudGhDYWxsUmV0dXJuLFxuICAgICAgYGV4cGVjdGVkICR7b3JkaW5hbENhbGx9IFwiJHtzcHlOYW1lfVwiIGNhbGwgdG8gcmV0dXJuICN7ZXhwfWAsXG4gICAgICBgZXhwZWN0ZWQgJHtvcmRpbmFsQ2FsbH0gXCIke3NweU5hbWV9XCIgY2FsbCB0byBub3QgcmV0dXJuICN7ZXhwfWAsXG4gICAgICB2YWx1ZSxcbiAgICAgIGNhbGxSZXN1bHQsXG4gICAgKVxuICB9KVxuXG4gIHV0aWxzLmFkZFByb3BlcnR5KGNoYWkuQXNzZXJ0aW9uLnByb3RvdHlwZSwgJ3Jlc29sdmVzJywgZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgdXRpbHMuZmxhZyh0aGlzLCAncHJvbWlzZScsICdyZXNvbHZlcycpXG4gICAgY29uc3Qgb2JqID0gdXRpbHMuZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICBjb25zdCBwcm94eTogYW55ID0gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldDogKHRhcmdldCwga2V5LCByZWNpZXZlcikgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIGtleSwgcmVjaWV2ZXIpXG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBpbnN0YW5jZW9mIGNoYWkuQXNzZXJ0aW9uID8gcHJveHkgOiByZXN1bHRcblxuICAgICAgICByZXR1cm4gYXN5bmMoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICByZXR1cm4gb2JqLnRoZW4oXG4gICAgICAgICAgICAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnLCB2YWx1ZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5jYWxsKHRoaXMsIC4uLmFyZ3MpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvbWlzZSByZWplY3RlZCBcIiR7ZXJyfVwiIGluc3RlYWQgb2YgcmVzb2x2aW5nYClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4gcHJveHlcbiAgfSlcblxuICB1dGlscy5hZGRQcm9wZXJ0eShjaGFpLkFzc2VydGlvbi5wcm90b3R5cGUsICdyZWplY3RzJywgZnVuY3Rpb24odGhpczogYW55KSB7XG4gICAgdXRpbHMuZmxhZyh0aGlzLCAncHJvbWlzZScsICdyZWplY3RzJylcbiAgICBjb25zdCBvYmogPSB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnKVxuICAgIGNvbnN0IHdyYXBwZXIgPSB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nID8gb2JqKCkgOiBvYmogLy8gZm9yIGplc3QgY29tcGF0XG4gICAgY29uc3QgcHJveHk6IGFueSA9IG5ldyBQcm94eSh0aGlzLCB7XG4gICAgICBnZXQ6ICh0YXJnZXQsIGtleSwgcmVjaWV2ZXIpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2lldmVyKVxuXG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIHJldHVybiByZXN1bHQgaW5zdGFuY2VvZiBjaGFpLkFzc2VydGlvbiA/IHByb3h5IDogcmVzdWx0XG5cbiAgICAgICAgcmV0dXJuIGFzeW5jKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHdyYXBwZXIudGhlbihcbiAgICAgICAgICAgICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvbWlzZSByZXNvbHZlZCBcIiR7dmFsdWV9XCIgaW5zdGVhZCBvZiByZWplY3RpbmdgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB1dGlscy5mbGFnKHRoaXMsICdvYmplY3QnLCBlcnIpXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQuY2FsbCh0aGlzLCAuLi5hcmdzKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHJldHVybiBwcm94eVxuICB9KVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnYXNzZXJ0aW9ucycsXG4gICAgZnVuY3Rpb24gYXNzZXJ0aW9ucyhleHBlY3RlZDogbnVtYmVyKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgZXhwZWN0ZWQgbnVtYmVyIG9mIGFzc2VydGlvbnMgdG8gYmUgJHtleHBlY3RlZH0sIGJ1dCBnb3QgJHtnZXRTdGF0ZSgpLmFzc2VydGlvbkNhbGxzfWApXG4gICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBhc3NlcnRpb25zKVxuXG4gICAgICBzZXRTdGF0ZSh7XG4gICAgICAgIGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlcjogZXhwZWN0ZWQsXG4gICAgICAgIGV4cGVjdGVkQXNzZXJ0aW9uc051bWJlckVycm9yOiBlcnJvcixcbiAgICAgIH0pXG4gICAgfSxcbiAgKVxuXG4gIHV0aWxzLmFkZE1ldGhvZChcbiAgICBjaGFpLmV4cGVjdCxcbiAgICAnaGFzQXNzZXJ0aW9ucycsXG4gICAgZnVuY3Rpb24gaGFzQXNzZXJ0aW9ucygpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdleHBlY3RlZCBhbnkgbnVtYmVyIG9mIGFzc2VydGlvbiwgYnV0IGdvdCBub25lJylcbiAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIGhhc0Fzc2VydGlvbnMpXG5cbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgaXNFeHBlY3RpbmdBc3NlcnRpb25zOiB0cnVlLFxuICAgICAgICBpc0V4cGVjdGluZ0Fzc2VydGlvbnNFcnJvcjogZXJyb3IsXG4gICAgICB9KVxuICAgIH0sXG4gIClcblxuICB1dGlscy5hZGRNZXRob2QoXG4gICAgY2hhaS5leHBlY3QsXG4gICAgJ2FkZFNuYXBzaG90U2VyaWFsaXplcicsXG4gICAgYWRkU2VyaWFsaXplcixcbiAgKVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3RcbiAqXG4gKiBAdHlwZSB7b2JqZWN0fSBnbG9iYWxPYmplY3RcbiAqL1xudmFyIGdsb2JhbE9iamVjdDtcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbmlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy8gTm9kZVxuICAgIGdsb2JhbE9iamVjdCA9IGdsb2JhbDtcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vIEJyb3dzZXJcbiAgICBnbG9iYWxPYmplY3QgPSB3aW5kb3c7XG59IGVsc2Uge1xuICAgIC8vIFdlYldvcmtlclxuICAgIGdsb2JhbE9iamVjdCA9IHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsT2JqZWN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24uY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb3B5UHJvdG90eXBlTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNpbm9uanMvbm8tcHJvdG90eXBlLW1ldGhvZHMvbm8tcHJvdG90eXBlLW1ldGhvZHNcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlKS5yZWR1Y2UoZnVuY3Rpb24ocmVzdWx0LCBuYW1lKSB7XG4gICAgICAgIC8vIGlnbm9yZSBzaXplIGJlY2F1c2UgaXQgdGhyb3dzIGZyb20gTWFwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG5hbWUgIT09IFwic2l6ZVwiICYmXG4gICAgICAgICAgICBuYW1lICE9PSBcImNhbGxlclwiICYmXG4gICAgICAgICAgICBuYW1lICE9PSBcImNhbGxlZVwiICYmXG4gICAgICAgICAgICBuYW1lICE9PSBcImFyZ3VtZW50c1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcHJvdG90eXBlW25hbWVdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBjYWxsLmJpbmQocHJvdG90eXBlW25hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShBcnJheS5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBldmVyeSA9IHJlcXVpcmUoXCIuL3Byb3RvdHlwZXMvYXJyYXlcIikuZXZlcnk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFzQ2FsbHNMZWZ0KGNhbGxNYXAsIHNweSkge1xuICAgIGlmIChjYWxsTWFwW3NweS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsTWFwW3NweS5pZF0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBjYWxsTWFwW3NweS5pZF0gPCBzcHkuY2FsbENvdW50O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQWRqYWNlbnRDYWxscyhjYWxsTWFwLCBzcHksIGluZGV4LCBzcGllcykge1xuICAgIHZhciBjYWxsZWRCZWZvcmVOZXh0ID0gdHJ1ZTtcblxuICAgIGlmIChpbmRleCAhPT0gc3BpZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICBjYWxsZWRCZWZvcmVOZXh0ID0gc3B5LmNhbGxlZEJlZm9yZShzcGllc1tpbmRleCArIDFdKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQ2FsbHNMZWZ0KGNhbGxNYXAsIHNweSkgJiYgY2FsbGVkQmVmb3JlTmV4dCkge1xuICAgICAgICBjYWxsTWFwW3NweS5pZF0gKz0gMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEEgU2lub24gcHJveHkgb2JqZWN0IChmYWtlLCBzcHksIHN0dWIpXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gU2lub25Qcm94eVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gY2FsbGVkQmVmb3JlIC0gQSBtZXRob2QgdGhhdCBkZXRlcm1pbmVzIGlmIHRoaXMgcHJveHkgd2FzIGNhbGxlZCBiZWZvcmUgYW5vdGhlciBvbmVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFNvbWUgaWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjYWxsQ291bnQgLSBOdW1iZXIgb2YgdGltZXMgdGhpcyBwcm94eSBoYXMgYmVlbiBjYWxsZWRcbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBzcGllcyBoYXZlIGJlZW4gY2FsbGVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgc3VwcGxpZWQgaW5cbiAqXG4gKiBAcGFyYW0gIHtTaW5vblByb3h5W10gfCBTaW5vblByb3h5fSBzcGllcyBBbiBhcnJheSBvZiBwcm94aWVzLCBvciBzZXZlcmFsIHByb3hpZXMgYXMgYXJndW1lbnRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB3aGVuIHNwaWVzIGFyZSBjYWxsZWQgaW4gb3JkZXIsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBjYWxsZWRJbk9yZGVyKHNwaWVzKSB7XG4gICAgdmFyIGNhbGxNYXAgPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICB2YXIgX3NwaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHMgOiBzcGllcztcblxuICAgIHJldHVybiBldmVyeShfc3BpZXMsIGNoZWNrQWRqYWNlbnRDYWxscy5iaW5kKG51bGwsIGNhbGxNYXApKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWxsZWRJbk9yZGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogUmV0dXJucyBhIGRpc3BsYXkgbmFtZSBmb3IgYSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZ1bmN0aW9uTmFtZShmdW5jKSB7XG4gICAgaWYgKCFmdW5jKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBmdW5jLmRpc3BsYXlOYW1lIHx8XG4gICAgICAgICAgICBmdW5jLm5hbWUgfHxcbiAgICAgICAgICAgIC8vIFVzZSBmdW5jdGlvbiBkZWNvbXBvc2l0aW9uIGFzIGEgbGFzdCByZXNvcnQgdG8gZ2V0IGZ1bmN0aW9uXG4gICAgICAgICAgICAvLyBuYW1lLiBEb2VzIG5vdCByZWx5IG9uIGZ1bmN0aW9uIGRlY29tcG9zaXRpb24gdG8gd29yayAtIGlmIGl0XG4gICAgICAgICAgICAvLyBkb2Vzbid0IGRlYnVnZ2luZyB3aWxsIGJlIHNsaWdodGx5IGxlc3MgaW5mb3JtYXRpdmVcbiAgICAgICAgICAgIC8vIChpLmUuIHRvU3RyaW5nIHdpbGwgc2F5ICdzcHknIHJhdGhlciB0aGFuICdteUZ1bmMnKS5cbiAgICAgICAgICAgIChTdHJpbmcoZnVuYykubWF0Y2goL2Z1bmN0aW9uIChbXlxccyhdKykvKSB8fCBbXSlbMV1cbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBhbmQgd2UgbWlnaHQgZ2V0IGFuIGV4Y2VwdGlvbiwgYXMgYSBsYXN0LWxhc3RcbiAgICAgICAgLy8gcmVzb3J0IGZhbGwgYmFjayB0byBlbXB0eSBzdHJpbmcuXG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uLW5hbWVcIik7XG5cbi8qKlxuICogUmV0dXJucyBhIGRpc3BsYXkgbmFtZSBmb3IgYSB2YWx1ZSBmcm9tIGEgY29uc3RydWN0b3JcbiAqXG4gKiBAcGFyYW0gIHtvYmplY3R9IHZhbHVlIEEgdmFsdWUgdG8gZXhhbWluZVxuICogQHJldHVybnMgeyhzdHJpbmd8bnVsbCl9IEEgc3RyaW5nIG9yIG51bGxcbiAqL1xuZnVuY3Rpb24gY2xhc3NOYW1lKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHx8XG4gICAgICAgIC8vIFRoZSBuZXh0IGJyYW5jaCBpcyBmb3IgSUUxMSBzdXBwb3J0IG9ubHk6XG4gICAgICAgIC8vIEJlY2F1c2UgdGhlIG5hbWUgcHJvcGVydHkgaXMgbm90IHNldCBvbiB0aGUgcHJvdG90eXBlXG4gICAgICAgIC8vIG9mIHRoZSBGdW5jdGlvbiBvYmplY3QsIHdlIGZpbmFsbHkgdHJ5IHRvIGdyYWIgdGhlXG4gICAgICAgIC8vIG5hbWUgZnJvbSBpdHMgZGVmaW5pdGlvbi4gVGhpcyB3aWxsIG5ldmVyIGJlIHJlYWNoZWRcbiAgICAgICAgLy8gaW4gbm9kZSwgc28gd2UgYXJlIG5vdCBhYmxlIHRvIHRlc3QgdGhpcyBwcm9wZXJseS5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vbmFtZVxuICAgICAgICAodHlwZW9mIHZhbHVlLmNvbnN0cnVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUodmFsdWUuY29uc3RydWN0b3IpKSB8fFxuICAgICAgICBudWxsXG4gICAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWU7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGludm9rZSB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gYW5kIHByaW50IGFcbiAqIGRlcHJlY2F0aW9uIHdhcm5pbmcgdG8gdGhlIGNvbnNvbGUgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gZnVuY1xuICogQHBhcmFtICB7c3RyaW5nfSBtc2dcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0cy53cmFwID0gZnVuY3Rpb24oZnVuYywgbXNnKSB7XG4gICAgdmFyIHdyYXBwZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZXhwb3J0cy5wcmludFdhcm5pbmcobXNnKTtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIGlmIChmdW5jLnByb3RvdHlwZSkge1xuICAgICAgICB3cmFwcGVkLnByb3RvdHlwZSA9IGZ1bmMucHJvdG90eXBlO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlZDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyB3aGljaCBjYW4gYmUgc3VwcGxpZWQgdG8gYHdyYXAoKWAgdG8gbm90aWZ5IHRoZSB1c2VyIHRoYXQgYVxuICogcGFydGljdWxhciBwYXJ0IG9mIHRoZSBzaW5vbiBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZC5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHBhY2thZ2VOYW1lXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGZ1bmNOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnRzLmRlZmF1bHRNc2cgPSBmdW5jdGlvbihwYWNrYWdlTmFtZSwgZnVuY05hbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBwYWNrYWdlTmFtZSArXG4gICAgICAgIFwiLlwiICtcbiAgICAgICAgZnVuY05hbWUgK1xuICAgICAgICBcIiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcHVibGljIEFQSSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFwiICtcbiAgICAgICAgcGFja2FnZU5hbWUgK1xuICAgICAgICBcIi5cIlxuICAgICk7XG59O1xuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgb24gdGhlIGNvbnNvbGUsIHdoZW4gaXQgZXhpc3RzXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBtc2dcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmV4cG9ydHMucHJpbnRXYXJuaW5nID0gZnVuY3Rpb24obXNnKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy5lbWl0V2FybmluZykge1xuICAgICAgICAvLyBFbWl0IFdhcm5pbmdzIGluIE5vZGVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhtc2cpO1xuICAgIH0gZWxzZSBpZiAoY29uc29sZS5pbmZvKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhtc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XG4gICAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIGZuIHJldHVybnMgdHJ1ZSBmb3IgYWxsIG1lbWJlcnMgb2Ygb2JqLlxuICogVGhpcyBpcyBhbiBldmVyeSBpbXBsZW1lbnRhdGlvbiB0aGF0IHdvcmtzIGZvciBhbGwgaXRlcmFibGVzXG4gKlxuICogQHBhcmFtICB7b2JqZWN0fSAgIG9ialxuICogQHBhcmFtICB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBldmVyeShvYmosIGZuKSB7XG4gICAgdmFyIHBhc3MgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCFmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3dpbmcgYW4gZXJyb3IgaXMgdGhlIG9ubHkgd2F5IHRvIGJyZWFrIGBmb3JFYWNoYFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHBhc3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFzcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHNvcnQgPSByZXF1aXJlKFwiLi9wcm90b3R5cGVzL2FycmF5XCIpLnNvcnQ7XG52YXIgc2xpY2UgPSByZXF1aXJlKFwiLi9wcm90b3R5cGVzL2FycmF5XCIpLnNsaWNlO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmF0b3IoYSwgYikge1xuICAgIC8vIHV1aWQsIHdvbid0IGV2ZXIgYmUgZXF1YWxcbiAgICB2YXIgYUNhbGwgPSBhLmdldENhbGwoMCk7XG4gICAgdmFyIGJDYWxsID0gYi5nZXRDYWxsKDApO1xuICAgIHZhciBhSWQgPSAoYUNhbGwgJiYgYUNhbGwuY2FsbElkKSB8fCAtMTtcbiAgICB2YXIgYklkID0gKGJDYWxsICYmIGJDYWxsLmNhbGxJZCkgfHwgLTE7XG5cbiAgICByZXR1cm4gYUlkIDwgYklkID8gLTEgOiAxO1xufVxuXG4vKipcbiAqIEEgU2lub24gcHJveHkgb2JqZWN0IChmYWtlLCBzcHksIHN0dWIpXG4gKlxuICogQHR5cGVkZWYge29iamVjdH0gU2lub25Qcm94eVxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZ2V0Q2FsbCAtIEEgbWV0aG9kIHRoYXQgY2FuIHJldHVybiB0aGUgZmlyc3QgY2FsbFxuICovXG5cbi8qKlxuICogU29ydHMgYW4gYXJyYXkgb2YgU2lub25Qcm94eSBpbnN0YW5jZXMgKGZha2UsIHNweSwgc3R1YikgYnkgdGhlaXIgZmlyc3QgY2FsbFxuICpcbiAqIEBwYXJhbSAge1Npbm9uUHJveHlbXSB8IFNpbm9uUHJveHl9IHNwaWVzXG4gKiBAcmV0dXJucyB7U2lub25Qcm94eVtdfVxuICovXG5mdW5jdGlvbiBvcmRlckJ5Rmlyc3RDYWxsKHNwaWVzKSB7XG4gICAgcmV0dXJuIHNvcnQoc2xpY2Uoc3BpZXMpLCBjb21wYXJhdG9yKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvcmRlckJ5Rmlyc3RDYWxsO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShGdW5jdGlvbi5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShNYXAucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29weVByb3RvdHlwZSA9IHJlcXVpcmUoXCIuL2NvcHktcHJvdG90eXBlXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlQcm90b3R5cGUoT2JqZWN0LnByb3RvdHlwZSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNvcHlQcm90b3R5cGUgPSByZXF1aXJlKFwiLi9jb3B5LXByb3RvdHlwZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5UHJvdG90eXBlKFNldC5wcm90b3R5cGUpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb3B5UHJvdG90eXBlID0gcmVxdWlyZShcIi4vY29weS1wcm90b3R5cGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVByb3RvdHlwZShTdHJpbmcucHJvdG90eXBlKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhcnJheTogcmVxdWlyZShcIi4vYXJyYXlcIiksXG4gICAgZnVuY3Rpb246IHJlcXVpcmUoXCIuL2Z1bmN0aW9uXCIpLFxuICAgIG1hcDogcmVxdWlyZShcIi4vbWFwXCIpLFxuICAgIG9iamVjdDogcmVxdWlyZShcIi4vb2JqZWN0XCIpLFxuICAgIHNldDogcmVxdWlyZShcIi4vc2V0XCIpLFxuICAgIHN0cmluZzogcmVxdWlyZShcIi4vc3RyaW5nXCIpXG59O1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLnR5cGVEZXRlY3QgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbi8qICFcbiAqIHR5cGUtZGV0ZWN0XG4gKiBDb3B5cmlnaHQoYykgMjAxMyBqYWtlIGx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG52YXIgcHJvbWlzZUV4aXN0cyA9IHR5cGVvZiBQcm9taXNlID09PSAnZnVuY3Rpb24nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xudmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyA/IHNlbGYgOiBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaWQtYmxhY2tsaXN0XG5cbnZhciBzeW1ib2xFeGlzdHMgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJztcbnZhciBtYXBFeGlzdHMgPSB0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJztcbnZhciBzZXRFeGlzdHMgPSB0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJztcbnZhciB3ZWFrTWFwRXhpc3RzID0gdHlwZW9mIFdlYWtNYXAgIT09ICd1bmRlZmluZWQnO1xudmFyIHdlYWtTZXRFeGlzdHMgPSB0eXBlb2YgV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCc7XG52YXIgZGF0YVZpZXdFeGlzdHMgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xudmFyIHN5bWJvbEl0ZXJhdG9yRXhpc3RzID0gc3ltYm9sRXhpc3RzICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgIT09ICd1bmRlZmluZWQnO1xudmFyIHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzID0gc3ltYm9sRXhpc3RzICYmIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgIT09ICd1bmRlZmluZWQnO1xudmFyIHNldEVudHJpZXNFeGlzdHMgPSBzZXRFeGlzdHMgJiYgdHlwZW9mIFNldC5wcm90b3R5cGUuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBtYXBFbnRyaWVzRXhpc3RzID0gbWFwRXhpc3RzICYmIHR5cGVvZiBNYXAucHJvdG90eXBlLmVudHJpZXMgPT09ICdmdW5jdGlvbic7XG52YXIgc2V0SXRlcmF0b3JQcm90b3R5cGUgPSBzZXRFbnRyaWVzRXhpc3RzICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgU2V0KCkuZW50cmllcygpKTtcbnZhciBtYXBJdGVyYXRvclByb3RvdHlwZSA9IG1hcEVudHJpZXNFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBNYXAoKS5lbnRyaWVzKCkpO1xudmFyIGFycmF5SXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xJdGVyYXRvckV4aXN0cyAmJiB0eXBlb2YgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbic7XG52YXIgYXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGFycmF5SXRlcmF0b3JFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG52YXIgc3RyaW5nSXRlcmF0b3JFeGlzdHMgPSBzeW1ib2xJdGVyYXRvckV4aXN0cyAmJiB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xudmFyIHN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlID0gc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSk7XG52YXIgdG9TdHJpbmdMZWZ0U2xpY2VMZW5ndGggPSA4O1xudmFyIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCA9IC0xO1xuLyoqXG4gKiAjIyMgdHlwZU9mIChvYmopXG4gKlxuICogVXNlcyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGFuIG9iamVjdCxcbiAqIG5vcm1hbGlzaW5nIGJlaGF2aW91ciBhY3Jvc3MgZW5naW5lIHZlcnNpb25zICYgd2VsbCBvcHRpbWlzZWQuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9IG9iamVjdCB0eXBlXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiB0eXBlRGV0ZWN0KG9iaikge1xuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAgKiBQcmU6XG4gICAqICAgc3RyaW5nIGxpdGVyYWwgICAgIHggMywwMzksMDM1IG9wcy9zZWMgwrExLjYyJSAoNzggcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDEsNDI0LDEzOCBvcHMvc2VjIMKxNC41NCUgKDc1IHJ1bnMgc2FtcGxlZClcbiAgICogICBudW1iZXIgbGl0ZXJhbCAgICAgeCAxLDY1MywxNTMgb3BzL3NlYyDCsTEuOTElICg4MiBydW5zIHNhbXBsZWQpXG4gICAqICAgdW5kZWZpbmVkICAgICAgICAgIHggOSw5NzgsNjYwIG9wcy9zZWMgwrExLjkyJSAoNzUgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDIsNTU2LDc2OSBvcHMvc2VjIMKxMS43MyUgKDc3IHJ1bnMgc2FtcGxlZClcbiAgICogUG9zdDpcbiAgICogICBzdHJpbmcgbGl0ZXJhbCAgICAgeCAzOCw1NjQsNzk2IG9wcy9zZWMgwrExLjE1JSAoNzkgcnVucyBzYW1wbGVkKVxuICAgKiAgIGJvb2xlYW4gbGl0ZXJhbCAgICB4IDMxLDE0OCw5NDAgb3BzL3NlYyDCsTEuMTAlICg3OSBydW5zIHNhbXBsZWQpXG4gICAqICAgbnVtYmVyIGxpdGVyYWwgICAgIHggMzIsNjc5LDMzMCBvcHMvc2VjIMKxMS45MCUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgICogICB1bmRlZmluZWQgICAgICAgICAgeCAzMiwzNjMsMzY4IG9wcy9zZWMgwrExLjA3JSAoODIgcnVucyBzYW1wbGVkKVxuICAgKiAgIGZ1bmN0aW9uICAgICAgICAgICB4IDMxLDI5Niw4NzAgb3BzL3NlYyDCsTAuOTYlICg4MyBydW5zIHNhbXBsZWQpXG4gICAqL1xuICB2YXIgdHlwZW9mT2JqID0gdHlwZW9mIG9iajtcbiAgaWYgKHR5cGVvZk9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mT2JqO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgICogUHJlOlxuICAgKiAgIG51bGwgICAgICAgICAgICAgICB4IDI4LDY0NSw3NjUgb3BzL3NlYyDCsTEuMTclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgbnVsbCAgICAgICAgICAgICAgIHggMzYsNDI4LDk2MiBvcHMvc2VjIMKxMS4zNyUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93KWBgXG4gICAqICAtIE5vZGUgPT09IFwiW29iamVjdCBnbG9iYWxdXCJcbiAgICogIC0gQ2hyb21lID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBXaW5kb3ddXCJcbiAgICogIC0gUGhhbnRvbUpTID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IFdpbmRvd11cIlxuICAgKiAgLSBJRSBFZGdlID09PSBcIltvYmplY3QgV2luZG93XVwiXG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcylgYFxuICAgKiAgLSBDaHJvbWUgV29ya2VyID09PSBcIltvYmplY3QgZ2xvYmFsXVwiXG4gICAqICAtIEZpcmVmb3ggV29ya2VyID09PSBcIltvYmplY3QgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICogIC0gU2FmYXJpIFdvcmtlciA9PT0gXCJbb2JqZWN0IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIElFIDExIFdvcmtlciA9PT0gXCJbb2JqZWN0IFdvcmtlckdsb2JhbFNjb3BlXVwiXG4gICAqICAtIElFIEVkZ2UgV29ya2VyID09PSBcIltvYmplY3QgV29ya2VyR2xvYmFsU2NvcGVdXCJcbiAgICovXG4gIGlmIChvYmogPT09IGdsb2JhbE9iamVjdCkge1xuICAgIHJldHVybiAnZ2xvYmFsJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICAqIFByZTpcbiAgICogICBhcnJheSBsaXRlcmFsICAgICAgeCAyLDg4OCwzNTIgb3BzL3NlYyDCsTAuNjclICg4MiBydW5zIHNhbXBsZWQpXG4gICAqIFBvc3Q6XG4gICAqICAgYXJyYXkgbGl0ZXJhbCAgICAgIHggMjIsNDc5LDY1MCBvcHMvc2VjIMKxMC45NiUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgICovXG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgICAoc3ltYm9sVG9TdHJpbmdUYWdFeGlzdHMgPT09IGZhbHNlIHx8ICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIG9iaikpXG4gICkge1xuICAgIHJldHVybiAnQXJyYXknO1xuICB9XG5cbiAgLy8gTm90IGNhY2hpbmcgZXhpc3RlbmNlIG9mIGB3aW5kb3dgIGFuZCByZWxhdGVkIHByb3BlcnRpZXMgZHVlIHRvIHBvdGVudGlhbFxuICAvLyBmb3IgYHdpbmRvd2AgdG8gYmUgdW5zZXQgYmVmb3JlIHRlc3RzIGluIHF1YXNpLWJyb3dzZXIgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93ICE9PSBudWxsKSB7XG4gICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjbG9jYXRpb24pXG4gICAgICogV2hhdFdHIEhUTUwkNy43LjMgLSBUaGUgYExvY2F0aW9uYCBpbnRlcmZhY2VcbiAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5sb2NhdGlvbilgYFxuICAgICAqICAtIElFIDw9MTEgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKiAgLSBJRSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhdGlvbiA9PT0gJ29iamVjdCcgJiYgb2JqID09PSB3aW5kb3cubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiAnTG9jYXRpb24nO1xuICAgIH1cblxuICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkb2N1bWVudClcbiAgICAgKiBXaGF0V0cgSFRNTCQzLjEuMSAtIFRoZSBgRG9jdW1lbnRgIG9iamVjdFxuICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAqICAgICAgIChodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItSFRNTC9odG1sLmh0bWwjSUQtMjY4MDkyNjgpXG4gICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAqICAgICAgIFdoYXRXRyBIVE1MIHN0YXRlczpcbiAgICAgKiAgICAgICAgID4gRm9yIGhpc3RvcmljYWwgcmVhc29ucywgV2luZG93IG9iamVjdHMgbXVzdCBhbHNvIGhhdmUgYVxuICAgICAqICAgICAgICAgPiB3cml0YWJsZSwgY29uZmlndXJhYmxlLCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lZFxuICAgICAqICAgICAgICAgPiBIVE1MRG9jdW1lbnQgd2hvc2UgdmFsdWUgaXMgdGhlIERvY3VtZW50IGludGVyZmFjZSBvYmplY3QuXG4gICAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb2N1bWVudClgYFxuICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIEZpcmVmb3ggPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgRG9jdW1lbnRdXCJcbiAgICAgKiAgLSBJRSAxMSA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqICAtIElFIEVkZ2UgPD0xMyA9PT0gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIlxuICAgICAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93LmRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiBvYmogPT09IHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuICdEb2N1bWVudCc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yID09PSAnb2JqZWN0Jykge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAgKiAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI21pbWV0eXBlYXJyYXkpXG4gICAgICAgKiBXaGF0V0cgSFRNTCQ4LjYuMS41IC0gUGx1Z2lucyAtIEludGVyZmFjZSBNaW1lVHlwZUFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5taW1lVHlwZXMpYGBcbiAgICAgICAqICAtIElFIDw9MTAgPT09IFwiW29iamVjdCBNU01pbWVUeXBlc0NvbGxlY3Rpb25dXCJcbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzKSB7XG4gICAgICAgIHJldHVybiAnTWltZVR5cGVBcnJheSc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNwbHVnaW5hcnJheSlcbiAgICAgICAqIFdoYXRXRyBIVE1MJDguNi4xLjUgLSBQbHVnaW5zIC0gSW50ZXJmYWNlIFBsdWdpbkFycmF5XG4gICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5hdmlnYXRvci5wbHVnaW5zKWBgXG4gICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgTVNQbHVnaW5zQ29sbGVjdGlvbl1cIlxuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICBvYmogPT09IHdpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucykge1xuICAgICAgICByZXR1cm4gJ1BsdWdpbkFycmF5JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCA9PT0gJ29iamVjdCcpICYmXG4gICAgICAgIG9iaiBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCkge1xuICAgICAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAgICAqIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjcGx1Z2luYXJyYXkpXG4gICAgICAqIFdoYXRXRyBIVE1MJDQuNC40IC0gVGhlIGBibG9ja3F1b3RlYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MUXVvdGVFbGVtZW50YFxuICAgICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jsb2NrcXVvdGUnKSlgYFxuICAgICAgKiAgLSBJRSA8PTEwID09PSBcIltvYmplY3QgSFRNTEJsb2NrRWxlbWVudF1cIlxuICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ0JMT0NLUVVPVEUnKSB7XG4gICAgICAgIHJldHVybiAnSFRNTFF1b3RlRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWRhdGFjZWxsZWxlbWVudClcbiAgICAgICAqIFdoYXRXRyBIVE1MJDQuOS45IC0gVGhlIGB0ZGAgZWxlbWVudCAtIEludGVyZmFjZSBgSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50YFxuICAgICAgICogTm90ZTogTW9zdCBicm93c2VycyBjdXJyZW50bHkgYWRoZXIgdG8gdGhlIFczQyBET00gTGV2ZWwgMiBzcGVjXG4gICAgICAgKiAgICAgICAoaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUhUTUwvaHRtbC5odG1sI0lELTgyOTE1MDc1KVxuICAgICAgICogICAgICAgd2hpY2ggc3VnZ2VzdHMgdGhhdCBicm93c2VycyBzaG91bGQgdXNlIEhUTUxUYWJsZUNlbGxFbGVtZW50IGZvclxuICAgICAgICogICAgICAgYm90aCBURCBhbmQgVEggZWxlbWVudHMuIFdoYXRXRyBzZXBhcmF0ZXMgdGhlc2UuXG4gICAgICAgKiBUZXN0OiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKSlcbiAgICAgICAqICAtIENocm9tZSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBGaXJlZm94ID09PSBcIltvYmplY3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRdXCJcbiAgICAgICAqICAtIFNhZmFyaSA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKi9cbiAgICAgIGlmIChvYmoudGFnTmFtZSA9PT0gJ1REJykge1xuICAgICAgICByZXR1cm4gJ0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudCc7XG4gICAgICB9XG5cbiAgICAgIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgICAgICogKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2h0bWx0YWJsZWhlYWRlcmNlbGxlbGVtZW50KVxuICAgICAgICogV2hhdFdHIEhUTUwkNC45LjkgLSBUaGUgYHRkYCBlbGVtZW50IC0gSW50ZXJmYWNlIGBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudGBcbiAgICAgICAqIE5vdGU6IE1vc3QgYnJvd3NlcnMgY3VycmVudGx5IGFkaGVyIHRvIHRoZSBXM0MgRE9NIExldmVsIDIgc3BlY1xuICAgICAgICogICAgICAgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1IVE1ML2h0bWwuaHRtbCNJRC04MjkxNTA3NSlcbiAgICAgICAqICAgICAgIHdoaWNoIHN1Z2dlc3RzIHRoYXQgYnJvd3NlcnMgc2hvdWxkIHVzZSBIVE1MVGFibGVDZWxsRWxlbWVudCBmb3JcbiAgICAgICAqICAgICAgIGJvdGggVEQgYW5kIFRIIGVsZW1lbnRzLiBXaGF0V0cgc2VwYXJhdGVzIHRoZXNlLlxuICAgICAgICogVGVzdDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpXG4gICAgICAgKiAgLSBDaHJvbWUgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICogIC0gRmlyZWZveCA9PT0gXCJbb2JqZWN0IEhUTUxUYWJsZUNlbGxFbGVtZW50XVwiXG4gICAgICAgKiAgLSBTYWZhcmkgPT09IFwiW29iamVjdCBIVE1MVGFibGVDZWxsRWxlbWVudF1cIlxuICAgICAgICovXG4gICAgICBpZiAob2JqLnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgcmV0dXJuICdIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA2MjUsNjQ0IG9wcy9zZWMgwrExLjU4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgRmxvYXQzMkFycmF5ICAgICAgIHggMSwyNzksODUyIG9wcy9zZWMgwrEyLjkxJSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggMSwxNzgsMTg1IG9wcy9zZWMgwrExLjk1JSAoODMgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggMSwwMDgsMzgwIG9wcy9zZWMgwrEyLjI1JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhBcnJheSAgICAgICAgIHggMSwxMjgsMDQwIG9wcy9zZWMgwrEyLjExJSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggMSwxNzAsMTE5IG9wcy9zZWMgwrEyLjg4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggMSwxNzYsMzQ4IG9wcy9zZWMgwrE1Ljc5JSAoODYgcnVucyBzYW1wbGVkKVxuICAqICAgSW50OEFycmF5ICAgICAgICAgIHggMSwwNTgsNzA3IG9wcy9zZWMgwrE0Ljk0JSAoNzcgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggMSwxMTAsNjMzIG9wcy9zZWMgwrE0LjIwJSAoODAgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBGbG9hdDY0QXJyYXkgICAgICAgeCA3LDEwNSw2NzEgb3BzL3NlYyDCsTEzLjQ3JSAoNjQgcnVucyBzYW1wbGVkKVxuICAqICAgRmxvYXQzMkFycmF5ICAgICAgIHggNSw4ODcsOTEyIG9wcy9zZWMgwrExLjQ2JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDMyQXJyYXkgICAgICAgIHggNiw0OTEsNjYxIG9wcy9zZWMgwrExLjc2JSAoNzkgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDE2QXJyYXkgICAgICAgIHggNiw1NTksNzk1IG9wcy9zZWMgwrExLjY3JSAoODIgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhBcnJheSAgICAgICAgIHggNiw0NjMsOTY2IG9wcy9zZWMgwrExLjQzJSAoODUgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MzJBcnJheSAgICAgICAgIHggNSw2NDEsODQxIG9wcy9zZWMgwrEzLjQ5JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgSW50MTZBcnJheSAgICAgICAgIHggNiw1ODMsNTExIG9wcy9zZWMgwrExLjk4JSAoODAgcnVucyBzYW1wbGVkKVxuICAqICAgSW50OEFycmF5ICAgICAgICAgIHggNiw2MDYsMDc4IG9wcy9zZWMgwrExLjc0JSAoODEgcnVucyBzYW1wbGVkKVxuICAqICAgVWludDhDbGFtcGVkQXJyYXkgIHggNiw2MDIsMjI0IG9wcy9zZWMgwrExLjc3JSAoODMgcnVucyBzYW1wbGVkKVxuICAqL1xuICB2YXIgc3RyaW5nVGFnID0gKHN5bWJvbFRvU3RyaW5nVGFnRXhpc3RzICYmIG9ialtTeW1ib2wudG9TdHJpbmdUYWddKTtcbiAgaWYgKHR5cGVvZiBzdHJpbmdUYWcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuXG4gIHZhciBvYmpQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICByZWdleCBsaXRlcmFsICAgICAgeCAxLDc3MiwzODUgb3BzL3NlYyDCsTEuODUlICg3NyBydW5zIHNhbXBsZWQpXG4gICogICByZWdleCBjb25zdHJ1Y3RvciAgeCAyLDE0Myw2MzQgb3BzL3NlYyDCsTIuNDYlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHJlZ2V4IGxpdGVyYWwgICAgICB4IDMsOTI4LDAwOSBvcHMvc2VjIMKxMC42NSUgKDc4IHJ1bnMgc2FtcGxlZClcbiAgKiAgIHJlZ2V4IGNvbnN0cnVjdG9yICB4IDMsOTMxLDEwOCBvcHMvc2VjIMKxMC41OCUgKDg0IHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKG9ialByb3RvdHlwZSA9PT0gUmVnRXhwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnUmVnRXhwJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgZGF0ZSAgICAgICAgICAgICAgIHggMiwxMzAsMDc0IG9wcy9zZWMgwrE0LjQyJSAoNjggcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBkYXRlICAgICAgICAgICAgICAgeCAzLDk1Myw3Nzkgb3BzL3NlYyDCsTEuMzUlICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IERhdGUucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICdEYXRlJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1wcm9taXNlLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjUuNC41LjQgLSBQcm9taXNlLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJQcm9taXNlXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUHJvbWlzZS5yZXNvbHZlKCkpYGBcbiAgICogIC0gQ2hyb21lIDw9NDcgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICogIC0gRWRnZSA8PTIwID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqICAtIEZpcmVmb3ggMjktTGF0ZXN0ID09PSBcIltvYmplY3QgUHJvbWlzZV1cIlxuICAgKiAgLSBTYWZhcmkgNy4xLUxhdGVzdCA9PT0gXCJbb2JqZWN0IFByb21pc2VdXCJcbiAgICovXG4gIGlmIChwcm9taXNlRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gUHJvbWlzZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1Byb21pc2UnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICBzZXQgICAgICAgICAgICAgICAgeCAyLDIyMiwxODYgb3BzL3NlYyDCsTEuMzElICg4MiBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHNldCAgICAgICAgICAgICAgICB4IDQsNTQ1LDg3OSBvcHMvc2VjIMKxMS4xMyUgKDgzIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHNldEV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IFNldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1NldCc7XG4gIH1cblxuICAvKiAhIFNwZWVkIG9wdGltaXNhdGlvblxuICAqIFByZTpcbiAgKiAgIG1hcCAgICAgICAgICAgICAgICB4IDIsMzk2LDg0MiBvcHMvc2VjIMKxMS41OSUgKDgxIHJ1bnMgc2FtcGxlZClcbiAgKiBQb3N0OlxuICAqICAgbWFwICAgICAgICAgICAgICAgIHggNCwxODMsOTQ1IG9wcy9zZWMgwrE2LjU5JSAoODIgcnVucyBzYW1wbGVkKVxuICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnTWFwJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgd2Vha3NldCAgICAgICAgICAgIHggMSwzMjMsMjIwIG9wcy9zZWMgwrEyLjE3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICB3ZWFrc2V0ICAgICAgICAgICAgeCA0LDIzNyw1MTAgb3BzL3NlYyDCsTIuMDElICg3NyBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmICh3ZWFrU2V0RXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gV2Vha1NldC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ1dlYWtTZXQnO1xuICB9XG5cbiAgLyogISBTcGVlZCBvcHRpbWlzYXRpb25cbiAgKiBQcmU6XG4gICogICB3ZWFrbWFwICAgICAgICAgICAgeCAxLDUwMCwyNjAgb3BzL3NlYyDCsTIuMDIlICg3OCBydW5zIHNhbXBsZWQpXG4gICogUG9zdDpcbiAgKiAgIHdlYWttYXAgICAgICAgICAgICB4IDMsODgxLDM4NCBvcHMvc2VjIMKxMS40NSUgKDgyIHJ1bnMgc2FtcGxlZClcbiAgKi9cbiAgaWYgKHdlYWtNYXBFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBXZWFrTWFwLnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnV2Vha01hcCc7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZGF0YXZpZXcucHJvdG90eXBlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyNC4yLjQuMjEgLSBEYXRhVmlldy5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiRGF0YVZpZXdcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChkYXRhVmlld0V4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IERhdGFWaWV3LnByb3RvdHlwZSkge1xuICAgIHJldHVybiAnRGF0YVZpZXcnO1xuICB9XG5cbiAgLyogISBTcGVjIENvbmZvcm1hbmNlXG4gICAqIChodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLSVtYXBpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIzLjEuNS4yLjIgLSAlTWFwSXRlcmF0b3JQcm90b3R5cGUlW0BAdG9TdHJpbmdUYWddIHNob3VsZCBiZSBcIk1hcCBJdGVyYXRvclwiOlxuICAgKiBUZXN0OiBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ldyBNYXAoKS5lbnRyaWVzKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAobWFwRXhpc3RzICYmIG9ialByb3RvdHlwZSA9PT0gbWFwSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ01hcCBJdGVyYXRvcic7XG4gIH1cblxuICAvKiAhIFNwZWMgQ29uZm9ybWFuY2VcbiAgICogKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtJXNldGl0ZXJhdG9ycHJvdG90eXBlJS1AQHRvc3RyaW5ndGFnKVxuICAgKiBFUzYkMjMuMi41LjIuMiAtICVTZXRJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiU2V0IEl0ZXJhdG9yXCI6XG4gICAqIFRlc3Q6IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3IFNldCgpLmVudHJpZXMoKSlgYFxuICAgKiAgLSBFZGdlIDw9MTMgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICovXG4gIGlmIChzZXRFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzZXRJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU2V0IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUtQEB0b3N0cmluZ3RhZylcbiAgICogRVM2JDIyLjEuNS4yLjIgLSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVbQEB0b1N0cmluZ1RhZ10gc2hvdWxkIGJlIFwiQXJyYXkgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoYXJyYXlJdGVyYXRvckV4aXN0cyAmJiBvYmpQcm90b3R5cGUgPT09IGFycmF5SXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICByZXR1cm4gJ0FycmF5IEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlYyBDb25mb3JtYW5jZVxuICAgKiAoaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLUBAdG9zdHJpbmd0YWcpXG4gICAqIEVTNiQyMS4xLjUuMi4yIC0gJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJVtAQHRvU3RyaW5nVGFnXSBzaG91bGQgYmUgXCJTdHJpbmcgSXRlcmF0b3JcIjpcbiAgICogVGVzdDogYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCgnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpYGBcbiAgICogIC0gRWRnZSA8PTEzID09PSBcIltvYmplY3QgT2JqZWN0XVwiXG4gICAqL1xuICBpZiAoc3RyaW5nSXRlcmF0b3JFeGlzdHMgJiYgb2JqUHJvdG90eXBlID09PSBzdHJpbmdJdGVyYXRvclByb3RvdHlwZSkge1xuICAgIHJldHVybiAnU3RyaW5nIEl0ZXJhdG9yJztcbiAgfVxuXG4gIC8qICEgU3BlZWQgb3B0aW1pc2F0aW9uXG4gICogUHJlOlxuICAqICAgb2JqZWN0IGZyb20gbnVsbCAgIHggMiw0MjQsMzIwIG9wcy9zZWMgwrExLjY3JSAoNzYgcnVucyBzYW1wbGVkKVxuICAqIFBvc3Q6XG4gICogICBvYmplY3QgZnJvbSBudWxsICAgeCA1LDgzOCwwMDAgb3BzL3NlYyDCsTAuOTklICg4NCBydW5zIHNhbXBsZWQpXG4gICovXG4gIGlmIChvYmpQcm90b3R5cGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0XG4gICAgLnByb3RvdHlwZVxuICAgIC50b1N0cmluZ1xuICAgIC5jYWxsKG9iailcbiAgICAuc2xpY2UodG9TdHJpbmdMZWZ0U2xpY2VMZW5ndGgsIHRvU3RyaW5nUmlnaHRTbGljZUxlbmd0aCk7XG59XG5cbnJldHVybiB0eXBlRGV0ZWN0O1xuXG59KSkpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB0eXBlID0gcmVxdWlyZShcInR5cGUtZGV0ZWN0XCIpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxvd2VyLWNhc2UgcmVzdWx0IG9mIHJ1bm5pbmcgdHlwZSBmcm9tIHR5cGUtZGV0ZWN0IG9uIHRoZSB2YWx1ZVxuICpcbiAqIEBwYXJhbSAgeyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlXG4gKlxuICogQHBhcmFtICB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHZhbHVlVG9TdHJpbmcodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUudG9TdHJpbmcpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzaW5vbmpzL25vLXByb3RvdHlwZS1tZXRob2RzL25vLXByb3RvdHlwZS1tZXRob2RzXG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZVRvU3RyaW5nO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdsb2JhbDogcmVxdWlyZShcIi4vZ2xvYmFsXCIpLFxuICAgIGNhbGxlZEluT3JkZXI6IHJlcXVpcmUoXCIuL2NhbGxlZC1pbi1vcmRlclwiKSxcbiAgICBjbGFzc05hbWU6IHJlcXVpcmUoXCIuL2NsYXNzLW5hbWVcIiksXG4gICAgZGVwcmVjYXRlZDogcmVxdWlyZShcIi4vZGVwcmVjYXRlZFwiKSxcbiAgICBldmVyeTogcmVxdWlyZShcIi4vZXZlcnlcIiksXG4gICAgZnVuY3Rpb25OYW1lOiByZXF1aXJlKFwiLi9mdW5jdGlvbi1uYW1lXCIpLFxuICAgIG9yZGVyQnlGaXJzdENhbGw6IHJlcXVpcmUoXCIuL29yZGVyLWJ5LWZpcnN0LWNhbGxcIiksXG4gICAgcHJvdG90eXBlczogcmVxdWlyZShcIi4vcHJvdG90eXBlc1wiKSxcbiAgICB0eXBlT2Y6IHJlcXVpcmUoXCIuL3R5cGUtb2ZcIiksXG4gICAgdmFsdWVUb1N0cmluZzogcmVxdWlyZShcIi4vdmFsdWUtdG8tc3RyaW5nXCIpXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGdsb2JhbE9iamVjdCA9IHJlcXVpcmUoXCJAc2lub25qcy9jb21tb25zXCIpLmdsb2JhbDtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBJZGxlRGVhZGxpbmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlkVGltZW91dCAtIHdoZXRoZXIgb3Igbm90IHRoZSBjYWxsYmFjayB3YXMgY2FsbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgb3B0aW9uYWwgdGltZW91dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOm51bWJlcn0gdGltZVJlbWFpbmluZyAtIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgcHJvdmlkaW5nIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHJlbWFpbmluZyBpbiB0aGUgY3VycmVudCBpZGxlIHBlcmlvZFxuICovXG5cbi8qKlxuICogUXVldWVzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGR1cmluZyBhIGJyb3dzZXIncyBpZGxlIHBlcmlvZHNcbiAqXG4gKiBAY2FsbGJhY2sgUmVxdWVzdElkbGVDYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbihJZGxlRGVhZGxpbmUpfSBjYWxsYmFja1xuICogQHBhcmFtIHt7dGltZW91dDogbnVtYmVyfX0gb3B0aW9ucyAtIGFuIG9wdGlvbnMgb2JqZWN0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgaWRcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBOZXh0VGlja1xuICogQHBhcmFtIHtWb2lkVmFyQXJnc0Z1bmN9IGNhbGxiYWNrIC0gdGhlIGNhbGxiYWNrIHRvIHJ1blxuICogQHBhcmFtIHsuLi4qfSBhcmd1bWVudHMgLSBvcHRpb25hbCBhcmd1bWVudHMgdG8gY2FsbCB0aGUgY2FsbGJhY2sgd2l0aFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgU2V0SW1tZWRpYXRlXG4gKiBAcGFyYW0ge1ZvaWRWYXJBcmdzRnVuY30gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdG8gcnVuXG4gKiBAcGFyYW0gey4uLip9IGFyZ3VtZW50cyAtIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBjYWxsYmFjayB3aXRoXG4gKiBAcmV0dXJucyB7Tm9kZUltbWVkaWF0ZX1cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBWb2lkVmFyQXJnc0Z1bmNcbiAqIEBwYXJhbSB7Li4uKn0gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdG8gcnVuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFJlcXVlc3RBbmltYXRpb25GcmFtZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXIpOnZvaWR9IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICogQHJldHVybnMge251bWJlcn0gLSB0aGUgaWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBlcmZvcm1hbmNlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gbm93XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbG9ja1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vdyAtIHRoZSBjdXJyZW50IHRpbWVcbiAqIEBwcm9wZXJ0eSB7RGF0ZX0gRGF0ZSAtIHRoZSBEYXRlIGNvbnN0cnVjdG9yXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9vcExpbWl0IC0gdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVycyBiZWZvcmUgYXNzdW1pbmcgYW4gaW5maW5pdGUgbG9vcFxuICogQHByb3BlcnR5IHtSZXF1ZXN0SWRsZUNhbGxiYWNrfSByZXF1ZXN0SWRsZUNhbGxiYWNrXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6dm9pZH0gY2FuY2VsSWRsZUNhbGxiYWNrXG4gKiBAcHJvcGVydHkge3NldFRpbWVvdXR9IHNldFRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7Y2xlYXJUaW1lb3V0fSBjbGVhclRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7TmV4dFRpY2t9IG5leHRUaWNrXG4gKiBAcHJvcGVydHkge3F1ZXVlTWljcm90YXNrfSBxdWV1ZU1pY3JvdGFza1xuICogQHByb3BlcnR5IHtzZXRJbnRlcnZhbH0gc2V0SW50ZXJ2YWxcbiAqIEBwcm9wZXJ0eSB7Y2xlYXJJbnRlcnZhbH0gY2xlYXJJbnRlcnZhbFxuICogQHByb3BlcnR5IHtTZXRJbW1lZGlhdGV9IHNldEltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihOb2RlSW1tZWRpYXRlKTp2b2lkfSBjbGVhckltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOm51bWJlcn0gY291bnRUaW1lcnNcbiAqIEBwcm9wZXJ0eSB7UmVxdWVzdEFuaW1hdGlvbkZyYW1lfSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyKTp2b2lkfSBjYW5jZWxBbmltYXRpb25GcmFtZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOnZvaWR9IHJ1bk1pY3JvdGFza3NcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyfSB0aWNrXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8bnVtYmVyPn0gdGlja0FzeW5jXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gbmV4dFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBQcm9taXNlPG51bWJlcj59IG5leHRBc3luY1xuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IHJ1bkFsbFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IHJ1blRvRnJhbWVcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogUHJvbWlzZTxudW1iZXI+fSBydW5BbGxBc3luY1xuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IHJ1blRvTGFzdFxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBQcm9taXNlPG51bWJlcj59IHJ1blRvTGFzdEFzeW5jXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IHJlc2V0XG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlciB8IERhdGUpOiB2b2lkfSBzZXRTeXN0ZW1UaW1lXG4gKiBAcHJvcGVydHkge1BlcmZvcm1hbmNlfSBwZXJmb3JtYW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihudW1iZXJbXSk6IG51bWJlcltdfSBocnRpbWUgLSBwcm9jZXNzLmhydGltZSAobGVnYWN5KVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSB1bmluc3RhbGwgVW5pbnN0YWxsIHRoZSBjbG9jay5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb25bXX0gbWV0aG9kcyAtIHRoZSBtZXRob2RzIHRoYXQgYXJlIGZha2VkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG91bGRDbGVhck5hdGl2ZVRpbWVyc10gaW5oZXJpdGVkIGZyb20gY29uZmlnXG4gKi9cbi8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1wcm9wZXJ0eS1kZXNjcmlwdGlvbiAqL1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYGluc3RhbGxgIG1ldGhvZC5cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb25maWdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfERhdGV9IFtub3ddIGEgbnVtYmVyIChpbiBtaWxsaXNlY29uZHMpIG9yIGEgRGF0ZSBvYmplY3QgKGRlZmF1bHQgZXBvY2gpXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbdG9GYWtlXSBuYW1lcyBvZiB0aGUgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBmYWtlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbG9vcExpbWl0XSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXJzIHRoYXQgd2lsbCBiZSBydW4gd2hlbiBjYWxsaW5nIHJ1bkFsbCgpXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzaG91bGRBZHZhbmNlVGltZV0gdGVsbHMgRmFrZVRpbWVycyB0byBpbmNyZW1lbnQgbW9ja2VkIHRpbWUgYXV0b21hdGljYWxseSAoZGVmYXVsdCBmYWxzZSlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYWR2YW5jZVRpbWVEZWx0YV0gaW5jcmVtZW50IG1vY2tlZCB0aW1lIGV2ZXJ5IDw8YWR2YW5jZVRpbWVEZWx0YT4+IG1zIChkZWZhdWx0OiAyMG1zKVxuICogQHByb3BlcnR5IHtib29sZWFufSBbc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnNdIGZvcndhcmRzIGNsZWFyIHRpbWVyIGNhbGxzIHRvIG5hdGl2ZSBmdW5jdGlvbnMgaWYgdGhleSBhcmUgbm90IGZha2VzIChkZWZhdWx0OiBmYWxzZSlcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLXByb3BlcnR5LWRlc2NyaXB0aW9uICovXG4vKipcbiAqIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgYSBzY2hlZHVsZWQgZmFrZSB0aW1lclxuICpcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRpbWVyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBmdW5jXG4gKiBAcHJvcGVydHkgeypbXX0gYXJnc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGRlbGF5XG4gKiBAcHJvcGVydHkge251bWJlcn0gY2FsbEF0XG4gKiBAcHJvcGVydHkge251bWJlcn0gY3JlYXRlZEF0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGltbWVkaWF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkXG4gKiBAcHJvcGVydHkge0Vycm9yfSBbZXJyb3JdXG4gKi9cblxuLyoqXG4gKiBBIE5vZGUgdGltZXJcbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb2RlSW1tZWRpYXRlXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IGJvb2xlYW59IGhhc1JlZlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBOb2RlSW1tZWRpYXRlfSByZWZcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogTm9kZUltbWVkaWF0ZX0gdW5yZWZcbiAqL1xuLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLXByb3BlcnR5LWRlc2NyaXB0aW9uICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cblxuLyoqXG4gKiBNb2NrcyBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhlIHNwZWNpZmllZCBnbG9iYWwgbmFtZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7Kn0gX2dsb2JhbCBOYW1lc3BhY2UgdG8gbW9jayAoZS5nLiBgd2luZG93YClcbiAqIEByZXR1cm5zIHtGYWtlVGltZXJzfVxuICovXG5mdW5jdGlvbiB3aXRoR2xvYmFsKF9nbG9iYWwpIHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBfZ2xvYmFsLm5hdmlnYXRvciAmJiBfZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgaXNSdW5uaW5nSW5JRSA9IHVzZXJBZ2VudCAmJiB1c2VyQWdlbnQuaW5kZXhPZihcIk1TSUUgXCIpID4gLTE7XG4gICAgY29uc3QgbWF4VGltZW91dCA9IE1hdGgucG93KDIsIDMxKSAtIDE7IC8vc2VlIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Fic3RyYWN0LW9wZGVmLWNvbnZlcnR0b2ludFxuICAgIGNvbnN0IGlkQ291bnRlclN0YXJ0ID0gMWUxMjsgLy8gYXJiaXRyYXJpbHkgbGFyZ2UgbnVtYmVyIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBuYXRpdmUgdGltZXIgSURzXG4gICAgY29uc3QgTk9PUCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIGNvbnN0IE5PT1BfQVJSQVkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIGNvbnN0IHRpbWVvdXRSZXN1bHQgPSBfZ2xvYmFsLnNldFRpbWVvdXQoTk9PUCwgMCk7XG4gICAgY29uc3QgYWRkVGltZXJSZXR1cm5zT2JqZWN0ID0gdHlwZW9mIHRpbWVvdXRSZXN1bHQgPT09IFwib2JqZWN0XCI7XG4gICAgY29uc3QgaHJ0aW1lUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwucHJvY2VzcyAmJiB0eXBlb2YgX2dsb2JhbC5wcm9jZXNzLmhydGltZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IGhydGltZUJpZ2ludFByZXNlbnQgPVxuICAgICAgICBocnRpbWVQcmVzZW50ICYmIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lLmJpZ2ludCA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IG5leHRUaWNrUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwucHJvY2VzcyAmJiB0eXBlb2YgX2dsb2JhbC5wcm9jZXNzLm5leHRUaWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgdXRpbFByb21pc2lmeSA9IF9nbG9iYWwucHJvY2VzcyAmJiByZXF1aXJlKFwidXRpbFwiKS5wcm9taXNpZnk7XG4gICAgY29uc3QgcGVyZm9ybWFuY2VQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5wZXJmb3JtYW5jZSAmJiB0eXBlb2YgX2dsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBoYXNQZXJmb3JtYW5jZVByb3RvdHlwZSA9XG4gICAgICAgIF9nbG9iYWwuUGVyZm9ybWFuY2UgJiZcbiAgICAgICAgKHR5cGVvZiBfZ2xvYmFsLlBlcmZvcm1hbmNlKS5tYXRjaCgvXihmdW5jdGlvbnxvYmplY3QpJC8pO1xuICAgIGNvbnN0IHF1ZXVlTWljcm90YXNrUHJlc2VudCA9IF9nbG9iYWwuaGFzT3duUHJvcGVydHkoXCJxdWV1ZU1pY3JvdGFza1wiKTtcbiAgICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgJiZcbiAgICAgICAgdHlwZW9mIF9nbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgY2FuY2VsQW5pbWF0aW9uRnJhbWVQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSAmJlxuICAgICAgICB0eXBlb2YgX2dsb2JhbC5jYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIGNvbnN0IHJlcXVlc3RJZGxlQ2FsbGJhY2tQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrICYmXG4gICAgICAgIHR5cGVvZiBfZ2xvYmFsLnJlcXVlc3RJZGxlQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIjtcbiAgICBjb25zdCBjYW5jZWxJZGxlQ2FsbGJhY2tQcmVzZW50ID1cbiAgICAgICAgX2dsb2JhbC5jYW5jZWxJZGxlQ2FsbGJhY2sgJiZcbiAgICAgICAgdHlwZW9mIF9nbG9iYWwuY2FuY2VsSWRsZUNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3Qgc2V0SW1tZWRpYXRlUHJlc2VudCA9XG4gICAgICAgIF9nbG9iYWwuc2V0SW1tZWRpYXRlICYmIHR5cGVvZiBfZ2xvYmFsLnNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiO1xuXG4gICAgLy8gTWFrZSBwcm9wZXJ0aWVzIHdyaXRhYmxlIGluIElFLCBhcyBwZXJcbiAgICAvLyBodHRwczovL3d3dy5hZGVxdWF0ZWx5Z29vZC5jb20vUmVwbGFjaW5nLXNldFRpbWVvdXQtR2xvYmFsbHkuaHRtbFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduICovXG4gICAgaWYgKGlzUnVubmluZ0luSUUpIHtcbiAgICAgICAgX2dsb2JhbC5zZXRUaW1lb3V0ID0gX2dsb2JhbC5zZXRUaW1lb3V0O1xuICAgICAgICBfZ2xvYmFsLmNsZWFyVGltZW91dCA9IF9nbG9iYWwuY2xlYXJUaW1lb3V0O1xuICAgICAgICBfZ2xvYmFsLnNldEludGVydmFsID0gX2dsb2JhbC5zZXRJbnRlcnZhbDtcbiAgICAgICAgX2dsb2JhbC5jbGVhckludGVydmFsID0gX2dsb2JhbC5jbGVhckludGVydmFsO1xuICAgICAgICBfZ2xvYmFsLkRhdGUgPSBfZ2xvYmFsLkRhdGU7XG4gICAgfVxuXG4gICAgLy8gc2V0SW1tZWRpYXRlIGlzIG5vdCBhIHN0YW5kYXJkIGZ1bmN0aW9uXG4gICAgLy8gYXZvaWQgYWRkaW5nIHRoZSBwcm9wIHRvIHRoZSB3aW5kb3cgb2JqZWN0IGlmIG5vdCBwcmVzZW50XG4gICAgaWYgKHNldEltbWVkaWF0ZVByZXNlbnQpIHtcbiAgICAgICAgX2dsb2JhbC5zZXRJbW1lZGlhdGUgPSBfZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgX2dsb2JhbC5jbGVhckltbWVkaWF0ZSA9IF9nbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gKi9cblxuICAgIF9nbG9iYWwuY2xlYXJUaW1lb3V0KHRpbWVvdXRSZXN1bHQpO1xuXG4gICAgY29uc3QgTmF0aXZlRGF0ZSA9IF9nbG9iYWwuRGF0ZTtcbiAgICBsZXQgdW5pcXVlVGltZXJJZCA9IGlkQ291bnRlclN0YXJ0O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTnVtYmVyRmluaXRlKG51bSkge1xuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNGaW5pdGUobnVtKTtcbiAgICB9XG5cbiAgICBsZXQgaXNOZWFySW5maW5pdGVMaW1pdCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSkge1xuICAgICAgICBpZiAoY2xvY2subG9vcExpbWl0ICYmIGkgPT09IGNsb2NrLmxvb3BMaW1pdCAtIDEpIHtcbiAgICAgICAgICAgIGlzTmVhckluZmluaXRlTGltaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXNldElzTmVhckluZmluaXRlTGltaXQoKSB7XG4gICAgICAgIGlzTmVhckluZmluaXRlTGltaXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBzdHJpbmdzIGxpa2UgXCIwMToxMDowMFwiIChtZWFuaW5nIDEgaG91ciwgMTAgbWludXRlcywgMCBzZWNvbmRzKSBpbnRvXG4gICAgICogbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgaHVtYW4tcmVhZGFibGUgc3RyaW5ncyBwYXNzZWRcbiAgICAgKiB0byBjbG9jay50aWNrKClcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlVGltZShzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyaW5ncyA9IHN0ci5zcGxpdChcIjpcIik7XG4gICAgICAgIGNvbnN0IGwgPSBzdHJpbmdzLmxlbmd0aDtcbiAgICAgICAgbGV0IGkgPSBsO1xuICAgICAgICBsZXQgbXMgPSAwO1xuICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgIGlmIChsID4gMyB8fCAhL14oXFxkXFxkOil7MCwyfVxcZFxcZD8kLy50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcInRpY2sgb25seSB1bmRlcnN0YW5kcyBudW1iZXJzLCAnbTpzJyBhbmQgJ2g6bTpzJy4gRWFjaCBwYXJ0IG11c3QgYmUgdHdvIGRpZ2l0c1wiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nc1tpXSwgMTApO1xuXG4gICAgICAgICAgICBpZiAocGFyc2VkID49IDYwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRpbWUgJHtzdHJ9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1zICs9IHBhcnNlZCAqIE1hdGgucG93KDYwLCBsIC0gaSAtIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1zICogMTAwMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlY2ltYWwgcGFydCBvZiB0aGUgbWlsbGlzZWNvbmQgdmFsdWUgYXMgbmFub3NlY29uZHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtc0Zsb2F0IHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gICAgICogQHJldHVybnMge251bWJlcn0gYW4gaW50ZWdlciBudW1iZXIgb2YgbmFub3NlY29uZHMgaW4gdGhlIHJhbmdlIFswLDFlNilcbiAgICAgKlxuICAgICAqIEV4YW1wbGU6IG5hbm9SZW1haW5lcigxMjMuNDU2Nzg5KSAtPiA0NTY3ODlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuYW5vUmVtYWluZGVyKG1zRmxvYXQpIHtcbiAgICAgICAgY29uc3QgbW9kdWxvID0gMWU2O1xuICAgICAgICBjb25zdCByZW1haW5kZXIgPSAobXNGbG9hdCAqIDFlNikgJSBtb2R1bG87XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlUmVtYWluZGVyID1cbiAgICAgICAgICAgIHJlbWFpbmRlciA8IDAgPyByZW1haW5kZXIgKyBtb2R1bG8gOiByZW1haW5kZXI7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IocG9zaXRpdmVSZW1haW5kZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZ3JvayB0aGUgYG5vd2AgcGFyYW1ldGVyIHRvIGNyZWF0ZUNsb2NrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtEYXRlfG51bWJlcn0gZXBvY2ggdGhlIHN5c3RlbSB0aW1lXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRFcG9jaChlcG9jaCkge1xuICAgICAgICBpZiAoIWVwb2NoKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVwb2NoLmdldFRpbWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIGVwb2NoLmdldFRpbWUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVwb2NoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXBvY2g7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5vdyBzaG91bGQgYmUgbWlsbGlzZWNvbmRzIHNpbmNlIFVOSVggZXBvY2hcIik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9cbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluUmFuZ2UoZnJvbSwgdG8sIHRpbWVyKSB7XG4gICAgICAgIHJldHVybiB0aW1lciAmJiB0aW1lci5jYWxsQXQgPj0gZnJvbSAmJiB0aW1lci5jYWxsQXQgPD0gdG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSBqb2JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRJbmZpbml0ZUxvb3BFcnJvcihjbG9jaywgam9iKSB7XG4gICAgICAgIGNvbnN0IGluZmluaXRlTG9vcEVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFib3J0aW5nIGFmdGVyIHJ1bm5pbmcgJHtjbG9jay5sb29wTGltaXR9IHRpbWVycywgYXNzdW1pbmcgYW4gaW5maW5pdGUgbG9vcCFgXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFqb2IuZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmZpbml0ZUxvb3BFcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHBhdHRlcm4gbmV2ZXIgbWF0Y2hlZCBpbiBOb2RlXG4gICAgICAgIGNvbnN0IGNvbXB1dGVkVGFyZ2V0UGF0dGVybiA9IC90YXJnZXRcXC4qWzx8KHxbXS4qP1s+fFxcXXwpXVxccyovO1xuICAgICAgICBsZXQgY2xvY2tNZXRob2RQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgIFN0cmluZyhPYmplY3Qua2V5cyhjbG9jaykuam9pbihcInxcIikpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFkZFRpbWVyUmV0dXJuc09iamVjdCkge1xuICAgICAgICAgICAgLy8gbm9kZS5qcyBlbnZpcm9ubWVudFxuICAgICAgICAgICAgY2xvY2tNZXRob2RQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICBgXFxcXHMrYXQgKE9iamVjdFxcXFwuKT8oPzoke09iamVjdC5rZXlzKGNsb2NrKS5qb2luKFwifFwiKX0pXFxcXHMrYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtYXRjaGVkTGluZUluZGV4ID0gLTE7XG4gICAgICAgIGpvYi5lcnJvci5zdGFjay5zcGxpdChcIlxcblwiKS5zb21lKGZ1bmN0aW9uIChsaW5lLCBpKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBtYXRjaGVkIGEgY29tcHV0ZWQgdGFyZ2V0IGxpbmUgKGUuZy4gc2V0VGltZW91dCkgdGhlbiB3ZVxuICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byBsb29rIGFueSBmdXJ0aGVyLiBSZXR1cm4gdHJ1ZSB0byBzdG9wIGl0ZXJhdGluZy5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRDb21wdXRlZFRhcmdldCA9IGxpbmUubWF0Y2goY29tcHV0ZWRUYXJnZXRQYXR0ZXJuKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb21wdXRlZFRhcmdldCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRMaW5lSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBtYXRjaGVkIGEgY2xvY2sgbWV0aG9kIGxpbmUsIHRoZW4gdGhlcmUgbWF5IHN0aWxsIGJlXG4gICAgICAgICAgICAvLyBvdGhlcnMgZnVydGhlciBkb3duIHRoZSB0cmFjZS4gUmV0dXJuIGZhbHNlIHRvIGtlZXAgaXRlcmF0aW5nLlxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZENsb2NrTWV0aG9kID0gbGluZS5tYXRjaChjbG9ja01ldGhvZFBhdHRlcm4pO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRDbG9ja01ldGhvZCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRMaW5lSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIGFueXRoaW5nIG9uIHRoaXMgbGluZSwgYnV0IHdlIG1hdGNoZWRcbiAgICAgICAgICAgIC8vIHByZXZpb3VzbHkgYW5kIHNldCB0aGUgbWF0Y2hlZCBsaW5lIGluZGV4LCB0aGVuIHdlIGNhbiBzdG9wLlxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIHByZXZpb3VzbHksIHRoZW4gd2Ugc2hvdWxkIGtlZXAgaXRlcmF0aW5nLlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRMaW5lSW5kZXggPj0gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSBgJHtpbmZpbml0ZUxvb3BFcnJvcn1cXG4ke2pvYi50eXBlIHx8IFwiTWljcm90YXNrXCJ9IC0gJHtcbiAgICAgICAgICAgIGpvYi5mdW5jLm5hbWUgfHwgXCJhbm9ueW1vdXNcIlxuICAgICAgICB9XFxuJHtqb2IuZXJyb3Iuc3RhY2tcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLnNsaWNlKG1hdGNoZWRMaW5lSW5kZXggKyAxKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIil9YDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluZmluaXRlTG9vcEVycm9yLCBcInN0YWNrXCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogc3RhY2ssXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZmluaXRlTG9vcEVycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHtEYXRlfSBzb3VyY2VcbiAgICAgKiBAcmV0dXJucyB7RGF0ZX0gdGhlIHRhcmdldCBhZnRlciBtb2RpZmljYXRpb25zXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWlycm9yRGF0ZVByb3BlcnRpZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgbGV0IHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc3BlY2lhbCBub3cgaW1wbGVtZW50YXRpb25cbiAgICAgICAgaWYgKHNvdXJjZS5ub3cpIHtcbiAgICAgICAgICAgIHRhcmdldC5ub3cgPSBmdW5jdGlvbiBub3coKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5jbG9jay5ub3c7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC5ub3c7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc3BlY2lhbCB0b1NvdXJjZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICBpZiAoc291cmNlLnRvU291cmNlKSB7XG4gICAgICAgICAgICB0YXJnZXQudG9Tb3VyY2UgPSBmdW5jdGlvbiB0b1NvdXJjZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlLnRvU291cmNlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIHRhcmdldC50b1NvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBzcGVjaWFsIHRvU3RyaW5nIGltcGxlbWVudGF0aW9uXG4gICAgICAgIHRhcmdldC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS50b1N0cmluZygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRhcmdldC5wcm90b3R5cGUgPSBzb3VyY2UucHJvdG90eXBlO1xuICAgICAgICB0YXJnZXQucGFyc2UgPSBzb3VyY2UucGFyc2U7XG4gICAgICAgIHRhcmdldC5VVEMgPSBzb3VyY2UuVVRDO1xuICAgICAgICB0YXJnZXQucHJvdG90eXBlLnRvVVRDU3RyaW5nID0gc291cmNlLnByb3RvdHlwZS50b1VUQ1N0cmluZztcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHllYXJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBob3VyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW51dGVcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNlY29uZFxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbXNcbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMge0RhdGV9XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBDbG9ja0RhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtcykge1xuICAgICAgICAgICAgLy8gdGhlIERhdGUgY29uc3RydWN0b3IgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIHJlZiBFY21hLTI2MiBFZGl0aW9uIDUuMSwgc2VjdGlvbiAxNS45LjIuXG4gICAgICAgICAgICAvLyBUaGlzIHJlbWFpbnMgc28gaW4gdGhlIDEwdGggZWRpdGlvbiBvZiAyMDE5IGFzIHdlbGwuXG4gICAgICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2xvY2tEYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZShDbG9ja0RhdGUuY2xvY2subm93KS50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBEYXRlIGlzIGNhbGxlZCBhcyBhIGNvbnN0cnVjdG9yIHdpdGggJ25ldycga2V5d29yZFxuICAgICAgICAgICAgLy8gRGVmZW5zaXZlIGFuZCB2ZXJib3NlIHRvIGF2b2lkIHBvdGVudGlhbCBoYXJtIGluIHBhc3NpbmdcbiAgICAgICAgICAgIC8vIGV4cGxpY2l0IHVuZGVmaW5lZCB3aGVuIHVzZXIgZG9lcyBub3QgcGFzcyBhcmd1bWVudFxuICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoQ2xvY2tEYXRlLmNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhcik7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgpO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cik7XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbnV0ZSk7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZURhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtaXJyb3JEYXRlUHJvcGVydGllcyhDbG9ja0RhdGUsIE5hdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBlbnF1ZXVlSm9iKGNsb2NrLCBqb2IpIHtcbiAgICAgICAgLy8gZW5xdWV1ZXMgYSBtaWNyb3RpY2stZGVmZXJyZWQgdGFzayAtIGVjbWEyNjIvI3NlYy1lbnF1ZXVlam9iXG4gICAgICAgIGlmICghY2xvY2suam9icykge1xuICAgICAgICAgICAgY2xvY2suam9icyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNsb2NrLmpvYnMucHVzaChqb2IpO1xuICAgIH1cblxuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBmdW5jdGlvbiBydW5Kb2JzKGNsb2NrKSB7XG4gICAgICAgIC8vIHJ1bnMgYWxsIG1pY3JvdGljay1kZWZlcnJlZCB0YXNrcyAtIGVjbWEyNjIvI3NlYy1ydW5qb2JzXG4gICAgICAgIGlmICghY2xvY2suam9icykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xvY2suam9icy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgam9iID0gY2xvY2suam9ic1tpXTtcbiAgICAgICAgICAgIGpvYi5mdW5jLmFwcGx5KG51bGwsIGpvYi5hcmdzKTtcblxuICAgICAgICAgICAgY2hlY2tJc05lYXJJbmZpbml0ZUxpbWl0KGNsb2NrLCBpKTtcbiAgICAgICAgICAgIGlmIChjbG9jay5sb29wTGltaXQgJiYgaSA+IGNsb2NrLmxvb3BMaW1pdCkge1xuICAgICAgICAgICAgICAgIHRocm93IGdldEluZmluaXRlTG9vcEVycm9yKGNsb2NrLCBqb2IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICBjbG9jay5qb2JzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IGlkIG9mIHRoZSBjcmVhdGVkIHRpbWVyXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkVGltZXIoY2xvY2ssIHRpbWVyKSB7XG4gICAgICAgIGlmICh0aW1lci5mdW5jID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQgdG8gdGltZXIgY2FsbHNcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkVGltZXJSZXR1cm5zT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBOb2RlLmpzIGVudmlyb25tZW50XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVyLmZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBbRVJSX0lOVkFMSURfQ0FMTEJBQ0tdOiBDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uIFJlY2VpdmVkICR7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lci5mdW5jXG4gICAgICAgICAgICAgICAgICAgIH0gb2YgdHlwZSAke3R5cGVvZiB0aW1lci5mdW5jfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckluZmluaXRlTGltaXQpIHtcbiAgICAgICAgICAgIHRpbWVyLmVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lci50eXBlID0gdGltZXIuaW1tZWRpYXRlID8gXCJJbW1lZGlhdGVcIiA6IFwiVGltZW91dFwiO1xuXG4gICAgICAgIGlmICh0aW1lci5oYXNPd25Qcm9wZXJ0eShcImRlbGF5XCIpKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRpbWVyLmRlbGF5ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGltZXIuZGVsYXkgPSBwYXJzZUludCh0aW1lci5kZWxheSwgMTApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzTnVtYmVyRmluaXRlKHRpbWVyLmRlbGF5KSkge1xuICAgICAgICAgICAgICAgIHRpbWVyLmRlbGF5ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbWVyLmRlbGF5ID0gdGltZXIuZGVsYXkgPiBtYXhUaW1lb3V0ID8gMSA6IHRpbWVyLmRlbGF5O1xuICAgICAgICAgICAgdGltZXIuZGVsYXkgPSBNYXRoLm1heCgwLCB0aW1lci5kZWxheSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXIuaGFzT3duUHJvcGVydHkoXCJpbnRlcnZhbFwiKSkge1xuICAgICAgICAgICAgdGltZXIudHlwZSA9IFwiSW50ZXJ2YWxcIjtcbiAgICAgICAgICAgIHRpbWVyLmludGVydmFsID0gdGltZXIuaW50ZXJ2YWwgPiBtYXhUaW1lb3V0ID8gMSA6IHRpbWVyLmludGVydmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWVyLmhhc093blByb3BlcnR5KFwiYW5pbWF0aW9uXCIpKSB7XG4gICAgICAgICAgICB0aW1lci50eXBlID0gXCJBbmltYXRpb25GcmFtZVwiO1xuICAgICAgICAgICAgdGltZXIuYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lci5oYXNPd25Qcm9wZXJ0eShcImlkbGVDYWxsYmFja1wiKSkge1xuICAgICAgICAgICAgdGltZXIudHlwZSA9IFwiSWRsZUNhbGxiYWNrXCI7XG4gICAgICAgICAgICB0aW1lci5pZGxlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjbG9jay50aW1lcnMpIHtcbiAgICAgICAgICAgIGNsb2NrLnRpbWVycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZXIuaWQgPSB1bmlxdWVUaW1lcklkKys7XG4gICAgICAgIHRpbWVyLmNyZWF0ZWRBdCA9IGNsb2NrLm5vdztcbiAgICAgICAgdGltZXIuY2FsbEF0ID1cbiAgICAgICAgICAgIGNsb2NrLm5vdyArIChwYXJzZUludCh0aW1lci5kZWxheSkgfHwgKGNsb2NrLmR1cmluZ1RpY2sgPyAxIDogMCkpO1xuXG4gICAgICAgIGNsb2NrLnRpbWVyc1t0aW1lci5pZF0gPSB0aW1lcjtcblxuICAgICAgICBpZiAoYWRkVGltZXJSZXR1cm5zT2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgICAgcmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1bnJlZjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIuaWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gW3RpbWVyLmZ1bmMsIHRpbWVyLmRlbGF5XS5jb25jYXQodGltZXIuYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1N5bWJvbC50b1ByaW1pdGl2ZV06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVyLmlkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aW1lci5pZDtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQgY29uc2lzdGVudC1yZXR1cm46IFwib2ZmXCIgKi9cbiAgICAvKipcbiAgICAgKiBUaW1lciBjb21wYXJpdG9yXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSBhXG4gICAgICogQHBhcmFtIHtUaW1lcn0gYlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZVRpbWVycyhhLCBiKSB7XG4gICAgICAgIC8vIFNvcnQgZmlyc3QgYnkgYWJzb2x1dGUgdGltaW5nXG4gICAgICAgIGlmIChhLmNhbGxBdCA8IGIuY2FsbEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuY2FsbEF0ID4gYi5jYWxsQXQpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBuZXh0IGJ5IGltbWVkaWF0ZSwgaW1tZWRpYXRlIHRpbWVycyB0YWtlIHByZWNlZGVuY2VcbiAgICAgICAgaWYgKGEuaW1tZWRpYXRlICYmICFiLmltbWVkaWF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYS5pbW1lZGlhdGUgJiYgYi5pbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBuZXh0IGJ5IGNyZWF0aW9uIHRpbWUsIGVhcmxpZXItY3JlYXRlZCB0aW1lcnMgdGFrZSBwcmVjZWRlbmNlXG4gICAgICAgIGlmIChhLmNyZWF0ZWRBdCA8IGIuY3JlYXRlZEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuY3JlYXRlZEF0ID4gYi5jcmVhdGVkQXQpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydCBuZXh0IGJ5IGlkLCBsb3dlci1pZCB0aW1lcnMgdGFrZSBwcmVjZWRlbmNlXG4gICAgICAgIGlmIChhLmlkIDwgYi5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhLmlkID4gYi5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcyB0aW1lciBpZHMgYXJlIHVuaXF1ZSwgbm8gZmFsbGJhY2sgYDBgIGlzIG5lY2Vzc2FyeVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaW1lcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgZnJvbSwgdG8pIHtcbiAgICAgICAgY29uc3QgdGltZXJzID0gY2xvY2sudGltZXJzO1xuICAgICAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgICAgICBsZXQgaWQsIGlzSW5SYW5nZTtcblxuICAgICAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICBpc0luUmFuZ2UgPSBpblJhbmdlKGZyb20sIHRvLCB0aW1lcnNbaWRdKTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgaXNJblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IDEpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcmV0dXJucyB7VGltZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlyc3RUaW1lcihjbG9jaykge1xuICAgICAgICBjb25zdCB0aW1lcnMgPSBjbG9jay50aW1lcnM7XG4gICAgICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgICAgIGxldCBpZDtcblxuICAgICAgICBmb3IgKGlkIGluIHRpbWVycykge1xuICAgICAgICAgICAgaWYgKHRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbWVyIHx8IGNvbXBhcmVUaW1lcnModGltZXIsIHRpbWVyc1tpZF0pID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcmV0dXJucyB7VGltZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdFRpbWVyKGNsb2NrKSB7XG4gICAgICAgIGNvbnN0IHRpbWVycyA9IGNsb2NrLnRpbWVycztcbiAgICAgICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICAgICAgbGV0IGlkO1xuXG4gICAgICAgIGZvciAoaWQgaW4gdGltZXJzKSB7XG4gICAgICAgICAgICBpZiAodGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGltZXIgfHwgY29tcGFyZVRpbWVycyh0aW1lciwgdGltZXJzW2lkXSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyID0gdGltZXJzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge1RpbWVyfSB0aW1lclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhbGxUaW1lcihjbG9jaywgdGltZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aW1lci5pbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgY2xvY2sudGltZXJzW3RpbWVyLmlkXS5jYWxsQXQgKz0gdGltZXIuaW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgY2xvY2sudGltZXJzW3RpbWVyLmlkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdGltZXIuZnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aW1lci5mdW5jLmFwcGx5KG51bGwsIHRpbWVyLmFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyogZXNsaW50IG5vLWV2YWw6IFwib2ZmXCIgKi9cbiAgICAgICAgICAgIGNvbnN0IGV2YWwyID0gZXZhbDtcbiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXZhbDIodGltZXIuZnVuYyk7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBjbGVhciBoYW5kbGVyIG5hbWUgZm9yIGEgZ2l2ZW4gdGltZXIgdHlwZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0dHlwZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldENsZWFySGFuZGxlcih0dHlwZSkge1xuICAgICAgICBpZiAodHR5cGUgPT09IFwiSWRsZUNhbGxiYWNrXCIgfHwgdHR5cGUgPT09IFwiQW5pbWF0aW9uRnJhbWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIGBjYW5jZWwke3R0eXBlfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBjbGVhciR7dHR5cGV9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHNjaGVkdWxlIGhhbmRsZXIgbmFtZSBmb3IgYSBnaXZlbiB0aW1lciB0eXBlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0U2NoZWR1bGVIYW5kbGVyKHR0eXBlKSB7XG4gICAgICAgIGlmICh0dHlwZSA9PT0gXCJJZGxlQ2FsbGJhY2tcIiB8fCB0dHlwZSA9PT0gXCJBbmltYXRpb25GcmFtZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYHJlcXVlc3Qke3R0eXBlfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBzZXQke3R0eXBlfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gdG8gd2FybiBvbmx5IG9uY2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVXYXJuT25jZSgpIHtcbiAgICAgICAgbGV0IGNhbGxzID0gMDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtc2cpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgIWNhbGxzKysgJiYgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHdhcm5PbmNlID0gY3JlYXRlV2Fybk9uY2UoKTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q2xvY2t9IGNsb2NrXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVySWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHR5cGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCB0dHlwZSkge1xuICAgICAgICBpZiAoIXRpbWVySWQpIHtcbiAgICAgICAgICAgIC8vIG51bGwgYXBwZWFycyB0byBiZSBhbGxvd2VkIGluIG1vc3QgYnJvd3NlcnMsIGFuZCBhcHBlYXJzIHRvIGJlXG4gICAgICAgICAgICAvLyByZWxpZWQgdXBvbiBieSBzb21lIGxpYnJhcmllcywgbGlrZSBCb290c3RyYXAgY2Fyb3VzZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICBjbG9jay50aW1lcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluIE5vZGUsIHRoZSBJRCBpcyBzdG9yZWQgYXMgdGhlIHByaW1pdGl2ZSB2YWx1ZSBmb3IgYFRpbWVvdXRgIG9iamVjdHNcbiAgICAgICAgLy8gZm9yIGBJbW1lZGlhdGVgIG9iamVjdHMsIG5vIElEIGV4aXN0cywgc28gaXQgZ2V0cyBjb2VyY2VkIHRvIE5hTlxuICAgICAgICBjb25zdCBpZCA9IE51bWJlcih0aW1lcklkKTtcblxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGlkKSB8fCBpZCA8IGlkQ291bnRlclN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyTmFtZSA9IGdldENsZWFySGFuZGxlcih0dHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChjbG9jay5zaG91bGRDbGVhck5hdGl2ZVRpbWVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUhhbmRsZXIgPSBjbG9ja1tgXyR7aGFuZGxlck5hbWV9YF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBuYXRpdmVIYW5kbGVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyBuYXRpdmVIYW5kbGVyKHRpbWVySWQpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgYEZha2VUaW1lcnM6ICR7aGFuZGxlck5hbWV9IHdhcyBpbnZva2VkIHRvIGNsZWFyIGEgbmF0aXZlIHRpbWVyIGluc3RlYWQgb2Ygb25lIGNyZWF0ZWQgYnkgdGhpcyBsaWJyYXJ5LmAgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcblRvIGF1dG9tYXRpY2FsbHkgY2xlYW4tdXAgbmF0aXZlIHRpbWVycywgdXNlIGBzaG91bGRDbGVhck5hdGl2ZVRpbWVyc2AuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvY2sudGltZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgSUQgbWF0Y2hlcyBhIHRpbWVyIG9mIHRoZSBjb3JyZWN0IHR5cGVcbiAgICAgICAgICAgIGNvbnN0IHRpbWVyID0gY2xvY2sudGltZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aW1lci50eXBlID09PSB0dHlwZSB8fFxuICAgICAgICAgICAgICAgICh0aW1lci50eXBlID09PSBcIlRpbWVvdXRcIiAmJiB0dHlwZSA9PT0gXCJJbnRlcnZhbFwiKSB8fFxuICAgICAgICAgICAgICAgICh0aW1lci50eXBlID09PSBcIkludGVydmFsXCIgJiYgdHR5cGUgPT09IFwiVGltZW91dFwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNsb2NrLnRpbWVyc1tpZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFyID0gZ2V0Q2xlYXJIYW5kbGVyKHR0eXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlZHVsZSA9IGdldFNjaGVkdWxlSGFuZGxlcih0aW1lci50eXBlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBDYW5ub3QgY2xlYXIgdGltZXI6IHRpbWVyIGNyZWF0ZWQgd2l0aCAke3NjaGVkdWxlfSgpIGJ1dCBjbGVhcmVkIHdpdGggJHtjbGVhcn0oKWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge0NvbmZpZ30gY29uZmlnXG4gICAgICogQHJldHVybnMge1RpbWVyW119XG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pbnN0YWxsKGNsb2NrLCBjb25maWcpIHtcbiAgICAgICAgbGV0IG1ldGhvZCwgaSwgbDtcbiAgICAgICAgY29uc3QgaW5zdGFsbGVkSHJUaW1lID0gXCJfaHJ0aW1lXCI7XG4gICAgICAgIGNvbnN0IGluc3RhbGxlZE5leHRUaWNrID0gXCJfbmV4dFRpY2tcIjtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gY2xvY2subWV0aG9kcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIG1ldGhvZCA9IGNsb2NrLm1ldGhvZHNbaV07XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcImhydGltZVwiICYmIF9nbG9iYWwucHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIF9nbG9iYWwucHJvY2Vzcy5ocnRpbWUgPSBjbG9ja1tpbnN0YWxsZWRIclRpbWVdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwibmV4dFRpY2tcIiAmJiBfZ2xvYmFsLnByb2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2sgPSBjbG9ja1tpbnN0YWxsZWROZXh0VGlja107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJwZXJmb3JtYW5jZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLFxuICAgICAgICAgICAgICAgICAgICBgXyR7bWV0aG9kfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yLmdldCAmJlxuICAgICAgICAgICAgICAgICAgICAhb3JpZ2luYWxQZXJmRGVzY3JpcHRvci5zZXRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgX2dsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIF9nbG9iYWxbbWV0aG9kXSA9IGNsb2NrW2BfJHttZXRob2R9YF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoX2dsb2JhbFttZXRob2RdICYmIF9nbG9iYWxbbWV0aG9kXS5oYWRPd25Qcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBfZ2xvYmFsW21ldGhvZF0gPSBjbG9ja1tgXyR7bWV0aG9kfWBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX2dsb2JhbFttZXRob2RdO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVzbGludCBuby1lbXB0eTogXCJvZmZcIiAqL1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zaG91bGRBZHZhbmNlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgX2dsb2JhbC5jbGVhckludGVydmFsKGNsb2NrLmF0dGFjaGVkSW50ZXJ2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJldmVudCBtdWx0aXBsZSBleGVjdXRpb25zIHdoaWNoIHdpbGwgY29tcGxldGVseSByZW1vdmUgdGhlc2UgcHJvcHNcbiAgICAgICAgY2xvY2subWV0aG9kcyA9IFtdO1xuXG4gICAgICAgIC8vIHJldHVybiBwZW5kaW5nIHRpbWVycywgdG8gZW5hYmxlIGNoZWNraW5nIHdoYXQgdGltZXJzIHJlbWFpbmVkIG9uIHVuaW5zdGFsbFxuICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjbG9jay50aW1lcnMpLm1hcChmdW5jdGlvbiBtYXBwZXIoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2sudGltZXJzW2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXQgdGhlIHRhcmdldCBjb250YWluaW5nIHRoZSBtZXRob2QgdG8gcmVwbGFjZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgdGhlIGtleW5hbWUgb2YgdGhlIG1ldGhvZCBvbiB0aGUgdGFyZ2V0XG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoaWphY2tNZXRob2QodGFyZ2V0LCBtZXRob2QsIGNsb2NrKSB7XG4gICAgICAgIGNsb2NrW21ldGhvZF0uaGFkT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2RcbiAgICAgICAgKTtcbiAgICAgICAgY2xvY2tbYF8ke21ldGhvZH1gXSA9IHRhcmdldFttZXRob2RdO1xuXG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbWlycm9yRGF0ZVByb3BlcnRpZXMoY2xvY2tbbWV0aG9kXSwgdGFyZ2V0W21ldGhvZF0pO1xuICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0gPSBkYXRlO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJwZXJmb3JtYW5jZVwiKSB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFBlcmZEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgbWV0aG9kXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gSlNET00gaGFzIGEgcmVhZCBvbmx5IHBlcmZvcm1hbmNlIGZpZWxkIHNvIHdlIGhhdmUgdG8gc2F2ZS9jb3B5IGl0IGRpZmZlcmVudGx5XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxQZXJmRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3IuZ2V0ICYmXG4gICAgICAgICAgICAgICAgIW9yaWdpbmFsUGVyZkRlc2NyaXB0b3Iuc2V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLFxuICAgICAgICAgICAgICAgICAgICBgXyR7bWV0aG9kfWAsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUGVyZkRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZkRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICBjbG9jayxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBtZXRob2QsIHBlcmZEZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0gPSBjbG9ja1ttZXRob2RdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb2NrW21ldGhvZF0uYXBwbHkoY2xvY2ssIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgICB0YXJnZXRbbWV0aG9kXSxcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjbG9ja1ttZXRob2RdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFttZXRob2RdLmNsb2NrID0gY2xvY2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtDbG9ja30gY2xvY2tcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWR2YW5jZVRpbWVEZWx0YVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvSW50ZXJ2YWxUaWNrKGNsb2NrLCBhZHZhbmNlVGltZURlbHRhKSB7XG4gICAgICAgIGNsb2NrLnRpY2soYWR2YW5jZVRpbWVEZWx0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge29iamVjdH0gVGltZXJzXG4gICAgICogQHByb3BlcnR5IHtzZXRUaW1lb3V0fSBzZXRUaW1lb3V0XG4gICAgICogQHByb3BlcnR5IHtjbGVhclRpbWVvdXR9IGNsZWFyVGltZW91dFxuICAgICAqIEBwcm9wZXJ0eSB7c2V0SW50ZXJ2YWx9IHNldEludGVydmFsXG4gICAgICogQHByb3BlcnR5IHtjbGVhckludGVydmFsfSBjbGVhckludGVydmFsXG4gICAgICogQHByb3BlcnR5IHtEYXRlfSBEYXRlXG4gICAgICogQHByb3BlcnR5IHtTZXRJbW1lZGlhdGU9fSBzZXRJbW1lZGlhdGVcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKE5vZGVJbW1lZGlhdGUpOiB2b2lkPX0gY2xlYXJJbW1lZGlhdGVcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcltdKTpudW1iZXJbXT19IGhydGltZVxuICAgICAqIEBwcm9wZXJ0eSB7TmV4dFRpY2s9fSBuZXh0VGlja1xuICAgICAqIEBwcm9wZXJ0eSB7UGVyZm9ybWFuY2U9fSBwZXJmb3JtYW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7UmVxdWVzdEFuaW1hdGlvbkZyYW1lPX0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICogQHByb3BlcnR5IHtib29sZWFuPX0gcXVldWVNaWNyb3Rhc2tcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6IHZvaWQ9fSBjYW5jZWxBbmltYXRpb25GcmFtZVxuICAgICAqIEBwcm9wZXJ0eSB7UmVxdWVzdElkbGVDYWxsYmFjaz19IHJlcXVlc3RJZGxlQ2FsbGJhY2tcbiAgICAgKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6IHZvaWQ9fSBjYW5jZWxJZGxlQ2FsbGJhY2tcbiAgICAgKi9cblxuICAgIC8qKiBAdHlwZSB7VGltZXJzfSAqL1xuICAgIGNvbnN0IHRpbWVycyA9IHtcbiAgICAgICAgc2V0VGltZW91dDogX2dsb2JhbC5zZXRUaW1lb3V0LFxuICAgICAgICBjbGVhclRpbWVvdXQ6IF9nbG9iYWwuY2xlYXJUaW1lb3V0LFxuICAgICAgICBzZXRJbnRlcnZhbDogX2dsb2JhbC5zZXRJbnRlcnZhbCxcbiAgICAgICAgY2xlYXJJbnRlcnZhbDogX2dsb2JhbC5jbGVhckludGVydmFsLFxuICAgICAgICBEYXRlOiBfZ2xvYmFsLkRhdGUsXG4gICAgfTtcblxuICAgIGlmIChzZXRJbW1lZGlhdGVQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5zZXRJbW1lZGlhdGUgPSBfZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgdGltZXJzLmNsZWFySW1tZWRpYXRlID0gX2dsb2JhbC5jbGVhckltbWVkaWF0ZTtcbiAgICB9XG5cbiAgICBpZiAoaHJ0aW1lUHJlc2VudCkge1xuICAgICAgICB0aW1lcnMuaHJ0aW1lID0gX2dsb2JhbC5wcm9jZXNzLmhydGltZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFRpY2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5uZXh0VGljayA9IF9nbG9iYWwucHJvY2Vzcy5uZXh0VGljaztcbiAgICB9XG5cbiAgICBpZiAocGVyZm9ybWFuY2VQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5wZXJmb3JtYW5jZSA9IF9nbG9iYWwucGVyZm9ybWFuY2U7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RBbmltYXRpb25GcmFtZVByZXNlbnQpIHtcbiAgICAgICAgdGltZXJzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IF9nbG9iYWwucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgIH1cblxuICAgIGlmIChxdWV1ZU1pY3JvdGFza1ByZXNlbnQpIHtcbiAgICAgICAgdGltZXJzLnF1ZXVlTWljcm90YXNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2FuY2VsQW5pbWF0aW9uRnJhbWVQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IF9nbG9iYWwuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RJZGxlQ2FsbGJhY2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5yZXF1ZXN0SWRsZUNhbGxiYWNrID0gX2dsb2JhbC5yZXF1ZXN0SWRsZUNhbGxiYWNrO1xuICAgIH1cblxuICAgIGlmIChjYW5jZWxJZGxlQ2FsbGJhY2tQcmVzZW50KSB7XG4gICAgICAgIHRpbWVycy5jYW5jZWxJZGxlQ2FsbGJhY2sgPSBfZ2xvYmFsLmNhbmNlbElkbGVDYWxsYmFjaztcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbFNldFRpbWVvdXQgPSBfZ2xvYmFsLnNldEltbWVkaWF0ZSB8fCBfZ2xvYmFsLnNldFRpbWVvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0RhdGV8bnVtYmVyfSBbc3RhcnRdIHRoZSBzeXN0ZW0gdGltZSAtIG5vbi1pbnRlZ2VyIHZhbHVlcyBhcmUgZmxvb3JlZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9vcExpbWl0XSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcnMgdGhhdCB3aWxsIGJlIHJ1biB3aGVuIGNhbGxpbmcgcnVuQWxsKClcbiAgICAgKiBAcmV0dXJucyB7Q2xvY2t9XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2xvY2soc3RhcnQsIGxvb3BMaW1pdCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgc3RhcnQgPSBNYXRoLmZsb29yKGdldEVwb2NoKHN0YXJ0KSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBsb29wTGltaXQgPSBsb29wTGltaXQgfHwgMTAwMDtcbiAgICAgICAgbGV0IG5hbm9zID0gMDtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRTeXN0ZW1UaW1lID0gWzAsIDBdOyAvLyBbbWlsbGlzLCBuYW5vcmVtYWluZGVyXVxuXG4gICAgICAgIGlmIChOYXRpdmVEYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBnbG9iYWwgc2NvcGUgZG9lc24ndCBoYXZlIGEgYERhdGVgIG9iamVjdFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vc2lub25qcy9zaW5vbi9pc3N1ZXMvMTg1MiNpc3N1ZWNvbW1lbnQtNDE5NjIyNzgwKVwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xvY2sgPSB7XG4gICAgICAgICAgICBub3c6IHN0YXJ0LFxuICAgICAgICAgICAgRGF0ZTogY3JlYXRlRGF0ZSgpLFxuICAgICAgICAgICAgbG9vcExpbWl0OiBsb29wTGltaXQsXG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suRGF0ZS5jbG9jayA9IGNsb2NrO1xuXG4gICAgICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICAgICAgZnVuY3Rpb24gZ2V0VGltZVRvTmV4dEZyYW1lKCkge1xuICAgICAgICAgICAgcmV0dXJuIDE2IC0gKChjbG9jay5ub3cgLSBzdGFydCkgJSAxNik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgICAgIGZ1bmN0aW9uIGhydGltZShwcmV2KSB7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXNTaW5jZVN0YXJ0ID0gY2xvY2subm93IC0gYWRqdXN0ZWRTeXN0ZW1UaW1lWzBdIC0gc3RhcnQ7XG4gICAgICAgICAgICBjb25zdCBzZWNzU2luY2VTdGFydCA9IE1hdGguZmxvb3IobWlsbGlzU2luY2VTdGFydCAvIDEwMDApO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluZGVySW5OYW5vcyA9XG4gICAgICAgICAgICAgICAgKG1pbGxpc1NpbmNlU3RhcnQgLSBzZWNzU2luY2VTdGFydCAqIDFlMykgKiAxZTYgK1xuICAgICAgICAgICAgICAgIG5hbm9zIC1cbiAgICAgICAgICAgICAgICBhZGp1c3RlZFN5c3RlbVRpbWVbMV07XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByZXYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZbMV0gPiAxZTkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTnVtYmVyIG9mIG5hbm9zZWNvbmRzIGNhbid0IGV4Y2VlZCBhIGJpbGxpb25cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFNlY3MgPSBwcmV2WzBdO1xuICAgICAgICAgICAgICAgIGxldCBuYW5vRGlmZiA9IHJlbWFpbmRlckluTmFub3MgLSBwcmV2WzFdO1xuICAgICAgICAgICAgICAgIGxldCBzZWNEaWZmID0gc2Vjc1NpbmNlU3RhcnQgLSBvbGRTZWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5hbm9EaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuYW5vRGlmZiArPSAxZTk7XG4gICAgICAgICAgICAgICAgICAgIHNlY0RpZmYgLT0gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW3NlY0RpZmYsIG5hbm9EaWZmXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbc2Vjc1NpbmNlU3RhcnQsIHJlbWFpbmRlckluTmFub3NdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhydGltZUJpZ2ludFByZXNlbnQpIHtcbiAgICAgICAgICAgIGhydGltZS5iaWdpbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBocnRpbWUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gQmlnSW50KHBhcnRzWzBdKSAqIEJpZ0ludCgxZTkpICsgQmlnSW50KHBhcnRzWzFdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLnJlcXVlc3RJZGxlQ2FsbGJhY2sgPSBmdW5jdGlvbiByZXF1ZXN0SWRsZUNhbGxiYWNrKFxuICAgICAgICAgICAgZnVuYyxcbiAgICAgICAgICAgIHRpbWVvdXRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgdGltZVRvTmV4dElkbGVQZXJpb2QgPSAwO1xuXG4gICAgICAgICAgICBpZiAoY2xvY2suY291bnRUaW1lcnMoKSA+IDApIHtcbiAgICAgICAgICAgICAgICB0aW1lVG9OZXh0SWRsZVBlcmlvZCA9IDUwOyAvLyBjb25zdCBmb3Igbm93XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICBhcmdzOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLFxuICAgICAgICAgICAgICAgIGRlbGF5OlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdGltZW91dCA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aW1lVG9OZXh0SWRsZVBlcmlvZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBNYXRoLm1pbih0aW1lb3V0LCB0aW1lVG9OZXh0SWRsZVBlcmlvZCksXG4gICAgICAgICAgICAgICAgaWRsZUNhbGxiYWNrOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5jYW5jZWxJZGxlQ2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxJZGxlQ2FsbGJhY2sodGltZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiSWRsZUNhbGxiYWNrXCIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnNldFRpbWVvdXQgPSBmdW5jdGlvbiBzZXRUaW1lb3V0KGZ1bmMsIHRpbWVvdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICAgICAgYXJnczogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSxcbiAgICAgICAgICAgICAgICBkZWxheTogdGltZW91dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZW9mIF9nbG9iYWwuUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB1dGlsUHJvbWlzaWZ5KSB7XG4gICAgICAgICAgICBjbG9jay5zZXRUaW1lb3V0W1xuICAgICAgICAgICAgICAgIHV0aWxQcm9taXNpZnkuY3VzdG9tXG4gICAgICAgICAgICBdID0gZnVuY3Rpb24gcHJvbWlzaWZpZWRTZXRUaW1lb3V0KHRpbWVvdXQsIGFyZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIHNldFRpbWVvdXRFeGVjdXRvcihcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuYzogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFthcmddLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IHRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLmNsZWFyVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyVGltZW91dCh0aW1lcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJUaW1lb3V0XCIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLm5leHRUaWNrID0gZnVuY3Rpb24gbmV4dFRpY2soZnVuYykge1xuICAgICAgICAgICAgcmV0dXJuIGVucXVldWVKb2IoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGlzTmVhckluZmluaXRlTGltaXQgPyBuZXcgRXJyb3IoKSA6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5xdWV1ZU1pY3JvdGFzayA9IGZ1bmN0aW9uIHF1ZXVlTWljcm90YXNrKGZ1bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9jay5uZXh0VGljayhmdW5jKTsgLy8gZXhwbGljaXRseSBkcm9wIGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2suc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbiBzZXRJbnRlcnZhbChmdW5jLCB0aW1lb3V0KSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0LCAxMCk7XG4gICAgICAgICAgICByZXR1cm4gYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jLFxuICAgICAgICAgICAgICAgIGFyZ3M6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksXG4gICAgICAgICAgICAgICAgZGVsYXk6IHRpbWVvdXQsXG4gICAgICAgICAgICAgICAgaW50ZXJ2YWw6IHRpbWVvdXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5jbGVhckludGVydmFsID0gZnVuY3Rpb24gY2xlYXJJbnRlcnZhbCh0aW1lcklkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xlYXJUaW1lcihjbG9jaywgdGltZXJJZCwgXCJJbnRlcnZhbFwiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc2V0SW1tZWRpYXRlUHJlc2VudCkge1xuICAgICAgICAgICAgY2xvY2suc2V0SW1tZWRpYXRlID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZ1bmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGltZXIoY2xvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuYzogZnVuYyxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgdXRpbFByb21pc2lmeSkge1xuICAgICAgICAgICAgICAgIGNsb2NrLnNldEltbWVkaWF0ZVtcbiAgICAgICAgICAgICAgICAgICAgdXRpbFByb21pc2lmeS5jdXN0b21cbiAgICAgICAgICAgICAgICBdID0gZnVuY3Rpb24gcHJvbWlzaWZpZWRTZXRJbW1lZGlhdGUoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIHNldEltbWVkaWF0ZUV4ZWN1dG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRpbWVyKGNsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYzogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbYXJnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xvY2suY2xlYXJJbW1lZGlhdGUgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZSh0aW1lcklkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFyVGltZXIoY2xvY2ssIHRpbWVySWQsIFwiSW1tZWRpYXRlXCIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLmNvdW50VGltZXJzID0gZnVuY3Rpb24gY291bnRUaW1lcnMoKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGNsb2NrLnRpbWVycyB8fCB7fSkubGVuZ3RoICtcbiAgICAgICAgICAgICAgICAoY2xvY2suam9icyB8fCBbXSkubGVuZ3RoXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhZGRUaW1lcihjbG9jaywge1xuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmMsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGdldFRpbWVUb05leHRGcmFtZSgpLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtjbG9jay5ub3cgKyBnZXRUaW1lVG9OZXh0RnJhbWUoKV0sXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIocmVzdWx0KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVySWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGVhclRpbWVyKGNsb2NrLCB0aW1lcklkLCBcIkFuaW1hdGlvbkZyYW1lXCIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNsb2NrLnJ1bk1pY3JvdGFza3MgPSBmdW5jdGlvbiBydW5NaWNyb3Rhc2tzKCkge1xuICAgICAgICAgICAgcnVuSm9icyhjbG9jayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdGlja1ZhbHVlIG1pbGxpc2Vjb25kcyBvciBhIHN0cmluZyBwYXJzZWFibGUgYnkgcGFyc2VUaW1lXG4gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNBc3luY1xuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7bnVtYmVyfHVuZGVmaW5lZH0gd2lsbCByZXR1cm4gdGhlIG5ldyBgbm93YCB2YWx1ZSBvciBub3RoaW5nIGZvciBhc3luY1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZG9UaWNrKHRpY2tWYWx1ZSwgaXNBc3luYywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBtc0Zsb2F0ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdGlja1ZhbHVlID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgID8gdGlja1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogcGFyc2VUaW1lKHRpY2tWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBtcyA9IE1hdGguZmxvb3IobXNGbG9hdCk7XG4gICAgICAgICAgICBjb25zdCByZW1haW5kZXIgPSBuYW5vUmVtYWluZGVyKG1zRmxvYXQpO1xuICAgICAgICAgICAgbGV0IG5hbm9zVG90YWwgPSBuYW5vcyArIHJlbWFpbmRlcjtcbiAgICAgICAgICAgIGxldCB0aWNrVG8gPSBjbG9jay5ub3cgKyBtcztcblxuICAgICAgICAgICAgaWYgKG1zRmxvYXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5lZ2F0aXZlIHRpY2tzIGFyZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZGp1c3QgZm9yIHBvc2l0aXZlIG92ZXJmbG93XG4gICAgICAgICAgICBpZiAobmFub3NUb3RhbCA+PSAxZTYpIHtcbiAgICAgICAgICAgICAgICB0aWNrVG8gKz0gMTtcbiAgICAgICAgICAgICAgICBuYW5vc1RvdGFsIC09IDFlNjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmFub3MgPSBuYW5vc1RvdGFsO1xuICAgICAgICAgICAgbGV0IHRpY2tGcm9tID0gY2xvY2subm93O1xuICAgICAgICAgICAgbGV0IHByZXZpb3VzID0gY2xvY2subm93O1xuICAgICAgICAgICAgLy8gRVNMaW50IGZhaWxzIHRvIGRldGVjdCB0aGlzIGNvcnJlY3RseVxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWNvbnN0ICovXG4gICAgICAgICAgICBsZXQgdGltZXIsXG4gICAgICAgICAgICAgICAgZmlyc3RFeGNlcHRpb24sXG4gICAgICAgICAgICAgICAgb2xkTm93LFxuICAgICAgICAgICAgICAgIG5leHRQcm9taXNlVGljayxcbiAgICAgICAgICAgICAgICBjb21wZW5zYXRpb25DaGVjayxcbiAgICAgICAgICAgICAgICBwb3N0VGltZXJDYWxsO1xuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBwcmVmZXItY29uc3QgKi9cblxuICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIHBlcmZvcm0gbWljcm90YXNrc1xuICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgcnVuSm9icyhjbG9jayk7XG4gICAgICAgICAgICBpZiAob2xkTm93ICE9PSBjbG9jay5ub3cpIHtcbiAgICAgICAgICAgICAgICAvLyBjb21wZW5zYXRlIGZvciBhbnkgc2V0U3lzdGVtVGltZSgpIGNhbGwgZHVyaW5nIG1pY3JvdGFzayBjYWxsYmFja1xuICAgICAgICAgICAgICAgIHRpY2tGcm9tICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgICAgICB0aWNrVG8gKz0gY2xvY2subm93IC0gb2xkTm93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgICAgICAgICBmdW5jdGlvbiBkb1RpY2tJbm5lcigpIHtcbiAgICAgICAgICAgICAgICAvLyBwZXJmb3JtIGVhY2ggdGltZXIgaW4gdGhlIHJlcXVlc3RlZCByYW5nZVxuICAgICAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHRpY2tGcm9tLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRpbWVyICYmIHRpY2tGcm9tIDw9IHRpY2tUbykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xvY2sudGltZXJzW3RpbWVyLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGlja0Zyb20gPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay5ub3cgPSB0aW1lci5jYWxsQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGROb3cgPSBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RXhjZXB0aW9uID0gZmlyc3RFeGNlcHRpb24gfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggdXAgYWZ0ZXIgbmF0aXZlIHNldEltbWVkaWF0ZSBjYWxsYmFjayB0byBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBuYXRpdmUgZXM2IHByb21pc2VzIHRvIHByb2Nlc3MgdGhlaXIgY2FsbGJhY2tzIGFmdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFjaCB0aW1lciBmaXJlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQobmV4dFByb21pc2VUaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBlbnNhdGlvbkNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwb3N0VGltZXJDYWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gcGVyZm9ybSBwcm9jZXNzLm5leHRUaWNrKClzIGFnYWluXG4gICAgICAgICAgICAgICAgb2xkTm93ID0gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIGlmIChvbGROb3cgIT09IGNsb2NrLm5vdykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb21wZW5zYXRlIGZvciBhbnkgc2V0U3lzdGVtVGltZSgpIGNhbGwgZHVyaW5nIHByb2Nlc3MubmV4dFRpY2soKSBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tUbyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIGNvcm5lciBjYXNlOiBkdXJpbmcgcnVuSm9icyBuZXcgdGltZXJzIHdlcmUgc2NoZWR1bGVkIHdoaWNoIGNvdWxkIGJlIGluIHRoZSByYW5nZSBbY2xvY2subm93LCB0aWNrVG9dXG4gICAgICAgICAgICAgICAgdGltZXIgPSBmaXJzdFRpbWVySW5SYW5nZShjbG9jaywgdGlja0Zyb20sIHRpY2tUbyk7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9jay50aWNrKHRpY2tUbyAtIGNsb2NrLm5vdyk7IC8vIGRvIGl0IGFsbCBhZ2FpbiAtIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSByZXF1ZXN0ZWQgcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RFeGNlcHRpb24gPSBmaXJzdEV4Y2VwdGlvbiB8fCBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gdGltZXJzIHJlbWFpbmluZyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlOiBtb3ZlIHRoZSBjbG9jayBhbGwgdGhlIHdheSB0byB0aGUgZW5kXG4gICAgICAgICAgICAgICAgICAgIGNsb2NrLm5vdyA9IHRpY2tUbztcblxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgbmFub3NcbiAgICAgICAgICAgICAgICAgICAgbmFub3MgPSBuYW5vc1RvdGFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZmlyc3RFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay5ub3cpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0UHJvbWlzZVRpY2sgPVxuICAgICAgICAgICAgICAgIGlzQXN5bmMgJiZcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wZW5zYXRpb25DaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFRpbWVyQ2FsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9UaWNrSW5uZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29tcGVuc2F0aW9uQ2hlY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gY29tcGVuc2F0ZSBmb3IgYW55IHNldFN5c3RlbVRpbWUoKSBjYWxsIGR1cmluZyB0aW1lciBjYWxsYmFja1xuICAgICAgICAgICAgICAgIGlmIChvbGROb3cgIT09IGNsb2NrLm5vdykge1xuICAgICAgICAgICAgICAgICAgICB0aWNrRnJvbSArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHRpY2tUbyArPSBjbG9jay5ub3cgLSBvbGROb3c7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzICs9IGNsb2NrLm5vdyAtIG9sZE5vdztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwb3N0VGltZXJDYWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gZmlyc3RUaW1lckluUmFuZ2UoY2xvY2ssIHByZXZpb3VzLCB0aWNrVG8pO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzID0gdGlja0Zyb207XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gZG9UaWNrSW5uZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRpY2tWYWx1ZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIG9yIGEgaHVtYW4tcmVhZGFibGUgdmFsdWUgbGlrZSBcIjAxOjExOjE1XCJcbiAgICAgICAgICogQHJldHVybnMge251bWJlcn0gd2lsbCByZXR1cm4gdGhlIG5ldyBgbm93YCB2YWx1ZVxuICAgICAgICAgKi9cbiAgICAgICAgY2xvY2sudGljayA9IGZ1bmN0aW9uIHRpY2sodGlja1ZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9UaWNrKHRpY2tWYWx1ZSwgZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgX2dsb2JhbC5Qcm9taXNlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdGlja1ZhbHVlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgb3IgYSBodW1hbi1yZWFkYWJsZSB2YWx1ZSBsaWtlIFwiMDE6MTE6MTVcIlxuICAgICAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNsb2NrLnRpY2tBc3luYyA9IGZ1bmN0aW9uIHRpY2tBc3luYyh0aWNrVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9nbG9iYWwuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVGljayh0aWNrVmFsdWUsIHRydWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbG9jay5kdXJpbmdUaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGNsb2NrLmR1cmluZ1RpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIF9nbG9iYWwuUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY2xvY2submV4dEFzeW5jID0gZnVuY3Rpb24gbmV4dEFzeW5jKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2dsb2JhbC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBmaXJzdFRpbWVyKGNsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2subm93ID0gdGltZXIuY2FsbEF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxUaW1lcihjbG9jaywgdGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suZHVyaW5nVGljayA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb2NrLnJ1bkFsbCA9IGZ1bmN0aW9uIHJ1bkFsbCgpIHtcbiAgICAgICAgICAgIGxldCBudW1UaW1lcnMsIGk7XG4gICAgICAgICAgICBydW5Kb2JzKGNsb2NrKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjbG9jay5sb29wTGltaXQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvY2subm93O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG51bVRpbWVycyA9IE9iamVjdC5rZXlzKGNsb2NrLnRpbWVycykubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChudW1UaW1lcnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRJc05lYXJJbmZpbml0ZUxpbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xvY2submV4dCgpO1xuICAgICAgICAgICAgICAgIGNoZWNrSXNOZWFySW5maW5pdGVMaW1pdChjbG9jaywgaSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGV4Y2Vzc0pvYiA9IGZpcnN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgdGhyb3cgZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGV4Y2Vzc0pvYik7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2sucnVuVG9GcmFtZSA9IGZ1bmN0aW9uIHJ1blRvRnJhbWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvY2sudGljayhnZXRUaW1lVG9OZXh0RnJhbWUoKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNsb2NrLnJ1bkFsbEFzeW5jID0gZnVuY3Rpb24gcnVuQWxsQXN5bmMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZ2xvYmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9SdW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1UaW1lcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgY2xvY2subG9vcExpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsb2NrLnRpbWVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVRpbWVycyA9IE9iamVjdC5rZXlzKGNsb2NrLnRpbWVycylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVRpbWVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0SXNOZWFySW5maW5pdGVMaW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY2xvY2subm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLm5leHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1J1bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJc05lYXJJbmZpbml0ZUxpbWl0KGNsb2NrLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2Vzc0pvYiA9IGZpcnN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZ2V0SW5maW5pdGVMb29wRXJyb3IoY2xvY2ssIGV4Y2Vzc0pvYikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRvUnVuKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvY2sucnVuVG9MYXN0ID0gZnVuY3Rpb24gcnVuVG9MYXN0KCkge1xuICAgICAgICAgICAgY29uc3QgdGltZXIgPSBsYXN0VGltZXIoY2xvY2spO1xuICAgICAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgICAgIHJ1bkpvYnMoY2xvY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9jay5ub3c7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbG9jay50aWNrKHRpbWVyLmNhbGxBdCAtIGNsb2NrLm5vdyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfZ2xvYmFsLlByb21pc2UgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNsb2NrLnJ1blRvTGFzdEFzeW5jID0gZnVuY3Rpb24gcnVuVG9MYXN0QXN5bmMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZ2xvYmFsLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IGxhc3RUaW1lcihjbG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNsb2NrLm5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjbG9jay50aWNrQXN5bmModGltZXIuY2FsbEF0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjbG9jay5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgICAgICAgbmFub3MgPSAwO1xuICAgICAgICAgICAgY2xvY2sudGltZXJzID0ge307XG4gICAgICAgICAgICBjbG9jay5qb2JzID0gW107XG4gICAgICAgICAgICBjbG9jay5ub3cgPSBzdGFydDtcbiAgICAgICAgfTtcblxuICAgICAgICBjbG9jay5zZXRTeXN0ZW1UaW1lID0gZnVuY3Rpb24gc2V0U3lzdGVtVGltZShzeXN0ZW1UaW1lKSB7XG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgdGltZSBkaWZmZXJlbmNlXG4gICAgICAgICAgICBjb25zdCBuZXdOb3cgPSBnZXRFcG9jaChzeXN0ZW1UaW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXdOb3cgLSBjbG9jay5ub3c7XG4gICAgICAgICAgICBsZXQgaWQsIHRpbWVyO1xuXG4gICAgICAgICAgICBhZGp1c3RlZFN5c3RlbVRpbWVbMF0gPSBhZGp1c3RlZFN5c3RlbVRpbWVbMF0gKyBkaWZmZXJlbmNlO1xuICAgICAgICAgICAgYWRqdXN0ZWRTeXN0ZW1UaW1lWzFdID0gYWRqdXN0ZWRTeXN0ZW1UaW1lWzFdICsgbmFub3M7XG4gICAgICAgICAgICAvLyB1cGRhdGUgJ3N5c3RlbSBjbG9jaydcbiAgICAgICAgICAgIGNsb2NrLm5vdyA9IG5ld05vdztcbiAgICAgICAgICAgIG5hbm9zID0gMDtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRpbWVycyBhbmQgaW50ZXJ2YWxzIHRvIGtlZXAgdGhlbSBzdGFibGVcbiAgICAgICAgICAgIGZvciAoaWQgaW4gY2xvY2sudGltZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNsb2NrLnRpbWVycy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBjbG9jay50aW1lcnNbaWRdO1xuICAgICAgICAgICAgICAgICAgICB0aW1lci5jcmVhdGVkQXQgKz0gZGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIuY2FsbEF0ICs9IGRpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChwZXJmb3JtYW5jZVByZXNlbnQpIHtcbiAgICAgICAgICAgIGNsb2NrLnBlcmZvcm1hbmNlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgaWYgKGhhc1BlcmZvcm1hbmNlUHJvdG90eXBlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdG8gPSBfZ2xvYmFsLlBlcmZvcm1hbmNlLnByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmluZGV4T2YoXCJnZXRFbnRyaWVzXCIpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBleHBlY3RlZCByZXR1cm4gdHlwZSBmb3IgZ2V0RW50cmllcyBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnBlcmZvcm1hbmNlW25hbWVdID0gTk9PUF9BUlJBWTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLnBlcmZvcm1hbmNlW25hbWVdID0gTk9PUDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbG9jay5wZXJmb3JtYW5jZS5ub3cgPSBmdW5jdGlvbiBGYWtlVGltZXJzTm93KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhydCA9IGhydGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbGxpcyA9IGhydFswXSAqIDEwMDAgKyBocnRbMV0gLyAxZTY7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pbGxpcztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaHJ0aW1lUHJlc2VudCkge1xuICAgICAgICAgICAgY2xvY2suaHJ0aW1lID0gaHJ0aW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb2NrO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Q29uZmlnPX0gW2NvbmZpZ10gT3B0aW9uYWwgY29uZmlnXG4gICAgICogQHJldHVybnMge0Nsb2NrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3RhbGwoY29uZmlnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxIHx8XG4gICAgICAgICAgICBjb25maWcgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGNvbmZpZykgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcgPT09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIGBGYWtlVGltZXJzLmluc3RhbGwgY2FsbGVkIHdpdGggJHtTdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgICAgICl9IGluc3RhbGwgcmVxdWlyZXMgYW4gb2JqZWN0IHBhcmFtZXRlcmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgY29uZmlnID0gdHlwZW9mIGNvbmZpZyAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbmZpZyA6IHt9O1xuICAgICAgICBjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgPSBjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgfHwgZmFsc2U7XG4gICAgICAgIGNvbmZpZy5hZHZhbmNlVGltZURlbHRhID0gY29uZmlnLmFkdmFuY2VUaW1lRGVsdGEgfHwgMjA7XG4gICAgICAgIGNvbmZpZy5zaG91bGRDbGVhck5hdGl2ZVRpbWVycyA9XG4gICAgICAgICAgICBjb25maWcuc2hvdWxkQ2xlYXJOYXRpdmVUaW1lcnMgfHwgZmFsc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy50YXJnZXQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJjb25maWcudGFyZ2V0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIFVzZSBgd2l0aEdsb2JhbCh0YXJnZXQpYCBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGksIGw7XG4gICAgICAgIGNvbnN0IGNsb2NrID0gY3JlYXRlQ2xvY2soY29uZmlnLm5vdywgY29uZmlnLmxvb3BMaW1pdCk7XG4gICAgICAgIGNsb2NrLnNob3VsZENsZWFyTmF0aXZlVGltZXJzID0gY29uZmlnLnNob3VsZENsZWFyTmF0aXZlVGltZXJzO1xuXG4gICAgICAgIGNsb2NrLnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmluc3RhbGwoY2xvY2ssIGNvbmZpZyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY2xvY2subWV0aG9kcyA9IGNvbmZpZy50b0Zha2UgfHwgW107XG5cbiAgICAgICAgaWYgKGNsb2NrLm1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBkbyBub3QgZmFrZSBuZXh0VGljayBieSBkZWZhdWx0IC0gR2l0SHViIzEyNlxuICAgICAgICAgICAgY2xvY2subWV0aG9kcyA9IE9iamVjdC5rZXlzKHRpbWVycykuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5ICE9PSBcIm5leHRUaWNrXCIgJiYga2V5ICE9PSBcInF1ZXVlTWljcm90YXNrXCI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuc2hvdWxkQWR2YW5jZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsVGljayA9IGRvSW50ZXJ2YWxUaWNrLmJpbmQoXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBjbG9jayxcbiAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZVRpbWVEZWx0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBfZ2xvYmFsLnNldEludGVydmFsKFxuICAgICAgICAgICAgICAgIGludGVydmFsVGljayxcbiAgICAgICAgICAgICAgICBjb25maWcuYWR2YW5jZVRpbWVEZWx0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNsb2NrLmF0dGFjaGVkSW50ZXJ2YWwgPSBpbnRlcnZhbElkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGNsb2NrLm1ldGhvZHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPSBjbG9jay5tZXRob2RzW2ldO1xuICAgICAgICAgICAgaWYgKG5hbWVPZk1ldGhvZFRvUmVwbGFjZSA9PT0gXCJocnRpbWVcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MuaHJ0aW1lID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaGlqYWNrTWV0aG9kKF9nbG9iYWwucHJvY2VzcywgbmFtZU9mTWV0aG9kVG9SZXBsYWNlLCBjbG9jayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lT2ZNZXRob2RUb1JlcGxhY2UgPT09IFwibmV4dFRpY2tcIikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgX2dsb2JhbC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2sgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBoaWphY2tNZXRob2QoX2dsb2JhbC5wcm9jZXNzLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpamFja01ldGhvZChfZ2xvYmFsLCBuYW1lT2ZNZXRob2RUb1JlcGxhY2UsIGNsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9jaztcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVyczogdGltZXJzLFxuICAgICAgICBjcmVhdGVDbG9jazogY3JlYXRlQ2xvY2ssXG4gICAgICAgIGluc3RhbGw6IGluc3RhbGwsXG4gICAgICAgIHdpdGhHbG9iYWw6IHdpdGhHbG9iYWwsXG4gICAgfTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGYWtlVGltZXJzXG4gKiBAcHJvcGVydHkge1RpbWVyc30gdGltZXJzXG4gKiBAcHJvcGVydHkge2NyZWF0ZUNsb2NrfSBjcmVhdGVDbG9ja1xuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gaW5zdGFsbFxuICogQHByb3BlcnR5IHt3aXRoR2xvYmFsfSB3aXRoR2xvYmFsXG4gKi9cblxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKiBAdHlwZSB7RmFrZVRpbWVyc30gKi9cbmNvbnN0IGRlZmF1bHRJbXBsZW1lbnRhdGlvbiA9IHdpdGhHbG9iYWwoZ2xvYmFsT2JqZWN0KTtcblxuZXhwb3J0cy50aW1lcnMgPSBkZWZhdWx0SW1wbGVtZW50YXRpb24udGltZXJzO1xuZXhwb3J0cy5jcmVhdGVDbG9jayA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbi5jcmVhdGVDbG9jaztcbmV4cG9ydHMuaW5zdGFsbCA9IGRlZmF1bHRJbXBsZW1lbnRhdGlvbi5pbnN0YWxsO1xuZXhwb3J0cy53aXRoR2xvYmFsID0gd2l0aEdsb2JhbDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9qZXN0LlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRmFrZVRpbWVyV2l0aENvbnRleHQsXG4gIEluc3RhbGxlZENsb2NrLFxufSBmcm9tICdAc2lub25qcy9mYWtlLXRpbWVycydcbmltcG9ydCB7XG4gIHdpdGhHbG9iYWwsXG59IGZyb20gJ0BzaW5vbmpzL2Zha2UtdGltZXJzJ1xuXG5leHBvcnQgY2xhc3MgRmFrZVRpbWVycyB7XG4gIHByaXZhdGUgX2Nsb2NrITogSW5zdGFsbGVkQ2xvY2tcbiAgcHJpdmF0ZSBfZmFraW5nVGltZTogYm9vbGVhblxuICBwcml2YXRlIF9mYWtlVGltZXJzOiBGYWtlVGltZXJXaXRoQ29udGV4dFxuICBwcml2YXRlIF9tYXhMb29wczogbnVtYmVyXG4gIHByaXZhdGUgX25vdyA9IERhdGUubm93XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGdsb2JhbCxcbiAgICBtYXhMb29wcyA9IDEwXzAwMCxcbiAgfToge1xuICAgIGdsb2JhbDogdHlwZW9mIGdsb2JhbFRoaXNcbiAgICBtYXhMb29wcz86IG51bWJlclxuICB9KSB7XG4gICAgdGhpcy5fbWF4TG9vcHMgPSBtYXhMb29wc1xuXG4gICAgdGhpcy5fZmFraW5nVGltZSA9IGZhbHNlXG4gICAgdGhpcy5fZmFrZVRpbWVycyA9IHdpdGhHbG9iYWwoZ2xvYmFsKVxuICB9XG5cbiAgY2xlYXJBbGxUaW1lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Zha2luZ1RpbWUpXG4gICAgICB0aGlzLl9jbG9jay5yZXNldCgpXG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMudXNlUmVhbFRpbWVycygpXG4gIH1cblxuICBydW5BbGxUaW1lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKVxuICAgICAgdGhpcy5fY2xvY2sucnVuQWxsKClcbiAgfVxuXG4gIHJ1bk9ubHlQZW5kaW5nVGltZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGVja0Zha2VUaW1lcnMoKSlcbiAgICAgIHRoaXMuX2Nsb2NrLnJ1blRvTGFzdCgpXG4gIH1cblxuICBhZHZhbmNlVGltZXJzVG9OZXh0VGltZXIoc3RlcHMgPSAxKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKSB7XG4gICAgICBmb3IgKGxldCBpID0gc3RlcHM7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgdGhpcy5fY2xvY2submV4dCgpXG4gICAgICAgIC8vIEZpcmUgYWxsIHRpbWVycyBhdCB0aGlzIHBvaW50OiBodHRwczovL2dpdGh1Yi5jb20vc2lub25qcy9mYWtlLXRpbWVycy9pc3N1ZXMvMjUwXG4gICAgICAgIHRoaXMuX2Nsb2NrLnRpY2soMClcblxuICAgICAgICBpZiAodGhpcy5fY2xvY2suY291bnRUaW1lcnMoKSA9PT0gMClcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkdmFuY2VUaW1lcnNCeVRpbWUobXNUb1J1bjogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKVxuICAgICAgdGhpcy5fY2xvY2sudGljayhtc1RvUnVuKVxuICB9XG5cbiAgcnVuQWxsVGlja3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG1ldGhvZCBub3QgZXhwb3NlZFxuICAgICAgdGhpcy5fY2xvY2sucnVuTWljcm90YXNrcygpXG4gICAgfVxuICB9XG5cbiAgdXNlUmVhbFRpbWVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZmFraW5nVGltZSkge1xuICAgICAgdGhpcy5fY2xvY2sudW5pbnN0YWxsKClcbiAgICAgIHRoaXMuX2Zha2luZ1RpbWUgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHVzZUZha2VUaW1lcnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9mYWtpbmdUaW1lKSB7XG4gICAgICBjb25zdCB0b0Zha2UgPSBPYmplY3Qua2V5cyh0aGlzLl9mYWtlVGltZXJzLnRpbWVycykgYXMgQXJyYXk8a2V5b2YgRmFrZVRpbWVyV2l0aENvbnRleHRbJ3RpbWVycyddPlxuXG4gICAgICB0aGlzLl9jbG9jayA9IHRoaXMuX2Zha2VUaW1lcnMuaW5zdGFsbCh7XG4gICAgICAgIGxvb3BMaW1pdDogdGhpcy5fbWF4TG9vcHMsXG4gICAgICAgIG5vdzogRGF0ZS5ub3coKSxcbiAgICAgICAgdG9GYWtlLFxuICAgICAgICBzaG91bGRDbGVhck5hdGl2ZVRpbWVyczogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMuX2Zha2luZ1RpbWUgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoZWNrRmFrZVRpbWVycygpKSB7XG4gICAgICBjb25zdCB7IG5vdyB9ID0gdGhpcy5fY2xvY2tcbiAgICAgIHRoaXMuX2Nsb2NrLnJlc2V0KClcbiAgICAgIHRoaXMuX2Nsb2NrLnNldFN5c3RlbVRpbWUobm93KVxuICAgIH1cbiAgfVxuXG4gIHNldFN5c3RlbVRpbWUobm93PzogbnVtYmVyIHwgRGF0ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGVja0Zha2VUaW1lcnMoKSlcbiAgICAgIHRoaXMuX2Nsb2NrLnNldFN5c3RlbVRpbWUobm93KVxuICB9XG5cbiAgZ2V0UmVhbFN5c3RlbVRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbm93KClcbiAgfVxuXG4gIGdldFRpbWVyQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5fY2hlY2tGYWtlVGltZXJzKCkpXG4gICAgICByZXR1cm4gdGhpcy5fY2xvY2suY291bnRUaW1lcnMoKVxuXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRmFrZVRpbWVycygpIHtcbiAgICBpZiAoIXRoaXMuX2Zha2luZ1RpbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RpbWVycyBhcmUgbm90IG1vY2tlZC4gVHJ5IGNhbGxpbmcgXCJ2aS51c2VGYWtlVGltZXJzKClcIiBmaXJzdC4nLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9mYWtpbmdUaW1lXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5pbXBvcnQgeyBwYXJzZVN0YWNrdHJhY2UgfSBmcm9tICcuLi91dGlscy9zb3VyY2UtbWFwJ1xuaW1wb3J0IHR5cGUgeyBWaXRlc3RNb2NrZXIgfSBmcm9tICcuLi9ub2RlL21vY2tlcidcbmltcG9ydCB7IEZha2VUaW1lcnMgfSBmcm9tICcuL3RpbWVycydcbmltcG9ydCB0eXBlIHsgRW5oYW5jZWRTcHksIE1heWJlTW9ja2VkLCBNYXliZU1vY2tlZERlZXAgfSBmcm9tICcuL2plc3QtbW9jaydcbmltcG9ydCB7IGZuLCBpc01vY2tGdW5jdGlvbiwgc3BpZXMsIHNweU9uIH0gZnJvbSAnLi9qZXN0LW1vY2snXG5cbmNsYXNzIFZpdGVzdFV0aWxzIHtcbiAgcHJpdmF0ZSBfdGltZXJzOiBGYWtlVGltZXJzXG4gIHByaXZhdGUgX21vY2tlZERhdGU6IHN0cmluZyB8IG51bWJlciB8IERhdGUgfCBudWxsXG4gIHByaXZhdGUgX21vY2tlcjogVml0ZXN0TW9ja2VyXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGltZXJzID0gbmV3IEZha2VUaW1lcnMoe1xuICAgICAgZ2xvYmFsOiBnbG9iYWxUaGlzLFxuICAgICAgbWF4TG9vcHM6IDEwXzAwMCxcbiAgICB9KVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgaW5qZWN0ZWQgYnkgdml0ZS1uaWRlXG4gICAgdGhpcy5fbW9ja2VyID0gdHlwZW9mIF9fdml0ZXN0X21vY2tlcl9fICE9PSAndW5kZWZpbmVkJyA/IF9fdml0ZXN0X21vY2tlcl9fIDogbnVsbFxuICAgIHRoaXMuX21vY2tlZERhdGUgPSBudWxsXG5cbiAgICBpZiAoIXRoaXMuX21vY2tlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcignVml0ZXN0IHdhcyBpbml0aWFsaXNlZCB3aXRoIG5hdGl2ZSBOb2RlIGluc3RlYWQgb2YgVml0ZSBOb2RlJylcbiAgfVxuXG4gIC8vIHRpbWVyc1xuXG4gIHB1YmxpYyB1c2VGYWtlVGltZXJzKCkge1xuICAgIHRoaXMuX3RpbWVycy51c2VGYWtlVGltZXJzKClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHVibGljIHVzZVJlYWxUaW1lcnMoKSB7XG4gICAgdGhpcy5fdGltZXJzLnVzZVJlYWxUaW1lcnMoKVxuICAgIHRoaXMuX21vY2tlZERhdGUgPSBudWxsXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHB1YmxpYyBydW5Pbmx5UGVuZGluZ1RpbWVycygpIHtcbiAgICB0aGlzLl90aW1lcnMucnVuT25seVBlbmRpbmdUaW1lcnMoKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwdWJsaWMgcnVuQWxsVGltZXJzKCkge1xuICAgIHRoaXMuX3RpbWVycy5ydW5BbGxUaW1lcnMoKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwdWJsaWMgcnVuQWxsVGlja3MoKSB7XG4gICAgdGhpcy5fdGltZXJzLnJ1bkFsbFRpY2tzKClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHVibGljIGFkdmFuY2VUaW1lcnNCeVRpbWUobXM6IG51bWJlcikge1xuICAgIHRoaXMuX3RpbWVycy5hZHZhbmNlVGltZXJzQnlUaW1lKG1zKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwdWJsaWMgYWR2YW5jZVRpbWVyc1RvTmV4dFRpbWVyKCkge1xuICAgIHRoaXMuX3RpbWVycy5hZHZhbmNlVGltZXJzVG9OZXh0VGltZXIoKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZXJDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZXJzLmdldFRpbWVyQ291bnQoKVxuICB9XG5cbiAgcHVibGljIHNldFN5c3RlbVRpbWUodGltZTogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSkge1xuICAgIGNvbnN0IGRhdGUgPSB0aW1lIGluc3RhbmNlb2YgRGF0ZSA/IHRpbWUgOiBuZXcgRGF0ZSh0aW1lKVxuICAgIHRoaXMuX21vY2tlZERhdGUgPSBkYXRlXG4gICAgdGhpcy5fdGltZXJzLnNldFN5c3RlbVRpbWUoZGF0ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHVibGljIGdldE1vY2tlZFN5c3RlbVRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vY2tlZERhdGVcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWFsU3lzdGVtVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZXJzLmdldFJlYWxTeXN0ZW1UaW1lKClcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFsbFRpbWVycygpIHtcbiAgICB0aGlzLl90aW1lcnMuY2xlYXJBbGxUaW1lcnMoKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBtb2Nrc1xuXG4gIHNweU9uID0gc3B5T25cbiAgZm4gPSBmblxuXG4gIHByaXZhdGUgZ2V0SW1wb3J0ZXIoKSB7XG4gICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdtb2NrJylcbiAgICBjb25zdCBbLCwgaW1wb3J0ZXJdID0gcGFyc2VTdGFja3RyYWNlKGVyciwgdHJ1ZSlcbiAgICByZXR1cm4gaW1wb3J0ZXIuZmlsZVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGFsbCBgaW1wb3J0c2AgdG8gcGFzc2VkIG1vZHVsZSB0byBiZSBtb2NrZWQuXG4gICAqIC0gSWYgdGhlcmUgaXMgYSBmYWN0b3J5LCB3aWxsIHJldHVybiBpdCdzIHJlc3VsdC4gVGhlIGNhbGwgdG8gYHZpLm1vY2tgIGlzIGhvaXN0ZWQgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZSxcbiAgICogc28geW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHZhcmlhYmxlcyBkZWNsYXJlZCBpbiB0aGUgZ2xvYmFsIGZpbGUgc2NvcGUsIGlmIHlvdSBkaWRuJ3QgcHV0IHRoZW0gYmVmb3JlIGltcG9ydHMhXG4gICAqIC0gSWYgYF9fbW9ja3NfX2AgZm9sZGVyIHdpdGggZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGV4aXN0LCBhbGwgaW1wb3J0cyB3aWxsXG4gICAqIHJldHVybiBpdC5cbiAgICogLSBJZiB0aGVyZSBpcyBubyBgX19tb2Nrc19fYCBmb2xkZXIgb3IgYSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpbnNpZGUsIHdpbGwgY2FsbCBvcmlnaW5hbFxuICAgKiBtb2R1bGUgYW5kIG1vY2sgaXQuXG4gICAqIEBwYXJhbSBwYXRoIFBhdGggdG8gdGhlIG1vZHVsZS4gQ2FuIGJlIGFsaWFzZWQsIGlmIHlvdXIgY29uZmlnIHN1cHBvcnMgaXRcbiAgICogQHBhcmFtIGZhY3RvcnkgRmFjdG9yeSBmb3IgdGhlIG1vY2tlZCBtb2R1bGUuIEhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS5cbiAgICovXG4gIHB1YmxpYyBtb2NrKHBhdGg6IHN0cmluZywgZmFjdG9yeT86ICgpID0+IGFueSkge1xuICAgIHRoaXMuX21vY2tlci5xdWV1ZU1vY2socGF0aCwgdGhpcy5nZXRJbXBvcnRlcigpLCBmYWN0b3J5KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgbW9kdWxlIGZyb20gbW9ja2VkIHJlZ2lzdHJ5LiBBbGwgc3Vic2VxdWVudCBjYWxscyB0byBpbXBvcnQgd2lsbFxuICAgKiByZXR1cm4gb3JpZ2luYWwgbW9kdWxlIGV2ZW4gaWYgaXQgd2FzIG1vY2tlZC5cbiAgICogQHBhcmFtIHBhdGggUGF0aCB0byB0aGUgbW9kdWxlLiBDYW4gYmUgYWxpYXNlZCwgaWYgeW91ciBjb25maWcgc3VwcG9ycyBpdFxuICAgKi9cbiAgcHVibGljIHVubW9jayhwYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9tb2NrZXIucXVldWVVbm1vY2socGF0aCwgdGhpcy5nZXRJbXBvcnRlcigpKVxuICB9XG5cbiAgcHVibGljIGRvTW9jayhwYXRoOiBzdHJpbmcsIGZhY3Rvcnk/OiAoKSA9PiBhbnkpIHtcbiAgICB0aGlzLl9tb2NrZXIucXVldWVNb2NrKHBhdGgsIHRoaXMuZ2V0SW1wb3J0ZXIoKSwgZmFjdG9yeSlcbiAgfVxuXG4gIHB1YmxpYyBkb1VubW9jayhwYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9tb2NrZXIucXVldWVVbm1vY2socGF0aCwgdGhpcy5nZXRJbXBvcnRlcigpKVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgbW9kdWxlLCBieXBhc3NpbmcgYWxsIGNoZWNrcyBpZiBpdCBzaG91bGQgYmUgbW9ja2VkLlxuICAgKiBDYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1vY2sgbW9kdWxlIHBhcnRpYWxseS5cbiAgICogQGV4YW1wbGVcbiAgICogdmkubW9jaygnLi9leGFtcGxlJywgYXN5bmMgKCkgPT4ge1xuICAgKiAgY29uc3QgYXhpb3MgPSBhd2FpdCB2aS5pbXBvcnRBY3R1YWwoJy4vZXhhbXBsZScpXG4gICAqXG4gICAqICByZXR1cm4geyAuLi5heGlvcywgZ2V0OiB2aS5mbigpIH1cbiAgICogfSlcbiAgICogQHBhcmFtIHBhdGggUGF0aCB0byB0aGUgbW9kdWxlLiBDYW4gYmUgYWxpYXNlZCwgaWYgeW91ciBjb25maWcgc3VwcG9ycyBpdFxuICAgKiBAcmV0dXJucyBBY3R1YWwgbW9kdWxlIHdpdGhvdXQgc3BpZXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbXBvcnRBY3R1YWw8VD4ocGF0aDogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX21vY2tlci5pbXBvcnRBY3R1YWw8VD4ocGF0aCwgdGhpcy5nZXRJbXBvcnRlcigpKVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYSBtb2R1bGUgd2l0aCBhbGwgb2YgaXRzIHByb3BlcnRpZXMgYW5kIG5lc3RlZCBwcm9wZXJ0aWVzIG1vY2tlZC5cbiAgICogRm9yIHRoZSBydWxlcyBhcHBsaWVkLCBzZWUgZG9jcy5cbiAgICogQHBhcmFtIHBhdGggUGF0aCB0byB0aGUgbW9kdWxlLiBDYW4gYmUgYWxpYXNlZCwgaWYgeW91ciBjb25maWcgc3VwcG9ycyBpdFxuICAgKiBAcmV0dXJucyBGdWxseSBtb2NrZWQgbW9kdWxlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW1wb3J0TW9jazxUPihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1heWJlTW9ja2VkRGVlcDxUPj4ge1xuICAgIHJldHVybiB0aGlzLl9tb2NrZXIuaW1wb3J0TW9jayhwYXRoLCB0aGlzLmdldEltcG9ydGVyKCkpXG4gIH1cblxuICAvKipcbiAgICogVHlwZSBoZWxwZXJzIGZvciBUeXBlU2NyaXB0LiBJbiByZWFsaXR5IGp1c3QgcmV0dXJucyB0aGUgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZC5cbiAgICogQGV4YW1wbGVcbiAgICogaW1wb3J0IGV4YW1wbGUgZnJvbSAnLi9leGFtcGxlJ1xuICAgKiB2aS5tb2NrKCcuL2V4YW1wbGUnKVxuICAgKlxuICAgKiB0ZXN0KCcxKzEgZXF1YWxzIDInIGFzeW5jICgpID0+IHtcbiAgICogIHZpLm1vY2tlZChleGFtcGxlLmNhbGMpLm1vY2tSZXN0b3JlKClcbiAgICpcbiAgICogIGNvbnN0IHJlcyA9IGV4YW1wbGUuY2FsYygxLCAnKycsIDEpXG4gICAqXG4gICAqICBleHBlY3QocmVzKS50b0JlKDIpXG4gICAqIH0pXG4gICAqIEBwYXJhbSBpdGVtIEFueXRoaW5nIHRoYXQgY2FuIGJlIG1vY2tlZFxuICAgKiBAcGFyYW0gZGVlcCBJZiB0aGUgb2JqZWN0IGlzIGRlZXBseSBtb2NrZWRcbiAgICovXG4gIHB1YmxpYyBtb2NrZWQ8VD4oaXRlbTogVCwgZGVlcD86IGZhbHNlKTogTWF5YmVNb2NrZWQ8VD5cbiAgcHVibGljIG1vY2tlZDxUPihpdGVtOiBULCBkZWVwOiB0cnVlKTogTWF5YmVNb2NrZWREZWVwPFQ+XG4gIHB1YmxpYyBtb2NrZWQ8VD4oaXRlbTogVCwgX2RlZXAgPSBmYWxzZSk6IE1heWJlTW9ja2VkPFQ+IHwgTWF5YmVNb2NrZWREZWVwPFQ+IHtcbiAgICByZXR1cm4gaXRlbSBhcyBhbnlcbiAgfVxuXG4gIHB1YmxpYyBpc01vY2tGdW5jdGlvbihmbjogYW55KTogZm4gaXMgRW5oYW5jZWRTcHkge1xuICAgIHJldHVybiBpc01vY2tGdW5jdGlvbihmbilcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFsbE1vY2tzKCkge1xuICAgIHRoaXMuX21vY2tlci5jbGVhck1vY2tzKHsgY2xlYXJNb2NrczogdHJ1ZSB9KVxuICAgIHNwaWVzLmZvckVhY2goc3B5ID0+IHNweS5tb2NrQ2xlYXIoKSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgcHVibGljIHJlc2V0QWxsTW9ja3MoKSB7XG4gICAgdGhpcy5fbW9ja2VyLmNsZWFyTW9ja3MoeyBtb2NrUmVzZXQ6IHRydWUgfSlcbiAgICBzcGllcy5mb3JFYWNoKHNweSA9PiBzcHkubW9ja1Jlc2V0KCkpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHB1YmxpYyByZXN0b3JlQWxsTW9ja3MoKSB7XG4gICAgdGhpcy5fbW9ja2VyLmNsZWFyTW9ja3MoeyByZXN0b3JlTW9ja3M6IHRydWUgfSlcbiAgICBzcGllcy5mb3JFYWNoKHNweSA9PiBzcHkubW9ja1Jlc3RvcmUoKSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB2aXRlc3QgPSBuZXcgVml0ZXN0VXRpbHMoKVxuZXhwb3J0IGNvbnN0IHZpID0gdml0ZXN0XG4iXSwibmFtZXMiOlsidGVzdCIsIkFzeW1tZXRyaWNNYXRjaGVyIiwiX2NvbGxlY3Rpb25zIiwicmVxdWlyZSQkMCIsImdsb2JhbCIsIlN5bWJvbCIsIlNQQUNFIiwic2VyaWFsaXplIiwicGx1Z2luIiwiX2RlZmF1bHQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2Fuc2lTdHlsZXMiLCJyZXF1aXJlJCQxIiwiRE9NQ29sbGVjdGlvbiIsImVzY2FwZUhUTUxfMSIsIkRPTUVsZW1lbnQiLCJfbWFya3VwIiwiSW1tdXRhYmxlIiwiSVNfS0VZRURfU0VOVElORUwiLCJJU19PUkRFUkVEX1NFTlRJTkVMIiwiSVNfU0VUX1NFTlRJTkVMIiwicmVhY3RJc01vZHVsZSIsIlJlYWN0RWxlbWVudCIsImdldFByb3BLZXlzIiwiUmVhY3RUZXN0Q29tcG9uZW50IiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicmVxdWlyZSQkOCIsInByZXR0eUZvcm1hdFBsdWdpbnMiLCJqZXN0RXF1YWxzIiwiZ2xvYmFsT2JqZWN0IiwiY29weVByb3RvdHlwZSIsImV2ZXJ5IiwiZnVuY3Rpb25OYW1lIiwidGhpcyIsInJlcXVpcmUkJDkiLCJ3aXRoR2xvYmFsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQ3RDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztBQUN6QyxJQUFJLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztBQUN6RCxJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUN2RCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUNuRCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDO0FBQ3pELElBQUksZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNoSyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUs7QUFDL0IsRUFBRSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDbEMsTUFBTSxlQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QyxFQUFFLElBQUksbUJBQW1CO0FBQ3pCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3QyxNQUFNLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBQ3BDLFFBQVEsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDMUMsRUFBRSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDdkIsSUFBSSxNQUFNLE1BQU0sR0FBRyxTQUFTLEdBQUcsSUFBSSxFQUFFO0FBQ3JDLE1BQU0sT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQyxLQUFLLENBQUM7QUFDTixJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO0FBQzVCLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3pDLFFBQVEsR0FBRyxHQUFHO0FBQ2QsVUFBVSxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRixTQUFTO0FBQ1QsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0gsRUFBRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoQixFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2Y7O0FDcENZLE1BQUMsT0FBTyxHQUFHO0FBQ3ZCLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxFQUFFLFlBQVksRUFBRSxJQUFJO0FBQ3BCLEVBQUU7QUFDSyxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFDbEMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUNNLGVBQWUsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7QUFDOUMsRUFBRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQ3BDLEVBQUUsT0FBTyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDL0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ2IsRUFBRSxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUM5QixDQUFDO0FBQ00sU0FBUyxxQkFBcUIsR0FBRztBQUN4QyxFQUFFLE9BQU8sT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDdEQsQ0FBQztBQUNNLFNBQVMscUJBQXFCLEdBQUc7QUFDeEMsRUFBRSxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQ3RELENBQUM7QUFDTSxTQUFTLFdBQVcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFO0FBQzFDLEVBQUUsTUFBTSxPQUFPLEdBQUcsUUFBUSxJQUFJLHFCQUFxQixFQUFFLENBQUM7QUFDdEQsRUFBRSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksT0FBTyxLQUFLLFFBQVE7QUFDMUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxLQUFLO0FBQ3RCLElBQUksT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLO0FBQ3ZFLE1BQU0sTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU07QUFDckMsUUFBUSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsUUFBUSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQixNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVCxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0QsU0FBUyxlQUFlLENBQUMsRUFBRSxFQUFFO0FBQzdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FBQ2hCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxFQUFFLE9BQU8sTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEtBQUs7QUFDaEQsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDcEUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDYixHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDTSxTQUFTLGFBQWEsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFO0FBQzNDLEVBQUUsT0FBTyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25EOztBQzVDQSxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDeEIsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRTtBQUMvQixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLENBQUM7QUFDTSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDM0IsRUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUNNLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDckMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBQ00sU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFO0FBQzlCLEVBQUUsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCOztBQ1RZLE1BQUMsS0FBSyxHQUFHLFdBQVcsR0FBRztBQUN2QixNQUFDQSxNQUFJLEdBQUcsZUFBZSxDQUFDLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDakgsRUFBRSxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRCxDQUFDLEVBQUU7QUFDUyxNQUFDLFFBQVEsR0FBRyxNQUFNO0FBQ2xCLE1BQUMsRUFBRSxHQUFHQSxPQUFLO0FBQ1gsTUFBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRTtBQUMvQixTQUFTLFlBQVksR0FBRztBQUMvQixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QixFQUFFLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLENBQUM7QUFDTSxTQUFTLGVBQWUsR0FBRztBQUNsQyxFQUFFLE9BQU8sT0FBTyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUM7QUFDOUMsQ0FBQztBQUNNLFNBQVMsZ0JBQWdCLEdBQUc7QUFDbkMsRUFBRSxPQUFPO0FBQ1QsSUFBSSxTQUFTLEVBQUUsRUFBRTtBQUNqQixJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxTQUFTLEVBQUUsRUFBRTtBQUNqQixHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0QsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLE1BQU07QUFDcEQsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDckIsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDMUIsRUFBRSxJQUFJLE1BQU0sQ0FBQztBQUNiLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDZCxFQUFFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFO0FBQzlHLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3ZGLElBQUksTUFBTSxLQUFLLEdBQUc7QUFDbEIsTUFBTSxFQUFFLEVBQUUsRUFBRTtBQUNaLE1BQU0sSUFBSSxFQUFFLE1BQU07QUFDbEIsTUFBTSxJQUFJLEVBQUUsS0FBSztBQUNqQixNQUFNLElBQUksRUFBRSxLQUFLO0FBQ2pCLE1BQU0sS0FBSyxFQUFFLEtBQUssQ0FBQztBQUNuQixNQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztBQUN2QixLQUFLLENBQUM7QUFDTixJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVO0FBQ3JDLE1BQU0sS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDOUIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDckQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsRUFBRSxNQUFNLFNBQVMsR0FBRztBQUNwQixJQUFJLElBQUksRUFBRSxXQUFXO0FBQ3JCLElBQUksSUFBSTtBQUNSLElBQUksSUFBSTtBQUNSLElBQUksSUFBSSxFQUFFLEtBQUs7QUFDZixJQUFJLEtBQUs7QUFDVCxJQUFJLE9BQU87QUFDWCxJQUFJLEtBQUs7QUFDVCxJQUFJLEVBQUUsRUFBRSxPQUFPO0FBQ2YsR0FBRyxDQUFDO0FBQ0osRUFBRSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDakMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDeEMsR0FBRztBQUNILEVBQUUsU0FBUyxTQUFTLEdBQUc7QUFDdkIsSUFBSSxNQUFNLEdBQUc7QUFDYixNQUFNLEVBQUUsRUFBRSxFQUFFO0FBQ1osTUFBTSxJQUFJLEVBQUUsT0FBTztBQUNuQixNQUFNLElBQUk7QUFDVixNQUFNLElBQUk7QUFDVixNQUFNLEtBQUssRUFBRSxFQUFFO0FBQ2YsS0FBSyxDQUFDO0FBQ04sSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztBQUN6QyxHQUFHO0FBQ0gsRUFBRSxTQUFTLEtBQUssR0FBRztBQUNuQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUIsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixHQUFHO0FBQ0gsRUFBRSxlQUFlLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDL0IsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QixJQUFJLElBQUksT0FBTztBQUNmLE1BQU0sTUFBTSxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUQsSUFBSSxNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEksSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO0FBQy9CLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSztBQUNsQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzFCLE1BQU0sSUFBSSxJQUFJO0FBQ2QsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNILEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pCLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUNELFNBQVMsV0FBVyxHQUFHO0FBQ3ZCLEVBQUUsT0FBTyxlQUFlLENBQUMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDekYsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDdEYsSUFBSSxPQUFPLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0RSxHQUFHLENBQUMsQ0FBQztBQUNMOzs7Ozs7O0FDakdBO0FBQ0EsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDbEM7QUFDQSxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRTtBQUNBLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0c7QUFDQSxTQUFTLGNBQWMsR0FBRztBQUMxQixDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDekIsQ0FBQyxNQUFNLE1BQU0sR0FBRztBQUNoQixFQUFFLFFBQVEsRUFBRTtBQUNaLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoQjtBQUNBLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDZixHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbEIsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3JCLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNyQixHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbkIsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xCLEdBQUcsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN6QixHQUFHO0FBQ0gsRUFBRSxLQUFLLEVBQUU7QUFDVCxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2hCLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsQixHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkIsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pCLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwQixHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDakIsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xCO0FBQ0E7QUFDQSxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDeEIsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4QixHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDekIsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMxQixHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdkIsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3hCLEdBQUc7QUFDSCxFQUFFLE9BQU8sRUFBRTtBQUNYLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNwQixHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEIsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3BCLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNyQixHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkIsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNuQixHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDcEI7QUFDQTtBQUNBLEdBQUcsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUMzQixHQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDekIsR0FBRyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQzNCLEdBQUcsY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUM1QixHQUFHLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDMUIsR0FBRyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQzdCLEdBQUcsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUMxQixHQUFHLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDM0IsR0FBRztBQUNILEVBQUUsQ0FBQztBQUNIO0FBQ0E7QUFDQSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQzlDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdEQsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUM5QyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3REO0FBQ0EsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxRCxFQUFFLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzFELEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ3ZCLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsSUFBSSxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxJQUFJLENBQUM7QUFDTDtBQUNBLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4QztBQUNBLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUU7QUFDM0MsR0FBRyxLQUFLLEVBQUUsS0FBSztBQUNmLEdBQUcsVUFBVSxFQUFFLEtBQUs7QUFDcEIsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFO0FBQ0Y7QUFDQSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUN4QyxFQUFFLEtBQUssRUFBRSxLQUFLO0FBQ2QsRUFBRSxVQUFVLEVBQUUsS0FBSztBQUNuQixFQUFFLENBQUMsQ0FBQztBQUNKO0FBQ0EsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7QUFDbkMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7QUFDckM7QUFDQSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFdBQVcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsV0FBVyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUM5RCxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQzlEO0FBQ0E7QUFDQSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7QUFDakMsRUFBRSxZQUFZLEVBQUU7QUFDaEIsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSztBQUNoQztBQUNBO0FBQ0EsSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtBQUN6QyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtBQUNsQixNQUFNLE9BQU8sRUFBRSxDQUFDO0FBQ2hCLE1BQU07QUFDTjtBQUNBLEtBQUssSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQ3BCLE1BQU0sT0FBTyxHQUFHLENBQUM7QUFDakIsTUFBTTtBQUNOO0FBQ0EsS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sRUFBRTtBQUNiLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsSUFBSTtBQUNKLEdBQUcsVUFBVSxFQUFFLEtBQUs7QUFDcEIsR0FBRztBQUNILEVBQUUsUUFBUSxFQUFFO0FBQ1osR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJO0FBQ2pCLElBQUksTUFBTSxPQUFPLEdBQUcsd0NBQXdDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbEIsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ2xDLEtBQUssV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFGLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckQ7QUFDQSxJQUFJLE9BQU87QUFDWCxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsSUFBSSxJQUFJO0FBQzNCLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUk7QUFDMUIsS0FBSyxPQUFPLEdBQUcsSUFBSTtBQUNuQixLQUFLLENBQUM7QUFDTixJQUFJO0FBQ0osR0FBRyxVQUFVLEVBQUUsS0FBSztBQUNwQixHQUFHO0FBQ0gsRUFBRSxZQUFZLEVBQUU7QUFDaEIsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdELEdBQUcsVUFBVSxFQUFFLEtBQUs7QUFDcEIsR0FBRztBQUNILEVBQUUsQ0FBQyxDQUFDO0FBQ0o7QUFDQSxDQUFDLE9BQU8sTUFBTSxDQUFDO0FBQ2YsQ0FBQztBQUNEO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUU7QUFDekMsQ0FBQyxVQUFVLEVBQUUsSUFBSTtBQUNqQixDQUFDLEdBQUcsRUFBRSxjQUFjO0FBQ3BCLENBQUMsQ0FBQzs7Ozs7QUNqS0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztnQ0FDeUIsR0FBRyxxQkFBcUI7K0JBQ3pCLEdBQUcsb0JBQW9COzBCQUM1QixHQUFHLGVBQWU7aUNBQ1gsR0FBRyxzQkFBc0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxLQUFLO0FBQy9ELEVBQUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckQ7QUFDQSxFQUFFLElBQUksTUFBTSxDQUFDLHFCQUFxQixFQUFFO0FBQ3BDLElBQUksTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUk7QUFDM0QsTUFBTSxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFO0FBQ3RFLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQixPQUFPO0FBQ1AsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxvQkFBb0I7QUFDN0IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxJQUFJO0FBQ04sRUFBRSxPQUFPO0FBQ1Q7QUFDQTtBQUNBLEVBQUUsU0FBUyxHQUFHLElBQUk7QUFDbEIsRUFBRTtBQUNGLEVBQUUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtBQUNyQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDO0FBQ2xDLElBQUksTUFBTSxlQUFlLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDeEQ7QUFDQSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQzFCLE1BQU0sTUFBTSxJQUFJLEdBQUcsT0FBTztBQUMxQixRQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQVEsTUFBTTtBQUNkLFFBQVEsZUFBZTtBQUN2QixRQUFRLEtBQUs7QUFDYixRQUFRLElBQUk7QUFDWixPQUFPLENBQUM7QUFDUixNQUFNLE1BQU0sS0FBSyxHQUFHLE9BQU87QUFDM0IsUUFBUSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFRLE1BQU07QUFDZCxRQUFRLGVBQWU7QUFDdkIsUUFBUSxLQUFLO0FBQ2IsUUFBUSxJQUFJO0FBQ1osT0FBTyxDQUFDO0FBQ1IsTUFBTSxNQUFNLElBQUksZUFBZSxHQUFHLElBQUksR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzNELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQztBQUNBLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7QUFDNUMsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO0FBQzlCLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUN0QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7QUFDaEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxtQkFBbUI7QUFDNUIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxJQUFJO0FBQ04sRUFBRSxPQUFPO0FBQ1QsRUFBRTtBQUNGLEVBQUUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtBQUNyQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDO0FBQ2xDLElBQUksTUFBTSxlQUFlLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDeEQ7QUFDQSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQzFCLE1BQU0sTUFBTTtBQUNaLFFBQVEsZUFBZTtBQUN2QixRQUFRLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQztBQUNBLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDekIsUUFBUSxNQUFNLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7QUFDNUMsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO0FBQzlCLFFBQVEsTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUN0QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7QUFDaEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDekUsRUFBRSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDbEI7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDO0FBQ2xDLElBQUksTUFBTSxlQUFlLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDeEQ7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLE1BQU0sTUFBTSxJQUFJLGVBQWUsQ0FBQztBQUNoQztBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ3JCLFFBQVEsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUMvQixRQUFRLE1BQU0sSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztBQUM1QyxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDOUIsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDO0FBQ3RCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztBQUNoRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQy9FLEVBQUUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsTUFBTSxJQUFJLEdBQUcsNkJBQTZCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN0RTtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUM7QUFDbEMsSUFBSSxNQUFNLGVBQWUsR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN4RDtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsTUFBTSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RSxNQUFNLE1BQU0sSUFBSSxlQUFlLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO0FBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUM5QixRQUFRLE1BQU0sSUFBSSxHQUFHLENBQUM7QUFDdEIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBQ2hELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEI7Ozs7QUN4TEEsTUFBTSxDQUFDLGNBQWMsQ0FBQ0MsbUJBQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsQ0FBQyxDQUFDO3dCQUNTLGdDQUFvQiw4QkFBa0IsR0FBRyxLQUFLLEVBQUU7QUFDNUQ7QUFDQSxJQUFJQyxjQUFZLEdBQUdDLFdBQXlCLENBQUM7QUFDN0M7QUFDQSxJQUFJQyxRQUFNLEdBQUcsQ0FBQyxZQUFZO0FBQzFCLEVBQUUsSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXLEVBQUU7QUFDekMsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixHQUFHLE1BQU0sSUFBSSxPQUFPQSxRQUFNLEtBQUssV0FBVyxFQUFFO0FBQzVDLElBQUksT0FBT0EsUUFBTSxDQUFDO0FBQ2xCLEdBQUcsTUFBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUcsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtBQUM1QyxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLEdBQUcsTUFBTTtBQUNULElBQUksT0FBTyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztBQUNyQyxHQUFHO0FBQ0gsQ0FBQyxHQUFHLENBQUM7QUFDTDtBQUNBLElBQUlDLFFBQU0sR0FBR0QsUUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQUlBLFFBQU0sQ0FBQyxNQUFNLENBQUM7QUFDakUsTUFBTSxpQkFBaUI7QUFDdkIsRUFBRSxPQUFPQyxRQUFNLEtBQUssVUFBVSxJQUFJQSxRQUFNLENBQUMsR0FBRztBQUM1QyxNQUFNQSxRQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO0FBQzFDLE1BQU0sUUFBUSxDQUFDO0FBQ2YsTUFBTUMsT0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQjtBQUNBLE1BQU1DLFdBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxLQUFLO0FBQ3RFLEVBQUUsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZDO0FBQ0EsRUFBRTtBQUNGLElBQUksYUFBYSxLQUFLLGlCQUFpQjtBQUN2QyxJQUFJLGFBQWEsS0FBSyxvQkFBb0I7QUFDMUMsSUFBSTtBQUNKLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFO0FBQ25DLE1BQU0sT0FBTyxHQUFHLEdBQUcsYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUN2QyxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0osTUFBTSxhQUFhO0FBQ25CLE1BQU1ELE9BQUs7QUFDWCxNQUFNLEdBQUc7QUFDVCxNQUFNLElBQUlKLGNBQVksQ0FBQyxjQUFjO0FBQ3JDLFFBQVEsR0FBRyxDQUFDLE1BQU07QUFDbEIsUUFBUSxNQUFNO0FBQ2QsUUFBUSxXQUFXO0FBQ25CLFFBQVEsS0FBSztBQUNiLFFBQVEsSUFBSTtBQUNaLFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUCxNQUFNLEdBQUc7QUFDVCxNQUFNO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRTtBQUNGLElBQUksYUFBYSxLQUFLLGtCQUFrQjtBQUN4QyxJQUFJLGFBQWEsS0FBSyxxQkFBcUI7QUFDM0MsSUFBSTtBQUNKLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFO0FBQ25DLE1BQU0sT0FBTyxHQUFHLEdBQUcsYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUN2QyxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0osTUFBTSxhQUFhO0FBQ25CLE1BQU1JLE9BQUs7QUFDWCxNQUFNLEdBQUc7QUFDVCxNQUFNLElBQUlKLGNBQVksQ0FBQyxxQkFBcUI7QUFDNUMsUUFBUSxHQUFHLENBQUMsTUFBTTtBQUNsQixRQUFRLE1BQU07QUFDZCxRQUFRLFdBQVc7QUFDbkIsUUFBUSxLQUFLO0FBQ2IsUUFBUSxJQUFJO0FBQ1osUUFBUSxPQUFPO0FBQ2YsT0FBTztBQUNQLE1BQU0sR0FBRztBQUNULE1BQU07QUFDTixHQUFHO0FBQ0g7QUFDQSxFQUFFO0FBQ0YsSUFBSSxhQUFhLEtBQUssZ0JBQWdCO0FBQ3RDLElBQUksYUFBYSxLQUFLLG1CQUFtQjtBQUN6QyxJQUFJO0FBQ0osSUFBSTtBQUNKLE1BQU0sYUFBYTtBQUNuQixNQUFNSSxPQUFLO0FBQ1gsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7QUFDM0QsTUFBTTtBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRixJQUFJLGFBQWEsS0FBSyxrQkFBa0I7QUFDeEMsSUFBSSxhQUFhLEtBQUsscUJBQXFCO0FBQzNDLElBQUk7QUFDSixJQUFJO0FBQ0osTUFBTSxhQUFhO0FBQ25CLE1BQU1BLE9BQUs7QUFDWCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztBQUMzRCxNQUFNO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ25DLENBQUMsQ0FBQztBQUNGOzZCQUNpQixHQUFHQyxZQUFVO0FBQzlCO0FBQ0EsTUFBTVAsTUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxpQkFBaUIsQ0FBQztBQUM5RDt3QkFDWSxHQUFHQSxNQUFJLENBQUM7QUFDcEIsTUFBTVEsUUFBTSxHQUFHO0FBQ2YsYUFBRUQsV0FBUztBQUNYLFFBQUVQLE1BQUk7QUFDTixDQUFDLENBQUM7QUFDRixJQUFJUyxVQUFRLEdBQUdELFFBQU0sQ0FBQzsyQkFDUCxHQUFHQzs7OztJQ2xIbEIsU0FBYyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLO0FBQy9DLENBQUMsTUFBTSxPQUFPLEdBQUc7QUFDakIsRUFBRSw4SEFBOEg7QUFDaEksRUFBRSwwREFBMEQ7QUFDNUQsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiO0FBQ0EsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3pELENBQUM7O0FDUEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztnQkFDUyx3QkFBb0Isc0JBQWtCLEdBQUcsS0FBSyxFQUFFO0FBQzVEO0FBQ0EsSUFBSSxVQUFVLEdBQUdDLHdCQUFzQixDQUFDUCxTQUFxQixDQUFDLENBQUM7QUFDL0Q7QUFDQSxJQUFJUSxhQUFXLEdBQUdELHdCQUFzQixDQUFDRSxrQkFBc0IsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsU0FBU0Ysd0JBQXNCLENBQUMsR0FBRyxFQUFFO0FBQ3JDLEVBQUUsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBbUIsR0FBRyxJQUFJO0FBQ2hDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxLQUFLLElBQUk7QUFDbkQsSUFBSSxRQUFRLEtBQUs7QUFDakIsTUFBTSxLQUFLQyxhQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDekMsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDM0MsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUMsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUMsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDM0MsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDNUMsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDM0MsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDN0MsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDOUMsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDN0MsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDekMsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUMsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUMsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLO0FBQzFDLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7QUFDQSxNQUFNLEtBQUtBLGFBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUk7QUFDdkMsUUFBUSxPQUFPLE9BQU8sQ0FBQztBQUN2QjtBQUNBLE1BQU0sS0FBS0EsYUFBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSTtBQUN6QyxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJO0FBQ3hDLFFBQVEsT0FBTyxRQUFRLENBQUM7QUFDeEI7QUFDQSxNQUFNLEtBQUtBLGFBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUk7QUFDeEMsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QjtBQUNBLE1BQU0sS0FBS0EsYUFBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSTtBQUN6QyxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJO0FBQzFDLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUI7QUFDQSxNQUFNLEtBQUtBLGFBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDekMsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QjtBQUNBLE1BQU0sS0FBS0EsYUFBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSTtBQUMzQyxRQUFRLE9BQU8sV0FBVyxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO0FBQzVDLFFBQVEsT0FBTyxZQUFZLENBQUM7QUFDNUI7QUFDQSxNQUFNLEtBQUtBLGFBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUk7QUFDM0MsUUFBUSxPQUFPLFdBQVcsQ0FBQztBQUMzQjtBQUNBLE1BQU0sS0FBS0EsYUFBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSTtBQUN2QyxRQUFRLE9BQU8sT0FBTyxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxLQUFLQSxhQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJO0FBQ3hDLFFBQVEsT0FBTyxRQUFRLENBQUM7QUFDeEI7QUFDQSxNQUFNO0FBQ04sUUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNsQixLQUFLO0FBQ0wsR0FBRyxDQUFDLENBQUM7QUFDTDtBQUNBLE1BQU1YLE1BQUksR0FBRyxHQUFHO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEU7Z0JBQ1ksR0FBR0EsTUFBSSxDQUFDO0FBQ3BCO0FBQ0EsTUFBTU8sV0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPO0FBQ2pFLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RFO3FCQUNpQixHQUFHQSxZQUFVO0FBQzlCLE1BQU1DLFFBQU0sR0FBRztBQUNmLGFBQUVELFdBQVM7QUFDWCxRQUFFUCxNQUFJO0FBQ04sQ0FBQyxDQUFDO0FBQ0YsSUFBSVMsVUFBUSxHQUFHRCxRQUFNLENBQUM7bUJBQ1AsR0FBR0M7Ozs7QUM3RmxCLE1BQU0sQ0FBQyxjQUFjLENBQUNJLGVBQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsQ0FBQyxDQUFDO29CQUNTLDRCQUFvQiwwQkFBa0IsR0FBRyxLQUFLLEVBQUU7QUFDNUQ7QUFDQSxJQUFJWCxjQUFZLEdBQUdDLFdBQXlCLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUcsT0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixNQUFNLFlBQVksR0FBRyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN0RCxNQUFNLFlBQVksR0FBRyxnQ0FBZ0MsQ0FBQztBQUN0RDtBQUNBLE1BQU0sUUFBUSxHQUFHLElBQUk7QUFDckIsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0Q7QUFDQSxNQUFNTixNQUFJLEdBQUcsR0FBRztBQUNoQixFQUFFLEdBQUc7QUFDTCxFQUFFLEdBQUcsQ0FBQyxXQUFXO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSTtBQUN4QixFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDO29CQUNZLEdBQUdBLE1BQUksQ0FBQztBQUNwQjtBQUNBLE1BQU0sY0FBYyxHQUFHLFVBQVU7QUFDakMsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUM7QUFDakQ7QUFDQSxNQUFNTyxXQUFTLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sS0FBSztBQUM3RSxFQUFFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQzNDO0FBQ0EsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUU7QUFDakMsSUFBSSxPQUFPLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHRCxPQUFLO0FBQ25DLEtBQUssWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsUUFBUSxHQUFHO0FBQ1gsUUFBUSxJQUFJSixjQUFZLENBQUMscUJBQXFCO0FBQzlDLFVBQVUsY0FBYyxDQUFDLFVBQVUsQ0FBQztBQUNwQyxjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsS0FBSztBQUNsRSxnQkFBZ0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQ3hELGdCQUFnQixPQUFPLEtBQUssQ0FBQztBQUM3QixlQUFlLEVBQUUsRUFBRSxDQUFDO0FBQ3BCLGNBQWMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUM3QixVQUFVLE1BQU07QUFDaEIsVUFBVSxXQUFXO0FBQ3JCLFVBQVUsS0FBSztBQUNmLFVBQVUsSUFBSTtBQUNkLFVBQVUsT0FBTztBQUNqQixTQUFTO0FBQ1QsUUFBUSxHQUFHO0FBQ1gsUUFBUSxHQUFHO0FBQ1gsUUFBUSxJQUFJQSxjQUFZLENBQUMsY0FBYztBQUN2QyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2hDLFVBQVUsTUFBTTtBQUNoQixVQUFVLFdBQVc7QUFDckIsVUFBVSxLQUFLO0FBQ2YsVUFBVSxJQUFJO0FBQ2QsVUFBVSxPQUFPO0FBQ2pCLFNBQVM7QUFDVCxRQUFRLEdBQUcsQ0FBQztBQUNaLElBQUk7QUFDSixDQUFDLENBQUM7QUFDRjt5QkFDaUIsR0FBR0ssWUFBVTtBQUM5QixNQUFNQyxRQUFNLEdBQUc7QUFDZixhQUFFRCxXQUFTO0FBQ1gsUUFBRVAsTUFBSTtBQUNOLENBQUMsQ0FBQztBQUNGLElBQUlTLFVBQVEsR0FBR0QsUUFBTSxDQUFDO3VCQUNQLEdBQUdDOzs7Ozs7OztBQzdFbEIsTUFBTSxDQUFDLGNBQWMsQ0FBQ0ssWUFBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7b0JBQ1ksR0FBRyxXQUFXO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ3pCLEVBQUUsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pEOztBQ2JBLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7Z0JBQ2M7QUFDakIsbUJBQW9CO0FBQ3BCLDJCQUE0QjtBQUM1QixxQkFBc0I7QUFDdEIscUJBQXNCO0FBQ3RCLHNCQUF1QjtBQUN2QixJQUFJLEtBQUssRUFBRTtBQUNYO0FBQ0EsSUFBSSxXQUFXLEdBQUdKLHdCQUFzQixDQUFDUCxZQUF1QixDQUFDLENBQUM7QUFDbEU7QUFDQSxTQUFTTyx3QkFBc0IsQ0FBQyxHQUFHLEVBQUU7QUFDckMsRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxLQUFLO0FBQy9FLEVBQUUsTUFBTSxlQUFlLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDdEQsRUFBRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQy9CLEVBQUUsT0FBTyxJQUFJO0FBQ2IsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJO0FBQ2hCLE1BQU0sTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RTtBQUNBLE1BQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDckMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDMUMsVUFBVSxPQUFPO0FBQ2pCLFlBQVksTUFBTSxDQUFDLFlBQVk7QUFDL0IsWUFBWSxlQUFlO0FBQzNCLFlBQVksT0FBTztBQUNuQixZQUFZLE1BQU0sQ0FBQyxZQUFZO0FBQy9CLFlBQVksV0FBVyxDQUFDO0FBQ3hCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLE9BQU87QUFDUDtBQUNBLE1BQU07QUFDTixRQUFRLE1BQU0sQ0FBQyxZQUFZO0FBQzNCLFFBQVEsV0FBVztBQUNuQixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSTtBQUN4QixRQUFRLEdBQUc7QUFDWCxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSztBQUN6QixRQUFRLEdBQUc7QUFDWCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSTtBQUN6QixRQUFRLE9BQU87QUFDZixRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSztBQUMxQixRQUFRO0FBQ1IsS0FBSyxDQUFDO0FBQ04sS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDRjtpQkFDa0IsR0FBRyxXQUFXO0FBQ2hDO0FBQ0EsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU87QUFDMUUsRUFBRSxRQUFRO0FBQ1YsS0FBSyxHQUFHO0FBQ1IsTUFBTSxLQUFLO0FBQ1gsUUFBUSxNQUFNLENBQUMsWUFBWTtBQUMzQixRQUFRLFdBQVc7QUFDbkIsU0FBUyxPQUFPLEtBQUssS0FBSyxRQUFRO0FBQ2xDLFlBQVksU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7QUFDcEMsWUFBWSxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdELEtBQUs7QUFDTCxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNkO29CQUNxQixHQUFHLGNBQWM7QUFDdEM7QUFDQSxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEtBQUs7QUFDcEMsRUFBRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUM3QyxFQUFFO0FBQ0YsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSztBQUMzRSxJQUFJO0FBQ0osQ0FBQyxDQUFDO0FBQ0Y7Z0JBQ2lCLEdBQUcsU0FBUyxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLO0FBQzFDLEVBQUUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDN0MsRUFBRTtBQUNGLElBQUksWUFBWSxDQUFDLElBQUk7QUFDckIsSUFBSSxNQUFNO0FBQ1YsSUFBSSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO0FBQ3JDLElBQUksS0FBSztBQUNULElBQUksWUFBWSxDQUFDLEtBQUs7QUFDdEIsSUFBSTtBQUNKLENBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO21CQUNvQixHQUFHLGFBQWE7QUFDcEM7QUFDQSxNQUFNLFlBQVksR0FBRztBQUNyQixFQUFFLElBQUk7QUFDTixFQUFFLFlBQVk7QUFDZCxFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsS0FBSztBQUNMLEVBQUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDckMsRUFBRTtBQUNGLElBQUksUUFBUSxDQUFDLElBQUk7QUFDakIsSUFBSSxHQUFHO0FBQ1AsSUFBSSxJQUFJO0FBQ1IsS0FBSyxZQUFZO0FBQ2pCLE1BQU0sUUFBUSxDQUFDLEtBQUs7QUFDcEIsUUFBUSxZQUFZO0FBQ3BCLFFBQVEsTUFBTSxDQUFDLFlBQVk7QUFDM0IsUUFBUSxXQUFXO0FBQ25CLFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQztBQUN0QixLQUFLLGVBQWU7QUFDcEIsUUFBUSxHQUFHO0FBQ1gsUUFBUSxRQUFRLENBQUMsS0FBSztBQUN0QixRQUFRLGVBQWU7QUFDdkIsUUFBUSxNQUFNLENBQUMsWUFBWTtBQUMzQixRQUFRLFdBQVc7QUFDbkIsUUFBUSxRQUFRLENBQUMsSUFBSTtBQUNyQixRQUFRLElBQUk7QUFDWixRQUFRLElBQUk7QUFDWixRQUFRLENBQUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUN2RCxJQUFJLEdBQUc7QUFDUCxJQUFJLFFBQVEsQ0FBQyxLQUFLO0FBQ2xCLElBQUk7QUFDSixDQUFDLENBQUM7QUFDRjttQkFDb0IsR0FBRyxhQUFhO0FBQ3BDO0FBQ0EsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEtBQUs7QUFDN0MsRUFBRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxFQUFFO0FBQ0YsSUFBSSxRQUFRLENBQUMsSUFBSTtBQUNqQixJQUFJLEdBQUc7QUFDUCxJQUFJLElBQUk7QUFDUixJQUFJLFFBQVEsQ0FBQyxLQUFLO0FBQ2xCLElBQUksSUFBSTtBQUNSLElBQUksUUFBUSxDQUFDLElBQUk7QUFDakIsSUFBSSxLQUFLO0FBQ1QsSUFBSSxRQUFRLENBQUMsS0FBSztBQUNsQixJQUFJO0FBQ0osQ0FBQyxDQUFDO0FBQ0Y7eUJBQzBCLEdBQUc7O0FDdEo3QixNQUFNLENBQUMsY0FBYyxDQUFDSyxZQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztpQkFDUyx5QkFBb0IsdUJBQWtCLEdBQUcsS0FBSyxFQUFFO0FBQzVEO0FBQ0EsSUFBSUMsU0FBTyxHQUFHYixNQUF1QixDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sY0FBYyxHQUFHLDJCQUEyQixDQUFDO0FBQ25EO0FBQ0EsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLElBQUk7QUFDaEMsRUFBRSxJQUFJO0FBQ04sSUFBSSxPQUFPLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxVQUFVLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RSxHQUFHLENBQUMsTUFBTTtBQUNWLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNILENBQUMsQ0FBQztBQUNGO0FBQ0EsTUFBTSxRQUFRLEdBQUcsR0FBRyxJQUFJO0FBQ3hCLEVBQUUsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7QUFDL0MsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLE1BQU0sZUFBZTtBQUN2QixJQUFJLENBQUMsT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQ3pELElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRTtBQUNGLElBQUksQ0FBQyxRQUFRLEtBQUssWUFBWTtBQUM5QixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksZUFBZSxDQUFDO0FBQy9ELEtBQUssUUFBUSxLQUFLLFNBQVMsSUFBSSxlQUFlLEtBQUssTUFBTSxDQUFDO0FBQzFELEtBQUssUUFBUSxLQUFLLFlBQVksSUFBSSxlQUFlLEtBQUssU0FBUyxDQUFDO0FBQ2hFLEtBQUssUUFBUSxLQUFLLGFBQWEsSUFBSSxlQUFlLEtBQUssa0JBQWtCLENBQUM7QUFDMUUsSUFBSTtBQUNKLENBQUMsQ0FBQztBQUNGO0FBQ0EsTUFBTUgsTUFBSSxHQUFHLEdBQUcsSUFBSTtBQUNwQixFQUFFLElBQUksZ0JBQWdCLENBQUM7QUFDdkI7QUFDQSxFQUFFO0FBQ0YsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssQ0FBQztBQUNuQyxRQUFRLEtBQUssQ0FBQztBQUNkLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsV0FBVyxNQUFNLElBQUk7QUFDckQsUUFBUSxnQkFBZ0IsS0FBSyxLQUFLLENBQUM7QUFDbkMsUUFBUSxLQUFLLENBQUM7QUFDZCxRQUFRLGdCQUFnQixDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQy9DLElBQUk7QUFDSixDQUFDLENBQUM7QUFDRjtpQkFDWSxHQUFHQSxNQUFJLENBQUM7QUFDcEI7QUFDQSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDMUIsRUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQ3JDLENBQUM7QUFDRDtBQUNBLFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRTtBQUM3QixFQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUM7QUFDeEMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQzlCLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLGFBQWEsQ0FBQztBQUN6QyxDQUFDO0FBQ0Q7QUFDQSxNQUFNTyxXQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sS0FBSztBQUN2RSxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hCLElBQUksT0FBTyxJQUFJUyxTQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckQsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMzQixJQUFJLE9BQU8sSUFBSUEsU0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztBQUNuQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7QUFDeEIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUU7QUFDakMsSUFBSSxPQUFPLElBQUlBLFNBQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUlBLFNBQU8sQ0FBQyxZQUFZO0FBQ2pDLElBQUksSUFBSTtBQUNSLElBQUksSUFBSUEsU0FBTyxDQUFDLFVBQVU7QUFDMUIsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDO0FBQzFCLFVBQVUsRUFBRTtBQUNaLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3JDLGFBQWEsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ25DLGFBQWEsSUFBSSxFQUFFO0FBQ25CLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQztBQUMxQixVQUFVLEVBQUU7QUFDWixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEtBQUs7QUFDbkUsWUFBWSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDcEQsWUFBWSxPQUFPLEtBQUssQ0FBQztBQUN6QixXQUFXLEVBQUUsRUFBRSxDQUFDO0FBQ2hCLE1BQU0sTUFBTTtBQUNaLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNO0FBQ2pDLE1BQU0sS0FBSztBQUNYLE1BQU0sSUFBSTtBQUNWLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTCxJQUFJLElBQUlBLFNBQU8sQ0FBQyxhQUFhO0FBQzdCLE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNsRSxNQUFNLE1BQU07QUFDWixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTTtBQUNqQyxNQUFNLEtBQUs7QUFDWCxNQUFNLElBQUk7QUFDVixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0wsSUFBSSxNQUFNO0FBQ1YsSUFBSSxXQUFXO0FBQ2YsR0FBRyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0Y7c0JBQ2lCLEdBQUdULFlBQVU7QUFDOUIsTUFBTUMsUUFBTSxHQUFHO0FBQ2YsYUFBRUQsV0FBUztBQUNYLFFBQUVQLE1BQUk7QUFDTixDQUFDLENBQUM7QUFDRixJQUFJUyxVQUFRLEdBQUdELFFBQU0sQ0FBQztvQkFDUCxHQUFHQzs7OztBQzdIbEIsTUFBTSxDQUFDLGNBQWMsQ0FBQ1EsV0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7Z0JBQ1Msd0JBQW9CLHNCQUFrQixHQUFHLEtBQUssRUFBRTtBQUM1RDtBQUNBLElBQUlmLGNBQVksR0FBR0MsV0FBeUIsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxvQkFBb0IsR0FBRyw0QkFBNEIsQ0FBQztBQUMxRCxNQUFNLGdCQUFnQixHQUFHLHdCQUF3QixDQUFDO0FBQ2xELE1BQU1lLG1CQUFpQixHQUFHLHlCQUF5QixDQUFDO0FBQ3BELE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDO0FBQ2hELE1BQU1DLHFCQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBQ3hELE1BQU0sa0JBQWtCLEdBQUcsMEJBQTBCLENBQUM7QUFDdEQ7QUFDQSxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQztBQUNoRCxNQUFNQyxpQkFBZSxHQUFHLHVCQUF1QixDQUFDO0FBQ2hELE1BQU0saUJBQWlCLEdBQUcseUJBQXlCLENBQUM7QUFDcEQ7QUFDQSxNQUFNLGdCQUFnQixHQUFHLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3JEO0FBQ0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQzdDO0FBQ0EsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQjtBQUNBLE1BQU0scUJBQXFCLEdBQUc7QUFDOUIsRUFBRSxHQUFHO0FBQ0wsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxJQUFJO0FBQ04sRUFBRSxPQUFPO0FBQ1QsRUFBRSxJQUFJO0FBQ047QUFDQSxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRO0FBQzNCLE1BQU0sV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0FBQzVCLE1BQU0sS0FBSztBQUNYLE1BQU0sR0FBRztBQUNULE1BQU0sSUFBSWxCLGNBQVksQ0FBQyxvQkFBb0I7QUFDM0MsUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFO0FBQ3JCLFFBQVEsTUFBTTtBQUNkLFFBQVEsV0FBVztBQUNuQixRQUFRLEtBQUs7QUFDYixRQUFRLElBQUk7QUFDWixRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1AsTUFBTSxHQUFHLENBQUM7QUFDVjtBQUNBO0FBQ0EsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7QUFDL0IsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWixFQUFFLE9BQU87QUFDVCxJQUFJLElBQUksR0FBRztBQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDaEMsUUFBUSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkMsUUFBUSxPQUFPO0FBQ2YsVUFBVSxJQUFJLEVBQUUsS0FBSztBQUNyQixVQUFVLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLFNBQVMsQ0FBQztBQUNWLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTztBQUNiLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEIsUUFBUSxLQUFLLEVBQUUsU0FBUztBQUN4QixPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0EsTUFBTSxvQkFBb0IsR0FBRztBQUM3QixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLEtBQUs7QUFDUCxFQUFFLElBQUk7QUFDTixFQUFFLE9BQU87QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEVBQUUsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBQztBQUN2RCxFQUFFLE9BQU8sRUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVE7QUFDbEMsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQ3ZCLE1BQU0sSUFBSTtBQUNWLFFBQVEsS0FBSztBQUNiLFFBQVEsR0FBRztBQUNYLFFBQVEsSUFBSUEsY0FBWSxDQUFDLG9CQUFvQjtBQUM3QyxVQUFVLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztBQUMvQixVQUFVLE1BQU07QUFDaEIsVUFBVSxXQUFXO0FBQ3JCLFVBQVUsS0FBSztBQUNmLFVBQVUsSUFBSTtBQUNkLFVBQVUsT0FBTztBQUNqQixTQUFTO0FBQ1QsUUFBUSxHQUFHLENBQUM7QUFDWixDQUFDLENBQUM7QUFDRjtBQUNBLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sS0FBSztBQUM5RSxFQUFFLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUU7QUFDakMsSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksR0FBRyxDQUFDZ0IsbUJBQWlCLENBQUMsRUFBRTtBQUM5QixJQUFJO0FBQ0osTUFBTSxJQUFJO0FBQ1YsTUFBTSxLQUFLO0FBQ1gsTUFBTSxHQUFHO0FBQ1QsT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxPQUFPO0FBQy9CLFVBQVUsSUFBSWhCLGNBQVksQ0FBQyxvQkFBb0I7QUFDL0MsWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFO0FBQ3pCLFlBQVksTUFBTTtBQUNsQixZQUFZLFdBQVc7QUFDdkIsWUFBWSxLQUFLO0FBQ2pCLFlBQVksSUFBSTtBQUNoQixZQUFZLE9BQU87QUFDbkIsV0FBVztBQUNYLFVBQVUsSUFBSSxDQUFDO0FBQ2YsTUFBTSxHQUFHO0FBQ1QsTUFBTTtBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUU7QUFDRixJQUFJLElBQUk7QUFDUixJQUFJLEtBQUs7QUFDVCxJQUFJLEdBQUc7QUFDUCxLQUFLLEdBQUcsQ0FBQyxLQUFLO0FBQ2QsSUFBSSxHQUFHLENBQUMsTUFBTTtBQUNkLElBQUksR0FBRyxDQUFDLFdBQVc7QUFDbkIsSUFBSSxHQUFHLENBQUMsU0FBUztBQUNqQixRQUFRLElBQUlBLGNBQVksQ0FBQyxtQkFBbUI7QUFDNUMsVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFO0FBQ3RCLFVBQVUsTUFBTTtBQUNoQixVQUFVLFdBQVc7QUFDckIsVUFBVSxLQUFLO0FBQ2YsVUFBVSxJQUFJO0FBQ2QsVUFBVSxPQUFPO0FBQ2pCLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQztBQUNiLElBQUksR0FBRztBQUNQLElBQUk7QUFDSixDQUFDLENBQUM7QUFDRjtBQUNBLE1BQU0sb0JBQW9CLEdBQUc7QUFDN0IsRUFBRSxHQUFHO0FBQ0wsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxJQUFJO0FBQ04sRUFBRSxPQUFPO0FBQ1QsRUFBRSxJQUFJO0FBQ047QUFDQSxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRO0FBQzNCLE1BQU0sV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0FBQzVCLE1BQU0sS0FBSztBQUNYLE1BQU0sR0FBRztBQUNULE1BQU0sSUFBSUEsY0FBWSxDQUFDLG1CQUFtQjtBQUMxQyxRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUU7QUFDcEIsUUFBUSxNQUFNO0FBQ2QsUUFBUSxXQUFXO0FBQ25CLFFBQVEsS0FBSztBQUNiLFFBQVEsSUFBSTtBQUNaLFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUCxNQUFNLEdBQUcsQ0FBQztBQUNWO0FBQ0EsTUFBTUssV0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEtBQUs7QUFDdEUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRTtBQUM1QixJQUFJLE9BQU8scUJBQXFCO0FBQ2hDLE1BQU0sR0FBRztBQUNULE1BQU0sTUFBTTtBQUNaLE1BQU0sV0FBVztBQUNqQixNQUFNLEtBQUs7QUFDWCxNQUFNLElBQUk7QUFDVixNQUFNLE9BQU87QUFDYixNQUFNLEdBQUcsQ0FBQ1kscUJBQW1CLENBQUMsR0FBRyxZQUFZLEdBQUcsS0FBSztBQUNyRCxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7QUFDN0IsSUFBSSxPQUFPLG9CQUFvQjtBQUMvQixNQUFNLEdBQUc7QUFDVCxNQUFNLE1BQU07QUFDWixNQUFNLFdBQVc7QUFDakIsTUFBTSxLQUFLO0FBQ1gsTUFBTSxJQUFJO0FBQ1YsTUFBTSxPQUFPO0FBQ2IsTUFBTSxNQUFNO0FBQ1osS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUcsQ0FBQ0MsaUJBQWUsQ0FBQyxFQUFFO0FBQzVCLElBQUksT0FBTyxvQkFBb0I7QUFDL0IsTUFBTSxHQUFHO0FBQ1QsTUFBTSxNQUFNO0FBQ1osTUFBTSxXQUFXO0FBQ2pCLE1BQU0sS0FBSztBQUNYLE1BQU0sSUFBSTtBQUNWLE1BQU0sT0FBTztBQUNiLE1BQU0sR0FBRyxDQUFDRCxxQkFBbUIsQ0FBQyxHQUFHLFlBQVksR0FBRyxLQUFLO0FBQ3JELEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRTtBQUM5QixJQUFJLE9BQU8sb0JBQW9CO0FBQy9CLE1BQU0sR0FBRztBQUNULE1BQU0sTUFBTTtBQUNaLE1BQU0sV0FBVztBQUNqQixNQUFNLEtBQUs7QUFDWCxNQUFNLElBQUk7QUFDVixNQUFNLE9BQU87QUFDYixNQUFNLE9BQU87QUFDYixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFO0FBQzVCLElBQUksT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdFLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQztBQUNGO0FBQ0E7cUJBQ2lCLEdBQUdaLFlBQVU7QUFDOUI7QUFDQSxNQUFNUCxNQUFJLEdBQUcsR0FBRztBQUNoQixFQUFFLEdBQUc7QUFDTCxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsa0JBQWtCLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUMzRTtnQkFDWSxHQUFHQSxNQUFJLENBQUM7QUFDcEIsTUFBTVEsUUFBTSxHQUFHO0FBQ2YsYUFBRUQsV0FBUztBQUNYLFFBQUVQLE1BQUk7QUFDTixDQUFDLENBQUM7QUFDRixJQUFJUyxVQUFRLEdBQUdELFFBQU0sQ0FBQzttQkFDUCxHQUFHQzs7Ozs7Ozs7Ozs7Ozs7OztBQzlPTCxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN6SixHQUFHLFVBQVUsR0FBRyxPQUFPLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBQyxDQUFDO0FBQ2xjLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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
|