@aerokit/sdk 12.78.0 → 12.80.0

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 (84) hide show
  1. package/dist/cjs/bpm/process.js +4 -1
  2. package/dist/cjs/bpm/tasks.js +3 -1
  3. package/dist/cjs/bpm/tracer.js +3 -1
  4. package/dist/cjs/cms/cmis.js +105 -177
  5. package/dist/cjs/db/database.js +5 -1
  6. package/dist/cjs/db/query.js +19 -1
  7. package/dist/cjs/db/repository.js +2 -1
  8. package/dist/cjs/db/sql.js +5 -2
  9. package/dist/cjs/etcd/client.js +4 -1
  10. package/dist/cjs/http/errors/ForbiddenError.js +9 -9
  11. package/dist/cjs/http/errors/ValidationError.js +9 -9
  12. package/dist/cjs/http/request.js +2 -1
  13. package/dist/cjs/http/response.js +102 -188
  14. package/dist/cjs/http/rs/resource-http-controller.js +4 -1
  15. package/dist/cjs/http/rs/resource-mappings.js +6 -3
  16. package/dist/cjs/http/rs/resource-method.js +10 -1
  17. package/dist/cjs/http/rs/resource.js +11 -1
  18. package/dist/cjs/http/upload.js +3 -1
  19. package/dist/cjs/io/files.js +5 -7
  20. package/dist/cjs/io/streams.js +5 -1
  21. package/dist/cjs/io/zip.js +4 -1
  22. package/dist/cjs/job/scheduler.js +4 -1
  23. package/dist/cjs/kafka/consumer.js +3 -2
  24. package/dist/cjs/kafka/producer.js +3 -1
  25. package/dist/cjs/log/logging.js +2 -1
  26. package/dist/cjs/mail/client.js +2 -1
  27. package/dist/cjs/messaging/consumer.js +3 -1
  28. package/dist/cjs/messaging/producer.js +3 -1
  29. package/dist/cjs/mongodb/client.js +26 -1
  30. package/dist/cjs/mongodb/dao.js +3 -1
  31. package/dist/cjs/net/soap.js +15 -1
  32. package/dist/cjs/net/websockets.js +5 -1
  33. package/dist/cjs/platform/engines.js +2 -1
  34. package/dist/cjs/platform/os.js +7 -9
  35. package/dist/cjs/platform/problems.js +7 -13
  36. package/dist/cjs/platform/registry.js +4 -1
  37. package/dist/cjs/platform/repository.js +4 -1
  38. package/dist/cjs/platform/workspace.js +8 -1
  39. package/dist/cjs/redis/client.js +2 -1
  40. package/dist/cjs/security/oauth.js +2 -1
  41. package/dist/cjs/template/engines.js +6 -1
  42. package/dist/dts/db/query.d.ts +10 -0
  43. package/dist/esm/bpm/process.mjs +4 -1
  44. package/dist/esm/bpm/tasks.mjs +3 -1
  45. package/dist/esm/bpm/tracer.mjs +3 -1
  46. package/dist/esm/cms/cmis.mjs +105 -177
  47. package/dist/esm/db/database.mjs +5 -1
  48. package/dist/esm/db/query.mjs +19 -1
  49. package/dist/esm/db/repository.mjs +2 -1
  50. package/dist/esm/db/sql.mjs +5 -2
  51. package/dist/esm/etcd/client.mjs +4 -1
  52. package/dist/esm/http/errors/ForbiddenError.mjs +9 -9
  53. package/dist/esm/http/errors/ValidationError.mjs +9 -9
  54. package/dist/esm/http/request.mjs +2 -1
  55. package/dist/esm/http/response.mjs +102 -188
  56. package/dist/esm/http/rs/resource-http-controller.mjs +4 -1
  57. package/dist/esm/http/rs/resource-mappings.mjs +6 -3
  58. package/dist/esm/http/rs/resource-method.mjs +10 -1
  59. package/dist/esm/http/rs/resource.mjs +11 -1
  60. package/dist/esm/http/upload.mjs +3 -1
  61. package/dist/esm/io/files.mjs +5 -7
  62. package/dist/esm/io/streams.mjs +5 -1
  63. package/dist/esm/io/zip.mjs +4 -1
  64. package/dist/esm/job/scheduler.mjs +4 -1
  65. package/dist/esm/kafka/consumer.mjs +3 -2
  66. package/dist/esm/kafka/producer.mjs +3 -1
  67. package/dist/esm/log/logging.mjs +2 -1
  68. package/dist/esm/mail/client.mjs +2 -1
  69. package/dist/esm/messaging/consumer.mjs +3 -1
  70. package/dist/esm/messaging/producer.mjs +3 -1
  71. package/dist/esm/mongodb/client.mjs +26 -1
  72. package/dist/esm/mongodb/dao.mjs +3 -1
  73. package/dist/esm/net/soap.mjs +15 -1
  74. package/dist/esm/net/websockets.mjs +5 -1
  75. package/dist/esm/platform/engines.mjs +2 -1
  76. package/dist/esm/platform/os.mjs +7 -9
  77. package/dist/esm/platform/problems.mjs +7 -13
  78. package/dist/esm/platform/registry.mjs +4 -1
  79. package/dist/esm/platform/repository.mjs +4 -1
  80. package/dist/esm/platform/workspace.mjs +8 -1
  81. package/dist/esm/redis/client.mjs +2 -1
  82. package/dist/esm/security/oauth.mjs +2 -1
  83. package/dist/esm/template/engines.mjs +6 -1
  84. package/package.json +1 -1
@@ -1,6 +1,8 @@
1
1
  import { Process } from "@aerokit/sdk/bpm";
2
2
  import { Logging } from "@aerokit/sdk/log";
