@pipeline-builder/pipeline-data 4.3.11 → 4.3.13

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 (42) hide show
  1. package/lib/api/managed-toolchain.d.ts +195 -0
  2. package/lib/api/managed-toolchain.js +443 -0
  3. package/lib/api/public-directory.d.ts +4 -15
  4. package/lib/api/public-directory.js +1 -31
  5. package/lib/api/reporting/ingest.js +52 -12
  6. package/lib/api/reporting/stakeholder/compose.d.ts +3 -2
  7. package/lib/api/reporting/stakeholder/compose.js +1 -1
  8. package/lib/api/reporting/stakeholder/period.d.ts +5 -4
  9. package/lib/api/reporting/stakeholder/period.js +1 -1
  10. package/lib/api/reporting/stakeholder/sections.d.ts +4 -4
  11. package/lib/api/reporting/stakeholder/sections.js +1 -1
  12. package/lib/api/reporting/stakeholder/store.d.ts +3 -2
  13. package/lib/api/reporting/stakeholder/store.js +1 -1
  14. package/lib/api/reporting/toolchain-runs.d.ts +156 -0
  15. package/lib/api/reporting/toolchain-runs.js +267 -0
  16. package/lib/api/reporting/types.d.ts +20 -3
  17. package/lib/api/reporting/types.js +1 -1
  18. package/lib/api/support-cases.d.ts +50 -24
  19. package/lib/api/support-cases.js +96 -37
  20. package/lib/api/version-references.d.ts +2 -24
  21. package/lib/api/version-references.js +46 -7
  22. package/lib/core/query-filters.d.ts +6 -6
  23. package/lib/core/query-filters.js +1 -1
  24. package/lib/database/drizzle-schema.d.ts +698 -41
  25. package/lib/database/drizzle-schema.js +11 -1
  26. package/lib/database/index.d.ts +1 -1
  27. package/lib/database/index.js +2 -2
  28. package/lib/database/schema/alert.js +4 -4
  29. package/lib/database/schema/compliance.d.ts +29 -40
  30. package/lib/database/schema/compliance.js +10 -14
  31. package/lib/database/schema/ecosystem.d.ts +72 -0
  32. package/lib/database/schema/ecosystem.js +18 -2
  33. package/lib/database/schema/pipeline.d.ts +19 -0
  34. package/lib/database/schema/pipeline.js +17 -1
  35. package/lib/database/schema/reporting-stakeholder.d.ts +2 -1
  36. package/lib/database/schema/reporting-stakeholder.js +2 -27
  37. package/lib/database/schema/toolchain.d.ts +643 -0
  38. package/lib/database/schema/toolchain.js +102 -0
  39. package/lib/index.d.ts +4 -2
  40. package/lib/index.js +7 -3
  41. package/lib/testing/exports.json +39 -2
  42. package/package.json +2 -2
@@ -270,4 +270,4 @@ export function completePeriodsSince(cadence, tz, weekStart, since, now = new Da
270
270
  }
271
271
  return out.reverse();
