@pipeline-builder/pipeline-data 4.3.3 → 4.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/lib/api/crud-service.d.ts +7 -0
  2. package/lib/api/crud-service.js +14 -3
  3. package/lib/api/pipeline-step-resolution.d.ts +111 -0
  4. package/lib/api/pipeline-step-resolution.js +163 -0
  5. package/lib/api/plugin-consumption-policy.d.ts +8 -2
  6. package/lib/api/plugin-consumption-policy.js +20 -3
  7. package/lib/api/plugin-resolution.d.ts +26 -9
  8. package/lib/api/plugin-resolution.js +51 -33
  9. package/lib/api/reporting/analytics-queries.d.ts +6 -4
  10. package/lib/api/reporting/analytics-queries.js +11 -11
  11. package/lib/api/reporting/deploy-rollup.d.ts +2 -0
  12. package/lib/api/reporting/deploy-rollup.js +5 -1
  13. package/lib/api/reporting/failure-classifier.d.ts +2 -6
  14. package/lib/api/reporting/failure-classifier.js +22 -1
  15. package/lib/api/reporting/ingest.js +73 -16
  16. package/lib/api/reporting/plugin-exposure.d.ts +261 -15
  17. package/lib/api/reporting/plugin-exposure.js +423 -38
  18. package/lib/api/reporting/stakeholder/compose.d.ts +1 -1
  19. package/lib/api/reporting/stakeholder/compose.js +30 -1
  20. package/lib/api/reporting/stakeholder/store.d.ts +16 -2
  21. package/lib/api/reporting/stakeholder/store.js +17 -6
  22. package/lib/api/reporting/types.d.ts +80 -1
  23. package/lib/api/reporting/types.js +1 -1
  24. package/lib/api/reporting-service.d.ts +11 -4
  25. package/lib/api/reporting-service.js +106 -43
  26. package/lib/api/soft-delete-sweep.d.ts +8 -18
  27. package/lib/api/soft-delete-sweep.js +35 -5
  28. package/lib/api/version-references.d.ts +80 -0
  29. package/lib/api/version-references.js +135 -0
  30. package/lib/core/query-filters.d.ts +3 -3
  31. package/lib/core/query-filters.js +1 -1
  32. package/lib/database/drizzle-schema.d.ts +1238 -143
  33. package/lib/database/drizzle-schema.js +6 -3
  34. package/lib/database/index.d.ts +1 -1
  35. package/lib/database/index.js +2 -2
  36. package/lib/database/schema/ecosystem.d.ts +53 -0
  37. package/lib/database/schema/ecosystem.js +14 -3
  38. package/lib/database/schema/pipeline.d.ts +38 -0
  39. package/lib/database/schema/pipeline.js +20 -2
  40. package/lib/database/schema/plugin.d.ts +265 -0
  41. package/lib/database/schema/plugin.js +34 -3
  42. package/lib/database/schema/reporting-analytics.d.ts +786 -4
  43. package/lib/database/schema/reporting-analytics.js +111 -5
  44. package/lib/index.d.ts +5 -3
  45. package/lib/index.js +5 -3
  46. package/lib/testing/exports.json +24 -0
  47. package/package.json +4 -3
