@ragemp-mango/server 5.0.0 → 5.0.1
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/index.js +28 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5447,16 +5447,39 @@ var ServerRageMPEventEmmiter = class {
|
|
|
5447
5447
|
if (NATIVE_SERVER_EVENTS.has(eventName)) {
|
|
5448
5448
|
return this.on(eventName, listener);
|
|
5449
5449
|
}
|
|
5450
|
-
|
|
5451
|
-
|
|
5450
|
+
const wrapper = /* @__PURE__ */ __name((player, ...args) => {
|
|
5451
|
+
const parsedArgs = args.map((arg) => {
|
|
5452
|
+
if (typeof arg === "string") {
|
|
5453
|
+
try {
|
|
5454
|
+
return JSON.parse(arg);
|
|
5455
|
+
} catch {
|
|
5456
|
+
return arg;
|
|
5457
|
+
}
|
|
5458
|
+
}
|
|
5459
|
+
return arg;
|
|
5460
|
+
});
|
|
5461
|
+
listener(player, ...parsedArgs);
|
|
5462
|
+
}, "wrapper");
|
|
5463
|
+
mp.events.add(eventName, wrapper);
|
|
5464
|
+
return new RageMPServerScriptEvent(eventName, wrapper);
|
|
5452
5465
|
}
|
|
5453
5466
|
oncePlayer(eventName, listener) {
|
|
5454
5467
|
if (NATIVE_SERVER_EVENTS.has(eventName)) {
|
|
5455
5468
|
return this.once(eventName, listener);
|
|
5456
5469
|
}
|
|
5457
|
-
const onceWrapper = /* @__PURE__ */ __name((...args) => {
|
|
5470
|
+
const onceWrapper = /* @__PURE__ */ __name((player, ...args) => {
|
|
5458
5471
|
mp.events.remove(eventName, onceWrapper);
|
|
5459
|
-
|
|
5472
|
+
const parsedArgs = args.map((arg) => {
|
|
5473
|
+
if (typeof arg === "string") {
|
|
5474
|
+
try {
|
|
5475
|
+
return JSON.parse(arg);
|
|
5476
|
+
} catch {
|
|
5477
|
+
return arg;
|
|
5478
|
+
}
|
|
5479
|
+
}
|
|
5480
|
+
return arg;
|
|
5481
|
+
});
|
|
5482
|
+
listener(player, ...parsedArgs);
|
|
5460
5483
|
}, "onceWrapper");
|
|
5461
5484
|
mp.events.add(eventName, onceWrapper);
|
|
5462
5485
|
return new RageMPServerScriptEvent(eventName, onceWrapper);
|
|
@@ -6729,4 +6752,4 @@ export {
|
|
|
6729
6752
|
isSymbol,
|
|
6730
6753
|
isUndefined
|
|
6731
6754
|
};
|
|
6732
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2FwcC1lbnZpcm9tZW50LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2NvcmUtbWV0YWRhdGEta2V5LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V2ZW50LWRlc3RpbmF0aW9uLmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V4ZWN1dGlvbi1jb250ZXh0LXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvZW51bXMvbWV0aG9kLXBhcmFtLXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZW51bXMvZXJyb3ItbWVzc2FnZS5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2VudW1zL2luamVjdGFibGUtc2NvcGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9lbnVtcy9ycGMtcmVzdWx0LXN0YXR1cy5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvZGlzdC9jaHVuay03UVZZVTYzRS5qcyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy9nZW5lcmF0ZS1yYW5kb20taWQudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy90eXBlLWNoZWNrLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS9tb2R1bGUtbWV0YWRhdGEucmVhZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUvbW9kdWxlLWNvbnRhaW5lci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlL21vZHVsZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvZXhlY3V0aW9uLWNvbnRleHQtYmFzZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvbWFuZ28tcmVxdWVzdC1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9waXBlbGluZS9tYW5nby1yZXNwb25zZS1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC91dGlscy90cmVlLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9jb250cm9sbGVyL2NvbnRyb2xsZXItb3B0aW9ucy52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9lcnJvci1maWx0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvcGlwZS52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9ldmVudC1wYXJhbWV0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZXZlbnQtbWV0YWRhdGEudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZ3VhcmQudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvaW50ZXJjZXB0b3IudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3Rpb24tdG9rZW4udmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvcHJvdmlkZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvbW9kdWxlLW9wdGlvbnMudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3RhYmxlLW1ldGFkYXRhLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL21hbmdvLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9ndWFyZC1jYW5jZWwuZXJyb3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL2d1YXJkLWludmFsaWQtcmV0dXJuLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy90b28tbWFueS1yZXF1ZXN0cy5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9lcnJvcnMvdW5rbm93bi5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWV2ZW50LmhhbmRsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvcGlwZWxpbmUuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWZsb3cuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLW1ldGFkYXRhLnJlYWRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLXJwYy5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb250cm9sbGVyL2NvbnRyb2xsZXIudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhYnJhaGFtK3JlZmxlY3Rpb25AMC4xMi4wL25vZGVfbW9kdWxlcy9AYWJyYWhhbS9yZWZsZWN0aW9uL3NyYy9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9yZWZsZWN0b3Iuc2VydmljZS50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2luZGV4LnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9jb250cm9sbGVyLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvZ2xvYmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0YWJsZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL21vZHVsZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL29wdGlvbmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvc2V0LW1ldGFkYXRhLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy9jYXRjaC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9lcnJvcnMvdXNlLWZpbHRlcnMuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlLXRyZWUvYXBwLXJ1bnRpbWUudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL2RlcGVuZGVuY3ktYmluZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUtdHJlZS9tb2R1bGUtdHJlZS1zY2FubmVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLWV2ZW50LWVtbWl0ZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXJzLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLW11bHRpcGxheWVyLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2FwcC1idWlsZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NyZWF0ZS1hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLWludGVybmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS1pbnRlcm5hbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9ib2R5LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9pbmRleC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcmVxdWVzdC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcGFyYW0uZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGFyYW1zL3Jlc3BvbnNlLmRlb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGlwZWxpbmUvdXNlLWd1YXJkcy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtaW50ZXJjZXB0b3JzLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1waXBlcy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtcnBjLWRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi13ZWJ2aWV3LXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY3JlYXRlLXRpbWVyLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9jcm9uLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9ldmVyeS10aWNrLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9pbnRlcnZhbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvdGltZW91dC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9hcHBseS1kZWNvcmF0b3IudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS1wYXJhbS51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZm9yd2FyZC1yZWYudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy90aW1lci5zZXJ2aWNlLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9uZXJAOC4xLjIvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5taW4uanMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3NlcnZpY2VzL2Jhc2UtZXZlbnQuc2VydmljZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvc2VydmljZXMvYmFzZS1ycGMuc2VydmljZS50cyIsICIuLi9zcmMvcGx1Z2lucy9wbGF5ZXItcHJvdG90eXBlLnBsdWdpbi50cyIsICIuLi8uLi9jb3JlL3NyYy9waXBlcy9kZWZhdWx0LXZhbHVlLnBpcGUudHMiLCAiLi4vc3JjL3BsdWdpbnMvcnBjLnBsdWdpbi50cyIsICIuLi9zcmMvcGx1Z2lucy9zZXJ2aWNlLWJpbmRlci5wbHVnaW4udHMiLCAiLi4vc3JjL3NlcnZpY2VzL3NlcnZlci1ldmVudC5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9jb25zdGFudHMvaW50ZXJuYWwtZXZlbnRzLmNvbnN0cy50cyIsICIuLi9zcmMvc2VydmljZXMvc2VydmVyLWxvZ2dlci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9zZXJ2aWNlcy9zZXJ2ZXItcnBjLnNlcnZpY2UudHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtc2NyaXB0LWV2ZW50LWhhbmRsZXIudHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtZXZlbnQtZW1taXRlci50cyIsICIuLi9zcmMvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1tdWx0aXBsYXllci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy91c2UtZmlsdGVycy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL2ludGVybmFsL2luZGV4LnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi1wbGF5ZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24uZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLXBsYXllci5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2Utd2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9wbGF5ZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1ndWFyZHMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1pbnRlcmNlcHRvcnMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1wbGF5ZXItcmVxdWVzdC5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvcnBjL29uLXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi13ZWJ2aWV3LXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci90aHJvdHRsZXIuY29uc3RhbnRzLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci9kZWNvcmF0b3JzL3NraXAtdGhyb3R0bGUuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci9kZWNvcmF0b3JzL3Rocm90dGxlLmRlY29yYXRvci50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvdGhyb3R0bGVyLmd1YXJkLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci9zZXJ2aWNlcy90aHJvdHRsZXItc3RvcmFnZS5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci90aHJvdHRsZXIubW9kdWxlLnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IGVudW0gQXBwRW52aXJvbWVudCB7XG4gICAgQ2xpZW50LFxuICAgIFNlcnZlcixcbn1cbiIsICJleHBvcnQgZW51bSBDb3JlTWV0YWRhdGFLZXkge1xuICAgIC8vIEdlbmVyYWxcbiAgICBJbmplY3RhYmxlID0gJ21hbmdvOmluamVjdGFibGUnLFxuICAgIEluamVjdCA9ICdtYW5nbzppbmplY3QnLFxuICAgIE1vZHVsZSA9ICdtYW5nbzptb2R1bGUnLFxuICAgIEdsb2JhbE1vZHVsZSA9ICdtYW5nbzpnbG9iYWwtbW9kdWxlJyxcbiAgICBDb250cm9sbGVyID0gJ21hbmdvOmNvbnRyb2xsZXItb3B0aW9ucycsXG4gICAgLy8gRXZlbnRzICYgUlBDXG4gICAgQ29udHJvbGxlckV2ZW50cyA9ICdtYW5nbzpjb250cm9sbGVyLWV2ZW50cycsXG4gICAgQ29udHJvbGxlclJQQ3MgPSAnbWFuZ286Y29udHJvbGxlci1ycGNzJyxcbiAgICBDb250cm9sbGVyUGFyYW1zID0gJ21hbmdvOmNvbnRyb2xsZXItcnBjLXBhcmFtcycsXG4gICAgLy8gUGlwZWxpbmVcbiAgICBHdWFyZHMgPSAnbWFuZ286Z3VhcmRzJyxcbiAgICBJbnRlcmNlcHRvcnMgPSAnbWFuZ286aW50ZXJjZXB0b3JzJyxcbiAgICBQaXBlcyA9ICdtYW5nbzpwaXBlcycsXG4gICAgLy8gRXJyb3JcbiAgICBDYXRjaCA9ICdtYW5nbzpjYXRjaCcsXG4gICAgRXJyb3JGaWx0ZXJzID0gJ21hbmdvOmVycm9yLWZpbHRlcnMnLFxuICAgIC8vXG4gICAgVGltZXJzID0gJ21hbmdvOnRpbWVycycsXG59XG4iLCAiZXhwb3J0IGVudW0gRXZlbnREZXN0aW5hdGlvbiB7XG4gICAgU2VydmVyID0gJ3NlcnZlcicsXG4gICAgQ2xpZW50ID0gJ2NsaWVudCcsXG4gICAgV2ViVmlldyA9ICd3ZWJ2aWV3Jyxcbn1cbiIsICJleHBvcnQgZW51bSBFeGVjdXRpb25Db250ZXh0VHlwZSB7XG4gICAgRXZlbnQgPSAnZXZlbnQnLFxuICAgIFJQQyA9ICdycGMnLFxufVxuIiwgImV4cG9ydCBlbnVtIE1ldGhvZFBhcmFtVHlwZSB7XG4gICAgQm9keSA9ICdib2R5JyxcbiAgICBDdXN0b20gPSAnY3VzdG9tJyxcbiAgICBQYXJhbSA9ICdwYXJhbScsXG4gICAgUGxheWVyID0gJ3BsYXllcicsXG4gICAgUmVxdWVzdCA9ICdyZXF1ZXN0JyxcbiAgICBSZXNwb25zZSA9ICdyZXNwb25zZScsXG4gICAgSW5kZXggPSAnaW5kZXgnLFxufVxuIiwgImV4cG9ydCBjb25zdCBMT0dHRVJfU0VSVklDRSA9ICdMT0dHRVJfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgRVZFTlRfU0VSVklDRSA9ICdFVkVOVF9TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBSUENfU0VSVklDRSA9ICdSUENfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgTU9EVUxFX0NPTlRBSU5FUiA9ICdNT0RVTEVfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBSRUZMRUNUT1JfU0VSVklDRSA9ICdSRUZMRUNUT1JfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgVElNRVJfU0VSVklDRSA9ICdUSU1FUl9TRVJWSUNFJztcbiIsICJleHBvcnQgZW51bSBFcnJvck1lc3NhZ2Uge1xuICAgIFRvb01hbnlSZXF1ZXN0cyA9ICdUb28gbWFueSByZXF1ZXN0cy4nLFxuXG4gICAgLy8gRXZlbnRzXG4gICAgRXZlbnROYW1lTXVzdEJlU3RyaW5nID0gJ1RoZSBldmVudCBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBFdmVudE5hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIGV2ZW50IG5hbWUgbXVzdCBiZSB1bmlxdWUuJyxcbiAgICBFdmVudE5vdEFsbG93ZWRJbkNsaWVudCA9ICdUaGUgZXZlbnQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIEV2ZW50Tm90QWxsb3dlZEluU2VydmVyID0gJ1RoZSBldmVudCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc2VydmVyIGVudmlyb25tZW50LicsXG4gICAgSW52YWxpZEV2ZW50VHlwZSA9ICdJbnZhbGlkIGV2ZW50IHR5cGUuJyxcbiAgICBJbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUgPSAnVGhlIG5hbWUgb2YgdGhlIGludGVybmFsIGV2ZW50IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUmV0dXJuSW5FdmVudCA9ICdDYW5ub3QgcmV0dXJuIGEgdmFsdWUgZnJvbSBhbiBldmVudC4nLFxuXG4gICAgLy8gUlBDXG4gICAgUlBDTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgUlBDIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4nLFxuICAgIFJQQ05hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIFJQQyBuYW1lIG11c3QgYmUgdW5pcXVlLicsXG4gICAgUlBDTm90QWxsb3dlZEluQ2xpZW50ID0gJ1RoZSBSUEMgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIFJQQ05vdEFsbG93ZWRJblNlcnZlciA9ICdUaGUgUlBDIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQuJyxcbiAgICBJbnZhbGlkUlBDVHlwZSA9ICdJbnZhbGlkIFJQQyB0eXBlLicsXG4gICAgUlBDSGFuZGxlckFscmVhZHlFeGlzdHMgPSAnVGhlIFJQQyBoYW5kbGVyIGFscmVhZHkgZXhpc3RzLiBQbGVhc2UgcHJvdmlkZSBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgUlBDLicsXG4gICAgUlBDUmVzcG9uc2VBbHJlYWR5U2VudCA9ICdUaGUgUlBDIHJlc3BvbnNlIGhhcyBhbHJlYWR5IGJlZW4gc2VudC4nLFxuXG4gICAgLy8gRXJyb3IgZmlsdGVyc1xuICAgIEludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24gPSAnSW52YWxpZCBlcnJvciBmaWx0ZXIuIEVycm9yIGZpbHRlcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhIGNhdGNoIG1ldGhvZC4nLFxuICAgIEVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlciA9ICdUaGUgZXJyb3IgYWxyZWFkeSBwb2ludHMgdG8gYSBmaWx0ZXIuJyxcbiAgICBFeGNlcHRpb25IYW5kbGluZ0NvbmZsaWN0ID0gJ1RoZSBzYW1lIGV4Y2VwdGlvbiBjYW4gb25seSBiZSBjYXVnaHQgb25jZS4nLFxuICAgIEF0TGVhc3RPbmVGaWx0ZXJSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgZXJyb3IgZmlsdGVyIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBEdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkID0gJ0R1cGxpY2F0ZSBlcnJvciBmaWx0ZXIgZm91bmQuIEVuc3VyZSB0aGF0IHRoZSBzYW1lIGZpbHRlciBpcyBub3QgYXBwbGllZCBtb3JlIHRoYW4gb25jZS4nLFxuXG4gICAgLy8gV2ViVmlld1xuICAgIFdlYlZpZXdOb3RGb3VuZCA9ICdUaGUgV2ViVmlldyB3aXRoIHRoZSBzcGVjaWZpZWQgaWQgZG9lcyBub3QgZXhpc3QuJyxcbiAgICBXZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlciA9ICdUaGUgV2ViVmlldyBpZCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bWJlci4nLFxuXG4gICAgLy8gR3VhcmRcbiAgICBJbnZhbGlkR3VhcmREZWZpbml0aW9uID0gJ0ludmFsaWQgZ3VhcmQuIEd1YXJkcyBtdXN0IGJlIGEgY2xhc3MgcmVmZXJlbmNlIG9yIGFuIG9iamVjdCB3aXRoIGEgY2FuQWN0aXZhdGUgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGd1YXJkIG11c3QgYmUgcHJvdmlkZWQuJyxcblxuICAgIC8vIEludGVyY2VwdG9yXG4gICAgSW52YWxpZEludGVyY2VwdG9yRGVmaW5pdGlvbiA9ICdJbnZhbGlkIGludGVyY2VwdG9yLiBJbnRlcmNlcHRvcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpbnRlcmNlcHQgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGludGVyY2VwdG9yIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBJbnZhbGlkSW50ZXJjZXB0b3JSZXR1cm5WYWx1ZSA9ICdUaGUgaW50ZXJjZXB0b3IgbXVzdCByZXR1cm4gYSBmdW5jdGlvbi4nLFxuXG4gICAgLy8gUGlwZVxuICAgIEludmFsaWRQaXBlRGVmaW5pdGlvbiA9ICdJbnZhbGlkIHBpcGUuIFBpcGVzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYSB0cmFuc2Zvcm0gbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgcGlwZSBtdXN0IGJlIHByb3ZpZGVkLicsXG5cbiAgICAvLyBBcHAgbG9hZGluZ1xuICAgIEFwcEFscmVhZHlMb2FkZWQgPSAnQXBwIGlzIGFscmVhZHkgbG9hZGVkLiBQbGVhc2UgY2FsbCB0aGUgc3RvcCBtZXRob2QgYmVmb3JlIGNhbGxpbmcgdGhlIHN0YXJ0IG1ldGhvZC4nLFxuICAgIEFwcE5vdExvYWRlZCA9ICdBcHAgaXMgbm90IGxvYWRlZC4gUGxlYXNlIGNhbGwgdGhlIHN0YXJ0IG1ldGhvZCBiZWZvcmUgY2FsbGluZyB0aGUgc3RvcCBtZXRob2QuJyxcblxuICAgIC8vIERlY29yYXRvcnNcbiAgICBJbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQgPSAnVGhlIHNwZWNpZmllZCBpbmplY3Rpb24gdG9rZW4gaXMgaW52YWxpZC4nLFxuICAgIEluamVjdGlvblRva2VuTm90Rm91bmQgPSAnVGhlIGluamVjdGlvbiB0b2tlbiBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICBQYXJhbUtleU11c3RCZVN0cmluZyA9ICdUaGUgcGFyYW0ga2V5IG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBJbmRleEtleU11c3RCZU51bWJlciA9ICdUaGUgaW5kZXgga2V5IG11c3QgYmUgYSBudW1iZXIuJyxcbiAgICBEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSA9ICdUaGUgc2FtZSBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCBvbmNlIGluIHRoZSBzYW1lIGNsYXNzLicsXG4gICAgSW52YWxpZENvbnRyb2xsZXJPcHRpb25zID0gJ0ludmFsaWQgY29udHJvbGxlciBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZEluamVjdGFibGVPcHRpb25zID0gJ0ludmFsaWQgaW5qZWN0YWJsZSBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZE1vZHVsZU9wdGlvbnMgPSAnSW52YWxpZCBtb2R1bGUgb3B0aW9ucyBmb3VuZC4nLFxuICAgIE11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCA9ICdDYW5ub3QgYXBwbHkgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byB0aGUgc2FtZSBwYXJhbWV0ZXIuJyxcblxuICAgIC8vIEludGVybmFsIEFwcFxuICAgIENpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkID0gJ0NpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQuJyxcbiAgICBJbnZhbGlkTW9kdWxlRGVmaW5pdGlvbiA9ICdUaGUgbW9kdWxlIGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkRXhwb3J0RGVmaW5pdGlvbiA9ICdUaGUgZXhwb3J0IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uID0gJ1RoZSBwcm92aWRlciBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFBhcmFtZXRlckRlY29yYXRvclVzYWdlID0gJ0VhY2ggcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGVpciBpdHMgb3duIGRlY29yYXRvci4nLFxuICAgIFJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzID0gJ1RoZSBAUmVzcG9uc2UoKSBkZWNvcmF0b3IgaXMgbm90IGFsbG93ZWQgb24gZXZlbnRzLicsXG4gICAgUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzID0gJ1RoZSBAUGxheWVyKCkgZGVjb3JhdG9yIGlzIG5vdCBhbGxvd2VkIG9uIGNsaWVudCBldmVudHMuJyxcblxuICAgIC8vIFRpbWVyc1xuICAgIFRpbWVyTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgdGltZXIgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLicsXG59XG4iLCAiZXhwb3J0IGVudW0gSW5qZWN0YWJsZVNjb3BlIHtcbiAgICBSZXF1ZXN0ID0gJ3JlcXVlc3QnLFxuICAgIFRyYW5zaWVudCA9ICd0cmFuc2llbnQnLFxuICAgIFNpbmdsZXRvbiA9ICdzaW5nbGV0b24nLFxufVxuIiwgImV4cG9ydCBlbnVtIFJQQ1Jlc3VsdFN0YXR1cyB7XG4gICAgU3VjY2VzcyA9IDEsXG4gICAgVGltZW91dCA9IDIsXG4gICAgSGFuZGxlck5vdEZvdW5kID0gMyxcbiAgICBVbmtub3duID0gNCxcbiAgICBDYW5jZWxsZWRCeUd1YXJkID0gNSxcbiAgICBJbnZhbGlkR3VhcmRSZXR1cm4gPSA2LFxuICAgIFRvb01hbnlSZXF1ZXN0cyA9IDcsXG4gICAgUGxheWVyRGlzY29ubmVjdGVkID0gOCxcbiAgICBQbGF5ZXJOb3RGb3VuZCA9IDksXG59XG4iLCAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSk9Pl9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbmV4cG9ydCB7IF9fbmFtZSB9OyAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV3b2dJQ0oyWlhKemFXOXVJam9nTXl3S0lDQWljMjkxY21ObGN5STZJRnRkTEFvZ0lDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNklGdGRMQW9nSUNKdFlYQndhVzVuY3lJNklDSWlMQW9nSUNKdVlXMWxjeUk2SUZ0ZENuMEtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklpSjkiLCAiZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tSWQoKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSkgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpO1xufVxuIiwgImV4cG9ydCBjb25zdCBpc1VuZGVmaW5lZCA9IChvYmo6IGFueSk6IG9iaiBpcyB1bmRlZmluZWQgPT4gdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSAoZm46IGFueSk6IGZuIGlzIG9iamVjdCA9PiAhaXNOaWwoZm4pICYmIHR5cGVvZiBmbiA9PT0gJ29iamVjdCc7XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvbiA9ICh2YWw6IGFueSk6IHZhbCBpcyBGdW5jdGlvbiA9PiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xuZXhwb3J0IGNvbnN0IGlzU3RyaW5nID0gKHZhbDogYW55KTogdmFsIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbmV4cG9ydCBjb25zdCBpc051bWJlciA9ICh2YWw6IGFueSk6IHZhbCBpcyBudW1iZXIgPT4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG5leHBvcnQgY29uc3QgaXNDb25zdHJ1Y3RvciA9ICh2YWw6IGFueSk6IGJvb2xlYW4gPT4gdmFsID09PSAnY29uc3RydWN0b3InO1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHZhbDogYW55KTogdmFsIGlzIG51bGwgfCB1bmRlZmluZWQgPT4gaXNVbmRlZmluZWQodmFsKSB8fCB2YWwgPT09IG51bGw7XG5leHBvcnQgY29uc3QgaXNFbXB0eSA9IChhcnJheTogYW55KTogYm9vbGVhbiA9PiAhKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA+IDApO1xuZXhwb3J0IGNvbnN0IGlzU3ltYm9sID0gKHZhbDogYW55KTogdmFsIGlzIHN5bWJvbCA9PiB0eXBlb2YgdmFsID09PSAnc3ltYm9sJztcbmV4cG9ydCBjb25zdCBpc0FzeW5jRnVuY3Rpb24gPSAodmFsOiBhbnkpOiBib29sZWFuID0+IGlzRnVuY3Rpb24odmFsKSAmJiB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FzeW5jRnVuY3Rpb24nO1xuZXhwb3J0IGNvbnN0IGlzQm9vbGVhbiA9ICh2YWw6IGFueSk6IHZhbCBpcyBib29sZWFuID0+IHR5cGVvZiB2YWwgPT09ICdib29sZWFuJztcbmV4cG9ydCBjb25zdCBpc1Byb21pc2UgPSA8VCA9IGFueT4odmFsOiBhbnkpOiB2YWwgaXMgUHJvbWlzZTxUPiA9PiB2YWwgaW5zdGFuY2VvZiBQcm9taXNlO1xuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGlvblRva2VuLCBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBJbmplY3RhYmxlTWV0YWRhdGEsIEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgQ2xhc3NQcm92aWRlciwgRHluYW1pY01vZHVsZSwgTG9nZ2VyU2VydmljZSwgTW9kdWxlT3B0aW9ucywgUGlwZSwgUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc1N0cmluZywgaXNTeW1ib2wgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVNZXRhZGF0YVJlYWRlciB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGFzeW5jIHJlYWQobW9kdWxlOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4pIHtcbiAgICAgICAgLy8gQ2xhc3MgcmVmZXJlbmNlXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG1vZHVsZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPFJlcXVpcmVkPE1vZHVsZU9wdGlvbnM+PihDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCBtb2R1bGUpID8/IDxSZXF1aXJlZDxNb2R1bGVPcHRpb25zPj57fTtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydFRva2VucyA9IHRoaXMuZ2V0RXhwb3J0VG9rZW5zKG9wdGlvbnMuZXhwb3J0cyk7XG4gICAgICAgICAgICBjb25zdCBzZXBhcmF0ZWRQcm92aWRlcnMgPSB0aGlzLnNlcGFyYXRlUHJvdmlkZXJzKG9wdGlvbnMucHJvdmlkZXJzLCBleHBvcnRUb2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gPE1vZHVsZU1ldGFkYXRhPntcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyczogb3B0aW9ucy5jb250cm9sbGVycyxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBvcHRpb25zLmltcG9ydHMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShtb2R1bGUpLFxuICAgICAgICAgICAgICAgIC4uLnNlcGFyYXRlZFByb3ZpZGVycyxcbiAgICAgICAgICAgICAgICBjbGFzc1JlZjogbW9kdWxlLFxuICAgICAgICAgICAgICAgIGdsb2JhbDogUmVmbGVjdC5nZXRNZXRhZGF0YTxib29sZWFuPihDb3JlTWV0YWRhdGFLZXkuR2xvYmFsTW9kdWxlLCBtb2R1bGUpID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogb3B0aW9ucy5jb250YWluZXIsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIER5bmFtaWMgbW9kdWxlXG4gICAgICAgIGlmIChtb2R1bGUgaW5zdGFuY2VvZiBQcm9taXNlKSBtb2R1bGUgPSBhd2FpdCBtb2R1bGU7XG4gICAgICAgIGlmICghKCdtb2R1bGUnIGluIG1vZHVsZSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRNb2R1bGVEZWZpbml0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgbW9kdWxlOiBjbGFzc1JlZiwgZ2xvYmFsLCAuLi5vcHRpb25zIH0gPSA8UmVxdWlyZWQ8RHluYW1pY01vZHVsZT4+bW9kdWxlO1xuICAgICAgICBjb25zdCBleHBvcnRUb2tlbnMgPSB0aGlzLmdldEV4cG9ydFRva2VucyhvcHRpb25zLmV4cG9ydHMpO1xuICAgICAgICBjb25zdCBzZXBhcmF0ZWRQcm92aWRlcnMgPSB0aGlzLnNlcGFyYXRlUHJvdmlkZXJzKG9wdGlvbnMucHJvdmlkZXJzLCBleHBvcnRUb2tlbnMpO1xuXG4gICAgICAgIHJldHVybiA8TW9kdWxlTWV0YWRhdGE+e1xuICAgICAgICAgICAgY29udHJvbGxlcnM6IG9wdGlvbnMuY29udHJvbGxlcnMsXG4gICAgICAgICAgICBpbXBvcnRzOiBvcHRpb25zLmltcG9ydHMsXG4gICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKGNsYXNzUmVmKSxcbiAgICAgICAgICAgIC4uLnNlcGFyYXRlZFByb3ZpZGVycyxcbiAgICAgICAgICAgIGNsYXNzUmVmLFxuICAgICAgICAgICAgZ2xvYmFsOiBnbG9iYWwgPz8gZmFsc2UsXG4gICAgICAgICAgICBjb250YWluZXI6IG9wdGlvbnMuY29udGFpbmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGlwZWxpbmUoY2xhc3NSZWY6IE5ld2FibGUpIHtcbiAgICAgICAgY29uc3QgZ3VhcmRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEd1YXJkPltdPihDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCBjbGFzc1JlZikgPz8gW107XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxJbnRlcmNlcHRvcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgY2xhc3NSZWYpID8/IFtdO1xuICAgICAgICBjb25zdCBwaXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxQaXBlPltdPihDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIGNsYXNzUmVmKSA/PyBbXTtcbiAgICAgICAgY29uc3QgZXJyb3JGaWx0ZXJzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCBjbGFzc1JlZikgPz8gW107XG5cbiAgICAgICAgcmV0dXJuIHsgZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBlcnJvckZpbHRlcnMgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydFRva2VucyhleHBvcnRzOiBSZXF1aXJlZDxNb2R1bGVPcHRpb25zPlsnZXhwb3J0cyddKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm1hcDxJbmplY3Rpb25Ub2tlbj4oKHByb3ZpZGVyRXhwb3J0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwcm92aWRlckV4cG9ydCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIVJlZmxlY3QuaGFzT3duTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkluamVjdGFibGUsIHByb3ZpZGVyRXhwb3J0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFeHBvcnREZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyRXhwb3J0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyhwcm92aWRlckV4cG9ydCkgfHwgaXNTeW1ib2wocHJvdmlkZXJFeHBvcnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyRXhwb3J0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgncHJvdmlkZScgaW4gcHJvdmlkZXJFeHBvcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJFeHBvcnQucHJvdmlkZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEV4cG9ydERlZmluaXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlcGFyYXRlUHJvdmlkZXJzKHByb3ZpZGVyczogUmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz5bJ3Byb3ZpZGVycyddLCBleHBvcnRUb2tlbnM6IEluamVjdGlvblRva2VuW10pIHtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyc1xuICAgICAgICAgICAgLm1hcCgocHJvdmlkZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5qZWN0YWJsZU1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxJbmplY3RhYmxlTWV0YWRhdGE+KENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCBwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05pbChpbmplY3RhYmxlTWV0YWRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPENsYXNzUHJvdmlkZXI+eyBwcm92aWRlOiBwcm92aWRlciwgdXNlQ2xhc3M6IHByb3ZpZGVyLCBzY29wZTogaW5qZWN0YWJsZU1ldGFkYXRhLnNjb3BlIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgndXNlQ2xhc3MnIGluIHByb3ZpZGVyIHx8ICd1c2VWYWx1ZScgaW4gcHJvdmlkZXIgfHwgJ3VzZUZhY3RvcnknIGluIHByb3ZpZGVyIHx8ICd1c2VFeGlzdGluZycgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgIChhY2MsIHByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBvcnRUb2tlbnMuaW5jbHVkZXMocHJvdmlkZXIucHJvdmlkZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjYy5leHRlcm5hbFByb3ZpZGVycy5zZXQocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjLmludGVybmFsUHJvdmlkZXJzLnNldChwcm92aWRlci5wcm92aWRlLCBwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxQcm92aWRlcnM6IG5ldyBNYXA8SW5qZWN0aW9uVG9rZW4sIEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+PigpLFxuICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyczogbmV3IE1hcDxJbmplY3Rpb25Ub2tlbiwgRXhjbHVkZTxQcm92aWRlciwgTmV3YWJsZT4+KCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVDb250YWluZXIgZXh0ZW5kcyBDb250YWluZXIge31cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4vbW9kdWxlLWNvbnRhaW5lcic7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGUge1xuICAgIHB1YmxpYyByZWFkb25seSBjb250cm9sbGVyczogQ29udHJvbGxlcltdID0gW107XG4gICAgcHVibGljIGNvbnRhaW5lcjogTW9kdWxlQ29udGFpbmVyO1xuICAgIHB1YmxpYyBwYXJlbnQ6IE1vZHVsZSB8IHVuZGVmaW5lZDtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhO1xuICAgIHB1YmxpYyBpbnN0YW5jZTogeyBba2V5OiBzdHJpbmddOiBGdW5jdGlvbiB9O1xuICAgIHB1YmxpYyByZXBldGl0aXZlSW1wb3J0czogU2V0PE1vZHVsZT4gPSBuZXcgU2V0KCk7XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHRUeXBlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVxdWVzdEJhc2UgfSBmcm9tICcuL21hbmdvLXJlcXVlc3QtYmFzZSc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVzcG9uc2VCYXNlIH0gZnJvbSAnLi9tYW5nby1yZXNwb25zZS1iYXNlJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEV4ZWN1dGlvbkNvbnRleHRCYXNlPFxuICAgIFRSZXF1ZXN0IGV4dGVuZHMgTWFuZ29SZXF1ZXN0QmFzZSA9IE1hbmdvUmVxdWVzdEJhc2UsXG4gICAgVFJlc3BvbnNlIGV4dGVuZHMgTWFuZ29SZXNwb25zZUJhc2UgPSBNYW5nb1Jlc3BvbnNlQmFzZSxcbj4gaW1wbGVtZW50cyBFeGVjdXRpb25Db250ZXh0PFRSZXF1ZXN0LCBUUmVzcG9uc2U+XG57XG4gICAgcHVibGljICR0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZTtcbiAgICBwdWJsaWMgJGNsYXNzUmVmOiBOZXdhYmxlO1xuICAgIHB1YmxpYyAkaGFuZGxlcjogRnVuY3Rpb247XG4gICAgcHVibGljICRyZXF1ZXN0OiBUUmVxdWVzdDtcbiAgICBwdWJsaWMgJHJlc3BvbnNlPzogVFJlc3BvbnNlO1xuICAgIHB1YmxpYyAkbmFtZTogc3RyaW5nO1xuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kY2xhc3NSZWY7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYW5kbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVlc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyZXF1ZXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzcG9uc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyZXNwb25zZSE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kbmFtZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVxdWVzdCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWFuZ29SZXF1ZXN0QmFzZTxURGF0YSA9IHVua25vd24+IGltcGxlbWVudHMgTWFuZ29SZXF1ZXN0IHtcbiAgICBwdWJsaWMgJGJvZHk6IFREYXRhO1xuICAgIHB1YmxpYyAkcGxheWVyPzogUGxheWVyTXA7XG5cbiAgICBwdWJsaWMgZ2V0IGJvZHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRib2R5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxheWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcGxheWVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXJTZXJ2aWNlLCBSUENFcnJvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1Jlc3BvbnNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNYW5nb1Jlc3BvbnNlQmFzZSBpbXBsZW1lbnRzIE1hbmdvUmVzcG9uc2Uge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgcHVibGljICRzZW5kTGlzdGVuZXJzOiBTZXQ8KGRhdGE6IHVua25vd24pID0+IHZvaWQ+ID0gbmV3IFNldCgpO1xuICAgIHB1YmxpYyAkZXJyb3JMaXN0ZW5lcnM6IFNldDwoZXJyb3I6IFJQQ0Vycm9yKSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcbiAgICBwdWJsaWMgJGlzU2VudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIHNlbmQ8VERhdGEgPSB1bmtub3duPihkYXRhPzogVERhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuJGlzU2VudCkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyB0aGUgUlBDIHJlc3BvbnNlLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENSZXNwb25zZUFscmVhZHlTZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJHNlbmRMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKGRhdGEpKTtcbiAgICAgICAgdGhpcy4kaXNTZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXJyb3I8VERldGFpbHMgPSB1bmtub3duPihtZXNzYWdlOiBzdHJpbmcsIGRldGFpbHM/OiBURGV0YWlscykge1xuICAgICAgICBpZiAodGhpcy4kaXNTZW50KSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHRoZSBSUEMgcmVzcG9uc2UuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVycm9yTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcih7IG1lc3NhZ2UsIGRldGFpbHMgfSkpO1xuICAgICAgICB0aGlzLiRpc1NlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyAkb25TZW5kKGxpc3RlbmVyOiAoZGF0YTogdW5rbm93bikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLiRzZW5kTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljICRvbkVycm9yKGxpc3RlbmVyOiAoZXJyb3I6IFJQQ0Vycm9yKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuJGVycm9yTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBUcmVlTm9kZTxUPiB7XG4gICAgcHVibGljIHZhbHVlOiBUO1xuICAgIHB1YmxpYyBjaGlsZHJlbjogVHJlZU5vZGU8VD5bXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ2hpbGQoY2hpbGQ6IFRyZWVOb2RlPFQ+KSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUNoaWxkKGNoaWxkOiBUcmVlTm9kZTxUPikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyZWU8VD4ge1xuICAgIHB1YmxpYyByb290OiBUcmVlTm9kZTxUPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLnJvb3QgPSBuZXcgVHJlZU5vZGU8VD4odmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmF2ZXJzZShjYWxsYmFjazogKG5vZGU6IFRyZWVOb2RlPFQ+KSA9PiB2b2lkKSB7XG4gICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlOiBUcmVlTm9kZTxUPikge1xuICAgICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2godHJhdmVyc2VOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYXZlcnNlTm9kZSh0aGlzLnJvb3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhc3luY1RyYXZlcnNlKGNhbGxiYWNrOiAobm9kZTogVHJlZU5vZGU8VD4pID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gdHJhdmVyc2VOb2RlKG5vZGU6IFRyZWVOb2RlPFQ+KSB7XG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKG5vZGUuY2hpbGRyZW4ubWFwKHRyYXZlcnNlTm9kZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdHJhdmVyc2VOb2RlKHRoaXMucm9vdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgZnVuY3Rpb24gdHJhdmVyc2VOb2RlKG5vZGU6IFRyZWVOb2RlPFQ+LCBkZXB0aDogbnVtYmVyKSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKGAkeyctJy5yZXBlYXQoZGVwdGggKiAyKX0ke25vZGUudmFsdWV9YCk7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB0cmF2ZXJzZU5vZGUoY2hpbGQsIGRlcHRoICsgMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhdmVyc2VOb2RlKHRoaXMucm9vdCwgMCk7XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IGRlZmF1bHRDb250cm9sbGVyT3B0aW9uczogQ29udHJvbGxlck9wdGlvbnMgPSB7IHByZWZpeDogJycgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMob3B0aW9ucz86IENvbnRyb2xsZXJPcHRpb25zKSB7XG4gICAgaWYgKGlzTmlsKG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlOiBkZWZhdWx0Q29udHJvbGxlck9wdGlvbnMsIGVycm9yOiAnQ29udHJvbGxlciBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICAgIH1cblxuICAgIGlmICghKCdwcmVmaXgnIGluIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogeyAuLi5kZWZhdWx0Q29udHJvbGxlck9wdGlvbnMsIC4uLm9wdGlvbnMgfSB9O1xuICAgIH1cbiAgICBpZiAoJ3ByZWZpeCcgaW4gb3B0aW9ucyAmJiAhaXNTdHJpbmcob3B0aW9ucy5wcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zLCBlcnJvcjogJ0NvbnRyb2xsZXIgcHJlZml4IG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiB7IC4uLmRlZmF1bHRDb250cm9sbGVyT3B0aW9ucywgLi4ub3B0aW9ucyB9IH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXJyb3JGaWx0ZXI8RUYgZXh0ZW5kcyBFcnJvckZpbHRlciA9IEVycm9yRmlsdGVyPih2YWx1ZTogRUYgfCBOZXdhYmxlPEVGPikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUuY2F0Y2gpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBoYXZlIGEgY2F0Y2ggbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxFcnJvckZpbHRlcj52YWx1ZSkuY2F0Y2gpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBoYXZlIGEgY2F0Y2ggbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQaXBlKHZhbHVlOiBQaXBlIHwgTmV3YWJsZTxQaXBlPikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQaXBlIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS50cmFuc2Zvcm0pKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGhhdmUgYSB0cmFuc2Zvcm0gbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxQaXBlPnZhbHVlKS50cmFuc2Zvcm0pKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGhhdmUgYSB0cmFuc2Zvcm0gbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi9waXBlLnZhbGlkYXRlJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIodmFsdWU6IE1ldGhvZFBhcmFtZXRlcikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkgfHwgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG4gICAgaWYgKCdrZXknIGluIHZhbHVlICYmICFpc05pbCh2YWx1ZS5rZXkpICYmICFpc1N0cmluZyh2YWx1ZS5rZXkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGtleSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICBpZiAoISgnaW5kZXgnIGluIHZhbHVlKSB8fCAhaXNOdW1iZXIodmFsdWUuaW5kZXgpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGluZGV4IGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICAvLyBCb2R5UGFyYW1ldGVyIHwgUGxheWVyUGFyYW1ldGVyXG4gICAgaWYgKFxuICAgICAgICAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLkJvZHkgfHwgdmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLlBsYXllcikgJiZcbiAgICAgICAgJ2RhdGEnIGluIHZhbHVlICYmXG4gICAgICAgICFpc05pbCh2YWx1ZS5kYXRhKSAmJlxuICAgICAgICAhaXNTdHJpbmcodmFsdWUuZGF0YSlcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZGF0YSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBDdXN0b21QYXJhbWV0ZXJcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLkN1c3RvbSAmJiAhKCdmYWN0b3J5JyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZmFjdG9yeSBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5DdXN0b20gJiYgJ2ZhY3RvcnknIGluIHZhbHVlICYmICFpc0Z1bmN0aW9uKHZhbHVlLmZhY3RvcnkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cbiAgICAvLyAgUGFyYW1QYXJhbWV0ZXJcbiAgICBpZiAoKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5QYXJhbSB8fCB2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuSW5kZXgpICYmICEoJ2RhdGEnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBkYXRhIGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLlBhcmFtICYmICdkYXRhJyBpbiB2YWx1ZSAmJiAhaXNTdHJpbmcodmFsdWUuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZGF0YSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBJbmRleFBhcmFtZXRlclxuICAgIGlmICh2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuSW5kZXggJiYgJ2RhdGEnIGluIHZhbHVlICYmICFpc051bWJlcih2YWx1ZS5kYXRhKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBkYXRhIG11c3QgYmUgYSBudW1iZXInIH07XG4gICAgfVxuICAgIC8vIEJvZHlQYXJhbWV0ZXIgfCBDdXN0b21QYXJhbWV0ZXIgfCBQYXJhbVBhcmFtZXRlciB8IFBsYXllclBhcmFtZXRlciB8IEluZGV4UGFyYW1ldGVyO1xuICAgIGlmIChcbiAgICAgICAgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlcXVlc3QgJiZcbiAgICAgICAgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlc3BvbnNlICYmXG4gICAgICAgICdwaXBlcycgaW4gdmFsdWUgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUucGlwZXMpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIHBpcGVzIG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVxdWVzdCAmJiB2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVzcG9uc2UgJiYgISgncGlwZXMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5waXBlcyA9IFtdO1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlcXVlc3QgJiYgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiB2YWx1ZS5waXBlcyEpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXZlbnRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2FwcCc7XG5pbXBvcnQgeyBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVFdmVudFBhcmFtZXRlciB9IGZyb20gJy4vZXZlbnQtcGFyYW1ldGVyLnZhbGlkYXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZlbnRNZXRhZGF0YSh2YWx1ZTogRXZlbnRNZXRhZGF0YSkge1xuICAgIGlmIChpc05pbCh2YWx1ZSkgfHwgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICAgIH1cblxuICAgIC8vIFR5cGVcbiAgICBpZiAoISgndHlwZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgdHlwZSBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgaWYgKCFpc1N0cmluZyh2YWx1ZS50eXBlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIHR5cGUgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG4gICAgLy8gTmFtZVxuICAgIGlmICghKCduYW1lJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBuYW1lIGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICBpZiAoIWlzU3RyaW5nKHZhbHVlLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBNZXRob2RcbiAgICBpZiAoISgnbWV0aG9kJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBtZXRob2QgaXMgcmVxdWlyZWQnIH07XG4gICAgfVxuICAgIGlmICghaXNTdHJpbmcodmFsdWUubWV0aG9kKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIG1ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBQYXJhbXNcbiAgICBpZiAoISgncGFyYW1zJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgKDxFdmVudE1ldGFkYXRhPnZhbHVlKS5wYXJhbXMgPSBbXTtcbiAgICB9XG4gICAgaWYgKCdwYXJhbXMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLnBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBwYXJhbXMgbXVzdCBiZSBhbiBhcnJheScgfTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiB2YWx1ZS5wYXJhbXMpIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIocGFyYW0pO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHdWFyZDxHIGV4dGVuZHMgR3VhcmQgPSBHdWFyZD4odmFsdWU6IEcgfCBOZXdhYmxlPEc+KSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxHdWFyZD52YWx1ZSkuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUludGVyY2VwdG9yPEkgZXh0ZW5kcyBJbnRlcmNlcHRvciA9IEludGVyY2VwdG9yPih2YWx1ZTogSSB8IE5ld2FibGU8ST4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNGdW5jdGlvbigoPEludGVyY2VwdG9yPnZhbHVlKS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1N0cmluZywgaXNTeW1ib2wgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUluamVjdGlvblRva2VuKHZhbHVlOiBJbmplY3Rpb25Ub2tlbikge1xuICAgIGNvbnN0IHZhbGlkID0gaXNTdHJpbmcodmFsdWUpIHx8IGlzU3ltYm9sKHZhbHVlKSB8fCBpc0Z1bmN0aW9uKHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSk7XG4gICAgcmV0dXJuIHZhbGlkID8geyB2YWxpZCwgdmFsdWUgfSA6IHsgdmFsaWQsIHZhbHVlLCBlcnJvcjogJ0luamVjdGlvbiB0b2tlbiBtdXN0IGJlIGEgc3RyaW5nLCBzeW1ib2wsIGNsYXNzLCBvciBvYmplY3QnIH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQ2xhc3NQcm92aWRlcixcbiAgICBFeGlzdGluZ1Byb3ZpZGVyLFxuICAgIEZhY3RvcnlQcm92aWRlcixcbiAgICBPcHRpb25hbEZhY3RvcnlEZXBlbmRlbmN5LFxuICAgIFByb3ZpZGVyLFxuICAgIFZhbHVlUHJvdmlkZXIsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL2luamVjdGlvbi10b2tlbi52YWxpZGF0ZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlU2NvcGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVByb3ZpZGVyKHZhbHVlOiBQcm92aWRlcikge1xuICAgIGlmICghaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgYmUgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCEoJ3Byb3ZpZGUnIGluIHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYSBwcm92aWRlIHByb3BlcnR5JyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4odmFsdWUucHJvdmlkZSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3VzZUNsYXNzJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ2xhc3NQcm92aWRlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZVZhbHVlJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlVmFsdWVQcm92aWRlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZUZhY3RvcnknIGluIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVGYWN0b3J5UHJvdmlkZXIodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VFeGlzdGluZycgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUV4aXN0aW5nUHJvdmlkZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUNsYXNzLCB1c2VWYWx1ZSwgdXNlRmFjdG9yeSwgb3IgdXNlRXhpc3RpbmcgcHJvcGVydHknIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNsYXNzUHJvdmlkZXIodmFsdWU6IENsYXNzUHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlQ2xhc3MnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUNsYXNzIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIGlmICghKCdzY29wZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLnNjb3BlID0gSW5qZWN0YWJsZVNjb3BlLlNpbmdsZXRvbjtcbiAgICB9XG5cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhT2JqZWN0LnZhbHVlczxgJHtJbmplY3RhYmxlU2NvcGV9YD4oSW5qZWN0YWJsZVNjb3BlKS5pbmNsdWRlcyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBzY29wZSBtdXN0IGJlIGEgdmFsaWQgaW5qZWN0YWJsZSBzY29wZScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVmFsdWVQcm92aWRlcih2YWx1ZTogVmFsdWVQcm92aWRlcikge1xuICAgIGlmICghKCd1c2VWYWx1ZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdXNlVmFsdWUgcHJvcGVydHknIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSh2YWx1ZTogT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSkge1xuICAgIGlmICghKCdvcHRpb25hbCcgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGFuIG9wdGlvbmFsIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIGlmICghKCd0b2tlbicgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdG9rZW4gcHJvcGVydHknIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4odmFsdWUudG9rZW4pO1xuICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmFjdG9yeVByb3ZpZGVyKHZhbHVlOiBGYWN0b3J5UHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlRmFjdG9yeScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdXNlRmFjdG9yeSBwcm9wZXJ0eScgfTtcbiAgICB9XG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlLnVzZUZhY3RvcnkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgdXNlRmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCEoJ2luamVjdCcgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmluamVjdCA9IFtdO1xuICAgIH1cbiAgICBpZiAoJ2luamVjdCcgaW4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUuaW5qZWN0KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIGluamVjdCBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH1cbiAgICBpZiAoJ2luamVjdCcgaW4gdmFsdWUpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZS5pbmplY3QpIHtcbiAgICAgICAgICAgIGlmIChpc09iamVjdCh0b2tlbikgJiYgJ29wdGlvbmFsJyBpbiB0b2tlbiAmJiAndG9rZW4nIGluIHRva2VuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSh0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3Rpb25Ub2tlbih0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCdzY29wZScgaW4gdmFsdWUgJiYgIU9iamVjdC52YWx1ZXM8YCR7SW5qZWN0YWJsZVNjb3BlfWA+KEluamVjdGFibGVTY29wZSkuaW5jbHVkZXModmFsdWUuc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgc2NvcGUgbXVzdCBiZSBhIHZhbGlkIGluamVjdGFibGUgc2NvcGUnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nUHJvdmlkZXIodmFsdWU6IEV4aXN0aW5nUHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlRXhpc3RpbmcnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUV4aXN0aW5nIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRHluYW1pY01vZHVsZSwgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQcm92aWRlciB9IGZyb20gJy4vcHJvdmlkZXIudmFsaWRhdGUnO1xuaW1wb3J0IHsgaXNCb29sZWFuLCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QsIGlzUHJvbWlzZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0aW9uVG9rZW4sIE51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL2luamVjdGlvbi10b2tlbi52YWxpZGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMoXG4gICAgdmFsdWU/OiBNb2R1bGVPcHRpb25zIHwgRHluYW1pY01vZHVsZSxcbiAgICBpc0R5bmFtaWMgPSBmYWxzZSxcbik6IHsgdmFsaWQ6IGJvb2xlYW47IHZhbHVlOiBNb2R1bGVPcHRpb25zIHwgRHluYW1pY01vZHVsZTsgZXJyb3I/OiBOdWxsYWJsZTxzdHJpbmc+IH0ge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgICBjb250cm9sbGVyczogW10sXG4gICAgICAgICAgICBpbXBvcnRzOiBbXSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW10sXG4gICAgICAgICAgICBleHBvcnRzOiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnTW9kdWxlIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICBpZiAoISgnbW9kdWxlJyBpbiB2YWx1ZSkgfHwgIWlzRnVuY3Rpb24odmFsdWUubW9kdWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdEeW5hbWljIG1vZHVsZSBtdXN0IGhhdmUgYSBtb2R1bGUgZnVuY3Rpb24nIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISgnZ2xvYmFsJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlLmdsb2JhbCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKCEoJ2dsb2JhbCcgaW4gdmFsdWUpICYmICFpc0Jvb2xlYW4odmFsdWUuZ2xvYmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdEeW5hbWljIG1vZHVsZSBtdXN0IGhhdmUgYSBnbG9iYWwgcHJvcGVydHknIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ2ltcG9ydHMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLmltcG9ydHMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW1wb3J0cyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgnaW1wb3J0cycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmltcG9ydHMgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAoJ2NvbnRyb2xsZXJzJyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5jb250cm9sbGVycykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdDb250cm9sbGVycyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgnY29udHJvbGxlcnMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5jb250cm9sbGVycyA9IFtdO1xuICAgIH1cblxuICAgIGlmICgncHJvdmlkZXJzJyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5wcm92aWRlcnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXJzIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfSBlbHNlIGlmICghKCdwcm92aWRlcnMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5wcm92aWRlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAoJ2V4cG9ydHMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLmV4cG9ydHMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXhwb3J0cyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgnZXhwb3J0cycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmV4cG9ydHMgPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGltcG9ydGVkIG9mIHZhbHVlLmltcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGltcG9ydGVkKSAmJiAhaXNPYmplY3QoaW1wb3J0ZWQpICYmICFpc1Byb21pc2UoaW1wb3J0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0ltcG9ydCBtdXN0IGJlIGEgZnVuY3Rpb24sIG9iamVjdCwgb3IgcHJvbWlzZScgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09iamVjdChpbXBvcnRlZCkgJiYgIWlzUHJvbWlzZShpbXBvcnRlZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMoPER5bmFtaWNNb2R1bGU+aW1wb3J0ZWQsIHRydWUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiB2YWx1ZS5jb250cm9sbGVycykge1xuICAgICAgICBpZiAoIWlzRnVuY3Rpb24oY29udHJvbGxlcikpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnQ29udHJvbGxlciBtdXN0IGJlIGEgZnVuY3Rpb24nIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHZhbHVlLnByb3ZpZGVycykge1xuICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVQcm92aWRlcihwcm92aWRlcik7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGV4cG9ydEl0ZW0gb2YgdmFsdWUuZXhwb3J0cykge1xuICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3Rpb25Ub2tlbig8SW5qZWN0aW9uVG9rZW4+ZXhwb3J0SXRlbSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzT2JqZWN0KGV4cG9ydEl0ZW0pICYmXG4gICAgICAgICAgICAoJ3VzZUNsYXNzJyBpbiBleHBvcnRJdGVtIHx8ICd1c2VGYWN0b3J5JyBpbiBleHBvcnRJdGVtIHx8ICd1c2VWYWx1ZScgaW4gZXhwb3J0SXRlbSB8fCAndXNlRXhpc3RpbmcnIGluIGV4cG9ydEl0ZW0pXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCB9ID0gdmFsaWRhdGVQcm92aWRlcihleHBvcnRJdGVtKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V4cG9ydCBtdXN0IGJlIGEgcHJvdmlkZXIgb2JqZWN0JyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEluamVjdGFibGVTY29wZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuY29uc3QgZGVmYXVsdEluamVjdGFibGVPcHRpb25zOiBJbmplY3RhYmxlT3B0aW9ucyA9IHsgc2NvcGU6IEluamVjdGFibGVTY29wZS5TaW5nbGV0b24gfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhKHZhbHVlPzogSW5qZWN0YWJsZU9wdGlvbnMpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2NvcGUnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IHsgLi4uZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCAuLi52YWx1ZSB9IH07XG4gICAgfVxuICAgIGlmICgnc2NvcGUnIGluIHZhbHVlICYmICFpc1N0cmluZyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgc2NvcGUgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG5cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhT2JqZWN0LnZhbHVlczxgJHtJbmplY3RhYmxlU2NvcGV9YD4oSW5qZWN0YWJsZVNjb3BlKS5pbmNsdWRlcyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0ludmFsaWQgaW5qZWN0YWJsZSBzY29wZScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFJQQ1Jlc3VsdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY29uc3QgSU5URVJOQUxfQVBQX0NPTlRBSU5FUiA9ICdJTlRFUk5BTF9BUFBfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBHTE9CQUxfQVBQX0NPTlRBSU5FUiA9ICdHTE9CQUxfQVBQX0NPTlRBSU5FUic7XG5leHBvcnQgY29uc3QgQVBQX0VOVklST01FTlQgPSAnQVBQX0VOVklST01FTlQnO1xuXG5leHBvcnQgY29uc3QgR0xPQkFMX0dVQVJEUyA9ICdHTE9CQUxfR1VBUkRTJztcbmV4cG9ydCBjb25zdCBHTE9CQUxfSU5URVJDRVBUT1JTID0gJ0dMT0JBTF9JTlRFUkNFUFRPUlMnO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9QSVBFUyA9ICdHTE9CQUxfUElQRVMnO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9FUlJPUl9GSUxURVJTID0gJ0dMT0JBTF9FUlJPUl9GSUxURVJTJztcblxuZXhwb3J0IGNvbnN0IFBMVUdJTlMgPSAnUExVR0lOUyc7XG5cbmV4cG9ydCBjb25zdCBFTkFCTEVfU0hVVERPV05fSE9PS1MgPSAnRU5BQkxFX1NIVVRET1dOX0hPT0tTJztcbmV4cG9ydCBjb25zdCBDT05UQUlORVJfT1BUSU9OUyA9ICdDT05UQUlORVJfT1BUSU9OUyc7XG5leHBvcnQgY29uc3QgTE9HX0VSUk9SX1NUQUNLVFJBQ0UgPSAnTE9HX0VSUk9SX1NUQUNLVFJBQ0UnO1xuXG5leHBvcnQgY29uc3QgTUFOR09fTE9HX1BSRUZJWCA9ICfwn6WtJztcblxuZXhwb3J0IGNvbnN0IE1BTkdPX1JFUVVFU1RfRkFDVE9SWSA9ICdNQU5HT19SRVFVRVNUX0ZBQ1RPUlknO1xuZXhwb3J0IGNvbnN0IE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkgPSAnTUFOR09fUkVTUE9OU0VfRkFDVE9SWSc7XG5leHBvcnQgY29uc3QgRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSA9ICdFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZJztcblxuZXhwb3J0IGNvbnN0IE1VTFRJUExBWUVSX1NFUlZJQ0UgPSAnTVVMVElQTEFZRVJfU0VSVklDRSc7XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1RJTUVPVVQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnUlBDIGNhbGwgdGltZWQgb3V0LicgfSxcbiAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5UaW1lb3V0LFxufTtcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnUlBDIGhhbmRsZXIgbm90IGZvdW5kLicgfSxcbiAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5IYW5kbGVyTm90Rm91bmQsXG59O1xuXG5leHBvcnQgY29uc3QgUlBDX1JFU1VMVF9VTktOT1dOOiBSUENSZXN1bHQgPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogJ1Vua25vd24gZXJyb3IuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlVua25vd24sXG59O1xuXG5leHBvcnQgY29uc3QgUlBDX1JFU1VMVF9QTEFZRVJfRElTQ09OTkVDVEVEOiBSUENSZXN1bHQgPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogJ1BsYXllciBkaXNjb25uZWN0ZWQuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlBsYXllckRpc2Nvbm5lY3RlZCxcbn07XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnUGxheWVyIG5vdCBmb3VuZC4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuUGxheWVyTm90Rm91bmQsXG59O1xuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGNsYXNzIE1hbmdvRXJyb3I8VERldGFpbHMgPSB1bmtub3duPiBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgc3RhdHVzOiBudW1iZXIgPSBSUENSZXN1bHRTdGF0dXMuVW5rbm93bjtcbiAgICBwdWJsaWMgZGV0YWlsczogVERldGFpbHMgfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIsIGRldGFpbHM/OiBURGV0YWlscykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXMgPz8gUlBDUmVzdWx0U3RhdHVzLlVua25vd247XG4gICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuL21hbmdvLmVycm9yJztcblxuZXhwb3J0IGNsYXNzIEd1YXJkQ2FuY2VsRXJyb3IgZXh0ZW5kcyBNYW5nb0Vycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdQcm9jZXNzIGNhbmNlbGxlZCBieSB0aGUgZ3VhcmQuJywgUlBDUmVzdWx0U3RhdHVzLkNhbmNlbGxlZEJ5R3VhcmQpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBNYW5nb0Vycm9yIH0gZnJvbSAnLi9tYW5nby5lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBHdWFyZEludmFsaWRSZXR1cm5FcnJvciBleHRlbmRzIE1hbmdvRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ0d1YXJkIHJldHVybmVkIGFuIGludmFsaWQgdmFsdWUuIEV4cGVjdGVkIGJvb2xlYW4uJywgUlBDUmVzdWx0U3RhdHVzLkludmFsaWRHdWFyZFJldHVybik7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuL21hbmdvLmVycm9yJztcblxuZXhwb3J0IGNsYXNzIFRvb01hbnlSZXF1ZXN0cyBleHRlbmRzIE1hbmdvRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ1RvbyBtYW55IHJlcXVlc3RzLicpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgUlBDUmVzdWx0U3RhdHVzLlRvb01hbnlSZXF1ZXN0cyk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuL21hbmdvLmVycm9yJztcblxuZXhwb3J0IGNsYXNzIFVua25vd25FcnJvciBleHRlbmRzIE1hbmdvRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ1Vua25vd24gZXJyb3IuJywgUlBDUmVzdWx0U3RhdHVzLlVua25vd24pO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciwgR3VhcmQsIEludGVyY2VwdG9yLCBJbnRlcm5hbEV2ZW50U2VydmljZSwgTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTUVOVCwgRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSwgTUFOR09fUkVRVUVTVF9GQUNUT1JZLCBNVUxUSVBMQVlFUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFBpcGVsaW5lSGFuZGxlciB9IGZyb20gJy4vcGlwZWxpbmUuaGFuZGxlcic7XG5pbXBvcnQgdHlwZSB7IEV2ZW50TWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVWRU5UX1NFUlZJQ0UsIExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBBcHBFbnZpcm9tZW50LCBFeGVjdXRpb25Db250ZXh0VHlwZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCBNYW5nb1Jlc3BvbnNlQmFzZSwgdHlwZSBNYW5nb1JlcXVlc3RCYXNlIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBDYWxsSGFuZGxlciwgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNBc3luY0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29udHJvbGxlckZsb3dIYW5kbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyLWZsb3cuaGFuZGxlcic7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyRXZlbnRIYW5kbGVyIHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcml2YXRlIHJlYWRvbmx5IGFwcEVudjogQXBwRW52aXJvbWVudDtcbiAgICBAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBNdWx0aXBsYXllclNlcnZpY2U7XG4gICAgQGluamVjdChFVkVOVF9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U2VydmljZTogSW50ZXJuYWxFdmVudFNlcnZpY2U7XG4gICAgQGluamVjdChDb250cm9sbGVyRmxvd0hhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlckZsb3dIYW5kbGVyOiBDb250cm9sbGVyRmxvd0hhbmRsZXI7XG4gICAgQGluamVjdChQaXBlbGluZUhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcGlwZWxpbmVIYW5kbGVyOiBQaXBlbGluZUhhbmRsZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoTUFOR09fUkVRVUVTVF9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZU1hbmdvUmVxdWVzdDogKGJvZHk6IHVua25vd24sIHBsYXllcj86IFBsYXllck1wKSA9PiBNYW5nb1JlcXVlc3RCYXNlO1xuICAgIEBpbmplY3QoRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVFeGVjdXRpb25Db250ZXh0OiAoXG4gICAgICAgIHR5cGU6IEV4ZWN1dGlvbkNvbnRleHRUeXBlLFxuICAgICAgICBjbGFzc1JlZjogTmV3YWJsZSxcbiAgICAgICAgaGFuZGxlcjogRnVuY3Rpb24sXG4gICAgICAgIHJlcXVlc3Q6IE1hbmdvUmVxdWVzdEJhc2UsXG4gICAgICAgIHJlc3BvbnNlPzogTWFuZ29SZXNwb25zZUJhc2UsXG4gICAgICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgKSA9PiBFeGVjdXRpb25Db250ZXh0QmFzZTtcblxuICAgIHB1YmxpYyByZWdpc3RlckV2ZW50KFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgZXZlbnQ6IEV2ZW50TWV0YWRhdGEsXG4gICAgKSB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnb24nIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2V2ZW50LnR5cGVdKGV2ZW50Lm5hbWUsIGFzeW5jIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ29uSW50ZXJuYWwnIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlSW50ZXJuYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2VbYCQke2V2ZW50LnR5cGV9YF0oZXZlbnQubmFtZSwgYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBsYXllciwgYm9keSB9ID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UucGFyc2VJbnRlcm5hbEFyZ3M8UGxheWVyTXA+KC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ29uUGxheWVyJyB8fCBldmVudC50eXBlID09PSAnb25jZVBsYXllcicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC5uYW1lLCBhc3luYyAocGxheWVyLCBib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQsIGJvZHksIHBsYXllcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnb25TZXJ2ZXInIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlU2VydmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2V2ZW50LnR5cGVdKGV2ZW50Lm5hbWUsIGFzeW5jIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ29uV2ViVmlldycgfHwgZXZlbnQudHlwZSA9PT0gJ29uY2VXZWJWaWV3Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2V2ZW50LnR5cGVdKGV2ZW50LndlYlZpZXdJZCEsIGV2ZW50Lm5hbWUsIGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gYXJnc1sxXSA6IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgcGxheWVyID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gPFBsYXllck1wPmFyZ3NbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQsIGJvZHksIHBsYXllcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIGV2ZW50LicpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFdmVudFR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlRXZlbnQoXG4gICAgICAgIGd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10sXG4gICAgICAgIGludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10sXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIG1hcHBlZEVycm9yRmlsdGVyczogW2FueSB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdLFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBldmVudDogRXZlbnRNZXRhZGF0YSxcbiAgICAgICAgYm9keTogdW5rbm93bixcbiAgICAgICAgcGxheWVyPzogUGxheWVyTXAsXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNyZWF0ZU1hbmdvUmVxdWVzdChib2R5LCBwbGF5ZXIpO1xuICAgICAgICBjb25zdCBleGVjdXRpb25Db250ZXh0ID0gdGhpcy5jcmVhdGVFeGVjdXRpb25Db250ZXh0KFxuICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dFR5cGUuRXZlbnQsXG4gICAgICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLFxuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZi5wcm90b3R5cGVbZXZlbnQubWV0aG9kXSxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBldmVudC5uYW1lLFxuICAgICAgICApO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaEd1YXJkcyhleGVjdXRpb25Db250ZXh0LCBndWFyZHMsIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJGbG93SGFuZGxlci5jcmVhdGVBcmdzKGNvbnRyb2xsZXIsIGV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50LCBwaXBlcywgcGxheWVyKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXJNZXRob2QgPSBjb250cm9sbGVyLmluc3RhbmNlW2V2ZW50Lm1ldGhvZF0hO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gaXNBc3luY0Z1bmN0aW9uKGNvbnRyb2xsZXJNZXRob2QpXG4gICAgICAgICAgICAgICAgPyAoKTogdW5rbm93biA9PiBjb250cm9sbGVyLmluc3RhbmNlW2V2ZW50Lm1ldGhvZF0hLmFwcGx5KGNvbnRyb2xsZXIuaW5zdGFuY2UsIGFyZ3MpXG4gICAgICAgICAgICAgICAgOiAoKTogUHJvbWlzZTx1bmtub3duPiA9PiBjb250cm9sbGVyLmluc3RhbmNlW2V2ZW50Lm1ldGhvZF0hLmFwcGx5KGNvbnRyb2xsZXIuaW5zdGFuY2UsIGFyZ3MpO1xuICAgICAgICAgICAgY29uc3QgY2FsbEhhbmRsZXI6IENhbGxIYW5kbGVyID0ge1xuICAgICAgICAgICAgICAgIGhhbmRsZSxcbiAgICAgICAgICAgICAgICByZXR1cm46ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmV0dXJuIGEgdmFsdWUgZnJvbSBhbiBldmVudC4nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUmV0dXJuSW5FdmVudCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVGhyb3VnaEludGVyY2VwdG9ycyhleGVjdXRpb25Db250ZXh0LCBpbnRlcmNlcHRvcnMsIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLCBjYWxsSGFuZGxlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNhbGxIYW5kbGVyLmhhbmRsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JHcm91cCA9IG1hcHBlZEVycm9yRmlsdGVycy5maW5kKFxuICAgICAgICAgICAgICAgIChbZXJyb3JUeXBlXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZXJyb3JUeXBlKSAmJiBlcnJvciBpbnN0YW5jZW9mIGVycm9yVHlwZSkgfHwgZXJyb3JUeXBlID09PSAnTUFOR09fQU5ZX0VSUk9SJyB8fCBlcnJvciA9PT0gZXJyb3JUeXBlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpc05pbChlcnJvckdyb3VwKSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKGVycm9yR3JvdXBbMV0pXG4gICAgICAgICAgICAgICAgPyBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQoZXJyb3JHcm91cFsxXSlcbiAgICAgICAgICAgICAgICA6IGlzT2JqZWN0KGVycm9yR3JvdXBbMV0pICYmIGlzRnVuY3Rpb24oZXJyb3JHcm91cFsxXVsnY2F0Y2gnXSlcbiAgICAgICAgICAgICAgICAgID8gZXJyb3JHcm91cFsxXVxuICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggZXJyb3IgZmlsdGVycy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGluc3RhbmNlLmNhdGNoLmNhbGwoaW5zdGFuY2UsIGVycm9yLCBleGVjdXRpb25Db250ZXh0KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgR3VhcmQsIEludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBHdWFyZENhbmNlbEVycm9yLCBHdWFyZEludmFsaWRSZXR1cm5FcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudE1ldGFkYXRhLCBDYWxsSGFuZGxlciwgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVDb250YWluZXIgfSBmcm9tICcuLi9tb2R1bGUnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVIYW5kbGVyIHtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgLy8gQGluamVjdChHTE9CQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxDb250YWluZXI6IENvbnRhaW5lcjtcblxuICAgIHB1YmxpYyBhc3luYyBnb1Ryb3VnaEd1YXJkcyhleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0QmFzZSwgZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSwgY29udGFpbmVyOiBNb2R1bGVDb250YWluZXIpIHtcbiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiBndWFyZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihndWFyZCkgPyBjb250YWluZXIuZ2V0KGd1YXJkKSA6IGlzT2JqZWN0KGd1YXJkKSAmJiBpc0Z1bmN0aW9uKGd1YXJkWydjYW5BY3RpdmF0ZSddKSA/IGd1YXJkIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIGd1YXJkcy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRHdWFyZERlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2FuQWN0aXZhdGUgPSBhd2FpdCBpbnN0YW5jZS5jYW5BY3RpdmF0ZS5jYWxsKGluc3RhbmNlLCBleGVjdXRpb25Db250ZXh0KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuQWN0aXZhdGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggZ3VhcmRzLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHdWFyZEludmFsaWRSZXR1cm5FcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjYW5BY3RpdmF0ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHdWFyZENhbmNlbEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ29UaHJvdWdoSW50ZXJjZXB0b3JzKFxuICAgICAgICBleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0QmFzZSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSxcbiAgICAgICAgY29udGFpbmVyOiBNb2R1bGVDb250YWluZXIsXG4gICAgICAgIGNhbGxIYW5kbGVyOiBDYWxsSGFuZGxlcixcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihpbnRlcmNlcHRvcilcbiAgICAgICAgICAgICAgICA/IGNvbnRhaW5lci5nZXQoaW50ZXJjZXB0b3IpXG4gICAgICAgICAgICAgICAgOiBpc09iamVjdChpbnRlcmNlcHRvcikgJiYgaXNGdW5jdGlvbihpbnRlcmNlcHRvclsnaW50ZXJjZXB0J10pXG4gICAgICAgICAgICAgICAgICA/IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNOaWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBpbnRlcmNlcHRvcnMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkSW50ZXJjZXB0b3JEZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGluc3RhbmNlLmludGVyY2VwdC5jYWxsKGluc3RhbmNlLCBleGVjdXRpb25Db250ZXh0LCBjYWxsSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgdmFsdWU6IHVua25vd24sXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIGFyZ3VtZW50TWV0YWRhdGE6IEFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgIGNvbnRhaW5lcjogTW9kdWxlQ29udGFpbmVyLFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihwaXBlKSA/IGNvbnRhaW5lci5nZXQocGlwZSkgOiBpc09iamVjdChwaXBlKSA/IHBpcGUgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggcGlwZXMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUGlwZURlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoaW5zdGFuY2UudHJhbnNmb3JtLmNhbGwoaW5zdGFuY2UsIHZhbHVlLCBhcmd1bWVudE1ldGFkYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0QmFzZSB9IGZyb20gJy4uL3BpcGVsaW5lJztcbmltcG9ydCB0eXBlIHsgRXZlbnRNZXRhZGF0YSwgUlBDTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUGlwZWxpbmVIYW5kbGVyIH0gZnJvbSAnLi9waXBlbGluZS5oYW5kbGVyJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEFQUF9FTlZJUk9NRU5UIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXJGbG93SGFuZGxlciB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJpdmF0ZSByZWFkb25seSBhcHBFbnY6IEFwcEVudmlyb21lbnQ7XG4gICAgQGluamVjdChQaXBlbGluZUhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcGlwZWxpbmVIYW5kbGVyOiBQaXBlbGluZUhhbmRsZXI7XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlQXJncyhcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dDogRXhlY3V0aW9uQ29udGV4dEJhc2UsXG4gICAgICAgIG1ldGFkYXRhOiBSUENNZXRhZGF0YSB8IEV2ZW50TWV0YWRhdGEsXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIHBsYXllcj86IFBsYXllck1wLFxuICAgICkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBtZXRhZGF0YS5wYXJhbXMubWFwKGFzeW5jIChwYXJhbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3VtZW50TWV0YWRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHBhcmFtLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG1ldGF0eXBlOiBwYXJhbS5tZXRhdHlwZSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09ICdib2R5Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyBCb2R5XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaFBpcGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5yZXF1ZXN0LmJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdwYXJhbScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyYW1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChleGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaFBpcGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgKDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj5leGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keSlbcGFyYW0uZGF0YV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdpbmRleCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keVtwYXJhbS5kYXRhXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ3JlcXVlc3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRpb25Db250ZXh0LnJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBDdXN0b21cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5mYWN0b3J5KHBhcmFtLmRhdGEsIGV4ZWN1dGlvbkNvbnRleHQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgWy4uLnBpcGVzLCAuLi4ocGFyYW0/LnBpcGVzID8/IFtdKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAncGxheWVyJyAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGxheWVyIChTZXJ2ZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaFBpcGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGF0YSA/IHBsYXllciFbPGtleW9mIFBsYXllck1wPnBhcmFtLmRhdGFdIDogcGxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgWy4uLnBpcGVzLCAuLi4ocGFyYW0/LnBpcGVzID8/IFtdKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgR3VhcmQsIEludGVyY2VwdG9yLCBFcnJvckZpbHRlciwgVGltZXJNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyTWV0YWRhdGEsIEV2ZW50TWV0YWRhdGEsIE1ldGhvZFBhcmFtZXRlciwgUlBDTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFwcEVudmlyb21lbnQsIENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEFQUF9FTlZJUk9NRU5UIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcml2YXRlIHJlYWRvbmx5IGFwcEVudjogQXBwRW52aXJvbWVudDtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVhZChjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID1cbiAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGE8UGljazxDb250cm9sbGVyTWV0YWRhdGEsICdwcmVmaXgnPj4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXIsIGNsYXNzUmVmKSA/P1xuICAgICAgICAgICAgPFBpY2s8Q29udHJvbGxlck1ldGFkYXRhLCAncHJlZml4Jz4+e307XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKGNsYXNzUmVmKTtcbiAgICAgICAgY29uc3QgcnBjcyA9IHRoaXMuZ2V0UlBDcyhjbGFzc1JlZik7XG4gICAgICAgIGNvbnN0IHRpbWVycyA9IHRoaXMuZ2V0VGltZXJzKGNsYXNzUmVmKTtcblxuICAgICAgICByZXR1cm4gPENvbnRyb2xsZXJNZXRhZGF0YT57XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgY2xhc3NSZWYsXG4gICAgICAgICAgICBldmVudHMsXG4gICAgICAgICAgICBycGNzLFxuICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiksXG4gICAgICAgICAgICB0aW1lcnMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFdmVudHMoY2xhc3NSZWY6IE5ld2FibGUpIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxFdmVudE1ldGFkYXRhW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyRXZlbnRzLCBjbGFzc1JlZi5wcm90b3R5cGUpID8/IFtdO1xuXG4gICAgICAgIHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxFdmVudE1ldGFkYXRhPntcbiAgICAgICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0TWV0aG9kUGFyYW1zKGNsYXNzUmVmLCBldmVudCksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiwgZXZlbnQubWV0aG9kKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UlBDcyhjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICBjb25zdCBycGNzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxSUENNZXRhZGF0YVtdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclJQQ3MsIGNsYXNzUmVmLnByb3RvdHlwZSkgPz8gW107XG5cbiAgICAgICAgcmV0dXJuIHJwY3MubWFwKChycGMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8UlBDTWV0YWRhdGE+e1xuICAgICAgICAgICAgICAgIC4uLnJwYyxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0TWV0aG9kUGFyYW1zKGNsYXNzUmVmLCBycGMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0UGlwZWxpbmUoY2xhc3NSZWYsIHJwYy5tZXRob2QpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNZXRob2RQYXJhbXMoY2xhc3NSZWY6IE5ld2FibGUsIG1ldGFkYXRhOiBFdmVudE1ldGFkYXRhIHwgUlBDTWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIGNsYXNzUmVmLnByb3RvdHlwZSwgbWV0YWRhdGEubWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBwYXJhbXMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICBwYXJhbXMuZm9yRWFjaCgocGFyYW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyYW0uaW5kZXggIT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUGFyYW1ldGVyRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAobWV0YWRhdGEudHlwZSA9PT0gJ29uJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25QbGF5ZXInIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbkludGVybmFsJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25TZXJ2ZXInIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbldlYlZpZXcnIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZVBsYXllcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VJbnRlcm5hbCcgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VTZXJ2ZXInIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlV2ViVmlldycpICYmXG4gICAgICAgICAgICAgICAgcGFyYW0udHlwZSA9PT0gJ3Jlc3BvbnNlJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzcG9uc2VcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ3BsYXllcicgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gUGxheWVyIChDbGllbnQpIC0gTm90IGFsbG93ZWRcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlBsYXllckRlY29yYXRvck5vdEFsbG93ZWRPbkNsaWVudEV2ZW50cyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnR5cGUgPT09ICdvblBsYXllclJlcXVlc3QnICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LkNsaWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDTm90QWxsb3dlZEluQ2xpZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEudHlwZSA9PT0gJ29uU2VydmVyUmVxdWVzdCcgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENOb3RBbGxvd2VkSW5TZXJ2ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgobWV0YWRhdGEudHlwZSA9PT0gJ29uUGxheWVyJyB8fCBtZXRhZGF0YS50eXBlID09PSAnb25jZVBsYXllcicpICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LkNsaWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROb3RBbGxvd2VkSW5DbGllbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgobWV0YWRhdGEudHlwZSA9PT0gJ29uU2VydmVyJyB8fCBtZXRhZGF0YS50eXBlID09PSAnb25jZVNlcnZlcicpICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROb3RBbGxvd2VkSW5TZXJ2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGlwZWxpbmUodGFyZ2V0OiBOZXdhYmxlIHwgb2JqZWN0LCBtZXRob2Q/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZ3VhcmRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEd1YXJkPltdPihDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxJbnRlcmNlcHRvcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuICAgICAgICBjb25zdCBwaXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxQaXBlPltdPihDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcbiAgICAgICAgY29uc3QgZXJyb3JGaWx0ZXJzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgcmV0dXJuIHsgZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBlcnJvckZpbHRlcnMgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRpbWVycyhjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YTxUaW1lck1ldGFkYXRhW10+KENvcmVNZXRhZGF0YUtleS5UaW1lcnMsIGNsYXNzUmVmLnByb3RvdHlwZSkgPz8gW107XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IsIEludGVybmFsUlBDU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UsIFJQQ19TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFQUF9FTlZJUk9NRU5ULCBFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZLCBNQU5HT19SRVFVRVNUX0ZBQ1RPUlksIE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNBc3luY0Z1bmN0aW9uLCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBQaXBlbGluZUhhbmRsZXIgfSBmcm9tICcuL3BpcGVsaW5lLmhhbmRsZXInO1xuaW1wb3J0IHR5cGUgeyBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCwgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBFeGVjdXRpb25Db250ZXh0QmFzZSwgdHlwZSBNYW5nb1JlcXVlc3RCYXNlLCB0eXBlIE1hbmdvUmVzcG9uc2VCYXNlIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBDYWxsSGFuZGxlciwgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IENvbnRyb2xsZXJGbG93SGFuZGxlciB9IGZyb20gJy4vY29udHJvbGxlci1mbG93LmhhbmRsZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlclJQQ0hhbmRsZXIge1xuICAgIEBpbmplY3QoQVBQX0VOVklST01FTlQpIHByaXZhdGUgcmVhZG9ubHkgYXBwRW52OiBBcHBFbnZpcm9tZW50O1xuICAgIEBpbmplY3QoUlBDX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgcnBjU2VydmljZTogSW50ZXJuYWxSUENTZXJ2aWNlO1xuICAgIEBpbmplY3QoUGlwZWxpbmVIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lSGFuZGxlcjogUGlwZWxpbmVIYW5kbGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlckZsb3dIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xsZXJGbG93SGFuZGxlcjogQ29udHJvbGxlckZsb3dIYW5kbGVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAaW5qZWN0KE1BTkdPX1JFUVVFU1RfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVNYW5nb1JlcXVlc3Q6IChkYXRhOiB1bmtub3duLCBwbGF5ZXI/OiBQbGF5ZXJNcCkgPT4gTWFuZ29SZXF1ZXN0QmFzZTtcbiAgICBAaW5qZWN0KE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlTWFuZ29SZXNwb25zZTogKCkgPT4gTWFuZ29SZXNwb25zZUJhc2U7XG4gICAgQGluamVjdChFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQ6IChcbiAgICAgICAgdHlwZTogRXhlY3V0aW9uQ29udGV4dFR5cGUsXG4gICAgICAgIGNsYXNzUmVmOiBOZXdhYmxlLFxuICAgICAgICBoYW5kbGVyOiBGdW5jdGlvbixcbiAgICAgICAgcmVxdWVzdDogTWFuZ29SZXF1ZXN0QmFzZSxcbiAgICAgICAgcmVzcG9uc2U6IE1hbmdvUmVzcG9uc2VCYXNlLFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgKSA9PiBFeGVjdXRpb25Db250ZXh0QmFzZTtcblxuICAgIHB1YmxpYyBhc3luYyByZWdpc3RlclJQQyhcbiAgICAgICAgZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgbWFwcGVkRXJyb3JGaWx0ZXJzOiBbYW55IHwgJ01BTkdPX0FOWV9FUlJPUicsIE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXJdW10sXG4gICAgICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICAgICAgIHJwYzogUlBDTWV0YWRhdGEsXG4gICAgKSB7XG4gICAgICAgIGlmIChycGMudHlwZSA9PT0gJ29uUmVxdWVzdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJwY1NlcnZpY2VbcnBjLnR5cGVdKHJwYy5uYW1lLCBhc3luYyAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJQQyhndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgcnBjLCBib2R5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJwYy50eXBlID09PSAnb25QbGF5ZXJSZXF1ZXN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjU2VydmljZVtycGMudHlwZV0ocnBjLm5hbWUsIGFzeW5jIChwbGF5ZXIsIGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVSUEMoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIHJwYywgYm9keSwgcGxheWVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJwYy50eXBlID09PSAnb25TZXJ2ZXJSZXF1ZXN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjU2VydmljZVtycGMudHlwZV0ocnBjLm5hbWUsIGFzeW5jIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocnBjLnR5cGUgPT09ICdvbldlYlZpZXdSZXF1ZXN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjU2VydmljZVtycGMudHlwZV0ocnBjLndlYlZpZXdJZCEsIHJwYy5uYW1lLCBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IGFyZ3NbMV0gOiBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYXllciA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IDxQbGF5ZXJNcD5hcmdzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJQQyhndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgcnBjLCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBSUEMuJyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFJQQ1R5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlUlBDKFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgcnBjOiBSUENNZXRhZGF0YSxcbiAgICAgICAgYm9keTogdW5rbm93bixcbiAgICAgICAgcGxheWVyPzogUGxheWVyTXAsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuY3JlYXRlTWFuZ29SZXF1ZXN0KFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyICYmIChycGMudHlwZSA9PT0gJ29uUGxheWVyUmVxdWVzdCcgfHwgcnBjLnR5cGUgPT09ICdvbldlYlZpZXdSZXF1ZXN0JylcbiAgICAgICAgICAgICAgICAgICAgPyBwbGF5ZXJcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmNyZWF0ZU1hbmdvUmVzcG9uc2UoKTtcbiAgICAgICAgICAgIHJlc3BvbnNlLiRvblNlbmQoKGRhdGEpID0+IHJlc29sdmUoZGF0YSkpO1xuICAgICAgICAgICAgcmVzcG9uc2UuJG9uRXJyb3IoKGVycm9yKSA9PiByZXNvbHZlKGVycm9yKSk7XG4gICAgICAgICAgICBjb25zdCBleGVjdXRpb25Db250ZXh0ID0gdGhpcy5jcmVhdGVFeGVjdXRpb25Db250ZXh0KFxuICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHRUeXBlLlJQQyxcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYucHJvdG90eXBlW3JwYy5tZXRob2RdLFxuICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcnBjLm5hbWUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoR3VhcmRzKGV4ZWN1dGlvbkNvbnRleHQsIGd1YXJkcywgY29udHJvbGxlci5vd25lci5jb250YWluZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJGbG93SGFuZGxlci5jcmVhdGVBcmdzKGNvbnRyb2xsZXIsIGV4ZWN1dGlvbkNvbnRleHQsIHJwYywgcGlwZXMsIHBsYXllcik7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbGxlck1ldGhvZCA9IGNvbnRyb2xsZXIuaW5zdGFuY2VbcnBjLm1ldGhvZF0hO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGlzQXN5bmNGdW5jdGlvbihjb250cm9sbGVyTWV0aG9kKVxuICAgICAgICAgICAgICAgICAgICA/IChvcHRpb25zOiB7IHNlbmQ6IGJvb2xlYW4gfSA9IHsgc2VuZDogdHJ1ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRyb2xsZXIuaW5zdGFuY2VbcnBjLm1ldGhvZF0hLmFwcGx5KGNvbnRyb2xsZXIuaW5zdGFuY2UsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZW5kKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogYXN5bmMgKG9wdGlvbnM6IHsgc2VuZDogYm9vbGVhbiB9ID0geyBzZW5kOiB0cnVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udHJvbGxlci5pbnN0YW5jZVtycGMubWV0aG9kXSEuYXBwbHkoY29udHJvbGxlci5pbnN0YW5jZSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbEhhbmRsZXI6IENhbGxIYW5kbGVyID0ge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjogKHZhbHVlOiB1bmtub3duKSA9PiByZXNwb25zZS5zZW5kKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVGhyb3VnaEludGVyY2VwdG9ycyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxIYW5kbGVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNhbGxIYW5kbGVyLmhhbmRsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JHcm91cCA9IG1hcHBlZEVycm9yRmlsdGVycy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoW2Vycm9yVHlwZV0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihlcnJvclR5cGUpICYmIGVycm9yIGluc3RhbmNlb2YgZXJyb3JUeXBlKSB8fCBlcnJvclR5cGUgPT09ICdNQU5HT19BTllfRVJST1InIHx8IGVycm9yID09PSBlcnJvclR5cGUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOaWwoZXJyb3JHcm91cCkpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGlzRnVuY3Rpb24oZXJyb3JHcm91cFsxXSlcbiAgICAgICAgICAgICAgICAgICAgPyBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQoZXJyb3JHcm91cFsxXSlcbiAgICAgICAgICAgICAgICAgICAgOiBpc09iamVjdChlcnJvckdyb3VwWzFdKSAmJiBpc0Z1bmN0aW9uKGVycm9yR3JvdXBbMV1bJ2NhdGNoJ10pXG4gICAgICAgICAgICAgICAgICAgICAgPyBlcnJvckdyb3VwWzFdXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEVycm9yRmlsdGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShpbnN0YW5jZS5jYXRjaC5jYWxsKGluc3RhbmNlLCBlcnJvciwgZXhlY3V0aW9uQ29udGV4dCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJNZXRhZGF0YSwgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZSB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgdHlwZSB7IFNjcmlwdFJQQ0hhbmRsZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXIge1xuICAgIHB1YmxpYyBtZXRhZGF0YTogQ29udHJvbGxlck1ldGFkYXRhO1xuICAgIHB1YmxpYyBpbnN0YW5jZTogeyBba2V5OiBzdHJpbmddOiBGdW5jdGlvbiB9O1xuICAgIHB1YmxpYyBvd25lcjogTW9kdWxlO1xuICAgIHB1YmxpYyBldmVudEhhbmRsZXJzOiBTY3JpcHRFdmVudEhhbmRsZXJbXSA9IFtdO1xuICAgIHB1YmxpYyBycGNIYW5kbGVyczogU2NyaXB0UlBDSGFuZGxlcltdID0gW107XG59XG4iLCAiZXhwb3J0IHR5cGUgRGVjb3JhdG9yID0gQ2xhc3NEZWNvcmF0b3IgfCBNZW1iZXJEZWNvcmF0b3I7XG5leHBvcnQgdHlwZSBNZW1iZXJEZWNvcmF0b3IgPSA8VD4oXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleTogUHJvcGVydHlLZXksXG4gIGRlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPixcbikgPT4gVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8VD4gfCB2b2lkO1xuZXhwb3J0IHR5cGUgTWV0YWRhdGFLZXkgPSBzdHJpbmcgfCBzeW1ib2w7XG5leHBvcnQgdHlwZSBQcm9wZXJ0eUtleSA9IHN0cmluZyB8IHN5bWJvbDtcbmV4cG9ydCB0eXBlIFRhcmdldCA9IG9iamVjdCB8IEZ1bmN0aW9uO1xuXG5jb25zdCBNZXRhZGF0YSA9IG5ldyBXZWFrTWFwKCk7XG5cbmZ1bmN0aW9uIGRlY29yYXRlUHJvcGVydHkoXG4gIGRlY29yYXRvcnM6IE1lbWJlckRlY29yYXRvcltdLFxuICB0YXJnZXQ6IFRhcmdldCxcbiAgcHJvcGVydHlLZXk6IFByb3BlcnR5S2V5LFxuICBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yLFxuKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkIHtcbiAgZGVjb3JhdG9ycy5yZXZlcnNlKCkuZm9yRWFjaCgoZGVjb3JhdG9yOiBNZW1iZXJEZWNvcmF0b3IpID0+IHtcbiAgICBkZXNjcmlwdG9yID0gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHx8IGRlc2NyaXB0b3I7XG4gIH0pO1xuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGVDb25zdHJ1Y3RvcihcbiAgZGVjb3JhdG9yczogQ2xhc3NEZWNvcmF0b3JbXSxcbiAgdGFyZ2V0OiBGdW5jdGlvbixcbik6IEZ1bmN0aW9uIHtcbiAgZGVjb3JhdG9ycy5yZXZlcnNlKCkuZm9yRWFjaCgoZGVjb3JhdG9yOiBDbGFzc0RlY29yYXRvcikgPT4ge1xuICAgIGNvbnN0IGRlY29yYXRlZCA9IGRlY29yYXRvcih0YXJnZXQpO1xuICAgIGlmIChkZWNvcmF0ZWQpIHtcbiAgICAgIHRhcmdldCA9IGRlY29yYXRlZDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoXG4gIGRlY29yYXRvcnM6IENsYXNzRGVjb3JhdG9yW10sXG4gIHRhcmdldDogRnVuY3Rpb24sXG4pOiBGdW5jdGlvbjtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZShcbiAgZGVjb3JhdG9yczogTWVtYmVyRGVjb3JhdG9yW10sXG4gIHRhcmdldDogb2JqZWN0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuICBhdHRyaWJ1dGVzPzogUHJvcGVydHlEZXNjcmlwdG9yLFxuKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlKFxuICBkZWNvcmF0b3JzOiBEZWNvcmF0b3JbXSxcbiAgdGFyZ2V0OiBUYXJnZXQsXG4gIHByb3BlcnR5S2V5PzogUHJvcGVydHlLZXksXG4gIGF0dHJpYnV0ZXM/OiBQcm9wZXJ0eURlc2NyaXB0b3IsXG4pOiBGdW5jdGlvbiB8IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShkZWNvcmF0b3JzKSB8fCBkZWNvcmF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRlY29yYXRlUHJvcGVydHkoXG4gICAgICBkZWNvcmF0b3JzIGFzIE1lbWJlckRlY29yYXRvcltdLFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXksXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICk7XG4gIH1cblxuICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBkZWNvcmF0ZUNvbnN0cnVjdG9yKGRlY29yYXRvcnMgYXMgQ2xhc3NEZWNvcmF0b3JbXSwgdGFyZ2V0KTtcbiAgfVxuXG4gIHJldHVybjtcbn1cblxuZnVuY3Rpb24gZ2V0TWV0YWRhdGFNYXA8TWV0YWRhdGFWYWx1ZT4oXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWFwPE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBNZXRhZGF0YS5nZXQodGFyZ2V0KSAmJiBNZXRhZGF0YS5nZXQodGFyZ2V0KS5nZXQocHJvcGVydHlLZXkpO1xufVxuXG5mdW5jdGlvbiBvcmRpbmFyeUdldE93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICBtZXRhZGF0YUtleTogTWV0YWRhdGFLZXksXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWV0YWRhdGFWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgfVxuICBjb25zdCBtZXRhZGF0YU1hcCA9IGdldE1ldGFkYXRhTWFwPE1ldGFkYXRhVmFsdWU+KHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgJiYgbWV0YWRhdGFNYXAuZ2V0KG1ldGFkYXRhS2V5KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWV0YWRhdGFNYXA8TWV0YWRhdGFWYWx1ZT4oXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWFwPE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlPiB7XG4gIGNvbnN0IHRhcmdldE1ldGFkYXRhID1cbiAgICBNZXRhZGF0YS5nZXQodGFyZ2V0KSB8fFxuICAgIG5ldyBNYXA8UHJvcGVydHlLZXkgfCB1bmRlZmluZWQsIE1hcDxNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZT4+KCk7XG4gIE1ldGFkYXRhLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhKTtcbiAgY29uc3QgbWV0YWRhdGFNYXAgPVxuICAgIHRhcmdldE1ldGFkYXRhLmdldChwcm9wZXJ0eUtleSkgfHwgbmV3IE1hcDxNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZT4oKTtcbiAgdGFyZ2V0TWV0YWRhdGEuc2V0KHByb3BlcnR5S2V5LCBtZXRhZGF0YU1hcCk7XG4gIHJldHVybiBtZXRhZGF0YU1hcDtcbn1cblxuZnVuY3Rpb24gb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YTxNZXRhZGF0YVZhbHVlPihcbiAgbWV0YWRhdGFLZXk6IE1ldGFkYXRhS2V5LFxuICBtZXRhZGF0YVZhbHVlOiBNZXRhZGF0YVZhbHVlLFxuICB0YXJnZXQ6IFRhcmdldCxcbiAgcHJvcGVydHlLZXk/OiBQcm9wZXJ0eUtleSxcbik6IHZvaWQge1xuICBpZiAocHJvcGVydHlLZXkgJiYgIVsnc3RyaW5nJywgJ3N5bWJvbCddLmluY2x1ZGVzKHR5cGVvZiBwcm9wZXJ0eUtleSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gIH1cblxuICAoXG4gICAgZ2V0TWV0YWRhdGFNYXA8TWV0YWRhdGFWYWx1ZT4odGFyZ2V0LCBwcm9wZXJ0eUtleSkgfHxcbiAgICBjcmVhdGVNZXRhZGF0YU1hcDxNZXRhZGF0YVZhbHVlPih0YXJnZXQsIHByb3BlcnR5S2V5KVxuICApLnNldChtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG9yZGluYXJ5R2V0TWV0YWRhdGE8TWV0YWRhdGFWYWx1ZT4oXG4gIG1ldGFkYXRhS2V5OiBNZXRhZGF0YUtleSxcbiAgdGFyZ2V0OiBUYXJnZXQsXG4gIHByb3BlcnR5S2V5PzogUHJvcGVydHlLZXksXG4pOiBNZXRhZGF0YVZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGE8TWV0YWRhdGFWYWx1ZT4obWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpXG4gICAgPyBvcmRpbmFyeUdldE93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KVxuICAgIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbiAgICA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoXG4gICAgICAgIG1ldGFkYXRhS2V5LFxuICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSxcbiAgICAgICAgcHJvcGVydHlLZXksXG4gICAgICApXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhZGF0YTxNZXRhZGF0YVZhbHVlPihcbiAgbWV0YWRhdGFLZXk6IE1ldGFkYXRhS2V5LFxuICBtZXRhZGF0YVZhbHVlOiBNZXRhZGF0YVZhbHVlLFxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0OiBUYXJnZXQsIHByb3BlcnR5S2V5PzogUHJvcGVydHlLZXkpOiB2b2lkIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICAgICAgbWV0YWRhdGFLZXksXG4gICAgICBtZXRhZGF0YVZhbHVlLFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXksXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICBtZXRhZGF0YUtleTogTWV0YWRhdGFLZXksXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWV0YWRhdGFWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICBtZXRhZGF0YUtleTogTWV0YWRhdGFLZXksXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWV0YWRhdGFWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICAgIG1ldGFkYXRhS2V5LFxuICAgIHRhcmdldCxcbiAgICBwcm9wZXJ0eUtleSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKFxuICBtZXRhZGF0YUtleTogTWV0YWRhdGFLZXksXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIW9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTWV0YWRhdGEoXG4gIG1ldGFkYXRhS2V5OiBNZXRhZGF0YUtleSxcbiAgdGFyZ2V0OiBUYXJnZXQsXG4gIHByb3BlcnR5S2V5PzogUHJvcGVydHlLZXksXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YTxNZXRhZGF0YVZhbHVlPihcbiAgbWV0YWRhdGFLZXk6IE1ldGFkYXRhS2V5LFxuICBtZXRhZGF0YVZhbHVlOiBNZXRhZGF0YVZhbHVlLFxuICB0YXJnZXQ6IFRhcmdldCxcbiAgcHJvcGVydHlLZXk/OiBQcm9wZXJ0eUtleSxcbik6IHZvaWQge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbn1cblxuZXhwb3J0IGNvbnN0IFJlZmxlY3Rpb24gPSB7XG4gIGRlY29yYXRlLFxuICBkZWZpbmVNZXRhZGF0YSxcbiAgZ2V0TWV0YWRhdGEsXG4gIGdldE93bk1ldGFkYXRhLFxuICBoYXNNZXRhZGF0YSxcbiAgaGFzT3duTWV0YWRhdGEsXG4gIG1ldGFkYXRhLFxufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICBuYW1lc3BhY2UgUmVmbGVjdCB7XG4gICAgbGV0IGRlY29yYXRlOiB0eXBlb2YgUmVmbGVjdGlvbi5kZWNvcmF0ZTtcbiAgICBsZXQgZGVmaW5lTWV0YWRhdGE6IHR5cGVvZiBSZWZsZWN0aW9uLmRlZmluZU1ldGFkYXRhO1xuICAgIGxldCBnZXRNZXRhZGF0YTogdHlwZW9mIFJlZmxlY3Rpb24uZ2V0TWV0YWRhdGE7XG4gICAgbGV0IGdldE93bk1ldGFkYXRhOiB0eXBlb2YgUmVmbGVjdGlvbi5nZXRPd25NZXRhZGF0YTtcbiAgICBsZXQgaGFzT3duTWV0YWRhdGE6IHR5cGVvZiBSZWZsZWN0aW9uLmhhc093bk1ldGFkYXRhO1xuICAgIGxldCBoYXNNZXRhZGF0YTogdHlwZW9mIFJlZmxlY3Rpb24uaGFzTWV0YWRhdGE7XG4gICAgbGV0IG1ldGFkYXRhOiB0eXBlb2YgUmVmbGVjdGlvbi5tZXRhZGF0YTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFJlZmxlY3QsIFJlZmxlY3Rpb24pO1xuIiwgImltcG9ydCAnQGFicmFoYW0vcmVmbGVjdGlvbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmVmbGVjdG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90aW1lci5zZXJ2aWNlJztcbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IFNldE1ldGFkYXRhIH0gZnJvbSAnLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZURlY29yYXRvck9wdGlvbnMsIENyZWF0ZURlY29yYXRvcldpdGhUcmFuc2Zvcm1PcHRpb25zLCBSZWZsZWN0YWJsZURlY29yYXRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21JZCwgaXNFbXB0eSwgaXNPYmplY3QgfSBmcm9tICcuLi91dGlscyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZWZsZWN0b3JTZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ2V0PFRSZXN1bHQgPSB1bmtub3duLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihtZXRhZGF0YUtleTogVEtleSwgdGFyZ2V0OiBOZXdhYmxlIHwgRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGE8VFJlc3VsdD4obWV0YWRhdGFLZXksIHRhcmdldCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbDxUUmVzdWx0IGV4dGVuZHMgdW5rbm93bltdID0gdW5rbm93bltdLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihcbiAgICAgICAgbWV0YWRhdGFLZXk6IFRLZXksXG4gICAgICAgIHRhcmdldHM6IChOZXdhYmxlIHwgRnVuY3Rpb24pW10sXG4gICAgKSB7XG4gICAgICAgIHJldHVybiA8VFJlc3VsdD4odGFyZ2V0cyB8fCBbXSkubWFwKCh0YXJnZXQpID0+IHRoaXMuZ2V0KG1ldGFkYXRhS2V5LCB0YXJnZXQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsQW5kTWVyZ2U8VFJlc3VsdCBleHRlbmRzIHVua25vd25bXSA9IHVua25vd25bXSwgVEtleSBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCA9IHN0cmluZz4oXG4gICAgICAgIG1ldGFkYXRhS2V5OiBUS2V5LFxuICAgICAgICB0YXJnZXRzOiAoTmV3YWJsZSB8IEZ1bmN0aW9uKVtdLFxuICAgICkge1xuICAgICAgICBjb25zdCBtZXRhZGF0YUNvbGxlY3Rpb24gPSB0aGlzLmdldEFsbDxUUmVzdWx0LCBUS2V5PihtZXRhZGF0YUtleSwgdGFyZ2V0cykuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmIChpc0VtcHR5KG1ldGFkYXRhQ29sbGVjdGlvbikpIHJldHVybiA8VFJlc3VsdD5tZXRhZGF0YUNvbGxlY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIDxUUmVzdWx0Pm1ldGFkYXRhQ29sbGVjdGlvbi5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGEpICYmIGlzT2JqZWN0KGIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFthLCBiXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEFuZE92ZXJyaWRlPFRSZXN1bHQgPSB1bmtub3duLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihtZXRhZGF0YUtleTogVEtleSwgdGFyZ2V0czogKE5ld2FibGUgfCBGdW5jdGlvbilbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldChtZXRhZGF0YUtleSwgdGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIDxUUmVzdWx0PnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRGVjb3JhdG9yPFRQYXJhbT4ob3B0aW9ucz86IENyZWF0ZURlY29yYXRvck9wdGlvbnM8VFBhcmFtPik6IFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbT47XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+KFxuICAgICAgICBvcHRpb25zOiBDcmVhdGVEZWNvcmF0b3JXaXRoVHJhbnNmb3JtT3B0aW9uczxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4sXG4gICAgKTogUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+O1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkID0gVFBhcmFtPihcbiAgICAgICAgb3B0aW9uczogQ3JlYXRlRGVjb3JhdG9yT3B0aW9uczxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4gPSB7fSxcbiAgICApOiBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YUtleSA9IG9wdGlvbnMua2V5ID8/IGdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICAgICAgY29uc3QgZGVjb3JhdG9yRm4gPSAobWV0YWRhdGFWYWx1ZTogVFBhcmFtKSA9PiAodGFyZ2V0OiBvYmplY3QgfCBGdW5jdGlvbiwga2V5Pzogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudHJhbnNmb3JtID8gb3B0aW9ucy50cmFuc2Zvcm0obWV0YWRhdGFWYWx1ZSkgOiBtZXRhZGF0YVZhbHVlO1xuICAgICAgICAgICAgU2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHZhbHVlID8/IHt9KSh0YXJnZXQsIGtleSEsIGRlc2NyaXB0b3IpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRlY29yYXRvckZuLktFWSA9IG1ldGFkYXRhS2V5O1xuICAgICAgICByZXR1cm4gZGVjb3JhdG9yRm4gYXMgUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+O1xuICAgIH1cbn1cbiIsICJpbXBvcnQgJ0BhYnJhaGFtL3JlZmxlY3Rpb24nO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXJhbXMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL3JwYyc7XG5leHBvcnQgKiBmcm9tICcuL3RpbWVycyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vYXBwbHktZGVjb3JhdG9yLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlLXBhcmFtLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtcnBjLWRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2ZvcndhcmQtcmVmLnV0aWwnO1xuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZXI8VCBleHRlbmRzIE5ld2FibGU+KG9wdGlvbnM/OiBDb250cm9sbGVyT3B0aW9ucykge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlciwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEdsb2JhbDxUIGV4dGVuZHMgTmV3YWJsZT4oKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuR2xvYmFsTW9kdWxlLCB0cnVlLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEluamVjdDxUID0gdW5rbm93bj4oa2V5PzogSW5qZWN0aW9uVG9rZW48VD4pIHtcbiAgICByZXR1cm4gPFByb3BlcnR5RGVjb3JhdG9yICYgUGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHBhcmFtSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChrZXkpICYmICF2YWxpZGF0ZUluamVjdGlvblRva2VuKGtleSkudmFsaWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEluamVjdGlvblRva2VuU3BlY2lmaWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRva2VuID0ga2V5ID8/IFJlZmxlY3QuZ2V0TWV0YWRhdGE8SW5qZWN0aW9uVG9rZW4+KCdkZXNpZ246dHlwZScsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkluamVjdGlvblRva2VuTm90Rm91bmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5qZWN0KHRva2VuKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBwYXJhbUluZGV4KTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0YWJsZTxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IEluamVjdGFibGVPcHRpb25zKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkluamVjdGFibGUsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YShvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIE1vZHVsZTxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IE1vZHVsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVNb2R1bGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IhKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCB2YWx1ZSwgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZSgpKHRhcmdldCk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBvcHRpb25hbCB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPcHRpb25hbCgpIHtcbiAgICByZXR1cm4gPFByb3BlcnR5RGVjb3JhdG9yICYgUGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHBhcmFtSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKCkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgcGFyYW1JbmRleCk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDdXN0b21EZWNvcmF0b3IgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTZXRNZXRhZGF0YTxLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBWID0gdW5rbm93bj4oa2V5OiBLLCB2YWx1ZTogVikge1xuICAgIGNvbnN0IGRlY29yYXRvckZhY3RvcnkgPSA8Q3VzdG9tRGVjb3JhdG9yPigodGFyZ2V0OiBvYmplY3QsIF9tZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoa2V5LCB2YWx1ZSwgZGVzY3JpcHRvci52YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKGtleSwgdmFsdWUsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG4gICAgZGVjb3JhdG9yRmFjdG9yeS5LRVkgPSBrZXk7XG4gICAgcmV0dXJuIGRlY29yYXRvckZhY3Rvcnk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIENhdGNoPFQgZXh0ZW5kcyBOZXdhYmxlPiguLi5leGNlcHRpb25zOiB1bmtub3duW10pIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IGV4Y2VwdGlvbnMuZmlsdGVyKChleGNlcHRpb24sIGluZGV4KSA9PiBleGNlcHRpb25zLmluZGV4T2YoZXhjZXB0aW9uKSAhPT0gaW5kZXgpO1xuICAgICAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5DYXRjaCwgZXhjZXB0aW9ucywgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlRXJyb3JGaWx0ZXIgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGaWx0ZXJzOiAoTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlRXJyb3JGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRGaWx0ZXJzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kRmlsdGVycyA9XG4gICAgICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBpZiAoIWlzTmlsKG1ldGhvZEZpbHRlcnMuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXJzLmluY2x1ZGVzKGZpbHRlcikpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRXJyb3JGaWx0ZXJEZXRlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIFsuLi52YWxpZGF0ZWRGaWx0ZXJzLCAuLi5tZXRob2RGaWx0ZXJzXSwgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzRmlsdGVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxFcnJvckZpbHRlcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgaWYgKCFpc05pbChjbGFzc0ZpbHRlcnMuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXJzLmluY2x1ZGVzKGZpbHRlcikpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIFsuLi52YWxpZGF0ZWRGaWx0ZXJzLCAuLi5jbGFzc0ZpbHRlcnNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCAnQGFicmFoYW0vcmVmbGVjdGlvbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJvbGxlcic7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL21vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL21vZHVsZS10cmVlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbXVsdGlwbGF5ZXInO1xuLy8gQXBwXG5leHBvcnQgKiBmcm9tICcuL2FwcC1idWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlLWFwcCc7XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRU5BQkxFX1NIVVRET1dOX0hPT0tTLCBHTE9CQUxfRVJST1JfRklMVEVSUywgR0xPQkFMX0dVQVJEUywgR0xPQkFMX0lOVEVSQ0VQVE9SUywgR0xPQkFMX1BJUEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTW9kdWxlIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgQ29udHJvbGxlckV2ZW50SGFuZGxlciwgQ29udHJvbGxlclJQQ0hhbmRsZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFLCBUSU1FUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBUcmVlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBSdW50aW1lIHtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJFdmVudEhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRIYW5kbGVyOiBDb250cm9sbGVyRXZlbnRIYW5kbGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlclJQQ0hhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcnBjSGFuZGxlcjogQ29udHJvbGxlclJQQ0hhbmRsZXI7XG4gICAgQGluamVjdChHTE9CQUxfR1VBUkRTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW107XG4gICAgQGluamVjdChHTE9CQUxfSU5URVJDRVBUT1JTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW107XG4gICAgQGluamVjdChHTE9CQUxfUElQRVMpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXTtcbiAgICBAaW5qZWN0KEdMT0JBTF9FUlJPUl9GSUxURVJTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW107XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoRU5BQkxFX1NIVVRET1dOX0hPT0tTKSBAb3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZVNodXRkb3duSG9va3M6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgYXN5bmMgYm9vdChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgbW9kdWxlLCBjb250cm9sbGVycyBhbmQgcHJvdmlkZXJzLlxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5pbnN0YW5jZSA9IG1vZHVsZS5jb250YWluZXIuZ2V0PHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT4obW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmKTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChjb250cm9sbGVyKSA9PiAoY29udHJvbGxlci5pbnN0YW5jZSA9IG1vZHVsZS5jb250YWluZXIuZ2V0PHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT4oY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZikpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10uZm9yRWFjaCgoW3Rva2VuXSkgPT5cbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmdldDxhbnk+KHRva2VuKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExvZyBtb2R1bGUgbG9hZGVkLlxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fk1vZHVsZSB+bGJ+JHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gfmx3fmxvYWRlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kKG1vZHVsZSwgJ29uTW9kdWxlSW5pdCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uTW9kdWxlSW5pdCcpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1bkxpZmVjeWNsZU1ldGhvZHMocmVzb2x2ZWRUcmVlLCAnb25BcHBCb290c3RyYXAnKTtcblxuICAgICAgICAvLyBSZWdpc3RlciBldmVudCBhbmQgcnBjIGxpc3RlbmVycy5cbiAgICAgICAgcmVzb2x2ZWRUcmVlLnRyYXZlcnNlKChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBub2RlLnZhbHVlO1xuICAgICAgICAgICAgbW9kdWxlLmNvbnRyb2xsZXJzLmZvckVhY2goKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVGltZXJzKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYH5sd35Db250cm9sbGVyIH5sY34ke2NvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gfmx3fnRpbWVycyBhbmQgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2h1dGRvd24ocmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4pIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2h1dGRvd25Ib29rcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uTW9kdWxlRGVzdHJveScpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ2JlZm9yZUFwcFNodXRkb3duJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZXJTZXJ2aWNlID0gY29udHJvbGxlci5vd25lci5jb250YWluZXIuZ2V0PFRpbWVyU2VydmljZT4oVElNRVJfU0VSVklDRSk7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXN0cm95IGFsbCB0aW1lcnMuXG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmV2ZXJ5dGlja3MuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmludGVydmFscy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UudGltZW91dHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyb25zLmZvckVhY2goKGNyb24pID0+IGNyb24uc3RvcCgpKTtcblxuICAgICAgICAgICAgICAgIC8vIERlc3Ryb3kgYWxsIHNjcmlwdCBldmVudCBoYW5kbGVycy5cbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLmV2ZW50SGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIucnBjSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIC8vIERlc3Ryb3kgYWxsIHRpbWVycy5cbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UuZXZlcnl0aWNrcy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UuaW50ZXJ2YWxzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLnRpbWVyU2VydmljZS50aW1lb3V0cy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UuY3JvbkpvYnMuZm9yRWFjaCgoY3JvbkpvYikgPT4gY3JvbkpvYi5zdG9wKCkpO1xuXG4gICAgICAgIC8vIC8vIERlc3Ryb3kgYWxsIHNjcmlwdCBldmVudCBoYW5kbGVycy5cbiAgICAgICAgLy8gdGhpcy5ldmVudFNlcnZpY2UuJGxvY2FsSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLmV2ZW50U2VydmljZS4kaW50ZXJuYWxIYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiBoYW5kbGVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMuZXZlbnRTZXJ2aWNlLiRyZW1vdGVIYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiBoYW5kbGVyLmRlc3Ryb3koKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2h1dGRvd25Ib29rcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uQXBwU2h1dGRvd24nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJMaXN0ZW5lcnMoY29udHJvbGxlcjogQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBjb250cm9sbGVyLm93bmVyO1xuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3VhcmRzID0gWy4uLnRoaXMuZ2xvYmFsR3VhcmRzLCAuLi5tb2R1bGUubWV0YWRhdGEuZ3VhcmRzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmd1YXJkcywgLi4uZXZlbnQuZ3VhcmRzXTtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmV2ZW50LmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBwaXBlcyA9IFsuLi50aGlzLmdsb2JhbFBpcGVzLCAuLi5tb2R1bGUubWV0YWRhdGEucGlwZXMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEucGlwZXMsIC4uLmV2ZW50LnBpcGVzXTtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBlZEVycm9yRmlsdGVycyA9IHRoaXMubWFwRXJyb3JGaWx0ZXJzKFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuZXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuZXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLmV2ZW50LmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5ldmVudEhhbmRsZXIucmVnaXN0ZXJFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQpO1xuICAgICAgICAgICAgY29udHJvbGxlci5ldmVudEhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEucnBjcy5mb3JFYWNoKGFzeW5jIChycGMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IFsuLi50aGlzLmdsb2JhbEd1YXJkcywgLi4ubW9kdWxlLm1ldGFkYXRhLmd1YXJkcywgLi4uY29udHJvbGxlci5tZXRhZGF0YS5ndWFyZHMsIC4uLnJwYy5ndWFyZHNdO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JzID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2xvYmFsSW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLm1vZHVsZS5tZXRhZGF0YS5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4uY29udHJvbGxlci5tZXRhZGF0YS5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4ucnBjLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBwaXBlcyA9IFsuLi50aGlzLmdsb2JhbFBpcGVzLCAuLi5tb2R1bGUubWV0YWRhdGEucGlwZXMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEucGlwZXMsIC4uLnJwYy5waXBlc107XG4gICAgICAgICAgICBjb25zdCBtYXBwZWRFcnJvckZpbHRlcnMgPSB0aGlzLm1hcEVycm9yRmlsdGVycyhbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxFcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5ycGMuZXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCB0aGlzLnJwY0hhbmRsZXIucmVnaXN0ZXJSUEMoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIHJwYyk7XG4gICAgICAgICAgICBjb250cm9sbGVyLnJwY0hhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclRpbWVycyhjb250cm9sbGVyOiBDb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyU2VydmljZSA9IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldDxUaW1lclNlcnZpY2U+KFRJTUVSX1NFUlZJQ0UpO1xuXG4gICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEudGltZXJzLmZvckVhY2goKHRpbWVyKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZXIudHlwZSA9PT0gJ2Nyb24nKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUNyb25Kb2IoY29udHJvbGxlci5pbnN0YW5jZVt0aW1lci5tZXRob2RdIS5iaW5kKGNvbnRyb2xsZXIuaW5zdGFuY2UpLCB0aW1lci5vcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZXIudHlwZSA9PT0gJ2V2ZXJ5dGljaycpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlRXZlcnlUaWNrKGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIubmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICdpbnRlcnZhbCcpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlSW50ZXJ2YWwoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICAgICAgdGltZXIub3B0aW9ucy50aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICB0aW1lci5uYW1lLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICd0aW1lb3V0Jykge1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcmVhdGVUaW1lb3V0KGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIub3B0aW9ucy50aW1lb3V0LCB0aW1lci5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBFcnJvckZpbHRlcnMoZXJyb3JGaWx0ZXJzOiAoTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcilbXSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJNYXA6IFt1bmtub3duIHwgJ01BTkdPX0FOWV9FUlJPUicsIE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXJdW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBlcnJvckZpbHRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8YW55W10+KENvcmVNZXRhZGF0YUtleS5DYXRjaCwgZmlsdGVyKSA/PyBbXTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goJ01BTkdPX0FOWV9FUlJPUicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmlsKGZpbHRlck1hcC5maW5kKChmaWx0ZXJFcnJvcikgPT4gZmlsdGVyRXJyb3JbMF0gPT09IGVycm9yKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gbWFwIGVycm9yIGZpbHRlcnMuJyk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXJyb3JBbHJlYWR5SGFuZGxlZEJ5RmlsdGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyTWFwLnB1c2goW2Vycm9yLCBmaWx0ZXJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWx0ZXJNYXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5MaWZlY3ljbGVNZXRob2RzKFxuICAgICAgICByZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPixcbiAgICAgICAgbWV0aG9kOiAnb25Nb2R1bGVJbml0JyB8ICdvbk1vZHVsZURlc3Ryb3knIHwgJ29uQXBwQm9vdHN0cmFwJyB8ICdiZWZvcmVBcHBTaHV0ZG93bicgfCAnb25BcHBTaHV0ZG93bicsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4gYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2Qobm9kZS52YWx1ZSwgbWV0aG9kKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5MaWZlY3ljbGVNZXRob2QoXG4gICAgICAgIG1vZHVsZTogTW9kdWxlLFxuICAgICAgICBtZXRob2Q6ICdvbk1vZHVsZUluaXQnIHwgJ29uTW9kdWxlRGVzdHJveScgfCAnb25BcHBCb290c3RyYXAnIHwgJ2JlZm9yZUFwcFNodXRkb3duJyB8ICdvbkFwcFNodXRkb3duJyxcbiAgICApIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMubWFwKGFzeW5jIChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChjb250cm9sbGVyLmluc3RhbmNlKSB8fCBpc05pbChjb250cm9sbGVyLmluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbGxlci5pbnN0YW5jZVttZXRob2RdISgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgWy4uLm1vZHVsZS5tZXRhZGF0YS5pbnRlcm5hbFByb3ZpZGVycywgLi4ubW9kdWxlLm1ldGFkYXRhLmV4dGVybmFsUHJvdmlkZXJzXS5tYXAoYXN5bmMgKFt0b2tlbl0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm92aWRlckluc3RhbmNlID0gPHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT5tb2R1bGUuY29udGFpbmVyLmdldCh0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChwcm92aWRlckluc3RhbmNlKSB8fCBpc05pbChwcm92aWRlckluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgICAgICAgICAgYXdhaXQgcHJvdmlkZXJJbnN0YW5jZVttZXRob2RdISgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGlmICghaXNPYmplY3QobW9kdWxlLmluc3RhbmNlKSB8fCBpc05pbChtb2R1bGUuaW5zdGFuY2VbbWV0aG9kXSkpIHJldHVybjtcbiAgICAgICAgYXdhaXQgbW9kdWxlLmluc3RhbmNlW21ldGhvZF0hKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTG9nZ2VyU2VydmljZSwgUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ09OVEFJTkVSX09QVElPTlMsIEdMT0JBTF9BUFBfQ09OVEFJTkVSIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlQ29udGFpbmVyIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlLCBvcHRpb25hbCwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFLCBNT0RVTEVfQ09OVEFJTkVSLCBUSU1FUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgVHJlZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFRpbWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZHVsZURlcGVuZGVuY3lCaW5kZXIge1xuICAgIEBpbmplY3QoR0xPQkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBvcHRpb25hbCgpIEBpbmplY3QoQ09OVEFJTkVSX09QVElPTlMpIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyT3B0aW9ucz86IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucztcblxuICAgIHB1YmxpYyBhc3luYyBiaW5kKHJlc29sdmVkVHJlZTogVHJlZTxNb2R1bGU+KSB7XG4gICAgICAgIGF3YWl0IHJlc29sdmVkVHJlZS5hc3luY1RyYXZlcnNlKGFzeW5jIChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBub2RlLnZhbHVlO1xuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lciA9IG5ldyBNb2R1bGVDb250YWluZXIobW9kdWxlLm1ldGFkYXRhLmNvbnRhaW5lciA/PyB0aGlzLmNvbnRhaW5lck9wdGlvbnMpO1xuICAgICAgICAgICAgLy8gQXR0YWNoIHRoZSBnbG9iYWwgY29udGFpbmVyIHRvIHRoZSBtb2R1bGUgY29udGFpbmVyLCBzbyBpdCBjYW4gYmUgdXNlZCB0byByZXNvbHZlIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIucGFyZW50ID0gdGhpcy5nbG9iYWxBcHBDb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKG1vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kdWxlIGlzIGdsb2JhbCwgd2Ugd2FudCB0byBiaW5kIGl0IHRvIHRoZSBnbG9iYWwgY29udGFpbmVyLlxuICAgICAgICAgICAgaWYgKG1vZHVsZS5tZXRhZGF0YS5nbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBCaW5kIGV4dGVybmFsIHByb3ZpZGVycyB0byB0aGUgZ2xvYmFsIGNvbnRhaW5lciwgc28gdGhleSBjYW4gYmUgaW5qZWN0ZWQgaW4gb3RoZXIgbW9kdWxlcy5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBwcm92aWRlcl0gb2YgbW9kdWxlLm1ldGFkYXRhLmV4dGVybmFsUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZFByb3ZpZGVyKHByb3ZpZGVyLCB0aGlzLmdsb2JhbEFwcENvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbW9kdWxlIGlzIG5vdCBnbG9iYWwsIHdlIHdhbnQgdG8gYmluZCBpdCB0byBpdHMgb3duIGNvbnRhaW5lci5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFt0b2tlbiwgcHJvdmlkZXJdIG9mIG1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgbW9kdWxlLmNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5wYXJlbnQ/LmNvbnRhaW5lci5iaW5kKHRva2VuKS50b0R5bmFtaWNWYWx1ZSgoKSA9PiBtb2R1bGUuY29udGFpbmVyLmdldCh0b2tlbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGltcG9ydE1vZHVsZSBvZiBtb2R1bGUucmVwZXRpdGl2ZUltcG9ydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9rZW5dIG9mIGltcG9ydE1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKHRva2VuKS50b0R5bmFtaWNWYWx1ZSgoKSA9PiBpbXBvcnRNb2R1bGUuY29udGFpbmVyLmdldCh0b2tlbikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIGludGVybmFsIHByb3ZpZGVycy5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW18sIHByb3ZpZGVyXSBvZiBtb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgbW9kdWxlLmNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJpbmQgY29udGFpbmVyIHRvIGl0c2VsZiBzbyBpdCBjYW4gYmUgaW5qZWN0ZWQuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoTU9EVUxFX0NPTlRBSU5FUikudG9Db25zdGFudFZhbHVlKG1vZHVsZS5jb250YWluZXIpO1xuXG4gICAgICAgICAgICAvLyBCaW5kIGNvbnRyb2xsZXJzIHRvIHRoZSBjb250YWluZXIuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNsYXNzUmVmIG9mIG1vZHVsZS5tZXRhZGF0YS5jb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIuYmluZChjbGFzc1JlZikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIHNlcnZpY2VzIHRvIHRoZSBjb250YWluZXIuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoVElNRVJfU0VSVklDRSkudG8oVGltZXJTZXJ2aWNlKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coXG4gICAgICAgICAgICAgICAgYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35kZXBlbmRlbmNpZXMgYmluZGVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRQcm92aWRlcihwcm92aWRlcjogRXhjbHVkZTxQcm92aWRlciwgTmV3YWJsZT4sIGNvbnRhaW5lcjogQ29udGFpbmVyKSB7XG4gICAgICAgIGlmICgndXNlVmFsdWUnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b0NvbnN0YW50VmFsdWUocHJvdmlkZXIudXNlVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VGYWN0b3J5JyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvRHluYW1pY1ZhbHVlKChjdHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBzID1cbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuaW5qZWN0Py5tYXAoKGRlcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGRlcCkgJiYgJ3Rva2VuJyBpbiBkZXAgJiYgJ29wdGlvbmFsJyBpbiBkZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmNvbnRhaW5lci5nZXQoZGVwLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcC5vcHRpb25hbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVzb2x2ZSBhIGRlcGVuZGVuY3kuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmNvbnRhaW5lci5nZXQoZGVwKTtcbiAgICAgICAgICAgICAgICAgICAgfSkgPz8gW107XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLnVzZUZhY3RvcnkoLi4uZGVwcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3RyYW5zaWVudCcpIGJpbmRpbmcuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICdyZXF1ZXN0JykgYmluZGluZy5pblJlcXVlc3RTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBiaW5kaW5nLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlQ2xhc3MnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gY29udGFpbmVyLmJpbmQocHJvdmlkZXIucHJvdmlkZSkudG8ocHJvdmlkZXIudXNlQ2xhc3MpO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVyLnNjb3BlID09PSAndHJhbnNpZW50JykgYmluZGluZy5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgICAgICBlbHNlIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3JlcXVlc3QnKSBiaW5kaW5nLmluUmVxdWVzdFNjb3BlKCk7XG4gICAgICAgICAgICBlbHNlIGJpbmRpbmcuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VFeGlzdGluZycgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvU2VydmljZShwcm92aWRlci51c2VFeGlzdGluZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEeW5hbWljTW9kdWxlLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBDb250cm9sbGVyLCBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuLi9tb2R1bGUnO1xuaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IFRyZWUsIFRyZWVOb2RlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVUcmVlU2Nhbm5lciB7XG4gICAgQGluamVjdChNb2R1bGVNZXRhZGF0YVJlYWRlcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVNZXRhZGF0YVJlYWRlcjogTW9kdWxlTWV0YWRhdGFSZWFkZXI7XG4gICAgQGluamVjdChDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlck1ldGFkYXRhUmVhZGVyOiBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGFzeW5jIHNjYW4oY2xhc3NSZWY6IE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPikge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAvLyBSZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgICBjb25zdCBtb2R1bGVNZXRhZGF0YSA9IGF3YWl0IHRoaXMubW9kdWxlTWV0YWRhdGFSZWFkZXIucmVhZChjbGFzc1JlZik7XG4gICAgICAgIC8vIENyZWF0ZSBtb2R1bGUgaW5zdGFuY2UgYW5kIHNldCBtZXRhZGF0YSB0byBpdFxuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgTW9kdWxlKCk7XG4gICAgICAgIG1vZHVsZS5tZXRhZGF0YSA9IG1vZHVsZU1ldGFkYXRhO1xuICAgICAgICAvLyBMb2cgbW9kdWxlIGluZm9cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fk1vZHVsZSB+bGJ+JHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gfmx3fnNjYW5uZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnMgaW4gbW9kdWxlXG4gICAgICAgIGF3YWl0IHRoaXMuc2NhbkNvbnRyb2xsZXJzKG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnMgaW4gbW9kdWxlXG4gICAgICAgIGNvbnN0IG1vZHVsZVRyZWUgPSBuZXcgVHJlZShtb2R1bGUpO1xuICAgICAgICBjb25zdCBzY2FubmVkTW9kdWxlcyA9IG5ldyBNYXA8TmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+LCBNb2R1bGU+KCk7XG4gICAgICAgIHNjYW5uZWRNb2R1bGVzLnNldChjbGFzc1JlZiwgbW9kdWxlKTtcbiAgICAgICAgLy8gU2NhbiBpbXBvcnRlZCBtb2R1bGVzXG4gICAgICAgIGZvciAoY29uc3QgaW1wb3J0ZWRNb2R1bGUgb2YgbW9kdWxlTWV0YWRhdGEuaW1wb3J0cykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zY2FuTW9kdWxlcyhtb2R1bGVUcmVlLnJvb3QsIGltcG9ydGVkTW9kdWxlLCBzY2FubmVkTW9kdWxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZVRyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzY2FuTW9kdWxlcyhcbiAgICAgICAgcGFyZW50Tm9kZTogVHJlZU5vZGU8TW9kdWxlPixcbiAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPixcbiAgICAgICAgc2Nhbm5lZE1vZHVsZXMgPSBuZXcgTWFwPE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPiwgTW9kdWxlPigpLFxuICAgICkge1xuICAgICAgICAvLyBDaGVjayBpZiBtb2R1bGUgaXMgYWxyZWFkeSBpbXBvcnRlZFxuICAgICAgICBjb25zdCBzY2FubmVkTW9kdWxlID0gc2Nhbm5lZE1vZHVsZXMuZ2V0KGNsYXNzUmVmKTtcbiAgICAgICAgaWYgKCFpc05pbChzY2FubmVkTW9kdWxlKSkge1xuICAgICAgICAgICAgcGFyZW50Tm9kZS52YWx1ZS5yZXBldGl0aXZlSW1wb3J0cy5hZGQoc2Nhbm5lZE1vZHVsZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIFJlYWQgbW9kdWxlIG1ldGFkYXRhXG4gICAgICAgIGNvbnN0IG1vZHVsZU1ldGFkYXRhID0gYXdhaXQgdGhpcy5tb2R1bGVNZXRhZGF0YVJlYWRlci5yZWFkKGNsYXNzUmVmKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5XG4gICAgICAgIHRoaXMuY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kocGFyZW50Tm9kZS52YWx1ZS5tZXRhZGF0YSwgbW9kdWxlTWV0YWRhdGEpO1xuICAgICAgICAvLyBDcmVhdGUgbW9kdWxlIGluc3RhbmNlXG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBNb2R1bGUoKTtcbiAgICAgICAgbW9kdWxlLm1ldGFkYXRhID0gbW9kdWxlTWV0YWRhdGE7XG4gICAgICAgIG1vZHVsZS5wYXJlbnQgPSBwYXJlbnROb2RlLnZhbHVlO1xuICAgICAgICAvLyBMb2cgbW9kdWxlIGluZm9cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fk1vZHVsZSB+bGJ+JHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gfmx3fnNjYW5uZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnMgaW4gbW9kdWxlXG4gICAgICAgIGF3YWl0IHRoaXMuc2NhbkNvbnRyb2xsZXJzKG1vZHVsZSk7XG4gICAgICAgIC8vIEFkZCBtb2R1bGUgdG8gdHJlZVxuICAgICAgICBjb25zdCB0cmVlTm9kZSA9IG5ldyBUcmVlTm9kZShtb2R1bGUpO1xuICAgICAgICBwYXJlbnROb2RlLmFkZENoaWxkKHRyZWVOb2RlKTtcbiAgICAgICAgLy8gQWRkIG1vZHVsZSB0byBpbXBvcnRlZCBtb2R1bGVzIHNldCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHNjYW5uaW5nXG4gICAgICAgIHNjYW5uZWRNb2R1bGVzLnNldChjbGFzc1JlZiwgbW9kdWxlKTtcbiAgICAgICAgLy8gU2NhbiBpbXBvcnRlZCBtb2R1bGVzIHJlY3Vyc2l2ZWx5XG4gICAgICAgIGZvciAoY29uc3QgaW1wb3J0TW9kdWxlIG9mIG1vZHVsZU1ldGFkYXRhLmltcG9ydHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2Nhbk1vZHVsZXModHJlZU5vZGUsIGltcG9ydE1vZHVsZSwgc2Nhbm5lZE1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzY2FuQ29udHJvbGxlcnMobW9kdWxlOiBNb2R1bGUpIHtcbiAgICAgICAgLy8gU2NhbiBjb250cm9sbGVyc1xuICAgICAgICBmb3IgKGNvbnN0IGNsYXNzUmVmIG9mIG1vZHVsZS5tZXRhZGF0YS5jb250cm9sbGVycykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXJNZXRhZGF0YSA9IGF3YWl0IHRoaXMuY29udHJvbGxlck1ldGFkYXRhUmVhZGVyLnJlYWQoY2xhc3NSZWYpO1xuICAgICAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyKCk7XG4gICAgICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhID0gY29udHJvbGxlck1ldGFkYXRhO1xuICAgICAgICAgICAgY29udHJvbGxlci5vd25lciA9IG1vZHVsZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5wdXNoKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGB+bHd+Q29udHJvbGxlciB+bGN+JHtjbGFzc1JlZi5uYW1lfSB+bHd+c2Nhbm5lZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kocGFyZW50TWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhLCBtb2R1bGVNZXRhZGF0YTogTW9kdWxlTWV0YWRhdGEpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcGFyZW50IG1vZHVsZSBpcyBpbXBvcnRlZCBpbiBtb2R1bGVcbiAgICAgICAgaWYgKG1vZHVsZU1ldGFkYXRhLmltcG9ydHMuaW5jbHVkZXMocGFyZW50TWV0YWRhdGEuY2xhc3NSZWYpKSB7XG4gICAgICAgICAgICAvLyB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNjYW5uaW5nIHRoZSBtb2R1bGUgdHJlZS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQ2lyY3VsYXJEZXBlbmRlbmN5RGV0ZWN0ZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBTY3JpcHRFdmVudCBpbXBsZW1lbnRzIFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgICApIHt9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKHRoaXMuZXZlbnROYW1lLCB0aGlzLmxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFdmVudEVtbWl0ZXIsIFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QU2NyaXB0RXZlbnQgfSBmcm9tICcuL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlcic7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBFdmVudEVtbWl0ZXIgaW1wbGVtZW50cyBFdmVudEVtbWl0ZXIge1xuICAgIGVtaXQoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5jYWxsKGV2ZW50TmFtZSwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFJhZ2VNUFNjcmlwdEV2ZW50KGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIG9uY2UoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBjb25zdCBvbmNlV3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgICAgIGxpc3RlbmVyKC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFJhZ2VNUFNjcmlwdEV2ZW50KGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgIH1cblxuICAgIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IE11bHRpcGxheWVyVGltZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJhZ2VNUFRpbWVyIGltcGxlbWVudHMgTXVsdGlwbGF5ZXJUaW1lciB7XG4gICAgcHVibGljIGxhc3RUaWNrID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBpbnRlcnZhbDogbnVtYmVyID0gMCxcbiAgICAgICAgcHVibGljIG9uY2U6IGJvb2xlYW4sXG4gICAgICAgIHB1YmxpYyBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgICAgIHByaXZhdGUgY2xlYXJUaW1lcjogRnVuY3Rpb24sXG4gICAgKSB7fVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJUaW1lciwgTXVsdGlwbGF5ZXJUaW1lcnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJhZ2VNUFRpbWVyIH0gZnJvbSAnLi9yYWdlbXAtdGltZXInO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QVGltZXJzIGltcGxlbWVudHMgTXVsdGlwbGF5ZXJUaW1lcnMge1xuICAgIHByaXZhdGUgdGltZXJJbmNyZW1lbnRlcjogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHRpbWVycyA9IG5ldyBNYXA8bnVtYmVyLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgZXZlcnlUaWNrSGFuZGxlcnMgPSBuZXcgTWFwPG51bWJlciwgeyBjYWxsYmFjazogRnVuY3Rpb247IGJvdW5kOiBGdW5jdGlvbiB9PigpO1xuICAgIHByaXZhdGUgaXNFdmVyeVRpY2tSdW5uaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBldmVyeVRpY2tNYWluSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgZ2V0IGFsbCgpOiBNdWx0aXBsYXllclRpbWVyW10ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMudGltZXJzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHdhcm5pbmdUaHJlc2hvbGQoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSB0aGlzIGZlYXR1cmVcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB3YXJuaW5nVGhyZXNob2xkKF92YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KCk6IG51bWJlciB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudChfdmFsdWU6IG51bWJlcikge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIHRoaXMgZmVhdHVyZVxuICAgIH1cblxuICAgIGdldEJ5SUQoaWQ6IG51bWJlcik6IE11bHRpcGxheWVyVGltZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLnRpbWVycy5nZXQoaWQpO1xuICAgICAgICByZXR1cm4gdGltZXIgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRpbWVyKFxuICAgICAgICBjcmVhdGVUaW1lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBudW1iZXIsXG4gICAgICAgIGNsZWFyOiAoaWQ6IG51bWJlcikgPT4gdm9pZCxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uLFxuICAgICAgICBpbnRlcnZhbDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgICAgICBvbmNlOiBib29sZWFuLFxuICAgICAgICAuLi5hcmdzOiB1bmtub3duW11cbiAgICApIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuICAgICAgICBjb25zdCB0aW1lcklkID0gdHlwZW9mIGludGVydmFsID09PSAnbnVtYmVyJyA/IGNyZWF0ZVRpbWVyKGNhbGxiYWNrQmluZCwgaW50ZXJ2YWwpIDogY3JlYXRlVGltZXIoY2FsbGJhY2tCaW5kKTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcblxuICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgaW50ZXJ2YWwgPz8gMCwgb25jZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhcih0aW1lcklkKTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgIH1cblxuICAgIHNldEludGVydmFsKGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZTogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGltZXIoXG4gICAgICAgICAgICAoY2I6IEZ1bmN0aW9uLCBpbnRlcnZhbDogbnVtYmVyKSA9PiBzZXRJbnRlcnZhbChjYiBhcyAoKSA9PiB2b2lkLCBpbnRlcnZhbCkgYXMgdW5rbm93biBhcyBudW1iZXIsXG4gICAgICAgICAgICAoaWQ6IG51bWJlcikgPT4gY2xlYXJJbnRlcnZhbChpZCksXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIHRpbWUsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZTogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuXG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrQmluZCgpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSwgdGltZSkgYXMgdW5rbm93biBhcyBudW1iZXI7XG5cbiAgICAgICAgY29uc3QgcmFnZU1QVGltZXIgPSBuZXcgUmFnZU1QVGltZXIoaWQsIHRpbWUsIHRydWUsIGNhbGxiYWNrQmluZCwgKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgfVxuXG4gICAgZXZlcnlUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50aW1lckluY3JlbWVudGVyKys7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrQmluZCA9IGNhbGxiYWNrLmJpbmQodGhpcywgLi4uKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW10pKTtcblxuICAgICAgICB0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzLnNldChpZCwgeyBjYWxsYmFjaywgYm91bmQ6IGNhbGxiYWNrQmluZCB9KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbiBjbGllbnQtc2lkZSAocmVuZGVyIGV2ZW50IGV4aXN0cykgb3Igc2VydmVyLXNpZGVcbiAgICAgICAgY29uc3QgaXNDbGllbnRTaWRlID0gdHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKG1wIGFzIGFueSkuYnJvd3NlcnMgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgIC8vIFN0YXJ0IHRoZSB0aWNrIGxvb3AgaWYgbm90IGFscmVhZHkgcnVubmluZ1xuICAgICAgICBpZiAoIXRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXZlcnlUaWNrUnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpc0NsaWVudFNpZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBDbGllbnQtc2lkZTogdXNlIHJlbmRlciBldmVudCBmb3IgZnJhbWUtYWNjdXJhdGUgdGlja2luZ1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgaGFuZGxlcl0gb2YgdGhpcy5ldmVyeVRpY2tIYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmJvdW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihgRXJyb3IgaW4gZXZlcnlUaWNrIGhhbmRsZXI6ICR7ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbXAuZXZlbnRzLmFkZCgncmVuZGVyJywgdGhpcy5ldmVyeVRpY2tNYWluSGFuZGxlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNlcnZlci1zaWRlOiB1c2Ugc2V0SW50ZXJ2YWwgd2l0aCBtaW5pbWFsIGRlbGF5IGFzIGFwcHJveGltYXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgaGFuZGxlcl0gb2YgdGhpcy5ldmVyeVRpY2tIYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmJvdW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihgRXJyb3IgaW4gZXZlcnlUaWNrIGhhbmRsZXI6ICR7ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChpbnRlcnZhbEhhbmRsZXIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFnZU1QVGltZXIgPSBuZXcgUmFnZU1QVGltZXIoaWQsIDAsIGZhbHNlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrSGFuZGxlcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG5cbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHRpY2sgbG9vcCBpZiBubyBtb3JlIGhhbmRsZXJzXG4gICAgICAgICAgICBpZiAodGhpcy5ldmVyeVRpY2tIYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSAmJiB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoJ3JlbmRlcicsIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh0aGlzIGFzIGFueSkuX2V2ZXJ5VGlja0ludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICAodGhpcyBhcyBhbnkpLl9ldmVyeVRpY2tJbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgIH1cblxuICAgIG5leHRUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50aW1lckluY3JlbWVudGVyKys7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrQmluZCA9IGNhbGxiYWNrLmJpbmQodGhpcywgLi4uKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW10pKTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbiBjbGllbnQtc2lkZSAocmVuZGVyIGV2ZW50IGV4aXN0cykgb3Igc2VydmVyLXNpZGVcbiAgICAgICAgY29uc3QgaXNDbGllbnRTaWRlID0gdHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKG1wIGFzIGFueSkuYnJvd3NlcnMgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgIGxldCB0aW1lcklkOiBhbnk7XG5cbiAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSkge1xuICAgICAgICAgICAgLy8gQ2xpZW50LXNpZGU6IHVzZSByZW5kZXIgZXZlbnQgZm9yIG5leHQgZnJhbWVcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tCaW5kKCk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5hZGQoJ3JlbmRlcicsIGhhbmRsZXIpO1xuXG4gICAgICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuc2V0KGlkLCByYWdlTVBUaW1lcik7XG4gICAgICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZXJ2ZXItc2lkZTogdXNlIHNldEltbWVkaWF0ZSBvciBzZXRUaW1lb3V0KDApIGZvciBuZXh0IHRpY2tcbiAgICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0JpbmQoKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGltZShfbmFtZT86IHN0cmluZykge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGNvbnNvbGUudGltZSBlcXVpdmFsZW50XG4gICAgICAgIC8vIENvdWxkIGltcGxlbWVudCBjdXN0b20gdGltaW5nIGlmIG5lZWRlZFxuICAgIH1cblxuICAgIHRpbWVFbmQoX25hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBjb25zb2xlLnRpbWVFbmQgZXF1aXZhbGVudFxuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEV2ZW50RW1taXRlciwgTXVsdGlwbGF5ZXJTZXJ2aWNlLCBNdWx0aXBsYXllclRpbWVycyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QRXZlbnRFbW1pdGVyIH0gZnJvbSAnLi9yYWdlbXAtZXZlbnQtZW1taXRlcic7XG5pbXBvcnQgeyBSYWdlTVBUaW1lcnMgfSBmcm9tICcuL3JhZ2VtcC10aW1lcnMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UgaW1wbGVtZW50cyBNdWx0aXBsYXllclNlcnZpY2Uge1xuICAgIHJlYWRvbmx5IFRpbWVyczogTXVsdGlwbGF5ZXJUaW1lcnM7XG4gICAgcmVhZG9ubHkgRXZlbnRzOiBFdmVudEVtbWl0ZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5FdmVudHMgPSBuZXcgUmFnZU1QRXZlbnRFbW1pdGVyKCk7XG4gICAgICAgIHRoaXMuVGltZXJzID0gbmV3IFJhZ2VNUFRpbWVycygpO1xuICAgIH1cblxuICAgIHBhcnNlSW50ZXJuYWxBcmdzPFUgPSB1bmtub3duLCBUID0gdW5rbm93bj4oXG4gICAgICAgIC4uLmFyZ3M6IGFueVxuICAgICk6IHtcbiAgICAgICAgcGxheWVyPzogVTtcbiAgICAgICAgYm9keT86IFQ7XG4gICAgfSB7XG4gICAgICAgIGNvbnN0IHBsYXllciA9IChpc09iamVjdChhcmdzWzBdKSA/IGFyZ3NbMF0gOiB1bmRlZmluZWQpIGFzIFU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBsYXllcixcbiAgICAgICAgICAgIGJvZHk6IGFyZ3MsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbG9nKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBtcC5jb25zb2xlLmxvZ0luZm8obWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3IoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIG1wLmNvbnNvbGUubG9nRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nV2FybmluZyhhcmc6IGFueSwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dXYXJuaW5nKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGxvZ0RlYnVnKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGEgZGVkaWNhdGVkIGRlYnVnIGxvZywgdXNlIGluZm9cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dJbmZvKGBbREVCVUddICR7bWVzc2FnZX1gKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgdmFsaWRhdGVFcnJvckZpbHRlciwgdmFsaWRhdGVHdWFyZCwgdmFsaWRhdGVJbnRlcmNlcHRvciwgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vc2NoZW1hcy9ldmVudHMnO1xuaW1wb3J0IHtcbiAgICBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLFxuICAgIEdMT0JBTF9FUlJPUl9GSUxURVJTLFxuICAgIEdMT0JBTF9HVUFSRFMsXG4gICAgR0xPQkFMX0lOVEVSQ0VQVE9SUyxcbiAgICBHTE9CQUxfUElQRVMsXG4gICAgRU5BQkxFX1NIVVRET1dOX0hPT0tTLFxuICAgIFBMVUdJTlMsXG4gICAgR0xPQkFMX0FQUF9DT05UQUlORVIsXG4gICAgQVBQX0VOVklST01FTlQsXG4gICAgTUFOR09fUkVRVUVTVF9GQUNUT1JZLFxuICAgIE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlksXG4gICAgRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSxcbiAgICBDT05UQUlORVJfT1BUSU9OUyxcbiAgICBNVUxUSVBMQVlFUl9TRVJWSUNFLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3QsIENvbnRhaW5lciwgaW5qZWN0YWJsZSwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEFwcCB9IGZyb20gJy4vYXBwJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgTWFuZ29QbHVnaW4sIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgQ29udHJvbGxlckV2ZW50SGFuZGxlcixcbiAgICBDb250cm9sbGVyRmxvd0hhbmRsZXIsXG4gICAgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyLFxuICAgIENvbnRyb2xsZXJSUENIYW5kbGVyLFxuICAgIFBpcGVsaW5lSGFuZGxlcixcbn0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuL21vZHVsZSc7XG5pbXBvcnQgeyBBcHBSdW50aW1lLCBNb2R1bGVEZXBlbmRlbmN5QmluZGVyLCBNb2R1bGVUcmVlU2Nhbm5lciB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBFeGVjdXRpb25Db250ZXh0QmFzZSwgTWFuZ29SZXF1ZXN0QmFzZSwgTWFuZ29SZXNwb25zZUJhc2UgfSBmcm9tICcuL3BpcGVsaW5lJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB7IFJFRkxFQ1RPUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJlZmxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBCdWlsZGVyPEcgZXh0ZW5kcyBHdWFyZCA9IEd1YXJkLCBJIGV4dGVuZHMgSW50ZXJjZXB0b3IgPSBJbnRlcmNlcHRvciwgRUYgZXh0ZW5kcyBFcnJvckZpbHRlciA9IEVycm9yRmlsdGVyPiB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb21lbnQ6IHN0cmluZztcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByb3RlY3RlZCByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoUExVR0lOUykgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W107XG5cbiAgICBwcml2YXRlIGdsb2JhbENvbnRhaW5lck9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucyA9IHt9O1xuXG4gICAgcHVibGljIHVzZUdsb2JhbEd1YXJkcyguLi5ndWFyZHM6IChOZXdhYmxlPEc+IHwgRylbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRHdWFyZHM6IChOZXdhYmxlPEc+IHwgRylbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIGd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUd1YXJkKGd1YXJkKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRHdWFyZHMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0dVQVJEUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZEd1YXJkcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJPiB8IEkpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkSW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJPiB8IEkpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkSW50ZXJjZXB0b3JzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRJbnRlcmNlcHRvcnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsUGlwZXMoLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX1BJUEVTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkUGlwZXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsRmlsdGVycyguLi5maWx0ZXJzOiAoTmV3YWJsZTxFRj4gfCBFRilbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGSWx0ZXJzOiAoTmV3YWJsZTxFRj4gfCBFRilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlRXJyb3JGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRGSWx0ZXJzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkRklsdGVycyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VQbHVnaW5zKC4uLnBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W10pIHtcbiAgICAgICAgcGx1Z2lucy5mb3JFYWNoKChwKSA9PiB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQocCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxQbHVnaW5zID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQ8TmV3YWJsZTxNYW5nb1BsdWdpbj5bXT4oUExVR0lOUyk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIucmViaW5kKFBMVUdJTlMpLnRvQ29uc3RhbnRWYWx1ZShbLi4uaW50ZXJuYWxQbHVnaW5zLCAuLi5wbHVnaW5zXSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVTaHV0ZG93bkhvb2tzKCkge1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRU5BQkxFX1NIVVRET1dOX0hPT0tTKS50b0NvbnN0YW50VmFsdWUodHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb250YWluZXJPcHRpb25zKG9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucywgb25seUdsb2JhbCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29udGFpbmVyT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChvbmx5R2xvYmFsKSByZXR1cm4gdGhpcztcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENPTlRBSU5FUl9PUFRJT05TKS50b0NvbnN0YW50VmFsdWUob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBidWlsZCgpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsQXBwQ29udGFpbmVyID0gbmV3IENvbnRhaW5lcih0aGlzLmdsb2JhbENvbnRhaW5lck9wdGlvbnMpO1xuICAgICAgICAvLyBHTG9iYWwgc2VydmljZSBiaW5kaW5nc1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChSRUZMRUNUT1JfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKFJlZmxlY3RvclNlcnZpY2UpO1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChSZWZsZWN0b3JTZXJ2aWNlKS50b1NlcnZpY2UoUkVGTEVDVE9SX1NFUlZJQ0UpO1xuXG4gICAgICAgIC8vIE11bHRpcGxheWVyIHNlcnZpY2UgYmluZGluZ3NcbiAgICAgICAgZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoTVVMVElQTEFZRVJfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlKTtcbiBcbiAgICAgICAgLy8gQXBwIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChBcHApLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9BUFBfQ09OVEFJTkVSKS50b0NvbnN0YW50VmFsdWUoZ2xvYmFsQXBwQ29udGFpbmVyKTtcblxuICAgICAgICAvLyBNb2R1bGUgdHJlZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlVHJlZVNjYW5uZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZURlcGVuZGVuY3lCaW5kZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFwcFJ1bnRpbWUpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBBcHAgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFBpcGVsaW5lSGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIE1vZHVsZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGVNZXRhZGF0YVJlYWRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIENvbnRyb2xsZXIgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXIpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlckZsb3dIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyRXZlbnRIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyUlBDSGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIE1hbmdvIFJlcXVlc3QgYW5kIFJlc3BvbnNlIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNYW5nb1JlcXVlc3RCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNQU5HT19SRVFVRVNUX0ZBQ1RPUlkpLnRvRmFjdG9yeSgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChib2R5OiB1bmtub3duLCBwbGF5ZXI6IFBsYXllck1wKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNvbnRleHQuY29udGFpbmVyLmdldChNYW5nb1JlcXVlc3RCYXNlKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LiRib2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LiRwbGF5ZXIgPSBwbGF5ZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1hbmdvUmVzcG9uc2VCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNQU5HT19SRVNQT05TRV9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29udGFpbmVyLmdldChNYW5nb1Jlc3BvbnNlQmFzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEV4ZWN1dGlvbkNvbnRleHRCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdHlwZTogRXhlY3V0aW9uQ29udGV4dFR5cGUsXG4gICAgICAgICAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogTWFuZ29SZXF1ZXN0QmFzZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogTWFuZ29SZXNwb25zZUJhc2UsXG4gICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQuY29udGFpbmVyLmdldChFeGVjdXRpb25Db250ZXh0QmFzZSk7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kdHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kcmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kcmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRoYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRjbGFzc1JlZiA9IGNsYXNzUmVmO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJG5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRpb25Db250ZXh0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUGx1Z2lucyBiaW5kaW5nc1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnBsdWdpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChwbHVnaW4pLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQocGx1Z2luKTtcbiAgICAgICAgICAgIGlmICghcGx1Z2luSW5zdGFuY2Uub25CdWlsZCkgY29udGludWU7XG4gICAgICAgICAgICBhd2FpdCBwbHVnaW5JbnN0YW5jZS5vbkJ1aWxkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfR1VBUkRTKSkgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9HVUFSRFMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpKVxuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9QSVBFUykpIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfUElQRVMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKSlcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfRVJST1JfRklMVEVSUykudG9Db25zdGFudFZhbHVlKFtdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQoQXBwKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ29udGFpbmVyLCBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgTW9kdWxlRGVwZW5kZW5jeUJpbmRlciwgTW9kdWxlVHJlZVNjYW5uZXIgfSBmcm9tICcuL21vZHVsZS10cmVlJztcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gJy4vbW9kdWxlL21vZHVsZSc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLCBQTFVHSU5TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwUnVudGltZSB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1BsdWdpbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb3JlL21hbmdvLXBsdWdpbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBUcmVlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcCB7XG4gICAgQGluamVjdChNb2R1bGVUcmVlU2Nhbm5lcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVUcmVlU2Nhbm5lcjogTW9kdWxlVHJlZVNjYW5uZXI7XG4gICAgQGluamVjdChNb2R1bGVEZXBlbmRlbmN5QmluZGVyKSBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZURlcGVuZGVuY3lCaW5kZXI6IE1vZHVsZURlcGVuZGVuY3lCaW5kZXI7XG4gICAgQGluamVjdChBcHBSdW50aW1lKSBwcml2YXRlIHJlYWRvbmx5IGFwcFJ1bnRpbWU6IEFwcFJ1bnRpbWU7XG4gICAgQGluamVjdChJTlRFUk5BTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGludGVybmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChQTFVHSU5TKSBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W107XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgbW9kdWxlVHJlZTogVHJlZTxNb2R1bGU+O1xuICAgIHByaXZhdGUgbG9hZGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnQ8VD4ocm9vdE1vZHVsZTogTmV3YWJsZTxUPikge1xuICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgc3RhcnRpbmcgdGhlIGFwcC4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXBwQWxyZWFkeUxvYWRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flN0YXJ0aW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0YXJ0Jyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flNjYW5uaW5nIG1vZHVsZSB0cmVlLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYmVmb3JlU2NhbicpO1xuICAgICAgICB0aGlzLm1vZHVsZVRyZWUgPSBhd2FpdCB0aGlzLm1vZHVsZVRyZWVTY2FubmVyLnNjYW4ocm9vdE1vZHVsZSk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTY2FuJyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3fkJpbmRpbmcgbW9kdWxlIGRlcGVuZGVuY2llcy4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZUJpbmQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2R1bGVEZXBlbmRlbmN5QmluZGVyLmJpbmQodGhpcy5tb2R1bGVUcmVlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckJpbmQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+TG9hZGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVMb2FkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwUnVudGltZS5ib290KHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckxvYWQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+QXBwIGxvYWRlZCcpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTdGFydCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdG9wKCkge1xuICAgICAgICBpZiAoIXRoaXMubG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIHN0b3BwaW5nIHRoZSBhcHAuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkFwcE5vdExvYWRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVTdG9wJyk7XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35TdG9wcGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBSdW50aW1lLnNodXRkb3duKHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35BcHAgc3RvcHBlZCcpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyU3RvcCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuUGx1Z2luTWV0aG9kcyhtZXRob2Q6IGtleW9mIE1hbmdvUGx1Z2luKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KHApO1xuICAgICAgICAgICAgICAgIGlmICghcGx1Z2luW21ldGhvZF0pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBsdWdpblttZXRob2RdISgpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIElOVEVSTkFMX0FQUF9DT05UQUlORVIsIE1VTFRJUExBWUVSX1NFUlZJQ0UsIFBMVUdJTlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUGx1Z2luLCBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBBcHBFbnZpcm9tZW50IH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEFwcEJ1aWxkZXIgfSBmcm9tICcuL2FwcC1idWlsZGVyJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcEJ1aWxkZXI8VCBleHRlbmRzIEFwcEJ1aWxkZXI+KHtcbiAgICBlbnZpcm9tZW50LFxuICAgIHBsdWdpbnMsXG4gICAgYXBwQnVpbGRlckluaGVyaXQsXG4gICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLFxufToge1xuICAgIGVudmlyb21lbnQ6IEFwcEVudmlyb21lbnQ7XG4gICAgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcbiAgICBhcHBCdWlsZGVySW5oZXJpdDogTmV3YWJsZTxUPjtcbiAgICBtdWx0aXBsYXllclNlcnZpY2U/OiBNdWx0aXBsYXllclNlcnZpY2U7XG59KSB7XG4gICAgY29uc3QgaW50ZXJuYWxBcHBDb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7XG5cbiAgICBpZiAobXVsdGlwbGF5ZXJTZXJ2aWNlKSBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1VTFRJUExBWUVSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZShtdWx0aXBsYXllclNlcnZpY2UpO1xuICAgIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikudG9Db25zdGFudFZhbHVlKGludGVybmFsQXBwQ29udGFpbmVyKTtcbiAgICBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFQUF9FTlZJUk9NRU5UKS50b0NvbnN0YW50VmFsdWUoZW52aXJvbWVudCk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChQTFVHSU5TKS50b0NvbnN0YW50VmFsdWUocGx1Z2lucyk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChhcHBCdWlsZGVySW5oZXJpdCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgcmV0dXJuIGludGVybmFsQXBwQ29udGFpbmVyLmdldChhcHBCdWlsZGVySW5oZXJpdCk7XG59XG4iLCAiaW1wb3J0IHsgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5LCB0eXBlIEV2ZW50TWV0YWRhdGEsIHR5cGUgUGlwZWxpbmVNZXRhZGF0YSB9IGZyb20gJy4uL2FwcCc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFdmVudERlY29yYXRvcih0eXBlOiBFdmVudE1ldGFkYXRhWyd0eXBlJ10sIG5hbWU/OiBzdHJpbmcsIHdlYlZpZXdJZD86IHN0cmluZyB8IG51bWJlcikge1xuICAgIHJldHVybiA8TWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwobmFtZSkgJiYgIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkV2ZW50TmFtZU11c3RCZVN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBuYW1lID0gbmFtZSA/PyBtZXRob2Q7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzID1cbiAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGE8T21pdDxFdmVudE1ldGFkYXRhLCAncGFyYW1zJyB8IGtleW9mIFBpcGVsaW5lTWV0YWRhdGE+W10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyRXZlbnRzLCB0YXJnZXQpID8/IFtdO1xuXG4gICAgICAgIGlmIChldmVudHMuc29tZSgoZXZlbnQpID0+IGV2ZW50Lm1ldGhvZCA9PT0gbWV0aG9kICYmIGV2ZW50Lm5hbWUgPT09IG5hbWUgJiYgZXZlbnQudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROYW1lTXVzdEJlVW5pcXVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8T21pdDxFdmVudE1ldGFkYXRhLCAncGFyYW1zJyB8IGtleW9mIFBpcGVsaW5lTWV0YWRhdGE+W10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJFdmVudHMsXG4gICAgICAgICAgICBbLi4uZXZlbnRzLCB7IG1ldGhvZCwgbmFtZSwgdHlwZSwgd2ViVmlld0lkIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbkludGVybmFsKGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbkludGVybmFsJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3KGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25XZWJWaWV3JywgZXZlbnROYW1lLCBpZCk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uKGV2ZW50TmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb24nLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlSW50ZXJuYWwoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uY2VJbnRlcm5hbCcsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2UoZXZlbnROYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbmNlJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlZpZXcoaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbmNlV2ViVmlldycsIGV2ZW50TmFtZSwgaWQpO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gQm9keSguLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgcGlwZXM6IHZhbGlkYXRlZFBpcGVzLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuQm9keSwgZGF0YTogdW5kZWZpbmVkLCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5kZXgoa2V5OiBudW1iZXIsIC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoIWlzTnVtYmVyKGtleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW5kZXhLZXlNdXN0QmVOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIHBpcGVzOiB2YWxpZGF0ZWRQaXBlcywgdHlwZTogTWV0aG9kUGFyYW1UeXBlLkluZGV4LCBkYXRhOiBrZXksIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KCkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5SZXF1ZXN0LCBkYXRhOiB1bmRlZmluZWQsIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxKCkge1xuICAgIHJldHVybiBSZXF1ZXN0KCk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFBhcmFtKGtleTogc3RyaW5nLCAuLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFpc1N0cmluZyhrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlBhcmFtS2V5TXVzdEJlU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCBkYXRhOiBrZXksIHBpcGVzOiB2YWxpZGF0ZWRQaXBlcywgdHlwZTogTWV0aG9kUGFyYW1UeXBlLlBhcmFtLCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgdHlwZTogTWV0aG9kUGFyYW1UeXBlLlJlc3BvbnNlLCBkYXRhOiB1bmRlZmluZWQsIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzKCkge1xuICAgIHJldHVybiBSZXNwb25zZSgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgR3VhcmQgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUd1YXJkIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VHdWFyZHMoLi4uZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSkge1xuICAgIHJldHVybiA8Q2xhc3NEZWNvcmF0b3IgJiBNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiBndWFyZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVHdWFyZChndWFyZCk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkR3VhcmRzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChndWFyZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lR3VhcmRSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZEd1YXJkcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxHdWFyZD5bXT4oQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpIHx8IFtdO1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCBbLi4udmFsaWRhdGVkR3VhcmRzLCAuLi5tZXRob2RHdWFyZHNdLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChndWFyZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzR3VhcmRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEd1YXJkPltdPihDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCB0YXJnZXQpIHx8IFtdO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIFsuLi52YWxpZGF0ZWRHdWFyZHMsIC4uLmNsYXNzR3VhcmRzXSwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEludGVyY2VwdG9yIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnRlcmNlcHRvciB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gVXNlSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRJbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEludGVyY2VwdG9ycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOaWwoZGVzY3JpcHRvcikgJiYgIWlzTmlsKGRlc2NyaXB0b3IudmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtZXRob2RJbnRlcmNlcHRvcnMgPVxuICAgICAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxJbnRlcmNlcHRvcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpIHx8IFtdO1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIFsuLi52YWxpZGF0ZWRJbnRlcmNlcHRvcnMsIC4uLm1ldGhvZEludGVyY2VwdG9yc10sXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzSW50ZXJjZXB0b3JzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEludGVyY2VwdG9yPltdPihDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCB0YXJnZXQpIHx8IFtdO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIFsuLi52YWxpZGF0ZWRJbnRlcmNlcHRvcnMsIC4uLmNsYXNzSW50ZXJjZXB0b3JzXSwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gVXNlUGlwZXMoLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgIHJldHVybiA8Q2xhc3NEZWNvcmF0b3IgJiBNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOaWwoZGVzY3JpcHRvcikgJiYgIWlzTmlsKGRlc2NyaXB0b3IudmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAocGlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lUGlwZVJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kUGlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8UGlwZT5bXT4oQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5QaXBlcywgWy4uLnZhbGlkYXRlZFBpcGVzLCAuLi5tZXRob2RQaXBlc10sIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBpcGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lUGlwZVJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzUGlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8UGlwZT5bXT4oQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCB0YXJnZXQpIHx8IFtdO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5QaXBlcywgWy4uLnZhbGlkYXRlZFBpcGVzLCAuLi5jbGFzc1BpcGVzXSwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBpc05pbCwgaXNOdW1iZXIsIGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5LCB0eXBlIFBpcGVsaW5lTWV0YWRhdGEsIHR5cGUgUlBDTWV0YWRhdGEgfSBmcm9tICcuLi9hcHAnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUlBDRGVjb3JhdG9yKHR5cGU6IFJQQ01ldGFkYXRhWyd0eXBlJ10sIG5hbWU/OiBzdHJpbmcsIHdlYlZpZXdJZD86IHN0cmluZyB8IG51bWJlcikge1xuICAgIHJldHVybiA8TWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwod2ViVmlld0lkKSAmJiAhaXNTdHJpbmcod2ViVmlld0lkKSAmJiAhaXNOdW1iZXIod2ViVmlld0lkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5XZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKG5hbWUpICYmICFpc1N0cmluZyhuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENOYW1lTXVzdEJlU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lID8/IG1ldGhvZDtcblxuICAgICAgICBjb25zdCBycGNzID1cbiAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGE8T21pdDxSUENNZXRhZGF0YSwgJ3BhcmFtcycgfCBrZXlvZiBQaXBlbGluZU1ldGFkYXRhPltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclJQQ3MsIHRhcmdldCkgPz8gW107XG5cbiAgICAgICAgaWYgKHJwY3Muc29tZSgocnBjKSA9PiBycGMubWV0aG9kID09PSBtZXRob2QgJiYgcnBjLm5hbWUgPT09IG5hbWUgJiYgcnBjLnR5cGUgPT09IHR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ05hbWVNdXN0QmVVbmlxdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxPbWl0PFJQQ01ldGFkYXRhLCAncGFyYW1zJyB8IGtleW9mIFBpcGVsaW5lTWV0YWRhdGE+W10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJSUENzLFxuICAgICAgICAgICAgWy4uLnJwY3MsIHsgbWV0aG9kLCBuYW1lLCB0eXBlLCB3ZWJWaWV3SWQgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlUlBDRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXJwYy1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25SZXF1ZXN0KHJwY05hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlUlBDRGVjb3JhdG9yKCdvblJlcXVlc3QnLCBycGNOYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVSUENEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtcnBjLWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0KGlkOiBzdHJpbmcgfCBudW1iZXIsIHJwY05hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlUlBDRGVjb3JhdG9yKCdvbldlYlZpZXdSZXF1ZXN0JywgcnBjTmFtZSwgaWQpO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSwgdHlwZSBUaW1lck1ldGFkYXRhIH0gZnJvbSAnLi4vYXBwJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKHR5cGU6IFRpbWVyTWV0YWRhdGFbJ3R5cGUnXSwgbmFtZT86IHN0cmluZywgb3B0aW9ucz86IFRpbWVyTWV0YWRhdGFbJ29wdGlvbnMnXSkge1xuICAgIHJldHVybiA8TWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwobmFtZSkgJiYgIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlRpbWVyTmFtZU11c3RCZVN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBuYW1lID0gbmFtZSA/PyBtZXRob2Q7XG5cbiAgICAgICAgY29uc3QgdGltZXJzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxUaW1lck1ldGFkYXRhW10+KENvcmVNZXRhZGF0YUtleS5UaW1lcnMsIHRhcmdldCkgPz8gW107XG5cbiAgICAgICAgaWYgKHRpbWVycy5zb21lKCh0aW1lcikgPT4gdGltZXIubWV0aG9kID09PSBtZXRob2QgJiYgdGltZXIubmFtZSA9PT0gbmFtZSAmJiB0aW1lci50eXBlID09PSB0eXBlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5hbWVNdXN0QmVVbmlxdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxUaW1lck1ldGFkYXRhW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LlRpbWVycyxcbiAgICAgICAgICAgIFsuLi50aW1lcnMsIDxUaW1lck1ldGFkYXRhPnsgbWV0aG9kLCBuYW1lLCB0eXBlLCBvcHRpb25zIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQ3Jvbk9wdGlvbnMgfSBmcm9tICdjcm9uZXInO1xuaW1wb3J0IHsgY3JlYXRlVGltZXJEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtdGltZXIuZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIENyb24ocGF0dGVybjogc3RyaW5nIHwgRGF0ZSwgb3B0aW9uczogQ3Jvbk9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBjcmVhdGVUaW1lckRlY29yYXRvcignY3JvbicsIG9wdGlvbnMubmFtZSwgeyBwYXR0ZXJuLCAuLi5vcHRpb25zIH0pO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVRpbWVyRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXRpbWVyLmRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVyeVRpY2sobmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVUaW1lckRlY29yYXRvcignZXZlcnl0aWNrJywgbmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVUaW1lckRlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS10aW1lci5kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gSW50ZXJ2YWwodGltZW91dDogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIEludGVydmFsKG5hbWU6IHN0cmluZywgdGltZW91dDogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIEludGVydmFsKG5hbWVPclRpbWVvdXQ6IHN0cmluZyB8IG51bWJlciwgdGltZW91dD86IG51bWJlcik6IE1ldGhvZERlY29yYXRvciB7XG4gICAgY29uc3QgW25hbWUsIGludGVydmFsVGltZW91dF0gPSBpc1N0cmluZyhuYW1lT3JUaW1lb3V0KSA/IFtuYW1lT3JUaW1lb3V0LCB0aW1lb3V0XSA6IFt1bmRlZmluZWQsIG5hbWVPclRpbWVvdXRdO1xuICAgIHJldHVybiBjcmVhdGVUaW1lckRlY29yYXRvcignaW50ZXJ2YWwnLCBuYW1lLCB7IHRpbWVvdXQ6IGludGVydmFsVGltZW91dCEgfSk7XG59XG4iLCAiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVUaW1lckRlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS10aW1lci5kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gVGltZW91dCh0aW1lb3V0OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gVGltZW91dChuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gVGltZW91dChuYW1lT3JUaW1lb3V0OiBzdHJpbmcgfCBudW1iZXIsIHRpbWVvdXQ/OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3Ige1xuICAgIGNvbnN0IFtuYW1lLCBpbnRlcnZhbFRpbWVvdXRdID0gaXNTdHJpbmcobmFtZU9yVGltZW91dCkgPyBbbmFtZU9yVGltZW91dCwgdGltZW91dF0gOiBbdW5kZWZpbmVkLCBuYW1lT3JUaW1lb3V0XTtcbiAgICByZXR1cm4gY3JlYXRlVGltZXJEZWNvcmF0b3IoJ3RpbWVvdXQnLCBuYW1lLCB7IHRpbWVvdXQ6IGludGVydmFsVGltZW91dCEgfSk7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RGVjb3JhdG9ycyguLi5kZWNvcmF0b3JzOiAoQ2xhc3NEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvcilbXSkge1xuICAgIHJldHVybiA8VEZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24sIFk+KFxuICAgICAgICB0YXJnZXQ6IFRGdW5jdGlvbiB8IE9iamVjdCxcbiAgICAgICAgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCxcbiAgICAgICAgZGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8WT4sXG4gICAgKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZGVjb3JhdG9yIG9mIGRlY29yYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiAhZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICg8Q2xhc3NEZWNvcmF0b3I+ZGVjb3JhdG9yKSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKDxNZXRob2REZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvcj5kZWNvcmF0b3IpKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQsIE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhcmFtRGVjb3JhdG9yPFRJbnB1dCA9IHVua25vd24sIFRPdXRwdXQgPSB1bmtub3duPihmYWN0b3J5OiAoZGF0YTogVElucHV0LCBjdHg6IEV4ZWN1dGlvbkNvbnRleHQpID0+IFRPdXRwdXQpIHtcbiAgICByZXR1cm4gPFRJbnB1dCA9IHVua25vd24+KGRhdGE/OiBUSW5wdXQsIC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pID0+IHtcbiAgICAgICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVzOiB2YWxpZGF0ZWRQaXBlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5DdXN0b20sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5OiA8KGRhdGE6IHVua25vd24sIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpID0+IHVua25vd24+ZmFjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuIiwgImltcG9ydCB7IExhenlTZXJ2aWNlSWRlbnRpZmllciwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRSZWY8VCA9IHVua25vd24+KGZuOiAoKSA9PiBpbnRlcmZhY2VzLlNlcnZpY2VJZGVudGlmaWVyPFQ+KSB7XG4gICAgcmV0dXJuIG5ldyBMYXp5U2VydmljZUlkZW50aWZpZXI8VD4oZm4pO1xufSIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDcm9uLCB0eXBlIENyb25PcHRpb25zIH0gZnJvbSAnY3JvbmVyJztcbmltcG9ydCB7IE1VTFRJUExBWUVSX1NFUlZJQ0UsIHR5cGUgTXVsdGlwbGF5ZXJTZXJ2aWNlLCB0eXBlIE11bHRpcGxheWVyVGltZXIgfSBmcm9tICcuLi9hcHAnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGltZXJTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBNdWx0aXBsYXllclNlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkZXZlcnl0aWNrcyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGludGVydmFscyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJHRpbWVvdXRzID0gbmV3IE1hcDxzdHJpbmcsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkY3JvbnMgPSBuZXcgTWFwPHN0cmluZywgQ3Jvbj4oKTtcblxuICAgIHB1YmxpYyBnZXQgYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLmFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV2ZXJ5dGlja3MoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kZXZlcnl0aWNrcy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbnRlcnZhbHMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kaW50ZXJ2YWxzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpbWVvdXRzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJHRpbWVvdXRzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNyb25zKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJGNyb25zLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHdhcm5pbmdUaHJlc2hvbGQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMud2FybmluZ1RocmVzaG9sZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgd2FybmluZ1RocmVzaG9sZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy53YXJuaW5nVGhyZXNob2xkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUNyb25Kb2IoY2FsbGJhY2s6IEZ1bmN0aW9uLCBvcHRpb25zOiBDcm9uT3B0aW9ucyAmIHsgcGF0dGVybjogc3RyaW5nIHwgRGF0ZSB9KSB7XG4gICAgICAgIGNvbnN0IHsgcGF0dGVybiwgLi4uY3Jvbk9wdGlvbnMgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgY29uc3QgY3JvbiA9IENyb24ocGF0dGVybiwgY3Jvbk9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMubmFtZSkpIHRoaXMuJGNyb25zLnNldChvcHRpb25zLm5hbWUsIGNyb24pO1xuXG4gICAgICAgIHJldHVybiBjcm9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVJbnRlcnZhbChjYWxsYmFjazogRnVuY3Rpb24sIGludGVydmFsOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc2V0SW50ZXJ2YWwoY2FsbGJhY2ssIGludGVydmFsKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB0aGlzLiRpbnRlcnZhbHMuc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZW91dDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJHRpbWVvdXRzLnNldChuYW1lLCB0aW1lcik7XG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRXZlcnlUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgbmFtZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5ldmVyeVRpY2soY2FsbGJhY2spO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJGV2ZXJ5dGlja3Muc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodHlwZTogJ2Nyb24nIHwgJ2V2ZXJ5dGljaycgfCAndGltZW91dCcgfCAnaW50ZXJ2YWwnLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjcm9uJzpcbiAgICAgICAgICAgICAgICBjb25zdCBjcm9uSm9iID0gdGhpcy4kY3JvbnMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjcm9uSm9iKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyb25Kb2Iuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRjcm9ucy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXZlcnl0aWNrJzpcbiAgICAgICAgICAgICAgICBjb25zdCBldmVyeXRpY2sgPSB0aGlzLiRldmVyeXRpY2tzLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlcnl0aWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGljay5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGV2ZXJ5dGlja3MuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ludGVydmFsJzpcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMuJGludGVydmFscy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVydmFsLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW50ZXJ2YWxzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy4kdGltZW91dHMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0cy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5TmFtZSh0eXBlOiAnY3JvbicgfCAnZXZlcnl0aWNrJyB8ICd0aW1lb3V0JyB8ICdpbnRlcnZhbCcsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Nyb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRjcm9ucy5nZXQobmFtZSk7XG4gICAgICAgICAgICBjYXNlICdldmVyeXRpY2snOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRldmVyeXRpY2tzLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ2ludGVydmFsJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaW50ZXJ2YWxzLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiR0aW1lb3V0cy5nZXQobmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlJZChpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuZ2V0QnlJRChpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRpbWUobmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnRpbWUobmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRpbWVFbmQobmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnRpbWVFbmQobmFtZSk7XG4gICAgfVxufVxuIiwgImZ1bmN0aW9uIG1pbml0eih5LG0sZCxoLGkscyx0eix0aHJvd09uSW52YWxpZCl7cmV0dXJuIG1pbml0ei5mcm9tVFoobWluaXR6LnRwKHksbSxkLGgsaSxzLHR6KSx0aHJvd09uSW52YWxpZCl9bWluaXR6LmZyb21UWklTTz0obG9jYWxUaW1lU3RyLHR6LHRocm93T25JbnZhbGlkKT0+e3JldHVybiBtaW5pdHouZnJvbVRaKHBhcnNlSVNPTG9jYWwobG9jYWxUaW1lU3RyLHR6KSx0aHJvd09uSW52YWxpZCl9O21pbml0ei5mcm9tVFo9ZnVuY3Rpb24odHAsdGhyb3dPbkludmFsaWQpe2NvbnN0IGluRGF0ZT1uZXcgRGF0ZShEYXRlLlVUQyh0cC55LHRwLm0tMSx0cC5kLHRwLmgsdHAuaSx0cC5zKSksb2Zmc2V0PWdldFRpbWV6b25lT2Zmc2V0KHRwLnR6LGluRGF0ZSksZGF0ZUd1ZXNzPW5ldyBEYXRlKGluRGF0ZS5nZXRUaW1lKCktb2Zmc2V0KSxkYXRlT2Zmc0d1ZXNzPWdldFRpbWV6b25lT2Zmc2V0KHRwLnR6LGRhdGVHdWVzcyk7aWYoZGF0ZU9mZnNHdWVzcy1vZmZzZXQ9PT0wKXtyZXR1cm4gZGF0ZUd1ZXNzfWVsc2V7Y29uc3QgZGF0ZUd1ZXNzMj1uZXcgRGF0ZShpbkRhdGUuZ2V0VGltZSgpLWRhdGVPZmZzR3Vlc3MpLGRhdGVPZmZzR3Vlc3MyPWdldFRpbWV6b25lT2Zmc2V0KHRwLnR6LGRhdGVHdWVzczIpO2lmKGRhdGVPZmZzR3Vlc3MyLWRhdGVPZmZzR3Vlc3M9PT0wKXtyZXR1cm4gZGF0ZUd1ZXNzMn1lbHNlIGlmKCF0aHJvd09uSW52YWxpZCYmZGF0ZU9mZnNHdWVzczItZGF0ZU9mZnNHdWVzcz4wKXtyZXR1cm4gZGF0ZUd1ZXNzMn1lbHNlIGlmKCF0aHJvd09uSW52YWxpZCl7cmV0dXJuIGRhdGVHdWVzc31lbHNle3Rocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZSBwYXNzZWQgdG8gZnJvbVRaKClcIil9fX07bWluaXR6LnRvVFo9ZnVuY3Rpb24oZCx0elN0cil7Y29uc3QgbG9jYWxEYXRlU3RyaW5nPWQudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLHt0aW1lWm9uZTp0elN0cn0pLnJlcGxhY2UoL1tcXHUyMDJmXS8sXCIgXCIpO2NvbnN0IHRkPW5ldyBEYXRlKGxvY2FsRGF0ZVN0cmluZyk7cmV0dXJue3k6dGQuZ2V0RnVsbFllYXIoKSxtOnRkLmdldE1vbnRoKCkrMSxkOnRkLmdldERhdGUoKSxoOnRkLmdldEhvdXJzKCksaTp0ZC5nZXRNaW51dGVzKCksczp0ZC5nZXRTZWNvbmRzKCksdHo6dHpTdHJ9fTttaW5pdHoudHA9KHksbSxkLGgsaSxzLHR6KT0+e3JldHVybnt5OnksbTptLGQ6ZCxoOmgsaTppLHM6cyx0ejp0en19O2Z1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0KHRpbWVab25lLGRhdGU9bmV3IERhdGUpe2NvbnN0IHR6PWRhdGUudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLHt0aW1lWm9uZTp0aW1lWm9uZSx0aW1lWm9uZU5hbWU6XCJzaG9ydE9mZnNldFwifSkuc3BsaXQoXCIgXCIpLnNsaWNlKC0xKVswXTtjb25zdCBkYXRlU3RyaW5nPWRhdGUudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiKS5yZXBsYWNlKC9bXFx1MjAyZl0vLFwiIFwiKTtyZXR1cm4gRGF0ZS5wYXJzZShgJHtkYXRlU3RyaW5nfSBHTVRgKS1EYXRlLnBhcnNlKGAke2RhdGVTdHJpbmd9ICR7dHp9YCl9ZnVuY3Rpb24gcGFyc2VJU09Mb2NhbChkdFN0cix0eil7Y29uc3QgcGQ9bmV3IERhdGUoRGF0ZS5wYXJzZShkdFN0cikpO2lmKGlzTmFOKHBkKSl7dGhyb3cgbmV3IEVycm9yKFwibWluaXR6OiBJbnZhbGlkIElTTzg2MDEgcGFzc2VkIHRvIHBhcnNlci5cIil9Y29uc3Qgc3RyaW5nRW5kPWR0U3RyLnN1YnN0cmluZyg5KTtpZihkdFN0ci5pbmNsdWRlcyhcIlpcIil8fHN0cmluZ0VuZC5pbmNsdWRlcyhcIi1cIil8fHN0cmluZ0VuZC5pbmNsdWRlcyhcIitcIikpe3JldHVybiBtaW5pdHoudHAocGQuZ2V0VVRDRnVsbFllYXIoKSxwZC5nZXRVVENNb250aCgpKzEscGQuZ2V0VVRDRGF0ZSgpLHBkLmdldFVUQ0hvdXJzKCkscGQuZ2V0VVRDTWludXRlcygpLHBkLmdldFVUQ1NlY29uZHMoKSxcIkV0Yy9VVENcIil9ZWxzZXtyZXR1cm4gbWluaXR6LnRwKHBkLmdldEZ1bGxZZWFyKCkscGQuZ2V0TW9udGgoKSsxLHBkLmdldERhdGUoKSxwZC5nZXRIb3VycygpLHBkLmdldE1pbnV0ZXMoKSxwZC5nZXRTZWNvbmRzKCksdHopfX1taW5pdHoubWluaXR6PW1pbml0ejtmdW5jdGlvbiBDcm9uT3B0aW9ucyhvcHRpb25zKXtpZihvcHRpb25zPT09dm9pZCAwKXtvcHRpb25zPXt9fWRlbGV0ZSBvcHRpb25zLm5hbWU7b3B0aW9ucy5sZWdhY3lNb2RlPW9wdGlvbnMubGVnYWN5TW9kZT09PXZvaWQgMD90cnVlOm9wdGlvbnMubGVnYWN5TW9kZTtvcHRpb25zLnBhdXNlZD1vcHRpb25zLnBhdXNlZD09PXZvaWQgMD9mYWxzZTpvcHRpb25zLnBhdXNlZDtvcHRpb25zLm1heFJ1bnM9b3B0aW9ucy5tYXhSdW5zPT09dm9pZCAwP0luZmluaXR5Om9wdGlvbnMubWF4UnVucztvcHRpb25zLmNhdGNoPW9wdGlvbnMuY2F0Y2g9PT12b2lkIDA/ZmFsc2U6b3B0aW9ucy5jYXRjaDtvcHRpb25zLmludGVydmFsPW9wdGlvbnMuaW50ZXJ2YWw9PT12b2lkIDA/MDpwYXJzZUludChvcHRpb25zLmludGVydmFsLDEwKTtvcHRpb25zLnV0Y09mZnNldD1vcHRpb25zLnV0Y09mZnNldD09PXZvaWQgMD92b2lkIDA6cGFyc2VJbnQob3B0aW9ucy51dGNPZmZzZXQsMTApO29wdGlvbnMudW5yZWY9b3B0aW9ucy51bnJlZj09PXZvaWQgMD9mYWxzZTpvcHRpb25zLnVucmVmO2lmKG9wdGlvbnMuc3RhcnRBdCl7b3B0aW9ucy5zdGFydEF0PW5ldyBDcm9uRGF0ZShvcHRpb25zLnN0YXJ0QXQsb3B0aW9ucy50aW1lem9uZSl9aWYob3B0aW9ucy5zdG9wQXQpe29wdGlvbnMuc3RvcEF0PW5ldyBDcm9uRGF0ZShvcHRpb25zLnN0b3BBdCxvcHRpb25zLnRpbWV6b25lKX1pZihvcHRpb25zLmludGVydmFsIT09bnVsbCl7aWYoaXNOYU4ob3B0aW9ucy5pbnRlcnZhbCkpe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgaXMgbm90IGEgbnVtYmVyXCIpfWVsc2UgaWYob3B0aW9ucy5pbnRlcnZhbDwwKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uT3B0aW9uczogU3VwcGxpZWQgdmFsdWUgZm9yIGludGVydmFsIGNhbiBub3QgYmUgbmVnYXRpdmVcIil9fWlmKG9wdGlvbnMudXRjT2Zmc2V0IT09dm9pZCAwKXtpZihpc05hTihvcHRpb25zLnV0Y09mZnNldCkpe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiBJbnZhbGlkIHZhbHVlIHBhc3NlZCBmb3IgdXRjT2Zmc2V0LCBzaG91bGQgYmUgbnVtYmVyIHJlcHJlc2VudGluZyBtaW51dGVzIG9mZnNldCBmcm9tIFVUQy5cIil9ZWxzZSBpZihvcHRpb25zLnV0Y09mZnNldDwtODcwfHxvcHRpb25zLnV0Y09mZnNldD44NzApe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiB1dGNPZmZzZXQgb3V0IG9mIGJvdW5kcy5cIil9aWYob3B0aW9ucy51dGNPZmZzZXQhPT12b2lkIDAmJm9wdGlvbnMudGltZXpvbmUpe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiBDb21iaW5pbmcgJ3V0Y09mZnNldCcgd2l0aCAndGltZXpvbmUnIGlzIG5vdCBhbGxvd2VkLlwiKX19aWYob3B0aW9ucy51bnJlZiE9PXRydWUmJm9wdGlvbnMudW5yZWYhPT1mYWxzZSl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IFVucmVmIHNob3VsZCBiZSBlaXRoZXIgdHJ1ZSwgZmFsc2Ugb3IgdW5kZWZpbmVkKGZhbHNlKS5cIil9cmV0dXJuIG9wdGlvbnN9Y29uc3QgTEFTVF9PQ0NVUlJFTkNFPTMyO2NvbnN0IEFOWV9PQ0NVUlJFTkNFPTF8Mnw0fDh8MTZ8TEFTVF9PQ0NVUlJFTkNFO2NvbnN0IE9DQ1VSUkVOQ0VfQklUTUFTS1M9WzEsMiw0LDgsMTZdO2Z1bmN0aW9uIENyb25QYXR0ZXJuKHBhdHRlcm4sdGltZXpvbmUpe3RoaXMucGF0dGVybj1wYXR0ZXJuO3RoaXMudGltZXpvbmU9dGltZXpvbmU7dGhpcy5zZWNvbmQ9QXJyYXkoNjApLmZpbGwoMCk7dGhpcy5taW51dGU9QXJyYXkoNjApLmZpbGwoMCk7dGhpcy5ob3VyPUFycmF5KDI0KS5maWxsKDApO3RoaXMuZGF5PUFycmF5KDMxKS5maWxsKDApO3RoaXMubW9udGg9QXJyYXkoMTIpLmZpbGwoMCk7dGhpcy5kYXlPZldlZWs9QXJyYXkoNykuZmlsbCgwKTt0aGlzLmxhc3REYXlPZk1vbnRoPWZhbHNlO3RoaXMuc3RhckRPTT1mYWxzZTt0aGlzLnN0YXJET1c9ZmFsc2U7dGhpcy5wYXJzZSgpfUNyb25QYXR0ZXJuLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbigpe2lmKCEodHlwZW9mIHRoaXMucGF0dGVybj09PVwic3RyaW5nXCJ8fHRoaXMucGF0dGVybi5jb25zdHJ1Y3Rvcj09PVN0cmluZykpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogUGF0dGVybiBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcuXCIpfWlmKHRoaXMucGF0dGVybi5pbmRleE9mKFwiQFwiKT49MCl0aGlzLnBhdHRlcm49dGhpcy5oYW5kbGVOaWNrbmFtZXModGhpcy5wYXR0ZXJuKS50cmltKCk7Y29uc3QgcGFydHM9dGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xccysvZyxcIiBcIikuc3BsaXQoXCIgXCIpO2lmKHBhcnRzLmxlbmd0aDw1fHxwYXJ0cy5sZW5ndGg+Nil7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9ybWF0ICgnXCIrdGhpcy5wYXR0ZXJuK1wiJyksIGV4YWN0bHkgZml2ZSBvciBzaXggc3BhY2Ugc2VwYXJhdGVkIHBhcnRzIGFyZSByZXF1aXJlZC5cIil9aWYocGFydHMubGVuZ3RoPT09NSl7cGFydHMudW5zaGlmdChcIjBcIil9aWYocGFydHNbM10uaW5kZXhPZihcIkxcIik+PTApe3BhcnRzWzNdPXBhcnRzWzNdLnJlcGxhY2UoXCJMXCIsXCJcIik7dGhpcy5sYXN0RGF5T2ZNb250aD10cnVlfWlmKHBhcnRzWzNdPT1cIipcIil7dGhpcy5zdGFyRE9NPXRydWV9aWYocGFydHNbNF0ubGVuZ3RoPj0zKXBhcnRzWzRdPXRoaXMucmVwbGFjZUFscGhhTW9udGhzKHBhcnRzWzRdKTtpZihwYXJ0c1s1XS5sZW5ndGg+PTMpcGFydHNbNV09dGhpcy5yZXBsYWNlQWxwaGFEYXlzKHBhcnRzWzVdKTtpZihwYXJ0c1s1XT09XCIqXCIpe3RoaXMuc3RhckRPVz10cnVlfWlmKHRoaXMucGF0dGVybi5pbmRleE9mKFwiP1wiKT49MCl7Y29uc3QgaW5pdERhdGU9bmV3IENyb25EYXRlKG5ldyBEYXRlLHRoaXMudGltZXpvbmUpLmdldERhdGUodHJ1ZSk7cGFydHNbMF09cGFydHNbMF0ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXRTZWNvbmRzKCkpO3BhcnRzWzFdPXBhcnRzWzFdLnJlcGxhY2UoXCI/XCIsaW5pdERhdGUuZ2V0TWludXRlcygpKTtwYXJ0c1syXT1wYXJ0c1syXS5yZXBsYWNlKFwiP1wiLGluaXREYXRlLmdldEhvdXJzKCkpO2lmKCF0aGlzLnN0YXJET00pcGFydHNbM109cGFydHNbM10ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXREYXRlKCkpO3BhcnRzWzRdPXBhcnRzWzRdLnJlcGxhY2UoXCI/XCIsaW5pdERhdGUuZ2V0TW9udGgoKSsxKTtpZighdGhpcy5zdGFyRE9XKXBhcnRzWzVdPXBhcnRzWzVdLnJlcGxhY2UoXCI/XCIsaW5pdERhdGUuZ2V0RGF5KCkpfXRoaXMudGhyb3dBdElsbGVnYWxDaGFyYWN0ZXJzKHBhcnRzKTt0aGlzLnBhcnRUb0FycmF5KFwic2Vjb25kXCIscGFydHNbMF0sMCwxKTt0aGlzLnBhcnRUb0FycmF5KFwibWludXRlXCIscGFydHNbMV0sMCwxKTt0aGlzLnBhcnRUb0FycmF5KFwiaG91clwiLHBhcnRzWzJdLDAsMSk7dGhpcy5wYXJ0VG9BcnJheShcImRheVwiLHBhcnRzWzNdLC0xLDEpO3RoaXMucGFydFRvQXJyYXkoXCJtb250aFwiLHBhcnRzWzRdLC0xLDEpO3RoaXMucGFydFRvQXJyYXkoXCJkYXlPZldlZWtcIixwYXJ0c1s1XSwwLEFOWV9PQ0NVUlJFTkNFKTtpZih0aGlzLmRheU9mV2Vla1s3XSl7dGhpcy5kYXlPZldlZWtbMF09dGhpcy5kYXlPZldlZWtbN119fTtDcm9uUGF0dGVybi5wcm90b3R5cGUucGFydFRvQXJyYXk9ZnVuY3Rpb24odHlwZSxjb25mLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCBhcnI9dGhpc1t0eXBlXTtjb25zdCBsYXN0RGF5T2ZNb250aD10eXBlPT09XCJkYXlcIiYmdGhpcy5sYXN0RGF5T2ZNb250aDtpZihjb25mPT09XCJcIiYmIWxhc3REYXlPZk1vbnRoKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogY29uZmlndXJhdGlvbiBlbnRyeSBcIit0eXBlK1wiIChcIitjb25mK1wiKSBpcyBlbXB0eSwgY2hlY2sgZm9yIHRyYWlsaW5nIHNwYWNlcy5cIik7aWYoY29uZj09PVwiKlwiKXJldHVybiBhcnIuZmlsbChkZWZhdWx0VmFsdWUpO2NvbnN0IHNwbGl0PWNvbmYuc3BsaXQoXCIsXCIpO2lmKHNwbGl0Lmxlbmd0aD4xKXtmb3IobGV0IGk9MDtpPHNwbGl0Lmxlbmd0aDtpKyspe3RoaXMucGFydFRvQXJyYXkodHlwZSxzcGxpdFtpXSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl9fWVsc2UgaWYoY29uZi5pbmRleE9mKFwiLVwiKSE9PS0xJiZjb25mLmluZGV4T2YoXCIvXCIpIT09LTEpe3RoaXMuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcoY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKX1lbHNlIGlmKGNvbmYuaW5kZXhPZihcIi1cIikhPT0tMSl7dGhpcy5oYW5kbGVSYW5nZShjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpfWVsc2UgaWYoY29uZi5pbmRleE9mKFwiL1wiKSE9PS0xKXt0aGlzLmhhbmRsZVN0ZXBwaW5nKGNvbmYsdHlwZSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl9ZWxzZSBpZihjb25mIT09XCJcIil7dGhpcy5oYW5kbGVOdW1iZXIoY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKX19O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS50aHJvd0F0SWxsZWdhbENoYXJhY3RlcnM9ZnVuY3Rpb24ocGFydHMpe2ZvcihsZXQgaT0wO2k8cGFydHMubGVuZ3RoO2krKyl7Y29uc3QgcmVWYWxpZENyb249aT09PTU/L1teLyowLTksXFwtI0xdKy86L1teLyowLTksLV0rLztpZihyZVZhbGlkQ3Jvbi50ZXN0KHBhcnRzW2ldKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5IFwiK2krXCIgKFwiK3BhcnRzW2ldK1wiKSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuXCIpfX19O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5oYW5kbGVOdW1iZXI9ZnVuY3Rpb24oY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCByZXN1bHQ9dGhpcy5leHRyYWN0TnRoKGNvbmYsdHlwZSk7Y29uc3QgaT1wYXJzZUludChyZXN1bHRbMF0sMTApK3ZhbHVlSW5kZXhPZmZzZXQ7aWYoaXNOYU4oaSkpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogXCIrdHlwZStcIiBpcyBub3QgYSBudW1iZXI6ICdcIitjb25mK1wiJ1wiKX10aGlzLnNldFBhcnQodHlwZSxpLHJlc3VsdFsxXXx8ZGVmYXVsdFZhbHVlKX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnNldFBhcnQ9ZnVuY3Rpb24ocGFydCxpbmRleCx2YWx1ZSl7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLHBhcnQpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IEludmFsaWQgcGFydCBzcGVjaWZpZWQ6IFwiK3BhcnQpfWlmKHBhcnQ9PT1cImRheU9mV2Vla1wiKXtpZihpbmRleD09PTcpaW5kZXg9MDtpZigoaW5kZXg8MHx8aW5kZXg+NikmJmluZGV4IT09XCJMXCIpe3Rocm93IG5ldyBSYW5nZUVycm9yKFwiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yIGRheU9mV2VlazogXCIraW5kZXgpfXRoaXMuc2V0TnRoV2Vla2RheU9mTW9udGgoaW5kZXgsdmFsdWUpO3JldHVybn1pZihwYXJ0PT09XCJzZWNvbmRcInx8cGFydD09PVwibWludXRlXCIpe2lmKGluZGV4PDB8fGluZGV4Pj02MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgXCIrcGFydCtcIjogXCIraW5kZXgpfX1lbHNlIGlmKHBhcnQ9PT1cImhvdXJcIil7aWYoaW5kZXg8MHx8aW5kZXg+PTI0KXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIitwYXJ0K1wiOiBcIitpbmRleCl9fWVsc2UgaWYocGFydD09PVwiZGF5XCIpe2lmKGluZGV4PDB8fGluZGV4Pj0zMSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgXCIrcGFydCtcIjogXCIraW5kZXgpfX1lbHNlIGlmKHBhcnQ9PT1cIm1vbnRoXCIpe2lmKGluZGV4PDB8fGluZGV4Pj0xMil7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgXCIrcGFydCtcIjogXCIraW5kZXgpfX10aGlzW3BhcnRdW2luZGV4XT12YWx1ZX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmhhbmRsZVJhbmdlV2l0aFN0ZXBwaW5nPWZ1bmN0aW9uKGNvbmYsdHlwZSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl7Y29uc3QgcmVzdWx0PXRoaXMuZXh0cmFjdE50aChjb25mLHR5cGUpO2NvbnN0IG1hdGNoZXM9cmVzdWx0WzBdLm1hdGNoKC9eKFxcZCspLShcXGQrKVxcLyhcXGQrKSQvKTtpZihtYXRjaGVzPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZSB3aXRoIHN0ZXBwaW5nOiAnXCIrY29uZitcIidcIik7bGV0Wyxsb3dlcix1cHBlcixzdGVwc109bWF0Y2hlcztsb3dlcj1wYXJzZUludChsb3dlciwxMCkrdmFsdWVJbmRleE9mZnNldDt1cHBlcj1wYXJzZUludCh1cHBlciwxMCkrdmFsdWVJbmRleE9mZnNldDtzdGVwcz1wYXJzZUludChzdGVwcywxMCk7aWYoaXNOYU4obG93ZXIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pXCIpO2lmKGlzTmFOKHVwcGVyKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKVwiKTtpZihpc05hTihzdGVwcykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IChOYU4pXCIpO2lmKHN0ZXBzPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMFwiKTtpZihzdGVwcz50aGlzW3R5cGVdLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgc3RlcHMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIHZhbHVlIG9mIHBhcnQgKFwiK3RoaXNbdHlwZV0ubGVuZ3RoK1wiKVwiKTtpZihsb3dlcj51cHBlcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IEZyb20gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdG8gdmFsdWU6ICdcIitjb25mK1wiJ1wiKTtmb3IobGV0IGk9bG93ZXI7aTw9dXBwZXI7aSs9c3RlcHMpe3RoaXMuc2V0UGFydCh0eXBlLGkscmVzdWx0WzFdfHxkZWZhdWx0VmFsdWUpfX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmV4dHJhY3ROdGg9ZnVuY3Rpb24oY29uZix0eXBlKXtsZXQgcmVzdD1jb25mO2xldCBudGg7aWYocmVzdC5pbmNsdWRlcyhcIiNcIikpe2lmKHR5cGUhPT1cImRheU9mV2Vla1wiKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uUGF0dGVybjogbnRoICgjKSBvbmx5IGFsbG93ZWQgaW4gZGF5LW9mLXdlZWsgZmllbGRcIil9bnRoPXJlc3Quc3BsaXQoXCIjXCIpWzFdO3Jlc3Q9cmVzdC5zcGxpdChcIiNcIilbMF19cmV0dXJuW3Jlc3QsbnRoXX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmhhbmRsZVJhbmdlPWZ1bmN0aW9uKGNvbmYsdHlwZSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl7Y29uc3QgcmVzdWx0PXRoaXMuZXh0cmFjdE50aChjb25mLHR5cGUpO2NvbnN0IHNwbGl0PXJlc3VsdFswXS5zcGxpdChcIi1cIik7aWYoc3BsaXQubGVuZ3RoIT09Mil7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgcmFuZ2U6ICdcIitjb25mK1wiJ1wiKX1jb25zdCBsb3dlcj1wYXJzZUludChzcGxpdFswXSwxMCkrdmFsdWVJbmRleE9mZnNldCx1cHBlcj1wYXJzZUludChzcGxpdFsxXSwxMCkrdmFsdWVJbmRleE9mZnNldDtpZihpc05hTihsb3dlcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pXCIpfWVsc2UgaWYoaXNOYU4odXBwZXIpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKVwiKX1pZihsb3dlcj51cHBlcil7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBGcm9tIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRvIHZhbHVlOiAnXCIrY29uZitcIidcIil9Zm9yKGxldCBpPWxvd2VyO2k8PXVwcGVyO2krKyl7dGhpcy5zZXRQYXJ0KHR5cGUsaSxyZXN1bHRbMV18fGRlZmF1bHRWYWx1ZSl9fTtDcm9uUGF0dGVybi5wcm90b3R5cGUuaGFuZGxlU3RlcHBpbmc9ZnVuY3Rpb24oY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCByZXN1bHQ9dGhpcy5leHRyYWN0TnRoKGNvbmYsdHlwZSk7Y29uc3Qgc3BsaXQ9cmVzdWx0WzBdLnNwbGl0KFwiL1wiKTtpZihzcGxpdC5sZW5ndGghPT0yKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogJ1wiK2NvbmYrXCInXCIpfWxldCBzdGFydD0wO2lmKHNwbGl0WzBdIT09XCIqXCIpe3N0YXJ0PXBhcnNlSW50KHNwbGl0WzBdLDEwKSt2YWx1ZUluZGV4T2Zmc2V0fWNvbnN0IHN0ZXBzPXBhcnNlSW50KHNwbGl0WzFdLDEwKTtpZihpc05hTihzdGVwcykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IChOYU4pXCIpO2lmKHN0ZXBzPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMFwiKTtpZihzdGVwcz50aGlzW3R5cGVdLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgbWF4IHN0ZXBzIGZvciBwYXJ0IGlzIChcIit0aGlzW3R5cGVdLmxlbmd0aCtcIilcIik7Zm9yKGxldCBpPXN0YXJ0O2k8dGhpc1t0eXBlXS5sZW5ndGg7aSs9c3RlcHMpe3RoaXMuc2V0UGFydCh0eXBlLGkscmVzdWx0WzFdfHxkZWZhdWx0VmFsdWUpfX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnJlcGxhY2VBbHBoYURheXM9ZnVuY3Rpb24oY29uZil7cmV0dXJuIGNvbmYucmVwbGFjZSgvLXN1bi9naSxcIi03XCIpLnJlcGxhY2UoL3N1bi9naSxcIjBcIikucmVwbGFjZSgvbW9uL2dpLFwiMVwiKS5yZXBsYWNlKC90dWUvZ2ksXCIyXCIpLnJlcGxhY2UoL3dlZC9naSxcIjNcIikucmVwbGFjZSgvdGh1L2dpLFwiNFwiKS5yZXBsYWNlKC9mcmkvZ2ksXCI1XCIpLnJlcGxhY2UoL3NhdC9naSxcIjZcIil9O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5yZXBsYWNlQWxwaGFNb250aHM9ZnVuY3Rpb24oY29uZil7cmV0dXJuIGNvbmYucmVwbGFjZSgvamFuL2dpLFwiMVwiKS5yZXBsYWNlKC9mZWIvZ2ksXCIyXCIpLnJlcGxhY2UoL21hci9naSxcIjNcIikucmVwbGFjZSgvYXByL2dpLFwiNFwiKS5yZXBsYWNlKC9tYXkvZ2ksXCI1XCIpLnJlcGxhY2UoL2p1bi9naSxcIjZcIikucmVwbGFjZSgvanVsL2dpLFwiN1wiKS5yZXBsYWNlKC9hdWcvZ2ksXCI4XCIpLnJlcGxhY2UoL3NlcC9naSxcIjlcIikucmVwbGFjZSgvb2N0L2dpLFwiMTBcIikucmVwbGFjZSgvbm92L2dpLFwiMTFcIikucmVwbGFjZSgvZGVjL2dpLFwiMTJcIil9O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5oYW5kbGVOaWNrbmFtZXM9ZnVuY3Rpb24ocGF0dGVybil7Y29uc3QgY2xlYW5QYXR0ZXJuPXBhdHRlcm4udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoY2xlYW5QYXR0ZXJuPT09XCJAeWVhcmx5XCJ8fGNsZWFuUGF0dGVybj09PVwiQGFubnVhbGx5XCIpe3JldHVyblwiMCAwIDEgMSAqXCJ9ZWxzZSBpZihjbGVhblBhdHRlcm49PT1cIkBtb250aGx5XCIpe3JldHVyblwiMCAwIDEgKiAqXCJ9ZWxzZSBpZihjbGVhblBhdHRlcm49PT1cIkB3ZWVrbHlcIil7cmV0dXJuXCIwIDAgKiAqIDBcIn1lbHNlIGlmKGNsZWFuUGF0dGVybj09PVwiQGRhaWx5XCIpe3JldHVyblwiMCAwICogKiAqXCJ9ZWxzZSBpZihjbGVhblBhdHRlcm49PT1cIkBob3VybHlcIil7cmV0dXJuXCIwICogKiAqICpcIn1lbHNle3JldHVybiBwYXR0ZXJufX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnNldE50aFdlZWtkYXlPZk1vbnRoPWZ1bmN0aW9uKGluZGV4LG50aFdlZWtkYXkpe2lmKG50aFdlZWtkYXk9PT1cIkxcIil7dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF09dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF18TEFTVF9PQ0NVUlJFTkNFfWVsc2UgaWYobnRoV2Vla2RheTw2JiZudGhXZWVrZGF5PjApe3RoaXNbXCJkYXlPZldlZWtcIl1baW5kZXhdPXRoaXNbXCJkYXlPZldlZWtcIl1baW5kZXhdfE9DQ1VSUkVOQ0VfQklUTUFTS1NbbnRoV2Vla2RheS0xXX1lbHNlIGlmKG50aFdlZWtkYXk9PT1BTllfT0NDVVJSRU5DRSl7dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF09QU5ZX09DQ1VSUkVOQ0V9ZWxzZXt0aHJvdyBuZXcgVHlwZUVycm9yKGBDcm9uUGF0dGVybjogbnRoIHdlZWtkYXkgb2Ygb2YgcmFuZ2UsIHNob3VsZCBiZSAxLTUgb3IgTC4gVmFsdWU6ICR7bnRoV2Vla2RheX1gKX19O2NvbnN0IERheXNPZk1vbnRoPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07Y29uc3QgUmVjdXJzaW9uU3RlcHM9W1tcIm1vbnRoXCIsXCJ5ZWFyXCIsMF0sW1wiZGF5XCIsXCJtb250aFwiLC0xXSxbXCJob3VyXCIsXCJkYXlcIiwwXSxbXCJtaW51dGVcIixcImhvdXJcIiwwXSxbXCJzZWNvbmRcIixcIm1pbnV0ZVwiLDBdXTtmdW5jdGlvbiBDcm9uRGF0ZShkLHR6KXt0aGlzLnR6PXR6O2lmKGQmJmQgaW5zdGFuY2VvZiBEYXRlKXtpZighaXNOYU4oZCkpe3RoaXMuZnJvbURhdGUoZCl9ZWxzZXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvbkRhdGU6IEludmFsaWQgZGF0ZSBwYXNzZWQgdG8gQ3JvbkRhdGUgY29uc3RydWN0b3JcIil9fWVsc2UgaWYoZD09PXZvaWQgMCl7dGhpcy5mcm9tRGF0ZShuZXcgRGF0ZSl9ZWxzZSBpZihkJiZ0eXBlb2YgZD09PVwic3RyaW5nXCIpe3RoaXMuZnJvbVN0cmluZyhkKX1lbHNlIGlmKGQgaW5zdGFuY2VvZiBDcm9uRGF0ZSl7dGhpcy5mcm9tQ3JvbkRhdGUoZCl9ZWxzZXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvbkRhdGU6IEludmFsaWQgdHlwZSAoXCIrdHlwZW9mIGQrXCIpIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvclwiKX19Q3JvbkRhdGUucHJvdG90eXBlLmlzTnRoV2Vla2RheU9mTW9udGg9ZnVuY3Rpb24oeWVhcixtb250aCxkYXksbnRoKXtjb25zdCBkYXRlPW5ldyBEYXRlKERhdGUuVVRDKHllYXIsbW9udGgsZGF5KSk7Y29uc3Qgd2Vla2RheT1kYXRlLmdldFVUQ0RheSgpO2xldCBjb3VudD0wO2ZvcihsZXQgZD0xO2Q8PWRheTtkKyspe2lmKG5ldyBEYXRlKERhdGUuVVRDKHllYXIsbW9udGgsZCkpLmdldFVUQ0RheSgpPT09d2Vla2RheSl7Y291bnQrK319aWYobnRoJkFOWV9PQ0NVUlJFTkNFJiZPQ0NVUlJFTkNFX0JJVE1BU0tTW2NvdW50LTFdJm50aCl7cmV0dXJuIHRydWV9aWYobnRoJkxBU1RfT0NDVVJSRU5DRSl7Y29uc3QgZGF5c0luTW9udGg9bmV3IERhdGUoRGF0ZS5VVEMoeWVhcixtb250aCsxLDApKS5nZXRVVENEYXRlKCk7Zm9yKGxldCBkPWRheSsxO2Q8PWRheXNJbk1vbnRoO2QrKyl7aWYobmV3IERhdGUoRGF0ZS5VVEMoeWVhcixtb250aCxkKSkuZ2V0VVRDRGF5KCk9PT13ZWVrZGF5KXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfXJldHVybiBmYWxzZX07Q3JvbkRhdGUucHJvdG90eXBlLmZyb21EYXRlPWZ1bmN0aW9uKGluRGF0ZSl7aWYodGhpcy50eiE9PXZvaWQgMCl7aWYodHlwZW9mIHRoaXMudHo9PT1cIm51bWJlclwiKXt0aGlzLm1zPWluRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1pbkRhdGUuZ2V0VVRDU2Vjb25kcygpO3RoaXMubWludXRlPWluRGF0ZS5nZXRVVENNaW51dGVzKCkrdGhpcy50ejt0aGlzLmhvdXI9aW5EYXRlLmdldFVUQ0hvdXJzKCk7dGhpcy5kYXk9aW5EYXRlLmdldFVUQ0RhdGUoKTt0aGlzLm1vbnRoPWluRGF0ZS5nZXRVVENNb250aCgpO3RoaXMueWVhcj1pbkRhdGUuZ2V0VVRDRnVsbFllYXIoKTt0aGlzLmFwcGx5KCl9ZWxzZXtjb25zdCBkPW1pbml0ei50b1RaKGluRGF0ZSx0aGlzLnR6KTt0aGlzLm1zPWluRGF0ZS5nZXRNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1kLnM7dGhpcy5taW51dGU9ZC5pO3RoaXMuaG91cj1kLmg7dGhpcy5kYXk9ZC5kO3RoaXMubW9udGg9ZC5tLTE7dGhpcy55ZWFyPWQueX19ZWxzZXt0aGlzLm1zPWluRGF0ZS5nZXRNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1pbkRhdGUuZ2V0U2Vjb25kcygpO3RoaXMubWludXRlPWluRGF0ZS5nZXRNaW51dGVzKCk7dGhpcy5ob3VyPWluRGF0ZS5nZXRIb3VycygpO3RoaXMuZGF5PWluRGF0ZS5nZXREYXRlKCk7dGhpcy5tb250aD1pbkRhdGUuZ2V0TW9udGgoKTt0aGlzLnllYXI9aW5EYXRlLmdldEZ1bGxZZWFyKCl9fTtDcm9uRGF0ZS5wcm90b3R5cGUuZnJvbUNyb25EYXRlPWZ1bmN0aW9uKGQpe3RoaXMudHo9ZC50ejt0aGlzLnllYXI9ZC55ZWFyO3RoaXMubW9udGg9ZC5tb250aDt0aGlzLmRheT1kLmRheTt0aGlzLmhvdXI9ZC5ob3VyO3RoaXMubWludXRlPWQubWludXRlO3RoaXMuc2Vjb25kPWQuc2Vjb25kO3RoaXMubXM9ZC5tc307Q3JvbkRhdGUucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7aWYodGhpcy5tb250aD4xMXx8dGhpcy5kYXk+RGF5c09mTW9udGhbdGhpcy5tb250aF18fHRoaXMuaG91cj41OXx8dGhpcy5taW51dGU+NTl8fHRoaXMuc2Vjb25kPjU5fHx0aGlzLmhvdXI8MHx8dGhpcy5taW51dGU8MHx8dGhpcy5zZWNvbmQ8MCl7Y29uc3QgZD1uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUsdGhpcy5zZWNvbmQsdGhpcy5tcykpO3RoaXMubXM9ZC5nZXRVVENNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1kLmdldFVUQ1NlY29uZHMoKTt0aGlzLm1pbnV0ZT1kLmdldFVUQ01pbnV0ZXMoKTt0aGlzLmhvdXI9ZC5nZXRVVENIb3VycygpO3RoaXMuZGF5PWQuZ2V0VVRDRGF0ZSgpO3RoaXMubW9udGg9ZC5nZXRVVENNb250aCgpO3RoaXMueWVhcj1kLmdldFVUQ0Z1bGxZZWFyKCk7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtDcm9uRGF0ZS5wcm90b3R5cGUuZnJvbVN0cmluZz1mdW5jdGlvbihzdHIpe2lmKHR5cGVvZiB0aGlzLnR6PT09XCJudW1iZXJcIil7Y29uc3QgaW5EYXRlPW1pbml0ei5mcm9tVFpJU08oc3RyKTt0aGlzLm1zPWluRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1pbkRhdGUuZ2V0VVRDU2Vjb25kcygpO3RoaXMubWludXRlPWluRGF0ZS5nZXRVVENNaW51dGVzKCk7dGhpcy5ob3VyPWluRGF0ZS5nZXRVVENIb3VycygpO3RoaXMuZGF5PWluRGF0ZS5nZXRVVENEYXRlKCk7dGhpcy5tb250aD1pbkRhdGUuZ2V0VVRDTW9udGgoKTt0aGlzLnllYXI9aW5EYXRlLmdldFVUQ0Z1bGxZZWFyKCk7dGhpcy5hcHBseSgpfWVsc2V7cmV0dXJuIHRoaXMuZnJvbURhdGUobWluaXR6LmZyb21UWklTTyhzdHIsdGhpcy50eikpfX07Q3JvbkRhdGUucHJvdG90eXBlLmZpbmROZXh0PWZ1bmN0aW9uKG9wdGlvbnMsdGFyZ2V0LHBhdHRlcm4sb2Zmc2V0KXtjb25zdCBvcmlnaW5hbFRhcmdldD10aGlzW3RhcmdldF07bGV0IGxhc3REYXlPZk1vbnRoO2lmKHBhdHRlcm4ubGFzdERheU9mTW9udGgpe2lmKHRoaXMubW9udGghPT0xKXtsYXN0RGF5T2ZNb250aD1EYXlzT2ZNb250aFt0aGlzLm1vbnRoXX1lbHNle2xhc3REYXlPZk1vbnRoPW5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhcix0aGlzLm1vbnRoKzEsMCwwLDAsMCwwKSkuZ2V0VVRDRGF0ZSgpfX1jb25zdCBmRG9tV2Vla0RheT0hcGF0dGVybi5zdGFyRE9XJiZ0YXJnZXQ9PVwiZGF5XCI/bmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLHRoaXMubW9udGgsMSwwLDAsMCwwKSkuZ2V0VVRDRGF5KCk6dW5kZWZpbmVkO2ZvcihsZXQgaT10aGlzW3RhcmdldF0rb2Zmc2V0O2k8cGF0dGVyblt0YXJnZXRdLmxlbmd0aDtpKyspe2xldCBtYXRjaD1wYXR0ZXJuW3RhcmdldF1baV07aWYodGFyZ2V0PT09XCJkYXlcIiYmcGF0dGVybi5sYXN0RGF5T2ZNb250aCYmaS1vZmZzZXQ9PWxhc3REYXlPZk1vbnRoKXttYXRjaD10cnVlfWlmKHRhcmdldD09PVwiZGF5XCImJiFwYXR0ZXJuLnN0YXJET1cpe2xldCBkb3dNYXRjaD1wYXR0ZXJuLmRheU9mV2Vla1soZkRvbVdlZWtEYXkrKGktb2Zmc2V0LTEpKSU3XTtpZihkb3dNYXRjaCYmZG93TWF0Y2gmQU5ZX09DQ1VSUkVOQ0Upe2Rvd01hdGNoPXRoaXMuaXNOdGhXZWVrZGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCxpLW9mZnNldCxkb3dNYXRjaCl9ZWxzZSBpZihkb3dNYXRjaCl7dGhyb3cgbmV3IEVycm9yKGBDcm9uRGF0ZTogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrIGVuY291bnRlcmVkLiAke2Rvd01hdGNofWApfWlmKG9wdGlvbnMubGVnYWN5TW9kZSYmIXBhdHRlcm4uc3RhckRPTSl7bWF0Y2g9bWF0Y2h8fGRvd01hdGNofWVsc2V7bWF0Y2g9bWF0Y2gmJmRvd01hdGNofX1pZihtYXRjaCl7dGhpc1t0YXJnZXRdPWktb2Zmc2V0O3JldHVybiBvcmlnaW5hbFRhcmdldCE9PXRoaXNbdGFyZ2V0XT8yOjF9fXJldHVybiAzfTtDcm9uRGF0ZS5wcm90b3R5cGUucmVjdXJzZT1mdW5jdGlvbihwYXR0ZXJuLG9wdGlvbnMsZG9pbmcpe2NvbnN0IHJlcz10aGlzLmZpbmROZXh0KG9wdGlvbnMsUmVjdXJzaW9uU3RlcHNbZG9pbmddWzBdLHBhdHRlcm4sUmVjdXJzaW9uU3RlcHNbZG9pbmddWzJdKTtpZihyZXM+MSl7bGV0IHJlc2V0TGV2ZWw9ZG9pbmcrMTt3aGlsZShyZXNldExldmVsPFJlY3Vyc2lvblN0ZXBzLmxlbmd0aCl7dGhpc1tSZWN1cnNpb25TdGVwc1tyZXNldExldmVsXVswXV09LVJlY3Vyc2lvblN0ZXBzW3Jlc2V0TGV2ZWxdWzJdO3Jlc2V0TGV2ZWwrK31pZihyZXM9PT0zKXt0aGlzW1JlY3Vyc2lvblN0ZXBzW2RvaW5nXVsxXV0rKzt0aGlzW1JlY3Vyc2lvblN0ZXBzW2RvaW5nXVswXV09LVJlY3Vyc2lvblN0ZXBzW2RvaW5nXVsyXTt0aGlzLmFwcGx5KCk7cmV0dXJuIHRoaXMucmVjdXJzZShwYXR0ZXJuLG9wdGlvbnMsMCl9ZWxzZSBpZih0aGlzLmFwcGx5KCkpe3JldHVybiB0aGlzLnJlY3Vyc2UocGF0dGVybixvcHRpb25zLGRvaW5nLTEpfX1kb2luZys9MTtpZihkb2luZz49UmVjdXJzaW9uU3RlcHMubGVuZ3RoKXtyZXR1cm4gdGhpc31lbHNlIGlmKHRoaXMueWVhcj49M2UzKXtyZXR1cm4gbnVsbH1lbHNle3JldHVybiB0aGlzLnJlY3Vyc2UocGF0dGVybixvcHRpb25zLGRvaW5nKX19O0Nyb25EYXRlLnByb3RvdHlwZS5pbmNyZW1lbnQ9ZnVuY3Rpb24ocGF0dGVybixvcHRpb25zLGhhc1ByZXZpb3VzUnVuKXt0aGlzLnNlY29uZCs9b3B0aW9ucy5pbnRlcnZhbD4xJiZoYXNQcmV2aW91c1J1bj9vcHRpb25zLmludGVydmFsOjE7dGhpcy5tcz0wO3RoaXMuYXBwbHkoKTtyZXR1cm4gdGhpcy5yZWN1cnNlKHBhdHRlcm4sb3B0aW9ucywwKX07Q3JvbkRhdGUucHJvdG90eXBlLmdldERhdGU9ZnVuY3Rpb24oaW50ZXJuYWwpe2lmKGludGVybmFsfHx0aGlzLnR6PT09dm9pZCAwKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXksdGhpcy5ob3VyLHRoaXMubWludXRlLHRoaXMuc2Vjb25kLHRoaXMubXMpfWVsc2V7aWYodHlwZW9mIHRoaXMudHo9PT1cIm51bWJlclwiKXtyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXksdGhpcy5ob3VyLHRoaXMubWludXRlLXRoaXMudHosdGhpcy5zZWNvbmQsdGhpcy5tcykpfWVsc2V7cmV0dXJuIG1pbml0eih0aGlzLnllYXIsdGhpcy5tb250aCsxLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZSx0aGlzLnNlY29uZCx0aGlzLnR6KX19fTtDcm9uRGF0ZS5wcm90b3R5cGUuZ2V0VGltZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldERhdGUoKS5nZXRUaW1lKCl9O2Z1bmN0aW9uIGlzRnVuY3Rpb24odil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KT09PVwiW29iamVjdCBGdW5jdGlvbl1cInx8XCJmdW5jdGlvblwiPT09dHlwZW9mIHZ8fHYgaW5zdGFuY2VvZiBGdW5jdGlvbn1mdW5jdGlvbiB1bnJlZlRpbWVyKHRpbWVyKXtpZih0eXBlb2YgRGVubyE9PVwidW5kZWZpbmVkXCImJnR5cGVvZiBEZW5vLnVucmVmVGltZXIhPT1cInVuZGVmaW5lZFwiKXtEZW5vLnVucmVmVGltZXIodGltZXIpfWVsc2UgaWYodGltZXImJnR5cGVvZiB0aW1lci51bnJlZiE9PVwidW5kZWZpbmVkXCIpe3RpbWVyLnVucmVmKCl9fWNvbnN0IG1heERlbGF5PTMwKjFlMztjb25zdCBzY2hlZHVsZWRKb2JzPVtdO2Z1bmN0aW9uIENyb24ocGF0dGVybixmbk9yT3B0aW9uczEsZm5Pck9wdGlvbnMyKXtpZighKHRoaXMgaW5zdGFuY2VvZiBDcm9uKSl7cmV0dXJuIG5ldyBDcm9uKHBhdHRlcm4sZm5Pck9wdGlvbnMxLGZuT3JPcHRpb25zMil9bGV0IG9wdGlvbnMsZnVuYztpZihpc0Z1bmN0aW9uKGZuT3JPcHRpb25zMSkpe2Z1bmM9Zm5Pck9wdGlvbnMxfWVsc2UgaWYodHlwZW9mIGZuT3JPcHRpb25zMT09PVwib2JqZWN0XCIpe29wdGlvbnM9Zm5Pck9wdGlvbnMxfWVsc2UgaWYoZm5Pck9wdGlvbnMxIT09dm9pZCAwKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBmb3Igb3B0aW9uc0luLiBTaG91bGQgYmUgb25lIG9mIGZ1bmN0aW9uLCBvciBvYmplY3QgKG9wdGlvbnMpLlwiKX1pZihpc0Z1bmN0aW9uKGZuT3JPcHRpb25zMikpe2Z1bmM9Zm5Pck9wdGlvbnMyfWVsc2UgaWYodHlwZW9mIGZuT3JPcHRpb25zMj09PVwib2JqZWN0XCIpe29wdGlvbnM9Zm5Pck9wdGlvbnMyfWVsc2UgaWYoZm5Pck9wdGlvbnMyIT09dm9pZCAwKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBmb3IgZnVuY0luLiBTaG91bGQgYmUgb25lIG9mIGZ1bmN0aW9uLCBvciBvYmplY3QgKG9wdGlvbnMpLlwiKX10aGlzLm5hbWU9b3B0aW9ucz9vcHRpb25zLm5hbWU6dm9pZCAwO3RoaXMub3B0aW9ucz1Dcm9uT3B0aW9ucyhvcHRpb25zKTt0aGlzLl9zdGF0ZXM9e2tpbGw6ZmFsc2UsYmxvY2tpbmc6ZmFsc2UscHJldmlvdXNSdW46dm9pZCAwLGN1cnJlbnRSdW46dm9pZCAwLG9uY2U6dm9pZCAwLGN1cnJlbnRUaW1lb3V0OnZvaWQgMCxtYXhSdW5zOm9wdGlvbnM/b3B0aW9ucy5tYXhSdW5zOnZvaWQgMCxwYXVzZWQ6b3B0aW9ucz9vcHRpb25zLnBhdXNlZDpmYWxzZSxwYXR0ZXJuOnZvaWQgMH07aWYocGF0dGVybiYmKHBhdHRlcm4gaW5zdGFuY2VvZiBEYXRlfHx0eXBlb2YgcGF0dGVybj09PVwic3RyaW5nXCImJnBhdHRlcm4uaW5kZXhPZihcIjpcIik+MCkpe3RoaXMuX3N0YXRlcy5vbmNlPW5ldyBDcm9uRGF0ZShwYXR0ZXJuLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCl9ZWxzZXt0aGlzLl9zdGF0ZXMucGF0dGVybj1uZXcgQ3JvblBhdHRlcm4ocGF0dGVybix0aGlzLm9wdGlvbnMudGltZXpvbmUpfWlmKHRoaXMubmFtZSl7Y29uc3QgZXhpc3Rpbmc9c2NoZWR1bGVkSm9icy5maW5kKGo9PmoubmFtZT09PXRoaXMubmFtZSk7aWYoZXhpc3Rpbmcpe3Rocm93IG5ldyBFcnJvcihcIkNyb246IFRyaWVkIHRvIGluaXRpYWxpemUgbmV3IG5hbWVkIGpvYiAnXCIrdGhpcy5uYW1lK1wiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi5cIil9ZWxzZXtzY2hlZHVsZWRKb2JzLnB1c2godGhpcyl9fWlmKGZ1bmMhPT12b2lkIDApe3RoaXMuZm49ZnVuYzt0aGlzLnNjaGVkdWxlKCl9cmV0dXJuIHRoaXN9Q3Jvbi5wcm90b3R5cGUubmV4dFJ1bj1mdW5jdGlvbihwcmV2KXtjb25zdCBuZXh0PXRoaXMuX25leHQocHJldik7cmV0dXJuIG5leHQ/bmV4dC5nZXREYXRlKCk6bnVsbH07Q3Jvbi5wcm90b3R5cGUubmV4dFJ1bnM9ZnVuY3Rpb24obixwcmV2aW91cyl7aWYobj50aGlzLl9zdGF0ZXMubWF4UnVucyl7bj10aGlzLl9zdGF0ZXMubWF4UnVuc31jb25zdCBlbnVtZXJhdGlvbj1bXTtsZXQgcHJldj1wcmV2aW91c3x8dGhpcy5fc3RhdGVzLmN1cnJlbnRSdW47d2hpbGUobi0tJiYocHJldj10aGlzLm5leHRSdW4ocHJldikpKXtlbnVtZXJhdGlvbi5wdXNoKHByZXYpfXJldHVybiBlbnVtZXJhdGlvbn07Q3Jvbi5wcm90b3R5cGUuZ2V0UGF0dGVybj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZXMucGF0dGVybj90aGlzLl9zdGF0ZXMucGF0dGVybi5wYXR0ZXJuOnZvaWQgMH07Q3Jvbi5wcm90b3R5cGUuaXNSdW5uaW5nPWZ1bmN0aW9uKCl7Y29uc3QgbmV4dFJ1blRpbWU9dGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKTtjb25zdCBpc1J1bm5pbmc9IXRoaXMuX3N0YXRlcy5wYXVzZWQ7Y29uc3QgaXNTY2hlZHVsZWQ9dGhpcy5mbiE9PXZvaWQgMDtjb25zdCBub3RJc0tpbGxlZD0hdGhpcy5fc3RhdGVzLmtpbGw7cmV0dXJuIGlzUnVubmluZyYmaXNTY2hlZHVsZWQmJm5vdElzS2lsbGVkJiZuZXh0UnVuVGltZSE9PW51bGx9O0Nyb24ucHJvdG90eXBlLmlzU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZXMua2lsbH07Q3Jvbi5wcm90b3R5cGUuaXNCdXN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5ibG9ja2luZ307Q3Jvbi5wcm90b3R5cGUuY3VycmVudFJ1bj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bj90aGlzLl9zdGF0ZXMuY3VycmVudFJ1bi5nZXREYXRlKCk6bnVsbH07Q3Jvbi5wcm90b3R5cGUucHJldmlvdXNSdW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuP3RoaXMuX3N0YXRlcy5wcmV2aW91c1J1bi5nZXREYXRlKCk6bnVsbH07Q3Jvbi5wcm90b3R5cGUubXNUb05leHQ9ZnVuY3Rpb24ocHJldil7cHJldj1wcmV2fHxuZXcgRGF0ZTtjb25zdCBuZXh0PXRoaXMuX25leHQocHJldik7aWYobmV4dCl7cmV0dXJuIG5leHQuZ2V0VGltZSgpLXByZXYuZ2V0VGltZSgpfWVsc2V7cmV0dXJuIG51bGx9fTtDcm9uLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGVzLmtpbGw9dHJ1ZTtpZih0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQpe2NsZWFyVGltZW91dCh0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQpfWNvbnN0IGpvYkluZGV4PXNjaGVkdWxlZEpvYnMuaW5kZXhPZih0aGlzKTtpZihqb2JJbmRleD49MCl7c2NoZWR1bGVkSm9icy5zcGxpY2Uoam9iSW5kZXgsMSl9fTtDcm9uLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3N0YXRlcy5wYXVzZWQ9dHJ1ZTtyZXR1cm4hdGhpcy5fc3RhdGVzLmtpbGx9O0Nyb24ucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3RoaXMuX3N0YXRlcy5wYXVzZWQ9ZmFsc2U7cmV0dXJuIXRoaXMuX3N0YXRlcy5raWxsfTtDcm9uLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihmdW5jKXtpZihmdW5jJiZ0aGlzLmZuKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uOiBJdCBpcyBub3QgYWxsb3dlZCB0byBzY2hlZHVsZSB0d28gZnVuY3Rpb25zIHVzaW5nIHRoZSBzYW1lIENyb25lciBpbnN0YW5jZS5cIil9ZWxzZSBpZihmdW5jKXt0aGlzLmZuPWZ1bmN9bGV0IHdhaXRNcz10aGlzLm1zVG9OZXh0KCk7Y29uc3QgdGFyZ2V0PXRoaXMubmV4dFJ1bih0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bik7aWYod2FpdE1zPT09bnVsbHx8d2FpdE1zPT09dW5kZWZpbmVkfHxpc05hTih3YWl0TXMpfHx0YXJnZXQ9PT1udWxsKXJldHVybiB0aGlzO2lmKHdhaXRNcz5tYXhEZWxheSl7d2FpdE1zPW1heERlbGF5fXRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLl9jaGVja1RyaWdnZXIodGFyZ2V0KSx3YWl0TXMpO2lmKHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCYmdGhpcy5vcHRpb25zLnVucmVmKXt1bnJlZlRpbWVyKHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCl9cmV0dXJuIHRoaXN9O0Nyb24ucHJvdG90eXBlLl90cmlnZ2VyPWFzeW5jIGZ1bmN0aW9uKGluaXRpYXRpb25EYXRlKXt0aGlzLl9zdGF0ZXMuYmxvY2tpbmc9dHJ1ZTt0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bj1uZXcgQ3JvbkRhdGUodm9pZCAwLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7aWYodGhpcy5vcHRpb25zLmNhdGNoKXt0cnl7YXdhaXQgdGhpcy5mbih0aGlzLHRoaXMub3B0aW9ucy5jb250ZXh0KX1jYXRjaChfZSl7aWYoaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuY2F0Y2gpKXt0aGlzLm9wdGlvbnMuY2F0Y2goX2UsdGhpcyl9fX1lbHNle2F3YWl0IHRoaXMuZm4odGhpcyx0aGlzLm9wdGlvbnMuY29udGV4dCl9dGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuPW5ldyBDcm9uRGF0ZShpbml0aWF0aW9uRGF0ZSx0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXQpO3RoaXMuX3N0YXRlcy5ibG9ja2luZz1mYWxzZX07Q3Jvbi5wcm90b3R5cGUudHJpZ2dlcj1hc3luYyBmdW5jdGlvbigpe2F3YWl0IHRoaXMuX3RyaWdnZXIoKX07Q3Jvbi5wcm90b3R5cGUuX2NoZWNrVHJpZ2dlcj1mdW5jdGlvbih0YXJnZXQpe2NvbnN0IG5vdz1uZXcgRGF0ZSxzaG91bGRSdW49IXRoaXMuX3N0YXRlcy5wYXVzZWQmJm5vdy5nZXRUaW1lKCk+PXRhcmdldCxpc0Jsb2NrZWQ9dGhpcy5fc3RhdGVzLmJsb2NraW5nJiZ0aGlzLm9wdGlvbnMucHJvdGVjdDtpZihzaG91bGRSdW4mJiFpc0Jsb2NrZWQpe3RoaXMuX3N0YXRlcy5tYXhSdW5zLS07dGhpcy5fdHJpZ2dlcigpfWVsc2V7aWYoc2hvdWxkUnVuJiZpc0Jsb2NrZWQmJmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnByb3RlY3QpKXtzZXRUaW1lb3V0KCgpPT50aGlzLm9wdGlvbnMucHJvdGVjdCh0aGlzKSwwKX19dGhpcy5zY2hlZHVsZSgpfTtDcm9uLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbihwcmV2KXtsZXQgaGFzUHJldmlvdXNSdW49cHJldnx8dGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4/dHJ1ZTpmYWxzZTtsZXQgc3RhcnRBdEluRnV0dXJlV2l0aEludGVydmFsPWZhbHNlO2lmKCFwcmV2JiZ0aGlzLm9wdGlvbnMuc3RhcnRBdCYmdGhpcy5vcHRpb25zLmludGVydmFsKXtbcHJldixoYXNQcmV2aW91c1J1bl09dGhpcy5fY2FsY3VsYXRlUHJldmlvdXNSdW4ocHJldixoYXNQcmV2aW91c1J1bik7c3RhcnRBdEluRnV0dXJlV2l0aEludGVydmFsPSFwcmV2P3RydWU6ZmFsc2V9cHJldj1uZXcgQ3JvbkRhdGUocHJldix0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXQpO2lmKHRoaXMub3B0aW9ucy5zdGFydEF0JiZwcmV2JiZwcmV2LmdldFRpbWUoKTx0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCkpe3ByZXY9dGhpcy5vcHRpb25zLnN0YXJ0QXR9bGV0IG5leHRSdW49dGhpcy5fc3RhdGVzLm9uY2V8fG5ldyBDcm9uRGF0ZShwcmV2LHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7aWYoIXN0YXJ0QXRJbkZ1dHVyZVdpdGhJbnRlcnZhbCYmbmV4dFJ1biE9PXRoaXMuX3N0YXRlcy5vbmNlKXtuZXh0UnVuPW5leHRSdW4uaW5jcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucyxoYXNQcmV2aW91c1J1bil9aWYodGhpcy5fc3RhdGVzLm9uY2UmJnRoaXMuX3N0YXRlcy5vbmNlLmdldFRpbWUoKTw9cHJldi5nZXRUaW1lKCkpe3JldHVybiBudWxsfWVsc2UgaWYobmV4dFJ1bj09PW51bGx8fHRoaXMuX3N0YXRlcy5tYXhSdW5zPD0wfHx0aGlzLl9zdGF0ZXMua2lsbHx8dGhpcy5vcHRpb25zLnN0b3BBdCYmbmV4dFJ1bi5nZXRUaW1lKCk+PXRoaXMub3B0aW9ucy5zdG9wQXQuZ2V0VGltZSgpKXtyZXR1cm4gbnVsbH1lbHNle3JldHVybiBuZXh0UnVufX07Q3Jvbi5wcm90b3R5cGUuX2NhbGN1bGF0ZVByZXZpb3VzUnVuPWZ1bmN0aW9uKHByZXYsaGFzUHJldmlvdXNSdW4pe2NvbnN0IG5vdz1uZXcgQ3JvbkRhdGUodW5kZWZpbmVkLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7aWYodGhpcy5vcHRpb25zLnN0YXJ0QXQuZ2V0VGltZSgpPD1ub3cuZ2V0VGltZSgpKXtwcmV2PXRoaXMub3B0aW9ucy5zdGFydEF0O2xldCBwcmV2VGltZVBsdXNJbnRlcnZhbD1wcmV2LmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwqMWUzO3doaWxlKHByZXZUaW1lUGx1c0ludGVydmFsPD1ub3cuZ2V0VGltZSgpKXtwcmV2PW5ldyBDcm9uRGF0ZShwcmV2LHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCkuaW5jcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucyx0cnVlKTtwcmV2VGltZVBsdXNJbnRlcnZhbD1wcmV2LmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwqMWUzfWhhc1ByZXZpb3VzUnVuPXRydWV9cmV0dXJuW3ByZXYsaGFzUHJldmlvdXNSdW5dfTtDcm9uLkNyb249Q3JvbjtDcm9uLnNjaGVkdWxlZEpvYnM9c2NoZWR1bGVkSm9icztleHBvcnR7Q3JvbixDcm9uIGFzIGRlZmF1bHQsc2NoZWR1bGVkSm9ic307IiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudEVtbWl0ZXIsIFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VFdmVudFNlcnZpY2U8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxvY2FsSGFuZGxlcnM6IFNldDxTY3JpcHRFdmVudEhhbmRsZXI+ID0gbmV3IFNldCgpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkaW50ZXJuYWxIYW5kbGVyczogU2V0PFNjcmlwdEV2ZW50SGFuZGxlcj4gPSBuZXcgU2V0KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5ICRyZW1vdGVIYW5kbGVyczogU2V0PFNjcmlwdEV2ZW50SGFuZGxlcj4gPSBuZXcgU2V0KCk7XG4gICAgcHJvdGVjdGVkICRpbnRlcm5hbEV2ZW50TmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgJGV2ZW50RW1taXRlcjogRXZlbnRFbW1pdGVyKSB7fVxuXG4gICAgcHVibGljIG9uPEUgZXh0ZW5kcyBrZXlvZiBUPihldmVudE5hbWU6IEUsIGNhbGxiYWNrOiAoYm9keTogUGFyYW1ldGVyczxUW0VdPlswXSkgPT4gUmV0dXJuVHlwZTxUW0VdPik6IFNjcmlwdEV2ZW50SGFuZGxlcjtcbiAgICBwdWJsaWMgb248RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIFQ+LCBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxTY3JpcHRFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uKGV2ZW50TmFtZSwgd3JhcHBlcik7XG4gICAgICAgIHRoaXMuJGxvY2FsSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuICAgIHB1YmxpYyBvbmNlPEUgZXh0ZW5kcyBrZXlvZiBUPihldmVudE5hbWU6IEUsIGNhbGxiYWNrOiAoYm9keTogUGFyYW1ldGVyczxUW0VdPlswXSkgPT4gUmV0dXJuVHlwZTxUW0VdPik6IFNjcmlwdEV2ZW50SGFuZGxlcjtcbiAgICBwdWJsaWMgb25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pOiBTY3JpcHRFdmVudEhhbmRsZXI7XG4gICAgcHVibGljIG9uY2U8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIFQ+LCBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSAoLi4uYXJnczogYW55W10pID0+IGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSA8U2NyaXB0RXZlbnRIYW5kbGVyPnRoaXMuJGV2ZW50RW1taXRlci5vbmNlKGV2ZW50TmFtZSwgd3JhcHBlcik7XG4gICAgICAgIHRoaXMuJGxvY2FsSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgYm9keT86IFRbRV0pOiB2b2lkO1xuICAgIHB1YmxpYyBlbWl0PEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRSwgYm9keT86IHVua25vd24pOiB2b2lkO1xuICAgIHB1YmxpYyBlbWl0PEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRSwgYm9keT86IHVua25vd24pIHtcbiAgICAgICAgdGhpcy4kZXZlbnRFbW1pdGVyLmVtaXQoZXZlbnROYW1lLCBib2R5KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgJG9uSW50ZXJuYWwoZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBpZiAoIXRoaXMuJGludGVybmFsRXZlbnROYW1lcy5oYXMoZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uKGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgICAgIHRoaXMuJGludGVybmFsSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkICRvbmNlSW50ZXJuYWwoZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBpZiAoIXRoaXMuJGludGVybmFsRXZlbnROYW1lcy5oYXMoZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxTY3JpcHRFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uY2UoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgUlBDUmVzdWx0LCBSUENDYWxsT3B0aW9ucywgU2NyaXB0UlBDSGFuZGxlciwgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCwgUlBDX1JFU1VMVF9USU1FT1VULCBSUENfUkVTVUxUX1VOS05PV04gfSBmcm9tICcuLi8uLi9hcHAvY29uc3RhbnRzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTWFuZ29FcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCYXNlUlBDU2VydmljZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByb3RlY3RlZCByZWFkb25seSAkbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJFRJTUVPVVQgPSAyMDAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGxvY2FsSGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0UlBDSGFuZGxlcj4oKTtcblxuICAgIHB1YmxpYyBhc3luYyBjYWxsPEUgZXh0ZW5kcyBrZXlvZiBUPihcbiAgICAgICAgcnBjTmFtZTogRSxcbiAgICAgICAgYm9keT86IFBhcmFtZXRlcnM8VFtFXT5bMF0sXG4gICAgICAgIG9wdGlvbnM/OiBSUENDYWxsT3B0aW9ucyxcbiAgICApOiBQcm9taXNlPFJQQ1Jlc3VsdDxSZXR1cm5UeXBlPFRbRV0+Pj47XG4gICAgcHVibGljIGFzeW5jIGNhbGw8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZTogRSwgYm9keT86IHVua25vd24sIG9wdGlvbnM/OiBSUENDYWxsT3B0aW9ucyk6IFByb21pc2U8UlBDUmVzdWx0PHVua25vd24+PjtcbiAgICBwdWJsaWMgYXN5bmMgY2FsbDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBib2R5PzogdW5rbm93biwgb3B0aW9uczogUlBDQ2FsbE9wdGlvbnMgPSB7IHRpbWVvdXQ6IHRoaXMuJFRJTUVPVVQgfSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLiRsb2NhbEhhbmRsZXJzLmdldCg8c3RyaW5nPnJwY05hbWUpPy5oYW5kbGVyO1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoUlBDX1JFU1VMVF9USU1FT1VUKTtcbiAgICAgICAgICAgIH0sIG9wdGlvbnMudGltZW91dCA/PyB0aGlzLiRUSU1FT1VUKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyKGJvZHkpO1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiB0cnVlLCBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5TdWNjZXNzLCBib2R5OiByZXN1bHQgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTWFuZ29FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgZGV0YWlsczogZXJyb3IuZGV0YWlscyB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKFJQQ19SRVNVTFRfVU5LTk9XTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgb25SZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBUPihycGNOYW1lOiBFLCBoYW5kbGVyOiAoYm9keTogUGFyYW1ldGVyczxUW0VdPlswXSkgPT4gUmV0dXJuVHlwZTxUW0VdPik6IFNjcmlwdFJQQ0hhbmRsZXI7XG4gICAgcHVibGljIG9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4pOiBTY3JpcHRSUENIYW5kbGVyO1xuICAgIHB1YmxpYyBvblJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZTogRSwgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+KSB7XG4gICAgICAgIGlmICh0aGlzLiRsb2NhbEhhbmRsZXJzLmhhcyhycGNOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIFJQQy4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDSGFuZGxlckFscmVhZHlFeGlzdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnBjSGFuZGxlcjogU2NyaXB0UlBDSGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2FsSGFuZGxlcnMuZGVsZXRlKHJwY05hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWU6IHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5zZXQocnBjTmFtZSwgcnBjSGFuZGxlcik7XG5cbiAgICAgICAgcmV0dXJuIHJwY0hhbmRsZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgUlBDU2VydmljZSwgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgUlBDX1NFUlZJQ0UsIHR5cGUgTG9nZ2VyU2VydmljZSwgdHlwZSBSUENDYWxsT3B0aW9ucyB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgeyBHTE9CQUxfQVBQX0NPTlRBSU5FUiwgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBNYW5nb1BsdWdpbiB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGxheWVyUHJvdG90eXBlUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoR0xPQkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsYXllclNlcnZpY2U6IFNlcnZlck11bHRpcGxheWVyU2VydmljZTtcblxuICAgIHB1YmxpYyBiZWZvcmVMb2FkKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgUGxheWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuZ2V0UGxheWVyKCk7XG5cbiAgICAgICAgUGxheWVyLnByb3RvdHlwZS5lbWl0V2ViVmlldyA9IGZ1bmN0aW9uIChpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU6IHN0cmluZywgYm9keT86IHVua25vd24pIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJhdygnU0VSVkVSOjpFTUlUX1dFQlZJRVcnLCB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBycGNTZXJ2aWNlID0gdGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0PFJQQ1NlcnZpY2U+KFJQQ19TRVJWSUNFKTtcblxuICAgICAgICBQbGF5ZXIucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAocnBjTmFtZTogc3RyaW5nLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gcnBjU2VydmljZS5jYWxsUGxheWVyKHRoaXMsIHJwY05hbWUsIGJvZHksIG9wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIFBsYXllci5wcm90b3R5cGUuY2FsbFdlYlZpZXcgPSBmdW5jdGlvbiAoaWQ6IHN0cmluZyB8IG51bWJlciwgcnBjTmFtZTogc3RyaW5nLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gcnBjU2VydmljZS5jYWxsV2ViVmlldyh0aGlzLCBpZCwgcnBjTmFtZSwgYm9keSwgb3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3flBsYXllciBwcm90b3R5cGUgbWV0aG9kcyBkZWZpbmVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOdW1iZXIgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0VmFsdWVQaXBlPFQgPSB1bmtub3duLCBSID0gdW5rbm93bj4gaW1wbGVtZW50cyBQaXBlPFQsIFQgfCBSPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VmFsdWU6IFQpIHt9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBUKSB7XG4gICAgICAgIGlmIChpc05pbCh2YWx1ZSkgfHwgKGlzTnVtYmVyKHZhbHVlKSAmJiBpc05hTig8bnVtYmVyPnZhbHVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5ELCB0eXBlIE1hbmdvUGx1Z2luLCBSUENfUkVTVUxUX1VOS05PV04sIEV2ZW50RGVzdGluYXRpb24gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7XG4gICAgRVZFTlRfU0VSVklDRSxcbiAgICBNYW5nb0Vycm9yLFxuICAgIFJQQ19TRVJWSUNFLFxuICAgIFJQQ1Jlc3VsdFN0YXR1cyxcbiAgICB0eXBlIFJQQ1Jlc3VsdCxcbiAgICBMT0dHRVJfU0VSVklDRSxcbiAgICB0eXBlIExvZ2dlclNlcnZpY2UsXG59IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50U2VydmljZSwgUlBDU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUlBDUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoRVZFTlRfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZTtcbiAgICBAaW5qZWN0KFJQQ19TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IHJwY1NlcnZpY2U6IFJQQ1NlcnZpY2U7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGJlZm9yZUxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLm9uUGxheWVyKCdSUEM6OkNBTExfU0VSVkVSJywgYXN5bmMgKHBsYXllciwgYm9keSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwbGF5ZXIudmFsaWQpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgcnBjSGFuZGxlciA9XG4gICAgICAgICAgICAgICAgYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uQ2xpZW50XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5ycGNTZXJ2aWNlLiRjbGllbnRIYW5kbGVycy5nZXQoYm9keS5ycGNOYW1lKVxuICAgICAgICAgICAgICAgICAgICA6IGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXdcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnJwY1NlcnZpY2UuJHdlYlZpZXdIYW5kbGVycy5nZXQoYCR7Ym9keS53ZWJWaWV3SWR9Ojoke2JvZHkucnBjTmFtZX1gKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghcnBjSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIGlmIChib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIHBsYXllci5lbWl0V2ViVmlldyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkud2ViVmlld0lkIGFzIHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2JvZHkuaWR9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5DbGllbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRSYXcoYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJSZXN1bHQgPSBhd2FpdCBycGNIYW5kbGVyLmhhbmRsZXIocGxheWVyLCBib2R5LmJvZHkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJwY1Jlc3VsdDogUlBDUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5TdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBoYW5kbGVyUmVzdWx0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRXZWJWaWV3KGJvZHkud2ViVmlld0lkIGFzIHN0cmluZyB8IG51bWJlciwgYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBycGNSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBsYXllci5lbWl0UmF3KGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2JvZHkuaWR9YCwgcnBjUmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE1hbmdvRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJwY1Jlc3VsdDogUlBDUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRldGFpbHM6IGVycm9yLmRldGFpbHMgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFdlYlZpZXcoYm9keS53ZWJWaWV3SWQgYXMgc3RyaW5nIHwgbnVtYmVyLCBgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIHJwY1Jlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFdlYlZpZXcoYm9keS53ZWJWaWV3SWQgYXMgc3RyaW5nIHwgbnVtYmVyLCBgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIFJQQ19SRVNVTFRfVU5LTk9XTik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLkNsaWVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNYW5nb0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBycGNSZXN1bHQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogeyBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkZXRhaWxzOiBlcnJvci5kZXRhaWxzIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRSYXcoYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBycGNSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRSYXcoYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBSUENfUkVTVUxUX1VOS05PV04pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGB+bHd+UlBDIGhhbmRsZXJzIHJlZ2lzdGVyZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBHTE9CQUxfQVBQX0NPTlRBSU5FUiwgSU5URVJOQUxfQVBQX0NPTlRBSU5FUiwgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBNYW5nb1BsdWdpbiB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHsgRVZFTlRfU0VSVklDRSwgTE9HR0VSX1NFUlZJQ0UsIFJQQ19TRVJWSUNFIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IFNlcnZlckV2ZW50U2VydmljZSwgU2VydmVyTG9nZ2VyU2VydmljZSwgU2VydmVyUlBDU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB0eXBlIHsgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTZXJ2ZXJBbHRNdWx0aXBsYXllclNlcnZjZVYxLCBTZXJ2ZXJBbHRNdWx0aXBsYXllclNlcnZjZVYyIH0gZnJvbSAnLi4vbXVsdGlwbGF5ZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VydmljZUJpbmRlclBsdWdpbiBpbXBsZW1lbnRzIE1hbmdvUGx1Z2luIHtcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxBcHBDb250YWluZXI6IENvbnRhaW5lcjtcbiAgICBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuXG4gICAgcHVibGljIGFzeW5jIG9uQnVpbGQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoTE9HR0VSX1NFUlZJQ0UpLnRvKFNlcnZlckxvZ2dlclNlcnZpY2UpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChFVkVOVF9TRVJWSUNFKS50byhTZXJ2ZXJFdmVudFNlcnZpY2UpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChSUENfU0VSVklDRSkudG8oU2VydmVyUlBDU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChMT0dHRVJfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldChMT0dHRVJfU0VSVklDRSkpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRVZFTlRfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldChFVkVOVF9TRVJWSUNFKSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChSUENfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldChSUENfU0VSVklDRSkpO1xuXG4gICAgICAgIGNvbnN0IGxvZ2dlclNlcnZpY2UgPSB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQ8U2VydmVyTG9nZ2VyU2VydmljZT4oTE9HR0VSX1NFUlZJQ0UpO1xuICAgICAgICBsb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fkludGVybmFsIHNlcnZpY2VzIGJpbmRlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHRpbWV9bXMpYCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFdmVudFNlcnZpY2UsIE1VTFRJUExBWUVSX1NFUlZJQ0UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBJTlRFUk5BTF9FVkVOVFMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudFNlcnZpY2UsIE11bHRpcGxheWVyUGxheWVyLCBTZXJ2ZXJFdmVudEVtbWl0ZXIsIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VydmVyRXZlbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZUV2ZW50U2VydmljZTxNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJFdmVudD4gaW1wbGVtZW50cyBFdmVudFNlcnZpY2Uge1xuICAgIHByaXZhdGUgJHJhZ2VFdmVudHM6IFNlcnZlckV2ZW50RW1taXRlcjtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBtdWx0aXBsYXllclNlcnZpY2U6IFNlcnZlck11bHRpcGxheWVyU2VydmljZSkge1xuICAgICAgICBzdXBlcihtdWx0aXBsYXllclNlcnZpY2UuRXZlbnRzKTtcbiAgICAgICAgdGhpcy4kcmFnZUV2ZW50cyA9IG11bHRpcGxheWVyU2VydmljZS5FdmVudHM7XG4gICAgICAgIHRoaXMuJGludGVybmFsRXZlbnROYW1lcyA9IG5ldyBTZXQoT2JqZWN0LnZhbHVlcyhJTlRFUk5BTF9FVkVOVFMpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXI8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIFBsYXllck1wPihcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKHBsYXllcjogVSwgYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4gICAgKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IChwbGF5ZXI6IFUsIC4uLmFyZ3M6IHVua25vd25bXSkgPT4gY2FsbGJhY2socGxheWVyLCBhcmdzWzBdKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gdGhpcy4kcmFnZUV2ZW50cy5vblBsYXllcihldmVudE5hbWUsIHdyYXBwZXIpO1xuICAgICAgICB0aGlzLiRyZW1vdGVIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25jZVBsYXllcjxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKHBsYXllcjogVSwgLi4uYXJnczogdW5rbm93bltdKSA9PiBjYWxsYmFjayhwbGF5ZXIsIGFyZ3NbMF0hKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gdGhpcy4kcmFnZUV2ZW50cy5vbmNlUGxheWVyKGV2ZW50TmFtZSwgd3JhcHBlcik7XG4gICAgICAgIHRoaXMuJHJlbW90ZUhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW90ZTxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vblBsYXllcihldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25jZVJlbW90ZTxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vbmNlUGxheWVyKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0UGxheWVyczxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBwbGF5ZXJzOiBVW10sXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgcGxheWVyIG9mIHBsYXllcnMpIHtcbiAgICAgICAgICAgIHBsYXllci5jYWxsKGV2ZW50TmFtZSwgW2JvZHldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0UGxheWVyc1VucmVsaWFibGU8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgcGxheWVyczogVVtdLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9QbGF5ZXJFdmVudD4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgdXNlcyBjYWxsVW5yZWxpYWJsZSBmb3IgdW5yZWxpYWJsZSBtZXNzYWdlc1xuICAgICAgICBmb3IgKGNvbnN0IHBsYXllciBvZiBwbGF5ZXJzKSB7XG4gICAgICAgICAgICBwbGF5ZXIuY2FsbFVucmVsaWFibGUoZXZlbnROYW1lLCBbYm9keV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRBbGxQbGF5ZXJzPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PiwgYm9keT86IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgbXAucGxheWVycy5jYWxsKGV2ZW50TmFtZSwgW2JvZHldKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdEFsbFBsYXllcnNVbnJlbGlhYmxlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PiwgYm9keT86IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgbXAucGxheWVycy5jYWxsVW5yZWxpYWJsZShldmVudE5hbWUsIFtib2R5XSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKHBsYXllcjogVSwgYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4gICAgKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25QbGF5ZXIoPHN0cmluZz5gU0VSVkVSOjpPTl9XRUJWSUVXXyR7ZXZlbnROYW1lfV8ke2lkfWAsIDxhbnk+Y2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbmNlV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKHBsYXllcjogVSwgYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4gICAgKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZVBsYXllcig8c3RyaW5nPmBTRVJWRVI6Ok9OX1dFQlZJRVdfJHtldmVudE5hbWV9XyR7aWR9YCwgPGFueT5jYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRXZWJWaWV3czxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBwbGF5ZXJzOiBVW10sXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1dlYlZpZXdFdmVudD4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICk6IHZvaWQge1xuICAgICAgICAoPEV2ZW50U2VydmljZT50aGlzKS5lbWl0UGxheWVycyhwbGF5ZXJzLCAnU0VSVkVSOjpFTUlUX1dFQlZJRVcnLCB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgIHBheWxvYWQ6IGJvZHksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0QWxsV2ViVmlld3M8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1dlYlZpZXdFdmVudD4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICk6IHZvaWQge1xuICAgICAgICAoPEV2ZW50U2VydmljZT50aGlzKS5lbWl0QWxsUGxheWVycygnU0VSVkVSOjpFTUlUX1dFQlZJRVcnLCB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgIHBheWxvYWQ6IGJvZHksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0QWxsV2ViVmlld3NVbnJlbGlhYmxlPEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9XZWJWaWV3RXZlbnQ+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICApOiB2b2lkIHtcbiAgICAgICAgKDxFdmVudFNlcnZpY2U+dGhpcykuZW1pdEFsbFBsYXllcnNVbnJlbGlhYmxlKCdTRVJWRVI6OkVNSVRfV0VCVklFVycsIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgcGF5bG9hZDogYm9keSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmFnZU1QIHNlcnZlciBldmVudHNcbiAgICBwdWJsaWMgb25QbGF5ZXJKb2luKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJKb2luJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclF1aXQoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBleGl0VHlwZTogc3RyaW5nLCByZWFzb246IHN0cmluZykgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJRdWl0JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclJlYWR5KGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJSZWFkeScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJEZWF0aChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHJlYXNvbjogbnVtYmVyLCBraWxsZXI/OiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJEZWF0aCcsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJTcGF3bihjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyU3Bhd24nLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyQ2hhdChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHRleHQ6IHN0cmluZykgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJDaGF0JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckNvbW1hbmQoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBjb21tYW5kOiBzdHJpbmcpID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyQ29tbWFuZCcsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJFbnRlclZlaGljbGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCB2ZWhpY2xlOiBWZWhpY2xlTXAsIHNlYXQ6IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlclZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdFZlaGljbGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCB2ZWhpY2xlOiBWZWhpY2xlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdFZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyU3RhcnRFbnRlclZlaGljbGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCB2ZWhpY2xlOiBWZWhpY2xlTXAsIHNlYXQ6IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJTdGFydEVudGVyVmVoaWNsZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJTdGFydEV4aXRWZWhpY2xlKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgdmVoaWNsZTogVmVoaWNsZU1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclN0YXJ0RXhpdFZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyV2VhcG9uQ2hhbmdlKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgb2xkV2VhcG9uOiBudW1iZXIsIG5ld1dlYXBvbjogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllcldlYXBvbkNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJEYW1hZ2UoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBoZWFsdGhMb3NzOiBudW1iZXIsIGFybW9yTG9zczogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckRhbWFnZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25WZWhpY2xlRGVhdGgoY2FsbGJhY2s6ICh2ZWhpY2xlOiBWZWhpY2xlTXAsIGhhc2g6IG51bWJlciwga2lsbGVyPzogUGxheWVyTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigndmVoaWNsZURlYXRoJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblZlaGljbGVEYW1hZ2UoY2FsbGJhY2s6ICh2ZWhpY2xlOiBWZWhpY2xlTXAsIGJvZHlIZWFsdGhMb3NzOiBudW1iZXIsIGVuZ2luZUhlYWx0aExvc3M6IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCd2ZWhpY2xlRGFtYWdlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckVudGVyQ29sc2hhcGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBjb2xzaGFwZTogQ29sc2hhcGVNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlckNvbHNoYXBlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckV4aXRDb2xzaGFwZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGNvbHNoYXBlOiBDb2xzaGFwZU1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckV4aXRDb2xzaGFwZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJFbnRlckNoZWNrcG9pbnQoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBjaGVja3BvaW50OiBDaGVja3BvaW50TXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRW50ZXJDaGVja3BvaW50JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckV4aXRDaGVja3BvaW50KGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgY2hlY2twb2ludDogQ2hlY2twb2ludE1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckV4aXRDaGVja3BvaW50JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEFsaWFzZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBwdWJsaWMgb25QbGF5ZXJDb25uZWN0KGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uUGxheWVySm9pbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRGlzY29ubmVjdChjYWxsYmFjazogKGNvbnRleHQ6IHsgcGxheWVyOiBQbGF5ZXJNcDsgZXhpdFR5cGU6IHN0cmluZzsgcmVhc29uOiBzdHJpbmcgfSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJRdWl0JywgKHBsYXllcjogUGxheWVyTXAsIGV4aXRUeXBlOiBzdHJpbmcsIHJlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayh7IHBsYXllciwgZXhpdFR5cGUsIHJlYXNvbiB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBJTlRFUk5BTF9FVkVOVFMgPSB7XG4gICAgU0NSSVBUX1JQQzogJ3NjcmlwdFJQQycsXG4gICAgU0NSSVBUX1JQQ19BTlNXRVI6ICdzY3JpcHRSUENBbnN3ZXInLFxuICAgIFNFUlZFUl9TVEFSVEVEOiAnc2VydmVyU3RhcnRlZCcsXG4gICAgQ09OTkVDVElPTl9RVUVVRV9BREQ6ICdjb25uZWN0aW9uUXVldWVBZGQnLFxuICAgIENPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFOiAnY29ubmVjdGlvblF1ZXVlUmVtb3ZlJyxcbiAgICBQTEFZRVJfQ09OTkVDVDogJ3BsYXllckNvbm5lY3QnLFxuICAgIFBMQVlFUl9DT05ORUNUX0RFTklFRDogJ3BsYXllckNvbm5lY3REZW5pZWQnLFxuICAgIFBMQVlFUl9ESVNDT05ORUNUOiAncGxheWVyRGlzY29ubmVjdCcsXG4gICAgUExBWUVSX0RBTUFHRTogJ3BsYXllckRhbWFnZScsXG4gICAgUExBWUVSX0RFQVRIOiAncGxheWVyRGVhdGgnLFxuICAgIFBMQVlFUl9IRUFMOiAncGxheWVySGVhbCcsXG4gICAgUExBWUVSX0NPTlRST0xfUkVRVUVTVDogJ3BsYXllckNvbnRyb2xSZXF1ZXN0JyxcbiAgICBQTEFZRVJfSU5URVJJT1JfQ0hBTkdFOiAncGxheWVySW50ZXJpb3JDaGFuZ2UnLFxuICAgIFBMQVlFUl9ESU1FTlNJT05fQ0hBTkdFOiAncGxheWVyRGltZW5zaW9uQ2hhbmdlJyxcbiAgICBQTEFZRVJfV0VBUE9OX0NIQU5HRTogJ3BsYXllcldlYXBvbkNoYW5nZScsXG4gICAgUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUOiAncGxheWVyU3luY2VkU2NlbmVSZXF1ZXN0JyxcbiAgICBQTEFZRVJfU1lOQ0VEX1NDRU5FX1NUQVJUOiAncGxheWVyU3luY2VkU2NlbmVTdGFydCcsXG4gICAgUExBWUVSX1NZTkNFRF9TQ0VORV9TVE9QOiAncGxheWVyU3luY2VkU2NlbmVTdG9wJyxcbiAgICBQTEFZRVJfU1lOQ0VEX1NDRU5FX1VQREFURTogJ3BsYXllclN5bmNlZFNjZW5lVXBkYXRlJyxcbiAgICBQTEFZRVJfU1BBV046ICdwbGF5ZXJTcGF3bicsXG4gICAgUExBWUVSX0FOSU1BVElPTl9DSEFOR0U6ICdwbGF5ZXJBbmltYXRpb25DaGFuZ2UnLFxuICAgIFBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQ6ICdwbGF5ZXJWZWhpY2xlRW50ZXJlZCcsXG4gICAgUExBWUVSX1NUQVJUX1ZFSElDTEVfRU5URVI6ICdwbGF5ZXJTdGFydFZlaGljbGVFbnRlcicsXG4gICAgUExBWUVSX1ZFSElDTEVfTEVGVDogJ3BsYXllclZlaGljbGVMZWZ0JyxcbiAgICBQTEFZRVJfVkVISUNMRV9TRUFUX0NIQU5HRTogJ3BsYXllclZlaGljbGVTZWF0Q2hhbmdlJyxcbiAgICBQRURfSEVBTDogJ3BlZEhlYWwnLFxuICAgIFBFRF9ERUFUSDogJ3BlZERlYXRoJyxcbiAgICBQRURfREFNQUdFOiAncGVkRGFtYWdlJyxcbiAgICBWRUhJQ0xFX0RFU1RST1k6ICd2ZWhpY2xlRGVzdHJveScsXG4gICAgVkVISUNMRV9BVFRBQ0g6ICd2ZWhpY2xlQXR0YWNoJyxcbiAgICBWRUhJQ0xFX0RFVEFDSDogJ3ZlaGljbGVEZXRhY2gnLFxuICAgIFZFSElDTEVfREFNQUdFOiAndmVoaWNsZURhbWFnZScsXG4gICAgVkVISUNMRV9TSVJFTl9TVEFURV9DSEFOR0U6ICd2ZWhpY2xlU2lyZW5TdGF0ZUNoYW5nZScsXG4gICAgVkVISUNMRV9IT1JOX1NUQVRFX0NIQU5HRTogJ3ZlaGljbGVIb3JuU3RhdGVDaGFuZ2UnLFxuICAgIFZPSUNFX0NPTk5FQ1RJT046ICd2b2ljZUNvbm5lY3Rpb24nLFxuICAgIENMSUVOVF9PQkpFQ1RfREVMRVRFOiAnY2xpZW50T2JqZWN0RGVsZXRlJyxcbiAgICBDTElFTlRfT0JKRUNUX1JFUVVFU1Q6ICdjbGllbnRPYmplY3RSZXF1ZXN0JyxcbiAgICBCQVNFX09CSkVDVF9DUkVBVEU6ICdiYXNlT2JqZWN0Q3JlYXRlJyxcbiAgICBCQVNFX09CSkVDVF9SRU1PVkU6ICdiYXNlT2JqZWN0UmVtb3ZlJyxcbiAgICBORVRfT1dORVJfQ0hBTkdFOiAnbmV0T3duZXJDaGFuZ2UnLFxuICAgIFdFQVBPTl9EQU1BR0U6ICd3ZWFwb25EYW1hZ2UnLFxuICAgIE1FVEFfQ0hBTkdFOiAnbWV0YUNoYW5nZScsXG4gICAgTE9DQUxfTUVUQV9DSEFOR0U6ICdsb2NhbE1ldGFDaGFuZ2UnLFxuICAgIFNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0U6ICdzdHJlYW1TeW5jZWRNZXRhQ2hhbmdlJyxcbiAgICBHTE9CQUxfTUVUQV9DSEFOR0U6ICdnbG9iYWxNZXRhQ2hhbmdlJyxcbiAgICBHTE9CQUxfU1lOQ0VEX01FVEFfQ0hBTkdFOiAnZ2xvYmFsU3luY2VkTWV0YUNoYW5nZScsXG4gICAgQ09OU09MRV9DT01NQU5EOiAnY29uc29sZUNvbW1hbmQnLFxuICAgIEVSUk9SOiAnZXJyb3InLFxuICAgIENPTF9TSEFQRV9FVkVOVDogJ2NvbFNoYXBlRXZlbnQnLFxuICAgIEVYUExPU0lPTjogJ2V4cGxvc2lvbicsXG4gICAgRklSRV9TVEFSVDogJ2ZpcmVTdGFydCcsXG4gICAgUFJPSkVDVElMRV9TVEFSVDogJ3Byb2plY3RpbGVTdGFydCcsXG4gICAgRU5USVRZX0NPTF9TSEFQRV9FTlRFUjogJ2VudGl0eUNvbFNoYXBlRW50ZXInLFxuICAgIEVOVElUWV9DT0xfU0hBUEVfTEVBVkU6ICdlbnRpdHlDb2xTaGFwZUxlYXZlJyxcbiAgICBFTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUjogJ2VudGl0eUNoZWNrcG9pbnRFbnRlcicsXG4gICAgRU5USVRZX0NIRUNLUE9JTlRfTEVBVkU6ICdlbnRpdHlDaGVja3BvaW50TGVhdmUnLFxuICAgIEdJVkVfUEVEX1NDUklQVEVEX1RBU0s6ICdnaXZlUGVkU2NyaXB0ZWRUYXNrJyxcbiAgICBMT0NBTF9TQ1JJUFRfRVZFTlQ6ICdsb2NhbFNjcmlwdEV2ZW50JyxcbiAgICBSRU1PVEVfU0NSSVBUX0VWRU5UOiAncmVtb3RlU2NyaXB0RXZlbnQnLFxuXG4gICAgQU5ZX1JFU09VUkNFX1NUQVJUOiAnYW55UmVzb3VyY2VTdGFydCcsXG4gICAgQU5ZX1JFU09VUkNFX1NUT1A6ICdhbnlSZXNvdXJjZVN0b3AnLFxuXG4gICAgUkVTT1VSQ0VfU1RBUlQ6ICdyZXNvdXJjZVN0YXJ0JyxcbiAgICBSRVNPVVJDRV9TVE9QOiAncmVzb3VyY2VTdG9wJyxcbiAgICBSRVNPVVJDRV9FUlJPUjogJ3Jlc291cmNlRXJyb3InLFxuICAgIEVWRU5UOiAnZXZlbnQnLFxufTtcbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgTUFOR09fTE9HX1BSRUZJWCwgTVVMVElQTEFZRVJfU0VSVklDRSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZXJMb2dnZXJTZXJ2aWNlIGltcGxlbWVudHMgTG9nZ2VyU2VydmljZSB7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBtdWx0aXBsYXllclNlcnZpY2U6IFNlcnZlck11bHRpcGxheWVyU2VydmljZTtcbiAgICBwdWJsaWMgbG9nKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2coYH53flt+eX4ke01BTkdPX0xPR19QUkVGSVh9U2VydmVyfnd+XVt+bGJ+TG9nfnd+XWAsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2dXYXJuaW5nKGBbJHtNQU5HT19MT0dfUFJFRklYfVNlcnZlcl1bV2Fybl1gLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXJyb3IoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZ0Vycm9yKGBbJHtNQU5HT19MT0dfUFJFRklYfVNlcnZlcl1bRXJyb3JdYCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlYnVnKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2dEZWJ1Zyhgfnd+W355fiR7TUFOR09fTE9HX1BSRUZJWH1TZXJ2ZXJ+d35dW35sY35EZWJ1Z353fl1gLCAuLi5hcmdzKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7XG4gICAgQmFzZVJQQ1NlcnZpY2UsXG4gICAgRXZlbnREZXN0aW5hdGlvbixcbiAgICB0eXBlIFJQQ1BheWxvYWQsXG4gICAgUlBDX1JFU1VMVF9USU1FT1VULFxuICAgIFJQQ19SRVNVTFRfUExBWUVSX0RJU0NPTk5FQ1RFRCxcbiAgICBSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQsXG59IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHtcbiAgICBFVkVOVF9TRVJWSUNFLFxuICAgIEVycm9yTWVzc2FnZSxcbiAgICB0eXBlIFJQQ0NhbGxPcHRpb25zLFxuICAgIHR5cGUgUlBDUmVzdWx0LFxuICAgIHR5cGUgU2NyaXB0UlBDSGFuZGxlcixcbiAgICBnZW5lcmF0ZVJhbmRvbUlkLFxufSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBNdWx0aXBsYXllclBsYXllciwgUlBDU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFdmVudFNlcnZpY2UgfSBmcm9tICcuL3NlcnZlci1ldmVudC5zZXJ2aWNlJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlcnZlclJQQ1NlcnZpY2UgZXh0ZW5kcyBCYXNlUlBDU2VydmljZTxNYW5nb1JQQy5DdXN0b21TZXJ2ZXJSUEM+IGltcGxlbWVudHMgUlBDU2VydmljZSB7XG4gICAgQGluamVjdChFVkVOVF9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5ICRldmVudFNlcnZpY2U6IFNlcnZlckV2ZW50U2VydmljZTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgJGNsaWVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIFNjcmlwdFJQQ0hhbmRsZXI+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5ICR3ZWJWaWV3SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0UlBDSGFuZGxlcj4oKTtcblxuICAgIHB1YmxpYyBhc3luYyBjYWxsUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBNdWx0aXBsYXllclBsYXllcj4oXG4gICAgICAgIHBsYXllcjogVSxcbiAgICAgICAgcnBjTmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJUb0NsaWVudFJQQz4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICAgICBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9LFxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlQ2FsbChwbGF5ZXIsIHJwY05hbWUsIEV2ZW50RGVzdGluYXRpb24uQ2xpZW50LCBvcHRpb25zLCBib2R5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBNdWx0aXBsYXllclBsYXllcj4oXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tQ2xpZW50VG9TZXJ2ZXJSUEM+LFxuICAgICAgICBoYW5kbGVyOiAoc2VuZGVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPixcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuJGNsaWVudEhhbmRsZXJzLmhhcyhycGNOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIFJQQy4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDSGFuZGxlckFscmVhZHlFeGlzdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnBjSGFuZGxlcjogU2NyaXB0UlBDSGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJGNsaWVudEhhbmRsZXJzLmRlbGV0ZShycGNOYW1lKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBycGNOYW1lLFxuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuJGNsaWVudEhhbmRsZXJzLnNldChycGNOYW1lLCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2FsbFdlYlZpZXc8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgcGxheWVyOiBVLFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBycGNOYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbVNlcnZlclRvV2ViVmlld1JQQz4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICAgICBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9LFxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlQ2FsbChwbGF5ZXIsIHJwY05hbWUsIEV2ZW50RGVzdGluYXRpb24uV2ViVmlldywgb3B0aW9ucywgYm9keSwgaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUEMsIFUgZXh0ZW5kcyBNdWx0aXBsYXllclBsYXllcj4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDPixcbiAgICAgICAgaGFuZGxlcjogKFxuICAgICAgICAgICAgcGxheWVyOiBVLFxuICAgICAgICAgICAgYm9keTogUGFyYW1ldGVyczxNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUENbRV0+WzBdLFxuICAgICAgICApID0+IFJldHVyblR5cGU8TWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDW0VdPixcbiAgICApIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7aWR9Ojoke3JwY05hbWV9YDtcbiAgICAgICAgaWYgKHRoaXMuJHdlYlZpZXdIYW5kbGVycy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIFJQQy4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDSGFuZGxlckFscmVhZHlFeGlzdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnBjSGFuZGxlcjogU2NyaXB0UlBDSGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJHdlYlZpZXdIYW5kbGVycy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBycGNOYW1lLFxuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuJHdlYlZpZXdIYW5kbGVycy5zZXQoa2V5LCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jICRoYW5kbGVDYWxsPFRSZXN1bHQ+KFxuICAgICAgICBwbGF5ZXI6IE11bHRpcGxheWVyUGxheWVyLFxuICAgICAgICBycGNOYW1lOiBzdHJpbmcsXG4gICAgICAgIGRlc3RpbmF0aW9uOiBFdmVudERlc3RpbmF0aW9uLCAvLyAnY2xpZW50JyB8ICd3ZWJ2aWV3JyxcbiAgICAgICAgb3B0aW9ucz86IFBhcnRpYWw8UlBDQ2FsbE9wdGlvbnM+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICAgICAgd2ViVmlld0lkPzogc3RyaW5nIHwgbnVtYmVyLFxuICAgICkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8UlBDUmVzdWx0PFRSZXN1bHQ+PigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwbGF5ZXIudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKDxSUENSZXN1bHQ8VFJlc3VsdD4+UlBDX1JFU1VMVF9QTEFZRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNhbGxJZCA9IGdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICAgICAgICAgIGxldCB0aW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0O1xuXG4gICAgICAgICAgICBjb25zdCBkaXNjb25uZWN0SGFuZGxlciA9IHRoaXMuJGV2ZW50U2VydmljZS5vblBsYXllckRpc2Nvbm5lY3QoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5wbGF5ZXIgPT09IHBsYXllcikge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKDxSUENSZXN1bHQ8VFJlc3VsdD4+UlBDX1JFU1VMVF9QTEFZRVJfRElTQ09OTkVDVEVEKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgb25jZUhhbmRsZSA9IChfcGxheWVyOiBNdWx0aXBsYXllclBsYXllciwgYm9keTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKDxSUENSZXN1bHQ8VFJlc3VsdD4+Ym9keSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gRXhhbXBsZTogUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfMjFld3JFcSwgUlBDOjpSRVRVUk5fRlJPTV9XRUJWSUVXX3RlRXFkMlxuICAgICAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID1cbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy4kZXZlbnRTZXJ2aWNlLm9uY2VXZWJWaWV3KHdlYlZpZXdJZCEsIGBSUEM6OlJFVFVSTl9GUk9NX1dFQlZJRVdfJHtjYWxsSWR9YCwgb25jZUhhbmRsZSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiRldmVudFNlcnZpY2Uub25jZVBsYXllcihgUlBDOjpSRVRVUk5fRlJPTV9DTElFTlRfJHtjYWxsSWR9YCwgb25jZUhhbmRsZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IFJQQ1BheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgc291cmNlOiBFdmVudERlc3RpbmF0aW9uLlNlcnZlcixcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgICAgICAgICBpZDogY2FsbElkLFxuICAgICAgICAgICAgICAgIHJwY05hbWUsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBFeGFtcGxlOiBSUEM6OkNBTExfU0VSVkVSLCBSUEM6OkNBTExfV0VCVklFV1xuICAgICAgICAgICAgZGVzdGluYXRpb24gPT09IEV2ZW50RGVzdGluYXRpb24uV2ViVmlld1xuICAgICAgICAgICAgICAgID8gcGxheWVyLmVtaXRXZWJWaWV3KHdlYlZpZXdJZCEsICdSUEM6OkNBTExfV0VCVklFVycsIHBheWxvYWQpXG4gICAgICAgICAgICAgICAgOiBwbGF5ZXIuZW1pdCgnUlBDOjpDQUxMX0NMSUVOVCcsIHBheWxvYWQpO1xuXG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5SUENfUkVTVUxUX1RJTUVPVVQpO1xuICAgICAgICAgICAgfSwgb3B0aW9ucz8udGltZW91dCA/PyB0aGlzLiRUSU1FT1VUKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudCBpbXBsZW1lbnRzIFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgICApIHt9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKHRoaXMuZXZlbnROYW1lLCB0aGlzLmxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJQbGF5ZXIsIFNlcnZlckV2ZW50RW1taXRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQgfSBmcm9tICcuL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlcic7XG5cbnR5cGUgTmF0aXZlU2VydmVyRXZlbnQgPSBrZXlvZiBJU2VydmVyRXZlbnRzO1xuY29uc3QgTkFUSVZFX1NFUlZFUl9FVkVOVFMgPSBuZXcgU2V0PE5hdGl2ZVNlcnZlckV2ZW50PihbXG4gICAgJ2VudGl0eUNyZWF0ZWQnLFxuICAgICdlbnRpdHlEZXN0cm95ZWQnLFxuICAgICdlbnRpdHlNb2RlbENoYW5nZScsXG4gICAgJ2luY29taW5nQ29ubmVjdGlvbicsXG4gICAgJ3BhY2thZ2VzTG9hZGVkJyxcbiAgICAncGxheWVyQ2hhdCcsXG4gICAgJ3BsYXllckNvbW1hbmQnLFxuICAgICdwbGF5ZXJEYW1hZ2UnLFxuICAgICdwbGF5ZXJEZWF0aCcsXG4gICAgJ3BsYXllckVudGVyQ2hlY2twb2ludCcsXG4gICAgJ3BsYXllckVudGVyQ29sc2hhcGUnLFxuICAgICdwbGF5ZXJFbnRlclZlaGljbGUnLFxuICAgICdwbGF5ZXJFeGl0Q2hlY2twb2ludCcsXG4gICAgJ3BsYXllckV4aXRDb2xzaGFwZScsXG4gICAgJ3BsYXllckV4aXRWZWhpY2xlJyxcbiAgICAncGxheWVySm9pbicsXG4gICAgJ3BsYXllclF1aXQnLFxuICAgICdwbGF5ZXJSZWFjaFdheXBvaW50JyxcbiAgICAncGxheWVyUmVhZHknLFxuICAgICdwbGF5ZXJTcGF3bicsXG4gICAgJ3BsYXllclN0YXJ0RW50ZXJWZWhpY2xlJyxcbiAgICAncGxheWVyU3RhcnRFeGl0VmVoaWNsZScsXG4gICAgJ3BsYXllclN0cmVhbUluJyxcbiAgICAncGxheWVyU3RyZWFtT3V0JyxcbiAgICAncGxheWVyV2VhcG9uQ2hhbmdlJyxcbiAgICAnc2VydmVyU2h1dGRvd24nLFxuICAgICd0cmFpbGVyQXR0YWNoZWQnLFxuICAgICd2ZWhpY2xlRGFtYWdlJyxcbiAgICAndmVoaWNsZURlYXRoJyxcbiAgICAndmVoaWNsZUhvcm5Ub2dnbGUnLFxuICAgICd2ZWhpY2xlU2lyZW5Ub2dnbGUnLFxuXSk7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIgaW1wbGVtZW50cyBTZXJ2ZXJFdmVudEVtbWl0ZXIge1xuXG4gICAgZW1pdChldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLmNhbGwoZXZlbnROYW1lLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIG1wLmV2ZW50cy5hZGQoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgb25jZShldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG9uY2VXcmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICAgICAgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIG1wLmV2ZW50cy5hZGQoZXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQoZXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgfVxuXG4gICAgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgZW1pdFBsYXllcihwbGF5ZXI6IE11bHRpcGxheWVyUGxheWVyLCBldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgLy8gSW4gUmFnZU1QLCBwbGF5ZXIuY2FsbCgpIGlzIHVzZWQgdG8gZW1pdCBldmVudHMgdG8gY2xpZW50c1xuICAgICAgICAocGxheWVyIGFzIGFueSkuY2FsbChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRBbGxQbGF5ZXJzUmF3KGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBJbiBSYWdlTVAsIHVzZSBtcC5wbGF5ZXJzLmNhbGwoKSB0byBlbWl0IHRvIGFsbCBwbGF5ZXJzXG4gICAgICAgIG1wLnBsYXllcnMuY2FsbChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZVJhdyhldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGhhcyBjYWxsVW5yZWxpYWJsZSBmb3IgdW5yZWxpYWJsZSBldmVudHNcbiAgICAgICAgbXAucGxheWVycy5jYWxsVW5yZWxpYWJsZShldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRVbnJlbGlhYmxlUmF3KHBsYXllcnM6IE11bHRpcGxheWVyUGxheWVyW10sIGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IHBsYXllciBvZiBwbGF5ZXJzKSB7XG4gICAgICAgICAgICAocGxheWVyIGFzIGFueSkuY2FsbFVucmVsaWFibGUoZXZlbnROYW1lLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheWVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgLy8gTmF0aXZlIFJBR0VNUCBldmVudHMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCAnb24nIHR5cGVcbiAgICAgICAgLy8gVGhleSBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBnYW1lIGVuZ2luZSwgbm90IGJ5IGNsaWVudC10by1zZXJ2ZXIgY29tbXVuaWNhdGlvblxuICAgICAgICBpZiAoTkFUSVZFX1NFUlZFUl9FVkVOVFMuaGFzKGV2ZW50TmFtZSBhcyBOYXRpdmVTZXJ2ZXJFdmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEN1c3RvbSBjbGllbnQtdG8tc2VydmVyIGV2ZW50c1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFJhZ2VNUFNlcnZlclNjcmlwdEV2ZW50KGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIG9uY2VQbGF5ZXIoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICAvLyBOYXRpdmUgUkFHRU1QIGV2ZW50cyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoICdvbmNlJyB0eXBlXG4gICAgICAgIGlmIChOQVRJVkVfU0VSVkVSX0VWRU5UUy5oYXMoZXZlbnROYW1lIGFzIE5hdGl2ZVNlcnZlckV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25jZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDdXN0b20gY2xpZW50LXRvLXNlcnZlciBldmVudHNcbiAgICAgICAgY29uc3Qgb25jZVdyYXBwZXIgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoZXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgICAgICBsaXN0ZW5lciguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChldmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudChldmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBvZmZQbGF5ZXIoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFdmVudEVtbWl0ZXIsIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIgfSBmcm9tICcuL3JhZ2VtcC1ldmVudC1lbW1pdGVyJztcblxuZXhwb3J0IGNsYXNzIFNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBleHRlbmRzIFJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBpbXBsZW1lbnRzIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB7XG4gICAgcHVibGljIG92ZXJyaWRlIEV2ZW50czogU2VydmVyRXZlbnRFbW1pdGVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuRXZlbnRzID0gbmV3IFNlcnZlclJhZ2VNUEV2ZW50RW1taXRlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQbGF5ZXIoKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgbXAuUGxheWVyIGNvbnN0cnVjdG9yIGZvciBmYWN0b3J5IHB1cnBvc2VzXG4gICAgICAgIHJldHVybiAobXAgYXMgYW55KS5QbGF5ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEJsaXBGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGZhY3RvcnkgcGF0dGVybiBsaWtlIGFsdDpWXG4gICAgICAgIC8vIFdlIGNhbiBleHRlbmQgdGhlIHByb3RvdHlwZSBpbnN0ZWFkXG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkJsaXApIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQmxpcC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1hcmtlckZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLk1hcmtlcikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5NYXJrZXIucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb2xTaGFwZUZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkNvbHNoYXBlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLkNvbHNoYXBlLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q2hlY2twb2ludEZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkNoZWNrcG9pbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQ2hlY2twb2ludC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9iamVjdEZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLk9iamVjdCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5PYmplY3QucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQZWRGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5QZWQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuUGVkLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGxheWVyRmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuUGxheWVyKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlBsYXllci5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlaGljbGVGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5WZWhpY2xlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlZlaGljbGUucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsRW50aXR5R3JvdXBcbiAgICAgICAgLy8gQ291bGQgbG9nIGEgd2FybmluZyBvciBpbXBsZW1lbnQgY3VzdG9tIHNvbHV0aW9uXG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsRW50aXR5XG4gICAgICAgIC8vIENvdWxkIGxvZyBhIHdhcm5pbmcgb3IgaW1wbGVtZW50IGN1c3RvbSBzb2x1dGlvblxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWb2ljZUNoYW5uZWxGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIHZvaWNlIGlzIGhhbmRsZWQgZGlmZmVyZW50bHlcbiAgICAgICAgLy8gQ291bGQgaW1wbGVtZW50IGN1c3RvbSB2b2ljZSBjaGFubmVsIG1hbmFnZW1lbnRcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBsb2dnaW5nIG1ldGhvZHMgLSBSYWdlTVAgc2VydmVyIHVzZXMgY29uc29sZS5sb2csIG5vdCBtcC5jb25zb2xlLmxvZ0luZm9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbG9nKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbG9nRXJyb3IoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGxvZ1dhcm5pbmcoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbG9nRGVidWcoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbREVCVUddICR7bWVzc2FnZX1gKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlRmlsdGVycyBhcyAkVXNlRmlsdGVycywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICByZXR1cm4gJFVzZUZpbHRlcnMoLi4uZmlsdGVycyk7XG59XG4iLCAiaW1wb3J0IHsgT25JbnRlcm5hbCwgT25jZUludGVybmFsIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IElOVEVSTkFMX0VWRU5UUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblNjcmlwdFJQQygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU0NSSVBUX1JQQyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUEMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TQ1JJUFRfUlBDX0FOU1dFUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUENfQU5TV0VSKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblNlcnZlclN0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNFUlZFUl9TVEFSVEVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VTZXJ2ZXJTdGFydGVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNFUlZFUl9TVEFSVEVEKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkNvbm5lY3Rpb25RdWV1ZUFkZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OTkVDVElPTl9RVUVVRV9BREQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUNvbm5lY3Rpb25RdWV1ZUFkZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05ORUNUSU9OX1FVRVVFX0FERCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25uZWN0aW9uUXVldWVSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25uZWN0aW9uUXVldWVSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OTkVDVElPTl9RVUVVRV9SRU1PVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyQ29ubmVjdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyQ29ubmVjdERlbmllZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1RfREVOSUVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJDb25uZWN0RGVuaWVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9DT05ORUNUX0RFTklFRCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEaXNjb25uZWN0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfRElTQ09OTkVDVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyRGlzY29ubmVjdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfRElTQ09OTkVDVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9EQU1BR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckRhbWFnZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfREFNQUdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllckRlYXRoKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfREVBVEgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckRlYXRoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9ERUFUSCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJIZWFsKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfSEVBTCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVySGVhbCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfSEVBTCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJDb250cm9sUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTlRST0xfUkVRVUVTVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyQ29udHJvbFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTlRST0xfUkVRVUVTVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJJbnRlcmlvckNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0lOVEVSSU9SX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVySW50ZXJpb3JDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0lOVEVSSU9SX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEaW1lbnNpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9ESU1FTlNJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJEaW1lbnNpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0RJTUVOU0lPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyV2VhcG9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfV0VBUE9OX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyV2VhcG9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9XRUFQT05fQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN5bmNlZFNjZW5lUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTeW5jZWRTY2VuZVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN5bmNlZFNjZW5lU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN5bmNlZFNjZW5lU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9TVEFSVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTeW5jZWRTY2VuZVN0b3AoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RPUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyU3luY2VkU2NlbmVTdG9wKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RPUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTeW5jZWRTY2VuZVVwZGF0ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9VUERBVEUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN5bmNlZFNjZW5lVXBkYXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclNwYXduKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1BBV04pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclNwYXduKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TUEFXTik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJBbmltYXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9BTklNQVRJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJBbmltYXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0FOSU1BVElPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyVmVoaWNsZUVudGVyZWQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVFbnRlcmVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTdGFydFZlaGljbGVFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJWZWhpY2xlTGVmdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfTEVGVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyVmVoaWNsZUxlZnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfTEVGVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJWZWhpY2xlU2VhdENoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVTZWF0Q2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX1NFQVRfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uUGVkSGVhbCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0hFQUwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBlZEhlYWwoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0hFQUwpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGVkRGVhdGgoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBFRF9ERUFUSCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGVkRGVhdGgoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0RFQVRIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBlZERhbWFnZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0RBTUFHRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGVkRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBFRF9EQU1BR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVmVoaWNsZURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVTVFJPWSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9ERVNUUk9ZKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVBdHRhY2goKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfQVRUQUNIKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlQXR0YWNoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfQVRUQUNIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVEZXRhY2goKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVUQUNIKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlRGV0YWNoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVUQUNIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVEYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREFNQUdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREFNQUdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVTaXJlblN0YXRlQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WRUhJQ0xFX1NJUkVOX1NUQVRFX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZVNpcmVuU3RhdGVDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9TSVJFTl9TVEFURV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9IT1JOX1NUQVRFX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WRUhJQ0xFX0hPUk5fU1RBVEVfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZvaWNlQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVk9JQ0VfQ09OTkVDVElPTik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVm9pY2VDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZPSUNFX0NPTk5FQ1RJT04pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQ2xpZW50T2JqZWN0RGVsZXRlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DTElFTlRfT0JKRUNUX0RFTEVURSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ2xpZW50T2JqZWN0RGVsZXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNMSUVOVF9PQkpFQ1RfREVMRVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkNsaWVudE9iamVjdFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNMSUVOVF9PQkpFQ1RfUkVRVUVTVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ2xpZW50T2JqZWN0UmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DTElFTlRfT0JKRUNUX1JFUVVFU1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQmFzZU9iamVjdENyZWF0ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfQ1JFQVRFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VCYXNlT2JqZWN0Q3JlYXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkJBU0VfT0JKRUNUX0NSRUFURSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25CYXNlT2JqZWN0UmVtb3ZlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5CQVNFX09CSkVDVF9SRU1PVkUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUJhc2VPYmplY3RSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfUkVNT1ZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbk5ldE93bmVyQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5ORVRfT1dORVJfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VOZXRPd25lckNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5ORVRfT1dORVJfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbldlYXBvbkRhbWFnZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV0VBUE9OX0RBTUFHRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2VhcG9uRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldFQVBPTl9EQU1BR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTWV0YUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZU1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTUVUQV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTG9jYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9NRVRBX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTG9jYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25HbG9iYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HTE9CQUxfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OU09MRV9DT01NQU5EKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05TT0xFX0NPTU1BTkQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVSUk9SKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FUlJPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db2xTaGFwZUV2ZW50KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT0xfU0hBUEVfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUNvbFNoYXBlRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09MX1NIQVBFX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkV4cGxvc2lvbigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVhQTE9TSU9OKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFeHBsb3Npb24oKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVhQTE9TSU9OKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkZpcmVTdGFydCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRklSRV9TVEFSVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRmlyZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkZJUkVfU1RBUlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUHJvamVjdGlsZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QUk9KRUNUSUxFX1NUQVJUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQcm9qZWN0aWxlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUFJPSkVDVElMRV9TVEFSVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DT0xfU0hBUEVfRU5URVIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NPTF9TSEFQRV9MRUFWRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0xFQVZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfRU5URVIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfTEVBVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uR2l2ZVBlZFNjcmlwdGVkVGFzaygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0lWRV9QRURfU0NSSVBURURfVEFTSyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlR2l2ZVBlZFNjcmlwdGVkVGFzaygpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HSVZFX1BFRF9TQ1JJUFRFRF9UQVNLKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkxvY2FsU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX1NDUklQVF9FVkVOVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTG9jYWxTY3JpcHRFdmVudCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9TQ1JJUFRfRVZFTlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVtb3RlU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFTU9URV9TQ1JJUFRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlbW90ZVNjcmlwdEV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFTU9URV9TQ1JJUFRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25BbnlSZXNvdXJjZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5BTllfUkVTT1VSQ0VfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUFueVJlc291cmNlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQU5ZX1JFU09VUkNFX1NUQVJUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uQW55UmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5BTllfUkVTT1VSQ0VfU1RPUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQW55UmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkFOWV9SRVNPVVJDRV9TVE9QKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVzb3VyY2VTdGFydCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlc291cmNlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RBUlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9TVE9QKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VSZXNvdXJjZVN0b3AoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RPUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25SZXNvdXJjZUVycm9yKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9FUlJPUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUmVzb3VyY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9FUlJPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVWRU5UKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uUGxheWVyJywgZXZlbnROYW1lKTtcbn0iLCAiaW1wb3J0IHsgT25XZWJWaWV3IGFzICRPbldlYlZpZXcgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4oaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXc8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb1NlcnZlckV2ZW50Pixcbik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXc8RSBleHRlbmRzIHN0cmluZz4oaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gJE9uV2ViVmlldyhpZCwgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbiBhcyAkT24gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT248RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50PihldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KSB7XG4gICAgcmV0dXJuICRPbihldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXI8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXI8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21QbGF5ZXJUb1NlcnZlckV2ZW50Pikge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25jZVBsYXllcicsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgT25jZVdlYlZpZXcgYXMgJE9uY2VXZWJWaWV3IH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4oaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+LFxuKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+KSB7XG4gICAgcmV0dXJuICRPbmNlV2ViVmlldyhpZCwgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbmNlIGFzICRPbmNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2U8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50PihldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2U8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJFdmVudD4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50Pikge1xuICAgIHJldHVybiAkT25jZShldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSwgTWV0aG9kUGFyYW1UeXBlLCB0eXBlIE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCB0eXBlIE5ld2FibGUsIHR5cGUgUGlwZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBQbGF5ZXIoa2V5Pzogc3RyaW5nLCAuLi5waXBlczogTmV3YWJsZTxQaXBlPltdKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgcGlwZXMsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5QbGF5ZXIsIGRhdGE6IGtleSwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBHdWFyZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlR3VhcmRzIGFzICRVc2VHdWFyZHMsIHR5cGUgTmV3YWJsZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VHdWFyZHMoLi4uZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSkge1xuICAgIHJldHVybiAkVXNlR3VhcmRzKC4uLmd1YXJkcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBJbnRlcmNlcHRvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlSW50ZXJjZXB0b3JzIGFzICRVc2VJbnRlcmNlcHRvcnMsIHR5cGUgTmV3YWJsZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSkge1xuICAgIHJldHVybiAkVXNlSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9ycyk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlUlBDRGVjb3JhdG9yIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyUmVxdWVzdDxFIGV4dGVuZHMga2V5b2YgTWFuZ29SUEMuQ3VzdG9tQ2xpZW50VG9TZXJ2ZXJSUEM+KHJwY05hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21DbGllbnRUb1NlcnZlclJQQz4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbUNsaWVudFRvU2VydmVyUlBDPikge1xuICAgIHJldHVybiBjcmVhdGVSUENEZWNvcmF0b3IoJ29uUGxheWVyUmVxdWVzdCcsIHJwY05hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uUmVxdWVzdCBhcyAkT25SZXF1ZXN0IH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdDxFIGV4dGVuZHMga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyUlBDPihycGNOYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyUlBDPik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyUlBDPikge1xuICAgIHJldHVybiAkT25SZXF1ZXN0KHJwY05hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uV2ViVmlld1JlcXVlc3QgYXMgJE9uV2ViVmlld1JlcXVlc3QgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3UmVxdWVzdDxFIGV4dGVuZHMga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDPihpZDogc3RyaW5nIHwgbnVtYmVyLCBycGNOYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgcnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDPixcbik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KGlkOiBzdHJpbmcgfCBudW1iZXIsIHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbVdlYlZpZXdUb1NlcnZlclJQQz4pIHtcbiAgICByZXR1cm4gJE9uV2ViVmlld1JlcXVlc3QoaWQsIHJwY05hbWUpO1xufVxuIiwgImV4cG9ydCBjb25zdCBUSFJPVFRMRVJfTElNSVQgPSAnVEhST1RUTEVSX0xJTUlUJztcbmV4cG9ydCBjb25zdCBUSFJPVFRMRVJfVFRMID0gJ1RIUk9UVExFUl9UVEwnO1xuZXhwb3J0IGNvbnN0IFRIUk9UVExFUl9PUFRJT05TID0gJ1RIUk9UVExFUl9NT0RVTEVfT1BUSU9OUyc7XG5leHBvcnQgY29uc3QgVEhST1RUTEVSX1NLSVAgPSAnVEhST1RUTEVSX1NLSVAnO1xuZXhwb3J0IGNvbnN0IFRIUk9UVExFUl9TVE9SQUdFID0gJ1RIUk9UVExFUl9TVE9SQUdFJztcbiIsICJpbXBvcnQgeyBUSFJPVFRMRVJfU0tJUCB9IGZyb20gJy4uL3Rocm90dGxlci5jb25zdGFudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2tpcFRocm90dGxlKHNraXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0geyBkZWZhdWx0OiB0cnVlIH0pIHtcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBfcHJvcGVydHlLZXk/OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNraXApIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUSFJPVFRMRVJfU0tJUCArIGtleSwgc2tpcFtrZXldLCBkZXNjcmlwdG9yLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoVEhST1RUTEVSX1NLSVAgKyBrZXksIHNraXBba2V5XSwgdGFyZ2V0KTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgVGhyb3R0bGVyTWV0aG9kT3JDb250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVEhST1RUTEVSX0xJTUlULCBUSFJPVFRMRVJfVFRMIH0gZnJvbSAnLi4vdGhyb3R0bGVyLmNvbnN0YW50cyc7XG5cbmZ1bmN0aW9uIHNldFRocm90dGxlck1ldGFkYXRhKHRhcmdldDogYW55LCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBUaHJvdHRsZXJNZXRob2RPckNvbnRyb2xsZXJPcHRpb25zPik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoVEhST1RUTEVSX1RUTCArIG5hbWUsIG9wdGlvbnNbbmFtZV0hLnR0bCwgdGFyZ2V0KTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUSFJPVFRMRVJfTElNSVQgKyBuYW1lLCBvcHRpb25zW25hbWVdIS5saW1pdCwgdGFyZ2V0KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaHJvdHRsZShvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBUaHJvdHRsZXJNZXRob2RPckNvbnRyb2xsZXJPcHRpb25zPikge1xuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIF9wcm9wZXJ0eUtleT86IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pID0+IHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHNldFRocm90dGxlck1ldGFkYXRhKGRlc2NyaXB0b3IudmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGhyb3R0bGVyTWV0YWRhdGEodGFyZ2V0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgUmVzb2x2YWJsZSwgVGhyb3R0bGVyTGltaXREZXRhaWwsIFRocm90dGxlck1vZHVsZU9wdGlvbnMsIFRocm90dGxlck9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVEhST1RUTEVSX0xJTUlULCBUSFJPVFRMRVJfT1BUSU9OUywgVEhST1RUTEVSX1NLSVAsIFRIUk9UVExFUl9TVE9SQUdFLCBUSFJPVFRMRVJfVFRMIH0gZnJvbSAnLi90aHJvdHRsZXIuY29uc3RhbnRzJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0LCBHdWFyZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBUaHJvdHRsZXJTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgICBpc0Z1bmN0aW9uLFxuICAgIFRvb01hbnlSZXF1ZXN0cyxcbiAgICB0eXBlIE9uTW9kdWxlSW5pdCxcbiAgICB0eXBlIFJlZmxlY3RvclNlcnZpY2UsXG4gICAgRXJyb3JNZXNzYWdlLFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0LFxuICAgIFJFRkxFQ1RPUl9TRVJWSUNFLFxufSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGhyb3R0bGVyR3VhcmQgaW1wbGVtZW50cyBHdWFyZCwgT25Nb2R1bGVJbml0IHtcbiAgICBASW5qZWN0KFRIUk9UVExFUl9PUFRJT05TKSBwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9uczogVGhyb3R0bGVyTW9kdWxlT3B0aW9ucztcbiAgICBASW5qZWN0KFRIUk9UVExFUl9TVE9SQUdFKSBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlO1xuICAgIEBJbmplY3QoUkVGTEVDVE9SX1NFUlZJQ0UpIHByb3RlY3RlZCByZWFkb25seSByZWZsZWN0b3I6IFJlZmxlY3RvclNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIHRocm90dGxlcnM6IEFycmF5PFRocm90dGxlck9wdGlvbnM+O1xuICAgIHByb3RlY3RlZCBjb21tb25PcHRpb25zOiBQaWNrPFRocm90dGxlck9wdGlvbnMsICdza2lwSWYnPjtcblxuICAgIHB1YmxpYyBhc3luYyBvbk1vZHVsZUluaXQoKSB7XG4gICAgICAgIHRoaXMudGhyb3R0bGVycyA9IChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucykgPyB0aGlzLm9wdGlvbnMgOiB0aGlzLm9wdGlvbnMudGhyb3R0bGVycylcbiAgICAgICAgICAgIC5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZmlyc3QudHRsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2Vjb25kLnR0bCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdC50dGwgLSBzZWNvbmQudHRsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoKG9wdCkgPT4gKHsgLi4ub3B0LCBuYW1lOiBvcHQubmFtZSA/PyAnZGVmYXVsdCcgfSkpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1vbk9wdGlvbnMgPSB7fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBza2lwSWY6IHRoaXMub3B0aW9ucy5za2lwSWYhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5BY3RpdmF0ZShjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlczogYm9vbGVhbltdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbmFtZWRUaHJvdHRsZXIgb2YgdGhpcy50aHJvdHRsZXJzKSB7XG4gICAgICAgICAgICAvLyBSZXR1cm4gZWFybHkgaWYgdGhlIGN1cnJlbnQgcm91dGUgc2hvdWxkIGJlIHNraXBwZWQuXG4gICAgICAgICAgICBjb25zdCBza2lwID0gdGhpcy5yZWZsZWN0b3IuZ2V0QWxsQW5kT3ZlcnJpZGU8Ym9vbGVhbj4oVEhST1RUTEVSX1NLSVAgKyBuYW1lZFRocm90dGxlci5uYW1lLCBbXG4gICAgICAgICAgICAgICAgY29udGV4dC5oYW5kbGVyLFxuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xhc3NSZWYsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGNvbnN0IHNraXBJZiA9IG5hbWVkVGhyb3R0bGVyLnNraXBJZiB8fCB0aGlzLmNvbW1vbk9wdGlvbnMuc2tpcElmO1xuICAgICAgICAgICAgaWYgKHNraXAgfHwgc2tpcElmPy4oY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZXMucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmV0dXJuIGVhcmx5IHdoZW4gd2UgaGF2ZSBubyBsaW1pdCBvciB0dGwgZGF0YS5cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlT3JDbGFzc0xpbWl0ID0gdGhpcy5yZWZsZWN0b3IuZ2V0QWxsQW5kT3ZlcnJpZGU8UmVzb2x2YWJsZTxudW1iZXI+PihUSFJPVFRMRVJfTElNSVQgKyBuYW1lZFRocm90dGxlci5uYW1lLCBbXG4gICAgICAgICAgICAgICAgY29udGV4dC5oYW5kbGVyLFxuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xhc3NSZWYsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlT3JDbGFzc1R0bCA9IHRoaXMucmVmbGVjdG9yLmdldEFsbEFuZE92ZXJyaWRlPFJlc29sdmFibGU8bnVtYmVyPj4oVEhST1RUTEVSX1RUTCArIG5hbWVkVGhyb3R0bGVyLm5hbWUsIFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgY29udGV4dC5jbGFzc1JlZixcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBzcGVjaWZpYyBsaW1pdHMgYXJlIHNldCBhdCBjbGFzcyBvciByb3V0ZSBsZXZlbCwgb3RoZXJ3aXNlIHVzZSBnbG9iYWwgb3B0aW9ucy5cbiAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gYXdhaXQgdGhpcy5yZXNvbHZlVmFsdWUoY29udGV4dCwgcm91dGVPckNsYXNzTGltaXQgfHwgbmFtZWRUaHJvdHRsZXIubGltaXQpO1xuICAgICAgICAgICAgY29uc3QgdHRsID0gYXdhaXQgdGhpcy5yZXNvbHZlVmFsdWUoY29udGV4dCwgcm91dGVPckNsYXNzVHRsIHx8IG5hbWVkVGhyb3R0bGVyLnR0bCk7XG4gICAgICAgICAgICBjb250aW51ZXMucHVzaChhd2FpdCB0aGlzLmhhbmRsZVJlcXVlc3QoY29udGV4dCwgbGltaXQsIHR0bCwgbmFtZWRUaHJvdHRsZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGludWVzLmV2ZXJ5KChjb250KSA9PiBjb250KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlUmVxdWVzdChjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCBsaW1pdDogbnVtYmVyLCB0dGw6IG51bWJlciwgdGhyb3R0bGVyOiBUaHJvdHRsZXJPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBsYXllciA9IGNvbnRleHQucmVxdWVzdC5wbGF5ZXI7XG4gICAgICAgIGlmKCFwbGF5ZXIpIHRocm93IG5ldyBFcnJvcihgUGxheWVyIGlzIG5vdCBpbiBjb250ZXh0YCk7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2VuZXJhdGVLZXkoY29udGV4dCwgdGhyb3R0bGVyLm5hbWUhKTtcbiAgICAgICAgY29uc3QgeyB0b3RhbEhpdHMsIHRpbWVUb0V4cGlyZSB9ID0gYXdhaXQgdGhpcy5zdG9yYWdlU2VydmljZS5pbmNyZW1lbnQocGxheWVyLCBrZXksIHR0bCk7XG5cbiAgICAgICAgaWYgKHRvdGFsSGl0cyA+IGxpbWl0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnRocm93VGhyb3R0bGluZ0V4Y2VwdGlvbihjb250ZXh0LCB7XG4gICAgICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICAgICAgdHRsLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwbGF5ZXIsXG4gICAgICAgICAgICAgICAgdG90YWxIaXRzLFxuICAgICAgICAgICAgICAgIHRpbWVUb0V4cGlyZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlS2V5KGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBgJHtjb250ZXh0LmNsYXNzUmVmLm5hbWV9LSR7Y29udGV4dC5oYW5kbGVyLm5hbWV9LSR7bmFtZX1gO1xuICAgICAgICByZXR1cm4gY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHByZWZpeCkuZGlnZXN0KCdoZXgnKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyB0aHJvd1Rocm90dGxpbmdFeGNlcHRpb24oY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgX3Rocm90dGxlckxpbWl0RGV0YWlsOiBUaHJvdHRsZXJMaW1pdERldGFpbCkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vTWFueVJlcXVlc3RzKGF3YWl0IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0RXJyb3JNZXNzYWdlKF9jb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSA/PyBFcnJvck1lc3NhZ2UuVG9vTWFueVJlcXVlc3RzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFcnJvck1lc3NhZ2UuVG9vTWFueVJlcXVlc3RzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVZhbHVlPFQgZXh0ZW5kcyBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuPihjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCByZXNvbHZhYmxlVmFsdWU6IFJlc29sdmFibGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ocmVzb2x2YWJsZVZhbHVlKSA/IHJlc29sdmFibGVWYWx1ZShjb250ZXh0KSA6IHJlc29sdmFibGVWYWx1ZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgSW5qZWN0YWJsZSwgdHlwZSBPbkFwcFNodXRkb3duIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgVGhyb3R0bGVyU3RvcmFnZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlIGltcGxlbWVudHMgT25BcHBTaHV0ZG93biB7XG4gICAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2U6IFdlYWtNYXA8UGxheWVyTXAsIE1hcDxzdHJpbmcsIFRocm90dGxlclN0b3JhZ2VPcHRpb25zPj4gPSBuZXcgV2Vha01hcCgpO1xuICAgIHByaXZhdGUgdGltZW91dElkczogTm9kZUpTLlRpbWVvdXRbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBnZXRFeHBpcmF0aW9uVGltZShwbGF5ZXI6IFBsYXllck1wLCBrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigodGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEuZXhwaXJlc0F0IC0gRGF0ZS5ub3coKSkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEV4cGlyYXRpb25UaW1lKHBsYXllcjogUGxheWVyTXAsIGtleTogc3RyaW5nLCB0dGxNaWxsaXNlY29uZHM6IG51bWJlcikge1xuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5nZXQocGxheWVyKSEuZ2V0KGtleSkhLnRvdGFsSGl0cy0tO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRJZHMgPSB0aGlzLnRpbWVvdXRJZHMuZmlsdGVyKChpZCkgPT4gaWQgIT0gdGltZW91dElkKTtcbiAgICAgICAgfSwgdHRsTWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy50aW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5jcmVtZW50KHBsYXllcjogUGxheWVyTXAsIGtleTogc3RyaW5nLCB0dGw6IG51bWJlcikge1xuICAgICAgICBjb25zdCB0dGxNaWxsaXNlY29uZHMgPSB0dGw7XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQocGxheWVyLCBuZXcgTWFwKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLnNldChrZXksIHsgdG90YWxIaXRzOiAwLCBleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0dGxNaWxsaXNlY29uZHMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGltZVRvRXhwaXJlID0gdGhpcy5nZXRFeHBpcmF0aW9uVGltZShwbGF5ZXIsIGtleSk7XG5cbiAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVUb0V4cGlyZSBvbmNlIGl0IGhhcyBiZWVuIGV4cGlyZWQuXG4gICAgICAgIGlmICh0aW1lVG9FeHBpcmUgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEuZXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIHR0bE1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHRpbWVUb0V4cGlyZSA9IHRoaXMuZ2V0RXhwaXJhdGlvblRpbWUocGxheWVyLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEudG90YWxIaXRzKys7XG4gICAgICAgIHRoaXMuc2V0RXhwaXJhdGlvblRpbWUocGxheWVyLCBrZXksIHR0bE1pbGxpc2Vjb25kcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsSGl0czogdGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEudG90YWxIaXRzLFxuICAgICAgICAgICAgdGltZVRvRXhwaXJlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFwcFNodXRkb3duKCkge1xuICAgICAgICB0aGlzLnRpbWVvdXRJZHMuZm9yRWFjaChjbGVhclRpbWVvdXQpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBHbG9iYWwsIE1vZHVsZSwgdHlwZSBEeW5hbWljTW9kdWxlLCB0eXBlIFByb3ZpZGVyLCB0eXBlIEZhY3RvcnlQcm92aWRlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgeyBUSFJPVFRMRVJfT1BUSU9OUywgVEhST1RUTEVSX1NUT1JBR0UgfSBmcm9tICcuL3Rocm90dGxlci5jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBUaHJvdHRsZXJBc3luY09wdGlvbnMsIFRocm90dGxlck1vZHVsZU9wdGlvbnMsIFRocm90dGxlck9wdGlvbnNGYWN0b3J5IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90aHJvdHRsZXItc3RvcmFnZS5zZXJ2aWNlJztcblxuQEdsb2JhbCgpXG5ATW9kdWxlKClcbmV4cG9ydCBjbGFzcyBUaHJvdHRsZXJNb2R1bGUge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChvcHRpb25zOiBUaHJvdHRsZXJNb2R1bGVPcHRpb25zID0gW10pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZHVsZTogVGhyb3R0bGVyTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBUSFJPVFRMRVJfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRIUk9UVExFUl9TVE9SQUdFLFxuICAgICAgICAgICAgICAgICAgICB1c2VDbGFzczogVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBleHBvcnRzOiBbVEhST1RUTEVSX1NUT1JBR0UsIFRIUk9UVExFUl9PUFRJT05TXSxcbiAgICAgICAgfSBhcyBEeW5hbWljTW9kdWxlPFRocm90dGxlck1vZHVsZT47XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmb3JSb290QXN5bmMob3B0aW9uczogVGhyb3R0bGVyQXN5bmNPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVycyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuY3JlYXRlQXN5bmNQcm92aWRlcnMob3B0aW9ucyksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogVEhST1RUTEVSX1NUT1JBR0UsXG4gICAgICAgICAgICAgICAgdXNlQ2xhc3M6IFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZHVsZTogVGhyb3R0bGVyTW9kdWxlLFxuICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzID8/IFtdLFxuICAgICAgICAgICAgcHJvdmlkZXJzLFxuICAgICAgICAgICAgZXhwb3J0czogcHJvdmlkZXJzLFxuICAgICAgICB9IGFzIER5bmFtaWNNb2R1bGU8VGhyb3R0bGVyTW9kdWxlPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVBc3luY1Byb3ZpZGVycyhvcHRpb25zOiBUaHJvdHRsZXJBc3luY09wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlRXhpc3RpbmcgfHwgb3B0aW9ucy51c2VGYWN0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuY3JlYXRlQXN5bmNPcHRpb25zUHJvdmlkZXIob3B0aW9ucyldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUFzeW5jT3B0aW9uc1Byb3ZpZGVyKG9wdGlvbnMpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IG9wdGlvbnMudXNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMudXNlQ2xhc3MsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdIGFzIFByb3ZpZGVyW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQXN5bmNPcHRpb25zUHJvdmlkZXIob3B0aW9uczogVGhyb3R0bGVyQXN5bmNPcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZUZhY3RvcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogVEhST1RUTEVSX09QVElPTlMsXG4gICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogb3B0aW9ucy51c2VGYWN0b3J5LFxuICAgICAgICAgICAgICAgIGluamVjdDogb3B0aW9ucy5pbmplY3QgPz8gW10sXG4gICAgICAgICAgICB9IGFzIEZhY3RvcnlQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvdmlkZTogVEhST1RUTEVSX09QVElPTlMsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBhc3luYyAob3B0aW9uc0ZhY3Rvcnk6IFRocm90dGxlck9wdGlvbnNGYWN0b3J5KSA9PiBhd2FpdCBvcHRpb25zRmFjdG9yeS5jcmVhdGVUaHJvdHRsZXJPcHRpb25zKCksXG4gICAgICAgICAgICBpbmplY3Q6IG9wdGlvbnMudXNlQ2xhc3MgPyBbb3B0aW9ucy51c2VDbGFzc10gOiBvcHRpb25zLnVzZUV4aXN0aW5nID8gW29wdGlvbnMudXNlRXhpc3RpbmddIDogW10sXG4gICAgICAgIH0gYXMgRmFjdG9yeVByb3ZpZGVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVBcHBCdWlsZGVyIGFzICRjcmVhdGVBcHBCdWlsZGVyLCBBcHBCdWlsZGVyLCBBcHBFbnZpcm9tZW50IH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBQbGF5ZXJQcm90b3R5cGVQbHVnaW4sIFJQQ1BsdWdpbiwgU2VydmljZUJpbmRlclBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IsIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTZXJ2ZXJSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuL211bHRpcGxheWVyL3JhZ2VtcCc7XG5cbmNvbnN0IG11bHRpcGxheWVyU2VydmljZTogU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlID0gbmV3IFNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSgpO1xuXG5jbGFzcyBTZXJ2ZXJBcHBCdWlsZGVyIGV4dGVuZHMgQXBwQnVpbGRlcjxHdWFyZCwgSW50ZXJjZXB0b3IsIEVycm9yRmlsdGVyPiB7XG4gICAgcHVibGljIHNldEJsaXBGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldEJsaXBGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRNYXJrZXJGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldE1hcmtlckZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbFNoYXBlRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRDb2xTaGFwZUZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENoZWNrcG9pbnRGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldENoZWNrcG9pbnRGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRPYmplY3RGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldE9iamVjdEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBlZEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0UGVkRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGxheWVyRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRQbGF5ZXJGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWZWhpY2xlRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRWZWhpY2xlRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmlydHVhbEVudGl0eUdyb3VwRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5RmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRWaXJ0dWFsRW50aXR5RmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Vm9pY2VDaGFubmVsRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRWb2ljZUNoYW5uZWxGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcEJ1aWxkZXIoKSB7XG4gICAgcmV0dXJuIGF3YWl0ICRjcmVhdGVBcHBCdWlsZGVyKHtcbiAgICAgICAgZW52aXJvbWVudDogQXBwRW52aXJvbWVudC5TZXJ2ZXIsXG4gICAgICAgIHBsdWdpbnM6IFtTZXJ2aWNlQmluZGVyUGx1Z2luLCBQbGF5ZXJQcm90b3R5cGVQbHVnaW4sIFJQQ1BsdWdpbl0sXG4gICAgICAgIGFwcEJ1aWxkZXJJbmhlcml0OiBTZXJ2ZXJBcHBCdWlsZGVyLFxuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2VcbiAgICB9KTtcbn1cblxuZXhwb3J0ICogZnJvbSAnLi9leHBvcnRzJztcblxuaW1wb3J0ICcuL2V4dGVuc2lvbi5kLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7QUFBTyxJQUFLQSxnQkFBQUEsMEJBQUFBLGdCQUFBQTs7O1NBQUFBOztBQ0FMLElBQUtDLGtCQUFBQSwwQkFBQUEsa0JBQUFBOzs7Ozs7Ozs7Ozs7Ozs7U0FBQUE7O0FDQUwsSUFBS0MsbUJBQUFBLDBCQUFBQSxtQkFBQUE7Ozs7U0FBQUE7O0FDQUwsSUFBS0MsdUJBQUFBLDBCQUFBQSx1QkFBQUE7OztTQUFBQTs7QUNBTCxJQUFLQyxrQkFBQUEsMEJBQUFBLGtCQUFBQTs7Ozs7Ozs7U0FBQUE7Ozs7QUNBTCxJQUFNQyxpQkFBaUI7QUFDdkIsSUFBTUMsZ0JBQWdCO0FBQ3RCLElBQU1DLGNBQWM7QUFDcEIsSUFBTUMsbUJBQW1CO0FBQ3pCLElBQU1DLG9CQUFvQjtBQUMxQixJQUFNQyxnQkFBZ0I7OztBQ0x0QixJQUFLQyxlQUFBQSwwQkFBQUEsZUFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FBQUE7O0FDQUwsSUFBS0Msa0JBQUFBLDBCQUFBQSxrQkFBQUE7Ozs7U0FBQUE7O0FDQUwsSUFBS0Msa0JBQUFBLDBCQUFBQSxrQkFBQUE7Ozs7Ozs7Ozs7U0FBQUE7Ozs7QUNBWixJQUFJQyxhQUFZLE9BQU87QUFDdkIsSUFBSUMsVUFBUyx3QkFBQyxRQUFRLFVBQVFELFdBQVUsUUFBUSxRQUFRO0FBQUEsRUFDaEQ7QUFBQSxFQUNBLGNBQWM7QUFDbEIsQ0FBQyxHQUhROzs7QUNETixTQUFTRSxtQkFBQUE7QUFDWixTQUFPQyxLQUFLQyxPQUFNLEVBQUdDLFNBQVMsRUFBQSxFQUFJQyxVQUFVLEdBQUcsRUFBQSxJQUFNSCxLQUFLQyxPQUFNLEVBQUdDLFNBQVMsRUFBQSxFQUFJQyxVQUFVLEdBQUcsRUFBQTtBQUNqRztBQUZnQko7QUFBQUEsUUFB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a0I7QUFDN0NMLHVCQUFtQmMsd0JBQXdCVCxPQUFBQTtFQUMvQztFQUVPVSx1QkFBdUJWLFNBQWtCO0FBQzVDTCx1QkFBbUJlLHVCQUF1QlYsT0FBQUE7RUFDOUM7QUFDSjtBQUVBLGVBQXNCVyxvQkFBQUE7QUFDbEIsU0FBTyxNQUFNQyxpQkFBa0I7SUFDM0JDLFlBQVlDLGNBQWNDO0lBQzFCQyxTQUFTO01BQUNDO01BQXFCQztNQUF1QkM7O0lBQ3REQyxtQkFBbUJ2QjtJQUNuQkY7RUFDSixDQUFBO0FBQ0o7QUFQc0JnQixPQUFBQSxtQkFBQUE7IiwKICAibmFtZXMiOiBbIkFwcEVudmlyb21lbnQiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkV2ZW50RGVzdGluYXRpb24iLCAiRXhlY3V0aW9uQ29udGV4dFR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgIkxPR0dFUl9TRVJWSUNFIiwgIkVWRU5UX1NFUlZJQ0UiLCAiUlBDX1NFUlZJQ0UiLCAiTU9EVUxFX0NPTlRBSU5FUiIsICJSRUZMRUNUT1JfU0VSVklDRSIsICJUSU1FUl9TRVJWSUNFIiwgIkVycm9yTWVzc2FnZSIsICJJbmplY3RhYmxlU2NvcGUiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIl9fZGVmUHJvcCIsICJfX25hbWUiLCAiZ2VuZXJhdGVSYW5kb21JZCIsICJNYXRoIiwgInJhbmRvbSIsICJ0b1N0cmluZyIsICJzdWJzdHJpbmciLCAiaXNVbmRlZmluZWQiLCAiX19uYW1lIiwgIm9iaiIsICJpc09iamVjdCIsICJmbiIsICJpc05pbCIsICJpc0Z1bmN0aW9uIiwgInZhbCIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc0NvbnN0cnVjdG9yIiwgImlzRW1wdHkiLCAiYXJyYXkiLCAibGVuZ3RoIiwgImlzU3ltYm9sIiwgImlzQXN5bmNGdW5jdGlvbiIsICJuYW1lIiwgImlzQm9vbGVhbiIsICJpc1Byb21pc2UiLCAiUHJvbWlzZSIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJDb250YWluZXIiLCAiTW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAibG9nZ2VyU2VydmljZSIsICJyZWFkIiwgIm1vZHVsZSIsICJpc0Z1bmN0aW9uIiwgIm9wdGlvbnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiTW9kdWxlIiwgImV4cG9ydFRva2VucyIsICJnZXRFeHBvcnRUb2tlbnMiLCAiZXhwb3J0cyIsICJzZXBhcmF0ZWRQcm92aWRlcnMiLCAic2VwYXJhdGVQcm92aWRlcnMiLCAicHJvdmlkZXJzIiwgImNvbnRyb2xsZXJzIiwgImltcG9ydHMiLCAiZ2V0UGlwZWxpbmUiLCAiY2xhc3NSZWYiLCAiZ2xvYmFsIiwgIkdsb2JhbE1vZHVsZSIsICJjb250YWluZXIiLCAiUHJvbWlzZSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZE1vZHVsZURlZmluaXRpb24iLCAiZ3VhcmRzIiwgIkd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAiSW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIlBpcGVzIiwgImVycm9yRmlsdGVycyIsICJFcnJvckZpbHRlcnMiLCAibWFwIiwgInByb3ZpZGVyRXhwb3J0IiwgImhhc093bk1ldGFkYXRhIiwgIkluamVjdGFibGUiLCAiSW52YWxpZEV4cG9ydERlZmluaXRpb24iLCAiaXNTdHJpbmciLCAiaXNTeW1ib2wiLCAicHJvdmlkZSIsICJwcm92aWRlciIsICJpbmplY3RhYmxlTWV0YWRhdGEiLCAiaXNOaWwiLCAiSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbiIsICJ1c2VDbGFzcyIsICJzY29wZSIsICJyZWR1Y2UiLCAiYWNjIiwgImluY2x1ZGVzIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgInNldCIsICJpbnRlcm5hbFByb3ZpZGVycyIsICJNYXAiLCAiTW9kdWxlQ29udGFpbmVyIiwgIkNvbnRhaW5lciIsICJwYXJlbnQiLCAibWV0YWRhdGEiLCAiaW5zdGFuY2UiLCAicmVwZXRpdGl2ZUltcG9ydHMiLCAiU2V0IiwgImluamVjdGFibGUiLCAiaW5qZWN0IiwgIkV4ZWN1dGlvbkNvbnRleHRCYXNlIiwgIiR0eXBlIiwgIiRjbGFzc1JlZiIsICIkaGFuZGxlciIsICIkcmVxdWVzdCIsICIkcmVzcG9uc2UiLCAiJG5hbWUiLCAidHlwZSIsICJjbGFzc1JlZiIsICJoYW5kbGVyIiwgInJlcXVlc3QiLCAicmVzcG9uc2UiLCAibmFtZSIsICJNYW5nb1JlcXVlc3RCYXNlIiwgIiRib2R5IiwgIiRwbGF5ZXIiLCAiYm9keSIsICJwbGF5ZXIiLCAiTWFuZ29SZXNwb25zZUJhc2UiLCAiJGxvZ2dlclNlcnZpY2UiLCAiJHNlbmRMaXN0ZW5lcnMiLCAiU2V0IiwgIiRlcnJvckxpc3RlbmVycyIsICIkaXNTZW50IiwgInNlbmQiLCAiZGF0YSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiUlBDUmVzcG9uc2VBbHJlYWR5U2VudCIsICJmb3JFYWNoIiwgImxpc3RlbmVyIiwgIm1lc3NhZ2UiLCAiZGV0YWlscyIsICIkb25TZW5kIiwgImFkZCIsICIkb25FcnJvciIsICJUcmVlTm9kZSIsICJ2YWx1ZSIsICJjaGlsZHJlbiIsICJhZGRDaGlsZCIsICJjaGlsZCIsICJwdXNoIiwgInJlbW92ZUNoaWxkIiwgImluZGV4IiwgImluZGV4T2YiLCAic3BsaWNlIiwgIlRyZWUiLCAicm9vdCIsICJ0cmF2ZXJzZSIsICJjYWxsYmFjayIsICJ0cmF2ZXJzZU5vZGUiLCAibm9kZSIsICJmb3JFYWNoIiwgImFzeW5jVHJhdmVyc2UiLCAiUHJvbWlzZSIsICJhbGwiLCAibWFwIiwgInRvU3RyaW5nIiwgInJlc3VsdCIsICJsaW5lcyIsICJkZXB0aCIsICJyZXBlYXQiLCAiam9pbiIsICJkZWZhdWx0Q29udHJvbGxlck9wdGlvbnMiLCAicHJlZml4IiwgInZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMiLCAib3B0aW9ucyIsICJpc05pbCIsICJ2YWxpZCIsICJ2YWx1ZSIsICJpc09iamVjdCIsICJlcnJvciIsICJpc1N0cmluZyIsICJ2YWxpZGF0ZUVycm9yRmlsdGVyIiwgImlzRnVuY3Rpb24iLCAicHJvdG90eXBlIiwgImNhdGNoIiwgInZhbGlkYXRlUGlwZSIsICJ0cmFuc2Zvcm0iLCAidmFsaWRhdGVFdmVudFBhcmFtZXRlciIsICJrZXkiLCAiaXNOdW1iZXIiLCAiaW5kZXgiLCAidHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiQm9keSIsICJQbGF5ZXIiLCAiZGF0YSIsICJDdXN0b20iLCAiZmFjdG9yeSIsICJQYXJhbSIsICJJbmRleCIsICJSZXF1ZXN0IiwgIlJlc3BvbnNlIiwgIkFycmF5IiwgImlzQXJyYXkiLCAicGlwZXMiLCAicGlwZSIsICJ2YWxpZGF0ZUV2ZW50TWV0YWRhdGEiLCAibmFtZSIsICJtZXRob2QiLCAicGFyYW1zIiwgInBhcmFtIiwgInZhbGlkYXRlR3VhcmQiLCAiY2FuQWN0aXZhdGUiLCAidmFsaWRhdGVJbnRlcmNlcHRvciIsICJpbnRlcmNlcHQiLCAidmFsaWRhdGVJbmplY3Rpb25Ub2tlbiIsICJpc1N5bWJvbCIsICJ2YWxpZGF0ZVByb3ZpZGVyIiwgInByb3ZpZGUiLCAidmFsaWRhdGVDbGFzc1Byb3ZpZGVyIiwgInZhbGlkYXRlVmFsdWVQcm92aWRlciIsICJ2YWxpZGF0ZUZhY3RvcnlQcm92aWRlciIsICJ2YWxpZGF0ZUV4aXN0aW5nUHJvdmlkZXIiLCAic2NvcGUiLCAiSW5qZWN0YWJsZVNjb3BlIiwgIlNpbmdsZXRvbiIsICJPYmplY3QiLCAidmFsdWVzIiwgImluY2x1ZGVzIiwgInZhbGlkYXRlT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSIsICJ0b2tlbiIsICJ1c2VGYWN0b3J5IiwgImluamVjdCIsICJ2YWxpZGF0ZU1vZHVsZU9wdGlvbnMiLCAiaXNEeW5hbWljIiwgImNvbnRyb2xsZXJzIiwgImltcG9ydHMiLCAicHJvdmlkZXJzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJpc0Jvb2xlYW4iLCAiaW1wb3J0ZWQiLCAiaXNQcm9taXNlIiwgImNvbnRyb2xsZXIiLCAicHJvdmlkZXIiLCAiZXhwb3J0SXRlbSIsICJkZWZhdWx0SW5qZWN0YWJsZU9wdGlvbnMiLCAidmFsaWRhdGVJbmplY3RhYmxlTWV0YWRhdGEiLCAiSU5URVJOQUxfQVBQX0NPTlRBSU5FUiIsICJHTE9CQUxfQVBQX0NPTlRBSU5FUiIsICJBUFBfRU5WSVJPTUVOVCIsICJHTE9CQUxfR1VBUkRTIiwgIkdMT0JBTF9JTlRFUkNFUFRPUlMiLCAiR0xPQkFMX1BJUEVTIiwgIkdMT0JBTF9FUlJPUl9GSUxURVJTIiwgIlBMVUdJTlMiLCAiRU5BQkxFX1NIVVRET1dOX0hPT0tTIiwgIkNPTlRBSU5FUl9PUFRJT05TIiwgIk1BTkdPX0xPR19QUkVGSVgiLCAiTUFOR09fUkVRVUVTVF9GQUNUT1JZIiwgIk1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkiLCAiRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSIsICJNVUxUSVBMQVlFUl9TRVJWSUNFIiwgIlJQQ19SRVNVTFRfVElNRU9VVCIsICJzdWNjZXNzIiwgImVycm9yIiwgIm1lc3NhZ2UiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJUaW1lb3V0IiwgIlJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQiLCAiSGFuZGxlck5vdEZvdW5kIiwgIlJQQ19SRVNVTFRfVU5LTk9XTiIsICJVbmtub3duIiwgIlJQQ19SRVNVTFRfUExBWUVSX0RJU0NPTk5FQ1RFRCIsICJQbGF5ZXJEaXNjb25uZWN0ZWQiLCAiUlBDX1JFU1VMVF9QTEFZRVJfTk9UX0ZPVU5EIiwgIlBsYXllck5vdEZvdW5kIiwgIk1hbmdvRXJyb3IiLCAiRXJyb3IiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJVbmtub3duIiwgImRldGFpbHMiLCAibWVzc2FnZSIsICJHdWFyZENhbmNlbEVycm9yIiwgIkNhbmNlbGxlZEJ5R3VhcmQiLCAiR3VhcmRJbnZhbGlkUmV0dXJuRXJyb3IiLCAiSW52YWxpZEd1YXJkUmV0dXJuIiwgIlRvb01hbnlSZXF1ZXN0cyIsICJVbmtub3duRXJyb3IiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiUGlwZWxpbmVIYW5kbGVyIiwgImxvZ2dlclNlcnZpY2UiLCAiZ29Ucm91Z2hHdWFyZHMiLCAiZXhlY3V0aW9uQ29udGV4dCIsICJndWFyZHMiLCAiY29udGFpbmVyIiwgImd1YXJkIiwgImluc3RhbmNlIiwgImlzRnVuY3Rpb24iLCAiZ2V0IiwgImlzT2JqZWN0IiwgImlzTmlsIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkR3VhcmREZWZpbml0aW9uIiwgImNhbkFjdGl2YXRlIiwgImNhbGwiLCAiR3VhcmRJbnZhbGlkUmV0dXJuRXJyb3IiLCAiR3VhcmRDYW5jZWxFcnJvciIsICJnb1Rocm91Z2hJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3JzIiwgImNhbGxIYW5kbGVyIiwgImludGVyY2VwdG9yIiwgIkludmFsaWRJbnRlcmNlcHRvckRlZmluaXRpb24iLCAiaW50ZXJjZXB0IiwgImdvVHJvdWdoUGlwZXMiLCAidmFsdWUiLCAicGlwZXMiLCAiYXJndW1lbnRNZXRhZGF0YSIsICJwaXBlIiwgIkludmFsaWRQaXBlRGVmaW5pdGlvbiIsICJQcm9taXNlIiwgInJlc29sdmUiLCAidHJhbnNmb3JtIiwgIkNvbnRyb2xsZXJGbG93SGFuZGxlciIsICJhcHBFbnYiLCAicGlwZWxpbmVIYW5kbGVyIiwgImNyZWF0ZUFyZ3MiLCAiY29udHJvbGxlciIsICJtZXRhZGF0YSIsICJwbGF5ZXIiLCAiYWxsIiwgInBhcmFtcyIsICJtYXAiLCAicGFyYW0iLCAidHlwZSIsICJkYXRhIiwgIm1ldGF0eXBlIiwgInJlcXVlc3QiLCAiYm9keSIsICJvd25lciIsICJ1bmRlZmluZWQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJmYWN0b3J5IiwgIkFwcEVudmlyb21lbnQiLCAiU2VydmVyIiwgIkNvbnRyb2xsZXJFdmVudEhhbmRsZXIiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgImV2ZW50U2VydmljZSIsICJjb250cm9sbGVyRmxvd0hhbmRsZXIiLCAiY3JlYXRlTWFuZ29SZXF1ZXN0IiwgImNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQiLCAicmVnaXN0ZXJFdmVudCIsICJtYXBwZWRFcnJvckZpbHRlcnMiLCAiZXZlbnQiLCAibmFtZSIsICJoYW5kbGVFdmVudCIsICJhcmdzIiwgInBhcnNlSW50ZXJuYWxBcmdzIiwgIndlYlZpZXdJZCIsICJJbnZhbGlkRXZlbnRUeXBlIiwgIkV4ZWN1dGlvbkNvbnRleHRUeXBlIiwgIkV2ZW50IiwgImNsYXNzUmVmIiwgInByb3RvdHlwZSIsICJtZXRob2QiLCAiY29udHJvbGxlck1ldGhvZCIsICJoYW5kbGUiLCAiaXNBc3luY0Z1bmN0aW9uIiwgImFwcGx5IiwgInJldHVybiIsICJfX25hbWUiLCAiSW52YWxpZFJldHVybkluRXZlbnQiLCAibGVuZ3RoIiwgImVycm9yR3JvdXAiLCAiZmluZCIsICJlcnJvclR5cGUiLCAiSW52YWxpZEVycm9yRmlsdGVyRGVmaW5pdGlvbiIsICJjYXRjaCIsICJDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIiLCAicmVhZCIsICJvcHRpb25zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXIiLCAiZXZlbnRzIiwgImdldEV2ZW50cyIsICJycGNzIiwgImdldFJQQ3MiLCAidGltZXJzIiwgImdldFRpbWVycyIsICJnZXRQaXBlbGluZSIsICJDb250cm9sbGVyRXZlbnRzIiwgImdldE1ldGhvZFBhcmFtcyIsICJDb250cm9sbGVyUlBDcyIsICJycGMiLCAiQ29udHJvbGxlclBhcmFtcyIsICJzb3J0IiwgImEiLCAiYiIsICJpbmRleCIsICJmb3JFYWNoIiwgIkludmFsaWRQYXJhbWV0ZXJEZWNvcmF0b3JVc2FnZSIsICJSZXNwb25zZURlY29yYXRvck5vdEFsbG93ZWRPbkV2ZW50cyIsICJDbGllbnQiLCAiUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzIiwgIlJQQ05vdEFsbG93ZWRJbkNsaWVudCIsICJSUENOb3RBbGxvd2VkSW5TZXJ2ZXIiLCAiRXZlbnROb3RBbGxvd2VkSW5DbGllbnQiLCAiRXZlbnROb3RBbGxvd2VkSW5TZXJ2ZXIiLCAidGFyZ2V0IiwgIkd1YXJkcyIsICJJbnRlcmNlcHRvcnMiLCAiUGlwZXMiLCAiZXJyb3JGaWx0ZXJzIiwgIkVycm9yRmlsdGVycyIsICJUaW1lcnMiLCAiQ29udHJvbGxlclJQQ0hhbmRsZXIiLCAicnBjU2VydmljZSIsICJjcmVhdGVNYW5nb1Jlc3BvbnNlIiwgInJlZ2lzdGVyUlBDIiwgImhhbmRsZVJQQyIsICJJbnZhbGlkUlBDVHlwZSIsICJyZXNwb25zZSIsICIkb25TZW5kIiwgIiRvbkVycm9yIiwgIlJQQyIsICJzZW5kIiwgInJlc3VsdCIsICJldmVudEhhbmRsZXJzIiwgInJwY0hhbmRsZXJzIiwgImluamVjdGFibGUiLCAiaW5qZWN0YWJsZSIsICJpbmplY3QiLCAib3B0aW9uYWwiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAib3B0aW9uYWwiLCAiQ29udGFpbmVyIiwgIkxhenlTZXJ2aWNlSWRlbnRpZmllciIsICJtaW5pdHoiLCAieSIsICJtIiwgImQiLCAiaCIsICJpIiwgInMiLCAidHoiLCAidGhyb3dPbkludmFsaWQiLCAiZnJvbVRaIiwgInRwIiwgImZyb21UWklTTyIsICJsb2NhbFRpbWVTdHIiLCAicGFyc2VJU09Mb2NhbCIsICJpbkRhdGUiLCAiRGF0ZSIsICJVVEMiLCAib2Zmc2V0IiwgImdldFRpbWV6b25lT2Zmc2V0IiwgImRhdGVHdWVzcyIsICJnZXRUaW1lIiwgImRhdGVPZmZzR3Vlc3MiLCAiZGF0ZUd1ZXNzMiIsICJkYXRlT2Zmc0d1ZXNzMiIsICJFcnJvciIsICJ0b1RaIiwgInR6U3RyIiwgImxvY2FsRGF0ZVN0cmluZyIsICJ0b0xvY2FsZVN0cmluZyIsICJ0aW1lWm9uZSIsICJyZXBsYWNlIiwgInRkIiwgImdldEZ1bGxZZWFyIiwgImdldE1vbnRoIiwgImdldERhdGUiLCAiZ2V0SG91cnMiLCAiZ2V0TWludXRlcyIsICJnZXRTZWNvbmRzIiwgImRhdGUiLCAidGltZVpvbmVOYW1lIiwgInNwbGl0IiwgInNsaWNlIiwgImRhdGVTdHJpbmciLCAicGFyc2UiLCAiZHRTdHIiLCAicGQiLCAiaXNOYU4iLCAic3RyaW5nRW5kIiwgInN1YnN0cmluZyIsICJpbmNsdWRlcyIsICJnZXRVVENGdWxsWWVhciIsICJnZXRVVENNb250aCIsICJnZXRVVENEYXRlIiwgImdldFVUQ0hvdXJzIiwgImdldFVUQ01pbnV0ZXMiLCAiZ2V0VVRDU2Vjb25kcyIsICJDcm9uT3B0aW9ucyIsICJvcHRpb25zIiwgIm5hbWUiLCAibGVnYWN5TW9kZSIsICJwYXVzZWQiLCAibWF4UnVucyIsICJJbmZpbml0eSIsICJjYXRjaCIsICJpbnRlcnZhbCIsICJwYXJzZUludCIsICJ1dGNPZmZzZXQiLCAidW5yZWYiLCAic3RhcnRBdCIsICJDcm9uRGF0ZSIsICJ0aW1lem9uZSIsICJzdG9wQXQiLCAiTEFTVF9PQ0NVUlJFTkNFIiwgIkFOWV9PQ0NVUlJFTkNFIiwgIk9DQ1VSUkVOQ0VfQklUTUFTS1MiLCAiQ3JvblBhdHRlcm4iLCAicGF0dGVybiIsICJzZWNvbmQiLCAiQXJyYXkiLCAiZmlsbCIsICJtaW51dGUiLCAiaG91ciIsICJkYXkiLCAibW9udGgiLCAiZGF5T2ZXZWVrIiwgImxhc3REYXlPZk1vbnRoIiwgInN0YXJET00iLCAic3RhckRPVyIsICJwcm90b3R5cGUiLCAiU3RyaW5nIiwgIlR5cGVFcnJvciIsICJpbmRleE9mIiwgImhhbmRsZU5pY2tuYW1lcyIsICJ0cmltIiwgInBhcnRzIiwgImxlbmd0aCIsICJ1bnNoaWZ0IiwgInJlcGxhY2VBbHBoYU1vbnRocyIsICJyZXBsYWNlQWxwaGFEYXlzIiwgImluaXREYXRlIiwgImdldERheSIsICJ0aHJvd0F0SWxsZWdhbENoYXJhY3RlcnMiLCAicGFydFRvQXJyYXkiLCAidHlwZSIsICJjb25mIiwgInZhbHVlSW5kZXhPZmZzZXQiLCAiZGVmYXVsdFZhbHVlIiwgImFyciIsICJoYW5kbGVSYW5nZVdpdGhTdGVwcGluZyIsICJoYW5kbGVSYW5nZSIsICJoYW5kbGVTdGVwcGluZyIsICJoYW5kbGVOdW1iZXIiLCAicmVWYWxpZENyb24iLCAidGVzdCIsICJyZXN1bHQiLCAiZXh0cmFjdE50aCIsICJzZXRQYXJ0IiwgInBhcnQiLCAiaW5kZXgiLCAidmFsdWUiLCAiT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImNhbGwiLCAiUmFuZ2VFcnJvciIsICJzZXROdGhXZWVrZGF5T2ZNb250aCIsICJtYXRjaGVzIiwgIm1hdGNoIiwgImxvd2VyIiwgInVwcGVyIiwgInN0ZXBzIiwgInJlc3QiLCAibnRoIiwgInN0YXJ0IiwgImNsZWFuUGF0dGVybiIsICJ0b0xvd2VyQ2FzZSIsICJudGhXZWVrZGF5IiwgIkRheXNPZk1vbnRoIiwgIlJlY3Vyc2lvblN0ZXBzIiwgImZyb21EYXRlIiwgImZyb21TdHJpbmciLCAiZnJvbUNyb25EYXRlIiwgImlzTnRoV2Vla2RheU9mTW9udGgiLCAieWVhciIsICJ3ZWVrZGF5IiwgImdldFVUQ0RheSIsICJjb3VudCIsICJkYXlzSW5Nb250aCIsICJtcyIsICJnZXRVVENNaWxsaXNlY29uZHMiLCAiYXBwbHkiLCAiZ2V0TWlsbGlzZWNvbmRzIiwgInN0ciIsICJmaW5kTmV4dCIsICJ0YXJnZXQiLCAib3JpZ2luYWxUYXJnZXQiLCAiZkRvbVdlZWtEYXkiLCAidW5kZWZpbmVkIiwgImRvd01hdGNoIiwgInJlY3Vyc2UiLCAiZG9pbmciLCAicmVzIiwgInJlc2V0TGV2ZWwiLCAiaW5jcmVtZW50IiwgImhhc1ByZXZpb3VzUnVuIiwgImludGVybmFsIiwgImlzRnVuY3Rpb24iLCAidiIsICJ0b1N0cmluZyIsICJGdW5jdGlvbiIsICJ1bnJlZlRpbWVyIiwgInRpbWVyIiwgIkRlbm8iLCAibWF4RGVsYXkiLCAic2NoZWR1bGVkSm9icyIsICJDcm9uIiwgImZuT3JPcHRpb25zMSIsICJmbk9yT3B0aW9uczIiLCAiZnVuYyIsICJfc3RhdGVzIiwgImtpbGwiLCAiYmxvY2tpbmciLCAicHJldmlvdXNSdW4iLCAiY3VycmVudFJ1biIsICJvbmNlIiwgImN1cnJlbnRUaW1lb3V0IiwgImV4aXN0aW5nIiwgImZpbmQiLCAiaiIsICJwdXNoIiwgImZuIiwgInNjaGVkdWxlIiwgIm5leHRSdW4iLCAicHJldiIsICJuZXh0IiwgIl9uZXh0IiwgIm5leHRSdW5zIiwgIm4iLCAicHJldmlvdXMiLCAiZW51bWVyYXRpb24iLCAiZ2V0UGF0dGVybiIsICJpc1J1bm5pbmciLCAibmV4dFJ1blRpbWUiLCAiaXNTY2hlZHVsZWQiLCAibm90SXNLaWxsZWQiLCAiaXNTdG9wcGVkIiwgImlzQnVzeSIsICJtc1RvTmV4dCIsICJzdG9wIiwgImNsZWFyVGltZW91dCIsICJqb2JJbmRleCIsICJzcGxpY2UiLCAicGF1c2UiLCAicmVzdW1lIiwgIndhaXRNcyIsICJzZXRUaW1lb3V0IiwgIl9jaGVja1RyaWdnZXIiLCAiX3RyaWdnZXIiLCAiaW5pdGlhdGlvbkRhdGUiLCAiY29udGV4dCIsICJfZSIsICJ0cmlnZ2VyIiwgIm5vdyIsICJzaG91bGRSdW4iLCAiaXNCbG9ja2VkIiwgInByb3RlY3QiLCAic3RhcnRBdEluRnV0dXJlV2l0aEludGVydmFsIiwgIl9jYWxjdWxhdGVQcmV2aW91c1J1biIsICJwcmV2VGltZVBsdXNJbnRlcnZhbCIsICJDb250cm9sbGVyIiwgIm9wdGlvbnMiLCAidGFyZ2V0IiwgIlJlZmxlY3QiLCAiaGFzTWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIiwgImRlZmluZU1ldGFkYXRhIiwgImluamVjdGFibGUiLCAiR2xvYmFsIiwgIkdsb2JhbE1vZHVsZSIsICJJbmplY3QiLCAia2V5IiwgInByb3BlcnR5S2V5IiwgInBhcmFtSW5kZXgiLCAiaXNOaWwiLCAidmFsaWRhdGVJbmplY3Rpb25Ub2tlbiIsICJJbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQiLCAidG9rZW4iLCAiZ2V0TWV0YWRhdGEiLCAiSW5qZWN0aW9uVG9rZW5Ob3RGb3VuZCIsICJpbmplY3QiLCAiSW5qZWN0YWJsZSIsICJ2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSIsICJNb2R1bGUiLCAidmFsaWRhdGVNb2R1bGVPcHRpb25zIiwgIk9wdGlvbmFsIiwgIm9wdGlvbmFsIiwgIlNldE1ldGFkYXRhIiwgImRlY29yYXRvckZhY3RvcnkiLCAiX19uYW1lIiwgIl9tZXRob2QiLCAiZGVzY3JpcHRvciIsICJLRVkiLCAiQ2F0Y2giLCAiZXhjZXB0aW9ucyIsICJkdXBsaWNhdGVzIiwgImZpbHRlciIsICJleGNlcHRpb24iLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJsZW5ndGgiLCAiRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCIsICJVc2VGaWx0ZXJzIiwgImZpbHRlcnMiLCAibWV0aG9kIiwgInZhbGlkYXRlZEZpbHRlcnMiLCAidmFsaWRhdGVFcnJvckZpbHRlciIsICJwdXNoIiwgIkF0TGVhc3RPbmVGaWx0ZXJSZXF1aXJlZCIsICJtZXRob2RGaWx0ZXJzIiwgIkVycm9yRmlsdGVycyIsICJmaW5kIiwgImluY2x1ZGVzIiwgIkR1cGxpY2F0ZUVycm9yRmlsdGVyRGV0ZWN0ZWQiLCAiY2xhc3NGaWx0ZXJzIiwgIkFwcFJ1bnRpbWUiLCAiZXZlbnRIYW5kbGVyIiwgInJwY0hhbmRsZXIiLCAiZ2xvYmFsR3VhcmRzIiwgImdsb2JhbEludGVyY2VwdG9ycyIsICJnbG9iYWxQaXBlcyIsICJnbG9iYWxFcnJvckZpbHRlcnMiLCAibG9nZ2VyU2VydmljZSIsICJlbmFibGVTaHV0ZG93bkhvb2tzIiwgImJvb3QiLCAicmVzb2x2ZWRUcmVlIiwgImFzeW5jVHJhdmVyc2UiLCAibm9kZSIsICJzdGFydFRpbWUiLCAiRGF0ZSIsICJub3ciLCAibW9kdWxlIiwgImluc3RhbmNlIiwgImNvbnRhaW5lciIsICJnZXQiLCAibWV0YWRhdGEiLCAiY2xhc3NSZWYiLCAiY29udHJvbGxlcnMiLCAiZm9yRWFjaCIsICJjb250cm9sbGVyIiwgImludGVybmFsUHJvdmlkZXJzIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgImxvZyIsICJuYW1lIiwgInJ1bkxpZmVjeWNsZU1ldGhvZCIsICJydW5MaWZlY3ljbGVNZXRob2RzIiwgInRyYXZlcnNlIiwgInRpbWUiLCAicmVnaXN0ZXJUaW1lcnMiLCAicmVnaXN0ZXJMaXN0ZW5lcnMiLCAic2h1dGRvd24iLCAidGltZXJTZXJ2aWNlIiwgIm93bmVyIiwgIlRJTUVSX1NFUlZJQ0UiLCAiZXZlcnl0aWNrcyIsICJ0aW1lciIsICJkZXN0cm95IiwgImludGVydmFscyIsICJ0aW1lb3V0cyIsICJjcm9ucyIsICJjcm9uIiwgInN0b3AiLCAiZXZlbnRIYW5kbGVycyIsICJoYW5kbGVyIiwgInJwY0hhbmRsZXJzIiwgImV2ZW50cyIsICJldmVudCIsICJndWFyZHMiLCAiaW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIm1hcHBlZEVycm9yRmlsdGVycyIsICJtYXBFcnJvckZpbHRlcnMiLCAiZXJyb3JGaWx0ZXJzIiwgInJlZ2lzdGVyRXZlbnQiLCAicnBjcyIsICJycGMiLCAicmVnaXN0ZXJSUEMiLCAidGltZXJzIiwgInR5cGUiLCAiY3JlYXRlQ3JvbkpvYiIsICJiaW5kIiwgImNyZWF0ZUV2ZXJ5VGljayIsICJjcmVhdGVJbnRlcnZhbCIsICJ0aW1lb3V0IiwgImNyZWF0ZVRpbWVvdXQiLCAiZmlsdGVyTWFwIiwgImVycm9ycyIsICJmaWx0ZXJFcnJvciIsICJFcnJvckFscmVhZHlIYW5kbGVkQnlGaWx0ZXIiLCAiUHJvbWlzZSIsICJhbGwiLCAibWFwIiwgImlzT2JqZWN0IiwgInByb3ZpZGVySW5zdGFuY2UiLCAiTW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJnbG9iYWxBcHBDb250YWluZXIiLCAiY29udGFpbmVyT3B0aW9ucyIsICJNb2R1bGVDb250YWluZXIiLCAicGFyZW50IiwgInRvU2VsZiIsICJpblNpbmdsZXRvblNjb3BlIiwgImdsb2JhbCIsICJfIiwgInByb3ZpZGVyIiwgImJpbmRQcm92aWRlciIsICJ0b0R5bmFtaWNWYWx1ZSIsICJpbXBvcnRNb2R1bGUiLCAicmVwZXRpdGl2ZUltcG9ydHMiLCAiTU9EVUxFX0NPTlRBSU5FUiIsICJ0b0NvbnN0YW50VmFsdWUiLCAidG8iLCAiVGltZXJTZXJ2aWNlIiwgInByb3ZpZGUiLCAidXNlVmFsdWUiLCAiYmluZGluZyIsICJjdHgiLCAiZGVwcyIsICJkZXAiLCAiZXJyIiwgInVuZGVmaW5lZCIsICJ1c2VGYWN0b3J5IiwgInNjb3BlIiwgImluVHJhbnNpZW50U2NvcGUiLCAiaW5SZXF1ZXN0U2NvcGUiLCAidXNlQ2xhc3MiLCAidG9TZXJ2aWNlIiwgInVzZUV4aXN0aW5nIiwgIk1vZHVsZVRyZWVTY2FubmVyIiwgIm1vZHVsZU1ldGFkYXRhUmVhZGVyIiwgImNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciIsICJzY2FuIiwgIm1vZHVsZU1ldGFkYXRhIiwgInJlYWQiLCAic2NhbkNvbnRyb2xsZXJzIiwgIm1vZHVsZVRyZWUiLCAiVHJlZSIsICJzY2FubmVkTW9kdWxlcyIsICJNYXAiLCAic2V0IiwgImltcG9ydGVkTW9kdWxlIiwgImltcG9ydHMiLCAic2Nhbk1vZHVsZXMiLCAicm9vdCIsICJwYXJlbnROb2RlIiwgInNjYW5uZWRNb2R1bGUiLCAiYWRkIiwgImNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5IiwgInRyZWVOb2RlIiwgIlRyZWVOb2RlIiwgImFkZENoaWxkIiwgImNvbnRyb2xsZXJNZXRhZGF0YSIsICJwYXJlbnRNZXRhZGF0YSIsICJDaXJjdWxhckRlcGVuZGVuY3lEZXRlY3RlZCIsICJSYWdlTVBTY3JpcHRFdmVudCIsICJldmVudE5hbWUiLCAibGlzdGVuZXIiLCAibXAiLCAicmVtb3ZlIiwgIlJhZ2VNUEV2ZW50RW1taXRlciIsICJlbWl0IiwgImFyZ3MiLCAiY2FsbCIsICJvbiIsICJvbmNlIiwgIm9uY2VXcmFwcGVyIiwgIm9mZiIsICJSYWdlTVBUaW1lciIsICJsYXN0VGljayIsICJpZCIsICJpbnRlcnZhbCIsICJjYWxsYmFjayIsICJjbGVhclRpbWVyIiwgIlJhZ2VNUFRpbWVycyIsICJ0aW1lckluY3JlbWVudGVyIiwgImV2ZXJ5VGlja0hhbmRsZXJzIiwgImlzRXZlcnlUaWNrUnVubmluZyIsICJldmVyeVRpY2tNYWluSGFuZGxlciIsICJ2YWx1ZXMiLCAid2FybmluZ1RocmVzaG9sZCIsICJfdmFsdWUiLCAic291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCIsICJnZXRCeUlEIiwgImNyZWF0ZVRpbWVyIiwgImNsZWFyIiwgImNhbGxiYWNrQmluZCIsICJBcnJheSIsICJpc0FycmF5IiwgInRpbWVySWQiLCAicmFnZU1QVGltZXIiLCAiZGVsZXRlIiwgInNldEludGVydmFsIiwgImNiIiwgImNsZWFySW50ZXJ2YWwiLCAic2V0VGltZW91dCIsICJjbGVhclRpbWVvdXQiLCAiZXZlcnlUaWNrIiwgImJvdW5kIiwgImlzQ2xpZW50U2lkZSIsICJicm93c2VycyIsICJlIiwgImNvbnNvbGUiLCAibG9nRXJyb3IiLCAiaW50ZXJ2YWxIYW5kbGVyIiwgIl9ldmVyeVRpY2tJbnRlcnZhbCIsICJzaXplIiwgIm5leHRUaWNrIiwgIl9uYW1lIiwgInRpbWVFbmQiLCAiUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIlRpbWVycyIsICJFdmVudHMiLCAicGFyc2VJbnRlcm5hbEFyZ3MiLCAicGxheWVyIiwgImJvZHkiLCAiYXJnIiwgIm1lc3NhZ2UiLCAiYSIsICJKU09OIiwgInN0cmluZ2lmeSIsICJTdHJpbmciLCAiam9pbiIsICJsb2dJbmZvIiwgImxvZ1dhcm5pbmciLCAibG9nRGVidWciLCAiQXBwIiwgIm1vZHVsZVRyZWVTY2FubmVyIiwgIm1vZHVsZURlcGVuZGVuY3lCaW5kZXIiLCAiYXBwUnVudGltZSIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJwbHVnaW5zIiwgImxvYWRlZCIsICJzdGFydCIsICJyb290TW9kdWxlIiwgIkFwcEFscmVhZHlMb2FkZWQiLCAicnVuUGx1Z2luTWV0aG9kcyIsICJBcHBOb3RMb2FkZWQiLCAicCIsICJwbHVnaW4iLCAicmVzb2x2ZSIsICJBcHBCdWlsZGVyIiwgImVudmlyb21lbnQiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgImdsb2JhbENvbnRhaW5lck9wdGlvbnMiLCAidXNlR2xvYmFsR3VhcmRzIiwgInZhbGlkYXRlZEd1YXJkcyIsICJndWFyZCIsICJ2YWxpZGF0ZUd1YXJkIiwgIkdMT0JBTF9HVUFSRFMiLCAidXNlR2xvYmFsSW50ZXJjZXB0b3JzIiwgInZhbGlkYXRlZEludGVyY2VwdG9ycyIsICJpbnRlcmNlcHRvciIsICJ2YWxpZGF0ZUludGVyY2VwdG9yIiwgIkdMT0JBTF9JTlRFUkNFUFRPUlMiLCAidXNlR2xvYmFsUGlwZXMiLCAidmFsaWRhdGVkUGlwZXMiLCAicGlwZSIsICJ2YWxpZGF0ZVBpcGUiLCAiR0xPQkFMX1BJUEVTIiwgInVzZUdsb2JhbEZpbHRlcnMiLCAidmFsaWRhdGVkRklsdGVycyIsICJHTE9CQUxfRVJST1JfRklMVEVSUyIsICJ1c2VQbHVnaW5zIiwgImludGVybmFsUGx1Z2lucyIsICJQTFVHSU5TIiwgInJlYmluZCIsICJFTkFCTEVfU0hVVERPV05fSE9PS1MiLCAic2V0Q29udGFpbmVyT3B0aW9ucyIsICJvbmx5R2xvYmFsIiwgIkNPTlRBSU5FUl9PUFRJT05TIiwgImJ1aWxkIiwgIkNvbnRhaW5lciIsICJSRUZMRUNUT1JfU0VSVklDRSIsICJSZWZsZWN0b3JTZXJ2aWNlIiwgIk1VTFRJUExBWUVSX1NFUlZJQ0UiLCAiR0xPQkFMX0FQUF9DT05UQUlORVIiLCAiUGlwZWxpbmVIYW5kbGVyIiwgIk1vZHVsZU1ldGFkYXRhUmVhZGVyIiwgIkNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciIsICJDb250cm9sbGVyRmxvd0hhbmRsZXIiLCAiQ29udHJvbGxlckV2ZW50SGFuZGxlciIsICJDb250cm9sbGVyUlBDSGFuZGxlciIsICJNYW5nb1JlcXVlc3RCYXNlIiwgIk1BTkdPX1JFUVVFU1RfRkFDVE9SWSIsICJ0b0ZhY3RvcnkiLCAiY29udGV4dCIsICJyZXF1ZXN0IiwgIiRib2R5IiwgIiRwbGF5ZXIiLCAiTWFuZ29SZXNwb25zZUJhc2UiLCAiTUFOR09fUkVTUE9OU0VfRkFDVE9SWSIsICJFeGVjdXRpb25Db250ZXh0QmFzZSIsICJFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZIiwgInJlc3BvbnNlIiwgImV4ZWN1dGlvbkNvbnRleHQiLCAiJHR5cGUiLCAiJHJlcXVlc3QiLCAiJHJlc3BvbnNlIiwgIiRoYW5kbGVyIiwgIiRjbGFzc1JlZiIsICIkbmFtZSIsICJwbHVnaW5JbnN0YW5jZSIsICJvbkJ1aWxkIiwgImlzQm91bmQiLCAiY3JlYXRlQXBwQnVpbGRlciIsICJhcHBCdWlsZGVySW5oZXJpdCIsICJJTlRFUk5BTF9BUFBfQ09OVEFJTkVSIiwgIkFQUF9FTlZJUk9NRU5UIiwgImNyZWF0ZUV2ZW50RGVjb3JhdG9yIiwgIndlYlZpZXdJZCIsICJpc1N0cmluZyIsICJFdmVudE5hbWVNdXN0QmVTdHJpbmciLCAiQ29udHJvbGxlckV2ZW50cyIsICJzb21lIiwgIkV2ZW50TmFtZU11c3RCZVVuaXF1ZSIsICJPbkludGVybmFsIiwgIk9uV2ViVmlldyIsICJPbiIsICJPbmNlSW50ZXJuYWwiLCAiT25jZSIsICJPbmNlV2ViVmlldyIsICJCb2R5IiwgInBhcmFtcyIsICJDb250cm9sbGVyUGFyYW1zIiwgInBhcmFtIiwgIk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCIsICJwYXJhbVR5cGVzIiwgIm1ldGF0eXBlIiwgIk1ldGhvZFBhcmFtVHlwZSIsICJkYXRhIiwgIkluZGV4IiwgImlzTnVtYmVyIiwgIkluZGV4S2V5TXVzdEJlTnVtYmVyIiwgIlJlcXVlc3QiLCAiUmVxIiwgIlBhcmFtIiwgIlBhcmFtS2V5TXVzdEJlU3RyaW5nIiwgIlJlc3BvbnNlIiwgIlJlcyIsICJVc2VHdWFyZHMiLCAiQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQiLCAibWV0aG9kR3VhcmRzIiwgIkd1YXJkcyIsICJjbGFzc0d1YXJkcyIsICJVc2VJbnRlcmNlcHRvcnMiLCAiQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQiLCAibWV0aG9kSW50ZXJjZXB0b3JzIiwgIkludGVyY2VwdG9ycyIsICJjbGFzc0ludGVyY2VwdG9ycyIsICJVc2VQaXBlcyIsICJBdExlYXN0T25lUGlwZVJlcXVpcmVkIiwgIm1ldGhvZFBpcGVzIiwgIlBpcGVzIiwgImNsYXNzUGlwZXMiLCAiY3JlYXRlUlBDRGVjb3JhdG9yIiwgIldlYlZpZXdJZE11c3RCZVN0cmluZ09yTnVtYmVyIiwgIlJQQ05hbWVNdXN0QmVTdHJpbmciLCAiQ29udHJvbGxlclJQQ3MiLCAiUlBDTmFtZU11c3RCZVVuaXF1ZSIsICJPblJlcXVlc3QiLCAicnBjTmFtZSIsICJPbldlYlZpZXdSZXF1ZXN0IiwgImNyZWF0ZVRpbWVyRGVjb3JhdG9yIiwgIlRpbWVyTmFtZU11c3RCZVN0cmluZyIsICJDcm9uIiwgInBhdHRlcm4iLCAiRXZlcnlUaWNrIiwgIkludGVydmFsIiwgIm5hbWVPclRpbWVvdXQiLCAiaW50ZXJ2YWxUaW1lb3V0IiwgIlRpbWVvdXQiLCAiYXBwbHlEZWNvcmF0b3JzIiwgImRlY29yYXRvcnMiLCAiZGVjb3JhdG9yIiwgIkZ1bmN0aW9uIiwgImNyZWF0ZVBhcmFtRGVjb3JhdG9yIiwgImZhY3RvcnkiLCAiQ3VzdG9tIiwgImZvcndhcmRSZWYiLCAiZm4iLCAiTGF6eVNlcnZpY2VJZGVudGlmaWVyIiwgIm1ldGFkYXRhS2V5IiwgImdldEFsbCIsICJ0YXJnZXRzIiwgImdldEFsbEFuZE1lcmdlIiwgIm1ldGFkYXRhQ29sbGVjdGlvbiIsICJpdGVtIiwgImlzRW1wdHkiLCAicmVkdWNlIiwgImIiLCAiY29uY2F0IiwgImdldEFsbEFuZE92ZXJyaWRlIiwgInJlc3VsdCIsICJjcmVhdGVEZWNvcmF0b3IiLCAiZ2VuZXJhdGVSYW5kb21JZCIsICJkZWNvcmF0b3JGbiIsICJtZXRhZGF0YVZhbHVlIiwgInRyYW5zZm9ybSIsICIkZXZlcnl0aWNrcyIsICIkaW50ZXJ2YWxzIiwgIiR0aW1lb3V0cyIsICIkY3JvbnMiLCAiY3Jvbk9wdGlvbnMiLCAiY3JvbkpvYiIsICJldmVyeXRpY2siLCAiZ2V0QnlOYW1lIiwgImdldEJ5SWQiLCAiaW5qZWN0YWJsZSIsICJpbmplY3QiLCAiQmFzZUV2ZW50U2VydmljZSIsICIkbG9jYWxIYW5kbGVycyIsICJTZXQiLCAiJGludGVybmFsSGFuZGxlcnMiLCAiJHJlbW90ZUhhbmRsZXJzIiwgIiRpbnRlcm5hbEV2ZW50TmFtZXMiLCAiJGV2ZW50RW1taXRlciIsICJvbiIsICJldmVudE5hbWUiLCAiY2FsbGJhY2siLCAid3JhcHBlciIsICJfX25hbWUiLCAiYXJncyIsICJldmVudEhhbmRsZXIiLCAiYWRkIiwgIm9uY2UiLCAiZW1pdCIsICJib2R5IiwgIiRvbkludGVybmFsIiwgImhhbmRsZXIiLCAiaGFzIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUiLCAiJG9uY2VJbnRlcm5hbCIsICJCYXNlUlBDU2VydmljZSIsICIkbG9nZ2VyU2VydmljZSIsICIkVElNRU9VVCIsICJNYXAiLCAiY2FsbCIsICJycGNOYW1lIiwgIm9wdGlvbnMiLCAidGltZW91dCIsICJQcm9taXNlIiwgInJlc29sdmUiLCAiZ2V0IiwgIlJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQiLCAidGltZW91dElkIiwgInNldFRpbWVvdXQiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgInJlc3VsdCIsICJjbGVhclRpbWVvdXQiLCAic3VjY2VzcyIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlN1Y2Nlc3MiLCAiZXJyb3IiLCAiTWFuZ29FcnJvciIsICJtZXNzYWdlIiwgImRldGFpbHMiLCAiUlBDX1JFU1VMVF9VTktOT1dOIiwgIm9uUmVxdWVzdCIsICJSUENIYW5kbGVyQWxyZWFkeUV4aXN0cyIsICJycGNIYW5kbGVyIiwgImRlc3Ryb3kiLCAidmFsaWQiLCAiZGVsZXRlIiwgInNldCIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiRGVmYXVsdFZhbHVlUGlwZSIsICJkZWZhdWx0VmFsdWUiLCAidHJhbnNmb3JtIiwgInZhbHVlIiwgImlzTmlsIiwgImlzTnVtYmVyIiwgImlzTmFOIiwgIlBsYXllclByb3RvdHlwZVBsdWdpbiIsICJnbG9iYWxBcHBDb250YWluZXIiLCAibG9nZ2VyU2VydmljZSIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiYmVmb3JlTG9hZCIsICJ0aW1lIiwgIkRhdGUiLCAibm93IiwgIlBsYXllciIsICJnZXRQbGF5ZXIiLCAicHJvdG90eXBlIiwgImVtaXRXZWJWaWV3IiwgImlkIiwgImV2ZW50TmFtZSIsICJib2R5IiwgImVtaXRSYXciLCAicGF5bG9hZCIsICJycGNTZXJ2aWNlIiwgImdldCIsICJSUENfU0VSVklDRSIsICJjYWxsIiwgInJwY05hbWUiLCAib3B0aW9ucyIsICJjYWxsUGxheWVyIiwgImNhbGxXZWJWaWV3IiwgImxvZyIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJSUENQbHVnaW4iLCAiZXZlbnRTZXJ2aWNlIiwgInJwY1NlcnZpY2UiLCAibG9nZ2VyU2VydmljZSIsICJiZWZvcmVMb2FkIiwgInRpbWUiLCAiRGF0ZSIsICJub3ciLCAib25QbGF5ZXIiLCAicGxheWVyIiwgImJvZHkiLCAidmFsaWQiLCAicnBjSGFuZGxlciIsICJzb3VyY2UiLCAiRXZlbnREZXN0aW5hdGlvbiIsICJDbGllbnQiLCAiJGNsaWVudEhhbmRsZXJzIiwgImdldCIsICJycGNOYW1lIiwgIldlYlZpZXciLCAiJHdlYlZpZXdIYW5kbGVycyIsICJ3ZWJWaWV3SWQiLCAidW5kZWZpbmVkIiwgImVtaXRXZWJWaWV3IiwgImlkIiwgIlJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQiLCAiZW1pdFJhdyIsICJoYW5kbGVyUmVzdWx0IiwgImhhbmRsZXIiLCAicnBjUmVzdWx0IiwgInN1Y2Nlc3MiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJTdWNjZXNzIiwgImVycm9yIiwgIk1hbmdvRXJyb3IiLCAibWVzc2FnZSIsICJkZXRhaWxzIiwgIlJQQ19SRVNVTFRfVU5LTk9XTiIsICJsb2ciLCAiQ29udGFpbmVyIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIklOVEVSTkFMX0VWRU5UUyIsICJTQ1JJUFRfUlBDIiwgIlNDUklQVF9SUENfQU5TV0VSIiwgIlNFUlZFUl9TVEFSVEVEIiwgIkNPTk5FQ1RJT05fUVVFVUVfQUREIiwgIkNPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFIiwgIlBMQVlFUl9DT05ORUNUIiwgIlBMQVlFUl9DT05ORUNUX0RFTklFRCIsICJQTEFZRVJfRElTQ09OTkVDVCIsICJQTEFZRVJfREFNQUdFIiwgIlBMQVlFUl9ERUFUSCIsICJQTEFZRVJfSEVBTCIsICJQTEFZRVJfQ09OVFJPTF9SRVFVRVNUIiwgIlBMQVlFUl9JTlRFUklPUl9DSEFOR0UiLCAiUExBWUVSX0RJTUVOU0lPTl9DSEFOR0UiLCAiUExBWUVSX1dFQVBPTl9DSEFOR0UiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUIiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9TVE9QIiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFIiwgIlBMQVlFUl9TUEFXTiIsICJQTEFZRVJfQU5JTUFUSU9OX0NIQU5HRSIsICJQTEFZRVJfVkVISUNMRV9FTlRFUkVEIiwgIlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSIiwgIlBMQVlFUl9WRUhJQ0xFX0xFRlQiLCAiUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UiLCAiUEVEX0hFQUwiLCAiUEVEX0RFQVRIIiwgIlBFRF9EQU1BR0UiLCAiVkVISUNMRV9ERVNUUk9ZIiwgIlZFSElDTEVfQVRUQUNIIiwgIlZFSElDTEVfREVUQUNIIiwgIlZFSElDTEVfREFNQUdFIiwgIlZFSElDTEVfU0lSRU5fU1RBVEVfQ0hBTkdFIiwgIlZFSElDTEVfSE9STl9TVEFURV9DSEFOR0UiLCAiVk9JQ0VfQ09OTkVDVElPTiIsICJDTElFTlRfT0JKRUNUX0RFTEVURSIsICJDTElFTlRfT0JKRUNUX1JFUVVFU1QiLCAiQkFTRV9PQkpFQ1RfQ1JFQVRFIiwgIkJBU0VfT0JKRUNUX1JFTU9WRSIsICJORVRfT1dORVJfQ0hBTkdFIiwgIldFQVBPTl9EQU1BR0UiLCAiTUVUQV9DSEFOR0UiLCAiTE9DQUxfTUVUQV9DSEFOR0UiLCAiU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJHTE9CQUxfTUVUQV9DSEFOR0UiLCAiR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJDT05TT0xFX0NPTU1BTkQiLCAiRVJST1IiLCAiQ09MX1NIQVBFX0VWRU5UIiwgIkVYUExPU0lPTiIsICJGSVJFX1NUQVJUIiwgIlBST0pFQ1RJTEVfU1RBUlQiLCAiRU5USVRZX0NPTF9TSEFQRV9FTlRFUiIsICJFTlRJVFlfQ09MX1NIQVBFX0xFQVZFIiwgIkVOVElUWV9DSEVDS1BPSU5UX0VOVEVSIiwgIkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFIiwgIkdJVkVfUEVEX1NDUklQVEVEX1RBU0siLCAiTE9DQUxfU0NSSVBUX0VWRU5UIiwgIlJFTU9URV9TQ1JJUFRfRVZFTlQiLCAiQU5ZX1JFU09VUkNFX1NUQVJUIiwgIkFOWV9SRVNPVVJDRV9TVE9QIiwgIlJFU09VUkNFX1NUQVJUIiwgIlJFU09VUkNFX1NUT1AiLCAiUkVTT1VSQ0VfRVJST1IiLCAiRVZFTlQiLCAiU2VydmVyRXZlbnRTZXJ2aWNlIiwgIkJhc2VFdmVudFNlcnZpY2UiLCAiJHJhZ2VFdmVudHMiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIkV2ZW50cyIsICIkaW50ZXJuYWxFdmVudE5hbWVzIiwgIlNldCIsICJPYmplY3QiLCAidmFsdWVzIiwgIklOVEVSTkFMX0VWRU5UUyIsICJvblBsYXllciIsICJldmVudE5hbWUiLCAiY2FsbGJhY2siLCAid3JhcHBlciIsICJwbGF5ZXIiLCAiYXJncyIsICJldmVudEhhbmRsZXIiLCAiJHJlbW90ZUhhbmRsZXJzIiwgImFkZCIsICJvbmNlUGxheWVyIiwgIm9uUmVtb3RlIiwgIm9uY2VSZW1vdGUiLCAiZW1pdFBsYXllcnMiLCAicGxheWVycyIsICJib2R5IiwgImNhbGwiLCAiZW1pdFBsYXllcnNVbnJlbGlhYmxlIiwgImNhbGxVbnJlbGlhYmxlIiwgImVtaXRBbGxQbGF5ZXJzIiwgIm1wIiwgImVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZSIsICJvbldlYlZpZXciLCAiaWQiLCAib25jZVdlYlZpZXciLCAiZW1pdFdlYlZpZXdzIiwgInBheWxvYWQiLCAiZW1pdEFsbFdlYlZpZXdzIiwgImVtaXRBbGxXZWJWaWV3c1VucmVsaWFibGUiLCAib25QbGF5ZXJKb2luIiwgIm9uIiwgIm9uUGxheWVyUXVpdCIsICJvblBsYXllclJlYWR5IiwgIm9uUGxheWVyRGVhdGgiLCAib25QbGF5ZXJTcGF3biIsICJvblBsYXllckNoYXQiLCAib25QbGF5ZXJDb21tYW5kIiwgIm9uUGxheWVyRW50ZXJWZWhpY2xlIiwgIm9uUGxheWVyRXhpdFZlaGljbGUiLCAib25QbGF5ZXJTdGFydEVudGVyVmVoaWNsZSIsICJvblBsYXllclN0YXJ0RXhpdFZlaGljbGUiLCAib25QbGF5ZXJXZWFwb25DaGFuZ2UiLCAib25QbGF5ZXJEYW1hZ2UiLCAib25WZWhpY2xlRGVhdGgiLCAib25WZWhpY2xlRGFtYWdlIiwgIm9uUGxheWVyRW50ZXJDb2xzaGFwZSIsICJvblBsYXllckV4aXRDb2xzaGFwZSIsICJvblBsYXllckVudGVyQ2hlY2twb2ludCIsICJvblBsYXllckV4aXRDaGVja3BvaW50IiwgIm9uUGxheWVyQ29ubmVjdCIsICJvblBsYXllckRpc2Nvbm5lY3QiLCAiZXhpdFR5cGUiLCAicmVhc29uIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlNlcnZlckxvZ2dlclNlcnZpY2UiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgImxvZyIsICJhcmdzIiwgIk1BTkdPX0xPR19QUkVGSVgiLCAid2FybiIsICJsb2dXYXJuaW5nIiwgImVycm9yIiwgImxvZ0Vycm9yIiwgImRlYnVnIiwgImxvZ0RlYnVnIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlNlcnZlclJQQ1NlcnZpY2UiLCAiQmFzZVJQQ1NlcnZpY2UiLCAiJGV2ZW50U2VydmljZSIsICIkY2xpZW50SGFuZGxlcnMiLCAiTWFwIiwgIiR3ZWJWaWV3SGFuZGxlcnMiLCAiY2FsbFBsYXllciIsICJwbGF5ZXIiLCAicnBjTmFtZSIsICJib2R5IiwgIm9wdGlvbnMiLCAidGltZW91dCIsICIkVElNRU9VVCIsICIkaGFuZGxlQ2FsbCIsICJFdmVudERlc3RpbmF0aW9uIiwgIkNsaWVudCIsICJvblBsYXllclJlcXVlc3QiLCAiaGFuZGxlciIsICJoYXMiLCAiJGxvZ2dlclNlcnZpY2UiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzIiwgInJwY0hhbmRsZXIiLCAiZGVzdHJveSIsICJ2YWxpZCIsICJkZWxldGUiLCAic2V0IiwgImNhbGxXZWJWaWV3IiwgImlkIiwgIldlYlZpZXciLCAib25XZWJWaWV3UmVxdWVzdCIsICJrZXkiLCAiZGVzdGluYXRpb24iLCAid2ViVmlld0lkIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQiLCAiY2FsbElkIiwgImdlbmVyYXRlUmFuZG9tSWQiLCAidGltZW91dElkIiwgImRpc2Nvbm5lY3RIYW5kbGVyIiwgIm9uUGxheWVyRGlzY29ubmVjdCIsICJjb250ZXh0IiwgImNsZWFyVGltZW91dCIsICJSUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQiLCAib25jZUhhbmRsZSIsICJfcGxheWVyIiwgImV2ZW50SGFuZGxlciIsICJvbmNlV2ViVmlldyIsICJvbmNlUGxheWVyIiwgInBheWxvYWQiLCAic291cmNlIiwgIlNlcnZlciIsICJlbWl0V2ViVmlldyIsICJlbWl0IiwgInNldFRpbWVvdXQiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgIlNlcnZpY2VCaW5kZXJQbHVnaW4iLCAiaW50ZXJuYWxBcHBDb250YWluZXIiLCAiZ2xvYmFsQXBwQ29udGFpbmVyIiwgIm9uQnVpbGQiLCAidGltZSIsICJEYXRlIiwgIm5vdyIsICJiaW5kIiwgIkxPR0dFUl9TRVJWSUNFIiwgInRvIiwgIlNlcnZlckxvZ2dlclNlcnZpY2UiLCAiaW5TaW5nbGV0b25TY29wZSIsICJFVkVOVF9TRVJWSUNFIiwgIlNlcnZlckV2ZW50U2VydmljZSIsICJSUENfU0VSVklDRSIsICJTZXJ2ZXJSUENTZXJ2aWNlIiwgInRvQ29uc3RhbnRWYWx1ZSIsICJnZXQiLCAibG9nZ2VyU2VydmljZSIsICJsb2ciLCAiUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQiLCAiZXZlbnROYW1lIiwgImxpc3RlbmVyIiwgImRlc3Ryb3kiLCAibXAiLCAiZXZlbnRzIiwgInJlbW92ZSIsICJOQVRJVkVfU0VSVkVSX0VWRU5UUyIsICJTZXQiLCAiU2VydmVyUmFnZU1QRXZlbnRFbW1pdGVyIiwgImVtaXQiLCAiZXZlbnROYW1lIiwgImFyZ3MiLCAibXAiLCAiZXZlbnRzIiwgImNhbGwiLCAib24iLCAibGlzdGVuZXIiLCAiYWRkIiwgIlJhZ2VNUFNlcnZlclNjcmlwdEV2ZW50IiwgIm9uY2UiLCAib25jZVdyYXBwZXIiLCAicmVtb3ZlIiwgIm9mZiIsICJlbWl0UGxheWVyIiwgInBsYXllciIsICJlbWl0QWxsUGxheWVyc1JhdyIsICJwbGF5ZXJzIiwgImVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZVJhdyIsICJjYWxsVW5yZWxpYWJsZSIsICJlbWl0VW5yZWxpYWJsZVJhdyIsICJvblBsYXllciIsICJoYXMiLCAib25jZVBsYXllciIsICJvZmZQbGF5ZXIiLCAiU2VydmVyUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIlJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJFdmVudHMiLCAiU2VydmVyUmFnZU1QRXZlbnRFbW1pdGVyIiwgImdldFBsYXllciIsICJtcCIsICJQbGF5ZXIiLCAic2V0QmxpcEZhY3RvcnkiLCAiZmFjdG9yeSIsICJCbGlwIiwgIk9iamVjdCIsICJhc3NpZ24iLCAicHJvdG90eXBlIiwgInNldE1hcmtlckZhY3RvcnkiLCAiTWFya2VyIiwgInNldENvbFNoYXBlRmFjdG9yeSIsICJDb2xzaGFwZSIsICJzZXRDaGVja3BvaW50RmFjdG9yeSIsICJDaGVja3BvaW50IiwgInNldE9iamVjdEZhY3RvcnkiLCAic2V0UGVkRmFjdG9yeSIsICJQZWQiLCAic2V0UGxheWVyRmFjdG9yeSIsICJzZXRWZWhpY2xlRmFjdG9yeSIsICJWZWhpY2xlIiwgInNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkiLCAiX2ZhY3RvcnkiLCAic2V0VmlydHVhbEVudGl0eUZhY3RvcnkiLCAic2V0Vm9pY2VDaGFubmVsRmFjdG9yeSIsICJsb2ciLCAiYXJnIiwgImFyZ3MiLCAibWVzc2FnZSIsICJtYXAiLCAiYSIsICJKU09OIiwgInN0cmluZ2lmeSIsICJTdHJpbmciLCAiam9pbiIsICJjb25zb2xlIiwgImxvZ0Vycm9yIiwgImVycm9yIiwgImxvZ1dhcm5pbmciLCAid2FybiIsICJsb2dEZWJ1ZyIsICJVc2VGaWx0ZXJzIiwgImZpbHRlcnMiLCAiJFVzZUZpbHRlcnMiLCAiT25TY3JpcHRSUEMiLCAiT25JbnRlcm5hbCIsICJJTlRFUk5BTF9FVkVOVFMiLCAiU0NSSVBUX1JQQyIsICJPbmNlU2NyaXB0UlBDIiwgIk9uY2VJbnRlcm5hbCIsICJPblNjcmlwdFJQQ0Fuc3dlciIsICJTQ1JJUFRfUlBDX0FOU1dFUiIsICJPbmNlU2NyaXB0UlBDQW5zd2VyIiwgIk9uU2VydmVyU3RhcnRlZCIsICJTRVJWRVJfU1RBUlRFRCIsICJPbmNlU2VydmVyU3RhcnRlZCIsICJPbkNvbm5lY3Rpb25RdWV1ZUFkZCIsICJDT05ORUNUSU9OX1FVRVVFX0FERCIsICJPbmNlQ29ubmVjdGlvblF1ZXVlQWRkIiwgIk9uQ29ubmVjdGlvblF1ZXVlUmVtb3ZlIiwgIkNPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFIiwgIk9uY2VDb25uZWN0aW9uUXVldWVSZW1vdmUiLCAiT25QbGF5ZXJDb25uZWN0IiwgIlBMQVlFUl9DT05ORUNUIiwgIk9uY2VQbGF5ZXJDb25uZWN0IiwgIk9uUGxheWVyQ29ubmVjdERlbmllZCIsICJQTEFZRVJfQ09OTkVDVF9ERU5JRUQiLCAiT25jZVBsYXllckNvbm5lY3REZW5pZWQiLCAiT25QbGF5ZXJEaXNjb25uZWN0IiwgIlBMQVlFUl9ESVNDT05ORUNUIiwgIk9uY2VQbGF5ZXJEaXNjb25uZWN0IiwgIk9uUGxheWVyRGFtYWdlIiwgIlBMQVlFUl9EQU1BR0UiLCAiT25jZVBsYXllckRhbWFnZSIsICJPblBsYXllckRlYXRoIiwgIlBMQVlFUl9ERUFUSCIsICJPbmNlUGxheWVyRGVhdGgiLCAiT25QbGF5ZXJIZWFsIiwgIlBMQVlFUl9IRUFMIiwgIk9uY2VQbGF5ZXJIZWFsIiwgIk9uUGxheWVyQ29udHJvbFJlcXVlc3QiLCAiUExBWUVSX0NPTlRST0xfUkVRVUVTVCIsICJPbmNlUGxheWVyQ29udHJvbFJlcXVlc3QiLCAiT25QbGF5ZXJJbnRlcmlvckNoYW5nZSIsICJQTEFZRVJfSU5URVJJT1JfQ0hBTkdFIiwgIk9uY2VQbGF5ZXJJbnRlcmlvckNoYW5nZSIsICJPblBsYXllckRpbWVuc2lvbkNoYW5nZSIsICJQTEFZRVJfRElNRU5TSU9OX0NIQU5HRSIsICJPbmNlUGxheWVyRGltZW5zaW9uQ2hhbmdlIiwgIk9uUGxheWVyV2VhcG9uQ2hhbmdlIiwgIlBMQVlFUl9XRUFQT05fQ0hBTkdFIiwgIk9uY2VQbGF5ZXJXZWFwb25DaGFuZ2UiLCAiT25QbGF5ZXJTeW5jZWRTY2VuZVJlcXVlc3QiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUIiwgIk9uY2VQbGF5ZXJTeW5jZWRTY2VuZVJlcXVlc3QiLCAiT25QbGF5ZXJTeW5jZWRTY2VuZVN0YXJ0IiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQiLCAiT25jZVBsYXllclN5bmNlZFNjZW5lU3RhcnQiLCAiT25QbGF5ZXJTeW5jZWRTY2VuZVN0b3AiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9TVE9QIiwgIk9uY2VQbGF5ZXJTeW5jZWRTY2VuZVN0b3AiLCAiT25QbGF5ZXJTeW5jZWRTY2VuZVVwZGF0ZSIsICJQTEFZRVJfU1lOQ0VEX1NDRU5FX1VQREFURSIsICJPbmNlUGxheWVyU3luY2VkU2NlbmVVcGRhdGUiLCAiT25QbGF5ZXJTcGF3biIsICJQTEFZRVJfU1BBV04iLCAiT25jZVBsYXllclNwYXduIiwgIk9uUGxheWVyQW5pbWF0aW9uQ2hhbmdlIiwgIlBMQVlFUl9BTklNQVRJT05fQ0hBTkdFIiwgIk9uY2VQbGF5ZXJBbmltYXRpb25DaGFuZ2UiLCAiT25QbGF5ZXJWZWhpY2xlRW50ZXJlZCIsICJQTEFZRVJfVkVISUNMRV9FTlRFUkVEIiwgIk9uY2VQbGF5ZXJWZWhpY2xlRW50ZXJlZCIsICJPblBsYXllclN0YXJ0VmVoaWNsZUVudGVyIiwgIlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSIiwgIk9uY2VQbGF5ZXJTdGFydFZlaGljbGVFbnRlciIsICJPblBsYXllclZlaGljbGVMZWZ0IiwgIlBMQVlFUl9WRUhJQ0xFX0xFRlQiLCAiT25jZVBsYXllclZlaGljbGVMZWZ0IiwgIk9uUGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UiLCAiUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UiLCAiT25jZVBsYXllclZlaGljbGVTZWF0Q2hhbmdlIiwgIk9uUGVkSGVhbCIsICJQRURfSEVBTCIsICJPbmNlUGVkSGVhbCIsICJPblBlZERlYXRoIiwgIlBFRF9ERUFUSCIsICJPbmNlUGVkRGVhdGgiLCAiT25QZWREYW1hZ2UiLCAiUEVEX0RBTUFHRSIsICJPbmNlUGVkRGFtYWdlIiwgIk9uVmVoaWNsZURlc3Ryb3kiLCAiVkVISUNMRV9ERVNUUk9ZIiwgIk9uY2VWZWhpY2xlRGVzdHJveSIsICJPblZlaGljbGVBdHRhY2giLCAiVkVISUNMRV9BVFRBQ0giLCAiT25jZVZlaGljbGVBdHRhY2giLCAiT25WZWhpY2xlRGV0YWNoIiwgIlZFSElDTEVfREVUQUNIIiwgIk9uY2VWZWhpY2xlRGV0YWNoIiwgIk9uVmVoaWNsZURhbWFnZSIsICJWRUhJQ0xFX0RBTUFHRSIsICJPbmNlVmVoaWNsZURhbWFnZSIsICJPblZlaGljbGVTaXJlblN0YXRlQ2hhbmdlIiwgIlZFSElDTEVfU0lSRU5fU1RBVEVfQ0hBTkdFIiwgIk9uY2VWZWhpY2xlU2lyZW5TdGF0ZUNoYW5nZSIsICJPblZlaGljbGVIb3JuU3RhdGVDaGFuZ2UiLCAiVkVISUNMRV9IT1JOX1NUQVRFX0NIQU5HRSIsICJPbmNlVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSIsICJPblZvaWNlQ29ubmVjdGlvbiIsICJWT0lDRV9DT05ORUNUSU9OIiwgIk9uY2VWb2ljZUNvbm5lY3Rpb24iLCAiT25DbGllbnRPYmplY3REZWxldGUiLCAiQ0xJRU5UX09CSkVDVF9ERUxFVEUiLCAiT25jZUNsaWVudE9iamVjdERlbGV0ZSIsICJPbkNsaWVudE9iamVjdFJlcXVlc3QiLCAiQ0xJRU5UX09CSkVDVF9SRVFVRVNUIiwgIk9uY2VDbGllbnRPYmplY3RSZXF1ZXN0IiwgIk9uQmFzZU9iamVjdENyZWF0ZSIsICJCQVNFX09CSkVDVF9DUkVBVEUiLCAiT25jZUJhc2VPYmplY3RDcmVhdGUiLCAiT25CYXNlT2JqZWN0UmVtb3ZlIiwgIkJBU0VfT0JKRUNUX1JFTU9WRSIsICJPbmNlQmFzZU9iamVjdFJlbW92ZSIsICJPbk5ldE93bmVyQ2hhbmdlIiwgIk5FVF9PV05FUl9DSEFOR0UiLCAiT25jZU5ldE93bmVyQ2hhbmdlIiwgIk9uV2VhcG9uRGFtYWdlIiwgIldFQVBPTl9EQU1BR0UiLCAiT25jZVdlYXBvbkRhbWFnZSIsICJPbk1ldGFDaGFuZ2UiLCAiTUVUQV9DSEFOR0UiLCAiT25jZU1ldGFDaGFuZ2UiLCAiT25Mb2NhbE1ldGFDaGFuZ2UiLCAiTE9DQUxfTUVUQV9DSEFOR0UiLCAiT25jZUxvY2FsTWV0YUNoYW5nZSIsICJPblN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UiLCAiU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJPbmNlU3RyZWFtU3luY2VkTWV0YUNoYW5nZSIsICJPbkdsb2JhbE1ldGFDaGFuZ2UiLCAiR0xPQkFMX01FVEFfQ0hBTkdFIiwgIk9uY2VHbG9iYWxNZXRhQ2hhbmdlIiwgIk9uR2xvYmFsU3luY2VkTWV0YUNoYW5nZSIsICJHTE9CQUxfU1lOQ0VEX01FVEFfQ0hBTkdFIiwgIk9uY2VHbG9iYWxTeW5jZWRNZXRhQ2hhbmdlIiwgIk9uQ29uc29sZUNvbW1hbmQiLCAiQ09OU09MRV9DT01NQU5EIiwgIk9uY2VDb25zb2xlQ29tbWFuZCIsICJPbkVycm9yIiwgIkVSUk9SIiwgIk9uY2VFcnJvciIsICJPbkNvbFNoYXBlRXZlbnQiLCAiQ09MX1NIQVBFX0VWRU5UIiwgIk9uY2VDb2xTaGFwZUV2ZW50IiwgIk9uRXhwbG9zaW9uIiwgIkVYUExPU0lPTiIsICJPbmNlRXhwbG9zaW9uIiwgIk9uRmlyZVN0YXJ0IiwgIkZJUkVfU1RBUlQiLCAiT25jZUZpcmVTdGFydCIsICJPblByb2plY3RpbGVTdGFydCIsICJQUk9KRUNUSUxFX1NUQVJUIiwgIk9uY2VQcm9qZWN0aWxlU3RhcnQiLCAiT25FbnRpdHlDb2xTaGFwZUVudGVyIiwgIkVOVElUWV9DT0xfU0hBUEVfRU5URVIiLCAiT25jZUVudGl0eUNvbFNoYXBlRW50ZXIiLCAiT25FbnRpdHlDb2xTaGFwZUxlYXZlIiwgIkVOVElUWV9DT0xfU0hBUEVfTEVBVkUiLCAiT25jZUVudGl0eUNvbFNoYXBlTGVhdmUiLCAiT25FbnRpdHlDaGVja3BvaW50RW50ZXIiLCAiRU5USVRZX0NIRUNLUE9JTlRfRU5URVIiLCAiT25jZUVudGl0eUNoZWNrcG9pbnRFbnRlciIsICJPbkVudGl0eUNoZWNrcG9pbnRMZWF2ZSIsICJFTlRJVFlfQ0hFQ0tQT0lOVF9MRUFWRSIsICJPbmNlRW50aXR5Q2hlY2twb2ludExlYXZlIiwgIk9uR2l2ZVBlZFNjcmlwdGVkVGFzayIsICJHSVZFX1BFRF9TQ1JJUFRFRF9UQVNLIiwgIk9uY2VHaXZlUGVkU2NyaXB0ZWRUYXNrIiwgIk9uTG9jYWxTY3JpcHRFdmVudCIsICJMT0NBTF9TQ1JJUFRfRVZFTlQiLCAiT25jZUxvY2FsU2NyaXB0RXZlbnQiLCAiT25SZW1vdGVTY3JpcHRFdmVudCIsICJSRU1PVEVfU0NSSVBUX0VWRU5UIiwgIk9uY2VSZW1vdGVTY3JpcHRFdmVudCIsICJPbkFueVJlc291cmNlU3RhcnQiLCAiQU5ZX1JFU09VUkNFX1NUQVJUIiwgIk9uY2VBbnlSZXNvdXJjZVN0YXJ0IiwgIk9uQW55UmVzb3VyY2VTdG9wIiwgIkFOWV9SRVNPVVJDRV9TVE9QIiwgIk9uY2VBbnlSZXNvdXJjZVN0b3AiLCAiT25SZXNvdXJjZVN0YXJ0IiwgIlJFU09VUkNFX1NUQVJUIiwgIk9uY2VSZXNvdXJjZVN0YXJ0IiwgIk9uUmVzb3VyY2VTdG9wIiwgIlJFU09VUkNFX1NUT1AiLCAiT25jZVJlc291cmNlU3RvcCIsICJPblJlc291cmNlRXJyb3IiLCAiUkVTT1VSQ0VfRVJST1IiLCAiT25jZVJlc291cmNlRXJyb3IiLCAiT25FdmVudCIsICJFVkVOVCIsICJPbmNlRXZlbnQiLCAiT25QbGF5ZXIiLCAiZXZlbnROYW1lIiwgImNyZWF0ZUV2ZW50RGVjb3JhdG9yIiwgIk9uV2ViVmlldyIsICJpZCIsICJldmVudE5hbWUiLCAiJE9uV2ViVmlldyIsICJPbiIsICJldmVudE5hbWUiLCAiJE9uIiwgIk9uY2VQbGF5ZXIiLCAiZXZlbnROYW1lIiwgImNyZWF0ZUV2ZW50RGVjb3JhdG9yIiwgIk9uY2VXZWJWaWV3IiwgImlkIiwgImV2ZW50TmFtZSIsICIkT25jZVdlYlZpZXciLCAiT25jZSIsICJldmVudE5hbWUiLCAiJE9uY2UiLCAiUGxheWVyIiwgImtleSIsICJwaXBlcyIsICJ0YXJnZXQiLCAibWV0aG9kIiwgImluZGV4IiwgInBhcmFtcyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDb250cm9sbGVyUGFyYW1zIiwgInNvbWUiLCAicGFyYW0iLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCIsICJwYXJhbVR5cGVzIiwgIm1ldGF0eXBlIiwgIkFycmF5IiwgImlzQXJyYXkiLCAidW5kZWZpbmVkIiwgImRlZmluZU1ldGFkYXRhIiwgInR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgImRhdGEiLCAiVXNlR3VhcmRzIiwgImd1YXJkcyIsICIkVXNlR3VhcmRzIiwgIlVzZUludGVyY2VwdG9ycyIsICJpbnRlcmNlcHRvcnMiLCAiJFVzZUludGVyY2VwdG9ycyIsICJPblBsYXllclJlcXVlc3QiLCAicnBjTmFtZSIsICJjcmVhdGVSUENEZWNvcmF0b3IiLCAiT25SZXF1ZXN0IiwgInJwY05hbWUiLCAiJE9uUmVxdWVzdCIsICJPbldlYlZpZXdSZXF1ZXN0IiwgImlkIiwgInJwY05hbWUiLCAiJE9uV2ViVmlld1JlcXVlc3QiLCAiVEhST1RUTEVSX0xJTUlUIiwgIlRIUk9UVExFUl9UVEwiLCAiVEhST1RUTEVSX09QVElPTlMiLCAiVEhST1RUTEVSX1NLSVAiLCAiVEhST1RUTEVSX1NUT1JBR0UiLCAiU2tpcFRocm90dGxlIiwgInNraXAiLCAiZGVmYXVsdCIsICJ0YXJnZXQiLCAiX3Byb3BlcnR5S2V5IiwgImRlc2NyaXB0b3IiLCAia2V5IiwgIlJlZmxlY3QiLCAiZGVmaW5lTWV0YWRhdGEiLCAiVEhST1RUTEVSX1NLSVAiLCAidmFsdWUiLCAic2V0VGhyb3R0bGVyTWV0YWRhdGEiLCAidGFyZ2V0IiwgIm9wdGlvbnMiLCAibmFtZSIsICJSZWZsZWN0IiwgImRlZmluZU1ldGFkYXRhIiwgIlRIUk9UVExFUl9UVEwiLCAidHRsIiwgIlRIUk9UVExFUl9MSU1JVCIsICJsaW1pdCIsICJUaHJvdHRsZSIsICJfcHJvcGVydHlLZXkiLCAiZGVzY3JpcHRvciIsICJ2YWx1ZSIsICJjcmVhdGVIYXNoIiwgIlRocm90dGxlckd1YXJkIiwgIm9wdGlvbnMiLCAic3RvcmFnZVNlcnZpY2UiLCAicmVmbGVjdG9yIiwgInRocm90dGxlcnMiLCAiY29tbW9uT3B0aW9ucyIsICJvbk1vZHVsZUluaXQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJzb3J0IiwgImZpcnN0IiwgInNlY29uZCIsICJpc0Z1bmN0aW9uIiwgInR0bCIsICJtYXAiLCAib3B0IiwgIm5hbWUiLCAic2tpcElmIiwgImNhbkFjdGl2YXRlIiwgImNvbnRleHQiLCAiY29udGludWVzIiwgIm5hbWVkVGhyb3R0bGVyIiwgInNraXAiLCAiZ2V0QWxsQW5kT3ZlcnJpZGUiLCAiVEhST1RUTEVSX1NLSVAiLCAiaGFuZGxlciIsICJjbGFzc1JlZiIsICJwdXNoIiwgInJvdXRlT3JDbGFzc0xpbWl0IiwgIlRIUk9UVExFUl9MSU1JVCIsICJyb3V0ZU9yQ2xhc3NUdGwiLCAiVEhST1RUTEVSX1RUTCIsICJsaW1pdCIsICJyZXNvbHZlVmFsdWUiLCAiaGFuZGxlUmVxdWVzdCIsICJldmVyeSIsICJjb250IiwgInRocm90dGxlciIsICJwbGF5ZXIiLCAicmVxdWVzdCIsICJFcnJvciIsICJrZXkiLCAiZ2VuZXJhdGVLZXkiLCAidG90YWxIaXRzIiwgInRpbWVUb0V4cGlyZSIsICJpbmNyZW1lbnQiLCAidGhyb3dUaHJvdHRsaW5nRXhjZXB0aW9uIiwgInByZWZpeCIsICJjcmVhdGVIYXNoIiwgInVwZGF0ZSIsICJkaWdlc3QiLCAidG9TdHJpbmciLCAiX3Rocm90dGxlckxpbWl0RGV0YWlsIiwgIlRvb01hbnlSZXF1ZXN0cyIsICJnZXRFcnJvck1lc3NhZ2UiLCAiX2NvbnRleHQiLCAiZXJyb3JNZXNzYWdlIiwgIkVycm9yTWVzc2FnZSIsICJyZXNvbHZhYmxlVmFsdWUiLCAiVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UiLCAic3RvcmFnZSIsICJXZWFrTWFwIiwgInRpbWVvdXRJZHMiLCAiZ2V0RXhwaXJhdGlvblRpbWUiLCAicGxheWVyIiwgImtleSIsICJNYXRoIiwgImZsb29yIiwgImdldCIsICJleHBpcmVzQXQiLCAiRGF0ZSIsICJub3ciLCAic2V0RXhwaXJhdGlvblRpbWUiLCAidHRsTWlsbGlzZWNvbmRzIiwgInRpbWVvdXRJZCIsICJzZXRUaW1lb3V0IiwgInRvdGFsSGl0cyIsICJjbGVhclRpbWVvdXQiLCAiZmlsdGVyIiwgImlkIiwgInB1c2giLCAiaW5jcmVtZW50IiwgInR0bCIsICJzZXQiLCAiTWFwIiwgInRpbWVUb0V4cGlyZSIsICJvbkFwcFNodXRkb3duIiwgImZvckVhY2giLCAiVGhyb3R0bGVyTW9kdWxlIiwgImZvclJvb3QiLCAib3B0aW9ucyIsICJtb2R1bGUiLCAicHJvdmlkZXJzIiwgInByb3ZpZGUiLCAiVEhST1RUTEVSX09QVElPTlMiLCAidXNlVmFsdWUiLCAiVEhST1RUTEVSX1NUT1JBR0UiLCAidXNlQ2xhc3MiLCAiVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UiLCAiZXhwb3J0cyIsICJmb3JSb290QXN5bmMiLCAiY3JlYXRlQXN5bmNQcm92aWRlcnMiLCAiaW1wb3J0cyIsICJ1c2VFeGlzdGluZyIsICJ1c2VGYWN0b3J5IiwgImNyZWF0ZUFzeW5jT3B0aW9uc1Byb3ZpZGVyIiwgImluamVjdCIsICJvcHRpb25zRmFjdG9yeSIsICJjcmVhdGVUaHJvdHRsZXJPcHRpb25zIiwgIm11bHRpcGxheWVyU2VydmljZSIsICJTZXJ2ZXJSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UiLCAiU2VydmVyQXBwQnVpbGRlciIsICJBcHBCdWlsZGVyIiwgInNldEJsaXBGYWN0b3J5IiwgImZhY3RvcnkiLCAic2V0TWFya2VyRmFjdG9yeSIsICJzZXRDb2xTaGFwZUZhY3RvcnkiLCAic2V0Q2hlY2twb2ludEZhY3RvcnkiLCAic2V0T2JqZWN0RmFjdG9yeSIsICJzZXRQZWRGYWN0b3J5IiwgInNldFBsYXllckZhY3RvcnkiLCAic2V0VmVoaWNsZUZhY3RvcnkiLCAic2V0VmlydHVhbEVudGl0eUdyb3VwRmFjdG9yeSIsICJzZXRWaXJ0dWFsRW50aXR5RmFjdG9yeSIsICJzZXRWb2ljZUNoYW5uZWxGYWN0b3J5IiwgImNyZWF0ZUFwcEJ1aWxkZXIiLCAiJGNyZWF0ZUFwcEJ1aWxkZXIiLCAiZW52aXJvbWVudCIsICJBcHBFbnZpcm9tZW50IiwgIlNlcnZlciIsICJwbHVnaW5zIiwgIlNlcnZpY2VCaW5kZXJQbHVnaW4iLCAiUGxheWVyUHJvdG90eXBlUGx1Z2luIiwgIlJQQ1BsdWdpbiIsICJhcHBCdWlsZGVySW5oZXJpdCJdCn0K
|
|
6755
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2FwcC1lbnZpcm9tZW50LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2NvcmUtbWV0YWRhdGEta2V5LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V2ZW50LWRlc3RpbmF0aW9uLmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V4ZWN1dGlvbi1jb250ZXh0LXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvZW51bXMvbWV0aG9kLXBhcmFtLXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZW51bXMvZXJyb3ItbWVzc2FnZS5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2VudW1zL2luamVjdGFibGUtc2NvcGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9lbnVtcy9ycGMtcmVzdWx0LXN0YXR1cy5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvZGlzdC9jaHVuay03UVZZVTYzRS5qcyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy9nZW5lcmF0ZS1yYW5kb20taWQudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy90eXBlLWNoZWNrLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS9tb2R1bGUtbWV0YWRhdGEucmVhZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUvbW9kdWxlLWNvbnRhaW5lci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlL21vZHVsZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvZXhlY3V0aW9uLWNvbnRleHQtYmFzZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvbWFuZ28tcmVxdWVzdC1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9waXBlbGluZS9tYW5nby1yZXNwb25zZS1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC91dGlscy90cmVlLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9jb250cm9sbGVyL2NvbnRyb2xsZXItb3B0aW9ucy52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9lcnJvci1maWx0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvcGlwZS52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9ldmVudC1wYXJhbWV0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZXZlbnQtbWV0YWRhdGEudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZ3VhcmQudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvaW50ZXJjZXB0b3IudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3Rpb24tdG9rZW4udmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvcHJvdmlkZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvbW9kdWxlLW9wdGlvbnMudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3RhYmxlLW1ldGFkYXRhLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL21hbmdvLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9ndWFyZC1jYW5jZWwuZXJyb3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL2d1YXJkLWludmFsaWQtcmV0dXJuLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy90b28tbWFueS1yZXF1ZXN0cy5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9lcnJvcnMvdW5rbm93bi5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWV2ZW50LmhhbmRsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvcGlwZWxpbmUuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWZsb3cuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLW1ldGFkYXRhLnJlYWRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLXJwYy5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb250cm9sbGVyL2NvbnRyb2xsZXIudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhYnJhaGFtK3JlZmxlY3Rpb25AMC4xMi4wL25vZGVfbW9kdWxlcy9AYWJyYWhhbS9yZWZsZWN0aW9uL3NyYy9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9yZWZsZWN0b3Iuc2VydmljZS50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2luZGV4LnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9jb250cm9sbGVyLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvZ2xvYmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0YWJsZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL21vZHVsZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL29wdGlvbmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvc2V0LW1ldGFkYXRhLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy9jYXRjaC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9lcnJvcnMvdXNlLWZpbHRlcnMuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlLXRyZWUvYXBwLXJ1bnRpbWUudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL2RlcGVuZGVuY3ktYmluZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUtdHJlZS9tb2R1bGUtdHJlZS1zY2FubmVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLWV2ZW50LWVtbWl0ZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXJzLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLW11bHRpcGxheWVyLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2FwcC1idWlsZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NyZWF0ZS1hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLWludGVybmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS1pbnRlcm5hbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9ib2R5LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9pbmRleC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcmVxdWVzdC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcGFyYW0uZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGFyYW1zL3Jlc3BvbnNlLmRlb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGlwZWxpbmUvdXNlLWd1YXJkcy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtaW50ZXJjZXB0b3JzLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1waXBlcy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtcnBjLWRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi13ZWJ2aWV3LXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY3JlYXRlLXRpbWVyLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9jcm9uLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9ldmVyeS10aWNrLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9pbnRlcnZhbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvdGltZW91dC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9hcHBseS1kZWNvcmF0b3IudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS1wYXJhbS51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZm9yd2FyZC1yZWYudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy90aW1lci5zZXJ2aWNlLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9uZXJAOC4xLjIvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5taW4uanMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3NlcnZpY2VzL2Jhc2UtZXZlbnQuc2VydmljZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvc2VydmljZXMvYmFzZS1ycGMuc2VydmljZS50cyIsICIuLi9zcmMvcGx1Z2lucy9wbGF5ZXItcHJvdG90eXBlLnBsdWdpbi50cyIsICIuLi8uLi9jb3JlL3NyYy9waXBlcy9kZWZhdWx0LXZhbHVlLnBpcGUudHMiLCAiLi4vc3JjL3BsdWdpbnMvcnBjLnBsdWdpbi50cyIsICIuLi9zcmMvcGx1Z2lucy9zZXJ2aWNlLWJpbmRlci5wbHVnaW4udHMiLCAiLi4vc3JjL3NlcnZpY2VzL3NlcnZlci1ldmVudC5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9jb25zdGFudHMvaW50ZXJuYWwtZXZlbnRzLmNvbnN0cy50cyIsICIuLi9zcmMvc2VydmljZXMvc2VydmVyLWxvZ2dlci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9zZXJ2aWNlcy9zZXJ2ZXItcnBjLnNlcnZpY2UudHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtc2NyaXB0LWV2ZW50LWhhbmRsZXIudHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtZXZlbnQtZW1taXRlci50cyIsICIuLi9zcmMvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1tdWx0aXBsYXllci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy91c2UtZmlsdGVycy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL2ludGVybmFsL2luZGV4LnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi1wbGF5ZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24uZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLXBsYXllci5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2Utd2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9wbGF5ZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1ndWFyZHMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1pbnRlcmNlcHRvcnMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1wbGF5ZXItcmVxdWVzdC5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvcnBjL29uLXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi13ZWJ2aWV3LXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci90aHJvdHRsZXIuY29uc3RhbnRzLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci9kZWNvcmF0b3JzL3NraXAtdGhyb3R0bGUuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci9kZWNvcmF0b3JzL3Rocm90dGxlLmRlY29yYXRvci50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvdGhyb3R0bGVyLmd1YXJkLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci9zZXJ2aWNlcy90aHJvdHRsZXItc3RvcmFnZS5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9tb2R1bGVzL3Rocm90dGxlci90aHJvdHRsZXIubW9kdWxlLnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IGVudW0gQXBwRW52aXJvbWVudCB7XG4gICAgQ2xpZW50LFxuICAgIFNlcnZlcixcbn1cbiIsICJleHBvcnQgZW51bSBDb3JlTWV0YWRhdGFLZXkge1xuICAgIC8vIEdlbmVyYWxcbiAgICBJbmplY3RhYmxlID0gJ21hbmdvOmluamVjdGFibGUnLFxuICAgIEluamVjdCA9ICdtYW5nbzppbmplY3QnLFxuICAgIE1vZHVsZSA9ICdtYW5nbzptb2R1bGUnLFxuICAgIEdsb2JhbE1vZHVsZSA9ICdtYW5nbzpnbG9iYWwtbW9kdWxlJyxcbiAgICBDb250cm9sbGVyID0gJ21hbmdvOmNvbnRyb2xsZXItb3B0aW9ucycsXG4gICAgLy8gRXZlbnRzICYgUlBDXG4gICAgQ29udHJvbGxlckV2ZW50cyA9ICdtYW5nbzpjb250cm9sbGVyLWV2ZW50cycsXG4gICAgQ29udHJvbGxlclJQQ3MgPSAnbWFuZ286Y29udHJvbGxlci1ycGNzJyxcbiAgICBDb250cm9sbGVyUGFyYW1zID0gJ21hbmdvOmNvbnRyb2xsZXItcnBjLXBhcmFtcycsXG4gICAgLy8gUGlwZWxpbmVcbiAgICBHdWFyZHMgPSAnbWFuZ286Z3VhcmRzJyxcbiAgICBJbnRlcmNlcHRvcnMgPSAnbWFuZ286aW50ZXJjZXB0b3JzJyxcbiAgICBQaXBlcyA9ICdtYW5nbzpwaXBlcycsXG4gICAgLy8gRXJyb3JcbiAgICBDYXRjaCA9ICdtYW5nbzpjYXRjaCcsXG4gICAgRXJyb3JGaWx0ZXJzID0gJ21hbmdvOmVycm9yLWZpbHRlcnMnLFxuICAgIC8vXG4gICAgVGltZXJzID0gJ21hbmdvOnRpbWVycycsXG59XG4iLCAiZXhwb3J0IGVudW0gRXZlbnREZXN0aW5hdGlvbiB7XG4gICAgU2VydmVyID0gJ3NlcnZlcicsXG4gICAgQ2xpZW50ID0gJ2NsaWVudCcsXG4gICAgV2ViVmlldyA9ICd3ZWJ2aWV3Jyxcbn1cbiIsICJleHBvcnQgZW51bSBFeGVjdXRpb25Db250ZXh0VHlwZSB7XG4gICAgRXZlbnQgPSAnZXZlbnQnLFxuICAgIFJQQyA9ICdycGMnLFxufVxuIiwgImV4cG9ydCBlbnVtIE1ldGhvZFBhcmFtVHlwZSB7XG4gICAgQm9keSA9ICdib2R5JyxcbiAgICBDdXN0b20gPSAnY3VzdG9tJyxcbiAgICBQYXJhbSA9ICdwYXJhbScsXG4gICAgUGxheWVyID0gJ3BsYXllcicsXG4gICAgUmVxdWVzdCA9ICdyZXF1ZXN0JyxcbiAgICBSZXNwb25zZSA9ICdyZXNwb25zZScsXG4gICAgSW5kZXggPSAnaW5kZXgnLFxufVxuIiwgImV4cG9ydCBjb25zdCBMT0dHRVJfU0VSVklDRSA9ICdMT0dHRVJfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgRVZFTlRfU0VSVklDRSA9ICdFVkVOVF9TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBSUENfU0VSVklDRSA9ICdSUENfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgTU9EVUxFX0NPTlRBSU5FUiA9ICdNT0RVTEVfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBSRUZMRUNUT1JfU0VSVklDRSA9ICdSRUZMRUNUT1JfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgVElNRVJfU0VSVklDRSA9ICdUSU1FUl9TRVJWSUNFJztcbiIsICJleHBvcnQgZW51bSBFcnJvck1lc3NhZ2Uge1xuICAgIFRvb01hbnlSZXF1ZXN0cyA9ICdUb28gbWFueSByZXF1ZXN0cy4nLFxuXG4gICAgLy8gRXZlbnRzXG4gICAgRXZlbnROYW1lTXVzdEJlU3RyaW5nID0gJ1RoZSBldmVudCBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBFdmVudE5hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIGV2ZW50IG5hbWUgbXVzdCBiZSB1bmlxdWUuJyxcbiAgICBFdmVudE5vdEFsbG93ZWRJbkNsaWVudCA9ICdUaGUgZXZlbnQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIEV2ZW50Tm90QWxsb3dlZEluU2VydmVyID0gJ1RoZSBldmVudCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc2VydmVyIGVudmlyb25tZW50LicsXG4gICAgSW52YWxpZEV2ZW50VHlwZSA9ICdJbnZhbGlkIGV2ZW50IHR5cGUuJyxcbiAgICBJbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUgPSAnVGhlIG5hbWUgb2YgdGhlIGludGVybmFsIGV2ZW50IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUmV0dXJuSW5FdmVudCA9ICdDYW5ub3QgcmV0dXJuIGEgdmFsdWUgZnJvbSBhbiBldmVudC4nLFxuXG4gICAgLy8gUlBDXG4gICAgUlBDTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgUlBDIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4nLFxuICAgIFJQQ05hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIFJQQyBuYW1lIG11c3QgYmUgdW5pcXVlLicsXG4gICAgUlBDTm90QWxsb3dlZEluQ2xpZW50ID0gJ1RoZSBSUEMgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIFJQQ05vdEFsbG93ZWRJblNlcnZlciA9ICdUaGUgUlBDIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQuJyxcbiAgICBJbnZhbGlkUlBDVHlwZSA9ICdJbnZhbGlkIFJQQyB0eXBlLicsXG4gICAgUlBDSGFuZGxlckFscmVhZHlFeGlzdHMgPSAnVGhlIFJQQyBoYW5kbGVyIGFscmVhZHkgZXhpc3RzLiBQbGVhc2UgcHJvdmlkZSBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgUlBDLicsXG4gICAgUlBDUmVzcG9uc2VBbHJlYWR5U2VudCA9ICdUaGUgUlBDIHJlc3BvbnNlIGhhcyBhbHJlYWR5IGJlZW4gc2VudC4nLFxuXG4gICAgLy8gRXJyb3IgZmlsdGVyc1xuICAgIEludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24gPSAnSW52YWxpZCBlcnJvciBmaWx0ZXIuIEVycm9yIGZpbHRlcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhIGNhdGNoIG1ldGhvZC4nLFxuICAgIEVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlciA9ICdUaGUgZXJyb3IgYWxyZWFkeSBwb2ludHMgdG8gYSBmaWx0ZXIuJyxcbiAgICBFeGNlcHRpb25IYW5kbGluZ0NvbmZsaWN0ID0gJ1RoZSBzYW1lIGV4Y2VwdGlvbiBjYW4gb25seSBiZSBjYXVnaHQgb25jZS4nLFxuICAgIEF0TGVhc3RPbmVGaWx0ZXJSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgZXJyb3IgZmlsdGVyIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBEdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkID0gJ0R1cGxpY2F0ZSBlcnJvciBmaWx0ZXIgZm91bmQuIEVuc3VyZSB0aGF0IHRoZSBzYW1lIGZpbHRlciBpcyBub3QgYXBwbGllZCBtb3JlIHRoYW4gb25jZS4nLFxuXG4gICAgLy8gV2ViVmlld1xuICAgIFdlYlZpZXdOb3RGb3VuZCA9ICdUaGUgV2ViVmlldyB3aXRoIHRoZSBzcGVjaWZpZWQgaWQgZG9lcyBub3QgZXhpc3QuJyxcbiAgICBXZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlciA9ICdUaGUgV2ViVmlldyBpZCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bWJlci4nLFxuXG4gICAgLy8gR3VhcmRcbiAgICBJbnZhbGlkR3VhcmREZWZpbml0aW9uID0gJ0ludmFsaWQgZ3VhcmQuIEd1YXJkcyBtdXN0IGJlIGEgY2xhc3MgcmVmZXJlbmNlIG9yIGFuIG9iamVjdCB3aXRoIGEgY2FuQWN0aXZhdGUgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGd1YXJkIG11c3QgYmUgcHJvdmlkZWQuJyxcblxuICAgIC8vIEludGVyY2VwdG9yXG4gICAgSW52YWxpZEludGVyY2VwdG9yRGVmaW5pdGlvbiA9ICdJbnZhbGlkIGludGVyY2VwdG9yLiBJbnRlcmNlcHRvcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpbnRlcmNlcHQgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGludGVyY2VwdG9yIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBJbnZhbGlkSW50ZXJjZXB0b3JSZXR1cm5WYWx1ZSA9ICdUaGUgaW50ZXJjZXB0b3IgbXVzdCByZXR1cm4gYSBmdW5jdGlvbi4nLFxuXG4gICAgLy8gUGlwZVxuICAgIEludmFsaWRQaXBlRGVmaW5pdGlvbiA9ICdJbnZhbGlkIHBpcGUuIFBpcGVzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYSB0cmFuc2Zvcm0gbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgcGlwZSBtdXN0IGJlIHByb3ZpZGVkLicsXG5cbiAgICAvLyBBcHAgbG9hZGluZ1xuICAgIEFwcEFscmVhZHlMb2FkZWQgPSAnQXBwIGlzIGFscmVhZHkgbG9hZGVkLiBQbGVhc2UgY2FsbCB0aGUgc3RvcCBtZXRob2QgYmVmb3JlIGNhbGxpbmcgdGhlIHN0YXJ0IG1ldGhvZC4nLFxuICAgIEFwcE5vdExvYWRlZCA9ICdBcHAgaXMgbm90IGxvYWRlZC4gUGxlYXNlIGNhbGwgdGhlIHN0YXJ0IG1ldGhvZCBiZWZvcmUgY2FsbGluZyB0aGUgc3RvcCBtZXRob2QuJyxcblxuICAgIC8vIERlY29yYXRvcnNcbiAgICBJbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQgPSAnVGhlIHNwZWNpZmllZCBpbmplY3Rpb24gdG9rZW4gaXMgaW52YWxpZC4nLFxuICAgIEluamVjdGlvblRva2VuTm90Rm91bmQgPSAnVGhlIGluamVjdGlvbiB0b2tlbiBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICBQYXJhbUtleU11c3RCZVN0cmluZyA9ICdUaGUgcGFyYW0ga2V5IG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBJbmRleEtleU11c3RCZU51bWJlciA9ICdUaGUgaW5kZXgga2V5IG11c3QgYmUgYSBudW1iZXIuJyxcbiAgICBEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSA9ICdUaGUgc2FtZSBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCBvbmNlIGluIHRoZSBzYW1lIGNsYXNzLicsXG4gICAgSW52YWxpZENvbnRyb2xsZXJPcHRpb25zID0gJ0ludmFsaWQgY29udHJvbGxlciBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZEluamVjdGFibGVPcHRpb25zID0gJ0ludmFsaWQgaW5qZWN0YWJsZSBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZE1vZHVsZU9wdGlvbnMgPSAnSW52YWxpZCBtb2R1bGUgb3B0aW9ucyBmb3VuZC4nLFxuICAgIE11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCA9ICdDYW5ub3QgYXBwbHkgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byB0aGUgc2FtZSBwYXJhbWV0ZXIuJyxcblxuICAgIC8vIEludGVybmFsIEFwcFxuICAgIENpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkID0gJ0NpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQuJyxcbiAgICBJbnZhbGlkTW9kdWxlRGVmaW5pdGlvbiA9ICdUaGUgbW9kdWxlIGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkRXhwb3J0RGVmaW5pdGlvbiA9ICdUaGUgZXhwb3J0IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uID0gJ1RoZSBwcm92aWRlciBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFBhcmFtZXRlckRlY29yYXRvclVzYWdlID0gJ0VhY2ggcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGVpciBpdHMgb3duIGRlY29yYXRvci4nLFxuICAgIFJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzID0gJ1RoZSBAUmVzcG9uc2UoKSBkZWNvcmF0b3IgaXMgbm90IGFsbG93ZWQgb24gZXZlbnRzLicsXG4gICAgUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzID0gJ1RoZSBAUGxheWVyKCkgZGVjb3JhdG9yIGlzIG5vdCBhbGxvd2VkIG9uIGNsaWVudCBldmVudHMuJyxcblxuICAgIC8vIFRpbWVyc1xuICAgIFRpbWVyTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgdGltZXIgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLicsXG59XG4iLCAiZXhwb3J0IGVudW0gSW5qZWN0YWJsZVNjb3BlIHtcbiAgICBSZXF1ZXN0ID0gJ3JlcXVlc3QnLFxuICAgIFRyYW5zaWVudCA9ICd0cmFuc2llbnQnLFxuICAgIFNpbmdsZXRvbiA9ICdzaW5nbGV0b24nLFxufVxuIiwgImV4cG9ydCBlbnVtIFJQQ1Jlc3VsdFN0YXR1cyB7XG4gICAgU3VjY2VzcyA9IDEsXG4gICAgVGltZW91dCA9IDIsXG4gICAgSGFuZGxlck5vdEZvdW5kID0gMyxcbiAgICBVbmtub3duID0gNCxcbiAgICBDYW5jZWxsZWRCeUd1YXJkID0gNSxcbiAgICBJbnZhbGlkR3VhcmRSZXR1cm4gPSA2LFxuICAgIFRvb01hbnlSZXF1ZXN0cyA9IDcsXG4gICAgUGxheWVyRGlzY29ubmVjdGVkID0gOCxcbiAgICBQbGF5ZXJOb3RGb3VuZCA9IDksXG59XG4iLCAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSk9Pl9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbmV4cG9ydCB7IF9fbmFtZSB9OyAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV3b2dJQ0oyWlhKemFXOXVJam9nTXl3S0lDQWljMjkxY21ObGN5STZJRnRkTEFvZ0lDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNklGdGRMQW9nSUNKdFlYQndhVzVuY3lJNklDSWlMQW9nSUNKdVlXMWxjeUk2SUZ0ZENuMEtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklpSjkiLCAiZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tSWQoKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSkgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpO1xufVxuIiwgImV4cG9ydCBjb25zdCBpc1VuZGVmaW5lZCA9IChvYmo6IGFueSk6IG9iaiBpcyB1bmRlZmluZWQgPT4gdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSAoZm46IGFueSk6IGZuIGlzIG9iamVjdCA9PiAhaXNOaWwoZm4pICYmIHR5cGVvZiBmbiA9PT0gJ29iamVjdCc7XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvbiA9ICh2YWw6IGFueSk6IHZhbCBpcyBGdW5jdGlvbiA9PiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xuZXhwb3J0IGNvbnN0IGlzU3RyaW5nID0gKHZhbDogYW55KTogdmFsIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbmV4cG9ydCBjb25zdCBpc051bWJlciA9ICh2YWw6IGFueSk6IHZhbCBpcyBudW1iZXIgPT4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG5leHBvcnQgY29uc3QgaXNDb25zdHJ1Y3RvciA9ICh2YWw6IGFueSk6IGJvb2xlYW4gPT4gdmFsID09PSAnY29uc3RydWN0b3InO1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHZhbDogYW55KTogdmFsIGlzIG51bGwgfCB1bmRlZmluZWQgPT4gaXNVbmRlZmluZWQodmFsKSB8fCB2YWwgPT09IG51bGw7XG5leHBvcnQgY29uc3QgaXNFbXB0eSA9IChhcnJheTogYW55KTogYm9vbGVhbiA9PiAhKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA+IDApO1xuZXhwb3J0IGNvbnN0IGlzU3ltYm9sID0gKHZhbDogYW55KTogdmFsIGlzIHN5bWJvbCA9PiB0eXBlb2YgdmFsID09PSAnc3ltYm9sJztcbmV4cG9ydCBjb25zdCBpc0FzeW5jRnVuY3Rpb24gPSAodmFsOiBhbnkpOiBib29sZWFuID0+IGlzRnVuY3Rpb24odmFsKSAmJiB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FzeW5jRnVuY3Rpb24nO1xuZXhwb3J0IGNvbnN0IGlzQm9vbGVhbiA9ICh2YWw6IGFueSk6IHZhbCBpcyBib29sZWFuID0+IHR5cGVvZiB2YWwgPT09ICdib29sZWFuJztcbmV4cG9ydCBjb25zdCBpc1Byb21pc2UgPSA8VCA9IGFueT4odmFsOiBhbnkpOiB2YWwgaXMgUHJvbWlzZTxUPiA9PiB2YWwgaW5zdGFuY2VvZiBQcm9taXNlO1xuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGlvblRva2VuLCBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBJbmplY3RhYmxlTWV0YWRhdGEsIEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgQ2xhc3NQcm92aWRlciwgRHluYW1pY01vZHVsZSwgTG9nZ2VyU2VydmljZSwgTW9kdWxlT3B0aW9ucywgUGlwZSwgUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc1N0cmluZywgaXNTeW1ib2wgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVNZXRhZGF0YVJlYWRlciB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGFzeW5jIHJlYWQobW9kdWxlOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4pIHtcbiAgICAgICAgLy8gQ2xhc3MgcmVmZXJlbmNlXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG1vZHVsZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPFJlcXVpcmVkPE1vZHVsZU9wdGlvbnM+PihDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCBtb2R1bGUpID8/IDxSZXF1aXJlZDxNb2R1bGVPcHRpb25zPj57fTtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydFRva2VucyA9IHRoaXMuZ2V0RXhwb3J0VG9rZW5zKG9wdGlvbnMuZXhwb3J0cyk7XG4gICAgICAgICAgICBjb25zdCBzZXBhcmF0ZWRQcm92aWRlcnMgPSB0aGlzLnNlcGFyYXRlUHJvdmlkZXJzKG9wdGlvbnMucHJvdmlkZXJzLCBleHBvcnRUb2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gPE1vZHVsZU1ldGFkYXRhPntcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyczogb3B0aW9ucy5jb250cm9sbGVycyxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBvcHRpb25zLmltcG9ydHMsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShtb2R1bGUpLFxuICAgICAgICAgICAgICAgIC4uLnNlcGFyYXRlZFByb3ZpZGVycyxcbiAgICAgICAgICAgICAgICBjbGFzc1JlZjogbW9kdWxlLFxuICAgICAgICAgICAgICAgIGdsb2JhbDogUmVmbGVjdC5nZXRNZXRhZGF0YTxib29sZWFuPihDb3JlTWV0YWRhdGFLZXkuR2xvYmFsTW9kdWxlLCBtb2R1bGUpID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogb3B0aW9ucy5jb250YWluZXIsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIER5bmFtaWMgbW9kdWxlXG4gICAgICAgIGlmIChtb2R1bGUgaW5zdGFuY2VvZiBQcm9taXNlKSBtb2R1bGUgPSBhd2FpdCBtb2R1bGU7XG4gICAgICAgIGlmICghKCdtb2R1bGUnIGluIG1vZHVsZSkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRNb2R1bGVEZWZpbml0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgbW9kdWxlOiBjbGFzc1JlZiwgZ2xvYmFsLCAuLi5vcHRpb25zIH0gPSA8UmVxdWlyZWQ8RHluYW1pY01vZHVsZT4+bW9kdWxlO1xuICAgICAgICBjb25zdCBleHBvcnRUb2tlbnMgPSB0aGlzLmdldEV4cG9ydFRva2VucyhvcHRpb25zLmV4cG9ydHMpO1xuICAgICAgICBjb25zdCBzZXBhcmF0ZWRQcm92aWRlcnMgPSB0aGlzLnNlcGFyYXRlUHJvdmlkZXJzKG9wdGlvbnMucHJvdmlkZXJzLCBleHBvcnRUb2tlbnMpO1xuXG4gICAgICAgIHJldHVybiA8TW9kdWxlTWV0YWRhdGE+e1xuICAgICAgICAgICAgY29udHJvbGxlcnM6IG9wdGlvbnMuY29udHJvbGxlcnMsXG4gICAgICAgICAgICBpbXBvcnRzOiBvcHRpb25zLmltcG9ydHMsXG4gICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKGNsYXNzUmVmKSxcbiAgICAgICAgICAgIC4uLnNlcGFyYXRlZFByb3ZpZGVycyxcbiAgICAgICAgICAgIGNsYXNzUmVmLFxuICAgICAgICAgICAgZ2xvYmFsOiBnbG9iYWwgPz8gZmFsc2UsXG4gICAgICAgICAgICBjb250YWluZXI6IG9wdGlvbnMuY29udGFpbmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGlwZWxpbmUoY2xhc3NSZWY6IE5ld2FibGUpIHtcbiAgICAgICAgY29uc3QgZ3VhcmRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEd1YXJkPltdPihDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCBjbGFzc1JlZikgPz8gW107XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxJbnRlcmNlcHRvcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgY2xhc3NSZWYpID8/IFtdO1xuICAgICAgICBjb25zdCBwaXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxQaXBlPltdPihDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIGNsYXNzUmVmKSA/PyBbXTtcbiAgICAgICAgY29uc3QgZXJyb3JGaWx0ZXJzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCBjbGFzc1JlZikgPz8gW107XG5cbiAgICAgICAgcmV0dXJuIHsgZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBlcnJvckZpbHRlcnMgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydFRva2VucyhleHBvcnRzOiBSZXF1aXJlZDxNb2R1bGVPcHRpb25zPlsnZXhwb3J0cyddKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLm1hcDxJbmplY3Rpb25Ub2tlbj4oKHByb3ZpZGVyRXhwb3J0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwcm92aWRlckV4cG9ydCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIVJlZmxlY3QuaGFzT3duTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkluamVjdGFibGUsIHByb3ZpZGVyRXhwb3J0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFeHBvcnREZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyRXhwb3J0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZyhwcm92aWRlckV4cG9ydCkgfHwgaXNTeW1ib2wocHJvdmlkZXJFeHBvcnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyRXhwb3J0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICgncHJvdmlkZScgaW4gcHJvdmlkZXJFeHBvcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJFeHBvcnQucHJvdmlkZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEV4cG9ydERlZmluaXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlcGFyYXRlUHJvdmlkZXJzKHByb3ZpZGVyczogUmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz5bJ3Byb3ZpZGVycyddLCBleHBvcnRUb2tlbnM6IEluamVjdGlvblRva2VuW10pIHtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyc1xuICAgICAgICAgICAgLm1hcCgocHJvdmlkZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5qZWN0YWJsZU1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxJbmplY3RhYmxlTWV0YWRhdGE+KENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCBwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05pbChpbmplY3RhYmxlTWV0YWRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPENsYXNzUHJvdmlkZXI+eyBwcm92aWRlOiBwcm92aWRlciwgdXNlQ2xhc3M6IHByb3ZpZGVyLCBzY29wZTogaW5qZWN0YWJsZU1ldGFkYXRhLnNjb3BlIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgndXNlQ2xhc3MnIGluIHByb3ZpZGVyIHx8ICd1c2VWYWx1ZScgaW4gcHJvdmlkZXIgfHwgJ3VzZUZhY3RvcnknIGluIHByb3ZpZGVyIHx8ICd1c2VFeGlzdGluZycgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAgIChhY2MsIHByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBvcnRUb2tlbnMuaW5jbHVkZXMocHJvdmlkZXIucHJvdmlkZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjYy5leHRlcm5hbFByb3ZpZGVycy5zZXQocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjLmludGVybmFsUHJvdmlkZXJzLnNldChwcm92aWRlci5wcm92aWRlLCBwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxQcm92aWRlcnM6IG5ldyBNYXA8SW5qZWN0aW9uVG9rZW4sIEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+PigpLFxuICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyczogbmV3IE1hcDxJbmplY3Rpb25Ub2tlbiwgRXhjbHVkZTxQcm92aWRlciwgTmV3YWJsZT4+KCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVDb250YWluZXIgZXh0ZW5kcyBDb250YWluZXIge31cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4vbW9kdWxlLWNvbnRhaW5lcic7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGUge1xuICAgIHB1YmxpYyByZWFkb25seSBjb250cm9sbGVyczogQ29udHJvbGxlcltdID0gW107XG4gICAgcHVibGljIGNvbnRhaW5lcjogTW9kdWxlQ29udGFpbmVyO1xuICAgIHB1YmxpYyBwYXJlbnQ6IE1vZHVsZSB8IHVuZGVmaW5lZDtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhO1xuICAgIHB1YmxpYyBpbnN0YW5jZTogeyBba2V5OiBzdHJpbmddOiBGdW5jdGlvbiB9O1xuICAgIHB1YmxpYyByZXBldGl0aXZlSW1wb3J0czogU2V0PE1vZHVsZT4gPSBuZXcgU2V0KCk7XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHRUeXBlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVxdWVzdEJhc2UgfSBmcm9tICcuL21hbmdvLXJlcXVlc3QtYmFzZSc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVzcG9uc2VCYXNlIH0gZnJvbSAnLi9tYW5nby1yZXNwb25zZS1iYXNlJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEV4ZWN1dGlvbkNvbnRleHRCYXNlPFxuICAgIFRSZXF1ZXN0IGV4dGVuZHMgTWFuZ29SZXF1ZXN0QmFzZSA9IE1hbmdvUmVxdWVzdEJhc2UsXG4gICAgVFJlc3BvbnNlIGV4dGVuZHMgTWFuZ29SZXNwb25zZUJhc2UgPSBNYW5nb1Jlc3BvbnNlQmFzZSxcbj4gaW1wbGVtZW50cyBFeGVjdXRpb25Db250ZXh0PFRSZXF1ZXN0LCBUUmVzcG9uc2U+XG57XG4gICAgcHVibGljICR0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZTtcbiAgICBwdWJsaWMgJGNsYXNzUmVmOiBOZXdhYmxlO1xuICAgIHB1YmxpYyAkaGFuZGxlcjogRnVuY3Rpb247XG4gICAgcHVibGljICRyZXF1ZXN0OiBUUmVxdWVzdDtcbiAgICBwdWJsaWMgJHJlc3BvbnNlPzogVFJlc3BvbnNlO1xuICAgIHB1YmxpYyAkbmFtZTogc3RyaW5nO1xuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kY2xhc3NSZWY7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYW5kbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVlc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyZXF1ZXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzcG9uc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyZXNwb25zZSE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kbmFtZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVxdWVzdCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWFuZ29SZXF1ZXN0QmFzZTxURGF0YSA9IHVua25vd24+IGltcGxlbWVudHMgTWFuZ29SZXF1ZXN0IHtcbiAgICBwdWJsaWMgJGJvZHk6IFREYXRhO1xuICAgIHB1YmxpYyAkcGxheWVyPzogUGxheWVyTXA7XG5cbiAgICBwdWJsaWMgZ2V0IGJvZHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRib2R5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxheWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcGxheWVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXJTZXJ2aWNlLCBSUENFcnJvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1Jlc3BvbnNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNYW5nb1Jlc3BvbnNlQmFzZSBpbXBsZW1lbnRzIE1hbmdvUmVzcG9uc2Uge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgcHVibGljICRzZW5kTGlzdGVuZXJzOiBTZXQ8KGRhdGE6IHVua25vd24pID0+IHZvaWQ+ID0gbmV3IFNldCgpO1xuICAgIHB1YmxpYyAkZXJyb3JMaXN0ZW5lcnM6IFNldDwoZXJyb3I6IFJQQ0Vycm9yKSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcbiAgICBwdWJsaWMgJGlzU2VudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIHNlbmQ8VERhdGEgPSB1bmtub3duPihkYXRhPzogVERhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuJGlzU2VudCkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyB0aGUgUlBDIHJlc3BvbnNlLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENSZXNwb25zZUFscmVhZHlTZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJHNlbmRMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKGRhdGEpKTtcbiAgICAgICAgdGhpcy4kaXNTZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXJyb3I8VERldGFpbHMgPSB1bmtub3duPihtZXNzYWdlOiBzdHJpbmcsIGRldGFpbHM/OiBURGV0YWlscykge1xuICAgICAgICBpZiAodGhpcy4kaXNTZW50KSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHRoZSBSUEMgcmVzcG9uc2UuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVycm9yTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcih7IG1lc3NhZ2UsIGRldGFpbHMgfSkpO1xuICAgICAgICB0aGlzLiRpc1NlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyAkb25TZW5kKGxpc3RlbmVyOiAoZGF0YTogdW5rbm93bikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLiRzZW5kTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljICRvbkVycm9yKGxpc3RlbmVyOiAoZXJyb3I6IFJQQ0Vycm9yKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuJGVycm9yTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBUcmVlTm9kZTxUPiB7XG4gICAgcHVibGljIHZhbHVlOiBUO1xuICAgIHB1YmxpYyBjaGlsZHJlbjogVHJlZU5vZGU8VD5bXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ2hpbGQoY2hpbGQ6IFRyZWVOb2RlPFQ+KSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUNoaWxkKGNoaWxkOiBUcmVlTm9kZTxUPikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyZWU8VD4ge1xuICAgIHB1YmxpYyByb290OiBUcmVlTm9kZTxUPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLnJvb3QgPSBuZXcgVHJlZU5vZGU8VD4odmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmF2ZXJzZShjYWxsYmFjazogKG5vZGU6IFRyZWVOb2RlPFQ+KSA9PiB2b2lkKSB7XG4gICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlOiBUcmVlTm9kZTxUPikge1xuICAgICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2godHJhdmVyc2VOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYXZlcnNlTm9kZSh0aGlzLnJvb3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhc3luY1RyYXZlcnNlKGNhbGxiYWNrOiAobm9kZTogVHJlZU5vZGU8VD4pID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gdHJhdmVyc2VOb2RlKG5vZGU6IFRyZWVOb2RlPFQ+KSB7XG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKG5vZGUuY2hpbGRyZW4ubWFwKHRyYXZlcnNlTm9kZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdHJhdmVyc2VOb2RlKHRoaXMucm9vdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgZnVuY3Rpb24gdHJhdmVyc2VOb2RlKG5vZGU6IFRyZWVOb2RlPFQ+LCBkZXB0aDogbnVtYmVyKSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKGAkeyctJy5yZXBlYXQoZGVwdGggKiAyKX0ke25vZGUudmFsdWV9YCk7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB0cmF2ZXJzZU5vZGUoY2hpbGQsIGRlcHRoICsgMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhdmVyc2VOb2RlKHRoaXMucm9vdCwgMCk7XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IGRlZmF1bHRDb250cm9sbGVyT3B0aW9uczogQ29udHJvbGxlck9wdGlvbnMgPSB7IHByZWZpeDogJycgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMob3B0aW9ucz86IENvbnRyb2xsZXJPcHRpb25zKSB7XG4gICAgaWYgKGlzTmlsKG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlOiBkZWZhdWx0Q29udHJvbGxlck9wdGlvbnMsIGVycm9yOiAnQ29udHJvbGxlciBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICAgIH1cblxuICAgIGlmICghKCdwcmVmaXgnIGluIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogeyAuLi5kZWZhdWx0Q29udHJvbGxlck9wdGlvbnMsIC4uLm9wdGlvbnMgfSB9O1xuICAgIH1cbiAgICBpZiAoJ3ByZWZpeCcgaW4gb3B0aW9ucyAmJiAhaXNTdHJpbmcob3B0aW9ucy5wcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zLCBlcnJvcjogJ0NvbnRyb2xsZXIgcHJlZml4IG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiB7IC4uLmRlZmF1bHRDb250cm9sbGVyT3B0aW9ucywgLi4ub3B0aW9ucyB9IH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXJyb3JGaWx0ZXI8RUYgZXh0ZW5kcyBFcnJvckZpbHRlciA9IEVycm9yRmlsdGVyPih2YWx1ZTogRUYgfCBOZXdhYmxlPEVGPikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUuY2F0Y2gpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBoYXZlIGEgY2F0Y2ggbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxFcnJvckZpbHRlcj52YWx1ZSkuY2F0Y2gpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBoYXZlIGEgY2F0Y2ggbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQaXBlKHZhbHVlOiBQaXBlIHwgTmV3YWJsZTxQaXBlPikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQaXBlIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS50cmFuc2Zvcm0pKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGhhdmUgYSB0cmFuc2Zvcm0gbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxQaXBlPnZhbHVlKS50cmFuc2Zvcm0pKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGhhdmUgYSB0cmFuc2Zvcm0gbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi9waXBlLnZhbGlkYXRlJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIodmFsdWU6IE1ldGhvZFBhcmFtZXRlcikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkgfHwgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG4gICAgaWYgKCdrZXknIGluIHZhbHVlICYmICFpc05pbCh2YWx1ZS5rZXkpICYmICFpc1N0cmluZyh2YWx1ZS5rZXkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGtleSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICBpZiAoISgnaW5kZXgnIGluIHZhbHVlKSB8fCAhaXNOdW1iZXIodmFsdWUuaW5kZXgpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGluZGV4IGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICAvLyBCb2R5UGFyYW1ldGVyIHwgUGxheWVyUGFyYW1ldGVyXG4gICAgaWYgKFxuICAgICAgICAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLkJvZHkgfHwgdmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLlBsYXllcikgJiZcbiAgICAgICAgJ2RhdGEnIGluIHZhbHVlICYmXG4gICAgICAgICFpc05pbCh2YWx1ZS5kYXRhKSAmJlxuICAgICAgICAhaXNTdHJpbmcodmFsdWUuZGF0YSlcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZGF0YSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBDdXN0b21QYXJhbWV0ZXJcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLkN1c3RvbSAmJiAhKCdmYWN0b3J5JyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZmFjdG9yeSBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5DdXN0b20gJiYgJ2ZhY3RvcnknIGluIHZhbHVlICYmICFpc0Z1bmN0aW9uKHZhbHVlLmZhY3RvcnkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cbiAgICAvLyAgUGFyYW1QYXJhbWV0ZXJcbiAgICBpZiAoKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5QYXJhbSB8fCB2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuSW5kZXgpICYmICEoJ2RhdGEnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBkYXRhIGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLlBhcmFtICYmICdkYXRhJyBpbiB2YWx1ZSAmJiAhaXNTdHJpbmcodmFsdWUuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZGF0YSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBJbmRleFBhcmFtZXRlclxuICAgIGlmICh2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuSW5kZXggJiYgJ2RhdGEnIGluIHZhbHVlICYmICFpc051bWJlcih2YWx1ZS5kYXRhKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBkYXRhIG11c3QgYmUgYSBudW1iZXInIH07XG4gICAgfVxuICAgIC8vIEJvZHlQYXJhbWV0ZXIgfCBDdXN0b21QYXJhbWV0ZXIgfCBQYXJhbVBhcmFtZXRlciB8IFBsYXllclBhcmFtZXRlciB8IEluZGV4UGFyYW1ldGVyO1xuICAgIGlmIChcbiAgICAgICAgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlcXVlc3QgJiZcbiAgICAgICAgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlc3BvbnNlICYmXG4gICAgICAgICdwaXBlcycgaW4gdmFsdWUgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUucGlwZXMpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIHBpcGVzIG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVxdWVzdCAmJiB2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVzcG9uc2UgJiYgISgncGlwZXMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5waXBlcyA9IFtdO1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlcXVlc3QgJiYgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiB2YWx1ZS5waXBlcyEpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXZlbnRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2FwcCc7XG5pbXBvcnQgeyBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVFdmVudFBhcmFtZXRlciB9IGZyb20gJy4vZXZlbnQtcGFyYW1ldGVyLnZhbGlkYXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZlbnRNZXRhZGF0YSh2YWx1ZTogRXZlbnRNZXRhZGF0YSkge1xuICAgIGlmIChpc05pbCh2YWx1ZSkgfHwgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICAgIH1cblxuICAgIC8vIFR5cGVcbiAgICBpZiAoISgndHlwZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgdHlwZSBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgaWYgKCFpc1N0cmluZyh2YWx1ZS50eXBlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIHR5cGUgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG4gICAgLy8gTmFtZVxuICAgIGlmICghKCduYW1lJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBuYW1lIGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICBpZiAoIWlzU3RyaW5nKHZhbHVlLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBNZXRob2RcbiAgICBpZiAoISgnbWV0aG9kJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBtZXRob2QgaXMgcmVxdWlyZWQnIH07XG4gICAgfVxuICAgIGlmICghaXNTdHJpbmcodmFsdWUubWV0aG9kKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIG1ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBQYXJhbXNcbiAgICBpZiAoISgncGFyYW1zJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgKDxFdmVudE1ldGFkYXRhPnZhbHVlKS5wYXJhbXMgPSBbXTtcbiAgICB9XG4gICAgaWYgKCdwYXJhbXMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLnBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBwYXJhbXMgbXVzdCBiZSBhbiBhcnJheScgfTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiB2YWx1ZS5wYXJhbXMpIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIocGFyYW0pO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHdWFyZDxHIGV4dGVuZHMgR3VhcmQgPSBHdWFyZD4odmFsdWU6IEcgfCBOZXdhYmxlPEc+KSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxHdWFyZD52YWx1ZSkuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUludGVyY2VwdG9yPEkgZXh0ZW5kcyBJbnRlcmNlcHRvciA9IEludGVyY2VwdG9yPih2YWx1ZTogSSB8IE5ld2FibGU8ST4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNGdW5jdGlvbigoPEludGVyY2VwdG9yPnZhbHVlKS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1N0cmluZywgaXNTeW1ib2wgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUluamVjdGlvblRva2VuKHZhbHVlOiBJbmplY3Rpb25Ub2tlbikge1xuICAgIGNvbnN0IHZhbGlkID0gaXNTdHJpbmcodmFsdWUpIHx8IGlzU3ltYm9sKHZhbHVlKSB8fCBpc0Z1bmN0aW9uKHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSk7XG4gICAgcmV0dXJuIHZhbGlkID8geyB2YWxpZCwgdmFsdWUgfSA6IHsgdmFsaWQsIHZhbHVlLCBlcnJvcjogJ0luamVjdGlvbiB0b2tlbiBtdXN0IGJlIGEgc3RyaW5nLCBzeW1ib2wsIGNsYXNzLCBvciBvYmplY3QnIH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQ2xhc3NQcm92aWRlcixcbiAgICBFeGlzdGluZ1Byb3ZpZGVyLFxuICAgIEZhY3RvcnlQcm92aWRlcixcbiAgICBPcHRpb25hbEZhY3RvcnlEZXBlbmRlbmN5LFxuICAgIFByb3ZpZGVyLFxuICAgIFZhbHVlUHJvdmlkZXIsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL2luamVjdGlvbi10b2tlbi52YWxpZGF0ZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlU2NvcGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVByb3ZpZGVyKHZhbHVlOiBQcm92aWRlcikge1xuICAgIGlmICghaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgYmUgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCEoJ3Byb3ZpZGUnIGluIHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYSBwcm92aWRlIHByb3BlcnR5JyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4odmFsdWUucHJvdmlkZSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3VzZUNsYXNzJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ2xhc3NQcm92aWRlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZVZhbHVlJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlVmFsdWVQcm92aWRlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZUZhY3RvcnknIGluIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVGYWN0b3J5UHJvdmlkZXIodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VFeGlzdGluZycgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUV4aXN0aW5nUHJvdmlkZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUNsYXNzLCB1c2VWYWx1ZSwgdXNlRmFjdG9yeSwgb3IgdXNlRXhpc3RpbmcgcHJvcGVydHknIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNsYXNzUHJvdmlkZXIodmFsdWU6IENsYXNzUHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlQ2xhc3MnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUNsYXNzIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIGlmICghKCdzY29wZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLnNjb3BlID0gSW5qZWN0YWJsZVNjb3BlLlNpbmdsZXRvbjtcbiAgICB9XG5cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhT2JqZWN0LnZhbHVlczxgJHtJbmplY3RhYmxlU2NvcGV9YD4oSW5qZWN0YWJsZVNjb3BlKS5pbmNsdWRlcyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBzY29wZSBtdXN0IGJlIGEgdmFsaWQgaW5qZWN0YWJsZSBzY29wZScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVmFsdWVQcm92aWRlcih2YWx1ZTogVmFsdWVQcm92aWRlcikge1xuICAgIGlmICghKCd1c2VWYWx1ZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdXNlVmFsdWUgcHJvcGVydHknIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSh2YWx1ZTogT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSkge1xuICAgIGlmICghKCdvcHRpb25hbCcgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGFuIG9wdGlvbmFsIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIGlmICghKCd0b2tlbicgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdG9rZW4gcHJvcGVydHknIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4odmFsdWUudG9rZW4pO1xuICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmFjdG9yeVByb3ZpZGVyKHZhbHVlOiBGYWN0b3J5UHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlRmFjdG9yeScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdXNlRmFjdG9yeSBwcm9wZXJ0eScgfTtcbiAgICB9XG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlLnVzZUZhY3RvcnkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgdXNlRmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCEoJ2luamVjdCcgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmluamVjdCA9IFtdO1xuICAgIH1cbiAgICBpZiAoJ2luamVjdCcgaW4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUuaW5qZWN0KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIGluamVjdCBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH1cbiAgICBpZiAoJ2luamVjdCcgaW4gdmFsdWUpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZS5pbmplY3QpIHtcbiAgICAgICAgICAgIGlmIChpc09iamVjdCh0b2tlbikgJiYgJ29wdGlvbmFsJyBpbiB0b2tlbiAmJiAndG9rZW4nIGluIHRva2VuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSh0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3Rpb25Ub2tlbih0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCdzY29wZScgaW4gdmFsdWUgJiYgIU9iamVjdC52YWx1ZXM8YCR7SW5qZWN0YWJsZVNjb3BlfWA+KEluamVjdGFibGVTY29wZSkuaW5jbHVkZXModmFsdWUuc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgc2NvcGUgbXVzdCBiZSBhIHZhbGlkIGluamVjdGFibGUgc2NvcGUnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nUHJvdmlkZXIodmFsdWU6IEV4aXN0aW5nUHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlRXhpc3RpbmcnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUV4aXN0aW5nIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRHluYW1pY01vZHVsZSwgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQcm92aWRlciB9IGZyb20gJy4vcHJvdmlkZXIudmFsaWRhdGUnO1xuaW1wb3J0IHsgaXNCb29sZWFuLCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QsIGlzUHJvbWlzZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0aW9uVG9rZW4sIE51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uL2luamVjdGlvbi10b2tlbi52YWxpZGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMoXG4gICAgdmFsdWU/OiBNb2R1bGVPcHRpb25zIHwgRHluYW1pY01vZHVsZSxcbiAgICBpc0R5bmFtaWMgPSBmYWxzZSxcbik6IHsgdmFsaWQ6IGJvb2xlYW47IHZhbHVlOiBNb2R1bGVPcHRpb25zIHwgRHluYW1pY01vZHVsZTsgZXJyb3I/OiBOdWxsYWJsZTxzdHJpbmc+IH0ge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgICBjb250cm9sbGVyczogW10sXG4gICAgICAgICAgICBpbXBvcnRzOiBbXSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW10sXG4gICAgICAgICAgICBleHBvcnRzOiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnTW9kdWxlIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICBpZiAoISgnbW9kdWxlJyBpbiB2YWx1ZSkgfHwgIWlzRnVuY3Rpb24odmFsdWUubW9kdWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdEeW5hbWljIG1vZHVsZSBtdXN0IGhhdmUgYSBtb2R1bGUgZnVuY3Rpb24nIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISgnZ2xvYmFsJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlLmdsb2JhbCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKCEoJ2dsb2JhbCcgaW4gdmFsdWUpICYmICFpc0Jvb2xlYW4odmFsdWUuZ2xvYmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdEeW5hbWljIG1vZHVsZSBtdXN0IGhhdmUgYSBnbG9iYWwgcHJvcGVydHknIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ2ltcG9ydHMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLmltcG9ydHMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW1wb3J0cyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgnaW1wb3J0cycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmltcG9ydHMgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAoJ2NvbnRyb2xsZXJzJyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5jb250cm9sbGVycykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdDb250cm9sbGVycyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgnY29udHJvbGxlcnMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5jb250cm9sbGVycyA9IFtdO1xuICAgIH1cblxuICAgIGlmICgncHJvdmlkZXJzJyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5wcm92aWRlcnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXJzIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfSBlbHNlIGlmICghKCdwcm92aWRlcnMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5wcm92aWRlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAoJ2V4cG9ydHMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLmV4cG9ydHMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXhwb3J0cyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgnZXhwb3J0cycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmV4cG9ydHMgPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGltcG9ydGVkIG9mIHZhbHVlLmltcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGltcG9ydGVkKSAmJiAhaXNPYmplY3QoaW1wb3J0ZWQpICYmICFpc1Byb21pc2UoaW1wb3J0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0ltcG9ydCBtdXN0IGJlIGEgZnVuY3Rpb24sIG9iamVjdCwgb3IgcHJvbWlzZScgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09iamVjdChpbXBvcnRlZCkgJiYgIWlzUHJvbWlzZShpbXBvcnRlZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMoPER5bmFtaWNNb2R1bGU+aW1wb3J0ZWQsIHRydWUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiB2YWx1ZS5jb250cm9sbGVycykge1xuICAgICAgICBpZiAoIWlzRnVuY3Rpb24oY29udHJvbGxlcikpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnQ29udHJvbGxlciBtdXN0IGJlIGEgZnVuY3Rpb24nIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHZhbHVlLnByb3ZpZGVycykge1xuICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVQcm92aWRlcihwcm92aWRlcik7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGV4cG9ydEl0ZW0gb2YgdmFsdWUuZXhwb3J0cykge1xuICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3Rpb25Ub2tlbig8SW5qZWN0aW9uVG9rZW4+ZXhwb3J0SXRlbSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzT2JqZWN0KGV4cG9ydEl0ZW0pICYmXG4gICAgICAgICAgICAoJ3VzZUNsYXNzJyBpbiBleHBvcnRJdGVtIHx8ICd1c2VGYWN0b3J5JyBpbiBleHBvcnRJdGVtIHx8ICd1c2VWYWx1ZScgaW4gZXhwb3J0SXRlbSB8fCAndXNlRXhpc3RpbmcnIGluIGV4cG9ydEl0ZW0pXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCB9ID0gdmFsaWRhdGVQcm92aWRlcihleHBvcnRJdGVtKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V4cG9ydCBtdXN0IGJlIGEgcHJvdmlkZXIgb2JqZWN0JyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEluamVjdGFibGVTY29wZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuY29uc3QgZGVmYXVsdEluamVjdGFibGVPcHRpb25zOiBJbmplY3RhYmxlT3B0aW9ucyA9IHsgc2NvcGU6IEluamVjdGFibGVTY29wZS5TaW5nbGV0b24gfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhKHZhbHVlPzogSW5qZWN0YWJsZU9wdGlvbnMpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2NvcGUnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IHsgLi4uZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCAuLi52YWx1ZSB9IH07XG4gICAgfVxuICAgIGlmICgnc2NvcGUnIGluIHZhbHVlICYmICFpc1N0cmluZyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgc2NvcGUgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG5cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhT2JqZWN0LnZhbHVlczxgJHtJbmplY3RhYmxlU2NvcGV9YD4oSW5qZWN0YWJsZVNjb3BlKS5pbmNsdWRlcyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0ludmFsaWQgaW5qZWN0YWJsZSBzY29wZScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFJQQ1Jlc3VsdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY29uc3QgSU5URVJOQUxfQVBQX0NPTlRBSU5FUiA9ICdJTlRFUk5BTF9BUFBfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBHTE9CQUxfQVBQX0NPTlRBSU5FUiA9ICdHTE9CQUxfQVBQX0NPTlRBSU5FUic7XG5leHBvcnQgY29uc3QgQVBQX0VOVklST01FTlQgPSAnQVBQX0VOVklST01FTlQnO1xuXG5leHBvcnQgY29uc3QgR0xPQkFMX0dVQVJEUyA9ICdHTE9CQUxfR1VBUkRTJztcbmV4cG9ydCBjb25zdCBHTE9CQUxfSU5URVJDRVBUT1JTID0gJ0dMT0JBTF9JTlRFUkNFUFRPUlMnO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9QSVBFUyA9ICdHTE9CQUxfUElQRVMnO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9FUlJPUl9GSUxURVJTID0gJ0dMT0JBTF9FUlJPUl9GSUxURVJTJztcblxuZXhwb3J0IGNvbnN0IFBMVUdJTlMgPSAnUExVR0lOUyc7XG5cbmV4cG9ydCBjb25zdCBFTkFCTEVfU0hVVERPV05fSE9PS1MgPSAnRU5BQkxFX1NIVVRET1dOX0hPT0tTJztcbmV4cG9ydCBjb25zdCBDT05UQUlORVJfT1BUSU9OUyA9ICdDT05UQUlORVJfT1BUSU9OUyc7XG5leHBvcnQgY29uc3QgTE9HX0VSUk9SX1NUQUNLVFJBQ0UgPSAnTE9HX0VSUk9SX1NUQUNLVFJBQ0UnO1xuXG5leHBvcnQgY29uc3QgTUFOR09fTE9HX1BSRUZJWCA9ICfwn6WtJztcblxuZXhwb3J0IGNvbnN0IE1BTkdPX1JFUVVFU1RfRkFDVE9SWSA9ICdNQU5HT19SRVFVRVNUX0ZBQ1RPUlknO1xuZXhwb3J0IGNvbnN0IE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkgPSAnTUFOR09fUkVTUE9OU0VfRkFDVE9SWSc7XG5leHBvcnQgY29uc3QgRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSA9ICdFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZJztcblxuZXhwb3J0IGNvbnN0IE1VTFRJUExBWUVSX1NFUlZJQ0UgPSAnTVVMVElQTEFZRVJfU0VSVklDRSc7XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1RJTUVPVVQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnUlBDIGNhbGwgdGltZWQgb3V0LicgfSxcbiAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5UaW1lb3V0LFxufTtcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnUlBDIGhhbmRsZXIgbm90IGZvdW5kLicgfSxcbiAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5IYW5kbGVyTm90Rm91bmQsXG59O1xuXG5leHBvcnQgY29uc3QgUlBDX1JFU1VMVF9VTktOT1dOOiBSUENSZXN1bHQgPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogJ1Vua25vd24gZXJyb3IuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlVua25vd24sXG59O1xuXG5leHBvcnQgY29uc3QgUlBDX1JFU1VMVF9QTEFZRVJfRElTQ09OTkVDVEVEOiBSUENSZXN1bHQgPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogJ1BsYXllciBkaXNjb25uZWN0ZWQuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlBsYXllckRpc2Nvbm5lY3RlZCxcbn07XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnUGxheWVyIG5vdCBmb3VuZC4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuUGxheWVyTm90Rm91bmQsXG59O1xuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGNsYXNzIE1hbmdvRXJyb3I8VERldGFpbHMgPSB1bmtub3duPiBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgc3RhdHVzOiBudW1iZXIgPSBSUENSZXN1bHRTdGF0dXMuVW5rbm93bjtcbiAgICBwdWJsaWMgZGV0YWlsczogVERldGFpbHMgfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIsIGRldGFpbHM/OiBURGV0YWlscykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXMgPz8gUlBDUmVzdWx0U3RhdHVzLlVua25vd247XG4gICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuL21hbmdvLmVycm9yJztcblxuZXhwb3J0IGNsYXNzIEd1YXJkQ2FuY2VsRXJyb3IgZXh0ZW5kcyBNYW5nb0Vycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdQcm9jZXNzIGNhbmNlbGxlZCBieSB0aGUgZ3VhcmQuJywgUlBDUmVzdWx0U3RhdHVzLkNhbmNlbGxlZEJ5R3VhcmQpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBNYW5nb0Vycm9yIH0gZnJvbSAnLi9tYW5nby5lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBHdWFyZEludmFsaWRSZXR1cm5FcnJvciBleHRlbmRzIE1hbmdvRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ0d1YXJkIHJldHVybmVkIGFuIGludmFsaWQgdmFsdWUuIEV4cGVjdGVkIGJvb2xlYW4uJywgUlBDUmVzdWx0U3RhdHVzLkludmFsaWRHdWFyZFJldHVybik7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuL21hbmdvLmVycm9yJztcblxuZXhwb3J0IGNsYXNzIFRvb01hbnlSZXF1ZXN0cyBleHRlbmRzIE1hbmdvRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ1RvbyBtYW55IHJlcXVlc3RzLicpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgUlBDUmVzdWx0U3RhdHVzLlRvb01hbnlSZXF1ZXN0cyk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuL21hbmdvLmVycm9yJztcblxuZXhwb3J0IGNsYXNzIFVua25vd25FcnJvciBleHRlbmRzIE1hbmdvRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ1Vua25vd24gZXJyb3IuJywgUlBDUmVzdWx0U3RhdHVzLlVua25vd24pO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciwgR3VhcmQsIEludGVyY2VwdG9yLCBJbnRlcm5hbEV2ZW50U2VydmljZSwgTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTUVOVCwgRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSwgTUFOR09fUkVRVUVTVF9GQUNUT1JZLCBNVUxUSVBMQVlFUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFBpcGVsaW5lSGFuZGxlciB9IGZyb20gJy4vcGlwZWxpbmUuaGFuZGxlcic7XG5pbXBvcnQgdHlwZSB7IEV2ZW50TWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVWRU5UX1NFUlZJQ0UsIExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBBcHBFbnZpcm9tZW50LCBFeGVjdXRpb25Db250ZXh0VHlwZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCBNYW5nb1Jlc3BvbnNlQmFzZSwgdHlwZSBNYW5nb1JlcXVlc3RCYXNlIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBDYWxsSGFuZGxlciwgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNBc3luY0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29udHJvbGxlckZsb3dIYW5kbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyLWZsb3cuaGFuZGxlcic7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyRXZlbnRIYW5kbGVyIHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcml2YXRlIHJlYWRvbmx5IGFwcEVudjogQXBwRW52aXJvbWVudDtcbiAgICBAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBNdWx0aXBsYXllclNlcnZpY2U7XG4gICAgQGluamVjdChFVkVOVF9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U2VydmljZTogSW50ZXJuYWxFdmVudFNlcnZpY2U7XG4gICAgQGluamVjdChDb250cm9sbGVyRmxvd0hhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlckZsb3dIYW5kbGVyOiBDb250cm9sbGVyRmxvd0hhbmRsZXI7XG4gICAgQGluamVjdChQaXBlbGluZUhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcGlwZWxpbmVIYW5kbGVyOiBQaXBlbGluZUhhbmRsZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoTUFOR09fUkVRVUVTVF9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZU1hbmdvUmVxdWVzdDogKGJvZHk6IHVua25vd24sIHBsYXllcj86IFBsYXllck1wKSA9PiBNYW5nb1JlcXVlc3RCYXNlO1xuICAgIEBpbmplY3QoRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVFeGVjdXRpb25Db250ZXh0OiAoXG4gICAgICAgIHR5cGU6IEV4ZWN1dGlvbkNvbnRleHRUeXBlLFxuICAgICAgICBjbGFzc1JlZjogTmV3YWJsZSxcbiAgICAgICAgaGFuZGxlcjogRnVuY3Rpb24sXG4gICAgICAgIHJlcXVlc3Q6IE1hbmdvUmVxdWVzdEJhc2UsXG4gICAgICAgIHJlc3BvbnNlPzogTWFuZ29SZXNwb25zZUJhc2UsXG4gICAgICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgKSA9PiBFeGVjdXRpb25Db250ZXh0QmFzZTtcblxuICAgIHB1YmxpYyByZWdpc3RlckV2ZW50KFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgZXZlbnQ6IEV2ZW50TWV0YWRhdGEsXG4gICAgKSB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnb24nIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2V2ZW50LnR5cGVdKGV2ZW50Lm5hbWUsIGFzeW5jIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ29uSW50ZXJuYWwnIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlSW50ZXJuYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2VbYCQke2V2ZW50LnR5cGV9YF0oZXZlbnQubmFtZSwgYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBsYXllciwgYm9keSB9ID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UucGFyc2VJbnRlcm5hbEFyZ3M8UGxheWVyTXA+KC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ29uUGxheWVyJyB8fCBldmVudC50eXBlID09PSAnb25jZVBsYXllcicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC5uYW1lLCBhc3luYyAocGxheWVyLCBib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQsIGJvZHksIHBsYXllcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnb25TZXJ2ZXInIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlU2VydmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2V2ZW50LnR5cGVdKGV2ZW50Lm5hbWUsIGFzeW5jIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ29uV2ViVmlldycgfHwgZXZlbnQudHlwZSA9PT0gJ29uY2VXZWJWaWV3Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2V2ZW50LnR5cGVdKGV2ZW50LndlYlZpZXdJZCEsIGV2ZW50Lm5hbWUsIGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gYXJnc1sxXSA6IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgcGxheWVyID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gPFBsYXllck1wPmFyZ3NbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQsIGJvZHksIHBsYXllcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIGV2ZW50LicpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFdmVudFR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlRXZlbnQoXG4gICAgICAgIGd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10sXG4gICAgICAgIGludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10sXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIG1hcHBlZEVycm9yRmlsdGVyczogW2FueSB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdLFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBldmVudDogRXZlbnRNZXRhZGF0YSxcbiAgICAgICAgYm9keTogdW5rbm93bixcbiAgICAgICAgcGxheWVyPzogUGxheWVyTXAsXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNyZWF0ZU1hbmdvUmVxdWVzdChib2R5LCBwbGF5ZXIpO1xuICAgICAgICBjb25zdCBleGVjdXRpb25Db250ZXh0ID0gdGhpcy5jcmVhdGVFeGVjdXRpb25Db250ZXh0KFxuICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dFR5cGUuRXZlbnQsXG4gICAgICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLFxuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZi5wcm90b3R5cGVbZXZlbnQubWV0aG9kXSxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBldmVudC5uYW1lLFxuICAgICAgICApO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaEd1YXJkcyhleGVjdXRpb25Db250ZXh0LCBndWFyZHMsIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJGbG93SGFuZGxlci5jcmVhdGVBcmdzKGNvbnRyb2xsZXIsIGV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50LCBwaXBlcywgcGxheWVyKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXJNZXRob2QgPSBjb250cm9sbGVyLmluc3RhbmNlW2V2ZW50Lm1ldGhvZF0hO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gaXNBc3luY0Z1bmN0aW9uKGNvbnRyb2xsZXJNZXRob2QpXG4gICAgICAgICAgICAgICAgPyAoKTogdW5rbm93biA9PiBjb250cm9sbGVyLmluc3RhbmNlW2V2ZW50Lm1ldGhvZF0hLmFwcGx5KGNvbnRyb2xsZXIuaW5zdGFuY2UsIGFyZ3MpXG4gICAgICAgICAgICAgICAgOiAoKTogUHJvbWlzZTx1bmtub3duPiA9PiBjb250cm9sbGVyLmluc3RhbmNlW2V2ZW50Lm1ldGhvZF0hLmFwcGx5KGNvbnRyb2xsZXIuaW5zdGFuY2UsIGFyZ3MpO1xuICAgICAgICAgICAgY29uc3QgY2FsbEhhbmRsZXI6IENhbGxIYW5kbGVyID0ge1xuICAgICAgICAgICAgICAgIGhhbmRsZSxcbiAgICAgICAgICAgICAgICByZXR1cm46ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmV0dXJuIGEgdmFsdWUgZnJvbSBhbiBldmVudC4nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUmV0dXJuSW5FdmVudCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVGhyb3VnaEludGVyY2VwdG9ycyhleGVjdXRpb25Db250ZXh0LCBpbnRlcmNlcHRvcnMsIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLCBjYWxsSGFuZGxlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNhbGxIYW5kbGVyLmhhbmRsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JHcm91cCA9IG1hcHBlZEVycm9yRmlsdGVycy5maW5kKFxuICAgICAgICAgICAgICAgIChbZXJyb3JUeXBlXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZXJyb3JUeXBlKSAmJiBlcnJvciBpbnN0YW5jZW9mIGVycm9yVHlwZSkgfHwgZXJyb3JUeXBlID09PSAnTUFOR09fQU5ZX0VSUk9SJyB8fCBlcnJvciA9PT0gZXJyb3JUeXBlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpc05pbChlcnJvckdyb3VwKSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKGVycm9yR3JvdXBbMV0pXG4gICAgICAgICAgICAgICAgPyBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQoZXJyb3JHcm91cFsxXSlcbiAgICAgICAgICAgICAgICA6IGlzT2JqZWN0KGVycm9yR3JvdXBbMV0pICYmIGlzRnVuY3Rpb24oZXJyb3JHcm91cFsxXVsnY2F0Y2gnXSlcbiAgICAgICAgICAgICAgICAgID8gZXJyb3JHcm91cFsxXVxuICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggZXJyb3IgZmlsdGVycy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGluc3RhbmNlLmNhdGNoLmNhbGwoaW5zdGFuY2UsIGVycm9yLCBleGVjdXRpb25Db250ZXh0KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgR3VhcmQsIEludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBHdWFyZENhbmNlbEVycm9yLCBHdWFyZEludmFsaWRSZXR1cm5FcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBBcmd1bWVudE1ldGFkYXRhLCBDYWxsSGFuZGxlciwgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVDb250YWluZXIgfSBmcm9tICcuLi9tb2R1bGUnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVIYW5kbGVyIHtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgLy8gQGluamVjdChHTE9CQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxDb250YWluZXI6IENvbnRhaW5lcjtcblxuICAgIHB1YmxpYyBhc3luYyBnb1Ryb3VnaEd1YXJkcyhleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0QmFzZSwgZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSwgY29udGFpbmVyOiBNb2R1bGVDb250YWluZXIpIHtcbiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiBndWFyZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihndWFyZCkgPyBjb250YWluZXIuZ2V0KGd1YXJkKSA6IGlzT2JqZWN0KGd1YXJkKSAmJiBpc0Z1bmN0aW9uKGd1YXJkWydjYW5BY3RpdmF0ZSddKSA/IGd1YXJkIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIGd1YXJkcy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRHdWFyZERlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2FuQWN0aXZhdGUgPSBhd2FpdCBpbnN0YW5jZS5jYW5BY3RpdmF0ZS5jYWxsKGluc3RhbmNlLCBleGVjdXRpb25Db250ZXh0KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuQWN0aXZhdGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggZ3VhcmRzLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHdWFyZEludmFsaWRSZXR1cm5FcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjYW5BY3RpdmF0ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHdWFyZENhbmNlbEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ29UaHJvdWdoSW50ZXJjZXB0b3JzKFxuICAgICAgICBleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0QmFzZSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSxcbiAgICAgICAgY29udGFpbmVyOiBNb2R1bGVDb250YWluZXIsXG4gICAgICAgIGNhbGxIYW5kbGVyOiBDYWxsSGFuZGxlcixcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihpbnRlcmNlcHRvcilcbiAgICAgICAgICAgICAgICA/IGNvbnRhaW5lci5nZXQoaW50ZXJjZXB0b3IpXG4gICAgICAgICAgICAgICAgOiBpc09iamVjdChpbnRlcmNlcHRvcikgJiYgaXNGdW5jdGlvbihpbnRlcmNlcHRvclsnaW50ZXJjZXB0J10pXG4gICAgICAgICAgICAgICAgICA/IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNOaWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBpbnRlcmNlcHRvcnMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkSW50ZXJjZXB0b3JEZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGluc3RhbmNlLmludGVyY2VwdC5jYWxsKGluc3RhbmNlLCBleGVjdXRpb25Db250ZXh0LCBjYWxsSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgdmFsdWU6IHVua25vd24sXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIGFyZ3VtZW50TWV0YWRhdGE6IEFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgIGNvbnRhaW5lcjogTW9kdWxlQ29udGFpbmVyLFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihwaXBlKSA/IGNvbnRhaW5lci5nZXQocGlwZSkgOiBpc09iamVjdChwaXBlKSA/IHBpcGUgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggcGlwZXMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUGlwZURlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoaW5zdGFuY2UudHJhbnNmb3JtLmNhbGwoaW5zdGFuY2UsIHZhbHVlLCBhcmd1bWVudE1ldGFkYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0QmFzZSB9IGZyb20gJy4uL3BpcGVsaW5lJztcbmltcG9ydCB0eXBlIHsgRXZlbnRNZXRhZGF0YSwgUlBDTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUGlwZWxpbmVIYW5kbGVyIH0gZnJvbSAnLi9waXBlbGluZS5oYW5kbGVyJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEFQUF9FTlZJUk9NRU5UIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXJGbG93SGFuZGxlciB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJpdmF0ZSByZWFkb25seSBhcHBFbnY6IEFwcEVudmlyb21lbnQ7XG4gICAgQGluamVjdChQaXBlbGluZUhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcGlwZWxpbmVIYW5kbGVyOiBQaXBlbGluZUhhbmRsZXI7XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlQXJncyhcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dDogRXhlY3V0aW9uQ29udGV4dEJhc2UsXG4gICAgICAgIG1ldGFkYXRhOiBSUENNZXRhZGF0YSB8IEV2ZW50TWV0YWRhdGEsXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIHBsYXllcj86IFBsYXllck1wLFxuICAgICkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBtZXRhZGF0YS5wYXJhbXMubWFwKGFzeW5jIChwYXJhbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3VtZW50TWV0YWRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHBhcmFtLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHBhcmFtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG1ldGF0eXBlOiBwYXJhbS5tZXRhdHlwZSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09ICdib2R5Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyBCb2R5XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaFBpcGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5yZXF1ZXN0LmJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdwYXJhbScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyYW1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChleGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaFBpcGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgKDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj5leGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keSlbcGFyYW0uZGF0YV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdpbmRleCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keVtwYXJhbS5kYXRhXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ3JlcXVlc3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRpb25Db250ZXh0LnJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBDdXN0b21cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5mYWN0b3J5KHBhcmFtLmRhdGEsIGV4ZWN1dGlvbkNvbnRleHQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgWy4uLnBpcGVzLCAuLi4ocGFyYW0/LnBpcGVzID8/IFtdKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAncGxheWVyJyAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGxheWVyIChTZXJ2ZXIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaFBpcGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGF0YSA/IHBsYXllciFbPGtleW9mIFBsYXllck1wPnBhcmFtLmRhdGFdIDogcGxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgWy4uLnBpcGVzLCAuLi4ocGFyYW0/LnBpcGVzID8/IFtdKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgR3VhcmQsIEludGVyY2VwdG9yLCBFcnJvckZpbHRlciwgVGltZXJNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyTWV0YWRhdGEsIEV2ZW50TWV0YWRhdGEsIE1ldGhvZFBhcmFtZXRlciwgUlBDTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFwcEVudmlyb21lbnQsIENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEFQUF9FTlZJUk9NRU5UIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcml2YXRlIHJlYWRvbmx5IGFwcEVudjogQXBwRW52aXJvbWVudDtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVhZChjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID1cbiAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGE8UGljazxDb250cm9sbGVyTWV0YWRhdGEsICdwcmVmaXgnPj4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXIsIGNsYXNzUmVmKSA/P1xuICAgICAgICAgICAgPFBpY2s8Q29udHJvbGxlck1ldGFkYXRhLCAncHJlZml4Jz4+e307XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKGNsYXNzUmVmKTtcbiAgICAgICAgY29uc3QgcnBjcyA9IHRoaXMuZ2V0UlBDcyhjbGFzc1JlZik7XG4gICAgICAgIGNvbnN0IHRpbWVycyA9IHRoaXMuZ2V0VGltZXJzKGNsYXNzUmVmKTtcblxuICAgICAgICByZXR1cm4gPENvbnRyb2xsZXJNZXRhZGF0YT57XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgY2xhc3NSZWYsXG4gICAgICAgICAgICBldmVudHMsXG4gICAgICAgICAgICBycGNzLFxuICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiksXG4gICAgICAgICAgICB0aW1lcnMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFdmVudHMoY2xhc3NSZWY6IE5ld2FibGUpIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxFdmVudE1ldGFkYXRhW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyRXZlbnRzLCBjbGFzc1JlZi5wcm90b3R5cGUpID8/IFtdO1xuXG4gICAgICAgIHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxFdmVudE1ldGFkYXRhPntcbiAgICAgICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0TWV0aG9kUGFyYW1zKGNsYXNzUmVmLCBldmVudCksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiwgZXZlbnQubWV0aG9kKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UlBDcyhjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICBjb25zdCBycGNzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxSUENNZXRhZGF0YVtdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclJQQ3MsIGNsYXNzUmVmLnByb3RvdHlwZSkgPz8gW107XG5cbiAgICAgICAgcmV0dXJuIHJwY3MubWFwKChycGMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8UlBDTWV0YWRhdGE+e1xuICAgICAgICAgICAgICAgIC4uLnJwYyxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0TWV0aG9kUGFyYW1zKGNsYXNzUmVmLCBycGMpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0UGlwZWxpbmUoY2xhc3NSZWYsIHJwYy5tZXRob2QpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNZXRob2RQYXJhbXMoY2xhc3NSZWY6IE5ld2FibGUsIG1ldGFkYXRhOiBFdmVudE1ldGFkYXRhIHwgUlBDTWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIGNsYXNzUmVmLnByb3RvdHlwZSwgbWV0YWRhdGEubWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBwYXJhbXMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICBwYXJhbXMuZm9yRWFjaCgocGFyYW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyYW0uaW5kZXggIT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUGFyYW1ldGVyRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAobWV0YWRhdGEudHlwZSA9PT0gJ29uJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25QbGF5ZXInIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbkludGVybmFsJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25TZXJ2ZXInIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbldlYlZpZXcnIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZVBsYXllcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VJbnRlcm5hbCcgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VTZXJ2ZXInIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlV2ViVmlldycpICYmXG4gICAgICAgICAgICAgICAgcGFyYW0udHlwZSA9PT0gJ3Jlc3BvbnNlJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzcG9uc2VcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ3BsYXllcicgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gUGxheWVyIChDbGllbnQpIC0gTm90IGFsbG93ZWRcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlBsYXllckRlY29yYXRvck5vdEFsbG93ZWRPbkNsaWVudEV2ZW50cyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnR5cGUgPT09ICdvblBsYXllclJlcXVlc3QnICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LkNsaWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDTm90QWxsb3dlZEluQ2xpZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEudHlwZSA9PT0gJ29uU2VydmVyUmVxdWVzdCcgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENOb3RBbGxvd2VkSW5TZXJ2ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgobWV0YWRhdGEudHlwZSA9PT0gJ29uUGxheWVyJyB8fCBtZXRhZGF0YS50eXBlID09PSAnb25jZVBsYXllcicpICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LkNsaWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROb3RBbGxvd2VkSW5DbGllbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgobWV0YWRhdGEudHlwZSA9PT0gJ29uU2VydmVyJyB8fCBtZXRhZGF0YS50eXBlID09PSAnb25jZVNlcnZlcicpICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROb3RBbGxvd2VkSW5TZXJ2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGlwZWxpbmUodGFyZ2V0OiBOZXdhYmxlIHwgb2JqZWN0LCBtZXRob2Q/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZ3VhcmRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEd1YXJkPltdPihDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxJbnRlcmNlcHRvcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuICAgICAgICBjb25zdCBwaXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxQaXBlPltdPihDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcbiAgICAgICAgY29uc3QgZXJyb3JGaWx0ZXJzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgcmV0dXJuIHsgZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBlcnJvckZpbHRlcnMgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRpbWVycyhjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YTxUaW1lck1ldGFkYXRhW10+KENvcmVNZXRhZGF0YUtleS5UaW1lcnMsIGNsYXNzUmVmLnByb3RvdHlwZSkgPz8gW107XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IsIEludGVybmFsUlBDU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UsIFJQQ19TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFQUF9FTlZJUk9NRU5ULCBFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZLCBNQU5HT19SRVFVRVNUX0ZBQ1RPUlksIE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNBc3luY0Z1bmN0aW9uLCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBQaXBlbGluZUhhbmRsZXIgfSBmcm9tICcuL3BpcGVsaW5lLmhhbmRsZXInO1xuaW1wb3J0IHR5cGUgeyBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCwgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBFeGVjdXRpb25Db250ZXh0QmFzZSwgdHlwZSBNYW5nb1JlcXVlc3RCYXNlLCB0eXBlIE1hbmdvUmVzcG9uc2VCYXNlIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBDYWxsSGFuZGxlciwgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IENvbnRyb2xsZXJGbG93SGFuZGxlciB9IGZyb20gJy4vY29udHJvbGxlci1mbG93LmhhbmRsZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlclJQQ0hhbmRsZXIge1xuICAgIEBpbmplY3QoQVBQX0VOVklST01FTlQpIHByaXZhdGUgcmVhZG9ubHkgYXBwRW52OiBBcHBFbnZpcm9tZW50O1xuICAgIEBpbmplY3QoUlBDX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgcnBjU2VydmljZTogSW50ZXJuYWxSUENTZXJ2aWNlO1xuICAgIEBpbmplY3QoUGlwZWxpbmVIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lSGFuZGxlcjogUGlwZWxpbmVIYW5kbGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlckZsb3dIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xsZXJGbG93SGFuZGxlcjogQ29udHJvbGxlckZsb3dIYW5kbGVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAaW5qZWN0KE1BTkdPX1JFUVVFU1RfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVNYW5nb1JlcXVlc3Q6IChkYXRhOiB1bmtub3duLCBwbGF5ZXI/OiBQbGF5ZXJNcCkgPT4gTWFuZ29SZXF1ZXN0QmFzZTtcbiAgICBAaW5qZWN0KE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlTWFuZ29SZXNwb25zZTogKCkgPT4gTWFuZ29SZXNwb25zZUJhc2U7XG4gICAgQGluamVjdChFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQ6IChcbiAgICAgICAgdHlwZTogRXhlY3V0aW9uQ29udGV4dFR5cGUsXG4gICAgICAgIGNsYXNzUmVmOiBOZXdhYmxlLFxuICAgICAgICBoYW5kbGVyOiBGdW5jdGlvbixcbiAgICAgICAgcmVxdWVzdDogTWFuZ29SZXF1ZXN0QmFzZSxcbiAgICAgICAgcmVzcG9uc2U6IE1hbmdvUmVzcG9uc2VCYXNlLFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgKSA9PiBFeGVjdXRpb25Db250ZXh0QmFzZTtcblxuICAgIHB1YmxpYyBhc3luYyByZWdpc3RlclJQQyhcbiAgICAgICAgZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgbWFwcGVkRXJyb3JGaWx0ZXJzOiBbYW55IHwgJ01BTkdPX0FOWV9FUlJPUicsIE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXJdW10sXG4gICAgICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICAgICAgIHJwYzogUlBDTWV0YWRhdGEsXG4gICAgKSB7XG4gICAgICAgIGlmIChycGMudHlwZSA9PT0gJ29uUmVxdWVzdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJwY1NlcnZpY2VbcnBjLnR5cGVdKHJwYy5uYW1lLCBhc3luYyAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJQQyhndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgcnBjLCBib2R5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJwYy50eXBlID09PSAnb25QbGF5ZXJSZXF1ZXN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjU2VydmljZVtycGMudHlwZV0ocnBjLm5hbWUsIGFzeW5jIChwbGF5ZXIsIGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVSUEMoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIHJwYywgYm9keSwgcGxheWVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJwYy50eXBlID09PSAnb25TZXJ2ZXJSZXF1ZXN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjU2VydmljZVtycGMudHlwZV0ocnBjLm5hbWUsIGFzeW5jIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocnBjLnR5cGUgPT09ICdvbldlYlZpZXdSZXF1ZXN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjU2VydmljZVtycGMudHlwZV0ocnBjLndlYlZpZXdJZCEsIHJwYy5uYW1lLCBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IGFyZ3NbMV0gOiBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYXllciA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IDxQbGF5ZXJNcD5hcmdzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJQQyhndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgcnBjLCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBSUEMuJyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFJQQ1R5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlUlBDKFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgcnBjOiBSUENNZXRhZGF0YSxcbiAgICAgICAgYm9keTogdW5rbm93bixcbiAgICAgICAgcGxheWVyPzogUGxheWVyTXAsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuY3JlYXRlTWFuZ29SZXF1ZXN0KFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyICYmIChycGMudHlwZSA9PT0gJ29uUGxheWVyUmVxdWVzdCcgfHwgcnBjLnR5cGUgPT09ICdvbldlYlZpZXdSZXF1ZXN0JylcbiAgICAgICAgICAgICAgICAgICAgPyBwbGF5ZXJcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmNyZWF0ZU1hbmdvUmVzcG9uc2UoKTtcbiAgICAgICAgICAgIHJlc3BvbnNlLiRvblNlbmQoKGRhdGEpID0+IHJlc29sdmUoZGF0YSkpO1xuICAgICAgICAgICAgcmVzcG9uc2UuJG9uRXJyb3IoKGVycm9yKSA9PiByZXNvbHZlKGVycm9yKSk7XG4gICAgICAgICAgICBjb25zdCBleGVjdXRpb25Db250ZXh0ID0gdGhpcy5jcmVhdGVFeGVjdXRpb25Db250ZXh0KFxuICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHRUeXBlLlJQQyxcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYucHJvdG90eXBlW3JwYy5tZXRob2RdLFxuICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcnBjLm5hbWUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoR3VhcmRzKGV4ZWN1dGlvbkNvbnRleHQsIGd1YXJkcywgY29udHJvbGxlci5vd25lci5jb250YWluZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJGbG93SGFuZGxlci5jcmVhdGVBcmdzKGNvbnRyb2xsZXIsIGV4ZWN1dGlvbkNvbnRleHQsIHJwYywgcGlwZXMsIHBsYXllcik7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbGxlck1ldGhvZCA9IGNvbnRyb2xsZXIuaW5zdGFuY2VbcnBjLm1ldGhvZF0hO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGlzQXN5bmNGdW5jdGlvbihjb250cm9sbGVyTWV0aG9kKVxuICAgICAgICAgICAgICAgICAgICA/IChvcHRpb25zOiB7IHNlbmQ6IGJvb2xlYW4gfSA9IHsgc2VuZDogdHJ1ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRyb2xsZXIuaW5zdGFuY2VbcnBjLm1ldGhvZF0hLmFwcGx5KGNvbnRyb2xsZXIuaW5zdGFuY2UsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZW5kKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogYXN5bmMgKG9wdGlvbnM6IHsgc2VuZDogYm9vbGVhbiB9ID0geyBzZW5kOiB0cnVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udHJvbGxlci5pbnN0YW5jZVtycGMubWV0aG9kXSEuYXBwbHkoY29udHJvbGxlci5pbnN0YW5jZSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbEhhbmRsZXI6IENhbGxIYW5kbGVyID0ge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjogKHZhbHVlOiB1bmtub3duKSA9PiByZXNwb25zZS5zZW5kKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVGhyb3VnaEludGVyY2VwdG9ycyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxIYW5kbGVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNhbGxIYW5kbGVyLmhhbmRsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JHcm91cCA9IG1hcHBlZEVycm9yRmlsdGVycy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoW2Vycm9yVHlwZV0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihlcnJvclR5cGUpICYmIGVycm9yIGluc3RhbmNlb2YgZXJyb3JUeXBlKSB8fCBlcnJvclR5cGUgPT09ICdNQU5HT19BTllfRVJST1InIHx8IGVycm9yID09PSBlcnJvclR5cGUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOaWwoZXJyb3JHcm91cCkpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGlzRnVuY3Rpb24oZXJyb3JHcm91cFsxXSlcbiAgICAgICAgICAgICAgICAgICAgPyBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQoZXJyb3JHcm91cFsxXSlcbiAgICAgICAgICAgICAgICAgICAgOiBpc09iamVjdChlcnJvckdyb3VwWzFdKSAmJiBpc0Z1bmN0aW9uKGVycm9yR3JvdXBbMV1bJ2NhdGNoJ10pXG4gICAgICAgICAgICAgICAgICAgICAgPyBlcnJvckdyb3VwWzFdXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEVycm9yRmlsdGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShpbnN0YW5jZS5jYXRjaC5jYWxsKGluc3RhbmNlLCBlcnJvciwgZXhlY3V0aW9uQ29udGV4dCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJNZXRhZGF0YSwgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZSB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgdHlwZSB7IFNjcmlwdFJQQ0hhbmRsZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXIge1xuICAgIHB1YmxpYyBtZXRhZGF0YTogQ29udHJvbGxlck1ldGFkYXRhO1xuICAgIHB1YmxpYyBpbnN0YW5jZTogeyBba2V5OiBzdHJpbmddOiBGdW5jdGlvbiB9O1xuICAgIHB1YmxpYyBvd25lcjogTW9kdWxlO1xuICAgIHB1YmxpYyBldmVudEhhbmRsZXJzOiBTY3JpcHRFdmVudEhhbmRsZXJbXSA9IFtdO1xuICAgIHB1YmxpYyBycGNIYW5kbGVyczogU2NyaXB0UlBDSGFuZGxlcltdID0gW107XG59XG4iLCAiZXhwb3J0IHR5cGUgRGVjb3JhdG9yID0gQ2xhc3NEZWNvcmF0b3IgfCBNZW1iZXJEZWNvcmF0b3I7XG5leHBvcnQgdHlwZSBNZW1iZXJEZWNvcmF0b3IgPSA8VD4oXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleTogUHJvcGVydHlLZXksXG4gIGRlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPixcbikgPT4gVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8VD4gfCB2b2lkO1xuZXhwb3J0IHR5cGUgTWV0YWRhdGFLZXkgPSBzdHJpbmcgfCBzeW1ib2w7XG5leHBvcnQgdHlwZSBQcm9wZXJ0eUtleSA9IHN0cmluZyB8IHN5bWJvbDtcbmV4cG9ydCB0eXBlIFRhcmdldCA9IG9iamVjdCB8IEZ1bmN0aW9uO1xuXG5jb25zdCBNZXRhZGF0YSA9IG5ldyBXZWFrTWFwKCk7XG5cbmZ1bmN0aW9uIGRlY29yYXRlUHJvcGVydHkoXG4gIGRlY29yYXRvcnM6IE1lbWJlckRlY29yYXRvcltdLFxuICB0YXJnZXQ6IFRhcmdldCxcbiAgcHJvcGVydHlLZXk6IFByb3BlcnR5S2V5LFxuICBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yLFxuKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkIHtcbiAgZGVjb3JhdG9ycy5yZXZlcnNlKCkuZm9yRWFjaCgoZGVjb3JhdG9yOiBNZW1iZXJEZWNvcmF0b3IpID0+IHtcbiAgICBkZXNjcmlwdG9yID0gZGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHx8IGRlc2NyaXB0b3I7XG4gIH0pO1xuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGVDb25zdHJ1Y3RvcihcbiAgZGVjb3JhdG9yczogQ2xhc3NEZWNvcmF0b3JbXSxcbiAgdGFyZ2V0OiBGdW5jdGlvbixcbik6IEZ1bmN0aW9uIHtcbiAgZGVjb3JhdG9ycy5yZXZlcnNlKCkuZm9yRWFjaCgoZGVjb3JhdG9yOiBDbGFzc0RlY29yYXRvcikgPT4ge1xuICAgIGNvbnN0IGRlY29yYXRlZCA9IGRlY29yYXRvcih0YXJnZXQpO1xuICAgIGlmIChkZWNvcmF0ZWQpIHtcbiAgICAgIHRhcmdldCA9IGRlY29yYXRlZDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGUoXG4gIGRlY29yYXRvcnM6IENsYXNzRGVjb3JhdG9yW10sXG4gIHRhcmdldDogRnVuY3Rpb24sXG4pOiBGdW5jdGlvbjtcbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZShcbiAgZGVjb3JhdG9yczogTWVtYmVyRGVjb3JhdG9yW10sXG4gIHRhcmdldDogb2JqZWN0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuICBhdHRyaWJ1dGVzPzogUHJvcGVydHlEZXNjcmlwdG9yLFxuKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlKFxuICBkZWNvcmF0b3JzOiBEZWNvcmF0b3JbXSxcbiAgdGFyZ2V0OiBUYXJnZXQsXG4gIHByb3BlcnR5S2V5PzogUHJvcGVydHlLZXksXG4gIGF0dHJpYnV0ZXM/OiBQcm9wZXJ0eURlc2NyaXB0b3IsXG4pOiBGdW5jdGlvbiB8IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShkZWNvcmF0b3JzKSB8fCBkZWNvcmF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRlY29yYXRlUHJvcGVydHkoXG4gICAgICBkZWNvcmF0b3JzIGFzIE1lbWJlckRlY29yYXRvcltdLFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXksXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICk7XG4gIH1cblxuICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBkZWNvcmF0ZUNvbnN0cnVjdG9yKGRlY29yYXRvcnMgYXMgQ2xhc3NEZWNvcmF0b3JbXSwgdGFyZ2V0KTtcbiAgfVxuXG4gIHJldHVybjtcbn1cblxuZnVuY3Rpb24gZ2V0TWV0YWRhdGFNYXA8TWV0YWRhdGFWYWx1ZT4oXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWFwPE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBNZXRhZGF0YS5nZXQodGFyZ2V0KSAmJiBNZXRhZGF0YS5nZXQodGFyZ2V0KS5nZXQocHJvcGVydHlLZXkpO1xufVxuXG5mdW5jdGlvbiBvcmRpbmFyeUdldE93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICBtZXRhZGF0YUtleTogTWV0YWRhdGFLZXksXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWV0YWRhdGFWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcbiAgfVxuICBjb25zdCBtZXRhZGF0YU1hcCA9IGdldE1ldGFkYXRhTWFwPE1ldGFkYXRhVmFsdWU+KHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgJiYgbWV0YWRhdGFNYXAuZ2V0KG1ldGFkYXRhS2V5KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTWV0YWRhdGFNYXA8TWV0YWRhdGFWYWx1ZT4oXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWFwPE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlPiB7XG4gIGNvbnN0IHRhcmdldE1ldGFkYXRhID1cbiAgICBNZXRhZGF0YS5nZXQodGFyZ2V0KSB8fFxuICAgIG5ldyBNYXA8UHJvcGVydHlLZXkgfCB1bmRlZmluZWQsIE1hcDxNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZT4+KCk7XG4gIE1ldGFkYXRhLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhKTtcbiAgY29uc3QgbWV0YWRhdGFNYXAgPVxuICAgIHRhcmdldE1ldGFkYXRhLmdldChwcm9wZXJ0eUtleSkgfHwgbmV3IE1hcDxNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZT4oKTtcbiAgdGFyZ2V0TWV0YWRhdGEuc2V0KHByb3BlcnR5S2V5LCBtZXRhZGF0YU1hcCk7XG4gIHJldHVybiBtZXRhZGF0YU1hcDtcbn1cblxuZnVuY3Rpb24gb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YTxNZXRhZGF0YVZhbHVlPihcbiAgbWV0YWRhdGFLZXk6IE1ldGFkYXRhS2V5LFxuICBtZXRhZGF0YVZhbHVlOiBNZXRhZGF0YVZhbHVlLFxuICB0YXJnZXQ6IFRhcmdldCxcbiAgcHJvcGVydHlLZXk/OiBQcm9wZXJ0eUtleSxcbik6IHZvaWQge1xuICBpZiAocHJvcGVydHlLZXkgJiYgIVsnc3RyaW5nJywgJ3N5bWJvbCddLmluY2x1ZGVzKHR5cGVvZiBwcm9wZXJ0eUtleSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gIH1cblxuICAoXG4gICAgZ2V0TWV0YWRhdGFNYXA8TWV0YWRhdGFWYWx1ZT4odGFyZ2V0LCBwcm9wZXJ0eUtleSkgfHxcbiAgICBjcmVhdGVNZXRhZGF0YU1hcDxNZXRhZGF0YVZhbHVlPih0YXJnZXQsIHByb3BlcnR5S2V5KVxuICApLnNldChtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG9yZGluYXJ5R2V0TWV0YWRhdGE8TWV0YWRhdGFWYWx1ZT4oXG4gIG1ldGFkYXRhS2V5OiBNZXRhZGF0YUtleSxcbiAgdGFyZ2V0OiBUYXJnZXQsXG4gIHByb3BlcnR5S2V5PzogUHJvcGVydHlLZXksXG4pOiBNZXRhZGF0YVZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGE8TWV0YWRhdGFWYWx1ZT4obWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpXG4gICAgPyBvcmRpbmFyeUdldE93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KVxuICAgIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbiAgICA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoXG4gICAgICAgIG1ldGFkYXRhS2V5LFxuICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSxcbiAgICAgICAgcHJvcGVydHlLZXksXG4gICAgICApXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRhZGF0YTxNZXRhZGF0YVZhbHVlPihcbiAgbWV0YWRhdGFLZXk6IE1ldGFkYXRhS2V5LFxuICBtZXRhZGF0YVZhbHVlOiBNZXRhZGF0YVZhbHVlLFxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0OiBUYXJnZXQsIHByb3BlcnR5S2V5PzogUHJvcGVydHlLZXkpOiB2b2lkIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICAgICAgbWV0YWRhdGFLZXksXG4gICAgICBtZXRhZGF0YVZhbHVlLFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXksXG4gICAgKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICBtZXRhZGF0YUtleTogTWV0YWRhdGFLZXksXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWV0YWRhdGFWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICBtZXRhZGF0YUtleTogTWV0YWRhdGFLZXksXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogTWV0YWRhdGFWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhPE1ldGFkYXRhVmFsdWU+KFxuICAgIG1ldGFkYXRhS2V5LFxuICAgIHRhcmdldCxcbiAgICBwcm9wZXJ0eUtleSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKFxuICBtZXRhZGF0YUtleTogTWV0YWRhdGFLZXksXG4gIHRhcmdldDogVGFyZ2V0LFxuICBwcm9wZXJ0eUtleT86IFByb3BlcnR5S2V5LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIW9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTWV0YWRhdGEoXG4gIG1ldGFkYXRhS2V5OiBNZXRhZGF0YUtleSxcbiAgdGFyZ2V0OiBUYXJnZXQsXG4gIHByb3BlcnR5S2V5PzogUHJvcGVydHlLZXksXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YTxNZXRhZGF0YVZhbHVlPihcbiAgbWV0YWRhdGFLZXk6IE1ldGFkYXRhS2V5LFxuICBtZXRhZGF0YVZhbHVlOiBNZXRhZGF0YVZhbHVlLFxuICB0YXJnZXQ6IFRhcmdldCxcbiAgcHJvcGVydHlLZXk/OiBQcm9wZXJ0eUtleSxcbik6IHZvaWQge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbn1cblxuZXhwb3J0IGNvbnN0IFJlZmxlY3Rpb24gPSB7XG4gIGRlY29yYXRlLFxuICBkZWZpbmVNZXRhZGF0YSxcbiAgZ2V0TWV0YWRhdGEsXG4gIGdldE93bk1ldGFkYXRhLFxuICBoYXNNZXRhZGF0YSxcbiAgaGFzT3duTWV0YWRhdGEsXG4gIG1ldGFkYXRhLFxufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICBuYW1lc3BhY2UgUmVmbGVjdCB7XG4gICAgbGV0IGRlY29yYXRlOiB0eXBlb2YgUmVmbGVjdGlvbi5kZWNvcmF0ZTtcbiAgICBsZXQgZGVmaW5lTWV0YWRhdGE6IHR5cGVvZiBSZWZsZWN0aW9uLmRlZmluZU1ldGFkYXRhO1xuICAgIGxldCBnZXRNZXRhZGF0YTogdHlwZW9mIFJlZmxlY3Rpb24uZ2V0TWV0YWRhdGE7XG4gICAgbGV0IGdldE93bk1ldGFkYXRhOiB0eXBlb2YgUmVmbGVjdGlvbi5nZXRPd25NZXRhZGF0YTtcbiAgICBsZXQgaGFzT3duTWV0YWRhdGE6IHR5cGVvZiBSZWZsZWN0aW9uLmhhc093bk1ldGFkYXRhO1xuICAgIGxldCBoYXNNZXRhZGF0YTogdHlwZW9mIFJlZmxlY3Rpb24uaGFzTWV0YWRhdGE7XG4gICAgbGV0IG1ldGFkYXRhOiB0eXBlb2YgUmVmbGVjdGlvbi5tZXRhZGF0YTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFJlZmxlY3QsIFJlZmxlY3Rpb24pO1xuIiwgImltcG9ydCAnQGFicmFoYW0vcmVmbGVjdGlvbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmVmbGVjdG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90aW1lci5zZXJ2aWNlJztcbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IFNldE1ldGFkYXRhIH0gZnJvbSAnLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZURlY29yYXRvck9wdGlvbnMsIENyZWF0ZURlY29yYXRvcldpdGhUcmFuc2Zvcm1PcHRpb25zLCBSZWZsZWN0YWJsZURlY29yYXRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21JZCwgaXNFbXB0eSwgaXNPYmplY3QgfSBmcm9tICcuLi91dGlscyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZWZsZWN0b3JTZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ2V0PFRSZXN1bHQgPSB1bmtub3duLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihtZXRhZGF0YUtleTogVEtleSwgdGFyZ2V0OiBOZXdhYmxlIHwgRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGE8VFJlc3VsdD4obWV0YWRhdGFLZXksIHRhcmdldCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbDxUUmVzdWx0IGV4dGVuZHMgdW5rbm93bltdID0gdW5rbm93bltdLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihcbiAgICAgICAgbWV0YWRhdGFLZXk6IFRLZXksXG4gICAgICAgIHRhcmdldHM6IChOZXdhYmxlIHwgRnVuY3Rpb24pW10sXG4gICAgKSB7XG4gICAgICAgIHJldHVybiA8VFJlc3VsdD4odGFyZ2V0cyB8fCBbXSkubWFwKCh0YXJnZXQpID0+IHRoaXMuZ2V0KG1ldGFkYXRhS2V5LCB0YXJnZXQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsQW5kTWVyZ2U8VFJlc3VsdCBleHRlbmRzIHVua25vd25bXSA9IHVua25vd25bXSwgVEtleSBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCA9IHN0cmluZz4oXG4gICAgICAgIG1ldGFkYXRhS2V5OiBUS2V5LFxuICAgICAgICB0YXJnZXRzOiAoTmV3YWJsZSB8IEZ1bmN0aW9uKVtdLFxuICAgICkge1xuICAgICAgICBjb25zdCBtZXRhZGF0YUNvbGxlY3Rpb24gPSB0aGlzLmdldEFsbDxUUmVzdWx0LCBUS2V5PihtZXRhZGF0YUtleSwgdGFyZ2V0cykuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmIChpc0VtcHR5KG1ldGFkYXRhQ29sbGVjdGlvbikpIHJldHVybiA8VFJlc3VsdD5tZXRhZGF0YUNvbGxlY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIDxUUmVzdWx0Pm1ldGFkYXRhQ29sbGVjdGlvbi5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGEpICYmIGlzT2JqZWN0KGIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFthLCBiXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEFuZE92ZXJyaWRlPFRSZXN1bHQgPSB1bmtub3duLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihtZXRhZGF0YUtleTogVEtleSwgdGFyZ2V0czogKE5ld2FibGUgfCBGdW5jdGlvbilbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldChtZXRhZGF0YUtleSwgdGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIDxUUmVzdWx0PnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRGVjb3JhdG9yPFRQYXJhbT4ob3B0aW9ucz86IENyZWF0ZURlY29yYXRvck9wdGlvbnM8VFBhcmFtPik6IFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbT47XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+KFxuICAgICAgICBvcHRpb25zOiBDcmVhdGVEZWNvcmF0b3JXaXRoVHJhbnNmb3JtT3B0aW9uczxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4sXG4gICAgKTogUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+O1xuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkID0gVFBhcmFtPihcbiAgICAgICAgb3B0aW9uczogQ3JlYXRlRGVjb3JhdG9yT3B0aW9uczxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4gPSB7fSxcbiAgICApOiBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YUtleSA9IG9wdGlvbnMua2V5ID8/IGdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICAgICAgY29uc3QgZGVjb3JhdG9yRm4gPSAobWV0YWRhdGFWYWx1ZTogVFBhcmFtKSA9PiAodGFyZ2V0OiBvYmplY3QgfCBGdW5jdGlvbiwga2V5Pzogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudHJhbnNmb3JtID8gb3B0aW9ucy50cmFuc2Zvcm0obWV0YWRhdGFWYWx1ZSkgOiBtZXRhZGF0YVZhbHVlO1xuICAgICAgICAgICAgU2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHZhbHVlID8/IHt9KSh0YXJnZXQsIGtleSEsIGRlc2NyaXB0b3IpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRlY29yYXRvckZuLktFWSA9IG1ldGFkYXRhS2V5O1xuICAgICAgICByZXR1cm4gZGVjb3JhdG9yRm4gYXMgUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQ+O1xuICAgIH1cbn1cbiIsICJpbXBvcnQgJ0BhYnJhaGFtL3JlZmxlY3Rpb24nO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXJhbXMnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL3JwYyc7XG5leHBvcnQgKiBmcm9tICcuL3RpbWVycyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vYXBwbHktZGVjb3JhdG9yLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlLXBhcmFtLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtcnBjLWRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2ZvcndhcmQtcmVmLnV0aWwnO1xuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZXI8VCBleHRlbmRzIE5ld2FibGU+KG9wdGlvbnM/OiBDb250cm9sbGVyT3B0aW9ucykge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlciwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEdsb2JhbDxUIGV4dGVuZHMgTmV3YWJsZT4oKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuR2xvYmFsTW9kdWxlLCB0cnVlLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEluamVjdDxUID0gdW5rbm93bj4oa2V5PzogSW5qZWN0aW9uVG9rZW48VD4pIHtcbiAgICByZXR1cm4gPFByb3BlcnR5RGVjb3JhdG9yICYgUGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHBhcmFtSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChrZXkpICYmICF2YWxpZGF0ZUluamVjdGlvblRva2VuKGtleSkudmFsaWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEluamVjdGlvblRva2VuU3BlY2lmaWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRva2VuID0ga2V5ID8/IFJlZmxlY3QuZ2V0TWV0YWRhdGE8SW5qZWN0aW9uVG9rZW4+KCdkZXNpZ246dHlwZScsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkluamVjdGlvblRva2VuTm90Rm91bmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5qZWN0KHRva2VuKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBwYXJhbUluZGV4KTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0YWJsZTxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IEluamVjdGFibGVPcHRpb25zKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkluamVjdGFibGUsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YShvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIE1vZHVsZTxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IE1vZHVsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVNb2R1bGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IhKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCB2YWx1ZSwgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZSgpKHRhcmdldCk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBvcHRpb25hbCB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPcHRpb25hbCgpIHtcbiAgICByZXR1cm4gPFByb3BlcnR5RGVjb3JhdG9yICYgUGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHBhcmFtSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKCkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgcGFyYW1JbmRleCk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDdXN0b21EZWNvcmF0b3IgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTZXRNZXRhZGF0YTxLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBWID0gdW5rbm93bj4oa2V5OiBLLCB2YWx1ZTogVikge1xuICAgIGNvbnN0IGRlY29yYXRvckZhY3RvcnkgPSA8Q3VzdG9tRGVjb3JhdG9yPigodGFyZ2V0OiBvYmplY3QsIF9tZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoa2V5LCB2YWx1ZSwgZGVzY3JpcHRvci52YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKGtleSwgdmFsdWUsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG4gICAgZGVjb3JhdG9yRmFjdG9yeS5LRVkgPSBrZXk7XG4gICAgcmV0dXJuIGRlY29yYXRvckZhY3Rvcnk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIENhdGNoPFQgZXh0ZW5kcyBOZXdhYmxlPiguLi5leGNlcHRpb25zOiB1bmtub3duW10pIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IGV4Y2VwdGlvbnMuZmlsdGVyKChleGNlcHRpb24sIGluZGV4KSA9PiBleGNlcHRpb25zLmluZGV4T2YoZXhjZXB0aW9uKSAhPT0gaW5kZXgpO1xuICAgICAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5DYXRjaCwgZXhjZXB0aW9ucywgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlRXJyb3JGaWx0ZXIgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGaWx0ZXJzOiAoTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlRXJyb3JGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRGaWx0ZXJzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kRmlsdGVycyA9XG4gICAgICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBpZiAoIWlzTmlsKG1ldGhvZEZpbHRlcnMuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXJzLmluY2x1ZGVzKGZpbHRlcikpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRXJyb3JGaWx0ZXJEZXRlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIFsuLi52YWxpZGF0ZWRGaWx0ZXJzLCAuLi5tZXRob2RGaWx0ZXJzXSwgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzRmlsdGVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxFcnJvckZpbHRlcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgaWYgKCFpc05pbChjbGFzc0ZpbHRlcnMuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXJzLmluY2x1ZGVzKGZpbHRlcikpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIFsuLi52YWxpZGF0ZWRGaWx0ZXJzLCAuLi5jbGFzc0ZpbHRlcnNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCAnQGFicmFoYW0vcmVmbGVjdGlvbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJvbGxlcic7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL21vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL21vZHVsZS10cmVlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbXVsdGlwbGF5ZXInO1xuLy8gQXBwXG5leHBvcnQgKiBmcm9tICcuL2FwcC1idWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlLWFwcCc7XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRU5BQkxFX1NIVVRET1dOX0hPT0tTLCBHTE9CQUxfRVJST1JfRklMVEVSUywgR0xPQkFMX0dVQVJEUywgR0xPQkFMX0lOVEVSQ0VQVE9SUywgR0xPQkFMX1BJUEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTW9kdWxlIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgQ29udHJvbGxlckV2ZW50SGFuZGxlciwgQ29udHJvbGxlclJQQ0hhbmRsZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFLCBUSU1FUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTG9nZ2VyU2VydmljZSwgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBUcmVlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBSdW50aW1lIHtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJFdmVudEhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRIYW5kbGVyOiBDb250cm9sbGVyRXZlbnRIYW5kbGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlclJQQ0hhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcnBjSGFuZGxlcjogQ29udHJvbGxlclJQQ0hhbmRsZXI7XG4gICAgQGluamVjdChHTE9CQUxfR1VBUkRTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW107XG4gICAgQGluamVjdChHTE9CQUxfSU5URVJDRVBUT1JTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW107XG4gICAgQGluamVjdChHTE9CQUxfUElQRVMpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXTtcbiAgICBAaW5qZWN0KEdMT0JBTF9FUlJPUl9GSUxURVJTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW107XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoRU5BQkxFX1NIVVRET1dOX0hPT0tTKSBAb3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZVNodXRkb3duSG9va3M6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgYXN5bmMgYm9vdChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgbW9kdWxlLCBjb250cm9sbGVycyBhbmQgcHJvdmlkZXJzLlxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5pbnN0YW5jZSA9IG1vZHVsZS5jb250YWluZXIuZ2V0PHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT4obW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmKTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChjb250cm9sbGVyKSA9PiAoY29udHJvbGxlci5pbnN0YW5jZSA9IG1vZHVsZS5jb250YWluZXIuZ2V0PHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT4oY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZikpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10uZm9yRWFjaCgoW3Rva2VuXSkgPT5cbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmdldDxhbnk+KHRva2VuKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExvZyBtb2R1bGUgbG9hZGVkLlxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fk1vZHVsZSB+bGJ+JHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gfmx3fmxvYWRlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kKG1vZHVsZSwgJ29uTW9kdWxlSW5pdCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uTW9kdWxlSW5pdCcpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1bkxpZmVjeWNsZU1ldGhvZHMocmVzb2x2ZWRUcmVlLCAnb25BcHBCb290c3RyYXAnKTtcblxuICAgICAgICAvLyBSZWdpc3RlciBldmVudCBhbmQgcnBjIGxpc3RlbmVycy5cbiAgICAgICAgcmVzb2x2ZWRUcmVlLnRyYXZlcnNlKChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBub2RlLnZhbHVlO1xuICAgICAgICAgICAgbW9kdWxlLmNvbnRyb2xsZXJzLmZvckVhY2goKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVGltZXJzKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYH5sd35Db250cm9sbGVyIH5sY34ke2NvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gfmx3fnRpbWVycyBhbmQgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2h1dGRvd24ocmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4pIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2h1dGRvd25Ib29rcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uTW9kdWxlRGVzdHJveScpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ2JlZm9yZUFwcFNodXRkb3duJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZXJTZXJ2aWNlID0gY29udHJvbGxlci5vd25lci5jb250YWluZXIuZ2V0PFRpbWVyU2VydmljZT4oVElNRVJfU0VSVklDRSk7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXN0cm95IGFsbCB0aW1lcnMuXG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmV2ZXJ5dGlja3MuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmludGVydmFscy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UudGltZW91dHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyb25zLmZvckVhY2goKGNyb24pID0+IGNyb24uc3RvcCgpKTtcblxuICAgICAgICAgICAgICAgIC8vIERlc3Ryb3kgYWxsIHNjcmlwdCBldmVudCBoYW5kbGVycy5cbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLmV2ZW50SGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIucnBjSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIC8vIERlc3Ryb3kgYWxsIHRpbWVycy5cbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UuZXZlcnl0aWNrcy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UuaW50ZXJ2YWxzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLnRpbWVyU2VydmljZS50aW1lb3V0cy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UuY3JvbkpvYnMuZm9yRWFjaCgoY3JvbkpvYikgPT4gY3JvbkpvYi5zdG9wKCkpO1xuXG4gICAgICAgIC8vIC8vIERlc3Ryb3kgYWxsIHNjcmlwdCBldmVudCBoYW5kbGVycy5cbiAgICAgICAgLy8gdGhpcy5ldmVudFNlcnZpY2UuJGxvY2FsSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLmV2ZW50U2VydmljZS4kaW50ZXJuYWxIYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiBoYW5kbGVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMuZXZlbnRTZXJ2aWNlLiRyZW1vdGVIYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiBoYW5kbGVyLmRlc3Ryb3koKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2h1dGRvd25Ib29rcykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uQXBwU2h1dGRvd24nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJMaXN0ZW5lcnMoY29udHJvbGxlcjogQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBjb250cm9sbGVyLm93bmVyO1xuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3VhcmRzID0gWy4uLnRoaXMuZ2xvYmFsR3VhcmRzLCAuLi5tb2R1bGUubWV0YWRhdGEuZ3VhcmRzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmd1YXJkcywgLi4uZXZlbnQuZ3VhcmRzXTtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmV2ZW50LmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBwaXBlcyA9IFsuLi50aGlzLmdsb2JhbFBpcGVzLCAuLi5tb2R1bGUubWV0YWRhdGEucGlwZXMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEucGlwZXMsIC4uLmV2ZW50LnBpcGVzXTtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBlZEVycm9yRmlsdGVycyA9IHRoaXMubWFwRXJyb3JGaWx0ZXJzKFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuZXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuZXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLmV2ZW50LmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5ldmVudEhhbmRsZXIucmVnaXN0ZXJFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQpO1xuICAgICAgICAgICAgY29udHJvbGxlci5ldmVudEhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEucnBjcy5mb3JFYWNoKGFzeW5jIChycGMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IFsuLi50aGlzLmdsb2JhbEd1YXJkcywgLi4ubW9kdWxlLm1ldGFkYXRhLmd1YXJkcywgLi4uY29udHJvbGxlci5tZXRhZGF0YS5ndWFyZHMsIC4uLnJwYy5ndWFyZHNdO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JzID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2xvYmFsSW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLm1vZHVsZS5tZXRhZGF0YS5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4uY29udHJvbGxlci5tZXRhZGF0YS5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4ucnBjLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBwaXBlcyA9IFsuLi50aGlzLmdsb2JhbFBpcGVzLCAuLi5tb2R1bGUubWV0YWRhdGEucGlwZXMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEucGlwZXMsIC4uLnJwYy5waXBlc107XG4gICAgICAgICAgICBjb25zdCBtYXBwZWRFcnJvckZpbHRlcnMgPSB0aGlzLm1hcEVycm9yRmlsdGVycyhbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxFcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5ycGMuZXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCB0aGlzLnJwY0hhbmRsZXIucmVnaXN0ZXJSUEMoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIHJwYyk7XG4gICAgICAgICAgICBjb250cm9sbGVyLnJwY0hhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclRpbWVycyhjb250cm9sbGVyOiBDb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyU2VydmljZSA9IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldDxUaW1lclNlcnZpY2U+KFRJTUVSX1NFUlZJQ0UpO1xuXG4gICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEudGltZXJzLmZvckVhY2goKHRpbWVyKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZXIudHlwZSA9PT0gJ2Nyb24nKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUNyb25Kb2IoY29udHJvbGxlci5pbnN0YW5jZVt0aW1lci5tZXRob2RdIS5iaW5kKGNvbnRyb2xsZXIuaW5zdGFuY2UpLCB0aW1lci5vcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZXIudHlwZSA9PT0gJ2V2ZXJ5dGljaycpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlRXZlcnlUaWNrKGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIubmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICdpbnRlcnZhbCcpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlSW50ZXJ2YWwoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSxcbiAgICAgICAgICAgICAgICAgICAgdGltZXIub3B0aW9ucy50aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICB0aW1lci5uYW1lLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICd0aW1lb3V0Jykge1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcmVhdGVUaW1lb3V0KGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIub3B0aW9ucy50aW1lb3V0LCB0aW1lci5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBFcnJvckZpbHRlcnMoZXJyb3JGaWx0ZXJzOiAoTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcilbXSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJNYXA6IFt1bmtub3duIHwgJ01BTkdPX0FOWV9FUlJPUicsIE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXJdW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBlcnJvckZpbHRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8YW55W10+KENvcmVNZXRhZGF0YUtleS5DYXRjaCwgZmlsdGVyKSA/PyBbXTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goJ01BTkdPX0FOWV9FUlJPUicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmlsKGZpbHRlck1hcC5maW5kKChmaWx0ZXJFcnJvcikgPT4gZmlsdGVyRXJyb3JbMF0gPT09IGVycm9yKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gbWFwIGVycm9yIGZpbHRlcnMuJyk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXJyb3JBbHJlYWR5SGFuZGxlZEJ5RmlsdGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlsdGVyTWFwLnB1c2goW2Vycm9yLCBmaWx0ZXJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWx0ZXJNYXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5MaWZlY3ljbGVNZXRob2RzKFxuICAgICAgICByZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPixcbiAgICAgICAgbWV0aG9kOiAnb25Nb2R1bGVJbml0JyB8ICdvbk1vZHVsZURlc3Ryb3knIHwgJ29uQXBwQm9vdHN0cmFwJyB8ICdiZWZvcmVBcHBTaHV0ZG93bicgfCAnb25BcHBTaHV0ZG93bicsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4gYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2Qobm9kZS52YWx1ZSwgbWV0aG9kKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5MaWZlY3ljbGVNZXRob2QoXG4gICAgICAgIG1vZHVsZTogTW9kdWxlLFxuICAgICAgICBtZXRob2Q6ICdvbk1vZHVsZUluaXQnIHwgJ29uTW9kdWxlRGVzdHJveScgfCAnb25BcHBCb290c3RyYXAnIHwgJ2JlZm9yZUFwcFNodXRkb3duJyB8ICdvbkFwcFNodXRkb3duJyxcbiAgICApIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMubWFwKGFzeW5jIChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChjb250cm9sbGVyLmluc3RhbmNlKSB8fCBpc05pbChjb250cm9sbGVyLmluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbGxlci5pbnN0YW5jZVttZXRob2RdISgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgWy4uLm1vZHVsZS5tZXRhZGF0YS5pbnRlcm5hbFByb3ZpZGVycywgLi4ubW9kdWxlLm1ldGFkYXRhLmV4dGVybmFsUHJvdmlkZXJzXS5tYXAoYXN5bmMgKFt0b2tlbl0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm92aWRlckluc3RhbmNlID0gPHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfT5tb2R1bGUuY29udGFpbmVyLmdldCh0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChwcm92aWRlckluc3RhbmNlKSB8fCBpc05pbChwcm92aWRlckluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgICAgICAgICAgYXdhaXQgcHJvdmlkZXJJbnN0YW5jZVttZXRob2RdISgpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGlmICghaXNPYmplY3QobW9kdWxlLmluc3RhbmNlKSB8fCBpc05pbChtb2R1bGUuaW5zdGFuY2VbbWV0aG9kXSkpIHJldHVybjtcbiAgICAgICAgYXdhaXQgbW9kdWxlLmluc3RhbmNlW21ldGhvZF0hKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTG9nZ2VyU2VydmljZSwgUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ09OVEFJTkVSX09QVElPTlMsIEdMT0JBTF9BUFBfQ09OVEFJTkVSIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlQ29udGFpbmVyIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlLCBvcHRpb25hbCwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFLCBNT0RVTEVfQ09OVEFJTkVSLCBUSU1FUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgVHJlZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFRpbWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZHVsZURlcGVuZGVuY3lCaW5kZXIge1xuICAgIEBpbmplY3QoR0xPQkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBvcHRpb25hbCgpIEBpbmplY3QoQ09OVEFJTkVSX09QVElPTlMpIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyT3B0aW9ucz86IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucztcblxuICAgIHB1YmxpYyBhc3luYyBiaW5kKHJlc29sdmVkVHJlZTogVHJlZTxNb2R1bGU+KSB7XG4gICAgICAgIGF3YWl0IHJlc29sdmVkVHJlZS5hc3luY1RyYXZlcnNlKGFzeW5jIChub2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBub2RlLnZhbHVlO1xuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lciA9IG5ldyBNb2R1bGVDb250YWluZXIobW9kdWxlLm1ldGFkYXRhLmNvbnRhaW5lciA/PyB0aGlzLmNvbnRhaW5lck9wdGlvbnMpO1xuICAgICAgICAgICAgLy8gQXR0YWNoIHRoZSBnbG9iYWwgY29udGFpbmVyIHRvIHRoZSBtb2R1bGUgY29udGFpbmVyLCBzbyBpdCBjYW4gYmUgdXNlZCB0byByZXNvbHZlIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIucGFyZW50ID0gdGhpcy5nbG9iYWxBcHBDb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKG1vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kdWxlIGlzIGdsb2JhbCwgd2Ugd2FudCB0byBiaW5kIGl0IHRvIHRoZSBnbG9iYWwgY29udGFpbmVyLlxuICAgICAgICAgICAgaWYgKG1vZHVsZS5tZXRhZGF0YS5nbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBCaW5kIGV4dGVybmFsIHByb3ZpZGVycyB0byB0aGUgZ2xvYmFsIGNvbnRhaW5lciwgc28gdGhleSBjYW4gYmUgaW5qZWN0ZWQgaW4gb3RoZXIgbW9kdWxlcy5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBwcm92aWRlcl0gb2YgbW9kdWxlLm1ldGFkYXRhLmV4dGVybmFsUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZFByb3ZpZGVyKHByb3ZpZGVyLCB0aGlzLmdsb2JhbEFwcENvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbW9kdWxlIGlzIG5vdCBnbG9iYWwsIHdlIHdhbnQgdG8gYmluZCBpdCB0byBpdHMgb3duIGNvbnRhaW5lci5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFt0b2tlbiwgcHJvdmlkZXJdIG9mIG1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgbW9kdWxlLmNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5wYXJlbnQ/LmNvbnRhaW5lci5iaW5kKHRva2VuKS50b0R5bmFtaWNWYWx1ZSgoKSA9PiBtb2R1bGUuY29udGFpbmVyLmdldCh0b2tlbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGltcG9ydE1vZHVsZSBvZiBtb2R1bGUucmVwZXRpdGl2ZUltcG9ydHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9rZW5dIG9mIGltcG9ydE1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKHRva2VuKS50b0R5bmFtaWNWYWx1ZSgoKSA9PiBpbXBvcnRNb2R1bGUuY29udGFpbmVyLmdldCh0b2tlbikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIGludGVybmFsIHByb3ZpZGVycy5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW18sIHByb3ZpZGVyXSBvZiBtb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgbW9kdWxlLmNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJpbmQgY29udGFpbmVyIHRvIGl0c2VsZiBzbyBpdCBjYW4gYmUgaW5qZWN0ZWQuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoTU9EVUxFX0NPTlRBSU5FUikudG9Db25zdGFudFZhbHVlKG1vZHVsZS5jb250YWluZXIpO1xuXG4gICAgICAgICAgICAvLyBCaW5kIGNvbnRyb2xsZXJzIHRvIHRoZSBjb250YWluZXIuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNsYXNzUmVmIG9mIG1vZHVsZS5tZXRhZGF0YS5jb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIuYmluZChjbGFzc1JlZikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIHNlcnZpY2VzIHRvIHRoZSBjb250YWluZXIuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoVElNRVJfU0VSVklDRSkudG8oVGltZXJTZXJ2aWNlKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coXG4gICAgICAgICAgICAgICAgYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35kZXBlbmRlbmNpZXMgYmluZGVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRQcm92aWRlcihwcm92aWRlcjogRXhjbHVkZTxQcm92aWRlciwgTmV3YWJsZT4sIGNvbnRhaW5lcjogQ29udGFpbmVyKSB7XG4gICAgICAgIGlmICgndXNlVmFsdWUnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b0NvbnN0YW50VmFsdWUocHJvdmlkZXIudXNlVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VGYWN0b3J5JyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvRHluYW1pY1ZhbHVlKChjdHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBzID1cbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIuaW5qZWN0Py5tYXAoKGRlcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGRlcCkgJiYgJ3Rva2VuJyBpbiBkZXAgJiYgJ29wdGlvbmFsJyBpbiBkZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmNvbnRhaW5lci5nZXQoZGVwLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcC5vcHRpb25hbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVzb2x2ZSBhIGRlcGVuZGVuY3kuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmNvbnRhaW5lci5nZXQoZGVwKTtcbiAgICAgICAgICAgICAgICAgICAgfSkgPz8gW107XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLnVzZUZhY3RvcnkoLi4uZGVwcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3RyYW5zaWVudCcpIGJpbmRpbmcuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICdyZXF1ZXN0JykgYmluZGluZy5pblJlcXVlc3RTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBiaW5kaW5nLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlQ2xhc3MnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gY29udGFpbmVyLmJpbmQocHJvdmlkZXIucHJvdmlkZSkudG8ocHJvdmlkZXIudXNlQ2xhc3MpO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVyLnNjb3BlID09PSAndHJhbnNpZW50JykgYmluZGluZy5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgICAgICBlbHNlIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3JlcXVlc3QnKSBiaW5kaW5nLmluUmVxdWVzdFNjb3BlKCk7XG4gICAgICAgICAgICBlbHNlIGJpbmRpbmcuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VFeGlzdGluZycgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvU2VydmljZShwcm92aWRlci51c2VFeGlzdGluZyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEeW5hbWljTW9kdWxlLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBDb250cm9sbGVyLCBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuLi9jb250cm9sbGVyJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuLi9tb2R1bGUnO1xuaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IFRyZWUsIFRyZWVOb2RlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVUcmVlU2Nhbm5lciB7XG4gICAgQGluamVjdChNb2R1bGVNZXRhZGF0YVJlYWRlcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVNZXRhZGF0YVJlYWRlcjogTW9kdWxlTWV0YWRhdGFSZWFkZXI7XG4gICAgQGluamVjdChDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlck1ldGFkYXRhUmVhZGVyOiBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGFzeW5jIHNjYW4oY2xhc3NSZWY6IE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPikge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAvLyBSZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgICBjb25zdCBtb2R1bGVNZXRhZGF0YSA9IGF3YWl0IHRoaXMubW9kdWxlTWV0YWRhdGFSZWFkZXIucmVhZChjbGFzc1JlZik7XG4gICAgICAgIC8vIENyZWF0ZSBtb2R1bGUgaW5zdGFuY2UgYW5kIHNldCBtZXRhZGF0YSB0byBpdFxuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgTW9kdWxlKCk7XG4gICAgICAgIG1vZHVsZS5tZXRhZGF0YSA9IG1vZHVsZU1ldGFkYXRhO1xuICAgICAgICAvLyBMb2cgbW9kdWxlIGluZm9cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fk1vZHVsZSB+bGJ+JHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gfmx3fnNjYW5uZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnMgaW4gbW9kdWxlXG4gICAgICAgIGF3YWl0IHRoaXMuc2NhbkNvbnRyb2xsZXJzKG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnMgaW4gbW9kdWxlXG4gICAgICAgIGNvbnN0IG1vZHVsZVRyZWUgPSBuZXcgVHJlZShtb2R1bGUpO1xuICAgICAgICBjb25zdCBzY2FubmVkTW9kdWxlcyA9IG5ldyBNYXA8TmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+LCBNb2R1bGU+KCk7XG4gICAgICAgIHNjYW5uZWRNb2R1bGVzLnNldChjbGFzc1JlZiwgbW9kdWxlKTtcbiAgICAgICAgLy8gU2NhbiBpbXBvcnRlZCBtb2R1bGVzXG4gICAgICAgIGZvciAoY29uc3QgaW1wb3J0ZWRNb2R1bGUgb2YgbW9kdWxlTWV0YWRhdGEuaW1wb3J0cykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zY2FuTW9kdWxlcyhtb2R1bGVUcmVlLnJvb3QsIGltcG9ydGVkTW9kdWxlLCBzY2FubmVkTW9kdWxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZHVsZVRyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzY2FuTW9kdWxlcyhcbiAgICAgICAgcGFyZW50Tm9kZTogVHJlZU5vZGU8TW9kdWxlPixcbiAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPixcbiAgICAgICAgc2Nhbm5lZE1vZHVsZXMgPSBuZXcgTWFwPE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPiwgTW9kdWxlPigpLFxuICAgICkge1xuICAgICAgICAvLyBDaGVjayBpZiBtb2R1bGUgaXMgYWxyZWFkeSBpbXBvcnRlZFxuICAgICAgICBjb25zdCBzY2FubmVkTW9kdWxlID0gc2Nhbm5lZE1vZHVsZXMuZ2V0KGNsYXNzUmVmKTtcbiAgICAgICAgaWYgKCFpc05pbChzY2FubmVkTW9kdWxlKSkge1xuICAgICAgICAgICAgcGFyZW50Tm9kZS52YWx1ZS5yZXBldGl0aXZlSW1wb3J0cy5hZGQoc2Nhbm5lZE1vZHVsZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIFJlYWQgbW9kdWxlIG1ldGFkYXRhXG4gICAgICAgIGNvbnN0IG1vZHVsZU1ldGFkYXRhID0gYXdhaXQgdGhpcy5tb2R1bGVNZXRhZGF0YVJlYWRlci5yZWFkKGNsYXNzUmVmKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5XG4gICAgICAgIHRoaXMuY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kocGFyZW50Tm9kZS52YWx1ZS5tZXRhZGF0YSwgbW9kdWxlTWV0YWRhdGEpO1xuICAgICAgICAvLyBDcmVhdGUgbW9kdWxlIGluc3RhbmNlXG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBNb2R1bGUoKTtcbiAgICAgICAgbW9kdWxlLm1ldGFkYXRhID0gbW9kdWxlTWV0YWRhdGE7XG4gICAgICAgIG1vZHVsZS5wYXJlbnQgPSBwYXJlbnROb2RlLnZhbHVlO1xuICAgICAgICAvLyBMb2cgbW9kdWxlIGluZm9cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fk1vZHVsZSB+bGJ+JHttb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYubmFtZX0gfmx3fnNjYW5uZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnMgaW4gbW9kdWxlXG4gICAgICAgIGF3YWl0IHRoaXMuc2NhbkNvbnRyb2xsZXJzKG1vZHVsZSk7XG4gICAgICAgIC8vIEFkZCBtb2R1bGUgdG8gdHJlZVxuICAgICAgICBjb25zdCB0cmVlTm9kZSA9IG5ldyBUcmVlTm9kZShtb2R1bGUpO1xuICAgICAgICBwYXJlbnROb2RlLmFkZENoaWxkKHRyZWVOb2RlKTtcbiAgICAgICAgLy8gQWRkIG1vZHVsZSB0byBpbXBvcnRlZCBtb2R1bGVzIHNldCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHNjYW5uaW5nXG4gICAgICAgIHNjYW5uZWRNb2R1bGVzLnNldChjbGFzc1JlZiwgbW9kdWxlKTtcbiAgICAgICAgLy8gU2NhbiBpbXBvcnRlZCBtb2R1bGVzIHJlY3Vyc2l2ZWx5XG4gICAgICAgIGZvciAoY29uc3QgaW1wb3J0TW9kdWxlIG9mIG1vZHVsZU1ldGFkYXRhLmltcG9ydHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2Nhbk1vZHVsZXModHJlZU5vZGUsIGltcG9ydE1vZHVsZSwgc2Nhbm5lZE1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzY2FuQ29udHJvbGxlcnMobW9kdWxlOiBNb2R1bGUpIHtcbiAgICAgICAgLy8gU2NhbiBjb250cm9sbGVyc1xuICAgICAgICBmb3IgKGNvbnN0IGNsYXNzUmVmIG9mIG1vZHVsZS5tZXRhZGF0YS5jb250cm9sbGVycykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXJNZXRhZGF0YSA9IGF3YWl0IHRoaXMuY29udHJvbGxlck1ldGFkYXRhUmVhZGVyLnJlYWQoY2xhc3NSZWYpO1xuICAgICAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBDb250cm9sbGVyKCk7XG4gICAgICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhID0gY29udHJvbGxlck1ldGFkYXRhO1xuICAgICAgICAgICAgY29udHJvbGxlci5vd25lciA9IG1vZHVsZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5wdXNoKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGB+bHd+Q29udHJvbGxlciB+bGN+JHtjbGFzc1JlZi5uYW1lfSB+bHd+c2Nhbm5lZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kocGFyZW50TWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhLCBtb2R1bGVNZXRhZGF0YTogTW9kdWxlTWV0YWRhdGEpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcGFyZW50IG1vZHVsZSBpcyBpbXBvcnRlZCBpbiBtb2R1bGVcbiAgICAgICAgaWYgKG1vZHVsZU1ldGFkYXRhLmltcG9ydHMuaW5jbHVkZXMocGFyZW50TWV0YWRhdGEuY2xhc3NSZWYpKSB7XG4gICAgICAgICAgICAvLyB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNjYW5uaW5nIHRoZSBtb2R1bGUgdHJlZS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQ2lyY3VsYXJEZXBlbmRlbmN5RGV0ZWN0ZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBTY3JpcHRFdmVudCBpbXBsZW1lbnRzIFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgICApIHt9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKHRoaXMuZXZlbnROYW1lLCB0aGlzLmxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFdmVudEVtbWl0ZXIsIFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QU2NyaXB0RXZlbnQgfSBmcm9tICcuL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlcic7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBFdmVudEVtbWl0ZXIgaW1wbGVtZW50cyBFdmVudEVtbWl0ZXIge1xuICAgIGVtaXQoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5jYWxsKGV2ZW50TmFtZSwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFJhZ2VNUFNjcmlwdEV2ZW50KGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIG9uY2UoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBjb25zdCBvbmNlV3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgICAgIGxpc3RlbmVyKC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFJhZ2VNUFNjcmlwdEV2ZW50KGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgIH1cblxuICAgIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IE11bHRpcGxheWVyVGltZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJhZ2VNUFRpbWVyIGltcGxlbWVudHMgTXVsdGlwbGF5ZXJUaW1lciB7XG4gICAgcHVibGljIGxhc3RUaWNrID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBpbnRlcnZhbDogbnVtYmVyID0gMCxcbiAgICAgICAgcHVibGljIG9uY2U6IGJvb2xlYW4sXG4gICAgICAgIHB1YmxpYyBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgICAgIHByaXZhdGUgY2xlYXJUaW1lcjogRnVuY3Rpb24sXG4gICAgKSB7fVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVyKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJUaW1lciwgTXVsdGlwbGF5ZXJUaW1lcnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJhZ2VNUFRpbWVyIH0gZnJvbSAnLi9yYWdlbXAtdGltZXInO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QVGltZXJzIGltcGxlbWVudHMgTXVsdGlwbGF5ZXJUaW1lcnMge1xuICAgIHByaXZhdGUgdGltZXJJbmNyZW1lbnRlcjogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHRpbWVycyA9IG5ldyBNYXA8bnVtYmVyLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgZXZlcnlUaWNrSGFuZGxlcnMgPSBuZXcgTWFwPG51bWJlciwgeyBjYWxsYmFjazogRnVuY3Rpb247IGJvdW5kOiBGdW5jdGlvbiB9PigpO1xuICAgIHByaXZhdGUgaXNFdmVyeVRpY2tSdW5uaW5nID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBldmVyeVRpY2tNYWluSGFuZGxlcjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgZ2V0IGFsbCgpOiBNdWx0aXBsYXllclRpbWVyW10ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMudGltZXJzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHdhcm5pbmdUaHJlc2hvbGQoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSB0aGlzIGZlYXR1cmVcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB3YXJuaW5nVGhyZXNob2xkKF92YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KCk6IG51bWJlciB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudChfdmFsdWU6IG51bWJlcikge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIHRoaXMgZmVhdHVyZVxuICAgIH1cblxuICAgIGdldEJ5SUQoaWQ6IG51bWJlcik6IE11bHRpcGxheWVyVGltZXIgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLnRpbWVycy5nZXQoaWQpO1xuICAgICAgICByZXR1cm4gdGltZXIgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRpbWVyKFxuICAgICAgICBjcmVhdGVUaW1lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBudW1iZXIsXG4gICAgICAgIGNsZWFyOiAoaWQ6IG51bWJlcikgPT4gdm9pZCxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uLFxuICAgICAgICBpbnRlcnZhbDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgICAgICBvbmNlOiBib29sZWFuLFxuICAgICAgICAuLi5hcmdzOiB1bmtub3duW11cbiAgICApIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuICAgICAgICBjb25zdCB0aW1lcklkID0gdHlwZW9mIGludGVydmFsID09PSAnbnVtYmVyJyA/IGNyZWF0ZVRpbWVyKGNhbGxiYWNrQmluZCwgaW50ZXJ2YWwpIDogY3JlYXRlVGltZXIoY2FsbGJhY2tCaW5kKTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcblxuICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgaW50ZXJ2YWwgPz8gMCwgb25jZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhcih0aW1lcklkKTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgIH1cblxuICAgIHNldEludGVydmFsKGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZTogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGltZXIoXG4gICAgICAgICAgICAoY2I6IEZ1bmN0aW9uLCBpbnRlcnZhbDogbnVtYmVyKSA9PiBzZXRJbnRlcnZhbChjYiBhcyAoKSA9PiB2b2lkLCBpbnRlcnZhbCkgYXMgdW5rbm93biBhcyBudW1iZXIsXG4gICAgICAgICAgICAoaWQ6IG51bWJlcikgPT4gY2xlYXJJbnRlcnZhbChpZCksXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIHRpbWUsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZTogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuXG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrQmluZCgpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSwgdGltZSkgYXMgdW5rbm93biBhcyBudW1iZXI7XG5cbiAgICAgICAgY29uc3QgcmFnZU1QVGltZXIgPSBuZXcgUmFnZU1QVGltZXIoaWQsIHRpbWUsIHRydWUsIGNhbGxiYWNrQmluZCwgKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgfVxuXG4gICAgZXZlcnlUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50aW1lckluY3JlbWVudGVyKys7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrQmluZCA9IGNhbGxiYWNrLmJpbmQodGhpcywgLi4uKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW10pKTtcblxuICAgICAgICB0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzLnNldChpZCwgeyBjYWxsYmFjaywgYm91bmQ6IGNhbGxiYWNrQmluZCB9KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbiBjbGllbnQtc2lkZSAocmVuZGVyIGV2ZW50IGV4aXN0cykgb3Igc2VydmVyLXNpZGVcbiAgICAgICAgY29uc3QgaXNDbGllbnRTaWRlID0gdHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKG1wIGFzIGFueSkuYnJvd3NlcnMgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgIC8vIFN0YXJ0IHRoZSB0aWNrIGxvb3AgaWYgbm90IGFscmVhZHkgcnVubmluZ1xuICAgICAgICBpZiAoIXRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXZlcnlUaWNrUnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpc0NsaWVudFNpZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBDbGllbnQtc2lkZTogdXNlIHJlbmRlciBldmVudCBmb3IgZnJhbWUtYWNjdXJhdGUgdGlja2luZ1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgaGFuZGxlcl0gb2YgdGhpcy5ldmVyeVRpY2tIYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmJvdW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihgRXJyb3IgaW4gZXZlcnlUaWNrIGhhbmRsZXI6ICR7ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbXAuZXZlbnRzLmFkZCgncmVuZGVyJywgdGhpcy5ldmVyeVRpY2tNYWluSGFuZGxlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNlcnZlci1zaWRlOiB1c2Ugc2V0SW50ZXJ2YWwgd2l0aCBtaW5pbWFsIGRlbGF5IGFzIGFwcHJveGltYXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgWywgaGFuZGxlcl0gb2YgdGhpcy5ldmVyeVRpY2tIYW5kbGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmJvdW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihgRXJyb3IgaW4gZXZlcnlUaWNrIGhhbmRsZXI6ICR7ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChpbnRlcnZhbEhhbmRsZXIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFnZU1QVGltZXIgPSBuZXcgUmFnZU1QVGltZXIoaWQsIDAsIGZhbHNlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrSGFuZGxlcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG5cbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHRpY2sgbG9vcCBpZiBubyBtb3JlIGhhbmRsZXJzXG4gICAgICAgICAgICBpZiAodGhpcy5ldmVyeVRpY2tIYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSAmJiB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoJ3JlbmRlcicsIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh0aGlzIGFzIGFueSkuX2V2ZXJ5VGlja0ludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICAodGhpcyBhcyBhbnkpLl9ldmVyeVRpY2tJbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgIH1cblxuICAgIG5leHRUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50aW1lckluY3JlbWVudGVyKys7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrQmluZCA9IGNhbGxiYWNrLmJpbmQodGhpcywgLi4uKEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogW10pKTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvbiBjbGllbnQtc2lkZSAocmVuZGVyIGV2ZW50IGV4aXN0cykgb3Igc2VydmVyLXNpZGVcbiAgICAgICAgY29uc3QgaXNDbGllbnRTaWRlID0gdHlwZW9mIG1wICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgKG1wIGFzIGFueSkuYnJvd3NlcnMgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgIGxldCB0aW1lcklkOiBhbnk7XG5cbiAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSkge1xuICAgICAgICAgICAgLy8gQ2xpZW50LXNpZGU6IHVzZSByZW5kZXIgZXZlbnQgZm9yIG5leHQgZnJhbWVcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tCaW5kKCk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5hZGQoJ3JlbmRlcicsIGhhbmRsZXIpO1xuXG4gICAgICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuc2V0KGlkLCByYWdlTVBUaW1lcik7XG4gICAgICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZXJ2ZXItc2lkZTogdXNlIHNldEltbWVkaWF0ZSBvciBzZXRUaW1lb3V0KDApIGZvciBuZXh0IHRpY2tcbiAgICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0JpbmQoKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHJhZ2VNUFRpbWVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGltZShfbmFtZT86IHN0cmluZykge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGNvbnNvbGUudGltZSBlcXVpdmFsZW50XG4gICAgICAgIC8vIENvdWxkIGltcGxlbWVudCBjdXN0b20gdGltaW5nIGlmIG5lZWRlZFxuICAgIH1cblxuICAgIHRpbWVFbmQoX25hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBjb25zb2xlLnRpbWVFbmQgZXF1aXZhbGVudFxuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEV2ZW50RW1taXRlciwgTXVsdGlwbGF5ZXJTZXJ2aWNlLCBNdWx0aXBsYXllclRpbWVycyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QRXZlbnRFbW1pdGVyIH0gZnJvbSAnLi9yYWdlbXAtZXZlbnQtZW1taXRlcic7XG5pbXBvcnQgeyBSYWdlTVBUaW1lcnMgfSBmcm9tICcuL3JhZ2VtcC10aW1lcnMnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UgaW1wbGVtZW50cyBNdWx0aXBsYXllclNlcnZpY2Uge1xuICAgIHJlYWRvbmx5IFRpbWVyczogTXVsdGlwbGF5ZXJUaW1lcnM7XG4gICAgcmVhZG9ubHkgRXZlbnRzOiBFdmVudEVtbWl0ZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5FdmVudHMgPSBuZXcgUmFnZU1QRXZlbnRFbW1pdGVyKCk7XG4gICAgICAgIHRoaXMuVGltZXJzID0gbmV3IFJhZ2VNUFRpbWVycygpO1xuICAgIH1cblxuICAgIHBhcnNlSW50ZXJuYWxBcmdzPFUgPSB1bmtub3duLCBUID0gdW5rbm93bj4oXG4gICAgICAgIC4uLmFyZ3M6IGFueVxuICAgICk6IHtcbiAgICAgICAgcGxheWVyPzogVTtcbiAgICAgICAgYm9keT86IFQ7XG4gICAgfSB7XG4gICAgICAgIGNvbnN0IHBsYXllciA9IChpc09iamVjdChhcmdzWzBdKSA/IGFyZ3NbMF0gOiB1bmRlZmluZWQpIGFzIFU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBsYXllcixcbiAgICAgICAgICAgIGJvZHk6IGFyZ3MsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbG9nKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBtcC5jb25zb2xlLmxvZ0luZm8obWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3IoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIG1wLmNvbnNvbGUubG9nRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nV2FybmluZyhhcmc6IGFueSwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dXYXJuaW5nKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGxvZ0RlYnVnKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGEgZGVkaWNhdGVkIGRlYnVnIGxvZywgdXNlIGluZm9cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dJbmZvKGBbREVCVUddICR7bWVzc2FnZX1gKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgdmFsaWRhdGVFcnJvckZpbHRlciwgdmFsaWRhdGVHdWFyZCwgdmFsaWRhdGVJbnRlcmNlcHRvciwgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vc2NoZW1hcy9ldmVudHMnO1xuaW1wb3J0IHtcbiAgICBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLFxuICAgIEdMT0JBTF9FUlJPUl9GSUxURVJTLFxuICAgIEdMT0JBTF9HVUFSRFMsXG4gICAgR0xPQkFMX0lOVEVSQ0VQVE9SUyxcbiAgICBHTE9CQUxfUElQRVMsXG4gICAgRU5BQkxFX1NIVVRET1dOX0hPT0tTLFxuICAgIFBMVUdJTlMsXG4gICAgR0xPQkFMX0FQUF9DT05UQUlORVIsXG4gICAgQVBQX0VOVklST01FTlQsXG4gICAgTUFOR09fUkVRVUVTVF9GQUNUT1JZLFxuICAgIE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlksXG4gICAgRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSxcbiAgICBDT05UQUlORVJfT1BUSU9OUyxcbiAgICBNVUxUSVBMQVlFUl9TRVJWSUNFLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3QsIENvbnRhaW5lciwgaW5qZWN0YWJsZSwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEFwcCB9IGZyb20gJy4vYXBwJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgTWFuZ29QbHVnaW4sIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgQ29udHJvbGxlckV2ZW50SGFuZGxlcixcbiAgICBDb250cm9sbGVyRmxvd0hhbmRsZXIsXG4gICAgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyLFxuICAgIENvbnRyb2xsZXJSUENIYW5kbGVyLFxuICAgIFBpcGVsaW5lSGFuZGxlcixcbn0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuL21vZHVsZSc7XG5pbXBvcnQgeyBBcHBSdW50aW1lLCBNb2R1bGVEZXBlbmRlbmN5QmluZGVyLCBNb2R1bGVUcmVlU2Nhbm5lciB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBFeGVjdXRpb25Db250ZXh0QmFzZSwgTWFuZ29SZXF1ZXN0QmFzZSwgTWFuZ29SZXNwb25zZUJhc2UgfSBmcm9tICcuL3BpcGVsaW5lJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB7IFJFRkxFQ1RPUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJlZmxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBCdWlsZGVyPEcgZXh0ZW5kcyBHdWFyZCA9IEd1YXJkLCBJIGV4dGVuZHMgSW50ZXJjZXB0b3IgPSBJbnRlcmNlcHRvciwgRUYgZXh0ZW5kcyBFcnJvckZpbHRlciA9IEVycm9yRmlsdGVyPiB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb21lbnQ6IHN0cmluZztcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByb3RlY3RlZCByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoUExVR0lOUykgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W107XG5cbiAgICBwcml2YXRlIGdsb2JhbENvbnRhaW5lck9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucyA9IHt9O1xuXG4gICAgcHVibGljIHVzZUdsb2JhbEd1YXJkcyguLi5ndWFyZHM6IChOZXdhYmxlPEc+IHwgRylbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRHdWFyZHM6IChOZXdhYmxlPEc+IHwgRylbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIGd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUd1YXJkKGd1YXJkKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRHdWFyZHMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0dVQVJEUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZEd1YXJkcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJPiB8IEkpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkSW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJPiB8IEkpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkSW50ZXJjZXB0b3JzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRJbnRlcmNlcHRvcnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsUGlwZXMoLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX1BJUEVTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkUGlwZXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsRmlsdGVycyguLi5maWx0ZXJzOiAoTmV3YWJsZTxFRj4gfCBFRilbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGSWx0ZXJzOiAoTmV3YWJsZTxFRj4gfCBFRilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlRXJyb3JGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRGSWx0ZXJzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkRklsdGVycyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VQbHVnaW5zKC4uLnBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W10pIHtcbiAgICAgICAgcGx1Z2lucy5mb3JFYWNoKChwKSA9PiB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQocCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxQbHVnaW5zID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQ8TmV3YWJsZTxNYW5nb1BsdWdpbj5bXT4oUExVR0lOUyk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIucmViaW5kKFBMVUdJTlMpLnRvQ29uc3RhbnRWYWx1ZShbLi4uaW50ZXJuYWxQbHVnaW5zLCAuLi5wbHVnaW5zXSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVTaHV0ZG93bkhvb2tzKCkge1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRU5BQkxFX1NIVVRET1dOX0hPT0tTKS50b0NvbnN0YW50VmFsdWUodHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb250YWluZXJPcHRpb25zKG9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucywgb25seUdsb2JhbCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29udGFpbmVyT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChvbmx5R2xvYmFsKSByZXR1cm4gdGhpcztcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENPTlRBSU5FUl9PUFRJT05TKS50b0NvbnN0YW50VmFsdWUob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBidWlsZCgpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsQXBwQ29udGFpbmVyID0gbmV3IENvbnRhaW5lcih0aGlzLmdsb2JhbENvbnRhaW5lck9wdGlvbnMpO1xuICAgICAgICAvLyBHTG9iYWwgc2VydmljZSBiaW5kaW5nc1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChSRUZMRUNUT1JfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKFJlZmxlY3RvclNlcnZpY2UpO1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChSZWZsZWN0b3JTZXJ2aWNlKS50b1NlcnZpY2UoUkVGTEVDVE9SX1NFUlZJQ0UpO1xuXG4gICAgICAgIC8vIE11bHRpcGxheWVyIHNlcnZpY2UgYmluZGluZ3NcbiAgICAgICAgZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoTVVMVElQTEFZRVJfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlKTtcbiBcbiAgICAgICAgLy8gQXBwIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChBcHApLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9BUFBfQ09OVEFJTkVSKS50b0NvbnN0YW50VmFsdWUoZ2xvYmFsQXBwQ29udGFpbmVyKTtcblxuICAgICAgICAvLyBNb2R1bGUgdHJlZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlVHJlZVNjYW5uZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZURlcGVuZGVuY3lCaW5kZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFwcFJ1bnRpbWUpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBBcHAgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFBpcGVsaW5lSGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIE1vZHVsZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGVNZXRhZGF0YVJlYWRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIENvbnRyb2xsZXIgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXIpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlckZsb3dIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyRXZlbnRIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyUlBDSGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIE1hbmdvIFJlcXVlc3QgYW5kIFJlc3BvbnNlIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNYW5nb1JlcXVlc3RCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNQU5HT19SRVFVRVNUX0ZBQ1RPUlkpLnRvRmFjdG9yeSgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChib2R5OiB1bmtub3duLCBwbGF5ZXI6IFBsYXllck1wKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNvbnRleHQuY29udGFpbmVyLmdldChNYW5nb1JlcXVlc3RCYXNlKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LiRib2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LiRwbGF5ZXIgPSBwbGF5ZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1hbmdvUmVzcG9uc2VCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNQU5HT19SRVNQT05TRV9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29udGFpbmVyLmdldChNYW5nb1Jlc3BvbnNlQmFzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEV4ZWN1dGlvbkNvbnRleHRCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdHlwZTogRXhlY3V0aW9uQ29udGV4dFR5cGUsXG4gICAgICAgICAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogTWFuZ29SZXF1ZXN0QmFzZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogTWFuZ29SZXNwb25zZUJhc2UsXG4gICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQuY29udGFpbmVyLmdldChFeGVjdXRpb25Db250ZXh0QmFzZSk7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kdHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kcmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kcmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRoYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRjbGFzc1JlZiA9IGNsYXNzUmVmO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJG5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRpb25Db250ZXh0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUGx1Z2lucyBiaW5kaW5nc1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnBsdWdpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChwbHVnaW4pLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQocGx1Z2luKTtcbiAgICAgICAgICAgIGlmICghcGx1Z2luSW5zdGFuY2Uub25CdWlsZCkgY29udGludWU7XG4gICAgICAgICAgICBhd2FpdCBwbHVnaW5JbnN0YW5jZS5vbkJ1aWxkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfR1VBUkRTKSkgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9HVUFSRFMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpKVxuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9QSVBFUykpIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfUElQRVMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKSlcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfRVJST1JfRklMVEVSUykudG9Db25zdGFudFZhbHVlKFtdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQoQXBwKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ29udGFpbmVyLCBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgTW9kdWxlRGVwZW5kZW5jeUJpbmRlciwgTW9kdWxlVHJlZVNjYW5uZXIgfSBmcm9tICcuL21vZHVsZS10cmVlJztcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gJy4vbW9kdWxlL21vZHVsZSc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLCBQTFVHSU5TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwUnVudGltZSB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1BsdWdpbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb3JlL21hbmdvLXBsdWdpbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBUcmVlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcCB7XG4gICAgQGluamVjdChNb2R1bGVUcmVlU2Nhbm5lcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVUcmVlU2Nhbm5lcjogTW9kdWxlVHJlZVNjYW5uZXI7XG4gICAgQGluamVjdChNb2R1bGVEZXBlbmRlbmN5QmluZGVyKSBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZURlcGVuZGVuY3lCaW5kZXI6IE1vZHVsZURlcGVuZGVuY3lCaW5kZXI7XG4gICAgQGluamVjdChBcHBSdW50aW1lKSBwcml2YXRlIHJlYWRvbmx5IGFwcFJ1bnRpbWU6IEFwcFJ1bnRpbWU7XG4gICAgQGluamVjdChJTlRFUk5BTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGludGVybmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChQTFVHSU5TKSBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W107XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgbW9kdWxlVHJlZTogVHJlZTxNb2R1bGU+O1xuICAgIHByaXZhdGUgbG9hZGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnQ8VD4ocm9vdE1vZHVsZTogTmV3YWJsZTxUPikge1xuICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgc3RhcnRpbmcgdGhlIGFwcC4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXBwQWxyZWFkeUxvYWRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flN0YXJ0aW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0YXJ0Jyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flNjYW5uaW5nIG1vZHVsZSB0cmVlLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYmVmb3JlU2NhbicpO1xuICAgICAgICB0aGlzLm1vZHVsZVRyZWUgPSBhd2FpdCB0aGlzLm1vZHVsZVRyZWVTY2FubmVyLnNjYW4ocm9vdE1vZHVsZSk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTY2FuJyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3fkJpbmRpbmcgbW9kdWxlIGRlcGVuZGVuY2llcy4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZUJpbmQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2R1bGVEZXBlbmRlbmN5QmluZGVyLmJpbmQodGhpcy5tb2R1bGVUcmVlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckJpbmQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+TG9hZGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVMb2FkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwUnVudGltZS5ib290KHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckxvYWQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+QXBwIGxvYWRlZCcpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTdGFydCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdG9wKCkge1xuICAgICAgICBpZiAoIXRoaXMubG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIHN0b3BwaW5nIHRoZSBhcHAuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkFwcE5vdExvYWRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVTdG9wJyk7XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35TdG9wcGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBSdW50aW1lLnNodXRkb3duKHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35BcHAgc3RvcHBlZCcpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyU3RvcCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuUGx1Z2luTWV0aG9kcyhtZXRob2Q6IGtleW9mIE1hbmdvUGx1Z2luKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KHApO1xuICAgICAgICAgICAgICAgIGlmICghcGx1Z2luW21ldGhvZF0pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBsdWdpblttZXRob2RdISgpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIElOVEVSTkFMX0FQUF9DT05UQUlORVIsIE1VTFRJUExBWUVSX1NFUlZJQ0UsIFBMVUdJTlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUGx1Z2luLCBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBBcHBFbnZpcm9tZW50IH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEFwcEJ1aWxkZXIgfSBmcm9tICcuL2FwcC1idWlsZGVyJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcEJ1aWxkZXI8VCBleHRlbmRzIEFwcEJ1aWxkZXI+KHtcbiAgICBlbnZpcm9tZW50LFxuICAgIHBsdWdpbnMsXG4gICAgYXBwQnVpbGRlckluaGVyaXQsXG4gICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLFxufToge1xuICAgIGVudmlyb21lbnQ6IEFwcEVudmlyb21lbnQ7XG4gICAgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcbiAgICBhcHBCdWlsZGVySW5oZXJpdDogTmV3YWJsZTxUPjtcbiAgICBtdWx0aXBsYXllclNlcnZpY2U/OiBNdWx0aXBsYXllclNlcnZpY2U7XG59KSB7XG4gICAgY29uc3QgaW50ZXJuYWxBcHBDb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7XG5cbiAgICBpZiAobXVsdGlwbGF5ZXJTZXJ2aWNlKSBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1VTFRJUExBWUVSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZShtdWx0aXBsYXllclNlcnZpY2UpO1xuICAgIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikudG9Db25zdGFudFZhbHVlKGludGVybmFsQXBwQ29udGFpbmVyKTtcbiAgICBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFQUF9FTlZJUk9NRU5UKS50b0NvbnN0YW50VmFsdWUoZW52aXJvbWVudCk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChQTFVHSU5TKS50b0NvbnN0YW50VmFsdWUocGx1Z2lucyk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChhcHBCdWlsZGVySW5oZXJpdCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgcmV0dXJuIGludGVybmFsQXBwQ29udGFpbmVyLmdldChhcHBCdWlsZGVySW5oZXJpdCk7XG59XG4iLCAiaW1wb3J0IHsgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5LCB0eXBlIEV2ZW50TWV0YWRhdGEsIHR5cGUgUGlwZWxpbmVNZXRhZGF0YSB9IGZyb20gJy4uL2FwcCc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFdmVudERlY29yYXRvcih0eXBlOiBFdmVudE1ldGFkYXRhWyd0eXBlJ10sIG5hbWU/OiBzdHJpbmcsIHdlYlZpZXdJZD86IHN0cmluZyB8IG51bWJlcikge1xuICAgIHJldHVybiA8TWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwobmFtZSkgJiYgIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkV2ZW50TmFtZU11c3RCZVN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBuYW1lID0gbmFtZSA/PyBtZXRob2Q7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzID1cbiAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGE8T21pdDxFdmVudE1ldGFkYXRhLCAncGFyYW1zJyB8IGtleW9mIFBpcGVsaW5lTWV0YWRhdGE+W10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyRXZlbnRzLCB0YXJnZXQpID8/IFtdO1xuXG4gICAgICAgIGlmIChldmVudHMuc29tZSgoZXZlbnQpID0+IGV2ZW50Lm1ldGhvZCA9PT0gbWV0aG9kICYmIGV2ZW50Lm5hbWUgPT09IG5hbWUgJiYgZXZlbnQudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROYW1lTXVzdEJlVW5pcXVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8T21pdDxFdmVudE1ldGFkYXRhLCAncGFyYW1zJyB8IGtleW9mIFBpcGVsaW5lTWV0YWRhdGE+W10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJFdmVudHMsXG4gICAgICAgICAgICBbLi4uZXZlbnRzLCB7IG1ldGhvZCwgbmFtZSwgdHlwZSwgd2ViVmlld0lkIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbkludGVybmFsKGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbkludGVybmFsJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3KGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25XZWJWaWV3JywgZXZlbnROYW1lLCBpZCk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uKGV2ZW50TmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb24nLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlSW50ZXJuYWwoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uY2VJbnRlcm5hbCcsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2UoZXZlbnROYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbmNlJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlZpZXcoaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbmNlV2ViVmlldycsIGV2ZW50TmFtZSwgaWQpO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gQm9keSguLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgcGlwZXM6IHZhbGlkYXRlZFBpcGVzLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuQm9keSwgZGF0YTogdW5kZWZpbmVkLCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5kZXgoa2V5OiBudW1iZXIsIC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoIWlzTnVtYmVyKGtleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW5kZXhLZXlNdXN0QmVOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIHBpcGVzOiB2YWxpZGF0ZWRQaXBlcywgdHlwZTogTWV0aG9kUGFyYW1UeXBlLkluZGV4LCBkYXRhOiBrZXksIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KCkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5SZXF1ZXN0LCBkYXRhOiB1bmRlZmluZWQsIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxKCkge1xuICAgIHJldHVybiBSZXF1ZXN0KCk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFBhcmFtKGtleTogc3RyaW5nLCAuLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFpc1N0cmluZyhrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlBhcmFtS2V5TXVzdEJlU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCBkYXRhOiBrZXksIHBpcGVzOiB2YWxpZGF0ZWRQaXBlcywgdHlwZTogTWV0aG9kUGFyYW1UeXBlLlBhcmFtLCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgdHlwZTogTWV0aG9kUGFyYW1UeXBlLlJlc3BvbnNlLCBkYXRhOiB1bmRlZmluZWQsIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzKCkge1xuICAgIHJldHVybiBSZXNwb25zZSgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgR3VhcmQgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUd1YXJkIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VHdWFyZHMoLi4uZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSkge1xuICAgIHJldHVybiA8Q2xhc3NEZWNvcmF0b3IgJiBNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiBndWFyZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVHdWFyZChndWFyZCk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkR3VhcmRzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChndWFyZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lR3VhcmRSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZEd1YXJkcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxHdWFyZD5bXT4oQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpIHx8IFtdO1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCBbLi4udmFsaWRhdGVkR3VhcmRzLCAuLi5tZXRob2RHdWFyZHNdLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChndWFyZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzR3VhcmRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEd1YXJkPltdPihDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCB0YXJnZXQpIHx8IFtdO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIFsuLi52YWxpZGF0ZWRHdWFyZHMsIC4uLmNsYXNzR3VhcmRzXSwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEludGVyY2VwdG9yIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnRlcmNlcHRvciB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gVXNlSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRJbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEludGVyY2VwdG9ycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOaWwoZGVzY3JpcHRvcikgJiYgIWlzTmlsKGRlc2NyaXB0b3IudmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtZXRob2RJbnRlcmNlcHRvcnMgPVxuICAgICAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxJbnRlcmNlcHRvcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpIHx8IFtdO1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShcbiAgICAgICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIFsuLi52YWxpZGF0ZWRJbnRlcmNlcHRvcnMsIC4uLm1ldGhvZEludGVyY2VwdG9yc10sXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzSW50ZXJjZXB0b3JzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEludGVyY2VwdG9yPltdPihDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCB0YXJnZXQpIHx8IFtdO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIFsuLi52YWxpZGF0ZWRJbnRlcmNlcHRvcnMsIC4uLmNsYXNzSW50ZXJjZXB0b3JzXSwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gVXNlUGlwZXMoLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgIHJldHVybiA8Q2xhc3NEZWNvcmF0b3IgJiBNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOaWwoZGVzY3JpcHRvcikgJiYgIWlzTmlsKGRlc2NyaXB0b3IudmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAocGlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lUGlwZVJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kUGlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8UGlwZT5bXT4oQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5QaXBlcywgWy4uLnZhbGlkYXRlZFBpcGVzLCAuLi5tZXRob2RQaXBlc10sIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBpcGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lUGlwZVJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzUGlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8UGlwZT5bXT4oQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCB0YXJnZXQpIHx8IFtdO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5QaXBlcywgWy4uLnZhbGlkYXRlZFBpcGVzLCAuLi5jbGFzc1BpcGVzXSwgdGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBpc05pbCwgaXNOdW1iZXIsIGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5LCB0eXBlIFBpcGVsaW5lTWV0YWRhdGEsIHR5cGUgUlBDTWV0YWRhdGEgfSBmcm9tICcuLi9hcHAnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUlBDRGVjb3JhdG9yKHR5cGU6IFJQQ01ldGFkYXRhWyd0eXBlJ10sIG5hbWU/OiBzdHJpbmcsIHdlYlZpZXdJZD86IHN0cmluZyB8IG51bWJlcikge1xuICAgIHJldHVybiA8TWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwod2ViVmlld0lkKSAmJiAhaXNTdHJpbmcod2ViVmlld0lkKSAmJiAhaXNOdW1iZXIod2ViVmlld0lkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5XZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKG5hbWUpICYmICFpc1N0cmluZyhuYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENOYW1lTXVzdEJlU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lID8/IG1ldGhvZDtcblxuICAgICAgICBjb25zdCBycGNzID1cbiAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGE8T21pdDxSUENNZXRhZGF0YSwgJ3BhcmFtcycgfCBrZXlvZiBQaXBlbGluZU1ldGFkYXRhPltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclJQQ3MsIHRhcmdldCkgPz8gW107XG5cbiAgICAgICAgaWYgKHJwY3Muc29tZSgocnBjKSA9PiBycGMubWV0aG9kID09PSBtZXRob2QgJiYgcnBjLm5hbWUgPT09IG5hbWUgJiYgcnBjLnR5cGUgPT09IHR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ05hbWVNdXN0QmVVbmlxdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxPbWl0PFJQQ01ldGFkYXRhLCAncGFyYW1zJyB8IGtleW9mIFBpcGVsaW5lTWV0YWRhdGE+W10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJSUENzLFxuICAgICAgICAgICAgWy4uLnJwY3MsIHsgbWV0aG9kLCBuYW1lLCB0eXBlLCB3ZWJWaWV3SWQgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlUlBDRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXJwYy1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25SZXF1ZXN0KHJwY05hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlUlBDRGVjb3JhdG9yKCdvblJlcXVlc3QnLCBycGNOYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVSUENEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtcnBjLWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0KGlkOiBzdHJpbmcgfCBudW1iZXIsIHJwY05hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlUlBDRGVjb3JhdG9yKCdvbldlYlZpZXdSZXF1ZXN0JywgcnBjTmFtZSwgaWQpO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSwgdHlwZSBUaW1lck1ldGFkYXRhIH0gZnJvbSAnLi4vYXBwJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKHR5cGU6IFRpbWVyTWV0YWRhdGFbJ3R5cGUnXSwgbmFtZT86IHN0cmluZywgb3B0aW9ucz86IFRpbWVyTWV0YWRhdGFbJ29wdGlvbnMnXSkge1xuICAgIHJldHVybiA8TWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwobmFtZSkgJiYgIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlRpbWVyTmFtZU11c3RCZVN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBuYW1lID0gbmFtZSA/PyBtZXRob2Q7XG5cbiAgICAgICAgY29uc3QgdGltZXJzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxUaW1lck1ldGFkYXRhW10+KENvcmVNZXRhZGF0YUtleS5UaW1lcnMsIHRhcmdldCkgPz8gW107XG5cbiAgICAgICAgaWYgKHRpbWVycy5zb21lKCh0aW1lcikgPT4gdGltZXIubWV0aG9kID09PSBtZXRob2QgJiYgdGltZXIubmFtZSA9PT0gbmFtZSAmJiB0aW1lci50eXBlID09PSB0eXBlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5hbWVNdXN0QmVVbmlxdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxUaW1lck1ldGFkYXRhW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LlRpbWVycyxcbiAgICAgICAgICAgIFsuLi50aW1lcnMsIDxUaW1lck1ldGFkYXRhPnsgbWV0aG9kLCBuYW1lLCB0eXBlLCBvcHRpb25zIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQ3Jvbk9wdGlvbnMgfSBmcm9tICdjcm9uZXInO1xuaW1wb3J0IHsgY3JlYXRlVGltZXJEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtdGltZXIuZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIENyb24ocGF0dGVybjogc3RyaW5nIHwgRGF0ZSwgb3B0aW9uczogQ3Jvbk9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBjcmVhdGVUaW1lckRlY29yYXRvcignY3JvbicsIG9wdGlvbnMubmFtZSwgeyBwYXR0ZXJuLCAuLi5vcHRpb25zIH0pO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVRpbWVyRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXRpbWVyLmRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVyeVRpY2sobmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVUaW1lckRlY29yYXRvcignZXZlcnl0aWNrJywgbmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVUaW1lckRlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS10aW1lci5kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gSW50ZXJ2YWwodGltZW91dDogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIEludGVydmFsKG5hbWU6IHN0cmluZywgdGltZW91dDogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIEludGVydmFsKG5hbWVPclRpbWVvdXQ6IHN0cmluZyB8IG51bWJlciwgdGltZW91dD86IG51bWJlcik6IE1ldGhvZERlY29yYXRvciB7XG4gICAgY29uc3QgW25hbWUsIGludGVydmFsVGltZW91dF0gPSBpc1N0cmluZyhuYW1lT3JUaW1lb3V0KSA/IFtuYW1lT3JUaW1lb3V0LCB0aW1lb3V0XSA6IFt1bmRlZmluZWQsIG5hbWVPclRpbWVvdXRdO1xuICAgIHJldHVybiBjcmVhdGVUaW1lckRlY29yYXRvcignaW50ZXJ2YWwnLCBuYW1lLCB7IHRpbWVvdXQ6IGludGVydmFsVGltZW91dCEgfSk7XG59XG4iLCAiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVUaW1lckRlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS10aW1lci5kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gVGltZW91dCh0aW1lb3V0OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gVGltZW91dChuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gVGltZW91dChuYW1lT3JUaW1lb3V0OiBzdHJpbmcgfCBudW1iZXIsIHRpbWVvdXQ/OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3Ige1xuICAgIGNvbnN0IFtuYW1lLCBpbnRlcnZhbFRpbWVvdXRdID0gaXNTdHJpbmcobmFtZU9yVGltZW91dCkgPyBbbmFtZU9yVGltZW91dCwgdGltZW91dF0gOiBbdW5kZWZpbmVkLCBuYW1lT3JUaW1lb3V0XTtcbiAgICByZXR1cm4gY3JlYXRlVGltZXJEZWNvcmF0b3IoJ3RpbWVvdXQnLCBuYW1lLCB7IHRpbWVvdXQ6IGludGVydmFsVGltZW91dCEgfSk7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RGVjb3JhdG9ycyguLi5kZWNvcmF0b3JzOiAoQ2xhc3NEZWNvcmF0b3IgfCBNZXRob2REZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvcilbXSkge1xuICAgIHJldHVybiA8VEZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24sIFk+KFxuICAgICAgICB0YXJnZXQ6IFRGdW5jdGlvbiB8IE9iamVjdCxcbiAgICAgICAgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCxcbiAgICAgICAgZGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8WT4sXG4gICAgKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZGVjb3JhdG9yIG9mIGRlY29yYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiAhZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICg8Q2xhc3NEZWNvcmF0b3I+ZGVjb3JhdG9yKSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKDxNZXRob2REZWNvcmF0b3IgfCBQcm9wZXJ0eURlY29yYXRvcj5kZWNvcmF0b3IpKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQsIE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhcmFtRGVjb3JhdG9yPFRJbnB1dCA9IHVua25vd24sIFRPdXRwdXQgPSB1bmtub3duPihmYWN0b3J5OiAoZGF0YTogVElucHV0LCBjdHg6IEV4ZWN1dGlvbkNvbnRleHQpID0+IFRPdXRwdXQpIHtcbiAgICByZXR1cm4gPFRJbnB1dCA9IHVua25vd24+KGRhdGE/OiBUSW5wdXQsIC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pID0+IHtcbiAgICAgICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVzOiB2YWxpZGF0ZWRQaXBlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5DdXN0b20sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5OiA8KGRhdGE6IHVua25vd24sIGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpID0+IHVua25vd24+ZmFjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuIiwgImltcG9ydCB7IExhenlTZXJ2aWNlSWRlbnRpZmllciwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRSZWY8VCA9IHVua25vd24+KGZuOiAoKSA9PiBpbnRlcmZhY2VzLlNlcnZpY2VJZGVudGlmaWVyPFQ+KSB7XG4gICAgcmV0dXJuIG5ldyBMYXp5U2VydmljZUlkZW50aWZpZXI8VD4oZm4pO1xufSIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDcm9uLCB0eXBlIENyb25PcHRpb25zIH0gZnJvbSAnY3JvbmVyJztcbmltcG9ydCB7IE1VTFRJUExBWUVSX1NFUlZJQ0UsIHR5cGUgTXVsdGlwbGF5ZXJTZXJ2aWNlLCB0eXBlIE11bHRpcGxheWVyVGltZXIgfSBmcm9tICcuLi9hcHAnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGltZXJTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBNdWx0aXBsYXllclNlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkZXZlcnl0aWNrcyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGludGVydmFscyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJHRpbWVvdXRzID0gbmV3IE1hcDxzdHJpbmcsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkY3JvbnMgPSBuZXcgTWFwPHN0cmluZywgQ3Jvbj4oKTtcblxuICAgIHB1YmxpYyBnZXQgYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLmFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV2ZXJ5dGlja3MoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kZXZlcnl0aWNrcy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbnRlcnZhbHMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kaW50ZXJ2YWxzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpbWVvdXRzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJHRpbWVvdXRzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNyb25zKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJGNyb25zLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHdhcm5pbmdUaHJlc2hvbGQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMud2FybmluZ1RocmVzaG9sZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgd2FybmluZ1RocmVzaG9sZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy53YXJuaW5nVGhyZXNob2xkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUNyb25Kb2IoY2FsbGJhY2s6IEZ1bmN0aW9uLCBvcHRpb25zOiBDcm9uT3B0aW9ucyAmIHsgcGF0dGVybjogc3RyaW5nIHwgRGF0ZSB9KSB7XG4gICAgICAgIGNvbnN0IHsgcGF0dGVybiwgLi4uY3Jvbk9wdGlvbnMgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgY29uc3QgY3JvbiA9IENyb24ocGF0dGVybiwgY3Jvbk9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMubmFtZSkpIHRoaXMuJGNyb25zLnNldChvcHRpb25zLm5hbWUsIGNyb24pO1xuXG4gICAgICAgIHJldHVybiBjcm9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVJbnRlcnZhbChjYWxsYmFjazogRnVuY3Rpb24sIGludGVydmFsOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc2V0SW50ZXJ2YWwoY2FsbGJhY2ssIGludGVydmFsKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB0aGlzLiRpbnRlcnZhbHMuc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZW91dDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJHRpbWVvdXRzLnNldChuYW1lLCB0aW1lcik7XG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRXZlcnlUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgbmFtZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5ldmVyeVRpY2soY2FsbGJhY2spO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJGV2ZXJ5dGlja3Muc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodHlwZTogJ2Nyb24nIHwgJ2V2ZXJ5dGljaycgfCAndGltZW91dCcgfCAnaW50ZXJ2YWwnLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjcm9uJzpcbiAgICAgICAgICAgICAgICBjb25zdCBjcm9uSm9iID0gdGhpcy4kY3JvbnMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjcm9uSm9iKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyb25Kb2Iuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRjcm9ucy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXZlcnl0aWNrJzpcbiAgICAgICAgICAgICAgICBjb25zdCBldmVyeXRpY2sgPSB0aGlzLiRldmVyeXRpY2tzLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlcnl0aWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGljay5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGV2ZXJ5dGlja3MuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ludGVydmFsJzpcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMuJGludGVydmFscy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVydmFsLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW50ZXJ2YWxzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy4kdGltZW91dHMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0cy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5TmFtZSh0eXBlOiAnY3JvbicgfCAnZXZlcnl0aWNrJyB8ICd0aW1lb3V0JyB8ICdpbnRlcnZhbCcsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Nyb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRjcm9ucy5nZXQobmFtZSk7XG4gICAgICAgICAgICBjYXNlICdldmVyeXRpY2snOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRldmVyeXRpY2tzLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ2ludGVydmFsJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaW50ZXJ2YWxzLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiR0aW1lb3V0cy5nZXQobmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlJZChpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuZ2V0QnlJRChpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRpbWUobmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnRpbWUobmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRpbWVFbmQobmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnRpbWVFbmQobmFtZSk7XG4gICAgfVxufVxuIiwgImZ1bmN0aW9uIG1pbml0eih5LG0sZCxoLGkscyx0eix0aHJvd09uSW52YWxpZCl7cmV0dXJuIG1pbml0ei5mcm9tVFoobWluaXR6LnRwKHksbSxkLGgsaSxzLHR6KSx0aHJvd09uSW52YWxpZCl9bWluaXR6LmZyb21UWklTTz0obG9jYWxUaW1lU3RyLHR6LHRocm93T25JbnZhbGlkKT0+e3JldHVybiBtaW5pdHouZnJvbVRaKHBhcnNlSVNPTG9jYWwobG9jYWxUaW1lU3RyLHR6KSx0aHJvd09uSW52YWxpZCl9O21pbml0ei5mcm9tVFo9ZnVuY3Rpb24odHAsdGhyb3dPbkludmFsaWQpe2NvbnN0IGluRGF0ZT1uZXcgRGF0ZShEYXRlLlVUQyh0cC55LHRwLm0tMSx0cC5kLHRwLmgsdHAuaSx0cC5zKSksb2Zmc2V0PWdldFRpbWV6b25lT2Zmc2V0KHRwLnR6LGluRGF0ZSksZGF0ZUd1ZXNzPW5ldyBEYXRlKGluRGF0ZS5nZXRUaW1lKCktb2Zmc2V0KSxkYXRlT2Zmc0d1ZXNzPWdldFRpbWV6b25lT2Zmc2V0KHRwLnR6LGRhdGVHdWVzcyk7aWYoZGF0ZU9mZnNHdWVzcy1vZmZzZXQ9PT0wKXtyZXR1cm4gZGF0ZUd1ZXNzfWVsc2V7Y29uc3QgZGF0ZUd1ZXNzMj1uZXcgRGF0ZShpbkRhdGUuZ2V0VGltZSgpLWRhdGVPZmZzR3Vlc3MpLGRhdGVPZmZzR3Vlc3MyPWdldFRpbWV6b25lT2Zmc2V0KHRwLnR6LGRhdGVHdWVzczIpO2lmKGRhdGVPZmZzR3Vlc3MyLWRhdGVPZmZzR3Vlc3M9PT0wKXtyZXR1cm4gZGF0ZUd1ZXNzMn1lbHNlIGlmKCF0aHJvd09uSW52YWxpZCYmZGF0ZU9mZnNHdWVzczItZGF0ZU9mZnNHdWVzcz4wKXtyZXR1cm4gZGF0ZUd1ZXNzMn1lbHNlIGlmKCF0aHJvd09uSW52YWxpZCl7cmV0dXJuIGRhdGVHdWVzc31lbHNle3Rocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZSBwYXNzZWQgdG8gZnJvbVRaKClcIil9fX07bWluaXR6LnRvVFo9ZnVuY3Rpb24oZCx0elN0cil7Y29uc3QgbG9jYWxEYXRlU3RyaW5nPWQudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLHt0aW1lWm9uZTp0elN0cn0pLnJlcGxhY2UoL1tcXHUyMDJmXS8sXCIgXCIpO2NvbnN0IHRkPW5ldyBEYXRlKGxvY2FsRGF0ZVN0cmluZyk7cmV0dXJue3k6dGQuZ2V0RnVsbFllYXIoKSxtOnRkLmdldE1vbnRoKCkrMSxkOnRkLmdldERhdGUoKSxoOnRkLmdldEhvdXJzKCksaTp0ZC5nZXRNaW51dGVzKCksczp0ZC5nZXRTZWNvbmRzKCksdHo6dHpTdHJ9fTttaW5pdHoudHA9KHksbSxkLGgsaSxzLHR6KT0+e3JldHVybnt5OnksbTptLGQ6ZCxoOmgsaTppLHM6cyx0ejp0en19O2Z1bmN0aW9uIGdldFRpbWV6b25lT2Zmc2V0KHRpbWVab25lLGRhdGU9bmV3IERhdGUpe2NvbnN0IHR6PWRhdGUudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLHt0aW1lWm9uZTp0aW1lWm9uZSx0aW1lWm9uZU5hbWU6XCJzaG9ydE9mZnNldFwifSkuc3BsaXQoXCIgXCIpLnNsaWNlKC0xKVswXTtjb25zdCBkYXRlU3RyaW5nPWRhdGUudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiKS5yZXBsYWNlKC9bXFx1MjAyZl0vLFwiIFwiKTtyZXR1cm4gRGF0ZS5wYXJzZShgJHtkYXRlU3RyaW5nfSBHTVRgKS1EYXRlLnBhcnNlKGAke2RhdGVTdHJpbmd9ICR7dHp9YCl9ZnVuY3Rpb24gcGFyc2VJU09Mb2NhbChkdFN0cix0eil7Y29uc3QgcGQ9bmV3IERhdGUoRGF0ZS5wYXJzZShkdFN0cikpO2lmKGlzTmFOKHBkKSl7dGhyb3cgbmV3IEVycm9yKFwibWluaXR6OiBJbnZhbGlkIElTTzg2MDEgcGFzc2VkIHRvIHBhcnNlci5cIil9Y29uc3Qgc3RyaW5nRW5kPWR0U3RyLnN1YnN0cmluZyg5KTtpZihkdFN0ci5pbmNsdWRlcyhcIlpcIil8fHN0cmluZ0VuZC5pbmNsdWRlcyhcIi1cIil8fHN0cmluZ0VuZC5pbmNsdWRlcyhcIitcIikpe3JldHVybiBtaW5pdHoudHAocGQuZ2V0VVRDRnVsbFllYXIoKSxwZC5nZXRVVENNb250aCgpKzEscGQuZ2V0VVRDRGF0ZSgpLHBkLmdldFVUQ0hvdXJzKCkscGQuZ2V0VVRDTWludXRlcygpLHBkLmdldFVUQ1NlY29uZHMoKSxcIkV0Yy9VVENcIil9ZWxzZXtyZXR1cm4gbWluaXR6LnRwKHBkLmdldEZ1bGxZZWFyKCkscGQuZ2V0TW9udGgoKSsxLHBkLmdldERhdGUoKSxwZC5nZXRIb3VycygpLHBkLmdldE1pbnV0ZXMoKSxwZC5nZXRTZWNvbmRzKCksdHopfX1taW5pdHoubWluaXR6PW1pbml0ejtmdW5jdGlvbiBDcm9uT3B0aW9ucyhvcHRpb25zKXtpZihvcHRpb25zPT09dm9pZCAwKXtvcHRpb25zPXt9fWRlbGV0ZSBvcHRpb25zLm5hbWU7b3B0aW9ucy5sZWdhY3lNb2RlPW9wdGlvbnMubGVnYWN5TW9kZT09PXZvaWQgMD90cnVlOm9wdGlvbnMubGVnYWN5TW9kZTtvcHRpb25zLnBhdXNlZD1vcHRpb25zLnBhdXNlZD09PXZvaWQgMD9mYWxzZTpvcHRpb25zLnBhdXNlZDtvcHRpb25zLm1heFJ1bnM9b3B0aW9ucy5tYXhSdW5zPT09dm9pZCAwP0luZmluaXR5Om9wdGlvbnMubWF4UnVucztvcHRpb25zLmNhdGNoPW9wdGlvbnMuY2F0Y2g9PT12b2lkIDA/ZmFsc2U6b3B0aW9ucy5jYXRjaDtvcHRpb25zLmludGVydmFsPW9wdGlvbnMuaW50ZXJ2YWw9PT12b2lkIDA/MDpwYXJzZUludChvcHRpb25zLmludGVydmFsLDEwKTtvcHRpb25zLnV0Y09mZnNldD1vcHRpb25zLnV0Y09mZnNldD09PXZvaWQgMD92b2lkIDA6cGFyc2VJbnQob3B0aW9ucy51dGNPZmZzZXQsMTApO29wdGlvbnMudW5yZWY9b3B0aW9ucy51bnJlZj09PXZvaWQgMD9mYWxzZTpvcHRpb25zLnVucmVmO2lmKG9wdGlvbnMuc3RhcnRBdCl7b3B0aW9ucy5zdGFydEF0PW5ldyBDcm9uRGF0ZShvcHRpb25zLnN0YXJ0QXQsb3B0aW9ucy50aW1lem9uZSl9aWYob3B0aW9ucy5zdG9wQXQpe29wdGlvbnMuc3RvcEF0PW5ldyBDcm9uRGF0ZShvcHRpb25zLnN0b3BBdCxvcHRpb25zLnRpbWV6b25lKX1pZihvcHRpb25zLmludGVydmFsIT09bnVsbCl7aWYoaXNOYU4ob3B0aW9ucy5pbnRlcnZhbCkpe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgaXMgbm90IGEgbnVtYmVyXCIpfWVsc2UgaWYob3B0aW9ucy5pbnRlcnZhbDwwKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uT3B0aW9uczogU3VwcGxpZWQgdmFsdWUgZm9yIGludGVydmFsIGNhbiBub3QgYmUgbmVnYXRpdmVcIil9fWlmKG9wdGlvbnMudXRjT2Zmc2V0IT09dm9pZCAwKXtpZihpc05hTihvcHRpb25zLnV0Y09mZnNldCkpe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiBJbnZhbGlkIHZhbHVlIHBhc3NlZCBmb3IgdXRjT2Zmc2V0LCBzaG91bGQgYmUgbnVtYmVyIHJlcHJlc2VudGluZyBtaW51dGVzIG9mZnNldCBmcm9tIFVUQy5cIil9ZWxzZSBpZihvcHRpb25zLnV0Y09mZnNldDwtODcwfHxvcHRpb25zLnV0Y09mZnNldD44NzApe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiB1dGNPZmZzZXQgb3V0IG9mIGJvdW5kcy5cIil9aWYob3B0aW9ucy51dGNPZmZzZXQhPT12b2lkIDAmJm9wdGlvbnMudGltZXpvbmUpe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiBDb21iaW5pbmcgJ3V0Y09mZnNldCcgd2l0aCAndGltZXpvbmUnIGlzIG5vdCBhbGxvd2VkLlwiKX19aWYob3B0aW9ucy51bnJlZiE9PXRydWUmJm9wdGlvbnMudW5yZWYhPT1mYWxzZSl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IFVucmVmIHNob3VsZCBiZSBlaXRoZXIgdHJ1ZSwgZmFsc2Ugb3IgdW5kZWZpbmVkKGZhbHNlKS5cIil9cmV0dXJuIG9wdGlvbnN9Y29uc3QgTEFTVF9PQ0NVUlJFTkNFPTMyO2NvbnN0IEFOWV9PQ0NVUlJFTkNFPTF8Mnw0fDh8MTZ8TEFTVF9PQ0NVUlJFTkNFO2NvbnN0IE9DQ1VSUkVOQ0VfQklUTUFTS1M9WzEsMiw0LDgsMTZdO2Z1bmN0aW9uIENyb25QYXR0ZXJuKHBhdHRlcm4sdGltZXpvbmUpe3RoaXMucGF0dGVybj1wYXR0ZXJuO3RoaXMudGltZXpvbmU9dGltZXpvbmU7dGhpcy5zZWNvbmQ9QXJyYXkoNjApLmZpbGwoMCk7dGhpcy5taW51dGU9QXJyYXkoNjApLmZpbGwoMCk7dGhpcy5ob3VyPUFycmF5KDI0KS5maWxsKDApO3RoaXMuZGF5PUFycmF5KDMxKS5maWxsKDApO3RoaXMubW9udGg9QXJyYXkoMTIpLmZpbGwoMCk7dGhpcy5kYXlPZldlZWs9QXJyYXkoNykuZmlsbCgwKTt0aGlzLmxhc3REYXlPZk1vbnRoPWZhbHNlO3RoaXMuc3RhckRPTT1mYWxzZTt0aGlzLnN0YXJET1c9ZmFsc2U7dGhpcy5wYXJzZSgpfUNyb25QYXR0ZXJuLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbigpe2lmKCEodHlwZW9mIHRoaXMucGF0dGVybj09PVwic3RyaW5nXCJ8fHRoaXMucGF0dGVybi5jb25zdHJ1Y3Rvcj09PVN0cmluZykpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogUGF0dGVybiBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcuXCIpfWlmKHRoaXMucGF0dGVybi5pbmRleE9mKFwiQFwiKT49MCl0aGlzLnBhdHRlcm49dGhpcy5oYW5kbGVOaWNrbmFtZXModGhpcy5wYXR0ZXJuKS50cmltKCk7Y29uc3QgcGFydHM9dGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xccysvZyxcIiBcIikuc3BsaXQoXCIgXCIpO2lmKHBhcnRzLmxlbmd0aDw1fHxwYXJ0cy5sZW5ndGg+Nil7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gZm9ybWF0ICgnXCIrdGhpcy5wYXR0ZXJuK1wiJyksIGV4YWN0bHkgZml2ZSBvciBzaXggc3BhY2Ugc2VwYXJhdGVkIHBhcnRzIGFyZSByZXF1aXJlZC5cIil9aWYocGFydHMubGVuZ3RoPT09NSl7cGFydHMudW5zaGlmdChcIjBcIil9aWYocGFydHNbM10uaW5kZXhPZihcIkxcIik+PTApe3BhcnRzWzNdPXBhcnRzWzNdLnJlcGxhY2UoXCJMXCIsXCJcIik7dGhpcy5sYXN0RGF5T2ZNb250aD10cnVlfWlmKHBhcnRzWzNdPT1cIipcIil7dGhpcy5zdGFyRE9NPXRydWV9aWYocGFydHNbNF0ubGVuZ3RoPj0zKXBhcnRzWzRdPXRoaXMucmVwbGFjZUFscGhhTW9udGhzKHBhcnRzWzRdKTtpZihwYXJ0c1s1XS5sZW5ndGg+PTMpcGFydHNbNV09dGhpcy5yZXBsYWNlQWxwaGFEYXlzKHBhcnRzWzVdKTtpZihwYXJ0c1s1XT09XCIqXCIpe3RoaXMuc3RhckRPVz10cnVlfWlmKHRoaXMucGF0dGVybi5pbmRleE9mKFwiP1wiKT49MCl7Y29uc3QgaW5pdERhdGU9bmV3IENyb25EYXRlKG5ldyBEYXRlLHRoaXMudGltZXpvbmUpLmdldERhdGUodHJ1ZSk7cGFydHNbMF09cGFydHNbMF0ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXRTZWNvbmRzKCkpO3BhcnRzWzFdPXBhcnRzWzFdLnJlcGxhY2UoXCI/XCIsaW5pdERhdGUuZ2V0TWludXRlcygpKTtwYXJ0c1syXT1wYXJ0c1syXS5yZXBsYWNlKFwiP1wiLGluaXREYXRlLmdldEhvdXJzKCkpO2lmKCF0aGlzLnN0YXJET00pcGFydHNbM109cGFydHNbM10ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXREYXRlKCkpO3BhcnRzWzRdPXBhcnRzWzRdLnJlcGxhY2UoXCI/XCIsaW5pdERhdGUuZ2V0TW9udGgoKSsxKTtpZighdGhpcy5zdGFyRE9XKXBhcnRzWzVdPXBhcnRzWzVdLnJlcGxhY2UoXCI/XCIsaW5pdERhdGUuZ2V0RGF5KCkpfXRoaXMudGhyb3dBdElsbGVnYWxDaGFyYWN0ZXJzKHBhcnRzKTt0aGlzLnBhcnRUb0FycmF5KFwic2Vjb25kXCIscGFydHNbMF0sMCwxKTt0aGlzLnBhcnRUb0FycmF5KFwibWludXRlXCIscGFydHNbMV0sMCwxKTt0aGlzLnBhcnRUb0FycmF5KFwiaG91clwiLHBhcnRzWzJdLDAsMSk7dGhpcy5wYXJ0VG9BcnJheShcImRheVwiLHBhcnRzWzNdLC0xLDEpO3RoaXMucGFydFRvQXJyYXkoXCJtb250aFwiLHBhcnRzWzRdLC0xLDEpO3RoaXMucGFydFRvQXJyYXkoXCJkYXlPZldlZWtcIixwYXJ0c1s1XSwwLEFOWV9PQ0NVUlJFTkNFKTtpZih0aGlzLmRheU9mV2Vla1s3XSl7dGhpcy5kYXlPZldlZWtbMF09dGhpcy5kYXlPZldlZWtbN119fTtDcm9uUGF0dGVybi5wcm90b3R5cGUucGFydFRvQXJyYXk9ZnVuY3Rpb24odHlwZSxjb25mLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCBhcnI9dGhpc1t0eXBlXTtjb25zdCBsYXN0RGF5T2ZNb250aD10eXBlPT09XCJkYXlcIiYmdGhpcy5sYXN0RGF5T2ZNb250aDtpZihjb25mPT09XCJcIiYmIWxhc3REYXlPZk1vbnRoKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogY29uZmlndXJhdGlvbiBlbnRyeSBcIit0eXBlK1wiIChcIitjb25mK1wiKSBpcyBlbXB0eSwgY2hlY2sgZm9yIHRyYWlsaW5nIHNwYWNlcy5cIik7aWYoY29uZj09PVwiKlwiKXJldHVybiBhcnIuZmlsbChkZWZhdWx0VmFsdWUpO2NvbnN0IHNwbGl0PWNvbmYuc3BsaXQoXCIsXCIpO2lmKHNwbGl0Lmxlbmd0aD4xKXtmb3IobGV0IGk9MDtpPHNwbGl0Lmxlbmd0aDtpKyspe3RoaXMucGFydFRvQXJyYXkodHlwZSxzcGxpdFtpXSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl9fWVsc2UgaWYoY29uZi5pbmRleE9mKFwiLVwiKSE9PS0xJiZjb25mLmluZGV4T2YoXCIvXCIpIT09LTEpe3RoaXMuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcoY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKX1lbHNlIGlmKGNvbmYuaW5kZXhPZihcIi1cIikhPT0tMSl7dGhpcy5oYW5kbGVSYW5nZShjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpfWVsc2UgaWYoY29uZi5pbmRleE9mKFwiL1wiKSE9PS0xKXt0aGlzLmhhbmRsZVN0ZXBwaW5nKGNvbmYsdHlwZSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl9ZWxzZSBpZihjb25mIT09XCJcIil7dGhpcy5oYW5kbGVOdW1iZXIoY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKX19O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS50aHJvd0F0SWxsZWdhbENoYXJhY3RlcnM9ZnVuY3Rpb24ocGFydHMpe2ZvcihsZXQgaT0wO2k8cGFydHMubGVuZ3RoO2krKyl7Y29uc3QgcmVWYWxpZENyb249aT09PTU/L1teLyowLTksXFwtI0xdKy86L1teLyowLTksLV0rLztpZihyZVZhbGlkQ3Jvbi50ZXN0KHBhcnRzW2ldKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5IFwiK2krXCIgKFwiK3BhcnRzW2ldK1wiKSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMuXCIpfX19O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5oYW5kbGVOdW1iZXI9ZnVuY3Rpb24oY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCByZXN1bHQ9dGhpcy5leHRyYWN0TnRoKGNvbmYsdHlwZSk7Y29uc3QgaT1wYXJzZUludChyZXN1bHRbMF0sMTApK3ZhbHVlSW5kZXhPZmZzZXQ7aWYoaXNOYU4oaSkpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogXCIrdHlwZStcIiBpcyBub3QgYSBudW1iZXI6ICdcIitjb25mK1wiJ1wiKX10aGlzLnNldFBhcnQodHlwZSxpLHJlc3VsdFsxXXx8ZGVmYXVsdFZhbHVlKX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnNldFBhcnQ9ZnVuY3Rpb24ocGFydCxpbmRleCx2YWx1ZSl7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLHBhcnQpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IEludmFsaWQgcGFydCBzcGVjaWZpZWQ6IFwiK3BhcnQpfWlmKHBhcnQ9PT1cImRheU9mV2Vla1wiKXtpZihpbmRleD09PTcpaW5kZXg9MDtpZigoaW5kZXg8MHx8aW5kZXg+NikmJmluZGV4IT09XCJMXCIpe3Rocm93IG5ldyBSYW5nZUVycm9yKFwiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yIGRheU9mV2VlazogXCIraW5kZXgpfXRoaXMuc2V0TnRoV2Vla2RheU9mTW9udGgoaW5kZXgsdmFsdWUpO3JldHVybn1pZihwYXJ0PT09XCJzZWNvbmRcInx8cGFydD09PVwibWludXRlXCIpe2lmKGluZGV4PDB8fGluZGV4Pj02MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgXCIrcGFydCtcIjogXCIraW5kZXgpfX1lbHNlIGlmKHBhcnQ9PT1cImhvdXJcIil7aWYoaW5kZXg8MHx8aW5kZXg+PTI0KXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIitwYXJ0K1wiOiBcIitpbmRleCl9fWVsc2UgaWYocGFydD09PVwiZGF5XCIpe2lmKGluZGV4PDB8fGluZGV4Pj0zMSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgXCIrcGFydCtcIjogXCIraW5kZXgpfX1lbHNlIGlmKHBhcnQ9PT1cIm1vbnRoXCIpe2lmKGluZGV4PDB8fGluZGV4Pj0xMil7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgXCIrcGFydCtcIjogXCIraW5kZXgpfX10aGlzW3BhcnRdW2luZGV4XT12YWx1ZX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmhhbmRsZVJhbmdlV2l0aFN0ZXBwaW5nPWZ1bmN0aW9uKGNvbmYsdHlwZSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl7Y29uc3QgcmVzdWx0PXRoaXMuZXh0cmFjdE50aChjb25mLHR5cGUpO2NvbnN0IG1hdGNoZXM9cmVzdWx0WzBdLm1hdGNoKC9eKFxcZCspLShcXGQrKVxcLyhcXGQrKSQvKTtpZihtYXRjaGVzPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZSB3aXRoIHN0ZXBwaW5nOiAnXCIrY29uZitcIidcIik7bGV0Wyxsb3dlcix1cHBlcixzdGVwc109bWF0Y2hlcztsb3dlcj1wYXJzZUludChsb3dlciwxMCkrdmFsdWVJbmRleE9mZnNldDt1cHBlcj1wYXJzZUludCh1cHBlciwxMCkrdmFsdWVJbmRleE9mZnNldDtzdGVwcz1wYXJzZUludChzdGVwcywxMCk7aWYoaXNOYU4obG93ZXIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pXCIpO2lmKGlzTmFOKHVwcGVyKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKVwiKTtpZihpc05hTihzdGVwcykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IChOYU4pXCIpO2lmKHN0ZXBzPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMFwiKTtpZihzdGVwcz50aGlzW3R5cGVdLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgc3RlcHMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIHZhbHVlIG9mIHBhcnQgKFwiK3RoaXNbdHlwZV0ubGVuZ3RoK1wiKVwiKTtpZihsb3dlcj51cHBlcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IEZyb20gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdG8gdmFsdWU6ICdcIitjb25mK1wiJ1wiKTtmb3IobGV0IGk9bG93ZXI7aTw9dXBwZXI7aSs9c3RlcHMpe3RoaXMuc2V0UGFydCh0eXBlLGkscmVzdWx0WzFdfHxkZWZhdWx0VmFsdWUpfX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmV4dHJhY3ROdGg9ZnVuY3Rpb24oY29uZix0eXBlKXtsZXQgcmVzdD1jb25mO2xldCBudGg7aWYocmVzdC5pbmNsdWRlcyhcIiNcIikpe2lmKHR5cGUhPT1cImRheU9mV2Vla1wiKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uUGF0dGVybjogbnRoICgjKSBvbmx5IGFsbG93ZWQgaW4gZGF5LW9mLXdlZWsgZmllbGRcIil9bnRoPXJlc3Quc3BsaXQoXCIjXCIpWzFdO3Jlc3Q9cmVzdC5zcGxpdChcIiNcIilbMF19cmV0dXJuW3Jlc3QsbnRoXX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmhhbmRsZVJhbmdlPWZ1bmN0aW9uKGNvbmYsdHlwZSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl7Y29uc3QgcmVzdWx0PXRoaXMuZXh0cmFjdE50aChjb25mLHR5cGUpO2NvbnN0IHNwbGl0PXJlc3VsdFswXS5zcGxpdChcIi1cIik7aWYoc3BsaXQubGVuZ3RoIT09Mil7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgcmFuZ2U6ICdcIitjb25mK1wiJ1wiKX1jb25zdCBsb3dlcj1wYXJzZUludChzcGxpdFswXSwxMCkrdmFsdWVJbmRleE9mZnNldCx1cHBlcj1wYXJzZUludChzcGxpdFsxXSwxMCkrdmFsdWVJbmRleE9mZnNldDtpZihpc05hTihsb3dlcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pXCIpfWVsc2UgaWYoaXNOYU4odXBwZXIpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCB1cHBlciByYW5nZSAoTmFOKVwiKX1pZihsb3dlcj51cHBlcil7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBGcm9tIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRvIHZhbHVlOiAnXCIrY29uZitcIidcIil9Zm9yKGxldCBpPWxvd2VyO2k8PXVwcGVyO2krKyl7dGhpcy5zZXRQYXJ0KHR5cGUsaSxyZXN1bHRbMV18fGRlZmF1bHRWYWx1ZSl9fTtDcm9uUGF0dGVybi5wcm90b3R5cGUuaGFuZGxlU3RlcHBpbmc9ZnVuY3Rpb24oY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCByZXN1bHQ9dGhpcy5leHRyYWN0TnRoKGNvbmYsdHlwZSk7Y29uc3Qgc3BsaXQ9cmVzdWx0WzBdLnNwbGl0KFwiL1wiKTtpZihzcGxpdC5sZW5ndGghPT0yKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogJ1wiK2NvbmYrXCInXCIpfWxldCBzdGFydD0wO2lmKHNwbGl0WzBdIT09XCIqXCIpe3N0YXJ0PXBhcnNlSW50KHNwbGl0WzBdLDEwKSt2YWx1ZUluZGV4T2Zmc2V0fWNvbnN0IHN0ZXBzPXBhcnNlSW50KHNwbGl0WzFdLDEwKTtpZihpc05hTihzdGVwcykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6IChOYU4pXCIpO2lmKHN0ZXBzPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMFwiKTtpZihzdGVwcz50aGlzW3R5cGVdLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgbWF4IHN0ZXBzIGZvciBwYXJ0IGlzIChcIit0aGlzW3R5cGVdLmxlbmd0aCtcIilcIik7Zm9yKGxldCBpPXN0YXJ0O2k8dGhpc1t0eXBlXS5sZW5ndGg7aSs9c3RlcHMpe3RoaXMuc2V0UGFydCh0eXBlLGkscmVzdWx0WzFdfHxkZWZhdWx0VmFsdWUpfX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnJlcGxhY2VBbHBoYURheXM9ZnVuY3Rpb24oY29uZil7cmV0dXJuIGNvbmYucmVwbGFjZSgvLXN1bi9naSxcIi03XCIpLnJlcGxhY2UoL3N1bi9naSxcIjBcIikucmVwbGFjZSgvbW9uL2dpLFwiMVwiKS5yZXBsYWNlKC90dWUvZ2ksXCIyXCIpLnJlcGxhY2UoL3dlZC9naSxcIjNcIikucmVwbGFjZSgvdGh1L2dpLFwiNFwiKS5yZXBsYWNlKC9mcmkvZ2ksXCI1XCIpLnJlcGxhY2UoL3NhdC9naSxcIjZcIil9O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5yZXBsYWNlQWxwaGFNb250aHM9ZnVuY3Rpb24oY29uZil7cmV0dXJuIGNvbmYucmVwbGFjZSgvamFuL2dpLFwiMVwiKS5yZXBsYWNlKC9mZWIvZ2ksXCIyXCIpLnJlcGxhY2UoL21hci9naSxcIjNcIikucmVwbGFjZSgvYXByL2dpLFwiNFwiKS5yZXBsYWNlKC9tYXkvZ2ksXCI1XCIpLnJlcGxhY2UoL2p1bi9naSxcIjZcIikucmVwbGFjZSgvanVsL2dpLFwiN1wiKS5yZXBsYWNlKC9hdWcvZ2ksXCI4XCIpLnJlcGxhY2UoL3NlcC9naSxcIjlcIikucmVwbGFjZSgvb2N0L2dpLFwiMTBcIikucmVwbGFjZSgvbm92L2dpLFwiMTFcIikucmVwbGFjZSgvZGVjL2dpLFwiMTJcIil9O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5oYW5kbGVOaWNrbmFtZXM9ZnVuY3Rpb24ocGF0dGVybil7Y29uc3QgY2xlYW5QYXR0ZXJuPXBhdHRlcm4udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoY2xlYW5QYXR0ZXJuPT09XCJAeWVhcmx5XCJ8fGNsZWFuUGF0dGVybj09PVwiQGFubnVhbGx5XCIpe3JldHVyblwiMCAwIDEgMSAqXCJ9ZWxzZSBpZihjbGVhblBhdHRlcm49PT1cIkBtb250aGx5XCIpe3JldHVyblwiMCAwIDEgKiAqXCJ9ZWxzZSBpZihjbGVhblBhdHRlcm49PT1cIkB3ZWVrbHlcIil7cmV0dXJuXCIwIDAgKiAqIDBcIn1lbHNlIGlmKGNsZWFuUGF0dGVybj09PVwiQGRhaWx5XCIpe3JldHVyblwiMCAwICogKiAqXCJ9ZWxzZSBpZihjbGVhblBhdHRlcm49PT1cIkBob3VybHlcIil7cmV0dXJuXCIwICogKiAqICpcIn1lbHNle3JldHVybiBwYXR0ZXJufX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnNldE50aFdlZWtkYXlPZk1vbnRoPWZ1bmN0aW9uKGluZGV4LG50aFdlZWtkYXkpe2lmKG50aFdlZWtkYXk9PT1cIkxcIil7dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF09dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF18TEFTVF9PQ0NVUlJFTkNFfWVsc2UgaWYobnRoV2Vla2RheTw2JiZudGhXZWVrZGF5PjApe3RoaXNbXCJkYXlPZldlZWtcIl1baW5kZXhdPXRoaXNbXCJkYXlPZldlZWtcIl1baW5kZXhdfE9DQ1VSUkVOQ0VfQklUTUFTS1NbbnRoV2Vla2RheS0xXX1lbHNlIGlmKG50aFdlZWtkYXk9PT1BTllfT0NDVVJSRU5DRSl7dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF09QU5ZX09DQ1VSUkVOQ0V9ZWxzZXt0aHJvdyBuZXcgVHlwZUVycm9yKGBDcm9uUGF0dGVybjogbnRoIHdlZWtkYXkgb2Ygb2YgcmFuZ2UsIHNob3VsZCBiZSAxLTUgb3IgTC4gVmFsdWU6ICR7bnRoV2Vla2RheX1gKX19O2NvbnN0IERheXNPZk1vbnRoPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07Y29uc3QgUmVjdXJzaW9uU3RlcHM9W1tcIm1vbnRoXCIsXCJ5ZWFyXCIsMF0sW1wiZGF5XCIsXCJtb250aFwiLC0xXSxbXCJob3VyXCIsXCJkYXlcIiwwXSxbXCJtaW51dGVcIixcImhvdXJcIiwwXSxbXCJzZWNvbmRcIixcIm1pbnV0ZVwiLDBdXTtmdW5jdGlvbiBDcm9uRGF0ZShkLHR6KXt0aGlzLnR6PXR6O2lmKGQmJmQgaW5zdGFuY2VvZiBEYXRlKXtpZighaXNOYU4oZCkpe3RoaXMuZnJvbURhdGUoZCl9ZWxzZXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvbkRhdGU6IEludmFsaWQgZGF0ZSBwYXNzZWQgdG8gQ3JvbkRhdGUgY29uc3RydWN0b3JcIil9fWVsc2UgaWYoZD09PXZvaWQgMCl7dGhpcy5mcm9tRGF0ZShuZXcgRGF0ZSl9ZWxzZSBpZihkJiZ0eXBlb2YgZD09PVwic3RyaW5nXCIpe3RoaXMuZnJvbVN0cmluZyhkKX1lbHNlIGlmKGQgaW5zdGFuY2VvZiBDcm9uRGF0ZSl7dGhpcy5mcm9tQ3JvbkRhdGUoZCl9ZWxzZXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvbkRhdGU6IEludmFsaWQgdHlwZSAoXCIrdHlwZW9mIGQrXCIpIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvclwiKX19Q3JvbkRhdGUucHJvdG90eXBlLmlzTnRoV2Vla2RheU9mTW9udGg9ZnVuY3Rpb24oeWVhcixtb250aCxkYXksbnRoKXtjb25zdCBkYXRlPW5ldyBEYXRlKERhdGUuVVRDKHllYXIsbW9udGgsZGF5KSk7Y29uc3Qgd2Vla2RheT1kYXRlLmdldFVUQ0RheSgpO2xldCBjb3VudD0wO2ZvcihsZXQgZD0xO2Q8PWRheTtkKyspe2lmKG5ldyBEYXRlKERhdGUuVVRDKHllYXIsbW9udGgsZCkpLmdldFVUQ0RheSgpPT09d2Vla2RheSl7Y291bnQrK319aWYobnRoJkFOWV9PQ0NVUlJFTkNFJiZPQ0NVUlJFTkNFX0JJVE1BU0tTW2NvdW50LTFdJm50aCl7cmV0dXJuIHRydWV9aWYobnRoJkxBU1RfT0NDVVJSRU5DRSl7Y29uc3QgZGF5c0luTW9udGg9bmV3IERhdGUoRGF0ZS5VVEMoeWVhcixtb250aCsxLDApKS5nZXRVVENEYXRlKCk7Zm9yKGxldCBkPWRheSsxO2Q8PWRheXNJbk1vbnRoO2QrKyl7aWYobmV3IERhdGUoRGF0ZS5VVEMoeWVhcixtb250aCxkKSkuZ2V0VVRDRGF5KCk9PT13ZWVrZGF5KXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfXJldHVybiBmYWxzZX07Q3JvbkRhdGUucHJvdG90eXBlLmZyb21EYXRlPWZ1bmN0aW9uKGluRGF0ZSl7aWYodGhpcy50eiE9PXZvaWQgMCl7aWYodHlwZW9mIHRoaXMudHo9PT1cIm51bWJlclwiKXt0aGlzLm1zPWluRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1pbkRhdGUuZ2V0VVRDU2Vjb25kcygpO3RoaXMubWludXRlPWluRGF0ZS5nZXRVVENNaW51dGVzKCkrdGhpcy50ejt0aGlzLmhvdXI9aW5EYXRlLmdldFVUQ0hvdXJzKCk7dGhpcy5kYXk9aW5EYXRlLmdldFVUQ0RhdGUoKTt0aGlzLm1vbnRoPWluRGF0ZS5nZXRVVENNb250aCgpO3RoaXMueWVhcj1pbkRhdGUuZ2V0VVRDRnVsbFllYXIoKTt0aGlzLmFwcGx5KCl9ZWxzZXtjb25zdCBkPW1pbml0ei50b1RaKGluRGF0ZSx0aGlzLnR6KTt0aGlzLm1zPWluRGF0ZS5nZXRNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1kLnM7dGhpcy5taW51dGU9ZC5pO3RoaXMuaG91cj1kLmg7dGhpcy5kYXk9ZC5kO3RoaXMubW9udGg9ZC5tLTE7dGhpcy55ZWFyPWQueX19ZWxzZXt0aGlzLm1zPWluRGF0ZS5nZXRNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1pbkRhdGUuZ2V0U2Vjb25kcygpO3RoaXMubWludXRlPWluRGF0ZS5nZXRNaW51dGVzKCk7dGhpcy5ob3VyPWluRGF0ZS5nZXRIb3VycygpO3RoaXMuZGF5PWluRGF0ZS5nZXREYXRlKCk7dGhpcy5tb250aD1pbkRhdGUuZ2V0TW9udGgoKTt0aGlzLnllYXI9aW5EYXRlLmdldEZ1bGxZZWFyKCl9fTtDcm9uRGF0ZS5wcm90b3R5cGUuZnJvbUNyb25EYXRlPWZ1bmN0aW9uKGQpe3RoaXMudHo9ZC50ejt0aGlzLnllYXI9ZC55ZWFyO3RoaXMubW9udGg9ZC5tb250aDt0aGlzLmRheT1kLmRheTt0aGlzLmhvdXI9ZC5ob3VyO3RoaXMubWludXRlPWQubWludXRlO3RoaXMuc2Vjb25kPWQuc2Vjb25kO3RoaXMubXM9ZC5tc307Q3JvbkRhdGUucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7aWYodGhpcy5tb250aD4xMXx8dGhpcy5kYXk+RGF5c09mTW9udGhbdGhpcy5tb250aF18fHRoaXMuaG91cj41OXx8dGhpcy5taW51dGU+NTl8fHRoaXMuc2Vjb25kPjU5fHx0aGlzLmhvdXI8MHx8dGhpcy5taW51dGU8MHx8dGhpcy5zZWNvbmQ8MCl7Y29uc3QgZD1uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUsdGhpcy5zZWNvbmQsdGhpcy5tcykpO3RoaXMubXM9ZC5nZXRVVENNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1kLmdldFVUQ1NlY29uZHMoKTt0aGlzLm1pbnV0ZT1kLmdldFVUQ01pbnV0ZXMoKTt0aGlzLmhvdXI9ZC5nZXRVVENIb3VycygpO3RoaXMuZGF5PWQuZ2V0VVRDRGF0ZSgpO3RoaXMubW9udGg9ZC5nZXRVVENNb250aCgpO3RoaXMueWVhcj1kLmdldFVUQ0Z1bGxZZWFyKCk7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtDcm9uRGF0ZS5wcm90b3R5cGUuZnJvbVN0cmluZz1mdW5jdGlvbihzdHIpe2lmKHR5cGVvZiB0aGlzLnR6PT09XCJudW1iZXJcIil7Y29uc3QgaW5EYXRlPW1pbml0ei5mcm9tVFpJU08oc3RyKTt0aGlzLm1zPWluRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTt0aGlzLnNlY29uZD1pbkRhdGUuZ2V0VVRDU2Vjb25kcygpO3RoaXMubWludXRlPWluRGF0ZS5nZXRVVENNaW51dGVzKCk7dGhpcy5ob3VyPWluRGF0ZS5nZXRVVENIb3VycygpO3RoaXMuZGF5PWluRGF0ZS5nZXRVVENEYXRlKCk7dGhpcy5tb250aD1pbkRhdGUuZ2V0VVRDTW9udGgoKTt0aGlzLnllYXI9aW5EYXRlLmdldFVUQ0Z1bGxZZWFyKCk7dGhpcy5hcHBseSgpfWVsc2V7cmV0dXJuIHRoaXMuZnJvbURhdGUobWluaXR6LmZyb21UWklTTyhzdHIsdGhpcy50eikpfX07Q3JvbkRhdGUucHJvdG90eXBlLmZpbmROZXh0PWZ1bmN0aW9uKG9wdGlvbnMsdGFyZ2V0LHBhdHRlcm4sb2Zmc2V0KXtjb25zdCBvcmlnaW5hbFRhcmdldD10aGlzW3RhcmdldF07bGV0IGxhc3REYXlPZk1vbnRoO2lmKHBhdHRlcm4ubGFzdERheU9mTW9udGgpe2lmKHRoaXMubW9udGghPT0xKXtsYXN0RGF5T2ZNb250aD1EYXlzT2ZNb250aFt0aGlzLm1vbnRoXX1lbHNle2xhc3REYXlPZk1vbnRoPW5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhcix0aGlzLm1vbnRoKzEsMCwwLDAsMCwwKSkuZ2V0VVRDRGF0ZSgpfX1jb25zdCBmRG9tV2Vla0RheT0hcGF0dGVybi5zdGFyRE9XJiZ0YXJnZXQ9PVwiZGF5XCI/bmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLHRoaXMubW9udGgsMSwwLDAsMCwwKSkuZ2V0VVRDRGF5KCk6dW5kZWZpbmVkO2ZvcihsZXQgaT10aGlzW3RhcmdldF0rb2Zmc2V0O2k8cGF0dGVyblt0YXJnZXRdLmxlbmd0aDtpKyspe2xldCBtYXRjaD1wYXR0ZXJuW3RhcmdldF1baV07aWYodGFyZ2V0PT09XCJkYXlcIiYmcGF0dGVybi5sYXN0RGF5T2ZNb250aCYmaS1vZmZzZXQ9PWxhc3REYXlPZk1vbnRoKXttYXRjaD10cnVlfWlmKHRhcmdldD09PVwiZGF5XCImJiFwYXR0ZXJuLnN0YXJET1cpe2xldCBkb3dNYXRjaD1wYXR0ZXJuLmRheU9mV2Vla1soZkRvbVdlZWtEYXkrKGktb2Zmc2V0LTEpKSU3XTtpZihkb3dNYXRjaCYmZG93TWF0Y2gmQU5ZX09DQ1VSUkVOQ0Upe2Rvd01hdGNoPXRoaXMuaXNOdGhXZWVrZGF5T2ZNb250aCh0aGlzLnllYXIsdGhpcy5tb250aCxpLW9mZnNldCxkb3dNYXRjaCl9ZWxzZSBpZihkb3dNYXRjaCl7dGhyb3cgbmV3IEVycm9yKGBDcm9uRGF0ZTogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrIGVuY291bnRlcmVkLiAke2Rvd01hdGNofWApfWlmKG9wdGlvbnMubGVnYWN5TW9kZSYmIXBhdHRlcm4uc3RhckRPTSl7bWF0Y2g9bWF0Y2h8fGRvd01hdGNofWVsc2V7bWF0Y2g9bWF0Y2gmJmRvd01hdGNofX1pZihtYXRjaCl7dGhpc1t0YXJnZXRdPWktb2Zmc2V0O3JldHVybiBvcmlnaW5hbFRhcmdldCE9PXRoaXNbdGFyZ2V0XT8yOjF9fXJldHVybiAzfTtDcm9uRGF0ZS5wcm90b3R5cGUucmVjdXJzZT1mdW5jdGlvbihwYXR0ZXJuLG9wdGlvbnMsZG9pbmcpe2NvbnN0IHJlcz10aGlzLmZpbmROZXh0KG9wdGlvbnMsUmVjdXJzaW9uU3RlcHNbZG9pbmddWzBdLHBhdHRlcm4sUmVjdXJzaW9uU3RlcHNbZG9pbmddWzJdKTtpZihyZXM+MSl7bGV0IHJlc2V0TGV2ZWw9ZG9pbmcrMTt3aGlsZShyZXNldExldmVsPFJlY3Vyc2lvblN0ZXBzLmxlbmd0aCl7dGhpc1tSZWN1cnNpb25TdGVwc1tyZXNldExldmVsXVswXV09LVJlY3Vyc2lvblN0ZXBzW3Jlc2V0TGV2ZWxdWzJdO3Jlc2V0TGV2ZWwrK31pZihyZXM9PT0zKXt0aGlzW1JlY3Vyc2lvblN0ZXBzW2RvaW5nXVsxXV0rKzt0aGlzW1JlY3Vyc2lvblN0ZXBzW2RvaW5nXVswXV09LVJlY3Vyc2lvblN0ZXBzW2RvaW5nXVsyXTt0aGlzLmFwcGx5KCk7cmV0dXJuIHRoaXMucmVjdXJzZShwYXR0ZXJuLG9wdGlvbnMsMCl9ZWxzZSBpZih0aGlzLmFwcGx5KCkpe3JldHVybiB0aGlzLnJlY3Vyc2UocGF0dGVybixvcHRpb25zLGRvaW5nLTEpfX1kb2luZys9MTtpZihkb2luZz49UmVjdXJzaW9uU3RlcHMubGVuZ3RoKXtyZXR1cm4gdGhpc31lbHNlIGlmKHRoaXMueWVhcj49M2UzKXtyZXR1cm4gbnVsbH1lbHNle3JldHVybiB0aGlzLnJlY3Vyc2UocGF0dGVybixvcHRpb25zLGRvaW5nKX19O0Nyb25EYXRlLnByb3RvdHlwZS5pbmNyZW1lbnQ9ZnVuY3Rpb24ocGF0dGVybixvcHRpb25zLGhhc1ByZXZpb3VzUnVuKXt0aGlzLnNlY29uZCs9b3B0aW9ucy5pbnRlcnZhbD4xJiZoYXNQcmV2aW91c1J1bj9vcHRpb25zLmludGVydmFsOjE7dGhpcy5tcz0wO3RoaXMuYXBwbHkoKTtyZXR1cm4gdGhpcy5yZWN1cnNlKHBhdHRlcm4sb3B0aW9ucywwKX07Q3JvbkRhdGUucHJvdG90eXBlLmdldERhdGU9ZnVuY3Rpb24oaW50ZXJuYWwpe2lmKGludGVybmFsfHx0aGlzLnR6PT09dm9pZCAwKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXksdGhpcy5ob3VyLHRoaXMubWludXRlLHRoaXMuc2Vjb25kLHRoaXMubXMpfWVsc2V7aWYodHlwZW9mIHRoaXMudHo9PT1cIm51bWJlclwiKXtyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXksdGhpcy5ob3VyLHRoaXMubWludXRlLXRoaXMudHosdGhpcy5zZWNvbmQsdGhpcy5tcykpfWVsc2V7cmV0dXJuIG1pbml0eih0aGlzLnllYXIsdGhpcy5tb250aCsxLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZSx0aGlzLnNlY29uZCx0aGlzLnR6KX19fTtDcm9uRGF0ZS5wcm90b3R5cGUuZ2V0VGltZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldERhdGUoKS5nZXRUaW1lKCl9O2Z1bmN0aW9uIGlzRnVuY3Rpb24odil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KT09PVwiW29iamVjdCBGdW5jdGlvbl1cInx8XCJmdW5jdGlvblwiPT09dHlwZW9mIHZ8fHYgaW5zdGFuY2VvZiBGdW5jdGlvbn1mdW5jdGlvbiB1bnJlZlRpbWVyKHRpbWVyKXtpZih0eXBlb2YgRGVubyE9PVwidW5kZWZpbmVkXCImJnR5cGVvZiBEZW5vLnVucmVmVGltZXIhPT1cInVuZGVmaW5lZFwiKXtEZW5vLnVucmVmVGltZXIodGltZXIpfWVsc2UgaWYodGltZXImJnR5cGVvZiB0aW1lci51bnJlZiE9PVwidW5kZWZpbmVkXCIpe3RpbWVyLnVucmVmKCl9fWNvbnN0IG1heERlbGF5PTMwKjFlMztjb25zdCBzY2hlZHVsZWRKb2JzPVtdO2Z1bmN0aW9uIENyb24ocGF0dGVybixmbk9yT3B0aW9uczEsZm5Pck9wdGlvbnMyKXtpZighKHRoaXMgaW5zdGFuY2VvZiBDcm9uKSl7cmV0dXJuIG5ldyBDcm9uKHBhdHRlcm4sZm5Pck9wdGlvbnMxLGZuT3JPcHRpb25zMil9bGV0IG9wdGlvbnMsZnVuYztpZihpc0Z1bmN0aW9uKGZuT3JPcHRpb25zMSkpe2Z1bmM9Zm5Pck9wdGlvbnMxfWVsc2UgaWYodHlwZW9mIGZuT3JPcHRpb25zMT09PVwib2JqZWN0XCIpe29wdGlvbnM9Zm5Pck9wdGlvbnMxfWVsc2UgaWYoZm5Pck9wdGlvbnMxIT09dm9pZCAwKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBmb3Igb3B0aW9uc0luLiBTaG91bGQgYmUgb25lIG9mIGZ1bmN0aW9uLCBvciBvYmplY3QgKG9wdGlvbnMpLlwiKX1pZihpc0Z1bmN0aW9uKGZuT3JPcHRpb25zMikpe2Z1bmM9Zm5Pck9wdGlvbnMyfWVsc2UgaWYodHlwZW9mIGZuT3JPcHRpb25zMj09PVwib2JqZWN0XCIpe29wdGlvbnM9Zm5Pck9wdGlvbnMyfWVsc2UgaWYoZm5Pck9wdGlvbnMyIT09dm9pZCAwKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uOiBJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBmb3IgZnVuY0luLiBTaG91bGQgYmUgb25lIG9mIGZ1bmN0aW9uLCBvciBvYmplY3QgKG9wdGlvbnMpLlwiKX10aGlzLm5hbWU9b3B0aW9ucz9vcHRpb25zLm5hbWU6dm9pZCAwO3RoaXMub3B0aW9ucz1Dcm9uT3B0aW9ucyhvcHRpb25zKTt0aGlzLl9zdGF0ZXM9e2tpbGw6ZmFsc2UsYmxvY2tpbmc6ZmFsc2UscHJldmlvdXNSdW46dm9pZCAwLGN1cnJlbnRSdW46dm9pZCAwLG9uY2U6dm9pZCAwLGN1cnJlbnRUaW1lb3V0OnZvaWQgMCxtYXhSdW5zOm9wdGlvbnM/b3B0aW9ucy5tYXhSdW5zOnZvaWQgMCxwYXVzZWQ6b3B0aW9ucz9vcHRpb25zLnBhdXNlZDpmYWxzZSxwYXR0ZXJuOnZvaWQgMH07aWYocGF0dGVybiYmKHBhdHRlcm4gaW5zdGFuY2VvZiBEYXRlfHx0eXBlb2YgcGF0dGVybj09PVwic3RyaW5nXCImJnBhdHRlcm4uaW5kZXhPZihcIjpcIik+MCkpe3RoaXMuX3N0YXRlcy5vbmNlPW5ldyBDcm9uRGF0ZShwYXR0ZXJuLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCl9ZWxzZXt0aGlzLl9zdGF0ZXMucGF0dGVybj1uZXcgQ3JvblBhdHRlcm4ocGF0dGVybix0aGlzLm9wdGlvbnMudGltZXpvbmUpfWlmKHRoaXMubmFtZSl7Y29uc3QgZXhpc3Rpbmc9c2NoZWR1bGVkSm9icy5maW5kKGo9PmoubmFtZT09PXRoaXMubmFtZSk7aWYoZXhpc3Rpbmcpe3Rocm93IG5ldyBFcnJvcihcIkNyb246IFRyaWVkIHRvIGluaXRpYWxpemUgbmV3IG5hbWVkIGpvYiAnXCIrdGhpcy5uYW1lK1wiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi5cIil9ZWxzZXtzY2hlZHVsZWRKb2JzLnB1c2godGhpcyl9fWlmKGZ1bmMhPT12b2lkIDApe3RoaXMuZm49ZnVuYzt0aGlzLnNjaGVkdWxlKCl9cmV0dXJuIHRoaXN9Q3Jvbi5wcm90b3R5cGUubmV4dFJ1bj1mdW5jdGlvbihwcmV2KXtjb25zdCBuZXh0PXRoaXMuX25leHQocHJldik7cmV0dXJuIG5leHQ/bmV4dC5nZXREYXRlKCk6bnVsbH07Q3Jvbi5wcm90b3R5cGUubmV4dFJ1bnM9ZnVuY3Rpb24obixwcmV2aW91cyl7aWYobj50aGlzLl9zdGF0ZXMubWF4UnVucyl7bj10aGlzLl9zdGF0ZXMubWF4UnVuc31jb25zdCBlbnVtZXJhdGlvbj1bXTtsZXQgcHJldj1wcmV2aW91c3x8dGhpcy5fc3RhdGVzLmN1cnJlbnRSdW47d2hpbGUobi0tJiYocHJldj10aGlzLm5leHRSdW4ocHJldikpKXtlbnVtZXJhdGlvbi5wdXNoKHByZXYpfXJldHVybiBlbnVtZXJhdGlvbn07Q3Jvbi5wcm90b3R5cGUuZ2V0UGF0dGVybj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZXMucGF0dGVybj90aGlzLl9zdGF0ZXMucGF0dGVybi5wYXR0ZXJuOnZvaWQgMH07Q3Jvbi5wcm90b3R5cGUuaXNSdW5uaW5nPWZ1bmN0aW9uKCl7Y29uc3QgbmV4dFJ1blRpbWU9dGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKTtjb25zdCBpc1J1bm5pbmc9IXRoaXMuX3N0YXRlcy5wYXVzZWQ7Y29uc3QgaXNTY2hlZHVsZWQ9dGhpcy5mbiE9PXZvaWQgMDtjb25zdCBub3RJc0tpbGxlZD0hdGhpcy5fc3RhdGVzLmtpbGw7cmV0dXJuIGlzUnVubmluZyYmaXNTY2hlZHVsZWQmJm5vdElzS2lsbGVkJiZuZXh0UnVuVGltZSE9PW51bGx9O0Nyb24ucHJvdG90eXBlLmlzU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZXMua2lsbH07Q3Jvbi5wcm90b3R5cGUuaXNCdXN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5ibG9ja2luZ307Q3Jvbi5wcm90b3R5cGUuY3VycmVudFJ1bj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bj90aGlzLl9zdGF0ZXMuY3VycmVudFJ1bi5nZXREYXRlKCk6bnVsbH07Q3Jvbi5wcm90b3R5cGUucHJldmlvdXNSdW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuP3RoaXMuX3N0YXRlcy5wcmV2aW91c1J1bi5nZXREYXRlKCk6bnVsbH07Q3Jvbi5wcm90b3R5cGUubXNUb05leHQ9ZnVuY3Rpb24ocHJldil7cHJldj1wcmV2fHxuZXcgRGF0ZTtjb25zdCBuZXh0PXRoaXMuX25leHQocHJldik7aWYobmV4dCl7cmV0dXJuIG5leHQuZ2V0VGltZSgpLXByZXYuZ2V0VGltZSgpfWVsc2V7cmV0dXJuIG51bGx9fTtDcm9uLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGVzLmtpbGw9dHJ1ZTtpZih0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQpe2NsZWFyVGltZW91dCh0aGlzLl9zdGF0ZXMuY3VycmVudFRpbWVvdXQpfWNvbnN0IGpvYkluZGV4PXNjaGVkdWxlZEpvYnMuaW5kZXhPZih0aGlzKTtpZihqb2JJbmRleD49MCl7c2NoZWR1bGVkSm9icy5zcGxpY2Uoam9iSW5kZXgsMSl9fTtDcm9uLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3N0YXRlcy5wYXVzZWQ9dHJ1ZTtyZXR1cm4hdGhpcy5fc3RhdGVzLmtpbGx9O0Nyb24ucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3RoaXMuX3N0YXRlcy5wYXVzZWQ9ZmFsc2U7cmV0dXJuIXRoaXMuX3N0YXRlcy5raWxsfTtDcm9uLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihmdW5jKXtpZihmdW5jJiZ0aGlzLmZuKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uOiBJdCBpcyBub3QgYWxsb3dlZCB0byBzY2hlZHVsZSB0d28gZnVuY3Rpb25zIHVzaW5nIHRoZSBzYW1lIENyb25lciBpbnN0YW5jZS5cIil9ZWxzZSBpZihmdW5jKXt0aGlzLmZuPWZ1bmN9bGV0IHdhaXRNcz10aGlzLm1zVG9OZXh0KCk7Y29uc3QgdGFyZ2V0PXRoaXMubmV4dFJ1bih0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bik7aWYod2FpdE1zPT09bnVsbHx8d2FpdE1zPT09dW5kZWZpbmVkfHxpc05hTih3YWl0TXMpfHx0YXJnZXQ9PT1udWxsKXJldHVybiB0aGlzO2lmKHdhaXRNcz5tYXhEZWxheSl7d2FpdE1zPW1heERlbGF5fXRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLl9jaGVja1RyaWdnZXIodGFyZ2V0KSx3YWl0TXMpO2lmKHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCYmdGhpcy5vcHRpb25zLnVucmVmKXt1bnJlZlRpbWVyKHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCl9cmV0dXJuIHRoaXN9O0Nyb24ucHJvdG90eXBlLl90cmlnZ2VyPWFzeW5jIGZ1bmN0aW9uKGluaXRpYXRpb25EYXRlKXt0aGlzLl9zdGF0ZXMuYmxvY2tpbmc9dHJ1ZTt0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bj1uZXcgQ3JvbkRhdGUodm9pZCAwLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7aWYodGhpcy5vcHRpb25zLmNhdGNoKXt0cnl7YXdhaXQgdGhpcy5mbih0aGlzLHRoaXMub3B0aW9ucy5jb250ZXh0KX1jYXRjaChfZSl7aWYoaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuY2F0Y2gpKXt0aGlzLm9wdGlvbnMuY2F0Y2goX2UsdGhpcyl9fX1lbHNle2F3YWl0IHRoaXMuZm4odGhpcyx0aGlzLm9wdGlvbnMuY29udGV4dCl9dGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuPW5ldyBDcm9uRGF0ZShpbml0aWF0aW9uRGF0ZSx0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXQpO3RoaXMuX3N0YXRlcy5ibG9ja2luZz1mYWxzZX07Q3Jvbi5wcm90b3R5cGUudHJpZ2dlcj1hc3luYyBmdW5jdGlvbigpe2F3YWl0IHRoaXMuX3RyaWdnZXIoKX07Q3Jvbi5wcm90b3R5cGUuX2NoZWNrVHJpZ2dlcj1mdW5jdGlvbih0YXJnZXQpe2NvbnN0IG5vdz1uZXcgRGF0ZSxzaG91bGRSdW49IXRoaXMuX3N0YXRlcy5wYXVzZWQmJm5vdy5nZXRUaW1lKCk+PXRhcmdldCxpc0Jsb2NrZWQ9dGhpcy5fc3RhdGVzLmJsb2NraW5nJiZ0aGlzLm9wdGlvbnMucHJvdGVjdDtpZihzaG91bGRSdW4mJiFpc0Jsb2NrZWQpe3RoaXMuX3N0YXRlcy5tYXhSdW5zLS07dGhpcy5fdHJpZ2dlcigpfWVsc2V7aWYoc2hvdWxkUnVuJiZpc0Jsb2NrZWQmJmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnByb3RlY3QpKXtzZXRUaW1lb3V0KCgpPT50aGlzLm9wdGlvbnMucHJvdGVjdCh0aGlzKSwwKX19dGhpcy5zY2hlZHVsZSgpfTtDcm9uLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbihwcmV2KXtsZXQgaGFzUHJldmlvdXNSdW49cHJldnx8dGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4/dHJ1ZTpmYWxzZTtsZXQgc3RhcnRBdEluRnV0dXJlV2l0aEludGVydmFsPWZhbHNlO2lmKCFwcmV2JiZ0aGlzLm9wdGlvbnMuc3RhcnRBdCYmdGhpcy5vcHRpb25zLmludGVydmFsKXtbcHJldixoYXNQcmV2aW91c1J1bl09dGhpcy5fY2FsY3VsYXRlUHJldmlvdXNSdW4ocHJldixoYXNQcmV2aW91c1J1bik7c3RhcnRBdEluRnV0dXJlV2l0aEludGVydmFsPSFwcmV2P3RydWU6ZmFsc2V9cHJldj1uZXcgQ3JvbkRhdGUocHJldix0aGlzLm9wdGlvbnMudGltZXpvbmV8fHRoaXMub3B0aW9ucy51dGNPZmZzZXQpO2lmKHRoaXMub3B0aW9ucy5zdGFydEF0JiZwcmV2JiZwcmV2LmdldFRpbWUoKTx0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCkpe3ByZXY9dGhpcy5vcHRpb25zLnN0YXJ0QXR9bGV0IG5leHRSdW49dGhpcy5fc3RhdGVzLm9uY2V8fG5ldyBDcm9uRGF0ZShwcmV2LHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7aWYoIXN0YXJ0QXRJbkZ1dHVyZVdpdGhJbnRlcnZhbCYmbmV4dFJ1biE9PXRoaXMuX3N0YXRlcy5vbmNlKXtuZXh0UnVuPW5leHRSdW4uaW5jcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucyxoYXNQcmV2aW91c1J1bil9aWYodGhpcy5fc3RhdGVzLm9uY2UmJnRoaXMuX3N0YXRlcy5vbmNlLmdldFRpbWUoKTw9cHJldi5nZXRUaW1lKCkpe3JldHVybiBudWxsfWVsc2UgaWYobmV4dFJ1bj09PW51bGx8fHRoaXMuX3N0YXRlcy5tYXhSdW5zPD0wfHx0aGlzLl9zdGF0ZXMua2lsbHx8dGhpcy5vcHRpb25zLnN0b3BBdCYmbmV4dFJ1bi5nZXRUaW1lKCk+PXRoaXMub3B0aW9ucy5zdG9wQXQuZ2V0VGltZSgpKXtyZXR1cm4gbnVsbH1lbHNle3JldHVybiBuZXh0UnVufX07Q3Jvbi5wcm90b3R5cGUuX2NhbGN1bGF0ZVByZXZpb3VzUnVuPWZ1bmN0aW9uKHByZXYsaGFzUHJldmlvdXNSdW4pe2NvbnN0IG5vdz1uZXcgQ3JvbkRhdGUodW5kZWZpbmVkLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7aWYodGhpcy5vcHRpb25zLnN0YXJ0QXQuZ2V0VGltZSgpPD1ub3cuZ2V0VGltZSgpKXtwcmV2PXRoaXMub3B0aW9ucy5zdGFydEF0O2xldCBwcmV2VGltZVBsdXNJbnRlcnZhbD1wcmV2LmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwqMWUzO3doaWxlKHByZXZUaW1lUGx1c0ludGVydmFsPD1ub3cuZ2V0VGltZSgpKXtwcmV2PW5ldyBDcm9uRGF0ZShwcmV2LHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCkuaW5jcmVtZW50KHRoaXMuX3N0YXRlcy5wYXR0ZXJuLHRoaXMub3B0aW9ucyx0cnVlKTtwcmV2VGltZVBsdXNJbnRlcnZhbD1wcmV2LmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuaW50ZXJ2YWwqMWUzfWhhc1ByZXZpb3VzUnVuPXRydWV9cmV0dXJuW3ByZXYsaGFzUHJldmlvdXNSdW5dfTtDcm9uLkNyb249Q3JvbjtDcm9uLnNjaGVkdWxlZEpvYnM9c2NoZWR1bGVkSm9icztleHBvcnR7Q3JvbixDcm9uIGFzIGRlZmF1bHQsc2NoZWR1bGVkSm9ic307IiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudEVtbWl0ZXIsIFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VFdmVudFNlcnZpY2U8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxvY2FsSGFuZGxlcnM6IFNldDxTY3JpcHRFdmVudEhhbmRsZXI+ID0gbmV3IFNldCgpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkaW50ZXJuYWxIYW5kbGVyczogU2V0PFNjcmlwdEV2ZW50SGFuZGxlcj4gPSBuZXcgU2V0KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5ICRyZW1vdGVIYW5kbGVyczogU2V0PFNjcmlwdEV2ZW50SGFuZGxlcj4gPSBuZXcgU2V0KCk7XG4gICAgcHJvdGVjdGVkICRpbnRlcm5hbEV2ZW50TmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgJGV2ZW50RW1taXRlcjogRXZlbnRFbW1pdGVyKSB7fVxuXG4gICAgcHVibGljIG9uPEUgZXh0ZW5kcyBrZXlvZiBUPihldmVudE5hbWU6IEUsIGNhbGxiYWNrOiAoYm9keTogUGFyYW1ldGVyczxUW0VdPlswXSkgPT4gUmV0dXJuVHlwZTxUW0VdPik6IFNjcmlwdEV2ZW50SGFuZGxlcjtcbiAgICBwdWJsaWMgb248RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIFQ+LCBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxTY3JpcHRFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uKGV2ZW50TmFtZSwgd3JhcHBlcik7XG4gICAgICAgIHRoaXMuJGxvY2FsSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuICAgIHB1YmxpYyBvbmNlPEUgZXh0ZW5kcyBrZXlvZiBUPihldmVudE5hbWU6IEUsIGNhbGxiYWNrOiAoYm9keTogUGFyYW1ldGVyczxUW0VdPlswXSkgPT4gUmV0dXJuVHlwZTxUW0VdPik6IFNjcmlwdEV2ZW50SGFuZGxlcjtcbiAgICBwdWJsaWMgb25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pOiBTY3JpcHRFdmVudEhhbmRsZXI7XG4gICAgcHVibGljIG9uY2U8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIFQ+LCBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSAoLi4uYXJnczogYW55W10pID0+IGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSA8U2NyaXB0RXZlbnRIYW5kbGVyPnRoaXMuJGV2ZW50RW1taXRlci5vbmNlKGV2ZW50TmFtZSwgd3JhcHBlcik7XG4gICAgICAgIHRoaXMuJGxvY2FsSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgYm9keT86IFRbRV0pOiB2b2lkO1xuICAgIHB1YmxpYyBlbWl0PEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRSwgYm9keT86IHVua25vd24pOiB2b2lkO1xuICAgIHB1YmxpYyBlbWl0PEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRSwgYm9keT86IHVua25vd24pIHtcbiAgICAgICAgdGhpcy4kZXZlbnRFbW1pdGVyLmVtaXQoZXZlbnROYW1lLCBib2R5KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgJG9uSW50ZXJuYWwoZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBpZiAoIXRoaXMuJGludGVybmFsRXZlbnROYW1lcy5oYXMoZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uKGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgICAgIHRoaXMuJGludGVybmFsSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkICRvbmNlSW50ZXJuYWwoZXZlbnROYW1lOiBzdHJpbmcsIGhhbmRsZXI6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBpZiAoIXRoaXMuJGludGVybmFsRXZlbnROYW1lcy5oYXMoZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxTY3JpcHRFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uY2UoZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgUlBDUmVzdWx0LCBSUENDYWxsT3B0aW9ucywgU2NyaXB0UlBDSGFuZGxlciwgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCwgUlBDX1JFU1VMVF9USU1FT1VULCBSUENfUkVTVUxUX1VOS05PV04gfSBmcm9tICcuLi8uLi9hcHAvY29uc3RhbnRzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTWFuZ29FcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCYXNlUlBDU2VydmljZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByb3RlY3RlZCByZWFkb25seSAkbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJFRJTUVPVVQgPSAyMDAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGxvY2FsSGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0UlBDSGFuZGxlcj4oKTtcblxuICAgIHB1YmxpYyBhc3luYyBjYWxsPEUgZXh0ZW5kcyBrZXlvZiBUPihcbiAgICAgICAgcnBjTmFtZTogRSxcbiAgICAgICAgYm9keT86IFBhcmFtZXRlcnM8VFtFXT5bMF0sXG4gICAgICAgIG9wdGlvbnM/OiBSUENDYWxsT3B0aW9ucyxcbiAgICApOiBQcm9taXNlPFJQQ1Jlc3VsdDxSZXR1cm5UeXBlPFRbRV0+Pj47XG4gICAgcHVibGljIGFzeW5jIGNhbGw8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZTogRSwgYm9keT86IHVua25vd24sIG9wdGlvbnM/OiBSUENDYWxsT3B0aW9ucyk6IFByb21pc2U8UlBDUmVzdWx0PHVua25vd24+PjtcbiAgICBwdWJsaWMgYXN5bmMgY2FsbDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBib2R5PzogdW5rbm93biwgb3B0aW9uczogUlBDQ2FsbE9wdGlvbnMgPSB7IHRpbWVvdXQ6IHRoaXMuJFRJTUVPVVQgfSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLiRsb2NhbEhhbmRsZXJzLmdldCg8c3RyaW5nPnJwY05hbWUpPy5oYW5kbGVyO1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoUlBDX1JFU1VMVF9USU1FT1VUKTtcbiAgICAgICAgICAgIH0sIG9wdGlvbnMudGltZW91dCA/PyB0aGlzLiRUSU1FT1VUKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyKGJvZHkpO1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoeyBzdWNjZXNzOiB0cnVlLCBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5TdWNjZXNzLCBib2R5OiByZXN1bHQgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTWFuZ29FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgZGV0YWlsczogZXJyb3IuZGV0YWlscyB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKFJQQ19SRVNVTFRfVU5LTk9XTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdWJsaWMgb25SZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBUPihycGNOYW1lOiBFLCBoYW5kbGVyOiAoYm9keTogUGFyYW1ldGVyczxUW0VdPlswXSkgPT4gUmV0dXJuVHlwZTxUW0VdPik6IFNjcmlwdFJQQ0hhbmRsZXI7XG4gICAgcHVibGljIG9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4pOiBTY3JpcHRSUENIYW5kbGVyO1xuICAgIHB1YmxpYyBvblJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZTogRSwgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+KSB7XG4gICAgICAgIGlmICh0aGlzLiRsb2NhbEhhbmRsZXJzLmhhcyhycGNOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIFJQQy4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDSGFuZGxlckFscmVhZHlFeGlzdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnBjSGFuZGxlcjogU2NyaXB0UlBDSGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2FsSGFuZGxlcnMuZGVsZXRlKHJwY05hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWU6IHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5zZXQocnBjTmFtZSwgcnBjSGFuZGxlcik7XG5cbiAgICAgICAgcmV0dXJuIHJwY0hhbmRsZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgUlBDU2VydmljZSwgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgUlBDX1NFUlZJQ0UsIHR5cGUgTG9nZ2VyU2VydmljZSwgdHlwZSBSUENDYWxsT3B0aW9ucyB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgeyBHTE9CQUxfQVBQX0NPTlRBSU5FUiwgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBNYW5nb1BsdWdpbiB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGxheWVyUHJvdG90eXBlUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoR0xPQkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsYXllclNlcnZpY2U6IFNlcnZlck11bHRpcGxheWVyU2VydmljZTtcblxuICAgIHB1YmxpYyBiZWZvcmVMb2FkKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgUGxheWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuZ2V0UGxheWVyKCk7XG5cbiAgICAgICAgUGxheWVyLnByb3RvdHlwZS5lbWl0V2ViVmlldyA9IGZ1bmN0aW9uIChpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU6IHN0cmluZywgYm9keT86IHVua25vd24pIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJhdygnU0VSVkVSOjpFTUlUX1dFQlZJRVcnLCB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBycGNTZXJ2aWNlID0gdGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0PFJQQ1NlcnZpY2U+KFJQQ19TRVJWSUNFKTtcblxuICAgICAgICBQbGF5ZXIucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAocnBjTmFtZTogc3RyaW5nLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gcnBjU2VydmljZS5jYWxsUGxheWVyKHRoaXMsIHJwY05hbWUsIGJvZHksIG9wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIFBsYXllci5wcm90b3R5cGUuY2FsbFdlYlZpZXcgPSBmdW5jdGlvbiAoaWQ6IHN0cmluZyB8IG51bWJlciwgcnBjTmFtZTogc3RyaW5nLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gcnBjU2VydmljZS5jYWxsV2ViVmlldyh0aGlzLCBpZCwgcnBjTmFtZSwgYm9keSwgb3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3flBsYXllciBwcm90b3R5cGUgbWV0aG9kcyBkZWZpbmVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOdW1iZXIgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0VmFsdWVQaXBlPFQgPSB1bmtub3duLCBSID0gdW5rbm93bj4gaW1wbGVtZW50cyBQaXBlPFQsIFQgfCBSPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VmFsdWU6IFQpIHt9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKHZhbHVlOiBUKSB7XG4gICAgICAgIGlmIChpc05pbCh2YWx1ZSkgfHwgKGlzTnVtYmVyKHZhbHVlKSAmJiBpc05hTig8bnVtYmVyPnZhbHVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5ELCB0eXBlIE1hbmdvUGx1Z2luLCBSUENfUkVTVUxUX1VOS05PV04sIEV2ZW50RGVzdGluYXRpb24gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7XG4gICAgRVZFTlRfU0VSVklDRSxcbiAgICBNYW5nb0Vycm9yLFxuICAgIFJQQ19TRVJWSUNFLFxuICAgIFJQQ1Jlc3VsdFN0YXR1cyxcbiAgICB0eXBlIFJQQ1Jlc3VsdCxcbiAgICBMT0dHRVJfU0VSVklDRSxcbiAgICB0eXBlIExvZ2dlclNlcnZpY2UsXG59IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50U2VydmljZSwgUlBDU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUlBDUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoRVZFTlRfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZTtcbiAgICBAaW5qZWN0KFJQQ19TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IHJwY1NlcnZpY2U6IFJQQ1NlcnZpY2U7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGJlZm9yZUxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLm9uUGxheWVyKCdSUEM6OkNBTExfU0VSVkVSJywgYXN5bmMgKHBsYXllciwgYm9keSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwbGF5ZXIudmFsaWQpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgcnBjSGFuZGxlciA9XG4gICAgICAgICAgICAgICAgYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uQ2xpZW50XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5ycGNTZXJ2aWNlLiRjbGllbnRIYW5kbGVycy5nZXQoYm9keS5ycGNOYW1lKVxuICAgICAgICAgICAgICAgICAgICA6IGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXdcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnJwY1NlcnZpY2UuJHdlYlZpZXdIYW5kbGVycy5nZXQoYCR7Ym9keS53ZWJWaWV3SWR9Ojoke2JvZHkucnBjTmFtZX1gKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICghcnBjSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIGlmIChib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIHBsYXllci5lbWl0V2ViVmlldyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkud2ViVmlld0lkIGFzIHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2JvZHkuaWR9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5DbGllbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRSYXcoYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJSZXN1bHQgPSBhd2FpdCBycGNIYW5kbGVyLmhhbmRsZXIocGxheWVyLCBib2R5LmJvZHkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJwY1Jlc3VsdDogUlBDUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5TdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBoYW5kbGVyUmVzdWx0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRXZWJWaWV3KGJvZHkud2ViVmlld0lkIGFzIHN0cmluZyB8IG51bWJlciwgYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBycGNSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBsYXllci5lbWl0UmF3KGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2JvZHkuaWR9YCwgcnBjUmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE1hbmdvRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJwY1Jlc3VsdDogUlBDUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRldGFpbHM6IGVycm9yLmRldGFpbHMgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFdlYlZpZXcoYm9keS53ZWJWaWV3SWQgYXMgc3RyaW5nIHwgbnVtYmVyLCBgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIHJwY1Jlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFdlYlZpZXcoYm9keS53ZWJWaWV3SWQgYXMgc3RyaW5nIHwgbnVtYmVyLCBgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIFJQQ19SRVNVTFRfVU5LTk9XTik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLkNsaWVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNYW5nb0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBycGNSZXN1bHQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogeyBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkZXRhaWxzOiBlcnJvci5kZXRhaWxzIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRSYXcoYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBycGNSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRSYXcoYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBSUENfUkVTVUxUX1VOS05PV04pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGB+bHd+UlBDIGhhbmRsZXJzIHJlZ2lzdGVyZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBHTE9CQUxfQVBQX0NPTlRBSU5FUiwgSU5URVJOQUxfQVBQX0NPTlRBSU5FUiwgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBNYW5nb1BsdWdpbiB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHsgRVZFTlRfU0VSVklDRSwgTE9HR0VSX1NFUlZJQ0UsIFJQQ19TRVJWSUNFIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IFNlcnZlckV2ZW50U2VydmljZSwgU2VydmVyTG9nZ2VyU2VydmljZSwgU2VydmVyUlBDU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB0eXBlIHsgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTZXJ2ZXJBbHRNdWx0aXBsYXllclNlcnZjZVYxLCBTZXJ2ZXJBbHRNdWx0aXBsYXllclNlcnZjZVYyIH0gZnJvbSAnLi4vbXVsdGlwbGF5ZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VydmljZUJpbmRlclBsdWdpbiBpbXBsZW1lbnRzIE1hbmdvUGx1Z2luIHtcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxBcHBDb250YWluZXI6IENvbnRhaW5lcjtcbiAgICBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuXG4gICAgcHVibGljIGFzeW5jIG9uQnVpbGQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoTE9HR0VSX1NFUlZJQ0UpLnRvKFNlcnZlckxvZ2dlclNlcnZpY2UpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChFVkVOVF9TRVJWSUNFKS50byhTZXJ2ZXJFdmVudFNlcnZpY2UpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChSUENfU0VSVklDRSkudG8oU2VydmVyUlBDU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChMT0dHRVJfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldChMT0dHRVJfU0VSVklDRSkpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRVZFTlRfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldChFVkVOVF9TRVJWSUNFKSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChSUENfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldChSUENfU0VSVklDRSkpO1xuXG4gICAgICAgIGNvbnN0IGxvZ2dlclNlcnZpY2UgPSB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQ8U2VydmVyTG9nZ2VyU2VydmljZT4oTE9HR0VSX1NFUlZJQ0UpO1xuICAgICAgICBsb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fkludGVybmFsIHNlcnZpY2VzIGJpbmRlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHRpbWV9bXMpYCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFdmVudFNlcnZpY2UsIE1VTFRJUExBWUVSX1NFUlZJQ0UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBJTlRFUk5BTF9FVkVOVFMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBFdmVudFNlcnZpY2UsIE11bHRpcGxheWVyUGxheWVyLCBTZXJ2ZXJFdmVudEVtbWl0ZXIsIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VydmVyRXZlbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZUV2ZW50U2VydmljZTxNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJFdmVudD4gaW1wbGVtZW50cyBFdmVudFNlcnZpY2Uge1xuICAgIHByaXZhdGUgJHJhZ2VFdmVudHM6IFNlcnZlckV2ZW50RW1taXRlcjtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBtdWx0aXBsYXllclNlcnZpY2U6IFNlcnZlck11bHRpcGxheWVyU2VydmljZSkge1xuICAgICAgICBzdXBlcihtdWx0aXBsYXllclNlcnZpY2UuRXZlbnRzKTtcbiAgICAgICAgdGhpcy4kcmFnZUV2ZW50cyA9IG11bHRpcGxheWVyU2VydmljZS5FdmVudHM7XG4gICAgICAgIHRoaXMuJGludGVybmFsRXZlbnROYW1lcyA9IG5ldyBTZXQoT2JqZWN0LnZhbHVlcyhJTlRFUk5BTF9FVkVOVFMpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXI8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIFBsYXllck1wPihcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKHBsYXllcjogVSwgYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4gICAgKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IChwbGF5ZXI6IFUsIC4uLmFyZ3M6IHVua25vd25bXSkgPT4gY2FsbGJhY2socGxheWVyLCBhcmdzWzBdKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gdGhpcy4kcmFnZUV2ZW50cy5vblBsYXllcihldmVudE5hbWUsIHdyYXBwZXIpO1xuICAgICAgICB0aGlzLiRyZW1vdGVIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25jZVBsYXllcjxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKHBsYXllcjogVSwgLi4uYXJnczogdW5rbm93bltdKSA9PiBjYWxsYmFjayhwbGF5ZXIsIGFyZ3NbMF0hKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gdGhpcy4kcmFnZUV2ZW50cy5vbmNlUGxheWVyKGV2ZW50TmFtZSwgd3JhcHBlcik7XG4gICAgICAgIHRoaXMuJHJlbW90ZUhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW90ZTxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vblBsYXllcihldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25jZVJlbW90ZTxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vbmNlUGxheWVyKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0UGxheWVyczxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBwbGF5ZXJzOiBVW10sXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgcGxheWVyIG9mIHBsYXllcnMpIHtcbiAgICAgICAgICAgIHBsYXllci5jYWxsKGV2ZW50TmFtZSwgW2JvZHldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0UGxheWVyc1VucmVsaWFibGU8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgcGxheWVyczogVVtdLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9QbGF5ZXJFdmVudD4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgdXNlcyBjYWxsVW5yZWxpYWJsZSBmb3IgdW5yZWxpYWJsZSBtZXNzYWdlc1xuICAgICAgICBmb3IgKGNvbnN0IHBsYXllciBvZiBwbGF5ZXJzKSB7XG4gICAgICAgICAgICBwbGF5ZXIuY2FsbFVucmVsaWFibGUoZXZlbnROYW1lLCBbYm9keV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRBbGxQbGF5ZXJzPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PiwgYm9keT86IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgbXAucGxheWVycy5jYWxsKGV2ZW50TmFtZSwgW2JvZHldKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdEFsbFBsYXllcnNVbnJlbGlhYmxlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PiwgYm9keT86IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgbXAucGxheWVycy5jYWxsVW5yZWxpYWJsZShldmVudE5hbWUsIFtib2R5XSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKHBsYXllcjogVSwgYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4gICAgKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25QbGF5ZXIoPHN0cmluZz5gU0VSVkVSOjpPTl9XRUJWSUVXXyR7ZXZlbnROYW1lfV8ke2lkfWAsIDxhbnk+Y2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbmNlV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKHBsYXllcjogVSwgYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4gICAgKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZVBsYXllcig8c3RyaW5nPmBTRVJWRVI6Ok9OX1dFQlZJRVdfJHtldmVudE5hbWV9XyR7aWR9YCwgPGFueT5jYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRXZWJWaWV3czxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBwbGF5ZXJzOiBVW10sXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1dlYlZpZXdFdmVudD4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICk6IHZvaWQge1xuICAgICAgICAoPEV2ZW50U2VydmljZT50aGlzKS5lbWl0UGxheWVycyhwbGF5ZXJzLCAnU0VSVkVSOjpFTUlUX1dFQlZJRVcnLCB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgIHBheWxvYWQ6IGJvZHksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0QWxsV2ViVmlld3M8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1dlYlZpZXdFdmVudD4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICk6IHZvaWQge1xuICAgICAgICAoPEV2ZW50U2VydmljZT50aGlzKS5lbWl0QWxsUGxheWVycygnU0VSVkVSOjpFTUlUX1dFQlZJRVcnLCB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgIHBheWxvYWQ6IGJvZHksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0QWxsV2ViVmlld3NVbnJlbGlhYmxlPEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9XZWJWaWV3RXZlbnQ+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICApOiB2b2lkIHtcbiAgICAgICAgKDxFdmVudFNlcnZpY2U+dGhpcykuZW1pdEFsbFBsYXllcnNVbnJlbGlhYmxlKCdTRVJWRVI6OkVNSVRfV0VCVklFVycsIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgcGF5bG9hZDogYm9keSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmFnZU1QIHNlcnZlciBldmVudHNcbiAgICBwdWJsaWMgb25QbGF5ZXJKb2luKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJKb2luJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclF1aXQoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBleGl0VHlwZTogc3RyaW5nLCByZWFzb246IHN0cmluZykgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJRdWl0JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclJlYWR5KGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJSZWFkeScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJEZWF0aChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHJlYXNvbjogbnVtYmVyLCBraWxsZXI/OiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJEZWF0aCcsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJTcGF3bihjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyU3Bhd24nLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyQ2hhdChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHRleHQ6IHN0cmluZykgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJDaGF0JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckNvbW1hbmQoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBjb21tYW5kOiBzdHJpbmcpID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyQ29tbWFuZCcsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJFbnRlclZlaGljbGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCB2ZWhpY2xlOiBWZWhpY2xlTXAsIHNlYXQ6IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlclZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdFZlaGljbGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCB2ZWhpY2xlOiBWZWhpY2xlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdFZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyU3RhcnRFbnRlclZlaGljbGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCB2ZWhpY2xlOiBWZWhpY2xlTXAsIHNlYXQ6IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJTdGFydEVudGVyVmVoaWNsZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJTdGFydEV4aXRWZWhpY2xlKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgdmVoaWNsZTogVmVoaWNsZU1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclN0YXJ0RXhpdFZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyV2VhcG9uQ2hhbmdlKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgb2xkV2VhcG9uOiBudW1iZXIsIG5ld1dlYXBvbjogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllcldlYXBvbkNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJEYW1hZ2UoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBoZWFsdGhMb3NzOiBudW1iZXIsIGFybW9yTG9zczogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckRhbWFnZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25WZWhpY2xlRGVhdGgoY2FsbGJhY2s6ICh2ZWhpY2xlOiBWZWhpY2xlTXAsIGhhc2g6IG51bWJlciwga2lsbGVyPzogUGxheWVyTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigndmVoaWNsZURlYXRoJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblZlaGljbGVEYW1hZ2UoY2FsbGJhY2s6ICh2ZWhpY2xlOiBWZWhpY2xlTXAsIGJvZHlIZWFsdGhMb3NzOiBudW1iZXIsIGVuZ2luZUhlYWx0aExvc3M6IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCd2ZWhpY2xlRGFtYWdlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckVudGVyQ29sc2hhcGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBjb2xzaGFwZTogQ29sc2hhcGVNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlckNvbHNoYXBlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckV4aXRDb2xzaGFwZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGNvbHNoYXBlOiBDb2xzaGFwZU1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckV4aXRDb2xzaGFwZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJFbnRlckNoZWNrcG9pbnQoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBjaGVja3BvaW50OiBDaGVja3BvaW50TXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRW50ZXJDaGVja3BvaW50JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckV4aXRDaGVja3BvaW50KGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgY2hlY2twb2ludDogQ2hlY2twb2ludE1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckV4aXRDaGVja3BvaW50JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEFsaWFzZXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBwdWJsaWMgb25QbGF5ZXJDb25uZWN0KGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uUGxheWVySm9pbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRGlzY29ubmVjdChjYWxsYmFjazogKGNvbnRleHQ6IHsgcGxheWVyOiBQbGF5ZXJNcDsgZXhpdFR5cGU6IHN0cmluZzsgcmVhc29uOiBzdHJpbmcgfSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJRdWl0JywgKHBsYXllcjogUGxheWVyTXAsIGV4aXRUeXBlOiBzdHJpbmcsIHJlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayh7IHBsYXllciwgZXhpdFR5cGUsIHJlYXNvbiB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBJTlRFUk5BTF9FVkVOVFMgPSB7XG4gICAgU0NSSVBUX1JQQzogJ3NjcmlwdFJQQycsXG4gICAgU0NSSVBUX1JQQ19BTlNXRVI6ICdzY3JpcHRSUENBbnN3ZXInLFxuICAgIFNFUlZFUl9TVEFSVEVEOiAnc2VydmVyU3RhcnRlZCcsXG4gICAgQ09OTkVDVElPTl9RVUVVRV9BREQ6ICdjb25uZWN0aW9uUXVldWVBZGQnLFxuICAgIENPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFOiAnY29ubmVjdGlvblF1ZXVlUmVtb3ZlJyxcbiAgICBQTEFZRVJfQ09OTkVDVDogJ3BsYXllckNvbm5lY3QnLFxuICAgIFBMQVlFUl9DT05ORUNUX0RFTklFRDogJ3BsYXllckNvbm5lY3REZW5pZWQnLFxuICAgIFBMQVlFUl9ESVNDT05ORUNUOiAncGxheWVyRGlzY29ubmVjdCcsXG4gICAgUExBWUVSX0RBTUFHRTogJ3BsYXllckRhbWFnZScsXG4gICAgUExBWUVSX0RFQVRIOiAncGxheWVyRGVhdGgnLFxuICAgIFBMQVlFUl9IRUFMOiAncGxheWVySGVhbCcsXG4gICAgUExBWUVSX0NPTlRST0xfUkVRVUVTVDogJ3BsYXllckNvbnRyb2xSZXF1ZXN0JyxcbiAgICBQTEFZRVJfSU5URVJJT1JfQ0hBTkdFOiAncGxheWVySW50ZXJpb3JDaGFuZ2UnLFxuICAgIFBMQVlFUl9ESU1FTlNJT05fQ0hBTkdFOiAncGxheWVyRGltZW5zaW9uQ2hhbmdlJyxcbiAgICBQTEFZRVJfV0VBUE9OX0NIQU5HRTogJ3BsYXllcldlYXBvbkNoYW5nZScsXG4gICAgUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUOiAncGxheWVyU3luY2VkU2NlbmVSZXF1ZXN0JyxcbiAgICBQTEFZRVJfU1lOQ0VEX1NDRU5FX1NUQVJUOiAncGxheWVyU3luY2VkU2NlbmVTdGFydCcsXG4gICAgUExBWUVSX1NZTkNFRF9TQ0VORV9TVE9QOiAncGxheWVyU3luY2VkU2NlbmVTdG9wJyxcbiAgICBQTEFZRVJfU1lOQ0VEX1NDRU5FX1VQREFURTogJ3BsYXllclN5bmNlZFNjZW5lVXBkYXRlJyxcbiAgICBQTEFZRVJfU1BBV046ICdwbGF5ZXJTcGF3bicsXG4gICAgUExBWUVSX0FOSU1BVElPTl9DSEFOR0U6ICdwbGF5ZXJBbmltYXRpb25DaGFuZ2UnLFxuICAgIFBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQ6ICdwbGF5ZXJWZWhpY2xlRW50ZXJlZCcsXG4gICAgUExBWUVSX1NUQVJUX1ZFSElDTEVfRU5URVI6ICdwbGF5ZXJTdGFydFZlaGljbGVFbnRlcicsXG4gICAgUExBWUVSX1ZFSElDTEVfTEVGVDogJ3BsYXllclZlaGljbGVMZWZ0JyxcbiAgICBQTEFZRVJfVkVISUNMRV9TRUFUX0NIQU5HRTogJ3BsYXllclZlaGljbGVTZWF0Q2hhbmdlJyxcbiAgICBQRURfSEVBTDogJ3BlZEhlYWwnLFxuICAgIFBFRF9ERUFUSDogJ3BlZERlYXRoJyxcbiAgICBQRURfREFNQUdFOiAncGVkRGFtYWdlJyxcbiAgICBWRUhJQ0xFX0RFU1RST1k6ICd2ZWhpY2xlRGVzdHJveScsXG4gICAgVkVISUNMRV9BVFRBQ0g6ICd2ZWhpY2xlQXR0YWNoJyxcbiAgICBWRUhJQ0xFX0RFVEFDSDogJ3ZlaGljbGVEZXRhY2gnLFxuICAgIFZFSElDTEVfREFNQUdFOiAndmVoaWNsZURhbWFnZScsXG4gICAgVkVISUNMRV9TSVJFTl9TVEFURV9DSEFOR0U6ICd2ZWhpY2xlU2lyZW5TdGF0ZUNoYW5nZScsXG4gICAgVkVISUNMRV9IT1JOX1NUQVRFX0NIQU5HRTogJ3ZlaGljbGVIb3JuU3RhdGVDaGFuZ2UnLFxuICAgIFZPSUNFX0NPTk5FQ1RJT046ICd2b2ljZUNvbm5lY3Rpb24nLFxuICAgIENMSUVOVF9PQkpFQ1RfREVMRVRFOiAnY2xpZW50T2JqZWN0RGVsZXRlJyxcbiAgICBDTElFTlRfT0JKRUNUX1JFUVVFU1Q6ICdjbGllbnRPYmplY3RSZXF1ZXN0JyxcbiAgICBCQVNFX09CSkVDVF9DUkVBVEU6ICdiYXNlT2JqZWN0Q3JlYXRlJyxcbiAgICBCQVNFX09CSkVDVF9SRU1PVkU6ICdiYXNlT2JqZWN0UmVtb3ZlJyxcbiAgICBORVRfT1dORVJfQ0hBTkdFOiAnbmV0T3duZXJDaGFuZ2UnLFxuICAgIFdFQVBPTl9EQU1BR0U6ICd3ZWFwb25EYW1hZ2UnLFxuICAgIE1FVEFfQ0hBTkdFOiAnbWV0YUNoYW5nZScsXG4gICAgTE9DQUxfTUVUQV9DSEFOR0U6ICdsb2NhbE1ldGFDaGFuZ2UnLFxuICAgIFNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0U6ICdzdHJlYW1TeW5jZWRNZXRhQ2hhbmdlJyxcbiAgICBHTE9CQUxfTUVUQV9DSEFOR0U6ICdnbG9iYWxNZXRhQ2hhbmdlJyxcbiAgICBHTE9CQUxfU1lOQ0VEX01FVEFfQ0hBTkdFOiAnZ2xvYmFsU3luY2VkTWV0YUNoYW5nZScsXG4gICAgQ09OU09MRV9DT01NQU5EOiAnY29uc29sZUNvbW1hbmQnLFxuICAgIEVSUk9SOiAnZXJyb3InLFxuICAgIENPTF9TSEFQRV9FVkVOVDogJ2NvbFNoYXBlRXZlbnQnLFxuICAgIEVYUExPU0lPTjogJ2V4cGxvc2lvbicsXG4gICAgRklSRV9TVEFSVDogJ2ZpcmVTdGFydCcsXG4gICAgUFJPSkVDVElMRV9TVEFSVDogJ3Byb2plY3RpbGVTdGFydCcsXG4gICAgRU5USVRZX0NPTF9TSEFQRV9FTlRFUjogJ2VudGl0eUNvbFNoYXBlRW50ZXInLFxuICAgIEVOVElUWV9DT0xfU0hBUEVfTEVBVkU6ICdlbnRpdHlDb2xTaGFwZUxlYXZlJyxcbiAgICBFTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUjogJ2VudGl0eUNoZWNrcG9pbnRFbnRlcicsXG4gICAgRU5USVRZX0NIRUNLUE9JTlRfTEVBVkU6ICdlbnRpdHlDaGVja3BvaW50TGVhdmUnLFxuICAgIEdJVkVfUEVEX1NDUklQVEVEX1RBU0s6ICdnaXZlUGVkU2NyaXB0ZWRUYXNrJyxcbiAgICBMT0NBTF9TQ1JJUFRfRVZFTlQ6ICdsb2NhbFNjcmlwdEV2ZW50JyxcbiAgICBSRU1PVEVfU0NSSVBUX0VWRU5UOiAncmVtb3RlU2NyaXB0RXZlbnQnLFxuXG4gICAgQU5ZX1JFU09VUkNFX1NUQVJUOiAnYW55UmVzb3VyY2VTdGFydCcsXG4gICAgQU5ZX1JFU09VUkNFX1NUT1A6ICdhbnlSZXNvdXJjZVN0b3AnLFxuXG4gICAgUkVTT1VSQ0VfU1RBUlQ6ICdyZXNvdXJjZVN0YXJ0JyxcbiAgICBSRVNPVVJDRV9TVE9QOiAncmVzb3VyY2VTdG9wJyxcbiAgICBSRVNPVVJDRV9FUlJPUjogJ3Jlc291cmNlRXJyb3InLFxuICAgIEVWRU5UOiAnZXZlbnQnLFxufTtcbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgTUFOR09fTE9HX1BSRUZJWCwgTVVMVElQTEFZRVJfU0VSVklDRSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZXJMb2dnZXJTZXJ2aWNlIGltcGxlbWVudHMgTG9nZ2VyU2VydmljZSB7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBtdWx0aXBsYXllclNlcnZpY2U6IFNlcnZlck11bHRpcGxheWVyU2VydmljZTtcbiAgICBwdWJsaWMgbG9nKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2coYH53flt+eX4ke01BTkdPX0xPR19QUkVGSVh9U2VydmVyfnd+XVt+bGJ+TG9nfnd+XWAsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2dXYXJuaW5nKGBbJHtNQU5HT19MT0dfUFJFRklYfVNlcnZlcl1bV2Fybl1gLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXJyb3IoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZ0Vycm9yKGBbJHtNQU5HT19MT0dfUFJFRklYfVNlcnZlcl1bRXJyb3JdYCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlYnVnKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2dEZWJ1Zyhgfnd+W355fiR7TUFOR09fTE9HX1BSRUZJWH1TZXJ2ZXJ+d35dW35sY35EZWJ1Z353fl1gLCAuLi5hcmdzKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7XG4gICAgQmFzZVJQQ1NlcnZpY2UsXG4gICAgRXZlbnREZXN0aW5hdGlvbixcbiAgICB0eXBlIFJQQ1BheWxvYWQsXG4gICAgUlBDX1JFU1VMVF9USU1FT1VULFxuICAgIFJQQ19SRVNVTFRfUExBWUVSX0RJU0NPTk5FQ1RFRCxcbiAgICBSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQsXG59IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHtcbiAgICBFVkVOVF9TRVJWSUNFLFxuICAgIEVycm9yTWVzc2FnZSxcbiAgICB0eXBlIFJQQ0NhbGxPcHRpb25zLFxuICAgIHR5cGUgUlBDUmVzdWx0LFxuICAgIHR5cGUgU2NyaXB0UlBDSGFuZGxlcixcbiAgICBnZW5lcmF0ZVJhbmRvbUlkLFxufSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBNdWx0aXBsYXllclBsYXllciwgUlBDU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFdmVudFNlcnZpY2UgfSBmcm9tICcuL3NlcnZlci1ldmVudC5zZXJ2aWNlJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlcnZlclJQQ1NlcnZpY2UgZXh0ZW5kcyBCYXNlUlBDU2VydmljZTxNYW5nb1JQQy5DdXN0b21TZXJ2ZXJSUEM+IGltcGxlbWVudHMgUlBDU2VydmljZSB7XG4gICAgQGluamVjdChFVkVOVF9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5ICRldmVudFNlcnZpY2U6IFNlcnZlckV2ZW50U2VydmljZTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgJGNsaWVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIFNjcmlwdFJQQ0hhbmRsZXI+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5ICR3ZWJWaWV3SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0UlBDSGFuZGxlcj4oKTtcblxuICAgIHB1YmxpYyBhc3luYyBjYWxsUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBNdWx0aXBsYXllclBsYXllcj4oXG4gICAgICAgIHBsYXllcjogVSxcbiAgICAgICAgcnBjTmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJUb0NsaWVudFJQQz4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICAgICBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9LFxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlQ2FsbChwbGF5ZXIsIHJwY05hbWUsIEV2ZW50RGVzdGluYXRpb24uQ2xpZW50LCBvcHRpb25zLCBib2R5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBNdWx0aXBsYXllclBsYXllcj4oXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tQ2xpZW50VG9TZXJ2ZXJSUEM+LFxuICAgICAgICBoYW5kbGVyOiAoc2VuZGVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPixcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuJGNsaWVudEhhbmRsZXJzLmhhcyhycGNOYW1lKSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIFJQQy4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDSGFuZGxlckFscmVhZHlFeGlzdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnBjSGFuZGxlcjogU2NyaXB0UlBDSGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJGNsaWVudEhhbmRsZXJzLmRlbGV0ZShycGNOYW1lKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBycGNOYW1lLFxuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuJGNsaWVudEhhbmRsZXJzLnNldChycGNOYW1lLCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2FsbFdlYlZpZXc8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgcGxheWVyOiBVLFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBycGNOYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbVNlcnZlclRvV2ViVmlld1JQQz4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICAgICBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9LFxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlQ2FsbChwbGF5ZXIsIHJwY05hbWUsIEV2ZW50RGVzdGluYXRpb24uV2ViVmlldywgb3B0aW9ucywgYm9keSwgaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUEMsIFUgZXh0ZW5kcyBNdWx0aXBsYXllclBsYXllcj4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDPixcbiAgICAgICAgaGFuZGxlcjogKFxuICAgICAgICAgICAgcGxheWVyOiBVLFxuICAgICAgICAgICAgYm9keTogUGFyYW1ldGVyczxNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUENbRV0+WzBdLFxuICAgICAgICApID0+IFJldHVyblR5cGU8TWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDW0VdPixcbiAgICApIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYCR7aWR9Ojoke3JwY05hbWV9YDtcbiAgICAgICAgaWYgKHRoaXMuJHdlYlZpZXdIYW5kbGVycy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIFJQQy4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDSGFuZGxlckFscmVhZHlFeGlzdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnBjSGFuZGxlcjogU2NyaXB0UlBDSGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJHdlYlZpZXdIYW5kbGVycy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBycGNOYW1lLFxuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuJHdlYlZpZXdIYW5kbGVycy5zZXQoa2V5LCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jICRoYW5kbGVDYWxsPFRSZXN1bHQ+KFxuICAgICAgICBwbGF5ZXI6IE11bHRpcGxheWVyUGxheWVyLFxuICAgICAgICBycGNOYW1lOiBzdHJpbmcsXG4gICAgICAgIGRlc3RpbmF0aW9uOiBFdmVudERlc3RpbmF0aW9uLCAvLyAnY2xpZW50JyB8ICd3ZWJ2aWV3JyxcbiAgICAgICAgb3B0aW9ucz86IFBhcnRpYWw8UlBDQ2FsbE9wdGlvbnM+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICAgICAgd2ViVmlld0lkPzogc3RyaW5nIHwgbnVtYmVyLFxuICAgICkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8UlBDUmVzdWx0PFRSZXN1bHQ+PigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwbGF5ZXIudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKDxSUENSZXN1bHQ8VFJlc3VsdD4+UlBDX1JFU1VMVF9QTEFZRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNhbGxJZCA9IGdlbmVyYXRlUmFuZG9tSWQoKTtcbiAgICAgICAgICAgIGxldCB0aW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0O1xuXG4gICAgICAgICAgICBjb25zdCBkaXNjb25uZWN0SGFuZGxlciA9IHRoaXMuJGV2ZW50U2VydmljZS5vblBsYXllckRpc2Nvbm5lY3QoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5wbGF5ZXIgPT09IHBsYXllcikge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKDxSUENSZXN1bHQ8VFJlc3VsdD4+UlBDX1JFU1VMVF9QTEFZRVJfRElTQ09OTkVDVEVEKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgb25jZUhhbmRsZSA9IChfcGxheWVyOiBNdWx0aXBsYXllclBsYXllciwgYm9keTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKDxSUENSZXN1bHQ8VFJlc3VsdD4+Ym9keSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gRXhhbXBsZTogUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfMjFld3JFcSwgUlBDOjpSRVRVUk5fRlJPTV9XRUJWSUVXX3RlRXFkMlxuICAgICAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID1cbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy4kZXZlbnRTZXJ2aWNlLm9uY2VXZWJWaWV3KHdlYlZpZXdJZCEsIGBSUEM6OlJFVFVSTl9GUk9NX1dFQlZJRVdfJHtjYWxsSWR9YCwgb25jZUhhbmRsZSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiRldmVudFNlcnZpY2Uub25jZVBsYXllcihgUlBDOjpSRVRVUk5fRlJPTV9DTElFTlRfJHtjYWxsSWR9YCwgb25jZUhhbmRsZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IFJQQ1BheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgc291cmNlOiBFdmVudERlc3RpbmF0aW9uLlNlcnZlcixcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgICAgICAgICBpZDogY2FsbElkLFxuICAgICAgICAgICAgICAgIHJwY05hbWUsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBFeGFtcGxlOiBSUEM6OkNBTExfU0VSVkVSLCBSUEM6OkNBTExfV0VCVklFV1xuICAgICAgICAgICAgZGVzdGluYXRpb24gPT09IEV2ZW50RGVzdGluYXRpb24uV2ViVmlld1xuICAgICAgICAgICAgICAgID8gcGxheWVyLmVtaXRXZWJWaWV3KHdlYlZpZXdJZCEsICdSUEM6OkNBTExfV0VCVklFVycsIHBheWxvYWQpXG4gICAgICAgICAgICAgICAgOiBwbGF5ZXIuZW1pdCgnUlBDOjpDQUxMX0NMSUVOVCcsIHBheWxvYWQpO1xuXG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5SUENfUkVTVUxUX1RJTUVPVVQpO1xuICAgICAgICAgICAgfSwgb3B0aW9ucz8udGltZW91dCA/PyB0aGlzLiRUSU1FT1VUKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudCBpbXBsZW1lbnRzIFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgICApIHt9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMucmVtb3ZlKHRoaXMuZXZlbnROYW1lLCB0aGlzLmxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJQbGF5ZXIsIFNlcnZlckV2ZW50RW1taXRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQgfSBmcm9tICcuL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlcic7XG5cbnR5cGUgTmF0aXZlU2VydmVyRXZlbnQgPSBrZXlvZiBJU2VydmVyRXZlbnRzO1xuY29uc3QgTkFUSVZFX1NFUlZFUl9FVkVOVFMgPSBuZXcgU2V0PE5hdGl2ZVNlcnZlckV2ZW50PihbXG4gICAgJ2VudGl0eUNyZWF0ZWQnLFxuICAgICdlbnRpdHlEZXN0cm95ZWQnLFxuICAgICdlbnRpdHlNb2RlbENoYW5nZScsXG4gICAgJ2luY29taW5nQ29ubmVjdGlvbicsXG4gICAgJ3BhY2thZ2VzTG9hZGVkJyxcbiAgICAncGxheWVyQ2hhdCcsXG4gICAgJ3BsYXllckNvbW1hbmQnLFxuICAgICdwbGF5ZXJEYW1hZ2UnLFxuICAgICdwbGF5ZXJEZWF0aCcsXG4gICAgJ3BsYXllckVudGVyQ2hlY2twb2ludCcsXG4gICAgJ3BsYXllckVudGVyQ29sc2hhcGUnLFxuICAgICdwbGF5ZXJFbnRlclZlaGljbGUnLFxuICAgICdwbGF5ZXJFeGl0Q2hlY2twb2ludCcsXG4gICAgJ3BsYXllckV4aXRDb2xzaGFwZScsXG4gICAgJ3BsYXllckV4aXRWZWhpY2xlJyxcbiAgICAncGxheWVySm9pbicsXG4gICAgJ3BsYXllclF1aXQnLFxuICAgICdwbGF5ZXJSZWFjaFdheXBvaW50JyxcbiAgICAncGxheWVyUmVhZHknLFxuICAgICdwbGF5ZXJTcGF3bicsXG4gICAgJ3BsYXllclN0YXJ0RW50ZXJWZWhpY2xlJyxcbiAgICAncGxheWVyU3RhcnRFeGl0VmVoaWNsZScsXG4gICAgJ3BsYXllclN0cmVhbUluJyxcbiAgICAncGxheWVyU3RyZWFtT3V0JyxcbiAgICAncGxheWVyV2VhcG9uQ2hhbmdlJyxcbiAgICAnc2VydmVyU2h1dGRvd24nLFxuICAgICd0cmFpbGVyQXR0YWNoZWQnLFxuICAgICd2ZWhpY2xlRGFtYWdlJyxcbiAgICAndmVoaWNsZURlYXRoJyxcbiAgICAndmVoaWNsZUhvcm5Ub2dnbGUnLFxuICAgICd2ZWhpY2xlU2lyZW5Ub2dnbGUnLFxuXSk7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIgaW1wbGVtZW50cyBTZXJ2ZXJFdmVudEVtbWl0ZXIge1xuXG4gICAgZW1pdChldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLmNhbGwoZXZlbnROYW1lLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIG1wLmV2ZW50cy5hZGQoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgb25jZShldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG9uY2VXcmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICAgICAgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIG1wLmV2ZW50cy5hZGQoZXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQoZXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgfVxuXG4gICAgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgZW1pdFBsYXllcihwbGF5ZXI6IE11bHRpcGxheWVyUGxheWVyLCBldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgLy8gSW4gUmFnZU1QLCBwbGF5ZXIuY2FsbCgpIGlzIHVzZWQgdG8gZW1pdCBldmVudHMgdG8gY2xpZW50c1xuICAgICAgICAocGxheWVyIGFzIGFueSkuY2FsbChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRBbGxQbGF5ZXJzUmF3KGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBJbiBSYWdlTVAsIHVzZSBtcC5wbGF5ZXJzLmNhbGwoKSB0byBlbWl0IHRvIGFsbCBwbGF5ZXJzXG4gICAgICAgIG1wLnBsYXllcnMuY2FsbChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZVJhdyhldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGhhcyBjYWxsVW5yZWxpYWJsZSBmb3IgdW5yZWxpYWJsZSBldmVudHNcbiAgICAgICAgbXAucGxheWVycy5jYWxsVW5yZWxpYWJsZShldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRVbnJlbGlhYmxlUmF3KHBsYXllcnM6IE11bHRpcGxheWVyUGxheWVyW10sIGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IHBsYXllciBvZiBwbGF5ZXJzKSB7XG4gICAgICAgICAgICAocGxheWVyIGFzIGFueSkuY2FsbFVucmVsaWFibGUoZXZlbnROYW1lLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheWVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgLy8gTmF0aXZlIFJBR0VNUCBldmVudHMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCAnb24nIHR5cGVcbiAgICAgICAgLy8gVGhleSBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBnYW1lIGVuZ2luZSwgbm90IGJ5IGNsaWVudC10by1zZXJ2ZXIgY29tbXVuaWNhdGlvblxuICAgICAgICBpZiAoTkFUSVZFX1NFUlZFUl9FVkVOVFMuaGFzKGV2ZW50TmFtZSBhcyBOYXRpdmVTZXJ2ZXJFdmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEN1c3RvbSBjbGllbnQtdG8tc2VydmVyIGV2ZW50cyAtIGRhdGEgaXMgSlNPTiBzdHJpbmdpZmllZCBmcm9tIGNsaWVudFxuICAgICAgICBjb25zdCB3cmFwcGVyID0gKHBsYXllcjogUGxheWVyTXAsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gYXJncy5tYXAoYXJnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGFyZyk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsaXN0ZW5lcihwbGF5ZXIsIC4uLnBhcnNlZEFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBtcC5ldmVudHMuYWRkKGV2ZW50TmFtZSwgd3JhcHBlcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICB9XG5cbiAgICBvbmNlUGxheWVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgLy8gTmF0aXZlIFJBR0VNUCBldmVudHMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCAnb25jZScgdHlwZVxuICAgICAgICBpZiAoTkFUSVZFX1NFUlZFUl9FVkVOVFMuaGFzKGV2ZW50TmFtZSBhcyBOYXRpdmVTZXJ2ZXJFdmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uY2UoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3VzdG9tIGNsaWVudC10by1zZXJ2ZXIgZXZlbnRzIC0gZGF0YSBpcyBKU09OIHN0cmluZ2lmaWVkIGZyb20gY2xpZW50XG4gICAgICAgIGNvbnN0IG9uY2VXcmFwcGVyID0gKHBsYXllcjogUGxheWVyTXAsIC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IGFyZ3MubWFwKGFyZyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShhcmcpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGlzdGVuZXIocGxheWVyLCAuLi5wYXJzZWRBcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChldmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudChldmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBvZmZQbGF5ZXIoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFdmVudEVtbWl0ZXIsIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIgfSBmcm9tICcuL3JhZ2VtcC1ldmVudC1lbW1pdGVyJztcblxuZXhwb3J0IGNsYXNzIFNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBleHRlbmRzIFJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBpbXBsZW1lbnRzIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB7XG4gICAgcHVibGljIG92ZXJyaWRlIEV2ZW50czogU2VydmVyRXZlbnRFbW1pdGVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuRXZlbnRzID0gbmV3IFNlcnZlclJhZ2VNUEV2ZW50RW1taXRlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQbGF5ZXIoKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgbXAuUGxheWVyIGNvbnN0cnVjdG9yIGZvciBmYWN0b3J5IHB1cnBvc2VzXG4gICAgICAgIHJldHVybiAobXAgYXMgYW55KS5QbGF5ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEJsaXBGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGZhY3RvcnkgcGF0dGVybiBsaWtlIGFsdDpWXG4gICAgICAgIC8vIFdlIGNhbiBleHRlbmQgdGhlIHByb3RvdHlwZSBpbnN0ZWFkXG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkJsaXApIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQmxpcC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1hcmtlckZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLk1hcmtlcikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5NYXJrZXIucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb2xTaGFwZUZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkNvbHNoYXBlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLkNvbHNoYXBlLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q2hlY2twb2ludEZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkNoZWNrcG9pbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQ2hlY2twb2ludC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9iamVjdEZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLk9iamVjdCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5PYmplY3QucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQZWRGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5QZWQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuUGVkLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGxheWVyRmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuUGxheWVyKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlBsYXllci5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlaGljbGVGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5WZWhpY2xlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlZlaGljbGUucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsRW50aXR5R3JvdXBcbiAgICAgICAgLy8gQ291bGQgbG9nIGEgd2FybmluZyBvciBpbXBsZW1lbnQgY3VzdG9tIHNvbHV0aW9uXG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsRW50aXR5XG4gICAgICAgIC8vIENvdWxkIGxvZyBhIHdhcm5pbmcgb3IgaW1wbGVtZW50IGN1c3RvbSBzb2x1dGlvblxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWb2ljZUNoYW5uZWxGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIHZvaWNlIGlzIGhhbmRsZWQgZGlmZmVyZW50bHlcbiAgICAgICAgLy8gQ291bGQgaW1wbGVtZW50IGN1c3RvbSB2b2ljZSBjaGFubmVsIG1hbmFnZW1lbnRcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBsb2dnaW5nIG1ldGhvZHMgLSBSYWdlTVAgc2VydmVyIHVzZXMgY29uc29sZS5sb2csIG5vdCBtcC5jb25zb2xlLmxvZ0luZm9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbG9nKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbG9nRXJyb3IoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGxvZ1dhcm5pbmcoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbG9nRGVidWcoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbREVCVUddICR7bWVzc2FnZX1gKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlRmlsdGVycyBhcyAkVXNlRmlsdGVycywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICByZXR1cm4gJFVzZUZpbHRlcnMoLi4uZmlsdGVycyk7XG59XG4iLCAiaW1wb3J0IHsgT25JbnRlcm5hbCwgT25jZUludGVybmFsIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IElOVEVSTkFMX0VWRU5UUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblNjcmlwdFJQQygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU0NSSVBUX1JQQyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUEMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TQ1JJUFRfUlBDX0FOU1dFUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUENfQU5TV0VSKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblNlcnZlclN0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNFUlZFUl9TVEFSVEVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VTZXJ2ZXJTdGFydGVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNFUlZFUl9TVEFSVEVEKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkNvbm5lY3Rpb25RdWV1ZUFkZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OTkVDVElPTl9RVUVVRV9BREQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUNvbm5lY3Rpb25RdWV1ZUFkZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05ORUNUSU9OX1FVRVVFX0FERCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25uZWN0aW9uUXVldWVSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25uZWN0aW9uUXVldWVSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OTkVDVElPTl9RVUVVRV9SRU1PVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyQ29ubmVjdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyQ29ubmVjdERlbmllZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1RfREVOSUVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJDb25uZWN0RGVuaWVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9DT05ORUNUX0RFTklFRCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEaXNjb25uZWN0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfRElTQ09OTkVDVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyRGlzY29ubmVjdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfRElTQ09OTkVDVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9EQU1BR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckRhbWFnZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfREFNQUdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllckRlYXRoKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfREVBVEgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckRlYXRoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9ERUFUSCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJIZWFsKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfSEVBTCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVySGVhbCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfSEVBTCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJDb250cm9sUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTlRST0xfUkVRVUVTVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyQ29udHJvbFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTlRST0xfUkVRVUVTVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJJbnRlcmlvckNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0lOVEVSSU9SX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVySW50ZXJpb3JDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0lOVEVSSU9SX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEaW1lbnNpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9ESU1FTlNJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJEaW1lbnNpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0RJTUVOU0lPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyV2VhcG9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfV0VBUE9OX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyV2VhcG9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9XRUFQT05fQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN5bmNlZFNjZW5lUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTeW5jZWRTY2VuZVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN5bmNlZFNjZW5lU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN5bmNlZFNjZW5lU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9TVEFSVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTeW5jZWRTY2VuZVN0b3AoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RPUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyU3luY2VkU2NlbmVTdG9wKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RPUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTeW5jZWRTY2VuZVVwZGF0ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9VUERBVEUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN5bmNlZFNjZW5lVXBkYXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclNwYXduKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1BBV04pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclNwYXduKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TUEFXTik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJBbmltYXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9BTklNQVRJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJBbmltYXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0FOSU1BVElPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyVmVoaWNsZUVudGVyZWQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVFbnRlcmVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTdGFydFZlaGljbGVFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJWZWhpY2xlTGVmdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfTEVGVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyVmVoaWNsZUxlZnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfTEVGVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJWZWhpY2xlU2VhdENoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVTZWF0Q2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX1NFQVRfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uUGVkSGVhbCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0hFQUwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBlZEhlYWwoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0hFQUwpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGVkRGVhdGgoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBFRF9ERUFUSCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGVkRGVhdGgoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0RFQVRIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBlZERhbWFnZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0RBTUFHRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGVkRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBFRF9EQU1BR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVmVoaWNsZURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVTVFJPWSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9ERVNUUk9ZKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVBdHRhY2goKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfQVRUQUNIKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlQXR0YWNoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfQVRUQUNIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVEZXRhY2goKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVUQUNIKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlRGV0YWNoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVUQUNIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVEYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREFNQUdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREFNQUdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVTaXJlblN0YXRlQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WRUhJQ0xFX1NJUkVOX1NUQVRFX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZVNpcmVuU3RhdGVDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9TSVJFTl9TVEFURV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9IT1JOX1NUQVRFX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WRUhJQ0xFX0hPUk5fU1RBVEVfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZvaWNlQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVk9JQ0VfQ09OTkVDVElPTik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVm9pY2VDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZPSUNFX0NPTk5FQ1RJT04pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQ2xpZW50T2JqZWN0RGVsZXRlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DTElFTlRfT0JKRUNUX0RFTEVURSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ2xpZW50T2JqZWN0RGVsZXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNMSUVOVF9PQkpFQ1RfREVMRVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkNsaWVudE9iamVjdFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNMSUVOVF9PQkpFQ1RfUkVRVUVTVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ2xpZW50T2JqZWN0UmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DTElFTlRfT0JKRUNUX1JFUVVFU1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQmFzZU9iamVjdENyZWF0ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfQ1JFQVRFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VCYXNlT2JqZWN0Q3JlYXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkJBU0VfT0JKRUNUX0NSRUFURSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25CYXNlT2JqZWN0UmVtb3ZlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5CQVNFX09CSkVDVF9SRU1PVkUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUJhc2VPYmplY3RSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfUkVNT1ZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbk5ldE93bmVyQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5ORVRfT1dORVJfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VOZXRPd25lckNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5ORVRfT1dORVJfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbldlYXBvbkRhbWFnZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV0VBUE9OX0RBTUFHRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2VhcG9uRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldFQVBPTl9EQU1BR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTWV0YUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZU1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTUVUQV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTG9jYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9NRVRBX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTG9jYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25HbG9iYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HTE9CQUxfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OU09MRV9DT01NQU5EKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05TT0xFX0NPTU1BTkQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVSUk9SKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FUlJPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db2xTaGFwZUV2ZW50KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT0xfU0hBUEVfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUNvbFNoYXBlRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09MX1NIQVBFX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkV4cGxvc2lvbigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVhQTE9TSU9OKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFeHBsb3Npb24oKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVhQTE9TSU9OKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkZpcmVTdGFydCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRklSRV9TVEFSVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRmlyZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkZJUkVfU1RBUlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUHJvamVjdGlsZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QUk9KRUNUSUxFX1NUQVJUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQcm9qZWN0aWxlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUFJPSkVDVElMRV9TVEFSVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DT0xfU0hBUEVfRU5URVIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NPTF9TSEFQRV9MRUFWRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0xFQVZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfRU5URVIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfTEVBVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uR2l2ZVBlZFNjcmlwdGVkVGFzaygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0lWRV9QRURfU0NSSVBURURfVEFTSyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlR2l2ZVBlZFNjcmlwdGVkVGFzaygpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HSVZFX1BFRF9TQ1JJUFRFRF9UQVNLKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkxvY2FsU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX1NDUklQVF9FVkVOVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTG9jYWxTY3JpcHRFdmVudCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9TQ1JJUFRfRVZFTlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVtb3RlU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFTU9URV9TQ1JJUFRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlbW90ZVNjcmlwdEV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFTU9URV9TQ1JJUFRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25BbnlSZXNvdXJjZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5BTllfUkVTT1VSQ0VfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUFueVJlc291cmNlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQU5ZX1JFU09VUkNFX1NUQVJUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uQW55UmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5BTllfUkVTT1VSQ0VfU1RPUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQW55UmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkFOWV9SRVNPVVJDRV9TVE9QKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVzb3VyY2VTdGFydCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlc291cmNlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RBUlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9TVE9QKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VSZXNvdXJjZVN0b3AoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RPUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25SZXNvdXJjZUVycm9yKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9FUlJPUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUmVzb3VyY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9FUlJPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVWRU5UKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uUGxheWVyJywgZXZlbnROYW1lKTtcbn0iLCAiaW1wb3J0IHsgT25XZWJWaWV3IGFzICRPbldlYlZpZXcgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4oaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXc8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb1NlcnZlckV2ZW50Pixcbik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXc8RSBleHRlbmRzIHN0cmluZz4oaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gJE9uV2ViVmlldyhpZCwgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbiBhcyAkT24gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT248RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50PihldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KSB7XG4gICAgcmV0dXJuICRPbihldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXI8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXI8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21QbGF5ZXJUb1NlcnZlckV2ZW50Pikge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25jZVBsYXllcicsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgT25jZVdlYlZpZXcgYXMgJE9uY2VXZWJWaWV3IH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4oaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+LFxuKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+KSB7XG4gICAgcmV0dXJuICRPbmNlV2ViVmlldyhpZCwgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbmNlIGFzICRPbmNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2U8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50PihldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2U8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJFdmVudD4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50Pikge1xuICAgIHJldHVybiAkT25jZShldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSwgTWV0aG9kUGFyYW1UeXBlLCB0eXBlIE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCB0eXBlIE5ld2FibGUsIHR5cGUgUGlwZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBQbGF5ZXIoa2V5Pzogc3RyaW5nLCAuLi5waXBlczogTmV3YWJsZTxQaXBlPltdKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgcGlwZXMsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5QbGF5ZXIsIGRhdGE6IGtleSwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBHdWFyZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlR3VhcmRzIGFzICRVc2VHdWFyZHMsIHR5cGUgTmV3YWJsZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VHdWFyZHMoLi4uZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSkge1xuICAgIHJldHVybiAkVXNlR3VhcmRzKC4uLmd1YXJkcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBJbnRlcmNlcHRvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlSW50ZXJjZXB0b3JzIGFzICRVc2VJbnRlcmNlcHRvcnMsIHR5cGUgTmV3YWJsZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSkge1xuICAgIHJldHVybiAkVXNlSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9ycyk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlUlBDRGVjb3JhdG9yIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyUmVxdWVzdDxFIGV4dGVuZHMga2V5b2YgTWFuZ29SUEMuQ3VzdG9tQ2xpZW50VG9TZXJ2ZXJSUEM+KHJwY05hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21DbGllbnRUb1NlcnZlclJQQz4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbUNsaWVudFRvU2VydmVyUlBDPikge1xuICAgIHJldHVybiBjcmVhdGVSUENEZWNvcmF0b3IoJ29uUGxheWVyUmVxdWVzdCcsIHJwY05hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uUmVxdWVzdCBhcyAkT25SZXF1ZXN0IH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdDxFIGV4dGVuZHMga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyUlBDPihycGNOYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyUlBDPik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyUlBDPikge1xuICAgIHJldHVybiAkT25SZXF1ZXN0KHJwY05hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uV2ViVmlld1JlcXVlc3QgYXMgJE9uV2ViVmlld1JlcXVlc3QgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3UmVxdWVzdDxFIGV4dGVuZHMga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDPihpZDogc3RyaW5nIHwgbnVtYmVyLCBycGNOYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgcnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDPixcbik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KGlkOiBzdHJpbmcgfCBudW1iZXIsIHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbVdlYlZpZXdUb1NlcnZlclJQQz4pIHtcbiAgICByZXR1cm4gJE9uV2ViVmlld1JlcXVlc3QoaWQsIHJwY05hbWUpO1xufVxuIiwgImV4cG9ydCBjb25zdCBUSFJPVFRMRVJfTElNSVQgPSAnVEhST1RUTEVSX0xJTUlUJztcbmV4cG9ydCBjb25zdCBUSFJPVFRMRVJfVFRMID0gJ1RIUk9UVExFUl9UVEwnO1xuZXhwb3J0IGNvbnN0IFRIUk9UVExFUl9PUFRJT05TID0gJ1RIUk9UVExFUl9NT0RVTEVfT1BUSU9OUyc7XG5leHBvcnQgY29uc3QgVEhST1RUTEVSX1NLSVAgPSAnVEhST1RUTEVSX1NLSVAnO1xuZXhwb3J0IGNvbnN0IFRIUk9UVExFUl9TVE9SQUdFID0gJ1RIUk9UVExFUl9TVE9SQUdFJztcbiIsICJpbXBvcnQgeyBUSFJPVFRMRVJfU0tJUCB9IGZyb20gJy4uL3Rocm90dGxlci5jb25zdGFudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2tpcFRocm90dGxlKHNraXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0geyBkZWZhdWx0OiB0cnVlIH0pIHtcbiAgICByZXR1cm4gKHRhcmdldDogYW55LCBfcHJvcGVydHlLZXk/OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNraXApIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUSFJPVFRMRVJfU0tJUCArIGtleSwgc2tpcFtrZXldLCBkZXNjcmlwdG9yLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoVEhST1RUTEVSX1NLSVAgKyBrZXksIHNraXBba2V5XSwgdGFyZ2V0KTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgVGhyb3R0bGVyTWV0aG9kT3JDb250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVEhST1RUTEVSX0xJTUlULCBUSFJPVFRMRVJfVFRMIH0gZnJvbSAnLi4vdGhyb3R0bGVyLmNvbnN0YW50cyc7XG5cbmZ1bmN0aW9uIHNldFRocm90dGxlck1ldGFkYXRhKHRhcmdldDogYW55LCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBUaHJvdHRsZXJNZXRob2RPckNvbnRyb2xsZXJPcHRpb25zPik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoVEhST1RUTEVSX1RUTCArIG5hbWUsIG9wdGlvbnNbbmFtZV0hLnR0bCwgdGFyZ2V0KTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUSFJPVFRMRVJfTElNSVQgKyBuYW1lLCBvcHRpb25zW25hbWVdIS5saW1pdCwgdGFyZ2V0KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaHJvdHRsZShvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBUaHJvdHRsZXJNZXRob2RPckNvbnRyb2xsZXJPcHRpb25zPikge1xuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIF9wcm9wZXJ0eUtleT86IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pID0+IHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHNldFRocm90dGxlck1ldGFkYXRhKGRlc2NyaXB0b3IudmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGhyb3R0bGVyTWV0YWRhdGEodGFyZ2V0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgUmVzb2x2YWJsZSwgVGhyb3R0bGVyTGltaXREZXRhaWwsIFRocm90dGxlck1vZHVsZU9wdGlvbnMsIFRocm90dGxlck9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVEhST1RUTEVSX0xJTUlULCBUSFJPVFRMRVJfT1BUSU9OUywgVEhST1RUTEVSX1NLSVAsIFRIUk9UVExFUl9TVE9SQUdFLCBUSFJPVFRMRVJfVFRMIH0gZnJvbSAnLi90aHJvdHRsZXIuY29uc3RhbnRzJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0LCBHdWFyZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBUaHJvdHRsZXJTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgICBpc0Z1bmN0aW9uLFxuICAgIFRvb01hbnlSZXF1ZXN0cyxcbiAgICB0eXBlIE9uTW9kdWxlSW5pdCxcbiAgICB0eXBlIFJlZmxlY3RvclNlcnZpY2UsXG4gICAgRXJyb3JNZXNzYWdlLFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0LFxuICAgIFJFRkxFQ1RPUl9TRVJWSUNFLFxufSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGhyb3R0bGVyR3VhcmQgaW1wbGVtZW50cyBHdWFyZCwgT25Nb2R1bGVJbml0IHtcbiAgICBASW5qZWN0KFRIUk9UVExFUl9PUFRJT05TKSBwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9uczogVGhyb3R0bGVyTW9kdWxlT3B0aW9ucztcbiAgICBASW5qZWN0KFRIUk9UVExFUl9TVE9SQUdFKSBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlO1xuICAgIEBJbmplY3QoUkVGTEVDVE9SX1NFUlZJQ0UpIHByb3RlY3RlZCByZWFkb25seSByZWZsZWN0b3I6IFJlZmxlY3RvclNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIHRocm90dGxlcnM6IEFycmF5PFRocm90dGxlck9wdGlvbnM+O1xuICAgIHByb3RlY3RlZCBjb21tb25PcHRpb25zOiBQaWNrPFRocm90dGxlck9wdGlvbnMsICdza2lwSWYnPjtcblxuICAgIHB1YmxpYyBhc3luYyBvbk1vZHVsZUluaXQoKSB7XG4gICAgICAgIHRoaXMudGhyb3R0bGVycyA9IChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucykgPyB0aGlzLm9wdGlvbnMgOiB0aGlzLm9wdGlvbnMudGhyb3R0bGVycylcbiAgICAgICAgICAgIC5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZmlyc3QudHRsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2Vjb25kLnR0bCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdC50dGwgLSBzZWNvbmQudHRsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoKG9wdCkgPT4gKHsgLi4ub3B0LCBuYW1lOiBvcHQubmFtZSA/PyAnZGVmYXVsdCcgfSkpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbW1vbk9wdGlvbnMgPSB7fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBza2lwSWY6IHRoaXMub3B0aW9ucy5za2lwSWYhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5BY3RpdmF0ZShjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlczogYm9vbGVhbltdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbmFtZWRUaHJvdHRsZXIgb2YgdGhpcy50aHJvdHRsZXJzKSB7XG4gICAgICAgICAgICAvLyBSZXR1cm4gZWFybHkgaWYgdGhlIGN1cnJlbnQgcm91dGUgc2hvdWxkIGJlIHNraXBwZWQuXG4gICAgICAgICAgICBjb25zdCBza2lwID0gdGhpcy5yZWZsZWN0b3IuZ2V0QWxsQW5kT3ZlcnJpZGU8Ym9vbGVhbj4oVEhST1RUTEVSX1NLSVAgKyBuYW1lZFRocm90dGxlci5uYW1lLCBbXG4gICAgICAgICAgICAgICAgY29udGV4dC5oYW5kbGVyLFxuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xhc3NSZWYsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGNvbnN0IHNraXBJZiA9IG5hbWVkVGhyb3R0bGVyLnNraXBJZiB8fCB0aGlzLmNvbW1vbk9wdGlvbnMuc2tpcElmO1xuICAgICAgICAgICAgaWYgKHNraXAgfHwgc2tpcElmPy4oY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZXMucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmV0dXJuIGVhcmx5IHdoZW4gd2UgaGF2ZSBubyBsaW1pdCBvciB0dGwgZGF0YS5cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlT3JDbGFzc0xpbWl0ID0gdGhpcy5yZWZsZWN0b3IuZ2V0QWxsQW5kT3ZlcnJpZGU8UmVzb2x2YWJsZTxudW1iZXI+PihUSFJPVFRMRVJfTElNSVQgKyBuYW1lZFRocm90dGxlci5uYW1lLCBbXG4gICAgICAgICAgICAgICAgY29udGV4dC5oYW5kbGVyLFxuICAgICAgICAgICAgICAgIGNvbnRleHQuY2xhc3NSZWYsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlT3JDbGFzc1R0bCA9IHRoaXMucmVmbGVjdG9yLmdldEFsbEFuZE92ZXJyaWRlPFJlc29sdmFibGU8bnVtYmVyPj4oVEhST1RUTEVSX1RUTCArIG5hbWVkVGhyb3R0bGVyLm5hbWUsIFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgY29udGV4dC5jbGFzc1JlZixcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBzcGVjaWZpYyBsaW1pdHMgYXJlIHNldCBhdCBjbGFzcyBvciByb3V0ZSBsZXZlbCwgb3RoZXJ3aXNlIHVzZSBnbG9iYWwgb3B0aW9ucy5cbiAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gYXdhaXQgdGhpcy5yZXNvbHZlVmFsdWUoY29udGV4dCwgcm91dGVPckNsYXNzTGltaXQgfHwgbmFtZWRUaHJvdHRsZXIubGltaXQpO1xuICAgICAgICAgICAgY29uc3QgdHRsID0gYXdhaXQgdGhpcy5yZXNvbHZlVmFsdWUoY29udGV4dCwgcm91dGVPckNsYXNzVHRsIHx8IG5hbWVkVGhyb3R0bGVyLnR0bCk7XG4gICAgICAgICAgICBjb250aW51ZXMucHVzaChhd2FpdCB0aGlzLmhhbmRsZVJlcXVlc3QoY29udGV4dCwgbGltaXQsIHR0bCwgbmFtZWRUaHJvdHRsZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGludWVzLmV2ZXJ5KChjb250KSA9PiBjb250KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlUmVxdWVzdChjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCBsaW1pdDogbnVtYmVyLCB0dGw6IG51bWJlciwgdGhyb3R0bGVyOiBUaHJvdHRsZXJPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBsYXllciA9IGNvbnRleHQucmVxdWVzdC5wbGF5ZXI7XG4gICAgICAgIGlmKCFwbGF5ZXIpIHRocm93IG5ldyBFcnJvcihgUGxheWVyIGlzIG5vdCBpbiBjb250ZXh0YCk7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2VuZXJhdGVLZXkoY29udGV4dCwgdGhyb3R0bGVyLm5hbWUhKTtcbiAgICAgICAgY29uc3QgeyB0b3RhbEhpdHMsIHRpbWVUb0V4cGlyZSB9ID0gYXdhaXQgdGhpcy5zdG9yYWdlU2VydmljZS5pbmNyZW1lbnQocGxheWVyLCBrZXksIHR0bCk7XG5cbiAgICAgICAgaWYgKHRvdGFsSGl0cyA+IGxpbWl0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnRocm93VGhyb3R0bGluZ0V4Y2VwdGlvbihjb250ZXh0LCB7XG4gICAgICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICAgICAgdHRsLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwbGF5ZXIsXG4gICAgICAgICAgICAgICAgdG90YWxIaXRzLFxuICAgICAgICAgICAgICAgIHRpbWVUb0V4cGlyZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlS2V5KGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBgJHtjb250ZXh0LmNsYXNzUmVmLm5hbWV9LSR7Y29udGV4dC5oYW5kbGVyLm5hbWV9LSR7bmFtZX1gO1xuICAgICAgICByZXR1cm4gY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHByZWZpeCkuZGlnZXN0KCdoZXgnKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyB0aHJvd1Rocm90dGxpbmdFeGNlcHRpb24oY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgX3Rocm90dGxlckxpbWl0RGV0YWlsOiBUaHJvdHRsZXJMaW1pdERldGFpbCkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vTWFueVJlcXVlc3RzKGF3YWl0IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0RXJyb3JNZXNzYWdlKF9jb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSA/PyBFcnJvck1lc3NhZ2UuVG9vTWFueVJlcXVlc3RzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFcnJvck1lc3NhZ2UuVG9vTWFueVJlcXVlc3RzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzb2x2ZVZhbHVlPFQgZXh0ZW5kcyBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuPihjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCByZXNvbHZhYmxlVmFsdWU6IFJlc29sdmFibGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ocmVzb2x2YWJsZVZhbHVlKSA/IHJlc29sdmFibGVWYWx1ZShjb250ZXh0KSA6IHJlc29sdmFibGVWYWx1ZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgSW5qZWN0YWJsZSwgdHlwZSBPbkFwcFNodXRkb3duIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgVGhyb3R0bGVyU3RvcmFnZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlIGltcGxlbWVudHMgT25BcHBTaHV0ZG93biB7XG4gICAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2U6IFdlYWtNYXA8UGxheWVyTXAsIE1hcDxzdHJpbmcsIFRocm90dGxlclN0b3JhZ2VPcHRpb25zPj4gPSBuZXcgV2Vha01hcCgpO1xuICAgIHByaXZhdGUgdGltZW91dElkczogTm9kZUpTLlRpbWVvdXRbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBnZXRFeHBpcmF0aW9uVGltZShwbGF5ZXI6IFBsYXllck1wLCBrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigodGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEuZXhwaXJlc0F0IC0gRGF0ZS5ub3coKSkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEV4cGlyYXRpb25UaW1lKHBsYXllcjogUGxheWVyTXAsIGtleTogc3RyaW5nLCB0dGxNaWxsaXNlY29uZHM6IG51bWJlcikge1xuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5nZXQocGxheWVyKSEuZ2V0KGtleSkhLnRvdGFsSGl0cy0tO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRJZHMgPSB0aGlzLnRpbWVvdXRJZHMuZmlsdGVyKChpZCkgPT4gaWQgIT0gdGltZW91dElkKTtcbiAgICAgICAgfSwgdHRsTWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy50aW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5jcmVtZW50KHBsYXllcjogUGxheWVyTXAsIGtleTogc3RyaW5nLCB0dGw6IG51bWJlcikge1xuICAgICAgICBjb25zdCB0dGxNaWxsaXNlY29uZHMgPSB0dGw7XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQocGxheWVyLCBuZXcgTWFwKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLnNldChrZXksIHsgdG90YWxIaXRzOiAwLCBleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0dGxNaWxsaXNlY29uZHMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGltZVRvRXhwaXJlID0gdGhpcy5nZXRFeHBpcmF0aW9uVGltZShwbGF5ZXIsIGtleSk7XG5cbiAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVUb0V4cGlyZSBvbmNlIGl0IGhhcyBiZWVuIGV4cGlyZWQuXG4gICAgICAgIGlmICh0aW1lVG9FeHBpcmUgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEuZXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIHR0bE1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHRpbWVUb0V4cGlyZSA9IHRoaXMuZ2V0RXhwaXJhdGlvblRpbWUocGxheWVyLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEudG90YWxIaXRzKys7XG4gICAgICAgIHRoaXMuc2V0RXhwaXJhdGlvblRpbWUocGxheWVyLCBrZXksIHR0bE1pbGxpc2Vjb25kcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsSGl0czogdGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEudG90YWxIaXRzLFxuICAgICAgICAgICAgdGltZVRvRXhwaXJlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFwcFNodXRkb3duKCkge1xuICAgICAgICB0aGlzLnRpbWVvdXRJZHMuZm9yRWFjaChjbGVhclRpbWVvdXQpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBHbG9iYWwsIE1vZHVsZSwgdHlwZSBEeW5hbWljTW9kdWxlLCB0eXBlIFByb3ZpZGVyLCB0eXBlIEZhY3RvcnlQcm92aWRlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgeyBUSFJPVFRMRVJfT1BUSU9OUywgVEhST1RUTEVSX1NUT1JBR0UgfSBmcm9tICcuL3Rocm90dGxlci5jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBUaHJvdHRsZXJBc3luY09wdGlvbnMsIFRocm90dGxlck1vZHVsZU9wdGlvbnMsIFRocm90dGxlck9wdGlvbnNGYWN0b3J5IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90aHJvdHRsZXItc3RvcmFnZS5zZXJ2aWNlJztcblxuQEdsb2JhbCgpXG5ATW9kdWxlKClcbmV4cG9ydCBjbGFzcyBUaHJvdHRsZXJNb2R1bGUge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChvcHRpb25zOiBUaHJvdHRsZXJNb2R1bGVPcHRpb25zID0gW10pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZHVsZTogVGhyb3R0bGVyTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBUSFJPVFRMRVJfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRIUk9UVExFUl9TVE9SQUdFLFxuICAgICAgICAgICAgICAgICAgICB1c2VDbGFzczogVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBleHBvcnRzOiBbVEhST1RUTEVSX1NUT1JBR0UsIFRIUk9UVExFUl9PUFRJT05TXSxcbiAgICAgICAgfSBhcyBEeW5hbWljTW9kdWxlPFRocm90dGxlck1vZHVsZT47XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmb3JSb290QXN5bmMob3B0aW9uczogVGhyb3R0bGVyQXN5bmNPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVycyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuY3JlYXRlQXN5bmNQcm92aWRlcnMob3B0aW9ucyksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogVEhST1RUTEVSX1NUT1JBR0UsXG4gICAgICAgICAgICAgICAgdXNlQ2xhc3M6IFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZHVsZTogVGhyb3R0bGVyTW9kdWxlLFxuICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzID8/IFtdLFxuICAgICAgICAgICAgcHJvdmlkZXJzLFxuICAgICAgICAgICAgZXhwb3J0czogcHJvdmlkZXJzLFxuICAgICAgICB9IGFzIER5bmFtaWNNb2R1bGU8VGhyb3R0bGVyTW9kdWxlPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVBc3luY1Byb3ZpZGVycyhvcHRpb25zOiBUaHJvdHRsZXJBc3luY09wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlRXhpc3RpbmcgfHwgb3B0aW9ucy51c2VGYWN0b3J5KSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuY3JlYXRlQXN5bmNPcHRpb25zUHJvdmlkZXIob3B0aW9ucyldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUFzeW5jT3B0aW9uc1Byb3ZpZGVyKG9wdGlvbnMpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IG9wdGlvbnMudXNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMudXNlQ2xhc3MsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdIGFzIFByb3ZpZGVyW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQXN5bmNPcHRpb25zUHJvdmlkZXIob3B0aW9uczogVGhyb3R0bGVyQXN5bmNPcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZUZhY3RvcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogVEhST1RUTEVSX09QVElPTlMsXG4gICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogb3B0aW9ucy51c2VGYWN0b3J5LFxuICAgICAgICAgICAgICAgIGluamVjdDogb3B0aW9ucy5pbmplY3QgPz8gW10sXG4gICAgICAgICAgICB9IGFzIEZhY3RvcnlQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvdmlkZTogVEhST1RUTEVSX09QVElPTlMsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBhc3luYyAob3B0aW9uc0ZhY3Rvcnk6IFRocm90dGxlck9wdGlvbnNGYWN0b3J5KSA9PiBhd2FpdCBvcHRpb25zRmFjdG9yeS5jcmVhdGVUaHJvdHRsZXJPcHRpb25zKCksXG4gICAgICAgICAgICBpbmplY3Q6IG9wdGlvbnMudXNlQ2xhc3MgPyBbb3B0aW9ucy51c2VDbGFzc10gOiBvcHRpb25zLnVzZUV4aXN0aW5nID8gW29wdGlvbnMudXNlRXhpc3RpbmddIDogW10sXG4gICAgICAgIH0gYXMgRmFjdG9yeVByb3ZpZGVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVBcHBCdWlsZGVyIGFzICRjcmVhdGVBcHBCdWlsZGVyLCBBcHBCdWlsZGVyLCBBcHBFbnZpcm9tZW50IH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBQbGF5ZXJQcm90b3R5cGVQbHVnaW4sIFJQQ1BsdWdpbiwgU2VydmljZUJpbmRlclBsdWdpbiB9IGZyb20gJy4vcGx1Z2lucyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IsIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTZXJ2ZXJSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuL211bHRpcGxheWVyL3JhZ2VtcCc7XG5cbmNvbnN0IG11bHRpcGxheWVyU2VydmljZTogU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlID0gbmV3IFNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSgpO1xuXG5jbGFzcyBTZXJ2ZXJBcHBCdWlsZGVyIGV4dGVuZHMgQXBwQnVpbGRlcjxHdWFyZCwgSW50ZXJjZXB0b3IsIEVycm9yRmlsdGVyPiB7XG4gICAgcHVibGljIHNldEJsaXBGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldEJsaXBGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRNYXJrZXJGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldE1hcmtlckZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbFNoYXBlRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRDb2xTaGFwZUZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENoZWNrcG9pbnRGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldENoZWNrcG9pbnRGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRPYmplY3RGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldE9iamVjdEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBlZEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0UGVkRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGxheWVyRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRQbGF5ZXJGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWZWhpY2xlRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRWZWhpY2xlRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmlydHVhbEVudGl0eUdyb3VwRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5RmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRWaXJ0dWFsRW50aXR5RmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Vm9pY2VDaGFubmVsRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRWb2ljZUNoYW5uZWxGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcEJ1aWxkZXIoKSB7XG4gICAgcmV0dXJuIGF3YWl0ICRjcmVhdGVBcHBCdWlsZGVyKHtcbiAgICAgICAgZW52aXJvbWVudDogQXBwRW52aXJvbWVudC5TZXJ2ZXIsXG4gICAgICAgIHBsdWdpbnM6IFtTZXJ2aWNlQmluZGVyUGx1Z2luLCBQbGF5ZXJQcm90b3R5cGVQbHVnaW4sIFJQQ1BsdWdpbl0sXG4gICAgICAgIGFwcEJ1aWxkZXJJbmhlcml0OiBTZXJ2ZXJBcHBCdWlsZGVyLFxuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2VcbiAgICB9KTtcbn1cblxuZXhwb3J0ICogZnJvbSAnLi9leHBvcnRzJztcblxuaW1wb3J0ICcuL2V4dGVuc2lvbi5kLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7QUFBTyxJQUFLQSxnQkFBQUEsMEJBQUFBLGdCQUFBQTs7O1NBQUFBOztBQ0FMLElBQUtDLGtCQUFBQSwwQkFBQUEsa0JBQUFBOzs7Ozs7Ozs7Ozs7Ozs7U0FBQUE7O0FDQUwsSUFBS0MsbUJBQUFBLDBCQUFBQSxtQkFBQUE7Ozs7U0FBQUE7O0FDQUwsSUFBS0MsdUJBQUFBLDBCQUFBQSx1QkFBQUE7OztTQUFBQTs7QUNBTCxJQUFLQyxrQkFBQUEsMEJBQUFBLGtCQUFBQTs7Ozs7Ozs7U0FBQUE7Ozs7QUNBTCxJQUFNQyxpQkFBaUI7QUFDdkIsSUFBTUMsZ0JBQWdCO0FBQ3RCLElBQU1DLGNBQWM7QUFDcEIsSUFBTUMsbUJBQW1CO0FBQ3pCLElBQU1DLG9CQUFvQjtBQUMxQixJQUFNQyxnQkFBZ0I7OztBQ0x0QixJQUFLQyxlQUFBQSwwQkFBQUEsZUFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FBQUE7O0FDQUwsSUFBS0Msa0JBQUFBLDBCQUFBQSxrQkFBQUE7Ozs7U0FBQUE7O0FDQUwsSUFBS0Msa0JBQUFBLDBCQUFBQSxrQkFBQUE7Ozs7Ozs7Ozs7U0FBQUE7Ozs7QUNBWixJQUFJQyxhQUFZLE9BQU87QUFDdkIsSUFBSUMsVUFBUyx3QkFBQyxRQUFRLFVBQVFELFdBQVUsUUFBUSxRQUFRO0FBQUEsRUFDaEQ7QUFBQSxFQUNBLGNBQWM7QUFDbEIsQ0FBQyxHQUhROzs7QUNETixTQUFTRSxtQkFBQUE7QUFDWixTQUFPQyxLQUFLQyxPQUFNLEVBQUdDLFNBQVMsRUFBQSxFQUFJQyxVQUFVLEdBQUcsRUFBQSxJQUFNSCxLQUFLQyxPQUFNLEVBQUdDLFNBQVMsRUFBQSxFQUFJQyxVQUFVLEdBQUcsRUFBQTtBQUNqRztBQUZnQko7QUFBQUEsUUFBQUEsa0JBQUFBLGtCQUFBQTtBQ0FULElBQU1LLGNBQWMsZ0JBQUFDLFFBQUEsQ0FBQ0MsUUFBK0IsT0FBT0EsUUFBUSxhQUEvQyxhQUFBO0FBQ3BCLElBQU1DLFdBQVcsZ0JBQUFGLFFBQUEsQ0FBQ0csT0FBMEIsQ0FBQ0MsTUFBTUQsRUFBQUEsS0FBTyxPQUFPQSxPQUFPLFVBQXZELFVBQUE7QUFDakIsSUFBTUUsYUFBYSxnQkFBQUwsUUFBQSxDQUFDTSxRQUE4QixPQUFPQSxRQUFRLFlBQTlDLFlBQUE7QUFDbkIsSUFBTUMsV0FBVyxnQkFBQVAsUUFBQSxDQUFDTSxRQUE0QixPQUFPQSxRQUFRLFVBQTVDLFVBQUE7QUFDakIsSUFBTUUsV0FBVyxnQkFBQVIsUUFBQSxDQUFDTSxRQUE0QixPQUFPQSxRQUFRLFVBQTVDLFVBQUE7QUFDakIsSUFBTUcsZ0JBQWdCLGdCQUFBVCxRQUFBLENBQUNNLFFBQXNCQSxRQUFRLGVBQS9CLGVBQUE7QUFDdEIsSUFBTUYsUUFBUSxnQkFBQUosUUFBQSxDQUFDTSxRQUFzQ1AsWUFBWU8sR0FBQUEsS0FBUUEsUUFBUSxNQUFuRSxPQUFBO0FBQ2QsSUFBTUksVUFBVSxnQkFBQVYsUUFBQSxDQUFDVyxVQUF3QixFQUFFQSxTQUFTQSxNQUFNQyxTQUFBQSxJQUExQyxTQUFBO0FBQ2hCLElBQU1DLFdBQVcsZ0JBQUFiLFFBQUEsQ0FBQ00sUUFBNEIsT0FBT0EsUUFBUSxVQUE1QyxVQUFBO0FBQ2pCLElBQU1RLGtCQUFrQixnQkFBQWQsUUFBQSxDQUFDTSxRQUFzQkQsV0FBV0MsR0FBQUEsS0FBUUEsSUFBSSxZQUFZUyxTQUFTLGlCQUFuRSxpQkFBQTtBQUN4QixJQUFNQyxZQUFZLGdCQUFBaEIsUUFBQSxDQUFDTSxRQUE2QixPQUFPQSxRQUFRLFdBQTdDLFdBQUE7QUFDbEIsSUFBTVcsWUFBWSxnQkFBQWpCLFFBQUEsQ0FBVU0sUUFBZ0NBLGVBQWVZLFNBQXpELFdBQUE7OztBQ1h6QixTQUFTQyxRQUFRQyxrQkFBa0I7QUNBbkMsU0FBU0MsaUJBQWlCO0FDQTFCLFNBQVNELGNBQUFBLG1CQUFrQjs7Ozs7Ozs7Ozs7Ozs7QUZXcEIsSUFBTUUsdUJBQU4sTUFBTUE7U0FBQUE7OztTQUFBQTs7O0VBQ2dDQztFQUV6QyxNQUFhQyxLQUFLQyxRQUEwRDtBQUV4RSxRQUFJQyxXQUFXRCxNQUFBQSxHQUFTO0FBQ3BCLFlBQU1FLFdBQVVDLFFBQVFDLFlBQXFDQyxnQkFBZ0JDLFFBQVFOLE1BQUFBLEtBQW9DLENBQUM7QUFDMUgsWUFBTU8sZ0JBQWUsS0FBS0MsZ0JBQWdCTixTQUFRTyxPQUFPO0FBQ3pELFlBQU1DLHNCQUFxQixLQUFLQyxrQkFBa0JULFNBQVFVLFdBQVdMLGFBQUFBO0FBRXJFLGFBQXVCO1FBQ25CTSxhQUFhWCxTQUFRVztRQUNyQkMsU0FBU1osU0FBUVk7UUFDakIsR0FBRyxLQUFLQyxZQUFZZixNQUFBQTtRQUNwQixHQUFHVTtRQUNITSxVQUFVaEI7UUFDVmlCLFFBQVFkLFFBQVFDLFlBQXFCQyxnQkFBZ0JhLGNBQWNsQixNQUFBQSxLQUFXO1FBQzlFbUIsV0FBV2pCLFNBQVFpQjtNQUN2QjtJQUNKO0FBRUEsUUFBSW5CLGtCQUFrQm9CLFFBQVNwQixVQUFTLE1BQU1BO0FBQzlDLFFBQUksRUFBRSxZQUFZQSxTQUFTO0FBQ3ZCLFdBQUtGLGNBQWN1QixNQUFNLGtEQUFBO0FBQ3pCLFlBQU0sSUFBSUMsTUFBTUMsYUFBYUMsdUJBQXVCO0lBQ3hEO0FBRUEsVUFBTSxFQUFFeEIsUUFBUWdCLFVBQVVDLFFBQVEsR0FBR2YsUUFBQUEsSUFBcUNGO0FBQzFFLFVBQU1PLGVBQWUsS0FBS0MsZ0JBQWdCTixRQUFRTyxPQUFPO0FBQ3pELFVBQU1DLHFCQUFxQixLQUFLQyxrQkFBa0JULFFBQVFVLFdBQVdMLFlBQUFBO0FBRXJFLFdBQXVCO01BQ25CTSxhQUFhWCxRQUFRVztNQUNyQkMsU0FBU1osUUFBUVk7TUFDakIsR0FBRyxLQUFLQyxZQUFZQyxRQUFBQTtNQUNwQixHQUFHTjtNQUNITTtNQUNBQyxRQUFRQSxVQUFVO01BQ2xCRSxXQUFXakIsUUFBUWlCO0lBQ3ZCO0VBQ0o7RUFFUUosWUFBWUMsVUFBbUI7QUFDbkMsVUFBTVMsU0FBU3RCLFFBQVFDLFlBQThCQyxnQkFBZ0JxQixRQUFRVixRQUFBQSxLQUFhLENBQUE7QUFDMUYsVUFBTVcsZUFBZXhCLFFBQVFDLFlBQW9DQyxnQkFBZ0J1QixjQUFjWixRQUFBQSxLQUFhLENBQUE7QUFDNUcsVUFBTWEsUUFBUTFCLFFBQVFDLFlBQTZCQyxnQkFBZ0J5QixPQUFPZCxRQUFBQSxLQUFhLENBQUE7QUFDdkYsVUFBTWUsZUFBZTVCLFFBQVFDLFlBQW9DQyxnQkFBZ0IyQixjQUFjaEIsUUFBQUEsS0FBYSxDQUFBO0FBRTVHLFdBQU87TUFBRVM7TUFBUUU7TUFBY0U7TUFBT0U7SUFBYTtFQUN2RDtFQUVRdkIsZ0JBQWdCQyxTQUE2QztBQUNqRSxXQUFPQSxRQUFRd0IsSUFBb0IsQ0FBQ0MsbUJBQUFBO0FBQ2hDLFVBQUlqQyxXQUFXaUMsY0FBQUEsR0FBaUI7QUFDNUIsWUFBSSxDQUFDL0IsUUFBUWdDLGVBQWU5QixnQkFBZ0IrQixZQUFZRixjQUFBQSxHQUFpQjtBQUNyRSxlQUFLcEMsY0FBY3VCLE1BQU0sa0RBQUE7QUFDekIsZ0JBQU0sSUFBSUMsTUFBTUMsYUFBYWMsdUJBQXVCO1FBQ3hEO0FBQ0EsZUFBT0g7TUFDWCxXQUFXSSxTQUFTSixjQUFBQSxLQUFtQkssU0FBU0wsY0FBQUEsR0FBaUI7QUFDN0QsZUFBT0E7TUFDWCxXQUFXLGFBQWFBLGdCQUFnQjtBQUNwQyxlQUFPQSxlQUFlTTtNQUMxQjtBQUVBLFdBQUsxQyxjQUFjdUIsTUFBTSxrREFBQTtBQUN6QixZQUFNLElBQUlDLE1BQU1DLGFBQWFjLHVCQUF1QjtJQUN4RCxDQUFBO0VBQ0o7RUFFUTFCLGtCQUFrQkMsV0FBaURMLGNBQWdDO0FBQ3ZHLFdBQU9LLFVBQ0ZxQixJQUFJLENBQUNRLGFBQUFBO0FBQ0YsVUFBSXhDLFdBQVd3QyxRQUFBQSxHQUFXO0FBQ3RCLGNBQU1DLHFCQUFxQnZDLFFBQVFDLFlBQWdDQyxnQkFBZ0IrQixZQUFZSyxRQUFBQTtBQUMvRixZQUFJRSxNQUFNRCxrQkFBQUEsR0FBcUI7QUFDM0IsZUFBSzVDLGNBQWN1QixNQUFNLGtEQUFBO0FBQ3pCLGdCQUFNLElBQUlDLE1BQU1DLGFBQWFxQix5QkFBeUI7UUFDMUQ7QUFDQSxlQUFzQjtVQUFFSixTQUFTQztVQUFVSSxVQUFVSjtVQUFVSyxPQUFPSixtQkFBbUJJO1FBQU07TUFDbkcsV0FBVyxjQUFjTCxZQUFZLGNBQWNBLFlBQVksZ0JBQWdCQSxZQUFZLGlCQUFpQkEsVUFBVTtBQUNsSCxlQUFPQTtNQUNYO0FBRUEsV0FBSzNDLGNBQWN1QixNQUFNLGtEQUFBO0FBQ3pCLFlBQU0sSUFBSUMsTUFBTUMsYUFBYXFCLHlCQUF5QjtJQUMxRCxDQUFBLEVBQ0NHLE9BQ0csQ0FBQ0MsS0FBS1AsYUFBQUE7QUFDRixVQUFJbEMsYUFBYTBDLFNBQVNSLFNBQVNELE9BQU8sR0FBRztBQUN6Q1EsWUFBSUUsa0JBQWtCQyxJQUFJVixTQUFTRCxTQUFTQyxRQUFBQTtNQUNoRCxPQUFPO0FBQ0hPLFlBQUlJLGtCQUFrQkQsSUFBSVYsU0FBU0QsU0FBU0MsUUFBQUE7TUFDaEQ7QUFDQSxhQUFPTztJQUNYLEdBQ0E7TUFDSUksbUJBQW1CLG9CQUFJQyxJQUFBQTtNQUN2QkgsbUJBQW1CLG9CQUFJRyxJQUFBQTtJQUMzQixDQUFBO0VBRVo7QUFDSjs7Ozs7Ozs7QUMvR08sSUFBTUMsa0JBQU4sY0FBOEJDLFVBQUFBO1NBQUFBOzs7RUFGckMsT0FFcUNBOzs7QUFBVzs7Ozs7Ozs7O0FDSXpDLElBQU1qRCxTQUFOLE1BQU1BO1NBQUFBOzs7U0FBQUE7OztFQUNPTyxjQUE0QixDQUFBO0VBQ3JDTTtFQUNBcUM7RUFDQUM7RUFDQUM7RUFDQUMsb0JBQWlDLG9CQUFJQyxJQUFBQTtBQUNoRDs7Ozs7O0FDYkEsU0FBU0MsY0FBQUEsbUJBQWtCO0FDQTNCLFNBQVNBLGNBQUFBLG9CQUFrQjtBQ0EzQixTQUFTQyxVQUFBQSxTQUFRRCxjQUFBQSxvQkFBa0I7Ozs7Ozs7OztBRlE1QixJQUFNRSx1QkFBTixNQUFNQTtTQUFBQTs7O1NBQUFBOzs7RUFLRkM7RUFDQUM7RUFDQUM7RUFDQUM7RUFDQUM7RUFDQUM7RUFFUCxJQUFXQyxPQUFPO0FBQ2QsV0FBTyxLQUFLTjtFQUNoQjtFQUVBLElBQVdPLFdBQVc7QUFDbEIsV0FBTyxLQUFLTjtFQUNoQjtFQUVBLElBQVdPLFVBQVU7QUFDakIsV0FBTyxLQUFLTjtFQUNoQjtFQUVBLElBQVdPLFVBQVU7QUFDakIsV0FBTyxLQUFLTjtFQUNoQjtFQUVBLElBQVdPLFdBQVc7QUFDbEIsV0FBTyxLQUFLTjtFQUNoQjtFQUVBLElBQVdPLE9BQU87QUFDZCxXQUFPLEtBQUtOO0VBQ2hCO0FBQ0o7Ozs7Ozs7Ozs7OztBQ3ZDTyxJQUFNTyxtQkFBTixNQUFNQTtTQUFBQTs7O1NBQUFBOzs7RUFDRkM7RUFDQUM7RUFFUCxJQUFXQyxPQUFPO0FBQ2QsV0FBTyxLQUFLRjtFQUNoQjtFQUVBLElBQVdHLFNBQVM7QUFDaEIsV0FBTyxLQUFLRjtFQUNoQjtBQUNKOzs7Ozs7Ozs7Ozs7Ozs7OztBQ1JPLElBQU1HLG9CQUFOLE1BQU1BO1NBQUFBOzs7U0FBQUE7OztFQUNnQ0M7RUFDbENDLGlCQUErQyxvQkFBSUMsSUFBQUE7RUFDbkRDLGtCQUFrRCxvQkFBSUQsSUFBQUE7RUFDdERFLFVBQW1CO0VBRW5CQyxLQUFzQkMsTUFBYztBQUN2QyxRQUFJLEtBQUtGLFNBQVM7QUFDZCxXQUFLSixlQUFlTyxNQUFNLG1EQUFBO0FBQzFCLFlBQU0sSUFBSUMsTUFBTUMsYUFBYUMsc0JBQXNCO0lBQ3ZEO0FBRUEsU0FBS1QsZUFBZVUsUUFBUSxDQUFDQyxhQUFhQSxTQUFTTixJQUFBQSxDQUFBQTtBQUNuRCxTQUFLRixVQUFVO0VBQ25CO0VBRU9HLE1BQTBCTSxTQUFpQkMsU0FBb0I7QUFDbEUsUUFBSSxLQUFLVixTQUFTO0FBQ2QsV0FBS0osZUFBZU8sTUFBTSxtREFBQTtBQUMxQixZQUFNLElBQUlDLE1BQU1DLGFBQWFDLHNCQUFzQjtJQUN2RDtBQUNBLFNBQUtQLGdCQUFnQlEsUUFBUSxDQUFDQyxhQUFhQSxTQUFTO01BQUVDO01BQVNDO0lBQVEsQ0FBQSxDQUFBO0FBQ3ZFLFNBQUtWLFVBQVU7RUFDbkI7RUFFT1csUUFBUUgsVUFBbUM7QUFDOUMsU0FBS1gsZUFBZWUsSUFBSUosUUFBQUE7RUFDNUI7RUFFT0ssU0FBU0wsVUFBcUM7QUFDakQsU0FBS1QsZ0JBQWdCYSxJQUFJSixRQUFBQTtFQUM3QjtBQUNKOzs7Ozs7Ozs7O0FDdkNPLElBQU1NLFdBQU4sTUFBTUE7U0FBQUE7OztFQUFiLE9BQWFBOzs7RUFDRkM7RUFDQUM7RUFFUCxZQUFtQkQsT0FBVTtBQUN6QixTQUFLQSxRQUFRQTtBQUNiLFNBQUtDLFdBQVcsQ0FBQTtFQUNwQjtFQUVPQyxTQUFTQyxPQUFvQjtBQUNoQyxTQUFLRixTQUFTRyxLQUFLRCxLQUFBQTtFQUN2QjtFQUVPRSxZQUFZRixPQUFvQjtBQUNuQyxVQUFNRyxRQUFRLEtBQUtMLFNBQVNNLFFBQVFKLEtBQUFBO0FBQ3BDLFFBQUlHLFVBQVUsSUFBSTtBQUNkLFdBQUtMLFNBQVNPLE9BQU9GLE9BQU8sQ0FBQTtJQUNoQztFQUNKO0FBQ0o7QUFFTyxJQUFNRyxPQUFOLE1BQU1BO1NBQUFBOzs7RUFyQmIsT0FxQmFBOzs7RUFDRkM7RUFFUCxZQUFtQlYsT0FBVTtBQUN6QixTQUFLVSxPQUFPLElBQUlYLFNBQVlDLEtBQUFBO0VBQ2hDO0VBRU9XLFNBQVNDLFVBQXVDO0FBQ25ELGFBQVNDLGFBQWFDLE1BQWlCO0FBQ25DRixlQUFTRSxJQUFBQTtBQUNUQSxXQUFLYixTQUFTYyxRQUFRRixZQUFBQTtJQUMxQjtBQUhTQTtBQUFBQSxJQUFBQSxRQUFBQSxjQUFBQSxjQUFBQTtBQUtUQSxpQkFBYSxLQUFLSCxJQUFJO0VBQzFCO0VBRUEsTUFBYU0sY0FBY0osVUFBZ0Q7QUFDdkUsbUJBQWVDLGFBQWFDLE1BQWlCO0FBQ3pDLFlBQU1GLFNBQVNFLElBQUFBO0FBQ2YsWUFBTUcsUUFBUUMsSUFBSUosS0FBS2IsU0FBU2tCLElBQUlOLFlBQUFBLENBQUFBO0lBQ3hDO0FBSGVBO0FBQUFBLElBQUFBLFFBQUFBLGNBQUFBLGNBQUFBO0FBS2YsVUFBTUEsYUFBYSxLQUFLSCxJQUFJO0VBQ2hDO0VBRU9VLFdBQW1CO0FBQ3RCLFFBQUlDLFNBQVM7QUFDYixVQUFNQyxRQUFrQixDQUFBO0FBRXhCLGFBQVNULGFBQWFDLE1BQW1CUyxPQUFhO0FBQ2xERCxZQUFNbEIsS0FBSyxHQUFHLElBQUlvQixPQUFPRCxRQUFRLENBQUEsQ0FBQSxHQUFLVCxLQUFLZCxLQUFLLEVBQUU7QUFDbERjLFdBQUtiLFNBQVNjLFFBQVEsQ0FBQ1osVUFBVVUsYUFBYVYsT0FBT29CLFFBQVEsQ0FBQSxDQUFBO0lBQ2pFO0FBSFNWO0FBQUFBLElBQUFBLFFBQUFBLGNBQUFBLGNBQUFBO0FBS1RBLGlCQUFhLEtBQUtILE1BQU0sQ0FBQTtBQUN4QlcsYUFBU0MsTUFBTUcsS0FBSyxJQUFBO0FBRXBCLFdBQU9KO0VBQ1g7QUFDSjs7O0FDekRBLElBQU1LLDJCQUE4QztFQUFFQyxRQUFRO0FBQUc7QUFFMUQsU0FBU0MsMEJBQTBCQyxTQUEyQjtBQUNqRSxNQUFJQyxNQUFNRCxPQUFBQSxHQUFVO0FBQ2hCLFdBQU87TUFBRUUsT0FBTztNQUFNQyxPQUFPTjtJQUF5QjtFQUMxRDtBQUVBLE1BQUksQ0FBQ08sU0FBU0osT0FBQUEsR0FBVTtBQUNwQixXQUFPO01BQUVFLE9BQU87TUFBT0MsT0FBT047TUFBMEJRLE9BQU87SUFBdUM7RUFDMUc7QUFFQSxNQUFJLEVBQUUsWUFBWUwsVUFBVTtBQUN4QixXQUFPO01BQUVFLE9BQU87TUFBTUMsT0FBTztRQUFFLEdBQUdOO1FBQTBCLEdBQUdHO01BQVE7SUFBRTtFQUM3RTtBQUNBLE1BQUksWUFBWUEsV0FBVyxDQUFDTSxTQUFTTixRQUFRRixNQUFNLEdBQUc7QUFDbEQsV0FBTztNQUFFSSxPQUFPO01BQU1DLE9BQU9OO01BQTBCUSxPQUFPO0lBQXFDO0VBQ3ZHO0FBRUEsU0FBTztJQUFFSCxPQUFPO0lBQU1DLE9BQU87TUFBRSxHQUFHTjtNQUEwQixHQUFHRztJQUFRO0VBQUU7QUFDN0U7QUFqQmdCRDtBQUFBQSxRQUFBQSwyQkFBQUEsMkJBQUFBO0FDRFQsU0FBU1Esb0JBQTBESixPQUF1QjtBQUM3RixNQUFJRixNQUFNRSxLQUFBQSxHQUFRO0FBQ2QsV0FBTztNQUFFRCxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBNkM7RUFDdEY7QUFFQSxNQUFJLENBQUNHLFdBQVdMLEtBQUFBLEtBQVUsQ0FBQ0MsU0FBU0QsS0FBQUEsR0FBUTtBQUN4QyxXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUE2QztFQUN0RjtBQUVBLE1BQUlHLFdBQVdMLEtBQUFBLEtBQVUsQ0FBQ0ssV0FBV0wsTUFBTU0sVUFBVUMsS0FBSyxHQUFHO0FBQ3pELFdBQU87TUFBRVIsT0FBTztNQUFNQztNQUFPRSxPQUFPO0lBQXdDO0VBQ2hGO0FBRUEsTUFBSUQsU0FBU0QsS0FBQUEsS0FBVSxDQUFDSyxXQUF5QkwsTUFBT08sS0FBSyxHQUFHO0FBQzVELFdBQU87TUFBRVIsT0FBTztNQUFNQztNQUFPRSxPQUFPO0lBQXdDO0VBQ2hGO0FBRUEsU0FBTztJQUFFSCxPQUFPO0lBQU1DO0VBQU07QUFDaEM7QUFsQmdCSTtBQUFBQSxRQUFBQSxxQkFBQUEscUJBQUFBO0FDQVQsU0FBU0ksYUFBYVIsT0FBMkI7QUFDcEQsTUFBSUYsTUFBTUUsS0FBQUEsR0FBUTtBQUNkLFdBQU87TUFBRUQsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQXFDO0VBQzlFO0FBRUEsTUFBSSxDQUFDRyxXQUFXTCxLQUFBQSxLQUFVLENBQUNDLFNBQVNELEtBQUFBLEdBQVE7QUFDeEMsV0FBTztNQUFFRCxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBcUM7RUFDOUU7QUFFQSxNQUFJRyxXQUFXTCxLQUFBQSxLQUFVLENBQUNLLFdBQVdMLE1BQU1NLFVBQVVHLFNBQVMsR0FBRztBQUM3RCxXQUFPO01BQUVWLE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUFvQztFQUM3RTtBQUVBLE1BQUlELFNBQVNELEtBQUFBLEtBQVUsQ0FBQ0ssV0FBa0JMLE1BQU9TLFNBQVMsR0FBRztBQUN6RCxXQUFPO01BQUVWLE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUFvQztFQUM3RTtBQUVBLFNBQU87SUFBRUgsT0FBTztJQUFNQztFQUFNO0FBQ2hDO0FBbEJnQlE7QUFBQUEsUUFBQUEsY0FBQUEsY0FBQUE7QUNDVCxTQUFTRSx1QkFBdUJWLE9BQXNCO0FBQ3pELE1BQUlGLE1BQU1FLEtBQUFBLEtBQVUsQ0FBQ0MsU0FBU0QsS0FBQUEsR0FBUTtBQUNsQyxXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUFvQztFQUM3RTtBQUNBLE1BQUksU0FBU0YsU0FBUyxDQUFDRixNQUFNRSxNQUFNVyxHQUFHLEtBQUssQ0FBQ1IsU0FBU0gsTUFBTVcsR0FBRyxHQUFHO0FBQzdELFdBQU87TUFBRVosT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQXVDO0VBQ2hGO0FBQ0EsTUFBSSxFQUFFLFdBQVdGLFVBQVUsQ0FBQ1ksU0FBU1osTUFBTWEsS0FBSyxHQUFHO0FBQy9DLFdBQU87TUFBRWQsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQW9DO0VBQzdFO0FBRUEsT0FDS0YsTUFBTWMsU0FBU0MsZ0JBQWdCQyxRQUFRaEIsTUFBTWMsU0FBU0MsZ0JBQWdCRSxXQUN2RSxVQUFVakIsU0FDVixDQUFDRixNQUFNRSxNQUFNa0IsSUFBSSxLQUNqQixDQUFDZixTQUFTSCxNQUFNa0IsSUFBSSxHQUN0QjtBQUNFLFdBQU87TUFBRW5CLE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUF3QztFQUNqRjtBQUVBLE1BQUlGLE1BQU1jLFNBQVNDLGdCQUFnQkksVUFBVSxFQUFFLGFBQWFuQixRQUFRO0FBQ2hFLFdBQU87TUFBRUQsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQXNDO0VBQy9FO0FBQ0EsTUFBSUYsTUFBTWMsU0FBU0MsZ0JBQWdCSSxVQUFVLGFBQWFuQixTQUFTLENBQUNLLFdBQVdMLE1BQU1vQixPQUFPLEdBQUc7QUFDM0YsV0FBTztNQUFFckIsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQTZDO0VBQ3RGO0FBRUEsT0FBS0YsTUFBTWMsU0FBU0MsZ0JBQWdCTSxTQUFTckIsTUFBTWMsU0FBU0MsZ0JBQWdCTyxVQUFVLEVBQUUsVUFBVXRCLFFBQVE7QUFDdEcsV0FBTztNQUFFRCxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBbUM7RUFDNUU7QUFDQSxNQUFJRixNQUFNYyxTQUFTQyxnQkFBZ0JNLFNBQVMsVUFBVXJCLFNBQVMsQ0FBQ0csU0FBU0gsTUFBTWtCLElBQUksR0FBRztBQUNsRixXQUFPO01BQUVuQixPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBd0M7RUFDakY7QUFFQSxNQUFJRixNQUFNYyxTQUFTQyxnQkFBZ0JPLFNBQVMsVUFBVXRCLFNBQVMsQ0FBQ1ksU0FBU1osTUFBTWtCLElBQUksR0FBRztBQUNsRixXQUFPO01BQUVuQixPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBd0M7RUFDakY7QUFFQSxNQUNJRixNQUFNYyxTQUFTQyxnQkFBZ0JRLFdBQy9CdkIsTUFBTWMsU0FBU0MsZ0JBQWdCUyxZQUMvQixXQUFXeEIsU0FDWCxDQUFDeUIsTUFBTUMsUUFBUTFCLE1BQU0yQixLQUFLLEdBQzVCO0FBQ0UsV0FBTztNQUFFNUIsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQXlDO0VBQ2xGO0FBQ0EsTUFBSUYsTUFBTWMsU0FBU0MsZ0JBQWdCUSxXQUFXdkIsTUFBTWMsU0FBU0MsZ0JBQWdCUyxZQUFZLEVBQUUsV0FBV3hCLFFBQVE7QUFDMUdBLFVBQU0yQixRQUFRLENBQUE7RUFDbEI7QUFDQSxNQUFJM0IsTUFBTWMsU0FBU0MsZ0JBQWdCUSxXQUFXdkIsTUFBTWMsU0FBU0MsZ0JBQWdCUyxVQUFVO0FBQ25GLGVBQVdJLFFBQVE1QixNQUFNMkIsT0FBUTtBQUM3QixZQUFNLEVBQUU1QixPQUFPRyxNQUFLLElBQUtNLGFBQWFvQixJQUFBQTtBQUN0QyxVQUFJLENBQUM3QixPQUFPO0FBQ1IsZUFBTztVQUFFQSxPQUFPO1VBQU9DO1VBQU9FO1FBQU07TUFDeEM7SUFDSjtFQUNKO0FBRUEsU0FBTztJQUFFSCxPQUFPO0lBQU1DO0VBQU07QUFDaEM7QUEzRGdCVTtBQUFBQSxRQUFBQSx3QkFBQUEsd0JBQUFBO0FDRFQsU0FBU21CLHNCQUFzQjdCLE9BQW9CO0FBQ3RELE1BQUlGLE1BQU1FLEtBQUFBLEtBQVUsQ0FBQ0MsU0FBU0QsS0FBQUEsR0FBUTtBQUNsQyxXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUFtQztFQUM1RTtBQUdBLE1BQUksRUFBRSxVQUFVRixRQUFRO0FBQ3BCLFdBQU87TUFBRUQsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQWtDO0VBQzNFO0FBQ0EsTUFBSSxDQUFDQyxTQUFTSCxNQUFNYyxJQUFJLEdBQUc7QUFDdkIsV0FBTztNQUFFZixPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBdUM7RUFDaEY7QUFFQSxNQUFJLEVBQUUsVUFBVUYsUUFBUTtBQUNwQixXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUFrQztFQUMzRTtBQUNBLE1BQUksQ0FBQ0MsU0FBU0gsTUFBTThCLElBQUksR0FBRztBQUN2QixXQUFPO01BQUUvQixPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBdUM7RUFDaEY7QUFFQSxNQUFJLEVBQUUsWUFBWUYsUUFBUTtBQUN0QixXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUFvQztFQUM3RTtBQUNBLE1BQUksQ0FBQ0MsU0FBU0gsTUFBTStCLE1BQU0sR0FBRztBQUN6QixXQUFPO01BQUVoQyxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBeUM7RUFDbEY7QUFFQSxNQUFJLEVBQUUsWUFBWUYsUUFBUTtBQUNOQSxVQUFPZ0MsU0FBUyxDQUFBO0VBQ3BDO0FBQ0EsTUFBSSxZQUFZaEMsU0FBUyxDQUFDeUIsTUFBTUMsUUFBUTFCLE1BQU1nQyxNQUFNLEdBQUc7QUFDbkQsV0FBTztNQUFFakMsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQXlDO0VBQ2xGO0FBQ0EsYUFBVytCLFNBQVNqQyxNQUFNZ0MsUUFBUTtBQUM5QixVQUFNLEVBQUVqQyxPQUFPRyxNQUFLLElBQUtRLHVCQUF1QnVCLEtBQUFBO0FBQ2hELFFBQUksQ0FBQ2xDLE9BQU87QUFDUixhQUFPO1FBQUVBO1FBQU9DO1FBQU9FO01BQU07SUFDakM7RUFDSjtBQUVBLFNBQU87SUFBRUgsT0FBTztJQUFNQztFQUFNO0FBQ2hDO0FBekNnQjZCO0FBQUFBLFFBQUFBLHVCQUFBQSx1QkFBQUE7QUNBVCxTQUFTSyxjQUF1Q2xDLE9BQXFCO0FBQ3hFLE1BQUlGLE1BQU1FLEtBQUFBLEdBQVE7QUFDZCxXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUFzQztFQUMvRTtBQUVBLE1BQUksQ0FBQ0csV0FBV0wsS0FBQUEsS0FBVSxDQUFDQyxTQUFTRCxLQUFBQSxHQUFRO0FBQ3hDLFdBQU87TUFBRUQsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQXNDO0VBQy9FO0FBRUEsTUFBSUcsV0FBV0wsS0FBQUEsS0FBVSxDQUFDSyxXQUFXTCxNQUFNTSxVQUFVNkIsV0FBVyxHQUFHO0FBQy9ELFdBQU87TUFBRXBDLE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUF1QztFQUNoRjtBQUVBLE1BQUlELFNBQVNELEtBQUFBLEtBQVUsQ0FBQ0ssV0FBbUJMLE1BQU9tQyxXQUFXLEdBQUc7QUFDNUQsV0FBTztNQUFFcEMsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQXVDO0VBQ2hGO0FBRUEsU0FBTztJQUFFSCxPQUFPO0lBQU1DO0VBQU07QUFDaEM7QUFsQmdCa0M7QUFBQUEsUUFBQUEsZUFBQUEsZUFBQUE7QUNBVCxTQUFTRSxvQkFBeURwQyxPQUFxQjtBQUMxRixNQUFJRixNQUFNRSxLQUFBQSxHQUFRO0FBQ2QsV0FBTztNQUFFRCxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBNEM7RUFDckY7QUFFQSxNQUFJLENBQUNHLFdBQVdMLEtBQUFBLEtBQVUsQ0FBQ0MsU0FBU0QsS0FBQUEsR0FBUTtBQUN4QyxXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUE0QztFQUNyRjtBQUVBLE1BQUlHLFdBQVdMLEtBQUFBLEtBQVUsQ0FBQ0ssV0FBV0wsTUFBTU0sVUFBVStCLFNBQVMsR0FBRztBQUM3RCxXQUFPO01BQUV0QyxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBNEM7RUFDckY7QUFFQSxNQUFJRCxTQUFTRCxLQUFBQSxLQUFVLENBQUNLLFdBQXlCTCxNQUFPcUMsU0FBUyxHQUFHO0FBQ2hFLFdBQU87TUFBRXRDLE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUE0QztFQUNyRjtBQUVBLFNBQU87SUFBRUgsT0FBTztJQUFNQztFQUFNO0FBQ2hDO0FBbEJnQm9DO0FBQUFBLFFBQUFBLHFCQUFBQSxxQkFBQUE7QUNEVCxTQUFTRSx1QkFBdUJ0QyxPQUFxQjtBQUN4RCxRQUFNRCxRQUFRSSxTQUFTSCxLQUFBQSxLQUFVdUMsU0FBU3ZDLEtBQUFBLEtBQVVLLFdBQVdMLEtBQUFBLEtBQVVDLFNBQVNELEtBQUFBO0FBQ2xGLFNBQU9ELFFBQVE7SUFBRUE7SUFBT0M7RUFBTSxJQUFJO0lBQUVEO0lBQU9DO0lBQU9FLE9BQU87RUFBNkQ7QUFDMUg7QUFIZ0JvQztBQUFBQSxRQUFBQSx3QkFBQUEsd0JBQUFBO0FDU1QsU0FBU0UsaUJBQWlCeEMsT0FBZTtBQUM1QyxNQUFJLENBQUNDLFNBQVNELEtBQUFBLEtBQVUsQ0FBQ0ssV0FBV0wsS0FBQUEsR0FBUTtBQUN4QyxXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUF5QztFQUNsRjtBQUVBLE1BQUlELFNBQVNELEtBQUFBLEdBQVE7QUFDakIsUUFBSSxFQUFFLGFBQWFBLFFBQVE7QUFDdkIsYUFBTztRQUFFRCxPQUFPO1FBQU9DO1FBQU9FLE9BQU87TUFBd0M7SUFDakY7QUFFQSxVQUFNLEVBQUVILE9BQU9HLE1BQUssSUFBS29DLHVCQUF1QnRDLE1BQU15QyxPQUFPO0FBQzdELFFBQUksQ0FBQzFDLE9BQU87QUFDUixhQUFPO1FBQUVBLE9BQU87UUFBT0M7UUFBT0U7TUFBTTtJQUN4QztBQUVBLFFBQUksY0FBY0YsT0FBTztBQUNyQixhQUFPMEMsc0JBQXNCMUMsS0FBQUE7SUFDakMsV0FBVyxjQUFjQSxPQUFPO0FBQzVCLGFBQU8yQyxzQkFBc0IzQyxLQUFBQTtJQUNqQyxXQUFXLGdCQUFnQkEsT0FBTztBQUM5QixhQUFPNEMsd0JBQXdCNUMsS0FBQUE7SUFDbkMsV0FBVyxpQkFBaUJBLE9BQU87QUFDL0IsYUFBTzZDLHlCQUF5QjdDLEtBQUFBO0lBQ3BDO0VBQ0osV0FBV0ssV0FBV0wsS0FBQUEsR0FBUTtBQUMxQixXQUFPO01BQUVELE9BQU87TUFBTUM7SUFBTTtFQUNoQztBQUVBLFNBQU87SUFBRUQsT0FBTztJQUFPQztJQUFPRSxPQUFPO0VBQStFO0FBQ3hIO0FBN0JnQnNDO0FBQUFBLFFBQUFBLGtCQUFBQSxrQkFBQUE7QUErQlQsU0FBU0Usc0JBQXNCMUMsT0FBb0I7QUFDdEQsTUFBSSxFQUFFLGNBQWNBLFFBQVE7QUFDeEIsV0FBTztNQUFFRCxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBeUM7RUFDbEY7QUFFQSxNQUFJLEVBQUUsV0FBV0YsUUFBUTtBQUNyQkEsVUFBTThDLFFBQVFDLGdCQUFnQkM7RUFDbEM7QUFFQSxNQUFJLFdBQVdoRCxTQUFTLENBQUNpRCxPQUFPQyxPQUE2QkgsZUFBQUEsRUFBaUJJLFNBQVNuRCxNQUFNOEMsS0FBSyxHQUFHO0FBQ2pHLFdBQU87TUFBRS9DLE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUFrRDtFQUMzRjtBQUVBLFNBQU87SUFBRUgsT0FBTztJQUFNQztFQUFNO0FBQ2hDO0FBZGdCMEM7QUFBQUEsUUFBQUEsdUJBQUFBLHVCQUFBQTtBQWdCVCxTQUFTQyxzQkFBc0IzQyxPQUFvQjtBQUN0RCxNQUFJLEVBQUUsY0FBY0EsUUFBUTtBQUN4QixXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUF5QztFQUNsRjtBQUVBLFNBQU87SUFBRUgsT0FBTztJQUFNQztFQUFNO0FBQ2hDO0FBTmdCMkM7QUFBQUEsUUFBQUEsdUJBQUFBLHVCQUFBQTtBQVFoQixTQUFTUyxrQ0FBa0NwRCxPQUFnQztBQUN2RSxNQUFJLEVBQUUsY0FBY0EsUUFBUTtBQUN4QixXQUFPO01BQUVELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUEwQztFQUNuRjtBQUVBLE1BQUksRUFBRSxXQUFXRixRQUFRO0FBQ3JCLFdBQU87TUFBRUQsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQXNDO0VBQy9FO0FBRUEsUUFBTSxFQUFFSCxPQUFPRyxNQUFLLElBQUtvQyx1QkFBdUJ0QyxNQUFNcUQsS0FBSztBQUMzRCxNQUFJLENBQUN0RCxPQUFPO0FBQ1IsV0FBTztNQUFFQSxPQUFPO01BQU9DO01BQU9FO0lBQU07RUFDeEM7QUFFQSxTQUFPO0lBQUVILE9BQU87SUFBTUM7RUFBTTtBQUNoQztBQWZTb0Q7QUFBQUEsUUFBQUEsbUNBQUFBLG1DQUFBQTtBQWlCRixTQUFTUix3QkFBd0I1QyxPQUFzQjtBQUMxRCxNQUFJLEVBQUUsZ0JBQWdCQSxRQUFRO0FBQzFCLFdBQU87TUFBRUQsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQTJDO0VBQ3BGO0FBQ0EsTUFBSSxDQUFDRyxXQUFXTCxNQUFNc0QsVUFBVSxHQUFHO0FBQy9CLFdBQU87TUFBRXZELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUF5QztFQUNsRjtBQUVBLE1BQUksRUFBRSxZQUFZRixRQUFRO0FBQ3RCQSxVQUFNdUQsU0FBUyxDQUFBO0VBQ25CO0FBQ0EsTUFBSSxZQUFZdkQsU0FBUyxDQUFDeUIsTUFBTUMsUUFBUTFCLE1BQU11RCxNQUFNLEdBQUc7QUFDbkQsV0FBTztNQUFFeEQsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQW1DO0VBQzVFO0FBQ0EsTUFBSSxZQUFZRixPQUFPO0FBQ25CLGVBQVdxRCxTQUFTckQsTUFBTXVELFFBQVE7QUFDOUIsVUFBSXRELFNBQVNvRCxLQUFBQSxLQUFVLGNBQWNBLFNBQVMsV0FBV0EsT0FBTztBQUM1RCxjQUFNLEVBQUV0RCxPQUFPRyxNQUFLLElBQUtrRCxrQ0FBa0NDLEtBQUFBO0FBQzNELFlBQUksQ0FBQ3RELE9BQU87QUFDUixpQkFBTztZQUFFQTtZQUFPQztZQUFPRTtVQUFNO1FBQ2pDO01BQ0osT0FBTztBQUNILGNBQU0sRUFBRUgsT0FBT0csTUFBSyxJQUFLb0MsdUJBQXVCZSxLQUFBQTtBQUNoRCxZQUFJLENBQUN0RCxPQUFPO0FBQ1IsaUJBQU87WUFBRUE7WUFBT0M7WUFBT0U7VUFBTTtRQUNqQztNQUNKO0lBQ0o7RUFDSjtBQUVBLE1BQUksV0FBV0YsU0FBUyxDQUFDaUQsT0FBT0MsT0FBNkJILGVBQUFBLEVBQWlCSSxTQUFTbkQsTUFBTThDLEtBQUssR0FBRztBQUNqRyxXQUFPO01BQUUvQyxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBa0Q7RUFDM0Y7QUFFQSxTQUFPO0lBQUVILE9BQU87SUFBTUM7RUFBTTtBQUNoQztBQW5DZ0I0QztBQUFBQSxRQUFBQSx5QkFBQUEseUJBQUFBO0FBcUNULFNBQVNDLHlCQUF5QjdDLE9BQXVCO0FBQzVELE1BQUksRUFBRSxpQkFBaUJBLFFBQVE7QUFDM0IsV0FBTztNQUFFRCxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBNEM7RUFDckY7QUFFQSxTQUFPO0lBQUVILE9BQU87SUFBTUM7RUFBTTtBQUNoQztBQU5nQjZDO0FBQUFBLFFBQUFBLDBCQUFBQSwwQkFBQUE7QUNuSFQsU0FBU1csc0JBQ1p4RCxPQUNBeUQsWUFBWSxPQUFLO0FBRWpCLE1BQUkzRCxNQUFNRSxLQUFBQSxHQUFRO0FBQ2RBLFlBQVE7TUFDSjBELGFBQWEsQ0FBQTtNQUNiQyxTQUFTLENBQUE7TUFDVEMsV0FBVyxDQUFBO01BQ1hDLFNBQVMsQ0FBQTtJQUNiO0VBQ0o7QUFFQSxNQUFJLENBQUMvRCxNQUFNRSxLQUFBQSxLQUFVLENBQUNDLFNBQVNELEtBQUFBLEdBQVE7QUFDbkMsV0FBTztNQUFFRCxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBbUM7RUFDNUU7QUFFQSxNQUFJdUQsV0FBVztBQUNYLFFBQUksRUFBRSxZQUFZekQsVUFBVSxDQUFDSyxXQUFXTCxNQUFNOEQsTUFBTSxHQUFHO0FBQ25ELGFBQU87UUFBRS9ELE9BQU87UUFBT0M7UUFBT0UsT0FBTztNQUE2QztJQUN0RjtBQUVBLFFBQUksRUFBRSxZQUFZRixRQUFRO0FBQ3RCQSxZQUFNK0QsU0FBUztJQUNuQixXQUFXLEVBQUUsWUFBWS9ELFVBQVUsQ0FBQ2dFLFVBQVVoRSxNQUFNK0QsTUFBTSxHQUFHO0FBQ3pELGFBQU87UUFBRWhFLE9BQU87UUFBT0M7UUFBT0UsT0FBTztNQUE2QztJQUN0RjtFQUNKO0FBRUEsTUFBSSxhQUFhRixTQUFTLENBQUN5QixNQUFNQyxRQUFRMUIsTUFBTTJELE9BQU8sR0FBRztBQUNyRCxXQUFPO01BQUU1RCxPQUFPO01BQU9DO01BQU9FLE9BQU87SUFBb0M7RUFDN0UsV0FBVyxFQUFFLGFBQWFGLFFBQVE7QUFDOUJBLFVBQU0yRCxVQUFVLENBQUE7RUFDcEI7QUFFQSxNQUFJLGlCQUFpQjNELFNBQVMsQ0FBQ3lCLE1BQU1DLFFBQVExQixNQUFNMEQsV0FBVyxHQUFHO0FBQzdELFdBQU87TUFBRTNELE9BQU87TUFBT0M7TUFBT0UsT0FBTztJQUF3QztFQUNqRixXQUFXLEVBQUUsaUJBQWlCRixRQUFRO0FBQ2xDQSxVQUFNMEQsY0FBYyxDQUFBO0VBQ3hCO0FBRUEsTUFBSSxlQUFlMUQsU0FBUyxDQUFDeUIsTUFBTUMsUUFBUTFCLE1BQU00RCxTQUFTLEdBQUc7QUFDekQsV0FBTztNQUFFN0QsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQXNDO0VBQy9FLFdBQVcsRUFBRSxlQUFlRixRQUFRO0FBQ2hDQSxVQUFNNEQsWUFBWSxDQUFBO0VBQ3RCO0FBRUEsTUFBSSxhQUFhNUQsU0FBUyxDQUFDeUIsTUFBTUMsUUFBUTFCLE1BQU02RCxPQUFPLEdBQUc7QUFDckQsV0FBTztNQUFFOUQsT0FBTztNQUFPQztNQUFPRSxPQUFPO0lBQW9DO0VBQzdFLFdBQVcsRUFBRSxhQUFhRixRQUFRO0FBQzlCQSxVQUFNNkQsVUFBVSxDQUFBO0VBQ3BCO0FBRUEsYUFBV0ksWUFBWWpFLE1BQU0yRCxTQUFTO0FBQ2xDLFFBQUksQ0FBQ3RELFdBQVc0RCxRQUFBQSxLQUFhLENBQUNoRSxTQUFTZ0UsUUFBQUEsS0FBYSxDQUFDQyxVQUFVRCxRQUFBQSxHQUFXO0FBQ3RFLGFBQU87UUFBRWxFLE9BQU87UUFBT0M7UUFBT0UsT0FBTztNQUFnRDtJQUN6RjtBQUVBLFFBQUlELFNBQVNnRSxRQUFBQSxLQUFhLENBQUNDLFVBQVVELFFBQUFBLEdBQVc7QUFDNUMsWUFBTSxFQUFFbEUsT0FBT0csTUFBSyxJQUFLc0Qsc0JBQXFDUyxVQUFVLElBQUE7QUFDeEUsVUFBSSxDQUFDbEUsT0FBTztBQUNSLGVBQU87VUFBRUE7VUFBT0M7VUFBT0U7UUFBTTtNQUNqQztJQUNKO0VBQ0o7QUFFQSxhQUFXaUUsY0FBY25FLE1BQU0wRCxhQUFhO0FBQ3hDLFFBQUksQ0FBQ3JELFdBQVc4RCxVQUFBQSxHQUFhO0FBQ3pCLGFBQU87UUFBRXBFLE9BQU87UUFBT0M7UUFBT0UsT0FBTztNQUFnQztJQUN6RTtFQUNKO0FBRUEsYUFBV2tFLFlBQVlwRSxNQUFNNEQsV0FBVztBQUNwQyxVQUFNLEVBQUU3RCxPQUFPRyxNQUFLLElBQUtzQyxpQkFBaUI0QixRQUFBQTtBQUMxQyxRQUFJLENBQUNyRSxPQUFPO0FBQ1IsYUFBTztRQUFFQSxPQUFPO1FBQU9DO1FBQU9FO01BQU07SUFDeEM7RUFDSjtBQUVBLGFBQVdtRSxjQUFjckUsTUFBTTZELFNBQVM7QUFDcEMsVUFBTSxFQUFFOUQsT0FBT0csTUFBSyxJQUFLb0MsdUJBQXVDK0IsVUFBQUE7QUFDaEUsUUFBSSxDQUFDdEUsT0FBTztBQUNSLGFBQU87UUFBRUE7UUFBT0M7UUFBT0U7TUFBTTtJQUNqQztBQUVBLFFBQ0lELFNBQVNvRSxVQUFBQSxNQUNSLGNBQWNBLGNBQWMsZ0JBQWdCQSxjQUFjLGNBQWNBLGNBQWMsaUJBQWlCQSxhQUMxRztBQUNFLFlBQU0sRUFBRXRFLE9BQUFBLE9BQUssSUFBS3lDLGlCQUFpQjZCLFVBQUFBO0FBQ25DLFVBQUksQ0FBQ3RFLFFBQU87QUFDUixlQUFPO1VBQUVBLE9BQU87VUFBT0M7VUFBT0UsT0FBTztRQUFtQztNQUM1RTtJQUNKO0VBQ0o7QUFFQSxTQUFPO0lBQUVILE9BQU87SUFBTUM7RUFBTTtBQUNoQztBQWpHZ0J3RDtBQUFBQSxRQUFBQSx1QkFBQUEsdUJBQUFBO0FDRmhCLElBQU1jLDJCQUE4QztFQUFFeEIsT0FBT0MsZ0JBQWdCQztBQUFVO0FBRWhGLFNBQVN1QiwyQkFBMkJ2RSxPQUF5QjtBQUNoRSxNQUFJRixNQUFNRSxLQUFBQSxHQUFRO0FBQ2QsV0FBTztNQUFFRCxPQUFPO01BQU1DLE9BQU9zRTtJQUF5QjtFQUMxRDtBQUVBLE1BQUksQ0FBQ3JFLFNBQVNELEtBQUFBLEdBQVE7QUFDbEIsV0FBTztNQUFFRCxPQUFPO01BQU9DLE9BQU9zRTtNQUEwQnBFLE9BQU87SUFBdUM7RUFDMUc7QUFFQSxNQUFJLEVBQUUsV0FBV0YsUUFBUTtBQUNyQixXQUFPO01BQUVELE9BQU87TUFBTUMsT0FBTztRQUFFLEdBQUdzRTtRQUEwQixHQUFHdEU7TUFBTTtJQUFFO0VBQzNFO0FBQ0EsTUFBSSxXQUFXQSxTQUFTLENBQUNHLFNBQVNILE1BQU04QyxLQUFLLEdBQUc7QUFDNUMsV0FBTztNQUFFL0MsT0FBTztNQUFPQyxPQUFPc0U7TUFBMEJwRSxPQUFPO0lBQW9DO0VBQ3ZHO0FBRUEsTUFBSSxXQUFXRixTQUFTLENBQUNpRCxPQUFPQyxPQUE2QkgsZUFBQUEsRUFBaUJJLFNBQVNuRCxNQUFNOEMsS0FBSyxHQUFHO0FBQ2pHLFdBQU87TUFBRS9DLE9BQU87TUFBT0MsT0FBT3NFO01BQTBCcEUsT0FBTztJQUEyQjtFQUM5RjtBQUVBLFNBQU87SUFBRUgsT0FBTztJQUFNQztFQUFNO0FBQ2hDO0FBckJnQnVFO0FBQUFBLFFBQUFBLDRCQUFBQSw0QkFBQUE7OztBQ0hULElBQU1DLHlCQUF5QjtBQUMvQixJQUFNQyx1QkFBdUI7QUFDN0IsSUFBTUMsaUJBQWlCO0FBRXZCLElBQU1DLGdCQUFnQjtBQUN0QixJQUFNQyxzQkFBc0I7QUFDNUIsSUFBTUMsZUFBZTtBQUNyQixJQUFNQyx1QkFBdUI7QUFFN0IsSUFBTUMsVUFBVTtBQUVoQixJQUFNQyx3QkFBd0I7QUFDOUIsSUFBTUMsb0JBQW9CO0FBRzFCLElBQU1DLG1CQUFtQjtBQUV6QixJQUFNQyx3QkFBd0I7QUFDOUIsSUFBTUMseUJBQXlCO0FBQy9CLElBQU1DLDRCQUE0QjtBQUVsQyxJQUFNQyxzQkFBc0I7QUFFNUIsSUFBTUMscUJBQWdDO0VBQ3pDQyxTQUFTO0VBQ1RDLE9BQU87SUFBRUMsU0FBUztFQUFzQjtFQUN4Q0MsUUFBUUMsZ0JBQWdCQztBQUM1QjtBQUVPLElBQU1DLCtCQUEwQztFQUNuRE4sU0FBUztFQUNUQyxPQUFPO0lBQUVDLFNBQVM7RUFBeUI7RUFDM0NDLFFBQVFDLGdCQUFnQkc7QUFDNUI7QUFFTyxJQUFNQyxxQkFBZ0M7RUFDekNSLFNBQVM7RUFDVEMsT0FBTztJQUFFQyxTQUFTO0VBQWlCO0VBQ25DQyxRQUFRQyxnQkFBZ0JLO0FBQzVCO0FBRU8sSUFBTUMsaUNBQTRDO0VBQ3JEVixTQUFTO0VBQ1RDLE9BQU87SUFBRUMsU0FBUztFQUF1QjtFQUN6Q0MsUUFBUUMsZ0JBQWdCTztBQUM1QjtBQUVPLElBQU1DLDhCQUF5QztFQUNsRFosU0FBUztFQUNUQyxPQUFPO0lBQUVDLFNBQVM7RUFBb0I7RUFDdENDLFFBQVFDLGdCQUFnQlM7QUFDNUI7OztBQ3BETyxJQUFNQyxhQUFOLGNBQTZDQyxNQUFBQTtTQUFBQTs7O0VBRnBELE9BRW9EQTs7O0VBQ3pDQyxTQUFpQkMsZ0JBQWdCQztFQUNqQ0M7RUFFUCxZQUFtQkMsU0FBaUJKLFFBQWlCRyxTQUFvQjtBQUNyRSxVQUFNQyxPQUFBQTtBQUNOLFNBQUtKLFNBQVNBLFVBQVVDLGdCQUFnQkM7QUFDeEMsU0FBS0MsVUFBVUE7RUFDbkI7QUFDSjtBQ1JPLElBQU1FLG1CQUFOLGNBQStCUCxXQUFBQTtTQUFBQTs7O0VBSHRDLE9BR3NDQTs7O0VBQ2xDLGNBQXFCO0FBQ2pCLFVBQU0sbUNBQW1DRyxnQkFBZ0JLLGdCQUFnQjtFQUM3RTtBQUNKO0FDSk8sSUFBTUMsMEJBQU4sY0FBc0NULFdBQUFBO1NBQUFBOzs7RUFIN0MsT0FHNkNBOzs7RUFDekMsY0FBcUI7QUFDakIsVUFBTSxzREFBc0RHLGdCQUFnQk8sa0JBQWtCO0VBQ2xHO0FBQ0o7QUNKTyxJQUFNQyxrQkFBTixjQUE4QlgsV0FBQUE7U0FBQUE7OztFQUhyQyxPQUdxQ0E7OztFQUNqQyxZQUFtQk0sVUFBVSxzQkFBc0I7QUFDL0MsVUFBTUEsU0FBU0gsZ0JBQWdCUSxlQUFlO0VBQ2xEO0FBQ0o7QUNKTyxJQUFNQyxlQUFOLGNBQTJCWixXQUFBQTtTQUFBQTs7O0VBSGxDLE9BR2tDQTs7O0VBQzlCLGNBQXFCO0FBQ2pCLFVBQU0sa0JBQWtCRyxnQkFBZ0JDLE9BQU87RUFDbkQ7QUFDSjs7O0FDUEEsU0FBU1MsVUFBQUEsU0FBUUMsY0FBQUEsb0JBQWtCO0FDQW5DLFNBQVNELFVBQUFBLFNBQVFDLGNBQUFBLG1CQUFrQjtBQ0FuQyxTQUFTRCxVQUFBQSxVQUFRQyxjQUFBQSxvQkFBa0I7QUNBbkMsU0FBU0QsVUFBQUEsVUFBUUMsY0FBQUEsb0JBQWtCO0FDQW5DLFNBQVNELFVBQUFBLFNBQVFDLGNBQUFBLG1CQUFrQjtBQ0FuQyxTQUFTQSxjQUFBQSxtQkFBa0I7Ozs7Ozs7Ozs7Ozs7O0FKWXBCLElBQU1DLGtCQUFOLE1BQU1BO1NBQUFBOzs7U0FBQUE7OztFQUNnQ0M7O0VBR3pDLE1BQWFDLGVBQWVDLGtCQUF3Q0MsUUFBb0NDLFdBQTRCO0FBQ2hJLGVBQVdDLFNBQVNGLFFBQVE7QUFDeEIsWUFBTUcsV0FBV0MsV0FBV0YsS0FBQUEsSUFBU0QsVUFBVUksSUFBSUgsS0FBQUEsSUFBU0ksU0FBU0osS0FBQUEsS0FBVUUsV0FBV0YsTUFBTSxhQUFBLENBQWMsSUFBSUEsUUFBUTtBQUMxSCxVQUFJSyxNQUFNSixRQUFBQSxHQUFXO0FBQ2pCLGFBQUtOLGNBQWNXLE1BQU0sc0RBQUE7QUFDekIsY0FBTSxJQUFJQyxNQUFNQyxhQUFhQyxzQkFBc0I7TUFDdkQ7QUFDQSxZQUFNQyxjQUFjLE1BQU1ULFNBQVNTLFlBQVlDLEtBQUtWLFVBQVVKLGdCQUFBQTtBQUM5RCxVQUFJLE9BQU9hLGdCQUFnQixXQUFXO0FBQ2xDLGFBQUtmLGNBQWNXLE1BQU0sc0RBQUE7QUFDekIsY0FBTSxJQUFJTSx3QkFBQUE7TUFDZDtBQUNBLFVBQUksQ0FBQ0YsYUFBYTtBQUNkLGNBQU0sSUFBSUcsaUJBQUFBO01BQ2Q7SUFDSjtFQUNKO0VBRUEsTUFBYUMsc0JBQ1RqQixrQkFDQWtCLGNBQ0FoQixXQUNBaUIsYUFDRjtBQUNFLGVBQVdDLGVBQWVGLGNBQWM7QUFDcEMsWUFBTWQsV0FBV0MsV0FBV2UsV0FBQUEsSUFDdEJsQixVQUFVSSxJQUFJYyxXQUFBQSxJQUNkYixTQUFTYSxXQUFBQSxLQUFnQmYsV0FBV2UsWUFBWSxXQUFBLENBQVksSUFDMURBLGNBQ0E7QUFDUixVQUFJWixNQUFNSixRQUFBQSxHQUFXO0FBQ2pCLGFBQUtOLGNBQWNXLE1BQU0sNERBQUE7QUFDekIsY0FBTSxJQUFJQyxNQUFNQyxhQUFhVSw0QkFBNEI7TUFDN0Q7QUFDQSxZQUFNakIsU0FBU2tCLFVBQVVSLEtBQUtWLFVBQVVKLGtCQUFrQm1CLFdBQUFBO0lBQzlEO0VBQ0o7RUFFQSxNQUFhSSxjQUNUQyxPQUNBQyxPQUNBQyxrQkFDQXhCLFdBQ0Y7QUFDRSxlQUFXeUIsUUFBUUYsT0FBTztBQUN0QixZQUFNckIsV0FBV0MsV0FBV3NCLElBQUFBLElBQVF6QixVQUFVSSxJQUFJcUIsSUFBQUEsSUFBUXBCLFNBQVNvQixJQUFBQSxJQUFRQSxPQUFPO0FBQ2xGLFVBQUluQixNQUFNSixRQUFBQSxHQUFXO0FBQ2pCLGFBQUtOLGNBQWNXLE1BQU0scURBQUE7QUFDekIsY0FBTSxJQUFJQyxNQUFNQyxhQUFhaUIscUJBQXFCO01BQ3REO0FBQ0FKLGNBQVEsTUFBTUssUUFBUUMsUUFBUTFCLFNBQVMyQixVQUFVakIsS0FBS1YsVUFBVW9CLE9BQU9FLGdCQUFBQSxDQUFBQTtJQUMzRTtBQUVBLFdBQU9GO0VBQ1g7QUFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0RPLElBQU1RLHdCQUFOLE1BQU1BO1NBQUFBOzs7U0FBQUE7OztFQUNnQ0M7RUFDQ0M7RUFFMUMsTUFBYUMsV0FDVEMsWUFDQXBDLGtCQUNBcUMsV0FDQVosT0FDQWEsUUFDRjtBQUNFLFdBQU9ULFFBQVFVLElBQ1hGLFVBQVNHLE9BQU9DLElBQUksT0FBT0MsVUFBQUE7QUFDdkIsWUFBTWhCLG1CQUFtQjtRQUNyQmlCLE1BQU1ELE1BQU1DO1FBQ1pDLE1BQU1GLE1BQU1FO1FBQ1pDLFVBQVVILE1BQU1HO01BQ3BCO0FBRUEsVUFBSUgsTUFBTUMsU0FBUyxRQUFRO0FBRXZCLGVBQU8sS0FBS1QsZ0JBQWdCWCxjQUN4QnZCLGlCQUFpQjhDLFFBQVFDLE1BQ3pCO2FBQUl0QjthQUFXaUIsT0FBT2pCLFNBQVMsQ0FBQTtXQUMvQkMsa0JBQ0FVLFdBQVdZLE1BQU05QyxTQUFTO01BRWxDLFdBQVd3QyxNQUFNQyxTQUFTLFNBQVM7QUFFL0IsWUFBSSxDQUFDcEMsU0FBU1AsaUJBQWlCOEMsUUFBUUMsSUFBSSxFQUFHLFFBQU9FO0FBQ3JELGVBQU8sS0FBS2YsZ0JBQWdCWCxjQUNFdkIsaUJBQWlCOEMsUUFBUUMsS0FBTUwsTUFBTUUsSUFBSSxHQUNuRTthQUFJbkI7YUFBV2lCLE9BQU9qQixTQUFTLENBQUE7V0FDL0JDLGtCQUNBVSxXQUFXWSxNQUFNOUMsU0FBUztNQUVsQyxXQUFXd0MsTUFBTUMsU0FBUyxTQUFTO0FBQy9CLFlBQUksQ0FBQ08sTUFBTUMsUUFBUW5ELGlCQUFpQjhDLFFBQVFDLElBQUksRUFBRyxRQUFPRTtBQUMxRCxlQUFPLEtBQUtmLGdCQUFnQlgsY0FDeEJ2QixpQkFBaUI4QyxRQUFRQyxLQUFLTCxNQUFNRSxJQUFJLEdBQ3hDO2FBQUluQjthQUFXaUIsT0FBT2pCLFNBQVMsQ0FBQTtXQUMvQkMsa0JBQ0FVLFdBQVdZLE1BQU05QyxTQUFTO01BRWxDLFdBQVd3QyxNQUFNQyxTQUFTLFdBQVc7QUFDakMsZUFBTzNDLGlCQUFpQjhDO01BQzVCLFdBQVdKLE1BQU1DLFNBQVMsVUFBVTtBQUVoQyxlQUFPLEtBQUtULGdCQUFnQlgsY0FDeEJtQixNQUFNVSxRQUFRVixNQUFNRSxNQUFNNUMsZ0JBQUFBLEdBQzFCO2FBQUl5QjthQUFXaUIsT0FBT2pCLFNBQVMsQ0FBQTtXQUMvQkMsa0JBQ0FVLFdBQVdZLE1BQU05QyxTQUFTO01BRWxDLFdBQVd3QyxNQUFNQyxTQUFTLFlBQVksS0FBS1YsV0FBV29CLGNBQWNDLFFBQVE7QUFFeEUsZUFBTyxLQUFLcEIsZ0JBQWdCWCxjQUN4Qm1CLE1BQU1FLE9BQU9OLE9BQXdCSSxNQUFNRSxJQUFJLElBQUlOLFFBQ25EO2FBQUliO2FBQVdpQixPQUFPakIsU0FBUyxDQUFBO1dBQy9CQyxrQkFDQVUsV0FBV1ksTUFBTTlDLFNBQVM7TUFFbEM7QUFDQSxhQUFPK0M7SUFDWCxDQUFBLENBQUE7RUFFUjtBQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FGOURPLElBQU1NLHlCQUFOLE1BQU1BO1NBQUFBOzs7U0FBQUE7OztFQUNnQ3RCO0VBQ0t1QjtFQUNOQztFQUNRQztFQUNOeEI7RUFDRHBDO0VBQ082RDtFQUNJQztFQVM3Q0MsY0FDSDVELFFBQ0FpQixjQUNBTyxPQUNBcUMsb0JBQ0ExQixZQUNBMkIsT0FDRjtBQUNFLFFBQUlBLE1BQU1wQixTQUFTLFFBQVFvQixNQUFNcEIsU0FBUyxRQUFRO0FBQzlDLGFBQU8sS0FBS2MsYUFBYU0sTUFBTXBCLElBQUksRUFBRW9CLE1BQU1DLE1BQU0sT0FBT2pCLFNBQUFBO0FBQ3BELGNBQU0sS0FBS2tCLFlBQVloRSxRQUFRaUIsY0FBY08sT0FBT3FDLG9CQUFvQjFCLFlBQVkyQixPQUFPaEIsSUFBQUE7TUFDL0YsQ0FBQTtJQUNKLFdBQVdnQixNQUFNcEIsU0FBUyxnQkFBZ0JvQixNQUFNcEIsU0FBUyxnQkFBZ0I7QUFDckUsYUFBTyxLQUFLYyxhQUFhLElBQUlNLE1BQU1wQixJQUFJLEVBQUUsRUFBRW9CLE1BQU1DLE1BQU0sVUFBVUUsU0FBQUE7QUFDN0QsY0FBTSxFQUFFNUIsUUFBUVMsS0FBSSxJQUFLLEtBQUtTLG1CQUFtQlcsa0JBQWlCLEdBQWNELElBQUFBO0FBQ2hGLGNBQU0sS0FBS0QsWUFBWWhFLFFBQVFpQixjQUFjTyxPQUFPcUMsb0JBQW9CMUIsWUFBWTJCLE9BQU9oQixNQUFNVCxNQUFBQTtNQUNyRyxDQUFBO0lBQ0osV0FBV3lCLE1BQU1wQixTQUFTLGNBQWNvQixNQUFNcEIsU0FBUyxjQUFjO0FBQ2pFLGFBQU8sS0FBS2MsYUFBYU0sTUFBTXBCLElBQUksRUFBRW9CLE1BQU1DLE1BQU0sT0FBTzFCLFFBQVFTLFNBQUFBO0FBQzVELGNBQU0sS0FBS2tCLFlBQVloRSxRQUFRaUIsY0FBY08sT0FBT3FDLG9CQUFvQjFCLFlBQVkyQixPQUFPaEIsTUFBTVQsTUFBQUE7TUFDckcsQ0FBQTtJQUNKLFdBQVd5QixNQUFNcEIsU0FBUyxjQUFjb0IsTUFBTXBCLFNBQVMsY0FBYztBQUNqRSxhQUFPLEtBQUtjLGFBQWFNLE1BQU1wQixJQUFJLEVBQUVvQixNQUFNQyxNQUFNLE9BQU9qQixTQUFBQTtBQUNwRCxjQUFNLEtBQUtrQixZQUFZaEUsUUFBUWlCLGNBQWNPLE9BQU9xQyxvQkFBb0IxQixZQUFZMkIsT0FBT2hCLElBQUFBO01BQy9GLENBQUE7SUFDSixXQUFXZ0IsTUFBTXBCLFNBQVMsZUFBZW9CLE1BQU1wQixTQUFTLGVBQWU7QUFDbkUsYUFBTyxLQUFLYyxhQUFhTSxNQUFNcEIsSUFBSSxFQUFFb0IsTUFBTUssV0FBWUwsTUFBTUMsTUFBTSxVQUFVRSxTQUFBQTtBQUN6RSxjQUFNbkIsT0FBTyxLQUFLZCxXQUFXb0IsY0FBY0MsU0FBU1ksS0FBSyxDQUFBLElBQUtBLEtBQUssQ0FBQTtBQUNuRSxjQUFNNUIsU0FBUyxLQUFLTCxXQUFXb0IsY0FBY0MsU0FBbUJZLEtBQUssQ0FBQSxJQUFLakI7QUFDMUUsY0FBTSxLQUFLZ0IsWUFBWWhFLFFBQVFpQixjQUFjTyxPQUFPcUMsb0JBQW9CMUIsWUFBWTJCLE9BQU9oQixNQUFNVCxNQUFBQTtNQUNyRyxDQUFBO0lBQ0o7QUFFQSxTQUFLeEMsY0FBY1csTUFBTSxtREFBQTtBQUN6QixVQUFNLElBQUlDLE1BQU1DLGFBQWEwRCxnQkFBZ0I7RUFDakQ7RUFFQSxNQUFjSixZQUNWaEUsUUFDQWlCLGNBQ0FPLE9BQ0FxQyxvQkFDQTFCLFlBQ0EyQixPQUNBaEIsTUFDQVQsUUFDRjtBQUNFLFVBQU1RLFVBQVUsS0FBS2EsbUJBQW1CWixNQUFNVCxNQUFBQTtBQUM5QyxVQUFNdEMsbUJBQW1CLEtBQUs0RCx1QkFDMUJVLHFCQUFxQkMsT0FDckJuQyxXQUFXQyxTQUFTbUMsVUFDcEJwQyxXQUFXQyxTQUFTbUMsU0FBU0MsVUFBVVYsTUFBTVcsTUFBTSxHQUNuRDVCLFNBQ0FHLFFBQ0FjLE1BQU1DLElBQUk7QUFHZCxRQUFJO0FBQ0EsWUFBTSxLQUFLOUIsZ0JBQWdCbkMsZUFBZUMsa0JBQWtCQyxRQUFRbUMsV0FBV1ksTUFBTTlDLFNBQVM7QUFDOUYsWUFBTWdFLE9BQU8sTUFBTSxLQUFLUixzQkFBc0J2QixXQUFXQyxZQUFZcEMsa0JBQWtCK0QsT0FBT3RDLE9BQU9hLE1BQUFBO0FBQ3JHLFlBQU1xQyxtQkFBbUJ2QyxXQUFXaEMsU0FBUzJELE1BQU1XLE1BQU07QUFDekQsWUFBTUUsU0FBU0MsZ0JBQWdCRixnQkFBQUEsSUFDekIsTUFBZXZDLFdBQVdoQyxTQUFTMkQsTUFBTVcsTUFBTSxFQUFHSSxNQUFNMUMsV0FBV2hDLFVBQVU4RCxJQUFBQSxJQUM3RSxNQUF3QjlCLFdBQVdoQyxTQUFTMkQsTUFBTVcsTUFBTSxFQUFHSSxNQUFNMUMsV0FBV2hDLFVBQVU4RCxJQUFBQTtBQUM1RixZQUFNL0MsY0FBMkI7UUFDN0J5RDtRQUNBRyxRQUFRLGdCQUFBQyxRQUFBLE1BQUE7QUFDSixlQUFLbEYsY0FBY1csTUFBTSxpRUFBQTtBQUN6QixnQkFBTSxJQUFJQyxNQUFNQyxhQUFhc0Usb0JBQW9CO1FBQ3JELEdBSFEsUUFBQTtNQUlaO0FBRUEsVUFBSS9ELGFBQWFnRSxTQUFTLEdBQUc7QUFDekIsY0FBTSxLQUFLaEQsZ0JBQWdCakIsc0JBQXNCakIsa0JBQWtCa0IsY0FBY2tCLFdBQVdZLE1BQU05QyxXQUFXaUIsV0FBQUE7TUFDakgsT0FBTztBQUNILGNBQU1BLFlBQVl5RCxPQUFNO01BQzVCO0lBQ0osU0FBU25FLE9BQU87QUFDWixZQUFNMEUsYUFBYXJCLG1CQUFtQnNCLEtBQ2xDLENBQUMsQ0FBQ0MsU0FBQUEsTUFDR2hGLFdBQVdnRixTQUFBQSxLQUFjNUUsaUJBQWlCNEUsYUFBY0EsY0FBYyxxQkFBcUI1RSxVQUFVNEUsU0FBQUE7QUFFOUcsVUFBSTdFLE1BQU0yRSxVQUFBQSxFQUFhO0FBQ3ZCLFlBQU0vRSxXQUFXQyxXQUFXOEUsV0FBVyxDQUFBLENBQUUsSUFDbkMvQyxXQUFXWSxNQUFNOUMsVUFBVUksSUFBSTZFLFdBQVcsQ0FBQSxDQUFFLElBQzVDNUUsU0FBUzRFLFdBQVcsQ0FBQSxDQUFFLEtBQUs5RSxXQUFXOEUsV0FBVyxDQUFBLEVBQUcsT0FBQSxDQUFRLElBQzFEQSxXQUFXLENBQUEsSUFDWDtBQUNSLFVBQUkzRSxNQUFNSixRQUFBQSxHQUFXO0FBQ2pCLGFBQUtOLGNBQWNXLE1BQU0sNkRBQUE7QUFDekIsY0FBTSxJQUFJQyxNQUFNQyxhQUFhMkUsNEJBQTRCO01BQzdEO0FBQ0EsWUFBTXpELFFBQVFDLFFBQVExQixTQUFTbUYsTUFBTXpFLEtBQUtWLFVBQVVLLE9BQU9ULGdCQUFBQSxDQUFBQTtJQUMvRDtFQUNKO0FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUd0SE8sSUFBTXdGLDJCQUFOLE1BQU1BO1NBQUFBOzs7U0FBQUE7OztFQUNnQ3ZEO0VBQ0FuQztFQUV6QyxNQUFhMkYsS0FBS2pCLFVBQW1CO0FBQ2pDLFVBQU1rQixVQUNGQyxRQUFRQyxZQUFnREMsZ0JBQWdCQyxZQUFZdEIsUUFBQUEsS0FDaEQsQ0FBQztBQUN6QyxVQUFNdUIsU0FBUyxLQUFLQyxVQUFVeEIsUUFBQUE7QUFDOUIsVUFBTXlCLE9BQU8sS0FBS0MsUUFBUTFCLFFBQUFBO0FBQzFCLFVBQU0yQixTQUFTLEtBQUtDLFVBQVU1QixRQUFBQTtBQUU5QixXQUEyQjtNQUN2QixHQUFHa0I7TUFDSGxCO01BQ0F1QjtNQUNBRTtNQUNBLEdBQUcsS0FBS0ksWUFBWTdCLFFBQUFBO01BQ3BCMkI7SUFDSjtFQUNKO0VBRVFILFVBQVV4QixVQUFtQjtBQUNqQyxVQUFNdUIsU0FBU0osUUFBUUMsWUFBNkJDLGdCQUFnQlMsa0JBQWtCOUIsU0FBU0MsU0FBUyxLQUFLLENBQUE7QUFFN0csV0FBT3NCLE9BQU90RCxJQUFJLENBQUNzQixVQUFBQTtBQUNmLGFBQXNCO1FBQ2xCLEdBQUdBO1FBQ0h2QixRQUFRLEtBQUsrRCxnQkFBZ0IvQixVQUFVVCxLQUFBQTtRQUN2QyxHQUFHLEtBQUtzQyxZQUFZN0IsVUFBVVQsTUFBTVcsTUFBTTtNQUM5QztJQUNKLENBQUE7RUFDSjtFQUVRd0IsUUFBUTFCLFVBQW1CO0FBQy9CLFVBQU15QixPQUFPTixRQUFRQyxZQUEyQkMsZ0JBQWdCVyxnQkFBZ0JoQyxTQUFTQyxTQUFTLEtBQUssQ0FBQTtBQUV2RyxXQUFPd0IsS0FBS3hELElBQUksQ0FBQ2dFLFFBQUFBO0FBQ2IsYUFBb0I7UUFDaEIsR0FBR0E7UUFDSGpFLFFBQVEsS0FBSytELGdCQUFnQi9CLFVBQVVpQyxHQUFBQTtRQUN2QyxHQUFHLEtBQUtKLFlBQVk3QixVQUFVaUMsSUFBSS9CLE1BQU07TUFDNUM7SUFDSixDQUFBO0VBQ0o7RUFFUTZCLGdCQUFnQi9CLFVBQW1CbkMsV0FBdUM7QUFDOUUsVUFBTUcsU0FBU21ELFFBQVFDLFlBQStCQyxnQkFBZ0JhLGtCQUFrQmxDLFNBQVNDLFdBQVdwQyxVQUFTcUMsTUFBTSxLQUFLLENBQUE7QUFFaElsQyxXQUFPbUUsS0FBSyxDQUFDQyxHQUFHQyxNQUFNRCxFQUFFRSxRQUFRRCxFQUFFQyxLQUFLO0FBQ3ZDdEUsV0FBT3VFLFFBQVEsQ0FBQ3JFLE9BQU9vRSxVQUFBQTtBQUNuQixVQUFJcEUsTUFBTW9FLFVBQVVBLE9BQU87QUFDdkIsYUFBS2hILGNBQWNXLE1BQU0sc0RBQUE7QUFDekIsY0FBTSxJQUFJQyxNQUFNQyxhQUFhcUcsOEJBQThCO01BQy9ELFlBQ0szRSxVQUFTTSxTQUFTLFFBQ2ZOLFVBQVNNLFNBQVMsY0FDbEJOLFVBQVNNLFNBQVMsZ0JBQ2xCTixVQUFTTSxTQUFTLGNBQ2xCTixVQUFTTSxTQUFTLGVBQ2xCTixVQUFTTSxTQUFTLFVBQ2xCTixVQUFTTSxTQUFTLGdCQUNsQk4sVUFBU00sU0FBUyxrQkFDbEJOLFVBQVNNLFNBQVMsZ0JBQ2xCTixVQUFTTSxTQUFTLGtCQUN0QkQsTUFBTUMsU0FBUyxZQUNqQjtBQUVFLGFBQUs3QyxjQUFjVyxNQUFNLHNEQUFBO0FBQ3pCLGNBQU0sSUFBSUMsTUFBTUMsYUFBYXNHLG1DQUFtQztNQUNwRSxXQUFXdkUsTUFBTUMsU0FBUyxZQUFZLEtBQUtWLFdBQVdvQixjQUFjNkQsUUFBUTtBQUV4RSxhQUFLcEgsY0FBY1csTUFBTSxzREFBQTtBQUN6QixjQUFNLElBQUlDLE1BQU1DLGFBQWF3Ryx1Q0FBdUM7TUFDeEUsV0FBVzlFLFVBQVNNLFNBQVMscUJBQXFCLEtBQUtWLFdBQVdvQixjQUFjNkQsUUFBUTtBQUNwRixhQUFLcEgsY0FBY1csTUFBTSxzREFBQTtBQUN6QixjQUFNLElBQUlDLE1BQU1DLGFBQWF5RyxxQkFBcUI7TUFDdEQsV0FBVy9FLFVBQVNNLFNBQVMscUJBQXFCLEtBQUtWLFdBQVdvQixjQUFjQyxRQUFRO0FBQ3BGLGFBQUt4RCxjQUFjVyxNQUFNLHNEQUFBO0FBQ3pCLGNBQU0sSUFBSUMsTUFBTUMsYUFBYTBHLHFCQUFxQjtNQUN0RCxZQUFZaEYsVUFBU00sU0FBUyxjQUFjTixVQUFTTSxTQUFTLGlCQUFpQixLQUFLVixXQUFXb0IsY0FBYzZELFFBQVE7QUFDakgsYUFBS3BILGNBQWNXLE1BQU0sc0RBQUE7QUFDekIsY0FBTSxJQUFJQyxNQUFNQyxhQUFhMkcsdUJBQXVCO01BQ3hELFlBQVlqRixVQUFTTSxTQUFTLGNBQWNOLFVBQVNNLFNBQVMsaUJBQWlCLEtBQUtWLFdBQVdvQixjQUFjQyxRQUFRO0FBQ2pILGFBQUt4RCxjQUFjVyxNQUFNLHNEQUFBO0FBQ3pCLGNBQU0sSUFBSUMsTUFBTUMsYUFBYTRHLHVCQUF1QjtNQUN4RDtJQUNKLENBQUE7QUFFQSxXQUFPL0U7RUFDWDtFQUVRNkQsWUFBWW1CLFFBQTBCOUMsUUFBaUI7QUFDM0QsVUFBTXpFLFNBQVMwRixRQUFRQyxZQUE4QkMsZ0JBQWdCNEIsUUFBUUQsUUFBUTlDLE1BQUFBLEtBQVcsQ0FBQTtBQUNoRyxVQUFNeEQsZUFBZXlFLFFBQVFDLFlBQW9DQyxnQkFBZ0I2QixjQUFjRixRQUFROUMsTUFBQUEsS0FBVyxDQUFBO0FBQ2xILFVBQU1qRCxRQUFRa0UsUUFBUUMsWUFBNkJDLGdCQUFnQjhCLE9BQU9ILFFBQVE5QyxNQUFBQSxLQUFXLENBQUE7QUFDN0YsVUFBTWtELGVBQWVqQyxRQUFRQyxZQUFvQ0MsZ0JBQWdCZ0MsY0FBY0wsUUFBUTlDLE1BQUFBLEtBQVcsQ0FBQTtBQUVsSCxXQUFPO01BQUV6RTtNQUFRaUI7TUFBY087TUFBT21HO0lBQWE7RUFDdkQ7RUFFUXhCLFVBQVU1QixVQUFtQjtBQUNqQyxXQUFPbUIsUUFBUUMsWUFBNkJDLGdCQUFnQmlDLFFBQVF0RCxTQUFTQyxTQUFTLEtBQUssQ0FBQTtFQUMvRjtBQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkdPLElBQU1zRCx1QkFBTixNQUFNQTtTQUFBQTs7O1NBQUFBOzs7RUFDZ0M5RjtFQUNIK0Y7RUFDSTlGO0VBQ013QjtFQUNQNUQ7RUFDTzZEO0VBQ0NzRTtFQUNHckU7RUFTcEQsTUFBYXNFLFlBQ1RqSSxRQUNBaUIsY0FDQU8sT0FDQXFDLG9CQUNBMUIsWUFDQXFFLEtBQ0Y7QUFDRSxRQUFJQSxJQUFJOUQsU0FBUyxhQUFhO0FBQzFCLGFBQU8sS0FBS3FGLFdBQVd2QixJQUFJOUQsSUFBSSxFQUFFOEQsSUFBSXpDLE1BQU0sT0FBT2pCLFNBQUFBO0FBQzlDLGVBQU8sS0FBS29GLFVBQVVsSSxRQUFRaUIsY0FBY08sT0FBT3FDLG9CQUFvQjFCLFlBQVlxRSxLQUFLMUQsSUFBQUE7TUFDNUYsQ0FBQTtJQUNKLFdBQVcwRCxJQUFJOUQsU0FBUyxtQkFBbUI7QUFDdkMsYUFBTyxLQUFLcUYsV0FBV3ZCLElBQUk5RCxJQUFJLEVBQUU4RCxJQUFJekMsTUFBTSxPQUFPMUIsUUFBUVMsU0FBQUE7QUFDdEQsZUFBTyxLQUFLb0YsVUFBVWxJLFFBQVFpQixjQUFjTyxPQUFPcUMsb0JBQW9CMUIsWUFBWXFFLEtBQUsxRCxNQUFNVCxNQUFBQTtNQUNsRyxDQUFBO0lBQ0osV0FBV21FLElBQUk5RCxTQUFTLG1CQUFtQjtBQUN2QyxhQUFPLEtBQUtxRixXQUFXdkIsSUFBSTlELElBQUksRUFBRThELElBQUl6QyxNQUFNLE9BQU9qQixTQUFBQTtBQUM5QyxlQUFPLEtBQUtvRixVQUFVbEksUUFBUWlCLGNBQWNPLE9BQU9xQyxvQkFBb0IxQixZQUFZcUUsS0FBSzFELElBQUFBO01BQzVGLENBQUE7SUFDSixXQUFXMEQsSUFBSTlELFNBQVMsb0JBQW9CO0FBQ3hDLGFBQU8sS0FBS3FGLFdBQVd2QixJQUFJOUQsSUFBSSxFQUFFOEQsSUFBSXJDLFdBQVlxQyxJQUFJekMsTUFBTSxVQUFVRSxTQUFBQTtBQUNqRSxjQUFNbkIsT0FBTyxLQUFLZCxXQUFXb0IsY0FBY0MsU0FBU1ksS0FBSyxDQUFBLElBQUtBLEtBQUssQ0FBQTtBQUNuRSxjQUFNNUIsU0FBUyxLQUFLTCxXQUFXb0IsY0FBY0MsU0FBbUJZLEtBQUssQ0FBQSxJQUFLakI7QUFDMUUsZUFBTyxLQUFLa0YsVUFBVWxJLFFBQVFpQixjQUFjTyxPQUFPcUMsb0JBQW9CMUIsWUFBWXFFLEtBQUsxRCxNQUFNVCxNQUFBQTtNQUNsRyxDQUFBO0lBQ0o7QUFFQSxTQUFLeEMsY0FBY1csTUFBTSxpREFBQTtBQUN6QixVQUFNLElBQUlDLE1BQU1DLGFBQWF5SCxjQUFjO0VBQy9DO0VBRUEsTUFBY0QsVUFDVmxJLFFBQ0FpQixjQUNBTyxPQUNBcUMsb0JBQ0ExQixZQUNBcUUsS0FDQTFELE1BQ0FULFFBQ0Y7QUFDRSxXQUFPLElBQUlULFFBQVEsT0FBT0MsWUFBQUE7QUFDdEIsWUFBTWdCLFVBQVUsS0FBS2EsbUJBQ2pCWixNQUNBLEtBQUtkLFdBQVdvQixjQUFjQyxXQUFXbUQsSUFBSTlELFNBQVMscUJBQXFCOEQsSUFBSTlELFNBQVMsc0JBQ2xGTCxTQUNBVyxNQUFBQTtBQUVWLFlBQU1vRixXQUFXLEtBQUtKLG9CQUFtQjtBQUN6Q0ksZUFBU0MsUUFBUSxDQUFDMUYsU0FBU2QsUUFBUWMsSUFBQUEsQ0FBQUE7QUFDbkN5RixlQUFTRSxTQUFTLENBQUM5SCxVQUFVcUIsUUFBUXJCLEtBQUFBLENBQUFBO0FBQ3JDLFlBQU1ULG1CQUFtQixLQUFLNEQsdUJBQzFCVSxxQkFBcUJrRSxLQUNyQnBHLFdBQVdDLFNBQVNtQyxVQUNwQnBDLFdBQVdDLFNBQVNtQyxTQUFTQyxVQUFVZ0MsSUFBSS9CLE1BQU0sR0FDakQ1QixTQUNBdUYsVUFDQTVCLElBQUl6QyxJQUFJO0FBR1osVUFBSTtBQUNBLGNBQU0sS0FBSzlCLGdCQUFnQm5DLGVBQWVDLGtCQUFrQkMsUUFBUW1DLFdBQVdZLE1BQU05QyxTQUFTO0FBQzlGLGNBQU1nRSxPQUFPLE1BQU0sS0FBS1Isc0JBQXNCdkIsV0FBV0MsWUFBWXBDLGtCQUFrQnlHLEtBQUtoRixPQUFPYSxNQUFBQTtBQUNuRyxjQUFNcUMsbUJBQW1CdkMsV0FBV2hDLFNBQVNxRyxJQUFJL0IsTUFBTTtBQUN2RCxjQUFNRSxTQUFTQyxnQkFBZ0JGLGdCQUFBQSxJQUN6QixDQUFDZSxVQUE2QjtVQUFFK0MsTUFBTTtRQUFLLE1BQUE7QUFDdkMsZ0JBQU1DLFNBQVN0RyxXQUFXaEMsU0FBU3FHLElBQUkvQixNQUFNLEVBQUdJLE1BQU0xQyxXQUFXaEMsVUFBVThELElBQUFBO0FBQzNFLGNBQUl3QixRQUFRK0MsTUFBTTtBQUNkSixxQkFBU0ksS0FBS0MsTUFBQUE7VUFDbEI7QUFDQSxpQkFBT0E7UUFDWCxJQUNBLE9BQU9oRCxVQUE2QjtVQUFFK0MsTUFBTTtRQUFLLE1BQUE7QUFDN0MsZ0JBQU1DLFNBQVMsTUFBTXRHLFdBQVdoQyxTQUFTcUcsSUFBSS9CLE1BQU0sRUFBR0ksTUFBTTFDLFdBQVdoQyxVQUFVOEQsSUFBQUE7QUFDakYsY0FBSXdCLFFBQVErQyxNQUFNO0FBQ2RKLHFCQUFTSSxLQUFLQyxNQUFBQTtVQUNsQjtBQUNBLGlCQUFPQTtRQUNYO0FBQ04sY0FBTXZILGNBQTJCO1VBQzdCeUQ7VUFDQUcsUUFBUSxnQkFBQUMsUUFBQSxDQUFDeEQsVUFBbUI2RyxTQUFTSSxLQUFLakgsS0FBQUEsR0FBbEMsUUFBQTtRQUNaO0FBRUEsWUFBSU4sYUFBYWdFLFNBQVMsR0FBRztBQUN6QixnQkFBTSxLQUFLaEQsZ0JBQWdCakIsc0JBQ3ZCakIsa0JBQ0FrQixjQUNBa0IsV0FBV1ksTUFBTTlDLFdBQ2pCaUIsV0FBQUE7UUFFUixPQUFPO0FBQ0gsZ0JBQU1BLFlBQVl5RCxPQUFNO1FBQzVCO01BQ0osU0FBU25FLE9BQU87QUFDWixjQUFNMEUsYUFBYXJCLG1CQUFtQnNCLEtBQ2xDLENBQUMsQ0FBQ0MsU0FBQUEsTUFDR2hGLFdBQVdnRixTQUFBQSxLQUFjNUUsaUJBQWlCNEUsYUFBY0EsY0FBYyxxQkFBcUI1RSxVQUFVNEUsU0FBQUE7QUFFOUcsWUFBSTdFLE1BQU0yRSxVQUFBQSxFQUFhO0FBQ3ZCLGNBQU0vRSxXQUFXQyxXQUFXOEUsV0FBVyxDQUFBLENBQUUsSUFDbkMvQyxXQUFXWSxNQUFNOUMsVUFBVUksSUFBSTZFLFdBQVcsQ0FBQSxDQUFFLElBQzVDNUUsU0FBUzRFLFdBQVcsQ0FBQSxDQUFFLEtBQUs5RSxXQUFXOEUsV0FBVyxDQUFBLEVBQUcsT0FBQSxDQUFRLElBQzFEQSxXQUFXLENBQUEsSUFDWDtBQUNSLFlBQUkzRSxNQUFNSixRQUFBQSxHQUFXO0FBQ2pCLGlCQUFPLEtBQUtOLGNBQWNXLE1BQU1FLGFBQWEyRSw0QkFBNEI7UUFDN0U7QUFDQSxjQUFNekQsUUFBUUMsUUFBUTFCLFNBQVNtRixNQUFNekUsS0FBS1YsVUFBVUssT0FBT1QsZ0JBQUFBLENBQUFBO01BQy9EO0lBQ0osQ0FBQTtFQUNKO0FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUlPLElBQU04RixhQUFOLE1BQU1BO1NBQUFBOzs7U0FBQUE7OztFQUNGekQ7RUFDQWpDO0VBQ0E0QztFQUNBMkYsZ0JBQXNDLENBQUE7RUFDdENDLGNBQWtDLENBQUE7QUFDN0M7Ozs7OztBQ0ZBLElBQU0sV0FBVyxvQkFBSSxRQUFPO0FBRTVCLFNBQVMsaUJBQ1AsWUFDQSxRQUNBLGFBQ0EsWUFBK0I7QUFFL0IsYUFBVyxRQUFPLEVBQUcsUUFBUSxDQUFDLGNBQTRCO0FBQ3hELGlCQUFhLFVBQVUsUUFBUSxhQUFhLFVBQVUsS0FBSztFQUM3RCxDQUFDO0FBQ0QsU0FBTztBQUNUO0FBVlM7QUFZVCxTQUFTLG9CQUNQLFlBQ0EsUUFBZ0I7QUFFaEIsYUFBVyxRQUFPLEVBQUcsUUFBUSxDQUFDLGNBQTJCO0FBQ3ZELFVBQU0sWUFBWSxVQUFVLE1BQU07QUFDbEMsUUFBSSxXQUFXO0FBQ2IsZUFBUzs7RUFFYixDQUFDO0FBQ0QsU0FBTztBQUNUO0FBWFM7QUF1QkgsU0FBVSxTQUNkLFlBQ0EsUUFDQSxhQUNBLFlBQStCO0FBRS9CLE1BQUksQ0FBQyxNQUFNLFFBQVEsVUFBVSxLQUFLLFdBQVcsV0FBVyxHQUFHO0FBQ3pELFVBQU0sSUFBSSxVQUFTOztBQUdyQixNQUFJLGdCQUFnQixRQUFXO0FBQzdCLFdBQU8saUJBQ0wsWUFDQSxRQUNBLGFBQ0EsVUFBVTs7QUFJZCxNQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2hDLFdBQU8sb0JBQW9CLFlBQWdDLE1BQU07O0FBR25FO0FBQ0Y7QUF4QmdCO0FBMEJoQixTQUFTLGVBQ1AsUUFDQSxhQUF5QjtBQUV6QixTQUFPLFNBQVMsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sRUFBRSxJQUFJLFdBQVc7QUFDckU7QUFMUztBQU9ULFNBQVMsdUJBQ1AsYUFDQSxRQUNBLGFBQXlCO0FBRXpCLE1BQUksV0FBVyxRQUFXO0FBQ3hCLFVBQU0sSUFBSSxVQUFTOztBQUVyQixRQUFNLGNBQWMsZUFBOEIsUUFBUSxXQUFXO0FBQ3JFLFNBQU8sZUFBZSxZQUFZLElBQUksV0FBVztBQUNuRDtBQVZTO0FBWVQsU0FBUyxrQkFDUCxRQUNBLGFBQXlCO0FBRXpCLFFBQU0saUJBQ0osU0FBUyxJQUFJLE1BQU0sS0FDbkIsb0JBQUksSUFBRztBQUNULFdBQVMsSUFBSSxRQUFRLGNBQWM7QUFDbkMsUUFBTSxjQUNKLGVBQWUsSUFBSSxXQUFXLEtBQUssb0JBQUksSUFBRztBQUM1QyxpQkFBZSxJQUFJLGFBQWEsV0FBVztBQUMzQyxTQUFPO0FBQ1Q7QUFaUztBQWNULFNBQVMsMEJBQ1AsYUFDQSxlQUNBLFFBQ0EsYUFBeUI7QUFFekIsTUFBSSxlQUFlLENBQUM7SUFBQztJQUFVO0lBQVUsU0FBUyxPQUFPLFdBQVcsR0FBRztBQUNyRSxVQUFNLElBQUksVUFBUzs7R0FJbkIsZUFBOEIsUUFBUSxXQUFXLEtBQ2pELGtCQUFpQyxRQUFRLFdBQUEsR0FDekMsSUFBSSxhQUFhLGFBQWE7QUFDbEM7QUFkUztBQWdCVCxTQUFTLG9CQUNQLGFBQ0EsUUFDQSxhQUF5QjtBQUV6QixTQUFPLHVCQUFzQyxhQUFhLFFBQVEsV0FBVyxJQUN6RSx1QkFBc0MsYUFBYSxRQUFRLFdBQVcsSUFDdEUsT0FBTyxlQUFlLE1BQU0sSUFDNUIsb0JBQ0UsYUFDQSxPQUFPLGVBQWUsTUFBTSxHQUM1QixXQUFXLElBRWI7QUFDTjtBQWRTO0FBZ0JILFNBQVUsU0FDZCxhQUNBLGVBQTRCO0FBRTVCLFNBQU8sZ0NBQVMsVUFBVSxRQUFnQixhQUF5QjtBQUNqRSw4QkFDRSxhQUNBLGVBQ0EsUUFDQSxXQUFXO0VBRWYsR0FQTztBQVFUO0FBWmdCO0FBY1YsU0FBVSxZQUNkLGFBQ0EsUUFDQSxhQUF5QjtBQUV6QixTQUFPLG9CQUFtQyxhQUFhLFFBQVEsV0FBVztBQUM1RTtBQU5nQjtBQVFWLFNBQVUsZUFDZCxhQUNBLFFBQ0EsYUFBeUI7QUFFekIsU0FBTyx1QkFDTCxhQUNBLFFBQ0EsV0FBVztBQUVmO0FBVmdCO0FBWVYsU0FBVSxlQUNkLGFBQ0EsUUFDQSxhQUF5QjtBQUV6QixTQUFPLENBQUMsQ0FBQyx1QkFBdUIsYUFBYSxRQUFRLFdBQVc7QUFDbEU7QUFOZ0I7QUFRVixTQUFVLFlBQ2QsYUFDQSxRQUNBLGFBQXlCO0FBRXpCLFNBQU8sQ0FBQyxDQUFDLG9CQUFvQixhQUFhLFFBQVEsV0FBVztBQUMvRDtBQU5nQjtBQVFWLFNBQVUsZUFDZCxhQUNBLGVBQ0EsUUFDQSxhQUF5QjtBQUV6Qiw0QkFBMEIsYUFBYSxlQUFlLFFBQVEsV0FBVztBQUMzRTtBQVBnQjtBQVNULElBQU0sYUFBYTtFQUN4QjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFnQkYsT0FBTyxPQUFPLFNBQVMsVUFBVTs7O0FFNU5qQyxTQUFTQyxjQUFBQSxtQkFBa0I7QUVJM0IsU0FBU0MsY0FBQUEsbUJBQWtCO0FFSjNCLFNBQVNDLFVBQUFBLGVBQWM7QUNBdkIsU0FBU0QsY0FBQUEsb0JBQWtCO0FDRzNCLFNBQVNBLGNBQUFBLG9CQUFrQjtBQ0gzQixTQUFTRSxnQkFBZ0I7QUtLekIsU0FBU0MsVUFBQUEsVUFBUUMsY0FBQUEsY0FBWUMsWUFBQUEsaUJBQWdCO0FDQTdDLFNBQVNDLGFBQUFBLFlBQVdILFVBQUFBLFVBQVFDLGNBQUFBLGNBQVlDLFlBQUFBLGlCQUFpQztBQ0R6RSxTQUFTRixVQUFBQSxVQUFRQyxjQUFBQSxvQkFBa0I7QU1jbkMsU0FBU0QsVUFBQUEsVUFBUUcsYUFBQUEsWUFBV0YsY0FBQUEsbUJBQW1DO0FDbEIvRCxTQUFTRSxhQUFBQSxhQUFXSCxVQUFBQSxVQUFRQyxjQUFBQSxvQkFBa0I7QUNBOUMsU0FBU0UsYUFBQUEsa0JBQWlCO0EwQkExQixTQUFTQyw2QkFBOEM7QUNBdkQsU0FBU0osVUFBQUEsU0FBUUMsY0FBQUEsb0JBQWtCOzs7QUNBbkMsU0FBU0ksT0FBT0MsR0FBRUMsR0FBRUMsR0FBRUMsR0FBRUMsR0FBRUMsR0FBRUMsSUFBR0MsZ0JBQWM7QUFBRSxTQUFPUixPQUFPUyxPQUFPVCxPQUFPVSxHQUFHVCxHQUFFQyxHQUFFQyxHQUFFQyxHQUFFQyxHQUFFQyxHQUFFQyxFQUFBQSxHQUFJQyxjQUFBQTtBQUFlO0FBQXBHUjtBQUFxR0EsT0FBT1csWUFBVSxDQUFDQyxjQUFhTCxJQUFHQyxtQkFBQUE7QUFBa0IsU0FBT1IsT0FBT1MsT0FBT0ksY0FBY0QsY0FBYUwsRUFBQUEsR0FBSUMsY0FBQUE7QUFBZTtBQUFFUixPQUFPUyxTQUFPLFNBQVNDLElBQUdGLGdCQUFjO0FBQUUsUUFBTU0sU0FBTyxJQUFJQyxLQUFLQSxLQUFLQyxJQUFJTixHQUFHVCxHQUFFUyxHQUFHUixJQUFFLEdBQUVRLEdBQUdQLEdBQUVPLEdBQUdOLEdBQUVNLEdBQUdMLEdBQUVLLEdBQUdKLENBQUMsQ0FBQSxHQUFHVyxTQUFPQyxrQkFBa0JSLEdBQUdILElBQUdPLE1BQUFBLEdBQVFLLFlBQVUsSUFBSUosS0FBS0QsT0FBT00sUUFBTyxJQUFHSCxNQUFBQSxHQUFRSSxnQkFBY0gsa0JBQWtCUixHQUFHSCxJQUFHWSxTQUFBQTtBQUFXLE1BQUdFLGdCQUFjSixXQUFTLEdBQUU7QUFBQyxXQUFPRTtFQUFTLE9BQUs7QUFBQyxVQUFNRyxhQUFXLElBQUlQLEtBQUtELE9BQU9NLFFBQU8sSUFBR0MsYUFBQUEsR0FBZUUsaUJBQWVMLGtCQUFrQlIsR0FBR0gsSUFBR2UsVUFBQUE7QUFBWSxRQUFHQyxpQkFBZUYsa0JBQWdCLEdBQUU7QUFBQyxhQUFPQztJQUFVLFdBQVMsQ0FBQ2Qsa0JBQWdCZSxpQkFBZUYsZ0JBQWMsR0FBRTtBQUFDLGFBQU9DO0lBQVUsV0FBUyxDQUFDZCxnQkFBZTtBQUFDLGFBQU9XO0lBQVMsT0FBSztBQUFDLFlBQU0sSUFBSUssTUFBTSxpQ0FBQTtJQUFrQztFQUFDO0FBQUM7QUFBRXhCLE9BQU95QixPQUFLLFNBQVN0QixHQUFFdUIsT0FBSztBQUFFLFFBQU1DLGtCQUFnQnhCLEVBQUV5QixlQUFlLFNBQVE7SUFBQ0MsVUFBU0g7RUFBSyxDQUFBLEVBQUdJLFFBQVEsWUFBVyxHQUFBO0FBQUssUUFBTUMsS0FBRyxJQUFJaEIsS0FBS1ksZUFBQUE7QUFBaUIsU0FBTTtJQUFDMUIsR0FBRThCLEdBQUdDLFlBQVc7SUFBRzlCLEdBQUU2QixHQUFHRSxTQUFRLElBQUc7SUFBRTlCLEdBQUU0QixHQUFHRyxRQUFPO0lBQUc5QixHQUFFMkIsR0FBR0ksU0FBUTtJQUFHOUIsR0FBRTBCLEdBQUdLLFdBQVU7SUFBRzlCLEdBQUV5QixHQUFHTSxXQUFVO0lBQUc5QixJQUFHbUI7RUFBSztBQUFDO0FBQUUxQixPQUFPVSxLQUFHLENBQUNULEdBQUVDLEdBQUVDLEdBQUVDLEdBQUVDLEdBQUVDLEdBQUVDLE9BQUFBO0FBQU0sU0FBTTtJQUFDTjtJQUFJQztJQUFJQztJQUFJQztJQUFJQztJQUFJQztJQUFJQztFQUFLO0FBQUM7QUFBRSxTQUFTVyxrQkFBa0JXLFVBQVNTLE9BQUssb0JBQUl2QixRQUFJO0FBQUUsUUFBTVIsS0FBRytCLEtBQUtWLGVBQWUsU0FBUTtJQUFDQztJQUFrQlUsY0FBYTtFQUFhLENBQUEsRUFBR0MsTUFBTSxHQUFBLEVBQUtDLE1BQU0sRUFBQyxFQUFHLENBQUE7QUFBRyxRQUFNQyxhQUFXSixLQUFLVixlQUFlLE9BQUEsRUFBU0UsUUFBUSxZQUFXLEdBQUE7QUFBSyxTQUFPZixLQUFLNEIsTUFBTSxHQUFHRCxVQUFBQSxNQUFnQixJQUFFM0IsS0FBSzRCLE1BQU0sR0FBR0QsVUFBQUEsSUFBY25DLEVBQUFBLEVBQUk7QUFBQztBQUFyU1c7QUFBc1MsU0FBU0wsY0FBYytCLE9BQU1yQyxJQUFFO0FBQUUsUUFBTXNDLEtBQUcsSUFBSTlCLEtBQUtBLEtBQUs0QixNQUFNQyxLQUFBQSxDQUFBQTtBQUFRLE1BQUdFLE1BQU1ELEVBQUFBLEdBQUk7QUFBQyxVQUFNLElBQUlyQixNQUFNLDJDQUFBO0VBQTRDO0FBQUMsUUFBTXVCLFlBQVVILE1BQU1JLFVBQVUsQ0FBQTtBQUFHLE1BQUdKLE1BQU1LLFNBQVMsR0FBQSxLQUFNRixVQUFVRSxTQUFTLEdBQUEsS0FBTUYsVUFBVUUsU0FBUyxHQUFBLEdBQUs7QUFBQyxXQUFPakQsT0FBT1UsR0FBR21DLEdBQUdLLGVBQWMsR0FBR0wsR0FBR00sWUFBVyxJQUFHLEdBQUVOLEdBQUdPLFdBQVUsR0FBR1AsR0FBR1EsWUFBVyxHQUFHUixHQUFHUyxjQUFhLEdBQUdULEdBQUdVLGNBQWEsR0FBRyxTQUFBO0VBQVUsT0FBSztBQUFDLFdBQU92RCxPQUFPVSxHQUFHbUMsR0FBR2IsWUFBVyxHQUFHYSxHQUFHWixTQUFRLElBQUcsR0FBRVksR0FBR1gsUUFBTyxHQUFHVyxHQUFHVixTQUFRLEdBQUdVLEdBQUdULFdBQVUsR0FBR1MsR0FBR1IsV0FBVSxHQUFHOUIsRUFBQUE7RUFBRztBQUFDO0FBQXJmTTtBQUFzZmIsT0FBT0EsU0FBT0E7QUFBTyxTQUFTd0QsWUFBWUMsU0FBTztBQUFFLE1BQUdBLFlBQVUsUUFBTztBQUFDQSxjQUFRLENBQUM7RUFBQztBQUFDLFNBQU9BLFFBQVFDO0FBQUtELFVBQVFFLGFBQVdGLFFBQVFFLGVBQWEsU0FBTyxPQUFLRixRQUFRRTtBQUFXRixVQUFRRyxTQUFPSCxRQUFRRyxXQUFTLFNBQU8sUUFBTUgsUUFBUUc7QUFBT0gsVUFBUUksVUFBUUosUUFBUUksWUFBVSxTQUFPQyxXQUFTTCxRQUFRSTtBQUFRSixVQUFRTSxRQUFNTixRQUFRTSxVQUFRLFNBQU8sUUFBTU4sUUFBUU07QUFBTU4sVUFBUU8sV0FBU1AsUUFBUU8sYUFBVyxTQUFPLElBQUVDLFNBQVNSLFFBQVFPLFVBQVMsRUFBQTtBQUFJUCxVQUFRUyxZQUFVVCxRQUFRUyxjQUFZLFNBQU8sU0FBT0QsU0FBU1IsUUFBUVMsV0FBVSxFQUFBO0FBQUlULFVBQVFVLFFBQU1WLFFBQVFVLFVBQVEsU0FBTyxRQUFNVixRQUFRVTtBQUFNLE1BQUdWLFFBQVFXLFNBQVE7QUFBQ1gsWUFBUVcsVUFBUSxJQUFJQyxTQUFTWixRQUFRVyxTQUFRWCxRQUFRYSxRQUFRO0VBQUM7QUFBQyxNQUFHYixRQUFRYyxRQUFPO0FBQUNkLFlBQVFjLFNBQU8sSUFBSUYsU0FBU1osUUFBUWMsUUFBT2QsUUFBUWEsUUFBUTtFQUFDO0FBQUMsTUFBR2IsUUFBUU8sYUFBVyxNQUFLO0FBQUMsUUFBR2xCLE1BQU1XLFFBQVFPLFFBQVEsR0FBRTtBQUFDLFlBQU0sSUFBSXhDLE1BQU0sMERBQUE7SUFBMkQsV0FBU2lDLFFBQVFPLFdBQVMsR0FBRTtBQUFDLFlBQU0sSUFBSXhDLE1BQU0sOERBQUE7SUFBK0Q7RUFBQztBQUFDLE1BQUdpQyxRQUFRUyxjQUFZLFFBQU87QUFBQyxRQUFHcEIsTUFBTVcsUUFBUVMsU0FBUyxHQUFFO0FBQUMsWUFBTSxJQUFJMUMsTUFBTSx5R0FBQTtJQUEwRyxXQUFTaUMsUUFBUVMsWUFBVSxRQUFNVCxRQUFRUyxZQUFVLEtBQUk7QUFBQyxZQUFNLElBQUkxQyxNQUFNLHVDQUFBO0lBQXdDO0FBQUMsUUFBR2lDLFFBQVFTLGNBQVksVUFBUVQsUUFBUWEsVUFBUztBQUFDLFlBQU0sSUFBSTlDLE1BQU0sb0VBQUE7SUFBcUU7RUFBQztBQUFDLE1BQUdpQyxRQUFRVSxVQUFRLFFBQU1WLFFBQVFVLFVBQVEsT0FBTTtBQUFDLFVBQU0sSUFBSTNDLE1BQU0sc0VBQUE7RUFBdUU7QUFBQyxTQUFPaUM7QUFBTztBQUF2L0NEO0FBQXcvQyxJQUFNZ0Isa0JBQWdCO0FBQUcsSUFBTUMsaUJBQWUsSUFBRSxJQUFFLElBQUUsSUFBRSxLQUFHRDtBQUFnQixJQUFNRSxzQkFBb0I7RUFBQztFQUFFO0VBQUU7RUFBRTtFQUFFOztBQUFJLFNBQVNDLFlBQVlDLFNBQVFOLFVBQVE7QUFBRSxPQUFLTSxVQUFRQTtBQUFRLE9BQUtOLFdBQVNBO0FBQVMsT0FBS08sU0FBT0MsTUFBTSxFQUFBLEVBQUlDLEtBQUssQ0FBQTtBQUFHLE9BQUtDLFNBQU9GLE1BQU0sRUFBQSxFQUFJQyxLQUFLLENBQUE7QUFBRyxPQUFLRSxPQUFLSCxNQUFNLEVBQUEsRUFBSUMsS0FBSyxDQUFBO0FBQUcsT0FBS0csTUFBSUosTUFBTSxFQUFBLEVBQUlDLEtBQUssQ0FBQTtBQUFHLE9BQUtJLFFBQU1MLE1BQU0sRUFBQSxFQUFJQyxLQUFLLENBQUE7QUFBRyxPQUFLSyxZQUFVTixNQUFNLENBQUEsRUFBR0MsS0FBSyxDQUFBO0FBQUcsT0FBS00saUJBQWU7QUFBTSxPQUFLQyxVQUFRO0FBQU0sT0FBS0MsVUFBUTtBQUFNLE9BQUs1QyxNQUFLO0FBQUU7QUFBdFVnQztBQUF1VUEsWUFBWWEsVUFBVTdDLFFBQU0sV0FBQTtBQUFXLE1BQUcsRUFBRSxPQUFPLEtBQUtpQyxZQUFVLFlBQVUsS0FBS0EsUUFBUSxnQkFBY2EsU0FBUTtBQUFDLFVBQU0sSUFBSUMsVUFBVSxnREFBQTtFQUFpRDtBQUFDLE1BQUcsS0FBS2QsUUFBUWUsUUFBUSxHQUFBLEtBQU0sRUFBRSxNQUFLZixVQUFRLEtBQUtnQixnQkFBZ0IsS0FBS2hCLE9BQU8sRUFBRWlCLEtBQUk7QUFBRyxRQUFNQyxRQUFNLEtBQUtsQixRQUFROUMsUUFBUSxRQUFPLEdBQUEsRUFBS1UsTUFBTSxHQUFBO0FBQUssTUFBR3NELE1BQU1DLFNBQU8sS0FBR0QsTUFBTUMsU0FBTyxHQUFFO0FBQUMsVUFBTSxJQUFJTCxVQUFVLGlEQUErQyxLQUFLZCxVQUFRLDZEQUFBO0VBQThEO0FBQUMsTUFBR2tCLE1BQU1DLFdBQVMsR0FBRTtBQUFDRCxVQUFNRSxRQUFRLEdBQUE7RUFBSTtBQUFDLE1BQUdGLE1BQU0sQ0FBQSxFQUFHSCxRQUFRLEdBQUEsS0FBTSxHQUFFO0FBQUNHLFVBQU0sQ0FBQSxJQUFHQSxNQUFNLENBQUEsRUFBR2hFLFFBQVEsS0FBSSxFQUFBO0FBQUksU0FBS3VELGlCQUFlO0VBQUk7QUFBQyxNQUFHUyxNQUFNLENBQUEsS0FBSSxLQUFJO0FBQUMsU0FBS1IsVUFBUTtFQUFJO0FBQUMsTUFBR1EsTUFBTSxDQUFBLEVBQUdDLFVBQVEsRUFBRUQsT0FBTSxDQUFBLElBQUcsS0FBS0csbUJBQW1CSCxNQUFNLENBQUEsQ0FBRTtBQUFFLE1BQUdBLE1BQU0sQ0FBQSxFQUFHQyxVQUFRLEVBQUVELE9BQU0sQ0FBQSxJQUFHLEtBQUtJLGlCQUFpQkosTUFBTSxDQUFBLENBQUU7QUFBRSxNQUFHQSxNQUFNLENBQUEsS0FBSSxLQUFJO0FBQUMsU0FBS1AsVUFBUTtFQUFJO0FBQUMsTUFBRyxLQUFLWCxRQUFRZSxRQUFRLEdBQUEsS0FBTSxHQUFFO0FBQUMsVUFBTVEsV0FBUyxJQUFJOUIsU0FBUyxvQkFBSXRELFFBQUssS0FBS3VELFFBQVEsRUFBRXBDLFFBQVEsSUFBQTtBQUFNNEQsVUFBTSxDQUFBLElBQUdBLE1BQU0sQ0FBQSxFQUFHaEUsUUFBUSxLQUFJcUUsU0FBUzlELFdBQVUsQ0FBQTtBQUFJeUQsVUFBTSxDQUFBLElBQUdBLE1BQU0sQ0FBQSxFQUFHaEUsUUFBUSxLQUFJcUUsU0FBUy9ELFdBQVUsQ0FBQTtBQUFJMEQsVUFBTSxDQUFBLElBQUdBLE1BQU0sQ0FBQSxFQUFHaEUsUUFBUSxLQUFJcUUsU0FBU2hFLFNBQVEsQ0FBQTtBQUFJLFFBQUcsQ0FBQyxLQUFLbUQsUUFBUVEsT0FBTSxDQUFBLElBQUdBLE1BQU0sQ0FBQSxFQUFHaEUsUUFBUSxLQUFJcUUsU0FBU2pFLFFBQU8sQ0FBQTtBQUFJNEQsVUFBTSxDQUFBLElBQUdBLE1BQU0sQ0FBQSxFQUFHaEUsUUFBUSxLQUFJcUUsU0FBU2xFLFNBQVEsSUFBRyxDQUFBO0FBQUcsUUFBRyxDQUFDLEtBQUtzRCxRQUFRTyxPQUFNLENBQUEsSUFBR0EsTUFBTSxDQUFBLEVBQUdoRSxRQUFRLEtBQUlxRSxTQUFTQyxPQUFNLENBQUE7RUFBRztBQUFDLE9BQUtDLHlCQUF5QlAsS0FBQUE7QUFBTyxPQUFLUSxZQUFZLFVBQVNSLE1BQU0sQ0FBQSxHQUFHLEdBQUUsQ0FBQTtBQUFHLE9BQUtRLFlBQVksVUFBU1IsTUFBTSxDQUFBLEdBQUcsR0FBRSxDQUFBO0FBQUcsT0FBS1EsWUFBWSxRQUFPUixNQUFNLENBQUEsR0FBRyxHQUFFLENBQUE7QUFBRyxPQUFLUSxZQUFZLE9BQU1SLE1BQU0sQ0FBQSxHQUFHLElBQUcsQ0FBQTtBQUFHLE9BQUtRLFlBQVksU0FBUVIsTUFBTSxDQUFBLEdBQUcsSUFBRyxDQUFBO0FBQUcsT0FBS1EsWUFBWSxhQUFZUixNQUFNLENBQUEsR0FBRyxHQUFFckIsY0FBQUE7QUFBZ0IsTUFBRyxLQUFLVyxVQUFVLENBQUEsR0FBRztBQUFDLFNBQUtBLFVBQVUsQ0FBQSxJQUFHLEtBQUtBLFVBQVUsQ0FBQTtFQUFFO0FBQUM7QUFBRVQsWUFBWWEsVUFBVWMsY0FBWSxTQUFTQyxNQUFLQyxNQUFLQyxrQkFBaUJDLGNBQVk7QUFBRSxRQUFNQyxNQUFJLEtBQUtKLElBQUFBO0FBQU0sUUFBTWxCLGlCQUFla0IsU0FBTyxTQUFPLEtBQUtsQjtBQUFlLE1BQUdtQixTQUFPLE1BQUksQ0FBQ25CLGVBQWUsT0FBTSxJQUFJSyxVQUFVLHNDQUFvQ2EsT0FBSyxPQUFLQyxPQUFLLHdDQUFBO0FBQTBDLE1BQUdBLFNBQU8sSUFBSSxRQUFPRyxJQUFJNUIsS0FBSzJCLFlBQUFBO0FBQWMsUUFBTWxFLFFBQU1nRSxLQUFLaEUsTUFBTSxHQUFBO0FBQUssTUFBR0EsTUFBTXVELFNBQU8sR0FBRTtBQUFDLGFBQVExRixJQUFFLEdBQUVBLElBQUVtQyxNQUFNdUQsUUFBTzFGLEtBQUk7QUFBQyxXQUFLaUcsWUFBWUMsTUFBSy9ELE1BQU1uQyxDQUFBQSxHQUFHb0csa0JBQWlCQyxZQUFBQTtJQUFhO0VBQUMsV0FBU0YsS0FBS2IsUUFBUSxHQUFBLE1BQU8sTUFBSWEsS0FBS2IsUUFBUSxHQUFBLE1BQU8sSUFBRztBQUFDLFNBQUtpQix3QkFBd0JKLE1BQUtELE1BQUtFLGtCQUFpQkMsWUFBQUE7RUFBYSxXQUFTRixLQUFLYixRQUFRLEdBQUEsTUFBTyxJQUFHO0FBQUMsU0FBS2tCLFlBQVlMLE1BQUtELE1BQUtFLGtCQUFpQkMsWUFBQUE7RUFBYSxXQUFTRixLQUFLYixRQUFRLEdBQUEsTUFBTyxJQUFHO0FBQUMsU0FBS21CLGVBQWVOLE1BQUtELE1BQUtFLGtCQUFpQkMsWUFBQUE7RUFBYSxXQUFTRixTQUFPLElBQUc7QUFBQyxTQUFLTyxhQUFhUCxNQUFLRCxNQUFLRSxrQkFBaUJDLFlBQUFBO0VBQWE7QUFBQztBQUFFL0IsWUFBWWEsVUFBVWEsMkJBQXlCLFNBQVNQLE9BQUs7QUFBRSxXQUFRekYsSUFBRSxHQUFFQSxJQUFFeUYsTUFBTUMsUUFBTzFGLEtBQUk7QUFBQyxVQUFNMkcsY0FBWTNHLE1BQUksSUFBRSxtQkFBaUI7QUFBYyxRQUFHMkcsWUFBWUMsS0FBS25CLE1BQU16RixDQUFBQSxDQUFFLEdBQUU7QUFBQyxZQUFNLElBQUlxRixVQUFVLHNDQUFvQ3JGLElBQUUsT0FBS3lGLE1BQU16RixDQUFBQSxJQUFHLGdDQUFBO0lBQWlDO0VBQUM7QUFBQztBQUFFc0UsWUFBWWEsVUFBVXVCLGVBQWEsU0FBU1AsTUFBS0QsTUFBS0Usa0JBQWlCQyxjQUFZO0FBQUUsUUFBTVEsU0FBTyxLQUFLQyxXQUFXWCxNQUFLRCxJQUFBQTtBQUFNLFFBQU1sRyxJQUFFNEQsU0FBU2lELE9BQU8sQ0FBQSxHQUFHLEVBQUEsSUFBSVQ7QUFBaUIsTUFBRzNELE1BQU16QyxDQUFBQSxHQUFHO0FBQUMsVUFBTSxJQUFJcUYsVUFBVSxrQkFBZ0JhLE9BQUssd0JBQXNCQyxPQUFLLEdBQUE7RUFBSTtBQUFDLE9BQUtZLFFBQVFiLE1BQUtsRyxHQUFFNkcsT0FBTyxDQUFBLEtBQUlSLFlBQUFBO0FBQWE7QUFBRS9CLFlBQVlhLFVBQVU0QixVQUFRLFNBQVNDLE1BQUtDLE9BQU1DLE9BQUs7QUFBRSxNQUFHLENBQUNDLE9BQU9oQyxVQUFVaUMsZUFBZUMsS0FBSyxNQUFLTCxJQUFBQSxHQUFNO0FBQUMsVUFBTSxJQUFJM0IsVUFBVSwwQ0FBd0MyQixJQUFBQTtFQUFLO0FBQUMsTUFBR0EsU0FBTyxhQUFZO0FBQUMsUUFBR0MsVUFBUSxFQUFFQSxTQUFNO0FBQUUsU0FBSUEsUUFBTSxLQUFHQSxRQUFNLE1BQUlBLFVBQVEsS0FBSTtBQUFDLFlBQU0sSUFBSUssV0FBVywrQ0FBNkNMLEtBQUFBO0lBQU07QUFBQyxTQUFLTSxxQkFBcUJOLE9BQU1DLEtBQUFBO0FBQU87RUFBTTtBQUFDLE1BQUdGLFNBQU8sWUFBVUEsU0FBTyxVQUFTO0FBQUMsUUFBR0MsUUFBTSxLQUFHQSxTQUFPLElBQUc7QUFBQyxZQUFNLElBQUlLLFdBQVcsb0NBQWtDTixPQUFLLE9BQUtDLEtBQUFBO0lBQU07RUFBQyxXQUFTRCxTQUFPLFFBQU87QUFBQyxRQUFHQyxRQUFNLEtBQUdBLFNBQU8sSUFBRztBQUFDLFlBQU0sSUFBSUssV0FBVyxvQ0FBa0NOLE9BQUssT0FBS0MsS0FBQUE7SUFBTTtFQUFDLFdBQVNELFNBQU8sT0FBTTtBQUFDLFFBQUdDLFFBQU0sS0FBR0EsU0FBTyxJQUFHO0FBQUMsWUFBTSxJQUFJSyxXQUFXLG9DQUFrQ04sT0FBSyxPQUFLQyxLQUFBQTtJQUFNO0VBQUMsV0FBU0QsU0FBTyxTQUFRO0FBQUMsUUFBR0MsUUFBTSxLQUFHQSxTQUFPLElBQUc7QUFBQyxZQUFNLElBQUlLLFdBQVcsb0NBQWtDTixPQUFLLE9BQUtDLEtBQUFBO0lBQU07RUFBQztBQUFDLE9BQUtELElBQUFBLEVBQU1DLEtBQUFBLElBQU9DO0FBQUs7QUFBRTVDLFlBQVlhLFVBQVVvQiwwQkFBd0IsU0FBU0osTUFBS0QsTUFBS0Usa0JBQWlCQyxjQUFZO0FBQUUsUUFBTVEsU0FBTyxLQUFLQyxXQUFXWCxNQUFLRCxJQUFBQTtBQUFNLFFBQU1zQixVQUFRWCxPQUFPLENBQUEsRUFBR1ksTUFBTSxzQkFBQTtBQUF3QixNQUFHRCxZQUFVLEtBQUssT0FBTSxJQUFJbkMsVUFBVSw4REFBNERjLE9BQUssR0FBQTtBQUFLLE1BQUcsQ0FBQSxFQUFFdUIsT0FBTUMsT0FBTUMsS0FBQUEsSUFBT0o7QUFBUUUsVUFBTTlELFNBQVM4RCxPQUFNLEVBQUEsSUFBSXRCO0FBQWlCdUIsVUFBTS9ELFNBQVMrRCxPQUFNLEVBQUEsSUFBSXZCO0FBQWlCd0IsVUFBTWhFLFNBQVNnRSxPQUFNLEVBQUE7QUFBSSxNQUFHbkYsTUFBTWlGLEtBQUFBLEVBQU8sT0FBTSxJQUFJckMsVUFBVSxzREFBQTtBQUF3RCxNQUFHNUMsTUFBTWtGLEtBQUFBLEVBQU8sT0FBTSxJQUFJdEMsVUFBVSxzREFBQTtBQUF3RCxNQUFHNUMsTUFBTW1GLEtBQUFBLEVBQU8sT0FBTSxJQUFJdkMsVUFBVSxvREFBQTtBQUFzRCxNQUFHdUMsVUFBUSxFQUFFLE9BQU0sSUFBSXZDLFVBQVUsZ0RBQUE7QUFBa0QsTUFBR3VDLFFBQU0sS0FBSzFCLElBQUFBLEVBQU1SLE9BQU8sT0FBTSxJQUFJTCxVQUFVLG9GQUFrRixLQUFLYSxJQUFBQSxFQUFNUixTQUFPLEdBQUE7QUFBSyxNQUFHZ0MsUUFBTUMsTUFBTSxPQUFNLElBQUl0QyxVQUFVLHVEQUFxRGMsT0FBSyxHQUFBO0FBQUssV0FBUW5HLElBQUUwSCxPQUFNMUgsS0FBRzJILE9BQU0zSCxLQUFHNEgsT0FBTTtBQUFDLFNBQUtiLFFBQVFiLE1BQUtsRyxHQUFFNkcsT0FBTyxDQUFBLEtBQUlSLFlBQUFBO0VBQWE7QUFBQztBQUFFL0IsWUFBWWEsVUFBVTJCLGFBQVcsU0FBU1gsTUFBS0QsTUFBSTtBQUFFLE1BQUkyQixPQUFLMUI7QUFBSyxNQUFJMkI7QUFBSSxNQUFHRCxLQUFLakYsU0FBUyxHQUFBLEdBQUs7QUFBQyxRQUFHc0QsU0FBTyxhQUFZO0FBQUMsWUFBTSxJQUFJL0UsTUFBTSx3REFBQTtJQUF5RDtBQUFDMkcsVUFBSUQsS0FBSzFGLE1BQU0sR0FBQSxFQUFLLENBQUE7QUFBRzBGLFdBQUtBLEtBQUsxRixNQUFNLEdBQUEsRUFBSyxDQUFBO0VBQUU7QUFBQyxTQUFNO0lBQUMwRjtJQUFLQzs7QUFBSTtBQUFFeEQsWUFBWWEsVUFBVXFCLGNBQVksU0FBU0wsTUFBS0QsTUFBS0Usa0JBQWlCQyxjQUFZO0FBQUUsUUFBTVEsU0FBTyxLQUFLQyxXQUFXWCxNQUFLRCxJQUFBQTtBQUFNLFFBQU0vRCxRQUFNMEUsT0FBTyxDQUFBLEVBQUcxRSxNQUFNLEdBQUE7QUFBSyxNQUFHQSxNQUFNdUQsV0FBUyxHQUFFO0FBQUMsVUFBTSxJQUFJTCxVQUFVLGdEQUE4Q2MsT0FBSyxHQUFBO0VBQUk7QUFBQyxRQUFNdUIsUUFBTTlELFNBQVN6QixNQUFNLENBQUEsR0FBRyxFQUFBLElBQUlpRSxrQkFBaUJ1QixRQUFNL0QsU0FBU3pCLE1BQU0sQ0FBQSxHQUFHLEVBQUEsSUFBSWlFO0FBQWlCLE1BQUczRCxNQUFNaUYsS0FBQUEsR0FBTztBQUFDLFVBQU0sSUFBSXJDLFVBQVUsc0RBQUE7RUFBdUQsV0FBUzVDLE1BQU1rRixLQUFBQSxHQUFPO0FBQUMsVUFBTSxJQUFJdEMsVUFBVSxzREFBQTtFQUF1RDtBQUFDLE1BQUdxQyxRQUFNQyxPQUFNO0FBQUMsVUFBTSxJQUFJdEMsVUFBVSx1REFBcURjLE9BQUssR0FBQTtFQUFJO0FBQUMsV0FBUW5HLElBQUUwSCxPQUFNMUgsS0FBRzJILE9BQU0zSCxLQUFJO0FBQUMsU0FBSytHLFFBQVFiLE1BQUtsRyxHQUFFNkcsT0FBTyxDQUFBLEtBQUlSLFlBQUFBO0VBQWE7QUFBQztBQUFFL0IsWUFBWWEsVUFBVXNCLGlCQUFlLFNBQVNOLE1BQUtELE1BQUtFLGtCQUFpQkMsY0FBWTtBQUFFLFFBQU1RLFNBQU8sS0FBS0MsV0FBV1gsTUFBS0QsSUFBQUE7QUFBTSxRQUFNL0QsUUFBTTBFLE9BQU8sQ0FBQSxFQUFHMUUsTUFBTSxHQUFBO0FBQUssTUFBR0EsTUFBTXVELFdBQVMsR0FBRTtBQUFDLFVBQU0sSUFBSUwsVUFBVSxtREFBaURjLE9BQUssR0FBQTtFQUFJO0FBQUMsTUFBSTRCLFFBQU07QUFBRSxNQUFHNUYsTUFBTSxDQUFBLE1BQUssS0FBSTtBQUFDNEYsWUFBTW5FLFNBQVN6QixNQUFNLENBQUEsR0FBRyxFQUFBLElBQUlpRTtFQUFnQjtBQUFDLFFBQU13QixRQUFNaEUsU0FBU3pCLE1BQU0sQ0FBQSxHQUFHLEVBQUE7QUFBSSxNQUFHTSxNQUFNbUYsS0FBQUEsRUFBTyxPQUFNLElBQUl2QyxVQUFVLG9EQUFBO0FBQXNELE1BQUd1QyxVQUFRLEVBQUUsT0FBTSxJQUFJdkMsVUFBVSxnREFBQTtBQUFrRCxNQUFHdUMsUUFBTSxLQUFLMUIsSUFBQUEsRUFBTVIsT0FBTyxPQUFNLElBQUlMLFVBQVUsdURBQXFELEtBQUthLElBQUFBLEVBQU1SLFNBQU8sR0FBQTtBQUFLLFdBQVExRixJQUFFK0gsT0FBTS9ILElBQUUsS0FBS2tHLElBQUFBLEVBQU1SLFFBQU8xRixLQUFHNEgsT0FBTTtBQUFDLFNBQUtiLFFBQVFiLE1BQUtsRyxHQUFFNkcsT0FBTyxDQUFBLEtBQUlSLFlBQUFBO0VBQWE7QUFBQztBQUFFL0IsWUFBWWEsVUFBVVUsbUJBQWlCLFNBQVNNLE1BQUk7QUFBRSxTQUFPQSxLQUFLMUUsUUFBUSxVQUFTLElBQUEsRUFBTUEsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUE7QUFBSTtBQUFFNkMsWUFBWWEsVUFBVVMscUJBQW1CLFNBQVNPLE1BQUk7QUFBRSxTQUFPQSxLQUFLMUUsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLEdBQUEsRUFBS0EsUUFBUSxTQUFRLElBQUEsRUFBTUEsUUFBUSxTQUFRLElBQUEsRUFBTUEsUUFBUSxTQUFRLElBQUE7QUFBSztBQUFFNkMsWUFBWWEsVUFBVUksa0JBQWdCLFNBQVNoQixTQUFPO0FBQUUsUUFBTXlELGVBQWF6RCxRQUFRaUIsS0FBSSxFQUFHeUMsWUFBVztBQUFHLE1BQUdELGlCQUFlLGFBQVdBLGlCQUFlLGFBQVk7QUFBQyxXQUFNO0VBQVcsV0FBU0EsaUJBQWUsWUFBVztBQUFDLFdBQU07RUFBVyxXQUFTQSxpQkFBZSxXQUFVO0FBQUMsV0FBTTtFQUFXLFdBQVNBLGlCQUFlLFVBQVM7QUFBQyxXQUFNO0VBQVcsV0FBU0EsaUJBQWUsV0FBVTtBQUFDLFdBQU07RUFBVyxPQUFLO0FBQUMsV0FBT3pEO0VBQU87QUFBQztBQUFFRCxZQUFZYSxVQUFVb0MsdUJBQXFCLFNBQVNOLE9BQU1pQixZQUFVO0FBQUUsTUFBR0EsZUFBYSxLQUFJO0FBQUMsU0FBSyxXQUFBLEVBQWFqQixLQUFBQSxJQUFPLEtBQUssV0FBQSxFQUFhQSxLQUFBQSxJQUFPOUM7RUFBZSxXQUFTK0QsYUFBVyxLQUFHQSxhQUFXLEdBQUU7QUFBQyxTQUFLLFdBQUEsRUFBYWpCLEtBQUFBLElBQU8sS0FBSyxXQUFBLEVBQWFBLEtBQUFBLElBQU81QyxvQkFBb0I2RCxhQUFXLENBQUE7RUFBRSxXQUFTQSxlQUFhOUQsZ0JBQWU7QUFBQyxTQUFLLFdBQUEsRUFBYTZDLEtBQUFBLElBQU83QztFQUFjLE9BQUs7QUFBQyxVQUFNLElBQUlpQixVQUFVLG9FQUFvRTZDLFVBQUFBLEVBQVk7RUFBQztBQUFDO0FBQUUsSUFBTUMsY0FBWTtFQUFDO0VBQUc7RUFBRztFQUFHO0VBQUc7RUFBRztFQUFHO0VBQUc7RUFBRztFQUFHO0VBQUc7RUFBRzs7QUFBSSxJQUFNQyxpQkFBZTtFQUFDO0lBQUM7SUFBUTtJQUFPOztFQUFHO0lBQUM7SUFBTTtJQUFROztFQUFJO0lBQUM7SUFBTztJQUFNOztFQUFHO0lBQUM7SUFBUztJQUFPOztFQUFHO0lBQUM7SUFBUztJQUFTOzs7QUFBSSxTQUFTcEUsU0FBU2xFLEdBQUVJLElBQUU7QUFBRSxPQUFLQSxLQUFHQTtBQUFHLE1BQUdKLEtBQUdBLGFBQWFZLE1BQUs7QUFBQyxRQUFHLENBQUMrQixNQUFNM0MsQ0FBQUEsR0FBRztBQUFDLFdBQUt1SSxTQUFTdkksQ0FBQUE7SUFBRSxPQUFLO0FBQUMsWUFBTSxJQUFJdUYsVUFBVSx1REFBQTtJQUF3RDtFQUFDLFdBQVN2RixNQUFJLFFBQU87QUFBQyxTQUFLdUksU0FBUyxvQkFBSTNILE1BQUFBO0VBQUssV0FBU1osS0FBRyxPQUFPQSxNQUFJLFVBQVM7QUFBQyxTQUFLd0ksV0FBV3hJLENBQUFBO0VBQUUsV0FBU0EsYUFBYWtFLFVBQVM7QUFBQyxTQUFLdUUsYUFBYXpJLENBQUFBO0VBQUUsT0FBSztBQUFDLFVBQU0sSUFBSXVGLFVBQVUsNkJBQTJCLE9BQU92RixJQUFFLGtDQUFBO0VBQW1DO0FBQUM7QUFBelprRTtBQUEwWkEsU0FBU21CLFVBQVVxRCxzQkFBb0IsU0FBU0MsTUFBSzNELE9BQU1ELEtBQUlpRCxLQUFHO0FBQUUsUUFBTTdGLE9BQUssSUFBSXZCLEtBQUtBLEtBQUtDLElBQUk4SCxNQUFLM0QsT0FBTUQsR0FBQUEsQ0FBQUE7QUFBTSxRQUFNNkQsVUFBUXpHLEtBQUswRyxVQUFTO0FBQUcsTUFBSUMsUUFBTTtBQUFFLFdBQVE5SSxJQUFFLEdBQUVBLEtBQUcrRSxLQUFJL0UsS0FBSTtBQUFDLFFBQUcsSUFBSVksS0FBS0EsS0FBS0MsSUFBSThILE1BQUszRCxPQUFNaEYsQ0FBQUEsQ0FBQUEsRUFBSTZJLFVBQVMsTUFBS0QsU0FBUTtBQUFDRTtJQUFPO0VBQUM7QUFBQyxNQUFHZCxNQUFJMUQsa0JBQWdCQyxvQkFBb0J1RSxRQUFNLENBQUEsSUFBR2QsS0FBSTtBQUFDLFdBQU87RUFBSTtBQUFDLE1BQUdBLE1BQUkzRCxpQkFBZ0I7QUFBQyxVQUFNMEUsY0FBWSxJQUFJbkksS0FBS0EsS0FBS0MsSUFBSThILE1BQUszRCxRQUFNLEdBQUUsQ0FBQSxDQUFBLEVBQUkvQixXQUFVO0FBQUcsYUFBUWpELElBQUUrRSxNQUFJLEdBQUUvRSxLQUFHK0ksYUFBWS9JLEtBQUk7QUFBQyxVQUFHLElBQUlZLEtBQUtBLEtBQUtDLElBQUk4SCxNQUFLM0QsT0FBTWhGLENBQUFBLENBQUFBLEVBQUk2SSxVQUFTLE1BQUtELFNBQVE7QUFBQyxlQUFPO01BQUs7SUFBQztBQUFDLFdBQU87RUFBSTtBQUFDLFNBQU87QUFBSztBQUFFMUUsU0FBU21CLFVBQVVrRCxXQUFTLFNBQVM1SCxRQUFNO0FBQUUsTUFBRyxLQUFLUCxPQUFLLFFBQU87QUFBQyxRQUFHLE9BQU8sS0FBS0EsT0FBSyxVQUFTO0FBQUMsV0FBSzRJLEtBQUdySSxPQUFPc0ksbUJBQWtCO0FBQUcsV0FBS3ZFLFNBQU8vRCxPQUFPeUMsY0FBYTtBQUFHLFdBQUt5QixTQUFPbEUsT0FBT3dDLGNBQWEsSUFBRyxLQUFLL0M7QUFBRyxXQUFLMEUsT0FBS25FLE9BQU91QyxZQUFXO0FBQUcsV0FBSzZCLE1BQUlwRSxPQUFPc0MsV0FBVTtBQUFHLFdBQUsrQixRQUFNckUsT0FBT3FDLFlBQVc7QUFBRyxXQUFLMkYsT0FBS2hJLE9BQU9vQyxlQUFjO0FBQUcsV0FBS21HLE1BQUs7SUFBRSxPQUFLO0FBQUMsWUFBTWxKLElBQUVILE9BQU95QixLQUFLWCxRQUFPLEtBQUtQLEVBQUU7QUFBRSxXQUFLNEksS0FBR3JJLE9BQU93SSxnQkFBZTtBQUFHLFdBQUt6RSxTQUFPMUUsRUFBRUc7QUFBRSxXQUFLMEUsU0FBTzdFLEVBQUVFO0FBQUUsV0FBSzRFLE9BQUs5RSxFQUFFQztBQUFFLFdBQUs4RSxNQUFJL0UsRUFBRUE7QUFBRSxXQUFLZ0YsUUFBTWhGLEVBQUVELElBQUU7QUFBRSxXQUFLNEksT0FBSzNJLEVBQUVGO0lBQUM7RUFBQyxPQUFLO0FBQUMsU0FBS2tKLEtBQUdySSxPQUFPd0ksZ0JBQWU7QUFBRyxTQUFLekUsU0FBTy9ELE9BQU91QixXQUFVO0FBQUcsU0FBSzJDLFNBQU9sRSxPQUFPc0IsV0FBVTtBQUFHLFNBQUs2QyxPQUFLbkUsT0FBT3FCLFNBQVE7QUFBRyxTQUFLK0MsTUFBSXBFLE9BQU9vQixRQUFPO0FBQUcsU0FBS2lELFFBQU1yRSxPQUFPbUIsU0FBUTtBQUFHLFNBQUs2RyxPQUFLaEksT0FBT2tCLFlBQVc7RUFBRTtBQUFDO0FBQUVxQyxTQUFTbUIsVUFBVW9ELGVBQWEsU0FBU3pJLEdBQUM7QUFBRSxPQUFLSSxLQUFHSixFQUFFSTtBQUFHLE9BQUt1SSxPQUFLM0ksRUFBRTJJO0FBQUssT0FBSzNELFFBQU1oRixFQUFFZ0Y7QUFBTSxPQUFLRCxNQUFJL0UsRUFBRStFO0FBQUksT0FBS0QsT0FBSzlFLEVBQUU4RTtBQUFLLE9BQUtELFNBQU83RSxFQUFFNkU7QUFBTyxPQUFLSCxTQUFPMUUsRUFBRTBFO0FBQU8sT0FBS3NFLEtBQUdoSixFQUFFZ0o7QUFBRTtBQUFFOUUsU0FBU21CLFVBQVU2RCxRQUFNLFdBQUE7QUFBVyxNQUFHLEtBQUtsRSxRQUFNLE1BQUksS0FBS0QsTUFBSXNELFlBQVksS0FBS3JELEtBQUssS0FBRyxLQUFLRixPQUFLLE1BQUksS0FBS0QsU0FBTyxNQUFJLEtBQUtILFNBQU8sTUFBSSxLQUFLSSxPQUFLLEtBQUcsS0FBS0QsU0FBTyxLQUFHLEtBQUtILFNBQU8sR0FBRTtBQUFDLFVBQU0xRSxJQUFFLElBQUlZLEtBQUtBLEtBQUtDLElBQUksS0FBSzhILE1BQUssS0FBSzNELE9BQU0sS0FBS0QsS0FBSSxLQUFLRCxNQUFLLEtBQUtELFFBQU8sS0FBS0gsUUFBTyxLQUFLc0UsRUFBRSxDQUFBO0FBQUcsU0FBS0EsS0FBR2hKLEVBQUVpSixtQkFBa0I7QUFBRyxTQUFLdkUsU0FBTzFFLEVBQUVvRCxjQUFhO0FBQUcsU0FBS3lCLFNBQU83RSxFQUFFbUQsY0FBYTtBQUFHLFNBQUsyQixPQUFLOUUsRUFBRWtELFlBQVc7QUFBRyxTQUFLNkIsTUFBSS9FLEVBQUVpRCxXQUFVO0FBQUcsU0FBSytCLFFBQU1oRixFQUFFZ0QsWUFBVztBQUFHLFNBQUsyRixPQUFLM0ksRUFBRStDLGVBQWM7QUFBRyxXQUFPO0VBQUksT0FBSztBQUFDLFdBQU87RUFBSztBQUFDO0FBQUVtQixTQUFTbUIsVUFBVW1ELGFBQVcsU0FBU1ksS0FBRztBQUFFLE1BQUcsT0FBTyxLQUFLaEosT0FBSyxVQUFTO0FBQUMsVUFBTU8sU0FBT2QsT0FBT1csVUFBVTRJLEdBQUFBO0FBQUssU0FBS0osS0FBR3JJLE9BQU9zSSxtQkFBa0I7QUFBRyxTQUFLdkUsU0FBTy9ELE9BQU95QyxjQUFhO0FBQUcsU0FBS3lCLFNBQU9sRSxPQUFPd0MsY0FBYTtBQUFHLFNBQUsyQixPQUFLbkUsT0FBT3VDLFlBQVc7QUFBRyxTQUFLNkIsTUFBSXBFLE9BQU9zQyxXQUFVO0FBQUcsU0FBSytCLFFBQU1yRSxPQUFPcUMsWUFBVztBQUFHLFNBQUsyRixPQUFLaEksT0FBT29DLGVBQWM7QUFBRyxTQUFLbUcsTUFBSztFQUFFLE9BQUs7QUFBQyxXQUFPLEtBQUtYLFNBQVMxSSxPQUFPVyxVQUFVNEksS0FBSSxLQUFLaEosRUFBRSxDQUFBO0VBQUU7QUFBQztBQUFFOEQsU0FBU21CLFVBQVVnRSxXQUFTLFNBQVMvRixTQUFRZ0csUUFBTzdFLFNBQVEzRCxRQUFNO0FBQUUsUUFBTXlJLGlCQUFlLEtBQUtELE1BQUFBO0FBQVEsTUFBSXBFO0FBQWUsTUFBR1QsUUFBUVMsZ0JBQWU7QUFBQyxRQUFHLEtBQUtGLFVBQVEsR0FBRTtBQUFDRSx1QkFBZW1ELFlBQVksS0FBS3JELEtBQUs7SUFBQyxPQUFLO0FBQUNFLHVCQUFlLElBQUl0RSxLQUFLQSxLQUFLQyxJQUFJLEtBQUs4SCxNQUFLLEtBQUszRCxRQUFNLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFBLENBQUEsRUFBSS9CLFdBQVU7SUFBRTtFQUFDO0FBQUMsUUFBTXVHLGNBQVksQ0FBQy9FLFFBQVFXLFdBQVNrRSxVQUFRLFFBQU0sSUFBSTFJLEtBQUtBLEtBQUtDLElBQUksS0FBSzhILE1BQUssS0FBSzNELE9BQU0sR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFBLENBQUEsRUFBSTZELFVBQVMsSUFBR1k7QUFBVSxXQUFRdkosSUFBRSxLQUFLb0osTUFBQUEsSUFBUXhJLFFBQU9aLElBQUV1RSxRQUFRNkUsTUFBQUEsRUFBUTFELFFBQU8xRixLQUFJO0FBQUMsUUFBSXlILFFBQU1sRCxRQUFRNkUsTUFBQUEsRUFBUXBKLENBQUFBO0FBQUcsUUFBR29KLFdBQVMsU0FBTzdFLFFBQVFTLGtCQUFnQmhGLElBQUVZLFVBQVFvRSxnQkFBZTtBQUFDeUMsY0FBTTtJQUFJO0FBQUMsUUFBRzJCLFdBQVMsU0FBTyxDQUFDN0UsUUFBUVcsU0FBUTtBQUFDLFVBQUlzRSxXQUFTakYsUUFBUVEsV0FBV3VFLGVBQWF0SixJQUFFWSxTQUFPLE1BQUksQ0FBQTtBQUFHLFVBQUc0SSxZQUFVQSxXQUFTcEYsZ0JBQWU7QUFBQ29GLG1CQUFTLEtBQUtoQixvQkFBb0IsS0FBS0MsTUFBSyxLQUFLM0QsT0FBTTlFLElBQUVZLFFBQU80SSxRQUFBQTtNQUFTLFdBQVNBLFVBQVM7QUFBQyxjQUFNLElBQUlySSxNQUFNLHNEQUFzRHFJLFFBQUFBLEVBQVU7TUFBQztBQUFDLFVBQUdwRyxRQUFRRSxjQUFZLENBQUNpQixRQUFRVSxTQUFRO0FBQUN3QyxnQkFBTUEsU0FBTytCO01BQVEsT0FBSztBQUFDL0IsZ0JBQU1BLFNBQU8rQjtNQUFRO0lBQUM7QUFBQyxRQUFHL0IsT0FBTTtBQUFDLFdBQUsyQixNQUFBQSxJQUFRcEosSUFBRVk7QUFBTyxhQUFPeUksbUJBQWlCLEtBQUtELE1BQUFBLElBQVEsSUFBRTtJQUFDO0VBQUM7QUFBQyxTQUFPO0FBQUM7QUFBRXBGLFNBQVNtQixVQUFVc0UsVUFBUSxTQUFTbEYsU0FBUW5CLFNBQVFzRyxPQUFLO0FBQUUsUUFBTUMsTUFBSSxLQUFLUixTQUFTL0YsU0FBUWdGLGVBQWVzQixLQUFBQSxFQUFPLENBQUEsR0FBR25GLFNBQVE2RCxlQUFlc0IsS0FBQUEsRUFBTyxDQUFBLENBQUU7QUFBRSxNQUFHQyxNQUFJLEdBQUU7QUFBQyxRQUFJQyxhQUFXRixRQUFNO0FBQUUsV0FBTUUsYUFBV3hCLGVBQWUxQyxRQUFPO0FBQUMsV0FBSzBDLGVBQWV3QixVQUFBQSxFQUFZLENBQUEsQ0FBRSxJQUFFLENBQUN4QixlQUFld0IsVUFBQUEsRUFBWSxDQUFBO0FBQUdBO0lBQVk7QUFBQyxRQUFHRCxRQUFNLEdBQUU7QUFBQyxXQUFLdkIsZUFBZXNCLEtBQUFBLEVBQU8sQ0FBQSxDQUFFO0FBQUksV0FBS3RCLGVBQWVzQixLQUFBQSxFQUFPLENBQUEsQ0FBRSxJQUFFLENBQUN0QixlQUFlc0IsS0FBQUEsRUFBTyxDQUFBO0FBQUcsV0FBS1YsTUFBSztBQUFHLGFBQU8sS0FBS1MsUUFBUWxGLFNBQVFuQixTQUFRLENBQUE7SUFBRSxXQUFTLEtBQUs0RixNQUFLLEdBQUc7QUFBQyxhQUFPLEtBQUtTLFFBQVFsRixTQUFRbkIsU0FBUXNHLFFBQU0sQ0FBQTtJQUFFO0VBQUM7QUFBQ0EsV0FBTztBQUFFLE1BQUdBLFNBQU90QixlQUFlMUMsUUFBTztBQUFDLFdBQU87RUFBSSxXQUFTLEtBQUsrQyxRQUFNLEtBQUk7QUFBQyxXQUFPO0VBQUksT0FBSztBQUFDLFdBQU8sS0FBS2dCLFFBQVFsRixTQUFRbkIsU0FBUXNHLEtBQUFBO0VBQU07QUFBQztBQUFFMUYsU0FBU21CLFVBQVUwRSxZQUFVLFNBQVN0RixTQUFRbkIsU0FBUTBHLGdCQUFjO0FBQUUsT0FBS3RGLFVBQVFwQixRQUFRTyxXQUFTLEtBQUdtRyxpQkFBZTFHLFFBQVFPLFdBQVM7QUFBRSxPQUFLbUYsS0FBRztBQUFFLE9BQUtFLE1BQUs7QUFBRyxTQUFPLEtBQUtTLFFBQVFsRixTQUFRbkIsU0FBUSxDQUFBO0FBQUU7QUFBRVksU0FBU21CLFVBQVV0RCxVQUFRLFNBQVNrSSxVQUFRO0FBQUUsTUFBR0EsWUFBVSxLQUFLN0osT0FBSyxRQUFPO0FBQUMsV0FBTyxJQUFJUSxLQUFLLEtBQUsrSCxNQUFLLEtBQUszRCxPQUFNLEtBQUtELEtBQUksS0FBS0QsTUFBSyxLQUFLRCxRQUFPLEtBQUtILFFBQU8sS0FBS3NFLEVBQUU7RUFBQyxPQUFLO0FBQUMsUUFBRyxPQUFPLEtBQUs1SSxPQUFLLFVBQVM7QUFBQyxhQUFPLElBQUlRLEtBQUtBLEtBQUtDLElBQUksS0FBSzhILE1BQUssS0FBSzNELE9BQU0sS0FBS0QsS0FBSSxLQUFLRCxNQUFLLEtBQUtELFNBQU8sS0FBS3pFLElBQUcsS0FBS3NFLFFBQU8sS0FBS3NFLEVBQUUsQ0FBQTtJQUFFLE9BQUs7QUFBQyxhQUFPbkosT0FBTyxLQUFLOEksTUFBSyxLQUFLM0QsUUFBTSxHQUFFLEtBQUtELEtBQUksS0FBS0QsTUFBSyxLQUFLRCxRQUFPLEtBQUtILFFBQU8sS0FBS3RFLEVBQUU7SUFBQztFQUFDO0FBQUM7QUFBRThELFNBQVNtQixVQUFVcEUsVUFBUSxXQUFBO0FBQVcsU0FBTyxLQUFLYyxRQUFPLEVBQUdkLFFBQU87QUFBRTtBQUFFLFNBQVNpSixZQUFXQyxHQUFDO0FBQUUsU0FBTzlDLE9BQU9oQyxVQUFVK0UsU0FBUzdDLEtBQUs0QyxDQUFBQSxNQUFLLHVCQUFxQixlQUFhLE9BQU9BLEtBQUdBLGFBQWFFO0FBQVE7QUFBMUhILE9BQUFBLGFBQUFBO0FBQTJILFNBQVNJLFdBQVdDLE9BQUs7QUFBRSxNQUFHLE9BQU9DLFNBQU8sZUFBYSxPQUFPQSxLQUFLRixlQUFhLGFBQVk7QUFBQ0UsU0FBS0YsV0FBV0MsS0FBQUE7RUFBTSxXQUFTQSxTQUFPLE9BQU9BLE1BQU12RyxVQUFRLGFBQVk7QUFBQ3VHLFVBQU12RyxNQUFLO0VBQUU7QUFBQztBQUE1S3NHO0FBQTZLLElBQU1HLFdBQVMsS0FBRztBQUFJLElBQU1DLGdCQUFjLENBQUE7QUFBRyxTQUFTQyxLQUFLbEcsU0FBUW1HLGNBQWFDLGNBQVk7QUFBRSxNQUFHLEVBQUUsZ0JBQWdCRixPQUFNO0FBQUMsV0FBTyxJQUFJQSxLQUFLbEcsU0FBUW1HLGNBQWFDLFlBQUFBO0VBQWE7QUFBQyxNQUFJdkgsU0FBUXdIO0FBQUssTUFBR1osWUFBV1UsWUFBQUEsR0FBYztBQUFDRSxXQUFLRjtFQUFZLFdBQVMsT0FBT0EsaUJBQWUsVUFBUztBQUFDdEgsY0FBUXNIO0VBQVksV0FBU0EsaUJBQWUsUUFBTztBQUFDLFVBQU0sSUFBSXZKLE1BQU0sOEZBQUE7RUFBK0Y7QUFBQyxNQUFHNkksWUFBV1csWUFBQUEsR0FBYztBQUFDQyxXQUFLRDtFQUFZLFdBQVMsT0FBT0EsaUJBQWUsVUFBUztBQUFDdkgsY0FBUXVIO0VBQVksV0FBU0EsaUJBQWUsUUFBTztBQUFDLFVBQU0sSUFBSXhKLE1BQU0sMkZBQUE7RUFBNEY7QUFBQyxPQUFLa0MsT0FBS0QsVUFBUUEsUUFBUUMsT0FBSztBQUFPLE9BQUtELFVBQVFELFlBQVlDLE9BQUFBO0FBQVMsT0FBS3lILFVBQVE7SUFBQ0MsTUFBSztJQUFNQyxVQUFTO0lBQU1DLGFBQVk7SUFBT0MsWUFBVztJQUFPQyxNQUFLO0lBQU9DLGdCQUFlO0lBQU8zSCxTQUFRSixVQUFRQSxRQUFRSSxVQUFRO0lBQU9ELFFBQU9ILFVBQVFBLFFBQVFHLFNBQU87SUFBTWdCLFNBQVE7RUFBTTtBQUFFLE1BQUdBLFlBQVVBLG1CQUFtQjdELFFBQU0sT0FBTzZELFlBQVUsWUFBVUEsUUFBUWUsUUFBUSxHQUFBLElBQUssSUFBRztBQUFDLFNBQUt1RixRQUFRSyxPQUFLLElBQUlsSCxTQUFTTyxTQUFRLEtBQUtuQixRQUFRYSxZQUFVLEtBQUtiLFFBQVFTLFNBQVM7RUFBQyxPQUFLO0FBQUMsU0FBS2dILFFBQVF0RyxVQUFRLElBQUlELFlBQVlDLFNBQVEsS0FBS25CLFFBQVFhLFFBQVE7RUFBQztBQUFDLE1BQUcsS0FBS1osTUFBSztBQUFDLFVBQU0rSCxXQUFTWixjQUFjYSxLQUFLQyxDQUFBQSxNQUFHQSxFQUFFakksU0FBTyxLQUFLQSxJQUFJO0FBQUUsUUFBRytILFVBQVM7QUFBQyxZQUFNLElBQUlqSyxNQUFNLDhDQUE0QyxLQUFLa0MsT0FBSyw0QkFBQTtJQUE2QixPQUFLO0FBQUNtSCxvQkFBY2UsS0FBSyxJQUFJO0lBQUM7RUFBQztBQUFDLE1BQUdYLFNBQU8sUUFBTztBQUFDLFNBQUtZLEtBQUdaO0FBQUssU0FBS2EsU0FBUTtFQUFFO0FBQUMsU0FBTztBQUFJO0FBQXY1Q2hCO0FBQXc1Q0EsS0FBS3RGLFVBQVV1RyxVQUFRLFNBQVNDLE1BQUk7QUFBRSxRQUFNQyxPQUFLLEtBQUtDLE1BQU1GLElBQUFBO0FBQU0sU0FBT0MsT0FBS0EsS0FBSy9KLFFBQU8sSUFBRztBQUFJO0FBQUU0SSxLQUFLdEYsVUFBVTJHLFdBQVMsU0FBU0MsR0FBRUMsVUFBUTtBQUFFLE1BQUdELElBQUUsS0FBS2xCLFFBQVFySCxTQUFRO0FBQUN1SSxRQUFFLEtBQUtsQixRQUFRckg7RUFBTztBQUFDLFFBQU15SSxjQUFZLENBQUE7QUFBRyxNQUFJTixPQUFLSyxZQUFVLEtBQUtuQixRQUFRSTtBQUFXLFNBQU1jLFFBQU1KLE9BQUssS0FBS0QsUUFBUUMsSUFBQUEsSUFBTztBQUFDTSxnQkFBWVYsS0FBS0ksSUFBQUE7RUFBSztBQUFDLFNBQU9NO0FBQVc7QUFBRXhCLEtBQUt0RixVQUFVK0csYUFBVyxXQUFBO0FBQVcsU0FBTyxLQUFLckIsUUFBUXRHLFVBQVEsS0FBS3NHLFFBQVF0RyxRQUFRQSxVQUFRO0FBQU07QUFBRWtHLEtBQUt0RixVQUFVZ0gsWUFBVSxXQUFBO0FBQVcsUUFBTUMsY0FBWSxLQUFLVixRQUFRLEtBQUtiLFFBQVFJLFVBQVU7QUFBRSxRQUFNa0IsWUFBVSxDQUFDLEtBQUt0QixRQUFRdEg7QUFBTyxRQUFNOEksY0FBWSxLQUFLYixPQUFLO0FBQU8sUUFBTWMsY0FBWSxDQUFDLEtBQUt6QixRQUFRQztBQUFLLFNBQU9xQixhQUFXRSxlQUFhQyxlQUFhRixnQkFBYztBQUFJO0FBQUUzQixLQUFLdEYsVUFBVW9ILFlBQVUsV0FBQTtBQUFXLFNBQU8sS0FBSzFCLFFBQVFDO0FBQUk7QUFBRUwsS0FBS3RGLFVBQVVxSCxTQUFPLFdBQUE7QUFBVyxTQUFPLEtBQUszQixRQUFRRTtBQUFRO0FBQUVOLEtBQUt0RixVQUFVOEYsYUFBVyxXQUFBO0FBQVcsU0FBTyxLQUFLSixRQUFRSSxhQUFXLEtBQUtKLFFBQVFJLFdBQVdwSixRQUFPLElBQUc7QUFBSTtBQUFFNEksS0FBS3RGLFVBQVU2RixjQUFZLFdBQUE7QUFBVyxTQUFPLEtBQUtILFFBQVFHLGNBQVksS0FBS0gsUUFBUUcsWUFBWW5KLFFBQU8sSUFBRztBQUFJO0FBQUU0SSxLQUFLdEYsVUFBVXNILFdBQVMsU0FBU2QsTUFBSTtBQUFFQSxTQUFLQSxRQUFNLG9CQUFJakw7QUFBSyxRQUFNa0wsT0FBSyxLQUFLQyxNQUFNRixJQUFBQTtBQUFNLE1BQUdDLE1BQUs7QUFBQyxXQUFPQSxLQUFLN0ssUUFBTyxJQUFHNEssS0FBSzVLLFFBQU87RUFBRSxPQUFLO0FBQUMsV0FBTztFQUFJO0FBQUM7QUFBRTBKLEtBQUt0RixVQUFVdUgsT0FBSyxXQUFBO0FBQVcsT0FBSzdCLFFBQVFDLE9BQUs7QUFBSyxNQUFHLEtBQUtELFFBQVFNLGdCQUFlO0FBQUN3QixpQkFBYSxLQUFLOUIsUUFBUU0sY0FBYztFQUFDO0FBQUMsUUFBTXlCLFdBQVNwQyxjQUFjbEYsUUFBUSxJQUFJO0FBQUUsTUFBR3NILFlBQVUsR0FBRTtBQUFDcEMsa0JBQWNxQyxPQUFPRCxVQUFTLENBQUE7RUFBRTtBQUFDO0FBQUVuQyxLQUFLdEYsVUFBVTJILFFBQU0sV0FBQTtBQUFXLE9BQUtqQyxRQUFRdEgsU0FBTztBQUFLLFNBQU0sQ0FBQyxLQUFLc0gsUUFBUUM7QUFBSTtBQUFFTCxLQUFLdEYsVUFBVTRILFNBQU8sV0FBQTtBQUFXLE9BQUtsQyxRQUFRdEgsU0FBTztBQUFNLFNBQU0sQ0FBQyxLQUFLc0gsUUFBUUM7QUFBSTtBQUFFTCxLQUFLdEYsVUFBVXNHLFdBQVMsU0FBU2IsTUFBSTtBQUFFLE1BQUdBLFFBQU0sS0FBS1ksSUFBRztBQUFDLFVBQU0sSUFBSXJLLE1BQU0sbUZBQUE7RUFBb0YsV0FBU3lKLE1BQUs7QUFBQyxTQUFLWSxLQUFHWjtFQUFJO0FBQUMsTUFBSW9DLFNBQU8sS0FBS1AsU0FBUTtBQUFHLFFBQU1yRCxTQUFPLEtBQUtzQyxRQUFRLEtBQUtiLFFBQVFJLFVBQVU7QUFBRSxNQUFHK0IsV0FBUyxRQUFNQSxXQUFTekQsVUFBVzlHLE1BQU11SyxNQUFBQSxLQUFTNUQsV0FBUyxLQUFLLFFBQU87QUFBSyxNQUFHNEQsU0FBT3pDLFVBQVM7QUFBQ3lDLGFBQU96QztFQUFRO0FBQUMsT0FBS00sUUFBUU0saUJBQWU4QixXQUFXLE1BQUksS0FBS0MsY0FBYzlELE1BQUFBLEdBQVE0RCxNQUFBQTtBQUFRLE1BQUcsS0FBS25DLFFBQVFNLGtCQUFnQixLQUFLL0gsUUFBUVUsT0FBTTtBQUFDc0csZUFBVyxLQUFLUyxRQUFRTSxjQUFjO0VBQUM7QUFBQyxTQUFPO0FBQUk7QUFBRVYsS0FBS3RGLFVBQVVnSSxXQUFTLGVBQWVDLGdCQUFjO0FBQUUsT0FBS3ZDLFFBQVFFLFdBQVM7QUFBSyxPQUFLRixRQUFRSSxhQUFXLElBQUlqSCxTQUFTLFFBQU8sS0FBS1osUUFBUWEsWUFBVSxLQUFLYixRQUFRUyxTQUFTO0FBQUUsTUFBRyxLQUFLVCxRQUFRTSxPQUFNO0FBQUMsUUFBRztBQUFDLFlBQU0sS0FBSzhILEdBQUcsTUFBSyxLQUFLcEksUUFBUWlLLE9BQU87SUFBQyxTQUFPQyxJQUFHO0FBQUMsVUFBR3RELFlBQVcsS0FBSzVHLFFBQVFNLEtBQUssR0FBRTtBQUFDLGFBQUtOLFFBQVFNLE1BQU00SixJQUFHLElBQUk7TUFBQztJQUFDO0VBQUMsT0FBSztBQUFDLFVBQU0sS0FBSzlCLEdBQUcsTUFBSyxLQUFLcEksUUFBUWlLLE9BQU87RUFBQztBQUFDLE9BQUt4QyxRQUFRRyxjQUFZLElBQUloSCxTQUFTb0osZ0JBQWUsS0FBS2hLLFFBQVFhLFlBQVUsS0FBS2IsUUFBUVMsU0FBUztBQUFFLE9BQUtnSCxRQUFRRSxXQUFTO0FBQUs7QUFBRU4sS0FBS3RGLFVBQVVvSSxVQUFRLGlCQUFBO0FBQWlCLFFBQU0sS0FBS0osU0FBUTtBQUFFO0FBQUUxQyxLQUFLdEYsVUFBVStILGdCQUFjLFNBQVM5RCxRQUFNO0FBQUUsUUFBTW9FLE1BQUksb0JBQUk5TSxRQUFLK00sWUFBVSxDQUFDLEtBQUs1QyxRQUFRdEgsVUFBUWlLLElBQUl6TSxRQUFPLEtBQUlxSSxRQUFPc0UsWUFBVSxLQUFLN0MsUUFBUUUsWUFBVSxLQUFLM0gsUUFBUXVLO0FBQVEsTUFBR0YsYUFBVyxDQUFDQyxXQUFVO0FBQUMsU0FBSzdDLFFBQVFySDtBQUFVLFNBQUsySixTQUFRO0VBQUUsT0FBSztBQUFDLFFBQUdNLGFBQVdDLGFBQVcxRCxZQUFXLEtBQUs1RyxRQUFRdUssT0FBTyxHQUFFO0FBQUNWLGlCQUFXLE1BQUksS0FBSzdKLFFBQVF1SyxRQUFRLElBQUksR0FBRSxDQUFBO0lBQUU7RUFBQztBQUFDLE9BQUtsQyxTQUFRO0FBQUU7QUFBRWhCLEtBQUt0RixVQUFVMEcsUUFBTSxTQUFTRixNQUFJO0FBQUUsTUFBSTdCLGlCQUFlNkIsUUFBTSxLQUFLZCxRQUFRSSxhQUFXLE9BQUs7QUFBTSxNQUFJMkMsOEJBQTRCO0FBQU0sTUFBRyxDQUFDakMsUUFBTSxLQUFLdkksUUFBUVcsV0FBUyxLQUFLWCxRQUFRTyxVQUFTO0FBQUMsS0FBQ2dJLE1BQUs3QixjQUFBQSxJQUFnQixLQUFLK0Qsc0JBQXNCbEMsTUFBSzdCLGNBQUFBO0FBQWdCOEQsa0NBQTRCLENBQUNqQyxPQUFLLE9BQUs7RUFBSztBQUFDQSxTQUFLLElBQUkzSCxTQUFTMkgsTUFBSyxLQUFLdkksUUFBUWEsWUFBVSxLQUFLYixRQUFRUyxTQUFTO0FBQUUsTUFBRyxLQUFLVCxRQUFRVyxXQUFTNEgsUUFBTUEsS0FBSzVLLFFBQU8sSUFBRyxLQUFLcUMsUUFBUVcsUUFBUWhELFFBQU8sR0FBRztBQUFDNEssV0FBSyxLQUFLdkksUUFBUVc7RUFBTztBQUFDLE1BQUkySCxVQUFRLEtBQUtiLFFBQVFLLFFBQU0sSUFBSWxILFNBQVMySCxNQUFLLEtBQUt2SSxRQUFRYSxZQUFVLEtBQUtiLFFBQVFTLFNBQVM7QUFBRSxNQUFHLENBQUMrSiwrQkFBNkJsQyxZQUFVLEtBQUtiLFFBQVFLLE1BQUs7QUFBQ1EsY0FBUUEsUUFBUTdCLFVBQVUsS0FBS2dCLFFBQVF0RyxTQUFRLEtBQUtuQixTQUFRMEcsY0FBQUE7RUFBZTtBQUFDLE1BQUcsS0FBS2UsUUFBUUssUUFBTSxLQUFLTCxRQUFRSyxLQUFLbkssUUFBTyxLQUFJNEssS0FBSzVLLFFBQU8sR0FBRztBQUFDLFdBQU87RUFBSSxXQUFTMkssWUFBVSxRQUFNLEtBQUtiLFFBQVFySCxXQUFTLEtBQUcsS0FBS3FILFFBQVFDLFFBQU0sS0FBSzFILFFBQVFjLFVBQVF3SCxRQUFRM0ssUUFBTyxLQUFJLEtBQUtxQyxRQUFRYyxPQUFPbkQsUUFBTyxHQUFHO0FBQUMsV0FBTztFQUFJLE9BQUs7QUFBQyxXQUFPMks7RUFBTztBQUFDO0FBQUVqQixLQUFLdEYsVUFBVTBJLHdCQUFzQixTQUFTbEMsTUFBSzdCLGdCQUFjO0FBQUUsUUFBTTBELE1BQUksSUFBSXhKLFNBQVN1RixRQUFVLEtBQUtuRyxRQUFRYSxZQUFVLEtBQUtiLFFBQVFTLFNBQVM7QUFBRSxNQUFHLEtBQUtULFFBQVFXLFFBQVFoRCxRQUFPLEtBQUl5TSxJQUFJek0sUUFBTyxHQUFHO0FBQUM0SyxXQUFLLEtBQUt2SSxRQUFRVztBQUFRLFFBQUkrSix1QkFBcUJuQyxLQUFLNUssUUFBTyxJQUFHLEtBQUtxQyxRQUFRTyxXQUFTO0FBQUksV0FBTW1LLHdCQUFzQk4sSUFBSXpNLFFBQU8sR0FBRztBQUFDNEssYUFBSyxJQUFJM0gsU0FBUzJILE1BQUssS0FBS3ZJLFFBQVFhLFlBQVUsS0FBS2IsUUFBUVMsU0FBUyxFQUFFZ0csVUFBVSxLQUFLZ0IsUUFBUXRHLFNBQVEsS0FBS25CLFNBQVEsSUFBQTtBQUFNMEssNkJBQXFCbkMsS0FBSzVLLFFBQU8sSUFBRyxLQUFLcUMsUUFBUU8sV0FBUztJQUFHO0FBQUNtRyxxQkFBZTtFQUFJO0FBQUMsU0FBTTtJQUFDNkI7SUFBSzdCOztBQUFlO0FBQUVXLEtBQUtBLE9BQUtBO0FBQUtBLEtBQUtELGdCQUFjQTs7O0FoRE9sanZCLFNBQVN1RCxZQUE4QkMsU0FBMkI7QUFDckUsU0FBTyxDQUFDQyxXQUFBQTtBQUNKLFFBQUlDLFFBQVFDLFlBQVlDLGdCQUFnQkwsWUFBWUUsTUFBQUEsR0FBUztBQUN6RCxZQUFNLElBQUlJLE1BQU1DLGFBQWFDLHVCQUF1QjtJQUN4RDtBQUVBLFVBQU0sRUFBRUMsT0FBT0MsT0FBT0MsTUFBSyxJQUFLQywwQkFBMEJYLE9BQUFBO0FBQzFELFFBQUksQ0FBQ1EsTUFBTyxPQUFNLElBQUlILE1BQU1LLEtBQUFBO0FBQzVCUixZQUFRVSxlQUFlUixnQkFBZ0JMLFlBQVlVLE9BQU9SLE1BQUFBO0FBRTFELFdBQU9ZLFlBQUFBLEVBQWFaLE1BQUFBO0VBQ3hCO0FBQ0o7QUFaZ0JGO0FBQUFBLFFBQUFBLGFBQUFBLFlBQUFBO0FDSlQsU0FBU2UsU0FBQUE7QUFDWixTQUFPLENBQUNiLFdBQUFBO0FBQ0pDLFlBQVFVLGVBQWVSLGdCQUFnQlcsY0FBYyxNQUFNZCxNQUFBQTtBQUMzRCxXQUFPQTtFQUNYO0FBQ0o7QUFMZ0JhO0FBQUFBLFFBQUFBLFFBQUFBLFFBQUFBO0FDR1QsU0FBU0UsT0FBb0JDLEtBQXVCO0FBQ3ZELFNBQWdELENBQUNoQixRQUFnQmlCLGFBQXFCQyxlQUFBQTtBQUNsRixRQUFJLENBQUNDLE1BQU1ILEdBQUFBLEtBQVEsQ0FBQ0ksdUJBQXVCSixHQUFBQSxFQUFLVCxPQUFPO0FBQ25ELFlBQU0sSUFBSUgsTUFBTUMsYUFBYWdCLDhCQUE4QjtJQUMvRDtBQUVBLFVBQU1DLFFBQVFOLE9BQU9mLFFBQVFzQixZQUE0QixlQUFldkIsUUFBUWlCLFdBQUFBO0FBQ2hGLFFBQUksQ0FBQ0ssT0FBTztBQUNSLFlBQU0sSUFBSWxCLE1BQU1DLGFBQWFtQixzQkFBc0I7SUFDdkQ7QUFFQUMsSUFBQUEsUUFBT0gsS0FBQUEsRUFBT3RCLFFBQVFpQixhQUFhQyxVQUFBQTtFQUN2QztBQUNKO0FBYmdCSDtBQUFBQSxRQUFBQSxRQUFBQSxRQUFBQTtBQ0NULFNBQVNXLFdBQThCM0IsU0FBMkI7QUFDckUsU0FBTyxDQUFDQyxXQUFBQTtBQUNKLFFBQUlDLFFBQVFDLFlBQVlDLGdCQUFnQnVCLFlBQVkxQixNQUFBQSxHQUFTO0FBQ3pELFlBQU0sSUFBSUksTUFBTUMsYUFBYUMsdUJBQXVCO0lBQ3hEO0FBRUEsVUFBTSxFQUFFQyxPQUFPQyxPQUFPQyxNQUFLLElBQUtrQiwyQkFBMkI1QixPQUFBQTtBQUMzRCxRQUFJLENBQUNRLE1BQU8sT0FBTSxJQUFJSCxNQUFNSyxLQUFBQTtBQUM1QlIsWUFBUVUsZUFBZVIsZ0JBQWdCdUIsWUFBWWxCLE9BQU9SLE1BQUFBO0FBRTFELFdBQU9ZLGFBQUFBLEVBQWFaLE1BQUFBO0VBQ3hCO0FBQ0o7QUFaZ0IwQjtBQUFBQSxRQUFBQSxZQUFBQSxZQUFBQTtBQ0FULFNBQVNFLFFBQTBCN0IsU0FBdUI7QUFDN0QsU0FBTyxDQUFDQyxXQUFBQTtBQUNKLFFBQUlDLFFBQVFDLFlBQVlDLGdCQUFnQnlCLFFBQVE1QixNQUFBQSxHQUFTO0FBQ3JELFlBQU0sSUFBSUksTUFBTUMsYUFBYUMsdUJBQXVCO0lBQ3hEO0FBRUEsVUFBTSxFQUFFQyxPQUFPQyxPQUFPQyxNQUFLLElBQUtvQixzQkFBc0I5QixPQUFBQTtBQUN0RCxRQUFJLENBQUNRLE1BQU8sT0FBTSxJQUFJSCxNQUFNSyxLQUFBQTtBQUM1QlIsWUFBUVUsZUFBZVIsZ0JBQWdCeUIsUUFBUXBCLE9BQU9SLE1BQUFBO0FBRXRELFdBQU9ZLGFBQUFBLEVBQWFaLE1BQUFBO0VBQ3hCO0FBQ0o7QUFaZ0I0QjtBQUFBQSxRQUFBQSxTQUFBQSxRQUFBQTtBQ0xULFNBQVNFLFdBQUFBO0FBQ1osU0FBZ0QsQ0FBQzlCLFFBQWdCaUIsYUFBcUJDLGVBQUFBO0FBQ2xGLFdBQU9hLFNBQUFBLEVBQVcvQixRQUFRaUIsYUFBYUMsVUFBQUE7RUFDM0M7QUFDSjtBQUpnQlk7QUFBQUEsUUFBQUEsVUFBQUEsVUFBQUE7QUNBVCxTQUFTRSxZQUFvRGhCLEtBQVFSLE9BQVE7QUFDaEYsUUFBTXlCLG1CQUFxQyxnQkFBQUMsUUFBQSxDQUFDbEMsUUFBZ0JtQyxTQUFrQkMsZUFBQUE7QUFDMUUsUUFBSUEsWUFBWTtBQUNabkMsY0FBUVUsZUFBZUssS0FBS1IsT0FBTzRCLFdBQVc1QixLQUFLO0FBQ25ELGFBQU80QjtJQUNYO0FBQ0FuQyxZQUFRVSxlQUFlSyxLQUFLUixPQUFPUixNQUFBQTtBQUNuQyxXQUFPQTtFQUNYLEdBUDJDLGtCQUFBO0FBUTNDaUMsbUJBQWlCSSxNQUFNckI7QUFDdkIsU0FBT2lCO0FBQ1g7QUFYZ0JEO0FBQUFBLFFBQUFBLGFBQUFBLGFBQUFBO0FDRVQsU0FBU00sU0FBNEJDLFlBQXFCO0FBQzdELFNBQU8sQ0FBQ3ZDLFdBQUFBO0FBQ0osUUFBSUMsUUFBUUMsWUFBWUMsZ0JBQWdCbUMsT0FBT3RDLE1BQUFBLEdBQVM7QUFDcEQsWUFBTSxJQUFJSSxNQUFNQyxhQUFhQyx1QkFBdUI7SUFDeEQ7QUFFQSxVQUFNa0MsYUFBYUQsV0FBV0UsT0FBTyxDQUFDQyxXQUFXQyxVQUFVSixXQUFXSyxRQUFRRixTQUFBQSxNQUFlQyxLQUFBQTtBQUM3RixRQUFJSCxXQUFXSyxRQUFRO0FBQ25CLFlBQU0sSUFBSXpDLE1BQU1DLGFBQWF5Qyx5QkFBeUI7SUFDMUQ7QUFFQTdDLFlBQVFVLGVBQWVSLGdCQUFnQm1DLE9BQU9DLFlBQVl2QyxNQUFBQTtBQUUxRCxXQUFPQTtFQUNYO0FBQ0o7QUFmZ0JzQztBQUFBQSxRQUFBQSxPQUFBQSxPQUFBQTtBQ0dULFNBQVNTLGNBQWNDLFNBQStDO0FBQ3pFLFNBQTBDLENBQUNoRCxRQUFnQmlELFFBQWlCYixlQUFBQTtBQUN4RSxVQUFNYyxtQkFBMkQsQ0FBQTtBQUNqRSxlQUFXVCxVQUFVTyxTQUFTO0FBQzFCLFlBQU0sRUFBRXpDLE9BQU9DLE9BQU9DLE1BQUssSUFBSzBDLG9CQUFvQlYsTUFBQUE7QUFDcEQsVUFBSSxDQUFDbEMsTUFBTyxPQUFNLElBQUlILE1BQU1LLEtBQUFBO0FBQzVCeUMsdUJBQWlCRSxLQUFLNUMsS0FBQUE7SUFDMUI7QUFFQSxRQUFJLENBQUNXLE1BQU1pQixVQUFBQSxLQUFlLENBQUNqQixNQUFNaUIsV0FBVzVCLEtBQUssR0FBRztBQUNoRCxVQUFJd0MsUUFBUUgsV0FBVyxHQUFHO0FBQ3RCLGNBQU0sSUFBSXpDLE1BQU1DLGFBQWFnRCx3QkFBd0I7TUFDekQ7QUFFQSxZQUFNQyxnQkFDRnJELFFBQVFzQixZQUFvQ3BCLGdCQUFnQm9ELGNBQWN2RCxPQUFPLGFBQWFpRCxNQUFBQSxLQUFXLENBQUE7QUFDN0csVUFBSSxDQUFDOUIsTUFBTW1DLGNBQWNFLEtBQUssQ0FBQ2YsV0FBV08sUUFBUVMsU0FBU2hCLE1BQUFBLENBQUFBLENBQUFBLEdBQVc7QUFDbEUsY0FBTSxJQUFJckMsTUFBTUMsYUFBYXFELDRCQUE0QjtNQUM3RDtBQUNBekQsY0FBUVUsZUFBZVIsZ0JBQWdCb0QsY0FBYztXQUFJTDtXQUFxQkk7U0FBZ0J0RCxPQUFPLGFBQWFpRCxNQUFBQTtBQUNsSCxhQUFPYjtJQUNYO0FBRUEsUUFBSVksUUFBUUgsV0FBVyxHQUFHO0FBQ3RCLFlBQU0sSUFBSXpDLE1BQU1DLGFBQWFnRCx3QkFBd0I7SUFDekQ7QUFFQSxVQUFNTSxlQUFlMUQsUUFBUXNCLFlBQW9DcEIsZ0JBQWdCb0QsY0FBY3ZELE1BQUFBLEtBQVcsQ0FBQTtBQUMxRyxRQUFJLENBQUNtQixNQUFNd0MsYUFBYUgsS0FBSyxDQUFDZixXQUFXTyxRQUFRUyxTQUFTaEIsTUFBQUEsQ0FBQUEsQ0FBQUEsR0FBVztBQUNqRSxZQUFNLElBQUlyQyxNQUFNQyxhQUFhcUQsNEJBQTRCO0lBQzdEO0FBQ0F6RCxZQUFRVSxlQUFlUixnQkFBZ0JvRCxjQUFjO1NBQUlMO1NBQXFCUztPQUFlM0QsTUFBQUE7QUFDN0YsV0FBT0E7RUFDWDtBQUNKO0FBbENnQitDO0FBQUFBLFFBQUFBLFlBQUFBLFlBQUFBOzs7Ozs7Ozs7Ozs7OztBRVFULElBQU1hLGFBQU4sTUFBTUE7U0FBQUE7OztTQUFBQTs7O0VBQ3dDQztFQUNGQztFQUNQQztFQUNNQztFQUNQQztFQUNRQztFQUNOQztFQUNtQkM7RUFFNUQsTUFBYUMsS0FBS0MsY0FBNEI7QUFDMUMsVUFBTUEsYUFBYUMsY0FBYyxPQUFPQyxTQUFBQTtBQUNwQyxZQUFNQyxZQUFZQyxLQUFLQyxJQUFHO0FBRTFCLFlBQU1DLFNBQVNKLEtBQUtoRTtBQUNwQm9FLGFBQU9DLFdBQVdELE9BQU9FLFVBQVVDLElBQWlDSCxPQUFPSSxTQUFTQyxRQUFRO0FBQzVGTCxhQUFPTSxZQUFZQyxRQUNmLENBQUNDLGVBQWdCQSxXQUFXUCxXQUFXRCxPQUFPRSxVQUFVQyxJQUFpQ0ssV0FBV0osU0FBU0MsUUFBUSxDQUFBO0FBRXpIO1dBQUlMLE9BQU9JLFNBQVNLO1dBQXNCVCxPQUFPSSxTQUFTTTtRQUFtQkgsUUFBUSxDQUFDLENBQUM3RCxLQUFBQSxNQUNuRnNELE9BQU9FLFVBQVVDLElBQVN6RCxLQUFBQSxDQUFBQTtBQUk5QixXQUFLNkMsY0FBY29CLElBQUksa0JBQWtCWCxPQUFPSSxTQUFTQyxTQUFTTyxJQUFJLG9CQUFvQmQsS0FBS0MsSUFBRyxJQUFLRixTQUFBQSxLQUFjO0FBQ3JILFlBQU0sS0FBS2dCLG1CQUFtQmIsUUFBUSxjQUFBO0lBQzFDLENBQUE7QUFFQSxVQUFNLEtBQUtjLG9CQUFvQnBCLGNBQWMsZ0JBQUE7QUFHN0NBLGlCQUFhcUIsU0FBUyxDQUFDbkIsU0FBQUE7QUFDbkIsWUFBTUksU0FBU0osS0FBS2hFO0FBQ3BCb0UsYUFBT00sWUFBWUMsUUFBUSxDQUFDQyxlQUFBQTtBQUN4QixjQUFNUSxPQUFPbEIsS0FBS0MsSUFBRztBQUNyQixhQUFLa0IsZUFBZVQsVUFBQUE7QUFDcEIsYUFBS1Usa0JBQWtCVixVQUFBQTtBQUN2QixhQUFLakIsY0FBY29CLElBQ2Ysc0JBQXNCSCxXQUFXSixTQUFTQyxTQUFTTyxJQUFJLDZDQUE2Q2QsS0FBS0MsSUFBRyxJQUFLaUIsSUFBQUEsS0FBUztNQUVsSSxDQUFBO0lBQ0osQ0FBQTtFQUNKO0VBRUEsTUFBYUcsU0FBU3pCLGNBQTRCO0FBQzlDLFFBQUksS0FBS0YscUJBQXFCO0FBQzFCLFlBQU0sS0FBS3NCLG9CQUFvQnBCLGNBQWMsaUJBQUE7QUFDN0MsWUFBTSxLQUFLb0Isb0JBQW9CcEIsY0FBYyxtQkFBQTtJQUNqRDtBQUVBLFVBQU1BLGFBQWFDLGNBQWMsT0FBT0MsU0FBQUE7QUFDcEMsWUFBTUksU0FBU0osS0FBS2hFO0FBQ3BCb0UsYUFBT00sWUFBWUMsUUFBUSxDQUFDQyxlQUFBQTtBQUN4QixjQUFNWSxlQUFlWixXQUFXYSxNQUFNbkIsVUFBVUMsSUFBa0JtQixhQUFBQTtBQUdsRUYscUJBQWFHLFdBQVdoQixRQUFRLENBQUNpQixVQUFVQSxNQUFNQyxRQUFPLENBQUE7QUFDeERMLHFCQUFhTSxVQUFVbkIsUUFBUSxDQUFDaUIsVUFBVUEsTUFBTUMsUUFBTyxDQUFBO0FBQ3ZETCxxQkFBYU8sU0FBU3BCLFFBQVEsQ0FBQ2lCLFVBQVVBLE1BQU1DLFFBQU8sQ0FBQTtBQUN0REwscUJBQWFRLE1BQU1yQixRQUFRLENBQUNzQixTQUFTQSxLQUFLQyxLQUFJLENBQUE7QUFHOUN0QixtQkFBV3VCLGNBQWN4QixRQUFRLENBQUN5QixZQUFZQSxRQUFRUCxRQUFPLENBQUE7QUFDN0RqQixtQkFBV3lCLFlBQVkxQixRQUFRLENBQUN5QixZQUFZQSxRQUFRUCxRQUFPLENBQUE7TUFDL0QsQ0FBQTtJQUNKLENBQUE7QUFhQSxRQUFJLEtBQUtqQyxxQkFBcUI7QUFDMUIsWUFBTSxLQUFLc0Isb0JBQW9CcEIsY0FBYyxlQUFBO0lBQ2pEO0VBQ0o7RUFFUXdCLGtCQUFrQlYsWUFBd0I7QUFDOUMsVUFBTVIsU0FBU1EsV0FBV2E7QUFDMUJiLGVBQVdKLFNBQVM4QixPQUFPM0IsUUFBUSxDQUFDNEIsVUFBQUE7QUFDaEMsWUFBTUMsU0FBUztXQUFJLEtBQUtqRDtXQUFpQmEsT0FBT0ksU0FBU2dDO1dBQVc1QixXQUFXSixTQUFTZ0M7V0FBV0QsTUFBTUM7O0FBQ3pHLFlBQU1DLGVBQWU7V0FDZCxLQUFLakQ7V0FDTFksT0FBT0ksU0FBU2lDO1dBQ2hCN0IsV0FBV0osU0FBU2lDO1dBQ3BCRixNQUFNRTs7QUFFYixZQUFNQyxRQUFRO1dBQUksS0FBS2pEO1dBQWdCVyxPQUFPSSxTQUFTa0M7V0FBVTlCLFdBQVdKLFNBQVNrQztXQUFVSCxNQUFNRzs7QUFDckcsWUFBTUMscUJBQXFCLEtBQUtDLGdCQUFnQjtXQUN6QyxLQUFLbEQ7V0FDTFUsT0FBT0ksU0FBU3FDO1dBQ2hCakMsV0FBV0osU0FBU3FDO1dBQ3BCTixNQUFNTTtPQUNaO0FBRUQsWUFBTVQsVUFBVSxLQUFLL0MsYUFBYXlELGNBQWNOLFFBQVFDLGNBQWNDLE9BQU9DLG9CQUFvQi9CLFlBQVkyQixLQUFBQTtBQUM3RzNCLGlCQUFXdUIsY0FBY3ZELEtBQUt3RCxPQUFBQTtJQUNsQyxDQUFBO0FBRUF4QixlQUFXSixTQUFTdUMsS0FBS3BDLFFBQVEsT0FBT3FDLFFBQUFBO0FBQ3BDLFlBQU1SLFNBQVM7V0FBSSxLQUFLakQ7V0FBaUJhLE9BQU9JLFNBQVNnQztXQUFXNUIsV0FBV0osU0FBU2dDO1dBQVdRLElBQUlSOztBQUN2RyxZQUFNQyxlQUFlO1dBQ2QsS0FBS2pEO1dBQ0xZLE9BQU9JLFNBQVNpQztXQUNoQjdCLFdBQVdKLFNBQVNpQztXQUNwQk8sSUFBSVA7O0FBRVgsWUFBTUMsUUFBUTtXQUFJLEtBQUtqRDtXQUFnQlcsT0FBT0ksU0FBU2tDO1dBQVU5QixXQUFXSixTQUFTa0M7V0FBVU0sSUFBSU47O0FBQ25HLFlBQU1DLHFCQUFxQixLQUFLQyxnQkFBZ0I7V0FDekMsS0FBS2xEO1dBQ0xVLE9BQU9JLFNBQVNxQztXQUNoQmpDLFdBQVdKLFNBQVNxQztXQUNwQkcsSUFBSUg7T0FDVjtBQUVELFlBQU1ULFVBQVUsTUFBTSxLQUFLOUMsV0FBVzJELFlBQVlULFFBQVFDLGNBQWNDLE9BQU9DLG9CQUFvQi9CLFlBQVlvQyxHQUFBQTtBQUMvR3BDLGlCQUFXeUIsWUFBWXpELEtBQUt3RCxPQUFBQTtJQUNoQyxDQUFBO0VBQ0o7RUFFT2YsZUFBZVQsWUFBd0I7QUFDMUMsVUFBTVksZUFBZVosV0FBV2EsTUFBTW5CLFVBQVVDLElBQWtCbUIsYUFBQUE7QUFFbEVkLGVBQVdKLFNBQVMwQyxPQUFPdkMsUUFBUSxDQUFDaUIsVUFBQUE7QUFDaEMsVUFBSUEsTUFBTXVCLFNBQVMsUUFBUTtBQUN2QjNCLHFCQUFhNEIsY0FBY3hDLFdBQVdQLFNBQVN1QixNQUFNbkQsTUFBTSxFQUFHNEUsS0FBS3pDLFdBQVdQLFFBQVEsR0FBR3VCLE1BQU1yRyxPQUFPO01BQzFHLFdBQVdxRyxNQUFNdUIsU0FBUyxhQUFhO0FBQ25DM0IscUJBQWE4QixnQkFBZ0IxQyxXQUFXUCxTQUFTdUIsTUFBTW5ELE1BQU0sRUFBRzRFLEtBQUt6QyxXQUFXUCxRQUFRLEdBQUd1QixNQUFNWixJQUFJO01BQ3pHLFdBQVdZLE1BQU11QixTQUFTLFlBQVk7QUFDbEMzQixxQkFBYStCLGVBQ1QzQyxXQUFXUCxTQUFTdUIsTUFBTW5ELE1BQU0sRUFBRzRFLEtBQUt6QyxXQUFXUCxRQUFRLEdBQzNEdUIsTUFBTXJHLFFBQVFpSSxTQUNkNUIsTUFBTVosSUFBSTtNQUVsQixXQUFXWSxNQUFNdUIsU0FBUyxXQUFXO0FBQ2pDM0IscUJBQWFpQyxjQUFjN0MsV0FBV1AsU0FBU3VCLE1BQU1uRCxNQUFNLEVBQUc0RSxLQUFLekMsV0FBV1AsUUFBUSxHQUFHdUIsTUFBTXJHLFFBQVFpSSxTQUFTNUIsTUFBTVosSUFBSTtNQUM5SDtJQUNKLENBQUE7RUFDSjtFQUVRNEIsZ0JBQWdCQyxjQUFzRDtBQUMxRSxVQUFNYSxZQUFpRixDQUFBO0FBRXZGLGVBQVd6RixVQUFVNEUsY0FBYztBQUMvQixZQUFNYyxTQUFTbEksUUFBUXNCLFlBQW1CcEIsZ0JBQWdCbUMsT0FBT0csTUFBQUEsS0FBVyxDQUFBO0FBQzVFLFVBQUkwRixPQUFPdEYsV0FBVyxHQUFHO0FBQ3JCc0YsZUFBTy9FLEtBQUssaUJBQUE7TUFDaEI7QUFDQSxpQkFBVzNDLFNBQVMwSCxRQUFRO0FBQ3hCLFlBQUksQ0FBQ2hILE1BQU0rRyxVQUFVMUUsS0FBSyxDQUFDNEUsZ0JBQWdCQSxZQUFZLENBQUEsTUFBTzNILEtBQUFBLENBQUFBLEdBQVM7QUFDbkUsZUFBSzBELGNBQWMxRCxNQUFNLHNEQUFBO0FBQ3pCLGdCQUFNLElBQUlMLE1BQU1DLGFBQWFnSSwyQkFBMkI7UUFDNUQ7QUFDQUgsa0JBQVU5RSxLQUFLO1VBQUMzQztVQUFPZ0M7U0FBTztNQUNsQztJQUNKO0FBRUEsV0FBT3lGO0VBQ1g7RUFFQSxNQUFjeEMsb0JBQ1ZwQixjQUNBckIsUUFDRjtBQUNFLFdBQU9xQixhQUFhQyxjQUFjLE9BQU9DLFNBQVMsTUFBTSxLQUFLaUIsbUJBQW1CakIsS0FBS2hFLE9BQU95QyxNQUFBQSxDQUFBQTtFQUNoRztFQUVBLE1BQWN3QyxtQkFDVmIsUUFDQTNCLFFBQ0Y7QUFDRSxVQUFNcUYsUUFBUUMsSUFDVjNELE9BQU9NLFlBQVlzRCxJQUFJLE9BQU9wRCxlQUFBQTtBQUMxQixVQUFJLENBQUNxRCxTQUFTckQsV0FBV1AsUUFBUSxLQUFLMUQsTUFBTWlFLFdBQVdQLFNBQVM1QixNQUFBQSxDQUFPLEVBQUc7QUFDMUUsWUFBTW1DLFdBQVdQLFNBQVM1QixNQUFBQSxFQUFPO0lBQ3JDLENBQUEsQ0FBQTtBQUVKLFVBQU1xRixRQUFRQyxJQUNWO1NBQUkzRCxPQUFPSSxTQUFTSztTQUFzQlQsT0FBT0ksU0FBU007TUFBbUJrRCxJQUFJLE9BQU8sQ0FBQ2xILEtBQUFBLE1BQUFBO0FBQ3JGLFlBQU1vSCxtQkFBZ0Q5RCxPQUFPRSxVQUFVQyxJQUFJekQsS0FBQUE7QUFDM0UsVUFBSSxDQUFDbUgsU0FBU0MsZ0JBQUFBLEtBQXFCdkgsTUFBTXVILGlCQUFpQnpGLE1BQUFBLENBQU8sRUFBRztBQUNwRSxZQUFNeUYsaUJBQWlCekYsTUFBQUEsRUFBTztJQUNsQyxDQUFBLENBQUE7QUFFSixRQUFJLENBQUN3RixTQUFTN0QsT0FBT0MsUUFBUSxLQUFLMUQsTUFBTXlELE9BQU9DLFNBQVM1QixNQUFBQSxDQUFPLEVBQUc7QUFDbEUsVUFBTTJCLE9BQU9DLFNBQVM1QixNQUFBQSxFQUFPO0VBQ2pDO0FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDck1PLElBQU0wRix5QkFBTixNQUFNQTtTQUFBQTs7O1NBQUFBOzs7RUFDc0NDO0VBQ056RTtFQUNlMEU7RUFFeEQsTUFBYWhCLEtBQUt2RCxjQUE0QjtBQUMxQyxVQUFNQSxhQUFhQyxjQUFjLE9BQU9DLFNBQUFBO0FBQ3BDLFlBQU1DLFlBQVlDLEtBQUtDLElBQUc7QUFFMUIsWUFBTUMsU0FBU0osS0FBS2hFO0FBQ3BCb0UsYUFBT0UsWUFBWSxJQUFJZ0UsZ0JBQWdCbEUsT0FBT0ksU0FBU0YsYUFBYSxLQUFLK0QsZ0JBQWdCO0FBRXpGakUsYUFBT0UsVUFBVWlFLFNBQVMsS0FBS0g7QUFDL0IsV0FBS0EsbUJBQW1CZixLQUFLakQsT0FBT0ksU0FBU0MsUUFBUSxFQUFFK0QsT0FBTSxFQUFHQyxpQkFBZ0I7QUFHaEYsVUFBSXJFLE9BQU9JLFNBQVNrRSxRQUFRO0FBRXhCLG1CQUFXLENBQUNDLEdBQUdDLFFBQUFBLEtBQWF4RSxPQUFPSSxTQUFTTSxtQkFBbUI7QUFDM0QsZUFBSytELGFBQWFELFVBQVUsS0FBS1Isa0JBQWtCO1FBQ3ZEO01BQ0osT0FBTztBQUVILG1CQUFXLENBQUN0SCxPQUFPOEgsUUFBQUEsS0FBYXhFLE9BQU9JLFNBQVNNLG1CQUFtQjtBQUMvRCxlQUFLK0QsYUFBYUQsVUFBVXhFLE9BQU9FLFNBQVM7QUFDNUNGLGlCQUFPbUUsUUFBUWpFLFVBQVUrQyxLQUFLdkcsS0FBQUEsRUFBT2dJLGVBQWUsTUFBTTFFLE9BQU9FLFVBQVVDLElBQUl6RCxLQUFBQSxDQUFBQTtRQUNuRjtBQUNBLG1CQUFXaUksZ0JBQWdCM0UsT0FBTzRFLG1CQUFtQjtBQUNqRCxxQkFBVyxDQUFDbEksS0FBQUEsS0FBVWlJLGFBQWF2RSxTQUFTTSxtQkFBbUI7QUFDM0RWLG1CQUFPRSxVQUFVK0MsS0FBS3ZHLEtBQUFBLEVBQU9nSSxlQUFlLE1BQU1DLGFBQWF6RSxVQUFVQyxJQUFJekQsS0FBQUEsQ0FBQUE7VUFDakY7UUFDSjtNQUNKO0FBR0EsaUJBQVcsQ0FBQzZILEdBQUdDLFFBQUFBLEtBQWF4RSxPQUFPSSxTQUFTSyxtQkFBbUI7QUFDM0QsYUFBS2dFLGFBQWFELFVBQVV4RSxPQUFPRSxTQUFTO01BQ2hEO0FBR0FGLGFBQU9FLFVBQVUrQyxLQUFLNEIsZ0JBQUFBLEVBQWtCQyxnQkFBZ0I5RSxPQUFPRSxTQUFTO0FBR3hFLGlCQUFXRyxZQUFZTCxPQUFPSSxTQUFTRSxhQUFhO0FBQ2hETixlQUFPRSxVQUFVK0MsS0FBSzVDLFFBQUFBLEVBQVUrRCxPQUFNLEVBQUdDLGlCQUFnQjtNQUM3RDtBQUdBckUsYUFBT0UsVUFBVStDLEtBQUszQixhQUFBQSxFQUFleUQsR0FBR0MsWUFBQUEsRUFBY1gsaUJBQWdCO0FBRXRFLFdBQUs5RSxjQUFjb0IsSUFDZixrQkFBa0JYLE9BQU9JLFNBQVNDLFNBQVNPLElBQUksaUNBQWlDZCxLQUFLQyxJQUFHLElBQUtGLFNBQUFBLEtBQWM7SUFFbkgsQ0FBQTtFQUNKO0VBRVE0RSxhQUFhRCxVQUFzQ3RFLFdBQXNCO0FBQzdFLFFBQUksY0FBY3NFLFVBQVU7QUFDeEJ0RSxnQkFBVStDLEtBQUt1QixTQUFTUyxPQUFPLEVBQUVILGdCQUFnQk4sU0FBU1UsUUFBUTtJQUN0RSxXQUFXLGdCQUFnQlYsVUFBVTtBQUNqQyxZQUFNVyxVQUFVakYsVUFBVStDLEtBQUt1QixTQUFTUyxPQUFPLEVBQUVQLGVBQWUsQ0FBQ1UsUUFBQUE7QUFDN0QsY0FBTUMsT0FDRmIsU0FBUzNILFFBQVErRyxJQUFJLENBQUMwQixRQUFBQTtBQUNsQixjQUFJekIsU0FBU3lCLEdBQUFBLEtBQVEsV0FBV0EsT0FBTyxjQUFjQSxLQUFLO0FBQ3RELGdCQUFJO0FBQ0EscUJBQU9GLElBQUlsRixVQUFVQyxJQUFJbUYsSUFBSTVJLEtBQUs7WUFDdEMsU0FBUzZJLEtBQUs7QUFDVixrQkFBSUQsSUFBSW5JLFNBQVUsUUFBT3FJO0FBQ3pCLG1CQUFLakcsY0FBYzFELE1BQU0seURBQUE7QUFDekIsb0JBQU0wSjtZQUNWO1VBQ0o7QUFDQSxpQkFBT0gsSUFBSWxGLFVBQVVDLElBQUltRixHQUFBQTtRQUM3QixDQUFBLEtBQU0sQ0FBQTtBQUNWLGVBQU9kLFNBQVNpQixXQUFVLEdBQUlKLElBQUFBO01BQ2xDLENBQUE7QUFDQSxVQUFJYixTQUFTa0IsVUFBVSxZQUFhUCxTQUFRUSxpQkFBZ0I7ZUFDbkRuQixTQUFTa0IsVUFBVSxVQUFXUCxTQUFRUyxlQUFjO1VBQ3hEVCxTQUFRZCxpQkFBZ0I7SUFDakMsV0FBVyxjQUFjRyxVQUFVO0FBQy9CLFlBQU1XLFVBQVVqRixVQUFVK0MsS0FBS3VCLFNBQVNTLE9BQU8sRUFBRUYsR0FBR1AsU0FBU3FCLFFBQVE7QUFDckUsVUFBSXJCLFNBQVNrQixVQUFVLFlBQWFQLFNBQVFRLGlCQUFnQjtlQUNuRG5CLFNBQVNrQixVQUFVLFVBQVdQLFNBQVFTLGVBQWM7VUFDeERULFNBQVFkLGlCQUFnQjtJQUNqQyxXQUFXLGlCQUFpQkcsVUFBVTtBQUNsQ3RFLGdCQUFVK0MsS0FBS3VCLFNBQVNTLE9BQU8sRUFBRWEsVUFBVXRCLFNBQVN1QixXQUFXO0lBQ25FO0VBQ0o7QUFDSjs7Ozs7Ozs7Ozs7O3VGQXJGMEYscUJBQUEsY0FBQSxTQUFBLFdBQUEsZ0JBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ZuRixJQUFNQyxvQkFBTixNQUFNQTtTQUFBQTs7O1NBQUFBOzs7RUFDc0NDO0VBQ0lDO0VBQ1YzRztFQUV6QyxNQUFhNEcsS0FBSzlGLFVBQTREO0FBQzFFLFVBQU1SLFlBQVlDLEtBQUtDLElBQUc7QUFFMUIsVUFBTXFHLGlCQUFpQixNQUFNLEtBQUtILHFCQUFxQkksS0FBS2hHLFFBQUFBO0FBRTVELFVBQU1MLFNBQVMsSUFBSWhELE9BQUFBO0FBQ25CZ0QsV0FBT0ksV0FBV2dHO0FBRWxCLFNBQUs3RyxjQUFjb0IsSUFBSSxrQkFBa0JYLE9BQU9JLFNBQVNDLFNBQVNPLElBQUkscUJBQXFCZCxLQUFLQyxJQUFHLElBQUtGLFNBQUFBLEtBQWM7QUFFdEgsVUFBTSxLQUFLeUcsZ0JBQWdCdEcsTUFBQUE7QUFFM0IsVUFBTXVHLGFBQWEsSUFBSUMsS0FBS3hHLE1BQUFBO0FBQzVCLFVBQU15RyxpQkFBaUIsb0JBQUlDLElBQUFBO0FBQzNCRCxtQkFBZUUsSUFBSXRHLFVBQVVMLE1BQUFBO0FBRTdCLGVBQVc0RyxrQkFBa0JSLGVBQWVTLFNBQVM7QUFDakQsWUFBTSxLQUFLQyxZQUFZUCxXQUFXUSxNQUFNSCxnQkFBZ0JILGNBQUFBO0lBQzVEO0FBQ0EsV0FBT0Y7RUFDWDtFQUVBLE1BQWNPLFlBQ1ZFLFlBQ0EzRyxVQUNBb0csaUJBQWlCLG9CQUFJQyxJQUFBQSxHQUN2QjtBQUVFLFVBQU1PLGdCQUFnQlIsZUFBZXRHLElBQUlFLFFBQUFBO0FBQ3pDLFFBQUksQ0FBQzlELE1BQU0wSyxhQUFBQSxHQUFnQjtBQUN2QkQsaUJBQVdwTCxNQUFNZ0osa0JBQWtCc0MsSUFBSUQsYUFBQUE7QUFDdkM7SUFDSjtBQUVBLFVBQU1wSCxZQUFZQyxLQUFLQyxJQUFHO0FBRzFCLFVBQU1xRyxpQkFBaUIsTUFBTSxLQUFLSCxxQkFBcUJJLEtBQUtoRyxRQUFBQTtBQUU1RCxTQUFLOEcsd0JBQXdCSCxXQUFXcEwsTUFBTXdFLFVBQVVnRyxjQUFBQTtBQUV4RCxVQUFNcEcsU0FBUyxJQUFJaEQsT0FBQUE7QUFDbkJnRCxXQUFPSSxXQUFXZ0c7QUFDbEJwRyxXQUFPbUUsU0FBUzZDLFdBQVdwTDtBQUUzQixTQUFLMkQsY0FBY29CLElBQUksa0JBQWtCWCxPQUFPSSxTQUFTQyxTQUFTTyxJQUFJLHFCQUFxQmQsS0FBS0MsSUFBRyxJQUFLRixTQUFBQSxLQUFjO0FBRXRILFVBQU0sS0FBS3lHLGdCQUFnQnRHLE1BQUFBO0FBRTNCLFVBQU1vSCxXQUFXLElBQUlDLFNBQVNySCxNQUFBQTtBQUM5QmdILGVBQVdNLFNBQVNGLFFBQUFBO0FBRXBCWCxtQkFBZUUsSUFBSXRHLFVBQVVMLE1BQUFBO0FBRTdCLGVBQVcyRSxnQkFBZ0J5QixlQUFlUyxTQUFTO0FBQy9DLFlBQU0sS0FBS0MsWUFBWU0sVUFBVXpDLGNBQWM4QixjQUFBQTtJQUNuRDtFQUNKO0VBRUEsTUFBY0gsZ0JBQWdCdEcsUUFBZ0I7QUFFMUMsZUFBV0ssWUFBWUwsT0FBT0ksU0FBU0UsYUFBYTtBQUNoRCxZQUFNVCxZQUFZQyxLQUFLQyxJQUFHO0FBQzFCLFlBQU13SCxxQkFBcUIsTUFBTSxLQUFLckIseUJBQXlCRyxLQUFLaEcsUUFBQUE7QUFDcEUsWUFBTUcsYUFBYSxJQUFJdEYsV0FBQUE7QUFDdkJzRixpQkFBV0osV0FBV21IO0FBQ3RCL0csaUJBQVdhLFFBQVFyQjtBQUNuQkEsYUFBT00sWUFBWTlCLEtBQUtnQyxVQUFBQTtBQUV4QixXQUFLakIsY0FBY29CLElBQUksc0JBQXNCTixTQUFTTyxJQUFJLHFCQUFxQmQsS0FBS0MsSUFBRyxJQUFLRixTQUFBQSxLQUFjO0lBQzlHO0VBQ0o7RUFFQSxNQUFjc0gsd0JBQXdCSyxnQkFBZ0NwQixnQkFBZ0M7QUFFbEcsUUFBSUEsZUFBZVMsUUFBUWhJLFNBQVMySSxlQUFlbkgsUUFBUSxHQUFHO0FBRTFELFlBQU0sSUFBSTdFLE1BQU1DLGFBQWFnTSwwQkFBMEI7SUFDM0Q7RUFDSjtBQUNKOzs7Ozs7Ozs7Ozs7Ozs7O0FDL0ZPLElBQU1DLG9CQUFOLE1BQU1BO1NBQUFBOzs7RUFBYixPQUFhQTs7Ozs7RUFDVCxZQUNZQyxXQUNBQyxVQUNWO1NBRlVELFlBQUFBO1NBQ0FDLFdBQUFBO0VBQ1Q7RUFFSG5HLFVBQWdCO0FBQ1pvRyxPQUFHM0YsT0FBTzRGLE9BQU8sS0FBS0gsV0FBVyxLQUFLQyxRQUFRO0VBQ2xEO0FBQ0o7QUNSTyxJQUFNRyxxQkFBTixNQUFNQTtTQUFBQTs7O0VBRmIsT0FFYUE7OztFQUNUQyxLQUFLTCxjQUFzQk0sTUFBbUI7QUFDMUNKLE9BQUczRixPQUFPZ0csS0FBS1AsV0FBQUEsR0FBY00sSUFBQUE7RUFDakM7RUFFQUUsR0FBR1IsV0FBbUJDLFVBQXdEO0FBQzFFQyxPQUFHM0YsT0FBT2dGLElBQUlTLFdBQVdDLFFBQUFBO0FBQ3pCLFdBQU8sSUFBSUYsa0JBQWtCQyxXQUFXQyxRQUFBQTtFQUM1QztFQUVBUSxLQUFLVCxXQUFtQkMsVUFBd0Q7QUFDNUUsVUFBTVMsY0FBYyxnQkFBQS9LLFFBQUEsSUFBSTJLLFNBQUFBO0FBQ3BCSixTQUFHM0YsT0FBTzRGLE9BQU9ILFdBQVdVLFdBQUFBO0FBQzVCVCxlQUFBQSxHQUFZSyxJQUFBQTtJQUNoQixHQUhvQixhQUFBO0FBSXBCSixPQUFHM0YsT0FBT2dGLElBQUlTLFdBQVdVLFdBQUFBO0FBQ3pCLFdBQU8sSUFBSVgsa0JBQWtCQyxXQUFXVSxXQUFBQTtFQUM1QztFQUVBQyxJQUFJWCxXQUFtQkMsVUFBMEM7QUFDN0RDLE9BQUczRixPQUFPNEYsT0FBT0gsV0FBV0MsUUFBQUE7RUFDaEM7QUFDSjtBQ3ZCTyxJQUFNVyxjQUFOLE1BQU1BO1NBQUFBOzs7RUFBYixPQUFhQTs7Ozs7Ozs7RUFDRkMsV0FBVzFJLEtBQUtDLElBQUc7RUFDMUIsWUFDVzBJLElBQ0FDLFdBQW1CLEdBQ25CTixNQUNBTyxVQUNDQyxZQUNWO1NBTFNILEtBQUFBO1NBQ0FDLFdBQUFBO1NBQ0FOLE9BQUFBO1NBQ0FPLFdBQUFBO1NBQ0NDLGFBQUFBO0VBQ1Q7RUFFSG5ILFVBQVU7QUFDTixTQUFLbUgsV0FBVTtFQUNuQjtBQUNKO0FDWk8sSUFBTUMsZUFBTixNQUFNQTtTQUFBQTs7O0VBRmIsT0FFYUE7OztFQUNEQyxtQkFBMkI7RUFDM0JoRyxTQUFTLG9CQUFJNEQsSUFBQUE7RUFDYnFDLG9CQUFvQixvQkFBSXJDLElBQUFBO0VBQ3hCc0MscUJBQXFCO0VBQ3JCQyx1QkFBNEM7RUFFcEQsSUFBV3RGLE1BQTBCO0FBQ2pDLFdBQU87U0FBSSxLQUFLYixPQUFPb0csT0FBTTs7RUFDakM7RUFFQSxJQUFXQyxtQkFBMkI7QUFFbEMsV0FBTztFQUNYO0VBRUEsSUFBV0EsaUJBQWlCQyxRQUFnQjtFQUU1QztFQUVBLElBQVdDLCtCQUF1QztBQUU5QyxXQUFPO0VBQ1g7RUFFQSxJQUFXQSw2QkFBNkJELFFBQWdCO0VBRXhEO0VBRUFFLFFBQVFiLElBQXFDO0FBQ3pDLFVBQU1qSCxRQUFRLEtBQUtzQixPQUFPM0MsSUFBSXNJLEVBQUFBO0FBQzlCLFdBQU9qSCxTQUFTO0VBQ3BCO0VBRVErSCxZQUNKQSxhQUNBQyxPQUNBYixVQUNBRCxVQUNBTixTQUNHSCxNQUNMO0FBQ0UsVUFBTXdCLGVBQWVkLFNBQVMxRixLQUFLLE1BQUksR0FBTXlHLE1BQU1DLFFBQVExQixJQUFBQSxJQUFRQSxPQUFPLENBQUEsQ0FBRTtBQUM1RSxVQUFNMkIsVUFBVSxPQUFPbEIsYUFBYSxXQUFXYSxZQUFZRSxjQUFjZixRQUFBQSxJQUFZYSxZQUFZRSxZQUFBQTtBQUNqRyxVQUFNaEIsS0FBSyxLQUFLSztBQUVoQixVQUFNZSxjQUFjLElBQUl0QixZQUFZRSxJQUFJQyxZQUFZLEdBQUdOLE1BQU1xQixjQUFjLE1BQUE7QUFDdkVELFlBQU1JLE9BQUFBO0FBQ04sV0FBSzlHLE9BQU9nSCxPQUFPckIsRUFBQUE7SUFDdkIsQ0FBQTtBQUNBLFNBQUszRixPQUFPNkQsSUFBSThCLElBQUlvQixXQUFBQTtBQUNwQixXQUFPQTtFQUNYO0VBRUFFLFlBQVlwQixVQUFvQjNILFNBQWlCaUgsTUFBaUI7QUFDOUQsV0FBTyxLQUFLc0IsWUFDUixDQUFDUyxJQUFjdEIsYUFBcUJxQixZQUFZQyxJQUFrQnRCLFFBQUFBLEdBQ2xFLENBQUNELE9BQWV3QixjQUFjeEIsRUFBQUEsR0FDOUJFLFVBQ0EzSCxNQUNBLE9BQUEsR0FDR2lILElBQUFBO0VBRVg7RUFFQWlDLFdBQVd2QixVQUFvQjNILFNBQWlCaUgsTUFBaUI7QUFDN0QsVUFBTVEsS0FBSyxLQUFLSztBQUNoQixVQUFNVyxlQUFlZCxTQUFTMUYsS0FBSyxNQUFJLEdBQU15RyxNQUFNQyxRQUFRMUIsSUFBQUEsSUFBUUEsT0FBTyxDQUFBLENBQUU7QUFFNUUsVUFBTTJCLFVBQVVNLFdBQVcsTUFBQTtBQUN2QlQsbUJBQUFBO0FBQ0EsV0FBSzNHLE9BQU9nSCxPQUFPckIsRUFBQUE7SUFDdkIsR0FBR3pILElBQUFBO0FBRUgsVUFBTTZJLGNBQWMsSUFBSXRCLFlBQVlFLElBQUl6SCxNQUFNLE1BQU15SSxjQUFjLE1BQUE7QUFDOURVLG1CQUFhUCxPQUFBQTtBQUNiLFdBQUs5RyxPQUFPZ0gsT0FBT3JCLEVBQUFBO0lBQ3ZCLENBQUE7QUFDQSxTQUFLM0YsT0FBTzZELElBQUk4QixJQUFJb0IsV0FBQUE7QUFDcEIsV0FBT0E7RUFDWDtFQUVBTyxVQUFVekIsYUFBdUJWLE1BQWlCO0FBQzlDLFVBQU1RLEtBQUssS0FBS0s7QUFDaEIsVUFBTVcsZUFBZWQsU0FBUzFGLEtBQUssTUFBSSxHQUFNeUcsTUFBTUMsUUFBUTFCLElBQUFBLElBQVFBLE9BQU8sQ0FBQSxDQUFFO0FBRTVFLFNBQUtjLGtCQUFrQnBDLElBQUk4QixJQUFJO01BQUVFO01BQVUwQixPQUFPWjtJQUFhLENBQUE7QUFHL0QsVUFBTWEsZUFBZSxPQUFPekMsT0FBTyxlQUFlLE9BQVFBLEdBQVcwQyxhQUFhO0FBR2xGLFFBQUksQ0FBQyxLQUFLdkIsb0JBQW9CO0FBQzFCLFdBQUtBLHFCQUFxQjtBQUUxQixVQUFJc0IsY0FBYztBQUVkLGFBQUtyQix1QkFBdUIsTUFBQTtBQUN4QixxQkFBVyxDQUFBLEVBQUdqSCxPQUFBQSxLQUFZLEtBQUsrRyxtQkFBbUI7QUFDOUMsZ0JBQUk7QUFDQS9HLHNCQUFRcUksTUFBSztZQUNqQixTQUFTRyxHQUFHO0FBQ1IzQyxpQkFBRzRDLFFBQVFDLFNBQVMsK0JBQStCRixDQUFBQSxFQUFHO1lBQzFEO1VBQ0o7UUFDSjtBQUNBM0MsV0FBRzNGLE9BQU9nRixJQUFJLFVBQVUsS0FBSytCLG9CQUFvQjtNQUNyRCxPQUFPO0FBRUgsY0FBTTBCLGtCQUFrQixnQkFBQXJOLFFBQUEsTUFBQTtBQUNwQixxQkFBVyxDQUFBLEVBQUcwRSxPQUFBQSxLQUFZLEtBQUsrRyxtQkFBbUI7QUFDOUMsZ0JBQUk7QUFDQS9HLHNCQUFRcUksTUFBSztZQUNqQixTQUFTRyxHQUFHO0FBQ1IzQyxpQkFBRzRDLFFBQVFDLFNBQVMsK0JBQStCRixDQUFBQSxFQUFHO1lBQzFEO1VBQ0o7UUFDSixHQVJ3QixpQkFBQTtBQVN2QixhQUFhSSxxQkFBcUJiLFlBQVlZLGlCQUFpQixDQUFBO01BQ3BFO0lBQ0o7QUFFQSxVQUFNZCxjQUFjLElBQUl0QixZQUFZRSxJQUFJLEdBQUcsT0FBT2dCLGNBQWMsTUFBQTtBQUM1RCxXQUFLVixrQkFBa0JlLE9BQU9yQixFQUFBQTtBQUM5QixXQUFLM0YsT0FBT2dILE9BQU9yQixFQUFBQTtBQUduQixVQUFJLEtBQUtNLGtCQUFrQjhCLFNBQVMsR0FBRztBQUNuQyxZQUFJUCxnQkFBZ0IsS0FBS3JCLHNCQUFzQjtBQUMzQ3BCLGFBQUczRixPQUFPNEYsT0FBTyxVQUFVLEtBQUttQixvQkFBb0I7QUFDcEQsZUFBS0EsdUJBQXVCO1FBQ2hDLFdBQVksS0FBYTJCLG9CQUFvQjtBQUN6Q1gsd0JBQWUsS0FBYVcsa0JBQWtCO0FBQzdDLGVBQWFBLHFCQUFxQjtRQUN2QztBQUNBLGFBQUs1QixxQkFBcUI7TUFDOUI7SUFDSixDQUFBO0FBQ0EsU0FBS2xHLE9BQU82RCxJQUFJOEIsSUFBSW9CLFdBQUFBO0FBQ3BCLFdBQU9BO0VBQ1g7RUFFQWlCLFNBQVNuQyxhQUF1QlYsTUFBaUI7QUFDN0MsVUFBTVEsS0FBSyxLQUFLSztBQUNoQixVQUFNVyxlQUFlZCxTQUFTMUYsS0FBSyxNQUFJLEdBQU15RyxNQUFNQyxRQUFRMUIsSUFBQUEsSUFBUUEsT0FBTyxDQUFBLENBQUU7QUFHNUUsVUFBTXFDLGVBQWUsT0FBT3pDLE9BQU8sZUFBZSxPQUFRQSxHQUFXMEMsYUFBYTtBQUVsRixRQUFJWDtBQUVKLFFBQUlVLGNBQWM7QUFFZCxZQUFNdEksVUFBVSxnQkFBQTFFLFFBQUEsTUFBQTtBQUNaLFlBQUk7QUFDQW1NLHVCQUFBQTtRQUNKLFVBQUE7QUFDSTVCLGFBQUczRixPQUFPNEYsT0FBTyxVQUFVOUYsT0FBQUE7QUFDM0IsZUFBS2MsT0FBT2dILE9BQU9yQixFQUFBQTtRQUN2QjtNQUNKLEdBUGdCLFNBQUE7QUFRaEJaLFNBQUczRixPQUFPZ0YsSUFBSSxVQUFVbEYsT0FBQUE7QUFFeEIsWUFBTTZILGNBQWMsSUFBSXRCLFlBQVlFLElBQUksR0FBRyxNQUFNZ0IsY0FBYyxNQUFBO0FBQzNENUIsV0FBRzNGLE9BQU80RixPQUFPLFVBQVU5RixPQUFBQTtBQUMzQixhQUFLYyxPQUFPZ0gsT0FBT3JCLEVBQUFBO01BQ3ZCLENBQUE7QUFDQSxXQUFLM0YsT0FBTzZELElBQUk4QixJQUFJb0IsV0FBQUE7QUFDcEIsYUFBT0E7SUFDWCxPQUFPO0FBRUhELGdCQUFVTSxXQUFXLE1BQUE7QUFDakIsWUFBSTtBQUNBVCx1QkFBQUE7UUFDSixVQUFBO0FBQ0ksZUFBSzNHLE9BQU9nSCxPQUFPckIsRUFBQUE7UUFDdkI7TUFDSixHQUFHLENBQUE7QUFFSCxZQUFNb0IsY0FBYyxJQUFJdEIsWUFBWUUsSUFBSSxHQUFHLE1BQU1nQixjQUFjLE1BQUE7QUFDM0RVLHFCQUFhUCxPQUFBQTtBQUNiLGFBQUs5RyxPQUFPZ0gsT0FBT3JCLEVBQUFBO01BQ3ZCLENBQUE7QUFDQSxXQUFLM0YsT0FBTzZELElBQUk4QixJQUFJb0IsV0FBQUE7QUFDcEIsYUFBT0E7SUFDWDtFQUNKO0VBRUE3SSxLQUFLK0osT0FBZ0I7RUFHckI7RUFFQUMsUUFBUUQsT0FBZ0I7RUFFeEI7QUFDSjtBQ2xNTyxJQUFNRSwyQkFBTixNQUFNQTtTQUFBQTs7O0VBSmIsT0FJYUE7OztFQUNBQztFQUNBQztFQUVULGNBQWM7QUFDVixTQUFLQSxTQUFTLElBQUlwRCxtQkFBQUE7QUFDbEIsU0FBS21ELFNBQVMsSUFBSXJDLGFBQUFBO0VBQ3RCO0VBRUF1QyxxQkFDT25ELE1BSUw7QUFDRSxVQUFNb0QsU0FBVXhILFNBQVNvRSxLQUFLLENBQUEsQ0FBRSxJQUFJQSxLQUFLLENBQUEsSUFBS3pDO0FBRTlDLFdBQU87TUFDSDZGO01BQ0FDLE1BQU1yRDtJQUNWO0VBQ0o7RUFFQXRILElBQUk0SyxRQUFhdEQsTUFBbUI7QUFDaEMsVUFBTXVELFVBQVU7TUFBQ0Q7U0FBUXREO01BQU1yRSxJQUFJNkgsQ0FBQUEsTUFDL0IsT0FBT0EsTUFBTSxXQUFXQyxLQUFLQyxVQUFVRixDQUFBQSxJQUFLRyxPQUFPSCxDQUFBQSxDQUFBQSxFQUNyREksS0FBSyxHQUFBO0FBQ1BoRSxPQUFHNEMsUUFBUXFCLFFBQVFOLE9BQUFBO0VBQ3ZCO0VBRUFkLFNBQVNhLFFBQWF0RCxNQUFtQjtBQUNyQyxVQUFNdUQsVUFBVTtNQUFDRDtTQUFRdEQ7TUFBTXJFLElBQUk2SCxDQUFBQSxNQUMvQixPQUFPQSxNQUFNLFdBQVdDLEtBQUtDLFVBQVVGLENBQUFBLElBQUtHLE9BQU9ILENBQUFBLENBQUFBLEVBQ3JESSxLQUFLLEdBQUE7QUFDUGhFLE9BQUc0QyxRQUFRQyxTQUFTYyxPQUFBQTtFQUN4QjtFQUVBTyxXQUFXUixRQUFhdEQsTUFBbUI7QUFDdkMsVUFBTXVELFVBQVU7TUFBQ0Q7U0FBUXREO01BQU1yRSxJQUFJNkgsQ0FBQUEsTUFDL0IsT0FBT0EsTUFBTSxXQUFXQyxLQUFLQyxVQUFVRixDQUFBQSxJQUFLRyxPQUFPSCxDQUFBQSxDQUFBQSxFQUNyREksS0FBSyxHQUFBO0FBQ1BoRSxPQUFHNEMsUUFBUXNCLFdBQVdQLE9BQUFBO0VBQzFCO0VBRUFRLFNBQVNULFFBQWF0RCxNQUFtQjtBQUVyQyxVQUFNdUQsVUFBVTtNQUFDRDtTQUFRdEQ7TUFBTXJFLElBQUk2SCxDQUFBQSxNQUMvQixPQUFPQSxNQUFNLFdBQVdDLEtBQUtDLFVBQVVGLENBQUFBLElBQUtHLE9BQU9ILENBQUFBLENBQUFBLEVBQ3JESSxLQUFLLEdBQUE7QUFDUGhFLE9BQUc0QyxRQUFRcUIsUUFBUSxXQUFXTixPQUFBQSxFQUFTO0VBQzNDO0FBQ0o7Ozs7Ozs7Ozs7Ozs7O0FFM0NPLElBQU1TLE1BQU4sTUFBTUE7U0FBQUE7OztTQUFBQTs7O0VBQ21DQztFQUNLQztFQUNaQztFQUNZQztFQUNmQztFQUNPL007RUFDakNnSDtFQUNBZ0csU0FBUztFQUVqQixNQUFhQyxNQUFTQyxZQUF3QjtBQUMxQyxRQUFJLEtBQUtGLFFBQVE7QUFDYixXQUFLaE4sY0FBYzFELE1BQU0sd0NBQUE7QUFDekIsWUFBTSxJQUFJTCxNQUFNQyxhQUFhaVIsZ0JBQWdCO0lBQ2pEO0FBQ0EsU0FBS25OLGNBQWNvQixJQUFJLHFCQUFBO0FBQ3ZCLFVBQU0sS0FBS2dNLGlCQUFpQixhQUFBO0FBRTVCLFNBQUtwTixjQUFjb0IsSUFBSSw2QkFBQTtBQUN2QixVQUFNLEtBQUtnTSxpQkFBaUIsWUFBQTtBQUM1QixTQUFLcEcsYUFBYSxNQUFNLEtBQUsyRixrQkFBa0IvRixLQUFLc0csVUFBQUE7QUFDcEQsVUFBTSxLQUFLRSxpQkFBaUIsV0FBQTtBQUU1QixTQUFLcE4sY0FBY29CLElBQUksb0NBQUE7QUFDdkIsVUFBTSxLQUFLZ00saUJBQWlCLFlBQUE7QUFDNUIsVUFBTSxLQUFLUix1QkFBdUJsSixLQUFLLEtBQUtzRCxVQUFVO0FBQ3RELFVBQU0sS0FBS29HLGlCQUFpQixXQUFBO0FBRTVCLFNBQUtwTixjQUFjb0IsSUFBSSxvQkFBQTtBQUN2QixVQUFNLEtBQUtnTSxpQkFBaUIsWUFBQTtBQUM1QixVQUFNLEtBQUtQLFdBQVczTSxLQUFLLEtBQUs4RyxVQUFVO0FBQzFDLFNBQUtnRyxTQUFTO0FBQ2QsVUFBTSxLQUFLSSxpQkFBaUIsV0FBQTtBQUU1QixTQUFLcE4sY0FBY29CLElBQUksZ0JBQUE7QUFFdkIsVUFBTSxLQUFLZ00saUJBQWlCLFlBQUE7RUFDaEM7RUFFQSxNQUFhN0ssT0FBTztBQUNoQixRQUFJLENBQUMsS0FBS3lLLFFBQVE7QUFDZCxXQUFLaE4sY0FBYzFELE1BQU0sd0NBQUE7QUFDekIsWUFBTSxJQUFJTCxNQUFNQyxhQUFhbVIsWUFBWTtJQUM3QztBQUNBLFVBQU0sS0FBS0QsaUJBQWlCLFlBQUE7QUFDNUIsU0FBS3BOLGNBQWNvQixJQUFJLHFCQUFBO0FBQ3ZCLFVBQU0sS0FBS3lMLFdBQVdqTCxTQUFTLEtBQUtvRixVQUFVO0FBQzlDLFNBQUtnRyxTQUFTO0FBQ2QsU0FBS2hOLGNBQWNvQixJQUFJLGlCQUFBO0FBQ3ZCLFVBQU0sS0FBS2dNLGlCQUFpQixXQUFBO0VBQ2hDO0VBRUEsTUFBY0EsaUJBQWlCdE8sUUFBMkI7QUFDdEQsVUFBTXFGLFFBQVFDLElBQ1YsS0FBSzJJLFFBQVExSSxJQUFJLE9BQU9pSixNQUFBQTtBQUNwQixZQUFNQyxTQUFTLEtBQUtULHFCQUFxQmxNLElBQUkwTSxDQUFBQTtBQUM3QyxVQUFJLENBQUNDLE9BQU96TyxNQUFBQSxFQUFTLFFBQU9xRixRQUFRcUosUUFBTztBQUMzQyxhQUFPckosUUFBUXFKLFFBQVFELE9BQU96TyxNQUFBQSxFQUFPLENBQUE7SUFDekMsQ0FBQSxDQUFBO0VBRVI7QUFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QURwQ08sSUFBTTJPLGFBQU4sTUFBTUE7U0FBQUE7OztTQUFBQTs7O0VBQ2tDQztFQUNRWjtFQUNIYTtFQUNaWjtFQUU1QmEseUJBQXNELENBQUM7RUFFeERDLG1CQUFtQmhMLFFBQTRCO0FBQ2xELFVBQU1pTCxrQkFBc0MsQ0FBQTtBQUM1QyxlQUFXQyxTQUFTbEwsUUFBUTtBQUN4QixZQUFNLEVBQUV6RyxPQUFPQyxPQUFPQyxNQUFLLElBQUswUixjQUFjRCxLQUFBQTtBQUM5QyxVQUFJLENBQUMzUixNQUFPLE9BQU0sSUFBSUgsTUFBTUssS0FBQUE7QUFDNUJ3UixzQkFBZ0I3TyxLQUFLNUMsS0FBQUE7SUFDekI7QUFFQSxTQUFLeVEscUJBQXFCcEosS0FBS3VLLGFBQUFBLEVBQWUxSSxnQkFBZ0J1SSxlQUFBQTtBQUM5RCxXQUFPO0VBQ1g7RUFFT0kseUJBQXlCcEwsY0FBa0M7QUFDOUQsVUFBTXFMLHdCQUE0QyxDQUFBO0FBQ2xELGVBQVdDLGVBQWV0TCxjQUFjO0FBQ3BDLFlBQU0sRUFBRTFHLE9BQU9DLE9BQU9DLE1BQUssSUFBSytSLG9CQUFvQkQsV0FBQUE7QUFDcEQsVUFBSSxDQUFDaFMsTUFBTyxPQUFNLElBQUlILE1BQU1LLEtBQUFBO0FBQzVCNlIsNEJBQXNCbFAsS0FBSzVDLEtBQUFBO0lBQy9CO0FBRUEsU0FBS3lRLHFCQUFxQnBKLEtBQUs0SyxtQkFBQUEsRUFBcUIvSSxnQkFBZ0I0SSxxQkFBQUE7QUFDcEUsV0FBTztFQUNYO0VBRU9JLGtCQUFrQnhMLE9BQWlDO0FBQ3RELFVBQU15TCxpQkFBMkMsQ0FBQTtBQUNqRCxlQUFXQyxRQUFRMUwsT0FBTztBQUN0QixZQUFNLEVBQUUzRyxPQUFPQyxPQUFPQyxNQUFLLElBQUtvUyxhQUFhRCxJQUFBQTtBQUM3QyxVQUFJLENBQUNyUyxNQUFPLE9BQU0sSUFBSUgsTUFBTUssS0FBQUE7QUFDNUJrUyxxQkFBZXZQLEtBQUs1QyxLQUFBQTtJQUN4QjtBQUVBLFNBQUt5USxxQkFBcUJwSixLQUFLaUwsWUFBQUEsRUFBY3BKLGdCQUFnQmlKLGNBQUFBO0FBQzdELFdBQU87RUFDWDtFQUVPSSxvQkFBb0IvUCxTQUErQjtBQUN0RCxVQUFNZ1EsbUJBQXlDLENBQUE7QUFDL0MsZUFBV3ZRLFVBQVVPLFNBQVM7QUFDMUIsWUFBTSxFQUFFekMsT0FBT0MsT0FBT0MsTUFBSyxJQUFLMEMsb0JBQW9CVixNQUFBQTtBQUNwRCxVQUFJLENBQUNsQyxNQUFPLE9BQU0sSUFBSUgsTUFBTUssS0FBQUE7QUFDNUJ1Uyx1QkFBaUI1UCxLQUFLNUMsS0FBQUE7SUFDMUI7QUFFQSxTQUFLeVEscUJBQXFCcEosS0FBS29MLG9CQUFBQSxFQUFzQnZKLGdCQUFnQnNKLGdCQUFBQTtBQUNyRSxXQUFPO0VBQ1g7RUFFT0UsY0FBY2hDLFNBQWlDO0FBQ2xEQSxZQUFRL0wsUUFBUSxDQUFDc00sTUFBTSxLQUFLUixxQkFBcUJwSixLQUFLNEosQ0FBQUEsRUFBR3pJLE9BQU0sRUFBR0MsaUJBQWdCLENBQUE7QUFDbEYsVUFBTWtLLGtCQUFrQixLQUFLbEMscUJBQXFCbE0sSUFBNEJxTyxPQUFBQTtBQUM5RSxTQUFLbkMscUJBQXFCb0MsT0FBT0QsT0FBQUEsRUFBUzFKLGdCQUFnQjtTQUFJeUo7U0FBb0JqQztLQUFRO0FBQzFGLFdBQU87RUFDWDtFQUVPOU0sc0JBQXNCO0FBQ3pCLFNBQUs2TSxxQkFBcUJwSixLQUFLeUwscUJBQUFBLEVBQXVCNUosZ0JBQWdCLElBQUE7QUFDdEUsV0FBTztFQUNYO0VBRU82SixvQkFBb0J4VCxTQUFzQ3lULGFBQWEsT0FBTztBQUNqRixTQUFLekIseUJBQXlCaFM7QUFDOUIsUUFBSXlULFdBQVksUUFBTztBQUN2QixTQUFLdkMscUJBQXFCcEosS0FBSzRMLGlCQUFBQSxFQUFtQi9KLGdCQUFnQjNKLE9BQUFBO0FBQ2xFLFdBQU87RUFDWDtFQUVBLE1BQWEyVCxRQUFRO0FBQ2pCLFVBQU05SyxxQkFBcUIsSUFBSStLLFdBQVUsS0FBSzVCLHNCQUFzQjtBQUVwRW5KLHVCQUFtQmYsS0FBSytMLGlCQUFBQSxFQUFtQmxLLGdCQUFnQm1LLGlCQUFBQTtBQUMzRGpMLHVCQUFtQmYsS0FBS2dNLGlCQUFBQSxFQUFrQm5KLFVBQVVrSixpQkFBQUE7QUFHcERoTCx1QkFBbUJmLEtBQUtpTSxtQkFBQUEsRUFBcUJwSyxnQkFBZ0IsS0FBS29JLGtCQUFrQjtBQUdwRixTQUFLYixxQkFBcUJwSixLQUFLZ0osR0FBQUEsRUFBSzdILE9BQU0sRUFBR0MsaUJBQWdCO0FBQzdELFNBQUtnSSxxQkFBcUJwSixLQUFLa00sb0JBQUFBLEVBQXNCckssZ0JBQWdCZCxrQkFBQUE7QUFHckUsU0FBS3FJLHFCQUFxQnBKLEtBQUsrQyxpQkFBQUEsRUFBbUI1QixPQUFNLEVBQUdDLGlCQUFnQjtBQUMzRSxTQUFLZ0kscUJBQXFCcEosS0FBS2Msc0JBQUFBLEVBQXdCSyxPQUFNLEVBQUdDLGlCQUFnQjtBQUNoRixTQUFLZ0kscUJBQXFCcEosS0FBS2pFLFVBQUFBLEVBQVlvRixPQUFNLEVBQUdDLGlCQUFnQjtBQUdwRSxTQUFLZ0kscUJBQXFCcEosS0FBS21NLGVBQUFBLEVBQWlCaEwsT0FBTSxFQUFHQyxpQkFBZ0I7QUFHekUsU0FBS2dJLHFCQUFxQnBKLEtBQUtqRyxNQUFBQSxFQUFRb0gsT0FBTSxFQUFHdUIsaUJBQWdCO0FBQ2hFLFNBQUswRyxxQkFBcUJwSixLQUFLb00sb0JBQUFBLEVBQXNCakwsT0FBTSxFQUFHQyxpQkFBZ0I7QUFHOUUsU0FBS2dJLHFCQUFxQnBKLEtBQUsvSCxVQUFBQSxFQUFZa0osT0FBTSxFQUFHdUIsaUJBQWdCO0FBQ3BFLFNBQUswRyxxQkFBcUJwSixLQUFLcU0sd0JBQUFBLEVBQTBCbEwsT0FBTSxFQUFHQyxpQkFBZ0I7QUFDbEYsU0FBS2dJLHFCQUFxQnBKLEtBQUtzTSxxQkFBQUEsRUFBdUJuTCxPQUFNLEVBQUdDLGlCQUFnQjtBQUMvRSxTQUFLZ0kscUJBQXFCcEosS0FBS3VNLHNCQUFBQSxFQUF3QnBMLE9BQU0sRUFBR0MsaUJBQWdCO0FBQ2hGLFNBQUtnSSxxQkFBcUJwSixLQUFLd00sb0JBQUFBLEVBQXNCckwsT0FBTSxFQUFHQyxpQkFBZ0I7QUFHOUUsU0FBS2dJLHFCQUFxQnBKLEtBQUt5TSxnQkFBQUEsRUFBa0J0TCxPQUFNLEVBQUd1QixpQkFBZ0I7QUFDMUUsU0FBSzBHLHFCQUFxQnBKLEtBQUswTSxxQkFBQUEsRUFBdUJDLFVBQVUsQ0FBQ0MsWUFBQUE7QUFDN0QsYUFBTyxDQUFDdkUsTUFBZUQsV0FBQUE7QUFDbkIsY0FBTXlFLFVBQVVELFFBQVEzUCxVQUFVQyxJQUFJdVAsZ0JBQUFBO0FBQ3RDSSxnQkFBUUMsUUFBUXpFO0FBQ2hCd0UsZ0JBQVFFLFVBQVUzRTtBQUNsQixlQUFPeUU7TUFDWDtJQUNKLENBQUE7QUFDQSxTQUFLekQscUJBQXFCcEosS0FBS2dOLGlCQUFBQSxFQUFtQjdMLE9BQU0sRUFBR3VCLGlCQUFnQjtBQUMzRSxTQUFLMEcscUJBQXFCcEosS0FBS2lOLHNCQUFBQSxFQUF3Qk4sVUFBVSxDQUFDQyxZQUFBQTtBQUM5RCxhQUFPLE1BQUE7QUFDSCxlQUFPQSxRQUFRM1AsVUFBVUMsSUFBSThQLGlCQUFBQTtNQUNqQztJQUNKLENBQUE7QUFDQSxTQUFLNUQscUJBQXFCcEosS0FBS2tOLG9CQUFBQSxFQUFzQi9MLE9BQU0sRUFBR3VCLGlCQUFnQjtBQUM5RSxTQUFLMEcscUJBQXFCcEosS0FBS21OLHlCQUFBQSxFQUEyQlIsVUFBVSxDQUFDQyxZQUFBQTtBQUNqRSxhQUFPLENBQ0g5TSxNQUNBMUMsVUFDQTJCLFNBQ0E4TixTQUNBTyxVQUNBelAsU0FBQUE7QUFFQSxjQUFNMFAsbUJBQW1CVCxRQUFRM1AsVUFBVUMsSUFBSWdRLG9CQUFBQTtBQUMvQ0cseUJBQWlCQyxRQUFReE47QUFDekJ1Tix5QkFBaUJFLFdBQVdWO0FBQzVCUSx5QkFBaUJHLFlBQVlKO0FBQzdCQyx5QkFBaUJJLFdBQVcxTztBQUM1QnNPLHlCQUFpQkssWUFBWXRRO0FBQzdCaVEseUJBQWlCTSxRQUFRaFE7QUFDekIsZUFBTzBQO01BQ1g7SUFDSixDQUFBO0FBR0EsZUFBV3hELFVBQVUsS0FBS1IsU0FBUztBQUMvQixXQUFLRCxxQkFBcUJwSixLQUFLNkosTUFBQUEsRUFBUTFJLE9BQU0sRUFBR0MsaUJBQWdCO0FBQ2hFLFlBQU13TSxpQkFBaUIsS0FBS3hFLHFCQUFxQmxNLElBQUkyTSxNQUFBQTtBQUNyRCxVQUFJLENBQUMrRCxlQUFlQyxRQUFTO0FBQzdCLFlBQU1ELGVBQWVDLFFBQU87SUFDaEM7QUFFQSxRQUFJLENBQUMsS0FBS3pFLHFCQUFxQjBFLFFBQVF2RCxhQUFBQSxFQUFnQixNQUFLbkIscUJBQXFCcEosS0FBS3VLLGFBQUFBLEVBQWUxSSxnQkFBZ0IsQ0FBQSxDQUFFO0FBQ3ZILFFBQUksQ0FBQyxLQUFLdUgscUJBQXFCMEUsUUFBUWxELG1CQUFBQSxFQUNuQyxNQUFLeEIscUJBQXFCcEosS0FBSzRLLG1CQUFBQSxFQUFxQi9JLGdCQUFnQixDQUFBLENBQUU7QUFDMUUsUUFBSSxDQUFDLEtBQUt1SCxxQkFBcUIwRSxRQUFRN0MsWUFBQUEsRUFBZSxNQUFLN0IscUJBQXFCcEosS0FBS2lMLFlBQUFBLEVBQWNwSixnQkFBZ0IsQ0FBQSxDQUFFO0FBQ3JILFFBQUksQ0FBQyxLQUFLdUgscUJBQXFCMEUsUUFBUTFDLG9CQUFBQSxFQUNuQyxNQUFLaEMscUJBQXFCcEosS0FBS29MLG9CQUFBQSxFQUFzQnZKLGdCQUFnQixDQUFBLENBQUU7QUFFM0UsV0FBTyxLQUFLdUgscUJBQXFCbE0sSUFBSThMLEdBQUFBO0VBQ3pDO0FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FFaE1BLGVBQXNCK0UsaUJBQXVDLEVBQ3pEL0QsWUFDQVgsU0FDQTJFLG1CQUNBL0Qsb0JBQUFBLG9CQUFrQixHQU1yQjtBQUNHLFFBQU1iLHVCQUF1QixJQUFJMEMsV0FBQUE7QUFFakMsTUFBSTdCLG9CQUFvQmIsc0JBQXFCcEosS0FBS2lNLG1CQUFBQSxFQUFxQnBLLGdCQUFnQm9JLG1CQUFBQTtBQUN2RmIsdUJBQXFCcEosS0FBS2lPLHNCQUFBQSxFQUF3QnBNLGdCQUFnQnVILG9CQUFBQTtBQUNsRUEsdUJBQXFCcEosS0FBS2tPLGNBQUFBLEVBQWdCck0sZ0JBQWdCbUksVUFBQUE7QUFDMURaLHVCQUFxQnBKLEtBQUt1TCxPQUFBQSxFQUFTMUosZ0JBQWdCd0gsT0FBQUE7QUFDbkRELHVCQUFxQnBKLEtBQUtnTyxpQkFBQUEsRUFBbUI3TSxPQUFNLEVBQUdDLGlCQUFnQjtBQUV0RSxTQUFPZ0kscUJBQXFCbE0sSUFBSThRLGlCQUFBQTtBQUNwQztBQXBCc0JEO0FBQUFBLFFBQUFBLGtCQUFBQSxrQkFBQUE7QUNIZixTQUFTSSxxQkFBcUJyTyxNQUE2Qm5DLE1BQWV5USxXQUEyQjtBQUN4RyxTQUF5QixDQUFDalcsUUFBZ0JpRCxXQUFBQTtBQUN0QyxRQUFJLENBQUM5QixNQUFNcUUsSUFBQUEsS0FBUyxDQUFDMFEsU0FBUzFRLElBQUFBLEdBQU87QUFDakMsWUFBTSxJQUFJcEYsTUFBTUMsYUFBYThWLHFCQUFxQjtJQUN0RDtBQUVBM1EsV0FBT0EsUUFBUXZDO0FBRWYsVUFBTTZELFNBQ0Y3RyxRQUFRc0IsWUFBc0VwQixnQkFBZ0JpVyxrQkFBa0JwVyxNQUFBQSxLQUFXLENBQUE7QUFFL0gsUUFBSThHLE9BQU91UCxLQUFLLENBQUN0UCxVQUFVQSxNQUFNOUQsV0FBV0EsVUFBVThELE1BQU12QixTQUFTQSxRQUFRdUIsTUFBTVksU0FBU0EsSUFBQUEsR0FBTztBQUMvRixZQUFNLElBQUl2SCxNQUFNQyxhQUFhaVcscUJBQXFCO0lBQ3REO0FBRUFyVyxZQUFRVSxlQUNKUixnQkFBZ0JpVyxrQkFDaEI7U0FBSXRQO01BQVE7UUFBRTdEO1FBQVF1QztRQUFNbUM7UUFBTXNPO01BQVU7T0FDNUNqVyxNQUFBQTtFQUVSO0FBQ0o7QUFyQmdCZ1c7QUFBQUEsUUFBQUEsc0JBQUFBLHNCQUFBQTtBQ0ZULFNBQVNPLFdBQVdoSyxXQUFpQjtBQUN4QyxTQUFPeUoscUJBQXFCLGNBQWN6SixTQUFBQTtBQUM5QztBQUZnQmdLO0FBQUFBLFFBQUFBLFlBQUFBLFlBQUFBO0FDQVQsU0FBU0MsVUFBVW5KLElBQXFCZCxXQUFrQjtBQUM3RCxTQUFPeUoscUJBQXFCLGFBQWF6SixXQUFXYyxFQUFBQTtBQUN4RDtBQUZnQm1KO0FBQUFBLFFBQUFBLFdBQUFBLFdBQUFBO0FDQVQsU0FBU0MsR0FBR2xLLFdBQWtCO0FBQ2pDLFNBQU95SixxQkFBcUIsTUFBTXpKLFNBQUFBO0FBQ3RDO0FBRmdCa0s7QUFBQUEsUUFBQUEsSUFBQUEsSUFBQUE7QUNBVCxTQUFTQyxhQUFhbkssV0FBaUI7QUFDMUMsU0FBT3lKLHFCQUFxQixnQkFBZ0J6SixTQUFBQTtBQUNoRDtBQUZnQm1LO0FBQUFBLFFBQUFBLGNBQUFBLGNBQUFBO0FDQVQsU0FBU0MsS0FBS3BLLFdBQWtCO0FBQ25DLFNBQU95SixxQkFBcUIsUUFBUXpKLFNBQUFBO0FBQ3hDO0FBRmdCb0s7QUFBQUEsUUFBQUEsTUFBQUEsTUFBQUE7QUNBVCxTQUFTQyxZQUFZdkosSUFBcUJkLFdBQWtCO0FBQy9ELFNBQU95SixxQkFBcUIsZUFBZXpKLFdBQVdjLEVBQUFBO0FBQzFEO0FBRmdCdUo7QUFBQUEsUUFBQUEsYUFBQUEsYUFBQUE7QUNNVCxTQUFTQyxRQUFRM1AsT0FBK0I7QUFDbkQsU0FBNEIsQ0FBQ2xILFFBQWdCaUQsUUFBZ0JOLFVBQUFBO0FBQ3pELFVBQU1nUSxpQkFBMkMsQ0FBQTtBQUNqRCxlQUFXQyxRQUFRMUwsT0FBTztBQUN0QixZQUFNLEVBQUUzRyxPQUFPQyxPQUFPQyxNQUFLLElBQUtvUyxhQUFhRCxJQUFBQTtBQUM3QyxVQUFJLENBQUNyUyxNQUFPLE9BQU0sSUFBSUgsTUFBTUssS0FBQUE7QUFDNUJrUyxxQkFBZXZQLEtBQUs1QyxLQUFBQTtJQUN4QjtBQUVBLFVBQU1zVyxTQUFTN1csUUFBUXNCLFlBQStCcEIsZ0JBQWdCNFcsa0JBQWtCL1csUUFBUWlELE1BQUFBLEtBQVcsQ0FBQTtBQUUzRyxRQUFJNlQsT0FBT1QsS0FBSyxDQUFDVyxVQUFVQSxNQUFNclUsVUFBVUEsS0FBQUEsR0FBUTtBQUMvQyxZQUFNLElBQUl2QyxNQUFNQyxhQUFhNFcsNkNBQTZDO0lBQzlFO0FBRUEsVUFBTUMsYUFBYWpYLFFBQVFzQixZQUF1QixxQkFBcUJ2QixRQUFRaUQsTUFBQUE7QUFDL0UsVUFBTWtVLFdBQVc3SSxNQUFNQyxRQUFRMkksVUFBQUEsSUFBY0EsV0FBV3ZVLEtBQUFBLElBQVN5SDtBQUVqRW5LLFlBQVFVLGVBQ0pSLGdCQUFnQjRXLGtCQUNoQjtTQUFJRDtNQUFRO1FBQUVuVTtRQUFPTTtRQUFRaUUsT0FBT3lMO1FBQWdCaEwsTUFBTXlQLGdCQUFnQlA7UUFBTVEsTUFBTWpOO1FBQVcrTTtNQUFTO09BQzFHblgsUUFDQWlELE1BQUFBO0VBRVI7QUFDSjtBQXpCZ0I0VDtBQUFBQSxRQUFBQSxNQUFBQSxNQUFBQTtBQ0NULFNBQVNTLE1BQU10VyxRQUFnQmtHLE9BQStCO0FBQ2pFLFNBQTRCLENBQUNsSCxRQUFnQmlELFFBQWdCTixVQUFBQTtBQUN6RCxRQUFJLENBQUM0VSxTQUFTdlcsR0FBQUEsR0FBTTtBQUNoQixZQUFNLElBQUlaLE1BQU1DLGFBQWFtWCxvQkFBb0I7SUFDckQ7QUFDQSxVQUFNN0UsaUJBQTJDLENBQUE7QUFDakQsZUFBV0MsUUFBUTFMLE9BQU87QUFDdEIsWUFBTSxFQUFFM0csT0FBT0MsT0FBT0MsTUFBSyxJQUFLb1MsYUFBYUQsSUFBQUE7QUFDN0MsVUFBSSxDQUFDclMsTUFBTyxPQUFNLElBQUlILE1BQU1LLEtBQUFBO0FBQzVCa1MscUJBQWV2UCxLQUFLNUMsS0FBQUE7SUFDeEI7QUFFQSxVQUFNc1csU0FBUzdXLFFBQVFzQixZQUErQnBCLGdCQUFnQjRXLGtCQUFrQi9XLFFBQVFpRCxNQUFBQSxLQUFXLENBQUE7QUFFM0csUUFBSTZULE9BQU9ULEtBQUssQ0FBQ1csVUFBVUEsTUFBTXJVLFVBQVVBLEtBQUFBLEdBQVE7QUFDL0MsWUFBTSxJQUFJdkMsTUFBTUMsYUFBYTRXLDZDQUE2QztJQUM5RTtBQUVBLFVBQU1DLGFBQWFqWCxRQUFRc0IsWUFBdUIscUJBQXFCdkIsUUFBUWlELE1BQUFBO0FBQy9FLFVBQU1rVSxXQUFXN0ksTUFBTUMsUUFBUTJJLFVBQUFBLElBQWNBLFdBQVd2VSxLQUFBQSxJQUFTeUg7QUFFakVuSyxZQUFRVSxlQUNKUixnQkFBZ0I0VyxrQkFDaEI7U0FBSUQ7TUFBUTtRQUFFblU7UUFBT007UUFBUWlFLE9BQU95TDtRQUFnQmhMLE1BQU15UCxnQkFBZ0JFO1FBQU9ELE1BQU1yVztRQUFLbVc7TUFBUztPQUNyR25YLFFBQ0FpRCxNQUFBQTtFQUVSO0FBQ0o7QUE1QmdCcVU7QUFBQUEsUUFBQUEsT0FBQUEsT0FBQUE7QUNIVCxTQUFTRyxVQUFBQTtBQUNaLFNBQTRCLENBQUN6WCxRQUFnQmlELFFBQWdCTixVQUFBQTtBQUN6RCxVQUFNbVUsU0FBUzdXLFFBQVFzQixZQUErQnBCLGdCQUFnQjRXLGtCQUFrQi9XLFFBQVFpRCxNQUFBQSxLQUFXLENBQUE7QUFFM0csUUFBSTZULE9BQU9ULEtBQUssQ0FBQ1csVUFBVUEsTUFBTXJVLFVBQVVBLEtBQUFBLEdBQVE7QUFDL0MsWUFBTSxJQUFJdkMsTUFBTUMsYUFBYTRXLDZDQUE2QztJQUM5RTtBQUVBLFVBQU1DLGFBQWFqWCxRQUFRc0IsWUFBdUIscUJBQXFCdkIsUUFBUWlELE1BQUFBO0FBQy9FLFVBQU1rVSxXQUFXN0ksTUFBTUMsUUFBUTJJLFVBQUFBLElBQWNBLFdBQVd2VSxLQUFBQSxJQUFTeUg7QUFFakVuSyxZQUFRVSxlQUNKUixnQkFBZ0I0VyxrQkFDaEI7U0FBSUQ7TUFBUTtRQUFFblU7UUFBT007UUFBUTBFLE1BQU15UCxnQkFBZ0JLO1FBQVNKLE1BQU1qTjtRQUFXK007TUFBUztPQUN0Rm5YLFFBQ0FpRCxNQUFBQTtFQUVSO0FBQ0o7QUFsQmdCd1U7QUFBQUEsUUFBQUEsU0FBQUEsU0FBQUE7QUFvQlQsU0FBU0MsTUFBQUE7QUFDWixTQUFPRCxRQUFBQTtBQUNYO0FBRmdCQztBQUFBQSxRQUFBQSxLQUFBQSxLQUFBQTtBQ2pCVCxTQUFTQyxNQUFNM1csUUFBZ0JrRyxPQUErQjtBQUNqRSxTQUE0QixDQUFDbEgsUUFBZ0JpRCxRQUFnQk4sVUFBQUE7QUFDekQsUUFBSSxDQUFDdVQsU0FBU2xWLEdBQUFBLEdBQU07QUFDaEIsWUFBTSxJQUFJWixNQUFNQyxhQUFhdVgsb0JBQW9CO0lBQ3JEO0FBQ0EsVUFBTWpGLGlCQUEyQyxDQUFBO0FBQ2pELGVBQVdDLFFBQVExTCxPQUFPO0FBQ3RCLFlBQU0sRUFBRTNHLE9BQU9DLE9BQU9DLE1BQUssSUFBS29TLGFBQWFELElBQUFBO0FBQzdDLFVBQUksQ0FBQ3JTLE1BQU8sT0FBTSxJQUFJSCxNQUFNSyxLQUFBQTtBQUM1QmtTLHFCQUFldlAsS0FBSzVDLEtBQUFBO0lBQ3hCO0FBRUEsVUFBTXNXLFNBQVM3VyxRQUFRc0IsWUFBK0JwQixnQkFBZ0I0VyxrQkFBa0IvVyxRQUFRaUQsTUFBQUEsS0FBVyxDQUFBO0FBRTNHLFFBQUk2VCxPQUFPVCxLQUFLLENBQUNXLFVBQVVBLE1BQU1yVSxVQUFVQSxLQUFBQSxHQUFRO0FBQy9DLFlBQU0sSUFBSXZDLE1BQU1DLGFBQWE0Vyw2Q0FBNkM7SUFDOUU7QUFFQSxVQUFNQyxhQUFhalgsUUFBUXNCLFlBQXVCLHFCQUFxQnZCLFFBQVFpRCxNQUFBQTtBQUMvRSxVQUFNa1UsV0FBVzdJLE1BQU1DLFFBQVEySSxVQUFBQSxJQUFjQSxXQUFXdlUsS0FBQUEsSUFBU3lIO0FBRWpFbkssWUFBUVUsZUFDSlIsZ0JBQWdCNFcsa0JBQ2hCO1NBQUlEO01BQVE7UUFBRW5VO1FBQU9NO1FBQVFvVSxNQUFNclc7UUFBS2tHLE9BQU95TDtRQUFnQmhMLE1BQU15UCxnQkFBZ0JPO1FBQU9SO01BQVM7T0FDckduWCxRQUNBaUQsTUFBQUE7RUFFUjtBQUNKO0FBNUJnQjBVO0FBQUFBLFFBQUFBLE9BQUFBLE9BQUFBO0FDSFQsU0FBU0UsV0FBQUE7QUFDWixTQUE0QixDQUFDN1gsUUFBZ0JpRCxRQUFnQk4sVUFBQUE7QUFDekQsVUFBTW1VLFNBQVM3VyxRQUFRc0IsWUFBK0JwQixnQkFBZ0I0VyxrQkFBa0IvVyxRQUFRaUQsTUFBQUEsS0FBVyxDQUFBO0FBRTNHLFFBQUk2VCxPQUFPVCxLQUFLLENBQUNXLFVBQVVBLE1BQU1yVSxVQUFVQSxLQUFBQSxHQUFRO0FBQy9DLFlBQU0sSUFBSXZDLE1BQU1DLGFBQWE0Vyw2Q0FBNkM7SUFDOUU7QUFFQSxVQUFNQyxhQUFhalgsUUFBUXNCLFlBQXVCLHFCQUFxQnZCLFFBQVFpRCxNQUFBQTtBQUMvRSxVQUFNa1UsV0FBVzdJLE1BQU1DLFFBQVEySSxVQUFBQSxJQUFjQSxXQUFXdlUsS0FBQUEsSUFBU3lIO0FBRWpFbkssWUFBUVUsZUFDSlIsZ0JBQWdCNFcsa0JBQ2hCO1NBQUlEO01BQVE7UUFBRW5VO1FBQU9NO1FBQVEwRSxNQUFNeVAsZ0JBQWdCUztRQUFVUixNQUFNak47UUFBVytNO01BQVM7T0FDdkZuWCxRQUNBaUQsTUFBQUE7RUFFUjtBQUNKO0FBbEJnQjRVO0FBQUFBLFFBQUFBLFVBQUFBLFVBQUFBO0FBb0JULFNBQVNDLE1BQUFBO0FBQ1osU0FBT0QsU0FBQUE7QUFDWDtBQUZnQkM7QUFBQUEsUUFBQUEsS0FBQUEsS0FBQUE7QUNuQlQsU0FBU0MsYUFBYS9RLFFBQWtDO0FBQzNELFNBQTBDLENBQUNoSCxRQUFnQmlELFFBQWlCYixlQUFBQTtBQUN4RSxVQUFNNlAsa0JBQThDLENBQUE7QUFDcEQsZUFBV0MsU0FBU2xMLFFBQVE7QUFDeEIsWUFBTSxFQUFFekcsT0FBT0MsT0FBT0MsTUFBSyxJQUFLMFIsY0FBY0QsS0FBQUE7QUFDOUMsVUFBSSxDQUFDM1IsTUFBTyxPQUFNLElBQUlILE1BQU1LLEtBQUFBO0FBQzVCd1Isc0JBQWdCN08sS0FBSzVDLEtBQUFBO0lBQ3pCO0FBRUEsUUFBSSxDQUFDVyxNQUFNaUIsVUFBQUEsS0FBZSxDQUFDakIsTUFBTWlCLFdBQVc1QixLQUFLLEdBQUc7QUFDaEQsVUFBSXdHLE9BQU9uRSxXQUFXLEdBQUc7QUFDckIsY0FBTSxJQUFJekMsTUFBTUMsYUFBYTJYLHVCQUF1QjtNQUN4RDtBQUVBLFlBQU1DLGVBQWVoWSxRQUFRc0IsWUFBOEJwQixnQkFBZ0IrWCxRQUFRbFksT0FBTyxhQUFhaUQsTUFBQUEsS0FBVyxDQUFBO0FBQ2xIaEQsY0FBUVUsZUFBZVIsZ0JBQWdCK1gsUUFBUTtXQUFJakc7V0FBb0JnRztTQUFlalksT0FBTyxhQUFhaUQsTUFBQUE7QUFDMUcsYUFBT2I7SUFDWDtBQUVBLFFBQUk0RSxPQUFPbkUsV0FBVyxHQUFHO0FBQ3JCLFlBQU0sSUFBSXpDLE1BQU1DLGFBQWEyWCx1QkFBdUI7SUFDeEQ7QUFFQSxVQUFNRyxjQUFjbFksUUFBUXNCLFlBQThCcEIsZ0JBQWdCK1gsUUFBUWxZLE1BQUFBLEtBQVcsQ0FBQTtBQUM3RkMsWUFBUVUsZUFBZVIsZ0JBQWdCK1gsUUFBUTtTQUFJakc7U0FBb0JrRztPQUFjblksTUFBQUE7QUFDckYsV0FBT0E7RUFDWDtBQUNKO0FBM0JnQitYO0FBQUFBLFFBQUFBLFdBQUFBLFdBQUFBO0FDQVQsU0FBU0ssbUJBQW1CblIsY0FBb0Q7QUFDbkYsU0FBMEMsQ0FBQ2pILFFBQWdCaUQsUUFBaUJiLGVBQUFBO0FBQ3hFLFVBQU1rUSx3QkFBZ0UsQ0FBQTtBQUN0RSxlQUFXQyxlQUFldEwsY0FBYztBQUNwQyxZQUFNLEVBQUUxRyxPQUFPQyxPQUFPQyxNQUFLLElBQUsrUixvQkFBb0JELFdBQUFBO0FBQ3BELFVBQUksQ0FBQ2hTLE1BQU8sT0FBTSxJQUFJSCxNQUFNSyxLQUFBQTtBQUM1QjZSLDRCQUFzQmxQLEtBQUs1QyxLQUFBQTtJQUMvQjtBQUVBLFFBQUksQ0FBQ1csTUFBTWlCLFVBQUFBLEtBQWUsQ0FBQ2pCLE1BQU1pQixXQUFXNUIsS0FBSyxHQUFHO0FBQ2hELFVBQUl5RyxhQUFhcEUsV0FBVyxHQUFHO0FBQzNCLGNBQU0sSUFBSXpDLE1BQU1DLGFBQWFnWSw2QkFBNkI7TUFDOUQ7QUFFQSxZQUFNQyxxQkFDRnJZLFFBQVFzQixZQUFvQ3BCLGdCQUFnQm9ZLGNBQWN2WSxPQUFPLGFBQWFpRCxNQUFBQSxLQUFXLENBQUE7QUFDN0doRCxjQUFRVSxlQUNKUixnQkFBZ0JvWSxjQUNoQjtXQUFJakc7V0FBMEJnRztTQUM5QnRZLE9BQU8sYUFDUGlELE1BQUFBO0FBRUosYUFBT2I7SUFDWDtBQUVBLFFBQUk2RSxhQUFhcEUsV0FBVyxHQUFHO0FBQzNCLFlBQU0sSUFBSXpDLE1BQU1DLGFBQWFnWSw2QkFBNkI7SUFDOUQ7QUFFQSxVQUFNRyxvQkFBb0J2WSxRQUFRc0IsWUFBb0NwQixnQkFBZ0JvWSxjQUFjdlksTUFBQUEsS0FBVyxDQUFBO0FBQy9HQyxZQUFRVSxlQUFlUixnQkFBZ0JvWSxjQUFjO1NBQUlqRztTQUEwQmtHO09BQW9CeFksTUFBQUE7QUFDdkcsV0FBT0E7RUFDWDtBQUNKO0FBakNnQm9ZO0FBQUFBLFFBQUFBLGlCQUFBQSxpQkFBQUE7QUNBVCxTQUFTSyxZQUFZdlIsT0FBK0I7QUFDdkQsU0FBMEMsQ0FBQ2xILFFBQWdCaUQsUUFBaUJiLGVBQUFBO0FBQ3hFLFVBQU11USxpQkFBMkMsQ0FBQTtBQUNqRCxlQUFXQyxRQUFRMUwsT0FBTztBQUN0QixZQUFNLEVBQUUzRyxPQUFPQyxPQUFPQyxNQUFLLElBQUtvUyxhQUFhRCxJQUFBQTtBQUM3QyxVQUFJLENBQUNyUyxNQUFPLE9BQU0sSUFBSUgsTUFBTUssS0FBQUE7QUFDNUJrUyxxQkFBZXZQLEtBQUs1QyxLQUFBQTtJQUN4QjtBQUVBLFFBQUksQ0FBQ1csTUFBTWlCLFVBQUFBLEtBQWUsQ0FBQ2pCLE1BQU1pQixXQUFXNUIsS0FBSyxHQUFHO0FBQ2hELFVBQUkwRyxNQUFNckUsV0FBVyxHQUFHO0FBQ3BCLGNBQU0sSUFBSXpDLE1BQU1DLGFBQWFxWSxzQkFBc0I7TUFDdkQ7QUFFQSxZQUFNQyxjQUFjMVksUUFBUXNCLFlBQTZCcEIsZ0JBQWdCeVksT0FBTzVZLE9BQU8sYUFBYWlELE1BQUFBLEtBQVcsQ0FBQTtBQUMvR2hELGNBQVFVLGVBQWVSLGdCQUFnQnlZLE9BQU87V0FBSWpHO1dBQW1CZ0c7U0FBYzNZLE9BQU8sYUFBYWlELE1BQUFBO0FBQ3ZHLGFBQU9iO0lBQ1g7QUFFQSxRQUFJOEUsTUFBTXJFLFdBQVcsR0FBRztBQUNwQixZQUFNLElBQUl6QyxNQUFNQyxhQUFhcVksc0JBQXNCO0lBQ3ZEO0FBRUEsVUFBTUcsYUFBYTVZLFFBQVFzQixZQUE2QnBCLGdCQUFnQnlZLE9BQU81WSxNQUFBQSxLQUFXLENBQUE7QUFDMUZDLFlBQVFVLGVBQWVSLGdCQUFnQnlZLE9BQU87U0FBSWpHO1NBQW1Ca0c7T0FBYTdZLE1BQUFBO0FBQ2xGLFdBQU9BO0VBQ1g7QUFDSjtBQTNCZ0J5WTtBQUFBQSxRQUFBQSxVQUFBQSxVQUFBQTtBQ0hULFNBQVNLLG1CQUFtQm5SLE1BQTJCbkMsTUFBZXlRLFdBQTJCO0FBQ3BHLFNBQXlCLENBQUNqVyxRQUFnQmlELFdBQUFBO0FBQ3RDLFFBQUksQ0FBQzlCLE1BQU04VSxTQUFBQSxLQUFjLENBQUNDLFNBQVNELFNBQUFBLEtBQWMsQ0FBQ3NCLFNBQVN0QixTQUFBQSxHQUFZO0FBQ25FLFlBQU0sSUFBSTdWLE1BQU1DLGFBQWEwWSw2QkFBNkI7SUFDOUQ7QUFFQSxRQUFJLENBQUM1WCxNQUFNcUUsSUFBQUEsS0FBUyxDQUFDMFEsU0FBUzFRLElBQUFBLEdBQU87QUFDakMsWUFBTSxJQUFJcEYsTUFBTUMsYUFBYTJZLG1CQUFtQjtJQUNwRDtBQUVBeFQsV0FBT0EsUUFBUXZDO0FBRWYsVUFBTXNFLE9BQ0Z0SCxRQUFRc0IsWUFBb0VwQixnQkFBZ0I4WSxnQkFBZ0JqWixNQUFBQSxLQUFXLENBQUE7QUFFM0gsUUFBSXVILEtBQUs4TyxLQUFLLENBQUM3TyxRQUFRQSxJQUFJdkUsV0FBV0EsVUFBVXVFLElBQUloQyxTQUFTQSxRQUFRZ0MsSUFBSUcsU0FBU0EsSUFBQUEsR0FBTztBQUNyRixZQUFNLElBQUl2SCxNQUFNQyxhQUFhNlksbUJBQW1CO0lBQ3BEO0FBRUFqWixZQUFRVSxlQUNKUixnQkFBZ0I4WSxnQkFDaEI7U0FBSTFSO01BQU07UUFBRXRFO1FBQVF1QztRQUFNbUM7UUFBTXNPO01BQVU7T0FDMUNqVyxNQUFBQTtFQUVSO0FBQ0o7QUF6QmdCOFk7QUFBQUEsUUFBQUEsb0JBQUFBLG9CQUFBQTtBQ0ZULFNBQVNLLFVBQVVDLFNBQWdCO0FBQ3RDLFNBQU9OLG1CQUFtQixhQUFhTSxPQUFBQTtBQUMzQztBQUZnQkQ7QUFBQUEsUUFBQUEsV0FBQUEsV0FBQUE7QUNBVCxTQUFTRSxpQkFBaUJoTSxJQUFxQitMLFNBQWdCO0FBQ2xFLFNBQU9OLG1CQUFtQixvQkFBb0JNLFNBQVMvTCxFQUFBQTtBQUMzRDtBQUZnQmdNO0FBQUFBLFFBQUFBLGtCQUFBQSxrQkFBQUE7QUNFVCxTQUFTQyxxQkFBcUIzUixNQUE2Qm5DLE1BQWV6RixTQUFrQztBQUMvRyxTQUF5QixDQUFDQyxRQUFnQmlELFdBQUFBO0FBQ3RDLFFBQUksQ0FBQzlCLE1BQU1xRSxJQUFBQSxLQUFTLENBQUMwUSxTQUFTMVEsSUFBQUEsR0FBTztBQUNqQyxZQUFNLElBQUlwRixNQUFNQyxhQUFha1oscUJBQXFCO0lBQ3REO0FBRUEvVCxXQUFPQSxRQUFRdkM7QUFFZixVQUFNeUUsU0FBU3pILFFBQVFzQixZQUE2QnBCLGdCQUFnQjJQLFFBQVE5UCxNQUFBQSxLQUFXLENBQUE7QUFFdkYsUUFBSTBILE9BQU8yTyxLQUFLLENBQUNqUSxVQUFVQSxNQUFNbkQsV0FBV0EsVUFBVW1ELE1BQU1aLFNBQVNBLFFBQVFZLE1BQU11QixTQUFTQSxJQUFBQSxHQUFPO0FBQy9GLFlBQU0sSUFBSXZILE1BQU1DLGFBQWFpVyxxQkFBcUI7SUFDdEQ7QUFFQXJXLFlBQVFVLGVBQ0pSLGdCQUFnQjJQLFFBQ2hCO1NBQUlwSTtNQUF1QjtRQUFFekU7UUFBUXVDO1FBQU1tQztRQUFNNUg7TUFBUTtPQUN6REMsTUFBQUE7RUFFUjtBQUNKO0FBcEJnQnNaO0FBQUFBLFFBQUFBLHNCQUFBQSxzQkFBQUE7QUNEVCxTQUFTRSxNQUFLQyxTQUF3QjFaLFVBQXVCLENBQUMsR0FBQztBQUNsRSxTQUFPdVoscUJBQXFCLFFBQVF2WixRQUFReUYsTUFBTTtJQUFFaVU7SUFBUyxHQUFHMVo7RUFBUSxDQUFBO0FBQzVFO0FBRmdCeVosT0FBQUEsT0FBQUE7QUFBQUEsUUFBQUEsT0FBQUEsTUFBQUE7QUNEVCxTQUFTRSxVQUFVbFUsTUFBYTtBQUNuQyxTQUFPOFQscUJBQXFCLGFBQWE5VCxJQUFBQTtBQUM3QztBQUZnQmtVO0FBQUFBLFFBQUFBLFdBQUFBLFdBQUFBO0FDR1QsU0FBU0MsU0FBU0MsZUFBZ0M1UixTQUFnQjtBQUNyRSxRQUFNLENBQUN4QyxNQUFNcVUsZUFBQUEsSUFBbUIzRCxTQUFTMEQsYUFBQUEsSUFBaUI7SUFBQ0E7SUFBZTVSO01BQVc7SUFBQ29DO0lBQVd3UDs7QUFDakcsU0FBT04scUJBQXFCLFlBQVk5VCxNQUFNO0lBQUV3QyxTQUFTNlI7RUFBaUIsQ0FBQTtBQUM5RTtBQUhnQkY7QUFBQUEsUUFBQUEsVUFBQUEsVUFBQUE7QUNBVCxTQUFTRyxRQUFRRixlQUFnQzVSLFNBQWdCO0FBQ3BFLFFBQU0sQ0FBQ3hDLE1BQU1xVSxlQUFBQSxJQUFtQjNELFNBQVMwRCxhQUFBQSxJQUFpQjtJQUFDQTtJQUFlNVI7TUFBVztJQUFDb0M7SUFBV3dQOztBQUNqRyxTQUFPTixxQkFBcUIsV0FBVzlULE1BQU07SUFBRXdDLFNBQVM2UjtFQUFpQixDQUFBO0FBQzdFO0FBSGdCQztBQUFBQSxRQUFBQSxTQUFBQSxTQUFBQTtBQ0xULFNBQVNDLG1CQUFtQkMsWUFBb0U7QUFDbkcsU0FBTyxDQUNIaGEsUUFDQWlCLGFBQ0FtQixlQUFBQTtBQUVBLGVBQVc2WCxhQUFhRCxZQUFZO0FBQ2hDLFVBQUloYSxrQkFBa0JrYSxZQUFZLENBQUM5WCxZQUFZO0FBQzFCNlgsa0JBQVdqYSxNQUFBQTtBQUM1QjtNQUNKO0FBQ3NDaWEsZ0JBQVdqYSxRQUFRaUIsYUFBYW1CLFVBQUFBO0lBQzFFO0VBQ0o7QUFDSjtBQWRnQjJYO0FBQUFBLFFBQUFBLGlCQUFBQSxpQkFBQUE7QUNRVCxTQUFTSSxxQkFBMERDLFNBQXlEO0FBQy9ILFNBQU8sQ0FBbUIvQyxTQUFrQm5RLFVBQUFBO0FBQ3hDLFdBQTRCLENBQUNsSCxRQUFnQmlELFFBQWdCTixVQUFBQTtBQUN6RCxZQUFNZ1EsaUJBQTJDLENBQUE7QUFDakQsaUJBQVdDLFFBQVExTCxPQUFPO0FBQ3RCLGNBQU0sRUFBRTNHLE9BQU9DLE9BQU9DLE1BQUssSUFBS29TLGFBQWFELElBQUFBO0FBQzdDLFlBQUksQ0FBQ3JTLE1BQU8sT0FBTSxJQUFJSCxNQUFNSyxLQUFBQTtBQUM1QmtTLHVCQUFldlAsS0FBSzVDLEtBQUFBO01BQ3hCO0FBRUEsWUFBTXNXLFNBQVM3VyxRQUFRc0IsWUFBK0JwQixnQkFBZ0I0VyxrQkFBa0IvVyxRQUFRaUQsTUFBQUEsS0FBVyxDQUFBO0FBRTNHLFVBQUk2VCxPQUFPVCxLQUFLLENBQUNXLFVBQVVBLE1BQU1yVSxVQUFVQSxLQUFBQSxHQUFRO0FBQy9DLGNBQU0sSUFBSXZDLE1BQU1DLGFBQWE0Vyw2Q0FBNkM7TUFDOUU7QUFFQSxZQUFNQyxhQUFhalgsUUFBUXNCLFlBQXVCLHFCQUFxQnZCLFFBQVFpRCxNQUFBQTtBQUMvRSxZQUFNa1UsV0FBVzdJLE1BQU1DLFFBQVEySSxVQUFBQSxJQUFjQSxXQUFXdlUsS0FBQUEsSUFBU3lIO0FBRWpFbkssY0FBUVUsZUFDSlIsZ0JBQWdCNFcsa0JBQ2hCO1dBQ09EO1FBQ0g7VUFDSW5VO1VBQ0FNO1VBQ0FpRSxPQUFPeUw7VUFDUGhMLE1BQU15UCxnQkFBZ0JpRDtVQUN0QkQ7VUFDQS9DO1VBQ0FGO1FBQ0o7U0FFSm5YLFFBQ0FpRCxNQUFBQTtJQUVSO0VBQ0o7QUFDSjtBQXRDZ0JrWDtBQUFBQSxRQUFBQSxzQkFBQUEsc0JBQUFBO0FDTlQsU0FBU0csV0FBd0JDLElBQXlDO0FBQzdFLFNBQU8sSUFBSUMsc0JBQXlCRCxFQUFBQTtBQUN4QztBQUZnQkQ7QUFBQUEsUUFBQUEsWUFBQUEsWUFBQUE7Ozs7Ozs7OztBaERLVCxJQUFNekcsb0JBQU4sTUFBTUE7U0FBQUE7OztTQUFBQTs7O0VBQ0Y5TyxJQUE4RDBWLGFBQW1CemEsUUFBNEI7QUFDaEgsV0FBT0MsUUFBUXNCLFlBQXFCa1osYUFBYXphLE1BQUFBO0VBQ3JEO0VBRU8wYSxPQUNIRCxhQUNBRSxTQUNGO0FBQ0UsWUFBaUJBLFdBQVcsQ0FBQSxHQUFJblMsSUFBSSxDQUFDeEksV0FBVyxLQUFLK0UsSUFBSTBWLGFBQWF6YSxNQUFBQSxDQUFBQTtFQUMxRTtFQUVPNGEsZUFDSEgsYUFDQUUsU0FDRjtBQUNFLFVBQU1FLHFCQUFxQixLQUFLSCxPQUFzQkQsYUFBYUUsT0FBQUEsRUFBU2xZLE9BQU8sQ0FBQ3FZLFNBQVNBLFNBQVMxUSxNQUFBQTtBQUV0RyxRQUFJMlEsUUFBUUYsa0JBQUFBLEVBQXFCLFFBQWdCQTtBQUVqRCxXQUFnQkEsbUJBQW1CRyxPQUFPLENBQUMzSyxHQUFHNEssTUFBQUE7QUFDMUMsVUFBSTNNLE1BQU1DLFFBQVE4QixDQUFBQSxHQUFJO0FBQ2xCLGVBQU9BLEVBQUU2SyxPQUFPRCxDQUFBQTtNQUNwQjtBQUNBLFVBQUl4UyxTQUFTNEgsQ0FBQUEsS0FBTTVILFNBQVN3UyxDQUFBQSxHQUFJO0FBQzVCLGVBQU87VUFDSCxHQUFHNUs7VUFDSCxHQUFHNEs7UUFDUDtNQUNKO0FBQ0EsYUFBTztRQUFDNUs7UUFBRzRLOztJQUNmLENBQUE7RUFDSjtFQUVPRSxrQkFBNEVWLGFBQW1CRSxTQUFpQztBQUNuSSxlQUFXM2EsVUFBVTJhLFNBQVM7QUFDMUIsWUFBTVMsU0FBUyxLQUFLclcsSUFBSTBWLGFBQWF6YSxNQUFBQTtBQUNyQyxVQUFJb2IsV0FBV2hSLE9BQVcsUUFBZ0JnUjtJQUM5QztBQUNBLFdBQU9oUjtFQUNYO0VBTUEsT0FBY2lSLGdCQUNWdGIsVUFBd0QsQ0FBQyxHQUNmO0FBQzFDLFVBQU0wYSxjQUFjMWEsUUFBUWlCLE9BQU9zYSxpQkFBQUE7QUFDbkMsVUFBTUMsY0FBYyxnQkFBQXJaLFFBQUEsQ0FBQ3NaLGtCQUEwQixDQUFDeGIsUUFBMkJnQixLQUF1Qm9CLGVBQUFBO0FBQzlGLFlBQU01QixRQUFRVCxRQUFRMGIsWUFBWTFiLFFBQVEwYixVQUFVRCxhQUFBQSxJQUFpQkE7QUFDckV4WixrQkFBWXlZLGFBQWFqYSxTQUFTLENBQUMsQ0FBQSxFQUFHUixRQUFRZ0IsS0FBTW9CLFVBQUFBO0lBQ3hELEdBSG9CLGFBQUE7QUFLcEJtWixnQkFBWWxaLE1BQU1vWTtBQUNsQixXQUFPYztFQUNYO0FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7O0FpRDNETyxJQUFNM1IsZUFBTixNQUFNQTtTQUFBQTs7O1NBQUFBOzs7RUFDcUNrSTtFQUM3QjRKLGNBQWMsb0JBQUlwUSxJQUFBQTtFQUNsQnFRLGFBQWEsb0JBQUlyUSxJQUFBQTtFQUNqQnNRLFlBQVksb0JBQUl0USxJQUFBQTtFQUNoQnVRLFNBQVMsb0JBQUl2USxJQUFBQTtFQUU5QixJQUFXL0MsTUFBTTtBQUNiLFdBQU8sS0FBS3VKLG1CQUFtQmhDLE9BQU92SDtFQUMxQztFQUVBLElBQVdwQyxhQUFhO0FBQ3BCLFdBQU87U0FBSSxLQUFLdVYsWUFBWTVOLE9BQU07O0VBQ3RDO0VBRUEsSUFBV3hILFlBQVk7QUFDbkIsV0FBTztTQUFJLEtBQUtxVixXQUFXN04sT0FBTTs7RUFDckM7RUFFQSxJQUFXdkgsV0FBVztBQUNsQixXQUFPO1NBQUksS0FBS3FWLFVBQVU5TixPQUFNOztFQUNwQztFQUVBLElBQVd0SCxRQUFRO0FBQ2YsV0FBTztTQUFJLEtBQUtxVixPQUFPL04sT0FBTTs7RUFDakM7RUFFQSxJQUFXQyxpQkFBaUJ2TixPQUFlO0FBQ3ZDLFNBQUtzUixtQkFBbUJoQyxPQUFPL0IsbUJBQW1Cdk47RUFDdEQ7RUFFQSxJQUFXdU4sbUJBQW1CO0FBQzFCLFdBQU8sS0FBSytELG1CQUFtQmhDLE9BQU8vQjtFQUMxQztFQUVBLElBQVdFLDZCQUE2QnpOLE9BQWU7QUFDbkQsU0FBS3NSLG1CQUFtQmhDLE9BQU83QiwrQkFBK0J6TjtFQUNsRTtFQUVBLElBQVd5TiwrQkFBK0I7QUFDdEMsV0FBTyxLQUFLNkQsbUJBQW1CaEMsT0FBTzdCO0VBQzFDO0VBRU9yRyxjQUFjMkYsVUFBb0J4TixTQUFtRDtBQUN4RixVQUFNLEVBQUUwWixTQUFTLEdBQUdxQyxZQUFBQSxJQUFnQi9iO0FBRXBDLFVBQU0wRyxPQUFPK1MsS0FBS0MsU0FBU3FDLGFBQWF2TyxRQUFBQTtBQUN4QyxRQUFJMkksU0FBU25XLFFBQVF5RixJQUFJLEVBQUcsTUFBS3FXLE9BQU90USxJQUFJeEwsUUFBUXlGLE1BQU1pQixJQUFBQTtBQUUxRCxXQUFPQTtFQUNYO0VBRU9zQixlQUFld0YsVUFBb0JELFVBQWtCOUgsTUFBZTtBQUN2RSxVQUFNWSxRQUFRLEtBQUswTCxtQkFBbUJoQyxPQUFPbkIsWUFBWXBCLFVBQVVELFFBQUFBO0FBQ25FLFFBQUk0SSxTQUFTMVEsSUFBQUEsRUFBTyxNQUFLbVcsV0FBV3BRLElBQUkvRixNQUFNWSxLQUFBQTtBQUM5QyxXQUFPQTtFQUNYO0VBRU82QixjQUFjc0YsVUFBb0J2RixTQUFpQnhDLE1BQWU7QUFDckUsVUFBTVksUUFBUSxLQUFLMEwsbUJBQW1CaEMsT0FBT2hCLFdBQVd2QixVQUFVdkYsT0FBQUE7QUFDbEUsUUFBSWtPLFNBQVMxUSxJQUFBQSxFQUFPLE1BQUtvVyxVQUFVclEsSUFBSS9GLE1BQU1ZLEtBQUFBO0FBQzdDLFdBQU9BO0VBQ1g7RUFFTzBCLGdCQUFnQnlGLFVBQW9CL0gsTUFBZTtBQUN0RCxVQUFNWSxRQUFRLEtBQUswTCxtQkFBbUJoQyxPQUFPZCxVQUFVekIsUUFBQUE7QUFDdkQsUUFBSTJJLFNBQVMxUSxJQUFBQSxFQUFPLE1BQUtrVyxZQUFZblEsSUFBSS9GLE1BQU1ZLEtBQUFBO0FBQy9DLFdBQU9BO0VBQ1g7RUFFT3NJLE9BQU8vRyxNQUFxRG5DLE1BQWM7QUFDN0UsWUFBUW1DLE1BQUFBO01BQ0osS0FBSztBQUNELGNBQU1vVSxVQUFVLEtBQUtGLE9BQU85VyxJQUFJUyxJQUFBQTtBQUNoQyxZQUFJdVcsU0FBUztBQUNUQSxrQkFBUXJWLEtBQUk7QUFDWixlQUFLbVYsT0FBT25OLE9BQU9sSixJQUFBQTtRQUN2QjtBQUNBO01BQ0osS0FBSztBQUNELGNBQU13VyxZQUFZLEtBQUtOLFlBQVkzVyxJQUFJUyxJQUFBQTtBQUN2QyxZQUFJd1csV0FBVztBQUNYQSxvQkFBVTNWLFFBQU87QUFDakIsZUFBS3FWLFlBQVloTixPQUFPbEosSUFBQUE7UUFDNUI7QUFDQTtNQUNKLEtBQUs7QUFDRCxjQUFNOEgsV0FBVyxLQUFLcU8sV0FBVzVXLElBQUlTLElBQUFBO0FBQ3JDLFlBQUk4SCxVQUFVO0FBQ1ZBLG1CQUFTakgsUUFBTztBQUNoQixlQUFLc1YsV0FBV2pOLE9BQU9sSixJQUFBQTtRQUMzQjtBQUNBO01BQ0osS0FBSztBQUNELGNBQU13QyxVQUFVLEtBQUs0VCxVQUFVN1csSUFBSVMsSUFBQUE7QUFDbkMsWUFBSXdDLFNBQVM7QUFDVEEsa0JBQVEzQixRQUFPO0FBQ2YsZUFBS3VWLFVBQVVsTixPQUFPbEosSUFBQUE7UUFDMUI7QUFDQTtJQUNSO0VBQ0o7RUFFT3lXLFVBQVV0VSxNQUFxRG5DLE1BQWM7QUFDaEYsWUFBUW1DLE1BQUFBO01BQ0osS0FBSztBQUNELGVBQU8sS0FBS2tVLE9BQU85VyxJQUFJUyxJQUFBQTtNQUMzQixLQUFLO0FBQ0QsZUFBTyxLQUFLa1csWUFBWTNXLElBQUlTLElBQUFBO01BQ2hDLEtBQUs7QUFDRCxlQUFPLEtBQUttVyxXQUFXNVcsSUFBSVMsSUFBQUE7TUFDL0IsS0FBSztBQUNELGVBQU8sS0FBS29XLFVBQVU3VyxJQUFJUyxJQUFBQTtJQUNsQztFQUNKO0VBRU8wVyxRQUFRN08sSUFBWTtBQUN2QixXQUFPLEtBQUt5RSxtQkFBbUJoQyxPQUFPNUIsUUFBUWIsRUFBQUE7RUFDbEQ7RUFFT3pILEtBQUtKLE1BQWU7QUFDdkIsV0FBTyxLQUFLc00sbUJBQW1CaEMsT0FBT2xLLEtBQUtKLElBQUFBO0VBQy9DO0VBRU9vSyxRQUFRcEssTUFBZTtBQUMxQixXQUFPLEtBQUtzTSxtQkFBbUJoQyxPQUFPRixRQUFRcEssSUFBQUE7RUFDbEQ7QUFDSjs7Ozs7Ozs7OztBRXJJQSxTQUFTMlcsY0FBQUEsb0JBQWtCO0FDQTNCLFNBQVNDLFVBQUFBLFNBQVFELGNBQUFBLG9CQUFrQjs7Ozs7Ozs7Ozs7Ozs7QURNNUIsSUFBZUUsbUJBQWYsTUFBZUE7U0FBQUE7OztTQUFBQTs7OztFQUNDQyxpQkFBMEMsb0JBQUlDLElBQUFBO0VBQzlDQyxvQkFBNkMsb0JBQUlELElBQUFBO0VBQ2pERSxrQkFBMkMsb0JBQUlGLElBQUFBO0VBQ3hERyxzQkFBc0Isb0JBQUlILElBQUFBO0VBQ3BDLFlBQXNCSSxlQUE2QjtTQUE3QkEsZ0JBQUFBO0VBQThCO0VBSTdDQyxHQUFxQkMsV0FBZ0NDLFVBQW1EO0FBQzNHLFVBQU1DLFVBQVUsZ0JBQUFDLFFBQUEsSUFBSUMsU0FBZ0JILFNBQVNHLEtBQUssQ0FBQSxDQUFFLEdBQXBDLFNBQUE7QUFDaEIsVUFBTUMsZUFBbUMsS0FBS1AsY0FBY0MsR0FBR0MsV0FBV0UsT0FBQUE7QUFDMUUsU0FBS1QsZUFBZWEsSUFBSUQsWUFBQUE7QUFDeEIsV0FBT0E7RUFDWDtFQUdPRSxLQUF1QlAsV0FBZ0NDLFVBQW1EO0FBQzdHLFVBQU1DLFVBQVUsZ0JBQUFDLFFBQUEsSUFBSUMsU0FBZ0JILFNBQVNHLEtBQUssQ0FBQSxDQUFFLEdBQXBDLFNBQUE7QUFDaEIsVUFBTUMsZUFBbUMsS0FBS1AsY0FBY1MsS0FBS1AsV0FBV0UsT0FBQUE7QUFDNUUsU0FBS1QsZUFBZWEsSUFBSUQsWUFBQUE7QUFDeEIsV0FBT0E7RUFDWDtFQUlPRyxLQUF1QlIsV0FBY1MsTUFBZ0I7QUFDeEQsU0FBS1gsY0FBY1UsS0FBS1IsV0FBV1MsSUFBQUE7RUFDdkM7RUFFVUMsWUFBWVYsV0FBbUJXLFNBQWtEO0FBQ3ZGLFFBQUksQ0FBQyxLQUFLZCxvQkFBb0JlLElBQUlaLFNBQUFBLEdBQVk7QUFDMUMsWUFBTSxJQUFJYSxNQUFNQyxhQUFhQyx3QkFBd0I7SUFDekQ7QUFDQSxVQUFNVixlQUE2QixLQUFLUCxjQUFjQyxHQUFHQyxXQUFXVyxPQUFBQTtBQUNwRSxTQUFLaEIsa0JBQWtCVyxJQUFJRCxZQUFBQTtBQUMzQixXQUFPQTtFQUNYO0VBRVVXLGNBQWNoQixXQUFtQlcsU0FBa0Q7QUFDekYsUUFBSSxDQUFDLEtBQUtkLG9CQUFvQmUsSUFBSVosU0FBQUEsR0FBWTtBQUMxQyxZQUFNLElBQUlhLE1BQU1DLGFBQWFDLHdCQUF3QjtJQUN6RDtBQUNBLFVBQU1WLGVBQW1DLEtBQUtQLGNBQWNTLEtBQUtQLFdBQVdXLE9BQUFBO0FBQzVFLFNBQUtoQixrQkFBa0JXLElBQUlELFlBQUFBO0FBQzNCLFdBQU9BO0VBQ1g7QUFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0NPLElBQU1ZLGlCQUFOLE1BQU1BO1NBQUFBOzs7U0FBQUE7OztFQUNrQ0M7RUFDeEJDLFdBQVc7RUFDYjFCLGlCQUFpQixvQkFBSTJCLElBQUFBO0VBUXRDLE1BQWFDLEtBQXVCQyxTQUFZYixNQUFnQmMsVUFBMEI7SUFBRUMsU0FBUyxLQUFLTDtFQUFTLEdBQUc7QUFDbEgsV0FBTyxJQUFJTSxRQUFRLE9BQU9DLFlBQUFBO0FBQ3RCLFlBQU1mLFVBQVUsS0FBS2xCLGVBQWVrQyxJQUFZTCxPQUFBQSxHQUFVWDtBQUMxRCxVQUFJLENBQUNBLFNBQVM7QUFDVixlQUFPZSxRQUFRRSw0QkFBQUE7TUFDbkI7QUFFQSxZQUFNQyxZQUFZQyxXQUFXLE1BQUE7QUFDekJKLGdCQUFRSyxrQkFBQUE7TUFDWixHQUFHUixRQUFRQyxXQUFXLEtBQUtMLFFBQVE7QUFFbkMsVUFBSTtBQUNBLGNBQU1hLFNBQVMsTUFBTXJCLFFBQVFGLElBQUFBO0FBQzdCd0IscUJBQWFKLFNBQUFBO0FBQ2JILGdCQUFRO1VBQUVRLFNBQVM7VUFBTUMsUUFBUUMsZ0JBQWdCQztVQUFTNUIsTUFBTXVCO1FBQU8sQ0FBQTtNQUMzRSxTQUFTTSxPQUFPO0FBQ1pMLHFCQUFhSixTQUFBQTtBQUViLFlBQUlTLGlCQUFpQkMsWUFBWTtBQUM3QixpQkFBT2IsUUFBUTtZQUNYUSxTQUFTO1lBQ1RDLFFBQVFHLE1BQU1IO1lBQ2RHLE9BQU87Y0FBRUUsU0FBU0YsTUFBTUU7Y0FBU0MsU0FBU0gsTUFBTUc7WUFBUTtVQUM1RCxDQUFBO1FBQ0o7QUFFQWYsZ0JBQVFnQixrQkFBQUE7TUFDWjtJQUNKLENBQUE7RUFDSjtFQUdPQyxVQUE0QnJCLFNBQVlYLFNBQXdEO0FBQ25HLFFBQUksS0FBS2xCLGVBQWVtQixJQUFJVSxPQUFBQSxHQUFVO0FBQ2xDLFdBQUtKLGVBQWVvQixNQUFNLGlEQUFBO0FBQzFCLFlBQU0sSUFBSXpCLE1BQU1DLGFBQWE4Qix1QkFBdUI7SUFDeEQ7QUFFQSxVQUFNQyxhQUErQjtNQUNqQ0MsU0FBUyxnQkFBQTNDLFFBQUEsTUFBQTtBQUVMMEMsbUJBQVdFLFFBQVE7QUFDbkIsYUFBS3RELGVBQWV1RCxPQUFPMUIsT0FBQUE7TUFDL0IsR0FKUyxTQUFBO01BS1RBO01BQ0FYO01BQ0FvQyxPQUFPO0lBQ1g7QUFFQSxTQUFLdEQsZUFBZXdELElBQUkzQixTQUFTdUIsVUFBQUE7QUFFakMsV0FBT0E7RUFDWDtBQUNKOzs7Ozs7Ozs7O0FDeEVBLFNBQVNLLGFBQUFBLFlBQVdDLFVBQUFBLFNBQVFDLGNBQUFBLG9CQUFrQjs7O0FDR3ZDLElBQU1DLG1CQUFOLE1BQU1BO1NBQUFBOzs7RUFGYixPQUVhQTs7OztFQUNULFlBQTZCQyxjQUFpQjtTQUFqQkEsZUFBQUE7RUFBa0I7RUFFeENDLFVBQVVDLE9BQVU7QUFDdkIsUUFBSUMsTUFBTUQsS0FBQUEsS0FBV0UsU0FBU0YsS0FBQUEsS0FBVUcsTUFBY0gsS0FBQUEsR0FBUztBQUMzRCxhQUFPLEtBQUtGO0lBQ2hCO0FBQ0EsV0FBT0U7RUFDWDtBQUNKOzs7Ozs7Ozs7Ozs7OztBRE5PLElBQU1JLHdCQUFOLE1BQU1BO1NBQUFBOzs7RUFDc0NDO0VBQ05DO0VBQ0tDO0VBRXZDQyxhQUFhO0FBQ2hCLFVBQU1DLE9BQU9DLEtBQUtDLElBQUc7QUFDckIsVUFBTUMsVUFBUyxLQUFLTCxtQkFBbUJNLFVBQVM7QUFFaERELElBQUFBLFFBQU9FLFVBQVVDLGNBQWMsU0FBVUMsSUFBcUJDLFdBQW1CQyxNQUFjO0FBQzNGLFdBQUtDLFFBQVEsd0JBQXdCO1FBQ2pDSDtRQUNBQztRQUNBRyxTQUFTRjtNQUNiLENBQUE7SUFDSjtBQUVBLFVBQU1HLGFBQWEsS0FBS2hCLG1CQUFtQmlCLElBQWdCQyxXQUFBQTtBQUUzRFgsSUFBQUEsUUFBT0UsVUFBVVUsT0FBTyxTQUFVQyxTQUFpQlAsTUFBZ0JRLFNBQXdCO0FBQ3ZGLGFBQU9MLFdBQVdNLFdBQVcsTUFBTUYsU0FBU1AsTUFBTVEsT0FBQUE7SUFDdEQ7QUFFQWQsSUFBQUEsUUFBT0UsVUFBVWMsY0FBYyxTQUFVWixJQUFxQlMsU0FBaUJQLE1BQWdCUSxTQUF3QjtBQUNuSCxhQUFPTCxXQUFXTyxZQUFZLE1BQU1aLElBQUlTLFNBQVNQLE1BQU1RLE9BQUFBO0lBQzNEO0FBRUEsU0FBS3BCLGNBQWN1QixJQUFJLDZDQUE2Q25CLEtBQUtDLElBQUcsSUFBS0YsSUFBQUEsS0FBUztFQUM5RjtBQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUVuQ0EsU0FBU3FCLFVBQUFBLFVBQVFDLGNBQUFBLG9CQUFrQjs7Ozs7Ozs7Ozs7O0FBYzVCLElBQU1DLFlBQU4sTUFBTUE7U0FBQUE7OztFQUMrQkM7RUFDRkM7RUFDR0M7RUFFbENDLGFBQWE7QUFDaEIsVUFBTUMsT0FBT0MsS0FBS0MsSUFBRztBQUVyQixTQUFLTixhQUFhTyxTQUFTLG9CQUFvQixPQUFPQyxRQUFRQyxTQUFBQTtBQUMxRCxVQUFJLENBQUNELE9BQU9FLE1BQU87QUFFbkIsWUFBTUMsYUFDRkYsS0FBS0csV0FBV0MsaUJBQWlCQyxTQUMzQixLQUFLYixXQUFXYyxnQkFBZ0JDLElBQUlQLEtBQUtRLE9BQU8sSUFDaERSLEtBQUtHLFdBQVdDLGlCQUFpQkssVUFDakMsS0FBS2pCLFdBQVdrQixpQkFBaUJILElBQUksR0FBR1AsS0FBS1csU0FBUyxLQUFLWCxLQUFLUSxPQUFPLEVBQUUsSUFDekVJO0FBQ1YsVUFBSSxDQUFDVixZQUFZO0FBQ2IsWUFBSUYsS0FBS0csV0FBV0MsaUJBQWlCSyxTQUFTO0FBQzFDVixpQkFBT2MsWUFDSGIsS0FBS1csV0FDTCwyQkFBMkJYLEtBQUtjLEVBQUUsSUFDbENDLDRCQUFBQTtRQUVSLFdBQVdmLEtBQUtHLFdBQVdDLGlCQUFpQkMsUUFBUTtBQUNoRE4saUJBQU9pQixRQUFRLDJCQUEyQmhCLEtBQUtjLEVBQUUsSUFBSUMsNEJBQUFBO1FBQ3pEO0FBQ0E7TUFDSjtBQUVBLFVBQUk7QUFDQSxjQUFNRSxnQkFBZ0IsTUFBTWYsV0FBV2dCLFFBQVFuQixRQUFRQyxLQUFLQSxJQUFJO0FBQ2hFLGNBQU1tQixZQUF1QjtVQUN6QkMsU0FBUztVQUNUQyxRQUFRQyxnQkFBZ0JDO1VBQ3hCdkIsTUFBTWlCO1FBQ1Y7QUFDQSxZQUFJakIsS0FBS0csV0FBV0MsaUJBQWlCSyxTQUFTO0FBQzFDVixpQkFBT2MsWUFBWWIsS0FBS1csV0FBOEIsMkJBQTJCWCxLQUFLYyxFQUFFLElBQUlLLFNBQUFBO1FBQ2hHLFdBQVduQixLQUFLRyxXQUFXQyxpQkFBaUJDLFFBQVE7QUFDaEROLGlCQUFPaUIsUUFBUSwyQkFBMkJoQixLQUFLYyxFQUFFLElBQUlLLFNBQUFBO1FBQ3pEO01BQ0osU0FBU0ssT0FBTztBQUNaLFlBQUl4QixLQUFLRyxXQUFXQyxpQkFBaUJLLFNBQVM7QUFDMUMsY0FBSWUsaUJBQWlCQyxZQUFZO0FBQzdCLGtCQUFNTixZQUF1QjtjQUN6QkMsU0FBUztjQUNUQyxRQUFRRyxNQUFNSDtjQUNkRyxPQUFPO2dCQUFFRSxTQUFTRixNQUFNRTtnQkFBU0MsU0FBU0gsTUFBTUc7Y0FBUTtZQUM1RDtBQUNBNUIsbUJBQU9jLFlBQVliLEtBQUtXLFdBQThCLDJCQUEyQlgsS0FBS2MsRUFBRSxJQUFJSyxTQUFBQTtVQUNoRyxPQUFPO0FBQ0hwQixtQkFBT2MsWUFBWWIsS0FBS1csV0FBOEIsMkJBQTJCWCxLQUFLYyxFQUFFLElBQUljLGtCQUFBQTtVQUNoRztRQUNKLFdBQVc1QixLQUFLRyxXQUFXQyxpQkFBaUJDLFFBQVE7QUFDaEQsY0FBSW1CLGlCQUFpQkMsWUFBWTtBQUM3QixrQkFBTU4sWUFBdUI7Y0FDekJDLFNBQVM7Y0FDVEMsUUFBUUcsTUFBTUg7Y0FDZEcsT0FBTztnQkFBRUUsU0FBU0YsTUFBTUU7Z0JBQVNDLFNBQVNILE1BQU1HO2NBQVE7WUFDNUQ7QUFDQTVCLG1CQUFPaUIsUUFBUSwyQkFBMkJoQixLQUFLYyxFQUFFLElBQUlLLFNBQUFBO1VBQ3pELE9BQU87QUFDSHBCLG1CQUFPaUIsUUFBUSwyQkFBMkJoQixLQUFLYyxFQUFFLElBQUljLGtCQUFBQTtVQUN6RDtRQUNKO01BQ0o7SUFDSixDQUFBO0FBRUEsU0FBS25DLGNBQWNvQyxJQUFJLG9DQUFvQ2pDLEtBQUtDLElBQUcsSUFBS0YsSUFBQUEsS0FBUztFQUNyRjtBQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyRkEsU0FBU21DLGFBQUFBLFlBQVdDLFVBQUFBLFVBQVFDLGNBQUFBLG9CQUFrQjs7O0FDQzlDLFNBQVNDLFVBQUFBLFVBQVFDLGNBQUFBLG9CQUFrQjs7O0FDRDVCLElBQU1DLGtCQUFrQjtFQUMzQkMsWUFBWTtFQUNaQyxtQkFBbUI7RUFDbkJDLGdCQUFnQjtFQUNoQkMsc0JBQXNCO0VBQ3RCQyx5QkFBeUI7RUFDekJDLGdCQUFnQjtFQUNoQkMsdUJBQXVCO0VBQ3ZCQyxtQkFBbUI7RUFDbkJDLGVBQWU7RUFDZkMsY0FBYztFQUNkQyxhQUFhO0VBQ2JDLHdCQUF3QjtFQUN4QkMsd0JBQXdCO0VBQ3hCQyx5QkFBeUI7RUFDekJDLHNCQUFzQjtFQUN0QkMsNkJBQTZCO0VBQzdCQywyQkFBMkI7RUFDM0JDLDBCQUEwQjtFQUMxQkMsNEJBQTRCO0VBQzVCQyxjQUFjO0VBQ2RDLHlCQUF5QjtFQUN6QkMsd0JBQXdCO0VBQ3hCQyw0QkFBNEI7RUFDNUJDLHFCQUFxQjtFQUNyQkMsNEJBQTRCO0VBQzVCQyxVQUFVO0VBQ1ZDLFdBQVc7RUFDWEMsWUFBWTtFQUNaQyxpQkFBaUI7RUFDakJDLGdCQUFnQjtFQUNoQkMsZ0JBQWdCO0VBQ2hCQyxnQkFBZ0I7RUFDaEJDLDRCQUE0QjtFQUM1QkMsMkJBQTJCO0VBQzNCQyxrQkFBa0I7RUFDbEJDLHNCQUFzQjtFQUN0QkMsdUJBQXVCO0VBQ3ZCQyxvQkFBb0I7RUFDcEJDLG9CQUFvQjtFQUNwQkMsa0JBQWtCO0VBQ2xCQyxlQUFlO0VBQ2ZDLGFBQWE7RUFDYkMsbUJBQW1CO0VBQ25CQywyQkFBMkI7RUFDM0JDLG9CQUFvQjtFQUNwQkMsMkJBQTJCO0VBQzNCQyxpQkFBaUI7RUFDakJDLE9BQU87RUFDUEMsaUJBQWlCO0VBQ2pCQyxXQUFXO0VBQ1hDLFlBQVk7RUFDWkMsa0JBQWtCO0VBQ2xCQyx3QkFBd0I7RUFDeEJDLHdCQUF3QjtFQUN4QkMseUJBQXlCO0VBQ3pCQyx5QkFBeUI7RUFDekJDLHdCQUF3QjtFQUN4QkMsb0JBQW9CO0VBQ3BCQyxxQkFBcUI7RUFFckJDLG9CQUFvQjtFQUNwQkMsbUJBQW1CO0VBRW5CQyxnQkFBZ0I7RUFDaEJDLGVBQWU7RUFDZkMsZ0JBQWdCO0VBQ2hCQyxPQUFPO0FBQ1g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FEN0RPLElBQU1DLHNCQUFOLGNBQWlDQyxpQkFBQUE7U0FBQUE7OztFQUM1QkM7RUFDUixZQUFnREMscUJBQThDO0FBQzFGLFVBQU1BLG9CQUFtQkMsTUFBTTtBQUMvQixTQUFLRixjQUFjQyxvQkFBbUJDO0FBQ3RDLFNBQUtDLHNCQUFzQixJQUFJQyxJQUFJQyxPQUFPQyxPQUFPQyxlQUFBQSxDQUFBQTtFQUNyRDtFQUVPQyxTQUNIQyxXQUNBQyxVQUNrQjtBQUNsQixVQUFNQyxVQUFVLHdCQUFDQyxXQUFjQyxTQUFvQkgsU0FBU0UsUUFBUUMsS0FBSyxDQUFBLENBQUUsR0FBM0Q7QUFDaEIsVUFBTUMsZUFBZSxLQUFLZCxZQUFZUSxTQUFTQyxXQUFXRSxPQUFBQTtBQUMxRCxTQUFLSSxnQkFBZ0JDLElBQUlGLFlBQUFBO0FBQ3pCLFdBQU9BO0VBQ1g7RUFFT0csV0FDSFIsV0FDQUMsVUFDa0I7QUFDbEIsVUFBTUMsVUFBVSx3QkFBQ0MsV0FBY0MsU0FBb0JILFNBQVNFLFFBQVFDLEtBQUssQ0FBQSxDQUFFLEdBQTNEO0FBQ2hCLFVBQU1DLGVBQWUsS0FBS2QsWUFBWWlCLFdBQVdSLFdBQVdFLE9BQUFBO0FBQzVELFNBQUtJLGdCQUFnQkMsSUFBSUYsWUFBQUE7QUFDekIsV0FBT0E7RUFDWDtFQUVPSSxTQUNIVCxXQUNBQyxVQUNrQjtBQUNsQixXQUFPLEtBQUtGLFNBQVNDLFdBQVdDLFFBQUFBO0VBQ3BDO0VBRU9TLFdBQ0hWLFdBQ0FDLFVBQ2tCO0FBQ2xCLFdBQU8sS0FBS08sV0FBV1IsV0FBV0MsUUFBQUE7RUFDdEM7RUFFT1UsWUFDSEMsU0FDQVosV0FDQWEsTUFDSTtBQUNKLGVBQVdWLFVBQVVTLFNBQVM7QUFDMUJULGFBQU9XLEtBQUtkLFdBQVc7UUFBQ2E7T0FBSztJQUNqQztFQUNKO0VBRU9FLHNCQUNISCxTQUNBWixXQUNBYSxNQUNJO0FBRUosZUFBV1YsVUFBVVMsU0FBUztBQUMxQlQsYUFBT2EsZUFBZWhCLFdBQVc7UUFBQ2E7T0FBSztJQUMzQztFQUNKO0VBRU9JLGVBQWlDakIsV0FBb0VhLE1BQXNCO0FBQzlISyxPQUFHTixRQUFRRSxLQUFLZCxXQUFXO01BQUNhO0tBQUs7RUFDckM7RUFFT00seUJBQTJDbkIsV0FBb0VhLE1BQXNCO0FBQ3hJSyxPQUFHTixRQUFRSSxlQUFlaEIsV0FBVztNQUFDYTtLQUFLO0VBQy9DO0VBRU9PLFVBQ0hDLElBQ0FyQixXQUNBQyxVQUNrQjtBQUNsQixXQUFPLEtBQUtGLFNBQWlCLHNCQUFzQkMsU0FBQUEsSUFBYXFCLEVBQUFBLElBQVdwQixRQUFBQTtFQUMvRTtFQUVPcUIsWUFDSEQsSUFDQXJCLFdBQ0FDLFVBQ2tCO0FBQ2xCLFdBQU8sS0FBS08sV0FBbUIsc0JBQXNCUixTQUFBQSxJQUFhcUIsRUFBQUEsSUFBV3BCLFFBQUFBO0VBQ2pGO0VBRU9zQixhQUNIWCxTQUNBUyxJQUNBckIsV0FDQWEsTUFDSTtBQUNXLFNBQU1GLFlBQVlDLFNBQVMsd0JBQXdCO01BQzlEUztNQUNBckI7TUFDQXdCLFNBQVNYO0lBQ2IsQ0FBQTtFQUNKO0VBRU9ZLGdCQUNISixJQUNBckIsV0FDQWEsTUFDSTtBQUNXLFNBQU1JLGVBQWUsd0JBQXdCO01BQ3hESTtNQUNBckI7TUFDQXdCLFNBQVNYO0lBQ2IsQ0FBQTtFQUNKO0VBRU9hLDBCQUNITCxJQUNBckIsV0FDQWEsTUFDSTtBQUNXLFNBQU1NLHlCQUF5Qix3QkFBd0I7TUFDbEVFO01BQ0FyQjtNQUNBd0IsU0FBU1g7SUFDYixDQUFBO0VBQ0o7O0VBR09jLGFBQWExQixVQUEwRDtBQUMxRSxXQUFPLEtBQUtWLFlBQVlxQyxHQUFHLGNBQWMzQixRQUFBQTtFQUM3QztFQUVPNEIsYUFBYTVCLFVBQTRGO0FBQzVHLFdBQU8sS0FBS1YsWUFBWXFDLEdBQUcsY0FBYzNCLFFBQUFBO0VBQzdDO0VBRU82QixjQUFjN0IsVUFBMEQ7QUFDM0UsV0FBTyxLQUFLVixZQUFZcUMsR0FBRyxlQUFlM0IsUUFBQUE7RUFDOUM7RUFFTzhCLGNBQWM5QixVQUE2RjtBQUM5RyxXQUFPLEtBQUtWLFlBQVlxQyxHQUFHLGVBQWUzQixRQUFBQTtFQUM5QztFQUVPK0IsY0FBYy9CLFVBQTBEO0FBQzNFLFdBQU8sS0FBS1YsWUFBWXFDLEdBQUcsZUFBZTNCLFFBQUFBO0VBQzlDO0VBRU9nQyxhQUFhaEMsVUFBd0U7QUFDeEYsV0FBTyxLQUFLVixZQUFZcUMsR0FBRyxjQUFjM0IsUUFBQUE7RUFDN0M7RUFFT2lDLGdCQUFnQmpDLFVBQTJFO0FBQzlGLFdBQU8sS0FBS1YsWUFBWXFDLEdBQUcsaUJBQWlCM0IsUUFBQUE7RUFDaEQ7RUFFT2tDLHFCQUFxQmxDLFVBQTRGO0FBQ3BILFdBQU8sS0FBS1YsWUFBWXFDLEdBQUcsc0JBQXNCM0IsUUFBQUE7RUFDckQ7RUFFT21DLG9CQUFvQm5DLFVBQThFO0FBQ3JHLFdBQU8sS0FBS1YsWUFBWXFDLEdBQUcscUJBQXFCM0IsUUFBQUE7RUFDcEQ7RUFFT29DLDBCQUEwQnBDLFVBQTRGO0FBQ3pILFdBQU8sS0FBS1YsWUFBWXFDLEdBQUcsMkJBQTJCM0IsUUFBQUE7RUFDMUQ7RUFFT3FDLHlCQUF5QnJDLFVBQThFO0FBQzFHLFdBQU8sS0FBS1YsWUFBWXFDLEdBQUcsMEJBQTBCM0IsUUFBQUE7RUFDekQ7RUFFT3NDLHFCQUFxQnRDLFVBQWdHO0FBQ3hILFdBQU8sS0FBS1YsWUFBWXFDLEdBQUcsc0JBQXNCM0IsUUFBQUE7RUFDckQ7RUFFT3VDLGVBQWV2QyxVQUFpRztBQUNuSCxXQUFPLEtBQUtWLFlBQVlxQyxHQUFHLGdCQUFnQjNCLFFBQUFBO0VBQy9DO0VBRU93QyxlQUFleEMsVUFBNkY7QUFDL0csV0FBTyxLQUFLVixZQUFZcUMsR0FBRyxnQkFBZ0IzQixRQUFBQTtFQUMvQztFQUVPeUMsZ0JBQWdCekMsVUFBOEc7QUFDakksV0FBTyxLQUFLVixZQUFZcUMsR0FBRyxpQkFBaUIzQixRQUFBQTtFQUNoRDtFQUVPMEMsc0JBQXNCMUMsVUFBZ0Y7QUFDekcsV0FBTyxLQUFLVixZQUFZcUMsR0FBRyx1QkFBdUIzQixRQUFBQTtFQUN0RDtFQUVPMkMscUJBQXFCM0MsVUFBZ0Y7QUFDeEcsV0FBTyxLQUFLVixZQUFZcUMsR0FBRyxzQkFBc0IzQixRQUFBQTtFQUNyRDtFQUVPNEMsd0JBQXdCNUMsVUFBb0Y7QUFDL0csV0FBTyxLQUFLVixZQUFZcUMsR0FBRyx5QkFBeUIzQixRQUFBQTtFQUN4RDtFQUVPNkMsdUJBQXVCN0MsVUFBb0Y7QUFDOUcsV0FBTyxLQUFLVixZQUFZcUMsR0FBRyx3QkFBd0IzQixRQUFBQTtFQUN2RDs7RUFHTzhDLGdCQUFnQjlDLFVBQTBEO0FBQzdFLFdBQU8sS0FBSzBCLGFBQWExQixRQUFBQTtFQUM3QjtFQUVPK0MsbUJBQW1CL0MsVUFBeUc7QUFDL0gsV0FBTyxLQUFLVixZQUFZcUMsR0FBRyxjQUFjLENBQUN6QixRQUFrQjhDLFVBQWtCQyxXQUFBQTtBQUMxRWpELGVBQVM7UUFBRUU7UUFBUThDO1FBQVVDO01BQU8sQ0FBQTtJQUN4QyxDQUFBO0VBQ0o7QUFDSjs7Ozs7Ozs7Ozs7QUUxTkEsU0FBU0MsVUFBQUEsVUFBUUMsY0FBQUEsb0JBQWtCOzs7Ozs7Ozs7Ozs7QUFNNUIsSUFBTUMsc0JBQU4sTUFBTUE7U0FBQUE7OztFQUNvQkM7RUFDdEJDLE9BQU9DLE1BQXVCO0FBQ2pDLFNBQUtGLG1CQUFtQkMsSUFBSSxVQUFVRSxnQkFBQUEsMEJBQXdDLEdBQUtELElBQUFBO0VBQ3ZGO0VBRU9FLFFBQVFGLE1BQXVCO0FBQ2xDLFNBQUtGLG1CQUFtQkssV0FBVyxJQUFJRixnQkFBQUEsaUJBQStCLEdBQUtELElBQUFBO0VBQy9FO0VBRU9JLFNBQVNKLE1BQXVCO0FBQ25DLFNBQUtGLG1CQUFtQk8sU0FBUyxJQUFJSixnQkFBQUEsa0JBQWdDLEdBQUtELElBQUFBO0VBQzlFO0VBRU9NLFNBQVNOLE1BQXVCO0FBQ25DLFNBQUtGLG1CQUFtQlMsU0FBUyxVQUFVTixnQkFBQUEsNEJBQTBDLEdBQUtELElBQUFBO0VBQzlGO0FBQ0o7Ozs7Ozs7Ozs7QUN2QkEsU0FBU1EsVUFBQUEsVUFBUUMsY0FBQUEsb0JBQWtCOzs7Ozs7Ozs7Ozs7QUFxQjVCLElBQU1DLG1CQUFOLGNBQStCQyxlQUFBQTtTQUFBQTs7O0VBQ01DO0VBQ3hCQyxrQkFBa0Isb0JBQUlDLElBQUFBO0VBQ3RCQyxtQkFBbUIsb0JBQUlELElBQUFBO0VBRXZDLE1BQWFFLFdBQ1RDLFFBQ0FDLFNBQ0FDLE1BQ0FDLFVBQTBCO0lBQUVDLFNBQVMsS0FBS0M7RUFBUyxHQUNyRDtBQUNFLFdBQU8sS0FBS0MsWUFBWU4sUUFBUUMsU0FBU00saUJBQWlCQyxRQUFRTCxTQUFTRCxJQUFBQTtFQUMvRTtFQUVPTyxnQkFDSFIsU0FDQVMsU0FDRjtBQUNFLFFBQUksS0FBS2QsZ0JBQWdCZSxJQUFJVixPQUFBQSxHQUFVO0FBQ25DLFdBQUtXLGVBQWVDLE1BQU0saURBQUE7QUFDMUIsWUFBTSxJQUFJQyxNQUFNQyxhQUFhQyx1QkFBdUI7SUFDeEQ7QUFFQSxVQUFNQyxhQUErQjtNQUNqQ0MsU0FBUyw2QkFBQTtBQUVMRCxtQkFBV0UsUUFBUTtBQUNuQixhQUFLdkIsZ0JBQWdCd0IsT0FBT25CLE9BQUFBO01BQ2hDLEdBSlM7TUFLVEE7TUFDQVM7TUFDQVMsT0FBTztJQUNYO0FBRUEsU0FBS3ZCLGdCQUFnQnlCLElBQUlwQixTQUFTZ0IsVUFBQUE7QUFFbEMsV0FBT0E7RUFDWDtFQUVBLE1BQWFLLFlBQ1R0QixRQUNBdUIsSUFDQXRCLFNBQ0FDLE1BQ0FDLFVBQTBCO0lBQUVDLFNBQVMsS0FBS0M7RUFBUyxHQUNyRDtBQUNFLFdBQU8sS0FBS0MsWUFBWU4sUUFBUUMsU0FBU00saUJBQWlCaUIsU0FBU3JCLFNBQVNELE1BQU1xQixFQUFBQTtFQUN0RjtFQUVPRSxpQkFDSEYsSUFDQXRCLFNBQ0FTLFNBSUY7QUFDRSxVQUFNZ0IsTUFBTSxHQUFHSCxFQUFBQSxLQUFPdEIsT0FBQUE7QUFDdEIsUUFBSSxLQUFLSCxpQkFBaUJhLElBQUllLEdBQUFBLEdBQU07QUFDaEMsV0FBS2QsZUFBZUMsTUFBTSxpREFBQTtBQUMxQixZQUFNLElBQUlDLE1BQU1DLGFBQWFDLHVCQUF1QjtJQUN4RDtBQUVBLFVBQU1DLGFBQStCO01BQ2pDQyxTQUFTLDZCQUFBO0FBRUxELG1CQUFXRSxRQUFRO0FBQ25CLGFBQUtyQixpQkFBaUJzQixPQUFPTSxHQUFBQTtNQUNqQyxHQUpTO01BS1R6QjtNQUNBUztNQUNBUyxPQUFPO0lBQ1g7QUFFQSxTQUFLckIsaUJBQWlCdUIsSUFBSUssS0FBS1QsVUFBQUE7QUFFL0IsV0FBT0E7RUFDWDtFQUVBLE1BQWNYLFlBQ1ZOLFFBQ0FDLFNBQ0EwQixhQUNBeEIsU0FDQUQsTUFDQTBCLFdBQ0Y7QUFDRSxXQUFPLElBQUlDLFFBQTRCLENBQUNDLFlBQUFBO0FBQ3BDLFVBQUksQ0FBQzlCLE9BQU9tQixPQUFPO0FBQ2ZXLGdCQUE0QkMsMkJBQUFBO0FBQzVCO01BQ0o7QUFFQSxZQUFNQyxTQUFTQyxpQkFBQUE7QUFDZixVQUFJQztBQUVKLFlBQU1DLG9CQUFvQixLQUFLeEMsY0FBY3lDLG1CQUFtQixDQUFDQyxZQUFBQTtBQUM3RCxZQUFJQSxRQUFRckMsV0FBV0EsUUFBUTtBQUMzQnNDLHVCQUFhSixTQUFBQTtBQUNiQyw0QkFBa0JqQixRQUFPO0FBQ3pCWSxrQkFBNEJTLDhCQUFBQTtRQUNoQztNQUNKLENBQUE7QUFFQSxZQUFNQyxhQUFhLHdCQUFDQyxTQUE0QnZDLFVBQUFBO0FBQzVDb0MscUJBQWFKLFNBQUFBO0FBQ2JDLDBCQUFrQmpCLFFBQU87QUFDekJZLGdCQUE0QjVCLEtBQUFBO01BQ2hDLEdBSm1CO0FBTW5CLFlBQU13QyxlQUNGZixnQkFBZ0JwQixpQkFBaUJpQixVQUMzQixLQUFLN0IsY0FBY2dELFlBQVlmLFdBQVksNEJBQTRCSSxNQUFBQSxJQUFVUSxVQUFBQSxJQUNqRixLQUFLN0MsY0FBY2lELFdBQVcsMkJBQTJCWixNQUFBQSxJQUFVUSxVQUFBQTtBQUU3RSxZQUFNSyxVQUFzQjtRQUN4QkMsUUFBUXZDLGlCQUFpQndDO1FBQ3pCcEI7UUFDQUosSUFBSVM7UUFDSi9CO1FBQ0FDO01BQ0o7QUFFQXlCLHNCQUFnQnBCLGlCQUFpQmlCLFVBQzNCeEIsT0FBT2dELFlBQVlwQixXQUFZLHFCQUFxQmlCLE9BQUFBLElBQ3BEN0MsT0FBT2lELEtBQUssb0JBQW9CSixPQUFBQTtBQUV0Q1gsa0JBQVlnQixXQUFXLE1BQUE7QUFDbkJSLHFCQUFheEIsUUFBTztBQUNwQlksZ0JBQTRCcUIsa0JBQUFBO01BQ2hDLEdBQUdoRCxTQUFTQyxXQUFXLEtBQUtDLFFBQVE7SUFDeEMsQ0FBQTtFQUNKO0FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBSmxKTyxJQUFNK0Msc0JBQU4sTUFBTUE7U0FBQUE7OztFQUN3Q0M7RUFDRkM7RUFFL0MsTUFBYUMsVUFBVTtBQUNuQixVQUFNQyxPQUFPQyxLQUFLQyxJQUFHO0FBRXJCLFNBQUtKLG1CQUFtQkssS0FBS0MsY0FBQUEsRUFBZ0JDLEdBQUdDLG1CQUFBQSxFQUFxQkMsaUJBQWdCO0FBQ3JGLFNBQUtULG1CQUFtQkssS0FBS0ssYUFBQUEsRUFBZUgsR0FBR0ksbUJBQUFBLEVBQW9CRixpQkFBZ0I7QUFDbkYsU0FBS1QsbUJBQW1CSyxLQUFLTyxXQUFBQSxFQUFhTCxHQUFHTSxnQkFBQUEsRUFBa0JKLGlCQUFnQjtBQUUvRSxTQUFLVixxQkFBcUJNLEtBQUtDLGNBQUFBLEVBQWdCUSxnQkFBZ0IsS0FBS2QsbUJBQW1CZSxJQUFJVCxjQUFBQSxDQUFBQTtBQUMzRixTQUFLUCxxQkFBcUJNLEtBQUtLLGFBQUFBLEVBQWVJLGdCQUFnQixLQUFLZCxtQkFBbUJlLElBQUlMLGFBQUFBLENBQUFBO0FBQzFGLFNBQUtYLHFCQUFxQk0sS0FBS08sV0FBQUEsRUFBYUUsZ0JBQWdCLEtBQUtkLG1CQUFtQmUsSUFBSUgsV0FBQUEsQ0FBQUE7QUFFeEYsVUFBTUksZ0JBQWdCLEtBQUtoQixtQkFBbUJlLElBQXlCVCxjQUFBQTtBQUN2RVUsa0JBQWNDLElBQUkscUNBQXFDZCxLQUFLQyxJQUFHLElBQUtGLElBQUFBLEtBQVM7RUFDakY7QUFDSjs7Ozs7Ozs7Ozs7Ozs7QUt4Qk8sSUFBTWdCLDBCQUFOLE1BQU1BO0VBQWIsT0FBYUE7Ozs7O0VBQ1QsWUFDWUMsV0FDQUMsVUFDVjtTQUZVRCxZQUFBQTtTQUNBQyxXQUFBQTtFQUNUO0VBRUhDLFVBQWdCO0FBQ1pDLE9BQUdDLE9BQU9DLE9BQU8sS0FBS0wsV0FBVyxLQUFLQyxRQUFRO0VBQ2xEO0FBQ0o7OztBQ05BLElBQU1LLHVCQUF1QixvQkFBSUMsSUFBdUI7RUFDcEQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDSDtBQUVNLElBQU1DLDJCQUFOLE1BQU1BO0VBckNiLE9BcUNhQTs7O0VBRVRDLEtBQUtDLGNBQXNCQyxNQUFtQjtBQUMxQ0MsT0FBR0MsT0FBT0MsS0FBS0osV0FBQUEsR0FBY0MsSUFBQUE7RUFDakM7RUFFQUksR0FBR0wsV0FBbUJNLFVBQXdEO0FBQzFFSixPQUFHQyxPQUFPSSxJQUFJUCxXQUFXTSxRQUFBQTtBQUN6QixXQUFPLElBQUlFLHdCQUF3QlIsV0FBV00sUUFBQUE7RUFDbEQ7RUFFQUcsS0FBS1QsV0FBbUJNLFVBQXdEO0FBQzVFLFVBQU1JLGNBQWMsMkJBQUlULFNBQUFBO0FBQ3BCQyxTQUFHQyxPQUFPUSxPQUFPWCxXQUFXVSxXQUFBQTtBQUM1QkosZUFBQUEsR0FBWUwsSUFBQUE7SUFDaEIsR0FIb0I7QUFJcEJDLE9BQUdDLE9BQU9JLElBQUlQLFdBQVdVLFdBQUFBO0FBQ3pCLFdBQU8sSUFBSUYsd0JBQXdCUixXQUFXVSxXQUFBQTtFQUNsRDtFQUVBRSxJQUFJWixXQUFtQk0sVUFBMEM7QUFDN0RKLE9BQUdDLE9BQU9RLE9BQU9YLFdBQVdNLFFBQUFBO0VBQ2hDO0VBRUFPLFdBQVdDLFFBQTJCZCxjQUFzQkMsTUFBbUI7QUFFMUVhLFdBQWVWLEtBQUtKLFdBQVdDLElBQUFBO0VBQ3BDO0VBRUFjLGtCQUFrQmYsY0FBc0JDLE1BQW1CO0FBRXZEQyxPQUFHYyxRQUFRWixLQUFLSixXQUFXQyxJQUFBQTtFQUMvQjtFQUVBZ0IsNEJBQTRCakIsY0FBc0JDLE1BQW1CO0FBRWpFQyxPQUFHYyxRQUFRRSxlQUFlbEIsV0FBV0MsSUFBQUE7RUFDekM7RUFFQWtCLGtCQUFrQkgsU0FBOEJoQixjQUFzQkMsTUFBbUI7QUFDckYsZUFBV2EsVUFBVUUsU0FBUztBQUN6QkYsYUFBZUksZUFBZWxCLFdBQVdDLElBQUFBO0lBQzlDO0VBQ0o7RUFFQW1CLFNBQVNwQixXQUFtQk0sVUFBd0Q7QUFHaEYsUUFBSVYscUJBQXFCeUIsSUFBSXJCLFNBQUFBLEdBQWlDO0FBQzFELGFBQU8sS0FBS0ssR0FBR0wsV0FBV00sUUFBQUE7SUFDOUI7QUFFQSxVQUFNZ0IsVUFBVSx3QkFBQ1IsV0FBcUJiLFNBQUFBO0FBQ2xDLFlBQU1zQixhQUFhdEIsS0FBS3VCLElBQUlDLENBQUFBLFFBQUFBO0FBQ3hCLFlBQUksT0FBT0EsUUFBUSxVQUFVO0FBQ3pCLGNBQUk7QUFDQSxtQkFBT0MsS0FBS0MsTUFBTUYsR0FBQUE7VUFDdEIsUUFBUTtBQUNKLG1CQUFPQTtVQUNYO1FBQ0o7QUFDQSxlQUFPQTtNQUNYLENBQUE7QUFDQW5CLGVBQVNRLFFBQUFBLEdBQVdTLFVBQUFBO0lBQ3hCLEdBWmdCO0FBYWhCckIsT0FBR0MsT0FBT0ksSUFBSVAsV0FBV3NCLE9BQUFBO0FBQ3pCLFdBQU8sSUFBSWQsd0JBQXdCUixXQUFXc0IsT0FBQUE7RUFDbEQ7RUFFQU0sV0FBVzVCLFdBQW1CTSxVQUF3RDtBQUVsRixRQUFJVixxQkFBcUJ5QixJQUFJckIsU0FBQUEsR0FBaUM7QUFDMUQsYUFBTyxLQUFLUyxLQUFLVCxXQUFXTSxRQUFBQTtJQUNoQztBQUVBLFVBQU1JLGNBQWMsd0JBQUNJLFdBQXFCYixTQUFBQTtBQUN0Q0MsU0FBR0MsT0FBT1EsT0FBT1gsV0FBV1UsV0FBQUE7QUFDNUIsWUFBTWEsYUFBYXRCLEtBQUt1QixJQUFJQyxDQUFBQSxRQUFBQTtBQUN4QixZQUFJLE9BQU9BLFFBQVEsVUFBVTtBQUN6QixjQUFJO0FBQ0EsbUJBQU9DLEtBQUtDLE1BQU1GLEdBQUFBO1VBQ3RCLFFBQVE7QUFDSixtQkFBT0E7VUFDWDtRQUNKO0FBQ0EsZUFBT0E7TUFDWCxDQUFBO0FBQ0FuQixlQUFTUSxRQUFBQSxHQUFXUyxVQUFBQTtJQUN4QixHQWJvQjtBQWNwQnJCLE9BQUdDLE9BQU9JLElBQUlQLFdBQVdVLFdBQUFBO0FBQ3pCLFdBQU8sSUFBSUYsd0JBQXdCUixXQUFXVSxXQUFBQTtFQUNsRDtFQUVBbUIsVUFBVTdCLFdBQW1CTSxVQUEwQztBQUNuRUosT0FBR0MsT0FBT1EsT0FBT1gsV0FBV00sUUFBQUE7RUFDaEM7QUFDSjs7O0FDbklPLElBQU13QixpQ0FBTixjQUE2Q0MseUJBQUFBO0VBSHBELE9BR29EQTs7O0VBQ2hDQztFQUVoQixjQUFjO0FBQ1YsVUFBSztBQUNMLFNBQUtBLFNBQVMsSUFBSUMseUJBQUFBO0VBQ3RCO0VBRU9DLFlBQVk7QUFFZixXQUFRQyxHQUFXQztFQUN2QjtFQUVPQyxlQUFlQyxTQUFvQjtBQUd0QyxRQUFJQSxXQUFZSCxHQUFXSSxNQUFNO0FBQzdCQyxhQUFPQyxPQUFRTixHQUFXSSxLQUFLRyxXQUFXSixPQUFBQTtJQUM5QztFQUNKO0VBRU9LLGlCQUFpQkwsU0FBb0I7QUFDeEMsUUFBSUEsV0FBWUgsR0FBV1MsUUFBUTtBQUMvQkosYUFBT0MsT0FBUU4sR0FBV1MsT0FBT0YsV0FBV0osT0FBQUE7SUFDaEQ7RUFDSjtFQUVPTyxtQkFBbUJQLFNBQW9CO0FBQzFDLFFBQUlBLFdBQVlILEdBQVdXLFVBQVU7QUFDakNOLGFBQU9DLE9BQVFOLEdBQVdXLFNBQVNKLFdBQVdKLE9BQUFBO0lBQ2xEO0VBQ0o7RUFFT1MscUJBQXFCVCxTQUFvQjtBQUM1QyxRQUFJQSxXQUFZSCxHQUFXYSxZQUFZO0FBQ25DUixhQUFPQyxPQUFRTixHQUFXYSxXQUFXTixXQUFXSixPQUFBQTtJQUNwRDtFQUNKO0VBRU9XLGlCQUFpQlgsU0FBb0I7QUFDeEMsUUFBSUEsV0FBWUgsR0FBV0ssUUFBUTtBQUMvQkEsYUFBT0MsT0FBUU4sR0FBV0ssT0FBT0UsV0FBV0osT0FBQUE7SUFDaEQ7RUFDSjtFQUVPWSxjQUFjWixTQUFvQjtBQUNyQyxRQUFJQSxXQUFZSCxHQUFXZ0IsS0FBSztBQUM1QlgsYUFBT0MsT0FBUU4sR0FBV2dCLElBQUlULFdBQVdKLE9BQUFBO0lBQzdDO0VBQ0o7RUFFT2MsaUJBQWlCZCxTQUFvQjtBQUN4QyxRQUFJQSxXQUFZSCxHQUFXQyxRQUFRO0FBQy9CSSxhQUFPQyxPQUFRTixHQUFXQyxPQUFPTSxXQUFXSixPQUFBQTtJQUNoRDtFQUNKO0VBRU9lLGtCQUFrQmYsU0FBb0I7QUFDekMsUUFBSUEsV0FBWUgsR0FBV21CLFNBQVM7QUFDaENkLGFBQU9DLE9BQVFOLEdBQVdtQixRQUFRWixXQUFXSixPQUFBQTtJQUNqRDtFQUNKO0VBRU9pQiw2QkFBNkJDLFVBQXFCO0VBR3pEO0VBRU9DLHdCQUF3QkQsVUFBcUI7RUFHcEQ7RUFFT0UsdUJBQXVCRixVQUFxQjtFQUduRDs7RUFHZ0JHLElBQUlDLFFBQWFDLE1BQW1CO0FBQ2hELFVBQU1DLFVBQVU7TUFBQ0Y7U0FBUUM7TUFBTUUsSUFBSUMsQ0FBQUEsTUFDL0IsT0FBT0EsTUFBTSxXQUFXQyxLQUFLQyxVQUFVRixDQUFBQSxJQUFLRyxPQUFPSCxDQUFBQSxDQUFBQSxFQUNyREksS0FBSyxHQUFBO0FBQ1BDLFlBQVFWLElBQUlHLE9BQUFBO0VBQ2hCO0VBRWdCUSxTQUFTVixRQUFhQyxNQUFtQjtBQUNyRCxVQUFNQyxVQUFVO01BQUNGO1NBQVFDO01BQU1FLElBQUlDLENBQUFBLE1BQy9CLE9BQU9BLE1BQU0sV0FBV0MsS0FBS0MsVUFBVUYsQ0FBQUEsSUFBS0csT0FBT0gsQ0FBQUEsQ0FBQUEsRUFDckRJLEtBQUssR0FBQTtBQUNQQyxZQUFRRSxNQUFNVCxPQUFBQTtFQUNsQjtFQUVnQlUsV0FBV1osUUFBYUMsTUFBbUI7QUFDdkQsVUFBTUMsVUFBVTtNQUFDRjtTQUFRQztNQUFNRSxJQUFJQyxDQUFBQSxNQUMvQixPQUFPQSxNQUFNLFdBQVdDLEtBQUtDLFVBQVVGLENBQUFBLElBQUtHLE9BQU9ILENBQUFBLENBQUFBLEVBQ3JESSxLQUFLLEdBQUE7QUFDUEMsWUFBUUksS0FBS1gsT0FBQUE7RUFDakI7RUFFZ0JZLFNBQVNkLFFBQWFDLE1BQW1CO0FBQ3JELFVBQU1DLFVBQVU7TUFBQ0Y7U0FBUUM7TUFBTUUsSUFBSUMsQ0FBQUEsTUFDL0IsT0FBT0EsTUFBTSxXQUFXQyxLQUFLQyxVQUFVRixDQUFBQSxJQUFLRyxPQUFPSCxDQUFBQSxDQUFBQSxFQUNyREksS0FBSyxHQUFBO0FBQ1BDLFlBQVFWLElBQUksV0FBV0csT0FBQUEsRUFBUztFQUNwQztBQUNKOzs7QUMzR08sU0FBU2EsZUFBY0MsU0FBK0M7QUFDekUsU0FBT0MsV0FBQUEsR0FBZUQsT0FBQUE7QUFDMUI7QUFGZ0JELE9BQUFBLGFBQUFBOzs7QUNBVCxTQUFTRyxjQUFBQTtBQUNaLFNBQU9DLFdBQVdDLGdCQUFnQkMsVUFBVTtBQUNoRDtBQUZnQkg7QUFJVCxTQUFTSSxnQkFBQUE7QUFDWixTQUFPQyxhQUFhSCxnQkFBZ0JDLFVBQVU7QUFDbEQ7QUFGZ0JDO0FBR1QsU0FBU0Usb0JBQUFBO0FBQ1osU0FBT0wsV0FBV0MsZ0JBQWdCSyxpQkFBaUI7QUFDdkQ7QUFGZ0JEO0FBSVQsU0FBU0Usc0JBQUFBO0FBQ1osU0FBT0gsYUFBYUgsZ0JBQWdCSyxpQkFBaUI7QUFDekQ7QUFGZ0JDO0FBR1QsU0FBU0Msa0JBQUFBO0FBQ1osU0FBT1IsV0FBV0MsZ0JBQWdCUSxjQUFjO0FBQ3BEO0FBRmdCRDtBQUlULFNBQVNFLG9CQUFBQTtBQUNaLFNBQU9OLGFBQWFILGdCQUFnQlEsY0FBYztBQUN0RDtBQUZnQkM7QUFHVCxTQUFTQyx1QkFBQUE7QUFDWixTQUFPWCxXQUFXQyxnQkFBZ0JXLG9CQUFvQjtBQUMxRDtBQUZnQkQ7QUFJVCxTQUFTRSx5QkFBQUE7QUFDWixTQUFPVCxhQUFhSCxnQkFBZ0JXLG9CQUFvQjtBQUM1RDtBQUZnQkM7QUFHVCxTQUFTQywwQkFBQUE7QUFDWixTQUFPZCxXQUFXQyxnQkFBZ0JjLHVCQUF1QjtBQUM3RDtBQUZnQkQ7QUFJVCxTQUFTRSw0QkFBQUE7QUFDWixTQUFPWixhQUFhSCxnQkFBZ0JjLHVCQUF1QjtBQUMvRDtBQUZnQkM7QUFHVCxTQUFTQyxrQkFBQUE7QUFDWixTQUFPakIsV0FBV0MsZ0JBQWdCaUIsY0FBYztBQUNwRDtBQUZnQkQ7QUFJVCxTQUFTRSxvQkFBQUE7QUFDWixTQUFPZixhQUFhSCxnQkFBZ0JpQixjQUFjO0FBQ3REO0FBRmdCQztBQUdULFNBQVNDLHdCQUFBQTtBQUNaLFNBQU9wQixXQUFXQyxnQkFBZ0JvQixxQkFBcUI7QUFDM0Q7QUFGZ0JEO0FBSVQsU0FBU0UsMEJBQUFBO0FBQ1osU0FBT2xCLGFBQWFILGdCQUFnQm9CLHFCQUFxQjtBQUM3RDtBQUZnQkM7QUFHVCxTQUFTQyxxQkFBQUE7QUFDWixTQUFPdkIsV0FBV0MsZ0JBQWdCdUIsaUJBQWlCO0FBQ3ZEO0FBRmdCRDtBQUlULFNBQVNFLHVCQUFBQTtBQUNaLFNBQU9yQixhQUFhSCxnQkFBZ0J1QixpQkFBaUI7QUFDekQ7QUFGZ0JDO0FBR1QsU0FBU0MsaUJBQUFBO0FBQ1osU0FBTzFCLFdBQVdDLGdCQUFnQjBCLGFBQWE7QUFDbkQ7QUFGZ0JEO0FBSVQsU0FBU0UsbUJBQUFBO0FBQ1osU0FBT3hCLGFBQWFILGdCQUFnQjBCLGFBQWE7QUFDckQ7QUFGZ0JDO0FBR1QsU0FBU0MsZ0JBQUFBO0FBQ1osU0FBTzdCLFdBQVdDLGdCQUFnQjZCLFlBQVk7QUFDbEQ7QUFGZ0JEO0FBSVQsU0FBU0Usa0JBQUFBO0FBQ1osU0FBTzNCLGFBQWFILGdCQUFnQjZCLFlBQVk7QUFDcEQ7QUFGZ0JDO0FBR1QsU0FBU0MsZUFBQUE7QUFDWixTQUFPaEMsV0FBV0MsZ0JBQWdCZ0MsV0FBVztBQUNqRDtBQUZnQkQ7QUFJVCxTQUFTRSxpQkFBQUE7QUFDWixTQUFPOUIsYUFBYUgsZ0JBQWdCZ0MsV0FBVztBQUNuRDtBQUZnQkM7QUFHVCxTQUFTQyx5QkFBQUE7QUFDWixTQUFPbkMsV0FBV0MsZ0JBQWdCbUMsc0JBQXNCO0FBQzVEO0FBRmdCRDtBQUlULFNBQVNFLDJCQUFBQTtBQUNaLFNBQU9qQyxhQUFhSCxnQkFBZ0JtQyxzQkFBc0I7QUFDOUQ7QUFGZ0JDO0FBR1QsU0FBU0MseUJBQUFBO0FBQ1osU0FBT3RDLFdBQVdDLGdCQUFnQnNDLHNCQUFzQjtBQUM1RDtBQUZnQkQ7QUFJVCxTQUFTRSwyQkFBQUE7QUFDWixTQUFPcEMsYUFBYUgsZ0JBQWdCc0Msc0JBQXNCO0FBQzlEO0FBRmdCQztBQUdULFNBQVNDLDBCQUFBQTtBQUNaLFNBQU96QyxXQUFXQyxnQkFBZ0J5Qyx1QkFBdUI7QUFDN0Q7QUFGZ0JEO0FBSVQsU0FBU0UsNEJBQUFBO0FBQ1osU0FBT3ZDLGFBQWFILGdCQUFnQnlDLHVCQUF1QjtBQUMvRDtBQUZnQkM7QUFHVCxTQUFTQyx1QkFBQUE7QUFDWixTQUFPNUMsV0FBV0MsZ0JBQWdCNEMsb0JBQW9CO0FBQzFEO0FBRmdCRDtBQUlULFNBQVNFLHlCQUFBQTtBQUNaLFNBQU8xQyxhQUFhSCxnQkFBZ0I0QyxvQkFBb0I7QUFDNUQ7QUFGZ0JDO0FBR1QsU0FBU0MsNkJBQUFBO0FBQ1osU0FBTy9DLFdBQVdDLGdCQUFnQitDLDJCQUEyQjtBQUNqRTtBQUZnQkQ7QUFJVCxTQUFTRSwrQkFBQUE7QUFDWixTQUFPN0MsYUFBYUgsZ0JBQWdCK0MsMkJBQTJCO0FBQ25FO0FBRmdCQztBQUdULFNBQVNDLDJCQUFBQTtBQUNaLFNBQU9sRCxXQUFXQyxnQkFBZ0JrRCx5QkFBeUI7QUFDL0Q7QUFGZ0JEO0FBSVQsU0FBU0UsNkJBQUFBO0FBQ1osU0FBT2hELGFBQWFILGdCQUFnQmtELHlCQUF5QjtBQUNqRTtBQUZnQkM7QUFHVCxTQUFTQywwQkFBQUE7QUFDWixTQUFPckQsV0FBV0MsZ0JBQWdCcUQsd0JBQXdCO0FBQzlEO0FBRmdCRDtBQUlULFNBQVNFLDRCQUFBQTtBQUNaLFNBQU9uRCxhQUFhSCxnQkFBZ0JxRCx3QkFBd0I7QUFDaEU7QUFGZ0JDO0FBR1QsU0FBU0MsNEJBQUFBO0FBQ1osU0FBT3hELFdBQVdDLGdCQUFnQndELDBCQUEwQjtBQUNoRTtBQUZnQkQ7QUFJVCxTQUFTRSw4QkFBQUE7QUFDWixTQUFPdEQsYUFBYUgsZ0JBQWdCd0QsMEJBQTBCO0FBQ2xFO0FBRmdCQztBQUdULFNBQVNDLGdCQUFBQTtBQUNaLFNBQU8zRCxXQUFXQyxnQkFBZ0IyRCxZQUFZO0FBQ2xEO0FBRmdCRDtBQUlULFNBQVNFLGtCQUFBQTtBQUNaLFNBQU96RCxhQUFhSCxnQkFBZ0IyRCxZQUFZO0FBQ3BEO0FBRmdCQztBQUdULFNBQVNDLDBCQUFBQTtBQUNaLFNBQU85RCxXQUFXQyxnQkFBZ0I4RCx1QkFBdUI7QUFDN0Q7QUFGZ0JEO0FBSVQsU0FBU0UsNEJBQUFBO0FBQ1osU0FBTzVELGFBQWFILGdCQUFnQjhELHVCQUF1QjtBQUMvRDtBQUZnQkM7QUFHVCxTQUFTQyx5QkFBQUE7QUFDWixTQUFPakUsV0FBV0MsZ0JBQWdCaUUsc0JBQXNCO0FBQzVEO0FBRmdCRDtBQUlULFNBQVNFLDJCQUFBQTtBQUNaLFNBQU8vRCxhQUFhSCxnQkFBZ0JpRSxzQkFBc0I7QUFDOUQ7QUFGZ0JDO0FBR1QsU0FBU0MsNEJBQUFBO0FBQ1osU0FBT3BFLFdBQVdDLGdCQUFnQm9FLDBCQUEwQjtBQUNoRTtBQUZnQkQ7QUFJVCxTQUFTRSw4QkFBQUE7QUFDWixTQUFPbEUsYUFBYUgsZ0JBQWdCb0UsMEJBQTBCO0FBQ2xFO0FBRmdCQztBQUdULFNBQVNDLHNCQUFBQTtBQUNaLFNBQU92RSxXQUFXQyxnQkFBZ0J1RSxtQkFBbUI7QUFDekQ7QUFGZ0JEO0FBSVQsU0FBU0Usd0JBQUFBO0FBQ1osU0FBT3JFLGFBQWFILGdCQUFnQnVFLG1CQUFtQjtBQUMzRDtBQUZnQkM7QUFHVCxTQUFTQyw0QkFBQUE7QUFDWixTQUFPMUUsV0FBV0MsZ0JBQWdCMEUsMEJBQTBCO0FBQ2hFO0FBRmdCRDtBQUlULFNBQVNFLDhCQUFBQTtBQUNaLFNBQU94RSxhQUFhSCxnQkFBZ0IwRSwwQkFBMEI7QUFDbEU7QUFGZ0JDO0FBSVQsU0FBU0MsWUFBQUE7QUFDWixTQUFPN0UsV0FBV0MsZ0JBQWdCNkUsUUFBUTtBQUM5QztBQUZnQkQ7QUFJVCxTQUFTRSxjQUFBQTtBQUNaLFNBQU8zRSxhQUFhSCxnQkFBZ0I2RSxRQUFRO0FBQ2hEO0FBRmdCQztBQUdULFNBQVNDLGFBQUFBO0FBQ1osU0FBT2hGLFdBQVdDLGdCQUFnQmdGLFNBQVM7QUFDL0M7QUFGZ0JEO0FBSVQsU0FBU0UsZUFBQUE7QUFDWixTQUFPOUUsYUFBYUgsZ0JBQWdCZ0YsU0FBUztBQUNqRDtBQUZnQkM7QUFHVCxTQUFTQyxjQUFBQTtBQUNaLFNBQU9uRixXQUFXQyxnQkFBZ0JtRixVQUFVO0FBQ2hEO0FBRmdCRDtBQUlULFNBQVNFLGdCQUFBQTtBQUNaLFNBQU9qRixhQUFhSCxnQkFBZ0JtRixVQUFVO0FBQ2xEO0FBRmdCQztBQUdULFNBQVNDLG1CQUFBQTtBQUNaLFNBQU90RixXQUFXQyxnQkFBZ0JzRixlQUFlO0FBQ3JEO0FBRmdCRDtBQUlULFNBQVNFLHFCQUFBQTtBQUNaLFNBQU9wRixhQUFhSCxnQkFBZ0JzRixlQUFlO0FBQ3ZEO0FBRmdCQztBQUdULFNBQVNDLGtCQUFBQTtBQUNaLFNBQU96RixXQUFXQyxnQkFBZ0J5RixjQUFjO0FBQ3BEO0FBRmdCRDtBQUlULFNBQVNFLG9CQUFBQTtBQUNaLFNBQU92RixhQUFhSCxnQkFBZ0J5RixjQUFjO0FBQ3REO0FBRmdCQztBQUdULFNBQVNDLGtCQUFBQTtBQUNaLFNBQU81RixXQUFXQyxnQkFBZ0I0RixjQUFjO0FBQ3BEO0FBRmdCRDtBQUlULFNBQVNFLG9CQUFBQTtBQUNaLFNBQU8xRixhQUFhSCxnQkFBZ0I0RixjQUFjO0FBQ3REO0FBRmdCQztBQUdULFNBQVNDLGtCQUFBQTtBQUNaLFNBQU8vRixXQUFXQyxnQkFBZ0IrRixjQUFjO0FBQ3BEO0FBRmdCRDtBQUlULFNBQVNFLG9CQUFBQTtBQUNaLFNBQU83RixhQUFhSCxnQkFBZ0IrRixjQUFjO0FBQ3REO0FBRmdCQztBQUdULFNBQVNDLDRCQUFBQTtBQUNaLFNBQU9sRyxXQUFXQyxnQkFBZ0JrRywwQkFBMEI7QUFDaEU7QUFGZ0JEO0FBSVQsU0FBU0UsOEJBQUFBO0FBQ1osU0FBT2hHLGFBQWFILGdCQUFnQmtHLDBCQUEwQjtBQUNsRTtBQUZnQkM7QUFHVCxTQUFTQywyQkFBQUE7QUFDWixTQUFPckcsV0FBV0MsZ0JBQWdCcUcseUJBQXlCO0FBQy9EO0FBRmdCRDtBQUlULFNBQVNFLDZCQUFBQTtBQUNaLFNBQU9uRyxhQUFhSCxnQkFBZ0JxRyx5QkFBeUI7QUFDakU7QUFGZ0JDO0FBR1QsU0FBU0Msb0JBQUFBO0FBQ1osU0FBT3hHLFdBQVdDLGdCQUFnQndHLGdCQUFnQjtBQUN0RDtBQUZnQkQ7QUFJVCxTQUFTRSxzQkFBQUE7QUFDWixTQUFPdEcsYUFBYUgsZ0JBQWdCd0csZ0JBQWdCO0FBQ3hEO0FBRmdCQztBQUdULFNBQVNDLHVCQUFBQTtBQUNaLFNBQU8zRyxXQUFXQyxnQkFBZ0IyRyxvQkFBb0I7QUFDMUQ7QUFGZ0JEO0FBSVQsU0FBU0UseUJBQUFBO0FBQ1osU0FBT3pHLGFBQWFILGdCQUFnQjJHLG9CQUFvQjtBQUM1RDtBQUZnQkM7QUFHVCxTQUFTQyx3QkFBQUE7QUFDWixTQUFPOUcsV0FBV0MsZ0JBQWdCOEcscUJBQXFCO0FBQzNEO0FBRmdCRDtBQUlULFNBQVNFLDBCQUFBQTtBQUNaLFNBQU81RyxhQUFhSCxnQkFBZ0I4RyxxQkFBcUI7QUFDN0Q7QUFGZ0JDO0FBR1QsU0FBU0MscUJBQUFBO0FBQ1osU0FBT2pILFdBQVdDLGdCQUFnQmlILGtCQUFrQjtBQUN4RDtBQUZnQkQ7QUFJVCxTQUFTRSx1QkFBQUE7QUFDWixTQUFPL0csYUFBYUgsZ0JBQWdCaUgsa0JBQWtCO0FBQzFEO0FBRmdCQztBQUdULFNBQVNDLHFCQUFBQTtBQUNaLFNBQU9wSCxXQUFXQyxnQkFBZ0JvSCxrQkFBa0I7QUFDeEQ7QUFGZ0JEO0FBSVQsU0FBU0UsdUJBQUFBO0FBQ1osU0FBT2xILGFBQWFILGdCQUFnQm9ILGtCQUFrQjtBQUMxRDtBQUZnQkM7QUFHVCxTQUFTQyxtQkFBQUE7QUFDWixTQUFPdkgsV0FBV0MsZ0JBQWdCdUgsZ0JBQWdCO0FBQ3REO0FBRmdCRDtBQUlULFNBQVNFLHFCQUFBQTtBQUNaLFNBQU9ySCxhQUFhSCxnQkFBZ0J1SCxnQkFBZ0I7QUFDeEQ7QUFGZ0JDO0FBR1QsU0FBU0MsaUJBQUFBO0FBQ1osU0FBTzFILFdBQVdDLGdCQUFnQjBILGFBQWE7QUFDbkQ7QUFGZ0JEO0FBSVQsU0FBU0UsbUJBQUFBO0FBQ1osU0FBT3hILGFBQWFILGdCQUFnQjBILGFBQWE7QUFDckQ7QUFGZ0JDO0FBR1QsU0FBU0MsZUFBQUE7QUFDWixTQUFPN0gsV0FBV0MsZ0JBQWdCNkgsV0FBVztBQUNqRDtBQUZnQkQ7QUFJVCxTQUFTRSxpQkFBQUE7QUFDWixTQUFPM0gsYUFBYUgsZ0JBQWdCNkgsV0FBVztBQUNuRDtBQUZnQkM7QUFHVCxTQUFTQyxvQkFBQUE7QUFDWixTQUFPaEksV0FBV0MsZ0JBQWdCZ0ksaUJBQWlCO0FBQ3ZEO0FBRmdCRDtBQUlULFNBQVNFLHNCQUFBQTtBQUNaLFNBQU85SCxhQUFhSCxnQkFBZ0JnSSxpQkFBaUI7QUFDekQ7QUFGZ0JDO0FBR1QsU0FBU0MsMkJBQUFBO0FBQ1osU0FBT25JLFdBQVdDLGdCQUFnQm1JLHlCQUF5QjtBQUMvRDtBQUZnQkQ7QUFJVCxTQUFTRSw2QkFBQUE7QUFDWixTQUFPakksYUFBYUgsZ0JBQWdCbUkseUJBQXlCO0FBQ2pFO0FBRmdCQztBQUdULFNBQVNDLHFCQUFBQTtBQUNaLFNBQU90SSxXQUFXQyxnQkFBZ0JzSSxrQkFBa0I7QUFDeEQ7QUFGZ0JEO0FBSVQsU0FBU0UsdUJBQUFBO0FBQ1osU0FBT3BJLGFBQWFILGdCQUFnQnNJLGtCQUFrQjtBQUMxRDtBQUZnQkM7QUFHVCxTQUFTQywyQkFBQUE7QUFDWixTQUFPekksV0FBV0MsZ0JBQWdCeUkseUJBQXlCO0FBQy9EO0FBRmdCRDtBQUlULFNBQVNFLDZCQUFBQTtBQUNaLFNBQU92SSxhQUFhSCxnQkFBZ0J5SSx5QkFBeUI7QUFDakU7QUFGZ0JDO0FBR1QsU0FBU0MsbUJBQUFBO0FBQ1osU0FBTzVJLFdBQVdDLGdCQUFnQjRJLGVBQWU7QUFDckQ7QUFGZ0JEO0FBSVQsU0FBU0UscUJBQUFBO0FBQ1osU0FBTzFJLGFBQWFILGdCQUFnQjRJLGVBQWU7QUFDdkQ7QUFGZ0JDO0FBR1QsU0FBU0MsVUFBQUE7QUFDWixTQUFPL0ksV0FBV0MsZ0JBQWdCK0ksS0FBSztBQUMzQztBQUZnQkQ7QUFJVCxTQUFTRSxZQUFBQTtBQUNaLFNBQU83SSxhQUFhSCxnQkFBZ0IrSSxLQUFLO0FBQzdDO0FBRmdCQztBQUdULFNBQVNDLGtCQUFBQTtBQUNaLFNBQU9sSixXQUFXQyxnQkFBZ0JrSixlQUFlO0FBQ3JEO0FBRmdCRDtBQUlULFNBQVNFLG9CQUFBQTtBQUNaLFNBQU9oSixhQUFhSCxnQkFBZ0JrSixlQUFlO0FBQ3ZEO0FBRmdCQztBQUdULFNBQVNDLGNBQUFBO0FBQ1osU0FBT3JKLFdBQVdDLGdCQUFnQnFKLFNBQVM7QUFDL0M7QUFGZ0JEO0FBSVQsU0FBU0UsZ0JBQUFBO0FBQ1osU0FBT25KLGFBQWFILGdCQUFnQnFKLFNBQVM7QUFDakQ7QUFGZ0JDO0FBR1QsU0FBU0MsY0FBQUE7QUFDWixTQUFPeEosV0FBV0MsZ0JBQWdCd0osVUFBVTtBQUNoRDtBQUZnQkQ7QUFJVCxTQUFTRSxnQkFBQUE7QUFDWixTQUFPdEosYUFBYUgsZ0JBQWdCd0osVUFBVTtBQUNsRDtBQUZnQkM7QUFHVCxTQUFTQyxvQkFBQUE7QUFDWixTQUFPM0osV0FBV0MsZ0JBQWdCMkosZ0JBQWdCO0FBQ3REO0FBRmdCRDtBQUlULFNBQVNFLHNCQUFBQTtBQUNaLFNBQU96SixhQUFhSCxnQkFBZ0IySixnQkFBZ0I7QUFDeEQ7QUFGZ0JDO0FBR1QsU0FBU0Msd0JBQUFBO0FBQ1osU0FBTzlKLFdBQVdDLGdCQUFnQjhKLHNCQUFzQjtBQUM1RDtBQUZnQkQ7QUFJVCxTQUFTRSwwQkFBQUE7QUFDWixTQUFPNUosYUFBYUgsZ0JBQWdCOEosc0JBQXNCO0FBQzlEO0FBRmdCQztBQUdULFNBQVNDLHdCQUFBQTtBQUNaLFNBQU9qSyxXQUFXQyxnQkFBZ0JpSyxzQkFBc0I7QUFDNUQ7QUFGZ0JEO0FBSVQsU0FBU0UsMEJBQUFBO0FBQ1osU0FBTy9KLGFBQWFILGdCQUFnQmlLLHNCQUFzQjtBQUM5RDtBQUZnQkM7QUFHVCxTQUFTQywwQkFBQUE7QUFDWixTQUFPcEssV0FBV0MsZ0JBQWdCb0ssdUJBQXVCO0FBQzdEO0FBRmdCRDtBQUlULFNBQVNFLDRCQUFBQTtBQUNaLFNBQU9sSyxhQUFhSCxnQkFBZ0JvSyx1QkFBdUI7QUFDL0Q7QUFGZ0JDO0FBR1QsU0FBU0MsMEJBQUFBO0FBQ1osU0FBT3ZLLFdBQVdDLGdCQUFnQnVLLHVCQUF1QjtBQUM3RDtBQUZnQkQ7QUFJVCxTQUFTRSw0QkFBQUE7QUFDWixTQUFPckssYUFBYUgsZ0JBQWdCdUssdUJBQXVCO0FBQy9EO0FBRmdCQztBQUdULFNBQVNDLHdCQUFBQTtBQUNaLFNBQU8xSyxXQUFXQyxnQkFBZ0IwSyxzQkFBc0I7QUFDNUQ7QUFGZ0JEO0FBSVQsU0FBU0UsMEJBQUFBO0FBQ1osU0FBT3hLLGFBQWFILGdCQUFnQjBLLHNCQUFzQjtBQUM5RDtBQUZnQkM7QUFHVCxTQUFTQyxxQkFBQUE7QUFDWixTQUFPN0ssV0FBV0MsZ0JBQWdCNkssa0JBQWtCO0FBQ3hEO0FBRmdCRDtBQUlULFNBQVNFLHVCQUFBQTtBQUNaLFNBQU8zSyxhQUFhSCxnQkFBZ0I2SyxrQkFBa0I7QUFDMUQ7QUFGZ0JDO0FBR1QsU0FBU0Msc0JBQUFBO0FBQ1osU0FBT2hMLFdBQVdDLGdCQUFnQmdMLG1CQUFtQjtBQUN6RDtBQUZnQkQ7QUFJVCxTQUFTRSx3QkFBQUE7QUFDWixTQUFPOUssYUFBYUgsZ0JBQWdCZ0wsbUJBQW1CO0FBQzNEO0FBRmdCQztBQUlULFNBQVNDLHFCQUFBQTtBQUNaLFNBQU9uTCxXQUFXQyxnQkFBZ0JtTCxrQkFBa0I7QUFDeEQ7QUFGZ0JEO0FBSVQsU0FBU0UsdUJBQUFBO0FBQ1osU0FBT2pMLGFBQWFILGdCQUFnQm1MLGtCQUFrQjtBQUMxRDtBQUZnQkM7QUFJVCxTQUFTQyxvQkFBQUE7QUFDWixTQUFPdEwsV0FBV0MsZ0JBQWdCc0wsaUJBQWlCO0FBQ3ZEO0FBRmdCRDtBQUlULFNBQVNFLHNCQUFBQTtBQUNaLFNBQU9wTCxhQUFhSCxnQkFBZ0JzTCxpQkFBaUI7QUFDekQ7QUFGZ0JDO0FBSVQsU0FBU0Msa0JBQUFBO0FBQ1osU0FBT3pMLFdBQVdDLGdCQUFnQnlMLGNBQWM7QUFDcEQ7QUFGZ0JEO0FBSVQsU0FBU0Usb0JBQUFBO0FBQ1osU0FBT3ZMLGFBQWFILGdCQUFnQnlMLGNBQWM7QUFDdEQ7QUFGZ0JDO0FBR1QsU0FBU0MsaUJBQUFBO0FBQ1osU0FBTzVMLFdBQVdDLGdCQUFnQjRMLGFBQWE7QUFDbkQ7QUFGZ0JEO0FBSVQsU0FBU0UsbUJBQUFBO0FBQ1osU0FBTzFMLGFBQWFILGdCQUFnQjRMLGFBQWE7QUFDckQ7QUFGZ0JDO0FBR1QsU0FBU0Msa0JBQUFBO0FBQ1osU0FBTy9MLFdBQVdDLGdCQUFnQitMLGNBQWM7QUFDcEQ7QUFGZ0JEO0FBSVQsU0FBU0Usb0JBQUFBO0FBQ1osU0FBTzdMLGFBQWFILGdCQUFnQitMLGNBQWM7QUFDdEQ7QUFGZ0JDO0FBR1QsU0FBU0MsVUFBQUE7QUFDWixTQUFPbE0sV0FBV0MsZ0JBQWdCa00sS0FBSztBQUMzQztBQUZnQkQ7QUFJVCxTQUFTRSxZQUFBQTtBQUNaLFNBQU9oTSxhQUFhSCxnQkFBZ0JrTSxLQUFLO0FBQzdDO0FBRmdCQzs7O0FDdmNULFNBQVNDLFNBQTJCQyxXQUFtRTtBQUMxRyxTQUFPQyxxQkFBcUIsWUFBWUQsU0FBQUE7QUFDNUM7QUFGZ0JEOzs7QUNHVCxTQUFTRyxXQUE0QkMsSUFBcUJDLFdBQW9FO0FBQ2pJLFNBQU9DLFVBQVdGLElBQUlDLFNBQUFBO0FBQzFCO0FBRmdCRixPQUFBQSxZQUFBQTs7O0FDSFQsU0FBU0ksSUFBcUJDLFdBQTJEO0FBQzVGLFNBQU9DLEdBQUlELFNBQUFBO0FBQ2Y7QUFGZ0JELE9BQUFBLEtBQUFBOzs7QUNBVCxTQUFTRyxXQUE2QkMsV0FBbUU7QUFDNUcsU0FBT0MscUJBQXFCLGNBQWNELFNBQUFBO0FBQzlDO0FBRmdCRDs7O0FDR1QsU0FBU0csYUFBOEJDLElBQXFCQyxXQUFvRTtBQUNuSSxTQUFPQyxZQUFhRixJQUFJQyxTQUFBQTtBQUM1QjtBQUZnQkYsT0FBQUEsY0FBQUE7OztBQ0hULFNBQVNJLE1BQXVCQyxXQUEyRDtBQUM5RixTQUFPQyxLQUFNRCxTQUFBQTtBQUNqQjtBQUZnQkQsT0FBQUEsT0FBQUE7OztBQ0RULFNBQVNHLE9BQU9DLFFBQWlCQyxPQUFzQjtBQUMxRCxTQUE0QixDQUFDQyxRQUFnQkMsUUFBZ0JDLFVBQUFBO0FBQ3pELFVBQU1DLFNBQVNDLFFBQVFDLFlBQStCQyxnQkFBZ0JDLGtCQUFrQlAsUUFBUUMsTUFBQUEsS0FBVyxDQUFBO0FBRTNHLFFBQUlFLE9BQU9LLEtBQUssQ0FBQ0MsVUFBVUEsTUFBTVAsVUFBVUEsS0FBQUEsR0FBUTtBQUMvQyxZQUFNLElBQUlRLE1BQU1DLGFBQWFDLDZDQUE2QztJQUM5RTtBQUVBLFVBQU1DLGFBQWFULFFBQVFDLFlBQXVCLHFCQUFxQkwsUUFBUUMsTUFBQUE7QUFDL0UsVUFBTWEsV0FBV0MsTUFBTUMsUUFBUUgsVUFBQUEsSUFBY0EsV0FBV1gsS0FBQUEsSUFBU2U7QUFFakViLFlBQVFjLGVBQ0paLGdCQUFnQkMsa0JBQ2hCO1NBQUlKO01BQVE7UUFBRUQ7UUFBT0Q7UUFBUUY7UUFBT29CLE1BQU1DLGdCQUFnQnZCO1FBQVF3QixNQUFNdkI7UUFBS2dCO01BQVM7T0FDdEZkLFFBQ0FDLE1BQUFBO0VBRVI7QUFDSjtBQWxCZ0JKOzs7QUNBVCxTQUFTeUIsY0FBYUMsUUFBa0M7QUFDM0QsU0FBT0MsVUFBQUEsR0FBY0QsTUFBQUE7QUFDekI7QUFGZ0JELE9BQUFBLFlBQUFBOzs7QUNBVCxTQUFTRyxvQkFBbUJDLGNBQW9EO0FBQ25GLFNBQU9DLGdCQUFBQSxHQUFvQkQsWUFBQUE7QUFDL0I7QUFGZ0JELE9BQUFBLGtCQUFBQTs7O0FDQ1QsU0FBU0csZ0JBQWtDQyxTQUE0RDtBQUMxRyxTQUFPQyxtQkFBbUIsbUJBQW1CRCxPQUFBQTtBQUNqRDtBQUZnQkQ7OztBQ0FULFNBQVNHLFdBQTRCQyxTQUFvRDtBQUM1RixTQUFPQyxVQUFXRCxPQUFBQTtBQUN0QjtBQUZnQkQsT0FBQUEsWUFBQUE7OztBQ0dULFNBQVNHLGtCQUFtQ0MsSUFBcUJDLFNBQTZEO0FBQ2pJLFNBQU9DLGlCQUFrQkYsSUFBSUMsT0FBQUE7QUFDakM7QUFGZ0JGLE9BQUFBLG1CQUFBQTs7O0FDUFQsSUFBTUksa0JBQWtCO0FBQ3hCLElBQU1DLGdCQUFnQjtBQUN0QixJQUFNQyxvQkFBb0I7QUFDMUIsSUFBTUMsaUJBQWlCO0FBQ3ZCLElBQU1DLG9CQUFvQjs7O0FDRjFCLFNBQVNDLGFBQWFDLE9BQWdDO0VBQUVDLFNBQVM7QUFBSyxHQUFDO0FBQzFFLFNBQU8sQ0FBQ0MsUUFBYUMsY0FBZ0NDLGVBQUFBO0FBQ2pELGVBQVdDLE9BQU9MLE1BQU07QUFDcEIsVUFBSUksWUFBWTtBQUNaRSxnQkFBUUMsZUFBZUMsaUJBQWlCSCxLQUFLTCxLQUFLSyxHQUFBQSxHQUFNRCxXQUFXSyxLQUFLO0FBQ3hFLGVBQU9MO01BQ1g7QUFDQUUsY0FBUUMsZUFBZUMsaUJBQWlCSCxLQUFLTCxLQUFLSyxHQUFBQSxHQUFNSCxNQUFBQTtBQUN4RCxhQUFPQTtJQUNYO0VBQ0o7QUFDSjtBQVhnQkg7OztBQ0NoQixTQUFTVyxxQkFBcUJDLFFBQWFDLFNBQTJEO0FBQ2xHLGFBQVdDLFFBQVFELFNBQVM7QUFDeEJFLFlBQVFDLGVBQWVDLGdCQUFnQkgsTUFBTUQsUUFBUUMsSUFBQUEsRUFBT0ksS0FBS04sTUFBQUE7QUFDakVHLFlBQVFDLGVBQWVHLGtCQUFrQkwsTUFBTUQsUUFBUUMsSUFBQUEsRUFBT00sT0FBT1IsTUFBQUE7RUFDekU7QUFDSjtBQUxTRDtBQU9GLFNBQVNVLFNBQVNSLFNBQTJEO0FBQ2hGLFNBQU8sQ0FBQ0QsUUFBYVUsY0FBZ0NDLGVBQUFBO0FBQ2pELFFBQUlBLFlBQVk7QUFDWlosMkJBQXFCWSxXQUFXQyxPQUFPWCxPQUFBQTtBQUN2QyxhQUFPVTtJQUNYO0FBQ0FaLHlCQUFxQkMsUUFBUUMsT0FBQUE7QUFDN0IsV0FBT0Q7RUFDWDtBQUNKO0FBVGdCUzs7O0FDUmhCLFNBQVNJLGtCQUFrQjs7Ozs7Ozs7Ozs7O0FBZXBCLElBQU1DLGlCQUFOLE1BQU1BO1NBQUFBOzs7RUFDcUNDO0VBQ0FDO0VBQ0FDO0VBQ3BDQztFQUNBQztFQUVWLE1BQWFDLGVBQWU7QUFDeEIsU0FBS0YsY0FBY0csTUFBTUMsUUFBUSxLQUFLUCxPQUFPLElBQUksS0FBS0EsVUFBVSxLQUFLQSxRQUFRRyxZQUN4RUssS0FBSyxDQUFDQyxPQUFPQyxXQUFBQTtBQUNWLFVBQUlDLFdBQVdGLE1BQU1HLEdBQUcsR0FBRztBQUN2QixlQUFPO01BQ1g7QUFDQSxVQUFJRCxXQUFXRCxPQUFPRSxHQUFHLEdBQUc7QUFDeEIsZUFBTztNQUNYO0FBQ0EsYUFBT0gsTUFBTUcsTUFBTUYsT0FBT0U7SUFDOUIsQ0FBQSxFQUNDQyxJQUFJLENBQUNDLFNBQVM7TUFBRSxHQUFHQTtNQUFLQyxNQUFNRCxJQUFJQyxRQUFRO0lBQVUsRUFBQTtBQUN6RCxRQUFJVCxNQUFNQyxRQUFRLEtBQUtQLE9BQU8sR0FBRztBQUM3QixXQUFLSSxnQkFBZ0IsQ0FBQztJQUMxQixPQUFPO0FBQ0gsV0FBS0EsZ0JBQWdCO1FBQ2pCWSxRQUFRLEtBQUtoQixRQUFRZ0I7TUFDekI7SUFDSjtFQUNKO0VBRUEsTUFBYUMsWUFBWUMsU0FBMkI7QUFDaEQsVUFBTUMsWUFBdUIsQ0FBQTtBQUM3QixlQUFXQyxrQkFBa0IsS0FBS2pCLFlBQVk7QUFFMUMsWUFBTWtCLE9BQU8sS0FBS25CLFVBQVVvQixrQkFBMkJDLGlCQUFpQkgsZUFBZUwsTUFBTTtRQUN6RkcsUUFBUU07UUFDUk4sUUFBUU87T0FDWDtBQUNELFlBQU1ULFNBQVNJLGVBQWVKLFVBQVUsS0FBS1osY0FBY1k7QUFDM0QsVUFBSUssUUFBUUwsU0FBU0UsT0FBQUEsR0FBVTtBQUMzQkMsa0JBQVVPLEtBQUssSUFBQTtBQUNmO01BQ0o7QUFHQSxZQUFNQyxvQkFBb0IsS0FBS3pCLFVBQVVvQixrQkFBc0NNLGtCQUFrQlIsZUFBZUwsTUFBTTtRQUNsSEcsUUFBUU07UUFDUk4sUUFBUU87T0FDWDtBQUNELFlBQU1JLGtCQUFrQixLQUFLM0IsVUFBVW9CLGtCQUFzQ1EsZ0JBQWdCVixlQUFlTCxNQUFNO1FBQzlHRyxRQUFRTTtRQUNSTixRQUFRTztPQUNYO0FBR0QsWUFBTU0sUUFBUSxNQUFNLEtBQUtDLGFBQWFkLFNBQVNTLHFCQUFxQlAsZUFBZVcsS0FBSztBQUN4RixZQUFNbkIsTUFBTSxNQUFNLEtBQUtvQixhQUFhZCxTQUFTVyxtQkFBbUJULGVBQWVSLEdBQUc7QUFDbEZPLGdCQUFVTyxLQUFLLE1BQU0sS0FBS08sY0FBY2YsU0FBU2EsT0FBT25CLEtBQUtRLGNBQUFBLENBQUFBO0lBQ2pFO0FBQ0EsV0FBT0QsVUFBVWUsTUFBTSxDQUFDQyxTQUFTQSxJQUFBQTtFQUNyQztFQUVBLE1BQWdCRixjQUFjZixTQUEyQmEsT0FBZW5CLEtBQWF3QixXQUE2QjtBQUM5RyxVQUFNQyxTQUFTbkIsUUFBUW9CLFFBQVFEO0FBQy9CLFFBQUcsQ0FBQ0EsT0FBUSxPQUFNLElBQUlFLE1BQU0sMEJBQTBCO0FBQ3RELFVBQU1DLE1BQU0sS0FBS0MsWUFBWXZCLFNBQVNrQixVQUFVckIsSUFBSTtBQUNwRCxVQUFNLEVBQUUyQixXQUFXQyxhQUFZLElBQUssTUFBTSxLQUFLMUMsZUFBZTJDLFVBQVVQLFFBQVFHLEtBQUs1QixHQUFBQTtBQUVyRixRQUFJOEIsWUFBWVgsT0FBTztBQUNuQixZQUFNLEtBQUtjLHlCQUF5QjNCLFNBQVM7UUFDekNhO1FBQ0FuQjtRQUNBNEI7UUFDQUg7UUFDQUs7UUFDQUM7TUFDSixDQUFBO0lBQ0o7QUFFQSxXQUFPO0VBQ1g7RUFFVUYsWUFBWXZCLFNBQTJCSCxNQUFjO0FBQzNELFVBQU0rQixTQUFTLEdBQUc1QixRQUFRTyxTQUFTVixJQUFJLElBQUlHLFFBQVFNLFFBQVFULElBQUksSUFBSUEsSUFBQUE7QUFDbkUsV0FBT2dDLFdBQVcsS0FBQSxFQUFPQyxPQUFPRixNQUFBQSxFQUFRRyxPQUFPLEtBQUEsRUFBT0MsU0FBUTtFQUNsRTtFQUVBLE1BQWdCTCx5QkFBeUIzQixTQUEyQmlDLHVCQUE2QztBQUM3RyxVQUFNLElBQUlDLGdCQUFnQixNQUFNLEtBQUtDLGdCQUFnQm5DLE9BQUFBLENBQUFBO0VBQ3pEO0VBRUEsTUFBZ0JtQyxnQkFBZ0JDLFVBQTRCO0FBQ3hELFFBQUksQ0FBQ2hELE1BQU1DLFFBQVEsS0FBS1AsT0FBTyxHQUFHO0FBQzlCLGFBQU8sS0FBS0EsUUFBUXVELGdCQUFnQkMsYUFBYUo7SUFDckQ7QUFDQSxXQUFPSSxhQUFhSjtFQUN4QjtFQUVBLE1BQWNwQixhQUFrRGQsU0FBMkJ1QyxpQkFBZ0M7QUFDdkgsV0FBTzlDLFdBQVc4QyxlQUFBQSxJQUFtQkEsZ0JBQWdCdkMsT0FBQUEsSUFBV3VDO0VBQ3BFO0FBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoSE8sSUFBTUMsMkJBQU4sTUFBTUE7U0FBQUE7OztFQUNPQyxVQUFtRSxvQkFBSUMsUUFBQUE7RUFDL0VDLGFBQStCLENBQUE7RUFFL0JDLGtCQUFrQkMsUUFBa0JDLEtBQWE7QUFDckQsV0FBT0MsS0FBS0MsT0FBTyxLQUFLUCxRQUFRUSxJQUFJSixNQUFBQSxFQUFTSSxJQUFJSCxHQUFBQSxFQUFNSSxZQUFZQyxLQUFLQyxJQUFHLEtBQU0sR0FBQTtFQUNyRjtFQUVRQyxrQkFBa0JSLFFBQWtCQyxLQUFhUSxpQkFBeUI7QUFDOUUsVUFBTUMsWUFBWUMsV0FBVyxNQUFBO0FBQ3pCLFdBQUtmLFFBQVFRLElBQUlKLE1BQUFBLEVBQVNJLElBQUlILEdBQUFBLEVBQU1XO0FBQ3BDQyxtQkFBYUgsU0FBQUE7QUFDYixXQUFLWixhQUFhLEtBQUtBLFdBQVdnQixPQUFPLENBQUNDLE9BQU9BLE1BQU1MLFNBQUFBO0lBQzNELEdBQUdELGVBQUFBO0FBQ0gsU0FBS1gsV0FBV2tCLEtBQUtOLFNBQUFBO0VBQ3pCO0VBRUEsTUFBYU8sVUFBVWpCLFFBQWtCQyxLQUFhaUIsS0FBYTtBQUMvRCxVQUFNVCxrQkFBa0JTO0FBRXhCLFFBQUksQ0FBQyxLQUFLdEIsUUFBUVEsSUFBSUosTUFBQUEsR0FBUztBQUMzQixXQUFLSixRQUFRdUIsSUFBSW5CLFFBQVEsb0JBQUlvQixJQUFBQSxDQUFBQTtJQUNqQztBQUVBLFFBQUksQ0FBQyxLQUFLeEIsUUFBUVEsSUFBSUosTUFBQUEsRUFBU0ksSUFBSUgsR0FBQUEsR0FBTTtBQUNyQyxXQUFLTCxRQUFRUSxJQUFJSixNQUFBQSxFQUFTbUIsSUFBSWxCLEtBQUs7UUFBRVcsV0FBVztRQUFHUCxXQUFXQyxLQUFLQyxJQUFHLElBQUtFO01BQWdCLENBQUE7SUFDL0Y7QUFFQSxRQUFJWSxlQUFlLEtBQUt0QixrQkFBa0JDLFFBQVFDLEdBQUFBO0FBR2xELFFBQUlvQixnQkFBZ0IsR0FBRztBQUNuQixXQUFLekIsUUFBUVEsSUFBSUosTUFBQUEsRUFBU0ksSUFBSUgsR0FBQUEsRUFBTUksWUFBWUMsS0FBS0MsSUFBRyxJQUFLRTtBQUM3RFkscUJBQWUsS0FBS3RCLGtCQUFrQkMsUUFBUUMsR0FBQUE7SUFDbEQ7QUFFQSxTQUFLTCxRQUFRUSxJQUFJSixNQUFBQSxFQUFTSSxJQUFJSCxHQUFBQSxFQUFNVztBQUNwQyxTQUFLSixrQkFBa0JSLFFBQVFDLEtBQUtRLGVBQUFBO0FBRXBDLFdBQU87TUFDSEcsV0FBVyxLQUFLaEIsUUFBUVEsSUFBSUosTUFBQUEsRUFBU0ksSUFBSUgsR0FBQUEsRUFBTVc7TUFDL0NTO0lBQ0o7RUFDSjtFQUVPQyxnQkFBZ0I7QUFDbkIsU0FBS3hCLFdBQVd5QixRQUFRVixZQUFBQTtFQUM1QjtBQUNKOzs7Ozs7Ozs7Ozs7O0FDN0NPLElBQU1XLGtCQUFOLE1BQU1BLGlCQUFBQTtTQUFBQTs7O0VBQ1QsT0FBY0MsUUFBUUMsVUFBa0MsQ0FBQSxHQUFJO0FBQ3hELFdBQU87TUFDSEMsUUFBUUg7TUFDUkksV0FBVztRQUNQO1VBQ0lDLFNBQVNDO1VBQ1RDLFVBQVVMO1FBQ2Q7UUFDQTtVQUNJRyxTQUFTRztVQUNUQyxVQUFVQztRQUNkOztNQUVKQyxTQUFTO1FBQUNIO1FBQW1CRjs7SUFDakM7RUFDSjtFQUVBLE9BQWNNLGFBQWFWLFNBQWdDO0FBQ3ZELFVBQU1FLFlBQVk7U0FDWCxLQUFLUyxxQkFBcUJYLE9BQUFBO01BQzdCO1FBQ0lHLFNBQVNHO1FBQ1RDLFVBQVVDO01BQ2Q7O0FBRUosV0FBTztNQUNIUCxRQUFRSDtNQUNSYyxTQUFTWixRQUFRWSxXQUFXLENBQUE7TUFDNUJWO01BQ0FPLFNBQVNQO0lBQ2I7RUFDSjtFQUVBLE9BQWVTLHFCQUFxQlgsU0FBZ0M7QUFDaEUsUUFBSUEsUUFBUWEsZUFBZWIsUUFBUWMsWUFBWTtBQUMzQyxhQUFPO1FBQUMsS0FBS0MsMkJBQTJCZixPQUFBQTs7SUFDNUM7QUFDQSxXQUFPO01BQ0gsS0FBS2UsMkJBQTJCZixPQUFBQTtNQUNoQztRQUNJRyxTQUFTSCxRQUFRTztRQUNqQkEsVUFBVVAsUUFBUU87TUFDdEI7O0VBRVI7RUFFQSxPQUFlUSwyQkFBMkJmLFNBQWdDO0FBQ3RFLFFBQUlBLFFBQVFjLFlBQVk7QUFDcEIsYUFBTztRQUNIWCxTQUFTQztRQUNUVSxZQUFZZCxRQUFRYztRQUNwQkUsUUFBUWhCLFFBQVFnQixVQUFVLENBQUE7TUFDOUI7SUFDSjtBQUNBLFdBQU87TUFDSGIsU0FBU0M7TUFDVFUsWUFBWSw4QkFBT0csbUJBQTRDLE1BQU1BLGVBQWVDLHVCQUFzQixHQUE5RjtNQUNaRixRQUFRaEIsUUFBUU8sV0FBVztRQUFDUCxRQUFRTztVQUFZUCxRQUFRYSxjQUFjO1FBQUNiLFFBQVFhO1VBQWUsQ0FBQTtJQUNsRztFQUNKO0FBQ0o7Ozs7Ozs7QUMvREEsSUFBTU0scUJBQStDLElBQUlDLCtCQUFBQTtBQUV6RCxJQUFNQyxtQkFBTixNQUFNQSwwQkFBeUJDLFdBQUFBO0VBUC9CLE9BTytCQTs7O0VBQ3BCQyxlQUFlQyxTQUFrQjtBQUNwQ0wsdUJBQW1CSSxlQUFlQyxPQUFBQTtFQUN0QztFQUVPQyxpQkFBaUJELFNBQWtCO0FBQ3RDTCx1QkFBbUJNLGlCQUFpQkQsT0FBQUE7RUFDeEM7RUFFT0UsbUJBQW1CRixTQUFrQjtBQUN4Q0wsdUJBQW1CTyxtQkFBbUJGLE9BQUFBO0VBQzFDO0VBRU9HLHFCQUFxQkgsU0FBa0I7QUFDMUNMLHVCQUFtQlEscUJBQXFCSCxPQUFBQTtFQUM1QztFQUVPSSxpQkFBaUJKLFNBQWtCO0FBQ3RDTCx1QkFBbUJTLGlCQUFpQkosT0FBQUE7RUFDeEM7RUFFT0ssY0FBY0wsU0FBa0I7QUFDbkNMLHVCQUFtQlUsY0FBY0wsT0FBQUE7RUFDckM7RUFFT00saUJBQWlCTixTQUFrQjtBQUN0Q0wsdUJBQW1CVyxpQkFBaUJOLE9BQUFBO0VBQ3hDO0VBRU9PLGtCQUFrQlAsU0FBa0I7QUFDdkNMLHVCQUFtQlksa0JBQWtCUCxPQUFBQTtFQUN6QztFQUVPUSw2QkFBNkJSLFNBQWtCO0FBQ2xETCx1QkFBbUJhLDZCQUE2QlIsT0FBQUE7RUFDcEQ7RUFFT1Msd0JBQXdCVCxTQUFrQjtBQUM3Q0wsdUJBQW1CYyx3QkFBd0JULE9BQUFBO0VBQy9DO0VBRU9VLHVCQUF1QlYsU0FBa0I7QUFDNUNMLHVCQUFtQmUsdUJBQXVCVixPQUFBQTtFQUM5QztBQUNKO0FBRUEsZUFBc0JXLG9CQUFBQTtBQUNsQixTQUFPLE1BQU1DLGlCQUFrQjtJQUMzQkMsWUFBWUMsY0FBY0M7SUFDMUJDLFNBQVM7TUFBQ0M7TUFBcUJDO01BQXVCQzs7SUFDdERDLG1CQUFtQnZCO0lBQ25CRjtFQUNKLENBQUE7QUFDSjtBQVBzQmdCLE9BQUFBLG1CQUFBQTsiLAogICJuYW1lcyI6IFsiQXBwRW52aXJvbWVudCIsICJDb3JlTWV0YWRhdGFLZXkiLCAiRXZlbnREZXN0aW5hdGlvbiIsICJFeGVjdXRpb25Db250ZXh0VHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiTE9HR0VSX1NFUlZJQ0UiLCAiRVZFTlRfU0VSVklDRSIsICJSUENfU0VSVklDRSIsICJNT0RVTEVfQ09OVEFJTkVSIiwgIlJFRkxFQ1RPUl9TRVJWSUNFIiwgIlRJTUVSX1NFUlZJQ0UiLCAiRXJyb3JNZXNzYWdlIiwgIkluamVjdGFibGVTY29wZSIsICJSUENSZXN1bHRTdGF0dXMiLCAiX19kZWZQcm9wIiwgIl9fbmFtZSIsICJnZW5lcmF0ZVJhbmRvbUlkIiwgIk1hdGgiLCAicmFuZG9tIiwgInRvU3RyaW5nIiwgInN1YnN0cmluZyIsICJpc1VuZGVmaW5lZCIsICJfX25hbWUiLCAib2JqIiwgImlzT2JqZWN0IiwgImZuIiwgImlzTmlsIiwgImlzRnVuY3Rpb24iLCAidmFsIiwgImlzU3RyaW5nIiwgImlzTnVtYmVyIiwgImlzQ29uc3RydWN0b3IiLCAiaXNFbXB0eSIsICJhcnJheSIsICJsZW5ndGgiLCAiaXNTeW1ib2wiLCAiaXNBc3luY0Z1bmN0aW9uIiwgIm5hbWUiLCAiaXNCb29sZWFuIiwgImlzUHJvbWlzZSIsICJQcm9taXNlIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkNvbnRhaW5lciIsICJNb2R1bGVNZXRhZGF0YVJlYWRlciIsICJsb2dnZXJTZXJ2aWNlIiwgInJlYWQiLCAibW9kdWxlIiwgImlzRnVuY3Rpb24iLCAib3B0aW9ucyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJNb2R1bGUiLCAiZXhwb3J0VG9rZW5zIiwgImdldEV4cG9ydFRva2VucyIsICJleHBvcnRzIiwgInNlcGFyYXRlZFByb3ZpZGVycyIsICJzZXBhcmF0ZVByb3ZpZGVycyIsICJwcm92aWRlcnMiLCAiY29udHJvbGxlcnMiLCAiaW1wb3J0cyIsICJnZXRQaXBlbGluZSIsICJjbGFzc1JlZiIsICJnbG9iYWwiLCAiR2xvYmFsTW9kdWxlIiwgImNvbnRhaW5lciIsICJQcm9taXNlIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkTW9kdWxlRGVmaW5pdGlvbiIsICJndWFyZHMiLCAiR3VhcmRzIiwgImludGVyY2VwdG9ycyIsICJJbnRlcmNlcHRvcnMiLCAicGlwZXMiLCAiUGlwZXMiLCAiZXJyb3JGaWx0ZXJzIiwgIkVycm9yRmlsdGVycyIsICJtYXAiLCAicHJvdmlkZXJFeHBvcnQiLCAiaGFzT3duTWV0YWRhdGEiLCAiSW5qZWN0YWJsZSIsICJJbnZhbGlkRXhwb3J0RGVmaW5pdGlvbiIsICJpc1N0cmluZyIsICJpc1N5bWJvbCIsICJwcm92aWRlIiwgInByb3ZpZGVyIiwgImluamVjdGFibGVNZXRhZGF0YSIsICJpc05pbCIsICJJbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uIiwgInVzZUNsYXNzIiwgInNjb3BlIiwgInJlZHVjZSIsICJhY2MiLCAiaW5jbHVkZXMiLCAiZXh0ZXJuYWxQcm92aWRlcnMiLCAic2V0IiwgImludGVybmFsUHJvdmlkZXJzIiwgIk1hcCIsICJNb2R1bGVDb250YWluZXIiLCAiQ29udGFpbmVyIiwgInBhcmVudCIsICJtZXRhZGF0YSIsICJpbnN0YW5jZSIsICJyZXBldGl0aXZlSW1wb3J0cyIsICJTZXQiLCAiaW5qZWN0YWJsZSIsICJpbmplY3QiLCAiRXhlY3V0aW9uQ29udGV4dEJhc2UiLCAiJHR5cGUiLCAiJGNsYXNzUmVmIiwgIiRoYW5kbGVyIiwgIiRyZXF1ZXN0IiwgIiRyZXNwb25zZSIsICIkbmFtZSIsICJ0eXBlIiwgImNsYXNzUmVmIiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJyZXNwb25zZSIsICJuYW1lIiwgIk1hbmdvUmVxdWVzdEJhc2UiLCAiJGJvZHkiLCAiJHBsYXllciIsICJib2R5IiwgInBsYXllciIsICJNYW5nb1Jlc3BvbnNlQmFzZSIsICIkbG9nZ2VyU2VydmljZSIsICIkc2VuZExpc3RlbmVycyIsICJTZXQiLCAiJGVycm9yTGlzdGVuZXJzIiwgIiRpc1NlbnQiLCAic2VuZCIsICJkYXRhIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJSUENSZXNwb25zZUFscmVhZHlTZW50IiwgImZvckVhY2giLCAibGlzdGVuZXIiLCAibWVzc2FnZSIsICJkZXRhaWxzIiwgIiRvblNlbmQiLCAiYWRkIiwgIiRvbkVycm9yIiwgIlRyZWVOb2RlIiwgInZhbHVlIiwgImNoaWxkcmVuIiwgImFkZENoaWxkIiwgImNoaWxkIiwgInB1c2giLCAicmVtb3ZlQ2hpbGQiLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJzcGxpY2UiLCAiVHJlZSIsICJyb290IiwgInRyYXZlcnNlIiwgImNhbGxiYWNrIiwgInRyYXZlcnNlTm9kZSIsICJub2RlIiwgImZvckVhY2giLCAiYXN5bmNUcmF2ZXJzZSIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAidG9TdHJpbmciLCAicmVzdWx0IiwgImxpbmVzIiwgImRlcHRoIiwgInJlcGVhdCIsICJqb2luIiwgImRlZmF1bHRDb250cm9sbGVyT3B0aW9ucyIsICJwcmVmaXgiLCAidmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyIsICJvcHRpb25zIiwgImlzTmlsIiwgInZhbGlkIiwgInZhbHVlIiwgImlzT2JqZWN0IiwgImVycm9yIiwgImlzU3RyaW5nIiwgInZhbGlkYXRlRXJyb3JGaWx0ZXIiLCAiaXNGdW5jdGlvbiIsICJwcm90b3R5cGUiLCAiY2F0Y2giLCAidmFsaWRhdGVQaXBlIiwgInRyYW5zZm9ybSIsICJ2YWxpZGF0ZUV2ZW50UGFyYW1ldGVyIiwgImtleSIsICJpc051bWJlciIsICJpbmRleCIsICJ0eXBlIiwgIk1ldGhvZFBhcmFtVHlwZSIsICJCb2R5IiwgIlBsYXllciIsICJkYXRhIiwgIkN1c3RvbSIsICJmYWN0b3J5IiwgIlBhcmFtIiwgIkluZGV4IiwgIlJlcXVlc3QiLCAiUmVzcG9uc2UiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJwaXBlcyIsICJwaXBlIiwgInZhbGlkYXRlRXZlbnRNZXRhZGF0YSIsICJuYW1lIiwgIm1ldGhvZCIsICJwYXJhbXMiLCAicGFyYW0iLCAidmFsaWRhdGVHdWFyZCIsICJjYW5BY3RpdmF0ZSIsICJ2YWxpZGF0ZUludGVyY2VwdG9yIiwgImludGVyY2VwdCIsICJ2YWxpZGF0ZUluamVjdGlvblRva2VuIiwgImlzU3ltYm9sIiwgInZhbGlkYXRlUHJvdmlkZXIiLCAicHJvdmlkZSIsICJ2YWxpZGF0ZUNsYXNzUHJvdmlkZXIiLCAidmFsaWRhdGVWYWx1ZVByb3ZpZGVyIiwgInZhbGlkYXRlRmFjdG9yeVByb3ZpZGVyIiwgInZhbGlkYXRlRXhpc3RpbmdQcm92aWRlciIsICJzY29wZSIsICJJbmplY3RhYmxlU2NvcGUiLCAiU2luZ2xldG9uIiwgIk9iamVjdCIsICJ2YWx1ZXMiLCAiaW5jbHVkZXMiLCAidmFsaWRhdGVPcHRpb25hbEZhY3RvcnlEZXBlbmRlbmN5IiwgInRva2VuIiwgInVzZUZhY3RvcnkiLCAiaW5qZWN0IiwgInZhbGlkYXRlTW9kdWxlT3B0aW9ucyIsICJpc0R5bmFtaWMiLCAiY29udHJvbGxlcnMiLCAiaW1wb3J0cyIsICJwcm92aWRlcnMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImlzQm9vbGVhbiIsICJpbXBvcnRlZCIsICJpc1Byb21pc2UiLCAiY29udHJvbGxlciIsICJwcm92aWRlciIsICJleHBvcnRJdGVtIiwgImRlZmF1bHRJbmplY3RhYmxlT3B0aW9ucyIsICJ2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSIsICJJTlRFUk5BTF9BUFBfQ09OVEFJTkVSIiwgIkdMT0JBTF9BUFBfQ09OVEFJTkVSIiwgIkFQUF9FTlZJUk9NRU5UIiwgIkdMT0JBTF9HVUFSRFMiLCAiR0xPQkFMX0lOVEVSQ0VQVE9SUyIsICJHTE9CQUxfUElQRVMiLCAiR0xPQkFMX0VSUk9SX0ZJTFRFUlMiLCAiUExVR0lOUyIsICJFTkFCTEVfU0hVVERPV05fSE9PS1MiLCAiQ09OVEFJTkVSX09QVElPTlMiLCAiTUFOR09fTE9HX1BSRUZJWCIsICJNQU5HT19SRVFVRVNUX0ZBQ1RPUlkiLCAiTUFOR09fUkVTUE9OU0VfRkFDVE9SWSIsICJFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZIiwgIk1VTFRJUExBWUVSX1NFUlZJQ0UiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgInN1Y2Nlc3MiLCAiZXJyb3IiLCAibWVzc2FnZSIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlRpbWVvdXQiLCAiUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCIsICJIYW5kbGVyTm90Rm91bmQiLCAiUlBDX1JFU1VMVF9VTktOT1dOIiwgIlVua25vd24iLCAiUlBDX1JFU1VMVF9QTEFZRVJfRElTQ09OTkVDVEVEIiwgIlBsYXllckRpc2Nvbm5lY3RlZCIsICJSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQiLCAiUGxheWVyTm90Rm91bmQiLCAiTWFuZ29FcnJvciIsICJFcnJvciIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlVua25vd24iLCAiZGV0YWlscyIsICJtZXNzYWdlIiwgIkd1YXJkQ2FuY2VsRXJyb3IiLCAiQ2FuY2VsbGVkQnlHdWFyZCIsICJHdWFyZEludmFsaWRSZXR1cm5FcnJvciIsICJJbnZhbGlkR3VhcmRSZXR1cm4iLCAiVG9vTWFueVJlcXVlc3RzIiwgIlVua25vd25FcnJvciIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJQaXBlbGluZUhhbmRsZXIiLCAibG9nZ2VyU2VydmljZSIsICJnb1Ryb3VnaEd1YXJkcyIsICJleGVjdXRpb25Db250ZXh0IiwgImd1YXJkcyIsICJjb250YWluZXIiLCAiZ3VhcmQiLCAiaW5zdGFuY2UiLCAiaXNGdW5jdGlvbiIsICJnZXQiLCAiaXNPYmplY3QiLCAiaXNOaWwiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkludmFsaWRHdWFyZERlZmluaXRpb24iLCAiY2FuQWN0aXZhdGUiLCAiY2FsbCIsICJHdWFyZEludmFsaWRSZXR1cm5FcnJvciIsICJHdWFyZENhbmNlbEVycm9yIiwgImdvVGhyb3VnaEludGVyY2VwdG9ycyIsICJpbnRlcmNlcHRvcnMiLCAiY2FsbEhhbmRsZXIiLCAiaW50ZXJjZXB0b3IiLCAiSW52YWxpZEludGVyY2VwdG9yRGVmaW5pdGlvbiIsICJpbnRlcmNlcHQiLCAiZ29Ucm91Z2hQaXBlcyIsICJ2YWx1ZSIsICJwaXBlcyIsICJhcmd1bWVudE1ldGFkYXRhIiwgInBpcGUiLCAiSW52YWxpZFBpcGVEZWZpbml0aW9uIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJ0cmFuc2Zvcm0iLCAiQ29udHJvbGxlckZsb3dIYW5kbGVyIiwgImFwcEVudiIsICJwaXBlbGluZUhhbmRsZXIiLCAiY3JlYXRlQXJncyIsICJjb250cm9sbGVyIiwgIm1ldGFkYXRhIiwgInBsYXllciIsICJhbGwiLCAicGFyYW1zIiwgIm1hcCIsICJwYXJhbSIsICJ0eXBlIiwgImRhdGEiLCAibWV0YXR5cGUiLCAicmVxdWVzdCIsICJib2R5IiwgIm93bmVyIiwgInVuZGVmaW5lZCIsICJBcnJheSIsICJpc0FycmF5IiwgImZhY3RvcnkiLCAiQXBwRW52aXJvbWVudCIsICJTZXJ2ZXIiLCAiQ29udHJvbGxlckV2ZW50SGFuZGxlciIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiZXZlbnRTZXJ2aWNlIiwgImNvbnRyb2xsZXJGbG93SGFuZGxlciIsICJjcmVhdGVNYW5nb1JlcXVlc3QiLCAiY3JlYXRlRXhlY3V0aW9uQ29udGV4dCIsICJyZWdpc3RlckV2ZW50IiwgIm1hcHBlZEVycm9yRmlsdGVycyIsICJldmVudCIsICJuYW1lIiwgImhhbmRsZUV2ZW50IiwgImFyZ3MiLCAicGFyc2VJbnRlcm5hbEFyZ3MiLCAid2ViVmlld0lkIiwgIkludmFsaWRFdmVudFR5cGUiLCAiRXhlY3V0aW9uQ29udGV4dFR5cGUiLCAiRXZlbnQiLCAiY2xhc3NSZWYiLCAicHJvdG90eXBlIiwgIm1ldGhvZCIsICJjb250cm9sbGVyTWV0aG9kIiwgImhhbmRsZSIsICJpc0FzeW5jRnVuY3Rpb24iLCAiYXBwbHkiLCAicmV0dXJuIiwgIl9fbmFtZSIsICJJbnZhbGlkUmV0dXJuSW5FdmVudCIsICJsZW5ndGgiLCAiZXJyb3JHcm91cCIsICJmaW5kIiwgImVycm9yVHlwZSIsICJJbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uIiwgImNhdGNoIiwgIkNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciIsICJyZWFkIiwgIm9wdGlvbnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ29udHJvbGxlciIsICJldmVudHMiLCAiZ2V0RXZlbnRzIiwgInJwY3MiLCAiZ2V0UlBDcyIsICJ0aW1lcnMiLCAiZ2V0VGltZXJzIiwgImdldFBpcGVsaW5lIiwgIkNvbnRyb2xsZXJFdmVudHMiLCAiZ2V0TWV0aG9kUGFyYW1zIiwgIkNvbnRyb2xsZXJSUENzIiwgInJwYyIsICJDb250cm9sbGVyUGFyYW1zIiwgInNvcnQiLCAiYSIsICJiIiwgImluZGV4IiwgImZvckVhY2giLCAiSW52YWxpZFBhcmFtZXRlckRlY29yYXRvclVzYWdlIiwgIlJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzIiwgIkNsaWVudCIsICJQbGF5ZXJEZWNvcmF0b3JOb3RBbGxvd2VkT25DbGllbnRFdmVudHMiLCAiUlBDTm90QWxsb3dlZEluQ2xpZW50IiwgIlJQQ05vdEFsbG93ZWRJblNlcnZlciIsICJFdmVudE5vdEFsbG93ZWRJbkNsaWVudCIsICJFdmVudE5vdEFsbG93ZWRJblNlcnZlciIsICJ0YXJnZXQiLCAiR3VhcmRzIiwgIkludGVyY2VwdG9ycyIsICJQaXBlcyIsICJlcnJvckZpbHRlcnMiLCAiRXJyb3JGaWx0ZXJzIiwgIlRpbWVycyIsICJDb250cm9sbGVyUlBDSGFuZGxlciIsICJycGNTZXJ2aWNlIiwgImNyZWF0ZU1hbmdvUmVzcG9uc2UiLCAicmVnaXN0ZXJSUEMiLCAiaGFuZGxlUlBDIiwgIkludmFsaWRSUENUeXBlIiwgInJlc3BvbnNlIiwgIiRvblNlbmQiLCAiJG9uRXJyb3IiLCAiUlBDIiwgInNlbmQiLCAicmVzdWx0IiwgImV2ZW50SGFuZGxlcnMiLCAicnBjSGFuZGxlcnMiLCAiaW5qZWN0YWJsZSIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJvcHRpb25hbCIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJvcHRpb25hbCIsICJDb250YWluZXIiLCAiTGF6eVNlcnZpY2VJZGVudGlmaWVyIiwgIm1pbml0eiIsICJ5IiwgIm0iLCAiZCIsICJoIiwgImkiLCAicyIsICJ0eiIsICJ0aHJvd09uSW52YWxpZCIsICJmcm9tVFoiLCAidHAiLCAiZnJvbVRaSVNPIiwgImxvY2FsVGltZVN0ciIsICJwYXJzZUlTT0xvY2FsIiwgImluRGF0ZSIsICJEYXRlIiwgIlVUQyIsICJvZmZzZXQiLCAiZ2V0VGltZXpvbmVPZmZzZXQiLCAiZGF0ZUd1ZXNzIiwgImdldFRpbWUiLCAiZGF0ZU9mZnNHdWVzcyIsICJkYXRlR3Vlc3MyIiwgImRhdGVPZmZzR3Vlc3MyIiwgIkVycm9yIiwgInRvVFoiLCAidHpTdHIiLCAibG9jYWxEYXRlU3RyaW5nIiwgInRvTG9jYWxlU3RyaW5nIiwgInRpbWVab25lIiwgInJlcGxhY2UiLCAidGQiLCAiZ2V0RnVsbFllYXIiLCAiZ2V0TW9udGgiLCAiZ2V0RGF0ZSIsICJnZXRIb3VycyIsICJnZXRNaW51dGVzIiwgImdldFNlY29uZHMiLCAiZGF0ZSIsICJ0aW1lWm9uZU5hbWUiLCAic3BsaXQiLCAic2xpY2UiLCAiZGF0ZVN0cmluZyIsICJwYXJzZSIsICJkdFN0ciIsICJwZCIsICJpc05hTiIsICJzdHJpbmdFbmQiLCAic3Vic3RyaW5nIiwgImluY2x1ZGVzIiwgImdldFVUQ0Z1bGxZZWFyIiwgImdldFVUQ01vbnRoIiwgImdldFVUQ0RhdGUiLCAiZ2V0VVRDSG91cnMiLCAiZ2V0VVRDTWludXRlcyIsICJnZXRVVENTZWNvbmRzIiwgIkNyb25PcHRpb25zIiwgIm9wdGlvbnMiLCAibmFtZSIsICJsZWdhY3lNb2RlIiwgInBhdXNlZCIsICJtYXhSdW5zIiwgIkluZmluaXR5IiwgImNhdGNoIiwgImludGVydmFsIiwgInBhcnNlSW50IiwgInV0Y09mZnNldCIsICJ1bnJlZiIsICJzdGFydEF0IiwgIkNyb25EYXRlIiwgInRpbWV6b25lIiwgInN0b3BBdCIsICJMQVNUX09DQ1VSUkVOQ0UiLCAiQU5ZX09DQ1VSUkVOQ0UiLCAiT0NDVVJSRU5DRV9CSVRNQVNLUyIsICJDcm9uUGF0dGVybiIsICJwYXR0ZXJuIiwgInNlY29uZCIsICJBcnJheSIsICJmaWxsIiwgIm1pbnV0ZSIsICJob3VyIiwgImRheSIsICJtb250aCIsICJkYXlPZldlZWsiLCAibGFzdERheU9mTW9udGgiLCAic3RhckRPTSIsICJzdGFyRE9XIiwgInByb3RvdHlwZSIsICJTdHJpbmciLCAiVHlwZUVycm9yIiwgImluZGV4T2YiLCAiaGFuZGxlTmlja25hbWVzIiwgInRyaW0iLCAicGFydHMiLCAibGVuZ3RoIiwgInVuc2hpZnQiLCAicmVwbGFjZUFscGhhTW9udGhzIiwgInJlcGxhY2VBbHBoYURheXMiLCAiaW5pdERhdGUiLCAiZ2V0RGF5IiwgInRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyIsICJwYXJ0VG9BcnJheSIsICJ0eXBlIiwgImNvbmYiLCAidmFsdWVJbmRleE9mZnNldCIsICJkZWZhdWx0VmFsdWUiLCAiYXJyIiwgImhhbmRsZVJhbmdlV2l0aFN0ZXBwaW5nIiwgImhhbmRsZVJhbmdlIiwgImhhbmRsZVN0ZXBwaW5nIiwgImhhbmRsZU51bWJlciIsICJyZVZhbGlkQ3JvbiIsICJ0ZXN0IiwgInJlc3VsdCIsICJleHRyYWN0TnRoIiwgInNldFBhcnQiLCAicGFydCIsICJpbmRleCIsICJ2YWx1ZSIsICJPYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAiY2FsbCIsICJSYW5nZUVycm9yIiwgInNldE50aFdlZWtkYXlPZk1vbnRoIiwgIm1hdGNoZXMiLCAibWF0Y2giLCAibG93ZXIiLCAidXBwZXIiLCAic3RlcHMiLCAicmVzdCIsICJudGgiLCAic3RhcnQiLCAiY2xlYW5QYXR0ZXJuIiwgInRvTG93ZXJDYXNlIiwgIm50aFdlZWtkYXkiLCAiRGF5c09mTW9udGgiLCAiUmVjdXJzaW9uU3RlcHMiLCAiZnJvbURhdGUiLCAiZnJvbVN0cmluZyIsICJmcm9tQ3JvbkRhdGUiLCAiaXNOdGhXZWVrZGF5T2ZNb250aCIsICJ5ZWFyIiwgIndlZWtkYXkiLCAiZ2V0VVRDRGF5IiwgImNvdW50IiwgImRheXNJbk1vbnRoIiwgIm1zIiwgImdldFVUQ01pbGxpc2Vjb25kcyIsICJhcHBseSIsICJnZXRNaWxsaXNlY29uZHMiLCAic3RyIiwgImZpbmROZXh0IiwgInRhcmdldCIsICJvcmlnaW5hbFRhcmdldCIsICJmRG9tV2Vla0RheSIsICJ1bmRlZmluZWQiLCAiZG93TWF0Y2giLCAicmVjdXJzZSIsICJkb2luZyIsICJyZXMiLCAicmVzZXRMZXZlbCIsICJpbmNyZW1lbnQiLCAiaGFzUHJldmlvdXNSdW4iLCAiaW50ZXJuYWwiLCAiaXNGdW5jdGlvbiIsICJ2IiwgInRvU3RyaW5nIiwgIkZ1bmN0aW9uIiwgInVucmVmVGltZXIiLCAidGltZXIiLCAiRGVubyIsICJtYXhEZWxheSIsICJzY2hlZHVsZWRKb2JzIiwgIkNyb24iLCAiZm5Pck9wdGlvbnMxIiwgImZuT3JPcHRpb25zMiIsICJmdW5jIiwgIl9zdGF0ZXMiLCAia2lsbCIsICJibG9ja2luZyIsICJwcmV2aW91c1J1biIsICJjdXJyZW50UnVuIiwgIm9uY2UiLCAiY3VycmVudFRpbWVvdXQiLCAiZXhpc3RpbmciLCAiZmluZCIsICJqIiwgInB1c2giLCAiZm4iLCAic2NoZWR1bGUiLCAibmV4dFJ1biIsICJwcmV2IiwgIm5leHQiLCAiX25leHQiLCAibmV4dFJ1bnMiLCAibiIsICJwcmV2aW91cyIsICJlbnVtZXJhdGlvbiIsICJnZXRQYXR0ZXJuIiwgImlzUnVubmluZyIsICJuZXh0UnVuVGltZSIsICJpc1NjaGVkdWxlZCIsICJub3RJc0tpbGxlZCIsICJpc1N0b3BwZWQiLCAiaXNCdXN5IiwgIm1zVG9OZXh0IiwgInN0b3AiLCAiY2xlYXJUaW1lb3V0IiwgImpvYkluZGV4IiwgInNwbGljZSIsICJwYXVzZSIsICJyZXN1bWUiLCAid2FpdE1zIiwgInNldFRpbWVvdXQiLCAiX2NoZWNrVHJpZ2dlciIsICJfdHJpZ2dlciIsICJpbml0aWF0aW9uRGF0ZSIsICJjb250ZXh0IiwgIl9lIiwgInRyaWdnZXIiLCAibm93IiwgInNob3VsZFJ1biIsICJpc0Jsb2NrZWQiLCAicHJvdGVjdCIsICJzdGFydEF0SW5GdXR1cmVXaXRoSW50ZXJ2YWwiLCAiX2NhbGN1bGF0ZVByZXZpb3VzUnVuIiwgInByZXZUaW1lUGx1c0ludGVydmFsIiwgIkNvbnRyb2xsZXIiLCAib3B0aW9ucyIsICJ0YXJnZXQiLCAiUmVmbGVjdCIsICJoYXNNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkR1cGxpY2F0ZURlY29yYXRvclVzYWdlIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMiLCAiZGVmaW5lTWV0YWRhdGEiLCAiaW5qZWN0YWJsZSIsICJHbG9iYWwiLCAiR2xvYmFsTW9kdWxlIiwgIkluamVjdCIsICJrZXkiLCAicHJvcGVydHlLZXkiLCAicGFyYW1JbmRleCIsICJpc05pbCIsICJ2YWxpZGF0ZUluamVjdGlvblRva2VuIiwgIkludmFsaWRJbmplY3Rpb25Ub2tlblNwZWNpZmllZCIsICJ0b2tlbiIsICJnZXRNZXRhZGF0YSIsICJJbmplY3Rpb25Ub2tlbk5vdEZvdW5kIiwgImluamVjdCIsICJJbmplY3RhYmxlIiwgInZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhIiwgIk1vZHVsZSIsICJ2YWxpZGF0ZU1vZHVsZU9wdGlvbnMiLCAiT3B0aW9uYWwiLCAib3B0aW9uYWwiLCAiU2V0TWV0YWRhdGEiLCAiZGVjb3JhdG9yRmFjdG9yeSIsICJfX25hbWUiLCAiX21ldGhvZCIsICJkZXNjcmlwdG9yIiwgIktFWSIsICJDYXRjaCIsICJleGNlcHRpb25zIiwgImR1cGxpY2F0ZXMiLCAiZmlsdGVyIiwgImV4Y2VwdGlvbiIsICJpbmRleCIsICJpbmRleE9mIiwgImxlbmd0aCIsICJFeGNlcHRpb25IYW5kbGluZ0NvbmZsaWN0IiwgIlVzZUZpbHRlcnMiLCAiZmlsdGVycyIsICJtZXRob2QiLCAidmFsaWRhdGVkRmlsdGVycyIsICJ2YWxpZGF0ZUVycm9yRmlsdGVyIiwgInB1c2giLCAiQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkIiwgIm1ldGhvZEZpbHRlcnMiLCAiRXJyb3JGaWx0ZXJzIiwgImZpbmQiLCAiaW5jbHVkZXMiLCAiRHVwbGljYXRlRXJyb3JGaWx0ZXJEZXRlY3RlZCIsICJjbGFzc0ZpbHRlcnMiLCAiQXBwUnVudGltZSIsICJldmVudEhhbmRsZXIiLCAicnBjSGFuZGxlciIsICJnbG9iYWxHdWFyZHMiLCAiZ2xvYmFsSW50ZXJjZXB0b3JzIiwgImdsb2JhbFBpcGVzIiwgImdsb2JhbEVycm9yRmlsdGVycyIsICJsb2dnZXJTZXJ2aWNlIiwgImVuYWJsZVNodXRkb3duSG9va3MiLCAiYm9vdCIsICJyZXNvbHZlZFRyZWUiLCAiYXN5bmNUcmF2ZXJzZSIsICJub2RlIiwgInN0YXJ0VGltZSIsICJEYXRlIiwgIm5vdyIsICJtb2R1bGUiLCAiaW5zdGFuY2UiLCAiY29udGFpbmVyIiwgImdldCIsICJtZXRhZGF0YSIsICJjbGFzc1JlZiIsICJjb250cm9sbGVycyIsICJmb3JFYWNoIiwgImNvbnRyb2xsZXIiLCAiaW50ZXJuYWxQcm92aWRlcnMiLCAiZXh0ZXJuYWxQcm92aWRlcnMiLCAibG9nIiwgIm5hbWUiLCAicnVuTGlmZWN5Y2xlTWV0aG9kIiwgInJ1bkxpZmVjeWNsZU1ldGhvZHMiLCAidHJhdmVyc2UiLCAidGltZSIsICJyZWdpc3RlclRpbWVycyIsICJyZWdpc3Rlckxpc3RlbmVycyIsICJzaHV0ZG93biIsICJ0aW1lclNlcnZpY2UiLCAib3duZXIiLCAiVElNRVJfU0VSVklDRSIsICJldmVyeXRpY2tzIiwgInRpbWVyIiwgImRlc3Ryb3kiLCAiaW50ZXJ2YWxzIiwgInRpbWVvdXRzIiwgImNyb25zIiwgImNyb24iLCAic3RvcCIsICJldmVudEhhbmRsZXJzIiwgImhhbmRsZXIiLCAicnBjSGFuZGxlcnMiLCAiZXZlbnRzIiwgImV2ZW50IiwgImd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAicGlwZXMiLCAibWFwcGVkRXJyb3JGaWx0ZXJzIiwgIm1hcEVycm9yRmlsdGVycyIsICJlcnJvckZpbHRlcnMiLCAicmVnaXN0ZXJFdmVudCIsICJycGNzIiwgInJwYyIsICJyZWdpc3RlclJQQyIsICJ0aW1lcnMiLCAidHlwZSIsICJjcmVhdGVDcm9uSm9iIiwgImJpbmQiLCAiY3JlYXRlRXZlcnlUaWNrIiwgImNyZWF0ZUludGVydmFsIiwgInRpbWVvdXQiLCAiY3JlYXRlVGltZW91dCIsICJmaWx0ZXJNYXAiLCAiZXJyb3JzIiwgImZpbHRlckVycm9yIiwgIkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlciIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAiaXNPYmplY3QiLCAicHJvdmlkZXJJbnN0YW5jZSIsICJNb2R1bGVEZXBlbmRlbmN5QmluZGVyIiwgImdsb2JhbEFwcENvbnRhaW5lciIsICJjb250YWluZXJPcHRpb25zIiwgIk1vZHVsZUNvbnRhaW5lciIsICJwYXJlbnQiLCAidG9TZWxmIiwgImluU2luZ2xldG9uU2NvcGUiLCAiZ2xvYmFsIiwgIl8iLCAicHJvdmlkZXIiLCAiYmluZFByb3ZpZGVyIiwgInRvRHluYW1pY1ZhbHVlIiwgImltcG9ydE1vZHVsZSIsICJyZXBldGl0aXZlSW1wb3J0cyIsICJNT0RVTEVfQ09OVEFJTkVSIiwgInRvQ29uc3RhbnRWYWx1ZSIsICJ0byIsICJUaW1lclNlcnZpY2UiLCAicHJvdmlkZSIsICJ1c2VWYWx1ZSIsICJiaW5kaW5nIiwgImN0eCIsICJkZXBzIiwgImRlcCIsICJlcnIiLCAidW5kZWZpbmVkIiwgInVzZUZhY3RvcnkiLCAic2NvcGUiLCAiaW5UcmFuc2llbnRTY29wZSIsICJpblJlcXVlc3RTY29wZSIsICJ1c2VDbGFzcyIsICJ0b1NlcnZpY2UiLCAidXNlRXhpc3RpbmciLCAiTW9kdWxlVHJlZVNjYW5uZXIiLCAibW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAiY29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgInNjYW4iLCAibW9kdWxlTWV0YWRhdGEiLCAicmVhZCIsICJzY2FuQ29udHJvbGxlcnMiLCAibW9kdWxlVHJlZSIsICJUcmVlIiwgInNjYW5uZWRNb2R1bGVzIiwgIk1hcCIsICJzZXQiLCAiaW1wb3J0ZWRNb2R1bGUiLCAiaW1wb3J0cyIsICJzY2FuTW9kdWxlcyIsICJyb290IiwgInBhcmVudE5vZGUiLCAic2Nhbm5lZE1vZHVsZSIsICJhZGQiLCAiY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kiLCAidHJlZU5vZGUiLCAiVHJlZU5vZGUiLCAiYWRkQ2hpbGQiLCAiY29udHJvbGxlck1ldGFkYXRhIiwgInBhcmVudE1ldGFkYXRhIiwgIkNpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkIiwgIlJhZ2VNUFNjcmlwdEV2ZW50IiwgImV2ZW50TmFtZSIsICJsaXN0ZW5lciIsICJtcCIsICJyZW1vdmUiLCAiUmFnZU1QRXZlbnRFbW1pdGVyIiwgImVtaXQiLCAiYXJncyIsICJjYWxsIiwgIm9uIiwgIm9uY2UiLCAib25jZVdyYXBwZXIiLCAib2ZmIiwgIlJhZ2VNUFRpbWVyIiwgImxhc3RUaWNrIiwgImlkIiwgImludGVydmFsIiwgImNhbGxiYWNrIiwgImNsZWFyVGltZXIiLCAiUmFnZU1QVGltZXJzIiwgInRpbWVySW5jcmVtZW50ZXIiLCAiZXZlcnlUaWNrSGFuZGxlcnMiLCAiaXNFdmVyeVRpY2tSdW5uaW5nIiwgImV2ZXJ5VGlja01haW5IYW5kbGVyIiwgInZhbHVlcyIsICJ3YXJuaW5nVGhyZXNob2xkIiwgIl92YWx1ZSIsICJzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50IiwgImdldEJ5SUQiLCAiY3JlYXRlVGltZXIiLCAiY2xlYXIiLCAiY2FsbGJhY2tCaW5kIiwgIkFycmF5IiwgImlzQXJyYXkiLCAidGltZXJJZCIsICJyYWdlTVBUaW1lciIsICJkZWxldGUiLCAic2V0SW50ZXJ2YWwiLCAiY2IiLCAiY2xlYXJJbnRlcnZhbCIsICJzZXRUaW1lb3V0IiwgImNsZWFyVGltZW91dCIsICJldmVyeVRpY2siLCAiYm91bmQiLCAiaXNDbGllbnRTaWRlIiwgImJyb3dzZXJzIiwgImUiLCAiY29uc29sZSIsICJsb2dFcnJvciIsICJpbnRlcnZhbEhhbmRsZXIiLCAiX2V2ZXJ5VGlja0ludGVydmFsIiwgInNpemUiLCAibmV4dFRpY2siLCAiX25hbWUiLCAidGltZUVuZCIsICJSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UiLCAiVGltZXJzIiwgIkV2ZW50cyIsICJwYXJzZUludGVybmFsQXJncyIsICJwbGF5ZXIiLCAiYm9keSIsICJhcmciLCAibWVzc2FnZSIsICJhIiwgIkpTT04iLCAic3RyaW5naWZ5IiwgIlN0cmluZyIsICJqb2luIiwgImxvZ0luZm8iLCAibG9nV2FybmluZyIsICJsb2dEZWJ1ZyIsICJBcHAiLCAibW9kdWxlVHJlZVNjYW5uZXIiLCAibW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJhcHBSdW50aW1lIiwgImludGVybmFsQXBwQ29udGFpbmVyIiwgInBsdWdpbnMiLCAibG9hZGVkIiwgInN0YXJ0IiwgInJvb3RNb2R1bGUiLCAiQXBwQWxyZWFkeUxvYWRlZCIsICJydW5QbHVnaW5NZXRob2RzIiwgIkFwcE5vdExvYWRlZCIsICJwIiwgInBsdWdpbiIsICJyZXNvbHZlIiwgIkFwcEJ1aWxkZXIiLCAiZW52aXJvbWVudCIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiZ2xvYmFsQ29udGFpbmVyT3B0aW9ucyIsICJ1c2VHbG9iYWxHdWFyZHMiLCAidmFsaWRhdGVkR3VhcmRzIiwgImd1YXJkIiwgInZhbGlkYXRlR3VhcmQiLCAiR0xPQkFMX0dVQVJEUyIsICJ1c2VHbG9iYWxJbnRlcmNlcHRvcnMiLCAidmFsaWRhdGVkSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9yIiwgInZhbGlkYXRlSW50ZXJjZXB0b3IiLCAiR0xPQkFMX0lOVEVSQ0VQVE9SUyIsICJ1c2VHbG9iYWxQaXBlcyIsICJ2YWxpZGF0ZWRQaXBlcyIsICJwaXBlIiwgInZhbGlkYXRlUGlwZSIsICJHTE9CQUxfUElQRVMiLCAidXNlR2xvYmFsRmlsdGVycyIsICJ2YWxpZGF0ZWRGSWx0ZXJzIiwgIkdMT0JBTF9FUlJPUl9GSUxURVJTIiwgInVzZVBsdWdpbnMiLCAiaW50ZXJuYWxQbHVnaW5zIiwgIlBMVUdJTlMiLCAicmViaW5kIiwgIkVOQUJMRV9TSFVURE9XTl9IT09LUyIsICJzZXRDb250YWluZXJPcHRpb25zIiwgIm9ubHlHbG9iYWwiLCAiQ09OVEFJTkVSX09QVElPTlMiLCAiYnVpbGQiLCAiQ29udGFpbmVyIiwgIlJFRkxFQ1RPUl9TRVJWSUNFIiwgIlJlZmxlY3RvclNlcnZpY2UiLCAiTVVMVElQTEFZRVJfU0VSVklDRSIsICJHTE9CQUxfQVBQX0NPTlRBSU5FUiIsICJQaXBlbGluZUhhbmRsZXIiLCAiTW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAiQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgIkNvbnRyb2xsZXJGbG93SGFuZGxlciIsICJDb250cm9sbGVyRXZlbnRIYW5kbGVyIiwgIkNvbnRyb2xsZXJSUENIYW5kbGVyIiwgIk1hbmdvUmVxdWVzdEJhc2UiLCAiTUFOR09fUkVRVUVTVF9GQUNUT1JZIiwgInRvRmFjdG9yeSIsICJjb250ZXh0IiwgInJlcXVlc3QiLCAiJGJvZHkiLCAiJHBsYXllciIsICJNYW5nb1Jlc3BvbnNlQmFzZSIsICJNQU5HT19SRVNQT05TRV9GQUNUT1JZIiwgIkV4ZWN1dGlvbkNvbnRleHRCYXNlIiwgIkVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkiLCAicmVzcG9uc2UiLCAiZXhlY3V0aW9uQ29udGV4dCIsICIkdHlwZSIsICIkcmVxdWVzdCIsICIkcmVzcG9uc2UiLCAiJGhhbmRsZXIiLCAiJGNsYXNzUmVmIiwgIiRuYW1lIiwgInBsdWdpbkluc3RhbmNlIiwgIm9uQnVpbGQiLCAiaXNCb3VuZCIsICJjcmVhdGVBcHBCdWlsZGVyIiwgImFwcEJ1aWxkZXJJbmhlcml0IiwgIklOVEVSTkFMX0FQUF9DT05UQUlORVIiLCAiQVBQX0VOVklST01FTlQiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAid2ViVmlld0lkIiwgImlzU3RyaW5nIiwgIkV2ZW50TmFtZU11c3RCZVN0cmluZyIsICJDb250cm9sbGVyRXZlbnRzIiwgInNvbWUiLCAiRXZlbnROYW1lTXVzdEJlVW5pcXVlIiwgIk9uSW50ZXJuYWwiLCAiT25XZWJWaWV3IiwgIk9uIiwgIk9uY2VJbnRlcm5hbCIsICJPbmNlIiwgIk9uY2VXZWJWaWV3IiwgIkJvZHkiLCAicGFyYW1zIiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAicGFyYW0iLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgImRhdGEiLCAiSW5kZXgiLCAiaXNOdW1iZXIiLCAiSW5kZXhLZXlNdXN0QmVOdW1iZXIiLCAiUmVxdWVzdCIsICJSZXEiLCAiUGFyYW0iLCAiUGFyYW1LZXlNdXN0QmVTdHJpbmciLCAiUmVzcG9uc2UiLCAiUmVzIiwgIlVzZUd1YXJkcyIsICJBdExlYXN0T25lR3VhcmRSZXF1aXJlZCIsICJtZXRob2RHdWFyZHMiLCAiR3VhcmRzIiwgImNsYXNzR3VhcmRzIiwgIlVzZUludGVyY2VwdG9ycyIsICJBdExlYXN0T25lSW50ZXJjZXB0b3JSZXF1aXJlZCIsICJtZXRob2RJbnRlcmNlcHRvcnMiLCAiSW50ZXJjZXB0b3JzIiwgImNsYXNzSW50ZXJjZXB0b3JzIiwgIlVzZVBpcGVzIiwgIkF0TGVhc3RPbmVQaXBlUmVxdWlyZWQiLCAibWV0aG9kUGlwZXMiLCAiUGlwZXMiLCAiY2xhc3NQaXBlcyIsICJjcmVhdGVSUENEZWNvcmF0b3IiLCAiV2ViVmlld0lkTXVzdEJlU3RyaW5nT3JOdW1iZXIiLCAiUlBDTmFtZU11c3RCZVN0cmluZyIsICJDb250cm9sbGVyUlBDcyIsICJSUENOYW1lTXVzdEJlVW5pcXVlIiwgIk9uUmVxdWVzdCIsICJycGNOYW1lIiwgIk9uV2ViVmlld1JlcXVlc3QiLCAiY3JlYXRlVGltZXJEZWNvcmF0b3IiLCAiVGltZXJOYW1lTXVzdEJlU3RyaW5nIiwgIkNyb24iLCAicGF0dGVybiIsICJFdmVyeVRpY2siLCAiSW50ZXJ2YWwiLCAibmFtZU9yVGltZW91dCIsICJpbnRlcnZhbFRpbWVvdXQiLCAiVGltZW91dCIsICJhcHBseURlY29yYXRvcnMiLCAiZGVjb3JhdG9ycyIsICJkZWNvcmF0b3IiLCAiRnVuY3Rpb24iLCAiY3JlYXRlUGFyYW1EZWNvcmF0b3IiLCAiZmFjdG9yeSIsICJDdXN0b20iLCAiZm9yd2FyZFJlZiIsICJmbiIsICJMYXp5U2VydmljZUlkZW50aWZpZXIiLCAibWV0YWRhdGFLZXkiLCAiZ2V0QWxsIiwgInRhcmdldHMiLCAiZ2V0QWxsQW5kTWVyZ2UiLCAibWV0YWRhdGFDb2xsZWN0aW9uIiwgIml0ZW0iLCAiaXNFbXB0eSIsICJyZWR1Y2UiLCAiYiIsICJjb25jYXQiLCAiZ2V0QWxsQW5kT3ZlcnJpZGUiLCAicmVzdWx0IiwgImNyZWF0ZURlY29yYXRvciIsICJnZW5lcmF0ZVJhbmRvbUlkIiwgImRlY29yYXRvckZuIiwgIm1ldGFkYXRhVmFsdWUiLCAidHJhbnNmb3JtIiwgIiRldmVyeXRpY2tzIiwgIiRpbnRlcnZhbHMiLCAiJHRpbWVvdXRzIiwgIiRjcm9ucyIsICJjcm9uT3B0aW9ucyIsICJjcm9uSm9iIiwgImV2ZXJ5dGljayIsICJnZXRCeU5hbWUiLCAiZ2V0QnlJZCIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJCYXNlRXZlbnRTZXJ2aWNlIiwgIiRsb2NhbEhhbmRsZXJzIiwgIlNldCIsICIkaW50ZXJuYWxIYW5kbGVycyIsICIkcmVtb3RlSGFuZGxlcnMiLCAiJGludGVybmFsRXZlbnROYW1lcyIsICIkZXZlbnRFbW1pdGVyIiwgIm9uIiwgImV2ZW50TmFtZSIsICJjYWxsYmFjayIsICJ3cmFwcGVyIiwgIl9fbmFtZSIsICJhcmdzIiwgImV2ZW50SGFuZGxlciIsICJhZGQiLCAib25jZSIsICJlbWl0IiwgImJvZHkiLCAiJG9uSW50ZXJuYWwiLCAiaGFuZGxlciIsICJoYXMiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSIsICIkb25jZUludGVybmFsIiwgIkJhc2VSUENTZXJ2aWNlIiwgIiRsb2dnZXJTZXJ2aWNlIiwgIiRUSU1FT1VUIiwgIk1hcCIsICJjYWxsIiwgInJwY05hbWUiLCAib3B0aW9ucyIsICJ0aW1lb3V0IiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJnZXQiLCAiUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCIsICJ0aW1lb3V0SWQiLCAic2V0VGltZW91dCIsICJSUENfUkVTVUxUX1RJTUVPVVQiLCAicmVzdWx0IiwgImNsZWFyVGltZW91dCIsICJzdWNjZXNzIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiU3VjY2VzcyIsICJlcnJvciIsICJNYW5nb0Vycm9yIiwgIm1lc3NhZ2UiLCAiZGV0YWlscyIsICJSUENfUkVTVUxUX1VOS05PV04iLCAib25SZXF1ZXN0IiwgIlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzIiwgInJwY0hhbmRsZXIiLCAiZGVzdHJveSIsICJ2YWxpZCIsICJkZWxldGUiLCAic2V0IiwgIkNvbnRhaW5lciIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJEZWZhdWx0VmFsdWVQaXBlIiwgImRlZmF1bHRWYWx1ZSIsICJ0cmFuc2Zvcm0iLCAidmFsdWUiLCAiaXNOaWwiLCAiaXNOdW1iZXIiLCAiaXNOYU4iLCAiUGxheWVyUHJvdG90eXBlUGx1Z2luIiwgImdsb2JhbEFwcENvbnRhaW5lciIsICJsb2dnZXJTZXJ2aWNlIiwgIm11bHRpcGxheWVyU2VydmljZSIsICJiZWZvcmVMb2FkIiwgInRpbWUiLCAiRGF0ZSIsICJub3ciLCAiUGxheWVyIiwgImdldFBsYXllciIsICJwcm90b3R5cGUiLCAiZW1pdFdlYlZpZXciLCAiaWQiLCAiZXZlbnROYW1lIiwgImJvZHkiLCAiZW1pdFJhdyIsICJwYXlsb2FkIiwgInJwY1NlcnZpY2UiLCAiZ2V0IiwgIlJQQ19TRVJWSUNFIiwgImNhbGwiLCAicnBjTmFtZSIsICJvcHRpb25zIiwgImNhbGxQbGF5ZXIiLCAiY2FsbFdlYlZpZXciLCAibG9nIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlJQQ1BsdWdpbiIsICJldmVudFNlcnZpY2UiLCAicnBjU2VydmljZSIsICJsb2dnZXJTZXJ2aWNlIiwgImJlZm9yZUxvYWQiLCAidGltZSIsICJEYXRlIiwgIm5vdyIsICJvblBsYXllciIsICJwbGF5ZXIiLCAiYm9keSIsICJ2YWxpZCIsICJycGNIYW5kbGVyIiwgInNvdXJjZSIsICJFdmVudERlc3RpbmF0aW9uIiwgIkNsaWVudCIsICIkY2xpZW50SGFuZGxlcnMiLCAiZ2V0IiwgInJwY05hbWUiLCAiV2ViVmlldyIsICIkd2ViVmlld0hhbmRsZXJzIiwgIndlYlZpZXdJZCIsICJ1bmRlZmluZWQiLCAiZW1pdFdlYlZpZXciLCAiaWQiLCAiUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCIsICJlbWl0UmF3IiwgImhhbmRsZXJSZXN1bHQiLCAiaGFuZGxlciIsICJycGNSZXN1bHQiLCAic3VjY2VzcyIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlN1Y2Nlc3MiLCAiZXJyb3IiLCAiTWFuZ29FcnJvciIsICJtZXNzYWdlIiwgImRldGFpbHMiLCAiUlBDX1JFU1VMVF9VTktOT1dOIiwgImxvZyIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiSU5URVJOQUxfRVZFTlRTIiwgIlNDUklQVF9SUEMiLCAiU0NSSVBUX1JQQ19BTlNXRVIiLCAiU0VSVkVSX1NUQVJURUQiLCAiQ09OTkVDVElPTl9RVUVVRV9BREQiLCAiQ09OTkVDVElPTl9RVUVVRV9SRU1PVkUiLCAiUExBWUVSX0NPTk5FQ1QiLCAiUExBWUVSX0NPTk5FQ1RfREVOSUVEIiwgIlBMQVlFUl9ESVNDT05ORUNUIiwgIlBMQVlFUl9EQU1BR0UiLCAiUExBWUVSX0RFQVRIIiwgIlBMQVlFUl9IRUFMIiwgIlBMQVlFUl9DT05UUk9MX1JFUVVFU1QiLCAiUExBWUVSX0lOVEVSSU9SX0NIQU5HRSIsICJQTEFZRVJfRElNRU5TSU9OX0NIQU5HRSIsICJQTEFZRVJfV0VBUE9OX0NIQU5HRSIsICJQTEFZRVJfU1lOQ0VEX1NDRU5FX1JFUVVFU1QiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9TVEFSVCIsICJQTEFZRVJfU1lOQ0VEX1NDRU5FX1NUT1AiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9VUERBVEUiLCAiUExBWUVSX1NQQVdOIiwgIlBMQVlFUl9BTklNQVRJT05fQ0hBTkdFIiwgIlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQiLCAiUExBWUVSX1NUQVJUX1ZFSElDTEVfRU5URVIiLCAiUExBWUVSX1ZFSElDTEVfTEVGVCIsICJQTEFZRVJfVkVISUNMRV9TRUFUX0NIQU5HRSIsICJQRURfSEVBTCIsICJQRURfREVBVEgiLCAiUEVEX0RBTUFHRSIsICJWRUhJQ0xFX0RFU1RST1kiLCAiVkVISUNMRV9BVFRBQ0giLCAiVkVISUNMRV9ERVRBQ0giLCAiVkVISUNMRV9EQU1BR0UiLCAiVkVISUNMRV9TSVJFTl9TVEFURV9DSEFOR0UiLCAiVkVISUNMRV9IT1JOX1NUQVRFX0NIQU5HRSIsICJWT0lDRV9DT05ORUNUSU9OIiwgIkNMSUVOVF9PQkpFQ1RfREVMRVRFIiwgIkNMSUVOVF9PQkpFQ1RfUkVRVUVTVCIsICJCQVNFX09CSkVDVF9DUkVBVEUiLCAiQkFTRV9PQkpFQ1RfUkVNT1ZFIiwgIk5FVF9PV05FUl9DSEFOR0UiLCAiV0VBUE9OX0RBTUFHRSIsICJNRVRBX0NIQU5HRSIsICJMT0NBTF9NRVRBX0NIQU5HRSIsICJTVFJFQU1fU1lOQ0VEX01FVEFfQ0hBTkdFIiwgIkdMT0JBTF9NRVRBX0NIQU5HRSIsICJHTE9CQUxfU1lOQ0VEX01FVEFfQ0hBTkdFIiwgIkNPTlNPTEVfQ09NTUFORCIsICJFUlJPUiIsICJDT0xfU0hBUEVfRVZFTlQiLCAiRVhQTE9TSU9OIiwgIkZJUkVfU1RBUlQiLCAiUFJPSkVDVElMRV9TVEFSVCIsICJFTlRJVFlfQ09MX1NIQVBFX0VOVEVSIiwgIkVOVElUWV9DT0xfU0hBUEVfTEVBVkUiLCAiRU5USVRZX0NIRUNLUE9JTlRfRU5URVIiLCAiRU5USVRZX0NIRUNLUE9JTlRfTEVBVkUiLCAiR0lWRV9QRURfU0NSSVBURURfVEFTSyIsICJMT0NBTF9TQ1JJUFRfRVZFTlQiLCAiUkVNT1RFX1NDUklQVF9FVkVOVCIsICJBTllfUkVTT1VSQ0VfU1RBUlQiLCAiQU5ZX1JFU09VUkNFX1NUT1AiLCAiUkVTT1VSQ0VfU1RBUlQiLCAiUkVTT1VSQ0VfU1RPUCIsICJSRVNPVVJDRV9FUlJPUiIsICJFVkVOVCIsICJTZXJ2ZXJFdmVudFNlcnZpY2UiLCAiQmFzZUV2ZW50U2VydmljZSIsICIkcmFnZUV2ZW50cyIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiRXZlbnRzIiwgIiRpbnRlcm5hbEV2ZW50TmFtZXMiLCAiU2V0IiwgIk9iamVjdCIsICJ2YWx1ZXMiLCAiSU5URVJOQUxfRVZFTlRTIiwgIm9uUGxheWVyIiwgImV2ZW50TmFtZSIsICJjYWxsYmFjayIsICJ3cmFwcGVyIiwgInBsYXllciIsICJhcmdzIiwgImV2ZW50SGFuZGxlciIsICIkcmVtb3RlSGFuZGxlcnMiLCAiYWRkIiwgIm9uY2VQbGF5ZXIiLCAib25SZW1vdGUiLCAib25jZVJlbW90ZSIsICJlbWl0UGxheWVycyIsICJwbGF5ZXJzIiwgImJvZHkiLCAiY2FsbCIsICJlbWl0UGxheWVyc1VucmVsaWFibGUiLCAiY2FsbFVucmVsaWFibGUiLCAiZW1pdEFsbFBsYXllcnMiLCAibXAiLCAiZW1pdEFsbFBsYXllcnNVbnJlbGlhYmxlIiwgIm9uV2ViVmlldyIsICJpZCIsICJvbmNlV2ViVmlldyIsICJlbWl0V2ViVmlld3MiLCAicGF5bG9hZCIsICJlbWl0QWxsV2ViVmlld3MiLCAiZW1pdEFsbFdlYlZpZXdzVW5yZWxpYWJsZSIsICJvblBsYXllckpvaW4iLCAib24iLCAib25QbGF5ZXJRdWl0IiwgIm9uUGxheWVyUmVhZHkiLCAib25QbGF5ZXJEZWF0aCIsICJvblBsYXllclNwYXduIiwgIm9uUGxheWVyQ2hhdCIsICJvblBsYXllckNvbW1hbmQiLCAib25QbGF5ZXJFbnRlclZlaGljbGUiLCAib25QbGF5ZXJFeGl0VmVoaWNsZSIsICJvblBsYXllclN0YXJ0RW50ZXJWZWhpY2xlIiwgIm9uUGxheWVyU3RhcnRFeGl0VmVoaWNsZSIsICJvblBsYXllcldlYXBvbkNoYW5nZSIsICJvblBsYXllckRhbWFnZSIsICJvblZlaGljbGVEZWF0aCIsICJvblZlaGljbGVEYW1hZ2UiLCAib25QbGF5ZXJFbnRlckNvbHNoYXBlIiwgIm9uUGxheWVyRXhpdENvbHNoYXBlIiwgIm9uUGxheWVyRW50ZXJDaGVja3BvaW50IiwgIm9uUGxheWVyRXhpdENoZWNrcG9pbnQiLCAib25QbGF5ZXJDb25uZWN0IiwgIm9uUGxheWVyRGlzY29ubmVjdCIsICJleGl0VHlwZSIsICJyZWFzb24iLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiU2VydmVyTG9nZ2VyU2VydmljZSIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAibG9nIiwgImFyZ3MiLCAiTUFOR09fTE9HX1BSRUZJWCIsICJ3YXJuIiwgImxvZ1dhcm5pbmciLCAiZXJyb3IiLCAibG9nRXJyb3IiLCAiZGVidWciLCAibG9nRGVidWciLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiU2VydmVyUlBDU2VydmljZSIsICJCYXNlUlBDU2VydmljZSIsICIkZXZlbnRTZXJ2aWNlIiwgIiRjbGllbnRIYW5kbGVycyIsICJNYXAiLCAiJHdlYlZpZXdIYW5kbGVycyIsICJjYWxsUGxheWVyIiwgInBsYXllciIsICJycGNOYW1lIiwgImJvZHkiLCAib3B0aW9ucyIsICJ0aW1lb3V0IiwgIiRUSU1FT1VUIiwgIiRoYW5kbGVDYWxsIiwgIkV2ZW50RGVzdGluYXRpb24iLCAiQ2xpZW50IiwgIm9uUGxheWVyUmVxdWVzdCIsICJoYW5kbGVyIiwgImhhcyIsICIkbG9nZ2VyU2VydmljZSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiUlBDSGFuZGxlckFscmVhZHlFeGlzdHMiLCAicnBjSGFuZGxlciIsICJkZXN0cm95IiwgInZhbGlkIiwgImRlbGV0ZSIsICJzZXQiLCAiY2FsbFdlYlZpZXciLCAiaWQiLCAiV2ViVmlldyIsICJvbldlYlZpZXdSZXF1ZXN0IiwgImtleSIsICJkZXN0aW5hdGlvbiIsICJ3ZWJWaWV3SWQiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgIlJQQ19SRVNVTFRfUExBWUVSX05PVF9GT1VORCIsICJjYWxsSWQiLCAiZ2VuZXJhdGVSYW5kb21JZCIsICJ0aW1lb3V0SWQiLCAiZGlzY29ubmVjdEhhbmRsZXIiLCAib25QbGF5ZXJEaXNjb25uZWN0IiwgImNvbnRleHQiLCAiY2xlYXJUaW1lb3V0IiwgIlJQQ19SRVNVTFRfUExBWUVSX0RJU0NPTk5FQ1RFRCIsICJvbmNlSGFuZGxlIiwgIl9wbGF5ZXIiLCAiZXZlbnRIYW5kbGVyIiwgIm9uY2VXZWJWaWV3IiwgIm9uY2VQbGF5ZXIiLCAicGF5bG9hZCIsICJzb3VyY2UiLCAiU2VydmVyIiwgImVtaXRXZWJWaWV3IiwgImVtaXQiLCAic2V0VGltZW91dCIsICJSUENfUkVTVUxUX1RJTUVPVVQiLCAiU2VydmljZUJpbmRlclBsdWdpbiIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJnbG9iYWxBcHBDb250YWluZXIiLCAib25CdWlsZCIsICJ0aW1lIiwgIkRhdGUiLCAibm93IiwgImJpbmQiLCAiTE9HR0VSX1NFUlZJQ0UiLCAidG8iLCAiU2VydmVyTG9nZ2VyU2VydmljZSIsICJpblNpbmdsZXRvblNjb3BlIiwgIkVWRU5UX1NFUlZJQ0UiLCAiU2VydmVyRXZlbnRTZXJ2aWNlIiwgIlJQQ19TRVJWSUNFIiwgIlNlcnZlclJQQ1NlcnZpY2UiLCAidG9Db25zdGFudFZhbHVlIiwgImdldCIsICJsb2dnZXJTZXJ2aWNlIiwgImxvZyIsICJSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudCIsICJldmVudE5hbWUiLCAibGlzdGVuZXIiLCAiZGVzdHJveSIsICJtcCIsICJldmVudHMiLCAicmVtb3ZlIiwgIk5BVElWRV9TRVJWRVJfRVZFTlRTIiwgIlNldCIsICJTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIiLCAiZW1pdCIsICJldmVudE5hbWUiLCAiYXJncyIsICJtcCIsICJldmVudHMiLCAiY2FsbCIsICJvbiIsICJsaXN0ZW5lciIsICJhZGQiLCAiUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQiLCAib25jZSIsICJvbmNlV3JhcHBlciIsICJyZW1vdmUiLCAib2ZmIiwgImVtaXRQbGF5ZXIiLCAicGxheWVyIiwgImVtaXRBbGxQbGF5ZXJzUmF3IiwgInBsYXllcnMiLCAiZW1pdEFsbFBsYXllcnNVbnJlbGlhYmxlUmF3IiwgImNhbGxVbnJlbGlhYmxlIiwgImVtaXRVbnJlbGlhYmxlUmF3IiwgIm9uUGxheWVyIiwgImhhcyIsICJ3cmFwcGVyIiwgInBhcnNlZEFyZ3MiLCAibWFwIiwgImFyZyIsICJKU09OIiwgInBhcnNlIiwgIm9uY2VQbGF5ZXIiLCAib2ZmUGxheWVyIiwgIlNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UiLCAiRXZlbnRzIiwgIlNlcnZlclJhZ2VNUEV2ZW50RW1taXRlciIsICJnZXRQbGF5ZXIiLCAibXAiLCAiUGxheWVyIiwgInNldEJsaXBGYWN0b3J5IiwgImZhY3RvcnkiLCAiQmxpcCIsICJPYmplY3QiLCAiYXNzaWduIiwgInByb3RvdHlwZSIsICJzZXRNYXJrZXJGYWN0b3J5IiwgIk1hcmtlciIsICJzZXRDb2xTaGFwZUZhY3RvcnkiLCAiQ29sc2hhcGUiLCAic2V0Q2hlY2twb2ludEZhY3RvcnkiLCAiQ2hlY2twb2ludCIsICJzZXRPYmplY3RGYWN0b3J5IiwgInNldFBlZEZhY3RvcnkiLCAiUGVkIiwgInNldFBsYXllckZhY3RvcnkiLCAic2V0VmVoaWNsZUZhY3RvcnkiLCAiVmVoaWNsZSIsICJzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5IiwgIl9mYWN0b3J5IiwgInNldFZpcnR1YWxFbnRpdHlGYWN0b3J5IiwgInNldFZvaWNlQ2hhbm5lbEZhY3RvcnkiLCAibG9nIiwgImFyZyIsICJhcmdzIiwgIm1lc3NhZ2UiLCAibWFwIiwgImEiLCAiSlNPTiIsICJzdHJpbmdpZnkiLCAiU3RyaW5nIiwgImpvaW4iLCAiY29uc29sZSIsICJsb2dFcnJvciIsICJlcnJvciIsICJsb2dXYXJuaW5nIiwgIndhcm4iLCAibG9nRGVidWciLCAiVXNlRmlsdGVycyIsICJmaWx0ZXJzIiwgIiRVc2VGaWx0ZXJzIiwgIk9uU2NyaXB0UlBDIiwgIk9uSW50ZXJuYWwiLCAiSU5URVJOQUxfRVZFTlRTIiwgIlNDUklQVF9SUEMiLCAiT25jZVNjcmlwdFJQQyIsICJPbmNlSW50ZXJuYWwiLCAiT25TY3JpcHRSUENBbnN3ZXIiLCAiU0NSSVBUX1JQQ19BTlNXRVIiLCAiT25jZVNjcmlwdFJQQ0Fuc3dlciIsICJPblNlcnZlclN0YXJ0ZWQiLCAiU0VSVkVSX1NUQVJURUQiLCAiT25jZVNlcnZlclN0YXJ0ZWQiLCAiT25Db25uZWN0aW9uUXVldWVBZGQiLCAiQ09OTkVDVElPTl9RVUVVRV9BREQiLCAiT25jZUNvbm5lY3Rpb25RdWV1ZUFkZCIsICJPbkNvbm5lY3Rpb25RdWV1ZVJlbW92ZSIsICJDT05ORUNUSU9OX1FVRVVFX1JFTU9WRSIsICJPbmNlQ29ubmVjdGlvblF1ZXVlUmVtb3ZlIiwgIk9uUGxheWVyQ29ubmVjdCIsICJQTEFZRVJfQ09OTkVDVCIsICJPbmNlUGxheWVyQ29ubmVjdCIsICJPblBsYXllckNvbm5lY3REZW5pZWQiLCAiUExBWUVSX0NPTk5FQ1RfREVOSUVEIiwgIk9uY2VQbGF5ZXJDb25uZWN0RGVuaWVkIiwgIk9uUGxheWVyRGlzY29ubmVjdCIsICJQTEFZRVJfRElTQ09OTkVDVCIsICJPbmNlUGxheWVyRGlzY29ubmVjdCIsICJPblBsYXllckRhbWFnZSIsICJQTEFZRVJfREFNQUdFIiwgIk9uY2VQbGF5ZXJEYW1hZ2UiLCAiT25QbGF5ZXJEZWF0aCIsICJQTEFZRVJfREVBVEgiLCAiT25jZVBsYXllckRlYXRoIiwgIk9uUGxheWVySGVhbCIsICJQTEFZRVJfSEVBTCIsICJPbmNlUGxheWVySGVhbCIsICJPblBsYXllckNvbnRyb2xSZXF1ZXN0IiwgIlBMQVlFUl9DT05UUk9MX1JFUVVFU1QiLCAiT25jZVBsYXllckNvbnRyb2xSZXF1ZXN0IiwgIk9uUGxheWVySW50ZXJpb3JDaGFuZ2UiLCAiUExBWUVSX0lOVEVSSU9SX0NIQU5HRSIsICJPbmNlUGxheWVySW50ZXJpb3JDaGFuZ2UiLCAiT25QbGF5ZXJEaW1lbnNpb25DaGFuZ2UiLCAiUExBWUVSX0RJTUVOU0lPTl9DSEFOR0UiLCAiT25jZVBsYXllckRpbWVuc2lvbkNoYW5nZSIsICJPblBsYXllcldlYXBvbkNoYW5nZSIsICJQTEFZRVJfV0VBUE9OX0NIQU5HRSIsICJPbmNlUGxheWVyV2VhcG9uQ2hhbmdlIiwgIk9uUGxheWVyU3luY2VkU2NlbmVSZXF1ZXN0IiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfUkVRVUVTVCIsICJPbmNlUGxheWVyU3luY2VkU2NlbmVSZXF1ZXN0IiwgIk9uUGxheWVyU3luY2VkU2NlbmVTdGFydCIsICJQTEFZRVJfU1lOQ0VEX1NDRU5FX1NUQVJUIiwgIk9uY2VQbGF5ZXJTeW5jZWRTY2VuZVN0YXJ0IiwgIk9uUGxheWVyU3luY2VkU2NlbmVTdG9wIiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfU1RPUCIsICJPbmNlUGxheWVyU3luY2VkU2NlbmVTdG9wIiwgIk9uUGxheWVyU3luY2VkU2NlbmVVcGRhdGUiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9VUERBVEUiLCAiT25jZVBsYXllclN5bmNlZFNjZW5lVXBkYXRlIiwgIk9uUGxheWVyU3Bhd24iLCAiUExBWUVSX1NQQVdOIiwgIk9uY2VQbGF5ZXJTcGF3biIsICJPblBsYXllckFuaW1hdGlvbkNoYW5nZSIsICJQTEFZRVJfQU5JTUFUSU9OX0NIQU5HRSIsICJPbmNlUGxheWVyQW5pbWF0aW9uQ2hhbmdlIiwgIk9uUGxheWVyVmVoaWNsZUVudGVyZWQiLCAiUExBWUVSX1ZFSElDTEVfRU5URVJFRCIsICJPbmNlUGxheWVyVmVoaWNsZUVudGVyZWQiLCAiT25QbGF5ZXJTdGFydFZlaGljbGVFbnRlciIsICJQTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUiIsICJPbmNlUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIiLCAiT25QbGF5ZXJWZWhpY2xlTGVmdCIsICJQTEFZRVJfVkVISUNMRV9MRUZUIiwgIk9uY2VQbGF5ZXJWZWhpY2xlTGVmdCIsICJPblBsYXllclZlaGljbGVTZWF0Q2hhbmdlIiwgIlBMQVlFUl9WRUhJQ0xFX1NFQVRfQ0hBTkdFIiwgIk9uY2VQbGF5ZXJWZWhpY2xlU2VhdENoYW5nZSIsICJPblBlZEhlYWwiLCAiUEVEX0hFQUwiLCAiT25jZVBlZEhlYWwiLCAiT25QZWREZWF0aCIsICJQRURfREVBVEgiLCAiT25jZVBlZERlYXRoIiwgIk9uUGVkRGFtYWdlIiwgIlBFRF9EQU1BR0UiLCAiT25jZVBlZERhbWFnZSIsICJPblZlaGljbGVEZXN0cm95IiwgIlZFSElDTEVfREVTVFJPWSIsICJPbmNlVmVoaWNsZURlc3Ryb3kiLCAiT25WZWhpY2xlQXR0YWNoIiwgIlZFSElDTEVfQVRUQUNIIiwgIk9uY2VWZWhpY2xlQXR0YWNoIiwgIk9uVmVoaWNsZURldGFjaCIsICJWRUhJQ0xFX0RFVEFDSCIsICJPbmNlVmVoaWNsZURldGFjaCIsICJPblZlaGljbGVEYW1hZ2UiLCAiVkVISUNMRV9EQU1BR0UiLCAiT25jZVZlaGljbGVEYW1hZ2UiLCAiT25WZWhpY2xlU2lyZW5TdGF0ZUNoYW5nZSIsICJWRUhJQ0xFX1NJUkVOX1NUQVRFX0NIQU5HRSIsICJPbmNlVmVoaWNsZVNpcmVuU3RhdGVDaGFuZ2UiLCAiT25WZWhpY2xlSG9yblN0YXRlQ2hhbmdlIiwgIlZFSElDTEVfSE9STl9TVEFURV9DSEFOR0UiLCAiT25jZVZlaGljbGVIb3JuU3RhdGVDaGFuZ2UiLCAiT25Wb2ljZUNvbm5lY3Rpb24iLCAiVk9JQ0VfQ09OTkVDVElPTiIsICJPbmNlVm9pY2VDb25uZWN0aW9uIiwgIk9uQ2xpZW50T2JqZWN0RGVsZXRlIiwgIkNMSUVOVF9PQkpFQ1RfREVMRVRFIiwgIk9uY2VDbGllbnRPYmplY3REZWxldGUiLCAiT25DbGllbnRPYmplY3RSZXF1ZXN0IiwgIkNMSUVOVF9PQkpFQ1RfUkVRVUVTVCIsICJPbmNlQ2xpZW50T2JqZWN0UmVxdWVzdCIsICJPbkJhc2VPYmplY3RDcmVhdGUiLCAiQkFTRV9PQkpFQ1RfQ1JFQVRFIiwgIk9uY2VCYXNlT2JqZWN0Q3JlYXRlIiwgIk9uQmFzZU9iamVjdFJlbW92ZSIsICJCQVNFX09CSkVDVF9SRU1PVkUiLCAiT25jZUJhc2VPYmplY3RSZW1vdmUiLCAiT25OZXRPd25lckNoYW5nZSIsICJORVRfT1dORVJfQ0hBTkdFIiwgIk9uY2VOZXRPd25lckNoYW5nZSIsICJPbldlYXBvbkRhbWFnZSIsICJXRUFQT05fREFNQUdFIiwgIk9uY2VXZWFwb25EYW1hZ2UiLCAiT25NZXRhQ2hhbmdlIiwgIk1FVEFfQ0hBTkdFIiwgIk9uY2VNZXRhQ2hhbmdlIiwgIk9uTG9jYWxNZXRhQ2hhbmdlIiwgIkxPQ0FMX01FVEFfQ0hBTkdFIiwgIk9uY2VMb2NhbE1ldGFDaGFuZ2UiLCAiT25TdHJlYW1TeW5jZWRNZXRhQ2hhbmdlIiwgIlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UiLCAiT25jZVN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UiLCAiT25HbG9iYWxNZXRhQ2hhbmdlIiwgIkdMT0JBTF9NRVRBX0NIQU5HRSIsICJPbmNlR2xvYmFsTWV0YUNoYW5nZSIsICJPbkdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UiLCAiR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJPbmNlR2xvYmFsU3luY2VkTWV0YUNoYW5nZSIsICJPbkNvbnNvbGVDb21tYW5kIiwgIkNPTlNPTEVfQ09NTUFORCIsICJPbmNlQ29uc29sZUNvbW1hbmQiLCAiT25FcnJvciIsICJFUlJPUiIsICJPbmNlRXJyb3IiLCAiT25Db2xTaGFwZUV2ZW50IiwgIkNPTF9TSEFQRV9FVkVOVCIsICJPbmNlQ29sU2hhcGVFdmVudCIsICJPbkV4cGxvc2lvbiIsICJFWFBMT1NJT04iLCAiT25jZUV4cGxvc2lvbiIsICJPbkZpcmVTdGFydCIsICJGSVJFX1NUQVJUIiwgIk9uY2VGaXJlU3RhcnQiLCAiT25Qcm9qZWN0aWxlU3RhcnQiLCAiUFJPSkVDVElMRV9TVEFSVCIsICJPbmNlUHJvamVjdGlsZVN0YXJ0IiwgIk9uRW50aXR5Q29sU2hhcGVFbnRlciIsICJFTlRJVFlfQ09MX1NIQVBFX0VOVEVSIiwgIk9uY2VFbnRpdHlDb2xTaGFwZUVudGVyIiwgIk9uRW50aXR5Q29sU2hhcGVMZWF2ZSIsICJFTlRJVFlfQ09MX1NIQVBFX0xFQVZFIiwgIk9uY2VFbnRpdHlDb2xTaGFwZUxlYXZlIiwgIk9uRW50aXR5Q2hlY2twb2ludEVudGVyIiwgIkVOVElUWV9DSEVDS1BPSU5UX0VOVEVSIiwgIk9uY2VFbnRpdHlDaGVja3BvaW50RW50ZXIiLCAiT25FbnRpdHlDaGVja3BvaW50TGVhdmUiLCAiRU5USVRZX0NIRUNLUE9JTlRfTEVBVkUiLCAiT25jZUVudGl0eUNoZWNrcG9pbnRMZWF2ZSIsICJPbkdpdmVQZWRTY3JpcHRlZFRhc2siLCAiR0lWRV9QRURfU0NSSVBURURfVEFTSyIsICJPbmNlR2l2ZVBlZFNjcmlwdGVkVGFzayIsICJPbkxvY2FsU2NyaXB0RXZlbnQiLCAiTE9DQUxfU0NSSVBUX0VWRU5UIiwgIk9uY2VMb2NhbFNjcmlwdEV2ZW50IiwgIk9uUmVtb3RlU2NyaXB0RXZlbnQiLCAiUkVNT1RFX1NDUklQVF9FVkVOVCIsICJPbmNlUmVtb3RlU2NyaXB0RXZlbnQiLCAiT25BbnlSZXNvdXJjZVN0YXJ0IiwgIkFOWV9SRVNPVVJDRV9TVEFSVCIsICJPbmNlQW55UmVzb3VyY2VTdGFydCIsICJPbkFueVJlc291cmNlU3RvcCIsICJBTllfUkVTT1VSQ0VfU1RPUCIsICJPbmNlQW55UmVzb3VyY2VTdG9wIiwgIk9uUmVzb3VyY2VTdGFydCIsICJSRVNPVVJDRV9TVEFSVCIsICJPbmNlUmVzb3VyY2VTdGFydCIsICJPblJlc291cmNlU3RvcCIsICJSRVNPVVJDRV9TVE9QIiwgIk9uY2VSZXNvdXJjZVN0b3AiLCAiT25SZXNvdXJjZUVycm9yIiwgIlJFU09VUkNFX0VSUk9SIiwgIk9uY2VSZXNvdXJjZUVycm9yIiwgIk9uRXZlbnQiLCAiRVZFTlQiLCAiT25jZUV2ZW50IiwgIk9uUGxheWVyIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbldlYlZpZXciLCAiaWQiLCAiZXZlbnROYW1lIiwgIiRPbldlYlZpZXciLCAiT24iLCAiZXZlbnROYW1lIiwgIiRPbiIsICJPbmNlUGxheWVyIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbmNlV2ViVmlldyIsICJpZCIsICJldmVudE5hbWUiLCAiJE9uY2VXZWJWaWV3IiwgIk9uY2UiLCAiZXZlbnROYW1lIiwgIiRPbmNlIiwgIlBsYXllciIsICJrZXkiLCAicGlwZXMiLCAidGFyZ2V0IiwgIm1ldGhvZCIsICJpbmRleCIsICJwYXJhbXMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ29udHJvbGxlclBhcmFtcyIsICJzb21lIiwgInBhcmFtIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQiLCAicGFyYW1UeXBlcyIsICJtZXRhdHlwZSIsICJBcnJheSIsICJpc0FycmF5IiwgInVuZGVmaW5lZCIsICJkZWZpbmVNZXRhZGF0YSIsICJ0eXBlIiwgIk1ldGhvZFBhcmFtVHlwZSIsICJkYXRhIiwgIlVzZUd1YXJkcyIsICJndWFyZHMiLCAiJFVzZUd1YXJkcyIsICJVc2VJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3JzIiwgIiRVc2VJbnRlcmNlcHRvcnMiLCAiT25QbGF5ZXJSZXF1ZXN0IiwgInJwY05hbWUiLCAiY3JlYXRlUlBDRGVjb3JhdG9yIiwgIk9uUmVxdWVzdCIsICJycGNOYW1lIiwgIiRPblJlcXVlc3QiLCAiT25XZWJWaWV3UmVxdWVzdCIsICJpZCIsICJycGNOYW1lIiwgIiRPbldlYlZpZXdSZXF1ZXN0IiwgIlRIUk9UVExFUl9MSU1JVCIsICJUSFJPVFRMRVJfVFRMIiwgIlRIUk9UVExFUl9PUFRJT05TIiwgIlRIUk9UVExFUl9TS0lQIiwgIlRIUk9UVExFUl9TVE9SQUdFIiwgIlNraXBUaHJvdHRsZSIsICJza2lwIiwgImRlZmF1bHQiLCAidGFyZ2V0IiwgIl9wcm9wZXJ0eUtleSIsICJkZXNjcmlwdG9yIiwgImtleSIsICJSZWZsZWN0IiwgImRlZmluZU1ldGFkYXRhIiwgIlRIUk9UVExFUl9TS0lQIiwgInZhbHVlIiwgInNldFRocm90dGxlck1ldGFkYXRhIiwgInRhcmdldCIsICJvcHRpb25zIiwgIm5hbWUiLCAiUmVmbGVjdCIsICJkZWZpbmVNZXRhZGF0YSIsICJUSFJPVFRMRVJfVFRMIiwgInR0bCIsICJUSFJPVFRMRVJfTElNSVQiLCAibGltaXQiLCAiVGhyb3R0bGUiLCAiX3Byb3BlcnR5S2V5IiwgImRlc2NyaXB0b3IiLCAidmFsdWUiLCAiY3JlYXRlSGFzaCIsICJUaHJvdHRsZXJHdWFyZCIsICJvcHRpb25zIiwgInN0b3JhZ2VTZXJ2aWNlIiwgInJlZmxlY3RvciIsICJ0aHJvdHRsZXJzIiwgImNvbW1vbk9wdGlvbnMiLCAib25Nb2R1bGVJbml0IiwgIkFycmF5IiwgImlzQXJyYXkiLCAic29ydCIsICJmaXJzdCIsICJzZWNvbmQiLCAiaXNGdW5jdGlvbiIsICJ0dGwiLCAibWFwIiwgIm9wdCIsICJuYW1lIiwgInNraXBJZiIsICJjYW5BY3RpdmF0ZSIsICJjb250ZXh0IiwgImNvbnRpbnVlcyIsICJuYW1lZFRocm90dGxlciIsICJza2lwIiwgImdldEFsbEFuZE92ZXJyaWRlIiwgIlRIUk9UVExFUl9TS0lQIiwgImhhbmRsZXIiLCAiY2xhc3NSZWYiLCAicHVzaCIsICJyb3V0ZU9yQ2xhc3NMaW1pdCIsICJUSFJPVFRMRVJfTElNSVQiLCAicm91dGVPckNsYXNzVHRsIiwgIlRIUk9UVExFUl9UVEwiLCAibGltaXQiLCAicmVzb2x2ZVZhbHVlIiwgImhhbmRsZVJlcXVlc3QiLCAiZXZlcnkiLCAiY29udCIsICJ0aHJvdHRsZXIiLCAicGxheWVyIiwgInJlcXVlc3QiLCAiRXJyb3IiLCAia2V5IiwgImdlbmVyYXRlS2V5IiwgInRvdGFsSGl0cyIsICJ0aW1lVG9FeHBpcmUiLCAiaW5jcmVtZW50IiwgInRocm93VGhyb3R0bGluZ0V4Y2VwdGlvbiIsICJwcmVmaXgiLCAiY3JlYXRlSGFzaCIsICJ1cGRhdGUiLCAiZGlnZXN0IiwgInRvU3RyaW5nIiwgIl90aHJvdHRsZXJMaW1pdERldGFpbCIsICJUb29NYW55UmVxdWVzdHMiLCAiZ2V0RXJyb3JNZXNzYWdlIiwgIl9jb250ZXh0IiwgImVycm9yTWVzc2FnZSIsICJFcnJvck1lc3NhZ2UiLCAicmVzb2x2YWJsZVZhbHVlIiwgIlRocm90dGxlclN0b3JhZ2VTZXJ2aWNlIiwgInN0b3JhZ2UiLCAiV2Vha01hcCIsICJ0aW1lb3V0SWRzIiwgImdldEV4cGlyYXRpb25UaW1lIiwgInBsYXllciIsICJrZXkiLCAiTWF0aCIsICJmbG9vciIsICJnZXQiLCAiZXhwaXJlc0F0IiwgIkRhdGUiLCAibm93IiwgInNldEV4cGlyYXRpb25UaW1lIiwgInR0bE1pbGxpc2Vjb25kcyIsICJ0aW1lb3V0SWQiLCAic2V0VGltZW91dCIsICJ0b3RhbEhpdHMiLCAiY2xlYXJUaW1lb3V0IiwgImZpbHRlciIsICJpZCIsICJwdXNoIiwgImluY3JlbWVudCIsICJ0dGwiLCAic2V0IiwgIk1hcCIsICJ0aW1lVG9FeHBpcmUiLCAib25BcHBTaHV0ZG93biIsICJmb3JFYWNoIiwgIlRocm90dGxlck1vZHVsZSIsICJmb3JSb290IiwgIm9wdGlvbnMiLCAibW9kdWxlIiwgInByb3ZpZGVycyIsICJwcm92aWRlIiwgIlRIUk9UVExFUl9PUFRJT05TIiwgInVzZVZhbHVlIiwgIlRIUk9UVExFUl9TVE9SQUdFIiwgInVzZUNsYXNzIiwgIlRocm90dGxlclN0b3JhZ2VTZXJ2aWNlIiwgImV4cG9ydHMiLCAiZm9yUm9vdEFzeW5jIiwgImNyZWF0ZUFzeW5jUHJvdmlkZXJzIiwgImltcG9ydHMiLCAidXNlRXhpc3RpbmciLCAidXNlRmFjdG9yeSIsICJjcmVhdGVBc3luY09wdGlvbnNQcm92aWRlciIsICJpbmplY3QiLCAib3B0aW9uc0ZhY3RvcnkiLCAiY3JlYXRlVGhyb3R0bGVyT3B0aW9ucyIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiU2VydmVyUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIlNlcnZlckFwcEJ1aWxkZXIiLCAiQXBwQnVpbGRlciIsICJzZXRCbGlwRmFjdG9yeSIsICJmYWN0b3J5IiwgInNldE1hcmtlckZhY3RvcnkiLCAic2V0Q29sU2hhcGVGYWN0b3J5IiwgInNldENoZWNrcG9pbnRGYWN0b3J5IiwgInNldE9iamVjdEZhY3RvcnkiLCAic2V0UGVkRmFjdG9yeSIsICJzZXRQbGF5ZXJGYWN0b3J5IiwgInNldFZlaGljbGVGYWN0b3J5IiwgInNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkiLCAic2V0VmlydHVhbEVudGl0eUZhY3RvcnkiLCAic2V0Vm9pY2VDaGFubmVsRmFjdG9yeSIsICJjcmVhdGVBcHBCdWlsZGVyIiwgIiRjcmVhdGVBcHBCdWlsZGVyIiwgImVudmlyb21lbnQiLCAiQXBwRW52aXJvbWVudCIsICJTZXJ2ZXIiLCAicGx1Z2lucyIsICJTZXJ2aWNlQmluZGVyUGx1Z2luIiwgIlBsYXllclByb3RvdHlwZVBsdWdpbiIsICJSUENQbHVnaW4iLCAiYXBwQnVpbGRlckluaGVyaXQiXQp9Cg==
|