@aws-cdk/aws-bedrock-agentcore-alpha 2.253.0-alpha.0 → 2.254.0-alpha.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 (78) hide show
  1. package/.jsii +17116 -11830
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/README.md +140 -10
  4. package/lib/evaluation/custom-evaluator.d.ts +9 -0
  5. package/lib/evaluation/custom-evaluator.js +8 -2
  6. package/lib/evaluation/data-source.js +1 -1
  7. package/lib/evaluation/evaluator-base.js +1 -1
  8. package/lib/evaluation/evaluator-config.js +2 -2
  9. package/lib/evaluation/evaluator.js +1 -1
  10. package/lib/evaluation/online-evaluation-base.js +1 -1
  11. package/lib/evaluation/online-evaluation.d.ts +9 -0
  12. package/lib/evaluation/online-evaluation.js +8 -2
  13. package/lib/evaluation/types.js +5 -5
  14. package/lib/evaluation/validation-helpers.d.ts +8 -0
  15. package/lib/evaluation/validation-helpers.js +62 -1
  16. package/lib/gateway/gateway-base.js +1 -1
  17. package/lib/gateway/gateway.d.ts +3 -2
  18. package/lib/gateway/gateway.js +3 -3
  19. package/lib/gateway/inbound-auth/authorizer.js +4 -4
  20. package/lib/gateway/inbound-auth/custom-claim.js +1 -1
  21. package/lib/gateway/interceptor.js +1 -1
  22. package/lib/gateway/outbound-auth/api-key.d.ts +13 -4
  23. package/lib/gateway/outbound-auth/api-key.js +63 -21
  24. package/lib/gateway/outbound-auth/credential-provider.d.ts +48 -4
  25. package/lib/gateway/outbound-auth/credential-provider.js +49 -2
  26. package/lib/gateway/outbound-auth/iam-role.d.ts +4 -3
  27. package/lib/gateway/outbound-auth/iam-role.js +3 -5
  28. package/lib/gateway/outbound-auth/oauth.d.ts +11 -3
  29. package/lib/gateway/outbound-auth/oauth.js +70 -20
  30. package/lib/gateway/perms.d.ts +15 -3
  31. package/lib/gateway/perms.js +24 -9
  32. package/lib/gateway/protocol.js +2 -2
  33. package/lib/gateway/targets/schema/api-schema.js +4 -4
  34. package/lib/gateway/targets/schema/tool-schema.js +4 -4
  35. package/lib/gateway/targets/target-base.js +1 -1
  36. package/lib/gateway/targets/target-configuration.js +6 -6
  37. package/lib/gateway/targets/target.js +3 -3
  38. package/lib/identity/api-key-credential-provider.d.ts +217 -0
  39. package/lib/identity/api-key-credential-provider.js +249 -0
  40. package/lib/identity/grant-helpers.d.ts +74 -0
  41. package/lib/identity/grant-helpers.js +132 -0
  42. package/lib/identity/oauth2-credential-provider.d.ts +679 -0
  43. package/lib/identity/oauth2-credential-provider.js +863 -0
  44. package/lib/identity/perms.d.ts +119 -0
  45. package/lib/identity/perms.js +178 -0
  46. package/lib/identity/validation-helpers.d.ts +61 -0
  47. package/lib/identity/validation-helpers.js +156 -0
  48. package/lib/identity/workload-identity.d.ts +186 -0
  49. package/lib/identity/workload-identity.js +212 -0
  50. package/lib/index.d.ts +4 -0
  51. package/lib/index.js +8 -1
  52. package/lib/memory/memory-strategy.js +1 -1
  53. package/lib/memory/memory.js +2 -2
  54. package/lib/memory/strategies/managed-strategy.js +1 -1
  55. package/lib/memory/strategies/self-managed-strategy.js +1 -1
  56. package/lib/memory/validation-helpers.js +2 -2
  57. package/lib/network/network-configuration.js +4 -4
  58. package/lib/policy/policy-base.js +1 -1
  59. package/lib/policy/policy-engine-base.js +1 -1
  60. package/lib/policy/policy-engine.js +1 -1
  61. package/lib/policy/policy-statement.d.ts +2 -1
  62. package/lib/policy/policy-statement.js +14 -12
  63. package/lib/policy/policy-types.js +1 -1
  64. package/lib/policy/policy.js +1 -1
  65. package/lib/runtime/inbound-auth/custom-claim.js +1 -1
  66. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
  67. package/lib/runtime/observability.js +2 -2
  68. package/lib/runtime/runtime-artifact.d.ts +11 -3
  69. package/lib/runtime/runtime-artifact.js +12 -4
  70. package/lib/runtime/runtime-base.js +1 -1
  71. package/lib/runtime/runtime-endpoint-base.js +1 -1
  72. package/lib/runtime/runtime-endpoint.js +1 -1
  73. package/lib/runtime/runtime.js +1 -1
  74. package/lib/runtime/types.d.ts +7 -1
  75. package/lib/runtime/types.js +7 -1
  76. package/lib/tools/browser.js +2 -2
  77. package/lib/tools/code-interpreter.js +2 -2
  78. package/package.json +18 -10
@@ -58,7 +58,7 @@ const validation_helpers_1 = require("./validation-helpers");
58
58
  *
59
59
  */
