@pipeline-builder/api-core 5.2.2 → 5.2.4

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 (91) hide show
  1. package/lib/constants/ai-providers.d.ts +3 -22
  2. package/lib/constants/ai-providers.js +6 -56
  3. package/lib/errors/app-errors.d.ts +14 -0
  4. package/lib/errors/app-errors.js +21 -1
  5. package/lib/helpers/index.d.ts +1 -0
  6. package/lib/helpers/index.js +2 -1
  7. package/lib/helpers/sse-helpers.d.ts +33 -3
  8. package/lib/helpers/sse-helpers.js +91 -19
  9. package/lib/helpers/support-calendar.d.ts +69 -0
  10. package/lib/helpers/support-calendar.js +179 -0
  11. package/lib/middleware/auth.js +6 -3
  12. package/lib/middleware/deferred-quota-check.d.ts +5 -0
  13. package/lib/middleware/deferred-quota-check.js +33 -0
  14. package/lib/middleware/ecosystem-guard.d.ts +3 -3
  15. package/lib/middleware/ecosystem-guard.js +5 -5
  16. package/lib/middleware/index.d.ts +5 -2
  17. package/lib/middleware/index.js +6 -3
  18. package/lib/middleware/on-behalf.d.ts +37 -0
  19. package/lib/middleware/on-behalf.js +143 -0
  20. package/lib/middleware/permission-gates.d.ts +11 -0
  21. package/lib/middleware/permission-gates.js +7 -1
  22. package/lib/middleware/quota-exempt-routes.d.ts +36 -0
  23. package/lib/middleware/quota-exempt-routes.js +47 -0
  24. package/lib/middleware/route-table.d.ts +104 -0
  25. package/lib/middleware/route-table.js +72 -2
  26. package/lib/middleware/service-tokens.d.ts +8 -0
  27. package/lib/middleware/service-tokens.js +5 -3
  28. package/lib/middleware/step-up.js +11 -1
  29. package/lib/services/ai-call-weight.d.ts +24 -0
  30. package/lib/services/ai-call-weight.js +77 -0
  31. package/lib/services/alert-delivery.d.ts +99 -0
  32. package/lib/services/alert-delivery.js +132 -0
  33. package/lib/services/audit-context.d.ts +105 -0
  34. package/lib/services/audit-context.js +134 -0
  35. package/lib/services/index.d.ts +10 -2
  36. package/lib/services/index.js +10 -2
  37. package/lib/services/org-ai-client.d.ts +61 -0
  38. package/lib/services/org-ai-client.js +112 -0
  39. package/lib/services/pagerduty-inbound.d.ts +101 -0
  40. package/lib/services/pagerduty-inbound.js +195 -0
  41. package/lib/services/pagerduty.d.ts +109 -0
  42. package/lib/services/pagerduty.js +186 -0
  43. package/lib/services/quota-increment-batcher.d.ts +81 -0
  44. package/lib/services/quota-increment-batcher.js +166 -0
  45. package/lib/services/quota.d.ts +158 -14
  46. package/lib/services/quota.js +252 -22
  47. package/lib/services/remote-audit-client.d.ts +44 -1
  48. package/lib/services/remote-audit-client.js +106 -20
  49. package/lib/services/version-vuln-policy.d.ts +174 -0
  50. package/lib/services/version-vuln-policy.js +242 -0
  51. package/lib/types/ai-catalog.d.ts +63 -0
  52. package/lib/types/ai-catalog.js +82 -0
  53. package/lib/types/ask-proposals.js +6 -6
  54. package/lib/types/build-catalog.d.ts +154 -0
  55. package/lib/types/build-catalog.js +158 -0
  56. package/lib/types/common.d.ts +37 -3
  57. package/lib/types/common.js +20 -2
  58. package/lib/types/ecosystem-notifications.d.ts +5 -5
  59. package/lib/types/ecosystem-notifications.js +9 -3
  60. package/lib/types/error-codes.d.ts +13 -6
  61. package/lib/types/error-codes.js +18 -8
  62. package/lib/types/feature-flags.d.ts +71 -1
  63. package/lib/types/feature-flags.js +131 -11
  64. package/lib/types/index.d.ts +6 -4
  65. package/lib/types/index.js +12 -5
  66. package/lib/types/metadata-keys.d.ts +6 -0
  67. package/lib/types/metadata-keys.js +4 -1
  68. package/lib/types/permissions.d.ts +351 -3
  69. package/lib/types/permissions.js +610 -21
  70. package/lib/types/pipeline.d.ts +39 -0
  71. package/lib/types/pipeline.js +57 -1
  72. package/lib/types/plugin-health.d.ts +0 -2
  73. package/lib/types/plugin-health.js +1 -11
  74. package/lib/types/plugin-scan.d.ts +192 -42
  75. package/lib/types/plugin-scan.js +159 -43
  76. package/lib/types/quota-catalog.d.ts +247 -0
  77. package/lib/types/quota-catalog.js +122 -0
  78. package/lib/types/quota-tiers.d.ts +150 -0
  79. package/lib/types/quota-tiers.js +167 -2
  80. package/lib/types/remote-audit-actions.d.ts +1 -1
  81. package/lib/types/remote-audit-actions.js +217 -4
  82. package/lib/types/wire-vocabulary.js +8 -1
  83. package/lib/utils/index.d.ts +1 -1
  84. package/lib/utils/index.js +2 -2
  85. package/lib/utils/response.d.ts +35 -2
  86. package/lib/utils/response.js +42 -3
  87. package/lib/validation/ai-schemas.d.ts +27 -0
  88. package/lib/validation/ai-schemas.js +31 -5
  89. package/lib/validation/plugin-schemas.d.ts +15 -0
  90. package/lib/validation/plugin-schemas.js +28 -1
  91. package/package.json +31 -2
