@ragemp-mango/client 5.1.0 → 5.1.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.
Files changed (2) hide show
  1. package/dist/index.js +3 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -7809,7 +7809,8 @@ var ClientRageMPEventEmmiter = class {
7809
7809
  mp.events.remove(eventName, listener);
7810
7810
  }
7811
7811
  emitServer(eventName, ...args) {
7812
- mp.events.callRemote(eventName, ...args);
7812
+ const serializedArgs = args.map((arg) => JSON.stringify(arg));
7813
+ mp.events.callRemote(eventName, ...serializedArgs);
7813
7814
  }
7814
7815
  onServer(eventName, listener) {
7815
7816
  const mappedEventName = this.getEventName(eventName);
@@ -8832,4 +8833,4 @@ export {
8832
8833
  isSymbol,
8833
8834
  isUndefined
8834
8835
  };
8835
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2FwcC1lbnZpcm9tZW50LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2NvcmUtbWV0YWRhdGEta2V5LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V2ZW50LWRlc3RpbmF0aW9uLmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V4ZWN1dGlvbi1jb250ZXh0LXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvZW51bXMvbWV0aG9kLXBhcmFtLXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZW51bXMvZXJyb3ItbWVzc2FnZS5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2VudW1zL2luamVjdGFibGUtc2NvcGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9lbnVtcy9ycGMtcmVzdWx0LXN0YXR1cy5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvZGlzdC9jaHVuay03UVZZVTYzRS5qcyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy9nZW5lcmF0ZS1yYW5kb20taWQudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy90eXBlLWNoZWNrLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS9tb2R1bGUtbWV0YWRhdGEucmVhZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUvbW9kdWxlLWNvbnRhaW5lci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlL21vZHVsZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvZXhlY3V0aW9uLWNvbnRleHQtYmFzZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvbWFuZ28tcmVxdWVzdC1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9waXBlbGluZS9tYW5nby1yZXNwb25zZS1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC91dGlscy90cmVlLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9jb250cm9sbGVyL2NvbnRyb2xsZXItb3B0aW9ucy52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9lcnJvci1maWx0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvcGlwZS52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9ldmVudC1wYXJhbWV0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZXZlbnQtbWV0YWRhdGEudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZ3VhcmQudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvaW50ZXJjZXB0b3IudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3Rpb24tdG9rZW4udmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvcHJvdmlkZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvbW9kdWxlLW9wdGlvbnMudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3RhYmxlLW1ldGFkYXRhLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL21hbmdvLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9ndWFyZC1jYW5jZWwuZXJyb3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL2d1YXJkLWludmFsaWQtcmV0dXJuLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy90b28tbWFueS1yZXF1ZXN0cy5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9lcnJvcnMvdW5rbm93bi5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWV2ZW50LmhhbmRsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvcGlwZWxpbmUuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWZsb3cuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLW1ldGFkYXRhLnJlYWRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLXJwYy5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb250cm9sbGVyL2NvbnRyb2xsZXIudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhYnJhaGFtK3JlZmxlY3Rpb25AMC4xMi4wL25vZGVfbW9kdWxlcy9AYWJyYWhhbS9yZWZsZWN0aW9uL3NyYy9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9yZWZsZWN0b3Iuc2VydmljZS50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2luZGV4LnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9jb250cm9sbGVyLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvZ2xvYmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0YWJsZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL21vZHVsZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL29wdGlvbmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvc2V0LW1ldGFkYXRhLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy9jYXRjaC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9lcnJvcnMvdXNlLWZpbHRlcnMuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlLXRyZWUvYXBwLXJ1bnRpbWUudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL2RlcGVuZGVuY3ktYmluZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUtdHJlZS9tb2R1bGUtdHJlZS1zY2FubmVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLWV2ZW50LWVtbWl0ZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXJzLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLW11bHRpcGxheWVyLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2FwcC1idWlsZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NyZWF0ZS1hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLWludGVybmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS1pbnRlcm5hbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9ib2R5LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9pbmRleC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcmVxdWVzdC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcGFyYW0uZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGFyYW1zL3Jlc3BvbnNlLmRlb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGlwZWxpbmUvdXNlLWd1YXJkcy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtaW50ZXJjZXB0b3JzLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1waXBlcy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtcnBjLWRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi13ZWJ2aWV3LXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY3JlYXRlLXRpbWVyLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9jcm9uLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9ldmVyeS10aWNrLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9pbnRlcnZhbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvdGltZW91dC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9hcHBseS1kZWNvcmF0b3IudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS1wYXJhbS51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZm9yd2FyZC1yZWYudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy90aW1lci5zZXJ2aWNlLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9uZXJAOC4xLjIvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5taW4uanMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3NlcnZpY2VzL2Jhc2UtZXZlbnQuc2VydmljZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvc2VydmljZXMvYmFzZS1ycGMuc2VydmljZS50cyIsICIuLi9zcmMvY29uc3RhbnRzL2luamVjdC5jb25zdHMudHMiLCAiLi4vc3JjL2NvbnN0YW50cy9pbnRlcm5hbC1ldmVudHMuY29uc3RzLnRzIiwgIi4uL3NyYy9wbHVnaW5zL2V2ZW50LW1lZGlhdG9yLnBsdWdpbi50cyIsICIuLi8uLi9jb3JlL3NyYy9waXBlcy9kZWZhdWx0LXZhbHVlLnBpcGUudHMiLCAiLi4vc3JjL3BsdWdpbnMvcnBjLnBsdWdpbi50cyIsICIuLi9zcmMvcGx1Z2lucy9zZXJ2aWNlLWJpbmRlci5wbHVnaW4udHMiLCAiLi4vc3JjL3NlcnZpY2VzL2NsaWVudC1ldmVudC5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9zZXJ2aWNlcy9jbGllbnQtbG9nZ2VyLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvZW51bXMvZXJyb3ItbWVzc2FnZS5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2VudW1zL2luamVjdGFibGUtc2NvcGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9lbnVtcy9ycGMtcmVzdWx0LXN0YXR1cy5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvY29udHJvbGxlci1ldmVudC5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3V0aWxzL2dlbmVyYXRlLXJhbmRvbS1pZC51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3V0aWxzL3R5cGUtY2hlY2sudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9waXBlbGluZS5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9tYW5nby5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9lcnJvcnMvZ3VhcmQtY2FuY2VsLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9ndWFyZC1pbnZhbGlkLXJldHVybi5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2FwcC1lbnZpcm9tZW50LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2NvcmUtbWV0YWRhdGEta2V5LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V4ZWN1dGlvbi1jb250ZXh0LXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWZsb3cuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLW1ldGFkYXRhLnJlYWRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLXJwYy5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb250cm9sbGVyL2NvbnRyb2xsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS9tb2R1bGUtbWV0YWRhdGEucmVhZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUvbW9kdWxlLWNvbnRhaW5lci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlL21vZHVsZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlLXRyZWUvYXBwLXJ1bnRpbWUudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL2RlcGVuZGVuY3ktYmluZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL3JlZmxlY3Rvci5zZXJ2aWNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL2Vycm9yLWZpbHRlci52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9waXBlLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL2d1YXJkLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL2ludGVyY2VwdG9yLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvaW5qZWN0YWJsZS1tZXRhZGF0YS52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvY29udHJvbGxlci5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL2luamVjdC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL2luamVjdGFibGUuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9tb2R1bGUuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9vcHRpb25hbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL3NldC1tZXRhZGF0YS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9mb3J3YXJkLXJlZi51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL3RpbWVyLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL21vZHVsZS10cmVlLXNjYW5uZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3V0aWxzL3RyZWUudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvZXhlY3V0aW9uLWNvbnRleHQtYmFzZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvbWFuZ28tcmVxdWVzdC1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9waXBlbGluZS9tYW5nby1yZXNwb25zZS1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9zZXJ2aWNlcy9iYXNlLWV2ZW50LnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3NlcnZpY2VzL2Jhc2UtcnBjLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2FwcC1idWlsZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NyZWF0ZS1hcHAudHMiLCAiLi4vc3JjL3NlcnZpY2VzL2NsaWVudC1ycGMuc2VydmljZS50cyIsICIuLi9zcmMvc2VydmljZXMvd2Vidmlldy1saXN0LnNlcnZpY2UudHMiLCAiLi4vc3JjL3NlcnZpY2VzL2NsaWVudC13ZWJ2aWV3LnNlcnZpY2UudHMiLCAiLi4vc3JjL3BsdWdpbnMvd2Vidmlldy5wbHVnaW4udHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtc2NyaXB0LWV2ZW50LWhhbmRsZXIudHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtZXZlbnQtZW1taXRlci50cyIsICIuLi9zcmMvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC13ZWJ2aWV3LnRzIiwgIi4uL3NyYy9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXdlYnZpZXctbWFuYWdlci50cyIsICIuLi9zcmMvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1tdWx0aXBsYXllci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy91c2UtZmlsdGVycy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL2ludGVybmFsL2luZGV4LnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi1zZXJ2ZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24uZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLXNlcnZlci5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2Utd2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1ndWFyZHMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1pbnRlcmNlcHRvcnMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ycGMvb24tc2VydmVyLXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi13ZWJ2aWV3LXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IGVudW0gQXBwRW52aXJvbWVudCB7XG4gICAgQ2xpZW50LFxuICAgIFNlcnZlcixcbn1cbiIsICJleHBvcnQgZW51bSBDb3JlTWV0YWRhdGFLZXkge1xuICAgIC8vIEdlbmVyYWxcbiAgICBJbmplY3RhYmxlID0gJ21hbmdvOmluamVjdGFibGUnLFxuICAgIEluamVjdCA9ICdtYW5nbzppbmplY3QnLFxuICAgIE1vZHVsZSA9ICdtYW5nbzptb2R1bGUnLFxuICAgIEdsb2JhbE1vZHVsZSA9ICdtYW5nbzpnbG9iYWwtbW9kdWxlJyxcbiAgICBDb250cm9sbGVyID0gJ21hbmdvOmNvbnRyb2xsZXItb3B0aW9ucycsXG4gICAgLy8gRXZlbnRzICYgUlBDXG4gICAgQ29udHJvbGxlckV2ZW50cyA9ICdtYW5nbzpjb250cm9sbGVyLWV2ZW50cycsXG4gICAgQ29udHJvbGxlclJQQ3MgPSAnbWFuZ286Y29udHJvbGxlci1ycGNzJyxcbiAgICBDb250cm9sbGVyUGFyYW1zID0gJ21hbmdvOmNvbnRyb2xsZXItcnBjLXBhcmFtcycsXG4gICAgLy8gUGlwZWxpbmVcbiAgICBHdWFyZHMgPSAnbWFuZ286Z3VhcmRzJyxcbiAgICBJbnRlcmNlcHRvcnMgPSAnbWFuZ286aW50ZXJjZXB0b3JzJyxcbiAgICBQaXBlcyA9ICdtYW5nbzpwaXBlcycsXG4gICAgLy8gRXJyb3JcbiAgICBDYXRjaCA9ICdtYW5nbzpjYXRjaCcsXG4gICAgRXJyb3JGaWx0ZXJzID0gJ21hbmdvOmVycm9yLWZpbHRlcnMnLFxuICAgIC8vXG4gICAgVGltZXJzID0gJ21hbmdvOnRpbWVycycsXG59XG4iLCAiZXhwb3J0IGVudW0gRXZlbnREZXN0aW5hdGlvbiB7XG4gICAgU2VydmVyID0gJ3NlcnZlcicsXG4gICAgQ2xpZW50ID0gJ2NsaWVudCcsXG4gICAgV2ViVmlldyA9ICd3ZWJ2aWV3Jyxcbn1cbiIsICJleHBvcnQgZW51bSBFeGVjdXRpb25Db250ZXh0VHlwZSB7XG4gICAgRXZlbnQgPSAnZXZlbnQnLFxuICAgIFJQQyA9ICdycGMnLFxufVxuIiwgImV4cG9ydCBlbnVtIE1ldGhvZFBhcmFtVHlwZSB7XG4gICAgQm9keSA9ICdib2R5JyxcbiAgICBDdXN0b20gPSAnY3VzdG9tJyxcbiAgICBQYXJhbSA9ICdwYXJhbScsXG4gICAgUGxheWVyID0gJ3BsYXllcicsXG4gICAgUmVxdWVzdCA9ICdyZXF1ZXN0JyxcbiAgICBSZXNwb25zZSA9ICdyZXNwb25zZScsXG4gICAgSW5kZXggPSAnaW5kZXgnLFxufVxuIiwgImV4cG9ydCBjb25zdCBMT0dHRVJfU0VSVklDRSA9ICdMT0dHRVJfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgRVZFTlRfU0VSVklDRSA9ICdFVkVOVF9TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBSUENfU0VSVklDRSA9ICdSUENfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgTU9EVUxFX0NPTlRBSU5FUiA9ICdNT0RVTEVfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBSRUZMRUNUT1JfU0VSVklDRSA9ICdSRUZMRUNUT1JfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgVElNRVJfU0VSVklDRSA9ICdUSU1FUl9TRVJWSUNFJztcbiIsICJleHBvcnQgZW51bSBFcnJvck1lc3NhZ2Uge1xuICAgIFRvb01hbnlSZXF1ZXN0cyA9ICdUb28gbWFueSByZXF1ZXN0cy4nLFxuXG4gICAgLy8gRXZlbnRzXG4gICAgRXZlbnROYW1lTXVzdEJlU3RyaW5nID0gJ1RoZSBldmVudCBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBFdmVudE5hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIGV2ZW50IG5hbWUgbXVzdCBiZSB1bmlxdWUuJyxcbiAgICBFdmVudE5vdEFsbG93ZWRJbkNsaWVudCA9ICdUaGUgZXZlbnQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIEV2ZW50Tm90QWxsb3dlZEluU2VydmVyID0gJ1RoZSBldmVudCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc2VydmVyIGVudmlyb25tZW50LicsXG4gICAgSW52YWxpZEV2ZW50VHlwZSA9ICdJbnZhbGlkIGV2ZW50IHR5cGUuJyxcbiAgICBJbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUgPSAnVGhlIG5hbWUgb2YgdGhlIGludGVybmFsIGV2ZW50IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUmV0dXJuSW5FdmVudCA9ICdDYW5ub3QgcmV0dXJuIGEgdmFsdWUgZnJvbSBhbiBldmVudC4nLFxuXG4gICAgLy8gUlBDXG4gICAgUlBDTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgUlBDIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4nLFxuICAgIFJQQ05hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIFJQQyBuYW1lIG11c3QgYmUgdW5pcXVlLicsXG4gICAgUlBDTm90QWxsb3dlZEluQ2xpZW50ID0gJ1RoZSBSUEMgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIFJQQ05vdEFsbG93ZWRJblNlcnZlciA9ICdUaGUgUlBDIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQuJyxcbiAgICBJbnZhbGlkUlBDVHlwZSA9ICdJbnZhbGlkIFJQQyB0eXBlLicsXG4gICAgUlBDSGFuZGxlckFscmVhZHlFeGlzdHMgPSAnVGhlIFJQQyBoYW5kbGVyIGFscmVhZHkgZXhpc3RzLiBQbGVhc2UgcHJvdmlkZSBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgUlBDLicsXG4gICAgUlBDUmVzcG9uc2VBbHJlYWR5U2VudCA9ICdUaGUgUlBDIHJlc3BvbnNlIGhhcyBhbHJlYWR5IGJlZW4gc2VudC4nLFxuXG4gICAgLy8gRXJyb3IgZmlsdGVyc1xuICAgIEludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24gPSAnSW52YWxpZCBlcnJvciBmaWx0ZXIuIEVycm9yIGZpbHRlcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhIGNhdGNoIG1ldGhvZC4nLFxuICAgIEVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlciA9ICdUaGUgZXJyb3IgYWxyZWFkeSBwb2ludHMgdG8gYSBmaWx0ZXIuJyxcbiAgICBFeGNlcHRpb25IYW5kbGluZ0NvbmZsaWN0ID0gJ1RoZSBzYW1lIGV4Y2VwdGlvbiBjYW4gb25seSBiZSBjYXVnaHQgb25jZS4nLFxuICAgIEF0TGVhc3RPbmVGaWx0ZXJSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgZXJyb3IgZmlsdGVyIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBEdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkID0gJ0R1cGxpY2F0ZSBlcnJvciBmaWx0ZXIgZm91bmQuIEVuc3VyZSB0aGF0IHRoZSBzYW1lIGZpbHRlciBpcyBub3QgYXBwbGllZCBtb3JlIHRoYW4gb25jZS4nLFxuXG4gICAgLy8gV2ViVmlld1xuICAgIFdlYlZpZXdOb3RGb3VuZCA9ICdUaGUgV2ViVmlldyB3aXRoIHRoZSBzcGVjaWZpZWQgaWQgZG9lcyBub3QgZXhpc3QuJyxcbiAgICBXZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlciA9ICdUaGUgV2ViVmlldyBpZCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bWJlci4nLFxuXG4gICAgLy8gR3VhcmRcbiAgICBJbnZhbGlkR3VhcmREZWZpbml0aW9uID0gJ0ludmFsaWQgZ3VhcmQuIEd1YXJkcyBtdXN0IGJlIGEgY2xhc3MgcmVmZXJlbmNlIG9yIGFuIG9iamVjdCB3aXRoIGEgY2FuQWN0aXZhdGUgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGd1YXJkIG11c3QgYmUgcHJvdmlkZWQuJyxcblxuICAgIC8vIEludGVyY2VwdG9yXG4gICAgSW52YWxpZEludGVyY2VwdG9yRGVmaW5pdGlvbiA9ICdJbnZhbGlkIGludGVyY2VwdG9yLiBJbnRlcmNlcHRvcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpbnRlcmNlcHQgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGludGVyY2VwdG9yIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBJbnZhbGlkSW50ZXJjZXB0b3JSZXR1cm5WYWx1ZSA9ICdUaGUgaW50ZXJjZXB0b3IgbXVzdCByZXR1cm4gYSBmdW5jdGlvbi4nLFxuXG4gICAgLy8gUGlwZVxuICAgIEludmFsaWRQaXBlRGVmaW5pdGlvbiA9ICdJbnZhbGlkIHBpcGUuIFBpcGVzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYSB0cmFuc2Zvcm0gbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgcGlwZSBtdXN0IGJlIHByb3ZpZGVkLicsXG5cbiAgICAvLyBBcHAgbG9hZGluZ1xuICAgIEFwcEFscmVhZHlMb2FkZWQgPSAnQXBwIGlzIGFscmVhZHkgbG9hZGVkLiBQbGVhc2UgY2FsbCB0aGUgc3RvcCBtZXRob2QgYmVmb3JlIGNhbGxpbmcgdGhlIHN0YXJ0IG1ldGhvZC4nLFxuICAgIEFwcE5vdExvYWRlZCA9ICdBcHAgaXMgbm90IGxvYWRlZC4gUGxlYXNlIGNhbGwgdGhlIHN0YXJ0IG1ldGhvZCBiZWZvcmUgY2FsbGluZyB0aGUgc3RvcCBtZXRob2QuJyxcblxuICAgIC8vIERlY29yYXRvcnNcbiAgICBJbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQgPSAnVGhlIHNwZWNpZmllZCBpbmplY3Rpb24gdG9rZW4gaXMgaW52YWxpZC4nLFxuICAgIEluamVjdGlvblRva2VuTm90Rm91bmQgPSAnVGhlIGluamVjdGlvbiB0b2tlbiBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICBQYXJhbUtleU11c3RCZVN0cmluZyA9ICdUaGUgcGFyYW0ga2V5IG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBJbmRleEtleU11c3RCZU51bWJlciA9ICdUaGUgaW5kZXgga2V5IG11c3QgYmUgYSBudW1iZXIuJyxcbiAgICBEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSA9ICdUaGUgc2FtZSBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCBvbmNlIGluIHRoZSBzYW1lIGNsYXNzLicsXG4gICAgSW52YWxpZENvbnRyb2xsZXJPcHRpb25zID0gJ0ludmFsaWQgY29udHJvbGxlciBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZEluamVjdGFibGVPcHRpb25zID0gJ0ludmFsaWQgaW5qZWN0YWJsZSBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZE1vZHVsZU9wdGlvbnMgPSAnSW52YWxpZCBtb2R1bGUgb3B0aW9ucyBmb3VuZC4nLFxuICAgIE11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCA9ICdDYW5ub3QgYXBwbHkgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byB0aGUgc2FtZSBwYXJhbWV0ZXIuJyxcblxuICAgIC8vIEludGVybmFsIEFwcFxuICAgIENpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkID0gJ0NpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQuJyxcbiAgICBJbnZhbGlkTW9kdWxlRGVmaW5pdGlvbiA9ICdUaGUgbW9kdWxlIGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkRXhwb3J0RGVmaW5pdGlvbiA9ICdUaGUgZXhwb3J0IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uID0gJ1RoZSBwcm92aWRlciBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFBhcmFtZXRlckRlY29yYXRvclVzYWdlID0gJ0VhY2ggcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGVpciBpdHMgb3duIGRlY29yYXRvci4nLFxuICAgIFJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzID0gJ1RoZSBAUmVzcG9uc2UoKSBkZWNvcmF0b3IgaXMgbm90IGFsbG93ZWQgb24gZXZlbnRzLicsXG4gICAgUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzID0gJ1RoZSBAUGxheWVyKCkgZGVjb3JhdG9yIGlzIG5vdCBhbGxvd2VkIG9uIGNsaWVudCBldmVudHMuJyxcblxuICAgIC8vIFRpbWVyc1xuICAgIFRpbWVyTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgdGltZXIgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLicsXG59XG4iLCAiZXhwb3J0IGVudW0gSW5qZWN0YWJsZVNjb3BlIHtcbiAgICBSZXF1ZXN0ID0gJ3JlcXVlc3QnLFxuICAgIFRyYW5zaWVudCA9ICd0cmFuc2llbnQnLFxuICAgIFNpbmdsZXRvbiA9ICdzaW5nbGV0b24nLFxufVxuIiwgImV4cG9ydCBlbnVtIFJQQ1Jlc3VsdFN0YXR1cyB7XG4gICAgU3VjY2VzcyA9IDEsXG4gICAgVGltZW91dCA9IDIsXG4gICAgSGFuZGxlck5vdEZvdW5kID0gMyxcbiAgICBVbmtub3duID0gNCxcbiAgICBDYW5jZWxsZWRCeUd1YXJkID0gNSxcbiAgICBJbnZhbGlkR3VhcmRSZXR1cm4gPSA2LFxuICAgIFRvb01hbnlSZXF1ZXN0cyA9IDcsXG4gICAgUGxheWVyRGlzY29ubmVjdGVkID0gOCxcbiAgICBQbGF5ZXJOb3RGb3VuZCA9IDksXG59XG4iLCAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSk9Pl9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbmV4cG9ydCB7IF9fbmFtZSB9OyAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV3b2dJQ0oyWlhKemFXOXVJam9nTXl3S0lDQWljMjkxY21ObGN5STZJRnRkTEFvZ0lDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNklGdGRMQW9nSUNKdFlYQndhVzVuY3lJNklDSWlMQW9nSUNKdVlXMWxjeUk2SUZ0ZENuMEtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklpSjkiLCAiZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tSWQoKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSkgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpO1xufVxuIiwgImV4cG9ydCBjb25zdCBpc1VuZGVmaW5lZCA9IChvYmo6IGFueSk6IG9iaiBpcyB1bmRlZmluZWQgPT4gdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSAoZm46IGFueSk6IGZuIGlzIG9iamVjdCA9PiAhaXNOaWwoZm4pICYmIHR5cGVvZiBmbiA9PT0gJ29iamVjdCc7XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvbiA9ICh2YWw6IGFueSk6IHZhbCBpcyBGdW5jdGlvbiA9PiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xuZXhwb3J0IGNvbnN0IGlzU3RyaW5nID0gKHZhbDogYW55KTogdmFsIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbmV4cG9ydCBjb25zdCBpc051bWJlciA9ICh2YWw6IGFueSk6IHZhbCBpcyBudW1iZXIgPT4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG5leHBvcnQgY29uc3QgaXNDb25zdHJ1Y3RvciA9ICh2YWw6IGFueSk6IGJvb2xlYW4gPT4gdmFsID09PSAnY29uc3RydWN0b3InO1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHZhbDogYW55KTogdmFsIGlzIG51bGwgfCB1bmRlZmluZWQgPT4gaXNVbmRlZmluZWQodmFsKSB8fCB2YWwgPT09IG51bGw7XG5leHBvcnQgY29uc3QgaXNFbXB0eSA9IChhcnJheTogYW55KTogYm9vbGVhbiA9PiAhKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA+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+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2FsSGFuZGxlcnMuZGVsZXRlKHJwY05hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWU6IHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5zZXQocnBjTmFtZSwgcnBjSGFuZGxlcik7XG5cbiAgICAgICAgcmV0dXJuIHJwY0hhbmRsZXI7XG4gICAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBXRUJWSUVXX1NFUlZJQ0UgPSAnV0VCVklFV19TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBXRUJWSUVXX0xJU1RfU0VSVklDRSA9ICdXRUJWSUVXX0xJU1RfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgQUREX1dFQlZJRVcgPSAnQUREX1dFQlZJRVcnO1xuIiwgImV4cG9ydCBjb25zdCBJTlRFUk5BTF9FVkVOVFMgPSB7XG4gICAgU0NSSVBUX1JQQzogJ3NjcmlwdFJQQycsXG4gICAgU0NSSVBUX1JQQ19BTlNXRVI6ICdzY3JpcHRSUENBbnN3ZXInLFxuICAgIEtFWUJPQVJEX0VWRU5UOiAna2V5Ym9hcmRFdmVudCcsXG4gICAgS0VZX1VQOiAna2V5VXAnLFxuICAgIEtFWV9ET1dOOiAna2V5RG93bicsXG4gICAgV0VCX1ZJRVdfRVZFTlQ6ICd3ZWJWaWV3RXZlbnQnLFxuICAgIFdFQl9TT0NLRVRfRVZFTlQ6ICd3ZWJTb2NrZXRFdmVudCcsXG4gICAgQVVESU9fRVZFTlQ6ICdhdWRpb0V2ZW50JyxcbiAgICBSTUxVSV9FVkVOVDogJ3JtbHVpRXZlbnQnLFxuICAgIFdJTkRPV19GT0NVU19DSEFOR0U6ICd3aW5kb3dGb2N1c0NoYW5nZScsXG4gICAgV0lORE9XX1JFU09MVVRJT05fQ0hBTkdFOiAnd2luZG93UmVzb2x1dGlvbkNoYW5nZScsXG4gICAgQ09OTkVDVElPTl9DT01QTEVURTogJ2Nvbm5lY3Rpb25Db21wbGV0ZScsXG4gICAgRElTQ09OTkVDVDogJ2Rpc2Nvbm5lY3QnLFxuICAgIFNQQVdORUQ6ICdzcGF3bmVkJyxcbiAgICBHQU1FX0VOVElUWV9DUkVBVEU6ICdnYW1lRW50aXR5Q3JlYXRlJyxcbiAgICBHQU1FX0VOVElUWV9ERVNUUk9ZOiAnZ2FtZUVudGl0eURlc3Ryb3knLFxuICAgIEVOVElUWV9ISVRfRU5USVRZOiAnZW50aXR5SGl0RW50aXR5JyxcbiAgICBUQVNLX0NIQU5HRTogJ3Rhc2tDaGFuZ2UnLFxuICAgIFBMQVlFUl9XRUFQT05fU0hPT1Q6ICdwbGF5ZXJXZWFwb25TaG9vdCcsXG4gICAgUExBWUVSX0JVTExFVF9ISVQ6ICdwbGF5ZXJCdWxsZXRIaXQnLFxuICAgIFBMQVlFUl9XRUFQT05fQ0hBTkdFOiAncGxheWVyV2VhcG9uQ2hhbmdlJyxcbiAgICBQTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUjogJ3BsYXllclN0YXJ0VmVoaWNsZUVudGVyJyxcbiAgICBQTEFZRVJfU1RBUlRfVkVISUNMRV9MRUFWRTogJ3BsYXllclN0YXJ0VmVoaWNsZUxlYXZlJyxcbiAgICBQTEFZRVJfVkVISUNMRV9FTlRFUkVEOiAncGxheWVyVmVoaWNsZUVudGVyZWQnLFxuICAgIFBMQVlFUl9WRUhJQ0xFX0xFRlQ6ICdwbGF5ZXJWZWhpY2xlTGVmdCcsXG4gICAgUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0U6ICdwbGF5ZXJWZWhpY2xlU2VhdENoYW5nZScsXG4gICAgVk9JQ0VfQ09OTkVDVElPTjogJ3ZvaWNlQ29ubmVjdGlvbicsXG4gICAgUExBWUVSX1NUQVJUX1RBTEtJTkc6ICdwbGF5ZXJTdGFydFRhbGtpbmcnLFxuICAgIFBMQVlFUl9TVE9QX1RBTEtJTkc6ICdwbGF5ZXJTdG9wVGFsa2luZycsXG4gICAgV09STERfT0JKRUNUX1BPU0lUSU9OX0NIQU5HRTogJ3dvcmxkT2JqZWN0UG9zaXRpb25DaGFuZ2UnLFxuICAgIFdPUkxEX09CSkVDVF9TVFJFQU1fSU46ICd3b3JsZE9iamVjdFN0cmVhbUluJyxcbiAgICBXT1JMRF9PQkpFQ1RfU1RSRUFNX09VVDogJ3dvcmxkT2JqZWN0U3RyZWFtT3V0JyxcbiAgICBFVkVOVDogJ2V2ZW50JyxcbiAgICBCQVNFX09CSkVDVF9DUkVBVEU6ICdiYXNlT2JqZWN0Q3JlYXRlJyxcbiAgICBCQVNFX09CSkVDVF9SRU1PVkU6ICdiYXNlT2JqZWN0UmVtb3ZlJyxcbiAgICBORVRfT1dORVJfQ0hBTkdFOiAnbmV0T3duZXJDaGFuZ2UnLFxuICAgIFdFQVBPTl9EQU1BR0U6ICd3ZWFwb25EYW1hZ2UnLFxuICAgIE1FVEFfQ0hBTkdFOiAnbWV0YUNoYW5nZScsXG4gICAgTE9DQUxfTUVUQV9DSEFOR0U6ICdsb2NhbE1ldGFDaGFuZ2UnLFxuICAgIFNZTkNFRF9NRVRBX0NIQU5HRTogJ3N5bmNlZE1ldGFDaGFuZ2UnLFxuICAgIFNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0U6ICdzdHJlYW1TeW5jZWRNZXRhQ2hhbmdlJyxcbiAgICBHTE9CQUxfTUVUQV9DSEFOR0U6ICdnbG9iYWxNZXRhQ2hhbmdlJyxcbiAgICBHTE9CQUxfU1lOQ0VEX01FVEFfQ0hBTkdFOiAnZ2xvYmFsU3luY2VkTWV0YUNoYW5nZScsXG4gICAgRU5USVRZX0NPTF9TSEFQRV9FTlRFUjogJ2VudGl0eUNvbFNoYXBlRW50ZXInLFxuICAgIEVOVElUWV9DT0xfU0hBUEVfTEVBVkU6ICdlbnRpdHlDb2xTaGFwZUxlYXZlJyxcbiAgICBFTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUjogJ2VudGl0eUNoZWNrcG9pbnRFbnRlcicsXG4gICAgRU5USVRZX0NIRUNLUE9JTlRfTEVBVkU6ICdlbnRpdHlDaGVja3BvaW50TGVhdmUnLFxuICAgIENPTF9TSEFQRV9FVkVOVDogJ2NvbFNoYXBlRXZlbnQnLFxuICAgIENPTlNPTEVfQ09NTUFORDogJ2NvbnNvbGVDb21tYW5kJyxcbiAgICBFUlJPUjogJ2Vycm9yJyxcbiAgICBMT0NBTF9TQ1JJUFRfRVZFTlQ6ICdsb2NhbFNjcmlwdEV2ZW50JyxcbiAgICBSRU1PVEVfU0NSSVBUX0VWRU5UOiAncmVtb3RlU2NyaXB0RXZlbnQnLFxuICAgIFJFU09VUkNFX1NUQVJUOiAncmVzb3VyY2VTdGFydCcsXG4gICAgUkVTT1VSQ0VfU1RPUDogJ3Jlc291cmNlU3RvcCcsXG4gICAgUkVTT1VSQ0VfRVJST1I6ICdyZXNvdXJjZUVycm9yJyxcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTWFuZ29QbHVnaW4gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IEVWRU5UX1NFUlZJQ0UsIExPR0dFUl9TRVJWSUNFLCB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgV0VCVklFV19TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsaWVudFdlYlZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRXZlbnRNZWRpYXRvclBsdWdpbiBpbXBsZW1lbnRzIE1hbmdvUGx1Z2luIHtcbiAgICBAaW5qZWN0KEVWRU5UX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2U7XG4gICAgQGluamVjdChXRUJWSUVXX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgd2ViVmlld1NlcnZpY2U6IENsaWVudFdlYlZpZXdTZXJ2aWNlO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBiZWZvcmVMb2FkKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5vblNlcnZlcignU0VSVkVSOjpFTUlUX1dFQlZJRVcnLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgdGhpcy53ZWJWaWV3U2VydmljZS5nZXQoYm9keS5pZCk/LmVtaXQoYFdFQlZJRVc6Ok9OX1NFUlZFUl8ke2JvZHkuZXZlbnROYW1lfWAsIGJvZHkucGF5bG9hZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMud2ViVmlld1NlcnZpY2UuJG9uQ3JlYXRlKChpZCwgd2ViVmlldykgPT4ge1xuICAgICAgICAgICAgd2ViVmlldy5vbignV0VCVklFVzo6RU1JVF9TRVJWRVInLCAoZGF0YTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRGF0YSBpcyBKU09OIHN0cmluZ2lmaWVkIGZyb20gd2VidmlldyBiZWNhdXNlIFJBR0U6TVAgZG9lc24ndCBwcm9wZXJseSBzZXJpYWxpemUgb2JqZWN0c1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEpIGFzIHsgZXZlbnROYW1lOiBzdHJpbmc7IHBheWxvYWQ6IHVua25vd24gfTtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5lbWl0U2VydmVyKGBTRVJWRVI6Ok9OX1dFQlZJRVdfJHtib2R5LmV2ZW50TmFtZX1fJHtpZH1gLCBib2R5LnBheWxvYWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35FdmVudCBtZWRpYXRvciBtZXRob2RzIGRlZmluZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsLCBpc051bWJlciB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIERlZmF1bHRWYWx1ZVBpcGU8VCA9IHVua25vd24sIFIgPSB1bmtub3duPiBpbXBsZW1lbnRzIFBpcGU8VCwgVCB8IFI+IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZTogVCkge31cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IFQpIHtcbiAgICAgICAgaWYgKGlzTmlsKHZhbHVlKSB8fCAoaXNOdW1iZXIodmFsdWUpICYmIGlzTmFOKDxudW1iZXI+dmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IHR5cGUgTWFuZ29QbHVnaW4sIHR5cGUgUlBDUGF5bG9hZCwgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCwgUlBDX1JFU1VMVF9VTktOT1dOIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQge1xuICAgIEVWRU5UX1NFUlZJQ0UsXG4gICAgUlBDX1NFUlZJQ0UsXG4gICAgUlBDUmVzdWx0U3RhdHVzLFxuICAgIHR5cGUgUlBDUmVzdWx0LFxuICAgIE1hbmdvRXJyb3IsXG4gICAgTE9HR0VSX1NFUlZJQ0UsXG4gICAgaXNOaWwsXG4gICAgdHlwZSBMb2dnZXJTZXJ2aWNlLFxufSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgV0VCVklFV19TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgQ2xpZW50V2ViVmlld1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50U2VydmljZSwgUlBDU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUlBDUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoRVZFTlRfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZTtcbiAgICBAaW5qZWN0KFdFQlZJRVdfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSB3ZWJWaWV3U2VydmljZTogQ2xpZW50V2ViVmlld1NlcnZpY2U7XG4gICAgQGluamVjdChSUENfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBycGNTZXJ2aWNlOiBSUENTZXJ2aWNlO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBiZWZvcmVMb2FkKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5vblNlcnZlcignUlBDOjpDQUxMX0NMSUVOVCcsIGFzeW5jIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBycGNIYW5kbGVyID0gdGhpcy5ycGNTZXJ2aWNlLiRzZXJ2ZXJIYW5kbGVycy5nZXQocGF5bG9hZC5ycGNOYW1lKTtcbiAgICAgICAgICAgIGlmIChpc05pbChycGNIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmVtaXRTZXJ2ZXIoYFJQQzo6UkVUVVJOX0ZST01fQ0xJRU5UXyR7cGF5bG9hZC5pZH1gLCBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjSGFuZGxlci5oYW5kbGVyKHBheWxvYWQuYm9keSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnBjUmVzdWx0OiBSUENSZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmVtaXRTZXJ2ZXIoYFJQQzo6UkVUVVJOX0ZST01fQ0xJRU5UXyR7cGF5bG9hZC5pZH1gLCBycGNSZXN1bHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNYW5nb0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJwY1Jlc3VsdDogUlBDUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRldGFpbHM6IGVycm9yLmRldGFpbHMgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZW1pdFNlcnZlcihgUlBDOjpSRVRVUk5fRlJPTV9DTElFTlRfJHtwYXlsb2FkLmlkfWAsIHJwY1Jlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5lbWl0U2VydmVyKGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwgUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMud2ViVmlld1NlcnZpY2UuJG9uQ3JlYXRlKCh3ZWJWaWV3SWQsIHdlYlZpZXcpID0+IHtcbiAgICAgICAgICAgIHdlYlZpZXcub24oJ1JQQzo6Q0FMTF9DTElFTlQnLCBhc3luYyAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghd2ViVmlldy52YWxpZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcnBjSGFuZGxlciA9IHRoaXMucnBjU2VydmljZS4kd2ViVmlld0hhbmRsZXJzLmdldChgJHt3ZWJWaWV3SWR9Ojoke3BheWxvYWQucnBjTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOaWwocnBjSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5lbWl0KGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGNIYW5kbGVyLmhhbmRsZXIocGF5bG9hZC5ib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5lbWl0KGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwgPFJQQ1Jlc3VsdD57XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuU3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTWFuZ29FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5lbWl0KGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRldGFpbHM6IGVycm9yLmRldGFpbHMgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5lbWl0KGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwgUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgd2ViVmlldy5vbignUlBDOjpDQUxMX1NFUlZFUicsIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZW1pdFNlcnZlcignUlBDOjpDQUxMX1NFUlZFUicsIDxSUENQYXlsb2FkPnsgLi4ucGF5bG9hZCwgd2ViVmlld0lkIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35SUEMgaGFuZGxlcnMgcmVnaXN0ZXJlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHRpbWV9bXMpYCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEdMT0JBTF9BUFBfQ09OVEFJTkVSLCBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLCB0eXBlIE1hbmdvUGx1Z2luIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBFVkVOVF9TRVJWSUNFLCBMT0dHRVJfU0VSVklDRSwgUlBDX1NFUlZJQ0UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgQ2xpZW50RXZlbnRTZXJ2aWNlLCBDbGllbnRMb2dnZXJTZXJ2aWNlLCBDbGllbnRSUENTZXJ2aWNlLCBDbGllbnRXZWJWaWV3U2VydmljZSwgV2ViVmlld0xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgV0VCVklFV19MSVNUX1NFUlZJQ0UsIFdFQlZJRVdfU0VSVklDRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQmluZGVyUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoR0xPQkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG5cbiAgICBwdWJsaWMgYXN5bmMgb25CdWlsZCgpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChMT0dHRVJfU0VSVklDRSkudG8oQ2xpZW50TG9nZ2VyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKEVWRU5UX1NFUlZJQ0UpLnRvKENsaWVudEV2ZW50U2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFJQQ19TRVJWSUNFKS50byhDbGllbnRSUENTZXJ2aWNlKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoV0VCVklFV19TRVJWSUNFKS50byhDbGllbnRXZWJWaWV3U2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFdFQlZJRVdfTElTVF9TRVJWSUNFKS50byhXZWJWaWV3TGlzdFNlcnZpY2UpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTE9HR0VSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZSh0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQoTE9HR0VSX1NFUlZJQ0UpKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEVWRU5UX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZSh0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQoRVZFTlRfU0VSVklDRSkpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoUlBDX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZSh0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQoUlBDX1NFUlZJQ0UpKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFdFQlZJRVdfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldChXRUJWSUVXX1NFUlZJQ0UpKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFdFQlZJRVdfTElTVF9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0KFdFQlZJRVdfTElTVF9TRVJWSUNFKSk7XG5cbiAgICAgICAgY29uc3QgbG9nZ2VyU2VydmljZSA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldDxDbGllbnRMb2dnZXJTZXJ2aWNlPihMT0dHRVJfU0VSVklDRSk7XG4gICAgICAgIGxvZ2dlclNlcnZpY2UubG9nKGB+bHd+SW50ZXJuYWwgc2VydmljZXMgYmluZGVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQmFzZUV2ZW50U2VydmljZSwgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBJTlRFUk5BTF9FVkVOVFMsIFdFQlZJRVdfTElTVF9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgV2ViVmlld0xpc3RTZXJ2aWNlIH0gZnJvbSAnLi93ZWJ2aWV3LWxpc3Quc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IENsaWVudEV2ZW50RW1taXRlciwgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsaWVudE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbXVsdGlwbGF5ZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2xpZW50RXZlbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZUV2ZW50U2VydmljZTxNYW5nb0V2ZW50cy5DdXN0b21DbGllbnRFdmVudD4gaW1wbGVtZW50cyBFdmVudFNlcnZpY2Uge1xuICAgIEBpbmplY3QoV0VCVklFV19MSVNUX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJHdlYlZpZXdMaXN0U2VydmljZTogV2ViVmlld0xpc3RTZXJ2aWNlO1xuICAgIHByaXZhdGUgJHJhZ2VFdmVudHM6IENsaWVudEV2ZW50RW1taXRlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIG11bHRpcGxheWVyU2VydmljZTogQ2xpZW50TXVsdGlwbGF5ZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKG11bHRpcGxheWVyU2VydmljZS5FdmVudHMpO1xuICAgICAgICB0aGlzLiRyYWdlRXZlbnRzID0gbXVsdGlwbGF5ZXJTZXJ2aWNlLkV2ZW50cztcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzID0gbmV3IFNldChPYmplY3QudmFsdWVzKElOVEVSTkFMX0VWRU5UUykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlcnZlcjxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IHRoaXMuJHJhZ2VFdmVudHMub25TZXJ2ZXIoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kcmVtb3RlSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG9uY2VTZXJ2ZXI8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLiRyYWdlRXZlbnRzLm9uY2VTZXJ2ZXIoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kcmVtb3RlSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRTZXJ2ZXI8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+LCBib2R5PzogdW5rbm93bikge1xuICAgICAgICB0aGlzLiRyYWdlRXZlbnRzLmVtaXRTZXJ2ZXIoZXZlbnROYW1lLCBib2R5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25XZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvQ2xpZW50RXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICkge1xuICAgICAgICBjb25zdCB3ZWJWaWV3ID0gdGhpcy4kd2ViVmlld0xpc3RTZXJ2aWNlLnRyeUdldChpZCk7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiBjYWxsYmFjayhhcmdzWzBdKTtcblxuICAgICAgICBjb25zdCBldmVudEhhbmRsZXI6IFNjcmlwdEV2ZW50SGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgd2ViVmlldy5vZmYoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgd2ViVmlldy5vbihldmVudE5hbWUsIHdyYXBwZXIpO1xuXG4gICAgICAgIHRoaXMuJHJlbW90ZUhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbmNlV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb0NsaWVudEV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApIHtcbiAgICAgICAgY29uc3Qgd2ViVmlldyA9IHRoaXMuJHdlYlZpZXdMaXN0U2VydmljZS50cnlHZXQoaWQpO1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsYmFjayhhcmdzWzBdKTtcblxuICAgICAgICBjb25zdCBldmVudEhhbmRsZXI6IFNjcmlwdEV2ZW50SGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgd2ViVmlldy5vZmYoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgd2ViVmlldy5vbmNlKGV2ZW50TmFtZSwgd3JhcHBlcik7XG5cbiAgICAgICAgdGhpcy4kcmVtb3RlSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tQ2xpZW50VG9XZWJWaWV3RXZlbnQ+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICApIHtcbiAgICAgICAgY29uc3Qgd2ViVmlldyA9IHRoaXMuJHdlYlZpZXdMaXN0U2VydmljZS50cnlHZXQoaWQpO1xuICAgICAgICB3ZWJWaWV3LmVtaXQoZXZlbnROYW1lLCBib2R5KTtcbiAgICB9XG5cbiAgICAvLyBSYWdlTVAgY2xpZW50LXNwZWNpZmljIGV2ZW50c1xuICAgIHB1YmxpYyBvblJlbmRlcihjYWxsYmFjazogKCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdyZW5kZXInLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQnJvd3NlckRvbVJlYWR5KGNhbGxiYWNrOiAoYnJvd3NlcjogQnJvd3Nlck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ2Jyb3dzZXJEb21SZWFkeScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ccm93c2VyTG9hZGluZ0ZhaWxlZChjYWxsYmFjazogKGJyb3dzZXI6IEJyb3dzZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdicm93c2VyTG9hZGluZ0ZhaWxlZCcsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJDaGF0KGNhbGxiYWNrOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckNoYXQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyQ29tbWFuZChjYWxsYmFjazogKGNvbW1hbmQ6IHN0cmluZykgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJDb21tYW5kJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckRlYXRoKGNhbGxiYWNrOiAoa2lsbGVyPzogUGxheWVyTXAsIHJlYXNvbj86IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJEZWF0aCcsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJTcGF3bihjYWxsYmFjazogKCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJTcGF3bicsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJFbnRlclZlaGljbGUoY2FsbGJhY2s6ICh2ZWhpY2xlOiBWZWhpY2xlTXAsIHNlYXQ6IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlclZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdFZlaGljbGUoY2FsbGJhY2s6ICh2ZWhpY2xlOiBWZWhpY2xlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdFZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRW50ZXJDb2xzaGFwZShjYWxsYmFjazogKGNvbHNoYXBlOiBDb2xzaGFwZU1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckVudGVyQ29sc2hhcGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdENvbHNoYXBlKGNhbGxiYWNrOiAoY29sc2hhcGU6IENvbHNoYXBlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdENvbHNoYXBlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckVudGVyQ2hlY2twb2ludChjYWxsYmFjazogKGNoZWNrcG9pbnQ6IENoZWNrcG9pbnRNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlckNoZWNrcG9pbnQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdENoZWNrcG9pbnQoY2FsbGJhY2s6IChjaGVja3BvaW50OiBDaGVja3BvaW50TXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdENoZWNrcG9pbnQnLCBjYWxsYmFjayk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBNQU5HT19MT0dfUFJFRklYIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NyYy9hcHAnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2xpZW50TG9nZ2VyU2VydmljZSBpbXBsZW1lbnRzIExvZ2dlclNlcnZpY2Uge1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsYXllclNlcnZpY2U6IE11bHRpcGxheWVyU2VydmljZTtcbiAgICBwdWJsaWMgbG9nKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2coYH53flt+eX4ke01BTkdPX0xPR19QUkVGSVh9Q2xpZW50fnd+XVt+bGJ+TG9nfnd+XWAsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2dXYXJuaW5nKGBbJHtNQU5HT19MT0dfUFJFRklYfUNsaWVudF1bV2Fybl1gLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXJyb3IoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZ0Vycm9yKGBbJHtNQU5HT19MT0dfUFJFRklYfUNsaWVudF1bRXJyb3JdYCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlYnVnKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2dEZWJ1Zyhgfnd+W355fiR7TUFOR09fTE9HX1BSRUZJWH1DbGllbnR+d35dW35sY35EZWJ1Z353fl1gLCAuLi5hcmdzKTtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGVudW0gRXJyb3JNZXNzYWdlIHtcbiAgICBUb29NYW55UmVxdWVzdHMgPSAnVG9vIG1hbnkgcmVxdWVzdHMuJyxcblxuICAgIC8vIEV2ZW50c1xuICAgIEV2ZW50TmFtZU11c3RCZVN0cmluZyA9ICdUaGUgZXZlbnQgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLicsXG4gICAgRXZlbnROYW1lTXVzdEJlVW5pcXVlID0gJ1RoZSBldmVudCBuYW1lIG11c3QgYmUgdW5pcXVlLicsXG4gICAgRXZlbnROb3RBbGxvd2VkSW5DbGllbnQgPSAnVGhlIGV2ZW50IGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjbGllbnQgZW52aXJvbm1lbnQuJyxcbiAgICBFdmVudE5vdEFsbG93ZWRJblNlcnZlciA9ICdUaGUgZXZlbnQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIHNlcnZlciBlbnZpcm9ubWVudC4nLFxuICAgIEludmFsaWRFdmVudFR5cGUgPSAnSW52YWxpZCBldmVudCB0eXBlLicsXG4gICAgSW52YWxpZEludGVybmFsRXZlbnROYW1lID0gJ1RoZSBuYW1lIG9mIHRoZSBpbnRlcm5hbCBldmVudCBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFJldHVybkluRXZlbnQgPSAnQ2Fubm90IHJldHVybiBhIHZhbHVlIGZyb20gYW4gZXZlbnQuJyxcblxuICAgIC8vIFJQQ1xuICAgIFJQQ05hbWVNdXN0QmVTdHJpbmcgPSAnVGhlIFJQQyBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBSUENOYW1lTXVzdEJlVW5pcXVlID0gJ1RoZSBSUEMgbmFtZSBtdXN0IGJlIHVuaXF1ZS4nLFxuICAgIFJQQ05vdEFsbG93ZWRJbkNsaWVudCA9ICdUaGUgUlBDIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjbGllbnQgZW52aXJvbm1lbnQuJyxcbiAgICBSUENOb3RBbGxvd2VkSW5TZXJ2ZXIgPSAnVGhlIFJQQyBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc2VydmVyIGVudmlyb25tZW50LicsXG4gICAgSW52YWxpZFJQQ1R5cGUgPSAnSW52YWxpZCBSUEMgdHlwZS4nLFxuICAgIFJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzID0gJ1RoZSBSUEMgaGFuZGxlciBhbHJlYWR5IGV4aXN0cy4gUGxlYXNlIHByb3ZpZGUgYSB1bmlxdWUgbmFtZSBmb3IgdGhlIFJQQy4nLFxuICAgIFJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQgPSAnVGhlIFJQQyByZXNwb25zZSBoYXMgYWxyZWFkeSBiZWVuIHNlbnQuJyxcblxuICAgIC8vIEVycm9yIGZpbHRlcnNcbiAgICBJbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uID0gJ0ludmFsaWQgZXJyb3IgZmlsdGVyLiBFcnJvciBmaWx0ZXJzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYSBjYXRjaCBtZXRob2QuJyxcbiAgICBFcnJvckFscmVhZHlIYW5kbGVkQnlGaWx0ZXIgPSAnVGhlIGVycm9yIGFscmVhZHkgcG9pbnRzIHRvIGEgZmlsdGVyLicsXG4gICAgRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCA9ICdUaGUgc2FtZSBleGNlcHRpb24gY2FuIG9ubHkgYmUgY2F1Z2h0IG9uY2UuJyxcbiAgICBBdExlYXN0T25lRmlsdGVyUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGVycm9yIGZpbHRlciBtdXN0IGJlIHByb3ZpZGVkLicsXG4gICAgRHVwbGljYXRlRXJyb3JGaWx0ZXJEZXRlY3RlZCA9ICdEdXBsaWNhdGUgZXJyb3IgZmlsdGVyIGZvdW5kLiBFbnN1cmUgdGhhdCB0aGUgc2FtZSBmaWx0ZXIgaXMgbm90IGFwcGxpZWQgbW9yZSB0aGFuIG9uY2UuJyxcblxuICAgIC8vIFdlYlZpZXdcbiAgICBXZWJWaWV3Tm90Rm91bmQgPSAnVGhlIFdlYlZpZXcgd2l0aCB0aGUgc3BlY2lmaWVkIGlkIGRvZXMgbm90IGV4aXN0LicsXG4gICAgV2ViVmlld0lkTXVzdEJlU3RyaW5nT3JOdW1iZXIgPSAnVGhlIFdlYlZpZXcgaWQgbXVzdCBiZSBhIHN0cmluZyBvciBudW1iZXIuJyxcblxuICAgIC8vIEd1YXJkXG4gICAgSW52YWxpZEd1YXJkRGVmaW5pdGlvbiA9ICdJbnZhbGlkIGd1YXJkLiBHdWFyZHMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhIGNhbkFjdGl2YXRlIG1ldGhvZC4nLFxuICAgIEF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkID0gJ0F0IGxlYXN0IG9uZSBndWFyZCBtdXN0IGJlIHByb3ZpZGVkLicsXG5cbiAgICAvLyBJbnRlcmNlcHRvclxuICAgIEludmFsaWRJbnRlcmNlcHRvckRlZmluaXRpb24gPSAnSW52YWxpZCBpbnRlcmNlcHRvci4gSW50ZXJjZXB0b3JzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYW4gaW50ZXJjZXB0IG1ldGhvZC4nLFxuICAgIEF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkID0gJ0F0IGxlYXN0IG9uZSBpbnRlcmNlcHRvciBtdXN0IGJlIHByb3ZpZGVkLicsXG4gICAgSW52YWxpZEludGVyY2VwdG9yUmV0dXJuVmFsdWUgPSAnVGhlIGludGVyY2VwdG9yIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24uJyxcblxuICAgIC8vIFBpcGVcbiAgICBJbnZhbGlkUGlwZURlZmluaXRpb24gPSAnSW52YWxpZCBwaXBlLiBQaXBlcyBtdXN0IGJlIGEgY2xhc3MgcmVmZXJlbmNlIG9yIGFuIG9iamVjdCB3aXRoIGEgdHJhbnNmb3JtIG1ldGhvZC4nLFxuICAgIEF0TGVhc3RPbmVQaXBlUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIHBpcGUgbXVzdCBiZSBwcm92aWRlZC4nLFxuXG4gICAgLy8gQXBwIGxvYWRpbmdcbiAgICBBcHBBbHJlYWR5TG9hZGVkID0gJ0FwcCBpcyBhbHJlYWR5IGxvYWRlZC4gUGxlYXNlIGNhbGwgdGhlIHN0b3AgbWV0aG9kIGJlZm9yZSBjYWxsaW5nIHRoZSBzdGFydCBtZXRob2QuJyxcbiAgICBBcHBOb3RMb2FkZWQgPSAnQXBwIGlzIG5vdCBsb2FkZWQuIFBsZWFzZSBjYWxsIHRoZSBzdGFydCBtZXRob2QgYmVmb3JlIGNhbGxpbmcgdGhlIHN0b3AgbWV0aG9kLicsXG5cbiAgICAvLyBEZWNvcmF0b3JzXG4gICAgSW52YWxpZEluamVjdGlvblRva2VuU3BlY2lmaWVkID0gJ1RoZSBzcGVjaWZpZWQgaW5qZWN0aW9uIHRva2VuIGlzIGludmFsaWQuJyxcbiAgICBJbmplY3Rpb25Ub2tlbk5vdEZvdW5kID0gJ1RoZSBpbmplY3Rpb24gdG9rZW4gY291bGQgbm90IGJlIGZvdW5kLicsXG4gICAgUGFyYW1LZXlNdXN0QmVTdHJpbmcgPSAnVGhlIHBhcmFtIGtleSBtdXN0IGJlIGEgc3RyaW5nLicsXG4gICAgSW5kZXhLZXlNdXN0QmVOdW1iZXIgPSAnVGhlIGluZGV4IGtleSBtdXN0IGJlIGEgbnVtYmVyLicsXG4gICAgRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UgPSAnVGhlIHNhbWUgZGVjb3JhdG9yIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBpbiB0aGUgc2FtZSBjbGFzcy4nLFxuICAgIEludmFsaWRDb250cm9sbGVyT3B0aW9ucyA9ICdJbnZhbGlkIGNvbnRyb2xsZXIgb3B0aW9ucyBmb3VuZC4nLFxuICAgIEludmFsaWRJbmplY3RhYmxlT3B0aW9ucyA9ICdJbnZhbGlkIGluamVjdGFibGUgb3B0aW9ucyBmb3VuZC4nLFxuICAgIEludmFsaWRNb2R1bGVPcHRpb25zID0gJ0ludmFsaWQgbW9kdWxlIG9wdGlvbnMgZm91bmQuJyxcbiAgICBNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQgPSAnQ2Fubm90IGFwcGx5IG11bHRpcGxlIGRlY29yYXRvcnMgdG8gdGhlIHNhbWUgcGFyYW1ldGVyLicsXG5cbiAgICAvLyBJbnRlcm5hbCBBcHBcbiAgICBDaXJjdWxhckRlcGVuZGVuY3lEZXRlY3RlZCA9ICdDaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkLicsXG4gICAgSW52YWxpZE1vZHVsZURlZmluaXRpb24gPSAnVGhlIG1vZHVsZSBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZEV4cG9ydERlZmluaXRpb24gPSAnVGhlIGV4cG9ydCBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbiA9ICdUaGUgcHJvdmlkZXIgaXMgaW52YWxpZC4nLFxuICAgIEludmFsaWRQYXJhbWV0ZXJEZWNvcmF0b3JVc2FnZSA9ICdFYWNoIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlaXIgaXRzIG93biBkZWNvcmF0b3IuJyxcbiAgICBSZXNwb25zZURlY29yYXRvck5vdEFsbG93ZWRPbkV2ZW50cyA9ICdUaGUgQFJlc3BvbnNlKCkgZGVjb3JhdG9yIGlzIG5vdCBhbGxvd2VkIG9uIGV2ZW50cy4nLFxuICAgIFBsYXllckRlY29yYXRvck5vdEFsbG93ZWRPbkNsaWVudEV2ZW50cyA9ICdUaGUgQFBsYXllcigpIGRlY29yYXRvciBpcyBub3QgYWxsb3dlZCBvbiBjbGllbnQgZXZlbnRzLicsXG5cbiAgICAvLyBUaW1lcnNcbiAgICBUaW1lck5hbWVNdXN0QmVTdHJpbmcgPSAnVGhlIHRpbWVyIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4nLFxufVxuIiwgImV4cG9ydCBlbnVtIEluamVjdGFibGVTY29wZSB7XG4gICAgUmVxdWVzdCA9ICdyZXF1ZXN0JyxcbiAgICBUcmFuc2llbnQgPSAndHJhbnNpZW50JyxcbiAgICBTaW5nbGV0b24gPSAnc2luZ2xldG9uJyxcbn1cbiIsICJleHBvcnQgZW51bSBSUENSZXN1bHRTdGF0dXMge1xuICAgIFN1Y2Nlc3MgPSAxLFxuICAgIFRpbWVvdXQgPSAyLFxuICAgIEhhbmRsZXJOb3RGb3VuZCA9IDMsXG4gICAgVW5rbm93biA9IDQsXG4gICAgQ2FuY2VsbGVkQnlHdWFyZCA9IDUsXG4gICAgSW52YWxpZEd1YXJkUmV0dXJuID0gNixcbiAgICBUb29NYW55UmVxdWVzdHMgPSA3LFxuICAgIFBsYXllckRpc2Nvbm5lY3RlZCA9IDgsXG4gICAgUGxheWVyTm90Rm91bmQgPSA5LFxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUlBDUmVzdWx0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSID0gJ0lOVEVSTkFMX0FQUF9DT05UQUlORVInO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9BUFBfQ09OVEFJTkVSID0gJ0dMT0JBTF9BUFBfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBBUFBfRU5WSVJPTUVOVCA9ICdBUFBfRU5WSVJPTUVOVCc7XG5cbmV4cG9ydCBjb25zdCBHTE9CQUxfR1VBUkRTID0gJ0dMT0JBTF9HVUFSRFMnO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9JTlRFUkNFUFRPUlMgPSAnR0xPQkFMX0lOVEVSQ0VQVE9SUyc7XG5leHBvcnQgY29uc3QgR0xPQkFMX1BJUEVTID0gJ0dMT0JBTF9QSVBFUyc7XG5leHBvcnQgY29uc3QgR0xPQkFMX0VSUk9SX0ZJTFRFUlMgPSAnR0xPQkFMX0VSUk9SX0ZJTFRFUlMnO1xuXG5leHBvcnQgY29uc3QgUExVR0lOUyA9ICdQTFVHSU5TJztcblxuZXhwb3J0IGNvbnN0IEVOQUJMRV9TSFVURE9XTl9IT09LUyA9ICdFTkFCTEVfU0hVVERPV05fSE9PS1MnO1xuZXhwb3J0IGNvbnN0IENPTlRBSU5FUl9PUFRJT05TID0gJ0NPTlRBSU5FUl9PUFRJT05TJztcbmV4cG9ydCBjb25zdCBMT0dfRVJST1JfU1RBQ0tUUkFDRSA9ICdMT0dfRVJST1JfU1RBQ0tUUkFDRSc7XG5cbmV4cG9ydCBjb25zdCBNQU5HT19MT0dfUFJFRklYID0gJ/Cfpa0nO1xuXG5leHBvcnQgY29uc3QgTUFOR09fUkVRVUVTVF9GQUNUT1JZID0gJ01BTkdPX1JFUVVFU1RfRkFDVE9SWSc7XG5leHBvcnQgY29uc3QgTUFOR09fUkVTUE9OU0VfRkFDVE9SWSA9ICdNQU5HT19SRVNQT05TRV9GQUNUT1JZJztcbmV4cG9ydCBjb25zdCBFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZID0gJ0VYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlknO1xuXG5leHBvcnQgY29uc3QgTVVMVElQTEFZRVJfU0VSVklDRSA9ICdNVUxUSVBMQVlFUl9TRVJWSUNFJztcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfVElNRU9VVDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdSUEMgY2FsbCB0aW1lZCBvdXQuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlRpbWVvdXQsXG59O1xuXG5leHBvcnQgY29uc3QgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdSUEMgaGFuZGxlciBub3QgZm91bmQuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLkhhbmRsZXJOb3RGb3VuZCxcbn07XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1VOS05PV046IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnVW5rbm93biBlcnJvci4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuVW5rbm93bixcbn07XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnUGxheWVyIGRpc2Nvbm5lY3RlZC4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuUGxheWVyRGlzY29ubmVjdGVkLFxufTtcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfUExBWUVSX05PVF9GT1VORDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdQbGF5ZXIgbm90IGZvdW5kLicgfSxcbiAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5QbGF5ZXJOb3RGb3VuZCxcbn07XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgSW50ZXJuYWxFdmVudFNlcnZpY2UsIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlksIE1BTkdPX1JFUVVFU1RfRkFDVE9SWSwgTVVMVElQTEFZRVJfU0VSVklDRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBQaXBlbGluZUhhbmRsZXIgfSBmcm9tICcuL3BpcGVsaW5lLmhhbmRsZXInO1xuaW1wb3J0IHR5cGUgeyBFdmVudE1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFVkVOVF9TRVJWSUNFLCBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCwgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBFeGVjdXRpb25Db250ZXh0QmFzZSwgTWFuZ29SZXNwb25zZUJhc2UsIHR5cGUgTWFuZ29SZXF1ZXN0QmFzZSB9IGZyb20gJy4uL3BpcGVsaW5lJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQ2FsbEhhbmRsZXIsIExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzQXN5bmNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvbnRyb2xsZXJGbG93SGFuZGxlciB9IGZyb20gJy4vY29udHJvbGxlci1mbG93LmhhbmRsZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlckV2ZW50SGFuZGxlciB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJpdmF0ZSByZWFkb25seSBhcHBFbnY6IEFwcEVudmlyb21lbnQ7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoRVZFTlRfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2U6IEludGVybmFsRXZlbnRTZXJ2aWNlO1xuICAgIEBpbmplY3QoQ29udHJvbGxlckZsb3dIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xsZXJGbG93SGFuZGxlcjogQ29udHJvbGxlckZsb3dIYW5kbGVyO1xuICAgIEBpbmplY3QoUGlwZWxpbmVIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lSGFuZGxlcjogUGlwZWxpbmVIYW5kbGVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAaW5qZWN0KE1BTkdPX1JFUVVFU1RfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVNYW5nb1JlcXVlc3Q6IChib2R5OiB1bmtub3duLCBwbGF5ZXI/OiBQbGF5ZXJNcCkgPT4gTWFuZ29SZXF1ZXN0QmFzZTtcbiAgICBAaW5qZWN0KEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlRXhlY3V0aW9uQ29udGV4dDogKFxuICAgICAgICB0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZSxcbiAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICAgICAgICByZXF1ZXN0OiBNYW5nb1JlcXVlc3RCYXNlLFxuICAgICAgICByZXNwb25zZT86IE1hbmdvUmVzcG9uc2VCYXNlLFxuICAgICAgICBuYW1lPzogc3RyaW5nLFxuICAgICkgPT4gRXhlY3V0aW9uQ29udGV4dEJhc2U7XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFdmVudChcbiAgICAgICAgZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgbWFwcGVkRXJyb3JGaWx0ZXJzOiBbYW55IHwgJ01BTkdPX0FOWV9FUlJPUicsIE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXJdW10sXG4gICAgICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICAgICAgIGV2ZW50OiBFdmVudE1ldGFkYXRhLFxuICAgICkge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ29uJyB8fCBldmVudC50eXBlID09PSAnb25jZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC5uYW1lLCBhc3luYyAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvbkludGVybmFsJyB8fCBldmVudC50eXBlID09PSAnb25jZUludGVybmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2AkJHtldmVudC50eXBlfWBdKGV2ZW50Lm5hbWUsIGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBwbGF5ZXIsIGJvZHkgfSA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLnBhcnNlSW50ZXJuYWxBcmdzPFBsYXllck1wPiguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUV2ZW50KGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBldmVudCwgYm9keSwgcGxheWVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvblBsYXllcicgfHwgZXZlbnQudHlwZSA9PT0gJ29uY2VQbGF5ZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2VbZXZlbnQudHlwZV0oZXZlbnQubmFtZSwgYXN5bmMgKHBsYXllciwgYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ29uU2VydmVyJyB8fCBldmVudC50eXBlID09PSAnb25jZVNlcnZlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC5uYW1lLCBhc3luYyAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvbldlYlZpZXcnIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlV2ViVmlldycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC53ZWJWaWV3SWQhLCBldmVudC5uYW1lLCBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IGFyZ3NbMV0gOiBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYXllciA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IDxQbGF5ZXJNcD5hcmdzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBldmVudC4nKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXZlbnRUeXBlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUV2ZW50KFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgZXZlbnQ6IEV2ZW50TWV0YWRhdGEsXG4gICAgICAgIGJvZHk6IHVua25vd24sXG4gICAgICAgIHBsYXllcj86IFBsYXllck1wLFxuICAgICkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5jcmVhdGVNYW5nb1JlcXVlc3QoYm9keSwgcGxheWVyKTtcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IHRoaXMuY3JlYXRlRXhlY3V0aW9uQ29udGV4dChcbiAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHRUeXBlLkV2ZW50LFxuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZixcbiAgICAgICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYucHJvdG90eXBlW2V2ZW50Lm1ldGhvZF0sXG4gICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXZlbnQubmFtZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hHdWFyZHMoZXhlY3V0aW9uQ29udGV4dCwgZ3VhcmRzLCBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcik7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYXdhaXQgdGhpcy5jb250cm9sbGVyRmxvd0hhbmRsZXIuY3JlYXRlQXJncyhjb250cm9sbGVyLCBleGVjdXRpb25Db250ZXh0LCBldmVudCwgcGlwZXMsIHBsYXllcik7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0aG9kID0gY29udHJvbGxlci5pbnN0YW5jZVtldmVudC5tZXRob2RdITtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGlzQXN5bmNGdW5jdGlvbihjb250cm9sbGVyTWV0aG9kKVxuICAgICAgICAgICAgICAgID8gKCk6IHVua25vd24gPT4gY29udHJvbGxlci5pbnN0YW5jZVtldmVudC5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKVxuICAgICAgICAgICAgICAgIDogKCk6IFByb21pc2U8dW5rbm93bj4gPT4gY29udHJvbGxlci5pbnN0YW5jZVtldmVudC5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxIYW5kbGVyOiBDYWxsSGFuZGxlciA9IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUsXG4gICAgICAgICAgICAgICAgcmV0dXJuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJldHVybiBhIHZhbHVlIGZyb20gYW4gZXZlbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFJldHVybkluRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Rocm91Z2hJbnRlcmNlcHRvcnMoZXhlY3V0aW9uQ29udGV4dCwgaW50ZXJjZXB0b3JzLCBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lciwgY2FsbEhhbmRsZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjYWxsSGFuZGxlci5oYW5kbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yR3JvdXAgPSBtYXBwZWRFcnJvckZpbHRlcnMuZmluZChcbiAgICAgICAgICAgICAgICAoW2Vycm9yVHlwZV0pID0+XG4gICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGVycm9yVHlwZSkgJiYgZXJyb3IgaW5zdGFuY2VvZiBlcnJvclR5cGUpIHx8IGVycm9yVHlwZSA9PT0gJ01BTkdPX0FOWV9FUlJPUicgfHwgZXJyb3IgPT09IGVycm9yVHlwZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaXNOaWwoZXJyb3JHcm91cCkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgID8gY29udHJvbGxlci5vd25lci5jb250YWluZXIuZ2V0KGVycm9yR3JvdXBbMV0pXG4gICAgICAgICAgICAgICAgOiBpc09iamVjdChlcnJvckdyb3VwWzFdKSAmJiBpc0Z1bmN0aW9uKGVycm9yR3JvdXBbMV1bJ2NhdGNoJ10pXG4gICAgICAgICAgICAgICAgICA/IGVycm9yR3JvdXBbMV1cbiAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIGVycm9yIGZpbHRlcnMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShpbnN0YW5jZS5jYXRjaC5jYWxsKGluc3RhbmNlLCBlcnJvciwgZXhlY3V0aW9uQ29udGV4dCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUlkKCkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KTtcbn1cbiIsICJleHBvcnQgY29uc3QgaXNVbmRlZmluZWQgPSAob2JqOiBhbnkpOiBvYmogaXMgdW5kZWZpbmVkID0+IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKGZuOiBhbnkpOiBmbiBpcyBvYmplY3QgPT4gIWlzTmlsKGZuKSAmJiB0eXBlb2YgZm4gPT09ICdvYmplY3QnO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb24gPSAodmFsOiBhbnkpOiB2YWwgaXMgRnVuY3Rpb24gPT4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBpc1N0cmluZyA9ICh2YWw6IGFueSk6IHZhbCBpcyBzdHJpbmcgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG5leHBvcnQgY29uc3QgaXNOdW1iZXIgPSAodmFsOiBhbnkpOiB2YWwgaXMgbnVtYmVyID0+IHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xuZXhwb3J0IGNvbnN0IGlzQ29uc3RydWN0b3IgPSAodmFsOiBhbnkpOiBib29sZWFuID0+IHZhbCA9PT0gJ2NvbnN0cnVjdG9yJztcbmV4cG9ydCBjb25zdCBpc05pbCA9ICh2YWw6IGFueSk6IHZhbCBpcyBudWxsIHwgdW5kZWZpbmVkID0+IGlzVW5kZWZpbmVkKHZhbCkgfHwgdmFsID09PSBudWxsO1xuZXhwb3J0IGNvbnN0IGlzRW1wdHkgPSAoYXJyYXk6IGFueSk6IGJvb2xlYW4gPT4gIShhcnJheSAmJiBhcnJheS5sZW5ndGggPiAwKTtcbmV4cG9ydCBjb25zdCBpc1N5bWJvbCA9ICh2YWw6IGFueSk6IHZhbCBpcyBzeW1ib2wgPT4gdHlwZW9mIHZhbCA9PT0gJ3N5bWJvbCc7XG5leHBvcnQgY29uc3QgaXNBc3luY0Z1bmN0aW9uID0gKHZhbDogYW55KTogYm9vbGVhbiA9PiBpc0Z1bmN0aW9uKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBc3luY0Z1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBpc0Jvb2xlYW4gPSAodmFsOiBhbnkpOiB2YWwgaXMgYm9vbGVhbiA9PiB0eXBlb2YgdmFsID09PSAnYm9vbGVhbic7XG5leHBvcnQgY29uc3QgaXNQcm9taXNlID0gPFQgPSBhbnk+KHZhbDogYW55KTogdmFsIGlzIFByb21pc2U8VD4gPT4gdmFsIGluc3RhbmNlb2YgUHJvbWlzZTtcbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBHdWFyZCwgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEd1YXJkQ2FuY2VsRXJyb3IsIEd1YXJkSW52YWxpZFJldHVybkVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dEJhc2UgfSBmcm9tICcuLi9waXBlbGluZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50TWV0YWRhdGEsIENhbGxIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4uL21vZHVsZSc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQaXBlbGluZUhhbmRsZXIge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICAvLyBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbENvbnRhaW5lcjogQ29udGFpbmVyO1xuXG4gICAgcHVibGljIGFzeW5jIGdvVHJvdWdoR3VhcmRzKGV4ZWN1dGlvbkNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLCBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcikge1xuICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIGd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKGd1YXJkKSA/IGNvbnRhaW5lci5nZXQoZ3VhcmQpIDogaXNPYmplY3QoZ3VhcmQpICYmIGlzRnVuY3Rpb24oZ3VhcmRbJ2NhbkFjdGl2YXRlJ10pID8gZ3VhcmQgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggZ3VhcmRzLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEd1YXJkRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYW5BY3RpdmF0ZSA9IGF3YWl0IGluc3RhbmNlLmNhbkFjdGl2YXRlLmNhbGwoaW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYW5BY3RpdmF0ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBndWFyZHMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEd1YXJkSW52YWxpZFJldHVybkVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEd1YXJkQ2FuY2VsRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnb1Rocm91Z2hJbnRlcmNlcHRvcnMoXG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHRCYXNlLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcixcbiAgICAgICAgY2FsbEhhbmRsZXI6IENhbGxIYW5kbGVyLFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIGludGVyY2VwdG9ycykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKGludGVyY2VwdG9yKVxuICAgICAgICAgICAgICAgID8gY29udGFpbmVyLmdldChpbnRlcmNlcHRvcilcbiAgICAgICAgICAgICAgICA6IGlzT2JqZWN0KGludGVyY2VwdG9yKSAmJiBpc0Z1bmN0aW9uKGludGVyY2VwdG9yWydpbnRlcmNlcHQnXSlcbiAgICAgICAgICAgICAgICAgID8gaW50ZXJjZXB0b3JcbiAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIGludGVyY2VwdG9ycy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcmNlcHRvckRlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgaW5zdGFuY2UuaW50ZXJjZXB0LmNhbGwoaW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQsIGNhbGxIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnb1Ryb3VnaFBpcGVzKFxuICAgICAgICB2YWx1ZTogdW5rbm93bixcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgYXJndW1lbnRNZXRhZGF0YTogQXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgY29udGFpbmVyOiBNb2R1bGVDb250YWluZXIsXG4gICAgKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKHBpcGUpID8gY29udGFpbmVyLmdldChwaXBlKSA6IGlzT2JqZWN0KHBpcGUpID8gcGlwZSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNOaWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBwaXBlcy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRQaXBlRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShpbnN0YW5jZS50cmFuc2Zvcm0uY2FsbChpbnN0YW5jZSwgdmFsdWUsIGFyZ3VtZW50TWV0YWRhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgY2xhc3MgTWFuZ29FcnJvcjxURGV0YWlscyA9IHVua25vd24+IGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBzdGF0dXM6IG51bWJlciA9IFJQQ1Jlc3VsdFN0YXR1cy5Vbmtub3duO1xuICAgIHB1YmxpYyBkZXRhaWxzOiBURGV0YWlscyB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1cz86IG51bWJlciwgZGV0YWlscz86IFREZXRhaWxzKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cyA/PyBSUENSZXN1bHRTdGF0dXMuVW5rbm93bjtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgTWFuZ29FcnJvciB9IGZyb20gJy4vbWFuZ28uZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgR3VhcmRDYW5jZWxFcnJvciBleHRlbmRzIE1hbmdvRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ1Byb2Nlc3MgY2FuY2VsbGVkIGJ5IHRoZSBndWFyZC4nLCBSUENSZXN1bHRTdGF0dXMuQ2FuY2VsbGVkQnlHdWFyZCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuL21hbmdvLmVycm9yJztcblxuZXhwb3J0IGNsYXNzIEd1YXJkSW52YWxpZFJldHVybkVycm9yIGV4dGVuZHMgTWFuZ29FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignR3VhcmQgcmV0dXJuZWQgYW4gaW52YWxpZCB2YWx1ZS4gRXhwZWN0ZWQgYm9vbGVhbi4nLCBSUENSZXN1bHRTdGF0dXMuSW52YWxpZEd1YXJkUmV0dXJuKTtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IExPR0dFUl9TRVJWSUNFID0gJ0xPR0dFUl9TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBFVkVOVF9TRVJWSUNFID0gJ0VWRU5UX1NFUlZJQ0UnO1xuZXhwb3J0IGNvbnN0IFJQQ19TRVJWSUNFID0gJ1JQQ19TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBNT0RVTEVfQ09OVEFJTkVSID0gJ01PRFVMRV9DT05UQUlORVInO1xuZXhwb3J0IGNvbnN0IFJFRkxFQ1RPUl9TRVJWSUNFID0gJ1JFRkxFQ1RPUl9TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBUSU1FUl9TRVJWSUNFID0gJ1RJTUVSX1NFUlZJQ0UnO1xuIiwgImV4cG9ydCBlbnVtIEFwcEVudmlyb21lbnQge1xuICAgIENsaWVudCxcbiAgICBTZXJ2ZXIsXG59XG4iLCAiZXhwb3J0IGVudW0gQ29yZU1ldGFkYXRhS2V5IHtcbiAgICAvLyBHZW5lcmFsXG4gICAgSW5qZWN0YWJsZSA9ICdtYW5nbzppbmplY3RhYmxlJyxcbiAgICBJbmplY3QgPSAnbWFuZ286aW5qZWN0JyxcbiAgICBNb2R1bGUgPSAnbWFuZ286bW9kdWxlJyxcbiAgICBHbG9iYWxNb2R1bGUgPSAnbWFuZ286Z2xvYmFsLW1vZHVsZScsXG4gICAgQ29udHJvbGxlciA9ICdtYW5nbzpjb250cm9sbGVyLW9wdGlvbnMnLFxuICAgIC8vIEV2ZW50cyAmIFJQQ1xuICAgIENvbnRyb2xsZXJFdmVudHMgPSAnbWFuZ286Y29udHJvbGxlci1ldmVudHMnLFxuICAgIENvbnRyb2xsZXJSUENzID0gJ21hbmdvOmNvbnRyb2xsZXItcnBjcycsXG4gICAgQ29udHJvbGxlclBhcmFtcyA9ICdtYW5nbzpjb250cm9sbGVyLXJwYy1wYXJhbXMnLFxuICAgIC8vIFBpcGVsaW5lXG4gICAgR3VhcmRzID0gJ21hbmdvOmd1YXJkcycsXG4gICAgSW50ZXJjZXB0b3JzID0gJ21hbmdvOmludGVyY2VwdG9ycycsXG4gICAgUGlwZXMgPSAnbWFuZ286cGlwZXMnLFxuICAgIC8vIEVycm9yXG4gICAgQ2F0Y2ggPSAnbWFuZ286Y2F0Y2gnLFxuICAgIEVycm9yRmlsdGVycyA9ICdtYW5nbzplcnJvci1maWx0ZXJzJyxcbiAgICAvL1xuICAgIFRpbWVycyA9ICdtYW5nbzp0aW1lcnMnLFxufVxuIiwgImV4cG9ydCBlbnVtIEV4ZWN1dGlvbkNvbnRleHRUeXBlIHtcbiAgICBFdmVudCA9ICdldmVudCcsXG4gICAgUlBDID0gJ3JwYycsXG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuaW1wb3J0IHR5cGUgeyBFdmVudE1ldGFkYXRhLCBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQaXBlbGluZUhhbmRsZXIgfSBmcm9tICcuL3BpcGVsaW5lLmhhbmRsZXInO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBBcHBFbnZpcm9tZW50IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlckZsb3dIYW5kbGVyIHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcml2YXRlIHJlYWRvbmx5IGFwcEVudjogQXBwRW52aXJvbWVudDtcbiAgICBAaW5qZWN0KFBpcGVsaW5lSGFuZGxlcikgcHJpdmF0ZSByZWFkb25seSBwaXBlbGluZUhhbmRsZXI6IFBpcGVsaW5lSGFuZGxlcjtcblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVBcmdzKFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0QmFzZSxcbiAgICAgICAgbWV0YWRhdGE6IFJQQ01ldGFkYXRhIHwgRXZlbnRNZXRhZGF0YSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgcGxheWVyPzogUGxheWVyTXAsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIG1ldGFkYXRhLnBhcmFtcy5tYXAoYXN5bmMgKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJndW1lbnRNZXRhZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcGFyYW0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFyYW0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbWV0YXR5cGU6IHBhcmFtLm1ldGF0eXBlLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gJ2JvZHknKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJvZHlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ3BhcmFtJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBQYXJhbVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAoPFJlY29yZDxzdHJpbmcsIHVua25vd24+PmV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5KVtwYXJhbS5kYXRhXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhlY3V0aW9uQ29udGV4dC5yZXF1ZXN0LmJvZHkpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5W3BhcmFtLmRhdGFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgWy4uLnBpcGVzLCAuLi4ocGFyYW0/LnBpcGVzID8/IFtdKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAncmVxdWVzdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmZhY3RvcnkocGFyYW0uZGF0YSwgZXhlY3V0aW9uQ29udGV4dCksXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdwbGF5ZXInICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBQbGF5ZXIgKFNlcnZlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kYXRhID8gcGxheWVyIVs8a2V5b2YgUGxheWVyTXA+cGFyYW0uZGF0YV0gOiBwbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBHdWFyZCwgSW50ZXJjZXB0b3IsIEVycm9yRmlsdGVyLCBUaW1lck1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJNZXRhZGF0YSwgRXZlbnRNZXRhZGF0YSwgTWV0aG9kUGFyYW1ldGVyLCBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCwgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIge1xuICAgIEBpbmplY3QoQVBQX0VOVklST01FTlQpIHByaXZhdGUgcmVhZG9ubHkgYXBwRW52OiBBcHBFbnZpcm9tZW50O1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyByZWFkKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPVxuICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxQaWNrPENvbnRyb2xsZXJNZXRhZGF0YSwgJ3ByZWZpeCc+PihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlciwgY2xhc3NSZWYpID8/XG4gICAgICAgICAgICA8UGljazxDb250cm9sbGVyTWV0YWRhdGEsICdwcmVmaXgnPj57fTtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoY2xhc3NSZWYpO1xuICAgICAgICBjb25zdCBycGNzID0gdGhpcy5nZXRSUENzKGNsYXNzUmVmKTtcbiAgICAgICAgY29uc3QgdGltZXJzID0gdGhpcy5nZXRUaW1lcnMoY2xhc3NSZWYpO1xuXG4gICAgICAgIHJldHVybiA8Q29udHJvbGxlck1ldGFkYXRhPntcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBjbGFzc1JlZixcbiAgICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICAgIHJwY3MsXG4gICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKGNsYXNzUmVmKSxcbiAgICAgICAgICAgIHRpbWVycyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV2ZW50cyhjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICBjb25zdCBldmVudHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPEV2ZW50TWV0YWRhdGFbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJFdmVudHMsIGNsYXNzUmVmLnByb3RvdHlwZSkgPz8gW107XG5cbiAgICAgICAgcmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPEV2ZW50TWV0YWRhdGE+e1xuICAgICAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRNZXRob2RQYXJhbXMoY2xhc3NSZWYsIGV2ZW50KSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKGNsYXNzUmVmLCBldmVudC5tZXRob2QpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSUENzKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IHJwY3MgPSBSZWZsZWN0LmdldE1ldGFkYXRhPFJQQ01ldGFkYXRhW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUlBDcywgY2xhc3NSZWYucHJvdG90eXBlKSA/PyBbXTtcblxuICAgICAgICByZXR1cm4gcnBjcy5tYXAoKHJwYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxSUENNZXRhZGF0YT57XG4gICAgICAgICAgICAgICAgLi4ucnBjLFxuICAgICAgICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRNZXRob2RQYXJhbXMoY2xhc3NSZWYsIHJwYyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiwgcnBjLm1ldGhvZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1ldGhvZFBhcmFtcyhjbGFzc1JlZjogTmV3YWJsZSwgbWV0YWRhdGE6IEV2ZW50TWV0YWRhdGEgfCBSUENNZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgY2xhc3NSZWYucHJvdG90eXBlLCBtZXRhZGF0YS5tZXRob2QpID8/IFtdO1xuXG4gICAgICAgIHBhcmFtcy5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgICAgIHBhcmFtcy5mb3JFYWNoKChwYXJhbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJhbS5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRQYXJhbWV0ZXJEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIChtZXRhZGF0YS50eXBlID09PSAnb24nIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvblBsYXllcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uSW50ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvblNlcnZlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uV2ViVmlldycgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2UnIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlUGxheWVyJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZUludGVybmFsJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZVNlcnZlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VXZWJWaWV3JykgJiZcbiAgICAgICAgICAgICAgICBwYXJhbS50eXBlID09PSAncmVzcG9uc2UnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBSZXNwb25zZVxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUmVzcG9uc2VEZWNvcmF0b3JOb3RBbGxvd2VkT25FdmVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAncGxheWVyJyAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5DbGllbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBQbGF5ZXIgKENsaWVudCkgLSBOb3QgYWxsb3dlZFxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEudHlwZSA9PT0gJ29uUGxheWVyUmVxdWVzdCcgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENOb3RBbGxvd2VkSW5DbGllbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS50eXBlID09PSAnb25TZXJ2ZXJSZXF1ZXN0JyAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ05vdEFsbG93ZWRJblNlcnZlcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChtZXRhZGF0YS50eXBlID09PSAnb25QbGF5ZXInIHx8IG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlUGxheWVyJykgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5vdEFsbG93ZWRJbkNsaWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChtZXRhZGF0YS50eXBlID09PSAnb25TZXJ2ZXInIHx8IG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlU2VydmVyJykgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5vdEFsbG93ZWRJblNlcnZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQaXBlbGluZSh0YXJnZXQ6IE5ld2FibGUgfCBvYmplY3QsIG1ldGhvZD86IHN0cmluZykge1xuICAgICAgICBjb25zdCBndWFyZHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8R3VhcmQ+W10+KENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEludGVyY2VwdG9yPltdPihDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG4gICAgICAgIGNvbnN0IHBpcGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPFBpcGU+W10+KENvcmVNZXRhZGF0YUtleS5QaXBlcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuICAgICAgICBjb25zdCBlcnJvckZpbHRlcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8RXJyb3JGaWx0ZXI+W10+KENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICByZXR1cm4geyBndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIGVycm9yRmlsdGVycyB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGltZXJzKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhPFRpbWVyTWV0YWRhdGFbXT4oQ29yZU1ldGFkYXRhS2V5LlRpbWVycywgY2xhc3NSZWYucHJvdG90eXBlKSA/PyBbXTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgSW50ZXJuYWxSUENTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgUlBDX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlksIE1BTkdPX1JFUVVFU1RfRkFDVE9SWSwgTUFOR09fUkVTUE9OU0VfRkFDVE9SWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc0FzeW5jRnVuY3Rpb24sIGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFBpcGVsaW5lSGFuZGxlciB9IGZyb20gJy4vcGlwZWxpbmUuaGFuZGxlcic7XG5pbXBvcnQgdHlwZSB7IFJQQ01ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcHBFbnZpcm9tZW50LCBFeGVjdXRpb25Db250ZXh0VHlwZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCB0eXBlIE1hbmdvUmVxdWVzdEJhc2UsIHR5cGUgTWFuZ29SZXNwb25zZUJhc2UgfSBmcm9tICcuLi9waXBlbGluZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IENhbGxIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgQ29udHJvbGxlckZsb3dIYW5kbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyLWZsb3cuaGFuZGxlcic7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyUlBDSGFuZGxlciB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJpdmF0ZSByZWFkb25seSBhcHBFbnY6IEFwcEVudmlyb21lbnQ7XG4gICAgQGluamVjdChSUENfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBycGNTZXJ2aWNlOiBJbnRlcm5hbFJQQ1NlcnZpY2U7XG4gICAgQGluamVjdChQaXBlbGluZUhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcGlwZWxpbmVIYW5kbGVyOiBQaXBlbGluZUhhbmRsZXI7XG4gICAgQGluamVjdChDb250cm9sbGVyRmxvd0hhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlckZsb3dIYW5kbGVyOiBDb250cm9sbGVyRmxvd0hhbmRsZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoTUFOR09fUkVRVUVTVF9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZU1hbmdvUmVxdWVzdDogKGRhdGE6IHVua25vd24sIHBsYXllcj86IFBsYXllck1wKSA9PiBNYW5nb1JlcXVlc3RCYXNlO1xuICAgIEBpbmplY3QoTUFOR09fUkVTUE9OU0VfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVNYW5nb1Jlc3BvbnNlOiAoKSA9PiBNYW5nb1Jlc3BvbnNlQmFzZTtcbiAgICBAaW5qZWN0KEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlRXhlY3V0aW9uQ29udGV4dDogKFxuICAgICAgICB0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZSxcbiAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICAgICAgICByZXF1ZXN0OiBNYW5nb1JlcXVlc3RCYXNlLFxuICAgICAgICByZXNwb25zZTogTWFuZ29SZXNwb25zZUJhc2UsXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICApID0+IEV4ZWN1dGlvbkNvbnRleHRCYXNlO1xuXG4gICAgcHVibGljIGFzeW5jIHJlZ2lzdGVyUlBDKFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgcnBjOiBSUENNZXRhZGF0YSxcbiAgICApIHtcbiAgICAgICAgaWYgKHJwYy50eXBlID09PSAnb25SZXF1ZXN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjU2VydmljZVtycGMudHlwZV0ocnBjLm5hbWUsIGFzeW5jIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocnBjLnR5cGUgPT09ICdvblBsYXllclJlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMubmFtZSwgYXN5bmMgKHBsYXllciwgYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJQQyhndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgcnBjLCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocnBjLnR5cGUgPT09ICdvblNlcnZlclJlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMubmFtZSwgYXN5bmMgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVSUEMoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIHJwYywgYm9keSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChycGMudHlwZSA9PT0gJ29uV2ViVmlld1JlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMud2ViVmlld0lkISwgcnBjLm5hbWUsIGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gYXJnc1sxXSA6IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgcGxheWVyID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gPFBsYXllck1wPmFyZ3NbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMsIGJvZHksIHBsYXllcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIFJQQy4nKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUlBDVHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSUEMoXG4gICAgICAgIGd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10sXG4gICAgICAgIGludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10sXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIG1hcHBlZEVycm9yRmlsdGVyczogW2FueSB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdLFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBycGM6IFJQQ01ldGFkYXRhLFxuICAgICAgICBib2R5OiB1bmtub3duLFxuICAgICAgICBwbGF5ZXI/OiBQbGF5ZXJNcCxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5jcmVhdGVNYW5nb1JlcXVlc3QoXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIgJiYgKHJwYy50eXBlID09PSAnb25QbGF5ZXJSZXF1ZXN0JyB8fCBycGMudHlwZSA9PT0gJ29uV2ViVmlld1JlcXVlc3QnKVxuICAgICAgICAgICAgICAgICAgICA/IHBsYXllclxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuY3JlYXRlTWFuZ29SZXNwb25zZSgpO1xuICAgICAgICAgICAgcmVzcG9uc2UuJG9uU2VuZCgoZGF0YSkgPT4gcmVzb2x2ZShkYXRhKSk7XG4gICAgICAgICAgICByZXNwb25zZS4kb25FcnJvcigoZXJyb3IpID0+IHJlc29sdmUoZXJyb3IpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSB0aGlzLmNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQoXG4gICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dFR5cGUuUlBDLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYsXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZi5wcm90b3R5cGVbcnBjLm1ldGhvZF0sXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBycGMubmFtZSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hHdWFyZHMoZXhlY3V0aW9uQ29udGV4dCwgZ3VhcmRzLCBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJncyA9IGF3YWl0IHRoaXMuY29udHJvbGxlckZsb3dIYW5kbGVyLmNyZWF0ZUFyZ3MoY29udHJvbGxlciwgZXhlY3V0aW9uQ29udGV4dCwgcnBjLCBwaXBlcywgcGxheWVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0aG9kID0gY29udHJvbGxlci5pbnN0YW5jZVtycGMubWV0aG9kXSE7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gaXNBc3luY0Z1bmN0aW9uKGNvbnRyb2xsZXJNZXRob2QpXG4gICAgICAgICAgICAgICAgICAgID8gKG9wdGlvbnM6IHsgc2VuZDogYm9vbGVhbiB9ID0geyBzZW5kOiB0cnVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udHJvbGxlci5pbnN0YW5jZVtycGMubWV0aG9kXSEuYXBwbHkoY29udHJvbGxlci5pbnN0YW5jZSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBhc3luYyAob3B0aW9uczogeyBzZW5kOiBib29sZWFuIH0gPSB7IHNlbmQ6IHRydWUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLmluc3RhbmNlW3JwYy5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsSGFuZGxlcjogQ2FsbEhhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOiAodmFsdWU6IHVua25vd24pID0+IHJlc3BvbnNlLnNlbmQodmFsdWUpLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29UaHJvdWdoSW50ZXJjZXB0b3JzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2FsbEhhbmRsZXIuaGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckdyb3VwID0gbWFwcGVkRXJyb3JGaWx0ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChbZXJyb3JUeXBlXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGVycm9yVHlwZSkgJiYgZXJyb3IgaW5zdGFuY2VvZiBlcnJvclR5cGUpIHx8IGVycm9yVHlwZSA9PT0gJ01BTkdPX0FOWV9FUlJPUicgfHwgZXJyb3IgPT09IGVycm9yVHlwZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChpc05pbChlcnJvckdyb3VwKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldChlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgICAgICA6IGlzT2JqZWN0KGVycm9yR3JvdXBbMV0pICYmIGlzRnVuY3Rpb24oZXJyb3JHcm91cFsxXVsnY2F0Y2gnXSlcbiAgICAgICAgICAgICAgICAgICAgICA/IGVycm9yR3JvdXBbMV1cbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGluc3RhbmNlLmNhdGNoLmNhbGwoaW5zdGFuY2UsIGVycm9yLCBleGVjdXRpb25Db250ZXh0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlck1ldGFkYXRhLCBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB0eXBlIHsgU2NyaXB0UlBDSGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlciB7XG4gICAgcHVibGljIG1ldGFkYXRhOiBDb250cm9sbGVyTWV0YWRhdGE7XG4gICAgcHVibGljIGluc3RhbmNlOiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH07XG4gICAgcHVibGljIG93bmVyOiBNb2R1bGU7XG4gICAgcHVibGljIGV2ZW50SGFuZGxlcnM6IFNjcmlwdEV2ZW50SGFuZGxlcltdID0gW107XG4gICAgcHVibGljIHJwY0hhbmRsZXJzOiBTY3JpcHRSUENIYW5kbGVyW10gPSBbXTtcbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiwgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU1ldGFkYXRhLCBFcnJvckZpbHRlciwgR3VhcmQsIEludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsYXNzUHJvdmlkZXIsIER5bmFtaWNNb2R1bGUsIExvZ2dlclNlcnZpY2UsIE1vZHVsZU9wdGlvbnMsIFBpcGUsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNTdHJpbmcsIGlzU3ltYm9sIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlTWV0YWRhdGFSZWFkZXIge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyByZWFkKG1vZHVsZTogTmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+KSB7XG4gICAgICAgIC8vIENsYXNzIHJlZmVyZW5jZVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihtb2R1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxSZXF1aXJlZDxNb2R1bGVPcHRpb25zPj4oQ29yZU1ldGFkYXRhS2V5Lk1vZHVsZSwgbW9kdWxlKSA/PyA8UmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz4+e307XG4gICAgICAgICAgICBjb25zdCBleHBvcnRUb2tlbnMgPSB0aGlzLmdldEV4cG9ydFRva2VucyhvcHRpb25zLmV4cG9ydHMpO1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdGVkUHJvdmlkZXJzID0gdGhpcy5zZXBhcmF0ZVByb3ZpZGVycyhvcHRpb25zLnByb3ZpZGVycywgZXhwb3J0VG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIDxNb2R1bGVNZXRhZGF0YT57XG4gICAgICAgICAgICAgICAgY29udHJvbGxlcnM6IG9wdGlvbnMuY29udHJvbGxlcnMsXG4gICAgICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0UGlwZWxpbmUobW9kdWxlKSxcbiAgICAgICAgICAgICAgICAuLi5zZXBhcmF0ZWRQcm92aWRlcnMsXG4gICAgICAgICAgICAgICAgY2xhc3NSZWY6IG1vZHVsZSxcbiAgICAgICAgICAgICAgICBnbG9iYWw6IFJlZmxlY3QuZ2V0TWV0YWRhdGE8Ym9vbGVhbj4oQ29yZU1ldGFkYXRhS2V5Lkdsb2JhbE1vZHVsZSwgbW9kdWxlKSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IG9wdGlvbnMuY29udGFpbmVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEeW5hbWljIG1vZHVsZVxuICAgICAgICBpZiAobW9kdWxlIGluc3RhbmNlb2YgUHJvbWlzZSkgbW9kdWxlID0gYXdhaXQgbW9kdWxlO1xuICAgICAgICBpZiAoISgnbW9kdWxlJyBpbiBtb2R1bGUpKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkTW9kdWxlRGVmaW5pdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IG1vZHVsZTogY2xhc3NSZWYsIGdsb2JhbCwgLi4ub3B0aW9ucyB9ID0gPFJlcXVpcmVkPER5bmFtaWNNb2R1bGU+Pm1vZHVsZTtcbiAgICAgICAgY29uc3QgZXhwb3J0VG9rZW5zID0gdGhpcy5nZXRFeHBvcnRUb2tlbnMob3B0aW9ucy5leHBvcnRzKTtcbiAgICAgICAgY29uc3Qgc2VwYXJhdGVkUHJvdmlkZXJzID0gdGhpcy5zZXBhcmF0ZVByb3ZpZGVycyhvcHRpb25zLnByb3ZpZGVycywgZXhwb3J0VG9rZW5zKTtcblxuICAgICAgICByZXR1cm4gPE1vZHVsZU1ldGFkYXRhPntcbiAgICAgICAgICAgIGNvbnRyb2xsZXJzOiBvcHRpb25zLmNvbnRyb2xsZXJzLFxuICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzLFxuICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiksXG4gICAgICAgICAgICAuLi5zZXBhcmF0ZWRQcm92aWRlcnMsXG4gICAgICAgICAgICBjbGFzc1JlZixcbiAgICAgICAgICAgIGdsb2JhbDogZ2xvYmFsID8/IGZhbHNlLFxuICAgICAgICAgICAgY29udGFpbmVyOiBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBpcGVsaW5lKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IGd1YXJkcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxHdWFyZD5bXT4oQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgY2xhc3NSZWYpID8/IFtdO1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8SW50ZXJjZXB0b3I+W10+KENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIGNsYXNzUmVmKSA/PyBbXTtcbiAgICAgICAgY29uc3QgcGlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8UGlwZT5bXT4oQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCBjbGFzc1JlZikgPz8gW107XG4gICAgICAgIGNvbnN0IGVycm9yRmlsdGVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxFcnJvckZpbHRlcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgY2xhc3NSZWYpID8/IFtdO1xuXG4gICAgICAgIHJldHVybiB7IGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgZXJyb3JGaWx0ZXJzIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRUb2tlbnMoZXhwb3J0czogUmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz5bJ2V4cG9ydHMnXSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tYXA8SW5qZWN0aW9uVG9rZW4+KChwcm92aWRlckV4cG9ydCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXJFeHBvcnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFSZWZsZWN0Lmhhc093bk1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCBwcm92aWRlckV4cG9ydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXhwb3J0RGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlckV4cG9ydDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcocHJvdmlkZXJFeHBvcnQpIHx8IGlzU3ltYm9sKHByb3ZpZGVyRXhwb3J0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlckV4cG9ydDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ3Byb3ZpZGUnIGluIHByb3ZpZGVyRXhwb3J0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyRXhwb3J0LnByb3ZpZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFeHBvcnREZWZpbml0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXBhcmF0ZVByb3ZpZGVycyhwcm92aWRlcnM6IFJlcXVpcmVkPE1vZHVsZU9wdGlvbnM+Wydwcm92aWRlcnMnXSwgZXhwb3J0VG9rZW5zOiBJbmplY3Rpb25Ub2tlbltdKSB7XG4gICAgICAgIHJldHVybiBwcm92aWRlcnNcbiAgICAgICAgICAgIC5tYXAoKHByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluamVjdGFibGVNZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8SW5qZWN0YWJsZU1ldGFkYXRhPihDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOaWwoaW5qZWN0YWJsZU1ldGFkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxDbGFzc1Byb3ZpZGVyPnsgcHJvdmlkZTogcHJvdmlkZXIsIHVzZUNsYXNzOiBwcm92aWRlciwgc2NvcGU6IGluamVjdGFibGVNZXRhZGF0YS5zY29wZSB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ3VzZUNsYXNzJyBpbiBwcm92aWRlciB8fCAndXNlVmFsdWUnIGluIHByb3ZpZGVyIHx8ICd1c2VGYWN0b3J5JyBpbiBwcm92aWRlciB8fCAndXNlRXhpc3RpbmcnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoYWNjLCBwcm92aWRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3J0VG9rZW5zLmluY2x1ZGVzKHByb3ZpZGVyLnByb3ZpZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2MuZXh0ZXJuYWxQcm92aWRlcnMuc2V0KHByb3ZpZGVyLnByb3ZpZGUsIHByb3ZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjYy5pbnRlcm5hbFByb3ZpZGVycy5zZXQocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsUHJvdmlkZXJzOiBuZXcgTWFwPEluamVjdGlvblRva2VuLCBFeGNsdWRlPFByb3ZpZGVyLCBOZXdhYmxlPj4oKSxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcnM6IG5ldyBNYXA8SW5qZWN0aW9uVG9rZW4sIEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+PigpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ29udGFpbmVyIGV4dGVuZHMgQ29udGFpbmVyIHt9XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNb2R1bGVDb250YWluZXIgfSBmcm9tICcuL21vZHVsZS1jb250YWluZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udHJvbGxlcnM6IENvbnRyb2xsZXJbXSA9IFtdO1xuICAgIHB1YmxpYyBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcjtcbiAgICBwdWJsaWMgcGFyZW50OiBNb2R1bGUgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIG1ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YTtcbiAgICBwdWJsaWMgaW5zdGFuY2U6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfTtcbiAgICBwdWJsaWMgcmVwZXRpdGl2ZUltcG9ydHM6IFNldDxNb2R1bGU+ID0gbmV3IFNldCgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVOQUJMRV9TSFVURE9XTl9IT09LUywgR0xPQkFMX0VSUk9SX0ZJTFRFUlMsIEdMT0JBTF9HVUFSRFMsIEdMT0JBTF9JTlRFUkNFUFRPUlMsIEdMT0JBTF9QSVBFUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUsIG9wdGlvbmFsIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IENvbnRyb2xsZXIsIENvbnRyb2xsZXJFdmVudEhhbmRsZXIsIENvbnRyb2xsZXJSUENIYW5kbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgVHJlZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwUnVudGltZSB7XG4gICAgQGluamVjdChDb250cm9sbGVyRXZlbnRIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50SGFuZGxlcjogQ29udHJvbGxlckV2ZW50SGFuZGxlcjtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJSUENIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHJwY0hhbmRsZXI6IENvbnRyb2xsZXJSUENIYW5kbGVyO1xuICAgIEBpbmplY3QoR0xPQkFMX0dVQVJEUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxHdWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdO1xuICAgIEBpbmplY3QoR0xPQkFMX0lOVEVSQ0VQVE9SUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxJbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdO1xuICAgIEBpbmplY3QoR0xPQkFMX1BJUEVTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW107XG4gICAgQGluamVjdChHTE9CQUxfRVJST1JfRklMVEVSUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxFcnJvckZpbHRlcnM6IChOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyKVtdO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAaW5qZWN0KEVOQUJMRV9TSFVURE9XTl9IT09LUykgQG9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBlbmFibGVTaHV0ZG93bkhvb2tzOiBib29sZWFuO1xuXG4gICAgcHVibGljIGFzeW5jIGJvb3QocmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4pIHtcbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIG1vZHVsZSwgY29udHJvbGxlcnMgYW5kIHByb3ZpZGVycy5cbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuaW5zdGFuY2UgPSBtb2R1bGUuY29udGFpbmVyLmdldDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+KG1vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZik7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoY29udHJvbGxlcikgPT4gKGNvbnRyb2xsZXIuaW5zdGFuY2UgPSBtb2R1bGUuY29udGFpbmVyLmdldDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+KGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBbLi4ubW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzLCAuLi5tb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnNdLmZvckVhY2goKFt0b2tlbl0pID0+XG4gICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5nZXQ8YW55Pih0b2tlbiksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBMb2cgbW9kdWxlIGxvYWRlZC5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35sb2FkZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJ1bkxpZmVjeWNsZU1ldGhvZChtb2R1bGUsICdvbk1vZHVsZUluaXQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZUluaXQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uQXBwQm9vdHN0cmFwJyk7XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgZXZlbnQgYW5kIHJwYyBsaXN0ZW5lcnMuXG4gICAgICAgIHJlc29sdmVkVHJlZS50cmF2ZXJzZSgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlclRpbWVycyhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGB+bHd+Q29udHJvbGxlciB+bGN+JHtjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd350aW1lcnMgYW5kIGxpc3RlbmVycyByZWdpc3RlcmVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNodXRkb3duKHJlc29sdmVkVHJlZTogVHJlZTxNb2R1bGU+KSB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZURlc3Ryb3knKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdiZWZvcmVBcHBTaHV0ZG93bicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyU2VydmljZSA9IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldDxUaW1lclNlcnZpY2U+KFRJTUVSX1NFUlZJQ0UpO1xuXG4gICAgICAgICAgICAgICAgLy8gRGVzdHJveSBhbGwgdGltZXJzLlxuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5ldmVyeXRpY2tzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5pbnRlcnZhbHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLnRpbWVvdXRzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcm9ucy5mb3JFYWNoKChjcm9uKSA9PiBjcm9uLnN0b3AoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5ldmVudEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJwY0hhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCB0aW1lcnMuXG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmV2ZXJ5dGlja3MuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmludGVydmFscy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UudGltZW91dHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmNyb25Kb2JzLmZvckVhY2goKGNyb25Kb2IpID0+IGNyb25Kb2Iuc3RvcCgpKTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgIC8vIHRoaXMuZXZlbnRTZXJ2aWNlLiRsb2NhbEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy5ldmVudFNlcnZpY2UuJGludGVybmFsSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLmV2ZW50U2VydmljZS4kcmVtb3RlSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbkFwcFNodXRkb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gY29udHJvbGxlci5vd25lcjtcbiAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5ldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IFsuLi50aGlzLmdsb2JhbEd1YXJkcywgLi4ubW9kdWxlLm1ldGFkYXRhLmd1YXJkcywgLi4uY29udHJvbGxlci5tZXRhZGF0YS5ndWFyZHMsIC4uLmV2ZW50Lmd1YXJkc107XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxJbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ldmVudC5waXBlc107XG4gICAgICAgICAgICBjb25zdCBtYXBwZWRFcnJvckZpbHRlcnMgPSB0aGlzLm1hcEVycm9yRmlsdGVycyhbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxFcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuZXZlbnRIYW5kbGVyLnJlZ2lzdGVyRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZXZlbnRIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnJwY3MuZm9yRWFjaChhc3luYyAocnBjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBndWFyZHMgPSBbLi4udGhpcy5nbG9iYWxHdWFyZHMsIC4uLm1vZHVsZS5tZXRhZGF0YS5ndWFyZHMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuZ3VhcmRzLCAuLi5ycGMuZ3VhcmRzXTtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLnJwYy5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ycGMucGlwZXNdO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkRXJyb3JGaWx0ZXJzID0gdGhpcy5tYXBFcnJvckZpbHRlcnMoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2xvYmFsRXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLm1vZHVsZS5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4uY29udHJvbGxlci5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ucnBjLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgdGhpcy5ycGNIYW5kbGVyLnJlZ2lzdGVyUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMpO1xuICAgICAgICAgICAgY29udHJvbGxlci5ycGNIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJUaW1lcnMoY29udHJvbGxlcjogQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB0aW1lclNlcnZpY2UgPSBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQ8VGltZXJTZXJ2aWNlPihUSU1FUl9TRVJWSUNFKTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnRpbWVycy5mb3JFYWNoKCh0aW1lcikgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVyLnR5cGUgPT09ICdjcm9uJykge1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcmVhdGVDcm9uSm9iKGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIub3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICdldmVyeXRpY2snKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUV2ZXJ5VGljayhjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUludGVydmFsKFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLm9wdGlvbnMudGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgdGltZXIubmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAndGltZW91dCcpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlVGltZW91dChjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm9wdGlvbnMudGltZW91dCwgdGltZXIubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwRXJyb3JGaWx0ZXJzKGVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyTWFwOiBbdW5rbm93biB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZXJyb3JGaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPGFueVtdPihDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIGZpbHRlcikgPz8gW107XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdNQU5HT19BTllfRVJST1InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05pbChmaWx0ZXJNYXAuZmluZCgoZmlsdGVyRXJyb3IpID0+IGZpbHRlckVycm9yWzBdID09PSBlcnJvcikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIG1hcCBlcnJvciBmaWx0ZXJzLicpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlck1hcC5wdXNoKFtlcnJvciwgZmlsdGVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyTWFwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kcyhcbiAgICAgICAgcmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4sXG4gICAgICAgIG1ldGhvZDogJ29uTW9kdWxlSW5pdCcgfCAnb25Nb2R1bGVEZXN0cm95JyB8ICdvbkFwcEJvb3RzdHJhcCcgfCAnYmVmb3JlQXBwU2h1dGRvd24nIHwgJ29uQXBwU2h1dGRvd24nLFxuICAgICkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kKG5vZGUudmFsdWUsIG1ldGhvZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kKFxuICAgICAgICBtb2R1bGU6IE1vZHVsZSxcbiAgICAgICAgbWV0aG9kOiAnb25Nb2R1bGVJbml0JyB8ICdvbk1vZHVsZURlc3Ryb3knIHwgJ29uQXBwQm9vdHN0cmFwJyB8ICdiZWZvcmVBcHBTaHV0ZG93bicgfCAnb25BcHBTaHV0ZG93bicsXG4gICAgKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgbW9kdWxlLmNvbnRyb2xsZXJzLm1hcChhc3luYyAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoY29udHJvbGxlci5pbnN0YW5jZSkgfHwgaXNOaWwoY29udHJvbGxlci5pbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2xsZXIuaW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10ubWFwKGFzeW5jIChbdG9rZW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbnN0YW5jZSA9IDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+bW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QocHJvdmlkZXJJbnN0YW5jZSkgfHwgaXNOaWwocHJvdmlkZXJJbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IHByb3ZpZGVySW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KG1vZHVsZS5pbnN0YW5jZSkgfHwgaXNOaWwobW9kdWxlLmluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgIGF3YWl0IG1vZHVsZS5pbnN0YW5jZVttZXRob2RdISgpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENPTlRBSU5FUl9PUFRJT05TLCBHTE9CQUxfQVBQX0NPTlRBSU5FUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgTU9EVUxFX0NPTlRBSU5FUiwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFRyZWUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVEZXBlbmRlbmN5QmluZGVyIHtcbiAgICBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAb3B0aW9uYWwoKSBAaW5qZWN0KENPTlRBSU5FUl9PUFRJT05TKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lck9wdGlvbnM/OiBpbnRlcmZhY2VzLkNvbnRhaW5lck9wdGlvbnM7XG5cbiAgICBwdWJsaWMgYXN5bmMgYmluZChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIgPSBuZXcgTW9kdWxlQ29udGFpbmVyKG1vZHVsZS5tZXRhZGF0YS5jb250YWluZXIgPz8gdGhpcy5jb250YWluZXJPcHRpb25zKTtcbiAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgZ2xvYmFsIGNvbnRhaW5lciB0byB0aGUgbW9kdWxlIGNvbnRhaW5lciwgc28gaXQgY2FuIGJlIHVzZWQgdG8gcmVzb2x2ZSBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLnBhcmVudCA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChtb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBnbG9iYWwsIHdlIHdhbnQgdG8gYmluZCBpdCB0byB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgICAgIGlmIChtb2R1bGUubWV0YWRhdGEuZ2xvYmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gQmluZCBleHRlcm5hbCBwcm92aWRlcnMgdG8gdGhlIGdsb2JhbCBjb250YWluZXIsIHNvIHRoZXkgY2FuIGJlIGluamVjdGVkIGluIG90aGVyIG1vZHVsZXMuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgcHJvdmlkZXJdIG9mIG1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgdGhpcy5nbG9iYWxBcHBDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBub3QgZ2xvYmFsLCB3ZSB3YW50IHRvIGJpbmQgaXQgdG8gaXRzIG93biBjb250YWluZXIuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9rZW4sIHByb3ZpZGVyXSBvZiBtb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUucGFyZW50Py5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gbW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbXBvcnRNb2R1bGUgb2YgbW9kdWxlLnJlcGV0aXRpdmVJbXBvcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3Rva2VuXSBvZiBpbXBvcnRNb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gaW1wb3J0TW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBpbnRlcm5hbCBwcm92aWRlcnMuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBwcm92aWRlcl0gb2YgbW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIGNvbnRhaW5lciB0byBpdHNlbGYgc28gaXQgY2FuIGJlIGluamVjdGVkLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKE1PRFVMRV9DT05UQUlORVIpLnRvQ29uc3RhbnRWYWx1ZShtb2R1bGUuY29udGFpbmVyKTtcblxuICAgICAgICAgICAgLy8gQmluZCBjb250cm9sbGVycyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBzZXJ2aWNlcyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKFRJTUVSX1NFUlZJQ0UpLnRvKFRpbWVyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgICAgICAgICAgIGB+bHd+TW9kdWxlIH5sYn4ke21vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZi5uYW1lfSB+bHd+ZGVwZW5kZW5jaWVzIGJpbmRlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kUHJvdmlkZXIocHJvdmlkZXI6IEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+LCBjb250YWluZXI6IENvbnRhaW5lcikge1xuICAgICAgICBpZiAoJ3VzZVZhbHVlJyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29udGFpbmVyLmJpbmQocHJvdmlkZXIucHJvdmlkZSkudG9Db25zdGFudFZhbHVlKHByb3ZpZGVyLnVzZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRmFjdG9yeScgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b0R5bmFtaWNWYWx1ZSgoY3R4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwcyA9XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLmluamVjdD8ubWFwKChkZXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChkZXApICYmICd0b2tlbicgaW4gZGVwICYmICdvcHRpb25hbCcgaW4gZGVwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jb250YWluZXIuZ2V0KGRlcC50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXAub3B0aW9uYWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlc29sdmUgYSBkZXBlbmRlbmN5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jb250YWluZXIuZ2V0KGRlcCk7XG4gICAgICAgICAgICAgICAgICAgIH0pID8/IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlci51c2VGYWN0b3J5KC4uLmRlcHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICd0cmFuc2llbnQnKSBiaW5kaW5nLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyLnNjb3BlID09PSAncmVxdWVzdCcpIGJpbmRpbmcuaW5SZXF1ZXN0U2NvcGUoKTtcbiAgICAgICAgICAgIGVsc2UgYmluZGluZy5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZUNsYXNzJyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvKHByb3ZpZGVyLnVzZUNsYXNzKTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3RyYW5zaWVudCcpIGJpbmRpbmcuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICdyZXF1ZXN0JykgYmluZGluZy5pblJlcXVlc3RTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBiaW5kaW5nLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRXhpc3RpbmcnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b1NlcnZpY2UocHJvdmlkZXIudXNlRXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgU2V0TWV0YWRhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzJztcbmltcG9ydCB0eXBlIHsgQ3JlYXRlRGVjb3JhdG9yT3B0aW9ucywgQ3JlYXRlRGVjb3JhdG9yV2l0aFRyYW5zZm9ybU9wdGlvbnMsIFJlZmxlY3RhYmxlRGVjb3JhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUlkLCBpc0VtcHR5LCBpc09iamVjdCB9IGZyb20gJy4uL3V0aWxzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZmxlY3RvclNlcnZpY2Uge1xuICAgIHB1YmxpYyBnZXQ8VFJlc3VsdCA9IHVua25vd24sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KG1ldGFkYXRhS2V5OiBUS2V5LCB0YXJnZXQ6IE5ld2FibGUgfCBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YTxUUmVzdWx0PihtZXRhZGF0YUtleSwgdGFyZ2V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsPFRSZXN1bHQgZXh0ZW5kcyB1bmtub3duW10gPSB1bmtub3duW10sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KFxuICAgICAgICBtZXRhZGF0YUtleTogVEtleSxcbiAgICAgICAgdGFyZ2V0czogKE5ld2FibGUgfCBGdW5jdGlvbilbXSxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIDxUUmVzdWx0Pih0YXJnZXRzIHx8IFtdKS5tYXAoKHRhcmdldCkgPT4gdGhpcy5nZXQobWV0YWRhdGFLZXksIHRhcmdldCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxBbmRNZXJnZTxUUmVzdWx0IGV4dGVuZHMgdW5rbm93bltdID0gdW5rbm93bltdLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihcbiAgICAgICAgbWV0YWRhdGFLZXk6IFRLZXksXG4gICAgICAgIHRhcmdldHM6IChOZXdhYmxlIHwgRnVuY3Rpb24pW10sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQ29sbGVjdGlvbiA9IHRoaXMuZ2V0QWxsPFRSZXN1bHQsIFRLZXk+KG1ldGFkYXRhS2V5LCB0YXJnZXRzKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKGlzRW1wdHkobWV0YWRhdGFDb2xsZWN0aW9uKSkgcmV0dXJuIDxUUmVzdWx0Pm1ldGFkYXRhQ29sbGVjdGlvbjtcblxuICAgICAgICByZXR1cm4gPFRSZXN1bHQ+bWV0YWRhdGFDb2xsZWN0aW9uLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoYSkgJiYgaXNPYmplY3QoYikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgICAgICAuLi5iLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2EsIGJdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsQW5kT3ZlcnJpZGU8VFJlc3VsdCA9IHVua25vd24sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KG1ldGFkYXRhS2V5OiBUS2V5LCB0YXJnZXRzOiAoTmV3YWJsZSB8IEZ1bmN0aW9uKVtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0KG1ldGFkYXRhS2V5LCB0YXJnZXQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gPFRSZXN1bHQ+cmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtPihvcHRpb25zPzogQ3JlYXRlRGVjb3JhdG9yT3B0aW9uczxUUGFyYW0+KTogUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtPjtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4oXG4gICAgICAgIG9wdGlvbnM6IENyZWF0ZURlY29yYXRvcldpdGhUcmFuc2Zvcm1PcHRpb25zPFRQYXJhbSwgVFRyYW5zZm9ybWVkPixcbiAgICApOiBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD47XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQgPSBUUGFyYW0+KFxuICAgICAgICBvcHRpb25zOiBDcmVhdGVEZWNvcmF0b3JPcHRpb25zPFRQYXJhbSwgVFRyYW5zZm9ybWVkPiA9IHt9LFxuICAgICk6IFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPiB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhS2V5ID0gb3B0aW9ucy5rZXkgPz8gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgICAgICBjb25zdCBkZWNvcmF0b3JGbiA9IChtZXRhZGF0YVZhbHVlOiBUUGFyYW0pID0+ICh0YXJnZXQ6IG9iamVjdCB8IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy50cmFuc2Zvcm0gPyBvcHRpb25zLnRyYW5zZm9ybShtZXRhZGF0YVZhbHVlKSA6IG1ldGFkYXRhVmFsdWU7XG4gICAgICAgICAgICBTZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdmFsdWUgPz8ge30pKHRhcmdldCwga2V5ISwgZGVzY3JpcHRvcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZGVjb3JhdG9yRm4uS0VZID0gbWV0YWRhdGFLZXk7XG4gICAgICAgIHJldHVybiBkZWNvcmF0b3JGbiBhcyBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD47XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUVycm9yRmlsdGVyPEVGIGV4dGVuZHMgRXJyb3JGaWx0ZXIgPSBFcnJvckZpbHRlcj4odmFsdWU6IEVGIHwgTmV3YWJsZTxFRj4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0Vycm9yIGZpbHRlciBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUucHJvdG90eXBlLmNhdGNoKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgaGF2ZSBhIGNhdGNoIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKCg8RXJyb3JGaWx0ZXI+dmFsdWUpLmNhdGNoKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgaGF2ZSBhIGNhdGNoIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGlwZSh2YWx1ZTogUGlwZSB8IE5ld2FibGU8UGlwZT4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpICYmICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQaXBlIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUudHJhbnNmb3JtKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBoYXZlIGEgdHJhbnNmb3JtIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKCg8UGlwZT52YWx1ZSkudHJhbnNmb3JtKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBoYXZlIGEgdHJhbnNmb3JtIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHdWFyZDxHIGV4dGVuZHMgR3VhcmQgPSBHdWFyZD4odmFsdWU6IEcgfCBOZXdhYmxlPEc+KSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxHdWFyZD52YWx1ZSkuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUludGVyY2VwdG9yPEkgZXh0ZW5kcyBJbnRlcmNlcHRvciA9IEludGVyY2VwdG9yPih2YWx1ZTogSSB8IE5ld2FibGU8ST4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNGdW5jdGlvbigoPEludGVyY2VwdG9yPnZhbHVlKS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEluamVjdGFibGVTY29wZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuY29uc3QgZGVmYXVsdEluamVjdGFibGVPcHRpb25zOiBJbmplY3RhYmxlT3B0aW9ucyA9IHsgc2NvcGU6IEluamVjdGFibGVTY29wZS5TaW5nbGV0b24gfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhKHZhbHVlPzogSW5qZWN0YWJsZU9wdGlvbnMpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2NvcGUnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IHsgLi4uZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCAuLi52YWx1ZSB9IH07XG4gICAgfVxuICAgIGlmICgnc2NvcGUnIGluIHZhbHVlICYmICFpc1N0cmluZyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgc2NvcGUgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG5cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhT2JqZWN0LnZhbHVlczxgJHtJbmplY3RhYmxlU2NvcGV9YD4oSW5qZWN0YWJsZVNjb3BlKS5pbmNsdWRlcyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0ludmFsaWQgaW5qZWN0YWJsZSBzY29wZScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb250cm9sbGVyPFQgZXh0ZW5kcyBOZXdhYmxlPihvcHRpb25zPzogQ29udHJvbGxlck9wdGlvbnMpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlciwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXIsIHZhbHVlLCB0YXJnZXQpO1xuXG4gICAgICAgIHJldHVybiBpbmplY3RhYmxlKCkodGFyZ2V0KTtcbiAgICB9O1xufVxuIiwgImltcG9ydCB7IGluamVjdCB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3Q8VCA9IHVua25vd24+KGtleT86IEluamVjdGlvblRva2VuPFQ+KSB7XG4gICAgcmV0dXJuIDxQcm9wZXJ0eURlY29yYXRvciAmIFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwYXJhbUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwoa2V5KSAmJiAhdmFsaWRhdGVJbmplY3Rpb25Ub2tlbihrZXkpLnZhbGlkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbmplY3Rpb25Ub2tlblNwZWNpZmllZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b2tlbiA9IGtleSA/PyBSZWZsZWN0LmdldE1ldGFkYXRhPEluamVjdGlvblRva2VuPignZGVzaWduOnR5cGUnLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbmplY3Rpb25Ub2tlbk5vdEZvdW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluamVjdCh0b2tlbikodGFyZ2V0LCBwcm9wZXJ0eUtleSwgcGFyYW1JbmRleCk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBJbmplY3RhYmxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3RhYmxlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEluamVjdGFibGU8VCBleHRlbmRzIE5ld2FibGU+KG9wdGlvbnM/OiBJbmplY3RhYmxlT3B0aW9ucykge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3RhYmxlTWV0YWRhdGEob3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkluamVjdGFibGUsIHZhbHVlLCB0YXJnZXQpO1xuXG4gICAgICAgIHJldHVybiBpbmplY3RhYmxlKCkodGFyZ2V0KTtcbiAgICB9O1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBNb2R1bGU8VCBleHRlbmRzIE5ld2FibGU+KG9wdGlvbnM/OiBNb2R1bGVPcHRpb25zKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5Lk1vZHVsZSwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlTW9kdWxlT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yISk7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5Lk1vZHVsZSwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICdpbnZlcnNpZnknO1xuXG5leHBvcnQgZnVuY3Rpb24gT3B0aW9uYWwoKSB7XG4gICAgcmV0dXJuIDxQcm9wZXJ0eURlY29yYXRvciAmIFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwYXJhbUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBvcHRpb25hbCgpKHRhcmdldCwgcHJvcGVydHlLZXksIHBhcmFtSW5kZXgpO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQ3VzdG9tRGVjb3JhdG9yIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2V0TWV0YWRhdGE8SyBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgViA9IHVua25vd24+KGtleTogSywgdmFsdWU6IFYpIHtcbiAgICBjb25zdCBkZWNvcmF0b3JGYWN0b3J5ID0gPEN1c3RvbURlY29yYXRvcj4oKHRhcmdldDogb2JqZWN0LCBfbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKGtleSwgdmFsdWUsIGRlc2NyaXB0b3IudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShrZXksIHZhbHVlLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xuICAgIGRlY29yYXRvckZhY3RvcnkuS0VZID0ga2V5O1xuICAgIHJldHVybiBkZWNvcmF0b3JGYWN0b3J5O1xufVxuIiwgImltcG9ydCB7IExhenlTZXJ2aWNlSWRlbnRpZmllciwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRSZWY8VCA9IHVua25vd24+KGZuOiAoKSA9PiBpbnRlcmZhY2VzLlNlcnZpY2VJZGVudGlmaWVyPFQ+KSB7XG4gICAgcmV0dXJuIG5ldyBMYXp5U2VydmljZUlkZW50aWZpZXI8VD4oZm4pO1xufSIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDcm9uLCB0eXBlIENyb25PcHRpb25zIH0gZnJvbSAnY3JvbmVyJztcbmltcG9ydCB7IE1VTFRJUExBWUVSX1NFUlZJQ0UsIHR5cGUgTXVsdGlwbGF5ZXJTZXJ2aWNlLCB0eXBlIE11bHRpcGxheWVyVGltZXIgfSBmcm9tICcuLi9hcHAnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGltZXJTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBNdWx0aXBsYXllclNlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkZXZlcnl0aWNrcyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGludGVydmFscyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJHRpbWVvdXRzID0gbmV3IE1hcDxzdHJpbmcsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkY3JvbnMgPSBuZXcgTWFwPHN0cmluZywgQ3Jvbj4oKTtcblxuICAgIHB1YmxpYyBnZXQgYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLmFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV2ZXJ5dGlja3MoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kZXZlcnl0aWNrcy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbnRlcnZhbHMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kaW50ZXJ2YWxzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpbWVvdXRzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJHRpbWVvdXRzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNyb25zKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJGNyb25zLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHdhcm5pbmdUaHJlc2hvbGQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMud2FybmluZ1RocmVzaG9sZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgd2FybmluZ1RocmVzaG9sZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy53YXJuaW5nVGhyZXNob2xkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUNyb25Kb2IoY2FsbGJhY2s6IEZ1bmN0aW9uLCBvcHRpb25zOiBDcm9uT3B0aW9ucyAmIHsgcGF0dGVybjogc3RyaW5nIHwgRGF0ZSB9KSB7XG4gICAgICAgIGNvbnN0IHsgcGF0dGVybiwgLi4uY3Jvbk9wdGlvbnMgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgY29uc3QgY3JvbiA9IENyb24ocGF0dGVybiwgY3Jvbk9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMubmFtZSkpIHRoaXMuJGNyb25zLnNldChvcHRpb25zLm5hbWUsIGNyb24pO1xuXG4gICAgICAgIHJldHVybiBjcm9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVJbnRlcnZhbChjYWxsYmFjazogRnVuY3Rpb24sIGludGVydmFsOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc2V0SW50ZXJ2YWwoY2FsbGJhY2ssIGludGVydmFsKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB0aGlzLiRpbnRlcnZhbHMuc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZW91dDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJHRpbWVvdXRzLnNldChuYW1lLCB0aW1lcik7XG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRXZlcnlUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgbmFtZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5ldmVyeVRpY2soY2FsbGJhY2spO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJGV2ZXJ5dGlja3Muc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodHlwZTogJ2Nyb24nIHwgJ2V2ZXJ5dGljaycgfCAndGltZW91dCcgfCAnaW50ZXJ2YWwnLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjcm9uJzpcbiAgICAgICAgICAgICAgICBjb25zdCBjcm9uSm9iID0gdGhpcy4kY3JvbnMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjcm9uSm9iKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyb25Kb2Iuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRjcm9ucy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXZlcnl0aWNrJzpcbiAgICAgICAgICAgICAgICBjb25zdCBldmVyeXRpY2sgPSB0aGlzLiRldmVyeXRpY2tzLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlcnl0aWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGljay5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGV2ZXJ5dGlja3MuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ludGVydmFsJzpcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMuJGludGVydmFscy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVydmFsLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW50ZXJ2YWxzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy4kdGltZW91dHMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0cy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5TmFtZSh0eXBlOiAnY3JvbicgfCAnZXZlcnl0aWNrJyB8ICd0aW1lb3V0JyB8ICdpbnRlcnZhbCcsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Nyb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRjcm9ucy5nZXQobmFtZSk7XG4gICAgICAgICAgICBjYXNlICdldmVyeXRpY2snOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRldmVyeXRpY2tzLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ2ludGVydmFsJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaW50ZXJ2YWxzLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiR0aW1lb3V0cy5nZXQobmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlJZChpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuZ2V0QnlJRChpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRpbWUobmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnRpbWUobmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRpbWVFbmQobmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnRpbWVFbmQobmFtZSk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgRHluYW1pY01vZHVsZSwgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZU1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBUcmVlLCBUcmVlTm9kZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlVHJlZVNjYW5uZXIge1xuICAgIEBpbmplY3QoTW9kdWxlTWV0YWRhdGFSZWFkZXIpIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlTWV0YWRhdGFSZWFkZXI6IE1vZHVsZU1ldGFkYXRhUmVhZGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcjogQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyBzY2FuKGNsYXNzUmVmOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4pIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gUmVhZCBtb2R1bGUgbWV0YWRhdGFcbiAgICAgICAgY29uc3QgbW9kdWxlTWV0YWRhdGEgPSBhd2FpdCB0aGlzLm1vZHVsZU1ldGFkYXRhUmVhZGVyLnJlYWQoY2xhc3NSZWYpO1xuICAgICAgICAvLyBDcmVhdGUgbW9kdWxlIGluc3RhbmNlIGFuZCBzZXQgbWV0YWRhdGEgdG8gaXRcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IE1vZHVsZSgpO1xuICAgICAgICBtb2R1bGUubWV0YWRhdGEgPSBtb2R1bGVNZXRhZGF0YTtcbiAgICAgICAgLy8gTG9nIG1vZHVsZSBpbmZvXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35zY2FubmVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBjb25zdCBtb2R1bGVUcmVlID0gbmV3IFRyZWUobW9kdWxlKTtcbiAgICAgICAgY29uc3Qgc2Nhbm5lZE1vZHVsZXMgPSBuZXcgTWFwPE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPiwgTW9kdWxlPigpO1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlc1xuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydGVkTW9kdWxlIG9mIG1vZHVsZU1ldGFkYXRhLmltcG9ydHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2Nhbk1vZHVsZXMobW9kdWxlVHJlZS5yb290LCBpbXBvcnRlZE1vZHVsZSwgc2Nhbm5lZE1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVUcmVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2Nhbk1vZHVsZXMoXG4gICAgICAgIHBhcmVudE5vZGU6IFRyZWVOb2RlPE1vZHVsZT4sXG4gICAgICAgIGNsYXNzUmVmOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sXG4gICAgICAgIHNjYW5uZWRNb2R1bGVzID0gbmV3IE1hcDxOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sIE1vZHVsZT4oKSxcbiAgICApIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgbW9kdWxlIGlzIGFscmVhZHkgaW1wb3J0ZWRcbiAgICAgICAgY29uc3Qgc2Nhbm5lZE1vZHVsZSA9IHNjYW5uZWRNb2R1bGVzLmdldChjbGFzc1JlZik7XG4gICAgICAgIGlmICghaXNOaWwoc2Nhbm5lZE1vZHVsZSkpIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUudmFsdWUucmVwZXRpdGl2ZUltcG9ydHMuYWRkKHNjYW5uZWRNb2R1bGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBSZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgICBjb25zdCBtb2R1bGVNZXRhZGF0YSA9IGF3YWl0IHRoaXMubW9kdWxlTWV0YWRhdGFSZWFkZXIucmVhZChjbGFzc1JlZik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgICAgICB0aGlzLmNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5KHBhcmVudE5vZGUudmFsdWUubWV0YWRhdGEsIG1vZHVsZU1ldGFkYXRhKTtcbiAgICAgICAgLy8gQ3JlYXRlIG1vZHVsZSBpbnN0YW5jZVxuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgTW9kdWxlKCk7XG4gICAgICAgIG1vZHVsZS5tZXRhZGF0YSA9IG1vZHVsZU1ldGFkYXRhO1xuICAgICAgICBtb2R1bGUucGFyZW50ID0gcGFyZW50Tm9kZS52YWx1ZTtcbiAgICAgICAgLy8gTG9nIG1vZHVsZSBpbmZvXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35zY2FubmVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBBZGQgbW9kdWxlIHRvIHRyZWVcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSBuZXcgVHJlZU5vZGUobW9kdWxlKTtcbiAgICAgICAgcGFyZW50Tm9kZS5hZGRDaGlsZCh0cmVlTm9kZSk7XG4gICAgICAgIC8vIEFkZCBtb2R1bGUgdG8gaW1wb3J0ZWQgbW9kdWxlcyBzZXQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzY2FubmluZ1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlcyByZWN1cnNpdmVseVxuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydE1vZHVsZSBvZiBtb2R1bGVNZXRhZGF0YS5pbXBvcnRzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNjYW5Nb2R1bGVzKHRyZWVOb2RlLCBpbXBvcnRNb2R1bGUsIHNjYW5uZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2NhbkNvbnRyb2xsZXJzKG1vZHVsZTogTW9kdWxlKSB7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnNcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0YWRhdGEgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlci5yZWFkKGNsYXNzUmVmKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YSA9IGNvbnRyb2xsZXJNZXRhZGF0YTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIgPSBtb2R1bGU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMucHVzaChjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fkNvbnRyb2xsZXIgfmxjfiR7Y2xhc3NSZWYubmFtZX0gfmx3fnNjYW5uZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5KHBhcmVudE1ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YSwgbW9kdWxlTWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHBhcmVudCBtb2R1bGUgaXMgaW1wb3J0ZWQgaW4gbW9kdWxlXG4gICAgICAgIGlmIChtb2R1bGVNZXRhZGF0YS5pbXBvcnRzLmluY2x1ZGVzKHBhcmVudE1ldGFkYXRhLmNsYXNzUmVmKSkge1xuICAgICAgICAgICAgLy8gdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzY2FubmluZyB0aGUgbW9kdWxlIHRyZWUuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkNpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJleHBvcnQgY2xhc3MgVHJlZU5vZGU8VD4ge1xuICAgIHB1YmxpYyB2YWx1ZTogVDtcbiAgICBwdWJsaWMgY2hpbGRyZW46IFRyZWVOb2RlPFQ+W107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENoaWxkKGNoaWxkOiBUcmVlTm9kZTxUPikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDaGlsZChjaGlsZDogVHJlZU5vZGU8VD4pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmVlPFQ+IHtcbiAgICBwdWJsaWMgcm9vdDogVHJlZU5vZGU8VD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy5yb290ID0gbmV3IFRyZWVOb2RlPFQ+KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhdmVyc2UoY2FsbGJhY2s6IChub2RlOiBUcmVlTm9kZTxUPikgPT4gdm9pZCkge1xuICAgICAgICBmdW5jdGlvbiB0cmF2ZXJzZU5vZGUobm9kZTogVHJlZU5vZGU8VD4pIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKHRyYXZlcnNlTm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0cmF2ZXJzZU5vZGUodGhpcy5yb290KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYXN5bmNUcmF2ZXJzZShjYWxsYmFjazogKG5vZGU6IFRyZWVOb2RlPFQ+KSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlOiBUcmVlTm9kZTxUPikge1xuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChub2RlLmNoaWxkcmVuLm1hcCh0cmF2ZXJzZU5vZGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRyYXZlcnNlTm9kZSh0aGlzLnJvb3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlOiBUcmVlTm9kZTxUPiwgZGVwdGg6IG51bWJlcikge1xuICAgICAgICAgICAgbGluZXMucHVzaChgJHsnLScucmVwZWF0KGRlcHRoICogMil9JHtub2RlLnZhbHVlfWApO1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gdHJhdmVyc2VOb2RlKGNoaWxkLCBkZXB0aCArIDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYXZlcnNlTm9kZSh0aGlzLnJvb3QsIDApO1xuICAgICAgICByZXN1bHQgPSBsaW5lcy5qb2luKCdcXG4nKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTWFuZ29SZXF1ZXN0QmFzZSB9IGZyb20gJy4vbWFuZ28tcmVxdWVzdC1iYXNlJztcbmltcG9ydCB0eXBlIHsgTWFuZ29SZXNwb25zZUJhc2UgfSBmcm9tICcuL21hbmdvLXJlc3BvbnNlLWJhc2UnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRXhlY3V0aW9uQ29udGV4dEJhc2U8XG4gICAgVFJlcXVlc3QgZXh0ZW5kcyBNYW5nb1JlcXVlc3RCYXNlID0gTWFuZ29SZXF1ZXN0QmFzZSxcbiAgICBUUmVzcG9uc2UgZXh0ZW5kcyBNYW5nb1Jlc3BvbnNlQmFzZSA9IE1hbmdvUmVzcG9uc2VCYXNlLFxuPiBpbXBsZW1lbnRzIEV4ZWN1dGlvbkNvbnRleHQ8VFJlcXVlc3QsIFRSZXNwb25zZT5cbntcbiAgICBwdWJsaWMgJHR5cGU6IEV4ZWN1dGlvbkNvbnRleHRUeXBlO1xuICAgIHB1YmxpYyAkY2xhc3NSZWY6IE5ld2FibGU7XG4gICAgcHVibGljICRoYW5kbGVyOiBGdW5jdGlvbjtcbiAgICBwdWJsaWMgJHJlcXVlc3Q6IFRSZXF1ZXN0O1xuICAgIHB1YmxpYyAkcmVzcG9uc2U/OiBUUmVzcG9uc2U7XG4gICAgcHVibGljICRuYW1lOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR0eXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xhc3NSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjbGFzc1JlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhbmRsZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWVzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJlc3BvbnNlITtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRuYW1lO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTWFuZ29SZXF1ZXN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNYW5nb1JlcXVlc3RCYXNlPFREYXRhID0gdW5rbm93bj4gaW1wbGVtZW50cyBNYW5nb1JlcXVlc3Qge1xuICAgIHB1YmxpYyAkYm9keTogVERhdGE7XG4gICAgcHVibGljICRwbGF5ZXI/OiBQbGF5ZXJNcDtcblxuICAgIHB1YmxpYyBnZXQgYm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGJvZHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGF5ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwbGF5ZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFJQQ0Vycm9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVzcG9uc2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hbmdvUmVzcG9uc2VCYXNlIGltcGxlbWVudHMgTWFuZ29SZXNwb25zZSB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSAkbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBwdWJsaWMgJHNlbmRMaXN0ZW5lcnM6IFNldDwoZGF0YTogdW5rbm93bikgPT4gdm9pZD4gPSBuZXcgU2V0KCk7XG4gICAgcHVibGljICRlcnJvckxpc3RlbmVyczogU2V0PChlcnJvcjogUlBDRXJyb3IpID0+IHZvaWQ+ID0gbmV3IFNldCgpO1xuICAgIHB1YmxpYyAkaXNTZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc2VuZDxURGF0YSA9IHVua25vd24+KGRhdGE/OiBURGF0YSkge1xuICAgICAgICBpZiAodGhpcy4kaXNTZW50KSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHRoZSBSUEMgcmVzcG9uc2UuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kc2VuZExpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoZGF0YSkpO1xuICAgICAgICB0aGlzLiRpc1NlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcnJvcjxURGV0YWlscyA9IHVua25vd24+KG1lc3NhZ2U6IHN0cmluZywgZGV0YWlscz86IFREZXRhaWxzKSB7XG4gICAgICAgIGlmICh0aGlzLiRpc1NlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgdGhlIFJQQyByZXNwb25zZS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDUmVzcG9uc2VBbHJlYWR5U2VudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZXJyb3JMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKHsgbWVzc2FnZSwgZGV0YWlscyB9KSk7XG4gICAgICAgIHRoaXMuJGlzU2VudCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljICRvblNlbmQobGlzdGVuZXI6IChkYXRhOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuJHNlbmRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgJG9uRXJyb3IobGlzdGVuZXI6IChlcnJvcjogUlBDRXJyb3IpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy4kZXJyb3JMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50RW1taXRlciwgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUV2ZW50U2VydmljZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkbG9jYWxIYW5kbGVyczogU2V0PFNjcmlwdEV2ZW50SGFuZGxlcj4gPSBuZXcgU2V0KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpbnRlcm5hbEhhbmRsZXJzOiBTZXQ8U2NyaXB0RXZlbnRIYW5kbGVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHJlbW90ZUhhbmRsZXJzOiBTZXQ8U2NyaXB0RXZlbnRIYW5kbGVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcm90ZWN0ZWQgJGludGVybmFsRXZlbnROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCAkZXZlbnRFbW1pdGVyOiBFdmVudEVtbWl0ZXIpIHt9XG5cbiAgICBwdWJsaWMgb248RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgY2FsbGJhY2s6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pOiBTY3JpcHRFdmVudEhhbmRsZXI7XG4gICAgcHVibGljIG9uPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPFNjcmlwdEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub24oZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG4gICAgcHVibGljIG9uY2U8RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgY2FsbGJhY2s6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbmNlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPik6IFNjcmlwdEV2ZW50SGFuZGxlcjtcbiAgICBwdWJsaWMgb25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxTY3JpcHRFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uY2UoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdDxFIGV4dGVuZHMga2V5b2YgVD4oZXZlbnROYW1lOiBFLCBib2R5PzogVFtFXSk6IHZvaWQ7XG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFLCBib2R5PzogdW5rbm93bik6IHZvaWQ7XG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFLCBib2R5PzogdW5rbm93bikge1xuICAgICAgICB0aGlzLiRldmVudEVtbWl0ZXIuZW1pdChldmVudE5hbWUsIGJvZHkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCAkb25JbnRlcm5hbChldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGlmICghdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzLmhhcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub24oZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgJG9uY2VJbnRlcm5hbChldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGlmICghdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzLmhhcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPFNjcmlwdEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub25jZShldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICB0aGlzLiRpbnRlcm5hbEhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBSUENSZXN1bHQsIFJQQ0NhbGxPcHRpb25zLCBTY3JpcHRSUENIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5ELCBSUENfUkVTVUxUX1RJTUVPVVQsIFJQQ19SRVNVTFRfVU5LTk9XTiB9IGZyb20gJy4uLy4uL2FwcC9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBNYW5nb0Vycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhc2VSUENTZXJ2aWNlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5ICRsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkVElNRU9VVCA9IDIwMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkbG9jYWxIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRSUENIYW5kbGVyPigpO1xuXG4gICAgcHVibGljIGFzeW5jIGNhbGw8RSBleHRlbmRzIGtleW9mIFQ+KFxuICAgICAgICBycGNOYW1lOiBFLFxuICAgICAgICBib2R5PzogUGFyYW1ldGVyczxUW0VdPlswXSxcbiAgICAgICAgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zLFxuICAgICk6IFByb21pc2U8UlBDUmVzdWx0PFJldHVyblR5cGU8VFtFXT4+PjtcbiAgICBwdWJsaWMgYXN5bmMgY2FsbDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zKTogUHJvbWlzZTxSUENSZXN1bHQ8dW5rbm93bj4+O1xuICAgIHB1YmxpYyBhc3luYyBjYWxsPEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuJGxvY2FsSGFuZGxlcnMuZ2V0KDxzdHJpbmc+cnBjTmFtZSk/LmhhbmRsZXI7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShSUENfUkVTVUxUX1RJTUVPVVQpO1xuICAgICAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0ID8/IHRoaXMuJFRJTUVPVVQpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoYm9keSk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUsIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlN1Y2Nlc3MsIGJvZHk6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNYW5nb0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogeyBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkZXRhaWxzOiBlcnJvci5kZXRhaWxzIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBvblJlcXVlc3Q8RSBleHRlbmRzIGtleW9mIFQ+KHJwY05hbWU6IEUsIGhhbmRsZXI6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0UlBDSGFuZGxlcjtcbiAgICBwdWJsaWMgb25SZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGhhbmRsZXI6IChib2R5OiB1bmtub3duKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPik6IFNjcmlwdFJQQ0hhbmRsZXI7XG4gICAgcHVibGljIG9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4pIHtcbiAgICAgICAgaWYgKHRoaXMuJGxvY2FsSGFuZGxlcnMuaGFzKHJwY05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgUlBDLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENIYW5kbGVyQWxyZWFkeUV4aXN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5kZWxldGUocnBjTmFtZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnBjTmFtZTogcnBjTmFtZSxcbiAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLiRsb2NhbEhhbmRsZXJzLnNldChycGNOYW1lLCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgdmFsaWRhdGVFcnJvckZpbHRlciwgdmFsaWRhdGVHdWFyZCwgdmFsaWRhdGVJbnRlcmNlcHRvciwgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vc2NoZW1hcy9ldmVudHMnO1xuaW1wb3J0IHtcbiAgICBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLFxuICAgIEdMT0JBTF9FUlJPUl9GSUxURVJTLFxuICAgIEdMT0JBTF9HVUFSRFMsXG4gICAgR0xPQkFMX0lOVEVSQ0VQVE9SUyxcbiAgICBHTE9CQUxfUElQRVMsXG4gICAgRU5BQkxFX1NIVVRET1dOX0hPT0tTLFxuICAgIFBMVUdJTlMsXG4gICAgR0xPQkFMX0FQUF9DT05UQUlORVIsXG4gICAgQVBQX0VOVklST01FTlQsXG4gICAgTUFOR09fUkVRVUVTVF9GQUNUT1JZLFxuICAgIE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlksXG4gICAgRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSxcbiAgICBDT05UQUlORVJfT1BUSU9OUyxcbiAgICBNVUxUSVBMQVlFUl9TRVJWSUNFLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3QsIENvbnRhaW5lciwgaW5qZWN0YWJsZSwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEFwcCB9IGZyb20gJy4vYXBwJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgTWFuZ29QbHVnaW4sIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgQ29udHJvbGxlckV2ZW50SGFuZGxlcixcbiAgICBDb250cm9sbGVyRmxvd0hhbmRsZXIsXG4gICAgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyLFxuICAgIENvbnRyb2xsZXJSUENIYW5kbGVyLFxuICAgIFBpcGVsaW5lSGFuZGxlcixcbn0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuL21vZHVsZSc7XG5pbXBvcnQgeyBBcHBSdW50aW1lLCBNb2R1bGVEZXBlbmRlbmN5QmluZGVyLCBNb2R1bGVUcmVlU2Nhbm5lciB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBFeGVjdXRpb25Db250ZXh0QmFzZSwgTWFuZ29SZXF1ZXN0QmFzZSwgTWFuZ29SZXNwb25zZUJhc2UgfSBmcm9tICcuL3BpcGVsaW5lJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB7IFJFRkxFQ1RPUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJlZmxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBCdWlsZGVyPEcgZXh0ZW5kcyBHdWFyZCA9IEd1YXJkLCBJIGV4dGVuZHMgSW50ZXJjZXB0b3IgPSBJbnRlcmNlcHRvciwgRUYgZXh0ZW5kcyBFcnJvckZpbHRlciA9IEVycm9yRmlsdGVyPiB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb21lbnQ6IHN0cmluZztcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByb3RlY3RlZCByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoUExVR0lOUykgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W107XG5cbiAgICBwcml2YXRlIGdsb2JhbENvbnRhaW5lck9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucyA9IHt9O1xuXG4gICAgcHVibGljIHVzZUdsb2JhbEd1YXJkcyguLi5ndWFyZHM6IChOZXdhYmxlPEc+IHwgRylbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRHdWFyZHM6IChOZXdhYmxlPEc+IHwgRylbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIGd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUd1YXJkKGd1YXJkKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRHdWFyZHMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0dVQVJEUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZEd1YXJkcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJPiB8IEkpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkSW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJPiB8IEkpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkSW50ZXJjZXB0b3JzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRJbnRlcmNlcHRvcnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsUGlwZXMoLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX1BJUEVTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkUGlwZXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsRmlsdGVycyguLi5maWx0ZXJzOiAoTmV3YWJsZTxFRj4gfCBFRilbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGSWx0ZXJzOiAoTmV3YWJsZTxFRj4gfCBFRilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlRXJyb3JGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRGSWx0ZXJzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkRklsdGVycyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VQbHVnaW5zKC4uLnBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W10pIHtcbiAgICAgICAgcGx1Z2lucy5mb3JFYWNoKChwKSA9PiB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQocCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxQbHVnaW5zID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQ8TmV3YWJsZTxNYW5nb1BsdWdpbj5bXT4oUExVR0lOUyk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIucmViaW5kKFBMVUdJTlMpLnRvQ29uc3RhbnRWYWx1ZShbLi4uaW50ZXJuYWxQbHVnaW5zLCAuLi5wbHVnaW5zXSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVTaHV0ZG93bkhvb2tzKCkge1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRU5BQkxFX1NIVVRET1dOX0hPT0tTKS50b0NvbnN0YW50VmFsdWUodHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb250YWluZXJPcHRpb25zKG9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucywgb25seUdsb2JhbCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29udGFpbmVyT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChvbmx5R2xvYmFsKSByZXR1cm4gdGhpcztcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENPTlRBSU5FUl9PUFRJT05TKS50b0NvbnN0YW50VmFsdWUob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBidWlsZCgpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsQXBwQ29udGFpbmVyID0gbmV3IENvbnRhaW5lcih0aGlzLmdsb2JhbENvbnRhaW5lck9wdGlvbnMpO1xuICAgICAgICAvLyBHTG9iYWwgc2VydmljZSBiaW5kaW5nc1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChSRUZMRUNUT1JfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKFJlZmxlY3RvclNlcnZpY2UpO1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChSZWZsZWN0b3JTZXJ2aWNlKS50b1NlcnZpY2UoUkVGTEVDVE9SX1NFUlZJQ0UpO1xuXG4gICAgICAgIC8vIE11bHRpcGxheWVyIHNlcnZpY2UgYmluZGluZ3NcbiAgICAgICAgZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoTVVMVElQTEFZRVJfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlKTtcbiBcbiAgICAgICAgLy8gQXBwIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChBcHApLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9BUFBfQ09OVEFJTkVSKS50b0NvbnN0YW50VmFsdWUoZ2xvYmFsQXBwQ29udGFpbmVyKTtcblxuICAgICAgICAvLyBNb2R1bGUgdHJlZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlVHJlZVNjYW5uZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZURlcGVuZGVuY3lCaW5kZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFwcFJ1bnRpbWUpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBBcHAgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFBpcGVsaW5lSGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIE1vZHVsZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGVNZXRhZGF0YVJlYWRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIENvbnRyb2xsZXIgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXIpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlckZsb3dIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyRXZlbnRIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyUlBDSGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIE1hbmdvIFJlcXVlc3QgYW5kIFJlc3BvbnNlIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNYW5nb1JlcXVlc3RCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNQU5HT19SRVFVRVNUX0ZBQ1RPUlkpLnRvRmFjdG9yeSgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChib2R5OiB1bmtub3duLCBwbGF5ZXI6IFBsYXllck1wKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNvbnRleHQuY29udGFpbmVyLmdldChNYW5nb1JlcXVlc3RCYXNlKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LiRib2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LiRwbGF5ZXIgPSBwbGF5ZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1hbmdvUmVzcG9uc2VCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNQU5HT19SRVNQT05TRV9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29udGFpbmVyLmdldChNYW5nb1Jlc3BvbnNlQmFzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEV4ZWN1dGlvbkNvbnRleHRCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdHlwZTogRXhlY3V0aW9uQ29udGV4dFR5cGUsXG4gICAgICAgICAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogTWFuZ29SZXF1ZXN0QmFzZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogTWFuZ29SZXNwb25zZUJhc2UsXG4gICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQuY29udGFpbmVyLmdldChFeGVjdXRpb25Db250ZXh0QmFzZSk7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kdHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kcmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kcmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRoYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRjbGFzc1JlZiA9IGNsYXNzUmVmO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJG5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRpb25Db250ZXh0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUGx1Z2lucyBiaW5kaW5nc1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnBsdWdpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChwbHVnaW4pLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQocGx1Z2luKTtcbiAgICAgICAgICAgIGlmICghcGx1Z2luSW5zdGFuY2Uub25CdWlsZCkgY29udGludWU7XG4gICAgICAgICAgICBhd2FpdCBwbHVnaW5JbnN0YW5jZS5vbkJ1aWxkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfR1VBUkRTKSkgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9HVUFSRFMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpKVxuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9QSVBFUykpIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfUElQRVMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKSlcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfRVJST1JfRklMVEVSUykudG9Db25zdGFudFZhbHVlKFtdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQoQXBwKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ29udGFpbmVyLCBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgTW9kdWxlRGVwZW5kZW5jeUJpbmRlciwgTW9kdWxlVHJlZVNjYW5uZXIgfSBmcm9tICcuL21vZHVsZS10cmVlJztcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gJy4vbW9kdWxlL21vZHVsZSc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLCBQTFVHSU5TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwUnVudGltZSB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1BsdWdpbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb3JlL21hbmdvLXBsdWdpbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBUcmVlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcCB7XG4gICAgQGluamVjdChNb2R1bGVUcmVlU2Nhbm5lcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVUcmVlU2Nhbm5lcjogTW9kdWxlVHJlZVNjYW5uZXI7XG4gICAgQGluamVjdChNb2R1bGVEZXBlbmRlbmN5QmluZGVyKSBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZURlcGVuZGVuY3lCaW5kZXI6IE1vZHVsZURlcGVuZGVuY3lCaW5kZXI7XG4gICAgQGluamVjdChBcHBSdW50aW1lKSBwcml2YXRlIHJlYWRvbmx5IGFwcFJ1bnRpbWU6IEFwcFJ1bnRpbWU7XG4gICAgQGluamVjdChJTlRFUk5BTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGludGVybmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChQTFVHSU5TKSBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W107XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgbW9kdWxlVHJlZTogVHJlZTxNb2R1bGU+O1xuICAgIHByaXZhdGUgbG9hZGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnQ8VD4ocm9vdE1vZHVsZTogTmV3YWJsZTxUPikge1xuICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgc3RhcnRpbmcgdGhlIGFwcC4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXBwQWxyZWFkeUxvYWRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flN0YXJ0aW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0YXJ0Jyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flNjYW5uaW5nIG1vZHVsZSB0cmVlLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYmVmb3JlU2NhbicpO1xuICAgICAgICB0aGlzLm1vZHVsZVRyZWUgPSBhd2FpdCB0aGlzLm1vZHVsZVRyZWVTY2FubmVyLnNjYW4ocm9vdE1vZHVsZSk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTY2FuJyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3fkJpbmRpbmcgbW9kdWxlIGRlcGVuZGVuY2llcy4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZUJpbmQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2R1bGVEZXBlbmRlbmN5QmluZGVyLmJpbmQodGhpcy5tb2R1bGVUcmVlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckJpbmQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+TG9hZGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVMb2FkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwUnVudGltZS5ib290KHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckxvYWQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+QXBwIGxvYWRlZCcpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTdGFydCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdG9wKCkge1xuICAgICAgICBpZiAoIXRoaXMubG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIHN0b3BwaW5nIHRoZSBhcHAuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkFwcE5vdExvYWRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVTdG9wJyk7XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35TdG9wcGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBSdW50aW1lLnNodXRkb3duKHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35BcHAgc3RvcHBlZCcpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyU3RvcCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuUGx1Z2luTWV0aG9kcyhtZXRob2Q6IGtleW9mIE1hbmdvUGx1Z2luKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KHApO1xuICAgICAgICAgICAgICAgIGlmICghcGx1Z2luW21ldGhvZF0pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBsdWdpblttZXRob2RdISgpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIElOVEVSTkFMX0FQUF9DT05UQUlORVIsIE1VTFRJUExBWUVSX1NFUlZJQ0UsIFBMVUdJTlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUGx1Z2luLCBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBBcHBFbnZpcm9tZW50IH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEFwcEJ1aWxkZXIgfSBmcm9tICcuL2FwcC1idWlsZGVyJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcEJ1aWxkZXI8VCBleHRlbmRzIEFwcEJ1aWxkZXI+KHtcbiAgICBlbnZpcm9tZW50LFxuICAgIHBsdWdpbnMsXG4gICAgYXBwQnVpbGRlckluaGVyaXQsXG4gICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLFxufToge1xuICAgIGVudmlyb21lbnQ6IEFwcEVudmlyb21lbnQ7XG4gICAgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcbiAgICBhcHBCdWlsZGVySW5oZXJpdDogTmV3YWJsZTxUPjtcbiAgICBtdWx0aXBsYXllclNlcnZpY2U/OiBNdWx0aXBsYXllclNlcnZpY2U7XG59KSB7XG4gICAgY29uc3QgaW50ZXJuYWxBcHBDb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7XG5cbiAgICBpZiAobXVsdGlwbGF5ZXJTZXJ2aWNlKSBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1VTFRJUExBWUVSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZShtdWx0aXBsYXllclNlcnZpY2UpO1xuICAgIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikudG9Db25zdGFudFZhbHVlKGludGVybmFsQXBwQ29udGFpbmVyKTtcbiAgICBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFQUF9FTlZJUk9NRU5UKS50b0NvbnN0YW50VmFsdWUoZW52aXJvbWVudCk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChQTFVHSU5TKS50b0NvbnN0YW50VmFsdWUocGx1Z2lucyk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChhcHBCdWlsZGVySW5oZXJpdCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgcmV0dXJuIGludGVybmFsQXBwQ29udGFpbmVyLmdldChhcHBCdWlsZGVySW5oZXJpdCk7XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEJhc2VSUENTZXJ2aWNlLCBFdmVudERlc3RpbmF0aW9uLCB0eXBlIFJQQ1BheWxvYWQsIFJQQ19SRVNVTFRfVElNRU9VVCB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHtcbiAgICBFcnJvck1lc3NhZ2UsXG4gICAgRVZFTlRfU0VSVklDRSxcbiAgICBnZW5lcmF0ZVJhbmRvbUlkLFxuICAgIHR5cGUgUlBDQ2FsbE9wdGlvbnMsXG4gICAgdHlwZSBSUENSZXN1bHQsXG4gICAgdHlwZSBTY3JpcHRSUENIYW5kbGVyLFxufSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBSUENTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsaWVudEV2ZW50U2VydmljZSB9IGZyb20gJy4vY2xpZW50LWV2ZW50LnNlcnZpY2UnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2xpZW50UlBDU2VydmljZSBleHRlbmRzIEJhc2VSUENTZXJ2aWNlPE1hbmdvUlBDLkN1c3RvbUNsaWVudFJQQz4gaW1wbGVtZW50cyBSUENTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KEVWRU5UX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJGV2ZW50U2VydmljZTogQ2xpZW50RXZlbnRTZXJ2aWNlO1xuICAgIHB1YmxpYyByZWFkb25seSAkc2VydmVySGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0UlBDSGFuZGxlcj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgJHdlYlZpZXdIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRSUENIYW5kbGVyPigpO1xuXG4gICAgcHVibGljIGFzeW5jIGNhbGxTZXJ2ZXI8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tQ2xpZW50VG9TZXJ2ZXJSUEM+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICAgICAgb3B0aW9uczogUlBDQ2FsbE9wdGlvbnMgPSB7IHRpbWVvdXQ6IHRoaXMuJFRJTUVPVVQgfSxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGhhbmRsZUNhbGwocnBjTmFtZSwgRXZlbnREZXN0aW5hdGlvbi5TZXJ2ZXIsIG9wdGlvbnMsIGJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlcnZlclJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyVG9DbGllbnRSUEM+LFxuICAgICAgICBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4sXG4gICAgKSB7XG4gICAgICAgIGlmICh0aGlzLiRzZXJ2ZXJIYW5kbGVycy5oYXMocnBjTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBSUEMuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kc2VydmVySGFuZGxlcnMuZGVsZXRlKHJwY05hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuJHNlcnZlckhhbmRsZXJzLnNldChycGNOYW1lLCBycGNIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIHJwY0hhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNhbGxXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBycGNOYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbUNsaWVudFRvV2Vidmlld1JQQz4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICAgICBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9LFxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlQ2FsbChycGNOYW1lLCBFdmVudERlc3RpbmF0aW9uLldlYlZpZXcsIG9wdGlvbnMsIGJvZHksIGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25XZWJWaWV3UmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgcnBjTmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9DbGllbnRSUEM+LFxuICAgICAgICBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke2lkfTo6JHtycGNOYW1lfWA7XG4gICAgICAgIGlmICh0aGlzLiR3ZWJWaWV3SGFuZGxlcnMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBSUEMuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJwY0hhbmRsZXIgPSB7XG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJHdlYlZpZXdIYW5kbGVycy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBycGNOYW1lLFxuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuJHdlYlZpZXdIYW5kbGVycy5zZXQoa2V5LCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jICRoYW5kbGVDYWxsPFRSZXN1bHQ+KFxuICAgICAgICBycGNOYW1lOiBzdHJpbmcsXG4gICAgICAgIGRlc3RpbmF0aW9uOiBFdmVudERlc3RpbmF0aW9uLCAvLyAnc2VydmVyJyB8ICd3ZWJ2aWV3JyxcbiAgICAgICAgb3B0aW9ucz86IFBhcnRpYWw8UlBDQ2FsbE9wdGlvbnM+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICAgICAgd2ViVmlld0lkPzogc3RyaW5nIHwgbnVtYmVyLFxuICAgICkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8UlBDUmVzdWx0PFRSZXN1bHQ+PigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FsbElkID0gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgICAgICAgICAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgICAgICAgICAgIGNvbnN0IG9uY2VIYW5kbGUgPSAocmVzdWx0RGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5yZXN1bHREYXRhKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBFeGFtcGxlOiBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8yMWV3ckVxLCBSUEM6OlJFVFVSTl9GUk9NX1dFQlZJRVdfdGVFcWQyXG4gICAgICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPVxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXdcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiRldmVudFNlcnZpY2Uub25jZVdlYlZpZXcod2ViVmlld0lkISwgYFJQQzo6UkVUVVJOX0ZST01fV0VCVklFV18ke2NhbGxJZH1gLCBvbmNlSGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJGV2ZW50U2VydmljZS5vbmNlU2VydmVyKGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2NhbGxJZH1gLCBvbmNlSGFuZGxlKTtcblxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZDogUlBDUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IEV2ZW50RGVzdGluYXRpb24uQ2xpZW50LFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICAgIGlkOiBjYWxsSWQsXG4gICAgICAgICAgICAgICAgcnBjTmFtZSxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIEV4YW1wbGU6IFJQQzo6Q0FMTF9TRVJWRVIsIFJQQzo6Q0FMTF9XRUJWSUVXXG4gICAgICAgICAgICBkZXN0aW5hdGlvbiA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3XG4gICAgICAgICAgICAgICAgPyB0aGlzLiRldmVudFNlcnZpY2UuZW1pdFdlYlZpZXcod2ViVmlld0lkISwgPHN0cmluZz4nUlBDOjpDQUxMX1dFQlZJRVcnLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgIDogdGhpcy4kZXZlbnRTZXJ2aWNlLmVtaXRTZXJ2ZXIoPHN0cmluZz4nUlBDOjpDQUxMX1NFUlZFUicsIHBheWxvYWQpO1xuXG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5SUENfUkVTVUxUX1RJTUVPVVQpO1xuICAgICAgICAgICAgfSwgb3B0aW9ucz8udGltZW91dCA/PyB0aGlzLiRUSU1FT1VUKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgIlxuaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgTE9HR0VSX1NFUlZJQ0UsIGlzTmlsLCB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBNdWx0aXBsYXllcldlYlZpZXcgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdlYlZpZXdMaXN0U2VydmljZSB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSAkbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgJHdlYlZpZXdzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBNdWx0aXBsYXllcldlYlZpZXc+ID0gbmV3IE1hcCgpO1xuXG4gICAgcHVibGljIHNldChpZDogc3RyaW5nIHwgbnVtYmVyLCB3ZWJWaWV3OiBNdWx0aXBsYXllcldlYlZpZXcpIHtcbiAgICAgICAgdGhpcy4kd2ViVmlld3Muc2V0KGlkLCB3ZWJWaWV3KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHdlYlZpZXdzLmdldChpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyeUdldChpZDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHdlYlZpZXcgPSB0aGlzLiR3ZWJWaWV3cy5nZXQoaWQpO1xuICAgICAgICBpZiAoaXNOaWwod2ViVmlldykgfHwgIXdlYlZpZXcudmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnZXQgYSBXZWJWaWV3LicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5XZWJWaWV3Tm90Rm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3ZWJWaWV3O1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICBjb25zdCB3ZWJWaWV3ID0gdGhpcy4kd2ViVmlld3MuZ2V0KGlkKTtcbiAgICAgICAgaWYgKHdlYlZpZXcpIHtcbiAgICAgICAgICAgIHdlYlZpZXcuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy4kd2ViVmlld3MuZGVsZXRlKGlkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgV0VCVklFV19MSVNUX1NFUlZJQ0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBXZWJWaWV3TGlzdFNlcnZpY2UgfSBmcm9tICcuL3dlYnZpZXctbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgaXNOdW1iZXIsIGlzU3RyaW5nLCBMT0dHRVJfU0VSVklDRSwgdHlwZSBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgV2ViVmlld1NlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHtcbiAgICBDbGllbnRNdWx0aXBsYXllclNlcnZpY2UsXG4gICAgTXVsdGlwbGF5ZXJXZWJWaWV3LFxuICAgIE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNEcmF3YWJsZSxcbiAgICBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zT3ZlcmxheSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9tdWx0aXBsYXllcic7XG5pbXBvcnQgeyBNVUxUSVBMQVlFUl9TRVJWSUNFIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDbGllbnRXZWJWaWV3U2VydmljZSBpbXBsZW1lbnRzIFdlYlZpZXdTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5ICRsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoV0VCVklFV19MSVNUX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJHdlYlZpZXdMaXN0U2VydmljZTogV2ViVmlld0xpc3RTZXJ2aWNlO1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsYXllcjogQ2xpZW50TXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGNyZWF0ZUxpc3RlbmVyczogKChpZDogc3RyaW5nIHwgbnVtYmVyLCB3ZWJWaWV3OiBNdWx0aXBsYXllcldlYlZpZXcpID0+IHZvaWQpW10gPSBbXTtcblxuICAgIHB1YmxpYyBjcmVhdGUoaWQ6IHN0cmluZyB8IG51bWJlciwgb3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXkpOiBNdWx0aXBsYXllcldlYlZpZXc7XG4gICAgcHVibGljIGNyZWF0ZShpZDogc3RyaW5nIHwgbnVtYmVyLCBvcHRpb25zOiBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zRHJhd2FibGUpOiBNdWx0aXBsYXllcldlYlZpZXc7XG4gICAgcHVibGljIGNyZWF0ZShcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgb3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXkgfCBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zRHJhd2FibGUsXG4gICAgKTogTXVsdGlwbGF5ZXJXZWJWaWV3IHtcbiAgICAgICAgaWYgKCFpc1N0cmluZyhpZCkgJiYgIWlzTnVtYmVyKGlkKSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBhIFdlYlZpZXcuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLldlYlZpZXdJZE11c3RCZVN0cmluZ09yTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdlYlZpZXcgPSB0aGlzLm11bHRpcGxheWVyLldlYlZpZXcuY3JlYXRlKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLiR3ZWJWaWV3TGlzdFNlcnZpY2Uuc2V0KGlkLCB3ZWJWaWV3KTtcbiAgICAgICAgdGhpcy4kY3JlYXRlTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihpZCwgd2ViVmlldykpO1xuICAgICAgICByZXR1cm4gd2ViVmlldztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHdlYlZpZXdMaXN0U2VydmljZS5nZXQoaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cnlHZXQoaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy4kd2ViVmlld0xpc3RTZXJ2aWNlLnRyeUdldChpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc3Ryb3koaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICBjb25zdCB3ZWJWaWV3ID0gdGhpcy4kd2ViVmlld0xpc3RTZXJ2aWNlLmdldChpZCk7XG4gICAgICAgIGlmICh3ZWJWaWV3KSB7XG4gICAgICAgICAgICB3ZWJWaWV3LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuJHdlYlZpZXdMaXN0U2VydmljZS5kZWxldGUoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljICRvbkNyZWF0ZShsaXN0ZW5lcjogKGlkOiBzdHJpbmcgfCBudW1iZXIsIHdlYlZpZXc6IE11bHRpcGxheWVyV2ViVmlldykgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLiRjcmVhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IElOVEVSTkFMX0FQUF9DT05UQUlORVIsIHR5cGUgTWFuZ29QbHVnaW4gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IEFERF9XRUJWSUVXLCBXRUJWSUVXX1NFUlZJQ0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBDbGllbnRMb2dnZXJTZXJ2aWNlLCBDbGllbnRXZWJWaWV3U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc0RyYXdhYmxlLCBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zT3ZlcmxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV2ViVmlld1BsdWdpbiBpbXBsZW1lbnRzIE1hbmdvUGx1Z2luIHtcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxBcHBDb250YWluZXI6IENvbnRhaW5lcjtcbiAgICBAaW5qZWN0KFdFQlZJRVdfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSB3ZWJWaWV3U2VydmljZTogQ2xpZW50V2ViVmlld1NlcnZpY2U7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBDbGllbnRMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGFzeW5jIGJlZm9yZUxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIGNvbnN0IGFkZFdlYlZpZXdzID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEFERF9XRUJWSUVXKVxuICAgICAgICAgICAgPyB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmdldDxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNEcmF3YWJsZSB8IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNPdmVybGF5O1xuICAgICAgICAgICAgICAgICAgfVtdXG4gICAgICAgICAgICAgID4oQUREX1dFQlZJRVcpXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAoYWRkV2ViVmlld3MubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgYWRkV2ViVmlld3MuZm9yRWFjaCgod2ViVmlldykgPT4ge1xuICAgICAgICAgICAgdGhpcy53ZWJWaWV3U2VydmljZS5jcmVhdGUod2ViVmlldy5pZCwgd2ViVmlldy5vcHRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fldlYlZpZXdzIGNyZWF0ZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QQ2xpZW50U2NyaXB0RXZlbnQgaW1wbGVtZW50cyBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQsXG4gICAgKSB7fVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSh0aGlzLmV2ZW50TmFtZSwgdGhpcy5saXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgdHlwZSB7IENsaWVudEV2ZW50RW1taXRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZXZlbnQnO1xuaW1wb3J0IHsgUmFnZU1QQ2xpZW50U2NyaXB0RXZlbnQgfSBmcm9tICcuL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlcic7XG5cbmV4cG9ydCBjbGFzcyBDbGllbnRSYWdlTVBFdmVudEVtbWl0ZXIgaW1wbGVtZW50cyBDbGllbnRFdmVudEVtbWl0ZXIge1xuICAgIHByaXZhdGUgbWFwRXZlbnRzU2hhcmVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAvLyBNYXAgYWx0OlYgZXZlbnQgbmFtZXMgdG8gUmFnZU1QIGVxdWl2YWxlbnRzXG4gICAgICAgICdlbnRpdHlDb2xTaGFwZUVudGVyJzogJ3BsYXllckVudGVyQ29sc2hhcGUnLFxuICAgICAgICAnZW50aXR5Q29sU2hhcGVMZWF2ZSc6ICdwbGF5ZXJFeGl0Q29sc2hhcGUnLFxuICAgICAgICAna2V5VXAnOiAna2V5dXAnLFxuICAgICAgICAna2V5RG93bic6ICdrZXlkb3duJyxcbiAgICAgICAgJ3BsYXllclZlaGljbGVFbnRlcmVkJzogJ3BsYXllckVudGVyVmVoaWNsZScsXG4gICAgICAgICdwbGF5ZXJWZWhpY2xlTGVmdCc6ICdwbGF5ZXJMZWF2ZVZlaGljbGUnLFxuICAgICAgICAncGxheWVyU3RhcnRWZWhpY2xlRW50ZXInOiAncGxheWVyU3RhcnRFbnRlclZlaGljbGUnLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1hcEV2ZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9KSB7fVxuXG4gICAgcHJpdmF0ZSBnZXRFdmVudE5hbWUoZXZlbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBFdmVudHNTaGFyZWRbZXZlbnROYW1lXSB8fCB0aGlzLm1hcEV2ZW50c1tldmVudE5hbWVdIHx8IGV2ZW50TmFtZTtcbiAgICB9XG5cbiAgICBlbWl0KGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMuY2FsbChldmVudE5hbWUsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBDbGllbnRTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBvbmNlKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgY29uc3Qgb25jZVdyYXBwZXIgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgICAgICBsaXN0ZW5lciguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBDbGllbnRTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBvZmYoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBlbWl0U2VydmVyKGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBJbiBSYWdlTVAsIHVzZSBtcC5ldmVudHMuY2FsbFJlbW90ZSB0byBzZW5kIGV2ZW50cyB0byBzZXJ2ZXJcbiAgICAgICAgbXAuZXZlbnRzLmNhbGxSZW1vdGUoZXZlbnROYW1lLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBvblNlcnZlcihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIC8vIEluIFJhZ2VNUCwgc2VydmVyIGV2ZW50cyBjb21lIHRocm91Z2ggbXAuZXZlbnRzLmFkZFxuICAgICAgICAvLyBFdmVudHMgZnJvbSBzZXJ2ZXIgYXJlIHJlY2VpdmVkIHRoZSBzYW1lIHdheSBhcyBsb2NhbCBldmVudHNcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBDbGllbnRTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBvbmNlU2VydmVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgY29uc3Qgb25jZVdyYXBwZXIgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgICAgICBsaXN0ZW5lciguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBDbGllbnRTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBvZmZTZXJ2ZXIoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBNdWx0aXBsYXllcldlYlZpZXcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL211bHRpcGxheWVyJztcblxuZXhwb3J0IGNsYXNzIFJhZ2VNUFdlYlZpZXcgaW1wbGVtZW50cyBNdWx0aXBsYXllcldlYlZpZXcge1xuICAgIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IE1hcDxzdHJpbmcsIFNldDwoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkPj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRyYXc6IEJyb3dzZXJNcCkge31cblxuICAgIHB1YmxpYyBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIFJhZ2VNUCBicm93c2VycyBkb24ndCBoYXZlIGEgJ3ZhbGlkJyBwcm9wZXJ0eSwgY2hlY2sgaWYgaXQgZXhpc3RzXG4gICAgICAgIHJldHVybiB0aGlzLiRyYXcgIT09IG51bGwgJiYgdGhpcy4kcmF3ICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuJHJhdy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhdy51cmw7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB1cmwodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLiRyYXcudXJsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmF3LmFjdGl2ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy4kcmF3LmFjdGl2ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGVtaXQoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICAvLyBJbiBSYWdlTVAsIHVzZSBicm93c2VyLmNhbGwoKSB0byBzZW5kIGV2ZW50cyB0byBDRUZcbiAgICAgICAgdGhpcy4kcmF3LmNhbGwoZXZlbnROYW1lLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBlbWl0UmF3KGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy4kcmF3LmNhbGwoZXZlbnROYW1lLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICByZWxvYWQoaWdub3JlQ2FjaGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy4kcmF3LnJlbG9hZChpZ25vcmVDYWNoZSk7XG4gICAgfVxuXG4gICAgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIC8vIEluIFJhZ2VNUCwgd2UgbmVlZCB0byBsaXN0ZW4gdGhyb3VnaCBtcC5ldmVudHMgZm9yIGJyb3dzZXIgZXZlbnRzXG4gICAgICAgIC8vIFdlJ2xsIGNyZWF0ZSBhIHdyYXBwZXIgdGhhdCBmaWx0ZXJzIGJ5IGJyb3dzZXIgaW5zdGFuY2VcbiAgICAgICAgaWYgKCF0aGlzLmV2ZW50TGlzdGVuZXJzLmhhcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnNldChldmVudE5hbWUsIG5ldyBTZXQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5nZXQoZXZlbnROYW1lKSEuYWRkKGxpc3RlbmVyKTtcblxuICAgICAgICAvLyBBZGQgYSBnbG9iYWwgZXZlbnQgbGlzdGVuZXIgaWYgdGhpcyBpcyB0aGUgZmlyc3QgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5ldmVudExpc3RlbmVycy5nZXQoZXZlbnROYW1lKSE7XG4gICAgICAgIGlmIChsaXN0ZW5lcnMuc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgbXAuZXZlbnRzLmFkZChldmVudE5hbWUsICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGwgb2YgbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGwoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbmNlKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbmNlV3JhcHBlciA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMub2ZmKGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICAgICAgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub24oZXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgfVxuXG4gICAgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmV2ZW50TGlzdGVuZXJzLmdldChldmVudE5hbWUpO1xuICAgICAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4ZWN1dGUoY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuJHJhdy5leGVjdXRlKGNvZGUpO1xuICAgIH1cblxuICAgIG1hcmtBc0NoYXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuJHJhdy5tYXJrQXNDaGF0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByYXcoKTogQnJvd3Nlck1wIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhdztcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIE11bHRpcGxheWVyV2ViVmlldyxcbiAgICBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zRHJhd2FibGUsXG4gICAgTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXksXG4gICAgTXVsdGlwbGF5ZXJXZWJWaWV3TWFuYWdlcixcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tdWx0aXBsYXllcic7XG5pbXBvcnQgeyBSYWdlTVBXZWJWaWV3IH0gZnJvbSAnLi9yYWdlbXAtd2Vidmlldyc7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBXZWJWaWV3TWFuYWdlciBpbXBsZW1lbnRzIE11bHRpcGxheWVyV2ViVmlld01hbmFnZXIge1xuICAgIHByaXZhdGUgd2ViVmlld3M6IE1hcDxudW1iZXIsIFJhZ2VNUFdlYlZpZXc+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgaWRDb3VudGVyOiBudW1iZXIgPSAwO1xuXG4gICAgcHVibGljIGNyZWF0ZShvcHRpb25zOiBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zRHJhd2FibGUpOiBNdWx0aXBsYXllcldlYlZpZXc7XG4gICAgcHVibGljIGNyZWF0ZShvcHRpb25zOiBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zT3ZlcmxheSk6IE11bHRpcGxheWVyV2ViVmlldztcbiAgICBwdWJsaWMgY3JlYXRlKG9wdGlvbnM6IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNPdmVybGF5IHwgTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc0RyYXdhYmxlKTogTXVsdGlwbGF5ZXJXZWJWaWV3IHtcbiAgICAgICAgbGV0IHJhdzogQnJvd3Nlck1wO1xuXG4gICAgICAgIGlmICgnZHJhd2FibGUnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IHN1cHBvcnQgZHJhd2FibGUvdGV4dHVyZSB0YXJnZXRzIGRpcmVjdGx5IGxpa2UgYWx0OlZcbiAgICAgICAgICAgIC8vIFdlJ2xsIGNyZWF0ZSBhIHJlZ3VsYXIgYnJvd3NlciBhbmQgbG9nIGEgd2FybmluZ1xuICAgICAgICAgICAgbXAuY29uc29sZS5sb2dXYXJuaW5nKCdSYWdlTVAgZG9lcyBub3Qgc3VwcG9ydCBkcmF3YWJsZSBXZWJWaWV3cy4gQ3JlYXRpbmcgb3ZlcmxheSBicm93c2VyIGluc3RlYWQuJyk7XG4gICAgICAgICAgICByYXcgPSBtcC5icm93c2Vycy5uZXcob3B0aW9ucy51cmwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmF3ID0gbXAuYnJvd3NlcnMubmV3KG9wdGlvbnMudXJsKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJhdy5hY3RpdmUgPSBvcHRpb25zLnZpc2libGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3ZWJWaWV3ID0gbmV3IFJhZ2VNUFdlYlZpZXcocmF3KTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmlkQ291bnRlcisrO1xuICAgICAgICB0aGlzLndlYlZpZXdzLnNldChpZCwgd2ViVmlldyk7XG5cbiAgICAgICAgcmV0dXJuIHdlYlZpZXc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5SUQoaWQ6IG51bWJlcik6IE11bHRpcGxheWVyV2ViVmlldyB8IG51bGwge1xuICAgICAgICAvLyBSYWdlTVAgYnJvd3NlcnMgYXJlIHN0b3JlZCBpbiBtcC5icm93c2VycyBwb29sXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZmluZCBieSBJRCBvciByZXR1cm4gZnJvbSBvdXIgY2FjaGVcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy53ZWJWaWV3cy5nZXQoaWQpO1xuICAgICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5IHRvIGdldCBmcm9tIFJhZ2VNUCdzIGJyb3dzZXIgcG9vbFxuICAgICAgICBjb25zdCBicm93c2VyID0gbXAuYnJvd3NlcnMuYXQoaWQpO1xuICAgICAgICBpZiAoYnJvd3Nlcikge1xuICAgICAgICAgICAgY29uc3Qgd2ViVmlldyA9IG5ldyBSYWdlTVBXZWJWaWV3KGJyb3dzZXIpO1xuICAgICAgICAgICAgdGhpcy53ZWJWaWV3cy5zZXQoaWQsIHdlYlZpZXcpO1xuICAgICAgICAgICAgcmV0dXJuIHdlYlZpZXc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDbGllbnRFdmVudEVtbWl0ZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgQ2xpZW50TXVsdGlwbGF5ZXJTZXJ2aWNlLCBNdWx0aXBsYXllcldlYlZpZXdNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tdWx0aXBsYXllcic7XG5pbXBvcnQgeyBSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IENsaWVudFJhZ2VNUEV2ZW50RW1taXRlciB9IGZyb20gJy4vcmFnZW1wLWV2ZW50LWVtbWl0ZXInO1xuaW1wb3J0IHsgUmFnZU1QV2ViVmlld01hbmFnZXIgfSBmcm9tICcuL3JhZ2VtcC13ZWJ2aWV3LW1hbmFnZXInO1xuXG5leHBvcnQgY2xhc3MgQ2xpZW50UmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIGV4dGVuZHMgUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIGltcGxlbWVudHMgQ2xpZW50TXVsdGlwbGF5ZXJTZXJ2aWNlIHtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgRXZlbnRzOiBDbGllbnRFdmVudEVtbWl0ZXI7XG4gICAgcHVibGljIFdlYlZpZXc6IE11bHRpcGxheWVyV2ViVmlld01hbmFnZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5FdmVudHMgPSBuZXcgQ2xpZW50UmFnZU1QRXZlbnRFbW1pdGVyKCk7XG4gICAgICAgIHRoaXMuV2ViVmlldyA9IG5ldyBSYWdlTVBXZWJWaWV3TWFuYWdlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdWRpb0ZhY3RvcnkoX2ZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGF1ZGlvIGZhY3RvcnkgbGlrZSBhbHQ6VlxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdWRpb0ZpbHRlckZhY3RvcnkoX2ZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGF1ZGlvIGZpbHRlciBmYWN0b3J5XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1ZGlvT3V0cHV0QXR0YWNoZWRGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBhdWRpbyBvdXRwdXQgYXR0YWNoZWQgZmFjdG9yeVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdWRpb091dHB1dEZyb250ZW5kRmFjdG9yeShfZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgYXVkaW8gb3V0cHV0IGZyb250ZW5kIGZhY3RvcnlcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXVkaW9PdXRwdXRXb3JsZEZhY3RvcnkoX2ZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGF1ZGlvIG91dHB1dCB3b3JsZCBmYWN0b3J5XG4gICAgfVxuXG4gICAgcHVibGljIHNldEJsaXBGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5CbGlwKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLkJsaXAucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRNYXJrZXJGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5NYXJrZXIpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuTWFya2VyLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q29sc2hhcGVGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5Db2xzaGFwZSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5Db2xzaGFwZS5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldENoZWNrcG9pbnRGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5DaGVja3BvaW50KSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLkNoZWNrcG9pbnQucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRPYmplY3RGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5PYmplY3QpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuT2JqZWN0LnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9jYWxPYmplY3RGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBMb2NhbE9iamVjdCBsaWtlIGFsdDpWXG4gICAgfVxuXG4gICAgcHVibGljIHNldFBlZEZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLlBlZCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5QZWQucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRMb2NhbFBlZEZhY3RvcnkoX2ZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIExvY2FsUGVkIGxpa2UgYWx0OlZcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9jYWxQbGF5ZXJGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBMb2NhbFBsYXllciBmYWN0b3J5IC0gdXNlIG1wLnBsYXllcnMubG9jYWxcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9jYWxWZWhpY2xlRmFjdG9yeShfZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgTG9jYWxWZWhpY2xlIGxpa2UgYWx0OlZcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGxheWVyRmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuUGxheWVyKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlBsYXllci5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFJtbERvY3VtZW50RmFjdG9yeShfZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgUm1sRG9jdW1lbnQgbGlrZSBhbHQ6VlxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUZXh0TGFiZWxGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5UZXh0TGFiZWwpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuVGV4dExhYmVsLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmVoaWNsZUZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLlZlaGljbGUpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuVmVoaWNsZS5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkoX2ZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIFZpcnR1YWxFbnRpdHlHcm91cFxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5RmFjdG9yeShfZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgVmlydHVhbEVudGl0eVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRXZWJTb2NrZXRDbGllbnRGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBXZWJTb2NrZXRDbGllbnQgZmFjdG9yeVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRXZWJWaWV3RmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuQnJvd3Nlcikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5Ccm93c2VyLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgVXNlRmlsdGVycyBhcyAkVXNlRmlsdGVycywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICByZXR1cm4gJFVzZUZpbHRlcnMoLi4uZmlsdGVycyk7XG59XG4iLCAiaW1wb3J0IHsgT25JbnRlcm5hbCwgT25jZUludGVybmFsIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IElOVEVSTkFMX0VWRU5UUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblNjcmlwdFJQQygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU0NSSVBUX1JQQyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUEMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TQ1JJUFRfUlBDX0FOU1dFUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUENfQU5TV0VSKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbktleUJvYXJkRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLktFWUJPQVJEX0VWRU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VLZXlCb2FyZEV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLktFWUJPQVJEX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbktleVVwKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5LRVlfVVApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUtleVVwKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLktFWV9VUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25LZXlEb3duKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5LRVlfRE9XTik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlS2V5RG93bigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5LRVlfRE9XTik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldFQl9WSUVXX0VWRU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV0VCX1ZJRVdfRVZFTlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViU29ja2V0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldFQl9TT0NLRVRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlNvY2tldEV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldFQl9TT0NLRVRfRVZFTlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQXVkaW9FdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQVVESU9fRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUF1ZGlvRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQVVESU9fRVZFTlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUm1sdWlFdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUk1MVUlfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJtbHVpRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUk1MVUlfRVZFTlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uV2luZG93Rm9jdXNDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldJTkRPV19GT0NVU19DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVdpbmRvd0ZvY3VzQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldJTkRPV19GT0NVU19DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uV2luZG93UmVzb2x1dGlvbkNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV0lORE9XX1JFU09MVVRJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXaW5kb3dSZXNvbHV0aW9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldJTkRPV19SRVNPTFVUSU9OX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25uZWN0aW9uQ29tcGxldGUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNPTk5FQ1RJT05fQ09NUExFVEUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUNvbm5lY3Rpb25Db21wbGV0ZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05ORUNUSU9OX0NPTVBMRVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkRpc2Nvbm5lY3QoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkRJU0NPTk5FQ1QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZURpc2Nvbm5lY3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRElTQ09OTkVDVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25TcGF3bmVkKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TUEFXTkVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VTcGF3bmVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNQQVdORUQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uR2FtZUVudGl0eUNyZWF0ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0FNRV9FTlRJVFlfQ1JFQVRFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VHYW1lRW50aXR5Q3JlYXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdBTUVfRU5USVRZX0NSRUFURSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25HYW1lRW50aXR5RGVzdHJveSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0FNRV9FTlRJVFlfREVTVFJPWSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlR2FtZUVudGl0eURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0FNRV9FTlRJVFlfREVTVFJPWSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlIaXRFbnRpdHkoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9ISVRfRU5USVRZKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlIaXRFbnRpdHkoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0hJVF9FTlRJVFkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVGFza0NoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVEFTS19DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVRhc2tDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVEFTS19DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyV2VhcG9uU2hvb3QoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9XRUFQT05fU0hPT1QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllcldlYXBvblNob290KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9XRUFQT05fU0hPT1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyQnVsbGV0SGl0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfQlVMTEVUX0hJVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyQnVsbGV0SGl0KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9CVUxMRVRfSElUKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcldlYXBvbkNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1dFQVBPTl9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllcldlYXBvbkNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfV0VBUE9OX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTdGFydFZlaGljbGVFbnRlcigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NUQVJUX1ZFSElDTEVfRU5URVIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN0YXJ0VmVoaWNsZUVudGVyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN0YXJ0VmVoaWNsZUxlYXZlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1RBUlRfVkVISUNMRV9MRUFWRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyU3RhcnRWZWhpY2xlTGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NUQVJUX1ZFSElDTEVfTEVBVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyVmVoaWNsZUVudGVyZWQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVFbnRlcmVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyVmVoaWNsZUxlZnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0xFRlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVMZWZ0KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0xFRlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX1NFQVRfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJWZWhpY2xlU2VhdENoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfVkVISUNMRV9TRUFUX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Wb2ljZUNvbm5lY3Rpb24oKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZPSUNFX0NPTk5FQ1RJT04pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVZvaWNlQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WT0lDRV9DT05ORUNUSU9OKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN0YXJ0VGFsa2luZygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NUQVJUX1RBTEtJTkcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN0YXJ0VGFsa2luZygpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1RBUlRfVEFMS0lORyk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTdG9wVGFsa2luZygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NUT1BfVEFMS0lORyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyU3RvcFRhbGtpbmcoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NUT1BfVEFMS0lORyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldvcmxkT2JqZWN0UG9zaXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldPUkxEX09CSkVDVF9QT1NJVElPTl9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVdvcmxkT2JqZWN0UG9zaXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV09STERfT0JKRUNUX1BPU0lUSU9OX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Xb3JsZE9iamVjdFN0cmVhbUluKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XT1JMRF9PQkpFQ1RfU1RSRUFNX0lOKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXb3JsZE9iamVjdFN0cmVhbUluKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldPUkxEX09CSkVDVF9TVFJFQU1fSU4pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uV29ybGRPYmplY3RTdHJlYW1PdXQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldPUkxEX09CSkVDVF9TVFJFQU1fT1VUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXb3JsZE9iamVjdFN0cmVhbU91dCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XT1JMRF9PQkpFQ1RfU1RSRUFNX09VVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkJhc2VPYmplY3RDcmVhdGUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkJBU0VfT0JKRUNUX0NSRUFURSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQmFzZU9iamVjdENyZWF0ZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5CQVNFX09CSkVDVF9DUkVBVEUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQmFzZU9iamVjdFJlbW92ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfUkVNT1ZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VCYXNlT2JqZWN0UmVtb3ZlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkJBU0VfT0JKRUNUX1JFTU9WRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25OZXRPd25lckNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTkVUX09XTkVSX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTmV0T3duZXJDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTkVUX09XTkVSX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25XZWFwb25EYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldFQVBPTl9EQU1BR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYXBvbkRhbWFnZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XRUFQT05fREFNQUdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbk1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLk1FVEFfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLk1FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkxvY2FsTWV0YUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTE9DQUxfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUxvY2FsTWV0YUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25TeW5jZWRNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU1lOQ0VEX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25HbG9iYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HTE9CQUxfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DT0xfU0hBUEVfRU5URVIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NPTF9TSEFQRV9MRUFWRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0xFQVZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfRU5URVIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfTEVBVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQ29sU2hhcGVFdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09MX1NIQVBFX0VWRU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb2xTaGFwZUV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNPTF9TSEFQRV9FVkVOVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OU09MRV9DT01NQU5EKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05TT0xFX0NPTU1BTkQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVSUk9SKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FUlJPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Mb2NhbFNjcmlwdEV2ZW50KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9TQ1JJUFRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUxvY2FsU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTE9DQUxfU0NSSVBUX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblJlbW90ZVNjcmlwdEV2ZW50KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRU1PVEVfU0NSSVBUX0VWRU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VSZW1vdGVTY3JpcHRFdmVudCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRU1PVEVfU0NSSVBUX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblJlc291cmNlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFU09VUkNFX1NUQVJUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VSZXNvdXJjZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFU09VUkNFX1NUQVJUKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblJlc291cmNlU3RvcCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RPUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFU09VUkNFX1NUT1ApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVzb3VyY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfRVJST1IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlc291cmNlRXJyb3IoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfRVJST1IpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uU2VydmVyPEUgZXh0ZW5kcyBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PihldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uU2VydmVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9QbGF5ZXJFdmVudD4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25TZXJ2ZXI8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50Pikge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25TZXJ2ZXInLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uV2ViVmlldyBhcyAkT25XZWJWaWV3IH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlldzxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvQ2xpZW50RXZlbnQ+KGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9DbGllbnRFdmVudD4sXG4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvQ2xpZW50RXZlbnQ+KSB7XG4gICAgcmV0dXJuICRPbldlYlZpZXcoaWQsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgT24gYXMgJE9uIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uPEUgZXh0ZW5kcyBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21DbGllbnRFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbUNsaWVudEV2ZW50Pik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbUNsaWVudEV2ZW50Pikge1xuICAgIHJldHVybiAkT24oZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2VydmVyPEUgZXh0ZW5kcyBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PihldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2VTZXJ2ZXI8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50Pik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2VydmVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9QbGF5ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uY2VTZXJ2ZXInLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uY2VXZWJWaWV3IGFzICRPbmNlV2ViVmlldyB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2ViVmlldzxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvQ2xpZW50RXZlbnQ+KGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlZpZXc8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb0NsaWVudEV2ZW50Pixcbik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb0NsaWVudEV2ZW50Pikge1xuICAgIHJldHVybiAkT25jZVdlYlZpZXcoaWQsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgT25jZSBhcyAkT25jZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlPEUgZXh0ZW5kcyBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21DbGllbnRFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tQ2xpZW50RXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2U8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21DbGllbnRFdmVudD4pIHtcbiAgICByZXR1cm4gJE9uY2UoZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBVc2VHdWFyZHMgYXMgJFVzZUd1YXJkcywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUd1YXJkcyguLi5ndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdKSB7XG4gICAgcmV0dXJuICRVc2VHdWFyZHMoLi4uZ3VhcmRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEludGVyY2VwdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBVc2VJbnRlcmNlcHRvcnMgYXMgJFVzZUludGVyY2VwdG9ycywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUludGVyY2VwdG9ycyguLi5pbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdKSB7XG4gICAgcmV0dXJuICRVc2VJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzKTtcbn1cbiIsICJpbXBvcnQgeyBPblJlcXVlc3QgYXMgJE9uUmVxdWVzdCB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblJlcXVlc3Q8RSBleHRlbmRzIGtleW9mIE1hbmdvUlBDLkN1c3RvbUNsaWVudFJQQz4ocnBjTmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25SZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbUNsaWVudFJQQz4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25SZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbUNsaWVudFJQQz4pIHtcbiAgICByZXR1cm4gJE9uUmVxdWVzdChycGNOYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVSUENEZWNvcmF0b3IgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25TZXJ2ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJUb0NsaWVudFJQQz4ocnBjTmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25TZXJ2ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbVNlcnZlclRvQ2xpZW50UlBDPik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblNlcnZlclJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyVG9DbGllbnRSUEM+KSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJQQ0RlY29yYXRvcignb25TZXJ2ZXJSZXF1ZXN0JywgcnBjTmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgT25XZWJWaWV3UmVxdWVzdCBhcyAkT25XZWJWaWV3UmVxdWVzdCB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9DbGllbnRSUEM+KGlkOiBzdHJpbmcgfCBudW1iZXIsIHJwY05hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlld1JlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9DbGllbnRSUEM+LFxuKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlld1JlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4oaWQ6IHN0cmluZyB8IG51bWJlciwgcnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvQ2xpZW50UlBDPikge1xuICAgIHJldHVybiAkT25XZWJWaWV3UmVxdWVzdChpZCwgcnBjTmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgQXBwQnVpbGRlciwgQXBwRW52aXJvbWVudCwgY3JlYXRlQXBwQnVpbGRlciBhcyAkY3JlYXRlQXBwQnVpbGRlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHsgQUREX1dFQlZJRVcgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFdmVudE1lZGlhdG9yUGx1Z2luLCBSUENQbHVnaW4sIFNlcnZpY2VCaW5kZXJQbHVnaW4sIFdlYlZpZXdQbHVnaW4gfSBmcm9tICcuL3BsdWdpbnMnO1xuaW1wb3J0IHR5cGUge1xuICAgIENsaWVudE11bHRpcGxheWVyU2VydmljZSxcbiAgICBFcnJvckZpbHRlcixcbiAgICBHdWFyZCxcbiAgICBJbnRlcmNlcHRvcixcbiAgICBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zRHJhd2FibGUsXG4gICAgTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXksXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDbGllbnRSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuL211bHRpcGxheWVyL3JhZ2VtcCc7XG5cbmNvbnN0IG11bHRpcGxheWVyU2VydmljZTogQ2xpZW50TXVsdGlwbGF5ZXJTZXJ2aWNlID0gbmV3IENsaWVudFJhZ2VNUE11bHRpcGxheWVyU2VydmljZSgpO1xuXG5jbGFzcyBDbGllbnRBcHBCdWlsZGVyIGV4dGVuZHMgQXBwQnVpbGRlcjxHdWFyZCwgSW50ZXJjZXB0b3IsIEVycm9yRmlsdGVyPiB7XG4gICAgcHVibGljIGFkZFdlYlZpZXcoaWQ6IHN0cmluZyB8IG51bWJlciwgb3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc0RyYXdhYmxlKTogQ2xpZW50QXBwQnVpbGRlcjtcbiAgICBwdWJsaWMgYWRkV2ViVmlldyhpZDogc3RyaW5nIHwgbnVtYmVyLCBvcHRpb25zOiBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zT3ZlcmxheSk6IENsaWVudEFwcEJ1aWxkZXI7XG4gICAgcHVibGljIGFkZFdlYlZpZXcoaWQ6IHN0cmluZyB8IG51bWJlciwgb3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXkpIHtcbiAgICAgICAgY29uc3QgYWRkV2ViVmlld3MgPSB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoQUREX1dFQlZJRVcpXG4gICAgICAgICAgICA/IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0PFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc0RyYXdhYmxlIHwgTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXk7XG4gICAgICAgICAgICAgICAgICB9W11cbiAgICAgICAgICAgICAgPihBRERfV0VCVklFVylcbiAgICAgICAgICAgIDogW107XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoQUREX1dFQlZJRVcpKSB7XG4gICAgICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLnJlYmluZChBRERfV0VCVklFVykudG9Db25zdGFudFZhbHVlKFsuLi5hZGRXZWJWaWV3cywgeyBpZCwgb3B0aW9ucyB9XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQUREX1dFQlZJRVcpLnRvQ29uc3RhbnRWYWx1ZShbeyBpZCwgb3B0aW9ucyB9XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1ZGlvRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRBdWRpb0ZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1ZGlvRmlsdGVyRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRBdWRpb0ZpbHRlckZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1ZGlvT3V0cHV0QXR0YWNoZWRGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldEF1ZGlvT3V0cHV0QXR0YWNoZWRGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdWRpb091dHB1dEZyb250ZW5kRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRBdWRpb091dHB1dEZyb250ZW5kRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXVkaW9PdXRwdXRXb3JsZEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0QXVkaW9PdXRwdXRXb3JsZEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEJsaXBGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldEJsaXBGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRNYXJrZXJGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldE1hcmtlckZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbFNoYXBlRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRDb2xzaGFwZUZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENoZWNrcG9pbnRGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldENoZWNrcG9pbnRGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRPYmplY3RGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldE9iamVjdEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldExvY2FsT2JqZWN0RmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRMb2NhbE9iamVjdEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBlZEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0UGVkRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9jYWxQZWRGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldExvY2FsUGVkRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9jYWxQbGF5ZXJGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldExvY2FsUGxheWVyRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9jYWxWZWhpY2xlRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRMb2NhbFZlaGljbGVGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQbGF5ZXJGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFBsYXllckZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFJtbERvY3VtZW50RmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRSbWxEb2N1bWVudEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFRleHRMYWJlbEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0VGV4dExhYmVsRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmVoaWNsZUZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0VmVoaWNsZUZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0VmlydHVhbEVudGl0eUdyb3VwRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmlydHVhbEVudGl0eUZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0VmlydHVhbEVudGl0eUZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFdlYlNvY2tldENsaWVudEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0V2ViU29ja2V0Q2xpZW50RmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0V2ViVmlld0ZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0V2ViVmlld0ZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwQnVpbGRlcigpIHtcbiAgICByZXR1cm4gYXdhaXQgJGNyZWF0ZUFwcEJ1aWxkZXIoe1xuICAgICAgICBlbnZpcm9tZW50OiBBcHBFbnZpcm9tZW50LkNsaWVudCxcbiAgICAgICAgcGx1Z2luczogW1NlcnZpY2VCaW5kZXJQbHVnaW4sIEV2ZW50TWVkaWF0b3JQbHVnaW4sIFJQQ1BsdWdpbiwgV2ViVmlld1BsdWdpbl0sXG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZSxcbiAgICAgICAgYXBwQnVpbGRlckluaGVyaXQ6IENsaWVudEFwcEJ1aWxkZXIsXG4gICAgfSk7XG59XG5cbmV4cG9ydCAqIGZyb20gJy4vZXhwb3J0cyc7XG5cbmltcG9ydCAnLi9leHRlbnNpb24uZC50cyc7XG5cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7QUFBTyxJQUFL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O0VBQ3pDO0VBRU9vQiw2QkFBNkJwQixTQUFrQjtBQUNsRGhCLHVCQUFtQm9DLDZCQUE2QnBCLE9BQUFBO0VBQ3BEO0VBRU9xQix3QkFBd0JyQixTQUFrQjtBQUM3Q2hCLHVCQUFtQnFDLHdCQUF3QnJCLE9BQUFBO0VBQy9DO0VBRU9zQiwwQkFBMEJ0QixTQUFrQjtBQUMvQ2hCLHVCQUFtQnNDLDBCQUEwQnRCLE9BQUFBO0VBQ2pEO0VBRU91QixrQkFBa0J2QixTQUFrQjtBQUN2Q2hCLHVCQUFtQnVDLGtCQUFrQnZCLE9BQUFBO0VBQ3pDO0FBQ0o7QUFFQSxlQUFzQndCLG9CQUFBQTtBQUNsQixTQUFPLE1BQU1DLGlCQUFrQjtJQUMzQkMsWUFBWUMsY0FBY0M7SUFDMUJDLFNBQVM7TUFBQ0M7TUFBcUJDO01BQXFCQztNQUFXQzs7SUFDL0RqRDtJQUNBa0QsbUJBQW1CaEQ7RUFDdkIsQ0FBQTtBQUNKO0FBUHNCc0MsT0FBQUEsbUJBQUFBOyIsCiAgIm5hbWVzIjogWyJBcHBFbnZpcm9tZW50IiwgIkNvcmVNZXRhZGF0YUtleSIsICJFdmVudERlc3RpbmF0aW9uIiwgIkV4ZWN1dGlvbkNvbnRleHRUeXBlIiwgIk1ldGhvZFBhcmFtVHlwZSIsICJMT0dHRVJfU0VSVklDRSIsICJFVkVOVF9TRVJWSUNFIiwgIlJQQ19TRVJWSUNFIiwgIk1PRFVMRV9DT05UQUlORVIiLCAiUkVGTEVDVE9SX1NFUlZJQ0UiLCAiVElNRVJfU0VSVklDRSIsICJFcnJvck1lc3NhZ2UiLCAiSW5qZWN0YWJsZVNjb3BlIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJfX2RlZlByb3AiLCAiX19uYW1lIiwgImdlbmVyYXRlUmFuZG9tSWQiLCAiTWF0aCIsICJyYW5kb20iLCAidG9TdHJpbmciLCAic3Vic3RyaW5nIiwgImlzVW5kZWZpbmVkIiwgIl9fbmFtZSIsICJvYmoiLCAiaXNPYmplY3QiLCAiZm4iLCAiaXNOaWwiLCAiaXNGdW5jdGlvbiIsICJ2YWwiLCAiaXNTdHJpbmciLCAiaXNOdW1iZXIiLCAiaXNDb25zdHJ1Y3RvciIsICJpc0VtcHR5IiwgImFycmF5IiwgImxlbmd0aCIsICJpc1N5bWJvbCIsICJpc0FzeW5jRnVuY3Rpb24iLCAibmFtZSIsICJpc0Jvb2xlYW4iLCAiaXNQcm9taXNlIiwgIlByb21pc2UiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiQ29udGFpbmVyIiwgIk1vZHVsZU1ldGFkYXRhUmVhZGVyIiwgImxvZ2dlclNlcnZpY2UiLCAicmVhZCIsICJtb2R1bGUiLCAiaXNGdW5jdGlvbiIsICJvcHRpb25zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIk1vZHVsZSIsICJleHBvcnRUb2tlbnMiLCAiZ2V0RXhwb3J0VG9rZW5zIiwgImV4cG9ydHMiLCAic2VwYXJhdGVkUHJvdmlkZXJzIiwgInNlcGFyYXRlUHJvdmlkZXJzIiwgInByb3ZpZGVycyIsICJjb250cm9sbGVycyIsICJpbXBvcnRzIiwgImdldFBpcGVsaW5lIiwgImNsYXNzUmVmIiwgImdsb2JhbCIsICJHbG9iYWxNb2R1bGUiLCAiY29udGFpbmVyIiwgIlByb21pc2UiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkludmFsaWRNb2R1bGVEZWZpbml0aW9uIiwgImd1YXJkcyIsICJHdWFyZHMiLCAiaW50ZXJjZXB0b3JzIiwgIkludGVyY2VwdG9ycyIsICJwaXBlcyIsICJQaXBlcyIsICJlcnJvckZpbHRlcnMiLCAiRXJyb3JGaWx0ZXJzIiwgIm1hcCIsICJwcm92aWRlckV4cG9ydCIsICJoYXNPd25NZXRhZGF0YSIsICJJbmplY3RhYmxlIiwgIkludmFsaWRFeHBvcnREZWZpbml0aW9uIiwgImlzU3RyaW5nIiwgImlzU3ltYm9sIiwgInByb3ZpZGUiLCAicHJvdmlkZXIiLCAiaW5qZWN0YWJsZU1ldGFkYXRhIiwgImlzTmlsIiwgIkludmFsaWRQcm92aWRlckRlZmluaXRpb24iLCAidXNlQ2xhc3MiLCAic2NvcGUiLCAicmVkdWNlIiwgImFjYyIsICJpbmNsdWRlcyIsICJleHRlcm5hbFByb3ZpZGVycyIsICJzZXQiLCAiaW50ZXJuYWxQcm92aWRlcnMiLCAiTWFwIiwgIk1vZHVsZUNvbnRhaW5lciIsICJDb250YWluZXIiLCAicGFyZW50IiwgIm1ldGFkYXRhIiwgImluc3RhbmNlIiwgInJlcGV0aXRpdmVJbXBvcnRzIiwgIlNldCIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJFeGVjdXRpb25Db250ZXh0QmFzZSIsICIkdHlwZSIsICIkY2xhc3NSZWYiLCAiJGhhbmRsZXIiLCAiJHJlcXVlc3QiLCAiJHJlc3BvbnNlIiwgIiRuYW1lIiwgInR5cGUiLCAiY2xhc3NSZWYiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgInJlc3BvbnNlIiwgIm5hbWUiLCAiTWFuZ29SZXF1ZXN0QmFzZSIsICIkYm9keSIsICIkcGxheWVyIiwgImJvZHkiLCAicGxheWVyIiwgIk1hbmdvUmVzcG9uc2VCYXNlIiwgIiRsb2dnZXJTZXJ2aWNlIiwgIiRzZW5kTGlzdGVuZXJzIiwgIlNldCIsICIkZXJyb3JMaXN0ZW5lcnMiLCAiJGlzU2VudCIsICJzZW5kIiwgImRhdGEiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIlJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQiLCAiZm9yRWFjaCIsICJsaXN0ZW5lciIsICJtZXNzYWdlIiwgImRldGFpbHMiLCAiJG9uU2VuZCIsICJhZGQiLCAiJG9uRXJyb3IiLCAiVHJlZU5vZGUiLCAidmFsdWUiLCAiY2hpbGRyZW4iLCAiYWRkQ2hpbGQiLCAiY2hpbGQiLCAicHVzaCIsICJyZW1vdmVDaGlsZCIsICJpbmRleCIsICJpbmRleE9mIiwgInNwbGljZSIsICJUcmVlIiwgInJvb3QiLCAidHJhdmVyc2UiLCAiY2FsbGJhY2siLCAidHJhdmVyc2VOb2RlIiwgIm5vZGUiLCAiZm9yRWFjaCIsICJhc3luY1RyYXZlcnNlIiwgIlByb21pc2UiLCAiYWxsIiwgIm1hcCIsICJ0b1N0cmluZyIsICJyZXN1bHQiLCAibGluZXMiLCAiZGVwdGgiLCAicmVwZWF0IiwgImpvaW4iLCAiZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zIiwgInByZWZpeCIsICJ2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIiwgIm9wdGlvbnMiLCAiaXNOaWwiLCAidmFsaWQiLCAidmFsdWUiLCAiaXNPYmplY3QiLCAiZXJyb3IiLCAiaXNTdHJpbmciLCAidmFsaWRhdGVFcnJvckZpbHRlciIsICJpc0Z1bmN0aW9uIiwgInByb3RvdHlwZSIsICJjYXRjaCIsICJ2YWxpZGF0ZVBpcGUiLCAidHJhbnNmb3JtIiwgInZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIiLCAia2V5IiwgImlzTnVtYmVyIiwgImluZGV4IiwgInR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgIkJvZHkiLCAiUGxheWVyIiwgImRhdGEiLCAiQ3VzdG9tIiwgImZhY3RvcnkiLCAiUGFyYW0iLCAiSW5kZXgiLCAiUmVxdWVzdCIsICJSZXNwb25zZSIsICJBcnJheSIsICJpc0FycmF5IiwgInBpcGVzIiwgInBpcGUiLCAidmFsaWRhdGVFdmVudE1ldGFkYXRhIiwgIm5hbWUiLCAibWV0aG9kIiwgInBhcmFtcyIsICJwYXJhbSIsICJ2YWxpZGF0ZUd1YXJkIiwgImNhbkFjdGl2YXRlIiwgInZhbGlkYXRlSW50ZXJjZXB0b3IiLCAiaW50ZXJjZXB0IiwgInZhbGlkYXRlSW5qZWN0aW9uVG9rZW4iLCAiaXNTeW1ib2wiLCAidmFsaWRhdGVQcm92aWRlciIsICJwcm92aWRlIiwgInZhbGlkYXRlQ2xhc3NQcm92aWRlciIsICJ2YWxpZGF0ZVZhbHVlUHJvdmlkZXIiLCAidmFsaWRhdGVGYWN0b3J5UHJvdmlkZXIiLCAidmFsaWRhdGVFeGlzdGluZ1Byb3ZpZGVyIiwgInNjb3BlIiwgIkluamVjdGFibGVTY29wZSIsICJTaW5nbGV0b24iLCAiT2JqZWN0IiwgInZhbHVlcyIsICJpbmNsdWRlcyIsICJ2YWxpZGF0ZU9wdGlvbmFsRmFjdG9yeURlcGVuZGVuY3kiLCAidG9rZW4iLCAidXNlRmFjdG9yeSIsICJpbmplY3QiLCAidmFsaWRhdGVNb2R1bGVPcHRpb25zIiwgImlzRHluYW1pYyIsICJjb250cm9sbGVycyIsICJpbXBvcnRzIiwgInByb3ZpZGVycyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiaXNCb29sZWFuIiwgImltcG9ydGVkIiwgImlzUHJvbWlzZSIsICJjb250cm9sbGVyIiwgInByb3ZpZGVyIiwgImV4cG9ydEl0ZW0iLCAiZGVmYXVsdEluamVjdGFibGVPcHRpb25zIiwgInZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhIiwgIklOVEVSTkFMX0FQUF9DT05UQUlORVIiLCAiR0xPQkFMX0FQUF9DT05UQUlORVIiLCAiQVBQX0VOVklST01FTlQiLCAiR0xPQkFMX0dVQVJEUyIsICJHTE9CQUxfSU5URVJDRVBUT1JTIiwgIkdMT0JBTF9QSVBFUyIsICJHTE9CQUxfRVJST1JfRklMVEVSUyIsICJQTFVHSU5TIiwgIkVOQUJMRV9TSFVURE9XTl9IT09LUyIsICJDT05UQUlORVJfT1BUSU9OUyIsICJNQU5HT19MT0dfUFJFRklYIiwgIk1BTkdPX1JFUVVFU1RfRkFDVE9SWSIsICJNQU5HT19SRVNQT05TRV9GQUNUT1JZIiwgIkVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkiLCAiTVVMVElQTEFZRVJfU0VSVklDRSIsICJSUENfUkVTVUxUX1RJTUVPVVQiLCAic3VjY2VzcyIsICJlcnJvciIsICJtZXNzYWdlIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiVGltZW91dCIsICJSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EIiwgIkhhbmRsZXJOb3RGb3VuZCIsICJSUENfUkVTVUxUX1VOS05PV04iLCAiVW5rbm93biIsICJSUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQiLCAiUGxheWVyRGlzY29ubmVjdGVkIiwgIlJQQ19SRVNVTFRfUExBWUVSX05PVF9GT1VORCIsICJQbGF5ZXJOb3RGb3VuZCIsICJNYW5nb0Vycm9yIiwgIkVycm9yIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiVW5rbm93biIsICJkZXRhaWxzIiwgIm1lc3NhZ2UiLCAiR3VhcmRDYW5jZWxFcnJvciIsICJDYW5jZWxsZWRCeUd1YXJkIiwgIkd1YXJkSW52YWxpZFJldHVybkVycm9yIiwgIkludmFsaWRHdWFyZFJldHVybiIsICJUb29NYW55UmVxdWVzdHMiLCAiVW5rbm93bkVycm9yIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlBpcGVsaW5lSGFuZGxlciIsICJsb2dnZXJTZXJ2aWNlIiwgImdvVHJvdWdoR3VhcmRzIiwgImV4ZWN1dGlvbkNvbnRleHQiLCAiZ3VhcmRzIiwgImNvbnRhaW5lciIsICJndWFyZCIsICJpbnN0YW5jZSIsICJpc0Z1bmN0aW9uIiwgImdldCIsICJpc09iamVjdCIsICJpc05pbCIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZEd1YXJkRGVmaW5pdGlvbiIsICJjYW5BY3RpdmF0ZSIsICJjYWxsIiwgIkd1YXJkSW52YWxpZFJldHVybkVycm9yIiwgIkd1YXJkQ2FuY2VsRXJyb3IiLCAiZ29UaHJvdWdoSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9ycyIsICJjYWxsSGFuZGxlciIsICJpbnRlcmNlcHRvciIsICJJbnZhbGlkSW50ZXJjZXB0b3JEZWZpbml0aW9uIiwgImludGVyY2VwdCIsICJnb1Ryb3VnaFBpcGVzIiwgInZhbHVlIiwgInBpcGVzIiwgImFyZ3VtZW50TWV0YWRhdGEiLCAicGlwZSIsICJJbnZhbGlkUGlwZURlZmluaXRpb24iLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgInRyYW5zZm9ybSIsICJDb250cm9sbGVyRmxvd0hhbmRsZXIiLCAiYXBwRW52IiwgInBpcGVsaW5lSGFuZGxlciIsICJjcmVhdGVBcmdzIiwgImNvbnRyb2xsZXIiLCAibWV0YWRhdGEiLCAicGxheWVyIiwgImFsbCIsICJwYXJhbXMiLCAibWFwIiwgInBhcmFtIiwgInR5cGUiLCAiZGF0YSIsICJtZXRhdHlwZSIsICJyZXF1ZXN0IiwgImJvZHkiLCAib3duZXIiLCAidW5kZWZpbmVkIiwgIkFycmF5IiwgImlzQXJyYXkiLCAiZmFjdG9yeSIsICJBcHBFbnZpcm9tZW50IiwgIlNlcnZlciIsICJDb250cm9sbGVyRXZlbnRIYW5kbGVyIiwgIm11bHRpcGxheWVyU2VydmljZSIsICJldmVudFNlcnZpY2UiLCAiY29udHJvbGxlckZsb3dIYW5kbGVyIiwgImNyZWF0ZU1hbmdvUmVxdWVzdCIsICJjcmVhdGVFeGVjdXRpb25Db250ZXh0IiwgInJlZ2lzdGVyRXZlbnQiLCAibWFwcGVkRXJyb3JGaWx0ZXJzIiwgImV2ZW50IiwgIm5hbWUiLCAiaGFuZGxlRXZlbnQiLCAiYXJncyIsICJwYXJzZUludGVybmFsQXJncyIsICJ3ZWJWaWV3SWQiLCAiSW52YWxpZEV2ZW50VHlwZSIsICJFeGVjdXRpb25Db250ZXh0VHlwZSIsICJFdmVudCIsICJjbGFzc1JlZiIsICJwcm90b3R5cGUiLCAibWV0aG9kIiwgImNvbnRyb2xsZXJNZXRob2QiLCAiaGFuZGxlIiwgImlzQXN5bmNGdW5jdGlvbiIsICJhcHBseSIsICJyZXR1cm4iLCAiX19uYW1lIiwgIkludmFsaWRSZXR1cm5JbkV2ZW50IiwgImxlbmd0aCIsICJlcnJvckdyb3VwIiwgImZpbmQiLCAiZXJyb3JUeXBlIiwgIkludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24iLCAiY2F0Y2giLCAiQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgInJlYWQiLCAib3B0aW9ucyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDb250cm9sbGVyIiwgImV2ZW50cyIsICJnZXRFdmVudHMiLCAicnBjcyIsICJnZXRSUENzIiwgInRpbWVycyIsICJnZXRUaW1lcnMiLCAiZ2V0UGlwZWxpbmUiLCAiQ29udHJvbGxlckV2ZW50cyIsICJnZXRNZXRob2RQYXJhbXMiLCAiQ29udHJvbGxlclJQQ3MiLCAicnBjIiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAic29ydCIsICJhIiwgImIiLCAiaW5kZXgiLCAiZm9yRWFjaCIsICJJbnZhbGlkUGFyYW1ldGVyRGVjb3JhdG9yVXNhZ2UiLCAiUmVzcG9uc2VEZWNvcmF0b3JOb3RBbGxvd2VkT25FdmVudHMiLCAiQ2xpZW50IiwgIlBsYXllckRlY29yYXRvck5vdEFsbG93ZWRPbkNsaWVudEV2ZW50cyIsICJSUENOb3RBbGxvd2VkSW5DbGllbnQiLCAiUlBDTm90QWxsb3dlZEluU2VydmVyIiwgIkV2ZW50Tm90QWxsb3dlZEluQ2xpZW50IiwgIkV2ZW50Tm90QWxsb3dlZEluU2VydmVyIiwgInRhcmdldCIsICJHdWFyZHMiLCAiSW50ZXJjZXB0b3JzIiwgIlBpcGVzIiwgImVycm9yRmlsdGVycyIsICJFcnJvckZpbHRlcnMiLCAiVGltZXJzIiwgIkNvbnRyb2xsZXJSUENIYW5kbGVyIiwgInJwY1NlcnZpY2UiLCAiY3JlYXRlTWFuZ29SZXNwb25zZSIsICJyZWdpc3RlclJQQyIsICJoYW5kbGVSUEMiLCAiSW52YWxpZFJQQ1R5cGUiLCAicmVzcG9uc2UiLCAiJG9uU2VuZCIsICIkb25FcnJvciIsICJSUEMiLCAic2VuZCIsICJyZXN1bHQiLCAiZXZlbnRIYW5kbGVycyIsICJycGNIYW5kbGVycyIsICJpbmplY3RhYmxlIiwgImluamVjdGFibGUiLCAiaW5qZWN0IiwgIm9wdGlvbmFsIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIm9wdGlvbmFsIiwgIkNvbnRhaW5lciIsICJMYXp5U2VydmljZUlkZW50aWZpZXIiLCAibWluaXR6IiwgInkiLCAibSIsICJkIiwgImgiLCAiaSIsICJzIiwgInR6IiwgInRocm93T25JbnZhbGlkIiwgImZyb21UWiIsICJ0cCIsICJmcm9tVFpJU08iLCAibG9jYWxUaW1lU3RyIiwgInBhcnNlSVNPTG9jYWwiLCAiaW5EYXRlIiwgIkRhdGUiLCAiVVRDIiwgIm9mZnNldCIsICJnZXRUaW1lem9uZU9mZnNldCIsICJkYXRlR3Vlc3MiLCAiZ2V0VGltZSIsICJkYXRlT2Zmc0d1ZXNzIiwgImRhdGVHdWVzczIiLCAiZGF0ZU9mZnNHdWVzczIiLCAiRXJyb3IiLCAidG9UWiIsICJ0elN0ciIsICJsb2NhbERhdGVTdHJpbmciLCAidG9Mb2NhbGVTdHJpbmciLCAidGltZVpvbmUiLCAicmVwbGFjZSIsICJ0ZCIsICJnZXRGdWxsWWVhciIsICJnZXRNb250aCIsICJnZXREYXRlIiwgImdldEhvdXJzIiwgImdldE1pbnV0ZXMiLCAiZ2V0U2Vjb25kcyIsICJkYXRlIiwgInRpbWVab25lTmFtZSIsICJzcGxpdCIsICJzbGljZSIsICJkYXRlU3RyaW5nIiwgInBhcnNlIiwgImR0U3RyIiwgInBkIiwgImlzTmFOIiwgInN0cmluZ0VuZCIsICJzdWJzdHJpbmciLCAiaW5jbHVkZXMiLCAiZ2V0VVRDRnVsbFllYXIiLCAiZ2V0VVRDTW9udGgiLCAiZ2V0VVRDRGF0ZSIsICJnZXRVVENIb3VycyIsICJnZXRVVENNaW51dGVzIiwgImdldFVUQ1NlY29uZHMiLCAiQ3Jvbk9wdGlvbnMiLCAib3B0aW9ucyIsICJuYW1lIiwgImxlZ2FjeU1vZGUiLCAicGF1c2VkIiwgIm1heFJ1bnMiLCAiSW5maW5pdHkiLCAiY2F0Y2giLCAiaW50ZXJ2YWwiLCAicGFyc2VJbnQiLCAidXRjT2Zmc2V0IiwgInVucmVmIiwgInN0YXJ0QXQiLCAiQ3JvbkRhdGUiLCAidGltZXpvbmUiLCAic3RvcEF0IiwgIkxBU1RfT0NDVVJSRU5DRSIsICJBTllfT0NDVVJSRU5DRSIsICJPQ0NVUlJFTkNFX0JJVE1BU0tTIiwgIkNyb25QYXR0ZXJuIiwgInBhdHRlcm4iLCAic2Vjb25kIiwgIkFycmF5IiwgImZpbGwiLCAibWludXRlIiwgImhvdXIiLCAiZGF5IiwgIm1vbnRoIiwgImRheU9mV2VlayIsICJsYXN0RGF5T2ZNb250aCIsICJzdGFyRE9NIiwgInN0YXJET1ciLCAicHJvdG90eXBlIiwgIlN0cmluZyIsICJUeXBlRXJyb3IiLCAiaW5kZXhPZiIsICJoYW5kbGVOaWNrbmFtZXMiLCAidHJpbSIsICJwYXJ0cyIsICJsZW5ndGgiLCAidW5zaGlmdCIsICJyZXBsYWNlQWxwaGFNb250aHMiLCAicmVwbGFjZUFscGhhRGF5cyIsICJpbml0RGF0ZSIsICJnZXREYXkiLCAidGhyb3dBdElsbGVnYWxDaGFyYWN0ZXJzIiwgInBhcnRUb0FycmF5IiwgInR5cGUiLCAiY29uZiIsICJ2YWx1ZUluZGV4T2Zmc2V0IiwgImRlZmF1bHRWYWx1ZSIsICJhcnIiLCAiaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmciLCAiaGFuZGxlUmFuZ2UiLCAiaGFuZGxlU3RlcHBpbmciLCAiaGFuZGxlTnVtYmVyIiwgInJlVmFsaWRDcm9uIiwgInRlc3QiLCAicmVzdWx0IiwgImV4dHJhY3ROdGgiLCAic2V0UGFydCIsICJwYXJ0IiwgImluZGV4IiwgInZhbHVlIiwgIk9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJjYWxsIiwgIlJhbmdlRXJyb3IiLCAic2V0TnRoV2Vla2RheU9mTW9udGgiLCAibWF0Y2hlcyIsICJtYXRjaCIsICJsb3dlciIsICJ1cHBlciIsICJzdGVwcyIsICJyZXN0IiwgIm50aCIsICJzdGFydCIsICJjbGVhblBhdHRlcm4iLCAidG9Mb3dlckNhc2UiLCAibnRoV2Vla2RheSIsICJEYXlzT2ZNb250aCIsICJSZWN1cnNpb25TdGVwcyIsICJmcm9tRGF0ZSIsICJmcm9tU3RyaW5nIiwgImZyb21Dcm9uRGF0ZSIsICJpc050aFdlZWtkYXlPZk1vbnRoIiwgInllYXIiLCAid2Vla2RheSIsICJnZXRVVENEYXkiLCAiY291bnQiLCAiZGF5c0luTW9udGgiLCAibXMiLCAiZ2V0VVRDTWlsbGlzZWNvbmRzIiwgImFwcGx5IiwgImdldE1pbGxpc2Vjb25kcyIsICJzdHIiLCAiZmluZE5leHQiLCAidGFyZ2V0IiwgIm9yaWdpbmFsVGFyZ2V0IiwgImZEb21XZWVrRGF5IiwgInVuZGVmaW5lZCIsICJkb3dNYXRjaCIsICJyZWN1cnNlIiwgImRvaW5nIiwgInJlcyIsICJyZXNldExldmVsIiwgImluY3JlbWVudCIsICJoYXNQcmV2aW91c1J1biIsICJpbnRlcm5hbCIsICJpc0Z1bmN0aW9uIiwgInYiLCAidG9TdHJpbmciLCAiRnVuY3Rpb24iLCAidW5yZWZUaW1lciIsICJ0aW1lciIsICJEZW5vIiwgIm1heERlbGF5IiwgInNjaGVkdWxlZEpvYnMiLCAiQ3JvbiIsICJmbk9yT3B0aW9uczEiLCAiZm5Pck9wdGlvbnMyIiwgImZ1bmMiLCAiX3N0YXRlcyIsICJraWxsIiwgImJsb2NraW5nIiwgInByZXZpb3VzUnVuIiwgImN1cnJlbnRSdW4iLCAib25jZSIsICJjdXJyZW50VGltZW91dCIsICJleGlzdGluZyIsICJmaW5kIiwgImoiLCAicHVzaCIsICJmbiIsICJzY2hlZHVsZSIsICJuZXh0UnVuIiwgInByZXYiLCAibmV4dCIsICJfbmV4dCIsICJuZXh0UnVucyIsICJuIiwgInByZXZpb3VzIiwgImVudW1lcmF0aW9uIiwgImdldFBhdHRlcm4iLCAiaXNSdW5uaW5nIiwgIm5leHRSdW5UaW1lIiwgImlzU2NoZWR1bGVkIiwgIm5vdElzS2lsbGVkIiwgImlzU3RvcHBlZCIsICJpc0J1c3kiLCAibXNUb05leHQiLCAic3RvcCIsICJjbGVhclRpbWVvdXQiLCAiam9iSW5kZXgiLCAic3BsaWNlIiwgInBhdXNlIiwgInJlc3VtZSIsICJ3YWl0TXMiLCAic2V0VGltZW91dCIsICJfY2hlY2tUcmlnZ2VyIiwgIl90cmlnZ2VyIiwgImluaXRpYXRpb25EYXRlIiwgImNvbnRleHQiLCAiX2UiLCAidHJpZ2dlciIsICJub3ciLCAic2hvdWxkUnVuIiwgImlzQmxvY2tlZCIsICJwcm90ZWN0IiwgInN0YXJ0QXRJbkZ1dHVyZVdpdGhJbnRlcnZhbCIsICJfY2FsY3VsYXRlUHJldmlvdXNSdW4iLCAicHJldlRpbWVQbHVzSW50ZXJ2YWwiLCAiQ29udHJvbGxlciIsICJvcHRpb25zIiwgInRhcmdldCIsICJSZWZsZWN0IiwgImhhc01ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UiLCAidmFsaWQiLCAidmFsdWUiLCAiZXJyb3IiLCAidmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyIsICJkZWZpbmVNZXRhZGF0YSIsICJpbmplY3RhYmxlIiwgIkdsb2JhbCIsICJHbG9iYWxNb2R1bGUiLCAiSW5qZWN0IiwgImtleSIsICJwcm9wZXJ0eUtleSIsICJwYXJhbUluZGV4IiwgImlzTmlsIiwgInZhbGlkYXRlSW5qZWN0aW9uVG9rZW4iLCAiSW52YWxpZEluamVjdGlvblRva2VuU3BlY2lmaWVkIiwgInRva2VuIiwgImdldE1ldGFkYXRhIiwgIkluamVjdGlvblRva2VuTm90Rm91bmQiLCAiaW5qZWN0IiwgIkluamVjdGFibGUiLCAidmFsaWRhdGVJbmplY3RhYmxlTWV0YWRhdGEiLCAiTW9kdWxlIiwgInZhbGlkYXRlTW9kdWxlT3B0aW9ucyIsICJPcHRpb25hbCIsICJvcHRpb25hbCIsICJTZXRNZXRhZGF0YSIsICJkZWNvcmF0b3JGYWN0b3J5IiwgIl9fbmFtZSIsICJfbWV0aG9kIiwgImRlc2NyaXB0b3IiLCAiS0VZIiwgIkNhdGNoIiwgImV4Y2VwdGlvbnMiLCAiZHVwbGljYXRlcyIsICJmaWx0ZXIiLCAiZXhjZXB0aW9uIiwgImluZGV4IiwgImluZGV4T2YiLCAibGVuZ3RoIiwgIkV4Y2VwdGlvbkhhbmRsaW5nQ29uZmxpY3QiLCAiVXNlRmlsdGVycyIsICJmaWx0ZXJzIiwgIm1ldGhvZCIsICJ2YWxpZGF0ZWRGaWx0ZXJzIiwgInZhbGlkYXRlRXJyb3JGaWx0ZXIiLCAicHVzaCIsICJBdExlYXN0T25lRmlsdGVyUmVxdWlyZWQiLCAibWV0aG9kRmlsdGVycyIsICJFcnJvckZpbHRlcnMiLCAiZmluZCIsICJpbmNsdWRlcyIsICJEdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkIiwgImNsYXNzRmlsdGVycyIsICJBcHBSdW50aW1lIiwgImV2ZW50SGFuZGxlciIsICJycGNIYW5kbGVyIiwgImdsb2JhbEd1YXJkcyIsICJnbG9iYWxJbnRlcmNlcHRvcnMiLCAiZ2xvYmFsUGlwZXMiLCAiZ2xvYmFsRXJyb3JGaWx0ZXJzIiwgImxvZ2dlclNlcnZpY2UiLCAiZW5hYmxlU2h1dGRvd25Ib29rcyIsICJib290IiwgInJlc29sdmVkVHJlZSIsICJhc3luY1RyYXZlcnNlIiwgIm5vZGUiLCAic3RhcnRUaW1lIiwgIkRhdGUiLCAibm93IiwgIm1vZHVsZSIsICJpbnN0YW5jZSIsICJjb250YWluZXIiLCAiZ2V0IiwgIm1ldGFkYXRhIiwgImNsYXNzUmVmIiwgImNvbnRyb2xsZXJzIiwgImZvckVhY2giLCAiY29udHJvbGxlciIsICJpbnRlcm5hbFByb3ZpZGVycyIsICJleHRlcm5hbFByb3ZpZGVycyIsICJsb2ciLCAibmFtZSIsICJydW5MaWZlY3ljbGVNZXRob2QiLCAicnVuTGlmZWN5Y2xlTWV0aG9kcyIsICJ0cmF2ZXJzZSIsICJ0aW1lIiwgInJlZ2lzdGVyVGltZXJzIiwgInJlZ2lzdGVyTGlzdGVuZXJzIiwgInNodXRkb3duIiwgInRpbWVyU2VydmljZSIsICJvd25lciIsICJUSU1FUl9TRVJWSUNFIiwgImV2ZXJ5dGlja3MiLCAidGltZXIiLCAiZGVzdHJveSIsICJpbnRlcnZhbHMiLCAidGltZW91dHMiLCAiY3JvbnMiLCAiY3JvbiIsICJzdG9wIiwgImV2ZW50SGFuZGxlcnMiLCAiaGFuZGxlciIsICJycGNIYW5kbGVycyIsICJldmVudHMiLCAiZXZlbnQiLCAiZ3VhcmRzIiwgImludGVyY2VwdG9ycyIsICJwaXBlcyIsICJtYXBwZWRFcnJvckZpbHRlcnMiLCAibWFwRXJyb3JGaWx0ZXJzIiwgImVycm9yRmlsdGVycyIsICJyZWdpc3RlckV2ZW50IiwgInJwY3MiLCAicnBjIiwgInJlZ2lzdGVyUlBDIiwgInRpbWVycyIsICJ0eXBlIiwgImNyZWF0ZUNyb25Kb2IiLCAiYmluZCIsICJjcmVhdGVFdmVyeVRpY2siLCAiY3JlYXRlSW50ZXJ2YWwiLCAidGltZW91dCIsICJjcmVhdGVUaW1lb3V0IiwgImZpbHRlck1hcCIsICJlcnJvcnMiLCAiZmlsdGVyRXJyb3IiLCAiRXJyb3JBbHJlYWR5SGFuZGxlZEJ5RmlsdGVyIiwgIlByb21pc2UiLCAiYWxsIiwgIm1hcCIsICJpc09iamVjdCIsICJwcm92aWRlckluc3RhbmNlIiwgIk1vZHVsZURlcGVuZGVuY3lCaW5kZXIiLCAiZ2xvYmFsQXBwQ29udGFpbmVyIiwgImNvbnRhaW5lck9wdGlvbnMiLCAiTW9kdWxlQ29udGFpbmVyIiwgInBhcmVudCIsICJ0b1NlbGYiLCAiaW5TaW5nbGV0b25TY29wZSIsICJnbG9iYWwiLCAiXyIsICJwcm92aWRlciIsICJiaW5kUHJvdmlkZXIiLCAidG9EeW5hbWljVmFsdWUiLCAiaW1wb3J0TW9kdWxlIiwgInJlcGV0aXRpdmVJbXBvcnRzIiwgIk1PRFVMRV9DT05UQUlORVIiLCAidG9Db25zdGFudFZhbHVlIiwgInRvIiwgIlRpbWVyU2VydmljZSIsICJwcm92aWRlIiwgInVzZVZhbHVlIiwgImJpbmRpbmciLCAiY3R4IiwgImRlcHMiLCAiZGVwIiwgImVyciIsICJ1bmRlZmluZWQiLCAidXNlRmFjdG9yeSIsICJzY29wZSIsICJpblRyYW5zaWVudFNjb3BlIiwgImluUmVxdWVzdFNjb3BlIiwgInVzZUNsYXNzIiwgInRvU2VydmljZSIsICJ1c2VFeGlzdGluZyIsICJNb2R1bGVUcmVlU2Nhbm5lciIsICJtb2R1bGVNZXRhZGF0YVJlYWRlciIsICJjb250cm9sbGVyTWV0YWRhdGFSZWFkZXIiLCAic2NhbiIsICJtb2R1bGVNZXRhZGF0YSIsICJyZWFkIiwgInNjYW5Db250cm9sbGVycyIsICJtb2R1bGVUcmVlIiwgIlRyZWUiLCAic2Nhbm5lZE1vZHVsZXMiLCAiTWFwIiwgInNldCIsICJpbXBvcnRlZE1vZHVsZSIsICJpbXBvcnRzIiwgInNjYW5Nb2R1bGVzIiwgInJvb3QiLCAicGFyZW50Tm9kZSIsICJzY2FubmVkTW9kdWxlIiwgImFkZCIsICJjaGVja0NpcmN1bGFyRGVwZW5kZW5jeSIsICJ0cmVlTm9kZSIsICJUcmVlTm9kZSIsICJhZGRDaGlsZCIsICJjb250cm9sbGVyTWV0YWRhdGEiLCAicGFyZW50TWV0YWRhdGEiLCAiQ2lyY3VsYXJEZXBlbmRlbmN5RGV0ZWN0ZWQiLCAiUmFnZU1QU2NyaXB0RXZlbnQiLCAiZXZlbnROYW1lIiwgImxpc3RlbmVyIiwgIm1wIiwgInJlbW92ZSIsICJSYWdlTVBFdmVudEVtbWl0ZXIiLCAiZW1pdCIsICJhcmdzIiwgImNhbGwiLCAib24iLCAib25jZSIsICJvbmNlV3JhcHBlciIsICJvZmYiLCAiUmFnZU1QVGltZXIiLCAibGFzdFRpY2siLCAiaWQiLCAiaW50ZXJ2YWwiLCAiY2FsbGJhY2siLCAiY2xlYXJUaW1lciIsICJSYWdlTVBUaW1lcnMiLCAidGltZXJJbmNyZW1lbnRlciIsICJldmVyeVRpY2tIYW5kbGVycyIsICJpc0V2ZXJ5VGlja1J1bm5pbmciLCAiZXZlcnlUaWNrTWFpbkhhbmRsZXIiLCAidmFsdWVzIiwgIndhcm5pbmdUaHJlc2hvbGQiLCAiX3ZhbHVlIiwgInNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQiLCAiZ2V0QnlJRCIsICJjcmVhdGVUaW1lciIsICJjbGVhciIsICJjYWxsYmFja0JpbmQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ0aW1lcklkIiwgInJhZ2VNUFRpbWVyIiwgImRlbGV0ZSIsICJzZXRJbnRlcnZhbCIsICJjYiIsICJjbGVhckludGVydmFsIiwgInNldFRpbWVvdXQiLCAiY2xlYXJUaW1lb3V0IiwgImV2ZXJ5VGljayIsICJib3VuZCIsICJpc0NsaWVudFNpZGUiLCAiYnJvd3NlcnMiLCAiZSIsICJjb25zb2xlIiwgImxvZ0Vycm9yIiwgImludGVydmFsSGFuZGxlciIsICJfZXZlcnlUaWNrSW50ZXJ2YWwiLCAic2l6ZSIsICJuZXh0VGljayIsICJfbmFtZSIsICJ0aW1lRW5kIiwgIlJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJUaW1lcnMiLCAiRXZlbnRzIiwgInBhcnNlSW50ZXJuYWxBcmdzIiwgInBsYXllciIsICJib2R5IiwgImFyZyIsICJtZXNzYWdlIiwgImEiLCAiSlNPTiIsICJzdHJpbmdpZnkiLCAiU3RyaW5nIiwgImpvaW4iLCAibG9nSW5mbyIsICJsb2dXYXJuaW5nIiwgImxvZ0RlYnVnIiwgIkFwcCIsICJtb2R1bGVUcmVlU2Nhbm5lciIsICJtb2R1bGVEZXBlbmRlbmN5QmluZGVyIiwgImFwcFJ1bnRpbWUiLCAiaW50ZXJuYWxBcHBDb250YWluZXIiLCAicGx1Z2lucyIsICJsb2FkZWQiLCAic3RhcnQiLCAicm9vdE1vZHVsZSIsICJBcHBBbHJlYWR5TG9hZGVkIiwgInJ1blBsdWdpbk1ldGhvZHMiLCAiQXBwTm90TG9hZGVkIiwgInAiLCAicGx1Z2luIiwgInJlc29sdmUiLCAiQXBwQnVpbGRlciIsICJlbnZpcm9tZW50IiwgIm11bHRpcGxheWVyU2VydmljZSIsICJnbG9iYWxDb250YWluZXJPcHRpb25zIiwgInVzZUdsb2JhbEd1YXJkcyIsICJ2YWxpZGF0ZWRHdWFyZHMiLCAiZ3VhcmQiLCAidmFsaWRhdGVHdWFyZCIsICJHTE9CQUxfR1VBUkRTIiwgInVzZUdsb2JhbEludGVyY2VwdG9ycyIsICJ2YWxpZGF0ZWRJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3IiLCAidmFsaWRhdGVJbnRlcmNlcHRvciIsICJHTE9CQUxfSU5URVJDRVBUT1JTIiwgInVzZUdsb2JhbFBpcGVzIiwgInZhbGlkYXRlZFBpcGVzIiwgInBpcGUiLCAidmFsaWRhdGVQaXBlIiwgIkdMT0JBTF9QSVBFUyIsICJ1c2VHbG9iYWxGaWx0ZXJzIiwgInZhbGlkYXRlZEZJbHRlcnMiLCAiR0xPQkFMX0VSUk9SX0ZJTFRFUlMiLCAidXNlUGx1Z2lucyIsICJpbnRlcm5hbFBsdWdpbnMiLCAiUExVR0lOUyIsICJyZWJpbmQiLCAiRU5BQkxFX1NIVVRET1dOX0hPT0tTIiwgInNldENvbnRhaW5lck9wdGlvbnMiLCAib25seUdsb2JhbCIsICJDT05UQUlORVJfT1BUSU9OUyIsICJidWlsZCIsICJDb250YWluZXIiLCAiUkVGTEVDVE9SX1NFUlZJQ0UiLCAiUmVmbGVjdG9yU2VydmljZSIsICJNVUxUSVBMQVlFUl9TRVJWSUNFIiwgIkdMT0JBTF9BUFBfQ09OVEFJTkVSIiwgIlBpcGVsaW5lSGFuZGxlciIsICJNb2R1bGVNZXRhZGF0YVJlYWRlciIsICJDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIiLCAiQ29udHJvbGxlckZsb3dIYW5kbGVyIiwgIkNvbnRyb2xsZXJFdmVudEhhbmRsZXIiLCAiQ29udHJvbGxlclJQQ0hhbmRsZXIiLCAiTWFuZ29SZXF1ZXN0QmFzZSIsICJNQU5HT19SRVFVRVNUX0ZBQ1RPUlkiLCAidG9GYWN0b3J5IiwgImNvbnRleHQiLCAicmVxdWVzdCIsICIkYm9keSIsICIkcGxheWVyIiwgIk1hbmdvUmVzcG9uc2VCYXNlIiwgIk1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkiLCAiRXhlY3V0aW9uQ29udGV4dEJhc2UiLCAiRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSIsICJyZXNwb25zZSIsICJleGVjdXRpb25Db250ZXh0IiwgIiR0eXBlIiwgIiRyZXF1ZXN0IiwgIiRyZXNwb25zZSIsICIkaGFuZGxlciIsICIkY2xhc3NSZWYiLCAiJG5hbWUiLCAicGx1Z2luSW5zdGFuY2UiLCAib25CdWlsZCIsICJpc0JvdW5kIiwgImNyZWF0ZUFwcEJ1aWxkZXIiLCAiYXBwQnVpbGRlckluaGVyaXQiLCAiSU5URVJOQUxfQVBQX0NPTlRBSU5FUiIsICJBUFBfRU5WSVJPTUVOVCIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJ3ZWJWaWV3SWQiLCAiaXNTdHJpbmciLCAiRXZlbnROYW1lTXVzdEJlU3RyaW5nIiwgIkNvbnRyb2xsZXJFdmVudHMiLCAic29tZSIsICJFdmVudE5hbWVNdXN0QmVVbmlxdWUiLCAiT25JbnRlcm5hbCIsICJPbldlYlZpZXciLCAiT24iLCAiT25jZUludGVybmFsIiwgIk9uY2UiLCAiT25jZVdlYlZpZXciLCAiQm9keSIsICJwYXJhbXMiLCAiQ29udHJvbGxlclBhcmFtcyIsICJwYXJhbSIsICJNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQiLCAicGFyYW1UeXBlcyIsICJtZXRhdHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiZGF0YSIsICJJbmRleCIsICJpc051bWJlciIsICJJbmRleEtleU11c3RCZU51bWJlciIsICJSZXF1ZXN0IiwgIlJlcSIsICJQYXJhbSIsICJQYXJhbUtleU11c3RCZVN0cmluZyIsICJSZXNwb25zZSIsICJSZXMiLCAiVXNlR3VhcmRzIiwgIkF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkIiwgIm1ldGhvZEd1YXJkcyIsICJHdWFyZHMiLCAiY2xhc3NHdWFyZHMiLCAiVXNlSW50ZXJjZXB0b3JzIiwgIkF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkIiwgIm1ldGhvZEludGVyY2VwdG9ycyIsICJJbnRlcmNlcHRvcnMiLCAiY2xhc3NJbnRlcmNlcHRvcnMiLCAiVXNlUGlwZXMiLCAiQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCIsICJtZXRob2RQaXBlcyIsICJQaXBlcyIsICJjbGFzc1BpcGVzIiwgImNyZWF0ZVJQQ0RlY29yYXRvciIsICJXZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlciIsICJSUENOYW1lTXVzdEJlU3RyaW5nIiwgIkNvbnRyb2xsZXJSUENzIiwgIlJQQ05hbWVNdXN0QmVVbmlxdWUiLCAiT25SZXF1ZXN0IiwgInJwY05hbWUiLCAiT25XZWJWaWV3UmVxdWVzdCIsICJjcmVhdGVUaW1lckRlY29yYXRvciIsICJUaW1lck5hbWVNdXN0QmVTdHJpbmciLCAiQ3JvbiIsICJwYXR0ZXJuIiwgIkV2ZXJ5VGljayIsICJJbnRlcnZhbCIsICJuYW1lT3JUaW1lb3V0IiwgImludGVydmFsVGltZW91dCIsICJUaW1lb3V0IiwgImFwcGx5RGVjb3JhdG9ycyIsICJkZWNvcmF0b3JzIiwgImRlY29yYXRvciIsICJGdW5jdGlvbiIsICJjcmVhdGVQYXJhbURlY29yYXRvciIsICJmYWN0b3J5IiwgIkN1c3RvbSIsICJmb3J3YXJkUmVmIiwgImZuIiwgIkxhenlTZXJ2aWNlSWRlbnRpZmllciIsICJtZXRhZGF0YUtleSIsICJnZXRBbGwiLCAidGFyZ2V0cyIsICJnZXRBbGxBbmRNZXJnZSIsICJtZXRhZGF0YUNvbGxlY3Rpb24iLCAiaXRlbSIsICJpc0VtcHR5IiwgInJlZHVjZSIsICJiIiwgImNvbmNhdCIsICJnZXRBbGxBbmRPdmVycmlkZSIsICJyZXN1bHQiLCAiY3JlYXRlRGVjb3JhdG9yIiwgImdlbmVyYXRlUmFuZG9tSWQiLCAiZGVjb3JhdG9yRm4iLCAibWV0YWRhdGFWYWx1ZSIsICJ0cmFuc2Zvcm0iLCAiJGV2ZXJ5dGlja3MiLCAiJGludGVydmFscyIsICIkdGltZW91dHMiLCAiJGNyb25zIiwgImNyb25PcHRpb25zIiwgImNyb25Kb2IiLCAiZXZlcnl0aWNrIiwgImdldEJ5TmFtZSIsICJnZXRCeUlkIiwgImluamVjdGFibGUiLCAiaW5qZWN0IiwgIkJhc2VFdmVudFNlcnZpY2UiLCAiJGxvY2FsSGFuZGxlcnMiLCAiU2V0IiwgIiRpbnRlcm5hbEhhbmRsZXJzIiwgIiRyZW1vdGVIYW5kbGVycyIsICIkaW50ZXJuYWxFdmVudE5hbWVzIiwgIiRldmVudEVtbWl0ZXIiLCAib24iLCAiZXZlbnROYW1lIiwgImNhbGxiYWNrIiwgIndyYXBwZXIiLCAiX19uYW1lIiwgImFyZ3MiLCAiZXZlbnRIYW5kbGVyIiwgImFkZCIsICJvbmNlIiwgImVtaXQiLCAiYm9keSIsICIkb25JbnRlcm5hbCIsICJoYW5kbGVyIiwgImhhcyIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZEludGVybmFsRXZlbnROYW1lIiwgIiRvbmNlSW50ZXJuYWwiLCAiQmFzZVJQQ1NlcnZpY2UiLCAiJGxvZ2dlclNlcnZpY2UiLCAiJFRJTUVPVVQiLCAiTWFwIiwgImNhbGwiLCAicnBjTmFtZSIsICJvcHRpb25zIiwgInRpbWVvdXQiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgImdldCIsICJSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EIiwgInRpbWVvdXRJZCIsICJzZXRUaW1lb3V0IiwgIlJQQ19SRVNVTFRfVElNRU9VVCIsICJyZXN1bHQiLCAiY2xlYXJUaW1lb3V0IiwgInN1Y2Nlc3MiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJTdWNjZXNzIiwgImVycm9yIiwgIk1hbmdvRXJyb3IiLCAibWVzc2FnZSIsICJkZXRhaWxzIiwgIlJQQ19SRVNVTFRfVU5LTk9XTiIsICJvblJlcXVlc3QiLCAiUlBDSGFuZGxlckFscmVhZHlFeGlzdHMiLCAicnBjSGFuZGxlciIsICJkZXN0cm95IiwgInZhbGlkIiwgImRlbGV0ZSIsICJzZXQiLCAiV0VCVklFV19TRVJWSUNFIiwgIldFQlZJRVdfTElTVF9TRVJWSUNFIiwgIkFERF9XRUJWSUVXIiwgIklOVEVSTkFMX0VWRU5UUyIsICJTQ1JJUFRfUlBDIiwgIlNDUklQVF9SUENfQU5TV0VSIiwgIktFWUJPQVJEX0VWRU5UIiwgIktFWV9VUCIsICJLRVlfRE9XTiIsICJXRUJfVklFV19FVkVOVCIsICJXRUJfU09DS0VUX0VWRU5UIiwgIkFVRElPX0VWRU5UIiwgIlJNTFVJX0VWRU5UIiwgIldJTkRPV19GT0NVU19DSEFOR0UiLCAiV0lORE9XX1JFU09MVVRJT05fQ0hBTkdFIiwgIkNPTk5FQ1RJT05fQ09NUExFVEUiLCAiRElTQ09OTkVDVCIsICJTUEFXTkVEIiwgIkdBTUVfRU5USVRZX0NSRUFURSIsICJHQU1FX0VOVElUWV9ERVNUUk9ZIiwgIkVOVElUWV9ISVRfRU5USVRZIiwgIlRBU0tfQ0hBTkdFIiwgIlBMQVlFUl9XRUFQT05fU0hPT1QiLCAiUExBWUVSX0JVTExFVF9ISVQiLCAiUExBWUVSX1dFQVBPTl9DSEFOR0UiLCAiUExBWUVSX1NUQVJUX1ZFSElDTEVfRU5URVIiLCAiUExBWUVSX1NUQVJUX1ZFSElDTEVfTEVBVkUiLCAiUExBWUVSX1ZFSElDTEVfRU5URVJFRCIsICJQTEFZRVJfVkVISUNMRV9MRUZUIiwgIlBMQVlFUl9WRUhJQ0xFX1NFQVRfQ0hBTkdFIiwgIlZPSUNFX0NPTk5FQ1RJT04iLCAiUExBWUVSX1NUQVJUX1RBTEtJTkciLCAiUExBWUVSX1NUT1BfVEFMS0lORyIsICJXT1JMRF9PQkpFQ1RfUE9TSVRJT05fQ0hBTkdFIiwgIldPUkxEX09CSkVDVF9TVFJFQU1fSU4iLCAiV09STERfT0JKRUNUX1NUUkVBTV9PVVQiLCAiRVZFTlQiLCAiQkFTRV9PQkpFQ1RfQ1JFQVRFIiwgIkJBU0VfT0JKRUNUX1JFTU9WRSIsICJORVRfT1dORVJfQ0hBTkdFIiwgIldFQVBPTl9EQU1BR0UiLCAiTUVUQV9DSEFOR0UiLCAiTE9DQUxfTUVUQV9DSEFOR0UiLCAiU1lOQ0VEX01FVEFfQ0hBTkdFIiwgIlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UiLCAiR0xPQkFMX01FVEFfQ0hBTkdFIiwgIkdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0UiLCAiRU5USVRZX0NPTF9TSEFQRV9FTlRFUiIsICJFTlRJVFlfQ09MX1NIQVBFX0xFQVZFIiwgIkVOVElUWV9DSEVDS1BPSU5UX0VOVEVSIiwgIkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFIiwgIkNPTF9TSEFQRV9FVkVOVCIsICJDT05TT0xFX0NPTU1BTkQiLCAiRVJST1IiLCAiTE9DQUxfU0NSSVBUX0VWRU5UIiwgIlJFTU9URV9TQ1JJUFRfRVZFTlQiLCAiUkVTT1VSQ0VfU1RBUlQiLCAiUkVTT1VSQ0VfU1RPUCIsICJSRVNPVVJDRV9FUlJPUiIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJEZWZhdWx0VmFsdWVQaXBlIiwgImRlZmF1bHRWYWx1ZSIsICJ0cmFuc2Zvcm0iLCAidmFsdWUiLCAiaXNOaWwiLCAiaXNOdW1iZXIiLCAiaXNOYU4iLCAiRXZlbnRNZWRpYXRvclBsdWdpbiIsICJldmVudFNlcnZpY2UiLCAid2ViVmlld1NlcnZpY2UiLCAibG9nZ2VyU2VydmljZSIsICJiZWZvcmVMb2FkIiwgInRpbWUiLCAiRGF0ZSIsICJub3ciLCAib25TZXJ2ZXIiLCAiYm9keSIsICJnZXQiLCAiaWQiLCAiZW1pdCIsICJldmVudE5hbWUiLCAicGF5bG9hZCIsICIkb25DcmVhdGUiLCAid2ViVmlldyIsICJvbiIsICJkYXRhIiwgIkpTT04iLCAicGFyc2UiLCAiZW1pdFNlcnZlciIsICJsb2ciLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiUlBDUGx1Z2luIiwgImV2ZW50U2VydmljZSIsICJ3ZWJWaWV3U2VydmljZSIsICJycGNTZXJ2aWNlIiwgImxvZ2dlclNlcnZpY2UiLCAiYmVmb3JlTG9hZCIsICJ0aW1lIiwgIkRhdGUiLCAibm93IiwgIm9uU2VydmVyIiwgInBheWxvYWQiLCAicnBjSGFuZGxlciIsICIkc2VydmVySGFuZGxlcnMiLCAiZ2V0IiwgInJwY05hbWUiLCAiaXNOaWwiLCAiZW1pdFNlcnZlciIsICJpZCIsICJSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EIiwgInJlc3VsdCIsICJoYW5kbGVyIiwgImJvZHkiLCAicnBjUmVzdWx0IiwgInN1Y2Nlc3MiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJTdWNjZXNzIiwgImVycm9yIiwgIk1hbmdvRXJyb3IiLCAibWVzc2FnZSIsICJkZXRhaWxzIiwgIlJQQ19SRVNVTFRfVU5LTk9XTiIsICIkb25DcmVhdGUiLCAid2ViVmlld0lkIiwgIndlYlZpZXciLCAib24iLCAidmFsaWQiLCAiJHdlYlZpZXdIYW5kbGVycyIsICJlbWl0IiwgImxvZyIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiQ2xpZW50RXZlbnRTZXJ2aWNlIiwgIkJhc2VFdmVudFNlcnZpY2UiLCAiJHdlYlZpZXdMaXN0U2VydmljZSIsICIkcmFnZUV2ZW50cyIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiRXZlbnRzIiwgIiRpbnRlcm5hbEV2ZW50TmFtZXMiLCAiU2V0IiwgIk9iamVjdCIsICJ2YWx1ZXMiLCAiSU5URVJOQUxfRVZFTlRTIiwgIm9uU2VydmVyIiwgImV2ZW50TmFtZSIsICJjYWxsYmFjayIsICJ3cmFwcGVyIiwgImFyZ3MiLCAiZXZlbnRIYW5kbGVyIiwgIiRyZW1vdGVIYW5kbGVycyIsICJhZGQiLCAib25jZVNlcnZlciIsICJlbWl0U2VydmVyIiwgImJvZHkiLCAib25XZWJWaWV3IiwgImlkIiwgIndlYlZpZXciLCAidHJ5R2V0IiwgImRlc3Ryb3kiLCAib2ZmIiwgIm9uIiwgIm9uY2VXZWJWaWV3IiwgIm9uY2UiLCAiZW1pdFdlYlZpZXciLCAiZW1pdCIsICJvblJlbmRlciIsICJvbkJyb3dzZXJEb21SZWFkeSIsICJvbkJyb3dzZXJMb2FkaW5nRmFpbGVkIiwgIm9uUGxheWVyQ2hhdCIsICJvblBsYXllckNvbW1hbmQiLCAib25QbGF5ZXJEZWF0aCIsICJvblBsYXllclNwYXduIiwgIm9uUGxheWVyRW50ZXJWZWhpY2xlIiwgIm9uUGxheWVyRXhpdFZlaGljbGUiLCAib25QbGF5ZXJFbnRlckNvbHNoYXBlIiwgIm9uUGxheWVyRXhpdENvbHNoYXBlIiwgIm9uUGxheWVyRW50ZXJDaGVja3BvaW50IiwgIm9uUGxheWVyRXhpdENoZWNrcG9pbnQiLCAiaW5qZWN0YWJsZSIsICJpbmplY3QiLCAiRXJyb3JNZXNzYWdlIiwgIkluamVjdGFibGVTY29wZSIsICJSUENSZXN1bHRTdGF0dXMiLCAiSU5URVJOQUxfQVBQX0NPTlRBSU5FUiIsICJHTE9CQUxfQVBQX0NPTlRBSU5FUiIsICJBUFBfRU5WSVJPTUVOVCIsICJHTE9CQUxfR1VBUkRTIiwgIkdMT0JBTF9JTlRFUkNFUFRPUlMiLCAiR0xPQkFMX1BJUEVTIiwgIkdMT0JBTF9FUlJPUl9GSUxURVJTIiwgIlBMVUdJTlMiLCAiRU5BQkxFX1NIVVRET1dOX0hPT0tTIiwgIkNPTlRBSU5FUl9PUFRJT05TIiwgIk1BTkdPX1JFUVVFU1RfRkFDVE9SWSIsICJNQU5HT19SRVNQT05TRV9GQUNUT1JZIiwgIkVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkiLCAiTVVMVElQTEFZRVJfU0VSVklDRSIsICJSUENfUkVTVUxUX1RJTUVPVVQiLCAic3VjY2VzcyIsICJlcnJvciIsICJtZXNzYWdlIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiVGltZW91dCIsICJSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EIiwgIkhhbmRsZXJOb3RGb3VuZCIsICJSUENfUkVTVUxUX1VOS05PV04iLCAiVW5rbm93biIsICJSUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQiLCAiUGxheWVyRGlzY29ubmVjdGVkIiwgIlJQQ19SRVNVTFRfUExBWUVSX05PVF9GT1VORCIsICJQbGF5ZXJOb3RGb3VuZCIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJnZW5lcmF0ZVJhbmRvbUlkIiwgIk1hdGgiLCAicmFuZG9tIiwgInRvU3RyaW5nIiwgInN1YnN0cmluZyIsICJpc1VuZGVmaW5lZCIsICJvYmoiLCAiaXNPYmplY3QiLCAiZm4iLCAiaXNOaWwiLCAiaXNGdW5jdGlvbiIsICJ2YWwiLCAiaXNTdHJpbmciLCAiaXNOaWwiLCAidmFsIiwgImlzVW5kZWZpbmVkIiwgImlzRW1wdHkiLCAiYXJyYXkiLCAibGVuZ3RoIiwgImlzU3ltYm9sIiwgImlzQXN5bmNGdW5jdGlvbiIsICJpc0Z1bmN0aW9uIiwgIm5hbWUiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiTWFuZ29FcnJvciIsICJFcnJvciIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlVua25vd24iLCAiZGV0YWlscyIsICJtZXNzYWdlIiwgIkd1YXJkQ2FuY2VsRXJyb3IiLCAiTWFuZ29FcnJvciIsICJSUENSZXN1bHRTdGF0dXMiLCAiQ2FuY2VsbGVkQnlHdWFyZCIsICJHdWFyZEludmFsaWRSZXR1cm5FcnJvciIsICJNYW5nb0Vycm9yIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJJbnZhbGlkR3VhcmRSZXR1cm4iLCAiTE9HR0VSX1NFUlZJQ0UiLCAiRVZFTlRfU0VSVklDRSIsICJSUENfU0VSVklDRSIsICJNT0RVTEVfQ09OVEFJTkVSIiwgIlJFRkxFQ1RPUl9TRVJWSUNFIiwgIlRJTUVSX1NFUlZJQ0UiLCAiUGlwZWxpbmVIYW5kbGVyIiwgImxvZ2dlclNlcnZpY2UiLCAiZ29Ucm91Z2hHdWFyZHMiLCAiZXhlY3V0aW9uQ29udGV4dCIsICJndWFyZHMiLCAiY29udGFpbmVyIiwgImd1YXJkIiwgImluc3RhbmNlIiwgImlzRnVuY3Rpb24iLCAiZ2V0IiwgImlzT2JqZWN0IiwgImlzTmlsIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkR3VhcmREZWZpbml0aW9uIiwgImNhbkFjdGl2YXRlIiwgImNhbGwiLCAiR3VhcmRJbnZhbGlkUmV0dXJuRXJyb3IiLCAiR3VhcmRDYW5jZWxFcnJvciIsICJnb1Rocm91Z2hJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3JzIiwgImNhbGxIYW5kbGVyIiwgImludGVyY2VwdG9yIiwgIkludmFsaWRJbnRlcmNlcHRvckRlZmluaXRpb24iLCAiaW50ZXJjZXB0IiwgImdvVHJvdWdoUGlwZXMiLCAidmFsdWUiLCAicGlwZXMiLCAiYXJndW1lbnRNZXRhZGF0YSIsICJwaXBlIiwgIkludmFsaWRQaXBlRGVmaW5pdGlvbiIsICJQcm9taXNlIiwgInJlc29sdmUiLCAidHJhbnNmb3JtIiwgIkFwcEVudmlyb21lbnQiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkV4ZWN1dGlvbkNvbnRleHRUeXBlIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkNvbnRyb2xsZXJGbG93SGFuZGxlciIsICJhcHBFbnYiLCAicGlwZWxpbmVIYW5kbGVyIiwgImNyZWF0ZUFyZ3MiLCAiY29udHJvbGxlciIsICJleGVjdXRpb25Db250ZXh0IiwgIm1ldGFkYXRhIiwgInBpcGVzIiwgInBsYXllciIsICJQcm9taXNlIiwgImFsbCIsICJwYXJhbXMiLCAibWFwIiwgInBhcmFtIiwgImFyZ3VtZW50TWV0YWRhdGEiLCAidHlwZSIsICJkYXRhIiwgIm1ldGF0eXBlIiwgImdvVHJvdWdoUGlwZXMiLCAicmVxdWVzdCIsICJib2R5IiwgIm93bmVyIiwgImNvbnRhaW5lciIsICJpc09iamVjdCIsICJ1bmRlZmluZWQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJmYWN0b3J5IiwgIkFwcEVudmlyb21lbnQiLCAiU2VydmVyIiwgIkNvbnRyb2xsZXJFdmVudEhhbmRsZXIiLCAiYXBwRW52IiwgIm11bHRpcGxheWVyU2VydmljZSIsICJldmVudFNlcnZpY2UiLCAiY29udHJvbGxlckZsb3dIYW5kbGVyIiwgInBpcGVsaW5lSGFuZGxlciIsICJsb2dnZXJTZXJ2aWNlIiwgImNyZWF0ZU1hbmdvUmVxdWVzdCIsICJjcmVhdGVFeGVjdXRpb25Db250ZXh0IiwgInJlZ2lzdGVyRXZlbnQiLCAiZ3VhcmRzIiwgImludGVyY2VwdG9ycyIsICJwaXBlcyIsICJtYXBwZWRFcnJvckZpbHRlcnMiLCAiY29udHJvbGxlciIsICJldmVudCIsICJ0eXBlIiwgIm5hbWUiLCAiYm9keSIsICJoYW5kbGVFdmVudCIsICJhcmdzIiwgInBsYXllciIsICJwYXJzZUludGVybmFsQXJncyIsICJ3ZWJWaWV3SWQiLCAiQXBwRW52aXJvbWVudCIsICJTZXJ2ZXIiLCAidW5kZWZpbmVkIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkRXZlbnRUeXBlIiwgInJlcXVlc3QiLCAiZXhlY3V0aW9uQ29udGV4dCIsICJFeGVjdXRpb25Db250ZXh0VHlwZSIsICJFdmVudCIsICJtZXRhZGF0YSIsICJjbGFzc1JlZiIsICJwcm90b3R5cGUiLCAibWV0aG9kIiwgImdvVHJvdWdoR3VhcmRzIiwgIm93bmVyIiwgImNvbnRhaW5lciIsICJjcmVhdGVBcmdzIiwgImNvbnRyb2xsZXJNZXRob2QiLCAiaW5zdGFuY2UiLCAiaGFuZGxlIiwgImlzQXN5bmNGdW5jdGlvbiIsICJhcHBseSIsICJjYWxsSGFuZGxlciIsICJyZXR1cm4iLCAiSW52YWxpZFJldHVybkluRXZlbnQiLCAibGVuZ3RoIiwgImdvVGhyb3VnaEludGVyY2VwdG9ycyIsICJlcnJvckdyb3VwIiwgImZpbmQiLCAiZXJyb3JUeXBlIiwgImlzRnVuY3Rpb24iLCAiaXNOaWwiLCAiZ2V0IiwgImlzT2JqZWN0IiwgIkludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24iLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgImNhdGNoIiwgImNhbGwiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgImFwcEVudiIsICJsb2dnZXJTZXJ2aWNlIiwgInJlYWQiLCAiY2xhc3NSZWYiLCAib3B0aW9ucyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDb250cm9sbGVyIiwgImV2ZW50cyIsICJnZXRFdmVudHMiLCAicnBjcyIsICJnZXRSUENzIiwgInRpbWVycyIsICJnZXRUaW1lcnMiLCAiZ2V0UGlwZWxpbmUiLCAiQ29udHJvbGxlckV2ZW50cyIsICJwcm90b3R5cGUiLCAibWFwIiwgImV2ZW50IiwgInBhcmFtcyIsICJnZXRNZXRob2RQYXJhbXMiLCAibWV0aG9kIiwgIkNvbnRyb2xsZXJSUENzIiwgInJwYyIsICJtZXRhZGF0YSIsICJDb250cm9sbGVyUGFyYW1zIiwgInNvcnQiLCAiYSIsICJiIiwgImluZGV4IiwgImZvckVhY2giLCAicGFyYW0iLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkludmFsaWRQYXJhbWV0ZXJEZWNvcmF0b3JVc2FnZSIsICJ0eXBlIiwgIlJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzIiwgIkFwcEVudmlyb21lbnQiLCAiQ2xpZW50IiwgIlBsYXllckRlY29yYXRvck5vdEFsbG93ZWRPbkNsaWVudEV2ZW50cyIsICJSUENOb3RBbGxvd2VkSW5DbGllbnQiLCAiU2VydmVyIiwgIlJQQ05vdEFsbG93ZWRJblNlcnZlciIsICJFdmVudE5vdEFsbG93ZWRJbkNsaWVudCIsICJFdmVudE5vdEFsbG93ZWRJblNlcnZlciIsICJ0YXJnZXQiLCAiZ3VhcmRzIiwgIkd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAiSW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIlBpcGVzIiwgImVycm9yRmlsdGVycyIsICJFcnJvckZpbHRlcnMiLCAiVGltZXJzIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkNvbnRyb2xsZXJSUENIYW5kbGVyIiwgImFwcEVudiIsICJycGNTZXJ2aWNlIiwgInBpcGVsaW5lSGFuZGxlciIsICJjb250cm9sbGVyRmxvd0hhbmRsZXIiLCAibG9nZ2VyU2VydmljZSIsICJjcmVhdGVNYW5nb1JlcXVlc3QiLCAiY3JlYXRlTWFuZ29SZXNwb25zZSIsICJjcmVhdGVFeGVjdXRpb25Db250ZXh0IiwgInJlZ2lzdGVyUlBDIiwgImd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAicGlwZXMiLCAibWFwcGVkRXJyb3JGaWx0ZXJzIiwgImNvbnRyb2xsZXIiLCAicnBjIiwgInR5cGUiLCAibmFtZSIsICJib2R5IiwgImhhbmRsZVJQQyIsICJwbGF5ZXIiLCAid2ViVmlld0lkIiwgImFyZ3MiLCAiQXBwRW52aXJvbWVudCIsICJTZXJ2ZXIiLCAidW5kZWZpbmVkIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkUlBDVHlwZSIsICJQcm9taXNlIiwgInJlc29sdmUiLCAicmVxdWVzdCIsICJyZXNwb25zZSIsICIkb25TZW5kIiwgImRhdGEiLCAiJG9uRXJyb3IiLCAiZXhlY3V0aW9uQ29udGV4dCIsICJFeGVjdXRpb25Db250ZXh0VHlwZSIsICJSUEMiLCAibWV0YWRhdGEiLCAiY2xhc3NSZWYiLCAicHJvdG90eXBlIiwgIm1ldGhvZCIsICJnb1Ryb3VnaEd1YXJkcyIsICJvd25lciIsICJjb250YWluZXIiLCAiY3JlYXRlQXJncyIsICJjb250cm9sbGVyTWV0aG9kIiwgImluc3RhbmNlIiwgImhhbmRsZSIsICJpc0FzeW5jRnVuY3Rpb24iLCAib3B0aW9ucyIsICJzZW5kIiwgInJlc3VsdCIsICJhcHBseSIsICJjYWxsSGFuZGxlciIsICJyZXR1cm4iLCAidmFsdWUiLCAibGVuZ3RoIiwgImdvVGhyb3VnaEludGVyY2VwdG9ycyIsICJlcnJvckdyb3VwIiwgImZpbmQiLCAiZXJyb3JUeXBlIiwgImlzRnVuY3Rpb24iLCAiaXNOaWwiLCAiZ2V0IiwgImlzT2JqZWN0IiwgIkludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24iLCAiY2F0Y2giLCAiY2FsbCIsICJpbmplY3RhYmxlIiwgIkNvbnRyb2xsZXIiLCAibWV0YWRhdGEiLCAiaW5zdGFuY2UiLCAib3duZXIiLCAiZXZlbnRIYW5kbGVycyIsICJycGNIYW5kbGVycyIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJNb2R1bGVNZXRhZGF0YVJlYWRlciIsICJsb2dnZXJTZXJ2aWNlIiwgInJlYWQiLCAibW9kdWxlIiwgImlzRnVuY3Rpb24iLCAib3B0aW9ucyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJNb2R1bGUiLCAiZXhwb3J0VG9rZW5zIiwgImdldEV4cG9ydFRva2VucyIsICJleHBvcnRzIiwgInNlcGFyYXRlZFByb3ZpZGVycyIsICJzZXBhcmF0ZVByb3ZpZGVycyIsICJwcm92aWRlcnMiLCAiY29udHJvbGxlcnMiLCAiaW1wb3J0cyIsICJnZXRQaXBlbGluZSIsICJjbGFzc1JlZiIsICJnbG9iYWwiLCAiR2xvYmFsTW9kdWxlIiwgImNvbnRhaW5lciIsICJQcm9taXNlIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkTW9kdWxlRGVmaW5pdGlvbiIsICJndWFyZHMiLCAiR3VhcmRzIiwgImludGVyY2VwdG9ycyIsICJJbnRlcmNlcHRvcnMiLCAicGlwZXMiLCAiUGlwZXMiLCAiZXJyb3JGaWx0ZXJzIiwgIkVycm9yRmlsdGVycyIsICJtYXAiLCAicHJvdmlkZXJFeHBvcnQiLCAiaGFzT3duTWV0YWRhdGEiLCAiSW5qZWN0YWJsZSIsICJJbnZhbGlkRXhwb3J0RGVmaW5pdGlvbiIsICJpc1N0cmluZyIsICJpc1N5bWJvbCIsICJwcm92aWRlIiwgInByb3ZpZGVyIiwgImluamVjdGFibGVNZXRhZGF0YSIsICJpc05pbCIsICJJbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uIiwgInVzZUNsYXNzIiwgInNjb3BlIiwgInJlZHVjZSIsICJhY2MiLCAiaW5jbHVkZXMiLCAiZXh0ZXJuYWxQcm92aWRlcnMiLCAic2V0IiwgImludGVybmFsUHJvdmlkZXJzIiwgIk1hcCIsICJDb250YWluZXIiLCAiTW9kdWxlQ29udGFpbmVyIiwgIkNvbnRhaW5lciIsICJpbmplY3RhYmxlIiwgIk1vZHVsZSIsICJjb250cm9sbGVycyIsICJjb250YWluZXIiLCAicGFyZW50IiwgIm1ldGFkYXRhIiwgImluc3RhbmNlIiwgInJlcGV0aXRpdmVJbXBvcnRzIiwgIlNldCIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJvcHRpb25hbCIsICJBcHBSdW50aW1lIiwgImV2ZW50SGFuZGxlciIsICJycGNIYW5kbGVyIiwgImdsb2JhbEd1YXJkcyIsICJnbG9iYWxJbnRlcmNlcHRvcnMiLCAiZ2xvYmFsUGlwZXMiLCAiZ2xvYmFsRXJyb3JGaWx0ZXJzIiwgImxvZ2dlclNlcnZpY2UiLCAiZW5hYmxlU2h1dGRvd25Ib29rcyIsICJib290IiwgInJlc29sdmVkVHJlZSIsICJhc3luY1RyYXZlcnNlIiwgIm5vZGUiLCAic3RhcnRUaW1lIiwgIkRhdGUiLCAibm93IiwgIm1vZHVsZSIsICJ2YWx1ZSIsICJpbnN0YW5jZSIsICJjb250YWluZXIiLCAiZ2V0IiwgIm1ldGFkYXRhIiwgImNsYXNzUmVmIiwgImNvbnRyb2xsZXJzIiwgImZvckVhY2giLCAiY29udHJvbGxlciIsICJpbnRlcm5hbFByb3ZpZGVycyIsICJleHRlcm5hbFByb3ZpZGVycyIsICJ0b2tlbiIsICJsb2ciLCAibmFtZSIsICJydW5MaWZlY3ljbGVNZXRob2QiLCAicnVuTGlmZWN5Y2xlTWV0aG9kcyIsICJ0cmF2ZXJzZSIsICJ0aW1lIiwgInJlZ2lzdGVyVGltZXJzIiwgInJlZ2lzdGVyTGlzdGVuZXJzIiwgInNodXRkb3duIiwgInRpbWVyU2VydmljZSIsICJvd25lciIsICJUSU1FUl9TRVJWSUNFIiwgImV2ZXJ5dGlja3MiLCAidGltZXIiLCAiZGVzdHJveSIsICJpbnRlcnZhbHMiLCAidGltZW91dHMiLCAiY3JvbnMiLCAiY3JvbiIsICJzdG9wIiwgImV2ZW50SGFuZGxlcnMiLCAiaGFuZGxlciIsICJycGNIYW5kbGVycyIsICJldmVudHMiLCAiZXZlbnQiLCAiZ3VhcmRzIiwgImludGVyY2VwdG9ycyIsICJwaXBlcyIsICJtYXBwZWRFcnJvckZpbHRlcnMiLCAibWFwRXJyb3JGaWx0ZXJzIiwgImVycm9yRmlsdGVycyIsICJyZWdpc3RlckV2ZW50IiwgInB1c2giLCAicnBjcyIsICJycGMiLCAicmVnaXN0ZXJSUEMiLCAidGltZXJzIiwgInR5cGUiLCAiY3JlYXRlQ3JvbkpvYiIsICJtZXRob2QiLCAiYmluZCIsICJvcHRpb25zIiwgImNyZWF0ZUV2ZXJ5VGljayIsICJjcmVhdGVJbnRlcnZhbCIsICJ0aW1lb3V0IiwgImNyZWF0ZVRpbWVvdXQiLCAiZmlsdGVyTWFwIiwgImZpbHRlciIsICJlcnJvcnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ2F0Y2giLCAibGVuZ3RoIiwgImVycm9yIiwgImlzTmlsIiwgImZpbmQiLCAiZmlsdGVyRXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlciIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAiaXNPYmplY3QiLCAicHJvdmlkZXJJbnN0YW5jZSIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAib3B0aW9uYWwiLCAiaW5qZWN0YWJsZSIsICJ2YWxpZGF0ZUVycm9yRmlsdGVyIiwgInZhbHVlIiwgImlzTmlsIiwgInZhbGlkIiwgImVycm9yIiwgImlzRnVuY3Rpb24iLCAiaXNPYmplY3QiLCAicHJvdG90eXBlIiwgImNhdGNoIiwgInZhbGlkYXRlUGlwZSIsICJ2YWx1ZSIsICJpc05pbCIsICJ2YWxpZCIsICJlcnJvciIsICJpc0Z1bmN0aW9uIiwgImlzT2JqZWN0IiwgInByb3RvdHlwZSIsICJ0cmFuc2Zvcm0iLCAidmFsaWRhdGVHdWFyZCIsICJ2YWx1ZSIsICJpc05pbCIsICJ2YWxpZCIsICJlcnJvciIsICJpc0Z1bmN0aW9uIiwgImlzT2JqZWN0IiwgInByb3RvdHlwZSIsICJjYW5BY3RpdmF0ZSIsICJ2YWxpZGF0ZUludGVyY2VwdG9yIiwgInZhbHVlIiwgImlzTmlsIiwgInZhbGlkIiwgImVycm9yIiwgImlzRnVuY3Rpb24iLCAiaXNPYmplY3QiLCAicHJvdG90eXBlIiwgImludGVyY2VwdCIsICJkZWZhdWx0SW5qZWN0YWJsZU9wdGlvbnMiLCAic2NvcGUiLCAiSW5qZWN0YWJsZVNjb3BlIiwgIlNpbmdsZXRvbiIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgImluamVjdGFibGUiLCAib3B0aW9uYWwiLCAiU2V0TWV0YWRhdGEiLCAia2V5IiwgInZhbHVlIiwgImRlY29yYXRvckZhY3RvcnkiLCAidGFyZ2V0IiwgIl9tZXRob2QiLCAiZGVzY3JpcHRvciIsICJSZWZsZWN0IiwgImRlZmluZU1ldGFkYXRhIiwgIktFWSIsICJMYXp5U2VydmljZUlkZW50aWZpZXIiLCAiUmVmbGVjdG9yU2VydmljZSIsICJnZXQiLCAibWV0YWRhdGFLZXkiLCAidGFyZ2V0IiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiZ2V0QWxsIiwgInRhcmdldHMiLCAibWFwIiwgImdldEFsbEFuZE1lcmdlIiwgIm1ldGFkYXRhQ29sbGVjdGlvbiIsICJmaWx0ZXIiLCAiaXRlbSIsICJ1bmRlZmluZWQiLCAiaXNFbXB0eSIsICJyZWR1Y2UiLCAiYSIsICJiIiwgIkFycmF5IiwgImlzQXJyYXkiLCAiY29uY2F0IiwgImlzT2JqZWN0IiwgImdldEFsbEFuZE92ZXJyaWRlIiwgInJlc3VsdCIsICJjcmVhdGVEZWNvcmF0b3IiLCAib3B0aW9ucyIsICJrZXkiLCAiZ2VuZXJhdGVSYW5kb21JZCIsICJkZWNvcmF0b3JGbiIsICJtZXRhZGF0YVZhbHVlIiwgImRlc2NyaXB0b3IiLCAidmFsdWUiLCAidHJhbnNmb3JtIiwgIlNldE1ldGFkYXRhIiwgIktFWSIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJUaW1lclNlcnZpY2UiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIiRldmVyeXRpY2tzIiwgIk1hcCIsICIkaW50ZXJ2YWxzIiwgIiR0aW1lb3V0cyIsICIkY3JvbnMiLCAiYWxsIiwgIlRpbWVycyIsICJldmVyeXRpY2tzIiwgInZhbHVlcyIsICJpbnRlcnZhbHMiLCAidGltZW91dHMiLCAiY3JvbnMiLCAid2FybmluZ1RocmVzaG9sZCIsICJ2YWx1ZSIsICJzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50IiwgImNyZWF0ZUNyb25Kb2IiLCAiY2FsbGJhY2siLCAib3B0aW9ucyIsICJwYXR0ZXJuIiwgImNyb25PcHRpb25zIiwgImNyb24iLCAiQ3JvbiIsICJpc1N0cmluZyIsICJuYW1lIiwgInNldCIsICJjcmVhdGVJbnRlcnZhbCIsICJpbnRlcnZhbCIsICJ0aW1lciIsICJzZXRJbnRlcnZhbCIsICJjcmVhdGVUaW1lb3V0IiwgInRpbWVvdXQiLCAic2V0VGltZW91dCIsICJjcmVhdGVFdmVyeVRpY2siLCAiZXZlcnlUaWNrIiwgImRlbGV0ZSIsICJ0eXBlIiwgImNyb25Kb2IiLCAiZ2V0IiwgInN0b3AiLCAiZXZlcnl0aWNrIiwgImRlc3Ryb3kiLCAiZ2V0QnlOYW1lIiwgImdldEJ5SWQiLCAiaWQiLCAiZ2V0QnlJRCIsICJ0aW1lIiwgInRpbWVFbmQiLCAiTW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJnbG9iYWxBcHBDb250YWluZXIiLCAibG9nZ2VyU2VydmljZSIsICJjb250YWluZXJPcHRpb25zIiwgImJpbmQiLCAicmVzb2x2ZWRUcmVlIiwgImFzeW5jVHJhdmVyc2UiLCAibm9kZSIsICJzdGFydFRpbWUiLCAiRGF0ZSIsICJub3ciLCAibW9kdWxlIiwgInZhbHVlIiwgImNvbnRhaW5lciIsICJNb2R1bGVDb250YWluZXIiLCAibWV0YWRhdGEiLCAicGFyZW50IiwgImNsYXNzUmVmIiwgInRvU2VsZiIsICJpblNpbmdsZXRvblNjb3BlIiwgImdsb2JhbCIsICJfIiwgInByb3ZpZGVyIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgImJpbmRQcm92aWRlciIsICJ0b2tlbiIsICJ0b0R5bmFtaWNWYWx1ZSIsICJnZXQiLCAiaW1wb3J0TW9kdWxlIiwgInJlcGV0aXRpdmVJbXBvcnRzIiwgImludGVybmFsUHJvdmlkZXJzIiwgIk1PRFVMRV9DT05UQUlORVIiLCAidG9Db25zdGFudFZhbHVlIiwgImNvbnRyb2xsZXJzIiwgIlRJTUVSX1NFUlZJQ0UiLCAidG8iLCAiVGltZXJTZXJ2aWNlIiwgImxvZyIsICJuYW1lIiwgInByb3ZpZGUiLCAidXNlVmFsdWUiLCAiYmluZGluZyIsICJjdHgiLCAiZGVwcyIsICJpbmplY3QiLCAibWFwIiwgImRlcCIsICJpc09iamVjdCIsICJlcnIiLCAib3B0aW9uYWwiLCAidW5kZWZpbmVkIiwgImVycm9yIiwgInVzZUZhY3RvcnkiLCAic2NvcGUiLCAiaW5UcmFuc2llbnRTY29wZSIsICJpblJlcXVlc3RTY29wZSIsICJ1c2VDbGFzcyIsICJ0b1NlcnZpY2UiLCAidXNlRXhpc3RpbmciLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiVHJlZU5vZGUiLCAidmFsdWUiLCAiY2hpbGRyZW4iLCAiYWRkQ2hpbGQiLCAiY2hpbGQiLCAicHVzaCIsICJyZW1vdmVDaGlsZCIsICJpbmRleCIsICJpbmRleE9mIiwgInNwbGljZSIsICJUcmVlIiwgInJvb3QiLCAidHJhdmVyc2UiLCAiY2FsbGJhY2siLCAidHJhdmVyc2VOb2RlIiwgIm5vZGUiLCAiZm9yRWFjaCIsICJhc3luY1RyYXZlcnNlIiwgIlByb21pc2UiLCAiYWxsIiwgIm1hcCIsICJ0b1N0cmluZyIsICJyZXN1bHQiLCAibGluZXMiLCAiZGVwdGgiLCAicmVwZWF0IiwgImpvaW4iLCAiTW9kdWxlVHJlZVNjYW5uZXIiLCAibW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAiY29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgImxvZ2dlclNlcnZpY2UiLCAic2NhbiIsICJjbGFzc1JlZiIsICJzdGFydFRpbWUiLCAiRGF0ZSIsICJub3ciLCAibW9kdWxlTWV0YWRhdGEiLCAicmVhZCIsICJtb2R1bGUiLCAiTW9kdWxlIiwgIm1ldGFkYXRhIiwgImxvZyIsICJuYW1lIiwgInNjYW5Db250cm9sbGVycyIsICJtb2R1bGVUcmVlIiwgIlRyZWUiLCAic2Nhbm5lZE1vZHVsZXMiLCAiTWFwIiwgInNldCIsICJpbXBvcnRlZE1vZHVsZSIsICJpbXBvcnRzIiwgInNjYW5Nb2R1bGVzIiwgInJvb3QiLCAicGFyZW50Tm9kZSIsICJzY2FubmVkTW9kdWxlIiwgImdldCIsICJpc05pbCIsICJ2YWx1ZSIsICJyZXBldGl0aXZlSW1wb3J0cyIsICJhZGQiLCAiY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kiLCAicGFyZW50IiwgInRyZWVOb2RlIiwgIlRyZWVOb2RlIiwgImFkZENoaWxkIiwgImltcG9ydE1vZHVsZSIsICJjb250cm9sbGVycyIsICJjb250cm9sbGVyTWV0YWRhdGEiLCAiY29udHJvbGxlciIsICJDb250cm9sbGVyIiwgIm93bmVyIiwgInB1c2giLCAicGFyZW50TWV0YWRhdGEiLCAiaW5jbHVkZXMiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkNpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkIiwgImluamVjdGFibGUiLCAiRXhlY3V0aW9uQ29udGV4dEJhc2UiLCAiJHR5cGUiLCAiJGNsYXNzUmVmIiwgIiRoYW5kbGVyIiwgIiRyZXF1ZXN0IiwgIiRyZXNwb25zZSIsICIkbmFtZSIsICJ0eXBlIiwgImNsYXNzUmVmIiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJyZXNwb25zZSIsICJuYW1lIiwgImluamVjdGFibGUiLCAiTWFuZ29SZXF1ZXN0QmFzZSIsICIkYm9keSIsICIkcGxheWVyIiwgImJvZHkiLCAicGxheWVyIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIk1hbmdvUmVzcG9uc2VCYXNlIiwgIiRsb2dnZXJTZXJ2aWNlIiwgIiRzZW5kTGlzdGVuZXJzIiwgIlNldCIsICIkZXJyb3JMaXN0ZW5lcnMiLCAiJGlzU2VudCIsICJzZW5kIiwgImRhdGEiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIlJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQiLCAiZm9yRWFjaCIsICJsaXN0ZW5lciIsICJtZXNzYWdlIiwgImRldGFpbHMiLCAiJG9uU2VuZCIsICJhZGQiLCAiJG9uRXJyb3IiLCAiaW5qZWN0YWJsZSIsICJCYXNlRXZlbnRTZXJ2aWNlIiwgIiRsb2NhbEhhbmRsZXJzIiwgIlNldCIsICIkaW50ZXJuYWxIYW5kbGVycyIsICIkcmVtb3RlSGFuZGxlcnMiLCAiJGludGVybmFsRXZlbnROYW1lcyIsICIkZXZlbnRFbW1pdGVyIiwgIm9uIiwgImV2ZW50TmFtZSIsICJjYWxsYmFjayIsICJ3cmFwcGVyIiwgImFyZ3MiLCAiZXZlbnRIYW5kbGVyIiwgImFkZCIsICJvbmNlIiwgImVtaXQiLCAiYm9keSIsICIkb25JbnRlcm5hbCIsICJoYW5kbGVyIiwgImhhcyIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZEludGVybmFsRXZlbnROYW1lIiwgIiRvbmNlSW50ZXJuYWwiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiQmFzZVJQQ1NlcnZpY2UiLCAiJGxvZ2dlclNlcnZpY2UiLCAiJFRJTUVPVVQiLCAiJGxvY2FsSGFuZGxlcnMiLCAiTWFwIiwgImNhbGwiLCAicnBjTmFtZSIsICJib2R5IiwgIm9wdGlvbnMiLCAidGltZW91dCIsICJQcm9taXNlIiwgInJlc29sdmUiLCAiaGFuZGxlciIsICJnZXQiLCAiUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCIsICJ0aW1lb3V0SWQiLCAic2V0VGltZW91dCIsICJSUENfUkVTVUxUX1RJTUVPVVQiLCAicmVzdWx0IiwgImNsZWFyVGltZW91dCIsICJzdWNjZXNzIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiU3VjY2VzcyIsICJlcnJvciIsICJNYW5nb0Vycm9yIiwgIm1lc3NhZ2UiLCAiZGV0YWlscyIsICJSUENfUkVTVUxUX1VOS05PV04iLCAib25SZXF1ZXN0IiwgImhhcyIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiUlBDSGFuZGxlckFscmVhZHlFeGlzdHMiLCAicnBjSGFuZGxlciIsICJkZXN0cm95IiwgInZhbGlkIiwgImRlbGV0ZSIsICJzZXQiLCAiaW5qZWN0IiwgIkNvbnRhaW5lciIsICJpbmplY3RhYmxlIiwgIkNvbnRhaW5lciIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJBcHAiLCAibW9kdWxlVHJlZVNjYW5uZXIiLCAibW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJhcHBSdW50aW1lIiwgImludGVybmFsQXBwQ29udGFpbmVyIiwgInBsdWdpbnMiLCAibG9nZ2VyU2VydmljZSIsICJtb2R1bGVUcmVlIiwgImxvYWRlZCIsICJzdGFydCIsICJyb290TW9kdWxlIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJBcHBBbHJlYWR5TG9hZGVkIiwgImxvZyIsICJydW5QbHVnaW5NZXRob2RzIiwgInNjYW4iLCAiYmluZCIsICJib290IiwgInN0b3AiLCAiQXBwTm90TG9hZGVkIiwgInNodXRkb3duIiwgIm1ldGhvZCIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAicCIsICJwbHVnaW4iLCAiZ2V0IiwgInJlc29sdmUiLCAiQXBwQnVpbGRlciIsICJlbnZpcm9tZW50IiwgImludGVybmFsQXBwQ29udGFpbmVyIiwgIm11bHRpcGxheWVyU2VydmljZSIsICJwbHVnaW5zIiwgImdsb2JhbENvbnRhaW5lck9wdGlvbnMiLCAidXNlR2xvYmFsR3VhcmRzIiwgImd1YXJkcyIsICJ2YWxpZGF0ZWRHdWFyZHMiLCAiZ3VhcmQiLCAidmFsaWQiLCAidmFsdWUiLCAiZXJyb3IiLCAidmFsaWRhdGVHdWFyZCIsICJFcnJvciIsICJwdXNoIiwgImJpbmQiLCAiR0xPQkFMX0dVQVJEUyIsICJ0b0NvbnN0YW50VmFsdWUiLCAidXNlR2xvYmFsSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9ycyIsICJ2YWxpZGF0ZWRJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3IiLCAidmFsaWRhdGVJbnRlcmNlcHRvciIsICJHTE9CQUxfSU5URVJDRVBUT1JTIiwgInVzZUdsb2JhbFBpcGVzIiwgInBpcGVzIiwgInZhbGlkYXRlZFBpcGVzIiwgInBpcGUiLCAidmFsaWRhdGVQaXBlIiwgIkdMT0JBTF9QSVBFUyIsICJ1c2VHbG9iYWxGaWx0ZXJzIiwgImZpbHRlcnMiLCAidmFsaWRhdGVkRklsdGVycyIsICJmaWx0ZXIiLCAidmFsaWRhdGVFcnJvckZpbHRlciIsICJHTE9CQUxfRVJST1JfRklMVEVSUyIsICJ1c2VQbHVnaW5zIiwgImZvckVhY2giLCAicCIsICJ0b1NlbGYiLCAiaW5TaW5nbGV0b25TY29wZSIsICJpbnRlcm5hbFBsdWdpbnMiLCAiZ2V0IiwgIlBMVUdJTlMiLCAicmViaW5kIiwgImVuYWJsZVNodXRkb3duSG9va3MiLCAiRU5BQkxFX1NIVVRET1dOX0hPT0tTIiwgInNldENvbnRhaW5lck9wdGlvbnMiLCAib3B0aW9ucyIsICJvbmx5R2xvYmFsIiwgIkNPTlRBSU5FUl9PUFRJT05TIiwgImJ1aWxkIiwgImdsb2JhbEFwcENvbnRhaW5lciIsICJDb250YWluZXIiLCAiUkVGTEVDVE9SX1NFUlZJQ0UiLCAiUmVmbGVjdG9yU2VydmljZSIsICJ0b1NlcnZpY2UiLCAiTVVMVElQTEFZRVJfU0VSVklDRSIsICJBcHAiLCAiR0xPQkFMX0FQUF9DT05UQUlORVIiLCAiTW9kdWxlVHJlZVNjYW5uZXIiLCAiTW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJBcHBSdW50aW1lIiwgIlBpcGVsaW5lSGFuZGxlciIsICJNb2R1bGUiLCAiaW5UcmFuc2llbnRTY29wZSIsICJNb2R1bGVNZXRhZGF0YVJlYWRlciIsICJDb250cm9sbGVyIiwgIkNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciIsICJDb250cm9sbGVyRmxvd0hhbmRsZXIiLCAiQ29udHJvbGxlckV2ZW50SGFuZGxlciIsICJDb250cm9sbGVyUlBDSGFuZGxlciIsICJNYW5nb1JlcXVlc3RCYXNlIiwgIk1BTkdPX1JFUVVFU1RfRkFDVE9SWSIsICJ0b0ZhY3RvcnkiLCAiY29udGV4dCIsICJib2R5IiwgInBsYXllciIsICJyZXF1ZXN0IiwgImNvbnRhaW5lciIsICIkYm9keSIsICIkcGxheWVyIiwgIk1hbmdvUmVzcG9uc2VCYXNlIiwgIk1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkiLCAiRXhlY3V0aW9uQ29udGV4dEJhc2UiLCAiRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSIsICJ0eXBlIiwgImNsYXNzUmVmIiwgImhhbmRsZXIiLCAicmVzcG9uc2UiLCAibmFtZSIsICJleGVjdXRpb25Db250ZXh0IiwgIiR0eXBlIiwgIiRyZXF1ZXN0IiwgIiRyZXNwb25zZSIsICIkaGFuZGxlciIsICIkY2xhc3NSZWYiLCAiJG5hbWUiLCAicGx1Z2luIiwgInBsdWdpbkluc3RhbmNlIiwgIm9uQnVpbGQiLCAiaXNCb3VuZCIsICJDb250YWluZXIiLCAiQ2xpZW50TG9nZ2VyU2VydmljZSIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAibG9nIiwgImFyZ3MiLCAiTUFOR09fTE9HX1BSRUZJWCIsICJ3YXJuIiwgImxvZ1dhcm5pbmciLCAiZXJyb3IiLCAibG9nRXJyb3IiLCAiZGVidWciLCAibG9nRGVidWciLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiQ2xpZW50UlBDU2VydmljZSIsICJCYXNlUlBDU2VydmljZSIsICIkZXZlbnRTZXJ2aWNlIiwgIiRzZXJ2ZXJIYW5kbGVycyIsICJNYXAiLCAiJHdlYlZpZXdIYW5kbGVycyIsICJjYWxsU2VydmVyIiwgInJwY05hbWUiLCAiYm9keSIsICJvcHRpb25zIiwgInRpbWVvdXQiLCAiJFRJTUVPVVQiLCAiJGhhbmRsZUNhbGwiLCAiRXZlbnREZXN0aW5hdGlvbiIsICJTZXJ2ZXIiLCAib25TZXJ2ZXJSZXF1ZXN0IiwgImhhbmRsZXIiLCAiaGFzIiwgIiRsb2dnZXJTZXJ2aWNlIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJSUENIYW5kbGVyQWxyZWFkeUV4aXN0cyIsICJycGNIYW5kbGVyIiwgImRlc3Ryb3kiLCAidmFsaWQiLCAiZGVsZXRlIiwgInNldCIsICJjYWxsV2ViVmlldyIsICJpZCIsICJXZWJWaWV3IiwgIm9uV2ViVmlld1JlcXVlc3QiLCAia2V5IiwgImRlc3RpbmF0aW9uIiwgIndlYlZpZXdJZCIsICJQcm9taXNlIiwgInJlc29sdmUiLCAiY2FsbElkIiwgImdlbmVyYXRlUmFuZG9tSWQiLCAidGltZW91dElkIiwgIm9uY2VIYW5kbGUiLCAicmVzdWx0RGF0YSIsICJjbGVhclRpbWVvdXQiLCAiZXZlbnRIYW5kbGVyIiwgIm9uY2VXZWJWaWV3IiwgIm9uY2VTZXJ2ZXIiLCAicGF5bG9hZCIsICJzb3VyY2UiLCAiQ2xpZW50IiwgImVtaXRXZWJWaWV3IiwgImVtaXRTZXJ2ZXIiLCAic2V0VGltZW91dCIsICJSUENfUkVTVUxUX1RJTUVPVVQiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiV2ViVmlld0xpc3RTZXJ2aWNlIiwgIiRsb2dnZXJTZXJ2aWNlIiwgIiR3ZWJWaWV3cyIsICJNYXAiLCAic2V0IiwgImlkIiwgIndlYlZpZXciLCAiZ2V0IiwgInRyeUdldCIsICJpc05pbCIsICJ2YWxpZCIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiV2ViVmlld05vdEZvdW5kIiwgImRlbGV0ZSIsICJkZXN0cm95IiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkNsaWVudFdlYlZpZXdTZXJ2aWNlIiwgIiRsb2dnZXJTZXJ2aWNlIiwgIiR3ZWJWaWV3TGlzdFNlcnZpY2UiLCAibXVsdGlwbGF5ZXIiLCAiJGNyZWF0ZUxpc3RlbmVycyIsICJjcmVhdGUiLCAiaWQiLCAib3B0aW9ucyIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiV2ViVmlld0lkTXVzdEJlU3RyaW5nT3JOdW1iZXIiLCAid2ViVmlldyIsICJXZWJWaWV3IiwgInNldCIsICJmb3JFYWNoIiwgImxpc3RlbmVyIiwgImdldCIsICJ0cnlHZXQiLCAiZGVzdHJveSIsICJkZWxldGUiLCAiJG9uQ3JlYXRlIiwgInB1c2giLCAiU2VydmljZUJpbmRlclBsdWdpbiIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJnbG9iYWxBcHBDb250YWluZXIiLCAib25CdWlsZCIsICJ0aW1lIiwgIkRhdGUiLCAibm93IiwgImJpbmQiLCAiTE9HR0VSX1NFUlZJQ0UiLCAidG8iLCAiQ2xpZW50TG9nZ2VyU2VydmljZSIsICJpblNpbmdsZXRvblNjb3BlIiwgIkVWRU5UX1NFUlZJQ0UiLCAiQ2xpZW50RXZlbnRTZXJ2aWNlIiwgIlJQQ19TRVJWSUNFIiwgIkNsaWVudFJQQ1NlcnZpY2UiLCAiV0VCVklFV19TRVJWSUNFIiwgIkNsaWVudFdlYlZpZXdTZXJ2aWNlIiwgIldFQlZJRVdfTElTVF9TRVJWSUNFIiwgIldlYlZpZXdMaXN0U2VydmljZSIsICJ0b0NvbnN0YW50VmFsdWUiLCAiZ2V0IiwgImxvZ2dlclNlcnZpY2UiLCAibG9nIiwgIkNvbnRhaW5lciIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJXZWJWaWV3UGx1Z2luIiwgImludGVybmFsQXBwQ29udGFpbmVyIiwgIndlYlZpZXdTZXJ2aWNlIiwgImxvZ2dlclNlcnZpY2UiLCAiYmVmb3JlTG9hZCIsICJ0aW1lIiwgIkRhdGUiLCAibm93IiwgImFkZFdlYlZpZXdzIiwgImlzQm91bmQiLCAiQUREX1dFQlZJRVciLCAiZ2V0IiwgImxlbmd0aCIsICJmb3JFYWNoIiwgIndlYlZpZXciLCAiY3JlYXRlIiwgImlkIiwgIm9wdGlvbnMiLCAibG9nIiwgIlJhZ2VNUENsaWVudFNjcmlwdEV2ZW50IiwgImV2ZW50TmFtZSIsICJsaXN0ZW5lciIsICJkZXN0cm95IiwgIm1wIiwgImV2ZW50cyIsICJyZW1vdmUiLCAiQ2xpZW50UmFnZU1QRXZlbnRFbW1pdGVyIiwgIm1hcEV2ZW50c1NoYXJlZCIsICJtYXBFdmVudHMiLCAiZ2V0RXZlbnROYW1lIiwgImV2ZW50TmFtZSIsICJlbWl0IiwgImFyZ3MiLCAibXAiLCAiZXZlbnRzIiwgImNhbGwiLCAib24iLCAibGlzdGVuZXIiLCAibWFwcGVkRXZlbnROYW1lIiwgImFkZCIsICJSYWdlTVBDbGllbnRTY3JpcHRFdmVudCIsICJvbmNlIiwgIm9uY2VXcmFwcGVyIiwgInJlbW92ZSIsICJvZmYiLCAiZW1pdFNlcnZlciIsICJjYWxsUmVtb3RlIiwgIm9uU2VydmVyIiwgIm9uY2VTZXJ2ZXIiLCAib2ZmU2VydmVyIiwgIlJhZ2VNUFdlYlZpZXciLCAiZXZlbnRMaXN0ZW5lcnMiLCAiTWFwIiwgIiRyYXciLCAidmFsaWQiLCAidW5kZWZpbmVkIiwgImRlc3Ryb3kiLCAidXJsIiwgInZhbHVlIiwgInZpc2libGUiLCAiYWN0aXZlIiwgImVtaXQiLCAiZXZlbnROYW1lIiwgImFyZ3MiLCAiY2FsbCIsICJlbWl0UmF3IiwgInJlbG9hZCIsICJpZ25vcmVDYWNoZSIsICJvbiIsICJsaXN0ZW5lciIsICJoYXMiLCAic2V0IiwgIlNldCIsICJnZXQiLCAiYWRkIiwgImxpc3RlbmVycyIsICJzaXplIiwgIm1wIiwgImV2ZW50cyIsICJsIiwgIm9uY2UiLCAib25jZVdyYXBwZXIiLCAib2ZmIiwgImRlbGV0ZSIsICJleGVjdXRlIiwgImNvZGUiLCAibWFya0FzQ2hhdCIsICJyYXciLCAiUmFnZU1QV2ViVmlld01hbmFnZXIiLCAid2ViVmlld3MiLCAiTWFwIiwgImlkQ291bnRlciIsICJjcmVhdGUiLCAib3B0aW9ucyIsICJyYXciLCAibXAiLCAiY29uc29sZSIsICJsb2dXYXJuaW5nIiwgImJyb3dzZXJzIiwgIm5ldyIsICJ1cmwiLCAidmlzaWJsZSIsICJ1bmRlZmluZWQiLCAiYWN0aXZlIiwgIndlYlZpZXciLCAiUmFnZU1QV2ViVmlldyIsICJpZCIsICJzZXQiLCAiZ2V0QnlJRCIsICJjYWNoZWQiLCAiZ2V0IiwgImJyb3dzZXIiLCAiYXQiLCAiQ2xpZW50UmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIlJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJFdmVudHMiLCAiV2ViVmlldyIsICJDbGllbnRSYWdlTVBFdmVudEVtbWl0ZXIiLCAiUmFnZU1QV2ViVmlld01hbmFnZXIiLCAic2V0QXVkaW9GYWN0b3J5IiwgIl9mYWN0b3J5IiwgInNldEF1ZGlvRmlsdGVyRmFjdG9yeSIsICJzZXRBdWRpb091dHB1dEF0dGFjaGVkRmFjdG9yeSIsICJzZXRBdWRpb091dHB1dEZyb250ZW5kRmFjdG9yeSIsICJzZXRBdWRpb091dHB1dFdvcmxkRmFjdG9yeSIsICJzZXRCbGlwRmFjdG9yeSIsICJmYWN0b3J5IiwgIm1wIiwgIkJsaXAiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJwcm90b3R5cGUiLCAic2V0TWFya2VyRmFjdG9yeSIsICJNYXJrZXIiLCAic2V0Q29sc2hhcGVGYWN0b3J5IiwgIkNvbHNoYXBlIiwgInNldENoZWNrcG9pbnRGYWN0b3J5IiwgIkNoZWNrcG9pbnQiLCAic2V0T2JqZWN0RmFjdG9yeSIsICJzZXRMb2NhbE9iamVjdEZhY3RvcnkiLCAic2V0UGVkRmFjdG9yeSIsICJQZWQiLCAic2V0TG9jYWxQZWRGYWN0b3J5IiwgInNldExvY2FsUGxheWVyRmFjdG9yeSIsICJzZXRMb2NhbFZlaGljbGVGYWN0b3J5IiwgInNldFBsYXllckZhY3RvcnkiLCAiUGxheWVyIiwgInNldFJtbERvY3VtZW50RmFjdG9yeSIsICJzZXRUZXh0TGFiZWxGYWN0b3J5IiwgIlRleHRMYWJlbCIsICJzZXRWZWhpY2xlRmFjdG9yeSIsICJWZWhpY2xlIiwgInNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkiLCAic2V0VmlydHVhbEVudGl0eUZhY3RvcnkiLCAic2V0V2ViU29ja2V0Q2xpZW50RmFjdG9yeSIsICJzZXRXZWJWaWV3RmFjdG9yeSIsICJCcm93c2VyIiwgIlVzZUZpbHRlcnMiLCAiZmlsdGVycyIsICIkVXNlRmlsdGVycyIsICJPblNjcmlwdFJQQyIsICJPbkludGVybmFsIiwgIklOVEVSTkFMX0VWRU5UUyIsICJTQ1JJUFRfUlBDIiwgIk9uY2VTY3JpcHRSUEMiLCAiT25jZUludGVybmFsIiwgIk9uU2NyaXB0UlBDQW5zd2VyIiwgIlNDUklQVF9SUENfQU5TV0VSIiwgIk9uY2VTY3JpcHRSUENBbnN3ZXIiLCAiT25LZXlCb2FyZEV2ZW50IiwgIktFWUJPQVJEX0VWRU5UIiwgIk9uY2VLZXlCb2FyZEV2ZW50IiwgIk9uS2V5VXAiLCAiS0VZX1VQIiwgIk9uY2VLZXlVcCIsICJPbktleURvd24iLCAiS0VZX0RPV04iLCAiT25jZUtleURvd24iLCAiT25XZWJWaWV3RXZlbnQiLCAiV0VCX1ZJRVdfRVZFTlQiLCAiT25jZVdlYlZpZXdFdmVudCIsICJPbldlYlNvY2tldEV2ZW50IiwgIldFQl9TT0NLRVRfRVZFTlQiLCAiT25jZVdlYlNvY2tldEV2ZW50IiwgIk9uQXVkaW9FdmVudCIsICJBVURJT19FVkVOVCIsICJPbmNlQXVkaW9FdmVudCIsICJPblJtbHVpRXZlbnQiLCAiUk1MVUlfRVZFTlQiLCAiT25jZVJtbHVpRXZlbnQiLCAiT25XaW5kb3dGb2N1c0NoYW5nZSIsICJXSU5ET1dfRk9DVVNfQ0hBTkdFIiwgIk9uY2VXaW5kb3dGb2N1c0NoYW5nZSIsICJPbldpbmRvd1Jlc29sdXRpb25DaGFuZ2UiLCAiV0lORE9XX1JFU09MVVRJT05fQ0hBTkdFIiwgIk9uY2VXaW5kb3dSZXNvbHV0aW9uQ2hhbmdlIiwgIk9uQ29ubmVjdGlvbkNvbXBsZXRlIiwgIkNPTk5FQ1RJT05fQ09NUExFVEUiLCAiT25jZUNvbm5lY3Rpb25Db21wbGV0ZSIsICJPbkRpc2Nvbm5lY3QiLCAiRElTQ09OTkVDVCIsICJPbmNlRGlzY29ubmVjdCIsICJPblNwYXduZWQiLCAiU1BBV05FRCIsICJPbmNlU3Bhd25lZCIsICJPbkdhbWVFbnRpdHlDcmVhdGUiLCAiR0FNRV9FTlRJVFlfQ1JFQVRFIiwgIk9uY2VHYW1lRW50aXR5Q3JlYXRlIiwgIk9uR2FtZUVudGl0eURlc3Ryb3kiLCAiR0FNRV9FTlRJVFlfREVTVFJPWSIsICJPbmNlR2FtZUVudGl0eURlc3Ryb3kiLCAiT25FbnRpdHlIaXRFbnRpdHkiLCAiRU5USVRZX0hJVF9FTlRJVFkiLCAiT25jZUVudGl0eUhpdEVudGl0eSIsICJPblRhc2tDaGFuZ2UiLCAiVEFTS19DSEFOR0UiLCAiT25jZVRhc2tDaGFuZ2UiLCAiT25QbGF5ZXJXZWFwb25TaG9vdCIsICJQTEFZRVJfV0VBUE9OX1NIT09UIiwgIk9uY2VQbGF5ZXJXZWFwb25TaG9vdCIsICJPblBsYXllckJ1bGxldEhpdCIsICJQTEFZRVJfQlVMTEVUX0hJVCIsICJPbmNlUGxheWVyQnVsbGV0SGl0IiwgIk9uUGxheWVyV2VhcG9uQ2hhbmdlIiwgIlBMQVlFUl9XRUFQT05fQ0hBTkdFIiwgIk9uY2VQbGF5ZXJXZWFwb25DaGFuZ2UiLCAiT25QbGF5ZXJTdGFydFZlaGljbGVFbnRlciIsICJQTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUiIsICJPbmNlUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIiLCAiT25QbGF5ZXJTdGFydFZlaGljbGVMZWF2ZSIsICJQTEFZRVJfU1RBUlRfVkVISUNMRV9MRUFWRSIsICJPbmNlUGxheWVyU3RhcnRWZWhpY2xlTGVhdmUiLCAiT25QbGF5ZXJWZWhpY2xlRW50ZXJlZCIsICJQTEFZRVJfVkVISUNMRV9FTlRFUkVEIiwgIk9uY2VQbGF5ZXJWZWhpY2xlRW50ZXJlZCIsICJPblBsYXllclZlaGljbGVMZWZ0IiwgIlBMQVlFUl9WRUhJQ0xFX0xFRlQiLCAiT25jZVBsYXllclZlaGljbGVMZWZ0IiwgIk9uUGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UiLCAiUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UiLCAiT25jZVBsYXllclZlaGljbGVTZWF0Q2hhbmdlIiwgIk9uVm9pY2VDb25uZWN0aW9uIiwgIlZPSUNFX0NPTk5FQ1RJT04iLCAiT25jZVZvaWNlQ29ubmVjdGlvbiIsICJPblBsYXllclN0YXJ0VGFsa2luZyIsICJQTEFZRVJfU1RBUlRfVEFMS0lORyIsICJPbmNlUGxheWVyU3RhcnRUYWxraW5nIiwgIk9uUGxheWVyU3RvcFRhbGtpbmciLCAiUExBWUVSX1NUT1BfVEFMS0lORyIsICJPbmNlUGxheWVyU3RvcFRhbGtpbmciLCAiT25Xb3JsZE9iamVjdFBvc2l0aW9uQ2hhbmdlIiwgIldPUkxEX09CSkVDVF9QT1NJVElPTl9DSEFOR0UiLCAiT25jZVdvcmxkT2JqZWN0UG9zaXRpb25DaGFuZ2UiLCAiT25Xb3JsZE9iamVjdFN0cmVhbUluIiwgIldPUkxEX09CSkVDVF9TVFJFQU1fSU4iLCAiT25jZVdvcmxkT2JqZWN0U3RyZWFtSW4iLCAiT25Xb3JsZE9iamVjdFN0cmVhbU91dCIsICJXT1JMRF9PQkpFQ1RfU1RSRUFNX09VVCIsICJPbmNlV29ybGRPYmplY3RTdHJlYW1PdXQiLCAiT25FdmVudCIsICJFVkVOVCIsICJPbmNlRXZlbnQiLCAiT25CYXNlT2JqZWN0Q3JlYXRlIiwgIkJBU0VfT0JKRUNUX0NSRUFURSIsICJPbmNlQmFzZU9iamVjdENyZWF0ZSIsICJPbkJhc2VPYmplY3RSZW1vdmUiLCAiQkFTRV9PQkpFQ1RfUkVNT1ZFIiwgIk9uY2VCYXNlT2JqZWN0UmVtb3ZlIiwgIk9uTmV0T3duZXJDaGFuZ2UiLCAiTkVUX09XTkVSX0NIQU5HRSIsICJPbmNlTmV0T3duZXJDaGFuZ2UiLCAiT25XZWFwb25EYW1hZ2UiLCAiV0VBUE9OX0RBTUFHRSIsICJPbmNlV2VhcG9uRGFtYWdlIiwgIk9uTWV0YUNoYW5nZSIsICJNRVRBX0NIQU5HRSIsICJPbmNlTWV0YUNoYW5nZSIsICJPbkxvY2FsTWV0YUNoYW5nZSIsICJMT0NBTF9NRVRBX0NIQU5HRSIsICJPbmNlTG9jYWxNZXRhQ2hhbmdlIiwgIk9uU3luY2VkTWV0YUNoYW5nZSIsICJTWU5DRURfTUVUQV9DSEFOR0UiLCAiT25jZVN5bmNlZE1ldGFDaGFuZ2UiLCAiT25TdHJlYW1TeW5jZWRNZXRhQ2hhbmdlIiwgIlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UiLCAiT25jZVN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UiLCAiT25HbG9iYWxNZXRhQ2hhbmdlIiwgIkdMT0JBTF9NRVRBX0NIQU5HRSIsICJPbmNlR2xvYmFsTWV0YUNoYW5nZSIsICJPbkdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UiLCAiR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJPbmNlR2xvYmFsU3luY2VkTWV0YUNoYW5nZSIsICJPbkVudGl0eUNvbFNoYXBlRW50ZXIiLCAiRU5USVRZX0NPTF9TSEFQRV9FTlRFUiIsICJPbmNlRW50aXR5Q29sU2hhcGVFbnRlciIsICJPbkVudGl0eUNvbFNoYXBlTGVhdmUiLCAiRU5USVRZX0NPTF9TSEFQRV9MRUFWRSIsICJPbmNlRW50aXR5Q29sU2hhcGVMZWF2ZSIsICJPbkVudGl0eUNoZWNrcG9pbnRFbnRlciIsICJFTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUiIsICJPbmNlRW50aXR5Q2hlY2twb2ludEVudGVyIiwgIk9uRW50aXR5Q2hlY2twb2ludExlYXZlIiwgIkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFIiwgIk9uY2VFbnRpdHlDaGVja3BvaW50TGVhdmUiLCAiT25Db2xTaGFwZUV2ZW50IiwgIkNPTF9TSEFQRV9FVkVOVCIsICJPbmNlQ29sU2hhcGVFdmVudCIsICJPbkNvbnNvbGVDb21tYW5kIiwgIkNPTlNPTEVfQ09NTUFORCIsICJPbmNlQ29uc29sZUNvbW1hbmQiLCAiT25FcnJvciIsICJFUlJPUiIsICJPbmNlRXJyb3IiLCAiT25Mb2NhbFNjcmlwdEV2ZW50IiwgIkxPQ0FMX1NDUklQVF9FVkVOVCIsICJPbmNlTG9jYWxTY3JpcHRFdmVudCIsICJPblJlbW90ZVNjcmlwdEV2ZW50IiwgIlJFTU9URV9TQ1JJUFRfRVZFTlQiLCAiT25jZVJlbW90ZVNjcmlwdEV2ZW50IiwgIk9uUmVzb3VyY2VTdGFydCIsICJSRVNPVVJDRV9TVEFSVCIsICJPbmNlUmVzb3VyY2VTdGFydCIsICJPblJlc291cmNlU3RvcCIsICJSRVNPVVJDRV9TVE9QIiwgIk9uY2VSZXNvdXJjZVN0b3AiLCAiT25SZXNvdXJjZUVycm9yIiwgIlJFU09VUkNFX0VSUk9SIiwgIk9uY2VSZXNvdXJjZUVycm9yIiwgIk9uU2VydmVyIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbldlYlZpZXciLCAiaWQiLCAiZXZlbnROYW1lIiwgIiRPbldlYlZpZXciLCAiT24iLCAiZXZlbnROYW1lIiwgIiRPbiIsICJPbmNlU2VydmVyIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbmNlV2ViVmlldyIsICJpZCIsICJldmVudE5hbWUiLCAiJE9uY2VXZWJWaWV3IiwgIk9uY2UiLCAiZXZlbnROYW1lIiwgIiRPbmNlIiwgIlVzZUd1YXJkcyIsICJndWFyZHMiLCAiJFVzZUd1YXJkcyIsICJVc2VJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3JzIiwgIiRVc2VJbnRlcmNlcHRvcnMiLCAiT25SZXF1ZXN0IiwgInJwY05hbWUiLCAiJE9uUmVxdWVzdCIsICJPblNlcnZlclJlcXVlc3QiLCAicnBjTmFtZSIsICJjcmVhdGVSUENEZWNvcmF0b3IiLCAiT25XZWJWaWV3UmVxdWVzdCIsICJpZCIsICJycGNOYW1lIiwgIiRPbldlYlZpZXdSZXF1ZXN0IiwgIm11bHRpcGxheWVyU2VydmljZSIsICJDbGllbnRSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UiLCAiQ2xpZW50QXBwQnVpbGRlciIsICJBcHBCdWlsZGVyIiwgImFkZFdlYlZpZXciLCAiaWQiLCAib3B0aW9ucyIsICJhZGRXZWJWaWV3cyIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJpc0JvdW5kIiwgIkFERF9XRUJWSUVXIiwgImdldCIsICJyZWJpbmQiLCAidG9Db25zdGFudFZhbHVlIiwgImJpbmQiLCAic2V0QXVkaW9GYWN0b3J5IiwgImZhY3RvcnkiLCAic2V0QXVkaW9GaWx0ZXJGYWN0b3J5IiwgInNldEF1ZGlvT3V0cHV0QXR0YWNoZWRGYWN0b3J5IiwgInNldEF1ZGlvT3V0cHV0RnJvbnRlbmRGYWN0b3J5IiwgInNldEF1ZGlvT3V0cHV0V29ybGRGYWN0b3J5IiwgInNldEJsaXBGYWN0b3J5IiwgInNldE1hcmtlckZhY3RvcnkiLCAic2V0Q29sU2hhcGVGYWN0b3J5IiwgInNldENvbHNoYXBlRmFjdG9yeSIsICJzZXRDaGVja3BvaW50RmFjdG9yeSIsICJzZXRPYmplY3RGYWN0b3J5IiwgInNldExvY2FsT2JqZWN0RmFjdG9yeSIsICJzZXRQZWRGYWN0b3J5IiwgInNldExvY2FsUGVkRmFjdG9yeSIsICJzZXRMb2NhbFBsYXllckZhY3RvcnkiLCAic2V0TG9jYWxWZWhpY2xlRmFjdG9yeSIsICJzZXRQbGF5ZXJGYWN0b3J5IiwgInNldFJtbERvY3VtZW50RmFjdG9yeSIsICJzZXRUZXh0TGFiZWxGYWN0b3J5IiwgInNldFZlaGljbGVGYWN0b3J5IiwgInNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkiLCAic2V0VmlydHVhbEVudGl0eUZhY3RvcnkiLCAic2V0V2ViU29ja2V0Q2xpZW50RmFjdG9yeSIsICJzZXRXZWJWaWV3RmFjdG9yeSIsICJjcmVhdGVBcHBCdWlsZGVyIiwgIiRjcmVhdGVBcHBCdWlsZGVyIiwgImVudmlyb21lbnQiLCAiQXBwRW52aXJvbWVudCIsICJDbGllbnQiLCAicGx1Z2lucyIsICJTZXJ2aWNlQmluZGVyUGx1Z2luIiwgIkV2ZW50TWVkaWF0b3JQbHVnaW4iLCAiUlBDUGx1Z2luIiwgIldlYlZpZXdQbHVnaW4iLCAiYXBwQnVpbGRlckluaGVyaXQiXQp9Cg==
8836
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2FwcC1lbnZpcm9tZW50LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2NvcmUtbWV0YWRhdGEta2V5LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V2ZW50LWRlc3RpbmF0aW9uLmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V4ZWN1dGlvbi1jb250ZXh0LXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvZW51bXMvbWV0aG9kLXBhcmFtLXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZW51bXMvZXJyb3ItbWVzc2FnZS5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2VudW1zL2luamVjdGFibGUtc2NvcGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9lbnVtcy9ycGMtcmVzdWx0LXN0YXR1cy5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvZGlzdC9jaHVuay03UVZZVTYzRS5qcyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy9nZW5lcmF0ZS1yYW5kb20taWQudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy90eXBlLWNoZWNrLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS9tb2R1bGUtbWV0YWRhdGEucmVhZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUvbW9kdWxlLWNvbnRhaW5lci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlL21vZHVsZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvZXhlY3V0aW9uLWNvbnRleHQtYmFzZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvbWFuZ28tcmVxdWVzdC1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9waXBlbGluZS9tYW5nby1yZXNwb25zZS1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC91dGlscy90cmVlLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9jb250cm9sbGVyL2NvbnRyb2xsZXItb3B0aW9ucy52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9lcnJvci1maWx0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvcGlwZS52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9ldmVudC1wYXJhbWV0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZXZlbnQtbWV0YWRhdGEudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZ3VhcmQudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvaW50ZXJjZXB0b3IudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3Rpb24tdG9rZW4udmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvcHJvdmlkZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvbW9kdWxlLW9wdGlvbnMudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3RhYmxlLW1ldGFkYXRhLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL21hbmdvLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9ndWFyZC1jYW5jZWwuZXJyb3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL2d1YXJkLWludmFsaWQtcmV0dXJuLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy90b28tbWFueS1yZXF1ZXN0cy5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9lcnJvcnMvdW5rbm93bi5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWV2ZW50LmhhbmRsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvcGlwZWxpbmUuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWZsb3cuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLW1ldGFkYXRhLnJlYWRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLXJwYy5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb250cm9sbGVyL2NvbnRyb2xsZXIudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhYnJhaGFtK3JlZmxlY3Rpb25AMC4xMi4wL25vZGVfbW9kdWxlcy9AYWJyYWhhbS9yZWZsZWN0aW9uL3NyYy9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy9yZWZsZWN0b3Iuc2VydmljZS50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2luZGV4LnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9jb250cm9sbGVyLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvZ2xvYmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvaW5qZWN0YWJsZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL21vZHVsZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL29wdGlvbmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvc2V0LW1ldGFkYXRhLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy9jYXRjaC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9lcnJvcnMvdXNlLWZpbHRlcnMuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9pbmRleC50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlLXRyZWUvYXBwLXJ1bnRpbWUudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL2RlcGVuZGVuY3ktYmluZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUtdHJlZS9tb2R1bGUtdHJlZS1zY2FubmVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLWV2ZW50LWVtbWl0ZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtdGltZXJzLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLW11bHRpcGxheWVyLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2FwcC1idWlsZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NyZWF0ZS1hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLWludGVybmFsLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS1pbnRlcm5hbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9ib2R5LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9pbmRleC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcmVxdWVzdC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcGFyYW0uZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGFyYW1zL3Jlc3BvbnNlLmRlb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGlwZWxpbmUvdXNlLWd1YXJkcy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtaW50ZXJjZXB0b3JzLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1waXBlcy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtcnBjLWRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi13ZWJ2aWV3LXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY3JlYXRlLXRpbWVyLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9jcm9uLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9ldmVyeS10aWNrLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3RpbWVycy9pbnRlcnZhbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvdGltZW91dC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9hcHBseS1kZWNvcmF0b3IudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS1wYXJhbS51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZm9yd2FyZC1yZWYudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9zZXJ2aWNlcy90aW1lci5zZXJ2aWNlLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jcm9uZXJAOC4xLjIvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5taW4uanMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3NlcnZpY2VzL2Jhc2UtZXZlbnQuc2VydmljZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvc2VydmljZXMvYmFzZS1ycGMuc2VydmljZS50cyIsICIuLi9zcmMvY29uc3RhbnRzL2luamVjdC5jb25zdHMudHMiLCAiLi4vc3JjL2NvbnN0YW50cy9pbnRlcm5hbC1ldmVudHMuY29uc3RzLnRzIiwgIi4uL3NyYy9wbHVnaW5zL2V2ZW50LW1lZGlhdG9yLnBsdWdpbi50cyIsICIuLi8uLi9jb3JlL3NyYy9waXBlcy9kZWZhdWx0LXZhbHVlLnBpcGUudHMiLCAiLi4vc3JjL3BsdWdpbnMvcnBjLnBsdWdpbi50cyIsICIuLi9zcmMvcGx1Z2lucy9zZXJ2aWNlLWJpbmRlci5wbHVnaW4udHMiLCAiLi4vc3JjL3NlcnZpY2VzL2NsaWVudC1ldmVudC5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9zZXJ2aWNlcy9jbGllbnQtbG9nZ2VyLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvZW51bXMvZXJyb3ItbWVzc2FnZS5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2VudW1zL2luamVjdGFibGUtc2NvcGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9lbnVtcy9ycGMtcmVzdWx0LXN0YXR1cy5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvY29udHJvbGxlci1ldmVudC5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3V0aWxzL2dlbmVyYXRlLXJhbmRvbS1pZC51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3V0aWxzL3R5cGUtY2hlY2sudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9waXBlbGluZS5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9tYW5nby5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9lcnJvcnMvZ3VhcmQtY2FuY2VsLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9ndWFyZC1pbnZhbGlkLXJldHVybi5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2FwcC1lbnZpcm9tZW50LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2NvcmUtbWV0YWRhdGEta2V5LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V4ZWN1dGlvbi1jb250ZXh0LXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWZsb3cuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLW1ldGFkYXRhLnJlYWRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLXJwYy5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb250cm9sbGVyL2NvbnRyb2xsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS9tb2R1bGUtbWV0YWRhdGEucmVhZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUvbW9kdWxlLWNvbnRhaW5lci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlL21vZHVsZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlLXRyZWUvYXBwLXJ1bnRpbWUudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL2RlcGVuZGVuY3ktYmluZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL3JlZmxlY3Rvci5zZXJ2aWNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL2Vycm9yLWZpbHRlci52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9waXBlLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL2d1YXJkLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL2ludGVyY2VwdG9yLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvaW5qZWN0YWJsZS1tZXRhZGF0YS52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvY29udHJvbGxlci5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL2luamVjdC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL2luamVjdGFibGUuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9tb2R1bGUuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9vcHRpb25hbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL3NldC1tZXRhZGF0YS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9mb3J3YXJkLXJlZi51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NlcnZpY2VzL3RpbWVyLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL21vZHVsZS10cmVlLXNjYW5uZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3V0aWxzL3RyZWUudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvZXhlY3V0aW9uLWNvbnRleHQtYmFzZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvbWFuZ28tcmVxdWVzdC1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9waXBlbGluZS9tYW5nby1yZXNwb25zZS1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9zZXJ2aWNlcy9iYXNlLWV2ZW50LnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3NlcnZpY2VzL2Jhc2UtcnBjLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2FwcC1idWlsZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9hcHAudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NyZWF0ZS1hcHAudHMiLCAiLi4vc3JjL3NlcnZpY2VzL2NsaWVudC1ycGMuc2VydmljZS50cyIsICIuLi9zcmMvc2VydmljZXMvd2Vidmlldy1saXN0LnNlcnZpY2UudHMiLCAiLi4vc3JjL3NlcnZpY2VzL2NsaWVudC13ZWJ2aWV3LnNlcnZpY2UudHMiLCAiLi4vc3JjL3BsdWdpbnMvd2Vidmlldy5wbHVnaW4udHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtc2NyaXB0LWV2ZW50LWhhbmRsZXIudHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtZXZlbnQtZW1taXRlci50cyIsICIuLi9zcmMvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC13ZWJ2aWV3LnRzIiwgIi4uL3NyYy9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXdlYnZpZXctbWFuYWdlci50cyIsICIuLi9zcmMvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1tdWx0aXBsYXllci5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy91c2UtZmlsdGVycy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL2ludGVybmFsL2luZGV4LnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi1zZXJ2ZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi13ZWJ2aWV3LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24uZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLXNlcnZlci5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2Utd2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1ndWFyZHMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1pbnRlcmNlcHRvcnMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ycGMvb24tc2VydmVyLXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi13ZWJ2aWV3LXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IGVudW0gQXBwRW52aXJvbWVudCB7XG4gICAgQ2xpZW50LFxuICAgIFNlcnZlcixcbn1cbiIsICJleHBvcnQgZW51bSBDb3JlTWV0YWRhdGFLZXkge1xuICAgIC8vIEdlbmVyYWxcbiAgICBJbmplY3RhYmxlID0gJ21hbmdvOmluamVjdGFibGUnLFxuICAgIEluamVjdCA9ICdtYW5nbzppbmplY3QnLFxuICAgIE1vZHVsZSA9ICdtYW5nbzptb2R1bGUnLFxuICAgIEdsb2JhbE1vZHVsZSA9ICdtYW5nbzpnbG9iYWwtbW9kdWxlJyxcbiAgICBDb250cm9sbGVyID0gJ21hbmdvOmNvbnRyb2xsZXItb3B0aW9ucycsXG4gICAgLy8gRXZlbnRzICYgUlBDXG4gICAgQ29udHJvbGxlckV2ZW50cyA9ICdtYW5nbzpjb250cm9sbGVyLWV2ZW50cycsXG4gICAgQ29udHJvbGxlclJQQ3MgPSAnbWFuZ286Y29udHJvbGxlci1ycGNzJyxcbiAgICBDb250cm9sbGVyUGFyYW1zID0gJ21hbmdvOmNvbnRyb2xsZXItcnBjLXBhcmFtcycsXG4gICAgLy8gUGlwZWxpbmVcbiAgICBHdWFyZHMgPSAnbWFuZ286Z3VhcmRzJyxcbiAgICBJbnRlcmNlcHRvcnMgPSAnbWFuZ286aW50ZXJjZXB0b3JzJyxcbiAgICBQaXBlcyA9ICdtYW5nbzpwaXBlcycsXG4gICAgLy8gRXJyb3JcbiAgICBDYXRjaCA9ICdtYW5nbzpjYXRjaCcsXG4gICAgRXJyb3JGaWx0ZXJzID0gJ21hbmdvOmVycm9yLWZpbHRlcnMnLFxuICAgIC8vXG4gICAgVGltZXJzID0gJ21hbmdvOnRpbWVycycsXG59XG4iLCAiZXhwb3J0IGVudW0gRXZlbnREZXN0aW5hdGlvbiB7XG4gICAgU2VydmVyID0gJ3NlcnZlcicsXG4gICAgQ2xpZW50ID0gJ2NsaWVudCcsXG4gICAgV2ViVmlldyA9ICd3ZWJ2aWV3Jyxcbn1cbiIsICJleHBvcnQgZW51bSBFeGVjdXRpb25Db250ZXh0VHlwZSB7XG4gICAgRXZlbnQgPSAnZXZlbnQnLFxuICAgIFJQQyA9ICdycGMnLFxufVxuIiwgImV4cG9ydCBlbnVtIE1ldGhvZFBhcmFtVHlwZSB7XG4gICAgQm9keSA9ICdib2R5JyxcbiAgICBDdXN0b20gPSAnY3VzdG9tJyxcbiAgICBQYXJhbSA9ICdwYXJhbScsXG4gICAgUGxheWVyID0gJ3BsYXllcicsXG4gICAgUmVxdWVzdCA9ICdyZXF1ZXN0JyxcbiAgICBSZXNwb25zZSA9ICdyZXNwb25zZScsXG4gICAgSW5kZXggPSAnaW5kZXgnLFxufVxuIiwgImV4cG9ydCBjb25zdCBMT0dHRVJfU0VSVklDRSA9ICdMT0dHRVJfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgRVZFTlRfU0VSVklDRSA9ICdFVkVOVF9TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBSUENfU0VSVklDRSA9ICdSUENfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgTU9EVUxFX0NPTlRBSU5FUiA9ICdNT0RVTEVfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBSRUZMRUNUT1JfU0VSVklDRSA9ICdSRUZMRUNUT1JfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgVElNRVJfU0VSVklDRSA9ICdUSU1FUl9TRVJWSUNFJztcbiIsICJleHBvcnQgZW51bSBFcnJvck1lc3NhZ2Uge1xuICAgIFRvb01hbnlSZXF1ZXN0cyA9ICdUb28gbWFueSByZXF1ZXN0cy4nLFxuXG4gICAgLy8gRXZlbnRzXG4gICAgRXZlbnROYW1lTXVzdEJlU3RyaW5nID0gJ1RoZSBldmVudCBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBFdmVudE5hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIGV2ZW50IG5hbWUgbXVzdCBiZSB1bmlxdWUuJyxcbiAgICBFdmVudE5vdEFsbG93ZWRJbkNsaWVudCA9ICdUaGUgZXZlbnQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIEV2ZW50Tm90QWxsb3dlZEluU2VydmVyID0gJ1RoZSBldmVudCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc2VydmVyIGVudmlyb25tZW50LicsXG4gICAgSW52YWxpZEV2ZW50VHlwZSA9ICdJbnZhbGlkIGV2ZW50IHR5cGUuJyxcbiAgICBJbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUgPSAnVGhlIG5hbWUgb2YgdGhlIGludGVybmFsIGV2ZW50IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUmV0dXJuSW5FdmVudCA9ICdDYW5ub3QgcmV0dXJuIGEgdmFsdWUgZnJvbSBhbiBldmVudC4nLFxuXG4gICAgLy8gUlBDXG4gICAgUlBDTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgUlBDIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4nLFxuICAgIFJQQ05hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIFJQQyBuYW1lIG11c3QgYmUgdW5pcXVlLicsXG4gICAgUlBDTm90QWxsb3dlZEluQ2xpZW50ID0gJ1RoZSBSUEMgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIFJQQ05vdEFsbG93ZWRJblNlcnZlciA9ICdUaGUgUlBDIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQuJyxcbiAgICBJbnZhbGlkUlBDVHlwZSA9ICdJbnZhbGlkIFJQQyB0eXBlLicsXG4gICAgUlBDSGFuZGxlckFscmVhZHlFeGlzdHMgPSAnVGhlIFJQQyBoYW5kbGVyIGFscmVhZHkgZXhpc3RzLiBQbGVhc2UgcHJvdmlkZSBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgUlBDLicsXG4gICAgUlBDUmVzcG9uc2VBbHJlYWR5U2VudCA9ICdUaGUgUlBDIHJlc3BvbnNlIGhhcyBhbHJlYWR5IGJlZW4gc2VudC4nLFxuXG4gICAgLy8gRXJyb3IgZmlsdGVyc1xuICAgIEludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24gPSAnSW52YWxpZCBlcnJvciBmaWx0ZXIuIEVycm9yIGZpbHRlcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhIGNhdGNoIG1ldGhvZC4nLFxuICAgIEVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlciA9ICdUaGUgZXJyb3IgYWxyZWFkeSBwb2ludHMgdG8gYSBmaWx0ZXIuJyxcbiAgICBFeGNlcHRpb25IYW5kbGluZ0NvbmZsaWN0ID0gJ1RoZSBzYW1lIGV4Y2VwdGlvbiBjYW4gb25seSBiZSBjYXVnaHQgb25jZS4nLFxuICAgIEF0TGVhc3RPbmVGaWx0ZXJSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgZXJyb3IgZmlsdGVyIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBEdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkID0gJ0R1cGxpY2F0ZSBlcnJvciBmaWx0ZXIgZm91bmQuIEVuc3VyZSB0aGF0IHRoZSBzYW1lIGZpbHRlciBpcyBub3QgYXBwbGllZCBtb3JlIHRoYW4gb25jZS4nLFxuXG4gICAgLy8gV2ViVmlld1xuICAgIFdlYlZpZXdOb3RGb3VuZCA9ICdUaGUgV2ViVmlldyB3aXRoIHRoZSBzcGVjaWZpZWQgaWQgZG9lcyBub3QgZXhpc3QuJyxcbiAgICBXZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlciA9ICdUaGUgV2ViVmlldyBpZCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bWJlci4nLFxuXG4gICAgLy8gR3VhcmRcbiAgICBJbnZhbGlkR3VhcmREZWZpbml0aW9uID0gJ0ludmFsaWQgZ3VhcmQuIEd1YXJkcyBtdXN0IGJlIGEgY2xhc3MgcmVmZXJlbmNlIG9yIGFuIG9iamVjdCB3aXRoIGEgY2FuQWN0aXZhdGUgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGd1YXJkIG11c3QgYmUgcHJvdmlkZWQuJyxcblxuICAgIC8vIEludGVyY2VwdG9yXG4gICAgSW52YWxpZEludGVyY2VwdG9yRGVmaW5pdGlvbiA9ICdJbnZhbGlkIGludGVyY2VwdG9yLiBJbnRlcmNlcHRvcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpbnRlcmNlcHQgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGludGVyY2VwdG9yIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBJbnZhbGlkSW50ZXJjZXB0b3JSZXR1cm5WYWx1ZSA9ICdUaGUgaW50ZXJjZXB0b3IgbXVzdCByZXR1cm4gYSBmdW5jdGlvbi4nLFxuXG4gICAgLy8gUGlwZVxuICAgIEludmFsaWRQaXBlRGVmaW5pdGlvbiA9ICdJbnZhbGlkIHBpcGUuIFBpcGVzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYSB0cmFuc2Zvcm0gbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgcGlwZSBtdXN0IGJlIHByb3ZpZGVkLicsXG5cbiAgICAvLyBBcHAgbG9hZGluZ1xuICAgIEFwcEFscmVhZHlMb2FkZWQgPSAnQXBwIGlzIGFscmVhZHkgbG9hZGVkLiBQbGVhc2UgY2FsbCB0aGUgc3RvcCBtZXRob2QgYmVmb3JlIGNhbGxpbmcgdGhlIHN0YXJ0IG1ldGhvZC4nLFxuICAgIEFwcE5vdExvYWRlZCA9ICdBcHAgaXMgbm90IGxvYWRlZC4gUGxlYXNlIGNhbGwgdGhlIHN0YXJ0IG1ldGhvZCBiZWZvcmUgY2FsbGluZyB0aGUgc3RvcCBtZXRob2QuJyxcblxuICAgIC8vIERlY29yYXRvcnNcbiAgICBJbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQgPSAnVGhlIHNwZWNpZmllZCBpbmplY3Rpb24gdG9rZW4gaXMgaW52YWxpZC4nLFxuICAgIEluamVjdGlvblRva2VuTm90Rm91bmQgPSAnVGhlIGluamVjdGlvbiB0b2tlbiBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICBQYXJhbUtleU11c3RCZVN0cmluZyA9ICdUaGUgcGFyYW0ga2V5IG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBJbmRleEtleU11c3RCZU51bWJlciA9ICdUaGUgaW5kZXgga2V5IG11c3QgYmUgYSBudW1iZXIuJyxcbiAgICBEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSA9ICdUaGUgc2FtZSBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCBvbmNlIGluIHRoZSBzYW1lIGNsYXNzLicsXG4gICAgSW52YWxpZENvbnRyb2xsZXJPcHRpb25zID0gJ0ludmFsaWQgY29udHJvbGxlciBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZEluamVjdGFibGVPcHRpb25zID0gJ0ludmFsaWQgaW5qZWN0YWJsZSBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZE1vZHVsZU9wdGlvbnMgPSAnSW52YWxpZCBtb2R1bGUgb3B0aW9ucyBmb3VuZC4nLFxuICAgIE11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCA9ICdDYW5ub3QgYXBwbHkgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byB0aGUgc2FtZSBwYXJhbWV0ZXIuJyxcblxuICAgIC8vIEludGVybmFsIEFwcFxuICAgIENpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkID0gJ0NpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQuJyxcbiAgICBJbnZhbGlkTW9kdWxlRGVmaW5pdGlvbiA9ICdUaGUgbW9kdWxlIGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkRXhwb3J0RGVmaW5pdGlvbiA9ICdUaGUgZXhwb3J0IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uID0gJ1RoZSBwcm92aWRlciBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFBhcmFtZXRlckRlY29yYXRvclVzYWdlID0gJ0VhY2ggcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGVpciBpdHMgb3duIGRlY29yYXRvci4nLFxuICAgIFJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzID0gJ1RoZSBAUmVzcG9uc2UoKSBkZWNvcmF0b3IgaXMgbm90IGFsbG93ZWQgb24gZXZlbnRzLicsXG4gICAgUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzID0gJ1RoZSBAUGxheWVyKCkgZGVjb3JhdG9yIGlzIG5vdCBhbGxvd2VkIG9uIGNsaWVudCBldmVudHMuJyxcblxuICAgIC8vIFRpbWVyc1xuICAgIFRpbWVyTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgdGltZXIgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLicsXG59XG4iLCAiZXhwb3J0IGVudW0gSW5qZWN0YWJsZVNjb3BlIHtcbiAgICBSZXF1ZXN0ID0gJ3JlcXVlc3QnLFxuICAgIFRyYW5zaWVudCA9ICd0cmFuc2llbnQnLFxuICAgIFNpbmdsZXRvbiA9ICdzaW5nbGV0b24nLFxufVxuIiwgImV4cG9ydCBlbnVtIFJQQ1Jlc3VsdFN0YXR1cyB7XG4gICAgU3VjY2VzcyA9IDEsXG4gICAgVGltZW91dCA9IDIsXG4gICAgSGFuZGxlck5vdEZvdW5kID0gMyxcbiAgICBVbmtub3duID0gNCxcbiAgICBDYW5jZWxsZWRCeUd1YXJkID0gNSxcbiAgICBJbnZhbGlkR3VhcmRSZXR1cm4gPSA2LFxuICAgIFRvb01hbnlSZXF1ZXN0cyA9IDcsXG4gICAgUGxheWVyRGlzY29ubmVjdGVkID0gOCxcbiAgICBQbGF5ZXJOb3RGb3VuZCA9IDksXG59XG4iLCAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSk9Pl9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbmV4cG9ydCB7IF9fbmFtZSB9OyAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV3b2dJQ0oyWlhKemFXOXVJam9nTXl3S0lDQWljMjkxY21ObGN5STZJRnRkTEFvZ0lDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNklGdGRMQW9nSUNKdFlYQndhVzVuY3lJNklDSWlMQW9nSUNKdVlXMWxjeUk2SUZ0ZENuMEtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklpSjkiLCAiZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tSWQoKSB7XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSkgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpO1xufVxuIiwgImV4cG9ydCBjb25zdCBpc1VuZGVmaW5lZCA9IChvYmo6IGFueSk6IG9iaiBpcyB1bmRlZmluZWQgPT4gdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSAoZm46IGFueSk6IGZuIGlzIG9iamVjdCA9PiAhaXNOaWwoZm4pICYmIHR5cGVvZiBmbiA9PT0gJ29iamVjdCc7XG5leHBvcnQgY29uc3QgaXNGdW5jdGlvbiA9ICh2YWw6IGFueSk6IHZhbCBpcyBGdW5jdGlvbiA9PiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nO1xuZXhwb3J0IGNvbnN0IGlzU3RyaW5nID0gKHZhbDogYW55KTogdmFsIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbmV4cG9ydCBjb25zdCBpc051bWJlciA9ICh2YWw6IGFueSk6IHZhbCBpcyBudW1iZXIgPT4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG5leHBvcnQgY29uc3QgaXNDb25zdHJ1Y3RvciA9ICh2YWw6IGFueSk6IGJvb2xlYW4gPT4gdmFsID09PSAnY29uc3RydWN0b3InO1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHZhbDogYW55KTogdmFsIGlzIG51bGwgfCB1bmRlZmluZWQgPT4gaXNVbmRlZmluZWQodmFsKSB8fCB2YWwgPT09IG51bGw7XG5leHBvcnQgY29uc3QgaXNFbXB0eSA9IChhcnJheTogYW55KTogYm9vbGVhbiA9PiAhKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA+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+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvY2FsSGFuZGxlcnMuZGVsZXRlKHJwY05hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWU6IHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5zZXQocnBjTmFtZSwgcnBjSGFuZGxlcik7XG5cbiAgICAgICAgcmV0dXJuIHJwY0hhbmRsZXI7XG4gICAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBXRUJWSUVXX1NFUlZJQ0UgPSAnV0VCVklFV19TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBXRUJWSUVXX0xJU1RfU0VSVklDRSA9ICdXRUJWSUVXX0xJU1RfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgQUREX1dFQlZJRVcgPSAnQUREX1dFQlZJRVcnO1xuIiwgImV4cG9ydCBjb25zdCBJTlRFUk5BTF9FVkVOVFMgPSB7XG4gICAgU0NSSVBUX1JQQzogJ3NjcmlwdFJQQycsXG4gICAgU0NSSVBUX1JQQ19BTlNXRVI6ICdzY3JpcHRSUENBbnN3ZXInLFxuICAgIEtFWUJPQVJEX0VWRU5UOiAna2V5Ym9hcmRFdmVudCcsXG4gICAgS0VZX1VQOiAna2V5VXAnLFxuICAgIEtFWV9ET1dOOiAna2V5RG93bicsXG4gICAgV0VCX1ZJRVdfRVZFTlQ6ICd3ZWJWaWV3RXZlbnQnLFxuICAgIFdFQl9TT0NLRVRfRVZFTlQ6ICd3ZWJTb2NrZXRFdmVudCcsXG4gICAgQVVESU9fRVZFTlQ6ICdhdWRpb0V2ZW50JyxcbiAgICBSTUxVSV9FVkVOVDogJ3JtbHVpRXZlbnQnLFxuICAgIFdJTkRPV19GT0NVU19DSEFOR0U6ICd3aW5kb3dGb2N1c0NoYW5nZScsXG4gICAgV0lORE9XX1JFU09MVVRJT05fQ0hBTkdFOiAnd2luZG93UmVzb2x1dGlvbkNoYW5nZScsXG4gICAgQ09OTkVDVElPTl9DT01QTEVURTogJ2Nvbm5lY3Rpb25Db21wbGV0ZScsXG4gICAgRElTQ09OTkVDVDogJ2Rpc2Nvbm5lY3QnLFxuICAgIFNQQVdORUQ6ICdzcGF3bmVkJyxcbiAgICBHQU1FX0VOVElUWV9DUkVBVEU6ICdnYW1lRW50aXR5Q3JlYXRlJyxcbiAgICBHQU1FX0VOVElUWV9ERVNUUk9ZOiAnZ2FtZUVudGl0eURlc3Ryb3knLFxuICAgIEVOVElUWV9ISVRfRU5USVRZOiAnZW50aXR5SGl0RW50aXR5JyxcbiAgICBUQVNLX0NIQU5HRTogJ3Rhc2tDaGFuZ2UnLFxuICAgIFBMQVlFUl9XRUFQT05fU0hPT1Q6ICdwbGF5ZXJXZWFwb25TaG9vdCcsXG4gICAgUExBWUVSX0JVTExFVF9ISVQ6ICdwbGF5ZXJCdWxsZXRIaXQnLFxuICAgIFBMQVlFUl9XRUFQT05fQ0hBTkdFOiAncGxheWVyV2VhcG9uQ2hhbmdlJyxcbiAgICBQTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUjogJ3BsYXllclN0YXJ0VmVoaWNsZUVudGVyJyxcbiAgICBQTEFZRVJfU1RBUlRfVkVISUNMRV9MRUFWRTogJ3BsYXllclN0YXJ0VmVoaWNsZUxlYXZlJyxcbiAgICBQTEFZRVJfVkVISUNMRV9FTlRFUkVEOiAncGxheWVyVmVoaWNsZUVudGVyZWQnLFxuICAgIFBMQVlFUl9WRUhJQ0xFX0xFRlQ6ICdwbGF5ZXJWZWhpY2xlTGVmdCcsXG4gICAgUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0U6ICdwbGF5ZXJWZWhpY2xlU2VhdENoYW5nZScsXG4gICAgVk9JQ0VfQ09OTkVDVElPTjogJ3ZvaWNlQ29ubmVjdGlvbicsXG4gICAgUExBWUVSX1NUQVJUX1RBTEtJTkc6ICdwbGF5ZXJTdGFydFRhbGtpbmcnLFxuICAgIFBMQVlFUl9TVE9QX1RBTEtJTkc6ICdwbGF5ZXJTdG9wVGFsa2luZycsXG4gICAgV09STERfT0JKRUNUX1BPU0lUSU9OX0NIQU5HRTogJ3dvcmxkT2JqZWN0UG9zaXRpb25DaGFuZ2UnLFxuICAgIFdPUkxEX09CSkVDVF9TVFJFQU1fSU46ICd3b3JsZE9iamVjdFN0cmVhbUluJyxcbiAgICBXT1JMRF9PQkpFQ1RfU1RSRUFNX09VVDogJ3dvcmxkT2JqZWN0U3RyZWFtT3V0JyxcbiAgICBFVkVOVDogJ2V2ZW50JyxcbiAgICBCQVNFX09CSkVDVF9DUkVBVEU6ICdiYXNlT2JqZWN0Q3JlYXRlJyxcbiAgICBCQVNFX09CSkVDVF9SRU1PVkU6ICdiYXNlT2JqZWN0UmVtb3ZlJyxcbiAgICBORVRfT1dORVJfQ0hBTkdFOiAnbmV0T3duZXJDaGFuZ2UnLFxuICAgIFdFQVBPTl9EQU1BR0U6ICd3ZWFwb25EYW1hZ2UnLFxuICAgIE1FVEFfQ0hBTkdFOiAnbWV0YUNoYW5nZScsXG4gICAgTE9DQUxfTUVUQV9DSEFOR0U6ICdsb2NhbE1ldGFDaGFuZ2UnLFxuICAgIFNZTkNFRF9NRVRBX0NIQU5HRTogJ3N5bmNlZE1ldGFDaGFuZ2UnLFxuICAgIFNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0U6ICdzdHJlYW1TeW5jZWRNZXRhQ2hhbmdlJyxcbiAgICBHTE9CQUxfTUVUQV9DSEFOR0U6ICdnbG9iYWxNZXRhQ2hhbmdlJyxcbiAgICBHTE9CQUxfU1lOQ0VEX01FVEFfQ0hBTkdFOiAnZ2xvYmFsU3luY2VkTWV0YUNoYW5nZScsXG4gICAgRU5USVRZX0NPTF9TSEFQRV9FTlRFUjogJ2VudGl0eUNvbFNoYXBlRW50ZXInLFxuICAgIEVOVElUWV9DT0xfU0hBUEVfTEVBVkU6ICdlbnRpdHlDb2xTaGFwZUxlYXZlJyxcbiAgICBFTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUjogJ2VudGl0eUNoZWNrcG9pbnRFbnRlcicsXG4gICAgRU5USVRZX0NIRUNLUE9JTlRfTEVBVkU6ICdlbnRpdHlDaGVja3BvaW50TGVhdmUnLFxuICAgIENPTF9TSEFQRV9FVkVOVDogJ2NvbFNoYXBlRXZlbnQnLFxuICAgIENPTlNPTEVfQ09NTUFORDogJ2NvbnNvbGVDb21tYW5kJyxcbiAgICBFUlJPUjogJ2Vycm9yJyxcbiAgICBMT0NBTF9TQ1JJUFRfRVZFTlQ6ICdsb2NhbFNjcmlwdEV2ZW50JyxcbiAgICBSRU1PVEVfU0NSSVBUX0VWRU5UOiAncmVtb3RlU2NyaXB0RXZlbnQnLFxuICAgIFJFU09VUkNFX1NUQVJUOiAncmVzb3VyY2VTdGFydCcsXG4gICAgUkVTT1VSQ0VfU1RPUDogJ3Jlc291cmNlU3RvcCcsXG4gICAgUkVTT1VSQ0VfRVJST1I6ICdyZXNvdXJjZUVycm9yJyxcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTWFuZ29QbHVnaW4gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IEVWRU5UX1NFUlZJQ0UsIExPR0dFUl9TRVJWSUNFLCB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgV0VCVklFV19TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsaWVudFdlYlZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRXZlbnRNZWRpYXRvclBsdWdpbiBpbXBsZW1lbnRzIE1hbmdvUGx1Z2luIHtcbiAgICBAaW5qZWN0KEVWRU5UX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2U7XG4gICAgQGluamVjdChXRUJWSUVXX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgd2ViVmlld1NlcnZpY2U6IENsaWVudFdlYlZpZXdTZXJ2aWNlO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBiZWZvcmVMb2FkKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5vblNlcnZlcignU0VSVkVSOjpFTUlUX1dFQlZJRVcnLCAoYm9keSkgPT4ge1xuICAgICAgICAgICAgdGhpcy53ZWJWaWV3U2VydmljZS5nZXQoYm9keS5pZCk/LmVtaXQoYFdFQlZJRVc6Ok9OX1NFUlZFUl8ke2JvZHkuZXZlbnROYW1lfWAsIGJvZHkucGF5bG9hZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMud2ViVmlld1NlcnZpY2UuJG9uQ3JlYXRlKChpZCwgd2ViVmlldykgPT4ge1xuICAgICAgICAgICAgd2ViVmlldy5vbignV0VCVklFVzo6RU1JVF9TRVJWRVInLCAoZGF0YTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRGF0YSBpcyBKU09OIHN0cmluZ2lmaWVkIGZyb20gd2VidmlldyBiZWNhdXNlIFJBR0U6TVAgZG9lc24ndCBwcm9wZXJseSBzZXJpYWxpemUgb2JqZWN0c1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRhdGEpIGFzIHsgZXZlbnROYW1lOiBzdHJpbmc7IHBheWxvYWQ6IHVua25vd24gfTtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5lbWl0U2VydmVyKGBTRVJWRVI6Ok9OX1dFQlZJRVdfJHtib2R5LmV2ZW50TmFtZX1fJHtpZH1gLCBib2R5LnBheWxvYWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35FdmVudCBtZWRpYXRvciBtZXRob2RzIGRlZmluZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsLCBpc051bWJlciB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIERlZmF1bHRWYWx1ZVBpcGU8VCA9IHVua25vd24sIFIgPSB1bmtub3duPiBpbXBsZW1lbnRzIFBpcGU8VCwgVCB8IFI+IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZTogVCkge31cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IFQpIHtcbiAgICAgICAgaWYgKGlzTmlsKHZhbHVlKSB8fCAoaXNOdW1iZXIodmFsdWUpICYmIGlzTmFOKDxudW1iZXI+dmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IHR5cGUgTWFuZ29QbHVnaW4sIHR5cGUgUlBDUGF5bG9hZCwgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCwgUlBDX1JFU1VMVF9VTktOT1dOIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQge1xuICAgIEVWRU5UX1NFUlZJQ0UsXG4gICAgUlBDX1NFUlZJQ0UsXG4gICAgUlBDUmVzdWx0U3RhdHVzLFxuICAgIHR5cGUgUlBDUmVzdWx0LFxuICAgIE1hbmdvRXJyb3IsXG4gICAgTE9HR0VSX1NFUlZJQ0UsXG4gICAgaXNOaWwsXG4gICAgdHlwZSBMb2dnZXJTZXJ2aWNlLFxufSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgV0VCVklFV19TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgQ2xpZW50V2ViVmlld1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50U2VydmljZSwgUlBDU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUlBDUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoRVZFTlRfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZTtcbiAgICBAaW5qZWN0KFdFQlZJRVdfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSB3ZWJWaWV3U2VydmljZTogQ2xpZW50V2ViVmlld1NlcnZpY2U7XG4gICAgQGluamVjdChSUENfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBycGNTZXJ2aWNlOiBSUENTZXJ2aWNlO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBiZWZvcmVMb2FkKCkge1xuICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5vblNlcnZlcignUlBDOjpDQUxMX0NMSUVOVCcsIGFzeW5jIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBycGNIYW5kbGVyID0gdGhpcy5ycGNTZXJ2aWNlLiRzZXJ2ZXJIYW5kbGVycy5nZXQocGF5bG9hZC5ycGNOYW1lKTtcbiAgICAgICAgICAgIGlmIChpc05pbChycGNIYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmVtaXRTZXJ2ZXIoYFJQQzo6UkVUVVJOX0ZST01fQ0xJRU5UXyR7cGF5bG9hZC5pZH1gLCBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjSGFuZGxlci5oYW5kbGVyKHBheWxvYWQuYm9keSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnBjUmVzdWx0OiBSUENSZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmVtaXRTZXJ2ZXIoYFJQQzo6UkVUVVJOX0ZST01fQ0xJRU5UXyR7cGF5bG9hZC5pZH1gLCBycGNSZXN1bHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNYW5nb0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJwY1Jlc3VsdDogUlBDUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRldGFpbHM6IGVycm9yLmRldGFpbHMgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZW1pdFNlcnZlcihgUlBDOjpSRVRVUk5fRlJPTV9DTElFTlRfJHtwYXlsb2FkLmlkfWAsIHJwY1Jlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5lbWl0U2VydmVyKGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwgUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMud2ViVmlld1NlcnZpY2UuJG9uQ3JlYXRlKCh3ZWJWaWV3SWQsIHdlYlZpZXcpID0+IHtcbiAgICAgICAgICAgIHdlYlZpZXcub24oJ1JQQzo6Q0FMTF9DTElFTlQnLCBhc3luYyAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghd2ViVmlldy52YWxpZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcnBjSGFuZGxlciA9IHRoaXMucnBjU2VydmljZS4kd2ViVmlld0hhbmRsZXJzLmdldChgJHt3ZWJWaWV3SWR9Ojoke3BheWxvYWQucnBjTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOaWwocnBjSGFuZGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5lbWl0KGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGNIYW5kbGVyLmhhbmRsZXIocGF5bG9hZC5ib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5lbWl0KGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwgPFJQQ1Jlc3VsdD57XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuU3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTWFuZ29FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5lbWl0KGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRldGFpbHM6IGVycm9yLmRldGFpbHMgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgd2ViVmlldy5lbWl0KGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke3BheWxvYWQuaWR9YCwgUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgd2ViVmlldy5vbignUlBDOjpDQUxMX1NFUlZFUicsIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZW1pdFNlcnZlcignUlBDOjpDQUxMX1NFUlZFUicsIDxSUENQYXlsb2FkPnsgLi4ucGF5bG9hZCwgd2ViVmlld0lkIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35SUEMgaGFuZGxlcnMgcmVnaXN0ZXJlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHRpbWV9bXMpYCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEdMT0JBTF9BUFBfQ09OVEFJTkVSLCBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLCB0eXBlIE1hbmdvUGx1Z2luIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBFVkVOVF9TRVJWSUNFLCBMT0dHRVJfU0VSVklDRSwgUlBDX1NFUlZJQ0UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgQ2xpZW50RXZlbnRTZXJ2aWNlLCBDbGllbnRMb2dnZXJTZXJ2aWNlLCBDbGllbnRSUENTZXJ2aWNlLCBDbGllbnRXZWJWaWV3U2VydmljZSwgV2ViVmlld0xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgV0VCVklFV19MSVNUX1NFUlZJQ0UsIFdFQlZJRVdfU0VSVklDRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQmluZGVyUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoR0xPQkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG5cbiAgICBwdWJsaWMgYXN5bmMgb25CdWlsZCgpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChMT0dHRVJfU0VSVklDRSkudG8oQ2xpZW50TG9nZ2VyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKEVWRU5UX1NFUlZJQ0UpLnRvKENsaWVudEV2ZW50U2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFJQQ19TRVJWSUNFKS50byhDbGllbnRSUENTZXJ2aWNlKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoV0VCVklFV19TRVJWSUNFKS50byhDbGllbnRXZWJWaWV3U2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFdFQlZJRVdfTElTVF9TRVJWSUNFKS50byhXZWJWaWV3TGlzdFNlcnZpY2UpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTE9HR0VSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZSh0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQoTE9HR0VSX1NFUlZJQ0UpKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEVWRU5UX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZSh0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQoRVZFTlRfU0VSVklDRSkpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoUlBDX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZSh0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQoUlBDX1NFUlZJQ0UpKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFdFQlZJRVdfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldChXRUJWSUVXX1NFUlZJQ0UpKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFdFQlZJRVdfTElTVF9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0KFdFQlZJRVdfTElTVF9TRVJWSUNFKSk7XG5cbiAgICAgICAgY29uc3QgbG9nZ2VyU2VydmljZSA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldDxDbGllbnRMb2dnZXJTZXJ2aWNlPihMT0dHRVJfU0VSVklDRSk7XG4gICAgICAgIGxvZ2dlclNlcnZpY2UubG9nKGB+bHd+SW50ZXJuYWwgc2VydmljZXMgYmluZGVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQmFzZUV2ZW50U2VydmljZSwgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBJTlRFUk5BTF9FVkVOVFMsIFdFQlZJRVdfTElTVF9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgV2ViVmlld0xpc3RTZXJ2aWNlIH0gZnJvbSAnLi93ZWJ2aWV3LWxpc3Quc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7IENsaWVudEV2ZW50RW1taXRlciwgRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsaWVudE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbXVsdGlwbGF5ZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2xpZW50RXZlbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZUV2ZW50U2VydmljZTxNYW5nb0V2ZW50cy5DdXN0b21DbGllbnRFdmVudD4gaW1wbGVtZW50cyBFdmVudFNlcnZpY2Uge1xuICAgIEBpbmplY3QoV0VCVklFV19MSVNUX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJHdlYlZpZXdMaXN0U2VydmljZTogV2ViVmlld0xpc3RTZXJ2aWNlO1xuICAgIHByaXZhdGUgJHJhZ2VFdmVudHM6IENsaWVudEV2ZW50RW1taXRlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIG11bHRpcGxheWVyU2VydmljZTogQ2xpZW50TXVsdGlwbGF5ZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKG11bHRpcGxheWVyU2VydmljZS5FdmVudHMpO1xuICAgICAgICB0aGlzLiRyYWdlRXZlbnRzID0gbXVsdGlwbGF5ZXJTZXJ2aWNlLkV2ZW50cztcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzID0gbmV3IFNldChPYmplY3QudmFsdWVzKElOVEVSTkFMX0VWRU5UUykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlcnZlcjxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IHRoaXMuJHJhZ2VFdmVudHMub25TZXJ2ZXIoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kcmVtb3RlSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG9uY2VTZXJ2ZXI8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLiRyYWdlRXZlbnRzLm9uY2VTZXJ2ZXIoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kcmVtb3RlSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRTZXJ2ZXI8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+LCBib2R5PzogdW5rbm93bikge1xuICAgICAgICB0aGlzLiRyYWdlRXZlbnRzLmVtaXRTZXJ2ZXIoZXZlbnROYW1lLCBib2R5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25XZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvQ2xpZW50RXZlbnQ+LFxuICAgICAgICBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICkge1xuICAgICAgICBjb25zdCB3ZWJWaWV3ID0gdGhpcy4kd2ViVmlld0xpc3RTZXJ2aWNlLnRyeUdldChpZCk7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiBjYWxsYmFjayhhcmdzWzBdKTtcblxuICAgICAgICBjb25zdCBldmVudEhhbmRsZXI6IFNjcmlwdEV2ZW50SGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgd2ViVmlldy5vZmYoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgd2ViVmlldy5vbihldmVudE5hbWUsIHdyYXBwZXIpO1xuXG4gICAgICAgIHRoaXMuJHJlbW90ZUhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbmNlV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb0NsaWVudEV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApIHtcbiAgICAgICAgY29uc3Qgd2ViVmlldyA9IHRoaXMuJHdlYlZpZXdMaXN0U2VydmljZS50cnlHZXQoaWQpO1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsYmFjayhhcmdzWzBdKTtcblxuICAgICAgICBjb25zdCBldmVudEhhbmRsZXI6IFNjcmlwdEV2ZW50SGFuZGxlciA9IHtcbiAgICAgICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgd2ViVmlldy5vZmYoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgd2ViVmlldy5vbmNlKGV2ZW50TmFtZSwgd3JhcHBlcik7XG5cbiAgICAgICAgdGhpcy4kcmVtb3RlSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tQ2xpZW50VG9XZWJWaWV3RXZlbnQ+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICApIHtcbiAgICAgICAgY29uc3Qgd2ViVmlldyA9IHRoaXMuJHdlYlZpZXdMaXN0U2VydmljZS50cnlHZXQoaWQpO1xuICAgICAgICB3ZWJWaWV3LmVtaXQoZXZlbnROYW1lLCBib2R5KTtcbiAgICB9XG5cbiAgICAvLyBSYWdlTVAgY2xpZW50LXNwZWNpZmljIGV2ZW50c1xuICAgIHB1YmxpYyBvblJlbmRlcihjYWxsYmFjazogKCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdyZW5kZXInLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQnJvd3NlckRvbVJlYWR5KGNhbGxiYWNrOiAoYnJvd3NlcjogQnJvd3Nlck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ2Jyb3dzZXJEb21SZWFkeScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ccm93c2VyTG9hZGluZ0ZhaWxlZChjYWxsYmFjazogKGJyb3dzZXI6IEJyb3dzZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdicm93c2VyTG9hZGluZ0ZhaWxlZCcsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJDaGF0KGNhbGxiYWNrOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckNoYXQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyQ29tbWFuZChjYWxsYmFjazogKGNvbW1hbmQ6IHN0cmluZykgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJDb21tYW5kJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckRlYXRoKGNhbGxiYWNrOiAoa2lsbGVyPzogUGxheWVyTXAsIHJlYXNvbj86IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJEZWF0aCcsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJTcGF3bihjYWxsYmFjazogKCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJTcGF3bicsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJFbnRlclZlaGljbGUoY2FsbGJhY2s6ICh2ZWhpY2xlOiBWZWhpY2xlTXAsIHNlYXQ6IG51bWJlcikgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlclZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdFZlaGljbGUoY2FsbGJhY2s6ICh2ZWhpY2xlOiBWZWhpY2xlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdFZlaGljbGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRW50ZXJDb2xzaGFwZShjYWxsYmFjazogKGNvbHNoYXBlOiBDb2xzaGFwZU1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckVudGVyQ29sc2hhcGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdENvbHNoYXBlKGNhbGxiYWNrOiAoY29sc2hhcGU6IENvbHNoYXBlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdENvbHNoYXBlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckVudGVyQ2hlY2twb2ludChjYWxsYmFjazogKGNoZWNrcG9pbnQ6IENoZWNrcG9pbnRNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlckNoZWNrcG9pbnQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdENoZWNrcG9pbnQoY2FsbGJhY2s6IChjaGVja3BvaW50OiBDaGVja3BvaW50TXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdENoZWNrcG9pbnQnLCBjYWxsYmFjayk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBNQU5HT19MT0dfUFJFRklYIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NyYy9hcHAnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2xpZW50TG9nZ2VyU2VydmljZSBpbXBsZW1lbnRzIExvZ2dlclNlcnZpY2Uge1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsYXllclNlcnZpY2U6IE11bHRpcGxheWVyU2VydmljZTtcbiAgICBwdWJsaWMgbG9nKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2coYH53flt+eX4ke01BTkdPX0xPR19QUkVGSVh9Q2xpZW50fnd+XVt+bGJ+TG9nfnd+XWAsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2dXYXJuaW5nKGBbJHtNQU5HT19MT0dfUFJFRklYfUNsaWVudF1bV2Fybl1gLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXJyb3IoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZ0Vycm9yKGBbJHtNQU5HT19MT0dfUFJFRklYfUNsaWVudF1bRXJyb3JdYCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlYnVnKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5sb2dEZWJ1Zyhgfnd+W355fiR7TUFOR09fTE9HX1BSRUZJWH1DbGllbnR+d35dW35sY35EZWJ1Z353fl1gLCAuLi5hcmdzKTtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGVudW0gRXJyb3JNZXNzYWdlIHtcbiAgICBUb29NYW55UmVxdWVzdHMgPSAnVG9vIG1hbnkgcmVxdWVzdHMuJyxcblxuICAgIC8vIEV2ZW50c1xuICAgIEV2ZW50TmFtZU11c3RCZVN0cmluZyA9ICdUaGUgZXZlbnQgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLicsXG4gICAgRXZlbnROYW1lTXVzdEJlVW5pcXVlID0gJ1RoZSBldmVudCBuYW1lIG11c3QgYmUgdW5pcXVlLicsXG4gICAgRXZlbnROb3RBbGxvd2VkSW5DbGllbnQgPSAnVGhlIGV2ZW50IGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjbGllbnQgZW52aXJvbm1lbnQuJyxcbiAgICBFdmVudE5vdEFsbG93ZWRJblNlcnZlciA9ICdUaGUgZXZlbnQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIHNlcnZlciBlbnZpcm9ubWVudC4nLFxuICAgIEludmFsaWRFdmVudFR5cGUgPSAnSW52YWxpZCBldmVudCB0eXBlLicsXG4gICAgSW52YWxpZEludGVybmFsRXZlbnROYW1lID0gJ1RoZSBuYW1lIG9mIHRoZSBpbnRlcm5hbCBldmVudCBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFJldHVybkluRXZlbnQgPSAnQ2Fubm90IHJldHVybiBhIHZhbHVlIGZyb20gYW4gZXZlbnQuJyxcblxuICAgIC8vIFJQQ1xuICAgIFJQQ05hbWVNdXN0QmVTdHJpbmcgPSAnVGhlIFJQQyBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBSUENOYW1lTXVzdEJlVW5pcXVlID0gJ1RoZSBSUEMgbmFtZSBtdXN0IGJlIHVuaXF1ZS4nLFxuICAgIFJQQ05vdEFsbG93ZWRJbkNsaWVudCA9ICdUaGUgUlBDIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjbGllbnQgZW52aXJvbm1lbnQuJyxcbiAgICBSUENOb3RBbGxvd2VkSW5TZXJ2ZXIgPSAnVGhlIFJQQyBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc2VydmVyIGVudmlyb25tZW50LicsXG4gICAgSW52YWxpZFJQQ1R5cGUgPSAnSW52YWxpZCBSUEMgdHlwZS4nLFxuICAgIFJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzID0gJ1RoZSBSUEMgaGFuZGxlciBhbHJlYWR5IGV4aXN0cy4gUGxlYXNlIHByb3ZpZGUgYSB1bmlxdWUgbmFtZSBmb3IgdGhlIFJQQy4nLFxuICAgIFJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQgPSAnVGhlIFJQQyByZXNwb25zZSBoYXMgYWxyZWFkeSBiZWVuIHNlbnQuJyxcblxuICAgIC8vIEVycm9yIGZpbHRlcnNcbiAgICBJbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uID0gJ0ludmFsaWQgZXJyb3IgZmlsdGVyLiBFcnJvciBmaWx0ZXJzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYSBjYXRjaCBtZXRob2QuJyxcbiAgICBFcnJvckFscmVhZHlIYW5kbGVkQnlGaWx0ZXIgPSAnVGhlIGVycm9yIGFscmVhZHkgcG9pbnRzIHRvIGEgZmlsdGVyLicsXG4gICAgRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCA9ICdUaGUgc2FtZSBleGNlcHRpb24gY2FuIG9ubHkgYmUgY2F1Z2h0IG9uY2UuJyxcbiAgICBBdExlYXN0T25lRmlsdGVyUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGVycm9yIGZpbHRlciBtdXN0IGJlIHByb3ZpZGVkLicsXG4gICAgRHVwbGljYXRlRXJyb3JGaWx0ZXJEZXRlY3RlZCA9ICdEdXBsaWNhdGUgZXJyb3IgZmlsdGVyIGZvdW5kLiBFbnN1cmUgdGhhdCB0aGUgc2FtZSBmaWx0ZXIgaXMgbm90IGFwcGxpZWQgbW9yZSB0aGFuIG9uY2UuJyxcblxuICAgIC8vIFdlYlZpZXdcbiAgICBXZWJWaWV3Tm90Rm91bmQgPSAnVGhlIFdlYlZpZXcgd2l0aCB0aGUgc3BlY2lmaWVkIGlkIGRvZXMgbm90IGV4aXN0LicsXG4gICAgV2ViVmlld0lkTXVzdEJlU3RyaW5nT3JOdW1iZXIgPSAnVGhlIFdlYlZpZXcgaWQgbXVzdCBiZSBhIHN0cmluZyBvciBudW1iZXIuJyxcblxuICAgIC8vIEd1YXJkXG4gICAgSW52YWxpZEd1YXJkRGVmaW5pdGlvbiA9ICdJbnZhbGlkIGd1YXJkLiBHdWFyZHMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhIGNhbkFjdGl2YXRlIG1ldGhvZC4nLFxuICAgIEF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkID0gJ0F0IGxlYXN0IG9uZSBndWFyZCBtdXN0IGJlIHByb3ZpZGVkLicsXG5cbiAgICAvLyBJbnRlcmNlcHRvclxuICAgIEludmFsaWRJbnRlcmNlcHRvckRlZmluaXRpb24gPSAnSW52YWxpZCBpbnRlcmNlcHRvci4gSW50ZXJjZXB0b3JzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYW4gaW50ZXJjZXB0IG1ldGhvZC4nLFxuICAgIEF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkID0gJ0F0IGxlYXN0IG9uZSBpbnRlcmNlcHRvciBtdXN0IGJlIHByb3ZpZGVkLicsXG4gICAgSW52YWxpZEludGVyY2VwdG9yUmV0dXJuVmFsdWUgPSAnVGhlIGludGVyY2VwdG9yIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24uJyxcblxuICAgIC8vIFBpcGVcbiAgICBJbnZhbGlkUGlwZURlZmluaXRpb24gPSAnSW52YWxpZCBwaXBlLiBQaXBlcyBtdXN0IGJlIGEgY2xhc3MgcmVmZXJlbmNlIG9yIGFuIG9iamVjdCB3aXRoIGEgdHJhbnNmb3JtIG1ldGhvZC4nLFxuICAgIEF0TGVhc3RPbmVQaXBlUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIHBpcGUgbXVzdCBiZSBwcm92aWRlZC4nLFxuXG4gICAgLy8gQXBwIGxvYWRpbmdcbiAgICBBcHBBbHJlYWR5TG9hZGVkID0gJ0FwcCBpcyBhbHJlYWR5IGxvYWRlZC4gUGxlYXNlIGNhbGwgdGhlIHN0b3AgbWV0aG9kIGJlZm9yZSBjYWxsaW5nIHRoZSBzdGFydCBtZXRob2QuJyxcbiAgICBBcHBOb3RMb2FkZWQgPSAnQXBwIGlzIG5vdCBsb2FkZWQuIFBsZWFzZSBjYWxsIHRoZSBzdGFydCBtZXRob2QgYmVmb3JlIGNhbGxpbmcgdGhlIHN0b3AgbWV0aG9kLicsXG5cbiAgICAvLyBEZWNvcmF0b3JzXG4gICAgSW52YWxpZEluamVjdGlvblRva2VuU3BlY2lmaWVkID0gJ1RoZSBzcGVjaWZpZWQgaW5qZWN0aW9uIHRva2VuIGlzIGludmFsaWQuJyxcbiAgICBJbmplY3Rpb25Ub2tlbk5vdEZvdW5kID0gJ1RoZSBpbmplY3Rpb24gdG9rZW4gY291bGQgbm90IGJlIGZvdW5kLicsXG4gICAgUGFyYW1LZXlNdXN0QmVTdHJpbmcgPSAnVGhlIHBhcmFtIGtleSBtdXN0IGJlIGEgc3RyaW5nLicsXG4gICAgSW5kZXhLZXlNdXN0QmVOdW1iZXIgPSAnVGhlIGluZGV4IGtleSBtdXN0IGJlIGEgbnVtYmVyLicsXG4gICAgRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UgPSAnVGhlIHNhbWUgZGVjb3JhdG9yIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBpbiB0aGUgc2FtZSBjbGFzcy4nLFxuICAgIEludmFsaWRDb250cm9sbGVyT3B0aW9ucyA9ICdJbnZhbGlkIGNvbnRyb2xsZXIgb3B0aW9ucyBmb3VuZC4nLFxuICAgIEludmFsaWRJbmplY3RhYmxlT3B0aW9ucyA9ICdJbnZhbGlkIGluamVjdGFibGUgb3B0aW9ucyBmb3VuZC4nLFxuICAgIEludmFsaWRNb2R1bGVPcHRpb25zID0gJ0ludmFsaWQgbW9kdWxlIG9wdGlvbnMgZm91bmQuJyxcbiAgICBNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQgPSAnQ2Fubm90IGFwcGx5IG11bHRpcGxlIGRlY29yYXRvcnMgdG8gdGhlIHNhbWUgcGFyYW1ldGVyLicsXG5cbiAgICAvLyBJbnRlcm5hbCBBcHBcbiAgICBDaXJjdWxhckRlcGVuZGVuY3lEZXRlY3RlZCA9ICdDaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkLicsXG4gICAgSW52YWxpZE1vZHVsZURlZmluaXRpb24gPSAnVGhlIG1vZHVsZSBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZEV4cG9ydERlZmluaXRpb24gPSAnVGhlIGV4cG9ydCBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbiA9ICdUaGUgcHJvdmlkZXIgaXMgaW52YWxpZC4nLFxuICAgIEludmFsaWRQYXJhbWV0ZXJEZWNvcmF0b3JVc2FnZSA9ICdFYWNoIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlaXIgaXRzIG93biBkZWNvcmF0b3IuJyxcbiAgICBSZXNwb25zZURlY29yYXRvck5vdEFsbG93ZWRPbkV2ZW50cyA9ICdUaGUgQFJlc3BvbnNlKCkgZGVjb3JhdG9yIGlzIG5vdCBhbGxvd2VkIG9uIGV2ZW50cy4nLFxuICAgIFBsYXllckRlY29yYXRvck5vdEFsbG93ZWRPbkNsaWVudEV2ZW50cyA9ICdUaGUgQFBsYXllcigpIGRlY29yYXRvciBpcyBub3QgYWxsb3dlZCBvbiBjbGllbnQgZXZlbnRzLicsXG5cbiAgICAvLyBUaW1lcnNcbiAgICBUaW1lck5hbWVNdXN0QmVTdHJpbmcgPSAnVGhlIHRpbWVyIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4nLFxufVxuIiwgImV4cG9ydCBlbnVtIEluamVjdGFibGVTY29wZSB7XG4gICAgUmVxdWVzdCA9ICdyZXF1ZXN0JyxcbiAgICBUcmFuc2llbnQgPSAndHJhbnNpZW50JyxcbiAgICBTaW5nbGV0b24gPSAnc2luZ2xldG9uJyxcbn1cbiIsICJleHBvcnQgZW51bSBSUENSZXN1bHRTdGF0dXMge1xuICAgIFN1Y2Nlc3MgPSAxLFxuICAgIFRpbWVvdXQgPSAyLFxuICAgIEhhbmRsZXJOb3RGb3VuZCA9IDMsXG4gICAgVW5rbm93biA9IDQsXG4gICAgQ2FuY2VsbGVkQnlHdWFyZCA9IDUsXG4gICAgSW52YWxpZEd1YXJkUmV0dXJuID0gNixcbiAgICBUb29NYW55UmVxdWVzdHMgPSA3LFxuICAgIFBsYXllckRpc2Nvbm5lY3RlZCA9IDgsXG4gICAgUGxheWVyTm90Rm91bmQgPSA5LFxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUlBDUmVzdWx0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSID0gJ0lOVEVSTkFMX0FQUF9DT05UQUlORVInO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9BUFBfQ09OVEFJTkVSID0gJ0dMT0JBTF9BUFBfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBBUFBfRU5WSVJPTUVOVCA9ICdBUFBfRU5WSVJPTUVOVCc7XG5cbmV4cG9ydCBjb25zdCBHTE9CQUxfR1VBUkRTID0gJ0dMT0JBTF9HVUFSRFMnO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9JTlRFUkNFUFRPUlMgPSAnR0xPQkFMX0lOVEVSQ0VQVE9SUyc7XG5leHBvcnQgY29uc3QgR0xPQkFMX1BJUEVTID0gJ0dMT0JBTF9QSVBFUyc7XG5leHBvcnQgY29uc3QgR0xPQkFMX0VSUk9SX0ZJTFRFUlMgPSAnR0xPQkFMX0VSUk9SX0ZJTFRFUlMnO1xuXG5leHBvcnQgY29uc3QgUExVR0lOUyA9ICdQTFVHSU5TJztcblxuZXhwb3J0IGNvbnN0IEVOQUJMRV9TSFVURE9XTl9IT09LUyA9ICdFTkFCTEVfU0hVVERPV05fSE9PS1MnO1xuZXhwb3J0IGNvbnN0IENPTlRBSU5FUl9PUFRJT05TID0gJ0NPTlRBSU5FUl9PUFRJT05TJztcbmV4cG9ydCBjb25zdCBMT0dfRVJST1JfU1RBQ0tUUkFDRSA9ICdMT0dfRVJST1JfU1RBQ0tUUkFDRSc7XG5cbmV4cG9ydCBjb25zdCBNQU5HT19MT0dfUFJFRklYID0gJ/Cfpa0nO1xuXG5leHBvcnQgY29uc3QgTUFOR09fUkVRVUVTVF9GQUNUT1JZID0gJ01BTkdPX1JFUVVFU1RfRkFDVE9SWSc7XG5leHBvcnQgY29uc3QgTUFOR09fUkVTUE9OU0VfRkFDVE9SWSA9ICdNQU5HT19SRVNQT05TRV9GQUNUT1JZJztcbmV4cG9ydCBjb25zdCBFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZID0gJ0VYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlknO1xuXG5leHBvcnQgY29uc3QgTVVMVElQTEFZRVJfU0VSVklDRSA9ICdNVUxUSVBMQVlFUl9TRVJWSUNFJztcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfVElNRU9VVDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdSUEMgY2FsbCB0aW1lZCBvdXQuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlRpbWVvdXQsXG59O1xuXG5leHBvcnQgY29uc3QgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdSUEMgaGFuZGxlciBub3QgZm91bmQuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLkhhbmRsZXJOb3RGb3VuZCxcbn07XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1VOS05PV046IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnVW5rbm93biBlcnJvci4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuVW5rbm93bixcbn07XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnUGxheWVyIGRpc2Nvbm5lY3RlZC4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuUGxheWVyRGlzY29ubmVjdGVkLFxufTtcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfUExBWUVSX05PVF9GT1VORDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdQbGF5ZXIgbm90IGZvdW5kLicgfSxcbiAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5QbGF5ZXJOb3RGb3VuZCxcbn07XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgSW50ZXJuYWxFdmVudFNlcnZpY2UsIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlksIE1BTkdPX1JFUVVFU1RfRkFDVE9SWSwgTVVMVElQTEFZRVJfU0VSVklDRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBQaXBlbGluZUhhbmRsZXIgfSBmcm9tICcuL3BpcGVsaW5lLmhhbmRsZXInO1xuaW1wb3J0IHR5cGUgeyBFdmVudE1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFVkVOVF9TRVJWSUNFLCBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCwgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBFeGVjdXRpb25Db250ZXh0QmFzZSwgTWFuZ29SZXNwb25zZUJhc2UsIHR5cGUgTWFuZ29SZXF1ZXN0QmFzZSB9IGZyb20gJy4uL3BpcGVsaW5lJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQ2FsbEhhbmRsZXIsIExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzQXN5bmNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvbnRyb2xsZXJGbG93SGFuZGxlciB9IGZyb20gJy4vY29udHJvbGxlci1mbG93LmhhbmRsZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlckV2ZW50SGFuZGxlciB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJpdmF0ZSByZWFkb25seSBhcHBFbnY6IEFwcEVudmlyb21lbnQ7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoRVZFTlRfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2U6IEludGVybmFsRXZlbnRTZXJ2aWNlO1xuICAgIEBpbmplY3QoQ29udHJvbGxlckZsb3dIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xsZXJGbG93SGFuZGxlcjogQ29udHJvbGxlckZsb3dIYW5kbGVyO1xuICAgIEBpbmplY3QoUGlwZWxpbmVIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lSGFuZGxlcjogUGlwZWxpbmVIYW5kbGVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAaW5qZWN0KE1BTkdPX1JFUVVFU1RfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVNYW5nb1JlcXVlc3Q6IChib2R5OiB1bmtub3duLCBwbGF5ZXI/OiBQbGF5ZXJNcCkgPT4gTWFuZ29SZXF1ZXN0QmFzZTtcbiAgICBAaW5qZWN0KEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlRXhlY3V0aW9uQ29udGV4dDogKFxuICAgICAgICB0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZSxcbiAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICAgICAgICByZXF1ZXN0OiBNYW5nb1JlcXVlc3RCYXNlLFxuICAgICAgICByZXNwb25zZT86IE1hbmdvUmVzcG9uc2VCYXNlLFxuICAgICAgICBuYW1lPzogc3RyaW5nLFxuICAgICkgPT4gRXhlY3V0aW9uQ29udGV4dEJhc2U7XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFdmVudChcbiAgICAgICAgZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgbWFwcGVkRXJyb3JGaWx0ZXJzOiBbYW55IHwgJ01BTkdPX0FOWV9FUlJPUicsIE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXJdW10sXG4gICAgICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICAgICAgIGV2ZW50OiBFdmVudE1ldGFkYXRhLFxuICAgICkge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ29uJyB8fCBldmVudC50eXBlID09PSAnb25jZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC5uYW1lLCBhc3luYyAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvbkludGVybmFsJyB8fCBldmVudC50eXBlID09PSAnb25jZUludGVybmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2AkJHtldmVudC50eXBlfWBdKGV2ZW50Lm5hbWUsIGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBwbGF5ZXIsIGJvZHkgfSA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLnBhcnNlSW50ZXJuYWxBcmdzPFBsYXllck1wPiguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUV2ZW50KGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBldmVudCwgYm9keSwgcGxheWVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvblBsYXllcicgfHwgZXZlbnQudHlwZSA9PT0gJ29uY2VQbGF5ZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2VbZXZlbnQudHlwZV0oZXZlbnQubmFtZSwgYXN5bmMgKHBsYXllciwgYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ29uU2VydmVyJyB8fCBldmVudC50eXBlID09PSAnb25jZVNlcnZlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC5uYW1lLCBhc3luYyAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvbldlYlZpZXcnIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlV2ViVmlldycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC53ZWJWaWV3SWQhLCBldmVudC5uYW1lLCBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IGFyZ3NbMV0gOiBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYXllciA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IDxQbGF5ZXJNcD5hcmdzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBldmVudC4nKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXZlbnRUeXBlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUV2ZW50KFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgZXZlbnQ6IEV2ZW50TWV0YWRhdGEsXG4gICAgICAgIGJvZHk6IHVua25vd24sXG4gICAgICAgIHBsYXllcj86IFBsYXllck1wLFxuICAgICkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5jcmVhdGVNYW5nb1JlcXVlc3QoYm9keSwgcGxheWVyKTtcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IHRoaXMuY3JlYXRlRXhlY3V0aW9uQ29udGV4dChcbiAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHRUeXBlLkV2ZW50LFxuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZixcbiAgICAgICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYucHJvdG90eXBlW2V2ZW50Lm1ldGhvZF0sXG4gICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXZlbnQubmFtZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hHdWFyZHMoZXhlY3V0aW9uQ29udGV4dCwgZ3VhcmRzLCBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcik7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYXdhaXQgdGhpcy5jb250cm9sbGVyRmxvd0hhbmRsZXIuY3JlYXRlQXJncyhjb250cm9sbGVyLCBleGVjdXRpb25Db250ZXh0LCBldmVudCwgcGlwZXMsIHBsYXllcik7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0aG9kID0gY29udHJvbGxlci5pbnN0YW5jZVtldmVudC5tZXRob2RdITtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGlzQXN5bmNGdW5jdGlvbihjb250cm9sbGVyTWV0aG9kKVxuICAgICAgICAgICAgICAgID8gKCk6IHVua25vd24gPT4gY29udHJvbGxlci5pbnN0YW5jZVtldmVudC5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKVxuICAgICAgICAgICAgICAgIDogKCk6IFByb21pc2U8dW5rbm93bj4gPT4gY29udHJvbGxlci5pbnN0YW5jZVtldmVudC5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxIYW5kbGVyOiBDYWxsSGFuZGxlciA9IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUsXG4gICAgICAgICAgICAgICAgcmV0dXJuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJldHVybiBhIHZhbHVlIGZyb20gYW4gZXZlbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFJldHVybkluRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Rocm91Z2hJbnRlcmNlcHRvcnMoZXhlY3V0aW9uQ29udGV4dCwgaW50ZXJjZXB0b3JzLCBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lciwgY2FsbEhhbmRsZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjYWxsSGFuZGxlci5oYW5kbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yR3JvdXAgPSBtYXBwZWRFcnJvckZpbHRlcnMuZmluZChcbiAgICAgICAgICAgICAgICAoW2Vycm9yVHlwZV0pID0+XG4gICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGVycm9yVHlwZSkgJiYgZXJyb3IgaW5zdGFuY2VvZiBlcnJvclR5cGUpIHx8IGVycm9yVHlwZSA9PT0gJ01BTkdPX0FOWV9FUlJPUicgfHwgZXJyb3IgPT09IGVycm9yVHlwZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaXNOaWwoZXJyb3JHcm91cCkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgID8gY29udHJvbGxlci5vd25lci5jb250YWluZXIuZ2V0KGVycm9yR3JvdXBbMV0pXG4gICAgICAgICAgICAgICAgOiBpc09iamVjdChlcnJvckdyb3VwWzFdKSAmJiBpc0Z1bmN0aW9uKGVycm9yR3JvdXBbMV1bJ2NhdGNoJ10pXG4gICAgICAgICAgICAgICAgICA/IGVycm9yR3JvdXBbMV1cbiAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIGVycm9yIGZpbHRlcnMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShpbnN0YW5jZS5jYXRjaC5jYWxsKGluc3RhbmNlLCBlcnJvciwgZXhlY3V0aW9uQ29udGV4dCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUlkKCkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KTtcbn1cbiIsICJleHBvcnQgY29uc3QgaXNVbmRlZmluZWQgPSAob2JqOiBhbnkpOiBvYmogaXMgdW5kZWZpbmVkID0+IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKGZuOiBhbnkpOiBmbiBpcyBvYmplY3QgPT4gIWlzTmlsKGZuKSAmJiB0eXBlb2YgZm4gPT09ICdvYmplY3QnO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb24gPSAodmFsOiBhbnkpOiB2YWwgaXMgRnVuY3Rpb24gPT4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBpc1N0cmluZyA9ICh2YWw6IGFueSk6IHZhbCBpcyBzdHJpbmcgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG5leHBvcnQgY29uc3QgaXNOdW1iZXIgPSAodmFsOiBhbnkpOiB2YWwgaXMgbnVtYmVyID0+IHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xuZXhwb3J0IGNvbnN0IGlzQ29uc3RydWN0b3IgPSAodmFsOiBhbnkpOiBib29sZWFuID0+IHZhbCA9PT0gJ2NvbnN0cnVjdG9yJztcbmV4cG9ydCBjb25zdCBpc05pbCA9ICh2YWw6IGFueSk6IHZhbCBpcyBudWxsIHwgdW5kZWZpbmVkID0+IGlzVW5kZWZpbmVkKHZhbCkgfHwgdmFsID09PSBudWxsO1xuZXhwb3J0IGNvbnN0IGlzRW1wdHkgPSAoYXJyYXk6IGFueSk6IGJvb2xlYW4gPT4gIShhcnJheSAmJiBhcnJheS5sZW5ndGggPiAwKTtcbmV4cG9ydCBjb25zdCBpc1N5bWJvbCA9ICh2YWw6IGFueSk6IHZhbCBpcyBzeW1ib2wgPT4gdHlwZW9mIHZhbCA9PT0gJ3N5bWJvbCc7XG5leHBvcnQgY29uc3QgaXNBc3luY0Z1bmN0aW9uID0gKHZhbDogYW55KTogYm9vbGVhbiA9PiBpc0Z1bmN0aW9uKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBc3luY0Z1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBpc0Jvb2xlYW4gPSAodmFsOiBhbnkpOiB2YWwgaXMgYm9vbGVhbiA9PiB0eXBlb2YgdmFsID09PSAnYm9vbGVhbic7XG5leHBvcnQgY29uc3QgaXNQcm9taXNlID0gPFQgPSBhbnk+KHZhbDogYW55KTogdmFsIGlzIFByb21pc2U8VD4gPT4gdmFsIGluc3RhbmNlb2YgUHJvbWlzZTtcbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBHdWFyZCwgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEd1YXJkQ2FuY2VsRXJyb3IsIEd1YXJkSW52YWxpZFJldHVybkVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dEJhc2UgfSBmcm9tICcuLi9waXBlbGluZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50TWV0YWRhdGEsIENhbGxIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4uL21vZHVsZSc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQaXBlbGluZUhhbmRsZXIge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICAvLyBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbENvbnRhaW5lcjogQ29udGFpbmVyO1xuXG4gICAgcHVibGljIGFzeW5jIGdvVHJvdWdoR3VhcmRzKGV4ZWN1dGlvbkNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLCBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcikge1xuICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIGd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKGd1YXJkKSA/IGNvbnRhaW5lci5nZXQoZ3VhcmQpIDogaXNPYmplY3QoZ3VhcmQpICYmIGlzRnVuY3Rpb24oZ3VhcmRbJ2NhbkFjdGl2YXRlJ10pID8gZ3VhcmQgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggZ3VhcmRzLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEd1YXJkRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYW5BY3RpdmF0ZSA9IGF3YWl0IGluc3RhbmNlLmNhbkFjdGl2YXRlLmNhbGwoaW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYW5BY3RpdmF0ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBndWFyZHMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEd1YXJkSW52YWxpZFJldHVybkVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEd1YXJkQ2FuY2VsRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnb1Rocm91Z2hJbnRlcmNlcHRvcnMoXG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHRCYXNlLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcixcbiAgICAgICAgY2FsbEhhbmRsZXI6IENhbGxIYW5kbGVyLFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIGludGVyY2VwdG9ycykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKGludGVyY2VwdG9yKVxuICAgICAgICAgICAgICAgID8gY29udGFpbmVyLmdldChpbnRlcmNlcHRvcilcbiAgICAgICAgICAgICAgICA6IGlzT2JqZWN0KGludGVyY2VwdG9yKSAmJiBpc0Z1bmN0aW9uKGludGVyY2VwdG9yWydpbnRlcmNlcHQnXSlcbiAgICAgICAgICAgICAgICAgID8gaW50ZXJjZXB0b3JcbiAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIGludGVyY2VwdG9ycy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcmNlcHRvckRlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgaW5zdGFuY2UuaW50ZXJjZXB0LmNhbGwoaW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQsIGNhbGxIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnb1Ryb3VnaFBpcGVzKFxuICAgICAgICB2YWx1ZTogdW5rbm93bixcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgYXJndW1lbnRNZXRhZGF0YTogQXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgY29udGFpbmVyOiBNb2R1bGVDb250YWluZXIsXG4gICAgKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKHBpcGUpID8gY29udGFpbmVyLmdldChwaXBlKSA6IGlzT2JqZWN0KHBpcGUpID8gcGlwZSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNOaWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBwaXBlcy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRQaXBlRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShpbnN0YW5jZS50cmFuc2Zvcm0uY2FsbChpbnN0YW5jZSwgdmFsdWUsIGFyZ3VtZW50TWV0YWRhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgY2xhc3MgTWFuZ29FcnJvcjxURGV0YWlscyA9IHVua25vd24+IGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBzdGF0dXM6IG51bWJlciA9IFJQQ1Jlc3VsdFN0YXR1cy5Vbmtub3duO1xuICAgIHB1YmxpYyBkZXRhaWxzOiBURGV0YWlscyB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1cz86IG51bWJlciwgZGV0YWlscz86IFREZXRhaWxzKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cyA/PyBSUENSZXN1bHRTdGF0dXMuVW5rbm93bjtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgTWFuZ29FcnJvciB9IGZyb20gJy4vbWFuZ28uZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgR3VhcmRDYW5jZWxFcnJvciBleHRlbmRzIE1hbmdvRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ1Byb2Nlc3MgY2FuY2VsbGVkIGJ5IHRoZSBndWFyZC4nLCBSUENSZXN1bHRTdGF0dXMuQ2FuY2VsbGVkQnlHdWFyZCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuL21hbmdvLmVycm9yJztcblxuZXhwb3J0IGNsYXNzIEd1YXJkSW52YWxpZFJldHVybkVycm9yIGV4dGVuZHMgTWFuZ29FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignR3VhcmQgcmV0dXJuZWQgYW4gaW52YWxpZCB2YWx1ZS4gRXhwZWN0ZWQgYm9vbGVhbi4nLCBSUENSZXN1bHRTdGF0dXMuSW52YWxpZEd1YXJkUmV0dXJuKTtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IExPR0dFUl9TRVJWSUNFID0gJ0xPR0dFUl9TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBFVkVOVF9TRVJWSUNFID0gJ0VWRU5UX1NFUlZJQ0UnO1xuZXhwb3J0IGNvbnN0IFJQQ19TRVJWSUNFID0gJ1JQQ19TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBNT0RVTEVfQ09OVEFJTkVSID0gJ01PRFVMRV9DT05UQUlORVInO1xuZXhwb3J0IGNvbnN0IFJFRkxFQ1RPUl9TRVJWSUNFID0gJ1JFRkxFQ1RPUl9TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBUSU1FUl9TRVJWSUNFID0gJ1RJTUVSX1NFUlZJQ0UnO1xuIiwgImV4cG9ydCBlbnVtIEFwcEVudmlyb21lbnQge1xuICAgIENsaWVudCxcbiAgICBTZXJ2ZXIsXG59XG4iLCAiZXhwb3J0IGVudW0gQ29yZU1ldGFkYXRhS2V5IHtcbiAgICAvLyBHZW5lcmFsXG4gICAgSW5qZWN0YWJsZSA9ICdtYW5nbzppbmplY3RhYmxlJyxcbiAgICBJbmplY3QgPSAnbWFuZ286aW5qZWN0JyxcbiAgICBNb2R1bGUgPSAnbWFuZ286bW9kdWxlJyxcbiAgICBHbG9iYWxNb2R1bGUgPSAnbWFuZ286Z2xvYmFsLW1vZHVsZScsXG4gICAgQ29udHJvbGxlciA9ICdtYW5nbzpjb250cm9sbGVyLW9wdGlvbnMnLFxuICAgIC8vIEV2ZW50cyAmIFJQQ1xuICAgIENvbnRyb2xsZXJFdmVudHMgPSAnbWFuZ286Y29udHJvbGxlci1ldmVudHMnLFxuICAgIENvbnRyb2xsZXJSUENzID0gJ21hbmdvOmNvbnRyb2xsZXItcnBjcycsXG4gICAgQ29udHJvbGxlclBhcmFtcyA9ICdtYW5nbzpjb250cm9sbGVyLXJwYy1wYXJhbXMnLFxuICAgIC8vIFBpcGVsaW5lXG4gICAgR3VhcmRzID0gJ21hbmdvOmd1YXJkcycsXG4gICAgSW50ZXJjZXB0b3JzID0gJ21hbmdvOmludGVyY2VwdG9ycycsXG4gICAgUGlwZXMgPSAnbWFuZ286cGlwZXMnLFxuICAgIC8vIEVycm9yXG4gICAgQ2F0Y2ggPSAnbWFuZ286Y2F0Y2gnLFxuICAgIEVycm9yRmlsdGVycyA9ICdtYW5nbzplcnJvci1maWx0ZXJzJyxcbiAgICAvL1xuICAgIFRpbWVycyA9ICdtYW5nbzp0aW1lcnMnLFxufVxuIiwgImV4cG9ydCBlbnVtIEV4ZWN1dGlvbkNvbnRleHRUeXBlIHtcbiAgICBFdmVudCA9ICdldmVudCcsXG4gICAgUlBDID0gJ3JwYycsXG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuaW1wb3J0IHR5cGUgeyBFdmVudE1ldGFkYXRhLCBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQaXBlbGluZUhhbmRsZXIgfSBmcm9tICcuL3BpcGVsaW5lLmhhbmRsZXInO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBBcHBFbnZpcm9tZW50IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlckZsb3dIYW5kbGVyIHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcml2YXRlIHJlYWRvbmx5IGFwcEVudjogQXBwRW52aXJvbWVudDtcbiAgICBAaW5qZWN0KFBpcGVsaW5lSGFuZGxlcikgcHJpdmF0ZSByZWFkb25seSBwaXBlbGluZUhhbmRsZXI6IFBpcGVsaW5lSGFuZGxlcjtcblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVBcmdzKFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0QmFzZSxcbiAgICAgICAgbWV0YWRhdGE6IFJQQ01ldGFkYXRhIHwgRXZlbnRNZXRhZGF0YSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgcGxheWVyPzogUGxheWVyTXAsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIG1ldGFkYXRhLnBhcmFtcy5tYXAoYXN5bmMgKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJndW1lbnRNZXRhZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcGFyYW0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFyYW0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbWV0YXR5cGU6IHBhcmFtLm1ldGF0eXBlLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gJ2JvZHknKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJvZHlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ3BhcmFtJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBQYXJhbVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAoPFJlY29yZDxzdHJpbmcsIHVua25vd24+PmV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5KVtwYXJhbS5kYXRhXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhlY3V0aW9uQ29udGV4dC5yZXF1ZXN0LmJvZHkpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5W3BhcmFtLmRhdGFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgWy4uLnBpcGVzLCAuLi4ocGFyYW0/LnBpcGVzID8/IFtdKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAncmVxdWVzdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmZhY3RvcnkocGFyYW0uZGF0YSwgZXhlY3V0aW9uQ29udGV4dCksXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdwbGF5ZXInICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBQbGF5ZXIgKFNlcnZlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kYXRhID8gcGxheWVyIVs8a2V5b2YgUGxheWVyTXA+cGFyYW0uZGF0YV0gOiBwbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBHdWFyZCwgSW50ZXJjZXB0b3IsIEVycm9yRmlsdGVyLCBUaW1lck1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJNZXRhZGF0YSwgRXZlbnRNZXRhZGF0YSwgTWV0aG9kUGFyYW1ldGVyLCBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCwgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIge1xuICAgIEBpbmplY3QoQVBQX0VOVklST01FTlQpIHByaXZhdGUgcmVhZG9ubHkgYXBwRW52OiBBcHBFbnZpcm9tZW50O1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyByZWFkKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPVxuICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxQaWNrPENvbnRyb2xsZXJNZXRhZGF0YSwgJ3ByZWZpeCc+PihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlciwgY2xhc3NSZWYpID8/XG4gICAgICAgICAgICA8UGljazxDb250cm9sbGVyTWV0YWRhdGEsICdwcmVmaXgnPj57fTtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoY2xhc3NSZWYpO1xuICAgICAgICBjb25zdCBycGNzID0gdGhpcy5nZXRSUENzKGNsYXNzUmVmKTtcbiAgICAgICAgY29uc3QgdGltZXJzID0gdGhpcy5nZXRUaW1lcnMoY2xhc3NSZWYpO1xuXG4gICAgICAgIHJldHVybiA8Q29udHJvbGxlck1ldGFkYXRhPntcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBjbGFzc1JlZixcbiAgICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICAgIHJwY3MsXG4gICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKGNsYXNzUmVmKSxcbiAgICAgICAgICAgIHRpbWVycyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV2ZW50cyhjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICBjb25zdCBldmVudHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPEV2ZW50TWV0YWRhdGFbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJFdmVudHMsIGNsYXNzUmVmLnByb3RvdHlwZSkgPz8gW107XG5cbiAgICAgICAgcmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPEV2ZW50TWV0YWRhdGE+e1xuICAgICAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRNZXRob2RQYXJhbXMoY2xhc3NSZWYsIGV2ZW50KSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKGNsYXNzUmVmLCBldmVudC5tZXRob2QpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSUENzKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IHJwY3MgPSBSZWZsZWN0LmdldE1ldGFkYXRhPFJQQ01ldGFkYXRhW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUlBDcywgY2xhc3NSZWYucHJvdG90eXBlKSA/PyBbXTtcblxuICAgICAgICByZXR1cm4gcnBjcy5tYXAoKHJwYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxSUENNZXRhZGF0YT57XG4gICAgICAgICAgICAgICAgLi4ucnBjLFxuICAgICAgICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRNZXRob2RQYXJhbXMoY2xhc3NSZWYsIHJwYyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiwgcnBjLm1ldGhvZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1ldGhvZFBhcmFtcyhjbGFzc1JlZjogTmV3YWJsZSwgbWV0YWRhdGE6IEV2ZW50TWV0YWRhdGEgfCBSUENNZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgY2xhc3NSZWYucHJvdG90eXBlLCBtZXRhZGF0YS5tZXRob2QpID8/IFtdO1xuXG4gICAgICAgIHBhcmFtcy5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgICAgIHBhcmFtcy5mb3JFYWNoKChwYXJhbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJhbS5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRQYXJhbWV0ZXJEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIChtZXRhZGF0YS50eXBlID09PSAnb24nIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvblBsYXllcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uSW50ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvblNlcnZlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uV2ViVmlldycgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2UnIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlUGxheWVyJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZUludGVybmFsJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZVNlcnZlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VXZWJWaWV3JykgJiZcbiAgICAgICAgICAgICAgICBwYXJhbS50eXBlID09PSAncmVzcG9uc2UnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBSZXNwb25zZVxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUmVzcG9uc2VEZWNvcmF0b3JOb3RBbGxvd2VkT25FdmVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAncGxheWVyJyAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5DbGllbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBQbGF5ZXIgKENsaWVudCkgLSBOb3QgYWxsb3dlZFxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEudHlwZSA9PT0gJ29uUGxheWVyUmVxdWVzdCcgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENOb3RBbGxvd2VkSW5DbGllbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS50eXBlID09PSAnb25TZXJ2ZXJSZXF1ZXN0JyAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ05vdEFsbG93ZWRJblNlcnZlcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChtZXRhZGF0YS50eXBlID09PSAnb25QbGF5ZXInIHx8IG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlUGxheWVyJykgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5vdEFsbG93ZWRJbkNsaWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChtZXRhZGF0YS50eXBlID09PSAnb25TZXJ2ZXInIHx8IG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlU2VydmVyJykgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5vdEFsbG93ZWRJblNlcnZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQaXBlbGluZSh0YXJnZXQ6IE5ld2FibGUgfCBvYmplY3QsIG1ldGhvZD86IHN0cmluZykge1xuICAgICAgICBjb25zdCBndWFyZHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8R3VhcmQ+W10+KENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEludGVyY2VwdG9yPltdPihDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG4gICAgICAgIGNvbnN0IHBpcGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPFBpcGU+W10+KENvcmVNZXRhZGF0YUtleS5QaXBlcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuICAgICAgICBjb25zdCBlcnJvckZpbHRlcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8RXJyb3JGaWx0ZXI+W10+KENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICByZXR1cm4geyBndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIGVycm9yRmlsdGVycyB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGltZXJzKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhPFRpbWVyTWV0YWRhdGFbXT4oQ29yZU1ldGFkYXRhS2V5LlRpbWVycywgY2xhc3NSZWYucHJvdG90eXBlKSA/PyBbXTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgSW50ZXJuYWxSUENTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgUlBDX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlksIE1BTkdPX1JFUVVFU1RfRkFDVE9SWSwgTUFOR09fUkVTUE9OU0VfRkFDVE9SWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc0FzeW5jRnVuY3Rpb24sIGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFBpcGVsaW5lSGFuZGxlciB9IGZyb20gJy4vcGlwZWxpbmUuaGFuZGxlcic7XG5pbXBvcnQgdHlwZSB7IFJQQ01ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcHBFbnZpcm9tZW50LCBFeGVjdXRpb25Db250ZXh0VHlwZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCB0eXBlIE1hbmdvUmVxdWVzdEJhc2UsIHR5cGUgTWFuZ29SZXNwb25zZUJhc2UgfSBmcm9tICcuLi9waXBlbGluZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IENhbGxIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgQ29udHJvbGxlckZsb3dIYW5kbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyLWZsb3cuaGFuZGxlcic7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyUlBDSGFuZGxlciB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJpdmF0ZSByZWFkb25seSBhcHBFbnY6IEFwcEVudmlyb21lbnQ7XG4gICAgQGluamVjdChSUENfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBycGNTZXJ2aWNlOiBJbnRlcm5hbFJQQ1NlcnZpY2U7XG4gICAgQGluamVjdChQaXBlbGluZUhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcGlwZWxpbmVIYW5kbGVyOiBQaXBlbGluZUhhbmRsZXI7XG4gICAgQGluamVjdChDb250cm9sbGVyRmxvd0hhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlckZsb3dIYW5kbGVyOiBDb250cm9sbGVyRmxvd0hhbmRsZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoTUFOR09fUkVRVUVTVF9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZU1hbmdvUmVxdWVzdDogKGRhdGE6IHVua25vd24sIHBsYXllcj86IFBsYXllck1wKSA9PiBNYW5nb1JlcXVlc3RCYXNlO1xuICAgIEBpbmplY3QoTUFOR09fUkVTUE9OU0VfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVNYW5nb1Jlc3BvbnNlOiAoKSA9PiBNYW5nb1Jlc3BvbnNlQmFzZTtcbiAgICBAaW5qZWN0KEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlRXhlY3V0aW9uQ29udGV4dDogKFxuICAgICAgICB0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZSxcbiAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICAgICAgICByZXF1ZXN0OiBNYW5nb1JlcXVlc3RCYXNlLFxuICAgICAgICByZXNwb25zZTogTWFuZ29SZXNwb25zZUJhc2UsXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICApID0+IEV4ZWN1dGlvbkNvbnRleHRCYXNlO1xuXG4gICAgcHVibGljIGFzeW5jIHJlZ2lzdGVyUlBDKFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgcnBjOiBSUENNZXRhZGF0YSxcbiAgICApIHtcbiAgICAgICAgaWYgKHJwYy50eXBlID09PSAnb25SZXF1ZXN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjU2VydmljZVtycGMudHlwZV0ocnBjLm5hbWUsIGFzeW5jIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocnBjLnR5cGUgPT09ICdvblBsYXllclJlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMubmFtZSwgYXN5bmMgKHBsYXllciwgYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJQQyhndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgcnBjLCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocnBjLnR5cGUgPT09ICdvblNlcnZlclJlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMubmFtZSwgYXN5bmMgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVSUEMoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIHJwYywgYm9keSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChycGMudHlwZSA9PT0gJ29uV2ViVmlld1JlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMud2ViVmlld0lkISwgcnBjLm5hbWUsIGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gYXJnc1sxXSA6IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgcGxheWVyID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gPFBsYXllck1wPmFyZ3NbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMsIGJvZHksIHBsYXllcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIFJQQy4nKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUlBDVHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSUEMoXG4gICAgICAgIGd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10sXG4gICAgICAgIGludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10sXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIG1hcHBlZEVycm9yRmlsdGVyczogW2FueSB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdLFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBycGM6IFJQQ01ldGFkYXRhLFxuICAgICAgICBib2R5OiB1bmtub3duLFxuICAgICAgICBwbGF5ZXI/OiBQbGF5ZXJNcCxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5jcmVhdGVNYW5nb1JlcXVlc3QoXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIgJiYgKHJwYy50eXBlID09PSAnb25QbGF5ZXJSZXF1ZXN0JyB8fCBycGMudHlwZSA9PT0gJ29uV2ViVmlld1JlcXVlc3QnKVxuICAgICAgICAgICAgICAgICAgICA/IHBsYXllclxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuY3JlYXRlTWFuZ29SZXNwb25zZSgpO1xuICAgICAgICAgICAgcmVzcG9uc2UuJG9uU2VuZCgoZGF0YSkgPT4gcmVzb2x2ZShkYXRhKSk7XG4gICAgICAgICAgICByZXNwb25zZS4kb25FcnJvcigoZXJyb3IpID0+IHJlc29sdmUoZXJyb3IpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSB0aGlzLmNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQoXG4gICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dFR5cGUuUlBDLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYsXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZi5wcm90b3R5cGVbcnBjLm1ldGhvZF0sXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBycGMubmFtZSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hHdWFyZHMoZXhlY3V0aW9uQ29udGV4dCwgZ3VhcmRzLCBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJncyA9IGF3YWl0IHRoaXMuY29udHJvbGxlckZsb3dIYW5kbGVyLmNyZWF0ZUFyZ3MoY29udHJvbGxlciwgZXhlY3V0aW9uQ29udGV4dCwgcnBjLCBwaXBlcywgcGxheWVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0aG9kID0gY29udHJvbGxlci5pbnN0YW5jZVtycGMubWV0aG9kXSE7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gaXNBc3luY0Z1bmN0aW9uKGNvbnRyb2xsZXJNZXRob2QpXG4gICAgICAgICAgICAgICAgICAgID8gKG9wdGlvbnM6IHsgc2VuZDogYm9vbGVhbiB9ID0geyBzZW5kOiB0cnVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udHJvbGxlci5pbnN0YW5jZVtycGMubWV0aG9kXSEuYXBwbHkoY29udHJvbGxlci5pbnN0YW5jZSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBhc3luYyAob3B0aW9uczogeyBzZW5kOiBib29sZWFuIH0gPSB7IHNlbmQ6IHRydWUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLmluc3RhbmNlW3JwYy5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsSGFuZGxlcjogQ2FsbEhhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOiAodmFsdWU6IHVua25vd24pID0+IHJlc3BvbnNlLnNlbmQodmFsdWUpLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29UaHJvdWdoSW50ZXJjZXB0b3JzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2FsbEhhbmRsZXIuaGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckdyb3VwID0gbWFwcGVkRXJyb3JGaWx0ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChbZXJyb3JUeXBlXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGVycm9yVHlwZSkgJiYgZXJyb3IgaW5zdGFuY2VvZiBlcnJvclR5cGUpIHx8IGVycm9yVHlwZSA9PT0gJ01BTkdPX0FOWV9FUlJPUicgfHwgZXJyb3IgPT09IGVycm9yVHlwZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChpc05pbChlcnJvckdyb3VwKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldChlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgICAgICA6IGlzT2JqZWN0KGVycm9yR3JvdXBbMV0pICYmIGlzRnVuY3Rpb24oZXJyb3JHcm91cFsxXVsnY2F0Y2gnXSlcbiAgICAgICAgICAgICAgICAgICAgICA/IGVycm9yR3JvdXBbMV1cbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGluc3RhbmNlLmNhdGNoLmNhbGwoaW5zdGFuY2UsIGVycm9yLCBleGVjdXRpb25Db250ZXh0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlck1ldGFkYXRhLCBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB0eXBlIHsgU2NyaXB0UlBDSGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlciB7XG4gICAgcHVibGljIG1ldGFkYXRhOiBDb250cm9sbGVyTWV0YWRhdGE7XG4gICAgcHVibGljIGluc3RhbmNlOiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH07XG4gICAgcHVibGljIG93bmVyOiBNb2R1bGU7XG4gICAgcHVibGljIGV2ZW50SGFuZGxlcnM6IFNjcmlwdEV2ZW50SGFuZGxlcltdID0gW107XG4gICAgcHVibGljIHJwY0hhbmRsZXJzOiBTY3JpcHRSUENIYW5kbGVyW10gPSBbXTtcbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiwgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU1ldGFkYXRhLCBFcnJvckZpbHRlciwgR3VhcmQsIEludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsYXNzUHJvdmlkZXIsIER5bmFtaWNNb2R1bGUsIExvZ2dlclNlcnZpY2UsIE1vZHVsZU9wdGlvbnMsIFBpcGUsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNTdHJpbmcsIGlzU3ltYm9sIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlTWV0YWRhdGFSZWFkZXIge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyByZWFkKG1vZHVsZTogTmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+KSB7XG4gICAgICAgIC8vIENsYXNzIHJlZmVyZW5jZVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihtb2R1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxSZXF1aXJlZDxNb2R1bGVPcHRpb25zPj4oQ29yZU1ldGFkYXRhS2V5Lk1vZHVsZSwgbW9kdWxlKSA/PyA8UmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz4+e307XG4gICAgICAgICAgICBjb25zdCBleHBvcnRUb2tlbnMgPSB0aGlzLmdldEV4cG9ydFRva2VucyhvcHRpb25zLmV4cG9ydHMpO1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdGVkUHJvdmlkZXJzID0gdGhpcy5zZXBhcmF0ZVByb3ZpZGVycyhvcHRpb25zLnByb3ZpZGVycywgZXhwb3J0VG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIDxNb2R1bGVNZXRhZGF0YT57XG4gICAgICAgICAgICAgICAgY29udHJvbGxlcnM6IG9wdGlvbnMuY29udHJvbGxlcnMsXG4gICAgICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0UGlwZWxpbmUobW9kdWxlKSxcbiAgICAgICAgICAgICAgICAuLi5zZXBhcmF0ZWRQcm92aWRlcnMsXG4gICAgICAgICAgICAgICAgY2xhc3NSZWY6IG1vZHVsZSxcbiAgICAgICAgICAgICAgICBnbG9iYWw6IFJlZmxlY3QuZ2V0TWV0YWRhdGE8Ym9vbGVhbj4oQ29yZU1ldGFkYXRhS2V5Lkdsb2JhbE1vZHVsZSwgbW9kdWxlKSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IG9wdGlvbnMuY29udGFpbmVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEeW5hbWljIG1vZHVsZVxuICAgICAgICBpZiAobW9kdWxlIGluc3RhbmNlb2YgUHJvbWlzZSkgbW9kdWxlID0gYXdhaXQgbW9kdWxlO1xuICAgICAgICBpZiAoISgnbW9kdWxlJyBpbiBtb2R1bGUpKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkTW9kdWxlRGVmaW5pdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IG1vZHVsZTogY2xhc3NSZWYsIGdsb2JhbCwgLi4ub3B0aW9ucyB9ID0gPFJlcXVpcmVkPER5bmFtaWNNb2R1bGU+Pm1vZHVsZTtcbiAgICAgICAgY29uc3QgZXhwb3J0VG9rZW5zID0gdGhpcy5nZXRFeHBvcnRUb2tlbnMob3B0aW9ucy5leHBvcnRzKTtcbiAgICAgICAgY29uc3Qgc2VwYXJhdGVkUHJvdmlkZXJzID0gdGhpcy5zZXBhcmF0ZVByb3ZpZGVycyhvcHRpb25zLnByb3ZpZGVycywgZXhwb3J0VG9rZW5zKTtcblxuICAgICAgICByZXR1cm4gPE1vZHVsZU1ldGFkYXRhPntcbiAgICAgICAgICAgIGNvbnRyb2xsZXJzOiBvcHRpb25zLmNvbnRyb2xsZXJzLFxuICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzLFxuICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiksXG4gICAgICAgICAgICAuLi5zZXBhcmF0ZWRQcm92aWRlcnMsXG4gICAgICAgICAgICBjbGFzc1JlZixcbiAgICAgICAgICAgIGdsb2JhbDogZ2xvYmFsID8/IGZhbHNlLFxuICAgICAgICAgICAgY29udGFpbmVyOiBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBpcGVsaW5lKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IGd1YXJkcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxHdWFyZD5bXT4oQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgY2xhc3NSZWYpID8/IFtdO1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8SW50ZXJjZXB0b3I+W10+KENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIGNsYXNzUmVmKSA/PyBbXTtcbiAgICAgICAgY29uc3QgcGlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8UGlwZT5bXT4oQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCBjbGFzc1JlZikgPz8gW107XG4gICAgICAgIGNvbnN0IGVycm9yRmlsdGVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxFcnJvckZpbHRlcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgY2xhc3NSZWYpID8/IFtdO1xuXG4gICAgICAgIHJldHVybiB7IGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgZXJyb3JGaWx0ZXJzIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRUb2tlbnMoZXhwb3J0czogUmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz5bJ2V4cG9ydHMnXSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tYXA8SW5qZWN0aW9uVG9rZW4+KChwcm92aWRlckV4cG9ydCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXJFeHBvcnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFSZWZsZWN0Lmhhc093bk1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCBwcm92aWRlckV4cG9ydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXhwb3J0RGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlckV4cG9ydDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcocHJvdmlkZXJFeHBvcnQpIHx8IGlzU3ltYm9sKHByb3ZpZGVyRXhwb3J0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlckV4cG9ydDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ3Byb3ZpZGUnIGluIHByb3ZpZGVyRXhwb3J0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyRXhwb3J0LnByb3ZpZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFeHBvcnREZWZpbml0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXBhcmF0ZVByb3ZpZGVycyhwcm92aWRlcnM6IFJlcXVpcmVkPE1vZHVsZU9wdGlvbnM+Wydwcm92aWRlcnMnXSwgZXhwb3J0VG9rZW5zOiBJbmplY3Rpb25Ub2tlbltdKSB7XG4gICAgICAgIHJldHVybiBwcm92aWRlcnNcbiAgICAgICAgICAgIC5tYXAoKHByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluamVjdGFibGVNZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8SW5qZWN0YWJsZU1ldGFkYXRhPihDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOaWwoaW5qZWN0YWJsZU1ldGFkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxDbGFzc1Byb3ZpZGVyPnsgcHJvdmlkZTogcHJvdmlkZXIsIHVzZUNsYXNzOiBwcm92aWRlciwgc2NvcGU6IGluamVjdGFibGVNZXRhZGF0YS5zY29wZSB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ3VzZUNsYXNzJyBpbiBwcm92aWRlciB8fCAndXNlVmFsdWUnIGluIHByb3ZpZGVyIHx8ICd1c2VGYWN0b3J5JyBpbiBwcm92aWRlciB8fCAndXNlRXhpc3RpbmcnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoYWNjLCBwcm92aWRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3J0VG9rZW5zLmluY2x1ZGVzKHByb3ZpZGVyLnByb3ZpZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2MuZXh0ZXJuYWxQcm92aWRlcnMuc2V0KHByb3ZpZGVyLnByb3ZpZGUsIHByb3ZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjYy5pbnRlcm5hbFByb3ZpZGVycy5zZXQocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsUHJvdmlkZXJzOiBuZXcgTWFwPEluamVjdGlvblRva2VuLCBFeGNsdWRlPFByb3ZpZGVyLCBOZXdhYmxlPj4oKSxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcnM6IG5ldyBNYXA8SW5qZWN0aW9uVG9rZW4sIEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+PigpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ29udGFpbmVyIGV4dGVuZHMgQ29udGFpbmVyIHt9XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNb2R1bGVDb250YWluZXIgfSBmcm9tICcuL21vZHVsZS1jb250YWluZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udHJvbGxlcnM6IENvbnRyb2xsZXJbXSA9IFtdO1xuICAgIHB1YmxpYyBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcjtcbiAgICBwdWJsaWMgcGFyZW50OiBNb2R1bGUgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIG1ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YTtcbiAgICBwdWJsaWMgaW5zdGFuY2U6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfTtcbiAgICBwdWJsaWMgcmVwZXRpdGl2ZUltcG9ydHM6IFNldDxNb2R1bGU+ID0gbmV3IFNldCgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVOQUJMRV9TSFVURE9XTl9IT09LUywgR0xPQkFMX0VSUk9SX0ZJTFRFUlMsIEdMT0JBTF9HVUFSRFMsIEdMT0JBTF9JTlRFUkNFUFRPUlMsIEdMT0JBTF9QSVBFUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUsIG9wdGlvbmFsIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IENvbnRyb2xsZXIsIENvbnRyb2xsZXJFdmVudEhhbmRsZXIsIENvbnRyb2xsZXJSUENIYW5kbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgVHJlZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwUnVudGltZSB7XG4gICAgQGluamVjdChDb250cm9sbGVyRXZlbnRIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50SGFuZGxlcjogQ29udHJvbGxlckV2ZW50SGFuZGxlcjtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJSUENIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHJwY0hhbmRsZXI6IENvbnRyb2xsZXJSUENIYW5kbGVyO1xuICAgIEBpbmplY3QoR0xPQkFMX0dVQVJEUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxHdWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdO1xuICAgIEBpbmplY3QoR0xPQkFMX0lOVEVSQ0VQVE9SUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxJbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdO1xuICAgIEBpbmplY3QoR0xPQkFMX1BJUEVTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW107XG4gICAgQGluamVjdChHTE9CQUxfRVJST1JfRklMVEVSUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxFcnJvckZpbHRlcnM6IChOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyKVtdO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAaW5qZWN0KEVOQUJMRV9TSFVURE9XTl9IT09LUykgQG9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBlbmFibGVTaHV0ZG93bkhvb2tzOiBib29sZWFuO1xuXG4gICAgcHVibGljIGFzeW5jIGJvb3QocmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4pIHtcbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIG1vZHVsZSwgY29udHJvbGxlcnMgYW5kIHByb3ZpZGVycy5cbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuaW5zdGFuY2UgPSBtb2R1bGUuY29udGFpbmVyLmdldDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+KG1vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZik7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoY29udHJvbGxlcikgPT4gKGNvbnRyb2xsZXIuaW5zdGFuY2UgPSBtb2R1bGUuY29udGFpbmVyLmdldDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+KGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBbLi4ubW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzLCAuLi5tb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnNdLmZvckVhY2goKFt0b2tlbl0pID0+XG4gICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5nZXQ8YW55Pih0b2tlbiksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBMb2cgbW9kdWxlIGxvYWRlZC5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35sb2FkZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJ1bkxpZmVjeWNsZU1ldGhvZChtb2R1bGUsICdvbk1vZHVsZUluaXQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZUluaXQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uQXBwQm9vdHN0cmFwJyk7XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgZXZlbnQgYW5kIHJwYyBsaXN0ZW5lcnMuXG4gICAgICAgIHJlc29sdmVkVHJlZS50cmF2ZXJzZSgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlclRpbWVycyhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGB+bHd+Q29udHJvbGxlciB+bGN+JHtjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd350aW1lcnMgYW5kIGxpc3RlbmVycyByZWdpc3RlcmVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNodXRkb3duKHJlc29sdmVkVHJlZTogVHJlZTxNb2R1bGU+KSB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZURlc3Ryb3knKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdiZWZvcmVBcHBTaHV0ZG93bicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyU2VydmljZSA9IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldDxUaW1lclNlcnZpY2U+KFRJTUVSX1NFUlZJQ0UpO1xuXG4gICAgICAgICAgICAgICAgLy8gRGVzdHJveSBhbGwgdGltZXJzLlxuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5ldmVyeXRpY2tzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5pbnRlcnZhbHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLnRpbWVvdXRzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcm9ucy5mb3JFYWNoKChjcm9uKSA9PiBjcm9uLnN0b3AoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5ldmVudEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJwY0hhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCB0aW1lcnMuXG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmV2ZXJ5dGlja3MuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmludGVydmFscy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UudGltZW91dHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmNyb25Kb2JzLmZvckVhY2goKGNyb25Kb2IpID0+IGNyb25Kb2Iuc3RvcCgpKTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgIC8vIHRoaXMuZXZlbnRTZXJ2aWNlLiRsb2NhbEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy5ldmVudFNlcnZpY2UuJGludGVybmFsSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLmV2ZW50U2VydmljZS4kcmVtb3RlSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbkFwcFNodXRkb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gY29udHJvbGxlci5vd25lcjtcbiAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5ldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IFsuLi50aGlzLmdsb2JhbEd1YXJkcywgLi4ubW9kdWxlLm1ldGFkYXRhLmd1YXJkcywgLi4uY29udHJvbGxlci5tZXRhZGF0YS5ndWFyZHMsIC4uLmV2ZW50Lmd1YXJkc107XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxJbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ldmVudC5waXBlc107XG4gICAgICAgICAgICBjb25zdCBtYXBwZWRFcnJvckZpbHRlcnMgPSB0aGlzLm1hcEVycm9yRmlsdGVycyhbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxFcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuZXZlbnRIYW5kbGVyLnJlZ2lzdGVyRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZXZlbnRIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnJwY3MuZm9yRWFjaChhc3luYyAocnBjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBndWFyZHMgPSBbLi4udGhpcy5nbG9iYWxHdWFyZHMsIC4uLm1vZHVsZS5tZXRhZGF0YS5ndWFyZHMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuZ3VhcmRzLCAuLi5ycGMuZ3VhcmRzXTtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLnJwYy5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ycGMucGlwZXNdO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkRXJyb3JGaWx0ZXJzID0gdGhpcy5tYXBFcnJvckZpbHRlcnMoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2xvYmFsRXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLm1vZHVsZS5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4uY29udHJvbGxlci5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ucnBjLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgdGhpcy5ycGNIYW5kbGVyLnJlZ2lzdGVyUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMpO1xuICAgICAgICAgICAgY29udHJvbGxlci5ycGNIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJUaW1lcnMoY29udHJvbGxlcjogQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB0aW1lclNlcnZpY2UgPSBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQ8VGltZXJTZXJ2aWNlPihUSU1FUl9TRVJWSUNFKTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnRpbWVycy5mb3JFYWNoKCh0aW1lcikgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVyLnR5cGUgPT09ICdjcm9uJykge1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcmVhdGVDcm9uSm9iKGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIub3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICdldmVyeXRpY2snKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUV2ZXJ5VGljayhjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUludGVydmFsKFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLm9wdGlvbnMudGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgdGltZXIubmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAndGltZW91dCcpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlVGltZW91dChjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm9wdGlvbnMudGltZW91dCwgdGltZXIubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwRXJyb3JGaWx0ZXJzKGVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyTWFwOiBbdW5rbm93biB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZXJyb3JGaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPGFueVtdPihDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIGZpbHRlcikgPz8gW107XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdNQU5HT19BTllfRVJST1InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05pbChmaWx0ZXJNYXAuZmluZCgoZmlsdGVyRXJyb3IpID0+IGZpbHRlckVycm9yWzBdID09PSBlcnJvcikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIG1hcCBlcnJvciBmaWx0ZXJzLicpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlck1hcC5wdXNoKFtlcnJvciwgZmlsdGVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyTWFwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kcyhcbiAgICAgICAgcmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4sXG4gICAgICAgIG1ldGhvZDogJ29uTW9kdWxlSW5pdCcgfCAnb25Nb2R1bGVEZXN0cm95JyB8ICdvbkFwcEJvb3RzdHJhcCcgfCAnYmVmb3JlQXBwU2h1dGRvd24nIHwgJ29uQXBwU2h1dGRvd24nLFxuICAgICkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kKG5vZGUudmFsdWUsIG1ldGhvZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kKFxuICAgICAgICBtb2R1bGU6IE1vZHVsZSxcbiAgICAgICAgbWV0aG9kOiAnb25Nb2R1bGVJbml0JyB8ICdvbk1vZHVsZURlc3Ryb3knIHwgJ29uQXBwQm9vdHN0cmFwJyB8ICdiZWZvcmVBcHBTaHV0ZG93bicgfCAnb25BcHBTaHV0ZG93bicsXG4gICAgKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgbW9kdWxlLmNvbnRyb2xsZXJzLm1hcChhc3luYyAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoY29udHJvbGxlci5pbnN0YW5jZSkgfHwgaXNOaWwoY29udHJvbGxlci5pbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2xsZXIuaW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10ubWFwKGFzeW5jIChbdG9rZW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbnN0YW5jZSA9IDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+bW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QocHJvdmlkZXJJbnN0YW5jZSkgfHwgaXNOaWwocHJvdmlkZXJJbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IHByb3ZpZGVySW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KG1vZHVsZS5pbnN0YW5jZSkgfHwgaXNOaWwobW9kdWxlLmluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgIGF3YWl0IG1vZHVsZS5pbnN0YW5jZVttZXRob2RdISgpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENPTlRBSU5FUl9PUFRJT05TLCBHTE9CQUxfQVBQX0NPTlRBSU5FUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgTU9EVUxFX0NPTlRBSU5FUiwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFRyZWUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVEZXBlbmRlbmN5QmluZGVyIHtcbiAgICBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAb3B0aW9uYWwoKSBAaW5qZWN0KENPTlRBSU5FUl9PUFRJT05TKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lck9wdGlvbnM/OiBpbnRlcmZhY2VzLkNvbnRhaW5lck9wdGlvbnM7XG5cbiAgICBwdWJsaWMgYXN5bmMgYmluZChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIgPSBuZXcgTW9kdWxlQ29udGFpbmVyKG1vZHVsZS5tZXRhZGF0YS5jb250YWluZXIgPz8gdGhpcy5jb250YWluZXJPcHRpb25zKTtcbiAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgZ2xvYmFsIGNvbnRhaW5lciB0byB0aGUgbW9kdWxlIGNvbnRhaW5lciwgc28gaXQgY2FuIGJlIHVzZWQgdG8gcmVzb2x2ZSBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLnBhcmVudCA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChtb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBnbG9iYWwsIHdlIHdhbnQgdG8gYmluZCBpdCB0byB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgICAgIGlmIChtb2R1bGUubWV0YWRhdGEuZ2xvYmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gQmluZCBleHRlcm5hbCBwcm92aWRlcnMgdG8gdGhlIGdsb2JhbCBjb250YWluZXIsIHNvIHRoZXkgY2FuIGJlIGluamVjdGVkIGluIG90aGVyIG1vZHVsZXMuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgcHJvdmlkZXJdIG9mIG1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgdGhpcy5nbG9iYWxBcHBDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBub3QgZ2xvYmFsLCB3ZSB3YW50IHRvIGJpbmQgaXQgdG8gaXRzIG93biBjb250YWluZXIuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9rZW4sIHByb3ZpZGVyXSBvZiBtb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUucGFyZW50Py5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gbW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbXBvcnRNb2R1bGUgb2YgbW9kdWxlLnJlcGV0aXRpdmVJbXBvcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3Rva2VuXSBvZiBpbXBvcnRNb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gaW1wb3J0TW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBpbnRlcm5hbCBwcm92aWRlcnMuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBwcm92aWRlcl0gb2YgbW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIGNvbnRhaW5lciB0byBpdHNlbGYgc28gaXQgY2FuIGJlIGluamVjdGVkLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKE1PRFVMRV9DT05UQUlORVIpLnRvQ29uc3RhbnRWYWx1ZShtb2R1bGUuY29udGFpbmVyKTtcblxuICAgICAgICAgICAgLy8gQmluZCBjb250cm9sbGVycyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBzZXJ2aWNlcyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKFRJTUVSX1NFUlZJQ0UpLnRvKFRpbWVyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgICAgICAgICAgIGB+bHd+TW9kdWxlIH5sYn4ke21vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZi5uYW1lfSB+bHd+ZGVwZW5kZW5jaWVzIGJpbmRlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kUHJvdmlkZXIocHJvdmlkZXI6IEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+LCBjb250YWluZXI6IENvbnRhaW5lcikge1xuICAgICAgICBpZiAoJ3VzZVZhbHVlJyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29udGFpbmVyLmJpbmQocHJvdmlkZXIucHJvdmlkZSkudG9Db25zdGFudFZhbHVlKHByb3ZpZGVyLnVzZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRmFjdG9yeScgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b0R5bmFtaWNWYWx1ZSgoY3R4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwcyA9XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLmluamVjdD8ubWFwKChkZXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChkZXApICYmICd0b2tlbicgaW4gZGVwICYmICdvcHRpb25hbCcgaW4gZGVwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jb250YWluZXIuZ2V0KGRlcC50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXAub3B0aW9uYWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlc29sdmUgYSBkZXBlbmRlbmN5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jb250YWluZXIuZ2V0KGRlcCk7XG4gICAgICAgICAgICAgICAgICAgIH0pID8/IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlci51c2VGYWN0b3J5KC4uLmRlcHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICd0cmFuc2llbnQnKSBiaW5kaW5nLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyLnNjb3BlID09PSAncmVxdWVzdCcpIGJpbmRpbmcuaW5SZXF1ZXN0U2NvcGUoKTtcbiAgICAgICAgICAgIGVsc2UgYmluZGluZy5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZUNsYXNzJyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvKHByb3ZpZGVyLnVzZUNsYXNzKTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3RyYW5zaWVudCcpIGJpbmRpbmcuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICdyZXF1ZXN0JykgYmluZGluZy5pblJlcXVlc3RTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBiaW5kaW5nLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRXhpc3RpbmcnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b1NlcnZpY2UocHJvdmlkZXIudXNlRXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgU2V0TWV0YWRhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzJztcbmltcG9ydCB0eXBlIHsgQ3JlYXRlRGVjb3JhdG9yT3B0aW9ucywgQ3JlYXRlRGVjb3JhdG9yV2l0aFRyYW5zZm9ybU9wdGlvbnMsIFJlZmxlY3RhYmxlRGVjb3JhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUlkLCBpc0VtcHR5LCBpc09iamVjdCB9IGZyb20gJy4uL3V0aWxzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZmxlY3RvclNlcnZpY2Uge1xuICAgIHB1YmxpYyBnZXQ8VFJlc3VsdCA9IHVua25vd24sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KG1ldGFkYXRhS2V5OiBUS2V5LCB0YXJnZXQ6IE5ld2FibGUgfCBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YTxUUmVzdWx0PihtZXRhZGF0YUtleSwgdGFyZ2V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsPFRSZXN1bHQgZXh0ZW5kcyB1bmtub3duW10gPSB1bmtub3duW10sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KFxuICAgICAgICBtZXRhZGF0YUtleTogVEtleSxcbiAgICAgICAgdGFyZ2V0czogKE5ld2FibGUgfCBGdW5jdGlvbilbXSxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIDxUUmVzdWx0Pih0YXJnZXRzIHx8IFtdKS5tYXAoKHRhcmdldCkgPT4gdGhpcy5nZXQobWV0YWRhdGFLZXksIHRhcmdldCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxBbmRNZXJnZTxUUmVzdWx0IGV4dGVuZHMgdW5rbm93bltdID0gdW5rbm93bltdLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihcbiAgICAgICAgbWV0YWRhdGFLZXk6IFRLZXksXG4gICAgICAgIHRhcmdldHM6IChOZXdhYmxlIHwgRnVuY3Rpb24pW10sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQ29sbGVjdGlvbiA9IHRoaXMuZ2V0QWxsPFRSZXN1bHQsIFRLZXk+KG1ldGFkYXRhS2V5LCB0YXJnZXRzKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKGlzRW1wdHkobWV0YWRhdGFDb2xsZWN0aW9uKSkgcmV0dXJuIDxUUmVzdWx0Pm1ldGFkYXRhQ29sbGVjdGlvbjtcblxuICAgICAgICByZXR1cm4gPFRSZXN1bHQ+bWV0YWRhdGFDb2xsZWN0aW9uLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoYSkgJiYgaXNPYmplY3QoYikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgICAgICAuLi5iLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2EsIGJdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsQW5kT3ZlcnJpZGU8VFJlc3VsdCA9IHVua25vd24sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KG1ldGFkYXRhS2V5OiBUS2V5LCB0YXJnZXRzOiAoTmV3YWJsZSB8IEZ1bmN0aW9uKVtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0KG1ldGFkYXRhS2V5LCB0YXJnZXQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gPFRSZXN1bHQ+cmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtPihvcHRpb25zPzogQ3JlYXRlRGVjb3JhdG9yT3B0aW9uczxUUGFyYW0+KTogUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtPjtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4oXG4gICAgICAgIG9wdGlvbnM6IENyZWF0ZURlY29yYXRvcldpdGhUcmFuc2Zvcm1PcHRpb25zPFRQYXJhbSwgVFRyYW5zZm9ybWVkPixcbiAgICApOiBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD47XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQgPSBUUGFyYW0+KFxuICAgICAgICBvcHRpb25zOiBDcmVhdGVEZWNvcmF0b3JPcHRpb25zPFRQYXJhbSwgVFRyYW5zZm9ybWVkPiA9IHt9LFxuICAgICk6IFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPiB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhS2V5ID0gb3B0aW9ucy5rZXkgPz8gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgICAgICBjb25zdCBkZWNvcmF0b3JGbiA9IChtZXRhZGF0YVZhbHVlOiBUUGFyYW0pID0+ICh0YXJnZXQ6IG9iamVjdCB8IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy50cmFuc2Zvcm0gPyBvcHRpb25zLnRyYW5zZm9ybShtZXRhZGF0YVZhbHVlKSA6IG1ldGFkYXRhVmFsdWU7XG4gICAgICAgICAgICBTZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdmFsdWUgPz8ge30pKHRhcmdldCwga2V5ISwgZGVzY3JpcHRvcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZGVjb3JhdG9yRm4uS0VZID0gbWV0YWRhdGFLZXk7XG4gICAgICAgIHJldHVybiBkZWNvcmF0b3JGbiBhcyBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD47XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUVycm9yRmlsdGVyPEVGIGV4dGVuZHMgRXJyb3JGaWx0ZXIgPSBFcnJvckZpbHRlcj4odmFsdWU6IEVGIHwgTmV3YWJsZTxFRj4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0Vycm9yIGZpbHRlciBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUucHJvdG90eXBlLmNhdGNoKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgaGF2ZSBhIGNhdGNoIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKCg8RXJyb3JGaWx0ZXI+dmFsdWUpLmNhdGNoKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgaGF2ZSBhIGNhdGNoIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGlwZSh2YWx1ZTogUGlwZSB8IE5ld2FibGU8UGlwZT4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpICYmICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQaXBlIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUudHJhbnNmb3JtKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBoYXZlIGEgdHJhbnNmb3JtIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKCg8UGlwZT52YWx1ZSkudHJhbnNmb3JtKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBoYXZlIGEgdHJhbnNmb3JtIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVHdWFyZDxHIGV4dGVuZHMgR3VhcmQgPSBHdWFyZD4odmFsdWU6IEcgfCBOZXdhYmxlPEc+KSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxHdWFyZD52YWx1ZSkuY2FuQWN0aXZhdGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBoYXZlIGEgY2FuQWN0aXZhdGUgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUludGVyY2VwdG9yPEkgZXh0ZW5kcyBJbnRlcmNlcHRvciA9IEludGVyY2VwdG9yPih2YWx1ZTogSSB8IE5ld2FibGU8ST4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNGdW5jdGlvbigoPEludGVyY2VwdG9yPnZhbHVlKS5pbnRlcmNlcHQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW50ZXJjZXB0b3IgbXVzdCBoYXZlIGFuIGludGVyY2VwdCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEluamVjdGFibGVTY29wZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuY29uc3QgZGVmYXVsdEluamVjdGFibGVPcHRpb25zOiBJbmplY3RhYmxlT3B0aW9ucyA9IHsgc2NvcGU6IEluamVjdGFibGVTY29wZS5TaW5nbGV0b24gfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhKHZhbHVlPzogSW5qZWN0YWJsZU9wdGlvbnMpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2NvcGUnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IHsgLi4uZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCAuLi52YWx1ZSB9IH07XG4gICAgfVxuICAgIGlmICgnc2NvcGUnIGluIHZhbHVlICYmICFpc1N0cmluZyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0luamVjdGFibGUgc2NvcGUgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG5cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhT2JqZWN0LnZhbHVlczxgJHtJbmplY3RhYmxlU2NvcGV9YD4oSW5qZWN0YWJsZVNjb3BlKS5pbmNsdWRlcyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdEluamVjdGFibGVPcHRpb25zLCBlcnJvcjogJ0ludmFsaWQgaW5qZWN0YWJsZSBzY29wZScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb250cm9sbGVyPFQgZXh0ZW5kcyBOZXdhYmxlPihvcHRpb25zPzogQ29udHJvbGxlck9wdGlvbnMpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlciwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXIsIHZhbHVlLCB0YXJnZXQpO1xuXG4gICAgICAgIHJldHVybiBpbmplY3RhYmxlKCkodGFyZ2V0KTtcbiAgICB9O1xufVxuIiwgImltcG9ydCB7IGluamVjdCB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3Q8VCA9IHVua25vd24+KGtleT86IEluamVjdGlvblRva2VuPFQ+KSB7XG4gICAgcmV0dXJuIDxQcm9wZXJ0eURlY29yYXRvciAmIFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwYXJhbUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICghaXNOaWwoa2V5KSAmJiAhdmFsaWRhdGVJbmplY3Rpb25Ub2tlbihrZXkpLnZhbGlkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbmplY3Rpb25Ub2tlblNwZWNpZmllZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b2tlbiA9IGtleSA/PyBSZWZsZWN0LmdldE1ldGFkYXRhPEluamVjdGlvblRva2VuPignZGVzaWduOnR5cGUnLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbmplY3Rpb25Ub2tlbk5vdEZvdW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluamVjdCh0b2tlbikodGFyZ2V0LCBwcm9wZXJ0eUtleSwgcGFyYW1JbmRleCk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBJbmplY3RhYmxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVJbmplY3RhYmxlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEluamVjdGFibGU8VCBleHRlbmRzIE5ld2FibGU+KG9wdGlvbnM/OiBJbmplY3RhYmxlT3B0aW9ucykge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3RhYmxlTWV0YWRhdGEob3B0aW9ucyk7XG4gICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkluamVjdGFibGUsIHZhbHVlLCB0YXJnZXQpO1xuXG4gICAgICAgIHJldHVybiBpbmplY3RhYmxlKCkodGFyZ2V0KTtcbiAgICB9O1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBNb2R1bGU8VCBleHRlbmRzIE5ld2FibGU+KG9wdGlvbnM/OiBNb2R1bGVPcHRpb25zKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5Lk1vZHVsZSwgdGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlTW9kdWxlT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yISk7XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5Lk1vZHVsZSwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgb3B0aW9uYWwgfSBmcm9tICdpbnZlcnNpZnknO1xuXG5leHBvcnQgZnVuY3Rpb24gT3B0aW9uYWwoKSB7XG4gICAgcmV0dXJuIDxQcm9wZXJ0eURlY29yYXRvciAmIFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwYXJhbUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBvcHRpb25hbCgpKHRhcmdldCwgcHJvcGVydHlLZXksIHBhcmFtSW5kZXgpO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQ3VzdG9tRGVjb3JhdG9yIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2V0TWV0YWRhdGE8SyBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgViA9IHVua25vd24+KGtleTogSywgdmFsdWU6IFYpIHtcbiAgICBjb25zdCBkZWNvcmF0b3JGYWN0b3J5ID0gPEN1c3RvbURlY29yYXRvcj4oKHRhcmdldDogb2JqZWN0LCBfbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKGtleSwgdmFsdWUsIGRlc2NyaXB0b3IudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShrZXksIHZhbHVlLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xuICAgIGRlY29yYXRvckZhY3RvcnkuS0VZID0ga2V5O1xuICAgIHJldHVybiBkZWNvcmF0b3JGYWN0b3J5O1xufVxuIiwgImltcG9ydCB7IExhenlTZXJ2aWNlSWRlbnRpZmllciwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRSZWY8VCA9IHVua25vd24+KGZuOiAoKSA9PiBpbnRlcmZhY2VzLlNlcnZpY2VJZGVudGlmaWVyPFQ+KSB7XG4gICAgcmV0dXJuIG5ldyBMYXp5U2VydmljZUlkZW50aWZpZXI8VD4oZm4pO1xufSIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDcm9uLCB0eXBlIENyb25PcHRpb25zIH0gZnJvbSAnY3JvbmVyJztcbmltcG9ydCB7IE1VTFRJUExBWUVSX1NFUlZJQ0UsIHR5cGUgTXVsdGlwbGF5ZXJTZXJ2aWNlLCB0eXBlIE11bHRpcGxheWVyVGltZXIgfSBmcm9tICcuLi9hcHAnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGltZXJTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBNdWx0aXBsYXllclNlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkZXZlcnl0aWNrcyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGludGVydmFscyA9IG5ldyBNYXA8c3RyaW5nLCBNdWx0aXBsYXllclRpbWVyPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJHRpbWVvdXRzID0gbmV3IE1hcDxzdHJpbmcsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkY3JvbnMgPSBuZXcgTWFwPHN0cmluZywgQ3Jvbj4oKTtcblxuICAgIHB1YmxpYyBnZXQgYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLmFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV2ZXJ5dGlja3MoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kZXZlcnl0aWNrcy52YWx1ZXMoKV07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbnRlcnZhbHMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kaW50ZXJ2YWxzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpbWVvdXRzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJHRpbWVvdXRzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNyb25zKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuJGNyb25zLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHdhcm5pbmdUaHJlc2hvbGQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMud2FybmluZ1RocmVzaG9sZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgd2FybmluZ1RocmVzaG9sZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy53YXJuaW5nVGhyZXNob2xkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUNyb25Kb2IoY2FsbGJhY2s6IEZ1bmN0aW9uLCBvcHRpb25zOiBDcm9uT3B0aW9ucyAmIHsgcGF0dGVybjogc3RyaW5nIHwgRGF0ZSB9KSB7XG4gICAgICAgIGNvbnN0IHsgcGF0dGVybiwgLi4uY3Jvbk9wdGlvbnMgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgY29uc3QgY3JvbiA9IENyb24ocGF0dGVybiwgY3Jvbk9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMubmFtZSkpIHRoaXMuJGNyb25zLnNldChvcHRpb25zLm5hbWUsIGNyb24pO1xuXG4gICAgICAgIHJldHVybiBjcm9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVJbnRlcnZhbChjYWxsYmFjazogRnVuY3Rpb24sIGludGVydmFsOiBudW1iZXIsIG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc2V0SW50ZXJ2YWwoY2FsbGJhY2ssIGludGVydmFsKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nKG5hbWUpKSB0aGlzLiRpbnRlcnZhbHMuc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVUaW1lb3V0KGNhbGxiYWNrOiBGdW5jdGlvbiwgdGltZW91dDogbnVtYmVyLCBuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJHRpbWVvdXRzLnNldChuYW1lLCB0aW1lcik7XG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRXZlcnlUaWNrKGNhbGxiYWNrOiBGdW5jdGlvbiwgbmFtZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5ldmVyeVRpY2soY2FsbGJhY2spO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJGV2ZXJ5dGlja3Muc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodHlwZTogJ2Nyb24nIHwgJ2V2ZXJ5dGljaycgfCAndGltZW91dCcgfCAnaW50ZXJ2YWwnLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjcm9uJzpcbiAgICAgICAgICAgICAgICBjb25zdCBjcm9uSm9iID0gdGhpcy4kY3JvbnMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjcm9uSm9iKSB7XG4gICAgICAgICAgICAgICAgICAgIGNyb25Kb2Iuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRjcm9ucy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXZlcnl0aWNrJzpcbiAgICAgICAgICAgICAgICBjb25zdCBldmVyeXRpY2sgPSB0aGlzLiRldmVyeXRpY2tzLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlcnl0aWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZXJ5dGljay5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGV2ZXJ5dGlja3MuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ludGVydmFsJzpcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMuJGludGVydmFscy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVydmFsLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW50ZXJ2YWxzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy4kdGltZW91dHMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiR0aW1lb3V0cy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5TmFtZSh0eXBlOiAnY3JvbicgfCAnZXZlcnl0aWNrJyB8ICd0aW1lb3V0JyB8ICdpbnRlcnZhbCcsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Nyb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRjcm9ucy5nZXQobmFtZSk7XG4gICAgICAgICAgICBjYXNlICdldmVyeXRpY2snOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRldmVyeXRpY2tzLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ2ludGVydmFsJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaW50ZXJ2YWxzLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiR0aW1lb3V0cy5nZXQobmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlJZChpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuZ2V0QnlJRChpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRpbWUobmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnRpbWUobmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRpbWVFbmQobmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnRpbWVFbmQobmFtZSk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgRHluYW1pY01vZHVsZSwgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZU1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBUcmVlLCBUcmVlTm9kZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlVHJlZVNjYW5uZXIge1xuICAgIEBpbmplY3QoTW9kdWxlTWV0YWRhdGFSZWFkZXIpIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlTWV0YWRhdGFSZWFkZXI6IE1vZHVsZU1ldGFkYXRhUmVhZGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcjogQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyBzY2FuKGNsYXNzUmVmOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4pIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gUmVhZCBtb2R1bGUgbWV0YWRhdGFcbiAgICAgICAgY29uc3QgbW9kdWxlTWV0YWRhdGEgPSBhd2FpdCB0aGlzLm1vZHVsZU1ldGFkYXRhUmVhZGVyLnJlYWQoY2xhc3NSZWYpO1xuICAgICAgICAvLyBDcmVhdGUgbW9kdWxlIGluc3RhbmNlIGFuZCBzZXQgbWV0YWRhdGEgdG8gaXRcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IE1vZHVsZSgpO1xuICAgICAgICBtb2R1bGUubWV0YWRhdGEgPSBtb2R1bGVNZXRhZGF0YTtcbiAgICAgICAgLy8gTG9nIG1vZHVsZSBpbmZvXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35zY2FubmVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBjb25zdCBtb2R1bGVUcmVlID0gbmV3IFRyZWUobW9kdWxlKTtcbiAgICAgICAgY29uc3Qgc2Nhbm5lZE1vZHVsZXMgPSBuZXcgTWFwPE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPiwgTW9kdWxlPigpO1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlc1xuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydGVkTW9kdWxlIG9mIG1vZHVsZU1ldGFkYXRhLmltcG9ydHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2Nhbk1vZHVsZXMobW9kdWxlVHJlZS5yb290LCBpbXBvcnRlZE1vZHVsZSwgc2Nhbm5lZE1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVUcmVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2Nhbk1vZHVsZXMoXG4gICAgICAgIHBhcmVudE5vZGU6IFRyZWVOb2RlPE1vZHVsZT4sXG4gICAgICAgIGNsYXNzUmVmOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sXG4gICAgICAgIHNjYW5uZWRNb2R1bGVzID0gbmV3IE1hcDxOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sIE1vZHVsZT4oKSxcbiAgICApIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgbW9kdWxlIGlzIGFscmVhZHkgaW1wb3J0ZWRcbiAgICAgICAgY29uc3Qgc2Nhbm5lZE1vZHVsZSA9IHNjYW5uZWRNb2R1bGVzLmdldChjbGFzc1JlZik7XG4gICAgICAgIGlmICghaXNOaWwoc2Nhbm5lZE1vZHVsZSkpIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUudmFsdWUucmVwZXRpdGl2ZUltcG9ydHMuYWRkKHNjYW5uZWRNb2R1bGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBSZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgICBjb25zdCBtb2R1bGVNZXRhZGF0YSA9IGF3YWl0IHRoaXMubW9kdWxlTWV0YWRhdGFSZWFkZXIucmVhZChjbGFzc1JlZik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgICAgICB0aGlzLmNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5KHBhcmVudE5vZGUudmFsdWUubWV0YWRhdGEsIG1vZHVsZU1ldGFkYXRhKTtcbiAgICAgICAgLy8gQ3JlYXRlIG1vZHVsZSBpbnN0YW5jZVxuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgTW9kdWxlKCk7XG4gICAgICAgIG1vZHVsZS5tZXRhZGF0YSA9IG1vZHVsZU1ldGFkYXRhO1xuICAgICAgICBtb2R1bGUucGFyZW50ID0gcGFyZW50Tm9kZS52YWx1ZTtcbiAgICAgICAgLy8gTG9nIG1vZHVsZSBpbmZvXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35zY2FubmVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBBZGQgbW9kdWxlIHRvIHRyZWVcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSBuZXcgVHJlZU5vZGUobW9kdWxlKTtcbiAgICAgICAgcGFyZW50Tm9kZS5hZGRDaGlsZCh0cmVlTm9kZSk7XG4gICAgICAgIC8vIEFkZCBtb2R1bGUgdG8gaW1wb3J0ZWQgbW9kdWxlcyBzZXQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzY2FubmluZ1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlcyByZWN1cnNpdmVseVxuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydE1vZHVsZSBvZiBtb2R1bGVNZXRhZGF0YS5pbXBvcnRzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNjYW5Nb2R1bGVzKHRyZWVOb2RlLCBpbXBvcnRNb2R1bGUsIHNjYW5uZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2NhbkNvbnRyb2xsZXJzKG1vZHVsZTogTW9kdWxlKSB7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnNcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0YWRhdGEgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlci5yZWFkKGNsYXNzUmVmKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YSA9IGNvbnRyb2xsZXJNZXRhZGF0YTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIgPSBtb2R1bGU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMucHVzaChjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fkNvbnRyb2xsZXIgfmxjfiR7Y2xhc3NSZWYubmFtZX0gfmx3fnNjYW5uZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5KHBhcmVudE1ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YSwgbW9kdWxlTWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHBhcmVudCBtb2R1bGUgaXMgaW1wb3J0ZWQgaW4gbW9kdWxlXG4gICAgICAgIGlmIChtb2R1bGVNZXRhZGF0YS5pbXBvcnRzLmluY2x1ZGVzKHBhcmVudE1ldGFkYXRhLmNsYXNzUmVmKSkge1xuICAgICAgICAgICAgLy8gdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzY2FubmluZyB0aGUgbW9kdWxlIHRyZWUuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkNpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJleHBvcnQgY2xhc3MgVHJlZU5vZGU8VD4ge1xuICAgIHB1YmxpYyB2YWx1ZTogVDtcbiAgICBwdWJsaWMgY2hpbGRyZW46IFRyZWVOb2RlPFQ+W107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENoaWxkKGNoaWxkOiBUcmVlTm9kZTxUPikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDaGlsZChjaGlsZDogVHJlZU5vZGU8VD4pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmVlPFQ+IHtcbiAgICBwdWJsaWMgcm9vdDogVHJlZU5vZGU8VD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy5yb290ID0gbmV3IFRyZWVOb2RlPFQ+KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhdmVyc2UoY2FsbGJhY2s6IChub2RlOiBUcmVlTm9kZTxUPikgPT4gdm9pZCkge1xuICAgICAgICBmdW5jdGlvbiB0cmF2ZXJzZU5vZGUobm9kZTogVHJlZU5vZGU8VD4pIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKHRyYXZlcnNlTm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0cmF2ZXJzZU5vZGUodGhpcy5yb290KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYXN5bmNUcmF2ZXJzZShjYWxsYmFjazogKG5vZGU6IFRyZWVOb2RlPFQ+KSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlOiBUcmVlTm9kZTxUPikge1xuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChub2RlLmNoaWxkcmVuLm1hcCh0cmF2ZXJzZU5vZGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRyYXZlcnNlTm9kZSh0aGlzLnJvb3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlOiBUcmVlTm9kZTxUPiwgZGVwdGg6IG51bWJlcikge1xuICAgICAgICAgICAgbGluZXMucHVzaChgJHsnLScucmVwZWF0KGRlcHRoICogMil9JHtub2RlLnZhbHVlfWApO1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gdHJhdmVyc2VOb2RlKGNoaWxkLCBkZXB0aCArIDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYXZlcnNlTm9kZSh0aGlzLnJvb3QsIDApO1xuICAgICAgICByZXN1bHQgPSBsaW5lcy5qb2luKCdcXG4nKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTWFuZ29SZXF1ZXN0QmFzZSB9IGZyb20gJy4vbWFuZ28tcmVxdWVzdC1iYXNlJztcbmltcG9ydCB0eXBlIHsgTWFuZ29SZXNwb25zZUJhc2UgfSBmcm9tICcuL21hbmdvLXJlc3BvbnNlLWJhc2UnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRXhlY3V0aW9uQ29udGV4dEJhc2U8XG4gICAgVFJlcXVlc3QgZXh0ZW5kcyBNYW5nb1JlcXVlc3RCYXNlID0gTWFuZ29SZXF1ZXN0QmFzZSxcbiAgICBUUmVzcG9uc2UgZXh0ZW5kcyBNYW5nb1Jlc3BvbnNlQmFzZSA9IE1hbmdvUmVzcG9uc2VCYXNlLFxuPiBpbXBsZW1lbnRzIEV4ZWN1dGlvbkNvbnRleHQ8VFJlcXVlc3QsIFRSZXNwb25zZT5cbntcbiAgICBwdWJsaWMgJHR5cGU6IEV4ZWN1dGlvbkNvbnRleHRUeXBlO1xuICAgIHB1YmxpYyAkY2xhc3NSZWY6IE5ld2FibGU7XG4gICAgcHVibGljICRoYW5kbGVyOiBGdW5jdGlvbjtcbiAgICBwdWJsaWMgJHJlcXVlc3Q6IFRSZXF1ZXN0O1xuICAgIHB1YmxpYyAkcmVzcG9uc2U/OiBUUmVzcG9uc2U7XG4gICAgcHVibGljICRuYW1lOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR0eXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xhc3NSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjbGFzc1JlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhbmRsZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWVzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNwb25zZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJlc3BvbnNlITtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRuYW1lO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTWFuZ29SZXF1ZXN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNYW5nb1JlcXVlc3RCYXNlPFREYXRhID0gdW5rbm93bj4gaW1wbGVtZW50cyBNYW5nb1JlcXVlc3Qge1xuICAgIHB1YmxpYyAkYm9keTogVERhdGE7XG4gICAgcHVibGljICRwbGF5ZXI/OiBQbGF5ZXJNcDtcblxuICAgIHB1YmxpYyBnZXQgYm9keSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGJvZHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGF5ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwbGF5ZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFJQQ0Vycm9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVzcG9uc2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hbmdvUmVzcG9uc2VCYXNlIGltcGxlbWVudHMgTWFuZ29SZXNwb25zZSB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSAkbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBwdWJsaWMgJHNlbmRMaXN0ZW5lcnM6IFNldDwoZGF0YTogdW5rbm93bikgPT4gdm9pZD4gPSBuZXcgU2V0KCk7XG4gICAgcHVibGljICRlcnJvckxpc3RlbmVyczogU2V0PChlcnJvcjogUlBDRXJyb3IpID0+IHZvaWQ+ID0gbmV3IFNldCgpO1xuICAgIHB1YmxpYyAkaXNTZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc2VuZDxURGF0YSA9IHVua25vd24+KGRhdGE/OiBURGF0YSkge1xuICAgICAgICBpZiAodGhpcy4kaXNTZW50KSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHRoZSBSUEMgcmVzcG9uc2UuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kc2VuZExpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoZGF0YSkpO1xuICAgICAgICB0aGlzLiRpc1NlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcnJvcjxURGV0YWlscyA9IHVua25vd24+KG1lc3NhZ2U6IHN0cmluZywgZGV0YWlscz86IFREZXRhaWxzKSB7XG4gICAgICAgIGlmICh0aGlzLiRpc1NlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgdGhlIFJQQyByZXNwb25zZS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDUmVzcG9uc2VBbHJlYWR5U2VudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZXJyb3JMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKHsgbWVzc2FnZSwgZGV0YWlscyB9KSk7XG4gICAgICAgIHRoaXMuJGlzU2VudCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljICRvblNlbmQobGlzdGVuZXI6IChkYXRhOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuJHNlbmRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgJG9uRXJyb3IobGlzdGVuZXI6IChlcnJvcjogUlBDRXJyb3IpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy4kZXJyb3JMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50RW1taXRlciwgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUV2ZW50U2VydmljZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkbG9jYWxIYW5kbGVyczogU2V0PFNjcmlwdEV2ZW50SGFuZGxlcj4gPSBuZXcgU2V0KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpbnRlcm5hbEhhbmRsZXJzOiBTZXQ8U2NyaXB0RXZlbnRIYW5kbGVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHJlbW90ZUhhbmRsZXJzOiBTZXQ8U2NyaXB0RXZlbnRIYW5kbGVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcm90ZWN0ZWQgJGludGVybmFsRXZlbnROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCAkZXZlbnRFbW1pdGVyOiBFdmVudEVtbWl0ZXIpIHt9XG5cbiAgICBwdWJsaWMgb248RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgY2FsbGJhY2s6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pOiBTY3JpcHRFdmVudEhhbmRsZXI7XG4gICAgcHVibGljIG9uPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPFNjcmlwdEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub24oZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG4gICAgcHVibGljIG9uY2U8RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgY2FsbGJhY2s6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbmNlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPik6IFNjcmlwdEV2ZW50SGFuZGxlcjtcbiAgICBwdWJsaWMgb25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxTY3JpcHRFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uY2UoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdDxFIGV4dGVuZHMga2V5b2YgVD4oZXZlbnROYW1lOiBFLCBib2R5PzogVFtFXSk6IHZvaWQ7XG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFLCBib2R5PzogdW5rbm93bik6IHZvaWQ7XG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFLCBib2R5PzogdW5rbm93bikge1xuICAgICAgICB0aGlzLiRldmVudEVtbWl0ZXIuZW1pdChldmVudE5hbWUsIGJvZHkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCAkb25JbnRlcm5hbChldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGlmICghdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzLmhhcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub24oZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgJG9uY2VJbnRlcm5hbChldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGlmICghdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzLmhhcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPFNjcmlwdEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub25jZShldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICB0aGlzLiRpbnRlcm5hbEhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBSUENSZXN1bHQsIFJQQ0NhbGxPcHRpb25zLCBTY3JpcHRSUENIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5ELCBSUENfUkVTVUxUX1RJTUVPVVQsIFJQQ19SRVNVTFRfVU5LTk9XTiB9IGZyb20gJy4uLy4uL2FwcC9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBNYW5nb0Vycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhc2VSUENTZXJ2aWNlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5ICRsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkVElNRU9VVCA9IDIwMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkbG9jYWxIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRSUENIYW5kbGVyPigpO1xuXG4gICAgcHVibGljIGFzeW5jIGNhbGw8RSBleHRlbmRzIGtleW9mIFQ+KFxuICAgICAgICBycGNOYW1lOiBFLFxuICAgICAgICBib2R5PzogUGFyYW1ldGVyczxUW0VdPlswXSxcbiAgICAgICAgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zLFxuICAgICk6IFByb21pc2U8UlBDUmVzdWx0PFJldHVyblR5cGU8VFtFXT4+PjtcbiAgICBwdWJsaWMgYXN5bmMgY2FsbDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zKTogUHJvbWlzZTxSUENSZXN1bHQ8dW5rbm93bj4+O1xuICAgIHB1YmxpYyBhc3luYyBjYWxsPEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuJGxvY2FsSGFuZGxlcnMuZ2V0KDxzdHJpbmc+cnBjTmFtZSk/LmhhbmRsZXI7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShSUENfUkVTVUxUX1RJTUVPVVQpO1xuICAgICAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0ID8/IHRoaXMuJFRJTUVPVVQpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoYm9keSk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUsIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlN1Y2Nlc3MsIGJvZHk6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNYW5nb0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogeyBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkZXRhaWxzOiBlcnJvci5kZXRhaWxzIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBvblJlcXVlc3Q8RSBleHRlbmRzIGtleW9mIFQ+KHJwY05hbWU6IEUsIGhhbmRsZXI6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0UlBDSGFuZGxlcjtcbiAgICBwdWJsaWMgb25SZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGhhbmRsZXI6IChib2R5OiB1bmtub3duKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPik6IFNjcmlwdFJQQ0hhbmRsZXI7XG4gICAgcHVibGljIG9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4pIHtcbiAgICAgICAgaWYgKHRoaXMuJGxvY2FsSGFuZGxlcnMuaGFzKHJwY05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgUlBDLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENIYW5kbGVyQWxyZWFkeUV4aXN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5kZWxldGUocnBjTmFtZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnBjTmFtZTogcnBjTmFtZSxcbiAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLiRsb2NhbEhhbmRsZXJzLnNldChycGNOYW1lLCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgdmFsaWRhdGVFcnJvckZpbHRlciwgdmFsaWRhdGVHdWFyZCwgdmFsaWRhdGVJbnRlcmNlcHRvciwgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vc2NoZW1hcy9ldmVudHMnO1xuaW1wb3J0IHtcbiAgICBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLFxuICAgIEdMT0JBTF9FUlJPUl9GSUxURVJTLFxuICAgIEdMT0JBTF9HVUFSRFMsXG4gICAgR0xPQkFMX0lOVEVSQ0VQVE9SUyxcbiAgICBHTE9CQUxfUElQRVMsXG4gICAgRU5BQkxFX1NIVVRET1dOX0hPT0tTLFxuICAgIFBMVUdJTlMsXG4gICAgR0xPQkFMX0FQUF9DT05UQUlORVIsXG4gICAgQVBQX0VOVklST01FTlQsXG4gICAgTUFOR09fUkVRVUVTVF9GQUNUT1JZLFxuICAgIE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlksXG4gICAgRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSxcbiAgICBDT05UQUlORVJfT1BUSU9OUyxcbiAgICBNVUxUSVBMQVlFUl9TRVJWSUNFLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3QsIENvbnRhaW5lciwgaW5qZWN0YWJsZSwgdHlwZSBpbnRlcmZhY2VzIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEFwcCB9IGZyb20gJy4vYXBwJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgTWFuZ29QbHVnaW4sIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgQ29udHJvbGxlckV2ZW50SGFuZGxlcixcbiAgICBDb250cm9sbGVyRmxvd0hhbmRsZXIsXG4gICAgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyLFxuICAgIENvbnRyb2xsZXJSUENIYW5kbGVyLFxuICAgIFBpcGVsaW5lSGFuZGxlcixcbn0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IE1vZHVsZSwgTW9kdWxlTWV0YWRhdGFSZWFkZXIgfSBmcm9tICcuL21vZHVsZSc7XG5pbXBvcnQgeyBBcHBSdW50aW1lLCBNb2R1bGVEZXBlbmRlbmN5QmluZGVyLCBNb2R1bGVUcmVlU2Nhbm5lciB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBFeGVjdXRpb25Db250ZXh0QmFzZSwgTWFuZ29SZXF1ZXN0QmFzZSwgTWFuZ29SZXNwb25zZUJhc2UgfSBmcm9tICcuL3BpcGVsaW5lJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB7IFJFRkxFQ1RPUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJlZmxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBCdWlsZGVyPEcgZXh0ZW5kcyBHdWFyZCA9IEd1YXJkLCBJIGV4dGVuZHMgSW50ZXJjZXB0b3IgPSBJbnRlcmNlcHRvciwgRUYgZXh0ZW5kcyBFcnJvckZpbHRlciA9IEVycm9yRmlsdGVyPiB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb21lbnQ6IHN0cmluZztcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByb3RlY3RlZCByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoUExVR0lOUykgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W107XG5cbiAgICBwcml2YXRlIGdsb2JhbENvbnRhaW5lck9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucyA9IHt9O1xuXG4gICAgcHVibGljIHVzZUdsb2JhbEd1YXJkcyguLi5ndWFyZHM6IChOZXdhYmxlPEc+IHwgRylbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRHdWFyZHM6IChOZXdhYmxlPEc+IHwgRylbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIGd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUd1YXJkKGd1YXJkKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRHdWFyZHMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0dVQVJEUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZEd1YXJkcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJPiB8IEkpW10pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkSW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJPiB8IEkpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkSW50ZXJjZXB0b3JzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRJbnRlcmNlcHRvcnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsUGlwZXMoLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX1BJUEVTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkUGlwZXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsRmlsdGVycyguLi5maWx0ZXJzOiAoTmV3YWJsZTxFRj4gfCBFRilbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGSWx0ZXJzOiAoTmV3YWJsZTxFRj4gfCBFRilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlRXJyb3JGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRGSWx0ZXJzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkRklsdGVycyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VQbHVnaW5zKC4uLnBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W10pIHtcbiAgICAgICAgcGx1Z2lucy5mb3JFYWNoKChwKSA9PiB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQocCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxQbHVnaW5zID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQ8TmV3YWJsZTxNYW5nb1BsdWdpbj5bXT4oUExVR0lOUyk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIucmViaW5kKFBMVUdJTlMpLnRvQ29uc3RhbnRWYWx1ZShbLi4uaW50ZXJuYWxQbHVnaW5zLCAuLi5wbHVnaW5zXSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVTaHV0ZG93bkhvb2tzKCkge1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRU5BQkxFX1NIVVRET1dOX0hPT0tTKS50b0NvbnN0YW50VmFsdWUodHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb250YWluZXJPcHRpb25zKG9wdGlvbnM6IGludGVyZmFjZXMuQ29udGFpbmVyT3B0aW9ucywgb25seUdsb2JhbCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29udGFpbmVyT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChvbmx5R2xvYmFsKSByZXR1cm4gdGhpcztcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENPTlRBSU5FUl9PUFRJT05TKS50b0NvbnN0YW50VmFsdWUob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBidWlsZCgpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsQXBwQ29udGFpbmVyID0gbmV3IENvbnRhaW5lcih0aGlzLmdsb2JhbENvbnRhaW5lck9wdGlvbnMpO1xuICAgICAgICAvLyBHTG9iYWwgc2VydmljZSBiaW5kaW5nc1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChSRUZMRUNUT1JfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKFJlZmxlY3RvclNlcnZpY2UpO1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChSZWZsZWN0b3JTZXJ2aWNlKS50b1NlcnZpY2UoUkVGTEVDVE9SX1NFUlZJQ0UpO1xuXG4gICAgICAgIC8vIE11bHRpcGxheWVyIHNlcnZpY2UgYmluZGluZ3NcbiAgICAgICAgZ2xvYmFsQXBwQ29udGFpbmVyLmJpbmQoTVVMVElQTEFZRVJfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlKTtcbiBcbiAgICAgICAgLy8gQXBwIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChBcHApLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9BUFBfQ09OVEFJTkVSKS50b0NvbnN0YW50VmFsdWUoZ2xvYmFsQXBwQ29udGFpbmVyKTtcblxuICAgICAgICAvLyBNb2R1bGUgdHJlZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlVHJlZVNjYW5uZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZURlcGVuZGVuY3lCaW5kZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFwcFJ1bnRpbWUpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAvLyBBcHAgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFBpcGVsaW5lSGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIE1vZHVsZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGVNZXRhZGF0YVJlYWRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIENvbnRyb2xsZXIgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXIpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlckZsb3dIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyRXZlbnRIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyUlBDSGFuZGxlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIE1hbmdvIFJlcXVlc3QgYW5kIFJlc3BvbnNlIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNYW5nb1JlcXVlc3RCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNQU5HT19SRVFVRVNUX0ZBQ1RPUlkpLnRvRmFjdG9yeSgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChib2R5OiB1bmtub3duLCBwbGF5ZXI6IFBsYXllck1wKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNvbnRleHQuY29udGFpbmVyLmdldChNYW5nb1JlcXVlc3RCYXNlKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LiRib2R5ID0gYm9keTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0LiRwbGF5ZXIgPSBwbGF5ZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1hbmdvUmVzcG9uc2VCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNQU5HT19SRVNQT05TRV9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY29udGFpbmVyLmdldChNYW5nb1Jlc3BvbnNlQmFzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEV4ZWN1dGlvbkNvbnRleHRCYXNlKS50b1NlbGYoKS5pblRyYW5zaWVudFNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZKS50b0ZhY3RvcnkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdHlwZTogRXhlY3V0aW9uQ29udGV4dFR5cGUsXG4gICAgICAgICAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogTWFuZ29SZXF1ZXN0QmFzZSxcbiAgICAgICAgICAgICAgICByZXNwb25zZTogTWFuZ29SZXNwb25zZUJhc2UsXG4gICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQuY29udGFpbmVyLmdldChFeGVjdXRpb25Db250ZXh0QmFzZSk7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kdHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kcmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kcmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRoYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRjbGFzc1JlZiA9IGNsYXNzUmVmO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJG5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRpb25Db250ZXh0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUGx1Z2lucyBiaW5kaW5nc1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnBsdWdpbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChwbHVnaW4pLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbkluc3RhbmNlID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQocGx1Z2luKTtcbiAgICAgICAgICAgIGlmICghcGx1Z2luSW5zdGFuY2Uub25CdWlsZCkgY29udGludWU7XG4gICAgICAgICAgICBhd2FpdCBwbHVnaW5JbnN0YW5jZS5vbkJ1aWxkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuaXNCb3VuZChHTE9CQUxfR1VBUkRTKSkgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9HVUFSRFMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpKVxuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9JTlRFUkNFUFRPUlMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9QSVBFUykpIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfUElQRVMpLnRvQ29uc3RhbnRWYWx1ZShbXSk7XG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKSlcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfRVJST1JfRklMVEVSUykudG9Db25zdGFudFZhbHVlKFtdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQoQXBwKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ29udGFpbmVyLCBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgTW9kdWxlRGVwZW5kZW5jeUJpbmRlciwgTW9kdWxlVHJlZVNjYW5uZXIgfSBmcm9tICcuL21vZHVsZS10cmVlJztcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gJy4vbW9kdWxlL21vZHVsZSc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLCBQTFVHSU5TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwUnVudGltZSB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1BsdWdpbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb3JlL21hbmdvLXBsdWdpbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBUcmVlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcCB7XG4gICAgQGluamVjdChNb2R1bGVUcmVlU2Nhbm5lcikgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVUcmVlU2Nhbm5lcjogTW9kdWxlVHJlZVNjYW5uZXI7XG4gICAgQGluamVjdChNb2R1bGVEZXBlbmRlbmN5QmluZGVyKSBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZURlcGVuZGVuY3lCaW5kZXI6IE1vZHVsZURlcGVuZGVuY3lCaW5kZXI7XG4gICAgQGluamVjdChBcHBSdW50aW1lKSBwcml2YXRlIHJlYWRvbmx5IGFwcFJ1bnRpbWU6IEFwcFJ1bnRpbWU7XG4gICAgQGluamVjdChJTlRFUk5BTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGludGVybmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChQTFVHSU5TKSBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbnM6IE5ld2FibGU8TWFuZ29QbHVnaW4+W107XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgbW9kdWxlVHJlZTogVHJlZTxNb2R1bGU+O1xuICAgIHByaXZhdGUgbG9hZGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnQ8VD4ocm9vdE1vZHVsZTogTmV3YWJsZTxUPikge1xuICAgICAgICBpZiAodGhpcy5sb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgc3RhcnRpbmcgdGhlIGFwcC4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXBwQWxyZWFkeUxvYWRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flN0YXJ0aW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0YXJ0Jyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flNjYW5uaW5nIG1vZHVsZSB0cmVlLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYmVmb3JlU2NhbicpO1xuICAgICAgICB0aGlzLm1vZHVsZVRyZWUgPSBhd2FpdCB0aGlzLm1vZHVsZVRyZWVTY2FubmVyLnNjYW4ocm9vdE1vZHVsZSk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTY2FuJyk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3fkJpbmRpbmcgbW9kdWxlIGRlcGVuZGVuY2llcy4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZUJpbmQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2R1bGVEZXBlbmRlbmN5QmluZGVyLmJpbmQodGhpcy5tb2R1bGVUcmVlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckJpbmQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+TG9hZGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVMb2FkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwUnVudGltZS5ib290KHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlckxvYWQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+QXBwIGxvYWRlZCcpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTdGFydCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdG9wKCkge1xuICAgICAgICBpZiAoIXRoaXMubG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0Vycm9yIG9jY3VycmVkIHdoaWxlIHN0b3BwaW5nIHRoZSBhcHAuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkFwcE5vdExvYWRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVTdG9wJyk7XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35TdG9wcGluZyBhcHAuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBSdW50aW1lLnNodXRkb3duKHRoaXMubW9kdWxlVHJlZSk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35BcHAgc3RvcHBlZCcpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyU3RvcCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuUGx1Z2luTWV0aG9kcyhtZXRob2Q6IGtleW9mIE1hbmdvUGx1Z2luKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLm1hcChhc3luYyAocCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KHApO1xuICAgICAgICAgICAgICAgIGlmICghcGx1Z2luW21ldGhvZF0pIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBsdWdpblttZXRob2RdISgpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIElOVEVSTkFMX0FQUF9DT05UQUlORVIsIE1VTFRJUExBWUVSX1NFUlZJQ0UsIFBMVUdJTlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUGx1Z2luLCBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBBcHBFbnZpcm9tZW50IH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEFwcEJ1aWxkZXIgfSBmcm9tICcuL2FwcC1idWlsZGVyJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcEJ1aWxkZXI8VCBleHRlbmRzIEFwcEJ1aWxkZXI+KHtcbiAgICBlbnZpcm9tZW50LFxuICAgIHBsdWdpbnMsXG4gICAgYXBwQnVpbGRlckluaGVyaXQsXG4gICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLFxufToge1xuICAgIGVudmlyb21lbnQ6IEFwcEVudmlyb21lbnQ7XG4gICAgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcbiAgICBhcHBCdWlsZGVySW5oZXJpdDogTmV3YWJsZTxUPjtcbiAgICBtdWx0aXBsYXllclNlcnZpY2U/OiBNdWx0aXBsYXllclNlcnZpY2U7XG59KSB7XG4gICAgY29uc3QgaW50ZXJuYWxBcHBDb250YWluZXIgPSBuZXcgQ29udGFpbmVyKCk7XG5cbiAgICBpZiAobXVsdGlwbGF5ZXJTZXJ2aWNlKSBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1VTFRJUExBWUVSX1NFUlZJQ0UpLnRvQ29uc3RhbnRWYWx1ZShtdWx0aXBsYXllclNlcnZpY2UpO1xuICAgIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikudG9Db25zdGFudFZhbHVlKGludGVybmFsQXBwQ29udGFpbmVyKTtcbiAgICBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFQUF9FTlZJUk9NRU5UKS50b0NvbnN0YW50VmFsdWUoZW52aXJvbWVudCk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChQTFVHSU5TKS50b0NvbnN0YW50VmFsdWUocGx1Z2lucyk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChhcHBCdWlsZGVySW5oZXJpdCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgcmV0dXJuIGludGVybmFsQXBwQ29udGFpbmVyLmdldChhcHBCdWlsZGVySW5oZXJpdCk7XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEJhc2VSUENTZXJ2aWNlLCBFdmVudERlc3RpbmF0aW9uLCB0eXBlIFJQQ1BheWxvYWQsIFJQQ19SRVNVTFRfVElNRU9VVCB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHtcbiAgICBFcnJvck1lc3NhZ2UsXG4gICAgRVZFTlRfU0VSVklDRSxcbiAgICBnZW5lcmF0ZVJhbmRvbUlkLFxuICAgIHR5cGUgUlBDQ2FsbE9wdGlvbnMsXG4gICAgdHlwZSBSUENSZXN1bHQsXG4gICAgdHlwZSBTY3JpcHRSUENIYW5kbGVyLFxufSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBSUENTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsaWVudEV2ZW50U2VydmljZSB9IGZyb20gJy4vY2xpZW50LWV2ZW50LnNlcnZpY2UnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2xpZW50UlBDU2VydmljZSBleHRlbmRzIEJhc2VSUENTZXJ2aWNlPE1hbmdvUlBDLkN1c3RvbUNsaWVudFJQQz4gaW1wbGVtZW50cyBSUENTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KEVWRU5UX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJGV2ZW50U2VydmljZTogQ2xpZW50RXZlbnRTZXJ2aWNlO1xuICAgIHB1YmxpYyByZWFkb25seSAkc2VydmVySGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0UlBDSGFuZGxlcj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgJHdlYlZpZXdIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRSUENIYW5kbGVyPigpO1xuXG4gICAgcHVibGljIGFzeW5jIGNhbGxTZXJ2ZXI8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tQ2xpZW50VG9TZXJ2ZXJSUEM+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICAgICAgb3B0aW9uczogUlBDQ2FsbE9wdGlvbnMgPSB7IHRpbWVvdXQ6IHRoaXMuJFRJTUVPVVQgfSxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGhhbmRsZUNhbGwocnBjTmFtZSwgRXZlbnREZXN0aW5hdGlvbi5TZXJ2ZXIsIG9wdGlvbnMsIGJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlcnZlclJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyVG9DbGllbnRSUEM+LFxuICAgICAgICBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4sXG4gICAgKSB7XG4gICAgICAgIGlmICh0aGlzLiRzZXJ2ZXJIYW5kbGVycy5oYXMocnBjTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBSUEMuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kc2VydmVySGFuZGxlcnMuZGVsZXRlKHJwY05hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuJHNlcnZlckhhbmRsZXJzLnNldChycGNOYW1lLCBycGNIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIHJwY0hhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNhbGxXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBycGNOYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbUNsaWVudFRvV2Vidmlld1JQQz4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICAgICBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9LFxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlQ2FsbChycGNOYW1lLCBFdmVudERlc3RpbmF0aW9uLldlYlZpZXcsIG9wdGlvbnMsIGJvZHksIGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25XZWJWaWV3UmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgcnBjTmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9DbGllbnRSUEM+LFxuICAgICAgICBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGAke2lkfTo6JHtycGNOYW1lfWA7XG4gICAgICAgIGlmICh0aGlzLiR3ZWJWaWV3SGFuZGxlcnMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBSUEMuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJwY0hhbmRsZXIgPSB7XG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcnBjSGFuZGxlci52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuJHdlYlZpZXdIYW5kbGVycy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBycGNOYW1lLFxuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuJHdlYlZpZXdIYW5kbGVycy5zZXQoa2V5LCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jICRoYW5kbGVDYWxsPFRSZXN1bHQ+KFxuICAgICAgICBycGNOYW1lOiBzdHJpbmcsXG4gICAgICAgIGRlc3RpbmF0aW9uOiBFdmVudERlc3RpbmF0aW9uLCAvLyAnc2VydmVyJyB8ICd3ZWJ2aWV3JyxcbiAgICAgICAgb3B0aW9ucz86IFBhcnRpYWw8UlBDQ2FsbE9wdGlvbnM+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICAgICAgd2ViVmlld0lkPzogc3RyaW5nIHwgbnVtYmVyLFxuICAgICkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8UlBDUmVzdWx0PFRSZXN1bHQ+PigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FsbElkID0gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgICAgICAgICAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgICAgICAgICAgIGNvbnN0IG9uY2VIYW5kbGUgPSAocmVzdWx0RGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5yZXN1bHREYXRhKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBFeGFtcGxlOiBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8yMWV3ckVxLCBSUEM6OlJFVFVSTl9GUk9NX1dFQlZJRVdfdGVFcWQyXG4gICAgICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPVxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXdcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiRldmVudFNlcnZpY2Uub25jZVdlYlZpZXcod2ViVmlld0lkISwgYFJQQzo6UkVUVVJOX0ZST01fV0VCVklFV18ke2NhbGxJZH1gLCBvbmNlSGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJGV2ZW50U2VydmljZS5vbmNlU2VydmVyKGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2NhbGxJZH1gLCBvbmNlSGFuZGxlKTtcblxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZDogUlBDUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IEV2ZW50RGVzdGluYXRpb24uQ2xpZW50LFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICAgIGlkOiBjYWxsSWQsXG4gICAgICAgICAgICAgICAgcnBjTmFtZSxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIEV4YW1wbGU6IFJQQzo6Q0FMTF9TRVJWRVIsIFJQQzo6Q0FMTF9XRUJWSUVXXG4gICAgICAgICAgICBkZXN0aW5hdGlvbiA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3XG4gICAgICAgICAgICAgICAgPyB0aGlzLiRldmVudFNlcnZpY2UuZW1pdFdlYlZpZXcod2ViVmlld0lkISwgPHN0cmluZz4nUlBDOjpDQUxMX1dFQlZJRVcnLCBwYXlsb2FkKVxuICAgICAgICAgICAgICAgIDogdGhpcy4kZXZlbnRTZXJ2aWNlLmVtaXRTZXJ2ZXIoPHN0cmluZz4nUlBDOjpDQUxMX1NFUlZFUicsIHBheWxvYWQpO1xuXG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5SUENfUkVTVUxUX1RJTUVPVVQpO1xuICAgICAgICAgICAgfSwgb3B0aW9ucz8udGltZW91dCA/PyB0aGlzLiRUSU1FT1VUKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgIlxuaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgTE9HR0VSX1NFUlZJQ0UsIGlzTmlsLCB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBNdWx0aXBsYXllcldlYlZpZXcgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdlYlZpZXdMaXN0U2VydmljZSB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSAkbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgJHdlYlZpZXdzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBNdWx0aXBsYXllcldlYlZpZXc+ID0gbmV3IE1hcCgpO1xuXG4gICAgcHVibGljIHNldChpZDogc3RyaW5nIHwgbnVtYmVyLCB3ZWJWaWV3OiBNdWx0aXBsYXllcldlYlZpZXcpIHtcbiAgICAgICAgdGhpcy4kd2ViVmlld3Muc2V0KGlkLCB3ZWJWaWV3KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHdlYlZpZXdzLmdldChpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyeUdldChpZDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHdlYlZpZXcgPSB0aGlzLiR3ZWJWaWV3cy5nZXQoaWQpO1xuICAgICAgICBpZiAoaXNOaWwod2ViVmlldykgfHwgIXdlYlZpZXcudmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnZXQgYSBXZWJWaWV3LicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5XZWJWaWV3Tm90Rm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3ZWJWaWV3O1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICBjb25zdCB3ZWJWaWV3ID0gdGhpcy4kd2ViVmlld3MuZ2V0KGlkKTtcbiAgICAgICAgaWYgKHdlYlZpZXcpIHtcbiAgICAgICAgICAgIHdlYlZpZXcuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy4kd2ViVmlld3MuZGVsZXRlKGlkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgV0VCVklFV19MSVNUX1NFUlZJQ0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBXZWJWaWV3TGlzdFNlcnZpY2UgfSBmcm9tICcuL3dlYnZpZXctbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgaXNOdW1iZXIsIGlzU3RyaW5nLCBMT0dHRVJfU0VSVklDRSwgdHlwZSBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgV2ViVmlld1NlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHtcbiAgICBDbGllbnRNdWx0aXBsYXllclNlcnZpY2UsXG4gICAgTXVsdGlwbGF5ZXJXZWJWaWV3LFxuICAgIE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNEcmF3YWJsZSxcbiAgICBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zT3ZlcmxheSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9tdWx0aXBsYXllcic7XG5pbXBvcnQgeyBNVUxUSVBMQVlFUl9TRVJWSUNFIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDbGllbnRXZWJWaWV3U2VydmljZSBpbXBsZW1lbnRzIFdlYlZpZXdTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5ICRsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoV0VCVklFV19MSVNUX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJHdlYlZpZXdMaXN0U2VydmljZTogV2ViVmlld0xpc3RTZXJ2aWNlO1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsYXllcjogQ2xpZW50TXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgJGNyZWF0ZUxpc3RlbmVyczogKChpZDogc3RyaW5nIHwgbnVtYmVyLCB3ZWJWaWV3OiBNdWx0aXBsYXllcldlYlZpZXcpID0+IHZvaWQpW10gPSBbXTtcblxuICAgIHB1YmxpYyBjcmVhdGUoaWQ6IHN0cmluZyB8IG51bWJlciwgb3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXkpOiBNdWx0aXBsYXllcldlYlZpZXc7XG4gICAgcHVibGljIGNyZWF0ZShpZDogc3RyaW5nIHwgbnVtYmVyLCBvcHRpb25zOiBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zRHJhd2FibGUpOiBNdWx0aXBsYXllcldlYlZpZXc7XG4gICAgcHVibGljIGNyZWF0ZShcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgb3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXkgfCBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zRHJhd2FibGUsXG4gICAgKTogTXVsdGlwbGF5ZXJXZWJWaWV3IHtcbiAgICAgICAgaWYgKCFpc1N0cmluZyhpZCkgJiYgIWlzTnVtYmVyKGlkKSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGNyZWF0ZSBhIFdlYlZpZXcuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLldlYlZpZXdJZE11c3RCZVN0cmluZ09yTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdlYlZpZXcgPSB0aGlzLm11bHRpcGxheWVyLldlYlZpZXcuY3JlYXRlKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLiR3ZWJWaWV3TGlzdFNlcnZpY2Uuc2V0KGlkLCB3ZWJWaWV3KTtcbiAgICAgICAgdGhpcy4kY3JlYXRlTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihpZCwgd2ViVmlldykpO1xuICAgICAgICByZXR1cm4gd2ViVmlldztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KGlkOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHdlYlZpZXdMaXN0U2VydmljZS5nZXQoaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cnlHZXQoaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy4kd2ViVmlld0xpc3RTZXJ2aWNlLnRyeUdldChpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc3Ryb3koaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgICAgICBjb25zdCB3ZWJWaWV3ID0gdGhpcy4kd2ViVmlld0xpc3RTZXJ2aWNlLmdldChpZCk7XG4gICAgICAgIGlmICh3ZWJWaWV3KSB7XG4gICAgICAgICAgICB3ZWJWaWV3LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuJHdlYlZpZXdMaXN0U2VydmljZS5kZWxldGUoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljICRvbkNyZWF0ZShsaXN0ZW5lcjogKGlkOiBzdHJpbmcgfCBudW1iZXIsIHdlYlZpZXc6IE11bHRpcGxheWVyV2ViVmlldykgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLiRjcmVhdGVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IElOVEVSTkFMX0FQUF9DT05UQUlORVIsIHR5cGUgTWFuZ29QbHVnaW4gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IEFERF9XRUJWSUVXLCBXRUJWSUVXX1NFUlZJQ0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBDbGllbnRMb2dnZXJTZXJ2aWNlLCBDbGllbnRXZWJWaWV3U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc0RyYXdhYmxlLCBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zT3ZlcmxheSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV2ViVmlld1BsdWdpbiBpbXBsZW1lbnRzIE1hbmdvUGx1Z2luIHtcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxBcHBDb250YWluZXI6IENvbnRhaW5lcjtcbiAgICBAaW5qZWN0KFdFQlZJRVdfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSB3ZWJWaWV3U2VydmljZTogQ2xpZW50V2ViVmlld1NlcnZpY2U7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBDbGllbnRMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGFzeW5jIGJlZm9yZUxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIGNvbnN0IGFkZFdlYlZpZXdzID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEFERF9XRUJWSUVXKVxuICAgICAgICAgICAgPyB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmdldDxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNEcmF3YWJsZSB8IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNPdmVybGF5O1xuICAgICAgICAgICAgICAgICAgfVtdXG4gICAgICAgICAgICAgID4oQUREX1dFQlZJRVcpXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAoYWRkV2ViVmlld3MubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgYWRkV2ViVmlld3MuZm9yRWFjaCgod2ViVmlldykgPT4ge1xuICAgICAgICAgICAgdGhpcy53ZWJWaWV3U2VydmljZS5jcmVhdGUod2ViVmlldy5pZCwgd2ViVmlldy5vcHRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fldlYlZpZXdzIGNyZWF0ZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QQ2xpZW50U2NyaXB0RXZlbnQgaW1wbGVtZW50cyBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQsXG4gICAgKSB7fVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSh0aGlzLmV2ZW50TmFtZSwgdGhpcy5saXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgdHlwZSB7IENsaWVudEV2ZW50RW1taXRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZXZlbnQnO1xuaW1wb3J0IHsgUmFnZU1QQ2xpZW50U2NyaXB0RXZlbnQgfSBmcm9tICcuL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlcic7XG5cbmV4cG9ydCBjbGFzcyBDbGllbnRSYWdlTVBFdmVudEVtbWl0ZXIgaW1wbGVtZW50cyBDbGllbnRFdmVudEVtbWl0ZXIge1xuICAgIHByaXZhdGUgbWFwRXZlbnRzU2hhcmVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAvLyBNYXAgYWx0OlYgZXZlbnQgbmFtZXMgdG8gUmFnZU1QIGVxdWl2YWxlbnRzXG4gICAgICAgICdlbnRpdHlDb2xTaGFwZUVudGVyJzogJ3BsYXllckVudGVyQ29sc2hhcGUnLFxuICAgICAgICAnZW50aXR5Q29sU2hhcGVMZWF2ZSc6ICdwbGF5ZXJFeGl0Q29sc2hhcGUnLFxuICAgICAgICAna2V5VXAnOiAna2V5dXAnLFxuICAgICAgICAna2V5RG93bic6ICdrZXlkb3duJyxcbiAgICAgICAgJ3BsYXllclZlaGljbGVFbnRlcmVkJzogJ3BsYXllckVudGVyVmVoaWNsZScsXG4gICAgICAgICdwbGF5ZXJWZWhpY2xlTGVmdCc6ICdwbGF5ZXJMZWF2ZVZlaGljbGUnLFxuICAgICAgICAncGxheWVyU3RhcnRWZWhpY2xlRW50ZXInOiAncGxheWVyU3RhcnRFbnRlclZlaGljbGUnLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1hcEV2ZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9KSB7fVxuXG4gICAgcHJpdmF0ZSBnZXRFdmVudE5hbWUoZXZlbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBFdmVudHNTaGFyZWRbZXZlbnROYW1lXSB8fCB0aGlzLm1hcEV2ZW50c1tldmVudE5hbWVdIHx8IGV2ZW50TmFtZTtcbiAgICB9XG5cbiAgICBlbWl0KGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBtcC5ldmVudHMuY2FsbChldmVudE5hbWUsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBDbGllbnRTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBvbmNlKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgY29uc3Qgb25jZVdyYXBwZXIgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgICAgICBsaXN0ZW5lciguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBDbGllbnRTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBvZmYoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBlbWl0U2VydmVyKGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBJbiBSYWdlTVAsIHVzZSBtcC5ldmVudHMuY2FsbFJlbW90ZSB0byBzZW5kIGV2ZW50cyB0byBzZXJ2ZXJcbiAgICAgICAgLy8gRGF0YSBtdXN0IGJlIEpTT04gc3RyaW5naWZpZWQgYmVjYXVzZSBSQUdFOk1QIGRvZXNuJ3QgcHJvcGVybHkgc2VyaWFsaXplIGNvbXBsZXggb2JqZWN0c1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkQXJncyA9IGFyZ3MubWFwKGFyZyA9PiBKU09OLnN0cmluZ2lmeShhcmcpKTtcbiAgICAgICAgbXAuZXZlbnRzLmNhbGxSZW1vdGUoZXZlbnROYW1lLCAuLi5zZXJpYWxpemVkQXJncyk7XG4gICAgfVxuXG4gICAgb25TZXJ2ZXIoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICAvLyBJbiBSYWdlTVAsIHNlcnZlciBldmVudHMgY29tZSB0aHJvdWdoIG1wLmV2ZW50cy5hZGRcbiAgICAgICAgLy8gRXZlbnRzIGZyb20gc2VydmVyIGFyZSByZWNlaXZlZCB0aGUgc2FtZSB3YXkgYXMgbG9jYWwgZXZlbnRzXG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QQ2xpZW50U2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgb25jZVNlcnZlcihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIGNvbnN0IG9uY2VXcmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKG1hcHBlZEV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICAgICAgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QQ2xpZW50U2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgfVxuXG4gICAgb2ZmU2VydmVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJXZWJWaWV3IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tdWx0aXBsYXllcic7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBXZWJWaWV3IGltcGxlbWVudHMgTXVsdGlwbGF5ZXJXZWJWaWV3IHtcbiAgICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBNYXA8c3RyaW5nLCBTZXQ8KC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZD4+ID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkcmF3OiBCcm93c2VyTXApIHt9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBSYWdlTVAgYnJvd3NlcnMgZG9uJ3QgaGF2ZSBhICd2YWxpZCcgcHJvcGVydHksIGNoZWNrIGlmIGl0IGV4aXN0c1xuICAgICAgICByZXR1cm4gdGhpcy4kcmF3ICE9PSBudWxsICYmIHRoaXMuJHJhdyAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLiRyYXcuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYXcudXJsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdXJsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy4kcmF3LnVybCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhdy5hY3RpdmU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuJHJhdy5hY3RpdmUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBlbWl0KGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgICAgLy8gSW4gUmFnZU1QLCB1c2UgYnJvd3Nlci5jYWxsKCkgdG8gc2VuZCBldmVudHMgdG8gQ0VGXG4gICAgICAgIHRoaXMuJHJhdy5jYWxsKGV2ZW50TmFtZSwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgZW1pdFJhdyhldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuJHJhdy5jYWxsKGV2ZW50TmFtZSwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcmVsb2FkKGlnbm9yZUNhY2hlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuJHJhdy5yZWxvYWQoaWdub3JlQ2FjaGUpO1xuICAgIH1cblxuICAgIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICAvLyBJbiBSYWdlTVAsIHdlIG5lZWQgdG8gbGlzdGVuIHRocm91Z2ggbXAuZXZlbnRzIGZvciBicm93c2VyIGV2ZW50c1xuICAgICAgICAvLyBXZSdsbCBjcmVhdGUgYSB3cmFwcGVyIHRoYXQgZmlsdGVycyBieSBicm93c2VyIGluc3RhbmNlXG4gICAgICAgIGlmICghdGhpcy5ldmVudExpc3RlbmVycy5oYXMoZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5zZXQoZXZlbnROYW1lLCBuZXcgU2V0KCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSkhLmFkZChsaXN0ZW5lcik7XG5cbiAgICAgICAgLy8gQWRkIGEgZ2xvYmFsIGV2ZW50IGxpc3RlbmVyIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGZvciB0aGlzIGV2ZW50XG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSkhO1xuICAgICAgICBpZiAobGlzdGVuZXJzLnNpemUgPT09IDEpIHtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5hZGQoZXZlbnROYW1lLCAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsIG9mIGxpc3RlbmVycykge1xuICAgICAgICAgICAgICAgICAgICBsKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25jZShldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb25jZVdyYXBwZXIgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9mZihldmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgICAgIGxpc3RlbmVyKC4uLmFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uKGV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgIH1cblxuICAgIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5ldmVudExpc3RlbmVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKGxpc3RlbmVycykge1xuICAgICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleGVjdXRlKGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLiRyYXcuZXhlY3V0ZShjb2RlKTtcbiAgICB9XG5cbiAgICBtYXJrQXNDaGF0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLiRyYXcubWFya0FzQ2hhdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmF3KCk6IEJyb3dzZXJNcCB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYXc7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBNdWx0aXBsYXllcldlYlZpZXcsXG4gICAgTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc0RyYXdhYmxlLFxuICAgIE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNPdmVybGF5LFxuICAgIE11bHRpcGxheWVyV2ViVmlld01hbmFnZXIsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbXVsdGlwbGF5ZXInO1xuaW1wb3J0IHsgUmFnZU1QV2ViVmlldyB9IGZyb20gJy4vcmFnZW1wLXdlYnZpZXcnO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QV2ViVmlld01hbmFnZXIgaW1wbGVtZW50cyBNdWx0aXBsYXllcldlYlZpZXdNYW5hZ2VyIHtcbiAgICBwcml2YXRlIHdlYlZpZXdzOiBNYXA8bnVtYmVyLCBSYWdlTVBXZWJWaWV3PiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGlkQ291bnRlcjogbnVtYmVyID0gMDtcblxuICAgIHB1YmxpYyBjcmVhdGUob3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc0RyYXdhYmxlKTogTXVsdGlwbGF5ZXJXZWJWaWV3O1xuICAgIHB1YmxpYyBjcmVhdGUob3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXkpOiBNdWx0aXBsYXllcldlYlZpZXc7XG4gICAgcHVibGljIGNyZWF0ZShvcHRpb25zOiBNdWx0aXBsYXllcldlYlZpZXdDcmVhdGVPcHRpb25zT3ZlcmxheSB8IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNEcmF3YWJsZSk6IE11bHRpcGxheWVyV2ViVmlldyB7XG4gICAgICAgIGxldCByYXc6IEJyb3dzZXJNcDtcblxuICAgICAgICBpZiAoJ2RyYXdhYmxlJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBzdXBwb3J0IGRyYXdhYmxlL3RleHR1cmUgdGFyZ2V0cyBkaXJlY3RseSBsaWtlIGFsdDpWXG4gICAgICAgICAgICAvLyBXZSdsbCBjcmVhdGUgYSByZWd1bGFyIGJyb3dzZXIgYW5kIGxvZyBhIHdhcm5pbmdcbiAgICAgICAgICAgIG1wLmNvbnNvbGUubG9nV2FybmluZygnUmFnZU1QIGRvZXMgbm90IHN1cHBvcnQgZHJhd2FibGUgV2ViVmlld3MuIENyZWF0aW5nIG92ZXJsYXkgYnJvd3NlciBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgcmF3ID0gbXAuYnJvd3NlcnMubmV3KG9wdGlvbnMudXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJhdyA9IG1wLmJyb3dzZXJzLm5ldyhvcHRpb25zLnVybCk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByYXcuYWN0aXZlID0gb3B0aW9ucy52aXNpYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2ViVmlldyA9IG5ldyBSYWdlTVBXZWJWaWV3KHJhdyk7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5pZENvdW50ZXIrKztcbiAgICAgICAgdGhpcy53ZWJWaWV3cy5zZXQoaWQsIHdlYlZpZXcpO1xuXG4gICAgICAgIHJldHVybiB3ZWJWaWV3O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeUlEKGlkOiBudW1iZXIpOiBNdWx0aXBsYXllcldlYlZpZXcgfCBudWxsIHtcbiAgICAgICAgLy8gUmFnZU1QIGJyb3dzZXJzIGFyZSBzdG9yZWQgaW4gbXAuYnJvd3NlcnMgcG9vbFxuICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmQgYnkgSUQgb3IgcmV0dXJuIGZyb20gb3VyIGNhY2hlXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMud2ViVmlld3MuZ2V0KGlkKTtcbiAgICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyeSB0byBnZXQgZnJvbSBSYWdlTVAncyBicm93c2VyIHBvb2xcbiAgICAgICAgY29uc3QgYnJvd3NlciA9IG1wLmJyb3dzZXJzLmF0KGlkKTtcbiAgICAgICAgaWYgKGJyb3dzZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHdlYlZpZXcgPSBuZXcgUmFnZU1QV2ViVmlldyhicm93c2VyKTtcbiAgICAgICAgICAgIHRoaXMud2ViVmlld3Muc2V0KGlkLCB3ZWJWaWV3KTtcbiAgICAgICAgICAgIHJldHVybiB3ZWJWaWV3O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQ2xpZW50RXZlbnRFbW1pdGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsaWVudE11bHRpcGxheWVyU2VydmljZSwgTXVsdGlwbGF5ZXJXZWJWaWV3TWFuYWdlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbXVsdGlwbGF5ZXInO1xuaW1wb3J0IHsgUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBDbGllbnRSYWdlTVBFdmVudEVtbWl0ZXIgfSBmcm9tICcuL3JhZ2VtcC1ldmVudC1lbW1pdGVyJztcbmltcG9ydCB7IFJhZ2VNUFdlYlZpZXdNYW5hZ2VyIH0gZnJvbSAnLi9yYWdlbXAtd2Vidmlldy1tYW5hZ2VyJztcblxuZXhwb3J0IGNsYXNzIENsaWVudFJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBleHRlbmRzIFJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBpbXBsZW1lbnRzIENsaWVudE11bHRpcGxheWVyU2VydmljZSB7XG4gICAgcHVibGljIG92ZXJyaWRlIEV2ZW50czogQ2xpZW50RXZlbnRFbW1pdGVyO1xuICAgIHB1YmxpYyBXZWJWaWV3OiBNdWx0aXBsYXllcldlYlZpZXdNYW5hZ2VyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuRXZlbnRzID0gbmV3IENsaWVudFJhZ2VNUEV2ZW50RW1taXRlcigpO1xuICAgICAgICB0aGlzLldlYlZpZXcgPSBuZXcgUmFnZU1QV2ViVmlld01hbmFnZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXVkaW9GYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBhdWRpbyBmYWN0b3J5IGxpa2UgYWx0OlZcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXVkaW9GaWx0ZXJGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBhdWRpbyBmaWx0ZXIgZmFjdG9yeVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdWRpb091dHB1dEF0dGFjaGVkRmFjdG9yeShfZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgYXVkaW8gb3V0cHV0IGF0dGFjaGVkIGZhY3RvcnlcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXVkaW9PdXRwdXRGcm9udGVuZEZhY3RvcnkoX2ZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGF1ZGlvIG91dHB1dCBmcm9udGVuZCBmYWN0b3J5XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1ZGlvT3V0cHV0V29ybGRGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBhdWRpbyBvdXRwdXQgd29ybGQgZmFjdG9yeVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRCbGlwRmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuQmxpcCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5CbGlwLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TWFya2VyRmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuTWFya2VyKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLk1hcmtlci5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbHNoYXBlRmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuQ29sc2hhcGUpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQ29sc2hhcGUucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDaGVja3BvaW50RmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuQ2hlY2twb2ludCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5DaGVja3BvaW50LnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T2JqZWN0RmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuT2JqZWN0KSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLk9iamVjdC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldExvY2FsT2JqZWN0RmFjdG9yeShfZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgTG9jYWxPYmplY3QgbGlrZSBhbHQ6VlxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQZWRGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5QZWQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuUGVkLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9jYWxQZWRGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBMb2NhbFBlZCBsaWtlIGFsdDpWXG4gICAgfVxuXG4gICAgcHVibGljIHNldExvY2FsUGxheWVyRmFjdG9yeShfZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgTG9jYWxQbGF5ZXIgZmFjdG9yeSAtIHVzZSBtcC5wbGF5ZXJzLmxvY2FsXG4gICAgfVxuXG4gICAgcHVibGljIHNldExvY2FsVmVoaWNsZUZhY3RvcnkoX2ZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIExvY2FsVmVoaWNsZSBsaWtlIGFsdDpWXG4gICAgfVxuXG4gICAgcHVibGljIHNldFBsYXllckZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLlBsYXllcikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5QbGF5ZXIucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRSbWxEb2N1bWVudEZhY3RvcnkoX2ZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIFJtbERvY3VtZW50IGxpa2UgYWx0OlZcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VGV4dExhYmVsRmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuVGV4dExhYmVsKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlRleHRMYWJlbC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlaGljbGVGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5WZWhpY2xlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlZlaGljbGUucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsRW50aXR5R3JvdXBcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmlydHVhbEVudGl0eUZhY3RvcnkoX2ZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIFZpcnR1YWxFbnRpdHlcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0V2ViU29ja2V0Q2xpZW50RmFjdG9yeShfZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgV2ViU29ja2V0Q2xpZW50IGZhY3RvcnlcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0V2ViVmlld0ZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkJyb3dzZXIpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQnJvd3Nlci5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFVzZUZpbHRlcnMgYXMgJFVzZUZpbHRlcnMsIHR5cGUgTmV3YWJsZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VGaWx0ZXJzKC4uLmZpbHRlcnM6IChOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyKVtdKSB7XG4gICAgcmV0dXJuICRVc2VGaWx0ZXJzKC4uLmZpbHRlcnMpO1xufVxuIiwgImltcG9ydCB7IE9uSW50ZXJuYWwsIE9uY2VJbnRlcm5hbCB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgeyBJTlRFUk5BTF9FVkVOVFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25TY3JpcHRSUEMoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUEMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVNjcmlwdFJQQygpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TQ1JJUFRfUlBDKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblNjcmlwdFJQQ0Fuc3dlcigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU0NSSVBUX1JQQ19BTlNXRVIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVNjcmlwdFJQQ0Fuc3dlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TQ1JJUFRfUlBDX0FOU1dFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25LZXlCb2FyZEV2ZW50KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5LRVlCT0FSRF9FVkVOVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlS2V5Qm9hcmRFdmVudCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5LRVlCT0FSRF9FVkVOVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25LZXlVcCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuS0VZX1VQKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VLZXlVcCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5LRVlfVVApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uS2V5RG93bigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuS0VZX0RPV04pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUtleURvd24oKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuS0VZX0RPV04pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlld0V2ZW50KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XRUJfVklFV19FVkVOVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2ViVmlld0V2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldFQl9WSUVXX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlNvY2tldEV2ZW50KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XRUJfU09DS0VUX0VWRU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJTb2NrZXRFdmVudCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XRUJfU09DS0VUX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkF1ZGlvRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkFVRElPX0VWRU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VBdWRpb0V2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkFVRElPX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblJtbHVpRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJNTFVJX0VWRU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VSbWx1aUV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJNTFVJX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbldpbmRvd0ZvY3VzQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XSU5ET1dfRk9DVVNfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXaW5kb3dGb2N1c0NoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XSU5ET1dfRk9DVVNfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbldpbmRvd1Jlc29sdXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldJTkRPV19SRVNPTFVUSU9OX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2luZG93UmVzb2x1dGlvbkNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XSU5ET1dfUkVTT0xVVElPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQ29ubmVjdGlvbkNvbXBsZXRlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05ORUNUSU9OX0NPTVBMRVRFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25uZWN0aW9uQ29tcGxldGUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OTkVDVElPTl9DT01QTEVURSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25EaXNjb25uZWN0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5ESVNDT05ORUNUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VEaXNjb25uZWN0KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkRJU0NPTk5FQ1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uU3Bhd25lZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU1BBV05FRCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU3Bhd25lZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TUEFXTkVEKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkdhbWVFbnRpdHlDcmVhdGUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdBTUVfRU5USVRZX0NSRUFURSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlR2FtZUVudGl0eUNyZWF0ZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HQU1FX0VOVElUWV9DUkVBVEUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uR2FtZUVudGl0eURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdBTUVfRU5USVRZX0RFU1RST1kpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdhbWVFbnRpdHlEZXN0cm95KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdBTUVfRU5USVRZX0RFU1RST1kpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRW50aXR5SGl0RW50aXR5KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfSElUX0VOVElUWSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRW50aXR5SGl0RW50aXR5KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9ISVRfRU5USVRZKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblRhc2tDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlRBU0tfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VUYXNrQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlRBU0tfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcldlYXBvblNob290KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfV0VBUE9OX1NIT09UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJXZWFwb25TaG9vdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfV0VBUE9OX1NIT09UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllckJ1bGxldEhpdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0JVTExFVF9ISVQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckJ1bGxldEhpdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfQlVMTEVUX0hJVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJXZWFwb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9XRUFQT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJXZWFwb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1dFQVBPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTdGFydFZlaGljbGVFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTdGFydFZlaGljbGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NUQVJUX1ZFSElDTEVfTEVBVkUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN0YXJ0VmVoaWNsZUxlYXZlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0xFQVZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclZlaGljbGVFbnRlcmVkKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfVkVISUNMRV9FTlRFUkVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJWZWhpY2xlRW50ZXJlZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfVkVISUNMRV9FTlRFUkVEKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclZlaGljbGVMZWZ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfVkVISUNMRV9MRUZUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJWZWhpY2xlTGVmdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfVkVISUNMRV9MRUZUKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclZlaGljbGVTZWF0Q2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfVkVISUNMRV9TRUFUX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVm9pY2VDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WT0lDRV9DT05ORUNUSU9OKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWb2ljZUNvbm5lY3Rpb24oKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVk9JQ0VfQ09OTkVDVElPTik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTdGFydFRhbGtpbmcoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVEFSVF9UQUxLSU5HKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTdGFydFRhbGtpbmcoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NUQVJUX1RBTEtJTkcpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyU3RvcFRhbGtpbmcoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVE9QX1RBTEtJTkcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN0b3BUYWxraW5nKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVE9QX1RBTEtJTkcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25Xb3JsZE9iamVjdFBvc2l0aW9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XT1JMRF9PQkpFQ1RfUE9TSVRJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXb3JsZE9iamVjdFBvc2l0aW9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldPUkxEX09CSkVDVF9QT1NJVElPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uV29ybGRPYmplY3RTdHJlYW1JbigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV09STERfT0JKRUNUX1NUUkVBTV9JTik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV29ybGRPYmplY3RTdHJlYW1JbigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XT1JMRF9PQkpFQ1RfU1RSRUFNX0lOKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbldvcmxkT2JqZWN0U3RyZWFtT3V0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XT1JMRF9PQkpFQ1RfU1RSRUFNX09VVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV29ybGRPYmplY3RTdHJlYW1PdXQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV09STERfT0JKRUNUX1NUUkVBTV9PVVQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVWRU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFdmVudCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FVkVOVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25CYXNlT2JqZWN0Q3JlYXRlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5CQVNFX09CSkVDVF9DUkVBVEUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUJhc2VPYmplY3RDcmVhdGUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfQ1JFQVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkJhc2VPYmplY3RSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkJBU0VfT0JKRUNUX1JFTU9WRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQmFzZU9iamVjdFJlbW92ZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5CQVNFX09CSkVDVF9SRU1PVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTmV0T3duZXJDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLk5FVF9PV05FUl9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZU5ldE93bmVyQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLk5FVF9PV05FUl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uV2VhcG9uRGFtYWdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5XRUFQT05fREFNQUdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWFwb25EYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV0VBUE9OX0RBTUFHRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25NZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5NRVRBX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTWV0YUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Mb2NhbE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX01FVEFfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VMb2NhbE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTE9DQUxfTUVUQV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uU3luY2VkTWV0YUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU1lOQ0VEX01FVEFfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VTeW5jZWRNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25TdHJlYW1TeW5jZWRNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TVFJFQU1fU1lOQ0VEX01FVEFfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VTdHJlYW1TeW5jZWRNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uR2xvYmFsTWV0YUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX01FVEFfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VHbG9iYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdMT0JBTF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25HbG9iYWxTeW5jZWRNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HTE9CQUxfU1lOQ0VEX01FVEFfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VHbG9iYWxTeW5jZWRNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRW50aXR5Q29sU2hhcGVFbnRlcigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NPTF9TSEFQRV9FTlRFUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRW50aXR5Q29sU2hhcGVFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0VOVEVSKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkVudGl0eUNvbFNoYXBlTGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DT0xfU0hBUEVfTEVBVkUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUVudGl0eUNvbFNoYXBlTGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NPTF9TSEFQRV9MRUFWRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDaGVja3BvaW50RW50ZXIoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DSEVDS1BPSU5UX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDaGVja3BvaW50RW50ZXIoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfRU5URVIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRW50aXR5Q2hlY2twb2ludExlYXZlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ0hFQ0tQT0lOVF9MRUFWRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRW50aXR5Q2hlY2twb2ludExlYXZlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkNvbFNoYXBlRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNPTF9TSEFQRV9FVkVOVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ29sU2hhcGVFdmVudCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT0xfU0hBUEVfRVZFTlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQ29uc29sZUNvbW1hbmQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNPTlNPTEVfQ09NTUFORCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ29uc29sZUNvbW1hbmQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OU09MRV9DT01NQU5EKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkVycm9yKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FUlJPUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRXJyb3IoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVJST1IpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTG9jYWxTY3JpcHRFdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTE9DQUxfU0NSSVBUX0VWRU5UKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VMb2NhbFNjcmlwdEV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX1NDUklQVF9FVkVOVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25SZW1vdGVTY3JpcHRFdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVNT1RFX1NDUklQVF9FVkVOVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUmVtb3RlU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVNT1RFX1NDUklQVF9FVkVOVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25SZXNvdXJjZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9TVEFSVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUmVzb3VyY2VTdGFydCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9TVEFSVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25SZXNvdXJjZVN0b3AoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFU09VUkNFX1NUT1ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlc291cmNlU3RvcCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9TVE9QKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblJlc291cmNlRXJyb3IoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFU09VUkNFX0VSUk9SKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VSZXNvdXJjZUVycm9yKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFU09VUkNFX0VSUk9SKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblNlcnZlcjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9QbGF5ZXJFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblNlcnZlcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uU2VydmVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9QbGF5ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uU2VydmVyJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbldlYlZpZXcgYXMgJE9uV2ViVmlldyB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXc8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb0NsaWVudEV2ZW50PihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvQ2xpZW50RXZlbnQ+LFxuKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb0NsaWVudEV2ZW50Pikge1xuICAgIHJldHVybiAkT25XZWJWaWV3KGlkLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uIGFzICRPbiB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tQ2xpZW50RXZlbnQ+KGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT248RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21DbGllbnRFdmVudD4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT248RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21DbGllbnRFdmVudD4pIHtcbiAgICByZXR1cm4gJE9uKGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZVNlcnZlcjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9QbGF5ZXJFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2VydmVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyVG9QbGF5ZXJFdmVudD4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZVNlcnZlcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbmNlU2VydmVyJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbmNlV2ViVmlldyBhcyAkT25jZVdlYlZpZXcgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlZpZXc8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb0NsaWVudEV2ZW50PihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9DbGllbnRFdmVudD4sXG4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlZpZXc8RSBleHRlbmRzIHN0cmluZz4oaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9DbGllbnRFdmVudD4pIHtcbiAgICByZXR1cm4gJE9uY2VXZWJWaWV3KGlkLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uY2UgYXMgJE9uY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZTxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tQ2xpZW50RXZlbnQ+KGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbUNsaWVudEV2ZW50Pik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tQ2xpZW50RXZlbnQ+KSB7XG4gICAgcmV0dXJuICRPbmNlKGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBHdWFyZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlR3VhcmRzIGFzICRVc2VHdWFyZHMsIHR5cGUgTmV3YWJsZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VHdWFyZHMoLi4uZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSkge1xuICAgIHJldHVybiAkVXNlR3VhcmRzKC4uLmd1YXJkcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBJbnRlcmNlcHRvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlSW50ZXJjZXB0b3JzIGFzICRVc2VJbnRlcmNlcHRvcnMsIHR5cGUgTmV3YWJsZSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSkge1xuICAgIHJldHVybiAkVXNlSW50ZXJjZXB0b3JzKC4uLmludGVyY2VwdG9ycyk7XG59XG4iLCAiaW1wb3J0IHsgT25SZXF1ZXN0IGFzICRPblJlcXVlc3QgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25SZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21DbGllbnRSUEM+KHJwY05hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21DbGllbnRSUEM+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21DbGllbnRSUEM+KSB7XG4gICAgcmV0dXJuICRPblJlcXVlc3QocnBjTmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlUlBDRGVjb3JhdG9yIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uU2VydmVyUmVxdWVzdDxFIGV4dGVuZHMga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyVG9DbGllbnRSUEM+KHJwY05hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uU2VydmVyUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJUb0NsaWVudFJQQz4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25TZXJ2ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbVNlcnZlclRvQ2xpZW50UlBDPikge1xuICAgIHJldHVybiBjcmVhdGVSUENEZWNvcmF0b3IoJ29uU2VydmVyUmVxdWVzdCcsIHJwY05hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uV2ViVmlld1JlcXVlc3QgYXMgJE9uV2ViVmlld1JlcXVlc3QgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25XZWJWaWV3UmVxdWVzdDxFIGV4dGVuZHMga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvQ2xpZW50UlBDPihpZDogc3RyaW5nIHwgbnVtYmVyLCBycGNOYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgcnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvQ2xpZW50UlBDPixcbik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KGlkOiBzdHJpbmcgfCBudW1iZXIsIHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbVdlYlZpZXdUb0NsaWVudFJQQz4pIHtcbiAgICByZXR1cm4gJE9uV2ViVmlld1JlcXVlc3QoaWQsIHJwY05hbWUpO1xufVxuIiwgImltcG9ydCB7IEFwcEJ1aWxkZXIsIEFwcEVudmlyb21lbnQsIGNyZWF0ZUFwcEJ1aWxkZXIgYXMgJGNyZWF0ZUFwcEJ1aWxkZXIgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IEFERF9XRUJWSUVXIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXZlbnRNZWRpYXRvclBsdWdpbiwgUlBDUGx1Z2luLCBTZXJ2aWNlQmluZGVyUGx1Z2luLCBXZWJWaWV3UGx1Z2luIH0gZnJvbSAnLi9wbHVnaW5zJztcbmltcG9ydCB0eXBlIHtcbiAgICBDbGllbnRNdWx0aXBsYXllclNlcnZpY2UsXG4gICAgRXJyb3JGaWx0ZXIsXG4gICAgR3VhcmQsXG4gICAgSW50ZXJjZXB0b3IsXG4gICAgTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc0RyYXdhYmxlLFxuICAgIE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNPdmVybGF5LFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ2xpZW50UmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9tdWx0aXBsYXllci9yYWdlbXAnO1xuXG5jb25zdCBtdWx0aXBsYXllclNlcnZpY2U6IENsaWVudE11bHRpcGxheWVyU2VydmljZSA9IG5ldyBDbGllbnRSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UoKTtcblxuY2xhc3MgQ2xpZW50QXBwQnVpbGRlciBleHRlbmRzIEFwcEJ1aWxkZXI8R3VhcmQsIEludGVyY2VwdG9yLCBFcnJvckZpbHRlcj4ge1xuICAgIHB1YmxpYyBhZGRXZWJWaWV3KGlkOiBzdHJpbmcgfCBudW1iZXIsIG9wdGlvbnM6IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNEcmF3YWJsZSk6IENsaWVudEFwcEJ1aWxkZXI7XG4gICAgcHVibGljIGFkZFdlYlZpZXcoaWQ6IHN0cmluZyB8IG51bWJlciwgb3B0aW9uczogTXVsdGlwbGF5ZXJXZWJWaWV3Q3JlYXRlT3B0aW9uc092ZXJsYXkpOiBDbGllbnRBcHBCdWlsZGVyO1xuICAgIHB1YmxpYyBhZGRXZWJWaWV3KGlkOiBzdHJpbmcgfCBudW1iZXIsIG9wdGlvbnM6IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNPdmVybGF5KSB7XG4gICAgICAgIGNvbnN0IGFkZFdlYlZpZXdzID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEFERF9XRUJWSUVXKVxuICAgICAgICAgICAgPyB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmdldDxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNEcmF3YWJsZSB8IE11bHRpcGxheWVyV2ViVmlld0NyZWF0ZU9wdGlvbnNPdmVybGF5O1xuICAgICAgICAgICAgICAgICAgfVtdXG4gICAgICAgICAgICAgID4oQUREX1dFQlZJRVcpXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEFERF9XRUJWSUVXKSkge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5yZWJpbmQoQUREX1dFQlZJRVcpLnRvQ29uc3RhbnRWYWx1ZShbLi4uYWRkV2ViVmlld3MsIHsgaWQsIG9wdGlvbnMgfV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFERF9XRUJWSUVXKS50b0NvbnN0YW50VmFsdWUoW3sgaWQsIG9wdGlvbnMgfV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdWRpb0ZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0QXVkaW9GYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdWRpb0ZpbHRlckZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0QXVkaW9GaWx0ZXJGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdWRpb091dHB1dEF0dGFjaGVkRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRBdWRpb091dHB1dEF0dGFjaGVkRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXVkaW9PdXRwdXRGcm9udGVuZEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0QXVkaW9PdXRwdXRGcm9udGVuZEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1ZGlvT3V0cHV0V29ybGRGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldEF1ZGlvT3V0cHV0V29ybGRGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRCbGlwRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRCbGlwRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TWFya2VyRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRNYXJrZXJGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb2xTaGFwZUZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0Q29sc2hhcGVGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDaGVja3BvaW50RmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRDaGVja3BvaW50RmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T2JqZWN0RmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRPYmplY3RGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRMb2NhbE9iamVjdEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0TG9jYWxPYmplY3RGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQZWRGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFBlZEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldExvY2FsUGVkRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRMb2NhbFBlZEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldExvY2FsUGxheWVyRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRMb2NhbFBsYXllckZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldExvY2FsVmVoaWNsZUZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0TG9jYWxWZWhpY2xlRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGxheWVyRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRQbGF5ZXJGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRSbWxEb2N1bWVudEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0Um1sRG9jdW1lbnRGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUZXh0TGFiZWxGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFRleHRMYWJlbEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlaGljbGVGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZlaGljbGVGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRXZWJTb2NrZXRDbGllbnRGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFdlYlNvY2tldENsaWVudEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFdlYlZpZXdGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFdlYlZpZXdGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcEJ1aWxkZXIoKSB7XG4gICAgcmV0dXJuIGF3YWl0ICRjcmVhdGVBcHBCdWlsZGVyKHtcbiAgICAgICAgZW52aXJvbWVudDogQXBwRW52aXJvbWVudC5DbGllbnQsXG4gICAgICAgIHBsdWdpbnM6IFtTZXJ2aWNlQmluZGVyUGx1Z2luLCBFdmVudE1lZGlhdG9yUGx1Z2luLCBSUENQbHVnaW4sIFdlYlZpZXdQbHVnaW5dLFxuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2UsXG4gICAgICAgIGFwcEJ1aWxkZXJJbmhlcml0OiBDbGllbnRBcHBCdWlsZGVyLFxuICAgIH0pO1xufVxuXG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydHMnO1xuXG5pbXBvcnQgJy4vZXh0ZW5zaW9uLmQudHMnO1xuXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7O0FBQU8sSUFBS0EsZ0JBQUFBLDBCQUFBQSxpQkFBQUE7OztTQUFBQTs7QUNBTCxJQUFLQyxrQkFBQUEsMEJBQUFBLG1CQUFBQTs7Ozs7Ozs7Ozs7Ozs7O1NBQUFBOztBQ0FMLElBQUtDLG1CQUFBQSwwQkFBQUEsbUJBQUFBOzs7O1NBQUFBOztBQ0FMLElBQUtDLHVCQUFBQSwwQkFBQUEsd0JBQUFBOzs7U0FBQUE7O0FDQUwsSUFBS0Msa0JBQUFBLDBCQUFBQSxtQkFBQUE7Ozs7Ozs7O1NBQUFBOzs7O0FDQUwsSUFBTUMsaUJBQWlCO0FBQ3ZCLElBQU1DLGdCQUFnQjtBQUN0QixJQUFNQyxjQUFjO0FBQ3BCLElBQU1DLG1CQUFtQjtBQUN6QixJQUFNQyxvQkFBb0I7QUFDMUIsSUFBTUMsZ0JBQWdCOzs7QUNMdEIsSUFBS0MsZUFBQUEsMEJBQUFBLGdCQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQUFBQTs7QUNBTCxJQUFLQyxrQkFBQUEsMEJBQUFBLG1CQUFBQTs7OztTQUFBQTs7QUNBTCxJQUFLQyxrQkFBQUEsMEJBQUFBLG1CQUFBQTs7Ozs7Ozs7OztTQUFBQTs7OztBQ0FaLElBQUlDLGFBQVksT0FBTztBQUN2QixJQUFJQyxVQUFTLHdCQUFDLFFBQVEsVUFBUUQsV0FBVSxRQUFRLFFBQVE7QUFBQSxFQUNoRDtBQUFBLEVBQ0EsY0FBYztBQUNsQixDQUFDLEdBSFE7OztBQ0ROLFNBQVNFLG1CQUFBQTtBQUNaLFNBQU9DLEtBQUtDLE9BQU0sRUFBR0MsU0FBUyxFQUFBLEVBQUlDLFVBQVUsR0FBRyxFQUFBLElBQU1ILEtBQUtDLE9BQU0sRUFB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dUJBQXVCZixPQUFBQTtFQUM5QztFQUVPZ0IsaUJBQWlCaEIsU0FBa0I7QUFDdENoQix1QkFBbUJnQyxpQkFBaUJoQixPQUFBQTtFQUN4QztFQUVPaUIsc0JBQXNCakIsU0FBa0I7QUFDM0NoQix1QkFBbUJpQyxzQkFBc0JqQixPQUFBQTtFQUM3QztFQUVPa0Isb0JBQW9CbEIsU0FBa0I7QUFDekNoQix1QkFBbUJrQyxvQkFBb0JsQixPQUFBQTtFQUMzQztFQUVPbUIsa0JBQWtCbkIsU0FBa0I7QUFDdkNoQix1QkFBbUJtQyxrQkFBa0JuQixPQUFBQTtFQUN6QztFQUVPb0IsNkJBQTZCcEIsU0FBa0I7QUFDbERoQix1QkFBbUJvQyw2QkFBNkJwQixPQUFBQTtFQUNwRDtFQUVPcUIsd0JBQXdCckIsU0FBa0I7QUFDN0NoQix1QkFBbUJxQyx3QkFBd0JyQixPQUFBQTtFQUMvQztFQUVPc0IsMEJBQTBCdEIsU0FBa0I7QUFDL0NoQix1QkFBbUJzQywwQkFBMEJ0QixPQUFBQTtFQUNqRDtFQUVPdUIsa0JBQWtCdkIsU0FBa0I7QUFDdkNoQix1QkFBbUJ1QyxrQkFBa0J2QixPQUFBQTtFQUN6QztBQUNKO0FBRUEsZUFBc0J3QixvQkFBQUE7QUFDbEIsU0FBTyxNQUFNQyxpQkFBa0I7SUFDM0JDLFlBQVlDLGNBQWNDO0lBQzFCQyxTQUFTO01BQUNDO01BQXFCQztNQUFxQkM7TUFBV0M7O0lBQy9EakQ7SUFDQWtELG1CQUFtQmhEO0VBQ3ZCLENBQUE7QUFDSjtBQVBzQnNDLE9BQUFBLG1CQUFBQTsiLAogICJuYW1lcyI6IFsiQXBwRW52aXJvbWVudCIsICJDb3JlTWV0YWRhdGFLZXkiLCAiRXZlbnREZXN0aW5hdGlvbiIsICJFeGVjdXRpb25Db250ZXh0VHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiTE9HR0VSX1NFUlZJQ0UiLCAiRVZFTlRfU0VSVklDRSIsICJSUENfU0VSVklDRSIsICJNT0RVTEVfQ09OVEFJTkVSIiwgIlJFRkxFQ1RPUl9TRVJWSUNFIiwgIlRJTUVSX1NFUlZJQ0UiLCAiRXJyb3JNZXNzYWdlIiwgIkluamVjdGFibGVTY29wZSIsICJSUENSZXN1bHRTdGF0dXMiLCAiX19kZWZQcm9wIiwgIl9fbmFtZSIsICJnZW5lcmF0ZVJhbmRvbUlkIiwgIk1hdGgiLCAicmFuZG9tIiwgInRvU3RyaW5nIiwgInN1YnN0cmluZyIsICJpc1VuZGVmaW5lZCIsICJfX25hbWUiLCAib2JqIiwgImlzT2JqZWN0IiwgImZuIiwgImlzTmlsIiwgImlzRnVuY3Rpb24iLCAidmFsIiwgImlzU3RyaW5nIiwgImlzTnVtYmVyIiwgImlzQ29uc3RydWN0b3IiLCAiaXNFbXB0eSIsICJhcnJheSIsICJsZW5ndGgiLCAiaXNTeW1ib2wiLCAiaXNBc3luY0Z1bmN0aW9uIiwgIm5hbWUiLCAiaXNCb29sZWFuIiwgImlzUHJvbWlzZSIsICJQcm9taXNlIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkNvbnRhaW5lciIsICJNb2R1bGVNZXRhZGF0YVJlYWRlciIsICJsb2dnZXJTZXJ2aWNlIiwgInJlYWQiLCAibW9kdWxlIiwgImlzRnVuY3Rpb24iLCAib3B0aW9ucyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJNb2R1bGUiLCAiZXhwb3J0VG9rZW5zIiwgImdldEV4cG9ydFRva2VucyIsICJleHBvcnRzIiwgInNlcGFyYXRlZFByb3ZpZGVycyIsICJzZXBhcmF0ZVByb3ZpZGVycyIsICJwcm92aWRlcnMiLCAiY29udHJvbGxlcnMiLCAiaW1wb3J0cyIsICJnZXRQaXBlbGluZSIsICJjbGFzc1JlZiIsICJnbG9iYWwiLCAiR2xvYmFsTW9kdWxlIiwgImNvbnRhaW5lciIsICJQcm9taXNlIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkTW9kdWxlRGVmaW5pdGlvbiIsICJndWFyZHMiLCAiR3VhcmRzIiwgImludGVyY2VwdG9ycyIsICJJbnRlcmNlcHRvcnMiLCAicGlwZXMiLCAiUGlwZXMiLCAiZXJyb3JGaWx0ZXJzIiwgIkVycm9yRmlsdGVycyIsICJtYXAiLCAicHJvdmlkZXJFeHBvcnQiLCAiaGFzT3duTWV0YWRhdGEiLCAiSW5qZWN0YWJsZSIsICJJbnZhbGlkRXhwb3J0RGVmaW5pdGlvbiIsICJpc1N0cmluZyIsICJpc1N5bWJvbCIsICJwcm92aWRlIiwgInByb3ZpZGVyIiwgImluamVjdGFibGVNZXRhZGF0YSIsICJpc05pbCIsICJJbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uIiwgInVzZUNsYXNzIiwgInNjb3BlIiwgInJlZHVjZSIsICJhY2MiLCAiaW5jbHVkZXMiLCAiZXh0ZXJuYWxQcm92aWRlcnMiLCAic2V0IiwgImludGVybmFsUHJvdmlkZXJzIiwgIk1hcCIsICJNb2R1bGVDb250YWluZXIiLCAiQ29udGFpbmVyIiwgInBhcmVudCIsICJtZXRhZGF0YSIsICJpbnN0YW5jZSIsICJyZXBldGl0aXZlSW1wb3J0cyIsICJTZXQiLCAiaW5qZWN0YWJsZSIsICJpbmplY3QiLCAiRXhlY3V0aW9uQ29udGV4dEJhc2UiLCAiJHR5cGUiLCAiJGNsYXNzUmVmIiwgIiRoYW5kbGVyIiwgIiRyZXF1ZXN0IiwgIiRyZXNwb25zZSIsICIkbmFtZSIsICJ0eXBlIiwgImNsYXNzUmVmIiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJyZXNwb25zZSIsICJuYW1lIiwgIk1hbmdvUmVxdWVzdEJhc2UiLCAiJGJvZHkiLCAiJHBsYXllciIsICJib2R5IiwgInBsYXllciIsICJNYW5nb1Jlc3BvbnNlQmFzZSIsICIkbG9nZ2VyU2VydmljZSIsICIkc2VuZExpc3RlbmVycyIsICJTZXQiLCAiJGVycm9yTGlzdGVuZXJzIiwgIiRpc1NlbnQiLCAic2VuZCIsICJkYXRhIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJSUENSZXNwb25zZUFscmVhZHlTZW50IiwgImZvckVhY2giLCAibGlzdGVuZXIiLCAibWVzc2FnZSIsICJkZXRhaWxzIiwgIiRvblNlbmQiLCAiYWRkIiwgIiRvbkVycm9yIiwgIlRyZWVOb2RlIiwgInZhbHVlIiwgImNoaWxkcmVuIiwgImFkZENoaWxkIiwgImNoaWxkIiwgInB1c2giLCAicmVtb3ZlQ2hpbGQiLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJzcGxpY2UiLCAiVHJlZSIsICJyb290IiwgInRyYXZlcnNlIiwgImNhbGxiYWNrIiwgInRyYXZlcnNlTm9kZSIsICJub2RlIiwgImZvckVhY2giLCAiYXN5bmNUcmF2ZXJzZSIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAidG9TdHJpbmciLCAicmVzdWx0IiwgImxpbmVzIiwgImRlcHRoIiwgInJlcGVhdCIsICJqb2luIiwgImRlZmF1bHRDb250cm9sbGVyT3B0aW9ucyIsICJwcmVmaXgiLCAidmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyIsICJvcHRpb25zIiwgImlzTmlsIiwgInZhbGlkIiwgInZhbHVlIiwgImlzT2JqZWN0IiwgImVycm9yIiwgImlzU3RyaW5nIiwgInZhbGlkYXRlRXJyb3JGaWx0ZXIiLCAiaXNGdW5jdGlvbiIsICJwcm90b3R5cGUiLCAiY2F0Y2giLCAidmFsaWRhdGVQaXBlIiwgInRyYW5zZm9ybSIsICJ2YWxpZGF0ZUV2ZW50UGFyYW1ldGVyIiwgImtleSIsICJpc051bWJlciIsICJpbmRleCIsICJ0eXBlIiwgIk1ldGhvZFBhcmFtVHlwZSIsICJCb2R5IiwgIlBsYXllciIsICJkYXRhIiwgIkN1c3RvbSIsICJmYWN0b3J5IiwgIlBhcmFtIiwgIkluZGV4IiwgIlJlcXVlc3QiLCAiUmVzcG9uc2UiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJwaXBlcyIsICJwaXBlIiwgInZhbGlkYXRlRXZlbnRNZXRhZGF0YSIsICJuYW1lIiwgIm1ldGhvZCIsICJwYXJhbXMiLCAicGFyYW0iLCAidmFsaWRhdGVHdWFyZCIsICJjYW5BY3RpdmF0ZSIsICJ2YWxpZGF0ZUludGVyY2VwdG9yIiwgImludGVyY2VwdCIsICJ2YWxpZGF0ZUluamVjdGlvblRva2VuIiwgImlzU3ltYm9sIiwgInZhbGlkYXRlUHJvdmlkZXIiLCAicHJvdmlkZSIsICJ2YWxpZGF0ZUNsYXNzUHJvdmlkZXIiLCAidmFsaWRhdGVWYWx1ZVByb3ZpZGVyIiwgInZhbGlkYXRlRmFjdG9yeVByb3ZpZGVyIiwgInZhbGlkYXRlRXhpc3RpbmdQcm92aWRlciIsICJzY29wZSIsICJJbmplY3RhYmxlU2NvcGUiLCAiU2luZ2xldG9uIiwgIk9iamVjdCIsICJ2YWx1ZXMiLCAiaW5jbHVkZXMiLCAidmFsaWRhdGVPcHRpb25hbEZhY3RvcnlEZXBlbmRlbmN5IiwgInRva2VuIiwgInVzZUZhY3RvcnkiLCAiaW5qZWN0IiwgInZhbGlkYXRlTW9kdWxlT3B0aW9ucyIsICJpc0R5bmFtaWMiLCAiY29udHJvbGxlcnMiLCAiaW1wb3J0cyIsICJwcm92aWRlcnMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgImlzQm9vbGVhbiIsICJpbXBvcnRlZCIsICJpc1Byb21pc2UiLCAiY29udHJvbGxlciIsICJwcm92aWRlciIsICJleHBvcnRJdGVtIiwgImRlZmF1bHRJbmplY3RhYmxlT3B0aW9ucyIsICJ2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSIsICJJTlRFUk5BTF9BUFBfQ09OVEFJTkVSIiwgIkdMT0JBTF9BUFBfQ09OVEFJTkVSIiwgIkFQUF9FTlZJUk9NRU5UIiwgIkdMT0JBTF9HVUFSRFMiLCAiR0xPQkFMX0lOVEVSQ0VQVE9SUyIsICJHTE9CQUxfUElQRVMiLCAiR0xPQkFMX0VSUk9SX0ZJTFRFUlMiLCAiUExVR0lOUyIsICJFTkFCTEVfU0hVVERPV05fSE9PS1MiLCAiQ09OVEFJTkVSX09QVElPTlMiLCAiTUFOR09fTE9HX1BSRUZJWCIsICJNQU5HT19SRVFVRVNUX0ZBQ1RPUlkiLCAiTUFOR09fUkVTUE9OU0VfRkFDVE9SWSIsICJFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZIiwgIk1VTFRJUExBWUVSX1NFUlZJQ0UiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgInN1Y2Nlc3MiLCAiZXJyb3IiLCAibWVzc2FnZSIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlRpbWVvdXQiLCAiUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCIsICJIYW5kbGVyTm90Rm91bmQiLCAiUlBDX1JFU1VMVF9VTktOT1dOIiwgIlVua25vd24iLCAiUlBDX1JFU1VMVF9QTEFZRVJfRElTQ09OTkVDVEVEIiwgIlBsYXllckRpc2Nvbm5lY3RlZCIsICJSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQiLCAiUGxheWVyTm90Rm91bmQiLCAiTWFuZ29FcnJvciIsICJFcnJvciIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlVua25vd24iLCAiZGV0YWlscyIsICJtZXNzYWdlIiwgIkd1YXJkQ2FuY2VsRXJyb3IiLCAiQ2FuY2VsbGVkQnlHdWFyZCIsICJHdWFyZEludmFsaWRSZXR1cm5FcnJvciIsICJJbnZhbGlkR3VhcmRSZXR1cm4iLCAiVG9vTWFueVJlcXVlc3RzIiwgIlVua25vd25FcnJvciIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJQaXBlbGluZUhhbmRsZXIiLCAibG9nZ2VyU2VydmljZSIsICJnb1Ryb3VnaEd1YXJkcyIsICJleGVjdXRpb25Db250ZXh0IiwgImd1YXJkcyIsICJjb250YWluZXIiLCAiZ3VhcmQiLCAiaW5zdGFuY2UiLCAiaXNGdW5jdGlvbiIsICJnZXQiLCAiaXNPYmplY3QiLCAiaXNOaWwiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkludmFsaWRHdWFyZERlZmluaXRpb24iLCAiY2FuQWN0aXZhdGUiLCAiY2FsbCIsICJHdWFyZEludmFsaWRSZXR1cm5FcnJvciIsICJHdWFyZENhbmNlbEVycm9yIiwgImdvVGhyb3VnaEludGVyY2VwdG9ycyIsICJpbnRlcmNlcHRvcnMiLCAiY2FsbEhhbmRsZXIiLCAiaW50ZXJjZXB0b3IiLCAiSW52YWxpZEludGVyY2VwdG9yRGVmaW5pdGlvbiIsICJpbnRlcmNlcHQiLCAiZ29Ucm91Z2hQaXBlcyIsICJ2YWx1ZSIsICJwaXBlcyIsICJhcmd1bWVudE1ldGFkYXRhIiwgInBpcGUiLCAiSW52YWxpZFBpcGVEZWZpbml0aW9uIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJ0cmFuc2Zvcm0iLCAiQ29udHJvbGxlckZsb3dIYW5kbGVyIiwgImFwcEVudiIsICJwaXBlbGluZUhhbmRsZXIiLCAiY3JlYXRlQXJncyIsICJjb250cm9sbGVyIiwgIm1ldGFkYXRhIiwgInBsYXllciIsICJhbGwiLCAicGFyYW1zIiwgIm1hcCIsICJwYXJhbSIsICJ0eXBlIiwgImRhdGEiLCAibWV0YXR5cGUiLCAicmVxdWVzdCIsICJib2R5IiwgIm93bmVyIiwgInVuZGVmaW5lZCIsICJBcnJheSIsICJpc0FycmF5IiwgImZhY3RvcnkiLCAiQXBwRW52aXJvbWVudCIsICJTZXJ2ZXIiLCAiQ29udHJvbGxlckV2ZW50SGFuZGxlciIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiZXZlbnRTZXJ2aWNlIiwgImNvbnRyb2xsZXJGbG93SGFuZGxlciIsICJjcmVhdGVNYW5nb1JlcXVlc3QiLCAiY3JlYXRlRXhlY3V0aW9uQ29udGV4dCIsICJyZWdpc3RlckV2ZW50IiwgIm1hcHBlZEVycm9yRmlsdGVycyIsICJldmVudCIsICJuYW1lIiwgImhhbmRsZUV2ZW50IiwgImFyZ3MiLCAicGFyc2VJbnRlcm5hbEFyZ3MiLCAid2ViVmlld0lkIiwgIkludmFsaWRFdmVudFR5cGUiLCAiRXhlY3V0aW9uQ29udGV4dFR5cGUiLCAiRXZlbnQiLCAiY2xhc3NSZWYiLCAicHJvdG90eXBlIiwgIm1ldGhvZCIsICJjb250cm9sbGVyTWV0aG9kIiwgImhhbmRsZSIsICJpc0FzeW5jRnVuY3Rpb24iLCAiYXBwbHkiLCAicmV0dXJuIiwgIl9fbmFtZSIsICJJbnZhbGlkUmV0dXJuSW5FdmVudCIsICJsZW5ndGgiLCAiZXJyb3JHcm91cCIsICJmaW5kIiwgImVycm9yVHlwZSIsICJJbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uIiwgImNhdGNoIiwgIkNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciIsICJyZWFkIiwgIm9wdGlvbnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ29udHJvbGxlciIsICJldmVudHMiLCAiZ2V0RXZlbnRzIiwgInJwY3MiLCAiZ2V0UlBDcyIsICJ0aW1lcnMiLCAiZ2V0VGltZXJzIiwgImdldFBpcGVsaW5lIiwgIkNvbnRyb2xsZXJFdmVudHMiLCAiZ2V0TWV0aG9kUGFyYW1zIiwgIkNvbnRyb2xsZXJSUENzIiwgInJwYyIsICJDb250cm9sbGVyUGFyYW1zIiwgInNvcnQiLCAiYSIsICJiIiwgImluZGV4IiwgImZvckVhY2giLCAiSW52YWxpZFBhcmFtZXRlckRlY29yYXRvclVzYWdlIiwgIlJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzIiwgIkNsaWVudCIsICJQbGF5ZXJEZWNvcmF0b3JOb3RBbGxvd2VkT25DbGllbnRFdmVudHMiLCAiUlBDTm90QWxsb3dlZEluQ2xpZW50IiwgIlJQQ05vdEFsbG93ZWRJblNlcnZlciIsICJFdmVudE5vdEFsbG93ZWRJbkNsaWVudCIsICJFdmVudE5vdEFsbG93ZWRJblNlcnZlciIsICJ0YXJnZXQiLCAiR3VhcmRzIiwgIkludGVyY2VwdG9ycyIsICJQaXBlcyIsICJlcnJvckZpbHRlcnMiLCAiRXJyb3JGaWx0ZXJzIiwgIlRpbWVycyIsICJDb250cm9sbGVyUlBDSGFuZGxlciIsICJycGNTZXJ2aWNlIiwgImNyZWF0ZU1hbmdvUmVzcG9uc2UiLCAicmVnaXN0ZXJSUEMiLCAiaGFuZGxlUlBDIiwgIkludmFsaWRSUENUeXBlIiwgInJlc3BvbnNlIiwgIiRvblNlbmQiLCAiJG9uRXJyb3IiLCAiUlBDIiwgInNlbmQiLCAicmVzdWx0IiwgImV2ZW50SGFuZGxlcnMiLCAicnBjSGFuZGxlcnMiLCAiaW5qZWN0YWJsZSIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJvcHRpb25hbCIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJvcHRpb25hbCIsICJDb250YWluZXIiLCAiTGF6eVNlcnZpY2VJZGVudGlmaWVyIiwgIm1pbml0eiIsICJ5IiwgIm0iLCAiZCIsICJoIiwgImkiLCAicyIsICJ0eiIsICJ0aHJvd09uSW52YWxpZCIsICJmcm9tVFoiLCAidHAiLCAiZnJvbVRaSVNPIiwgImxvY2FsVGltZVN0ciIsICJwYXJzZUlTT0xvY2FsIiwgImluRGF0ZSIsICJEYXRlIiwgIlVUQyIsICJvZmZzZXQiLCAiZ2V0VGltZXpvbmVPZmZzZXQiLCAiZGF0ZUd1ZXNzIiwgImdldFRpbWUiLCAiZGF0ZU9mZnNHdWVzcyIsICJkYXRlR3Vlc3MyIiwgImRhdGVPZmZzR3Vlc3MyIiwgIkVycm9yIiwgInRvVFoiLCAidHpTdHIiLCAibG9jYWxEYXRlU3RyaW5nIiwgInRvTG9jYWxlU3RyaW5nIiwgInRpbWVab25lIiwgInJlcGxhY2UiLCAidGQiLCAiZ2V0RnVsbFllYXIiLCAiZ2V0TW9udGgiLCAiZ2V0RGF0ZSIsICJnZXRIb3VycyIsICJnZXRNaW51dGVzIiwgImdldFNlY29uZHMiLCAiZGF0ZSIsICJ0aW1lWm9uZU5hbWUiLCAic3BsaXQiLCAic2xpY2UiLCAiZGF0ZVN0cmluZyIsICJwYXJzZSIsICJkdFN0ciIsICJwZCIsICJpc05hTiIsICJzdHJpbmdFbmQiLCAic3Vic3RyaW5nIiwgImluY2x1ZGVzIiwgImdldFVUQ0Z1bGxZZWFyIiwgImdldFVUQ01vbnRoIiwgImdldFVUQ0RhdGUiLCAiZ2V0VVRDSG91cnMiLCAiZ2V0VVRDTWludXRlcyIsICJnZXRVVENTZWNvbmRzIiwgIkNyb25PcHRpb25zIiwgIm9wdGlvbnMiLCAibmFtZSIsICJsZWdhY3lNb2RlIiwgInBhdXNlZCIsICJtYXhSdW5zIiwgIkluZmluaXR5IiwgImNhdGNoIiwgImludGVydmFsIiwgInBhcnNlSW50IiwgInV0Y09mZnNldCIsICJ1bnJlZiIsICJzdGFydEF0IiwgIkNyb25EYXRlIiwgInRpbWV6b25lIiwgInN0b3BBdCIsICJMQVNUX09DQ1VSUkVOQ0UiLCAiQU5ZX09DQ1VSUkVOQ0UiLCAiT0NDVVJSRU5DRV9CSVRNQVNLUyIsICJDcm9uUGF0dGVybiIsICJwYXR0ZXJuIiwgInNlY29uZCIsICJBcnJheSIsICJmaWxsIiwgIm1pbnV0ZSIsICJob3VyIiwgImRheSIsICJtb250aCIsICJkYXlPZldlZWsiLCAibGFzdERheU9mTW9udGgiLCAic3RhckRPTSIsICJzdGFyRE9XIiwgInByb3RvdHlwZSIsICJTdHJpbmciLCAiVHlwZUVycm9yIiwgImluZGV4T2YiLCAiaGFuZGxlTmlja25hbWVzIiwgInRyaW0iLCAicGFydHMiLCAibGVuZ3RoIiwgInVuc2hpZnQiLCAicmVwbGFjZUFscGhhTW9udGhzIiwgInJlcGxhY2VBbHBoYURheXMiLCAiaW5pdERhdGUiLCAiZ2V0RGF5IiwgInRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyIsICJwYXJ0VG9BcnJheSIsICJ0eXBlIiwgImNvbmYiLCAidmFsdWVJbmRleE9mZnNldCIsICJkZWZhdWx0VmFsdWUiLCAiYXJyIiwgImhhbmRsZVJhbmdlV2l0aFN0ZXBwaW5nIiwgImhhbmRsZVJhbmdlIiwgImhhbmRsZVN0ZXBwaW5nIiwgImhhbmRsZU51bWJlciIsICJyZVZhbGlkQ3JvbiIsICJ0ZXN0IiwgInJlc3VsdCIsICJleHRyYWN0TnRoIiwgInNldFBhcnQiLCAicGFydCIsICJpbmRleCIsICJ2YWx1ZSIsICJPYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAiY2FsbCIsICJSYW5nZUVycm9yIiwgInNldE50aFdlZWtkYXlPZk1vbnRoIiwgIm1hdGNoZXMiLCAibWF0Y2giLCAibG93ZXIiLCAidXBwZXIiLCAic3RlcHMiLCAicmVzdCIsICJudGgiLCAic3RhcnQiLCAiY2xlYW5QYXR0ZXJuIiwgInRvTG93ZXJDYXNlIiwgIm50aFdlZWtkYXkiLCAiRGF5c09mTW9udGgiLCAiUmVjdXJzaW9uU3RlcHMiLCAiZnJvbURhdGUiLCAiZnJvbVN0cmluZyIsICJmcm9tQ3JvbkRhdGUiLCAiaXNOdGhXZWVrZGF5T2ZNb250aCIsICJ5ZWFyIiwgIndlZWtkYXkiLCAiZ2V0VVRDRGF5IiwgImNvdW50IiwgImRheXNJbk1vbnRoIiwgIm1zIiwgImdldFVUQ01pbGxpc2Vjb25kcyIsICJhcHBseSIsICJnZXRNaWxsaXNlY29uZHMiLCAic3RyIiwgImZpbmROZXh0IiwgInRhcmdldCIsICJvcmlnaW5hbFRhcmdldCIsICJmRG9tV2Vla0RheSIsICJ1bmRlZmluZWQiLCAiZG93TWF0Y2giLCAicmVjdXJzZSIsICJkb2luZyIsICJyZXMiLCAicmVzZXRMZXZlbCIsICJpbmNyZW1lbnQiLCAiaGFzUHJldmlvdXNSdW4iLCAiaW50ZXJuYWwiLCAiaXNGdW5jdGlvbiIsICJ2IiwgInRvU3RyaW5nIiwgIkZ1bmN0aW9uIiwgInVucmVmVGltZXIiLCAidGltZXIiLCAiRGVubyIsICJtYXhEZWxheSIsICJzY2hlZHVsZWRKb2JzIiwgIkNyb24iLCAiZm5Pck9wdGlvbnMxIiwgImZuT3JPcHRpb25zMiIsICJmdW5jIiwgIl9zdGF0ZXMiLCAia2lsbCIsICJibG9ja2luZyIsICJwcmV2aW91c1J1biIsICJjdXJyZW50UnVuIiwgIm9uY2UiLCAiY3VycmVudFRpbWVvdXQiLCAiZXhpc3RpbmciLCAiZmluZCIsICJqIiwgInB1c2giLCAiZm4iLCAic2NoZWR1bGUiLCAibmV4dFJ1biIsICJwcmV2IiwgIm5leHQiLCAiX25leHQiLCAibmV4dFJ1bnMiLCAibiIsICJwcmV2aW91cyIsICJlbnVtZXJhdGlvbiIsICJnZXRQYXR0ZXJuIiwgImlzUnVubmluZyIsICJuZXh0UnVuVGltZSIsICJpc1NjaGVkdWxlZCIsICJub3RJc0tpbGxlZCIsICJpc1N0b3BwZWQiLCAiaXNCdXN5IiwgIm1zVG9OZXh0IiwgInN0b3AiLCAiY2xlYXJUaW1lb3V0IiwgImpvYkluZGV4IiwgInNwbGljZSIsICJwYXVzZSIsICJyZXN1bWUiLCAid2FpdE1zIiwgInNldFRpbWVvdXQiLCAiX2NoZWNrVHJpZ2dlciIsICJfdHJpZ2dlciIsICJpbml0aWF0aW9uRGF0ZSIsICJjb250ZXh0IiwgIl9lIiwgInRyaWdnZXIiLCAibm93IiwgInNob3VsZFJ1biIsICJpc0Jsb2NrZWQiLCAicHJvdGVjdCIsICJzdGFydEF0SW5GdXR1cmVXaXRoSW50ZXJ2YWwiLCAiX2NhbGN1bGF0ZVByZXZpb3VzUnVuIiwgInByZXZUaW1lUGx1c0ludGVydmFsIiwgIkNvbnRyb2xsZXIiLCAib3B0aW9ucyIsICJ0YXJnZXQiLCAiUmVmbGVjdCIsICJoYXNNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkR1cGxpY2F0ZURlY29yYXRvclVzYWdlIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMiLCAiZGVmaW5lTWV0YWRhdGEiLCAiaW5qZWN0YWJsZSIsICJHbG9iYWwiLCAiR2xvYmFsTW9kdWxlIiwgIkluamVjdCIsICJrZXkiLCAicHJvcGVydHlLZXkiLCAicGFyYW1JbmRleCIsICJpc05pbCIsICJ2YWxpZGF0ZUluamVjdGlvblRva2VuIiwgIkludmFsaWRJbmplY3Rpb25Ub2tlblNwZWNpZmllZCIsICJ0b2tlbiIsICJnZXRNZXRhZGF0YSIsICJJbmplY3Rpb25Ub2tlbk5vdEZvdW5kIiwgImluamVjdCIsICJJbmplY3RhYmxlIiwgInZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhIiwgIk1vZHVsZSIsICJ2YWxpZGF0ZU1vZHVsZU9wdGlvbnMiLCAiT3B0aW9uYWwiLCAib3B0aW9uYWwiLCAiU2V0TWV0YWRhdGEiLCAiZGVjb3JhdG9yRmFjdG9yeSIsICJfX25hbWUiLCAiX21ldGhvZCIsICJkZXNjcmlwdG9yIiwgIktFWSIsICJDYXRjaCIsICJleGNlcHRpb25zIiwgImR1cGxpY2F0ZXMiLCAiZmlsdGVyIiwgImV4Y2VwdGlvbiIsICJpbmRleCIsICJpbmRleE9mIiwgImxlbmd0aCIsICJFeGNlcHRpb25IYW5kbGluZ0NvbmZsaWN0IiwgIlVzZUZpbHRlcnMiLCAiZmlsdGVycyIsICJtZXRob2QiLCAidmFsaWRhdGVkRmlsdGVycyIsICJ2YWxpZGF0ZUVycm9yRmlsdGVyIiwgInB1c2giLCAiQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkIiwgIm1ldGhvZEZpbHRlcnMiLCAiRXJyb3JGaWx0ZXJzIiwgImZpbmQiLCAiaW5jbHVkZXMiLCAiRHVwbGljYXRlRXJyb3JGaWx0ZXJEZXRlY3RlZCIsICJjbGFzc0ZpbHRlcnMiLCAiQXBwUnVudGltZSIsICJldmVudEhhbmRsZXIiLCAicnBjSGFuZGxlciIsICJnbG9iYWxHdWFyZHMiLCAiZ2xvYmFsSW50ZXJjZXB0b3JzIiwgImdsb2JhbFBpcGVzIiwgImdsb2JhbEVycm9yRmlsdGVycyIsICJsb2dnZXJTZXJ2aWNlIiwgImVuYWJsZVNodXRkb3duSG9va3MiLCAiYm9vdCIsICJyZXNvbHZlZFRyZWUiLCAiYXN5bmNUcmF2ZXJzZSIsICJub2RlIiwgInN0YXJ0VGltZSIsICJEYXRlIiwgIm5vdyIsICJtb2R1bGUiLCAiaW5zdGFuY2UiLCAiY29udGFpbmVyIiwgImdldCIsICJtZXRhZGF0YSIsICJjbGFzc1JlZiIsICJjb250cm9sbGVycyIsICJmb3JFYWNoIiwgImNvbnRyb2xsZXIiLCAiaW50ZXJuYWxQcm92aWRlcnMiLCAiZXh0ZXJuYWxQcm92aWRlcnMiLCAibG9nIiwgIm5hbWUiLCAicnVuTGlmZWN5Y2xlTWV0aG9kIiwgInJ1bkxpZmVjeWNsZU1ldGhvZHMiLCAidHJhdmVyc2UiLCAidGltZSIsICJyZWdpc3RlclRpbWVycyIsICJyZWdpc3Rlckxpc3RlbmVycyIsICJzaHV0ZG93biIsICJ0aW1lclNlcnZpY2UiLCAib3duZXIiLCAiVElNRVJfU0VSVklDRSIsICJldmVyeXRpY2tzIiwgInRpbWVyIiwgImRlc3Ryb3kiLCAiaW50ZXJ2YWxzIiwgInRpbWVvdXRzIiwgImNyb25zIiwgImNyb24iLCAic3RvcCIsICJldmVudEhhbmRsZXJzIiwgImhhbmRsZXIiLCAicnBjSGFuZGxlcnMiLCAiZXZlbnRzIiwgImV2ZW50IiwgImd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAicGlwZXMiLCAibWFwcGVkRXJyb3JGaWx0ZXJzIiwgIm1hcEVycm9yRmlsdGVycyIsICJlcnJvckZpbHRlcnMiLCAicmVnaXN0ZXJFdmVudCIsICJycGNzIiwgInJwYyIsICJyZWdpc3RlclJQQyIsICJ0aW1lcnMiLCAidHlwZSIsICJjcmVhdGVDcm9uSm9iIiwgImJpbmQiLCAiY3JlYXRlRXZlcnlUaWNrIiwgImNyZWF0ZUludGVydmFsIiwgInRpbWVvdXQiLCAiY3JlYXRlVGltZW91dCIsICJmaWx0ZXJNYXAiLCAiZXJyb3JzIiwgImZpbHRlckVycm9yIiwgIkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlciIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAiaXNPYmplY3QiLCAicHJvdmlkZXJJbnN0YW5jZSIsICJNb2R1bGVEZXBlbmRlbmN5QmluZGVyIiwgImdsb2JhbEFwcENvbnRhaW5lciIsICJjb250YWluZXJPcHRpb25zIiwgIk1vZHVsZUNvbnRhaW5lciIsICJwYXJlbnQiLCAidG9TZWxmIiwgImluU2luZ2xldG9uU2NvcGUiLCAiZ2xvYmFsIiwgIl8iLCAicHJvdmlkZXIiLCAiYmluZFByb3ZpZGVyIiwgInRvRHluYW1pY1ZhbHVlIiwgImltcG9ydE1vZHVsZSIsICJyZXBldGl0aXZlSW1wb3J0cyIsICJNT0RVTEVfQ09OVEFJTkVSIiwgInRvQ29uc3RhbnRWYWx1ZSIsICJ0byIsICJUaW1lclNlcnZpY2UiLCAicHJvdmlkZSIsICJ1c2VWYWx1ZSIsICJiaW5kaW5nIiwgImN0eCIsICJkZXBzIiwgImRlcCIsICJlcnIiLCAidW5kZWZpbmVkIiwgInVzZUZhY3RvcnkiLCAic2NvcGUiLCAiaW5UcmFuc2llbnRTY29wZSIsICJpblJlcXVlc3RTY29wZSIsICJ1c2VDbGFzcyIsICJ0b1NlcnZpY2UiLCAidXNlRXhpc3RpbmciLCAiTW9kdWxlVHJlZVNjYW5uZXIiLCAibW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAiY29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgInNjYW4iLCAibW9kdWxlTWV0YWRhdGEiLCAicmVhZCIsICJzY2FuQ29udHJvbGxlcnMiLCAibW9kdWxlVHJlZSIsICJUcmVlIiwgInNjYW5uZWRNb2R1bGVzIiwgIk1hcCIsICJzZXQiLCAiaW1wb3J0ZWRNb2R1bGUiLCAiaW1wb3J0cyIsICJzY2FuTW9kdWxlcyIsICJyb290IiwgInBhcmVudE5vZGUiLCAic2Nhbm5lZE1vZHVsZSIsICJhZGQiLCAiY2hlY2tDaXJjdWxhckRlcGVuZGVuY3kiLCAidHJlZU5vZGUiLCAiVHJlZU5vZGUiLCAiYWRkQ2hpbGQiLCAiY29udHJvbGxlck1ldGFkYXRhIiwgInBhcmVudE1ldGFkYXRhIiwgIkNpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkIiwgIlJhZ2VNUFNjcmlwdEV2ZW50IiwgImV2ZW50TmFtZSIsICJsaXN0ZW5lciIsICJtcCIsICJyZW1vdmUiLCAiUmFnZU1QRXZlbnRFbW1pdGVyIiwgImVtaXQiLCAiYXJncyIsICJjYWxsIiwgIm9uIiwgIm9uY2UiLCAib25jZVdyYXBwZXIiLCAib2ZmIiwgIlJhZ2VNUFRpbWVyIiwgImxhc3RUaWNrIiwgImlkIiwgImludGVydmFsIiwgImNhbGxiYWNrIiwgImNsZWFyVGltZXIiLCAiUmFnZU1QVGltZXJzIiwgInRpbWVySW5jcmVtZW50ZXIiLCAiZXZlcnlUaWNrSGFuZGxlcnMiLCAiaXNFdmVyeVRpY2tSdW5uaW5nIiwgImV2ZXJ5VGlja01haW5IYW5kbGVyIiwgInZhbHVlcyIsICJ3YXJuaW5nVGhyZXNob2xkIiwgIl92YWx1ZSIsICJzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50IiwgImdldEJ5SUQiLCAiY3JlYXRlVGltZXIiLCAiY2xlYXIiLCAiY2FsbGJhY2tCaW5kIiwgIkFycmF5IiwgImlzQXJyYXkiLCAidGltZXJJZCIsICJyYWdlTVBUaW1lciIsICJkZWxldGUiLCAic2V0SW50ZXJ2YWwiLCAiY2IiLCAiY2xlYXJJbnRlcnZhbCIsICJzZXRUaW1lb3V0IiwgImNsZWFyVGltZW91dCIsICJldmVyeVRpY2siLCAiYm91bmQiLCAiaXNDbGllbnRTaWRlIiwgImJyb3dzZXJzIiwgImUiLCAiY29uc29sZSIsICJsb2dFcnJvciIsICJpbnRlcnZhbEhhbmRsZXIiLCAiX2V2ZXJ5VGlja0ludGVydmFsIiwgInNpemUiLCAibmV4dFRpY2siLCAiX25hbWUiLCAidGltZUVuZCIsICJSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UiLCAiVGltZXJzIiwgIkV2ZW50cyIsICJwYXJzZUludGVybmFsQXJncyIsICJwbGF5ZXIiLCAiYm9keSIsICJhcmciLCAibWVzc2FnZSIsICJhIiwgIkpTT04iLCAic3RyaW5naWZ5IiwgIlN0cmluZyIsICJqb2luIiwgImxvZ0luZm8iLCAibG9nV2FybmluZyIsICJsb2dEZWJ1ZyIsICJBcHAiLCAibW9kdWxlVHJlZVNjYW5uZXIiLCAibW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJhcHBSdW50aW1lIiwgImludGVybmFsQXBwQ29udGFpbmVyIiwgInBsdWdpbnMiLCAibG9hZGVkIiwgInN0YXJ0IiwgInJvb3RNb2R1bGUiLCAiQXBwQWxyZWFkeUxvYWRlZCIsICJydW5QbHVnaW5NZXRob2RzIiwgIkFwcE5vdExvYWRlZCIsICJwIiwgInBsdWdpbiIsICJyZXNvbHZlIiwgIkFwcEJ1aWxkZXIiLCAiZW52aXJvbWVudCIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiZ2xvYmFsQ29udGFpbmVyT3B0aW9ucyIsICJ1c2VHbG9iYWxHdWFyZHMiLCAidmFsaWRhdGVkR3VhcmRzIiwgImd1YXJkIiwgInZhbGlkYXRlR3VhcmQiLCAiR0xPQkFMX0dVQVJEUyIsICJ1c2VHbG9iYWxJbnRlcmNlcHRvcnMiLCAidmFsaWRhdGVkSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9yIiwgInZhbGlkYXRlSW50ZXJjZXB0b3IiLCAiR0xPQkFMX0lOVEVSQ0VQVE9SUyIsICJ1c2VHbG9iYWxQaXBlcyIsICJ2YWxpZGF0ZWRQaXBlcyIsICJwaXBlIiwgInZhbGlkYXRlUGlwZSIsICJHTE9CQUxfUElQRVMiLCAidXNlR2xvYmFsRmlsdGVycyIsICJ2YWxpZGF0ZWRGSWx0ZXJzIiwgIkdMT0JBTF9FUlJPUl9GSUxURVJTIiwgInVzZVBsdWdpbnMiLCAiaW50ZXJuYWxQbHVnaW5zIiwgIlBMVUdJTlMiLCAicmViaW5kIiwgIkVOQUJMRV9TSFVURE9XTl9IT09LUyIsICJzZXRDb250YWluZXJPcHRpb25zIiwgIm9ubHlHbG9iYWwiLCAiQ09OVEFJTkVSX09QVElPTlMiLCAiYnVpbGQiLCAiQ29udGFpbmVyIiwgIlJFRkxFQ1RPUl9TRVJWSUNFIiwgIlJlZmxlY3RvclNlcnZpY2UiLCAiTVVMVElQTEFZRVJfU0VSVklDRSIsICJHTE9CQUxfQVBQX0NPTlRBSU5FUiIsICJQaXBlbGluZUhhbmRsZXIiLCAiTW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAiQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgIkNvbnRyb2xsZXJGbG93SGFuZGxlciIsICJDb250cm9sbGVyRXZlbnRIYW5kbGVyIiwgIkNvbnRyb2xsZXJSUENIYW5kbGVyIiwgIk1hbmdvUmVxdWVzdEJhc2UiLCAiTUFOR09fUkVRVUVTVF9GQUNUT1JZIiwgInRvRmFjdG9yeSIsICJjb250ZXh0IiwgInJlcXVlc3QiLCAiJGJvZHkiLCAiJHBsYXllciIsICJNYW5nb1Jlc3BvbnNlQmFzZSIsICJNQU5HT19SRVNQT05TRV9GQUNUT1JZIiwgIkV4ZWN1dGlvbkNvbnRleHRCYXNlIiwgIkVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkiLCAicmVzcG9uc2UiLCAiZXhlY3V0aW9uQ29udGV4dCIsICIkdHlwZSIsICIkcmVxdWVzdCIsICIkcmVzcG9uc2UiLCAiJGhhbmRsZXIiLCAiJGNsYXNzUmVmIiwgIiRuYW1lIiwgInBsdWdpbkluc3RhbmNlIiwgIm9uQnVpbGQiLCAiaXNCb3VuZCIsICJjcmVhdGVBcHBCdWlsZGVyIiwgImFwcEJ1aWxkZXJJbmhlcml0IiwgIklOVEVSTkFMX0FQUF9DT05UQUlORVIiLCAiQVBQX0VOVklST01FTlQiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAid2ViVmlld0lkIiwgImlzU3RyaW5nIiwgIkV2ZW50TmFtZU11c3RCZVN0cmluZyIsICJDb250cm9sbGVyRXZlbnRzIiwgInNvbWUiLCAiRXZlbnROYW1lTXVzdEJlVW5pcXVlIiwgIk9uSW50ZXJuYWwiLCAiT25XZWJWaWV3IiwgIk9uIiwgIk9uY2VJbnRlcm5hbCIsICJPbmNlIiwgIk9uY2VXZWJWaWV3IiwgIkJvZHkiLCAicGFyYW1zIiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAicGFyYW0iLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgImRhdGEiLCAiSW5kZXgiLCAiaXNOdW1iZXIiLCAiSW5kZXhLZXlNdXN0QmVOdW1iZXIiLCAiUmVxdWVzdCIsICJSZXEiLCAiUGFyYW0iLCAiUGFyYW1LZXlNdXN0QmVTdHJpbmciLCAiUmVzcG9uc2UiLCAiUmVzIiwgIlVzZUd1YXJkcyIsICJBdExlYXN0T25lR3VhcmRSZXF1aXJlZCIsICJtZXRob2RHdWFyZHMiLCAiR3VhcmRzIiwgImNsYXNzR3VhcmRzIiwgIlVzZUludGVyY2VwdG9ycyIsICJBdExlYXN0T25lSW50ZXJjZXB0b3JSZXF1aXJlZCIsICJtZXRob2RJbnRlcmNlcHRvcnMiLCAiSW50ZXJjZXB0b3JzIiwgImNsYXNzSW50ZXJjZXB0b3JzIiwgIlVzZVBpcGVzIiwgIkF0TGVhc3RPbmVQaXBlUmVxdWlyZWQiLCAibWV0aG9kUGlwZXMiLCAiUGlwZXMiLCAiY2xhc3NQaXBlcyIsICJjcmVhdGVSUENEZWNvcmF0b3IiLCAiV2ViVmlld0lkTXVzdEJlU3RyaW5nT3JOdW1iZXIiLCAiUlBDTmFtZU11c3RCZVN0cmluZyIsICJDb250cm9sbGVyUlBDcyIsICJSUENOYW1lTXVzdEJlVW5pcXVlIiwgIk9uUmVxdWVzdCIsICJycGNOYW1lIiwgIk9uV2ViVmlld1JlcXVlc3QiLCAiY3JlYXRlVGltZXJEZWNvcmF0b3IiLCAiVGltZXJOYW1lTXVzdEJlU3RyaW5nIiwgIkNyb24iLCAicGF0dGVybiIsICJFdmVyeVRpY2siLCAiSW50ZXJ2YWwiLCAibmFtZU9yVGltZW91dCIsICJpbnRlcnZhbFRpbWVvdXQiLCAiVGltZW91dCIsICJhcHBseURlY29yYXRvcnMiLCAiZGVjb3JhdG9ycyIsICJkZWNvcmF0b3IiLCAiRnVuY3Rpb24iLCAiY3JlYXRlUGFyYW1EZWNvcmF0b3IiLCAiZmFjdG9yeSIsICJDdXN0b20iLCAiZm9yd2FyZFJlZiIsICJmbiIsICJMYXp5U2VydmljZUlkZW50aWZpZXIiLCAibWV0YWRhdGFLZXkiLCAiZ2V0QWxsIiwgInRhcmdldHMiLCAiZ2V0QWxsQW5kTWVyZ2UiLCAibWV0YWRhdGFDb2xsZWN0aW9uIiwgIml0ZW0iLCAiaXNFbXB0eSIsICJyZWR1Y2UiLCAiYiIsICJjb25jYXQiLCAiZ2V0QWxsQW5kT3ZlcnJpZGUiLCAicmVzdWx0IiwgImNyZWF0ZURlY29yYXRvciIsICJnZW5lcmF0ZVJhbmRvbUlkIiwgImRlY29yYXRvckZuIiwgIm1ldGFkYXRhVmFsdWUiLCAidHJhbnNmb3JtIiwgIiRldmVyeXRpY2tzIiwgIiRpbnRlcnZhbHMiLCAiJHRpbWVvdXRzIiwgIiRjcm9ucyIsICJjcm9uT3B0aW9ucyIsICJjcm9uSm9iIiwgImV2ZXJ5dGljayIsICJnZXRCeU5hbWUiLCAiZ2V0QnlJZCIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJCYXNlRXZlbnRTZXJ2aWNlIiwgIiRsb2NhbEhhbmRsZXJzIiwgIlNldCIsICIkaW50ZXJuYWxIYW5kbGVycyIsICIkcmVtb3RlSGFuZGxlcnMiLCAiJGludGVybmFsRXZlbnROYW1lcyIsICIkZXZlbnRFbW1pdGVyIiwgIm9uIiwgImV2ZW50TmFtZSIsICJjYWxsYmFjayIsICJ3cmFwcGVyIiwgIl9fbmFtZSIsICJhcmdzIiwgImV2ZW50SGFuZGxlciIsICJhZGQiLCAib25jZSIsICJlbWl0IiwgImJvZHkiLCAiJG9uSW50ZXJuYWwiLCAiaGFuZGxlciIsICJoYXMiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSIsICIkb25jZUludGVybmFsIiwgIkJhc2VSUENTZXJ2aWNlIiwgIiRsb2dnZXJTZXJ2aWNlIiwgIiRUSU1FT1VUIiwgIk1hcCIsICJjYWxsIiwgInJwY05hbWUiLCAib3B0aW9ucyIsICJ0aW1lb3V0IiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJnZXQiLCAiUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCIsICJ0aW1lb3V0SWQiLCAic2V0VGltZW91dCIsICJSUENfUkVTVUxUX1RJTUVPVVQiLCAicmVzdWx0IiwgImNsZWFyVGltZW91dCIsICJzdWNjZXNzIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiU3VjY2VzcyIsICJlcnJvciIsICJNYW5nb0Vycm9yIiwgIm1lc3NhZ2UiLCAiZGV0YWlscyIsICJSUENfUkVTVUxUX1VOS05PV04iLCAib25SZXF1ZXN0IiwgIlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzIiwgInJwY0hhbmRsZXIiLCAiZGVzdHJveSIsICJ2YWxpZCIsICJkZWxldGUiLCAic2V0IiwgIldFQlZJRVdfU0VSVklDRSIsICJXRUJWSUVXX0xJU1RfU0VSVklDRSIsICJBRERfV0VCVklFVyIsICJJTlRFUk5BTF9FVkVOVFMiLCAiU0NSSVBUX1JQQyIsICJTQ1JJUFRfUlBDX0FOU1dFUiIsICJLRVlCT0FSRF9FVkVOVCIsICJLRVlfVVAiLCAiS0VZX0RPV04iLCAiV0VCX1ZJRVdfRVZFTlQiLCAiV0VCX1NPQ0tFVF9FVkVOVCIsICJBVURJT19FVkVOVCIsICJSTUxVSV9FVkVOVCIsICJXSU5ET1dfRk9DVVNfQ0hBTkdFIiwgIldJTkRPV19SRVNPTFVUSU9OX0NIQU5HRSIsICJDT05ORUNUSU9OX0NPTVBMRVRFIiwgIkRJU0NPTk5FQ1QiLCAiU1BBV05FRCIsICJHQU1FX0VOVElUWV9DUkVBVEUiLCAiR0FNRV9FTlRJVFlfREVTVFJPWSIsICJFTlRJVFlfSElUX0VOVElUWSIsICJUQVNLX0NIQU5HRSIsICJQTEFZRVJfV0VBUE9OX1NIT09UIiwgIlBMQVlFUl9CVUxMRVRfSElUIiwgIlBMQVlFUl9XRUFQT05fQ0hBTkdFIiwgIlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSIiwgIlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0xFQVZFIiwgIlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQiLCAiUExBWUVSX1ZFSElDTEVfTEVGVCIsICJQTEFZRVJfVkVISUNMRV9TRUFUX0NIQU5HRSIsICJWT0lDRV9DT05ORUNUSU9OIiwgIlBMQVlFUl9TVEFSVF9UQUxLSU5HIiwgIlBMQVlFUl9TVE9QX1RBTEtJTkciLCAiV09STERfT0JKRUNUX1BPU0lUSU9OX0NIQU5HRSIsICJXT1JMRF9PQkpFQ1RfU1RSRUFNX0lOIiwgIldPUkxEX09CSkVDVF9TVFJFQU1fT1VUIiwgIkVWRU5UIiwgIkJBU0VfT0JKRUNUX0NSRUFURSIsICJCQVNFX09CSkVDVF9SRU1PVkUiLCAiTkVUX09XTkVSX0NIQU5HRSIsICJXRUFQT05fREFNQUdFIiwgIk1FVEFfQ0hBTkdFIiwgIkxPQ0FMX01FVEFfQ0hBTkdFIiwgIlNZTkNFRF9NRVRBX0NIQU5HRSIsICJTVFJFQU1fU1lOQ0VEX01FVEFfQ0hBTkdFIiwgIkdMT0JBTF9NRVRBX0NIQU5HRSIsICJHTE9CQUxfU1lOQ0VEX01FVEFfQ0hBTkdFIiwgIkVOVElUWV9DT0xfU0hBUEVfRU5URVIiLCAiRU5USVRZX0NPTF9TSEFQRV9MRUFWRSIsICJFTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUiIsICJFTlRJVFlfQ0hFQ0tQT0lOVF9MRUFWRSIsICJDT0xfU0hBUEVfRVZFTlQiLCAiQ09OU09MRV9DT01NQU5EIiwgIkVSUk9SIiwgIkxPQ0FMX1NDUklQVF9FVkVOVCIsICJSRU1PVEVfU0NSSVBUX0VWRU5UIiwgIlJFU09VUkNFX1NUQVJUIiwgIlJFU09VUkNFX1NUT1AiLCAiUkVTT1VSQ0VfRVJST1IiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiRGVmYXVsdFZhbHVlUGlwZSIsICJkZWZhdWx0VmFsdWUiLCAidHJhbnNmb3JtIiwgInZhbHVlIiwgImlzTmlsIiwgImlzTnVtYmVyIiwgImlzTmFOIiwgIkV2ZW50TWVkaWF0b3JQbHVnaW4iLCAiZXZlbnRTZXJ2aWNlIiwgIndlYlZpZXdTZXJ2aWNlIiwgImxvZ2dlclNlcnZpY2UiLCAiYmVmb3JlTG9hZCIsICJ0aW1lIiwgIkRhdGUiLCAibm93IiwgIm9uU2VydmVyIiwgImJvZHkiLCAiZ2V0IiwgImlkIiwgImVtaXQiLCAiZXZlbnROYW1lIiwgInBheWxvYWQiLCAiJG9uQ3JlYXRlIiwgIndlYlZpZXciLCAib24iLCAiZGF0YSIsICJKU09OIiwgInBhcnNlIiwgImVtaXRTZXJ2ZXIiLCAibG9nIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlJQQ1BsdWdpbiIsICJldmVudFNlcnZpY2UiLCAid2ViVmlld1NlcnZpY2UiLCAicnBjU2VydmljZSIsICJsb2dnZXJTZXJ2aWNlIiwgImJlZm9yZUxvYWQiLCAidGltZSIsICJEYXRlIiwgIm5vdyIsICJvblNlcnZlciIsICJwYXlsb2FkIiwgInJwY0hhbmRsZXIiLCAiJHNlcnZlckhhbmRsZXJzIiwgImdldCIsICJycGNOYW1lIiwgImlzTmlsIiwgImVtaXRTZXJ2ZXIiLCAiaWQiLCAiUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCIsICJyZXN1bHQiLCAiaGFuZGxlciIsICJib2R5IiwgInJwY1Jlc3VsdCIsICJzdWNjZXNzIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiU3VjY2VzcyIsICJlcnJvciIsICJNYW5nb0Vycm9yIiwgIm1lc3NhZ2UiLCAiZGV0YWlscyIsICJSUENfUkVTVUxUX1VOS05PV04iLCAiJG9uQ3JlYXRlIiwgIndlYlZpZXdJZCIsICJ3ZWJWaWV3IiwgIm9uIiwgInZhbGlkIiwgIiR3ZWJWaWV3SGFuZGxlcnMiLCAiZW1pdCIsICJsb2ciLCAiQ29udGFpbmVyIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkNsaWVudEV2ZW50U2VydmljZSIsICJCYXNlRXZlbnRTZXJ2aWNlIiwgIiR3ZWJWaWV3TGlzdFNlcnZpY2UiLCAiJHJhZ2VFdmVudHMiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIkV2ZW50cyIsICIkaW50ZXJuYWxFdmVudE5hbWVzIiwgIlNldCIsICJPYmplY3QiLCAidmFsdWVzIiwgIklOVEVSTkFMX0VWRU5UUyIsICJvblNlcnZlciIsICJldmVudE5hbWUiLCAiY2FsbGJhY2siLCAid3JhcHBlciIsICJhcmdzIiwgImV2ZW50SGFuZGxlciIsICIkcmVtb3RlSGFuZGxlcnMiLCAiYWRkIiwgIm9uY2VTZXJ2ZXIiLCAiZW1pdFNlcnZlciIsICJib2R5IiwgIm9uV2ViVmlldyIsICJpZCIsICJ3ZWJWaWV3IiwgInRyeUdldCIsICJkZXN0cm95IiwgIm9mZiIsICJvbiIsICJvbmNlV2ViVmlldyIsICJvbmNlIiwgImVtaXRXZWJWaWV3IiwgImVtaXQiLCAib25SZW5kZXIiLCAib25Ccm93c2VyRG9tUmVhZHkiLCAib25Ccm93c2VyTG9hZGluZ0ZhaWxlZCIsICJvblBsYXllckNoYXQiLCAib25QbGF5ZXJDb21tYW5kIiwgIm9uUGxheWVyRGVhdGgiLCAib25QbGF5ZXJTcGF3biIsICJvblBsYXllckVudGVyVmVoaWNsZSIsICJvblBsYXllckV4aXRWZWhpY2xlIiwgIm9uUGxheWVyRW50ZXJDb2xzaGFwZSIsICJvblBsYXllckV4aXRDb2xzaGFwZSIsICJvblBsYXllckVudGVyQ2hlY2twb2ludCIsICJvblBsYXllckV4aXRDaGVja3BvaW50IiwgImluamVjdGFibGUiLCAiaW5qZWN0IiwgIkVycm9yTWVzc2FnZSIsICJJbmplY3RhYmxlU2NvcGUiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIklOVEVSTkFMX0FQUF9DT05UQUlORVIiLCAiR0xPQkFMX0FQUF9DT05UQUlORVIiLCAiQVBQX0VOVklST01FTlQiLCAiR0xPQkFMX0dVQVJEUyIsICJHTE9CQUxfSU5URVJDRVBUT1JTIiwgIkdMT0JBTF9QSVBFUyIsICJHTE9CQUxfRVJST1JfRklMVEVSUyIsICJQTFVHSU5TIiwgIkVOQUJMRV9TSFVURE9XTl9IT09LUyIsICJDT05UQUlORVJfT1BUSU9OUyIsICJNQU5HT19SRVFVRVNUX0ZBQ1RPUlkiLCAiTUFOR09fUkVTUE9OU0VfRkFDVE9SWSIsICJFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZIiwgIk1VTFRJUExBWUVSX1NFUlZJQ0UiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgInN1Y2Nlc3MiLCAiZXJyb3IiLCAibWVzc2FnZSIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlRpbWVvdXQiLCAiUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCIsICJIYW5kbGVyTm90Rm91bmQiLCAiUlBDX1JFU1VMVF9VTktOT1dOIiwgIlVua25vd24iLCAiUlBDX1JFU1VMVF9QTEFZRVJfRElTQ09OTkVDVEVEIiwgIlBsYXllckRpc2Nvbm5lY3RlZCIsICJSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQiLCAiUGxheWVyTm90Rm91bmQiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiZ2VuZXJhdGVSYW5kb21JZCIsICJNYXRoIiwgInJhbmRvbSIsICJ0b1N0cmluZyIsICJzdWJzdHJpbmciLCAiaXNVbmRlZmluZWQiLCAib2JqIiwgImlzT2JqZWN0IiwgImZuIiwgImlzTmlsIiwgImlzRnVuY3Rpb24iLCAidmFsIiwgImlzU3RyaW5nIiwgImlzTmlsIiwgInZhbCIsICJpc1VuZGVmaW5lZCIsICJpc0VtcHR5IiwgImFycmF5IiwgImxlbmd0aCIsICJpc1N5bWJvbCIsICJpc0FzeW5jRnVuY3Rpb24iLCAiaXNGdW5jdGlvbiIsICJuYW1lIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIk1hbmdvRXJyb3IiLCAiRXJyb3IiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJVbmtub3duIiwgImRldGFpbHMiLCAibWVzc2FnZSIsICJHdWFyZENhbmNlbEVycm9yIiwgIk1hbmdvRXJyb3IiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIkNhbmNlbGxlZEJ5R3VhcmQiLCAiR3VhcmRJbnZhbGlkUmV0dXJuRXJyb3IiLCAiTWFuZ29FcnJvciIsICJSUENSZXN1bHRTdGF0dXMiLCAiSW52YWxpZEd1YXJkUmV0dXJuIiwgIkxPR0dFUl9TRVJWSUNFIiwgIkVWRU5UX1NFUlZJQ0UiLCAiUlBDX1NFUlZJQ0UiLCAiTU9EVUxFX0NPTlRBSU5FUiIsICJSRUZMRUNUT1JfU0VSVklDRSIsICJUSU1FUl9TRVJWSUNFIiwgIlBpcGVsaW5lSGFuZGxlciIsICJsb2dnZXJTZXJ2aWNlIiwgImdvVHJvdWdoR3VhcmRzIiwgImV4ZWN1dGlvbkNvbnRleHQiLCAiZ3VhcmRzIiwgImNvbnRhaW5lciIsICJndWFyZCIsICJpbnN0YW5jZSIsICJpc0Z1bmN0aW9uIiwgImdldCIsICJpc09iamVjdCIsICJpc05pbCIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZEd1YXJkRGVmaW5pdGlvbiIsICJjYW5BY3RpdmF0ZSIsICJjYWxsIiwgIkd1YXJkSW52YWxpZFJldHVybkVycm9yIiwgIkd1YXJkQ2FuY2VsRXJyb3IiLCAiZ29UaHJvdWdoSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9ycyIsICJjYWxsSGFuZGxlciIsICJpbnRlcmNlcHRvciIsICJJbnZhbGlkSW50ZXJjZXB0b3JEZWZpbml0aW9uIiwgImludGVyY2VwdCIsICJnb1Ryb3VnaFBpcGVzIiwgInZhbHVlIiwgInBpcGVzIiwgImFyZ3VtZW50TWV0YWRhdGEiLCAicGlwZSIsICJJbnZhbGlkUGlwZURlZmluaXRpb24iLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgInRyYW5zZm9ybSIsICJBcHBFbnZpcm9tZW50IiwgIkNvcmVNZXRhZGF0YUtleSIsICJFeGVjdXRpb25Db250ZXh0VHlwZSIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJDb250cm9sbGVyRmxvd0hhbmRsZXIiLCAiYXBwRW52IiwgInBpcGVsaW5lSGFuZGxlciIsICJjcmVhdGVBcmdzIiwgImNvbnRyb2xsZXIiLCAiZXhlY3V0aW9uQ29udGV4dCIsICJtZXRhZGF0YSIsICJwaXBlcyIsICJwbGF5ZXIiLCAiUHJvbWlzZSIsICJhbGwiLCAicGFyYW1zIiwgIm1hcCIsICJwYXJhbSIsICJhcmd1bWVudE1ldGFkYXRhIiwgInR5cGUiLCAiZGF0YSIsICJtZXRhdHlwZSIsICJnb1Ryb3VnaFBpcGVzIiwgInJlcXVlc3QiLCAiYm9keSIsICJvd25lciIsICJjb250YWluZXIiLCAiaXNPYmplY3QiLCAidW5kZWZpbmVkIiwgIkFycmF5IiwgImlzQXJyYXkiLCAiZmFjdG9yeSIsICJBcHBFbnZpcm9tZW50IiwgIlNlcnZlciIsICJDb250cm9sbGVyRXZlbnRIYW5kbGVyIiwgImFwcEVudiIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiZXZlbnRTZXJ2aWNlIiwgImNvbnRyb2xsZXJGbG93SGFuZGxlciIsICJwaXBlbGluZUhhbmRsZXIiLCAibG9nZ2VyU2VydmljZSIsICJjcmVhdGVNYW5nb1JlcXVlc3QiLCAiY3JlYXRlRXhlY3V0aW9uQ29udGV4dCIsICJyZWdpc3RlckV2ZW50IiwgImd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAicGlwZXMiLCAibWFwcGVkRXJyb3JGaWx0ZXJzIiwgImNvbnRyb2xsZXIiLCAiZXZlbnQiLCAidHlwZSIsICJuYW1lIiwgImJvZHkiLCAiaGFuZGxlRXZlbnQiLCAiYXJncyIsICJwbGF5ZXIiLCAicGFyc2VJbnRlcm5hbEFyZ3MiLCAid2ViVmlld0lkIiwgIkFwcEVudmlyb21lbnQiLCAiU2VydmVyIiwgInVuZGVmaW5lZCIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZEV2ZW50VHlwZSIsICJyZXF1ZXN0IiwgImV4ZWN1dGlvbkNvbnRleHQiLCAiRXhlY3V0aW9uQ29udGV4dFR5cGUiLCAiRXZlbnQiLCAibWV0YWRhdGEiLCAiY2xhc3NSZWYiLCAicHJvdG90eXBlIiwgIm1ldGhvZCIsICJnb1Ryb3VnaEd1YXJkcyIsICJvd25lciIsICJjb250YWluZXIiLCAiY3JlYXRlQXJncyIsICJjb250cm9sbGVyTWV0aG9kIiwgImluc3RhbmNlIiwgImhhbmRsZSIsICJpc0FzeW5jRnVuY3Rpb24iLCAiYXBwbHkiLCAiY2FsbEhhbmRsZXIiLCAicmV0dXJuIiwgIkludmFsaWRSZXR1cm5JbkV2ZW50IiwgImxlbmd0aCIsICJnb1Rocm91Z2hJbnRlcmNlcHRvcnMiLCAiZXJyb3JHcm91cCIsICJmaW5kIiwgImVycm9yVHlwZSIsICJpc0Z1bmN0aW9uIiwgImlzTmlsIiwgImdldCIsICJpc09iamVjdCIsICJJbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJjYXRjaCIsICJjYWxsIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciIsICJhcHBFbnYiLCAibG9nZ2VyU2VydmljZSIsICJyZWFkIiwgImNsYXNzUmVmIiwgIm9wdGlvbnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiQ29udHJvbGxlciIsICJldmVudHMiLCAiZ2V0RXZlbnRzIiwgInJwY3MiLCAiZ2V0UlBDcyIsICJ0aW1lcnMiLCAiZ2V0VGltZXJzIiwgImdldFBpcGVsaW5lIiwgIkNvbnRyb2xsZXJFdmVudHMiLCAicHJvdG90eXBlIiwgIm1hcCIsICJldmVudCIsICJwYXJhbXMiLCAiZ2V0TWV0aG9kUGFyYW1zIiwgIm1ldGhvZCIsICJDb250cm9sbGVyUlBDcyIsICJycGMiLCAibWV0YWRhdGEiLCAiQ29udHJvbGxlclBhcmFtcyIsICJzb3J0IiwgImEiLCAiYiIsICJpbmRleCIsICJmb3JFYWNoIiwgInBhcmFtIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkUGFyYW1ldGVyRGVjb3JhdG9yVXNhZ2UiLCAidHlwZSIsICJSZXNwb25zZURlY29yYXRvck5vdEFsbG93ZWRPbkV2ZW50cyIsICJBcHBFbnZpcm9tZW50IiwgIkNsaWVudCIsICJQbGF5ZXJEZWNvcmF0b3JOb3RBbGxvd2VkT25DbGllbnRFdmVudHMiLCAiUlBDTm90QWxsb3dlZEluQ2xpZW50IiwgIlNlcnZlciIsICJSUENOb3RBbGxvd2VkSW5TZXJ2ZXIiLCAiRXZlbnROb3RBbGxvd2VkSW5DbGllbnQiLCAiRXZlbnROb3RBbGxvd2VkSW5TZXJ2ZXIiLCAidGFyZ2V0IiwgImd1YXJkcyIsICJHdWFyZHMiLCAiaW50ZXJjZXB0b3JzIiwgIkludGVyY2VwdG9ycyIsICJwaXBlcyIsICJQaXBlcyIsICJlcnJvckZpbHRlcnMiLCAiRXJyb3JGaWx0ZXJzIiwgIlRpbWVycyIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJDb250cm9sbGVyUlBDSGFuZGxlciIsICJhcHBFbnYiLCAicnBjU2VydmljZSIsICJwaXBlbGluZUhhbmRsZXIiLCAiY29udHJvbGxlckZsb3dIYW5kbGVyIiwgImxvZ2dlclNlcnZpY2UiLCAiY3JlYXRlTWFuZ29SZXF1ZXN0IiwgImNyZWF0ZU1hbmdvUmVzcG9uc2UiLCAiY3JlYXRlRXhlY3V0aW9uQ29udGV4dCIsICJyZWdpc3RlclJQQyIsICJndWFyZHMiLCAiaW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIm1hcHBlZEVycm9yRmlsdGVycyIsICJjb250cm9sbGVyIiwgInJwYyIsICJ0eXBlIiwgIm5hbWUiLCAiYm9keSIsICJoYW5kbGVSUEMiLCAicGxheWVyIiwgIndlYlZpZXdJZCIsICJhcmdzIiwgIkFwcEVudmlyb21lbnQiLCAiU2VydmVyIiwgInVuZGVmaW5lZCIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZFJQQ1R5cGUiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgInJlcXVlc3QiLCAicmVzcG9uc2UiLCAiJG9uU2VuZCIsICJkYXRhIiwgIiRvbkVycm9yIiwgImV4ZWN1dGlvbkNvbnRleHQiLCAiRXhlY3V0aW9uQ29udGV4dFR5cGUiLCAiUlBDIiwgIm1ldGFkYXRhIiwgImNsYXNzUmVmIiwgInByb3RvdHlwZSIsICJtZXRob2QiLCAiZ29Ucm91Z2hHdWFyZHMiLCAib3duZXIiLCAiY29udGFpbmVyIiwgImNyZWF0ZUFyZ3MiLCAiY29udHJvbGxlck1ldGhvZCIsICJpbnN0YW5jZSIsICJoYW5kbGUiLCAiaXNBc3luY0Z1bmN0aW9uIiwgIm9wdGlvbnMiLCAic2VuZCIsICJyZXN1bHQiLCAiYXBwbHkiLCAiY2FsbEhhbmRsZXIiLCAicmV0dXJuIiwgInZhbHVlIiwgImxlbmd0aCIsICJnb1Rocm91Z2hJbnRlcmNlcHRvcnMiLCAiZXJyb3JHcm91cCIsICJmaW5kIiwgImVycm9yVHlwZSIsICJpc0Z1bmN0aW9uIiwgImlzTmlsIiwgImdldCIsICJpc09iamVjdCIsICJJbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uIiwgImNhdGNoIiwgImNhbGwiLCAiaW5qZWN0YWJsZSIsICJDb250cm9sbGVyIiwgIm1ldGFkYXRhIiwgImluc3RhbmNlIiwgIm93bmVyIiwgImV2ZW50SGFuZGxlcnMiLCAicnBjSGFuZGxlcnMiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiTW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAibG9nZ2VyU2VydmljZSIsICJyZWFkIiwgIm1vZHVsZSIsICJpc0Z1bmN0aW9uIiwgIm9wdGlvbnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiTW9kdWxlIiwgImV4cG9ydFRva2VucyIsICJnZXRFeHBvcnRUb2tlbnMiLCAiZXhwb3J0cyIsICJzZXBhcmF0ZWRQcm92aWRlcnMiLCAic2VwYXJhdGVQcm92aWRlcnMiLCAicHJvdmlkZXJzIiwgImNvbnRyb2xsZXJzIiwgImltcG9ydHMiLCAiZ2V0UGlwZWxpbmUiLCAiY2xhc3NSZWYiLCAiZ2xvYmFsIiwgIkdsb2JhbE1vZHVsZSIsICJjb250YWluZXIiLCAiUHJvbWlzZSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZE1vZHVsZURlZmluaXRpb24iLCAiZ3VhcmRzIiwgIkd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAiSW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIlBpcGVzIiwgImVycm9yRmlsdGVycyIsICJFcnJvckZpbHRlcnMiLCAibWFwIiwgInByb3ZpZGVyRXhwb3J0IiwgImhhc093bk1ldGFkYXRhIiwgIkluamVjdGFibGUiLCAiSW52YWxpZEV4cG9ydERlZmluaXRpb24iLCAiaXNTdHJpbmciLCAiaXNTeW1ib2wiLCAicHJvdmlkZSIsICJwcm92aWRlciIsICJpbmplY3RhYmxlTWV0YWRhdGEiLCAiaXNOaWwiLCAiSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbiIsICJ1c2VDbGFzcyIsICJzY29wZSIsICJyZWR1Y2UiLCAiYWNjIiwgImluY2x1ZGVzIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgInNldCIsICJpbnRlcm5hbFByb3ZpZGVycyIsICJNYXAiLCAiQ29udGFpbmVyIiwgIk1vZHVsZUNvbnRhaW5lciIsICJDb250YWluZXIiLCAiaW5qZWN0YWJsZSIsICJNb2R1bGUiLCAiY29udHJvbGxlcnMiLCAiY29udGFpbmVyIiwgInBhcmVudCIsICJtZXRhZGF0YSIsICJpbnN0YW5jZSIsICJyZXBldGl0aXZlSW1wb3J0cyIsICJTZXQiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAib3B0aW9uYWwiLCAiQXBwUnVudGltZSIsICJldmVudEhhbmRsZXIiLCAicnBjSGFuZGxlciIsICJnbG9iYWxHdWFyZHMiLCAiZ2xvYmFsSW50ZXJjZXB0b3JzIiwgImdsb2JhbFBpcGVzIiwgImdsb2JhbEVycm9yRmlsdGVycyIsICJsb2dnZXJTZXJ2aWNlIiwgImVuYWJsZVNodXRkb3duSG9va3MiLCAiYm9vdCIsICJyZXNvbHZlZFRyZWUiLCAiYXN5bmNUcmF2ZXJzZSIsICJub2RlIiwgInN0YXJ0VGltZSIsICJEYXRlIiwgIm5vdyIsICJtb2R1bGUiLCAidmFsdWUiLCAiaW5zdGFuY2UiLCAiY29udGFpbmVyIiwgImdldCIsICJtZXRhZGF0YSIsICJjbGFzc1JlZiIsICJjb250cm9sbGVycyIsICJmb3JFYWNoIiwgImNvbnRyb2xsZXIiLCAiaW50ZXJuYWxQcm92aWRlcnMiLCAiZXh0ZXJuYWxQcm92aWRlcnMiLCAidG9rZW4iLCAibG9nIiwgIm5hbWUiLCAicnVuTGlmZWN5Y2xlTWV0aG9kIiwgInJ1bkxpZmVjeWNsZU1ldGhvZHMiLCAidHJhdmVyc2UiLCAidGltZSIsICJyZWdpc3RlclRpbWVycyIsICJyZWdpc3Rlckxpc3RlbmVycyIsICJzaHV0ZG93biIsICJ0aW1lclNlcnZpY2UiLCAib3duZXIiLCAiVElNRVJfU0VSVklDRSIsICJldmVyeXRpY2tzIiwgInRpbWVyIiwgImRlc3Ryb3kiLCAiaW50ZXJ2YWxzIiwgInRpbWVvdXRzIiwgImNyb25zIiwgImNyb24iLCAic3RvcCIsICJldmVudEhhbmRsZXJzIiwgImhhbmRsZXIiLCAicnBjSGFuZGxlcnMiLCAiZXZlbnRzIiwgImV2ZW50IiwgImd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAicGlwZXMiLCAibWFwcGVkRXJyb3JGaWx0ZXJzIiwgIm1hcEVycm9yRmlsdGVycyIsICJlcnJvckZpbHRlcnMiLCAicmVnaXN0ZXJFdmVudCIsICJwdXNoIiwgInJwY3MiLCAicnBjIiwgInJlZ2lzdGVyUlBDIiwgInRpbWVycyIsICJ0eXBlIiwgImNyZWF0ZUNyb25Kb2IiLCAibWV0aG9kIiwgImJpbmQiLCAib3B0aW9ucyIsICJjcmVhdGVFdmVyeVRpY2siLCAiY3JlYXRlSW50ZXJ2YWwiLCAidGltZW91dCIsICJjcmVhdGVUaW1lb3V0IiwgImZpbHRlck1hcCIsICJmaWx0ZXIiLCAiZXJyb3JzIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNhdGNoIiwgImxlbmd0aCIsICJlcnJvciIsICJpc05pbCIsICJmaW5kIiwgImZpbHRlckVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJFcnJvckFscmVhZHlIYW5kbGVkQnlGaWx0ZXIiLCAiUHJvbWlzZSIsICJhbGwiLCAibWFwIiwgImlzT2JqZWN0IiwgInByb3ZpZGVySW5zdGFuY2UiLCAiQ29udGFpbmVyIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIm9wdGlvbmFsIiwgImluamVjdGFibGUiLCAidmFsaWRhdGVFcnJvckZpbHRlciIsICJ2YWx1ZSIsICJpc05pbCIsICJ2YWxpZCIsICJlcnJvciIsICJpc0Z1bmN0aW9uIiwgImlzT2JqZWN0IiwgInByb3RvdHlwZSIsICJjYXRjaCIsICJ2YWxpZGF0ZVBpcGUiLCAidmFsdWUiLCAiaXNOaWwiLCAidmFsaWQiLCAiZXJyb3IiLCAiaXNGdW5jdGlvbiIsICJpc09iamVjdCIsICJwcm90b3R5cGUiLCAidHJhbnNmb3JtIiwgInZhbGlkYXRlR3VhcmQiLCAidmFsdWUiLCAiaXNOaWwiLCAidmFsaWQiLCAiZXJyb3IiLCAiaXNGdW5jdGlvbiIsICJpc09iamVjdCIsICJwcm90b3R5cGUiLCAiY2FuQWN0aXZhdGUiLCAidmFsaWRhdGVJbnRlcmNlcHRvciIsICJ2YWx1ZSIsICJpc05pbCIsICJ2YWxpZCIsICJlcnJvciIsICJpc0Z1bmN0aW9uIiwgImlzT2JqZWN0IiwgInByb3RvdHlwZSIsICJpbnRlcmNlcHQiLCAiZGVmYXVsdEluamVjdGFibGVPcHRpb25zIiwgInNjb3BlIiwgIkluamVjdGFibGVTY29wZSIsICJTaW5nbGV0b24iLCAiaW5qZWN0YWJsZSIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJpbmplY3RhYmxlIiwgIm9wdGlvbmFsIiwgIlNldE1ldGFkYXRhIiwgImtleSIsICJ2YWx1ZSIsICJkZWNvcmF0b3JGYWN0b3J5IiwgInRhcmdldCIsICJfbWV0aG9kIiwgImRlc2NyaXB0b3IiLCAiUmVmbGVjdCIsICJkZWZpbmVNZXRhZGF0YSIsICJLRVkiLCAiTGF6eVNlcnZpY2VJZGVudGlmaWVyIiwgIlJlZmxlY3RvclNlcnZpY2UiLCAiZ2V0IiwgIm1ldGFkYXRhS2V5IiwgInRhcmdldCIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgImdldEFsbCIsICJ0YXJnZXRzIiwgIm1hcCIsICJnZXRBbGxBbmRNZXJnZSIsICJtZXRhZGF0YUNvbGxlY3Rpb24iLCAiZmlsdGVyIiwgIml0ZW0iLCAidW5kZWZpbmVkIiwgImlzRW1wdHkiLCAicmVkdWNlIiwgImEiLCAiYiIsICJBcnJheSIsICJpc0FycmF5IiwgImNvbmNhdCIsICJpc09iamVjdCIsICJnZXRBbGxBbmRPdmVycmlkZSIsICJyZXN1bHQiLCAiY3JlYXRlRGVjb3JhdG9yIiwgIm9wdGlvbnMiLCAia2V5IiwgImdlbmVyYXRlUmFuZG9tSWQiLCAiZGVjb3JhdG9yRm4iLCAibWV0YWRhdGFWYWx1ZSIsICJkZXNjcmlwdG9yIiwgInZhbHVlIiwgInRyYW5zZm9ybSIsICJTZXRNZXRhZGF0YSIsICJLRVkiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiVGltZXJTZXJ2aWNlIiwgIm11bHRpcGxheWVyU2VydmljZSIsICIkZXZlcnl0aWNrcyIsICJNYXAiLCAiJGludGVydmFscyIsICIkdGltZW91dHMiLCAiJGNyb25zIiwgImFsbCIsICJUaW1lcnMiLCAiZXZlcnl0aWNrcyIsICJ2YWx1ZXMiLCAiaW50ZXJ2YWxzIiwgInRpbWVvdXRzIiwgImNyb25zIiwgIndhcm5pbmdUaHJlc2hvbGQiLCAidmFsdWUiLCAic291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudCIsICJjcmVhdGVDcm9uSm9iIiwgImNhbGxiYWNrIiwgIm9wdGlvbnMiLCAicGF0dGVybiIsICJjcm9uT3B0aW9ucyIsICJjcm9uIiwgIkNyb24iLCAiaXNTdHJpbmciLCAibmFtZSIsICJzZXQiLCAiY3JlYXRlSW50ZXJ2YWwiLCAiaW50ZXJ2YWwiLCAidGltZXIiLCAic2V0SW50ZXJ2YWwiLCAiY3JlYXRlVGltZW91dCIsICJ0aW1lb3V0IiwgInNldFRpbWVvdXQiLCAiY3JlYXRlRXZlcnlUaWNrIiwgImV2ZXJ5VGljayIsICJkZWxldGUiLCAidHlwZSIsICJjcm9uSm9iIiwgImdldCIsICJzdG9wIiwgImV2ZXJ5dGljayIsICJkZXN0cm95IiwgImdldEJ5TmFtZSIsICJnZXRCeUlkIiwgImlkIiwgImdldEJ5SUQiLCAidGltZSIsICJ0aW1lRW5kIiwgIk1vZHVsZURlcGVuZGVuY3lCaW5kZXIiLCAiZ2xvYmFsQXBwQ29udGFpbmVyIiwgImxvZ2dlclNlcnZpY2UiLCAiY29udGFpbmVyT3B0aW9ucyIsICJiaW5kIiwgInJlc29sdmVkVHJlZSIsICJhc3luY1RyYXZlcnNlIiwgIm5vZGUiLCAic3RhcnRUaW1lIiwgIkRhdGUiLCAibm93IiwgIm1vZHVsZSIsICJ2YWx1ZSIsICJjb250YWluZXIiLCAiTW9kdWxlQ29udGFpbmVyIiwgIm1ldGFkYXRhIiwgInBhcmVudCIsICJjbGFzc1JlZiIsICJ0b1NlbGYiLCAiaW5TaW5nbGV0b25TY29wZSIsICJnbG9iYWwiLCAiXyIsICJwcm92aWRlciIsICJleHRlcm5hbFByb3ZpZGVycyIsICJiaW5kUHJvdmlkZXIiLCAidG9rZW4iLCAidG9EeW5hbWljVmFsdWUiLCAiZ2V0IiwgImltcG9ydE1vZHVsZSIsICJyZXBldGl0aXZlSW1wb3J0cyIsICJpbnRlcm5hbFByb3ZpZGVycyIsICJNT0RVTEVfQ09OVEFJTkVSIiwgInRvQ29uc3RhbnRWYWx1ZSIsICJjb250cm9sbGVycyIsICJUSU1FUl9TRVJWSUNFIiwgInRvIiwgIlRpbWVyU2VydmljZSIsICJsb2ciLCAibmFtZSIsICJwcm92aWRlIiwgInVzZVZhbHVlIiwgImJpbmRpbmciLCAiY3R4IiwgImRlcHMiLCAiaW5qZWN0IiwgIm1hcCIsICJkZXAiLCAiaXNPYmplY3QiLCAiZXJyIiwgIm9wdGlvbmFsIiwgInVuZGVmaW5lZCIsICJlcnJvciIsICJ1c2VGYWN0b3J5IiwgInNjb3BlIiwgImluVHJhbnNpZW50U2NvcGUiLCAiaW5SZXF1ZXN0U2NvcGUiLCAidXNlQ2xhc3MiLCAidG9TZXJ2aWNlIiwgInVzZUV4aXN0aW5nIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlRyZWVOb2RlIiwgInZhbHVlIiwgImNoaWxkcmVuIiwgImFkZENoaWxkIiwgImNoaWxkIiwgInB1c2giLCAicmVtb3ZlQ2hpbGQiLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJzcGxpY2UiLCAiVHJlZSIsICJyb290IiwgInRyYXZlcnNlIiwgImNhbGxiYWNrIiwgInRyYXZlcnNlTm9kZSIsICJub2RlIiwgImZvckVhY2giLCAiYXN5bmNUcmF2ZXJzZSIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAidG9TdHJpbmciLCAicmVzdWx0IiwgImxpbmVzIiwgImRlcHRoIiwgInJlcGVhdCIsICJqb2luIiwgIk1vZHVsZVRyZWVTY2FubmVyIiwgIm1vZHVsZU1ldGFkYXRhUmVhZGVyIiwgImNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciIsICJsb2dnZXJTZXJ2aWNlIiwgInNjYW4iLCAiY2xhc3NSZWYiLCAic3RhcnRUaW1lIiwgIkRhdGUiLCAibm93IiwgIm1vZHVsZU1ldGFkYXRhIiwgInJlYWQiLCAibW9kdWxlIiwgIk1vZHVsZSIsICJtZXRhZGF0YSIsICJsb2ciLCAibmFtZSIsICJzY2FuQ29udHJvbGxlcnMiLCAibW9kdWxlVHJlZSIsICJUcmVlIiwgInNjYW5uZWRNb2R1bGVzIiwgIk1hcCIsICJzZXQiLCAiaW1wb3J0ZWRNb2R1bGUiLCAiaW1wb3J0cyIsICJzY2FuTW9kdWxlcyIsICJyb290IiwgInBhcmVudE5vZGUiLCAic2Nhbm5lZE1vZHVsZSIsICJnZXQiLCAiaXNOaWwiLCAidmFsdWUiLCAicmVwZXRpdGl2ZUltcG9ydHMiLCAiYWRkIiwgImNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5IiwgInBhcmVudCIsICJ0cmVlTm9kZSIsICJUcmVlTm9kZSIsICJhZGRDaGlsZCIsICJpbXBvcnRNb2R1bGUiLCAiY29udHJvbGxlcnMiLCAiY29udHJvbGxlck1ldGFkYXRhIiwgImNvbnRyb2xsZXIiLCAiQ29udHJvbGxlciIsICJvd25lciIsICJwdXNoIiwgInBhcmVudE1ldGFkYXRhIiwgImluY2x1ZGVzIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJDaXJjdWxhckRlcGVuZGVuY3lEZXRlY3RlZCIsICJpbmplY3RhYmxlIiwgIkV4ZWN1dGlvbkNvbnRleHRCYXNlIiwgIiR0eXBlIiwgIiRjbGFzc1JlZiIsICIkaGFuZGxlciIsICIkcmVxdWVzdCIsICIkcmVzcG9uc2UiLCAiJG5hbWUiLCAidHlwZSIsICJjbGFzc1JlZiIsICJoYW5kbGVyIiwgInJlcXVlc3QiLCAicmVzcG9uc2UiLCAibmFtZSIsICJpbmplY3RhYmxlIiwgIk1hbmdvUmVxdWVzdEJhc2UiLCAiJGJvZHkiLCAiJHBsYXllciIsICJib2R5IiwgInBsYXllciIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJNYW5nb1Jlc3BvbnNlQmFzZSIsICIkbG9nZ2VyU2VydmljZSIsICIkc2VuZExpc3RlbmVycyIsICJTZXQiLCAiJGVycm9yTGlzdGVuZXJzIiwgIiRpc1NlbnQiLCAic2VuZCIsICJkYXRhIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJSUENSZXNwb25zZUFscmVhZHlTZW50IiwgImZvckVhY2giLCAibGlzdGVuZXIiLCAibWVzc2FnZSIsICJkZXRhaWxzIiwgIiRvblNlbmQiLCAiYWRkIiwgIiRvbkVycm9yIiwgImluamVjdGFibGUiLCAiQmFzZUV2ZW50U2VydmljZSIsICIkbG9jYWxIYW5kbGVycyIsICJTZXQiLCAiJGludGVybmFsSGFuZGxlcnMiLCAiJHJlbW90ZUhhbmRsZXJzIiwgIiRpbnRlcm5hbEV2ZW50TmFtZXMiLCAiJGV2ZW50RW1taXRlciIsICJvbiIsICJldmVudE5hbWUiLCAiY2FsbGJhY2siLCAid3JhcHBlciIsICJhcmdzIiwgImV2ZW50SGFuZGxlciIsICJhZGQiLCAib25jZSIsICJlbWl0IiwgImJvZHkiLCAiJG9uSW50ZXJuYWwiLCAiaGFuZGxlciIsICJoYXMiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSIsICIkb25jZUludGVybmFsIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkJhc2VSUENTZXJ2aWNlIiwgIiRsb2dnZXJTZXJ2aWNlIiwgIiRUSU1FT1VUIiwgIiRsb2NhbEhhbmRsZXJzIiwgIk1hcCIsICJjYWxsIiwgInJwY05hbWUiLCAiYm9keSIsICJvcHRpb25zIiwgInRpbWVvdXQiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgImhhbmRsZXIiLCAiZ2V0IiwgIlJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQiLCAidGltZW91dElkIiwgInNldFRpbWVvdXQiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgInJlc3VsdCIsICJjbGVhclRpbWVvdXQiLCAic3VjY2VzcyIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlN1Y2Nlc3MiLCAiZXJyb3IiLCAiTWFuZ29FcnJvciIsICJtZXNzYWdlIiwgImRldGFpbHMiLCAiUlBDX1JFU1VMVF9VTktOT1dOIiwgIm9uUmVxdWVzdCIsICJoYXMiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzIiwgInJwY0hhbmRsZXIiLCAiZGVzdHJveSIsICJ2YWxpZCIsICJkZWxldGUiLCAic2V0IiwgImluamVjdCIsICJDb250YWluZXIiLCAiaW5qZWN0YWJsZSIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiQXBwIiwgIm1vZHVsZVRyZWVTY2FubmVyIiwgIm1vZHVsZURlcGVuZGVuY3lCaW5kZXIiLCAiYXBwUnVudGltZSIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJwbHVnaW5zIiwgImxvZ2dlclNlcnZpY2UiLCAibW9kdWxlVHJlZSIsICJsb2FkZWQiLCAic3RhcnQiLCAicm9vdE1vZHVsZSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiQXBwQWxyZWFkeUxvYWRlZCIsICJsb2ciLCAicnVuUGx1Z2luTWV0aG9kcyIsICJzY2FuIiwgImJpbmQiLCAiYm9vdCIsICJzdG9wIiwgIkFwcE5vdExvYWRlZCIsICJzaHV0ZG93biIsICJtZXRob2QiLCAiUHJvbWlzZSIsICJhbGwiLCAibWFwIiwgInAiLCAicGx1Z2luIiwgImdldCIsICJyZXNvbHZlIiwgIkFwcEJ1aWxkZXIiLCAiZW52aXJvbWVudCIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAicGx1Z2lucyIsICJnbG9iYWxDb250YWluZXJPcHRpb25zIiwgInVzZUdsb2JhbEd1YXJkcyIsICJndWFyZHMiLCAidmFsaWRhdGVkR3VhcmRzIiwgImd1YXJkIiwgInZhbGlkIiwgInZhbHVlIiwgImVycm9yIiwgInZhbGlkYXRlR3VhcmQiLCAiRXJyb3IiLCAicHVzaCIsICJiaW5kIiwgIkdMT0JBTF9HVUFSRFMiLCAidG9Db25zdGFudFZhbHVlIiwgInVzZUdsb2JhbEludGVyY2VwdG9ycyIsICJpbnRlcmNlcHRvcnMiLCAidmFsaWRhdGVkSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9yIiwgInZhbGlkYXRlSW50ZXJjZXB0b3IiLCAiR0xPQkFMX0lOVEVSQ0VQVE9SUyIsICJ1c2VHbG9iYWxQaXBlcyIsICJwaXBlcyIsICJ2YWxpZGF0ZWRQaXBlcyIsICJwaXBlIiwgInZhbGlkYXRlUGlwZSIsICJHTE9CQUxfUElQRVMiLCAidXNlR2xvYmFsRmlsdGVycyIsICJmaWx0ZXJzIiwgInZhbGlkYXRlZEZJbHRlcnMiLCAiZmlsdGVyIiwgInZhbGlkYXRlRXJyb3JGaWx0ZXIiLCAiR0xPQkFMX0VSUk9SX0ZJTFRFUlMiLCAidXNlUGx1Z2lucyIsICJmb3JFYWNoIiwgInAiLCAidG9TZWxmIiwgImluU2luZ2xldG9uU2NvcGUiLCAiaW50ZXJuYWxQbHVnaW5zIiwgImdldCIsICJQTFVHSU5TIiwgInJlYmluZCIsICJlbmFibGVTaHV0ZG93bkhvb2tzIiwgIkVOQUJMRV9TSFVURE9XTl9IT09LUyIsICJzZXRDb250YWluZXJPcHRpb25zIiwgIm9wdGlvbnMiLCAib25seUdsb2JhbCIsICJDT05UQUlORVJfT1BUSU9OUyIsICJidWlsZCIsICJnbG9iYWxBcHBDb250YWluZXIiLCAiQ29udGFpbmVyIiwgIlJFRkxFQ1RPUl9TRVJWSUNFIiwgIlJlZmxlY3RvclNlcnZpY2UiLCAidG9TZXJ2aWNlIiwgIk1VTFRJUExBWUVSX1NFUlZJQ0UiLCAiQXBwIiwgIkdMT0JBTF9BUFBfQ09OVEFJTkVSIiwgIk1vZHVsZVRyZWVTY2FubmVyIiwgIk1vZHVsZURlcGVuZGVuY3lCaW5kZXIiLCAiQXBwUnVudGltZSIsICJQaXBlbGluZUhhbmRsZXIiLCAiTW9kdWxlIiwgImluVHJhbnNpZW50U2NvcGUiLCAiTW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAiQ29udHJvbGxlciIsICJDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIiLCAiQ29udHJvbGxlckZsb3dIYW5kbGVyIiwgIkNvbnRyb2xsZXJFdmVudEhhbmRsZXIiLCAiQ29udHJvbGxlclJQQ0hhbmRsZXIiLCAiTWFuZ29SZXF1ZXN0QmFzZSIsICJNQU5HT19SRVFVRVNUX0ZBQ1RPUlkiLCAidG9GYWN0b3J5IiwgImNvbnRleHQiLCAiYm9keSIsICJwbGF5ZXIiLCAicmVxdWVzdCIsICJjb250YWluZXIiLCAiJGJvZHkiLCAiJHBsYXllciIsICJNYW5nb1Jlc3BvbnNlQmFzZSIsICJNQU5HT19SRVNQT05TRV9GQUNUT1JZIiwgIkV4ZWN1dGlvbkNvbnRleHRCYXNlIiwgIkVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkiLCAidHlwZSIsICJjbGFzc1JlZiIsICJoYW5kbGVyIiwgInJlc3BvbnNlIiwgIm5hbWUiLCAiZXhlY3V0aW9uQ29udGV4dCIsICIkdHlwZSIsICIkcmVxdWVzdCIsICIkcmVzcG9uc2UiLCAiJGhhbmRsZXIiLCAiJGNsYXNzUmVmIiwgIiRuYW1lIiwgInBsdWdpbiIsICJwbHVnaW5JbnN0YW5jZSIsICJvbkJ1aWxkIiwgImlzQm91bmQiLCAiQ29udGFpbmVyIiwgIkNsaWVudExvZ2dlclNlcnZpY2UiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgImxvZyIsICJhcmdzIiwgIk1BTkdPX0xPR19QUkVGSVgiLCAid2FybiIsICJsb2dXYXJuaW5nIiwgImVycm9yIiwgImxvZ0Vycm9yIiwgImRlYnVnIiwgImxvZ0RlYnVnIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIkNsaWVudFJQQ1NlcnZpY2UiLCAiQmFzZVJQQ1NlcnZpY2UiLCAiJGV2ZW50U2VydmljZSIsICIkc2VydmVySGFuZGxlcnMiLCAiTWFwIiwgIiR3ZWJWaWV3SGFuZGxlcnMiLCAiY2FsbFNlcnZlciIsICJycGNOYW1lIiwgImJvZHkiLCAib3B0aW9ucyIsICJ0aW1lb3V0IiwgIiRUSU1FT1VUIiwgIiRoYW5kbGVDYWxsIiwgIkV2ZW50RGVzdGluYXRpb24iLCAiU2VydmVyIiwgIm9uU2VydmVyUmVxdWVzdCIsICJoYW5kbGVyIiwgImhhcyIsICIkbG9nZ2VyU2VydmljZSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiUlBDSGFuZGxlckFscmVhZHlFeGlzdHMiLCAicnBjSGFuZGxlciIsICJkZXN0cm95IiwgInZhbGlkIiwgImRlbGV0ZSIsICJzZXQiLCAiY2FsbFdlYlZpZXciLCAiaWQiLCAiV2ViVmlldyIsICJvbldlYlZpZXdSZXF1ZXN0IiwgImtleSIsICJkZXN0aW5hdGlvbiIsICJ3ZWJWaWV3SWQiLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgImNhbGxJZCIsICJnZW5lcmF0ZVJhbmRvbUlkIiwgInRpbWVvdXRJZCIsICJvbmNlSGFuZGxlIiwgInJlc3VsdERhdGEiLCAiY2xlYXJUaW1lb3V0IiwgImV2ZW50SGFuZGxlciIsICJvbmNlV2ViVmlldyIsICJvbmNlU2VydmVyIiwgInBheWxvYWQiLCAic291cmNlIiwgIkNsaWVudCIsICJlbWl0V2ViVmlldyIsICJlbWl0U2VydmVyIiwgInNldFRpbWVvdXQiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIldlYlZpZXdMaXN0U2VydmljZSIsICIkbG9nZ2VyU2VydmljZSIsICIkd2ViVmlld3MiLCAiTWFwIiwgInNldCIsICJpZCIsICJ3ZWJWaWV3IiwgImdldCIsICJ0cnlHZXQiLCAiaXNOaWwiLCAidmFsaWQiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIldlYlZpZXdOb3RGb3VuZCIsICJkZWxldGUiLCAiZGVzdHJveSIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJDbGllbnRXZWJWaWV3U2VydmljZSIsICIkbG9nZ2VyU2VydmljZSIsICIkd2ViVmlld0xpc3RTZXJ2aWNlIiwgIm11bHRpcGxheWVyIiwgIiRjcmVhdGVMaXN0ZW5lcnMiLCAiY3JlYXRlIiwgImlkIiwgIm9wdGlvbnMiLCAiaXNTdHJpbmciLCAiaXNOdW1iZXIiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIldlYlZpZXdJZE11c3RCZVN0cmluZ09yTnVtYmVyIiwgIndlYlZpZXciLCAiV2ViVmlldyIsICJzZXQiLCAiZm9yRWFjaCIsICJsaXN0ZW5lciIsICJnZXQiLCAidHJ5R2V0IiwgImRlc3Ryb3kiLCAiZGVsZXRlIiwgIiRvbkNyZWF0ZSIsICJwdXNoIiwgIlNlcnZpY2VCaW5kZXJQbHVnaW4iLCAiaW50ZXJuYWxBcHBDb250YWluZXIiLCAiZ2xvYmFsQXBwQ29udGFpbmVyIiwgIm9uQnVpbGQiLCAidGltZSIsICJEYXRlIiwgIm5vdyIsICJiaW5kIiwgIkxPR0dFUl9TRVJWSUNFIiwgInRvIiwgIkNsaWVudExvZ2dlclNlcnZpY2UiLCAiaW5TaW5nbGV0b25TY29wZSIsICJFVkVOVF9TRVJWSUNFIiwgIkNsaWVudEV2ZW50U2VydmljZSIsICJSUENfU0VSVklDRSIsICJDbGllbnRSUENTZXJ2aWNlIiwgIldFQlZJRVdfU0VSVklDRSIsICJDbGllbnRXZWJWaWV3U2VydmljZSIsICJXRUJWSUVXX0xJU1RfU0VSVklDRSIsICJXZWJWaWV3TGlzdFNlcnZpY2UiLCAidG9Db25zdGFudFZhbHVlIiwgImdldCIsICJsb2dnZXJTZXJ2aWNlIiwgImxvZyIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiV2ViVmlld1BsdWdpbiIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJ3ZWJWaWV3U2VydmljZSIsICJsb2dnZXJTZXJ2aWNlIiwgImJlZm9yZUxvYWQiLCAidGltZSIsICJEYXRlIiwgIm5vdyIsICJhZGRXZWJWaWV3cyIsICJpc0JvdW5kIiwgIkFERF9XRUJWSUVXIiwgImdldCIsICJsZW5ndGgiLCAiZm9yRWFjaCIsICJ3ZWJWaWV3IiwgImNyZWF0ZSIsICJpZCIsICJvcHRpb25zIiwgImxvZyIsICJSYWdlTVBDbGllbnRTY3JpcHRFdmVudCIsICJldmVudE5hbWUiLCAibGlzdGVuZXIiLCAiZGVzdHJveSIsICJtcCIsICJldmVudHMiLCAicmVtb3ZlIiwgIkNsaWVudFJhZ2VNUEV2ZW50RW1taXRlciIsICJtYXBFdmVudHNTaGFyZWQiLCAibWFwRXZlbnRzIiwgImdldEV2ZW50TmFtZSIsICJldmVudE5hbWUiLCAiZW1pdCIsICJhcmdzIiwgIm1wIiwgImV2ZW50cyIsICJjYWxsIiwgIm9uIiwgImxpc3RlbmVyIiwgIm1hcHBlZEV2ZW50TmFtZSIsICJhZGQiLCAiUmFnZU1QQ2xpZW50U2NyaXB0RXZlbnQiLCAib25jZSIsICJvbmNlV3JhcHBlciIsICJyZW1vdmUiLCAib2ZmIiwgImVtaXRTZXJ2ZXIiLCAic2VyaWFsaXplZEFyZ3MiLCAibWFwIiwgImFyZyIsICJKU09OIiwgInN0cmluZ2lmeSIsICJjYWxsUmVtb3RlIiwgIm9uU2VydmVyIiwgIm9uY2VTZXJ2ZXIiLCAib2ZmU2VydmVyIiwgIlJhZ2VNUFdlYlZpZXciLCAiZXZlbnRMaXN0ZW5lcnMiLCAiTWFwIiwgIiRyYXciLCAidmFsaWQiLCAidW5kZWZpbmVkIiwgImRlc3Ryb3kiLCAidXJsIiwgInZhbHVlIiwgInZpc2libGUiLCAiYWN0aXZlIiwgImVtaXQiLCAiZXZlbnROYW1lIiwgImFyZ3MiLCAiY2FsbCIsICJlbWl0UmF3IiwgInJlbG9hZCIsICJpZ25vcmVDYWNoZSIsICJvbiIsICJsaXN0ZW5lciIsICJoYXMiLCAic2V0IiwgIlNldCIsICJnZXQiLCAiYWRkIiwgImxpc3RlbmVycyIsICJzaXplIiwgIm1wIiwgImV2ZW50cyIsICJsIiwgIm9uY2UiLCAib25jZVdyYXBwZXIiLCAib2ZmIiwgImRlbGV0ZSIsICJleGVjdXRlIiwgImNvZGUiLCAibWFya0FzQ2hhdCIsICJyYXciLCAiUmFnZU1QV2ViVmlld01hbmFnZXIiLCAid2ViVmlld3MiLCAiTWFwIiwgImlkQ291bnRlciIsICJjcmVhdGUiLCAib3B0aW9ucyIsICJyYXciLCAibXAiLCAiY29uc29sZSIsICJsb2dXYXJuaW5nIiwgImJyb3dzZXJzIiwgIm5ldyIsICJ1cmwiLCAidmlzaWJsZSIsICJ1bmRlZmluZWQiLCAiYWN0aXZlIiwgIndlYlZpZXciLCAiUmFnZU1QV2ViVmlldyIsICJpZCIsICJzZXQiLCAiZ2V0QnlJRCIsICJjYWNoZWQiLCAiZ2V0IiwgImJyb3dzZXIiLCAiYXQiLCAiQ2xpZW50UmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIlJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJFdmVudHMiLCAiV2ViVmlldyIsICJDbGllbnRSYWdlTVBFdmVudEVtbWl0ZXIiLCAiUmFnZU1QV2ViVmlld01hbmFnZXIiLCAic2V0QXVkaW9GYWN0b3J5IiwgIl9mYWN0b3J5IiwgInNldEF1ZGlvRmlsdGVyRmFjdG9yeSIsICJzZXRBdWRpb091dHB1dEF0dGFjaGVkRmFjdG9yeSIsICJzZXRBdWRpb091dHB1dEZyb250ZW5kRmFjdG9yeSIsICJzZXRBdWRpb091dHB1dFdvcmxkRmFjdG9yeSIsICJzZXRCbGlwRmFjdG9yeSIsICJmYWN0b3J5IiwgIm1wIiwgIkJsaXAiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJwcm90b3R5cGUiLCAic2V0TWFya2VyRmFjdG9yeSIsICJNYXJrZXIiLCAic2V0Q29sc2hhcGVGYWN0b3J5IiwgIkNvbHNoYXBlIiwgInNldENoZWNrcG9pbnRGYWN0b3J5IiwgIkNoZWNrcG9pbnQiLCAic2V0T2JqZWN0RmFjdG9yeSIsICJzZXRMb2NhbE9iamVjdEZhY3RvcnkiLCAic2V0UGVkRmFjdG9yeSIsICJQZWQiLCAic2V0TG9jYWxQZWRGYWN0b3J5IiwgInNldExvY2FsUGxheWVyRmFjdG9yeSIsICJzZXRMb2NhbFZlaGljbGVGYWN0b3J5IiwgInNldFBsYXllckZhY3RvcnkiLCAiUGxheWVyIiwgInNldFJtbERvY3VtZW50RmFjdG9yeSIsICJzZXRUZXh0TGFiZWxGYWN0b3J5IiwgIlRleHRMYWJlbCIsICJzZXRWZWhpY2xlRmFjdG9yeSIsICJWZWhpY2xlIiwgInNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkiLCAic2V0VmlydHVhbEVudGl0eUZhY3RvcnkiLCAic2V0V2ViU29ja2V0Q2xpZW50RmFjdG9yeSIsICJzZXRXZWJWaWV3RmFjdG9yeSIsICJCcm93c2VyIiwgIlVzZUZpbHRlcnMiLCAiZmlsdGVycyIsICIkVXNlRmlsdGVycyIsICJPblNjcmlwdFJQQyIsICJPbkludGVybmFsIiwgIklOVEVSTkFMX0VWRU5UUyIsICJTQ1JJUFRfUlBDIiwgIk9uY2VTY3JpcHRSUEMiLCAiT25jZUludGVybmFsIiwgIk9uU2NyaXB0UlBDQW5zd2VyIiwgIlNDUklQVF9SUENfQU5TV0VSIiwgIk9uY2VTY3JpcHRSUENBbnN3ZXIiLCAiT25LZXlCb2FyZEV2ZW50IiwgIktFWUJPQVJEX0VWRU5UIiwgIk9uY2VLZXlCb2FyZEV2ZW50IiwgIk9uS2V5VXAiLCAiS0VZX1VQIiwgIk9uY2VLZXlVcCIsICJPbktleURvd24iLCAiS0VZX0RPV04iLCAiT25jZUtleURvd24iLCAiT25XZWJWaWV3RXZlbnQiLCAiV0VCX1ZJRVdfRVZFTlQiLCAiT25jZVdlYlZpZXdFdmVudCIsICJPbldlYlNvY2tldEV2ZW50IiwgIldFQl9TT0NLRVRfRVZFTlQiLCAiT25jZVdlYlNvY2tldEV2ZW50IiwgIk9uQXVkaW9FdmVudCIsICJBVURJT19FVkVOVCIsICJPbmNlQXVkaW9FdmVudCIsICJPblJtbHVpRXZlbnQiLCAiUk1MVUlfRVZFTlQiLCAiT25jZVJtbHVpRXZlbnQiLCAiT25XaW5kb3dGb2N1c0NoYW5nZSIsICJXSU5ET1dfRk9DVVNfQ0hBTkdFIiwgIk9uY2VXaW5kb3dGb2N1c0NoYW5nZSIsICJPbldpbmRvd1Jlc29sdXRpb25DaGFuZ2UiLCAiV0lORE9XX1JFU09MVVRJT05fQ0hBTkdFIiwgIk9uY2VXaW5kb3dSZXNvbHV0aW9uQ2hhbmdlIiwgIk9uQ29ubmVjdGlvbkNvbXBsZXRlIiwgIkNPTk5FQ1RJT05fQ09NUExFVEUiLCAiT25jZUNvbm5lY3Rpb25Db21wbGV0ZSIsICJPbkRpc2Nvbm5lY3QiLCAiRElTQ09OTkVDVCIsICJPbmNlRGlzY29ubmVjdCIsICJPblNwYXduZWQiLCAiU1BBV05FRCIsICJPbmNlU3Bhd25lZCIsICJPbkdhbWVFbnRpdHlDcmVhdGUiLCAiR0FNRV9FTlRJVFlfQ1JFQVRFIiwgIk9uY2VHYW1lRW50aXR5Q3JlYXRlIiwgIk9uR2FtZUVudGl0eURlc3Ryb3kiLCAiR0FNRV9FTlRJVFlfREVTVFJPWSIsICJPbmNlR2FtZUVudGl0eURlc3Ryb3kiLCAiT25FbnRpdHlIaXRFbnRpdHkiLCAiRU5USVRZX0hJVF9FTlRJVFkiLCAiT25jZUVudGl0eUhpdEVudGl0eSIsICJPblRhc2tDaGFuZ2UiLCAiVEFTS19DSEFOR0UiLCAiT25jZVRhc2tDaGFuZ2UiLCAiT25QbGF5ZXJXZWFwb25TaG9vdCIsICJQTEFZRVJfV0VBUE9OX1NIT09UIiwgIk9uY2VQbGF5ZXJXZWFwb25TaG9vdCIsICJPblBsYXllckJ1bGxldEhpdCIsICJQTEFZRVJfQlVMTEVUX0hJVCIsICJPbmNlUGxheWVyQnVsbGV0SGl0IiwgIk9uUGxheWVyV2VhcG9uQ2hhbmdlIiwgIlBMQVlFUl9XRUFQT05fQ0hBTkdFIiwgIk9uY2VQbGF5ZXJXZWFwb25DaGFuZ2UiLCAiT25QbGF5ZXJTdGFydFZlaGljbGVFbnRlciIsICJQTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUiIsICJPbmNlUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIiLCAiT25QbGF5ZXJTdGFydFZlaGljbGVMZWF2ZSIsICJQTEFZRVJfU1RBUlRfVkVISUNMRV9MRUFWRSIsICJPbmNlUGxheWVyU3RhcnRWZWhpY2xlTGVhdmUiLCAiT25QbGF5ZXJWZWhpY2xlRW50ZXJlZCIsICJQTEFZRVJfVkVISUNMRV9FTlRFUkVEIiwgIk9uY2VQbGF5ZXJWZWhpY2xlRW50ZXJlZCIsICJPblBsYXllclZlaGljbGVMZWZ0IiwgIlBMQVlFUl9WRUhJQ0xFX0xFRlQiLCAiT25jZVBsYXllclZlaGljbGVMZWZ0IiwgIk9uUGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UiLCAiUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UiLCAiT25jZVBsYXllclZlaGljbGVTZWF0Q2hhbmdlIiwgIk9uVm9pY2VDb25uZWN0aW9uIiwgIlZPSUNFX0NPTk5FQ1RJT04iLCAiT25jZVZvaWNlQ29ubmVjdGlvbiIsICJPblBsYXllclN0YXJ0VGFsa2luZyIsICJQTEFZRVJfU1RBUlRfVEFMS0lORyIsICJPbmNlUGxheWVyU3RhcnRUYWxraW5nIiwgIk9uUGxheWVyU3RvcFRhbGtpbmciLCAiUExBWUVSX1NUT1BfVEFMS0lORyIsICJPbmNlUGxheWVyU3RvcFRhbGtpbmciLCAiT25Xb3JsZE9iamVjdFBvc2l0aW9uQ2hhbmdlIiwgIldPUkxEX09CSkVDVF9QT1NJVElPTl9DSEFOR0UiLCAiT25jZVdvcmxkT2JqZWN0UG9zaXRpb25DaGFuZ2UiLCAiT25Xb3JsZE9iamVjdFN0cmVhbUluIiwgIldPUkxEX09CSkVDVF9TVFJFQU1fSU4iLCAiT25jZVdvcmxkT2JqZWN0U3RyZWFtSW4iLCAiT25Xb3JsZE9iamVjdFN0cmVhbU91dCIsICJXT1JMRF9PQkpFQ1RfU1RSRUFNX09VVCIsICJPbmNlV29ybGRPYmplY3RTdHJlYW1PdXQiLCAiT25FdmVudCIsICJFVkVOVCIsICJPbmNlRXZlbnQiLCAiT25CYXNlT2JqZWN0Q3JlYXRlIiwgIkJBU0VfT0JKRUNUX0NSRUFURSIsICJPbmNlQmFzZU9iamVjdENyZWF0ZSIsICJPbkJhc2VPYmplY3RSZW1vdmUiLCAiQkFTRV9PQkpFQ1RfUkVNT1ZFIiwgIk9uY2VCYXNlT2JqZWN0UmVtb3ZlIiwgIk9uTmV0T3duZXJDaGFuZ2UiLCAiTkVUX09XTkVSX0NIQU5HRSIsICJPbmNlTmV0T3duZXJDaGFuZ2UiLCAiT25XZWFwb25EYW1hZ2UiLCAiV0VBUE9OX0RBTUFHRSIsICJPbmNlV2VhcG9uRGFtYWdlIiwgIk9uTWV0YUNoYW5nZSIsICJNRVRBX0NIQU5HRSIsICJPbmNlTWV0YUNoYW5nZSIsICJPbkxvY2FsTWV0YUNoYW5nZSIsICJMT0NBTF9NRVRBX0NIQU5HRSIsICJPbmNlTG9jYWxNZXRhQ2hhbmdlIiwgIk9uU3luY2VkTWV0YUNoYW5nZSIsICJTWU5DRURfTUVUQV9DSEFOR0UiLCAiT25jZVN5bmNlZE1ldGFDaGFuZ2UiLCAiT25TdHJlYW1TeW5jZWRNZXRhQ2hhbmdlIiwgIlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UiLCAiT25jZVN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UiLCAiT25HbG9iYWxNZXRhQ2hhbmdlIiwgIkdMT0JBTF9NRVRBX0NIQU5HRSIsICJPbmNlR2xvYmFsTWV0YUNoYW5nZSIsICJPbkdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UiLCAiR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJPbmNlR2xvYmFsU3luY2VkTWV0YUNoYW5nZSIsICJPbkVudGl0eUNvbFNoYXBlRW50ZXIiLCAiRU5USVRZX0NPTF9TSEFQRV9FTlRFUiIsICJPbmNlRW50aXR5Q29sU2hhcGVFbnRlciIsICJPbkVudGl0eUNvbFNoYXBlTGVhdmUiLCAiRU5USVRZX0NPTF9TSEFQRV9MRUFWRSIsICJPbmNlRW50aXR5Q29sU2hhcGVMZWF2ZSIsICJPbkVudGl0eUNoZWNrcG9pbnRFbnRlciIsICJFTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUiIsICJPbmNlRW50aXR5Q2hlY2twb2ludEVudGVyIiwgIk9uRW50aXR5Q2hlY2twb2ludExlYXZlIiwgIkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFIiwgIk9uY2VFbnRpdHlDaGVja3BvaW50TGVhdmUiLCAiT25Db2xTaGFwZUV2ZW50IiwgIkNPTF9TSEFQRV9FVkVOVCIsICJPbmNlQ29sU2hhcGVFdmVudCIsICJPbkNvbnNvbGVDb21tYW5kIiwgIkNPTlNPTEVfQ09NTUFORCIsICJPbmNlQ29uc29sZUNvbW1hbmQiLCAiT25FcnJvciIsICJFUlJPUiIsICJPbmNlRXJyb3IiLCAiT25Mb2NhbFNjcmlwdEV2ZW50IiwgIkxPQ0FMX1NDUklQVF9FVkVOVCIsICJPbmNlTG9jYWxTY3JpcHRFdmVudCIsICJPblJlbW90ZVNjcmlwdEV2ZW50IiwgIlJFTU9URV9TQ1JJUFRfRVZFTlQiLCAiT25jZVJlbW90ZVNjcmlwdEV2ZW50IiwgIk9uUmVzb3VyY2VTdGFydCIsICJSRVNPVVJDRV9TVEFSVCIsICJPbmNlUmVzb3VyY2VTdGFydCIsICJPblJlc291cmNlU3RvcCIsICJSRVNPVVJDRV9TVE9QIiwgIk9uY2VSZXNvdXJjZVN0b3AiLCAiT25SZXNvdXJjZUVycm9yIiwgIlJFU09VUkNFX0VSUk9SIiwgIk9uY2VSZXNvdXJjZUVycm9yIiwgIk9uU2VydmVyIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbldlYlZpZXciLCAiaWQiLCAiZXZlbnROYW1lIiwgIiRPbldlYlZpZXciLCAiT24iLCAiZXZlbnROYW1lIiwgIiRPbiIsICJPbmNlU2VydmVyIiwgImV2ZW50TmFtZSIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJPbmNlV2ViVmlldyIsICJpZCIsICJldmVudE5hbWUiLCAiJE9uY2VXZWJWaWV3IiwgIk9uY2UiLCAiZXZlbnROYW1lIiwgIiRPbmNlIiwgIlVzZUd1YXJkcyIsICJndWFyZHMiLCAiJFVzZUd1YXJkcyIsICJVc2VJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3JzIiwgIiRVc2VJbnRlcmNlcHRvcnMiLCAiT25SZXF1ZXN0IiwgInJwY05hbWUiLCAiJE9uUmVxdWVzdCIsICJPblNlcnZlclJlcXVlc3QiLCAicnBjTmFtZSIsICJjcmVhdGVSUENEZWNvcmF0b3IiLCAiT25XZWJWaWV3UmVxdWVzdCIsICJpZCIsICJycGNOYW1lIiwgIiRPbldlYlZpZXdSZXF1ZXN0IiwgIm11bHRpcGxheWVyU2VydmljZSIsICJDbGllbnRSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UiLCAiQ2xpZW50QXBwQnVpbGRlciIsICJBcHBCdWlsZGVyIiwgImFkZFdlYlZpZXciLCAiaWQiLCAib3B0aW9ucyIsICJhZGRXZWJWaWV3cyIsICJpbnRlcm5hbEFwcENvbnRhaW5lciIsICJpc0JvdW5kIiwgIkFERF9XRUJWSUVXIiwgImdldCIsICJyZWJpbmQiLCAidG9Db25zdGFudFZhbHVlIiwgImJpbmQiLCAic2V0QXVkaW9GYWN0b3J5IiwgImZhY3RvcnkiLCAic2V0QXVkaW9GaWx0ZXJGYWN0b3J5IiwgInNldEF1ZGlvT3V0cHV0QXR0YWNoZWRGYWN0b3J5IiwgInNldEF1ZGlvT3V0cHV0RnJvbnRlbmRGYWN0b3J5IiwgInNldEF1ZGlvT3V0cHV0V29ybGRGYWN0b3J5IiwgInNldEJsaXBGYWN0b3J5IiwgInNldE1hcmtlckZhY3RvcnkiLCAic2V0Q29sU2hhcGVGYWN0b3J5IiwgInNldENvbHNoYXBlRmFjdG9yeSIsICJzZXRDaGVja3BvaW50RmFjdG9yeSIsICJzZXRPYmplY3RGYWN0b3J5IiwgInNldExvY2FsT2JqZWN0RmFjdG9yeSIsICJzZXRQZWRGYWN0b3J5IiwgInNldExvY2FsUGVkRmFjdG9yeSIsICJzZXRMb2NhbFBsYXllckZhY3RvcnkiLCAic2V0TG9jYWxWZWhpY2xlRmFjdG9yeSIsICJzZXRQbGF5ZXJGYWN0b3J5IiwgInNldFJtbERvY3VtZW50RmFjdG9yeSIsICJzZXRUZXh0TGFiZWxGYWN0b3J5IiwgInNldFZlaGljbGVGYWN0b3J5IiwgInNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkiLCAic2V0VmlydHVhbEVudGl0eUZhY3RvcnkiLCAic2V0V2ViU29ja2V0Q2xpZW50RmFjdG9yeSIsICJzZXRXZWJWaWV3RmFjdG9yeSIsICJjcmVhdGVBcHBCdWlsZGVyIiwgIiRjcmVhdGVBcHBCdWlsZGVyIiwgImVudmlyb21lbnQiLCAiQXBwRW52aXJvbWVudCIsICJDbGllbnQiLCAicGx1Z2lucyIsICJTZXJ2aWNlQmluZGVyUGx1Z2luIiwgIkV2ZW50TWVkaWF0b3JQbHVnaW4iLCAiUlBDUGx1Z2luIiwgIldlYlZpZXdQbHVnaW4iLCAiYXBwQnVpbGRlckluaGVyaXQiXQp9Cg==