60
60
  class PolicyEngineMode {
61
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyEngineMode", version: "2.253.0-alpha.0" };
61
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.PolicyEngineMode", version: "2.254.0-alpha.0" };
62
62
  /**
63
63
  * Evaluates actions and adds traces but does not enforce decisions.
64
64
  * Use this mode for testing and validation before enabling enforcement.
@@ -120,7 +120,7 @@ let Gateway = (() => {
120
120
  Gateway = _classThis = _classDescriptor.value;
121
121
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
122
122
  }
123
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Gateway", version: "2.253.0-alpha.0" };
123
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Gateway", version: "2.254.0-alpha.0" };
124
124
  /** Uniquely identifies this class. */
125
125
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Gateway';
126
126
  /**
@@ -767,4 +767,4 @@ let Gateway = (() => {
767
767
  return Gateway = _classThis;
768
768
  })();
769
769
  exports.Gateway = Gateway;
770
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdhdGV3YXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXdEO0FBRXhELHFFQUFxRTtBQUNyRSxtREFBbUQ7QUFDbkQsMkNBQTJDO0FBRzNDLDJDQUErQztBQUMvQyx3REFBOEQ7QUFDOUQsNEVBQTREO0FBQzVELDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFJMUUsaURBQTZDO0FBRTdDLDBEQUFxRjtBQUVyRiwrQ0FBa0Q7QUFFbEQsbUNBQXFFO0FBRXJFLHlDQUFnRztBQUloRyw2Q0FBaUQ7QUFFakQsNkRBQWlGO0FBRWpGOzs7R0FHRztBQUNILE1BQWEsZ0JBQWdCOztJQUMzQjs7O09BR0c7SUFDSSxNQUFNLENBQVUsUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbkU7O09BRUc7SUFDSSxNQUFNLENBQVUsT0FBTyxHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFakU7O09BRUc7SUFDYSxLQUFLLENBQVM7SUFFOUIsWUFBbUIsS0FBYTtRQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7QUFuQkgsNENBb0JDO0FBeVVEOzsrRUFFK0U7QUFDL0U7Ozs7OztHQU1HO0lBRVUsT0FBTzs0QkFEbkIsb0NBQWtCOzs7O3NCQUNVLDBCQUFXOzs7Ozs7Ozt1QkFBbkIsU0FBUSxXQUFXOzs7OzJDQTBSckMsSUFBQSxrQ0FBYyxHQUFFOzRDQStCaEIsSUFBQSxrQ0FBYyxHQUFFOzJDQXlCaEIsSUFBQSxrQ0FBYyxHQUFFOzhDQThCaEIsSUFBQSxrQ0FBYyxHQUFFOytDQThCaEIsSUFBQSxrQ0FBYyxHQUFFOzBDQXlPaEIsSUFBQSxrQ0FBYyxHQUFFO1lBNVZqQixnTUFBTyxlQUFlLDZEQW9CckI7WUFXRCxtTUFBTyxnQkFBZ0IsNkRB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QztZQUVELElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNqRDs7WUE5ckJVLHVEQUFPOzs7OztBQUFQLDBCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIFRva2VuLCBMYXp5LCBOYW1lcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSVJlc3RBcGkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQgKiBhcyBiZWRyb2NrYWdlbnRjb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCAqIGFzIGNvZ25pdG8gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZ25pdG8nO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgdHlwZSB7IElGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2Vycm9ycyc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuLy8gSW50ZXJuYWwgaW1wb3J0c1xuaW1wb3J0IHR5cGUgeyBHYXRld2F5RXhjZXB0aW9uTGV2ZWwsIElHYXRld2F5IH0gZnJvbSAnLi9nYXRld2F5LWJhc2UnO1xuaW1wb3J0IHsgR2F0ZXdheUJhc2UgfSBmcm9tICcuL2dhdGV3YXktYmFzZSc7XG5pbXBvcnQgdHlwZSB7IElHYXRld2F5QXV0aG9yaXplckNvbmZpZyB9IGZyb20gJy4vaW5ib3VuZC1hdXRoL2F1dGhvcml6ZXInO1xuaW1wb3J0IHsgR2F0ZXdheUF1dGhvcml6ZXIsIEdhdGV3YXlBdXRob3JpemVyVHlwZSB9IGZyb20gJy4vaW5ib3VuZC1hdXRoL2F1dGhvcml6ZXInO1xuaW1wb3J0IHR5cGUgeyBJSW50ZXJjZXB0b3IsIEludGVyY2VwdG9yQmluZENvbmZpZyB9IGZyb20gJy4vaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgSW50ZXJjZXB0aW9uUG9pbnQgfSBmcm9tICcuL2ludGVyY2VwdG9yJztcbmltcG9ydCB0eXBlIHsgSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZyB9IGZyb20gJy4vb3V0Ym91bmQtYXV0aC9jcmVkZW50aWFsLXByb3ZpZGVyJztcbmltcG9ydCB7IEdBVEVXQVlfQVNTVU1FX1JPTEUsIEdBVEVXQVlfS01TX0tFWV9QRVJNUyB9IGZyb20gJy4vcGVybXMnO1xuaW1wb3J0IHR5cGUgeyBJR2F0ZXdheVByb3RvY29sQ29uZmlnIH0gZnJvbSAnLi9wcm90b2NvbCc7XG5pbXBvcnQgeyBNY3BHYXRld2F5U2VhcmNoVHlwZSwgTWNwUHJvdG9jb2xDb25maWd1cmF0aW9uLCBNQ1BQcm90b2NvbFZlcnNpb24gfSBmcm9tICcuL3Byb3RvY29sJztcbmltcG9ydCB0eXBlIHsgSVBvbGljeUVuZ2luZSB9IGZyb20gJy4uL3BvbGljeS9wb2xpY3ktZW5naW5lLWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBBcGlTY2hlbWEgfSBmcm9tICcuL3RhcmdldHMvc2NoZW1hL2FwaS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBUb29sU2NoZW1hIH0gZnJvbSAnLi90YXJnZXRzL3NjaGVtYS90b29sLXNjaGVtYSc7XG5pbXBvcnQgeyBHYXRld2F5VGFyZ2V0IH0gZnJvbSAnLi90YXJnZXRzL3RhcmdldCc7XG5pbXBvcnQgdHlwZSB7IEFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbiwgTWV0YWRhdGFDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90YXJnZXRzL3RhcmdldC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuXG4vKipcbiAqIFRoZSBlbmZvcmNlbWVudCBtb2RlIGZvciBhIHBvbGljeSBlbmdpbmUgYXNzb2NpYXRlZCB3aXRoIGEgZ2F0ZXdheS5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lFbmdpbmVNb2RlIHtcbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhY3Rpb25zIGFuZCBhZGRzIHRyYWNlcyBidXQgZG9lcyBub3QgZW5mb3JjZSBkZWNpc2lvbnMuXG4gICAqIFVzZSB0aGlzIG1vZGUgZm9yIHRlc3RpbmcgYW5kIHZhbGlkYXRpb24gYmVmb3JlIGVuYWJsaW5nIGVuZm9yY2VtZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMT0dfT05MWSA9IG5ldyBQb2xpY3lFbmdpbmVNb2RlKCdMT0dfT05MWScpO1xuXG4gIC8qKlxuICAgKiBFbmZvcmNlcyBkZWNpc2lvbnMgYnkgYWxsb3dpbmcgb3IgZGVueWluZyBhZ2VudCBvcGVyYXRpb25zIGJhc2VkIG9uIENlZGFyIHBvbGljaWVzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkZPUkNFID0gbmV3IFBvbGljeUVuZ2luZU1vZGUoJ0VORk9SQ0UnKTtcblxuICAvKipcbiAgICogVGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcG9saWN5IGVuZ2luZSBtb2RlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhc3NvY2lhdGluZyBhIHBvbGljeSBlbmdpbmUgd2l0aCBhIGdhdGV3YXkuXG4gKlxuICogV2hlbiBjb25maWd1cmVkLCB0aGUgcG9saWN5IGVuZ2luZSBpbnRlcmNlcHRzIGFsbCBhZ2VudCByZXF1ZXN0cyB0aHJvdWdoIHRoaXNcbiAqIGdhdGV3YXkgYW5kIGV2YWx1YXRlcyB0aGVtIGFnYWluc3QgdGhlIGRlZmluZWQgQ2VkYXIgcG9saWNpZXMuXG4gKiBbZGlzYWJsZS1hd3NsaW50OnByZWZlci1yZWYtaW50ZXJmYWNlXVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlQb2xpY3lFbmdpbmVDb25maWcge1xuICAvKipcbiAgICogVGhlIHBvbGljeSBlbmdpbmUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBnYXRld2F5LlxuICAgKiBbZGlzYWJsZS1hd3NsaW50OnByZWZlci1yZWYtaW50ZXJmYWNlXVxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RW5naW5lOiBJUG9saWN5RW5naW5lO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5mb3JjZW1lbnQgbW9kZSBmb3IgdGhlIHBvbGljeSBlbmdpbmUuXG4gICAqXG4gICAqIC0gYExPR19PTkxZYDogRXZhbHVhdGVzIGFuZCBsb2dzIGRlY2lzaW9ucyB3aXRob3V0IGVuZm9yY2luZyB0aGVtLiBVc2UgZm9yIHRlc3RpbmcuXG4gICAqIC0gYEVORk9SQ0VgOiBBY3RpdmVseSBhbGxvd3Mgb3IgZGVuaWVzIHJlcXVlc3RzIGJhc2VkIG9uIENlZGFyIHBvbGljeSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBQb2xpY3lFbmdpbmVNb2RlLkxPR19PTkxZXG4gICAqL1xuICByZWFkb25seSBtb2RlPzogUG9saWN5RW5naW5lTW9kZTtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGEgTGFtYmRhIHRhcmdldCB0byBhIGdhdGV3YXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRMYW1iZGFUYXJnZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSBhbmQgLSAoaHlwaGVuKVxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlUYXJnZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSBsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbCBzY2hlbWEgZGVmaW5pbmcgdGhlIGF2YWlsYWJsZSB0b29sc1xuICAgKi9cbiAgcmVhZG9ubHkgdG9vbFNjaGVtYTogVG9vbFNjaGVtYTtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIEBkZWZhdWx0IC0gW0dhdGV3YXlDcmVkZW50aWFsUHJvdmlkZXIuaWFtUm9sZSgpXVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM/OiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGFuIE9wZW5BUEkgdGFyZ2V0IHRvIGEgZ2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZE9wZW5BcGlUYXJnZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSBhbmQgLSAoaHlwaGVuKVxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlUYXJnZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT3BlbkFQSSBzY2hlbWEgZGVmaW5pbmcgdGhlIEFQSVxuICAgKi9cbiAgcmVhZG9ubHkgYXBpU2NoZW1hOiBBcGlTY2hlbWE7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdmFsaWRhdGUgdGhlIE9wZW5BUEkgc2NoZW1hIG9yIG5vdFxuICAgKiBOb3RlOiBWYWxpZGF0aW9uIGlzIG9ubHkgcGVyZm9ybWVkIGZvciBpbmxpbmUgYW5kIGFzc2V0LWJhc2VkIHNjaGVtYSBhbmQgIGR1cmluZyBDREsgc3ludGhlc2lzLlxuICAgKiBTMyBzY2hlbWFzIGNhbm5vdCBiZSB2YWxpZGF0ZWQgYXQgc3ludGhlc2lzIHRpbWUuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRlT3BlbkFwaVNjaGVtYT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgcHJvdmlkZXJzIGZvciBhdXRoZW50aWNhdGlvblxuICAgKiBAZGVmYXVsdCAtIFtHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmlhbVJvbGUoKV1cbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zPzogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhIFNtaXRoeSB0YXJnZXQgdG8gYSBnYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkU21pdGh5VGFyZ2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkgYW5kIC0gKGh5cGhlbilcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNtaXRoeSBtb2RlbCBkZWZpbmluZyB0aGUgQVBJXG4gICAqL1xuICByZWFkb25seSBzbWl0aHlNb2RlbDogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBDcmVkZW50aWFsIHByb3ZpZGVycyBmb3IgYXV0aGVudGljYXRpb25cbiAgICogQGRlZmF1bHQgLSBbR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5pYW1Sb2xlKCldXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz86IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhZGRpbmcgYW4gTUNQIFNlcnZlciB0YXJnZXQgdG8gYSBnYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkTWNwU2VydmVyVGFyZ2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkgYW5kIC0gKGh5cGhlbilcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEhUVFBTIGVuZHBvaW50IFVSTCBvZiB0aGUgTUNQIHNlcnZlclxuICAgKlxuICAgKiBUaGUgZW5kcG9pbnQgbXVzdDpcbiAgICogLSBVc2UgSFRUUFMgcHJvdG9jb2xcbiAgICogLSBCZSBwcm9wZXJseSBVUkwtZW5jb2RlZFxuICAgKiAtIFBvaW50IHRvIGFuIE1DUCBzZXJ2ZXIgdGhhdCBpbXBsZW1lbnRzIHRvb2wgY2FwYWJpbGl0aWVzXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVkZW50aWFsIHByb3ZpZGVycyBmb3IgYXV0aGVudGljYXRpb25cbiAgICpcbiAgICogTUNQIHNlcnZlcnMgcmVxdWlyZSBleHBsaWNpdCBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBPQXV0aDIgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgb3ZlciBOb0F1dGguXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhbiBBUEkgR2F0ZXdheSB0YXJnZXQgdG8gYSBnYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQXBpR2F0ZXdheVRhcmdldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpIGFuZCAtIChoeXBoZW4pXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheVRhcmdldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBSRVNUIEFQSSB0byBpbnRlZ3JhdGUgd2l0aFxuICAgKiBNdXN0IGJlIGluIHRoZSBzYW1lIGFjY291bnQgYW5kIHJlZ2lvbiBhcyB0aGUgZ2F0ZXdheVxuICAgKiBbZGlzYWJsZS1hd3NsaW50OnByZWZlci1yZWYtaW50ZXJmYWNlXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdEFwaTogSVJlc3RBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFnZSBuYW1lIG9mIHRoZSBSRVNUIEFQSVxuICAgKiBAZGVmYXVsdCAtIFVzZXMgdGhlIGRlcGxveW1lbnQgc3RhZ2UgZnJvbSB0aGUgUmVzdEFwaSAocmVzdEFwaS5kZXBsb3ltZW50U3RhZ2Uuc3RhZ2VOYW1lKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvb2wgY29uZmlndXJhdGlvbiBkZWZpbmluZyB3aGljaCBvcGVyYXRpb25zIHRvIGV4cG9zZVxuICAgKi9cbiAgcmVhZG9ubHkgYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uOiBBcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgcHJvdmlkZXJzIGZvciBhdXRoZW50aWNhdGlvblxuICAgKiBBUEkgR2F0ZXdheSB0YXJnZXRzIHN1cHBvcnQgSUFNIGFuZCBBUEkga2V5IGF1dGhlbnRpY2F0aW9uXG4gICAqIEBkZWZhdWx0IC0gRW1wdHkgYXJyYXkgKHNlcnZpY2UgaGFuZGxlcyBJQU0gYXV0b21hdGljYWxseSlcbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zPzogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBjb25maWd1cmF0aW9uIGZvciBwYXNzaW5nIGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQWxsb3dzIHlvdSB0byBwYXNzIGFkZGl0aW9uYWwgY29udGV4dCB0aHJvdWdoIGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQGRlZmF1bHQgLSBObyBtZXRhZGF0YSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YUNvbmZpZ3VyYXRpb24/OiBNZXRhZGF0YUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgYSBHYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpIGFuZCAtIChoeXBoZW4pXG4gICAqIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB5b3VyIGFjY291bnRcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpLCAtIChoeXBoZW4pIGFuZCBzcGFjZXNcbiAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBoYXZlIHVwIHRvIDIwMCBjaGFyYWN0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhdGV3YXlcbiAgICogQGRlZmF1bHQgLSBBIGRlZmF1bHQgcHJvdG9jb2wgY29uZmlndXJhdGlvbiB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcgTUNQIHdpdGggZm9sbG93aW5nIHBhcmFtc1xuICAgKiAgc3VwcG9ydGVkVmVyc2lvbnM6IFtNQ1BQcm90b2NvbFZlcnNpb24uTUNQXzIwMjVfMDNfMjZdLFxuICAgKiAgc2VhcmNoVHlwZTogTWNwR2F0ZXdheVNlYXJjaFR5cGUuU0VNQU5USUMsXG4gICAqICBpbnN0cnVjdGlvbnM6IFwiRGVmYXVsdCBnYXRld2F5IHRvIGNvbm5lY3QgdG8gZXh0ZXJuYWwgTUNQIHRvb2xzXCIsXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb24/OiBJR2F0ZXdheVByb3RvY29sQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2F0ZXdheVxuICAgKiBAZGVmYXVsdCAtIEEgZGVmYXVsdCBhdXRob3JpemVyIHdpbGwgYmUgY3JlYXRlZCB1c2luZyBDb2duaXRvXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemVyQ29uZmlndXJhdGlvbj86IElHYXRld2F5QXV0aG9yaXplckNvbmZpZztcblxuICAvKipcbiAgICogVGhlIHZlcmJvc2l0eSBvZiBleGNlcHRpb24gbWVzc2FnZXNcbiAgICogVXNlIERFQlVHIG1vZGUgdG8gc2VlIGdyYW51bGFyIGV4Y2VwdGlvbiBtZXNzYWdlcyBmcm9tIGEgR2F0ZXdheVxuICAgKiBAZGVmYXVsdCAtIEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgc2FuaXRpemVkIGZvciBwcmVzZW50YXRpb24gdG8gZW5kIHVzZXJzXG4gICAqL1xuICByZWFkb25seSBleGNlcHRpb25MZXZlbD86IEdhdGV3YXlFeGNlcHRpb25MZXZlbDtcblxuICAvKipcbiAgICogVGhlIEFXUyBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2F0ZXdheVxuICAgKiBAZGVmYXVsdCAtIE5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgdGhlIGdhdGV3YXkgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlc1xuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUYWdzIGZvciB0aGUgZ2F0ZXdheVxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBHYXRld2F5IHJlc291cmNlXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEludGVyY2VwdG9yIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgZ2F0ZXdheVxuICAgKlxuICAgKiBJbnRlcmNlcHRvcnMgYWxsb3cgeW91IHRvIHJ1biBjdXN0b20gY29kZSBkdXJpbmcgZWFjaCBnYXRld2F5IGludm9jYXRpb246XG4gICAqIC0gUkVRVUVTVCBpbnRlcmNlcHRvcnMgZXhlY3V0ZSBiZWZvcmUgdGhlIGdhdGV3YXkgY2FsbHMgdGhlIHRhcmdldFxuICAgKiAtIFJFU1BPTlNFIGludGVyY2VwdG9ycyBleGVjdXRlIGFmdGVyIHRoZSB0YXJnZXQgcmVzcG9uZHNcbiAgICpcbiAgICogQSBnYXRld2F5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIFJFUVVFU1QgaW50ZXJjZXB0b3IgYW5kIG9uZSBSRVNQT05TRSBpbnRlcmNlcHRvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBpbnRlcmNlcHRvcnNcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2dhdGV3YXktaW50ZXJjZXB0b3JzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGludGVyY2VwdG9yQ29uZmlndXJhdGlvbnM/OiBJSW50ZXJjZXB0b3JbXTtcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBlbmdpbmUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBnYXRld2F5LlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkLCB0aGUgc3BlY2lmaWVkIHBvbGljeSBlbmdpbmUgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBnYXRld2F5LlxuICAgKiBBbGwgYWdlbnQgcmVxdWVzdHMgdGhyb3VnaCB0aGlzIGdhdGV3YXkgd2lsbCBiZSBldmFsdWF0ZWQgYWdhaW5zdCB0aGUgQ2VkYXIgcG9saWNpZXNcbiAgICogZGVmaW5lZCBpbiB0aGUgcG9saWN5IGVuZ2luZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwb2xpY3kgZW5naW5lIChyZXF1ZXN0cyBhcmUgbm90IHN1YmplY3QgdG8gQ2VkYXIgcG9saWN5IGF1dGhvcml6YXRpb24pXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lFbmdpbmVDb25maWd1cmF0aW9uPzogR2F0ZXdheVBvbGljeUVuZ2luZUNvbmZpZztcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgR2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBnYXRld2F5XG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogR2F0ZXdheSByZXNvdXJjZSBmb3IgQVdTIEJlZHJvY2sgQWdlbnQgQ29yZS5cbiAqIFNlcnZlcyBhcyBhbiBpbnRlZ3JhdGlvbiBwb2ludCBiZXR3ZWVuIHlvdXIgYWdlbnQgYW5kIGV4dGVybmFsIHNlcnZpY2VzLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkdhdGV3YXlcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlLWNvbnRyb2wvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlR2F0ZXdheS5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBHYXRld2F5IGV4dGVuZHMgR2F0ZXdheUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5HYXRld2F5JztcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBHYXRld2F5IHVzaW5nIGl0cyBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgR2F0ZXdheVxuICAgKiBAcmV0dXJucyBBbiBJR2F0ZXdheSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGltcG9ydGVkIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUdhdGV3YXlBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogR2F0ZXdheUF0dHJpYnV0ZXMsXG4gICk6IElHYXRld2F5IHtcbiAgICBjbGFzcyBJbXBvcnRlZEdhdGV3YXkgZXh0ZW5kcyBHYXRld2F5QmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUFybiA9IGF0dHJzLmdhdGV3YXlBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUlkID0gYXR0cnMuZ2F0ZXdheUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSBhdHRycy5nYXRld2F5TmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb246IElHYXRld2F5UHJvdG9jb2xDb25maWc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb246IElHYXRld2F5QXV0aG9yaXplckNvbmZpZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGNlcHRpb25MZXZlbCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBrbXNLZXkgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZSA9IGF0dHJzLnJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheVVybCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzUmVhc29uID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuICAgICAgICAvLyBDcmVhdGUgcGxhY2Vob2xkZXIgcHJvdG9jb2wgYW5kIGF1dGhvcml6ZXIgY29uZmlndXJhdGlvbnNcbiAgICAgICAgdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPSBuZXcgTWNwUHJvdG9jb2xDb25maWd1cmF0aW9uKHtcbiAgICAgICAgICBzdXBwb3J0ZWRWZXJzaW9uczogW01DUFByb3RvY29sVmVyc2lvbi5NQ1BfMjAyNV8wM18yNl0sXG4gICAgICAgICAgc2VhcmNoVHlwZTogTWNwR2F0ZXdheVNlYXJjaFR5cGUuU0VNQU5USUMsXG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnSW1wb3J0ZWQgZ2F0ZXdheScsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gR2F0ZXdheUF1dGhvcml6ZXIudXNpbmdBd3NJYW0oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZEdhdGV3YXkoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBnYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnYXRld2F5QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZ2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBJR2F0ZXdheVByb3RvY29sQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF1dGhvcml6ZXJDb25maWd1cmF0aW9uOiBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGNlcHRpb24gbGV2ZWwgZm9yIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhjZXB0aW9uTGV2ZWw/OiBHYXRld2F5RXhjZXB0aW9uTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIGZvciB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIFVSTCBlbmRwb2ludCBmb3IgdGhlIGdhdGV3YXlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdhdGV3YXlVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGdhdGV3YXlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyByZWFzb25zIGZvciB0aGUgZ2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzUmVhc29uPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBnYXRld2F5IHdhcyBjcmVhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBnYXRld2F5IHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBhcHBsaWVkIHRvIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFVzZXIgUG9vbCBjcmVhdGVkIGZvciB0aGUgZ2F0ZXdheSAoaWYgdXNpbmcgZGVmYXVsdCBDb2duaXRvIGF1dGhvcml6ZXIpXG4gICAqL1xuICBwdWJsaWMgdXNlclBvb2w/OiBjb2duaXRvLklVc2VyUG9vbDtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gVXNlciBQb29sIENsaWVudCBjcmVhdGVkIGZvciB0aGUgZ2F0ZXdheSAoaWYgdXNpbmcgZGVmYXVsdCBDb2duaXRvIGF1dGhvcml6ZXIpXG4gICAqL1xuICBwdWJsaWMgdXNlclBvb2xDbGllbnQ/OiBjb2duaXRvLklVc2VyUG9vbENsaWVudDtcblxuICAvKipcbiAgICogVGhlIFJFUVVFU1QgaW50ZXJjZXB0b3IgY29uZmlndXJhdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVxdWVzdEludGVyY2VwdG9yQ29uZmlnPzogSW50ZXJjZXB0b3JCaW5kQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgUkVTUE9OU0UgaW50ZXJjZXB0b3IgY29uZmlndXJhdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZz86IEludGVyY2VwdG9yQmluZENvbmZpZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBlbmdpbmUgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvbGljeUVuZ2luZUNvbmZpZ3VyYXRpb24/OiBHYXRld2F5UG9saWN5RW5naW5lQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBVc2VyIFBvb2wgRG9tYWluIGNyZWF0ZWQgZm9yIHRoZSBnYXRld2F5IChpZiB1c2luZyBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplcilcbiAgICovXG4gIHB1YmxpYyB1c2VyUG9vbERvbWFpbj86IGNvZ25pdG8uSVVzZXJQb29sRG9tYWluO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBSZXNvdXJjZSBTZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGdhdGV3YXkgKGlmIHVzaW5nIGRlZmF1bHQgQ29nbml0byBhdXRob3JpemVyKVxuICAgKi9cbiAgcHVibGljIHJlc291cmNlU2VydmVyPzogY29nbml0by5JVXNlclBvb2xSZXNvdXJjZVNlcnZlcjtcblxuICAvKipcbiAgICogVGhlIE9BdXRoMiB0b2tlbiBlbmRwb2ludCBVUkwgZm9yIGNsaWVudCBjcmVkZW50aWFscyBmbG93LlxuICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0b2tlbkVuZHBvaW50VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT0F1dGgyIHNjb3BlIHN0cmluZ3MgZm9yIGNsaWVudCBjcmVkZW50aWFscyBmbG93LlxuICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvYXV0aFNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHYXRld2F5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiA0OCBjaGFyYWN0ZXJzIGlzIGNob3NlbiBpbnN0ZWFkIG9mIDEwMCBjaGFyYWN0ZXJzIHRoYXQgbWVudGlvbmVkIGluIGRvY3VtZW50YXRpb24gYmVsb3csXG4gICAgICAvLyBkdWUgdG8gZmFpbHVyZSBpbiBDRiBkZXBsb3ltZW50IHdoZW4gbW9yZSB0aGFuIDQ4IGNoYXJhY3RlcnMgdXNlZFxuICAgICAgLy8gQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1iZWRyb2NrYWdlbnRjb3JlLWdhdGV3YXkuaHRtbCNjZm4tYmVkcm9ja2FnZW50Y29yZS1nYXRld2F5LW5hbWVcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZ2F0ZXdheU5hbWUgPz9cbiAgICAgICAgTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNDggfSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXNzaWdubWVudHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHRoaXMubmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMudmFsaWRhdGVHYXRld2F5TmFtZSh0aGlzLm5hbWUpO1xuXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRGVzY3JpcHRpb24odGhpcy5kZXNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5rbXNLZXkgPSBwcm9wcy5rbXNLZXk7XG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZSA/PyB0aGlzLmNyZWF0ZUdhdGV3YXlSb2xlKCk7XG5cbiAgICBpZiAodGhpcy5rbXNLZXkgJiYgdGhpcy5yb2xlKSB7XG4gICAgICB0aGlzLmttc0tleS5ncmFudEVuY3J5cHREZWNyeXB0KHRoaXMucm9sZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPz8gdGhpcy5jcmVhdGVEZWZhdWx0TWNwUHJvdG9jb2xDb25maWd1cmF0aW9uKCk7XG4gICAgaWYgKHByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gcHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRDb2duaXRvQXV0aCA9IHRoaXMuY3JlYXRlRGVmYXVsdENvZ25pdG9BdXRob3JpemVyQ29uZmlnKCk7XG4gICAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gZGVmYXVsdENvZ25pdG9BdXRoLmF1dGhvcml6ZXJDb25maWc7XG4gICAgICB0aGlzLnRva2VuRW5kcG9pbnRVcmwgPSBkZWZhdWx0Q29nbml0b0F1dGgudG9rZW5FbmRwb2ludFVybDtcbiAgICAgIHRoaXMub2F1dGhTY29wZXMgPSBkZWZhdWx0Q29nbml0b0F1dGgub2F1dGhTY29wZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uLmF1dGhvcml6ZXJUeXBlID09PSBHYXRld2F5QXV0aG9yaXplclR5cGUuTk9ORSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQGF3cy1jZGsvYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhOm5vQXV0aEdhdGV3YXknLFxuICAgICAgICAnVGhpcyBnYXRld2F5IGhhcyBubyBpbmJvdW5kIGF1dGhvcml6YXRpb24uIFRoZSBlbmRwb2ludCB3aWxsIGJlIHB1YmxpY2x5IGFjY2Vzc2libGUgd2l0aG91dCBjcmVkZW50aWFscy4gRW5zdXJlIHlvdSBoYXZlIGltcGxlbWVudGVkIGNvbXBlbnNhdGluZyBzZWN1cml0eSBjb250cm9scyBzdWNoIGFzIEdhdGV3YXkgSW50ZXJjZXB0b3JzLiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LWluYm91bmQtYXV0aC5odG1sI2dhdGV3YXktaW5ib3VuZC1hdXRoLW5vbmUnLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5leGNlcHRpb25MZXZlbCA9IHByb3BzLmV4Y2VwdGlvbkxldmVsO1xuXG4gICAgdGhpcy50YWdzID0gcHJvcHMudGFncyA/PyB7fTtcblxuICAgIC8vIEluaXRpYWxpemUgaW50ZXJjZXB0b3JzIGZyb20gcHJvcHNcbiAgICBpZiAocHJvcHMuaW50ZXJjZXB0b3JDb25maWd1cmF0aW9ucykge1xuICAgICAgdGhpcy52YWxpZGF0ZUFuZEluaXRpYWxpemVJbnRlcmNlcHRvcnMocHJvcHMuaW50ZXJjZXB0b3JDb25maWd1cmF0aW9ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5wb2xpY3lFbmdpbmVDb25maWd1cmF0aW9uID0gcHJvcHMucG9saWN5RW5naW5lQ29uZmlndXJhdGlvbjtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEwxIEluc3RhbnRpYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBfcmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5HYXRld2F5KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGF1dGhvcml6ZXJDb25maWd1cmF0aW9uOiB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uLl9yZW5kZXIoKSxcbiAgICAgIGF1dGhvcml6ZXJUeXBlOiB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uLmF1dGhvcml6ZXJUeXBlLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBleGNlcHRpb25MZXZlbDogdGhpcy5leGNlcHRpb25MZXZlbCxcbiAgICAgIGludGVyY2VwdG9yQ29uZmlndXJhdGlvbnM6IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25zKCksXG4gICAgICB9KSxcbiAgICAgIGttc0tleUFybjogdGhpcy5rbXNLZXk/LmtleUFybixcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBvbGljeUVuZ2luZUNvbmZpZ3VyYXRpb246IHRoaXMucG9saWN5RW5naW5lQ29uZmlndXJhdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICBhcm46IHRoaXMucG9saWN5RW5naW5lQ29uZmlndXJhdGlvbi5wb2xpY3lFbmdpbmUucG9saWN5RW5naW5lQXJuLFxuICAgICAgICAgIG1vZGU6ICh0aGlzLnBvbGljeUVuZ2luZUNvbmZpZ3VyYXRpb24ubW9kZSA/PyBQb2xpY3lFbmdpbmVNb2RlLkxPR19PTkxZKS52YWx1ZSxcbiAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24uX3JlbmRlcigpLFxuICAgICAgcHJvdG9jb2xUeXBlOiB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbi5wcm90b2NvbFR5cGUsXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGU/LnJvbGVBcm4sXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLmdhdGV3YXlJZCA9IF9yZXNvdXJjZS5hdHRyR2F0ZXdheUlkZW50aWZpZXI7XG4gICAgdGhpcy5nYXRld2F5QXJuID0gX3Jlc291cmNlLmF0dHJHYXRld2F5QXJuO1xuICAgIHRoaXMuZ2F0ZXdheVVybCA9IF9yZXNvdXJjZS5hdHRyR2F0ZXdheVVybDtcbiAgICB0aGlzLnN0YXR1cyA9IF9yZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gX3Jlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSBfcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgICB0aGlzLnN0YXR1c1JlYXNvbiA9IF9yZXNvdXJjZS5hdHRyU3RhdHVzUmVhc29ucztcblxuICAgIGlmICh0aGlzLnBvbGljeUVuZ2luZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMucG9saWN5RW5naW5lQ29uZmlndXJhdGlvbi5wb2xpY3lFbmdpbmUuZ3JhbnRFdmFsdWF0ZUZvckdhdGV3YXkodGhpcy5yb2xlLCB0aGlzKTtcbiAgICAgIF9yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgTGFtYmRhIHRhcmdldCB0byB0aGlzIGdhdGV3YXlcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBHYXRld2F5VGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWQgZm9yIHRoZSB0YXJnZXRcbiAgICogQHBhcmFtIHByb3BzIFByb3BlcnRpZXMgZm9yIHRoZSBMYW1iZGEgdGFyZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEdhdGV3YXlUYXJnZXRcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRMYW1iZGFUYXJnZXQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWRkTGFtYmRhVGFyZ2V0T3B0aW9ucyxcbiAgKTogR2F0ZXdheVRhcmdldCB7XG4gICAgLy8gTGFtYmRhIGludm9rZSBwZXJtaXNzaW9ucyBhcmUgYXV0b21hdGljYWxseSBncmFudGVkIGluIExhbWJkYVRhcmdldENvbmZpZ3VyYXRpb24uYmluZCgpXG4gICAgLy8gQnVpbGQgdGFyZ2V0IHByb3BzLCBjb25kaXRpb25hbGx5IGluY2x1ZGluZyBjcmVkZW50aWFscyBpZiBhcnJheSBoYXMgaXRlbXNcbiAgICBjb25zdCB0YXJnZXRQcm9wczogYW55ID0ge1xuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZ2F0ZXdheTogdGhpcyxcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiBwcm9wcy5sYW1iZGFGdW5jdGlvbixcbiAgICAgIHRvb2xTY2hlbWE6IHByb3BzLnRvb2xTY2hlbWEsXG4gICAgICAuLi4ocHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMgJiYgcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICA/IHsgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcblxuICAgIGNvbnN0IHRhcmdldCA9IEdhdGV3YXlUYXJnZXQuZm9yTGFtYmRhKHRoaXMsIGlkLCB0YXJnZXRQcm9wcyk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBPcGVuQVBJIHRhcmdldCB0byB0aGlzIGdhdGV3YXlcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBHYXRld2F5VGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWQgZm9yIHRoZSB0YXJnZXRcbiAgICogQHBhcmFtIHByb3BzIFByb3BlcnRpZXMgZm9yIHRoZSBPcGVuQVBJIHRhcmdldFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBHYXRld2F5VGFyZ2V0XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkT3BlbkFwaVRhcmdldChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGRPcGVuQXBpVGFyZ2V0T3B0aW9ucyxcbiAgKTogR2F0ZXdheVRhcmdldCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gR2F0ZXdheVRhcmdldC5mb3JPcGVuQXBpKHRoaXMsIGlkLCB7XG4gICAgICBnYXRld2F5VGFyZ2V0TmFtZTogcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBnYXRld2F5OiB0aGlzLFxuICAgICAgYXBpU2NoZW1hOiBwcm9wcy5hcGlTY2hlbWEsXG4gICAgICB2YWxpZGF0ZU9wZW5BcGlTY2hlbWE6IHByb3BzLnZhbGlkYXRlT3BlbkFwaVNjaGVtYSxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyxcbiAgICB9KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgU21pdGh5IHRhcmdldCB0byB0aGlzIGdhdGV3YXlcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBHYXRld2F5VGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWQgZm9yIHRoZSB0YXJnZXRcbiAgICogQHBhcmFtIHByb3BzIFByb3BlcnRpZXMgZm9yIHRoZSBTbWl0aHkgdGFyZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEdhdGV3YXlUYXJnZXRcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRTbWl0aHlUYXJnZXQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWRkU21pdGh5VGFyZ2V0T3B0aW9ucyxcbiAgKTogR2F0ZXdheVRhcmdldCB7XG4gICAgLy8gQnVpbGQgdGFyZ2V0IHByb3BzLCBjb25kaXRpb25hbGx5IGluY2x1ZGluZyBjcmVkZW50aWFscyBpZiBhcnJheSBoYXMgaXRlbXNcbiAgICBjb25zdCB0YXJnZXRQcm9wczogYW55ID0ge1xuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZ2F0ZXdheTogdGhpcyxcbiAgICAgIHNtaXRoeU1vZGVsOiBwcm9wcy5zbWl0aHlNb2RlbCxcbiAgICAgIC4uLihwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyAmJiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgID8geyBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gR2F0ZXdheVRhcmdldC5mb3JTbWl0aHkodGhpcywgaWQsIHRhcmdldFByb3BzKTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIE1DUCBzZXJ2ZXIgdGFyZ2V0IHRvIHRoaXMgZ2F0ZXdheVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIEdhdGV3YXlUYXJnZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZCBmb3IgdGhlIHRhcmdldFxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIE1DUCBzZXJ2ZXIgdGFyZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEdhdGV3YXlUYXJnZXRcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2dhdGV3YXktdGFyZ2V0LU1DUHNlcnZlcnMuaHRtbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZE1jcFNlcnZlclRhcmdldChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGRNY3BTZXJ2ZXJUYXJnZXRPcHRpb25zLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICAvLyBCdWlsZCB0YXJnZXQgcHJvcHMsIGNvbmRpdGlvbmFsbHkgaW5jbHVkaW5nIGNyZWRlbnRpYWxzIGlmIGFycmF5IGhhcyBpdGVtc1xuICAgIGNvbnN0IHRhcmdldFByb3BzOiBhbnkgPSB7XG4gICAgICBnYXRld2F5VGFyZ2V0TmFtZTogcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBnYXRld2F5OiB0aGlzLFxuICAgICAgZW5kcG9pbnQ6IHByb3BzLmVuZHBvaW50LFxuICAgICAgLi4uKHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zICYmIHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG5cbiAgICBjb25zdCB0YXJnZXQgPSBHYXRld2F5VGFyZ2V0LmZvck1jcFNlcnZlcih0aGlzLCBpZCwgdGFyZ2V0UHJvcHMpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gQVBJIEdhdGV3YXkgdGFyZ2V0IHRvIHRoaXMgZ2F0ZXdheVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIEdhdGV3YXlUYXJnZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZCBmb3IgdGhlIHRhcmdldFxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIEFQSSBHYXRld2F5IHRhcmdldFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBHYXRld2F5VGFyZ2V0XG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LXRhcmdldC1hcGktZ2F0ZXdheS5odG1sXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkQXBpR2F0ZXdheVRhcmdldChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGRBcGlHYXRld2F5VGFyZ2V0T3B0aW9ucyxcbiAgKTogR2F0ZXdheVRhcmdldCB7XG4gICAgLy8gQVBJIEdhdGV3YXkgdGFyZ2V0cyByZXF1aXJlIGV4cGxpY2l0IGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbiBvciBkZWZhdWx0cyB0byBJQU1cbiAgICAvLyBHZXRFeHBvcnQgYW5kIGV4ZWN1dGUtYXBpOkludm9rZSBwZXJtaXNzaW9ucyBhcmUgYXV0b21hdGljYWxseSBncmFudGVkIGluIEFwaUdhdGV3YXlUYXJnZXRDb25maWd1cmF0aW9uLmJpbmQoKVxuICAgIGNvbnN0IHRhcmdldCA9IEdhdGV3YXlUYXJnZXQuZm9yQXBpR2F0ZXdheSh0aGlzLCBpZCwge1xuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZ2F0ZXdheTogdGhpcyxcbiAgICAgIHJlc3RBcGk6IHByb3BzLnJlc3RBcGksXG4gICAgICBzdGFnZTogcHJvcHMuc3RhZ2UsXG4gICAgICBhcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb246IHByb3BzLmFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbixcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyxcbiAgICAgIG1ldGFkYXRhQ29uZmlndXJhdGlvbjogcHJvcHMubWV0YWRhdGFDb25maWd1cmF0aW9uLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBzZXJ2aWNlIHJvbGUgZm9yIHRoZSBnYXRld2F5IHRvIGFzc3VtZVxuICAgKlxuICAgKiBUaGUgc2VydmljZSByb2xlIHN0YXJ0cyB3aXRoIG1pbmltYWwgcGVybWlzc2lvbnMuIEFkZGl0aW9uYWwgcGVybWlzc2lvbnNcbiAgICogYXJlIGFkZGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0YXJnZXRzIGFyZSBjb25maWd1cmVkOlxuICAgKiAtIEtNUyBlbmNyeXB0aW9uOiBBdXRvbWF0aWNhbGx5IGdyYW50cyBlbmNyeXB0L2RlY3J5cHQgcGVybWlzc2lvbnNcbiAgICpcbiAgICogRm9yIG90aGVyIHRhcmdldCB0eXBlcywgbWFudWFsbHkgZ3JhbnQgcGVybWlzc2lvbnMgdXNpbmcgc3RhbmRhcmQgQ0RLIGdyYW50IG1ldGhvZHM6XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVHYXRld2F5Um9sZSgpOiBpYW0uUm9sZSB7XG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnU2VydmljZVJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpLFxuICAgICAgZGVzY3JpcHRpb246IGBTZXJ2aWNlIHJvbGUgZm9yIEJlZHJvY2sgQWdlbnRDb3JlIEdhdGV3YXkgJHt0aGlzLm5hbWV9YCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICBjb25zdCBhY2NvdW50ID0gU3RhY2sub2YodGhpcykuYWNjb3VudDtcbiAgICBjb25zdCBwYXJ0aXRpb24gPSBTdGFjay5vZih0aGlzKS5wYXJ0aXRpb247XG5cbiAgICAvLyBUaGlzIHJlc3RyaWN0cyByb2xlIGFzc3VtcHRpb24gdG8gdGhlIHNwZWNpZmljIGdhdGV3YXkgcmVzb3VyY2Ugb25seSBpbiB0aGlzIGFjY291bnQsXG4gICAgLy8gcHJldmVudGluZyBvdGhlciBhY2NvdW50cyBmcm9tIGFzc3VtaW5nIHRoaXMgcm9sZS5cbiAgICAvLyBTZWU6aHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LXByZXJlcXVpc2l0ZXMtcGVybWlzc2lvbnMuaHRtbCNnYXRld2F5LXNlcnZpY2Utcm9sZS1wZXJtaXNzaW9uc1xuICAgIHJvbGUuYXNzdW1lUm9sZVBvbGljeT8uYWRkU3RhdGVtZW50cyhcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyldLFxuICAgICAgICBhY3Rpb25zOiBHQVRFV0FZX0FTU1VNRV9ST0xFLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFjY291bnQnOiBhY2NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgQXJuTGlrZToge1xuICAgICAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBgYXJuOiR7cGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTpnYXRld2F5LyR7dGhpcy5uYW1lfSpgLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgaWYgKHRoaXMua21zS2V5KSB7XG4gICAgICByb2xlLmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBHQVRFV0FZX0tNU19LRVlfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogW3RoaXMua21zS2V5LmtleUFybl0sXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZ2F0ZXdheSBuYW1lIGZvcm1hdFxuICAgKiBQYXR0ZXJuOiBeKFswLTlhLXpBLVpdWy1dPyl7MSw0OH0kXG4gICAqIE1heCBsZW5ndGg6IDQ4IGNoYXJhY3RlcnNcbiAgICogQHBhcmFtIG5hbWUgVGhlIGdhdGV3YXkgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBuYW1lIGlzIGludmFsaWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlR2F0ZXdheU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBtYXhMZW5ndGg6IDQ4LFxuICAgICAgZmllbGROYW1lOiAnR2F0ZXdheSBuYW1lJyxcbiAgICB9KTtcblxuICAgIGlmIChsZW5ndGhFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgR2F0ZXdheU5hbWVMZW5ndGhJbnZhbGlkYCwgbGVuZ3RoRXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICBuYW1lLFxuICAgICAgJ0dhdGV3YXkgbmFtZScsXG4gICAgICAvXihbMC05YS16QS1aXVstXT8pezEsNDh9JC8sXG4gICAgICAnR2F0ZXdheSBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLCB3aXRoIGh5cGhlbnMgb25seSBiZXR3ZWVuIGNoYXJhY3RlcnMnLFxuICAgICk7XG5cbiAgICBpZiAocGF0dGVybkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBHYXRld2F5TmFtZVBhdHRlcm5JbnZhbGlkYCwgcGF0dGVybkVycm9ycy5qb2luKCdcXG4nKSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZm9ybWF0XG4gICAqIE1heCBsZW5ndGg6IDIwMCBjaGFyYWN0ZXJzXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IGRlc2NyaXB0aW9uLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgbWF4TGVuZ3RoOiAyMDAsXG4gICAgICBmaWVsZE5hbWU6ICdEZXNjcmlwdGlvbicsXG4gICAgfSk7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEdhdGV3YXlEZXNjcmlwdGlvbkludmFsaWRgLCBlcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBDb2duaXRvIGF1dGhvcml6ZXIgZm9yIHRoZSBnYXRld2F5XG4gICAqIFByb3Zpc2lvbnMgYSBDb2duaXRvIFVzZXIgUG9vbCBhbmQgY29uZmlndXJlcyBNMk0gKG1hY2hpbmUtdG8tbWFjaGluZSkgSldUIGF1dGhlbnRpY2F0aW9uXG4gICAqIHVzaW5nIE9BdXRoIDIuMCBjbGllbnQgY3JlZGVudGlhbHMgZ3JhbnQgZmxvd1xuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWNvZ25pdG8uaHRtbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRGVmYXVsdENvZ25pdG9BdXRob3JpemVyQ29uZmlnKCk6IHtcbiAgICBhdXRob3JpemVyQ29uZmlnOiBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWc7XG4gICAgdG9rZW5FbmRwb2ludFVybDogc3RyaW5nO1xuICAgIG9hdXRoU2NvcGVzOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgdXNlclBvb2wgPSBuZXcgY29nbml0by5Vc2VyUG9vbCh0aGlzLCAnVXNlclBvb2wnLCB7XG4gICAgICBzaWduSW5DYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc291cmNlU2VydmVyID0gdXNlclBvb2wuYWRkUmVzb3VyY2VTZXJ2ZXIoJ1Jlc291cmNlU2VydmVyJywge1xuICAgICAgaWRlbnRpZmllcjogTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAyNTYsIHNlcGFyYXRvcjogJy0nIH0pLFxuICAgICAgc2NvcGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzY29wZU5hbWU6ICdyZWFkJyxcbiAgICAgICAgICBzY29wZURlc2NyaXB0aW9uOiAnUmVhZCBhY2Nlc3MgdG8gZ2F0ZXdheSB0b29scycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzY29wZU5hbWU6ICd3cml0ZScsXG4gICAgICAgICAgc2NvcGVEZXNjcmlwdGlvbjogJ1dyaXRlIGFjY2VzcyB0byBnYXRld2F5IHRvb2xzJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvYXV0aFNjb3BlcyA9IFtcbiAgICAgIGNvZ25pdG8uT0F1dGhTY29wZS5yZXNvdXJjZVNlcnZlcihyZXNvdXJjZVNlcnZlciwge1xuICAgICAgICBzY29wZU5hbWU6ICdyZWFkJyxcbiAgICAgICAgc2NvcGVEZXNjcmlwdGlvbjogJ1JlYWQgYWNjZXNzIHRvIGdhdGV3YXkgdG9vbHMnLFxuICAgICAgfSksXG4gICAgICBjb2duaXRvLk9BdXRoU2NvcGUucmVzb3VyY2VTZXJ2ZXIocmVzb3VyY2VTZXJ2ZXIsIHtcbiAgICAgICAgc2NvcGVOYW1lOiAnd3JpdGUnLFxuICAgICAgICBzY29wZURlc2NyaXB0aW9uOiAnV3JpdGUgYWNjZXNzIHRvIGdhdGV3YXkgdG9vbHMnLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIGNvbnN0IHVzZXJQb29sQ2xpZW50ID0gdXNlclBvb2wuYWRkQ2xpZW50KCdEZWZhdWx0Q2xpZW50Jywge1xuICAgICAgZ2VuZXJhdGVTZWNyZXQ6IHRydWUsXG4gICAgICBvQXV0aDoge1xuICAgICAgICBmbG93czoge1xuICAgICAgICAgIGNsaWVudENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzY29wZXM6IG9hdXRoU2NvcGVzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBDb2duaXRvIERvbWFpbiBmb3IgT0F1dGgyIHRva2VuIGVuZHBvaW50XG4gICAgLy8gVXNlIHVuaXF1ZVJlc291cmNlTmFtZSB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBkb21haW4gcHJlZml4IHRvTG93ZXJDYXNlKCkgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgaGFzaCBwb3J0aW9uIGlzIHVwcGVyY2FzZVxuICAgIGNvbnN0IGRvbWFpblByZWZpeCA9IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICBtYXhMZW5ndGg6IDYzLCAvLyBDb2duaXRvIGRvbWFpbiBwcmVmaXggbWF4IGxlbmd0aFxuICAgICAgc2VwYXJhdG9yOiAnLScsXG4gICAgfSkudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IHVzZXJQb29sRG9tYWluID0gdXNlclBvb2wuYWRkRG9tYWluKCdEb21haW4nLCB7XG4gICAgICBjb2duaXRvRG9tYWluOiB7XG4gICAgICAgIGRvbWFpblByZWZpeDogZG9tYWluUHJlZml4LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMudXNlclBvb2wgPSB1c2VyUG9vbDtcbiAgICB0aGlzLnVzZXJQb29sQ2xpZW50ID0gdXNlclBvb2xDbGllbnQ7XG4gICAgdGhpcy51c2VyUG9vbERvbWFpbiA9IHVzZXJQb29sRG9tYWluO1xuICAgIHRoaXMucmVzb3VyY2VTZXJ2ZXIgPSByZXNvdXJjZVNlcnZlcjtcblxuICAgIHJldHVybiB7XG4gICAgICBhdXRob3JpemVyQ29uZmlnOiBHYXRld2F5QXV0aG9yaXplci51c2luZ0NvZ25pdG8oe1xuICAgICAgICB1c2VyUG9vbDogdXNlclBvb2wsXG4gICAgICAgIGFsbG93ZWRDbGllbnRzOiBbdXNlclBvb2xDbGllbnRdLFxuICAgICAgfSksXG4gICAgICB0b2tlbkVuZHBvaW50VXJsOiBgaHR0cHM6Ly8ke3VzZXJQb29sRG9tYWluLmRvbWFpbk5hbWV9LmF1dGguJHtTdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmNvZ25pdG8uY29tL29hdXRoMi90b2tlbmAsXG4gICAgICBvYXV0aFNjb3Blczogb2F1dGhTY29wZXMubWFwKHNjb3BlID0+IHNjb3BlLnNjb3BlTmFtZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBNQ1AgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhdGV3YXlcbiAgICogUHJvdmlkZXMgc2Vuc2libGUgZGVmYXVsdHMgZm9yIE1DUCBwcm90b2NvbCBzZXR0aW5nc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRGVmYXVsdE1jcFByb3RvY29sQ29uZmlndXJhdGlvbigpOiBJR2F0ZXdheVByb3RvY29sQ29uZmlnIHtcbiAgICByZXR1cm4gbmV3IE1jcFByb3RvY29sQ29uZmlndXJhdGlvbih7XG4gICAgICBzdXBwb3J0ZWRWZXJzaW9uczogW01DUFByb3RvY29sVmVyc2lvbi5NQ1BfMjAyNV8wM18yNl0sXG4gICAgICBzZWFyY2hUeXBlOiBNY3BHYXRld2F5U2VhcmNoVHlwZS5TRU1BTlRJQyxcbiAgICAgIGluc3RydWN0aW9uczogJ0RlZmF1bHQgZ2F0ZXdheSB0byBjb25uZWN0IHRvIGV4dGVybmFsIE1DUCB0b29scycsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGludGVyY2VwdG9yIHRvIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBJbnRlcmNlcHRvcnMgYWxsb3cgeW91IHRvIHJ1biBjdXN0b20gY29kZSBhdCBzcGVjaWZpYyBwb2ludHMgaW4gdGhlIGdhdGV3YXkgcmVxdWVzdC9yZXNwb25zZSBmbG93OlxuICAgKiAtIFJFUVVFU1QgaW50ZXJjZXB0b3JzIGV4ZWN1dGUgYmVmb3JlIHRoZSBnYXRld2F5IGNhbGxzIHRoZSB0YXJnZXRcbiAgICogLSBSRVNQT05TRSBpbnRlcmNlcHRvcnMgZXhlY3V0ZSBhZnRlciB0aGUgdGFyZ2V0IHJlc3BvbmRzXG4gICAqXG4gICAqIEEgZ2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVFVRVNUIGludGVyY2VwdG9yIGFuZCBvbmUgUkVTUE9OU0UgaW50ZXJjZXB0b3IuXG4gICAqIEBwYXJhbSBpbnRlcmNlcHRvciBUaGUgaW50ZXJjZXB0b3IgdG8gYWRkICh1c2UgTGFtYmRhSW50ZXJjZXB0b3IgZmFjdG9yeSBtZXRob2RzKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIGFuIGludGVyY2VwdG9yIG9mIHRoZSBzYW1lIHR5cGUgYWxyZWFkeSBleGlzdHNcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRJbnRlcmNlcHRvcihpbnRlcmNlcHRvcjogSUludGVyY2VwdG9yKTogdm9pZCB7XG4gICAgY29uc3QgaW50ZXJjZXB0aW9uUG9pbnQgPSBpbnRlcmNlcHRvci5pbnRlcmNlcHRpb25Qb2ludDtcblxuICAgIGlmIChpbnRlcmNlcHRpb25Qb2ludCA9PT0gSW50ZXJjZXB0aW9uUG9pbnQuUkVRVUVTVCkge1xuICAgICAgaWYgKHRoaXMucmVxdWVzdEludGVyY2VwdG9yQ29uZmlnKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YFJlcXVlc3RJbnRlcmNlcHRvckFscmVhZHlFeGlzdHNgLFxuICAgICAgICAgICdHYXRld2F5IGFscmVhZHkgaGFzIGEgUkVRVUVTVCBpbnRlcmNlcHRvciBjb25maWd1cmVkLiBBIGdhdGV3YXkgY2FuIGhhdmUgYXQgbW9zdCBvbmUgUkVRVUVTVCBpbnRlcmNlcHRvci4nLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcXVlc3RJbnRlcmNlcHRvckNvbmZpZyA9IGludGVyY2VwdG9yLmJpbmQodGhpcywgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChpbnRlcmNlcHRpb25Qb2ludCA9PT0gSW50ZXJjZXB0aW9uUG9pbnQuUkVTUE9OU0UpIHtcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JDb25maWcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUmVzcG9uc2VJbnRlcmNlcHRvckFscmVhZHlFeGlzdHNgLFxuICAgICAgICAgICdHYXRld2F5IGFscmVhZHkgaGFzIGEgUkVTUE9OU0UgaW50ZXJjZXB0b3IgY29uZmlndXJlZC4gQSBnYXRld2F5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIFJFU1BPTlNFIGludGVyY2VwdG9yLicsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZyA9IGludGVyY2VwdG9yLmJpbmQodGhpcywgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbmQgaW5pdGlhbGl6ZXMgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25zXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUFuZEluaXRpYWxpemVJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3JzOiBJSW50ZXJjZXB0b3JbXSk6IHZvaWQge1xuICAgIGNvbnN0IHJlcXVlc3RDb3VudCA9IGludGVyY2VwdG9ycy5maWx0ZXIoaSA9PiBpLmludGVyY2VwdGlvblBvaW50ID09PSBJbnRlcmNlcHRpb25Qb2ludC5SRVFVRVNUKS5sZW5ndGg7XG4gICAgY29uc3QgcmVzcG9uc2VDb3VudCA9IGludGVyY2VwdG9ycy5maWx0ZXIoaSA9PiBpLmludGVyY2VwdGlvblBvaW50ID09PSBJbnRlcmNlcHRpb25Qb2ludC5SRVNQT05TRSkubGVuZ3RoO1xuXG4gICAgaWYgKHJlcXVlc3RDb3VudCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBUb29NYW55UmVxdWVzdEludGVyY2VwdG9yc2AsXG4gICAgICAgIGBHYXRld2F5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIFJFUVVFU1QgaW50ZXJjZXB0b3IuIEZvdW5kICR7cmVxdWVzdENvdW50fSBSRVFVRVNUIGludGVyY2VwdG9ycy5gLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VDb3VudCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBUb29NYW55UmVzcG9uc2VJbnRlcmNlcHRvcnNgLFxuICAgICAgICBgR2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVNQT05TRSBpbnRlcmNlcHRvci4gRm91bmQgJHtyZXNwb25zZUNvdW50fSBSRVNQT05TRSBpbnRlcmNlcHRvcnMuYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgIHRoaXMuYWRkSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBpbnRlcmNlcHRvciBjb25maWd1cmF0aW9ucyBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm8gaW50ZXJjZXB0b3JzIGFyZSBjb25maWd1cmVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25zKCk6IGFueVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb25maWdzOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucmVxdWVzdEludGVyY2VwdG9yQ29uZmlnKSB7XG4gICAgICBjb25maWdzLnB1c2godGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JDb25maWcuY29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZykge1xuICAgICAgY29uZmlncy5wdXNoKHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZy5jb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlncy5sZW5ndGggPiAwID8gY29uZmlncyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
770
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdhdGV3YXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXdEO0FBRXhELHFFQUFxRTtBQUNyRSxtREFBbUQ7QUFDbkQsMkNBQTJDO0FBRzNDLDJDQUErQztBQUMvQyx3REFBOEQ7QUFDOUQsNEVBQTREO0FBQzVELDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFJMUUsaURBQTZDO0FBRTdDLDBEQUFxRjtBQUVyRiwrQ0FBa0Q7QUFFbEQsbUNBQXFFO0FBRXJFLHlDQUFnRztBQUloRyw2Q0FBaUQ7QUFFakQsNkRBQWlGO0FBRWpGOzs7R0FHRztBQUNILE1BQWEsZ0JBQWdCOztJQUMzQjs7O09BR0c7SUFDSSxNQUFNLENBQVUsUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbkU7O09BRUc7SUFDSSxNQUFNLENBQVUsT0FBTyxHQUFHLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFakU7O09BRUc7SUFDYSxLQUFLLENBQVM7SUFFOUIsWUFBbUIsS0FBYTtRQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7QUFuQkgsNENBb0JDO0FBMFVEOzsrRUFFK0U7QUFDL0U7Ozs7OztHQU1HO0lBRVUsT0FBTzs0QkFEbkIsb0NBQWtCOzs7O3NCQUNVLDBCQUFXOzs7Ozs7Ozt1QkFBbkIsU0FBUSxXQUFXOzs7OzJDQTBSckMsSUFBQSxrQ0FBYyxHQUFFOzRDQStCaEIsSUFBQSxrQ0FBYyxHQUFFOzJDQXlCaEIsSUFBQSxrQ0FBYyxHQUFFOzhDQThCaEIsSUFBQSxrQ0FBYyxHQUFFOytDQThCaEIsSUFBQSxrQ0FBYyxHQUFFOzBDQXlPaEIsSUFBQSxrQ0FBYyxHQUFFO1lBNVZqQixnTUFBTyxlQUFlLDZEQW9CckI7WUFXRCxtTUFBTyxnQkFBZ0IsNkRBY3RCO1lBV0QsZ01BQU8sZUFBZSw2REFrQnJCO1lBWUQseU1BQU8sa0JBQWtCLDZEQWtCeEI7WUFZRCw0TUFBTyxtQkFBbUIsNkRBa0J6QjtZQXVORCw2TEFBTyxjQUFjLDZEQXNCcEI7WUE5b0JILDZLQStyQkM7Ozs7O1FBOXJCQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLDhDQUE4QyxDQUFDO1FBQ3RHOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMscUJBQXFCLENBQ2pDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUF3Qjs7Ozs7Ozs7OztZQUV4QixNQUFNLGVBQWdCLFNBQVEsMEJBQVc7Z0JBQ3ZCLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUM5QixTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDNUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQ3pCLFdBQVcsR0FBRyxTQUFTLENBQUM7Z0JBQ3hCLHFCQUFxQixDQUF5QjtnQkFDOUMsdUJBQXVCLENBQTJCO2dCQUNsRCxjQUFjLEdBQUcsU0FBUyxDQUFDO2dCQUMzQixNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUNuQixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDbEIsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDdkIsTUFBTSxHQUFHLFNBQVMsQ0FBQztnQkFDbkIsWUFBWSxHQUFHLFNBQVMsQ0FBQztnQkFDekIsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDdEIsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFFdEMsWUFBWSxDQUFZLEVBQUUsQ0FBUztvQkFDakMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDWiw0REFBNEQ7b0JBQzVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLG1DQUF3QixDQUFDO3dCQUN4RCxpQkFBaUIsRUFBRSxDQUFDLDZCQUFrQixDQUFDLGNBQWMsQ0FBQzt3QkFDdEQsVUFBVSxFQUFFLCtCQUFvQixDQUFDLFFBQVE7d0JBQ3pDLFlBQVksRUFBRSxrQkFBa0I7cUJBQ2pDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsOEJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pFLENBQUM7YUFDRjtZQUNELE9BQU8sSUFBSSxlQUFlLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQ7OztXQUdHO1FBQ2EsVUFBVSxHQWxEZixtREFBTyxDQWtEaUI7UUFFbkM7OztXQUdHO1FBQ2EsU0FBUyxDQUFTO1FBRWxDOztXQUVHO1FBQ2EsSUFBSSxDQUFTO1FBRTdCOztXQUVHO1FBQ2EsV0FBVyxDQUFVO1FBRXJDOztXQUVHO1FBQ2EscUJBQXFCLENBQXlCO1FBRTlEOztXQUVHO1FBQ2EsdUJBQXVCLENBQTJCO1FBRWxFOztXQUVHO1FBQ2EsY0FBYyxDQUF5QjtRQUV2RDs7V0FFRztRQUNhLE1BQU0sQ0FBWTtRQUVsQzs7V0FFRztRQUNhLElBQUksQ0FBWTtRQUVoQzs7O1dBR0c7UUFDYSxVQUFVLENBQVU7UUFFcEM7OztXQUdHO1FBQ2EsTUFBTSxDQUFVO1FBRWhDOzs7V0FHRztRQUNhLFlBQVksQ0FBWTtRQUV4Qzs7O1dBR0c7UUFDYSxTQUFTLENBQVU7UUFFbkM7OztXQUdHO1FBQ2EsU0FBUyxDQUFVO1FBRW5DOztXQUVHO1FBQ2EsSUFBSSxDQUE2QjtRQUVqRDs7V0FFRztRQUNJLFFBQVEsQ0FBcUI7UUFFcEM7O1dBRUc7UUFDSSxjQUFjLENBQTJCO1FBRWhEOzs7V0FHRztRQUNLLHdCQUF3QixDQUF5QjtRQUV6RDs7O1dBR0c7UUFDSyx5QkFBeUIsQ0FBeUI7UUFFMUQ7O1dBRUc7UUFDYSx5QkFBeUIsQ0FBNkI7UUFFdEU7O1dBRUc7UUFDSSxjQUFjLENBQTJCO1FBRWhEOztXQUVHO1FBQ0ksY0FBYyxDQUFtQztRQUV4RDs7O1dBR0c7UUFDYSxnQkFBZ0IsQ0FBVTtRQUUxQzs7O1dBR0c7UUFDYSxXQUFXLENBQVk7UUFFdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFzQixFQUFFO1lBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNmLGtIQUFrSDtnQkFDbEgsb0VBQW9FO2dCQUNwRSwySkFBMko7Z0JBQzNKLFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDN0Isa0JBQUksQ0FBQyxNQUFNLENBQUM7d0JBQ1YsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLG1CQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO3FCQUNqRSxDQUFDO2FBQ0wsQ0FBQyxDQUFDOzs7Ozs7bURBMUxNLE9BQU87Ozs7WUE0TGhCLG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsQyx5REFBeUQ7WUFDekQsY0FBYztZQUNkLHlEQUF5RDtZQUV6RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLHFDQUFxQyxFQUFFLENBQUM7WUFDekcsSUFBSSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDO2dCQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDO1lBQ3BELENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLEtBQUssa0NBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQy9FLGtCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FDL0Isb0RBQW9ELEVBQ3BELHlUQUF5VCxDQUMxVCxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUUzQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBRTdCLHFDQUFxQztZQUNyQyxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDMUUsQ0FBQztZQUVELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUM7WUFFakUseURBQXlEO1lBQ3pELG1CQUFtQjtZQUNuQix5REFBeUQ7WUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDbEUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sRUFBRTtnQkFDL0QsY0FBYyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjO2dCQUMzRCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDbkMseUJBQXlCLEVBQUUsa0JBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7aUJBQ3RELENBQUM7Z0JBQ0YsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTTtnQkFDOUIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLHlCQUF5QixFQUFFLElBQUksQ0FBQyx5QkFBeUI7b0JBQ3ZELENBQUMsQ0FBQzt3QkFDQSxHQUFHLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxlQUFlO3dCQUNoRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUs7cUJBQy9FO29CQUNELENBQUMsQ0FBQyxTQUFTO2dCQUNiLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUU7Z0JBQzNELFlBQVksRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWTtnQkFDckQsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTztnQkFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ2hCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixDQUFDO1lBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztZQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUM7WUFFaEQsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyRixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsQ0FBQztTQUNGO1FBRUQ7Ozs7Ozs7V0FPRztRQUVJLGVBQWUsQ0FDcEIsRUFBVSxFQUNWLEtBQTZCOzs7Ozs7Ozs7O1lBRTdCLDBGQUEwRjtZQUMxRiw2RUFBNkU7WUFDN0UsTUFBTSxXQUFXLEdBQVE7Z0JBQ3ZCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQzFDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2dCQUNwQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzVCLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUM3RixDQUFDLENBQUMsRUFBRSxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsZ0NBQWdDLEVBQUU7b0JBQzlFLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDUixDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUcsc0JBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUU5RCxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBRUQ7Ozs7Ozs7V0FPRztRQUVJLGdCQUFnQixDQUNyQixFQUFVLEVBQ1YsS0FBOEI7Ozs7Ozs7Ozs7WUFFOUIsTUFBTSxNQUFNLEdBQUcsc0JBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtnQkFDaEQsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtnQkFDMUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixPQUFPLEVBQUUsSUFBSTtnQkFDYixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7Z0JBQzFCLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQ2xELGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxnQ0FBZ0M7YUFDekUsQ0FBQyxDQUFDO1lBRUgsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVEOzs7Ozs7O1dBT0c7UUFFSSxlQUFlLENBQ3BCLEVBQVUsRUFDVixLQUE2Qjs7Ozs7Ozs7OztZQUU3Qiw2RUFBNkU7WUFDN0UsTUFBTSxXQUFXLEdBQVE7Z0JBQ3ZCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQzFDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixHQUFHLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDN0YsQ0FBQyxDQUFDLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLGdDQUFnQyxFQUFFO29CQUM5RSxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLHNCQUFhLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFOUQsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVEOzs7Ozs7OztXQVFHO1FBRUksa0JBQWtCLENBQ3ZCLEVBQVUsRUFDVixLQUFnQzs7Ozs7Ozs7OztZQUVoQyw2RUFBNkU7WUFDN0UsTUFBTSxXQUFXLEdBQVE7Z0JBQ3ZCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQzFDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2dCQUN4QixHQUFHLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDN0YsQ0FBQyxDQUFDLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLGdDQUFnQyxFQUFFO29CQUM5RSxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztZQUVGLE1BQU0sTUFBTSxHQUFHLHNCQUFhLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFakUsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVEOzs7Ozs7OztXQVFHO1FBRUksbUJBQW1CLENBQ3hCLEVBQVUsRUFDVixLQUFpQzs7Ozs7Ozs7OztZQUVqQyxtRkFBbUY7WUFDbkYsaUhBQWlIO1lBQ2pILE1BQU0sTUFBTSxHQUFHLHNCQUFhLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7Z0JBQ25ELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQzFDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLDJCQUEyQixFQUFFLEtBQUssQ0FBQywyQkFBMkI7Z0JBQzlELGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxnQ0FBZ0M7Z0JBQ3hFLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUI7YUFDbkQsQ0FBQyxDQUFDO1lBRUgsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVEOzs7Ozs7Ozs7V0FTRztRQUNLLGlCQUFpQjtZQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtnQkFDN0MsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLGlDQUFpQyxDQUFDO2dCQUN0RSxXQUFXLEVBQUUsOENBQThDLElBQUksQ0FBQyxJQUFJLEVBQUU7YUFDdkUsQ0FBQyxDQUFDO1lBRUgsTUFBTSxNQUFNLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN2QyxNQUFNLFNBQVMsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFM0Msd0ZBQXdGO1lBQ3hGLHFEQUFxRDtZQUNyRCw0SUFBNEk7WUFDNUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FDbEMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUN4QixVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2dCQUN6RSxPQUFPLEVBQUUsMkJBQW1CO2dCQUM1QixVQUFVLEVBQUU7b0JBQ1YsWUFBWSxFQUFFO3dCQUNaLG1CQUFtQixFQUFFLE9BQU87cUJBQzdCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxlQUFlLEVBQUUsT0FBTyxTQUFTLHNCQUFzQixNQUFNLElBQUksT0FBTyxZQUFZLElBQUksQ0FBQyxJQUFJLEdBQUc7cUJBQ2pHO2lCQUNGO2FBQ0YsQ0FBQyxDQUNILENBQUM7WUFFRixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7b0JBQ3ZDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7b0JBQ3hCLE9BQU8sRUFBRSw2QkFBcUI7b0JBQzlCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNOLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQ7Ozs7Ozs7V0FPRztRQUNLLG1CQUFtQixDQUFDLElBQVk7WUFDdEMsSUFBSSxtQkFBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLElBQUEsd0NBQW1CLEVBQUM7Z0JBQ3ZDLEtBQUssRUFBRSxJQUFJO2dCQUNYLFNBQVMsRUFBRSxDQUFDO2dCQUNaLFNBQVMsRUFBRSxFQUFFO2dCQUNiLFNBQVMsRUFBRSxjQUFjO2FBQzFCLENBQUMsQ0FBQztZQUVILElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLHdCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLDBCQUEwQixFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUYsQ0FBQztZQUVELE1BQU0sYUFBYSxHQUFHLElBQUEseUNBQW9CLEVBQ3hDLElBQUksRUFDSixjQUFjLEVBQ2QsMkJBQTJCLEVBQzNCLDBHQUEwRyxDQUMzRyxDQUFDO1lBRUYsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksd0JBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsMkJBQTJCLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RixDQUFDO1NBQ0Y7UUFFRDs7Ozs7O1dBTUc7UUFDSyxtQkFBbUIsQ0FBQyxXQUFtQjtZQUM3QyxJQUFJLG1CQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBQSx3Q0FBbUIsRUFBQztnQkFDakMsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLFNBQVMsRUFBRSxDQUFDO2dCQUNaLFNBQVMsRUFBRSxHQUFHO2dCQUNkLFNBQVMsRUFBRSxhQUFhO2FBQ3pCLENBQUMsQ0FBQztZQUVILElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLHdCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckYsQ0FBQztTQUNGO1FBRUQ7Ozs7OztXQU1HO1FBQ0ssb0NBQW9DO1lBSzFDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUN0RCxtQkFBbUIsRUFBRSxLQUFLO2FBQzNCLENBQUMsQ0FBQztZQUVILE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDbEUsVUFBVSxFQUFFLG1CQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzlFLE1BQU0sRUFBRTtvQkFDTjt3QkFDRSxTQUFTLEVBQUUsTUFBTTt3QkFDakIsZ0JBQWdCLEVBQUUsOEJBQThCO3FCQUNqRDtvQkFDRDt3QkFDRSxTQUFTLEVBQUUsT0FBTzt3QkFDbEIsZ0JBQWdCLEVBQUUsK0JBQStCO3FCQUNsRDtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sV0FBVyxHQUFHO2dCQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7b0JBQ2hELFNBQVMsRUFBRSxNQUFNO29CQUNqQixnQkFBZ0IsRUFBRSw4QkFBOEI7aUJBQ2pELENBQUM7Z0JBQ0YsT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFO29CQUNoRCxTQUFTLEVBQUUsT0FBTztvQkFDbEIsZ0JBQWdCLEVBQUUsK0JBQStCO2lCQUNsRCxDQUFDO2FBQ0gsQ0FBQztZQUVGLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFO2dCQUN6RCxjQUFjLEVBQUUsSUFBSTtnQkFDcEIsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRTt3QkFDTCxpQkFBaUIsRUFBRSxJQUFJO3FCQUN4QjtvQkFDRCxNQUFNLEVBQUUsV0FBVztpQkFDcEI7YUFDRixDQUFDLENBQUM7WUFFSCxrREFBa0Q7WUFDbEQsNEhBQTRIO1lBQzVILE1BQU0sWUFBWSxHQUFHLG1CQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO2dCQUNsRCxTQUFTLEVBQUUsRUFBRSxFQUFFLG1DQUFtQztnQkFDbEQsU0FBUyxFQUFFLEdBQUc7YUFDZixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFakIsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xELGFBQWEsRUFBRTtvQkFDYixZQUFZLEVBQUUsWUFBWTtpQkFDM0I7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztZQUVyQyxPQUFPO2dCQUNMLGdCQUFnQixFQUFFLDhCQUFpQixDQUFDLFlBQVksQ0FBQztvQkFDL0MsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLGNBQWMsRUFBRSxDQUFDLGNBQWMsQ0FBQztpQkFDakMsQ0FBQztnQkFDRixnQkFBZ0IsRUFBRSxXQUFXLGNBQWMsQ0FBQyxVQUFVLFNBQVMsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxpQ0FBaUM7Z0JBQ3JILFdBQVcsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQzthQUN2RCxDQUFDO1NBQ0g7UUFFRDs7OztXQUlHO1FBQ0sscUNBQXFDO1lBQzNDLE9BQU8sSUFBSSxtQ0FBd0IsQ0FBQztnQkFDbEMsaUJBQWlCLEVBQUUsQ0FBQyw2QkFBa0IsQ0FBQyxjQUFjLENBQUM7Z0JBQ3RELFVBQVUsRUFBRSwrQkFBb0IsQ0FBQyxRQUFRO2dCQUN6QyxZQUFZLEVBQUUsa0RBQWtEO2FBQ2pFLENBQUMsQ0FBQztTQUNKO1FBRUQ7Ozs7Ozs7Ozs7V0FVRztRQUVJLGNBQWMsQ0FBQyxXQUF5Qjs7Ozs7Ozs7OztZQUM3QyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztZQUV4RCxJQUFJLGlCQUFpQixLQUFLLCtCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO29CQUNsQyxNQUFNLElBQUksd0JBQWUsQ0FDdkIsSUFBQSxzQkFBRyxFQUFBLGlDQUFpQyxFQUNwQywyR0FBMkcsRUFDM0csSUFBSSxDQUNMLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0QsQ0FBQztpQkFBTSxJQUFJLGlCQUFpQixLQUFLLCtCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1RCxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO29CQUNuQyxNQUFNLElBQUksd0JBQWUsQ0FDdkIsSUFBQSxzQkFBRyxFQUFBLGtDQUFrQyxFQUNyQyw2R0FBNkcsRUFDN0csSUFBSSxDQUNMLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEUsQ0FBQztTQUNGO1FBRUQ7OztXQUdHO1FBQ0ssaUNBQWlDLENBQUMsWUFBNEI7WUFDcEUsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsS0FBSywrQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDeEcsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsS0FBSywrQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFFMUcsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSx3QkFBZSxDQUN2QixJQUFBLHNCQUFHLEVBQUEsNEJBQTRCLEVBQy9CLDJEQUEyRCxZQUFZLHdCQUF3QixFQUMvRixJQUFJLENBQ0wsQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLHdCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSw2QkFBNkIsRUFDaEMsNERBQTRELGFBQWEseUJBQXlCLEVBQ2xHLElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztZQUVELEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbkMsQ0FBQztTQUNGO1FBRUQ7Ozs7V0FJRztRQUNLLCtCQUErQjtZQUNyQyxNQUFNLE9BQU8sR0FBVSxFQUFFLENBQUM7WUFFMUIsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNqRDs7WUE5ckJVLHVEQUFPOzs7OztBQUFQLDBCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIFRva2VuLCBMYXp5LCBOYW1lcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSVJlc3RBcGkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQgKiBhcyBiZWRyb2NrYWdlbnRjb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCAqIGFzIGNvZ25pdG8gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZ25pdG8nO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgdHlwZSB7IElGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2Vycm9ycyc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuLy8gSW50ZXJuYWwgaW1wb3J0c1xuaW1wb3J0IHR5cGUgeyBHYXRld2F5RXhjZXB0aW9uTGV2ZWwsIElHYXRld2F5IH0gZnJvbSAnLi9nYXRld2F5LWJhc2UnO1xuaW1wb3J0IHsgR2F0ZXdheUJhc2UgfSBmcm9tICcuL2dhdGV3YXktYmFzZSc7XG5pbXBvcnQgdHlwZSB7IElHYXRld2F5QXV0aG9yaXplckNvbmZpZyB9IGZyb20gJy4vaW5ib3VuZC1hdXRoL2F1dGhvcml6ZXInO1xuaW1wb3J0IHsgR2F0ZXdheUF1dGhvcml6ZXIsIEdhdGV3YXlBdXRob3JpemVyVHlwZSB9IGZyb20gJy4vaW5ib3VuZC1hdXRoL2F1dGhvcml6ZXInO1xuaW1wb3J0IHR5cGUgeyBJSW50ZXJjZXB0b3IsIEludGVyY2VwdG9yQmluZENvbmZpZyB9IGZyb20gJy4vaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgSW50ZXJjZXB0aW9uUG9pbnQgfSBmcm9tICcuL2ludGVyY2VwdG9yJztcbmltcG9ydCB0eXBlIHsgSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZyB9IGZyb20gJy4vb3V0Ym91bmQtYXV0aC9jcmVkZW50aWFsLXByb3ZpZGVyJztcbmltcG9ydCB7IEdBVEVXQVlfQVNTVU1FX1JPTEUsIEdBVEVXQVlfS01TX0tFWV9QRVJNUyB9IGZyb20gJy4vcGVybXMnO1xuaW1wb3J0IHR5cGUgeyBJR2F0ZXdheVByb3RvY29sQ29uZmlnIH0gZnJvbSAnLi9wcm90b2NvbCc7XG5pbXBvcnQgeyBNY3BHYXRld2F5U2VhcmNoVHlwZSwgTWNwUHJvdG9jb2xDb25maWd1cmF0aW9uLCBNQ1BQcm90b2NvbFZlcnNpb24gfSBmcm9tICcuL3Byb3RvY29sJztcbmltcG9ydCB0eXBlIHsgSVBvbGljeUVuZ2luZSB9IGZyb20gJy4uL3BvbGljeS9wb2xpY3ktZW5naW5lLWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBBcGlTY2hlbWEgfSBmcm9tICcuL3RhcmdldHMvc2NoZW1hL2FwaS1zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBUb29sU2NoZW1hIH0gZnJvbSAnLi90YXJnZXRzL3NjaGVtYS90b29sLXNjaGVtYSc7XG5pbXBvcnQgeyBHYXRld2F5VGFyZ2V0IH0gZnJvbSAnLi90YXJnZXRzL3RhcmdldCc7XG5pbXBvcnQgdHlwZSB7IEFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbiwgTWV0YWRhdGFDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90YXJnZXRzL3RhcmdldC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuXG4vKipcbiAqIFRoZSBlbmZvcmNlbWVudCBtb2RlIGZvciBhIHBvbGljeSBlbmdpbmUgYXNzb2NpYXRlZCB3aXRoIGEgZ2F0ZXdheS5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lFbmdpbmVNb2RlIHtcbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhY3Rpb25zIGFuZCBhZGRzIHRyYWNlcyBidXQgZG9lcyBub3QgZW5mb3JjZSBkZWNpc2lvbnMuXG4gICAqIFVzZSB0aGlzIG1vZGUgZm9yIHRlc3RpbmcgYW5kIHZhbGlkYXRpb24gYmVmb3JlIGVuYWJsaW5nIGVuZm9yY2VtZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMT0dfT05MWSA9IG5ldyBQb2xpY3lFbmdpbmVNb2RlKCdMT0dfT05MWScpO1xuXG4gIC8qKlxuICAgKiBFbmZvcmNlcyBkZWNpc2lvbnMgYnkgYWxsb3dpbmcgb3IgZGVueWluZyBhZ2VudCBvcGVyYXRpb25zIGJhc2VkIG9uIENlZGFyIHBvbGljaWVzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkZPUkNFID0gbmV3IFBvbGljeUVuZ2luZU1vZGUoJ0VORk9SQ0UnKTtcblxuICAvKipcbiAgICogVGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcG9saWN5IGVuZ2luZSBtb2RlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhc3NvY2lhdGluZyBhIHBvbGljeSBlbmdpbmUgd2l0aCBhIGdhdGV3YXkuXG4gKlxuICogV2hlbiBjb25maWd1cmVkLCB0aGUgcG9saWN5IGVuZ2luZSBpbnRlcmNlcHRzIGFsbCBhZ2VudCByZXF1ZXN0cyB0aHJvdWdoIHRoaXNcbiAqIGdhdGV3YXkgYW5kIGV2YWx1YXRlcyB0aGVtIGFnYWluc3QgdGhlIGRlZmluZWQgQ2VkYXIgcG9saWNpZXMuXG4gKiBbZGlzYWJsZS1hd3NsaW50OnByZWZlci1yZWYtaW50ZXJmYWNlXVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlQb2xpY3lFbmdpbmVDb25maWcge1xuICAvKipcbiAgICogVGhlIHBvbGljeSBlbmdpbmUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBnYXRld2F5LlxuICAgKiBbZGlzYWJsZS1hd3NsaW50OnByZWZlci1yZWYtaW50ZXJmYWNlXVxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RW5naW5lOiBJUG9saWN5RW5naW5lO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5mb3JjZW1lbnQgbW9kZSBmb3IgdGhlIHBvbGljeSBlbmdpbmUuXG4gICAqXG4gICAqIC0gYExPR19PTkxZYDogRXZhbHVhdGVzIGFuZCBsb2dzIGRlY2lzaW9ucyB3aXRob3V0IGVuZm9yY2luZyB0aGVtLiBVc2UgZm9yIHRlc3RpbmcuXG4gICAqIC0gYEVORk9SQ0VgOiBBY3RpdmVseSBhbGxvd3Mgb3IgZGVuaWVzIHJlcXVlc3RzIGJhc2VkIG9uIENlZGFyIHBvbGljeSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBQb2xpY3lFbmdpbmVNb2RlLkxPR19PTkxZXG4gICAqL1xuICByZWFkb25seSBtb2RlPzogUG9saWN5RW5naW5lTW9kZTtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGEgTGFtYmRhIHRhcmdldCB0byBhIGdhdGV3YXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRMYW1iZGFUYXJnZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSBhbmQgLSAoaHlwaGVuKVxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlUYXJnZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSBsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbCBzY2hlbWEgZGVmaW5pbmcgdGhlIGF2YWlsYWJsZSB0b29sc1xuICAgKi9cbiAgcmVhZG9ubHkgdG9vbFNjaGVtYTogVG9vbFNjaGVtYTtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIEBkZWZhdWx0IC0gW0dhdGV3YXlDcmVkZW50aWFsUHJvdmlkZXIuaWFtUm9sZSgpXVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM/OiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGFuIE9wZW5BUEkgdGFyZ2V0IHRvIGEgZ2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZE9wZW5BcGlUYXJnZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKSBhbmQgLSAoaHlwaGVuKVxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlUYXJnZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT3BlbkFQSSBzY2hlbWEgZGVmaW5pbmcgdGhlIEFQSVxuICAgKi9cbiAgcmVhZG9ubHkgYXBpU2NoZW1hOiBBcGlTY2hlbWE7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdmFsaWRhdGUgdGhlIE9wZW5BUEkgc2NoZW1hIG9yIG5vdFxuICAgKiBOb3RlOiBWYWxpZGF0aW9uIGlzIG9ubHkgcGVyZm9ybWVkIGZvciBpbmxpbmUgYW5kIGFzc2V0LWJhc2VkIHNjaGVtYSBhbmQgIGR1cmluZyBDREsgc3ludGhlc2lzLlxuICAgKiBTMyBzY2hlbWFzIGNhbm5vdCBiZSB2YWxpZGF0ZWQgYXQgc3ludGhlc2lzIHRpbWUuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRlT3BlbkFwaVNjaGVtYT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgcHJvdmlkZXJzIGZvciBvdXRib3VuZCBhdXRoZW50aWNhdGlvbiAoT3BlbkFQSSB0YXJnZXRzIHVzZSBBUEkgS2V5IG9yIE9BdXRoLCBub3QgSUFNKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIChubyBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb24gb24gdGhlIHRhcmdldDsgc3VwcGx5IHByb3ZpZGVycyBmb3Igc2VjdXJlZCBiYWNrZW5kcylcbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zPzogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhIFNtaXRoeSB0YXJnZXQgdG8gYSBnYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkU21pdGh5VGFyZ2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkgYW5kIC0gKGh5cGhlbilcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNtaXRoeSBtb2RlbCBkZWZpbmluZyB0aGUgQVBJXG4gICAqL1xuICByZWFkb25seSBzbWl0aHlNb2RlbDogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBDcmVkZW50aWFsIHByb3ZpZGVycyBmb3IgYXV0aGVudGljYXRpb25cbiAgICogQGRlZmF1bHQgLSBbR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5pYW1Sb2xlKCldXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz86IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhZGRpbmcgYW4gTUNQIFNlcnZlciB0YXJnZXQgdG8gYSBnYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkTWNwU2VydmVyVGFyZ2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkgYW5kIC0gKGh5cGhlbilcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEhUVFBTIGVuZHBvaW50IFVSTCBvZiB0aGUgTUNQIHNlcnZlclxuICAgKlxuICAgKiBUaGUgZW5kcG9pbnQgbXVzdDpcbiAgICogLSBVc2UgSFRUUFMgcHJvdG9jb2xcbiAgICogLSBCZSBwcm9wZXJseSBVUkwtZW5jb2RlZFxuICAgKiAtIFBvaW50IHRvIGFuIE1DUCBzZXJ2ZXIgdGhhdCBpbXBsZW1lbnRzIHRvb2wgY2FwYWJpbGl0aWVzXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVkZW50aWFsIHByb3ZpZGVycyBmb3IgYXV0aGVudGljYXRpb25cbiAgICpcbiAgICogTUNQIHNlcnZlcnMgcmVxdWlyZSBleHBsaWNpdCBhdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBPQXV0aDIgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgb3ZlciBOb0F1dGguXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhbiBBUEkgR2F0ZXdheSB0YXJnZXQgdG8gYSBnYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQXBpR2F0ZXdheVRhcmdldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpIGFuZCAtIChoeXBoZW4pXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheVRhcmdldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBSRVNUIEFQSSB0byBpbnRlZ3JhdGUgd2l0aFxuICAgKiBNdXN0IGJlIGluIHRoZSBzYW1lIGFjY291bnQgYW5kIHJlZ2lvbiBhcyB0aGUgZ2F0ZXdheVxuICAgKiBbZGlzYWJsZS1hd3NsaW50OnByZWZlci1yZWYtaW50ZXJmYWNlXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdEFwaTogSVJlc3RBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFnZSBuYW1lIG9mIHRoZSBSRVNUIEFQSVxuICAgKiBAZGVmYXVsdCAtIFVzZXMgdGhlIGRlcGxveW1lbnQgc3RhZ2UgZnJvbSB0aGUgUmVzdEFwaSAocmVzdEFwaS5kZXBsb3ltZW50U3RhZ2Uuc3RhZ2VOYW1lKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvb2wgY29uZmlndXJhdGlvbiBkZWZpbmluZyB3aGljaCBvcGVyYXRpb25zIHRvIGV4cG9zZVxuICAgKi9cbiAgcmVhZG9ubHkgYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uOiBBcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgcHJvdmlkZXJzIGZvciBhdXRoZW50aWNhdGlvblxuICAgKiBBUEkgR2F0ZXdheSB0YXJnZXRzIHN1cHBvcnQgSUFNIGFuZCBBUEkga2V5IGF1dGhlbnRpY2F0aW9uXG4gICAqIEBkZWZhdWx0IC0gRW1wdHkgYXJyYXkgKHNlcnZpY2UgaGFuZGxlcyBJQU0gYXV0b21hdGljYWxseSlcbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zPzogSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBjb25maWd1cmF0aW9uIGZvciBwYXNzaW5nIGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQWxsb3dzIHlvdSB0byBwYXNzIGFkZGl0aW9uYWwgY29udGV4dCB0aHJvdWdoIGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQGRlZmF1bHQgLSBObyBtZXRhZGF0YSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YUNvbmZpZ3VyYXRpb24/OiBNZXRhZGF0YUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgYSBHYXRld2F5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpIGFuZCAtIChoeXBoZW4pXG4gICAqIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB5b3VyIGFjY291bnRcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBnYXRld2F5XG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpLCAtIChoeXBoZW4pIGFuZCBzcGFjZXNcbiAgICogVGhlIGRlc2NyaXB0aW9uIGNhbiBoYXZlIHVwIHRvIDIwMCBjaGFyYWN0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhdGV3YXlcbiAgICogQGRlZmF1bHQgLSBBIGRlZmF1bHQgcHJvdG9jb2wgY29uZmlndXJhdGlvbiB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcgTUNQIHdpdGggZm9sbG93aW5nIHBhcmFtc1xuICAgKiAgc3VwcG9ydGVkVmVyc2lvbnM6IFtNQ1BQcm90b2NvbFZlcnNpb24uTUNQXzIwMjVfMDNfMjZdLFxuICAgKiAgc2VhcmNoVHlwZTogTWNwR2F0ZXdheVNlYXJjaFR5cGUuU0VNQU5USUMsXG4gICAqICBpbnN0cnVjdGlvbnM6IFwiRGVmYXVsdCBnYXRld2F5IHRvIGNvbm5lY3QgdG8gZXh0ZXJuYWwgTUNQIHRvb2xzXCIsXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb24/OiBJR2F0ZXdheVByb3RvY29sQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2F0ZXdheVxuICAgKiBAZGVmYXVsdCAtIEEgZGVmYXVsdCBhdXRob3JpemVyIHdpbGwgYmUgY3JlYXRlZCB1c2luZyBDb2duaXRvXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemVyQ29uZmlndXJhdGlvbj86IElHYXRld2F5QXV0aG9yaXplckNvbmZpZztcblxuICAvKipcbiAgICogVGhlIHZlcmJvc2l0eSBvZiBleGNlcHRpb24gbWVzc2FnZXNcbiAgICogVXNlIERFQlVHIG1vZGUgdG8gc2VlIGdyYW51bGFyIGV4Y2VwdGlvbiBtZXNzYWdlcyBmcm9tIGEgR2F0ZXdheVxuICAgKiBAZGVmYXVsdCAtIEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgc2FuaXRpemVkIGZvciBwcmVzZW50YXRpb24gdG8gZW5kIHVzZXJzXG4gICAqL1xuICByZWFkb25seSBleGNlcHRpb25MZXZlbD86IEdhdGV3YXlFeGNlcHRpb25MZXZlbDtcblxuICAvKipcbiAgICogVGhlIEFXUyBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2F0ZXdheVxuICAgKiBAZGVmYXVsdCAtIE5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgdGhlIGdhdGV3YXkgdG8gYWNjZXNzIEFXUyBzZXJ2aWNlc1xuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUYWdzIGZvciB0aGUgZ2F0ZXdheVxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBHYXRld2F5IHJlc291cmNlXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEludGVyY2VwdG9yIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgZ2F0ZXdheVxuICAgKlxuICAgKiBJbnRlcmNlcHRvcnMgYWxsb3cgeW91IHRvIHJ1biBjdXN0b20gY29kZSBkdXJpbmcgZWFjaCBnYXRld2F5IGludm9jYXRpb246XG4gICAqIC0gUkVRVUVTVCBpbnRlcmNlcHRvcnMgZXhlY3V0ZSBiZWZvcmUgdGhlIGdhdGV3YXkgY2FsbHMgdGhlIHRhcmdldFxuICAgKiAtIFJFU1BPTlNFIGludGVyY2VwdG9ycyBleGVjdXRlIGFmdGVyIHRoZSB0YXJnZXQgcmVzcG9uZHNcbiAgICpcbiAgICogQSBnYXRld2F5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIFJFUVVFU1QgaW50ZXJjZXB0b3IgYW5kIG9uZSBSRVNQT05TRSBpbnRlcmNlcHRvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBpbnRlcmNlcHRvcnNcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2dhdGV3YXktaW50ZXJjZXB0b3JzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGludGVyY2VwdG9yQ29uZmlndXJhdGlvbnM/OiBJSW50ZXJjZXB0b3JbXTtcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBlbmdpbmUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBnYXRld2F5LlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkLCB0aGUgc3BlY2lmaWVkIHBvbGljeSBlbmdpbmUgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBnYXRld2F5LlxuICAgKiBBbGwgYWdlbnQgcmVxdWVzdHMgdGhyb3VnaCB0aGlzIGdhdGV3YXkgd2lsbCBiZSBldmFsdWF0ZWQgYWdhaW5zdCB0aGUgQ2VkYXIgcG9saWNpZXNcbiAgICogZGVmaW5lZCBpbiB0aGUgcG9saWN5IGVuZ2luZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwb2xpY3kgZW5naW5lIChyZXF1ZXN0cyBhcmUgbm90IHN1YmplY3QgdG8gQ2VkYXIgcG9saWN5IGF1dGhvcml6YXRpb24pXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lFbmdpbmVDb25maWd1cmF0aW9uPzogR2F0ZXdheVBvbGljeUVuZ2luZUNvbmZpZztcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgR2F0ZXdheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBnYXRld2F5XG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogR2F0ZXdheSByZXNvdXJjZSBmb3IgQVdTIEJlZHJvY2sgQWdlbnQgQ29yZS5cbiAqIFNlcnZlcyBhcyBhbiBpbnRlZ3JhdGlvbiBwb2ludCBiZXR3ZWVuIHlvdXIgYWdlbnQgYW5kIGV4dGVybmFsIHNlcnZpY2VzLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkdhdGV3YXlcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlLWNvbnRyb2wvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlR2F0ZXdheS5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBHYXRld2F5IGV4dGVuZHMgR2F0ZXdheUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5HYXRld2F5JztcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBHYXRld2F5IHVzaW5nIGl0cyBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgR2F0ZXdheVxuICAgKiBAcmV0dXJucyBBbiBJR2F0ZXdheSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGltcG9ydGVkIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUdhdGV3YXlBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogR2F0ZXdheUF0dHJpYnV0ZXMsXG4gICk6IElHYXRld2F5IHtcbiAgICBjbGFzcyBJbXBvcnRlZEdhdGV3YXkgZXh0ZW5kcyBHYXRld2F5QmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUFybiA9IGF0dHJzLmdhdGV3YXlBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUlkID0gYXR0cnMuZ2F0ZXdheUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSBhdHRycy5nYXRld2F5TmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb246IElHYXRld2F5UHJvdG9jb2xDb25maWc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb246IElHYXRld2F5QXV0aG9yaXplckNvbmZpZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGNlcHRpb25MZXZlbCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBrbXNLZXkgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZSA9IGF0dHJzLnJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheVVybCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzUmVhc29uID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuICAgICAgICAvLyBDcmVhdGUgcGxhY2Vob2xkZXIgcHJvdG9jb2wgYW5kIGF1dGhvcml6ZXIgY29uZmlndXJhdGlvbnNcbiAgICAgICAgdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPSBuZXcgTWNwUHJvdG9jb2xDb25maWd1cmF0aW9uKHtcbiAgICAgICAgICBzdXBwb3J0ZWRWZXJzaW9uczogW01DUFByb3RvY29sVmVyc2lvbi5NQ1BfMjAyNV8wM18yNl0sXG4gICAgICAgICAgc2VhcmNoVHlwZTogTWNwR2F0ZXdheVNlYXJjaFR5cGUuU0VNQU5USUMsXG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zOiAnSW1wb3J0ZWQgZ2F0ZXdheScsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gR2F0ZXdheUF1dGhvcml6ZXIudXNpbmdBd3NJYW0oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZEdhdGV3YXkoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBnYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnYXRld2F5QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZ2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGdhdGV3YXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBJR2F0ZXdheVByb3RvY29sQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF1dGhvcml6ZXJDb25maWd1cmF0aW9uOiBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGNlcHRpb24gbGV2ZWwgZm9yIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhjZXB0aW9uTGV2ZWw/OiBHYXRld2F5RXhjZXB0aW9uTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIGZvciB0aGUgZ2F0ZXdheVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIFVSTCBlbmRwb2ludCBmb3IgdGhlIGdhdGV3YXlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdhdGV3YXlVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGdhdGV3YXlcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyByZWFzb25zIGZvciB0aGUgZ2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzUmVhc29uPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBnYXRld2F5IHdhcyBjcmVhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBnYXRld2F5IHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBhcHBsaWVkIHRvIHRoZSBnYXRld2F5XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIFVzZXIgUG9vbCBjcmVhdGVkIGZvciB0aGUgZ2F0ZXdheSAoaWYgdXNpbmcgZGVmYXVsdCBDb2duaXRvIGF1dGhvcml6ZXIpXG4gICAqL1xuICBwdWJsaWMgdXNlclBvb2w/OiBjb2duaXRvLklVc2VyUG9vbDtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gVXNlciBQb29sIENsaWVudCBjcmVhdGVkIGZvciB0aGUgZ2F0ZXdheSAoaWYgdXNpbmcgZGVmYXVsdCBDb2duaXRvIGF1dGhvcml6ZXIpXG4gICAqL1xuICBwdWJsaWMgdXNlclBvb2xDbGllbnQ/OiBjb2duaXRvLklVc2VyUG9vbENsaWVudDtcblxuICAvKipcbiAgICogVGhlIFJFUVVFU1QgaW50ZXJjZXB0b3IgY29uZmlndXJhdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVxdWVzdEludGVyY2VwdG9yQ29uZmlnPzogSW50ZXJjZXB0b3JCaW5kQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgUkVTUE9OU0UgaW50ZXJjZXB0b3IgY29uZmlndXJhdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZz86IEludGVyY2VwdG9yQmluZENvbmZpZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBlbmdpbmUgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvbGljeUVuZ2luZUNvbmZpZ3VyYXRpb24/OiBHYXRld2F5UG9saWN5RW5naW5lQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBVc2VyIFBvb2wgRG9tYWluIGNyZWF0ZWQgZm9yIHRoZSBnYXRld2F5IChpZiB1c2luZyBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplcilcbiAgICovXG4gIHB1YmxpYyB1c2VyUG9vbERvbWFpbj86IGNvZ25pdG8uSVVzZXJQb29sRG9tYWluO1xuXG4gIC8qKlxuICAgKiBUaGUgQ29nbml0byBSZXNvdXJjZSBTZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGdhdGV3YXkgKGlmIHVzaW5nIGRlZmF1bHQgQ29nbml0byBhdXRob3JpemVyKVxuICAgKi9cbiAgcHVibGljIHJlc291cmNlU2VydmVyPzogY29nbml0by5JVXNlclBvb2xSZXNvdXJjZVNlcnZlcjtcblxuICAvKipcbiAgICogVGhlIE9BdXRoMiB0b2tlbiBlbmRwb2ludCBVUkwgZm9yIGNsaWVudCBjcmVkZW50aWFscyBmbG93LlxuICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0b2tlbkVuZHBvaW50VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT0F1dGgyIHNjb3BlIHN0cmluZ3MgZm9yIGNsaWVudCBjcmVkZW50aWFscyBmbG93LlxuICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IENvZ25pdG8gYXV0aG9yaXplci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvYXV0aFNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHYXRld2F5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiA0OCBjaGFyYWN0ZXJzIGlzIGNob3NlbiBpbnN0ZWFkIG9mIDEwMCBjaGFyYWN0ZXJzIHRoYXQgbWVudGlvbmVkIGluIGRvY3VtZW50YXRpb24gYmVsb3csXG4gICAgICAvLyBkdWUgdG8gZmFpbHVyZSBpbiBDRiBkZXBsb3ltZW50IHdoZW4gbW9yZSB0aGFuIDQ4IGNoYXJhY3RlcnMgdXNlZFxuICAgICAgLy8gQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1iZWRyb2NrYWdlbnRjb3JlLWdhdGV3YXkuaHRtbCNjZm4tYmVkcm9ja2FnZW50Y29yZS1nYXRld2F5LW5hbWVcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZ2F0ZXdheU5hbWUgPz9cbiAgICAgICAgTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNDggfSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXNzaWdubWVudHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHRoaXMubmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMudmFsaWRhdGVHYXRld2F5TmFtZSh0aGlzLm5hbWUpO1xuXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRGVzY3JpcHRpb24odGhpcy5kZXNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5rbXNLZXkgPSBwcm9wcy5rbXNLZXk7XG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZSA/PyB0aGlzLmNyZWF0ZUdhdGV3YXlSb2xlKCk7XG5cbiAgICBpZiAodGhpcy5rbXNLZXkgJiYgdGhpcy5yb2xlKSB7XG4gICAgICB0aGlzLmttc0tleS5ncmFudEVuY3J5cHREZWNyeXB0KHRoaXMucm9sZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPz8gdGhpcy5jcmVhdGVEZWZhdWx0TWNwUHJvdG9jb2xDb25maWd1cmF0aW9uKCk7XG4gICAgaWYgKHByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gcHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRDb2duaXRvQXV0aCA9IHRoaXMuY3JlYXRlRGVmYXVsdENvZ25pdG9BdXRob3JpemVyQ29uZmlnKCk7XG4gICAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gZGVmYXVsdENvZ25pdG9BdXRoLmF1dGhvcml6ZXJDb25maWc7XG4gICAgICB0aGlzLnRva2VuRW5kcG9pbnRVcmwgPSBkZWZhdWx0Q29nbml0b0F1dGgudG9rZW5FbmRwb2ludFVybDtcbiAgICAgIHRoaXMub2F1dGhTY29wZXMgPSBkZWZhdWx0Q29nbml0b0F1dGgub2F1dGhTY29wZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uLmF1dGhvcml6ZXJUeXBlID09PSBHYXRld2F5QXV0aG9yaXplclR5cGUuTk9ORSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQGF3cy1jZGsvYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhOm5vQXV0aEdhdGV3YXknLFxuICAgICAgICAnVGhpcyBnYXRld2F5IGhhcyBubyBpbmJvdW5kIGF1dGhvcml6YXRpb24uIFRoZSBlbmRwb2ludCB3aWxsIGJlIHB1YmxpY2x5IGFjY2Vzc2libGUgd2l0aG91dCBjcmVkZW50aWFscy4gRW5zdXJlIHlvdSBoYXZlIGltcGxlbWVudGVkIGNvbXBlbnNhdGluZyBzZWN1cml0eSBjb250cm9scyBzdWNoIGFzIEdhdGV3YXkgSW50ZXJjZXB0b3JzLiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LWluYm91bmQtYXV0aC5odG1sI2dhdGV3YXktaW5ib3VuZC1hdXRoLW5vbmUnLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5leGNlcHRpb25MZXZlbCA9IHByb3BzLmV4Y2VwdGlvbkxldmVsO1xuXG4gICAgdGhpcy50YWdzID0gcHJvcHMudGFncyA/PyB7fTtcblxuICAgIC8vIEluaXRpYWxpemUgaW50ZXJjZXB0b3JzIGZyb20gcHJvcHNcbiAgICBpZiAocHJvcHMuaW50ZXJjZXB0b3JDb25maWd1cmF0aW9ucykge1xuICAgICAgdGhpcy52YWxpZGF0ZUFuZEluaXRpYWxpemVJbnRlcmNlcHRvcnMocHJvcHMuaW50ZXJjZXB0b3JDb25maWd1cmF0aW9ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5wb2xpY3lFbmdpbmVDb25maWd1cmF0aW9uID0gcHJvcHMucG9saWN5RW5naW5lQ29uZmlndXJhdGlvbjtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEwxIEluc3RhbnRpYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBfcmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5HYXRld2F5KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGF1dGhvcml6ZXJDb25maWd1cmF0aW9uOiB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uLl9yZW5kZXIoKSxcbiAgICAgIGF1dGhvcml6ZXJUeXBlOiB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uLmF1dGhvcml6ZXJUeXBlLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBleGNlcHRpb25MZXZlbDogdGhpcy5leGNlcHRpb25MZXZlbCxcbiAgICAgIGludGVyY2VwdG9yQ29uZmlndXJhdGlvbnM6IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25zKCksXG4gICAgICB9KSxcbiAgICAgIGttc0tleUFybjogdGhpcy5rbXNLZXk/LmtleUFybixcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBvbGljeUVuZ2luZUNvbmZpZ3VyYXRpb246IHRoaXMucG9saWN5RW5naW5lQ29uZmlndXJhdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICBhcm46IHRoaXMucG9saWN5RW5naW5lQ29uZmlndXJhdGlvbi5wb2xpY3lFbmdpbmUucG9saWN5RW5naW5lQXJuLFxuICAgICAgICAgIG1vZGU6ICh0aGlzLnBvbGljeUVuZ2luZUNvbmZpZ3VyYXRpb24ubW9kZSA/PyBQb2xpY3lFbmdpbmVNb2RlLkxPR19PTkxZKS52YWx1ZSxcbiAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24uX3JlbmRlcigpLFxuICAgICAgcHJvdG9jb2xUeXBlOiB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbi5wcm90b2NvbFR5cGUsXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGU/LnJvbGVBcm4sXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLmdhdGV3YXlJZCA9IF9yZXNvdXJjZS5hdHRyR2F0ZXdheUlkZW50aWZpZXI7XG4gICAgdGhpcy5nYXRld2F5QXJuID0gX3Jlc291cmNlLmF0dHJHYXRld2F5QXJuO1xuICAgIHRoaXMuZ2F0ZXdheVVybCA9IF9yZXNvdXJjZS5hdHRyR2F0ZXdheVVybDtcbiAgICB0aGlzLnN0YXR1cyA9IF9yZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gX3Jlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSBfcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgICB0aGlzLnN0YXR1c1JlYXNvbiA9IF9yZXNvdXJjZS5hdHRyU3RhdHVzUmVhc29ucztcblxuICAgIGlmICh0aGlzLnBvbGljeUVuZ2luZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMucG9saWN5RW5naW5lQ29uZmlndXJhdGlvbi5wb2xpY3lFbmdpbmUuZ3JhbnRFdmFsdWF0ZUZvckdhdGV3YXkodGhpcy5yb2xlLCB0aGlzKTtcbiAgICAgIF9yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgTGFtYmRhIHRhcmdldCB0byB0aGlzIGdhdGV3YXlcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBHYXRld2F5VGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWQgZm9yIHRoZSB0YXJnZXRcbiAgICogQHBhcmFtIHByb3BzIFByb3BlcnRpZXMgZm9yIHRoZSBMYW1iZGEgdGFyZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEdhdGV3YXlUYXJnZXRcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRMYW1iZGFUYXJnZXQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWRkTGFtYmRhVGFyZ2V0T3B0aW9ucyxcbiAgKTogR2F0ZXdheVRhcmdldCB7XG4gICAgLy8gTGFtYmRhIGludm9rZSBwZXJtaXNzaW9ucyBhcmUgYXV0b21hdGljYWxseSBncmFudGVkIGluIExhbWJkYVRhcmdldENvbmZpZ3VyYXRpb24uYmluZCgpXG4gICAgLy8gQnVpbGQgdGFyZ2V0IHByb3BzLCBjb25kaXRpb25hbGx5IGluY2x1ZGluZyBjcmVkZW50aWFscyBpZiBhcnJheSBoYXMgaXRlbXNcbiAgICBjb25zdCB0YXJnZXRQcm9wczogYW55ID0ge1xuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZ2F0ZXdheTogdGhpcyxcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiBwcm9wcy5sYW1iZGFGdW5jdGlvbixcbiAgICAgIHRvb2xTY2hlbWE6IHByb3BzLnRvb2xTY2hlbWEsXG4gICAgICAuLi4ocHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMgJiYgcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICA/IHsgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcblxuICAgIGNvbnN0IHRhcmdldCA9IEdhdGV3YXlUYXJnZXQuZm9yTGFtYmRhKHRoaXMsIGlkLCB0YXJnZXRQcm9wcyk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBPcGVuQVBJIHRhcmdldCB0byB0aGlzIGdhdGV3YXlcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBHYXRld2F5VGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWQgZm9yIHRoZSB0YXJnZXRcbiAgICogQHBhcmFtIHByb3BzIFByb3BlcnRpZXMgZm9yIHRoZSBPcGVuQVBJIHRhcmdldFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBHYXRld2F5VGFyZ2V0XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkT3BlbkFwaVRhcmdldChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGRPcGVuQXBpVGFyZ2V0T3B0aW9ucyxcbiAgKTogR2F0ZXdheVRhcmdldCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gR2F0ZXdheVRhcmdldC5mb3JPcGVuQXBpKHRoaXMsIGlkLCB7XG4gICAgICBnYXRld2F5VGFyZ2V0TmFtZTogcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBnYXRld2F5OiB0aGlzLFxuICAgICAgYXBpU2NoZW1hOiBwcm9wcy5hcGlTY2hlbWEsXG4gICAgICB2YWxpZGF0ZU9wZW5BcGlTY2hlbWE6IHByb3BzLnZhbGlkYXRlT3BlbkFwaVNjaGVtYSxcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyxcbiAgICB9KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgU21pdGh5IHRhcmdldCB0byB0aGlzIGdhdGV3YXlcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBHYXRld2F5VGFyZ2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWQgZm9yIHRoZSB0YXJnZXRcbiAgICogQHBhcmFtIHByb3BzIFByb3BlcnRpZXMgZm9yIHRoZSBTbWl0aHkgdGFyZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEdhdGV3YXlUYXJnZXRcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRTbWl0aHlUYXJnZXQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWRkU21pdGh5VGFyZ2V0T3B0aW9ucyxcbiAgKTogR2F0ZXdheVRhcmdldCB7XG4gICAgLy8gQnVpbGQgdGFyZ2V0IHByb3BzLCBjb25kaXRpb25hbGx5IGluY2x1ZGluZyBjcmVkZW50aWFscyBpZiBhcnJheSBoYXMgaXRlbXNcbiAgICBjb25zdCB0YXJnZXRQcm9wczogYW55ID0ge1xuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZ2F0ZXdheTogdGhpcyxcbiAgICAgIHNtaXRoeU1vZGVsOiBwcm9wcy5zbWl0aHlNb2RlbCxcbiAgICAgIC4uLihwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyAmJiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgID8geyBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gR2F0ZXdheVRhcmdldC5mb3JTbWl0aHkodGhpcywgaWQsIHRhcmdldFByb3BzKTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIE1DUCBzZXJ2ZXIgdGFyZ2V0IHRvIHRoaXMgZ2F0ZXdheVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIEdhdGV3YXlUYXJnZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZCBmb3IgdGhlIHRhcmdldFxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIE1DUCBzZXJ2ZXIgdGFyZ2V0XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIEdhdGV3YXlUYXJnZXRcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL2dhdGV3YXktdGFyZ2V0LU1DUHNlcnZlcnMuaHRtbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZE1jcFNlcnZlclRhcmdldChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGRNY3BTZXJ2ZXJUYXJnZXRPcHRpb25zLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICAvLyBCdWlsZCB0YXJnZXQgcHJvcHMsIGNvbmRpdGlvbmFsbHkgaW5jbHVkaW5nIGNyZWRlbnRpYWxzIGlmIGFycmF5IGhhcyBpdGVtc1xuICAgIGNvbnN0IHRhcmdldFByb3BzOiBhbnkgPSB7XG4gICAgICBnYXRld2F5VGFyZ2V0TmFtZTogcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBnYXRld2F5OiB0aGlzLFxuICAgICAgZW5kcG9pbnQ6IHByb3BzLmVuZHBvaW50LFxuICAgICAgLi4uKHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zICYmIHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG5cbiAgICBjb25zdCB0YXJnZXQgPSBHYXRld2F5VGFyZ2V0LmZvck1jcFNlcnZlcih0aGlzLCBpZCwgdGFyZ2V0UHJvcHMpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gQVBJIEdhdGV3YXkgdGFyZ2V0IHRvIHRoaXMgZ2F0ZXdheVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIEdhdGV3YXlUYXJnZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZCBmb3IgdGhlIHRhcmdldFxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIEFQSSBHYXRld2F5IHRhcmdldFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBHYXRld2F5VGFyZ2V0XG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LXRhcmdldC1hcGktZ2F0ZXdheS5odG1sXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkQXBpR2F0ZXdheVRhcmdldChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBZGRBcGlHYXRld2F5VGFyZ2V0T3B0aW9ucyxcbiAgKTogR2F0ZXdheVRhcmdldCB7XG4gICAgLy8gQVBJIEdhdGV3YXkgdGFyZ2V0cyByZXF1aXJlIGV4cGxpY2l0IGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbiBvciBkZWZhdWx0cyB0byBJQU1cbiAgICAvLyBHZXRFeHBvcnQgYW5kIGV4ZWN1dGUtYXBpOkludm9rZSBwZXJtaXNzaW9ucyBhcmUgYXV0b21hdGljYWxseSBncmFudGVkIGluIEFwaUdhdGV3YXlUYXJnZXRDb25maWd1cmF0aW9uLmJpbmQoKVxuICAgIGNvbnN0IHRhcmdldCA9IEdhdGV3YXlUYXJnZXQuZm9yQXBpR2F0ZXdheSh0aGlzLCBpZCwge1xuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZ2F0ZXdheTogdGhpcyxcbiAgICAgIHJlc3RBcGk6IHByb3BzLnJlc3RBcGksXG4gICAgICBzdGFnZTogcHJvcHMuc3RhZ2UsXG4gICAgICBhcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb246IHByb3BzLmFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbixcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBwcm9wcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucyxcbiAgICAgIG1ldGFkYXRhQ29uZmlndXJhdGlvbjogcHJvcHMubWV0YWRhdGFDb25maWd1cmF0aW9uLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBzZXJ2aWNlIHJvbGUgZm9yIHRoZSBnYXRld2F5IHRvIGFzc3VtZVxuICAgKlxuICAgKiBUaGUgc2VydmljZSByb2xlIHN0YXJ0cyB3aXRoIG1pbmltYWwgcGVybWlzc2lvbnMuIEFkZGl0aW9uYWwgcGVybWlzc2lvbnNcbiAgICogYXJlIGFkZGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0YXJnZXRzIGFyZSBjb25maWd1cmVkOlxuICAgKiAtIEtNUyBlbmNyeXB0aW9uOiBBdXRvbWF0aWNhbGx5IGdyYW50cyBlbmNyeXB0L2RlY3J5cHQgcGVybWlzc2lvbnNcbiAgICpcbiAgICogRm9yIG90aGVyIHRhcmdldCB0eXBlcywgbWFudWFsbHkgZ3JhbnQgcGVybWlzc2lvbnMgdXNpbmcgc3RhbmRhcmQgQ0RLIGdyYW50IG1ldGhvZHM6XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVHYXRld2F5Um9sZSgpOiBpYW0uUm9sZSB7XG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnU2VydmljZVJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpLFxuICAgICAgZGVzY3JpcHRpb246IGBTZXJ2aWNlIHJvbGUgZm9yIEJlZHJvY2sgQWdlbnRDb3JlIEdhdGV3YXkgJHt0aGlzLm5hbWV9YCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICBjb25zdCBhY2NvdW50ID0gU3RhY2sub2YodGhpcykuYWNjb3VudDtcbiAgICBjb25zdCBwYXJ0aXRpb24gPSBTdGFjay5vZih0aGlzKS5wYXJ0aXRpb247XG5cbiAgICAvLyBUaGlzIHJlc3RyaWN0cyByb2xlIGFzc3VtcHRpb24gdG8gdGhlIHNwZWNpZmljIGdhdGV3YXkgcmVzb3VyY2Ugb25seSBpbiB0aGlzIGFjY291bnQsXG4gICAgLy8gcHJldmVudGluZyBvdGhlciBhY2NvdW50cyBmcm9tIGFzc3VtaW5nIHRoaXMgcm9sZS5cbiAgICAvLyBTZWU6aHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LXByZXJlcXVpc2l0ZXMtcGVybWlzc2lvbnMuaHRtbCNnYXRld2F5LXNlcnZpY2Utcm9sZS1wZXJtaXNzaW9uc1xuICAgIHJvbGUuYXNzdW1lUm9sZVBvbGljeT8uYWRkU3RhdGVtZW50cyhcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyldLFxuICAgICAgICBhY3Rpb25zOiBHQVRFV0FZX0FTU1VNRV9ST0xFLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFjY291bnQnOiBhY2NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgQXJuTGlrZToge1xuICAgICAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBgYXJuOiR7cGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTpnYXRld2F5LyR7dGhpcy5uYW1lfSpgLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgaWYgKHRoaXMua21zS2V5KSB7XG4gICAgICByb2xlLmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBHQVRFV0FZX0tNU19LRVlfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogW3RoaXMua21zS2V5LmtleUFybl0sXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZ2F0ZXdheSBuYW1lIGZvcm1hdFxuICAgKiBQYXR0ZXJuOiBeKFswLTlhLXpBLVpdWy1dPyl7MSw0OH0kXG4gICAqIE1heCBsZW5ndGg6IDQ4IGNoYXJhY3RlcnNcbiAgICogQHBhcmFtIG5hbWUgVGhlIGdhdGV3YXkgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBuYW1lIGlzIGludmFsaWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlR2F0ZXdheU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBtYXhMZW5ndGg6IDQ4LFxuICAgICAgZmllbGROYW1lOiAnR2F0ZXdheSBuYW1lJyxcbiAgICB9KTtcblxuICAgIGlmIChsZW5ndGhFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgR2F0ZXdheU5hbWVMZW5ndGhJbnZhbGlkYCwgbGVuZ3RoRXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICBuYW1lLFxuICAgICAgJ0dhdGV3YXkgbmFtZScsXG4gICAgICAvXihbMC05YS16QS1aXVstXT8pezEsNDh9JC8sXG4gICAgICAnR2F0ZXdheSBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLCB3aXRoIGh5cGhlbnMgb25seSBiZXR3ZWVuIGNoYXJhY3RlcnMnLFxuICAgICk7XG5cbiAgICBpZiAocGF0dGVybkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBHYXRld2F5TmFtZVBhdHRlcm5JbnZhbGlkYCwgcGF0dGVybkVycm9ycy5qb2luKCdcXG4nKSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZm9ybWF0XG4gICAqIE1heCBsZW5ndGg6IDIwMCBjaGFyYWN0ZXJzXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IGRlc2NyaXB0aW9uLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgbWF4TGVuZ3RoOiAyMDAsXG4gICAgICBmaWVsZE5hbWU6ICdEZXNjcmlwdGlvbicsXG4gICAgfSk7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEdhdGV3YXlEZXNjcmlwdGlvbkludmFsaWRgLCBlcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBDb2duaXRvIGF1dGhvcml6ZXIgZm9yIHRoZSBnYXRld2F5XG4gICAqIFByb3Zpc2lvbnMgYSBDb2duaXRvIFVzZXIgUG9vbCBhbmQgY29uZmlndXJlcyBNMk0gKG1hY2hpbmUtdG8tbWFjaGluZSkgSldUIGF1dGhlbnRpY2F0aW9uXG4gICAqIHVzaW5nIE9BdXRoIDIuMCBjbGllbnQgY3JlZGVudGlhbHMgZ3JhbnQgZmxvd1xuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvaWRlbnRpdHktaWRwLWNvZ25pdG8uaHRtbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRGVmYXVsdENvZ25pdG9BdXRob3JpemVyQ29uZmlnKCk6IHtcbiAgICBhdXRob3JpemVyQ29uZmlnOiBJR2F0ZXdheUF1dGhvcml6ZXJDb25maWc7XG4gICAgdG9rZW5FbmRwb2ludFVybDogc3RyaW5nO1xuICAgIG9hdXRoU2NvcGVzOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgdXNlclBvb2wgPSBuZXcgY29nbml0by5Vc2VyUG9vbCh0aGlzLCAnVXNlclBvb2wnLCB7XG4gICAgICBzaWduSW5DYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc291cmNlU2VydmVyID0gdXNlclBvb2wuYWRkUmVzb3VyY2VTZXJ2ZXIoJ1Jlc291cmNlU2VydmVyJywge1xuICAgICAgaWRlbnRpZmllcjogTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAyNTYsIHNlcGFyYXRvcjogJy0nIH0pLFxuICAgICAgc2NvcGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzY29wZU5hbWU6ICdyZWFkJyxcbiAgICAgICAgICBzY29wZURlc2NyaXB0aW9uOiAnUmVhZCBhY2Nlc3MgdG8gZ2F0ZXdheSB0b29scycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzY29wZU5hbWU6ICd3cml0ZScsXG4gICAgICAgICAgc2NvcGVEZXNjcmlwdGlvbjogJ1dyaXRlIGFjY2VzcyB0byBnYXRld2F5IHRvb2xzJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvYXV0aFNjb3BlcyA9IFtcbiAgICAgIGNvZ25pdG8uT0F1dGhTY29wZS5yZXNvdXJjZVNlcnZlcihyZXNvdXJjZVNlcnZlciwge1xuICAgICAgICBzY29wZU5hbWU6ICdyZWFkJyxcbiAgICAgICAgc2NvcGVEZXNjcmlwdGlvbjogJ1JlYWQgYWNjZXNzIHRvIGdhdGV3YXkgdG9vbHMnLFxuICAgICAgfSksXG4gICAgICBjb2duaXRvLk9BdXRoU2NvcGUucmVzb3VyY2VTZXJ2ZXIocmVzb3VyY2VTZXJ2ZXIsIHtcbiAgICAgICAgc2NvcGVOYW1lOiAnd3JpdGUnLFxuICAgICAgICBzY29wZURlc2NyaXB0aW9uOiAnV3JpdGUgYWNjZXNzIHRvIGdhdGV3YXkgdG9vbHMnLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIGNvbnN0IHVzZXJQb29sQ2xpZW50ID0gdXNlclBvb2wuYWRkQ2xpZW50KCdEZWZhdWx0Q2xpZW50Jywge1xuICAgICAgZ2VuZXJhdGVTZWNyZXQ6IHRydWUsXG4gICAgICBvQXV0aDoge1xuICAgICAgICBmbG93czoge1xuICAgICAgICAgIGNsaWVudENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzY29wZXM6IG9hdXRoU2NvcGVzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBDb2duaXRvIERvbWFpbiBmb3IgT0F1dGgyIHRva2VuIGVuZHBvaW50XG4gICAgLy8gVXNlIHVuaXF1ZVJlc291cmNlTmFtZSB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBkb21haW4gcHJlZml4IHRvTG93ZXJDYXNlKCkgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgaGFzaCBwb3J0aW9uIGlzIHVwcGVyY2FzZVxuICAgIGNvbnN0IGRvbWFpblByZWZpeCA9IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICBtYXhMZW5ndGg6IDYzLCAvLyBDb2duaXRvIGRvbWFpbiBwcmVmaXggbWF4IGxlbmd0aFxuICAgICAgc2VwYXJhdG9yOiAnLScsXG4gICAgfSkudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IHVzZXJQb29sRG9tYWluID0gdXNlclBvb2wuYWRkRG9tYWluKCdEb21haW4nLCB7XG4gICAgICBjb2duaXRvRG9tYWluOiB7XG4gICAgICAgIGRvbWFpblByZWZpeDogZG9tYWluUHJlZml4LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMudXNlclBvb2wgPSB1c2VyUG9vbDtcbiAgICB0aGlzLnVzZXJQb29sQ2xpZW50ID0gdXNlclBvb2xDbGllbnQ7XG4gICAgdGhpcy51c2VyUG9vbERvbWFpbiA9IHVzZXJQb29sRG9tYWluO1xuICAgIHRoaXMucmVzb3VyY2VTZXJ2ZXIgPSByZXNvdXJjZVNlcnZlcjtcblxuICAgIHJldHVybiB7XG4gICAgICBhdXRob3JpemVyQ29uZmlnOiBHYXRld2F5QXV0aG9yaXplci51c2luZ0NvZ25pdG8oe1xuICAgICAgICB1c2VyUG9vbDogdXNlclBvb2wsXG4gICAgICAgIGFsbG93ZWRDbGllbnRzOiBbdXNlclBvb2xDbGllbnRdLFxuICAgICAgfSksXG4gICAgICB0b2tlbkVuZHBvaW50VXJsOiBgaHR0cHM6Ly8ke3VzZXJQb29sRG9tYWluLmRvbWFpbk5hbWV9LmF1dGguJHtTdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmNvZ25pdG8uY29tL29hdXRoMi90b2tlbmAsXG4gICAgICBvYXV0aFNjb3Blczogb2F1dGhTY29wZXMubWFwKHNjb3BlID0+IHNjb3BlLnNjb3BlTmFtZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBNQ1AgcHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGdhdGV3YXlcbiAgICogUHJvdmlkZXMgc2Vuc2libGUgZGVmYXVsdHMgZm9yIE1DUCBwcm90b2NvbCBzZXR0aW5nc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRGVmYXVsdE1jcFByb3RvY29sQ29uZmlndXJhdGlvbigpOiBJR2F0ZXdheVByb3RvY29sQ29uZmlnIHtcbiAgICByZXR1cm4gbmV3IE1jcFByb3RvY29sQ29uZmlndXJhdGlvbih7XG4gICAgICBzdXBwb3J0ZWRWZXJzaW9uczogW01DUFByb3RvY29sVmVyc2lvbi5NQ1BfMjAyNV8wM18yNl0sXG4gICAgICBzZWFyY2hUeXBlOiBNY3BHYXRld2F5U2VhcmNoVHlwZS5TRU1BTlRJQyxcbiAgICAgIGluc3RydWN0aW9uczogJ0RlZmF1bHQgZ2F0ZXdheSB0byBjb25uZWN0IHRvIGV4dGVybmFsIE1DUCB0b29scycsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGludGVyY2VwdG9yIHRvIHRoaXMgZ2F0ZXdheVxuICAgKlxuICAgKiBJbnRlcmNlcHRvcnMgYWxsb3cgeW91IHRvIHJ1biBjdXN0b20gY29kZSBhdCBzcGVjaWZpYyBwb2ludHMgaW4gdGhlIGdhdGV3YXkgcmVxdWVzdC9yZXNwb25zZSBmbG93OlxuICAgKiAtIFJFUVVFU1QgaW50ZXJjZXB0b3JzIGV4ZWN1dGUgYmVmb3JlIHRoZSBnYXRld2F5IGNhbGxzIHRoZSB0YXJnZXRcbiAgICogLSBSRVNQT05TRSBpbnRlcmNlcHRvcnMgZXhlY3V0ZSBhZnRlciB0aGUgdGFyZ2V0IHJlc3BvbmRzXG4gICAqXG4gICAqIEEgZ2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVFVRVNUIGludGVyY2VwdG9yIGFuZCBvbmUgUkVTUE9OU0UgaW50ZXJjZXB0b3IuXG4gICAqIEBwYXJhbSBpbnRlcmNlcHRvciBUaGUgaW50ZXJjZXB0b3IgdG8gYWRkICh1c2UgTGFtYmRhSW50ZXJjZXB0b3IgZmFjdG9yeSBtZXRob2RzKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIGFuIGludGVyY2VwdG9yIG9mIHRoZSBzYW1lIHR5cGUgYWxyZWFkeSBleGlzdHNcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRJbnRlcmNlcHRvcihpbnRlcmNlcHRvcjogSUludGVyY2VwdG9yKTogdm9pZCB7XG4gICAgY29uc3QgaW50ZXJjZXB0aW9uUG9pbnQgPSBpbnRlcmNlcHRvci5pbnRlcmNlcHRpb25Qb2ludDtcblxuICAgIGlmIChpbnRlcmNlcHRpb25Qb2ludCA9PT0gSW50ZXJjZXB0aW9uUG9pbnQuUkVRVUVTVCkge1xuICAgICAgaWYgKHRoaXMucmVxdWVzdEludGVyY2VwdG9yQ29uZmlnKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgbGl0YFJlcXVlc3RJbnRlcmNlcHRvckFscmVhZHlFeGlzdHNgLFxuICAgICAgICAgICdHYXRld2F5IGFscmVhZHkgaGFzIGEgUkVRVUVTVCBpbnRlcmNlcHRvciBjb25maWd1cmVkLiBBIGdhdGV3YXkgY2FuIGhhdmUgYXQgbW9zdCBvbmUgUkVRVUVTVCBpbnRlcmNlcHRvci4nLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcXVlc3RJbnRlcmNlcHRvckNvbmZpZyA9IGludGVyY2VwdG9yLmJpbmQodGhpcywgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChpbnRlcmNlcHRpb25Qb2ludCA9PT0gSW50ZXJjZXB0aW9uUG9pbnQuUkVTUE9OU0UpIHtcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNlSW50ZXJjZXB0b3JDb25maWcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUmVzcG9uc2VJbnRlcmNlcHRvckFscmVhZHlFeGlzdHNgLFxuICAgICAgICAgICdHYXRld2F5IGFscmVhZHkgaGFzIGEgUkVTUE9OU0UgaW50ZXJjZXB0b3IgY29uZmlndXJlZC4gQSBnYXRld2F5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIFJFU1BPTlNFIGludGVyY2VwdG9yLicsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZyA9IGludGVyY2VwdG9yLmJpbmQodGhpcywgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbmQgaW5pdGlhbGl6ZXMgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25zXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUFuZEluaXRpYWxpemVJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3JzOiBJSW50ZXJjZXB0b3JbXSk6IHZvaWQge1xuICAgIGNvbnN0IHJlcXVlc3RDb3VudCA9IGludGVyY2VwdG9ycy5maWx0ZXIoaSA9PiBpLmludGVyY2VwdGlvblBvaW50ID09PSBJbnRlcmNlcHRpb25Qb2ludC5SRVFVRVNUKS5sZW5ndGg7XG4gICAgY29uc3QgcmVzcG9uc2VDb3VudCA9IGludGVyY2VwdG9ycy5maWx0ZXIoaSA9PiBpLmludGVyY2VwdGlvblBvaW50ID09PSBJbnRlcmNlcHRpb25Qb2ludC5SRVNQT05TRSkubGVuZ3RoO1xuXG4gICAgaWYgKHJlcXVlc3RDb3VudCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBUb29NYW55UmVxdWVzdEludGVyY2VwdG9yc2AsXG4gICAgICAgIGBHYXRld2F5IGNhbiBoYXZlIGF0IG1vc3Qgb25lIFJFUVVFU1QgaW50ZXJjZXB0b3IuIEZvdW5kICR7cmVxdWVzdENvdW50fSBSRVFVRVNUIGludGVyY2VwdG9ycy5gLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VDb3VudCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBUb29NYW55UmVzcG9uc2VJbnRlcmNlcHRvcnNgLFxuICAgICAgICBgR2F0ZXdheSBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBSRVNQT05TRSBpbnRlcmNlcHRvci4gRm91bmQgJHtyZXNwb25zZUNvdW50fSBSRVNQT05TRSBpbnRlcmNlcHRvcnMuYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgIHRoaXMuYWRkSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBpbnRlcmNlcHRvciBjb25maWd1cmF0aW9ucyBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm8gaW50ZXJjZXB0b3JzIGFyZSBjb25maWd1cmVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJJbnRlcmNlcHRvckNvbmZpZ3VyYXRpb25zKCk6IGFueVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb25maWdzOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucmVxdWVzdEludGVyY2VwdG9yQ29uZmlnKSB7XG4gICAgICBjb25maWdzLnB1c2godGhpcy5yZXF1ZXN0SW50ZXJjZXB0b3JDb25maWcuY29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZykge1xuICAgICAgY29uZmlncy5wdXNoKHRoaXMucmVzcG9uc2VJbnRlcmNlcHRvckNvbmZpZy5jb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlncy5sZW5ndGggPiAwID8gY29uZmlncyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -24,7 +24,7 @@ var GatewayAuthorizerType;
24
24
  * Custom JWT authorizer configuration implementation
25
25
  */
26
26
  class CustomJwtAuthorizer {
27
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CustomJwtAuthorizer", version: "2.253.0-alpha.0" };
27
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CustomJwtAuthorizer", version: "2.254.0-alpha.0" };
28
28
  authorizerType = GatewayAuthorizerType.CUSTOM_JWT;
29
29
  discoveryUrl;
30
30
  allowedAudience;
@@ -73,7 +73,7 @@ exports.CustomJwtAuthorizer = CustomJwtAuthorizer;
73
73
  *
74
74
  */
75
75
  class IamAuthorizer {
76
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.IamAuthorizer", version: "2.253.0-alpha.0" };
76
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.IamAuthorizer", version: "2.254.0-alpha.0" };
77
77
  authorizerType = GatewayAuthorizerType.AWS_IAM;
78
78
  /**
79
79
  * @internal
@@ -92,7 +92,7 @@ exports.IamAuthorizer = IamAuthorizer;
92
92
  * No authorization configuration implementation
93
93
  */
94
94
  class NoAuthAuthorizer {
95
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.NoAuthAuthorizer", version: "2.253.0-alpha.0" };
95
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.NoAuthAuthorizer", version: "2.254.0-alpha.0" };
96
96
  authorizerType = GatewayAuthorizerType.NONE;
97
97
  /**
98
98
  * @internal
@@ -106,7 +106,7 @@ exports.NoAuthAuthorizer = NoAuthAuthorizer;
106
106
  * Factory class for creating Gateway Authorizers
107
107
  */
108
108
  class GatewayAuthorizer {
109
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayAuthorizer", version: "2.253.0-alpha.0" };
109
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayAuthorizer", version: "2.254.0-alpha.0" };
110
110
  /**
111
111
  * AWS IAM authorizer instance
112
112
  */
@@ -29,7 +29,7 @@ class GatewayCustomClaim {
29
29
  valueType;
30
30
  operator;
31
31
  value;
32
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayCustomClaim", version: "2.253.0-alpha.0" };
32
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayCustomClaim", version: "2.254.0-alpha.0" };
33
33
  /**
34
34
  * Create a custom claim with a string value.
35
35
  * String claims must use the EQUALS operator.
@@ -34,7 +34,7 @@ var InterceptionPoint;
34
34
  * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-interceptors.html
35
35
  */
36
36
  class LambdaInterceptor {
37
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LambdaInterceptor", version: "2.253.0-alpha.0" };
37
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LambdaInterceptor", version: "2.254.0-alpha.0" };
38
38
  /**
39
39
  * Create a REQUEST interceptor that executes before the gateway calls the target
40
40
  *
@@ -1,7 +1,7 @@
1
- import type { IRole } from 'aws-cdk-lib/aws-iam';
2
1
  import { Grant } from 'aws-cdk-lib/aws-iam';
3
2
  import type { ICredentialProviderConfig } from './credential-provider';
4
3
  import { CredentialProviderType } from './credential-provider';
4
+ import type { IGateway } from '../gateway-base';
5
5
  /******************************************************************************
6
6
  * API KEY
7
7
  *****************************************************************************/
@@ -65,7 +65,9 @@ export declare class ApiKeyCredentialLocation {
65
65
  private constructor();
66
66
  }
67
67
  /**
68
- * API Key configuration
68
+ * API key credential provider ARNs for gateway outbound auth (Token Vault identity).
69
+ *
70
+ * Pass this to {@link GatewayCredentialProvider.fromApiKeyIdentityArn} or to {@link ApiKeyCredentialProviderConfiguration}.
69
71
  */
70
72
  export interface ApiKeyCredentialProviderProps {
71
73
  /**
@@ -109,9 +111,16 @@ export declare class ApiKeyCredentialProviderConfiguration implements ICredentia
109
111
  readonly credentialLocation: ApiKeyCredentialLocation;
110
112
  constructor(configuration: ApiKeyCredentialProviderProps);
111
113
  /**
112
- * Grant the needed permissions to the role for API key authentication
114
+ * Grant the needed permissions to the gateway role for API key authentication.
115
+ *
116
+ * Produces three scoped IAM statements matching the console-generated policy:
117
+ * 1. `GetWorkloadAccessToken` on the workload identity directory ARNs
118
+ * 2. `GetResourceApiKey` on the token vault, credential provider, directory, and identity ARNs
119
+ * 3. `secretsmanager:GetSecretValue` on the specific credential secret ARN
120
+ *
121
+ * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-outbound-auth.html
113
122
  */
114
- grantNeededPermissionsToRole(role: IRole): Grant | undefined;
123
+ grantNeededPermissionsToRole(gateway: IGateway): Grant | undefined;
115
124
  /**
116
125
  * @internal
117
126
  */
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ApiKeyCredentialProviderConfiguration = exports.ApiKeyCredentialLocation = exports.ApiKeyCredentialLocationType = void 0;
4
4
  const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
6
7
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
8
  const credential_provider_1 = require("./credential-provider");
8
9
  const perms_1 = require("../perms");
@@ -19,7 +20,7 @@ var ApiKeyCredentialLocationType;
19
20
  * API Key location within the request
20
21
  */
21
22
  class ApiKeyCredentialLocation {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiKeyCredentialLocation", version: "2.253.0-alpha.0" };
23
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiKeyCredentialLocation", version: "2.254.0-alpha.0" };
23
24
  /**
24
25
  * Create a header-based API key credential location
25
26
  * @param config - Optional configuration for the credential location
@@ -98,27 +99,68 @@ class ApiKeyCredentialProviderConfiguration {
98
99
  this.credentialLocation = configuration.credentialLocation ?? ApiKeyCredentialLocation.header();
99
100
  }
100
101
  /**
101
- * Grant the needed permissions to the role for API key authentication
102
+ * Grant the needed permissions to the gateway role for API key authentication.
103
+ *
104
+ * Produces three scoped IAM statements matching the console-generated policy:
105
+ * 1. `GetWorkloadAccessToken` on the workload identity directory ARNs
106
+ * 2. `GetResourceApiKey` on the token vault, credential provider, directory, and identity ARNs
107
+ * 3. `secretsmanager:GetSecretValue` on the specific credential secret ARN
108
+ *
109
+ * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-outbound-auth.html
102
110
  */
103
- grantNeededPermissionsToRole(role) {
104
- const statements = [
105
- new aws_iam_1.PolicyStatement({
106
- actions: [
107
- ...perms_1.GATEWAY_API_KEY_PERMS,
108
- ...perms_1.GATEWAY_WORKLOAD_IDENTITY_PERMS,
109
- ],
110
- resources: [this.providerArn],
111
- }),
112
- new aws_iam_1.PolicyStatement({
113
- actions: perms_1.GATEWAY_SECRETS_PERMS,
114
- resources: [this.secretArn],
115
- }),
116
- ];
117
- return aws_iam_1.Grant.addToPrincipal({
118
- grantee: role,
119
- actions: statements.flatMap(s => s.actions),
120
- resourceArns: statements.flatMap(s => s.resources),
111
+ grantNeededPermissionsToRole(gateway) {
112
+ const stack = aws_cdk_lib_1.Stack.of(gateway);
113
+ const directoryArn = stack.formatArn({
114
+ service: 'bedrock-agentcore',
115
+ resource: 'workload-identity-directory',
116
+ resourceName: 'default',
117
+ arnFormat: aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME,
121
118
  });
119
+ const identityWildcardArn = `${directoryArn}/workload-identity/${gateway.name}-*`;
120
+ const tokenVaultArn = stack.formatArn({
121
+ service: 'bedrock-agentcore',
122
+ resource: 'token-vault',
123
+ resourceName: 'default',
124
+ arnFormat: aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME,
125
+ });
126
+ const workloadIdentityGrant = aws_iam_1.Grant.addToPrincipal({
127
+ grantee: gateway.role,
128
+ actions: [...perms_1.GATEWAY_WORKLOAD_IDENTITY_PERMS],
129
+ resourceArns: [directoryArn, identityWildcardArn],
130
+ scope: gateway,
131
+ });
132
+ const apiKeyGrant = aws_iam_1.Grant.addToPrincipal({
133
+ grantee: gateway.role,
134
+ actions: [...perms_1.GATEWAY_API_KEY_PERMS],
135
+ resourceArns: [tokenVaultArn, this.providerArn, directoryArn, identityWildcardArn],
136
+ scope: gateway,
137
+ });
138
+ // The CFN attribute ApiKeySecretArn is an object { SecretArn: string }, not a
139
+ // plain string, so the Token resolves to an object which cannot be placed in
140
+ // IAM Resource fields. When the caller supplies a literal ARN string (e.g. via
141
+ // fromApiKeyIdentityArn) we can scope tightly; otherwise fall back to a
142
+ // service-managed prefix wildcard.
143
+ let secretResourceArns;
144
+ if (aws_cdk_lib_1.Token.isUnresolved(this.secretArn)) {
145
+ aws_cdk_lib_1.Annotations.of(gateway).addWarningV2('@aws-cdk/aws-bedrock-agentcore-alpha:wildcardSecretArnGrant', 'The secret ARN is an unresolved token. Granting access using a wildcard prefix (bedrock-agentcore-identity!*). ' +
146
+ 'To scope the grant to a specific secret, supply a literal secret ARN via fromApiKeyIdentityArn.');
147
+ secretResourceArns = [stack.formatArn({
148
+ service: 'secretsmanager',
149
+ resource: 'secret',
150
+ resourceName: 'bedrock-agentcore-identity!*',
151
+ arnFormat: aws_cdk_lib_1.ArnFormat.COLON_RESOURCE_NAME,
152
+ })];
153
+ }
154
+ else {
155
+ secretResourceArns = [this.secretArn];
156
+ }
157
+ const secretGrant = aws_iam_1.Grant.addToPrincipal({
158
+ grantee: gateway.role,
159
+ actions: [...perms_1.GATEWAY_SECRETS_PERMS],
160
+ resourceArns: secretResourceArns,
161
+ scope: gateway,
162
+ });
163
+ return workloadIdentityGrant.combine(apiKeyGrant).combine(secretGrant);
122
164
  }
123
165
  /**
124
166
  * @internal
@@ -138,4 +180,4 @@ class ApiKeyCredentialProviderConfiguration {
138
180
  }
139
181
  }
140
182
  exports.ApiKeyCredentialProviderConfiguration = ApiKeyCredentialProviderConfiguration;
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFwaS1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxpREFBNkQ7QUFFN0QsK0RBQStEO0FBQy9ELG9DQUF5RztBQTZCekc7OztHQUdHO0FBQ0gsSUFBWSw0QkFHWDtBQUhELFdBQVksNEJBQTRCO0lBQ3RDLGlEQUFpQixDQUFBO0lBQ2pCLG1FQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFIVyw0QkFBNEIsNENBQTVCLDRCQUE0QixRQUd2QztBQUVEOztHQUVHO0FBQ0gsTUFBYSx3QkFBd0I7O0lBQ25DOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQXNDOzs7Ozs7Ozs7O1FBQ3pELE9BQU8sSUFBSSx3QkFBd0IsQ0FDakMsNEJBQTRCLENBQUMsTUFBTSxFQUNuQyxNQUFNLEVBQUUsdUJBQXVCLElBQUksZUFBZSxFQUNsRCxNQUFNLEVBQUUsZ0JBQWdCLElBQUksU0FBUyxDQUN0QyxDQUFDO0tBQ0g7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFzQzs7Ozs7Ozs7OztRQUNqRSxPQUFPLElBQUksd0JBQXdCLENBQ2pDLDRCQUE0QixDQUFDLGVBQWUsRUFDNUMsTUFBTSxFQUFFLHVCQUF1QixJQUFJLFNBQVMsRUFDNUMsTUFBTSxFQUFFLGdCQUFnQixDQUN6QixDQUFDO0tBQ0g7SUFFRDs7T0FFRztJQUNhLHVCQUF1QixDQUFTO0lBQ2hEOztPQUVHO0lBQ2EsZ0JBQWdCLENBQVU7SUFDMUM7O09BRUc7SUFDYSxzQkFBc0IsQ0FBUztJQUUvQyxZQUNFLHNCQUE4QixFQUM5Qix1QkFBK0IsRUFDL0IsZ0JBQXlCO1FBRXpCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0tBQzFDOztBQWhESCw0REFpREM7QUE2QkQ7Ozs7R0FJRztBQUNILE1BQWEscUNBQXFDO0lBQ2hDLHNCQUFzQixHQUFHLDRDQUFzQixDQUFDLE9BQU8sQ0FBQztJQUN4RTs7T0FFRztJQUNhLFdBQVcsQ0FBUztJQUNwQzs7T0FFRztJQUNhLFNBQVMsQ0FBUztJQUNsQzs7T0FFRztJQUNhLGtCQUFrQixDQUEyQjtJQUU3RCxZQUFZLGFBQTRDO1FBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxrQkFBa0IsSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNqRztJQUVEOztPQUVHO0lBQ0gsNEJBQTRCLENBQUMsSUFBVztRQUN0QyxNQUFNLFVBQVUsR0FBRztZQUNqQixJQUFJLHlCQUFlLENBQUM7Z0JBQ2xCLE9BQU8sRUFBRTtvQkFDUCxHQUFHLDZCQUFxQjtvQkFDeEIsR0FBRyx1Q0FBK0I7aUJBQ25DO2dCQUNELFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDOUIsQ0FBQztZQUNGLElBQUkseUJBQWUsQ0FBQztnQkFDbEIsT0FBTyxFQUFFLDZCQUFxQjtnQkFDOUIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzthQUM1QixDQUFDO1NBQ0gsQ0FBQztRQUVGLE9BQU8sZUFBSyxDQUFDLGNBQWMsQ0FBQztZQUMxQixPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMzQyxZQUFZLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDbkQsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxPQUFPO1lBQ0wsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtZQUNuRCxrQkFBa0IsRUFBRTtnQkFDbEIsd0JBQXdCLEVBQUU7b0JBQ3hCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQjtvQkFDbEUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHVCQUF1QjtvQkFDeEUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQjtpQkFDM0Q7YUFDRjtTQUNGLENBQUM7S0FDSDtDQUNGO0FBOURELHNGQThEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEdyYW50LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlIHsgSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZyB9IGZyb20gJy4vY3JlZGVudGlhbC1wcm92aWRlcic7XG5pbXBvcnQgeyBDcmVkZW50aWFsUHJvdmlkZXJUeXBlIH0gZnJvbSAnLi9jcmVkZW50aWFsLXByb3ZpZGVyJztcbmltcG9ydCB7IEdBVEVXQVlfQVBJX0tFWV9QRVJNUywgR0FURVdBWV9XT1JLTE9BRF9JREVOVElUWV9QRVJNUywgR0FURVdBWV9TRUNSRVRTX1BFUk1TIH0gZnJvbSAnLi4vcGVybXMnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQSSBLRVlcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxuICogQVBJIEtleSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlLZXlBZGRpdGlvbmFsQ29uZmlndXJhdGlvbiB7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjcmVkZW50aWFsIHBhcmFtZXRlciBmb3IgdGhlIEFQSSBrZXkuXG4gICAqIFRoaXMgcGFyYW1ldGVyIG5hbWUgaXMgdXNlZCB3aGVuIHNlbmRpbmcgdGhlIEFQSSBrZXkgdG8gdGhlIHRhcmdldCBlbmRwb2ludC5cbiAgICpcbiAgICogTGVuZ3RoIENvbnN0cmFpbnRzOiBNaW5pbXVtIGxlbmd0aCBvZiAxLiBNYXhpbXVtIGxlbmd0aCBvZiA2NC5cbiAgICogQGRlZmF1bHQgLSAnQXV0aG9yaXphdGlvbicgZm9yIEhFQURFUiwgJ2FwaV9rZXknIGZvciBRVUVSWV9QQVJBTUVURVJcbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IGZvciB0aGUgQVBJIGtleSBjcmVkZW50aWFsLlxuICAgKiBUaGlzIHByZWZpeCBpcyBhZGRlZCB0byB0aGUgQVBJIGtleSB3aGVuIHNlbmRpbmcgaXQgdG8gdGhlIHRhcmdldCBlbmRwb2ludC5cbiAgICpcbiAgICogTGVuZ3RoIENvbnN0cmFpbnRzOiBNaW5pbXVtIGxlbmd0aCBvZiAxLiBNYXhpbXVtIGxlbmd0aCBvZiA2NC5cbiAgICogQGRlZmF1bHQgLSAnQmVhcmVyICcgZm9yIEhFQURFUiwgbm8gcHJlZml4IGZvciBRVUVSWV9QQVJBTUVURVJcbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxQcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQVBJIEtleSBjcmVkZW50aWFsIGxvY2F0aW9uIHR5cGVcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZW51bSBBcGlLZXlDcmVkZW50aWFsTG9jYXRpb25UeXBlIHtcbiAgSEVBREVSID0gJ0hFQURFUicsXG4gIFFVRVJZX1BBUkFNRVRFUiA9ICdRVUVSWV9QQVJBTUVURVInLFxufVxuXG4vKipcbiAqIEFQSSBLZXkgbG9jYXRpb24gd2l0aGluIHRoZSByZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlLZXlDcmVkZW50aWFsTG9jYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgaGVhZGVyLWJhc2VkIEFQSSBrZXkgY3JlZGVudGlhbCBsb2NhdGlvblxuICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNyZWRlbnRpYWwgbG9jYXRpb25cbiAgICogQHJldHVybnMgQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uIGNvbmZpZ3VyZWQgZm9yIGhlYWRlciBwbGFjZW1lbnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaGVhZGVyKGNvbmZpZz86IEFwaUtleUFkZGl0aW9uYWxDb25maWd1cmF0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBBcGlLZXlDcmVkZW50aWFsTG9jYXRpb24oXG4gICAgICBBcGlLZXlDcmVkZW50aWFsTG9jYXRpb25UeXBlLkhFQURFUixcbiAgICAgIGNvbmZpZz8uY3JlZGVudGlhbFBhcmFtZXRlck5hbWUgPz8gJ0F1dGhvcml6YXRpb24nLFxuICAgICAgY29uZmlnPy5jcmVkZW50aWFsUHJlZml4ID8/ICdCZWFyZXIgJyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHF1ZXJ5IHBhcmFtZXRlci1iYXNlZCBBUEkga2V5IGNyZWRlbnRpYWwgbG9jYXRpb25cbiAgICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjcmVkZW50aWFsIGxvY2F0aW9uXG4gICAqIEByZXR1cm5zIEFwaUtleUNyZWRlbnRpYWxMb2NhdGlvbiBjb25maWd1cmVkIGZvciBxdWVyeSBwYXJhbWV0ZXIgcGxhY2VtZW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHF1ZXJ5UGFyYW1ldGVyKGNvbmZpZz86IEFwaUtleUFkZGl0aW9uYWxDb25maWd1cmF0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBBcGlLZXlDcmVkZW50aWFsTG9jYXRpb24oXG4gICAgICBBcGlLZXlDcmVkZW50aWFsTG9jYXRpb25UeXBlLlFVRVJZX1BBUkFNRVRFUixcbiAgICAgIGNvbmZpZz8uY3JlZGVudGlhbFBhcmFtZXRlck5hbWUgPz8gJ2FwaV9rZXknLFxuICAgICAgY29uZmlnPy5jcmVkZW50aWFsUHJlZml4LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNyZWRlbnRpYWwgcGFyYW1ldGVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggZm9yIHRoZSBjcmVkZW50aWFsIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByZWZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGNyZWRlbnRpYWwgbG9jYXRpb24gKEhFQURFUiBvciBRVUVSWV9QQVJBTUVURVIpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbExvY2F0aW9uVHlwZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgY3JlZGVudGlhbExvY2F0aW9uVHlwZTogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxQYXJhbWV0ZXJOYW1lOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbFByZWZpeD86IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5jcmVkZW50aWFsTG9jYXRpb25UeXBlID0gY3JlZGVudGlhbExvY2F0aW9uVHlwZTtcbiAgICB0aGlzLmNyZWRlbnRpYWxQYXJhbWV0ZXJOYW1lID0gY3JlZGVudGlhbFBhcmFtZXRlck5hbWU7XG4gICAgdGhpcy5jcmVkZW50aWFsUHJlZml4ID0gY3JlZGVudGlhbFByZWZpeDtcbiAgfVxufVxuXG4vKipcbiAqIEFQSSBLZXkgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUtleUNyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBUEkga2V5IGNyZWRlbnRpYWwgcHJvdmlkZXIgQVJOLlxuICAgKiBUaGlzIGlzIHJldHVybmVkIHdoZW4gY3JlYXRpbmcgdGhlIEFQSSBrZXkgY3JlZGVudGlhbCBwcm92aWRlciB2aWEgQ29uc29sZSBvciBBUEkuXG4gICAqIEZvcm1hdDogYXJuOmF3czpiZWRyb2NrLWFnZW50Y29yZTpyZWdpb246YWNjb3VudDp0b2tlbi12YXVsdC9pZC9hcGlrZXljcmVkZW50aWFscHJvdmlkZXIvbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIHRoZSBBUEkga2V5LlxuICAgKiBUaGlzIGlzIHJldHVybmVkIHdoZW4gY3JlYXRpbmcgdGhlIEFQSSBrZXkgY3JlZGVudGlhbCBwcm92aWRlciB2aWEgQ29uc29sZSBvciBBUEkuXG4gICAqIEZvcm1hdDogYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpyZWdpb246YWNjb3VudDpzZWNyZXQ6bmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgQVBJIGtleSBjcmVkZW50aWFsLlxuICAgKiBUaGlzIGZpZWxkIHNwZWNpZmllcyB3aGVyZSBpbiB0aGUgcmVxdWVzdCB0aGUgQVBJIGtleSBzaG91bGQgYmUgcGxhY2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEhFQURFUlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbExvY2F0aW9uPzogQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uO1xufVxuXG4vKipcbiAqIEFQSSBLZXkgY3JlZGVudGlhbCBwcm92aWRlciBjb25maWd1cmF0aW9uIGltcGxlbWVudGF0aW9uXG4gKiBDYW4gYmUgdXNlZCB3aXRoIE9wZW5BUEkgdGFyZ2V0c1xuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uIGltcGxlbWVudHMgSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZyB7XG4gIHB1YmxpYyByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJUeXBlID0gQ3JlZGVudGlhbFByb3ZpZGVyVHlwZS5BUElfS0VZO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgQVBJIGtleSBwcm92aWRlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3ZpZGVyQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIEFQSSBrZXkgY3JlZGVudGlhbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxMb2NhdGlvbjogQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb246IEFwaUtleUNyZWRlbnRpYWxQcm92aWRlclByb3BzKSB7XG4gICAgdGhpcy5wcm92aWRlckFybiA9IGNvbmZpZ3VyYXRpb24ucHJvdmlkZXJBcm47XG4gICAgdGhpcy5zZWNyZXRBcm4gPSBjb25maWd1cmF0aW9uLnNlY3JldEFybjtcbiAgICB0aGlzLmNyZWRlbnRpYWxMb2NhdGlvbiA9IGNvbmZpZ3VyYXRpb24uY3JlZGVudGlhbExvY2F0aW9uID8/IEFwaUtleUNyZWRlbnRpYWxMb2NhdGlvbi5oZWFkZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB0aGUgbmVlZGVkIHBlcm1pc3Npb25zIHRvIHRoZSByb2xlIGZvciBBUEkga2V5IGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICBncmFudE5lZWRlZFBlcm1pc3Npb25zVG9Sb2xlKHJvbGU6IElSb2xlKTogR3JhbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBbXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIC4uLkdBVEVXQVlfQVBJX0tFWV9QRVJNUyxcbiAgICAgICAgICAuLi5HQVRFV0FZX1dPUktMT0FEX0lERU5USVRZX1BFUk1TLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFt0aGlzLnByb3ZpZGVyQXJuXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IEdBVEVXQVlfU0VDUkVUU19QRVJNUyxcbiAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5zZWNyZXRBcm5dLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIHJldHVybiBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlOiByb2xlLFxuICAgICAgYWN0aW9uczogc3RhdGVtZW50cy5mbGF0TWFwKHMgPT4gcy5hY3Rpb25zKSxcbiAgICAgIHJlc291cmNlQXJuczogc3RhdGVtZW50cy5mbGF0TWFwKHMgPT4gcy5yZXNvdXJjZXMpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JlbmRlcigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJUeXBlOiB0aGlzLmNyZWRlbnRpYWxQcm92aWRlclR5cGUsXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXI6IHtcbiAgICAgICAgYXBpS2V5Q3JlZGVudGlhbFByb3ZpZGVyOiB7XG4gICAgICAgICAgcHJvdmlkZXJBcm46IHRoaXMucHJvdmlkZXJBcm4sXG4gICAgICAgICAgY3JlZGVudGlhbExvY2F0aW9uOiB0aGlzLmNyZWRlbnRpYWxMb2NhdGlvbi5jcmVkZW50aWFsTG9jYXRpb25UeXBlLFxuICAgICAgICAgIGNyZWRlbnRpYWxQYXJhbWV0ZXJOYW1lOiB0aGlzLmNyZWRlbnRpYWxMb2NhdGlvbi5jcmVkZW50aWFsUGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsUHJlZml4OiB0aGlzLmNyZWRlbnRpYWxMb2NhdGlvbi5jcmVkZW50aWFsUHJlZml4LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFwaS1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBbUU7QUFDbkUsaURBQTRDO0FBRTVDLCtEQUErRDtBQUUvRCxvQ0FBeUc7QUE2QnpHOzs7R0FHRztBQUNILElBQVksNEJBR1g7QUFIRCxXQUFZLDRCQUE0QjtJQUN0QyxpREFBaUIsQ0FBQTtJQUNqQixtRUFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBSFcsNEJBQTRCLDRDQUE1Qiw0QkFBNEIsUUFHdkM7QUFFRDs7R0FFRztBQUNILE1BQWEsd0JBQXdCOztJQUNuQzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFzQzs7Ozs7Ozs7OztRQUN6RCxPQUFPLElBQUksd0JBQXdCLENBQ2pDLDRCQUE0QixDQUFDLE1BQU0sRUFDbkMsTUFBTSxFQUFFLHVCQUF1QixJQUFJLGVBQWUsRUFDbEQsTUFBTSxFQUFFLGdCQUFnQixJQUFJLFNBQVMsQ0FDdEMsQ0FBQztLQUNIO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBc0M7Ozs7Ozs7Ozs7UUFDakUsT0FBTyxJQUFJLHdCQUF3QixDQUNqQyw0QkFBNEIsQ0FBQyxlQUFlLEVBQzVDLE1BQU0sRUFBRSx1QkFBdUIsSUFBSSxTQUFTLEVBQzVDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FDekIsQ0FBQztLQUNIO0lBRUQ7O09BRUc7SUFDYSx1QkFBdUIsQ0FBUztJQUNoRDs7T0FFRztJQUNhLGdCQUFnQixDQUFVO0lBQzFDOztPQUVHO0lBQ2Esc0JBQXNCLENBQVM7SUFFL0MsWUFDRSxzQkFBOEIsRUFDOUIsdUJBQStCLEVBQy9CLGdCQUF5QjtRQUV6QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7UUFDckQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxn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QyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDckIsT0FBTyxFQUFFLENBQUMsR0FBRyw2QkFBcUIsQ0FBQztZQUNuQyxZQUFZLEVBQUUsa0JBQWtCO1lBQ2hDLEtBQUssRUFBRSxPQUFPO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ3hFO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsT0FBTztZQUNMLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7WUFDbkQsa0JBQWtCLEVBQUU7Z0JBQ2xCLHdCQUF3QixFQUFFO29CQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0I7b0JBQ2xFLHVCQUF1QixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx1QkFBdUI7b0JBQ3hFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0I7aUJBQzNEO2FBQ0Y7U0FDRixDQUFDO0tBQ0g7Q0FDRjtBQXpHRCxzRkF5R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbm5vdGF0aW9ucywgQXJuRm9ybWF0LCBTdGFjaywgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBHcmFudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgeyBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnIH0gZnJvbSAnLi9jcmVkZW50aWFsLXByb3ZpZGVyJztcbmltcG9ydCB7IENyZWRlbnRpYWxQcm92aWRlclR5cGUgfSBmcm9tICcuL2NyZWRlbnRpYWwtcHJvdmlkZXInO1xuaW1wb3J0IHR5cGUgeyBJR2F0ZXdheSB9IGZyb20gJy4uL2dhdGV3YXktYmFzZSc7XG5pbXBvcnQgeyBHQVRFV0FZX0FQSV9LRVlfUEVSTVMsIEdBVEVXQVlfV09SS0xPQURfSURFTlRJVFlfUEVSTVMsIEdBVEVXQVlfU0VDUkVUU19QRVJNUyB9IGZyb20gJy4uL3Blcm1zJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUEkgS0VZXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIEFQSSBLZXkgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpS2V5QWRkaXRpb25hbENvbmZpZ3VyYXRpb24ge1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY3JlZGVudGlhbCBwYXJhbWV0ZXIgZm9yIHRoZSBBUEkga2V5LlxuICAgKiBUaGlzIHBhcmFtZXRlciBuYW1lIGlzIHVzZWQgd2hlbiBzZW5kaW5nIHRoZSBBUEkga2V5IHRvIHRoZSB0YXJnZXQgZW5kcG9pbnQuXG4gICAqXG4gICAqIExlbmd0aCBDb25zdHJhaW50czogTWluaW11bSBsZW5ndGggb2YgMS4gTWF4aW11bSBsZW5ndGggb2YgNjQuXG4gICAqIEBkZWZhdWx0IC0gJ0F1dGhvcml6YXRpb24nIGZvciBIRUFERVIsICdhcGlfa2V5JyBmb3IgUVVFUllfUEFSQU1FVEVSXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUGFyYW1ldGVyTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByZWZpeCBmb3IgdGhlIEFQSSBrZXkgY3JlZGVudGlhbC5cbiAgICogVGhpcyBwcmVmaXggaXMgYWRkZWQgdG8gdGhlIEFQSSBrZXkgd2hlbiBzZW5kaW5nIGl0IHRvIHRoZSB0YXJnZXQgZW5kcG9pbnQuXG4gICAqXG4gICAqIExlbmd0aCBDb25zdHJhaW50czogTWluaW11bSBsZW5ndGggb2YgMS4gTWF4aW11bSBsZW5ndGggb2YgNjQuXG4gICAqIEBkZWZhdWx0IC0gJ0JlYXJlciAnIGZvciBIRUFERVIsIG5vIHByZWZpeCBmb3IgUVVFUllfUEFSQU1FVEVSXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFQSSBLZXkgY3JlZGVudGlhbCBsb2NhdGlvbiB0eXBlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGVudW0gQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uVHlwZSB7XG4gIEhFQURFUiA9ICdIRUFERVInLFxuICBRVUVSWV9QQVJBTUVURVIgPSAnUVVFUllfUEFSQU1FVEVSJyxcbn1cblxuLyoqXG4gKiBBUEkgS2V5IGxvY2F0aW9uIHdpdGhpbiB0aGUgcmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGhlYWRlci1iYXNlZCBBUEkga2V5IGNyZWRlbnRpYWwgbG9jYXRpb25cbiAgICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjcmVkZW50aWFsIGxvY2F0aW9uXG4gICAqIEByZXR1cm5zIEFwaUtleUNyZWRlbnRpYWxMb2NhdGlvbiBjb25maWd1cmVkIGZvciBoZWFkZXIgcGxhY2VtZW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhlYWRlcihjb25maWc/OiBBcGlLZXlBZGRpdGlvbmFsQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiBuZXcgQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uKFxuICAgICAgQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uVHlwZS5IRUFERVIsXG4gICAgICBjb25maWc/LmNyZWRlbnRpYWxQYXJhbWV0ZXJOYW1lID8/ICdBdXRob3JpemF0aW9uJyxcbiAgICAgIGNvbmZpZz8uY3JlZGVudGlhbFByZWZpeCA/PyAnQmVhcmVyICcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBxdWVyeSBwYXJhbWV0ZXItYmFzZWQgQVBJIGtleSBjcmVkZW50aWFsIGxvY2F0aW9uXG4gICAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgY3JlZGVudGlhbCBsb2NhdGlvblxuICAgKiBAcmV0dXJucyBBcGlLZXlDcmVkZW50aWFsTG9jYXRpb24gY29uZmlndXJlZCBmb3IgcXVlcnkgcGFyYW1ldGVyIHBsYWNlbWVudFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBxdWVyeVBhcmFtZXRlcihjb25maWc/OiBBcGlLZXlBZGRpdGlvbmFsQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiBuZXcgQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uKFxuICAgICAgQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uVHlwZS5RVUVSWV9QQVJBTUVURVIsXG4gICAgICBjb25maWc/LmNyZWRlbnRpYWxQYXJhbWV0ZXJOYW1lID8/ICdhcGlfa2V5JyxcbiAgICAgIGNvbmZpZz8uY3JlZGVudGlhbFByZWZpeCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjcmVkZW50aWFsIHBhcmFtZXRlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IGZvciB0aGUgY3JlZGVudGlhbCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBjcmVkZW50aWFsIGxvY2F0aW9uIChIRUFERVIgb3IgUVVFUllfUEFSQU1FVEVSKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxMb2NhdGlvblR5cGU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIGNyZWRlbnRpYWxMb2NhdGlvblR5cGU6IHN0cmluZyxcbiAgICBjcmVkZW50aWFsUGFyYW1ldGVyTmFtZTogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxQcmVmaXg/OiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuY3JlZGVudGlhbExvY2F0aW9uVHlwZSA9IGNyZWRlbnRpYWxMb2NhdGlvblR5cGU7XG4gICAgdGhpcy5jcmVkZW50aWFsUGFyYW1ldGVyTmFtZSA9IGNyZWRlbnRpYWxQYXJhbWV0ZXJOYW1lO1xuICAgIHRoaXMuY3JlZGVudGlhbFByZWZpeCA9IGNyZWRlbnRpYWxQcmVmaXg7XG4gIH1cbn1cblxuLyoqXG4gKiBBUEkga2V5IGNyZWRlbnRpYWwgcHJvdmlkZXIgQVJOcyBmb3IgZ2F0ZXdheSBvdXRib3VuZCBhdXRoIChUb2tlbiBWYXVsdCBpZGVudGl0eSkuXG4gKlxuICogUGFzcyB0aGlzIHRvIHtAbGluayBHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmZyb21BcGlLZXlJZGVudGl0eUFybn0gb3IgdG8ge0BsaW5rIEFwaUtleUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUtleUNyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBUEkga2V5IGNyZWRlbnRpYWwgcHJvdmlkZXIgQVJOLlxuICAgKiBUaGlzIGlzIHJldHVybmVkIHdoZW4gY3JlYXRpbmcgdGhlIEFQSSBrZXkgY3JlZGVudGlhbCBwcm92aWRlciB2aWEgQ29uc29sZSBvciBBUEkuXG4gICAqIEZvcm1hdDogYXJuOmF3czpiZWRyb2NrLWFnZW50Y29yZTpyZWdpb246YWNjb3VudDp0b2tlbi12YXVsdC9pZC9hcGlrZXljcmVkZW50aWFscHJvdmlkZXIvbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIHRoZSBBUEkga2V5LlxuICAgKiBUaGlzIGlzIHJldHVybmVkIHdoZW4gY3JlYXRpbmcgdGhlIEFQSSBrZXkgY3JlZGVudGlhbCBwcm92aWRlciB2aWEgQ29uc29sZSBvciBBUEkuXG4gICAqIEZvcm1hdDogYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpyZWdpb246YWNjb3VudDpzZWNyZXQ6bmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgQVBJIGtleSBjcmVkZW50aWFsLlxuICAgKiBUaGlzIGZpZWxkIHNwZWNpZmllcyB3aGVyZSBpbiB0aGUgcmVxdWVzdCB0aGUgQVBJIGtleSBzaG91bGQgYmUgcGxhY2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEhFQURFUlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbExvY2F0aW9uPzogQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uO1xufVxuXG4vKipcbiAqIEFQSSBLZXkgY3JlZGVudGlhbCBwcm92aWRlciBjb25maWd1cmF0aW9uIGltcGxlbWVudGF0aW9uXG4gKiBDYW4gYmUgdXNlZCB3aXRoIE9wZW5BUEkgdGFyZ2V0c1xuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlLZXlDcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uIGltcGxlbWVudHMgSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZyB7XG4gIHB1YmxpYyByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJUeXBlID0gQ3JlZGVudGlhbFByb3ZpZGVyVHlwZS5BUElfS0VZO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgQVBJIGtleSBwcm92aWRlclxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3ZpZGVyQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0QXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIEFQSSBrZXkgY3JlZGVudGlhbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxMb2NhdGlvbjogQXBpS2V5Q3JlZGVudGlhbExvY2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb246IEFwaUtleUNyZWRlbnRpYWxQcm92aWRlclByb3BzKSB7XG4gICAgdGhpcy5wcm92aWRlckFybiA9IGNvbmZpZ3VyYXRpb24ucHJvdmlkZXJBcm47XG4gICAgdGhpcy5zZWNyZXRBcm4gPSBjb25maWd1cmF0aW9uLnNlY3JldEFybjtcbiAgICB0aGlzLmNyZWRlbnRpYWxMb2NhdGlvbiA9IGNvbmZpZ3VyYXRpb24uY3JlZGVudGlhbExvY2F0aW9uID8/IEFwaUtleUNyZWRlbnRpYWxMb2NhdGlvbi5oZWFkZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB0aGUgbmVlZGVkIHBlcm1pc3Npb25zIHRvIHRoZSBnYXRld2F5IHJvbGUgZm9yIEFQSSBrZXkgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIFByb2R1Y2VzIHRocmVlIHNjb3BlZCBJQU0gc3RhdGVtZW50cyBtYXRjaGluZyB0aGUgY29uc29sZS1nZW5lcmF0ZWQgcG9saWN5OlxuICAgKiAxLiBgR2V0V29ya2xvYWRBY2Nlc3NUb2tlbmAgb24gdGhlIHdvcmtsb2FkIGlkZW50aXR5IGRpcmVjdG9yeSBBUk5zXG4gICAqIDIuIGBHZXRSZXNvdXJjZUFwaUtleWAgb24gdGhlIHRva2VuIHZhdWx0LCBjcmVkZW50aWFsIHByb3ZpZGVyLCBkaXJlY3RvcnksIGFuZCBpZGVudGl0eSBBUk5zXG4gICAqIDMuIGBzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZWAgb24gdGhlIHNwZWNpZmljIGNyZWRlbnRpYWwgc2VjcmV0IEFSTlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvZ2F0ZXdheS1vdXRib3VuZC1hdXRoLmh0bWxcbiAgICovXG4gIGdyYW50TmVlZGVkUGVybWlzc2lvbnNUb1JvbGUoZ2F0ZXdheTogSUdhdGV3YXkpOiBHcmFudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihnYXRld2F5KTtcbiAgICBjb25zdCBkaXJlY3RvcnlBcm4gPSBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgIHJlc291cmNlOiAnd29ya2xvYWQtaWRlbnRpdHktZGlyZWN0b3J5JyxcbiAgICAgIHJlc291cmNlTmFtZTogJ2RlZmF1bHQnLFxuICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcbiAgICBjb25zdCBpZGVudGl0eVdpbGRjYXJkQXJuID0gYCR7ZGlyZWN0b3J5QXJufS93b3JrbG9hZC1pZGVudGl0eS8ke2dhdGV3YXkubmFtZX0tKmA7XG4gICAgY29uc3QgdG9rZW5WYXVsdEFybiA9IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnYmVkcm9jay1hZ2VudGNvcmUnLFxuICAgICAgcmVzb3VyY2U6ICd0b2tlbi12YXVsdCcsXG4gICAgICByZXNvdXJjZU5hbWU6ICdkZWZhdWx0JyxcbiAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgfSk7XG5cbiAgICBjb25zdCB3b3JrbG9hZElkZW50aXR5R3JhbnQgPSBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlOiBnYXRld2F5LnJvbGUsXG4gICAgICBhY3Rpb25zOiBbLi4uR0FURVdBWV9XT1JLTE9BRF9JREVOVElUWV9QRVJNU10sXG4gICAgICByZXNvdXJjZUFybnM6IFtkaXJlY3RvcnlBcm4sIGlkZW50aXR5V2lsZGNhcmRBcm5dLFxuICAgICAgc2NvcGU6IGdhdGV3YXksXG4gICAgfSk7XG4gICAgY29uc3QgYXBpS2V5R3JhbnQgPSBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlOiBnYXRld2F5LnJvbGUsXG4gICAgICBhY3Rpb25zOiBbLi4uR0FURVdBWV9BUElfS0VZX1BFUk1TXSxcbiAgICAgIHJlc291cmNlQXJuczogW3Rva2VuVmF1bHRBcm4sIHRoaXMucHJvdmlkZXJBcm4sIGRpcmVjdG9yeUFybiwgaWRlbnRpdHlXaWxkY2FyZEFybl0sXG4gICAgICBzY29wZTogZ2F0ZXdheSxcbiAgICB9KTtcbiAgICAvLyBUaGUgQ0ZOIGF0dHJpYnV0ZSBBcGlLZXlTZWNyZXRBcm4gaXMgYW4gb2JqZWN0IHsgU2VjcmV0QXJuOiBzdHJpbmcgfSwgbm90IGFcbiAgICAvLyBwbGFpbiBzdHJpbmcsIHNvIHRoZSBUb2tlbiByZXNvbHZlcyB0byBhbiBvYmplY3Qgd2hpY2ggY2Fubm90IGJlIHBsYWNlZCBpblxuICAgIC8vIElBTSBSZXNvdXJjZSBmaWVsZHMuIFdoZW4gdGhlIGNhbGxlciBzdXBwbGllcyBhIGxpdGVyYWwgQVJOIHN0cmluZyAoZS5nLiB2aWFcbiAgICAvLyBmcm9tQXBpS2V5SWRlbnRpdHlBcm4pIHdlIGNhbiBzY29wZSB0aWdodGx5OyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFcbiAgICAvLyBzZXJ2aWNlLW1hbmFnZWQgcHJlZml4IHdpbGRjYXJkLlxuICAgIGxldCBzZWNyZXRSZXNvdXJjZUFybnM6IHN0cmluZ1tdO1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5zZWNyZXRBcm4pKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZihnYXRld2F5KS5hZGRXYXJuaW5nVjIoXG4gICAgICAgICdAYXdzLWNkay9hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGE6d2lsZGNhcmRTZWNyZXRBcm5HcmFudCcsXG4gICAgICAgICdUaGUgc2VjcmV0IEFSTiBpcyBhbiB1bnJlc29sdmVkIHRva2VuLiBHcmFudGluZyBhY2Nlc3MgdXNpbmcgYSB3aWxkY2FyZCBwcmVmaXggKGJlZHJvY2stYWdlbnRjb3JlLWlkZW50aXR5ISopLiAnICtcbiAgICAgICAgJ1RvIHNjb3BlIHRoZSBncmFudCB0byBhIHNwZWNpZmljIHNlY3JldCwgc3VwcGx5IGEgbGl0ZXJhbCBzZWNyZXQgQVJOIHZpYSBmcm9tQXBpS2V5SWRlbnRpdHlBcm4uJyxcbiAgICAgICk7XG4gICAgICBzZWNyZXRSZXNvdXJjZUFybnMgPSBbc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ3NlY3JldHNtYW5hZ2VyJyxcbiAgICAgICAgcmVzb3VyY2U6ICdzZWNyZXQnLFxuICAgICAgICByZXNvdXJjZU5hbWU6ICdiZWRyb2NrLWFnZW50Y29yZS1pZGVudGl0eSEqJyxcbiAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgIH0pXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VjcmV0UmVzb3VyY2VBcm5zID0gW3RoaXMuc2VjcmV0QXJuXTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0R3JhbnQgPSBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlOiBnYXRld2F5LnJvbGUsXG4gICAgICBhY3Rpb25zOiBbLi4uR0FURVdBWV9TRUNSRVRTX1BFUk1TXSxcbiAgICAgIHJlc291cmNlQXJuczogc2VjcmV0UmVzb3VyY2VBcm5zLFxuICAgICAgc2NvcGU6IGdhdGV3YXksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdvcmtsb2FkSWRlbnRpdHlHcmFudC5jb21iaW5lKGFwaUtleUdyYW50KS5jb21iaW5lKHNlY3JldEdyYW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9yZW5kZXIoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyVHlwZTogdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJUeXBlLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyOiB7XG4gICAgICAgIGFwaUtleUNyZWRlbnRpYWxQcm92aWRlcjoge1xuICAgICAgICAgIHByb3ZpZGVyQXJuOiB0aGlzLnByb3ZpZGVyQXJuLFxuICAgICAgICAgIGNyZWRlbnRpYWxMb2NhdGlvbjogdGhpcy5jcmVkZW50aWFsTG9jYXRpb24uY3JlZGVudGlhbExvY2F0aW9uVHlwZSxcbiAgICAgICAgICBjcmVkZW50aWFsUGFyYW1ldGVyTmFtZTogdGhpcy5jcmVkZW50aWFsTG9jYXRpb24uY3JlZGVudGlhbFBhcmFtZXRlck5hbWUsXG4gICAgICAgICAgY3JlZGVudGlhbFByZWZpeDogdGhpcy5jcmVkZW50aWFsTG9jYXRpb24uY3JlZGVudGlhbFByZWZpeCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19