@@ -34,6 +34,15 @@ export const REMOTE_AUDIT_ACTIONS = [
34
34
  // and a log line are not a durable record of one. `details` carry
35
35
  // name/version/digest, how many findings were waived and which packages.
36
36
  'plugin.vuln.waived',
37
+ // The nightly rescan FLAGGED a stored version (its gated Critical findings
38
+ // now exceed PLUGIN_VULN_MAX_FINDINGS — lookup and the pipeline's owners are
39
+ // warned at `error` severity), or CLEARED that flag. Both change what
40
+ // resolution says about a version nobody rebuilt, on nobody's request, so the
41
+ // record of WHEN and WHY lives in the hash-chained log rather than only in a
42
+ // column the next rescan overwrites. `details` carry counts, the gated
43
+ // advisory ids and the image digest.
44
+ 'plugin.vuln.flagged',
45
+ 'plugin.vuln.cleared',
37
46
  // Plugin lifecycle mutations (api/plugin route handlers) — the destructive /
38
47
  // publishing surface that builds already audit's counterpart: registry delete,
39
48
  // source upload, and deploy-to-cluster. `targetId` is the plugin id.
@@ -85,12 +94,20 @@ export const REMOTE_AUDIT_ACTIONS = [
85
94
  'quota.limit.update',
86
95
  // A superadmin deleting an org's entire quota document.
87
96
  'quota.delete',
97
+ // An account's quota threshold-notice settings (opt-out + the
98
+ // `quota.threshold` webhook URL) — where usage warnings go.
99
+ 'quota.notice_settings.update',
88
100
  // Compliance administration (api/compliance) — the enforcement-posture surface.
89
101
  // Approving/revoking an exemption, toggling/authoring/deleting a rule,
90
102
  // authoring/deleting a policy, managing scan schedules, applying a template,
91
103
  // or cancelling a running scan. `targetId` is the rule/policy/exemption/scan id.
92
104
  'compliance.exemption.approve',
93
105
  'compliance.exemption.revoke',
106
+ // A member FILING an exemption request (single or bulk; metadata only, never
107
+ // the reason) and an admin REJECTING one — the other halves of the
108
+ // two-person decision whose approval is recorded above.
109
+ 'compliance.exemption.request',
110
+ 'compliance.exemption.reject',
94
111
  'compliance.rule.toggle',
95
112
  'compliance.rule.create',
96
113
  'compliance.rule.update',
@@ -113,6 +130,13 @@ export const REMOTE_AUDIT_ACTIONS = [
113
130
  // persists a scan and can block entities that passed before.
114
131
  'compliance.scan.create',
115
132
  'compliance.scan.cancel',
133
+ // A scan's terminal OUTCOME (completed → success with the pass/warn/block
134
+ // counts, failed → failure). Scheduled scans also write `compliance.scan.create`
135
+ // (`details.triggeredBy: 'scheduled'`), attributed to the schedule's author.
136
+ 'compliance.scan.complete',
137
+ // Platform onboarding subscribing a new org to every published rule
138
+ // (INACTIVE subscriptions; `details.subscribed` is the count).
139
+ 'compliance.subscription.auto-subscribe',
116
140
  // Per-org compliance notification settings: recipients + the outbound webhook
117
141
  // URL/secret. Bearer-equivalent config that redirects violation notices, so a
118
142
  // change carries the durable trail (never the secret itself).
@@ -129,6 +153,14 @@ export const REMOTE_AUDIT_ACTIONS = [
129
153
  // (api/image-registry POST /internal/plugin-signatures, called by the plugin
130
154
  // build worker). The key is what synth trusts, so every use is on the trail.
131
155
  'registry.image.sign',
156
+ // The Docker token endpoint minting a registry token that GRANTS access
157
+ // (`details.granted`: repo + actions; the scope-less `docker login` probe is
158
+ // not recorded) — and, as outcome failure, a refused credential (hashed
159
+ // username, credential kind only).
160
+ 'registry.token.issue',
161
+ // A push credential minted for one anonymous submission's
162
+ // `quarantine/<submissionId>` repo (expiry + TTL, never the secret).
163
+ 'registry.quarantine.credential.mint',
132
164
  // Messaging (api/message) — admin BROADCAST announcements + destructive
133
165
  // deletes. 1:1 user messages are intentionally NOT audited (noise + they would
134
166
  // pull private content into the trail). `details` carry metadata only
@@ -140,6 +172,86 @@ export const REMOTE_AUDIT_ACTIONS = [
140
172
  // message tombstone — the destructive finalizer the retention sweep would
141
173
  // otherwise perform at the purge deadline. `details` carry metadata only.
142
174
  'message.purge',
175
+ // An author's edit of a sent message (and refused attempts, as failures).
176
+ // `details` carry the new body's LENGTH only — neither side of the edit.
177
+ 'message.update',
178
+ // A message attachment stored (general or support mount, `details.surface`).
179
+ // Type + size only — never the bytes, and not the user-chosen filename.
180
+ 'message.attachment.upload',
181
+ // A SYSTEM notification dropped into an org's inbox by an internal service
182
+ // (POST /messages/internal/notify); `details.caller` names the service.
183
+ 'message.notify.internal',
184
+ // The platform org-delete cascade reclaiming an org's attachment BLOBS —
185
+ // `details.blobsDeleted`, or a failure row when the reclaim did not complete.
186
+ 'message.org.purge',
187
+ // Support cases (api/message). Distinct from the `message.*` family above
188
+ // because a case is not an ordinary message: it carries a response-time
189
+ // commitment, so WHO raised it and WHEN we first answered are the facts a
190
+ // dispute turns on. `details` carry the case number, level and severity —
191
+ // metadata only, never the body of what a customer wrote.
192
+ //
193
+ // Two of the nine planned support actions are here, and only two: these are
194
+ // the ones with real emitters today. The rest (`status`, `severity`,
195
+ // `assign`, `transfer`, `note`, `read`) land WITH the routes that emit them —
196
+ // a declared action nothing emits is dead vocabulary, and the parity test
197
+ // would then force a docs row describing an event that never fires.
198
+ //
199
+ // `support.case.read` will matter most of all when it arrives: it is the only
200
+ // record that someone at the vendor opened a customer's case.
201
+ 'support.case.open',
202
+ 'support.case.reply',
203
+ // The workflow mutations. Each is audited because each moves a case's
204
+ // relationship to its response commitment: status stops or restarts the
205
+ // clock, severity changes which target applies, and the two ownership
206
+ // actions decide WHO is accountable for meeting it. A silent change of owner
207
+ // is how accountability for a missed target disappears.
208
+ 'support.case.status',
209
+ 'support.case.severity',
210
+ 'support.case.assign',
211
+ 'support.case.transfer',
212
+ // ON-CALL. The provider owns the rota, the escalation and the contact
213
+ // methods; what it cannot own is an auditable answer to "who picked this up
214
+ // at 03:14". A click on a link in their UI is not an identity this system can
215
+ // attest to, so their incident state change is relayed here and recorded
216
+ // against the agent they name. The hash chain is the point: a post-incident
217
+ // review needs the ack to be evidence rather than a screenshot.
218
+ //
219
+ // `escalated` is audited separately because it is the record that the FIRST
220
+ // responder did not answer — the fact a rota is adjusted on, and the one most
221
+ // likely to be disputed later.
222
+ 'support.oncall.acknowledged',
223
+ 'support.oncall.escalated',
224
+ // The test page. Audited because it RINGS A PHONE: whoever it wakes is
225
+ // entitled to a record of who caused that, at whatever hour it was.
226
+ 'support.oncall.test',
227
+ // The per-case sweep paging the rota for a premium case nearing its target.
228
+ // Recorded once, on the tick the case ENTERED the window — the sweep re-sends
229
+ // the page every tick, and twenty-four rows for one page would be noise.
230
+ 'support.oncall.paged',
231
+ // The two CONTACT actions (platform). Not case events — entitlement events:
232
+ // each one changes who in an org is able to commit us to a response target at
233
+ // all, and designating spends a slot of a PAID, account-pooled allowance. The
234
+ // revoke carries the count of open cases it left behind, so an orphaned case
235
+ // is a recorded fact rather than something discovered later.
236
+ 'support.contact.designate',
237
+ 'support.contact.revoke',
238
+ // The premium UPGRADE, both directions. Separate actions from designation
239
+ // because they answer to a different cap and carry a different fact: who was
240
+ // entitled to 24x7 coverage, and when. A response-time dispute over an
241
+ // out-of-hours case turns on exactly that.
242
+ 'support.contact.upgrade',
243
+ 'support.contact.downgrade',
244
+ // Staff notes on a case. Audited because a note is the vendor's internal
245
+ // assessment of a customer and the only surface on a case the tenant must
246
+ // never see; the trail carries METADATA ONLY (case number, note id, length)
247
+ // and never the body, since the central trail is read far more widely than
248
+ // the support queue is.
249
+ 'support.case.note',
250
+ // The canned-reply library. ONE action for create/edit/retire rather than
251
+ // three, because the trail's question here is "who changed the wording the
252
+ // desk sends customers", not which verb they used — `details` carries that.
253
+ // System-wide rather than per-tenant, so these rows name no affected org.
254
+ 'support.canned.write',
143
255
  // Billing (api/billing) — subscription + entitlement mutations, mirrored to the
144
256
  // central audit trail (these also write to the service-local billing_events
145
257
  // collection). `details` carry plan/tier/addon ids only — never card/payment
@@ -153,6 +265,17 @@ export const REMOTE_AUDIT_ACTIONS = [
153
265
  'billing.subscription.cancel',
154
266
  'billing.subscription.delete',
155
267
  'billing.tier.override',
268
+ // A NEGOTIATED support size floor replacing the computed ramp. System-org
269
+ // only, and audited with the agreed PRICE and the agreed SEAT COUNT together:
270
+ // a dispute about what was signed for turns on that pair, and the price alone
271
+ // cannot answer "at what scale".
272
+ 'billing.support-floor.override',
273
+ // A GRANTED one-time support incident — a commercial concession, not a sale.
274
+ // There is deliberately no purchase path: monthly support cancels freely, so
275
+ // an incident priced above a month is dominated and one below it loses money.
276
+ // The row carries the count and the resulting balance, which is what a later
277
+ // review of "who gave what away" needs.
278
+ 'billing.support-incident.grant',
156
279
  // Operator-only reseed of the invoice ledger from the payment provider's
157
280
  // history (POST /billing/admin/backfill) — mutates finance data fleet-wide.
158
281
  'billing.addon.add',
@@ -169,6 +292,12 @@ export const REMOTE_AUDIT_ACTIONS = [
169
292
  'billing.discount.apply',
170
293
  'billing.discount.remove',
171
294
  'billing.discount.revoke',
295
+ // Campaigns (docs/billing-discounts.md) — the identity a set of discount codes
296
+ // belongs to, carrying the budget, window and one-per-account rule. Authoring
297
+ // one decides how much the business may give away, so each change is audited.
298
+ 'billing.campaign.create',
299
+ 'billing.campaign.update',
300
+ 'billing.campaign.end',
172
301
  // Promotions (docs/billing-discounts.md#promotions) — rule-driven auto-grant
173
302
  // campaigns. `details` carry the promotion id + cents/event only.
174
303
  'billing.promotion.create',
@@ -225,6 +354,32 @@ export const REMOTE_AUDIT_ACTIONS = [
225
354
  // question a reviewer asks is "was this account's reporting off between these two
226
355
  // dates", and answering it from a single action's details means reading every row.
227
356
  'reporting.report.resumed',
357
+ // The drafting half of a run: a compose/regenerate freezes the org's numbers
358
+ // into a run, the lead's notes are edited onto it (metadata only — length,
359
+ // never the prose), and an AI summary is drafted from it (the numbers went to
360
+ // a provider; `outcome` carries a refusal). A resend re-mints a recipient's
361
+ // confirmation credential. `verified` / `unsubscribed` are the UNAUTHENTICATED
362
+ // recipient's own acts (actor `anonymous`, a hashed address only): bounded by
363
+ // construction — the verify token is single-use, and only the click that
364
+ // actually stops delivery writes an unsubscribe row.
365
+ 'reporting.report.run.compose',
366
+ 'reporting.report.run.notes',
367
+ 'reporting.report.run.summary',
368
+ 'reporting.report.recipient.resend',
369
+ 'reporting.report.recipient.verified',
370
+ 'reporting.report.recipient.unsubscribed',
371
+ // MACHINE ingest (`reporting:ingest` scope). One `batch` row per POST to the
372
+ // event / incident / ingest-health routes — counts plus capped pipeline,
373
+ // execution, EventBridge-event and incident id lists, attributed to the
374
+ // credential's principal — so a forged or misrouted write names the key behind
375
+ // it. `rejected` is the tenancy refusal inside a batch (events naming another
376
+ // org's pipelines): a FAILURE row with the offending pipeline ids, never the
377
+ // org they belong to. `incident.record` is one incident that is new or actually
378
+ // changed (before/after); like `deployment.outcome` it moves CFR/MTTR. An
379
+ // unchanged repeat-interval re-post writes none.
380
+ 'reporting.ingest.batch',
381
+ 'reporting.ingest.rejected',
382
+ 'reporting.incident.record',
228
383
  // Denied authorization attempt — emitted best-effort by the shared
229
384
  // `requirePermission` / `requireSystemAdmin` gate when a state-changing
230
385
  // (non-GET) request is rejected, so probing/escalation attempts are visible
@@ -243,6 +398,15 @@ export const REMOTE_AUDIT_ACTIONS = [
243
398
  // rating and the DOC IDS cited (`authentication.md`), never the question: the
244
399
  // doc is what gets fixed, and it is not user-entered text.
245
400
  'ask.feedback',
401
+ // One AI generation of a pipeline / plugin draft (`/pipelines/generate*`,
402
+ // `/plugins/generate*`), success or failure (incl. client abort). `details` carry
403
+ // SAFE METADATA ONLY: the route, the prompt LENGTH, the shared AI usage block
404
+ // (`ai`: the provider and model that ANSWERED after any failover, `fallbackFrom`,
405
+ // whose key paid — `keySource` request/org/platform — tokens in/out/cached, the
406
+ // prompt version, how the `aiCalls` slot settled) and the reservation's
407
+ // `quota` view — never the prompt, the generated output, or a key.
408
+ 'pipeline.ai.generate',
409
+ 'plugin.ai.generate',
246
410
  // Plugin ecosystem (docs/runbooks/ecosystem-moderation.md). Governance actions
247
411
  // are recorded with `orgId` = the system org; `affectedOrgId` is the
248
412
  // publisher's org (listing/version/review/advisory/publisher moderation) or
@@ -276,7 +440,10 @@ export const REMOTE_AUDIT_ACTIONS = [
276
440
  'plugin.request.auto-approve',
277
441
  // Listings and versions (system org, except the tenant pause).
278
442
  'plugin.listing.publish',
279
- 'plugin.listing.unlist',
443
+ // NOTE: there is no `plugin.listing.unlist`. Withdrawal is already expressed by
444
+ // `plugin.listing.state.change` (`unmaintained` / `suspended` / `listed`),
445
+ // which is the action the code actually emits, so `unlist` was a second name
446
+ // for a thing that has one — and a never-emitted one at that.
280
447
  'plugin.listing.update',
281
448
  'plugin.listing.state.change',
282
449
  'plugin.listing.pause',
@@ -285,13 +452,31 @@ export const REMOTE_AUDIT_ACTIONS = [
285
452
  'plugin.version.yank',
286
453
  'plugin.version.unyank',
287
454
  'plugin.version.deprecate',
288
- 'plugin.collection.update',
455
+ // Retiring a version's registry image to reclaim `storageBytes`. Distinct
456
+ // from the four above, which change whether a version RESOLVES and delete
457
+ // nothing, and from `registry.image.delete`/`registry.tag.delete`, which are
458
+ // the registry's own operator-side trail. This is a tenant freeing space, and
459
+ // the only audited action that can reduce an org's storage figure — so its
460
+ // row carries the bytes it freed, which cannot be recovered afterwards.
461
+ 'plugin.version.prune',
462
+ // NOTE: no `plugin.collection.update`. `ecosystem_collections` was deleted (see
463
+ // the tombstone in `schema/ecosystem.ts`) because nothing ever wrote or read
464
+ // one; this declaration outlived the table it audited.
289
465
  // Ecosystem configuration (system org).
290
466
  'ecosystem.auto-approval-rule.create',
291
467
  'ecosystem.auto-approval-rule.update',
292
468
  'ecosystem.auto-approval-rule.delete',
293
469
  'ecosystem.reserved-name.update',
294
- 'ecosystem.sla.update',
470
+ // The one-time BOOTSTRAP exception (auto-approval of the initial Official
471
+ // catalog) opening on the first Official request, and closing for good
472
+ // (`details.reason`: window_elapsed / listings_exist / a manager decision;
473
+ // `details.approved`: how many requests rode it).
474
+ 'ecosystem.bootstrap.open',
475
+ 'ecosystem.bootstrap.close',
476
+ // NOTE: no `ecosystem.sla.update`. The lane SLAs are HARDCODED (standard 48h,
477
+ // security-fix 4h in `services/ecosystem/sla.ts`) with no settings surface, so
478
+ // there is no mutation to audit. Making them operator-tunable is the change
479
+ // that should re-add this.
295
480
  // Public registry namespace (`public/*`): copy + sign + attest on publish,
296
481
  // the tier-change/suspension re-sign job, tag removal on yank/takedown, and
297
482
  // the retention sweep.
@@ -352,9 +537,37 @@ export const REMOTE_AUDIT_ACTIONS = [
352
537
  'plugin.security_notifications.update',
353
538
  'plugin.security_notifications.external_email.verify',
354
539
  'plugin.security_notifications.test',
540
+ // A gate-refused image KEPT from the setup catalog load, promoted to a
541
+ // version without a rebuild (system org, after a fix upstream or an
542
+ // advisory-id waiver) — or refused again because the CURRENT gates still
543
+ // fail it. `details` carry name/version/digest and the findings.
544
+ 'plugin.setup_image.promoted',
545
+ 'plugin.setup_image.promote_refused',
546
+ // A gate-refused setup-load image KEPT (signed, in the registry) for later
547
+ // promotion (`details`: digest, refusal code, expiresAt) — and its row
548
+ // dropped by the sweep (`details.reason`: expired / superseded).
549
+ 'plugin.setup_image.kept',
550
+ 'plugin.setup_image.discarded',
551
+ // A PIPELINE's triage of its exposure to a vulnerable plugin version: a
552
+ // time-boxed risk acceptance (reason + expiry, the accepted finding keys and
553
+ // whether KEV findings were accepted), a false-positive dismissal, or a
554
+ // reopen. An active acceptance exempts that pipeline's lookups and runtime
555
+ // checks from the flag / KEV / High-floor refusals for those findings only.
556
+ 'pipeline.vuln.accepted',
557
+ 'pipeline.vuln.false_positive',
558
+ 'pipeline.vuln.reopened',
559
+ // A pipeline's runtime check graded one of its running images `error` or
560
+ // louder (`details`: stepKey, digest, reason codes, executionId when sent).
561
+ 'pipeline.runtime_check.flagged',
562
+ // A pipeline's plugin steps moved to newer versions through the upgrade
563
+ // flow (preview → apply; `details` carry the steps, from → to versions), and a
564
+ // pipeline-run security scanner report uploaded for a pipeline (`details`:
565
+ // tool, format, stage, the finding counts — never the findings themselves).
566
+ 'pipeline.plugin.upgraded',
567
+ 'pipeline.security_report.upload',
355
568
  ];
356
569
  /** Whether `value` is an action a remote service may emit (the ingest allow-list). */
357
570
  export function isRemoteAuditAction(value) {
358
571
  return REMOTE_AUDIT_ACTIONS.includes(value);
359
572
  }
360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVtb3RlLWF1ZGl0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQix1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsa0VBQWtFO0lBQ2xFLHlFQUF5RTtJQUN6RSxvQkFBb0I7SUFDcEIsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGVBQWU7SUFDZiw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGdFQUFnRTtJQUNoRSxxRUFBcUU7SUFDckUsb0RBQW9EO0lBQ3BELGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixtRUFBbUU7SUFDbkUsNEVBQTRFO0lBQzVFLDBEQUEwRDtJQUMxRCxnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLHlCQUF5QjtJQUN6Qiww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b0M7Q0FDNUIsQ0FBQztBQUlYLHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBYTtJQUMvQyxPQUFRLG9CQUEwQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHJlbW90ZSAobm9uLXBsYXRmb3JtKSBhdWRpdCBBQ1RJT04gVk9DQUJVTEFSWS5cbiAqXG4gKiBLZXB0IGFwYXJ0IGZyb20gdGhlIGNsaWVudCB0aGF0IHNoaXBzIHRoZSBldmVudHMgKGBzZXJ2aWNlcy9yZW1vdGUtYXVkaXQtY2xpZW50LnRzYClcbiAqIGJlY2F1c2UgaXQgaXMgYW4gYWxsb3ctbGlzdCwgbm90IG1hY2hpbmVyeTogaXQgaXMgdGhlIHRoaW5nIGEgcmV2aWV3ZXIgcmVhZHNcbiAqIGVuZCB0byBlbmQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIGEgc2VydmljZSBtYXkgZW1pdCBhIGdpdmVuIGFjdGlvbiwgYW5kIGl0IGlzXG4gKiB3aGF0IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBhZ2FpbnN0LlxuICovXG5cblxuLyoqXG4gKiBUaGUgZXhhY3Qgc2V0IG9mIGF1ZGl0IGFjdGlvbnMgYSBOT04tUExBVEZPUk0gKHJlbW90ZSkgc2VydmljZSBpcyBwZXJtaXR0ZWQgdG9cbiAqIGVtaXQgdGhyb3VnaCBgUE9TVCAvYXVkaXQvZXZlbnRzYC4gVGhpcyBpcyB0aGUgU0lOR0xFIFNPVVJDRSDigJQgYFJlbW90ZUF1ZGl0QWN0aW9uYFxuICogaXMgZGVyaXZlZCBmcm9tIGl0LCBzbyB0aGUgdHlwZSBhbmQgdGhlIHJ1bnRpbWUgYWxsb3ctbGlzdCBjYW4gbmV2ZXIgZHJpZnQuXG4gKlxuICogU0VDVVJJVFk6IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBgYWN0aW9uYCBhZ2FpbnN0IHRoaXMgc3Vic2V0ICh2aWFcbiAqIHtAbGluayBpc1JlbW90ZUF1ZGl0QWN0aW9ufSksIE5PVCB0aGUgZnVsbCBwbGF0Zm9ybSBgQXVkaXRBY3Rpb25gIHVuaW9uIOKAlCBhXG4gKiBgc2VydmljZToqYCB0b2tlbiBtdXN0IG5vdCBiZSBhYmxlIHRvIGZvcmdlIHBsYXRmb3JtLWF1dGhvcml0eSBldmVudHNcbiAqIChgYWRtaW4uc3VwZXJhZG1pbi5ncmFudGAsIGBvcmcub3duZXJzaGlwLnRyYW5zZmVyYCwgYHVzZXIubG9naW5gLCDigKYpLiBLZWVwXG4gKiB0aGlzIGxpc3QgZnJlZSBvZiBhbnkgcGxhdGZvcm0tb25seSBhY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSRU1PVEVfQVVESVRfQUNUSU9OUyA9IFtcbiAgJ3BsdWdpbi5idWlsZC5jb21wbGV0ZWQnLFxuICAncGx1Z2luLmJ1aWxkLmZhaWxlZCcsXG4gICdwbHVnaW4uYnVpbGQudGltZW91dCcsXG4gIC8vIEEgdmVyc2lvbiBwZXJzaXN0ZWQgVU5TQ0FOTkVEIGJlY2F1c2UgdGhlIGJ1aWxkLXRpbWUgc2NhbiBjb3VsZCBub3QgcnVuIGFuZFxuICAvLyB0aGUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoIGBQTFVHSU5fQUxMT1dfVU5TQ0FOTkVEYCBpcyBvbiAod2l0aG91dCBpdCB0aGVcbiAgLy8gYnVpbGQgZmFpbHMgYElNQUdFX1NDQU5fVU5BVkFJTEFCTEVgKS4gYGRldGFpbHNgIGNhcnJ5IG5hbWUvdmVyc2lvbi9kaWdlc3QuXG4gICdwbHVnaW4uc2Nhbi5za2lwcGVkJyxcbiAgLy8gRml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncyB3ZXJlIEVYRU1QVEVEIGZyb20gdGhlIHBsYXRmb3JtIGZsb29yIGJ5IGFcbiAgLy8gYFBMVUdJTl9WVUxOX1dBSVZFUlNgIGVudHJ5LCBzbyBhIGJ1aWxkIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgZmFpbGVkXG4gIC8vIFBMVUdJTl9WVUxOX0dBVEUgd2FzIGFsbG93ZWQgdGhyb3VnaC4gVGhlIG90aGVyIGhhbGYgb2YgcGx1Z2luLnNjYW4uc2tpcHBlZDpcbiAgLy8gYm90aCBhcmUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoZXMgdGhhdCBjaGFuZ2UgYSBnYXRlJ3MgdmVyZGljdCwgYW5kIGEgbWV0cmljXG4gIC8vIGFuZCBhIGxvZyBsaW5lIGFyZSBub3QgYSBkdXJhYmxlIHJlY29yZCBvZiBvbmUuIGBkZXRhaWxzYCBjYXJyeVxuICAvLyBuYW1lL3ZlcnNpb24vZGlnZXN0LCBob3cgbWFueSBmaW5kaW5ncyB3ZXJlIHdhaXZlZCBhbmQgd2hpY2ggcGFja2FnZXMuXG4gICdwbHVnaW4udnVsbi53YWl2ZWQnLFxuICAvLyBQbHVnaW4gbGlmZWN5Y2xlIG11dGF0aW9ucyAoYXBpL3BsdWdpbiByb3V0ZSBoYW5kbGVycykg4oCUIHRoZSBkZXN0cnVjdGl2ZSAvXG4gIC8vIHB1Ymxpc2hpbmcgc3VyZmFjZSB0aGF0IGJ1aWxkcyBhbHJlYWR5IGF1ZGl0J3MgY291bnRlcnBhcnQ6IHJlZ2lzdHJ5IGRlbGV0ZSxcbiAgLy8gc291cmNlIHVwbG9hZCwgYW5kIGRlcGxveS10by1jbHVzdGVyLiBgdGFyZ2V0SWRgIGlzIHRoZSBwbHVnaW4gaWQuXG4gICdwbHVnaW4uZGVsZXRlJyxcbiAgJ3BsdWdpbi5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGx1Z2luIHRvbWJzdG9uZSBvblxuICAvLyBkZW1hbmQgKGZpbmFsaXplcyB3aGF0IHRoZSByZXRlbnRpb24gc3dlZXAgd291bGQgb3RoZXJ3aXNlIGRvIGxhdGVyKS5cbiAgJ3BsdWdpbi5wdXJnZScsXG4gICdwbHVnaW4udXBkYXRlJyxcbiAgJ3BsdWdpbi51cGxvYWQnLFxuICAncGx1Z2luLmRlcGxveScsXG4gIC8vIFBsdWdpbiBidWxrIG11dGF0aW9ucyAoYXBpL3BsdWdpbiBidWxrLXBsdWdpbiByb3V0ZSkgKyBETFEgcHVyZ2UgKGRyb3BzIGFsbFxuICAvLyBkZWFkLWxldHRlcmVkIGJ1aWxkIGpvYnMsIGNyb3NzLW9yZywgc3lzYWRtaW4pLiBgZGV0YWlsc2AgY2FycmllcyBjb3VudHMuXG4gICdwbHVnaW4uYnVsay51cGRhdGUnLFxuICAncGx1Z2luLmJ1bGsuZGVsZXRlJyxcbiAgJ3BsdWdpbi5kbHEucHVyZ2UnLFxuICAvLyBCdWlsZCByZS1ydW5zIGZyb20gdGhlIHF1ZXVlLXRyaWFnZSBzdXJmYWNlOiByZS1lbnF1ZXVlIGEgRkFJTEVEIGJ1aWxkXG4gIC8vIChgcGx1Z2luLmJ1aWxkLnJldHJ5YCkgb3IgYSBkZWFkLWxldHRlcmVkIG9uZSAoYHBsdWdpbi5kbHEucmVwbGF5YCkuIEJvdGhcbiAgLy8gcmUtcnVuIGFuIGltYWdlIGJ1aWxkICsgcGx1Z2luIHBlcnNpc3Qgb24gdGhlIGNhbGxlcidzIGF1dGhvcml0eSwgc28gdGhleVxuICAvLyBhcmUgYXVkaXRlZCBtdXRhdGlvbnM7IGBhZmZlY3RlZE9yZ0lkYCBjYXJyaWVzIHRoZSBqb2IncyBvd25pbmcgb3JnLlxuICAncGx1Z2luLmJ1aWxkLnJldHJ5JyxcbiAgJ3BsdWdpbi5kbHEucmVwbGF5JyxcbiAgLy8gUGlwZWxpbmUgbXV0YXRpb25zIOKAlCBlbWl0dGVkIGJ5IGFwaS9waXBlbGluZSdzIHJvdXRlIGhhbmRsZXJzXG4gIC8vIChjcmVhdGUvdXBkYXRlL2RlbGV0ZSArIENvZGVQaXBlbGluZSBleGVjdXRpb24gdHJpZ2dlci9jYW5jZWwpIGFuZFxuICAvLyBwb3N0ZWQgdG8gcGxhdGZvcm0ncyBgUE9TVCAvYXVkaXQvZXZlbnRzYCBpbmdlc3QuXG4gICdwaXBlbGluZS5jcmVhdGUnLFxuICAncGlwZWxpbmUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lLmRlbGV0ZScsXG4gICdwaXBlbGluZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGlwZWxpbmUgL1xuICAvLyBwaXBlbGluZV90ZW1wbGF0ZSB0b21ic3RvbmUgb24gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwXG4gIC8vIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuIGB0YXJnZXRJZGAgaXMgdGhlIHB1cmdlZCBpZC5cbiAgJ3BpcGVsaW5lLnB1cmdlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmNyZWF0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS51cGRhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUuZGVsZXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnJlc3RvcmUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUucHVyZ2UnLFxuICAncGlwZWxpbmUuZXhlY3V0aW9uLnN0YXJ0JyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5jYW5jZWwnLFxuICAvLyBDb2RlUGlwZWxpbmUgQVJOLXJlZ2lzdHJ5IGNvbmZpZyAoYXBpL3BpcGVsaW5lIHJlZ2lzdHJ5IHJvdXRlKSDigJQgcmVnaXN0ZXJpbmcgL1xuICAvLyBkZXJlZ2lzdGVyaW5nIHRoZSBleHRlcm5hbCBDb2RlUGlwZWxpbmUgdGhhdCBiYWNrcyBhIHBpcGVsaW5lIChkZXBsb3ktYWZmZWN0aW5nKS5cbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LnJlZ2lzdGVyJyxcbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LmRlcmVnaXN0ZXInLFxuICAvLyBRdW90YSBhZG1pbmlzdHJhdGlvbiAoYXBpL3F1b3RhKSDigJQgYSBzdXBlcmFkbWluIHJlc2V0dGluZyBhbiBvcmcncyB1c2FnZVxuICAvLyBjb3VudGVyIG9yIGVkaXRpbmcgaXRzIHRpZXIgbGltaXRzLiBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlIG9yZyBjaGFuZ2VkO1xuICAvLyBgZGV0YWlsc2AgY2FycmllcyB0aGUgcXVvdGFUeXBlICsgb2xkL25ldyB2YWx1ZS5cbiAgJ3F1b3RhLnJlc2V0JyxcbiAgJ3F1b3RhLmxpbWl0LnVwZGF0ZScsXG4gIC8vIEEgc3VwZXJhZG1pbiBkZWxldGluZyBhbiBvcmcncyBlbnRpcmUgcXVvdGEgZG9jdW1lbnQuXG4gICdxdW90YS5kZWxldGUnLFxuICAvLyBDb21wbGlhbmNlIGFkbWluaXN0cmF0aW9uIChhcGkvY29tcGxpYW5jZSkg4oCUIHRoZSBlbmZvcmNlbWVudC1wb3N0dXJlIHN1cmZhY2UuXG4gIC8vIEFwcHJvdmluZy9yZXZva2luZyBhbiBleGVtcHRpb24sIHRvZ2dsaW5nL2F1dGhvcmluZy9kZWxldGluZyBhIHJ1bGUsXG4gIC8vIGF1dGhvcmluZy9kZWxldGluZyBhIHBvbGljeSwgbWFuYWdpbmcgc2NhbiBzY2hlZHVsZXMsIGFwcGx5aW5nIGEgdGVtcGxhdGUsXG4gIC8vIG9yIGNhbmNlbGxpbmcgYSBydW5uaW5nIHNjYW4uIGB0YXJnZXRJZGAgaXMgdGhlIHJ1bGUvcG9saWN5L2V4ZW1wdGlvbi9zY2FuIGlkLlxuICAnY29tcGxpYW5jZS5leGVtcHRpb24uYXBwcm92ZScsXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZXZva2UnLFxuICAnY29tcGxpYW5jZS5ydWxlLnRvZ2dsZScsXG4gICdjb21wbGlhbmNlLnJ1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgaGFyZC1kZWxldGUgKFBVUkdFKSBvZiBhIHNvZnQtZGVsZXRlZCBydWxlL3BvbGljeSB0b21ic3RvbmUg4oCUXG4gIC8vIHRoZSBjYWxsZXItaW5pdGlhdGVkIGNvdW50ZXJwYXJ0IHRvIHRoZSByZXRlbnRpb24gc3dlZXAncyBhdXRvLXB1cmdlLiBEZXN0cm95c1xuICAvLyB0aGUgdG9tYnN0b25lIHBlcm1hbmVudGx5LCBzbyBpdCBjYXJyaWVzIHRoZSBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbC5cbiAgJ2NvbXBsaWFuY2UucnVsZS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5yZXN0b3JlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnB1cmdlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UudGVtcGxhdGUuYXBwbHknLFxuICAvLyBMYXVuY2hpbmcgYW4gb3JnLXdpZGUgcmUtZXZhbHVhdGlvbiAodGhlIGNvdW50ZXJwYXJ0IHRvIGAuY2FuY2VsYCkg4oCUIGl0XG4gIC8vIHBlcnNpc3RzIGEgc2NhbiBhbmQgY2FuIGJsb2NrIGVudGl0aWVzIHRoYXQgcGFzc2VkIGJlZm9yZS5cbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLmNhbmNlbCcsXG4gIC8vIFBlci1vcmcgY29tcGxpYW5jZSBub3RpZmljYXRpb24gc2V0dGluZ3M6IHJlY2lwaWVudHMgKyB0aGUgb3V0Ym91bmQgd2ViaG9va1xuICAvLyBVUkwvc2VjcmV0LiBCZWFyZXItZXF1aXZhbGVudCBjb25maWcgdGhhdCByZWRpcmVjdHMgdmlvbGF0aW9uIG5vdGljZXMsIHNvIGFcbiAgLy8gY2hhbmdlIGNhcnJpZXMgdGhlIGR1cmFibGUgdHJhaWwgKG5ldmVyIHRoZSBzZWNyZXQgaXRzZWxmKS5cbiAgJ2NvbXBsaWFuY2Uubm90aWZpY2F0aW9uLXByZWZlcmVuY2UudXBkYXRlJyxcbiAgLy8gSW1hZ2UtcmVnaXN0cnkgZGVzdHJ1Y3RpdmUgb3BzIChhcGkvaW1hZ2UtcmVnaXN0cnkpIOKAlCBnYXJiYWdlLWNvbGxlY3Rpb25cbiAgLy8gc3dlZXBzIGFuZCBleHBsaWNpdCBpbWFnZS90YWcgZGVsZXRlcy5cbiAgJ3JlZ2lzdHJ5LmdjJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLmRlbGV0ZScsXG4gIC8vIENyb3NzLXJlcG8gdGFnL2ltYWdlIGNvcHkgKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9hcGkvaW1hZ2VzL2NvcHkpLiBBXG4gIC8vIGNyb3NzLXRlbmFudCBjb3B5IG1vdmVzIGRhdGEgYWNyb3NzIGN1c3RvbWVyIGJvdW5kYXJpZXMsIHNvIGl0IG5lZWRzIHRoZVxuICAvLyBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbCDigJQgbm90IGp1c3QgdGhlIExva2kgb3BlcmF0b3IgbGluZS5cbiAgJ3JlZ2lzdHJ5LmltYWdlLmNvcHknLFxuICAvLyBBIHBsdWdpbiBpbWFnZSBzaWduZWQgKyBTQk9NLWF0dGVzdGVkIGJ5IHRoZSBwbGF0Zm9ybSdzIHBsdWdpbi1zaWduaW5nIGtleVxuICAvLyAoYXBpL2ltYWdlLXJlZ2lzdHJ5IFBPU1QgL2ludGVybmFsL3BsdWdpbi1zaWduYXR1cmVzLCBjYWxsZWQgYnkgdGhlIHBsdWdpblxuICAvLyBidWlsZCB3b3JrZXIpLiBUaGUga2V5IGlzIHdoYXQgc3ludGggdHJ1c3RzLCBzbyBldmVyeSB1c2UgaXMgb24gdGhlIHRyYWlsLlxuICAncmVnaXN0cnkuaW1hZ2Uuc2lnbicsXG4gIC8vIE1lc3NhZ2luZyAoYXBpL21lc3NhZ2UpIOKAlCBhZG1pbiBCUk9BRENBU1QgYW5ub3VuY2VtZW50cyArIGRlc3RydWN0aXZlXG4gIC8vIGRlbGV0ZXMuIDE6MSB1c2VyIG1lc3NhZ2VzIGFyZSBpbnRlbnRpb25hbGx5IE5PVCBhdWRpdGVkIChub2lzZSArIHRoZXkgd291bGRcbiAgLy8gcHVsbCBwcml2YXRlIGNvbnRlbnQgaW50byB0aGUgdHJhaWwpLiBgZGV0YWlsc2AgY2FycnkgbWV0YWRhdGEgb25seVxuICAvLyAoc3ViamVjdC90eXBlL3Njb3BlKSwgTkVWRVIgbWVzc2FnZSBib2R5IGNvbnRlbnQuXG4gICdtZXNzYWdlLmFubm91bmNlbWVudC5jcmVhdGUnLFxuICAnbWVzc2FnZS5kZWxldGUnLFxuICAnbWVzc2FnZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIG9uLWRlbWFuZCBQVVJHRSAocGVybWFuZW50IGhhcmQtZGVsZXRlKSBvZiBhbiBhbHJlYWR5LXNvZnQtZGVsZXRlZFxuICAvLyBtZXNzYWdlIHRvbWJzdG9uZSDigJQgdGhlIGRlc3RydWN0aXZlIGZpbmFsaXplciB0aGUgcmV0ZW50aW9uIHN3ZWVwIHdvdWxkXG4gIC8vIG90aGVyd2lzZSBwZXJmb3JtIGF0IHRoZSBwdXJnZSBkZWFkbGluZS4gYGRldGFpbHNgIGNhcnJ5IG1ldGFkYXRhIG9ubHkuXG4gICdtZXNzYWdlLnB1cmdlJyxcbiAgLy8gQmlsbGluZyAoYXBpL2JpbGxpbmcpIOKAlCBzdWJzY3JpcHRpb24gKyBlbnRpdGxlbWVudCBtdXRhdGlvbnMsIG1pcnJvcmVkIHRvIHRoZVxuICAvLyBjZW50cmFsIGF1ZGl0IHRyYWlsICh0aGVzZSBhbHNvIHdyaXRlIHRvIHRoZSBzZXJ2aWNlLWxvY2FsIGJpbGxpbmdfZXZlbnRzXG4gIC8vIGNvbGxlY3Rpb24pLiBgZGV0YWlsc2AgY2FycnkgcGxhbi90aWVyL2FkZG9uIGlkcyBvbmx5IOKAlCBuZXZlciBjYXJkL3BheW1lbnRcbiAgLy8gc2VjcmV0cyBvciBhbiBBV1MgYWNjb3VudCBpZC5cbiAgLy8gU3Vic2NyaXB0aW9uIGxpZmVjeWNsZSBhIENVU1RPTUVSIGRyaXZlcyAodGhlIGFkbWluIGNvdW50ZXJwYXJ0IGlzXG4gIC8vIGBiaWxsaW5nLnRpZXIub3ZlcnJpZGVgKTogc2VsZi1zZXJ2ZSBjcmVhdGUgKGRpcmVjdCBvciBNYXJrZXRwbGFjZSBjbGFpbSksXG4gIC8vIHBsYW4vaW50ZXJ2YWwgY2hhbmdlLCBjYW5jZWwtYXQtcGVyaW9kLWVuZCwgdW5kby1jYW5jZWwsIGNhc2NhZGUgZGVsZXRlLlxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLnVwZGF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5yZWFjdGl2YXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNhbmNlbCcsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5kZWxldGUnLFxuICAnYmlsbGluZy50aWVyLm92ZXJyaWRlJyxcbiAgLy8gT3BlcmF0b3Itb25seSByZXNlZWQgb2YgdGhlIGludm9pY2UgbGVkZ2VyIGZyb20gdGhlIHBheW1lbnQgcHJvdmlkZXInc1xuICAvLyBoaXN0b3J5IChQT1NUIC9iaWxsaW5nL2FkbWluL2JhY2tmaWxsKSDigJQgbXV0YXRlcyBmaW5hbmNlIGRhdGEgZmxlZXQtd2lkZS5cbiAgJ2JpbGxpbmcuYWRkb24uYWRkJyxcbiAgJ2JpbGxpbmcuYWRkb24ucmVtb3ZlJyxcbiAgLy8gU3lzdGVtLWluaXRpYXRlZCByZW1vdmFsIG9mIGEgdGllci1pbmNsdWRlZCBhZGQtb24gb24gYSBwbGFuIHVwZ3JhZGUgKHRoZVxuICAvLyBhY2NvdW50J3MgbmV3IHRpZXIgbm93IGJ1bmRsZXMgdGhlIGZlYXR1cmUpIOKAlCBkaXN0aW5jdCBmcm9tIGEgdXNlci1pbml0aWF0ZWRcbiAgLy8gYHJlbW92ZWAgc28gZmluYW5jZSBjYW4gdGVsbCBhbiBhdXRvLXBydW5lIGZyb20gYSBjdXN0b21lciBhY3Rpb24uXG4gICdiaWxsaW5nLmFkZG9uLnBydW5lJyxcbiAgLy8gRGlzY291bnRzIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kKSDigJQgbWludC9pc3N1ZS9hcHBseS9yZW1vdmUvcmV2b2tlIG9mIGFcbiAgLy8gcHJpY2UgY291cG9uIG9yIHVzYWdlIGNyZWRpdC4gYGRldGFpbHNgIGNhcnJ5IHRoZSBkaXNjb3VudCBpZCArIGtpbmQvdmFsdWVcbiAgLy8gb25seSwgbmV2ZXIgdGhlIG9wYXF1ZSB0b2tlbiBvciBzaWduaW5nIGtleS5cbiAgJ2JpbGxpbmcuZGlzY291bnQuZ2VuZXJhdGUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5pc3N1ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50LmFwcGx5JyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmVtb3ZlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQucmV2b2tlJyxcbiAgLy8gUHJvbW90aW9ucyAoZG9jcy9iaWxsaW5nLWRpc2NvdW50cy5tZCNwcm9tb3Rpb25zKSDigJQgcnVsZS1kcml2ZW4gYXV0by1ncmFudFxuICAvLyBjYW1wYWlnbnMuIGBkZXRhaWxzYCBjYXJyeSB0aGUgcHJvbW90aW9uIGlkICsgY2VudHMvZXZlbnQgb25seS5cbiAgJ2JpbGxpbmcucHJvbW90aW9uLmNyZWF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi51cGRhdGUnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24ucmV2b2tlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmdyYW50JyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLmFjdGl2YXRlJyxcbiAgLy8gVXNhZ2UtY3JlZGl0IHJlYWxpemF0aW9uIOKAlCBhIGN1c3RvbWVyL2NvbXBsaWFuY2UtdmlzaWJsZSByZWNvcmQgb2YgY3JlZGl0XG4gIC8vIG1vdmVtZW50OiBgY29uc3VtZWRgIChNYXJrZXRwbGFjZSBtZXRlcmVkIGRyYXdkb3duKSwgYGV4aGF1c3RlZGAgKGJhbGFuY2UgaGl0XG4gIC8vIHplcm8pLCBhbmQgYSBjb21ibyBlbmRpbmcuIGBkZXRhaWxzYCBjYXJyeSBjZW50cy9pZHMgb25seSwgbm8gcGF5bWVudCBzZWNyZXRzLlxuICAnYmlsbGluZy5jcmVkaXQuY29uc3VtZWQnLFxuICAnYmlsbGluZy5jcmVkaXQuZXhoYXVzdGVkJyxcbiAgJ2JpbGxpbmcuY29tYm8uZXhwaXJlZCcsXG4gIC8vIFJlcG9ydGluZyAoYXBpL3JlcG9ydGluZykg4oCUIHRoZSB0aHJlZSByZXBvcnRpbmcgbXV0YXRpb25zIHdob3NlIGVmZmVjdFxuICAvLyBvdXRsaXZlcyBhIHJlcXVlc3QgbG9nOiB0aGUgcGVyLW9yZyBjb3JyZWxhdGlvbi13aW5kb3cgY29uZmlnIHdyaXRlLCBhXG4gIC8vIHBvc3QtZGVwbG95IG91dGNvbWUgbWFya2VyIChpdCBtb3ZlcyB0aGUgb3JnJ3MgRE9SQSBDRlIvTVRUUiksIGFuZCB0aGVcbiAgLy8gaW5ib3VuZCBiaWxsaW5n4oaScmVwb3J0aW5nIHJldGVudGlvbi1lbnRpdGxlbWVudCBzeW5jIChhIHJldGVudGlvbiBjdXQgaXMgYVxuICAvLyBkYXRhLWRlc3Ryb3lpbmcgY2hhbmdlIGFwcGxpZWQgYnkgdGhlIG5leHQgc3dlZXApLiBgZGV0YWlsc2AgY2FycnkgdGhlXG4gIC8vIHNldHRpbmdzL291dGNvbWUgdmFsdWVzIG9ubHkuXG4gICdyZXBvcnRpbmcuc2V0dGluZ3MudXBkYXRlJyxcbiAgJ3JlcG9ydGluZy5kZXBsb3ltZW50Lm91dGNvbWUnLFxuICAncmVwb3J0aW5nLnJldGVudGlvbi5zeW5jJyxcbiAgLy8gU3Rha2Vob2xkZXIgcmVwb3J0cyDigJQgdGhlIGFkZC1vbidzIGF1dGhvcmluZyBhbmQgUFVCTElTSElORyBzdXJmYWNlLiBQdWJsaXNoaW5nXG4gIC8vIGlzIHRoZSBtb21lbnQgaW50ZXJuYWwgZGVsaXZlcnkgbnVtYmVycyBsZWF2ZSB0aGUgcGxhdGZvcm0sIHNvIHRoZSB3aG9sZVxuICAvLyBvdXR3YXJkIHBhdGggaXMgYXVkaXRhYmxlOiB3aGljaCByZXBvcnQsIHdoaWNoIHBlcmlvZCdzIGZyb3plbiBzbmFwc2hvdCxcbiAgLy8gd2hpY2ggdmVyc2lvbiwgYW5kIHdobyBsZXQgaXQgb3V0LiBgbGluay5jcmVhdGVkYCAvIGBsaW5rLnJldm9rZWRgIGNvdmVyIHRoZVxuICAvLyBVUkxzIHRoYXQgbGV0IHNvbWVvbmUgd2l0aG91dCBhbiBhY2NvdW50IHJlYWQgaXQ7IGByZWNpcGllbnQuYWRkZWRgIC9cbiAgLy8gYHJlY2lwaWVudC5yZW1vdmVkYCBjb3ZlciB3aG8gaXMgb24gdGhlIGRpc3RyaWJ1dGlvbiBsaXN0LCB3aGljaCBpcyB0aGUgb3RoZXJcbiAgLy8gd2F5IGRhdGEgcmVhY2hlcyBhIHBlcnNvbi4gYG93bmVyc2hpcC50cmFuc2ZlcmAgaXMgYSBwcml2aWxlZ2UgbW92ZTogYVxuICAvLyBzY2hlZHVsZWQgcnVuIGlzIGF1dGhvcml6ZWQgYXMgaXRzIE9XTkVSLCBzbyBoYW5kaW5nIGEgZGVmaW5pdGlvbiBvdmVyIGhhbmRzXG4gIC8vIG92ZXIgd2hvc2UgYWNjZXNzIHRoZSBudW1iZXJzIGFyZSBjb21wdXRlZCB3aXRoLlxuICAvL1xuICAvLyBEZWxpYmVyYXRlbHkgTk9UIGF1ZGl0ZWQ6IHJlYWRpbmcgYSBzaGFyZWQgcmVwb3J0LiBUaGUgYWNjZXNzIGlzIGxvZ2dlZCBhbmRcbiAgLy8gY291bnRlZCBwZXIgbGluaywgYnV0IGl0IGlzIGFuIFVOQVVUSEVOVElDQVRFRCwgZXh0ZXJuYWxseS10cmlnZ2VyZWQgZXZlbnQg4oCUXG4gIC8vIGFueW9uZSBob2xkaW5nIGEgVVJMIGNvdWxkIG90aGVyd2lzZSB3cml0ZSB1bmJvdW5kZWQgcm93cyBpbnRvIHRoZSBvcmcncyBhdWRpdFxuICAvLyB0cmFpbCwgd2hpY2ggdHVybnMgYSByZWFkIGludG8gYSB3YXkgdG8gYnVyeSB0aGUgZW50cmllcyB0aGF0IG1hdHRlci5cbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi5jcmVhdGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLnVwZGF0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24uZGVsZXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQub3duZXJzaGlwLnRyYW5zZmVyJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucHVibGlzaGVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVwdWJsaXNoZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5saW5rLmNyZWF0ZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5saW5rLnJldm9rZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQuYWRkZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZWNpcGllbnQucmVtb3ZlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnBvbGljeS51cGRhdGUnLFxuICAvLyBBIGRlZmluaXRpb24gU1RPUFBFRCBwcm9kdWNpbmcgcmVwb3J0cyB3aXRob3V0IGFueW9uZSBhc2tpbmcgaXQgdG86IHRoZSBvd25lclxuICAvLyB3YXMgZGVhY3RpdmF0ZWQgb3IgcmVtb3ZlZCwgb3IgbG9zdCB0aGUgcGVybWlzc2lvbiBhIHJ1biBpcyBhdXRob3JpemVkIHdpdGguXG4gIC8vIFJlY29yZGVkIGJlY2F1c2UgdGhlIGVmZmVjdCBpcyBzaWxlbnQg4oCUIGEgbWFuYWdlciBmaW5kcyBvdXQgYnkgbm90IHJlY2VpdmluZ1xuICAvLyB0aGUgcmVwb3J0IOKAlCBzbyB0aGUgdHJhaWwgaGFzIHRvIHNheSB3aGljaCByZXBvcnRzIHN0b3BwZWQgYW5kIHdoeS5cbiAgJ3JlcG9ydGluZy5yZXBvcnQucGF1c2VkJyxcbiAgLy8g4oCmYW5kIHN0YXJ0ZWQgYWdhaW4uIEl0cyBvd24gYWN0aW9uIHJhdGhlciB0aGFuIGEgZGV0YWlsIG9uIHRoZSBwYXVzZSwgYmVjYXVzZSB0aGVcbiAgLy8gcXVlc3Rpb24gYSByZXZpZXdlciBhc2tzIGlzIFwid2FzIHRoaXMgYWNjb3VudCdzIHJlcG9ydGluZyBvZmYgYmV0d2VlbiB0aGVzZSB0d29cbiAgLy8gZGF0ZXNcIiwgYW5kIGFuc3dlcmluZyBpdCBmcm9tIGEgc2luZ2xlIGFjdGlvbidzIGRldGFpbHMgbWVhbnMgcmVhZGluZyBldmVyeSByb3cuXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlc3VtZWQnLFxuICAvLyBEZW5pZWQgYXV0aG9yaXphdGlvbiBhdHRlbXB0IOKAlCBlbWl0dGVkIGJlc3QtZWZmb3J0IGJ5IHRoZSBzaGFyZWRcbiAgLy8gYHJlcXVpcmVQZXJtaXNzaW9uYCAvIGByZXF1aXJlU3lzdGVtQWRtaW5gIGdhdGUgd2hlbiBhIHN0YXRlLWNoYW5naW5nXG4gIC8vIChub24tR0VUKSByZXF1ZXN0IGlzIHJlamVjdGVkLCBzbyBwcm9iaW5nL2VzY2FsYXRpb24gYXR0ZW1wdHMgYXJlIHZpc2libGVcbiAgLy8gcmF0aGVyIHRoYW4gaW52aXNpYmxlLiBgZGV0YWlsc2AgY2FycmllcyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbiArIHBhdGg7XG4gIC8vIGBvdXRjb21lYCBpcyAnZmFpbHVyZScuXG4gICdhdXRoei5kZW5pZWQnLFxuICAvLyBcIkFza1wiIGFzc2lzdGFudCBhY3Rpdml0eSDigJQgdmlzaWJpbGl0eSBpbnRvIHdoYXQgdGhlIGFzc2lzdGFudCBkaWQgb24gYSB1c2VyJ3NcbiAgLy8gYmVoYWxmLiBgYXNrLnF1ZXJ5YCBpcyBhIHJlYWQtb25seSBob3ctdG8gdHVybjsgYGFzay5hZ2VudC50dXJuYCBpcyBhIHRvb2wtY2FsbGluZ1xuICAvLyB0dXJuLiBgZGV0YWlsc2AgY2FycnkgU0FGRSBNRVRBREFUQSBPTkxZICh0b29scyB1c2VkLCBwcm9wb3NhbCBraW5kcywgcXVlcnlcbiAgLy8gbGVuZ3RoLCBvdXRjb21lKSwgbmV2ZXIgdGhlIHJhdyBxdWVyeSB0ZXh0LlxuICAnYXNrLnF1ZXJ5JyxcbiAgJ2Fzay5hZ2VudC50dXJuJyxcbiAgLy8gQSByZWFkZXIgcmF0aW5nIGFuIGFuc3dlciwgb3IgYSBoZWxwIHNlYXJjaCB0aGF0IGZvdW5kIG5vdGhpbmcuIFRoZSBPTkxZXG4gIC8vIHNpZ25hbCBmb3Igd2hpY2ggZG9jcyB0aGUgYXNzaXN0YW50IGFuc3dlcnMgYmFkbHkgZnJvbSDigJQgdGhlIHR1cm4gaXRzZWxmXG4gIC8vIGNhbm5vdCB0ZWxsIGEgZ29vZCBhbnN3ZXIgZnJvbSBhIGNvbmZpZGVudCB3cm9uZyBvbmUuIGBkZXRhaWxzYCBjYXJyeSB0aGVcbiAgLy8gcmF0aW5nIGFuZCB0aGUgRE9DIElEUyBjaXRlZCAoYGF1dGhlbnRpY2F0aW9uLm1kYCksIG5ldmVyIHRoZSBxdWVzdGlvbjogdGhlXG4gIC8vIGRvYyBpcyB3aGF0IGdldHMgZml4ZWQsIGFuZCBpdCBpcyBub3QgdXNlci1lbnRlcmVkIHRleHQuXG4gICdhc2suZmVlZGJhY2snLFxuICAvLyBQbHVnaW4gZWNvc3lzdGVtIChkb2NzL3J1bmJvb2tzL2Vjb3N5c3RlbS1tb2RlcmF0aW9uLm1kKS4gR292ZXJuYW5jZSBhY3Rpb25zXG4gIC8vIGFyZSByZWNvcmRlZCB3aXRoIGBvcmdJZGAgPSB0aGUgc3lzdGVtIG9yZzsgYGFmZmVjdGVkT3JnSWRgIGlzIHRoZVxuICAvLyBwdWJsaXNoZXIncyBvcmcgKGxpc3RpbmcvdmVyc2lvbi9yZXZpZXcvYWR2aXNvcnkvcHVibGlzaGVyIG1vZGVyYXRpb24pIG9yXG4gIC8vIHRoZSBpbnN0YWxsaW5nIG9yZyAoaW5zdGFsbHMgKyBwb2xpY3kpLiBBbm9ueW1vdXMgc3VibWlzc2lvbnMgdXNlIHRoZVxuICAvLyBgQU5PTllNT1VTX0FDVE9SX0lEYCBhY3RvciB3aXRoIGBkZXRhaWxzLnN1Ym1pc3Npb25JZGAuIGBkZXRhaWxzYCBjYXJyeSBpZHMsXG4gIC8vIHZlcnNpb25zLCBkaWdlc3RzLCB0aWVyLCBzdGF0ZSBhbmQgcmVhc29uIGNvZGVzIG9ubHkg4oCUIG5ldmVyIHJldmlldyBib2RpZXMsXG4gIC8vIFJFQURNRSBjb250ZW50LCBzZWNyZXRzIG9yIGVtYWlscy5cbiAgLy8gUHVibGlzaGVycy5cbiAgJ3B1Ymxpc2hlci5jcmVhdGUnLFxuICAncHVibGlzaGVyLnVwZGF0ZScsXG4gICdwdWJsaXNoZXIudGVybXMuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudmVyaWZ5LmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZWplY3QnLFxuICAncHVibGlzaGVyLnRpZXIuY2hhbmdlJyxcbiAgJ3B1Ymxpc2hlci5zdXNwZW5kJyxcbiAgJ3B1Ymxpc2hlci51bnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLnJlcXVlc3QnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLmFjY2VwdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuZGVjbGluZScsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVqZWN0JyxcbiAgJ3B1Ymxpc2hlci5wcm9maWxlLWNoYW5nZS5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci5wcm9maWxlLWNoYW5nZS5yZWplY3QnLFxuICAvLyBQdWJsaXNoIHJlcXVlc3RzICh0ZW5hbnQg4oaSIHN5c3RlbSBvcmcpLiBgZGV0YWlscy5raW5kYCBuYW1lcyB0aGUgcmVxdWVzdC5cbiAgJ3BsdWdpbi5yZXF1ZXN0LnN1Ym1pdCcsXG4gICdwbHVnaW4ucmVxdWVzdC53aXRoZHJhdycsXG4gICdwbHVnaW4ucmVxdWVzdC5hcHByb3ZlJyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LnNlY29uZC1hcHByb3ZlJyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LnJlamVjdCcsXG4gICdwbHVnaW4ucmVxdWVzdC5hdXRvLWFwcHJvdmUnLFxuICAvLyBMaXN0aW5ncyBhbmQgdmVyc2lvbnMgKHN5c3RlbSBvcmcsIGV4Y2VwdCB0aGUgdGVuYW50IHBhdXNlKS5cbiAgJ3BsdWdpbi5saXN0aW5nLnB1Ymxpc2gnLFxuICAncGx1Z2luLmxpc3RpbmcudW5saXN0JyxcbiAgJ3BsdWdpbi5saXN0aW5nLnVwZGF0ZScsXG4gICdwbHVnaW4ubGlzdGluZy5zdGF0ZS5jaGFuZ2UnLFxuICAncGx1Z2luLmxpc3RpbmcucGF1c2UnLFxuICAncGx1Z2luLmxpc3RpbmcudW5wYXVzZScsXG4gICdwbHVnaW4udmVyc2lvbi5wYXVzZScsXG4gICdwbHVnaW4udmVyc2lvbi55YW5rJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnVueWFuaycsXG4gICdwbHVnaW4udmVyc2lvbi5kZXByZWNhdGUnLFxuICAncGx1Z2luLmNvbGxlY3Rpb24udXBkYXRlJyxcbiAgLy8gRWNvc3lzdGVtIGNvbmZpZ3VyYXRpb24gKHN5c3RlbSBvcmcpLlxuICAnZWNvc3lzdGVtLmF1dG8tYXBwcm92YWwtcnVsZS5jcmVhdGUnLFxuICAnZWNvc3lzdGVtLmF1dG8tYXBwcm92YWwtcnVsZS51cGRhdGUnLFxuICAnZWNvc3lzdGVtLmF1dG8tYXBwcm92YWwtcnVsZS5kZWxldGUnLFxuICAnZWNvc3lzdGVtLnJlc2VydmVkLW5hbWUudXBkYXRlJyxcbiAgJ2Vjb3N5c3RlbS5zbGEudXBkYXRlJyxcbiAgLy8gUHVibGljIHJlZ2lzdHJ5IG5hbWVzcGFjZSAoYHB1YmxpYy8qYCk6IGNvcHkgKyBzaWduICsgYXR0ZXN0IG9uIHB1Ymxpc2gsXG4gIC8vIHRoZSB0aWVyLWNoYW5nZS9zdXNwZW5zaW9uIHJlLXNpZ24gam9iLCB0YWcgcmVtb3ZhbCBvbiB5YW5rL3Rha2Vkb3duLCBhbmRcbiAgLy8gdGhlIHJldGVudGlvbiBzd2VlcC5cbiAgJ3JlZ2lzdHJ5LmltYWdlLnB1Ymxpc2gnLFxuICAncmVnaXN0cnkuaW1hZ2UucmVzaWduJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLnlhbmsnLFxuICAncmVnaXN0cnkuaW1hZ2UuZ2MnLFxuICAvLyBJbnN0YWxscyBhbmQgdGhlIGluc3RhbGxpbmcgb3JnJ3MgY29uc3VtcHRpb24gcG9saWN5IChvcmctbG9jYWwpLlxuICAncGx1Z2luLmluc3RhbGwucmVxdWVzdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5hcHByb3ZlJyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmRlbnknLFxuICAncGx1Z2luLmluc3RhbGwuY3JlYXRlJyxcbiAgJ3BsdWdpbi5pbnN0YWxsLnVwZ3JhZGUnLFxuICAvLyBBIG1lbWJlcidzIHJlcXVlc3QgdG8gY2hhbmdlIGFuIGluc3RhbGwgcGFzdCB3aGF0IHRoZXkgbWF5IGRvIGFsb25lLCBhbmQgaXRzIGRlY2lzaW9uLlxuICAncGx1Z2luLmluc3RhbGwuY2hhbmdlLXJlcXVlc3QnLFxuICAncGx1Z2luLmluc3RhbGwuY2hhbmdlLWFwcHJvdmUnLFxuICAncGx1Z2luLmluc3RhbGwuY2hhbmdlLXJlamVjdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5yZW1vdmUnLFxuICAnb3JnLnBsdWdpbi1pbnN0YWxsLXBvbGljeS51cGRhdGUnLFxuICAvLyBBbiB1cGxvYWQgUkVGVVNFRCBiZWNhdXNlIGl0cyBuYW1lIHdvdWxkIG92ZXJyaWRlIHNvbWV0aGluZyB0aGUgb3JnIGFscmVhZHlcbiAgLy8gcmVzb2x2ZXMg4oCUIGEgbGlzdGluZywgb3IgYSB0ZWFtJ3MgcGFyZW50LW9yZyBwbHVnaW4g4oCUIGFuZCB0aGUgY29uc3VtcHRpb25cbiAgLy8gcG9saWN5IHNheXMgYHNoYWRvd2luZzogZGVueWAuIEF1ZGl0ZWQgYmVjYXVzZSBhIHJlZnVzYWwgb3RoZXJ3aXNlIHJldHVybnNcbiAgLy8gYW4gZXJyb3IgdG8gdGhlIGNhbGxlciBhbmQgbGVhdmVzIG5vdGhpbmcgYmVoaW5kOiBhbiBhdHRlbXB0IHRvIGRlZmluZVxuICAvLyBgdHJpdnlgIG92ZXIgdGhlIE9mZmljaWFsIHNjYW5uZXIgaXMgZXhhY3RseSB0aGUgdGhpbmcgc29tZW9uZSBzaG91bGQgYmVcbiAgLy8gYWJsZSB0byBmaW5kIGFmdGVyd2FyZHMuIGBkZXRhaWxzYCBjYXJyeSB0aGUgbmFtZSBhbmQgd2hhdCBpdCB3b3VsZCBoYXZlXG4gIC8vIG92ZXJyaWRkZW4uXG4gICdwbHVnaW4uc2hhZG93aW5nLmRlbmllZCcsXG4gIC8vIFJldmlld3MgYW5kIHJlcGxpZXMuXG4gICdwbHVnaW4ucmV2aWV3LmNyZWF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnVwZGF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LmRlbGV0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcG9ydCcsXG4gICdwbHVnaW4ucmV2aWV3LmhvbGQnLFxuICAncGx1Z2luLnJldmlldy5yZWxlYXNlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVtb3ZlJyxcbiAgJ3BsdWdpbi5yZXZpZXcuYW5vbnltaXplJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkudXBkYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuZGVsZXRlJyxcbiAgLy8gQW5vbnltb3VzIHN1Ym1pc3Npb25zLlxuICAncGx1Z2luLnN1Ym1pc3Npb24uY3JlYXRlJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLnZlcmlmeScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5nYXRlLWZhaWwnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uYXBwcm92ZScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5yZWplY3QnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uY2xhaW0nLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uZXhwaXJlJyxcbiAgLy8gU2VjdXJpdHkgYWR2aXNvcmllcyAocHVibGlzaC93aXRoZHJhdyBhcmUgc3lzdGVtLW9yZyBvbmx5OyB1cGRhdGUgPSBhXG4gIC8vIG1vZGVyYXRvciBlZGl0aW5nIGEgZHJhZnQgYmVmb3JlIGl0IGlzIHB1Ymxpc2hlZCkuXG4gICdwbHVnaW4uYWR2aXNvcnkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS51cGRhdGUnLFxuICAncGx1Z2luLmFkdmlzb3J5LnB1Ymxpc2gnLFxuICAncGx1Z2luLmFkdmlzb3J5LndpdGhkcmF3JyxcbiAgLy8gUGVyLW9yZyBwbHVnaW4gc2VjdXJpdHkgbm90aWZpY2F0aW9ucyAocGx1Z2luIHNjYW4gZ2F0ZXMpOiB0aGUgc2V0dGluZ3NcbiAgLy8gKHJlY2lwaWVudHMsIGRpZ2VzdCwgd2ViaG9vaywgZXh0ZXJuYWwgYWRkcmVzcyDigJQgY2hhbmdlZCBmaWVsZCBuYW1lcyBhbmRcbiAgLy8gdGhlIHdlYmhvb2sgaG9zdCBvbmx5LCBuZXZlciB0aGUgc2VjcmV0IG9yIHRoZSBhZGRyZXNzKSwgYW4gZXh0ZXJuYWxcbiAgLy8gYWRkcmVzcyBjb25maXJtZWQgdGhyb3VnaCBpdHMgZW1haWxlZCBzaW5nbGUtdXNlIGxpbmssIGFuZCBhIHRlc3Qgc2VuZC5cbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLnVwZGF0ZScsXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy5leHRlcm5hbF9lbWFpbC52ZXJpZnknLFxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMudGVzdCcsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZW1vdGVBdWRpdEFjdGlvbiA9IHR5cGVvZiBSRU1PVEVfQVVESVRfQUNUSU9OU1tudW1iZXJdO1xuXG4vKiogV2hldGhlciBgdmFsdWVgIGlzIGFuIGFjdGlvbiBhIHJlbW90ZSBzZXJ2aWNlIG1heSBlbWl0ICh0aGUgaW5nZXN0IGFsbG93LWxpc3QpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlQXVkaXRBY3Rpb24odmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFJlbW90ZUF1ZGl0QWN0aW9uIHtcbiAgcmV0dXJuIChSRU1PVEVfQVVESVRfQUNUSU9OUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuIl19
573
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWF1ZGl0LWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVtb3RlLWF1ZGl0LWFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7OztHQU9HO0FBR0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsc0JBQXNCO0lBQ3RCLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLHFCQUFxQjtJQUNyQix1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsa0VBQWtFO0lBQ2xFLHlFQUF5RTtJQUN6RSxvQkFBb0I7SUFDcEIsMkVBQTJFO0lBQzNFLDZFQUE2RTtJQUM3RSxzRUFBc0U7SUFDdEUsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSx1RUFBdUU7SUFDdkUscUNBQXFDO0lBQ3JDLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxxRUFBcUU7SUFDckUsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGVBQWU7SUFDZiw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGdFQUFnRTtJQUNoRSxxRUFBcUU7SUFDckUsb0RBQW9EO0lBQ3BELGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixtRUFBbUU7SUFDbkUsNEVBQTRFO0lBQzVFLDBEQUEwRDtJQUMxRCxnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLHlCQUF5QjtJQUN6QiwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLGlGQUFpRjtJQUNqRixvRkFBb0Y7SUFDcEYsNEJBQTRCO0lBQzVCLDhCQUE4QjtJQUM5QiwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQzFFLG1EQUFtRDtJQUNuRCxhQUFhO0lBQ2Isb0JBQW9CO0lBQ3BCLHdEQUF3RDtJQUN4RCxjQUFjO0lBQ2QsOERBQThEO0lBQzlELDREQUE0RDtJQUM1RCw4QkFBOEI7SUFDOUIsZ0ZBQWdGO0lBQ2hGLHVFQUF1RTtJQUN2RSw2RUFBNkU7SUFDN0UsaUZBQWlGO0lBQ2pGLDhCQUE4QjtJQUM5Qiw2QkFBNkI7SUFDN0IsNkVBQTZFO0lBQzdFLG1FQUFtRTtJQUNuRSx3REFBd0Q7SUFDeEQsOEJBQThCO0lBQzlCLDZCQUE2QjtJQUM3Qix3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIseUJBQXlCO0lBQ3pCLGlGQUFpRjtJQUNqRixpRkFBaUY7SUFDakYsOEVBQThFO0lBQzlFLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLGlDQUFpQztJQUNqQyxpQ0FBaUM7SUFDakMsaUNBQWlDO0lBQ2pDLDJCQUEyQjtJQUMzQiwwRUFBMEU7SUFDMUUsNkRBQTZEO0lBQzdELHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsMEVBQTBFO0lBQzFFLGlGQUFpRjtJQUNqRiw2RUFBNkU7SUFDN0UsMEJBQTBCO0lBQzFCLG9FQUFvRTtJQUNwRSwrREFBK0Q7SUFDL0Qsd0NBQXdDO0lBQ3hDLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsOERBQThEO0lBQzlELDJDQUEyQztJQUMzQywyRUFBMkU7SUFDM0UseUNBQXlDO0lBQ3pDLGFBQWE7SUFDYix1QkFBdUI7SUFDdkIsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSxtRUFBbUU7SUFDbkUscUJBQXFCO0lBQ3JCLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLHFCQUFxQjtJQUNyQix3RUFBd0U7SUFDeEUsNkVBQTZFO0lBQzdFLHdFQUF3RTtJQUN4RSxtQ0FBbUM7SUFDbkMsc0JBQXNCO0lBQ3RCLDBEQUEwRDtJQUMxRCxxRUFBcUU7SUFDckUscUNBQXFDO0lBQ3JDLHdFQUF3RTtJQUN4RSwrRUFBK0U7SUFDL0Usc0VBQXNFO0lBQ3RFLG9EQUFvRDtJQUNwRCw2QkFBNkI7SUFDN0IsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQiw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLDBFQUEwRTtJQUMxRSxlQUFlO0lBQ2YsMEVBQTBFO0lBQzFFLHlFQUF5RTtJQUN6RSxnQkFBZ0I7SUFDaEIsNkVBQTZFO0lBQzdFLHdFQUF3RTtJQUN4RSwyQkFBMkI7SUFDM0IsMkVBQTJFO0lBQzNFLHdFQUF3RTtJQUN4RSx5QkFBeUI7SUFDekIseUVBQXlFO0lBQ3pFLDhFQUE4RTtJQUM5RSxtQkFBbUI7SUFDbkIsMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUN4RSwwRUFBMEU7SUFDMUUsMEVBQTBFO0lBQzFFLDBEQUEwRDtJQUMxRCxFQUFFO0lBQ0YsNEVBQTRFO0lBQzVFLHFFQUFxRTtJQUNyRSw4RUFBOEU7SUFDOUUsMEVBQTBFO0lBQzFFLG9FQUFvRTtJQUNwRSxFQUFFO0lBQ0YsOEVBQThFO0lBQzlFLDhEQUE4RDtJQUM5RCxtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLHNFQUFzRTtJQUN0RSx3RUFBd0U7SUFDeEUsc0VBQXNFO0lBQ3RFLDZFQUE2RTtJQUM3RSx3REFBd0Q7SUFDeEQscUJBQXFCO0lBQ3JCLHVCQUF1QjtJQUN2QixxQkFBcUI7SUFDckIsdUJBQXVCO0lBQ3ZCLHNFQUFzRTtJQUN0RSw0RUFBNEU7SUFDNUUsOEVBQThFO0lBQzlFLHlFQUF5RTtJQUN6RSw0RUFBNEU7SUFDNUUsZ0VBQWdFO0lBQ2hFLEVBQUU7SUFDRiw0RUFBNEU7SUFDNUUsOEVBQThFO0lBQzlFLCtCQUErQjtJQUMvQiw2QkFBNkI7SUFDN0IsMEJBQTBCO0lBQzFCLHVFQUF1RTtJQUN2RSxvRUFBb0U7SUFDcEUscUJBQXFCO0lBQ3JCLDRFQUE0RTtJQUM1RSw4RUFBOEU7SUFDOUUseUVBQXlFO0lBQ3pFLHNCQUFzQjtJQUN0Qiw0RUFBNEU7SUFDNUUsOEVBQThFO0lBQzlFLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsNkRBQTZEO0lBQzdELDJCQUEyQjtJQUMzQix3QkFBd0I7SUFDeEIsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSx1RUFBdUU7SUFDdkUsMkNBQTJDO0lBQzNDLHlCQUF5QjtJQUN6QiwyQkFBMkI7SUFDM0IseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsMkVBQTJFO0lBQzNFLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLHNCQUFzQjtJQUN0QixnRkFBZ0Y7SUFDaEYsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSxnQ0FBZ0M7SUFDaEMscUVBQXFFO0lBQ3JFLDZFQUE2RTtJQUM3RSwyRUFBMkU7SUFDM0UsNkJBQTZCO0lBQzdCLDZCQUE2QjtJQUM3QixpQ0FBaUM7SUFDakMsNkJBQTZCO0lBQzdCLDZCQUE2QjtJQUM3Qix1QkFBdUI7SUFDdkIsMEVBQTBFO0lBQzFFLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsaUNBQWlDO0lBQ2pDLGdDQUFnQztJQUNoQyw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0Usd0NBQXdDO0lBQ3hDLGdDQUFnQztJQUNoQyx5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsNEVBQTRFO0lBQzVFLCtFQUErRTtJQUMvRSxxRUFBcUU7SUFDckUscUJBQXFCO0lBQ3JCLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsK0NBQStDO0lBQy9DLDJCQUEyQjtJQUMzQix3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLHlCQUF5QjtJQUN6Qix5QkFBeUI7SUFDekIsK0VBQStFO0lBQy9FLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUseUJBQXlCO0lBQ3pCLHlCQUF5QjtJQUN6QixzQkFBc0I7SUFDdEIsNkVBQTZFO0lBQzdFLGtFQUFrRTtJQUNsRSwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQix5QkFBeUI7SUFDekIsNEJBQTRCO0lBQzVCLDRFQUE0RTtJQUM1RSxnRkFBZ0Y7SUFDaEYsaUZBQWlGO0lBQ2pGLHlCQUF5QjtJQUN6QiwwQkFBMEI7SUFDMUIsdUJBQXVCO0lBQ3ZCLHlFQUF5RTtJQUN6RSx5RUFBeUU7SUFDekUseUVBQXlFO0lBQ3pFLDZFQUE2RTtJQUM3RSx5RUFBeUU7SUFDekUsZ0NBQWdDO0lBQ2hDLDJCQUEyQjtJQUMzQiw4QkFBOEI7SUFDOUIsMEJBQTBCO0lBQzFCLGtGQUFrRjtJQUNsRiwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLCtFQUErRTtJQUMvRSx3RUFBd0U7SUFDeEUsZ0ZBQWdGO0lBQ2hGLHlFQUF5RTtJQUN6RSwrRUFBK0U7SUFDL0UsbURBQW1EO0lBQ25ELEVBQUU7SUFDRiw4RUFBOEU7SUFDOUUsK0VBQStFO0lBQy9FLGlGQUFpRjtJQUNqRix3RUFBd0U7SUFDeEUsb0NBQW9DO0lBQ3BDLG9DQUFvQztJQUNwQyxvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLDRCQUE0QjtJQUM1Qiw4QkFBOEI7SUFDOUIsK0JBQStCO0lBQy9CLCtCQUErQjtJQUMvQixrQ0FBa0M7SUFDbEMsb0NBQW9DO0lBQ3BDLGdDQUFnQztJQUNoQyxnRkFBZ0Y7SUFDaEYsK0VBQStFO0lBQy9FLCtFQUErRTtJQUMvRSxzRUFBc0U7SUFDdEUseUJBQXlCO0lBQ3pCLG9GQUFvRjtJQUNwRixrRkFBa0Y7SUFDbEYsbUZBQW1GO0lBQ25GLDBCQUEwQjtJQUMxQiw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsK0VBQStFO0lBQy9FLDhFQUE4RTtJQUM5RSx5RUFBeUU7SUFDekUscURBQXFEO0lBQ3JELDhCQUE4QjtJQUM5Qiw0QkFBNEI7SUFDNUIsOEJBQThCO0lBQzlCLG1DQUFtQztJQUNuQyxxQ0FBcUM7SUFDckMseUNBQXlDO0lBQ3pDLDZFQUE2RTtJQUM3RSx5RUFBeUU7SUFDekUsd0VBQXdFO0lBQ3hFLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsaURBQWlEO0lBQ2pELHdCQUF3QjtJQUN4QiwyQkFBMkI7SUFDM0IsMkJBQTJCO0lBQzNCLG1FQUFtRTtJQUNuRSx3RUFBd0U7SUFDeEUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSwwQkFBMEI7SUFDMUIsY0FBYztJQUNkLGdGQUFnRjtJQUNoRixxRkFBcUY7SUFDckYsOEVBQThFO0lBQzlFLDhDQUE4QztJQUM5QyxXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUM5RSwyREFBMkQ7SUFDM0QsY0FBYztJQUNkLDBFQUEwRTtJQUMxRSxrRkFBa0Y7SUFDbEYsOEVBQThFO0lBQzlFLGtGQUFrRjtJQUNsRixnRkFBZ0Y7SUFDaEYsd0VBQXdFO0lBQ3hFLG1FQUFtRTtJQUNuRSxzQkFBc0I7SUFDdEIsb0JBQW9CO0lBQ3BCLCtFQUErRTtJQUMvRSxxRUFBcUU7SUFDckUsNEVBQTRFO0lBQzVFLHdFQUF3RTtJQUN4RSwrRUFBK0U7SUFDL0UsOEVBQThFO0lBQzlFLHFDQUFxQztJQUNyQyxjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQix5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixxQkFBcUI7SUFDckIsNEJBQTRCO0lBQzVCLDJCQUEyQjtJQUMzQiw0QkFBNEI7SUFDNUIsNEJBQTRCO0lBQzVCLDJCQUEyQjtJQUMzQixrQ0FBa0M7SUFDbEMsaUNBQWlDO0lBQ2pDLDRFQUE0RTtJQUM1RSx1QkFBdUI7SUFDdkIseUJBQXlCO0lBQ3pCLHdCQUF3QjtJQUN4QiwrQkFBK0I7SUFDL0IsdUJBQXVCO0lBQ3ZCLDZCQUE2QjtJQUM3QiwrREFBK0Q7SUFDL0Qsd0JBQXdCO0lBQ3hCLGdGQUFnRjtJQUNoRiwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLDhEQUE4RDtJQUM5RCx1QkFBdUI7SUFDdkIsNkJBQTZCO0lBQzdCLHNCQUFzQjtJQUN0Qix3QkFBd0I7SUFDeEIsc0JBQXNCO0lBQ3RCLHFCQUFxQjtJQUNyQix1QkFBdUI7SUFDdkIsMEJBQTBCO0lBQzFCLDBFQUEwRTtJQUMxRSwwRUFBMEU7SUFDMUUsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSwyRUFBMkU7SUFDM0Usd0VBQXdFO0lBQ3hFLHNCQUFzQjtJQUN0QixnRkFBZ0Y7SUFDaEYsNkVBQTZFO0lBQzdFLHVEQUF1RDtJQUN2RCx3Q0FBd0M7SUFDeEMscUNBQXFDO0lBQ3JDLHFDQUFxQztJQUNyQyxxQ0FBcUM7SUFDckMsZ0NBQWdDO0lBQ2hDLDBFQUEwRTtJQUMxRSx1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLGtEQUFrRDtJQUNsRCwwQkFBMEI7SUFDMUIsMkJBQTJCO0lBQzNCLDhFQUE4RTtJQUM5RSwrRUFBK0U7SUFDL0UsNEVBQTRFO0lBQzVFLDJCQUEyQjtJQUMzQiwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLHVCQUF1QjtJQUN2Qix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsb0VBQW9FO0lBQ3BFLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIscUJBQXFCO0lBQ3JCLHVCQUF1QjtJQUN2Qix3QkFBd0I7SUFDeEIseUZBQXlGO0lBQ3pGLCtCQUErQjtJQUMvQiwrQkFBK0I7SUFDL0IsOEJBQThCO0lBQzlCLHVCQUF1QjtJQUN2QixrQ0FBa0M7SUFDbEMsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UseUVBQXlFO0lBQ3pFLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsY0FBYztJQUNkLHlCQUF5QjtJQUN6Qix1QkFBdUI7SUFDdkIsc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsc0JBQXNCO0lBQ3RCLG9CQUFvQjtJQUNwQix1QkFBdUI7SUFDdkIsc0JBQXNCO0lBQ3RCLHlCQUF5QjtJQUN6Qiw0QkFBNEI7SUFDNUIsNEJBQTRCO0lBQzVCLDRCQUE0QjtJQUM1Qix5QkFBeUI7SUFDekIsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQiw2QkFBNkI7SUFDN0IsMkJBQTJCO0lBQzNCLDBCQUEwQjtJQUMxQix5QkFBeUI7SUFDekIsMEJBQTBCO0lBQzFCLHdFQUF3RTtJQUN4RSxxREFBcUQ7SUFDckQsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4Qix5QkFBeUI7SUFDekIsMEJBQTBCO0lBQzFCLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsdUVBQXVFO0lBQ3ZFLDBFQUEwRTtJQUMxRSxzQ0FBc0M7SUFDdEMscURBQXFEO0lBQ3JELG9DQUFvQztJQUNwQyx1RUFBdUU7SUFDdkUsb0VBQW9FO0lBQ3BFLHlFQUF5RTtJQUN6RSxpRUFBaUU7SUFDakUsNkJBQTZCO0lBQzdCLG9DQUFvQztJQUNwQywyRUFBMkU7SUFDM0UsdUVBQXVFO0lBQ3ZFLGlFQUFpRTtJQUNqRSx5QkFBeUI7SUFDekIsOEJBQThCO0lBQzlCLHdFQUF3RTtJQUN4RSw2RUFBNkU7SUFDN0Usd0VBQXdFO0lBQ3hFLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsd0JBQXdCO0lBQ3hCLDhCQUE4QjtJQUM5Qix3QkFBd0I7SUFDeEIseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSxnQ0FBZ0M7SUFDaEMsd0VBQXdFO0lBQ3hFLCtFQUErRTtJQUMvRSwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLDBCQUEwQjtJQUMxQixpQ0FBaUM7Q0FDekIsQ0FBQztBQUlYLHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBYTtJQUMvQyxPQUFRLG9CQUEwQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHJlbW90ZSAobm9uLXBsYXRmb3JtKSBhdWRpdCBBQ1RJT04gVk9DQUJVTEFSWS5cbiAqXG4gKiBLZXB0IGFwYXJ0IGZyb20gdGhlIGNsaWVudCB0aGF0IHNoaXBzIHRoZSBldmVudHMgKGBzZXJ2aWNlcy9yZW1vdGUtYXVkaXQtY2xpZW50LnRzYClcbiAqIGJlY2F1c2UgaXQgaXMgYW4gYWxsb3ctbGlzdCwgbm90IG1hY2hpbmVyeTogaXQgaXMgdGhlIHRoaW5nIGEgcmV2aWV3ZXIgcmVhZHNcbiAqIGVuZCB0byBlbmQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIGEgc2VydmljZSBtYXkgZW1pdCBhIGdpdmVuIGFjdGlvbiwgYW5kIGl0IGlzXG4gKiB3aGF0IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBhZ2FpbnN0LlxuICovXG5cblxuLyoqXG4gKiBUaGUgZXhhY3Qgc2V0IG9mIGF1ZGl0IGFjdGlvbnMgYSBOT04tUExBVEZPUk0gKHJlbW90ZSkgc2VydmljZSBpcyBwZXJtaXR0ZWQgdG9cbiAqIGVtaXQgdGhyb3VnaCBgUE9TVCAvYXVkaXQvZXZlbnRzYC4gVGhpcyBpcyB0aGUgU0lOR0xFIFNPVVJDRSDigJQgYFJlbW90ZUF1ZGl0QWN0aW9uYFxuICogaXMgZGVyaXZlZCBmcm9tIGl0LCBzbyB0aGUgdHlwZSBhbmQgdGhlIHJ1bnRpbWUgYWxsb3ctbGlzdCBjYW4gbmV2ZXIgZHJpZnQuXG4gKlxuICogU0VDVVJJVFk6IHBsYXRmb3JtJ3MgaW5nZXN0IHZhbGlkYXRlcyBgYWN0aW9uYCBhZ2FpbnN0IHRoaXMgc3Vic2V0ICh2aWFcbiAqIHtAbGluayBpc1JlbW90ZUF1ZGl0QWN0aW9ufSksIE5PVCB0aGUgZnVsbCBwbGF0Zm9ybSBgQXVkaXRBY3Rpb25gIHVuaW9uIOKAlCBhXG4gKiBgc2VydmljZToqYCB0b2tlbiBtdXN0IG5vdCBiZSBhYmxlIHRvIGZvcmdlIHBsYXRmb3JtLWF1dGhvcml0eSBldmVudHNcbiAqIChgYWRtaW4uc3VwZXJhZG1pbi5ncmFudGAsIGBvcmcub3duZXJzaGlwLnRyYW5zZmVyYCwgYHVzZXIubG9naW5gLCDigKYpLiBLZWVwXG4gKiB0aGlzIGxpc3QgZnJlZSBvZiBhbnkgcGxhdGZvcm0tb25seSBhY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSRU1PVEVfQVVESVRfQUNUSU9OUyA9IFtcbiAgJ3BsdWdpbi5idWlsZC5jb21wbGV0ZWQnLFxuICAncGx1Z2luLmJ1aWxkLmZhaWxlZCcsXG4gICdwbHVnaW4uYnVpbGQudGltZW91dCcsXG4gIC8vIEEgdmVyc2lvbiBwZXJzaXN0ZWQgVU5TQ0FOTkVEIGJlY2F1c2UgdGhlIGJ1aWxkLXRpbWUgc2NhbiBjb3VsZCBub3QgcnVuIGFuZFxuICAvLyB0aGUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoIGBQTFVHSU5fQUxMT1dfVU5TQ0FOTkVEYCBpcyBvbiAod2l0aG91dCBpdCB0aGVcbiAgLy8gYnVpbGQgZmFpbHMgYElNQUdFX1NDQU5fVU5BVkFJTEFCTEVgKS4gYGRldGFpbHNgIGNhcnJ5IG5hbWUvdmVyc2lvbi9kaWdlc3QuXG4gICdwbHVnaW4uc2Nhbi5za2lwcGVkJyxcbiAgLy8gRml4YWJsZSBDcml0aWNhbCBmaW5kaW5ncyB3ZXJlIEVYRU1QVEVEIGZyb20gdGhlIHBsYXRmb3JtIGZsb29yIGJ5IGFcbiAgLy8gYFBMVUdJTl9WVUxOX1dBSVZFUlNgIGVudHJ5LCBzbyBhIGJ1aWxkIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgZmFpbGVkXG4gIC8vIFBMVUdJTl9WVUxOX0dBVEUgd2FzIGFsbG93ZWQgdGhyb3VnaC4gVGhlIG90aGVyIGhhbGYgb2YgcGx1Z2luLnNjYW4uc2tpcHBlZDpcbiAgLy8gYm90aCBhcmUgb3BlcmF0b3IgZXNjYXBlIGhhdGNoZXMgdGhhdCBjaGFuZ2UgYSBnYXRlJ3MgdmVyZGljdCwgYW5kIGEgbWV0cmljXG4gIC8vIGFuZCBhIGxvZyBsaW5lIGFyZSBub3QgYSBkdXJhYmxlIHJlY29yZCBvZiBvbmUuIGBkZXRhaWxzYCBjYXJyeVxuICAvLyBuYW1lL3ZlcnNpb24vZGlnZXN0LCBob3cgbWFueSBmaW5kaW5ncyB3ZXJlIHdhaXZlZCBhbmQgd2hpY2ggcGFja2FnZXMuXG4gICdwbHVnaW4udnVsbi53YWl2ZWQnLFxuICAvLyBUaGUgbmlnaHRseSByZXNjYW4gRkxBR0dFRCBhIHN0b3JlZCB2ZXJzaW9uIChpdHMgZ2F0ZWQgQ3JpdGljYWwgZmluZGluZ3NcbiAgLy8gbm93IGV4Y2VlZCBQTFVHSU5fVlVMTl9NQVhfRklORElOR1Mg4oCUIGxvb2t1cCBhbmQgdGhlIHBpcGVsaW5lJ3Mgb3duZXJzIGFyZVxuICAvLyB3YXJuZWQgYXQgYGVycm9yYCBzZXZlcml0eSksIG9yIENMRUFSRUQgdGhhdCBmbGFnLiBCb3RoIGNoYW5nZSB3aGF0XG4gIC8vIHJlc29sdXRpb24gc2F5cyBhYm91dCBhIHZlcnNpb24gbm9ib2R5IHJlYnVpbHQsIG9uIG5vYm9keSdzIHJlcXVlc3QsIHNvIHRoZVxuICAvLyByZWNvcmQgb2YgV0hFTiBhbmQgV0hZIGxpdmVzIGluIHRoZSBoYXNoLWNoYWluZWQgbG9nIHJhdGhlciB0aGFuIG9ubHkgaW4gYVxuICAvLyBjb2x1bW4gdGhlIG5leHQgcmVzY2FuIG92ZXJ3cml0ZXMuIGBkZXRhaWxzYCBjYXJyeSBjb3VudHMsIHRoZSBnYXRlZFxuICAvLyBhZHZpc29yeSBpZHMgYW5kIHRoZSBpbWFnZSBkaWdlc3QuXG4gICdwbHVnaW4udnVsbi5mbGFnZ2VkJyxcbiAgJ3BsdWdpbi52dWxuLmNsZWFyZWQnLFxuICAvLyBQbHVnaW4gbGlmZWN5Y2xlIG11dGF0aW9ucyAoYXBpL3BsdWdpbiByb3V0ZSBoYW5kbGVycykg4oCUIHRoZSBkZXN0cnVjdGl2ZSAvXG4gIC8vIHB1Ymxpc2hpbmcgc3VyZmFjZSB0aGF0IGJ1aWxkcyBhbHJlYWR5IGF1ZGl0J3MgY291bnRlcnBhcnQ6IHJlZ2lzdHJ5IGRlbGV0ZSxcbiAgLy8gc291cmNlIHVwbG9hZCwgYW5kIGRlcGxveS10by1jbHVzdGVyLiBgdGFyZ2V0SWRgIGlzIHRoZSBwbHVnaW4gaWQuXG4gICdwbHVnaW4uZGVsZXRlJyxcbiAgJ3BsdWdpbi5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGx1Z2luIHRvbWJzdG9uZSBvblxuICAvLyBkZW1hbmQgKGZpbmFsaXplcyB3aGF0IHRoZSByZXRlbnRpb24gc3dlZXAgd291bGQgb3RoZXJ3aXNlIGRvIGxhdGVyKS5cbiAgJ3BsdWdpbi5wdXJnZScsXG4gICdwbHVnaW4udXBkYXRlJyxcbiAgJ3BsdWdpbi51cGxvYWQnLFxuICAncGx1Z2luLmRlcGxveScsXG4gIC8vIFBsdWdpbiBidWxrIG11dGF0aW9ucyAoYXBpL3BsdWdpbiBidWxrLXBsdWdpbiByb3V0ZSkgKyBETFEgcHVyZ2UgKGRyb3BzIGFsbFxuICAvLyBkZWFkLWxldHRlcmVkIGJ1aWxkIGpvYnMsIGNyb3NzLW9yZywgc3lzYWRtaW4pLiBgZGV0YWlsc2AgY2FycmllcyBjb3VudHMuXG4gICdwbHVnaW4uYnVsay51cGRhdGUnLFxuICAncGx1Z2luLmJ1bGsuZGVsZXRlJyxcbiAgJ3BsdWdpbi5kbHEucHVyZ2UnLFxuICAvLyBCdWlsZCByZS1ydW5zIGZyb20gdGhlIHF1ZXVlLXRyaWFnZSBzdXJmYWNlOiByZS1lbnF1ZXVlIGEgRkFJTEVEIGJ1aWxkXG4gIC8vIChgcGx1Z2luLmJ1aWxkLnJldHJ5YCkgb3IgYSBkZWFkLWxldHRlcmVkIG9uZSAoYHBsdWdpbi5kbHEucmVwbGF5YCkuIEJvdGhcbiAgLy8gcmUtcnVuIGFuIGltYWdlIGJ1aWxkICsgcGx1Z2luIHBlcnNpc3Qgb24gdGhlIGNhbGxlcidzIGF1dGhvcml0eSwgc28gdGhleVxuICAvLyBhcmUgYXVkaXRlZCBtdXRhdGlvbnM7IGBhZmZlY3RlZE9yZ0lkYCBjYXJyaWVzIHRoZSBqb2IncyBvd25pbmcgb3JnLlxuICAncGx1Z2luLmJ1aWxkLnJldHJ5JyxcbiAgJ3BsdWdpbi5kbHEucmVwbGF5JyxcbiAgLy8gUGlwZWxpbmUgbXV0YXRpb25zIOKAlCBlbWl0dGVkIGJ5IGFwaS9waXBlbGluZSdzIHJvdXRlIGhhbmRsZXJzXG4gIC8vIChjcmVhdGUvdXBkYXRlL2RlbGV0ZSArIENvZGVQaXBlbGluZSBleGVjdXRpb24gdHJpZ2dlci9jYW5jZWwpIGFuZFxuICAvLyBwb3N0ZWQgdG8gcGxhdGZvcm0ncyBgUE9TVCAvYXVkaXQvZXZlbnRzYCBpbmdlc3QuXG4gICdwaXBlbGluZS5jcmVhdGUnLFxuICAncGlwZWxpbmUudXBkYXRlJyxcbiAgJ3BpcGVsaW5lLmRlbGV0ZScsXG4gICdwaXBlbGluZS5yZXN0b3JlJyxcbiAgLy8gTWFudWFsIHB1cmdlOiBwZXJtYW5lbnQgaGFyZC1kZWxldGUgb2YgYSBzb2Z0LWRlbGV0ZWQgcGlwZWxpbmUgL1xuICAvLyBwaXBlbGluZV90ZW1wbGF0ZSB0b21ic3RvbmUgb24gZGVtYW5kIChmaW5hbGl6ZXMgd2hhdCB0aGUgcmV0ZW50aW9uIHN3ZWVwXG4gIC8vIHdvdWxkIG90aGVyd2lzZSBkbyBsYXRlcikuIGB0YXJnZXRJZGAgaXMgdGhlIHB1cmdlZCBpZC5cbiAgJ3BpcGVsaW5lLnB1cmdlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLmNyZWF0ZScsXG4gICdwaXBlbGluZV90ZW1wbGF0ZS51cGRhdGUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUuZGVsZXRlJyxcbiAgJ3BpcGVsaW5lX3RlbXBsYXRlLnJlc3RvcmUnLFxuICAncGlwZWxpbmVfdGVtcGxhdGUucHVyZ2UnLFxuICAncGlwZWxpbmUuZXhlY3V0aW9uLnN0YXJ0JyxcbiAgJ3BpcGVsaW5lLmV4ZWN1dGlvbi5jYW5jZWwnLFxuICAvLyBDb2RlUGlwZWxpbmUgQVJOLXJlZ2lzdHJ5IGNvbmZpZyAoYXBpL3BpcGVsaW5lIHJlZ2lzdHJ5IHJvdXRlKSDigJQgcmVnaXN0ZXJpbmcgL1xuICAvLyBkZXJlZ2lzdGVyaW5nIHRoZSBleHRlcm5hbCBDb2RlUGlwZWxpbmUgdGhhdCBiYWNrcyBhIHBpcGVsaW5lIChkZXBsb3ktYWZmZWN0aW5nKS5cbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LnJlZ2lzdGVyJyxcbiAgJ3BpcGVsaW5lLnJlZ2lzdHJ5LmRlcmVnaXN0ZXInLFxuICAvLyBRdW90YSBhZG1pbmlzdHJhdGlvbiAoYXBpL3F1b3RhKSDigJQgYSBzdXBlcmFkbWluIHJlc2V0dGluZyBhbiBvcmcncyB1c2FnZVxuICAvLyBjb3VudGVyIG9yIGVkaXRpbmcgaXRzIHRpZXIgbGltaXRzLiBgYWZmZWN0ZWRPcmdJZGAgaXMgdGhlIG9yZyBjaGFuZ2VkO1xuICAvLyBgZGV0YWlsc2AgY2FycmllcyB0aGUgcXVvdGFUeXBlICsgb2xkL25ldyB2YWx1ZS5cbiAgJ3F1b3RhLnJlc2V0JyxcbiAgJ3F1b3RhLmxpbWl0LnVwZGF0ZScsXG4gIC8vIEEgc3VwZXJhZG1pbiBkZWxldGluZyBhbiBvcmcncyBlbnRpcmUgcXVvdGEgZG9jdW1lbnQuXG4gICdxdW90YS5kZWxldGUnLFxuICAvLyBBbiBhY2NvdW50J3MgcXVvdGEgdGhyZXNob2xkLW5vdGljZSBzZXR0aW5ncyAob3B0LW91dCArIHRoZVxuICAvLyBgcXVvdGEudGhyZXNob2xkYCB3ZWJob29rIFVSTCkg4oCUIHdoZXJlIHVzYWdlIHdhcm5pbmdzIGdvLlxuICAncXVvdGEubm90aWNlX3NldHRpbmdzLnVwZGF0ZScsXG4gIC8vIENvbXBsaWFuY2UgYWRtaW5pc3RyYXRpb24gKGFwaS9jb21wbGlhbmNlKSDigJQgdGhlIGVuZm9yY2VtZW50LXBvc3R1cmUgc3VyZmFjZS5cbiAgLy8gQXBwcm92aW5nL3Jldm9raW5nIGFuIGV4ZW1wdGlvbiwgdG9nZ2xpbmcvYXV0aG9yaW5nL2RlbGV0aW5nIGEgcnVsZSxcbiAgLy8gYXV0aG9yaW5nL2RlbGV0aW5nIGEgcG9saWN5LCBtYW5hZ2luZyBzY2FuIHNjaGVkdWxlcywgYXBwbHlpbmcgYSB0ZW1wbGF0ZSxcbiAgLy8gb3IgY2FuY2VsbGluZyBhIHJ1bm5pbmcgc2Nhbi4gYHRhcmdldElkYCBpcyB0aGUgcnVsZS9wb2xpY3kvZXhlbXB0aW9uL3NjYW4gaWQuXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5hcHByb3ZlJyxcbiAgJ2NvbXBsaWFuY2UuZXhlbXB0aW9uLnJldm9rZScsXG4gIC8vIEEgbWVtYmVyIEZJTElORyBhbiBleGVtcHRpb24gcmVxdWVzdCAoc2luZ2xlIG9yIGJ1bGs7IG1ldGFkYXRhIG9ubHksIG5ldmVyXG4gIC8vIHRoZSByZWFzb24pIGFuZCBhbiBhZG1pbiBSRUpFQ1RJTkcgb25lIOKAlCB0aGUgb3RoZXIgaGFsdmVzIG9mIHRoZVxuICAvLyB0d28tcGVyc29uIGRlY2lzaW9uIHdob3NlIGFwcHJvdmFsIGlzIHJlY29yZGVkIGFib3ZlLlxuICAnY29tcGxpYW5jZS5leGVtcHRpb24ucmVxdWVzdCcsXG4gICdjb21wbGlhbmNlLmV4ZW1wdGlvbi5yZWplY3QnLFxuICAnY29tcGxpYW5jZS5ydWxlLnRvZ2dsZScsXG4gICdjb21wbGlhbmNlLnJ1bGUuY3JlYXRlJyxcbiAgJ2NvbXBsaWFuY2UucnVsZS51cGRhdGUnLFxuICAnY29tcGxpYW5jZS5ydWxlLmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnJ1bGUucmVzdG9yZScsXG4gIC8vIE1hbnVhbCBvbi1kZW1hbmQgaGFyZC1kZWxldGUgKFBVUkdFKSBvZiBhIHNvZnQtZGVsZXRlZCBydWxlL3BvbGljeSB0b21ic3RvbmUg4oCUXG4gIC8vIHRoZSBjYWxsZXItaW5pdGlhdGVkIGNvdW50ZXJwYXJ0IHRvIHRoZSByZXRlbnRpb24gc3dlZXAncyBhdXRvLXB1cmdlLiBEZXN0cm95c1xuICAvLyB0aGUgdG9tYnN0b25lIHBlcm1hbmVudGx5LCBzbyBpdCBjYXJyaWVzIHRoZSBkdXJhYmxlLCB0YW1wZXItZXZpZGVudCB0cmFpbC5cbiAgJ2NvbXBsaWFuY2UucnVsZS5wdXJnZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5wb2xpY3kudXBkYXRlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LmRlbGV0ZScsXG4gICdjb21wbGlhbmNlLnBvbGljeS5yZXN0b3JlJyxcbiAgJ2NvbXBsaWFuY2UucG9saWN5LnB1cmdlJyxcbiAgJ2NvbXBsaWFuY2Uuc2Nhbi1zY2hlZHVsZS5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLXNjaGVkdWxlLnVwZGF0ZScsXG4gICdjb21wbGlhbmNlLnNjYW4tc2NoZWR1bGUuZGVsZXRlJyxcbiAgJ2NvbXBsaWFuY2UudGVtcGxhdGUuYXBwbHknLFxuICAvLyBMYXVuY2hpbmcgYW4gb3JnLXdpZGUgcmUtZXZhbHVhdGlvbiAodGhlIGNvdW50ZXJwYXJ0IHRvIGAuY2FuY2VsYCkg4oCUIGl0XG4gIC8vIHBlcnNpc3RzIGEgc2NhbiBhbmQgY2FuIGJsb2NrIGVudGl0aWVzIHRoYXQgcGFzc2VkIGJlZm9yZS5cbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jcmVhdGUnLFxuICAnY29tcGxpYW5jZS5zY2FuLmNhbmNlbCcsXG4gIC8vIEEgc2NhbidzIHRlcm1pbmFsIE9VVENPTUUgKGNvbXBsZXRlZCDihpIgc3VjY2VzcyB3aXRoIHRoZSBwYXNzL3dhcm4vYmxvY2tcbiAgLy8gY291bnRzLCBmYWlsZWQg4oaSIGZhaWx1cmUpLiBTY2hlZHVsZWQgc2NhbnMgYWxzbyB3cml0ZSBgY29tcGxpYW5jZS5zY2FuLmNyZWF0ZWBcbiAgLy8gKGBkZXRhaWxzLnRyaWdnZXJlZEJ5OiAnc2NoZWR1bGVkJ2ApLCBhdHRyaWJ1dGVkIHRvIHRoZSBzY2hlZHVsZSdzIGF1dGhvci5cbiAgJ2NvbXBsaWFuY2Uuc2Nhbi5jb21wbGV0ZScsXG4gIC8vIFBsYXRmb3JtIG9uYm9hcmRpbmcgc3Vic2NyaWJpbmcgYSBuZXcgb3JnIHRvIGV2ZXJ5IHB1Ymxpc2hlZCBydWxlXG4gIC8vIChJTkFDVElWRSBzdWJzY3JpcHRpb25zOyBgZGV0YWlscy5zdWJzY3JpYmVkYCBpcyB0aGUgY291bnQpLlxuICAnY29tcGxpYW5jZS5zdWJzY3JpcHRpb24uYXV0by1zdWJzY3JpYmUnLFxuICAvLyBQZXItb3JnIGNvbXBsaWFuY2Ugbm90aWZpY2F0aW9uIHNldHRpbmdzOiByZWNpcGllbnRzICsgdGhlIG91dGJvdW5kIHdlYmhvb2tcbiAgLy8gVVJML3NlY3JldC4gQmVhcmVyLWVxdWl2YWxlbnQgY29uZmlnIHRoYXQgcmVkaXJlY3RzIHZpb2xhdGlvbiBub3RpY2VzLCBzbyBhXG4gIC8vIGNoYW5nZSBjYXJyaWVzIHRoZSBkdXJhYmxlIHRyYWlsIChuZXZlciB0aGUgc2VjcmV0IGl0c2VsZikuXG4gICdjb21wbGlhbmNlLm5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlLnVwZGF0ZScsXG4gIC8vIEltYWdlLXJlZ2lzdHJ5IGRlc3RydWN0aXZlIG9wcyAoYXBpL2ltYWdlLXJlZ2lzdHJ5KSDigJQgZ2FyYmFnZS1jb2xsZWN0aW9uXG4gIC8vIHN3ZWVwcyBhbmQgZXhwbGljaXQgaW1hZ2UvdGFnIGRlbGV0ZXMuXG4gICdyZWdpc3RyeS5nYycsXG4gICdyZWdpc3RyeS5pbWFnZS5kZWxldGUnLFxuICAvLyBDcm9zcy1yZXBvIHRhZy9pbWFnZSBjb3B5IChhcGkvaW1hZ2UtcmVnaXN0cnkgUE9TVCAvYXBpL2ltYWdlcy9jb3B5KS4gQVxuICAvLyBjcm9zcy10ZW5hbnQgY29weSBtb3ZlcyBkYXRhIGFjcm9zcyBjdXN0b21lciBib3VuZGFyaWVzLCBzbyBpdCBuZWVkcyB0aGVcbiAgLy8gZHVyYWJsZSwgdGFtcGVyLWV2aWRlbnQgdHJhaWwg4oCUIG5vdCBqdXN0IHRoZSBMb2tpIG9wZXJhdG9yIGxpbmUuXG4gICdyZWdpc3RyeS5pbWFnZS5jb3B5JyxcbiAgLy8gQSBwbHVnaW4gaW1hZ2Ugc2lnbmVkICsgU0JPTS1hdHRlc3RlZCBieSB0aGUgcGxhdGZvcm0ncyBwbHVnaW4tc2lnbmluZyBrZXlcbiAgLy8gKGFwaS9pbWFnZS1yZWdpc3RyeSBQT1NUIC9pbnRlcm5hbC9wbHVnaW4tc2lnbmF0dXJlcywgY2FsbGVkIGJ5IHRoZSBwbHVnaW5cbiAgLy8gYnVpbGQgd29ya2VyKS4gVGhlIGtleSBpcyB3aGF0IHN5bnRoIHRydXN0cywgc28gZXZlcnkgdXNlIGlzIG9uIHRoZSB0cmFpbC5cbiAgJ3JlZ2lzdHJ5LmltYWdlLnNpZ24nLFxuICAvLyBUaGUgRG9ja2VyIHRva2VuIGVuZHBvaW50IG1pbnRpbmcgYSByZWdpc3RyeSB0b2tlbiB0aGF0IEdSQU5UUyBhY2Nlc3NcbiAgLy8gKGBkZXRhaWxzLmdyYW50ZWRgOiByZXBvICsgYWN0aW9uczsgdGhlIHNjb3BlLWxlc3MgYGRvY2tlciBsb2dpbmAgcHJvYmUgaXNcbiAgLy8gbm90IHJlY29yZGVkKSDigJQgYW5kLCBhcyBvdXRjb21lIGZhaWx1cmUsIGEgcmVmdXNlZCBjcmVkZW50aWFsIChoYXNoZWRcbiAgLy8gdXNlcm5hbWUsIGNyZWRlbnRpYWwga2luZCBvbmx5KS5cbiAgJ3JlZ2lzdHJ5LnRva2VuLmlzc3VlJyxcbiAgLy8gQSBwdXNoIGNyZWRlbnRpYWwgbWludGVkIGZvciBvbmUgYW5vbnltb3VzIHN1Ym1pc3Npb24nc1xuICAvLyBgcXVhcmFudGluZS88c3VibWlzc2lvbklkPmAgcmVwbyAoZXhwaXJ5ICsgVFRMLCBuZXZlciB0aGUgc2VjcmV0KS5cbiAgJ3JlZ2lzdHJ5LnF1YXJhbnRpbmUuY3JlZGVudGlhbC5taW50JyxcbiAgLy8gTWVzc2FnaW5nIChhcGkvbWVzc2FnZSkg4oCUIGFkbWluIEJST0FEQ0FTVCBhbm5vdW5jZW1lbnRzICsgZGVzdHJ1Y3RpdmVcbiAgLy8gZGVsZXRlcy4gMToxIHVzZXIgbWVzc2FnZXMgYXJlIGludGVudGlvbmFsbHkgTk9UIGF1ZGl0ZWQgKG5vaXNlICsgdGhleSB3b3VsZFxuICAvLyBwdWxsIHByaXZhdGUgY29udGVudCBpbnRvIHRoZSB0cmFpbCkuIGBkZXRhaWxzYCBjYXJyeSBtZXRhZGF0YSBvbmx5XG4gIC8vIChzdWJqZWN0L3R5cGUvc2NvcGUpLCBORVZFUiBtZXNzYWdlIGJvZHkgY29udGVudC5cbiAgJ21lc3NhZ2UuYW5ub3VuY2VtZW50LmNyZWF0ZScsXG4gICdtZXNzYWdlLmRlbGV0ZScsXG4gICdtZXNzYWdlLnJlc3RvcmUnLFxuICAvLyBNYW51YWwgb24tZGVtYW5kIFBVUkdFIChwZXJtYW5lbnQgaGFyZC1kZWxldGUpIG9mIGFuIGFscmVhZHktc29mdC1kZWxldGVkXG4gIC8vIG1lc3NhZ2UgdG9tYnN0b25lIOKAlCB0aGUgZGVzdHJ1Y3RpdmUgZmluYWxpemVyIHRoZSByZXRlbnRpb24gc3dlZXAgd291bGRcbiAgLy8gb3RoZXJ3aXNlIHBlcmZvcm0gYXQgdGhlIHB1cmdlIGRlYWRsaW5lLiBgZGV0YWlsc2AgY2FycnkgbWV0YWRhdGEgb25seS5cbiAgJ21lc3NhZ2UucHVyZ2UnLFxuICAvLyBBbiBhdXRob3IncyBlZGl0IG9mIGEgc2VudCBtZXNzYWdlIChhbmQgcmVmdXNlZCBhdHRlbXB0cywgYXMgZmFpbHVyZXMpLlxuICAvLyBgZGV0YWlsc2AgY2FycnkgdGhlIG5ldyBib2R5J3MgTEVOR1RIIG9ubHkg4oCUIG5laXRoZXIgc2lkZSBvZiB0aGUgZWRpdC5cbiAgJ21lc3NhZ2UudXBkYXRlJyxcbiAgLy8gQSBtZXNzYWdlIGF0dGFjaG1lbnQgc3RvcmVkIChnZW5lcmFsIG9yIHN1cHBvcnQgbW91bnQsIGBkZXRhaWxzLnN1cmZhY2VgKS5cbiAgLy8gVHlwZSArIHNpemUgb25seSDigJQgbmV2ZXIgdGhlIGJ5dGVzLCBhbmQgbm90IHRoZSB1c2VyLWNob3NlbiBmaWxlbmFtZS5cbiAgJ21lc3NhZ2UuYXR0YWNobWVudC51cGxvYWQnLFxuICAvLyBBIFNZU1RFTSBub3RpZmljYXRpb24gZHJvcHBlZCBpbnRvIGFuIG9yZydzIGluYm94IGJ5IGFuIGludGVybmFsIHNlcnZpY2VcbiAgLy8gKFBPU1QgL21lc3NhZ2VzL2ludGVybmFsL25vdGlmeSk7IGBkZXRhaWxzLmNhbGxlcmAgbmFtZXMgdGhlIHNlcnZpY2UuXG4gICdtZXNzYWdlLm5vdGlmeS5pbnRlcm5hbCcsXG4gIC8vIFRoZSBwbGF0Zm9ybSBvcmctZGVsZXRlIGNhc2NhZGUgcmVjbGFpbWluZyBhbiBvcmcncyBhdHRhY2htZW50IEJMT0JTIOKAlFxuICAvLyBgZGV0YWlscy5ibG9ic0RlbGV0ZWRgLCBvciBhIGZhaWx1cmUgcm93IHdoZW4gdGhlIHJlY2xhaW0gZGlkIG5vdCBjb21wbGV0ZS5cbiAgJ21lc3NhZ2Uub3JnLnB1cmdlJyxcbiAgLy8gU3VwcG9ydCBjYXNlcyAoYXBpL21lc3NhZ2UpLiBEaXN0aW5jdCBmcm9tIHRoZSBgbWVzc2FnZS4qYCBmYW1pbHkgYWJvdmVcbiAgLy8gYmVjYXVzZSBhIGNhc2UgaXMgbm90IGFuIG9yZGluYXJ5IG1lc3NhZ2U6IGl0IGNhcnJpZXMgYSByZXNwb25zZS10aW1lXG4gIC8vIGNvbW1pdG1lbnQsIHNvIFdITyByYWlzZWQgaXQgYW5kIFdIRU4gd2UgZmlyc3QgYW5zd2VyZWQgYXJlIHRoZSBmYWN0cyBhXG4gIC8vIGRpc3B1dGUgdHVybnMgb24uIGBkZXRhaWxzYCBjYXJyeSB0aGUgY2FzZSBudW1iZXIsIGxldmVsIGFuZCBzZXZlcml0eSDigJRcbiAgLy8gbWV0YWRhdGEgb25seSwgbmV2ZXIgdGhlIGJvZHkgb2Ygd2hhdCBhIGN1c3RvbWVyIHdyb3RlLlxuICAvL1xuICAvLyBUd28gb2YgdGhlIG5pbmUgcGxhbm5lZCBzdXBwb3J0IGFjdGlvbnMgYXJlIGhlcmUsIGFuZCBvbmx5IHR3bzogdGhlc2UgYXJlXG4gIC8vIHRoZSBvbmVzIHdpdGggcmVhbCBlbWl0dGVycyB0b2RheS4gVGhlIHJlc3QgKGBzdGF0dXNgLCBgc2V2ZXJpdHlgLFxuICAvLyBgYXNzaWduYCwgYHRyYW5zZmVyYCwgYG5vdGVgLCBgcmVhZGApIGxhbmQgV0lUSCB0aGUgcm91dGVzIHRoYXQgZW1pdCB0aGVtIOKAlFxuICAvLyBhIGRlY2xhcmVkIGFjdGlvbiBub3RoaW5nIGVtaXRzIGlzIGRlYWQgdm9jYWJ1bGFyeSwgYW5kIHRoZSBwYXJpdHkgdGVzdFxuICAvLyB3b3VsZCB0aGVuIGZvcmNlIGEgZG9jcyByb3cgZGVzY3JpYmluZyBhbiBldmVudCB0aGF0IG5ldmVyIGZpcmVzLlxuICAvL1xuICAvLyBgc3VwcG9ydC5jYXNlLnJlYWRgIHdpbGwgbWF0dGVyIG1vc3Qgb2YgYWxsIHdoZW4gaXQgYXJyaXZlczogaXQgaXMgdGhlIG9ubHlcbiAgLy8gcmVjb3JkIHRoYXQgc29tZW9uZSBhdCB0aGUgdmVuZG9yIG9wZW5lZCBhIGN1c3RvbWVyJ3MgY2FzZS5cbiAgJ3N1cHBvcnQuY2FzZS5vcGVuJyxcbiAgJ3N1cHBvcnQuY2FzZS5yZXBseScsXG4gIC8vIFRoZSB3b3JrZmxvdyBtdXRhdGlvbnMuIEVhY2ggaXMgYXVkaXRlZCBiZWNhdXNlIGVhY2ggbW92ZXMgYSBjYXNlJ3NcbiAgLy8gcmVsYXRpb25zaGlwIHRvIGl0cyByZXNwb25zZSBjb21taXRtZW50OiBzdGF0dXMgc3RvcHMgb3IgcmVzdGFydHMgdGhlXG4gIC8vIGNsb2NrLCBzZXZlcml0eSBjaGFuZ2VzIHdoaWNoIHRhcmdldCBhcHBsaWVzLCBhbmQgdGhlIHR3byBvd25lcnNoaXBcbiAgLy8gYWN0aW9ucyBkZWNpZGUgV0hPIGlzIGFjY291bnRhYmxlIGZvciBtZWV0aW5nIGl0LiBBIHNpbGVudCBjaGFuZ2Ugb2Ygb3duZXJcbiAgLy8gaXMgaG93IGFjY291bnRhYmlsaXR5IGZvciBhIG1pc3NlZCB0YXJnZXQgZGlzYXBwZWFycy5cbiAgJ3N1cHBvcnQuY2FzZS5zdGF0dXMnLFxuICAnc3VwcG9ydC5jYXNlLnNldmVyaXR5JyxcbiAgJ3N1cHBvcnQuY2FzZS5hc3NpZ24nLFxuICAnc3VwcG9ydC5jYXNlLnRyYW5zZmVyJyxcbiAgLy8gT04tQ0FMTC4gVGhlIHByb3ZpZGVyIG93bnMgdGhlIHJvdGEsIHRoZSBlc2NhbGF0aW9uIGFuZCB0aGUgY29udGFjdFxuICAvLyBtZXRob2RzOyB3aGF0IGl0IGNhbm5vdCBvd24gaXMgYW4gYXVkaXRhYmxlIGFuc3dlciB0byBcIndobyBwaWNrZWQgdGhpcyB1cFxuICAvLyBhdCAwMzoxNFwiLiBBIGNsaWNrIG9uIGEgbGluayBpbiB0aGVpciBVSSBpcyBub3QgYW4gaWRlbnRpdHkgdGhpcyBzeXN0ZW0gY2FuXG4gIC8vIGF0dGVzdCB0bywgc28gdGhlaXIgaW5jaWRlbnQgc3RhdGUgY2hhbmdlIGlzIHJlbGF5ZWQgaGVyZSBhbmQgcmVjb3JkZWRcbiAgLy8gYWdhaW5zdCB0aGUgYWdlbnQgdGhleSBuYW1lLiBUaGUgaGFzaCBjaGFpbiBpcyB0aGUgcG9pbnQ6IGEgcG9zdC1pbmNpZGVudFxuICAvLyByZXZpZXcgbmVlZHMgdGhlIGFjayB0byBiZSBldmlkZW5jZSByYXRoZXIgdGhhbiBhIHNjcmVlbnNob3QuXG4gIC8vXG4gIC8vIGBlc2NhbGF0ZWRgIGlzIGF1ZGl0ZWQgc2VwYXJhdGVseSBiZWNhdXNlIGl0IGlzIHRoZSByZWNvcmQgdGhhdCB0aGUgRklSU1RcbiAgLy8gcmVzcG9uZGVyIGRpZCBub3QgYW5zd2VyIOKAlCB0aGUgZmFjdCBhIHJvdGEgaXMgYWRqdXN0ZWQgb24sIGFuZCB0aGUgb25lIG1vc3RcbiAgLy8gbGlrZWx5IHRvIGJlIGRpc3B1dGVkIGxhdGVyLlxuICAnc3VwcG9ydC5vbmNhbGwuYWNrbm93bGVkZ2VkJyxcbiAgJ3N1cHBvcnQub25jYWxsLmVzY2FsYXRlZCcsXG4gIC8vIFRoZSB0ZXN0IHBhZ2UuIEF1ZGl0ZWQgYmVjYXVzZSBpdCBSSU5HUyBBIFBIT05FOiB3aG9ldmVyIGl0IHdha2VzIGlzXG4gIC8vIGVudGl0bGVkIHRvIGEgcmVjb3JkIG9mIHdobyBjYXVzZWQgdGhhdCwgYXQgd2hhdGV2ZXIgaG91ciBpdCB3YXMuXG4gICdzdXBwb3J0Lm9uY2FsbC50ZXN0JyxcbiAgLy8gVGhlIHBlci1jYXNlIHN3ZWVwIHBhZ2luZyB0aGUgcm90YSBmb3IgYSBwcmVtaXVtIGNhc2UgbmVhcmluZyBpdHMgdGFyZ2V0LlxuICAvLyBSZWNvcmRlZCBvbmNlLCBvbiB0aGUgdGljayB0aGUgY2FzZSBFTlRFUkVEIHRoZSB3aW5kb3cg4oCUIHRoZSBzd2VlcCByZS1zZW5kc1xuICAvLyB0aGUgcGFnZSBldmVyeSB0aWNrLCBhbmQgdHdlbnR5LWZvdXIgcm93cyBmb3Igb25lIHBhZ2Ugd291bGQgYmUgbm9pc2UuXG4gICdzdXBwb3J0Lm9uY2FsbC5wYWdlZCcsXG4gIC8vIFRoZSB0d28gQ09OVEFDVCBhY3Rpb25zIChwbGF0Zm9ybSkuIE5vdCBjYXNlIGV2ZW50cyDigJQgZW50aXRsZW1lbnQgZXZlbnRzOlxuICAvLyBlYWNoIG9uZSBjaGFuZ2VzIHdobyBpbiBhbiBvcmcgaXMgYWJsZSB0byBjb21taXQgdXMgdG8gYSByZXNwb25zZSB0YXJnZXQgYXRcbiAgLy8gYWxsLCBhbmQgZGVzaWduYXRpbmcgc3BlbmRzIGEgc2xvdCBvZiBhIFBBSUQsIGFjY291bnQtcG9vbGVkIGFsbG93YW5jZS4gVGhlXG4gIC8vIHJldm9rZSBjYXJyaWVzIHRoZSBjb3VudCBvZiBvcGVuIGNhc2VzIGl0IGxlZnQgYmVoaW5kLCBzbyBhbiBvcnBoYW5lZCBjYXNlXG4gIC8vIGlzIGEgcmVjb3JkZWQgZmFjdCByYXRoZXIgdGhhbiBzb21ldGhpbmcgZGlzY292ZXJlZCBsYXRlci5cbiAgJ3N1cHBvcnQuY29udGFjdC5kZXNpZ25hdGUnLFxuICAnc3VwcG9ydC5jb250YWN0LnJldm9rZScsXG4gIC8vIFRoZSBwcmVtaXVtIFVQR1JBREUsIGJvdGggZGlyZWN0aW9ucy4gU2VwYXJhdGUgYWN0aW9ucyBmcm9tIGRlc2lnbmF0aW9uXG4gIC8vIGJlY2F1c2UgdGhleSBhbnN3ZXIgdG8gYSBkaWZmZXJlbnQgY2FwIGFuZCBjYXJyeSBhIGRpZmZlcmVudCBmYWN0OiB3aG8gd2FzXG4gIC8vIGVudGl0bGVkIHRvIDI0eDcgY292ZXJhZ2UsIGFuZCB3aGVuLiBBIHJlc3BvbnNlLXRpbWUgZGlzcHV0ZSBvdmVyIGFuXG4gIC8vIG91dC1vZi1ob3VycyBjYXNlIHR1cm5zIG9uIGV4YWN0bHkgdGhhdC5cbiAgJ3N1cHBvcnQuY29udGFjdC51cGdyYWRlJyxcbiAgJ3N1cHBvcnQuY29udGFjdC5kb3duZ3JhZGUnLFxuICAvLyBTdGFmZiBub3RlcyBvbiBhIGNhc2UuIEF1ZGl0ZWQgYmVjYXVzZSBhIG5vdGUgaXMgdGhlIHZlbmRvcidzIGludGVybmFsXG4gIC8vIGFzc2Vzc21lbnQgb2YgYSBjdXN0b21lciBhbmQgdGhlIG9ubHkgc3VyZmFjZSBvbiBhIGNhc2UgdGhlIHRlbmFudCBtdXN0XG4gIC8vIG5ldmVyIHNlZTsgdGhlIHRyYWlsIGNhcnJpZXMgTUVUQURBVEEgT05MWSAoY2FzZSBudW1iZXIsIG5vdGUgaWQsIGxlbmd0aClcbiAgLy8gYW5kIG5ldmVyIHRoZSBib2R5LCBzaW5jZSB0aGUgY2VudHJhbCB0cmFpbCBpcyByZWFkIGZhciBtb3JlIHdpZGVseSB0aGFuXG4gIC8vIHRoZSBzdXBwb3J0IHF1ZXVlIGlzLlxuICAnc3VwcG9ydC5jYXNlLm5vdGUnLFxuICAvLyBUaGUgY2FubmVkLXJlcGx5IGxpYnJhcnkuIE9ORSBhY3Rpb24gZm9yIGNyZWF0ZS9lZGl0L3JldGlyZSByYXRoZXIgdGhhblxuICAvLyB0aHJlZSwgYmVjYXVzZSB0aGUgdHJhaWwncyBxdWVzdGlvbiBoZXJlIGlzIFwid2hvIGNoYW5nZWQgdGhlIHdvcmRpbmcgdGhlXG4gIC8vIGRlc2sgc2VuZHMgY3VzdG9tZXJzXCIsIG5vdCB3aGljaCB2ZXJiIHRoZXkgdXNlZCDigJQgYGRldGFpbHNgIGNhcnJpZXMgdGhhdC5cbiAgLy8gU3lzdGVtLXdpZGUgcmF0aGVyIHRoYW4gcGVyLXRlbmFudCwgc28gdGhlc2Ugcm93cyBuYW1lIG5vIGFmZmVjdGVkIG9yZy5cbiAgJ3N1cHBvcnQuY2FubmVkLndyaXRlJyxcbiAgLy8gQmlsbGluZyAoYXBpL2JpbGxpbmcpIOKAlCBzdWJzY3JpcHRpb24gKyBlbnRpdGxlbWVudCBtdXRhdGlvbnMsIG1pcnJvcmVkIHRvIHRoZVxuICAvLyBjZW50cmFsIGF1ZGl0IHRyYWlsICh0aGVzZSBhbHNvIHdyaXRlIHRvIHRoZSBzZXJ2aWNlLWxvY2FsIGJpbGxpbmdfZXZlbnRzXG4gIC8vIGNvbGxlY3Rpb24pLiBgZGV0YWlsc2AgY2FycnkgcGxhbi90aWVyL2FkZG9uIGlkcyBvbmx5IOKAlCBuZXZlciBjYXJkL3BheW1lbnRcbiAgLy8gc2VjcmV0cyBvciBhbiBBV1MgYWNjb3VudCBpZC5cbiAgLy8gU3Vic2NyaXB0aW9uIGxpZmVjeWNsZSBhIENVU1RPTUVSIGRyaXZlcyAodGhlIGFkbWluIGNvdW50ZXJwYXJ0IGlzXG4gIC8vIGBiaWxsaW5nLnRpZXIub3ZlcnJpZGVgKTogc2VsZi1zZXJ2ZSBjcmVhdGUgKGRpcmVjdCBvciBNYXJrZXRwbGFjZSBjbGFpbSksXG4gIC8vIHBsYW4vaW50ZXJ2YWwgY2hhbmdlLCBjYW5jZWwtYXQtcGVyaW9kLWVuZCwgdW5kby1jYW5jZWwsIGNhc2NhZGUgZGVsZXRlLlxuICAnYmlsbGluZy5zdWJzY3JpcHRpb24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLnVwZGF0ZScsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5yZWFjdGl2YXRlJyxcbiAgJ2JpbGxpbmcuc3Vic2NyaXB0aW9uLmNhbmNlbCcsXG4gICdiaWxsaW5nLnN1YnNjcmlwdGlvbi5kZWxldGUnLFxuICAnYmlsbGluZy50aWVyLm92ZXJyaWRlJyxcbiAgLy8gQSBORUdPVElBVEVEIHN1cHBvcnQgc2l6ZSBmbG9vciByZXBsYWNpbmcgdGhlIGNvbXB1dGVkIHJhbXAuIFN5c3RlbS1vcmdcbiAgLy8gb25seSwgYW5kIGF1ZGl0ZWQgd2l0aCB0aGUgYWdyZWVkIFBSSUNFIGFuZCB0aGUgYWdyZWVkIFNFQVQgQ09VTlQgdG9nZXRoZXI6XG4gIC8vIGEgZGlzcHV0ZSBhYm91dCB3aGF0IHdhcyBzaWduZWQgZm9yIHR1cm5zIG9uIHRoYXQgcGFpciwgYW5kIHRoZSBwcmljZSBhbG9uZVxuICAvLyBjYW5ub3QgYW5zd2VyIFwiYXQgd2hhdCBzY2FsZVwiLlxuICAnYmlsbGluZy5zdXBwb3J0LWZsb29yLm92ZXJyaWRlJyxcbiAgLy8gQSBHUkFOVEVEIG9uZS10aW1lIHN1cHBvcnQgaW5jaWRlbnQg4oCUIGEgY29tbWVyY2lhbCBjb25jZXNzaW9uLCBub3QgYSBzYWxlLlxuICAvLyBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gcHVyY2hhc2UgcGF0aDogbW9udGhseSBzdXBwb3J0IGNhbmNlbHMgZnJlZWx5LCBzb1xuICAvLyBhbiBpbmNpZGVudCBwcmljZWQgYWJvdmUgYSBtb250aCBpcyBkb21pbmF0ZWQgYW5kIG9uZSBiZWxvdyBpdCBsb3NlcyBtb25leS5cbiAgLy8gVGhlIHJvdyBjYXJyaWVzIHRoZSBjb3VudCBhbmQgdGhlIHJlc3VsdGluZyBiYWxhbmNlLCB3aGljaCBpcyB3aGF0IGEgbGF0ZXJcbiAgLy8gcmV2aWV3IG9mIFwid2hvIGdhdmUgd2hhdCBhd2F5XCIgbmVlZHMuXG4gICdiaWxsaW5nLnN1cHBvcnQtaW5jaWRlbnQuZ3JhbnQnLFxuICAvLyBPcGVyYXRvci1vbmx5IHJlc2VlZCBvZiB0aGUgaW52b2ljZSBsZWRnZXIgZnJvbSB0aGUgcGF5bWVudCBwcm92aWRlcidzXG4gIC8vIGhpc3RvcnkgKFBPU1QgL2JpbGxpbmcvYWRtaW4vYmFja2ZpbGwpIOKAlCBtdXRhdGVzIGZpbmFuY2UgZGF0YSBmbGVldC13aWRlLlxuICAnYmlsbGluZy5hZGRvbi5hZGQnLFxuICAnYmlsbGluZy5hZGRvbi5yZW1vdmUnLFxuICAvLyBTeXN0ZW0taW5pdGlhdGVkIHJlbW92YWwgb2YgYSB0aWVyLWluY2x1ZGVkIGFkZC1vbiBvbiBhIHBsYW4gdXBncmFkZSAodGhlXG4gIC8vIGFjY291bnQncyBuZXcgdGllciBub3cgYnVuZGxlcyB0aGUgZmVhdHVyZSkg4oCUIGRpc3RpbmN0IGZyb20gYSB1c2VyLWluaXRpYXRlZFxuICAvLyBgcmVtb3ZlYCBzbyBmaW5hbmNlIGNhbiB0ZWxsIGFuIGF1dG8tcHJ1bmUgZnJvbSBhIGN1c3RvbWVyIGFjdGlvbi5cbiAgJ2JpbGxpbmcuYWRkb24ucHJ1bmUnLFxuICAvLyBEaXNjb3VudHMgKGRvY3MvYmlsbGluZy1kaXNjb3VudHMubWQpIOKAlCBtaW50L2lzc3VlL2FwcGx5L3JlbW92ZS9yZXZva2Ugb2YgYVxuICAvLyBwcmljZSBjb3Vwb24gb3IgdXNhZ2UgY3JlZGl0LiBgZGV0YWlsc2AgY2FycnkgdGhlIGRpc2NvdW50IGlkICsga2luZC92YWx1ZVxuICAvLyBvbmx5LCBuZXZlciB0aGUgb3BhcXVlIHRva2VuIG9yIHNpZ25pbmcga2V5LlxuICAnYmlsbGluZy5kaXNjb3VudC5nZW5lcmF0ZScsXG4gICdiaWxsaW5nLmRpc2NvdW50Lmlzc3VlJyxcbiAgJ2JpbGxpbmcuZGlzY291bnQuYXBwbHknLFxuICAnYmlsbGluZy5kaXNjb3VudC5yZW1vdmUnLFxuICAnYmlsbGluZy5kaXNjb3VudC5yZXZva2UnLFxuICAvLyBDYW1wYWlnbnMgKGRvY3MvYmlsbGluZy1kaXNjb3VudHMubWQpIOKAlCB0aGUgaWRlbnRpdHkgYSBzZXQgb2YgZGlzY291bnQgY29kZXNcbiAgLy8gYmVsb25ncyB0bywgY2FycnlpbmcgdGhlIGJ1ZGdldCwgd2luZG93IGFuZCBvbmUtcGVyLWFjY291bnQgcnVsZS4gQXV0aG9yaW5nXG4gIC8vIG9uZSBkZWNpZGVzIGhvdyBtdWNoIHRoZSBidXNpbmVzcyBtYXkgZ2l2ZSBhd2F5LCBzbyBlYWNoIGNoYW5nZSBpcyBhdWRpdGVkLlxuICAnYmlsbGluZy5jYW1wYWlnbi5jcmVhdGUnLFxuICAnYmlsbGluZy5jYW1wYWlnbi51cGRhdGUnLFxuICAnYmlsbGluZy5jYW1wYWlnbi5lbmQnLFxuICAvLyBQcm9tb3Rpb25zIChkb2NzL2JpbGxpbmctZGlzY291bnRzLm1kI3Byb21vdGlvbnMpIOKAlCBydWxlLWRyaXZlbiBhdXRvLWdyYW50XG4gIC8vIGNhbXBhaWducy4gYGRldGFpbHNgIGNhcnJ5IHRoZSBwcm9tb3Rpb24gaWQgKyBjZW50cy9ldmVudCBvbmx5LlxuICAnYmlsbGluZy5wcm9tb3Rpb24uY3JlYXRlJyxcbiAgJ2JpbGxpbmcucHJvbW90aW9uLnVwZGF0ZScsXG4gICdiaWxsaW5nLnByb21vdGlvbi5yZXZva2UnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24uZ3JhbnQnLFxuICAnYmlsbGluZy5wcm9tb3Rpb24uYWN0aXZhdGUnLFxuICAvLyBVc2FnZS1jcmVkaXQgcmVhbGl6YXRpb24g4oCUIGEgY3VzdG9tZXIvY29tcGxpYW5jZS12aXNpYmxlIHJlY29yZCBvZiBjcmVkaXRcbiAgLy8gbW92ZW1lbnQ6IGBjb25zdW1lZGAgKE1hcmtldHBsYWNlIG1ldGVyZWQgZHJhd2Rvd24pLCBgZXhoYXVzdGVkYCAoYmFsYW5jZSBoaXRcbiAgLy8gemVybyksIGFuZCBhIGNvbWJvIGVuZGluZy4gYGRldGFpbHNgIGNhcnJ5IGNlbnRzL2lkcyBvbmx5LCBubyBwYXltZW50IHNlY3JldHMuXG4gICdiaWxsaW5nLmNyZWRpdC5jb25zdW1lZCcsXG4gICdiaWxsaW5nLmNyZWRpdC5leGhhdXN0ZWQnLFxuICAnYmlsbGluZy5jb21iby5leHBpcmVkJyxcbiAgLy8gUmVwb3J0aW5nIChhcGkvcmVwb3J0aW5nKSDigJQgdGhlIHRocmVlIHJlcG9ydGluZyBtdXRhdGlvbnMgd2hvc2UgZWZmZWN0XG4gIC8vIG91dGxpdmVzIGEgcmVxdWVzdCBsb2c6IHRoZSBwZXItb3JnIGNvcnJlbGF0aW9uLXdpbmRvdyBjb25maWcgd3JpdGUsIGFcbiAgLy8gcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXIgKGl0IG1vdmVzIHRoZSBvcmcncyBET1JBIENGUi9NVFRSKSwgYW5kIHRoZVxuICAvLyBpbmJvdW5kIGJpbGxpbmfihpJyZXBvcnRpbmcgcmV0ZW50aW9uLWVudGl0bGVtZW50IHN5bmMgKGEgcmV0ZW50aW9uIGN1dCBpcyBhXG4gIC8vIGRhdGEtZGVzdHJveWluZyBjaGFuZ2UgYXBwbGllZCBieSB0aGUgbmV4dCBzd2VlcCkuIGBkZXRhaWxzYCBjYXJyeSB0aGVcbiAgLy8gc2V0dGluZ3Mvb3V0Y29tZSB2YWx1ZXMgb25seS5cbiAgJ3JlcG9ydGluZy5zZXR0aW5ncy51cGRhdGUnLFxuICAncmVwb3J0aW5nLmRlcGxveW1lbnQub3V0Y29tZScsXG4gICdyZXBvcnRpbmcucmV0ZW50aW9uLnN5bmMnLFxuICAvLyBTdGFrZWhvbGRlciByZXBvcnRzIOKAlCB0aGUgYWRkLW9uJ3MgYXV0aG9yaW5nIGFuZCBQVUJMSVNISU5HIHN1cmZhY2UuIFB1Ymxpc2hpbmdcbiAgLy8gaXMgdGhlIG1vbWVudCBpbnRlcm5hbCBkZWxpdmVyeSBudW1iZXJzIGxlYXZlIHRoZSBwbGF0Zm9ybSwgc28gdGhlIHdob2xlXG4gIC8vIG91dHdhcmQgcGF0aCBpcyBhdWRpdGFibGU6IHdoaWNoIHJlcG9ydCwgd2hpY2ggcGVyaW9kJ3MgZnJvemVuIHNuYXBzaG90LFxuICAvLyB3aGljaCB2ZXJzaW9uLCBhbmQgd2hvIGxldCBpdCBvdXQuIGBsaW5rLmNyZWF0ZWRgIC8gYGxpbmsucmV2b2tlZGAgY292ZXIgdGhlXG4gIC8vIFVSTHMgdGhhdCBsZXQgc29tZW9uZSB3aXRob3V0IGFuIGFjY291bnQgcmVhZCBpdDsgYHJlY2lwaWVudC5hZGRlZGAgL1xuICAvLyBgcmVjaXBpZW50LnJlbW92ZWRgIGNvdmVyIHdobyBpcyBvbiB0aGUgZGlzdHJpYnV0aW9uIGxpc3QsIHdoaWNoIGlzIHRoZSBvdGhlclxuICAvLyB3YXkgZGF0YSByZWFjaGVzIGEgcGVyc29uLiBgb3duZXJzaGlwLnRyYW5zZmVyYCBpcyBhIHByaXZpbGVnZSBtb3ZlOiBhXG4gIC8vIHNjaGVkdWxlZCBydW4gaXMgYXV0aG9yaXplZCBhcyBpdHMgT1dORVIsIHNvIGhhbmRpbmcgYSBkZWZpbml0aW9uIG92ZXIgaGFuZHNcbiAgLy8gb3ZlciB3aG9zZSBhY2Nlc3MgdGhlIG51bWJlcnMgYXJlIGNvbXB1dGVkIHdpdGguXG4gIC8vXG4gIC8vIERlbGliZXJhdGVseSBOT1QgYXVkaXRlZDogcmVhZGluZyBhIHNoYXJlZCByZXBvcnQuIFRoZSBhY2Nlc3MgaXMgbG9nZ2VkIGFuZFxuICAvLyBjb3VudGVkIHBlciBsaW5rLCBidXQgaXQgaXMgYW4gVU5BVVRIRU5USUNBVEVELCBleHRlcm5hbGx5LXRyaWdnZXJlZCBldmVudCDigJRcbiAgLy8gYW55b25lIGhvbGRpbmcgYSBVUkwgY291bGQgb3RoZXJ3aXNlIHdyaXRlIHVuYm91bmRlZCByb3dzIGludG8gdGhlIG9yZydzIGF1ZGl0XG4gIC8vIHRyYWlsLCB3aGljaCB0dXJucyBhIHJlYWQgaW50byBhIHdheSB0byBidXJ5IHRoZSBlbnRyaWVzIHRoYXQgbWF0dGVyLlxuICAncmVwb3J0aW5nLnJlcG9ydC5kZWZpbml0aW9uLmNyZWF0ZScsXG4gICdyZXBvcnRpbmcucmVwb3J0LmRlZmluaXRpb24udXBkYXRlJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQuZGVmaW5pdGlvbi5kZWxldGUnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5vd25lcnNoaXAudHJhbnNmZXInLFxuICAncmVwb3J0aW5nLnJlcG9ydC5wdWJsaXNoZWQnLFxuICAncmVwb3J0aW5nLnJlcG9ydC5yZXB1Ymxpc2hlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LmxpbmsuY3JlYXRlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LmxpbmsucmV2b2tlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlY2lwaWVudC5hZGRlZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlY2lwaWVudC5yZW1vdmVkJyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucG9saWN5LnVwZGF0ZScsXG4gIC8vIEEgZGVmaW5pdGlvbiBTVE9QUEVEIHByb2R1Y2luZyByZXBvcnRzIHdpdGhvdXQgYW55b25lIGFza2luZyBpdCB0bzogdGhlIG93bmVyXG4gIC8vIHdhcyBkZWFjdGl2YXRlZCBvciByZW1vdmVkLCBvciBsb3N0IHRoZSBwZXJtaXNzaW9uIGEgcnVuIGlzIGF1dGhvcml6ZWQgd2l0aC5cbiAgLy8gUmVjb3JkZWQgYmVjYXVzZSB0aGUgZWZmZWN0IGlzIHNpbGVudCDigJQgYSBtYW5hZ2VyIGZpbmRzIG91dCBieSBub3QgcmVjZWl2aW5nXG4gIC8vIHRoZSByZXBvcnQg4oCUIHNvIHRoZSB0cmFpbCBoYXMgdG8gc2F5IHdoaWNoIHJlcG9ydHMgc3RvcHBlZCBhbmQgd2h5LlxuICAncmVwb3J0aW5nLnJlcG9ydC5wYXVzZWQnLFxuICAvLyDigKZhbmQgc3RhcnRlZCBhZ2Fpbi4gSXRzIG93biBhY3Rpb24gcmF0aGVyIHRoYW4gYSBkZXRhaWwgb24gdGhlIHBhdXNlLCBiZWNhdXNlIHRoZVxuICAvLyBxdWVzdGlvbiBhIHJldmlld2VyIGFza3MgaXMgXCJ3YXMgdGhpcyBhY2NvdW50J3MgcmVwb3J0aW5nIG9mZiBiZXR3ZWVuIHRoZXNlIHR3b1xuICAvLyBkYXRlc1wiLCBhbmQgYW5zd2VyaW5nIGl0IGZyb20gYSBzaW5nbGUgYWN0aW9uJ3MgZGV0YWlscyBtZWFucyByZWFkaW5nIGV2ZXJ5IHJvdy5cbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVzdW1lZCcsXG4gIC8vIFRoZSBkcmFmdGluZyBoYWxmIG9mIGEgcnVuOiBhIGNvbXBvc2UvcmVnZW5lcmF0ZSBmcmVlemVzIHRoZSBvcmcncyBudW1iZXJzXG4gIC8vIGludG8gYSBydW4sIHRoZSBsZWFkJ3Mgbm90ZXMgYXJlIGVkaXRlZCBvbnRvIGl0IChtZXRhZGF0YSBvbmx5IOKAlCBsZW5ndGgsXG4gIC8vIG5ldmVyIHRoZSBwcm9zZSksIGFuZCBhbiBBSSBzdW1tYXJ5IGlzIGRyYWZ0ZWQgZnJvbSBpdCAodGhlIG51bWJlcnMgd2VudCB0b1xuICAvLyBhIHByb3ZpZGVyOyBgb3V0Y29tZWAgY2FycmllcyBhIHJlZnVzYWwpLiBBIHJlc2VuZCByZS1taW50cyBhIHJlY2lwaWVudCdzXG4gIC8vIGNvbmZpcm1hdGlvbiBjcmVkZW50aWFsLiBgdmVyaWZpZWRgIC8gYHVuc3Vic2NyaWJlZGAgYXJlIHRoZSBVTkFVVEhFTlRJQ0FURURcbiAgLy8gcmVjaXBpZW50J3Mgb3duIGFjdHMgKGFjdG9yIGBhbm9ueW1vdXNgLCBhIGhhc2hlZCBhZGRyZXNzIG9ubHkpOiBib3VuZGVkIGJ5XG4gIC8vIGNvbnN0cnVjdGlvbiDigJQgdGhlIHZlcmlmeSB0b2tlbiBpcyBzaW5nbGUtdXNlLCBhbmQgb25seSB0aGUgY2xpY2sgdGhhdFxuICAvLyBhY3R1YWxseSBzdG9wcyBkZWxpdmVyeSB3cml0ZXMgYW4gdW5zdWJzY3JpYmUgcm93LlxuICAncmVwb3J0aW5nLnJlcG9ydC5ydW4uY29tcG9zZScsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJ1bi5ub3RlcycsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJ1bi5zdW1tYXJ5JyxcbiAgJ3JlcG9ydGluZy5yZXBvcnQucmVjaXBpZW50LnJlc2VuZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlY2lwaWVudC52ZXJpZmllZCcsXG4gICdyZXBvcnRpbmcucmVwb3J0LnJlY2lwaWVudC51bnN1YnNjcmliZWQnLFxuICAvLyBNQUNISU5FIGluZ2VzdCAoYHJlcG9ydGluZzppbmdlc3RgIHNjb3BlKS4gT25lIGBiYXRjaGAgcm93IHBlciBQT1NUIHRvIHRoZVxuICAvLyBldmVudCAvIGluY2lkZW50IC8gaW5nZXN0LWhlYWx0aCByb3V0ZXMg4oCUIGNvdW50cyBwbHVzIGNhcHBlZCBwaXBlbGluZSxcbiAgLy8gZXhlY3V0aW9uLCBFdmVudEJyaWRnZS1ldmVudCBhbmQgaW5jaWRlbnQgaWQgbGlzdHMsIGF0dHJpYnV0ZWQgdG8gdGhlXG4gIC8vIGNyZWRlbnRpYWwncyBwcmluY2lwYWwg4oCUIHNvIGEgZm9yZ2VkIG9yIG1pc3JvdXRlZCB3cml0ZSBuYW1lcyB0aGUga2V5IGJlaGluZFxuICAvLyBpdC4gYHJlamVjdGVkYCBpcyB0aGUgdGVuYW5jeSByZWZ1c2FsIGluc2lkZSBhIGJhdGNoIChldmVudHMgbmFtaW5nIGFub3RoZXJcbiAgLy8gb3JnJ3MgcGlwZWxpbmVzKTogYSBGQUlMVVJFIHJvdyB3aXRoIHRoZSBvZmZlbmRpbmcgcGlwZWxpbmUgaWRzLCBuZXZlciB0aGVcbiAgLy8gb3JnIHRoZXkgYmVsb25nIHRvLiBgaW5jaWRlbnQucmVjb3JkYCBpcyBvbmUgaW5jaWRlbnQgdGhhdCBpcyBuZXcgb3IgYWN0dWFsbHlcbiAgLy8gY2hhbmdlZCAoYmVmb3JlL2FmdGVyKTsgbGlrZSBgZGVwbG95bWVudC5vdXRjb21lYCBpdCBtb3ZlcyBDRlIvTVRUUi4gQW5cbiAgLy8gdW5jaGFuZ2VkIHJlcGVhdC1pbnRlcnZhbCByZS1wb3N0IHdyaXRlcyBub25lLlxuICAncmVwb3J0aW5nLmluZ2VzdC5iYXRjaCcsXG4gICdyZXBvcnRpbmcuaW5nZXN0LnJlamVjdGVkJyxcbiAgJ3JlcG9ydGluZy5pbmNpZGVudC5yZWNvcmQnLFxuICAvLyBEZW5pZWQgYXV0aG9yaXphdGlvbiBhdHRlbXB0IOKAlCBlbWl0dGVkIGJlc3QtZWZmb3J0IGJ5IHRoZSBzaGFyZWRcbiAgLy8gYHJlcXVpcmVQZXJtaXNzaW9uYCAvIGByZXF1aXJlU3lzdGVtQWRtaW5gIGdhdGUgd2hlbiBhIHN0YXRlLWNoYW5naW5nXG4gIC8vIChub24tR0VUKSByZXF1ZXN0IGlzIHJlamVjdGVkLCBzbyBwcm9iaW5nL2VzY2FsYXRpb24gYXR0ZW1wdHMgYXJlIHZpc2libGVcbiAgLy8gcmF0aGVyIHRoYW4gaW52aXNpYmxlLiBgZGV0YWlsc2AgY2FycmllcyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbiArIHBhdGg7XG4gIC8vIGBvdXRjb21lYCBpcyAnZmFpbHVyZScuXG4gICdhdXRoei5kZW5pZWQnLFxuICAvLyBcIkFza1wiIGFzc2lzdGFudCBhY3Rpdml0eSDigJQgdmlzaWJpbGl0eSBpbnRvIHdoYXQgdGhlIGFzc2lzdGFudCBkaWQgb24gYSB1c2VyJ3NcbiAgLy8gYmVoYWxmLiBgYXNrLnF1ZXJ5YCBpcyBhIHJlYWQtb25seSBob3ctdG8gdHVybjsgYGFzay5hZ2VudC50dXJuYCBpcyBhIHRvb2wtY2FsbGluZ1xuICAvLyB0dXJuLiBgZGV0YWlsc2AgY2FycnkgU0FGRSBNRVRBREFUQSBPTkxZICh0b29scyB1c2VkLCBwcm9wb3NhbCBraW5kcywgcXVlcnlcbiAgLy8gbGVuZ3RoLCBvdXRjb21lKSwgbmV2ZXIgdGhlIHJhdyBxdWVyeSB0ZXh0LlxuICAnYXNrLnF1ZXJ5JyxcbiAgJ2Fzay5hZ2VudC50dXJuJyxcbiAgLy8gQSByZWFkZXIgcmF0aW5nIGFuIGFuc3dlciwgb3IgYSBoZWxwIHNlYXJjaCB0aGF0IGZvdW5kIG5vdGhpbmcuIFRoZSBPTkxZXG4gIC8vIHNpZ25hbCBmb3Igd2hpY2ggZG9jcyB0aGUgYXNzaXN0YW50IGFuc3dlcnMgYmFkbHkgZnJvbSDigJQgdGhlIHR1cm4gaXRzZWxmXG4gIC8vIGNhbm5vdCB0ZWxsIGEgZ29vZCBhbnN3ZXIgZnJvbSBhIGNvbmZpZGVudCB3cm9uZyBvbmUuIGBkZXRhaWxzYCBjYXJyeSB0aGVcbiAgLy8gcmF0aW5nIGFuZCB0aGUgRE9DIElEUyBjaXRlZCAoYGF1dGhlbnRpY2F0aW9uLm1kYCksIG5ldmVyIHRoZSBxdWVzdGlvbjogdGhlXG4gIC8vIGRvYyBpcyB3aGF0IGdldHMgZml4ZWQsIGFuZCBpdCBpcyBub3QgdXNlci1lbnRlcmVkIHRleHQuXG4gICdhc2suZmVlZGJhY2snLFxuICAvLyBPbmUgQUkgZ2VuZXJhdGlvbiBvZiBhIHBpcGVsaW5lIC8gcGx1Z2luIGRyYWZ0IChgL3BpcGVsaW5lcy9nZW5lcmF0ZSpgLFxuICAvLyBgL3BsdWdpbnMvZ2VuZXJhdGUqYCksIHN1Y2Nlc3Mgb3IgZmFpbHVyZSAoaW5jbC4gY2xpZW50IGFib3J0KS4gYGRldGFpbHNgIGNhcnJ5XG4gIC8vIFNBRkUgTUVUQURBVEEgT05MWTogdGhlIHJvdXRlLCB0aGUgcHJvbXB0IExFTkdUSCwgdGhlIHNoYXJlZCBBSSB1c2FnZSBibG9ja1xuICAvLyAoYGFpYDogdGhlIHByb3ZpZGVyIGFuZCBtb2RlbCB0aGF0IEFOU1dFUkVEIGFmdGVyIGFueSBmYWlsb3ZlciwgYGZhbGxiYWNrRnJvbWAsXG4gIC8vIHdob3NlIGtleSBwYWlkIOKAlCBga2V5U291cmNlYCByZXF1ZXN0L29yZy9wbGF0Zm9ybSDigJQgdG9rZW5zIGluL291dC9jYWNoZWQsIHRoZVxuICAvLyBwcm9tcHQgdmVyc2lvbiwgaG93IHRoZSBgYWlDYWxsc2Agc2xvdCBzZXR0bGVkKSBhbmQgdGhlIHJlc2VydmF0aW9uJ3NcbiAgLy8gYHF1b3RhYCB2aWV3IOKAlCBuZXZlciB0aGUgcHJvbXB0LCB0aGUgZ2VuZXJhdGVkIG91dHB1dCwgb3IgYSBrZXkuXG4gICdwaXBlbGluZS5haS5nZW5lcmF0ZScsXG4gICdwbHVnaW4uYWkuZ2VuZXJhdGUnLFxuICAvLyBQbHVnaW4gZWNvc3lzdGVtIChkb2NzL3J1bmJvb2tzL2Vjb3N5c3RlbS1tb2RlcmF0aW9uLm1kKS4gR292ZXJuYW5jZSBhY3Rpb25zXG4gIC8vIGFyZSByZWNvcmRlZCB3aXRoIGBvcmdJZGAgPSB0aGUgc3lzdGVtIG9yZzsgYGFmZmVjdGVkT3JnSWRgIGlzIHRoZVxuICAvLyBwdWJsaXNoZXIncyBvcmcgKGxpc3RpbmcvdmVyc2lvbi9yZXZpZXcvYWR2aXNvcnkvcHVibGlzaGVyIG1vZGVyYXRpb24pIG9yXG4gIC8vIHRoZSBpbnN0YWxsaW5nIG9yZyAoaW5zdGFsbHMgKyBwb2xpY3kpLiBBbm9ueW1vdXMgc3VibWlzc2lvbnMgdXNlIHRoZVxuICAvLyBgQU5PTllNT1VTX0FDVE9SX0lEYCBhY3RvciB3aXRoIGBkZXRhaWxzLnN1Ym1pc3Npb25JZGAuIGBkZXRhaWxzYCBjYXJyeSBpZHMsXG4gIC8vIHZlcnNpb25zLCBkaWdlc3RzLCB0aWVyLCBzdGF0ZSBhbmQgcmVhc29uIGNvZGVzIG9ubHkg4oCUIG5ldmVyIHJldmlldyBib2RpZXMsXG4gIC8vIFJFQURNRSBjb250ZW50LCBzZWNyZXRzIG9yIGVtYWlscy5cbiAgLy8gUHVibGlzaGVycy5cbiAgJ3B1Ymxpc2hlci5jcmVhdGUnLFxuICAncHVibGlzaGVyLnVwZGF0ZScsXG4gICdwdWJsaXNoZXIudGVybXMuYWNjZXB0JyxcbiAgJ3B1Ymxpc2hlci52ZXJpZnkucmVxdWVzdCcsXG4gICdwdWJsaXNoZXIudmVyaWZ5LmFwcHJvdmUnLFxuICAncHVibGlzaGVyLnZlcmlmeS5yZWplY3QnLFxuICAncHVibGlzaGVyLnRpZXIuY2hhbmdlJyxcbiAgJ3B1Ymxpc2hlci5zdXNwZW5kJyxcbiAgJ3B1Ymxpc2hlci51bnN1c3BlbmQnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLnJlcXVlc3QnLFxuICAncHVibGlzaGVyLnRyYW5zZmVyLmFjY2VwdCcsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuZGVjbGluZScsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIuYXBwcm92ZScsXG4gICdwdWJsaXNoZXIudHJhbnNmZXIucmVqZWN0JyxcbiAgJ3B1Ymxpc2hlci5wcm9maWxlLWNoYW5nZS5hcHByb3ZlJyxcbiAgJ3B1Ymxpc2hlci5wcm9maWxlLWNoYW5nZS5yZWplY3QnLFxuICAvLyBQdWJsaXNoIHJlcXVlc3RzICh0ZW5hbnQg4oaSIHN5c3RlbSBvcmcpLiBgZGV0YWlscy5raW5kYCBuYW1lcyB0aGUgcmVxdWVzdC5cbiAgJ3BsdWdpbi5yZXF1ZXN0LnN1Ym1pdCcsXG4gICdwbHVnaW4ucmVxdWVzdC53aXRoZHJhdycsXG4gICdwbHVnaW4ucmVxdWVzdC5hcHByb3ZlJyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LnNlY29uZC1hcHByb3ZlJyxcbiAgJ3BsdWdpbi5yZXF1ZXN0LnJlamVjdCcsXG4gICdwbHVnaW4ucmVxdWVzdC5hdXRvLWFwcHJvdmUnLFxuICAvLyBMaXN0aW5ncyBhbmQgdmVyc2lvbnMgKHN5c3RlbSBvcmcsIGV4Y2VwdCB0aGUgdGVuYW50IHBhdXNlKS5cbiAgJ3BsdWdpbi5saXN0aW5nLnB1Ymxpc2gnLFxuICAvLyBOT1RFOiB0aGVyZSBpcyBubyBgcGx1Z2luLmxpc3RpbmcudW5saXN0YC4gV2l0aGRyYXdhbCBpcyBhbHJlYWR5IGV4cHJlc3NlZCBieVxuICAvLyBgcGx1Z2luLmxpc3Rpbmcuc3RhdGUuY2hhbmdlYCAoYHVubWFpbnRhaW5lZGAgLyBgc3VzcGVuZGVkYCAvIGBsaXN0ZWRgKSxcbiAgLy8gd2hpY2ggaXMgdGhlIGFjdGlvbiB0aGUgY29kZSBhY3R1YWxseSBlbWl0cywgc28gYHVubGlzdGAgd2FzIGEgc2Vjb25kIG5hbWVcbiAgLy8gZm9yIGEgdGhpbmcgdGhhdCBoYXMgb25lIOKAlCBhbmQgYSBuZXZlci1lbWl0dGVkIG9uZSBhdCB0aGF0LlxuICAncGx1Z2luLmxpc3RpbmcudXBkYXRlJyxcbiAgJ3BsdWdpbi5saXN0aW5nLnN0YXRlLmNoYW5nZScsXG4gICdwbHVnaW4ubGlzdGluZy5wYXVzZScsXG4gICdwbHVnaW4ubGlzdGluZy51bnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnBhdXNlJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLnlhbmsnLFxuICAncGx1Z2luLnZlcnNpb24udW55YW5rJyxcbiAgJ3BsdWdpbi52ZXJzaW9uLmRlcHJlY2F0ZScsXG4gIC8vIFJldGlyaW5nIGEgdmVyc2lvbidzIHJlZ2lzdHJ5IGltYWdlIHRvIHJlY2xhaW0gYHN0b3JhZ2VCeXRlc2AuIERpc3RpbmN0XG4gIC8vIGZyb20gdGhlIGZvdXIgYWJvdmUsIHdoaWNoIGNoYW5nZSB3aGV0aGVyIGEgdmVyc2lvbiBSRVNPTFZFUyBhbmQgZGVsZXRlXG4gIC8vIG5vdGhpbmcsIGFuZCBmcm9tIGByZWdpc3RyeS5pbWFnZS5kZWxldGVgL2ByZWdpc3RyeS50YWcuZGVsZXRlYCwgd2hpY2ggYXJlXG4gIC8vIHRoZSByZWdpc3RyeSdzIG93biBvcGVyYXRvci1zaWRlIHRyYWlsLiBUaGlzIGlzIGEgdGVuYW50IGZyZWVpbmcgc3BhY2UsIGFuZFxuICAvLyB0aGUgb25seSBhdWRpdGVkIGFjdGlvbiB0aGF0IGNhbiByZWR1Y2UgYW4gb3JnJ3Mgc3RvcmFnZSBmaWd1cmUg4oCUIHNvIGl0c1xuICAvLyByb3cgY2FycmllcyB0aGUgYnl0ZXMgaXQgZnJlZWQsIHdoaWNoIGNhbm5vdCBiZSByZWNvdmVyZWQgYWZ0ZXJ3YXJkcy5cbiAgJ3BsdWdpbi52ZXJzaW9uLnBydW5lJyxcbiAgLy8gTk9URTogbm8gYHBsdWdpbi5jb2xsZWN0aW9uLnVwZGF0ZWAuIGBlY29zeXN0ZW1fY29sbGVjdGlvbnNgIHdhcyBkZWxldGVkIChzZWVcbiAgLy8gdGhlIHRvbWJzdG9uZSBpbiBgc2NoZW1hL2Vjb3N5c3RlbS50c2ApIGJlY2F1c2Ugbm90aGluZyBldmVyIHdyb3RlIG9yIHJlYWRcbiAgLy8gb25lOyB0aGlzIGRlY2xhcmF0aW9uIG91dGxpdmVkIHRoZSB0YWJsZSBpdCBhdWRpdGVkLlxuICAvLyBFY29zeXN0ZW0gY29uZmlndXJhdGlvbiAoc3lzdGVtIG9yZykuXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmNyZWF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLnVwZGF0ZScsXG4gICdlY29zeXN0ZW0uYXV0by1hcHByb3ZhbC1ydWxlLmRlbGV0ZScsXG4gICdlY29zeXN0ZW0ucmVzZXJ2ZWQtbmFtZS51cGRhdGUnLFxuICAvLyBUaGUgb25lLXRpbWUgQk9PVFNUUkFQIGV4Y2VwdGlvbiAoYXV0by1hcHByb3ZhbCBvZiB0aGUgaW5pdGlhbCBPZmZpY2lhbFxuICAvLyBjYXRhbG9nKSBvcGVuaW5nIG9uIHRoZSBmaXJzdCBPZmZpY2lhbCByZXF1ZXN0LCBhbmQgY2xvc2luZyBmb3IgZ29vZFxuICAvLyAoYGRldGFpbHMucmVhc29uYDogd2luZG93X2VsYXBzZWQgLyBsaXN0aW5nc19leGlzdCAvIGEgbWFuYWdlciBkZWNpc2lvbjtcbiAgLy8gYGRldGFpbHMuYXBwcm92ZWRgOiBob3cgbWFueSByZXF1ZXN0cyByb2RlIGl0KS5cbiAgJ2Vjb3N5c3RlbS5ib290c3RyYXAub3BlbicsXG4gICdlY29zeXN0ZW0uYm9vdHN0cmFwLmNsb3NlJyxcbiAgLy8gTk9URTogbm8gYGVjb3N5c3RlbS5zbGEudXBkYXRlYC4gVGhlIGxhbmUgU0xBcyBhcmUgSEFSRENPREVEIChzdGFuZGFyZCA0OGgsXG4gIC8vIHNlY3VyaXR5LWZpeCA0aCBpbiBgc2VydmljZXMvZWNvc3lzdGVtL3NsYS50c2ApIHdpdGggbm8gc2V0dGluZ3Mgc3VyZmFjZSwgc29cbiAgLy8gdGhlcmUgaXMgbm8gbXV0YXRpb24gdG8gYXVkaXQuIE1ha2luZyB0aGVtIG9wZXJhdG9yLXR1bmFibGUgaXMgdGhlIGNoYW5nZVxuICAvLyB0aGF0IHNob3VsZCByZS1hZGQgdGhpcy5cbiAgLy8gUHVibGljIHJlZ2lzdHJ5IG5hbWVzcGFjZSAoYHB1YmxpYy8qYCk6IGNvcHkgKyBzaWduICsgYXR0ZXN0IG9uIHB1Ymxpc2gsXG4gIC8vIHRoZSB0aWVyLWNoYW5nZS9zdXNwZW5zaW9uIHJlLXNpZ24gam9iLCB0YWcgcmVtb3ZhbCBvbiB5YW5rL3Rha2Vkb3duLCBhbmRcbiAgLy8gdGhlIHJldGVudGlvbiBzd2VlcC5cbiAgJ3JlZ2lzdHJ5LmltYWdlLnB1Ymxpc2gnLFxuICAncmVnaXN0cnkuaW1hZ2UucmVzaWduJyxcbiAgJ3JlZ2lzdHJ5LmltYWdlLnlhbmsnLFxuICAncmVnaXN0cnkuaW1hZ2UuZ2MnLFxuICAvLyBJbnN0YWxscyBhbmQgdGhlIGluc3RhbGxpbmcgb3JnJ3MgY29uc3VtcHRpb24gcG9saWN5IChvcmctbG9jYWwpLlxuICAncGx1Z2luLmluc3RhbGwucmVxdWVzdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5hcHByb3ZlJyxcbiAgJ3BsdWdpbi5pbnN0YWxsLmRlbnknLFxuICAncGx1Z2luLmluc3RhbGwuY3JlYXRlJyxcbiAgJ3BsdWdpbi5pbnN0YWxsLnVwZ3JhZGUnLFxuICAvLyBBIG1lbWJlcidzIHJlcXVlc3QgdG8gY2hhbmdlIGFuIGluc3RhbGwgcGFzdCB3aGF0IHRoZXkgbWF5IGRvIGFsb25lLCBhbmQgaXRzIGRlY2lzaW9uLlxuICAncGx1Z2luLmluc3RhbGwuY2hhbmdlLXJlcXVlc3QnLFxuICAncGx1Z2luLmluc3RhbGwuY2hhbmdlLWFwcHJvdmUnLFxuICAncGx1Z2luLmluc3RhbGwuY2hhbmdlLXJlamVjdCcsXG4gICdwbHVnaW4uaW5zdGFsbC5yZW1vdmUnLFxuICAnb3JnLnBsdWdpbi1pbnN0YWxsLXBvbGljeS51cGRhdGUnLFxuICAvLyBBbiB1cGxvYWQgUkVGVVNFRCBiZWNhdXNlIGl0cyBuYW1lIHdvdWxkIG92ZXJyaWRlIHNvbWV0aGluZyB0aGUgb3JnIGFscmVhZHlcbiAgLy8gcmVzb2x2ZXMg4oCUIGEgbGlzdGluZywgb3IgYSB0ZWFtJ3MgcGFyZW50LW9yZyBwbHVnaW4g4oCUIGFuZCB0aGUgY29uc3VtcHRpb25cbiAgLy8gcG9saWN5IHNheXMgYHNoYWRvd2luZzogZGVueWAuIEF1ZGl0ZWQgYmVjYXVzZSBhIHJlZnVzYWwgb3RoZXJ3aXNlIHJldHVybnNcbiAgLy8gYW4gZXJyb3IgdG8gdGhlIGNhbGxlciBhbmQgbGVhdmVzIG5vdGhpbmcgYmVoaW5kOiBhbiBhdHRlbXB0IHRvIGRlZmluZVxuICAvLyBgdHJpdnlgIG92ZXIgdGhlIE9mZmljaWFsIHNjYW5uZXIgaXMgZXhhY3RseSB0aGUgdGhpbmcgc29tZW9uZSBzaG91bGQgYmVcbiAgLy8gYWJsZSB0byBmaW5kIGFmdGVyd2FyZHMuIGBkZXRhaWxzYCBjYXJyeSB0aGUgbmFtZSBhbmQgd2hhdCBpdCB3b3VsZCBoYXZlXG4gIC8vIG92ZXJyaWRkZW4uXG4gICdwbHVnaW4uc2hhZG93aW5nLmRlbmllZCcsXG4gIC8vIFJldmlld3MgYW5kIHJlcGxpZXMuXG4gICdwbHVnaW4ucmV2aWV3LmNyZWF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnVwZGF0ZScsXG4gICdwbHVnaW4ucmV2aWV3LmRlbGV0ZScsXG4gICdwbHVnaW4ucmV2aWV3LnJlcG9ydCcsXG4gICdwbHVnaW4ucmV2aWV3LmhvbGQnLFxuICAncGx1Z2luLnJldmlldy5yZWxlYXNlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVtb3ZlJyxcbiAgJ3BsdWdpbi5yZXZpZXcuYW5vbnltaXplJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkudXBkYXRlJyxcbiAgJ3BsdWdpbi5yZXZpZXcucmVwbHkuZGVsZXRlJyxcbiAgLy8gQW5vbnltb3VzIHN1Ym1pc3Npb25zLlxuICAncGx1Z2luLnN1Ym1pc3Npb24uY3JlYXRlJyxcbiAgJ3BsdWdpbi5zdWJtaXNzaW9uLnZlcmlmeScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5nYXRlLWZhaWwnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uYXBwcm92ZScsXG4gICdwbHVnaW4uc3VibWlzc2lvbi5yZWplY3QnLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uY2xhaW0nLFxuICAncGx1Z2luLnN1Ym1pc3Npb24uZXhwaXJlJyxcbiAgLy8gU2VjdXJpdHkgYWR2aXNvcmllcyAocHVibGlzaC93aXRoZHJhdyBhcmUgc3lzdGVtLW9yZyBvbmx5OyB1cGRhdGUgPSBhXG4gIC8vIG1vZGVyYXRvciBlZGl0aW5nIGEgZHJhZnQgYmVmb3JlIGl0IGlzIHB1Ymxpc2hlZCkuXG4gICdwbHVnaW4uYWR2aXNvcnkuY3JlYXRlJyxcbiAgJ3BsdWdpbi5hZHZpc29yeS51cGRhdGUnLFxuICAncGx1Z2luLmFkdmlzb3J5LnB1Ymxpc2gnLFxuICAncGx1Z2luLmFkdmlzb3J5LndpdGhkcmF3JyxcbiAgLy8gUGVyLW9yZyBwbHVnaW4gc2VjdXJpdHkgbm90aWZpY2F0aW9ucyAocGx1Z2luIHNjYW4gZ2F0ZXMpOiB0aGUgc2V0dGluZ3NcbiAgLy8gKHJlY2lwaWVudHMsIGRpZ2VzdCwgd2ViaG9vaywgZXh0ZXJuYWwgYWRkcmVzcyDigJQgY2hhbmdlZCBmaWVsZCBuYW1lcyBhbmRcbiAgLy8gdGhlIHdlYmhvb2sgaG9zdCBvbmx5LCBuZXZlciB0aGUgc2VjcmV0IG9yIHRoZSBhZGRyZXNzKSwgYW4gZXh0ZXJuYWxcbiAgLy8gYWRkcmVzcyBjb25maXJtZWQgdGhyb3VnaCBpdHMgZW1haWxlZCBzaW5nbGUtdXNlIGxpbmssIGFuZCBhIHRlc3Qgc2VuZC5cbiAgJ3BsdWdpbi5zZWN1cml0eV9ub3RpZmljYXRpb25zLnVwZGF0ZScsXG4gICdwbHVnaW4uc2VjdXJpdHlfbm90aWZpY2F0aW9ucy5leHRlcm5hbF9lbWFpbC52ZXJpZnknLFxuICAncGx1Z2luLnNlY3VyaXR5X25vdGlmaWNhdGlvbnMudGVzdCcsXG4gIC8vIEEgZ2F0ZS1yZWZ1c2VkIGltYWdlIEtFUFQgZnJvbSB0aGUgc2V0dXAgY2F0YWxvZyBsb2FkLCBwcm9tb3RlZCB0byBhXG4gIC8vIHZlcnNpb24gd2l0aG91dCBhIHJlYnVpbGQgKHN5c3RlbSBvcmcsIGFmdGVyIGEgZml4IHVwc3RyZWFtIG9yIGFuXG4gIC8vIGFkdmlzb3J5LWlkIHdhaXZlcikg4oCUIG9yIHJlZnVzZWQgYWdhaW4gYmVjYXVzZSB0aGUgQ1VSUkVOVCBnYXRlcyBzdGlsbFxuICAvLyBmYWlsIGl0LiBgZGV0YWlsc2AgY2FycnkgbmFtZS92ZXJzaW9uL2RpZ2VzdCBhbmQgdGhlIGZpbmRpbmdzLlxuICAncGx1Z2luLnNldHVwX2ltYWdlLnByb21vdGVkJyxcbiAgJ3BsdWdpbi5zZXR1cF9pbWFnZS5wcm9tb3RlX3JlZnVzZWQnLFxuICAvLyBBIGdhdGUtcmVmdXNlZCBzZXR1cC1sb2FkIGltYWdlIEtFUFQgKHNpZ25lZCwgaW4gdGhlIHJlZ2lzdHJ5KSBmb3IgbGF0ZXJcbiAgLy8gcHJvbW90aW9uIChgZGV0YWlsc2A6IGRpZ2VzdCwgcmVmdXNhbCBjb2RlLCBleHBpcmVzQXQpIOKAlCBhbmQgaXRzIHJvd1xuICAvLyBkcm9wcGVkIGJ5IHRoZSBzd2VlcCAoYGRldGFpbHMucmVhc29uYDogZXhwaXJlZCAvIHN1cGVyc2VkZWQpLlxuICAncGx1Z2luLnNldHVwX2ltYWdlLmtlcHQnLFxuICAncGx1Z2luLnNldHVwX2ltYWdlLmRpc2NhcmRlZCcsXG4gIC8vIEEgUElQRUxJTkUncyB0cmlhZ2Ugb2YgaXRzIGV4cG9zdXJlIHRvIGEgdnVsbmVyYWJsZSBwbHVnaW4gdmVyc2lvbjogYVxuICAvLyB0aW1lLWJveGVkIHJpc2sgYWNjZXB0YW5jZSAocmVhc29uICsgZXhwaXJ5LCB0aGUgYWNjZXB0ZWQgZmluZGluZyBrZXlzIGFuZFxuICAvLyB3aGV0aGVyIEtFViBmaW5kaW5ncyB3ZXJlIGFjY2VwdGVkKSwgYSBmYWxzZS1wb3NpdGl2ZSBkaXNtaXNzYWwsIG9yIGFcbiAgLy8gcmVvcGVuLiBBbiBhY3RpdmUgYWNjZXB0YW5jZSBleGVtcHRzIHRoYXQgcGlwZWxpbmUncyBsb29rdXBzIGFuZCBydW50aW1lXG4gIC8vIGNoZWNrcyBmcm9tIHRoZSBmbGFnIC8gS0VWIC8gSGlnaC1mbG9vciByZWZ1c2FscyBmb3IgdGhvc2UgZmluZGluZ3Mgb25seS5cbiAgJ3BpcGVsaW5lLnZ1bG4uYWNjZXB0ZWQnLFxuICAncGlwZWxpbmUudnVsbi5mYWxzZV9wb3NpdGl2ZScsXG4gICdwaXBlbGluZS52dWxuLnJlb3BlbmVkJyxcbiAgLy8gQSBwaXBlbGluZSdzIHJ1bnRpbWUgY2hlY2sgZ3JhZGVkIG9uZSBvZiBpdHMgcnVubmluZyBpbWFnZXMgYGVycm9yYCBvclxuICAvLyBsb3VkZXIgKGBkZXRhaWxzYDogc3RlcEtleSwgZGlnZXN0LCByZWFzb24gY29kZXMsIGV4ZWN1dGlvbklkIHdoZW4gc2VudCkuXG4gICdwaXBlbGluZS5ydW50aW1lX2NoZWNrLmZsYWdnZWQnLFxuICAvLyBBIHBpcGVsaW5lJ3MgcGx1Z2luIHN0ZXBzIG1vdmVkIHRvIG5ld2VyIHZlcnNpb25zIHRocm91Z2ggdGhlIHVwZ3JhZGVcbiAgLy8gZmxvdyAocHJldmlldyDihpIgYXBwbHk7IGBkZXRhaWxzYCBjYXJyeSB0aGUgc3RlcHMsIGZyb20g4oaSIHRvIHZlcnNpb25zKSwgYW5kIGFcbiAgLy8gcGlwZWxpbmUtcnVuIHNlY3VyaXR5IHNjYW5uZXIgcmVwb3J0IHVwbG9hZGVkIGZvciBhIHBpcGVsaW5lIChgZGV0YWlsc2A6XG4gIC8vIHRvb2wsIGZvcm1hdCwgc3RhZ2UsIHRoZSBmaW5kaW5nIGNvdW50cyDigJQgbmV2ZXIgdGhlIGZpbmRpbmdzIHRoZW1zZWx2ZXMpLlxuICAncGlwZWxpbmUucGx1Z2luLnVwZ3JhZGVkJyxcbiAgJ3BpcGVsaW5lLnNlY3VyaXR5X3JlcG9ydC51cGxvYWQnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmVtb3RlQXVkaXRBY3Rpb24gPSB0eXBlb2YgUkVNT1RFX0FVRElUX0FDVElPTlNbbnVtYmVyXTtcblxuLyoqIFdoZXRoZXIgYHZhbHVlYCBpcyBhbiBhY3Rpb24gYSByZW1vdGUgc2VydmljZSBtYXkgZW1pdCAodGhlIGluZ2VzdCBhbGxvdy1saXN0KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlbW90ZUF1ZGl0QWN0aW9uKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBSZW1vdGVBdWRpdEFjdGlvbiB7XG4gIHJldHVybiAoUkVNT1RFX0FVRElUX0FDVElPTlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cbiJdfQ==
@@ -109,4 +109,11 @@ export const SUBMISSION_STATUSES = [
109
109
  export const PLUGIN_SECURITY_RECIPIENT_MODES = ['writers', 'users'];
110
110
  /** How rescan findings (N31) are batched; blocked builds (N30) are always immediate. */
111
111
  export const PLUGIN_SECURITY_DIGEST_MODES = ['immediate', 'daily', 'weekly'];
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS12b2NhYnVsYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3dpcmUtdm9jYWJ1bGFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7R0FTRztBQUVILGdGQUFnRjtBQUNoRixtQkFBbUI7QUFDbkIsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFHekUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRzVELHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsSUFBSSxFQUFFLEtBQUs7SUFDWCxVQUFVLEVBQUUsYUFBYTtJQUN6QixPQUFPO0lBQ1AsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSztJQUN4QixJQUFJLEVBQUUsT0FBTztJQUNiLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVTtJQUNqQyxTQUFTLEVBQUUsU0FBUztJQUNwQixVQUFVLEVBQUUsVUFBVTtDQUNkLENBQUM7QUFHWCxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBNEMsQ0FBQztBQUV2SCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFVLENBQUM7QUFHNUQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUd6RCxnRkFBZ0Y7QUFDaEYsV0FBVztBQUNYLGdGQUFnRjtBQUVoRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxjQUFjLEVBQUUs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LFVBQVUsRUFBRSxXQUFXLENBQVUsQ0FBQztBQUdwRyxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQVUsQ0FBQztBQUc1RixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBR2xGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFVLENBQUM7QUFHNUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQVUsQ0FBQztBQUc1Rjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTO0NBQzNHLENBQUM7QUFHWCxnRkFBZ0Y7QUFDaEYsMENBQTBDO0FBQzFDLGdGQUFnRjtBQUVoRjsyRUFDMkU7QUFDM0UsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFHN0Usd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIENsb3NlZCBzdHJpbmcgdm9jYWJ1bGFyaWVzIHRoYXQgY3Jvc3MgdGhlIHdpcmUgYmV0d2VlbiB0aGUgc2VydmljZXMgYW5kIHRoZVxuICogYnJvd3Nlci4gRWFjaCBpcyBhbiBgYXMgY29uc3RgIGFycmF5ICh0aGUgcnVudGltZSBsaXN0IGEgWm9kIGVudW0sIGEgTW9uZ29vc2VcbiAqIGVudW0gb3IgYSBkcml6emxlIGAkdHlwZWAgYnVpbGRzIGZyb20pIHBsdXMgdGhlIHVuaW9uIHR5cGUgZGVyaXZlZCBmcm9tIGl0LlxuICpcbiAqIERlcGVuZGVuY3ktZnJlZSBvbiBwdXJwb3NlOiB0aGUgZnJvbnRlbmQgaW1wb3J0cyB0aGVzZSB0eXBlcywgc28gYSB2YWx1ZSBhZGRlZFxuICogaGVyZSByZWFjaGVzIHRoZSBVSSdzIGV4aGF1c3RpdmUgbGFiZWwgbWFwcyBhcyBhIGNvbXBpbGUgZXJyb3IgaW5zdGVhZCBvZiBhXG4gKiBzaWxlbnRseSB1bmhhbmRsZWQgc3RyaW5nLiBUaGUgUG9zdGdyZXMgQ0hFQ0sgY29uc3RyYWludHMgaW4gZWFjaCBkZXBsb3lcbiAqIHRhcmdldCdzIGBwb3N0Z3Jlcy1pbml0LnNxbGAgbWlycm9yIHRoZSBvbmVzIHN0b3JlZCBpbiBTUUwuXG4gKi9cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbXBsaWFuY2UgcnVsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBSVUxFX1NFVkVSSVRJRVMgPSBbJ3dhcm5pbmcnLCAnZXJyb3InLCAnY3JpdGljYWwnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVTZXZlcml0eSA9ICh0eXBlb2YgUlVMRV9TRVZFUklUSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgUlVMRV9UQVJHRVRTID0gWydwbHVnaW4nLCAncGlwZWxpbmUnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVUYXJnZXQgPSAodHlwZW9mIFJVTEVfVEFSR0VUUylbbnVtYmVyXTtcblxuLyoqIEZpZWxkLWV2YWx1YXRpb24gb3BlcmF0b3JzOyB0aGUgZW5naW5lJ3MgaW1wbGVtZW50YXRpb25zIGxpdmUgaW4gYXBpL2NvbXBsaWFuY2UuICovXG5leHBvcnQgY29uc3QgUlVMRV9PUEVSQVRPUlMgPSBbXG4gICdlcScsICduZXEnLFxuICAnY29udGFpbnMnLCAnbm90Q29udGFpbnMnLFxuICAncmVnZXgnLFxuICAnZ3QnLCAnZ3RlJywgJ2x0JywgJ2x0ZScsXG4gICdpbicsICdub3RJbicsXG4gICdleGlzdHMnLCAnbm90RXhpc3RzJywgJ25vdEVtcHR5JyxcbiAgJ2NvdW50R3QnLCAnY291bnRMdCcsXG4gICdsZW5ndGhHdCcsICdsZW5ndGhMdCcsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZU9wZXJhdG9yID0gKHR5cGVvZiBSVUxFX09QRVJBVE9SUylbbnVtYmVyXTtcblxuLyoqIE9wZXJhdG9ycyB0aGF0IHRlc3QgcHJlc2VuY2Ugb25seSBhbmQgdGFrZSBubyBjb21wYXJpc29uIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0IFZBTFVFTEVTU19SVUxFX09QRVJBVE9SUyA9IFsnZXhpc3RzJywgJ25vdEV4aXN0cycsICdub3RFbXB0eSddIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBSdWxlT3BlcmF0b3JbXTtcblxuLyoqIEhvdyBhIG11bHRpLWNvbmRpdGlvbiBydWxlIGNvbWJpbmVzIGl0cyBjb25kaXRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IFJVTEVfQ09ORElUSU9OX01PREVTID0gWydhbGwnLCAnYW55J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSdWxlQ29uZGl0aW9uTW9kZSA9ICh0eXBlb2YgUlVMRV9DT05ESVRJT05fTU9ERVMpW251bWJlcl07XG5cbi8qKiBgcHVibGlzaGVkYCBydWxlcyBiZWxvbmcgdG8gdGhlIHN5c3RlbSBvcmcgYW5kIGFwcGx5IGJ5IHN1YnNjcmlwdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBSVUxFX1NDT1BFUyA9IFsnb3JnJywgJ3B1Ymxpc2hlZCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZVNjb3BlID0gKHR5cGVvZiBSVUxFX1NDT1BFUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE1lc3NhZ2VzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgTUVTU0FHRV9UWVBFUyA9IFsnYW5ub3VuY2VtZW50JywgJ2NvbnZlcnNhdGlvbiddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZVR5cGUgPSAodHlwZW9mIE1FU1NBR0VfVFlQRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX1BSSU9SSVRJRVMgPSBbJ25vcm1hbCcsICdoaWdoJywgJ3VyZ2VudCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTWVzc2FnZVByaW9yaXR5ID0gKHR5cGVvZiBNRVNTQUdFX1BSSU9SSVRJRVMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCaWxsaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgU1VCU0NSSVBUSU9OX1NUQVRVU0VTID0gWydhY3RpdmUnLCAnY2FuY2VsZWQnLCAncGFzdF9kdWUnLCAndHJpYWxpbmcnLCAnaW5jb21wbGV0ZSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU3Vic2NyaXB0aW9uU3RhdHVzID0gKHR5cGVvZiBTVUJTQ1JJUFRJT05fU1RBVFVTRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBCSUxMSU5HX0lOVEVSVkFMUyA9IFsnbW9udGhseScsICdhbm51YWwnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJpbGxpbmdJbnRlcnZhbCA9ICh0eXBlb2YgQklMTElOR19JTlRFUlZBTFMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBJZGVudGl0eVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE9JREMgcHJvdmlkZXJzIGFuIG9yZyBJZFAgY29uZmlnIGNhbiBuYW1lIChHaXRIdWIgaXMgT0F1dGgtb25seSBhbmQgcmVmdXNlZCBieSB0aGUgT0lEQyBlbmdpbmUpLiAqL1xuZXhwb3J0IGNvbnN0IElEUF9QUk9WSURFUlMgPSBbJ2dlbmVyaWMtb2lkYycsICdjb2duaXRvJywgJ2dvb2dsZScsICdnaXRodWInXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIElkcFByb3ZpZGVyID0gKHR5cGVvZiBJRFBfUFJPVklERVJTKVtudW1iZXJdO1xuXG4vKiogVGhlIGZlZGVyYXRpb24gcHJvdG9jb2wgYW4gb3JnIHNpZ25zIGluIG92ZXIg4oCUIG9uZSBwZXIgb3JnLiAqL1xuZXhwb3J0IGNvbnN0IElEUF9QUk9UT0NPTFMgPSBbJ29pZGMnLCAnc2FtbCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSWRwUHJvdG9jb2wgPSAodHlwZW9mIElEUF9QUk9UT0NPTFMpW251bWJlcl07XG5cbi8qKlxuICogV2hpY2ggU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlIGNhcnJpZXMgd2hpY2ggaWRlbnRpdHkgZmllbGQuIEFuIGVtcHR5IG5hbWVcbiAqIG1lYW5zIFwidXNlIHRoZSBjb21tb24gc3BlbGxpbmdzXCIgKHNob3J0IG5hbWVzIHBsdXMgdGhlIEVudHJhL1NoaWJib2xldGggVVJJcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtbEF0dHJpYnV0ZU1hcHBpbmcge1xuICAvKiogQXR0cmlidXRlIGhvbGRpbmcgdGhlIHVzZXIncyBlbWFpbCBhZGRyZXNzLiAqL1xuICBlbWFpbD86IHN0cmluZztcbiAgLyoqIEF0dHJpYnV0ZSBob2xkaW5nIHRoZSBkaXNwbGF5IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBBdHRyaWJ1dGUgaG9sZGluZyBncm91cCBtZW1iZXJzaGlwcyAoZHJpdmVzIEpJVCByb2xlIG1hcHBpbmcpLiAqL1xuICBncm91cHM/OiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgY29hcnNlIGdyYW50IGEgcGVybWlzc2lvbiByb2xlIGdpdmVzIGl0cyBtZW1iZXJzLiAqL1xuZXhwb3J0IGNvbnN0IFJPTEVfR1JBTlRTID0gWydzdXBlcmFkbWluJywgJ2FkbWluJywgJ21lbWJlciddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUm9sZUdyYW50ID0gKHR5cGVvZiBST0xFX0dSQU5UUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBsdWdpbiBlY29zeXN0ZW0gKGVhY2ggbWlycm9yZWQgYnkgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBQdWJsaXNoZXIgdHJ1c3QgdGllci4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIRVJfVElFUlMgPSBbJ29mZmljaWFsJywgJ3ZlcmlmaWVkJywgJ2NvbW11bml0eScsICd1bnZlcmlmaWVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQdWJsaXNoZXJUaWVyID0gKHR5cGVvZiBQVUJMSVNIRVJfVElFUlMpW251bWJlcl07XG5cbi8qKiBBIGRpcmVjdG9yeSBsaXN0aW5nJ3MgbGlmZWN5Y2xlIHN0YXRlLiAqL1xuZXhwb3J0IGNvbnN0IExJU1RJTkdfU1RBVEVTID0gWydsaXN0ZWQnLCAndW5tYWludGFpbmVkJywgJ3N1c3BlbmRlZCcsICd0cmFuc2ZlcnJlZCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTGlzdGluZ1N0YXRlID0gKHR5cGVvZiBMSVNUSU5HX1NUQVRFUylbbnVtYmVyXTtcblxuLyoqIFdoYXQgYSBwdWJsaXNoIHJlcXVlc3QgYXNrcyB0aGUgc3lzdGVtIG9yZyB0byBkby4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIX1JFUVVFU1RfS0lORFMgPSBbXG4gICduZXdfbGlzdGluZycsICduZXdfdmVyc2lvbicsICdsaXN0aW5nX3VwZGF0ZScsICd5YW5rJywgJ3VucGF1c2UnLFxuICAndHJhbnNmZXInLCAnY2xhaW0nLCAncHJvZmlsZV9jaGFuZ2UnLCAnYWR2aXNvcnknLCAndmVyaWZ5JywgJ21vZGVyYXRpb24nLCAnc3VibWlzc2lvbicsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUHVibGlzaFJlcXVlc3RLaW5kID0gKHR5cGVvZiBQVUJMSVNIX1JFUVVFU1RfS0lORFMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBQVUJMSVNIX1JFUVVFU1RfU1RBVFVTRVMgPSBbJ3BlbmRpbmcnLCAncGVuZGluZ19zZWNvbmRfYXBwcm92YWwnLCAnYXBwcm92ZWQnLCAncmVqZWN0ZWQnLCAnd2l0aGRyYXduJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQdWJsaXNoUmVxdWVzdFN0YXR1cyA9ICh0eXBlb2YgUFVCTElTSF9SRVFVRVNUX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogVGhlIHN0YXR1c2VzIGEgcmVxdWVzdCBpcyBzdGlsbCBcIm9wZW5cIiBpbiAoZHJpdmVzIHRoZSBvbmUtb3Blbi1yZXF1ZXN0IGluZGV4KS4gKi9cbmV4cG9ydCBjb25zdCBPUEVOX1BVQkxJU0hfUkVRVUVTVF9TVEFUVVNFUyA9IFsncGVuZGluZycsICdwZW5kaW5nX3NlY29uZF9hcHByb3ZhbCddIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBQdWJsaXNoUmVxdWVzdFN0YXR1c1tdO1xuXG4vKiogYHNlY3VyaXR5YCByZXF1ZXN0cyBqdW1wIHRoZSBtb2RlcmF0aW9uIHF1ZXVlLiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hfUkVRVUVTVF9MQU5FUyA9IFsnc3RhbmRhcmQnLCAnc2VjdXJpdHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFB1Ymxpc2hSZXF1ZXN0TGFuZSA9ICh0eXBlb2YgUFVCTElTSF9SRVFVRVNUX0xBTkVTKVtudW1iZXJdO1xuXG4vKiogSW5zdGFsbCB2ZXJzaW9uIHBvbGljeTogZXhhY3QsIGB+YCwgYF5gLCBvciBhbnl0aGluZyBub24tYnJlYWtpbmcuICovXG5leHBvcnQgY29uc3QgSU5TVEFMTF9WRVJTSU9OX1BPTElDSUVTID0gWydwaW5uZWQnLCAncGF0Y2gnLCAnbWlub3InLCAnbGF0ZXN0J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnN0YWxsVmVyc2lvblBvbGljeSA9ICh0eXBlb2YgSU5TVEFMTF9WRVJTSU9OX1BPTElDSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgSU5TVEFMTF9TVEFUVVNFUyA9IFsnYWN0aXZlJywgJ3BlbmRpbmdfYXBwcm92YWwnLCAnZGVuaWVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJbnN0YWxsU3RhdHVzID0gKHR5cGVvZiBJTlNUQUxMX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogVGhlIGFkdmlzb3J5IHNldmVyaXR5IGF0IHdoaWNoIGEgY29uc3VtcHRpb24gcG9saWN5IGJsb2NrcyBpbnN0YWxscy4gKi9cbmV4cG9ydCBjb25zdCBCTE9DS19PTl9BRFZJU09SWV9MRVZFTFMgPSBbJ2NyaXRpY2FsJywgJ2hpZ2gnLCAnbmV2ZXInXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJsb2NrT25BZHZpc29yeSA9ICh0eXBlb2YgQkxPQ0tfT05fQURWSVNPUllfTEVWRUxTKVtudW1iZXJdO1xuXG4vKiogV2hldGhlciBvZmZpY2lhbCBwbHVnaW5zIG5lZWQgYW4gZXhwbGljaXQgaW5zdGFsbCBiZWZvcmUgYSBwaXBlbGluZSBjYW4gdXNlIHRoZW0uICovXG5leHBvcnQgY29uc3QgT0ZGSUNJQUxfSU5TVEFMTFNfTU9ERVMgPSBbJ2ltcGxpY2l0JywgJ2V4cGxpY2l0J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBPZmZpY2lhbEluc3RhbGxzID0gKHR5cGVvZiBPRkZJQ0lBTF9JTlNUQUxMU19NT0RFUylbbnVtYmVyXTtcblxuLyoqXG4gKiBXaGF0IGhhcHBlbnMgd2hlbiBhbiBvcmcgZGVmaW5lcyBhIHBsdWdpbiBOQU1FIHRoYXQgb3ZlcnJpZGVzIHNvbWV0aGluZyBpdFxuICogd291bGQgb3RoZXJ3aXNlIHJlc29sdmUg4oCUIGEgbGlzdGluZywgb3IgKGZvciBhIHRlYW0pIGl0cyBwYXJlbnQgb3JnJ3MgcGx1Z2luLlxuICpcbiAqIGBhbGxvd2Aga2VlcHMgdG9kYXkncyBiZWhhdmlvdXI6IHRoZSBvdmVycmlkZSBpcyBzaWxlbnQgYmV5b25kIHRoZSBkYXNoYm9hcmRcbiAqIGJhbm5lci4gYHdhcm5gIGlzIHRoZSBzYW1lIHJlc29sdXRpb24gd2l0aCB0aGUgZmFjdCByZWNvcmRlZCBwcm9taW5lbnRseS5cbiAqIGBkZW55YCByZWZ1c2VzIHRoZSB1cGxvYWQsIHdoaWNoIGlzIHRoZSBvbmx5IHNldHRpbmcgdGhhdCBhY3R1YWxseSBzdG9wcyBhXG4gKiB0ZWFtIHJlcGxhY2luZyB0aGUgT2ZmaWNpYWwgYHRyaXZ5YCBmb3IgZXZlcnkgcGlwZWxpbmUgdGhhdCBuYW1lcyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNIQURPV0lOR19NT0RFUyA9IFsnYWxsb3cnLCAnd2FybicsICdkZW55J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBTaGFkb3dpbmdNb2RlID0gKHR5cGVvZiBTSEFET1dJTkdfTU9ERVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBSRVZJRVdfU1RBVFVTRVMgPSBbJ3B1Ymxpc2hlZCcsICdoZWxkJywgJ3JlbW92ZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJldmlld1N0YXR1cyA9ICh0eXBlb2YgUkVWSUVXX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogV2h5IGEgaGVsZCByZXZpZXcgaXMgaGVsZC4gKi9cbmV4cG9ydCBjb25zdCBSRVZJRVdfSE9MRF9SRUFTT05TID0gWydyZXBvcnRzJywgJ2J1cnN0JywgJ2ZpbHRlcicsICdzZWN1cml0eScsICdtb2RlcmF0b3InXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJldmlld0hvbGRSZWFzb24gPSAodHlwZW9mIFJFVklFV19IT0xEX1JFQVNPTlMpW251bWJlcl07XG5cbi8qKiBBIHJldmlldyByZXBvcnQncyBjYXRlZ29yeTsgYHNlY3VyaXR5YCByb3V0ZXMgcHJpdmF0ZWx5IHRvIHRoZSBhZHZpc29yeSBwYXRoLiAqL1xuZXhwb3J0IGNvbnN0IFJFVklFV19SRVBPUlRfQ0FURUdPUklFUyA9IFsnc3BhbScsICdhYnVzZScsICdvZmZfdG9waWMnLCAnc2VjdXJpdHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJldmlld1JlcG9ydENhdGVnb3J5ID0gKHR5cGVvZiBSRVZJRVdfUkVQT1JUX0NBVEVHT1JJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBBRFZJU09SWV9TRVZFUklUSUVTID0gWydjcml0aWNhbCcsICdoaWdoJywgJ21lZGl1bScsICdsb3cnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFkdmlzb3J5U2V2ZXJpdHkgPSAodHlwZW9mIEFEVklTT1JZX1NFVkVSSVRJRVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBBRFZJU09SWV9TVEFURVMgPSBbJ2RyYWZ0JywgJ3B1Ymxpc2hlZCcsICd3aXRoZHJhd24nXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFkdmlzb3J5U3RhdGUgPSAodHlwZW9mIEFEVklTT1JZX1NUQVRFUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IEFEVklTT1JZX1NPVVJDRVMgPSBbJ3B1Ymxpc2hlcicsICdtb2RlcmF0b3InLCAnY3ZlX3Jlc2NhbicsICdyZXZpZXcnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEFkdmlzb3J5U291cmNlID0gKHR5cGVvZiBBRFZJU09SWV9TT1VSQ0VTKVtudW1iZXJdO1xuXG4vKipcbiAqIEFuIGFub255bW91cyBzdWJtaXNzaW9uJ3MgbGlmZWN5Y2xlLiBgcHVibGlzaGluZ2AgaXMgdGhlIHNob3J0IGNsYWltIGFuXG4gKiBhcHByb3ZhbCB0YWtlcyBiZWZvcmUgaXQgY29waWVzIHRoZSBxdWFyYW50aW5lZCBpbWFnZSBvdXQsIHNvIGFuIGV4cGlyeSBjYW5cbiAqIG5ldmVyIGRlbGV0ZSB0aGUgYXJ0aWZhY3RzIG9mIGEgc3VibWlzc2lvbiB0aGF0IGlzIGJlaW5nIHB1Ymxpc2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNVQk1JU1NJT05fU1RBVFVTRVMgPSBbXG4gICdwZW5kaW5nX3ZlcmlmaWNhdGlvbicsICdwZW5kaW5nX3JldmlldycsICdwdWJsaXNoaW5nJywgJ2dhdGVfZmFpbGVkJywgJ2FwcHJvdmVkJywgJ3JlamVjdGVkJywgJ2V4cGlyZWQnLCAnY2xhaW1lZCcsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU3VibWlzc2lvblN0YXR1cyA9ICh0eXBlb2YgU1VCTUlTU0lPTl9TVEFUVVNFUylbbnVtYmVyXTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBsdWdpbiBzZWN1cml0eSBub3RpZmljYXRpb25zIChwZXIgb3JnKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFdobyByZWNlaXZlcyBhbiBvcmcncyBwbHVnaW4gc2VjdXJpdHkgbm90aWNlczogYHdyaXRlcnNgID0gdGhlIHVwbG9hZGVyIHBsdXNcbiAqICBtZW1iZXJzIGhvbGRpbmcgYHBsdWdpbnM6d3JpdGVgOyBgdXNlcnNgID0gdGhlIG9yZydzIGNob3NlbiBtZW1iZXJzLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TRUNVUklUWV9SRUNJUElFTlRfTU9ERVMgPSBbJ3dyaXRlcnMnLCAndXNlcnMnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpblNlY3VyaXR5UmVjaXBpZW50TW9kZSA9ICh0eXBlb2YgUExVR0lOX1NFQ1VSSVRZX1JFQ0lQSUVOVF9NT0RFUylbbnVtYmVyXTtcblxuLyoqIEhvdyByZXNjYW4gZmluZGluZ3MgKE4zMSkgYXJlIGJhdGNoZWQ7IGJsb2NrZWQgYnVpbGRzIChOMzApIGFyZSBhbHdheXMgaW1tZWRpYXRlLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TRUNVUklUWV9ESUdFU1RfTU9ERVMgPSBbJ2ltbWVkaWF0ZScsICdkYWlseScsICd3ZWVrbHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpblNlY3VyaXR5RGlnZXN0TW9kZSA9ICh0eXBlb2YgUExVR0lOX1NFQ1VSSVRZX0RJR0VTVF9NT0RFUylbbnVtYmVyXTtcbiJdfQ==
112
+ // The build CLASS and SIZE vocabularies live in `build-catalog.ts`, together
113
+ // with their labels, credit multipliers, tier floors and per-class slot
114
+ // defaults. They are not here because the ids alone were never the whole fact:
115
+ // the multiplier was in this file, the tier gate was in `quota-tiers.ts`, and
116
+ // the labels were in a frontend mirror of both. One keyed catalog is importable
117
+ // by the browser, so the mirror and the test that parsed this package's source
118
+ // to detect drift are both gone.
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS12b2NhYnVsYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3dpcmUtdm9jYWJ1bGFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7R0FTRztBQUVILGdGQUFnRjtBQUNoRixtQkFBbUI7QUFDbkIsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFHekUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBRzVELHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsSUFBSSxFQUFFLEtBQUs7SUFDWCxVQUFVLEVBQUUsYUFBYTtJQUN6QixPQUFPO0lBQ1AsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSztJQUN4QixJQUFJLEVBQUUsT0FBTztJQUNiLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVTtJQUNqQyxTQUFTLEVBQUUsU0FBUztJQUNwQixVQUFVLEVBQUUsVUFBVTtDQUNkLENBQUM7QUFHWCxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBNEMsQ0FBQztBQUV2SCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFVLENBQUM7QUFHNUQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUd6RCxnRkFBZ0Y7QUFDaEYsV0FBVztBQUNYLGdGQUFnRjtBQUVoRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxjQUFjLEVBQUUs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LFVBQVUsRUFBRSxXQUFXLENBQVUsQ0FBQztBQUdwRyxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQVUsQ0FBQztBQUc1RixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBR2xGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFVLENBQUM7QUFHNUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQVUsQ0FBQztBQUc1Rjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTO0NBQzNHLENBQUM7QUFHWCxnRkFBZ0Y7QUFDaEYsMENBQTBDO0FBQzFDLGdGQUFnRjtBQUVoRjsyRUFDMkU7QUFDM0UsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFHN0Usd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQVUsQ0FBQztBQUd0Riw2RUFBNkU7QUFDN0Usd0VBQXdFO0FBQ3hFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLCtFQUErRTtBQUMvRSxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBDbG9zZWQgc3RyaW5nIHZvY2FidWxhcmllcyB0aGF0IGNyb3NzIHRoZSB3aXJlIGJldHdlZW4gdGhlIHNlcnZpY2VzIGFuZCB0aGVcbiAqIGJyb3dzZXIuIEVhY2ggaXMgYW4gYGFzIGNvbnN0YCBhcnJheSAodGhlIHJ1bnRpbWUgbGlzdCBhIFpvZCBlbnVtLCBhIE1vbmdvb3NlXG4gKiBlbnVtIG9yIGEgZHJpenpsZSBgJHR5cGVgIGJ1aWxkcyBmcm9tKSBwbHVzIHRoZSB1bmlvbiB0eXBlIGRlcml2ZWQgZnJvbSBpdC5cbiAqXG4gKiBEZXBlbmRlbmN5LWZyZWUgb24gcHVycG9zZTogdGhlIGZyb250ZW5kIGltcG9ydHMgdGhlc2UgdHlwZXMsIHNvIGEgdmFsdWUgYWRkZWRcbiAqIGhlcmUgcmVhY2hlcyB0aGUgVUkncyBleGhhdXN0aXZlIGxhYmVsIG1hcHMgYXMgYSBjb21waWxlIGVycm9yIGluc3RlYWQgb2YgYVxuICogc2lsZW50bHkgdW5oYW5kbGVkIHN0cmluZy4gVGhlIFBvc3RncmVzIENIRUNLIGNvbnN0cmFpbnRzIGluIGVhY2ggZGVwbG95XG4gKiB0YXJnZXQncyBgcG9zdGdyZXMtaW5pdC5zcWxgIG1pcnJvciB0aGUgb25lcyBzdG9yZWQgaW4gU1FMLlxuICovXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb21wbGlhbmNlIHJ1bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgUlVMRV9TRVZFUklUSUVTID0gWyd3YXJuaW5nJywgJ2Vycm9yJywgJ2NyaXRpY2FsJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSdWxlU2V2ZXJpdHkgPSAodHlwZW9mIFJVTEVfU0VWRVJJVElFUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IFJVTEVfVEFSR0VUUyA9IFsncGx1Z2luJywgJ3BpcGVsaW5lJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSdWxlVGFyZ2V0ID0gKHR5cGVvZiBSVUxFX1RBUkdFVFMpW251bWJlcl07XG5cbi8qKiBGaWVsZC1ldmFsdWF0aW9uIG9wZXJhdG9yczsgdGhlIGVuZ2luZSdzIGltcGxlbWVudGF0aW9ucyBsaXZlIGluIGFwaS9jb21wbGlhbmNlLiAqL1xuZXhwb3J0IGNvbnN0IFJVTEVfT1BFUkFUT1JTID0gW1xuICAnZXEnLCAnbmVxJyxcbiAgJ2NvbnRhaW5zJywgJ25vdENvbnRhaW5zJyxcbiAgJ3JlZ2V4JyxcbiAgJ2d0JywgJ2d0ZScsICdsdCcsICdsdGUnLFxuICAnaW4nLCAnbm90SW4nLFxuICAnZXhpc3RzJywgJ25vdEV4aXN0cycsICdub3RFbXB0eScsXG4gICdjb3VudEd0JywgJ2NvdW50THQnLFxuICAnbGVuZ3RoR3QnLCAnbGVuZ3RoTHQnLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVPcGVyYXRvciA9ICh0eXBlb2YgUlVMRV9PUEVSQVRPUlMpW251bWJlcl07XG5cbi8qKiBPcGVyYXRvcnMgdGhhdCB0ZXN0IHByZXNlbmNlIG9ubHkgYW5kIHRha2Ugbm8gY29tcGFyaXNvbiB2YWx1ZS4gKi9cbmV4cG9ydCBjb25zdCBWQUxVRUxFU1NfUlVMRV9PUEVSQVRPUlMgPSBbJ2V4aXN0cycsICdub3RFeGlzdHMnLCAnbm90RW1wdHknXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgUnVsZU9wZXJhdG9yW107XG5cbi8qKiBIb3cgYSBtdWx0aS1jb25kaXRpb24gcnVsZSBjb21iaW5lcyBpdHMgY29uZGl0aW9ucy4gKi9cbmV4cG9ydCBjb25zdCBSVUxFX0NPTkRJVElPTl9NT0RFUyA9IFsnYWxsJywgJ2FueSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUnVsZUNvbmRpdGlvbk1vZGUgPSAodHlwZW9mIFJVTEVfQ09ORElUSU9OX01PREVTKVtudW1iZXJdO1xuXG4vKiogYHB1Ymxpc2hlZGAgcnVsZXMgYmVsb25nIHRvIHRoZSBzeXN0ZW0gb3JnIGFuZCBhcHBseSBieSBzdWJzY3JpcHRpb24uICovXG5leHBvcnQgY29uc3QgUlVMRV9TQ09QRVMgPSBbJ29yZycsICdwdWJsaXNoZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJ1bGVTY29wZSA9ICh0eXBlb2YgUlVMRV9TQ09QRVMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNZXNzYWdlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IE1FU1NBR0VfVFlQRVMgPSBbJ2Fubm91bmNlbWVudCcsICdjb252ZXJzYXRpb24nXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIE1lc3NhZ2VUeXBlID0gKHR5cGVvZiBNRVNTQUdFX1RZUEVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgTUVTU0FHRV9QUklPUklUSUVTID0gWydub3JtYWwnLCAnaGlnaCcsICd1cmdlbnQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIE1lc3NhZ2VQcmlvcml0eSA9ICh0eXBlb2YgTUVTU0FHRV9QUklPUklUSUVTKVtudW1iZXJdO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQmlsbGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IFNVQlNDUklQVElPTl9TVEFUVVNFUyA9IFsnYWN0aXZlJywgJ2NhbmNlbGVkJywgJ3Bhc3RfZHVlJywgJ3RyaWFsaW5nJywgJ2luY29tcGxldGUnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFN1YnNjcmlwdGlvblN0YXR1cyA9ICh0eXBlb2YgU1VCU0NSSVBUSU9OX1NUQVRVU0VTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgQklMTElOR19JTlRFUlZBTFMgPSBbJ21vbnRobHknLCAnYW5udWFsJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBCaWxsaW5nSW50ZXJ2YWwgPSAodHlwZW9mIEJJTExJTkdfSU5URVJWQUxTKVtudW1iZXJdO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSWRlbnRpdHlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBPSURDIHByb3ZpZGVycyBhbiBvcmcgSWRQIGNvbmZpZyBjYW4gbmFtZSAoR2l0SHViIGlzIE9BdXRoLW9ubHkgYW5kIHJlZnVzZWQgYnkgdGhlIE9JREMgZW5naW5lKS4gKi9cbmV4cG9ydCBjb25zdCBJRFBfUFJPVklERVJTID0gWydnZW5lcmljLW9pZGMnLCAnY29nbml0bycsICdnb29nbGUnLCAnZ2l0aHViJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBJZHBQcm92aWRlciA9ICh0eXBlb2YgSURQX1BST1ZJREVSUylbbnVtYmVyXTtcblxuLyoqIFRoZSBmZWRlcmF0aW9uIHByb3RvY29sIGFuIG9yZyBzaWducyBpbiBvdmVyIOKAlCBvbmUgcGVyIG9yZy4gKi9cbmV4cG9ydCBjb25zdCBJRFBfUFJPVE9DT0xTID0gWydvaWRjJywgJ3NhbWwnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIElkcFByb3RvY29sID0gKHR5cGVvZiBJRFBfUFJPVE9DT0xTKVtudW1iZXJdO1xuXG4vKipcbiAqIFdoaWNoIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBjYXJyaWVzIHdoaWNoIGlkZW50aXR5IGZpZWxkLiBBbiBlbXB0eSBuYW1lXG4gKiBtZWFucyBcInVzZSB0aGUgY29tbW9uIHNwZWxsaW5nc1wiIChzaG9ydCBuYW1lcyBwbHVzIHRoZSBFbnRyYS9TaGliYm9sZXRoIFVSSXMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbWxBdHRyaWJ1dGVNYXBwaW5nIHtcbiAgLyoqIEF0dHJpYnV0ZSBob2xkaW5nIHRoZSB1c2VyJ3MgZW1haWwgYWRkcmVzcy4gKi9cbiAgZW1haWw/OiBzdHJpbmc7XG4gIC8qKiBBdHRyaWJ1dGUgaG9sZGluZyB0aGUgZGlzcGxheSBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogQXR0cmlidXRlIGhvbGRpbmcgZ3JvdXAgbWVtYmVyc2hpcHMgKGRyaXZlcyBKSVQgcm9sZSBtYXBwaW5nKS4gKi9cbiAgZ3JvdXBzPzogc3RyaW5nO1xufVxuXG4vKiogVGhlIGNvYXJzZSBncmFudCBhIHBlcm1pc3Npb24gcm9sZSBnaXZlcyBpdHMgbWVtYmVycy4gKi9cbmV4cG9ydCBjb25zdCBST0xFX0dSQU5UUyA9IFsnc3VwZXJhZG1pbicsICdhZG1pbicsICdtZW1iZXInXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJvbGVHcmFudCA9ICh0eXBlb2YgUk9MRV9HUkFOVFMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQbHVnaW4gZWNvc3lzdGVtIChlYWNoIG1pcnJvcmVkIGJ5IGEgQ0hFQ0sgaW4gcG9zdGdyZXMtaW5pdC5zcWwpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogUHVibGlzaGVyIHRydXN0IHRpZXIuICovXG5leHBvcnQgY29uc3QgUFVCTElTSEVSX1RJRVJTID0gWydvZmZpY2lhbCcsICd2ZXJpZmllZCcsICdjb21tdW5pdHknLCAndW52ZXJpZmllZCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUHVibGlzaGVyVGllciA9ICh0eXBlb2YgUFVCTElTSEVSX1RJRVJTKVtudW1iZXJdO1xuXG4vKiogQSBkaXJlY3RvcnkgbGlzdGluZydzIGxpZmVjeWNsZSBzdGF0ZS4gKi9cbmV4cG9ydCBjb25zdCBMSVNUSU5HX1NUQVRFUyA9IFsnbGlzdGVkJywgJ3VubWFpbnRhaW5lZCcsICdzdXNwZW5kZWQnLCAndHJhbnNmZXJyZWQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIExpc3RpbmdTdGF0ZSA9ICh0eXBlb2YgTElTVElOR19TVEFURVMpW251bWJlcl07XG5cbi8qKiBXaGF0IGEgcHVibGlzaCByZXF1ZXN0IGFza3MgdGhlIHN5c3RlbSBvcmcgdG8gZG8uICovXG5leHBvcnQgY29uc3QgUFVCTElTSF9SRVFVRVNUX0tJTkRTID0gW1xuICAnbmV3X2xpc3RpbmcnLCAnbmV3X3ZlcnNpb24nLCAnbGlzdGluZ191cGRhdGUnLCAneWFuaycsICd1bnBhdXNlJyxcbiAgJ3RyYW5zZmVyJywgJ2NsYWltJywgJ3Byb2ZpbGVfY2hhbmdlJywgJ2Fkdmlzb3J5JywgJ3ZlcmlmeScsICdtb2RlcmF0aW9uJywgJ3N1Ym1pc3Npb24nLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFB1Ymxpc2hSZXF1ZXN0S2luZCA9ICh0eXBlb2YgUFVCTElTSF9SRVFVRVNUX0tJTkRTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgUFVCTElTSF9SRVFVRVNUX1NUQVRVU0VTID0gWydwZW5kaW5nJywgJ3BlbmRpbmdfc2Vjb25kX2FwcHJvdmFsJywgJ2FwcHJvdmVkJywgJ3JlamVjdGVkJywgJ3dpdGhkcmF3biddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUHVibGlzaFJlcXVlc3RTdGF0dXMgPSAodHlwZW9mIFBVQkxJU0hfUkVRVUVTVF9TVEFUVVNFUylbbnVtYmVyXTtcblxuLyoqIFRoZSBzdGF0dXNlcyBhIHJlcXVlc3QgaXMgc3RpbGwgXCJvcGVuXCIgaW4gKGRyaXZlcyB0aGUgb25lLW9wZW4tcmVxdWVzdCBpbmRleCkuICovXG5leHBvcnQgY29uc3QgT1BFTl9QVUJMSVNIX1JFUVVFU1RfU1RBVFVTRVMgPSBbJ3BlbmRpbmcnLCAncGVuZGluZ19zZWNvbmRfYXBwcm92YWwnXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgUHVibGlzaFJlcXVlc3RTdGF0dXNbXTtcblxuLyoqIGBzZWN1cml0eWAgcmVxdWVzdHMganVtcCB0aGUgbW9kZXJhdGlvbiBxdWV1ZS4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIX1JFUVVFU1RfTEFORVMgPSBbJ3N0YW5kYXJkJywgJ3NlY3VyaXR5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQdWJsaXNoUmVxdWVzdExhbmUgPSAodHlwZW9mIFBVQkxJU0hfUkVRVUVTVF9MQU5FUylbbnVtYmVyXTtcblxuLyoqIEluc3RhbGwgdmVyc2lvbiBwb2xpY3k6IGV4YWN0LCBgfmAsIGBeYCwgb3IgYW55dGhpbmcgbm9uLWJyZWFraW5nLiAqL1xuZXhwb3J0IGNvbnN0IElOU1RBTExfVkVSU0lPTl9QT0xJQ0lFUyA9IFsncGlubmVkJywgJ3BhdGNoJywgJ21pbm9yJywgJ2xhdGVzdCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSW5zdGFsbFZlcnNpb25Qb2xpY3kgPSAodHlwZW9mIElOU1RBTExfVkVSU0lPTl9QT0xJQ0lFUylbbnVtYmVyXTtcblxuZXhwb3J0IGNvbnN0IElOU1RBTExfU1RBVFVTRVMgPSBbJ2FjdGl2ZScsICdwZW5kaW5nX2FwcHJvdmFsJywgJ2RlbmllZCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgSW5zdGFsbFN0YXR1cyA9ICh0eXBlb2YgSU5TVEFMTF9TVEFUVVNFUylbbnVtYmVyXTtcblxuLyoqIFRoZSBhZHZpc29yeSBzZXZlcml0eSBhdCB3aGljaCBhIGNvbnN1bXB0aW9uIHBvbGljeSBibG9ja3MgaW5zdGFsbHMuICovXG5leHBvcnQgY29uc3QgQkxPQ0tfT05fQURWSVNPUllfTEVWRUxTID0gWydjcml0aWNhbCcsICdoaWdoJywgJ25ldmVyJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBCbG9ja09uQWR2aXNvcnkgPSAodHlwZW9mIEJMT0NLX09OX0FEVklTT1JZX0xFVkVMUylbbnVtYmVyXTtcblxuLyoqIFdoZXRoZXIgb2ZmaWNpYWwgcGx1Z2lucyBuZWVkIGFuIGV4cGxpY2l0IGluc3RhbGwgYmVmb3JlIGEgcGlwZWxpbmUgY2FuIHVzZSB0aGVtLiAqL1xuZXhwb3J0IGNvbnN0IE9GRklDSUFMX0lOU1RBTExTX01PREVTID0gWydpbXBsaWNpdCcsICdleHBsaWNpdCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgT2ZmaWNpYWxJbnN0YWxscyA9ICh0eXBlb2YgT0ZGSUNJQUxfSU5TVEFMTFNfTU9ERVMpW251bWJlcl07XG5cbi8qKlxuICogV2hhdCBoYXBwZW5zIHdoZW4gYW4gb3JnIGRlZmluZXMgYSBwbHVnaW4gTkFNRSB0aGF0IG92ZXJyaWRlcyBzb21ldGhpbmcgaXRcbiAqIHdvdWxkIG90aGVyd2lzZSByZXNvbHZlIOKAlCBhIGxpc3RpbmcsIG9yIChmb3IgYSB0ZWFtKSBpdHMgcGFyZW50IG9yZydzIHBsdWdpbi5cbiAqXG4gKiBgYWxsb3dgIGtlZXBzIHRvZGF5J3MgYmVoYXZpb3VyOiB0aGUgb3ZlcnJpZGUgaXMgc2lsZW50IGJleW9uZCB0aGUgZGFzaGJvYXJkXG4gKiBiYW5uZXIuIGB3YXJuYCBpcyB0aGUgc2FtZSByZXNvbHV0aW9uIHdpdGggdGhlIGZhY3QgcmVjb3JkZWQgcHJvbWluZW50bHkuXG4gKiBgZGVueWAgcmVmdXNlcyB0aGUgdXBsb2FkLCB3aGljaCBpcyB0aGUgb25seSBzZXR0aW5nIHRoYXQgYWN0dWFsbHkgc3RvcHMgYVxuICogdGVhbSByZXBsYWNpbmcgdGhlIE9mZmljaWFsIGB0cml2eWAgZm9yIGV2ZXJ5IHBpcGVsaW5lIHRoYXQgbmFtZXMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBTSEFET1dJTkdfTU9ERVMgPSBbJ2FsbG93JywgJ3dhcm4nLCAnZGVueSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgU2hhZG93aW5nTW9kZSA9ICh0eXBlb2YgU0hBRE9XSU5HX01PREVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgUkVWSUVXX1NUQVRVU0VTID0gWydwdWJsaXNoZWQnLCAnaGVsZCcsICdyZW1vdmVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXZpZXdTdGF0dXMgPSAodHlwZW9mIFJFVklFV19TVEFUVVNFUylbbnVtYmVyXTtcblxuLyoqIFdoeSBhIGhlbGQgcmV2aWV3IGlzIGhlbGQuICovXG5leHBvcnQgY29uc3QgUkVWSUVXX0hPTERfUkVBU09OUyA9IFsncmVwb3J0cycsICdidXJzdCcsICdmaWx0ZXInLCAnc2VjdXJpdHknLCAnbW9kZXJhdG9yJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXZpZXdIb2xkUmVhc29uID0gKHR5cGVvZiBSRVZJRVdfSE9MRF9SRUFTT05TKVtudW1iZXJdO1xuXG4vKiogQSByZXZpZXcgcmVwb3J0J3MgY2F0ZWdvcnk7IGBzZWN1cml0eWAgcm91dGVzIHByaXZhdGVseSB0byB0aGUgYWR2aXNvcnkgcGF0aC4gKi9cbmV4cG9ydCBjb25zdCBSRVZJRVdfUkVQT1JUX0NBVEVHT1JJRVMgPSBbJ3NwYW0nLCAnYWJ1c2UnLCAnb2ZmX3RvcGljJywgJ3NlY3VyaXR5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBSZXZpZXdSZXBvcnRDYXRlZ29yeSA9ICh0eXBlb2YgUkVWSUVXX1JFUE9SVF9DQVRFR09SSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgQURWSVNPUllfU0VWRVJJVElFUyA9IFsnY3JpdGljYWwnLCAnaGlnaCcsICdtZWRpdW0nLCAnbG93J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBZHZpc29yeVNldmVyaXR5ID0gKHR5cGVvZiBBRFZJU09SWV9TRVZFUklUSUVTKVtudW1iZXJdO1xuXG5leHBvcnQgY29uc3QgQURWSVNPUllfU1RBVEVTID0gWydkcmFmdCcsICdwdWJsaXNoZWQnLCAnd2l0aGRyYXduJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBZHZpc29yeVN0YXRlID0gKHR5cGVvZiBBRFZJU09SWV9TVEFURVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBBRFZJU09SWV9TT1VSQ0VTID0gWydwdWJsaXNoZXInLCAnbW9kZXJhdG9yJywgJ2N2ZV9yZXNjYW4nLCAncmV2aWV3J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBBZHZpc29yeVNvdXJjZSA9ICh0eXBlb2YgQURWSVNPUllfU09VUkNFUylbbnVtYmVyXTtcblxuLyoqXG4gKiBBbiBhbm9ueW1vdXMgc3VibWlzc2lvbidzIGxpZmVjeWNsZS4gYHB1Ymxpc2hpbmdgIGlzIHRoZSBzaG9ydCBjbGFpbSBhblxuICogYXBwcm92YWwgdGFrZXMgYmVmb3JlIGl0IGNvcGllcyB0aGUgcXVhcmFudGluZWQgaW1hZ2Ugb3V0LCBzbyBhbiBleHBpcnkgY2FuXG4gKiBuZXZlciBkZWxldGUgdGhlIGFydGlmYWN0cyBvZiBhIHN1Ym1pc3Npb24gdGhhdCBpcyBiZWluZyBwdWJsaXNoZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTVUJNSVNTSU9OX1NUQVRVU0VTID0gW1xuICAncGVuZGluZ192ZXJpZmljYXRpb24nLCAncGVuZGluZ19yZXZpZXcnLCAncHVibGlzaGluZycsICdnYXRlX2ZhaWxlZCcsICdhcHByb3ZlZCcsICdyZWplY3RlZCcsICdleHBpcmVkJywgJ2NsYWltZWQnLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFN1Ym1pc3Npb25TdGF0dXMgPSAodHlwZW9mIFNVQk1JU1NJT05fU1RBVFVTRVMpW251bWJlcl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQbHVnaW4gc2VjdXJpdHkgbm90aWZpY2F0aW9ucyAocGVyIG9yZylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBXaG8gcmVjZWl2ZXMgYW4gb3JnJ3MgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXM6IGB3cml0ZXJzYCA9IHRoZSB1cGxvYWRlciBwbHVzXG4gKiAgbWVtYmVycyBob2xkaW5nIGBwbHVnaW5zOndyaXRlYDsgYHVzZXJzYCA9IHRoZSBvcmcncyBjaG9zZW4gbWVtYmVycy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fU0VDVVJJVFlfUkVDSVBJRU5UX01PREVTID0gWyd3cml0ZXJzJywgJ3VzZXJzJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQbHVnaW5TZWN1cml0eVJlY2lwaWVudE1vZGUgPSAodHlwZW9mIFBMVUdJTl9TRUNVUklUWV9SRUNJUElFTlRfTU9ERVMpW251bWJlcl07XG5cbi8qKiBIb3cgcmVzY2FuIGZpbmRpbmdzIChOMzEpIGFyZSBiYXRjaGVkOyBibG9ja2VkIGJ1aWxkcyAoTjMwKSBhcmUgYWx3YXlzIGltbWVkaWF0ZS4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fU0VDVVJJVFlfRElHRVNUX01PREVTID0gWydpbW1lZGlhdGUnLCAnZGFpbHknLCAnd2Vla2x5J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBQbHVnaW5TZWN1cml0eURpZ2VzdE1vZGUgPSAodHlwZW9mIFBMVUdJTl9TRUNVUklUWV9ESUdFU1RfTU9ERVMpW251bWJlcl07XG5cbi8vIFRoZSBidWlsZCBDTEFTUyBhbmQgU0laRSB2b2NhYnVsYXJpZXMgbGl2ZSBpbiBgYnVpbGQtY2F0YWxvZy50c2AsIHRvZ2V0aGVyXG4vLyB3aXRoIHRoZWlyIGxhYmVscywgY3JlZGl0IG11bHRpcGxpZXJzLCB0aWVyIGZsb29ycyBhbmQgcGVyLWNsYXNzIHNsb3Rcbi8vIGRlZmF1bHRzLiBUaGV5IGFyZSBub3QgaGVyZSBiZWNhdXNlIHRoZSBpZHMgYWxvbmUgd2VyZSBuZXZlciB0aGUgd2hvbGUgZmFjdDpcbi8vIHRoZSBtdWx0aXBsaWVyIHdhcyBpbiB0aGlzIGZpbGUsIHRoZSB0aWVyIGdhdGUgd2FzIGluIGBxdW90YS10aWVycy50c2AsIGFuZFxuLy8gdGhlIGxhYmVscyB3ZXJlIGluIGEgZnJvbnRlbmQgbWlycm9yIG9mIGJvdGguIE9uZSBrZXllZCBjYXRhbG9nIGlzIGltcG9ydGFibGVcbi8vIGJ5IHRoZSBicm93c2VyLCBzbyB0aGUgbWlycm9yIGFuZCB0aGUgdGVzdCB0aGF0IHBhcnNlZCB0aGlzIHBhY2thZ2UncyBzb3VyY2Vcbi8vIHRvIGRldGVjdCBkcmlmdCBhcmUgYm90aCBnb25lLlxuIl19
@@ -3,7 +3,7 @@ export * from './api-key.js';
3
3
  export * from './safe-require.js';
4
4
  export * from './secure-compare.js';
5
5
  export * from './crash-handlers.js';
6
- export { sendSuccess, sendError, sendQuotaExceeded, sendPaginatedNested, paginationMeta, type PaginationMeta, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams, type PaginationParams, type SortParams, } from './response.js';
6
+ export { sendSuccess, sendError, sendQuotaExceeded, quotaExceededMessage, type QuotaExceededDetails, sendPaginatedNested, paginationMeta, type PaginationMeta, extractDbError, errorMessage, sendBadRequest, sendInternalError, parsePaginationParams, type PaginationParams, type SortParams, } from './response.js';
7
7
  export { getParam, parseQueryInt, parseQueryString, parseOptionalDate, parsePositiveInt, parseQueryIntClamped, parsePage, validateBulkArray, parseReportInterval, parseReportTimezone, parseWeekStart, isValidTimezone, parseDateRange, type Page, type ReportInterval, type WeekStart, REPORT_INTERVALS, WEEK_STARTS, } from './params.js';
8
8
  export * from './headers.js';
9
9
  export * from './identity.js';