272
272
  }
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyaW9kLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9zdGFrZWhvbGRlci9wZXJpb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTBDdEMsbUVBQW1FO0FBQ25FLFNBQVMsT0FBTyxDQUFDLE9BQWEsRUFBRSxFQUFVO0lBQ3hDLDhFQUE4RTtJQUM5RSxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO1FBQzdDLFFBQVEsRUFBRSxFQUFFO1FBQ1osSUFBSSxFQUFFLFNBQVM7UUFDZixLQUFLLEVBQUUsU0FBUztRQUNoQixHQUFHLEVBQUUsU0FBUztRQUNkLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLFNBQVM7UUFDakIsU0FBUyxFQUFFLEtBQUs7S0FDakIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixNQUFNLEdBQUcsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQy9GLE9BQU87UUFDTCxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNqQixLQUFLLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNuQixHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNmLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3JCLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDO0tBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFD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QUUsRUFBRSxDQUFDO1lBQ3ZELFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTztZQUNoQixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQZXJpb2QgcmVzb2x1dGlvbiBmb3Igc2NoZWR1bGVkIHJlcG9ydHM6IHdoaWNoIGNvbXBsZXRlIHdlZWssIG1vbnRoIG9yIHF1YXJ0ZXJcbiAqIGEgcnVuIGNvdmVycywgYW5kIHRoZSBvbmUgYmVmb3JlIGl0IGZvciBjb21wYXJpc29uLlxuICpcbiAqIEEgcmVwb3J0IGNvdmVycyB0aGUgTEFTVCBDT01QTEVURSBwZXJpb2QsIG5ldmVyIGEgcGFydGlhbCBvbmUuIFwiRGVwbG95cyB0aGlzXG4gKiB3ZWVrXCIgb24gYSBNb25kYXkgbW9ybmluZyBtZWFucyBsYXN0IHdlZWsg4oCUIGEgbWFuYWdlciByZWFkaW5nIGEgaGFsZi1maW5pc2hlZFxuICogd2VlayBzZWVzIG51bWJlcnMgdGhhdCBjaGFuZ2UgdW5kZXIgdGhlbS5cbiAqXG4gKiBFdmVyeXRoaW5nIGhlcmUgaXMgY29tcHV0ZWQgaW4gdGhlIHJlcG9ydCdzIElBTkEgdGltZXpvbmUsIHdpdGhvdXQgYSBkYXRlXG4gKiBsaWJyYXJ5LiBgSW50bC5EYXRlVGltZUZvcm1hdGAgd2l0aCBhIGB0aW1lWm9uZWAgaXMgdGhlIG9ubHkgdHogZGF0YWJhc2UgTm9kZVxuICogc2hpcHMsIHNvIHRoZSBhcHByb2FjaCBpczogcmVhZCB0aGUgd2FsbC1jbG9jayBwYXJ0cyBpbiB0aGF0IHpvbmUsIGRvIGNpdmlsXG4gKiBhcml0aG1ldGljIG9uIHRoZW0gKHdoaWNoIGlzIGV4YWN0IOKAlCBtb250aHMgYW5kIHF1YXJ0ZXJzIGFyZSBkZWZpbmVkIG9uIHRoZVxuICogY2FsZW5kYXIsIG5vdCBvbiBlbGFwc2VkIG1pbGxpc2Vjb25kcyksIHRoZW4gY29udmVydCB0aGUgcmVzdWx0aW5nIGNpdmlsXG4gKiBtaWRuaWdodCBiYWNrIHRvIGEgVVRDIGluc3RhbnQgYnkgbWVhc3VyaW5nIHRoZSB6b25lJ3Mgb2Zmc2V0IEFUIHRoYXQgaW5zdGFudC5cbiAqXG4gKiBNZWFzdXJpbmcgdGhlIG9mZnNldCBhdCB0aGUgdGFyZ2V0IGluc3RhbnQgcmF0aGVyIHRoYW4gYXQgYG5vd2AgaXMgd2hhdCBtYWtlc1xuICogRFNUIGNvcnJlY3Q6IGEgd2Vla2x5IHBlcmlvZCB0aGF0IHN0YXJ0cyBiZWZvcmUgYSB0cmFuc2l0aW9uIGFuZCBlbmRzIGFmdGVyIGl0XG4gKiBpcyBub3QgMTY4IGhvdXJzIGxvbmcsIGFuZCBhIHJlc29sdmVyIHRoYXQgYWRkZWQgYDcgKiAyNCAqIDM2MDBfMDAwYCB3b3VsZFxuICogc2lsZW50bHkgc2hpZnQgZXZlcnkgYm91bmRhcnkgYnkgYW4gaG91ciBmb3IgaGFsZiB0aGUgeWVhci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlcG9ydENhZGVuY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhYmFzZS9zY2hlbWEvcmVwb3J0aW5nLXN0YWtlaG9sZGVyLmpzJztcblxuLyoqIE9uZSByZXNvbHZlZCByZXBvcnRpbmcgcGVyaW9kLCBwbHVzIHRoZSBwcmV2aW91cyBvbmUgZm9yIGNvbXBhcmlzb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkUGVyaW9kIHtcbiAgLyoqIEluY2x1c2l2ZSBzdGFydCBvZiB0aGUgcGVyaW9kIGJlaW5nIHJlcG9ydGVkIChVVEMgaW5zdGFudCkuICovXG4gIHN0YXJ0OiBEYXRlO1xuICAvKiogRXhjbHVzaXZlIGVuZCDigJQgYWxzbyB0aGUgc3RhcnQgb2YgdGhlIHBlcmlvZCBpbiBwcm9ncmVzcy4gKi9cbiAgZW5kOiBEYXRlO1xuICAvKiogSW5jbHVzaXZlIHN0YXJ0IG9mIHRoZSBQUkVWSU9VUyBwZXJpb2QsIGZvciBwZXJpb2Qtb3Zlci1wZXJpb2QgY2hhbmdlLiAqL1xuICBwcmV2U3RhcnQ6IERhdGU7XG4gIC8qKiBFeGNsdXNpdmUgZW5kIG9mIHRoZSBwcmV2aW91cyBwZXJpb2QgKD09PSBgc3RhcnRgKS4gKi9cbiAgcHJldkVuZDogRGF0ZTtcbiAgLyoqIEh1bWFuIGxhYmVsIGluIHRoZSByZXBvcnQncyB0aW1lem9uZTogYDIwMjYtVzM4YCwgYDIwMjYtMDhgLCBgMjAyNi1RM2AuICovXG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbi8qKiBDaXZpbCAod2FsbC1jbG9jaykgZGF0ZSBwYXJ0cyBpbiBhIGdpdmVuIHpvbmUuICovXG5pbnRlcmZhY2UgQ2l2aWwgeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyOyBob3VyOiBudW1iZXI7IG1pbnV0ZTogbnVtYmVyOyBzZWNvbmQ6IG51bWJlciB9XG5cbi8qKiBSZWFkIHRoZSB3YWxsLWNsb2NrIHBhcnRzIG9mIGBpbnN0YW50YCBhcyB0aGV5IHJlYWQgaW4gYHR6YC4gKi9cbmZ1bmN0aW9uIGNpdmlsSW4oaW5zdGFudDogRGF0ZSwgdHo6IHN0cmluZyk6IENpdmlsIHtcbiAgLy8gYGVuLUNBYCB5aWVsZHMgSVNPLWlzaCBgWVlZWS1NTS1ERGAsIGFuZCBob3VyQ3ljbGUgaDIzIGF2b2lkcyBhIDI0OjAwIGhvdXIuXG4gIGNvbnN0IHBhcnRzID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLUNBJywge1xuICAgIHRpbWVab25lOiB0eixcbiAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgc2Vjb25kOiAnMi1kaWdpdCcsXG4gICAgaG91ckN5Y2xlOiAnaDIzJyxcbiAgfSkuZm9ybWF0VG9QYXJ0cyhpbnN0YW50KTtcbiAgY29uc3QgZ2V0ID0gKHR5cGU6IHN0cmluZyk6IG51bWJlciA9PiBOdW1iZXIocGFydHMuZmluZCgocCkgPT4gcC50eXBlID09PSB0eXBlKT8udmFsdWUgPz8gJzAnKTtcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBnZXQoJ3llYXInKSxcbiAgICBtb250aDogZ2V0KCdtb250aCcpLFxuICAgIGRheTogZ2V0KCdkYXknKSxcbiAgICBob3VyOiBnZXQoJ2hvdXInKSxcbiAgICBtaW51dGU6IGdldCgnbWludXRlJyksXG4gICAgc2Vjb25kOiBnZXQoJ3NlY29uZCcpLFxuICB9O1xufVxuXG4vKipcbiAqIFRoZSBVVEMgaW5zdGFudCBhdCB3aGljaCB0aGUgZ2l2ZW4gY2l2aWwgdGltZSBvY2N1cnMgaW4gYHR6YC5cbiAqXG4gKiBUd28gcGFzc2VzOiBndWVzcyBieSB0cmVhdGluZyB0aGUgY2l2aWwgdGltZSBhcyBVVEMsIG1lYXN1cmUgaG93IGZhciB0aGF0IGd1ZXNzXG4gKiBhY3R1YWxseSBsYW5kcyBmcm9tIHRoZSB0YXJnZXQgaW4gYHR6YCwgY29ycmVjdCwgdGhlbiByZS1tZWFzdXJlIG9uY2UuIFRoZVxuICogc2Vjb25kIHBhc3MgbWF0dGVycyBleGFjdGx5IGF0IGEgRFNUIHRyYW5zaXRpb24sIHdoZXJlIHRoZSBmaXJzdCBjb3JyZWN0aW9uIGNhblxuICogb3ZlcnNob290IGludG8gdGhlIG90aGVyIG9mZnNldC5cbiAqXG4gKiBGb3IgYSBjaXZpbCBtaWRuaWdodCB0aGF0IGRvZXMgbm90IGV4aXN0IChzcHJpbmctZm9yd2FyZCBza2lwcyBpdCkgdGhpcyBzZXR0bGVzXG4gKiBvbiB0aGUgaW5zdGFudCBqdXN0IGFmdGVyIHRoZSBnYXAsIHdoaWNoIGlzIHRoZSBzdGFydCBvZiB0aGUgZGF5IGFzIHRoYXQgem9uZVxuICogZXhwZXJpZW5jZWQgaXQg4oCUIHRoZSByaWdodCBhbnN3ZXIgZm9yIGEgcGVyaW9kIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiBpbnN0YW50T2ZDaXZpbChjOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSwgdHo6IHN0cmluZyk6IERhdGUge1xuICBjb25zdCBhc1V0YyA9IERhdGUuVVRDKGMueWVhciwgYy5tb250aCAtIDEsIGMuZGF5LCAwLCAwLCAwKTtcbiAgbGV0IGd1ZXNzID0gYXNVdGM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XG4gICAgY29uc3QgYmFjayA9IGNpdmlsSW4obmV3IERhdGUoZ3Vlc3MpLCB0eik7XG4gICAgY29uc3QgYmFja1V0YyA9IERhdGUuVVRDKGJhY2sueWVhciwgYmFjay5tb250aCAtIDEsIGJhY2suZGF5LCBiYWNrLmhvdXIsIGJhY2subWludXRlLCBiYWNrLnNlY29uZCk7XG4gICAgY29uc3QgZHJpZnQgPSBiYWNrVXRjIC0gYXNVdGM7XG4gICAgaWYgKGRyaWZ0ID09PSAwKSBicmVhaztcbiAgICBndWVzcyAtPSBkcmlmdDtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoZ3Vlc3MpO1xufVxuXG4vKiogMCA9IE1vbmRheSDigKYgNiA9IFN1bmRheSwgZm9yIGEgY2l2aWwgZGF0ZSAoWmVsbGVyLWZyZWU6IHVzZSBhIFVUQyBwcm9iZSkuICovXG5mdW5jdGlvbiBjaXZpbFdlZWtkYXkoYzogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyIH0pOiBudW1iZXIge1xuICBjb25zdCBkb3cgPSBuZXcgRGF0ZShEYXRlLlVUQyhjLnllYXIsIGMubW9udGggLSAxLCBjLmRheSkpLmdldFVUQ0RheSgpOyAvLyAwPVN1blxuICByZXR1cm4gKGRvdyArIDYpICUgNzsgLy8gMD1Nb25cbn1cblxuLyoqIEFkZCBgZGF5c2AgdG8gYSBjaXZpbCBkYXRlLCBub3JtYWxpc2luZyB2aWEgVVRDIGFyaXRobWV0aWMgKG5vIHR6IGludm9sdmVkKS4gKi9cbmZ1bmN0aW9uIGFkZENpdmlsRGF5cyhjOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSwgZGF5czogbnVtYmVyKTogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyIH0ge1xuICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoYy55ZWFyLCBjLm1vbnRoIC0gMSwgYy5kYXkgKyBkYXlzKSk7XG4gIHJldHVybiB7IHllYXI6IGQuZ2V0VVRDRnVsbFllYXIoKSwgbW9udGg6IGQuZ2V0VVRDTW9udGgoKSArIDEsIGRheTogZC5nZXRVVENEYXRlKCkgfTtcbn1cblxuLyoqIEFkZCBgbW9udGhzYCB0byBhIGNpdmlsIGRhdGUsIGNsYW1waW5nIHRoZSBkYXkgaW50byB0aGUgdGFyZ2V0IG1vbnRoLiAqL1xuZnVuY3Rpb24gYWRkQ2l2aWxNb250aHMoYzogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyIH0sIG1vbnRoczogbnVtYmVyKTogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyIH0ge1xuICBjb25zdCB6ZXJvQmFzZWQgPSAoYy55ZWFyICogMTIpICsgKGMubW9udGggLSAxKSArIG1vbnRocztcbiAgY29uc3QgeWVhciA9IE1hdGguZmxvb3IoemVyb0Jhc2VkIC8gMTIpO1xuICBjb25zdCBtb250aCA9ICh6ZXJvQmFzZWQgJSAxMikgKyAxO1xuICBjb25zdCBsYXN0RGF5ID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIDApKS5nZXRVVENEYXRlKCk7XG4gIHJldHVybiB7IHllYXIsIG1vbnRoLCBkYXk6IE1hdGgubWluKGMuZGF5LCBsYXN0RGF5KSB9O1xufVxuXG4vKiogVGhlIGNpdmlsIHN0YXJ0IG9mIHRoZSBwZXJpb2QgY29udGFpbmluZyBgY2AuICovXG5mdW5jdGlvbiBzdGFydE9mUGVyaW9kKFxuICBjOiBDaXZpbCxcbiAgY2FkZW5jZTogUmVwb3J0Q2FkZW5jZSxcbiAgd2Vla1N0YXJ0OiAnbW9uZGF5JyB8ICdzdW5kYXknLFxuKTogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyIH0ge1xuICBjb25zdCBkYXRlID0geyB5ZWFyOiBjLnllYXIsIG1vbnRoOiBjLm1vbnRoLCBkYXk6IGMuZGF5IH07XG4gIGlmIChjYWRlbmNlID09PSAnd2Vla2x5Jykge1xuICAgIGNvbnN0IG1vbmRheUluZGV4ID0gY2l2aWxXZWVrZGF5KGRhdGUpO1xuICAgIC8vIFN1bmRheSB3ZWVrcyBzdGFydCBvbmUgZGF5IGVhcmxpZXIgdGhhbiB0aGUgTW9uZGF5IGluZGV4IGltcGxpZXMuXG4gICAgY29uc3QgYmFjayA9IHdlZWtTdGFydCA9PT0gJ3N1bmRheScgPyAobW9uZGF5SW5kZXggKyAxKSAlIDcgOiBtb25kYXlJbmRleDtcbiAgICByZXR1cm4gYWRkQ2l2aWxEYXlzKGRhdGUsIC1iYWNrKTtcbiAgfVxuICBpZiAoY2FkZW5jZSA9PT0gJ21vbnRobHknKSByZXR1cm4geyB5ZWFyOiBjLnllYXIsIG1vbnRoOiBjLm1vbnRoLCBkYXk6IDEgfTtcbiAgLy8gUXVhcnRlcmx5OiBKYW4vQXByL0p1bC9PY3QuXG4gIGNvbnN0IHFTdGFydE1vbnRoID0gTWF0aC5mbG9vcigoYy5tb250aCAtIDEpIC8gMykgKiAzICsgMTtcbiAgcmV0dXJuIHsgeWVhcjogYy55ZWFyLCBtb250aDogcVN0YXJ0TW9udGgsIGRheTogMSB9O1xufVxuXG4vKiogU2hpZnQgYSBjaXZpbCBwZXJpb2Qgc3RhcnQgYnkgYG5gIHdob2xlIHBlcmlvZHMuICovXG5mdW5jdGlvbiBzaGlmdFBlcmlvZChcbiAgc3RhcnQ6IHsgeWVhcjogbnVtYmVyOyBtb250aDogbnVtYmVyOyBkYXk6IG51bWJlciB9LFxuICBjYWRlbmNlOiBSZXBvcnRDYWRlbmNlLFxuICBuOiBudW1iZXIsXG4pOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSB7XG4gIGlmIChjYWRlbmNlID09PSAnd2Vla2x5JykgcmV0dXJuIGFkZENpdmlsRGF5cyhzdGFydCwgNyAqIG4pO1xuICBpZiAoY2FkZW5jZSA9PT0gJ21vbnRobHknKSByZXR1cm4gYWRkQ2l2aWxNb250aHMoc3RhcnQsIG4pO1xuICByZXR1cm4gYWRkQ2l2aWxNb250aHMoc3RhcnQsIDMgKiBuKTtcbn1cblxuLyoqXG4gKiBJU08tODYwMSB3ZWVrIG51bWJlciBvZiBhIGNpdmlsIGRhdGUuIFVzZWQgb25seSBmb3IgdGhlIHdlZWtseSBMQUJFTCwgYW5kXG4gKiBkZWxpYmVyYXRlbHkgSVNPIGV2ZW4gZm9yIGEgU3VuZGF5LXdlZWsgb3JnOiBgMjAyNi1XMzhgIGlzIGEgcmVjb2duaXNlZFxuICogbm90YXRpb24gYW5kIGludmVudGluZyBhIFN1bmRheS1iYXNlZCBudW1iZXJpbmcgd291bGQgbWFrZSBsYWJlbHNcbiAqIG5vbi1jb21wYXJhYmxlIHdpdGggYW55dGhpbmcgZWxzZS5cbiAqL1xuZnVuY3Rpb24gaXNvV2VlayhjOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSk6IHsgeWVhcjogbnVtYmVyOyB3ZWVrOiBudW1iZXIgfSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShEYXRlLlVUQyhjLnllYXIsIGMubW9udGggLSAxLCBjLmRheSkpO1xuICBjb25zdCBkYXkgPSAoZC5nZXRVVENEYXkoKSArIDYpICUgNzsgLy8gMD1Nb25cbiAgZC5zZXRVVENEYXRlKGQuZ2V0VVRDRGF0ZSgpIC0gZGF5ICsgMyk7IC8vIG5lYXJlc3QgVGh1cnNkYXlcbiAgY29uc3QgaXNvWWVhciA9IGQuZ2V0VVRDRnVsbFllYXIoKTtcbiAgY29uc3QgZmlyc3RUaHVyc2RheSA9IG5ldyBEYXRlKERhdGUuVVRDKGlzb1llYXIsIDAsIDQpKTtcbiAgY29uc3QgZmlyc3REYXkgPSAoZmlyc3RUaHVyc2RheS5nZXRVVENEYXkoKSArIDYpICUgNztcbiAgZmlyc3RUaHVyc2RheS5zZXRVVENEYXRlKGZpcnN0VGh1cnNkYXkuZ2V0VVRDRGF0ZSgpIC0gZmlyc3REYXkgKyAzKTtcbiAgY29uc3Qgd2VlayA9IDEgKyBNYXRoLnJvdW5kKChkLmdldFRpbWUoKSAtIGZpcnN0VGh1cnNkYXkuZ2V0VGltZSgpKSAvICg3ICogODZfNDAwXzAwMCkpO1xuICByZXR1cm4geyB5ZWFyOiBpc29ZZWFyLCB3ZWVrIH07XG59XG5cbi8qKiBUaGUgbGFiZWwgZm9yIGEgcGVyaW9kLCBmcm9tIGl0cyBjaXZpbCBzdGFydC4gKi9cbmZ1bmN0aW9uIGZvcm1hdExhYmVsKHN0YXJ0OiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSwgY2FkZW5jZTogUmVwb3J0Q2FkZW5jZSk6IHN0cmluZyB7XG4gIGlmIChjYWRlbmNlID09PSAnd2Vla2x5Jykge1xuICAgIGNvbnN0IHsgeWVhciwgd2VlayB9ID0gaXNvV2VlayhzdGFydCk7XG4gICAgcmV0dXJuIGAke3llYXJ9LVcke1N0cmluZyh3ZWVrKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gIH1cbiAgaWYgKGNhZGVuY2UgPT09ICdtb250aGx5JykgcmV0dXJuIGAke3N0YXJ0LnllYXJ9LSR7U3RyaW5nKHN0YXJ0Lm1vbnRoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gIHJldHVybiBgJHtzdGFydC55ZWFyfS1RJHtNYXRoLmZsb29yKChzdGFydC5tb250aCAtIDEpIC8gMykgKyAxfWA7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbGFzdCBDT01QTEVURSBwZXJpb2QgZm9yIGBjYWRlbmNlYCBpbiBgdHpgLlxuICpcbiAqIFRoZSBwZXJpb2QgaW4gcHJvZ3Jlc3MgaXMgZXhjbHVkZWQ6IGl0cyBlbmQgaXMgdGhlIGJvdW5kYXJ5LCBzbyBhIE1vbmRheSBydW5cbiAqIHJlcG9ydHMgbGFzdCB3ZWVrIGFuZCBhIHJ1biBvbiB0aGUgMXN0IHJlcG9ydHMgbGFzdCBtb250aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQZXJpb2QoXG4gIGNhZGVuY2U6IFJlcG9ydENhZGVuY2UsXG4gIHR6OiBzdHJpbmcsXG4gIHdlZWtTdGFydDogJ21vbmRheScgfCAnc3VuZGF5JyA9ICdtb25kYXknLFxuICBub3c6IERhdGUgPSBuZXcgRGF0ZSgpLFxuKTogUmVzb2x2ZWRQZXJpb2Qge1xuICBjb25zdCBub3dDaXZpbCA9IGNpdmlsSW4obm93LCB0eik7XG4gIC8vIFN0YXJ0IG9mIHRoZSBwZXJpb2QgQ09OVEFJTklORyBub3cgPSBlbmQgb2YgdGhlIGxhc3QgY29tcGxldGUgb25lLlxuICBjb25zdCBjdXJyZW50U3RhcnQgPSBzdGFydE9mUGVyaW9kKG5vd0NpdmlsLCBjYWRlbmNlLCB3ZWVrU3RhcnQpO1xuICBjb25zdCBzdGFydCA9IHNoaWZ0UGVyaW9kKGN1cnJlbnRTdGFydCwgY2FkZW5jZSwgLTEpO1xuICBjb25zdCBwcmV2U3RhcnQgPSBzaGlmdFBlcmlvZChjdXJyZW50U3RhcnQsIGNhZGVuY2UsIC0yKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogaW5zdGFudE9mQ2l2aWwoc3RhcnQsIHR6KSxcbiAgICBlbmQ6IGluc3RhbnRPZkNpdmlsKGN1cnJlbnRTdGFydCwgdHopLFxuICAgIHByZXZTdGFydDogaW5zdGFudE9mQ2l2aWwocHJldlN0YXJ0LCB0eiksXG4gICAgcHJldkVuZDogaW5zdGFudE9mQ2l2aWwoc3RhcnQsIHR6KSxcbiAgICBsYWJlbDogZm9ybWF0TGFiZWwoc3RhcnQsIGNhZGVuY2UpLFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBTUEVDSUZJQyBwZXJpb2QgYnkgaXRzIGxhYmVsIChgMjAyNi1XMzhgLCBgMjAyNi0wOGAsIGAyMDI2LVEzYCksIGZvclxuICogb24tZGVtYW5kIHJ1bnMgYW5kIGJhY2tmaWxscy4gUmV0dXJucyBudWxsIHdoZW4gdGhlIGxhYmVsIGRvZXMgbm90IHBhcnNlIG9yXG4gKiBkb2VzIG5vdCBtYXRjaCB0aGUgY2FkZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQZXJpb2RCeUxhYmVsKFxuICBsYWJlbDogc3RyaW5nLFxuICBjYWRlbmNlOiBSZXBvcnRDYWRlbmNlLFxuICB0ejogc3RyaW5nLFxuICB3ZWVrU3RhcnQ6ICdtb25kYXknIHwgJ3N1bmRheScgPSAnbW9uZGF5Jyxcbik6IFJlc29sdmVkUGVyaW9kIHwgbnVsbCB7XG4gIGxldCBzdGFydDogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICBjb25zdCB3ZWVrID0gL14oXFxkezR9KS1XKFxcZHsyfSkkLy5leGVjKGxhYmVsKTtcbiAgY29uc3QgbW9udGggPSAvXihcXGR7NH0pLShcXGR7Mn0pJC8uZXhlYyhsYWJlbCk7XG4gIGNvbnN0IHF1YXJ0ZXIgPSAvXihcXGR7NH0pLVEoWzEtNF0pJC8uZXhlYyhsYWJlbCk7XG5cbiAgaWYgKGNhZGVuY2UgPT09ICd3ZWVrbHknICYmIHdlZWspIHtcbiAgICBjb25zdCB5ZWFyID0gTnVtYmVyKHdlZWtbMV0pO1xuICAgIGNvbnN0IHdrID0gTnVtYmVyKHdlZWtbMl0pO1xuICAgIGlmICh3ayA8IDEgfHwgd2sgPiA1MykgcmV0dXJuIG51bGw7XG4gICAgLy8gSVNPIHdlZWsgMSBjb250YWlucyBKYW4gNHRoOyB3YWxrIGJhY2sgdG8gdGhhdCB3ZWVrJ3Mgc3RhcnQuXG4gICAgY29uc3QgamFuNCA9IHsgeWVhciwgbW9udGg6IDEsIGRheTogNCB9O1xuICAgIGNvbnN0IHdlZWsxU3RhcnQgPSBzdGFydE9mUGVyaW9kKFxuICAgICAgeyAuLi5qYW40LCBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCB9LFxuICAgICAgJ3dlZWtseScsXG4gICAgICB3ZWVrU3RhcnQsXG4gICAgKTtcbiAgICBzdGFydCA9IGFkZENpdmlsRGF5cyh3ZWVrMVN0YXJ0LCAod2sgLSAxKSAqIDcpO1xuICAgIC8vIEEgNTNyZCB3ZWVrIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhpcyBJU08geWVhciBsYW5kcyBpbiB0aGUgbmV4dCBvbmUuXG4gICAgaWYgKGlzb1dlZWsoc3RhcnQpLnllYXIgIT09IHllYXIgJiYgd2sgPT09IDUzKSByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIGlmIChjYWRlbmNlID09PSAnbW9udGhseScgJiYgbW9udGgpIHtcbiAgICBjb25zdCBtID0gTnVtYmVyKG1vbnRoWzJdKTtcbiAgICBpZiAobSA8IDEgfHwgbSA+IDEyKSByZXR1cm4gbnVsbDtcbiAgICBzdGFydCA9IHsgeWVhcjogTnVtYmVyKG1vbnRoWzFdKSwgbW9udGg6IG0sIGRheTogMSB9O1xuICB9IGVsc2UgaWYgKGNhZGVuY2UgPT09ICdxdWFydGVybHknICYmIHF1YXJ0ZXIpIHtcbiAgICBzdGFydCA9IHsgeWVhcjogTnVtYmVyKHF1YXJ0ZXJbMV0pLCBtb250aDogKE51bWJlcihxdWFydGVyWzJdKSAtIDEpICogMyArIDEsIGRheTogMSB9O1xuICB9XG4gIGlmICghc3RhcnQpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGVuZCA9IHNoaWZ0UGVyaW9kKHN0YXJ0LCBjYWRlbmNlLCAxKTtcbiAgY29uc3QgcHJldlN0YXJ0ID0gc2hpZnRQZXJpb2Qoc3RhcnQsIGNhZGVuY2UsIC0xKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogaW5zdGFudE9mQ2l2aWwoc3RhcnQsIHR6KSxcbiAgICBlbmQ6IGluc3RhbnRPZkNpdmlsKGVuZCwgdHopLFxuICAgIHByZXZTdGFydDogaW5zdGFudE9mQ2l2aWwocHJldlN0YXJ0LCB0eiksXG4gICAgcHJldkVuZDogaW5zdGFudE9mQ2l2aWwoc3RhcnQsIHR6KSxcbiAgICBsYWJlbDogZm9ybWF0TGFiZWwoc3RhcnQsIGNhZGVuY2UpLFxuICB9O1xufVxuXG4vKipcbiAqIFdoeSBhIHBlcmlvZCBjYW5ub3QgYmUgcmVwb3J0ZWQuIFJldHVybmVkIHJhdGhlciB0aGFuIHRocm93biBzbyBhIHJvdXRlIGNhblxuICogdHVybiBpdCBpbnRvIGEgNHh4IHdpdGggdGhlIHJlYXNvbiwgYW5kIHRoZSBzY2hlZHVsZXIgY2FuIHBhdXNlIHdpdGggaXQuXG4gKi9cbmV4cG9ydCB0eXBlIFBlcmlvZFJlamVjdGlvbiA9XG4gIHwgeyByZWFzb246ICdpbl9wcm9ncmVzcyc7IG1lc3NhZ2U6IHN0cmluZyB9XG4gIHwgeyByZWFzb246ICdiZWZvcmVfcmV0ZW50aW9uJzsgbWVzc2FnZTogc3RyaW5nIH07XG5cbi8qKlxuICogUmVmdXNlIGEgcGVyaW9kIHRoZSBvcmcncyBkYXRhIGNhbm5vdCBzdXBwb3J0LlxuICpcbiAqIEEgd2luZG93IG9sZGVyIHRoYW4gdGhlIHJldGVudGlvbiBob3Jpem9uIG11c3QgYmUgUkVGVVNFRCB3aXRoIHRoZSByZWFzb24sIG5vdFxuICogc2lsZW50bHkgdHJ1bmNhdGVkOiBhIHJlcG9ydCBsYWJlbGxlZCBgMjAyNi1RMWAgdGhhdCBxdWlldGx5IGNvdmVycyBvbmx5IHRoZVxuICogbGFzdCAzMCBkYXlzIG9mIGl0IGlzIHdvcnNlIHRoYW4gbm8gcmVwb3J0LCBiZWNhdXNlIGEgbWFuYWdlciBjYW5ub3QgdGVsbC5cbiAqXG4gKiBgbWluRnJvbU1zYCBpcyB0aGUgcmV0ZW50aW9uIGZsb29yIGZyb20gYG9yZ1JldGVudGlvbldpbmRvd0Zyb21TZXR0aW5nc2BcbiAqICgwID0gdW5saW1pdGVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdFVucmVwb3J0YWJsZVBlcmlvZChcbiAgcGVyaW9kOiBSZXNvbHZlZFBlcmlvZCxcbiAgb3B0czogeyBtaW5Gcm9tTXM6IG51bWJlcjsgbm93PzogRGF0ZTsgaW5jbHVkZVByZXZpb3VzPzogYm9vbGVhbiB9LFxuKTogUGVyaW9kUmVqZWN0aW9uIHwgbnVsbCB7XG4gIGNvbnN0IG5vdyA9IG9wdHMubm93ID8/IG5ldyBEYXRlKCk7XG4gIGlmIChwZXJpb2QuZW5kLmdldFRpbWUoKSA+IG5vdy5nZXRUaW1lKCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhc29uOiAnaW5fcHJvZ3Jlc3MnLFxuICAgICAgbWVzc2FnZTogYFBlcmlvZCAke3BlcmlvZC5sYWJlbH0gaGFzIG5vdCBmaW5pc2hlZCB5ZXQgKGVuZHMgJHtwZXJpb2QuZW5kLnRvSVNPU3RyaW5nKCl9KS4gQSByZXBvcnQgY292ZXJzIHRoZSBsYXN0IENPTVBMRVRFIHBlcmlvZC5gLFxuICAgIH07XG4gIH1cbiAgaWYgKG9wdHMubWluRnJvbU1zID4gMCkge1xuICAgIC8vIFRoZSBjb21wYXJpc29uIHBlcmlvZCBpcyBwYXJ0IG9mIHRoZSByZXBvcnQgd2hlbiBhIHNlY3Rpb24gc2hvd3MgY2hhbmdlLCBzb1xuICAgIC8vIGl0cyBzdGFydCBpcyB0aGUgcmVhbCBmbG9vciDigJQgb3RoZXJ3aXNlIFwidnMgbGFzdCB3ZWVrXCIgc2lsZW50bHkgcmVhZHMgemVyby5cbiAgICBjb25zdCBlYXJsaWVzdCA9IG9wdHMuaW5jbHVkZVByZXZpb3VzID09PSBmYWxzZSA/IHBlcmlvZC5zdGFydCA6IHBlcmlvZC5wcmV2U3RhcnQ7XG4gICAgaWYgKGVhcmxpZXN0LmdldFRpbWUoKSA8IG9wdHMubWluRnJvbU1zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWFzb246ICdiZWZvcmVfcmV0ZW50aW9uJyxcbiAgICAgICAgbWVzc2FnZTogYFBlcmlvZCAke3BlcmlvZC5sYWJlbH0gc3RhcnRzICR7ZWFybGllc3QudG9JU09TdHJpbmcoKX0sIGJlZm9yZSB0aGlzIG9yZ2FuaXphdGlvbidzIHJlcG9ydGluZyByZXRlbnRpb24gaG9yaXpvbiAoJHtuZXcgRGF0ZShvcHRzLm1pbkZyb21NcykudG9JU09TdHJpbmcoKX0pLiBUaGUgdW5kZXJseWluZyBldmVudHMgaGF2ZSBiZWVuIHB1cmdlZC5gLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogVGhlIGluc3RhbnQgdGhlIHBlcmlvZCBDT05UQUlOSU5HIGBmcm9tYCBlbmRzIOKAlCB0aGF0IGlzLCB0aGUgbW9tZW50IHRoZSBuZXh0XG4gKiBjb21wbGV0ZSBwZXJpb2QgYmVjb21lcyByZXBvcnRhYmxlLlxuICpcbiAqIFRoaXMgaXMgd2hhdCBhIGRlZmluaXRpb24ncyBgbmV4dFJ1bkF0YCBpcyBkZXJpdmVkIGZyb20sIGFuZCBpdCBpcyBkZWxpYmVyYXRlbHlcbiAqIHRoZSBib3VuZGFyeSByYXRoZXIgdGhhbiBcImxhc3QgcnVuICsgNyBkYXlzXCI6IGEgd2Vla2x5IHJlcG9ydCB3aG9zZSBuZXh0IHJ1biBpc1xuICogY29tcHV0ZWQgYnkgYWRkaW5nIGVsYXBzZWQgbWlsbGlzZWNvbmRzIGRyaWZ0cyBhbiBob3VyIGF0IGV2ZXJ5IERTVCB0cmFuc2l0aW9uXG4gKiBhbmQgZXZlbnR1YWxseSBmaXJlcyBvbiBhIFN1bmRheS4gVGhlIGJvdW5kYXJ5IGlzIGEgY2FsZW5kYXIgZmFjdCBpbiB0aGVcbiAqIHJlcG9ydCdzIG93biB0aW1lem9uZSwgc28gaXQgaXMgdGhlIHNhbWUgYW5zd2VyIHdoYXRldmVyIHRoZSBwcmV2aW91cyBydW4gZGlkLlxuICpcbiAqIFN0cmljdGx5IGFmdGVyIGBmcm9tYDogYSBgZnJvbWAgc2l0dGluZyBleGFjdGx5IG9uIGEgYm91bmRhcnkgZ2V0cyB0aGUgTkVYVCBvbmUsXG4gKiBzbyBhIHJ1biB0aGF0IGNvbXBsZXRlcyBhdCB0aGUgaW5zdGFudCBvZiB0aGUgYm91bmRhcnkgY2Fubm90IHJlLWNsYWltIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dFBlcmlvZEJvdW5kYXJ5KFxuICBjYWRlbmNlOiBSZXBvcnRDYWRlbmNlLFxuICB0ejogc3RyaW5nLFxuICB3ZWVrU3RhcnQ6ICdtb25kYXknIHwgJ3N1bmRheScgPSAnbW9uZGF5JyxcbiAgZnJvbTogRGF0ZSA9IG5ldyBEYXRlKCksXG4pOiBEYXRlIHtcbiAgY29uc3QgY29udGFpbmluZyA9IHN0YXJ0T2ZQZXJpb2QoY2l2aWxJbihmcm9tLCB0eiksIGNhZGVuY2UsIHdlZWtTdGFydCk7XG4gIHJldHVybiBpbnN0YW50T2ZDaXZpbChzaGlmdFBlcmlvZChjb250YWluaW5nLCBjYWRlbmNlLCAxKSwgdHopO1xufVxuXG4vKipcbiAqIEV2ZXJ5IENPTVBMRVRFIHBlcmlvZCB0aGF0IGVuZGVkIGFmdGVyIGBzaW5jZWAsIG9sZGVzdCBmaXJzdC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBjYXRjaC11cCBsaXN0OiBhIHNlcnZpY2UgdGhhdCB3YXMgZG93biBvdmVyIGEgd2Vla2VuZCwgYSBkZWZpbml0aW9uXG4gKiBjcmVhdGVkIHdpdGggYSBiYWNrLWRhdGVkIGBuZXh0UnVuQXRgLCBvciBhIHNjaGVkdWxlciBkaXNhYmxlZCBieSBpdHMga2lsbCBzd2l0Y2hcbiAqIGZvciBhIGZvcnRuaWdodCBhbGwgbGVhdmUgcGVyaW9kcyB0aGF0IHdlcmUgbmV2ZXIgcmVwb3J0ZWQuIFJldHVybmluZyB0aGVtIGluXG4gKiBvcmRlciBtYXR0ZXJzIOKAlCBhIG1hbmFnZXIgcmVhZGluZyB0aHJlZSB3ZWVrbHkgcmVwb3J0cyB0aGF0IGFycml2ZSBhdCBvbmNlIG5lZWRzXG4gKiB0aGVtIHRvIG1ha2Ugc2Vuc2UgcmVhZCBkb3dud2FyZHMuXG4gKlxuICogYG1heGAgYm91bmRzIHRoZSB3YWxrLiBBIGRlZmluaXRpb24gdW50b3VjaGVkIGZvciB0d28geWVhcnMgbXVzdCBub3QgcHJvZHVjZSAxMDRcbiAqIHdlZWtseSByZXBvcnRzIGluIG9uZSBjeWNsZTsgdGhlIGNhcCBtZWFucyB0aGUgb2xkZXN0IGFyZSBza2lwcGVkLCB3aGljaCBpcyB0aGVcbiAqIHJpZ2h0IHRyYWRlIOKAlCBub2JvZHkgd2FudHMgbGFzdCBBcHJpbCdzIHdlZWtseSBzdGF0dXMsIGFuZCB0aGUgc25hcHNob3QgZm9yIGl0XG4gKiB3b3VsZCBiZSBwYXN0IHRoZSByZXRlbnRpb24gaG9yaXpvbiBhbnl3YXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wbGV0ZVBlcmlvZHNTaW5jZShcbiAgY2FkZW5jZTogUmVwb3J0Q2FkZW5jZSxcbiAgdHo6IHN0cmluZyxcbiAgd2Vla1N0YXJ0OiAnbW9uZGF5JyB8ICdzdW5kYXknLFxuICBzaW5jZTogRGF0ZSB8IG51bGwsXG4gIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCksXG4gIG1heCA9IDQsXG4pOiBSZXNvbHZlZFBlcmlvZFtdIHtcbiAgY29uc3QgbGF0ZXN0ID0gcmVzb2x2ZVBlcmlvZChjYWRlbmNlLCB0eiwgd2Vla1N0YXJ0LCBub3cpO1xuICBpZiAobWF4IDw9IDApIHJldHVybiBbXTtcbiAgLy8gTm8gcHJldmlvdXMgcnVuOiByZXBvcnQgdGhlIGxhdGVzdCBjb21wbGV0ZSBwZXJpb2Qgb25seS4gQSBkZWZpbml0aW9uIGNyZWF0ZWRcbiAgLy8gdG9kYXkgZG9lcyBub3Qgb3dlIGl0cyBvd25lciBhIGJhY2tmaWxsIHRoZXkgbmV2ZXIgYXNrZWQgZm9yLlxuICBpZiAoIXNpbmNlKSByZXR1cm4gW2xhdGVzdF07XG5cbiAgY29uc3Qgb3V0OiBSZXNvbHZlZFBlcmlvZFtdID0gW107XG4gIGNvbnN0IGxhdGVzdFN0YXJ0ID0gc3RhcnRPZlBlcmlvZChjaXZpbEluKGxhdGVzdC5zdGFydCwgdHopLCBjYWRlbmNlLCB3ZWVrU3RhcnQpO1xuICBmb3IgKGxldCBiYWNrID0gMDsgYmFjayA8IG1heDsgYmFjayArPSAxKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzaGlmdFBlcmlvZChsYXRlc3RTdGFydCwgY2FkZW5jZSwgLWJhY2spO1xuICAgIGNvbnN0IGluc3RhbnQgPSBpbnN0YW50T2ZDaXZpbChzdGFydCwgdHopO1xuICAgIC8vIGBzaW5jZWAgaXMgdGhlIGxhc3QgcnVuJ3MgcGVyaW9kIEVORCBmb3IgYSBydW4gdGhhdCBoYXBwZW5lZCwgc28gYSBwZXJpb2RcbiAgICAvLyB3aG9zZSBlbmQgaXMgYXQgb3IgYmVmb3JlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQuXG4gICAgaWYgKGluc3RhbnRPZkNpdmlsKHNoaWZ0UGVyaW9kKHN0YXJ0LCBjYWRlbmNlLCAxKSwgdHopLmdldFRpbWUoKSA8PSBzaW5jZS5nZXRUaW1lKCkpIGJyZWFrO1xuICAgIGNvbnN0IHByZXZTdGFydCA9IHNoaWZ0UGVyaW9kKHN0YXJ0LCBjYWRlbmNlLCAtMSk7XG4gICAgb3V0LnB1c2goe1xuICAgICAgc3RhcnQ6IGluc3RhbnQsXG4gICAgICBlbmQ6IGluc3RhbnRPZkNpdmlsKHNoaWZ0UGVyaW9kKHN0YXJ0LCBjYWRlbmNlLCAxKSwgdHopLFxuICAgICAgcHJldlN0YXJ0OiBpbnN0YW50T2ZDaXZpbChwcmV2U3RhcnQsIHR6KSxcbiAgICAgIHByZXZFbmQ6IGluc3RhbnQsXG4gICAgICBsYWJlbDogZm9ybWF0TGFiZWwoc3RhcnQsIGNhZGVuY2UpLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXQucmV2ZXJzZSgpO1xufVxuIl19
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyaW9kLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9zdGFrZWhvbGRlci9wZXJpb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTJDdEMsbUVBQW1FO0FBQ25FLFNBQVMsT0FBTyxDQUFDLE9BQWEsRUFBRSxFQUFVO0lBQ3hDLDhFQUE4RTtJQUM5RSxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFO1FBQzdDLFFBQVEsRUFBRSxFQUFFO1FBQ1osSUFBSSxFQUFFLFNBQVM7UUFDZixLQUFLLEVBQUUsU0FBUztRQUNoQixHQUFHLEVBQUUsU0FBUztRQUNkLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLFNBQVM7UUFDakIsU0FBUyxFQUFFLEtBQUs7S0FDakIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixNQUFNLEdBQUcsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQy9GLE9BQU87UUFDTCxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNqQixLQUFLLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNuQixHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNmLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2pCLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3JCLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDO0tBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFD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RUFBRSxDQUFDO1lBQ3ZELFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTztZQUNoQixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQZXJpb2QgcmVzb2x1dGlvbiBmb3Igc2NoZWR1bGVkIHJlcG9ydHM6IHdoaWNoIGNvbXBsZXRlIHdlZWssIG1vbnRoIG9yIHF1YXJ0ZXJcbiAqIGEgcnVuIGNvdmVycywgYW5kIHRoZSBvbmUgYmVmb3JlIGl0IGZvciBjb21wYXJpc29uLlxuICpcbiAqIEEgcmVwb3J0IGNvdmVycyB0aGUgTEFTVCBDT01QTEVURSBwZXJpb2QsIG5ldmVyIGEgcGFydGlhbCBvbmUuIFwiRGVwbG95cyB0aGlzXG4gKiB3ZWVrXCIgb24gYSBNb25kYXkgbW9ybmluZyBtZWFucyBsYXN0IHdlZWsg4oCUIGEgbWFuYWdlciByZWFkaW5nIGEgaGFsZi1maW5pc2hlZFxuICogd2VlayBzZWVzIG51bWJlcnMgdGhhdCBjaGFuZ2UgdW5kZXIgdGhlbS5cbiAqXG4gKiBFdmVyeXRoaW5nIGhlcmUgaXMgY29tcHV0ZWQgaW4gdGhlIHJlcG9ydCdzIElBTkEgdGltZXpvbmUsIHdpdGhvdXQgYSBkYXRlXG4gKiBsaWJyYXJ5LiBgSW50bC5EYXRlVGltZUZvcm1hdGAgd2l0aCBhIGB0aW1lWm9uZWAgaXMgdGhlIG9ubHkgdHogZGF0YWJhc2UgTm9kZVxuICogc2hpcHMsIHNvIHRoZSBhcHByb2FjaCBpczogcmVhZCB0aGUgd2FsbC1jbG9jayBwYXJ0cyBpbiB0aGF0IHpvbmUsIGRvIGNpdmlsXG4gKiBhcml0aG1ldGljIG9uIHRoZW0gKHdoaWNoIGlzIGV4YWN0IOKAlCBtb250aHMgYW5kIHF1YXJ0ZXJzIGFyZSBkZWZpbmVkIG9uIHRoZVxuICogY2FsZW5kYXIsIG5vdCBvbiBlbGFwc2VkIG1pbGxpc2Vjb25kcyksIHRoZW4gY29udmVydCB0aGUgcmVzdWx0aW5nIGNpdmlsXG4gKiBtaWRuaWdodCBiYWNrIHRvIGEgVVRDIGluc3RhbnQgYnkgbWVhc3VyaW5nIHRoZSB6b25lJ3Mgb2Zmc2V0IEFUIHRoYXQgaW5zdGFudC5cbiAqXG4gKiBNZWFzdXJpbmcgdGhlIG9mZnNldCBhdCB0aGUgdGFyZ2V0IGluc3RhbnQgcmF0aGVyIHRoYW4gYXQgYG5vd2AgaXMgd2hhdCBtYWtlc1xuICogRFNUIGNvcnJlY3Q6IGEgd2Vla2x5IHBlcmlvZCB0aGF0IHN0YXJ0cyBiZWZvcmUgYSB0cmFuc2l0aW9uIGFuZCBlbmRzIGFmdGVyIGl0XG4gKiBpcyBub3QgMTY4IGhvdXJzIGxvbmcsIGFuZCBhIHJlc29sdmVyIHRoYXQgYWRkZWQgYDcgKiAyNCAqIDM2MDBfMDAwYCB3b3VsZFxuICogc2lsZW50bHkgc2hpZnQgZXZlcnkgYm91bmRhcnkgYnkgYW4gaG91ciBmb3IgaGFsZiB0aGUgeWVhci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFdlZWtTdGFydCB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUmVwb3J0Q2FkZW5jZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFiYXNlL3NjaGVtYS9yZXBvcnRpbmctc3Rha2Vob2xkZXIuanMnO1xuXG4vKiogT25lIHJlc29sdmVkIHJlcG9ydGluZyBwZXJpb2QsIHBsdXMgdGhlIHByZXZpb3VzIG9uZSBmb3IgY29tcGFyaXNvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRQZXJpb2Qge1xuICAvKiogSW5jbHVzaXZlIHN0YXJ0IG9mIHRoZSBwZXJpb2QgYmVpbmcgcmVwb3J0ZWQgKFVUQyBpbnN0YW50KS4gKi9cbiAgc3RhcnQ6IERhdGU7XG4gIC8qKiBFeGNsdXNpdmUgZW5kIOKAlCBhbHNvIHRoZSBzdGFydCBvZiB0aGUgcGVyaW9kIGluIHByb2dyZXNzLiAqL1xuICBlbmQ6IERhdGU7XG4gIC8qKiBJbmNsdXNpdmUgc3RhcnQgb2YgdGhlIFBSRVZJT1VTIHBlcmlvZCwgZm9yIHBlcmlvZC1vdmVyLXBlcmlvZCBjaGFuZ2UuICovXG4gIHByZXZTdGFydDogRGF0ZTtcbiAgLyoqIEV4Y2x1c2l2ZSBlbmQgb2YgdGhlIHByZXZpb3VzIHBlcmlvZCAoPT09IGBzdGFydGApLiAqL1xuICBwcmV2RW5kOiBEYXRlO1xuICAvKiogSHVtYW4gbGFiZWwgaW4gdGhlIHJlcG9ydCdzIHRpbWV6b25lOiBgMjAyNi1XMzhgLCBgMjAyNi0wOGAsIGAyMDI2LVEzYC4gKi9cbiAgbGFiZWw6IHN0cmluZztcbn1cblxuLyoqIENpdmlsICh3YWxsLWNsb2NrKSBkYXRlIHBhcnRzIGluIGEgZ2l2ZW4gem9uZS4gKi9cbmludGVyZmFjZSBDaXZpbCB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXI7IGhvdXI6IG51bWJlcjsgbWludXRlOiBudW1iZXI7IHNlY29uZDogbnVtYmVyIH1cblxuLyoqIFJlYWQgdGhlIHdhbGwtY2xvY2sgcGFydHMgb2YgYGluc3RhbnRgIGFzIHRoZXkgcmVhZCBpbiBgdHpgLiAqL1xuZnVuY3Rpb24gY2l2aWxJbihpbnN0YW50OiBEYXRlLCB0ejogc3RyaW5nKTogQ2l2aWwge1xuICAvLyBgZW4tQ0FgIHlpZWxkcyBJU08taXNoIGBZWVlZLU1NLUREYCwgYW5kIGhvdXJDeWNsZSBoMjMgYXZvaWRzIGEgMjQ6MDAgaG91ci5cbiAgY29uc3QgcGFydHMgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tQ0EnLCB7XG4gICAgdGltZVpvbmU6IHR6LFxuICAgIHllYXI6ICdudW1lcmljJyxcbiAgICBtb250aDogJzItZGlnaXQnLFxuICAgIGRheTogJzItZGlnaXQnLFxuICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICBzZWNvbmQ6ICcyLWRpZ2l0JyxcbiAgICBob3VyQ3ljbGU6ICdoMjMnLFxuICB9KS5mb3JtYXRUb1BhcnRzKGluc3RhbnQpO1xuICBjb25zdCBnZXQgPSAodHlwZTogc3RyaW5nKTogbnVtYmVyID0+IE51bWJlcihwYXJ0cy5maW5kKChwKSA9PiBwLnR5cGUgPT09IHR5cGUpPy52YWx1ZSA/PyAnMCcpO1xuICByZXR1cm4ge1xuICAgIHllYXI6IGdldCgneWVhcicpLFxuICAgIG1vbnRoOiBnZXQoJ21vbnRoJyksXG4gICAgZGF5OiBnZXQoJ2RheScpLFxuICAgIGhvdXI6IGdldCgnaG91cicpLFxuICAgIG1pbnV0ZTogZ2V0KCdtaW51dGUnKSxcbiAgICBzZWNvbmQ6IGdldCgnc2Vjb25kJyksXG4gIH07XG59XG5cbi8qKlxuICogVGhlIFVUQyBpbnN0YW50IGF0IHdoaWNoIHRoZSBnaXZlbiBjaXZpbCB0aW1lIG9jY3VycyBpbiBgdHpgLlxuICpcbiAqIFR3byBwYXNzZXM6IGd1ZXNzIGJ5IHRyZWF0aW5nIHRoZSBjaXZpbCB0aW1lIGFzIFVUQywgbWVhc3VyZSBob3cgZmFyIHRoYXQgZ3Vlc3NcbiAqIGFjdHVhbGx5IGxhbmRzIGZyb20gdGhlIHRhcmdldCBpbiBgdHpgLCBjb3JyZWN0LCB0aGVuIHJlLW1lYXN1cmUgb25jZS4gVGhlXG4gKiBzZWNvbmQgcGFzcyBtYXR0ZXJzIGV4YWN0bHkgYXQgYSBEU1QgdHJhbnNpdGlvbiwgd2hlcmUgdGhlIGZpcnN0IGNvcnJlY3Rpb24gY2FuXG4gKiBvdmVyc2hvb3QgaW50byB0aGUgb3RoZXIgb2Zmc2V0LlxuICpcbiAqIEZvciBhIGNpdmlsIG1pZG5pZ2h0IHRoYXQgZG9lcyBub3QgZXhpc3QgKHNwcmluZy1mb3J3YXJkIHNraXBzIGl0KSB0aGlzIHNldHRsZXNcbiAqIG9uIHRoZSBpbnN0YW50IGp1c3QgYWZ0ZXIgdGhlIGdhcCwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHRoZSBkYXkgYXMgdGhhdCB6b25lXG4gKiBleHBlcmllbmNlZCBpdCDigJQgdGhlIHJpZ2h0IGFuc3dlciBmb3IgYSBwZXJpb2QgYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIGluc3RhbnRPZkNpdmlsKGM6IHsgeWVhcjogbnVtYmVyOyBtb250aDogbnVtYmVyOyBkYXk6IG51bWJlciB9LCB0ejogc3RyaW5nKTogRGF0ZSB7XG4gIGNvbnN0IGFzVXRjID0gRGF0ZS5VVEMoYy55ZWFyLCBjLm1vbnRoIC0gMSwgYy5kYXksIDAsIDAsIDApO1xuICBsZXQgZ3Vlc3MgPSBhc1V0YztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICBjb25zdCBiYWNrID0gY2l2aWxJbihuZXcgRGF0ZShndWVzcyksIHR6KTtcbiAgICBjb25zdCBiYWNrVXRjID0gRGF0ZS5VVEMoYmFjay55ZWFyLCBiYWNrLm1vbnRoIC0gMSwgYmFjay5kYXksIGJhY2suaG91ciwgYmFjay5taW51dGUsIGJhY2suc2Vjb25kKTtcbiAgICBjb25zdCBkcmlmdCA9IGJhY2tVdGMgLSBhc1V0YztcbiAgICBpZiAoZHJpZnQgPT09IDApIGJyZWFrO1xuICAgIGd1ZXNzIC09IGRyaWZ0O1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShndWVzcyk7XG59XG5cbi8qKiAwID0gTW9uZGF5IOKApiA2ID0gU3VuZGF5LCBmb3IgYSBjaXZpbCBkYXRlIChaZWxsZXItZnJlZTogdXNlIGEgVVRDIHByb2JlKS4gKi9cbmZ1bmN0aW9uIGNpdmlsV2Vla2RheShjOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSk6IG51bWJlciB7XG4gIGNvbnN0IGRvdyA9IG5ldyBEYXRlKERhdGUuVVRDKGMueWVhciwgYy5tb250aCAtIDEsIGMuZGF5KSkuZ2V0VVRDRGF5KCk7IC8vIDA9U3VuXG4gIHJldHVybiAoZG93ICsgNikgJSA3OyAvLyAwPU1vblxufVxuXG4vKiogQWRkIGBkYXlzYCB0byBhIGNpdmlsIGRhdGUsIG5vcm1hbGlzaW5nIHZpYSBVVEMgYXJpdGhtZXRpYyAobm8gdHogaW52b2x2ZWQpLiAqL1xuZnVuY3Rpb24gYWRkQ2l2aWxEYXlzKGM6IHsgeWVhcjogbnVtYmVyOyBtb250aDogbnVtYmVyOyBkYXk6IG51bWJlciB9LCBkYXlzOiBudW1iZXIpOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShEYXRlLlVUQyhjLnllYXIsIGMubW9udGggLSAxLCBjLmRheSArIGRheXMpKTtcbiAgcmV0dXJuIHsgeWVhcjogZC5nZXRVVENGdWxsWWVhcigpLCBtb250aDogZC5nZXRVVENNb250aCgpICsgMSwgZGF5OiBkLmdldFVUQ0RhdGUoKSB9O1xufVxuXG4vKiogQWRkIGBtb250aHNgIHRvIGEgY2l2aWwgZGF0ZSwgY2xhbXBpbmcgdGhlIGRheSBpbnRvIHRoZSB0YXJnZXQgbW9udGguICovXG5mdW5jdGlvbiBhZGRDaXZpbE1vbnRocyhjOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSwgbW9udGhzOiBudW1iZXIpOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSB7XG4gIGNvbnN0IHplcm9CYXNlZCA9IChjLnllYXIgKiAxMikgKyAoYy5tb250aCAtIDEpICsgbW9udGhzO1xuICBjb25zdCB5ZWFyID0gTWF0aC5mbG9vcih6ZXJvQmFzZWQgLyAxMik7XG4gIGNvbnN0IG1vbnRoID0gKHplcm9CYXNlZCAlIDEyKSArIDE7XG4gIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgMCkpLmdldFVUQ0RhdGUoKTtcbiAgcmV0dXJuIHsgeWVhciwgbW9udGgsIGRheTogTWF0aC5taW4oYy5kYXksIGxhc3REYXkpIH07XG59XG5cbi8qKiBUaGUgY2l2aWwgc3RhcnQgb2YgdGhlIHBlcmlvZCBjb250YWluaW5nIGBjYC4gKi9cbmZ1bmN0aW9uIHN0YXJ0T2ZQZXJpb2QoXG4gIGM6IENpdmlsLFxuICBjYWRlbmNlOiBSZXBvcnRDYWRlbmNlLFxuICB3ZWVrU3RhcnQ6IFdlZWtTdGFydCxcbik6IHsgeWVhcjogbnVtYmVyOyBtb250aDogbnVtYmVyOyBkYXk6IG51bWJlciB9IHtcbiAgY29uc3QgZGF0ZSA9IHsgeWVhcjogYy55ZWFyLCBtb250aDogYy5tb250aCwgZGF5OiBjLmRheSB9O1xuICBpZiAoY2FkZW5jZSA9PT0gJ3dlZWtseScpIHtcbiAgICBjb25zdCBtb25kYXlJbmRleCA9IGNpdmlsV2Vla2RheShkYXRlKTtcbiAgICAvLyBTdW5kYXkgd2Vla3Mgc3RhcnQgb25lIGRheSBlYXJsaWVyIHRoYW4gdGhlIE1vbmRheSBpbmRleCBpbXBsaWVzLlxuICAgIGNvbnN0IGJhY2sgPSB3ZWVrU3RhcnQgPT09ICdzdW5kYXknID8gKG1vbmRheUluZGV4ICsgMSkgJSA3IDogbW9uZGF5SW5kZXg7XG4gICAgcmV0dXJuIGFkZENpdmlsRGF5cyhkYXRlLCAtYmFjayk7XG4gIH1cbiAgaWYgKGNhZGVuY2UgPT09ICdtb250aGx5JykgcmV0dXJuIHsgeWVhcjogYy55ZWFyLCBtb250aDogYy5tb250aCwgZGF5OiAxIH07XG4gIC8vIFF1YXJ0ZXJseTogSmFuL0Fwci9KdWwvT2N0LlxuICBjb25zdCBxU3RhcnRNb250aCA9IE1hdGguZmxvb3IoKGMubW9udGggLSAxKSAvIDMpICogMyArIDE7XG4gIHJldHVybiB7IHllYXI6IGMueWVhciwgbW9udGg6IHFTdGFydE1vbnRoLCBkYXk6IDEgfTtcbn1cblxuLyoqIFNoaWZ0IGEgY2l2aWwgcGVyaW9kIHN0YXJ0IGJ5IGBuYCB3aG9sZSBwZXJpb2RzLiAqL1xuZnVuY3Rpb24gc2hpZnRQZXJpb2QoXG4gIHN0YXJ0OiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSxcbiAgY2FkZW5jZTogUmVwb3J0Q2FkZW5jZSxcbiAgbjogbnVtYmVyLFxuKTogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyIH0ge1xuICBpZiAoY2FkZW5jZSA9PT0gJ3dlZWtseScpIHJldHVybiBhZGRDaXZpbERheXMoc3RhcnQsIDcgKiBuKTtcbiAgaWYgKGNhZGVuY2UgPT09ICdtb250aGx5JykgcmV0dXJuIGFkZENpdmlsTW9udGhzKHN0YXJ0LCBuKTtcbiAgcmV0dXJuIGFkZENpdmlsTW9udGhzKHN0YXJ0LCAzICogbik7XG59XG5cbi8qKlxuICogSVNPLTg2MDEgd2VlayBudW1iZXIgb2YgYSBjaXZpbCBkYXRlLiBVc2VkIG9ubHkgZm9yIHRoZSB3ZWVrbHkgTEFCRUwsIGFuZFxuICogZGVsaWJlcmF0ZWx5IElTTyBldmVuIGZvciBhIFN1bmRheS13ZWVrIG9yZzogYDIwMjYtVzM4YCBpcyBhIHJlY29nbmlzZWRcbiAqIG5vdGF0aW9uIGFuZCBpbnZlbnRpbmcgYSBTdW5kYXktYmFzZWQgbnVtYmVyaW5nIHdvdWxkIG1ha2UgbGFiZWxzXG4gKiBub24tY29tcGFyYWJsZSB3aXRoIGFueXRoaW5nIGVsc2UuXG4gKi9cbmZ1bmN0aW9uIGlzb1dlZWsoYzogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyIH0pOiB7IHllYXI6IG51bWJlcjsgd2VlazogbnVtYmVyIH0ge1xuICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoYy55ZWFyLCBjLm1vbnRoIC0gMSwgYy5kYXkpKTtcbiAgY29uc3QgZGF5ID0gKGQuZ2V0VVRDRGF5KCkgKyA2KSAlIDc7IC8vIDA9TW9uXG4gIGQuc2V0VVRDRGF0ZShkLmdldFVUQ0RhdGUoKSAtIGRheSArIDMpOyAvLyBuZWFyZXN0IFRodXJzZGF5XG4gIGNvbnN0IGlzb1llYXIgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIGNvbnN0IGZpcnN0VGh1cnNkYXkgPSBuZXcgRGF0ZShEYXRlLlVUQyhpc29ZZWFyLCAwLCA0KSk7XG4gIGNvbnN0IGZpcnN0RGF5ID0gKGZpcnN0VGh1cnNkYXkuZ2V0VVRDRGF5KCkgKyA2KSAlIDc7XG4gIGZpcnN0VGh1cnNkYXkuc2V0VVRDRGF0ZShmaXJzdFRodXJzZGF5LmdldFVUQ0RhdGUoKSAtIGZpcnN0RGF5ICsgMyk7XG4gIGNvbnN0IHdlZWsgPSAxICsgTWF0aC5yb3VuZCgoZC5nZXRUaW1lKCkgLSBmaXJzdFRodXJzZGF5LmdldFRpbWUoKSkgLyAoNyAqIDg2XzQwMF8wMDApKTtcbiAgcmV0dXJuIHsgeWVhcjogaXNvWWVhciwgd2VlayB9O1xufVxuXG4vKiogVGhlIGxhYmVsIGZvciBhIHBlcmlvZCwgZnJvbSBpdHMgY2l2aWwgc3RhcnQuICovXG5mdW5jdGlvbiBmb3JtYXRMYWJlbChzdGFydDogeyB5ZWFyOiBudW1iZXI7IG1vbnRoOiBudW1iZXI7IGRheTogbnVtYmVyIH0sIGNhZGVuY2U6IFJlcG9ydENhZGVuY2UpOiBzdHJpbmcge1xuICBpZiAoY2FkZW5jZSA9PT0gJ3dlZWtseScpIHtcbiAgICBjb25zdCB7IHllYXIsIHdlZWsgfSA9IGlzb1dlZWsoc3RhcnQpO1xuICAgIHJldHVybiBgJHt5ZWFyfS1XJHtTdHJpbmcod2VlaykucGFkU3RhcnQoMiwgJzAnKX1gO1xuICB9XG4gIGlmIChjYWRlbmNlID09PSAnbW9udGhseScpIHJldHVybiBgJHtzdGFydC55ZWFyfS0ke1N0cmluZyhzdGFydC5tb250aCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICByZXR1cm4gYCR7c3RhcnQueWVhcn0tUSR7TWF0aC5mbG9vcigoc3RhcnQubW9udGggLSAxKSAvIDMpICsgMX1gO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGxhc3QgQ09NUExFVEUgcGVyaW9kIGZvciBgY2FkZW5jZWAgaW4gYHR6YC5cbiAqXG4gKiBUaGUgcGVyaW9kIGluIHByb2dyZXNzIGlzIGV4Y2x1ZGVkOiBpdHMgZW5kIGlzIHRoZSBib3VuZGFyeSwgc28gYSBNb25kYXkgcnVuXG4gKiByZXBvcnRzIGxhc3Qgd2VlayBhbmQgYSBydW4gb24gdGhlIDFzdCByZXBvcnRzIGxhc3QgbW9udGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGVyaW9kKFxuICBjYWRlbmNlOiBSZXBvcnRDYWRlbmNlLFxuICB0ejogc3RyaW5nLFxuICB3ZWVrU3RhcnQ6IFdlZWtTdGFydCA9ICdtb25kYXknLFxuICBub3c6IERhdGUgPSBuZXcgRGF0ZSgpLFxuKTogUmVzb2x2ZWRQZXJpb2Qge1xuICBjb25zdCBub3dDaXZpbCA9IGNpdmlsSW4obm93LCB0eik7XG4gIC8vIFN0YXJ0IG9mIHRoZSBwZXJpb2QgQ09OVEFJTklORyBub3cgPSBlbmQgb2YgdGhlIGxhc3QgY29tcGxldGUgb25lLlxuICBjb25zdCBjdXJyZW50U3RhcnQgPSBzdGFydE9mUGVyaW9kKG5vd0NpdmlsLCBjYWRlbmNlLCB3ZWVrU3RhcnQpO1xuICBjb25zdCBzdGFydCA9IHNoaWZ0UGVyaW9kKGN1cnJlbnRTdGFydCwgY2FkZW5jZSwgLTEpO1xuICBjb25zdCBwcmV2U3RhcnQgPSBzaGlmdFBlcmlvZChjdXJyZW50U3RhcnQsIGNhZGVuY2UsIC0yKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogaW5zdGFudE9mQ2l2aWwoc3RhcnQsIHR6KSxcbiAgICBlbmQ6IGluc3RhbnRPZkNpdmlsKGN1cnJlbnRTdGFydCwgdHopLFxuICAgIHByZXZTdGFydDogaW5zdGFudE9mQ2l2aWwocHJldlN0YXJ0LCB0eiksXG4gICAgcHJldkVuZDogaW5zdGFudE9mQ2l2aWwoc3RhcnQsIHR6KSxcbiAgICBsYWJlbDogZm9ybWF0TGFiZWwoc3RhcnQsIGNhZGVuY2UpLFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSBTUEVDSUZJQyBwZXJpb2QgYnkgaXRzIGxhYmVsIChgMjAyNi1XMzhgLCBgMjAyNi0wOGAsIGAyMDI2LVEzYCksIGZvclxuICogb24tZGVtYW5kIHJ1bnMgYW5kIGJhY2tmaWxscy4gUmV0dXJucyBudWxsIHdoZW4gdGhlIGxhYmVsIGRvZXMgbm90IHBhcnNlIG9yXG4gKiBkb2VzIG5vdCBtYXRjaCB0aGUgY2FkZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQZXJpb2RCeUxhYmVsKFxuICBsYWJlbDogc3RyaW5nLFxuICBjYWRlbmNlOiBSZXBvcnRDYWRlbmNlLFxuICB0ejogc3RyaW5nLFxuICB3ZWVrU3RhcnQ6IFdlZWtTdGFydCA9ICdtb25kYXknLFxuKTogUmVzb2x2ZWRQZXJpb2QgfCBudWxsIHtcbiAgbGV0IHN0YXJ0OiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHdlZWsgPSAvXihcXGR7NH0pLVcoXFxkezJ9KSQvLmV4ZWMobGFiZWwpO1xuICBjb25zdCBtb250aCA9IC9eKFxcZHs0fSktKFxcZHsyfSkkLy5leGVjKGxhYmVsKTtcbiAgY29uc3QgcXVhcnRlciA9IC9eKFxcZHs0fSktUShbMS00XSkkLy5leGVjKGxhYmVsKTtcblxuICBpZiAoY2FkZW5jZSA9PT0gJ3dlZWtseScgJiYgd2Vlaykge1xuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIod2Vla1sxXSk7XG4gICAgY29uc3Qgd2sgPSBOdW1iZXIod2Vla1syXSk7XG4gICAgaWYgKHdrIDwgMSB8fCB3ayA+IDUzKSByZXR1cm4gbnVsbDtcbiAgICAvLyBJU08gd2VlayAxIGNvbnRhaW5zIEphbiA0dGg7IHdhbGsgYmFjayB0byB0aGF0IHdlZWsncyBzdGFydC5cbiAgICBjb25zdCBqYW40ID0geyB5ZWFyLCBtb250aDogMSwgZGF5OiA0IH07XG4gICAgY29uc3Qgd2VlazFTdGFydCA9IHN0YXJ0T2ZQZXJpb2QoXG4gICAgICB7IC4uLmphbjQsIGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwIH0sXG4gICAgICAnd2Vla2x5JyxcbiAgICAgIHdlZWtTdGFydCxcbiAgICApO1xuICAgIHN0YXJ0ID0gYWRkQ2l2aWxEYXlzKHdlZWsxU3RhcnQsICh3ayAtIDEpICogNyk7XG4gICAgLy8gQSA1M3JkIHdlZWsgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIElTTyB5ZWFyIGxhbmRzIGluIHRoZSBuZXh0IG9uZS5cbiAgICBpZiAoaXNvV2VlayhzdGFydCkueWVhciAhPT0geWVhciAmJiB3ayA9PT0gNTMpIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKGNhZGVuY2UgPT09ICdtb250aGx5JyAmJiBtb250aCkge1xuICAgIGNvbnN0IG0gPSBOdW1iZXIobW9udGhbMl0pO1xuICAgIGlmIChtIDwgMSB8fCBtID4gMTIpIHJldHVybiBudWxsO1xuICAgIHN0YXJ0ID0geyB5ZWFyOiBOdW1iZXIobW9udGhbMV0pLCBtb250aDogbSwgZGF5OiAxIH07XG4gIH0gZWxzZSBpZiAoY2FkZW5jZSA9PT0gJ3F1YXJ0ZXJseScgJiYgcXVhcnRlcikge1xuICAgIHN0YXJ0ID0geyB5ZWFyOiBOdW1iZXIocXVhcnRlclsxXSksIG1vbnRoOiAoTnVtYmVyKHF1YXJ0ZXJbMl0pIC0gMSkgKiAzICsgMSwgZGF5OiAxIH07XG4gIH1cbiAgaWYgKCFzdGFydCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgZW5kID0gc2hpZnRQZXJpb2Qoc3RhcnQsIGNhZGVuY2UsIDEpO1xuICBjb25zdCBwcmV2U3RhcnQgPSBzaGlmdFBlcmlvZChzdGFydCwgY2FkZW5jZSwgLTEpO1xuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBpbnN0YW50T2ZDaXZpbChzdGFydCwgdHopLFxuICAgIGVuZDogaW5zdGFudE9mQ2l2aWwoZW5kLCB0eiksXG4gICAgcHJldlN0YXJ0OiBpbnN0YW50T2ZDaXZpbChwcmV2U3RhcnQsIHR6KSxcbiAgICBwcmV2RW5kOiBpbnN0YW50T2ZDaXZpbChzdGFydCwgdHopLFxuICAgIGxhYmVsOiBmb3JtYXRMYWJlbChzdGFydCwgY2FkZW5jZSksXG4gIH07XG59XG5cbi8qKlxuICogV2h5IGEgcGVyaW9kIGNhbm5vdCBiZSByZXBvcnRlZC4gUmV0dXJuZWQgcmF0aGVyIHRoYW4gdGhyb3duIHNvIGEgcm91dGUgY2FuXG4gKiB0dXJuIGl0IGludG8gYSA0eHggd2l0aCB0aGUgcmVhc29uLCBhbmQgdGhlIHNjaGVkdWxlciBjYW4gcGF1c2Ugd2l0aCBpdC5cbiAqL1xuZXhwb3J0IHR5cGUgUGVyaW9kUmVqZWN0aW9uID1cbiAgfCB7IHJlYXNvbjogJ2luX3Byb2dyZXNzJzsgbWVzc2FnZTogc3RyaW5nIH1cbiAgfCB7IHJlYXNvbjogJ2JlZm9yZV9yZXRlbnRpb24nOyBtZXNzYWdlOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBSZWZ1c2UgYSBwZXJpb2QgdGhlIG9yZydzIGRhdGEgY2Fubm90IHN1cHBvcnQuXG4gKlxuICogQSB3aW5kb3cgb2xkZXIgdGhhbiB0aGUgcmV0ZW50aW9uIGhvcml6b24gbXVzdCBiZSBSRUZVU0VEIHdpdGggdGhlIHJlYXNvbiwgbm90XG4gKiBzaWxlbnRseSB0cnVuY2F0ZWQ6IGEgcmVwb3J0IGxhYmVsbGVkIGAyMDI2LVExYCB0aGF0IHF1aWV0bHkgY292ZXJzIG9ubHkgdGhlXG4gKiBsYXN0IDMwIGRheXMgb2YgaXQgaXMgd29yc2UgdGhhbiBubyByZXBvcnQsIGJlY2F1c2UgYSBtYW5hZ2VyIGNhbm5vdCB0ZWxsLlxuICpcbiAqIGBtaW5Gcm9tTXNgIGlzIHRoZSByZXRlbnRpb24gZmxvb3IgZnJvbSBgb3JnUmV0ZW50aW9uV2luZG93RnJvbVNldHRpbmdzYFxuICogKDAgPSB1bmxpbWl0ZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0VW5yZXBvcnRhYmxlUGVyaW9kKFxuICBwZXJpb2Q6IFJlc29sdmVkUGVyaW9kLFxuICBvcHRzOiB7IG1pbkZyb21NczogbnVtYmVyOyBub3c/OiBEYXRlOyBpbmNsdWRlUHJldmlvdXM/OiBib29sZWFuIH0sXG4pOiBQZXJpb2RSZWplY3Rpb24gfCBudWxsIHtcbiAgY29uc3Qgbm93ID0gb3B0cy5ub3cgPz8gbmV3IERhdGUoKTtcbiAgaWYgKHBlcmlvZC5lbmQuZ2V0VGltZSgpID4gbm93LmdldFRpbWUoKSkge1xuICAgIHJldHVybiB7XG4gICAgICByZWFzb246ICdpbl9wcm9ncmVzcycsXG4gICAgICBtZXNzYWdlOiBgUGVyaW9kICR7cGVyaW9kLmxhYmVsfSBoYXMgbm90IGZpbmlzaGVkIHlldCAoZW5kcyAke3BlcmlvZC5lbmQudG9JU09TdHJpbmcoKX0pLiBBIHJlcG9ydCBjb3ZlcnMgdGhlIGxhc3QgQ09NUExFVEUgcGVyaW9kLmAsXG4gICAgfTtcbiAgfVxuICBpZiAob3B0cy5taW5Gcm9tTXMgPiAwKSB7XG4gICAgLy8gVGhlIGNvbXBhcmlzb24gcGVyaW9kIGlzIHBhcnQgb2YgdGhlIHJlcG9ydCB3aGVuIGEgc2VjdGlvbiBzaG93cyBjaGFuZ2UsIHNvXG4gICAgLy8gaXRzIHN0YXJ0IGlzIHRoZSByZWFsIGZsb29yIOKAlCBvdGhlcndpc2UgXCJ2cyBsYXN0IHdlZWtcIiBzaWxlbnRseSByZWFkcyB6ZXJvLlxuICAgIGNvbnN0IGVhcmxpZXN0ID0gb3B0cy5pbmNsdWRlUHJldmlvdXMgPT09IGZhbHNlID8gcGVyaW9kLnN0YXJ0IDogcGVyaW9kLnByZXZTdGFydDtcbiAgICBpZiAoZWFybGllc3QuZ2V0VGltZSgpIDwgb3B0cy5taW5Gcm9tTXMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlYXNvbjogJ2JlZm9yZV9yZXRlbnRpb24nLFxuICAgICAgICBtZXNzYWdlOiBgUGVyaW9kICR7cGVyaW9kLmxhYmVsfSBzdGFydHMgJHtlYXJsaWVzdC50b0lTT1N0cmluZygpfSwgYmVmb3JlIHRoaXMgb3JnYW5pemF0aW9uJ3MgcmVwb3J0aW5nIHJldGVudGlvbiBob3Jpem9uICgke25ldyBEYXRlKG9wdHMubWluRnJvbU1zKS50b0lTT1N0cmluZygpfSkuIFRoZSB1bmRlcmx5aW5nIGV2ZW50cyBoYXZlIGJlZW4gcHVyZ2VkLmAsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgaW5zdGFudCB0aGUgcGVyaW9kIENPTlRBSU5JTkcgYGZyb21gIGVuZHMg4oCUIHRoYXQgaXMsIHRoZSBtb21lbnQgdGhlIG5leHRcbiAqIGNvbXBsZXRlIHBlcmlvZCBiZWNvbWVzIHJlcG9ydGFibGUuXG4gKlxuICogVGhpcyBpcyB3aGF0IGEgZGVmaW5pdGlvbidzIGBuZXh0UnVuQXRgIGlzIGRlcml2ZWQgZnJvbSwgYW5kIGl0IGlzIGRlbGliZXJhdGVseVxuICogdGhlIGJvdW5kYXJ5IHJhdGhlciB0aGFuIFwibGFzdCBydW4gKyA3IGRheXNcIjogYSB3ZWVrbHkgcmVwb3J0IHdob3NlIG5leHQgcnVuIGlzXG4gKiBjb21wdXRlZCBieSBhZGRpbmcgZWxhcHNlZCBtaWxsaXNlY29uZHMgZHJpZnRzIGFuIGhvdXIgYXQgZXZlcnkgRFNUIHRyYW5zaXRpb25cbiAqIGFuZCBldmVudHVhbGx5IGZpcmVzIG9uIGEgU3VuZGF5LiBUaGUgYm91bmRhcnkgaXMgYSBjYWxlbmRhciBmYWN0IGluIHRoZVxuICogcmVwb3J0J3Mgb3duIHRpbWV6b25lLCBzbyBpdCBpcyB0aGUgc2FtZSBhbnN3ZXIgd2hhdGV2ZXIgdGhlIHByZXZpb3VzIHJ1biBkaWQuXG4gKlxuICogU3RyaWN0bHkgYWZ0ZXIgYGZyb21gOiBhIGBmcm9tYCBzaXR0aW5nIGV4YWN0bHkgb24gYSBib3VuZGFyeSBnZXRzIHRoZSBORVhUIG9uZSxcbiAqIHNvIGEgcnVuIHRoYXQgY29tcGxldGVzIGF0IHRoZSBpbnN0YW50IG9mIHRoZSBib3VuZGFyeSBjYW5ub3QgcmUtY2xhaW0gaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0UGVyaW9kQm91bmRhcnkoXG4gIGNhZGVuY2U6IFJlcG9ydENhZGVuY2UsXG4gIHR6OiBzdHJpbmcsXG4gIHdlZWtTdGFydDogV2Vla1N0YXJ0ID0gJ21vbmRheScsXG4gIGZyb206IERhdGUgPSBuZXcgRGF0ZSgpLFxuKTogRGF0ZSB7XG4gIGNvbnN0IGNvbnRhaW5pbmcgPSBzdGFydE9mUGVyaW9kKGNpdmlsSW4oZnJvbSwgdHopLCBjYWRlbmNlLCB3ZWVrU3RhcnQpO1xuICByZXR1cm4gaW5zdGFudE9mQ2l2aWwoc2hpZnRQZXJpb2QoY29udGFpbmluZywgY2FkZW5jZSwgMSksIHR6KTtcbn1cblxuLyoqXG4gKiBFdmVyeSBDT01QTEVURSBwZXJpb2QgdGhhdCBlbmRlZCBhZnRlciBgc2luY2VgLCBvbGRlc3QgZmlyc3QuXG4gKlxuICogVGhpcyBpcyB0aGUgY2F0Y2gtdXAgbGlzdDogYSBzZXJ2aWNlIHRoYXQgd2FzIGRvd24gb3ZlciBhIHdlZWtlbmQsIGEgZGVmaW5pdGlvblxuICogY3JlYXRlZCB3aXRoIGEgYmFjay1kYXRlZCBgbmV4dFJ1bkF0YCwgb3IgYSBzY2hlZHVsZXIgZGlzYWJsZWQgYnkgaXRzIGtpbGwgc3dpdGNoXG4gKiBmb3IgYSBmb3J0bmlnaHQgYWxsIGxlYXZlIHBlcmlvZHMgdGhhdCB3ZXJlIG5ldmVyIHJlcG9ydGVkLiBSZXR1cm5pbmcgdGhlbSBpblxuICogb3JkZXIgbWF0dGVycyDigJQgYSBtYW5hZ2VyIHJlYWRpbmcgdGhyZWUgd2Vla2x5IHJlcG9ydHMgdGhhdCBhcnJpdmUgYXQgb25jZSBuZWVkc1xuICogdGhlbSB0byBtYWtlIHNlbnNlIHJlYWQgZG93bndhcmRzLlxuICpcbiAqIGBtYXhgIGJvdW5kcyB0aGUgd2Fsay4gQSBkZWZpbml0aW9uIHVudG91Y2hlZCBmb3IgdHdvIHllYXJzIG11c3Qgbm90IHByb2R1Y2UgMTA0XG4gKiB3ZWVrbHkgcmVwb3J0cyBpbiBvbmUgY3ljbGU7IHRoZSBjYXAgbWVhbnMgdGhlIG9sZGVzdCBhcmUgc2tpcHBlZCwgd2hpY2ggaXMgdGhlXG4gKiByaWdodCB0cmFkZSDigJQgbm9ib2R5IHdhbnRzIGxhc3QgQXByaWwncyB3ZWVrbHkgc3RhdHVzLCBhbmQgdGhlIHNuYXBzaG90IGZvciBpdFxuICogd291bGQgYmUgcGFzdCB0aGUgcmV0ZW50aW9uIGhvcml6b24gYW55d2F5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGxldGVQZXJpb2RzU2luY2UoXG4gIGNhZGVuY2U6IFJlcG9ydENhZGVuY2UsXG4gIHR6OiBzdHJpbmcsXG4gIHdlZWtTdGFydDogV2Vla1N0YXJ0LFxuICBzaW5jZTogRGF0ZSB8IG51bGwsXG4gIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCksXG4gIG1heCA9IDQsXG4pOiBSZXNvbHZlZFBlcmlvZFtdIHtcbiAgY29uc3QgbGF0ZXN0ID0gcmVzb2x2ZVBlcmlvZChjYWRlbmNlLCB0eiwgd2Vla1N0YXJ0LCBub3cpO1xuICBpZiAobWF4IDw9IDApIHJldHVybiBbXTtcbiAgLy8gTm8gcHJldmlvdXMgcnVuOiByZXBvcnQgdGhlIGxhdGVzdCBjb21wbGV0ZSBwZXJpb2Qgb25seS4gQSBkZWZpbml0aW9uIGNyZWF0ZWRcbiAgLy8gdG9kYXkgZG9lcyBub3Qgb3dlIGl0cyBvd25lciBhIGJhY2tmaWxsIHRoZXkgbmV2ZXIgYXNrZWQgZm9yLlxuICBpZiAoIXNpbmNlKSByZXR1cm4gW2xhdGVzdF07XG5cbiAgY29uc3Qgb3V0OiBSZXNvbHZlZFBlcmlvZFtdID0gW107XG4gIGNvbnN0IGxhdGVzdFN0YXJ0ID0gc3RhcnRPZlBlcmlvZChjaXZpbEluKGxhdGVzdC5zdGFydCwgdHopLCBjYWRlbmNlLCB3ZWVrU3RhcnQpO1xuICBmb3IgKGxldCBiYWNrID0gMDsgYmFjayA8IG1heDsgYmFjayArPSAxKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzaGlmdFBlcmlvZChsYXRlc3RTdGFydCwgY2FkZW5jZSwgLWJhY2spO1xuICAgIGNvbnN0IGluc3RhbnQgPSBpbnN0YW50T2ZDaXZpbChzdGFydCwgdHopO1xuICAgIC8vIGBzaW5jZWAgaXMgdGhlIGxhc3QgcnVuJ3MgcGVyaW9kIEVORCBmb3IgYSBydW4gdGhhdCBoYXBwZW5lZCwgc28gYSBwZXJpb2RcbiAgICAvLyB3aG9zZSBlbmQgaXMgYXQgb3IgYmVmb3JlIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQuXG4gICAgaWYgKGluc3RhbnRPZkNpdmlsKHNoaWZ0UGVyaW9kKHN0YXJ0LCBjYWRlbmNlLCAxKSwgdHopLmdldFRpbWUoKSA8PSBzaW5jZS5nZXRUaW1lKCkpIGJyZWFrO1xuICAgIGNvbnN0IHByZXZTdGFydCA9IHNoaWZ0UGVyaW9kKHN0YXJ0LCBjYWRlbmNlLCAtMSk7XG4gICAgb3V0LnB1c2goe1xuICAgICAgc3RhcnQ6IGluc3RhbnQsXG4gICAgICBlbmQ6IGluc3RhbnRPZkNpdmlsKHNoaWZ0UGVyaW9kKHN0YXJ0LCBjYWRlbmNlLCAxKSwgdHopLFxuICAgICAgcHJldlN0YXJ0OiBpbnN0YW50T2ZDaXZpbChwcmV2U3RhcnQsIHR6KSxcbiAgICAgIHByZXZFbmQ6IGluc3RhbnQsXG4gICAgICBsYWJlbDogZm9ybWF0TGFiZWwoc3RhcnQsIGNhZGVuY2UpLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXQucmV2ZXJzZSgpO1xufVxuIl19
@@ -16,7 +16,7 @@
16
16
  * developers destroys trust in the whole report, and a guideline in a document