@@ -159,7 +159,7 @@ export const plugin = pgTable('plugins', {
159
159
  vulnMedium: integer('vuln_medium'),
160
160
  vulnLow: integer('vuln_low'),
161
161
  // Of the critical/high findings, those grype reports a fixed version for —
162
- // what the platform floor (PLUGIN_VULN_MAX_CRITICAL) gates on. NULL = unscanned.
162
+ // what the platform floor (PLUGIN_VULN_MAX_FINDINGS) gates on. NULL = unscanned.
163
163
  vulnCriticalFixable: integer('vuln_critical_fixable'),
164
164
  vulnHighFixable: integer('vuln_high_fixable'),
165
165
  scannedAt: timestamp('scanned_at', { withTimezone: true }),
@@ -172,7 +172,7 @@ export const plugin = pgTable('plugins', {
172
172
  * gating flag tripped.
173
173
  *
174
174
  * `scan_flag` is set only while fixable criticals exceed
175
- * PLUGIN_VULN_MAX_CRITICAL, so a version carrying only High findings stores
175
+ * PLUGIN_VULN_MAX_FINDINGS, so a version carrying only High findings stores
176
176
  * nothing — and the vulnerability report section, whose whole job is to show
177
177
  * Critical AND High exposure, had no source to read. This holds the counts and
178
178
  * the top findings for every in-use version, independent of the gate: what a
@@ -265,4 +265,35 @@ export const plugin = pgTable('plugins', {
265
265
  imageDigestCheck: check('plugin_image_digest_check', sql `${table.imageDigest} IS NULL OR ${table.imageDigest} ~ '^sha256:[0-9a-f]{64}$'`),
266
266
  imageSourceCheck: check('plugin_image_source_check', sql `${table.imageSource} IS NULL OR ${table.imageSource} IN ('built', 'uploaded')`),
267
267
  }));
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsV0FBVyxFQUFFLFVBQVUsRUFBRSxhQUFhLEdBRXZDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBbURsSTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFO0lBQ3ZDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMs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SUFDbEUsWUFBWSxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFFN0UsOENBQThDO0lBQzlDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQztTQUNoRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFFN0Msb0JBQW9CO0lBQ3BCLFlBQVksRUFBRSxLQUFLLENBQUUsc0JBQXNCLEVBQ3pDLEdBQUcsQ0FBQSxHQUFHLEtBQUssQ0FBQyxPQUFPLG9FQUFvRSxDQUN4RjtJQUNELGdCQUFnQixFQUFFLEtBQUssQ0FBQywyQkFBMkIsRUFDakQsR0FBRyxDQUFBLEdBQUcsS0FBSyxDQUFDLFdBQVcsZUFBZSxLQUFLLENBQUMsV0FBVyw0QkFBNEIsQ0FDcEY7SUFDRCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsMkJBQTJCLEVBQ2pELEdBQUcsQ0FBQSxHQUFHLEtBQUssQ0FBQyxXQUFXLGVBQWUsS0FBSyxDQUFDLFdBQVcsMkJBQTJCLENBQ25GO0NBQ0YsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHtcbiAgQ29tcHV0ZVR5cGUsIFBsdWdpblR5cGUsIFNZU1RFTV9PUkdfSUQsIHR5cGUgQ3JpdGljYWxpdHksIHR5cGUgRW50aXR5TGFiZWxzLCB0eXBlIEVudGl0eUxpbmssIHR5cGUgTGlmZWN5Y2xlLFxuICB0eXBlIE1ldGFkYXRhU291cmNlcywgdHlwZSBPd25lclR5cGUsIHR5cGUgUGx1Z2luU2NhbkZsYWcsIHR5cGUgUGx1Z2luU2NhblN1bW1hcnksIHR5cGUgVmlzaWJpbGl0eSxcbn0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgYm9vbGVhbiwgaW50ZWdlciwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4LCBjaGVjayB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuXG4vKipcbiAqIFNlY3JldCByZXF1aXJlbWVudCBmb3IgYSBwbHVnaW4uXG4gKiBEZWNsYXJlcyBuYW1lZCBzZWNyZXRzIHRoZSBwbHVnaW4gZXhwZWN0cyBhdCBidWlsZCB0aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblNlY3JldCB7XG4gIG5hbWU6IHN0cmluZztcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZXJlIGEgcGx1Z2luJ3MgaW1hZ2UgY2FtZSBmcm9tOiBgYnVpbHRgIGJ5IHRoZSBwbGF0Zm9ybSdzIEJ1aWxkS2l0IChjYXJyaWVzXG4gKiBTTFNBIHByb3ZlbmFuY2UpIG9yIGB1cGxvYWRlZGAgYXMgYSBwcmVidWlsdCBgaW1hZ2UudGFyYCAoU0JPTSArIHNpZ25hdHVyZVxuICogb25seSDigJQgdGhlIHBsYXRmb3JtIG5ldmVyIHNhdyB0aGUgYnVpbGQpLlxuICovXG5leHBvcnQgdHlwZSBJbWFnZVNvdXJjZSA9ICdidWlsdCcgfCAndXBsb2FkZWQnO1xuXG4vKipcbiAqIFBsdWdpbiBsaWZlY3ljbGU6IHRoZSBzaGFyZWQgY2F0YWxvZyB7QGxpbmsgTGlmZWN5Y2xlfSBwbHVzIGB5YW5rZWRgLCB3aGljaFxuICogb25seSBwbHVnaW4gdmVyc2lvbnMgY2FuIHJlYWNoIChhIHlhbmtlZCB2ZXJzaW9uIHN0b3BzIHJlc29sdmluZyBmb3IgbmV3XG4gKiBzeW50aHMpLiBgeWFua2VkQXRgIC8gYGRlcHJlY2F0ZWRBdGAgYXJlIHRoZSBhdXRob3JpdGF0aXZlIHRpbWVzdGFtcHM7IHRoZVxuICogbGlmZWN5Y2xlIHZhbHVlIG1pcnJvcnMgdGhlbSBmb3IgY2F0YWxvZyBmaWx0ZXJpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpbkxpZmVjeWNsZSA9IExpZmVjeWNsZSB8ICd5YW5rZWQnO1xuXG4vKiogQ29lcmNpb24gdHlwZSBhIGByZXF1aXJlZE1ldGFkYXRhYCAvIGByZXF1aXJlZFZhcnNgIGtleSBpcyBkZWNsYXJlZCBhcy4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpbkNvbnRyYWN0VmFsdWVUeXBlID0gJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sJyB8ICdqc29uJztcblxuLyoqXG4gKiBUaGUgc3BlYydzIHNtb2tlLXRlc3QgZGVjbGFyYXRpb24uIFRvZGF5IGEgYmFyZSBjb21tYW5kIHN0cmluZzsgc3RvcmVkIGFzXG4gKiBKU09OQiBzbyBhIHN0cnVjdHVyZWQgZm9ybSBjYW4gZm9sbG93IHdpdGhvdXQgYW5vdGhlciBjb2x1bW4uXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpblNtb2tlVGVzdCA9IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKiogQSBjdXJhdGVkIGljb246IGEga2V5IGludG8gdGhlIGN1cmF0ZWQgc2V0LCBwbHVzIGFuIG9wdGlvbmFsIGJhZGdlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5JY29uIHtcbiAga2V5OiBzdHJpbmc7XG4gIGJhZGdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0b3JhZ2Uga2V5cyBvZiBhbiB1cGxvYWRlZCBpY29uJ3MgcmUtZW5jb2RlZCBXZWJQIHJlbmRpdGlvbnMgKGltYWdlLXJlZ2lzdHJ5XG4gKiBkZWNvZGVzICsgcmUtZW5jb2RlcyBldmVyeSB1cGxvYWQ7IHRoZSByYXcgZmlsZSBhbmQgU1ZHIGFyZSBuZXZlciBzdG9yZWQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpblVwbG9hZGVkSWNvbiB7XG4gIGtleTI1Njogc3RyaW5nO1xuICBrZXk2NDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRhYmxlIGZvciBzdG9yaW5nIHJldXNhYmxlIHBsdWdpbiBjb25maWd1cmF0aW9ucy5cbiAqIFBsdWdpbnMgZGVmaW5lIHRoZSBiZWhhdmlvciBvZiBzeW50aC9idWlsZCBzdGVwcyBpbiBDREsgcGlwZWxpbmVzLlxuICpcbiAqIEZlYXR1cmVzICogLSBWZXJzaW9uaW5nIHN1cHBvcnQgd2l0aCBzZW1hbnRpYyB2ZXJzaW9uaW5nXG4gKiAtIEFjY2VzcyBjb250cm9sIHZpYSBvcmdJZCBhbmQgdGhlIHRocmVlLXJ1bmcgYHZpc2liaWxpdHlgIGxhZGRlclxuICogLSBGdWxsIGF1ZGl0IHRyYWlsIChjcmVhdGVkL3VwZGF0ZWQgYnkvYXQpXG4gKiAtIEZsZXhpYmxlIG1ldGFkYXRhIHN0b3JhZ2UgdmlhIEpTT05CXG4gKiAtIFN1cHBvcnQgZm9yIGJvdGggU2hlbGxTdGVwIGFuZCBDb2RlQnVpbGRTdGVwIHR5cGVzXG4gKlxuICogQHRhYmxlIHBsdWdpbnNcbiAqL1xuZXhwb3J0IGNvbnN0IHBsdWdpbiA9IHBnVGFibGUoJ3BsdWdpbnMnLCB7XG4gIC8vIFByaW1hcnkga2V5XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG5cbiAgLy8gT3JnYW5pemF0aW9uIGFuZCBhY2Nlc3MgY29udHJvbFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBdWRpdCBmaWVsZHNcbiAgY3JlYXRlZEJ5OiB0ZXh0KCdjcmVhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEJ5OiB0ZXh0KCd1cGRhdGVkX2J5JylcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSlcbiAgICAuZGVmYXVsdE5vdygpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBDb3JlIHBsdWdpbiBpbmZvcm1hdGlvblxuICBuYW1lOiB2YXJjaGFyKCduYW1lJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICBrZXl3b3JkczoganNvbmIoJ2tleXdvcmRzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICB2ZXJzaW9uOiB2YXJjaGFyKCd2ZXJzaW9uJywgeyBsZW5ndGg6IDUwIH0pXG4gICAgLmRlZmF1bHQoJzEuMC4wJylcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFBsdWdpbiBjbGFzc2lmaWNhdGlvblxuICBjYXRlZ29yeTogdmFyY2hhcignY2F0ZWdvcnknLCB7IGxlbmd0aDogNTAgfSlcbiAgICAuZGVmYXVsdCgndW5rbm93bicpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBQbHVnaW4gY29uZmlndXJhdGlvblxuICBtZXRhZGF0YToganNvbmIoJ21ldGFkYXRhJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBwbHVnaW5UeXBlOiB2YXJjaGFyKCdwbHVnaW5fdHlwZScsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC4kdHlwZTxQbHVnaW5UeXBlPigpXG4gICAgLmRlZmF1bHQoJ0NvZGVCdWlsZFN0ZXAnIGFzIFBsdWdpblR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY29tcHV0ZVR5cGU6IHZhcmNoYXIoJ2NvbXB1dGVfdHlwZScsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC4kdHlwZTxDb21wdXRlVHlwZT4oKVxuICAgIC5kZWZhdWx0KCdTTUFMTCcgYXMgQ29tcHV0ZVR5cGUpXG4gICAgLm5vdE51bGwoKSxcbiAgdGltZW91dDogaW50ZWdlcigndGltZW91dCcpLFxuICBmYWlsdXJlQmVoYXZpb3I6IHZhcmNoYXIoJ2ZhaWx1cmVfYmVoYXZpb3InLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8J2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc+KClcbiAgICAuZGVmYXVsdCgnZmFpbCcpXG4gICAgLm5vdE51bGwoKSxcbiAgc2VjcmV0czoganNvbmIoJ3NlY3JldHMnKVxuICAgIC4kdHlwZTxQbHVnaW5TZWNyZXRbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG4gIHByaW1hcnlPdXRwdXREaXJlY3Rvcnk6IHZhcmNoYXIoJ3ByaW1hcnlfb3V0cHV0X2RpcmVjdG9yeScsIHsgbGVuZ3RoOiAyOCB9KSxcblxuICAvLyBCdWlsZCBjb25maWd1cmF0aW9uXG4gIGVudjoganNvbmIoJ2VudicpXG4gICAgLiR0eXBlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBidWlsZEFyZ3M6IGpzb25iKCdidWlsZF9hcmdzJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIGluc3RhbGxDb21tYW5kczogdGV4dCgnaW5zdGFsbF9jb21tYW5kcycpXG4gICAgLmFycmF5KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICBjb21tYW5kczogdGV4dCgnY29tbWFuZHMnKVxuICAgIC5hcnJheSgpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBTcGVjIGNvbnRyYWN0LCBwZXJzaXN0ZWQgKG5vdCBqdXN0IHZhbGlkYXRlZCBhdCB1cGxvYWQpOiB0aGVcbiAgLy8gYHt7IHBpcGVsaW5lLm1ldGFkYXRhLlggfX1gIC8gYHt7IHBpcGVsaW5lLnZhcnMuWCB9fWAga2V5cyBhIHBpcGVsaW5lIG11c3RcbiAgLy8gc3VwcGx5LCB0aGVpciBkZWNsYXJlZCBjb2VyY2lvbiB0eXBlcywgdGhlIHNtb2tlIHRlc3QsIGFuZCB0aGUgZGVjbGFyZWRcbiAgLy8gb3V0Ym91bmQgaG9zdG5hbWVzIChzcGVjIGBuZXR3b3JrLmVncmVzc2ApIHNob3duIHRvIGNvbnN1bWVycy5cbiAgcmVxdWlyZWRNZXRhZGF0YToganNvbmIoJ3JlcXVpcmVkX21ldGFkYXRhJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICByZXF1aXJlZFZhcnM6IGpzb25iKCdyZXF1aXJlZF92YXJzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuICBtZXRhZGF0YVR5cGVzOiBqc29uYignbWV0YWRhdGFfdHlwZXMnKVxuICAgIC4kdHlwZTxSZWNvcmQ8c3RyaW5nLCBQbHVnaW5Db250cmFjdFZhbHVlVHlwZT4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICB2YXJzVHlwZXM6IGpzb25iKCd2YXJzX3R5cGVzJylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgUGx1Z2luQ29udHJhY3RWYWx1ZVR5cGU+PigpXG4gICAgLmRlZmF1bHQoe30pXG4gICAgLm5vdE51bGwoKSxcbiAgc21va2VUZXN0OiBqc29uYignc21va2VfdGVzdCcpLiR0eXBlPFBsdWdpblNtb2tlVGVzdD4oKSxcbiAgbmV0d29ya0VncmVzczoganNvbmIoJ25ldHdvcmtfZWdyZXNzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIERvY3VtZW50YXRpb24uIFRoZSBSRUFETUUgaXMga2VwdCBhcyBzb3VyY2UgbWFya2Rvd24gQU5EIHByZS1zYW5pdGl6ZWRcbiAgLy8gSFRNTCAocmVuZGVyZWQgb25jZSBhdCB1cGxvYWQpLCBzbyBubyByZWFkIHBhdGggcmVuZGVycyB1bnRydXN0ZWQgbWFya2Rvd24uXG4gIHJlYWRtZU1kOiB0ZXh0KCdyZWFkbWVfbWQnKSxcbiAgcmVhZG1lSHRtbDogdGV4dCgncmVhZG1lX2h0bWwnKSxcbiAgLy8gU1BEWCBsaWNlbnNlIGlkZW50aWZpZXIuXG4gIGxpY2Vuc2U6IHZhcmNoYXIoJ2xpY2Vuc2UnLCB7IGxlbmd0aDogNjQgfSksXG4gIGNoYW5nZWxvZzogdGV4dCgnY2hhbmdlbG9nJyksXG4gIGhvbWVwYWdlVXJsOiB2YXJjaGFyKCdob21lcGFnZV91cmwnLCB7IGxlbmd0aDogMjA0OCB9KSxcbiAgc291cmNlVXJsOiB2YXJjaGFyKCdzb3VyY2VfdXJsJywgeyBsZW5ndGg6IDIwNDggfSksXG4gIGljb246IGpzb25iKCdpY29uJykuJHR5cGU8UGx1Z2luSWNvbj4oKSxcbiAgdXBsb2FkZWRJY29uOiBqc29uYigndXBsb2FkZWRfaWNvbicpLiR0eXBlPFBsdWdpblVwbG9hZGVkSWNvbj4oKSxcblxuICAvLyBDYXRhbG9nIG1ldGFkYXRhOiBkZXRlY3RlZCBmcm9tIHRoZSBwYWNrYWdlIChzcGVjLCBSRUFETUUsXG4gIC8vIHRoZSBwbHVnaW4ncyBvd24gRG9ja2VyZmlsZSBPQ0kgbGFiZWxzKSwgdGhlbiBhY2NlcHRlZCBvciBlZGl0ZWQgYnkgdGhlXG4gIC8vIHVzZXIuIGBzdW1tYXJ5YCBpcyB0aGUgY2FyZCBvbmUtbGluZXI7IGBkaXNwbGF5TmFtZWAgZmFsbHMgYmFjayB0b1xuICAvLyBgbmFtZWAgd2hlbiB1bnNldC4gYG1ldGFkYXRhU291cmNlc2AgcmVjb3JkcywgcGVyIGRlc2NyaXB0aXZlIGZpZWxkLCB3aGVyZVxuICAvLyBpdHMgdmFsdWUgY2FtZSBmcm9tIChgc3BlYyB8IHJlYWRtZSB8IGRvY2tlcmZpbGUgfCBkZXJpdmVkIHwgdXNlcmApIHNvIGFcbiAgLy8gcmV2aWV3ZXIgY2FuIHNlZSB3aGF0IHdhcyB0eXBlZCByYXRoZXIgdGhhbiBzaGlwcGVkIGluIHRoZSBwYWNrYWdlLlxuICBzdW1tYXJ5OiB2YXJjaGFyKCdzdW1tYXJ5JywgeyBsZW5ndGg6IDE2MCB9KSxcbiAgZGlzcGxheU5hbWU6IHZhcmNoYXIoJ2Rpc3BsYXlfbmFtZScsIHsgbGVuZ3RoOiAxMDAgfSksXG4gIGRvY3VtZW50YXRpb25Vcmw6IHZhcmNoYXIoJ2RvY3VtZW50YXRpb25fdXJsJywgeyBsZW5ndGg6IDIwNDggfSksXG4gIG1ldGFkYXRhU291cmNlczoganNvbmIoJ21ldGFkYXRhX3NvdXJjZXMnKVxuICAgIC4kdHlwZTxNZXRhZGF0YVNvdXJjZXM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIERvY2tlciBjb25maWd1cmF0aW9uXG4gIGRvY2tlcmZpbGU6IHRleHQoJ2RvY2tlcmZpbGUnKSxcbiAgYnVpbGRUeXBlOiB2YXJjaGFyKCdidWlsZF90eXBlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLmRlZmF1bHQoJ2J1aWxkX2ltYWdlJylcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFN1cHBseSBjaGFpbi4gU2V0IGJ5IHRoZSBidWlsZCB3b3JrZXIgb25jZSB0aGUgaW1hZ2UgaXMgcHVzaGVkLCBzaWduZWQgYW5kXG4gIC8vIGNhcnJpZXMgaXRzIFNCT00gYXR0ZXN0YXRpb247IE5VTEwgZm9yIHBsdWdpbnMgdGhhdCBwcm9kdWNlIG5vIGltYWdlXG4gIC8vIChtZXRhZGF0YV9vbmx5LCBhcHByb3ZhbCBzdGVwcykuIGBpbWFnZURpZ2VzdGAgaXMgd2hhdCBzeW50aCBwaW5zIENvZGVCdWlsZFxuICAvLyB0byAoYDxyZXBvPkBzaGEyNTY64oCmYCkg4oCUIG5ldmVyIHRoZSBtdXRhYmxlIGBuYW1lOnZlcnNpb25gIHRhZy5cbiAgLy8gYGltYWdlU291cmNlYCBzZXBhcmF0ZXMgYW4gaW1hZ2UgdGhpcyBwbGF0Zm9ybSBCVUlMVCAoQnVpbGRLaXQgcHJvdmVuYW5jZVxuICAvLyBhdHRhY2hlZCkgZnJvbSBhbiBVUExPQURFRCBgaW1hZ2UudGFyYCB3aG9zZSBidWlsZCBpdCBuZXZlciBzYXcuXG4gIGltYWdlRGlnZXN0OiB2YXJjaGFyKCdpbWFnZV9kaWdlc3QnLCB7IGxlbmd0aDogNzEgfSksXG4gIGltYWdlU291cmNlOiB2YXJjaGFyKCdpbWFnZV9zb3VyY2UnLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8SW1hZ2VTb3VyY2U+KCksXG5cbiAgLy8gVnVsbmVyYWJpbGl0eSBzY2FuIChncnlwZSBvdmVyIHRoZSBTQk9NIGF0IGJ1aWxkOyBuaWdodGx5IHJlc2NhbikgYW5kIHRoZVxuICAvLyBpbWFnZSdzIGVmZmVjdGl2ZSBVU0VSLiBOVUxMID0gbm90IHNjYW5uZWQgLyBwcm9kdWNlcyBubyBpbWFnZS5cbiAgdnVsbkNyaXRpY2FsOiBpbnRlZ2VyKCd2dWxuX2NyaXRpY2FsJyksXG4gIHZ1bG5IaWdoOiBpbnRlZ2VyKCd2dWxuX2hpZ2gnKSxcbiAgdnVsbk1lZGl1bTogaW50ZWdlcigndnVsbl9tZWRpdW0nKSxcbiAgdnVsbkxvdzogaW50ZWdlcigndnVsbl9sb3cnKSxcbiAgLy8gT2YgdGhlIGNyaXRpY2FsL2hpZ2ggZmluZGluZ3MsIHRob3NlIGdyeXBlIHJlcG9ydHMgYSBmaXhlZCB2ZXJzaW9uIGZvciDigJRcbiAgLy8gd2hhdCB0aGUgcGxhdGZvcm0gZmxvb3IgKFBMVUdJTl9WVUxOX01BWF9DUklUSUNBTCkgZ2F0ZXMgb24uIE5VTEwgPSB1bnNjYW5uZWQuXG4gIHZ1bG5Dcml0aWNhbEZpeGFibGU6IGludGVnZXIoJ3Z1bG5fY3JpdGljYWxfZml4YWJsZScpLFxuICB2dWxuSGlnaEZpeGFibGU6IGludGVnZXIoJ3Z1bG5faGlnaF9maXhhYmxlJyksXG4gIHNjYW5uZWRBdDogdGltZXN0YW1wKCdzY2FubmVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIC8vIFNldCBieSB0aGUgbmlnaHRseSByZXNjYW4gd2hpbGUgdGhpcyB2ZXJzaW9uJ3MgZml4YWJsZSBjcml0aWNhbHMgZXhjZWVkIHRoZVxuICAvLyBmbG9vciAoY2xlYXJlZCB3aGVuIHJlc29sdmVkKTogdGhlIGNvdW50cyBhbmQgdG9wIGZpbmRpbmdzIGF0IHRoYXQgcmVzY2FuLlxuICBzY2FuRmxhZ2dlZEF0OiB0aW1lc3RhbXAoJ3NjYW5fZmxhZ2dlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBzY2FuRmxhZzoganNvbmIoJ3NjYW5fZmxhZycpLiR0eXBlPFBsdWdpblNjYW5GbGFnPigpLFxuICAvKipcbiAgICogVGhlIExBU1QgcmVzY2FuJ3MgZmluZGluZ3MgZm9yIHRoaXMgdmVyc2lvbiwgd3JpdHRlbiB3aGV0aGVyIG9yIG5vdCB0aGVcbiAgICogZ2F0aW5nIGZsYWcgdHJpcHBlZC5cbiAgICpcbiAgICogYHNjYW5fZmxhZ2AgaXMgc2V0IG9ubHkgd2hpbGUgZml4YWJsZSBjcml0aWNhbHMgZXhjZWVkXG4gICAqIFBMVUdJTl9WVUxOX01BWF9DUklUSUNBTCwgc28gYSB2ZXJzaW9uIGNhcnJ5aW5nIG9ubHkgSGlnaCBmaW5kaW5ncyBzdG9yZXNcbiAgICogbm90aGluZyDigJQgYW5kIHRoZSB2dWxuZXJhYmlsaXR5IHJlcG9ydCBzZWN0aW9uLCB3aG9zZSB3aG9sZSBqb2IgaXMgdG8gc2hvd1xuICAgKiBDcml0aWNhbCBBTkQgSGlnaCBleHBvc3VyZSwgaGFkIG5vIHNvdXJjZSB0byByZWFkLiBUaGlzIGhvbGRzIHRoZSBjb3VudHMgYW5kXG4gICAqIHRoZSB0b3AgZmluZGluZ3MgZm9yIGV2ZXJ5IGluLXVzZSB2ZXJzaW9uLCBpbmRlcGVuZGVudCBvZiB0aGUgZ2F0ZTogd2hhdCBhXG4gICAqIHJlcG9ydCBzaG93cyBhbmQgd2hhdCBhIGJ1aWxkIHJlZnVzZXMgYXJlIGRpZmZlcmVudCBxdWVzdGlvbnMuXG4gICAqL1xuICBzY2FuU3VtbWFyeToganNvbmIoJ3NjYW5fc3VtbWFyeScpLiR0eXBlPFBsdWdpblNjYW5TdW1tYXJ5PigpLFxuICBydW5Bc1Jvb3Q6IGJvb2xlYW4oJ3J1bl9hc19yb290JyksXG5cbiAgLy8gVmVyc2lvbiBsaWZlY3ljbGUuIGBicmVha2luZ2A6IGEgcHVibGlzaGVyLW1hcmtlZCBtYWpvciB0aGF0IGBsYXRlc3RgXG4gIC8vIGluc3RhbGxzIG5ldmVyIGNyb3NzIHdpdGhvdXQgcmUtYXBwcm92YWwuIGBmcm96ZW5BdGA6IHNldCB0aGUgbW9tZW50IGFcbiAgLy8gcHVibGlzaCByZXF1ZXN0IHJlZmVyZW5jZXMgdGhpcyB2ZXJzaW9uIOKAlCByZS11cGxvYWRpbmcgaXQgaXMgdGhlbiByZWZ1c2VkXG4gIC8vICg0MDkpLiBZYW5rIC8gZGVwcmVjYXRpb24gY2FycnkgdGhlaXIgcmVhc29uIGFsb25nc2lkZSB0aGUgdGltZXN0YW1wLlxuICBicmVha2luZzogYm9vbGVhbignYnJlYWtpbmcnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGZyb3plbkF0OiB0aW1lc3RhbXAoJ2Zyb3plbl9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICB5YW5rZWRBdDogdGltZXN0YW1wKCd5YW5rZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgeWFua1JlYXNvbjogdGV4dCgneWFua19yZWFzb24nKSxcbiAgZGVwcmVjYXRlZEF0OiB0aW1lc3RhbXAoJ2RlcHJlY2F0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZGVwcmVjYXRpb25NZXNzYWdlOiB0ZXh0KCdkZXByZWNhdGlvbl9tZXNzYWdlJyksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIG1ldGFkYXRhIChvd25lcnNoaXAgLyBsaWZlY3ljbGUgLyBjbGFzc2lmaWNhdGlvbikuXG4gIC8vIG93bmVySWQgZGVmYXVsdHMgdG8gdGhlIGNyZWF0aW5nIHVzZXIgKHNldCBhdCBpbnNlcnQpLCBzbyBldmVyeSBwbHVnaW4gaGFzXG4gIC8vIGFuIG93bmVyIGZvciBcIm15IHNlcnZpY2VzXCIgdmlld3M7IG93bmVyVHlwZSBkaXN0aW5ndWlzaGVzIHVzZXIgdnMgdGVhbS5cbiAgb3duZXJJZDogdGV4dCgnb3duZXJfaWQnKSxcbiAgb3duZXJUeXBlOiB2YXJjaGFyKCdvd25lcl90eXBlJywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPE93bmVyVHlwZT4oKSxcbiAgbGlmZWN5Y2xlOiB2YXJjaGFyKCdsaWZlY3ljbGUnLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuJHR5cGU8UGx1Z2luTGlmZWN5Y2xlPigpXG4gICAgLmRlZmF1bHQoJ3Byb2R1Y3Rpb24nIGFzIFBsdWdpbkxpZmVjeWNsZSlcbiAgICAubm90TnVsbCgpLFxuICBjcml0aWNhbGl0eTogdmFyY2hhcignY3JpdGljYWxpdHknLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8Q3JpdGljYWxpdHk+KCksXG4gIGxhYmVsczoganNvbmIoJ2xhYmVscycpXG4gICAgLiR0eXBlPEVudGl0eUxhYmVscz4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIGxpbmtzOiBqc29uYignbGlua3MnKVxuICAgIC4kdHlwZTxFbnRpdHlMaW5rW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEFjY2VzcyBhbmQgdmlzaWJpbGl0eSDigJQgdGhlIHNoYXJlZCB0aHJlZS1ydW5nIGxhZGRlciAoc2VlIGFwaS1jb3JlJ3NcbiAgLy8gYFZpc2liaWxpdHlgKTogYHByaXZhdGVgIGlzIGF1dGhvci1vbmx5IChgY3JlYXRlZF9ieWApLCBgb3JnYCBpcyB0aGUgd2hvbGVcbiAgLy8gb3duaW5nIG9yZywgYHB1YmxpY2AgcmVhY2hlcyB0aGUgb3JnJ3MgdGVhbXMgYW5kIOKAlCBmcm9tIHRoZSBzeXN0ZW0gb3JnIOKAlFxuICAvLyBldmVyeSBvcmcuIENvbnN0cmFpbmVkIGF0IHRoZSBTUUwgbGF5ZXIgdG9vIHZpYSBhIENIRUNLIGluIHBvc3RncmVzLWluaXQuc3FsXG4gIC8vIHNvIGEgdHlwbyBjYW4ndCBzbmVhayBwYXN0IHRoZSBhcHBsaWNhdGlvbiBsYXllci5cbiAgdmlzaWJpbGl0eTogdmFyY2hhcigndmlzaWJpbGl0eScsIHsgbGVuZ3RoOiAxMCB9KVxuICAgIC4kdHlwZTxWaXNpYmlsaXR5PigpXG4gICAgLmRlZmF1bHQoJ3ByaXZhdGUnKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzRGVmYXVsdDogYm9vbGVhbignaXNfZGVmYXVsdCcpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLm5vdE51bGwoKSxcbiAgaXNBY3RpdmU6IGJvb2xlYW4oJ2lzX2FjdGl2ZScpXG4gICAgLmRlZmF1bHQodHJ1ZSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIERlbGV0aW9uIHRyYWNraW5nIChzb2Z0IGRlbGV0ZSlcbiAgZGVsZXRlZEF0OiB0aW1lc3RhbXAoJ2RlbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZGVsZXRlZEJ5OiB0ZXh0KCdkZWxldGVkX2J5JyksXG4gIC8vIFNvZnQtZGVsZXRlIHB1cmdlIGRlYWRsaW5lOiB0aGUgcmV0ZW50aW9uIHN3ZWVwIGhhcmQtZGVsZXRlcyB0b21ic3RvbmVkXG4gIC8vIHJvd3Mgb25jZSBgcHVyZ2VfYWZ0ZXJgIGhhcyBwYXNzZWQgKHNldCBvbiBkZWxldGUgYWxvbmdzaWRlIGRlbGV0ZWRfYXQpLlxuICBwdXJnZUFmdGVyOiB0aW1lc3RhbXAoJ3B1cmdlX2FmdGVyJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG5cbiAgLy8gVGhlIHF1b3RhIHBlcmlvZCAoYHJlc2V0QXRgKSB0aGlzIHZlcnNpb24ncyBgcGx1Z2luc2Agc2xvdCB3YXMgY2hhcmdlZCB0b1xuICAvLyBhdCB1cGxvYWQ7IE5VTEwgd2hlbiBubyBzbG90IHdhcyBjaGFyZ2VkIChzeXN0ZW0gY2F0YWxvZyBsb2Fkcykgb3IgaXQgd2FzXG4gIC8vIGFscmVhZHkgcmVmdW5kZWQuIEEgZGVsZXRlL3B1cmdlIHJlZnVuZHMgQ09ORElUSU9OQUxMWSBvbiBpdCAodGhlIHF1b3RhXG4gIC8vIHNlcnZpY2UgaWdub3JlcyB0aGUgcmVmdW5kIG9uY2UgdGhhdCBwZXJpb2QgaGFzIHJvbGxlZCBvdmVyKSwgdGhlbiBjbGVhcnMgaXQuXG4gIHF1b3RhUmVzZXRBdDogdGltZXN0YW1wKCdxdW90YV9yZXNldF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXAuXG4gIHB1cmdlSWR4OiBpbmRleCgncGx1Z2luX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIE1pcnJvcnMgdGhlIGluZGV4ZXMgcG9zdGdyZXMtaW5pdC5zcWwgY3JlYXRlcywgbmFtZSBmb3IgbmFtZSAodGhlIFNRTCBmaWxlIGlzXG4gIC8vIHdoYXQgZGVwbG95czsgc2NoZW1hLXJlZmxlY3Rpb24udGVzdC50cyBrZWVwcyB0aGUgdHdvIGluIGxvY2stc3RlcCkuXG4gIG9yZ0lkSWR4OiBpbmRleCgnaWR4X3BsdWdpbnNfb3JnX2lkJykub24odGFibGUub3JnSWQpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgbmFtZUlkeDogaW5kZXgoJ2lkeF9wbHVnaW5zX25hbWUnKS5vbih0YWJsZS5uYW1lKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIG5hbWVWZXJzaW9uSWR4OiBpbmRleCgnaWR4X3BsdWdpbnNfbmFtZV92ZXJzaW9uJykub24odGFibGUubmFtZSwgdGFibGUudmVyc2lvbikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICB2aXNpYmlsaXR5SWR4OiBpbmRleCgnaWR4X3BsdWdpbnNfdmlzaWJpbGl0eScpLm9uKHRhYmxlLnZpc2liaWxpdHkpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgaXNEZWZhdWx0SWR4OiBpbmRleCgnaWR4X3BsdWdpbnNfaXNfZGVmYXVsdCcpLm9uKHRhYmxlLm5hbWUsIHRhYmxlLmlzRGVmYXVsdCkud2hlcmUoc3FsYGlzX2RlZmF1bHQgPSB0cnVlIEFORCBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgY2F0ZWdvcnlJZHg6IGluZGV4KCdpZHhfcGx1Z2luc19jYXRlZ29yeScpLm9uKHRhYmxlLmNhdGVnb3J5KSxcbiAgYWN0aXZlSWR4OiBpbmRleCgnaWR4X3BsdWdpbnNfaXNfYWN0aXZlJykub24odGFibGUuaXNBY3RpdmUpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgb3JnQ3JlYXRlZElkeDogaW5kZXgoJ2lkeF9wbHVnaW5zX29yZ19jcmVhdGVkJykub24odGFibGUub3JnSWQsIHNxbGAke3RhYmxlLmNyZWF0ZWRBdH0gREVTQ2ApLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgb3JnTmFtZUlkeDogaW5kZXgoJ2lkeF9wbHVnaW5zX29yZ19uYW1lJykub24odGFibGUub3JnSWQsIHRhYmxlLm5hbWUpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5VTExgKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgaW5kZXhlczogXCJteSBzZXJ2aWNlc1wiIChvd25lcikgKyBsaWZlY3ljbGUgZmlsdGVyLlxuICBvd25lcklkeDogaW5kZXgoJ3BsdWdpbl9vd25lcl9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUub3duZXJJZCksXG4gIGxpZmVjeWNsZUlkeDogaW5kZXgoJ3BsdWdpbl9saWZlY3ljbGVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmxpZmVjeWNsZSksXG5cbiAgLy8gQ29tcG9zaXRlIGluZGV4IGZvciBmaWx0ZXJlZCBxdWVyaWVzIChvcmdJZCArIHZpc2liaWxpdHkgKyBpc0FjdGl2ZSlcbiAgb3JnVmlzaWJpbGl0eUFjdGl2ZUlkeDogaW5kZXgoJ3BsdWdpbl9vcmdfdmlzaWJpbGl0eV9hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnZpc2liaWxpdHksIHRhYmxlLmlzQWN0aXZlKSxcbiAgLy8gRHJpdmVzIHRoZSBcIm15IHByaXZhdGUgZHJhZnRzXCIgbGVnIG9mIHRoZSB2aXNpYmlsaXR5IHByZWRpY2F0ZS5cbiAgY3JlYXRlZEJ5SWR4OiBpbmRleCgncGx1Z2luX2NyZWF0ZWRfYnlfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRCeSksXG5cbiAgLy8gVW5pcXVlIGNvbnN0cmFpbnQgb24gbmFtZSArIHZlcnNpb24gKyBvcmdJZFxuICBuYW1lVmVyc2lvbk9yZ1VuaXF1ZTogdW5pcXVlSW5kZXgoJ3BsdWdpbl9uYW1lX3ZlcnNpb25fb3JnX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLm5hbWUsIHRhYmxlLnZlcnNpb24sIHRhYmxlLm9yZ0lkKSxcblxuICAvLyBDaGVjayBjb25zdHJhaW50c1xuICB2ZXJzaW9uQ2hlY2s6IGNoZWNrKCAncGx1Z2luX3ZlcnNpb25fY2hlY2snLFxuICAgIHNxbGAke3RhYmxlLnZlcnNpb259IH4gJ15bMC05XStcXC5bMC05XStcXC5bMC05XSsoLVthLXpBLVowLTkuLV0rKT8oXFwrW2EtekEtWjAtOS4tXSspPyQnYCxcbiAgKSxcbiAgaW1hZ2VEaWdlc3RDaGVjazogY2hlY2soJ3BsdWdpbl9pbWFnZV9kaWdlc3RfY2hlY2snLFxuICAgIHNxbGAke3RhYmxlLmltYWdlRGlnZXN0fSBJUyBOVUxMIE9SICR7dGFibGUuaW1hZ2VEaWdlc3R9IH4gJ15zaGEyNTY6WzAtOWEtZl17NjR9JCdgLFxuICApLFxuICBpbWFnZVNvdXJjZUNoZWNrOiBjaGVjaygncGx1Z2luX2ltYWdlX3NvdXJjZV9jaGVjaycsXG4gICAgc3FsYCR7dGFibGUuaW1hZ2VTb3VyY2V9IElTIE5VTEwgT1IgJHt0YWJsZS5pbWFnZVNvdXJjZX0gSU4gKCdidWlsdCcsICd1cGxvYWRlZCcpYCxcbiAgKSxcbn0pKTtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IHR5cGVzIHJlcHJlc2VudGluZyBkYXRhYmFzZSByb3dzXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpbiA9IHR5cGVvZiBwbHVnaW4uJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGx1Z2luSW5zZXJ0ID0gdHlwZW9mIHBsdWdpbi4kaW5mZXJJbnNlcnQ7XG5cbi8qKlxuICogSGVscGVyIHR5cGVzIGZvciB3b3JraW5nIHdpdGggcGFydGlhbCB1cGRhdGVzXG4gKi9cbmV4cG9ydCB0eXBlIFBsdWdpblVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQbHVnaW5JbnNlcnQsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICdjcmVhdGVkQnknPj47XG4iXX0=
268
+ /**
269
+ * Gate-refused images from the SETUP catalog load, kept signed in the registry
270
+ * for promotion instead of discarded (docs/plugin-publishing.md "Scan gates").
271
+ * Written by the build worker for a system-org upload marked `setupLoad`;
272
+ * promoted (re-gated, then saved through the build's own success path) or
273
+ * discarded after `PLUGIN_KEPT_SETUP_IMAGE_TTL_DAYS`. System org only — listed
274
+ * in the org cascade for its schema-reflection guard, but the cascade never
275
+ * deletes the system org, so it never matches a row.
276
+ *
277
+ * @table plugin_kept_setup_images
278
+ */
279
+ export const pluginKeptSetupImage = pgTable('plugin_kept_setup_images', {
280
+ id: uuid('id').primaryKey().defaultRandom(),
281
+ orgId: varchar('org_id', { length: 255 }).notNull(),
282
+ pluginName: varchar('plugin_name', { length: 255 }).notNull(),
283
+ pluginVersion: varchar('plugin_version', { length: 50 }).notNull(),
284
+ imageDigest: varchar('image_digest', { length: 71 }).notNull(),
285
+ imageSource: varchar('image_source', { length: 10 }).$type().notNull(),
286
+ refusalCode: varchar('refusal_code', { length: 64 }).notNull(),
287
+ refusalMessage: text('refusal_message').notNull(),
288
+ refusalFindings: jsonb('refusal_findings').$type().default([]).notNull(),
289
+ build: jsonb('build').$type().notNull(),
290
+ keptBy: text('kept_by').notNull(),
291
+ keptAt: timestamp('kept_at', { withTimezone: true }).defaultNow().notNull(),
292
+ expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
293
+ }, (table) => ({
294
+ identityIdx: uniqueIndex('plugin_kept_setup_image_identity_idx').on(table.orgId, table.pluginName, table.pluginVersion, table.imageDigest),
295
+ expiresIdx: index('plugin_kept_setup_image_expires_idx').on(table.expiresAt),
296
+ imageDigestCheck: check('plugin_kept_setup_image_digest_check', sql `${table.imageDigest} ~ '^sha256:[0-9a-f]{64}$'`),
297
+ imageSourceCheck: check('plugin_kept_setup_image_source_check', sql `${table.imageSource} IN ('built', 'uploaded')`),
298
+ }));
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3NjaGVtYS9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsV0FBVyxFQUFFLFVBQVUsRUFBRSxhQUFhLEdBRXZDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBbURsSTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFO0lBQ3ZDLGNBQWM7SUFDZCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRTtJQUUzQyxrQ0FBa0M7SUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDdEMsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFFWixlQUFlO0lBQ2YsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUN0QixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN2RCxVQUFVLEVBQUU7U0FDWixPQUFPLEVBQUU7SUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMs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QUMxSSxVQUFVLEVBQUUsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDNUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsQ0FBQSxHQUFHLEtBQUssQ0FBQyxXQUFXLDRCQUE0QixDQUFDO0lBQ3BILGdCQUFnQixFQUFFLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLENBQUEsR0FBRyxLQUFLLENBQUMsV0FBVywyQkFBMkIsQ0FBQztDQUNwSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQge1xuICBDb21wdXRlVHlwZSwgUGx1Z2luVHlwZSwgU1lTVEVNX09SR19JRCwgdHlwZSBDcml0aWNhbGl0eSwgdHlwZSBFbnRpdHlMYWJlbHMsIHR5cGUgRW50aXR5TGluaywgdHlwZSBMaWZlY3ljbGUsXG4gIHR5cGUgTWV0YWRhdGFTb3VyY2VzLCB0eXBlIE93bmVyVHlwZSwgdHlwZSBQbHVnaW5TY2FuRmxhZywgdHlwZSBQbHVnaW5TY2FuU3VtbWFyeSwgdHlwZSBWaXNpYmlsaXR5LFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBib29sZWFuLCBpbnRlZ2VyLCB2YXJjaGFyLCBwZ1RhYmxlLCB0ZXh0LCB0aW1lc3RhbXAsIHV1aWQsIGpzb25iLCBpbmRleCwgdW5pcXVlSW5kZXgsIGNoZWNrIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSc7XG5cbi8qKlxuICogU2VjcmV0IHJlcXVpcmVtZW50IGZvciBhIHBsdWdpbi5cbiAqIERlY2xhcmVzIG5hbWVkIHNlY3JldHMgdGhlIHBsdWdpbiBleHBlY3RzIGF0IGJ1aWxkIHRpbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luU2VjcmV0IHtcbiAgbmFtZTogc3RyaW5nO1xuICByZXF1aXJlZDogYm9vbGVhbjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hlcmUgYSBwbHVnaW4ncyBpbWFnZSBjYW1lIGZyb206IGBidWlsdGAgYnkgdGhlIHBsYXRmb3JtJ3MgQnVpbGRLaXQgKGNhcnJpZXNcbiAqIFNMU0EgcHJvdmVuYW5jZSkgb3IgYHVwbG9hZGVkYCBhcyBhIHByZWJ1aWx0IGBpbWFnZS50YXJgIChTQk9NICsgc2lnbmF0dXJlXG4gKiBvbmx5IOKAlCB0aGUgcGxhdGZvcm0gbmV2ZXIgc2F3IHRoZSBidWlsZCkuXG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlU291cmNlID0gJ2J1aWx0JyB8ICd1cGxvYWRlZCc7XG5cbi8qKlxuICogUGx1Z2luIGxpZmVjeWNsZTogdGhlIHNoYXJlZCBjYXRhbG9nIHtAbGluayBMaWZlY3ljbGV9IHBsdXMgYHlhbmtlZGAsIHdoaWNoXG4gKiBvbmx5IHBsdWdpbiB2ZXJzaW9ucyBjYW4gcmVhY2ggKGEgeWFua2VkIHZlcnNpb24gc3RvcHMgcmVzb2x2aW5nIGZvciBuZXdcbiAqIHN5bnRocykuIGB5YW5rZWRBdGAgLyBgZGVwcmVjYXRlZEF0YCBhcmUgdGhlIGF1dGhvcml0YXRpdmUgdGltZXN0YW1wczsgdGhlXG4gKiBsaWZlY3ljbGUgdmFsdWUgbWlycm9ycyB0aGVtIGZvciBjYXRhbG9nIGZpbHRlcmluZy5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luTGlmZWN5Y2xlID0gTGlmZWN5Y2xlIHwgJ3lhbmtlZCc7XG5cbi8qKiBDb2VyY2lvbiB0eXBlIGEgYHJlcXVpcmVkTWV0YWRhdGFgIC8gYHJlcXVpcmVkVmFyc2Aga2V5IGlzIGRlY2xhcmVkIGFzLiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luQ29udHJhY3RWYWx1ZVR5cGUgPSAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2wnIHwgJ2pzb24nO1xuXG4vKipcbiAqIFRoZSBzcGVjJ3Mgc21va2UtdGVzdCBkZWNsYXJhdGlvbi4gVG9kYXkgYSBiYXJlIGNvbW1hbmQgc3RyaW5nOyBzdG9yZWQgYXNcbiAqIEpTT05CIHNvIGEgc3RydWN0dXJlZCBmb3JtIGNhbiBmb2xsb3cgd2l0aG91dCBhbm90aGVyIGNvbHVtbi5cbiAqL1xuZXhwb3J0IHR5cGUgUGx1Z2luU21va2VUZXN0ID0gc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKiBBIGN1cmF0ZWQgaWNvbjogYSBrZXkgaW50byB0aGUgY3VyYXRlZCBzZXQsIHBsdXMgYW4gb3B0aW9uYWwgYmFkZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkljb24ge1xuICBrZXk6IHN0cmluZztcbiAgYmFkZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RvcmFnZSBrZXlzIG9mIGFuIHVwbG9hZGVkIGljb24ncyByZS1lbmNvZGVkIFdlYlAgcmVuZGl0aW9ucyAoaW1hZ2UtcmVnaXN0cnlcbiAqIGRlY29kZXMgKyByZS1lbmNvZGVzIGV2ZXJ5IHVwbG9hZDsgdGhlIHJhdyBmaWxlIGFuZCBTVkcgYXJlIG5ldmVyIHN0b3JlZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luVXBsb2FkZWRJY29uIHtcbiAga2V5MjU2OiBzdHJpbmc7XG4gIGtleTY0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGFibGUgZm9yIHN0b3JpbmcgcmV1c2FibGUgcGx1Z2luIGNvbmZpZ3VyYXRpb25zLlxuICogUGx1Z2lucyBkZWZpbmUgdGhlIGJlaGF2aW9yIG9mIHN5bnRoL2J1aWxkIHN0ZXBzIGluIENESyBwaXBlbGluZXMuXG4gKlxuICogRmVhdHVyZXMgKiAtIFZlcnNpb25pbmcgc3VwcG9ydCB3aXRoIHNlbWFudGljIHZlcnNpb25pbmdcbiAqIC0gQWNjZXNzIGNvbnRyb2wgdmlhIG9yZ0lkIGFuZCB0aGUgdGhyZWUtcnVuZyBgdmlzaWJpbGl0eWAgbGFkZGVyXG4gKiAtIEZ1bGwgYXVkaXQgdHJhaWwgKGNyZWF0ZWQvdXBkYXRlZCBieS9hdClcbiAqIC0gRmxleGlibGUgbWV0YWRhdGEgc3RvcmFnZSB2aWEgSlNPTkJcbiAqIC0gU3VwcG9ydCBmb3IgYm90aCBTaGVsbFN0ZXAgYW5kIENvZGVCdWlsZFN0ZXAgdHlwZXNcbiAqXG4gKiBAdGFibGUgcGx1Z2luc1xuICovXG5leHBvcnQgY29uc3QgcGx1Z2luID0gcGdUYWJsZSgncGx1Z2lucycsIHtcbiAgLy8gUHJpbWFyeSBrZXlcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcblxuICAvLyBPcmdhbml6YXRpb24gYW5kIGFjY2VzcyBjb250cm9sXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEF1ZGl0IGZpZWxkc1xuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQnk6IHRleHQoJ3VwZGF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIENvcmUgcGx1Z2luIGluZm9ybWF0aW9uXG4gIG5hbWU6IHZhcmNoYXIoJ25hbWUnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLm5vdE51bGwoKSxcbiAgZGVzY3JpcHRpb246IHRleHQoJ2Rlc2NyaXB0aW9uJyksXG4gIGtleXdvcmRzOiBqc29uYigna2V5d29yZHMnKVxuICAgIC4kdHlwZTxzdHJpbmdbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG4gIHZlcnNpb246IHZhcmNoYXIoJ3ZlcnNpb24nLCB7IGxlbmd0aDogNTAgfSlcbiAgICAuZGVmYXVsdCgnMS4wLjAnKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gUGx1Z2luIGNsYXNzaWZpY2F0aW9uXG4gIGNhdGVnb3J5OiB2YXJjaGFyKCdjYXRlZ29yeScsIHsgbGVuZ3RoOiA1MCB9KVxuICAgIC5kZWZhdWx0KCd1bmtub3duJylcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFBsdWdpbiBjb25maWd1cmF0aW9uXG4gIG1ldGFkYXRhOiBqc29uYignbWV0YWRhdGEnKVxuICAgIC4kdHlwZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIHBsdWdpblR5cGU6IHZhcmNoYXIoJ3BsdWdpbl90eXBlJywgeyBsZW5ndGg6IDUwIH0pXG4gICAgLiR0eXBlPFBsdWdpblR5cGU+KClcbiAgICAuZGVmYXVsdCgnQ29kZUJ1aWxkU3RlcCcgYXMgUGx1Z2luVHlwZSlcbiAgICAubm90TnVsbCgpLFxuICBjb21wdXRlVHlwZTogdmFyY2hhcignY29tcHV0ZV90eXBlJywgeyBsZW5ndGg6IDUwIH0pXG4gICAgLiR0eXBlPENvbXB1dGVUeXBlPigpXG4gICAgLmRlZmF1bHQoJ1NNQUxMJyBhcyBDb21wdXRlVHlwZSlcbiAgICAubm90TnVsbCgpLFxuICB0aW1lb3V0OiBpbnRlZ2VyKCd0aW1lb3V0JyksXG4gIGZhaWx1cmVCZWhhdmlvcjogdmFyY2hhcignZmFpbHVyZV9iZWhhdmlvcicsIHsgbGVuZ3RoOiAxMCB9KVxuICAgIC4kdHlwZTwnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJz4oKVxuICAgIC5kZWZhdWx0KCdmYWlsJylcbiAgICAubm90TnVsbCgpLFxuICBzZWNyZXRzOiBqc29uYignc2VjcmV0cycpXG4gICAgLiR0eXBlPFBsdWdpblNlY3JldFtdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogdmFyY2hhcigncHJpbWFyeV9vdXRwdXRfZGlyZWN0b3J5JywgeyBsZW5ndGg6IDI4IH0pLFxuXG4gIC8vIEJ1aWxkIGNvbmZpZ3VyYXRpb25cbiAgZW52OiBqc29uYignZW52JylcbiAgICAuJHR5cGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIGJ1aWxkQXJnczoganNvbmIoJ2J1aWxkX2FyZ3MnKVxuICAgIC4kdHlwZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigpXG4gICAgLmRlZmF1bHQoe30pXG4gICAgLm5vdE51bGwoKSxcbiAgaW5zdGFsbENvbW1hbmRzOiB0ZXh0KCdpbnN0YWxsX2NvbW1hbmRzJylcbiAgICAuYXJyYXkoKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG4gIGNvbW1hbmRzOiB0ZXh0KCdjb21tYW5kcycpXG4gICAgLmFycmF5KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFNwZWMgY29udHJhY3QsIHBlcnNpc3RlZCAobm90IGp1c3QgdmFsaWRhdGVkIGF0IHVwbG9hZCk6IHRoZVxuICAvLyBge3sgcGlwZWxpbmUubWV0YWRhdGEuWCB9fWAgLyBge3sgcGlwZWxpbmUudmFycy5YIH19YCBrZXlzIGEgcGlwZWxpbmUgbXVzdFxuICAvLyBzdXBwbHksIHRoZWlyIGRlY2xhcmVkIGNvZXJjaW9uIHR5cGVzLCB0aGUgc21va2UgdGVzdCwgYW5kIHRoZSBkZWNsYXJlZFxuICAvLyBvdXRib3VuZCBob3N0bmFtZXMgKHNwZWMgYG5ldHdvcmsuZWdyZXNzYCkgc2hvd24gdG8gY29uc3VtZXJzLlxuICByZXF1aXJlZE1ldGFkYXRhOiBqc29uYigncmVxdWlyZWRfbWV0YWRhdGEnKVxuICAgIC4kdHlwZTxzdHJpbmdbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG4gIHJlcXVpcmVkVmFyczoganNvbmIoJ3JlcXVpcmVkX3ZhcnMnKVxuICAgIC4kdHlwZTxzdHJpbmdbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG4gIG1ldGFkYXRhVHlwZXM6IGpzb25iKCdtZXRhZGF0YV90eXBlcycpXG4gICAgLiR0eXBlPFJlY29yZDxzdHJpbmcsIFBsdWdpbkNvbnRyYWN0VmFsdWVUeXBlPj4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIHZhcnNUeXBlczoganNvbmIoJ3ZhcnNfdHlwZXMnKVxuICAgIC4kdHlwZTxSZWNvcmQ8c3RyaW5nLCBQbHVnaW5Db250cmFjdFZhbHVlVHlwZT4+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBzbW9rZVRlc3Q6IGpzb25iKCdzbW9rZV90ZXN0JykuJHR5cGU8UGx1Z2luU21va2VUZXN0PigpLFxuICBuZXR3b3JrRWdyZXNzOiBqc29uYignbmV0d29ya19lZ3Jlc3MnKVxuICAgIC4kdHlwZTxzdHJpbmdbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRG9jdW1lbnRhdGlvbi4gVGhlIFJFQURNRSBpcyBrZXB0IGFzIHNvdXJjZSBtYXJrZG93biBBTkQgcHJlLXNhbml0aXplZFxuICAvLyBIVE1MIChyZW5kZXJlZCBvbmNlIGF0IHVwbG9hZCksIHNvIG5vIHJlYWQgcGF0aCByZW5kZXJzIHVudHJ1c3RlZCBtYXJrZG93bi5cbiAgcmVhZG1lTWQ6IHRleHQoJ3JlYWRtZV9tZCcpLFxuICByZWFkbWVIdG1sOiB0ZXh0KCdyZWFkbWVfaHRtbCcpLFxuICAvLyBTUERYIGxpY2Vuc2UgaWRlbnRpZmllci5cbiAgbGljZW5zZTogdmFyY2hhcignbGljZW5zZScsIHsgbGVuZ3RoOiA2NCB9KSxcbiAgY2hhbmdlbG9nOiB0ZXh0KCdjaGFuZ2Vsb2cnKSxcbiAgaG9tZXBhZ2VVcmw6IHZhcmNoYXIoJ2hvbWVwYWdlX3VybCcsIHsgbGVuZ3RoOiAyMDQ4IH0pLFxuICBzb3VyY2VVcmw6IHZhcmNoYXIoJ3NvdXJjZV91cmwnLCB7IGxlbmd0aDogMjA0OCB9KSxcbiAgaWNvbjoganNvbmIoJ2ljb24nKS4kdHlwZTxQbHVnaW5JY29uPigpLFxuICB1cGxvYWRlZEljb246IGpzb25iKCd1cGxvYWRlZF9pY29uJykuJHR5cGU8UGx1Z2luVXBsb2FkZWRJY29uPigpLFxuXG4gIC8vIENhdGFsb2cgbWV0YWRhdGE6IGRldGVjdGVkIGZyb20gdGhlIHBhY2thZ2UgKHNwZWMsIFJFQURNRSxcbiAgLy8gdGhlIHBsdWdpbidzIG93biBEb2NrZXJmaWxlIE9DSSBsYWJlbHMpLCB0aGVuIGFjY2VwdGVkIG9yIGVkaXRlZCBieSB0aGVcbiAgLy8gdXNlci4gYHN1bW1hcnlgIGlzIHRoZSBjYXJkIG9uZS1saW5lcjsgYGRpc3BsYXlOYW1lYCBmYWxscyBiYWNrIHRvXG4gIC8vIGBuYW1lYCB3aGVuIHVuc2V0LiBgbWV0YWRhdGFTb3VyY2VzYCByZWNvcmRzLCBwZXIgZGVzY3JpcHRpdmUgZmllbGQsIHdoZXJlXG4gIC8vIGl0cyB2YWx1ZSBjYW1lIGZyb20gKGBzcGVjIHwgcmVhZG1lIHwgZG9ja2VyZmlsZSB8IGRlcml2ZWQgfCB1c2VyYCkgc28gYVxuICAvLyByZXZpZXdlciBjYW4gc2VlIHdoYXQgd2FzIHR5cGVkIHJhdGhlciB0aGFuIHNoaXBwZWQgaW4gdGhlIHBhY2thZ2UuXG4gIHN1bW1hcnk6IHZhcmNoYXIoJ3N1bW1hcnknLCB7IGxlbmd0aDogMTYwIH0pLFxuICBkaXNwbGF5TmFtZTogdmFyY2hhcignZGlzcGxheV9uYW1lJywgeyBsZW5ndGg6IDEwMCB9KSxcbiAgZG9jdW1lbnRhdGlvblVybDogdmFyY2hhcignZG9jdW1lbnRhdGlvbl91cmwnLCB7IGxlbmd0aDogMjA0OCB9KSxcbiAgbWV0YWRhdGFTb3VyY2VzOiBqc29uYignbWV0YWRhdGFfc291cmNlcycpXG4gICAgLiR0eXBlPE1ldGFkYXRhU291cmNlcz4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRG9ja2VyIGNvbmZpZ3VyYXRpb25cbiAgZG9ja2VyZmlsZTogdGV4dCgnZG9ja2VyZmlsZScpLFxuICBidWlsZFR5cGU6IHZhcmNoYXIoJ2J1aWxkX3R5cGUnLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuZGVmYXVsdCgnYnVpbGRfaW1hZ2UnKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gU3VwcGx5IGNoYWluLiBTZXQgYnkgdGhlIGJ1aWxkIHdvcmtlciBvbmNlIHRoZSBpbWFnZSBpcyBwdXNoZWQsIHNpZ25lZCBhbmRcbiAgLy8gY2FycmllcyBpdHMgU0JPTSBhdHRlc3RhdGlvbjsgTlVMTCBmb3IgcGx1Z2lucyB0aGF0IHByb2R1Y2Ugbm8gaW1hZ2VcbiAgLy8gKG1ldGFkYXRhX29ubHksIGFwcHJvdmFsIHN0ZXBzKS4gYGltYWdlRGlnZXN0YCBpcyB3aGF0IHN5bnRoIHBpbnMgQ29kZUJ1aWxkXG4gIC8vIHRvIChgPHJlcG8+QHNoYTI1NjrigKZgKSDigJQgbmV2ZXIgdGhlIG11dGFibGUgYG5hbWU6dmVyc2lvbmAgdGFnLlxuICAvLyBgaW1hZ2VTb3VyY2VgIHNlcGFyYXRlcyBhbiBpbWFnZSB0aGlzIHBsYXRmb3JtIEJVSUxUIChCdWlsZEtpdCBwcm92ZW5hbmNlXG4gIC8vIGF0dGFjaGVkKSBmcm9tIGFuIFVQTE9BREVEIGBpbWFnZS50YXJgIHdob3NlIGJ1aWxkIGl0IG5ldmVyIHNhdy5cbiAgaW1hZ2VEaWdlc3Q6IHZhcmNoYXIoJ2ltYWdlX2RpZ2VzdCcsIHsgbGVuZ3RoOiA3MSB9KSxcbiAgaW1hZ2VTb3VyY2U6IHZhcmNoYXIoJ2ltYWdlX3NvdXJjZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxJbWFnZVNvdXJjZT4oKSxcblxuICAvLyBWdWxuZXJhYmlsaXR5IHNjYW4gKGdyeXBlIG92ZXIgdGhlIFNCT00gYXQgYnVpbGQ7IG5pZ2h0bHkgcmVzY2FuKSBhbmQgdGhlXG4gIC8vIGltYWdlJ3MgZWZmZWN0aXZlIFVTRVIuIE5VTEwgPSBub3Qgc2Nhbm5lZCAvIHByb2R1Y2VzIG5vIGltYWdlLlxuICB2dWxuQ3JpdGljYWw6IGludGVnZXIoJ3Z1bG5fY3JpdGljYWwnKSxcbiAgdnVsbkhpZ2g6IGludGVnZXIoJ3Z1bG5faGlnaCcpLFxuICB2dWxuTWVkaXVtOiBpbnRlZ2VyKCd2dWxuX21lZGl1bScpLFxuICB2dWxuTG93OiBpbnRlZ2VyKCd2dWxuX2xvdycpLFxuICAvLyBPZiB0aGUgY3JpdGljYWwvaGlnaCBmaW5kaW5ncywgdGhvc2UgZ3J5cGUgcmVwb3J0cyBhIGZpeGVkIHZlcnNpb24gZm9yIOKAlFxuICAvLyB3aGF0IHRoZSBwbGF0Zm9ybSBmbG9vciAoUExVR0lOX1ZVTE5fTUFYX0ZJTkRJTkdTKSBnYXRlcyBvbi4gTlVMTCA9IHVuc2Nhbm5lZC5cbiAgdnVsbkNyaXRpY2FsRml4YWJsZTogaW50ZWdlcigndnVsbl9jcml0aWNhbF9maXhhYmxlJyksXG4gIHZ1bG5IaWdoRml4YWJsZTogaW50ZWdlcigndnVsbl9oaWdoX2ZpeGFibGUnKSxcbiAgc2Nhbm5lZEF0OiB0aW1lc3RhbXAoJ3NjYW5uZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgLy8gU2V0IGJ5IHRoZSBuaWdodGx5IHJlc2NhbiB3aGlsZSB0aGlzIHZlcnNpb24ncyBmaXhhYmxlIGNyaXRpY2FscyBleGNlZWQgdGhlXG4gIC8vIGZsb29yIChjbGVhcmVkIHdoZW4gcmVzb2x2ZWQpOiB0aGUgY291bnRzIGFuZCB0b3AgZmluZGluZ3MgYXQgdGhhdCByZXNjYW4uXG4gIHNjYW5GbGFnZ2VkQXQ6IHRpbWVzdGFtcCgnc2Nhbl9mbGFnZ2VkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHNjYW5GbGFnOiBqc29uYignc2Nhbl9mbGFnJykuJHR5cGU8UGx1Z2luU2NhbkZsYWc+KCksXG4gIC8qKlxuICAgKiBUaGUgTEFTVCByZXNjYW4ncyBmaW5kaW5ncyBmb3IgdGhpcyB2ZXJzaW9uLCB3cml0dGVuIHdoZXRoZXIgb3Igbm90IHRoZVxuICAgKiBnYXRpbmcgZmxhZyB0cmlwcGVkLlxuICAgKlxuICAgKiBgc2Nhbl9mbGFnYCBpcyBzZXQgb25seSB3aGlsZSBmaXhhYmxlIGNyaXRpY2FscyBleGNlZWRcbiAgICogUExVR0lOX1ZVTE5fTUFYX0ZJTkRJTkdTLCBzbyBhIHZlcnNpb24gY2Fycnlpbmcgb25seSBIaWdoIGZpbmRpbmdzIHN0b3Jlc1xuICAgKiBub3RoaW5nIOKAlCBhbmQgdGhlIHZ1bG5lcmFiaWxpdHkgcmVwb3J0IHNlY3Rpb24sIHdob3NlIHdob2xlIGpvYiBpcyB0byBzaG93XG4gICAqIENyaXRpY2FsIEFORCBIaWdoIGV4cG9zdXJlLCBoYWQgbm8gc291cmNlIHRvIHJlYWQuIFRoaXMgaG9sZHMgdGhlIGNvdW50cyBhbmRcbiAgICogdGhlIHRvcCBmaW5kaW5ncyBmb3IgZXZlcnkgaW4tdXNlIHZlcnNpb24sIGluZGVwZW5kZW50IG9mIHRoZSBnYXRlOiB3aGF0IGFcbiAgICogcmVwb3J0IHNob3dzIGFuZCB3aGF0IGEgYnVpbGQgcmVmdXNlcyBhcmUgZGlmZmVyZW50IHF1ZXN0aW9ucy5cbiAgICovXG4gIHNjYW5TdW1tYXJ5OiBqc29uYignc2Nhbl9zdW1tYXJ5JykuJHR5cGU8UGx1Z2luU2NhblN1bW1hcnk+KCksXG4gIHJ1bkFzUm9vdDogYm9vbGVhbigncnVuX2FzX3Jvb3QnKSxcblxuICAvLyBWZXJzaW9uIGxpZmVjeWNsZS4gYGJyZWFraW5nYDogYSBwdWJsaXNoZXItbWFya2VkIG1ham9yIHRoYXQgYGxhdGVzdGBcbiAgLy8gaW5zdGFsbHMgbmV2ZXIgY3Jvc3Mgd2l0aG91dCByZS1hcHByb3ZhbC4gYGZyb3plbkF0YDogc2V0IHRoZSBtb21lbnQgYVxuICAvLyBwdWJsaXNoIHJlcXVlc3QgcmVmZXJlbmNlcyB0aGlzIHZlcnNpb24g4oCUIHJlLXVwbG9hZGluZyBpdCBpcyB0aGVuIHJlZnVzZWRcbiAgLy8gKDQwOSkuIFlhbmsgLyBkZXByZWNhdGlvbiBjYXJyeSB0aGVpciByZWFzb24gYWxvbmdzaWRlIHRoZSB0aW1lc3RhbXAuXG4gIGJyZWFraW5nOiBib29sZWFuKCdicmVha2luZycpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLm5vdE51bGwoKSxcbiAgZnJvemVuQXQ6IHRpbWVzdGFtcCgnZnJvemVuX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHlhbmtlZEF0OiB0aW1lc3RhbXAoJ3lhbmtlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICB5YW5rUmVhc29uOiB0ZXh0KCd5YW5rX3JlYXNvbicpLFxuICBkZXByZWNhdGVkQXQ6IHRpbWVzdGFtcCgnZGVwcmVjYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZXByZWNhdGlvbk1lc3NhZ2U6IHRleHQoJ2RlcHJlY2F0aW9uX21lc3NhZ2UnKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgKG93bmVyc2hpcCAvIGxpZmVjeWNsZSAvIGNsYXNzaWZpY2F0aW9uKS5cbiAgLy8gb3duZXJJZCBkZWZhdWx0cyB0byB0aGUgY3JlYXRpbmcgdXNlciAoc2V0IGF0IGluc2VydCksIHNvIGV2ZXJ5IHBsdWdpbiBoYXNcbiAgLy8gYW4gb3duZXIgZm9yIFwibXkgc2VydmljZXNcIiB2aWV3czsgb3duZXJUeXBlIGRpc3Rpbmd1aXNoZXMgdXNlciB2cyB0ZWFtLlxuICBvd25lcklkOiB0ZXh0KCdvd25lcl9pZCcpLFxuICBvd25lclR5cGU6IHZhcmNoYXIoJ293bmVyX3R5cGUnLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8T3duZXJUeXBlPigpLFxuICBsaWZlY3ljbGU6IHZhcmNoYXIoJ2xpZmVjeWNsZScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC4kdHlwZTxQbHVnaW5MaWZlY3ljbGU+KClcbiAgICAuZGVmYXVsdCgncHJvZHVjdGlvbicgYXMgUGx1Z2luTGlmZWN5Y2xlKVxuICAgIC5ub3ROdWxsKCksXG4gIGNyaXRpY2FsaXR5OiB2YXJjaGFyKCdjcml0aWNhbGl0eScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxDcml0aWNhbGl0eT4oKSxcbiAgbGFiZWxzOiBqc29uYignbGFiZWxzJylcbiAgICAuJHR5cGU8RW50aXR5TGFiZWxzPigpXG4gICAgLmRlZmF1bHQoe30pXG4gICAgLm5vdE51bGwoKSxcbiAgbGlua3M6IGpzb25iKCdsaW5rcycpXG4gICAgLiR0eXBlPEVudGl0eUxpbmtbXT4oKVxuICAgIC5kZWZhdWx0KFtdKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQWNjZXNzIGFuZCB2aXNpYmlsaXR5IOKAlCB0aGUgc2hhcmVkIHRocmVlLXJ1bmcgbGFkZGVyIChzZWUgYXBpLWNvcmUnc1xuICAvLyBgVmlzaWJpbGl0eWApOiBgcHJpdmF0ZWAgaXMgYXV0aG9yLW9ubHkgKGBjcmVhdGVkX2J5YCksIGBvcmdgIGlzIHRoZSB3aG9sZVxuICAvLyBvd25pbmcgb3JnLCBgcHVibGljYCByZWFjaGVzIHRoZSBvcmcncyB0ZWFtcyBhbmQg4oCUIGZyb20gdGhlIHN5c3RlbSBvcmcg4oCUXG4gIC8vIGV2ZXJ5IG9yZy4gQ29uc3RyYWluZWQgYXQgdGhlIFNRTCBsYXllciB0b28gdmlhIGEgQ0hFQ0sgaW4gcG9zdGdyZXMtaW5pdC5zcWxcbiAgLy8gc28gYSB0eXBvIGNhbid0IHNuZWFrIHBhc3QgdGhlIGFwcGxpY2F0aW9uIGxheWVyLlxuICB2aXNpYmlsaXR5OiB2YXJjaGFyKCd2aXNpYmlsaXR5JywgeyBsZW5ndGg6IDEwIH0pXG4gICAgLiR0eXBlPFZpc2liaWxpdHk+KClcbiAgICAuZGVmYXVsdCgncHJpdmF0ZScpXG4gICAgLm5vdE51bGwoKSxcbiAgaXNEZWZhdWx0OiBib29sZWFuKCdpc19kZWZhdWx0JylcbiAgICAuZGVmYXVsdChmYWxzZSlcbiAgICAubm90TnVsbCgpLFxuICBpc0FjdGl2ZTogYm9vbGVhbignaXNfYWN0aXZlJylcbiAgICAuZGVmYXVsdCh0cnVlKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gRGVsZXRpb24gdHJhY2tpbmcgKHNvZnQgZGVsZXRlKVxuICBkZWxldGVkQXQ6IHRpbWVzdGFtcCgnZGVsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkZWxldGVkQnk6IHRleHQoJ2RlbGV0ZWRfYnknKSxcbiAgLy8gU29mdC1kZWxldGUgcHVyZ2UgZGVhZGxpbmU6IHRoZSByZXRlbnRpb24gc3dlZXAgaGFyZC1kZWxldGVzIHRvbWJzdG9uZWRcbiAgLy8gcm93cyBvbmNlIGBwdXJnZV9hZnRlcmAgaGFzIHBhc3NlZCAoc2V0IG9uIGRlbGV0ZSBhbG9uZ3NpZGUgZGVsZXRlZF9hdCkuXG4gIHB1cmdlQWZ0ZXI6IHRpbWVzdGFtcCgncHVyZ2VfYWZ0ZXInLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcblxuICAvLyBUaGUgcXVvdGEgcGVyaW9kIChgcmVzZXRBdGApIHRoaXMgdmVyc2lvbidzIGBwbHVnaW5zYCBzbG90IHdhcyBjaGFyZ2VkIHRvXG4gIC8vIGF0IHVwbG9hZDsgTlVMTCB3aGVuIG5vIHNsb3Qgd2FzIGNoYXJnZWQgKHN5c3RlbSBjYXRhbG9nIGxvYWRzKSBvciBpdCB3YXNcbiAgLy8gYWxyZWFkeSByZWZ1bmRlZC4gQSBkZWxldGUvcHVyZ2UgcmVmdW5kcyBDT05ESVRJT05BTExZIG9uIGl0ICh0aGUgcXVvdGFcbiAgLy8gc2VydmljZSBpZ25vcmVzIHRoZSByZWZ1bmQgb25jZSB0aGF0IHBlcmlvZCBoYXMgcm9sbGVkIG92ZXIpLCB0aGVuIGNsZWFycyBpdC5cbiAgcXVvdGFSZXNldEF0OiB0aW1lc3RhbXAoJ3F1b3RhX3Jlc2V0X2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG59LCAodGFibGUpID0+ICh7XG4gIC8vIFBhcnRpYWwgaW5kZXggb3ZlciBqdXN0IHRoZSB0b21ic3RvbmVzIOKAlCBkcml2ZXMgdGhlIHJldGVudGlvbiBwdXJnZSBzd2VlcC5cbiAgcHVyZ2VJZHg6IGluZGV4KCdwbHVnaW5fcHVyZ2VfaWR4Jykub24odGFibGUucHVyZ2VBZnRlcikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTk9UIE5VTExgKSxcbiAgLy8gTWlycm9ycyB0aGUgaW5kZXhlcyBwb3N0Z3Jlcy1pbml0LnNxbCBjcmVhdGVzLCBuYW1lIGZvciBuYW1lICh0aGUgU1FMIGZpbGUgaXNcbiAgLy8gd2hhdCBkZXBsb3lzOyBzY2hlbWEtcmVmbGVjdGlvbi50ZXN0LnRzIGtlZXBzIHRoZSB0d28gaW4gbG9jay1zdGVwKS5cbiAgb3JnSWRJZHg6IGluZGV4KCdpZHhfcGx1Z2luc19vcmdfaWQnKS5vbih0YWJsZS5vcmdJZCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBuYW1lSWR4OiBpbmRleCgnaWR4X3BsdWdpbnNfbmFtZScpLm9uKHRhYmxlLm5hbWUpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgbmFtZVZlcnNpb25JZHg6IGluZGV4KCdpZHhfcGx1Z2luc19uYW1lX3ZlcnNpb24nKS5vbih0YWJsZS5uYW1lLCB0YWJsZS52ZXJzaW9uKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIHZpc2liaWxpdHlJZHg6IGluZGV4KCdpZHhfcGx1Z2luc192aXNpYmlsaXR5Jykub24odGFibGUudmlzaWJpbGl0eSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBpc0RlZmF1bHRJZHg6IGluZGV4KCdpZHhfcGx1Z2luc19pc19kZWZhdWx0Jykub24odGFibGUubmFtZSwgdGFibGUuaXNEZWZhdWx0KS53aGVyZShzcWxgaXNfZGVmYXVsdCA9IHRydWUgQU5EIGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBjYXRlZ29yeUlkeDogaW5kZXgoJ2lkeF9wbHVnaW5zX2NhdGVnb3J5Jykub24odGFibGUuY2F0ZWdvcnkpLFxuICBhY3RpdmVJZHg6IGluZGV4KCdpZHhfcGx1Z2luc19pc19hY3RpdmUnKS5vbih0YWJsZS5pc0FjdGl2ZSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdDcmVhdGVkSWR4OiBpbmRleCgnaWR4X3BsdWdpbnNfb3JnX2NyZWF0ZWQnKS5vbih0YWJsZS5vcmdJZCwgc3FsYCR7dGFibGUuY3JlYXRlZEF0fSBERVNDYCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdOYW1lSWR4OiBpbmRleCgnaWR4X3BsdWdpbnNfb3JnX25hbWUnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUubmFtZSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuXG4gIC8vIERldmVsb3Blci1wb3J0YWwgY2F0YWxvZyBpbmRleGVzOiBcIm15IHNlcnZpY2VzXCIgKG93bmVyKSArIGxpZmVjeWNsZSBmaWx0ZXIuXG4gIG93bmVySWR4OiBpbmRleCgncGx1Z2luX293bmVyX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5vd25lcklkKSxcbiAgbGlmZWN5Y2xlSWR4OiBpbmRleCgncGx1Z2luX2xpZmVjeWNsZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUubGlmZWN5Y2xlKSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGZpbHRlcmVkIHF1ZXJpZXMgKG9yZ0lkICsgdmlzaWJpbGl0eSArIGlzQWN0aXZlKVxuICBvcmdWaXNpYmlsaXR5QWN0aXZlSWR4OiBpbmRleCgncGx1Z2luX29yZ192aXNpYmlsaXR5X2FjdGl2ZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUudmlzaWJpbGl0eSwgdGFibGUuaXNBY3RpdmUpLFxuICAvLyBEcml2ZXMgdGhlIFwibXkgcHJpdmF0ZSBkcmFmdHNcIiBsZWcgb2YgdGhlIHZpc2liaWxpdHkgcHJlZGljYXRlLlxuICBjcmVhdGVkQnlJZHg6IGluZGV4KCdwbHVnaW5fY3JlYXRlZF9ieV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuY3JlYXRlZEJ5KSxcblxuICAvLyBVbmlxdWUgY29uc3RyYWludCBvbiBuYW1lICsgdmVyc2lvbiArIG9yZ0lkXG4gIG5hbWVWZXJzaW9uT3JnVW5pcXVlOiB1bmlxdWVJbmRleCgncGx1Z2luX25hbWVfdmVyc2lvbl9vcmdfdW5pcXVlJylcbiAgICAub24odGFibGUubmFtZSwgdGFibGUudmVyc2lvbiwgdGFibGUub3JnSWQpLFxuXG4gIC8vIENoZWNrIGNvbnN0cmFpbnRzXG4gIHZlcnNpb25DaGVjazogY2hlY2soICdwbHVnaW5fdmVyc2lvbl9jaGVjaycsXG4gICAgc3FsYCR7dGFibGUudmVyc2lvbn0gfiAnXlswLTldK1xcLlswLTldK1xcLlswLTldKygtW2EtekEtWjAtOS4tXSspPyhcXCtbYS16QS1aMC05Li1dKyk/JCdgLFxuICApLFxuICBpbWFnZURpZ2VzdENoZWNrOiBjaGVjaygncGx1Z2luX2ltYWdlX2RpZ2VzdF9jaGVjaycsXG4gICAgc3FsYCR7dGFibGUuaW1hZ2VEaWdlc3R9IElTIE5VTEwgT1IgJHt0YWJsZS5pbWFnZURpZ2VzdH0gfiAnXnNoYTI1NjpbMC05YS1mXXs2NH0kJ2AsXG4gICksXG4gIGltYWdlU291cmNlQ2hlY2s6IGNoZWNrKCdwbHVnaW5faW1hZ2Vfc291cmNlX2NoZWNrJyxcbiAgICBzcWxgJHt0YWJsZS5pbWFnZVNvdXJjZX0gSVMgTlVMTCBPUiAke3RhYmxlLmltYWdlU291cmNlfSBJTiAoJ2J1aWx0JywgJ3VwbG9hZGVkJylgLFxuICApLFxufSkpO1xuXG4vKipcbiAqIFdoYXQgYSBrZXB0IHNldHVwIGltYWdlIG5lZWRzIHRvIGJlY29tZSBhIHZlcnNpb24gZXhhY3RseSBhcyBpdHMgYnVpbGQgd291bGRcbiAqIGhhdmUgbWFkZSBpdDogdGhlIHBsdWdpbiByZWNvcmQgdGhlIHVwbG9hZCBwcm9kdWNlZCwgdGhlIHVwbG9hZGVyIGFuZCB0aGVpclxuICogdmlzaWJpbGl0eS1sYWRkZXIgYXV0aG9yaXR5LCBhbmQgdGhlIHB1Ymxpc2ggcmVxdWVzdCB0aGUgdXBsb2FkIGFza2VkIGZvci5cbiAqIE9wYXF1ZSB0byB0aGUgZGF0YWJhc2UgKHRoZSBwbHVnaW4gc2VydmljZSBvd25zIHRoZSBzaGFwZSkuXG4gKi9cbmV4cG9ydCB0eXBlIEtlcHRTZXR1cEltYWdlQnVpbGQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBHYXRlLXJlZnVzZWQgaW1hZ2VzIGZyb20gdGhlIFNFVFVQIGNhdGFsb2cgbG9hZCwga2VwdCBzaWduZWQgaW4gdGhlIHJlZ2lzdHJ5XG4gKiBmb3IgcHJvbW90aW9uIGluc3RlYWQgb2YgZGlzY2FyZGVkIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kIFwiU2NhbiBnYXRlc1wiKS5cbiAqIFdyaXR0ZW4gYnkgdGhlIGJ1aWxkIHdvcmtlciBmb3IgYSBzeXN0ZW0tb3JnIHVwbG9hZCBtYXJrZWQgYHNldHVwTG9hZGA7XG4gKiBwcm9tb3RlZCAocmUtZ2F0ZWQsIHRoZW4gc2F2ZWQgdGhyb3VnaCB0aGUgYnVpbGQncyBvd24gc3VjY2VzcyBwYXRoKSBvclxuICogZGlzY2FyZGVkIGFmdGVyIGBQTFVHSU5fS0VQVF9TRVRVUF9JTUFHRV9UVExfREFZU2AuIFN5c3RlbSBvcmcgb25seSDigJQgbGlzdGVkXG4gKiBpbiB0aGUgb3JnIGNhc2NhZGUgZm9yIGl0cyBzY2hlbWEtcmVmbGVjdGlvbiBndWFyZCwgYnV0IHRoZSBjYXNjYWRlIG5ldmVyXG4gKiBkZWxldGVzIHRoZSBzeXN0ZW0gb3JnLCBzbyBpdCBuZXZlciBtYXRjaGVzIGEgcm93LlxuICpcbiAqIEB0YWJsZSBwbHVnaW5fa2VwdF9zZXR1cF9pbWFnZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHBsdWdpbktlcHRTZXR1cEltYWdlID0gcGdUYWJsZSgncGx1Z2luX2tlcHRfc2V0dXBfaW1hZ2VzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHBsdWdpbk5hbWU6IHZhcmNoYXIoJ3BsdWdpbl9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHBsdWdpblZlcnNpb246IHZhcmNoYXIoJ3BsdWdpbl92ZXJzaW9uJywgeyBsZW5ndGg6IDUwIH0pLm5vdE51bGwoKSxcbiAgaW1hZ2VEaWdlc3Q6IHZhcmNoYXIoJ2ltYWdlX2RpZ2VzdCcsIHsgbGVuZ3RoOiA3MSB9KS5ub3ROdWxsKCksXG4gIGltYWdlU291cmNlOiB2YXJjaGFyKCdpbWFnZV9zb3VyY2UnLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8SW1hZ2VTb3VyY2U+KCkubm90TnVsbCgpLFxuICByZWZ1c2FsQ29kZTogdmFyY2hhcigncmVmdXNhbF9jb2RlJywgeyBsZW5ndGg6IDY0IH0pLm5vdE51bGwoKSxcbiAgcmVmdXNhbE1lc3NhZ2U6IHRleHQoJ3JlZnVzYWxfbWVzc2FnZScpLm5vdE51bGwoKSxcbiAgcmVmdXNhbEZpbmRpbmdzOiBqc29uYigncmVmdXNhbF9maW5kaW5ncycpLiR0eXBlPHVua25vd25bXT4oKS5kZWZhdWx0KFtdKS5ub3ROdWxsKCksXG4gIGJ1aWxkOiBqc29uYignYnVpbGQnKS4kdHlwZTxLZXB0U2V0dXBJbWFnZUJ1aWxkPigpLm5vdE51bGwoKSxcbiAga2VwdEJ5OiB0ZXh0KCdrZXB0X2J5Jykubm90TnVsbCgpLFxuICBrZXB0QXQ6IHRpbWVzdGFtcCgna2VwdF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG4gIGV4cGlyZXNBdDogdGltZXN0YW1wKCdleHBpcmVzX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBpZGVudGl0eUlkeDogdW5pcXVlSW5kZXgoJ3BsdWdpbl9rZXB0X3NldHVwX2ltYWdlX2lkZW50aXR5X2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5wbHVnaW5OYW1lLCB0YWJsZS5wbHVnaW5WZXJzaW9uLCB0YWJsZS5pbWFnZURpZ2VzdCksXG4gIGV4cGlyZXNJZHg6IGluZGV4KCdwbHVnaW5fa2VwdF9zZXR1cF9pbWFnZV9leHBpcmVzX2lkeCcpLm9uKHRhYmxlLmV4cGlyZXNBdCksXG4gIGltYWdlRGlnZXN0Q2hlY2s6IGNoZWNrKCdwbHVnaW5fa2VwdF9zZXR1cF9pbWFnZV9kaWdlc3RfY2hlY2snLCBzcWxgJHt0YWJsZS5pbWFnZURpZ2VzdH0gfiAnXnNoYTI1NjpbMC05YS1mXXs2NH0kJ2ApLFxuICBpbWFnZVNvdXJjZUNoZWNrOiBjaGVjaygncGx1Z2luX2tlcHRfc2V0dXBfaW1hZ2Vfc291cmNlX2NoZWNrJywgc3FsYCR7dGFibGUuaW1hZ2VTb3VyY2V9IElOICgnYnVpbHQnLCAndXBsb2FkZWQnKWApLFxufSkpO1xuXG5leHBvcnQgdHlwZSBQbHVnaW5LZXB0U2V0dXBJbWFnZSA9IHR5cGVvZiBwbHVnaW5LZXB0U2V0dXBJbWFnZS4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBQbHVnaW5LZXB0U2V0dXBJbWFnZUluc2VydCA9IHR5cGVvZiBwbHVnaW5LZXB0U2V0dXBJbWFnZS4kaW5mZXJJbnNlcnQ7XG5cbi8qKlxuICogVHlwZVNjcmlwdCB0eXBlcyByZXByZXNlbnRpbmcgZGF0YWJhc2Ugcm93c1xuICovXG5leHBvcnQgdHlwZSBQbHVnaW4gPSB0eXBlb2YgcGx1Z2luLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkluc2VydCA9IHR5cGVvZiBwbHVnaW4uJGluZmVySW5zZXJ0O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlcyBmb3Igd29ya2luZyB3aXRoIHBhcnRpYWwgdXBkYXRlc1xuICovXG5leHBvcnQgdHlwZSBQbHVnaW5VcGRhdGUgPSBQYXJ0aWFsPE9taXQ8UGx1Z2luSW5zZXJ0LCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAnY3JlYXRlZEJ5Jz4+O1xuIl19