@pipeline-builder/api-core 5.2.10 → 5.2.12

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 (47) hide show
  1. package/lib/helpers/org-hierarchy-http.d.ts +3 -2
  2. package/lib/helpers/org-hierarchy-http.js +11 -5
  3. package/lib/middleware/index.d.ts +1 -1
  4. package/lib/middleware/index.js +2 -2
  5. package/lib/middleware/step-up.d.ts +4 -3
  6. package/lib/middleware/step-up.js +1 -1
  7. package/lib/services/index.d.ts +2 -2
  8. package/lib/services/index.js +2 -2
  9. package/lib/services/quota.d.ts +1 -2
  10. package/lib/services/quota.js +1 -1
  11. package/lib/services/version-vuln-policy.d.ts +1 -3
  12. package/lib/services/version-vuln-policy.js +2 -3
  13. package/lib/types/common.d.ts +13 -22
  14. package/lib/types/common.js +44 -5
  15. package/lib/types/ecosystem-notifications.d.ts +218 -26
  16. package/lib/types/ecosystem-notifications.js +26 -10
  17. package/lib/types/ecosystem.d.ts +1 -0
  18. package/lib/types/ecosystem.js +33 -23
  19. package/lib/types/error-codes.d.ts +41 -0
  20. package/lib/types/error-codes.js +62 -1
  21. package/lib/types/feature-flags.d.ts +11 -4
  22. package/lib/types/feature-flags.js +51 -11
  23. package/lib/types/index.d.ts +1 -1
  24. package/lib/types/index.js +2 -2
  25. package/lib/types/permissions.d.ts +353 -22
  26. package/lib/types/permissions.js +263 -125
  27. package/lib/types/pipeline.d.ts +2 -0
  28. package/lib/types/pipeline.js +3 -1
  29. package/lib/types/plugin-catalog.d.ts +68 -0
  30. package/lib/types/plugin-catalog.js +82 -1
  31. package/lib/types/quota-tiers.d.ts +6 -24
  32. package/lib/types/quota-tiers.js +6 -28
  33. package/lib/types/remote-audit-actions.d.ts +1 -1
  34. package/lib/types/remote-audit-actions.js +22 -1
  35. package/lib/types/tier-limits.d.ts +19 -0
  36. package/lib/types/tier-limits.js +27 -1
  37. package/lib/types/usage-projection.d.ts +0 -16
  38. package/lib/types/usage-projection.js +1 -20
  39. package/lib/types/wire-vocabulary.d.ts +81 -2
  40. package/lib/types/wire-vocabulary.js +89 -3
  41. package/lib/validation/index.d.ts +1 -1
  42. package/lib/validation/index.js +2 -2
  43. package/lib/validation/pipeline-schemas.d.ts +22 -0
  44. package/lib/validation/pipeline-schemas.js +19 -1
  45. package/lib/validation/plugin-spec-schema.d.ts +45 -2
  46. package/lib/validation/plugin-spec-schema.js +85 -7
  47. package/package.json +8 -1
@@ -39,6 +39,10 @@ export var ErrorCode;
39
39
  * was called from an active org other than the system org — a token minted in
40
40
  * a tenant org is refused even for the same user. Switch to the system org. */
41
41
  ErrorCode["SYSTEM_ORG_REQUIRED"] = "SYSTEM_ORG_REQUIRED";
42
+ /** A non-system org tried to create a plugin under a managed toolchain name
43
+ * (`MANAGED_TOOLCHAIN_PLUGINS`: `pipeline-bootstrap`, `cdk-synth`). A custom
44
+ * synth environment is published under another name. */
45
+ ErrorCode["PLUGIN_MANAGED_NAME_RESERVED"] = "PLUGIN_MANAGED_NAME_RESERVED";
42
46
  /** The publisher hasn't accepted the CURRENT publisher terms version, so it
43
47
  * can't submit new requests (existing listings are unaffected). */
44
48
  ErrorCode["PUBLISHER_TERMS_REQUIRED"] = "PUBLISHER_TERMS_REQUIRED";
@@ -89,6 +93,41 @@ export var ErrorCode;
89
93
  ErrorCode["TEMPLATE_CONTRACT_VIOLATION"] = "TEMPLATE_CONTRACT_VIOLATION";
90
94
  ErrorCode["TEMPLATE_SIZE_EXCEEDED"] = "TEMPLATE_SIZE_EXCEEDED";
91
95
  ErrorCode["TEMPLATE_VALIDATION_FAILED"] = "TEMPLATE_VALIDATION_FAILED";
96
+ /** A managed toolchain name in a publish, submission, listing or install path:
97
+ * managed releases are never listed in the ecosystem. */
98
+ ErrorCode["PLUGIN_MANAGED_NOT_LISTABLE"] = "PLUGIN_MANAGED_NOT_LISTABLE";
99
+ /** An upload of a prerelease (`-dev.N`) version of a managed toolchain name:
100
+ * a release version is always a plain semver. */
101
+ ErrorCode["PLUGIN_MANAGED_PRERELEASE"] = "PLUGIN_MANAGED_PRERELEASE";
102
+ /** A generic plugin route (update, deprecate/yank, delete, purge) was called on
103
+ * a managed toolchain name — for the system org too. Release lifecycle lives
104
+ * only in the Toolchain console, which acts on both halves at once. */
105
+ ErrorCode["TOOLCHAIN_USE_CONSOLE"] = "TOOLCHAIN_USE_CONSOLE";
106
+ // Pipeline toolchain releases (docs/plans/bootstrap-image-versioning.md §13).
107
+ /** The CLI could not resolve the bootstrap image (D2) — unreachable platform,
108
+ * no default, a deleted pin, a signature failure, or a local-spec deploy
109
+ * without `--toolchain-file`. Never falls back. */
110
+ ErrorCode["BOOTSTRAP_IMAGE_UNRESOLVED"] = "BOOTSTRAP_IMAGE_UNRESOLVED";
111
+ /** No platform default release exists (D11). Never "highest version". */
112
+ ErrorCode["TOOLCHAIN_NO_DEFAULT"] = "TOOLCHAIN_NO_DEFAULT";
113
+ /** The resolver found halves with different release versions — a bug, never served. */
114
+ ErrorCode["TOOLCHAIN_PAIR_MISMATCH"] = "TOOLCHAIN_PAIR_MISMATCH";
115
+ /** A pin or org default names a release that is not eligible (D15) at set time. */
116
+ ErrorCode["TOOLCHAIN_RELEASE_NOT_ELIGIBLE"] = "TOOLCHAIN_RELEASE_NOT_ELIGIBLE";
117
+ /** A managed `cdk-synth` step carries its own version; pin the release instead. */
118
+ ErrorCode["TOOLCHAIN_PIN_VIA_RELEASE"] = "TOOLCHAIN_PIN_VIA_RELEASE";
119
+ /** Yanking the platform default with no live previous default to restore. */
120
+ ErrorCode["TOOLCHAIN_DEFAULT_REQUIRED"] = "TOOLCHAIN_DEFAULT_REQUIRED";
121
+ /** `expectedCurrentDefault` did not match the current platform default. */
122
+ ErrorCode["TOOLCHAIN_DEFAULT_CHANGED"] = "TOOLCHAIN_DEFAULT_CHANGED";
123
+ /** A second D14 initial-default call. */
124
+ ErrorCode["TOOLCHAIN_INITIAL_ALREADY_SET"] = "TOOLCHAIN_INITIAL_ALREADY_SET";
125
+ /** §8 guards on setting the platform default — one code per guard. */
126
+ ErrorCode["TOOLCHAIN_GUARD_UNSCANNED"] = "TOOLCHAIN_GUARD_UNSCANNED";
127
+ ErrorCode["TOOLCHAIN_GUARD_VULN_FLOOR"] = "TOOLCHAIN_GUARD_VULN_FLOOR";
128
+ ErrorCode["TOOLCHAIN_GUARD_METADATA"] = "TOOLCHAIN_GUARD_METADATA";
129
+ ErrorCode["TOOLCHAIN_GUARD_PAIR_INCOMPLETE"] = "TOOLCHAIN_GUARD_PAIR_INCOMPLETE";
130
+ ErrorCode["TOOLCHAIN_GUARD_CANARY_GATE"] = "TOOLCHAIN_GUARD_CANARY_GATE";
92
131
  // Client too old (426)
93
132
  /** The pipeline-manager CLI is older than the platform's
94
133
  * `PIPELINE_MANAGER_MIN_VERSION`; the fix is `pipeline-manager --upgrade`. */
@@ -124,6 +163,9 @@ export var ErrorCode;
124
163
  /** A freeze named an image digest that is not the version's stored digest
125
164
  * (fail closed: what was requested is not what would be published). */
126
165
  ErrorCode["PLUGIN_DIGEST_MISMATCH"] = "PLUGIN_DIGEST_MISMATCH";
166
+ /** A re-upload of an existing (name, version) of a managed toolchain name:
167
+ * a release is immutable — build a new version instead. */
168
+ ErrorCode["PLUGIN_VERSION_IMMUTABLE"] = "PLUGIN_VERSION_IMMUTABLE";
127
169
  /** A publish request needs the org's publisher profile, which doesn't exist
128
170
  * yet (docs/plugin-publishing.md). Claim a handle first. */
129
171
  ErrorCode["PUBLISHER_REQUIRED"] = "PUBLISHER_REQUIRED";