17
17
  * does not stop someone adding `topCommitters` later — a throwing registry does.
18
18
  */
19
- import type { FeatureFlag } from '@pipeline-builder/api-core';
19
+ import type { FeatureFlag, WeekStart } from '@pipeline-builder/api-core';
20
20
  import type { AnalyticsScope } from '../analytics-queries.js';
21
21
  /** What a section needs to run one period's query. */
22
22
  export interface SectionContext {
@@ -28,7 +28,7 @@ export interface SectionContext {
28
28
  to: string;
29
29
  /** The report's bucketing settings, for the time-series sections. */
30
30
  tz: string;
31
- weekStart: 'monday' | 'sunday';
31
+ weekStart: WeekStart;
32
32
  /**
33
33
  * The PREVIOUS period's bounds, for the sections that compute their own trend
34
34
  * internally rather than being run twice.
@@ -50,7 +50,7 @@ export interface SectionDataSource {
50
50
  }): Promise<unknown>;
51
51
  getSuccessRate(orgId: string, interval: string, from: string, to: string, orgIds?: string[], bucket?: {
52
52
  tz?: string;
53
- weekStart?: 'monday' | 'sunday';
53
+ weekStart?: WeekStart;
54
54
  }): Promise<unknown>;
55
55
  getAverageDuration(orgId: string, from: string, to: string, orgIds?: string[]): Promise<unknown>;
56
56
  getStageFailures(orgId: string, from: string, to: string, orgIds?: string[]): Promise<unknown>;
@@ -62,7 +62,7 @@ export interface SectionDataSource {
62
62
  getPluginVersions(orgId: string): Promise<unknown>;
63
63
  getBuildSuccessRate(orgId: string, interval: string, from: string, to: string, orgIds?: string[], bucket?: {
64
64
  tz?: string;
65
- weekStart?: 'monday' | 'sunday';
65
+ weekStart?: WeekStart;
66
66
  }): Promise<unknown>;
67
67
  getBuildDuration(orgId: string, from: string, to: string, orgIds?: string[]): Promise<unknown>;
68
68
  getBuildFailures(orgId: string, from: string, to: string, limit?: number, orgIds?: string[]): Promise<unknown>;
@@ -246,4 +246,4 @@ registerSection({
246
246
  ? s.getCompliancePosture(scopeOf(c))
247
247
  : Promise.resolve({ unavailable: 'compliance posture is not available in this context' })),
248
248
  });
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL3N0YWtlaG9sZGVyL3NlY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUF5R3RDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLGtCQUFrQixHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRTNILGlEQUFpRDtBQUNqRCxTQUFTLGtCQUFrQixDQUFDLEVBQVU7SUFDcEMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksS0FBSyxDQUNiLHdDQUF3QyxFQUFFLDRCQUE0QixHQUFHLE1BQU07Y0FDN0UsbUZBQW1GO2NBQ25GLGtGQUFrRixDQUNyRixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCx1RUFBdUU7QUFDdkUsU0FBUyxPQUFPLENBQUMsQ0FBaUI7SUFDaEMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDL0YsQ0FBQztBQUVELGlGQUFpRjtBQUNqRixTQUFT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d0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQzFELENBQUMsQ0FBQztBQUVILGVBQWUsQ0FBQztJQUNkLEVBQUUsRUFBRSxVQUFVO0lBQ2QsS0FBSyxFQUFFLHVCQUF1QjtJQUM5QixVQUFVLEVBQUUsS0FBSztJQUNqQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QyxDQUFDLENBQUM7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILGVBQWUsQ0FBQztJQUNkLEVBQUUsRUFBRSxvQkFBb0I7SUFDeEIsS0FBSyxFQUFFLCtCQUErQjtJQUN0QyxVQUFVLEVBQUUsS0FBSztJQUNqQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7UUFDcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUscURBQXFELEVBQUUsQ0FBQyxDQUFDO0NBQzdGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBzZWN0aW9uIHJlZ2lzdHJ5OiB0aGUgb25lIHBsYWNlIHRoYXQgbWFwcyBhIHJlcG9ydCBzZWN0aW9uIGlkIHRvIHRoZVxuICogUmVwb3J0aW5nU2VydmljZSBtZXRob2QgdGhhdCBjb21wdXRlcyBpdC5cbiAqXG4gKiBXaHkgYSByZWdpc3RyeSByYXRoZXIgdGhhbiBlYWNoIHRlbXBsYXRlIGNhbGxpbmcgdGhlIHNlcnZpY2UgZGlyZWN0bHk6XG4gKlxuICogIC0gVGhlIG51bWJlcnMgaW4gYSByZXBvcnQgTVVTVCBtYXRjaCB0aGUgZGFzaGJvYXJkLiBBIG1hbmFnZXIgd2hvIGNvbXBhcmVzIHRoZVxuICogICAgdHdvIGFuZCBmaW5kcyBhIGRpZmZlcmVuY2Ugc3RvcHMgdHJ1c3RpbmcgYm90aCwgc28gYm90aCByZWFkIHRoZSBzYW1lIHF1ZXJ5IOKAlFxuICogICAgdGhlcmUgaXMgbm8gc2VwYXJhdGUgXCJyZXBvcnRcIiBpbXBsZW1lbnRhdGlvbiBvZiBzdWNjZXNzIHJhdGUuXG4gKiAgLSBGZWF0dXJlIGdhdGluZyBiZWxvbmdzIHdpdGggdGhlIHNlY3Rpb24sIG5vdCB0aGUgcm91dGUuIERPUkEgc2VjdGlvbnMgbmVlZFxuICogICAgYGFkdmFuY2VkX3JlcG9ydGluZ2A7IGEgcmVwb3J0IHRoYXQgaW5jbHVkZXMgb25lIHdpdGhvdXQgdGhlIGFkZC1vbiByZW5kZXJzIGFcbiAqICAgIExPQ0tFRCBzZWN0aW9uIGFuZCBzdGlsbCBkZWxpdmVycywgcmF0aGVyIHRoYW4gZmFpbGluZyB0aGUgd2hvbGUgcnVuLiBBIHJ1blxuICogICAgdGhhdCBkaWVzIGJlY2F1c2Ugb2Ygb25lIGdhdGVkIHNlY3Rpb24gaXMgYSBzdXBwb3J0IHRpY2tldDsgYSBsb2NrZWQgcGFuZWwgaXNcbiAqICAgIGFuIHVwc2VsbC5cbiAqICAtIFBlci1wZXJzb24gbWV0cmljcyBhcmUgcmVmdXNlZCBIRVJFLCBhdCByZWdpc3RyYXRpb24uIFJhbmtpbmcgaW5kaXZpZHVhbFxuICogICAgZGV2ZWxvcGVycyBkZXN0cm95cyB0cnVzdCBpbiB0aGUgd2hvbGUgcmVwb3J0LCBhbmQgYSBndWlkZWxpbmUgaW4gYSBkb2N1bWVudFxuICogICAgZG9lcyBub3Qgc3RvcCBzb21lb25lIGFkZGluZyBgdG9wQ29tbWl0dGVyc2AgbGF0ZXIg4oCUIGEgdGhyb3dpbmcgcmVnaXN0cnkgZG9lcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBBbmFseXRpY3NTY29wZSB9IGZyb20gJy4uL2FuYWx5dGljcy1xdWVyaWVzLmpzJztcblxuLyoqIFdoYXQgYSBzZWN0aW9uIG5lZWRzIHRvIHJ1biBvbmUgcGVyaW9kJ3MgcXVlcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3Rpb25Db250ZXh0IHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgLyoqIFJvbGx1cCBvcmcgaWRzLCB3aGVuIHRoZSBkZWZpbml0aW9uJ3Mgc2NvcGUgaXMgYSB0ZWFtIHJvbGx1cC4gKi9cbiAgb3JnSWRzPzogc3RyaW5nW107XG4gIC8qKiBQZXJpb2QgYm91bmRzIGFzIElTTyBzdHJpbmdzLCB3aGljaCBpcyB3aGF0IGV2ZXJ5IHNlcnZpY2UgbWV0aG9kIHRha2VzLiAqL1xuICBmcm9tOiBzdHJpbmc7XG4gIHRvOiBzdHJpbmc7XG4gIC8qKiBUaGUgcmVwb3J0J3MgYnVja2V0aW5nIHNldHRpbmdzLCBmb3IgdGhlIHRpbWUtc2VyaWVzIHNlY3Rpb25zLiAqL1xuICB0ejogc3RyaW5nO1xuICB3ZWVrU3RhcnQ6ICdtb25kYXknIHwgJ3N1bmRheSc7XG4gIC8qKlxuICAgKiBUaGUgUFJFVklPVVMgcGVyaW9kJ3MgYm91bmRzLCBmb3IgdGhlIHNlY3Rpb25zIHRoYXQgY29tcHV0ZSB0aGVpciBvd24gdHJlbmRcbiAgICogaW50ZXJuYWxseSByYXRoZXIgdGhhbiBiZWluZyBydW4gdHdpY2UuXG4gICAqXG4gICAqIE1vc3Qgc2VjdGlvbnMgYXJlIHNpbXBseSByZS1ydW4gb3ZlciB0aGUgcHJldmlvdXMgd2luZG93IGJ5IHRoZSBjb21wb3NlciBhbmRcbiAgICogY29tcGFyZWQgb24gYSBzaW5nbGUgaGVhZGxpbmUuIFRoZSBhbmFseXRpY3Mgc2VjdGlvbnMgY2Fubm90IGJlOiB0aGVpciB0cmVuZCBpc1xuICAgKiBwZXIgY2F0ZWdvcnksIHBlciBzdGFnZSBvciBwZXIgcGlwZWxpbmUsIGFuZCBjb21wYXJpbmcgdHdvIHdob2xlIHJlc3VsdCBzZXRzXG4gICAqIGFmdGVyd2FyZHMgd291bGQgbWVhbiByZS1pbXBsZW1lbnRpbmcgdGhlIGpvaW4gaW4gdGhlIGNvbXBvc2VyLlxuICAgKi9cbiAgcHJldmlvdXNGcm9tPzogc3RyaW5nO1xuICBwcmV2aW91c1RvPzogc3RyaW5nO1xufVxuXG4vKiogVGhlIHNlcnZpY2Ugc3VyZmFjZSBhIHNlY3Rpb24gaXMgYWxsb3dlZCB0byBjYWxsLiBTdHJ1Y3R1cmFsIG9uIHB1cnBvc2U6IHRoZVxuICogIHJlZ2lzdHJ5IG5ldmVyIGltcG9ydHMgdGhlIHNlcnZpY2UsIHNvIGl0IHN0YXlzIHRlc3RhYmxlIHdpdGggYSBzdHViLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN0aW9uRGF0YVNvdXJjZSB7XG4gIGdldEV4ZWN1dGlvbkNvdW50KG9yZ0lkOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdLCByYW5nZT86IHsgZnJvbT86IHN0cmluZzsgdG8/OiBzdHJpbmcgfSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldFN1Y2Nlc3NSYXRlKG9yZ0lkOiBzdHJpbmcsIGludGVydmFsOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZywgb3JnSWRzPzogc3RyaW5nW10sIGJ1Y2tldD86IHsgdHo/OiBzdHJpbmc7IHdlZWtTdGFydD86ICdtb25kYXknIHwgJ3N1bmRheScgfSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldEF2ZXJhZ2VEdXJhdGlvbihvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0U3RhZ2VGYWlsdXJlcyhvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0U3RhZ2VCb3R0bGVuZWNrcyhvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0QWN0aW9uRmFpbHVyZXMob3JnSWQ6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBvcmdJZHM/OiBzdHJpbmdbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldEVycm9ycyhvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIGxpbWl0PzogbnVtYmVyLCBvcmdJZHM/OiBzdHJpbmdbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldFBsdWdpblN1bW1hcnkob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldFBsdWdpbkRpc3RyaWJ1dGlvbihvcmdJZDogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0UGx1Z2luVmVyc2lvbnMob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldEJ1aWxkU3VjY2Vzc1JhdGUob3JnSWQ6IHN0cmluZywgaW50ZXJ2YWw6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBvcmdJZHM/OiBzdHJpbmdbXSwgYnVja2V0PzogeyB0ej86IHN0cmluZzsgd2Vla1N0YXJ0PzogJ21vbmRheScgfCAnc3VuZGF5JyB9KTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0QnVpbGREdXJhdGlvbihvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0QnVpbGRGYWlsdXJlcyhvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIGxpbWl0PzogbnVtYmVyLCBvcmdJZHM/OiBzdHJpbmdbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldERvcmFNZXRyaWNzKG9yZ0lkOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZywgb3JnSWRzPzogc3RyaW5nW10sIG9wdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dW5rbm93bj47XG4gIGdldERvcmFUcmVuZChvcmdJZDogc3RyaW5nLCBpbnRlcnZhbDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdLCBvcHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHVua25vd24+O1xuICBnZXRCdWlsZEhlYWx0aChvcmdJZDogc3RyaW5nLCBwaXBlbGluZUlkOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldFJlcG9ydEVudmlyb25tZW50cyhvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdKTogUHJvbWlzZTx1bmtub3duPjtcblxuICAvLyDilIDilIAgVGhlIEFOQUxZVElDUyByZWFkcyAodGhlIHJvbGx1cCB0YWJsZXMsIG5vdCByYXcgZXZlbnRzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gU2VwYXJhdGUgZnJvbSB0aGUgb24tZGVtYW5kIGRhc2hib2FyZCBtZXRob2RzIGFib3ZlIGJlY2F1c2UgdGhleSBhbnN3ZXJcbiAgLy8gcXVlc3Rpb25zIHRoZSBkYXNoYm9hcmQgbmV2ZXIgYXNrZWQ6IHdoaWNoIHBpcGVsaW5lIG5lZWRzIGF0dGVudGlvbiwgd2hhdFxuICAvLyBraW5kIG9mIHRoaW5nIGlzIGJyZWFraW5nLCB3aGVyZSBidWlsZCB0aW1lIHdlbnQsIHdoaWNoIGNvbW1pdHMgYXJlIHN0dWNrLlxuICAvLyBFdmVyeSBvbmUgcmVhZHMgYSBwcmUtYWdncmVnYXRlZCB0YWJsZSwgc28gYSBxdWFydGVybHkgcmVwb3J0IHN0YXlzIGFcbiAgLy8gZmV3LWh1bmRyZWQtcm93IHF1ZXJ5IGFuZCBrZWVwcyB3b3JraW5nIGFmdGVyIHJldGVudGlvbiBzd2VlcHMgdGhlIGV2ZW50cy5cbiAgZ2V0UGlwZWxpbmVCcmVha2Rvd24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdD86IG51bWJlcik6IFByb21pc2U8dW5rbm93bj47XG4gIGdldEZhaWx1cmVBbmFseXNpcyhzY29wZTogQW5hbHl0aWNzU2NvcGUsIHByZXZpb3VzPzogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldFN0YWdlUGVyZm9ybWFuY2Uoc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBwaXBlbGluZUlkOiBzdHJpbmcsIHByZXZpb3VzPzogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldFJlc291cmNlQ29uc3VtcHRpb24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdD86IG51bWJlcik6IFByb21pc2U8dW5rbm93bj47XG4gIGdldFByb21vdGlvblZpZXcoc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBwcm9kdWN0aW9uRW52Pzogc3RyaW5nLCBsaW1pdD86IG51bWJlcik6IFByb21pc2U8dW5rbm93bj47XG4gIGdldE91dGRhdGVkUGx1Z2lucyhzY29wZTogQW5hbHl0aWNzU2NvcGUsIGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0UGx1Z2luVnVsbmVyYWJpbGl0aWVzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgbGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPHVua25vd24+O1xuICBnZXRBZG9wdGlvbihzY29wZTogQW5hbHl0aWNzU2NvcGUsIHRpbWVTYXZlZE1pbnV0ZXM/OiBudW1iZXIgfCBudWxsKTogUHJvbWlzZTx1bmtub3duPjtcbiAgLyoqIENvbXBsaWFuY2UgKyBhY2Nlc3MgcG9zdHVyZSwgb3ZlciBhIHNlcnZpY2UtdG8tc2VydmljZSByZWFkLiBEZWdyYWRlcy4gKi9cbiAgZ2V0Q29tcGxpYW5jZVBvc3R1cmU/KHNjb3BlOiBBbmFseXRpY3NTY29wZSk6IFByb21pc2U8dW5rbm93bj47XG4gIC8qKiBUaGUgZXZhbHVhdGVkIG5lZWRzLWF0dGVudGlvbiBmaW5kaW5ncyBmb3IgdGhlIHBlcmlvZC4gKi9cbiAgZ2V0TmVlZHNBdHRlbnRpb24/KHNjb3BlOiBBbmFseXRpY3NTY29wZSwgcHJldmlvdXM/OiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9KTogUHJvbWlzZTx1bmtub3duPjtcbn1cblxuLyoqIE9uZSByZWdpc3RlcmVkIHNlY3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3Rpb25TcGVjIHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqIE1hbmFnZXItZmFjaW5nIHRpdGxlLiBOb3QgYSBtZXRyaWMgbmFtZSDigJQgXCJEZXBsb3lzXCIsIG5vdCBcImRlcGxveW1lbnRfZnJlcXVlbmN5XCIuICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBGZWF0dXJlIHRoZSBvcmcgbXVzdCBob2xkLCBvciB1bmRlZmluZWQgZm9yIGEgZnJlZSBzZWN0aW9uLiAqL1xuICByZXF1aXJlc0ZlYXR1cmU/OiBGZWF0dXJlRmxhZztcbiAgLyoqXG4gICAqIFRydWUgd2hlbiB0aGlzIHNlY3Rpb24ncyB2YWx1ZSBpcyBhIHNpbmdsZSBjb21wYXJhYmxlIG51bWJlciwgc28gdGhlIGNvbXBvc2VyXG4gICAqIGNhbiBjb21wdXRlIHBlcmlvZC1vdmVyLXBlcmlvZCBjaGFuZ2UuIEEgbGlzdCBzZWN0aW9uICh0b3AgZmFpbHVyZXMpIGhhcyBub1xuICAgKiBtZWFuaW5nZnVsIFwiY2hhbmdlXCIsIGFuZCBwcmV0ZW5kaW5nIG90aGVyd2lzZSBwcm9kdWNlcyBub25zZW5zZSBhcnJvd3MuXG4gICAqL1xuICBjb21wYXJhYmxlOiBib29sZWFuO1xuICBydW4oc291cmNlOiBTZWN0aW9uRGF0YVNvdXJjZSwgY3R4OiBTZWN0aW9uQ29udGV4dCk6IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKlxuICogSWRzIHRoYXQgd291bGQgcmFuayBvciBjb21wYXJlIElORElWSURVQUwgcGVvcGxlLiBSZWZ1c2VkIGF0IHJlZ2lzdHJhdGlvbi5cbiAqXG4gKiBUZWFtLWxldmVsIG1ldHJpY3MgZGVzY3JpYmUgYSBzeXN0ZW07IHBlci1wZXJzb24gbWV0cmljcyBkZXNjcmliZSBhIHBlcnNvbiwgYW5kXG4gKiBhIHJlcG9ydCBhIG1hbmFnZXIgcmVhZHMgaXMgdGhlIHdvcnN0IHBvc3NpYmxlIHBsYWNlIGZvciB0aGUgc2Vjb25kLiBPbmNlIGFcbiAqIGRldmVsb3BlciBiZWxpZXZlcyB0aGUgd2Vla2x5IHJlcG9ydCByYW5rcyB0aGVtLCB0aGUgbnVtYmVycyBzdGFydCBiZWluZyBnYW1lZFxuICogYW5kIHRoZSByZXBvcnQgc3RvcHMgZGVzY3JpYmluZyByZWFsaXR5LlxuICovXG5jb25zdCBQRVJfUEVSU09OX01BUktFUlMgPSBbJ2F1dGhvcicsICdjb21taXR0ZXInLCAnZGV2ZWxvcGVyJywgJ3BlcnNvbicsICd1c2VyJywgJ2luZGl2aWR1YWwnLCAnYnlfbWVtYmVyJywgJ3Blcl9tZW1iZXInXTtcblxuLyoqIFRocm93cyB3aGVuIGEgc2VjdGlvbiBpZCBsb29rcyBwZXItcGVyc29uLiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm90UGVyUGVyc29uKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgbG93ZXJlZCA9IGlkLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGhpdCA9IFBFUl9QRVJTT05fTUFSS0VSUy5maW5kKChtKSA9PiBsb3dlcmVkLmluY2x1ZGVzKG0pKTtcbiAgaWYgKGhpdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBSZWZ1c2luZyB0byByZWdpc3RlciByZXBvcnQgc2VjdGlvbiBcIiR7aWR9XCI6IGl0IGxvb2tzIHBlci1wZXJzb24gKFwiJHtoaXR9XCIpLiBgXG4gICAgICArICdTdGFrZWhvbGRlciByZXBvcnRzIGFyZSB0ZWFtLWxldmVsIGJ5IGRlc2lnbiDigJQgcmFua2luZyBpbmRpdmlkdWFscyBpbiBhIHJlcG9ydCBhICdcbiAgICAgICsgJ21hbmFnZXIgcmVhZHMgZGVzdHJveXMgdHJ1c3QgaW4gZXZlcnkgb3RoZXIgbnVtYmVyIGluIGl0LiBBZ2dyZWdhdGUgdG8gdGhlIHRlYW0uJyxcbiAgICApO1xuICB9XG59XG5cbi8qKiBUaGUgc2NvcGUgZXZlcnkgYW5hbHl0aWNzIHF1ZXJ5IHRha2VzLCBmcm9tIHRoZSBzZWN0aW9uIGNvbnRleHQuICovXG5mdW5jdGlvbiBzY29wZU9mKGM6IFNlY3Rpb25Db250ZXh0KTogQW5hbHl0aWNzU2NvcGUge1xuICByZXR1cm4geyBvcmdJZDogYy5vcmdJZCwgLi4uKGMub3JnSWRzID8geyBvcmdJZHM6IGMub3JnSWRzIH0gOiB7fSksIGZyb206IGMuZnJvbSwgdG86IGMudG8gfTtcbn1cblxuLyoqIFRoZSBwcmV2aW91cyBwZXJpb2QsIHdoZW4gdGhlIGNvbnRleHQgY2FycmllcyBvbmUgKGZvciB0aGUgdHJlbmQgY29sdW1ucykuICovXG5mdW5jdGlvbiBwcmV2aW91c09mKGM6IFNlY3Rpb25Db250ZXh0KTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBjLnByZXZpb3VzRnJvbSAmJiBjLnByZXZpb3VzVG8gPyB7IGZyb206IGMucHJldmlvdXNGcm9tLCB0bzogYy5wcmV2aW91c1RvIH0gOiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFJFR0lTVFJZID0gbmV3IE1hcDxzdHJpbmcsIFNlY3Rpb25TcGVjPigpO1xuXG4vKiogUmVnaXN0ZXIgYSBzZWN0aW9uLiBUaHJvd3Mgb24gYSBkdXBsaWNhdGUgaWQgb3IgYSBwZXItcGVyc29uIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclNlY3Rpb24oc3BlYzogU2VjdGlvblNwZWMpOiBTZWN0aW9uU3BlYyB7XG4gIGFzc2VydE5vdFBlclBlcnNvbihzcGVjLmlkKTtcbiAgaWYgKFJFR0lTVFJZLmhhcyhzcGVjLmlkKSkgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgcmVwb3J0IHNlY3Rpb24gaWQ6ICR7c3BlYy5pZH1gKTtcbiAgUkVHSVNUUlkuc2V0KHNwZWMuaWQsIHNwZWMpO1xuICByZXR1cm4gc3BlYztcbn1cblxuLyoqIExvb2sgYSBzZWN0aW9uIHVwOyB1bmRlZmluZWQgd2hlbiB0aGUgaWQgaXMgdW5rbm93bi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN0aW9uKGlkOiBzdHJpbmcpOiBTZWN0aW9uU3BlYyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBSRUdJU1RSWS5nZXQoaWQpO1xufVxuXG4vKiogRXZlcnkgcmVnaXN0ZXJlZCBzZWN0aW9uLCBpbiByZWdpc3RyYXRpb24gb3JkZXIuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsU2VjdGlvbnMoKTogU2VjdGlvblNwZWNbXSB7XG4gIHJldHVybiBbLi4uUkVHSVNUUlkudmFsdWVzKCldO1xufVxuXG4vKiogVGhlIGlkcyBhIGNhbGxlciBtYXkgcHV0IGluIGEgZGVmaW5pdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWN0aW9uSWRzKCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5SRUdJU1RSWS5rZXlzKCldO1xufVxuXG4vLyDilIDilIAgRGVsaXZlcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnZXhlY3V0aW9uX2NvdW50JyxcbiAgdGl0bGU6ICdQaXBlbGluZSBydW5zJyxcbiAgY29tcGFyYWJsZTogdHJ1ZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRFeGVjdXRpb25Db3VudChjLm9yZ0lkLCBjLm9yZ0lkcywgeyBmcm9tOiBjLmZyb20sIHRvOiBjLnRvIH0pLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnc3VjY2Vzc19yYXRlJyxcbiAgdGl0bGU6ICdTdWNjZXNzIHJhdGUnLFxuICBjb21wYXJhYmxlOiB0cnVlLFxuICBydW46IChzLCBjKSA9PiBzLmdldFN1Y2Nlc3NSYXRlKGMub3JnSWQsICd3ZWVrJywgYy5mcm9tLCBjLnRvLCBjLm9yZ0lkcywgeyB0ejogYy50eiwgd2Vla1N0YXJ0OiBjLndlZWtTdGFydCB9KSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ2R1cmF0aW9uJyxcbiAgdGl0bGU6ICdSdW4gZHVyYXRpb24nLFxuICBjb21wYXJhYmxlOiB0cnVlLFxuICBydW46IChzLCBjKSA9PiBzLmdldEF2ZXJhZ2VEdXJhdGlvbihjLm9yZ0lkLCBjLmZyb20sIGMudG8sIGMub3JnSWRzKSxcbn0pO1xuXG4vLyDilIDilIAgV2hhdCBpcyBibG9ja2luZyB1cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdzdGFnZV9mYWlsdXJlcycsXG4gIHRpdGxlOiAnVG9wIGZhaWxpbmcgc3RhZ2VzJyxcbiAgLy8gQSBsaXN0LCBub3QgYSBudW1iZXI6IFwiY2hhbmdlXCIgb24gYSB0b3AtTiBsaXN0IGlzIG1lYW5pbmdsZXNzLlxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRTdGFnZUZhaWx1cmVzKGMub3JnSWQsIGMuZnJvbSwgYy50bywgYy5vcmdJZHMpLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnc3RhZ2VfYm90dGxlbmVja3MnLFxuICB0aXRsZTogJ1Nsb3dlc3Qgc3RhZ2VzJyxcbiAgY29tcGFyYWJsZTogZmFsc2UsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0U3RhZ2VCb3R0bGVuZWNrcyhjLm9yZ0lkLCBjLmZyb20sIGMudG8sIGMub3JnSWRzKSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ2FjdGlvbl9mYWlsdXJlcycsXG4gIHRpdGxlOiAnVG9wIGZhaWxpbmcgc3RlcHMnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRBY3Rpb25GYWlsdXJlcyhjLm9yZ0lkLCBjLmZyb20sIGMudG8sIGMub3JnSWRzKSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ2Vycm9ycycsXG4gIHRpdGxlOiAnUmVjZW50IGZhaWx1cmVzJyxcbiAgY29tcGFyYWJsZTogZmFsc2UsXG4gIC8vIENhcHBlZDogYSBtYW5hZ2VyIHJlYWRzIHRoZSB0b3AgZmV3LCBhbmQgdGhlIHNuYXBzaG90IGlzIHN0b3JlZCBmb3JldmVyLlxuICBydW46IChzLCBjKSA9PiBzLmdldEVycm9ycyhjLm9yZ0lkLCBjLmZyb20sIGMudG8sIDEwLCBjLm9yZ0lkcyksXG59KTtcblxuLy8g4pSA4pSAIFBsdWdpbiAvIHN1cHBseS1jaGFpbiBwb3N0dXJlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ3BsdWdpbl9zdW1tYXJ5JyxcbiAgdGl0bGU6ICdQbHVnaW5zIGluIHVzZScsXG4gIGNvbXBhcmFibGU6IHRydWUsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0UGx1Z2luU3VtbWFyeShjLm9yZ0lkKSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ3BsdWdpbl9kaXN0cmlidXRpb24nLFxuICB0aXRsZTogJ1BsdWdpbiBtaXgnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRQbHVnaW5EaXN0cmlidXRpb24oYy5vcmdJZCksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdwbHVnaW5fdmVyc2lvbnMnLFxuICB0aXRsZTogJ091dGRhdGVkIHBsdWdpbnMnLFxuICBjb21wYXJhYmxlOiB0cnVlLFxuICBydW46IChzLCBjKSA9PiBzLmdldFBsdWdpblZlcnNpb25zKGMub3JnSWQpLFxufSk7XG5cbi8vIOKUgOKUgCBCdWlsZCBoZWFsdGgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnYnVpbGRfc3VjY2Vzc19yYXRlJyxcbiAgdGl0bGU6ICdQbHVnaW4gYnVpbGQgc3VjY2VzcycsXG4gIGNvbXBhcmFibGU6IHRydWUsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0QnVpbGRTdWNjZXNzUmF0ZShjLm9yZ0lkLCAnd2VlaycsIGMuZnJvbSwgYy50bywgYy5vcmdJZHMsIHsgdHo6IGMudHosIHdlZWtTdGFydDogYy53ZWVrU3RhcnQgfSksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdidWlsZF9kdXJhdGlvbicsXG4gIHRpdGxlOiAnUGx1Z2luIGJ1aWxkIGR1cmF0aW9uJyxcbiAgY29tcGFyYWJsZTogdHJ1ZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRCdWlsZER1cmF0aW9uKGMub3JnSWQsIGMuZnJvbSwgYy50bywgYy5vcmdJZHMpLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnYnVpbGRfZmFpbHVyZXMnLFxuICB0aXRsZTogJ1BsdWdpbiBidWlsZCBmYWlsdXJlcycsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldEJ1aWxkRmFpbHVyZXMoYy5vcmdJZCwgYy5mcm9tLCBjLnRvLCAxMCwgYy5vcmdJZHMpLFxufSk7XG5cbi8vIOKUgOKUgCBEZXBsb3kgLyBET1JBIChwYWlkKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFRoZXNlIG5lZWQgYGFkdmFuY2VkX3JlcG9ydGluZ2AuIFdpdGhvdXQgaXQgdGhlIGNvbXBvc2VyIHJlbmRlcnMgYSBsb2NrZWRcbi8vIHNlY3Rpb24gYW5kIHRoZSByZXN0IG9mIHRoZSByZXBvcnQgc3RpbGwgZGVsaXZlcnMuXG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnZG9yYScsXG4gIHRpdGxlOiAnRGVsaXZlcnkgbWV0cmljcyAoRE9SQSknLFxuICByZXF1aXJlc0ZlYXR1cmU6ICdhZHZhbmNlZF9yZXBvcnRpbmcnLFxuICBjb21wYXJhYmxlOiB0cnVlLFxuICBydW46IChzLCBjKSA9PiBzLmdldERvcmFNZXRyaWNzKGMub3JnSWQsIGMuZnJvbSwgYy50bywgYy5vcmdJZHMpLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnZG9yYV90cmVuZCcsXG4gIHRpdGxlOiAnRGVsaXZlcnkgdHJlbmQnLFxuICByZXF1aXJlc0ZlYXR1cmU6ICdhZHZhbmNlZF9yZXBvcnRpbmcnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXREb3JhVHJlbmQoYy5vcmdJZCwgJ3dlZWsnLCBjLmZyb20sIGMudG8sIGMub3JnSWRzLCB7IHR6OiBjLnR6LCB3ZWVrU3RhcnQ6IGMud2Vla1N0YXJ0IH0pLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnZW52aXJvbm1lbnRzJyxcbiAgdGl0bGU6ICdEZXBsb3kgZW52aXJvbm1lbnRzJyxcbiAgY29tcGFyYWJsZTogZmFsc2UsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0UmVwb3J0RW52aXJvbm1lbnRzKGMub3JnSWQsIGMuZnJvbSwgYy50bywgYy5vcmdJZHMpLFxufSk7XG5cbi8vIOKUgOKUgCBUaGUgYW5hbHl0aWNzIHNlY3Rpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRWFjaCByZWFkcyBhIHByZS1hZ2dyZWdhdGVkIHRhYmxlIHJhdGhlciB0aGFuIHJhdyBldmVudHMsIGFuZCBlYWNoIGFuc3dlcnMgYVxuLy8gcXVlc3Rpb24gdGhlIG9uLWRlbWFuZCBkYXNoYm9hcmRzIGRvIG5vdDogbm90IFwiaG93IGFyZSB3ZSBkb2luZ1wiIGJ1dCBcIndoYXRcbi8vIHNob3VsZCBzb21lYm9keSBkbyBhYm91dCBpdFwiLlxuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ3BpcGVsaW5lX2JyZWFrZG93bicsXG4gIHRpdGxlOiAnUGlwZWxpbmVzIG5lZWRpbmcgdGhlIG1vc3QgYXR0ZW50aW9uJyxcbiAgY29tcGFyYWJsZTogZmFsc2UsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0UGlwZWxpbmVCcmVha2Rvd24oc2NvcGVPZihjKSwgMTApLFxufSk7XG5cbi8qKlxuICogVGhlIHNlY3Rpb24gdGhhdCBERUNJREVTIHJhdGhlciB0aGFuIGRlc2NyaWJlcy4gSXRzIGZpbmRpbmdzIGNhcnJ5IHRoZSBudW1iZXJcbiAqIGJlaGluZCB0aGVtLCBiZWNhdXNlIGEgZmxhZyB3aXRob3V0IGV2aWRlbmNlIGlzIGFuIG9waW5pb24gdGhlIHJlYWRlciBoYXMgdG8gdGFrZVxuICogb24gdHJ1c3Qg4oCUIGFuZCB0aGUgZmlyc3QgdGltZSBvbmUgaXMgd3JvbmcgdGhlIHNlY3Rpb24gc3RvcHMgYmVpbmcgcmVhZC5cbiAqL1xucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICduZWVkc19hdHRlbnRpb24nLFxuICB0aXRsZTogJ05lZWRzIGF0dGVudGlvbicsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiAocy5nZXROZWVkc0F0dGVudGlvblxuICAgID8gcy5nZXROZWVkc0F0dGVudGlvbihzY29wZU9mKGMpLCBwcmV2aW91c09mKGMpKVxuICAgIDogUHJvbWlzZS5yZXNvbHZlKHsgaXRlbXM6IFtdLCB1bmF2YWlsYWJsZTogJ25lZWRzLWF0dGVudGlvbiBldmFsdWF0aW9uIGlzIG5vdCB3aXJlZCBpbiB0aGlzIGNvbnRleHQnIH0pKSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ2ZhaWx1cmVfYW5hbHlzaXMnLFxuICB0aXRsZTogJ1doYXQgaXMgYnJlYWtpbmcnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRGYWlsdXJlQW5hbHlzaXMoc2NvcGVPZihjKSwgcHJldmlvdXNPZihjKSksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdzdGFnZV9wZXJmb3JtYW5jZScsXG4gIHRpdGxlOiAnU2xvd2VzdCBzdGFnZXMnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgLy8gVGhlIHdvcnN0IHBpcGVsaW5lIGZyb20gdGhlIGJyZWFrZG93biBpcyB0aGUgb25lIHdvcnRoIGRyaWxsaW5nIGludG87IGFcbiAgLy8gc2VjdGlvbiB0aGF0IGFza2VkIGZvciBhIHBpcGVsaW5lIGlkIHdvdWxkIGhhdmUgbm90aGluZyB0byBwdXQgaW4gaXQgb24gYVxuICAvLyBzY2hlZHVsZWQgcnVuLCB3aGVyZSB0aGVyZSBpcyBubyB1c2VyIHRvIHBpY2sgb25lLlxuICBydW46IGFzeW5jIChzLCBjKSA9PiB7XG4gICAgY29uc3QgYnJlYWtkb3duID0gYXdhaXQgcy5nZXRQaXBlbGluZUJyZWFrZG93bihzY29wZU9mKGMpLCAxKSBhcyBBcnJheTx7IHBpcGVsaW5lSWQ/OiBzdHJpbmcgfT47XG4gICAgY29uc3Qgd29yc3QgPSBicmVha2Rvd25bMF0/LnBpcGVsaW5lSWQ7XG4gICAgaWYgKCF3b3JzdCkgcmV0dXJuIHsgc3RhZ2VzOiBbXSwgcGlwZWxpbmVJZDogbnVsbCB9O1xuICAgIHJldHVybiB7IHBpcGVsaW5lSWQ6IHdvcnN0LCBzdGFnZXM6IGF3YWl0IHMuZ2V0U3RhZ2VQZXJmb3JtYW5jZShzY29wZU9mKGMpLCB3b3JzdCwgcHJldmlvdXNPZihjKSkgfTtcbiAgfSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ3Byb21vdGlvbicsXG4gIHRpdGxlOiAnV2hhdCByZWFjaGVkIHByb2R1Y3Rpb24sIGFuZCB3aGF0IGRpZCBub3QnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRQcm9tb3Rpb25WaWV3KHNjb3BlT2YoYykpLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAncmVzb3VyY2VfY29uc3VtcHRpb24nLFxuICB0aXRsZTogJ1doZXJlIHRoZSBidWlsZCB0aW1lIHdlbnQnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRSZXNvdXJjZUNvbnN1bXB0aW9uKHNjb3BlT2YoYyksIDIwKSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ291dGRhdGVkX3BsdWdpbnMnLFxuICB0aXRsZTogJ1BsdWdpbnMgYmVoaW5kIHRoZWlyIGxhdGVzdCB2ZXJzaW9uJyxcbiAgY29tcGFyYWJsZTogZmFsc2UsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0T3V0ZGF0ZWRQbHVnaW5zKHNjb3BlT2YoYyksIDUwKSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ3BsdWdpbl92dWxuZXJhYmlsaXRpZXMnLFxuICB0aXRsZTogJ1BsdWdpbiB2dWxuZXJhYmlsaXRpZXMnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRQbHVnaW5WdWxuZXJhYmlsaXRpZXMoc2NvcGVPZihjKSwgNTApLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnYWRvcHRpb24nLFxuICB0aXRsZTogJ0Fkb3B0aW9uIGFuZCBjb3ZlcmFnZScsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldEFkb3B0aW9uKHNjb3BlT2YoYykpLFxufSk7XG5cbi8qKlxuICogQ29tcGxpYW5jZSBhbmQgYWNjZXNzIHBvc3R1cmUsIHJlYWQgZnJvbSB0aGUgY29tcGxpYW5jZSBhbmQgcGxhdGZvcm0gc2VydmljZXNcbiAqIG92ZXIgYSBzZXJ2aWNlLXRvLXNlcnZpY2UgY2FsbC5cbiAqXG4gKiBERUdSQURFUyByYXRoZXIgdGhhbiBmYWlsaW5nIHRoZSBydW46IGlmIGNvbXBsaWFuY2UgaXMgdW5yZWFjaGFibGUgdGhlIHNlY3Rpb25cbiAqIHNheXMgXCJ1bmF2YWlsYWJsZVwiIGFuZCB0aGUgcmVzdCBvZiB0aGUgcmVwb3J0IHN0aWxsIHJlYWNoZXMgdGhlIGxlYWQuIEEgd2Vla2x5XG4gKiByZXBvcnQgdGhhdCBkaWQgbm90IGFycml2ZSBiZWNhdXNlIG9uZSBvcHRpb25hbCBwYW5lbCdzIHVwc3RyZWFtIHdhcyBkb3duIGlzIGFcbiAqIHN1cHBvcnQgdGlja2V0OyBhIHBhbmVsIHRoYXQgc2F5cyBpdCBjb3VsZCBub3QgYmUgY29tcHV0ZWQgaXMgaW5mb3JtYXRpb24uXG4gKi9cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnY29tcGxpYW5jZV9wb3N0dXJlJyxcbiAgdGl0bGU6ICdDb21wbGlhbmNlIGFuZCBhY2Nlc3MgcG9zdHVyZScsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiAocy5nZXRDb21wbGlhbmNlUG9zdHVyZVxuICAgID8gcy5nZXRDb21wbGlhbmNlUG9zdHVyZShzY29wZU9mKGMpKVxuICAgIDogUHJvbWlzZS5yZXNvbHZlKHsgdW5hdmFpbGFibGU6ICdjb21wbGlhbmNlIHBvc3R1cmUgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGNvbnRleHQnIH0pKSxcbn0pO1xuIl19
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL3N0YWtlaG9sZGVyL3NlY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUF5R3RDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLGtCQUFrQixHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRTNILGlEQUFpRDtBQUNqRCxTQUFTLGtCQUFrQixDQUFDLEVBQVU7SUFDcEMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksS0FBSyxDQUNiLHdDQUF3QyxFQUFFLDRCQUE0QixHQUFHLE1BQU07Y0FDN0UsbUZBQW1GO2NBQ25GLGtGQUFrRixDQUNyRixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCx1RUFBdUU7QUFDdkUsU0FBUyxPQUFPLENBQUMsQ0FBaUI7SUFDaEMsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDL0YsQ0FBQztBQUVELGlGQUFpRjtBQUNqRixTQUFT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d0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQzFELENBQUMsQ0FBQztBQUVILGVBQWUsQ0FBQztJQUNkLEVBQUUsRUFBRSxVQUFVO0lBQ2QsS0FBSyxFQUFFLHVCQUF1QjtJQUM5QixVQUFVLEVBQUUsS0FBSztJQUNqQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN6QyxDQUFDLENBQUM7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILGVBQWUsQ0FBQztJQUNkLEVBQUUsRUFBRSxvQkFBb0I7SUFDeEIsS0FBSyxFQUFFLCtCQUErQjtJQUN0QyxVQUFVLEVBQUUsS0FBSztJQUNqQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7UUFDcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUscURBQXFELEVBQUUsQ0FBQyxDQUFDO0NBQzdGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBzZWN0aW9uIHJlZ2lzdHJ5OiB0aGUgb25lIHBsYWNlIHRoYXQgbWFwcyBhIHJlcG9ydCBzZWN0aW9uIGlkIHRvIHRoZVxuICogUmVwb3J0aW5nU2VydmljZSBtZXRob2QgdGhhdCBjb21wdXRlcyBpdC5cbiAqXG4gKiBXaHkgYSByZWdpc3RyeSByYXRoZXIgdGhhbiBlYWNoIHRlbXBsYXRlIGNhbGxpbmcgdGhlIHNlcnZpY2UgZGlyZWN0bHk6XG4gKlxuICogIC0gVGhlIG51bWJlcnMgaW4gYSByZXBvcnQgTVVTVCBtYXRjaCB0aGUgZGFzaGJvYXJkLiBBIG1hbmFnZXIgd2hvIGNvbXBhcmVzIHRoZVxuICogICAgdHdvIGFuZCBmaW5kcyBhIGRpZmZlcmVuY2Ugc3RvcHMgdHJ1c3RpbmcgYm90aCwgc28gYm90aCByZWFkIHRoZSBzYW1lIHF1ZXJ5IOKAlFxuICogICAgdGhlcmUgaXMgbm8gc2VwYXJhdGUgXCJyZXBvcnRcIiBpbXBsZW1lbnRhdGlvbiBvZiBzdWNjZXNzIHJhdGUuXG4gKiAgLSBGZWF0dXJlIGdhdGluZyBiZWxvbmdzIHdpdGggdGhlIHNlY3Rpb24sIG5vdCB0aGUgcm91dGUuIERPUkEgc2VjdGlvbnMgbmVlZFxuICogICAgYGFkdmFuY2VkX3JlcG9ydGluZ2A7IGEgcmVwb3J0IHRoYXQgaW5jbHVkZXMgb25lIHdpdGhvdXQgdGhlIGFkZC1vbiByZW5kZXJzIGFcbiAqICAgIExPQ0tFRCBzZWN0aW9uIGFuZCBzdGlsbCBkZWxpdmVycywgcmF0aGVyIHRoYW4gZmFpbGluZyB0aGUgd2hvbGUgcnVuLiBBIHJ1blxuICogICAgdGhhdCBkaWVzIGJlY2F1c2Ugb2Ygb25lIGdhdGVkIHNlY3Rpb24gaXMgYSBzdXBwb3J0IHRpY2tldDsgYSBsb2NrZWQgcGFuZWwgaXNcbiAqICAgIGFuIHVwc2VsbC5cbiAqICAtIFBlci1wZXJzb24gbWV0cmljcyBhcmUgcmVmdXNlZCBIRVJFLCBhdCByZWdpc3RyYXRpb24uIFJhbmtpbmcgaW5kaXZpZHVhbFxuICogICAgZGV2ZWxvcGVycyBkZXN0cm95cyB0cnVzdCBpbiB0aGUgd2hvbGUgcmVwb3J0LCBhbmQgYSBndWlkZWxpbmUgaW4gYSBkb2N1bWVudFxuICogICAgZG9lcyBub3Qgc3RvcCBzb21lb25lIGFkZGluZyBgdG9wQ29tbWl0dGVyc2AgbGF0ZXIg4oCUIGEgdGhyb3dpbmcgcmVnaXN0cnkgZG9lcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnLCBXZWVrU3RhcnQgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IEFuYWx5dGljc1Njb3BlIH0gZnJvbSAnLi4vYW5hbHl0aWNzLXF1ZXJpZXMuanMnO1xuXG4vKiogV2hhdCBhIHNlY3Rpb24gbmVlZHMgdG8gcnVuIG9uZSBwZXJpb2QncyBxdWVyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdGlvbkNvbnRleHQge1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogUm9sbHVwIG9yZyBpZHMsIHdoZW4gdGhlIGRlZmluaXRpb24ncyBzY29wZSBpcyBhIHRlYW0gcm9sbHVwLiAqL1xuICBvcmdJZHM/OiBzdHJpbmdbXTtcbiAgLyoqIFBlcmlvZCBib3VuZHMgYXMgSVNPIHN0cmluZ3MsIHdoaWNoIGlzIHdoYXQgZXZlcnkgc2VydmljZSBtZXRob2QgdGFrZXMuICovXG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbiAgLyoqIFRoZSByZXBvcnQncyBidWNrZXRpbmcgc2V0dGluZ3MsIGZvciB0aGUgdGltZS1zZXJpZXMgc2VjdGlvbnMuICovXG4gIHR6OiBzdHJpbmc7XG4gIHdlZWtTdGFydDogV2Vla1N0YXJ0O1xuICAvKipcbiAgICogVGhlIFBSRVZJT1VTIHBlcmlvZCdzIGJvdW5kcywgZm9yIHRoZSBzZWN0aW9ucyB0aGF0IGNvbXB1dGUgdGhlaXIgb3duIHRyZW5kXG4gICAqIGludGVybmFsbHkgcmF0aGVyIHRoYW4gYmVpbmcgcnVuIHR3aWNlLlxuICAgKlxuICAgKiBNb3N0IHNlY3Rpb25zIGFyZSBzaW1wbHkgcmUtcnVuIG92ZXIgdGhlIHByZXZpb3VzIHdpbmRvdyBieSB0aGUgY29tcG9zZXIgYW5kXG4gICAqIGNvbXBhcmVkIG9uIGEgc2luZ2xlIGhlYWRsaW5lLiBUaGUgYW5hbHl0aWNzIHNlY3Rpb25zIGNhbm5vdCBiZTogdGhlaXIgdHJlbmQgaXNcbiAgICogcGVyIGNhdGVnb3J5LCBwZXIgc3RhZ2Ugb3IgcGVyIHBpcGVsaW5lLCBhbmQgY29tcGFyaW5nIHR3byB3aG9sZSByZXN1bHQgc2V0c1xuICAgKiBhZnRlcndhcmRzIHdvdWxkIG1lYW4gcmUtaW1wbGVtZW50aW5nIHRoZSBqb2luIGluIHRoZSBjb21wb3Nlci5cbiAgICovXG4gIHByZXZpb3VzRnJvbT86IHN0cmluZztcbiAgcHJldmlvdXNUbz86IHN0cmluZztcbn1cblxuLyoqIFRoZSBzZXJ2aWNlIHN1cmZhY2UgYSBzZWN0aW9uIGlzIGFsbG93ZWQgdG8gY2FsbC4gU3RydWN0dXJhbCBvbiBwdXJwb3NlOiB0aGVcbiAqICByZWdpc3RyeSBuZXZlciBpbXBvcnRzIHRoZSBzZXJ2aWNlLCBzbyBpdCBzdGF5cyB0ZXN0YWJsZSB3aXRoIGEgc3R1Yi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdGlvbkRhdGFTb3VyY2Uge1xuICBnZXRFeGVjdXRpb25Db3VudChvcmdJZDogc3RyaW5nLCBvcmdJZHM/OiBzdHJpbmdbXSwgcmFuZ2U/OiB7IGZyb20/OiBzdHJpbmc7IHRvPzogc3RyaW5nIH0pOiBQcm9taXNlPHVua25vd24+O1xuICBnZXRTdWNjZXNzUmF0ZShvcmdJZDogc3RyaW5nLCBpbnRlcnZhbDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdLCBidWNrZXQ/OiB7IHR6Pzogc3RyaW5nOyB3ZWVrU3RhcnQ/OiBXZWVrU3RhcnQgfSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldEF2ZXJhZ2VEdXJhdGlvbihvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0U3RhZ2VGYWlsdXJlcyhvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0U3RhZ2VCb3R0bGVuZWNrcyhvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIG9yZ0lkcz86IHN0cmluZ1tdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0QWN0aW9uRmFpbHVyZXMob3JnSWQ6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBvcmdJZHM/OiBzdHJpbmdbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldEVycm9ycyhvcmdJZDogc3RyaW5nLCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIGxpbWl0PzogbnVtYmVyLCBvcmdJZHM/OiBzdHJpbmdbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldFBsdWdpblN1bW1hcnkob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldFBsdWdpbkRpc3RyaWJ1dGlvbihvcmdJZDogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0UGx1Z2luVmVyc2lvbnMob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldEJ1aWxkU3VjY2Vzc1JhdGUob3JnSWQ6IHN0cmluZywgaW50ZXJ2YWw6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBvcmdJZHM/OiBzdHJpbmdbXSwgYnVja2V0PzogeyB0ej86IHN0cmluZzsgd2Vla1N0YXJ0PzogV2Vla1N0YXJ0IH0pOiBQcm9taXNlPHVua25vd24+O1xuICBnZXRCdWlsZER1cmF0aW9uKG9yZ0lkOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZywgb3JnSWRzPzogc3RyaW5nW10pOiBQcm9taXNlPHVua25vd24+O1xuICBnZXRCdWlsZEZhaWx1cmVzKG9yZ0lkOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZywgbGltaXQ/OiBudW1iZXIsIG9yZ0lkcz86IHN0cmluZ1tdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0RG9yYU1ldHJpY3Mob3JnSWQ6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBvcmdJZHM/OiBzdHJpbmdbXSwgb3B0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0RG9yYVRyZW5kKG9yZ0lkOiBzdHJpbmcsIGludGVydmFsOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZywgb3JnSWRzPzogc3RyaW5nW10sIG9wdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dW5rbm93bj47XG4gIGdldEJ1aWxkSGVhbHRoKG9yZ0lkOiBzdHJpbmcsIHBpcGVsaW5lSWQ6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0UmVwb3J0RW52aXJvbm1lbnRzKG9yZ0lkOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZywgb3JnSWRzPzogc3RyaW5nW10pOiBQcm9taXNlPHVua25vd24+O1xuXG4gIC8vIOKUgOKUgCBUaGUgQU5BTFlUSUNTIHJlYWRzICh0aGUgcm9sbHVwIHRhYmxlcywgbm90IHJhdyBldmVudHMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBTZXBhcmF0ZSBmcm9tIHRoZSBvbi1kZW1hbmQgZGFzaGJvYXJkIG1ldGhvZHMgYWJvdmUgYmVjYXVzZSB0aGV5IGFuc3dlclxuICAvLyBxdWVzdGlvbnMgdGhlIGRhc2hib2FyZCBuZXZlciBhc2tlZDogd2hpY2ggcGlwZWxpbmUgbmVlZHMgYXR0ZW50aW9uLCB3aGF0XG4gIC8vIGtpbmQgb2YgdGhpbmcgaXMgYnJlYWtpbmcsIHdoZXJlIGJ1aWxkIHRpbWUgd2VudCwgd2hpY2ggY29tbWl0cyBhcmUgc3R1Y2suXG4gIC8vIEV2ZXJ5IG9uZSByZWFkcyBhIHByZS1hZ2dyZWdhdGVkIHRhYmxlLCBzbyBhIHF1YXJ0ZXJseSByZXBvcnQgc3RheXMgYVxuICAvLyBmZXctaHVuZHJlZC1yb3cgcXVlcnkgYW5kIGtlZXBzIHdvcmtpbmcgYWZ0ZXIgcmV0ZW50aW9uIHN3ZWVwcyB0aGUgZXZlbnRzLlxuICBnZXRQaXBlbGluZUJyZWFrZG93bihzY29wZTogQW5hbHl0aWNzU2NvcGUsIGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0RmFpbHVyZUFuYWx5c2lzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgcHJldmlvdXM/OiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9KTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0U3RhZ2VQZXJmb3JtYW5jZShzY29wZTogQW5hbHl0aWNzU2NvcGUsIHBpcGVsaW5lSWQ6IHN0cmluZywgcHJldmlvdXM/OiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9KTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0UmVzb3VyY2VDb25zdW1wdGlvbihzY29wZTogQW5hbHl0aWNzU2NvcGUsIGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0UHJvbW90aW9uVmlldyhzY29wZTogQW5hbHl0aWNzU2NvcGUsIHByb2R1Y3Rpb25FbnY/OiBzdHJpbmcsIGxpbWl0PzogbnVtYmVyKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0T3V0ZGF0ZWRQbHVnaW5zKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgbGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPHVua25vd24+O1xuICBnZXRQbHVnaW5WdWxuZXJhYmlsaXRpZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdD86IG51bWJlcik6IFByb21pc2U8dW5rbm93bj47XG4gIGdldEFkb3B0aW9uKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgdGltZVNhdmVkTWludXRlcz86IG51bWJlciB8IG51bGwpOiBQcm9taXNlPHVua25vd24+O1xuICAvKiogQ29tcGxpYW5jZSArIGFjY2VzcyBwb3N0dXJlLCBvdmVyIGEgc2VydmljZS10by1zZXJ2aWNlIHJlYWQuIERlZ3JhZGVzLiAqL1xuICBnZXRDb21wbGlhbmNlUG9zdHVyZT8oc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTx1bmtub3duPjtcbiAgLyoqIFRoZSBldmFsdWF0ZWQgbmVlZHMtYXR0ZW50aW9uIGZpbmRpbmdzIGZvciB0aGUgcGVyaW9kLiAqL1xuICBnZXROZWVkc0F0dGVudGlvbj8oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBwcmV2aW91cz86IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0pOiBQcm9taXNlPHVua25vd24+O1xufVxuXG4vKiogT25lIHJlZ2lzdGVyZWQgc2VjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdGlvblNwZWMge1xuICBpZDogc3RyaW5nO1xuICAvKiogTWFuYWdlci1mYWNpbmcgdGl0bGUuIE5vdCBhIG1ldHJpYyBuYW1lIOKAlCBcIkRlcGxveXNcIiwgbm90IFwiZGVwbG95bWVudF9mcmVxdWVuY3lcIi4gKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIEZlYXR1cmUgdGhlIG9yZyBtdXN0IGhvbGQsIG9yIHVuZGVmaW5lZCBmb3IgYSBmcmVlIHNlY3Rpb24uICovXG4gIHJlcXVpcmVzRmVhdHVyZT86IEZlYXR1cmVGbGFnO1xuICAvKipcbiAgICogVHJ1ZSB3aGVuIHRoaXMgc2VjdGlvbidzIHZhbHVlIGlzIGEgc2luZ2xlIGNvbXBhcmFibGUgbnVtYmVyLCBzbyB0aGUgY29tcG9zZXJcbiAgICogY2FuIGNvbXB1dGUgcGVyaW9kLW92ZXItcGVyaW9kIGNoYW5nZS4gQSBsaXN0IHNlY3Rpb24gKHRvcCBmYWlsdXJlcykgaGFzIG5vXG4gICAqIG1lYW5pbmdmdWwgXCJjaGFuZ2VcIiwgYW5kIHByZXRlbmRpbmcgb3RoZXJ3aXNlIHByb2R1Y2VzIG5vbnNlbnNlIGFycm93cy5cbiAgICovXG4gIGNvbXBhcmFibGU6IGJvb2xlYW47XG4gIHJ1bihzb3VyY2U6IFNlY3Rpb25EYXRhU291cmNlLCBjdHg6IFNlY3Rpb25Db250ZXh0KTogUHJvbWlzZTx1bmtub3duPjtcbn1cblxuLyoqXG4gKiBJZHMgdGhhdCB3b3VsZCByYW5rIG9yIGNvbXBhcmUgSU5ESVZJRFVBTCBwZW9wbGUuIFJlZnVzZWQgYXQgcmVnaXN0cmF0aW9uLlxuICpcbiAqIFRlYW0tbGV2ZWwgbWV0cmljcyBkZXNjcmliZSBhIHN5c3RlbTsgcGVyLXBlcnNvbiBtZXRyaWNzIGRlc2NyaWJlIGEgcGVyc29uLCBhbmRcbiAqIGEgcmVwb3J0IGEgbWFuYWdlciByZWFkcyBpcyB0aGUgd29yc3QgcG9zc2libGUgcGxhY2UgZm9yIHRoZSBzZWNvbmQuIE9uY2UgYVxuICogZGV2ZWxvcGVyIGJlbGlldmVzIHRoZSB3ZWVrbHkgcmVwb3J0IHJhbmtzIHRoZW0sIHRoZSBudW1iZXJzIHN0YXJ0IGJlaW5nIGdhbWVkXG4gKiBhbmQgdGhlIHJlcG9ydCBzdG9wcyBkZXNjcmliaW5nIHJlYWxpdHkuXG4gKi9cbmNvbnN0IFBFUl9QRVJTT05fTUFSS0VSUyA9IFsnYXV0aG9yJywgJ2NvbW1pdHRlcicsICdkZXZlbG9wZXInLCAncGVyc29uJywgJ3VzZXInLCAnaW5kaXZpZHVhbCcsICdieV9tZW1iZXInLCAncGVyX21lbWJlciddO1xuXG4vKiogVGhyb3dzIHdoZW4gYSBzZWN0aW9uIGlkIGxvb2tzIHBlci1wZXJzb24uICovXG5mdW5jdGlvbiBhc3NlcnROb3RQZXJQZXJzb24oaWQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBsb3dlcmVkID0gaWQudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgaGl0ID0gUEVSX1BFUlNPTl9NQVJLRVJTLmZpbmQoKG0pID0+IGxvd2VyZWQuaW5jbHVkZXMobSkpO1xuICBpZiAoaGl0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFJlZnVzaW5nIHRvIHJlZ2lzdGVyIHJlcG9ydCBzZWN0aW9uIFwiJHtpZH1cIjogaXQgbG9va3MgcGVyLXBlcnNvbiAoXCIke2hpdH1cIikuIGBcbiAgICAgICsgJ1N0YWtlaG9sZGVyIHJlcG9ydHMgYXJlIHRlYW0tbGV2ZWwgYnkgZGVzaWduIOKAlCByYW5raW5nIGluZGl2aWR1YWxzIGluIGEgcmVwb3J0IGEgJ1xuICAgICAgKyAnbWFuYWdlciByZWFkcyBkZXN0cm95cyB0cnVzdCBpbiBldmVyeSBvdGhlciBudW1iZXIgaW4gaXQuIEFnZ3JlZ2F0ZSB0byB0aGUgdGVhbS4nLFxuICAgICk7XG4gIH1cbn1cblxuLyoqIFRoZSBzY29wZSBldmVyeSBhbmFseXRpY3MgcXVlcnkgdGFrZXMsIGZyb20gdGhlIHNlY3Rpb24gY29udGV4dC4gKi9cbmZ1bmN0aW9uIHNjb3BlT2YoYzogU2VjdGlvbkNvbnRleHQpOiBBbmFseXRpY3NTY29wZSB7XG4gIHJldHVybiB7IG9yZ0lkOiBjLm9yZ0lkLCAuLi4oYy5vcmdJZHMgPyB7IG9yZ0lkczogYy5vcmdJZHMgfSA6IHt9KSwgZnJvbTogYy5mcm9tLCB0bzogYy50byB9O1xufVxuXG4vKiogVGhlIHByZXZpb3VzIHBlcmlvZCwgd2hlbiB0aGUgY29udGV4dCBjYXJyaWVzIG9uZSAoZm9yIHRoZSB0cmVuZCBjb2x1bW5zKS4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzT2YoYzogU2VjdGlvbkNvbnRleHQpOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGMucHJldmlvdXNGcm9tICYmIGMucHJldmlvdXNUbyA/IHsgZnJvbTogYy5wcmV2aW91c0Zyb20sIHRvOiBjLnByZXZpb3VzVG8gfSA6IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgUkVHSVNUUlkgPSBuZXcgTWFwPHN0cmluZywgU2VjdGlvblNwZWM+KCk7XG5cbi8qKiBSZWdpc3RlciBhIHNlY3Rpb24uIFRocm93cyBvbiBhIGR1cGxpY2F0ZSBpZCBvciBhIHBlci1wZXJzb24gb25lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyU2VjdGlvbihzcGVjOiBTZWN0aW9uU3BlYyk6IFNlY3Rpb25TcGVjIHtcbiAgYXNzZXJ0Tm90UGVyUGVyc29uKHNwZWMuaWQpO1xuICBpZiAoUkVHSVNUUlkuaGFzKHNwZWMuaWQpKSB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSByZXBvcnQgc2VjdGlvbiBpZDogJHtzcGVjLmlkfWApO1xuICBSRUdJU1RSWS5zZXQoc3BlYy5pZCwgc3BlYyk7XG4gIHJldHVybiBzcGVjO1xufVxuXG4vKiogTG9vayBhIHNlY3Rpb24gdXA7IHVuZGVmaW5lZCB3aGVuIHRoZSBpZCBpcyB1bmtub3duLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3Rpb24oaWQ6IHN0cmluZyk6IFNlY3Rpb25TcGVjIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIFJFR0lTVFJZLmdldChpZCk7XG59XG5cbi8qKiBFdmVyeSByZWdpc3RlcmVkIHNlY3Rpb24sIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxTZWN0aW9ucygpOiBTZWN0aW9uU3BlY1tdIHtcbiAgcmV0dXJuIFsuLi5SRUdJU1RSWS52YWx1ZXMoKV07XG59XG5cbi8qKiBUaGUgaWRzIGEgY2FsbGVyIG1heSBwdXQgaW4gYSBkZWZpbml0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25JZHMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLlJFR0lTVFJZLmtleXMoKV07XG59XG5cbi8vIOKUgOKUgCBEZWxpdmVyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdleGVjdXRpb25fY291bnQnLFxuICB0aXRsZTogJ1BpcGVsaW5lIHJ1bnMnLFxuICBjb21wYXJhYmxlOiB0cnVlLFxuICBydW46IChzLCBjKSA9PiBzLmdldEV4ZWN1dGlvbkNvdW50KGMub3JnSWQsIGMub3JnSWRzLCB7IGZyb206IGMuZnJvbSwgdG86IGMudG8gfSksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdzdWNjZXNzX3JhdGUnLFxuICB0aXRsZTogJ1N1Y2Nlc3MgcmF0ZScsXG4gIGNvbXBhcmFibGU6IHRydWUsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0U3VjY2Vzc1JhdGUoYy5vcmdJZCwgJ3dlZWsnLCBjLmZyb20sIGMudG8sIGMub3JnSWRzLCB7IHR6OiBjLnR6LCB3ZWVrU3RhcnQ6IGMud2Vla1N0YXJ0IH0pLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnZHVyYXRpb24nLFxuICB0aXRsZTogJ1J1biBkdXJhdGlvbicsXG4gIGNvbXBhcmFibGU6IHRydWUsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0QXZlcmFnZUR1cmF0aW9uKGMub3JnSWQsIGMuZnJvbSwgYy50bywgYy5vcmdJZHMpLFxufSk7XG5cbi8vIOKUgOKUgCBXaGF0IGlzIGJsb2NraW5nIHVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ3N0YWdlX2ZhaWx1cmVzJyxcbiAgdGl0bGU6ICdUb3AgZmFpbGluZyBzdGFnZXMnLFxuICAvLyBBIGxpc3QsIG5vdCBhIG51bWJlcjogXCJjaGFuZ2VcIiBvbiBhIHRvcC1OIGxpc3QgaXMgbWVhbmluZ2xlc3MuXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldFN0YWdlRmFpbHVyZXMoYy5vcmdJZCwgYy5mcm9tLCBjLnRvLCBjLm9yZ0lkcyksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdzdGFnZV9ib3R0bGVuZWNrcycsXG4gIHRpdGxlOiAnU2xvd2VzdCBzdGFnZXMnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRTdGFnZUJvdHRsZW5lY2tzKGMub3JnSWQsIGMuZnJvbSwgYy50bywgYy5vcmdJZHMpLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnYWN0aW9uX2ZhaWx1cmVzJyxcbiAgdGl0bGU6ICdUb3AgZmFpbGluZyBzdGVwcycsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldEFjdGlvbkZhaWx1cmVzKGMub3JnSWQsIGMuZnJvbSwgYy50bywgYy5vcmdJZHMpLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnZXJyb3JzJyxcbiAgdGl0bGU6ICdSZWNlbnQgZmFpbHVyZXMnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgLy8gQ2FwcGVkOiBhIG1hbmFnZXIgcmVhZHMgdGhlIHRvcCBmZXcsIGFuZCB0aGUgc25hcHNob3QgaXMgc3RvcmVkIGZvcmV2ZXIuXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0RXJyb3JzKGMub3JnSWQsIGMuZnJvbSwgYy50bywgMTAsIGMub3JnSWRzKSxcbn0pO1xuXG4vLyDilIDilIAgUGx1Z2luIC8gc3VwcGx5LWNoYWluIHBvc3R1cmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAncGx1Z2luX3N1bW1hcnknLFxuICB0aXRsZTogJ1BsdWdpbnMgaW4gdXNlJyxcbiAgY29tcGFyYWJsZTogdHJ1ZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRQbHVnaW5TdW1tYXJ5KGMub3JnSWQpLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAncGx1Z2luX2Rpc3RyaWJ1dGlvbicsXG4gIHRpdGxlOiAnUGx1Z2luIG1peCcsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldFBsdWdpbkRpc3RyaWJ1dGlvbihjLm9yZ0lkKSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ3BsdWdpbl92ZXJzaW9ucycsXG4gIHRpdGxlOiAnT3V0ZGF0ZWQgcGx1Z2lucycsXG4gIGNvbXBhcmFibGU6IHRydWUsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0UGx1Z2luVmVyc2lvbnMoYy5vcmdJZCksXG59KTtcblxuLy8g4pSA4pSAIEJ1aWxkIGhlYWx0aCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdidWlsZF9zdWNjZXNzX3JhdGUnLFxuICB0aXRsZTogJ1BsdWdpbiBidWlsZCBzdWNjZXNzJyxcbiAgY29tcGFyYWJsZTogdHJ1ZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRCdWlsZFN1Y2Nlc3NSYXRlKGMub3JnSWQsICd3ZWVrJywgYy5mcm9tLCBjLnRvLCBjLm9yZ0lkcywgeyB0ejogYy50eiwgd2Vla1N0YXJ0OiBjLndlZWtTdGFydCB9KSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ2J1aWxkX2R1cmF0aW9uJyxcbiAgdGl0bGU6ICdQbHVnaW4gYnVpbGQgZHVyYXRpb24nLFxuICBjb21wYXJhYmxlOiB0cnVlLFxuICBydW46IChzLCBjKSA9PiBzLmdldEJ1aWxkRHVyYXRpb24oYy5vcmdJZCwgYy5mcm9tLCBjLnRvLCBjLm9yZ0lkcyksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdidWlsZF9mYWlsdXJlcycsXG4gIHRpdGxlOiAnUGx1Z2luIGJ1aWxkIGZhaWx1cmVzJyxcbiAgY29tcGFyYWJsZTogZmFsc2UsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0QnVpbGRGYWlsdXJlcyhjLm9yZ0lkLCBjLmZyb20sIGMudG8sIDEwLCBjLm9yZ0lkcyksXG59KTtcblxuLy8g4pSA4pSAIERlcGxveSAvIERPUkEgKHBhaWQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVGhlc2UgbmVlZCBgYWR2YW5jZWRfcmVwb3J0aW5nYC4gV2l0aG91dCBpdCB0aGUgY29tcG9zZXIgcmVuZGVycyBhIGxvY2tlZFxuLy8gc2VjdGlvbiBhbmQgdGhlIHJlc3Qgb2YgdGhlIHJlcG9ydCBzdGlsbCBkZWxpdmVycy5cblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdkb3JhJyxcbiAgdGl0bGU6ICdEZWxpdmVyeSBtZXRyaWNzIChET1JBKScsXG4gIHJlcXVpcmVzRmVhdHVyZTogJ2FkdmFuY2VkX3JlcG9ydGluZycsXG4gIGNvbXBhcmFibGU6IHRydWUsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0RG9yYU1ldHJpY3MoYy5vcmdJZCwgYy5mcm9tLCBjLnRvLCBjLm9yZ0lkcyksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdkb3JhX3RyZW5kJyxcbiAgdGl0bGU6ICdEZWxpdmVyeSB0cmVuZCcsXG4gIHJlcXVpcmVzRmVhdHVyZTogJ2FkdmFuY2VkX3JlcG9ydGluZycsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldERvcmFUcmVuZChjLm9yZ0lkLCAnd2VlaycsIGMuZnJvbSwgYy50bywgYy5vcmdJZHMsIHsgdHo6IGMudHosIHdlZWtTdGFydDogYy53ZWVrU3RhcnQgfSksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdlbnZpcm9ubWVudHMnLFxuICB0aXRsZTogJ0RlcGxveSBlbnZpcm9ubWVudHMnLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRSZXBvcnRFbnZpcm9ubWVudHMoYy5vcmdJZCwgYy5mcm9tLCBjLnRvLCBjLm9yZ0lkcyksXG59KTtcblxuLy8g4pSA4pSAIFRoZSBhbmFseXRpY3Mgc2VjdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFYWNoIHJlYWRzIGEgcHJlLWFnZ3JlZ2F0ZWQgdGFibGUgcmF0aGVyIHRoYW4gcmF3IGV2ZW50cywgYW5kIGVhY2ggYW5zd2VycyBhXG4vLyBxdWVzdGlvbiB0aGUgb24tZGVtYW5kIGRhc2hib2FyZHMgZG8gbm90OiBub3QgXCJob3cgYXJlIHdlIGRvaW5nXCIgYnV0IFwid2hhdFxuLy8gc2hvdWxkIHNvbWVib2R5IGRvIGFib3V0IGl0XCIuXG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAncGlwZWxpbmVfYnJlYWtkb3duJyxcbiAgdGl0bGU6ICdQaXBlbGluZXMgbmVlZGluZyB0aGUgbW9zdCBhdHRlbnRpb24nLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRQaXBlbGluZUJyZWFrZG93bihzY29wZU9mKGMpLCAxMCksXG59KTtcblxuLyoqXG4gKiBUaGUgc2VjdGlvbiB0aGF0IERFQ0lERVMgcmF0aGVyIHRoYW4gZGVzY3JpYmVzLiBJdHMgZmluZGluZ3MgY2FycnkgdGhlIG51bWJlclxuICogYmVoaW5kIHRoZW0sIGJlY2F1c2UgYSBmbGFnIHdpdGhvdXQgZXZpZGVuY2UgaXMgYW4gb3BpbmlvbiB0aGUgcmVhZGVyIGhhcyB0byB0YWtlXG4gKiBvbiB0cnVzdCDigJQgYW5kIHRoZSBmaXJzdCB0aW1lIG9uZSBpcyB3cm9uZyB0aGUgc2VjdGlvbiBzdG9wcyBiZWluZyByZWFkLlxuICovXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ25lZWRzX2F0dGVudGlvbicsXG4gIHRpdGxlOiAnTmVlZHMgYXR0ZW50aW9uJyxcbiAgY29tcGFyYWJsZTogZmFsc2UsXG4gIHJ1bjogKHMsIGMpID0+IChzLmdldE5lZWRzQXR0ZW50aW9uXG4gICAgPyBzLmdldE5lZWRzQXR0ZW50aW9uKHNjb3BlT2YoYyksIHByZXZpb3VzT2YoYykpXG4gICAgOiBQcm9taXNlLnJlc29sdmUoeyBpdGVtczogW10sIHVuYXZhaWxhYmxlOiAnbmVlZHMtYXR0ZW50aW9uIGV2YWx1YXRpb24gaXMgbm90IHdpcmVkIGluIHRoaXMgY29udGV4dCcgfSkpLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnZmFpbHVyZV9hbmFseXNpcycsXG4gIHRpdGxlOiAnV2hhdCBpcyBicmVha2luZycsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldEZhaWx1cmVBbmFseXNpcyhzY29wZU9mKGMpLCBwcmV2aW91c09mKGMpKSxcbn0pO1xuXG5yZWdpc3RlclNlY3Rpb24oe1xuICBpZDogJ3N0YWdlX3BlcmZvcm1hbmNlJyxcbiAgdGl0bGU6ICdTbG93ZXN0IHN0YWdlcycsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICAvLyBUaGUgd29yc3QgcGlwZWxpbmUgZnJvbSB0aGUgYnJlYWtkb3duIGlzIHRoZSBvbmUgd29ydGggZHJpbGxpbmcgaW50bzsgYVxuICAvLyBzZWN0aW9uIHRoYXQgYXNrZWQgZm9yIGEgcGlwZWxpbmUgaWQgd291bGQgaGF2ZSBub3RoaW5nIHRvIHB1dCBpbiBpdCBvbiBhXG4gIC8vIHNjaGVkdWxlZCBydW4sIHdoZXJlIHRoZXJlIGlzIG5vIHVzZXIgdG8gcGljayBvbmUuXG4gIHJ1bjogYXN5bmMgKHMsIGMpID0+IHtcbiAgICBjb25zdCBicmVha2Rvd24gPSBhd2FpdCBzLmdldFBpcGVsaW5lQnJlYWtkb3duKHNjb3BlT2YoYyksIDEpIGFzIEFycmF5PHsgcGlwZWxpbmVJZD86IHN0cmluZyB9PjtcbiAgICBjb25zdCB3b3JzdCA9IGJyZWFrZG93blswXT8ucGlwZWxpbmVJZDtcbiAgICBpZiAoIXdvcnN0KSByZXR1cm4geyBzdGFnZXM6IFtdLCBwaXBlbGluZUlkOiBudWxsIH07XG4gICAgcmV0dXJuIHsgcGlwZWxpbmVJZDogd29yc3QsIHN0YWdlczogYXdhaXQgcy5nZXRTdGFnZVBlcmZvcm1hbmNlKHNjb3BlT2YoYyksIHdvcnN0LCBwcmV2aW91c09mKGMpKSB9O1xuICB9LFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAncHJvbW90aW9uJyxcbiAgdGl0bGU6ICdXaGF0IHJlYWNoZWQgcHJvZHVjdGlvbiwgYW5kIHdoYXQgZGlkIG5vdCcsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldFByb21vdGlvblZpZXcoc2NvcGVPZihjKSksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdyZXNvdXJjZV9jb25zdW1wdGlvbicsXG4gIHRpdGxlOiAnV2hlcmUgdGhlIGJ1aWxkIHRpbWUgd2VudCcsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldFJlc291cmNlQ29uc3VtcHRpb24oc2NvcGVPZihjKSwgMjApLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAnb3V0ZGF0ZWRfcGx1Z2lucycsXG4gIHRpdGxlOiAnUGx1Z2lucyBiZWhpbmQgdGhlaXIgbGF0ZXN0IHZlcnNpb24nLFxuICBjb21wYXJhYmxlOiBmYWxzZSxcbiAgcnVuOiAocywgYykgPT4gcy5nZXRPdXRkYXRlZFBsdWdpbnMoc2NvcGVPZihjKSwgNTApLFxufSk7XG5cbnJlZ2lzdGVyU2VjdGlvbih7XG4gIGlkOiAncGx1Z2luX3Z1bG5lcmFiaWxpdGllcycsXG4gIHRpdGxlOiAnUGx1Z2luIHZ1bG5lcmFiaWxpdGllcycsXG4gIGNvbXBhcmFibGU6IGZhbHNlLFxuICBydW46IChzLCBjKSA9PiBzLmdldFBsdWdpblZ1bG5lcmFiaWxpdGllcyhzY29wZU9mKGMpLCA1MCksXG59KTtcblxucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdhZG9wdGlvbicsXG4gIHRpdGxlOiAnQWRvcHRpb24gYW5kIGNvdmVyYWdlJyxcbiAgY29tcGFyYWJsZTogZmFsc2UsXG4gIHJ1bjogKHMsIGMpID0+IHMuZ2V0QWRvcHRpb24oc2NvcGVPZihjKSksXG59KTtcblxuLyoqXG4gKiBDb21wbGlhbmNlIGFuZCBhY2Nlc3MgcG9zdHVyZSwgcmVhZCBmcm9tIHRoZSBjb21wbGlhbmNlIGFuZCBwbGF0Zm9ybSBzZXJ2aWNlc1xuICogb3ZlciBhIHNlcnZpY2UtdG8tc2VydmljZSBjYWxsLlxuICpcbiAqIERFR1JBREVTIHJhdGhlciB0aGFuIGZhaWxpbmcgdGhlIHJ1bjogaWYgY29tcGxpYW5jZSBpcyB1bnJlYWNoYWJsZSB0aGUgc2VjdGlvblxuICogc2F5cyBcInVuYXZhaWxhYmxlXCIgYW5kIHRoZSByZXN0IG9mIHRoZSByZXBvcnQgc3RpbGwgcmVhY2hlcyB0aGUgbGVhZC4gQSB3ZWVrbHlcbiAqIHJlcG9ydCB0aGF0IGRpZCBub3QgYXJyaXZlIGJlY2F1c2Ugb25lIG9wdGlvbmFsIHBhbmVsJ3MgdXBzdHJlYW0gd2FzIGRvd24gaXMgYVxuICogc3VwcG9ydCB0aWNrZXQ7IGEgcGFuZWwgdGhhdCBzYXlzIGl0IGNvdWxkIG5vdCBiZSBjb21wdXRlZCBpcyBpbmZvcm1hdGlvbi5cbiAqL1xucmVnaXN0ZXJTZWN0aW9uKHtcbiAgaWQ6ICdjb21wbGlhbmNlX3Bvc3R1cmUnLFxuICB0aXRsZTogJ0NvbXBsaWFuY2UgYW5kIGFjY2VzcyBwb3N0dXJlJyxcbiAgY29tcGFyYWJsZTogZmFsc2UsXG4gIHJ1bjogKHMsIGMpID0+IChzLmdldENvbXBsaWFuY2VQb3N0dXJlXG4gICAgPyBzLmdldENvbXBsaWFuY2VQb3N0dXJlKHNjb3BlT2YoYykpXG4gICAgOiBQcm9taXNlLnJlc29sdmUoeyB1bmF2YWlsYWJsZTogJ2NvbXBsaWFuY2UgcG9zdHVyZSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgY29udGV4dCcgfSkpLFxufSk7XG4iXX0=
@@ -1,3 +1,4 @@
1
+ import { type WeekStart } from '@pipeline-builder/api-core';
1
2
  import type { ReportCadence, ReportDefinition, ReportPauseReason, ReportRecipient, ReportRun, ReportRunStatus, ReportScope, ReportShareLink, ReportTemplate } from '../../../database/schema/reporting-stakeholder.js';
2
3
  /** How long a freshly minted share link lives when the caller names no window. */
3
4
  /**
@@ -40,7 +41,7 @@ export interface CreateDefinitionInput {
40
41
  sections: string[];
41
42
  cadence: ReportCadence;
42
43
  timezone: string;
43
- weekStart: 'monday' | 'sunday';
44
+ weekStart: WeekStart;
44
45
  scope: ReportScope;
45
46
  recipients: string[];
46
47
  autoSend: boolean;
@@ -55,7 +56,7 @@ export interface UpdateDefinitionInput {
55
56
  sections?: string[];
56
57
  cadence?: ReportCadence;
57
58
  timezone?: string;
58
- weekStart?: 'monday' | 'sunday';
59
+ weekStart?: WeekStart;
59
60
  scope?: ReportScope;
60
61
  recipients?: string[];
61
62
  autoSend?: boolean;