@pipeline-builder/pipeline-data 4.3.6 → 4.3.7

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 (70) hide show
  1. package/lib/api/access-control-builder.js +1 -1
  2. package/lib/api/alert-destinations.js +1 -1
  3. package/lib/api/crud-service.js +1 -1
  4. package/lib/api/ecosystem-privacy.js +1 -1
  5. package/lib/api/keyset-cursor.js +1 -1
  6. package/lib/api/pipeline-step-resolution.js +1 -1
  7. package/lib/api/plugin-advisories.js +1 -1
  8. package/lib/api/plugin-consumption-policy.js +1 -1
  9. package/lib/api/plugin-resolution.js +6 -1
  10. package/lib/api/public-directory.d.ts +71 -3
  11. package/lib/api/public-directory.js +68 -22
  12. package/lib/api/query-builders.js +47 -2
  13. package/lib/api/reporting/analytics-queries.js +1 -1
  14. package/lib/api/reporting/caches.js +1 -1
  15. package/lib/api/reporting/daily-rollup.js +1 -1
  16. package/lib/api/reporting/deploy-rollup.js +1 -1
  17. package/lib/api/reporting/dora-scoring.js +1 -1
  18. package/lib/api/reporting/dora.js +1 -1
  19. package/lib/api/reporting/failure-classifier.js +1 -1
  20. package/lib/api/reporting/ingest.js +1 -1
  21. package/lib/api/reporting/last-deploy.js +1 -1
  22. package/lib/api/reporting/needs-attention.js +1 -1
  23. package/lib/api/reporting/plugin-exposure.js +1 -1
  24. package/lib/api/reporting/plugin-runtime.js +1 -1
  25. package/lib/api/reporting/query-scope.js +1 -1
  26. package/lib/api/reporting/retention-sweep.js +1 -1
  27. package/lib/api/reporting/retention.js +1 -1
  28. package/lib/api/reporting/sql-helpers.js +1 -1
  29. package/lib/api/reporting/stakeholder/compose.js +1 -1
  30. package/lib/api/reporting/stakeholder/index.js +1 -1
  31. package/lib/api/reporting/stakeholder/period.js +1 -1
  32. package/lib/api/reporting/stakeholder/report-html.js +1 -1
  33. package/lib/api/reporting/stakeholder/sections.js +1 -1
  34. package/lib/api/reporting/stakeholder/store.js +1 -1
  35. package/lib/api/reporting/stakeholder/templates.js +1 -1
  36. package/lib/api/reporting/types.js +1 -1
  37. package/lib/api/reporting-service.js +1 -1
  38. package/lib/api/semver-range.js +1 -1
  39. package/lib/api/soft-delete-sweep.js +1 -1
  40. package/lib/api/support-cases.js +1 -1
  41. package/lib/api/version-references.js +1 -1
  42. package/lib/api/viewer-context.js +1 -1
  43. package/lib/core/query-filters.d.ts +25 -0
  44. package/lib/core/query-filters.js +1 -1
  45. package/lib/database/drizzle-schema.d.ts +19 -0
  46. package/lib/database/drizzle-schema.js +1 -1
  47. package/lib/database/index.js +1 -1
  48. package/lib/database/pg-result.js +1 -1
  49. package/lib/database/postgres-connection.js +1 -1
  50. package/lib/database/public-reader.js +1 -1
  51. package/lib/database/read-connection.js +1 -1
  52. package/lib/database/read-lag.js +1 -1
  53. package/lib/database/retry-strategy.js +1 -1
  54. package/lib/database/schema/alert.js +1 -1
  55. package/lib/database/schema/compliance.js +1 -1
  56. package/lib/database/schema/dashboard.js +1 -1
  57. package/lib/database/schema/ecosystem.d.ts +17 -0
  58. package/lib/database/schema/ecosystem.js +3 -1
  59. package/lib/database/schema/message-attachment.js +1 -1
  60. package/lib/database/schema/message.d.ts +19 -0
  61. package/lib/database/schema/message.js +18 -1
  62. package/lib/database/schema/pipeline-template.js +1 -1
  63. package/lib/database/schema/pipeline.js +1 -1
  64. package/lib/database/schema/plugin.js +1 -1
  65. package/lib/database/schema/reporting-analytics.js +1 -1
  66. package/lib/database/schema/reporting-stakeholder.js +1 -1
  67. package/lib/database/schema/support.js +1 -1
  68. package/lib/database/tenancy.js +1 -1
  69. package/lib/index.js +1 -1
  70. package/package.json +8 -8
@@ -150,4 +150,4 @@ export function createSoftDeletePurgeScheduler(opts) {
150
150
  lock: { key: leaderLockKey(opts.service, 'soft-delete-purge'), ttlMs: lockTtlMs },
151
151
  });
152
152
  }
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdC1kZWxldGUtc3dlZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3NvZnQtZGVsZXRlLXN3ZWVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxZQUFZLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQWtCLGFBQWEsRUFBRSwwQkFBMEIsRUFDekcsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxhQUFhLEdBQ2pFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFpQ2pEOzZFQUM2RTtBQUM3RSxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8sT0FBTyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLFFBQTJCLEVBQzNCLElBQUksR0FBMkIsRUFBRSxFQUNqQyxHQUE2QjtJQUU3QixNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO0lBQzFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsOEVBQThFO0lBQzlFLE1BQU0sS0FBSyxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRyxD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QU87UUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFDLGFBQWEsRUFBRSxVQUFVLEdBQUcsU0FBUztLQUN0QyxDQUFDLENBQUM7SUFFSCxPQUFPLGVBQWUsQ0FBQztRQUNyQixJQUFJLEVBQUUscUJBQXFCLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDekMsVUFBVTtRQUNWLGNBQWM7UUFDZCxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtLQUNsRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogU2hhcmVkIHNvZnQtZGVsZXRlIHJldGVudGlvbiBwdXJnZS5cbiAqXG4gKiBFdmVyeSB7QGxpbmsgQ3J1ZFNlcnZpY2V9IGVudGl0eSBzb2Z0LWRlbGV0ZXMgKHNldHMgYGRlbGV0ZWRBdGAgKyBhXG4gKiBgcHVyZ2VfYWZ0ZXJgIGRlYWRsaW5lKS4gVGhpcyBvcmNoZXN0cmF0b3IgcnVucyBvbmUgcHVyZ2UgcGFzcyBhY3Jvc3MgYSBzZXRcbiAqIG9mIHN1Y2ggZW50aXRpZXMsIGhhcmQtZGVsZXRpbmcgdG9tYnN0b25lcyB3aG9zZSBkZWFkbGluZSBoYXMgcGFzc2VkLiBJdCBpc1xuICogdGhlIGBydW5gIGNhbGxiYWNrIGEgc2VydmljZSBoYW5kcyB0byBgY3JlYXRlU2NoZWR1bGVyYCAobGVhZGVyLWxvY2tlZCksIHNvXG4gKiBvbmx5IG9uZSBwb2Qgc3dlZXBzIGF0IGEgdGltZS5cbiAqXG4gKiBSdW5zIGluIGFuIGV4cGxpY2l0ICoqc3lzYWRtaW4gdGVuYW50IHNjb3BlKiogKGBydW5XaXRoVGVuYW50Q29udGV4dCh7XG4gKiBpc1N1cGVyQWRtaW46IHRydWUgfSlgKSBzbyB0aGUgdW5kZXJseWluZyBgcHVyZ2VFeHBpcmVkYCBzcGFucyBldmVyeSBvcmcgYW5kXG4gKiBieXBhc3NlcyBSTFMgb24gRk9SQ0UnZCB0YWJsZXMgKHBsdWdpbnMvcGlwZWxpbmVzL2V0Yy4pLiBBIGJhcmUgbm8tdGVuYW50XG4gKiBjb250ZXh0IHdvdWxkIHNlZSB6ZXJvIHJvd3Mgb24gdGhvc2UgdGFibGVzIOKAlCBhbmQgaW4gcHJvZHVjdGlvbiAoYHN0cmljdGBcbiAqIG1vZGUpIGB3aXRoVGVuYW50VHhgIHRocm93cyBvdXRyaWdodCDigJQgc28gdGhlIHNjb3BlIGlzIGVzdGFibGlzaGVkIGhlcmUgcmF0aGVyXG4gKiB0aGFuIGxlZnQgdG8gdGhlIGNhbGxlci4gVGhpcyBpcyBhIGNyb3NzLXRlbmFudCBob3VzZWtlZXBpbmcgam9iLCBub3QgYVxuICogcGVyLW9yZyBvcGVyYXRpb24uXG4gKlxuICogRWFjaCB0aWNrIGlzIG9uZSBhdWRpdGVkIGpvYiBydW46IGVudGl0aWVzIHRoYXQgbmFtZSBhbiBgYXVkaXRBY3Rpb25gIGdldCBvbmVcbiAqIGV2ZW50IHBlciB0aWNrIHRoYXQgcHVyZ2VkIHJvd3Mg4oCUIHN5c3RlbSBhY3RvciwgdGhlIHRpY2sncyBgcnVuSWRgLCB0aGUgY291bnQuXG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7XG4gIGNyZWF0ZUxvZ2dlciwgY3JlYXRlU2NoZWR1bGVyLCBlbnZCb29sLCBlbnZJbnQsIHR5cGUgU2NoZWR1bGVyLCBsZWFkZXJMb2NrS2V5LCBERUZBVUxUX0xFQURFUl9MT0NLX1RUTF9NUyxcbiAgcmVjb3JkQXVkaXQsIHJ1bldpdGhBdWRpdENvbnRleHQsIFNZU1RFTV9BQ1RPUl9JRCwgU1lTVEVNX09SR19JRCwgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbixcbn0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgcnVuV2l0aFRlbmFudENvbnRleHQgfSBmcm9tICcuLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdzb2Z0LWRlbGV0ZS1zd2VlcCcpO1xuXG4vKiogVGhlIHNsaWNlIG9mIGEgQ3J1ZFNlcnZpY2UgdGhlIHN3ZWVwIG5lZWRzLCBwbHVzIGEgbGFiZWwgZm9yIGxvZ3MvbWV0cmljcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVyZ2VhYmxlRW50aXR5IHtcbiAgLyoqIFRhYmxlL2VudGl0eSBsYWJlbCAoZS5nLiAncGlwZWxpbmUnKSBmb3IgcGVyLXRhYmxlIGxvZ2dpbmcuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIEhhcmQtZGVsZXRlIHVwIHRvIGBsaW1pdGAgZXhwaXJlZCB0b21ic3RvbmVzOyByZXR1cm5zIHJvd3MgcHVyZ2VkLiAqL1xuICBwdXJnZUV4cGlyZWQobm93OiBEYXRlLCBsaW1pdD86IG51bWJlcik6IFByb21pc2U8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFRoZSBlbnRpdHkncyBtYW51YWwtcHVyZ2UgYWN0aW9uIChlLmcuIGBwaXBlbGluZS5wdXJnZWApLCByZXVzZWQgZm9yIHRoZVxuICAgKiBzd2VlcCdzIGhhcmQtZGVsZXRlcyB3aXRoIGBkZXRhaWxzLnRyaWdnZXI6ICdyZXRlbnRpb24nYC4gT21pdHRlZCBmb3Igcm93c1xuICAgKiB0aGF0IGFyZSBub3QgdXNlci1mYWNpbmcgcmVjb3JkcyAocGVuZGluZyBhdHRhY2htZW50IGJsb2JzIGFuZCB0aGUgbGlrZSkg4oCUXG4gICAqIHRob3NlIHB1cmdlIHVuYXVkaXRlZC5cbiAgICovXG4gIGF1ZGl0QWN0aW9uPzogUmVtb3RlQXVkaXRBY3Rpb247XG59XG5cbi8qKlxuICogVGhlIHNlcnZpY2VzIHRoYXQgcnVuIGEgc29mdC1kZWxldGUgcHVyZ2UuIEEgY2xvc2VkIHVuaW9uLCBub3QgYSBgc3RyaW5nYCxcbiAqIGJlY2F1c2UgdGhlIHZhbHVlIGJlY29tZXMgdGhlIExPQ0sgS0VZOiB0d28gc2VydmljZXMgcGFzc2luZyB0aGUgc2FtZSBzdHJpbmdcbiAqIHdvdWxkIHNpbGVudGx5IHNoYXJlIG9uZSBsb2NrLCBhbmQgd2hpY2hldmVyIGxvc3QgaXQgd291bGQgc2ltcGx5IG5ldmVyIHN3ZWVwIOKAlFxuICogYSB0eXBvIHRoYXQgc3RvcHMgYSBwdXJnZSB3aXRoIG5vIGVycm9yIGFueXdoZXJlLlxuICovXG5leHBvcnQgdHlwZSBTb2Z0RGVsZXRlU3dlZXBTZXJ2aWNlID0gJ3BpcGVsaW5lJyB8ICdwbHVnaW4nIHwgJ21lc3NhZ2UnIHwgJ2NvbXBsaWFuY2UnIHwgJ3BsYXRmb3JtJyB8ICdyZXBvcnRpbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnREZWxldGVQdXJnZU9wdGlvbnMge1xuICAvKiogUm93cyBwZXIgYmF0Y2ggcGVyIHRhYmxlIChkZWZhdWx0IDUwMCkuICovXG4gIGJhdGNoU2l6ZT86IG51bWJlcjtcbiAgLyoqIE1heCBiYXRjaGVzIHBlciB0YWJsZSBwZXIgdGljayAoZGVmYXVsdCAyMCDihpIg4omkIDEway90YWJsZS90aWNrKTsgdGhlIHJlc3RcbiAgICogIGlzIGRlZmVycmVkIHRvIHRoZSBuZXh0IHRpY2sgc28gYSBodWdlIGJhY2tsb2cgY2FuJ3QgYmxvdyB0aGUgbG9jayBUVEwuICovXG4gIG1heEJhdGNoZXNQZXJFbnRpdHk/OiBudW1iZXI7XG59XG5cbi8qKiBLaWxsLXN3aXRjaDogYFNPRlRfREVMRVRFX1BVUkdFX0VOQUJMRUQ9ZmFsc2VgIGRpc2FibGVzIGFsbCBoYXJkLXB1cmdpbmdcbiAqICAodG9tYnN0b25lcyBzdGlsbCBhY2N1bXVsYXRlICsgc3RheSByZXN0b3JhYmxlOyBub3RoaW5nIGlzIGRlc3Ryb3llZCkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTb2Z0RGVsZXRlUHVyZ2VFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW52Qm9vbCgnU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRCcsIHRydWUpO1xufVxuXG4vKipcbiAqIFJ1biBvbmUgcHVyZ2Ugc3dlZXAgYWNyb3NzIGBlbnRpdGllc2AuIExvb3BzIGVhY2ggZW50aXR5J3MgYHB1cmdlRXhwaXJlZGAgaW5cbiAqIGJhdGNoZXMgdW50aWwgYSBiYXRjaCByZXR1cm5zIGA8IGJhdGNoU2l6ZWAgKGRyYWluZWQpIG9yIHRoZSBwZXItdGljayBjYXAgaXNcbiAqIGhpdCAobG9nZ2VkOyBjb250aW51ZWQgbmV4dCB0aWNrKS4gTmV2ZXIgdGhyb3dzIOKAlCBhIGZhaWxpbmcgZW50aXR5IGlzIGxvZ2dlZFxuICogYW5kIHRoZSBzd2VlcCBtb3ZlcyBvbi4gUmV0dXJucyBwZXItZW50aXR5IHB1cmdlZCBjb3VudHMgKGFsc28gbG9nZ2VkKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNvZnREZWxldGVQdXJnZShcbiAgZW50aXRpZXM6IFB1cmdlYWJsZUVudGl0eVtdLFxuICBvcHRzOiBTb2Z0RGVsZXRlUHVyZ2VPcHRpb25zID0ge30sXG4gIHJ1bj86IHsgc2lnbmFsOiBBYm9ydFNpZ25hbCB9LFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PiB7XG4gIGNvbnN0IGNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBpZiAoIWlzU29mdERlbGV0ZVB1cmdlRW5hYmxlZCgpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdTb2Z0LWRlbGV0ZSBwdXJnZSBkaXNhYmxlZCAoU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRD1mYWxzZSknKTtcbiAgICByZXR1cm4gY291bnRzO1xuICB9XG5cbiAgLy8gT25lIGlkIHBlciB0aWNrOiBldmVyeSBhdWRpdCBldmVudCB0aGlzIHJ1biByZWNvcmRzIGNhcnJpZXMgaXQgKGFzIHRoZVxuICAvLyBqb2IgY29udGV4dCdzIGBydW5JZGAgYW5kIGluIGBkZXRhaWxzYCksIHNvIGEgcmV2aWV3ZXIgY2FuIHJlZ3JvdXAgYSBzd2VlcC5cbiAgY29uc3QgcnVuSWQgPSByYW5kb21VVUlEKCk7XG4gIGNvbnN0IGJhdGNoU2l6ZSA9IG9wdHMuYmF0Y2hTaXplID8/IDUwMDtcbiAgY29uc3QgbWF4QmF0Y2hlcyA9IG9wdHMubWF4QmF0Y2hlc1BlckVudGl0eSA/PyAyMDtcbiAgLy8gT25lIGBub3dgIGZvciB0aGUgd2hvbGUgdGljayDigJQgcm93cyB0aGF0IGV4cGlyZSBtaWQtc3dlZXAgd2FpdCBmb3IgdGhlIG5leHQuXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgLy8gRXN0YWJsaXNoIGEgc3lzYWRtaW4gc2NvcGUgc28gZXZlcnkgYHB1cmdlRXhwaXJlZGAgKHdoaWNoIHJvdXRlcyB0aHJvdWdoXG4gIC8vIGB3aXRoVGVuYW50VHhgKSBieXBhc3NlcyBSTFMgYW5kIHNwYW5zIGFsbCBvcmdzLiBXaXRob3V0IHRoaXMsIEZPUkNFJ2RcbiAgLy8gdGFibGVzIHJldHVybiB6ZXJvIHJvd3MgYW5kIHByb2R1Y3Rpb24gYHN0cmljdGAgbW9kZSB0aHJvd3MuXG4gIHJldHVybiBydW5XaXRoQXVkaXRDb250ZXh0KHsgam9iOiB7IGpvYklkOiAnc29mdC1kZWxldGUtcHVyZ2UnLCBydW5JZCwgdHJpZ2dlcjogJ3NjaGVkdWxlJyB9IH0sICgpID0+IHJ1bldpdGhUZW5hbnRDb250ZXh0KHsgaXNTdXBlckFkbWluOiB0cnVlIH0sIGFzeW5jICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBlbnRpdGllcykge1xuICAgICAgLy8gQmV0d2VlbiBlbnRpdGllczogdGhlIGxlYWRlciBsb2NrIHdhcyBsb3N0IChhbm90aGVyIHBvZCBpcyB0YWtpbmcgb3Zlcikgb3JcbiAgICAgIC8vIHdlIGFyZSBzaHV0dGluZyBkb3duLiBUaGUgcmVtYWluaW5nIGVudGl0aWVzIGFyZSBwaWNrZWQgdXAgbmV4dCB0aWNrIOKAlFxuICAgICAgLy8gdGhlaXIgdG9tYnN0b25lcyBhcmUgc3RpbGwgZXhwaXJlZCDigJQgYW5kIHN0b3BwaW5nIGxldHMgdGhlIGxvY2sgZ28uXG4gICAgICBpZiAocnVuPy5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnU29mdC1kZWxldGUgcHVyZ2Ugc3RvcHBpbmcgZWFybHknLCB7IHJlYXNvbjogU3RyaW5nKHJ1bi5zaWduYWwucmVhc29uID8/ICdhYm9ydGVkJyksIGF0RW50aXR5OiBlbnRpdHkubmFtZSB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBsZXQgdG90YWwgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhCYXRjaGVzOyBpKyspIHtcbiAgICAgICAgLy8gQWxzbyBiZXR3ZWVuIEJBVENIRVM6IG9uZSBlbnRpdHkgd2l0aCBhIGxhcmdlIGJhY2tsb2cgY2FuIHJ1biBmb3IgbWFueVxuICAgICAgICAvLyBiYXRjaGVzLCB3aGljaCBpcyBleGFjdGx5IHRoZSBjYXNlIGEgVFRMIHVzZWQgdG8gaGF2ZSB0byBjb3Zlci5cbiAgICAgICAgaWYgKHJ1bj8uc2lnbmFsLmFib3J0ZWQpIGJyZWFrO1xuICAgICAgICBsZXQgcHVyZ2VkOiBudW1iZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHVyZ2VkID0gYXdhaXQgZW50aXR5LnB1cmdlRXhwaXJlZChub3csIGJhdGNoU2l6ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignUHVyZ2UgYmF0Y2ggZmFpbGVkJywgeyBlbnRpdHk6IGVudGl0eS5uYW1lLCBlcnJvcjogU3RyaW5nKGVycikgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdG90YWwgKz0gcHVyZ2VkO1xuICAgICAgICBpZiAocHVyZ2VkIDwgYmF0Y2hTaXplKSBicmVhazsgLy8gZHJhaW5lZFxuICAgICAgICBpZiAoaSA9PT0gbWF4QmF0Y2hlcyAtIDEpIHtcbiAgICAgICAgICBsb2dnZXIud2FybignUHVyZ2UgaGl0IHBlci10aWNrIGNhcDsgcmVtYWluaW5nIHRvbWJzdG9uZXMgZGVmZXJyZWQgdG8gbmV4dCB0aWNrJywge1xuICAgICAgICAgICAgZW50aXR5OiBlbnRpdHkubmFtZSwgcHVyZ2VkVGhpc1RpY2s6IHRvdGFsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodG90YWwgPiAwKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdQdXJnZWQgZXhwaXJlZCBzb2Z0LWRlbGV0ZWQgcm93cycsIHsgZW50aXR5OiBlbnRpdHkubmFtZSwgY291bnQ6IHRvdGFsIH0pO1xuICAgICAgICBpZiAoZW50aXR5LmF1ZGl0QWN0aW9uKSBhdWRpdFJldGVudGlvblB1cmdlKGVudGl0eS5hdWRpdEFjdGlvbiwgZW50aXR5Lm5hbWUsIHRvdGFsLCBydW5JZCk7XG4gICAgICB9XG4gICAgICBjb3VudHNbZW50aXR5Lm5hbWVdID0gdG90YWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50cztcbiAgfSkpO1xufVxuXG4vKipcbiAqIFRoZSBhdWRpdCBldmVudCBmb3Igb25lIGVudGl0eSdzIGhhcmQtZGVsZXRlcyBpbiBvbmUgdGljay4gQSBjcm9zcy10ZW5hbnRcbiAqIHN5c3RlbSBqb2IsIHNvIGl0IGlzIGF0dHJpYnV0ZWQgdG8gdGhlIHN5c3RlbSBhY3RvciBpbiB0aGUgc3lzdGVtIG9yZztcbiAqIGB0YXJnZXRUeXBlYCBpcyB0aGUgZW50aXR5IGFuZCB0aGVyZSBpcyBubyBzaW5nbGUgYHRhcmdldElkYC4gTmV2ZXIgdGhyb3dzIOKAlFxuICogYW4gdW5ib3VuZCBhdWRpdCBjbGllbnQgKGEgd2lyaW5nIGJ1ZykgaXMgbG9nZ2VkLCBhbmQgdGhlIHN3ZWVwIGNhcnJpZXMgb24uXG4gKi9cbmZ1bmN0aW9uIGF1ZGl0UmV0ZW50aW9uUHVyZ2UoYWN0aW9uOiBSZW1vdGVBdWRpdEFjdGlvbiwgZW50aXR5OiBzdHJpbmcsIGNvdW50OiBudW1iZXIsIHJ1bklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICByZWNvcmRBdWRpdCh7XG4gICAgICBhY3Rpb24sXG4gICAgICBhY3RvcklkOiBTWVNURU1fQUNUT1JfSUQsXG4gICAgICBvcmdJZDogU1lTVEVNX09SR19JRCxcbiAgICAgIHRhcmdldFR5cGU6IGVudGl0eSxcbiAgICAgIGRldGFpbHM6IHsgdHJpZ2dlcjogJ3JldGVudGlvbicsIHJ1bklkLCBjb3VudCB9LFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1JldGVudGlvbiBwdXJnZSBhdWRpdCBub3QgcmVjb3JkZWQnLCB7IGVudGl0eSwgY291bnQsIGVycm9yOiBTdHJpbmcoZXJyKSB9KTtcbiAgfVxufVxuXG4vLyAtLSBTY2hlZHVsZXIgZmFjdG9yeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnREZWxldGVQdXJnZVNjaGVkdWxlck9wdGlvbnMgZXh0ZW5kcyBTb2Z0RGVsZXRlUHVyZ2VPcHRpb25zIHtcbiAgLyoqIFNlcnZpY2UgbGFiZWwgZm9yIGxvZ3MgKyB0aGUgbGVhZGVyLWxvY2sga2V5IChlLmcuICdwaXBlbGluZScsICdwbHVnaW4nKS4gKi9cbiAgc2VydmljZTogU29mdERlbGV0ZVN3ZWVwU2VydmljZTtcbiAgLyoqIEVudGl0aWVzIHRvIHN3ZWVwIOKAlCB1c3VhbGx5IHRoZSBzZXJ2aWNlJ3Mgb3duIENydWRTZXJ2aWNlIHNpbmdsZXRvbnMuICovXG4gIGVudGl0aWVzOiBQdXJnZWFibGVFbnRpdHlbXTtcbn1cblxuLyoqXG4gKiBCdWlsZCAoYnV0IGRvIE5PVCBzdGFydCkgYSBsZWFkZXItbG9ja2VkIHNjaGVkdWxlciB0aGF0IHJ1bnMgdGhlIHNvZnQtZGVsZXRlXG4gKiBwdXJnZSBzd2VlcCBmb3IgYGVudGl0aWVzYCBvbiBhIGNhZGVuY2UuIFRoZSBjYWxsZXIgYC5zdGFydCgpYHMgaXQgYW5kIHdpcmVzXG4gKiBgc3RvcCgpYCB0byBTSUdURVJNLiBSZXR1cm5zIG51bGwgd2hlbiBwdXJnaW5nIGlzIGRpc2FibGVkLlxuICpcbiAqIEVudiBjb25maWc6XG4gKiAgIFNPRlRfREVMRVRFX1BVUkdFX0VOQUJMRUQgICAgICAgICAgIChkZWZhdWx0IHRydWU7IGZhbHNlIOKHkiBudWxsLCBubyBzd2VlcClcbiAqICAgU09GVF9ERUxFVEVfUFVSR0VfSU5URVJWQUxfSE9VUlMgICAgKGRlZmF1bHQgNilcbiAqICAgU09GVF9ERUxFVEVfUFVSR0VfU1RBUlRVUF9ERUxBWV9NUyAgKGRlZmF1bHQgMTIwMDAwIOKAlCAyIG1pbiBzZXR0bGUpXG4gKiAgIFNPRlRfREVMRVRFX1BVUkdFX0xPQ0tfVFRMX01TICAgICAgIChkZWZhdWx0IDkwMDAwMCDigJQgMTUgbWluOyBvdXRsYXN0cyBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2VlcCwgc3RheXMgdW5kZXIgdGhlIGludGVydmFsKVxuICpcbiAqIEEgY3Jvc3MtcG9kIGxlYWRlciBsb2NrICh3aGVuIFJlZGlzIGlzIGNvbmZpZ3VyZWQpIG1lYW5zIG9ubHkgb25lIHJlcGxpY2FcbiAqIHN3ZWVwcyBwZXIgd2luZG93OyB3aXRob3V0IFJlZGlzIGl0IHJ1bnMgb24gZXZlcnkgcG9kIOKAlCBzdGlsbCBzYWZlLCBzaW5jZSB0aGVcbiAqIHB1cmdlIGlzIGEgYmF0Y2hlZCBpZGVtcG90ZW50IERFTEVURSwganVzdCByZWR1bmRhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTb2Z0RGVsZXRlUHVyZ2VTY2hlZHVsZXIob3B0czogU29mdERlbGV0ZVB1cmdlU2NoZWR1bGVyT3B0aW9ucyk6IFNjaGVkdWxlciB8IG51bGwge1xuICBpZiAoIWlzU29mdERlbGV0ZVB1cmdlRW5hYmxlZCgpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NvZnQtZGVsZXRlIHB1cmdlIHNjaGVkdWxlciBkaXNhYmxlZCAoU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRD1mYWxzZSknLCB7IHNlcnZpY2U6IG9wdHMuc2VydmljZSB9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGludGVydmFsTXMgPSBlbnZJbnQoJ1NPRlRfREVMRVRFX1BVUkdFX0lOVEVSVkFMX0hPVVJTJywgNiwgeyBtaW46IDEgfSkgKiA2MCAqIDYwICogMTAwMDtcbiAgY29uc3Qgc3RhcnR1cERlbGF5TXMgPSBlbnZJbnQoJ1NPRlRfREVMRVRFX1BVUkdFX1NUQVJUVVBfREVMQVlfTVMnLCAxMjBfMDAwLCB7IG1pbjogMCB9KTtcbiAgY29uc3QgbG9ja1R0bE1zID0gZW52SW50KCdTT0ZUX0RFTEVURV9QVVJHRV9MT0NLX1RUTF9NUycsIERFRkFVTFRfTEVBREVSX0xPQ0tfVFRMX01TLCB7IG1pbjogMTAwMCB9KTtcblxuICBsb2dnZXIuaW5mbygnU29mdC1kZWxldGUgcHVyZ2Ugc2NoZWR1bGVyIHN0YXJ0aW5nJywge1xuICAgIHNlcnZpY2U6IG9wdHMuc2VydmljZSxcbiAgICBlbnRpdGllczogb3B0cy5lbnRpdGllcy5tYXAoKGUpID0+IGUubmFtZSksXG4gICAgaW50ZXJ2YWxIb3VyczogaW50ZXJ2YWxNcyAvIDNfNjAwXzAwMCxcbiAgfSk7XG5cbiAgcmV0dXJuIGNyZWF0ZVNjaGVkdWxlcih7XG4gICAgbmFtZTogYHNvZnQtZGVsZXRlLXB1cmdlOiR7b3B0cy5zZXJ2aWNlfWAsXG4gICAgaW50ZXJ2YWxNcyxcbiAgICBzdGFydHVwRGVsYXlNcyxcbiAgICBydW46IGFzeW5jIChydW4pID0+IHsgYXdhaXQgcnVuU29mdERlbGV0ZVB1cmdlKG9wdHMuZW50aXRpZXMsIG9wdHMsIHJ1bik7IH0sXG4gICAgbG9jazogeyBrZXk6IGxlYWRlckxvY2tLZXkob3B0cy5zZXJ2aWNlLCAnc29mdC1kZWxldGUtcHVyZ2UnKSwgdHRsTXM6IGxvY2tUdGxNcyB9LFxuICB9KTtcbn1cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mdC1kZWxldGUtc3dlZXAuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvc29mdC1kZWxldGUtc3dlZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUNMLFlBQVksRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBa0IsYUFBYSxFQUFFLDBCQUEwQixFQUN6RyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGFBQWEsR0FDakUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQWlDakQ7NkVBQzZFO0FBQzdFLE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsT0FBTyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FDdEMsUUFBMkIsRUFDM0IsSUFBSSxHQUEyQixFQUFFLEVBQ2pDLEdBQTZCO0lBRTdCLE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7SUFDMUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQztRQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDN0UsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSw4RUFBOEU7SUFDOUUsTUFBTSxLQUFLLEdBQUcsVUFBVSxFQUFFLENBQUM7SUFDM0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUM7SUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUNsRCwrRUFBK0U7SUFDL0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUV2QiwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLCtEQUErRDtJQUMvRCxPQUFPLG1CQUFtQixDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM1SixLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzlCLDZFQUE2RTtZQUM3RSx5RUFBeUU7WUFDekUsc0VBQXNFO1lBQ3RFLElBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMzSCxNQUFNO1lBQ1IsQ0FBQztZQUNELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDcEMseUVBQXlFO2dCQUN6RSxrRUFBa0U7Z0JBQ2xFLElBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPO29CQUFFLE1BQU07Z0JBQy9CLElBQUksTUFBYyxDQUFDO2dCQUNuQixJQUFJLENBQUM7b0JBQ0gsTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hGLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLElBQUksTUFBTSxDQUFDO2dCQUNoQixJQUFJLE1BQU0sR0FBRyxTQUFTO29CQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUN6QyxJQUFJLENBQUMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUU7d0JBQ2hGLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLO3FCQUMzQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ3ZGLElBQUksTUFBTSxDQUFDLFdBQVc7b0JBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RixDQUFDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLE1BQXlCLEVBQUUsTUFBYyxFQUFFLEtBQWEsRUFBRSxLQUFhO0lBQ2xHLElBQUksQ0FBQztRQUNILFdBQVcsQ0FBQztZQUNWLE1BQU07WUFDTixPQUFPLEVBQUUsZUFBZTtZQUN4QixLQUFLLEVBQUUsYUFBYTtZQUNwQixVQUFVLEVBQUUsTUFBTTtZQUNsQixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDaEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0FBQ0gsQ0FBQztBQVdEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxJQUFxQztJQUNsRixJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0VBQXdFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDakgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGtDQUFrQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQzlGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxvQ0FBb0MsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6RixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsK0JBQStCLEVBQUUsMEJBQTBCLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVyRyxNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFO1FBQ2xELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztRQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUMsYUFBYSxFQUFFLFVBQVUsR0FBRyxTQUFTO0tBQ3RDLENBQUMsQ0FBQztJQUVILE9BQU8sZUFBZSxDQUFDO1FBQ3JCLElBQUksRUFBRSxxQkFBcUIsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUN6QyxVQUFVO1FBQ1YsY0FBYztRQUNkLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0tBQ2xGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBTaGFyZWQgc29mdC1kZWxldGUgcmV0ZW50aW9uIHB1cmdlLlxuICpcbiAqIEV2ZXJ5IHtAbGluayBDcnVkU2VydmljZX0gZW50aXR5IHNvZnQtZGVsZXRlcyAoc2V0cyBgZGVsZXRlZEF0YCArIGFcbiAqIGBwdXJnZV9hZnRlcmAgZGVhZGxpbmUpLiBUaGlzIG9yY2hlc3RyYXRvciBydW5zIG9uZSBwdXJnZSBwYXNzIGFjcm9zcyBhIHNldFxuICogb2Ygc3VjaCBlbnRpdGllcywgaGFyZC1kZWxldGluZyB0b21ic3RvbmVzIHdob3NlIGRlYWRsaW5lIGhhcyBwYXNzZWQuIEl0IGlzXG4gKiB0aGUgYHJ1bmAgY2FsbGJhY2sgYSBzZXJ2aWNlIGhhbmRzIHRvIGBjcmVhdGVTY2hlZHVsZXJgIChsZWFkZXItbG9ja2VkKSwgc29cbiAqIG9ubHkgb25lIHBvZCBzd2VlcHMgYXQgYSB0aW1lLlxuICpcbiAqIFJ1bnMgaW4gYW4gZXhwbGljaXQgKipzeXNhZG1pbiB0ZW5hbnQgc2NvcGUqKiAoYHJ1bldpdGhUZW5hbnRDb250ZXh0KHtcbiAqIGlzU3VwZXJBZG1pbjogdHJ1ZSB9KWApIHNvIHRoZSB1bmRlcmx5aW5nIGBwdXJnZUV4cGlyZWRgIHNwYW5zIGV2ZXJ5IG9yZyBhbmRcbiAqIGJ5cGFzc2VzIFJMUyBvbiBGT1JDRSdkIHRhYmxlcyAocGx1Z2lucy9waXBlbGluZXMvZXRjLikuIEEgYmFyZSBuby10ZW5hbnRcbiAqIGNvbnRleHQgd291bGQgc2VlIHplcm8gcm93cyBvbiB0aG9zZSB0YWJsZXMg4oCUIGFuZCBpbiBwcm9kdWN0aW9uIChgc3RyaWN0YFxuICogbW9kZSkgYHdpdGhUZW5hbnRUeGAgdGhyb3dzIG91dHJpZ2h0IOKAlCBzbyB0aGUgc2NvcGUgaXMgZXN0YWJsaXNoZWQgaGVyZSByYXRoZXJcbiAqIHRoYW4gbGVmdCB0byB0aGUgY2FsbGVyLiBUaGlzIGlzIGEgY3Jvc3MtdGVuYW50IGhvdXNla2VlcGluZyBqb2IsIG5vdCBhXG4gKiBwZXItb3JnIG9wZXJhdGlvbi5cbiAqXG4gKiBFYWNoIHRpY2sgaXMgb25lIGF1ZGl0ZWQgam9iIHJ1bjogZW50aXRpZXMgdGhhdCBuYW1lIGFuIGBhdWRpdEFjdGlvbmAgZ2V0IG9uZVxuICogZXZlbnQgcGVyIHRpY2sgdGhhdCBwdXJnZWQgcm93cyDigJQgc3lzdGVtIGFjdG9yLCB0aGUgdGljaydzIGBydW5JZGAsIHRoZSBjb3VudC5cbiAqL1xuXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHtcbiAgY3JlYXRlTG9nZ2VyLCBjcmVhdGVTY2hlZHVsZXIsIGVudkJvb2wsIGVudkludCwgdHlwZSBTY2hlZHVsZXIsIGxlYWRlckxvY2tLZXksIERFRkFVTFRfTEVBREVSX0xPQ0tfVFRMX01TLFxuICByZWNvcmRBdWRpdCwgcnVuV2l0aEF1ZGl0Q29udGV4dCwgU1lTVEVNX0FDVE9SX0lELCBTWVNURU1fT1JHX0lELCB0eXBlIFJlbW90ZUF1ZGl0QWN0aW9uLFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBydW5XaXRoVGVuYW50Q29udGV4dCB9IGZyb20gJy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3NvZnQtZGVsZXRlLXN3ZWVwJyk7XG5cbi8qKiBUaGUgc2xpY2Ugb2YgYSBDcnVkU2VydmljZSB0aGUgc3dlZXAgbmVlZHMsIHBsdXMgYSBsYWJlbCBmb3IgbG9ncy9tZXRyaWNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdXJnZWFibGVFbnRpdHkge1xuICAvKiogVGFibGUvZW50aXR5IGxhYmVsIChlLmcuICdwaXBlbGluZScpIGZvciBwZXItdGFibGUgbG9nZ2luZy4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogSGFyZC1kZWxldGUgdXAgdG8gYGxpbWl0YCBleHBpcmVkIHRvbWJzdG9uZXM7IHJldHVybnMgcm93cyBwdXJnZWQuICovXG4gIHB1cmdlRXhwaXJlZChub3c6IERhdGUsIGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+O1xuICAvKipcbiAgICogVGhlIGVudGl0eSdzIG1hbnVhbC1wdXJnZSBhY3Rpb24gKGUuZy4gYHBpcGVsaW5lLnB1cmdlYCksIHJldXNlZCBmb3IgdGhlXG4gICAqIHN3ZWVwJ3MgaGFyZC1kZWxldGVzIHdpdGggYGRldGFpbHMudHJpZ2dlcjogJ3JldGVudGlvbidgLiBPbWl0dGVkIGZvciByb3dzXG4gICAqIHRoYXQgYXJlIG5vdCB1c2VyLWZhY2luZyByZWNvcmRzIChwZW5kaW5nIGF0dGFjaG1lbnQgYmxvYnMgYW5kIHRoZSBsaWtlKSDigJRcbiAgICogdGhvc2UgcHVyZ2UgdW5hdWRpdGVkLlxuICAgKi9cbiAgYXVkaXRBY3Rpb24/OiBSZW1vdGVBdWRpdEFjdGlvbjtcbn1cblxuLyoqXG4gKiBUaGUgc2VydmljZXMgdGhhdCBydW4gYSBzb2Z0LWRlbGV0ZSBwdXJnZS4gQSBjbG9zZWQgdW5pb24sIG5vdCBhIGBzdHJpbmdgLFxuICogYmVjYXVzZSB0aGUgdmFsdWUgYmVjb21lcyB0aGUgTE9DSyBLRVk6IHR3byBzZXJ2aWNlcyBwYXNzaW5nIHRoZSBzYW1lIHN0cmluZ1xuICogd291bGQgc2lsZW50bHkgc2hhcmUgb25lIGxvY2ssIGFuZCB3aGljaGV2ZXIgbG9zdCBpdCB3b3VsZCBzaW1wbHkgbmV2ZXIgc3dlZXAg4oCUXG4gKiBhIHR5cG8gdGhhdCBzdG9wcyBhIHB1cmdlIHdpdGggbm8gZXJyb3IgYW55d2hlcmUuXG4gKi9cbmV4cG9ydCB0eXBlIFNvZnREZWxldGVTd2VlcFNlcnZpY2UgPSAncGlwZWxpbmUnIHwgJ3BsdWdpbicgfCAnbWVzc2FnZScgfCAnY29tcGxpYW5jZScgfCAncGxhdGZvcm0nIHwgJ3JlcG9ydGluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29mdERlbGV0ZVB1cmdlT3B0aW9ucyB7XG4gIC8qKiBSb3dzIHBlciBiYXRjaCBwZXIgdGFibGUgKGRlZmF1bHQgNTAwKS4gKi9cbiAgYmF0Y2hTaXplPzogbnVtYmVyO1xuICAvKiogTWF4IGJhdGNoZXMgcGVyIHRhYmxlIHBlciB0aWNrIChkZWZhdWx0IDIwIOKGkiDiiaQgMTBrL3RhYmxlL3RpY2spOyB0aGUgcmVzdFxuICAgKiAgaXMgZGVmZXJyZWQgdG8gdGhlIG5leHQgdGljayBzbyBhIGh1Z2UgYmFja2xvZyBjYW4ndCBibG93IHRoZSBsb2NrIFRUTC4gKi9cbiAgbWF4QmF0Y2hlc1BlckVudGl0eT86IG51bWJlcjtcbn1cblxuLyoqIEtpbGwtc3dpdGNoOiBgU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRD1mYWxzZWAgZGlzYWJsZXMgYWxsIGhhcmQtcHVyZ2luZ1xuICogICh0b21ic3RvbmVzIHN0aWxsIGFjY3VtdWxhdGUgKyBzdGF5IHJlc3RvcmFibGU7IG5vdGhpbmcgaXMgZGVzdHJveWVkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NvZnREZWxldGVQdXJnZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbnZCb29sKCdTT0ZUX0RFTEVURV9QVVJHRV9FTkFCTEVEJywgdHJ1ZSk7XG59XG5cbi8qKlxuICogUnVuIG9uZSBwdXJnZSBzd2VlcCBhY3Jvc3MgYGVudGl0aWVzYC4gTG9vcHMgZWFjaCBlbnRpdHkncyBgcHVyZ2VFeHBpcmVkYCBpblxuICogYmF0Y2hlcyB1bnRpbCBhIGJhdGNoIHJldHVybnMgYDwgYmF0Y2hTaXplYCAoZHJhaW5lZCkgb3IgdGhlIHBlci10aWNrIGNhcCBpc1xuICogaGl0IChsb2dnZWQ7IGNvbnRpbnVlZCBuZXh0IHRpY2spLiBOZXZlciB0aHJvd3Mg4oCUIGEgZmFpbGluZyBlbnRpdHkgaXMgbG9nZ2VkXG4gKiBhbmQgdGhlIHN3ZWVwIG1vdmVzIG9uLiBSZXR1cm5zIHBlci1lbnRpdHkgcHVyZ2VkIGNvdW50cyAoYWxzbyBsb2dnZWQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU29mdERlbGV0ZVB1cmdlKFxuICBlbnRpdGllczogUHVyZ2VhYmxlRW50aXR5W10sXG4gIG9wdHM6IFNvZnREZWxldGVQdXJnZU9wdGlvbnMgPSB7fSxcbiAgcnVuPzogeyBzaWduYWw6IEFib3J0U2lnbmFsIH0sXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+IHtcbiAgY29uc3QgY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIGlmICghaXNTb2Z0RGVsZXRlUHVyZ2VFbmFibGVkKCkpIHtcbiAgICBsb2dnZXIuZGVidWcoJ1NvZnQtZGVsZXRlIHB1cmdlIGRpc2FibGVkIChTT0ZUX0RFTEVURV9QVVJHRV9FTkFCTEVEPWZhbHNlKScpO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH1cblxuICAvLyBPbmUgaWQgcGVyIHRpY2s6IGV2ZXJ5IGF1ZGl0IGV2ZW50IHRoaXMgcnVuIHJlY29yZHMgY2FycmllcyBpdCAoYXMgdGhlXG4gIC8vIGpvYiBjb250ZXh0J3MgYHJ1bklkYCBhbmQgaW4gYGRldGFpbHNgKSwgc28gYSByZXZpZXdlciBjYW4gcmVncm91cCBhIHN3ZWVwLlxuICBjb25zdCBydW5JZCA9IHJhbmRvbVVVSUQoKTtcbiAgY29uc3QgYmF0Y2hTaXplID0gb3B0cy5iYXRjaFNpemUgPz8gNTAwO1xuICBjb25zdCBtYXhCYXRjaGVzID0gb3B0cy5tYXhCYXRjaGVzUGVyRW50aXR5ID8/IDIwO1xuICAvLyBPbmUgYG5vd2AgZm9yIHRoZSB3aG9sZSB0aWNrIOKAlCByb3dzIHRoYXQgZXhwaXJlIG1pZC1zd2VlcCB3YWl0IGZvciB0aGUgbmV4dC5cbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAvLyBFc3RhYmxpc2ggYSBzeXNhZG1pbiBzY29wZSBzbyBldmVyeSBgcHVyZ2VFeHBpcmVkYCAod2hpY2ggcm91dGVzIHRocm91Z2hcbiAgLy8gYHdpdGhUZW5hbnRUeGApIGJ5cGFzc2VzIFJMUyBhbmQgc3BhbnMgYWxsIG9yZ3MuIFdpdGhvdXQgdGhpcywgRk9SQ0UnZFxuICAvLyB0YWJsZXMgcmV0dXJuIHplcm8gcm93cyBhbmQgcHJvZHVjdGlvbiBgc3RyaWN0YCBtb2RlIHRocm93cy5cbiAgcmV0dXJuIHJ1bldpdGhBdWRpdENvbnRleHQoeyBqb2I6IHsgam9iSWQ6ICdzb2Z0LWRlbGV0ZS1wdXJnZScsIHJ1bklkLCB0cmlnZ2VyOiAnc2NoZWR1bGUnIH0gfSwgKCkgPT4gcnVuV2l0aFRlbmFudENvbnRleHQoeyBpc1N1cGVyQWRtaW46IHRydWUgfSwgYXN5bmMgKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGVudGl0aWVzKSB7XG4gICAgICAvLyBCZXR3ZWVuIGVudGl0aWVzOiB0aGUgbGVhZGVyIGxvY2sgd2FzIGxvc3QgKGFub3RoZXIgcG9kIGlzIHRha2luZyBvdmVyKSBvclxuICAgICAgLy8gd2UgYXJlIHNodXR0aW5nIGRvd24uIFRoZSByZW1haW5pbmcgZW50aXRpZXMgYXJlIHBpY2tlZCB1cCBuZXh0IHRpY2sg4oCUXG4gICAgICAvLyB0aGVpciB0b21ic3RvbmVzIGFyZSBzdGlsbCBleHBpcmVkIOKAlCBhbmQgc3RvcHBpbmcgbGV0cyB0aGUgbG9jayBnby5cbiAgICAgIGlmIChydW4/LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdTb2Z0LWRlbGV0ZSBwdXJnZSBzdG9wcGluZyBlYXJseScsIHsgcmVhc29uOiBTdHJpbmcocnVuLnNpZ25hbC5yZWFzb24gPz8gJ2Fib3J0ZWQnKSwgYXRFbnRpdHk6IGVudGl0eS5uYW1lIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGxldCB0b3RhbCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEJhdGNoZXM7IGkrKykge1xuICAgICAgICAvLyBBbHNvIGJldHdlZW4gQkFUQ0hFUzogb25lIGVudGl0eSB3aXRoIGEgbGFyZ2UgYmFja2xvZyBjYW4gcnVuIGZvciBtYW55XG4gICAgICAgIC8vIGJhdGNoZXMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGNhc2UgYSBUVEwgdXNlZCB0byBoYXZlIHRvIGNvdmVyLlxuICAgICAgICBpZiAocnVuPy5zaWduYWwuYWJvcnRlZCkgYnJlYWs7XG4gICAgICAgIGxldCBwdXJnZWQ6IG51bWJlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwdXJnZWQgPSBhd2FpdCBlbnRpdHkucHVyZ2VFeHBpcmVkKG5vdywgYmF0Y2hTaXplKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdQdXJnZSBiYXRjaCBmYWlsZWQnLCB7IGVudGl0eTogZW50aXR5Lm5hbWUsIGVycm9yOiBTdHJpbmcoZXJyKSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0b3RhbCArPSBwdXJnZWQ7XG4gICAgICAgIGlmIChwdXJnZWQgPCBiYXRjaFNpemUpIGJyZWFrOyAvLyBkcmFpbmVkXG4gICAgICAgIGlmIChpID09PSBtYXhCYXRjaGVzIC0gMSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdQdXJnZSBoaXQgcGVyLXRpY2sgY2FwOyByZW1haW5pbmcgdG9tYnN0b25lcyBkZWZlcnJlZCB0byBuZXh0IHRpY2snLCB7XG4gICAgICAgICAgICBlbnRpdHk6IGVudGl0eS5uYW1lLCBwdXJnZWRUaGlzVGljazogdG90YWwsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0b3RhbCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1B1cmdlZCBleHBpcmVkIHNvZnQtZGVsZXRlZCByb3dzJywgeyBlbnRpdHk6IGVudGl0eS5uYW1lLCBjb3VudDogdG90YWwgfSk7XG4gICAgICAgIGlmIChlbnRpdHkuYXVkaXRBY3Rpb24pIGF1ZGl0UmV0ZW50aW9uUHVyZ2UoZW50aXR5LmF1ZGl0QWN0aW9uLCBlbnRpdHkubmFtZSwgdG90YWwsIHJ1bklkKTtcbiAgICAgIH1cbiAgICAgIGNvdW50c1tlbnRpdHkubmFtZV0gPSB0b3RhbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnRzO1xuICB9KSk7XG59XG5cbi8qKlxuICogVGhlIGF1ZGl0IGV2ZW50IGZvciBvbmUgZW50aXR5J3MgaGFyZC1kZWxldGVzIGluIG9uZSB0aWNrLiBBIGNyb3NzLXRlbmFudFxuICogc3lzdGVtIGpvYiwgc28gaXQgaXMgYXR0cmlidXRlZCB0byB0aGUgc3lzdGVtIGFjdG9yIGluIHRoZSBzeXN0ZW0gb3JnO1xuICogYHRhcmdldFR5cGVgIGlzIHRoZSBlbnRpdHkgYW5kIHRoZXJlIGlzIG5vIHNpbmdsZSBgdGFyZ2V0SWRgLiBOZXZlciB0aHJvd3Mg4oCUXG4gKiBhbiB1bmJvdW5kIGF1ZGl0IGNsaWVudCAoYSB3aXJpbmcgYnVnKSBpcyBsb2dnZWQsIGFuZCB0aGUgc3dlZXAgY2FycmllcyBvbi5cbiAqL1xuZnVuY3Rpb24gYXVkaXRSZXRlbnRpb25QdXJnZShhY3Rpb246IFJlbW90ZUF1ZGl0QWN0aW9uLCBlbnRpdHk6IHN0cmluZywgY291bnQ6IG51bWJlciwgcnVuSWQ6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIHJlY29yZEF1ZGl0KHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGFjdG9ySWQ6IFNZU1RFTV9BQ1RPUl9JRCxcbiAgICAgIG9yZ0lkOiBTWVNURU1fT1JHX0lELFxuICAgICAgdGFyZ2V0VHlwZTogZW50aXR5LFxuICAgICAgZGV0YWlsczogeyB0cmlnZ2VyOiAncmV0ZW50aW9uJywgcnVuSWQsIGNvdW50IH0sXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcignUmV0ZW50aW9uIHB1cmdlIGF1ZGl0IG5vdCByZWNvcmRlZCcsIHsgZW50aXR5LCBjb3VudCwgZXJyb3I6IFN0cmluZyhlcnIpIH0pO1xuICB9XG59XG5cbi8vIC0tIFNjaGVkdWxlciBmYWN0b3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU29mdERlbGV0ZVB1cmdlU2NoZWR1bGVyT3B0aW9ucyBleHRlbmRzIFNvZnREZWxldGVQdXJnZU9wdGlvbnMge1xuICAvKiogU2VydmljZSBsYWJlbCBmb3IgbG9ncyArIHRoZSBsZWFkZXItbG9jayBrZXkgKGUuZy4gJ3BpcGVsaW5lJywgJ3BsdWdpbicpLiAqL1xuICBzZXJ2aWNlOiBTb2Z0RGVsZXRlU3dlZXBTZXJ2aWNlO1xuICAvKiogRW50aXRpZXMgdG8gc3dlZXAg4oCUIHVzdWFsbHkgdGhlIHNlcnZpY2UncyBvd24gQ3J1ZFNlcnZpY2Ugc2luZ2xldG9ucy4gKi9cbiAgZW50aXRpZXM6IFB1cmdlYWJsZUVudGl0eVtdO1xufVxuXG4vKipcbiAqIEJ1aWxkIChidXQgZG8gTk9UIHN0YXJ0KSBhIGxlYWRlci1sb2NrZWQgc2NoZWR1bGVyIHRoYXQgcnVucyB0aGUgc29mdC1kZWxldGVcbiAqIHB1cmdlIHN3ZWVwIGZvciBgZW50aXRpZXNgIG9uIGEgY2FkZW5jZS4gVGhlIGNhbGxlciBgLnN0YXJ0KClgcyBpdCBhbmQgd2lyZXNcbiAqIGBzdG9wKClgIHRvIFNJR1RFUk0uIFJldHVybnMgbnVsbCB3aGVuIHB1cmdpbmcgaXMgZGlzYWJsZWQuXG4gKlxuICogRW52IGNvbmZpZzpcbiAqICAgU09GVF9ERUxFVEVfUFVSR0VfRU5BQkxFRCAgICAgICAgICAgKGRlZmF1bHQgdHJ1ZTsgZmFsc2Ug4oeSIG51bGwsIG5vIHN3ZWVwKVxuICogICBTT0ZUX0RFTEVURV9QVVJHRV9JTlRFUlZBTF9IT1VSUyAgICAoZGVmYXVsdCA2KVxuICogICBTT0ZUX0RFTEVURV9QVVJHRV9TVEFSVFVQX0RFTEFZX01TICAoZGVmYXVsdCAxMjAwMDAg4oCUIDIgbWluIHNldHRsZSlcbiAqICAgU09GVF9ERUxFVEVfUFVSR0VfTE9DS19UVExfTVMgICAgICAgKGRlZmF1bHQgOTAwMDAwIOKAlCAxNSBtaW47IG91dGxhc3RzIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwLCBzdGF5cyB1bmRlciB0aGUgaW50ZXJ2YWwpXG4gKlxuICogQSBjcm9zcy1wb2QgbGVhZGVyIGxvY2sgKHdoZW4gUmVkaXMgaXMgY29uZmlndXJlZCkgbWVhbnMgb25seSBvbmUgcmVwbGljYVxuICogc3dlZXBzIHBlciB3aW5kb3c7IHdpdGhvdXQgUmVkaXMgaXQgcnVucyBvbiBldmVyeSBwb2Qg4oCUIHN0aWxsIHNhZmUsIHNpbmNlIHRoZVxuICogcHVyZ2UgaXMgYSBiYXRjaGVkIGlkZW1wb3RlbnQgREVMRVRFLCBqdXN0IHJlZHVuZGFudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNvZnREZWxldGVQdXJnZVNjaGVkdWxlcihvcHRzOiBTb2Z0RGVsZXRlUHVyZ2VTY2hlZHVsZXJPcHRpb25zKTogU2NoZWR1bGVyIHwgbnVsbCB7XG4gIGlmICghaXNTb2Z0RGVsZXRlUHVyZ2VFbmFibGVkKCkpIHtcbiAgICBsb2dnZXIuaW5mbygnU29mdC1kZWxldGUgcHVyZ2Ugc2NoZWR1bGVyIGRpc2FibGVkIChTT0ZUX0RFTEVURV9QVVJHRV9FTkFCTEVEPWZhbHNlKScsIHsgc2VydmljZTogb3B0cy5zZXJ2aWNlIH0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaW50ZXJ2YWxNcyA9IGVudkludCgnU09GVF9ERUxFVEVfUFVSR0VfSU5URVJWQUxfSE9VUlMnLCA2LCB7IG1pbjogMSB9KSAqIDYwICogNjAgKiAxMDAwO1xuICBjb25zdCBzdGFydHVwRGVsYXlNcyA9IGVudkludCgnU09GVF9ERUxFVEVfUFVSR0VfU1RBUlRVUF9ERUxBWV9NUycsIDEyMF8wMDAsIHsgbWluOiAwIH0pO1xuICBjb25zdCBsb2NrVHRsTXMgPSBlbnZJbnQoJ1NPRlRfREVMRVRFX1BVUkdFX0xPQ0tfVFRMX01TJywgREVGQVVMVF9MRUFERVJfTE9DS19UVExfTVMsIHsgbWluOiAxMDAwIH0pO1xuXG4gIGxvZ2dlci5pbmZvKCdTb2Z0LWRlbGV0ZSBwdXJnZSBzY2hlZHVsZXIgc3RhcnRpbmcnLCB7XG4gICAgc2VydmljZTogb3B0cy5zZXJ2aWNlLFxuICAgIGVudGl0aWVzOiBvcHRzLmVudGl0aWVzLm1hcCgoZSkgPT4gZS5uYW1lKSxcbiAgICBpbnRlcnZhbEhvdXJzOiBpbnRlcnZhbE1zIC8gM182MDBfMDAwLFxuICB9KTtcblxuICByZXR1cm4gY3JlYXRlU2NoZWR1bGVyKHtcbiAgICBuYW1lOiBgc29mdC1kZWxldGUtcHVyZ2U6JHtvcHRzLnNlcnZpY2V9YCxcbiAgICBpbnRlcnZhbE1zLFxuICAgIHN0YXJ0dXBEZWxheU1zLFxuICAgIHJ1bjogYXN5bmMgKHJ1bikgPT4geyBhd2FpdCBydW5Tb2Z0RGVsZXRlUHVyZ2Uob3B0cy5lbnRpdGllcywgb3B0cywgcnVuKTsgfSxcbiAgICBsb2NrOiB7IGtleTogbGVhZGVyTG9ja0tleShvcHRzLnNlcnZpY2UsICdzb2Z0LWRlbGV0ZS1wdXJnZScpLCB0dGxNczogbG9ja1R0bE1zIH0sXG4gIH0pO1xufVxuIl19
@@ -668,4 +668,4 @@ export async function revokeSupportContact(orgId, userId, revokedBy) {
668
668
  .returning({ id: schema.supportContact.id }));
669
669
  return { revoked: rows.length > 0, openCases };
670
670
  }
671
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC1jYXNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvc3VwcG9ydC1jYXNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBQ3RDOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUUsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxRQUFRLENBQVUsQ0FBQztBQUd0SCxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFpQyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBNkJ6Rjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsS0FBSyxVQUFVLHFCQUFxQixDQUFDLEVBQXFELEVBQUUsS0FBYTtJQUN2RyxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUU7U0FDbEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztTQUNqQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ2hDLGtCQUFrQixDQUFDO1FBQ2xCLE1BQU0sRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSztRQUN2QyxHQUFHLEVBQUU7WUFDSCxVQUFVLEVBQUUsR0FBRyxDQUFBLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsTUFBTTtZQUM1RCxT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QUM7SUFDaEQsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLEtBQWEsRUFDYixNQUFjLEVBQ2QsU0FBaUI7SUFFakIsTUFBTSxTQUFTLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7U0FDN0IsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztTQUMxRCxLQUFLLENBQUMsR0FBRyxDQUNSLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFDdEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUN4QyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQ3pDLENBQUM7U0FDRCxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4vKipcbiAqIFN1cHBvcnQtY2FzZSBwZXJzaXN0ZW5jZTogdGhlIHdvcmtmbG93IGhhbGYgb2YgYSBzdXBwb3J0IHRocmVhZC5cbiAqXG4gKiBIZXJlIHJhdGhlciB0aGFuIGluIGEgc2VydmljZSBiZWNhdXNlIHR3byBjYWxsZXJzIG5lZWQgaXQg4oCUIHBsYXRmb3JtIG93bnMgdGhlXG4gKiBlbnRpdGxlbWVudCBjaGVjayBhbmQgdGhlIHdyaXRlcywgYW5kIHRoZSBtZXNzYWdlIHNlcnZpY2Ugb3ducyB0aGUgdGhyZWFkIHRoZVxuICogY2FzZSBwb2ludHMgYXQg4oCUIGFuZCBuZWl0aGVyIHNob3VsZCBncm93IGl0cyBvd24gY29weSBvZiB0aGUgYWxsb2NhdG9yLlxuICpcbiAqIGBtZXNzYWdlc2Aga2VlcHMgY2FycnlpbmcgdGhlIGNvbnZlcnNhdGlvbi4gVGhlc2UgZnVuY3Rpb25zIG9ubHkgZXZlciB0b3VjaFxuICogdGhlIHdvcmtmbG93IGF4aXM6IGlkZW50aXR5LCBzdGF0dXMsIG93bmVyc2hpcCBhbmQgdGhlIHJlc3BvbnNlIGNsb2NrLlxuICovXG5cbmltcG9ydCB7IGFuZCwgYXNjLCBlcSwgZ3RlLCBpbkFycmF5LCBpc051bGwsIGx0ZSwgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi4vZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHR5cGUgeyBTdXBwb3J0Q2FzZSB9IGZyb20gJy4uL2RhdGFiYXNlL3NjaGVtYS9zdXBwb3J0LmpzJztcbmltcG9ydCB7IHJ1bldpdGhUZW5hbnRDb250ZXh0LCB3aXRoVGVuYW50VHggfSBmcm9tICcuLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuLyoqIFN0YXR1c2VzIGEgY2FzZSBjYW4gYmUgaW4uIGBhd2FpdGluZ19jdXN0b21lcmAgaXMgd2hhdCBzdG9wcyB0aGUgY2xvY2suICovXG5leHBvcnQgY29uc3QgU1VQUE9SVF9DQVNFX1NUQVRVU0VTID0gWydvcGVuJywgJ2F3YWl0aW5nX3N1cHBvcnQnLCAnYXdhaXRpbmdfY3VzdG9tZXInLCAncmVzb2x2ZWQnLCAnY2xvc2VkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTdXBwb3J0Q2FzZVN0YXR1cyA9ICh0eXBlb2YgU1VQUE9SVF9DQVNFX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogVGhlIHN0YXR1c2VzIHRoZSBzdGFmZiBxdWV1ZSBhc2tzIGFib3V0IOKAlCB0aGUgb25lcyBzdGlsbCBvbiB1cy4gKi9cbmV4cG9ydCBjb25zdCBRVUVVRV9TVEFUVVNFUzogcmVhZG9ubHkgU3VwcG9ydENhc2VTdGF0dXNbXSA9IFsnb3BlbicsICdhd2FpdGluZ19zdXBwb3J0J107XG5cbi8qKiBXaGF0IG9wZW5pbmcgYSBjYXNlIG5lZWRzLiBgbGV2ZWxgIGlzIGZyb3plbiBvbnRvIHRoZSByb3cgYXQgb3Blbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkNhc2VJbnB1dCB7XG4gIC8qKiBUaGUgcm9vdCBgbWVzc2FnZXMuaWRgLiBCZWNvbWVzIHRoZSBjYW5vbmljYWwgY2FzZSBpZGVudGl0eS4gKi9cbiAgdGhyZWFkSWQ6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgLyoqIFRoZSBzdXBwb3J0IGxldmVsIEhFTEQgQVQgT1BFTiwgZnJvemVuIHNvIGEgbWlkLWNhc2UgZG93bmdyYWRlIGNhbm5vdFxuICAgKiAgY2hhbmdlIHRoZSBwcm9taXNlIHVuZGVybmVhdGggc29tZW9uZSBhbHJlYWR5IHdhaXRpbmcuICovXG4gIGxldmVsOiBzdHJpbmc7XG4gIHNldmVyaXR5OiBzdHJpbmc7XG4gIC8qKiBUaGUgb3BlbmVyLiBBbHNvIHRoZSBpbml0aWFsIHRlbmFudCBvd25lciB3aGVuIHRoZXkgYXJlIGEgY29udGFjdC4gKi9cbiAgb3BlbmVkQnk6IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgY2FzZSB3YXMgb3BlbmVkIGJ5IHNwZW5kaW5nIGEgb25lLXRpbWUgaW5jaWRlbnQgcmF0aGVyIHRoYW5cbiAgICogIGFnYWluc3QgYSBjb250YWN0IHNlYXQsIHNvIGluY2lkZW50IHVzYWdlIGlzIGFuc3dlcmFibGUgZnJvbSB0aGUgY2FzZXNcbiAgICogIHRoZW1zZWx2ZXMgYW5kIG5vdCBvbmx5IGZyb20gYSBiYWxhbmNlIGRlbHRhLiAqL1xuICBvcGVuZWRXaXRoSW5jaWRlbnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0aGUgZmlyc3QgcmVzcG9uc2UgaXMgZHVlLCBhbHJlYWR5IGNvbXB1dGVkIGJ5IHRoZSBjYWxsZXIuXG4gICAqXG4gICAqIFBhc3NlZCBJTiByYXRoZXIgdGhhbiBkZXJpdmVkIGhlcmU6IHRoZSBidXNpbmVzcyBjYWxlbmRhciBpcyBkZXBsb3ltZW50XG4gICAqIGNvbmZpZyAoYFNVUFBPUlRfQlVTSU5FU1NfSE9VUlNfKmApIHJlYWQgYnkgYXBpLWNvcmUncyBgcmVzcG9uc2VEdWVBdGAsIGFuZFxuICAgKiB0aGlzIG1vZHVsZSBtdXN0IG5vdCByZWFjaCBmb3IgZW52IHRvIGFuc3dlciBhIHByb2R1Y3QgcXVlc3Rpb24uIE51bGwgaXMgYVxuICAgKiBsZWdpdGltYXRlIHZhbHVlIOKAlCBhIGxldmVsIHdpdGggbm8gcHVibGlzaGVkIHRhcmdldCwgb3IgYSBjYWxlbmRhciB0b29cbiAgICogYnJva2VuIHRvIGRlcml2ZSBvbmUg4oCUIGFuZCBpcyBzdG9yZWQgYXMgXCJubyBkZWFkbGluZVwiIHJhdGhlciB0aGFuIGd1ZXNzZWQuXG4gICAqL1xuICByZXNwb25zZUR1ZUF0PzogRGF0ZSB8IG51bGw7XG59XG5cbi8qKlxuICogQWxsb2NhdGUgdGhlIG5leHQgcGVyLW9yZyBjYXNlIG51bWJlci5cbiAqXG4gKiBQb3N0Z3JlcyBzZXF1ZW5jZXMgYXJlIGdsb2JhbCBhbmQgY2Fubm90IGJlIHBlci1vcmcgd2l0aG91dCBvbmUgc2VxdWVuY2UgcGVyXG4gKiB0ZW5hbnQsIHNvIHRoZSBjb3VudGVyIGlzIGEgcm93LiBgVVBEQVRFIOKApiBSRVRVUk5JTkdgIHRha2VzIHRoZSByb3cgbG9jayxcbiAqIHdoaWNoIHNlcmlhbGlzZXMgY29uY3VycmVudCBvcGVucyBXSVRISU4gb25lIG9yZyB3aGlsZSBsZWF2aW5nIG90aGVyIG9yZ3NcbiAqIHVudG91Y2hlZCDigJQgYSBnbG9iYWwgc2VxdWVuY2Ugd291bGQgc2VyaWFsaXNlIGV2ZXJ5Ym9keSwgYW5kIHdvdWxkIGFsc29cbiAqIGRpc2Nsb3NlIHRvdGFsIGNhc2Ugdm9sdW1lIHRvIGV2ZXJ5IGN1c3RvbWVyLlxuICpcbiAqIFRoZSB1cHNlcnQgc2VlZHMgYG5leHRfbnVtYmVyID0gMmAgb24gZmlyc3QgdXNlIGFuZCByZXR1cm5zIDEsIHNvIGFuIG9yZydzXG4gKiBmaXJzdCBjYXNlIGlzIGBBQ01FLTFgLiBNdXN0IHJ1biBpbnNpZGUgdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMgdGhlIGNhc2VcbiAqIGluc2VydDogYSBjb21taXR0ZWQgYWxsb2NhdGlvbiB3aXRoIGEgcm9sbGVkLWJhY2sgaW5zZXJ0IGJ1cm5zIGEgbnVtYmVyLCBhbmRcbiAqIGEgbnVtYmVyIGJ1cm5lZCBpcyBhIGdhcCBhIGN1c3RvbWVyIHdpbGwgZXZlbnR1YWxseSBhc2sgYWJvdXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFsbG9jYXRlRGlzcGxheU51bWJlcih0eDogUGFyYW1ldGVyczxQYXJhbWV0ZXJzPHR5cGVvZiB3aXRoVGVuYW50VHg+WzBdPlswXSwgb3JnSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB0eFxuICAgIC5pbnNlcnQoc2NoZW1hLnN1cHBvcnRDYXNlQ291bnRlcilcbiAgICAudmFsdWVzKHsgb3JnSWQsIG5leHROdW1iZXI6IDIgfSlcbiAgICAub25Db25mbGljdERvVXBkYXRlKHtcbiAgICAgIHRhcmdldDogc2NoZW1hLnN1cHBvcnRDYXNlQ291bnRlci5vcmdJZCxcbiAgICAgIHNldDoge1xuICAgICAgICBuZXh0TnVtYmVyOiBzcWxgJHtzY2hlbWEuc3VwcG9ydENhc2VDb3VudGVyLm5leHROdW1iZXJ9ICsgMWAsXG4gICAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIH0sXG4gICAgfSlcbiAgICAucmV0dXJuaW5nKHsgbmV4dDogc2NoZW1hLnN1cHBvcnRDYXNlQ291bnRlci5uZXh0TnVtYmVyIH0pO1xuICBjb25zdCBuZXh0ID0gcm93c1swXT8ubmV4dDtcbiAgaWYgKG5leHQgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdzdXBwb3J0IGNhc2UgbnVtYmVyIGFsbG9jYXRpb24gcmV0dXJuZWQgbm8gcm93Jyk7XG4gIC8vIE9uIElOU0VSVCB0aGUgcm93IGlzIHNlZWRlZCBhdCAyIGFuZCB0aGlzIGNhc2UgaXMgMTsgb24gVVBEQVRFIHRoZSBzdG9yZWRcbiAgLy8gdmFsdWUgaGFzIGFscmVhZHkgYmVlbiBpbmNyZW1lbnRlZCwgc28gdGhpcyBjYXNlIGlzIHRoZSB2YWx1ZSBtaW51cyBvbmUuXG4gIC8vIEJvdGggYnJhbmNoZXMgdGhlcmVmb3JlIHlpZWxkIFwidGhlIG51bWJlciBqdXN0IGNvbnN1bWVkXCIuXG4gIHJldHVybiBuZXh0IC0gMTtcbn1cblxuLyoqXG4gKiBPcGVuIGEgY2FzZSBmb3IgYW4gZXhpc3RpbmcgdGhyZWFkLCBhbGxvY2F0aW5nIGl0cyBkaXNwbGF5IG51bWJlci5cbiAqXG4gKiBPbmUgdHJhbnNhY3Rpb24gb24gcHVycG9zZTogdGhlIG51bWJlciBhbmQgdGhlIHJvdyBjb21taXQgdG9nZXRoZXIgb3IgbmVpdGhlclxuICogZG9lcy4gYHN1cHBvcnRfY2FzZV9vcmdfbnVtYmVyX3VxYCBpcyB0aGUgYmFja3N0b3Ag4oCUIGlmIHRoZSBhbGxvY2F0b3IgaXMgZXZlclxuICogYnlwYXNzZWQsIHRoZSBpbnNlcnQgZmFpbHMgcmF0aGVyIHRoYW4gaXNzdWluZyB0d28gY2FzZXMgdGhlIG9uZSBpZGVudGlmaWVyXG4gKiBjdXN0b21lcnMgcXVvdGUgYmFjay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5TdXBwb3J0Q2FzZShpbnB1dDogT3BlbkNhc2VJbnB1dCk6IFByb21pc2U8U3VwcG9ydENhc2U+IHtcbiAgcmV0dXJuIHdpdGhUZW5hbnRUeChhc3luYyAodHgpID0+IHtcbiAgICBjb25zdCBkaXNwbGF5TnVtYmVyID0gYXdhaXQgYWxsb2NhdGVEaXNwbGF5TnVtYmVyKHR4LCBpbnB1dC5vcmdJZCk7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHR4XG4gICAgICAuaW5zZXJ0KHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAgIC52YWx1ZXMoe1xuICAgICAgICB0aHJlYWRJZDogaW5wdXQudGhyZWFkSWQsXG4gICAgICAgIG9yZ0lkOiBpbnB1dC5vcmdJZCxcbiAgICAgICAgZGlzcGxheU51bWJlcixcbiAgICAgICAgc3RhdHVzOiAnb3BlbicsXG4gICAgICAgIHNldmVyaXR5OiBpbnB1dC5zZXZlcml0eSxcbiAgICAgICAgbGV2ZWw6IGlucHV0LmxldmVsLFxuICAgICAgICBvcGVuZWRXaXRoSW5jaWRlbnQ6IGlucHV0Lm9wZW5lZFdpdGhJbmNpZGVudCA/PyBmYWxzZSxcbiAgICAgICAgLy8gRnJvemVuIGF0IG9wZW4sIGxpa2UgYGxldmVsYDogYSB3b3JraW5nLXdlZWsgb3IgaG9saWRheSBjaGFuZ2UgbXVzdFxuICAgICAgICAvLyBub3QgbW92ZSBhIHByb21pc2UgYWxyZWFkeSBtYWRlLlxuICAgICAgICByZXNwb25zZUR1ZUF0OiBpbnB1dC5yZXNwb25zZUR1ZUF0ID8/IG51bGwsXG4gICAgICAgIC8vIFRoZSBvcGVuZXIgb3ducyBpdCBvbiB0aGUgdGVuYW50IHNpZGUgdW50aWwgaXQgaXMgaGFuZGVkIG92ZXIuXG4gICAgICAgIHRlbmFudENvbnRhY3Q6IGlucHV0Lm9wZW5lZEJ5LFxuICAgICAgICBjcmVhdGVkQnk6IGlucHV0Lm9wZW5lZEJ5LFxuICAgICAgICB1cGRhdGVkQnk6IGlucHV0Lm9wZW5lZEJ5LFxuICAgICAgfSlcbiAgICAgIC5yZXR1cm5pbmcoKTtcbiAgICBjb25zdCByb3cgPSByb3dzWzBdO1xuICAgIGlmICghcm93KSB0aHJvdyBuZXcgRXJyb3IoJ3N1cHBvcnQgY2FzZSBpbnNlcnQgcmV0dXJuZWQgbm8gcm93Jyk7XG4gICAgcmV0dXJuIHJvdztcbiAgfSk7XG59XG5cbi8qKiBUaGUgY2FzZSBmb3IgYSB0aHJlYWQsIG9yIG51bGwuIFRoZSB0aHJlYWQgcm9vdCBpZCBJUyB0aGUgY2FzZSBpZGVudGl0eS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kQ2FzZUJ5VGhyZWFkKHRocmVhZElkOiBzdHJpbmcpOiBQcm9taXNlPFN1cHBvcnRDYXNlIHwgbnVsbD4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KClcbiAgICAuZnJvbShzY2hlbWEuc3VwcG9ydENhc2UpXG4gICAgLndoZXJlKGFuZChlcShzY2hlbWEuc3VwcG9ydENhc2UudGhyZWFkSWQsIHRocmVhZElkKSwgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5kZWxldGVkQXQpKSlcbiAgICAubGltaXQoMSkpO1xuICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xufVxuXG4vKipcbiAqIFRoZSBzdGFmZiBxdWV1ZTogb3BlbiBjYXNlcyBhY3Jvc3MgQUxMIHRlbmFudHMsIG9sZGVzdCBmaXJzdC5cbiAqXG4gKiBUaGUgb25lIHJlYWQgd2l0aCBubyBvcmcgcHJlZGljYXRlLCBzbyBpdCBydW5zIHVuZGVyIHN5c2FkbWluIHNjb3BlIGFuZCBpc1xuICogc2VydmVkIGJ5IHRoZSBwYXJ0aWFsIGBzdXBwb3J0X2Nhc2VfcXVldWVfaWR4YC5cbiAqXG4gKiBPcmRlcmVkIGJ5IGByZXNwb25zZV9kdWVfYXRgIEFTQ0VORElORywgTlVMTFMgTEFTVCDigJQgc29vbmVzdCBkZWFkbGluZSBmaXJzdCxcbiAqIHdoaWNoIGlzIHdoYXQgXCJtb3N0IGF0IHJpc2tcIiBhY3R1YWxseSBtZWFucy4gQXJyaXZhbCBvcmRlciB3YXMgdGhlIGVhcmxpZXJcbiAqIHByb3h5IGZvciBpdCBhbmQgaXMgYSBwb29yIG9uZTogYSBzdGFuZGFyZCBjYXNlIG9wZW5lZCBvbiBNb25kYXkgaXMgb3dlZFxuICogV2VkbmVzZGF5J3MgY2xvc2Ugd2hpbGUgYSBwcmlvcml0eSBjYXNlIG9wZW5lZCBvbiBUdWVzZGF5IGlzIG93ZWQgV2VkbmVzZGF5J3NcbiAqIGNsb3NlIHRvbywgc28gYXJyaXZhbCBvcmRlciBwdXRzIHRoZW0gaW4gdGhlIHdyb25nIHNlcXVlbmNlIHdoZW5ldmVyIGxldmVsc1xuICogYXJlIG1peGVkLiBDYXNlcyB3aXRoIG5vIGRlYWRsaW5lIChhbiB1bnJlY29nbmlzZWQgbGV2ZWwsIG9yIG9uZSBvcGVuZWQgd2hpbGVcbiAqIHRoZSBjYWxlbmRhciB3YXMgbWlzY29uZmlndXJlZCkgc29ydCBsYXN0IHJhdGhlciB0aGFuIGZpcnN0LCBzaW5jZSBhIG1pc3NpbmdcbiAqIGRlYWRsaW5lIGlzIG5vdCBhbiB1cmdlbnQgb25lOyBgY3JlYXRlZEF0YCBicmVha3MgdGllcyBzbyB0aGUgb3JkZXIgaXMgc3RhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFF1ZXVlKGxpbWl0ID0gMTAwKTogUHJvbWlzZTxTdXBwb3J0Q2FzZVtdPiB7XG4gIHJldHVybiB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3QoKVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgaW5BcnJheShzY2hlbWEuc3VwcG9ydENhc2Uuc3RhdHVzLCBbLi4uUVVFVUVfU1RBVFVTRVNdKSxcbiAgICAgIGlzTnVsbChzY2hlbWEuc3VwcG9ydENhc2UuZGVsZXRlZEF0KSxcbiAgICApKVxuICAgIC5vcmRlckJ5KHNxbGAke3NjaGVtYS5zdXBwb3J0Q2FzZS5yZXNwb25zZUR1ZUF0fSBBU0MgTlVMTFMgTEFTVGAsIGFzYyhzY2hlbWEuc3VwcG9ydENhc2UuY3JlYXRlZEF0KSlcbiAgICAubGltaXQobGltaXQpKTtcbn1cblxuLyoqXG4gKiBQcmVtaXVtIGNhc2VzIHdob3NlIHJlc3BvbnNlIHRhcmdldCBpcyBhcHByb2FjaGluZyB3aXRoIG5vIGZpcnN0IHJlc3BvbnNlIHlldC5cbiAqXG4gKiBUSEUgb24tY2FsbCBzd2VlcCdzIG9ubHkgcXVlcnksIGFuZCB0aGUgcmVhc29uIHRoZSBwYWdlciBpcyB3b3J0aCBvd25pbmcgdGhlXG4gKiB0cmlnZ2VyIGZvcjogdGhpcyBpcyBhbiBFWEFDVCBwZXItY2FzZSBkZWFkbGluZSwgd2hlcmUgdGhlIGZsZWV0IGFsZXJ0XG4gKiAoYFN1cHBvcnRQcmVtaXVtRmlyc3RSZXNwb25zZUF0Umlza2ApIGlzIGEgcDkwIG92ZXIgc2l4IGhvdXJzIHRoYXQgY2FuIG9ubHlcbiAqIHNheSB0aGUgZGlzdHJpYnV0aW9uIGFscmVhZHkgZHJpZnRlZCDigJQgbmV2ZXIgd2hpY2ggY2FzZSBpcyBhYm91dCB0byBicmVhY2guXG4gKlxuICogVGhlIHByZWRpY2F0ZSBtYXRjaGVzIGBzdXBwb3J0X2Nhc2VfcmVzcG9uc2VfZHVlX2lkeGAgZXhhY3RseSwgd2hpY2ggaXMgYVxuICogUEFSVElBTCBpbmRleCBvbiBgKHJlc3BvbnNlX2R1ZV9hdCkgV0hFUkUgbGV2ZWwgPSAnc3VwcG9ydF9wcmVtaXVtJyBBTkRcbiAqIGZpcnN0X3Jlc3BvbnNlX2F0IElTIE5VTEwgQU5EIGRlbGV0ZWRfYXQgSVMgTlVMTGAuIE5vdGUgYGxldmVsYCBhbmQgbm90XG4gKiBgaXNfcHJlbWl1bWA6IHRoYXQgY29sdW1uIGxpdmVzIG9uIHN1cHBvcnRfQ09OVEFDVFMgYW5kIG1hcmtzIGFuIHVwZ3JhZGVkXG4gKiBjb250YWN0LCB3aGlsZSBhIGNhc2UgZnJlZXplcyB0aGUgb3BlbmluZyBjb250YWN0J3MgZWZmZWN0aXZlIGxldmVsIGF0IG9wZW4g4oCUXG4gKiBzbyB0aGUgY2FzZSdzIG93biBwcm9taXNlIGlzIGl0cyBgbGV2ZWxgLCBhbmQgZmxpcHBpbmcgdGhlIGNvbnRhY3QgbGF0ZXIgbXVzdFxuICogbm90IGNoYW5nZSBhIGRlYWRsaW5lIGFscmVhZHkgcHVibGlzaGVkIHRvIGEgY3VzdG9tZXIuIFRoYXQgbWF0dGVycyBiZWNhdXNlIHRoaXMgcnVucyBvbiBhIHRpbWVyXG4gKiBmb3JldmVyOiB0aGUgcm93cyBpdCB3YW50cyBhcmUgYSB0aW55IGFuZCBzaHJpbmtpbmcgZnJhY3Rpb24gb2YgdGhlIHRhYmxlLCBzb1xuICogdGhlIGluZGV4IHN0YXlzIHNtYWxsIHdoaWxlIHRoZSB0YWJsZSBncm93cywgYW5kIHdpdGhvdXQgaXQgZXZlcnkgdGljayBpcyBhXG4gKiBzY2FuLlxuICpcbiAqIERlbGliZXJhdGVseSBOT1QgZmlsdGVyZWQgb24gc3RhdHVzLiBBIGNhc2UgdGhhdCBpcyBgYXdhaXRpbmdfc3VwcG9ydGAgYW5kIG9uZVxuICogdGhhdCBpcyBgb3BlbmAgYm90aCBvd2UgYSBmaXJzdCByZXNwb25zZSwgYW5kIHJlYWRpbmcgdGhlIHN0YXR1cyBoZXJlIHdvdWxkXG4gKiBkdXBsaWNhdGUgYSBydWxlIHRoYXQgYGZpcnN0X3Jlc3BvbnNlX2F0IElTIE5VTExgIGFscmVhZHkgc3RhdGVzIGV4YWN0bHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0Q2FzZXNEdWVGb3JQYWdlKGxlYWRNczogbnVtYmVyLCBsaW1pdCA9IDEwMCk6IFByb21pc2U8U3VwcG9ydENhc2VbXT4ge1xuICBjb25zdCBjdXRvZmYgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgbGVhZE1zKTtcbiAgLy8gVEhJUyBGVU5DVElPTiBJUyBUSEUgUFJJVklMRUdFIEJPVU5EQVJZLCBzbyB0aGUgc2NvcGUgaXMgZXN0YWJsaXNoZWQgaGVyZVxuICAvLyByYXRoZXIgdGhhbiBsZWZ0IHRvIHRoZSBjYWxsZXIuIFRoZSBzd2VlcCBydW5zIG9uIGEgdGltZXIgd2l0aCBubyByZXF1ZXN0XG4gIC8vIGFuZCB0aGVyZWZvcmUgbm8gdGVuYW50IGNvbnRleHQsIGFuZCBgc3VwcG9ydF9jYXNlc2AgaXMgUkxTIEZPUkNFJ2Qg4oCUIHNvXG4gIC8vIHdpdGhvdXQgYSBzY29wZSB0aGUgcmVhZCByZXR1cm5zIHplcm8gcm93cyAoYW5kIHRocm93cyBpbiBwcm9kdWN0aW9uXG4gIC8vIGBzdHJpY3RgIG1vZGUpLCB3aGljaCBpcyB0aGUgc2hhcGUgb2YgYSBzd2VlcCB0aGF0IHNpbGVudGx5IGNvdmVycyBub3RoaW5nLlxuICAvLyBDcm9zcy10ZW5hbnQgaXMgdGhlIHBvaW50OiBvbmUgb3BlcmF0b3Igcm90YSBhbnN3ZXJzIGZvciBldmVyeSBvcmcnc1xuICAvLyBwcmVtaXVtIGNhc2VzLiBPbmx5IElEUyBsZWF2ZSBoZXJlOyB0aGUgcGFnZXIgbmV2ZXIgcmVjZWl2ZXMgY2FzZSBjb250ZW50LlxuICByZXR1cm4gcnVuV2l0aFRlbmFudENvbnRleHQoeyBpc1N1cGVyQWRtaW46IHRydWUgfSwgKCkgPT4gd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KClcbiAgICAuZnJvbShzY2hlbWEuc3VwcG9ydENhc2UpXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q2FzZS5sZXZlbCwgJ3N1cHBvcnRfcHJlbWl1bScpLFxuICAgICAgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5maXJzdFJlc3BvbnNlQXQpLFxuICAgICAgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5kZWxldGVkQXQpLFxuICAgICAgbHRlKHNjaGVtYS5zdXBwb3J0Q2FzZS5yZXNwb25zZUR1ZUF0LCBjdXRvZmYpLFxuICAgICkpXG4gICAgLm9yZGVyQnkoYXNjKHNjaGVtYS5zdXBwb3J0Q2FzZS5yZXNwb25zZUR1ZUF0KSlcbiAgICAubGltaXQobGltaXQpKSk7XG59XG5cbi8qKiBBbiBvcmcncyBvd24gY2FzZXMsIG5ld2VzdCBmaXJzdC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0T3JnQ2FzZXMob3JnSWQ6IHN0cmluZywgbGltaXQgPSAxMDApOiBQcm9taXNlPFN1cHBvcnRDYXNlW10+IHtcbiAgcmV0dXJuIHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnNlbGVjdCgpXG4gICAgLmZyb20oc2NoZW1hLnN1cHBvcnRDYXNlKVxuICAgIC53aGVyZShhbmQoZXEoc2NoZW1hLnN1cHBvcnRDYXNlLm9yZ0lkLCBvcmdJZCksIGlzTnVsbChzY2hlbWEuc3VwcG9ydENhc2UuZGVsZXRlZEF0KSkpXG4gICAgLm9yZGVyQnkoc3FsYCR7c2NoZW1hLnN1cHBvcnRDYXNlLmNyZWF0ZWRBdH0gREVTQ2ApXG4gICAgLmxpbWl0KGxpbWl0KSk7XG59XG5cbi8qKlxuICogU3RhbXAgdGhlIGZpcnN0IHN0YWZmIHJlc3BvbnNlLCBvbmNlLlxuICpcbiAqIGBmaXJzdF9yZXNwb25zZV9hdCBJUyBOVUxMYCBpcyBpbiB0aGUgV0hFUkUgY2xhdXNlIHJhdGhlciB0aGFuIGNoZWNrZWQgYnkgdGhlXG4gKiBjYWxsZXI6IHRoaXMgaXMgVEhFIG51bWJlciB0aGUgcmVzcG9uc2UgdGFyZ2V0IGlzIHNvbGQgb24sIHNvIGEgc2Vjb25kIHJlcGx5XG4gKiBtdXN0IG5vdCBiZSBhYmxlIHRvIG1vdmUgaXQuIFJldHVybnMgd2hldGhlciB0aGlzIGNhbGwgd2FzIHRoZSBvbmUgdGhhdFxuICogc3RhbXBlZCBpdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YW1wRmlyc3RSZXNwb25zZShjYXNlSWQ6IHN0cmluZywgYXQ6IERhdGUgPSBuZXcgRGF0ZSgpKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC51cGRhdGUoc2NoZW1hLnN1cHBvcnRDYXNlKVxuICAgIC5zZXQoeyBmaXJzdFJlc3BvbnNlQXQ6IGF0LCB1cGRhdGVkQXQ6IGF0IH0pXG4gICAgLndoZXJlKGFuZChlcShzY2hlbWEuc3VwcG9ydENhc2UuaWQsIGNhc2VJZCksIGlzTnVsbChzY2hlbWEuc3VwcG9ydENhc2UuZmlyc3RSZXNwb25zZUF0KSkpXG4gICAgLnJldHVybmluZyh7IGlkOiBzY2hlbWEuc3VwcG9ydENhc2UuaWQgfSkpO1xuICByZXR1cm4gcm93cy5sZW5ndGggPiAwO1xufVxuXG4vKipcbiAqIE1vdmUgYSBjYXNlJ3Mgc3RhdHVzLCBtYWludGFpbmluZyB0aGUgcmVzcG9uc2UgY2xvY2suXG4gKlxuICogRW50ZXJpbmcgYGF3YWl0aW5nX2N1c3RvbWVyYCBhbmNob3JzIGBhd2FpdGluZ1NpbmNlYDsgbGVhdmluZyBpdCBmb2xkcyB0aGVcbiAqIGVsYXBzZWQgc3BhbiBpbnRvIGBhd2FpdGluZ1RvdGFsU2Vjb25kc2AgYW5kIGNsZWFycyB0aGUgYW5jaG9yLiBBZ2VpbmcgdGhlblxuICogc3VidHJhY3RzIHRoZSBhY2N1bXVsYXRvciwgc28gYSBjYXNlIHdlIGFuc3dlcmVkIGluIGFuIGhvdXIgYW5kIHRoZSB0ZW5hbnRcbiAqIHJlcGxpZWQgdG8gZm91ciBkYXlzIGxhdGVyIGRvZXMgbm90IHJlYWQgYXMgYSBmb3VyLWRheSBjYXNlIOKAlCB3aGljaCBpcyB0aGVcbiAqIG51bWJlciBubyBjdXN0b21lciB3b3VsZCBhY2NlcHQuXG4gKlxuICogVGhlIGFyaXRobWV0aWMgaXMgZG9uZSBpbiBTUUwgYWdhaW5zdCB0aGUgc3RvcmVkIGFuY2hvciByYXRoZXIgdGhhbiBmcm9tIGFcbiAqIGNhbGxlci1zdXBwbGllZCBkdXJhdGlvbiwgc28gYSBjbG9jayBza2V3IG9yIGEgbG9zdCByb3VuZCB0cmlwIGNhbm5vdCBpbmZsYXRlXG4gKiBvciBlcmFzZSBwYXVzZWQgdGltZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldENhc2VTdGF0dXMoXG4gIGNhc2VJZDogc3RyaW5nLFxuICBzdGF0dXM6IFN1cHBvcnRDYXNlU3RhdHVzLFxuICBhY3RvcklkOiBzdHJpbmcsXG4pOiBQcm9taXNlPFN1cHBvcnRDYXNlIHwgbnVsbD4ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBlbnRlcmluZyA9IHN0YXR1cyA9PT0gJ2F3YWl0aW5nX2N1c3RvbWVyJztcbiAgY29uc3QgY2xvc2luZyA9IHN0YXR1cyA9PT0gJ2Nsb3NlZCcgfHwgc3RhdHVzID09PSAncmVzb2x2ZWQnO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAuc2V0KHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIHVwZGF0ZWRCeTogYWN0b3JJZCxcbiAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgLy8gQW5jaG9yIG9uIGVudHJ5OyBvbiBhbnkgb3RoZXIgdHJhbnNpdGlvbiBmb2xkIHRoZSBvcGVuIHNwYW4gaW4gYW5kIGNsZWFyLlxuICAgICAgYXdhaXRpbmdTaW5jZTogZW50ZXJpbmcgPyBub3cgOiBudWxsLFxuICAgICAgYXdhaXRpbmdUb3RhbFNlY29uZHM6IGVudGVyaW5nXG4gICAgICAgID8gc2NoZW1hLnN1cHBvcnRDYXNlLmF3YWl0aW5nVG90YWxTZWNvbmRzXG4gICAgICAgIDogc3FsYCR7c2NoZW1hLnN1cHBvcnRDYXNlLmF3YWl0aW5nVG90YWxTZWNvbmRzfSArIENPQUxFU0NFKEVYVFJBQ1QoRVBPQ0ggRlJPTSAoJHtub3cudG9JU09TdHJpbmcoKX06OnRpbWVzdGFtcHR6IC0gJHtzY2hlbWEuc3VwcG9ydENhc2UuYXdhaXRpbmdTaW5jZX0pKTo6aW50LCAwKWAsXG4gICAgICAuLi4oY2xvc2luZyA/IHsgY2xvc2VkQXQ6IG5vdywgY2xvc2VkQnk6IGFjdG9ySWQgfSA6IHsgY2xvc2VkQXQ6IG51bGwsIGNsb3NlZEJ5OiBudWxsIH0pLFxuICAgIH0pXG4gICAgLndoZXJlKGFuZChlcShzY2hlbWEuc3VwcG9ydENhc2UuaWQsIGNhc2VJZCksIGlzTnVsbChzY2hlbWEuc3VwcG9ydENhc2UuZGVsZXRlZEF0KSkpXG4gICAgLnJldHVybmluZygpKTtcbiAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBSZS1yYW5rIGEgY2FzZSdzIHNldmVyaXR5LlxuICpcbiAqIFNUQUZGIE9OTFkgYXQgdGhlIHJvdXRlIGxheWVyLCBhbmQgdGhhdCBpcyB0aGUgZ292ZXJuYW5jZSBwb2ludCByYXRoZXIgdGhhbiBhXG4gKiBwZXJtaXNzaW9uIGRldGFpbDogdGhlIHRlbmFudCBjaG9vc2VzIHNldmVyaXR5IHdoZW4gb3BlbmluZywgc28gaWYgdGhleSBjb3VsZFxuICogYWxzbyBjaGFuZ2UgaXQgYWZ0ZXJ3YXJkcyB0aGV5IHdvdWxkIHVuaWxhdGVyYWxseSBwaWNrIHRoZSByZXNwb25zZSB0YXJnZXRcbiAqIHRoZXkgYXJlIG93ZWQuIFNldmVyaXR5IGRlY2lkZXMgd2hpY2ggdGFyZ2V0IGFwcGxpZXMsIHNvIHJlLXJhbmtpbmcgaGFzIHRvIGJlXG4gKiBvdXJzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0Q2FzZVNldmVyaXR5KGNhc2VJZDogc3RyaW5nLCBzZXZlcml0eTogc3RyaW5nLCBhY3RvcklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnVwZGF0ZShzY2hlbWEuc3VwcG9ydENhc2UpXG4gICAgLnNldCh7IHNldmVyaXR5LCB1cGRhdGVkQnk6IGFjdG9ySWQsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9KVxuICAgIC53aGVyZShhbmQoZXEoc2NoZW1hLnN1cHBvcnRDYXNlLmlkLCBjYXNlSWQpLCBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmRlbGV0ZWRBdCkpKVxuICAgIC5yZXR1cm5pbmcoeyBzZXZlcml0eTogc2NoZW1hLnN1cHBvcnRDYXNlLnNldmVyaXR5IH0pKTtcbiAgcmV0dXJuIHJvd3NbMF0/LnNldmVyaXR5ID8/IG51bGw7XG59XG5cbi8qKlxuICogU2V0IG9yIGNsZWFyIHRoZSBTVEFGRiBvd25lci5cbiAqXG4gKiBgbnVsbGAgaXMgYSBsZWdpdGltYXRlIHZhbHVlOiBpdCBpcyB0aGUgdW5vd25lZCBwb29sLCBhbmQgaG93IFwiSSBjYW5ub3QgdGFrZVxuICogdGhpc1wiIGlzIGV4cHJlc3NlZCB3aXRob3V0IGludmVudGluZyBhIHBzZXVkby1hc3NpZ25lZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2lnbkNhc2UoY2FzZUlkOiBzdHJpbmcsIGFzc2lnbmVkVG86IHN0cmluZyB8IG51bGwsIGFjdG9ySWQ6IHN0cmluZyk6IFByb21pc2U8U3VwcG9ydENhc2UgfCBudWxsPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC51cGRhdGUoc2NoZW1hLnN1cHBvcnRDYXNlKVxuICAgIC5zZXQoeyBhc3NpZ25lZFRvLCB1cGRhdGVkQnk6IGFjdG9ySWQsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9KVxuICAgIC53aGVyZShhbmQoZXEoc2NoZW1hLnN1cHBvcnRDYXNlLmlkLCBjYXNlSWQpLCBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmRlbGV0ZWRBdCkpKVxuICAgIC5yZXR1cm5pbmcoKSk7XG4gIHJldHVybiByb3dzWzBdID8/IG51bGw7XG59XG5cbi8qKlxuICogQXNzaWduIG9yIHJlbGVhc2UgTUFOWSBjYXNlcyBhdCBvbmNlLlxuICpcbiAqIE9uZSBzdGF0ZW1lbnQgcmF0aGVyIHRoYW4gYSBsb29wLCB3aGljaCBpcyB0aGUgcG9pbnQ6IGEgc3RhZmYgbWVtYmVyIGNsZWFyaW5nXG4gKiBhIHF1ZXVlIG9mIHRoaXJ0eSBzZWxlY3RzIHRoaXJ0eSBhbmQgYWN0cyBvbmNlLCBhbmQgdGhpcnR5IHJvdW5kIHRyaXBzIHdvdWxkXG4gKiBtYWtlIHRoZSBvYnZpb3VzIGludGVyYWN0aW9uIHRoZSBzbG93IG9uZS4gSXQgYWxzbyBtYWtlcyB0aGUgd3JpdGUgQVRPTUlDIOKAlCBhXG4gKiBwYXJ0aWFsIGJ1bGsgYXNzaWduIGxlYXZlcyB0aGUgcXVldWUgaW4gYSBzdGF0ZSBub2JvZHkgY2hvc2UsIGFuZCB0aGUgb3BlcmF0b3JcbiAqIGNhbm5vdCB0ZWxsIHdoaWNoIGhhbGYgdG9vay5cbiAqXG4gKiBSZXR1cm5zIHRoZSBpZHMgdGhhdCBhY3R1YWxseSBtb3ZlZCByYXRoZXIgdGhhbiBhIGNvdW50LCBzbyBhIGNhbGxlciBjYW5cbiAqIHJlcG9ydCBwcmVjaXNlbHkgd2hhdCBoYXBwZW5lZCB3aGVuIHRoZSBzZWxlY3Rpb24gaW5jbHVkZWQgc29tZXRoaW5nIHN0YWxlOlxuICogYSBjYXNlIGNsb3NlZCBvciByZWFzc2lnbmVkIGJ5IHNvbWVib2R5IGVsc2UgYmV0d2VlbiB0aGUgcmVhZCBhbmQgdGhlIGNsaWNrLlxuICogVGhhdCBpcyB0aGUgbm9ybWFsIGNhc2Ugb24gYSBzaGFyZWQgcXVldWUsIG5vdCBhbiBlZGdlIG9uZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2lnbkNhc2VzKFxuICBjYXNlSWRzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgYXNzaWduZWRUbzogc3RyaW5nIHwgbnVsbCxcbiAgYWN0b3JJZDogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBpZiAoY2FzZUlkcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnVwZGF0ZShzY2hlbWEuc3VwcG9ydENhc2UpXG4gICAgLnNldCh7IGFzc2lnbmVkVG8sIHVwZGF0ZWRCeTogYWN0b3JJZCwgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpIH0pXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGluQXJyYXkoc2NoZW1hLnN1cHBvcnRDYXNlLmlkLCBbLi4uY2FzZUlkc10pLFxuICAgICAgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5kZWxldGVkQXQpLFxuICAgICkpXG4gICAgLnJldHVybmluZyh7IGlkOiBzY2hlbWEuc3VwcG9ydENhc2UuaWQgfSkpO1xuICByZXR1cm4gcm93cy5tYXAoKHIpID0+IHIuaWQpO1xufVxuXG4vKipcbiAqIENsb3NlIE1BTlkgY2FzZXMgYXQgb25jZS5cbiAqXG4gKiBTZXBhcmF0ZSBmcm9tIHtAbGluayBhc3NpZ25DYXNlc30gcmF0aGVyIHRoYW4gYSBnZW5lcmljIGJ1bGstdXBkYXRlLCBiZWNhdXNlXG4gKiBjbG9zaW5nIG1haW50YWlucyB0aGUgcmVzcG9uc2UgY2xvY2sg4oCUIGl0IGZvbGRzIHRoZSBvcGVuIGF3YWl0aW5nIHNwYW4gaW50b1xuICogdGhlIGFjY3VtdWxhdG9yIGFuZCBzdGFtcHMgYGNsb3NlZEF0YCDigJQgYW5kIGEgZ2VuZXJpYyBzZXR0ZXIgd291bGQgcXVpZXRseVxuICogc2tpcCB0aGF0LiBUaGUgYXJpdGhtZXRpYyBpcyB0aGUgc2FtZSBTUUwgYHNldENhc2VTdGF0dXNgIHVzZXMsIGZvciB0aGUgc2FtZVxuICogcmVhc29uOiBkb25lIGFnYWluc3QgdGhlIFNUT1JFRCBhbmNob3Igc28gYSBjbG9jayBza2V3IGNhbm5vdCBpbmZsYXRlIHBhdXNlZFxuICogdGltZS5cbiAqXG4gKiBPbmx5IGV2ZXIgdXNlZCB0byBDTE9TRS4gQnVsayBSRU9QRU5JTkcgaXMgZGVsaWJlcmF0ZWx5IG5vdCBvZmZlcmVkOiByZW9wZW5pbmdcbiAqIGlzIHN0YWZmLW9ubHkgYW5kIGNhc2UtYnktY2FzZSBieSBkZXNpZ24sIGFuZCBhIGJ1bGsgcmVvcGVuIGlzIGhvdyBhIHF1ZXVlXG4gKiBzb21lb25lIGhhcyBmaW5pc2hlZCB3aXRoIGNvbWVzIGJhY2sgYWxsIGF0IG9uY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZUNhc2VzKGNhc2VJZHM6IHJlYWRvbmx5IHN0cmluZ1tdLCBhY3RvcklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGlmIChjYXNlSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAuc2V0KHtcbiAgICAgIHN0YXR1czogJ2Nsb3NlZCcsXG4gICAgICBjbG9zZWRBdDogbm93LFxuICAgICAgY2xvc2VkQnk6IGFjdG9ySWQsXG4gICAgICB1cGRhdGVkQnk6IGFjdG9ySWQsXG4gICAgICB1cGRhdGVkQXQ6IG5vdyxcbiAgICAgIGF3YWl0aW5nU2luY2U6IG51bGwsXG4gICAgICBhd2FpdGluZ1RvdGFsU2Vjb25kczogc3FsYCR7c2NoZW1hLnN1cHBvcnRDYXNlLmF3YWl0aW5nVG90YWxTZWNvbmRzfSArIENPQUxFU0NFKEVYVFJBQ1QoRVBPQ0ggRlJPTSAoJHtub3cudG9JU09TdHJpbmcoKX06OnRpbWVzdGFtcHR6IC0gJHtzY2hlbWEuc3VwcG9ydENhc2UuYXdhaXRpbmdTaW5jZX0pKTo6aW50LCAwKWAsXG4gICAgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgaW5BcnJheShzY2hlbWEuc3VwcG9ydENhc2UuaWQsIFsuLi5jYXNlSWRzXSksXG4gICAgICBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmRlbGV0ZWRBdCksXG4gICAgICAvLyBBbHJlYWR5LWNsb3NlZCBjYXNlcyBhcmUgc2tpcHBlZCByYXRoZXIgdGhhbiByZS1zdGFtcGVkLCBzbyBhIGJ1bGtcbiAgICAgIC8vIGNsb3NlIG92ZXIgYSBzZWxlY3Rpb24gdGhhdCBpbmNsdWRlcyBvbmUgZG9lcyBub3QgbW92ZSBpdHMgY2xvc2VkQXQuXG4gICAgICBzcWxgJHtzY2hlbWEuc3VwcG9ydENhc2Uuc3RhdHVzfSA8PiAnY2xvc2VkJ2AsXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q2FzZS5pZCB9KSk7XG4gIHJldHVybiByb3dzLm1hcCgocikgPT4gci5pZCk7XG59XG5cbi8qKlxuICogSGFuZCB0aGUgY2FzZSB0byBhbm90aGVyIHRlbmFudCBjb250YWN0LlxuICpcbiAqIE5vdGUgd2hhdCB0aGlzIGRvZXMgTk9UIHRvdWNoOiBgY3JlYXRlZEJ5YC4gVGhhdCBpcyB0aGUgaW1tdXRhYmxlIGF1ZGl0IGZhY3RcbiAqIG9mIHdobyByYWlzZWQgdGhlIGNhc2Ug4oCUIG11dGF0aW5nIGl0IHRvIGV4cHJlc3MgXCJzb21lb25lIGVsc2Ugb3ducyB0aGlzIG5vd1wiXG4gKiB3b3VsZCBkZXN0cm95IHRoZSBvbmx5IHJlY29yZCBvZiB3aG8gYWN0dWFsbHkgb3BlbmVkIGl0LiBUaGUgY2FsbGVyIG11c3QgaGF2ZVxuICogYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIHRhcmdldCBpcyBhIGxpdmUgZGVzaWduYXRlZCBjb250YWN0OyB0aGlzIGZ1bmN0aW9uXG4gKiB3aWxsIG5vdCBpbmZlciBlbnRpdGxlbWVudCBmcm9tIGEgdXNlciBpZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYW5zZmVyQ2FzZVRvQ29udGFjdChjYXNlSWQ6IHN0cmluZywgdGVuYW50Q29udGFjdDogc3RyaW5nLCBhY3RvcklkOiBzdHJpbmcpOiBQcm9taXNlPFN1cHBvcnRDYXNlIHwgbnVsbD4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAuc2V0KHsgdGVuYW50Q29udGFjdCwgdXBkYXRlZEJ5OiBhY3RvcklkLCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfSlcbiAgICAud2hlcmUoYW5kKGVxKHNjaGVtYS5zdXBwb3J0Q2FzZS5pZCwgY2FzZUlkKSwgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5kZWxldGVkQXQpKSlcbiAgICAucmV0dXJuaW5nKCkpO1xuICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xufVxuXG4vKipcbiAqIEEgZGVwYXJ0aW5nIGNvbnRhY3QncyBvcGVuIGNhc2VzLCBzbyByZW1vdmFsIHJlYXNzaWducyByYXRoZXIgdGhhbiBvcnBoYW5zLlxuICpcbiAqIFNlcnZlZCBieSB0aGUgcGFydGlhbCBgc3VwcG9ydF9jYXNlX3RlbmFudF9jb250YWN0X2lkeGAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQ2FzZXNGb3JDb250YWN0KG9yZ0lkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxTdXBwb3J0Q2FzZVtdPiB7XG4gIHJldHVybiB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3QoKVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYXNlLm9yZ0lkLCBvcmdJZCksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENhc2UudGVuYW50Q29udGFjdCwgdXNlcklkKSxcbiAgICAgIGluQXJyYXkoc2NoZW1hLnN1cHBvcnRDYXNlLnN0YXR1cywgWydvcGVuJywgJ2F3YWl0aW5nX3N1cHBvcnQnLCAnYXdhaXRpbmdfY3VzdG9tZXInXSksXG4gICAgICBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmRlbGV0ZWRBdCksXG4gICAgKSkpO1xufVxuXG4vKipcbiAqIENhc2VzIHJhaXNlZCBhY3Jvc3MgYSBzY29wZSB3aXRoaW4gdGhlIGxhc3QgYHdpbmRvd0RheXNgIOKAlCB0aGUgRkFJUi1VU0UgY291bnQuXG4gKlxuICogV0hBVCBJVCBJUyBGT1IuIFN1cHBvcnQgaXMgcHJpY2VkIHBlciBDT05UQUNULCBhbmQgdGhhdCB1bml0IGFzc3VtZXMgY29udGFjdHNcbiAqIHByb3h5IGZvciBjYXNlIHZvbHVtZS4gQXQgdGVuIHNlYXRzIHRoZXkgZG87IGF0IGEgaHVuZHJlZCB0aGV5IGRvIG5vdCDigJQgdGhyZWVcbiAqIG5hbWVkIGNvbnRhY3RzIGJlY29tZSBhbiBpbnRlcm5hbCBoZWxwIGRlc2sgRk9SV0FSRElORyB0aWNrZXRzLCBzbyB0aGUgcHJpY2VcbiAqIGJ1eXMgdGhlIGludGVyZmFjZSByYXRoZXIgdGhhbiB0aGUgbG9hZC4gVGhpcyBpcyB0aGUgbWVhc3VyZW1lbnQgdGhhdCBub3RpY2VzLlxuICpcbiAqIFdIWSBOT1QgVEhFIFFVT1RBIFNFUlZJQ0UuIGBRVU9UQV9SRVNFVF9EQVlTYCBtYWtlcyBldmVyeSB0cmFja2VkIHF1b3RhIGFcbiAqIDMtZGF5IHBlcmlvZCwgYW5kIGEgc3VwcG9ydCBhbGxvd2FuY2UgaXMgbW9udGhseS1zaGFwZWQ6IGZpdmUgYSBtb250aCBkb2VzIG5vdFxuICogZGl2aWRlIGludG8gdGhyZWUgZGF5cyB3aXRob3V0IHJvdW5kaW5nIHRvIHNvbWV0aGluZyBlaXRoZXIgZmFyIHRvbyBsb29zZSBvclxuICogdXNlbGVzcy4gVGhpcyB0YWJsZSBJUyB0aGUgY291bnRlciDigJQgb25lIHJhbmdlIHNjYW4gb25cbiAqIGBzdXBwb3J0X2Nhc2Vfb3JnX2NyZWF0ZWRfaWR4YCwgbm8gcGVyaW9kIG1pc21hdGNoLCBhbmQgbm90aGluZyB0byBkcmlmdCBvdXRcbiAqIG9mIHN5bmMgd2l0aCByZWFsaXR5LlxuICpcbiAqIENPVU5UUyBFVkVSWSBDQVNFLCBJTkNMVURJTkcgQ0xPU0VEIEFORCBTT0ZULURFTEVURUQuIFRoZSBxdWVzdGlvbiBpcyBob3cgbXVjaFxuICogc3VwcG9ydCB3YXMgQ09OU1VNRUQgaW4gdGhlIHdpbmRvdywgYW5kIGEgY2FzZSB0aGF0IHdhcyBhbnN3ZXJlZCBhbmQgY2xvc2VkXG4gKiBjb25zdW1lZCBpdCBqdXN0IGFzIG11Y2ggYXMgYW4gb3BlbiBvbmUuIEV4Y2x1ZGluZyBjbG9zZWQgY2FzZXMgd291bGQgbWFrZSB0aGVcbiAqIGFsbG93YW5jZSB0cml2aWFsbHkgZXZhZGFibGUgYnkgY2xvc2luZyBwcm9tcHRseSDigJQgdGhlIG9wcG9zaXRlIG9mIHRoZVxuICogYmVoYXZpb3VyIGFueW9uZSB3YW50cyB0byBkaXNjb3VyYWdlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY291bnRDYXNlc0luV2luZG93KG9yZ0lkczogcmVhZG9ubHkgc3RyaW5nW10sIHdpbmRvd0RheXM6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gIGlmIChvcmdJZHMubGVuZ3RoID09PSAwIHx8IHdpbmRvd0RheXMgPD0gMCkgcmV0dXJuIDA7XG4gIGNvbnN0IHNpbmNlID0gbmV3IERhdGUoRGF0ZS5ub3coKSAtIHdpbmRvd0RheXMgKiA4NjQwMF8wMDApO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KHsgbjogc3FsPG51bWJlcj5gY291bnQoKik6OmludGAgfSlcbiAgICAuZnJvbShzY2hlbWEuc3VwcG9ydENhc2UpXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGluQXJyYXkoc2NoZW1hLnN1cHBvcnRDYXNlLm9yZ0lkLCBbLi4ub3JnSWRzXSksXG4gICAgICBndGUoc2NoZW1hLnN1cHBvcnRDYXNlLmNyZWF0ZWRBdCwgc2luY2UpLFxuICAgICkpKTtcbiAgcmV0dXJuIHJvd3NbMF0/Lm4gPz8gMDtcbn1cblxuLyoqXG4gKiBSZWNvcmQgdGhlIGN1c3RvbWVyJ3MgdmVyZGljdCBvbiBhIGNhc2UuXG4gKlxuICogT05MWSBPTiBBIFRFUk1JTkFMIENBU0UsIGVuZm9yY2VkIGluIHRoZSBXSEVSRSBjbGF1c2UgcmF0aGVyIHRoYW4gYnkgdGhlXG4gKiBjYWxsZXI6IHJhdGluZyBhIGNhc2Ugc3RpbGwgYmVpbmcgd29ya2VkIHdvdWxkIG1lYXN1cmUgYW4gYW5zd2VyIG5vYm9keSBoYXNcbiAqIGZpbmlzaGVkIGdpdmluZywgYW5kIHB1dHRpbmcgdGhlIGNvbmRpdGlvbiBpbiBTUUwgbWVhbnMgbm8gcm91dGUgY2FuIGZvcmdldFxuICogaXQuXG4gKlxuICogUkUtUkFURUFCTEUgb24gcHVycG9zZS4gQSBjdXN0b21lciB3aG8gcmF0ZXMgaW4gZnJ1c3RyYXRpb24gYW5kIGNvbWVzIGJhY2sgYVxuICogZGF5IGxhdGVyIHNob3VsZCBiZSBhYmxlIHRvIGNoYW5nZSBpdDsgZnJlZXppbmcgdGhlIGZpcnN0IG51bWJlciB3b3VsZCBtYWtlXG4gKiB0aGUgbWV0cmljIG1lYXN1cmUgaG93IHBlb3BsZSBmZWx0IGF0IHRoZWlyIHdvcnN0IG1vbWVudC4gYHNhdGlzZmFjdGlvbl9hdGBcbiAqIG1vdmVzIHdpdGggaXQsIHNvIHRoZSBBTlNXRVIgYW5kIFdIRU4gaXQgd2FzIGdpdmVuIHN0YXkgdG9nZXRoZXIuXG4gKlxuICogUmV0dXJucyB3aGV0aGVyIGEgcm93IG1vdmVkIOKAlCBmYWxzZSBtZWFucyB0aGUgY2FzZSBpcyBtaXNzaW5nLCBzb2Z0LWRlbGV0ZWQsXG4gKiBvciBub3QgY2xvc2VkIHlldCwgd2hpY2ggdGhlIGNhbGxlciBtdXN0IGRpc3Rpbmd1aXNoIGZyb20gYSBzdG9yZWQgemVyby5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhdGVDYXNlKFxuICBjYXNlSWQ6IHN0cmluZyxcbiAgc2F0aXNmYWN0aW9uOiBudW1iZXIsXG4gIGNvbW1lbnQ6IHN0cmluZyB8IG51bGwsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnVwZGF0ZShzY2hlbWEuc3VwcG9ydENhc2UpXG4gICAgLnNldCh7IHNhdGlzZmFjdGlvbiwgc2F0aXNmYWN0aW9uQ29tbWVudDogY29tbWVudCwgc2F0aXNmYWN0aW9uQXQ6IG5ldyBEYXRlKCkgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYXNlLmlkLCBjYXNlSWQpLFxuICAgICAgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5kZWxldGVkQXQpLFxuICAgICAgLy8gVGVybWluYWwgb25seS4gYHJlc29sdmVkYCBjb3VudHM6IHdlIGhhdmUgY2xhaW1lZCBhIGZpeCwgc28gdGhlXG4gICAgICAvLyBjdXN0b21lciBpcyBpbiBhIHBvc2l0aW9uIHRvIHNheSB3aGV0aGVyIGl0IHdhcyBvbmUuXG4gICAgICBpbkFycmF5KHNjaGVtYS5zdXBwb3J0Q2FzZS5zdGF0dXMsIFsncmVzb2x2ZWQnLCAnY2xvc2VkJ10pLFxuICAgICkpXG4gICAgLnJldHVybmluZyh7IGlkOiBzY2hlbWEuc3VwcG9ydENhc2UuaWQgfSkpO1xuICByZXR1cm4gcm93cy5sZW5ndGggPiAwO1xufVxuXG4vLyAtLS0gU3RhZmYgbm90ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBPbmUgc3RhZmYgbm90ZSwgYXMgdGhlIHF1ZXVlIFVJIHJlbmRlcnMgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1cHBvcnRDYXNlTm90ZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNhc2VJZDogc3RyaW5nO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGNyZWF0ZWRCeTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IERhdGU7XG59XG5cbi8qKlxuICogQWRkIGEgc3RhZmYtb25seSBub3RlIHRvIGEgY2FzZS5cbiAqXG4gKiBgb3JnSWRgIGlzIGRlbm9ybWFsaXNlZCBvbnRvIHRoZSByb3cgZnJvbSB0aGUgQ0FTRSwgbm90IHRha2VuIGZyb20gdGhlIGF1dGhvcjpcbiAqIGEgbm90ZSBiZWxvbmdzIHRvIHRoZSB0ZW5hbnQgd2hvc2UgY2FzZSBpdCBhbm5vdGF0ZXMsIGFuZCBzb3VyY2luZyBpdCBmcm9tXG4gKiB0aGUgc3RhZmYgYXV0aG9yJ3Mgb3duIG9yZyAodGhlIHN5c3RlbSBvcmcpIHdvdWxkIHB1dCBldmVyeSBub3RlIG91dHNpZGUgdGhlXG4gKiB0ZW5hbnQgc2NvcGUgdGhhdCBpcyBzdXBwb3NlZCB0byBjb250YWluIGl0LlxuICpcbiAqIFNUQUZGIE9OTFkgYXQgdGhlIHJvdXRlIGxheWVyLCBhbmQgdGhlIHNlcGFyYXRlIHRhYmxlIGlzIHRoZSByZWFzb24gdGhhdCBpc1xuICogc2FmZTogYG1lc3NhZ2VzYCBpcyByZWFkIHRocm91Z2ggb25lIHNoYXJlZCB2aXNpYmlsaXR5IHByZWRpY2F0ZSwgc28gYSBmbGFnXG4gKiB0aGVyZSB3b3VsZCBsZWFrIGFuIGludGVybmFsIG5vdGUgZnJvbSBhbnkgcmVhZCBwYXRoIHRoYXQgZm9yZ290IHRoZSBleHRyYVxuICogY29uZGl0aW9uLiBBIHNlcGFyYXRlIHRhYmxlIGNhbm5vdCBsZWFrIGJ5IG9taXNzaW9uIOKAlCBpdCBoYXMgdG8gYmUgam9pbmVkXG4gKiBkZWxpYmVyYXRlbHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRDYXNlTm90ZShcbiAgY2FzZUlkOiBzdHJpbmcsXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgY3JlYXRlZEJ5OiBzdHJpbmcsXG4pOiBQcm9taXNlPFN1cHBvcnRDYXNlTm90ZT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuaW5zZXJ0KHNjaGVtYS5zdXBwb3J0Q2FzZU5vdGUpXG4gICAgLnZhbHVlcyh7IGNhc2VJZCwgb3JnSWQsIGNvbnRlbnQsIGNyZWF0ZWRCeSB9KVxuICAgIC5yZXR1cm5pbmcoKSk7XG4gIGNvbnN0IHJvdyA9IHJvd3NbMF07XG4gIGlmICghcm93KSB0aHJvdyBuZXcgRXJyb3IoJ3N1cHBvcnQgY2FzZSBub3RlIGluc2VydCByZXR1cm5lZCBubyByb3cnKTtcbiAgcmV0dXJuIHJvdztcbn1cblxuLyoqIExpdmUgbm90ZXMgb24gYSBjYXNlLCBvbGRlc3QgZmlyc3Qg4oCUIHRoZXkgcmVhZCBhcyBhIHJ1bm5pbmcgY29tbWVudGFyeS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0Q2FzZU5vdGVzKGNhc2VJZDogc3RyaW5nKTogUHJvbWlzZTxTdXBwb3J0Q2FzZU5vdGVbXT4ge1xuICByZXR1cm4gd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KClcbiAgICAuZnJvbShzY2hlbWEuc3VwcG9ydENhc2VOb3RlKVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENhc2VOb3RlLmNhc2VJZCwgY2FzZUlkKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q2FzZU5vdGUuaXNBY3RpdmUsIHRydWUpLFxuICAgICAgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZU5vdGUuZGVsZXRlZEF0KSxcbiAgICApKVxuICAgIC5vcmRlckJ5KGFzYyhzY2hlbWEuc3VwcG9ydENhc2VOb3RlLmNyZWF0ZWRBdCkpKTtcbn1cblxuLyoqXG4gKiBTb2Z0LWRlbGV0ZSBhIG5vdGUuXG4gKlxuICogU29mdCBiZWNhdXNlIGEgbm90ZSBpcyBhIHJlY29yZCBvZiB3aGF0IHRoZSBkZXNrIGJlbGlldmVkIGF0IHRoZSB0aW1lLCBhbmQgYVxuICogZGlzcHV0ZSBtYXkgdHVybiBvbiBpdC4gUmV0dXJucyB3aGV0aGVyIGEgcm93IG1vdmVkLCBzbyBhIHNlY29uZCBkZWxldGUgaXMgYVxuICogcmVwb3J0ZWQgbm8tb3AgcmF0aGVyIHRoYW4gYSBzaWxlbnQgc3VjY2Vzcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNhc2VOb3RlKG5vdGVJZDogc3RyaW5nLCBkZWxldGVkQnk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q2FzZU5vdGUpXG4gICAgLnNldCh7IGlzQWN0aXZlOiBmYWxzZSwgZGVsZXRlZEF0OiBuZXcgRGF0ZSgpLCBkZWxldGVkQnkgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYXNlTm90ZS5pZCwgbm90ZUlkKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q2FzZU5vdGUuaXNBY3RpdmUsIHRydWUpLFxuICAgICkpXG4gICAgLnJldHVybmluZyh7IGlkOiBzY2hlbWEuc3VwcG9ydENhc2VOb3RlLmlkIH0pKTtcbiAgcmV0dXJuIHJvd3MubGVuZ3RoID4gMDtcbn1cblxuLy8gLS0tIENhbm5lZCByZXNwb25zZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQSByZXVzYWJsZSBzdGFmZiByZXBseSB0ZW1wbGF0ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FubmVkUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGl2ZSB0ZW1wbGF0ZXMsIGFscGhhYmV0aWNhbCDigJQgdGhlIHBpY2tlcidzIG9ubHkgcXVlcnkuXG4gKlxuICogTm8gb3JnIHNjb3BlIGJlY2F1c2UgdGhlIHRhYmxlIGhhcyBub25lOiB0aGVzZSBhcmUgdGhlIHZlbmRvcidzIG93biB3b3JkaW5nXG4gKiBmb3IgcmVjdXJyaW5nIHF1ZXN0aW9ucywgYXV0aG9yZWQgb25jZSBhbmQgcmV1c2VkIGFjcm9zcyBldmVyeSBjdXN0b21lci5cbiAqIFNjb3BpbmcgdGhlbSBwZXIgdGVuYW50IHdvdWxkIGJlIHRoZSBvcHBvc2l0ZSBvZiB0aGUgcG9pbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0Q2FubmVkUmVzcG9uc2VzKCk6IFByb21pc2U8Q2FubmVkUmVzcG9uc2VbXT4ge1xuICByZXR1cm4gd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KHtcbiAgICAgIGlkOiBzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLmlkLFxuICAgICAgdGl0bGU6IHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UudGl0bGUsXG4gICAgICBib2R5OiBzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLmJvZHksXG4gICAgfSlcbiAgICAuZnJvbShzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlKVxuICAgIC53aGVyZShlcShzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLmlzQWN0aXZlLCB0cnVlKSlcbiAgICAub3JkZXJCeShhc2Moc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZS50aXRsZSkpKTtcbn1cblxuLyoqIENyZWF0ZSBhIHRlbXBsYXRlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNhbm5lZFJlc3BvbnNlKFxuICB0aXRsZTogc3RyaW5nLFxuICBib2R5OiBzdHJpbmcsXG4gIGFjdG9ySWQ6IHN0cmluZyxcbik6IFByb21pc2U8Q2FubmVkUmVzcG9uc2U+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLmluc2VydChzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlKVxuICAgIC52YWx1ZXMoeyB0aXRsZSwgYm9keSwgY3JlYXRlZEJ5OiBhY3RvcklkLCB1cGRhdGVkQnk6IGFjdG9ySWQgfSlcbiAgICAucmV0dXJuaW5nKHtcbiAgICAgIGlkOiBzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLmlkLFxuICAgICAgdGl0bGU6IHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UudGl0bGUsXG4gICAgICBib2R5OiBzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLmJvZHksXG4gICAgfSkpO1xuICBjb25zdCByb3cgPSByb3dzWzBdO1xuICBpZiAoIXJvdykgdGhyb3cgbmV3IEVycm9yKCdjYW5uZWQgcmVzcG9uc2UgaW5zZXJ0IHJldHVybmVkIG5vIHJvdycpO1xuICByZXR1cm4gcm93O1xufVxuXG4vKipcbiAqIEVkaXQgYSBsaXZlIHRlbXBsYXRlLlxuICpcbiAqIEd1YXJkZWQgb24gYGlzX2FjdGl2ZWAgc28gYSByZXRpcmVkIHRlbXBsYXRlIGNhbm5vdCBiZSBlZGl0ZWQgYmFjayBpbnRvXG4gKiBjaXJjdWxhdGlvbiDigJQgYSByZXN1cnJlY3Rpb24gc2hvdWxkIGJlIGEgZGVsaWJlcmF0ZSBuZXcgcm93LCBub3QgYSBzaWRlXG4gKiBlZmZlY3Qgb2YgZml4aW5nIGEgdHlwby5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNhbm5lZFJlc3BvbnNlKFxuICBpZDogc3RyaW5nLFxuICBmaWVsZHM6IHsgdGl0bGU/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmcgfSxcbiAgYWN0b3JJZDogc3RyaW5nLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChmaWVsZHMudGl0bGUgPT09IHVuZGVmaW5lZCAmJiBmaWVsZHMuYm9keSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC51cGRhdGUoc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZSlcbiAgICAuc2V0KHtcbiAgICAgIC4uLihmaWVsZHMudGl0bGUgIT09IHVuZGVmaW5lZCA/IHsgdGl0bGU6IGZpZWxkcy50aXRsZSB9IDoge30pLFxuICAgICAgLi4uKGZpZWxkcy5ib2R5ICE9PSB1bmRlZmluZWQgPyB7IGJvZHk6IGZpZWxkcy5ib2R5IH0gOiB7fSksXG4gICAgICB1cGRhdGVkQnk6IGFjdG9ySWQsXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZS5pZCwgaWQpLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZS5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UuaWQgfSkpO1xuICByZXR1cm4gcm93cy5sZW5ndGggPiAwO1xufVxuXG4vKipcbiAqIFJldGlyZSBhIHRlbXBsYXRlLlxuICpcbiAqIFNPRlQsIGJlY2F1c2UgYSByZXRpcmVkIHRlbXBsYXRlIGlzIHN0aWxsIHRoZSBleHBsYW5hdGlvbiBvZiB3aGF0IGEgcGFzdFxuICogcmVwbHkgc2FpZCDigJQgZGVsZXRpbmcgdGhlIHJvdyB3b3VsZCBsZWF2ZSBvbGQgY29ycmVzcG9uZGVuY2UgdW5hY2NvdW50YWJsZVxuICogZm9yIGl0cyBvd24gd29yZGluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUNhbm5lZFJlc3BvbnNlKGlkOiBzdHJpbmcsIGFjdG9ySWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UpXG4gICAgLnNldCh7IGlzQWN0aXZlOiBmYWxzZSwgdXBkYXRlZEJ5OiBhY3RvcklkLCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZS5pZCwgaWQpLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZS5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UuaWQgfSkpO1xuICByZXR1cm4gcm93cy5sZW5ndGggPiAwO1xufVxuXG4vLyAtLS0gU3VwcG9ydCBjb250YWN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogTGl2ZSBkZXNpZ25hdGVkIGNvbnRhY3RzIGFjcm9zcyBhIHNldCBvZiBvcmdzIChhbiBhY2NvdW50IHN1YnRyZWUpLlxuICpcbiAqIFRha2VzIHRoZSB3aG9sZSBzY29wZSBpbiBvbmUgcXVlcnkgcmF0aGVyIHRoYW4gcGVyLW9yZyBiZWNhdXNlIHRoZSBhbGxvd2FuY2VcbiAqIFBPT0xTIGF0IHRoZSByb290OiBhIHBlcnNvbiBkZXNpZ25hdGVkIG9uIGEgdGVhbSBzcGVuZHMgdGhlIGFjY291bnQnc1xuICogYWxsb3dhbmNlLCBzbyBjb3VudGluZyB0ZWFtLWJ5LXRlYW0gYW5kIHN1bW1pbmcgd291bGQgYmUgdGhlIHNhbWUgbnVtYmVyIGJ5XG4gKiBhY2NpZGVudCBhbmQgdGhlIHdyb25nIHNoYXBlIHRoZSBtb21lbnQgcG9vbGluZyBjaGFuZ2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY291bnRBY3RpdmVTdXBwb3J0Q29udGFjdHMob3JnSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIC8vIENhbGxlcnMgcGFzcyB0aGUgZXhwYW5kZWQgU1VCVFJFRSBmb3IgdGhlIHBvb2xlZCBjYXAsIG9yIGEgc2luZ2xlIG9yZyB0byBhc2tcbiAgLy8gXCJtYXkgYSBjYXNlIHJhaXNlZCBoZXJlIGhhdmUgYW4gb3duZXIgYXQgYWxsXCIuIEJvdGggYXJlIGxlZ2l0aW1hdGU7IHNlZVxuICAvLyBgU3VwcG9ydEVudGl0bGVtZW50YCBpbiBwbGF0Zm9ybSBmb3Igd2hpY2ggZmllbGQgaXMgd2hpY2guXG4gIGlmIChvcmdJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnNlbGVjdCh7IG46IHNxbDxudW1iZXI+YGNvdW50KCopOjppbnRgIH0pXG4gICAgLmZyb20oc2NoZW1hLnN1cHBvcnRDb250YWN0KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBpbkFycmF5KHNjaGVtYS5zdXBwb3J0Q29udGFjdC5vcmdJZCwgWy4uLm9yZ0lkc10pLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDb250YWN0LmlzQWN0aXZlLCB0cnVlKSxcbiAgICApKSk7XG4gIHJldHVybiByb3dzWzBdPy5uID8/IDA7XG59XG5cbi8qKlxuICogTGl2ZSBjb250YWN0cyBmb3IgdGhlIHRlbmFudCBvd25lciBwaWNrZXIuXG4gKlxuICogU0NPUEUgSVMgVEhFIENBTExFUidTIENIT0lDRSwgYW5kIHRoZSBkZWZhdWx0IGlzIE9ORSBPUkcuIFRoZSBhbGxvd2FuY2UgcG9vbHNcbiAqIHN1YnRyZWUtd2lkZSwgYnV0IG93bmVyc2hpcCBkb2VzIG5vdDogYSB0ZWFtIHJlYXNzaWducyBhIGNhc2Ugb25seSBhbW9uZyBpdHNcbiAqIE9XTiBjb250YWN0cywgc28gYSBwb29sZWQgYWxsb3dhbmNlIG5ldmVyIHR1cm5zIGludG8gb25lIHRlYW0ncyBjYXNlcyBiZWluZ1xuICogcmVhZGFibGUgYnkgYSBzaWJsaW5nLiBQYXNzIGEgc2luZ2xlIG9yZyBpZCBmb3IgdGhlIHBpY2tlcjsgcGFzcyB0aGUgZXhwYW5kZWRcbiAqIHN1YnRyZWUgb25seSB3aGVyZSB0aGUgcG9vbGVkIENBUCBpcyB0aGUgcXVlc3Rpb24gKHNlZVxuICogYGNvdW50QWN0aXZlU3VwcG9ydENvbnRhY3RzYCkuXG4gKlxuICogVGFraW5nIGEgbGlzdCByYXRoZXIgdGhhbiBhIHNpbmdsZSBpZCBrZWVwcyB0aGF0IGRlY2lzaW9uIGF0IHRoZSBjYWxsIHNpdGVcbiAqIGluc3RlYWQgb2YgaGlkaW5nIGl0IGhlcmUg4oCUIHRoZSB0d28gc2NvcGVzIGFuc3dlciBkaWZmZXJlbnRseSBhbmQgdGhlIHdyb25nXG4gKiBvbmUgbGVha3MgY2FzZXMgYWNyb3NzIHRlYW1zLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdEFjdGl2ZVN1cHBvcnRDb250YWN0cyhcbiAgb3JnSWRzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IFByb21pc2U8eyBvcmdJZDogc3RyaW5nOyB1c2VySWQ6IHN0cmluZzsgaXNQcmVtaXVtOiBib29sZWFuIH1bXT4ge1xuICBpZiAob3JnSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICByZXR1cm4gd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KHtcbiAgICAgIG9yZ0lkOiBzY2hlbWEuc3VwcG9ydENvbnRhY3Qub3JnSWQsXG4gICAgICB1c2VySWQ6IHNjaGVtYS5zdXBwb3J0Q29udGFjdC51c2VySWQsXG4gICAgICAvLyBDYXJyaWVkIHNvIHRoZSBhZG1pbiBwYW5lbCBjYW4gc2hvdyB3aG8gaXMgdXBncmFkZWQgd2l0aG91dCBhIHNlY29uZFxuICAgICAgLy8gcXVlcnksIGFuZCBzbyB0aGUgdGVuYW50IG93bmVyIHBpY2tlciBjYW4gc2F5IHdoaWNoIGNvbnRhY3RzIGNhcnJ5IDI0eDcuXG4gICAgICBpc1ByZW1pdW06IHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pc1ByZW1pdW0sXG4gICAgfSlcbiAgICAuZnJvbShzY2hlbWEuc3VwcG9ydENvbnRhY3QpXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGluQXJyYXkoc2NoZW1hLnN1cHBvcnRDb250YWN0Lm9yZ0lkLCBbLi4ub3JnSWRzXSksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3QuaXNBY3RpdmUsIHRydWUpLFxuICAgICkpKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoaXMgdXNlciBpcyBhIGxpdmUgZGVzaWduYXRlZCBjb250YWN0IGluIGFueSBvcmcgb2YgdGhlIHNjb3BlLlxuICpcbiAqIFRyYW5zZmVyIHZhbGlkYXRpb24gbXVzdCBwYXNzIHRoZSBjYXNlJ3MgT1dOIG9yZywgbm90IHRoZSBzdWJ0cmVlOiBhY2NlcHRpbmcgYVxuICogc2libGluZyB0ZWFtJ3MgY29udGFjdCBhcyBhIHZhbGlkIHRyYW5zZmVyIHRhcmdldCBpcyBleGFjdGx5IHRoZSBjcm9zcy10ZWFtXG4gKiBsZWFrIHRoZSBvd24tb3JnIG93bmVyc2hpcCBydWxlIGV4aXN0cyB0byBwcmV2ZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNTdXBwb3J0Q29udGFjdChvcmdJZHM6IHJlYWRvbmx5IHN0cmluZ1tdLCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAob3JnSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pZCB9KVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q29udGFjdClcbiAgICAud2hlcmUoYW5kKFxuICAgICAgaW5BcnJheShzY2hlbWEuc3VwcG9ydENvbnRhY3Qub3JnSWQsIFsuLi5vcmdJZHNdKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC51c2VySWQsIHVzZXJJZCksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3QuaXNBY3RpdmUsIHRydWUpLFxuICAgICkpXG4gICAgLmxpbWl0KDEpKTtcbiAgcmV0dXJuIHJvd3MubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBEZXNpZ25hdGUgYSBzdXBwb3J0IGNvbnRhY3QuXG4gKlxuICogVGhlIENBUCBpcyBub3QgZW5mb3JjZWQgaGVyZSDigJQgdGhlIGNhbGxlciBob2xkcyBpdCwgYmVjYXVzZSB0aGUgbGltaXQgbGl2ZXMgb25cbiAqIHRoZSBNb25nbyBvcmcgZG9jIGFuZCB0aGlzIG1vZHVsZSBvbmx5IHJlYWNoZXMgUG9zdGdyZXMuIE1pcnJvcnMgaG93IHNlYXRzIGFyZVxuICogY2FwcGVkIGluIHBsYXRmb3JtIHJhdGhlciB0aGFuIGluIHRoZSByb3cgd3JpdGVyLlxuICpcbiAqIGBzdXBwb3J0X2NvbnRhY3Rfb3JnX3VzZXJfdXFgIGlzIHBhcnRpYWwgb24gYGlzX2FjdGl2ZSA9IHRydWVgLCBzb1xuICogcmUtZGVzaWduYXRpbmcgc29tZW9uZSBwcmV2aW91c2x5IHJldm9rZWQgaW5zZXJ0cyBhIGZyZXNoIHJvdyByYXRoZXIgdGhhblxuICogY29sbGlkaW5nIOKAlCB0aGUgcmV2b2tlZCByb3cgc3RheXMgYXMgdGhlIHJlY29yZCB0aGF0IHRoZXkgb25jZSBoZWxkIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzaWduYXRlU3VwcG9ydENvbnRhY3QoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBkZXNpZ25hdGVkQnk6IHN0cmluZyxcbiAgaXNQcmVtaXVtID0gZmFsc2UsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgd2l0aFRlbmFudFR4KGFzeW5jICh0eCkgPT4ge1xuICAgIGF3YWl0IHR4Lmluc2VydChzY2hlbWEuc3VwcG9ydENvbnRhY3QpXG4gICAgICAudmFsdWVzKHsgb3JnSWQsIHVzZXJJZCwgZGVzaWduYXRlZEJ5LCBpc1ByZW1pdW0gfSlcbiAgICAgIC5vbkNvbmZsaWN0RG9Ob3RoaW5nKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIExpdmUgY29udGFjdHMgaW4gYSBzY29wZSB0aGF0IGFyZSBVUEdSQURFRCB0byBwcmVtaXVtIOKAlCB0aGUgY2FwJ3MgY291bnRlcnBhcnQuXG4gKlxuICogQ291bnRlZCBzZXBhcmF0ZWx5IGZyb20gdGhlIGJhc2VsaW5lIHRvdGFsIGJlY2F1c2UgdGhlIHR3byBjYXBzIGFyZSBzZXBhcmF0ZTpcbiAqIGFuIGFjY291bnQgaG9sZHMgTiBjb250YWN0cyAoYHN1cHBvcnRDb250YWN0c2ApIGFuZCB1cGdyYWRlcyBNIG9mIHRoZW1cbiAqIChgc3VwcG9ydFByZW1pdW1Db250YWN0c2ApLCBNIOKJpCBOLiBQb29sZWQgb3ZlciB3aGF0ZXZlciBzY29wZSB0aGUgY2FsbGVyXG4gKiBwYXNzZXMsIGV4YWN0bHkgbGlrZSB7QGxpbmsgY291bnRBY3RpdmVTdXBwb3J0Q29udGFjdHN9IOKAlCBzdWJ0cmVlIGZvciB0aGUgY2FwLFxuICogb25lIG9yZyBmb3IgYW4gb3duZXJzaGlwIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY291bnRQcmVtaXVtU3VwcG9ydENvbnRhY3RzKG9yZ0lkczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPG51bWJlcj4ge1xuICBpZiAob3JnSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3QoeyBuOiBzcWw8bnVtYmVyPmBjb3VudCgqKTo6aW50YCB9KVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q29udGFjdClcbiAgICAud2hlcmUoYW5kKFxuICAgICAgaW5BcnJheShzY2hlbWEuc3VwcG9ydENvbnRhY3Qub3JnSWQsIFsuLi5vcmdJZHNdKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3QuaXNQcmVtaXVtLCB0cnVlKSxcbiAgICApKSk7XG4gIHJldHVybiByb3dzWzBdPy5uID8/IDA7XG59XG5cbi8qKlxuICogV2hldGhlciB0aGlzIHVzZXIgaXMgYSBsaXZlIFBSRU1JVU0gY29udGFjdCBpbiB0aGUgc2NvcGUuXG4gKlxuICogVGhlIGNhc2Utb3BlbiBwYXRoIHJlYWRzIHRoaXMgdG8gZGVjaWRlIHdoaWNoIGxldmVsIHRvIGZyZWV6ZSBvbnRvIGEgbmV3IGNhc2U6XG4gKiBwcmVtaXVtIHdoZW4gdGhlIG9wZW5lciBpcyB1cGdyYWRlZCwgdGhlIGFjY291bnQncyBiYXNlbGluZSBvdGhlcndpc2UuIFBhc3MgdGhlXG4gKiBjYXNlJ3MgT1dOIG9yZyDigJQgdGhlIHVwZ3JhZGUgZm9sbG93cyB0aGUgcGVyc29uIGluIHRoZSBvcmcgdGhhdCBub21pbmF0ZWRcbiAqIHRoZW0sIGFuZCBhIHNpYmxpbmcgdGVhbSdzIHVwZ3JhZGUgaXMgbm90IHRoaXMgb3JnJ3MgdG8gc3BlbmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc1ByZW1pdW1TdXBwb3J0Q29udGFjdChvcmdJZHM6IHJlYWRvbmx5IHN0cmluZ1tdLCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAob3JnSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pZCB9KVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q29udGFjdClcbiAgICAud2hlcmUoYW5kKFxuICAgICAgaW5BcnJheShzY2hlbWEuc3VwcG9ydENvbnRhY3Qub3JnSWQsIFsuLi5vcmdJZHNdKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC51c2VySWQsIHVzZXJJZCksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3QuaXNBY3RpdmUsIHRydWUpLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDb250YWN0LmlzUHJlbWl1bSwgdHJ1ZSksXG4gICAgKSlcbiAgICAubGltaXQoMSkpO1xuICByZXR1cm4gcm93cy5sZW5ndGggPiAwO1xufVxuXG4vKipcbiAqIFVwZ3JhZGUgb3IgZG93bmdyYWRlIGEgTElWRSBjb250YWN0LlxuICpcbiAqIEd1YXJkZWQgb24gYGlzX2FjdGl2ZWAgc28gYSByZXZva2VkIHJvdyBjYW5ub3QgYmUgdXBncmFkZWQgYmFjayBpbnRvXG4gKiByZWxldmFuY2UsIGFuZCByZXR1cm5zIHdoZXRoZXIgYSByb3cgYWN0dWFsbHkgbW92ZWQg4oCUIHRoZSBjYWxsZXIgY291bnRzXG4gKiBhZ2FpbnN0IHRoZSBwcmVtaXVtIGNhcCBiZWZvcmUgY2FsbGluZywgYW5kIGEgc2lsZW50IG5vLW9wIHdvdWxkIGxldCB0aGF0XG4gKiBjb3VudCBkcmlmdCBmcm9tIHJlYWxpdHkuXG4gKlxuICogRGVsaWJlcmF0ZWx5IGRvZXMgTk9UIHRvdWNoIHRoZSBjYXNlIHJvd3M6IGBzdXBwb3J0X2Nhc2UubGV2ZWxgIGlzIGZyb3plbiBhdFxuICogb3Blbiwgc28gZG93bmdyYWRpbmcgc29tZWJvZHkgbmV2ZXIgd2Vha2VucyBhIHByb21pc2UgYWxyZWFkeSBtYWRlIG9uIGEgY2FzZVxuICogdGhleSByYWlzZWQgd2hpbGUgdXBncmFkZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRTdXBwb3J0Q29udGFjdFByZW1pdW0oXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBpc1ByZW1pdW06IGJvb2xlYW4sXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnVwZGF0ZShzY2hlbWEuc3VwcG9ydENvbnRhY3QpXG4gICAgLnNldCh7IGlzUHJlbWl1bSB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3Qub3JnSWQsIG9yZ0lkKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC51c2VySWQsIHVzZXJJZCksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3QuaXNBY3RpdmUsIHRydWUpLFxuICAgICkpXG4gICAgLnJldHVybmluZyh7IGlkOiBzY2hlbWEuc3VwcG9ydENvbnRhY3QuaWQgfSkpO1xuICByZXR1cm4gcm93cy5sZW5ndGggPiAwO1xufVxuXG4vKipcbiAqIFJldm9rZSBhIGRlc2lnbmF0aW9uLCBmcmVlaW5nIHRoZSBzbG90LlxuICpcbiAqIFJldHVybnMgdGhlIHVzZXIncyBzdGlsbC1vcGVuIGNhc2VzIHNvIHRoZSBjYWxsZXIgY2FuIHJlYXNzaWduIHRoZW0gaW5zdGVhZCBvZlxuICogb3JwaGFuaW5nIOKAlCBzY29wZSBDNCdzIGFuc3dlci4gUmV2b2tpbmcgaXMgZGVsaWJlcmF0ZWx5IG5vdCBibG9ja2VkIG9uIHRoZW06XG4gKiByZWZ1c2luZyB0byByZW1vdmUgYSBkZXBhcnRlZCBlbXBsb3llZSBiZWNhdXNlIHRoZXkgc3RpbGwgb3duIGNhc2VzIHdvdWxkIGJlXG4gKiB3b3JzZSB0aGFuIGhhbmRpbmcgdGhlIGNhc2VzIG9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV2b2tlU3VwcG9ydENvbnRhY3QoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nLFxuICByZXZva2VkQnk6IHN0cmluZyxcbik6IFByb21pc2U8eyByZXZva2VkOiBib29sZWFuOyBvcGVuQ2FzZXM6IFN1cHBvcnRDYXNlW10gfT4ge1xuICBjb25zdCBvcGVuQ2FzZXMgPSBhd2FpdCBvcGVuQ2FzZXNGb3JDb250YWN0KG9yZ0lkLCB1c2VySWQpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q29udGFjdClcbiAgICAuc2V0KHsgaXNBY3RpdmU6IGZhbHNlLCByZXZva2VkQXQ6IG5ldyBEYXRlKCksIHJldm9rZWRCeSB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3Qub3JnSWQsIG9yZ0lkKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC51c2VySWQsIHVzZXJJZCksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3QuaXNBY3RpdmUsIHRydWUpLFxuICAgICkpXG4gICAgLnJldHVybmluZyh7IGlkOiBzY2hlbWEuc3VwcG9ydENvbnRhY3QuaWQgfSkpO1xuICByZXR1cm4geyByZXZva2VkOiByb3dzLmxlbmd0aCA+IDAsIG9wZW5DYXNlcyB9O1xufVxuIl19
671
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC1jYXNlcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zdXBwb3J0LWNhc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFDdEM7Ozs7Ozs7OztHQVNHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RSw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBR3RILHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWlDLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUE2QnpGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxLQUFLLFVBQVUscUJBQXFCLENBQUMsRUFBcUQsRUFBRSxLQUFhO0lBQ3ZHLE1BQU0sSUFBSSxHQUFHLE1BQU0sRUFBRTtTQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1NBQ2pDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDaEMsa0JBQWtCLENBQUM7UUFDbEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLO1FBQ3ZDLEdBQUcsRUFBRTtZQUNILFVBQVUsRUFBRSxHQUFHLENBQUEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBVSxNQUFNO1lBQzVELFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtTQUN0QjtLQUNGLENBQUM7U0FDRCxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUMzQixJQUFJLElBQUksS0FBSyxTQUFTO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQzFGLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsNERBQTREO0lBQzVELE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLEtBQW9CO0lBQ3hELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUMvQixNQUFNLGFBQWEsR0FBRyxNQUFNLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFO2FBQ2xCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2FBQzFCLE1BQU0sQ0FBQztZQUNOLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsYUFBYTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLElBQUksS0FBSztZQUNyRCxzRUFBc0U7WUFDdEUsbUNBQW1DO1lBQ25DLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLElBQUk7WUFDMUMsaUVBQWlFO1lBQ2pFLGFBQWEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUM3QixTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDekIsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRO1NBQzFCLENBQUM7YUFDRCxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNqRSxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFFBQWdCO0lBQ3JELE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1NBQ3ZDLE1BQU0sRUFBRTtTQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQ3hCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDM0YsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxTQUFTLENBQUMsS0FBSyxHQUFHLEdBQUc7SUFDekMsT0FBTyxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDM0IsTUFBTSxFQUFFO1NBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDeEIsS0FBSyxDQUFDLEdBQUcsQ0FDUixPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEVBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUNyQyxDQUFDO1NBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNuRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE1BQWMsRUFBRSxLQUFLLEdBQUcsR0FBRztJQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDN0MsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsdUVBQXVFO0lBQ3ZFLDhFQUE4RTtJQUM5RSx1RUFBdUU7SUFDdkUsNkVBQTZFO0lBQzdFLE9BQU8sb0JBQW9CLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1NBQzlFLE1BQU0sRUFBRTtTQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQ3hCLEtBQUssQ0FBQyxHQUFHLENBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEVBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUMxQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFDcEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUM5QyxDQUFDO1NBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzlDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUVELHdDQUF3QztBQUN4QyxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUsS0FBSyxHQUFHLEdBQUc7SUFDM0QsT0FBTyxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDM0IsTUFBTSxFQUFFO1NBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDeEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNyRixPQUFPLENBQUMsR0FBRyxDQUFBLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLE9BQU8sQ0FBQztTQUNsRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFBYyxFQUFFLEVBQUUsR0FBUyxJQUFJLElBQUksRUFBRTtJQUM1RSxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztTQUMxQixHQUFHLENBQUMsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUMzQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQ3pGLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3QyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsTUFBYyxFQUNkLE1BQXlCLEVBQ3pCLE9BQWU7SUFFZixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQztJQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUM7SUFDN0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDMUIsR0FBRyxDQUFDO1FBQ0gsTUFBTTtRQUNOLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFNBQVMsRUFBRSxHQUFHO1FBQ2QsNEVBQTRFO1FBQzVFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNwQyxvQkFBb0IsRUFBRSxRQUFRO1lBQzVCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQjtZQUN6QyxDQUFDLENBQUMsR0FBRyxDQUFBLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsbUNBQW1DLEdBQUcsQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxhQUFhO1FBQ3JLLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDekYsQ0FBQztTQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDbkYsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsT0FBZTtJQUNyRixNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztTQUMxQixHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQzVELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDbkYsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQUMsTUFBYyxFQUFFLFVBQXlCLEVBQUUsT0FBZTtJQUN6RixNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztTQUMxQixHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQzlELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDbkYsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsT0FBMEIsRUFDMUIsVUFBeUIsRUFDekIsT0FBZTtJQUVmLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDMUIsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztTQUM5RCxLQUFLLENBQUMsR0FBRyxDQUNSLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQ3JDLENBQUM7U0FDRCxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxPQUEwQixFQUFFLE9BQWU7SUFDMUUsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1NBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQzFCLEdBQUcsQ0FBQztRQUNILE1BQU0sRUFBRSxRQUFRO1FBQ2hCLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLE9BQU87UUFDakIsU0FBUyxFQUFFLE9BQU87UUFDbEIsU0FBUyxFQUFFLEdBQUc7UUFDZCxhQUFhLEVBQUUsSUFBSTtRQUNuQixvQkFBb0IsRUFBRSxHQUFHLENBQUEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQixtQ0FBbUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLGFBQWE7S0FDeEwsQ0FBQztTQUNELEtBQUssQ0FBQyxHQUFHLENBQ1IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDcEMscUVBQXFFO0lBQ3JFLHVFQUF1RTtJQUN2RSxHQUFHLENBQUEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sY0FBYyxDQUM5QyxDQUFDO1NBQ0QsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFBYyxFQUFFLGFBQXFCLEVBQUUsT0FBZTtJQUNoRyxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztTQUMxQixHQUFHLENBQUMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQ2pFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDbkYsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLEtBQWEsRUFBRSxNQUFjO0lBQ3JFLE9BQU8sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1NBQzNCLE1BQU0sRUFBRTtTQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQ3hCLEtBQUssQ0FBQyxHQUFHLENBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUNuQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLEVBQzVDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLEVBQ3JGLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUNyQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BQXlCLEVBQUUsVUFBa0I7SUFDcEYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDNUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDdkMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBUSxlQUFlLEVBQUUsQ0FBQztTQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztTQUN4QixLQUFLLENBQUMsR0FBRyxDQUNSLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFDOUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNOLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUM1QixNQUFjLEVBQ2QsWUFBb0IsRUFDcEIsT0FBc0I7SUFFdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDMUIsR0FBRyxDQUFDLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQy9FLEtBQUssQ0FBQyxHQUFHLENBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDcEMsa0VBQWtFO0lBQ2xFLHVEQUF1RDtJQUN2RCxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FDM0QsQ0FBQztTQUNELFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3QyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFhRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQy9CLE1BQWMsRUFDZCxLQUFhLEVBQ2IsT0FBZSxFQUNmLFNBQWlCO0lBRWpCLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1NBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1NBQzlCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1NBQzdDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxHQUFHO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxNQUFjO0lBQ2hELE9BQU8sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1NBQzNCLE1BQU0sRUFBRTtTQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1NBQzVCLEtBQUssQ0FBQyxHQUFHLENBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUN6QyxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUN6QyxDQUFDO1NBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsTUFBYyxFQUFFLFNBQWlCO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1NBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1NBQzlCLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7U0FDMUQsS0FBSyxDQUFDLEdBQUcsQ0FDUixFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQ3JDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FDMUMsQ0FBQztTQUNELFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFXRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQjtJQUN2QyxPQUFPLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUMzQixNQUFNLENBQUM7UUFDTixFQUFFLEVBQUUsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7UUFDbkMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLO1FBQ3pDLElBQUksRUFBRSxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSTtLQUN4QyxDQUFDO1NBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztTQUNsQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCx5QkFBeUI7QUFDekIsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsS0FBYSxFQUNiLElBQVksRUFDWixPQUFlO0lBRWYsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztTQUNwQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1NBQy9ELFNBQVMsQ0FBQztRQUNULEVBQUUsRUFBRSxNQUFNLENBQUMscUJBQXFCLENBQUMsRUFBRTtRQUNuQyxLQUFLLEVBQUUsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUs7UUFDekMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJO0tBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ04sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxHQUFHO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLEVBQVUsRUFDVixNQUF5QyxFQUN6QyxPQUFlO0lBRWYsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxRSxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1NBQ3BDLEdBQUcsQ0FBQztRQUNILEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDOUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRCxTQUFTLEVBQUUsT0FBTztRQUNsQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7S0FDdEIsQ0FBQztTQUNELEtBQUssQ0FBQyxHQUFHLENBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQ3ZDLEVBQUUsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUNoRCxDQUFDO1NBQ0QsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxFQUFVLEVBQUUsT0FBZTtJQUNwRSxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1NBQ3BDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQ25FLEtBQUssQ0FBQyxHQUFHLENBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQ3ZDLEVBQUUsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUNoRCxDQUFDO1NBQ0QsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQsK0VBQStFO0FBRS9FOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDBCQUEwQixDQUFDLE1BQXlCO0lBQ3hFLCtFQUErRTtJQUMvRSwwRUFBMEU7SUFDMUUsNkRBQTZEO0lBQzdELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDdkMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBUSxlQUFlLEVBQUUsQ0FBQztTQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztTQUMzQixLQUFLLENBQUMsR0FBRyxDQUNSLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFDakQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNOLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHlCQUF5QixDQUM3QyxNQUF5QjtJQUV6QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ25DLE9BQU8sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1NBQzNCLE1BQU0sQ0FBQztRQUNOLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUs7UUFDbEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTTtRQUNwQyx1RUFBdUU7UUFDdkUsMkVBQTJFO1FBQzNFLFNBQVMsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVM7S0FDM0MsQ0FBQztTQUNELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1NBQzNCLEtBQUssQ0FBQyxHQUFHLENBQ1IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUNqRCxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQ3pDLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsTUFBeUIsRUFBRSxNQUFjO0lBQzlFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7U0FDdkMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7U0FDM0IsS0FBSyxDQUFDLEdBQUcsQ0FDUixPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQ2pELEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFDeEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUN6QyxDQUFDO1NBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsS0FBYSxFQUNiLE1BQWMsRUFDZCxZQUFvQixFQUNwQixTQUFTLEdBQUcsS0FBSztJQUVqQixNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDOUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7YUFDbkMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDbEQsbUJBQW1CLEVBQUUsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMkJBQTJCLENBQUMsTUFBeUI7SUFDekUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUN2QyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFRLGVBQWUsRUFBRSxDQUFDO1NBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1NBQzNCLEtBQUssQ0FBQyxHQUFHLENBQ1IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUNqRCxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQ3hDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxNQUF5QixFQUFFLE1BQWM7SUFDckYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUN2QyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztTQUMzQixLQUFLLENBQUMsR0FBRyxDQUNSLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFDakQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUN4QyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQ3hDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FDMUMsQ0FBQztTQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxLQUFhLEVBQ2IsTUFBYyxFQUNkLFNBQWtCO0lBRWxCLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1NBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1NBQzdCLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO1NBQ2xCLEtBQUssQ0FBQyxHQUFHLENBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUN0QyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQ3hDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FDekMsQ0FBQztTQUNELFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsS0FBYSxFQUNiLE1BQWMsRUFDZCxTQUFpQjtJQUVqQixNQUFNLFNBQVMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzRCxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtTQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztTQUM3QixHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDO1NBQzFELEtBQUssQ0FBQyxHQUFHLENBQ1IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUN0QyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQ3hDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FDekMsQ0FBQztTQUNELFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbi8qKlxuICogU3VwcG9ydC1jYXNlIHBlcnNpc3RlbmNlOiB0aGUgd29ya2Zsb3cgaGFsZiBvZiBhIHN1cHBvcnQgdGhyZWFkLlxuICpcbiAqIEhlcmUgcmF0aGVyIHRoYW4gaW4gYSBzZXJ2aWNlIGJlY2F1c2UgdHdvIGNhbGxlcnMgbmVlZCBpdCDigJQgcGxhdGZvcm0gb3ducyB0aGVcbiAqIGVudGl0bGVtZW50IGNoZWNrIGFuZCB0aGUgd3JpdGVzLCBhbmQgdGhlIG1lc3NhZ2Ugc2VydmljZSBvd25zIHRoZSB0aHJlYWQgdGhlXG4gKiBjYXNlIHBvaW50cyBhdCDigJQgYW5kIG5laXRoZXIgc2hvdWxkIGdyb3cgaXRzIG93biBjb3B5IG9mIHRoZSBhbGxvY2F0b3IuXG4gKlxuICogYG1lc3NhZ2VzYCBrZWVwcyBjYXJyeWluZyB0aGUgY29udmVyc2F0aW9uLiBUaGVzZSBmdW5jdGlvbnMgb25seSBldmVyIHRvdWNoXG4gKiB0aGUgd29ya2Zsb3cgYXhpczogaWRlbnRpdHksIHN0YXR1cywgb3duZXJzaGlwIGFuZCB0aGUgcmVzcG9uc2UgY2xvY2suXG4gKi9cblxuaW1wb3J0IHsgYW5kLCBhc2MsIGVxLCBndGUsIGluQXJyYXksIGlzTnVsbCwgbHRlLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgdHlwZSB7IFN1cHBvcnRDYXNlIH0gZnJvbSAnLi4vZGF0YWJhc2Uvc2NoZW1hL3N1cHBvcnQuanMnO1xuaW1wb3J0IHsgcnVuV2l0aFRlbmFudENvbnRleHQsIHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG4vKiogU3RhdHVzZXMgYSBjYXNlIGNhbiBiZSBpbi4gYGF3YWl0aW5nX2N1c3RvbWVyYCBpcyB3aGF0IHN0b3BzIHRoZSBjbG9jay4gKi9cbmV4cG9ydCBjb25zdCBTVVBQT1JUX0NBU0VfU1RBVFVTRVMgPSBbJ29wZW4nLCAnYXdhaXRpbmdfc3VwcG9ydCcsICdhd2FpdGluZ19jdXN0b21lcicsICdyZXNvbHZlZCcsICdjbG9zZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFN1cHBvcnRDYXNlU3RhdHVzID0gKHR5cGVvZiBTVVBQT1JUX0NBU0VfU1RBVFVTRVMpW251bWJlcl07XG5cbi8qKiBUaGUgc3RhdHVzZXMgdGhlIHN0YWZmIHF1ZXVlIGFza3MgYWJvdXQg4oCUIHRoZSBvbmVzIHN0aWxsIG9uIHVzLiAqL1xuZXhwb3J0IGNvbnN0IFFVRVVFX1NUQVRVU0VTOiByZWFkb25seSBTdXBwb3J0Q2FzZVN0YXR1c1tdID0gWydvcGVuJywgJ2F3YWl0aW5nX3N1cHBvcnQnXTtcblxuLyoqIFdoYXQgb3BlbmluZyBhIGNhc2UgbmVlZHMuIGBsZXZlbGAgaXMgZnJvemVuIG9udG8gdGhlIHJvdyBhdCBvcGVuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcGVuQ2FzZUlucHV0IHtcbiAgLyoqIFRoZSByb290IGBtZXNzYWdlcy5pZGAuIEJlY29tZXMgdGhlIGNhbm9uaWNhbCBjYXNlIGlkZW50aXR5LiAqL1xuICB0aHJlYWRJZDogc3RyaW5nO1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogVGhlIHN1cHBvcnQgbGV2ZWwgSEVMRCBBVCBPUEVOLCBmcm96ZW4gc28gYSBtaWQtY2FzZSBkb3duZ3JhZGUgY2Fubm90XG4gICAqICBjaGFuZ2UgdGhlIHByb21pc2UgdW5kZXJuZWF0aCBzb21lb25lIGFscmVhZHkgd2FpdGluZy4gKi9cbiAgbGV2ZWw6IHN0cmluZztcbiAgc2V2ZXJpdHk6IHN0cmluZztcbiAgLyoqIFRoZSBvcGVuZXIuIEFsc28gdGhlIGluaXRpYWwgdGVuYW50IG93bmVyIHdoZW4gdGhleSBhcmUgYSBjb250YWN0LiAqL1xuICBvcGVuZWRCeTogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBjYXNlIHdhcyBvcGVuZWQgYnkgc3BlbmRpbmcgYSBvbmUtdGltZSBpbmNpZGVudCByYXRoZXIgdGhhblxuICAgKiAgYWdhaW5zdCBhIGNvbnRhY3Qgc2VhdCwgc28gaW5jaWRlbnQgdXNhZ2UgaXMgYW5zd2VyYWJsZSBmcm9tIHRoZSBjYXNlc1xuICAgKiAgdGhlbXNlbHZlcyBhbmQgbm90IG9ubHkgZnJvbSBhIGJhbGFuY2UgZGVsdGEuICovXG4gIG9wZW5lZFdpdGhJbmNpZGVudD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRoZSBmaXJzdCByZXNwb25zZSBpcyBkdWUsIGFscmVhZHkgY29tcHV0ZWQgYnkgdGhlIGNhbGxlci5cbiAgICpcbiAgICogUGFzc2VkIElOIHJhdGhlciB0aGFuIGRlcml2ZWQgaGVyZTogdGhlIGJ1c2luZXNzIGNhbGVuZGFyIGlzIGRlcGxveW1lbnRcbiAgICogY29uZmlnIChgU1VQUE9SVF9CVVNJTkVTU19IT1VSU18qYCkgcmVhZCBieSBhcGktY29yZSdzIGByZXNwb25zZUR1ZUF0YCwgYW5kXG4gICAqIHRoaXMgbW9kdWxlIG11c3Qgbm90IHJlYWNoIGZvciBlbnYgdG8gYW5zd2VyIGEgcHJvZHVjdCBxdWVzdGlvbi4gTnVsbCBpcyBhXG4gICAqIGxlZ2l0aW1hdGUgdmFsdWUg4oCUIGEgbGV2ZWwgd2l0aCBubyBwdWJsaXNoZWQgdGFyZ2V0LCBvciBhIGNhbGVuZGFyIHRvb1xuICAgKiBicm9rZW4gdG8gZGVyaXZlIG9uZSDigJQgYW5kIGlzIHN0b3JlZCBhcyBcIm5vIGRlYWRsaW5lXCIgcmF0aGVyIHRoYW4gZ3Vlc3NlZC5cbiAgICovXG4gIHJlc3BvbnNlRHVlQXQ/OiBEYXRlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBBbGxvY2F0ZSB0aGUgbmV4dCBwZXItb3JnIGNhc2UgbnVtYmVyLlxuICpcbiAqIFBvc3RncmVzIHNlcXVlbmNlcyBhcmUgZ2xvYmFsIGFuZCBjYW5ub3QgYmUgcGVyLW9yZyB3aXRob3V0IG9uZSBzZXF1ZW5jZSBwZXJcbiAqIHRlbmFudCwgc28gdGhlIGNvdW50ZXIgaXMgYSByb3cuIGBVUERBVEUg4oCmIFJFVFVSTklOR2AgdGFrZXMgdGhlIHJvdyBsb2NrLFxuICogd2hpY2ggc2VyaWFsaXNlcyBjb25jdXJyZW50IG9wZW5zIFdJVEhJTiBvbmUgb3JnIHdoaWxlIGxlYXZpbmcgb3RoZXIgb3Jnc1xuICogdW50b3VjaGVkIOKAlCBhIGdsb2JhbCBzZXF1ZW5jZSB3b3VsZCBzZXJpYWxpc2UgZXZlcnlib2R5LCBhbmQgd291bGQgYWxzb1xuICogZGlzY2xvc2UgdG90YWwgY2FzZSB2b2x1bWUgdG8gZXZlcnkgY3VzdG9tZXIuXG4gKlxuICogVGhlIHVwc2VydCBzZWVkcyBgbmV4dF9udW1iZXIgPSAyYCBvbiBmaXJzdCB1c2UgYW5kIHJldHVybnMgMSwgc28gYW4gb3JnJ3NcbiAqIGZpcnN0IGNhc2UgaXMgYEFDTUUtMWAuIE11c3QgcnVuIGluc2lkZSB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhcyB0aGUgY2FzZVxuICogaW5zZXJ0OiBhIGNvbW1pdHRlZCBhbGxvY2F0aW9uIHdpdGggYSByb2xsZWQtYmFjayBpbnNlcnQgYnVybnMgYSBudW1iZXIsIGFuZFxuICogYSBudW1iZXIgYnVybmVkIGlzIGEgZ2FwIGEgY3VzdG9tZXIgd2lsbCBldmVudHVhbGx5IGFzayBhYm91dC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWxsb2NhdGVEaXNwbGF5TnVtYmVyKHR4OiBQYXJhbWV0ZXJzPFBhcmFtZXRlcnM8dHlwZW9mIHdpdGhUZW5hbnRUeD5bMF0+WzBdLCBvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHR4XG4gICAgLmluc2VydChzY2hlbWEuc3VwcG9ydENhc2VDb3VudGVyKVxuICAgIC52YWx1ZXMoeyBvcmdJZCwgbmV4dE51bWJlcjogMiB9KVxuICAgIC5vbkNvbmZsaWN0RG9VcGRhdGUoe1xuICAgICAgdGFyZ2V0OiBzY2hlbWEuc3VwcG9ydENhc2VDb3VudGVyLm9yZ0lkLFxuICAgICAgc2V0OiB7XG4gICAgICAgIG5leHROdW1iZXI6IHNxbGAke3NjaGVtYS5zdXBwb3J0Q2FzZUNvdW50ZXIubmV4dE51bWJlcn0gKyAxYCxcbiAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgfSxcbiAgICB9KVxuICAgIC5yZXR1cm5pbmcoeyBuZXh0OiBzY2hlbWEuc3VwcG9ydENhc2VDb3VudGVyLm5leHROdW1iZXIgfSk7XG4gIGNvbnN0IG5leHQgPSByb3dzWzBdPy5uZXh0O1xuICBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ3N1cHBvcnQgY2FzZSBudW1iZXIgYWxsb2NhdGlvbiByZXR1cm5lZCBubyByb3cnKTtcbiAgLy8gT24gSU5TRVJUIHRoZSByb3cgaXMgc2VlZGVkIGF0IDIgYW5kIHRoaXMgY2FzZSBpcyAxOyBvbiBVUERBVEUgdGhlIHN0b3JlZFxuICAvLyB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGluY3JlbWVudGVkLCBzbyB0aGlzIGNhc2UgaXMgdGhlIHZhbHVlIG1pbnVzIG9uZS5cbiAgLy8gQm90aCBicmFuY2hlcyB0aGVyZWZvcmUgeWllbGQgXCJ0aGUgbnVtYmVyIGp1c3QgY29uc3VtZWRcIi5cbiAgcmV0dXJuIG5leHQgLSAxO1xufVxuXG4vKipcbiAqIE9wZW4gYSBjYXNlIGZvciBhbiBleGlzdGluZyB0aHJlYWQsIGFsbG9jYXRpbmcgaXRzIGRpc3BsYXkgbnVtYmVyLlxuICpcbiAqIE9uZSB0cmFuc2FjdGlvbiBvbiBwdXJwb3NlOiB0aGUgbnVtYmVyIGFuZCB0aGUgcm93IGNvbW1pdCB0b2dldGhlciBvciBuZWl0aGVyXG4gKiBkb2VzLiBgc3VwcG9ydF9jYXNlX29yZ19udW1iZXJfdXFgIGlzIHRoZSBiYWNrc3RvcCDigJQgaWYgdGhlIGFsbG9jYXRvciBpcyBldmVyXG4gKiBieXBhc3NlZCwgdGhlIGluc2VydCBmYWlscyByYXRoZXIgdGhhbiBpc3N1aW5nIHR3byBjYXNlcyB0aGUgb25lIGlkZW50aWZpZXJcbiAqIGN1c3RvbWVycyBxdW90ZSBiYWNrLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblN1cHBvcnRDYXNlKGlucHV0OiBPcGVuQ2FzZUlucHV0KTogUHJvbWlzZTxTdXBwb3J0Q2FzZT4ge1xuICByZXR1cm4gd2l0aFRlbmFudFR4KGFzeW5jICh0eCkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlOdW1iZXIgPSBhd2FpdCBhbGxvY2F0ZURpc3BsYXlOdW1iZXIodHgsIGlucHV0Lm9yZ0lkKTtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdHhcbiAgICAgIC5pbnNlcnQoc2NoZW1hLnN1cHBvcnRDYXNlKVxuICAgICAgLnZhbHVlcyh7XG4gICAgICAgIHRocmVhZElkOiBpbnB1dC50aHJlYWRJZCxcbiAgICAgICAgb3JnSWQ6IGlucHV0Lm9yZ0lkLFxuICAgICAgICBkaXNwbGF5TnVtYmVyLFxuICAgICAgICBzdGF0dXM6ICdvcGVuJyxcbiAgICAgICAgc2V2ZXJpdHk6IGlucHV0LnNldmVyaXR5LFxuICAgICAgICBsZXZlbDogaW5wdXQubGV2ZWwsXG4gICAgICAgIG9wZW5lZFdpdGhJbmNpZGVudDogaW5wdXQub3BlbmVkV2l0aEluY2lkZW50ID8/IGZhbHNlLFxuICAgICAgICAvLyBGcm96ZW4gYXQgb3BlbiwgbGlrZSBgbGV2ZWxgOiBhIHdvcmtpbmctd2VlayBvciBob2xpZGF5IGNoYW5nZSBtdXN0XG4gICAgICAgIC8vIG5vdCBtb3ZlIGEgcHJvbWlzZSBhbHJlYWR5IG1hZGUuXG4gICAgICAgIHJlc3BvbnNlRHVlQXQ6IGlucHV0LnJlc3BvbnNlRHVlQXQgPz8gbnVsbCxcbiAgICAgICAgLy8gVGhlIG9wZW5lciBvd25zIGl0IG9uIHRoZSB0ZW5hbnQgc2lkZSB1bnRpbCBpdCBpcyBoYW5kZWQgb3Zlci5cbiAgICAgICAgdGVuYW50Q29udGFjdDogaW5wdXQub3BlbmVkQnksXG4gICAgICAgIGNyZWF0ZWRCeTogaW5wdXQub3BlbmVkQnksXG4gICAgICAgIHVwZGF0ZWRCeTogaW5wdXQub3BlbmVkQnksXG4gICAgICB9KVxuICAgICAgLnJldHVybmluZygpO1xuICAgIGNvbnN0IHJvdyA9IHJvd3NbMF07XG4gICAgaWYgKCFyb3cpIHRocm93IG5ldyBFcnJvcignc3VwcG9ydCBjYXNlIGluc2VydCByZXR1cm5lZCBubyByb3cnKTtcbiAgICByZXR1cm4gcm93O1xuICB9KTtcbn1cblxuLyoqIFRoZSBjYXNlIGZvciBhIHRocmVhZCwgb3IgbnVsbC4gVGhlIHRocmVhZCByb290IGlkIElTIHRoZSBjYXNlIGlkZW50aXR5LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRDYXNlQnlUaHJlYWQodGhyZWFkSWQ6IHN0cmluZyk6IFByb21pc2U8U3VwcG9ydENhc2UgfCBudWxsPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3QoKVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAud2hlcmUoYW5kKGVxKHNjaGVtYS5zdXBwb3J0Q2FzZS50aHJlYWRJZCwgdGhyZWFkSWQpLCBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmRlbGV0ZWRBdCkpKVxuICAgIC5saW1pdCgxKSk7XG4gIHJldHVybiByb3dzWzBdID8/IG51bGw7XG59XG5cbi8qKlxuICogVGhlIHN0YWZmIHF1ZXVlOiBvcGVuIGNhc2VzIGFjcm9zcyBBTEwgdGVuYW50cywgb2xkZXN0IGZpcnN0LlxuICpcbiAqIFRoZSBvbmUgcmVhZCB3aXRoIG5vIG9yZyBwcmVkaWNhdGUsIHNvIGl0IHJ1bnMgdW5kZXIgc3lzYWRtaW4gc2NvcGUgYW5kIGlzXG4gKiBzZXJ2ZWQgYnkgdGhlIHBhcnRpYWwgYHN1cHBvcnRfY2FzZV9xdWV1ZV9pZHhgLlxuICpcbiAqIE9yZGVyZWQgYnkgYHJlc3BvbnNlX2R1ZV9hdGAgQVNDRU5ESU5HLCBOVUxMUyBMQVNUIOKAlCBzb29uZXN0IGRlYWRsaW5lIGZpcnN0LFxuICogd2hpY2ggaXMgd2hhdCBcIm1vc3QgYXQgcmlza1wiIGFjdHVhbGx5IG1lYW5zLiBBcnJpdmFsIG9yZGVyIHdhcyB0aGUgZWFybGllclxuICogcHJveHkgZm9yIGl0IGFuZCBpcyBhIHBvb3Igb25lOiBhIHN0YW5kYXJkIGNhc2Ugb3BlbmVkIG9uIE1vbmRheSBpcyBvd2VkXG4gKiBXZWRuZXNkYXkncyBjbG9zZSB3aGlsZSBhIHByaW9yaXR5IGNhc2Ugb3BlbmVkIG9uIFR1ZXNkYXkgaXMgb3dlZCBXZWRuZXNkYXknc1xuICogY2xvc2UgdG9vLCBzbyBhcnJpdmFsIG9yZGVyIHB1dHMgdGhlbSBpbiB0aGUgd3Jvbmcgc2VxdWVuY2Ugd2hlbmV2ZXIgbGV2ZWxzXG4gKiBhcmUgbWl4ZWQuIENhc2VzIHdpdGggbm8gZGVhZGxpbmUgKGFuIHVucmVjb2duaXNlZCBsZXZlbCwgb3Igb25lIG9wZW5lZCB3aGlsZVxuICogdGhlIGNhbGVuZGFyIHdhcyBtaXNjb25maWd1cmVkKSBzb3J0IGxhc3QgcmF0aGVyIHRoYW4gZmlyc3QsIHNpbmNlIGEgbWlzc2luZ1xuICogZGVhZGxpbmUgaXMgbm90IGFuIHVyZ2VudCBvbmU7IGBjcmVhdGVkQXRgIGJyZWFrcyB0aWVzIHNvIHRoZSBvcmRlciBpcyBzdGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UXVldWUobGltaXQgPSAxMDApOiBQcm9taXNlPFN1cHBvcnRDYXNlW10+IHtcbiAgcmV0dXJuIHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnNlbGVjdCgpXG4gICAgLmZyb20oc2NoZW1hLnN1cHBvcnRDYXNlKVxuICAgIC53aGVyZShhbmQoXG4gICAgICBpbkFycmF5KHNjaGVtYS5zdXBwb3J0Q2FzZS5zdGF0dXMsIFsuLi5RVUVVRV9TVEFUVVNFU10pLFxuICAgICAgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5kZWxldGVkQXQpLFxuICAgICkpXG4gICAgLm9yZGVyQnkoc3FsYCR7c2NoZW1hLnN1cHBvcnRDYXNlLnJlc3BvbnNlRHVlQXR9IEFTQyBOVUxMUyBMQVNUYCwgYXNjKHNjaGVtYS5zdXBwb3J0Q2FzZS5jcmVhdGVkQXQpKVxuICAgIC5saW1pdChsaW1pdCkpO1xufVxuXG4vKipcbiAqIFByZW1pdW0gY2FzZXMgd2hvc2UgcmVzcG9uc2UgdGFyZ2V0IGlzIGFwcHJvYWNoaW5nIHdpdGggbm8gZmlyc3QgcmVzcG9uc2UgeWV0LlxuICpcbiAqIFRIRSBvbi1jYWxsIHN3ZWVwJ3Mgb25seSBxdWVyeSwgYW5kIHRoZSByZWFzb24gdGhlIHBhZ2VyIGlzIHdvcnRoIG93bmluZyB0aGVcbiAqIHRyaWdnZXIgZm9yOiB0aGlzIGlzIGFuIEVYQUNUIHBlci1jYXNlIGRlYWRsaW5lLCB3aGVyZSB0aGUgZmxlZXQgYWxlcnRcbiAqIChgU3VwcG9ydFByZW1pdW1GaXJzdFJlc3BvbnNlQXRSaXNrYCkgaXMgYSBwOTAgb3ZlciBzaXggaG91cnMgdGhhdCBjYW4gb25seVxuICogc2F5IHRoZSBkaXN0cmlidXRpb24gYWxyZWFkeSBkcmlmdGVkIOKAlCBuZXZlciB3aGljaCBjYXNlIGlzIGFib3V0IHRvIGJyZWFjaC5cbiAqXG4gKiBUaGUgcHJlZGljYXRlIG1hdGNoZXMgYHN1cHBvcnRfY2FzZV9yZXNwb25zZV9kdWVfaWR4YCBleGFjdGx5LCB3aGljaCBpcyBhXG4gKiBQQVJUSUFMIGluZGV4IG9uIGAocmVzcG9uc2VfZHVlX2F0KSBXSEVSRSBsZXZlbCA9ICdzdXBwb3J0X3ByZW1pdW0nIEFORFxuICogZmlyc3RfcmVzcG9uc2VfYXQgSVMgTlVMTCBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMYC4gTm90ZSBgbGV2ZWxgIGFuZCBub3RcbiAqIGBpc19wcmVtaXVtYDogdGhhdCBjb2x1bW4gbGl2ZXMgb24gc3VwcG9ydF9DT05UQUNUUyBhbmQgbWFya3MgYW4gdXBncmFkZWRcbiAqIGNvbnRhY3QsIHdoaWxlIGEgY2FzZSBmcmVlemVzIHRoZSBvcGVuaW5nIGNvbnRhY3QncyBlZmZlY3RpdmUgbGV2ZWwgYXQgb3BlbiDigJRcbiAqIHNvIHRoZSBjYXNlJ3Mgb3duIHByb21pc2UgaXMgaXRzIGBsZXZlbGAsIGFuZCBmbGlwcGluZyB0aGUgY29udGFjdCBsYXRlciBtdXN0XG4gKiBub3QgY2hhbmdlIGEgZGVhZGxpbmUgYWxyZWFkeSBwdWJsaXNoZWQgdG8gYSBjdXN0b21lci4gVGhhdCBtYXR0ZXJzIGJlY2F1c2UgdGhpcyBydW5zIG9uIGEgdGltZXJcbiAqIGZvcmV2ZXI6IHRoZSByb3dzIGl0IHdhbnRzIGFyZSBhIHRpbnkgYW5kIHNocmlua2luZyBmcmFjdGlvbiBvZiB0aGUgdGFibGUsIHNvXG4gKiB0aGUgaW5kZXggc3RheXMgc21hbGwgd2hpbGUgdGhlIHRhYmxlIGdyb3dzLCBhbmQgd2l0aG91dCBpdCBldmVyeSB0aWNrIGlzIGFcbiAqIHNjYW4uXG4gKlxuICogRGVsaWJlcmF0ZWx5IE5PVCBmaWx0ZXJlZCBvbiBzdGF0dXMuIEEgY2FzZSB0aGF0IGlzIGBhd2FpdGluZ19zdXBwb3J0YCBhbmQgb25lXG4gKiB0aGF0IGlzIGBvcGVuYCBib3RoIG93ZSBhIGZpcnN0IHJlc3BvbnNlLCBhbmQgcmVhZGluZyB0aGUgc3RhdHVzIGhlcmUgd291bGRcbiAqIGR1cGxpY2F0ZSBhIHJ1bGUgdGhhdCBgZmlyc3RfcmVzcG9uc2VfYXQgSVMgTlVMTGAgYWxyZWFkeSBzdGF0ZXMgZXhhY3RseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RDYXNlc0R1ZUZvclBhZ2UobGVhZE1zOiBudW1iZXIsIGxpbWl0ID0gMTAwKTogUHJvbWlzZTxTdXBwb3J0Q2FzZVtdPiB7XG4gIGNvbnN0IGN1dG9mZiA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBsZWFkTXMpO1xuICAvLyBUSElTIEZVTkNUSU9OIElTIFRIRSBQUklWSUxFR0UgQk9VTkRBUlksIHNvIHRoZSBzY29wZSBpcyBlc3RhYmxpc2hlZCBoZXJlXG4gIC8vIHJhdGhlciB0aGFuIGxlZnQgdG8gdGhlIGNhbGxlci4gVGhlIHN3ZWVwIHJ1bnMgb24gYSB0aW1lciB3aXRoIG5vIHJlcXVlc3RcbiAgLy8gYW5kIHRoZXJlZm9yZSBubyB0ZW5hbnQgY29udGV4dCwgYW5kIGBzdXBwb3J0X2Nhc2VzYCBpcyBSTFMgRk9SQ0UnZCDigJQgc29cbiAgLy8gd2l0aG91dCBhIHNjb3BlIHRoZSByZWFkIHJldHVybnMgemVybyByb3dzIChhbmQgdGhyb3dzIGluIHByb2R1Y3Rpb25cbiAgLy8gYHN0cmljdGAgbW9kZSksIHdoaWNoIGlzIHRoZSBzaGFwZSBvZiBhIHN3ZWVwIHRoYXQgc2lsZW50bHkgY292ZXJzIG5vdGhpbmcuXG4gIC8vIENyb3NzLXRlbmFudCBpcyB0aGUgcG9pbnQ6IG9uZSBvcGVyYXRvciByb3RhIGFuc3dlcnMgZm9yIGV2ZXJ5IG9yZydzXG4gIC8vIHByZW1pdW0gY2FzZXMuIE9ubHkgSURTIGxlYXZlIGhlcmU7IHRoZSBwYWdlciBuZXZlciByZWNlaXZlcyBjYXNlIGNvbnRlbnQuXG4gIHJldHVybiBydW5XaXRoVGVuYW50Q29udGV4dCh7IGlzU3VwZXJBZG1pbjogdHJ1ZSB9LCAoKSA9PiB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3QoKVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYXNlLmxldmVsLCAnc3VwcG9ydF9wcmVtaXVtJyksXG4gICAgICBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmZpcnN0UmVzcG9uc2VBdCksXG4gICAgICBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmRlbGV0ZWRBdCksXG4gICAgICBsdGUoc2NoZW1hLnN1cHBvcnRDYXNlLnJlc3BvbnNlRHVlQXQsIGN1dG9mZiksXG4gICAgKSlcbiAgICAub3JkZXJCeShhc2Moc2NoZW1hLnN1cHBvcnRDYXNlLnJlc3BvbnNlRHVlQXQpKVxuICAgIC5saW1pdChsaW1pdCkpKTtcbn1cblxuLyoqIEFuIG9yZydzIG93biBjYXNlcywgbmV3ZXN0IGZpcnN0LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RPcmdDYXNlcyhvcmdJZDogc3RyaW5nLCBsaW1pdCA9IDEwMCk6IFByb21pc2U8U3VwcG9ydENhc2VbXT4ge1xuICByZXR1cm4gd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KClcbiAgICAuZnJvbShzY2hlbWEuc3VwcG9ydENhc2UpXG4gICAgLndoZXJlKGFuZChlcShzY2hlbWEuc3VwcG9ydENhc2Uub3JnSWQsIG9yZ0lkKSwgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5kZWxldGVkQXQpKSlcbiAgICAub3JkZXJCeShzcWxgJHtzY2hlbWEuc3VwcG9ydENhc2UuY3JlYXRlZEF0fSBERVNDYClcbiAgICAubGltaXQobGltaXQpKTtcbn1cblxuLyoqXG4gKiBTdGFtcCB0aGUgZmlyc3Qgc3RhZmYgcmVzcG9uc2UsIG9uY2UuXG4gKlxuICogYGZpcnN0X3Jlc3BvbnNlX2F0IElTIE5VTExgIGlzIGluIHRoZSBXSEVSRSBjbGF1c2UgcmF0aGVyIHRoYW4gY2hlY2tlZCBieSB0aGVcbiAqIGNhbGxlcjogdGhpcyBpcyBUSEUgbnVtYmVyIHRoZSByZXNwb25zZSB0YXJnZXQgaXMgc29sZCBvbiwgc28gYSBzZWNvbmQgcmVwbHlcbiAqIG11c3Qgbm90IGJlIGFibGUgdG8gbW92ZSBpdC4gUmV0dXJucyB3aGV0aGVyIHRoaXMgY2FsbCB3YXMgdGhlIG9uZSB0aGF0XG4gKiBzdGFtcGVkIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhbXBGaXJzdFJlc3BvbnNlKGNhc2VJZDogc3RyaW5nLCBhdDogRGF0ZSA9IG5ldyBEYXRlKCkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnVwZGF0ZShzY2hlbWEuc3VwcG9ydENhc2UpXG4gICAgLnNldCh7IGZpcnN0UmVzcG9uc2VBdDogYXQsIHVwZGF0ZWRBdDogYXQgfSlcbiAgICAud2hlcmUoYW5kKGVxKHNjaGVtYS5zdXBwb3J0Q2FzZS5pZCwgY2FzZUlkKSwgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5maXJzdFJlc3BvbnNlQXQpKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q2FzZS5pZCB9KSk7XG4gIHJldHVybiByb3dzLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogTW92ZSBhIGNhc2UncyBzdGF0dXMsIG1haW50YWluaW5nIHRoZSByZXNwb25zZSBjbG9jay5cbiAqXG4gKiBFbnRlcmluZyBgYXdhaXRpbmdfY3VzdG9tZXJgIGFuY2hvcnMgYGF3YWl0aW5nU2luY2VgOyBsZWF2aW5nIGl0IGZvbGRzIHRoZVxuICogZWxhcHNlZCBzcGFuIGludG8gYGF3YWl0aW5nVG90YWxTZWNvbmRzYCBhbmQgY2xlYXJzIHRoZSBhbmNob3IuIEFnZWluZyB0aGVuXG4gKiBzdWJ0cmFjdHMgdGhlIGFjY3VtdWxhdG9yLCBzbyBhIGNhc2Ugd2UgYW5zd2VyZWQgaW4gYW4gaG91ciBhbmQgdGhlIHRlbmFudFxuICogcmVwbGllZCB0byBmb3VyIGRheXMgbGF0ZXIgZG9lcyBub3QgcmVhZCBhcyBhIGZvdXItZGF5IGNhc2Ug4oCUIHdoaWNoIGlzIHRoZVxuICogbnVtYmVyIG5vIGN1c3RvbWVyIHdvdWxkIGFjY2VwdC5cbiAqXG4gKiBUaGUgYXJpdGhtZXRpYyBpcyBkb25lIGluIFNRTCBhZ2FpbnN0IHRoZSBzdG9yZWQgYW5jaG9yIHJhdGhlciB0aGFuIGZyb20gYVxuICogY2FsbGVyLXN1cHBsaWVkIGR1cmF0aW9uLCBzbyBhIGNsb2NrIHNrZXcgb3IgYSBsb3N0IHJvdW5kIHRyaXAgY2Fubm90IGluZmxhdGVcbiAqIG9yIGVyYXNlIHBhdXNlZCB0aW1lLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0Q2FzZVN0YXR1cyhcbiAgY2FzZUlkOiBzdHJpbmcsXG4gIHN0YXR1czogU3VwcG9ydENhc2VTdGF0dXMsXG4gIGFjdG9ySWQ6IHN0cmluZyxcbik6IFByb21pc2U8U3VwcG9ydENhc2UgfCBudWxsPiB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGVudGVyaW5nID0gc3RhdHVzID09PSAnYXdhaXRpbmdfY3VzdG9tZXInO1xuICBjb25zdCBjbG9zaW5nID0gc3RhdHVzID09PSAnY2xvc2VkJyB8fCBzdGF0dXMgPT09ICdyZXNvbHZlZCc7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC51cGRhdGUoc2NoZW1hLnN1cHBvcnRDYXNlKVxuICAgIC5zZXQoe1xuICAgICAgc3RhdHVzLFxuICAgICAgdXBkYXRlZEJ5OiBhY3RvcklkLFxuICAgICAgdXBkYXRlZEF0OiBub3csXG4gICAgICAvLyBBbmNob3Igb24gZW50cnk7IG9uIGFueSBvdGhlciB0cmFuc2l0aW9uIGZvbGQgdGhlIG9wZW4gc3BhbiBpbiBhbmQgY2xlYXIuXG4gICAgICBhd2FpdGluZ1NpbmNlOiBlbnRlcmluZyA/IG5vdyA6IG51bGwsXG4gICAgICBhd2FpdGluZ1RvdGFsU2Vjb25kczogZW50ZXJpbmdcbiAgICAgICAgPyBzY2hlbWEuc3VwcG9ydENhc2UuYXdhaXRpbmdUb3RhbFNlY29uZHNcbiAgICAgICAgOiBzcWxgJHtzY2hlbWEuc3VwcG9ydENhc2UuYXdhaXRpbmdUb3RhbFNlY29uZHN9ICsgQ09BTEVTQ0UoRVhUUkFDVChFUE9DSCBGUk9NICgke25vdy50b0lTT1N0cmluZygpfTo6dGltZXN0YW1wdHogLSAke3NjaGVtYS5zdXBwb3J0Q2FzZS5hd2FpdGluZ1NpbmNlfSkpOjppbnQsIDApYCxcbiAgICAgIC4uLihjbG9zaW5nID8geyBjbG9zZWRBdDogbm93LCBjbG9zZWRCeTogYWN0b3JJZCB9IDogeyBjbG9zZWRBdDogbnVsbCwgY2xvc2VkQnk6IG51bGwgfSksXG4gICAgfSlcbiAgICAud2hlcmUoYW5kKGVxKHNjaGVtYS5zdXBwb3J0Q2FzZS5pZCwgY2FzZUlkKSwgaXNOdWxsKHNjaGVtYS5zdXBwb3J0Q2FzZS5kZWxldGVkQXQpKSlcbiAgICAucmV0dXJuaW5nKCkpO1xuICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xufVxuXG4vKipcbiAqIFJlLXJhbmsgYSBjYXNlJ3Mgc2V2ZXJpdHkuXG4gKlxuICogU1RBRkYgT05MWSBhdCB0aGUgcm91dGUgbGF5ZXIsIGFuZCB0aGF0IGlzIHRoZSBnb3Zlcm5hbmNlIHBvaW50IHJhdGhlciB0aGFuIGFcbiAqIHBlcm1pc3Npb24gZGV0YWlsOiB0aGUgdGVuYW50IGNob29zZXMgc2V2ZXJpdHkgd2hlbiBvcGVuaW5nLCBzbyBpZiB0aGV5IGNvdWxkXG4gKiBhbHNvIGNoYW5nZSBpdCBhZnRlcndhcmRzIHRoZXkgd291bGQgdW5pbGF0ZXJhbGx5IHBpY2sgdGhlIHJlc3BvbnNlIHRhcmdldFxuICogdGhleSBhcmUgb3dlZC4gU2V2ZXJpdHkgZGVjaWRlcyB3aGljaCB0YXJnZXQgYXBwbGllcywgc28gcmUtcmFua2luZyBoYXMgdG8gYmVcbiAqIG91cnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRDYXNlU2V2ZXJpdHkoY2FzZUlkOiBzdHJpbmcsIHNldmVyaXR5OiBzdHJpbmcsIGFjdG9ySWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAuc2V0KHsgc2V2ZXJpdHksIHVwZGF0ZWRCeTogYWN0b3JJZCwgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpIH0pXG4gICAgLndoZXJlKGFuZChlcShzY2hlbWEuc3VwcG9ydENhc2UuaWQsIGNhc2VJZCksIGlzTnVsbChzY2hlbWEuc3VwcG9ydENhc2UuZGVsZXRlZEF0KSkpXG4gICAgLnJldHVybmluZyh7IHNldmVyaXR5OiBzY2hlbWEuc3VwcG9ydENhc2Uuc2V2ZXJpdHkgfSkpO1xuICByZXR1cm4gcm93c1swXT8uc2V2ZXJpdHkgPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBTZXQgb3IgY2xlYXIgdGhlIFNUQUZGIG93bmVyLlxuICpcbiAqIGBudWxsYCBpcyBhIGxlZ2l0aW1hdGUgdmFsdWU6IGl0IGlzIHRoZSB1bm93bmVkIHBvb2wsIGFuZCBob3cgXCJJIGNhbm5vdCB0YWtlXG4gKiB0aGlzXCIgaXMgZXhwcmVzc2VkIHdpdGhvdXQgaW52ZW50aW5nIGEgcHNldWRvLWFzc2lnbmVlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzaWduQ2FzZShjYXNlSWQ6IHN0cmluZywgYXNzaWduZWRUbzogc3RyaW5nIHwgbnVsbCwgYWN0b3JJZDogc3RyaW5nKTogUHJvbWlzZTxTdXBwb3J0Q2FzZSB8IG51bGw+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnVwZGF0ZShzY2hlbWEuc3VwcG9ydENhc2UpXG4gICAgLnNldCh7IGFzc2lnbmVkVG8sIHVwZGF0ZWRCeTogYWN0b3JJZCwgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpIH0pXG4gICAgLndoZXJlKGFuZChlcShzY2hlbWEuc3VwcG9ydENhc2UuaWQsIGNhc2VJZCksIGlzTnVsbChzY2hlbWEuc3VwcG9ydENhc2UuZGVsZXRlZEF0KSkpXG4gICAgLnJldHVybmluZygpKTtcbiAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbn1cblxuLyoqXG4gKiBBc3NpZ24gb3IgcmVsZWFzZSBNQU5ZIGNhc2VzIGF0IG9uY2UuXG4gKlxuICogT25lIHN0YXRlbWVudCByYXRoZXIgdGhhbiBhIGxvb3AsIHdoaWNoIGlzIHRoZSBwb2ludDogYSBzdGFmZiBtZW1iZXIgY2xlYXJpbmdcbiAqIGEgcXVldWUgb2YgdGhpcnR5IHNlbGVjdHMgdGhpcnR5IGFuZCBhY3RzIG9uY2UsIGFuZCB0aGlydHkgcm91bmQgdHJpcHMgd291bGRcbiAqIG1ha2UgdGhlIG9idmlvdXMgaW50ZXJhY3Rpb24gdGhlIHNsb3cgb25lLiBJdCBhbHNvIG1ha2VzIHRoZSB3cml0ZSBBVE9NSUMg4oCUIGFcbiAqIHBhcnRpYWwgYnVsayBhc3NpZ24gbGVhdmVzIHRoZSBxdWV1ZSBpbiBhIHN0YXRlIG5vYm9keSBjaG9zZSwgYW5kIHRoZSBvcGVyYXRvclxuICogY2Fubm90IHRlbGwgd2hpY2ggaGFsZiB0b29rLlxuICpcbiAqIFJldHVybnMgdGhlIGlkcyB0aGF0IGFjdHVhbGx5IG1vdmVkIHJhdGhlciB0aGFuIGEgY291bnQsIHNvIGEgY2FsbGVyIGNhblxuICogcmVwb3J0IHByZWNpc2VseSB3aGF0IGhhcHBlbmVkIHdoZW4gdGhlIHNlbGVjdGlvbiBpbmNsdWRlZCBzb21ldGhpbmcgc3RhbGU6XG4gKiBhIGNhc2UgY2xvc2VkIG9yIHJlYXNzaWduZWQgYnkgc29tZWJvZHkgZWxzZSBiZXR3ZWVuIHRoZSByZWFkIGFuZCB0aGUgY2xpY2suXG4gKiBUaGF0IGlzIHRoZSBub3JtYWwgY2FzZSBvbiBhIHNoYXJlZCBxdWV1ZSwgbm90IGFuIGVkZ2Ugb25lLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzaWduQ2FzZXMoXG4gIGNhc2VJZHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBhc3NpZ25lZFRvOiBzdHJpbmcgfCBudWxsLFxuICBhY3RvcklkOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGlmIChjYXNlSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAuc2V0KHsgYXNzaWduZWRUbywgdXBkYXRlZEJ5OiBhY3RvcklkLCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgaW5BcnJheShzY2hlbWEuc3VwcG9ydENhc2UuaWQsIFsuLi5jYXNlSWRzXSksXG4gICAgICBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmRlbGV0ZWRBdCksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q2FzZS5pZCB9KSk7XG4gIHJldHVybiByb3dzLm1hcCgocikgPT4gci5pZCk7XG59XG5cbi8qKlxuICogQ2xvc2UgTUFOWSBjYXNlcyBhdCBvbmNlLlxuICpcbiAqIFNlcGFyYXRlIGZyb20ge0BsaW5rIGFzc2lnbkNhc2VzfSByYXRoZXIgdGhhbiBhIGdlbmVyaWMgYnVsay11cGRhdGUsIGJlY2F1c2VcbiAqIGNsb3NpbmcgbWFpbnRhaW5zIHRoZSByZXNwb25zZSBjbG9jayDigJQgaXQgZm9sZHMgdGhlIG9wZW4gYXdhaXRpbmcgc3BhbiBpbnRvXG4gKiB0aGUgYWNjdW11bGF0b3IgYW5kIHN0YW1wcyBgY2xvc2VkQXRgIOKAlCBhbmQgYSBnZW5lcmljIHNldHRlciB3b3VsZCBxdWlldGx5XG4gKiBza2lwIHRoYXQuIFRoZSBhcml0aG1ldGljIGlzIHRoZSBzYW1lIFNRTCBgc2V0Q2FzZVN0YXR1c2AgdXNlcywgZm9yIHRoZSBzYW1lXG4gKiByZWFzb246IGRvbmUgYWdhaW5zdCB0aGUgU1RPUkVEIGFuY2hvciBzbyBhIGNsb2NrIHNrZXcgY2Fubm90IGluZmxhdGUgcGF1c2VkXG4gKiB0aW1lLlxuICpcbiAqIE9ubHkgZXZlciB1c2VkIHRvIENMT1NFLiBCdWxrIFJFT1BFTklORyBpcyBkZWxpYmVyYXRlbHkgbm90IG9mZmVyZWQ6IHJlb3BlbmluZ1xuICogaXMgc3RhZmYtb25seSBhbmQgY2FzZS1ieS1jYXNlIGJ5IGRlc2lnbiwgYW5kIGEgYnVsayByZW9wZW4gaXMgaG93IGEgcXVldWVcbiAqIHNvbWVvbmUgaGFzIGZpbmlzaGVkIHdpdGggY29tZXMgYmFjayBhbGwgYXQgb25jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlQ2FzZXMoY2FzZUlkczogcmVhZG9ubHkgc3RyaW5nW10sIGFjdG9ySWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgaWYgKGNhc2VJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC51cGRhdGUoc2NoZW1hLnN1cHBvcnRDYXNlKVxuICAgIC5zZXQoe1xuICAgICAgc3RhdHVzOiAnY2xvc2VkJyxcbiAgICAgIGNsb3NlZEF0OiBub3csXG4gICAgICBjbG9zZWRCeTogYWN0b3JJZCxcbiAgICAgIHVwZGF0ZWRCeTogYWN0b3JJZCxcbiAgICAgIHVwZGF0ZWRBdDogbm93LFxuICAgICAgYXdhaXRpbmdTaW5jZTogbnVsbCxcbiAgICAgIGF3YWl0aW5nVG90YWxTZWNvbmRzOiBzcWxgJHtzY2hlbWEuc3VwcG9ydENhc2UuYXdhaXRpbmdUb3RhbFNlY29uZHN9ICsgQ09BTEVTQ0UoRVhUUkFDVChFUE9DSCBGUk9NICgke25vdy50b0lTT1N0cmluZygpfTo6dGltZXN0YW1wdHogLSAke3NjaGVtYS5zdXBwb3J0Q2FzZS5hd2FpdGluZ1NpbmNlfSkpOjppbnQsIDApYCxcbiAgICB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBpbkFycmF5KHNjaGVtYS5zdXBwb3J0Q2FzZS5pZCwgWy4uLmNhc2VJZHNdKSxcbiAgICAgIGlzTnVsbChzY2hlbWEuc3VwcG9ydENhc2UuZGVsZXRlZEF0KSxcbiAgICAgIC8vIEFscmVhZHktY2xvc2VkIGNhc2VzIGFyZSBza2lwcGVkIHJhdGhlciB0aGFuIHJlLXN0YW1wZWQsIHNvIGEgYnVsa1xuICAgICAgLy8gY2xvc2Ugb3ZlciBhIHNlbGVjdGlvbiB0aGF0IGluY2x1ZGVzIG9uZSBkb2VzIG5vdCBtb3ZlIGl0cyBjbG9zZWRBdC5cbiAgICAgIHNxbGAke3NjaGVtYS5zdXBwb3J0Q2FzZS5zdGF0dXN9IDw+ICdjbG9zZWQnYCxcbiAgICApKVxuICAgIC5yZXR1cm5pbmcoeyBpZDogc2NoZW1hLnN1cHBvcnRDYXNlLmlkIH0pKTtcbiAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiByLmlkKTtcbn1cblxuLyoqXG4gKiBIYW5kIHRoZSBjYXNlIHRvIGFub3RoZXIgdGVuYW50IGNvbnRhY3QuXG4gKlxuICogTm90ZSB3aGF0IHRoaXMgZG9lcyBOT1QgdG91Y2g6IGBjcmVhdGVkQnlgLiBUaGF0IGlzIHRoZSBpbW11dGFibGUgYXVkaXQgZmFjdFxuICogb2Ygd2hvIHJhaXNlZCB0aGUgY2FzZSDigJQgbXV0YXRpbmcgaXQgdG8gZXhwcmVzcyBcInNvbWVvbmUgZWxzZSBvd25zIHRoaXMgbm93XCJcbiAqIHdvdWxkIGRlc3Ryb3kgdGhlIG9ubHkgcmVjb3JkIG9mIHdobyBhY3R1YWxseSBvcGVuZWQgaXQuIFRoZSBjYWxsZXIgbXVzdCBoYXZlXG4gKiBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgdGFyZ2V0IGlzIGEgbGl2ZSBkZXNpZ25hdGVkIGNvbnRhY3Q7IHRoaXMgZnVuY3Rpb25cbiAqIHdpbGwgbm90IGluZmVyIGVudGl0bGVtZW50IGZyb20gYSB1c2VyIGlkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNmZXJDYXNlVG9Db250YWN0KGNhc2VJZDogc3RyaW5nLCB0ZW5hbnRDb250YWN0OiBzdHJpbmcsIGFjdG9ySWQ6IHN0cmluZyk6IFByb21pc2U8U3VwcG9ydENhc2UgfCBudWxsPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC51cGRhdGUoc2NoZW1hLnN1cHBvcnRDYXNlKVxuICAgIC5zZXQoeyB0ZW5hbnRDb250YWN0LCB1cGRhdGVkQnk6IGFjdG9ySWQsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9KVxuICAgIC53aGVyZShhbmQoZXEoc2NoZW1hLnN1cHBvcnRDYXNlLmlkLCBjYXNlSWQpLCBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmRlbGV0ZWRBdCkpKVxuICAgIC5yZXR1cm5pbmcoKSk7XG4gIHJldHVybiByb3dzWzBdID8/IG51bGw7XG59XG5cbi8qKlxuICogQSBkZXBhcnRpbmcgY29udGFjdCdzIG9wZW4gY2FzZXMsIHNvIHJlbW92YWwgcmVhc3NpZ25zIHJhdGhlciB0aGFuIG9ycGhhbnMuXG4gKlxuICogU2VydmVkIGJ5IHRoZSBwYXJ0aWFsIGBzdXBwb3J0X2Nhc2VfdGVuYW50X2NvbnRhY3RfaWR4YC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5DYXNlc0ZvckNvbnRhY3Qob3JnSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPFN1cHBvcnRDYXNlW10+IHtcbiAgcmV0dXJuIHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnNlbGVjdCgpXG4gICAgLmZyb20oc2NoZW1hLnN1cHBvcnRDYXNlKVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENhc2Uub3JnSWQsIG9yZ0lkKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q2FzZS50ZW5hbnRDb250YWN0LCB1c2VySWQpLFxuICAgICAgaW5BcnJheShzY2hlbWEuc3VwcG9ydENhc2Uuc3RhdHVzLCBbJ29wZW4nLCAnYXdhaXRpbmdfc3VwcG9ydCcsICdhd2FpdGluZ19jdXN0b21lciddKSxcbiAgICAgIGlzTnVsbChzY2hlbWEuc3VwcG9ydENhc2UuZGVsZXRlZEF0KSxcbiAgICApKSk7XG59XG5cbi8qKlxuICogQ2FzZXMgcmFpc2VkIGFjcm9zcyBhIHNjb3BlIHdpdGhpbiB0aGUgbGFzdCBgd2luZG93RGF5c2Ag4oCUIHRoZSBGQUlSLVVTRSBjb3VudC5cbiAqXG4gKiBXSEFUIElUIElTIEZPUi4gU3VwcG9ydCBpcyBwcmljZWQgcGVyIENPTlRBQ1QsIGFuZCB0aGF0IHVuaXQgYXNzdW1lcyBjb250YWN0c1xuICogcHJveHkgZm9yIGNhc2Ugdm9sdW1lLiBBdCB0ZW4gc2VhdHMgdGhleSBkbzsgYXQgYSBodW5kcmVkIHRoZXkgZG8gbm90IOKAlCB0aHJlZVxuICogbmFtZWQgY29udGFjdHMgYmVjb21lIGFuIGludGVybmFsIGhlbHAgZGVzayBGT1JXQVJESU5HIHRpY2tldHMsIHNvIHRoZSBwcmljZVxuICogYnV5cyB0aGUgaW50ZXJmYWNlIHJhdGhlciB0aGFuIHRoZSBsb2FkLiBUaGlzIGlzIHRoZSBtZWFzdXJlbWVudCB0aGF0IG5vdGljZXMuXG4gKlxuICogV0hZIE5PVCBUSEUgUVVPVEEgU0VSVklDRS4gYFFVT1RBX1JFU0VUX0RBWVNgIG1ha2VzIGV2ZXJ5IHRyYWNrZWQgcXVvdGEgYVxuICogMy1kYXkgcGVyaW9kLCBhbmQgYSBzdXBwb3J0IGFsbG93YW5jZSBpcyBtb250aGx5LXNoYXBlZDogZml2ZSBhIG1vbnRoIGRvZXMgbm90XG4gKiBkaXZpZGUgaW50byB0aHJlZSBkYXlzIHdpdGhvdXQgcm91bmRpbmcgdG8gc29tZXRoaW5nIGVpdGhlciBmYXIgdG9vIGxvb3NlIG9yXG4gKiB1c2VsZXNzLiBUaGlzIHRhYmxlIElTIHRoZSBjb3VudGVyIOKAlCBvbmUgcmFuZ2Ugc2NhbiBvblxuICogYHN1cHBvcnRfY2FzZV9vcmdfY3JlYXRlZF9pZHhgLCBubyBwZXJpb2QgbWlzbWF0Y2gsIGFuZCBub3RoaW5nIHRvIGRyaWZ0IG91dFxuICogb2Ygc3luYyB3aXRoIHJlYWxpdHkuXG4gKlxuICogQ09VTlRTIEVWRVJZIENBU0UsIElOQ0xVRElORyBDTE9TRUQgQU5EIFNPRlQtREVMRVRFRC4gVGhlIHF1ZXN0aW9uIGlzIGhvdyBtdWNoXG4gKiBzdXBwb3J0IHdhcyBDT05TVU1FRCBpbiB0aGUgd2luZG93LCBhbmQgYSBjYXNlIHRoYXQgd2FzIGFuc3dlcmVkIGFuZCBjbG9zZWRcbiAqIGNvbnN1bWVkIGl0IGp1c3QgYXMgbXVjaCBhcyBhbiBvcGVuIG9uZS4gRXhjbHVkaW5nIGNsb3NlZCBjYXNlcyB3b3VsZCBtYWtlIHRoZVxuICogYWxsb3dhbmNlIHRyaXZpYWxseSBldmFkYWJsZSBieSBjbG9zaW5nIHByb21wdGx5IOKAlCB0aGUgb3Bwb3NpdGUgb2YgdGhlXG4gKiBiZWhhdmlvdXIgYW55b25lIHdhbnRzIHRvIGRpc2NvdXJhZ2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3VudENhc2VzSW5XaW5kb3cob3JnSWRzOiByZWFkb25seSBzdHJpbmdbXSwgd2luZG93RGF5czogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgaWYgKG9yZ0lkcy5sZW5ndGggPT09IDAgfHwgd2luZG93RGF5cyA8PSAwKSByZXR1cm4gMDtcbiAgY29uc3Qgc2luY2UgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gd2luZG93RGF5cyAqIDg2NDAwXzAwMCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3QoeyBuOiBzcWw8bnVtYmVyPmBjb3VudCgqKTo6aW50YCB9KVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgaW5BcnJheShzY2hlbWEuc3VwcG9ydENhc2Uub3JnSWQsIFsuLi5vcmdJZHNdKSxcbiAgICAgIGd0ZShzY2hlbWEuc3VwcG9ydENhc2UuY3JlYXRlZEF0LCBzaW5jZSksXG4gICAgKSkpO1xuICByZXR1cm4gcm93c1swXT8ubiA/PyAwO1xufVxuXG4vKipcbiAqIFJlY29yZCB0aGUgY3VzdG9tZXIncyB2ZXJkaWN0IG9uIGEgY2FzZS5cbiAqXG4gKiBPTkxZIE9OIEEgVEVSTUlOQUwgQ0FTRSwgZW5mb3JjZWQgaW4gdGhlIFdIRVJFIGNsYXVzZSByYXRoZXIgdGhhbiBieSB0aGVcbiAqIGNhbGxlcjogcmF0aW5nIGEgY2FzZSBzdGlsbCBiZWluZyB3b3JrZWQgd291bGQgbWVhc3VyZSBhbiBhbnN3ZXIgbm9ib2R5IGhhc1xuICogZmluaXNoZWQgZ2l2aW5nLCBhbmQgcHV0dGluZyB0aGUgY29uZGl0aW9uIGluIFNRTCBtZWFucyBubyByb3V0ZSBjYW4gZm9yZ2V0XG4gKiBpdC5cbiAqXG4gKiBSRS1SQVRFQUJMRSBvbiBwdXJwb3NlLiBBIGN1c3RvbWVyIHdobyByYXRlcyBpbiBmcnVzdHJhdGlvbiBhbmQgY29tZXMgYmFjayBhXG4gKiBkYXkgbGF0ZXIgc2hvdWxkIGJlIGFibGUgdG8gY2hhbmdlIGl0OyBmcmVlemluZyB0aGUgZmlyc3QgbnVtYmVyIHdvdWxkIG1ha2VcbiAqIHRoZSBtZXRyaWMgbWVhc3VyZSBob3cgcGVvcGxlIGZlbHQgYXQgdGhlaXIgd29yc3QgbW9tZW50LiBgc2F0aXNmYWN0aW9uX2F0YFxuICogbW92ZXMgd2l0aCBpdCwgc28gdGhlIEFOU1dFUiBhbmQgV0hFTiBpdCB3YXMgZ2l2ZW4gc3RheSB0b2dldGhlci5cbiAqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSByb3cgbW92ZWQg4oCUIGZhbHNlIG1lYW5zIHRoZSBjYXNlIGlzIG1pc3NpbmcsIHNvZnQtZGVsZXRlZCxcbiAqIG9yIG5vdCBjbG9zZWQgeWV0LCB3aGljaCB0aGUgY2FsbGVyIG11c3QgZGlzdGluZ3Vpc2ggZnJvbSBhIHN0b3JlZCB6ZXJvLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmF0ZUNhc2UoXG4gIGNhc2VJZDogc3RyaW5nLFxuICBzYXRpc2ZhY3Rpb246IG51bWJlcixcbiAgY29tbWVudDogc3RyaW5nIHwgbnVsbCxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q2FzZSlcbiAgICAuc2V0KHsgc2F0aXNmYWN0aW9uLCBzYXRpc2ZhY3Rpb25Db21tZW50OiBjb21tZW50LCBzYXRpc2ZhY3Rpb25BdDogbmV3IERhdGUoKSB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENhc2UuaWQsIGNhc2VJZCksXG4gICAgICBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlLmRlbGV0ZWRBdCksXG4gICAgICAvLyBUZXJtaW5hbCBvbmx5LiBgcmVzb2x2ZWRgIGNvdW50czogd2UgaGF2ZSBjbGFpbWVkIGEgZml4LCBzbyB0aGVcbiAgICAgIC8vIGN1c3RvbWVyIGlzIGluIGEgcG9zaXRpb24gdG8gc2F5IHdoZXRoZXIgaXQgd2FzIG9uZS5cbiAgICAgIGluQXJyYXkoc2NoZW1hLnN1cHBvcnRDYXNlLnN0YXR1cywgWydyZXNvbHZlZCcsICdjbG9zZWQnXSksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q2FzZS5pZCB9KSk7XG4gIHJldHVybiByb3dzLmxlbmd0aCA+IDA7XG59XG5cbi8vIC0tLSBTdGFmZiBub3RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE9uZSBzdGFmZiBub3RlLCBhcyB0aGUgcXVldWUgVUkgcmVuZGVycyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcG9ydENhc2VOb3RlIHtcbiAgaWQ6IHN0cmluZztcbiAgY2FzZUlkOiBzdHJpbmc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbn1cblxuLyoqXG4gKiBBZGQgYSBzdGFmZi1vbmx5IG5vdGUgdG8gYSBjYXNlLlxuICpcbiAqIGBvcmdJZGAgaXMgZGVub3JtYWxpc2VkIG9udG8gdGhlIHJvdyBmcm9tIHRoZSBDQVNFLCBub3QgdGFrZW4gZnJvbSB0aGUgYXV0aG9yOlxuICogYSBub3RlIGJlbG9uZ3MgdG8gdGhlIHRlbmFudCB3aG9zZSBjYXNlIGl0IGFubm90YXRlcywgYW5kIHNvdXJjaW5nIGl0IGZyb21cbiAqIHRoZSBzdGFmZiBhdXRob3IncyBvd24gb3JnICh0aGUgc3lzdGVtIG9yZykgd291bGQgcHV0IGV2ZXJ5IG5vdGUgb3V0c2lkZSB0aGVcbiAqIHRlbmFudCBzY29wZSB0aGF0IGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4gaXQuXG4gKlxuICogU1RBRkYgT05MWSBhdCB0aGUgcm91dGUgbGF5ZXIsIGFuZCB0aGUgc2VwYXJhdGUgdGFibGUgaXMgdGhlIHJlYXNvbiB0aGF0IGlzXG4gKiBzYWZlOiBgbWVzc2FnZXNgIGlzIHJlYWQgdGhyb3VnaCBvbmUgc2hhcmVkIHZpc2liaWxpdHkgcHJlZGljYXRlLCBzbyBhIGZsYWdcbiAqIHRoZXJlIHdvdWxkIGxlYWsgYW4gaW50ZXJuYWwgbm90ZSBmcm9tIGFueSByZWFkIHBhdGggdGhhdCBmb3Jnb3QgdGhlIGV4dHJhXG4gKiBjb25kaXRpb24uIEEgc2VwYXJhdGUgdGFibGUgY2Fubm90IGxlYWsgYnkgb21pc3Npb24g4oCUIGl0IGhhcyB0byBiZSBqb2luZWRcbiAqIGRlbGliZXJhdGVseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZENhc2VOb3RlKFxuICBjYXNlSWQ6IHN0cmluZyxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICBjcmVhdGVkQnk6IHN0cmluZyxcbik6IFByb21pc2U8U3VwcG9ydENhc2VOb3RlPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5pbnNlcnQoc2NoZW1hLnN1cHBvcnRDYXNlTm90ZSlcbiAgICAudmFsdWVzKHsgY2FzZUlkLCBvcmdJZCwgY29udGVudCwgY3JlYXRlZEJ5IH0pXG4gICAgLnJldHVybmluZygpKTtcbiAgY29uc3Qgcm93ID0gcm93c1swXTtcbiAgaWYgKCFyb3cpIHRocm93IG5ldyBFcnJvcignc3VwcG9ydCBjYXNlIG5vdGUgaW5zZXJ0IHJldHVybmVkIG5vIHJvdycpO1xuICByZXR1cm4gcm93O1xufVxuXG4vKiogTGl2ZSBub3RlcyBvbiBhIGNhc2UsIG9sZGVzdCBmaXJzdCDigJQgdGhleSByZWFkIGFzIGEgcnVubmluZyBjb21tZW50YXJ5LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RDYXNlTm90ZXMoY2FzZUlkOiBzdHJpbmcpOiBQcm9taXNlPFN1cHBvcnRDYXNlTm90ZVtdPiB7XG4gIHJldHVybiB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3QoKVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q2FzZU5vdGUpXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q2FzZU5vdGUuY2FzZUlkLCBjYXNlSWQpLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYXNlTm90ZS5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgICBpc051bGwoc2NoZW1hLnN1cHBvcnRDYXNlTm90ZS5kZWxldGVkQXQpLFxuICAgICkpXG4gICAgLm9yZGVyQnkoYXNjKHNjaGVtYS5zdXBwb3J0Q2FzZU5vdGUuY3JlYXRlZEF0KSkpO1xufVxuXG4vKipcbiAqIFNvZnQtZGVsZXRlIGEgbm90ZS5cbiAqXG4gKiBTb2Z0IGJlY2F1c2UgYSBub3RlIGlzIGEgcmVjb3JkIG9mIHdoYXQgdGhlIGRlc2sgYmVsaWV2ZWQgYXQgdGhlIHRpbWUsIGFuZCBhXG4gKiBkaXNwdXRlIG1heSB0dXJuIG9uIGl0LiBSZXR1cm5zIHdoZXRoZXIgYSByb3cgbW92ZWQsIHNvIGEgc2Vjb25kIGRlbGV0ZSBpcyBhXG4gKiByZXBvcnRlZCBuby1vcCByYXRoZXIgdGhhbiBhIHNpbGVudCBzdWNjZXNzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ2FzZU5vdGUobm90ZUlkOiBzdHJpbmcsIGRlbGV0ZWRCeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC51cGRhdGUoc2NoZW1hLnN1cHBvcnRDYXNlTm90ZSlcbiAgICAuc2V0KHsgaXNBY3RpdmU6IGZhbHNlLCBkZWxldGVkQXQ6IG5ldyBEYXRlKCksIGRlbGV0ZWRCeSB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENhc2VOb3RlLmlkLCBub3RlSWQpLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDYXNlTm90ZS5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q2FzZU5vdGUuaWQgfSkpO1xuICByZXR1cm4gcm93cy5sZW5ndGggPiAwO1xufVxuXG4vLyAtLS0gQ2FubmVkIHJlc3BvbnNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBIHJldXNhYmxlIHN0YWZmIHJlcGx5IHRlbXBsYXRlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYW5uZWRSZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBMaXZlIHRlbXBsYXRlcywgYWxwaGFiZXRpY2FsIOKAlCB0aGUgcGlja2VyJ3Mgb25seSBxdWVyeS5cbiAqXG4gKiBObyBvcmcgc2NvcGUgYmVjYXVzZSB0aGUgdGFibGUgaGFzIG5vbmU6IHRoZXNlIGFyZSB0aGUgdmVuZG9yJ3Mgb3duIHdvcmRpbmdcbiAqIGZvciByZWN1cnJpbmcgcXVlc3Rpb25zLCBhdXRob3JlZCBvbmNlIGFuZCByZXVzZWQgYWNyb3NzIGV2ZXJ5IGN1c3RvbWVyLlxuICogU2NvcGluZyB0aGVtIHBlciB0ZW5hbnQgd291bGQgYmUgdGhlIG9wcG9zaXRlIG9mIHRoZSBwb2ludC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RDYW5uZWRSZXNwb25zZXMoKTogUHJvbWlzZTxDYW5uZWRSZXNwb25zZVtdPiB7XG4gIHJldHVybiB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3Qoe1xuICAgICAgaWQ6IHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UuaWQsXG4gICAgICB0aXRsZTogc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZS50aXRsZSxcbiAgICAgIGJvZHk6IHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UuYm9keSxcbiAgICB9KVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UpXG4gICAgLndoZXJlKGVxKHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UuaXNBY3RpdmUsIHRydWUpKVxuICAgIC5vcmRlckJ5KGFzYyhzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLnRpdGxlKSkpO1xufVxuXG4vKiogQ3JlYXRlIGEgdGVtcGxhdGUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ2FubmVkUmVzcG9uc2UoXG4gIHRpdGxlOiBzdHJpbmcsXG4gIGJvZHk6IHN0cmluZyxcbiAgYWN0b3JJZDogc3RyaW5nLFxuKTogUHJvbWlzZTxDYW5uZWRSZXNwb25zZT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuaW5zZXJ0KHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UpXG4gICAgLnZhbHVlcyh7IHRpdGxlLCBib2R5LCBjcmVhdGVkQnk6IGFjdG9ySWQsIHVwZGF0ZWRCeTogYWN0b3JJZCB9KVxuICAgIC5yZXR1cm5pbmcoe1xuICAgICAgaWQ6IHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UuaWQsXG4gICAgICB0aXRsZTogc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZS50aXRsZSxcbiAgICAgIGJvZHk6IHNjaGVtYS5zdXBwb3J0Q2FubmVkUmVzcG9uc2UuYm9keSxcbiAgICB9KSk7XG4gIGNvbnN0IHJvdyA9IHJvd3NbMF07XG4gIGlmICghcm93KSB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5lZCByZXNwb25zZSBpbnNlcnQgcmV0dXJuZWQgbm8gcm93Jyk7XG4gIHJldHVybiByb3c7XG59XG5cbi8qKlxuICogRWRpdCBhIGxpdmUgdGVtcGxhdGUuXG4gKlxuICogR3VhcmRlZCBvbiBgaXNfYWN0aXZlYCBzbyBhIHJldGlyZWQgdGVtcGxhdGUgY2Fubm90IGJlIGVkaXRlZCBiYWNrIGludG9cbiAqIGNpcmN1bGF0aW9uIOKAlCBhIHJlc3VycmVjdGlvbiBzaG91bGQgYmUgYSBkZWxpYmVyYXRlIG5ldyByb3csIG5vdCBhIHNpZGVcbiAqIGVmZmVjdCBvZiBmaXhpbmcgYSB0eXBvLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQ2FubmVkUmVzcG9uc2UoXG4gIGlkOiBzdHJpbmcsXG4gIGZpZWxkczogeyB0aXRsZT86IHN0cmluZzsgYm9keT86IHN0cmluZyB9LFxuICBhY3RvcklkOiBzdHJpbmcsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGZpZWxkcy50aXRsZSA9PT0gdW5kZWZpbmVkICYmIGZpZWxkcy5ib2R5ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnVwZGF0ZShzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlKVxuICAgIC5zZXQoe1xuICAgICAgLi4uKGZpZWxkcy50aXRsZSAhPT0gdW5kZWZpbmVkID8geyB0aXRsZTogZmllbGRzLnRpdGxlIH0gOiB7fSksXG4gICAgICAuLi4oZmllbGRzLmJvZHkgIT09IHVuZGVmaW5lZCA/IHsgYm9keTogZmllbGRzLmJvZHkgfSA6IHt9KSxcbiAgICAgIHVwZGF0ZWRCeTogYWN0b3JJZCxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLmlkLCBpZCksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLmlzQWN0aXZlLCB0cnVlKSxcbiAgICApKVxuICAgIC5yZXR1cm5pbmcoeyBpZDogc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZS5pZCB9KSk7XG4gIHJldHVybiByb3dzLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogUmV0aXJlIGEgdGVtcGxhdGUuXG4gKlxuICogU09GVCwgYmVjYXVzZSBhIHJldGlyZWQgdGVtcGxhdGUgaXMgc3RpbGwgdGhlIGV4cGxhbmF0aW9uIG9mIHdoYXQgYSBwYXN0XG4gKiByZXBseSBzYWlkIOKAlCBkZWxldGluZyB0aGUgcm93IHdvdWxkIGxlYXZlIG9sZCBjb3JyZXNwb25kZW5jZSB1bmFjY291bnRhYmxlXG4gKiBmb3IgaXRzIG93biB3b3JkaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlQ2FubmVkUmVzcG9uc2UoaWQ6IHN0cmluZywgYWN0b3JJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC51cGRhdGUoc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZSlcbiAgICAuc2V0KHsgaXNBY3RpdmU6IGZhbHNlLCB1cGRhdGVkQnk6IGFjdG9ySWQsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLmlkLCBpZCksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENhbm5lZFJlc3BvbnNlLmlzQWN0aXZlLCB0cnVlKSxcbiAgICApKVxuICAgIC5yZXR1cm5pbmcoeyBpZDogc2NoZW1hLnN1cHBvcnRDYW5uZWRSZXNwb25zZS5pZCB9KSk7XG4gIHJldHVybiByb3dzLmxlbmd0aCA+IDA7XG59XG5cbi8vIC0tLSBTdXBwb3J0IGNvbnRhY3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBMaXZlIGRlc2lnbmF0ZWQgY29udGFjdHMgYWNyb3NzIGEgc2V0IG9mIG9yZ3MgKGFuIGFjY291bnQgc3VidHJlZSkuXG4gKlxuICogVGFrZXMgdGhlIHdob2xlIHNjb3BlIGluIG9uZSBxdWVyeSByYXRoZXIgdGhhbiBwZXItb3JnIGJlY2F1c2UgdGhlIGFsbG93YW5jZVxuICogUE9PTFMgYXQgdGhlIHJvb3Q6IGEgcGVyc29uIGRlc2lnbmF0ZWQgb24gYSB0ZWFtIHNwZW5kcyB0aGUgYWNjb3VudCdzXG4gKiBhbGxvd2FuY2UsIHNvIGNvdW50aW5nIHRlYW0tYnktdGVhbSBhbmQgc3VtbWluZyB3b3VsZCBiZSB0aGUgc2FtZSBudW1iZXIgYnlcbiAqIGFjY2lkZW50IGFuZCB0aGUgd3Jvbmcgc2hhcGUgdGhlIG1vbWVudCBwb29saW5nIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3VudEFjdGl2ZVN1cHBvcnRDb250YWN0cyhvcmdJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgLy8gQ2FsbGVycyBwYXNzIHRoZSBleHBhbmRlZCBTVUJUUkVFIGZvciB0aGUgcG9vbGVkIGNhcCwgb3IgYSBzaW5nbGUgb3JnIHRvIGFza1xuICAvLyBcIm1heSBhIGNhc2UgcmFpc2VkIGhlcmUgaGF2ZSBhbiBvd25lciBhdCBhbGxcIi4gQm90aCBhcmUgbGVnaXRpbWF0ZTsgc2VlXG4gIC8vIGBTdXBwb3J0RW50aXRsZW1lbnRgIGluIHBsYXRmb3JtIGZvciB3aGljaCBmaWVsZCBpcyB3aGljaC5cbiAgaWYgKG9yZ0lkcy5sZW5ndGggPT09IDApIHJldHVybiAwO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAuc2VsZWN0KHsgbjogc3FsPG51bWJlcj5gY291bnQoKik6OmludGAgfSlcbiAgICAuZnJvbShzY2hlbWEuc3VwcG9ydENvbnRhY3QpXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGluQXJyYXkoc2NoZW1hLnN1cHBvcnRDb250YWN0Lm9yZ0lkLCBbLi4ub3JnSWRzXSksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3QuaXNBY3RpdmUsIHRydWUpLFxuICAgICkpKTtcbiAgcmV0dXJuIHJvd3NbMF0/Lm4gPz8gMDtcbn1cblxuLyoqXG4gKiBMaXZlIGNvbnRhY3RzIGZvciB0aGUgdGVuYW50IG93bmVyIHBpY2tlci5cbiAqXG4gKiBTQ09QRSBJUyBUSEUgQ0FMTEVSJ1MgQ0hPSUNFLCBhbmQgdGhlIGRlZmF1bHQgaXMgT05FIE9SRy4gVGhlIGFsbG93YW5jZSBwb29sc1xuICogc3VidHJlZS13aWRlLCBidXQgb3duZXJzaGlwIGRvZXMgbm90OiBhIHRlYW0gcmVhc3NpZ25zIGEgY2FzZSBvbmx5IGFtb25nIGl0c1xuICogT1dOIGNvbnRhY3RzLCBzbyBhIHBvb2xlZCBhbGxvd2FuY2UgbmV2ZXIgdHVybnMgaW50byBvbmUgdGVhbSdzIGNhc2VzIGJlaW5nXG4gKiByZWFkYWJsZSBieSBhIHNpYmxpbmcuIFBhc3MgYSBzaW5nbGUgb3JnIGlkIGZvciB0aGUgcGlja2VyOyBwYXNzIHRoZSBleHBhbmRlZFxuICogc3VidHJlZSBvbmx5IHdoZXJlIHRoZSBwb29sZWQgQ0FQIGlzIHRoZSBxdWVzdGlvbiAoc2VlXG4gKiBgY291bnRBY3RpdmVTdXBwb3J0Q29udGFjdHNgKS5cbiAqXG4gKiBUYWtpbmcgYSBsaXN0IHJhdGhlciB0aGFuIGEgc2luZ2xlIGlkIGtlZXBzIHRoYXQgZGVjaXNpb24gYXQgdGhlIGNhbGwgc2l0ZVxuICogaW5zdGVhZCBvZiBoaWRpbmcgaXQgaGVyZSDigJQgdGhlIHR3byBzY29wZXMgYW5zd2VyIGRpZmZlcmVudGx5IGFuZCB0aGUgd3JvbmdcbiAqIG9uZSBsZWFrcyBjYXNlcyBhY3Jvc3MgdGVhbXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0QWN0aXZlU3VwcG9ydENvbnRhY3RzKFxuICBvcmdJZHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUHJvbWlzZTx7IG9yZ0lkOiBzdHJpbmc7IHVzZXJJZDogc3RyaW5nOyBpc1ByZW1pdW06IGJvb2xlYW4gfVtdPiB7XG4gIGlmIChvcmdJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gIHJldHVybiB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3Qoe1xuICAgICAgb3JnSWQ6IHNjaGVtYS5zdXBwb3J0Q29udGFjdC5vcmdJZCxcbiAgICAgIHVzZXJJZDogc2NoZW1hLnN1cHBvcnRDb250YWN0LnVzZXJJZCxcbiAgICAgIC8vIENhcnJpZWQgc28gdGhlIGFkbWluIHBhbmVsIGNhbiBzaG93IHdobyBpcyB1cGdyYWRlZCB3aXRob3V0IGEgc2Vjb25kXG4gICAgICAvLyBxdWVyeSwgYW5kIHNvIHRoZSB0ZW5hbnQgb3duZXIgcGlja2VyIGNhbiBzYXkgd2hpY2ggY29udGFjdHMgY2FycnkgMjR4Ny5cbiAgICAgIGlzUHJlbWl1bTogc2NoZW1hLnN1cHBvcnRDb250YWN0LmlzUHJlbWl1bSxcbiAgICB9KVxuICAgIC5mcm9tKHNjaGVtYS5zdXBwb3J0Q29udGFjdClcbiAgICAud2hlcmUoYW5kKFxuICAgICAgaW5BcnJheShzY2hlbWEuc3VwcG9ydENvbnRhY3Qub3JnSWQsIFsuLi5vcmdJZHNdKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgKSkpO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhpcyB1c2VyIGlzIGEgbGl2ZSBkZXNpZ25hdGVkIGNvbnRhY3QgaW4gYW55IG9yZyBvZiB0aGUgc2NvcGUuXG4gKlxuICogVHJhbnNmZXIgdmFsaWRhdGlvbiBtdXN0IHBhc3MgdGhlIGNhc2UncyBPV04gb3JnLCBub3QgdGhlIHN1YnRyZWU6IGFjY2VwdGluZyBhXG4gKiBzaWJsaW5nIHRlYW0ncyBjb250YWN0IGFzIGEgdmFsaWQgdHJhbnNmZXIgdGFyZ2V0IGlzIGV4YWN0bHkgdGhlIGNyb3NzLXRlYW1cbiAqIGxlYWsgdGhlIG93bi1vcmcgb3duZXJzaGlwIHJ1bGUgZXhpc3RzIHRvIHByZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc1N1cHBvcnRDb250YWN0KG9yZ0lkczogcmVhZG9ubHkgc3RyaW5nW10sIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChvcmdJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3QoeyBpZDogc2NoZW1hLnN1cHBvcnRDb250YWN0LmlkIH0pXG4gICAgLmZyb20oc2NoZW1hLnN1cHBvcnRDb250YWN0KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBpbkFycmF5KHNjaGVtYS5zdXBwb3J0Q29udGFjdC5vcmdJZCwgWy4uLm9yZ0lkc10pLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDb250YWN0LnVzZXJJZCwgdXNlcklkKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgKSlcbiAgICAubGltaXQoMSkpO1xuICByZXR1cm4gcm93cy5sZW5ndGggPiAwO1xufVxuXG4vKipcbiAqIERlc2lnbmF0ZSBhIHN1cHBvcnQgY29udGFjdC5cbiAqXG4gKiBUaGUgQ0FQIGlzIG5vdCBlbmZvcmNlZCBoZXJlIOKAlCB0aGUgY2FsbGVyIGhvbGRzIGl0LCBiZWNhdXNlIHRoZSBsaW1pdCBsaXZlcyBvblxuICogdGhlIE1vbmdvIG9yZyBkb2MgYW5kIHRoaXMgbW9kdWxlIG9ubHkgcmVhY2hlcyBQb3N0Z3Jlcy4gTWlycm9ycyBob3cgc2VhdHMgYXJlXG4gKiBjYXBwZWQgaW4gcGxhdGZvcm0gcmF0aGVyIHRoYW4gaW4gdGhlIHJvdyB3cml0ZXIuXG4gKlxuICogYHN1cHBvcnRfY29udGFjdF9vcmdfdXNlcl91cWAgaXMgcGFydGlhbCBvbiBgaXNfYWN0aXZlID0gdHJ1ZWAsIHNvXG4gKiByZS1kZXNpZ25hdGluZyBzb21lb25lIHByZXZpb3VzbHkgcmV2b2tlZCBpbnNlcnRzIGEgZnJlc2ggcm93IHJhdGhlciB0aGFuXG4gKiBjb2xsaWRpbmcg4oCUIHRoZSByZXZva2VkIHJvdyBzdGF5cyBhcyB0aGUgcmVjb3JkIHRoYXQgdGhleSBvbmNlIGhlbGQgaXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXNpZ25hdGVTdXBwb3J0Q29udGFjdChcbiAgb3JnSWQ6IHN0cmluZyxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGRlc2lnbmF0ZWRCeTogc3RyaW5nLFxuICBpc1ByZW1pdW0gPSBmYWxzZSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCB3aXRoVGVuYW50VHgoYXN5bmMgKHR4KSA9PiB7XG4gICAgYXdhaXQgdHguaW5zZXJ0KHNjaGVtYS5zdXBwb3J0Q29udGFjdClcbiAgICAgIC52YWx1ZXMoeyBvcmdJZCwgdXNlcklkLCBkZXNpZ25hdGVkQnksIGlzUHJlbWl1bSB9KVxuICAgICAgLm9uQ29uZmxpY3REb05vdGhpbmcoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogTGl2ZSBjb250YWN0cyBpbiBhIHNjb3BlIHRoYXQgYXJlIFVQR1JBREVEIHRvIHByZW1pdW0g4oCUIHRoZSBjYXAncyBjb3VudGVycGFydC5cbiAqXG4gKiBDb3VudGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgYmFzZWxpbmUgdG90YWwgYmVjYXVzZSB0aGUgdHdvIGNhcHMgYXJlIHNlcGFyYXRlOlxuICogYW4gYWNjb3VudCBob2xkcyBOIGNvbnRhY3RzIChgc3VwcG9ydENvbnRhY3RzYCkgYW5kIHVwZ3JhZGVzIE0gb2YgdGhlbVxuICogKGBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzYCksIE0g4omkIE4uIFBvb2xlZCBvdmVyIHdoYXRldmVyIHNjb3BlIHRoZSBjYWxsZXJcbiAqIHBhc3NlcywgZXhhY3RseSBsaWtlIHtAbGluayBjb3VudEFjdGl2ZVN1cHBvcnRDb250YWN0c30g4oCUIHN1YnRyZWUgZm9yIHRoZSBjYXAsXG4gKiBvbmUgb3JnIGZvciBhbiBvd25lcnNoaXAgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3VudFByZW1pdW1TdXBwb3J0Q29udGFjdHMob3JnSWRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGlmIChvcmdJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4XG4gICAgLnNlbGVjdCh7IG46IHNxbDxudW1iZXI+YGNvdW50KCopOjppbnRgIH0pXG4gICAgLmZyb20oc2NoZW1hLnN1cHBvcnRDb250YWN0KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBpbkFycmF5KHNjaGVtYS5zdXBwb3J0Q29udGFjdC5vcmdJZCwgWy4uLm9yZ0lkc10pLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDb250YWN0LmlzQWN0aXZlLCB0cnVlKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pc1ByZW1pdW0sIHRydWUpLFxuICAgICkpKTtcbiAgcmV0dXJuIHJvd3NbMF0/Lm4gPz8gMDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoaXMgdXNlciBpcyBhIGxpdmUgUFJFTUlVTSBjb250YWN0IGluIHRoZSBzY29wZS5cbiAqXG4gKiBUaGUgY2FzZS1vcGVuIHBhdGggcmVhZHMgdGhpcyB0byBkZWNpZGUgd2hpY2ggbGV2ZWwgdG8gZnJlZXplIG9udG8gYSBuZXcgY2FzZTpcbiAqIHByZW1pdW0gd2hlbiB0aGUgb3BlbmVyIGlzIHVwZ3JhZGVkLCB0aGUgYWNjb3VudCdzIGJhc2VsaW5lIG90aGVyd2lzZS4gUGFzcyB0aGVcbiAqIGNhc2UncyBPV04gb3JnIOKAlCB0aGUgdXBncmFkZSBmb2xsb3dzIHRoZSBwZXJzb24gaW4gdGhlIG9yZyB0aGF0IG5vbWluYXRlZFxuICogdGhlbSwgYW5kIGEgc2libGluZyB0ZWFtJ3MgdXBncmFkZSBpcyBub3QgdGhpcyBvcmcncyB0byBzcGVuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzUHJlbWl1bVN1cHBvcnRDb250YWN0KG9yZ0lkczogcmVhZG9ubHkgc3RyaW5nW10sIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChvcmdJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC5zZWxlY3QoeyBpZDogc2NoZW1hLnN1cHBvcnRDb250YWN0LmlkIH0pXG4gICAgLmZyb20oc2NoZW1hLnN1cHBvcnRDb250YWN0KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBpbkFycmF5KHNjaGVtYS5zdXBwb3J0Q29udGFjdC5vcmdJZCwgWy4uLm9yZ0lkc10pLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDb250YWN0LnVzZXJJZCwgdXNlcklkKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgICBlcShzY2hlbWEuc3VwcG9ydENvbnRhY3QuaXNQcmVtaXVtLCB0cnVlKSxcbiAgICApKVxuICAgIC5saW1pdCgxKSk7XG4gIHJldHVybiByb3dzLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogVXBncmFkZSBvciBkb3duZ3JhZGUgYSBMSVZFIGNvbnRhY3QuXG4gKlxuICogR3VhcmRlZCBvbiBgaXNfYWN0aXZlYCBzbyBhIHJldm9rZWQgcm93IGNhbm5vdCBiZSB1cGdyYWRlZCBiYWNrIGludG9cbiAqIHJlbGV2YW5jZSwgYW5kIHJldHVybnMgd2hldGhlciBhIHJvdyBhY3R1YWxseSBtb3ZlZCDigJQgdGhlIGNhbGxlciBjb3VudHNcbiAqIGFnYWluc3QgdGhlIHByZW1pdW0gY2FwIGJlZm9yZSBjYWxsaW5nLCBhbmQgYSBzaWxlbnQgbm8tb3Agd291bGQgbGV0IHRoYXRcbiAqIGNvdW50IGRyaWZ0IGZyb20gcmVhbGl0eS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgZG9lcyBOT1QgdG91Y2ggdGhlIGNhc2Ugcm93czogYHN1cHBvcnRfY2FzZS5sZXZlbGAgaXMgZnJvemVuIGF0XG4gKiBvcGVuLCBzbyBkb3duZ3JhZGluZyBzb21lYm9keSBuZXZlciB3ZWFrZW5zIGEgcHJvbWlzZSBhbHJlYWR5IG1hZGUgb24gYSBjYXNlXG4gKiB0aGV5IHJhaXNlZCB3aGlsZSB1cGdyYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFN1cHBvcnRDb250YWN0UHJlbWl1bShcbiAgb3JnSWQ6IHN0cmluZyxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGlzUHJlbWl1bTogYm9vbGVhbixcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHhcbiAgICAudXBkYXRlKHNjaGVtYS5zdXBwb3J0Q29udGFjdClcbiAgICAuc2V0KHsgaXNQcmVtaXVtIH0pXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC5vcmdJZCwgb3JnSWQpLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDb250YWN0LnVzZXJJZCwgdXNlcklkKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pZCB9KSk7XG4gIHJldHVybiByb3dzLmxlbmd0aCA+IDA7XG59XG5cbi8qKlxuICogUmV2b2tlIGEgZGVzaWduYXRpb24sIGZyZWVpbmcgdGhlIHNsb3QuXG4gKlxuICogUmV0dXJucyB0aGUgdXNlcidzIHN0aWxsLW9wZW4gY2FzZXMgc28gdGhlIGNhbGxlciBjYW4gcmVhc3NpZ24gdGhlbSBpbnN0ZWFkIG9mXG4gKiBvcnBoYW5pbmcg4oCUIHNjb3BlIEM0J3MgYW5zd2VyLiBSZXZva2luZyBpcyBkZWxpYmVyYXRlbHkgbm90IGJsb2NrZWQgb24gdGhlbTpcbiAqIHJlZnVzaW5nIHRvIHJlbW92ZSBhIGRlcGFydGVkIGVtcGxveWVlIGJlY2F1c2UgdGhleSBzdGlsbCBvd24gY2FzZXMgd291bGQgYmVcbiAqIHdvcnNlIHRoYW4gaGFuZGluZyB0aGUgY2FzZXMgb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXZva2VTdXBwb3J0Q29udGFjdChcbiAgb3JnSWQ6IHN0cmluZyxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHJldm9rZWRCeTogc3RyaW5nLFxuKTogUHJvbWlzZTx7IHJldm9rZWQ6IGJvb2xlYW47IG9wZW5DYXNlczogU3VwcG9ydENhc2VbXSB9PiB7XG4gIGNvbnN0IG9wZW5DYXNlcyA9IGF3YWl0IG9wZW5DYXNlc0ZvckNvbnRhY3Qob3JnSWQsIHVzZXJJZCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eFxuICAgIC51cGRhdGUoc2NoZW1hLnN1cHBvcnRDb250YWN0KVxuICAgIC5zZXQoeyBpc0FjdGl2ZTogZmFsc2UsIHJldm9rZWRBdDogbmV3IERhdGUoKSwgcmV2b2tlZEJ5IH0pXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC5vcmdJZCwgb3JnSWQpLFxuICAgICAgZXEoc2NoZW1hLnN1cHBvcnRDb250YWN0LnVzZXJJZCwgdXNlcklkKSxcbiAgICAgIGVxKHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pc0FjdGl2ZSwgdHJ1ZSksXG4gICAgKSlcbiAgICAucmV0dXJuaW5nKHsgaWQ6IHNjaGVtYS5zdXBwb3J0Q29udGFjdC5pZCB9KSk7XG4gIHJldHVybiB7IHJldm9rZWQ6IHJvd3MubGVuZ3RoID4gMCwgb3BlbkNhc2VzIH07XG59XG4iXX0=
@@ -132,4 +132,4 @@ export async function orgImageDigestsInUse(orgId) {
132
132
  `));
133
133
  return rows.map((r) => r.d);
134
134
  }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1yZWZlcmVuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS92ZXJzaW9uLXJlZmVyZW5jZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxHQUFHLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQXdCdEQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxJQUEwRDtJQUNuRyxPQUFPLEdBQUcsQ0FBQTtPQUNMLElBQUksQ0FBQyxNQUFNOytFQUM2RCxJQUFJLENBQUMsTUFBTTs7OENBRTVDLElBQUksQ0FBQyxNQUFNOytFQUNzQixJQUFJLENBQUMsTUFBTTtVQUNoRixJQUFJLENBQUMsTUFBTTs4RUFDeUQsSUFBSSxDQUFDLElBQUksMkJBQTJCLElBQUksQ0FBQyxPQUFPOzZFQUNqRCxJQUFJLENBQUMsS0FBSzs7MENBRTdDLElBQUksQ0FBQyxJQUFJLDZCQUE2QixJQUFJLENBQUMsT0FBTzttREFDekMsSUFBSSxDQUFDLEtBQUsscUNBQXFDLElBQUksQ0FBQyxLQUFLO0lBQ3hHLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUFDLE1BQThCO0lBQ3hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLE1BQU07UUFDMUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQSx1QkFB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QUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsS0FBYTtJQUN0RCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBZ0IsRUFBRSxFQUFFLEdBQUcsQ0FBQTs7b0VBRVIsR0FBRzs7MkVBRUksR0FBRyw4QkFBOEIsR0FBRzs7K0hBRWdCLEdBQUc7MEhBQ1IsR0FBRzs7d0hBRUwsR0FBRzs7R0FFeEgsQ0FBQyxDQUFDLENBQUM7SUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogV2hpY2ggcGlwZWxpbmVzIHN0aWxsIFJFRkVSRU5DRSBhIHBsdWdpbiB2ZXJzaW9uIG9yIGltYWdlIOKAlCB0aGUgb25lIHJ1bGUgZXZlcnlcbiAqIHJlbW92YWwgcGF0aCBhc2tzIGJlZm9yZSBpdCBkZWxldGVzIGFueXRoaW5nOiBhbiBvcmcgcGx1Z2luIGRlbGV0ZSAoZm9yY2VkIG9yXG4gKiBub3QpLCBhIGJ1bGsgZGVsZXRlLCBhIHRvbWJzdG9uZSBwdXJnZSAobWFudWFsIG9yIHRoZSByZXRlbnRpb24gc3dlZXApLCB0aGVcbiAqIGltYWdlIHJlZ2lzdHJ5J3MgYWdlIEdDLCB0aGUgbGlzdGluZyBpbWFnZSBHQy5cbiAqXG4gKiBUSEUgUlVMRTogYSB2ZXJzaW9uIChvciBpdHMgaW1hZ2UpIHRoYXQgYW55IHBpcGVsaW5lIHJlZmVyZW5jZXMgY2Fubm90IGJlXG4gKiBkZWxldGVkIHVudGlsIG5vIHBpcGVsaW5lIGRvZXMg4oCUIHdoYXRldmVyIGl0cyB2dWxuZXJhYmlsaXR5IHN0YXRlLiBBXG4gKiB2dWxuZXJhYmxlIGltYWdlIGlzIHRoZSBXT1JTVCB0aGluZyB0byBkZWxldGUgb3V0IGZyb20gdW5kZXIgYSBwaXBlbGluZTogdGhlXG4gKiBuZXh0IHJ1biBmYWlscyB0byBwdWxsLCBhbmQgdGhlIG93bmVycyBsZWFybiBhYm91dCB0aGUgQ1ZFIGZyb20gYW4gb3V0YWdlLlxuICogVnVsbmVyYWJpbGl0eSBjb25zZXF1ZW5jZXMgYXJlIGdyYWRlZCB3YXJuaW5ncyBhbmQgbm90aWZpY2F0aW9ucywgbmV2ZXIgcmVtb3ZhbC5cbiAqXG4gKiBBIHJlZmVyZW5jZSBpcyBhbnkgb2Y6XG4gKiAgLSBgZGVjbGFyZWRgIOKAlCBhIExJVkUgcGlwZWxpbmUncyBjb25maWcgcmVzb2x2ZXMgdG8gaXQgKGBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbmApO1xuICogIC0gYGRlcGxveWVkYCDigJQgYSBwaXBlbGluZSdzIGxhc3QgZGVwbG95IHJlY29yZGVkIGl0IChgcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHNgKSxcbiAqICAgIElOQ0xVRElORyBhIHNvZnQtZGVsZXRlZCBwaXBlbGluZTogaXRzIENvZGVQaXBlbGluZSBzdGlsbCBydW5zIHRoZSBpbWFnZTtcbiAqICAtIGBleHBvc3VyZWAg4oCUIGFuIG9wZW4gREVQTE9ZRUQgZXhwb3N1cmUgc3RpbGwgbmFtZXMgaXQgKHRoZSBzYW1lIFwic3RpbGwgcnVuc1xuICogICAgaXRcIiBmYWN0LCBrZXB0IHdoZW4gYSBtYW5pZmVzdCBpcyBnb25lKS5cbiAqXG4gKiBNYXRjaGVkIGJ5IGltYWdlIGRpZ2VzdCB3aGVuIHRoZSB2ZXJzaW9uIGhhcyBvbmUgKGEgdGVhbSBydW5uaW5nIGl0cyBwYXJlbnQnc1xuICogcGx1Z2luLCBvciBhbm90aGVyIG9yZydzIGluc3RhbGwsIHBpbnMgdGhlIHNhbWUgZGlnZXN0KSwgZWxzZSBieSBuYW1lICtcbiAqIHZlcnNpb24gd2l0aGluIHRoZSBvd25lciBvcmcgYW5kIGl0cyB0ZWFtcy5cbiAqL1xuXG5pbXBvcnQgeyBzcWwsIHR5cGUgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgZXhlY3V0ZVJvd3MgfSBmcm9tICcuLi9kYXRhYmFzZS9wZy1yZXN1bHQuanMnO1xuaW1wb3J0IHsgd2l0aFRlbmFudFR4IH0gZnJvbSAnLi4vZGF0YWJhc2UvdGVuYW5jeS5qcyc7XG5cbi8qKiBBIHZlcnNpb24gLyBpbWFnZSB3aG9zZSByZWZlcmVuY2VzIGFyZSB3YW50ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZWZlcmVuY2VUYXJnZXQge1xuICBwbHVnaW5OYW1lOiBzdHJpbmc7XG4gIHBsdWdpblZlcnNpb246IHN0cmluZztcbiAgaW1hZ2VEaWdlc3Q/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIG93bmluZyBvcmcgb2YgYW4gb3JnIHBsdWdpbiAoaXRzIHRlYW1zIGNvdW50IHRvbyk7IG9taXR0ZWQgZm9yIGEgbGlzdGluZyB2ZXJzaW9uLiAqL1xuICBvd25lck9yZ0lkPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBsaXN0aW5nJ3MgcHVibGlzaGVyIGhhbmRsZSAoYSBsaXN0aW5nIHZlcnNpb24pOyBudWxsL29taXR0ZWQgZm9yIGFuIG9yZyBwbHVnaW4uICovXG4gIHB1Ymxpc2hlcj86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBPbmUgcGlwZWxpbmUgcmVmZXJlbmNpbmcgYSB2ZXJzaW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uUmVmZXJlbmNlIHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHNvdXJjZTogJ2RlY2xhcmVkJyB8ICdkZXBsb3llZCcgfCAnZXhwb3N1cmUnO1xuICAvKiogVGhlIHBpcGVsaW5lIGlzIHNvZnQtZGVsZXRlZCAoc3RpbGwgZGVwbG95ZWQ6IGl0cyBtYW5pZmVzdCBvciBleHBvc3VyZSByZW1haW5zKS4gKi9cbiAgcGlwZWxpbmVEZWxldGVkOiBib29sZWFuO1xuICBzdGVwczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIFNRTCBwcmVkaWNhdGUgXCJzb21lIHBpcGVsaW5lIHJlZmVyZW5jZXMgdGhpcyByb3cncyBpbWFnZSAvIHZlcnNpb25cIiwgb3ZlclxuICogYSBgcGx1Z2luc2Atc2hhcGVkIHJvdydzIGNvbHVtbnMg4oCUIHRoZSBwdXJnZSBndWFyZCdzIGZvcm0gb2ZcbiAqIHtAbGluayBmaW5kVmVyc2lvblJlZmVyZW5jZXN9IChzYW1lIHRocmVlIHNvdXJjZXMsIHNhbWUgbWF0Y2hpbmcpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyc2lvblJlZmVyZW5jZWRQcmVkaWNhdGUoY29sczogeyBkaWdlc3Q6IFNRTDsgbmFtZTogU1FMOyB2ZXJzaW9uOiBTUUw7IG9yZ0lkOiBTUUwgfSk6IFNRTCB7XG4gIHJldHVybiBzcWxgKFxuICAgICgke2NvbHMuZGlnZXN0fSBJUyBOT1QgTlVMTCBBTkQgKFxuICAgICAgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG0gV0hFUkUgbS5pbWFnZV9kaWdlc3QgPSAke2NvbHMuZGlnZXN0fSlcbiAgICAgIE9SIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbiByIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWQgQU5EIHAuZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICAgICAgICAgICAgICBXSEVSRSByLnJlc29sdmVkX2RpZ2VzdCA9ICR7Y29scy5kaWdlc3R9KVxuICAgICAgT1IgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIGUgV0hFUkUgZS5pbWFnZV9kaWdlc3QgPSAke2NvbHMuZGlnZXN0fSBBTkQgZS5zb3VyY2UgPSAnZGVwbG95ZWQnIEFORCBlLmZpeGVkX2F0IElTIE5VTEwpKSlcbiAgICBPUiAoJHtjb2xzLmRpZ2VzdH0gSVMgTlVMTCBBTkQgKFxuICAgICAgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG0gV0hFUkUgbS5wbHVnaW5fbmFtZSA9ICR7Y29scy5uYW1lfSBBTkQgbS5wbHVnaW5fdmVyc2lvbiA9ICR7Y29scy52ZXJzaW9ufVxuICAgICAgICAgICAgICAgIEFORCBtLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgbG93ZXIobS5vcmdfaWQpID0gbG93ZXIoJHtjb2xzLm9yZ0lkfSkpXG4gICAgICBPUiBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gciBKT0lOIHBpcGVsaW5lcyBwIE9OIHAuaWQ6OnRleHQgPSByLnBpcGVsaW5lX2lkIEFORCBwLmRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgICAgICAgICAgICAgICAgV0hFUkUgci5wbHVnaW5fbmFtZSA9ICR7Y29scy5uYW1lfSBBTkQgci5yZXNvbHZlZF92ZXJzaW9uID0gJHtjb2xzLnZlcnNpb259IEFORCByLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTFxuICAgICAgICAgICAgICAgICAgICBBTkQgKGxvd2VyKHIub3JnX2lkKSA9IGxvd2VyKCR7Y29scy5vcmdJZH0pIE9SIGxvd2VyKHIucm9vdF9vcmdfaWQpID0gbG93ZXIoJHtjb2xzLm9yZ0lkfSkpKSkpXG4gIClgO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHBpcGVsaW5lIHJlZmVyZW5jaW5nIGB0YXJnZXRgIChzZWUgdGhlIG1vZHVsZSBkb2MpLCBhY3Jvc3Mgb3JncyDigJQgc28gaXRcbiAqIG11c3QgcnVuIHdpdGggYSBzY29wZSB0aGF0IGNhbiByZWFkIGV2ZXJ5IG9yZydzIHJvd3MgKGVsZXZhdGVkKS4gVGhlIHJlc3VsdFxuICogbmFtZXMgb3RoZXIgb3JncycgcGlwZWxpbmVzOyBjYWxsZXJzIHNob3cgdGhlIE9XTkVSIG9ubHkgY291bnRzIGFuZCBpdHMgb3duXG4gKiBvcmcncyBwaXBlbGluZXMsIGFuZCBub3RpZnkgZWFjaCByZWZlcmVuY2luZyBvcmcgYWJvdXQgaXRzIG93bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRWZXJzaW9uUmVmZXJlbmNlcyh0YXJnZXQ6IFZlcnNpb25SZWZlcmVuY2VUYXJnZXQpOiBQcm9taXNlPFZlcnNpb25SZWZlcmVuY2VbXT4ge1xuICBjb25zdCBkaWdlc3QgPSB0YXJnZXQuaW1hZ2VEaWdlc3QgPz8gbnVsbDtcbiAgY29uc3Qgb3duZXIgPSB0YXJnZXQub3duZXJPcmdJZD8udG9Mb3dlckNhc2UoKSA/PyBudWxsO1xuICBjb25zdCBkZWNsYXJlZE1hdGNoID0gZGlnZXN0XG4gICAgPyBzcWxgci5yZXNvbHZlZF9kaWdlc3QgPSAke2RpZ2VzdH1gXG4gICAgOiBzcWxgci5wbHVnaW5fbmFtZSA9ICR7dGFyZ2V0LnBsdWdpbk5hbWV9IEFORCByLnJlc29sdmVkX3ZlcnNpb24gPSAke3RhcmdldC5wbHVnaW5WZXJzaW9ufVxuICAgICAgICAgIEFORCAke3RhcmdldC5wdWJsaXNoZXIgPyBzcWxgci5wbHVnaW5fcHVibGlzaGVyID0gJHt0YXJnZXQucHVibGlzaGVyfWAgOiBzcWxgci5wbHVnaW5fcHVibGlzaGVyIElTIE5VTEwgQU5EIChsb3dlcihyLm9yZ19pZCkgPSAke293bmVyfSBPUiBsb3dlcihyLnJvb3Rfb3JnX2lkKSA9ICR7b3duZXJ9KWB9YDtcbiAgY29uc3QgZGVwbG95ZWRNYXRjaCA9IGRpZ2VzdFxuICAgID8gc3FsYG0uaW1hZ2VfZGlnZXN0ID0gJHtkaWdlc3R9YFxuICAgIDogc3FsYG0ucGx1Z2luX25hbWUgPSAke3RhcmdldC5wbHVnaW5OYW1lfSBBTkQgbS5wbHVnaW5fdmVyc2lvbiA9ICR7dGFyZ2V0LnBsdWdpblZlcnNpb259XG4gICAgICAgICAgQU5EICR7dGFyZ2V0LnB1Ymxpc2hlciA/IHNxbGBtLnBsdWdpbl9wdWJsaXNoZXIgPSAke3RhcmdldC5wdWJsaXNoZXJ9YCA6IHNxbGBtLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgbG93ZXIobS5vcmdfaWQpID0gJHtvd25lcn1gfWA7XG4gIGNvbnN0IGV4cG9zdXJlTWF0Y2ggPSBkaWdlc3RcbiAgICA/IHNxbGBlLmltYWdlX2RpZ2VzdCA9ICR7ZGlnZXN0fWBcbiAgICA6IHNxbGBlLnBsdWdpbl9uYW1lID0gJHt0YXJnZXQucGx1Z2luTmFtZX0gQU5EIGUucGx1Z2luX3ZlcnNpb24gPSAke3RhcmdldC5wbHVnaW5WZXJzaW9ufVxuICAgICAgICAgIEFORCAke3RhcmdldC5wdWJsaXNoZXIgPyBzcWxgZS5wbHVnaW5fcHVibGlzaGVyID0gJHt0YXJnZXQucHVibGlzaGVyfWAgOiBzcWxgZS5wbHVnaW5fcHVibGlzaGVyIElTIE5VTEwgQU5EIGxvd2VyKGUub3JnX2lkKSA9ICR7b3duZXJ9YH1gO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gZXhlY3V0ZVJvd3M8eyBwaXBlbGluZV9pZDogc3RyaW5nOyBvcmdfaWQ6IHN0cmluZzsgc291cmNlOiBWZXJzaW9uUmVmZXJlbmNlWydzb3VyY2UnXTsgcGlwZWxpbmVfbmFtZTogc3RyaW5nIHwgbnVsbDsgZGVsZXRlZDogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIHwgbnVsbCB9Pih0eCwgc3FsYFxuICAgIFNFTEVDVCB4LnBpcGVsaW5lX2lkLCB4Lm9yZ19pZCwgeC5zb3VyY2UsIHAucGlwZWxpbmVfbmFtZSwgKHAuaWQgSVMgTlVMTCBPUiBwLmRlbGV0ZWRfYXQgSVMgTk9UIE5VTEwpIEFTIGRlbGV0ZWQsXG4gICAgICAgICAgIGFycmF5X2FnZyhESVNUSU5DVCB4LnN0ZXApIEZJTFRFUiAoV0hFUkUgeC5zdGVwIElTIE5PVCBOVUxMKSBBUyBzdGVwc1xuICAgICAgRlJPTSAoXG4gICAgICAgIFNFTEVDVCByLnBpcGVsaW5lX2lkLCByLm9yZ19pZCwgJ2RlY2xhcmVkJyBBUyBzb3VyY2UsXG4gICAgICAgICAgICAgICBDQVNFIFdIRU4gci5zdGFnZV9uYW1lID0gJ3N5bnRoJyBBTkQgci5zdGVwX25hbWUgPSAnc3ludGgnIFRIRU4gJ3N5bnRoJyBFTFNFIHIuc3RhZ2VfbmFtZSB8fCAnLycgfHwgci5zdGVwX25hbWUgRU5EIEFTIHN0ZXBcbiAgICAgICAgICBGUk9NIHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uIHJcbiAgICAgICAgICBKT0lOIHBpcGVsaW5lcyBscCBPTiBscC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWQgQU5EIGxwLmRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgICAgICAgV0hFUkUgJHtkZWNsYXJlZE1hdGNofVxuICAgICAgICBVTklPTiBBTExcbiAgICAgICAgU0VMRUNUIG0ucGlwZWxpbmVfaWQ6OnRleHQsIG0ub3JnX2lkLCAnZGVwbG95ZWQnLCBtLnN0YWdlX25hbWUgfHwgJy8nIHx8IG0uYWN0aW9uX25hbWVcbiAgICAgICAgICBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG0gV0hFUkUgJHtkZXBsb3llZE1hdGNofVxuICAgICAgICBVTklPTiBBTExcbiAgICAgICAgU0VMRUNUIGUucGlwZWxpbmVfaWQsIGUub3JnX2lkLCAnZXhwb3N1cmUnLCBOVUxMXG4gICAgICAgICAgRlJPTSBwbHVnaW5fdnVsbl9leHBvc3VyZSBlIFdIRVJFICR7ZXhwb3N1cmVNYXRjaH0gQU5EIGUuc291cmNlID0gJ2RlcGxveWVkJyBBTkQgZS5maXhlZF9hdCBJUyBOVUxMXG4gICAgICApIHhcbiAgICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0geC5waXBlbGluZV9pZFxuICAgICBHUk9VUCBCWSB4LnBpcGVsaW5lX2lkLCB4Lm9yZ19pZCwgeC5zb3VyY2UsIHAucGlwZWxpbmVfbmFtZSwgcC5pZCwgcC5kZWxldGVkX2F0XG4gICAgIE9SREVSIEJZIHgub3JnX2lkLCB4LnBpcGVsaW5lX2lkLCB4LnNvdXJjZVxuICBgKSk7XG4gIHJldHVybiByb3dzLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiByLnBpcGVsaW5lX2lkLFxuICAgIHBpcGVsaW5lTmFtZTogci5waXBlbGluZV9uYW1lID8/IG51bGwsXG4gICAgb3JnSWQ6IHIub3JnX2lkLFxuICAgIHNvdXJjZTogci5zb3VyY2UsXG4gICAgcGlwZWxpbmVEZWxldGVkOiByLmRlbGV0ZWQgPT09IHRydWUsXG4gICAgc3RlcHM6IHIuc3RlcHMgPz8gW10sXG4gIH0pKTtcbn1cblxuLyoqIERpc3RpbmN0IHBpcGVsaW5lcyBhbW9uZyBgcmVmc2AgKGEgcGlwZWxpbmUgYm90aCBkZWNsYXJlZCBhbmQgZGVwbG95ZWQgY291bnRzIG9uY2UpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3RpbmN0UGlwZWxpbmVzKHJlZnM6IHJlYWRvbmx5IFZlcnNpb25SZWZlcmVuY2VbXSk6IEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IG9yZ0lkOiBzdHJpbmc7IHNvdXJjZXM6IHN0cmluZ1tdOyBwaXBlbGluZURlbGV0ZWQ6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9PiB7XG4gIGNvbnN0IGJ5SWQgPSBuZXcgTWFwPHN0cmluZywgeyBwaXBlbGluZUlkOiBzdHJpbmc7IHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDsgb3JnSWQ6IHN0cmluZzsgc291cmNlczogc3RyaW5nW107IHBpcGVsaW5lRGVsZXRlZDogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIH0+KCk7XG4gIGZvciAoY29uc3QgciBvZiByZWZzKSB7XG4gICAgY29uc3QgZSA9IGJ5SWQuZ2V0KHIucGlwZWxpbmVJZCkgPz8geyBwaXBlbGluZUlkOiByLnBpcGVsaW5lSWQsIHBpcGVsaW5lTmFtZTogci5waXBlbGluZU5hbWUsIG9yZ0lkOiByLm9yZ0lkLCBzb3VyY2VzOiBbXSwgcGlwZWxpbmVEZWxldGVkOiByLnBpcGVsaW5lRGVsZXRlZCwgc3RlcHM6IFtdIH07XG4gICAgaWYgKCFlLnNvdXJjZXMuaW5jbHVkZXMoci5zb3VyY2UpKSBlLnNvdXJjZXMucHVzaChyLnNvdXJjZSk7XG4gICAgZS5zdGVwcyA9IFsuLi5uZXcgU2V0KFsuLi5lLnN0ZXBzLCAuLi5yLnN0ZXBzXSldO1xuICAgIGJ5SWQuc2V0KHIucGlwZWxpbmVJZCwgZSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5ieUlkLnZhbHVlcygpXTtcbn1cblxuLyoqXG4gKiBUaGUgaW1hZ2UgZGlnZXN0cyBhbiBvcmcncyBuYW1lc3BhY2Ugc3RpbGwgbmVlZHM6IGV2ZXJ5IGBwbHVnaW5zYCByb3cnc1xuICogZGlnZXN0IChhY3RpdmUsIGluYWN0aXZlIG9yIHNvZnQtZGVsZXRlZCDigJQgYSB0b21ic3RvbmUgaXMgcmVzdG9yYWJsZSB1bnRpbFxuICogcHVyZ2VkLCBhbmQgdGhlIHB1cmdlIGl0c2VsZiBpcyBndWFyZGVkKSBwbHVzIGV2ZXJ5IGRpZ2VzdCBhIHBpcGVsaW5lIG9mIHRoZVxuICogb3JnIG9yIGl0cyB0ZWFtcyBkZWNsYXJlcywgcnVucyBvciBoYXMgYW4gb3BlbiBkZXBsb3llZCBleHBvc3VyZSBvbi4gV2hhdCB0aGVcbiAqIGltYWdlIHJlZ2lzdHJ5J3MgYWdlIEdDIGNvbnN1bHRzIGJlZm9yZSBkZWxldGluZyBhbnl0aGluZyBpbiBgb3JnLTxpZD4vKmAuXG4gKiBFbGV2YXRlZCByZWFkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3JnSW1hZ2VEaWdlc3RzSW5Vc2Uob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgb3JnID0gb3JnSWQudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IGV4ZWN1dGVSb3dzPHsgZDogc3RyaW5nIH0+KHR4LCBzcWxgXG4gICAgU0VMRUNUIERJU1RJTkNUIGQgRlJPTSAoXG4gICAgICBTRUxFQ1QgaW1hZ2VfZGlnZXN0IEFTIGQgRlJPTSBwbHVnaW5zIFdIRVJFIGxvd2VyKG9yZ19pZCkgPSAke29yZ30gQU5EIGltYWdlX2RpZ2VzdCBJUyBOT1QgTlVMTFxuICAgICAgVU5JT04gU0VMRUNUIHIucmVzb2x2ZWRfZGlnZXN0IEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gclxuICAgICAgICAgICAgICBXSEVSRSByLnJlc29sdmVkX2RpZ2VzdCBJUyBOT1QgTlVMTCBBTkQgKGxvd2VyKHIub3JnX2lkKSA9ICR7b3JnfSBPUiBsb3dlcihyLnJvb3Rfb3JnX2lkKSA9ICR7b3JnfSlcbiAgICAgIFVOSU9OIFNFTEVDVCBtLmltYWdlX2RpZ2VzdCBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG1cbiAgICAgICAgICAgICAgV0hFUkUgbS5pbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwgQU5EIG0uaW1hZ2VfZGlnZXN0IElOIChTRUxFQ1QgaW1hZ2VfZGlnZXN0IEZST00gcGx1Z2lucyBXSEVSRSBsb3dlcihvcmdfaWQpID0gJHtvcmd9IEFORCBpbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwpXG4gICAgICBVTklPTiBTRUxFQ1QgbS5pbWFnZV9kaWdlc3QgRlJPTSBwaXBlbGluZV9zdGVwX21hbmlmZXN0cyBtIFdIRVJFIG0uaW1hZ2VfZGlnZXN0IElTIE5PVCBOVUxMIEFORCBsb3dlcihtLm9yZ19pZCkgPSAke29yZ31cbiAgICAgIFVOSU9OIFNFTEVDVCBlLmltYWdlX2RpZ2VzdCBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIGVcbiAgICAgICAgICAgICAgV0hFUkUgZS5pbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwgQU5EIGUuc291cmNlID0gJ2RlcGxveWVkJyBBTkQgZS5maXhlZF9hdCBJUyBOVUxMIEFORCBsb3dlcihlLm9yZ19pZCkgPSAke29yZ31cbiAgICApIHggV0hFUkUgZCBJUyBOT1QgTlVMTFxuICBgKSk7XG4gIHJldHVybiByb3dzLm1hcCgocikgPT4gci5kKTtcbn1cbiJdfQ==
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1yZWZlcmVuY2VzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3ZlcnNpb24tcmVmZXJlbmNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBWSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBd0J0RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLElBQTBEO0lBQ25HLE9BQU8sR0FBRyxDQUFBO09BQ0wsSUFBSSxDQUFDLE1BQU07K0VBQzZELElBQUksQ0FBQyxNQUFNOzs4Q0FFNUMsSUFBSSxDQUFDLE1BQU07K0VBQ3NCLElBQUksQ0FBQyxNQUFNO1VBQ2hGLElBQUksQ0FBQyxNQUFNOzhFQUN5RCxJQUFJLENBQUMsSUFBSSwyQkFBMkIsSUFBSSxDQUFDLE9BQU87NkVBQ2pELElBQUksQ0FBQyxLQUFLOzswQ0FFN0MsSUFBSSxDQUFDLElBQUksNkJBQTZCLElBQUksQ0FBQyxPQUFPO21EQUN6QyxJQUFJLENBQUMsS0FBSyxxQ0FBcUMsSUFBSSxDQUFDLEtBQUs7SUFDeEcsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQUMsTUFBOEI7SUFDeEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDdkQsTUFBTSxhQUFhLEdBQUcsTUFBTTtRQUMxQixDQUFDLENBQUMsR0FBRyxDQUFBLHVCQUF1QixNQUFNLEVBQUU7UUFD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QyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxLQUFhO0lBQ3RELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFnQixFQUFFLEVBQUUsR0FBRyxDQUFBOztvRUFFUixHQUFHOzsyRUFFSSxHQUFHLDhCQUE4QixHQUFHOzsrSEFFZ0IsR0FBRzswSEFDUixHQUFHOzt3SEFFTCxHQUFHOztHQUV4SCxDQUFDLENBQUMsQ0FBQztJQUNKLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXaGljaCBwaXBlbGluZXMgc3RpbGwgUkVGRVJFTkNFIGEgcGx1Z2luIHZlcnNpb24gb3IgaW1hZ2Ug4oCUIHRoZSBvbmUgcnVsZSBldmVyeVxuICogcmVtb3ZhbCBwYXRoIGFza3MgYmVmb3JlIGl0IGRlbGV0ZXMgYW55dGhpbmc6IGFuIG9yZyBwbHVnaW4gZGVsZXRlIChmb3JjZWQgb3JcbiAqIG5vdCksIGEgYnVsayBkZWxldGUsIGEgdG9tYnN0b25lIHB1cmdlIChtYW51YWwgb3IgdGhlIHJldGVudGlvbiBzd2VlcCksIHRoZVxuICogaW1hZ2UgcmVnaXN0cnkncyBhZ2UgR0MsIHRoZSBsaXN0aW5nIGltYWdlIEdDLlxuICpcbiAqIFRIRSBSVUxFOiBhIHZlcnNpb24gKG9yIGl0cyBpbWFnZSkgdGhhdCBhbnkgcGlwZWxpbmUgcmVmZXJlbmNlcyBjYW5ub3QgYmVcbiAqIGRlbGV0ZWQgdW50aWwgbm8gcGlwZWxpbmUgZG9lcyDigJQgd2hhdGV2ZXIgaXRzIHZ1bG5lcmFiaWxpdHkgc3RhdGUuIEFcbiAqIHZ1bG5lcmFibGUgaW1hZ2UgaXMgdGhlIFdPUlNUIHRoaW5nIHRvIGRlbGV0ZSBvdXQgZnJvbSB1bmRlciBhIHBpcGVsaW5lOiB0aGVcbiAqIG5leHQgcnVuIGZhaWxzIHRvIHB1bGwsIGFuZCB0aGUgb3duZXJzIGxlYXJuIGFib3V0IHRoZSBDVkUgZnJvbSBhbiBvdXRhZ2UuXG4gKiBWdWxuZXJhYmlsaXR5IGNvbnNlcXVlbmNlcyBhcmUgZ3JhZGVkIHdhcm5pbmdzIGFuZCBub3RpZmljYXRpb25zLCBuZXZlciByZW1vdmFsLlxuICpcbiAqIEEgcmVmZXJlbmNlIGlzIGFueSBvZjpcbiAqICAtIGBkZWNsYXJlZGAg4oCUIGEgTElWRSBwaXBlbGluZSdzIGNvbmZpZyByZXNvbHZlcyB0byBpdCAoYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCk7XG4gKiAgLSBgZGVwbG95ZWRgIOKAlCBhIHBpcGVsaW5lJ3MgbGFzdCBkZXBsb3kgcmVjb3JkZWQgaXQgKGBwaXBlbGluZV9zdGVwX21hbmlmZXN0c2ApLFxuICogICAgSU5DTFVESU5HIGEgc29mdC1kZWxldGVkIHBpcGVsaW5lOiBpdHMgQ29kZVBpcGVsaW5lIHN0aWxsIHJ1bnMgdGhlIGltYWdlO1xuICogIC0gYGV4cG9zdXJlYCDigJQgYW4gb3BlbiBERVBMT1lFRCBleHBvc3VyZSBzdGlsbCBuYW1lcyBpdCAodGhlIHNhbWUgXCJzdGlsbCBydW5zXG4gKiAgICBpdFwiIGZhY3QsIGtlcHQgd2hlbiBhIG1hbmlmZXN0IGlzIGdvbmUpLlxuICpcbiAqIE1hdGNoZWQgYnkgaW1hZ2UgZGlnZXN0IHdoZW4gdGhlIHZlcnNpb24gaGFzIG9uZSAoYSB0ZWFtIHJ1bm5pbmcgaXRzIHBhcmVudCdzXG4gKiBwbHVnaW4sIG9yIGFub3RoZXIgb3JnJ3MgaW5zdGFsbCwgcGlucyB0aGUgc2FtZSBkaWdlc3QpLCBlbHNlIGJ5IG5hbWUgK1xuICogdmVyc2lvbiB3aXRoaW4gdGhlIG93bmVyIG9yZyBhbmQgaXRzIHRlYW1zLlxuICovXG5cbmltcG9ydCB7IHNxbCwgdHlwZSBTUUwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBleGVjdXRlUm93cyB9IGZyb20gJy4uL2RhdGFiYXNlL3BnLXJlc3VsdC5qcyc7XG5pbXBvcnQgeyB3aXRoVGVuYW50VHggfSBmcm9tICcuLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuLyoqIEEgdmVyc2lvbiAvIGltYWdlIHdob3NlIHJlZmVyZW5jZXMgYXJlIHdhbnRlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvblJlZmVyZW5jZVRhcmdldCB7XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcGx1Z2luVmVyc2lvbjogc3RyaW5nO1xuICBpbWFnZURpZ2VzdD86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgb3duaW5nIG9yZyBvZiBhbiBvcmcgcGx1Z2luIChpdHMgdGVhbXMgY291bnQgdG9vKTsgb21pdHRlZCBmb3IgYSBsaXN0aW5nIHZlcnNpb24uICovXG4gIG93bmVyT3JnSWQ/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGxpc3RpbmcncyBwdWJsaXNoZXIgaGFuZGxlIChhIGxpc3RpbmcgdmVyc2lvbik7IG51bGwvb21pdHRlZCBmb3IgYW4gb3JnIHBsdWdpbi4gKi9cbiAgcHVibGlzaGVyPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIE9uZSBwaXBlbGluZSByZWZlcmVuY2luZyBhIHZlcnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZWZlcmVuY2Uge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgb3JnSWQ6IHN0cmluZztcbiAgc291cmNlOiAnZGVjbGFyZWQnIHwgJ2RlcGxveWVkJyB8ICdleHBvc3VyZSc7XG4gIC8qKiBUaGUgcGlwZWxpbmUgaXMgc29mdC1kZWxldGVkIChzdGlsbCBkZXBsb3llZDogaXRzIG1hbmlmZXN0IG9yIGV4cG9zdXJlIHJlbWFpbnMpLiAqL1xuICBwaXBlbGluZURlbGV0ZWQ6IGJvb2xlYW47XG4gIHN0ZXBzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgU1FMIHByZWRpY2F0ZSBcInNvbWUgcGlwZWxpbmUgcmVmZXJlbmNlcyB0aGlzIHJvdydzIGltYWdlIC8gdmVyc2lvblwiLCBvdmVyXG4gKiBhIGBwbHVnaW5zYC1zaGFwZWQgcm93J3MgY29sdW1ucyDigJQgdGhlIHB1cmdlIGd1YXJkJ3MgZm9ybSBvZlxuICoge0BsaW5rIGZpbmRWZXJzaW9uUmVmZXJlbmNlc30gKHNhbWUgdGhyZWUgc291cmNlcywgc2FtZSBtYXRjaGluZykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uUmVmZXJlbmNlZFByZWRpY2F0ZShjb2xzOiB7IGRpZ2VzdDogU1FMOyBuYW1lOiBTUUw7IHZlcnNpb246IFNRTDsgb3JnSWQ6IFNRTCB9KTogU1FMIHtcbiAgcmV0dXJuIHNxbGAoXG4gICAgKCR7Y29scy5kaWdlc3R9IElTIE5PVCBOVUxMIEFORCAoXG4gICAgICBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSBtLmltYWdlX2RpZ2VzdCA9ICR7Y29scy5kaWdlc3R9KVxuICAgICAgT1IgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uIHIgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZCBBTkQgcC5kZWxldGVkX2F0IElTIE5VTExcbiAgICAgICAgICAgICAgICAgIFdIRVJFIHIucmVzb2x2ZWRfZGlnZXN0ID0gJHtjb2xzLmRpZ2VzdH0pXG4gICAgICBPUiBFWElTVFMgKFNFTEVDVCAxIEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmUgZSBXSEVSRSBlLmltYWdlX2RpZ2VzdCA9ICR7Y29scy5kaWdlc3R9IEFORCBlLnNvdXJjZSA9ICdkZXBsb3llZCcgQU5EIGUuZml4ZWRfYXQgSVMgTlVMTCkpKVxuICAgIE9SICgke2NvbHMuZGlnZXN0fSBJUyBOVUxMIEFORCAoXG4gICAgICBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSBtLnBsdWdpbl9uYW1lID0gJHtjb2xzLm5hbWV9IEFORCBtLnBsdWdpbl92ZXJzaW9uID0gJHtjb2xzLnZlcnNpb259XG4gICAgICAgICAgICAgICAgQU5EIG0ucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMIEFORCBsb3dlcihtLm9yZ19pZCkgPSBsb3dlcigke2NvbHMub3JnSWR9KSlcbiAgICAgIE9SIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbiByIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWQgQU5EIHAuZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICAgICAgICAgICAgICBXSEVSRSByLnBsdWdpbl9uYW1lID0gJHtjb2xzLm5hbWV9IEFORCByLnJlc29sdmVkX3ZlcnNpb24gPSAke2NvbHMudmVyc2lvbn0gQU5EIHIucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMXG4gICAgICAgICAgICAgICAgICAgIEFORCAobG93ZXIoci5vcmdfaWQpID0gbG93ZXIoJHtjb2xzLm9yZ0lkfSkgT1IgbG93ZXIoci5yb290X29yZ19pZCkgPSBsb3dlcigke2NvbHMub3JnSWR9KSkpKSlcbiAgKWA7XG59XG5cbi8qKlxuICogRXZlcnkgcGlwZWxpbmUgcmVmZXJlbmNpbmcgYHRhcmdldGAgKHNlZSB0aGUgbW9kdWxlIGRvYyksIGFjcm9zcyBvcmdzIOKAlCBzbyBpdFxuICogbXVzdCBydW4gd2l0aCBhIHNjb3BlIHRoYXQgY2FuIHJlYWQgZXZlcnkgb3JnJ3Mgcm93cyAoZWxldmF0ZWQpLiBUaGUgcmVzdWx0XG4gKiBuYW1lcyBvdGhlciBvcmdzJyBwaXBlbGluZXM7IGNhbGxlcnMgc2hvdyB0aGUgT1dORVIgb25seSBjb3VudHMgYW5kIGl0cyBvd25cbiAqIG9yZydzIHBpcGVsaW5lcywgYW5kIG5vdGlmeSBlYWNoIHJlZmVyZW5jaW5nIG9yZyBhYm91dCBpdHMgb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZFZlcnNpb25SZWZlcmVuY2VzKHRhcmdldDogVmVyc2lvblJlZmVyZW5jZVRhcmdldCk6IFByb21pc2U8VmVyc2lvblJlZmVyZW5jZVtdPiB7XG4gIGNvbnN0IGRpZ2VzdCA9IHRhcmdldC5pbWFnZURpZ2VzdCA/PyBudWxsO1xuICBjb25zdCBvd25lciA9IHRhcmdldC5vd25lck9yZ0lkPy50b0xvd2VyQ2FzZSgpID8/IG51bGw7XG4gIGNvbnN0IGRlY2xhcmVkTWF0Y2ggPSBkaWdlc3RcbiAgICA/IHNxbGByLnJlc29sdmVkX2RpZ2VzdCA9ICR7ZGlnZXN0fWBcbiAgICA6IHNxbGByLnBsdWdpbl9uYW1lID0gJHt0YXJnZXQucGx1Z2luTmFtZX0gQU5EIHIucmVzb2x2ZWRfdmVyc2lvbiA9ICR7dGFyZ2V0LnBsdWdpblZlcnNpb259XG4gICAgICAgICAgQU5EICR7dGFyZ2V0LnB1Ymxpc2hlciA/IHNxbGByLnBsdWdpbl9wdWJsaXNoZXIgPSAke3RhcmdldC5wdWJsaXNoZXJ9YCA6IHNxbGByLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgKGxvd2VyKHIub3JnX2lkKSA9ICR7b3duZXJ9IE9SIGxvd2VyKHIucm9vdF9vcmdfaWQpID0gJHtvd25lcn0pYH1gO1xuICBjb25zdCBkZXBsb3llZE1hdGNoID0gZGlnZXN0XG4gICAgPyBzcWxgbS5pbWFnZV9kaWdlc3QgPSAke2RpZ2VzdH1gXG4gICAgOiBzcWxgbS5wbHVnaW5fbmFtZSA9ICR7dGFyZ2V0LnBsdWdpbk5hbWV9IEFORCBtLnBsdWdpbl92ZXJzaW9uID0gJHt0YXJnZXQucGx1Z2luVmVyc2lvbn1cbiAgICAgICAgICBBTkQgJHt0YXJnZXQucHVibGlzaGVyID8gc3FsYG0ucGx1Z2luX3B1Ymxpc2hlciA9ICR7dGFyZ2V0LnB1Ymxpc2hlcn1gIDogc3FsYG0ucGx1Z2luX3B1Ymxpc2hlciBJUyBOVUxMIEFORCBsb3dlcihtLm9yZ19pZCkgPSAke293bmVyfWB9YDtcbiAgY29uc3QgZXhwb3N1cmVNYXRjaCA9IGRpZ2VzdFxuICAgID8gc3FsYGUuaW1hZ2VfZGlnZXN0ID0gJHtkaWdlc3R9YFxuICAgIDogc3FsYGUucGx1Z2luX25hbWUgPSAke3RhcmdldC5wbHVnaW5OYW1lfSBBTkQgZS5wbHVnaW5fdmVyc2lvbiA9ICR7dGFyZ2V0LnBsdWdpblZlcnNpb259XG4gICAgICAgICAgQU5EICR7dGFyZ2V0LnB1Ymxpc2hlciA/IHNxbGBlLnBsdWdpbl9wdWJsaXNoZXIgPSAke3RhcmdldC5wdWJsaXNoZXJ9YCA6IHNxbGBlLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgbG93ZXIoZS5vcmdfaWQpID0gJHtvd25lcn1gfWA7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiBleGVjdXRlUm93czx7IHBpcGVsaW5lX2lkOiBzdHJpbmc7IG9yZ19pZDogc3RyaW5nOyBzb3VyY2U6IFZlcnNpb25SZWZlcmVuY2VbJ3NvdXJjZSddOyBwaXBlbGluZV9uYW1lOiBzdHJpbmcgfCBudWxsOyBkZWxldGVkOiBib29sZWFuOyBzdGVwczogc3RyaW5nW10gfCBudWxsIH0+KHR4LCBzcWxgXG4gICAgU0VMRUNUIHgucGlwZWxpbmVfaWQsIHgub3JnX2lkLCB4LnNvdXJjZSwgcC5waXBlbGluZV9uYW1lLCAocC5pZCBJUyBOVUxMIE9SIHAuZGVsZXRlZF9hdCBJUyBOT1QgTlVMTCkgQVMgZGVsZXRlZCxcbiAgICAgICAgICAgYXJyYXlfYWdnKERJU1RJTkNUIHguc3RlcCkgRklMVEVSIChXSEVSRSB4LnN0ZXAgSVMgTk9UIE5VTEwpIEFTIHN0ZXBzXG4gICAgICBGUk9NIChcbiAgICAgICAgU0VMRUNUIHIucGlwZWxpbmVfaWQsIHIub3JnX2lkLCAnZGVjbGFyZWQnIEFTIHNvdXJjZSxcbiAgICAgICAgICAgICAgIENBU0UgV0hFTiByLnN0YWdlX25hbWUgPSAnc3ludGgnIEFORCByLnN0ZXBfbmFtZSA9ICdzeW50aCcgVEhFTiAnc3ludGgnIEVMU0Ugci5zdGFnZV9uYW1lIHx8ICcvJyB8fCByLnN0ZXBfbmFtZSBFTkQgQVMgc3RlcFxuICAgICAgICAgIEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gclxuICAgICAgICAgIEpPSU4gcGlwZWxpbmVzIGxwIE9OIGxwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZCBBTkQgbHAuZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICAgICBXSEVSRSAke2RlY2xhcmVkTWF0Y2h9XG4gICAgICAgIFVOSU9OIEFMTFxuICAgICAgICBTRUxFQ1QgbS5waXBlbGluZV9pZDo6dGV4dCwgbS5vcmdfaWQsICdkZXBsb3llZCcsIG0uc3RhZ2VfbmFtZSB8fCAnLycgfHwgbS5hY3Rpb25fbmFtZVxuICAgICAgICAgIEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbSBXSEVSRSAke2RlcGxveWVkTWF0Y2h9XG4gICAgICAgIFVOSU9OIEFMTFxuICAgICAgICBTRUxFQ1QgZS5waXBlbGluZV9pZCwgZS5vcmdfaWQsICdleHBvc3VyZScsIE5VTExcbiAgICAgICAgICBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIGUgV0hFUkUgJHtleHBvc3VyZU1hdGNofSBBTkQgZS5zb3VyY2UgPSAnZGVwbG95ZWQnIEFORCBlLmZpeGVkX2F0IElTIE5VTExcbiAgICAgICkgeFxuICAgICAgTEVGVCBKT0lOIHBpcGVsaW5lcyBwIE9OIHAuaWQ6OnRleHQgPSB4LnBpcGVsaW5lX2lkXG4gICAgIEdST1VQIEJZIHgucGlwZWxpbmVfaWQsIHgub3JnX2lkLCB4LnNvdXJjZSwgcC5waXBlbGluZV9uYW1lLCBwLmlkLCBwLmRlbGV0ZWRfYXRcbiAgICAgT1JERVIgQlkgeC5vcmdfaWQsIHgucGlwZWxpbmVfaWQsIHguc291cmNlXG4gIGApKTtcbiAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiAoe1xuICAgIHBpcGVsaW5lSWQ6IHIucGlwZWxpbmVfaWQsXG4gICAgcGlwZWxpbmVOYW1lOiByLnBpcGVsaW5lX25hbWUgPz8gbnVsbCxcbiAgICBvcmdJZDogci5vcmdfaWQsXG4gICAgc291cmNlOiByLnNvdXJjZSxcbiAgICBwaXBlbGluZURlbGV0ZWQ6IHIuZGVsZXRlZCA9PT0gdHJ1ZSxcbiAgICBzdGVwczogci5zdGVwcyA/PyBbXSxcbiAgfSkpO1xufVxuXG4vKiogRGlzdGluY3QgcGlwZWxpbmVzIGFtb25nIGByZWZzYCAoYSBwaXBlbGluZSBib3RoIGRlY2xhcmVkIGFuZCBkZXBsb3llZCBjb3VudHMgb25jZSkuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RQaXBlbGluZXMocmVmczogcmVhZG9ubHkgVmVyc2lvblJlZmVyZW5jZVtdKTogQXJyYXk8eyBwaXBlbGluZUlkOiBzdHJpbmc7IHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDsgb3JnSWQ6IHN0cmluZzsgc291cmNlczogc3RyaW5nW107IHBpcGVsaW5lRGVsZXRlZDogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIH0+IHtcbiAgY29uc3QgYnlJZCA9IG5ldyBNYXA8c3RyaW5nLCB7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBvcmdJZDogc3RyaW5nOyBzb3VyY2VzOiBzdHJpbmdbXTsgcGlwZWxpbmVEZWxldGVkOiBib29sZWFuOyBzdGVwczogc3RyaW5nW10gfT4oKTtcbiAgZm9yIChjb25zdCByIG9mIHJlZnMpIHtcbiAgICBjb25zdCBlID0gYnlJZC5nZXQoci5waXBlbGluZUlkKSA/PyB7IHBpcGVsaW5lSWQ6IHIucGlwZWxpbmVJZCwgcGlwZWxpbmVOYW1lOiByLnBpcGVsaW5lTmFtZSwgb3JnSWQ6IHIub3JnSWQsIHNvdXJjZXM6IFtdLCBwaXBlbGluZURlbGV0ZWQ6IHIucGlwZWxpbmVEZWxldGVkLCBzdGVwczogW10gfTtcbiAgICBpZiAoIWUuc291cmNlcy5pbmNsdWRlcyhyLnNvdXJjZSkpIGUuc291cmNlcy5wdXNoKHIuc291cmNlKTtcbiAgICBlLnN0ZXBzID0gWy4uLm5ldyBTZXQoWy4uLmUuc3RlcHMsIC4uLnIuc3RlcHNdKV07XG4gICAgYnlJZC5zZXQoci5waXBlbGluZUlkLCBlKTtcbiAgfVxuICByZXR1cm4gWy4uLmJ5SWQudmFsdWVzKCldO1xufVxuXG4vKipcbiAqIFRoZSBpbWFnZSBkaWdlc3RzIGFuIG9yZydzIG5hbWVzcGFjZSBzdGlsbCBuZWVkczogZXZlcnkgYHBsdWdpbnNgIHJvdydzXG4gKiBkaWdlc3QgKGFjdGl2ZSwgaW5hY3RpdmUgb3Igc29mdC1kZWxldGVkIOKAlCBhIHRvbWJzdG9uZSBpcyByZXN0b3JhYmxlIHVudGlsXG4gKiBwdXJnZWQsIGFuZCB0aGUgcHVyZ2UgaXRzZWxmIGlzIGd1YXJkZWQpIHBsdXMgZXZlcnkgZGlnZXN0IGEgcGlwZWxpbmUgb2YgdGhlXG4gKiBvcmcgb3IgaXRzIHRlYW1zIGRlY2xhcmVzLCBydW5zIG9yIGhhcyBhbiBvcGVuIGRlcGxveWVkIGV4cG9zdXJlIG9uLiBXaGF0IHRoZVxuICogaW1hZ2UgcmVnaXN0cnkncyBhZ2UgR0MgY29uc3VsdHMgYmVmb3JlIGRlbGV0aW5nIGFueXRoaW5nIGluIGBvcmctPGlkPi8qYC5cbiAqIEVsZXZhdGVkIHJlYWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcmdJbWFnZURpZ2VzdHNJblVzZShvcmdJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBvcmcgPSBvcmdJZC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gZXhlY3V0ZVJvd3M8eyBkOiBzdHJpbmcgfT4odHgsIHNxbGBcbiAgICBTRUxFQ1QgRElTVElOQ1QgZCBGUk9NIChcbiAgICAgIFNFTEVDVCBpbWFnZV9kaWdlc3QgQVMgZCBGUk9NIHBsdWdpbnMgV0hFUkUgbG93ZXIob3JnX2lkKSA9ICR7b3JnfSBBTkQgaW1hZ2VfZGlnZXN0IElTIE5PVCBOVUxMXG4gICAgICBVTklPTiBTRUxFQ1Qgci5yZXNvbHZlZF9kaWdlc3QgRlJPTSBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbiByXG4gICAgICAgICAgICAgIFdIRVJFIHIucmVzb2x2ZWRfZGlnZXN0IElTIE5PVCBOVUxMIEFORCAobG93ZXIoci5vcmdfaWQpID0gJHtvcmd9IE9SIGxvd2VyKHIucm9vdF9vcmdfaWQpID0gJHtvcmd9KVxuICAgICAgVU5JT04gU0VMRUNUIG0uaW1hZ2VfZGlnZXN0IEZST00gcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHMgbVxuICAgICAgICAgICAgICBXSEVSRSBtLmltYWdlX2RpZ2VzdCBJUyBOT1QgTlVMTCBBTkQgbS5pbWFnZV9kaWdlc3QgSU4gKFNFTEVDVCBpbWFnZV9kaWdlc3QgRlJPTSBwbHVnaW5zIFdIRVJFIGxvd2VyKG9yZ19pZCkgPSAke29yZ30gQU5EIGltYWdlX2RpZ2VzdCBJUyBOT1QgTlVMTClcbiAgICAgIFVOSU9OIFNFTEVDVCBtLmltYWdlX2RpZ2VzdCBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG0gV0hFUkUgbS5pbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwgQU5EIGxvd2VyKG0ub3JnX2lkKSA9ICR7b3JnfVxuICAgICAgVU5JT04gU0VMRUNUIGUuaW1hZ2VfZGlnZXN0IEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmUgZVxuICAgICAgICAgICAgICBXSEVSRSBlLmltYWdlX2RpZ2VzdCBJUyBOT1QgTlVMTCBBTkQgZS5zb3VyY2UgPSAnZGVwbG95ZWQnIEFORCBlLmZpeGVkX2F0IElTIE5VTEwgQU5EIGxvd2VyKGUub3JnX2lkKSA9ICR7b3JnfVxuICAgICkgeCBXSEVSRSBkIElTIE5PVCBOVUxMXG4gIGApKTtcbiAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiByLmQpO1xufVxuIl19
@@ -83,4 +83,4 @@ export function withViewerContext(filter) {
83
83
  viewerIsSuperAdmin: filter.viewerIsSuperAdmin ?? ctx?.isSuperAdmin ?? false,
84
84
  };
85
85
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3ZpZXdlci1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUVILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBVTFELDRFQUE0RTtBQUM1RSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQy9CLElBQUksR0FBRyxFQUFFLFlBQVk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNuQyxPQUFPLEdBQUcsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUErQixNQUFrQjtJQUNoRixNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQy9CLE9BQU87UUFDTCxHQUFHLE1BQU07UUFDVCxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksSUFBSSxHQUFHLEVBQUUsTUFBTTtRQUNoRCxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCLElBQUksR0FBRyxFQUFFLFlBQVksSUFBSSxLQUFLO0tBQzVFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVmlld2VyIGlkZW50aXR5IGZvciBhcHAtbGF5ZXIgcHJlZGljYXRlcyB0aGF0IGNhcnJ5IGEgUEVSLVVTRVIgcnVuZy5cbiAqXG4gKiBNb3N0IHZpc2liaWxpdHkgcHJlZGljYXRlcyBhcmUgb3JnLWdyYWluZWQsIHdoaWNoIFJMUyBhbmQgdGhlIHNoYXJlZFxuICogYWNjZXNzLWNvbnRyb2wgYnVpbGRlciBhbHJlYWR5IGV4cHJlc3MuIFR3byBlbnRpdGllcyBuZWVkIGZpbmVyIGdyYWluOlxuICpcbiAqICAtICoqcGlwZWxpbmUgdGVtcGxhdGVzKiog4oCUIHRoZSBgcHJpdmF0ZWAgcnVuZyBpcyBhdXRob3Itb25seSAoYGNyZWF0ZWRfYnlgKVxuICogIC0gKiptZXNzYWdlcyoqIOKAlCBhIHBlci11c2VyIHRhcmdldGVkIHJvdyAoYHJlY2lwaWVudF91c2VyX2lkYCkgaXMgdmlzaWJsZVxuICogICAgb25seSB0byBpdHMgdGFyZ2V0LCBub3QgdG8gZXZlcnlvbmUgaW4gdGhlIHJlY2lwaWVudCBvcmdcbiAqXG4gKiBCb3RoIG5lZWQgdG8ga25vdyBXSE8gaXMgYXNraW5nLCBhbmQgbmVpdGhlciBjYW4gZ2V0IGl0IGZyb20gYENydWRTZXJ2aWNlYCdzXG4gKiBzaWduYXR1cmVzOiBgd3JpdGVDb25kaXRpb25zYCAodXBkYXRlL2RlbGV0ZSkgYnVpbGRzIHRoZSByZWFkIGNsYXVzZSBmcm9tIGFcbiAqIGJhcmUgYHsgaWQgfWAgZmlsdGVyIGFuZCBoYXMgbm93aGVyZSB0byBwYXNzIGEgdmlld2VyLiBIYW5kLXRocmVhZGluZyB0aGVcbiAqIHZpZXdlciB0aHJvdWdoIGV2ZXJ5IGNhbGwgc2l0ZSBpcyB0aGUgYWx0ZXJuYXRpdmUsIGFuZCBpdCBmYWlscyBpbiBwcmFjdGljZSDigJRcbiAqIGl0IHByb2R1Y2VzIHBhcmFsbGVsIGBmaW5kKlZpc2libGUqYCBtZXRob2RzIGFuZCBzaWxlbnRseSBkcm9wcyB0aGUgdmlld2VyIGF0XG4gKiB3aGljaGV2ZXIgY2FsbCBzaXRlIGZvcmdldHMgaXQgKGFuIG9yZyBtZW1iZXIgdGhlbiByZWFkcyBhIHJvdyBhZGRyZXNzZWQgdG9cbiAqIHNvbWVvbmUgZWxzZSkuXG4gKlxuICogU28gdGhlIHZpZXdlciB0cmF2ZWxzIHRoZSBzYW1lIHRydXN0ZWQsIHJlcXVlc3Qtc2NvcGVkIGNoYW5uZWwgYXMgdGhlIG9yZ1xuICogc3RhbXA6IGBUZW5hbnRDb250ZXh0YCwgc2V0IG9uY2UgYXQgdGhlIHJlcXVlc3QgYm91bmRhcnkgZnJvbSB0aGUgdmFsaWRhdGVkXG4gKiBKV1QuIEEgc2VydmljZSBvcHRzIGluIGJ5IHN0YW1waW5nIGl0IGluIE9ORSBwbGFjZSDigJQgaXRzIGBidWlsZENvbmRpdGlvbnNgXG4gKiBvdmVycmlkZSwgd2hpY2ggZXZlcnkgcmVhZCBhbmQgd3JpdGUgZnVubmVscyB0aHJvdWdoLCBpbmNsdWRpbmcgZGlyZWN0XG4gKiBgdGhpcy5idWlsZENvbmRpdGlvbnMoLi4uKWAgY2FsbHMuXG4gKlxuICogRmFpbHMgQ0xPU0VEIGV2ZXJ5d2hlcmU6IG5vIHRlbmFudCBzY29wZSAoYmFja2dyb3VuZCBqb2JzLCBtaWdyYXRpb25zLCB0aGVcbiAqIHJldGVudGlvbiBzd2VlcCkgbWVhbnMgbm8gdmlld2VyLCBhbmQgYSB2aWV3ZXItbGVzcyBwcmVkaWNhdGUgbXVzdCBtYXRjaFxuICogbm90aGluZyBvbiB0aGUgcGVyLXVzZXIgcnVuZyByYXRoZXIgdGhhbiBtYXRjaGluZyBldmVyeXRoaW5nLlxuICovXG5cbmltcG9ydCB7IGdldFRlbmFudENvbnRleHQgfSBmcm9tICcuLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuLyoqIFRoZSB2aWV3ZXIgZmllbGRzIGEgcGVyLXVzZXIgcHJlZGljYXRlIHJlYWRzIG9mZiBhIGZpbHRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlld2VyU2NvcGVkRmlsdGVyIHtcbiAgLyoqIENhbGxlcidzIHVzZXIgaWQuIENvbXBhcmVkIGFnYWluc3QgdGhlIHJvdydzIHBlci11c2VyIGNvbHVtbi4gKi9cbiAgcmVhZG9ubHkgdmlld2VyVXNlcklkPzogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgY2FsbGVyIGlzIGEgcGxhdGZvcm0gc3VwZXItYWRtaW4gKHNlZXMgZXZlcnkgcnVuZykuICovXG4gIHJlYWRvbmx5IHZpZXdlcklzU3VwZXJBZG1pbj86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgY3VycmVudCByZXF1ZXN0J3MgdXNlciBpZCwgb3IgYHVuZGVmaW5lZGAgb3V0c2lkZSBhIHRlbmFudCBzY29wZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50Vmlld2VyVXNlcklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRUZW5hbnRDb250ZXh0KCk/LnVzZXJJZDtcbn1cblxuLyoqXG4gKiBUaGUgdmlld2VyJ3MgaWRlbnRpdHkgYXMgYSBDQUNIRS1LRVkgc2VnbWVudC5cbiAqXG4gKiBBbnkgY2FjaGUgaW4gZnJvbnQgb2YgYSByZWFkIHdob3NlIHByZWRpY2F0ZSBjYXJyaWVzIHRoZSBwZXItdXNlciBydW5nIG11c3RcbiAqIGluY2x1ZGUgdGhpcywgYmVjYXVzZSB0aGUgdmlld2VyIGlzIHBhcnQgb2YgdGhlIGFuc3dlciwgbm90IGp1c3QgcGFydCBvZiB0aGVcbiAqIGF1dGhvcml6YXRpb246IGB2aXNpYmlsaXR5IDw+ICdwcml2YXRlJyBPUiBjcmVhdGVkX2J5ID0gVmAgcmV0dXJucyBkaWZmZXJlbnRcbiAqIHJvd3MgdG8gdHdvIG1lbWJlcnMgb2YgdGhlIHNhbWUgb3JnLiBLZXllZCBvbiBvcmcgYWxvbmUsIHRoZSBmaXJzdCByZWFkZXJcbiAqIHBvcHVsYXRlcyB0aGUgZW50cnkgYW5kIGV2ZXJ5IGxhdGVyIG9uZSBpcyBzZXJ2ZWQgVEhFSVIgcm93IOKAlCB3aGljaCBpcyBob3cgYW5cbiAqIGF1dGhvcidzIHByaXZhdGUgcGlwZWxpbmUgKGFuZCBpdHMgYHByb3BzYCwgaG9sZGluZyBzb3VyY2UgdG9rZW5zIGFuZCBlbnYpXG4gKiByZWFjaGVkIHRoZSByZXN0IG9mIHRoZSBvcmcuXG4gKlxuICogU3VwZXItYWRtaW5zIGNvbGxhcHNlIHRvIG9uZSBidWNrZXQ6IHRoZSBwcml2YXRlIHJ1bmcgaXMgbGlmdGVkIGZvciBhbGwgb2ZcbiAqIHRoZW0sIHNvIHRoZWlyIHNsaWNlIGlzIGlkZW50aWNhbCBhbmQgcGVyLW9wZXJhdG9yIGVudHJpZXMgd291bGQgb25seSB3YXN0ZVxuICogc3BhY2UuIEZhaWxzIENMT1NFRC1pc2ggb24gYW4gYWJzZW50IHZpZXdlciBieSBrZXlpbmcgYSBkaXN0aW5jdCBgbm9uZWBcbiAqIGJ1Y2tldCwgc28gYSB2aWV3ZXItbGVzcyByZWFkIChiYWNrZ3JvdW5kIGpvYiwgbWlncmF0aW9uKSBjYW4gbmVpdGhlciByZWFkIG5vclxuICogcG9pc29uIGFuIGF1dGhlZCBjYWxsZXIncyBlbnRyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpZXdlckNhY2hlU2VnbWVudCgpOiBzdHJpbmcge1xuICBjb25zdCBjdHggPSBnZXRUZW5hbnRDb250ZXh0KCk7XG4gIGlmIChjdHg/LmlzU3VwZXJBZG1pbikgcmV0dXJuICdzYSc7XG4gIHJldHVybiBjdHg/LnVzZXJJZCA/PyAnbm9uZSc7XG59XG5cbi8qKlxuICogU3RhbXAgdGhlIHJlcXVlc3QncyB2aWV3ZXIgaWRlbnRpdHkgb250byBhIGZpbHRlci5cbiAqXG4gKiBBbiBFWFBMSUNJVCB2YWx1ZSBvbiB0aGUgZmlsdGVyIGFsd2F5cyB3aW5zLCBzbyBhIGNhbGxlciB0aGF0IGRlbGliZXJhdGVseVxuICogc2NvcGVzIHRvIGEgc3BlY2lmaWMgdXNlciAob3IgYSB0ZXN0IHRoYXQgZml4ZXMgdGhlIHZpZXdlcikgc3RheXMgZXhwcmVzc2libGU7XG4gKiB0aGUgY29udGV4dCBvbmx5IGZpbGxzIHdoYXQgdGhlIGNhbGxlciBsZWZ0IGJsYW5rLlxuICpcbiAqIFNhZmUgYWdhaW5zdCBgQ3J1ZFNlcnZpY2UucnVuUmVhZGAncyBzeXNhZG1pbiB3aWRlbmluZyAodGhlIHBhcmVudC1vcmcgcmVhZFxuICogcGF0aCwgd2hpY2ggcmUtZW50ZXJzIHRoZSBjb250ZXh0IHdpdGggYGlzU3VwZXJBZG1pbjogdHJ1ZWApOiBjb25kaXRpb25zIGFyZVxuICogYWx3YXlzIGJ1aWx0IEJFRk9SRSB0aGF0IHNjb3BlIGlzIGVudGVyZWQsIHNvIHRoZSBzdGFtcCByZWZsZWN0cyB0aGUgcmVhbFxuICogY2FsbGVyLCBuZXZlciB0aGUgd2lkZW5lZCBvbmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHByb3RlY3RlZCBidWlsZENvbmRpdGlvbnMoZmlsdGVyLCBvcmdJZCwgcGFyZW50T3JnSWQpIHtcbiAqICAgcmV0dXJuIGJ1aWxkWENvbmRpdGlvbnMod2l0aFZpZXdlckNvbnRleHQoZmlsdGVyKSwgb3JnSWQsIHBhcmVudE9yZ0lkKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFZpZXdlckNvbnRleHQ8RiBleHRlbmRzIFZpZXdlclNjb3BlZEZpbHRlcj4oZmlsdGVyOiBQYXJ0aWFsPEY+KTogUGFydGlhbDxGPiB7XG4gIGNvbnN0IGN0eCA9IGdldFRlbmFudENvbnRleHQoKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5maWx0ZXIsXG4gICAgdmlld2VyVXNlcklkOiBmaWx0ZXIudmlld2VyVXNlcklkID8/IGN0eD8udXNlcklkLFxuICAgIHZpZXdlcklzU3VwZXJBZG1pbjogZmlsdGVyLnZpZXdlcklzU3VwZXJBZG1pbiA/PyBjdHg/LmlzU3VwZXJBZG1pbiA/PyBmYWxzZSxcbiAgfTtcbn1cbiJdfQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLWNvbnRleHQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvdmlld2VyLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFVMUQsNEVBQTRFO0FBQzVFLE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDL0IsSUFBSSxHQUFHLEVBQUUsWUFBWTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ25DLE9BQU8sR0FBRyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQStCLE1BQWtCO0lBQ2hGLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDL0IsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNULFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxNQUFNO1FBQ2hELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsWUFBWSxJQUFJLEtBQUs7S0FDNUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBWaWV3ZXIgaWRlbnRpdHkgZm9yIGFwcC1sYXllciBwcmVkaWNhdGVzIHRoYXQgY2FycnkgYSBQRVItVVNFUiBydW5nLlxuICpcbiAqIE1vc3QgdmlzaWJpbGl0eSBwcmVkaWNhdGVzIGFyZSBvcmctZ3JhaW5lZCwgd2hpY2ggUkxTIGFuZCB0aGUgc2hhcmVkXG4gKiBhY2Nlc3MtY29udHJvbCBidWlsZGVyIGFscmVhZHkgZXhwcmVzcy4gVHdvIGVudGl0aWVzIG5lZWQgZmluZXIgZ3JhaW46XG4gKlxuICogIC0gKipwaXBlbGluZSB0ZW1wbGF0ZXMqKiDigJQgdGhlIGBwcml2YXRlYCBydW5nIGlzIGF1dGhvci1vbmx5IChgY3JlYXRlZF9ieWApXG4gKiAgLSAqKm1lc3NhZ2VzKiog4oCUIGEgcGVyLXVzZXIgdGFyZ2V0ZWQgcm93IChgcmVjaXBpZW50X3VzZXJfaWRgKSBpcyB2aXNpYmxlXG4gKiAgICBvbmx5IHRvIGl0cyB0YXJnZXQsIG5vdCB0byBldmVyeW9uZSBpbiB0aGUgcmVjaXBpZW50IG9yZ1xuICpcbiAqIEJvdGggbmVlZCB0byBrbm93IFdITyBpcyBhc2tpbmcsIGFuZCBuZWl0aGVyIGNhbiBnZXQgaXQgZnJvbSBgQ3J1ZFNlcnZpY2VgJ3NcbiAqIHNpZ25hdHVyZXM6IGB3cml0ZUNvbmRpdGlvbnNgICh1cGRhdGUvZGVsZXRlKSBidWlsZHMgdGhlIHJlYWQgY2xhdXNlIGZyb20gYVxuICogYmFyZSBgeyBpZCB9YCBmaWx0ZXIgYW5kIGhhcyBub3doZXJlIHRvIHBhc3MgYSB2aWV3ZXIuIEhhbmQtdGhyZWFkaW5nIHRoZVxuICogdmlld2VyIHRocm91Z2ggZXZlcnkgY2FsbCBzaXRlIGlzIHRoZSBhbHRlcm5hdGl2ZSwgYW5kIGl0IGZhaWxzIGluIHByYWN0aWNlIOKAlFxuICogaXQgcHJvZHVjZXMgcGFyYWxsZWwgYGZpbmQqVmlzaWJsZSpgIG1ldGhvZHMgYW5kIHNpbGVudGx5IGRyb3BzIHRoZSB2aWV3ZXIgYXRcbiAqIHdoaWNoZXZlciBjYWxsIHNpdGUgZm9yZ2V0cyBpdCAoYW4gb3JnIG1lbWJlciB0aGVuIHJlYWRzIGEgcm93IGFkZHJlc3NlZCB0b1xuICogc29tZW9uZSBlbHNlKS5cbiAqXG4gKiBTbyB0aGUgdmlld2VyIHRyYXZlbHMgdGhlIHNhbWUgdHJ1c3RlZCwgcmVxdWVzdC1zY29wZWQgY2hhbm5lbCBhcyB0aGUgb3JnXG4gKiBzdGFtcDogYFRlbmFudENvbnRleHRgLCBzZXQgb25jZSBhdCB0aGUgcmVxdWVzdCBib3VuZGFyeSBmcm9tIHRoZSB2YWxpZGF0ZWRcbiAqIEpXVC4gQSBzZXJ2aWNlIG9wdHMgaW4gYnkgc3RhbXBpbmcgaXQgaW4gT05FIHBsYWNlIOKAlCBpdHMgYGJ1aWxkQ29uZGl0aW9uc2BcbiAqIG92ZXJyaWRlLCB3aGljaCBldmVyeSByZWFkIGFuZCB3cml0ZSBmdW5uZWxzIHRocm91Z2gsIGluY2x1ZGluZyBkaXJlY3RcbiAqIGB0aGlzLmJ1aWxkQ29uZGl0aW9ucyguLi4pYCBjYWxscy5cbiAqXG4gKiBGYWlscyBDTE9TRUQgZXZlcnl3aGVyZTogbm8gdGVuYW50IHNjb3BlIChiYWNrZ3JvdW5kIGpvYnMsIG1pZ3JhdGlvbnMsIHRoZVxuICogcmV0ZW50aW9uIHN3ZWVwKSBtZWFucyBubyB2aWV3ZXIsIGFuZCBhIHZpZXdlci1sZXNzIHByZWRpY2F0ZSBtdXN0IG1hdGNoXG4gKiBub3RoaW5nIG9uIHRoZSBwZXItdXNlciBydW5nIHJhdGhlciB0aGFuIG1hdGNoaW5nIGV2ZXJ5dGhpbmcuXG4gKi9cblxuaW1wb3J0IHsgZ2V0VGVuYW50Q29udGV4dCB9IGZyb20gJy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG4vKiogVGhlIHZpZXdlciBmaWVsZHMgYSBwZXItdXNlciBwcmVkaWNhdGUgcmVhZHMgb2ZmIGEgZmlsdGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaWV3ZXJTY29wZWRGaWx0ZXIge1xuICAvKiogQ2FsbGVyJ3MgdXNlciBpZC4gQ29tcGFyZWQgYWdhaW5zdCB0aGUgcm93J3MgcGVyLXVzZXIgY29sdW1uLiAqL1xuICByZWFkb25seSB2aWV3ZXJVc2VySWQ/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBjYWxsZXIgaXMgYSBwbGF0Zm9ybSBzdXBlci1hZG1pbiAoc2VlcyBldmVyeSBydW5nKS4gKi9cbiAgcmVhZG9ubHkgdmlld2VySXNTdXBlckFkbWluPzogYm9vbGVhbjtcbn1cblxuLyoqIFRoZSBjdXJyZW50IHJlcXVlc3QncyB1c2VyIGlkLCBvciBgdW5kZWZpbmVkYCBvdXRzaWRlIGEgdGVuYW50IHNjb3BlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRWaWV3ZXJVc2VySWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFRlbmFudENvbnRleHQoKT8udXNlcklkO1xufVxuXG4vKipcbiAqIFRoZSB2aWV3ZXIncyBpZGVudGl0eSBhcyBhIENBQ0hFLUtFWSBzZWdtZW50LlxuICpcbiAqIEFueSBjYWNoZSBpbiBmcm9udCBvZiBhIHJlYWQgd2hvc2UgcHJlZGljYXRlIGNhcnJpZXMgdGhlIHBlci11c2VyIHJ1bmcgbXVzdFxuICogaW5jbHVkZSB0aGlzLCBiZWNhdXNlIHRoZSB2aWV3ZXIgaXMgcGFydCBvZiB0aGUgYW5zd2VyLCBub3QganVzdCBwYXJ0IG9mIHRoZVxuICogYXV0aG9yaXphdGlvbjogYHZpc2liaWxpdHkgPD4gJ3ByaXZhdGUnIE9SIGNyZWF0ZWRfYnkgPSBWYCByZXR1cm5zIGRpZmZlcmVudFxuICogcm93cyB0byB0d28gbWVtYmVycyBvZiB0aGUgc2FtZSBvcmcuIEtleWVkIG9uIG9yZyBhbG9uZSwgdGhlIGZpcnN0IHJlYWRlclxuICogcG9wdWxhdGVzIHRoZSBlbnRyeSBhbmQgZXZlcnkgbGF0ZXIgb25lIGlzIHNlcnZlZCBUSEVJUiByb3cg4oCUIHdoaWNoIGlzIGhvdyBhblxuICogYXV0aG9yJ3MgcHJpdmF0ZSBwaXBlbGluZSAoYW5kIGl0cyBgcHJvcHNgLCBob2xkaW5nIHNvdXJjZSB0b2tlbnMgYW5kIGVudilcbiAqIHJlYWNoZWQgdGhlIHJlc3Qgb2YgdGhlIG9yZy5cbiAqXG4gKiBTdXBlci1hZG1pbnMgY29sbGFwc2UgdG8gb25lIGJ1Y2tldDogdGhlIHByaXZhdGUgcnVuZyBpcyBsaWZ0ZWQgZm9yIGFsbCBvZlxuICogdGhlbSwgc28gdGhlaXIgc2xpY2UgaXMgaWRlbnRpY2FsIGFuZCBwZXItb3BlcmF0b3IgZW50cmllcyB3b3VsZCBvbmx5IHdhc3RlXG4gKiBzcGFjZS4gRmFpbHMgQ0xPU0VELWlzaCBvbiBhbiBhYnNlbnQgdmlld2VyIGJ5IGtleWluZyBhIGRpc3RpbmN0IGBub25lYFxuICogYnVja2V0LCBzbyBhIHZpZXdlci1sZXNzIHJlYWQgKGJhY2tncm91bmQgam9iLCBtaWdyYXRpb24pIGNhbiBuZWl0aGVyIHJlYWQgbm9yXG4gKiBwb2lzb24gYW4gYXV0aGVkIGNhbGxlcidzIGVudHJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlld2VyQ2FjaGVTZWdtZW50KCk6IHN0cmluZyB7XG4gIGNvbnN0IGN0eCA9IGdldFRlbmFudENvbnRleHQoKTtcbiAgaWYgKGN0eD8uaXNTdXBlckFkbWluKSByZXR1cm4gJ3NhJztcbiAgcmV0dXJuIGN0eD8udXNlcklkID8/ICdub25lJztcbn1cblxuLyoqXG4gKiBTdGFtcCB0aGUgcmVxdWVzdCdzIHZpZXdlciBpZGVudGl0eSBvbnRvIGEgZmlsdGVyLlxuICpcbiAqIEFuIEVYUExJQ0lUIHZhbHVlIG9uIHRoZSBmaWx0ZXIgYWx3YXlzIHdpbnMsIHNvIGEgY2FsbGVyIHRoYXQgZGVsaWJlcmF0ZWx5XG4gKiBzY29wZXMgdG8gYSBzcGVjaWZpYyB1c2VyIChvciBhIHRlc3QgdGhhdCBmaXhlcyB0aGUgdmlld2VyKSBzdGF5cyBleHByZXNzaWJsZTtcbiAqIHRoZSBjb250ZXh0IG9ubHkgZmlsbHMgd2hhdCB0aGUgY2FsbGVyIGxlZnQgYmxhbmsuXG4gKlxuICogU2FmZSBhZ2FpbnN0IGBDcnVkU2VydmljZS5ydW5SZWFkYCdzIHN5c2FkbWluIHdpZGVuaW5nICh0aGUgcGFyZW50LW9yZyByZWFkXG4gKiBwYXRoLCB3aGljaCByZS1lbnRlcnMgdGhlIGNvbnRleHQgd2l0aCBgaXNTdXBlckFkbWluOiB0cnVlYCk6IGNvbmRpdGlvbnMgYXJlXG4gKiBhbHdheXMgYnVpbHQgQkVGT1JFIHRoYXQgc2NvcGUgaXMgZW50ZXJlZCwgc28gdGhlIHN0YW1wIHJlZmxlY3RzIHRoZSByZWFsXG4gKiBjYWxsZXIsIG5ldmVyIHRoZSB3aWRlbmVkIG9uZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdGVjdGVkIGJ1aWxkQ29uZGl0aW9ucyhmaWx0ZXIsIG9yZ0lkLCBwYXJlbnRPcmdJZCkge1xuICogICByZXR1cm4gYnVpbGRYQ29uZGl0aW9ucyh3aXRoVmlld2VyQ29udGV4dChmaWx0ZXIpLCBvcmdJZCwgcGFyZW50T3JnSWQpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVmlld2VyQ29udGV4dDxGIGV4dGVuZHMgVmlld2VyU2NvcGVkRmlsdGVyPihmaWx0ZXI6IFBhcnRpYWw8Rj4pOiBQYXJ0aWFsPEY+IHtcbiAgY29uc3QgY3R4ID0gZ2V0VGVuYW50Q29udGV4dCgpO1xuICByZXR1cm4ge1xuICAgIC4uLmZpbHRlcixcbiAgICB2aWV3ZXJVc2VySWQ6IGZpbHRlci52aWV3ZXJVc2VySWQgPz8gY3R4Py51c2VySWQsXG4gICAgdmlld2VySXNTdXBlckFkbWluOiBmaWx0ZXIudmlld2VySXNTdXBlckFkbWluID8/IGN0eD8uaXNTdXBlckFkbWluID8/IGZhbHNlLFxuICB9O1xufVxuIl19
@@ -218,6 +218,31 @@ export interface MessageFilter extends CommonFilter {
218
218
  * - undefined → no read-state filter
219
219
  */
220
220
  readonly isRead?: boolean;
221
+ /**
222
+ * Sender, relative to the viewer:
223
+ * - `'me'` → rows the viewing USER authored (`created_by = viewerUserId`);
224
+ * with no viewer id it matches nothing (fail-closed).
225
+ * - `'org'` → rows the viewing ORG sent (any member).
226
+ * - `'others'` → rows another org sent (received mail + announcements).
227
+ */
228
+ readonly sentBy?: 'me' | 'org' | 'others';
229
+ /** Rows a specific user authored (`created_by`, compared case-preserving). */
230
+ readonly senderUserId?: string;
231
+ /** Rows exchanged with a specific org: it sent them, or it received them. */
232
+ readonly counterpartyOrgId?: string;
233
+ /**
234
+ * Which side of the requesting org's own `hidden_by` stamp to return:
235
+ * absent/false → the inbox (rows this org has NOT removed — the default);
236
+ * true → only rows this org removed (the "Removed" view, and the scope of
237
+ * an unhide). Never widens visibility.
238
+ */
239
+ readonly hidden?: boolean;
240
+ /**
241
+ * Explicit row selection (`id IN (...)`). Narrows only — AND-ed with the
242
+ * visibility scope like every other field, so it can never reach a row the
243
+ * caller couldn't already list.
244
+ */
245
+ readonly ids?: readonly string[];
221
246
  /**
222
247
  * Free-text inbox search. Case-insensitive substring match against the
223
248
  * message `subject` OR `content` (LIKE wildcards in the term are escaped, so a