@@ -202,6 +244,7 @@ export const ErrorCodeStatus = {
202
244
  [ErrorCode.REAUTH_REQUIRED]: 401,
203
245
  [ErrorCode.INSUFFICIENT_PERMISSIONS]: 403,
204
246
  [ErrorCode.SYSTEM_ORG_REQUIRED]: 403,
247
+ [ErrorCode.PLUGIN_MANAGED_NAME_RESERVED]: 403,
205
248
  [ErrorCode.PUBLISHER_TERMS_REQUIRED]: 403,
206
249
  [ErrorCode.PUBLISHER_ROOT_ORG_REQUIRED]: 403,
207
250
  [ErrorCode.PUBLISHER_SUSPENDED]: 403,
@@ -230,6 +273,23 @@ export const ErrorCodeStatus = {
230
273
  [ErrorCode.TEMPLATE_CONTRACT_VIOLATION]: 400,
231
274
  [ErrorCode.TEMPLATE_SIZE_EXCEEDED]: 400,
232
275
  [ErrorCode.TEMPLATE_VALIDATION_FAILED]: 400,
276
+ [ErrorCode.PLUGIN_MANAGED_NOT_LISTABLE]: 400,
277
+ [ErrorCode.PLUGIN_MANAGED_PRERELEASE]: 400,
278
+ [ErrorCode.TOOLCHAIN_USE_CONSOLE]: 400,
279
+ [ErrorCode.TOOLCHAIN_RELEASE_NOT_ELIGIBLE]: 400,
280
+ [ErrorCode.TOOLCHAIN_PIN_VIA_RELEASE]: 400,
281
+ [ErrorCode.TOOLCHAIN_NO_DEFAULT]: 409,
282
+ [ErrorCode.TOOLCHAIN_DEFAULT_REQUIRED]: 409,
283
+ [ErrorCode.TOOLCHAIN_DEFAULT_CHANGED]: 409,
284
+ [ErrorCode.TOOLCHAIN_INITIAL_ALREADY_SET]: 409,
285
+ [ErrorCode.TOOLCHAIN_GUARD_UNSCANNED]: 409,
286
+ [ErrorCode.TOOLCHAIN_GUARD_VULN_FLOOR]: 409,
287
+ [ErrorCode.TOOLCHAIN_GUARD_METADATA]: 409,
288
+ [ErrorCode.TOOLCHAIN_GUARD_PAIR_INCOMPLETE]: 409,
289
+ [ErrorCode.TOOLCHAIN_GUARD_CANARY_GATE]: 409,
290
+ [ErrorCode.TOOLCHAIN_PAIR_MISMATCH]: 500,
291
+ // BOOTSTRAP_IMAGE_UNRESOLVED is raised by the CLI, never sent by a service.
292
+ [ErrorCode.BOOTSTRAP_IMAGE_UNRESOLVED]: 500,
233
293
  [ErrorCode.CLIENT_UPGRADE_REQUIRED]: 426,
234
294
  [ErrorCode.QUOTA_EXCEEDED]: 429,
235
295
  [ErrorCode.AI_MEMBER_SHARE_EXCEEDED]: 429,
@@ -244,6 +304,7 @@ export const ErrorCodeStatus = {
244
304
  [ErrorCode.PLUGIN_VERSION_FROZEN]: 409,
245
305
  [ErrorCode.PLUGIN_VERSION_IN_USE]: 409,
246
306
  [ErrorCode.PLUGIN_DIGEST_MISMATCH]: 409,
307
+ [ErrorCode.PLUGIN_VERSION_IMMUTABLE]: 409,
247
308
  [ErrorCode.PUBLISHER_REQUIRED]: 409,
248
309
  [ErrorCode.PUBLISHER_HANDLE_RESERVED]: 409,
249
310
  [ErrorCode.PUBLISH_GATE_FAILED]: 409,
@@ -277,4 +338,4 @@ export const ErrorCodeStatus = {
277
338
  export function getStatusForErrorCode(code) {
278
339
  return ErrorCodeStatus[code] ?? 500;
279
340
  }
280
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lcnJvci1jb2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQU4sSUFBWSxTQStMWDtBQS9MRCxXQUFZLFNBQVM7SUFDbkIsOEJBQThCO0lBQzlCLDBDQUE2QixDQUFBO0lBQzdCLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9COzs7dURBR21EO0lBQ25ELDBDQUE2QixDQUFBO0lBQzdCOzhFQUMwRTtJQUMxRSxnREFBbUMsQ0FBQTtJQUVuQyw2QkFBNkI7SUFDN0Isa0VBQXFELENBQUE7SUFDckQ7d0VBQ29FO0lBQ3BFLDhEQUFpRCxDQUFBO0lBQ2pEO29FQUNnRTtJQUNoRSxnRUFBbUQsQ0FBQTtJQUNuRDtrRUFDOEQ7SUFDOUQsZ0VBQW1ELENBQUE7SUFDbkQ7O29GQUVnRjtJQUNoRix3REFBMkMsQ0FBQTtJQUMzQzt3RUFDb0U7SUFDcEUsa0VBQXFELENBQUE7SUFDckQ7MkJBQ3VCO0lBQ3ZCLHdFQUEyRCxDQUFBO0lBQzNELG9EQUFvRDtJQUNwRCx3REFBMkMsQ0FBQTtJQUMzQztnRkFDNEU7SUFDNUUsd0NBQTJCLENBQUE7SUFDM0Isd0ZBQXdGO0lBQ3hGLHNFQUF5RCxDQUFBO0lBQ3pEO3lEQUNxRDtJQUNyRCxnRUFBbUQsQ0FBQTtJQUNuRDsyREFDdUQ7SUFDdkQsNERBQStDLENBQUE7SUFDL0M7OzJDQUV1QztJQUN2QywwREFBNkMsQ0FBQTtJQUM3QywwQ0FBNkIsQ0FBQTtJQUM3QiwwREFBNkMsQ0FBQTtJQUU3Qyx5QkFBeUI7SUFDekIsb0NBQXVCLENBQUE7SUFDdkIsNENBQStCLENBQUE7SUFDL0I7OzJEQUV1RDtJQUN2RCx3REFBMkMsQ0FBQTtJQUMzQzs7K0RBRTJEO0lBQzNELDBE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Q0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHO0lBQ2hDLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsR0FBRztJQUNwQyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLEdBQUc7Q0FDaEQsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQWU7SUFDbkQsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTdGFuZGFyZGl6ZWQgZXJyb3IgY29kZXMgdXNlZCBhY3Jvc3MgYWxsIEFQSSBtaWNyb3NlcnZpY2VzLlxuICogVXNlIHRoZXNlIGNvZGVzIGluIGVycm9yIHJlc3BvbnNlcyBmb3IgY29uc2lzdGVudCBjbGllbnQgaGFuZGxpbmcuXG4gKlxuICogRWFjaCBIVFRQIHN0YXR1cyBjYXRlZ29yeSBoYXMgb25lIHByaW1hcnkgY29kZS4gVXNlIHRoZSBgZGV0YWlsc2BcbiAqIGZpZWxkIGluIGVycm9yIHJlc3BvbnNlcyBmb3Igc3ViLXR5cGUgaW5mb3JtYXRpb24gKGUuZy4gd2hpY2ggcXVvdGFcbiAqIHdhcyBleGNlZWRlZCwgd2hpY2ggZmllbGQgZmFpbGVkIHZhbGlkYXRpb24pLlxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICAvLyBBdXRoZW50aWNhdGlvbiBlcnJvcnMgKDQwMSlcbiAgVU5BVVRIT1JJWkVEID0gJ1VOQVVUSE9SSVpFRCcsXG4gIFRPS0VOX0VYUElSRUQgPSAnVE9LRU5fRVhQSVJFRCcsXG4gIFRPS0VOX0lOVkFMSUQgPSAnVE9LRU5fSU5WQUxJRCcsXG4gIFRPS0VOX01JU1NJTkcgPSAnVE9LRU5fTUlTU0lORycsXG4gIFRPS0VOX1JFVk9LRUQgPSAnVE9LRU5fUkVWT0tFRCcsXG4gIC8qKiBUaGUgc2Vzc2lvbiBpcyBub3QgTUZBLWdyYWRlIChgYWFsYCBiZWxvdyB0aGUgcm91dGUncyBgbWluQXNzdXJhbmNlYCkuXG4gICAqICBUaGUgY2xpZW50IHNlbmRzIHRoZSBwZXJzb24gdG8gZW5yb2wgLyBzaWduIGluIGFnYWluIHdpdGggYSBzZWNvbmRcbiAgICogIGZhY3RvciDigJQgaXQgbXVzdCBOT1Qgc2lnbiB0aGVtIG91dCBvciByZXRyeSBhIHRva2VuIHJlZnJlc2gsIHNpbmNlIGFcbiAgICogIHJlZnJlc2ggY2FuIG5ldmVyIHJhaXNlIHRoZSBhc3N1cmFuY2UgbGV2ZWwuICovXG4gIE1GQV9SRVFVSVJFRCA9ICdNRkFfUkVRVUlSRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgTUZBLWdyYWRlIGJ1dCBpdHMgYGF1dGhfdGltZWAgaXMgb2xkZXIgdGhhbiB0aGUgcm91dGUnc1xuICAgKiAgYG1heEFnZWAg4oCUIHRoZSBwZXJzb24gbXVzdCBhdXRoZW50aWNhdGUgYWdhaW4gKG5vdCBtZXJlbHkgcmVmcmVzaCkuICovXG4gIFJFQVVUSF9SRVFVSVJFRCA9ICdSRUFVVEhfUkVRVUlSRUQnLFxuXG4gIC8vIEF1dGhvcml6YXRpb24gZXJyb3JzICg0MDMpXG4gIElOU1VGRklDSUVOVF9QRVJNSVNTSU9OUyA9ICdJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMnLFxuICAvKiogQSBtYWNoaW5lIGNyZWRlbnRpYWwgKHNlcnZpY2UgcHJpbmNpcGFsLCBvcmcgc2VydmljZSBhY2NvdW50LCBvciBhblxuICAgKiAgZXhjaGFuZ2VkIGFjY2VzcyBrZXkpIHJlYWNoZWQgYSByb3V0ZSB0aGF0IHJlcXVpcmVzIGEgcGVyc29uLiAqL1xuICBIVU1BTl9TRVNTSU9OX1JFUVVJUkVEID0gJ0hVTUFOX1NFU1NJT05fUkVRVUlSRUQnLFxuICAvKiogQSBib290c3RyYXAtYWRtaW4gZW5yb2xtZW50IHNlc3Npb24gKGBtZmFFbnJvbGxtZW50UGVuZGluZ2ApIHJlYWNoZWQgYVxuICAgKiAgcm91dGUgb3V0c2lkZSB0aGUgZW5yb2xtZW50IC8gc2lnbi1vdXQgLyBzZXR1cCBhbGxvd2xpc3QuICovXG4gIE1GQV9FTlJPTExNRU5UX1JFUVVJUkVEID0gJ01GQV9FTlJPTExNRU5UX1JFUVVJUkVEJyxcbiAgLyoqIEEgcmVhZC1vbmx5IGltcGVyc29uYXRpb24gdG9rZW4gKGBpbXBlcnNvbmF0aW9uUmVhZE9ubHlgKSBhdHRlbXB0ZWQgYVxuICAgKiAgc3RhdGUtY2hhbmdpbmcgcmVxdWVzdCAoYW55dGhpbmcgYnV0IEdFVC9IRUFEL09QVElPTlMpLiAqL1xuICBJTVBFUlNPTkFUSU9OX1JFQURfT05MWSA9ICdJTVBFUlNPTkFUSU9OX1JFQURfT05MWScsXG4gIC8qKiBBIHBsdWdpbi1lY29zeXN0ZW0gZ292ZXJuYW5jZSByb3V0ZSAoZG9jcy9ydW5ib29rcy9lY29zeXN0ZW0tbW9kZXJhdGlvbi5tZClcbiAgICogIHdhcyBjYWxsZWQgZnJvbSBhbiBhY3RpdmUgb3JnIG90aGVyIHRoYW4gdGhlIHN5c3RlbSBvcmcg4oCUIGEgdG9rZW4gbWludGVkIGluXG4gICAqICBhIHRlbmFudCBvcmcgaXMgcmVmdXNlZCBldmVuIGZvciB0aGUgc2FtZSB1c2VyLiBTd2l0Y2ggdG8gdGhlIHN5c3RlbSBvcmcuICovXG4gIFNZU1RFTV9PUkdfUkVRVUlSRUQgPSAnU1lTVEVNX09SR19SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcHVibGlzaGVyIGhhc24ndCBhY2NlcHRlZCB0aGUgQ1VSUkVOVCBwdWJsaXNoZXIgdGVybXMgdmVyc2lvbiwgc28gaXRcbiAgICogIGNhbid0IHN1Ym1pdCBuZXcgcmVxdWVzdHMgKGV4aXN0aW5nIGxpc3RpbmdzIGFyZSB1bmFmZmVjdGVkKS4gKi9cbiAgUFVCTElTSEVSX1RFUk1TX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9URVJNU19SRVFVSVJFRCcsXG4gIC8qKiBQdWJsaXNoaW5nIGlzIGRvbmUgZnJvbSB0aGUgUk9PVCBvcmc7IGEgdGVhbSBvcmcgY2FuJ3Qgb3duIGEgcHVibGlzaGVyIG9yXG4gICAqICBzdWJtaXQgcmVxdWVzdHMuICovXG4gIFBVQkxJU0hFUl9ST09UX09SR19SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRUQnLFxuICAvKiogVGhlIHB1Ymxpc2hlciBpcyBzdXNwZW5kZWQgYnkgdGhlIHN5c3RlbSBvcmcuICovXG4gIFBVQkxJU0hFUl9TVVNQRU5ERUQgPSAnUFVCTElTSEVSX1NVU1BFTkRFRCcsXG4gIC8qKiBUaGUgb3JnYW5pemF0aW9uJ3MgYWRtaW5pc3RyYXRvcnMgc3dpdGNoZWQgQUkgZmVhdHVyZXMgb2ZmIChgYWlFbmFibGVkOiBmYWxzZWBcbiAgICogIG9uIHRoZSBvcmcncyBBSSBjb25maWd1cmF0aW9uKS4gRXZlcnkgQUkgZW50cnkgcG9pbnQgcmVmdXNlcyB3aXRoIGl0LiAqL1xuICBBSV9ESVNBQkxFRCA9ICdBSV9ESVNBQkxFRCcsXG4gIC8qKiBUZW5hbnQgcHVibGlzaGluZyBpcyBzd2l0Y2hlZCBvZmYgb24gdGhpcyBpbnN0YW5jZSAoYFBMVUdJTl9QVUJMSVNISU5HX0VOQUJMRURgKS4gKi9cbiAgUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQgPSAnUExVR0lOX1BVQkxJU0hJTkdfRElTQUJMRUQnLFxuICAvKiogUmV2aWV3IHdyaXRlcyBhcmUgc3dpdGNoZWQgb2ZmIG9uIHRoaXMgaW5zdGFuY2UgKGBQTFVHSU5fUkVWSUVXU19FTkFCTEVEYCk6XG4gICAqICByZXZpZXdzIHN0YXkgcmVhZGFibGUsIG5vdGhpbmcgbmV3IGlzIHdyaXR0ZW4uICovXG4gIFBMVUdJTl9SRVZJRVdTX0RJU0FCTEVEID0gJ1BMVUdJTl9SRVZJRVdTX0RJU0FCTEVEJyxcbiAgLyoqIEEgbWVtYmVyIG9mIHRoZSBwdWJsaXNoZXIncyBvd24gb3JnYW5pemF0aW9uIHRyaWVkIHRvIHJldmlldyAob3Igdm90ZSBvbiBhXG4gICAqICByZXZpZXcgb2YpIG9uZSBvZiBpdHMgbGlzdGluZ3MgKHNlbGYtcHJvbW90aW9uKS4gKi9cbiAgUkVWSUVXX1NFTEZfUFJPTU9USU9OID0gJ1JFVklFV19TRUxGX1BST01PVElPTicsXG4gIC8qKiBTZXBhcmF0aW9uIG9mIGR1dGllczogdGhlIGNhbGxlciBtYXkgbm90IGRlY2lkZSB0aGlzIHJlcXVlc3Qg4oCUXG4gICAqICBpdCBjYW1lIGZyb20gYW4gb3JnIHRoZXkgYmVsb25nIHRvLCB0aGV5IHVwbG9hZGVkIHRoZSB2ZXJzaW9uLCBvciB0aGV5XG4gICAqICBnYXZlIHRoZSBmaXJzdCBvZiB0d28gYXBwcm92YWxzLiAqL1xuICBTRVBBUkFUSU9OX09GX0RVVElFUyA9ICdTRVBBUkFUSU9OX09GX0RVVElFUycsXG4gIE9SR19NSVNNQVRDSCA9ICdPUkdfTUlTTUFUQ0gnLFxuICBDT01QTElBTkNFX1ZJT0xBVElPTiA9ICdDT01QTElBTkNFX1ZJT0xBVElPTicsXG5cbiAgLy8gTm90IGZvdW5kIGVycm9ycyAoNDA0KVxuICBOT1RfRk9VTkQgPSAnTk9UX0ZPVU5EJyxcbiAgT1JHX05PVF9GT1VORCA9ICdPUkdfTk9UX0ZPVU5EJyxcbiAgLyoqIFRoZSBlbWFpbCBnaXZlbiB0byBcImFkZCBtZW1iZXJcIiBoYXMgbm8gYWNjb3VudC4gRGlzdGluY3QgZnJvbSBOT1RfRk9VTkRcbiAgICogIGJlY2F1c2UgaXQgaXMgQUNUSU9OQUJMRTogdGhlIGNhbGxlcidzIGludGVudCBpcyBzYXRpc2ZpYWJsZSBieSBzZW5kaW5nIGFuXG4gICAqICBpbnZpdGF0aW9uLCBhbmQgYSBiYXJlIDQwNCBuYW1lZCBubyB3YXkgZm9yd2FyZC4gKi9cbiAgVVNFUl9OT1RfUkVHSVNURVJFRCA9ICdVU0VSX05PVF9SRUdJU1RFUkVEJyxcbiAgLyoqIFRoZSBhbm9ueW1vdXMgcGx1Z2luIHN1Ym1pc3Npb24gQVBJIGlzIG9mZiBvbiB0aGlzIGluc3RhbmNlXG4gICAqICAoYEFOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEYCwgb3Igb3V0Ym91bmQgZW1haWwgaXNuJ3QgY29uZmlndXJlZCkg4oCUXG4gICAqICBhbnN3ZXJlZCBhcyBhIHBsYWluIDQwNCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFNVQk1JU1NJT05TX0RJU0FCTEVEID0gJ1NVQk1JU1NJT05TX0RJU0FCTEVEJyxcblxuICAvLyBWYWxpZGF0aW9uIGVycm9ycyAoNDAwKVxuICBWQUxJREFUSU9OX0VSUk9SID0gJ1ZBTElEQVRJT05fRVJST1InLFxuICBNSVNTSU5HX1JFUVVJUkVEX0ZJRUxEID0gJ01JU1NJTkdfUkVRVUlSRURfRklFTEQnLFxuICAvKiogQSBwcm9vZi1vZi13b3JrIGFuc3dlciBpcyBtaXNzaW5nLCBtYWxmb3JtZWQsIGV4cGlyZWQsIHRvbyBlYXN5LCB3cm9uZyxcbiAgICogIG9yIHdhcyBhbHJlYWR5IHVzZWQgKGFub255bW91cyBzdWJtaXNzaW9ucykuICovXG4gIFBST09GX09GX1dPUktfSU5WQUxJRCA9ICdQUk9PRl9PRl9XT1JLX0lOVkFMSUQnLFxuICBURU1QTEFURV9VTktOT1dOX1BBVEggPSAnVEVNUExBVEVfVU5LTk9XTl9QQVRIJyxcbiAgVEVNUExBVEVfQ1lDTEUgPSAnVEVNUExBVEVfQ1lDTEUnLFxuICBURU1QTEFURV9QQVJTRV9FUlJPUiA9ICdURU1QTEFURV9QQVJTRV9FUlJPUicsXG4gIFRFTVBMQVRFX1RZUEVfTUlTTUFUQ0ggPSAnVEVNUExBVEVfVFlQRV9NSVNNQVRDSCcsXG4gIFRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRUQgPSAnVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCcsXG4gIFRFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTiA9ICdURU1QTEFURV9DT05UUkFDVF9WSU9MQVRJT04nLFxuICBURU1QTEFURV9TSVpFX0VYQ0VFREVEID0gJ1RFTVBMQVRFX1NJWkVfRVhDRUVERUQnLFxuICBURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCA9ICdURU1QTEFURV9WQUxJREFUSU9OX0ZBSUxFRCcsXG5cbiAgLy8gQ2xpZW50IHRvbyBvbGQgKDQyNilcbiAgLyoqIFRoZSBwaXBlbGluZS1tYW5hZ2VyIENMSSBpcyBvbGRlciB0aGFuIHRoZSBwbGF0Zm9ybSdzXG4gICAqICBgUElQRUxJTkVfTUFOQUdFUl9NSU5fVkVSU0lPTmA7IHRoZSBmaXggaXMgYHBpcGVsaW5lLW1hbmFnZXIgLS11cGdyYWRlYC4gKi9cbiAgQ0xJRU5UX1VQR1JBREVfUkVRVUlSRUQgPSAnQ0xJRU5UX1VQR1JBREVfUkVRVUlSRUQnLFxuXG4gIC8vIFF1b3RhL1JhdGUgbGltaXQgZXJyb3JzICg0MjkpXG4gIFFVT1RBX0VYQ0VFREVEID0gJ1FVT1RBX0VYQ0VFREVEJyxcbiAgLyoqIFRoZSBjYWxsZXIncyBwZXItbWVtYmVyIHNoYXJlIG9mIHRoZSBvcmcncyBgYWlDYWxsc2AgKG9yZyBzZXR0aW5nXG4gICAqICBgYWlDYWxsc1Blck1lbWJlclBjdGApIGlzIHNwZW50IGZvciB0aGlzIHBlcmlvZCDigJQgdGhlIG9yZyBpdHNlbGYgbWF5IGhhdmUgaGVhZHJvb20uICovXG4gIEFJX01FTUJFUl9TSEFSRV9FWENFRURFRCA9ICdBSV9NRU1CRVJfU0hBUkVfRVhDRUVERUQnLFxuICAvKiogVGhlIG9yZydzIHBlci1wZXJpb2QgQUkgdG9rZW4gYnVkZ2V0IChvcmcgc2V0dGluZyBgYWlUb2tlbkJ1ZGdldGApIGlzIHNwZW50LiAqL1xuICBBSV9UT0tFTl9CVURHRVRfRVhDRUVERUQgPSAnQUlfVE9LRU5fQlVER0VUX0VYQ0VFREVEJyxcbiAgUkFURV9MSU1JVF9FWENFRURFRCA9ICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgLyoqIEFuIGFub255bW91cyBzdWJtaXR0ZXIgKHBlciB2ZXJpZmllZCBlbWFpbCwgb3IgcGVyIGNsaWVudCBJUCkgaXMgYXQgdGhlXG4gICAqICByb2xsaW5nIDI0LWhvdXIgc3VibWlzc2lvbiBjYXAuICovXG4gIFNVQk1JU1NJT05fTElNSVQgPSAnU1VCTUlTU0lPTl9MSU1JVCcsXG5cbiAgLy8gUGF5bG9hZCBlcnJvcnMgKDQxMylcbiAgUEFZTE9BRF9UT09fTEFSR0UgPSAnUEFZTE9BRF9UT09fTEFSR0UnLFxuXG4gIC8vIENvbmZsaWN0IGVycm9ycyAoNDA5KVxuICBDT05GTElDVCA9ICdDT05GTElDVCcsXG4gIERVUExJQ0FURV9FTlRSWSA9ICdEVVBMSUNBVEVfRU5UUlknLFxuICBTQ0FOX0NPTkZMSUNUID0gJ1NDQU5fQ09ORkxJQ1QnLFxuICAvKiogQSBwbHVnaW4gaW1hZ2UncyBjb3NpZ24gc2lnbmF0dXJlIChvciBpdHMgc2lnbmVkIFNCT00gYXR0ZXN0YXRpb24pIGRpZFxuICAgKiAgbm90IHZlcmlmeSBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSdzIHBsdWdpbi1zaWduaW5nIGtleSDigJQgdGhlIHJlZ2lzdHJ5XG4gICAqICBjb250ZW50IG5vIGxvbmdlciBtYXRjaGVzIHdoYXQgdGhlIHBsYXRmb3JtIGJ1aWx0IGFuZCBzaWduZWQuICovXG4gIElNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQgPSAnSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCcsXG4gIC8qKiBUaGUgcGx1Z2luIHZlcnNpb24gaXMgaW1tdXRhYmxlIOKAlCBhIHB1Ymxpc2ggcmVxdWVzdCByZWZlcmVuY2VzIGl0XG4gICAqICAoYGZyb3plbl9hdGAgc2V0KSBvciBpdCBpcyBwdWJsaXNoZWQgdG8gYSBsaXN0aW5nIOKAlCBzbyBpdCBjYW4gYmUgbmVpdGhlclxuICAgKiAgcmUtdXBsb2FkZWQsIGVkaXRlZCBub3IgZGVsZXRlZCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFBMVUdJTl9WRVJTSU9OX0ZST1pFTiA9ICdQTFVHSU5fVkVSU0lPTl9GUk9aRU4nLFxuICAvKiogVGhlIHBsdWdpbiB2ZXJzaW9uIGlzIHJlZmVyZW5jZWQgYnkgb25lIG9mIHRoZSBvcmcncyBwaXBlbGluZXMsIG9yIHB1Ymxpc2hlZFxuICAgKiAgdG8gYW4gZWNvc3lzdGVtIGxpc3Rpbmc7IGRlbGV0aW5nIGl0IG5lZWRzIGA/Zm9yY2U9dHJ1ZWAgcGx1cyBhIHN0ZXAtdXAuICovXG4gIFBMVUdJTl9WRVJTSU9OX0lOX1VTRSA9ICdQTFVHSU5fVkVSU0lPTl9JTl9VU0UnLFxuICAvKiogQSBmcmVlemUgbmFtZWQgYW4gaW1hZ2UgZGlnZXN0IHRoYXQgaXMgbm90IHRoZSB2ZXJzaW9uJ3Mgc3RvcmVkIGRpZ2VzdFxuICAgKiAgKGZhaWwgY2xvc2VkOiB3aGF0IHdhcyByZXF1ZXN0ZWQgaXMgbm90IHdoYXQgd291bGQgYmUgcHVibGlzaGVkKS4gKi9cbiAgUExVR0lOX0RJR0VTVF9NSVNNQVRDSCA9ICdQTFVHSU5fRElHRVNUX01JU01BVENIJyxcbiAgLyoqIEEgcHVibGlzaCByZXF1ZXN0IG5lZWRzIHRoZSBvcmcncyBwdWJsaXNoZXIgcHJvZmlsZSwgd2hpY2ggZG9lc24ndCBleGlzdFxuICAgKiAgeWV0IChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gQ2xhaW0gYSBoYW5kbGUgZmlyc3QuICovXG4gIFBVQkxJU0hFUl9SRVFVSVJFRCA9ICdQVUJMSVNIRVJfUkVRVUlSRUQnLFxuICAvKiogVGhlIHJlcXVlc3RlZCBwdWJsaXNoZXIgaGFuZGxlIGlzIHJlc2VydmVkIChPZmZpY2lhbC9WZXJpZmllZFxuICAgKiAgcmVzZXJ2YXRpb25zLCBjb25mdXNhYmxlcykuIFN1Ym1pdCBhIGBjbGFpbWAgcmVxdWVzdCBpbnN0ZWFkLiAqL1xuICBQVUJMSVNIRVJfSEFORExFX1JFU0VSVkVEID0gJ1BVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRUQnLFxuICAvKiogQSBwdWJsaXNoIHJlcXVlc3QgZmFpbGVkIGEgc3VibWl0IGdhdGUgKHB1YmxpYyB2aXNpYmlsaXR5LCBTUERYIGxpY2Vuc2UsXG4gICAqICBSRUFETUUsIHNpZ25hdHVyZSwgc2NhbiwgdnVsbmVyYWJpbGl0eSBnYXRlIOKApik7IGBkZXRhaWxzLmdhdGVzYCBsaXN0cyB0aGVtLiAqL1xuICBQVUJMSVNIX0dBVEVfRkFJTEVEID0gJ1BVQkxJU0hfR0FURV9GQUlMRUQnLFxuICAvKiogQSBWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gKG9yIGl0cyBkZWNpc2lvbikgZnJvbSBhbiBvcmcgd2hvc2UgcGxhblxuICAgKiAgbGFja3MgdGhlIGB2ZXJpZmllZF9wdWJsaXNoZXJgIGZlYXR1cmUgKFRlYW0rLCBkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgVkVSSUZJRURfUExBTl9SRVFVSVJFRCA9ICdWRVJJRklFRF9QTEFOX1JFUVVJUkVEJyxcbiAgLyoqIEEgVmVyaWZpZWQtcHVibGlzaGVyIGFwcGxpY2F0aW9uIGZyb20gYW4gb3JnIHdpdGggbm8gRE5TLXZlcmlmaWVkIGRvbWFpbi4gKi9cbiAgVkVSSUZJRURfRE9NQUlOX1JFUVVJUkVEID0gJ1ZFUklGSUVEX0RPTUFJTl9SRVFVSVJFRCcsXG4gIC8qKiBBIFZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBmcm9tIGFuIG9yZyB3aG9zZSBvd25lciBoYXMgbm8gc2Vjb25kXG4gICAqICBmYWN0b3IgKHBhc3NrZXkgb3IgYXV0aGVudGljYXRvciBhcHApLiAqL1xuICBWRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRUQgPSAnVkVSSUZJRURfT1dORVJfTUZBX1JFUVVJUkVEJyxcbiAgLyoqIEEgcGx1Z2luIHJlZmVyZW5jZSBuYW1lcyBhbiBlY29zeXN0ZW0gbGlzdGluZyB0aGUgb3JnIGhhc24ndCBpbnN0YWxsZWQgKG9yXG4gICAqICB3aG9zZSBpbnN0YWxsIGlzIHBlbmRpbmcsIGRlbmllZCwgb3IgZG9lc24ndCBjb3ZlciB0aGUgdmVyc2lvbiBhc2tlZCBmb3I7XG4gICAqICBgZGV0YWlscy5yZWFzb25gKSDigJQgZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCAqL1xuICBQTFVHSU5fTk9UX0lOU1RBTExFRCA9ICdQTFVHSU5fTk9UX0lOU1RBTExFRCcsXG4gIC8qKiBUaGUgb3JnJ3MgY29uc3VtcHRpb24gcG9saWN5IHJlZnVzZXMgdGhlIGxpc3Rpbmc6IGl0cyB0aWVyIGlzbid0IGFsbG93ZWQsXG4gICAqICB0aGUgbGlzdGluZyBpcyBibG9ja2VkLCBvciBhbiBhZHZpc29yeSBibG9ja3MgdGhlIHZlcnNpb24gKGBkZXRhaWxzLnJlYXNvbmApLiAqL1xuICBQTFVHSU5fQkxPQ0tFRF9CWV9QT0xJQ1kgPSAnUExVR0lOX0JMT0NLRURfQllfUE9MSUNZJyxcbiAgLyoqIFRoZSBsaXN0aW5nIG9yIHZlcnNpb24gY2FuJ3QgYmUgdXNlZDogeWFua2VkLCBzdXNwZW5kZWQsIG9yIHBhdXNlZCBmb3IgbmV3XG4gICAqICBpbnN0YWxscyAoYGRldGFpbHMucmVhc29uYCkuICovXG4gIFBMVUdJTl9VTkFWQUlMQUJMRSA9ICdQTFVHSU5fVU5BVkFJTEFCTEUnLFxuICAvKiogQW4gYXV0by1jcmVhdGVkIHBsYWNlaG9sZGVyIHBsdWdpbiBjYW4ndCB0YWtlIHRoZSBuYW1lIG9mIGEgbGlzdGVkIHBsdWdpblxuICAgKiDigJQgaW5zdGFsbCB0aGUgbGlzdGluZyBpbnN0ZWFkLiAqL1xuICBQTFVHSU5fTkFNRV9MSVNURUQgPSAnUExVR0lOX05BTUVfTElTVEVEJyxcbiAgLyoqIEFuIGFub255bW91cyBzdWJtaXNzaW9uIG5hbWVzIGEgY29tbXVuaXR5IGxpc3RpbmcgYW5vdGhlciBzdWJtaXR0ZXIgb3ducyxcbiAgICogIGEgcmVzZXJ2ZWQgbmFtZSwgYW4gT2ZmaWNpYWwvVmVyaWZpZWQgbGlzdGluZydzIG5hbWUsIG9yIG9uZSBjb25mdXNhYmxlXG4gICAqICB3aXRoIGEgdG9wIGxpc3Rpbmc7IGBkZXRhaWxzLnJlYXNvbmAgc2F5cyB3aGljaC4gKi9cbiAgTkFNRV9UQUtFTiA9ICdOQU1FX1RBS0VOJyxcbiAgLyoqIEFuIFVOUVVBTElGSUVEIHJlZmVyZW5jZSBuYW1lcyBhIHBsdWdpbiB0aGUgb3JnIERFTEVURUQ6IHJlZnVzZWQgcmF0aGVyXG4gICAqICB0aGFuIHNpbGVudGx5IGZhbGxpbmcgdGhyb3VnaCB0byBhIHNhbWUtbmFtZWQgbGlzdGluZywgd2hpY2ggd291bGQgc3dhcCB0aGVcbiAgICogIGltYWdlIGEgcGlwZWxpbmUgcnVucyB3aXRob3V0IGFueW9uZSBjaG9vc2luZyBpdCAoYGRldGFpbHMuc3RhdGU6ICdkZWxldGVkJ2ApLiAqL1xuICBQTFVHSU5fREVMRVRFRCA9ICdQTFVHSU5fREVMRVRFRCcsXG5cbiAgLy8gUGx1Z2luIGJ1aWxkIG91dGNvbWVzICg0MjIpIOKAlCB0ZXJtaW5hbCBidWlsZCBmYWlsdXJlcywgcmVwb3J0ZWQgb24gdGhlIGJ1aWxkXG4gIC8vIHN0cmVhbSBhbmQgaW4gdGhlIGJ1aWxkJ3MgZmFpbHVyZSByZWNvcmQsIG5ldmVyIGFuc3dlcmVkIG9uIGEgcmVxdWVzdC5cbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBjb3VsZCBub3QgYmUgdnVsbmVyYWJpbGl0eS1zY2FubmVkIGFmdGVyIGV2ZXJ5IHJldHJ5LCBzb1xuICAgKiAgbm90aGluZyB3YXMgcGVyc2lzdGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgSU1BR0VfU0NBTl9VTkFWQUlMQUJMRSA9ICdJTUFHRV9TQ0FOX1VOQVZBSUxBQkxFJyxcbiAgLyoqIFRoZSBidWlsdCBpbWFnZSBoYXMgbW9yZSBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmdzIHRoYW4gdGhlIHBsYXRmb3JtXG4gICAqICBmbG9vciBgUExVR0lOX1ZVTE5fTUFYX0ZJTkRJTkdTYDsgdGhlIG1lc3NhZ2UgbGlzdHMgdGhlbSB3aXRoIHRoZWlyIGZpeGVzLiAqL1xuICBQTFVHSU5fVlVMTl9HQVRFID0gJ1BMVUdJTl9WVUxOX0dBVEUnLFxuICAvKiogQW4gdXBsb2FkIHdob3NlIE5BTUUgd291bGQgb3ZlcnJpZGUgYSBsaXN0aW5nIG9yIHRoZSBwYXJlbnQgb3JnJ3MgcGx1Z2luLFxuICAgKiAgcmVmdXNlZCBiZWNhdXNlIHRoZSBjb25zdW1wdGlvbiBwb2xpY3kgc2F5cyBgc2hhZG93aW5nOiBkZW55YC4gKi9cbiAgUExVR0lOX05BTUVfU0hBRE9XUyA9ICdQTFVHSU5fTkFNRV9TSEFET1dTJyxcblxuICAvLyBCaWxsaW5nIGVycm9yc1xuICBQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCA9ICdQQVlNRU5UX01FVEhPRF9SRVFVSVJFRCcsIC8vIDQwMlxuICBESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEID0gJ0RJU0NPVU5UX0NFSUxJTkdfRVhDRUVERUQnLCAvLyA0MDBcbiAgRElTQ09VTlRfTk9UX0ZPVU5EID0gJ0RJU0NPVU5UX05PVF9GT1VORCcsIC8vIDQwNFxuICBESVNDT1VOVF9JTkFDVElWRSA9ICdESVNDT1VOVF9JTkFDVElWRScsIC8vIDQwOVxuICBQTEFOX09WRVJfQ0FQID0gJ1BMQU5fT1ZFUl9DQVAnLCAvLyA0MDlcbiAgQURET05fT1ZFUl9DQVAgPSAnQURET05fT1ZFUl9DQVAnLCAvLyA0MDlcblxuICAvLyBTZXJ2ZXIgZXJyb3JzICg1MDApXG4gIElOVEVSTkFMX0VSUk9SID0gJ0lOVEVSTkFMX0VSUk9SJyxcbiAgREFUQUJBU0VfRVJST1IgPSAnREFUQUJBU0VfRVJST1InLFxuXG4gIC8vIE5vdCBpbXBsZW1lbnRlZCAoNTAxKSDigJQgdGhlIGNvbmZpZ3VyZWQgcHJvdmlkZXIgaGFzIG5vIHN1Y2ggY2FwYWJpbGl0eVxuICBOT1RfSU1QTEVNRU5URUQgPSAnTk9UX0lNUExFTUVOVEVEJyxcblxuICAvLyBTZXJ2aWNlIHVuYXZhaWxhYmxlICg1MDMpXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEUgPSAnU0VSVklDRV9VTkFWQUlMQUJMRScsXG4gIENPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRSA9ICdDT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEUnLFxufVxuXG4vKipcbiAqIE1hcHMgZXJyb3IgY29kZXMgdG8gdGhlaXIgZGVmYXVsdCBIVFRQIHN0YXR1cyBjb2Rlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZVN0YXR1czogUmVjb3JkPEVycm9yQ29kZSwgbnVtYmVyPiA9IHtcbiAgW0Vycm9yQ29kZS5VTkFVVEhPUklaRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fRVhQSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9JTlZBTElEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX01JU1NJTkddOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fUkVWT0tFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5NRkFfUkVRVUlSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuUkVBVVRIX1JFUVVJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLklOU1VGRklDSUVOVF9QRVJNSVNTSU9OU106IDQwMyxcbiAgW0Vycm9yQ29kZS5TWVNURU1fT1JHX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9URVJNU19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1NVU1BFTkRFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUFVCTElTSElOR19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5BSV9ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUkVWSUVXU19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5SRVZJRVdfU0VMRl9QUk9NT1RJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuU0VQQVJBVElPTl9PRl9EVVRJRVNdOiA0MDMsXG4gIFtFcnJvckNvZGUuSFVNQU5fU0VTU0lPTl9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5JTVBFUlNPTkFUSU9OX1JFQURfT05MWV06IDQwMyxcbiAgW0Vycm9yQ29kZS5PUkdfTUlTTUFUQ0hdOiA0MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9WSU9MQVRJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLk9SR19OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuVVNFUl9OT1RfUkVHSVNURVJFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5TVUJNSVNTSU9OU19ESVNBQkxFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SXTogNDAwLFxuICBbRXJyb3JDb2RlLk1JU1NJTkdfUkVRVUlSRURfRklFTERdOiA0MDAsXG4gIFtFcnJvckNvZGUuUFJPT0ZfT0ZfV09SS19JTlZBTElEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1VOS05PV05fUEFUSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9DWUNMRV06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9QQVJTRV9FUlJPUl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9UWVBFX01JU01BVENIXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NJWkVfRVhDRUVERURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuQ0xJRU5UX1VQR1JBREVfUkVRVUlSRURdOiA0MjYsXG4gIFtFcnJvckNvZGUuUVVPVEFfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuQUlfTUVNQkVSX1NIQVJFX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLkFJX1RPS0VOX0JVREdFVF9FWENFRURFRF06IDQyOSxcbiAgW0Vycm9yQ29kZS5SQVRFX0xJTUlUX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlNVQk1JU1NJT05fTElNSVRdOiA0MjksXG4gIFtFcnJvckNvZGUuUEFZTE9BRF9UT09fTEFSR0VdOiA0MTMsXG4gIFtFcnJvckNvZGUuQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuRFVQTElDQVRFX0VOVFJZXTogNDA5LFxuICBbRXJyb3JDb2RlLlNDQU5fQ09ORkxJQ1RdOiA0MDksXG4gIFtFcnJvckNvZGUuSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVkVSU0lPTl9GUk9aRU5dOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX1ZFUlNJT05fSU5fVVNFXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9ESUdFU1RfTUlTTUFUQ0hdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSF9HQVRFX0ZBSUxFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9QTEFOX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX0RPTUFJTl9SRVFVSVJFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX05PVF9JTlNUQUxMRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUExVR0lOX0JMT0NLRURfQllfUE9MSUNZXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9VTkFWQUlMQUJMRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTkFNRV9MSVNURURdOiA0MDksXG4gIFtFcnJvckNvZGUuTkFNRV9UQUtFTl06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fREVMRVRFRF06IDQxMCxcbiAgW0Vycm9yQ29kZS5JTUFHRV9TQ0FOX1VOQVZBSUxBQkxFXTogNDIyLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WVUxOX0dBVEVdOiA0MjIsXG4gIFtFcnJvckNvZGUuUExVR0lOX05BTUVfU0hBRE9XU106IDQwOSxcbiAgW0Vycm9yQ29kZS5QQVlNRU5UX01FVEhPRF9SRVFVSVJFRF06IDQwMixcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9JTkFDVElWRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTEFOX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLkFERE9OX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLkRBVEFCQVNFX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLk5PVF9JTVBMRU1FTlRFRF06IDUwMSxcbiAgW0Vycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxuICBbRXJyb3JDb2RlLkNPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRV06IDUwMyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBIVFRQIHN0YXR1cyBjb2RlIGZvciBhbiBlcnJvciBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKGNvZGU6IEVycm9yQ29kZSk6IG51bWJlciB7XG4gIHJldHVybiBFcnJvckNvZGVTdGF0dXNbY29kZV0gPz8gNTAwO1xufVxuIl19
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItY29kZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lcnJvci1jb2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQU4sSUFBWSxTQXlPWDtBQXpPRCxXQUFZLFNBQVM7SUFDbkIsOEJBQThCO0lBQzlCLDBDQUE2QixDQUFBO0lBQzdCLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9CLDRDQUErQixDQUFBO0lBQy9COzs7dURBR21EO0lBQ25ELDBDQUE2QixDQUFBO0lBQzdCOzhFQUMwRTtJQUMxRSxnREFBbUMsQ0FBQTtJQUVuQyw2QkFBNkI7SUFDN0Isa0VBQXFELENBQUE7SUFDckQ7d0VBQ29FO0lBQ3BFLDhEQUFpRCxDQUFBO0lBQ2pEO29FQUNnRTtJQUNoRSxnRUFBbUQsQ0FBQTtJQUNuRDtrRUFDOEQ7SUFDOUQsZ0VBQW1ELENBQUE7SUFDbkQ7O29GQUVnRjtJQUNoRix3REFBMkMsQ0FBQTtJQUMzQzs7NkRBRXlEO0lBQ3pELDBFQUE2RCxDQUFBO0lBQzdEO3dFQUNvRTtJQUNwRSxrRUFBcUQsQ0FBQTtJQUNyRDsyQkFDdUI7SUFDdkIsd0VBQTJELENBQUE7SUFDM0Qsb0RBQW9EO0lBQ3BELHdEQUEyQyxDQUFBO0lBQzNDO2dGQUM0RTtJQUM1RSx3Q0FBMkIsQ0FBQTtJQUMzQix3RkFBd0Y7SUFDeEYsc0VBQXlELENBQUE7SUFDekQ7eURBQ3FEO0lBQ3JELGdFQUFtRCxDQUFBO0lBQ25EOzJEQUN1RDtJQUN2RCw0REFBK0MsQ0FBQTtJQUMvQzs7MkNBRXVDO0lBQ3ZDLDBEQUE2QyxDQUFBO0lBQzdDLDBDQUE2QixDQUFBO0lBQzdCLDBEQUE2QyxDQUFBO0lBRTdDLHlCQUF5QjtJQUN6QixvQ0FBdUIsQ0FBQTtJQUN2Qiw0Q0FBK0IsQ0FBQTtJQUMvQjs7MkRBRXVEO0lBQ3ZELHdE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RUFBRSxHQUFHO0lBQzNCLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxHQUFHO0lBQ3ZDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRztJQUNqQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFBRSxHQUFHO0lBQ3hDLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsR0FBRztJQUMxQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUc7SUFDbkMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHO0lBQ2xDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEdBQUc7SUFDOUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRztJQUMvQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHO0lBQy9CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUc7SUFDL0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRztJQUNoQyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUc7SUFDcEMsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsRUFBRSxHQUFHO0NBQ2hELENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUFlO0lBQ25ELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU3RhbmRhcmRpemVkIGVycm9yIGNvZGVzIHVzZWQgYWNyb3NzIGFsbCBBUEkgbWljcm9zZXJ2aWNlcy5cbiAqIFVzZSB0aGVzZSBjb2RlcyBpbiBlcnJvciByZXNwb25zZXMgZm9yIGNvbnNpc3RlbnQgY2xpZW50IGhhbmRsaW5nLlxuICpcbiAqIEVhY2ggSFRUUCBzdGF0dXMgY2F0ZWdvcnkgaGFzIG9uZSBwcmltYXJ5IGNvZGUuIFVzZSB0aGUgYGRldGFpbHNgXG4gKiBmaWVsZCBpbiBlcnJvciByZXNwb25zZXMgZm9yIHN1Yi10eXBlIGluZm9ybWF0aW9uIChlLmcuIHdoaWNoIHF1b3RhXG4gKiB3YXMgZXhjZWVkZWQsIHdoaWNoIGZpZWxkIGZhaWxlZCB2YWxpZGF0aW9uKS5cbiAqL1xuZXhwb3J0IGVudW0gRXJyb3JDb2RlIHtcbiAgLy8gQXV0aGVudGljYXRpb24gZXJyb3JzICg0MDEpXG4gIFVOQVVUSE9SSVpFRCA9ICdVTkFVVEhPUklaRUQnLFxuICBUT0tFTl9FWFBJUkVEID0gJ1RPS0VOX0VYUElSRUQnLFxuICBUT0tFTl9JTlZBTElEID0gJ1RPS0VOX0lOVkFMSUQnLFxuICBUT0tFTl9NSVNTSU5HID0gJ1RPS0VOX01JU1NJTkcnLFxuICBUT0tFTl9SRVZPS0VEID0gJ1RPS0VOX1JFVk9LRUQnLFxuICAvKiogVGhlIHNlc3Npb24gaXMgbm90IE1GQS1ncmFkZSAoYGFhbGAgYmVsb3cgdGhlIHJvdXRlJ3MgYG1pbkFzc3VyYW5jZWApLlxuICAgKiAgVGhlIGNsaWVudCBzZW5kcyB0aGUgcGVyc29uIHRvIGVucm9sIC8gc2lnbiBpbiBhZ2FpbiB3aXRoIGEgc2Vjb25kXG4gICAqICBmYWN0b3Ig4oCUIGl0IG11c3QgTk9UIHNpZ24gdGhlbSBvdXQgb3IgcmV0cnkgYSB0b2tlbiByZWZyZXNoLCBzaW5jZSBhXG4gICAqICByZWZyZXNoIGNhbiBuZXZlciByYWlzZSB0aGUgYXNzdXJhbmNlIGxldmVsLiAqL1xuICBNRkFfUkVRVUlSRUQgPSAnTUZBX1JFUVVJUkVEJyxcbiAgLyoqIFRoZSBzZXNzaW9uIGlzIE1GQS1ncmFkZSBidXQgaXRzIGBhdXRoX3RpbWVgIGlzIG9sZGVyIHRoYW4gdGhlIHJvdXRlJ3NcbiAgICogIGBtYXhBZ2VgIOKAlCB0aGUgcGVyc29uIG11c3QgYXV0aGVudGljYXRlIGFnYWluIChub3QgbWVyZWx5IHJlZnJlc2gpLiAqL1xuICBSRUFVVEhfUkVRVUlSRUQgPSAnUkVBVVRIX1JFUVVJUkVEJyxcblxuICAvLyBBdXRob3JpemF0aW9uIGVycm9ycyAoNDAzKVxuICBJTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlMgPSAnSU5TVUZGSUNJRU5UX1BFUk1JU1NJT05TJyxcbiAgLyoqIEEgbWFjaGluZSBjcmVkZW50aWFsIChzZXJ2aWNlIHByaW5jaXBhbCwgb3JnIHNlcnZpY2UgYWNjb3VudCwgb3IgYW5cbiAgICogIGV4Y2hhbmdlZCBhY2Nlc3Mga2V5KSByZWFjaGVkIGEgcm91dGUgdGhhdCByZXF1aXJlcyBhIHBlcnNvbi4gKi9cbiAgSFVNQU5fU0VTU0lPTl9SRVFVSVJFRCA9ICdIVU1BTl9TRVNTSU9OX1JFUVVJUkVEJyxcbiAgLyoqIEEgYm9vdHN0cmFwLWFkbWluIGVucm9sbWVudCBzZXNzaW9uIChgbWZhRW5yb2xsbWVudFBlbmRpbmdgKSByZWFjaGVkIGFcbiAgICogIHJvdXRlIG91dHNpZGUgdGhlIGVucm9sbWVudCAvIHNpZ24tb3V0IC8gc2V0dXAgYWxsb3dsaXN0LiAqL1xuICBNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCA9ICdNRkFfRU5ST0xMTUVOVF9SRVFVSVJFRCcsXG4gIC8qKiBBIHJlYWQtb25seSBpbXBlcnNvbmF0aW9uIHRva2VuIChgaW1wZXJzb25hdGlvblJlYWRPbmx5YCkgYXR0ZW1wdGVkIGFcbiAgICogIHN0YXRlLWNoYW5naW5nIHJlcXVlc3QgKGFueXRoaW5nIGJ1dCBHRVQvSEVBRC9PUFRJT05TKS4gKi9cbiAgSU1QRVJTT05BVElPTl9SRUFEX09OTFkgPSAnSU1QRVJTT05BVElPTl9SRUFEX09OTFknLFxuICAvKiogQSBwbHVnaW4tZWNvc3lzdGVtIGdvdmVybmFuY2Ugcm91dGUgKGRvY3MvcnVuYm9va3MvZWNvc3lzdGVtLW1vZGVyYXRpb24ubWQpXG4gICAqICB3YXMgY2FsbGVkIGZyb20gYW4gYWN0aXZlIG9yZyBvdGhlciB0aGFuIHRoZSBzeXN0ZW0gb3JnIOKAlCBhIHRva2VuIG1pbnRlZCBpblxuICAgKiAgYSB0ZW5hbnQgb3JnIGlzIHJlZnVzZWQgZXZlbiBmb3IgdGhlIHNhbWUgdXNlci4gU3dpdGNoIHRvIHRoZSBzeXN0ZW0gb3JnLiAqL1xuICBTWVNURU1fT1JHX1JFUVVJUkVEID0gJ1NZU1RFTV9PUkdfUkVRVUlSRUQnLFxuICAvKiogQSBub24tc3lzdGVtIG9yZyB0cmllZCB0byBjcmVhdGUgYSBwbHVnaW4gdW5kZXIgYSBtYW5hZ2VkIHRvb2xjaGFpbiBuYW1lXG4gICAqICAoYE1BTkFHRURfVE9PTENIQUlOX1BMVUdJTlNgOiBgcGlwZWxpbmUtYm9vdHN0cmFwYCwgYGNkay1zeW50aGApLiBBIGN1c3RvbVxuICAgKiAgc3ludGggZW52aXJvbm1lbnQgaXMgcHVibGlzaGVkIHVuZGVyIGFub3RoZXIgbmFtZS4gKi9cbiAgUExVR0lOX01BTkFHRURfTkFNRV9SRVNFUlZFRCA9ICdQTFVHSU5fTUFOQUdFRF9OQU1FX1JFU0VSVkVEJyxcbiAgLyoqIFRoZSBwdWJsaXNoZXIgaGFzbid0IGFjY2VwdGVkIHRoZSBDVVJSRU5UIHB1Ymxpc2hlciB0ZXJtcyB2ZXJzaW9uLCBzbyBpdFxuICAgKiAgY2FuJ3Qgc3VibWl0IG5ldyByZXF1ZXN0cyAoZXhpc3RpbmcgbGlzdGluZ3MgYXJlIHVuYWZmZWN0ZWQpLiAqL1xuICBQVUJMSVNIRVJfVEVSTVNfUkVRVUlSRUQgPSAnUFVCTElTSEVSX1RFUk1TX1JFUVVJUkVEJyxcbiAgLyoqIFB1Ymxpc2hpbmcgaXMgZG9uZSBmcm9tIHRoZSBST09UIG9yZzsgYSB0ZWFtIG9yZyBjYW4ndCBvd24gYSBwdWJsaXNoZXIgb3JcbiAgICogIHN1Ym1pdCByZXF1ZXN0cy4gKi9cbiAgUFVCTElTSEVSX1JPT1RfT1JHX1JFUVVJUkVEID0gJ1BVQkxJU0hFUl9ST09UX09SR19SRVFVSVJFRCcsXG4gIC8qKiBUaGUgcHVibGlzaGVyIGlzIHN1c3BlbmRlZCBieSB0aGUgc3lzdGVtIG9yZy4gKi9cbiAgUFVCTElTSEVSX1NVU1BFTkRFRCA9ICdQVUJMSVNIRVJfU1VTUEVOREVEJyxcbiAgLyoqIFRoZSBvcmdhbml6YXRpb24ncyBhZG1pbmlzdHJhdG9ycyBzd2l0Y2hlZCBBSSBmZWF0dXJlcyBvZmYgKGBhaUVuYWJsZWQ6IGZhbHNlYFxuICAgKiAgb24gdGhlIG9yZydzIEFJIGNvbmZpZ3VyYXRpb24pLiBFdmVyeSBBSSBlbnRyeSBwb2ludCByZWZ1c2VzIHdpdGggaXQuICovXG4gIEFJX0RJU0FCTEVEID0gJ0FJX0RJU0FCTEVEJyxcbiAgLyoqIFRlbmFudCBwdWJsaXNoaW5nIGlzIHN3aXRjaGVkIG9mZiBvbiB0aGlzIGluc3RhbmNlIChgUExVR0lOX1BVQkxJU0hJTkdfRU5BQkxFRGApLiAqL1xuICBQTFVHSU5fUFVCTElTSElOR19ESVNBQkxFRCA9ICdQTFVHSU5fUFVCTElTSElOR19ESVNBQkxFRCcsXG4gIC8qKiBSZXZpZXcgd3JpdGVzIGFyZSBzd2l0Y2hlZCBvZmYgb24gdGhpcyBpbnN0YW5jZSAoYFBMVUdJTl9SRVZJRVdTX0VOQUJMRURgKTpcbiAgICogIHJldmlld3Mgc3RheSByZWFkYWJsZSwgbm90aGluZyBuZXcgaXMgd3JpdHRlbi4gKi9cbiAgUExVR0lOX1JFVklFV1NfRElTQUJMRUQgPSAnUExVR0lOX1JFVklFV1NfRElTQUJMRUQnLFxuICAvKiogQSBtZW1iZXIgb2YgdGhlIHB1Ymxpc2hlcidzIG93biBvcmdhbml6YXRpb24gdHJpZWQgdG8gcmV2aWV3IChvciB2b3RlIG9uIGFcbiAgICogIHJldmlldyBvZikgb25lIG9mIGl0cyBsaXN0aW5ncyAoc2VsZi1wcm9tb3Rpb24pLiAqL1xuICBSRVZJRVdfU0VMRl9QUk9NT1RJT04gPSAnUkVWSUVXX1NFTEZfUFJPTU9USU9OJyxcbiAgLyoqIFNlcGFyYXRpb24gb2YgZHV0aWVzOiB0aGUgY2FsbGVyIG1heSBub3QgZGVjaWRlIHRoaXMgcmVxdWVzdCDigJRcbiAgICogIGl0IGNhbWUgZnJvbSBhbiBvcmcgdGhleSBiZWxvbmcgdG8sIHRoZXkgdXBsb2FkZWQgdGhlIHZlcnNpb24sIG9yIHRoZXlcbiAgICogIGdhdmUgdGhlIGZpcnN0IG9mIHR3byBhcHByb3ZhbHMuICovXG4gIFNFUEFSQVRJT05fT0ZfRFVUSUVTID0gJ1NFUEFSQVRJT05fT0ZfRFVUSUVTJyxcbiAgT1JHX01JU01BVENIID0gJ09SR19NSVNNQVRDSCcsXG4gIENPTVBMSUFOQ0VfVklPTEFUSU9OID0gJ0NPTVBMSUFOQ0VfVklPTEFUSU9OJyxcblxuICAvLyBOb3QgZm91bmQgZXJyb3JzICg0MDQpXG4gIE5PVF9GT1VORCA9ICdOT1RfRk9VTkQnLFxuICBPUkdfTk9UX0ZPVU5EID0gJ09SR19OT1RfRk9VTkQnLFxuICAvKiogVGhlIGVtYWlsIGdpdmVuIHRvIFwiYWRkIG1lbWJlclwiIGhhcyBubyBhY2NvdW50LiBEaXN0aW5jdCBmcm9tIE5PVF9GT1VORFxuICAgKiAgYmVjYXVzZSBpdCBpcyBBQ1RJT05BQkxFOiB0aGUgY2FsbGVyJ3MgaW50ZW50IGlzIHNhdGlzZmlhYmxlIGJ5IHNlbmRpbmcgYW5cbiAgICogIGludml0YXRpb24sIGFuZCBhIGJhcmUgNDA0IG5hbWVkIG5vIHdheSBmb3J3YXJkLiAqL1xuICBVU0VSX05PVF9SRUdJU1RFUkVEID0gJ1VTRVJfTk9UX1JFR0lTVEVSRUQnLFxuICAvKiogVGhlIGFub255bW91cyBwbHVnaW4gc3VibWlzc2lvbiBBUEkgaXMgb2ZmIG9uIHRoaXMgaW5zdGFuY2VcbiAgICogIChgQU5PTllNT1VTX1NVQk1JU1NJT05TX0VOQUJMRURgLCBvciBvdXRib3VuZCBlbWFpbCBpc24ndCBjb25maWd1cmVkKSDigJRcbiAgICogIGFuc3dlcmVkIGFzIGEgcGxhaW4gNDA0IChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgU1VCTUlTU0lPTlNfRElTQUJMRUQgPSAnU1VCTUlTU0lPTlNfRElTQUJMRUQnLFxuXG4gIC8vIFZhbGlkYXRpb24gZXJyb3JzICg0MDApXG4gIFZBTElEQVRJT05fRVJST1IgPSAnVkFMSURBVElPTl9FUlJPUicsXG4gIE1JU1NJTkdfUkVRVUlSRURfRklFTEQgPSAnTUlTU0lOR19SRVFVSVJFRF9GSUVMRCcsXG4gIC8qKiBBIHByb29mLW9mLXdvcmsgYW5zd2VyIGlzIG1pc3NpbmcsIG1hbGZvcm1lZCwgZXhwaXJlZCwgdG9vIGVhc3ksIHdyb25nLFxuICAgKiAgb3Igd2FzIGFscmVhZHkgdXNlZCAoYW5vbnltb3VzIHN1Ym1pc3Npb25zKS4gKi9cbiAgUFJPT0ZfT0ZfV09SS19JTlZBTElEID0gJ1BST09GX09GX1dPUktfSU5WQUxJRCcsXG4gIFRFTVBMQVRFX1VOS05PV05fUEFUSCA9ICdURU1QTEFURV9VTktOT1dOX1BBVEgnLFxuICBURU1QTEFURV9DWUNMRSA9ICdURU1QTEFURV9DWUNMRScsXG4gIFRFTVBMQVRFX1BBUlNFX0VSUk9SID0gJ1RFTVBMQVRFX1BBUlNFX0VSUk9SJyxcbiAgVEVNUExBVEVfVFlQRV9NSVNNQVRDSCA9ICdURU1QTEFURV9UWVBFX01JU01BVENIJyxcbiAgVEVNUExBVEVfU0VDUkVUU19SRVNFUlZFRCA9ICdURU1QTEFURV9TRUNSRVRTX1JFU0VSVkVEJyxcbiAgVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OID0gJ1RFTVBMQVRFX0NPTlRSQUNUX1ZJT0xBVElPTicsXG4gIFRFTVBMQVRFX1NJWkVfRVhDRUVERUQgPSAnVEVNUExBVEVfU0laRV9FWENFRURFRCcsXG4gIFRFTVBMQVRFX1ZBTElEQVRJT05fRkFJTEVEID0gJ1RFTVBMQVRFX1ZBTElEQVRJT05fRkFJTEVEJyxcbiAgLyoqIEEgbWFuYWdlZCB0b29sY2hhaW4gbmFtZSBpbiBhIHB1Ymxpc2gsIHN1Ym1pc3Npb24sIGxpc3Rpbmcgb3IgaW5zdGFsbCBwYXRoOlxuICAgKiAgbWFuYWdlZCByZWxlYXNlcyBhcmUgbmV2ZXIgbGlzdGVkIGluIHRoZSBlY29zeXN0ZW0uICovXG4gIFBMVUdJTl9NQU5BR0VEX05PVF9MSVNUQUJMRSA9ICdQTFVHSU5fTUFOQUdFRF9OT1RfTElTVEFCTEUnLFxuICAvKiogQW4gdXBsb2FkIG9mIGEgcHJlcmVsZWFzZSAoYC1kZXYuTmApIHZlcnNpb24gb2YgYSBtYW5hZ2VkIHRvb2xjaGFpbiBuYW1lOlxuICAgKiAgYSByZWxlYXNlIHZlcnNpb24gaXMgYWx3YXlzIGEgcGxhaW4gc2VtdmVyLiAqL1xuICBQTFVHSU5fTUFOQUdFRF9QUkVSRUxFQVNFID0gJ1BMVUdJTl9NQU5BR0VEX1BSRVJFTEVBU0UnLFxuICAvKiogQSBnZW5lcmljIHBsdWdpbiByb3V0ZSAodXBkYXRlLCBkZXByZWNhdGUveWFuaywgZGVsZXRlLCBwdXJnZSkgd2FzIGNhbGxlZCBvblxuICAgKiAgYSBtYW5hZ2VkIHRvb2xjaGFpbiBuYW1lIOKAlCBmb3IgdGhlIHN5c3RlbSBvcmcgdG9vLiBSZWxlYXNlIGxpZmVjeWNsZSBsaXZlc1xuICAgKiAgb25seSBpbiB0aGUgVG9vbGNoYWluIGNvbnNvbGUsIHdoaWNoIGFjdHMgb24gYm90aCBoYWx2ZXMgYXQgb25jZS4gKi9cbiAgVE9PTENIQUlOX1VTRV9DT05TT0xFID0gJ1RPT0xDSEFJTl9VU0VfQ09OU09MRScsXG4gIC8vIFBpcGVsaW5lIHRvb2xjaGFpbiByZWxlYXNlcyAoZG9jcy9wbGFucy9ib290c3RyYXAtaW1hZ2UtdmVyc2lvbmluZy5tZCDCpzEzKS5cbiAgLyoqIFRoZSBDTEkgY291bGQgbm90IHJlc29sdmUgdGhlIGJvb3RzdHJhcCBpbWFnZSAoRDIpIOKAlCB1bnJlYWNoYWJsZSBwbGF0Zm9ybSxcbiAgICogIG5vIGRlZmF1bHQsIGEgZGVsZXRlZCBwaW4sIGEgc2lnbmF0dXJlIGZhaWx1cmUsIG9yIGEgbG9jYWwtc3BlYyBkZXBsb3lcbiAgICogIHdpdGhvdXQgYC0tdG9vbGNoYWluLWZpbGVgLiBOZXZlciBmYWxscyBiYWNrLiAqL1xuICBCT09UU1RSQVBfSU1BR0VfVU5SRVNPTFZFRCA9ICdCT09UU1RSQVBfSU1BR0VfVU5SRVNPTFZFRCcsXG4gIC8qKiBObyBwbGF0Zm9ybSBkZWZhdWx0IHJlbGVhc2UgZXhpc3RzIChEMTEpLiBOZXZlciBcImhpZ2hlc3QgdmVyc2lvblwiLiAqL1xuICBUT09MQ0hBSU5fTk9fREVGQVVMVCA9ICdUT09MQ0hBSU5fTk9fREVGQVVMVCcsXG4gIC8qKiBUaGUgcmVzb2x2ZXIgZm91bmQgaGFsdmVzIHdpdGggZGlmZmVyZW50IHJlbGVhc2UgdmVyc2lvbnMg4oCUIGEgYnVnLCBuZXZlciBzZXJ2ZWQuICovXG4gIFRPT0xDSEFJTl9QQUlSX01JU01BVENIID0gJ1RPT0xDSEFJTl9QQUlSX01JU01BVENIJyxcbiAgLyoqIEEgcGluIG9yIG9yZyBkZWZhdWx0IG5hbWVzIGEgcmVsZWFzZSB0aGF0IGlzIG5vdCBlbGlnaWJsZSAoRDE1KSBhdCBzZXQgdGltZS4gKi9cbiAgVE9PTENIQUlOX1JFTEVBU0VfTk9UX0VMSUdJQkxFID0gJ1RPT0xDSEFJTl9SRUxFQVNFX05PVF9FTElHSUJMRScsXG4gIC8qKiBBIG1hbmFnZWQgYGNkay1zeW50aGAgc3RlcCBjYXJyaWVzIGl0cyBvd24gdmVyc2lvbjsgcGluIHRoZSByZWxlYXNlIGluc3RlYWQuICovXG4gIFRPT0xDSEFJTl9QSU5fVklBX1JFTEVBU0UgPSAnVE9PTENIQUlOX1BJTl9WSUFfUkVMRUFTRScsXG4gIC8qKiBZYW5raW5nIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IHdpdGggbm8gbGl2ZSBwcmV2aW91cyBkZWZhdWx0IHRvIHJlc3RvcmUuICovXG4gIFRPT0xDSEFJTl9ERUZBVUxUX1JFUVVJUkVEID0gJ1RPT0xDSEFJTl9ERUZBVUxUX1JFUVVJUkVEJyxcbiAgLyoqIGBleHBlY3RlZEN1cnJlbnREZWZhdWx0YCBkaWQgbm90IG1hdGNoIHRoZSBjdXJyZW50IHBsYXRmb3JtIGRlZmF1bHQuICovXG4gIFRPT0xDSEFJTl9ERUZBVUxUX0NIQU5HRUQgPSAnVE9PTENIQUlOX0RFRkFVTFRfQ0hBTkdFRCcsXG4gIC8qKiBBIHNlY29uZCBEMTQgaW5pdGlhbC1kZWZhdWx0IGNhbGwuICovXG4gIFRPT0xDSEFJTl9JTklUSUFMX0FMUkVBRFlfU0VUID0gJ1RPT0xDSEFJTl9JTklUSUFMX0FMUkVBRFlfU0VUJyxcbiAgLyoqIMKnOCBndWFyZHMgb24gc2V0dGluZyB0aGUgcGxhdGZvcm0gZGVmYXVsdCDigJQgb25lIGNvZGUgcGVyIGd1YXJkLiAqL1xuICBUT09MQ0hBSU5fR1VBUkRfVU5TQ0FOTkVEID0gJ1RPT0xDSEFJTl9HVUFSRF9VTlNDQU5ORUQnLFxuICBUT09MQ0hBSU5fR1VBUkRfVlVMTl9GTE9PUiA9ICdUT09MQ0hBSU5fR1VBUkRfVlVMTl9GTE9PUicsXG4gIFRPT0xDSEFJTl9HVUFSRF9NRVRBREFUQSA9ICdUT09MQ0hBSU5fR1VBUkRfTUVUQURBVEEnLFxuICBUT09MQ0hBSU5fR1VBUkRfUEFJUl9JTkNPTVBMRVRFID0gJ1RPT0xDSEFJTl9HVUFSRF9QQUlSX0lOQ09NUExFVEUnLFxuICBUT09MQ0hBSU5fR1VBUkRfQ0FOQVJZX0dBVEUgPSAnVE9PTENIQUlOX0dVQVJEX0NBTkFSWV9HQVRFJyxcblxuICAvLyBDbGllbnQgdG9vIG9sZCAoNDI2KVxuICAvKiogVGhlIHBpcGVsaW5lLW1hbmFnZXIgQ0xJIGlzIG9sZGVyIHRoYW4gdGhlIHBsYXRmb3JtJ3NcbiAgICogIGBQSVBFTElORV9NQU5BR0VSX01JTl9WRVJTSU9OYDsgdGhlIGZpeCBpcyBgcGlwZWxpbmUtbWFuYWdlciAtLXVwZ3JhZGVgLiAqL1xuICBDTElFTlRfVVBHUkFERV9SRVFVSVJFRCA9ICdDTElFTlRfVVBHUkFERV9SRVFVSVJFRCcsXG5cbiAgLy8gUXVvdGEvUmF0ZSBsaW1pdCBlcnJvcnMgKDQyOSlcbiAgUVVPVEFfRVhDRUVERUQgPSAnUVVPVEFfRVhDRUVERUQnLFxuICAvKiogVGhlIGNhbGxlcidzIHBlci1tZW1iZXIgc2hhcmUgb2YgdGhlIG9yZydzIGBhaUNhbGxzYCAob3JnIHNldHRpbmdcbiAgICogIGBhaUNhbGxzUGVyTWVtYmVyUGN0YCkgaXMgc3BlbnQgZm9yIHRoaXMgcGVyaW9kIOKAlCB0aGUgb3JnIGl0c2VsZiBtYXkgaGF2ZSBoZWFkcm9vbS4gKi9cbiAgQUlfTUVNQkVSX1NIQVJFX0VYQ0VFREVEID0gJ0FJX01FTUJFUl9TSEFSRV9FWENFRURFRCcsXG4gIC8qKiBUaGUgb3JnJ3MgcGVyLXBlcmlvZCBBSSB0b2tlbiBidWRnZXQgKG9yZyBzZXR0aW5nIGBhaVRva2VuQnVkZ2V0YCkgaXMgc3BlbnQuICovXG4gIEFJX1RPS0VOX0JVREdFVF9FWENFRURFRCA9ICdBSV9UT0tFTl9CVURHRVRfRVhDRUVERUQnLFxuICBSQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAvKiogQW4gYW5vbnltb3VzIHN1Ym1pdHRlciAocGVyIHZlcmlmaWVkIGVtYWlsLCBvciBwZXIgY2xpZW50IElQKSBpcyBhdCB0aGVcbiAgICogIHJvbGxpbmcgMjQtaG91ciBzdWJtaXNzaW9uIGNhcC4gKi9cbiAgU1VCTUlTU0lPTl9MSU1JVCA9ICdTVUJNSVNTSU9OX0xJTUlUJyxcblxuICAvLyBQYXlsb2FkIGVycm9ycyAoNDEzKVxuICBQQVlMT0FEX1RPT19MQVJHRSA9ICdQQVlMT0FEX1RPT19MQVJHRScsXG5cbiAgLy8gQ29uZmxpY3QgZXJyb3JzICg0MDkpXG4gIENPTkZMSUNUID0gJ0NPTkZMSUNUJyxcbiAgRFVQTElDQVRFX0VOVFJZID0gJ0RVUExJQ0FURV9FTlRSWScsXG4gIFNDQU5fQ09ORkxJQ1QgPSAnU0NBTl9DT05GTElDVCcsXG4gIC8qKiBBIHBsdWdpbiBpbWFnZSdzIGNvc2lnbiBzaWduYXR1cmUgKG9yIGl0cyBzaWduZWQgU0JPTSBhdHRlc3RhdGlvbikgZGlkXG4gICAqICBub3QgdmVyaWZ5IGFnYWluc3QgdGhlIHBsYXRmb3JtJ3MgcGx1Z2luLXNpZ25pbmcga2V5IOKAlCB0aGUgcmVnaXN0cnlcbiAgICogIGNvbnRlbnQgbm8gbG9uZ2VyIG1hdGNoZXMgd2hhdCB0aGUgcGxhdGZvcm0gYnVpbHQgYW5kIHNpZ25lZC4gKi9cbiAgSU1BR0VfVkVSSUZJQ0FUSU9OX0ZBSUxFRCA9ICdJTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEJyxcbiAgLyoqIFRoZSBwbHVnaW4gdmVyc2lvbiBpcyBpbW11dGFibGUg4oCUIGEgcHVibGlzaCByZXF1ZXN0IHJlZmVyZW5jZXMgaXRcbiAgICogIChgZnJvemVuX2F0YCBzZXQpIG9yIGl0IGlzIHB1Ymxpc2hlZCB0byBhIGxpc3Rpbmcg4oCUIHNvIGl0IGNhbiBiZSBuZWl0aGVyXG4gICAqICByZS11cGxvYWRlZCwgZWRpdGVkIG5vciBkZWxldGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gKi9cbiAgUExVR0lOX1ZFUlNJT05fRlJPWkVOID0gJ1BMVUdJTl9WRVJTSU9OX0ZST1pFTicsXG4gIC8qKiBUaGUgcGx1Z2luIHZlcnNpb24gaXMgcmVmZXJlbmNlZCBieSBvbmUgb2YgdGhlIG9yZydzIHBpcGVsaW5lcywgb3IgcHVibGlzaGVkXG4gICAqICB0byBhbiBlY29zeXN0ZW0gbGlzdGluZzsgZGVsZXRpbmcgaXQgbmVlZHMgYD9mb3JjZT10cnVlYCBwbHVzIGEgc3RlcC11cC4gKi9cbiAgUExVR0lOX1ZFUlNJT05fSU5fVVNFID0gJ1BMVUdJTl9WRVJTSU9OX0lOX1VTRScsXG4gIC8qKiBBIGZyZWV6ZSBuYW1lZCBhbiBpbWFnZSBkaWdlc3QgdGhhdCBpcyBub3QgdGhlIHZlcnNpb24ncyBzdG9yZWQgZGlnZXN0XG4gICAqICAoZmFpbCBjbG9zZWQ6IHdoYXQgd2FzIHJlcXVlc3RlZCBpcyBub3Qgd2hhdCB3b3VsZCBiZSBwdWJsaXNoZWQpLiAqL1xuICBQTFVHSU5fRElHRVNUX01JU01BVENIID0gJ1BMVUdJTl9ESUdFU1RfTUlTTUFUQ0gnLFxuICAvKiogQSByZS11cGxvYWQgb2YgYW4gZXhpc3RpbmcgKG5hbWUsIHZlcnNpb24pIG9mIGEgbWFuYWdlZCB0b29sY2hhaW4gbmFtZTpcbiAgICogIGEgcmVsZWFzZSBpcyBpbW11dGFibGUg4oCUIGJ1aWxkIGEgbmV3IHZlcnNpb24gaW5zdGVhZC4gKi9cbiAgUExVR0lOX1ZFUlNJT05fSU1NVVRBQkxFID0gJ1BMVUdJTl9WRVJTSU9OX0lNTVVUQUJMRScsXG4gIC8qKiBBIHB1Ymxpc2ggcmVxdWVzdCBuZWVkcyB0aGUgb3JnJ3MgcHVibGlzaGVyIHByb2ZpbGUsIHdoaWNoIGRvZXNuJ3QgZXhpc3RcbiAgICogIHlldCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuIENsYWltIGEgaGFuZGxlIGZpcnN0LiAqL1xuICBQVUJMSVNIRVJfUkVRVUlSRUQgPSAnUFVCTElTSEVSX1JFUVVJUkVEJyxcbiAgLyoqIFRoZSByZXF1ZXN0ZWQgcHVibGlzaGVyIGhhbmRsZSBpcyByZXNlcnZlZCAoT2ZmaWNpYWwvVmVyaWZpZWRcbiAgICogIHJlc2VydmF0aW9ucywgY29uZnVzYWJsZXMpLiBTdWJtaXQgYSBgY2xhaW1gIHJlcXVlc3QgaW5zdGVhZC4gKi9cbiAgUFVCTElTSEVSX0hBTkRMRV9SRVNFUlZFRCA9ICdQVUJMSVNIRVJfSEFORExFX1JFU0VSVkVEJyxcbiAgLyoqIEEgcHVibGlzaCByZXF1ZXN0IGZhaWxlZCBhIHN1Ym1pdCBnYXRlIChwdWJsaWMgdmlzaWJpbGl0eSwgU1BEWCBsaWNlbnNlLFxuICAgKiAgUkVBRE1FLCBzaWduYXR1cmUsIHNjYW4sIHZ1bG5lcmFiaWxpdHkgZ2F0ZSDigKYpOyBgZGV0YWlscy5nYXRlc2AgbGlzdHMgdGhlbS4gKi9cbiAgUFVCTElTSF9HQVRFX0ZBSUxFRCA9ICdQVUJMSVNIX0dBVEVfRkFJTEVEJyxcbiAgLyoqIEEgVmVyaWZpZWQtcHVibGlzaGVyIGFwcGxpY2F0aW9uIChvciBpdHMgZGVjaXNpb24pIGZyb20gYW4gb3JnIHdob3NlIHBsYW5cbiAgICogIGxhY2tzIHRoZSBgdmVyaWZpZWRfcHVibGlzaGVyYCBmZWF0dXJlIChUZWFtKywgZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIFZFUklGSUVEX1BMQU5fUkVRVUlSRUQgPSAnVkVSSUZJRURfUExBTl9SRVFVSVJFRCcsXG4gIC8qKiBBIFZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBmcm9tIGFuIG9yZyB3aXRoIG5vIEROUy12ZXJpZmllZCBkb21haW4uICovXG4gIFZFUklGSUVEX0RPTUFJTl9SRVFVSVJFRCA9ICdWRVJJRklFRF9ET01BSU5fUkVRVUlSRUQnLFxuICAvKiogQSBWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gZnJvbSBhbiBvcmcgd2hvc2Ugb3duZXIgaGFzIG5vIHNlY29uZFxuICAgKiAgZmFjdG9yIChwYXNza2V5IG9yIGF1dGhlbnRpY2F0b3IgYXBwKS4gKi9cbiAgVkVSSUZJRURfT1dORVJfTUZBX1JFUVVJUkVEID0gJ1ZFUklGSUVEX09XTkVSX01GQV9SRVFVSVJFRCcsXG4gIC8qKiBBIHBsdWdpbiByZWZlcmVuY2UgbmFtZXMgYW4gZWNvc3lzdGVtIGxpc3RpbmcgdGhlIG9yZyBoYXNuJ3QgaW5zdGFsbGVkIChvclxuICAgKiAgd2hvc2UgaW5zdGFsbCBpcyBwZW5kaW5nLCBkZW5pZWQsIG9yIGRvZXNuJ3QgY292ZXIgdGhlIHZlcnNpb24gYXNrZWQgZm9yO1xuICAgKiAgYGRldGFpbHMucmVhc29uYCkg4oCUIGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQgKi9cbiAgUExVR0lOX05PVF9JTlNUQUxMRUQgPSAnUExVR0lOX05PVF9JTlNUQUxMRUQnLFxuICAvKiogVGhlIG9yZydzIGNvbnN1bXB0aW9uIHBvbGljeSByZWZ1c2VzIHRoZSBsaXN0aW5nOiBpdHMgdGllciBpc24ndCBhbGxvd2VkLFxuICAgKiAgdGhlIGxpc3RpbmcgaXMgYmxvY2tlZCwgb3IgYW4gYWR2aXNvcnkgYmxvY2tzIHRoZSB2ZXJzaW9uIChgZGV0YWlscy5yZWFzb25gKS4gKi9cbiAgUExVR0lOX0JMT0NLRURfQllfUE9MSUNZID0gJ1BMVUdJTl9CTE9DS0VEX0JZX1BPTElDWScsXG4gIC8qKiBUaGUgbGlzdGluZyBvciB2ZXJzaW9uIGNhbid0IGJlIHVzZWQ6IHlhbmtlZCwgc3VzcGVuZGVkLCBvciBwYXVzZWQgZm9yIG5ld1xuICAgKiAgaW5zdGFsbHMgKGBkZXRhaWxzLnJlYXNvbmApLiAqL1xuICBQTFVHSU5fVU5BVkFJTEFCTEUgPSAnUExVR0lOX1VOQVZBSUxBQkxFJyxcbiAgLyoqIEFuIGF1dG8tY3JlYXRlZCBwbGFjZWhvbGRlciBwbHVnaW4gY2FuJ3QgdGFrZSB0aGUgbmFtZSBvZiBhIGxpc3RlZCBwbHVnaW5cbiAgICog4oCUIGluc3RhbGwgdGhlIGxpc3RpbmcgaW5zdGVhZC4gKi9cbiAgUExVR0lOX05BTUVfTElTVEVEID0gJ1BMVUdJTl9OQU1FX0xJU1RFRCcsXG4gIC8qKiBBbiBhbm9ueW1vdXMgc3VibWlzc2lvbiBuYW1lcyBhIGNvbW11bml0eSBsaXN0aW5nIGFub3RoZXIgc3VibWl0dGVyIG93bnMsXG4gICAqICBhIHJlc2VydmVkIG5hbWUsIGFuIE9mZmljaWFsL1ZlcmlmaWVkIGxpc3RpbmcncyBuYW1lLCBvciBvbmUgY29uZnVzYWJsZVxuICAgKiAgd2l0aCBhIHRvcCBsaXN0aW5nOyBgZGV0YWlscy5yZWFzb25gIHNheXMgd2hpY2guICovXG4gIE5BTUVfVEFLRU4gPSAnTkFNRV9UQUtFTicsXG4gIC8qKiBBbiBVTlFVQUxJRklFRCByZWZlcmVuY2UgbmFtZXMgYSBwbHVnaW4gdGhlIG9yZyBERUxFVEVEOiByZWZ1c2VkIHJhdGhlclxuICAgKiAgdGhhbiBzaWxlbnRseSBmYWxsaW5nIHRocm91Z2ggdG8gYSBzYW1lLW5hbWVkIGxpc3RpbmcsIHdoaWNoIHdvdWxkIHN3YXAgdGhlXG4gICAqICBpbWFnZSBhIHBpcGVsaW5lIHJ1bnMgd2l0aG91dCBhbnlvbmUgY2hvb3NpbmcgaXQgKGBkZXRhaWxzLnN0YXRlOiAnZGVsZXRlZCdgKS4gKi9cbiAgUExVR0lOX0RFTEVURUQgPSAnUExVR0lOX0RFTEVURUQnLFxuXG4gIC8vIFBsdWdpbiBidWlsZCBvdXRjb21lcyAoNDIyKSDigJQgdGVybWluYWwgYnVpbGQgZmFpbHVyZXMsIHJlcG9ydGVkIG9uIHRoZSBidWlsZFxuICAvLyBzdHJlYW0gYW5kIGluIHRoZSBidWlsZCdzIGZhaWx1cmUgcmVjb3JkLCBuZXZlciBhbnN3ZXJlZCBvbiBhIHJlcXVlc3QuXG4gIC8qKiBUaGUgYnVpbHQgaW1hZ2UgY291bGQgbm90IGJlIHZ1bG5lcmFiaWxpdHktc2Nhbm5lZCBhZnRlciBldmVyeSByZXRyeSwgc29cbiAgICogIG5vdGhpbmcgd2FzIHBlcnNpc3RlZCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuICovXG4gIElNQUdFX1NDQU5fVU5BVkFJTEFCTEUgPSAnSU1BR0VfU0NBTl9VTkFWQUlMQUJMRScsXG4gIC8qKiBUaGUgYnVpbHQgaW1hZ2UgaGFzIG1vcmUgZml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncyB0aGFuIHRoZSBwbGF0Zm9ybVxuICAgKiAgZmxvb3IgYFBMVUdJTl9WVUxOX01BWF9GSU5ESU5HU2A7IHRoZSBtZXNzYWdlIGxpc3RzIHRoZW0gd2l0aCB0aGVpciBmaXhlcy4gKi9cbiAgUExVR0lOX1ZVTE5fR0FURSA9ICdQTFVHSU5fVlVMTl9HQVRFJyxcbiAgLyoqIEFuIHVwbG9hZCB3aG9zZSBOQU1FIHdvdWxkIG92ZXJyaWRlIGEgbGlzdGluZyBvciB0aGUgcGFyZW50IG9yZydzIHBsdWdpbixcbiAgICogIHJlZnVzZWQgYmVjYXVzZSB0aGUgY29uc3VtcHRpb24gcG9saWN5IHNheXMgYHNoYWRvd2luZzogZGVueWAuICovXG4gIFBMVUdJTl9OQU1FX1NIQURPV1MgPSAnUExVR0lOX05BTUVfU0hBRE9XUycsXG5cbiAgLy8gQmlsbGluZyBlcnJvcnNcbiAgUEFZTUVOVF9NRVRIT0RfUkVRVUlSRUQgPSAnUEFZTUVOVF9NRVRIT0RfUkVRVUlSRUQnLCAvLyA0MDJcbiAgRElTQ09VTlRfQ0VJTElOR19FWENFRURFRCA9ICdESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEJywgLy8gNDAwXG4gIERJU0NPVU5UX05PVF9GT1VORCA9ICdESVNDT1VOVF9OT1RfRk9VTkQnLCAvLyA0MDRcbiAgRElTQ09VTlRfSU5BQ1RJVkUgPSAnRElTQ09VTlRfSU5BQ1RJVkUnLCAvLyA0MDlcbiAgUExBTl9PVkVSX0NBUCA9ICdQTEFOX09WRVJfQ0FQJywgLy8gNDA5XG4gIEFERE9OX09WRVJfQ0FQID0gJ0FERE9OX09WRVJfQ0FQJywgLy8gNDA5XG5cbiAgLy8gU2VydmVyIGVycm9ycyAoNTAwKVxuICBJTlRFUk5BTF9FUlJPUiA9ICdJTlRFUk5BTF9FUlJPUicsXG4gIERBVEFCQVNFX0VSUk9SID0gJ0RBVEFCQVNFX0VSUk9SJyxcblxuICAvLyBOb3QgaW1wbGVtZW50ZWQgKDUwMSkg4oCUIHRoZSBjb25maWd1cmVkIHByb3ZpZGVyIGhhcyBubyBzdWNoIGNhcGFiaWxpdHlcbiAgTk9UX0lNUExFTUVOVEVEID0gJ05PVF9JTVBMRU1FTlRFRCcsXG5cbiAgLy8gU2VydmljZSB1bmF2YWlsYWJsZSAoNTAzKVxuICBTRVJWSUNFX1VOQVZBSUxBQkxFID0gJ1NFUlZJQ0VfVU5BVkFJTEFCTEUnLFxuICBDT01QTElBTkNFX1NFUlZJQ0VfVU5BVkFJTEFCTEUgPSAnQ09NUExJQU5DRV9TRVJWSUNFX1VOQVZBSUxBQkxFJyxcbn1cblxuLyoqXG4gKiBNYXBzIGVycm9yIGNvZGVzIHRvIHRoZWlyIGRlZmF1bHQgSFRUUCBzdGF0dXMgY29kZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBFcnJvckNvZGVTdGF0dXM6IFJlY29yZDxFcnJvckNvZGUsIG51bWJlcj4gPSB7XG4gIFtFcnJvckNvZGUuVU5BVVRIT1JJWkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX0VYUElSRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuVE9LRU5fSU5WQUxJRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5UT0tFTl9NSVNTSU5HXTogNDAxLFxuICBbRXJyb3JDb2RlLlRPS0VOX1JFVk9LRURdOiA0MDEsXG4gIFtFcnJvckNvZGUuTUZBX1JFUVVJUkVEXTogNDAxLFxuICBbRXJyb3JDb2RlLlJFQVVUSF9SRVFVSVJFRF06IDQwMSxcbiAgW0Vycm9yQ29kZS5JTlNVRkZJQ0lFTlRfUEVSTUlTU0lPTlNdOiA0MDMsXG4gIFtFcnJvckNvZGUuU1lTVEVNX09SR19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTUFOQUdFRF9OQU1FX1JFU0VSVkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9URVJNU19SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QVUJMSVNIRVJfUk9PVF9PUkdfUkVRVUlSRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1NVU1BFTkRFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUFVCTElTSElOR19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5BSV9ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fUkVWSUVXU19ESVNBQkxFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5SRVZJRVdfU0VMRl9QUk9NT1RJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuU0VQQVJBVElPTl9PRl9EVVRJRVNdOiA0MDMsXG4gIFtFcnJvckNvZGUuSFVNQU5fU0VTU0lPTl9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5NRkFfRU5ST0xMTUVOVF9SRVFVSVJFRF06IDQwMyxcbiAgW0Vycm9yQ29kZS5JTVBFUlNPTkFUSU9OX1JFQURfT05MWV06IDQwMyxcbiAgW0Vycm9yQ29kZS5PUkdfTUlTTUFUQ0hdOiA0MDMsXG4gIFtFcnJvckNvZGUuQ09NUExJQU5DRV9WSU9MQVRJT05dOiA0MDMsXG4gIFtFcnJvckNvZGUuTk9UX0ZPVU5EXTogNDA0LFxuICBbRXJyb3JDb2RlLk9SR19OT1RfRk9VTkRdOiA0MDQsXG4gIFtFcnJvckNvZGUuVVNFUl9OT1RfUkVHSVNURVJFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5TVUJNSVNTSU9OU19ESVNBQkxFRF06IDQwNCxcbiAgW0Vycm9yQ29kZS5WQUxJREFUSU9OX0VSUk9SXTogNDAwLFxuICBbRXJyb3JDb2RlLk1JU1NJTkdfUkVRVUlSRURfRklFTERdOiA0MDAsXG4gIFtFcnJvckNvZGUuUFJPT0ZfT0ZfV09SS19JTlZBTElEXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1VOS05PV05fUEFUSF06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9DWUNMRV06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9QQVJTRV9FUlJPUl06IDQwMCxcbiAgW0Vycm9yQ29kZS5URU1QTEFURV9UWVBFX01JU01BVENIXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NFQ1JFVFNfUkVTRVJWRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OXTogNDAwLFxuICBbRXJyb3JDb2RlLlRFTVBMQVRFX1NJWkVfRVhDRUVERURdOiA0MDAsXG4gIFtFcnJvckNvZGUuVEVNUExBVEVfVkFMSURBVElPTl9GQUlMRURdOiA0MDAsXG4gIFtFcnJvckNvZGUuUExVR0lOX01BTkFHRURfTk9UX0xJU1RBQkxFXTogNDAwLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9NQU5BR0VEX1BSRVJFTEVBU0VdOiA0MDAsXG4gIFtFcnJvckNvZGUuVE9PTENIQUlOX1VTRV9DT05TT0xFXTogNDAwLFxuICBbRXJyb3JDb2RlLlRPT0xDSEFJTl9SRUxFQVNFX05PVF9FTElHSUJMRV06IDQwMCxcbiAgW0Vycm9yQ29kZS5UT09MQ0hBSU5fUElOX1ZJQV9SRUxFQVNFXTogNDAwLFxuICBbRXJyb3JDb2RlLlRPT0xDSEFJTl9OT19ERUZBVUxUXTogNDA5LFxuICBbRXJyb3JDb2RlLlRPT0xDSEFJTl9ERUZBVUxUX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlRPT0xDSEFJTl9ERUZBVUxUX0NIQU5HRURdOiA0MDksXG4gIFtFcnJvckNvZGUuVE9PTENIQUlOX0lOSVRJQUxfQUxSRUFEWV9TRVRdOiA0MDksXG4gIFtFcnJvckNvZGUuVE9PTENIQUlOX0dVQVJEX1VOU0NBTk5FRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5UT09MQ0hBSU5fR1VBUkRfVlVMTl9GTE9PUl06IDQwOSxcbiAgW0Vycm9yQ29kZS5UT09MQ0hBSU5fR1VBUkRfTUVUQURBVEFdOiA0MDksXG4gIFtFcnJvckNvZGUuVE9PTENIQUlOX0dVQVJEX1BBSVJfSU5DT01QTEVURV06IDQwOSxcbiAgW0Vycm9yQ29kZS5UT09MQ0hBSU5fR1VBUkRfQ0FOQVJZX0dBVEVdOiA0MDksXG4gIFtFcnJvckNvZGUuVE9PTENIQUlOX1BBSVJfTUlTTUFUQ0hdOiA1MDAsXG4gIC8vIEJPT1RTVFJBUF9JTUFHRV9VTlJFU09MVkVEIGlzIHJhaXNlZCBieSB0aGUgQ0xJLCBuZXZlciBzZW50IGJ5IGEgc2VydmljZS5cbiAgW0Vycm9yQ29kZS5CT09UU1RSQVBfSU1BR0VfVU5SRVNPTFZFRF06IDUwMCxcbiAgW0Vycm9yQ29kZS5DTElFTlRfVVBHUkFERV9SRVFVSVJFRF06IDQyNixcbiAgW0Vycm9yQ29kZS5RVU9UQV9FWENFRURFRF06IDQyOSxcbiAgW0Vycm9yQ29kZS5BSV9NRU1CRVJfU0hBUkVfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuQUlfVE9LRU5fQlVER0VUX0VYQ0VFREVEXTogNDI5LFxuICBbRXJyb3JDb2RlLlJBVEVfTElNSVRfRVhDRUVERURdOiA0MjksXG4gIFtFcnJvckNvZGUuU1VCTUlTU0lPTl9MSU1JVF06IDQyOSxcbiAgW0Vycm9yQ29kZS5QQVlMT0FEX1RPT19MQVJHRV06IDQxMyxcbiAgW0Vycm9yQ29kZS5DT05GTElDVF06IDQwOSxcbiAgW0Vycm9yQ29kZS5EVVBMSUNBVEVfRU5UUlldOiA0MDksXG4gIFtFcnJvckNvZGUuU0NBTl9DT05GTElDVF06IDQwOSxcbiAgW0Vycm9yQ29kZS5JTUFHRV9WRVJJRklDQVRJT05fRkFJTEVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WRVJTSU9OX0ZST1pFTl06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVkVSU0lPTl9JTl9VU0VdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX0RJR0VTVF9NSVNNQVRDSF06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fVkVSU0lPTl9JTU1VVEFCTEVdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSEVSX1JFUVVJUkVEXTogNDA5LFxuICBbRXJyb3JDb2RlLlBVQkxJU0hFUl9IQU5ETEVfUkVTRVJWRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUFVCTElTSF9HQVRFX0ZBSUxFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9QTEFOX1JFUVVJUkVEXTogNDAzLFxuICBbRXJyb3JDb2RlLlZFUklGSUVEX0RPTUFJTl9SRVFVSVJFRF06IDQwOSxcbiAgW0Vycm9yQ29kZS5WRVJJRklFRF9PV05FUl9NRkFfUkVRVUlSRURdOiA0MDksXG4gIFtFcnJvckNvZGUuUExVR0lOX05PVF9JTlNUQUxMRURdOiA0MDMsXG4gIFtFcnJvckNvZGUuUExVR0lOX0JMT0NLRURfQllfUE9MSUNZXTogNDAzLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9VTkFWQUlMQUJMRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fTkFNRV9MSVNURURdOiA0MDksXG4gIFtFcnJvckNvZGUuTkFNRV9UQUtFTl06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTFVHSU5fREVMRVRFRF06IDQxMCxcbiAgW0Vycm9yQ29kZS5JTUFHRV9TQ0FOX1VOQVZBSUxBQkxFXTogNDIyLFxuICBbRXJyb3JDb2RlLlBMVUdJTl9WVUxOX0dBVEVdOiA0MjIsXG4gIFtFcnJvckNvZGUuUExVR0lOX05BTUVfU0hBRE9XU106IDQwOSxcbiAgW0Vycm9yQ29kZS5QQVlNRU5UX01FVEhPRF9SRVFVSVJFRF06IDQwMixcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9DRUlMSU5HX0VYQ0VFREVEXTogNDAwLFxuICBbRXJyb3JDb2RlLkRJU0NPVU5UX05PVF9GT1VORF06IDQwNCxcbiAgW0Vycm9yQ29kZS5ESVNDT1VOVF9JTkFDVElWRV06IDQwOSxcbiAgW0Vycm9yQ29kZS5QTEFOX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLkFERE9OX09WRVJfQ0FQXTogNDA5LFxuICBbRXJyb3JDb2RlLklOVEVSTkFMX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLkRBVEFCQVNFX0VSUk9SXTogNTAwLFxuICBbRXJyb3JDb2RlLk5PVF9JTVBMRU1FTlRFRF06IDUwMSxcbiAgW0Vycm9yQ29kZS5TRVJWSUNFX1VOQVZBSUxBQkxFXTogNTAzLFxuICBbRXJyb3JDb2RlLkNPTVBMSUFOQ0VfU0VSVklDRV9VTkFWQUlMQUJMRV06IDUwMyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBIVFRQIHN0YXR1cyBjb2RlIGZvciBhbiBlcnJvciBjb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdHVzRm9yRXJyb3JDb2RlKGNvZGU6IEVycm9yQ29kZSk6IG51bWJlciB7XG4gIHJldHVybiBFcnJvckNvZGVTdGF0dXNbY29kZV0gPz8gNTAwO1xufVxuIl19
@@ -7,16 +7,22 @@ import type { QuotaTier } from './quota-tiers.js';
7
7
  * response times" while no support product existed to be faster. Mutually
8
8
  * exclusive: an account holds at most one (enforced in `effectiveEntitlements`).
9
9
  *
10
- * Its own type, and spelled ONCE — `FeatureFlag` includes it rather than listing
11
- * the three names again. A surface that must name EVERY level keys a
10
+ * Its own type, and spelled ONCE — `FEATURE_FLAGS` spreads it rather than
11
+ * listing the three names again. A surface that must name EVERY level keys a
12
12
  * `Record<SupportFeatureFlag, …>` off it (the frontend's level labels were a
13
13
  * `Record<string, string>` that happened to carry three entries, so a fourth
14
14
  * level would have rendered as the raw flag id), while the ladder list below
15
15
  * stays `FeatureFlag[]` so it can be tested against the full catalog.
16
16
  */
17
- export type SupportFeatureFlag = 'support_standard' | 'support_priority' | 'support_premium';
17
+ declare const SUPPORT_LEVELS: readonly ['support_standard', 'support_priority', 'support_premium'];
18
+ export type SupportFeatureFlag = typeof SUPPORT_LEVELS[number];
19
+ /**
20
+ * Every feature flag, in display order. The {@link FeatureFlag} union is derived
21
+ * from this list, so a flag is added in exactly one place.
22
+ */
23
+ declare const FEATURE_FLAGS: readonly ["ai_generation", "bulk_operations", "custom_integrations", "sso", "advanced_reporting", "team_usage_analytics", "compliance_standard", "compliance_advanced", "stakeholder_reports", "verified_publisher", "support_standard", "support_priority", "support_premium"];
18
24
  /** Canonical feature flag identifiers. */
19
- export type FeatureFlag = 'custom_integrations' | SupportFeatureFlag | 'ai_generation' | 'bulk_operations' | 'sso' | 'advanced_reporting' | 'team_usage_analytics' | 'compliance_standard' | 'compliance_advanced' | 'stakeholder_reports' | 'verified_publisher';
25
+ export type FeatureFlag = typeof FEATURE_FLAGS[number];
20
26
  /** All valid feature flags (order determines display order). */
21
27
  export declare const ALL_FEATURE_FLAGS: readonly FeatureFlag[];
22
28
  /**
@@ -140,3 +146,4 @@ export declare function complianceSetsForFeatures(features: readonly string[]):
140
146
  * several. Accepts a raw jsonb `tags` value.
141
147
  */
142
148
  export declare function complianceFeatureForTags(tags: unknown): FeatureFlag | null;
149
+ export {};
@@ -1,21 +1,65 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- /** All valid feature flags (order determines display order). */
4
- export const ALL_FEATURE_FLAGS = [
3
+ // Feature flag identifiers
4
+ /**
5
+ * Support level, one per response-time rung. Sold ONLY as per-contact add-on
6
+ * bundles and included in NO tier — not even enterprise, which is why
7
+ * `TIER_FEATURES` cannot simply spread `ALL_FEATURE_FLAGS` for it any more.
8
+ * These REPLACE the former `priority_support` tier perk, which marketed "faster
9
+ * response times" while no support product existed to be faster. Mutually
10
+ * exclusive: an account holds at most one (enforced in `effectiveEntitlements`).
11
+ *
12
+ * Its own type, and spelled ONCE — `FEATURE_FLAGS` spreads it rather than
13
+ * listing the three names again. A surface that must name EVERY level keys a
14
+ * `Record<SupportFeatureFlag, …>` off it (the frontend's level labels were a
15
+ * `Record<string, string>` that happened to carry three entries, so a fourth
16
+ * level would have rendered as the raw flag id), while the ladder list below
17
+ * stays `FeatureFlag[]` so it can be tested against the full catalog.
18
+ */
19
+ const SUPPORT_LEVELS = ['support_standard', 'support_priority', 'support_premium'];
20
+ /**
21
+ * Every feature flag, in display order. The {@link FeatureFlag} union is derived
22
+ * from this list, so a flag is added in exactly one place.
23
+ */
24
+ const FEATURE_FLAGS = [
5
25
  'ai_generation',
6
26
  'bulk_operations',
27
+ // `custom_integrations` is an ENTERPRISE-EXCLUSIVE marketing/entitlement flag:
28
+ // granted only by the enterprise tier (no add-on bundle sells it to a lower
29
+ // tier — intentional, it anchors the Enterprise plan) and not currently
30
+ // `requireFeature`-gated on any route. This is by design, not dead code — do
31
+ // not "fix" by wiring a bundle without a pricing decision. Contrast
32
+ // `sso`/`advanced_reporting`, which ARE sold as add-on bundles and gated (see
33
+ // billing-config `loadBundles` + `requireFeature`).
7
34
  'custom_integrations',
8
35
  'sso',
36
+ // DORA / advanced delivery analytics (paid tiers only).
9
37
  'advanced_reporting',
38
+ // Per-team usage breakdown across the org→team subtree. INCLUDED in Enterprise;
39
+ // sold as an add-on bundle to Pro/Team (see billing-config `team_usage_analytics`).
10
40
  'team_usage_analytics',
41
+ // Curated compliance rule libraries sold as add-on bundles. `compliance_standard`
42
+ // = CI/CD best-practice set; `compliance_advanced` = SOC2/PCI/CIS framework
43
+ // libraries (requires Standard). These gate SUBSCRIBING to the set's system-org
44
+ // published rules; INCLUDED in Enterprise/Unlimited (via ALL_FEATURE_FLAGS),
45
+ // sold to Developer/Pro/Team (see billing-config `compliance_standard/advanced`).
11
46
  'compliance_standard',
12
47
  'compliance_advanced',
48
+ // Scheduled, manager-facing reports: saved definitions, frozen snapshots,
49
+ // review-and-publish, PDF/email delivery and share links. INCLUDED in
50
+ // Enterprise/Unlimited; sold as an add-on bundle to Pro/Team (see
51
+ // billing-config `stakeholder_reports`). On-demand dashboards stay FREE under
52
+ // `reports:read` — this gates saving, scheduling and publishing, not looking.
13
53
  'stakeholder_reports',
54
+ // Plugin ecosystem: the org's publisher is ELIGIBLE to apply for Verified
55
+ // status (docs/plugin-publishing.md). Eligibility only — the badge
56
+ // is awarded (and withdrawn) by system-org review, never bought. Team and up;
57
+ // no add-on bundle sells it.
14
58
  'verified_publisher',
15
- 'support_standard',
16
- 'support_priority',
17
- 'support_premium',
59
+ ...SUPPORT_LEVELS,
18
60
  ];
61
+ /** All valid feature flags (order determines display order). */
62
+ export const ALL_FEATURE_FLAGS = FEATURE_FLAGS;
19
63
  /**
20
64
  * The support-level flags, which are add-on-ONLY at every tier.
21
65
  *
@@ -24,11 +68,7 @@ export const ALL_FEATURE_FLAGS = [
24
68
  * silently grant enterprise the support product it is supposed to buy, which is
25
69
  * exactly the "included in no tier" decision it would break.
26
70
  */
27
- export const SUPPORT_FEATURE_FLAGS = [
28
- 'support_standard',
29
- 'support_priority',
30
- 'support_premium',
31
- ];
71
+ export const SUPPORT_FEATURE_FLAGS = SUPPORT_LEVELS;
32
72
  /**
33
73
  * The FIRST-RESPONSE TARGET sold at each support level — the canonical wording.
34
74
  *
@@ -285,4 +325,4 @@ export function complianceFeatureForTags(tags) {
285
325
  }
286
326
  return null;
287
327
  }
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2ZlYXR1cmUtZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTZEdEMsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUEyQjtJQUN2RCxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLHFCQUFxQjtJQUNyQixLQUFLO0lBQ0wsb0JBQW9CO0lBQ3BCLHNCQUFzQjtJQUN0QixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixpQkFBaUI7Q0FDbEIsQ0FBQztBQUVGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBMkI7SUFDM0Qsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixpQkFBaUI7Q0FDbEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXFDO0lBQ3hFLGdCQUFnQixFQUFFLGlCQUFpQjtJQUNuQyxnQkFBZ0IsRUFBRSxtQkFBbUI7SUFDckMsZUFBZSxFQUFFLGtCQUFrQjtDQUNwQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBMkIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRWxGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLFNBQWlCLEVBQ2pCLEtBQW9CO0lBRXBCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNoRyxJQUFLLHNCQUE0QyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENB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R0FBRyxJQUFJLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFBRSxPQUFPLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBRdW90YVRpZXIgfSBmcm9tICcuL3F1b3RhLXRpZXJzLmpzJztcblxuLy8gRmVhdHVyZSBmbGFnIGlkZW50aWZpZXJzXG5cbi8qKlxuICogU3VwcG9ydCBsZXZlbCwgb25lIHBlciByZXNwb25zZS10aW1lIHJ1bmcuIFNvbGQgT05MWSBhcyBwZXItY29udGFjdCBhZGQtb25cbiAqIGJ1bmRsZXMgYW5kIGluY2x1ZGVkIGluIE5PIHRpZXIg4oCUIG5vdCBldmVuIGVudGVycHJpc2UsIHdoaWNoIGlzIHdoeVxuICogYFRJRVJfRkVBVFVSRVNgIGNhbm5vdCBzaW1wbHkgc3ByZWFkIGBBTExfRkVBVFVSRV9GTEFHU2AgZm9yIGl0IGFueSBtb3JlLlxuICogVGhlc2UgUkVQTEFDRSB0aGUgZm9ybWVyIGBwcmlvcml0eV9zdXBwb3J0YCB0aWVyIHBlcmssIHdoaWNoIG1hcmtldGVkIFwiZmFzdGVyXG4gKiByZXNwb25zZSB0aW1lc1wiIHdoaWxlIG5vIHN1cHBvcnQgcHJvZHVjdCBleGlzdGVkIHRvIGJlIGZhc3Rlci4gTXV0dWFsbHlcbiAqIGV4Y2x1c2l2ZTogYW4gYWNjb3VudCBob2xkcyBhdCBtb3N0IG9uZSAoZW5mb3JjZWQgaW4gYGVmZmVjdGl2ZUVudGl0bGVtZW50c2ApLlxuICpcbiAqIEl0cyBvd24gdHlwZSwgYW5kIHNwZWxsZWQgT05DRSDigJQgYEZlYXR1cmVGbGFnYCBpbmNsdWRlcyBpdCByYXRoZXIgdGhhbiBsaXN0aW5nXG4gKiB0aGUgdGhyZWUgbmFtZXMgYWdhaW4uIEEgc3VyZmFjZSB0aGF0IG11c3QgbmFtZSBFVkVSWSBsZXZlbCBrZXlzIGFcbiAqIGBSZWNvcmQ8U3VwcG9ydEZlYXR1cmVGbGFnLCDigKY+YCBvZmYgaXQgKHRoZSBmcm9udGVuZCdzIGxldmVsIGxhYmVscyB3ZXJlIGFcbiAqIGBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+YCB0aGF0IGhhcHBlbmVkIHRvIGNhcnJ5IHRocmVlIGVudHJpZXMsIHNvIGEgZm91cnRoXG4gKiBsZXZlbCB3b3VsZCBoYXZlIHJlbmRlcmVkIGFzIHRoZSByYXcgZmxhZyBpZCksIHdoaWxlIHRoZSBsYWRkZXIgbGlzdCBiZWxvd1xuICogc3RheXMgYEZlYXR1cmVGbGFnW11gIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgYWdhaW5zdCB0aGUgZnVsbCBjYXRhbG9nLlxuICovXG5leHBvcnQgdHlwZSBTdXBwb3J0RmVhdHVyZUZsYWcgPSAnc3VwcG9ydF9zdGFuZGFyZCcgfCAnc3VwcG9ydF9wcmlvcml0eScgfCAnc3VwcG9ydF9wcmVtaXVtJztcblxuLyoqIENhbm9uaWNhbCBmZWF0dXJlIGZsYWcgaWRlbnRpZmllcnMuICovXG5leHBvcnQgdHlwZSBGZWF0dXJlRmxhZyA9XG4gIC8vIGBjdXN0b21faW50ZWdyYXRpb25zYCBpcyBhbiBFTlRFUlBSSVNFLUVYQ0xVU0lWRSBtYXJrZXRpbmcvZW50aXRsZW1lbnQgZmxhZzpcbiAgLy8gZ3JhbnRlZCBvbmx5IGJ5IHRoZSBlbnRlcnByaXNlIHRpZXIgKG5vIGFkZC1vbiBidW5kbGUgc2VsbHMgaXQgdG8gYSBsb3dlclxuICAvLyB0aWVyIOKAlCBpbnRlbnRpb25hbCwgaXQgYW5jaG9ycyB0aGUgRW50ZXJwcmlzZSBwbGFuKSBhbmQgbm90IGN1cnJlbnRseVxuICAvLyBgcmVxdWlyZUZlYXR1cmVgLWdhdGVkIG9uIGFueSByb3V0ZS4gVGhpcyBpcyBieSBkZXNpZ24sIG5vdCBkZWFkIGNvZGUg4oCUIGRvXG4gIC8vIG5vdCBcImZpeFwiIGJ5IHdpcmluZyBhIGJ1bmRsZSB3aXRob3V0IGEgcHJpY2luZyBkZWNpc2lvbi4gQ29udHJhc3RcbiAgLy8gYHNzb2AvYGFkdmFuY2VkX3JlcG9ydGluZ2AsIHdoaWNoIEFSRSBzb2xkIGFzIGFkZC1vbiBidW5kbGVzIGFuZCBnYXRlZCAoc2VlXG4gIC8vIGJpbGxpbmctY29uZmlnIGBsb2FkQnVuZGxlc2AgKyBgcmVxdWlyZUZlYXR1cmVgKS5cbiAgfCAnY3VzdG9tX2ludGVncmF0aW9ucydcbiAgfCBTdXBwb3J0RmVhdHVyZUZsYWdcbiAgfCAnYWlfZ2VuZXJhdGlvbidcbiAgfCAnYnVsa19vcGVyYXRpb25zJ1xuICB8ICdzc28nXG4gIC8vIERPUkEgLyBhZHZhbmNlZCBkZWxpdmVyeSBhbmFseXRpY3MgKHBhaWQgdGllcnMgb25seSkuXG4gIHwgJ2FkdmFuY2VkX3JlcG9ydGluZydcbiAgLy8gUGVyLXRlYW0gdXNhZ2UgYnJlYWtkb3duIGFjcm9zcyB0aGUgb3Jn4oaSdGVhbSBzdWJ0cmVlLiBJTkNMVURFRCBpbiBFbnRlcnByaXNlO1xuICAvLyBzb2xkIGFzIGFuIGFkZC1vbiBidW5kbGUgdG8gUHJvL1RlYW0gKHNlZSBiaWxsaW5nLWNvbmZpZyBgdGVhbV91c2FnZV9hbmFseXRpY3NgKS5cbiAgfCAndGVhbV91c2FnZV9hbmFseXRpY3MnXG4gIC8vIEN1cmF0ZWQgY29tcGxpYW5jZSBydWxlIGxpYnJhcmllcyBzb2xkIGFzIGFkZC1vbiBidW5kbGVzLiBgY29tcGxpYW5jZV9zdGFuZGFyZGBcbiAgLy8gPSBDSS9DRCBiZXN0LXByYWN0aWNlIHNldDsgYGNvbXBsaWFuY2VfYWR2YW5jZWRgID0gU09DMi9QQ0kvQ0lTIGZyYW1ld29ya1xuICAvLyBsaWJyYXJpZXMgKHJlcXVpcmVzIFN0YW5kYXJkKS4gVGhlc2UgZ2F0ZSBTVUJTQ1JJQklORyB0byB0aGUgc2V0J3Mgc3lzdGVtLW9yZ1xuICAvLyBwdWJsaXNoZWQgcnVsZXM7IElOQ0xVREVEIGluIEVudGVycHJpc2UvVW5saW1pdGVkICh2aWEgQUxMX0ZFQVRVUkVfRkxBR1MpLFxuICAvLyBzb2xkIHRvIERldmVsb3Blci9Qcm8vVGVhbSAoc2VlIGJpbGxpbmctY29uZmlnIGBjb21wbGlhbmNlX3N0YW5kYXJkL2FkdmFuY2VkYCkuXG4gIHwgJ2NvbXBsaWFuY2Vfc3RhbmRhcmQnXG4gIHwgJ2NvbXBsaWFuY2VfYWR2YW5jZWQnXG4gIC8vIFNjaGVkdWxlZCwgbWFuYWdlci1mYWNpbmcgcmVwb3J0czogc2F2ZWQgZGVmaW5pdGlvbnMsIGZyb3plbiBzbmFwc2hvdHMsXG4gIC8vIHJldmlldy1hbmQtcHVibGlzaCwgUERGL2VtYWlsIGRlbGl2ZXJ5IGFuZCBzaGFyZSBsaW5rcy4gSU5DTFVERUQgaW5cbiAgLy8gRW50ZXJwcmlzZS9VbmxpbWl0ZWQ7IHNvbGQgYXMgYW4gYWRkLW9uIGJ1bmRsZSB0byBQcm8vVGVhbSAoc2VlXG4gIC8vIGJpbGxpbmctY29uZmlnIGBzdGFrZWhvbGRlcl9yZXBvcnRzYCkuIE9uLWRlbWFuZCBkYXNoYm9hcmRzIHN0YXkgRlJFRSB1bmRlclxuICAvLyBgcmVwb3J0czpyZWFkYCDigJQgdGhpcyBnYXRlcyBzYXZpbmcsIHNjaGVkdWxpbmcgYW5kIHB1Ymxpc2hpbmcsIG5vdCBsb29raW5nLlxuICB8ICdzdGFrZWhvbGRlcl9yZXBvcnRzJ1xuICAvLyBQbHVnaW4gZWNvc3lzdGVtOiB0aGUgb3JnJ3MgcHVibGlzaGVyIGlzIEVMSUdJQkxFIHRvIGFwcGx5IGZvciBWZXJpZmllZFxuICAvLyBzdGF0dXMgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBFbGlnaWJpbGl0eSBvbmx5IOKAlCB0aGUgYmFkZ2VcbiAgLy8gaXMgYXdhcmRlZCAoYW5kIHdpdGhkcmF3bikgYnkgc3lzdGVtLW9yZyByZXZpZXcsIG5ldmVyIGJvdWdodC4gVGVhbSBhbmQgdXA7XG4gIC8vIG5vIGFkZC1vbiBidW5kbGUgc2VsbHMgaXQuXG4gIHwgJ3ZlcmlmaWVkX3B1Ymxpc2hlcic7XG5cbi8qKiBBbGwgdmFsaWQgZmVhdHVyZSBmbGFncyAob3JkZXIgZGV0ZXJtaW5lcyBkaXNwbGF5IG9yZGVyKS4gKi9cbmV4cG9ydCBjb25zdCBBTExfRkVBVFVSRV9GTEFHUzogcmVhZG9ubHkgRmVhdHVyZUZsYWdbXSA9IFtcbiAgJ2FpX2dlbmVyYXRpb24nLFxuICAnYnVsa19vcGVyYXRpb25zJyxcbiAgJ2N1c3RvbV9pbnRlZ3JhdGlvbnMnLFxuICAnc3NvJyxcbiAgJ2FkdmFuY2VkX3JlcG9ydGluZycsXG4gICd0ZWFtX3VzYWdlX2FuYWx5dGljcycsXG4gICdjb21wbGlhbmNlX3N0YW5kYXJkJyxcbiAgJ2NvbXBsaWFuY2VfYWR2YW5jZWQnLFxuICAnc3Rha2Vob2xkZXJfcmVwb3J0cycsXG4gICd2ZXJpZmllZF9wdWJsaXNoZXInLFxuICAnc3VwcG9ydF9zdGFuZGFyZCcsXG4gICdzdXBwb3J0X3ByaW9yaXR5JyxcbiAgJ3N1cHBvcnRfcHJlbWl1bScsXG5dO1xuXG4vKipcbiAqIFRoZSBzdXBwb3J0LWxldmVsIGZsYWdzLCB3aGljaCBhcmUgYWRkLW9uLU9OTFkgYXQgZXZlcnkgdGllci5cbiAqXG4gKiBOZWVkZWQgYXMgaXRzIG93biBsaXN0IGJlY2F1c2UgYFRJRVJfRkVBVFVSRVMuZW50ZXJwcmlzZWAgc3ByZWFkc1xuICogYEFMTF9GRUFUVVJFX0ZMQUdTYDogd2l0aG91dCBleGNsdWRpbmcgdGhlc2UsIGFkZGluZyBhIHN1cHBvcnQgZmxhZyB3b3VsZFxuICogc2lsZW50bHkgZ3JhbnQgZW50ZXJwcmlzZSB0aGUgc3VwcG9ydCBwcm9kdWN0IGl0IGlzIHN1cHBvc2VkIHRvIGJ1eSwgd2hpY2ggaXNcbiAqIGV4YWN0bHkgdGhlIFwiaW5jbHVkZWQgaW4gbm8gdGllclwiIGRlY2lzaW9uIGl0IHdvdWxkIGJyZWFrLlxuICovXG5leHBvcnQgY29uc3QgU1VQUE9SVF9GRUFUVVJFX0ZMQUdTOiByZWFkb25seSBGZWF0dXJlRmxhZ1tdID0gW1xuICAnc3VwcG9ydF9zdGFuZGFyZCcsXG4gICdzdXBwb3J0X3ByaW9yaXR5JyxcbiAgJ3N1cHBvcnRfcHJlbWl1bScsXG5dO1xuXG4vKipcbiAqIFRoZSBGSVJTVC1SRVNQT05TRSBUQVJHRVQgc29sZCBhdCBlYWNoIHN1cHBvcnQgbGV2ZWwg4oCUIHRoZSBjYW5vbmljYWwgd29yZGluZy5cbiAqXG4gKiBPbmUgcGxhY2UsIGJlY2F1c2UgdGhpcyBzdHJpbmcgaXMgYSBjb21taXRtZW50OiBpdCBpcyBzaG93biBvbiB0aGUgY2FzZSwgaW5cbiAqIHRoZSBhZGQtb24gY2F0YWxvZywgb24gdGhlIHByaWNpbmcgcGFnZSBhbmQgaW4gdGhlIGFsZXJ0IHRoYXQgZmlyZXMgd2hlbiB0aGVcbiAqIGRlc2sgbWlzc2VzIGl0LCBhbmQgdGhvc2UgZm91ciBtdXN0IG5ldmVyIGRpc2FncmVlLiBBIGxldmVsIGFic2VudCBmcm9tIHRoaXNcbiAqIG1hcCBoYXMgbm8gc3RhdGVkIHRhcmdldCBhbmQgY2FsbGVycyBtdXN0IG9taXQgdGhlIHBocmFzZSByYXRoZXIgdGhhbiBib3Jyb3dcbiAqIGFub3RoZXIgbGV2ZWwncyBwcm9taXNlLlxuICpcbiAqIFdIWSBUSEVTRSBVTklUUy4gQW4gZWFybGllciBsYWRkZXIgcmVhZCBcIjQ4IGJ1c2luZXNzIGhvdXJzIC8gMjQgYnVzaW5lc3NcbiAqIGhvdXJzIC8gbm8gc3RhdGVkIG51bWJlclwiLCB3aGljaCB3YXMgd3JvbmcgdHdpY2Ugb3Zlci4gVGhlIGJ1c2luZXNzLWhvdXJzXG4gKiB1bml0IGZsYXR0ZXJlZCB0aGUgdGFyZ2V0cyBieSByb3VnaGx5IHRocmVlIHRpbWVzIOKAlCA0OCBidXNpbmVzcyBob3VycyBpcyBzaXhcbiAqIHdvcmtpbmcgZGF5cywgc28gYSBjYXNlIHJhaXNlZCBvbiBhIEZyaWRheSBldmVuaW5nIGhhZCBpdHMgdGFyZ2V0IGV4cGlyZSB0aGVcbiAqICpmb2xsb3dpbmcgTW9uZGF5KiDigJQgYW5kIHRoZSB0b3AgbGV2ZWwsIHRoZSBvbmUgdGhhdCBjb3N0cyB0aGUgbW9zdCwgd2FzIHRoZVxuICogb25seSBvbmUgd2l0aCBubyBudW1iZXIgYXQgYWxsLCBzbyB0aGUgbGFkZGVyIHdlbnQgYmxhbmsgb24gdGhlIHNpbmdsZSBheGlzIGFcbiAqIGJ1eWVyIGNvbXBhcmVzLiBUaGUgdGFyZ2V0cyBiZWxvdyBhcmUgc3RhdGVkIGluIHVuaXRzIHRoZSBjdXN0b21lciBhY3R1YWxseVxuICogZXhwZXJpZW5jZXMgYW5kIGltcHJvdmUgbW9ub3RvbmljYWxseSBvbiBvbmUgY2xvY2s6IHR3byBidXNpbmVzcyBkYXlzLCB0aGVuXG4gKiBvbmUsIHRoZW4gZWlnaHQgaG91cnMgb24gYSBjbG9jayB0aGF0IGRvZXMgbm90IHN0b3AgZm9yIG5pZ2h0cyBvciB3ZWVrZW5kcy5cbiAqXG4gKiBQcmVtaXVtJ3MgXCJhbnkgZGF5XCIgaXMgdGhlIHdob2xlIG9mIGl0cyAyNMOXNyBjb3ZlcmFnZSBjbGFpbSwgYW5kIGl0IGlzXG4gKiBkZWxpYmVyYXRlbHkgTk9UIGEgc2V2ZXJpdHktZGVwZW5kZW50IG9uZS1ob3VyIHByb21pc2UuIEVpZ2h0IGhvdXJzIGlzIHdoYXQgYVxuICogcm90YSBjYW4gYmUgaGVsZCB0bzogaXQgbGVhdmVzIHJvb20gZm9yIHRoZSBwZXItY2FzZSBzd2VlcCB0byBwYWdlIHR3byBob3Vyc1xuICogYWhlYWQgb2YgdGhlIGRlYWRsaW5lIChzZWUgZG9jcy9vbmNhbGwtcGFnaW5nLm1kKSBhbmQgZm9yIGEgd29rZW4gaHVtYW4gdG9cbiAqIHJlYWQgdGhlIGNhc2UgYW5kIGFuc3dlciBpdC4gQW4gaG91ci1zY2FsZSBjb21taXRtZW50IHdvdWxkIHNwZW5kIHRoYXQgbWFyZ2luXG4gKiBiZWZvcmUgYW55b25lIHBpY2tlZCB1cCB0aGUgcGhvbmUuXG4gKi9cbmV4cG9ydCBjb25zdCBTVVBQT1JUX1JFU1BPTlNFX1RBUkdFVFM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge1xuICBzdXBwb3J0X3N0YW5kYXJkOiAnMiBidXNpbmVzcyBkYXlzJyxcbiAgc3VwcG9ydF9wcmlvcml0eTogJ25leHQgYnVzaW5lc3MgZGF5JyxcbiAgc3VwcG9ydF9wcmVtaXVtOiAnOCBob3VycywgYW55IGRheScsXG59O1xuXG4vKipcbiAqIFN1cHBvcnQgbGV2ZWxzIHdob3NlIGNvbnRhY3RzIG1heSBkZWNsYXJlIGB1cmdlbnRgIHNldmVyaXR5IHdoZW4gb3BlbmluZy5cbiAqXG4gKiBQcmVtaXVtIG9ubHksIGFuZCB0aGlzIGlzIGEgUFJJQ0lORyBkZWNpc2lvbiByYXRoZXIgdGhhbiBhIHBlcm1pc3Npb24gZGV0YWlsLlxuICogVGhlIHRlbmFudCBjaG9vc2VzIHNldmVyaXR5IGF0IG9wZW4gYW5kIHNldmVyaXR5IGRlY2lkZXMgd2hpY2ggdGFyZ2V0IGFwcGxpZXMsXG4gKiBzbyBhIGxldmVsIHRoYXQgY2FuIGRlY2xhcmUgYHVyZ2VudGAgaXMgYSBsZXZlbCB0aGF0IGNhbiBoZWxwIGl0c2VsZiB0byB0aGVcbiAqIGZhc3Rlc3QgcmVzcG9uc2Ugb24gb2ZmZXIuIEFkbWl0dGluZyBpdCBvbmx5IGF0IHByZW1pdW0gaXMgd2hhdCBtYWtlcyB0aGUgdG9wXG4gKiBydW5nIGEgY2FwYWJpbGl0eSDigJQgXCJ5b3UgY2FuIGRlY2xhcmUgYW4gZW1lcmdlbmN5XCIg4oCUIGluc3RlYWQgb2Ygbm90aGluZyBidXQgYVxuICogZmFzdGVyIGNsb2NrLCB3aGljaCBpcyB0aGUgd2hvbGUgcmVhc29uIHRoZSBwcmlvcml0eS10by1wcmVtaXVtIHN0ZXAgaXMgd29ydGhcbiAqIGl0cyBwcmljZS5cbiAqXG4gKiBTdGFmZiByZS1yYW5raW5nIChgc3VwcG9ydC5jYXNlLnNldmVyaXR5YCwgc3lzdGVtLWFkbWluIG9ubHkpIHN0YXlzIHRoZSBlc2NhcGVcbiAqIGhhdGNoOiBhIGdlbnVpbmUgZW1lcmdlbmN5IHJhaXNlZCBvbiBhIGxvd2VyIGxldmVsIGlzIE9VUlMgdG8gcHJvbW90ZSwgd2hpY2hcbiAqIGlzIHRoZSBzYW1lIGdvdmVybmFuY2Ugc3BsaXQgdGhhdCBrZWVwcyB0aGUgdGVuYW50IGZyb20gcmUtcmFua2luZyBhZnRlciBvcGVuLlxuICovXG5leHBvcnQgY29uc3QgVVJHRU5UX1NFVkVSSVRZX0xFVkVMUzogcmVhZG9ubHkgRmVhdHVyZUZsYWdbXSA9IFsnc3VwcG9ydF9wcmVtaXVtJ107XG5cbi8qKlxuICogVGhlIHNldmVyaXR5IGEgY2FzZSBtYXkgYWN0dWFsbHkgYmUgb3BlbmVkIGF0LlxuICpcbiAqIFJldHVybnMgdGhlIHJlcXVlc3RlZCBzZXZlcml0eSB1bmNoYW5nZWQsIG9yIHRoZSBoaWdoZXN0IG9uZSB0aGUgbGV2ZWwgYWRtaXRzLlxuICogYHVyZ2VudGAgYXNrZWQgZm9yIGJlbG93IHByZW1pdW0gYmVjb21lcyBgaGlnaGAg4oCUIGEgRE9XTkdSQURFLCBuZXZlciBhXG4gKiByZWZ1c2FsOiBkZWNsaW5pbmcgdG8gc2VuZCBhIHN1cHBvcnQgbWVzc2FnZSBiZWNhdXNlIHRoZSBzZW5kZXIgb3Zlci1zdGF0ZWRcbiAqIGl0cyBzZXZlcml0eSB3b3VsZCBkZW55IHN1cHBvcnQgb3ZlciBhIGxhYmVsLCBhbmQgdGhlIG1lc3NhZ2UgaXRzZWxmIGlzIG5ldmVyXG4gKiB0aGUgdGhpbmcgYmVpbmcgZ2F0ZWQuIFRoZSBjYWxsZXIgdGVsbHMgdGhlIHNlbmRlciBpdCBoYXBwZW5lZC5cbiAqXG4gKiBBIG51bGwgYGxldmVsYCBtZWFucyBubyBjYXNlIGlzIGJlaW5nIG9wZW5lZCAobm8gZW50aXRsZW1lbnQsIG9yIHRoZVxuICogZW50aXRsZW1lbnQgcmVhZCB3YXMgdW5hdmFpbGFibGUpLCBhbmQgdGhlbiB0aGVyZSBpcyBubyBjb21taXRtZW50IHRvIHByb3RlY3QsXG4gKiBzbyB0aGUgcmVxdWVzdGVkIHZhbHVlIHBhc3NlcyB0aHJvdWdoIHVudG91Y2hlZCByYXRoZXIgdGhhbiBiZWluZyBkZW1vdGVkIGZvclxuICogbm8gcmVhc29uIGR1cmluZyBhbiBvdXRhZ2Ugb2Ygb3Vycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkbWl0Q2FzZVNldmVyaXR5KFxuICByZXF1ZXN0ZWQ6IHN0cmluZyxcbiAgbGV2ZWw6IHN0cmluZyB8IG51bGwsXG4pOiB7IHNldmVyaXR5OiBzdHJpbmc7IGRvd25ncmFkZWQ6IGJvb2xlYW4gfSB7XG4gIGlmIChyZXF1ZXN0ZWQgIT09ICd1cmdlbnQnIHx8IGxldmVsID09PSBudWxsKSByZXR1cm4geyBzZXZlcml0eTogcmVxdWVzdGVkLCBkb3duZ3JhZGVkOiBmYWxzZSB9O1xuICBpZiAoKFVSR0VOVF9TRVZFUklUWV9MRVZFTFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGxldmVsKSkge1xuICAgIHJldHVybiB7IHNldmVyaXR5OiByZXF1ZXN0ZWQsIGRvd25ncmFkZWQ6IGZhbHNlIH07XG4gIH1cbiAgcmV0dXJuIHsgc2V2ZXJpdHk6ICdoaWdoJywgZG93bmdyYWRlZDogdHJ1ZSB9O1xufVxuXG4vKiogQ2hlY2sgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEZlYXR1cmVGbGFnLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRGZWF0dXJlRmxhZyh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgRmVhdHVyZUZsYWcge1xuICByZXR1cm4gKEFMTF9GRUFUVVJFX0ZMQUdTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh2YWx1ZSk7XG59XG5cbi8vIFRpZXItdG8tZmVhdHVyZSBtYXBwaW5nXG5cbi8qKiBGZWF0dXJlcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIGVhY2ggdGllci4gKi9cbmV4cG9ydCBjb25zdCBUSUVSX0ZFQVRVUkVTOiBSZWNvcmQ8UXVvdGFUaWVyLCByZWFkb25seSBGZWF0dXJlRmxhZ1tdPiA9IHtcbiAgLy8gRGV2ZWxvcGVyIGdldHMgYGFpX2dlbmVyYXRpb25gIGFzIGEgVFJJQUw6IHRoZSB0aWVyJ3MgMjAgYGFpQ2FsbHNgIHBlclxuICAvLyBwZXJpb2QgKFFVT1RBX1RJRVJTLmRldmVsb3BlcikgaXMgdGhlIHRyaWFsJ3MgY2FwLCBzbyB0aGUgQUkgc3VyZmFjZXMgYXJlXG4gIC8vIHVzYWJsZSDigJQgbm90IGp1c3QgcHJldmlld2VkIOKAlCBiZWZvcmUgYW4gdXBncmFkZS4gQSBCWU9LIGtleSBzcGVuZHMgbm8gc2xvdC5cbiAgZGV2ZWxvcGVyOiBbJ2FpX2dlbmVyYXRpb24nXSxcbiAgcHJvOiBbJ2FpX2dlbmVyYXRpb24nLCAnYnVsa19vcGVyYXRpb25zJ10sXG4gIC8vIFRlYW0gYWRkcyBzc28gKFNTTy9JZFAgaXMgSU5DTFVERUQgaW4gVGVhbSwgbm90IGFuIGFkZC1vbikuIGFkdmFuY2VkX3JlcG9ydGluZ1xuICAvLyAoRE9SQSkgaXMgTk9UIGEgVGVhbSB0aWVyIGZlYXR1cmUg4oCUIGl0J3MgSU5DTFVERUQgb25seSBpbiBFbnRlcnByaXNlIGFuZCBzb2xkXG4gIC8vIGFzIGFuIGFkZC1vbiBidW5kbGUgdG8gZXZlcnkgb3RoZXIgdGllciAoc2VlIGJpbGxpbmctY29uZmlnXG4gIC8vIGBhZHZhbmNlZF9yZXBvcnRpbmdgKS4gRW50ZXJwcmlzZSB1bmxvY2tzIGFsbC5cbiAgLy8gYHZlcmlmaWVkX3B1Ymxpc2hlcmAgKGVsaWdpYmlsaXR5IHRvIGFwcGx5IGZvciBWZXJpZmllZCkgc3RhcnRzIGF0IFRlYW0uXG4gIHRlYW06IFsnYWlfZ2VuZXJhdGlvbicsICdidWxrX29wZXJhdGlvbnMnLCAnc3NvJywgJ3ZlcmlmaWVkX3B1Ymxpc2hlciddLFxuICAvLyBCdXNpbmVzcyBpcyBUZWFtIHBsdXMgYWR2YW5jZWRfcmVwb3J0aW5nIChET1JBKTogdGhlIGFuYWx5dGljcyBzdXJmYWNlIGlzXG4gIC8vIHdoYXQgYSA4LXNlYXQgb3JnIGlzIHVzdWFsbHkgYnV5aW5nLCBhbmQgYnVuZGxpbmcgaXQgaXMgbW9zdCBvZiB3aHkgdGhlIHRpZXJcbiAgLy8gaXMgd29ydGggJDI0OSBvdmVyIFRlYW0gKyB0aGUgYWRkLW9uLiBFbnRlcnByaXNlIGtlZXBzIGN1c3RvbV9pbnRlZ3JhdGlvbnMsXG4gIC8vIHRlYW1fdXNhZ2VfYW5hbHl0aWNzLCB0aGUgY29tcGxpYW5jZSBsaWJyYXJpZXMgYW5kIHN0YWtlaG9sZGVyX3JlcG9ydHMgYXNcbiAgLy8gaXRzIG93biBkaWZmZXJlbnRpYXRvcnMuXG4gIGJ1c2luZXNzOiBbJ2FpX2dlbmVyYXRpb24nLCAnYnVsa19vcGVyYXRpb25zJywgJ3NzbycsICd2ZXJpZmllZF9wdWJsaXNoZXInLCAnYWR2YW5jZWRfcmVwb3J0aW5nJ10sXG4gIC8vIEVudGVycHJpc2UgaXMgYW4gRVhQTElDSVQgbGlzdCwgZGVsaWJlcmF0ZWx5IG5vdCBgWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXWAuXG4gIC8vXG4gIC8vIFNwcmVhZGluZyBldmVyeSBmbGFnIGhlcmUgaXMgaG93IGEgbmV3IHBhaWQgYWRkLW9uIHNpbGVudGx5IGJlY29tZXMgYW5cbiAgLy8gRW50ZXJwcmlzZSBpbmNsdXNpb246IGFkZGluZyBgc3VwcG9ydF9wcmVtaXVtYCB0byB0aGUgY2F0YWxvZyB3b3VsZCBoYXZlXG4gIC8vIGdyYW50ZWQgZW50ZXJwcmlzZSB0aGUgMjTDlzcgc3VwcG9ydCBpdCBpcyBzdXBwb3NlZCB0byBCVVksIHdpdGggbm90aGluZ1xuICAvLyBmYWlsaW5nLiBMaXN0aW5nIHRoZSBmbGFncyBmb3JjZXMgdGhlIHF1ZXN0aW9uIFwiZG9lcyBFbnRlcnByaXNlIGluY2x1ZGVcbiAgLy8gdGhpcz9cIiB0byBiZSBhbnN3ZXJlZCBwZXIgZmxhZywgd2hpY2ggaXMgdGhlIGRlY2lzaW9uIHRoaXMgcmVjb3JkIGV4aXN0cyB0b1xuICAvLyBjYXJyeS4gQSBmaWx0ZXIgZXhwcmVzc2lvbiB3b3VsZCBkbyB0aGUgc2FtZSBqb2IgYnV0IGNhbm5vdCBiZSByZWFkIGJ5IHRoZVxuICAvLyBzb3VyY2UtcGFyc2luZyBwYXJpdHkgdGVzdHMgKGBmcm9udGVuZC90ZXN0L2ZlYXR1cmUtZ2F0ZS11cHNlbGwudGVzdC50c2BcbiAgLy8gZXh0cmFjdHMgYW4gYXJyYXkgbGl0ZXJhbCksIHNvIGFuIGV4cGxpY2l0IGxpc3QgaXQgaXMuXG4gIC8vXG4gIC8vIFN1cHBvcnQgaXMgYWJzZW50IG9uIHB1cnBvc2U6IGl0IGlzIGFuIGFkZC1vbiBhdCBFVkVSWSB0aWVyLCBpbmNsdWRlZCBpbiBub25lLlxuICBlbnRlcnByaXNlOiBbXG4gICAgJ2FpX2dlbmVyYXRpb24nLFxuICAgICdidWxrX29wZXJhdGlvbnMnLFxuICAgICdjdXN0b21faW50ZWdyYXRpb25zJyxcbiAgICAnc3NvJyxcbiAgICAnYWR2YW5jZWRfcmVwb3J0aW5nJyxcbiAgICAndGVhbV91c2FnZV9hbmFseXRpY3MnLFxuICAgICdjb21wbGlhbmNlX3N0YW5kYXJkJyxcbiAgICAnY29tcGxpYW5jZV9hZHZhbmNlZCcsXG4gICAgJ3N0YWtlaG9sZGVyX3JlcG9ydHMnLFxuICAgICd2ZXJpZmllZF9wdWJsaXNoZXInLFxuICBdLFxuICAvLyBVbmxpbWl0ZWQgaW5jbHVkZXMgZXZlcnkgZmVhdHVyZSAvIGFkZC1vbiBidW5kbGUgKGJpbGxpbmctZGlzYWJsZWQgZGVmYXVsdCkuXG4gIC8vIFN1cHBvcnQgaW5jbHVkZWQgaGVyZSBvbiBwdXJwb3NlOiBgdW5saW1pdGVkYCBpcyB0aGUgYmlsbGluZy1PRkYgdGllciwgd2hlcmVcbiAgLy8gbm90aGluZyBpcyBwdXJjaGFzYWJsZSwgYW5kIGl0cyBgc3VwcG9ydENvbnRhY3RzYCBsaW1pdCBpcyAtMSB0byBtYXRjaC5cbiAgdW5saW1pdGVkOiBbLi4uQUxMX0ZFQVRVUkVfRkxBR1NdLFxufTtcblxuLy8gRmVhdHVyZSBtZXRhZGF0YSAoZm9yIGRpc3BsYXkpXG5cbi8qKiBIdW1hbi1yZWFkYWJsZSBtZXRhZGF0YSBmb3IgZWFjaCBmZWF0dXJlIGZsYWcuICovXG5leHBvcnQgY29uc3QgRkVBVFVSRV9NRVRBREFUQTogUmVjb3JkPEZlYXR1cmVGbGFnLCB7IGxhYmVsOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSB7XG4gIGFpX2dlbmVyYXRpb246IHtcbiAgICBsYWJlbDogJ0FJIEdlbmVyYXRpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnQUktcG93ZXJlZCBwaXBlbGluZSBhbmQgcGx1Z2luIGdlbmVyYXRpb24nLFxuICB9LFxuICBidWxrX29wZXJhdGlvbnM6IHtcbiAgICBsYWJlbDogJ0J1bGsgT3BlcmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdCYXRjaCBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSBmb3IgcGlwZWxpbmVzIGFuZCBwbHVnaW5zJyxcbiAgfSxcbiAgY3VzdG9tX2ludGVncmF0aW9uczoge1xuICAgIGxhYmVsOiAnQ3VzdG9tIEludGVncmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdDb25uZWN0IHRvIGV4dGVybmFsIHNlcnZpY2VzIGFuZCBjdXN0b20gd2ViaG9vayBlbmRwb2ludHMnLFxuICB9LFxuICBzc286IHtcbiAgICBsYWJlbDogJ1NTTyAvIElkUCcsXG4gICAgZGVzY3JpcHRpb246ICdTaW5nbGUgc2lnbi1vbiBhbmQgZXh0ZXJuYWwgaWRlbnRpdHktcHJvdmlkZXIgY29uZmlndXJhdGlvbnMnLFxuICB9LFxuICBhZHZhbmNlZF9yZXBvcnRpbmc6IHtcbiAgICBsYWJlbDogJ0FkdmFuY2VkIFJlcG9ydGluZycsXG4gICAgZGVzY3JpcHRpb246ICdET1JBIC8gYWR2YW5jZWQgZGVsaXZlcnkgYW5hbHl0aWNzJyxcbiAgfSxcbiAgdGVhbV91c2FnZV9hbmFseXRpY3M6IHtcbiAgICBsYWJlbDogJ1RlYW0gVXNhZ2UgQW5hbHl0aWNzJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Blci10ZWFtIHVzYWdlIGJyZWFrZG93biBhY3Jvc3MgdGhlIG9yZyDihpIgdGVhbSBzdWJ0cmVlJyxcbiAgfSxcbiAgY29tcGxpYW5jZV9zdGFuZGFyZDoge1xuICAgIGxhYmVsOiAnU3RhbmRhcmQgQ29tcGxpYW5jZScsXG4gICAgZGVzY3JpcHRpb246ICdDdXJhdGVkIENJL0NEIGJlc3QtcHJhY3RpY2UgY29tcGxpYW5jZSBydWxlIGxpYnJhcnknLFxuICB9LFxuICBjb21wbGlhbmNlX2FkdmFuY2VkOiB7XG4gICAgbGFiZWw6ICdBZHZhbmNlZCBDb21wbGlhbmNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0N1cmF0ZWQgZnJhbWV3b3JrIGNvbXBsaWFuY2UgbGlicmFyaWVzIChTT0MyIC8gUENJLURTUyAvIENJUyknLFxuICB9LFxuICBzdGFrZWhvbGRlcl9yZXBvcnRzOiB7XG4gICAgbGFiZWw6ICdTdGFrZWhvbGRlciBSZXBvcnRzJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NjaGVkdWxlZCB0ZWFtIHJlcG9ydHMgZm9yIG1hbmFnZXJzIOKAlCBzbmFwc2hvdHMsIHJldmlldyBhbmQgcHVibGlzaCwgUERGL2VtYWlsIGRlbGl2ZXJ5IGFuZCBzaGFyZSBsaW5rcycsXG4gIH0sXG4gIHN1cHBvcnRfc3RhbmRhcmQ6IHtcbiAgICBsYWJlbDogJ1N0YW5kYXJkIFN1cHBvcnQnLFxuICAgIGRlc2NyaXB0aW9uOiBgU3VwcG9ydCBjYXNlcyB3aXRoIGEgZmlyc3QgcmVzcG9uc2Ugd2l0aGluICR7U1VQUE9SVF9SRVNQT05TRV9UQVJHRVRTLnN1cHBvcnRfc3RhbmRhcmR9LCBidXNpbmVzcyBob3Vyc2AsXG4gIH0sXG4gIHN1cHBvcnRfcHJpb3JpdHk6IHtcbiAgICBsYWJlbDogJ1ByaW9yaXR5IFN1cHBvcnQnLFxuICAgIGRlc2NyaXB0aW9uOiBgU3VwcG9ydCBjYXNlcyB3aXRoIGEgZmlyc3QgcmVzcG9uc2UgYnkgdGhlICR7U1VQUE9SVF9SRVNQT05TRV9UQVJHRVRTLnN1cHBvcnRfcHJpb3JpdHl9LCBidXNpbmVzcyBob3Vyc2AsXG4gIH0sXG4gIHN1cHBvcnRfcHJlbWl1bToge1xuICAgIGxhYmVsOiAnUHJlbWl1bSBTdXBwb3J0JyxcbiAgICBkZXNjcmlwdGlvbjogYDI0w5c3IHN1cHBvcnQgY2FzZXMg4oCUIGZpcnN0IHJlc3BvbnNlIHdpdGhpbiAke1NVUFBPUlRfUkVTUE9OU0VfVEFSR0VUUy5zdXBwb3J0X3ByZW1pdW19IG9mIHRoZSB3ZWVrLCBhbmQgdGhlIG9ubHkgbGV2ZWwgdGhhdCBtYXkgZGVjbGFyZSB1cmdlbnQgc2V2ZXJpdHlgLFxuICB9LFxuICB2ZXJpZmllZF9wdWJsaXNoZXI6IHtcbiAgICBsYWJlbDogJ1ZlcmlmaWVkIFB1Ymxpc2hlciBFbGlnaWJpbGl0eScsXG4gICAgZGVzY3JpcHRpb246ICdBcHBseSBmb3IgdGhlIFZlcmlmaWVkIGJhZGdlIG9uIHlvdXIgcGx1Z2luLWVjb3N5c3RlbSBwdWJsaXNoZXIgKGF3YXJkZWQgYnkgc3lzdGVtLW9yZyByZXZpZXcpJyxcbiAgfSxcbn07XG5cbi8vIFJlc29sdXRpb24gbG9naWNcblxuLyoqXG4gKiBSZXNvbHZlIGEgdXNlcidzIGVmZmVjdGl2ZSBmZWF0dXJlIHNldC5cbiAqXG4gKiAxLiBTeXNhZG1pbnMgKGlzU3VwZXJBZG1pbikgYWx3YXlzIGdldCBBTEwgZmVhdHVyZXMuXG4gKiAyLiBTdGFydCB3aXRoIHRoZSB0aWVyJ3MgZGVmYXVsdCBmZWF0dXJlcy5cbiAqIDMuIEFwcGx5IHBlci11c2VyIG92ZXJyaWRlczogYHRydWVgIGFkZHMgYSBmZWF0dXJlLCBgZmFsc2VgIHJlbW92ZXMgaXQuXG4gKiA0LiBJbnZhbGlkIG92ZXJyaWRlIGtleXMgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gKlxuICogQHBhcmFtIHRpZXIgLSBUaGUgb3JnYW5pemF0aW9uJ3MgcXVvdGEgdGllclxuICogQHBhcmFtIG9wdHMgLSBSZXNvbHV0aW9uIG9wdGlvbnM6XG4gKiAgIC0gYG92ZXJyaWRlc2A6IHBlci11c2VyIG92ZXJyaWRlcyAoa2V5ID0gZmVhdHVyZSBmbGFnLCB2YWx1ZSA9IGVuYWJsZWQpXG4gKiAgIC0gYGlzU3VwZXJBZG1pbmA6IHdoZXRoZXIgdGhlIHVzZXIgaGFzIHRoZSBnbG9iYWwgc3VwZXItYWRtaW4gZmxhZ1xuICogICAtIGBhY2NvdW50RmVhdHVyZXNgOiBhY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAoZS5nLiBwdXJjaGFzZWQgYWRkLW9uXG4gKiAgICAgYnVuZGxlcykuIEEgTkFNRUQgZmllbGQgc28gaXQgY2FuIG5ldmVyIGJlIHNpbGVudGx5IGRyb3BwZWQgYnkgYSBjYWxsZXJcbiAqICAgICB0aGF0IG9taXRzIGEgdHJhaWxpbmcgcG9zaXRpb25hbCBhcmcuXG4gKiBAcmV0dXJucyBTb3J0ZWQgYXJyYXkgb2YgZW5hYmxlZCBmZWF0dXJlIGZsYWdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXNlckZlYXR1cmVzKFxuICB0aWVyOiBRdW90YVRpZXIsXG4gIG9wdHM/OiB7XG4gICAgb3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gfCBudWxsO1xuICAgIGlzU3VwZXJBZG1pbj86IGJvb2xlYW47XG4gICAgYWNjb3VudEZlYXR1cmVzPzogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsO1xuICB9LFxuKTogRmVhdHVyZUZsYWdbXSB7XG4gIGNvbnN0IHsgb3ZlcnJpZGVzOiBmZWF0dXJlT3ZlcnJpZGVzLCBpc1N1cGVyQWRtaW4sIGFjY291bnRGZWF0dXJlcyB9ID0gb3B0cyA/PyB7fTtcblxuICAvLyBTeXNhZG1pbnMgZ2V0IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiB0aWVyLlxuICBpZiAoaXNTdXBlckFkbWluKSByZXR1cm4gWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXTtcblxuICAvLyBTdGFydCB3aXRoIHRpZXIgZGVmYXVsdHNcbiAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0PEZlYXR1cmVGbGFnPihUSUVSX0ZFQVRVUkVTW3RpZXJdID8/IFtdKTtcblxuICAvLyBBY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAocHVyY2hhc2VkIGZlYXR1cmUgYnVuZGxlcyDigJQgZS5nLiBhdWRpdF9sb2csIHNzbyxcbiAgLy8gYWR2YW5jZWRfcmVwb3J0aW5nLCB0ZWFtX3VzYWdlX2FuYWx5dGljcywgY29tcGxpYW5jZV9zdGFuZGFyZC9hZHZhbmNlZCkuXG4gIC8vIEFwcGxpZWQgYmVmb3JlIHBlci11c2VyIG92ZXJyaWRlcyBzbyBhbiBleHBsaWNpdCB1c2VyIG92ZXJyaWRlIHN0aWxsIHdpbnMuXG4gIGlmIChhY2NvdW50RmVhdHVyZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBhY2NvdW50RmVhdHVyZXMpIHtcbiAgICAgIGlmIChpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgZmVhdHVyZXMuYWRkKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzXG4gIGlmIChmZWF0dXJlT3ZlcnJpZGVzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBlbmFibGVkXSBvZiBPYmplY3QuZW50cmllcyhmZWF0dXJlT3ZlcnJpZGVzKSkge1xuICAgICAgaWYgKCFpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgY29udGludWU7XG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBmZWF0dXJlcy5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZlYXR1cmVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBpbiBjYW5vbmljYWwgb3JkZXJcbiAgcmV0dXJuIEFMTF9GRUFUVVJFX0ZMQUdTLmZpbHRlcihmID0+IGZlYXR1cmVzLmhhcyhmKSk7XG59XG5cbi8qKlxuICogQ3VyYXRlZCBjb21wbGlhbmNlIGNvbnRlbnQgc2V0cyBhbmQgdGhlIGZlYXR1cmUgZmxhZyBlYWNoIG9uZSBpcyBzb2xkIHVuZGVyLlxuICogQSBzZXQgYHhgIGlzIHRoZSBwdWJsaXNoZWQgcnVsZXMgdGFnZ2VkIGBzZXQ6PHg+YDsgYW4gb3JnIGhvbGRpbmcgdGhlIGZsYWcgaXNcbiAqIGVudGl0bGVkIHRvIHRoZW0uIE9yZGVyZWQgZnJvbSB0aGUgbG93ZXN0IGVudGl0bGVtZW50IHRvIHRoZSBoaWdoZXN0LlxuICovXG5leHBvcnQgY29uc3QgQ09NUExJQU5DRV9TRVRfRkVBVFVSRVMgPSB7XG4gIHN0YW5kYXJkOiAnY29tcGxpYW5jZV9zdGFuZGFyZCcsXG4gIGFkdmFuY2VkOiAnY29tcGxpYW5jZV9hZHZhbmNlZCcsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBGZWF0dXJlRmxhZz47XG5cbmV4cG9ydCB0eXBlIENvbXBsaWFuY2VDb250ZW50U2V0ID0ga2V5b2YgdHlwZW9mIENPTVBMSUFOQ0VfU0VUX0ZFQVRVUkVTO1xuXG4vKiogRXZlcnkgY3VyYXRlZCBzZXQgbmFtZSwgbG93ZXN0IGVudGl0bGVtZW50IGZpcnN0LiAqL1xuZXhwb3J0IGNvbnN0IENPTVBMSUFOQ0VfQ09OVEVOVF9TRVRTID0gT2JqZWN0LmtleXMoQ09NUExJQU5DRV9TRVRfRkVBVFVSRVMpIGFzIENvbXBsaWFuY2VDb250ZW50U2V0W107XG5cbi8qKiBUaGUgY3VyYXRlZCBzZXRzIGFuIGVmZmVjdGl2ZSBmZWF0dXJlIHNldCBlbnRpdGxlcyAoc3RhYmxlIG9yZGVyKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGlhbmNlU2V0c0ZvckZlYXR1cmVzKGZlYXR1cmVzOiByZWFkb25seSBzdHJpbmdbXSk6IENvbXBsaWFuY2VDb250ZW50U2V0W10ge1xuICByZXR1cm4gQ09NUExJQU5DRV9DT05URU5UX1NFVFMuZmlsdGVyKChzZXQpID0+IGZlYXR1cmVzLmluY2x1ZGVzKENPTVBMSUFOQ0VfU0VUX0ZFQVRVUkVTW3NldF0pKTtcbn1cblxuLyoqXG4gKiBUaGUgZmVhdHVyZSBhIHB1Ymxpc2hlZCBydWxlJ3MgYHNldDo8eD5gIHRhZ3MgcmVxdWlyZSwgb3IgYG51bGxgIGZvciBhblxuICogdW50YWdnZWQgKGJhc2VsaW5lKSBydWxlLiBUaGUgaGlnaGVzdCBlbnRpdGxlbWVudCB3aW5zIHdoZW4gYSBydWxlIGNhcnJpZXNcbiAqIHNldmVyYWwuIEFjY2VwdHMgYSByYXcganNvbmIgYHRhZ3NgIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGxpYW5jZUZlYXR1cmVGb3JUYWdzKHRhZ3M6IHVua25vd24pOiBGZWF0dXJlRmxhZyB8IG51bGwge1xuICBjb25zdCB0ID0gQXJyYXkuaXNBcnJheSh0YWdzKSA/IHRhZ3MgOiBbXTtcbiAgZm9yIChjb25zdCBzZXQgb2YgWy4uLkNPTVBMSUFOQ0VfQ09OVEVOVF9TRVRTXS5yZXZlcnNlKCkpIHtcbiAgICBpZiAodC5pbmNsdWRlcyhgc2V0OiR7c2V0fWApKSByZXR1cm4gQ09NUExJQU5DRV9TRVRfRkVBVFVSRVNbc2V0XTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2ZlYXR1cmUtZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUl0QywyQkFBMkI7QUFFM0I7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFVLENBQUM7QUFHNUY7OztHQUdHO0FBQ0gsTUFBTSxhQUFhLEdBQUc7SUFDcEIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQiwrRUFBK0U7SUFDL0UsNEVBQTRFO0lBQzVFLHdFQUF3RTtJQUN4RSw2RUFBNkU7SUFDN0Usb0VBQW9FO0lBQ3BFLDhFQUE4RTtJQUM5RSxvREFBb0Q7SUFDcEQscUJBQXFCO0lBQ3JCLEtBQUs7SUFDTCx3REFBd0Q7SUFDeEQsb0JBQW9CO0lBQ3BCLGdGQUFnRjtJQUNoRixvRkFBb0Y7SUFDcEYsc0JBQXNCO0lBQ3RCLGtGQUFrRjtJQUNsRiw0RUFBNEU7SUFDNUUsZ0ZBQWdGO0lBQ2hGLDZFQUE2RTtJQUM3RSxrRkFBa0Y7SUFDbEYscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQiwwRUFBMEU7SUFDMUUsc0VBQXNFO0lBQ3RFLGtFQUFrRTtJQUNsRSw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQiwwRUFBMEU7SUFDMUUsbUVBQW1FO0lBQ25FLDhFQUE4RTtJQUM5RSw2QkFBNkI7SUFDN0Isb0JBQW9CO0lBQ3BCLEdBQUcsY0FBYztDQUNULENBQUM7QUFLWCxnRUFBZ0U7QUFDaEUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQTJCLGFBQWEsQ0FBQztBQUV2RTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQTJCLGNBQWMsQ0FBQztBQUU1RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQU0sQ0FBQyxN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QUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUEyQixDQUFDO0FBRXRHLHlFQUF5RTtBQUN6RSxNQUFNLFVBQVUseUJBQXlCLENBQUMsUUFBMkI7SUFDbkUsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLElBQWE7SUFDcEQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQUUsT0FBTyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIEZlYXR1cmUgZmxhZyBpZGVudGlmaWVyc1xuXG4vKipcbiAqIFN1cHBvcnQgbGV2ZWwsIG9uZSBwZXIgcmVzcG9uc2UtdGltZSBydW5nLiBTb2xkIE9OTFkgYXMgcGVyLWNvbnRhY3QgYWRkLW9uXG4gKiBidW5kbGVzIGFuZCBpbmNsdWRlZCBpbiBOTyB0aWVyIOKAlCBub3QgZXZlbiBlbnRlcnByaXNlLCB3aGljaCBpcyB3aHlcbiAqIGBUSUVSX0ZFQVRVUkVTYCBjYW5ub3Qgc2ltcGx5IHNwcmVhZCBgQUxMX0ZFQVRVUkVfRkxBR1NgIGZvciBpdCBhbnkgbW9yZS5cbiAqIFRoZXNlIFJFUExBQ0UgdGhlIGZvcm1lciBgcHJpb3JpdHlfc3VwcG9ydGAgdGllciBwZXJrLCB3aGljaCBtYXJrZXRlZCBcImZhc3RlclxuICogcmVzcG9uc2UgdGltZXNcIiB3aGlsZSBubyBzdXBwb3J0IHByb2R1Y3QgZXhpc3RlZCB0byBiZSBmYXN0ZXIuIE11dHVhbGx5XG4gKiBleGNsdXNpdmU6IGFuIGFjY291bnQgaG9sZHMgYXQgbW9zdCBvbmUgKGVuZm9yY2VkIGluIGBlZmZlY3RpdmVFbnRpdGxlbWVudHNgKS5cbiAqXG4gKiBJdHMgb3duIHR5cGUsIGFuZCBzcGVsbGVkIE9OQ0Ug4oCUIGBGRUFUVVJFX0ZMQUdTYCBzcHJlYWRzIGl0IHJhdGhlciB0aGFuXG4gKiBsaXN0aW5nIHRoZSB0aHJlZSBuYW1lcyBhZ2Fpbi4gQSBzdXJmYWNlIHRoYXQgbXVzdCBuYW1lIEVWRVJZIGxldmVsIGtleXMgYVxuICogYFJlY29yZDxTdXBwb3J0RmVhdHVyZUZsYWcsIOKApj5gIG9mZiBpdCAodGhlIGZyb250ZW5kJ3MgbGV2ZWwgbGFiZWxzIHdlcmUgYVxuICogYFJlY29yZDxzdHJpbmcsIHN0cmluZz5gIHRoYXQgaGFwcGVuZWQgdG8gY2FycnkgdGhyZWUgZW50cmllcywgc28gYSBmb3VydGhcbiAqIGxldmVsIHdvdWxkIGhhdmUgcmVuZGVyZWQgYXMgdGhlIHJhdyBmbGFnIGlkKSwgd2hpbGUgdGhlIGxhZGRlciBsaXN0IGJlbG93XG4gKiBzdGF5cyBgRmVhdHVyZUZsYWdbXWAgc28gaXQgY2FuIGJlIHRlc3RlZCBhZ2FpbnN0IHRoZSBmdWxsIGNhdGFsb2cuXG4gKi9cbmNvbnN0IFNVUFBPUlRfTEVWRUxTID0gWydzdXBwb3J0X3N0YW5kYXJkJywgJ3N1cHBvcnRfcHJpb3JpdHknLCAnc3VwcG9ydF9wcmVtaXVtJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTdXBwb3J0RmVhdHVyZUZsYWcgPSB0eXBlb2YgU1VQUE9SVF9MRVZFTFNbbnVtYmVyXTtcblxuLyoqXG4gKiBFdmVyeSBmZWF0dXJlIGZsYWcsIGluIGRpc3BsYXkgb3JkZXIuIFRoZSB7QGxpbmsgRmVhdHVyZUZsYWd9IHVuaW9uIGlzIGRlcml2ZWRcbiAqIGZyb20gdGhpcyBsaXN0LCBzbyBhIGZsYWcgaXMgYWRkZWQgaW4gZXhhY3RseSBvbmUgcGxhY2UuXG4gKi9cbmNvbnN0IEZFQVRVUkVfRkxBR1MgPSBbXG4gICdhaV9nZW5lcmF0aW9uJyxcbiAgJ2J1bGtfb3BlcmF0aW9ucycsXG4gIC8vIGBjdXN0b21faW50ZWdyYXRpb25zYCBpcyBhbiBFTlRFUlBSSVNFLUVYQ0xVU0lWRSBtYXJrZXRpbmcvZW50aXRsZW1lbnQgZmxhZzpcbiAgLy8gZ3JhbnRlZCBvbmx5IGJ5IHRoZSBlbnRlcnByaXNlIHRpZXIgKG5vIGFkZC1vbiBidW5kbGUgc2VsbHMgaXQgdG8gYSBsb3dlclxuICAvLyB0aWVyIOKAlCBpbnRlbnRpb25hbCwgaXQgYW5jaG9ycyB0aGUgRW50ZXJwcmlzZSBwbGFuKSBhbmQgbm90IGN1cnJlbnRseVxuICAvLyBgcmVxdWlyZUZlYXR1cmVgLWdhdGVkIG9uIGFueSByb3V0ZS4gVGhpcyBpcyBieSBkZXNpZ24sIG5vdCBkZWFkIGNvZGUg4oCUIGRvXG4gIC8vIG5vdCBcImZpeFwiIGJ5IHdpcmluZyBhIGJ1bmRsZSB3aXRob3V0IGEgcHJpY2luZyBkZWNpc2lvbi4gQ29udHJhc3RcbiAgLy8gYHNzb2AvYGFkdmFuY2VkX3JlcG9ydGluZ2AsIHdoaWNoIEFSRSBzb2xkIGFzIGFkZC1vbiBidW5kbGVzIGFuZCBnYXRlZCAoc2VlXG4gIC8vIGJpbGxpbmctY29uZmlnIGBsb2FkQnVuZGxlc2AgKyBgcmVxdWlyZUZlYXR1cmVgKS5cbiAgJ2N1c3RvbV9pbnRlZ3JhdGlvbnMnLFxuICAnc3NvJyxcbiAgLy8gRE9SQSAvIGFkdmFuY2VkIGRlbGl2ZXJ5IGFuYWx5dGljcyAocGFpZCB0aWVycyBvbmx5KS5cbiAgJ2FkdmFuY2VkX3JlcG9ydGluZycsXG4gIC8vIFBlci10ZWFtIHVzYWdlIGJyZWFrZG93biBhY3Jvc3MgdGhlIG9yZ+KGknRlYW0gc3VidHJlZS4gSU5DTFVERUQgaW4gRW50ZXJwcmlzZTtcbiAgLy8gc29sZCBhcyBhbiBhZGQtb24gYnVuZGxlIHRvIFByby9UZWFtIChzZWUgYmlsbGluZy1jb25maWcgYHRlYW1fdXNhZ2VfYW5hbHl0aWNzYCkuXG4gICd0ZWFtX3VzYWdlX2FuYWx5dGljcycsXG4gIC8vIEN1cmF0ZWQgY29tcGxpYW5jZSBydWxlIGxpYnJhcmllcyBzb2xkIGFzIGFkZC1vbiBidW5kbGVzLiBgY29tcGxpYW5jZV9zdGFuZGFyZGBcbiAgLy8gPSBDSS9DRCBiZXN0LXByYWN0aWNlIHNldDsgYGNvbXBsaWFuY2VfYWR2YW5jZWRgID0gU09DMi9QQ0kvQ0lTIGZyYW1ld29ya1xuICAvLyBsaWJyYXJpZXMgKHJlcXVpcmVzIFN0YW5kYXJkKS4gVGhlc2UgZ2F0ZSBTVUJTQ1JJQklORyB0byB0aGUgc2V0J3Mgc3lzdGVtLW9yZ1xuICAvLyBwdWJsaXNoZWQgcnVsZXM7IElOQ0xVREVEIGluIEVudGVycHJpc2UvVW5saW1pdGVkICh2aWEgQUxMX0ZFQVRVUkVfRkxBR1MpLFxuICAvLyBzb2xkIHRvIERldmVsb3Blci9Qcm8vVGVhbSAoc2VlIGJpbGxpbmctY29uZmlnIGBjb21wbGlhbmNlX3N0YW5kYXJkL2FkdmFuY2VkYCkuXG4gICdjb21wbGlhbmNlX3N0YW5kYXJkJyxcbiAgJ2NvbXBsaWFuY2VfYWR2YW5jZWQnLFxuICAvLyBTY2hlZHVsZWQsIG1hbmFnZXItZmFjaW5nIHJlcG9ydHM6IHNhdmVkIGRlZmluaXRpb25zLCBmcm96ZW4gc25hcHNob3RzLFxuICAvLyByZXZpZXctYW5kLXB1Ymxpc2gsIFBERi9lbWFpbCBkZWxpdmVyeSBhbmQgc2hhcmUgbGlua3MuIElOQ0xVREVEIGluXG4gIC8vIEVudGVycHJpc2UvVW5saW1pdGVkOyBzb2xkIGFzIGFuIGFkZC1vbiBidW5kbGUgdG8gUHJvL1RlYW0gKHNlZVxuICAvLyBiaWxsaW5nLWNvbmZpZyBgc3Rha2Vob2xkZXJfcmVwb3J0c2ApLiBPbi1kZW1hbmQgZGFzaGJvYXJkcyBzdGF5IEZSRUUgdW5kZXJcbiAgLy8gYHJlcG9ydHM6cmVhZGAg4oCUIHRoaXMgZ2F0ZXMgc2F2aW5nLCBzY2hlZHVsaW5nIGFuZCBwdWJsaXNoaW5nLCBub3QgbG9va2luZy5cbiAgJ3N0YWtlaG9sZGVyX3JlcG9ydHMnLFxuICAvLyBQbHVnaW4gZWNvc3lzdGVtOiB0aGUgb3JnJ3MgcHVibGlzaGVyIGlzIEVMSUdJQkxFIHRvIGFwcGx5IGZvciBWZXJpZmllZFxuICAvLyBzdGF0dXMgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBFbGlnaWJpbGl0eSBvbmx5IOKAlCB0aGUgYmFkZ2VcbiAgLy8gaXMgYXdhcmRlZCAoYW5kIHdpdGhkcmF3bikgYnkgc3lzdGVtLW9yZyByZXZpZXcsIG5ldmVyIGJvdWdodC4gVGVhbSBhbmQgdXA7XG4gIC8vIG5vIGFkZC1vbiBidW5kbGUgc2VsbHMgaXQuXG4gICd2ZXJpZmllZF9wdWJsaXNoZXInLFxuICAuLi5TVVBQT1JUX0xFVkVMUyxcbl0gYXMgY29uc3Q7XG5cbi8qKiBDYW5vbmljYWwgZmVhdHVyZSBmbGFnIGlkZW50aWZpZXJzLiAqL1xuZXhwb3J0IHR5cGUgRmVhdHVyZUZsYWcgPSB0eXBlb2YgRkVBVFVSRV9GTEFHU1tudW1iZXJdO1xuXG4vKiogQWxsIHZhbGlkIGZlYXR1cmUgZmxhZ3MgKG9yZGVyIGRldGVybWluZXMgZGlzcGxheSBvcmRlcikuICovXG5leHBvcnQgY29uc3QgQUxMX0ZFQVRVUkVfRkxBR1M6IHJlYWRvbmx5IEZlYXR1cmVGbGFnW10gPSBGRUFUVVJFX0ZMQUdTO1xuXG4vKipcbiAqIFRoZSBzdXBwb3J0LWxldmVsIGZsYWdzLCB3aGljaCBhcmUgYWRkLW9uLU9OTFkgYXQgZXZlcnkgdGllci5cbiAqXG4gKiBOZWVkZWQgYXMgaXRzIG93biBsaXN0IGJlY2F1c2UgYFRJRVJfRkVBVFVSRVMuZW50ZXJwcmlzZWAgc3ByZWFkc1xuICogYEFMTF9GRUFUVVJFX0ZMQUdTYDogd2l0aG91dCBleGNsdWRpbmcgdGhlc2UsIGFkZGluZyBhIHN1cHBvcnQgZmxhZyB3b3VsZFxuICogc2lsZW50bHkgZ3JhbnQgZW50ZXJwcmlzZSB0aGUgc3VwcG9ydCBwcm9kdWN0IGl0IGlzIHN1cHBvc2VkIHRvIGJ1eSwgd2hpY2ggaXNcbiAqIGV4YWN0bHkgdGhlIFwiaW5jbHVkZWQgaW4gbm8gdGllclwiIGRlY2lzaW9uIGl0IHdvdWxkIGJyZWFrLlxuICovXG5leHBvcnQgY29uc3QgU1VQUE9SVF9GRUFUVVJFX0ZMQUdTOiByZWFkb25seSBGZWF0dXJlRmxhZ1tdID0gU1VQUE9SVF9MRVZFTFM7XG5cbi8qKlxuICogVGhlIEZJUlNULVJFU1BPTlNFIFRBUkdFVCBzb2xkIGF0IGVhY2ggc3VwcG9ydCBsZXZlbCDigJQgdGhlIGNhbm9uaWNhbCB3b3JkaW5nLlxuICpcbiAqIE9uZSBwbGFjZSwgYmVjYXVzZSB0aGlzIHN0cmluZyBpcyBhIGNvbW1pdG1lbnQ6IGl0IGlzIHNob3duIG9uIHRoZSBjYXNlLCBpblxuICogdGhlIGFkZC1vbiBjYXRhbG9nLCBvbiB0aGUgcHJpY2luZyBwYWdlIGFuZCBpbiB0aGUgYWxlcnQgdGhhdCBmaXJlcyB3aGVuIHRoZVxuICogZGVzayBtaXNzZXMgaXQsIGFuZCB0aG9zZSBmb3VyIG11c3QgbmV2ZXIgZGlzYWdyZWUuIEEgbGV2ZWwgYWJzZW50IGZyb20gdGhpc1xuICogbWFwIGhhcyBubyBzdGF0ZWQgdGFyZ2V0IGFuZCBjYWxsZXJzIG11c3Qgb21pdCB0aGUgcGhyYXNlIHJhdGhlciB0aGFuIGJvcnJvd1xuICogYW5vdGhlciBsZXZlbCdzIHByb21pc2UuXG4gKlxuICogV0hZIFRIRVNFIFVOSVRTLiBBbiBlYXJsaWVyIGxhZGRlciByZWFkIFwiNDggYnVzaW5lc3MgaG91cnMgLyAyNCBidXNpbmVzc1xuICogaG91cnMgLyBubyBzdGF0ZWQgbnVtYmVyXCIsIHdoaWNoIHdhcyB3cm9uZyB0d2ljZSBvdmVyLiBUaGUgYnVzaW5lc3MtaG91cnNcbiAqIHVuaXQgZmxhdHRlcmVkIHRoZSB0YXJnZXRzIGJ5IHJvdWdobHkgdGhyZWUgdGltZXMg4oCUIDQ4IGJ1c2luZXNzIGhvdXJzIGlzIHNpeFxuICogd29ya2luZyBkYXlzLCBzbyBhIGNhc2UgcmFpc2VkIG9uIGEgRnJpZGF5IGV2ZW5pbmcgaGFkIGl0cyB0YXJnZXQgZXhwaXJlIHRoZVxuICogKmZvbGxvd2luZyBNb25kYXkqIOKAlCBhbmQgdGhlIHRvcCBsZXZlbCwgdGhlIG9uZSB0aGF0IGNvc3RzIHRoZSBtb3N0LCB3YXMgdGhlXG4gKiBvbmx5IG9uZSB3aXRoIG5vIG51bWJlciBhdCBhbGwsIHNvIHRoZSBsYWRkZXIgd2VudCBibGFuayBvbiB0aGUgc2luZ2xlIGF4aXMgYVxuICogYnV5ZXIgY29tcGFyZXMuIFRoZSB0YXJnZXRzIGJlbG93IGFyZSBzdGF0ZWQgaW4gdW5pdHMgdGhlIGN1c3RvbWVyIGFjdHVhbGx5XG4gKiBleHBlcmllbmNlcyBhbmQgaW1wcm92ZSBtb25vdG9uaWNhbGx5IG9uIG9uZSBjbG9jazogdHdvIGJ1c2luZXNzIGRheXMsIHRoZW5cbiAqIG9uZSwgdGhlbiBlaWdodCBob3VycyBvbiBhIGNsb2NrIHRoYXQgZG9lcyBub3Qgc3RvcCBmb3IgbmlnaHRzIG9yIHdlZWtlbmRzLlxuICpcbiAqIFByZW1pdW0ncyBcImFueSBkYXlcIiBpcyB0aGUgd2hvbGUgb2YgaXRzIDI0w5c3IGNvdmVyYWdlIGNsYWltLCBhbmQgaXQgaXNcbiAqIGRlbGliZXJhdGVseSBOT1QgYSBzZXZlcml0eS1kZXBlbmRlbnQgb25lLWhvdXIgcHJvbWlzZS4gRWlnaHQgaG91cnMgaXMgd2hhdCBhXG4gKiByb3RhIGNhbiBiZSBoZWxkIHRvOiBpdCBsZWF2ZXMgcm9vbSBmb3IgdGhlIHBlci1jYXNlIHN3ZWVwIHRvIHBhZ2UgdHdvIGhvdXJzXG4gKiBhaGVhZCBvZiB0aGUgZGVhZGxpbmUgKHNlZSBkb2NzL29uY2FsbC1wYWdpbmcubWQpIGFuZCBmb3IgYSB3b2tlbiBodW1hbiB0b1xuICogcmVhZCB0aGUgY2FzZSBhbmQgYW5zd2VyIGl0LiBBbiBob3VyLXNjYWxlIGNvbW1pdG1lbnQgd291bGQgc3BlbmQgdGhhdCBtYXJnaW5cbiAqIGJlZm9yZSBhbnlvbmUgcGlja2VkIHVwIHRoZSBwaG9uZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNVUFBPUlRfUkVTUE9OU0VfVEFSR0VUUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7XG4gIHN1cHBvcnRfc3RhbmRhcmQ6ICcyIGJ1c2luZXNzIGRheXMnLFxuICBzdXBwb3J0X3ByaW9yaXR5OiAnbmV4dCBidXNpbmVzcyBkYXknLFxuICBzdXBwb3J0X3ByZW1pdW06ICc4IGhvdXJzLCBhbnkgZGF5Jyxcbn07XG5cbi8qKlxuICogU3VwcG9ydCBsZXZlbHMgd2hvc2UgY29udGFjdHMgbWF5IGRlY2xhcmUgYHVyZ2VudGAgc2V2ZXJpdHkgd2hlbiBvcGVuaW5nLlxuICpcbiAqIFByZW1pdW0gb25seSwgYW5kIHRoaXMgaXMgYSBQUklDSU5HIGRlY2lzaW9uIHJhdGhlciB0aGFuIGEgcGVybWlzc2lvbiBkZXRhaWwuXG4gKiBUaGUgdGVuYW50IGNob29zZXMgc2V2ZXJpdHkgYXQgb3BlbiBhbmQgc2V2ZXJpdHkgZGVjaWRlcyB3aGljaCB0YXJnZXQgYXBwbGllcyxcbiAqIHNvIGEgbGV2ZWwgdGhhdCBjYW4gZGVjbGFyZSBgdXJnZW50YCBpcyBhIGxldmVsIHRoYXQgY2FuIGhlbHAgaXRzZWxmIHRvIHRoZVxuICogZmFzdGVzdCByZXNwb25zZSBvbiBvZmZlci4gQWRtaXR0aW5nIGl0IG9ubHkgYXQgcHJlbWl1bSBpcyB3aGF0IG1ha2VzIHRoZSB0b3BcbiAqIHJ1bmcgYSBjYXBhYmlsaXR5IOKAlCBcInlvdSBjYW4gZGVjbGFyZSBhbiBlbWVyZ2VuY3lcIiDigJQgaW5zdGVhZCBvZiBub3RoaW5nIGJ1dCBhXG4gKiBmYXN0ZXIgY2xvY2ssIHdoaWNoIGlzIHRoZSB3aG9sZSByZWFzb24gdGhlIHByaW9yaXR5LXRvLXByZW1pdW0gc3RlcCBpcyB3b3J0aFxuICogaXRzIHByaWNlLlxuICpcbiAqIFN0YWZmIHJlLXJhbmtpbmcgKGBzdXBwb3J0LmNhc2Uuc2V2ZXJpdHlgLCBzeXN0ZW0tYWRtaW4gb25seSkgc3RheXMgdGhlIGVzY2FwZVxuICogaGF0Y2g6IGEgZ2VudWluZSBlbWVyZ2VuY3kgcmFpc2VkIG9uIGEgbG93ZXIgbGV2ZWwgaXMgT1VSUyB0byBwcm9tb3RlLCB3aGljaFxuICogaXMgdGhlIHNhbWUgZ292ZXJuYW5jZSBzcGxpdCB0aGF0IGtlZXBzIHRoZSB0ZW5hbnQgZnJvbSByZS1yYW5raW5nIGFmdGVyIG9wZW4uXG4gKi9cbmV4cG9ydCBjb25zdCBVUkdFTlRfU0VWRVJJVFlfTEVWRUxTOiByZWFkb25seSBGZWF0dXJlRmxhZ1tdID0gWydzdXBwb3J0X3ByZW1pdW0nXTtcblxuLyoqXG4gKiBUaGUgc2V2ZXJpdHkgYSBjYXNlIG1heSBhY3R1YWxseSBiZSBvcGVuZWQgYXQuXG4gKlxuICogUmV0dXJucyB0aGUgcmVxdWVzdGVkIHNldmVyaXR5IHVuY2hhbmdlZCwgb3IgdGhlIGhpZ2hlc3Qgb25lIHRoZSBsZXZlbCBhZG1pdHMuXG4gKiBgdXJnZW50YCBhc2tlZCBmb3IgYmVsb3cgcHJlbWl1bSBiZWNvbWVzIGBoaWdoYCDigJQgYSBET1dOR1JBREUsIG5ldmVyIGFcbiAqIHJlZnVzYWw6IGRlY2xpbmluZyB0byBzZW5kIGEgc3VwcG9ydCBtZXNzYWdlIGJlY2F1c2UgdGhlIHNlbmRlciBvdmVyLXN0YXRlZFxuICogaXRzIHNldmVyaXR5IHdvdWxkIGRlbnkgc3VwcG9ydCBvdmVyIGEgbGFiZWwsIGFuZCB0aGUgbWVzc2FnZSBpdHNlbGYgaXMgbmV2ZXJcbiAqIHRoZSB0aGluZyBiZWluZyBnYXRlZC4gVGhlIGNhbGxlciB0ZWxscyB0aGUgc2VuZGVyIGl0IGhhcHBlbmVkLlxuICpcbiAqIEEgbnVsbCBgbGV2ZWxgIG1lYW5zIG5vIGNhc2UgaXMgYmVpbmcgb3BlbmVkIChubyBlbnRpdGxlbWVudCwgb3IgdGhlXG4gKiBlbnRpdGxlbWVudCByZWFkIHdhcyB1bmF2YWlsYWJsZSksIGFuZCB0aGVuIHRoZXJlIGlzIG5vIGNvbW1pdG1lbnQgdG8gcHJvdGVjdCxcbiAqIHNvIHRoZSByZXF1ZXN0ZWQgdmFsdWUgcGFzc2VzIHRocm91Z2ggdW50b3VjaGVkIHJhdGhlciB0aGFuIGJlaW5nIGRlbW90ZWQgZm9yXG4gKiBubyByZWFzb24gZHVyaW5nIGFuIG91dGFnZSBvZiBvdXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRtaXRDYXNlU2V2ZXJpdHkoXG4gIHJlcXVlc3RlZDogc3RyaW5nLFxuICBsZXZlbDogc3RyaW5nIHwgbnVsbCxcbik6IHsgc2V2ZXJpdHk6IHN0cmluZzsgZG93bmdyYWRlZDogYm9vbGVhbiB9IHtcbiAgaWYgKHJlcXVlc3RlZCAhPT0gJ3VyZ2VudCcgfHwgbGV2ZWwgPT09IG51bGwpIHJldHVybiB7IHNldmVyaXR5OiByZXF1ZXN0ZWQsIGRvd25ncmFkZWQ6IGZhbHNlIH07XG4gIGlmICgoVVJHRU5UX1NFVkVSSVRZX0xFVkVMUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMobGV2ZWwpKSB7XG4gICAgcmV0dXJuIHsgc2V2ZXJpdHk6IHJlcXVlc3RlZCwgZG93bmdyYWRlZDogZmFsc2UgfTtcbiAgfVxuICByZXR1cm4geyBzZXZlcml0eTogJ2hpZ2gnLCBkb3duZ3JhZGVkOiB0cnVlIH07XG59XG5cbi8qKiBDaGVjayB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgdmFsaWQgRmVhdHVyZUZsYWcuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEZlYXR1cmVGbGFnKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBGZWF0dXJlRmxhZyB7XG4gIHJldHVybiAoQUxMX0ZFQVRVUkVfRkxBR1MgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cblxuLy8gVGllci10by1mZWF0dXJlIG1hcHBpbmdcblxuLyoqIEZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgZWFjaCB0aWVyLiAqL1xuZXhwb3J0IGNvbnN0IFRJRVJfRkVBVFVSRVM6IFJlY29yZDxRdW90YVRpZXIsIHJlYWRvbmx5IEZlYXR1cmVGbGFnW10+ID0ge1xuICAvLyBEZXZlbG9wZXIgZ2V0cyBgYWlfZ2VuZXJhdGlvbmAgYXMgYSBUUklBTDogdGhlIHRpZXIncyAyMCBgYWlDYWxsc2AgcGVyXG4gIC8vIHBlcmlvZCAoUVVPVEFfVElFUlMuZGV2ZWxvcGVyKSBpcyB0aGUgdHJpYWwncyBjYXAsIHNvIHRoZSBBSSBzdXJmYWNlcyBhcmVcbiAgLy8gdXNhYmxlIOKAlCBub3QganVzdCBwcmV2aWV3ZWQg4oCUIGJlZm9yZSBhbiB1cGdyYWRlLiBBIEJZT0sga2V5IHNwZW5kcyBubyBzbG90LlxuICBkZXZlbG9wZXI6IFsnYWlfZ2VuZXJhdGlvbiddLFxuICBwcm86IFsnYWlfZ2VuZXJhdGlvbicsICdidWxrX29wZXJhdGlvbnMnXSxcbiAgLy8gVGVhbSBhZGRzIHNzbyAoU1NPL0lkUCBpcyBJTkNMVURFRCBpbiBUZWFtLCBub3QgYW4gYWRkLW9uKS4gYWR2YW5jZWRfcmVwb3J0aW5nXG4gIC8vIChET1JBKSBpcyBOT1QgYSBUZWFtIHRpZXIgZmVhdHVyZSDigJQgaXQncyBJTkNMVURFRCBvbmx5IGluIEVudGVycHJpc2UgYW5kIHNvbGRcbiAgLy8gYXMgYW4gYWRkLW9uIGJ1bmRsZSB0byBldmVyeSBvdGhlciB0aWVyIChzZWUgYmlsbGluZy1jb25maWdcbiAgLy8gYGFkdmFuY2VkX3JlcG9ydGluZ2ApLiBFbnRlcnByaXNlIHVubG9ja3MgYWxsLlxuICAvLyBgdmVyaWZpZWRfcHVibGlzaGVyYCAoZWxpZ2liaWxpdHkgdG8gYXBwbHkgZm9yIFZlcmlmaWVkKSBzdGFydHMgYXQgVGVhbS5cbiAgdGVhbTogWydhaV9nZW5lcmF0aW9uJywgJ2J1bGtfb3BlcmF0aW9ucycsICdzc28nLCAndmVyaWZpZWRfcHVibGlzaGVyJ10sXG4gIC8vIEJ1c2luZXNzIGlzIFRlYW0gcGx1cyBhZHZhbmNlZF9yZXBvcnRpbmcgKERPUkEpOiB0aGUgYW5hbHl0aWNzIHN1cmZhY2UgaXNcbiAgLy8gd2hhdCBhIDgtc2VhdCBvcmcgaXMgdXN1YWxseSBidXlpbmcsIGFuZCBidW5kbGluZyBpdCBpcyBtb3N0IG9mIHdoeSB0aGUgdGllclxuICAvLyBpcyB3b3J0aCAkMjQ5IG92ZXIgVGVhbSArIHRoZSBhZGQtb24uIEVudGVycHJpc2Uga2VlcHMgY3VzdG9tX2ludGVncmF0aW9ucyxcbiAgLy8gdGVhbV91c2FnZV9hbmFseXRpY3MsIHRoZSBjb21wbGlhbmNlIGxpYnJhcmllcyBhbmQgc3Rha2Vob2xkZXJfcmVwb3J0cyBhc1xuICAvLyBpdHMgb3duIGRpZmZlcmVudGlhdG9ycy5cbiAgYnVzaW5lc3M6IFsnYWlfZ2VuZXJhdGlvbicsICdidWxrX29wZXJhdGlvbnMnLCAnc3NvJywgJ3ZlcmlmaWVkX3B1Ymxpc2hlcicsICdhZHZhbmNlZF9yZXBvcnRpbmcnXSxcbiAgLy8gRW50ZXJwcmlzZSBpcyBhbiBFWFBMSUNJVCBsaXN0LCBkZWxpYmVyYXRlbHkgbm90IGBbLi4uQUxMX0ZFQVRVUkVfRkxBR1NdYC5cbiAgLy9cbiAgLy8gU3ByZWFkaW5nIGV2ZXJ5IGZsYWcgaGVyZSBpcyBob3cgYSBuZXcgcGFpZCBhZGQtb24gc2lsZW50bHkgYmVjb21lcyBhblxuICAvLyBFbnRlcnByaXNlIGluY2x1c2lvbjogYWRkaW5nIGBzdXBwb3J0X3ByZW1pdW1gIHRvIHRoZSBjYXRhbG9nIHdvdWxkIGhhdmVcbiAgLy8gZ3JhbnRlZCBlbnRlcnByaXNlIHRoZSAyNMOXNyBzdXBwb3J0IGl0IGlzIHN1cHBvc2VkIHRvIEJVWSwgd2l0aCBub3RoaW5nXG4gIC8vIGZhaWxpbmcuIExpc3RpbmcgdGhlIGZsYWdzIGZvcmNlcyB0aGUgcXVlc3Rpb24gXCJkb2VzIEVudGVycHJpc2UgaW5jbHVkZVxuICAvLyB0aGlzP1wiIHRvIGJlIGFuc3dlcmVkIHBlciBmbGFnLCB3aGljaCBpcyB0aGUgZGVjaXNpb24gdGhpcyByZWNvcmQgZXhpc3RzIHRvXG4gIC8vIGNhcnJ5LiBBIGZpbHRlciBleHByZXNzaW9uIHdvdWxkIGRvIHRoZSBzYW1lIGpvYiBidXQgY2Fubm90IGJlIHJlYWQgYnkgdGhlXG4gIC8vIHNvdXJjZS1wYXJzaW5nIHBhcml0eSB0ZXN0cyAoYGZyb250ZW5kL3Rlc3QvZmVhdHVyZS1nYXRlLXVwc2VsbC50ZXN0LnRzYFxuICAvLyBleHRyYWN0cyBhbiBhcnJheSBsaXRlcmFsKSwgc28gYW4gZXhwbGljaXQgbGlzdCBpdCBpcy5cbiAgLy9cbiAgLy8gU3VwcG9ydCBpcyBhYnNlbnQgb24gcHVycG9zZTogaXQgaXMgYW4gYWRkLW9uIGF0IEVWRVJZIHRpZXIsIGluY2x1ZGVkIGluIG5vbmUuXG4gIGVudGVycHJpc2U6IFtcbiAgICAnYWlfZ2VuZXJhdGlvbicsXG4gICAgJ2J1bGtfb3BlcmF0aW9ucycsXG4gICAgJ2N1c3RvbV9pbnRlZ3JhdGlvbnMnLFxuICAgICdzc28nLFxuICAgICdhZHZhbmNlZF9yZXBvcnRpbmcnLFxuICAgICd0ZWFtX3VzYWdlX2FuYWx5dGljcycsXG4gICAgJ2NvbXBsaWFuY2Vfc3RhbmRhcmQnLFxuICAgICdjb21wbGlhbmNlX2FkdmFuY2VkJyxcbiAgICAnc3Rha2Vob2xkZXJfcmVwb3J0cycsXG4gICAgJ3ZlcmlmaWVkX3B1Ymxpc2hlcicsXG4gIF0sXG4gIC8vIFVubGltaXRlZCBpbmNsdWRlcyBldmVyeSBmZWF0dXJlIC8gYWRkLW9uIGJ1bmRsZSAoYmlsbGluZy1kaXNhYmxlZCBkZWZhdWx0KS5cbiAgLy8gU3VwcG9ydCBpbmNsdWRlZCBoZXJlIG9uIHB1cnBvc2U6IGB1bmxpbWl0ZWRgIGlzIHRoZSBiaWxsaW5nLU9GRiB0aWVyLCB3aGVyZVxuICAvLyBub3RoaW5nIGlzIHB1cmNoYXNhYmxlLCBhbmQgaXRzIGBzdXBwb3J0Q29udGFjdHNgIGxpbWl0IGlzIC0xIHRvIG1hdGNoLlxuICB1bmxpbWl0ZWQ6IFsuLi5BTExfRkVBVFVSRV9GTEFHU10sXG59O1xuXG4vLyBGZWF0dXJlIG1ldGFkYXRhIChmb3IgZGlzcGxheSlcblxuLyoqIEh1bWFuLXJlYWRhYmxlIG1ldGFkYXRhIGZvciBlYWNoIGZlYXR1cmUgZmxhZy4gKi9cbmV4cG9ydCBjb25zdCBGRUFUVVJFX01FVEFEQVRBOiBSZWNvcmQ8RmVhdHVyZUZsYWcsIHsgbGFiZWw6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiA9IHtcbiAgYWlfZ2VuZXJhdGlvbjoge1xuICAgIGxhYmVsOiAnQUkgR2VuZXJhdGlvbicsXG4gICAgZGVzY3JpcHRpb246ICdBSS1wb3dlcmVkIHBpcGVsaW5lIGFuZCBwbHVnaW4gZ2VuZXJhdGlvbicsXG4gIH0sXG4gIGJ1bGtfb3BlcmF0aW9uczoge1xuICAgIGxhYmVsOiAnQnVsayBPcGVyYXRpb25zJyxcbiAgICBkZXNjcmlwdGlvbjogJ0JhdGNoIGNyZWF0ZSwgdXBkYXRlLCBhbmQgZGVsZXRlIGZvciBwaXBlbGluZXMgYW5kIHBsdWdpbnMnLFxuICB9LFxuICBjdXN0b21faW50ZWdyYXRpb25zOiB7XG4gICAgbGFiZWw6ICdDdXN0b20gSW50ZWdyYXRpb25zJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Nvbm5lY3QgdG8gZXh0ZXJuYWwgc2VydmljZXMgYW5kIGN1c3RvbSB3ZWJob29rIGVuZHBvaW50cycsXG4gIH0sXG4gIHNzbzoge1xuICAgIGxhYmVsOiAnU1NPIC8gSWRQJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NpbmdsZSBzaWduLW9uIGFuZCBleHRlcm5hbCBpZGVudGl0eS1wcm92aWRlciBjb25maWd1cmF0aW9ucycsXG4gIH0sXG4gIGFkdmFuY2VkX3JlcG9ydGluZzoge1xuICAgIGxhYmVsOiAnQWR2YW5jZWQgUmVwb3J0aW5nJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RPUkEgLyBhZHZhbmNlZCBkZWxpdmVyeSBhbmFseXRpY3MnLFxuICB9LFxuICB0ZWFtX3VzYWdlX2FuYWx5dGljczoge1xuICAgIGxhYmVsOiAnVGVhbSBVc2FnZSBBbmFseXRpY3MnLFxuICAgIGRlc2NyaXB0aW9uOiAnUGVyLXRlYW0gdXNhZ2UgYnJlYWtkb3duIGFjcm9zcyB0aGUgb3JnIOKGkiB0ZWFtIHN1YnRyZWUnLFxuICB9LFxuICBjb21wbGlhbmNlX3N0YW5kYXJkOiB7XG4gICAgbGFiZWw6ICdTdGFuZGFyZCBDb21wbGlhbmNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0N1cmF0ZWQgQ0kvQ0QgYmVzdC1wcmFjdGljZSBjb21wbGlhbmNlIHJ1bGUgbGlicmFyeScsXG4gIH0sXG4gIGNvbXBsaWFuY2VfYWR2YW5jZWQ6IHtcbiAgICBsYWJlbDogJ0FkdmFuY2VkIENvbXBsaWFuY2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ3VyYXRlZCBmcmFtZXdvcmsgY29tcGxpYW5jZSBsaWJyYXJpZXMgKFNPQzIgLyBQQ0ktRFNTIC8gQ0lTKScsXG4gIH0sXG4gIHN0YWtlaG9sZGVyX3JlcG9ydHM6IHtcbiAgICBsYWJlbDogJ1N0YWtlaG9sZGVyIFJlcG9ydHMnLFxuICAgIGRlc2NyaXB0aW9uOiAnU2NoZWR1bGVkIHRlYW0gcmVwb3J0cyBmb3IgbWFuYWdlcnMg4oCUIHNuYXBzaG90cywgcmV2aWV3IGFuZCBwdWJsaXNoLCBQREYvZW1haWwgZGVsaXZlcnkgYW5kIHNoYXJlIGxpbmtzJyxcbiAgfSxcbiAgc3VwcG9ydF9zdGFuZGFyZDoge1xuICAgIGxhYmVsOiAnU3RhbmRhcmQgU3VwcG9ydCcsXG4gICAgZGVzY3JpcHRpb246IGBTdXBwb3J0IGNhc2VzIHdpdGggYSBmaXJzdCByZXNwb25zZSB3aXRoaW4gJHtTVVBQT1JUX1JFU1BPTlNFX1RBUkdFVFMuc3VwcG9ydF9zdGFuZGFyZH0sIGJ1c2luZXNzIGhvdXJzYCxcbiAgfSxcbiAgc3VwcG9ydF9wcmlvcml0eToge1xuICAgIGxhYmVsOiAnUHJpb3JpdHkgU3VwcG9ydCcsXG4gICAgZGVzY3JpcHRpb246IGBTdXBwb3J0IGNhc2VzIHdpdGggYSBmaXJzdCByZXNwb25zZSBieSB0aGUgJHtTVVBQT1JUX1JFU1BPTlNFX1RBUkdFVFMuc3VwcG9ydF9wcmlvcml0eX0sIGJ1c2luZXNzIGhvdXJzYCxcbiAgfSxcbiAgc3VwcG9ydF9wcmVtaXVtOiB7XG4gICAgbGFiZWw6ICdQcmVtaXVtIFN1cHBvcnQnLFxuICAgIGRlc2NyaXB0aW9uOiBgMjTDlzcgc3VwcG9ydCBjYXNlcyDigJQgZmlyc3QgcmVzcG9uc2Ugd2l0aGluICR7U1VQUE9SVF9SRVNQT05TRV9UQVJHRVRTLnN1cHBvcnRfcHJlbWl1bX0gb2YgdGhlIHdlZWssIGFuZCB0aGUgb25seSBsZXZlbCB0aGF0IG1heSBkZWNsYXJlIHVyZ2VudCBzZXZlcml0eWAsXG4gIH0sXG4gIHZlcmlmaWVkX3B1Ymxpc2hlcjoge1xuICAgIGxhYmVsOiAnVmVyaWZpZWQgUHVibGlzaGVyIEVsaWdpYmlsaXR5JyxcbiAgICBkZXNjcmlwdGlvbjogJ0FwcGx5IGZvciB0aGUgVmVyaWZpZWQgYmFkZ2Ugb24geW91ciBwbHVnaW4tZWNvc3lzdGVtIHB1Ymxpc2hlciAoYXdhcmRlZCBieSBzeXN0ZW0tb3JnIHJldmlldyknLFxuICB9LFxufTtcblxuLy8gUmVzb2x1dGlvbiBsb2dpY1xuXG4vKipcbiAqIFJlc29sdmUgYSB1c2VyJ3MgZWZmZWN0aXZlIGZlYXR1cmUgc2V0LlxuICpcbiAqIDEuIFN5c2FkbWlucyAoaXNTdXBlckFkbWluKSBhbHdheXMgZ2V0IEFMTCBmZWF0dXJlcy5cbiAqIDIuIFN0YXJ0IHdpdGggdGhlIHRpZXIncyBkZWZhdWx0IGZlYXR1cmVzLlxuICogMy4gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzOiBgdHJ1ZWAgYWRkcyBhIGZlYXR1cmUsIGBmYWxzZWAgcmVtb3ZlcyBpdC5cbiAqIDQuIEludmFsaWQgb3ZlcnJpZGUga2V5cyBhcmUgc2lsZW50bHkgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0gdGllciAtIFRoZSBvcmdhbml6YXRpb24ncyBxdW90YSB0aWVyXG4gKiBAcGFyYW0gb3B0cyAtIFJlc29sdXRpb24gb3B0aW9uczpcbiAqICAgLSBgb3ZlcnJpZGVzYDogcGVyLXVzZXIgb3ZlcnJpZGVzIChrZXkgPSBmZWF0dXJlIGZsYWcsIHZhbHVlID0gZW5hYmxlZClcbiAqICAgLSBgaXNTdXBlckFkbWluYDogd2hldGhlciB0aGUgdXNlciBoYXMgdGhlIGdsb2JhbCBzdXBlci1hZG1pbiBmbGFnXG4gKiAgIC0gYGFjY291bnRGZWF0dXJlc2A6IGFjY291bnQtbGV2ZWwgZW50aXRsZW1lbnRzIChlLmcuIHB1cmNoYXNlZCBhZGQtb25cbiAqICAgICBidW5kbGVzKS4gQSBOQU1FRCBmaWVsZCBzbyBpdCBjYW4gbmV2ZXIgYmUgc2lsZW50bHkgZHJvcHBlZCBieSBhIGNhbGxlclxuICogICAgIHRoYXQgb21pdHMgYSB0cmFpbGluZyBwb3NpdGlvbmFsIGFyZy5cbiAqIEByZXR1cm5zIFNvcnRlZCBhcnJheSBvZiBlbmFibGVkIGZlYXR1cmUgZmxhZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVVc2VyRmVhdHVyZXMoXG4gIHRpZXI6IFF1b3RhVGllcixcbiAgb3B0cz86IHtcbiAgICBvdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB8IG51bGw7XG4gICAgaXNTdXBlckFkbWluPzogYm9vbGVhbjtcbiAgICBhY2NvdW50RmVhdHVyZXM/OiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gIH0sXG4pOiBGZWF0dXJlRmxhZ1tdIHtcbiAgY29uc3QgeyBvdmVycmlkZXM6IGZlYXR1cmVPdmVycmlkZXMsIGlzU3VwZXJBZG1pbiwgYWNjb3VudEZlYXR1cmVzIH0gPSBvcHRzID8/IHt9O1xuXG4gIC8vIFN5c2FkbWlucyBnZXQgZXZlcnl0aGluZyByZWdhcmRsZXNzIG9mIHRpZXIuXG4gIGlmIChpc1N1cGVyQWRtaW4pIHJldHVybiBbLi4uQUxMX0ZFQVRVUkVfRkxBR1NdO1xuXG4gIC8vIFN0YXJ0IHdpdGggdGllciBkZWZhdWx0c1xuICBjb25zdCBmZWF0dXJlcyA9IG5ldyBTZXQ8RmVhdHVyZUZsYWc+KFRJRVJfRkVBVFVSRVNbdGllcl0gPz8gW10pO1xuXG4gIC8vIEFjY291bnQtbGV2ZWwgZW50aXRsZW1lbnRzIChwdXJjaGFzZWQgZmVhdHVyZSBidW5kbGVzIOKAlCBlLmcuIGF1ZGl0X2xvZywgc3NvLFxuICAvLyBhZHZhbmNlZF9yZXBvcnRpbmcsIHRlYW1fdXNhZ2VfYW5hbHl0aWNzLCBjb21wbGlhbmNlX3N0YW5kYXJkL2FkdmFuY2VkKS5cbiAgLy8gQXBwbGllZCBiZWZvcmUgcGVyLXVzZXIgb3ZlcnJpZGVzIHNvIGFuIGV4cGxpY2l0IHVzZXIgb3ZlcnJpZGUgc3RpbGwgd2lucy5cbiAgaWYgKGFjY291bnRGZWF0dXJlcykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGFjY291bnRGZWF0dXJlcykge1xuICAgICAgaWYgKGlzVmFsaWRGZWF0dXJlRmxhZyhrZXkpKSBmZWF0dXJlcy5hZGQoa2V5KTtcbiAgICB9XG4gIH1cblxuICAvLyBBcHBseSBwZXItdXNlciBvdmVycmlkZXNcbiAgaWYgKGZlYXR1cmVPdmVycmlkZXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVuYWJsZWRdIG9mIE9iamVjdC5lbnRyaWVzKGZlYXR1cmVPdmVycmlkZXMpKSB7XG4gICAgICBpZiAoIWlzVmFsaWRGZWF0dXJlRmxhZyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIGZlYXR1cmVzLmFkZChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmVhdHVyZXMuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIGluIGNhbm9uaWNhbCBvcmRlclxuICByZXR1cm4gQUxMX0ZFQVRVUkVfRkxBR1MuZmlsdGVyKGYgPT4gZmVhdHVyZXMuaGFzKGYpKTtcbn1cblxuLyoqXG4gKiBDdXJhdGVkIGNvbXBsaWFuY2UgY29udGVudCBzZXRzIGFuZCB0aGUgZmVhdHVyZSBmbGFnIGVhY2ggb25lIGlzIHNvbGQgdW5kZXIuXG4gKiBBIHNldCBgeGAgaXMgdGhlIHB1Ymxpc2hlZCBydWxlcyB0YWdnZWQgYHNldDo8eD5gOyBhbiBvcmcgaG9sZGluZyB0aGUgZmxhZyBpc1xuICogZW50aXRsZWQgdG8gdGhlbS4gT3JkZXJlZCBmcm9tIHRoZSBsb3dlc3QgZW50aXRsZW1lbnQgdG8gdGhlIGhpZ2hlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QTElBTkNFX1NFVF9GRUFUVVJFUyA9IHtcbiAgc3RhbmRhcmQ6ICdjb21wbGlhbmNlX3N0YW5kYXJkJyxcbiAgYWR2YW5jZWQ6ICdjb21wbGlhbmNlX2FkdmFuY2VkJyxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIEZlYXR1cmVGbGFnPjtcblxuZXhwb3J0IHR5cGUgQ29tcGxpYW5jZUNvbnRlbnRTZXQgPSBrZXlvZiB0eXBlb2YgQ09NUExJQU5DRV9TRVRfRkVBVFVSRVM7XG5cbi8qKiBFdmVyeSBjdXJhdGVkIHNldCBuYW1lLCBsb3dlc3QgZW50aXRsZW1lbnQgZmlyc3QuICovXG5leHBvcnQgY29uc3QgQ09NUExJQU5DRV9DT05URU5UX1NFVFMgPSBPYmplY3Qua2V5cyhDT01QTElBTkNFX1NFVF9GRUFUVVJFUykgYXMgQ29tcGxpYW5jZUNvbnRlbnRTZXRbXTtcblxuLyoqIFRoZSBjdXJhdGVkIHNldHMgYW4gZWZmZWN0aXZlIGZlYXR1cmUgc2V0IGVudGl0bGVzIChzdGFibGUgb3JkZXIpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBsaWFuY2VTZXRzRm9yRmVhdHVyZXMoZmVhdHVyZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogQ29tcGxpYW5jZUNvbnRlbnRTZXRbXSB7XG4gIHJldHVybiBDT01QTElBTkNFX0NPTlRFTlRfU0VUUy5maWx0ZXIoKHNldCkgPT4gZmVhdHVyZXMuaW5jbHVkZXMoQ09NUExJQU5DRV9TRVRfRkVBVFVSRVNbc2V0XSkpO1xufVxuXG4vKipcbiAqIFRoZSBmZWF0dXJlIGEgcHVibGlzaGVkIHJ1bGUncyBgc2V0Ojx4PmAgdGFncyByZXF1aXJlLCBvciBgbnVsbGAgZm9yIGFuXG4gKiB1bnRhZ2dlZCAoYmFzZWxpbmUpIHJ1bGUuIFRoZSBoaWdoZXN0IGVudGl0bGVtZW50IHdpbnMgd2hlbiBhIHJ1bGUgY2Fycmllc1xuICogc2V2ZXJhbC4gQWNjZXB0cyBhIHJhdyBqc29uYiBgdGFnc2AgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGlhbmNlRmVhdHVyZUZvclRhZ3ModGFnczogdW5rbm93bik6IEZlYXR1cmVGbGFnIHwgbnVsbCB7XG4gIGNvbnN0IHQgPSBBcnJheS5pc0FycmF5KHRhZ3MpID8gdGFncyA6IFtdO1xuICBmb3IgKGNvbnN0IHNldCBvZiBbLi4uQ09NUExJQU5DRV9DT05URU5UX1NFVFNdLnJldmVyc2UoKSkge1xuICAgIGlmICh0LmluY2x1ZGVzKGBzZXQ6JHtzZXR9YCkpIHJldHVybiBDT01QTElBTkNFX1NFVF9GRUFUVVJFU1tzZXRdO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19
@@ -8,7 +8,7 @@ export * from './reserved-tags.js';
8
8
  export * from './quota-catalog.js';
9
9
  export * from './wire-vocabulary.js';
10
10
  export { type ComplianceExemptionRequest } from './compliance-exemption.js';
11
- export { PLUGIN_SUMMARY_MAX, PLUGIN_README_MAX_BYTES, PLUGIN_CHANGELOG_MAX_BYTES, PLUGIN_CATEGORIES, type PluginCatalogCategory, PLUGIN_CATALOG_FIELDS, type PluginCatalogField, PLUGIN_CATALOG_LINK_FIELDS, METADATA_SOURCES, type MetadataSource, type MetadataSources, } from './plugin-catalog.js';
11
+ export { PLUGIN_SUMMARY_MAX, PLUGIN_README_MAX_BYTES, PLUGIN_CHANGELOG_MAX_BYTES, PLUGIN_CATEGORIES, type PluginCatalogCategory, PLUGIN_CATALOG_FIELDS, type PluginCatalogField, PLUGIN_CATALOG_LINK_FIELDS, METADATA_SOURCES, type MetadataSource, type MetadataSources, MANAGED_TOOLCHAIN, TOOLCHAIN_RESOLVED_VIA, type ToolchainResolvedVia, TOOLCHAIN_RELEASE_STATUSES, type ToolchainReleaseStatus, TOOLCHAIN_METADATA_PREFIX, MANAGED_TOOLCHAIN_PLUGINS, type ManagedToolchainPlugin, isManagedToolchainPlugin, managedToolchainRefName, managedRefPinsVersion, toolchainReleasePin, BUILD_IMAGE_STEP_KEY, BUILD_IMAGE_MANIFEST_STAGE, BUILD_IMAGE_MANIFEST_ACTION, } from './plugin-catalog.js';
12
12
  export { type HttpRequest, } from './http.js';
13
13
  export { tierAllowsTeams, isBillingEnabled, isValidTier, getTierLimits, type QuotaTier, type QuotaTierLimits, QUOTA_TIERS, VALID_TIERS, STANDARD_TIERS, TEAM_CAPABLE_TIERS, SEAT_PACK_TIERS, seatRemedy, type SeatRemedy, DEFAULT_TIER, QUOTA_RESET_DAYS, CPU_CREDITS_PERIOD_DAYS, quotaPeriodDays, nextQuotaResetDate, AUTOMATION_CALLS_SIZING, automationCallsFor, quotaGracePct, enforcedQuotaLimit, } from './quota-tiers.js';
14
14
  export * from './build-catalog.js';
@@ -12,7 +12,7 @@ export * from './reserved-tags.js';
12
12
  export * from './quota-catalog.js';
13
13
  export * from './wire-vocabulary.js';
14
14
  export {} from './compliance-exemption.js';
15
- export { PLUGIN_SUMMARY_MAX, PLUGIN_README_MAX_BYTES, PLUGIN_CHANGELOG_MAX_BYTES, PLUGIN_CATEGORIES, PLUGIN_CATALOG_FIELDS, PLUGIN_CATALOG_LINK_FIELDS, METADATA_SOURCES, } from './plugin-catalog.js';
15
+ export { PLUGIN_SUMMARY_MAX, PLUGIN_README_MAX_BYTES, PLUGIN_CHANGELOG_MAX_BYTES, PLUGIN_CATEGORIES, PLUGIN_CATALOG_FIELDS, PLUGIN_CATALOG_LINK_FIELDS, METADATA_SOURCES, MANAGED_TOOLCHAIN, TOOLCHAIN_RESOLVED_VIA, TOOLCHAIN_RELEASE_STATUSES, TOOLCHAIN_METADATA_PREFIX, MANAGED_TOOLCHAIN_PLUGINS, isManagedToolchainPlugin, managedToolchainRefName, managedRefPinsVersion, toolchainReleasePin, BUILD_IMAGE_STEP_KEY, BUILD_IMAGE_MANIFEST_STAGE, BUILD_IMAGE_MANIFEST_ACTION, } from './plugin-catalog.js';
16
16
  export {} from './http.js';
17
17
  export { tierAllowsTeams, isBillingEnabled, isValidTier, getTierLimits, QUOTA_TIERS, VALID_TIERS, STANDARD_TIERS, TEAM_CAPABLE_TIERS, SEAT_PACK_TIERS, seatRemedy, DEFAULT_TIER, QUOTA_RESET_DAYS, CPU_CREDITS_PERIOD_DAYS, quotaPeriodDays, nextQuotaResetDate, AUTOMATION_CALLS_SIZING, automationCallsFor, quotaGracePct, enforcedQuotaLimit, } from './quota-tiers.js';
18
18
  // The build class/size catalog: ids, labels, credit multipliers, tier floors
@@ -33,4 +33,4 @@ export { isEcosystemNotificationEvent, parseEcosystemNotifyRequest, nextEcosyste
33
33
  export { publisherTermsVersion, publisherHandleProblem, isOfficialAutoApprovalEnabled, isPluginPublishingEnabled, isAnonymousSubmissionsEnabled, isPluginReviewsEnabled, OFFICIAL_CATALOG_LOADER_ACCOUNT, DEFAULT_PUBLISHER_TERMS_VERSION, BUILTIN_RESERVED_HANDLES, TENANT_REQUEST_KINDS, PUBLISH_PERMISSION_REQUEST_KINDS, VERIFY_REQUEST_KINDS, STEP_UP_REQUEST_KINDS, REQUEST_SLA_HOURS, } from './ecosystem.js';
34
34
  export { ageScore, vulnScore, computeHealthScore, publisherHealthScore, publisherSuccessRate, healthBand, HEALTH_COMPONENTS, HEALTH_WEIGHTS, } from './plugin-health.js';
35
35
  export { applyVulnWaivers, asScanFlag, describeFindings, describeFix, atOrAboveFailOn, exceedsVulnFloor, failOnLabel, gatedFindingCount, summaryContradicts, summaryDescribes, gatedFixableCount, isGatedFinding, newScanFindings, parseVulnWaivers, parseVulnWaiversVerbose, pluginVulnFailOn, pluginVulnGateKev, pluginVulnMaxFindings, SCAN_FLAG_TOP_FINDINGS, SCAN_SUMMARY_MAX_BINARIES, SCAN_SUMMARY_MAX_FINDINGS, scanFindingKey, vulnFlaggedMessage, vulnFlaggedWarning, vulnWaiverLabels, } from './plugin-scan.js';
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLFlBQVksRUFFWixlQUFlLEVBS2YsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixrQkFBa0IsR0FNbkIsTUFBTSxhQUFhLENBQUM7QUFDckIsY0FBYyxlQUFlLENBQUM7QUFDOUIsT0FBTyxFQU1OLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUVOLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGlGQUFpRjtBQUNqRixnRkFBZ0Y7QUFDaEYsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLE9BQU8sRUFBbUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QiwwQkFBMEIsRUFDMUIsaUJBQWlCLEVBRWpCLHFCQUFxQixFQUVyQiwwQkFBMEIsRUFDMUIsZ0JBQWdCLEdBR2pCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUVOLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxhQUFhLEVBR2IsV0FBVyxFQUNYLFdBQVcsRUFDWCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixVQUFVLEVBRVYsWUFBWSxFQUNaLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixrQkFBa0IsR0FDbkIs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LHlCQUF5QixFQUN6QixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixnQkFBZ0IsR0FVakIsTUFBTSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgeyBFcnJvckNvZGUsIGdldFN0YXR1c0ZvckVycm9yQ29kZSB9IGZyb20gJy4vZXJyb3ItY29kZXMuanMnO1xuZXhwb3J0IHtcbiAgaXNWYWxpZFF1b3RhVHlwZSxcbiAgdHlwZSBUb2tlblNjb3BlLFxuICBUT0tFTl9TQ09QRVMsXG4gIHR5cGUgUHJpbmNpcGFsVHlwZSxcbiAgUFJJTkNJUEFMX1RZUEVTLFxuICB0eXBlIFRva2VuVXNlLFxuICB0eXBlIEF1dGhNZXRob2QsXG4gIHR5cGUgQXNzdXJhbmNlTGV2ZWwsXG4gIHR5cGUgUXVvdGFUeXBlLFxuICBWQUxJRF9RVU9UQV9UWVBFUyxcbiAgUVVPVEFfVFlQRV9MQUJFTFMsXG4gIFFVT1RBX1VQR1JBREVfUEFUSCxcbiAgdHlwZSBRdW90YUNoZWNrUmVzdWx0LFxuICB0eXBlIFF1b3RhSW5mbyxcbiAgdHlwZSBBcGlSZXNwb25zZSxcbiAgdHlwZSBKd3RQYXlsb2FkLFxuICB0eXBlIEhlYWx0aENoZWNrUmVzcG9uc2UsXG59IGZyb20gJy4vY29tbW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBMaWZlY3ljbGUsXG4gIHR5cGUgQ3JpdGljYWxpdHksXG4gIHR5cGUgT3duZXJUeXBlLFxuICB0eXBlIEVudGl0eUxpbmssXG4gIHR5cGUgRW50aXR5TGFiZWxzLFxufSBmcm9tICcuL2NhdGFsb2ctbWV0YWRhdGEuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBUZW1wbGF0ZUlucHV0LFxufSBmcm9tICcuL3BpcGVsaW5lLXRlbXBsYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdmlzaWJpbGl0eS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc2VydmVkLXRhZ3MuanMnO1xuLy8gV2hhdCBlYWNoIHF1b3RhIHR5cGUgaXMgY2FsbGVkIGFuZCBob3cgaXRzIG51bWJlciByZW5kZXJzIOKAlCB0aGUgb25lIHNvdXJjZSB0aGVcbi8vIGJyb3dzZXIgYWxzbyBpbXBvcnRzIGRpcmVjdGx5IHZpYSBgQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUvcXVvdGEtY2F0YWxvZ2AuXG5leHBvcnQgKiBmcm9tICcuL3F1b3RhLWNhdGFsb2cuanMnO1xuZXhwb3J0ICogZnJvbSAnLi93aXJlLXZvY2FidWxhcnkuanMnO1xuZXhwb3J0IHsgdHlwZSBDb21wbGlhbmNlRXhlbXB0aW9uUmVxdWVzdCB9IGZyb20gJy4vY29tcGxpYW5jZS1leGVtcHRpb24uanMnO1xuZXhwb3J0IHtcbiAgUExVR0lOX1NVTU1BUllfTUFYLFxuICBQTFVHSU5fUkVBRE1FX01BWF9CWVRFUyxcbiAgUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMsXG4gIFBMVUdJTl9DQVRFR09SSUVTLFxuICB0eXBlIFBsdWdpbkNhdGFsb2dDYXRlZ29yeSxcbiAgUExVR0lOX0NBVEFMT0dfRklFTERTLFxuICB0eXBlIFBsdWdpbkNhdGFsb2dGaWVsZCxcbiAgUExVR0lOX0NBVEFMT0dfTElOS19GSUVMRFMsXG4gIE1FVEFEQVRBX1NPVVJDRVMsXG4gIHR5cGUgTWV0YWRhdGFTb3VyY2UsXG4gIHR5cGUgTWV0YWRhdGFTb3VyY2VzLFxufSBmcm9tICcuL3BsdWdpbi1jYXRhbG9nLmpzJztcbmV4cG9ydCB7XG4gIHR5cGUgSHR0cFJlcXVlc3QsXG59IGZyb20gJy4vaHR0cC5qcyc7XG5leHBvcnQge1xuICB0aWVyQWxsb3dzVGVhbXMsXG4gIGlzQmlsbGluZ0VuYWJsZWQsXG4gIGlzVmFsaWRUaWVyLFxuICBnZXRUaWVyTGltaXRzLFxuICB0eXBlIFF1b3RhVGllcixcbiAgdHlwZSBRdW90YVRpZXJMaW1pdHMsXG4gIFFVT1RBX1RJRVJTLFxuICBWQUxJRF9USUVSUyxcbiAgU1RBTkRBUkRfVElFUlMsXG4gIFRFQU1fQ0FQQUJMRV9USUVSUyxcbiAgU0VBVF9QQUNLX1RJRVJTLFxuICBzZWF0UmVtZWR5LFxuICB0eXBlIFNlYXRSZW1lZHksXG4gIERFRkFVTFRfVElFUixcbiAgUVVPVEFfUkVTRVRfREFZUyxcbiAgQ1BVX0NSRURJVFNfUEVSSU9EX0RBWVMsXG4gIHF1b3RhUGVyaW9kRGF5cyxcbiAgbmV4dFF1b3RhUmVzZXREYXRlLFxuICBBVVRPTUFUSU9OX0NBTExTX1NJWklORyxcbiAgYXV0b21hdGlvbkNhbGxzRm9yLFxuICBxdW90YUdyYWNlUGN0LFxuICBlbmZvcmNlZFF1b3RhTGltaXQsXG59IGZyb20gJy4vcXVvdGEtdGllcnMuanMnO1xuLy8gVGhlIGJ1aWxkIGNsYXNzL3NpemUgY2F0YWxvZzogaWRzLCBsYWJlbHMsIGNyZWRpdCBtdWx0aXBsaWVycywgdGllciBmbG9vcnNcbi8vIGFuZCBwZXItY2xhc3Mgc2xvdCBkZWZhdWx0cy4gRGVwZW5kZW5jeS1mcmVlLCBzbyB0aGUgYnJvd3NlciBpbXBvcnRzIGl0XG4vLyB0aHJvdWdoIHRoZSBgLi9idWlsZC1jYXRhbG9nYCBzdWJwYXRoIGluc3RlYWQgb2YgbWlycm9yaW5nIGl0LlxuZXhwb3J0ICogZnJvbSAnLi9idWlsZC1jYXRhbG9nLmpzJztcbi8vIFdoZXJlIGEgcXVvdGEgY291bnRlciBpcyBIRUFERUQuIERlcGVuZGVuY3ktZnJlZSBhbmQgYnJvd3Nlci1pbXBvcnRlZFxuLy8gdGhyb3VnaCBgLi91c2FnZS1wcm9qZWN0aW9uYCwgc28gdGhlIHF1b3RhIGNhcmQncyBmb3JlY2FzdCwgdGhlIHRocmVzaG9sZFxuLy8gbm90aWNlIGFuZCB0aGUgdXNhZ2UgcHJvZmlsZSdzIHRyYWplY3Rvcnkgc2lnbmFsIHNoYXJlIE9ORSBmb3JtdWxhLlxuZXhwb3J0ICogZnJvbSAnLi91c2FnZS1wcm9qZWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1mbGFncy5qcyc7XG5leHBvcnQge1xuICBwZXJtaXNzaW9uTGFiZWwsXG4gIGlzVmFsaWRQZXJtaXNzaW9uLFxuICBpc1N5c3RlbU9yZ09ubHlQZXJtaXNzaW9uLFxuICBpc09yZ0Fzc2lnbmFibGVQZXJtaXNzaW9uLFxuICBub3JtYWxpemVQZXJtaXNzaW9uU3Vic2V0LFxuICBpbnRlcnNlY3RQZXJtaXNzaW9ucyxcbiAgcmVzb2x2ZVVzZXJQZXJtaXNzaW9ucyxcbiAgY29uZmluZVBlcm1pc3Npb25zVG9PcmcsXG4gIGhhc1Blcm1pc3Npb24sXG4gIHR5cGUgUGVybWlzc2lvbixcbiAgQUxMX1BFUk1JU1NJT05TLFxuICBST0xFX1RFTVBMQVRFUyxcbiAgdHlwZSBSb2xlVGVtcGxhdGUsXG4gIFBFUk1JU1NJT05fQUNUSU9OUyxcbiAgUEVSTUlTU0lPTl9JRF9TSEFQRSxcbiAgUEVSTUlTU0lPTl9HQVRFUyxcbiAgUEVSTUlTU0lPTl9DQVRBTE9HLFxuICBTVVBFUkFETUlOX09OTFlfUEVSTUlTU0lPTlMsXG4gIFNZU1RFTV9PUkdfT05MWV9QRVJNSVNTSU9OUyxcbiAgT1JHX0FTU0lHTkFCTEVfUEVSTUlTU0lPTlMsXG4gIE9SR19BU1NJR05BQkxFX0NBVEVHT1JJRVMsXG4gIFJFQURfT05MWV9QRVJNSVNTSU9OUyxcbiAgUk9MRV9QRVJNSVNTSU9OUyxcbiAgRUNPU1lTVEVNX01BTkFHRVJfUEVSTUlTU0lPTlMsXG4gIFBVQkxJU0hFUl9WRVJJRklFUl9QRVJNSVNTSU9OUyxcbiAgUExBVEZPUk1fT1BFUkFUT1JfUEVSTUlTU0lPTlMsXG4gIEFDQ09VTlRfTUFOQUdFUl9QRVJNSVNTSU9OUyxcbiAgQ09OU09MRV9BRE1JTl9QRVJNSVNTSU9OUyxcbiAgUExBVEZPUk1fT0JTRVJWRVJfUEVSTUlTU0lPTlMsXG4gIFNVUFBPUlRfQUdFTlRfUEVSTUlTU0lPTlMsXG4gIFNVUFBPUlRfTEVBRF9QRVJNSVNTSU9OUyxcbiAgU0VFRF9CVU5ETEVTLFxuICBTRUVEX0JVTkRMRV9JRFMsXG4gIFNZU1RFTV9PUkdfSk9CX0JVTkRMRVMsXG4gIE9SR19BVVRPTUFUSU9OX0JVTkRMRVMsXG4gIEFVVE9NQVRJT05fQUNDT1VOVF9CVU5ETEVTLFxuICB0eXBlIFNlZWRCdW5kbGVJZCxcbiAgUkVHSVNUUllfT1BFUkFUT1JfUEVSTUlTU0lPTlMsXG4gIFRFQU1fTEVBRF9QRVJNSVNTSU9OUyxcbiAgUElQRUxJTkVfQVVUT01BVElPTl9QRVJNSVNTSU9OUyxcbiAgUElQRUxJTkVfUkVHSVNUUkFUSU9OX1BFUk1JU1NJT05TLFxufSBmcm9tICcuL3Blcm1pc3Npb25zLmpzJztcbmV4cG9ydCB7XG4gIE1FVEFEQVRBX0tFWV9DQVRBTE9HLFxuICBNZXRhZGF0YUtleXMsXG4gIHR5cGUgTWV0YWRhdGFLZXksXG4gIHR5cGUgTWV0YWRhdGFLZXlPcHRpb24sXG4gIE1FVEFEQVRBX0tFWV9HUk9VUFMsXG59IGZyb20gJy4vbWV0YWRhdGEta2V5cy5qcyc7XG5leHBvcnQge1xuICB0eXBlIEF1ZGl0RXZlbnQsXG59IGZyb20gJy4vYXVkaXQtZXZlbnRzLmpzJztcbmV4cG9ydCB7XG4gIFJFTU9URV9BVURJVF9BQ1RJT05TLFxuICBpc1JlbW90ZUF1ZGl0QWN0aW9uLFxuICB0eXBlIFJlbW90ZUF1ZGl0QWN0aW9uLFxufSBmcm9tICcuL3JlbW90ZS1hdWRpdC1hY3Rpb25zLmpzJztcbmV4cG9ydCB7XG4gIEFTS19BR0VOVF9QUk9QT1NFUixcbiAgQVNLX1BST1BPU0VEX0JZX0hFQURFUixcbiAgUFJPUE9TRURfQllfREVUQUlMX0tFWSxcbiAgYXNrUHJvcG9zYWxBdWRpdERldGFpbHMsXG4gIHJlYWRQcm9wb3NlckNsYWltLFxuICB3aXRoUHJvcG9zYWxQcm92ZW5hbmNlLFxuICBBU0tfUFJPUE9TQUxfUEVSTUlTU0lPTixcbiAgT1JHX1NFVFRJTkdfUFJPUE9TQUxfQUxMT1dMSVNULFxuICBPUkdfU0VUVElOR19QUk9QT1NBTF9FWENMVVNJT05TLFxuICBPUkdfU0VUVElOR19QUk9QT1NBTF9LRVlTLFxuICBpc1Byb3Bvc2FibGVPcmdTZXR0aW5nLFxuICBpc1ZhbGlkT3JnU2V0dGluZ1ZhbHVlLFxuICBvcmdTZXR0aW5nU3BlYyxcbiAgcGlja0FsbG93ZWQsXG4gIGRpZmZPcmdTZXR0aW5ncyxcbiAgb3JnU2V0dGluZ1JlcXVlc3RzLFxuICB0eXBlIEFza1Byb3Bvc2FsS2luZCxcbiAgdHlwZSBBc2tQcm9wb3NhbFByb3ZlbmFuY2UsXG4gIHR5cGUgUHJvcG9zZXJDbGFpbSxcbiAgdHlwZSBPcmdTZXR0aW5nQ2hhbmdlLFxuICB0eXBlIE9yZ1NldHRpbmdLZXksXG4gIHR5cGUgT3JnU2V0dGluZ1BhdGNoLFxuICB0eXBlIE9yZ1NldHRpbmdSZXF1ZXN0LFxuICB0eXBlIE9yZ1NldHRpbmdTaGFwZSxcbiAgdHlwZSBPcmdTZXR0aW5nU3BlYyxcbiAgdHlwZSBPcmdTZXR0aW5nU3VyZmFjZSxcbiAgdHlwZSBPcmdTZXR0aW5nVmFsdWUsXG4gIHR5cGUgUGlja0FsbG93ZWRSZXN1bHQsXG59IGZyb20gJy4vYXNrLXByb3Bvc2Fscy5qcyc7XG5leHBvcnQge1xuICBpc0Vjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50LFxuICBwYXJzZUVjb3N5c3RlbU5vdGlmeVJlcXVlc3QsXG4gIG5leHRFY29zeXN0ZW1EaWdlc3RUaW1lLFxuICByZW5kZXJFY29zeXN0ZW1NYW5hZ2VyQ2hhbmdlLFxuICByZW5kZXJFY29zeXN0ZW1EaWdlc3QsXG4gIHR5cGUgRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCxcbiAgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsLFxuICBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFMsXG4gIHR5cGUgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGQsXG4gIEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEX05BTUVTLFxuICBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UUyxcbiAgdHlwZSBFY29zeXN0ZW1SZWNpcGllbnRTcGVjLFxuICB0eXBlIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3QsXG59IGZyb20gJy4vZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMnO1xuZXhwb3J0IHtcbiAgcHVibGlzaGVyVGVybXNWZXJzaW9uLFxuICBwdWJsaXNoZXJIYW5kbGVQcm9ibGVtLFxuICBpc09mZmljaWFsQXV0b0FwcHJvdmFsRW5hYmxlZCxcbiAgaXNQbHVnaW5QdWJsaXNoaW5nRW5hYmxlZCxcbiAgaXNBbm9ueW1vdXNTdWJtaXNzaW9uc0VuYWJsZWQsXG4gIGlzUGx1Z2luUmV2aWV3c0VuYWJsZWQsXG4gIE9GRklDSUFMX0NBVEFMT0dfTE9BREVSX0FDQ09VTlQsXG4gIERFRkFVTFRfUFVCTElTSEVSX1RFUk1TX1ZFUlNJT04sXG4gIEJVSUxUSU5fUkVTRVJWRURfSEFORExFUyxcbiAgVEVOQU5UX1JFUVVFU1RfS0lORFMsXG4gIFBVQkxJU0hfUEVSTUlTU0lPTl9SRVFVRVNUX0tJTkRTLFxuICBWRVJJRllfUkVRVUVTVF9LSU5EUyxcbiAgU1RFUF9VUF9SRVFVRVNUX0tJTkRTLFxuICBSRVFVRVNUX1NMQV9IT1VSUyxcbn0gZnJvbSAnLi9lY29zeXN0ZW0uanMnO1xuZXhwb3J0IHtcbiAgYWdlU2NvcmUsXG4gIHZ1bG5TY29yZSxcbiAgY29tcHV0ZUhlYWx0aFNjb3JlLFxuICBwdWJsaXNoZXJIZWFsdGhTY29yZSxcbiAgcHVibGlzaGVyU3VjY2Vzc1JhdGUsXG4gIGhlYWx0aEJhbmQsXG4gIEhFQUxUSF9DT01QT05FTlRTLFxuICBIRUFMVEhfV0VJR0hUUyxcbiAgdHlwZSBIZWFsdGhCcmVha2Rvd24sXG4gIHR5cGUgSGVhbHRoQ29tcG9uZW50U2NvcmUsXG4gIHR5cGUgSGVhbHRoUmVzdWx0LFxuICB0eXBlIEhlYWx0aElucHV0cyxcbiAgdHlwZSBIZWFsdGhCYW5kLFxufSBmcm9tICcuL3BsdWdpbi1oZWFsdGguanMnO1xuZXhwb3J0IHtcbiAgYXBwbHlWdWxuV2FpdmVycyxcbiAgYXNTY2FuRmxhZyxcbiAgZGVzY3JpYmVGaW5kaW5ncyxcbiAgZGVzY3JpYmVGaXgsXG4gIGF0T3JBYm92ZUZhaWxPbixcbiAgZXhjZWVkc1Z1bG5GbG9vcixcbiAgZmFpbE9uTGFiZWwsXG4gIGdhdGVkRmluZGluZ0NvdW50LFxuICBzdW1tYXJ5Q29udHJhZGljdHMsXG4gIHN1bW1hcnlEZXNjcmliZXMsXG4gIGdhdGVkRml4YWJsZUNvdW50LFxuICBpc0dhdGVkRmluZGluZyxcbiAgbmV3U2NhbkZpbmRpbmdzLFxuICBwYXJzZVZ1bG5XYWl2ZXJzLFxuICBwYXJzZVZ1bG5XYWl2ZXJzVmVyYm9zZSxcbiAgcGx1Z2luVnVsbkZhaWxPbixcbiAgcGx1Z2luVnVsbkdhdGVLZXYsXG4gIHBsdWdpblZ1bG5NYXhGaW5kaW5ncyxcbiAgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyxcbiAgU0NBTl9TVU1NQVJZX01BWF9CSU5BUklFUyxcbiAgU0NBTl9TVU1NQVJZX01BWF9GSU5ESU5HUyxcbiAgc2NhbkZpbmRpbmdLZXksXG4gIHZ1bG5GbGFnZ2VkTWVzc2FnZSxcbiAgdnVsbkZsYWdnZWRXYXJuaW5nLFxuICB2dWxuV2FpdmVyTGFiZWxzLFxuICB0eXBlIFBsdWdpblNjYW5GaW5kaW5nLFxuICB0eXBlIFBsdWdpblNjYW5GbGFnLFxuICB0eXBlIFBsdWdpblZ1bG5GYWlsT24sXG4gIHR5cGUgUGx1Z2luU2NhblN1bW1hcnksXG4gIHR5cGUgVnVsbkZsYWdnZWRXYXJuaW5nLFxuICB0eXBlIFZ1bG5XYWl2ZXIsXG4gIHR5cGUgVnVsbldhaXZlclBhcnNlLFxuICB0eXBlIFZ1bG5XYWl2ZXJQcm9ibGVtLFxuICB0eXBlIFdhaXZlck91dGNvbWUsXG59IGZyb20gJy4vcGx1Z2luLXNjYW4uanMnO1xuIl19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLFlBQVksRUFFWixlQUFlLEVBS2YsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixrQkFBa0IsR0FNbkIsTUFBTSxhQUFhLENBQUM7QUFDckIsY0FBYyxlQUFlLENBQUM7QUFDOUIsT0FBTyxFQU1OLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUVOLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGlGQUFpRjtBQUNqRixnRkFBZ0Y7QUFDaEYsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLE9BQU8sRUFBbUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QiwwQkFBMEIsRUFDMUIsaUJBQWlCLEVBRWpCLHFCQUFxQixFQUVyQiwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBR2hCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFFdEIsMEJBQTBCLEVBRTFCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFFekIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQiwwQkFBMEIsRUFDMUIsMkJBQTJCLEdBQzVCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUVOLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxhQUFhLEVBR2IsV0FBVyxFQUNYLFdBQVcs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LEVBQ2pCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixnQkFBZ0IsR0FVakIsTUFBTSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgeyBFcnJvckNvZGUsIGdldFN0YXR1c0ZvckVycm9yQ29kZSB9IGZyb20gJy4vZXJyb3ItY29kZXMuanMnO1xuZXhwb3J0IHtcbiAgaXNWYWxpZFF1b3RhVHlwZSxcbiAgdHlwZSBUb2tlblNjb3BlLFxuICBUT0tFTl9TQ09QRVMsXG4gIHR5cGUgUHJpbmNpcGFsVHlwZSxcbiAgUFJJTkNJUEFMX1RZUEVTLFxuICB0eXBlIFRva2VuVXNlLFxuICB0eXBlIEF1dGhNZXRob2QsXG4gIHR5cGUgQXNzdXJhbmNlTGV2ZWwsXG4gIHR5cGUgUXVvdGFUeXBlLFxuICBWQUxJRF9RVU9UQV9UWVBFUyxcbiAgUVVPVEFfVFlQRV9MQUJFTFMsXG4gIFFVT1RBX1VQR1JBREVfUEFUSCxcbiAgdHlwZSBRdW90YUNoZWNrUmVzdWx0LFxuICB0eXBlIFF1b3RhSW5mbyxcbiAgdHlwZSBBcGlSZXNwb25zZSxcbiAgdHlwZSBKd3RQYXlsb2FkLFxuICB0eXBlIEhlYWx0aENoZWNrUmVzcG9uc2UsXG59IGZyb20gJy4vY29tbW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBMaWZlY3ljbGUsXG4gIHR5cGUgQ3JpdGljYWxpdHksXG4gIHR5cGUgT3duZXJUeXBlLFxuICB0eXBlIEVudGl0eUxpbmssXG4gIHR5cGUgRW50aXR5TGFiZWxzLFxufSBmcm9tICcuL2NhdGFsb2ctbWV0YWRhdGEuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBUZW1wbGF0ZUlucHV0LFxufSBmcm9tICcuL3BpcGVsaW5lLXRlbXBsYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdmlzaWJpbGl0eS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc2VydmVkLXRhZ3MuanMnO1xuLy8gV2hhdCBlYWNoIHF1b3RhIHR5cGUgaXMgY2FsbGVkIGFuZCBob3cgaXRzIG51bWJlciByZW5kZXJzIOKAlCB0aGUgb25lIHNvdXJjZSB0aGVcbi8vIGJyb3dzZXIgYWxzbyBpbXBvcnRzIGRpcmVjdGx5IHZpYSBgQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUvcXVvdGEtY2F0YWxvZ2AuXG5leHBvcnQgKiBmcm9tICcuL3F1b3RhLWNhdGFsb2cuanMnO1xuZXhwb3J0ICogZnJvbSAnLi93aXJlLXZvY2FidWxhcnkuanMnO1xuZXhwb3J0IHsgdHlwZSBDb21wbGlhbmNlRXhlbXB0aW9uUmVxdWVzdCB9IGZyb20gJy4vY29tcGxpYW5jZS1leGVtcHRpb24uanMnO1xuZXhwb3J0IHtcbiAgUExVR0lOX1NVTU1BUllfTUFYLFxuICBQTFVHSU5fUkVBRE1FX01BWF9CWVRFUyxcbiAgUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMsXG4gIFBMVUdJTl9DQVRFR09SSUVTLFxuICB0eXBlIFBsdWdpbkNhdGFsb2dDYXRlZ29yeSxcbiAgUExVR0lOX0NBVEFMT0dfRklFTERTLFxuICB0eXBlIFBsdWdpbkNhdGFsb2dGaWVsZCxcbiAgUExVR0lOX0NBVEFMT0dfTElOS19GSUVMRFMsXG4gIE1FVEFEQVRBX1NPVVJDRVMsXG4gIHR5cGUgTWV0YWRhdGFTb3VyY2UsXG4gIHR5cGUgTWV0YWRhdGFTb3VyY2VzLFxuICBNQU5BR0VEX1RPT0xDSEFJTixcbiAgVE9PTENIQUlOX1JFU09MVkVEX1ZJQSxcbiAgdHlwZSBUb29sY2hhaW5SZXNvbHZlZFZpYSxcbiAgVE9PTENIQUlOX1JFTEVBU0VfU1RBVFVTRVMsXG4gIHR5cGUgVG9vbGNoYWluUmVsZWFzZVN0YXR1cyxcbiAgVE9PTENIQUlOX01FVEFEQVRBX1BSRUZJWCxcbiAgTUFOQUdFRF9UT09MQ0hBSU5fUExVR0lOUyxcbiAgdHlwZSBNYW5hZ2VkVG9vbGNoYWluUGx1Z2luLFxuICBpc01hbmFnZWRUb29sY2hhaW5QbHVnaW4sXG4gIG1hbmFnZWRUb29sY2hhaW5SZWZOYW1lLFxuICBtYW5hZ2VkUmVmUGluc1ZlcnNpb24sXG4gIHRvb2xjaGFpblJlbGVhc2VQaW4sXG4gIEJVSUxEX0lNQUdFX1NURVBfS0VZLFxuICBCVUlMRF9JTUFHRV9NQU5JRkVTVF9TVEFHRSxcbiAgQlVJTERfSU1BR0VfTUFOSUZFU1RfQUNUSU9OLFxufSBmcm9tICcuL3BsdWdpbi1jYXRhbG9nLmpzJztcbmV4cG9ydCB7XG4gIHR5cGUgSHR0cFJlcXVlc3QsXG59IGZyb20gJy4vaHR0cC5qcyc7XG5leHBvcnQge1xuICB0aWVyQWxsb3dzVGVhbXMsXG4gIGlzQmlsbGluZ0VuYWJsZWQsXG4gIGlzVmFsaWRUaWVyLFxuICBnZXRUaWVyTGltaXRzLFxuICB0eXBlIFF1b3RhVGllcixcbiAgdHlwZSBRdW90YVRpZXJMaW1pdHMsXG4gIFFVT1RBX1RJRVJTLFxuICBWQUxJRF9USUVSUyxcbiAgU1RBTkRBUkRfVElFUlMsXG4gIFRFQU1fQ0FQQUJMRV9USUVSUyxcbiAgU0VBVF9QQUNLX1RJRVJTLFxuICBzZWF0UmVtZWR5LFxuICB0eXBlIFNlYXRSZW1lZHksXG4gIERFRkFVTFRfVElFUixcbiAgUVVPVEFfUkVTRVRfREFZUyxcbiAgQ1BVX0NSRURJVFNfUEVSSU9EX0RBWVMsXG4gIHF1b3RhUGVyaW9kRGF5cyxcbiAgbmV4dFF1b3RhUmVzZXREYXRlLFxuICBBVVRPTUFUSU9OX0NBTExTX1NJWklORyxcbiAgYXV0b21hdGlvbkNhbGxzRm9yLFxuICBxdW90YUdyYWNlUGN0LFxuICBlbmZvcmNlZFF1b3RhTGltaXQsXG59IGZyb20gJy4vcXVvdGEtdGllcnMuanMnO1xuLy8gVGhlIGJ1aWxkIGNsYXNzL3NpemUgY2F0YWxvZzogaWRzLCBsYWJlbHMsIGNyZWRpdCBtdWx0aXBsaWVycywgdGllciBmbG9vcnNcbi8vIGFuZCBwZXItY2xhc3Mgc2xvdCBkZWZhdWx0cy4gRGVwZW5kZW5jeS1mcmVlLCBzbyB0aGUgYnJvd3NlciBpbXBvcnRzIGl0XG4vLyB0aHJvdWdoIHRoZSBgLi9idWlsZC1jYXRhbG9nYCBzdWJwYXRoIGluc3RlYWQgb2YgbWlycm9yaW5nIGl0LlxuZXhwb3J0ICogZnJvbSAnLi9idWlsZC1jYXRhbG9nLmpzJztcbi8vIFdoZXJlIGEgcXVvdGEgY291bnRlciBpcyBIRUFERUQuIERlcGVuZGVuY3ktZnJlZSBhbmQgYnJvd3Nlci1pbXBvcnRlZFxuLy8gdGhyb3VnaCBgLi91c2FnZS1wcm9qZWN0aW9uYCwgc28gdGhlIHF1b3RhIGNhcmQncyBmb3JlY2FzdCwgdGhlIHRocmVzaG9sZFxuLy8gbm90aWNlIGFuZCB0aGUgdXNhZ2UgcHJvZmlsZSdzIHRyYWplY3Rvcnkgc2lnbmFsIHNoYXJlIE9ORSBmb3JtdWxhLlxuZXhwb3J0ICogZnJvbSAnLi91c2FnZS1wcm9qZWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmVhdHVyZS1mbGFncy5qcyc7XG5leHBvcnQge1xuICBwZXJtaXNzaW9uTGFiZWwsXG4gIGlzVmFsaWRQZXJtaXNzaW9uLFxuICBpc1N5c3RlbU9yZ09ubHlQZXJtaXNzaW9uLFxuICBpc09yZ0Fzc2lnbmFibGVQZXJtaXNzaW9uLFxuICBub3JtYWxpemVQZXJtaXNzaW9uU3Vic2V0LFxuICBpbnRlcnNlY3RQZXJtaXNzaW9ucyxcbiAgcmVzb2x2ZVVzZXJQZXJtaXNzaW9ucyxcbiAgY29uZmluZVBlcm1pc3Npb25zVG9PcmcsXG4gIGhhc1Blcm1pc3Npb24sXG4gIHR5cGUgUGVybWlzc2lvbixcbiAgQUxMX1BFUk1JU1NJT05TLFxuICBST0xFX1RFTVBMQVRFUyxcbiAgdHlwZSBSb2xlVGVtcGxhdGUsXG4gIFBFUk1JU1NJT05fQUNUSU9OUyxcbiAgUEVSTUlTU0lPTl9JRF9TSEFQRSxcbiAgUEVSTUlTU0lPTl9HQVRFUyxcbiAgUEVSTUlTU0lPTl9DQVRBTE9HLFxuICBTVVBFUkFETUlOX09OTFlfUEVSTUlTU0lPTlMsXG4gIFNZU1RFTV9PUkdfT05MWV9QRVJNSVNTSU9OUyxcbiAgT1JHX0FTU0lHTkFCTEVfUEVSTUlTU0lPTlMsXG4gIE9SR19BU1NJR05BQkxFX0NBVEVHT1JJRVMsXG4gIFJFQURfT05MWV9QRVJNSVNTSU9OUyxcbiAgUk9MRV9QRVJNSVNTSU9OUyxcbiAgRUNPU1lTVEVNX01BTkFHRVJfUEVSTUlTU0lPTlMsXG4gIFBVQkxJU0hFUl9WRVJJRklFUl9QRVJNSVNTSU9OUyxcbiAgUExBVEZPUk1fT1BFUkFUT1JfUEVSTUlTU0lPTlMsXG4gIEFDQ09VTlRfTUFOQUdFUl9QRVJNSVNTSU9OUyxcbiAgQ09OU09MRV9BRE1JTl9QRVJNSVNTSU9OUyxcbiAgUExBVEZPUk1fT0JTRVJWRVJfUEVSTUlTU0lPTlMsXG4gIFNVUFBPUlRfQUdFTlRfUEVSTUlTU0lPTlMsXG4gIFNVUFBPUlRfTEVBRF9QRVJNSVNTSU9OUyxcbiAgU0VFRF9CVU5ETEVTLFxuICBTRUVEX0JVTkRMRV9JRFMsXG4gIFNZU1RFTV9PUkdfSk9CX0JVTkRMRVMsXG4gIE9SR19BVVRPTUFUSU9OX0JVTkRMRVMsXG4gIEFVVE9NQVRJT05fQUNDT1VOVF9CVU5ETEVTLFxuICB0eXBlIFNlZWRCdW5kbGVJZCxcbiAgUkVHSVNUUllfT1BFUkFUT1JfUEVSTUlTU0lPTlMsXG4gIFRFQU1fTEVBRF9QRVJNSVNTSU9OUyxcbiAgUElQRUxJTkVfQVVUT01BVElPTl9QRVJNSVNTSU9OUyxcbiAgUElQRUxJTkVfUkVHSVNUUkFUSU9OX1BFUk1JU1NJT05TLFxufSBmcm9tICcuL3Blcm1pc3Npb25zLmpzJztcbmV4cG9ydCB7XG4gIE1FVEFEQVRBX0tFWV9DQVRBTE9HLFxuICBNZXRhZGF0YUtleXMsXG4gIHR5cGUgTWV0YWRhdGFLZXksXG4gIHR5cGUgTWV0YWRhdGFLZXlPcHRpb24sXG4gIE1FVEFEQVRBX0tFWV9HUk9VUFMsXG59IGZyb20gJy4vbWV0YWRhdGEta2V5cy5qcyc7XG5leHBvcnQge1xuICB0eXBlIEF1ZGl0RXZlbnQsXG59IGZyb20gJy4vYXVkaXQtZXZlbnRzLmpzJztcbmV4cG9ydCB7XG4gIFJFTU9URV9BVURJVF9BQ1RJT05TLFxuICBpc1JlbW90ZUF1ZGl0QWN0aW9uLFxuICB0eXBlIFJlbW90ZUF1ZGl0QWN0aW9uLFxufSBmcm9tICcuL3JlbW90ZS1hdWRpdC1hY3Rpb25zLmpzJztcbmV4cG9ydCB7XG4gIEFTS19BR0VOVF9QUk9QT1NFUixcbiAgQVNLX1BST1BPU0VEX0JZX0hFQURFUixcbiAgUFJPUE9TRURfQllfREVUQUlMX0tFWSxcbiAgYXNrUHJvcG9zYWxBdWRpdERldGFpbHMsXG4gIHJlYWRQcm9wb3NlckNsYWltLFxuICB3aXRoUHJvcG9zYWxQcm92ZW5hbmNlLFxuICBBU0tfUFJPUE9TQUxfUEVSTUlTU0lPTixcbiAgT1JHX1NFVFRJTkdfUFJPUE9TQUxfQUxMT1dMSVNULFxuICBPUkdfU0VUVElOR19QUk9QT1NBTF9FWENMVVNJT05TLFxuICBPUkdfU0VUVElOR19QUk9QT1NBTF9LRVlTLFxuICBpc1Byb3Bvc2FibGVPcmdTZXR0aW5nLFxuICBpc1ZhbGlkT3JnU2V0dGluZ1ZhbHVlLFxuICBvcmdTZXR0aW5nU3BlYyxcbiAgcGlja0FsbG93ZWQsXG4gIGRpZmZPcmdTZXR0aW5ncyxcbiAgb3JnU2V0dGluZ1JlcXVlc3RzLFxuICB0eXBlIEFza1Byb3Bvc2FsS2luZCxcbiAgdHlwZSBBc2tQcm9wb3NhbFByb3ZlbmFuY2UsXG4gIHR5cGUgUHJvcG9zZXJDbGFpbSxcbiAgdHlwZSBPcmdTZXR0aW5nQ2hhbmdlLFxuICB0eXBlIE9yZ1NldHRpbmdLZXksXG4gIHR5cGUgT3JnU2V0dGluZ1BhdGNoLFxuICB0eXBlIE9yZ1NldHRpbmdSZXF1ZXN0LFxuICB0eXBlIE9yZ1NldHRpbmdTaGFwZSxcbiAgdHlwZSBPcmdTZXR0aW5nU3BlYyxcbiAgdHlwZSBPcmdTZXR0aW5nU3VyZmFjZSxcbiAgdHlwZSBPcmdTZXR0aW5nVmFsdWUsXG4gIHR5cGUgUGlja0FsbG93ZWRSZXN1bHQsXG59IGZyb20gJy4vYXNrLXByb3Bvc2Fscy5qcyc7XG5leHBvcnQge1xuICBpc0Vjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50LFxuICBwYXJzZUVjb3N5c3RlbU5vdGlmeVJlcXVlc3QsXG4gIG5leHRFY29zeXN0ZW1EaWdlc3RUaW1lLFxuICByZW5kZXJFY29zeXN0ZW1NYW5hZ2VyQ2hhbmdlLFxuICByZW5kZXJFY29zeXN0ZW1EaWdlc3QsXG4gIHR5cGUgRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCxcbiAgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsLFxuICBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFMsXG4gIHR5cGUgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGQsXG4gIEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEX05BTUVTLFxuICBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UUyxcbiAgdHlwZSBFY29zeXN0ZW1SZWNpcGllbnRTcGVjLFxuICB0eXBlIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3QsXG59IGZyb20gJy4vZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMnO1xuZXhwb3J0IHtcbiAgcHVibGlzaGVyVGVybXNWZXJzaW9uLFxuICBwdWJsaXNoZXJIYW5kbGVQcm9ibGVtLFxuICBpc09mZmljaWFsQXV0b0FwcHJvdmFsRW5hYmxlZCxcbiAgaXNQbHVnaW5QdWJsaXNoaW5nRW5hYmxlZCxcbiAgaXNBbm9ueW1vdXNTdWJtaXNzaW9uc0VuYWJsZWQsXG4gIGlzUGx1Z2luUmV2aWV3c0VuYWJsZWQsXG4gIE9GRklDSUFMX0NBVEFMT0dfTE9BREVSX0FDQ09VTlQsXG4gIERFRkFVTFRfUFVCTElTSEVSX1RFUk1TX1ZFUlNJT04sXG4gIEJVSUxUSU5fUkVTRVJWRURfSEFORExFUyxcbiAgVEVOQU5UX1JFUVVFU1RfS0lORFMsXG4gIFBVQkxJU0hfUEVSTUlTU0lPTl9SRVFVRVNUX0tJTkRTLFxuICBWRVJJRllfUkVRVUVTVF9LSU5EUyxcbiAgU1RFUF9VUF9SRVFVRVNUX0tJTkRTLFxuICBSRVFVRVNUX1NMQV9IT1VSUyxcbn0gZnJvbSAnLi9lY29zeXN0ZW0uanMnO1xuZXhwb3J0IHtcbiAgYWdlU2NvcmUsXG4gIHZ1bG5TY29yZSxcbiAgY29tcHV0ZUhlYWx0aFNjb3JlLFxuICBwdWJsaXNoZXJIZWFsdGhTY29yZSxcbiAgcHVibGlzaGVyU3VjY2Vzc1JhdGUsXG4gIGhlYWx0aEJhbmQsXG4gIEhFQUxUSF9DT01QT05FTlRTLFxuICBIRUFMVEhfV0VJR0hUUyxcbiAgdHlwZSBIZWFsdGhCcmVha2Rvd24sXG4gIHR5cGUgSGVhbHRoQ29tcG9uZW50U2NvcmUsXG4gIHR5cGUgSGVhbHRoUmVzdWx0LFxuICB0eXBlIEhlYWx0aElucHV0cyxcbiAgdHlwZSBIZWFsdGhCYW5kLFxufSBmcm9tICcuL3BsdWdpbi1oZWFsdGguanMnO1xuZXhwb3J0IHtcbiAgYXBwbHlWdWxuV2FpdmVycyxcbiAgYXNTY2FuRmxhZyxcbiAgZGVzY3JpYmVGaW5kaW5ncyxcbiAgZGVzY3JpYmVGaXgsXG4gIGF0T3JBYm92ZUZhaWxPbixcbiAgZXhjZWVkc1Z1bG5GbG9vcixcbiAgZmFpbE9uTGFiZWwsXG4gIGdhdGVkRmluZGluZ0NvdW50LFxuICBzdW1tYXJ5Q29udHJhZGljdHMsXG4gIHN1bW1hcnlEZXNjcmliZXMsXG4gIGdhdGVkRml4YWJsZUNvdW50LFxuICBpc0dhdGVkRmluZGluZyxcbiAgbmV3U2NhbkZpbmRpbmdzLFxuICBwYXJzZVZ1bG5XYWl2ZXJzLFxuICBwYXJzZVZ1bG5XYWl2ZXJzVmVyYm9zZSxcbiAgcGx1Z2luVnVsbkZhaWxPbixcbiAgcGx1Z2luVnVsbkdhdGVLZXYsXG4gIHBsdWdpblZ1bG5NYXhGaW5kaW5ncyxcbiAgU0NBTl9GTEFHX1RPUF9GSU5ESU5HUyxcbiAgU0NBTl9TVU1NQVJZX01BWF9CSU5BUklFUyxcbiAgU0NBTl9TVU1NQVJZX01BWF9GSU5ESU5HUyxcbiAgc2NhbkZpbmRpbmdLZXksXG4gIHZ1bG5GbGFnZ2VkTWVzc2FnZSxcbiAgdnVsbkZsYWdnZWRXYXJuaW5nLFxuICB2dWxuV2FpdmVyTGFiZWxzLFxuICB0eXBlIFBsdWdpblNjYW5GaW5kaW5nLFxuICB0eXBlIFBsdWdpblNjYW5GbGFnLFxuICB0eXBlIFBsdWdpblZ1bG5GYWlsT24sXG4gIHR5cGUgUGx1Z2luU2NhblN1bW1hcnksXG4gIHR5cGUgVnVsbkZsYWdnZWRXYXJuaW5nLFxuICB0eXBlIFZ1bG5XYWl2ZXIsXG4gIHR5cGUgVnVsbldhaXZlclBhcnNlLFxuICB0eXBlIFZ1bG5XYWl2ZXJQcm9ibGVtLFxuICB0eXBlIFdhaXZlck91dGNvbWUsXG59IGZyb20gJy4vcGx1Z2luLXNjYW4uanMnO1xuIl19