3
3
  class Tracer {
4
+ startTime;
5
+ logger;
4
6
  constructor() {
5
7
  this.startTime = /* @__PURE__ */ new Date();
6
8
  this.logger = Logging.getLogger("bpm.tracer");
@@ -40,4 +42,4 @@ class Tracer {
40
42
  export {
41
43
  Tracer
42
44
  };
43
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2JwbS90cmFjZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFByb2Nlc3MgfSBmcm9tICdAYWVyb2tpdC9zZGsvYnBtJztcbmltcG9ydCB7IExvZ2dpbmcsIExvZ2dlciB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFjZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhcnRUaW1lOiBEYXRlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmxvZ2dlciA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdicG0udHJhY2VyJyk7XG4gICAgICAgIHRoaXMubG9nKCdTdGFydGVkJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgJHt0aGlzLmdldElkKCl9IC0gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGAke3RoaXMuZ2V0SWQoKX0gLSAke21lc3NhZ2UgPz8gJyd9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgJHt0aGlzLmdldElkKCl9IC0gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wbGV0ZShtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5jZWlsKChlbmRUaW1lLmdldFRpbWUoKSAtIHRoaXMuc3RhcnRUaW1lLmdldFRpbWUoKSkgLyAxMDAwKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgJHt0aGlzLmdldElkKCl9IC0gQ29tcGxldGVkIGFmdGVyICR7c2Vjb25kc30gc2Vjb25kcy4gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBmYWlsKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLmNlaWwoKGVuZFRpbWUuZ2V0VGltZSgpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgJHt0aGlzLmdldElkKCl9IC0gRmFpbGVkIGFmdGVyICR7c2Vjb25kc30gc2Vjb25kcy4gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IFByb2Nlc3MuZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0RlZmluaXRpb25JZCA9IGV4ZWN1dGlvbkNvbnRleHQuZ2V0UHJvY2Vzc0RlZmluaXRpb25JZCgpO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0luc3RhbmNlSWQgPSBleGVjdXRpb25Db250ZXh0LmdldFByb2Nlc3NJbnN0YW5jZUlkKCk7XG4gICAgICAgICAgICBjb25zdCBidXNpbmVzc0tleSA9IGV4ZWN1dGlvbkNvbnRleHQuZ2V0UHJvY2Vzc0luc3RhbmNlQnVzaW5lc3NLZXkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5SWQgPSBleGVjdXRpb25Db250ZXh0LmdldEN1cnJlbnRBY3Rpdml0eUlkKCk7XG4gICAgICAgICAgICByZXR1cm4gYFske3Byb2Nlc3NEZWZpbml0aW9uSWR9XVske3Byb2Nlc3NJbnN0YW5jZUlkfV1bJHtidXNpbmVzc0tleX1dWyR7YWN0aXZpdHlJZH1dYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1tuby1leGVjdXRpb24tY29udGV4dF0nO1xuICAgIH1cbn0iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGVBQWU7QUFDeEIsU0FBUyxlQUF1QjtBQUV6QixNQUFNLE9BQU87QUFBQSxFQUloQixjQUFjO0FBQ1YsU0FBSyxZQUFZLG9CQUFJLEtBQUs7QUFDMUIsU0FBSyxTQUFTLFFBQVEsVUFBVSxZQUFZO0FBQzVDLFNBQUssSUFBSSxTQUFTO0FBQUEsRUFDdEI7QUFBQSxFQUVPLElBQUksU0FBaUI7QUFDeEIsU0FBSyxPQUFPLEtBQUssR0FBRyxLQUFLLE1BQU0sQ0FBQyxNQUFNLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDekQ7QUFBQSxFQUVPLEtBQUssU0FBaUI7QUFDekIsU0FBSyxPQUFPLEtBQUssR0FBRyxLQUFLLE1BQU0sQ0FBQyxNQUFNLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDekQ7QUFBQSxFQUVPLE1BQU0sU0FBaUI7QUFDMUIsU0FBSyxPQUFPLE1BQU0sR0FBRyxLQUFLLE1BQU0sQ0FBQyxNQUFNLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDMUQ7QUFBQSxFQUVPLFNBQVMsU0FBa0I7QUFDOUIsVUFBTSxVQUFVLG9CQUFJLEtBQUs7QUFDekIsVUFBTSxVQUFVLEtBQUssTUFBTSxRQUFRLFFBQVEsSUFBSSxLQUFLLFVBQVUsUUFBUSxLQUFLLEdBQUk7QUFDL0UsU0FBSyxPQUFPLEtBQUssR0FBRyxLQUFLLE1BQU0sQ0FBQyxzQkFBc0IsT0FBTyxhQUFhLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDN0Y7QUFBQSxFQUVPLEtBQUssU0FBa0I7QUFDMUIsVUFBTSxVQUFVLG9CQUFJLEtBQUs7QUFDekIsVUFBTSxVQUFVLEtBQUssTUFBTSxRQUFRLFFBQVEsSUFBSSxLQUFLLFVBQVUsUUFBUSxLQUFLLEdBQUk7QUFDL0UsU0FBSyxPQUFPLE1BQU0sR0FBRyxLQUFLLE1BQU0sQ0FBQyxtQkFBbUIsT0FBTyxhQUFhLFdBQVcsRUFBRSxFQUFFO0FBQUEsRUFDM0Y7QUFBQSxFQUVRLFFBQWdCO0FBQ3BCLFVBQU0sbUJBQW1CLFFBQVEsb0JBQW9CO0FBQ3JELFFBQUksa0JBQWtCO0FBQ2xCLFlBQU0sc0JBQXNCLGlCQUFpQix1QkFBdUI7QUFDcEUsWUFBTSxvQkFBb0IsaUJBQWlCLHFCQUFxQjtBQUNoRSxZQUFNLGNBQWMsaUJBQWlCLDhCQUE4QjtBQUNuRSxZQUFNLGFBQWEsaUJBQWlCLHFCQUFxQjtBQUN6RCxhQUFPLElBQUksbUJBQW1CLEtBQUssaUJBQWlCLEtBQUssV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUN2RjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQ0o7IiwKICAibmFtZXMiOiBbXQp9Cg==
45
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2JwbS90cmFjZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFByb2Nlc3MgfSBmcm9tICdAYWVyb2tpdC9zZGsvYnBtJztcbmltcG9ydCB7IExvZ2dpbmcsIExvZ2dlciB9IGZyb20gXCJAYWVyb2tpdC9zZGsvbG9nXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFjZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhcnRUaW1lOiBEYXRlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmxvZ2dlciA9IExvZ2dpbmcuZ2V0TG9nZ2VyKCdicG0udHJhY2VyJyk7XG4gICAgICAgIHRoaXMubG9nKCdTdGFydGVkJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgJHt0aGlzLmdldElkKCl9IC0gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGAke3RoaXMuZ2V0SWQoKX0gLSAke21lc3NhZ2UgPz8gJyd9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgJHt0aGlzLmdldElkKCl9IC0gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wbGV0ZShtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5jZWlsKChlbmRUaW1lLmdldFRpbWUoKSAtIHRoaXMuc3RhcnRUaW1lLmdldFRpbWUoKSkgLyAxMDAwKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgJHt0aGlzLmdldElkKCl9IC0gQ29tcGxldGVkIGFmdGVyICR7c2Vjb25kc30gc2Vjb25kcy4gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBmYWlsKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLmNlaWwoKGVuZFRpbWUuZ2V0VGltZSgpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgJHt0aGlzLmdldElkKCl9IC0gRmFpbGVkIGFmdGVyICR7c2Vjb25kc30gc2Vjb25kcy4gJHttZXNzYWdlID8/ICcnfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IFByb2Nlc3MuZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0RlZmluaXRpb25JZCA9IGV4ZWN1dGlvbkNvbnRleHQuZ2V0UHJvY2Vzc0RlZmluaXRpb25JZCgpO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc0luc3RhbmNlSWQgPSBleGVjdXRpb25Db250ZXh0LmdldFByb2Nlc3NJbnN0YW5jZUlkKCk7XG4gICAgICAgICAgICBjb25zdCBidXNpbmVzc0tleSA9IGV4ZWN1dGlvbkNvbnRleHQuZ2V0UHJvY2Vzc0luc3RhbmNlQnVzaW5lc3NLZXkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5SWQgPSBleGVjdXRpb25Db250ZXh0LmdldEN1cnJlbnRBY3Rpdml0eUlkKCk7XG4gICAgICAgICAgICByZXR1cm4gYFske3Byb2Nlc3NEZWZpbml0aW9uSWR9XVske3Byb2Nlc3NJbnN0YW5jZUlkfV1bJHtidXNpbmVzc0tleX1dWyR7YWN0aXZpdHlJZH1dYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1tuby1leGVjdXRpb24tY29udGV4dF0nO1xuICAgIH1cbn0iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGVBQWU7QUFDeEIsU0FBUyxlQUF1QjtBQUV6QixNQUFNLE9BQU87QUFBQSxFQUNDO0FBQUEsRUFDQTtBQUFBLEVBRWpCLGNBQWM7QUFDVixTQUFLLFlBQVksb0JBQUksS0FBSztBQUMxQixTQUFLLFNBQVMsUUFBUSxVQUFVLFlBQVk7QUFDNUMsU0FBSyxJQUFJLFNBQVM7QUFBQSxFQUN0QjtBQUFBLEVBRU8sSUFBSSxTQUFpQjtBQUN4QixTQUFLLE9BQU8sS0FBSyxHQUFHLEtBQUssTUFBTSxDQUFDLE1BQU0sV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUN6RDtBQUFBLEVBRU8sS0FBSyxTQUFpQjtBQUN6QixTQUFLLE9BQU8sS0FBSyxHQUFHLEtBQUssTUFBTSxDQUFDLE1BQU0sV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUN6RDtBQUFBLEVBRU8sTUFBTSxTQUFpQjtBQUMxQixTQUFLLE9BQU8sTUFBTSxHQUFHLEtBQUssTUFBTSxDQUFDLE1BQU0sV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUMxRDtBQUFBLEVBRU8sU0FBUyxTQUFrQjtBQUM5QixVQUFNLFVBQVUsb0JBQUksS0FBSztBQUN6QixVQUFNLFVBQVUsS0FBSyxNQUFNLFFBQVEsUUFBUSxJQUFJLEtBQUssVUFBVSxRQUFRLEtBQUssR0FBSTtBQUMvRSxTQUFLLE9BQU8sS0FBSyxHQUFHLEtBQUssTUFBTSxDQUFDLHNCQUFzQixPQUFPLGFBQWEsV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUM3RjtBQUFBLEVBRU8sS0FBSyxTQUFrQjtBQUMxQixVQUFNLFVBQVUsb0JBQUksS0FBSztBQUN6QixVQUFNLFVBQVUsS0FBSyxNQUFNLFFBQVEsUUFBUSxJQUFJLEtBQUssVUFBVSxRQUFRLEtBQUssR0FBSTtBQUMvRSxTQUFLLE9BQU8sTUFBTSxHQUFHLEtBQUssTUFBTSxDQUFDLG1CQUFtQixPQUFPLGFBQWEsV0FBVyxFQUFFLEVBQUU7QUFBQSxFQUMzRjtBQUFBLEVBRVEsUUFBZ0I7QUFDcEIsVUFBTSxtQkFBbUIsUUFBUSxvQkFBb0I7QUFDckQsUUFBSSxrQkFBa0I7QUFDbEIsWUFBTSxzQkFBc0IsaUJBQWlCLHVCQUF1QjtBQUNwRSxZQUFNLG9CQUFvQixpQkFBaUIscUJBQXFCO0FBQ2hFLFlBQU0sY0FBYyxpQkFBaUIsOEJBQThCO0FBQ25FLFlBQU0sYUFBYSxpQkFBaUIscUJBQXFCO0FBQ3pELGFBQU8sSUFBSSxtQkFBbUIsS0FBSyxpQkFBaUIsS0FBSyxXQUFXLEtBQUssVUFBVTtBQUFBLElBQ3ZGO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDSjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -3,182 +3,100 @@ const CmisFacade = Java.type("org.eclipse.dirigible.components.api.cms.CmisFacad
3
3
  const Gson = Java.type("com.google.gson.Gson");
4
4
  const HashMap = Java.type("java.util.HashMap");
5
5
  class Cmis {
6
- static {
7
- // CONSTANTS
8
- /**
9
- * CMIS method constant for read operations.
10
- */
11
- this.METHOD_READ = "READ";
12
- }
13
- static {
14
- /**
15
- * CMIS method constant for write operations.
16
- */
17
- this.METHOD_WRITE = "WRITE";
18
- }
19
- static {
20
- // ---- Base CMIS Properties ----
21
- /** CMIS property: Object name. */
22
- this.NAME = "cmis:name";
23
- }
24
- static {
25
- /** CMIS property: Unique object identifier. */
26
- this.OBJECT_ID = "cmis:objectId";
27
- }
28
- static {
29
- /** CMIS property: Object type identifier. */
30
- this.OBJECT_TYPE_ID = "cmis:objectTypeId";
31
- }
32
- static {
33
- /** CMIS property: Base object type identifier. */
34
- this.BASE_TYPE_ID = "cmis:baseTypeId";
35
- }
36
- static {
37
- /** CMIS property: User who created the object. */
38
- this.CREATED_BY = "cmis:createdBy";
39
- }
40
- static {
41
- /** CMIS property: Timestamp of object creation. */
42
- this.CREATION_DATE = "cmis:creationDate";
43
- }
44
- static {
45
- /** CMIS property: User who last modified the object. */
46
- this.LAST_MODIFIED_BY = "cmis:lastModifiedBy";
47
- }
48
- static {
49
- /** CMIS property: Timestamp of last modification. */
50
- this.LAST_MODIFICATION_DATE = "cmis:lastModificationDate";
51
- }
52
- static {
53
- /** CMIS property: Change token for object change tracking. */
54
- this.CHANGE_TOKEN = "cmis:changeToken";
55
- }
56
- static {
57
- // ---- Document CMIS Properties ----
58
- /** CMIS property: Indicates if the document is immutable. */
59
- this.IS_IMMUTABLE = "cmis:isImmutable";
60
- }
61
- static {
62
- /** CMIS property: Indicates if the document is the latest version in the version series. */
63
- this.IS_LATEST_VERSION = "cmis:isLatestVersion";
64
- }
65
- static {
66
- /** CMIS property: Indicates if the document is a major version. */
67
- this.IS_MAJOR_VERSION = "cmis:isMajorVersion";
68
- }
69
- static {
70
- /** CMIS property: Indicates if the document is the latest major version. */
71
- this.IS_LATEST_MAJOR_VERSION = "cmis:isLatestMajorVersion";
72
- }
73
- static {
74
- /** CMIS property: Label of the document version. */
75
- this.VERSION_LABEL = "cmis:versionLabel";
76
- }
77
- static {
78
- /** CMIS property: ID of the version series. */
79
- this.VERSION_SERIES_ID = "cmis:versionSeriesId";
80
- }
81
- static {
82
- /** CMIS property: Indicates if the version series is checked out. */
83
- this.IS_VERSION_SERIES_CHECKED_OUT = "cmis:isVersionSeriesCheckedOut";
84
- }
85
- static {
86
- /** CMIS property: User who checked out the version series. */
87
- this.VERSION_SERIES_CHECKED_OUT_BY = "cmis:versionSeriesCheckedOutBy";
88
- }
89
- static {
90
- /** CMIS property: ID of the checked-out document object. */
91
- this.VERSION_SERIES_CHECKED_OUT_ID = "cmis:versionSeriesCheckedOutId";
92
- }
93
- static {
94
- /** CMIS property: Comment associated with the check-in operation. */
95
- this.CHECKIN_COMMENT = "cmis:checkinComment";
96
- }
97
- static {
98
- /** CMIS property: Length of the content stream in bytes. */
99
- this.CONTENT_STREAM_LENGTH = "cmis:contentStreamLength";
100
- }
101
- static {
102
- /** CMIS property: MIME type of the content stream. */
103
- this.CONTENT_STREAM_MIME_TYPE = "cmis:contentStreamMimeType";
104
- }
105
- static {
106
- /** CMIS property: Original file name of the content stream. */
107
- this.CONTENT_STREAM_FILE_NAME = "cmis:contentStreamFileName";
108
- }
109
- static {
110
- /** CMIS property: ID of the content stream. */
111
- this.CONTENT_STREAM_ID = "cmis:contentStreamId";
112
- }
113
- static {
114
- // ---- Folder CMIS Properties ----
115
- /** CMIS property: Object ID of the parent folder. */
116
- this.PARENT_ID = "cmis:parentId";
117
- }
118
- static {
119
- /** CMIS property: List of allowed object type IDs for children. */
120
- this.ALLOWED_CHILD_OBJECT_TYPE_IDS = "cmis:allowedChildObjectTypeIds";
121
- }
122
- static {
123
- /** CMIS property: Path of the folder in the repository. */
124
- this.PATH = "cmis:path";
125
- }
126
- static {
127
- // ---- Relationship CMIS Properties ----
128
- /** CMIS property: Object ID of the relationship source. */
129
- this.SOURCE_ID = "cmis:sourceId";
130
- }
131
- static {
132
- /** CMIS property: Object ID of the relationship target. */
133
- this.TARGET_ID = "cmis:targetId";
134
- }
135
- static {
136
- // ---- Policy CMIS Properties ----
137
- /** CMIS property: Text content of the policy. */
138
- this.POLICY_TEXT = "cmis:policyText";
139
- }
140
- static {
141
- // ---- Versioning States ----
142
- /** CMIS Versioning State: No versioning. */
143
- this.VERSIONING_STATE_NONE = "none";
144
- }
145
- static {
146
- /** CMIS Versioning State: Create a new major version. */
147
- this.VERSIONING_STATE_MAJOR = "major";
148
- }
149
- static {
150
- /** CMIS Versioning State: Create a new minor version. */
151
- this.VERSIONING_STATE_MINOR = "minor";
152
- }
153
- static {
154
- /** CMIS Versioning State: Document is checked out. */
155
- this.VERSIONING_STATE_CHECKEDOUT = "checkedout";
156
- }
157
- static {
158
- // ---- Object Types ----
159
- /** CMIS Object Type ID: Document. */
160
- this.OBJECT_TYPE_DOCUMENT = "cmis:document";
161
- }
162
- static {
163
- /** CMIS Object Type ID: Folder. */
164
- this.OBJECT_TYPE_FOLDER = "cmis:folder";
165
- }
166
- static {
167
- /** CMIS Object Type ID: Relationship. */
168
- this.OBJECT_TYPE_RELATIONSHIP = "cmis:relationship";
169
- }
170
- static {
171
- /** CMIS Object Type ID: Policy. */
172
- this.OBJECT_TYPE_POLICY = "cmis:policy";
173
- }
174
- static {
175
- /** CMIS Object Type ID: Item. */
176
- this.OBJECT_TYPE_ITEM = "cmis:item";
177
- }
178
- static {
179
- /** CMIS Object Type ID: Secondary. */
180
- this.OBJECT_TYPE_SECONDARY = "cmis:secondary";
181
- }
6
+ // CONSTANTS
7
+ /**
8
+ * CMIS method constant for read operations.
9
+ */
10
+ static METHOD_READ = "READ";
11
+ /**
12
+ * CMIS method constant for write operations.
13
+ */
14
+ static METHOD_WRITE = "WRITE";
15
+ // ---- Base CMIS Properties ----
16
+ /** CMIS property: Object name. */
17
+ static NAME = "cmis:name";
18
+ /** CMIS property: Unique object identifier. */
19
+ static OBJECT_ID = "cmis:objectId";
20
+ /** CMIS property: Object type identifier. */
21
+ static OBJECT_TYPE_ID = "cmis:objectTypeId";
22
+ /** CMIS property: Base object type identifier. */
23
+ static BASE_TYPE_ID = "cmis:baseTypeId";
24
+ /** CMIS property: User who created the object. */
25
+ static CREATED_BY = "cmis:createdBy";
26
+ /** CMIS property: Timestamp of object creation. */
27
+ static CREATION_DATE = "cmis:creationDate";
28
+ /** CMIS property: User who last modified the object. */
29
+ static LAST_MODIFIED_BY = "cmis:lastModifiedBy";
30
+ /** CMIS property: Timestamp of last modification. */
31
+ static LAST_MODIFICATION_DATE = "cmis:lastModificationDate";
32
+ /** CMIS property: Change token for object change tracking. */
33
+ static CHANGE_TOKEN = "cmis:changeToken";
34
+ // ---- Document CMIS Properties ----
35
+ /** CMIS property: Indicates if the document is immutable. */
36
+ static IS_IMMUTABLE = "cmis:isImmutable";
37
+ /** CMIS property: Indicates if the document is the latest version in the version series. */
38
+ static IS_LATEST_VERSION = "cmis:isLatestVersion";
39
+ /** CMIS property: Indicates if the document is a major version. */
40
+ static IS_MAJOR_VERSION = "cmis:isMajorVersion";
41
+ /** CMIS property: Indicates if the document is the latest major version. */
42
+ static IS_LATEST_MAJOR_VERSION = "cmis:isLatestMajorVersion";
43
+ /** CMIS property: Label of the document version. */
44
+ static VERSION_LABEL = "cmis:versionLabel";
45
+ /** CMIS property: ID of the version series. */
46
+ static VERSION_SERIES_ID = "cmis:versionSeriesId";
47
+ /** CMIS property: Indicates if the version series is checked out. */
48
+ static IS_VERSION_SERIES_CHECKED_OUT = "cmis:isVersionSeriesCheckedOut";
49
+ /** CMIS property: User who checked out the version series. */
50
+ static VERSION_SERIES_CHECKED_OUT_BY = "cmis:versionSeriesCheckedOutBy";
51
+ /** CMIS property: ID of the checked-out document object. */
52
+ static VERSION_SERIES_CHECKED_OUT_ID = "cmis:versionSeriesCheckedOutId";
53
+ /** CMIS property: Comment associated with the check-in operation. */
54
+ static CHECKIN_COMMENT = "cmis:checkinComment";
55
+ /** CMIS property: Length of the content stream in bytes. */
56
+ static CONTENT_STREAM_LENGTH = "cmis:contentStreamLength";
57
+ /** CMIS property: MIME type of the content stream. */
58
+ static CONTENT_STREAM_MIME_TYPE = "cmis:contentStreamMimeType";
59
+ /** CMIS property: Original file name of the content stream. */
60
+ static CONTENT_STREAM_FILE_NAME = "cmis:contentStreamFileName";
61
+ /** CMIS property: ID of the content stream. */
62
+ static CONTENT_STREAM_ID = "cmis:contentStreamId";
63
+ // ---- Folder CMIS Properties ----
64
+ /** CMIS property: Object ID of the parent folder. */
65
+ static PARENT_ID = "cmis:parentId";
66
+ /** CMIS property: List of allowed object type IDs for children. */
67
+ static ALLOWED_CHILD_OBJECT_TYPE_IDS = "cmis:allowedChildObjectTypeIds";
68
+ /** CMIS property: Path of the folder in the repository. */
69
+ static PATH = "cmis:path";
70
+ // ---- Relationship CMIS Properties ----
71
+ /** CMIS property: Object ID of the relationship source. */
72
+ static SOURCE_ID = "cmis:sourceId";
73
+ /** CMIS property: Object ID of the relationship target. */
74
+ static TARGET_ID = "cmis:targetId";
75
+ // ---- Policy CMIS Properties ----
76
+ /** CMIS property: Text content of the policy. */
77
+ static POLICY_TEXT = "cmis:policyText";
78
+ // ---- Versioning States ----
79
+ /** CMIS Versioning State: No versioning. */
80
+ static VERSIONING_STATE_NONE = "none";
81
+ /** CMIS Versioning State: Create a new major version. */
82
+ static VERSIONING_STATE_MAJOR = "major";
83
+ /** CMIS Versioning State: Create a new minor version. */
84
+ static VERSIONING_STATE_MINOR = "minor";
85
+ /** CMIS Versioning State: Document is checked out. */
86
+ static VERSIONING_STATE_CHECKEDOUT = "checkedout";
87
+ // ---- Object Types ----
88
+ /** CMIS Object Type ID: Document. */
89
+ static OBJECT_TYPE_DOCUMENT = "cmis:document";
90
+ /** CMIS Object Type ID: Folder. */
91
+ static OBJECT_TYPE_FOLDER = "cmis:folder";
92
+ /** CMIS Object Type ID: Relationship. */
93
+ static OBJECT_TYPE_RELATIONSHIP = "cmis:relationship";
94
+ /** CMIS Object Type ID: Policy. */
95
+ static OBJECT_TYPE_POLICY = "cmis:policy";
96
+ /** CMIS Object Type ID: Item. */
97
+ static OBJECT_TYPE_ITEM = "cmis:item";
98
+ /** CMIS Object Type ID: Secondary. */
99
+ static OBJECT_TYPE_SECONDARY = "cmis:secondary";
182
100
  /**
183
101
  * Gets a new CMIS session instance to interact with the repository.
184
102
  * @returns A new {@link Session} instance.
@@ -199,6 +117,7 @@ class Cmis {
199
117
  }
200
118
  }
201
119
  class Session {
120
+ native;
202
121
  constructor(native) {
203
122
  this.native = native;
204
123
  }
@@ -303,6 +222,7 @@ class Session {
303
222
  }
304
223
  }
305
224
  class RepositoryInfo {
225
+ native;
306
226
  constructor(native) {
307
227
  this.native = native;
308
228
  }
@@ -322,6 +242,8 @@ class RepositoryInfo {
322
242
  }
323
243
  }
324
244
  class Folder {
245
+ native;
246
+ path;
325
247
  constructor(native, path) {
326
248
  this.native = native;
327
249
  this.path = path;
@@ -471,6 +393,7 @@ class Folder {
471
393
  }
472
394
  }
473
395
  class CmisObject {
396
+ native;
474
397
  constructor(native) {
475
398
  this.native = native;
476
399
  }
@@ -525,6 +448,7 @@ class CmisObject {
525
448
  }
526
449
  }
527
450
  class ObjectFactory {
451
+ native;
528
452
  constructor(native) {
529
453
  this.native = native;
530
454
  }
@@ -542,6 +466,7 @@ class ObjectFactory {
542
466
  }
543
467
  }
544
468
  class ContentStream {
469
+ native;
545
470
  constructor(native) {
546
471
  this.native = native;
547
472
  }
@@ -562,6 +487,8 @@ class ContentStream {
562
487
  }
563
488
  }
564
489
  class Document {
490
+ native;
491
+ path;
565
492
  constructor(native, path) {
566
493
  this.native = native;
567
494
  this.path = path;
@@ -638,6 +565,7 @@ class Document {
638
565
  }
639
566
  }
640
567
  class TypeDefinition {
568
+ native;
641
569
  constructor(native) {
642
570
  this.native = native;
643
571
  }
@@ -657,4 +585,4 @@ export {
657
585
  Document,
658
586
  Folder
659
587
  };
660
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Ntcy9jbWlzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBDTUlTXG4gKiAqIE5vdGU6IFRoaXMgbW9kdWxlIGlzIHN1cHBvcnRlZCBvbmx5IHdpdGggdGhlIE1vemlsbGEgUmhpbm8gZW5naW5lXG4gKiAqIFByb3ZpZGVzIHN0YXRpYyBhY2Nlc3MgdG8gdGhlIENNSVMgKENvbnRlbnQgTWFuYWdlbWVudCBJbnRlcm9wZXJhYmlsaXR5IFNlcnZpY2VzKSByZXBvc2l0b3J5IHNlc3Npb24gYW5kIHV0aWxpdHkgY29uc3RhbnRzLlxuICovXG5cbmltcG9ydCAqIGFzIHN0cmVhbXMgZnJvbSBcIkBhZXJva2l0L3Nkay9pby9zdHJlYW1zXCI7XG5jb25zdCBDbWlzRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLmNtcy5DbWlzRmFjYWRlXCIpO1xuY29uc3QgR3NvbiA9IEphdmEudHlwZShcImNvbS5nb29nbGUuZ3Nvbi5Hc29uXCIpO1xuY29uc3QgSGFzaE1hcCA9IEphdmEudHlwZShcImphdmEudXRpbC5IYXNoTWFwXCIpO1xuXG5leHBvcnQgY2xhc3MgQ21pcyB7XG5cblx0Ly8gQ09OU1RBTlRTXG5cdC8qKlxuXHQgKiBDTUlTIG1ldGhvZCBjb25zdGFudCBmb3IgcmVhZCBvcGVyYXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBNRVRIT0RfUkVBRCA9IFwiUkVBRFwiO1xuXHQvKipcblx0ICogQ01JUyBtZXRob2QgY29uc3RhbnQgZm9yIHdyaXRlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1FVEhPRF9XUklURSA9IFwiV1JJVEVcIjtcblxuXHQvLyAtLS0tIEJhc2UgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IE9iamVjdCBuYW1lLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUUgPSBcImNtaXM6bmFtZVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9JRCA9IFwiY21pczpvYmplY3RJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9JRCA9IFwiY21pczpvYmplY3RUeXBlSWRcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEJhc2Ugb2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBCQVNFX1RZUEVfSUQgPSBcImNtaXM6YmFzZVR5cGVJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVXNlciB3aG8gY3JlYXRlZCB0aGUgb2JqZWN0LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFURURfQlkgPSBcImNtaXM6Y3JlYXRlZEJ5XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBUaW1lc3RhbXAgb2Ygb2JqZWN0IGNyZWF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFUSU9OX0RBVEUgPSBcImNtaXM6Y3JlYXRpb25EYXRlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBsYXN0IG1vZGlmaWVkIHRoZSBvYmplY3QuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTEFTVF9NT0RJRklFRF9CWSA9IFwiY21pczpsYXN0TW9kaWZpZWRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVGltZXN0YW1wIG9mIGxhc3QgbW9kaWZpY2F0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBU1RfTU9ESUZJQ0FUSU9OX0RBVEUgPSBcImNtaXM6bGFzdE1vZGlmaWNhdGlvbkRhdGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IENoYW5nZSB0b2tlbiBmb3Igb2JqZWN0IGNoYW5nZSB0cmFja2luZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDSEFOR0VfVE9LRU4gPSBcImNtaXM6Y2hhbmdlVG9rZW5cIjtcblxuXHQvLyAtLS0tIERvY3VtZW50IENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBJbmRpY2F0ZXMgaWYgdGhlIGRvY3VtZW50IGlzIGltbXV0YWJsZS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19JTU1VVEFCTEUgPSBcImNtaXM6aXNJbW11dGFibGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCB2ZXJzaW9uIGluIHRoZSB2ZXJzaW9uIHNlcmllcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19MQVRFU1RfVkVSU0lPTiA9IFwiY21pczppc0xhdGVzdFZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgYSBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX01BSk9SX1ZFUlNJT04gPSBcImNtaXM6aXNNYWpvclZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX0xBVEVTVF9NQUpPUl9WRVJTSU9OID0gXCJjbWlzOmlzTGF0ZXN0TWFqb3JWZXJzaW9uXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBMYWJlbCBvZiB0aGUgZG9jdW1lbnQgdmVyc2lvbi4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX0xBQkVMID0gXCJjbWlzOnZlcnNpb25MYWJlbFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIHZlcnNpb24gc2VyaWVzLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZFUlNJT05fU0VSSUVTX0lEID0gXCJjbWlzOnZlcnNpb25TZXJpZXNJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSW5kaWNhdGVzIGlmIHRoZSB2ZXJzaW9uIHNlcmllcyBpcyBjaGVja2VkIG91dC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19WRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVCA9IFwiY21pczppc1ZlcnNpb25TZXJpZXNDaGVja2VkT3V0XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBjaGVja2VkIG91dCB0aGUgdmVyc2lvbiBzZXJpZXMuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTl9TRVJJRVNfQ0hFQ0tFRF9PVVRfQlkgPSBcImNtaXM6dmVyc2lvblNlcmllc0NoZWNrZWRPdXRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIGNoZWNrZWQtb3V0IGRvY3VtZW50IG9iamVjdC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVF9JRCA9IFwiY21pczp2ZXJzaW9uU2VyaWVzQ2hlY2tlZE91dElkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBDb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hlY2staW4gb3BlcmF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENIRUNLSU5fQ09NTUVOVCA9IFwiY21pczpjaGVja2luQ29tbWVudFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGVuZ3RoIG9mIHRoZSBjb250ZW50IHN0cmVhbSBpbiBieXRlcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9MRU5HVEggPSBcImNtaXM6Y29udGVudFN0cmVhbUxlbmd0aFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9NSU1FX1RZUEUgPSBcImNtaXM6Y29udGVudFN0cmVhbU1pbWVUeXBlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPcmlnaW5hbCBmaWxlIG5hbWUgb2YgdGhlIGNvbnRlbnQgc3RyZWFtLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTlRFTlRfU1RSRUFNX0ZJTEVfTkFNRSA9IFwiY21pczpjb250ZW50U3RyZWFtRmlsZU5hbWVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IElEIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9JRCA9IFwiY21pczpjb250ZW50U3RyZWFtSWRcIjtcblxuXHQvLyAtLS0tIEZvbGRlciBDTUlTIFByb3BlcnRpZXMgLS0tLVxuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IElEIG9mIHRoZSBwYXJlbnQgZm9sZGVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBUkVOVF9JRCA9IFwiY21pczpwYXJlbnRJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGlzdCBvZiBhbGxvd2VkIG9iamVjdCB0eXBlIElEcyBmb3IgY2hpbGRyZW4uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUxMT1dFRF9DSElMRF9PQkpFQ1RfVFlQRV9JRFMgPSBcImNtaXM6YWxsb3dlZENoaWxkT2JqZWN0VHlwZUlkc1wiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogUGF0aCBvZiB0aGUgZm9sZGVyIGluIHRoZSByZXBvc2l0b3J5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBVEggPSBcImNtaXM6cGF0aFwiO1xuXG5cdC8vIC0tLS0gUmVsYXRpb25zaGlwIENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCBzb3VyY2UuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU09VUkNFX0lEID0gXCJjbWlzOnNvdXJjZUlkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCB0YXJnZXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVEFSR0VUX0lEID0gXCJjbWlzOnRhcmdldElkXCI7XG5cblx0Ly8gLS0tLSBQb2xpY3kgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IFRleHQgY29udGVudCBvZiB0aGUgcG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBPTElDWV9URVhUID0gXCJjbWlzOnBvbGljeVRleHRcIjtcblxuXHQvLyAtLS0tIFZlcnNpb25pbmcgU3RhdGVzIC0tLS1cblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogTm8gdmVyc2lvbmluZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OSU5HX1NUQVRFX05PTkUgPSBcIm5vbmVcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1ham9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NQUpPUiA9IFwibWFqb3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1pbm9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NSU5PUiA9IFwibWlub3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogRG9jdW1lbnQgaXMgY2hlY2tlZCBvdXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9DSEVDS0VET1VUID0gXCJjaGVja2Vkb3V0XCI7XG5cblx0Ly8gLS0tLSBPYmplY3QgVHlwZXMgLS0tLVxuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogRG9jdW1lbnQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfRE9DVU1FTlQgPSBcImNtaXM6ZG9jdW1lbnRcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEZvbGRlci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9GT0xERVIgPSBcImNtaXM6Zm9sZGVyXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBSZWxhdGlvbnNoaXAuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfUkVMQVRJT05TSElQID0gXCJjbWlzOnJlbGF0aW9uc2hpcFwiO1xuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogUG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9UWVBFX1BPTElDWSA9IFwiY21pczpwb2xpY3lcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEl0ZW0uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfSVRFTSA9IFwiY21pczppdGVtXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBTZWNvbmRhcnkuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfU0VDT05EQVJZID0gXCJjbWlzOnNlY29uZGFyeVwiO1xuXG5cdC8qKlxuXHQgKiBHZXRzIGEgbmV3IENNSVMgc2Vzc2lvbiBpbnN0YW5jZSB0byBpbnRlcmFjdCB3aXRoIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgU2Vzc2lvbn0gaW5zdGFuY2UuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldFNlc3Npb24oKTogU2Vzc2lvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gQ21pc0ZhY2FkZS5nZXRTZXNzaW9uKCk7XG5cdFx0cmV0dXJuIG5ldyBTZXNzaW9uKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFjY2VzcyBjb250cm9sIGRlZmluaXRpb25zIGZvciBhIHNwZWNpZmljIHBhdGggYW5kIG1ldGhvZC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIENNSVMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBvcGVyYXRpb24gbWV0aG9kIChlLmcuLCB7QGxpbmsgQ21pcy5NRVRIT0RfUkVBRH0sIHtAbGluayBDbWlzLk1FVEhPRF9XUklURX0pLlxuXHQgKiBAcmV0dXJucyBBIGxpc3Qgb2YgYWNjZXNzIGRlZmluaXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRBY2Nlc3NEZWZpbml0aW9ucyhwYXRoOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogQWNjZXNzRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBhY2Nlc3NEZWZpbml0aW9ucyA9IENtaXNGYWNhZGUuZ2V0QWNjZXNzRGVmaW5pdGlvbnMocGF0aCwgbWV0aG9kKTtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShuZXcgR3NvbigpLnRvSnNvbihhY2Nlc3NEZWZpbml0aW9ucykpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBhY2Nlc3MgY29udHJvbCBlbnRyeSAoQUNFKSBmb3IgYSBDTUlTIG9iamVjdCwgZGV0YWlsaW5nXG4gKiB3aG8gaGFzIHdoYXQgcGVybWlzc2lvbnMgb24gYSBwYXRoLlxuICovXG5pbnRlcmZhY2UgQWNjZXNzRGVmaW5pdGlvbiB7XG5cdC8qKiBHZXRzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGFjY2VzcyBkZWZpbml0aW9uLiAqL1xuXHRnZXRJZCgpOiBzdHJpbmc7XG5cdC8qKiBHZXRzIHRoZSBzY29wZSBvZiB0aGUgZGVmaW5pdGlvbiAoZS5nLiwgJ3VzZXInLCAnZ3JvdXAnKS4gKi9cblx0Z2V0U2NvcGUoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgcGF0aCBvZiB0aGUgQ01JUyBvYmplY3QgdGhpcyBkZWZpbml0aW9uIGFwcGxpZXMgdG8uICovXG5cdGdldFBhdGgoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgbWV0aG9kL29wZXJhdGlvbiB0aGlzIGRlZmluaXRpb24gYXBwbGllcyB0byAoZS5nLiwgJ1JFQUQnLCAnV1JJVEUnKS4gKi9cblx0Z2V0TWV0aG9kKCk6IHN0cmluZztcblx0LyoqIEdldHMgdGhlIHNlY3VyaXR5IHJvbGUgKGUuZy4sICdBZG1pbmlzdHJhdG9yJywgJ1ZpZXdlcicpLiAqL1xuXHRnZXRSb2xlKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXNzaW9uIG9iamVjdFxuICogKiBSZXByZXNlbnRzIGFuIGFjdGl2ZSBjb25uZWN0aW9uIHRvIGEgQ01JUyByZXBvc2l0b3J5LCB1c2VkIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBDTUlTIG9wZXJhdGlvbnMuXG4gKi9cbmNsYXNzIFNlc3Npb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXBvc2l0b3J5IHRoaXMgc2Vzc2lvbiBpcyBjb25uZWN0ZWQgdG8uXG5cdCAqIEByZXR1cm5zIFJlcG9zaXRvcnkgbWV0YWRhdGEuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0UmVwb3NpdG9yeUluZm8oKTogUmVwb3NpdG9yeUluZm8ge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJlcG9zaXRvcnlJbmZvKCk7XG5cdFx0cmV0dXJuIG5ldyBSZXBvc2l0b3J5SW5mbyhuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUaGUgcm9vdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Um9vdEZvbGRlcigpOiBGb2xkZXIge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJvb3RGb2xkZXIoKTtcblx0XHRyZXR1cm4gbmV3IEZvbGRlcihuYXRpdmUsIG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG9iamVjdCBmYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgQ01JUyBvYmplY3RzIGxpa2UgQ29udGVudFN0cmVhbS5cblx0ICogQHJldHVybnMgQW4ge0BsaW5rIE9iamVjdEZhY3Rvcnl9IGluc3RhbmNlLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEZhY3RvcnkoKTogT2JqZWN0RmFjdG9yeSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0RmFjdG9yeSgpO1xuXHRcdHJldHVybiBuZXcgT2JqZWN0RmFjdG9yeShuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIENNSVMgb2JqZWN0IChEb2N1bWVudCBvciBGb2xkZXIpIGJ5IGl0cyB1bmlxdWUgSUQuXG5cdCAqIEBwYXJhbSBvYmplY3RJZCBUaGUgdW5pcXVlIElEIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50fSBvciB7QGxpbmsgRm9sZGVyfSBpbnN0YW5jZS5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgb2JqZWN0IHR5cGUgaXMgdW5zdXBwb3J0ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0T2JqZWN0KG9iamVjdElkOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3Qgb2JqZWN0SW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRPYmplY3Qob2JqZWN0SWQpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgbnVsbCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBudWxsKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgQ01JUyBvYmplY3QgKERvY3VtZW50IG9yIEZvbGRlcikgYnkgaXRzIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBvYmplY3QgaW4gdGhlIHJlcG9zaXRvcnkgKGUuZy4sIFwiL3BhdGgvdG8vb2JqZWN0XCIpLlxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBEb2N1bWVudH0gb3Ige0BsaW5rIEZvbGRlcn0gaW5zdGFuY2UuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgcmVhZCBhY2Nlc3MgaXMgbm90IGFsbG93ZWQgb3IgdGhlIG9iamVjdCB0eXBlIGlzIHVuc3VwcG9ydGVkLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEJ5UGF0aChwYXRoOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHBhdGgsIENtaXMuTUVUSE9EX1JFQUQpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmVhZCBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgcGF0aCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0QnlQYXRoKHBhdGgpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgcGF0aCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBwYXRoKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGZvbGRlciBzdHJ1Y3R1cmUgcmVjdXJzaXZlbHkgYmFzZWQgb24gYSBwYXRoLiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXRcblx0ICogY3JlYXRlcyBhbGwgbm9uLWV4aXN0ZW50IHBhcmVudCBmb2xkZXJzLlxuXHQgKiBFeGFtcGxlOiBgY3JlYXRlRm9sZGVyKFwiL25ldy9wYXRoL3N0cnVjdHVyZVwiKWBcblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCAob3IgZXhpc3RpbmcpIGlubmVybW9zdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRm9sZGVyKGxvY2F0aW9uOiBzdHJpbmcpOiBGb2xkZXIge1xuXHRcdGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMSwgbG9jYXRpb24ubGVuZ3RoKTtcblx0XHR9XG5cdFx0aWYgKGxvY2F0aW9uLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMCwgbG9jYXRpb24ubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNlZ21lbnRzID0gbG9jYXRpb24uc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBmb2xkZXIgPSB0aGlzLmdldFJvb3RGb2xkZXIoKTtcblx0XHRmb3IgKGNvbnN0IG5leHQgb2Ygc2VnbWVudHMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdFtDbWlzLk9CSkVDVF9UWVBFX0lEXTogQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIsXG5cdFx0XHRcdFtDbWlzLk5BTUVdOiBuZXh0XG5cdFx0XHR9O1xuXHRcdFx0Zm9sZGVyID0gZm9sZGVyLmNyZWF0ZUZvbGRlcihwcm9wZXJ0aWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhlIHBhcmVudCBmb2xkZXIgc3RydWN0dXJlIGV4aXN0cy5cblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBwYXJlbnQgZm9sZGVyIChlLmcuLCBcIi9wYXRoL3RvL2ZvbGRlclwiKS5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVEb2N1bWVudChsb2NhdGlvbjogc3RyaW5nLCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjb250ZW50U3RyZWFtOiBDb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGU6IHN0cmluZyk6IERvY3VtZW50IHtcblx0XHRjb25zdCBmb2xkZXIgPSB0aGlzLmNyZWF0ZUZvbGRlcihsb2NhdGlvbik7XG5cdFx0cmV0dXJuIGZvbGRlci5jcmVhdGVEb2N1bWVudChwcm9wZXJ0aWVzLCBjb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGUpO1xuXHR9XG5cbn1cblxuLyoqXG4gKiBSZXBvc2l0b3J5SW5mbyBvYmplY3RcbiAqICogUHJvdmlkZXMgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbm5lY3RlZCBDTUlTIHJlcG9zaXRvcnkuXG4gKi9cbmNsYXNzIFJlcG9zaXRvcnlJbmZvIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlcG9zaXRvcnkuXG5cdCAqIEByZXR1cm5zIFRoZSByZXBvc2l0b3J5IElELlxuXHQgKi9cblx0cHVibGljIGdldElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cblx0ICogQHJldHVybnMgVGhlIHJlcG9zaXRvcnkgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxufVxuXG4vKipcbiAqIEZvbGRlciBvYmplY3RcbiAqICogUmVwcmVzZW50cyBhIENNSVMgZm9sZGVyIG9iamVjdCwgYWxsb3dpbmcgb3BlcmF0aW9ucyBsaWtlIGNyZWF0aW5nIGNoaWxkcmVuLCBkZWxldGluZywgYW5kIHJlbmFtaW5nLlxuICovXG5leHBvcnQgY2xhc3MgRm9sZGVyIHtcblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBuYW1lLlxuXHQgKi9cblx0cHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TmFtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgZm9sZGVyIHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGZvbGRlciAobXVzdCBpbmNsdWRlIHtAbGluayBDbWlzLk5BTUV9KS5cblx0ICogQHJldHVybnMgVGhlIG5ld2x5IGNyZWF0ZWQge0BsaW5rIEZvbGRlcn0gb2JqZWN0LlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHdyaXRlIGFjY2VzcyBpcyBub3QgYWxsb3dlZC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVGb2xkZXIocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IEZvbGRlciB7XG5cdFx0dmFyIGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dmFyIG1hcEluc3RhbmNlID0gbmV3IEhhc2hNYXAoKTtcblx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhciBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVGb2xkZXIobWFwSW5zdGFuY2UpO1xuXHRcdHZhciBmb2xkZXIgPSBuZXcgRm9sZGVyKG5hdGl2ZSwgbnVsbCk7XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRG9jdW1lbnQocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY29udGVudFN0cmVhbTogQ29udGVudFN0cmVhbSwgdmVyc2lvbmluZ1N0YXRlOiBzdHJpbmcpOiBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCBtYXBJbnN0YW5jZSA9IG5ldyBIYXNoTWFwKCk7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHN0YXRlID0gQ21pc0ZhY2FkZS5nZXRWZXJzaW9uaW5nU3RhdGUodmVyc2lvbmluZ1N0YXRlKTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVEb2N1bWVudChtYXBJbnN0YW5jZSwgY29udGVudFN0cmVhbS5uYXRpdmUsIHN0YXRlKTtcblx0XHRyZXR1cm4gbmV3IERvY3VtZW50KG5hdGl2ZSwgbnVsbCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY2hpbGRyZW4gb2YgdGhpcyBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBvZiBnZW5lcmljIHtAbGluayBDbWlzT2JqZWN0fSB3cmFwcGVycyBmb3IgdGhlIGNoaWxkcmVuLlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHJlYWQgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGdldENoaWxkcmVuKCk6IENtaXNPYmplY3RbXSB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9SRUFEKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlJlYWQgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBbXTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0Q2hpbGRyZW4oKTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlSXRlcmF0b3IgPSBjaGlsZHJlbkluc3RhbmNlLml0ZXJhdG9yKCk7XG5cdFx0d2hpbGUgKGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5oYXNOZXh0KCkpIHtcblx0XHRcdGNvbnN0IGNtaXNPYmplY3RJbnN0YW5jZSA9IGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5uZXh0KCk7XG5cdFx0XHRjb25zdCBjbWlzT2JqZWN0ID0gbmV3IENtaXNPYmplY3QoY21pc09iamVjdEluc3RhbmNlKTtcblx0XHRcdGNoaWxkcmVuLnB1c2goY21pc09iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjaGlsZHJlbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBmb2xkZXIgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhpcyBmb2xkZXIgaXMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGl0IGlzIHRoZSByb290IGZvbGRlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzUm9vdEZvbGRlcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNSb290Rm9sZGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGFyZW50IGZvbGRlciBvZiB0aGlzIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIHBhcmVudCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Rm9sZGVyUGFyZW50KCk6IEZvbGRlciB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Rm9sZGVyUGFyZW50KCk7XG5cdFx0cmV0dXJuIG5ldyBGb2xkZXIobmF0aXZlLCBudWxsKTtcblx0fTtcblxuXHQvKipcblx0ICogRGVsZXRlcyB0aGlzIGZvbGRlciAobXVzdCBiZSBlbXB0eSB0byBzdWNjZWVkKS5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZGVsZXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJlbmFtZXMgdGhpcyBmb2xkZXIuXG5cdCAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGZvbGRlci5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhpcyBmb2xkZXIgYW5kIGFsbCBpdHMgY29udGVudHMgcmVjdXJzaXZlbHkuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZVRyZWUoKTogdm9pZCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCB1bmlmaWVkT2JqZWN0RGVsZXRlID0gQ21pc0ZhY2FkZS5nZXRVbmlmaWVkT2JqZWN0RGVsZXRlKCk7XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlVHJlZSh0cnVlLCB1bmlmaWVkT2JqZWN0RGVsZXRlLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0eXBlIGRlZmluaXRpb24gb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlcidzIHtAbGluayBUeXBlRGVmaW5pdGlvbn0uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VHlwZSgpOiBUeXBlRGVmaW5pdGlvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0VHlwZSgpO1xuXHRcdHJldHVybiBuZXcgVHlwZURlZmluaXRpb24obmF0aXZlKTtcblx0fVxufVxuXG4vKipcbiAqIENtaXNPYmplY3Qgb2JqZWN0XG4gKiAqIEEgZ2VuZXJpYyB3cmFwcGVyIGZvciBDTUlTIG9iamVjdHMsIHVzZWQgcHJpbWFyaWx5IGZvciBjaGlsZHJlbiBsaXN0cy5cbiAqL1xuY2xhc3MgQ21pc09iamVjdCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBDTUlTIG9iamVjdC4gSGFuZGxlcyBkaWZmZXJlbmNlcyBpbiBuYXRpdmUgQ01JUyBpbXBsZW1lbnRhdGlvbnMuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgcGF0aC5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Ly90aGlzIGlzIGNhdXNlZCBieSBoYXZpbmcgZGlmZmVyZW50IHVuZGVybHlpbmcgbmF0aXZlIG9iamVjdHMgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cblx0XHRpZiAodGhpcy5uYXRpdmUuZ2V0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGgoKTtcblx0XHR9XG5cblx0XHQvL0FwYWNoZSBDaGVtaXN0cnkgQ21pc09iamVjdCBoYXMgbm8gZ2V0UGF0aCgpIGJ1dCBnZXRQYXRocygpIC0gaHR0cHM6Ly9jaGVtaXN0cnkuYXBhY2hlLm9yZy9kb2NzL2NtaXMtc2FtcGxlcy9zYW1wbGVzL3JldHJpZXZlLW9iamVjdHMvaW5kZXguaHRtbFxuXHRcdGlmICh0aGlzLm5hdGl2ZS5nZXRQYXRocykge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGhzKClbMF07XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQYXRoIG5vdCBmb3VuZCBmb3IgQ21pc09iamVjdCB3aXRoIGlkICR7dGhpcy5nZXRJZCgpfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBUaGUgb2JqZWN0J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhlIENNSVMgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5kZWxldGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW5hbWVzIHRoZSBDTUlTIG9iamVjdC5cblx0ICogQHBhcmFtIG5ld05hbWUgVGhlIG5ldyBuYW1lIGZvciB0aGUgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5yZW5hbWUobmV3TmFtZSk7XG5cdH1cblxufVxuXG4vKipcbiAqIE9iamVjdEZhY3Rvcnkgb2JqZWN0XG4gKiAqIFByb3ZpZGVzIG1ldGhvZHMgdG8gY3JlYXRlIGNvbnRlbnQgc3RyZWFtcy5cbiAqL1xuY2xhc3MgT2JqZWN0RmFjdG9yeSB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgY29udGVudCBzdHJlYW0gaW5zdGFuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgb3IgdXBkYXRlIGRvY3VtZW50IGNvbnRlbnQuXG5cdCAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGxlbmd0aCBUaGUgc2l6ZSBvZiB0aGUgY29udGVudCBzdHJlYW0gaW4gYnl0ZXMuXG5cdCAqIEBwYXJhbSBtaW1ldHlwZSBUaGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50LlxuXHQgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIGlucHV0IHN0cmVhbSBjb250YWluaW5nIHRoZSBkYXRhLlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29udGVudFN0cmVhbX0gb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIG1pbWV0eXBlOiBzdHJpbmcsIGlucHV0U3RyZWFtOiBzdHJlYW1zLklucHV0U3RyZWFtKTogQ29udGVudFN0cmVhbSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWUsIGxlbmd0aCwgbWltZXR5cGUsIGlucHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0cmV0dXJuIG5ldyBDb250ZW50U3RyZWFtKG5hdGl2ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBDb250ZW50U3RyZWFtIG9iamVjdFxuICogKiBSZXByZXNlbnRzIHRoZSBiaW5hcnkgY29udGVudCBzdHJlYW0gb2YgYSBDTUlTIERvY3VtZW50LlxuICovXG5jbGFzcyBDb250ZW50U3RyZWFtIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgSmF2YS1iYWNrZWQgaW5wdXQgc3RyZWFtIGZvciByZWFkaW5nIHRoZSBjb250ZW50LlxuXHQgKiBAcmV0dXJucyBBbiB7QGxpbmsgc3RyZWFtcy5JbnB1dFN0cmVhbX0gd3JhcHBlci5cblx0ICovXG5cdHB1YmxpYyBnZXRTdHJlYW0oKTogc3RyZWFtcy5JbnB1dFN0cmVhbSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0U3RyZWFtKCk7XG5cdFx0cmV0dXJuIG5ldyBzdHJlYW1zLklucHV0U3RyZWFtKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS5cblx0ICogQHJldHVybnMgVGhlIE1JTUUgdHlwZSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TWltZVR5cGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TWltZVR5cGUoKTtcblx0fVxufVxuXG4vKipcbiAqIERvY3VtZW50IG9iamVjdFxuICogKiBSZXByZXNlbnRzIGEgQ01JUyBkb2N1bWVudCBvYmplY3QsIGFsbG93aW5nIG9wZXJhdGlvbnMgbGlrZSByZWFkaW5nIGNvbnRlbnQsIGRlbGV0aW5nLCBhbmQgcmVuYW1pbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50IG5hbWUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXROYW1lKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBkZWZpbml0aW9uIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBhdGggb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIHRoaXMgZG9jdW1lbnQuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBhbGxvd2VkID0gQ21pc0ZhY2FkZS5pc0FsbG93ZWQodGhpcy5nZXRQYXRoKCksIENtaXMuTUVUSE9EX1dSSVRFKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIldyaXRlIGFjY2VzcyBub3QgYWxsb3dlZCBvbjogXCIgKyB0aGlzLmdldFBhdGgoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5kZWxldGUodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluYXJ5IGNvbnRlbnQgc3RyZWFtIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIHtAbGluayBDb250ZW50U3RyZWFtfSBvYmplY3QsIG9yIGBudWxsYCBpZiB0aGUgZG9jdW1lbnQgaGFzIG5vIGNvbnRlbnQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udGVudFN0cmVhbSgpOiBDb250ZW50U3RyZWFtIHwgbnVsbCB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Q29udGVudFN0cmVhbSgpO1xuXHRcdGlmIChuYXRpdmUgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBuZXcgQ29udGVudFN0cmVhbShuYXRpdmUpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZG9jdW1lbnQncyBjb250ZW50IHN0cmVhbSBpbiBieXRlcy5cblx0ICogQHJldHVybnMgVGhlIHNpemUgaW4gYnl0ZXMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0U2l6ZSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTaXplKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVuYW1lcyB0aGlzIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gbmV3TmFtZSBUaGUgbmV3IG5hbWUgZm9yIHRoZSBkb2N1bWVudC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZGVmaW5pdGlvbiBvZiBhIENNSVMgb2JqZWN0IHR5cGUgKGUuZy4sIGNtaXM6ZG9jdW1lbnQsIGNtaXM6Zm9sZGVyKS5cbiAqL1xuY2xhc3MgVHlwZURlZmluaXRpb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB1bmlxdWUgSUQgb2YgdGhlIG9iamVjdCB0eXBlIChlLmcuLCAnY21pczpkb2N1bWVudCcpLlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gQ21pcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQU1BLFlBQVksYUFBYTtBQUN6QixNQUFNLGFBQWEsS0FBSyxLQUFLLHFEQUFxRDtBQUNsRixNQUFNLE9BQU8sS0FBSyxLQUFLLHNCQUFzQjtBQUM3QyxNQUFNLFVBQVUsS0FBSyxLQUFLLG1CQUFtQjtBQUV0QyxNQUFNLEtBQUs7QUFBQSxFQU1qQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBdUIsY0FBYztBQUFBO0FBQUEsRUFJckM7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUF1QixlQUFlO0FBQUE7QUFBQSxFQUl0QztBQUFBO0FBQUE7QUFBQSxTQUF1QixPQUFPO0FBQUE7QUFBQSxFQUU5QjtBQUFBO0FBQUEsU0FBdUIsWUFBWTtBQUFBO0FBQUEsRUFFbkM7QUFBQTtBQUFBLFNBQXVCLGlCQUFpQjtBQUFBO0FBQUEsRUFFeEM7QUFBQTtBQUFBLFNBQXVCLGVBQWU7QUFBQTtBQUFBLEVBRXRDO0FBQUE7QUFBQSxTQUF1QixhQUFhO0FBQUE7QUFBQSxFQUVwQztBQUFBO0FBQUEsU0FBdUIsZ0JBQWdCO0FBQUE7QUFBQSxFQUV2QztBQUFBO0FBQUEsU0FBdUIsbUJBQW1CO0FBQUE7QUFBQSxFQUUxQztBQUFBO0FBQUEsU0FBdUIseUJBQXlCO0FBQUE7QUFBQSxFQUVoRDtBQUFBO0FBQUEsU0FBdUIsZUFBZTtBQUFBO0FBQUEsRUFJdEM7QUFBQTtBQUFBO0FBQUEsU0FBdUIsZUFBZTtBQUFBO0FBQUEsRUFFdEM7QUFBQTtBQUFBLFNBQXVCLG9CQUFvQjtBQUFBO0FBQUEs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
588
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Ntcy9jbWlzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBDTUlTXG4gKiAqIE5vdGU6IFRoaXMgbW9kdWxlIGlzIHN1cHBvcnRlZCBvbmx5IHdpdGggdGhlIE1vemlsbGEgUmhpbm8gZW5naW5lXG4gKiAqIFByb3ZpZGVzIHN0YXRpYyBhY2Nlc3MgdG8gdGhlIENNSVMgKENvbnRlbnQgTWFuYWdlbWVudCBJbnRlcm9wZXJhYmlsaXR5IFNlcnZpY2VzKSByZXBvc2l0b3J5IHNlc3Npb24gYW5kIHV0aWxpdHkgY29uc3RhbnRzLlxuICovXG5cbmltcG9ydCAqIGFzIHN0cmVhbXMgZnJvbSBcIkBhZXJva2l0L3Nkay9pby9zdHJlYW1zXCI7XG5jb25zdCBDbWlzRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLmNtcy5DbWlzRmFjYWRlXCIpO1xuY29uc3QgR3NvbiA9IEphdmEudHlwZShcImNvbS5nb29nbGUuZ3Nvbi5Hc29uXCIpO1xuY29uc3QgSGFzaE1hcCA9IEphdmEudHlwZShcImphdmEudXRpbC5IYXNoTWFwXCIpO1xuXG5leHBvcnQgY2xhc3MgQ21pcyB7XG5cblx0Ly8gQ09OU1RBTlRTXG5cdC8qKlxuXHQgKiBDTUlTIG1ldGhvZCBjb25zdGFudCBmb3IgcmVhZCBvcGVyYXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBNRVRIT0RfUkVBRCA9IFwiUkVBRFwiO1xuXHQvKipcblx0ICogQ01JUyBtZXRob2QgY29uc3RhbnQgZm9yIHdyaXRlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1FVEhPRF9XUklURSA9IFwiV1JJVEVcIjtcblxuXHQvLyAtLS0tIEJhc2UgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IE9iamVjdCBuYW1lLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUUgPSBcImNtaXM6bmFtZVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9JRCA9IFwiY21pczpvYmplY3RJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9JRCA9IFwiY21pczpvYmplY3RUeXBlSWRcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEJhc2Ugb2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBCQVNFX1RZUEVfSUQgPSBcImNtaXM6YmFzZVR5cGVJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVXNlciB3aG8gY3JlYXRlZCB0aGUgb2JqZWN0LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFURURfQlkgPSBcImNtaXM6Y3JlYXRlZEJ5XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBUaW1lc3RhbXAgb2Ygb2JqZWN0IGNyZWF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFUSU9OX0RBVEUgPSBcImNtaXM6Y3JlYXRpb25EYXRlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBsYXN0IG1vZGlmaWVkIHRoZSBvYmplY3QuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTEFTVF9NT0RJRklFRF9CWSA9IFwiY21pczpsYXN0TW9kaWZpZWRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVGltZXN0YW1wIG9mIGxhc3QgbW9kaWZpY2F0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBU1RfTU9ESUZJQ0FUSU9OX0RBVEUgPSBcImNtaXM6bGFzdE1vZGlmaWNhdGlvbkRhdGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IENoYW5nZSB0b2tlbiBmb3Igb2JqZWN0IGNoYW5nZSB0cmFja2luZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDSEFOR0VfVE9LRU4gPSBcImNtaXM6Y2hhbmdlVG9rZW5cIjtcblxuXHQvLyAtLS0tIERvY3VtZW50IENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBJbmRpY2F0ZXMgaWYgdGhlIGRvY3VtZW50IGlzIGltbXV0YWJsZS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19JTU1VVEFCTEUgPSBcImNtaXM6aXNJbW11dGFibGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCB2ZXJzaW9uIGluIHRoZSB2ZXJzaW9uIHNlcmllcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19MQVRFU1RfVkVSU0lPTiA9IFwiY21pczppc0xhdGVzdFZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgYSBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX01BSk9SX1ZFUlNJT04gPSBcImNtaXM6aXNNYWpvclZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX0xBVEVTVF9NQUpPUl9WRVJTSU9OID0gXCJjbWlzOmlzTGF0ZXN0TWFqb3JWZXJzaW9uXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBMYWJlbCBvZiB0aGUgZG9jdW1lbnQgdmVyc2lvbi4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX0xBQkVMID0gXCJjbWlzOnZlcnNpb25MYWJlbFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIHZlcnNpb24gc2VyaWVzLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZFUlNJT05fU0VSSUVTX0lEID0gXCJjbWlzOnZlcnNpb25TZXJpZXNJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSW5kaWNhdGVzIGlmIHRoZSB2ZXJzaW9uIHNlcmllcyBpcyBjaGVja2VkIG91dC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19WRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVCA9IFwiY21pczppc1ZlcnNpb25TZXJpZXNDaGVja2VkT3V0XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBjaGVja2VkIG91dCB0aGUgdmVyc2lvbiBzZXJpZXMuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTl9TRVJJRVNfQ0hFQ0tFRF9PVVRfQlkgPSBcImNtaXM6dmVyc2lvblNlcmllc0NoZWNrZWRPdXRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIGNoZWNrZWQtb3V0IGRvY3VtZW50IG9iamVjdC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVF9JRCA9IFwiY21pczp2ZXJzaW9uU2VyaWVzQ2hlY2tlZE91dElkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBDb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hlY2staW4gb3BlcmF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENIRUNLSU5fQ09NTUVOVCA9IFwiY21pczpjaGVja2luQ29tbWVudFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGVuZ3RoIG9mIHRoZSBjb250ZW50IHN0cmVhbSBpbiBieXRlcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9MRU5HVEggPSBcImNtaXM6Y29udGVudFN0cmVhbUxlbmd0aFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9NSU1FX1RZUEUgPSBcImNtaXM6Y29udGVudFN0cmVhbU1pbWVUeXBlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPcmlnaW5hbCBmaWxlIG5hbWUgb2YgdGhlIGNvbnRlbnQgc3RyZWFtLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTlRFTlRfU1RSRUFNX0ZJTEVfTkFNRSA9IFwiY21pczpjb250ZW50U3RyZWFtRmlsZU5hbWVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IElEIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9JRCA9IFwiY21pczpjb250ZW50U3RyZWFtSWRcIjtcblxuXHQvLyAtLS0tIEZvbGRlciBDTUlTIFByb3BlcnRpZXMgLS0tLVxuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IElEIG9mIHRoZSBwYXJlbnQgZm9sZGVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBUkVOVF9JRCA9IFwiY21pczpwYXJlbnRJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGlzdCBvZiBhbGxvd2VkIG9iamVjdCB0eXBlIElEcyBmb3IgY2hpbGRyZW4uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUxMT1dFRF9DSElMRF9PQkpFQ1RfVFlQRV9JRFMgPSBcImNtaXM6YWxsb3dlZENoaWxkT2JqZWN0VHlwZUlkc1wiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogUGF0aCBvZiB0aGUgZm9sZGVyIGluIHRoZSByZXBvc2l0b3J5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBVEggPSBcImNtaXM6cGF0aFwiO1xuXG5cdC8vIC0tLS0gUmVsYXRpb25zaGlwIENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCBzb3VyY2UuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU09VUkNFX0lEID0gXCJjbWlzOnNvdXJjZUlkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCB0YXJnZXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVEFSR0VUX0lEID0gXCJjbWlzOnRhcmdldElkXCI7XG5cblx0Ly8gLS0tLSBQb2xpY3kgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IFRleHQgY29udGVudCBvZiB0aGUgcG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBPTElDWV9URVhUID0gXCJjbWlzOnBvbGljeVRleHRcIjtcblxuXHQvLyAtLS0tIFZlcnNpb25pbmcgU3RhdGVzIC0tLS1cblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogTm8gdmVyc2lvbmluZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OSU5HX1NUQVRFX05PTkUgPSBcIm5vbmVcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1ham9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NQUpPUiA9IFwibWFqb3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1pbm9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NSU5PUiA9IFwibWlub3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogRG9jdW1lbnQgaXMgY2hlY2tlZCBvdXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9DSEVDS0VET1VUID0gXCJjaGVja2Vkb3V0XCI7XG5cblx0Ly8gLS0tLSBPYmplY3QgVHlwZXMgLS0tLVxuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogRG9jdW1lbnQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfRE9DVU1FTlQgPSBcImNtaXM6ZG9jdW1lbnRcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEZvbGRlci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9GT0xERVIgPSBcImNtaXM6Zm9sZGVyXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBSZWxhdGlvbnNoaXAuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfUkVMQVRJT05TSElQID0gXCJjbWlzOnJlbGF0aW9uc2hpcFwiO1xuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogUG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9UWVBFX1BPTElDWSA9IFwiY21pczpwb2xpY3lcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEl0ZW0uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfSVRFTSA9IFwiY21pczppdGVtXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBTZWNvbmRhcnkuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfU0VDT05EQVJZID0gXCJjbWlzOnNlY29uZGFyeVwiO1xuXG5cdC8qKlxuXHQgKiBHZXRzIGEgbmV3IENNSVMgc2Vzc2lvbiBpbnN0YW5jZSB0byBpbnRlcmFjdCB3aXRoIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgU2Vzc2lvbn0gaW5zdGFuY2UuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldFNlc3Npb24oKTogU2Vzc2lvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gQ21pc0ZhY2FkZS5nZXRTZXNzaW9uKCk7XG5cdFx0cmV0dXJuIG5ldyBTZXNzaW9uKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFjY2VzcyBjb250cm9sIGRlZmluaXRpb25zIGZvciBhIHNwZWNpZmljIHBhdGggYW5kIG1ldGhvZC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIENNSVMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBvcGVyYXRpb24gbWV0aG9kIChlLmcuLCB7QGxpbmsgQ21pcy5NRVRIT0RfUkVBRH0sIHtAbGluayBDbWlzLk1FVEhPRF9XUklURX0pLlxuXHQgKiBAcmV0dXJucyBBIGxpc3Qgb2YgYWNjZXNzIGRlZmluaXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRBY2Nlc3NEZWZpbml0aW9ucyhwYXRoOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogQWNjZXNzRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBhY2Nlc3NEZWZpbml0aW9ucyA9IENtaXNGYWNhZGUuZ2V0QWNjZXNzRGVmaW5pdGlvbnMocGF0aCwgbWV0aG9kKTtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShuZXcgR3NvbigpLnRvSnNvbihhY2Nlc3NEZWZpbml0aW9ucykpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBhY2Nlc3MgY29udHJvbCBlbnRyeSAoQUNFKSBmb3IgYSBDTUlTIG9iamVjdCwgZGV0YWlsaW5nXG4gKiB3aG8gaGFzIHdoYXQgcGVybWlzc2lvbnMgb24gYSBwYXRoLlxuICovXG5pbnRlcmZhY2UgQWNjZXNzRGVmaW5pdGlvbiB7XG5cdC8qKiBHZXRzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGFjY2VzcyBkZWZpbml0aW9uLiAqL1xuXHRnZXRJZCgpOiBzdHJpbmc7XG5cdC8qKiBHZXRzIHRoZSBzY29wZSBvZiB0aGUgZGVmaW5pdGlvbiAoZS5nLiwgJ3VzZXInLCAnZ3JvdXAnKS4gKi9cblx0Z2V0U2NvcGUoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgcGF0aCBvZiB0aGUgQ01JUyBvYmplY3QgdGhpcyBkZWZpbml0aW9uIGFwcGxpZXMgdG8uICovXG5cdGdldFBhdGgoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgbWV0aG9kL29wZXJhdGlvbiB0aGlzIGRlZmluaXRpb24gYXBwbGllcyB0byAoZS5nLiwgJ1JFQUQnLCAnV1JJVEUnKS4gKi9cblx0Z2V0TWV0aG9kKCk6IHN0cmluZztcblx0LyoqIEdldHMgdGhlIHNlY3VyaXR5IHJvbGUgKGUuZy4sICdBZG1pbmlzdHJhdG9yJywgJ1ZpZXdlcicpLiAqL1xuXHRnZXRSb2xlKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXNzaW9uIG9iamVjdFxuICogKiBSZXByZXNlbnRzIGFuIGFjdGl2ZSBjb25uZWN0aW9uIHRvIGEgQ01JUyByZXBvc2l0b3J5LCB1c2VkIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBDTUlTIG9wZXJhdGlvbnMuXG4gKi9cbmNsYXNzIFNlc3Npb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXBvc2l0b3J5IHRoaXMgc2Vzc2lvbiBpcyBjb25uZWN0ZWQgdG8uXG5cdCAqIEByZXR1cm5zIFJlcG9zaXRvcnkgbWV0YWRhdGEuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0UmVwb3NpdG9yeUluZm8oKTogUmVwb3NpdG9yeUluZm8ge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJlcG9zaXRvcnlJbmZvKCk7XG5cdFx0cmV0dXJuIG5ldyBSZXBvc2l0b3J5SW5mbyhuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUaGUgcm9vdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Um9vdEZvbGRlcigpOiBGb2xkZXIge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJvb3RGb2xkZXIoKTtcblx0XHRyZXR1cm4gbmV3IEZvbGRlcihuYXRpdmUsIG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG9iamVjdCBmYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgQ01JUyBvYmplY3RzIGxpa2UgQ29udGVudFN0cmVhbS5cblx0ICogQHJldHVybnMgQW4ge0BsaW5rIE9iamVjdEZhY3Rvcnl9IGluc3RhbmNlLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEZhY3RvcnkoKTogT2JqZWN0RmFjdG9yeSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0RmFjdG9yeSgpO1xuXHRcdHJldHVybiBuZXcgT2JqZWN0RmFjdG9yeShuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIENNSVMgb2JqZWN0IChEb2N1bWVudCBvciBGb2xkZXIpIGJ5IGl0cyB1bmlxdWUgSUQuXG5cdCAqIEBwYXJhbSBvYmplY3RJZCBUaGUgdW5pcXVlIElEIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50fSBvciB7QGxpbmsgRm9sZGVyfSBpbnN0YW5jZS5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgb2JqZWN0IHR5cGUgaXMgdW5zdXBwb3J0ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0T2JqZWN0KG9iamVjdElkOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3Qgb2JqZWN0SW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRPYmplY3Qob2JqZWN0SWQpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgbnVsbCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBudWxsKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgQ01JUyBvYmplY3QgKERvY3VtZW50IG9yIEZvbGRlcikgYnkgaXRzIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBvYmplY3QgaW4gdGhlIHJlcG9zaXRvcnkgKGUuZy4sIFwiL3BhdGgvdG8vb2JqZWN0XCIpLlxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBEb2N1bWVudH0gb3Ige0BsaW5rIEZvbGRlcn0gaW5zdGFuY2UuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgcmVhZCBhY2Nlc3MgaXMgbm90IGFsbG93ZWQgb3IgdGhlIG9iamVjdCB0eXBlIGlzIHVuc3VwcG9ydGVkLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEJ5UGF0aChwYXRoOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHBhdGgsIENtaXMuTUVUSE9EX1JFQUQpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmVhZCBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgcGF0aCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0QnlQYXRoKHBhdGgpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgcGF0aCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBwYXRoKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGZvbGRlciBzdHJ1Y3R1cmUgcmVjdXJzaXZlbHkgYmFzZWQgb24gYSBwYXRoLiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXRcblx0ICogY3JlYXRlcyBhbGwgbm9uLWV4aXN0ZW50IHBhcmVudCBmb2xkZXJzLlxuXHQgKiBFeGFtcGxlOiBgY3JlYXRlRm9sZGVyKFwiL25ldy9wYXRoL3N0cnVjdHVyZVwiKWBcblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCAob3IgZXhpc3RpbmcpIGlubmVybW9zdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRm9sZGVyKGxvY2F0aW9uOiBzdHJpbmcpOiBGb2xkZXIge1xuXHRcdGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMSwgbG9jYXRpb24ubGVuZ3RoKTtcblx0XHR9XG5cdFx0aWYgKGxvY2F0aW9uLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMCwgbG9jYXRpb24ubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNlZ21lbnRzID0gbG9jYXRpb24uc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBmb2xkZXIgPSB0aGlzLmdldFJvb3RGb2xkZXIoKTtcblx0XHRmb3IgKGNvbnN0IG5leHQgb2Ygc2VnbWVudHMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdFtDbWlzLk9CSkVDVF9UWVBFX0lEXTogQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIsXG5cdFx0XHRcdFtDbWlzLk5BTUVdOiBuZXh0XG5cdFx0XHR9O1xuXHRcdFx0Zm9sZGVyID0gZm9sZGVyLmNyZWF0ZUZvbGRlcihwcm9wZXJ0aWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhlIHBhcmVudCBmb2xkZXIgc3RydWN0dXJlIGV4aXN0cy5cblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBwYXJlbnQgZm9sZGVyIChlLmcuLCBcIi9wYXRoL3RvL2ZvbGRlclwiKS5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVEb2N1bWVudChsb2NhdGlvbjogc3RyaW5nLCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjb250ZW50U3RyZWFtOiBDb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGU6IHN0cmluZyk6IERvY3VtZW50IHtcblx0XHRjb25zdCBmb2xkZXIgPSB0aGlzLmNyZWF0ZUZvbGRlcihsb2NhdGlvbik7XG5cdFx0cmV0dXJuIGZvbGRlci5jcmVhdGVEb2N1bWVudChwcm9wZXJ0aWVzLCBjb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGUpO1xuXHR9XG5cbn1cblxuLyoqXG4gKiBSZXBvc2l0b3J5SW5mbyBvYmplY3RcbiAqICogUHJvdmlkZXMgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbm5lY3RlZCBDTUlTIHJlcG9zaXRvcnkuXG4gKi9cbmNsYXNzIFJlcG9zaXRvcnlJbmZvIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlcG9zaXRvcnkuXG5cdCAqIEByZXR1cm5zIFRoZSByZXBvc2l0b3J5IElELlxuXHQgKi9cblx0cHVibGljIGdldElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cblx0ICogQHJldHVybnMgVGhlIHJlcG9zaXRvcnkgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxufVxuXG4vKipcbiAqIEZvbGRlciBvYmplY3RcbiAqICogUmVwcmVzZW50cyBhIENNSVMgZm9sZGVyIG9iamVjdCwgYWxsb3dpbmcgb3BlcmF0aW9ucyBsaWtlIGNyZWF0aW5nIGNoaWxkcmVuLCBkZWxldGluZywgYW5kIHJlbmFtaW5nLlxuICovXG5leHBvcnQgY2xhc3MgRm9sZGVyIHtcblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBuYW1lLlxuXHQgKi9cblx0cHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TmFtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgZm9sZGVyIHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGZvbGRlciAobXVzdCBpbmNsdWRlIHtAbGluayBDbWlzLk5BTUV9KS5cblx0ICogQHJldHVybnMgVGhlIG5ld2x5IGNyZWF0ZWQge0BsaW5rIEZvbGRlcn0gb2JqZWN0LlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHdyaXRlIGFjY2VzcyBpcyBub3QgYWxsb3dlZC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVGb2xkZXIocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IEZvbGRlciB7XG5cdFx0dmFyIGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dmFyIG1hcEluc3RhbmNlID0gbmV3IEhhc2hNYXAoKTtcblx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhciBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVGb2xkZXIobWFwSW5zdGFuY2UpO1xuXHRcdHZhciBmb2xkZXIgPSBuZXcgRm9sZGVyKG5hdGl2ZSwgbnVsbCk7XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRG9jdW1lbnQocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY29udGVudFN0cmVhbTogQ29udGVudFN0cmVhbSwgdmVyc2lvbmluZ1N0YXRlOiBzdHJpbmcpOiBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCBtYXBJbnN0YW5jZSA9IG5ldyBIYXNoTWFwKCk7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHN0YXRlID0gQ21pc0ZhY2FkZS5nZXRWZXJzaW9uaW5nU3RhdGUodmVyc2lvbmluZ1N0YXRlKTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVEb2N1bWVudChtYXBJbnN0YW5jZSwgY29udGVudFN0cmVhbS5uYXRpdmUsIHN0YXRlKTtcblx0XHRyZXR1cm4gbmV3IERvY3VtZW50KG5hdGl2ZSwgbnVsbCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY2hpbGRyZW4gb2YgdGhpcyBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBvZiBnZW5lcmljIHtAbGluayBDbWlzT2JqZWN0fSB3cmFwcGVycyBmb3IgdGhlIGNoaWxkcmVuLlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHJlYWQgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGdldENoaWxkcmVuKCk6IENtaXNPYmplY3RbXSB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9SRUFEKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlJlYWQgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBbXTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0Q2hpbGRyZW4oKTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlSXRlcmF0b3IgPSBjaGlsZHJlbkluc3RhbmNlLml0ZXJhdG9yKCk7XG5cdFx0d2hpbGUgKGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5oYXNOZXh0KCkpIHtcblx0XHRcdGNvbnN0IGNtaXNPYmplY3RJbnN0YW5jZSA9IGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5uZXh0KCk7XG5cdFx0XHRjb25zdCBjbWlzT2JqZWN0ID0gbmV3IENtaXNPYmplY3QoY21pc09iamVjdEluc3RhbmNlKTtcblx0XHRcdGNoaWxkcmVuLnB1c2goY21pc09iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjaGlsZHJlbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBmb2xkZXIgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhpcyBmb2xkZXIgaXMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGl0IGlzIHRoZSByb290IGZvbGRlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzUm9vdEZvbGRlcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNSb290Rm9sZGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGFyZW50IGZvbGRlciBvZiB0aGlzIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIHBhcmVudCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Rm9sZGVyUGFyZW50KCk6IEZvbGRlciB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Rm9sZGVyUGFyZW50KCk7XG5cdFx0cmV0dXJuIG5ldyBGb2xkZXIobmF0aXZlLCBudWxsKTtcblx0fTtcblxuXHQvKipcblx0ICogRGVsZXRlcyB0aGlzIGZvbGRlciAobXVzdCBiZSBlbXB0eSB0byBzdWNjZWVkKS5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZGVsZXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJlbmFtZXMgdGhpcyBmb2xkZXIuXG5cdCAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGZvbGRlci5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhpcyBmb2xkZXIgYW5kIGFsbCBpdHMgY29udGVudHMgcmVjdXJzaXZlbHkuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZVRyZWUoKTogdm9pZCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCB1bmlmaWVkT2JqZWN0RGVsZXRlID0gQ21pc0ZhY2FkZS5nZXRVbmlmaWVkT2JqZWN0RGVsZXRlKCk7XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlVHJlZSh0cnVlLCB1bmlmaWVkT2JqZWN0RGVsZXRlLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0eXBlIGRlZmluaXRpb24gb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlcidzIHtAbGluayBUeXBlRGVmaW5pdGlvbn0uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VHlwZSgpOiBUeXBlRGVmaW5pdGlvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0VHlwZSgpO1xuXHRcdHJldHVybiBuZXcgVHlwZURlZmluaXRpb24obmF0aXZlKTtcblx0fVxufVxuXG4vKipcbiAqIENtaXNPYmplY3Qgb2JqZWN0XG4gKiAqIEEgZ2VuZXJpYyB3cmFwcGVyIGZvciBDTUlTIG9iamVjdHMsIHVzZWQgcHJpbWFyaWx5IGZvciBjaGlsZHJlbiBsaXN0cy5cbiAqL1xuY2xhc3MgQ21pc09iamVjdCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBDTUlTIG9iamVjdC4gSGFuZGxlcyBkaWZmZXJlbmNlcyBpbiBuYXRpdmUgQ01JUyBpbXBsZW1lbnRhdGlvbnMuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgcGF0aC5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Ly90aGlzIGlzIGNhdXNlZCBieSBoYXZpbmcgZGlmZmVyZW50IHVuZGVybHlpbmcgbmF0aXZlIG9iamVjdHMgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cblx0XHRpZiAodGhpcy5uYXRpdmUuZ2V0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGgoKTtcblx0XHR9XG5cblx0XHQvL0FwYWNoZSBDaGVtaXN0cnkgQ21pc09iamVjdCBoYXMgbm8gZ2V0UGF0aCgpIGJ1dCBnZXRQYXRocygpIC0gaHR0cHM6Ly9jaGVtaXN0cnkuYXBhY2hlLm9yZy9kb2NzL2NtaXMtc2FtcGxlcy9zYW1wbGVzL3JldHJpZXZlLW9iamVjdHMvaW5kZXguaHRtbFxuXHRcdGlmICh0aGlzLm5hdGl2ZS5nZXRQYXRocykge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGhzKClbMF07XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQYXRoIG5vdCBmb3VuZCBmb3IgQ21pc09iamVjdCB3aXRoIGlkICR7dGhpcy5nZXRJZCgpfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBUaGUgb2JqZWN0J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhlIENNSVMgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5kZWxldGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW5hbWVzIHRoZSBDTUlTIG9iamVjdC5cblx0ICogQHBhcmFtIG5ld05hbWUgVGhlIG5ldyBuYW1lIGZvciB0aGUgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5yZW5hbWUobmV3TmFtZSk7XG5cdH1cblxufVxuXG4vKipcbiAqIE9iamVjdEZhY3Rvcnkgb2JqZWN0XG4gKiAqIFByb3ZpZGVzIG1ldGhvZHMgdG8gY3JlYXRlIGNvbnRlbnQgc3RyZWFtcy5cbiAqL1xuY2xhc3MgT2JqZWN0RmFjdG9yeSB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgY29udGVudCBzdHJlYW0gaW5zdGFuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgb3IgdXBkYXRlIGRvY3VtZW50IGNvbnRlbnQuXG5cdCAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGxlbmd0aCBUaGUgc2l6ZSBvZiB0aGUgY29udGVudCBzdHJlYW0gaW4gYnl0ZXMuXG5cdCAqIEBwYXJhbSBtaW1ldHlwZSBUaGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50LlxuXHQgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIGlucHV0IHN0cmVhbSBjb250YWluaW5nIHRoZSBkYXRhLlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29udGVudFN0cmVhbX0gb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIG1pbWV0eXBlOiBzdHJpbmcsIGlucHV0U3RyZWFtOiBzdHJlYW1zLklucHV0U3RyZWFtKTogQ29udGVudFN0cmVhbSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWUsIGxlbmd0aCwgbWltZXR5cGUsIGlucHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0cmV0dXJuIG5ldyBDb250ZW50U3RyZWFtKG5hdGl2ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBDb250ZW50U3RyZWFtIG9iamVjdFxuICogKiBSZXByZXNlbnRzIHRoZSBiaW5hcnkgY29udGVudCBzdHJlYW0gb2YgYSBDTUlTIERvY3VtZW50LlxuICovXG5jbGFzcyBDb250ZW50U3RyZWFtIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgSmF2YS1iYWNrZWQgaW5wdXQgc3RyZWFtIGZvciByZWFkaW5nIHRoZSBjb250ZW50LlxuXHQgKiBAcmV0dXJucyBBbiB7QGxpbmsgc3RyZWFtcy5JbnB1dFN0cmVhbX0gd3JhcHBlci5cblx0ICovXG5cdHB1YmxpYyBnZXRTdHJlYW0oKTogc3RyZWFtcy5JbnB1dFN0cmVhbSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0U3RyZWFtKCk7XG5cdFx0cmV0dXJuIG5ldyBzdHJlYW1zLklucHV0U3RyZWFtKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS5cblx0ICogQHJldHVybnMgVGhlIE1JTUUgdHlwZSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TWltZVR5cGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TWltZVR5cGUoKTtcblx0fVxufVxuXG4vKipcbiAqIERvY3VtZW50IG9iamVjdFxuICogKiBSZXByZXNlbnRzIGEgQ01JUyBkb2N1bWVudCBvYmplY3QsIGFsbG93aW5nIG9wZXJhdGlvbnMgbGlrZSByZWFkaW5nIGNvbnRlbnQsIGRlbGV0aW5nLCBhbmQgcmVuYW1pbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50IG5hbWUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXROYW1lKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBkZWZpbml0aW9uIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBhdGggb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIHRoaXMgZG9jdW1lbnQuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBhbGxvd2VkID0gQ21pc0ZhY2FkZS5pc0FsbG93ZWQodGhpcy5nZXRQYXRoKCksIENtaXMuTUVUSE9EX1dSSVRFKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIldyaXRlIGFjY2VzcyBub3QgYWxsb3dlZCBvbjogXCIgKyB0aGlzLmdldFBhdGgoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5kZWxldGUodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluYXJ5IGNvbnRlbnQgc3RyZWFtIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIHtAbGluayBDb250ZW50U3RyZWFtfSBvYmplY3QsIG9yIGBudWxsYCBpZiB0aGUgZG9jdW1lbnQgaGFzIG5vIGNvbnRlbnQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udGVudFN0cmVhbSgpOiBDb250ZW50U3RyZWFtIHwgbnVsbCB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Q29udGVudFN0cmVhbSgpO1xuXHRcdGlmIChuYXRpdmUgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBuZXcgQ29udGVudFN0cmVhbShuYXRpdmUpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZG9jdW1lbnQncyBjb250ZW50IHN0cmVhbSBpbiBieXRlcy5cblx0ICogQHJldHVybnMgVGhlIHNpemUgaW4gYnl0ZXMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0U2l6ZSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTaXplKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVuYW1lcyB0aGlzIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gbmV3TmFtZSBUaGUgbmV3IG5hbWUgZm9yIHRoZSBkb2N1bWVudC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZGVmaW5pdGlvbiBvZiBhIENNSVMgb2JqZWN0IHR5cGUgKGUuZy4sIGNtaXM6ZG9jdW1lbnQsIGNtaXM6Zm9sZGVyKS5cbiAqL1xuY2xhc3MgVHlwZURlZmluaXRpb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB1bmlxdWUgSUQgb2YgdGhlIG9iamVjdCB0eXBlIChlLmcuLCAnY21pczpkb2N1bWVudCcpLlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gQ21pcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQU1BLFlBQVksYUFBYTtBQUN6QixNQUFNLGFBQWEsS0FBSyxLQUFLLHFEQUFxRDtBQUNsRixNQUFNLE9BQU8sS0FBSyxLQUFLLHNCQUFzQjtBQUM3QyxNQUFNLFVBQVUsS0FBSyxLQUFLLG1CQUFtQjtBQUV0QyxNQUFNLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTWpCLE9BQXVCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlyQyxPQUF1QixlQUFlO0FBQUE7QUFBQTtBQUFBLEVBSXRDLE9BQXVCLE9BQU87QUFBQTtBQUFBLEVBRTlCLE9BQXVCLFlBQVk7QUFBQTtBQUFBLEVBRW5DLE9BQXVCLGlCQUFpQjtBQUFBO0FBQUEsRUFFeEMsT0FBdUIsZUFBZTtBQUFBO0FBQUEsRUFFdEMsT0FBdUIsYUFBYTtBQUFBO0FBQUEsRUFFcEMsT0FBdUIsZ0JBQWdCO0FBQUE7QUFBQSxFQUV2QyxPQUF1QixtQkFBbUI7QUFBQTtBQUFBLEVBRTFDLE9BQXVCLHlCQUF5QjtBQUFBO0FBQUEsRUFFaEQsT0FBdUIsZUFBZTtBQUFBO0FBQUE7QUFBQSxFQUl0QyxPQUF1QixlQUFlO0FBQUE7QUFBQSxFQUV0QyxPQUF1QixvQkFBb0I7QUFBQTtBQUFBLEVBRTNDLE9BQXVCLG1CQUFtQjtBQUFBO0FBQUEsRUFFMUMsT0FBdUIsMEJBQTBCO0FBQUE7QUFBQSxFQUVqRCxPQUF1QixnQkFBZ0I7QUFBQTtBQUFBLEVBRXZDLE9BQXVCLG9CQUFvQjtBQUFBO0FBQUEsRUFFM0MsT0FB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