@pipeline-builder/api-core 5.2.3 → 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.
- package/lib/constants/ai-providers.d.ts +3 -22
- package/lib/constants/ai-providers.js +6 -56
- package/lib/errors/app-errors.d.ts +14 -0
- package/lib/errors/app-errors.js +21 -1
- package/lib/helpers/sse-helpers.d.ts +33 -3
- package/lib/helpers/sse-helpers.js +91 -19
- package/lib/middleware/auth.js +6 -3
- package/lib/middleware/deferred-quota-check.d.ts +5 -0
- package/lib/middleware/deferred-quota-check.js +33 -0
- package/lib/middleware/ecosystem-guard.d.ts +3 -3
- package/lib/middleware/ecosystem-guard.js +5 -5
- package/lib/middleware/index.d.ts +5 -2
- package/lib/middleware/index.js +6 -3
- package/lib/middleware/on-behalf.d.ts +37 -0
- package/lib/middleware/on-behalf.js +143 -0
- package/lib/middleware/permission-gates.d.ts +11 -0
- package/lib/middleware/permission-gates.js +7 -1
- package/lib/middleware/quota-exempt-routes.d.ts +36 -0
- package/lib/middleware/quota-exempt-routes.js +47 -0
- package/lib/middleware/route-table.d.ts +104 -0
- package/lib/middleware/route-table.js +72 -2
- package/lib/middleware/service-tokens.d.ts +8 -0
- package/lib/middleware/service-tokens.js +2 -1
- package/lib/middleware/step-up.js +11 -1
- package/lib/services/ai-call-weight.d.ts +24 -0
- package/lib/services/ai-call-weight.js +77 -0
- package/lib/services/audit-context.d.ts +105 -0
- package/lib/services/audit-context.js +134 -0
- package/lib/services/index.d.ts +7 -2
- package/lib/services/index.js +7 -2
- package/lib/services/org-ai-client.d.ts +61 -0
- package/lib/services/org-ai-client.js +112 -0
- package/lib/services/quota-increment-batcher.d.ts +81 -0
- package/lib/services/quota-increment-batcher.js +166 -0
- package/lib/services/quota.d.ts +158 -14
- package/lib/services/quota.js +252 -22
- package/lib/services/remote-audit-client.d.ts +44 -1
- package/lib/services/remote-audit-client.js +106 -20
- package/lib/services/version-vuln-policy.d.ts +174 -0
- package/lib/services/version-vuln-policy.js +242 -0
- package/lib/types/ai-catalog.d.ts +63 -0
- package/lib/types/ai-catalog.js +82 -0
- package/lib/types/ask-proposals.js +6 -6
- package/lib/types/build-catalog.d.ts +154 -0
- package/lib/types/build-catalog.js +158 -0
- package/lib/types/common.d.ts +37 -3
- package/lib/types/common.js +20 -2
- package/lib/types/ecosystem-notifications.d.ts +5 -5
- package/lib/types/ecosystem-notifications.js +9 -3
- package/lib/types/error-codes.d.ts +13 -6
- package/lib/types/error-codes.js +18 -8
- package/lib/types/feature-flags.d.ts +6 -4
- package/lib/types/feature-flags.js +11 -6
- package/lib/types/index.d.ts +6 -4
- package/lib/types/index.js +12 -5
- package/lib/types/metadata-keys.d.ts +6 -0
- package/lib/types/metadata-keys.js +4 -1
- package/lib/types/permissions.d.ts +344 -3
- package/lib/types/permissions.js +596 -21
- package/lib/types/pipeline.d.ts +39 -0
- package/lib/types/pipeline.js +57 -1
- package/lib/types/plugin-health.d.ts +0 -2
- package/lib/types/plugin-health.js +1 -11
- package/lib/types/plugin-scan.d.ts +192 -42
- package/lib/types/plugin-scan.js +159 -43
- package/lib/types/quota-catalog.d.ts +247 -0
- package/lib/types/quota-catalog.js +122 -0
- package/lib/types/quota-tiers.d.ts +118 -0
- package/lib/types/quota-tiers.js +153 -2
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +131 -1
- package/lib/types/wire-vocabulary.js +8 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/response.d.ts +35 -2
- package/lib/utils/response.js +42 -3
- package/lib/validation/ai-schemas.d.ts +27 -0
- package/lib/validation/ai-schemas.js +31 -5
- package/lib/validation/plugin-schemas.d.ts +15 -0
- package/lib/validation/plugin-schemas.js +28 -1
- package/package.json +31 -2
package/lib/types/quota-tiers.js
CHANGED
|
@@ -11,10 +11,123 @@ import { envBool, envInt, envStr } from '../utils/env.js';
|
|
|
11
11
|
*
|
|
12
12
|
* `storageBytes` is the aggregate registry cap per org. Sized
|
|
13
13
|
* around plugin-image realities: a typical plugin image is 200500 MB;
|
|
14
|
-
* Developer's 2 GB holds ~4 versions × ~500 MB, Pro's
|
|
14
|
+
* Developer's 2 GB holds ~4 versions × ~500 MB, Pro's 25 GB covers a
|
|
15
15
|
* mature catalog. Operators can override per-org via the quota CRUD API.
|
|
16
16
|
*/
|
|
17
17
|
const GB = 1024 * 1024 * 1024;
|
|
18
|
+
/**
|
|
19
|
+
* How the `automationCalls` defaults are sized — written down so the next
|
|
20
|
+
* person to touch them argues with the arithmetic, not with the numbers.
|
|
21
|
+
*
|
|
22
|
+
* Every call an org's automation keys make in one pipeline RUN, itemized (the
|
|
23
|
+
* earlier sizing counted only the plugin lookups and hand-waved the rest as
|
|
24
|
+
* "×2"):
|
|
25
|
+
*
|
|
26
|
+
* plugin lookups 12 one per plugin step (self-mutating pipeline)
|
|
27
|
+
* synth 1 the synth step fetching the pipeline config
|
|
28
|
+
* runtime check 1 the pre-deploy runtime-check call
|
|
29
|
+
* security-report upload 1 the scan step posting its report
|
|
30
|
+
* registry register 1 pipeline-register stamping the deployed version
|
|
31
|
+
* reporting ingest batches 12 the event forwarder posts ~one batch per action
|
|
32
|
+
* --
|
|
33
|
+
* 28 calls per run
|
|
34
|
+
*
|
|
35
|
+
* Per default period (`QUOTA_RESET_DAYS`, 3 days) one active pipeline running
|
|
36
|
+
* hourly makes 28 × 24 × 3 = 2,016 calls. An org keeps far more pipelines alive
|
|
37
|
+
* than it CREATES in a period (`pipelines` is a creation rate), so active
|
|
38
|
+
* pipelines are taken as 4× the tier's `pipelines`. On top sits a per-ORG
|
|
39
|
+
* constant that does not scale with pipelines: the ingest-health heartbeat
|
|
40
|
+
* (≤ 1/minute → 1,440/day → 4,320/period). The sum gets 25% headroom (retries,
|
|
41
|
+
* registry pushes, ad-hoc CI scripts on keys) and rounds UP to the next 10,000:
|
|
42
|
+
*
|
|
43
|
+
* developer 2×4×2016 + 4320 = 20,448 × 1.25 = 25,560 → 30,000
|
|
44
|
+
* pro 5×4×2016 + 4320 = 44,640 × 1.25 = 55,800 → 60,000
|
|
45
|
+
* team 10×4×2016 + 4320 = 84,960 × 1.25 = 106,200 → 110,000
|
|
46
|
+
* business 20×4×2016 + 4320 = 165,600 × 1.25 = 207,000 → 210,000
|
|
47
|
+
* enterprise 30×4×2016 + 4320 = 246,240 × 1.25 = 307,800 → 310,000
|
|
48
|
+
*
|
|
49
|
+
* {@link automationCallsFor} computes exactly this, and the tier tests hold the
|
|
50
|
+
* table to it. Over the cap the 429 is SOFT for a band ({@link quotaGracePct}):
|
|
51
|
+
* a self-mutating pipeline that hard-stopped at 100% stayed stopped until the
|
|
52
|
+
* period reset, up to 3 days. The limits are PER PERIOD: an operator who
|
|
53
|
+
* lengthens `QUOTA_RESET_DAYS` should scale `QUOTA_TIER_<TIER>_AUTOMATION_CALLS`
|
|
54
|
+
* by the same factor.
|
|
55
|
+
*/
|
|
56
|
+
export const AUTOMATION_CALLS_SIZING = {
|
|
57
|
+
callsPerRun: {
|
|
58
|
+
pluginLookups: 12,
|
|
59
|
+
synth: 1,
|
|
60
|
+
runtimeCheck: 1,
|
|
61
|
+
securityReportUpload: 1,
|
|
62
|
+
registryRegister: 1,
|
|
63
|
+
ingestBatches: 12,
|
|
64
|
+
},
|
|
65
|
+
runsPerDay: 24,
|
|
66
|
+
activePipelinesPerCreation: 4,
|
|
67
|
+
/** Ingest-health heartbeats per org per day (≤ one a minute). */
|
|
68
|
+
heartbeatsPerDay: 1440,
|
|
69
|
+
/** Multiplier on the itemized total. */
|
|
70
|
+
headroom: 1.25,
|
|
71
|
+
/** Defaults round UP to a multiple of this. */
|
|
72
|
+
roundTo: 10_000,
|
|
73
|
+
};
|
|
74
|
+
/** The {@link AUTOMATION_CALLS_SIZING} formula for a tier creating `pipelines` per period. */
|
|
75
|
+
export function automationCallsFor(pipelines, periodDays = 3) {
|
|
76
|
+
const s = AUTOMATION_CALLS_SIZING;
|
|
77
|
+
const perRun = Object.values(s.callsPerRun).reduce((a, b) => a + b, 0);
|
|
78
|
+
const perPipeline = perRun * s.runsPerDay * periodDays;
|
|
79
|
+
const total = (pipelines * s.activePipelinesPerCreation * perPipeline + s.heartbeatsPerDay * periodDays) * s.headroom;
|
|
80
|
+
return Math.ceil(total / s.roundTo) * s.roundTo;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The SOFT band above a quota's cap, per type, in percent of the limit. A type
|
|
84
|
+
* absent from this map has NO band and stops hard at 100%.
|
|
85
|
+
*
|
|
86
|
+
* At 100% the account gets the "reached" notice and keeps running; the refusal
|
|
87
|
+
* starts only past `limit × (100 + pct) / 100`. Reads still REPORT the nominal
|
|
88
|
+
* limit, so usage shows above 100% while inside the band.
|
|
89
|
+
*
|
|
90
|
+
* Two types qualify, for the same reason stated two ways — a hard stop exactly
|
|
91
|
+
* at 100% is worse than a short overrun when the caller cannot simply wait:
|
|
92
|
+
*
|
|
93
|
+
* - `automationCalls` (`QUOTA_AUTOMATION_GRACE_PCT`): the caller is a pipeline
|
|
94
|
+
* mid-deploy, not a person, and the counter would stay full for the rest of
|
|
95
|
+
* the period.
|
|
96
|
+
* - `storageBytes` (`QUOTA_STORAGE_GRACE_PCT`): storage is a STOCK — it does
|
|
97
|
+
* not reset, so without a band a downgrade or a cancelled pack flips an
|
|
98
|
+
* account from working to refused with no buffer at all, and the remedy
|
|
99
|
+
* (prune, or buy capacity) takes time the band is there to provide. Note the
|
|
100
|
+
* band on a stock is a ONE-TIME buffer rather than a per-period one; that is
|
|
101
|
+
* its purpose here, not a limitation of it.
|
|
102
|
+
*
|
|
103
|
+
* Every other type stays hard. This was a hardcoded `quotaType !==
|
|
104
|
+
* 'automationCalls'` comparison, which is why storage had nothing: the
|
|
105
|
+
* mechanism existed and only the predicate excluded it.
|
|
106
|
+
*/
|
|
107
|
+
const QUOTA_GRACE_PCT = {
|
|
108
|
+
automationCalls: envInt('QUOTA_AUTOMATION_GRACE_PCT', 10, { min: 0, max: 100 }),
|
|
109
|
+
storageBytes: envInt('QUOTA_STORAGE_GRACE_PCT', 10, { min: 0, max: 100 }),
|
|
110
|
+
};
|
|
111
|
+
/** The soft band for `quotaType` in percent, or 0 for a type that stops hard. */
|
|
112
|
+
export function quotaGracePct(quotaType) {
|
|
113
|
+
return QUOTA_GRACE_PCT[quotaType] ?? 0;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The limit enforcement actually binds on for `quotaType`: the nominal limit,
|
|
117
|
+
* plus the type's {@link quotaGracePct} band where it has one. Unlimited (-1)
|
|
118
|
+
* and zero ("none") limits are returned unchanged — a 0 cap is a deliberate
|
|
119
|
+
* refusal, not a budget to overrun.
|
|
120
|
+
*
|
|
121
|
+
* {@link QUOTA_GRACE_PCT} decides WHETHER a type has a band; `gracePct` only
|
|
122
|
+
* sizes it. So an explicit percentage passed for an unbanded type still yields
|
|
123
|
+
* the nominal limit, rather than quietly granting a band the type is not meant
|
|
124
|
+
* to have.
|
|
125
|
+
*/
|
|
126
|
+
export function enforcedQuotaLimit(quotaType, limit, gracePct = quotaGracePct(quotaType)) {
|
|
127
|
+
if (limit <= 0 || gracePct <= 0 || quotaGracePct(quotaType) <= 0)
|
|
128
|
+
return limit;
|
|
129
|
+
return Math.floor((limit * (100 + gracePct)) / 100);
|
|
130
|
+
}
|
|
18
131
|
/**
|
|
19
132
|
* Code-default limits per tier — the fallback when no env override is set.
|
|
20
133
|
* -1 means unlimited. (Counts sized to "comfortably enough for one team, not
|
|
@@ -30,7 +143,9 @@ const DEFAULT_TIER_LIMITS = {
|
|
|
30
143
|
plugins: 10,
|
|
31
144
|
pipelines: 2,
|
|
32
145
|
apiCalls: 25_000,
|
|
146
|
+
automationCalls: 30_000,
|
|
33
147
|
aiCalls: 20,
|
|
148
|
+
cpuCredits: 4_500,
|
|
34
149
|
storageBytes: 2 * GB,
|
|
35
150
|
dashboards: 20,
|
|
36
151
|
alertRules: 50,
|
|
@@ -51,7 +166,9 @@ const DEFAULT_TIER_LIMITS = {
|
|
|
51
166
|
plugins: 25,
|
|
52
167
|
pipelines: 5,
|
|
53
168
|
apiCalls: 100_000,
|
|
169
|
+
automationCalls: 60_000,
|
|
54
170
|
aiCalls: 200,
|
|
171
|
+
cpuCredits: 11_250,
|
|
55
172
|
storageBytes: 25 * GB,
|
|
56
173
|
dashboards: 200,
|
|
57
174
|
alertRules: 500,
|
|
@@ -72,7 +189,9 @@ const DEFAULT_TIER_LIMITS = {
|
|
|
72
189
|
plugins: 50,
|
|
73
190
|
pipelines: 10,
|
|
74
191
|
apiCalls: 300_000,
|
|
192
|
+
automationCalls: 110_000,
|
|
75
193
|
aiCalls: 600,
|
|
194
|
+
cpuCredits: 22_500,
|
|
76
195
|
storageBytes: 60 * GB,
|
|
77
196
|
dashboards: -1,
|
|
78
197
|
alertRules: -1,
|
|
@@ -95,7 +214,9 @@ const DEFAULT_TIER_LIMITS = {
|
|
|
95
214
|
plugins: 100,
|
|
96
215
|
pipelines: 20,
|
|
97
216
|
apiCalls: 800_000,
|
|
217
|
+
automationCalls: 210_000,
|
|
98
218
|
aiCalls: 1_600,
|
|
219
|
+
cpuCredits: 45_000,
|
|
99
220
|
storageBytes: 120 * GB,
|
|
100
221
|
dashboards: -1,
|
|
101
222
|
alertRules: -1,
|
|
@@ -116,7 +237,9 @@ const DEFAULT_TIER_LIMITS = {
|
|
|
116
237
|
plugins: 150,
|
|
117
238
|
pipelines: 30,
|
|
118
239
|
apiCalls: 1_500_000,
|
|
240
|
+
automationCalls: 310_000,
|
|
119
241
|
aiCalls: 3_000,
|
|
242
|
+
cpuCredits: 67_500,
|
|
120
243
|
storageBytes: 250 * GB,
|
|
121
244
|
dashboards: -1,
|
|
122
245
|
alertRules: -1,
|
|
@@ -135,7 +258,9 @@ const DEFAULT_TIER_LIMITS = {
|
|
|
135
258
|
plugins: -1,
|
|
136
259
|
pipelines: -1,
|
|
137
260
|
apiCalls: -1,
|
|
261
|
+
automationCalls: -1,
|
|
138
262
|
aiCalls: -1,
|
|
263
|
+
cpuCredits: -1,
|
|
139
264
|
storageBytes: -1,
|
|
140
265
|
dashboards: -1,
|
|
141
266
|
alertRules: -1,
|
|
@@ -183,8 +308,10 @@ function tierLimits(tier) {
|
|
|
183
308
|
plugins: tierLimitEnv(`QUOTA_TIER_${T}_PLUGINS`, d.plugins),
|
|
184
309
|
pipelines: tierLimitEnv(`QUOTA_TIER_${T}_PIPELINES`, d.pipelines),
|
|
185
310
|
apiCalls: tierLimitEnv(`QUOTA_TIER_${T}_API_CALLS`, d.apiCalls),
|
|
311
|
+
automationCalls: tierLimitEnv(`QUOTA_TIER_${T}_AUTOMATION_CALLS`, d.automationCalls),
|
|
186
312
|
aiCalls: tierLimitEnv(`QUOTA_TIER_${T}_AI_CALLS`, d.aiCalls),
|
|
187
313
|
storageBytes: tierLimitEnv(`QUOTA_TIER_${T}_STORAGE_BYTES`, d.storageBytes),
|
|
314
|
+
cpuCredits: tierLimitEnv(`QUOTA_TIER_${T}_CPU_CREDITS`, d.cpuCredits),
|
|
188
315
|
dashboards: tierLimitEnv(`QUOTA_TIER_${T}_DASHBOARDS`, d.dashboards),
|
|
189
316
|
alertRules: tierLimitEnv(`QUOTA_TIER_${T}_ALERT_RULES`, d.alertRules),
|
|
190
317
|
alertDestinations: tierLimitEnv(`QUOTA_TIER_${T}_ALERT_DESTINATIONS`, d.alertDestinations),
|
|
@@ -273,10 +400,34 @@ export function getTierLimits(tier) {
|
|
|
273
400
|
*/
|
|
274
401
|
export const QUOTA_RESET_DAYS = envInt('QUOTA_RESET_DAYS', 3, { min: 1 });
|
|
275
402
|
/** The next quota reset: local midnight `days` from `now`. */
|
|
403
|
+
/**
|
|
404
|
+
* The `cpuCredits` period, in days. A MONTH rather than the global three-day
|
|
405
|
+
* window, because build demand is bursty in a way API traffic is not: a full
|
|
406
|
+
* catalogue rebuild is a day's work that arrives on one day, and a three-day
|
|
407
|
+
* window refuses it while the account holds most of a month's budget unspent.
|
|
408
|
+
*/
|
|
409
|
+
export const CPU_CREDITS_PERIOD_DAYS = envInt('QUOTA_CPU_CREDITS_PERIOD_DAYS', 30, { min: 1 });
|
|
410
|
+
/**
|
|
411
|
+
* The usage period for ONE quota type, in days.
|
|
412
|
+
*
|
|
413
|
+
* Every flow quota but `cpuCredits` rolls on the global {@link QUOTA_RESET_DAYS}.
|
|
414
|
+
* Credits are monthly, which makes the period a PER-TYPE fact — so anything that
|
|
415
|
+
* computes a reset date, a "resets in N days" line or a burn-rate forecast has
|
|
416
|
+
* to ask for the type's own period rather than reading the global constant. A
|
|
417
|
+
* forecast against the wrong window is wrong by a factor of ten.
|
|
418
|
+
*
|
|
419
|
+
* Stocks (`storageBytes` and the resource counts) have no period at all; this
|
|
420
|
+
* returns the global window for them because callers gate on
|
|
421
|
+
* `quotaAccrual(type) === 'stock'` before using it, and returning a figure is
|
|
422
|
+
* less disruptive than making every caller handle a null. Check the accrual.
|
|
423
|
+
*/
|
|
424
|
+
export function quotaPeriodDays(type) {
|
|
425
|
+
return type === 'cpuCredits' ? CPU_CREDITS_PERIOD_DAYS : QUOTA_RESET_DAYS;
|
|
426
|
+
}
|
|
276
427
|
export function nextQuotaResetDate(days = QUOTA_RESET_DAYS, now = new Date()) {
|
|
277
428
|
const date = new Date(now);
|
|
278
429
|
date.setDate(date.getDate() + days);
|
|
279
430
|
date.setHours(0, 0, 0, 0);
|
|
280
431
|
return date;
|
|
281
432
|
}
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdGllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcXVvdGEtdGllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQTZGMUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxtQkFBbUIsR0FBdUM7SUFDOUQsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSw4RUFBOEU7SUFDOUUsU0FBUyxFQUFFO1FBQ1QsT0FBTyxFQUFFLEVBQUU7UUFDWCxTQUFTLEVBQUUsQ0FBQztRQUNaLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLE9BQU8sRUFBRSxFQUFFO1FBQ1gsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFO1FBQ3BCLFVBQVUsRUFBRSxFQUFFO1FBQ2QsVUFBVSxFQUFFLEVBQUU7UUFDZCxpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsUUFBUSxFQUFFLENBQUM7UUFDWCxLQUFLLEVBQUUsQ0FBQztRQUNSLGVBQWUsRUFBRSxDQUFDO1FBQ2xCLHNCQUFzQixFQUFFLENBQUM7UUFDekIsa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixpQkFBaUIsRUFBRSxHQUFHO0tBQ3ZCO0lBQ0QsK0VBQStFO0lBQy9FLGdGQUFnRjtJQUNoRixnRkFBZ0Y7SUFDaEYsOEVBQThFO0lBQzlFLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFLENBQUM7UUFDWixRQUFRLEVBQUUsT0FBTztRQUNqQixPQUFPLEVBQUUsR0FBRztRQUNaLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRTtRQUNyQixVQUFVLEVBQUUs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K0U7SUFDL0UsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSxrRkFBa0Y7SUFDbEYsT0FBUSxXQUFpQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBWTtJQUN4QyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDcEYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTFFLDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBSSxHQUFXLGdCQUFnQixFQUFFLEdBQUcsR0FBUyxJQUFJLElBQUksRUFBRTtJQUN4RixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBlbnZCb29sLCBlbnZJbnQsIGVudlN0ciB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5cbi8qKiBBdmFpbGFibGUgcXVvdGEgdGllciBpZGVudGlmaWVycy5cbiAqXG4gKiBgdW5saW1pdGVkYCBpcyBhIHNwZWNpYWwgdGllcjogZXZlcnkgcXVvdGEgaXMgYC0xYCAodW5jYXBwZWQpIGFuZCBpdCBpbmNsdWRlc1xuICogZXZlcnkgZmVhdHVyZS9hZGQtb24gYnVuZGxlLiBJdCBpcyB0aGUgREVGQVVMVCB3aGVuIGJpbGxpbmcgaXMgZGlzYWJsZWQgKG5vXG4gKiBtZXRlcmluZy9lbmZvcmNlbWVudCBzdXJmYWNlIGV4aXN0cywgc28gbm90aGluZyBpcyBjYXBwZWQpLCBhbmQgaXQgaXMgTkVWRVJcbiAqIHNob3duIG9yIHNlbGVjdGFibGUgd2hlbiBiaWxsaW5nIGlzIGVuYWJsZWQg4oCUIHNlZSBgU1RBTkRBUkRfVElFUlNgLiAqL1xuZXhwb3J0IHR5cGUgUXVvdGFUaWVyID0gJ2RldmVsb3BlcicgfCAncHJvJyB8ICd0ZWFtJyB8ICdidXNpbmVzcycgfCAnZW50ZXJwcmlzZScgfCAndW5saW1pdGVkJztcblxuLyoqIExpbWl0IHZhbHVlcyBmb3IgZWFjaCBxdW90YSB0eXBlIHdpdGhpbiBhIHRpZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhVGllckxpbWl0cyB7XG4gIHBsdWdpbnM6IG51bWJlcjtcbiAgcGlwZWxpbmVzOiBudW1iZXI7XG4gIGFwaUNhbGxzOiBudW1iZXI7XG4gIGFpQ2FsbHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEFnZ3JlZ2F0ZSByZWdpc3RyeSBzdG9yYWdlIGNhcCBpbiBCWVRFUy4gQ291bnRlZCBhY3Jvc3MgZXZlcnkgcmVwb1xuICAgKiB1bmRlciB0aGUgb3JnJ3MgYG9yZy17b3JnSWR9L2AgbmFtZXNwYWNlLiAtMSBtZWFucyB1bmxpbWl0ZWQuXG4gICAqIHB1c2gtZ2F0ZSByZWFkcyB0aGlzOyB0aGUgaW1hZ2UtcmVnaXN0cnkgcmVqZWN0cyB0b2tlbiBpc3N1YW5jZSBmb3JcbiAgICogYHB1c2hgIHNjb3BlIHdoZW4gdGhlIG9yZydzIG1lYXN1cmVkIHVzYWdlIGV4Y2VlZHMgdGhlIGxpbWl0LlxuICAgKi9cbiAgc3RvcmFnZUJ5dGVzOiBudW1iZXI7XG4gIC8qKiBDb3VudC1xdW90YXMgb24gdGhlIHVzZXItZWRpdGFibGUgZmVhdHVyZSB0YWJsZXMgYWRkZWQgdG8gY2xvc2UgcGVyLW9yZ1xuICAgKiAgRG9TIHZpYSBzcGFtLiAtMSBtZWFucyB1bmxpbWl0ZWQuICovXG4gIGRhc2hib2FyZHM6IG51bWJlcjtcbiAgYWxlcnRSdWxlczogbnVtYmVyO1xuICBhbGVydERlc3RpbmF0aW9uczogbnVtYmVyO1xuICBpZHBDb25maWdzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBY3RpdmUsIG5vbi1zdXNwZW5kZWQgcGx1Z2luLWVjb3N5c3RlbSBsaXN0aW5ncyB0aGUgb3JnIHB1Ymxpc2hlc1xuICAgKiAoZG9jcy9wbHVnaW4taW5zdGFsbGluZy5tZCkuIEEgQ09VTlQgcXVvdGEg4oCUIGluc3RhbGxzIG5ldmVyXG4gICAqIGNvdW50LiAtMSA9IHVubGltaXRlZC4gRXh0ZW5kYWJsZSB2aWEgdGhlIGBsaXN0aW5nX3BhY2tgIGFkZC1vbiBidW5kbGUuXG4gICAqL1xuICBsaXN0aW5nczogbnVtYmVyO1xuICAvKipcbiAgICogTWF4IG9yZyBtZW1iZXJzIChhY3RpdmUgdXNlcnMgLyBzZWF0cykuIC0xID0gdW5saW1pdGVkLiBUaGlzIGlzIHRoZSBcIlRlYW1cIlxuICAgKiB0aWVyIGRpZmZlcmVudGlhdG9yIOKAlCBlbmZvcmNlZCBhdCBtZW1iZXItaW52aXRlIHRpbWUgKGFuIGludml0ZSBpcyBibG9ja2VkXG4gICAqIHdoZW4gYWN0aXZlIG1lbWJlcnMgKyBwZW5kaW5nIGludml0ZXMgd291bGQgZXhjZWVkIHRoaXMpLlxuICAgKi9cbiAgc2VhdHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heCBkZXNpZ25hdGVkIFNVUFBPUlQgQ09OVEFDVFMg4oCUIHRoZSBtZW1iZXJzIGF1dGhvcmlzZWQgdG8gb3BlbiBzdXBwb3J0XG4gICAqIGNhc2VzLiAtMSA9IHVubGltaXRlZC4gQmFzZSBpcyAqKjAgb24gZXZlcnkgdGllcioqOiBzdXBwb3J0IGlzIGFuIGFkZC1vbiBhdFxuICAgKiBldmVyeSB0aWVyIGFuZCBpbmNsdWRlZCBpbiBub25lLCBzbyBhbiBvcmcgd2l0aCBubyBzdXBwb3J0IGJ1bmRsZSBoYXMgbm9cbiAgICogY29udGFjdHMgYW5kIGNhbm5vdCBvcGVuIGEgY2FzZS4gVGhhdCBtYWtlcyB0aGUgc3VwcG9ydCBwYXl3YWxsIGEgcXVvdGFcbiAgICogY2hlY2sgcmF0aGVyIHRoYW4gYSBmZWF0dXJlIGZsYWcuXG4gICAqXG4gICAqIExpa2UgYHNlYXRzYCB0aGlzIGlzIGEgdGllciBMSU1JVCwgbm90IGEgdHJhY2tlZCBjb3VudGVyIOKAlCBlbmZvcmNlZCBsaXZlIGF0XG4gICAqIGRlc2lnbmF0aW9uIHRpbWUgYWdhaW5zdCBjdXJyZW50IGRlc2lnbmF0aW9ucyBhY3Jvc3MgdGhlIG9yZyBzdWJ0cmVlLlxuICAgKiBFeHRlbmRlZCBwZXIgdW5pdCBieSB0aGUgYHN1cHBvcnRfc3RhbmRhcmRgIC8gYHN1cHBvcnRfcHJpb3JpdHlgIEJBU0VMSU5FXG4gICAqIGJ1bmRsZXMsIHdoaWNoIGFyZSBwcmljZWQgcGVyIGNvbnRhY3QuXG4gICAqL1xuICBzdXBwb3J0Q29udGFjdHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEhvdyBtYW55IG9mIHRob3NlIGNvbnRhY3RzIG1heSBiZSBVUEdSQURFRCB0byBwcmVtaXVtICgyNMOXNywgOC1ob3VyXG4gICAqIHJlc3BvbnNlLCBhbmQgdGhlIG9ubHkgb25lcyB3aG8gbWF5IGRlY2xhcmUgYHVyZ2VudGApLlxuICAgKlxuICAgKiBBIHNlY29uZCBkaW1lbnNpb24gcmF0aGVyIHRoYW4gYSB0aGlyZCBiYXNlbGluZSBsZXZlbCwgYmVjYXVzZSBwcmVtaXVtIGlzIGFuXG4gICAqIFVQR1JBREUgYW5kIG5vdCBhbiBhbHRlcm5hdGl2ZS4gVGhlIHNoYXBlIGl0IGVuY29kZXM6IGFuIG9yZyBidXlzIE4gYmFzZWxpbmVcbiAgICogY29udGFjdHMgYW5kIHVwZ3JhZGVzIE0gb2YgdGhlbSwgTSDiiaQgTi4gVGhhdCBpcyB3aGF0IGxldHMgYSAxMDAtc2VhdFxuICAgKiBjdXN0b21lciBnaXZlIGJ1c2luZXNzLWhvdXJzIHN1cHBvcnQgdG8gaXRzIHRocmVlIG5hbWVkIGNvbnRhY3RzIGFuZCAyNMOXN1xuICAgKiB0byB0aGUgb25lIHdobyBjYXJyaWVzIHRoZSBwYWdlciDigJQgdGhlIGNhc2UgdGhlIG11dHVhbGx5LWV4Y2x1c2l2ZSBsYWRkZXJcbiAgICogY291bGQgbm90IGV4cHJlc3MgYXQgYWxsLCB3aGVyZSBidXlpbmcgXCI5OSBzdGFuZGFyZCArIDEgcHJlbWl1bVwiIGNoYXJnZWQgZm9yXG4gICAqIDEwMCB1bml0cyBhbmQgZ3JhbnRlZCBvbmUgY29udGFjdC5cbiAgICpcbiAgICogQURESVRJVkUsIGRlbGliZXJhdGVseS4gQSBwcmVtaXVtIGNvbnRhY3QgY29zdHMgdGhlIGJhc2VsaW5lIHVuaXQgUExVUyB0aGVcbiAgICogdXBncmFkZSAoJDE5Ljk5ICsgJDk5Ljk5KSwgYmVjYXVzZSBpdCBpcyBzZXJ2ZWQgZHVyaW5nIGJ1c2luZXNzIGhvdXJzXG4gICAqIHRocm91Z2ggdGhlIGJhc2VsaW5lIGFuZCBvdmVybmlnaHQgdGhyb3VnaCB0aGUgdXBncmFkZTsgcHJpY2luZyB0aGUgdXBncmFkZVxuICAgKiBhcyBhIGRlbHRhIHdvdWxkIHByZXRlbmQgdGhlIGJhc2VsaW5lIHdlcmUgZnJlZS4gQmFzZSAwIG9uIGV2ZXJ5IHRpZXIsIGxpa2VcbiAgICogYHN1cHBvcnRDb250YWN0c2AsIHNvIHRoZSBwYXl3YWxsIHN0YXlzIGEgcXVvdGEgY2hlY2suXG4gICAqL1xuICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZXBvcnRpbmcgcmV0ZW50aW9uIGluIERBWVMg4oCUIE5PVCBhIGZsb3cgcXVvdGEgKG5ldmVyIGRlY3JlbWVudGVkLCBhYnNlbnRcbiAgICogZnJvbSBgVkFMSURfUVVPVEFfVFlQRVNgKTogdGhlc2UgcmlkZSB0aGUgdGllci1iYXNlbGluZSArIGJ1bmRsZS1ncmFudCBtYXRoXG4gICAqIHB1cmVseSBhcyBhbiBlbnRpdGxlbWVudCB0aGUgYmlsbGluZyBzZXJ2aWNlIHN5bmNzIHRvIHJlcG9ydGluZydzXG4gICAqIGBkb3JhX3NldHRpbmdzYC4gLTEgPSB1bmxpbWl0ZWQgKHRoZSBzd2VlcCBza2lwcyB0aGUgb3JnIGVudGlyZWx5KS5cbiAgICogICBgZXZlbnRSZXRlbnRpb25EYXlzYCDigJQgbm9uLWRlcGxveSBgcGlwZWxpbmVfZXZlbnRzYCAoU1RBR0UvQUNUSU9OL2J1aWxkKS5cbiAgICogICBgZG9yYVJldGVudGlvbkRheXNgICDigJQgZGVwbG95IGV2ZW50cyArIGBkZXBsb3ltZW50X291dGNvbWVzYCArIGBpbmNpZGVudHNgLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBwZXItb3JnIHJlcG9ydC1xdWVyeSB3aW5kb3cgZm9yIERPUkEgcm91dGVzLlxuICAgKiBFeHRlbmRhYmxlIHZpYSB0aGUgYHJldGVudGlvbl9wYWNrYCAvIGBkb3JhX2hpc3RvcnlfcGFja2AgYWRkLW9uIGJ1bmRsZXMuXG4gICAqL1xuICBldmVudFJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgZG9yYVJldGVudGlvbkRheXM6IG51bWJlcjtcbn1cblxuLyoqIEZ1bGwgcHJlc2V0IGZvciBhIHNpbmdsZSB0aWVyIChsYWJlbCArIGxpbWl0cykuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhVGllclByZXNldCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxpbWl0czogUXVvdGFUaWVyTGltaXRzO1xufVxuXG4vKipcbiAqIFByZXNldCBsaW1pdHMgZm9yIGVhY2ggdGllci4gLTEgbWVhbnMgdW5saW1pdGVkLlxuICpcbiAqIEFJIGNhbGxzIGFyZSBzaXplZCBtdWNoIHNtYWxsZXIgdGhhbiBgYXBpQ2FsbHNgIGJlY2F1c2UgZWFjaCBjYWxsIGhhc1xuICogZXh0ZXJuYWwgcHJvdmlkZXIgY29zdCAofiQwLjAxJDAuMTAvY2FsbCkuIERldmVsb3BlciB0aWVyIGFsbG93cyBsaWdodFxuICogZXhwbG9yYXRpb24gKDUwL3BlcmlvZCk7IFBybyBsaWZ0cyB0byAyLDUwMDsgRW50ZXJwcmlzZSBpcyBjYXBwZWQgaGlnaFxuICogKDI1LDAwMCkg4oCUIGZhaXItdXNlLCBub3QgbGl0ZXJhbGx5IHVubGltaXRlZC5cbiAqXG4gKiBgc3RvcmFnZUJ5dGVzYCBpcyB0aGUgYWdncmVnYXRlIHJlZ2lzdHJ5IGNhcCBwZXIgb3JnLiBTaXplZFxuICogYXJvdW5kIHBsdWdpbi1pbWFnZSByZWFsaXRpZXM6IGEgdHlwaWNhbCBwbHVnaW4gaW1hZ2UgaXMgMjAwNTAwIE1CO1xuICogRGV2ZWxvcGVyJ3MgMiBHQiBob2xkcyB+NCB2ZXJzaW9ucyDDlyB+NTAwIE1CLCBQcm8ncyA1MCBHQiBjb3ZlcnMgYVxuICogbWF0dXJlIGNhdGFsb2cuIE9wZXJhdG9ycyBjYW4gb3ZlcnJpZGUgcGVyLW9yZyB2aWEgdGhlIHF1b3RhIENSVUQgQVBJLlxuICovXG5jb25zdCBHQiA9IDEwMjQgKiAxMDI0ICogMTAyNDtcblxuLyoqXG4gKiBDb2RlLWRlZmF1bHQgbGltaXRzIHBlciB0aWVyIOKAlCB0aGUgZmFsbGJhY2sgd2hlbiBubyBlbnYgb3ZlcnJpZGUgaXMgc2V0LlxuICogLTEgbWVhbnMgdW5saW1pdGVkLiAoQ291bnRzIHNpemVkIHRvIFwiY29tZm9ydGFibHkgZW5vdWdoIGZvciBvbmUgdGVhbSwgbm90XG4gKiBzY3JpcHQgc3BhbVwiOiAyMCBkYXNoYm9hcmRzLCA1MCBhbGVydCBydWxlcywgMTAgZGVzdGluYXRpb25zLCAxIElkUCBjb25maWdcbiAqIGZvciBEZXZlbG9wZXI7IHNjYWxlZCB1cCBmb3IgUHJvOyAtMSAodW5jYXBwZWQpIGZvciB0aGUgY2hlYXAgY291bnQtcXVvdGFzXG4gKiBvbiBUZWFtL0VudGVycHJpc2Ugd2hpbGUgY29zdC1kcml2aW5nIHF1b3RhcyDigJQgaW5jbC4gYXBpQ2FsbHMg4oCUIHN0YXkgZmluaXRlLilcbiAqL1xuY29uc3QgREVGQVVMVF9USUVSX0xJTUlUUzogUmVjb3JkPFF1b3RhVGllciwgUXVvdGFUaWVyTGltaXRzPiA9IHtcbiAgLy8gRnJlZSB0aWVyOiBzaW5nbGUgc2VhdCwgMiBwaXBlbGluZXMsIGFwaUNhbGxzIENBUFBFRCAod2FzIHVubGltaXRlZCDigJQgYVxuICAvLyBEb1MvYWJ1c2UgaG9sZSBvbiBhIHNoYXJlZCByZXNvdXJjZSk7IGFpQ2FsbHMgc21hbGwgKGVhY2ggaGFzIH4kMC4wMS0wLjEwXG4gIC8vIGV4dGVybmFsIGNvc3QpLiBMZWFuIGJhc2Ug4oCUIGdyb3d0aCBoYXBwZW5zIGJ5IHVwZ3JhZGluZywgbm90IHN0YWNraW5nIGhlcmUuXG4gIGRldmVsb3Blcjoge1xuICAgIHBsdWdpbnM6IDEwLFxuICAgIHBpcGVsaW5lczogMixcbiAgICBhcGlDYWxsczogMjVfMDAwLFxuICAgIGFpQ2FsbHM6IDIwLFxuICAgIHN0b3JhZ2VCeXRlczogMiAqIEdCLFxuICAgIGRhc2hib2FyZHM6IDIwLFxuICAgIGFsZXJ0UnVsZXM6IDUwLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAxMCxcbiAgICBpZHBDb25maWdzOiAxLFxuICAgIGxpc3RpbmdzOiAzLFxuICAgIHNlYXRzOiAxLFxuICAgIHN1cHBvcnRDb250YWN0czogMCxcbiAgICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiAwLFxuICAgIGV2ZW50UmV0ZW50aW9uRGF5czogMzAsXG4gICAgZG9yYVJldGVudGlvbkRheXM6IDE4MCxcbiAgfSxcbiAgLy8gUHJvID0gaW5kaXZpZHVhbCBwb3dlciB1c2VyLCBzaW5nbGUgc2VhdCwgaW5kaXZpZHVhbCBwcmljaW5nLiBBIDJuZCBzZWF0IChvclxuICAvLyB0ZWFtIGNvbGxhYm9yYXRpb24pIHJlcXVpcmVzIHRoZSBUZWFtIHRpZXIg4oCUIHRoZSBgc2VhdGAgYWRkLW9uIGlzIFRlYW0rIG9ubHksXG4gIC8vIGtlZXBpbmcgVGVhbSB0aGUgY29sbGFib3JhdGlvbiB0aWVyLiBQcm8ncyB2YWx1ZSBvdmVyIERldmVsb3BlciBpcyBpdHMgcmljaGVyXG4gIC8vIGNhbGwvc3RvcmFnZS9wbHVnaW4gY2VpbGluZ3MgKyBmZWF0dXJlIGFkZC1vbnMgKFNTTy9hdWRpdC9ET1JBKSwgbm90IHNlYXRzLlxuICBwcm86IHtcbiAgICBwbHVnaW5zOiAyNSxcbiAgICBwaXBlbGluZXM6IDUsXG4gICAgYXBpQ2FsbHM6IDEwMF8wMDAsXG4gICAgYWlDYWxsczogMjAwLFxuICAgIHN0b3JhZ2VCeXRlczogMjUgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAyMDAsXG4gICAgYWxlcnRSdWxlczogNTAwLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiA1MCxcbiAgICBpZHBDb25maWdzOiA1LFxuICAgIGxpc3RpbmdzOiAxMCxcbiAgICBzZWF0czogMSxcbiAgICBzdXBwb3J0Q29udGFjdHM6IDAsXG4gICAgc3VwcG9ydFByZW1pdW1Db250YWN0czogMCxcbiAgICBldmVudFJldGVudGlvbkRheXM6IDMwLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiAxODAsXG4gIH0sXG4gIC8vIFRlYW0gPSBjb2xsYWJvcmF0aW9uIHRpZXI7IHRoZSBzZWF0IGxpbWl0ICgzKSBpcyB0aGUgcmVhbCBkaWZmZXJlbnRpYXRvciBvdmVyXG4gIC8vIFBybyAoc2luZ2xlLXNlYXQpIOKAlCBpdCdzIHRoZSBtdWx0aS1zZWF0IGNvbGxhYm9yYXRpb24gZmxvb3IuIExlYW4gYmFzZSAoJDc5KTpcbiAgLy8gZ3Jvd3RoIHJpZGVzIHRoZSBzZWF0L3BpcGVsaW5lL2V0YyBhZGQtb25zIChsYW5kLWFuZC1leHBhbmQpLiBMaW1pdHMgc2l0XG4gIC8vIGJldHdlZW4gUHJvIGFuZCBFbnRlcnByaXNlLlxuICB0ZWFtOiB7XG4gICAgcGx1Z2luczogNTAsXG4gICAgcGlwZWxpbmVzOiAxMCxcbiAgICBhcGlDYWxsczogMzAwXzAwMCxcbiAgICBhaUNhbGxzOiA2MDAsXG4gICAgc3RvcmFnZUJ5dGVzOiA2MCAqIEdCLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiA1LFxuICAgIGxpc3RpbmdzOiAyNSxcbiAgICBzZWF0czogMyxcbiAgICBzdXBwb3J0Q29udGFjdHM6IDAsXG4gICAgc3VwcG9ydFByZW1pdW1Db250YWN0czogMCxcbiAgICBldmVudFJldGVudGlvbkRheXM6IDMwLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiAxODAsXG4gIH0sXG4gIC8vIEJ1c2luZXNzICgkMjQ5KTogdGhlIHN0ZXAgdGhlICQ3OSAtPiAkNTk5IGNsaWZmIHdhcyBtaXNzaW5nLiA4IHNlYXRzLCAyMFxuICAvLyBwaXBlbGluZXMsIGFuZCBET1JBIChhZHZhbmNlZF9yZXBvcnRpbmcpIGluY2x1ZGVkIHJhdGhlciB0aGFuIGFuIGFkZC1vbi5cbiAgLy8gRXZlcnkgY29zdCBkcml2ZXIgaXMgMTAwLDAwMCBhcGlDYWxscyBhbmQgMjAwIGFpQ2FsbHMgUEVSIFNFQVQsIHRoZSBzYW1lXG4gIC8vIHBlci1zZWF0IHJhdGUgYXMgUHJvL1RlYW0vRW50ZXJwcmlzZSwgc28gdGhlIGxhZGRlciByZWFkcyBjb25zaXN0ZW50bHkgdG8gYVxuICAvLyBidXllciB3aG8gZGl2aWRlcyBieSBoZWFkY291bnQuIENvdW50LXF1b3RhcyB0aGF0IFRlYW0gYWxyZWFkeSB1bmNhcHMgc3RheVxuICAvLyAtMTsgYGlkcENvbmZpZ3NgIHNpdHMgYmV0d2VlbiBUZWFtJ3MgNSBhbmQgRW50ZXJwcmlzZSdzIHVubGltaXRlZC5cbiAgYnVzaW5lc3M6IHtcbiAgICBwbHVnaW5zOiAxMDAsXG4gICAgcGlwZWxpbmVzOiAyMCxcbiAgICBhcGlDYWxsczogODAwXzAwMCxcbiAgICBhaUNhbGxzOiAxXzYwMCxcbiAgICBzdG9yYWdlQnl0ZXM6IDEyMCAqIEdCLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiAxMCxcbiAgICBsaXN0aW5nczogNTAsXG4gICAgc2VhdHM6IDgsXG4gICAgc3VwcG9ydENvbnRhY3RzOiAwLFxuICAgIHN1cHBvcnRQcmVtaXVtQ29udGFjdHM6IDAsXG4gICAgZXZlbnRSZXRlbnRpb25EYXlzOiAzMCxcbiAgICBkb3JhUmV0ZW50aW9uRGF5czogMTgwLFxuICB9LFxuICAvLyBFbnRlcnByaXNlICgkNTk5LCBoZWxkKTogdGhlIGFsbC1pbmNsdXNpdmUgdGllciDigJQgMTUgc2VhdHMsIDMwIHBpcGVsaW5lcywgQUxMXG4gIC8vIHByZW1pdW0gZmVhdHVyZXMgaW5jbHVkZWQgKHNlZSBUSUVSX0ZFQVRVUkVTKS4gRkFJUi1VU0Ug4oCUIGNvc3QgZHJpdmVycyAoYXBpQ2FsbHMsXG4gIC8vIGFpQ2FsbHMsIHN0b3JhZ2VCeXRlcykgY2FwcGVkIHNvIG9uZSBhY2NvdW50IGNhbid0IHJ1biB1cCB1bmJvdW5kZWRcbiAgLy8gY29tcHV0ZS9wcm92aWRlci9zdG9yYWdlIGNvc3Qgb24gYSBmbGF0IHByaWNlOyBjaGVhcCBjb3VudC1xdW90YXMgc3RheSAtMS5cbiAgZW50ZXJwcmlzZToge1xuICAgIHBsdWdpbnM6IDE1MCxcbiAgICBwaXBlbGluZXM6IDMwLFxuICAgIGFwaUNhbGxzOiAxXzUwMF8wMDAsXG4gICAgYWlDYWxsczogM18wMDAsXG4gICAgc3RvcmFnZUJ5dGVzOiAyNTAgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAtMSxcbiAgICBhbGVydFJ1bGVzOiAtMSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogLTEsXG4gICAgaWRwQ29uZmlnczogLTEsXG4gICAgbGlzdGluZ3M6IDEwMCxcbiAgICBzZWF0czogMTUsXG4gICAgc3VwcG9ydENvbnRhY3RzOiAwLFxuICAgIHN1cHBvcnRQcmVtaXVtQ29udGFjdHM6IDAsXG4gICAgZXZlbnRSZXRlbnRpb25EYXlzOiAzMCxcbiAgICBkb3JhUmV0ZW50aW9uRGF5czogMTgwLFxuICB9LFxuICAvLyBVbmxpbWl0ZWQ6IEVWRVJZIHF1b3RhIHVuY2FwcGVkICgtMSkuIFRoZSBkZWZhdWx0IHdoZW4gYmlsbGluZyBpcyBkaXNhYmxlZFxuICAvLyAobm8gZW5mb3JjZW1lbnQgc3VyZmFjZSkg4oCUIG5ldmVyIHNob3duL3NlbGVjdGFibGUgd2hlbiBiaWxsaW5nIGlzIGVuYWJsZWQuXG4gIHVubGltaXRlZDoge1xuICAgIHBsdWdpbnM6IC0xLFxuICAgIHBpcGVsaW5lczogLTEsXG4gICAgYXBpQ2FsbHM6IC0xLFxuICAgIGFpQ2FsbHM6IC0xLFxuICAgIHN0b3JhZ2VCeXRlczogLTEsXG4gICAgZGFzaGJvYXJkczogLTEsXG4gICAgYWxlcnRSdWxlczogLTEsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IC0xLFxuICAgIGlkcENvbmZpZ3M6IC0xLFxuICAgIGxpc3RpbmdzOiAtMSxcbiAgICBzZWF0czogLTEsXG4gICAgc3VwcG9ydENvbnRhY3RzOiAtMSxcbiAgICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiAtMSxcbiAgICBldmVudFJldGVudGlvbkRheXM6IC0xLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiAtMSxcbiAgfSxcbn07XG5cbi8qKlxuICogUmVhZCBhIHRpZXIgTElNSVQgZW52IHZhci4gYC0xYCA9IHVubGltaXRlZDsgYW55dGhpbmcgYmVsb3cgdGhhdCBpcyBub25zZW5zZVxuICogKGEgYC01YCBsaW1pdCB3b3VsZCBzaGlwIGEgYnJva2VuIGZpbml0ZSBjYXApLCBzbyBpdCBmYWxscyBiYWNrIHRvIHRoZSBjb2RlXG4gKiBkZWZhdWx0IHJhdGhlciB0aGFuIGNsYW1waW5nIHVwIHRvIGAtMWAuIFRoZSBwYXJzaW5nIGl0c2VsZiBpcyBhcGktY29yZSdzXG4gKiBzaGFyZWQgYGVudkludGAg4oCUIHN0cmljdCBhYm91dCBkZWNpbWFscy9nYXJiYWdlIOKAlCBub3QgYSBsb2NhbCByZS1kZXJpdmF0aW9uLlxuICovXG5mdW5jdGlvbiB0aWVyTGltaXRFbnYobmFtZTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IGVudkludChuYW1lLCBmYWxsYmFjayk7XG4gIHJldHVybiBuIDwgLTEgPyBmYWxsYmFjayA6IG47XG59XG5cbi8qKlxuICogUGVyLXRpZXIgbGltaXRzLCBlYWNoIG92ZXJyaWRhYmxlIHZpYSBgUVVPVEFfVElFUl88VElFUj5fPExJTUlUPmAgZW52IHZhcnNcbiAqIChlLmcuIGBRVU9UQV9USUVSX1BST19QSVBFTElORVM9MjUwYCwgYFFVT1RBX1RJRVJfREVWRUxPUEVSX1NUT1JBR0VfQllURVM9Li4uYCkuXG4gKiBVbnNldC9lbXB0eSDihpIgdGhlIGNvZGUgZGVmYXVsdC4gYC0xYCA9IHVubGltaXRlZC4gUmVhZCBvbmNlIGF0IG1vZHVsZSBsb2FkIOKAlFxuICogb24gazhzIHRoZXNlIGZsb3cgaW4gdmlhIHRoZSBgYXBwLWVudmAgQ29uZmlnTWFwIChidWlsdCBmcm9tIGAuZW52YCkuXG4gKi9cbmZ1bmN0aW9uIHRpZXJMaW1pdHModGllcjogUXVvdGFUaWVyKTogUXVvdGFUaWVyTGltaXRzIHtcbiAgLy8gYHVubGltaXRlZGAgaXMgdW5jYXBwZWQgQlkgREVGSU5JVElPTjogRVZFUlkgcXVvdGEgaXMgLTEgYW5kIGl0IGlzIE5PVFxuICAvLyBlbnYtb3ZlcnJpZGFibGUuIFJlYWRpbmcgUVVPVEFfVElFUl9VTkxJTUlURURfKiBoZXJlIHdvdWxkIGxldCBhIHN0cmF5IGVudlxuICAvLyB2YXIgc2lsZW50bHkgY2FwIHRoZSBiaWxsaW5nLURJU0FCTEVEIGRlZmF1bHQgdGllciDigJQgc3VyZmFjaW5nIGFzIGEgc3B1cmlvdXNcbiAgLy8gXCJxdW90YSBleGNlZWRlZFwiIG9uIGEgZGVwbG95IHRoYXQgbWV0ZXJzIG5vdGhpbmcuIERlcml2ZSAtMSBmb3IgZXZlcnkgZmllbGRcbiAgLy8gZnJvbSB0aGUgbGltaXRzIHNoYXBlIHNvIGEgbmV3bHktYWRkZWQgcXVvdGEgaXMgdW5jYXBwZWQgaGVyZSBhdXRvbWF0aWNhbGx5LlxuICBpZiAodGllciA9PT0gJ3VubGltaXRlZCcpIHtcbiAgICBjb25zdCB1bmNhcHBlZCA9IHsgLi4uREVGQVVMVF9USUVSX0xJTUlUUy51bmxpbWl0ZWQgfTtcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModW5jYXBwZWQpIGFzIChrZXlvZiBRdW90YVRpZXJMaW1pdHMpW10pIHVuY2FwcGVkW2tdID0gLTE7XG4gICAgcmV0dXJuIHVuY2FwcGVkO1xuICB9XG4gIGNvbnN0IGQgPSBERUZBVUxUX1RJRVJfTElNSVRTW3RpZXJdO1xuICBjb25zdCBUID0gdGllci50b1VwcGVyQ2FzZSgpO1xuICByZXR1cm4ge1xuICAgIHBsdWdpbnM6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X1BMVUdJTlNgLCBkLnBsdWdpbnMpLFxuICAgIHBpcGVsaW5lczogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fUElQRUxJTkVTYCwgZC5waXBlbGluZXMpLFxuICAgIGFwaUNhbGxzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9BUElfQ0FMTFNgLCBkLmFwaUNhbGxzKSxcbiAgICBhaUNhbGxzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9BSV9DQUxMU2AsIGQuYWlDYWxscyksXG4gICAgc3RvcmFnZUJ5dGVzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9TVE9SQUdFX0JZVEVTYCwgZC5zdG9yYWdlQnl0ZXMpLFxuICAgIGRhc2hib2FyZHM6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X0RBU0hCT0FSRFNgLCBkLmRhc2hib2FyZHMpLFxuICAgIGFsZXJ0UnVsZXM6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X0FMRVJUX1JVTEVTYCwgZC5hbGVydFJ1bGVzKSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fQUxFUlRfREVTVElOQVRJT05TYCwgZC5hbGVydERlc3RpbmF0aW9ucyksXG4gICAgaWRwQ29uZmlnczogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fSURQX0NPTkZJR1NgLCBkLmlkcENvbmZpZ3MpLFxuICAgIGxpc3RpbmdzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9MSVNUSU5HU2AsIGQubGlzdGluZ3MpLFxuICAgIHNlYXRzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9TRUFUU2AsIGQuc2VhdHMpLFxuICAgIHN1cHBvcnRDb250YWN0czogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fU1VQUE9SVF9DT05UQUNUU2AsIGQuc3VwcG9ydENvbnRhY3RzKSxcbiAgICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9TVVBQT1JUX1BSRU1JVU1fQ09OVEFDVFNgLCBkLnN1cHBvcnRQcmVtaXVtQ29udGFjdHMpLFxuICAgIGV2ZW50UmV0ZW50aW9uRGF5czogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fRVZFTlRfUkVURU5USU9OX0RBWVNgLCBkLmV2ZW50UmV0ZW50aW9uRGF5cyksXG4gICAgZG9yYVJldGVudGlvbkRheXM6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X0RPUkFfUkVURU5USU9OX0RBWVNgLCBkLmRvcmFSZXRlbnRpb25EYXlzKSxcbiAgfTtcbn1cblxuLy8gTGFiZWxzIGFyZSBvdmVycmlkYWJsZSB2aWEgYFFVT1RBX1RJRVJfPFRJRVI+X0xBQkVMYCAoZGlzcGxheSBuYW1lIG9ubHkpLlxuZXhwb3J0IGNvbnN0IFFVT1RBX1RJRVJTOiBSZWNvcmQ8UXVvdGFUaWVyLCBRdW90YVRpZXJQcmVzZXQ+ID0ge1xuICBkZXZlbG9wZXI6IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9ERVZFTE9QRVJfTEFCRUwnLCAnRGV2ZWxvcGVyJyksIGxpbWl0czogdGllckxpbWl0cygnZGV2ZWxvcGVyJykgfSxcbiAgcHJvOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfUFJPX0xBQkVMJywgJ1BybycpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ3BybycpIH0sXG4gIHRlYW06IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9URUFNX0xBQkVMJywgJ1RlYW0nKSwgbGltaXRzOiB0aWVyTGltaXRzKCd0ZWFtJykgfSxcbiAgYnVzaW5lc3M6IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9CVVNJTkVTU19MQUJFTCcsICdCdXNpbmVzcycpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ2J1c2luZXNzJykgfSxcbiAgZW50ZXJwcmlzZTogeyBsYWJlbDogZW52U3RyKCdRVU9UQV9USUVSX0VOVEVSUFJJU0VfTEFCRUwnLCAnRW50ZXJwcmlzZScpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ2VudGVycHJpc2UnKSB9LFxuICB1bmxpbWl0ZWQ6IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9VTkxJTUlURURfTEFCRUwnLCAnVW5saW1pdGVkJyksIGxpbWl0czogdGllckxpbWl0cygndW5saW1pdGVkJykgfSxcbn07XG5cbi8qKiBBbGwgdmFsaWQgdGllciBuYW1lcyAoaW5jbC4gYHVubGltaXRlZGApLiBVc2VkIGZvciB2YWxpZGF0aW9uIG9mIGEgKnN0b3JlZCpcbiAqICB0aWVyIOKAlCBgdW5saW1pdGVkYCBpcyBhIHZhbGlkIHZhbHVlIGV2ZW4gdGhvdWdoIGl0J3MgbmV2ZXIgb2ZmZXJlZCBmb3Igc2FsZS4gKi9cbmV4cG9ydCBjb25zdCBWQUxJRF9USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBPYmplY3Qua2V5cyhRVU9UQV9USUVSUykgYXMgUXVvdGFUaWVyW107XG5cbi8qKiBUaGUgc3RhbmRhcmQsIGJpbGxpbmctc2VsZWN0YWJsZSB0aWVycyDigJQgdGhlIG9uZXMgb2ZmZXJlZCBhcyBwdXJjaGFzYWJsZSBwbGFuc1xuICogIGFuZCBzaG93biBpbiB0aWVyIHBpY2tlcnMuIERlcml2ZWQgYXMgXCJldmVyeSB2YWxpZCB0aWVyIGV4Y2VwdCBgdW5saW1pdGVkYFwiLFxuICogIHdoaWNoIGlzIHRoZSBiaWxsaW5nLURJU0FCTEVEIGRlZmF1bHQgYW5kIGlzIG5ldmVyIGRpc3BsYXllZC9zZWxlY3RhYmxlIHdoZW5cbiAqICBiaWxsaW5nIGlzIGVuYWJsZWQuIEtlcHQgRFJZIG9mZiBgVkFMSURfVElFUlNgIHNvIGFkZGluZyBhIHRpZXIgZmxvd3MgdGhyb3VnaC4gKi9cbmV4cG9ydCBjb25zdCBTVEFOREFSRF9USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBWQUxJRF9USUVSUy5maWx0ZXIoKHQpID0+IHQgIT09ICd1bmxpbWl0ZWQnKTtcblxuLyoqIFRpZXJzIHRoYXQgcGVybWl0IHRoZSBvcmcg4oaSIHRlYW0gaGllcmFyY2h5IChuZXN0aW5nIHRlYW1zIHVuZGVyIGEgcm9vdCkuIFRoZVxuICogIGJpbGxpbmctb2ZmIGB1bmxpbWl0ZWRgIHRpZXIgaXMgdGVhbS1jYXBhYmxlIChpdCdzIHRoZSBtb3N0IHBlcm1pc3NpdmUpOyB0aGVcbiAqICBlbnRyeS1sZXZlbCBgZGV2ZWxvcGVyYC9gcHJvYCB0aWVycyBhcmUgbm90LiBTaW5nbGUgc291cmNlIGZvciB0aGUgcGFyZW50LVxuICogIGVsaWdpYmlsaXR5ICsgZG93bmdyYWRlLW92ZXJjYXAgY2hlY2tzIHNvIHRoZXkgY2FuJ3QgZHJpZnQuICovXG5leHBvcnQgY29uc3QgVEVBTV9DQVBBQkxFX1RJRVJTOiByZWFkb25seSBRdW90YVRpZXJbXSA9IFsndGVhbScsICdidXNpbmVzcycsICdlbnRlcnByaXNlJywgJ3VubGltaXRlZCddO1xuZXhwb3J0IGZ1bmN0aW9uIHRpZXJBbGxvd3NUZWFtcyh0aWVyOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXRpZXIgJiYgKFRFQU1fQ0FQQUJMRV9USUVSUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModGllcik7XG59XG5cbi8qKiBUaWVycyB0aGF0IG1heSBidXkgZXh0cmEgc2VhdHMg4oCUIGJpbGxpbmcncyBwZXItc2VhdCBgc2VhdGAgYWRkLW9uLiBTZWF0cyBhcmVcbiAqICB0aGUgVGVhbSBkaWZmZXJlbnRpYXRvciwgc28gdGhlIHNpbmdsZS1zZWF0IGBkZXZlbG9wZXJgL2Bwcm9gIHRpZXJzIGNhbm5vdFxuICogIHN0YWNrIHRoZW0gYW5kIG11c3QgdXBncmFkZSBpbnN0ZWFkOyBgdW5saW1pdGVkYCBoYXMgbm8gc2VhdCBjYXAgYXQgYWxsLlxuICogIFNpbmdsZSBzb3VyY2UgZm9yIHRoZSBiaWxsaW5nIGNhdGFsb2cgYW5kIGV2ZXJ5IFwib3V0IG9mIHNlYXRzXCIgbWVzc2FnZS4gKi9cbmV4cG9ydCBjb25zdCBTRUFUX1BBQ0tfVElFUlM6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gWyd0ZWFtJywgJ2J1c2luZXNzJywgJ2VudGVycHJpc2UnXTtcblxuLyoqIEhvdyBhbiBhY2NvdW50IHRoYXQgaGFzIHVzZWQgZXZlcnkgc2VhdCBjYW4gZ2V0IGFub3RoZXIuICovXG5leHBvcnQgdHlwZSBTZWF0UmVtZWR5ID0gJ3VwZ3JhZGUnIHwgJ3NlYXRfcGFjayc7XG5cbi8qKlxuICogVGhlIHJlbWVkeSB0byBvZmZlciBhbiBhY2NvdW50IGF0IGl0cyBzZWF0IGNhcCwgZnJvbSB0aGUgQUNDT1VOVCdzIChyb290KSB0aWVyOlxuICogYHNlYXRfcGFja2Agd2hlcmUgc2VhdHMgY2FuIGJlIGJvdWdodCwgYHVwZ3JhZGVgIG9uIHRoZSBzaW5nbGUtc2VhdCB0aWVycy5cbiAqIGBudWxsYCB3aGVuIHRoZSB0aWVyIGlzIHVua25vd24gb3IgaGFzIG5vIGNhcCDigJQgc2F5IG5vdGhpbmcgcmF0aGVyIHRoYW4gZ3Vlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWF0UmVtZWR5KHRpZXI6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBTZWF0UmVtZWR5IHwgbnVsbCB7XG4gIGlmICghdGllciB8fCAhaXNWYWxpZFRpZXIodGllcikgfHwgdGllciA9PT0gJ3VubGltaXRlZCcpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFNFQVRfUEFDS19USUVSUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModGllcikgPyAnc2VhdF9wYWNrJyA6ICd1cGdyYWRlJztcbn1cblxuLyoqIFdoZXRoZXIgdGhlIGJpbGxpbmcgc2VydmljZSBpcyBlbmFibGVkIGluIHRoaXMgZGVwbG95bWVudCAoYEJJTExJTkdfRU5BQkxFRGAsXG4gKiAgb3B0LW91dCBkZWZhdWx0LW9uIOKAlCBtaXJyb3JzIHRoZSBiaWxsaW5nL3BsYXRmb3JtIGNvbmZpZ3MpLiBXaXRoIGJpbGxpbmcgT0ZGXG4gKiAgdGhlcmUncyBubyBtZXRlcmluZy9lbmZvcmNlbWVudCBzdXJmYWNlLCBzbyB0aGUgZGVmYXVsdCB0aWVyIGlzIGB1bmxpbWl0ZWRgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmlsbGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbnZCb29sKCdCSUxMSU5HX0VOQUJMRUQnLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IHRpZXIgYXNzaWduZWQgdG8gbmV3IG9yZ2FuaXphdGlvbnMuXG4gKiAtIEJpbGxpbmcgRElTQUJMRUQg4oaSIGB1bmxpbWl0ZWRgIChub3RoaW5nIGlzIG1ldGVyZWQsIHNvIGV2ZXJ5dGhpbmcgaXMgdW5jYXBwZWQpLlxuICogLSBCaWxsaW5nIEVOQUJMRUQgIOKGkiBgREVGQVVMVF9RVU9UQV9USUVSYCBpZiBpdCdzIGEgdmFsaWQgc3RhbmRhcmQgdGllciwgZWxzZSBgZGV2ZWxvcGVyYC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElFUjogUXVvdGFUaWVyID0gIWlzQmlsbGluZ0VuYWJsZWQoKVxuICA/ICd1bmxpbWl0ZWQnXG4gIDogKGlzVmFsaWRUaWVyKHByb2Nlc3MuZW52LkRFRkFVTFRfUVVPVEFfVElFUiA/PyAnJykgJiYgcHJvY2Vzcy5lbnYuREVGQVVMVF9RVU9UQV9USUVSICE9PSAndW5saW1pdGVkJ1xuICAgID8gKHByb2Nlc3MuZW52LkRFRkFVTFRfUVVPVEFfVElFUiBhcyBRdW90YVRpZXIpXG4gICAgOiAnZGV2ZWxvcGVyJyk7XG5cbi8qKiBDaGVjayB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgdmFsaWQgUXVvdGFUaWVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaWVyKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBRdW90YVRpZXIge1xuICAvLyBVc2UgdGhlIGV4cGxpY2l0IHR1cGxlLCBub3QgYHZhbHVlIGluIFFVT1RBX1RJRVJTYDogYGluYCB3YWxrcyB0aGUgcHJvdG90eXBlXG4gIC8vIGNoYWluLCBzbyBpbmhlcml0ZWQgT2JqZWN0IGtleXMgKCd0b1N0cmluZycsICdjb25zdHJ1Y3RvcicsIOKApikgd291bGQgcmV0dXJuXG4gIC8vIHRydWUgYW5kIHRoZW4gYGdldFRpZXJMaW1pdHNgIHdvdWxkIHJlYWQgYC5saW1pdHNgIG9mZiBhIGZ1bmN0aW9uIOKGkiBjcmFzaC5cbiAgLy8gYHRpZXJgIGlzIGF0dGFja2VyLWluZmx1ZW5jZWFibGUgKEpXVCAvIHJlcXVlc3QgYm9keSAvIERFRkFVTFRfUVVPVEFfVElFUiBlbnYpLlxuICByZXR1cm4gKFZBTElEX1RJRVJTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh2YWx1ZSk7XG59XG5cbi8qKiBHZXQgdGhlIGRlZmF1bHQgbGltaXRzIGZvciBhIGdpdmVuIHRpZXIgKGZhbGxzIGJhY2sgdG8gZGV2ZWxvcGVyKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaWVyTGltaXRzKHRpZXI6IHN0cmluZyk6IFF1b3RhVGllckxpbWl0cyB7XG4gIHJldHVybiBpc1ZhbGlkVGllcih0aWVyKSA/IFFVT1RBX1RJRVJTW3RpZXJdLmxpbWl0czogUVVPVEFfVElFUlMuZGV2ZWxvcGVyLmxpbWl0cztcbn1cblxuLyoqXG4gKiBUaGUgcGVyaW9kIChkYXlzKSBldmVyeSB1c2FnZSBjb3VudGVyIHJvbGxzIG92ZXIgb24uIEFsbCBxdW90YXMgYXJlIHBlci1wZXJpb2RcbiAqIEZMT1cgY291bnRlcnMgb24gb25lIHNoYXJlZCBwZXJpb2Q6IHRoZSBxdW90YSBzZXJ2aWNlIHJlc2V0cyBhIGNvdW50ZXIgdGhpc1xuICogbWFueSBkYXlzIGFmdGVyIGl0IGV4cGlyZXMsIGFuZCBwbGF0Zm9ybSBzZWVkcyBhIG5ldyBvcmcncyBjb3VudGVycyB3aXRoIHRoZVxuICogc2FtZSB3aW5kb3cgKGBRVU9UQV9SRVNFVF9EQVlTYCwgZGVmYXVsdCAzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVT1RBX1JFU0VUX0RBWVMgPSBlbnZJbnQoJ1FVT1RBX1JFU0VUX0RBWVMnLCAzLCB7IG1pbjogMSB9KTtcblxuLyoqIFRoZSBuZXh0IHF1b3RhIHJlc2V0OiBsb2NhbCBtaWRuaWdodCBgZGF5c2AgZnJvbSBgbm93YC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0UXVvdGFSZXNldERhdGUoZGF5czogbnVtYmVyID0gUVVPVEFfUkVTRVRfREFZUywgbm93OiBEYXRlID0gbmV3IERhdGUoKSk6IERhdGUge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUobm93KTtcbiAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkYXRlO1xufVxuIl19
|
|
433
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdGllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcXVvdGEtdGllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQXFIMUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQyxXQUFXLEVBQUU7UUFDWCxhQUFhLEVBQUUsRUFBRTtRQUNqQixLQUFLLEVBQUUsQ0FBQztRQUNSLFlBQVksRUFBRSxDQUFDO1FBQ2Ysb0JBQW9CLEVBQUUsQ0FBQztRQUN2QixnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLGFBQWEsRUFBRSxFQUFFO0tBQ2xCO0lBQ0QsVUFBVSxFQUFFLEVBQUU7SUFDZCwwQkFBMEIsRUFBRSxDQUFDO0lBQzdCLGlFQUFpRTtJQUNqRSxnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCLHdDQUF3QztJQUN4QyxRQUFRLEVBQUUsSUFBSTtJQUNkLCtDQUErQztJQUMvQyxPQUFPLEVBQUUsTUFBTTtDQUNQLENBQUM7QUFFWCw4RkFBOEY7QUFDOUYsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFNBQWlCLEVBQUUsVUFBVSxHQUFXLENBQUM7SUFDMUUsTUFBTSxDQUFDLEdBQUcsdUJBQXVCLENBQUM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFD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RTtJQUN4RixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBlbnZCb29sLCBlbnZJbnQsIGVudlN0ciB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1b3RhVHlwZSB9IGZyb20gJy4vY29tbW9uLmpzJztcblxuLyoqIEF2YWlsYWJsZSBxdW90YSB0aWVyIGlkZW50aWZpZXJzLlxuICpcbiAqIGB1bmxpbWl0ZWRgIGlzIGEgc3BlY2lhbCB0aWVyOiBldmVyeSBxdW90YSBpcyBgLTFgICh1bmNhcHBlZCkgYW5kIGl0IGluY2x1ZGVzXG4gKiBldmVyeSBmZWF0dXJlL2FkZC1vbiBidW5kbGUuIEl0IGlzIHRoZSBERUZBVUxUIHdoZW4gYmlsbGluZyBpcyBkaXNhYmxlZCAobm9cbiAqIG1ldGVyaW5nL2VuZm9yY2VtZW50IHN1cmZhY2UgZXhpc3RzLCBzbyBub3RoaW5nIGlzIGNhcHBlZCksIGFuZCBpdCBpcyBORVZFUlxuICogc2hvd24gb3Igc2VsZWN0YWJsZSB3aGVuIGJpbGxpbmcgaXMgZW5hYmxlZCDigJQgc2VlIGBTVEFOREFSRF9USUVSU2AuICovXG5leHBvcnQgdHlwZSBRdW90YVRpZXIgPSAnZGV2ZWxvcGVyJyB8ICdwcm8nIHwgJ3RlYW0nIHwgJ2J1c2luZXNzJyB8ICdlbnRlcnByaXNlJyB8ICd1bmxpbWl0ZWQnO1xuXG4vKiogTGltaXQgdmFsdWVzIGZvciBlYWNoIHF1b3RhIHR5cGUgd2l0aGluIGEgdGllci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFUaWVyTGltaXRzIHtcbiAgcGx1Z2luczogbnVtYmVyO1xuICBwaXBlbGluZXM6IG51bWJlcjtcbiAgYXBpQ2FsbHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIE1ldGVyZWQgQVBJIGNhbGxzIG1hZGUgYnkgT1JHIFNFUlZJQ0UgQUNDT1VOVFMgKGF1dG9tYXRpb24pLCBjb3VudGVkXG4gICAqIGluc3RlYWQgb2YgYGFwaUNhbGxzYCBzbyBwaXBlbGluZXMgY2FuJ3Qgc3RhcnZlIHRoZSBvcmcncyBwZW9wbGUuIFNlZVxuICAgKiB7QGxpbmsgQVVUT01BVElPTl9DQUxMU19TSVpJTkd9IGZvciBob3cgdGhlIGRlZmF1bHRzIGFyZSBkZXJpdmVkLlxuICAgKi9cbiAgYXV0b21hdGlvbkNhbGxzOiBudW1iZXI7XG4gIGFpQ2FsbHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEFnZ3JlZ2F0ZSByZWdpc3RyeSBzdG9yYWdlIGNhcCBpbiBCWVRFUy4gQ291bnRlZCBhY3Jvc3MgZXZlcnkgcmVwb1xuICAgKiB1bmRlciB0aGUgb3JnJ3MgYG9yZy17b3JnSWR9L2AgbmFtZXNwYWNlLiAtMSBtZWFucyB1bmxpbWl0ZWQuXG4gICAqIHB1c2gtZ2F0ZSByZWFkcyB0aGlzOyB0aGUgaW1hZ2UtcmVnaXN0cnkgcmVqZWN0cyB0b2tlbiBpc3N1YW5jZSBmb3JcbiAgICogYHB1c2hgIHNjb3BlIHdoZW4gdGhlIG9yZydzIG1lYXN1cmVkIHVzYWdlIGV4Y2VlZHMgdGhlIGxpbWl0LlxuICAgKi9cbiAgc3RvcmFnZUJ5dGVzOiBudW1iZXI7XG4gIC8qKlxuICAgKiB2Q1BVLU1JTlVURVMgb2YgcGx1Z2luLWJ1aWxkIGNvbXB1dGUgcGVyIE1PTlRIIOKAlCB0aGUgb25lIHF1b3RhIG9uIGEgcGVyaW9kXG4gICAqIG9mIGl0cyBvd24gKGV2ZXJ5IG90aGVyIGZsb3cgcXVvdGEgcm9sbHMgb24gYFFVT1RBX1JFU0VUX0RBWVNgLCAzIGRheXMpLlxuICAgKlxuICAgKiBEZXJpdmVkIGZyb20gdGhlIGBwbHVnaW5zYCBjYXAgcmF0aGVyIHRoYW4gZ3Vlc3NlZDogYHBsdWdpbnMgeCAxMGAgYnVpbGRzIGFcbiAgICogbW9udGgsIGF0IGEgZmxhdCAzMCB3YWxsLW1pbnV0ZXMgYSBidWlsZCBhbmQgMS41IHZDUFUgb2YgYnVpbGRraXRkLCBzb1xuICAgKiBgY3JlZGl0cyA9IGJ1aWxkcyB4IDQ1YC4gVGhlIGZsYXQgcGVyLWJ1aWxkIGZpZ3VyZSBpcyBkZWxpYmVyYXRlIOKAlCBzY2FsaW5nXG4gICAqIEJPVEggdGhlIGJ1aWxkIGNvdW50IGFuZCB0aGUgcGVyLWJ1aWxkIGNvc3QgYnkgdGllciBtYWRlIGNyZWRpdHNcbiAgICogc3VwZXJsaW5lYXIgaW4gdGllciBvbiB0aGUgc3RyZW5ndGggb2YgYW4gdW5tZWFzdXJlZCBjbGFpbSwgYW5kIGl0IG1hZGUgYVxuICAgKiBwYWNrJ3MgY3JlZGl0IGdyYW50IHRpZXItZGVwZW5kZW50LCB3aGljaCB0aGUgY2F0YWxvZ3VlJ3MgZ3JhbnQgc2hhcGUgY2Fubm90XG4gICAqIGV4cHJlc3MuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGZpcnN0IGRpbWVuc2lvbiB3aXRoIGdlbnVpbmUgcGVyLXVuaXQgbWFyZ2luYWwgY29zdDogZXZlcnkgb3RoZXJcbiAgICogcXVvdGEgaXMgYSByYXRlIGxpbWl0IHByb3RlY3Rpbmcgc2hhcmVkIGluZnJhc3RydWN0dXJlLCB0aGlzIG9uZSBpcyBjb21wdXRlXG4gICAqIHRoZSBwbGF0Zm9ybSBwYXlzIGZvci4gU2VlIGBkb2NzL3BsYW5zL2NwdS1jcmVkaXRzLm1kYC5cbiAgICovXG4gIGNwdUNyZWRpdHM6IG51bWJlcjtcbiAgLyoqIENvdW50LXF1b3RhcyBvbiB0aGUgdXNlci1lZGl0YWJsZSBmZWF0dXJlIHRhYmxlcyBhZGRlZCB0byBjbG9zZSBwZXItb3JnXG4gICAqICBEb1MgdmlhIHNwYW0uIC0xIG1lYW5zIHVubGltaXRlZC4gKi9cbiAgZGFzaGJvYXJkczogbnVtYmVyO1xuICBhbGVydFJ1bGVzOiBudW1iZXI7XG4gIGFsZXJ0RGVzdGluYXRpb25zOiBudW1iZXI7XG4gIGlkcENvbmZpZ3M6IG51bWJlcjtcbiAgLyoqXG4gICAqIEFjdGl2ZSwgbm9uLXN1c3BlbmRlZCBwbHVnaW4tZWNvc3lzdGVtIGxpc3RpbmdzIHRoZSBvcmcgcHVibGlzaGVzXG4gICAqIChkb2NzL3BsdWdpbi1pbnN0YWxsaW5nLm1kKS4gQSBDT1VOVCBxdW90YSDigJQgaW5zdGFsbHMgbmV2ZXJcbiAgICogY291bnQuIC0xID0gdW5saW1pdGVkLiBFeHRlbmRhYmxlIHZpYSB0aGUgYGxpc3RpbmdfcGFja2AgYWRkLW9uIGJ1bmRsZS5cbiAgICovXG4gIGxpc3RpbmdzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXggb3JnIG1lbWJlcnMgKGFjdGl2ZSB1c2VycyAvIHNlYXRzKS4gLTEgPSB1bmxpbWl0ZWQuIFRoaXMgaXMgdGhlIFwiVGVhbVwiXG4gICAqIHRpZXIgZGlmZmVyZW50aWF0b3Ig4oCUIGVuZm9yY2VkIGF0IG1lbWJlci1pbnZpdGUgdGltZSAoYW4gaW52aXRlIGlzIGJsb2NrZWRcbiAgICogd2hlbiBhY3RpdmUgbWVtYmVycyArIHBlbmRpbmcgaW52aXRlcyB3b3VsZCBleGNlZWQgdGhpcykuXG4gICAqL1xuICBzZWF0czogbnVtYmVyO1xuICAvKipcbiAgICogTWF4IGRlc2lnbmF0ZWQgU1VQUE9SVCBDT05UQUNUUyDigJQgdGhlIG1lbWJlcnMgYXV0aG9yaXNlZCB0byBvcGVuIHN1cHBvcnRcbiAgICogY2FzZXMuIC0xID0gdW5saW1pdGVkLiBCYXNlIGlzICoqMCBvbiBldmVyeSB0aWVyKio6IHN1cHBvcnQgaXMgYW4gYWRkLW9uIGF0XG4gICAqIGV2ZXJ5IHRpZXIgYW5kIGluY2x1ZGVkIGluIG5vbmUsIHNvIGFuIG9yZyB3aXRoIG5vIHN1cHBvcnQgYnVuZGxlIGhhcyBub1xuICAgKiBjb250YWN0cyBhbmQgY2Fubm90IG9wZW4gYSBjYXNlLiBUaGF0IG1ha2VzIHRoZSBzdXBwb3J0IHBheXdhbGwgYSBxdW90YVxuICAgKiBjaGVjayByYXRoZXIgdGhhbiBhIGZlYXR1cmUgZmxhZy5cbiAgICpcbiAgICogTGlrZSBgc2VhdHNgIHRoaXMgaXMgYSB0aWVyIExJTUlULCBub3QgYSB0cmFja2VkIGNvdW50ZXIg4oCUIGVuZm9yY2VkIGxpdmUgYXRcbiAgICogZGVzaWduYXRpb24gdGltZSBhZ2FpbnN0IGN1cnJlbnQgZGVzaWduYXRpb25zIGFjcm9zcyB0aGUgb3JnIHN1YnRyZWUuXG4gICAqIEV4dGVuZGVkIHBlciB1bml0IGJ5IHRoZSBgc3VwcG9ydF9zdGFuZGFyZGAgLyBgc3VwcG9ydF9wcmlvcml0eWAgQkFTRUxJTkVcbiAgICogYnVuZGxlcywgd2hpY2ggYXJlIHByaWNlZCBwZXIgY29udGFjdC5cbiAgICovXG4gIHN1cHBvcnRDb250YWN0czogbnVtYmVyO1xuICAvKipcbiAgICogSG93IG1hbnkgb2YgdGhvc2UgY29udGFjdHMgbWF5IGJlIFVQR1JBREVEIHRvIHByZW1pdW0gKDI0w5c3LCA4LWhvdXJcbiAgICogcmVzcG9uc2UsIGFuZCB0aGUgb25seSBvbmVzIHdobyBtYXkgZGVjbGFyZSBgdXJnZW50YCkuXG4gICAqXG4gICAqIEEgc2Vjb25kIGRpbWVuc2lvbiByYXRoZXIgdGhhbiBhIHRoaXJkIGJhc2VsaW5lIGxldmVsLCBiZWNhdXNlIHByZW1pdW0gaXMgYW5cbiAgICogVVBHUkFERSBhbmQgbm90IGFuIGFsdGVybmF0aXZlLiBUaGUgc2hhcGUgaXQgZW5jb2RlczogYW4gb3JnIGJ1eXMgTiBiYXNlbGluZVxuICAgKiBjb250YWN0cyBhbmQgdXBncmFkZXMgTSBvZiB0aGVtLCBNIOKJpCBOLiBUaGF0IGlzIHdoYXQgbGV0cyBhIDEwMC1zZWF0XG4gICAqIGN1c3RvbWVyIGdpdmUgYnVzaW5lc3MtaG91cnMgc3VwcG9ydCB0byBpdHMgdGhyZWUgbmFtZWQgY29udGFjdHMgYW5kIDI0w5c3XG4gICAqIHRvIHRoZSBvbmUgd2hvIGNhcnJpZXMgdGhlIHBhZ2VyIOKAlCB0aGUgY2FzZSB0aGUgbXV0dWFsbHktZXhjbHVzaXZlIGxhZGRlclxuICAgKiBjb3VsZCBub3QgZXhwcmVzcyBhdCBhbGwsIHdoZXJlIGJ1eWluZyBcIjk5IHN0YW5kYXJkICsgMSBwcmVtaXVtXCIgY2hhcmdlZCBmb3JcbiAgICogMTAwIHVuaXRzIGFuZCBncmFudGVkIG9uZSBjb250YWN0LlxuICAgKlxuICAgKiBBRERJVElWRSwgZGVsaWJlcmF0ZWx5LiBBIHByZW1pdW0gY29udGFjdCBjb3N0cyB0aGUgYmFzZWxpbmUgdW5pdCBQTFVTIHRoZVxuICAgKiB1cGdyYWRlICgkMTkuOTkgKyAkOTkuOTkpLCBiZWNhdXNlIGl0IGlzIHNlcnZlZCBkdXJpbmcgYnVzaW5lc3MgaG91cnNcbiAgICogdGhyb3VnaCB0aGUgYmFzZWxpbmUgYW5kIG92ZXJuaWdodCB0aHJvdWdoIHRoZSB1cGdyYWRlOyBwcmljaW5nIHRoZSB1cGdyYWRlXG4gICAqIGFzIGEgZGVsdGEgd291bGQgcHJldGVuZCB0aGUgYmFzZWxpbmUgd2VyZSBmcmVlLiBCYXNlIDAgb24gZXZlcnkgdGllciwgbGlrZVxuICAgKiBgc3VwcG9ydENvbnRhY3RzYCwgc28gdGhlIHBheXdhbGwgc3RheXMgYSBxdW90YSBjaGVjay5cbiAgICovXG4gIHN1cHBvcnRQcmVtaXVtQ29udGFjdHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFJlcG9ydGluZyByZXRlbnRpb24gaW4gREFZUyDigJQgTk9UIGEgZmxvdyBxdW90YSAobmV2ZXIgZGVjcmVtZW50ZWQsIGFic2VudFxuICAgKiBmcm9tIGBWQUxJRF9RVU9UQV9UWVBFU2ApOiB0aGVzZSByaWRlIHRoZSB0aWVyLWJhc2VsaW5lICsgYnVuZGxlLWdyYW50IG1hdGhcbiAgICogcHVyZWx5IGFzIGFuIGVudGl0bGVtZW50IHRoZSBiaWxsaW5nIHNlcnZpY2Ugc3luY3MgdG8gcmVwb3J0aW5nJ3NcbiAgICogYGRvcmFfc2V0dGluZ3NgLiAtMSA9IHVubGltaXRlZCAodGhlIHN3ZWVwIHNraXBzIHRoZSBvcmcgZW50aXJlbHkpLlxuICAgKiAgIGBldmVudFJldGVudGlvbkRheXNgIOKAlCBub24tZGVwbG95IGBwaXBlbGluZV9ldmVudHNgIChTVEFHRS9BQ1RJT04vYnVpbGQpLlxuICAgKiAgIGBkb3JhUmV0ZW50aW9uRGF5c2AgIOKAlCBkZXBsb3kgZXZlbnRzICsgYGRlcGxveW1lbnRfb3V0Y29tZXNgICsgYGluY2lkZW50c2AsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHBlci1vcmcgcmVwb3J0LXF1ZXJ5IHdpbmRvdyBmb3IgRE9SQSByb3V0ZXMuXG4gICAqIEV4dGVuZGFibGUgdmlhIHRoZSBgcmV0ZW50aW9uX3BhY2tgIC8gYGRvcmFfaGlzdG9yeV9wYWNrYCBhZGQtb24gYnVuZGxlcy5cbiAgICovXG4gIGV2ZW50UmV0ZW50aW9uRGF5czogbnVtYmVyO1xuICBkb3JhUmV0ZW50aW9uRGF5czogbnVtYmVyO1xufVxuXG4vKiogRnVsbCBwcmVzZXQgZm9yIGEgc2luZ2xlIHRpZXIgKGxhYmVsICsgbGltaXRzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFUaWVyUHJlc2V0IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGltaXRzOiBRdW90YVRpZXJMaW1pdHM7XG59XG5cbi8qKlxuICogUHJlc2V0IGxpbWl0cyBmb3IgZWFjaCB0aWVyLiAtMSBtZWFucyB1bmxpbWl0ZWQuXG4gKlxuICogQUkgY2FsbHMgYXJlIHNpemVkIG11Y2ggc21hbGxlciB0aGFuIGBhcGlDYWxsc2AgYmVjYXVzZSBlYWNoIGNhbGwgaGFzXG4gKiBleHRlcm5hbCBwcm92aWRlciBjb3N0ICh+JDAuMDEkMC4xMC9jYWxsKS4gRGV2ZWxvcGVyIHRpZXIgYWxsb3dzIGxpZ2h0XG4gKiBleHBsb3JhdGlvbiAoNTAvcGVyaW9kKTsgUHJvIGxpZnRzIHRvIDIsNTAwOyBFbnRlcnByaXNlIGlzIGNhcHBlZCBoaWdoXG4gKiAoMjUsMDAwKSDigJQgZmFpci11c2UsIG5vdCBsaXRlcmFsbHkgdW5saW1pdGVkLlxuICpcbiAqIGBzdG9yYWdlQnl0ZXNgIGlzIHRoZSBhZ2dyZWdhdGUgcmVnaXN0cnkgY2FwIHBlciBvcmcuIFNpemVkXG4gKiBhcm91bmQgcGx1Z2luLWltYWdlIHJlYWxpdGllczogYSB0eXBpY2FsIHBsdWdpbiBpbWFnZSBpcyAyMDA1MDAgTUI7XG4gKiBEZXZlbG9wZXIncyAyIEdCIGhvbGRzIH40IHZlcnNpb25zIMOXIH41MDAgTUIsIFBybydzIDI1IEdCIGNvdmVycyBhXG4gKiBtYXR1cmUgY2F0YWxvZy4gT3BlcmF0b3JzIGNhbiBvdmVycmlkZSBwZXItb3JnIHZpYSB0aGUgcXVvdGEgQ1JVRCBBUEkuXG4gKi9cbmNvbnN0IEdCID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vKipcbiAqIEhvdyB0aGUgYGF1dG9tYXRpb25DYWxsc2AgZGVmYXVsdHMgYXJlIHNpemVkIOKAlCB3cml0dGVuIGRvd24gc28gdGhlIG5leHRcbiAqIHBlcnNvbiB0byB0b3VjaCB0aGVtIGFyZ3VlcyB3aXRoIHRoZSBhcml0aG1ldGljLCBub3Qgd2l0aCB0aGUgbnVtYmVycy5cbiAqXG4gKiBFdmVyeSBjYWxsIGFuIG9yZydzIGF1dG9tYXRpb24ga2V5cyBtYWtlIGluIG9uZSBwaXBlbGluZSBSVU4sIGl0ZW1pemVkICh0aGVcbiAqIGVhcmxpZXIgc2l6aW5nIGNvdW50ZWQgb25seSB0aGUgcGx1Z2luIGxvb2t1cHMgYW5kIGhhbmQtd2F2ZWQgdGhlIHJlc3QgYXNcbiAqIFwiw5cyXCIpOlxuICpcbiAqICAgcGx1Z2luIGxvb2t1cHMgICAgICAgICAgICAxMiAgIG9uZSBwZXIgcGx1Z2luIHN0ZXAgKHNlbGYtbXV0YXRpbmcgcGlwZWxpbmUpXG4gKiAgIHN5bnRoICAgICAgICAgICAgICAgICAgICAgIDEgICB0aGUgc3ludGggc3RlcCBmZXRjaGluZyB0aGUgcGlwZWxpbmUgY29uZmlnXG4gKiAgIHJ1bnRpbWUgY2hlY2sgICAgICAgICAgICAgIDEgICB0aGUgcHJlLWRlcGxveSBydW50aW1lLWNoZWNrIGNhbGxcbiAqICAgc2VjdXJpdHktcmVwb3J0IHVwbG9hZCAgICAgMSAgIHRoZSBzY2FuIHN0ZXAgcG9zdGluZyBpdHMgcmVwb3J0XG4gKiAgIHJlZ2lzdHJ5IHJlZ2lzdGVyICAgICAgICAgIDEgICBwaXBlbGluZS1yZWdpc3RlciBzdGFtcGluZyB0aGUgZGVwbG95ZWQgdmVyc2lvblxuICogICByZXBvcnRpbmcgaW5nZXN0IGJhdGNoZXMgIDEyICAgdGhlIGV2ZW50IGZvcndhcmRlciBwb3N0cyB+b25lIGJhdGNoIHBlciBhY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4ICAgY2FsbHMgcGVyIHJ1blxuICpcbiAqIFBlciBkZWZhdWx0IHBlcmlvZCAoYFFVT1RBX1JFU0VUX0RBWVNgLCAzIGRheXMpIG9uZSBhY3RpdmUgcGlwZWxpbmUgcnVubmluZ1xuICogaG91cmx5IG1ha2VzIDI4IMOXIDI0IMOXIDMgPSAyLDAxNiBjYWxscy4gQW4gb3JnIGtlZXBzIGZhciBtb3JlIHBpcGVsaW5lcyBhbGl2ZVxuICogdGhhbiBpdCBDUkVBVEVTIGluIGEgcGVyaW9kIChgcGlwZWxpbmVzYCBpcyBhIGNyZWF0aW9uIHJhdGUpLCBzbyBhY3RpdmVcbiAqIHBpcGVsaW5lcyBhcmUgdGFrZW4gYXMgNMOXIHRoZSB0aWVyJ3MgYHBpcGVsaW5lc2AuIE9uIHRvcCBzaXRzIGEgcGVyLU9SR1xuICogY29uc3RhbnQgdGhhdCBkb2VzIG5vdCBzY2FsZSB3aXRoIHBpcGVsaW5lczogdGhlIGluZ2VzdC1oZWFsdGggaGVhcnRiZWF0XG4gKiAo4omkIDEvbWludXRlIOKGkiAxLDQ0MC9kYXkg4oaSIDQsMzIwL3BlcmlvZCkuIFRoZSBzdW0gZ2V0cyAyNSUgaGVhZHJvb20gKHJldHJpZXMsXG4gKiByZWdpc3RyeSBwdXNoZXMsIGFkLWhvYyBDSSBzY3JpcHRzIG9uIGtleXMpIGFuZCByb3VuZHMgVVAgdG8gdGhlIG5leHQgMTAsMDAwOlxuICpcbiAqICAgZGV2ZWxvcGVyICAgMsOXNMOXMjAxNiArIDQzMjAgPSAgMjAsNDQ4IMOXIDEuMjUgPSAgMjUsNTYwIOKGkiAgMzAsMDAwXG4gKiAgIHBybyAgICAgICAgIDXDlzTDlzIwMTYgKyA0MzIwID0gIDQ0LDY0MCDDlyAxLjI1ID0gIDU1LDgwMCDihpIgIDYwLDAwMFxuICogICB0ZWFtICAgICAgIDEww5c0w5cyMDE2ICsgNDMyMCA9ICA4NCw5NjAgw5cgMS4yNSA9IDEwNiwyMDAg4oaSIDExMCwwMDBcbiAqICAgYnVzaW5lc3MgICAyMMOXNMOXMjAxNiArIDQzMjAgPSAxNjUsNjAwIMOXIDEuMjUgPSAyMDcsMDAwIOKGkiAyMTAsMDAwXG4gKiAgIGVudGVycHJpc2UgMzDDlzTDlzIwMTYgKyA0MzIwID0gMjQ2LDI0MCDDlyAxLjI1ID0gMzA3LDgwMCDihpIgMzEwLDAwMFxuICpcbiAqIHtAbGluayBhdXRvbWF0aW9uQ2FsbHNGb3J9IGNvbXB1dGVzIGV4YWN0bHkgdGhpcywgYW5kIHRoZSB0aWVyIHRlc3RzIGhvbGQgdGhlXG4gKiB0YWJsZSB0byBpdC4gT3ZlciB0aGUgY2FwIHRoZSA0MjkgaXMgU09GVCBmb3IgYSBiYW5kICh7QGxpbmsgcXVvdGFHcmFjZVBjdH0pOlxuICogYSBzZWxmLW11dGF0aW5nIHBpcGVsaW5lIHRoYXQgaGFyZC1zdG9wcGVkIGF0IDEwMCUgc3RheWVkIHN0b3BwZWQgdW50aWwgdGhlXG4gKiBwZXJpb2QgcmVzZXQsIHVwIHRvIDMgZGF5cy4gVGhlIGxpbWl0cyBhcmUgUEVSIFBFUklPRDogYW4gb3BlcmF0b3Igd2hvXG4gKiBsZW5ndGhlbnMgYFFVT1RBX1JFU0VUX0RBWVNgIHNob3VsZCBzY2FsZSBgUVVPVEFfVElFUl88VElFUj5fQVVUT01BVElPTl9DQUxMU2BcbiAqIGJ5IHRoZSBzYW1lIGZhY3Rvci5cbiAqL1xuZXhwb3J0IGNvbnN0IEFVVE9NQVRJT05fQ0FMTFNfU0laSU5HID0ge1xuICBjYWxsc1BlclJ1bjoge1xuICAgIHBsdWdpbkxvb2t1cHM6IDEyLFxuICAgIHN5bnRoOiAxLFxuICAgIHJ1bnRpbWVDaGVjazogMSxcbiAgICBzZWN1cml0eVJlcG9ydFVwbG9hZDogMSxcbiAgICByZWdpc3RyeVJlZ2lzdGVyOiAxLFxuICAgIGluZ2VzdEJhdGNoZXM6IDEyLFxuICB9LFxuICBydW5zUGVyRGF5OiAyNCxcbiAgYWN0aXZlUGlwZWxpbmVzUGVyQ3JlYXRpb246IDQsXG4gIC8qKiBJbmdlc3QtaGVhbHRoIGhlYXJ0YmVhdHMgcGVyIG9yZyBwZXIgZGF5ICjiiaQgb25lIGEgbWludXRlKS4gKi9cbiAgaGVhcnRiZWF0c1BlckRheTogMTQ0MCxcbiAgLyoqIE11bHRpcGxpZXIgb24gdGhlIGl0ZW1pemVkIHRvdGFsLiAqL1xuICBoZWFkcm9vbTogMS4yNSxcbiAgLyoqIERlZmF1bHRzIHJvdW5kIFVQIHRvIGEgbXVsdGlwbGUgb2YgdGhpcy4gKi9cbiAgcm91bmRUbzogMTBfMDAwLFxufSBhcyBjb25zdDtcblxuLyoqIFRoZSB7QGxpbmsgQVVUT01BVElPTl9DQUxMU19TSVpJTkd9IGZvcm11bGEgZm9yIGEgdGllciBjcmVhdGluZyBgcGlwZWxpbmVzYCBwZXIgcGVyaW9kLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1dG9tYXRpb25DYWxsc0ZvcihwaXBlbGluZXM6IG51bWJlciwgcGVyaW9kRGF5czogbnVtYmVyID0gMyk6IG51bWJlciB7XG4gIGNvbnN0IHMgPSBBVVRPTUFUSU9OX0NBTExTX1NJWklORztcbiAgY29uc3QgcGVyUnVuID0gT2JqZWN0LnZhbHVlcyhzLmNhbGxzUGVyUnVuKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgY29uc3QgcGVyUGlwZWxpbmUgPSBwZXJSdW4gKiBzLnJ1bnNQZXJEYXkgKiBwZXJpb2REYXlzO1xuICBjb25zdCB0b3RhbCA9IChwaXBlbGluZXMgKiBzLmFjdGl2ZVBpcGVsaW5lc1BlckNyZWF0aW9uICogcGVyUGlwZWxpbmUgKyBzLmhlYXJ0YmVhdHNQZXJEYXkgKiBwZXJpb2REYXlzKSAqIHMuaGVhZHJvb207XG4gIHJldHVybiBNYXRoLmNlaWwodG90YWwgLyBzLnJvdW5kVG8pICogcy5yb3VuZFRvO1xufVxuXG4vKipcbiAqIFRoZSBTT0ZUIGJhbmQgYWJvdmUgYSBxdW90YSdzIGNhcCwgcGVyIHR5cGUsIGluIHBlcmNlbnQgb2YgdGhlIGxpbWl0LiBBIHR5cGVcbiAqIGFic2VudCBmcm9tIHRoaXMgbWFwIGhhcyBOTyBiYW5kIGFuZCBzdG9wcyBoYXJkIGF0IDEwMCUuXG4gKlxuICogQXQgMTAwJSB0aGUgYWNjb3VudCBnZXRzIHRoZSBcInJlYWNoZWRcIiBub3RpY2UgYW5kIGtlZXBzIHJ1bm5pbmc7IHRoZSByZWZ1c2FsXG4gKiBzdGFydHMgb25seSBwYXN0IGBsaW1pdCDDlyAoMTAwICsgcGN0KSAvIDEwMGAuIFJlYWRzIHN0aWxsIFJFUE9SVCB0aGUgbm9taW5hbFxuICogbGltaXQsIHNvIHVzYWdlIHNob3dzIGFib3ZlIDEwMCUgd2hpbGUgaW5zaWRlIHRoZSBiYW5kLlxuICpcbiAqIFR3byB0eXBlcyBxdWFsaWZ5LCBmb3IgdGhlIHNhbWUgcmVhc29uIHN0YXRlZCB0d28gd2F5cyDigJQgYSBoYXJkIHN0b3AgZXhhY3RseVxuICogYXQgMTAwJSBpcyB3b3JzZSB0aGFuIGEgc2hvcnQgb3ZlcnJ1biB3aGVuIHRoZSBjYWxsZXIgY2Fubm90IHNpbXBseSB3YWl0OlxuICpcbiAqIC0gYGF1dG9tYXRpb25DYWxsc2AgKGBRVU9UQV9BVVRPTUFUSU9OX0dSQUNFX1BDVGApOiB0aGUgY2FsbGVyIGlzIGEgcGlwZWxpbmVcbiAqICAgbWlkLWRlcGxveSwgbm90IGEgcGVyc29uLCBhbmQgdGhlIGNvdW50ZXIgd291bGQgc3RheSBmdWxsIGZvciB0aGUgcmVzdCBvZlxuICogICB0aGUgcGVyaW9kLlxuICogLSBgc3RvcmFnZUJ5dGVzYCAoYFFVT1RBX1NUT1JBR0VfR1JBQ0VfUENUYCk6IHN0b3JhZ2UgaXMgYSBTVE9DSyDigJQgaXQgZG9lc1xuICogICBub3QgcmVzZXQsIHNvIHdpdGhvdXQgYSBiYW5kIGEgZG93bmdyYWRlIG9yIGEgY2FuY2VsbGVkIHBhY2sgZmxpcHMgYW5cbiAqICAgYWNjb3VudCBmcm9tIHdvcmtpbmcgdG8gcmVmdXNlZCB3aXRoIG5vIGJ1ZmZlciBhdCBhbGwsIGFuZCB0aGUgcmVtZWR5XG4gKiAgIChwcnVuZSwgb3IgYnV5IGNhcGFjaXR5KSB0YWtlcyB0aW1lIHRoZSBiYW5kIGlzIHRoZXJlIHRvIHByb3ZpZGUuIE5vdGUgdGhlXG4gKiAgIGJhbmQgb24gYSBzdG9jayBpcyBhIE9ORS1USU1FIGJ1ZmZlciByYXRoZXIgdGhhbiBhIHBlci1wZXJpb2Qgb25lOyB0aGF0IGlzXG4gKiAgIGl0cyBwdXJwb3NlIGhlcmUsIG5vdCBhIGxpbWl0YXRpb24gb2YgaXQuXG4gKlxuICogRXZlcnkgb3RoZXIgdHlwZSBzdGF5cyBoYXJkLiBUaGlzIHdhcyBhIGhhcmRjb2RlZCBgcXVvdGFUeXBlICE9PVxuICogJ2F1dG9tYXRpb25DYWxscydgIGNvbXBhcmlzb24sIHdoaWNoIGlzIHdoeSBzdG9yYWdlIGhhZCBub3RoaW5nOiB0aGVcbiAqIG1lY2hhbmlzbSBleGlzdGVkIGFuZCBvbmx5IHRoZSBwcmVkaWNhdGUgZXhjbHVkZWQgaXQuXG4gKi9cbmNvbnN0IFFVT1RBX0dSQUNFX1BDVDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4gPSB7XG4gIGF1dG9tYXRpb25DYWxsczogZW52SW50KCdRVU9UQV9BVVRPTUFUSU9OX0dSQUNFX1BDVCcsIDEwLCB7IG1pbjogMCwgbWF4OiAxMDAgfSksXG4gIHN0b3JhZ2VCeXRlczogZW52SW50KCdRVU9UQV9TVE9SQUdFX0dSQUNFX1BDVCcsIDEwLCB7IG1pbjogMCwgbWF4OiAxMDAgfSksXG59O1xuXG4vKiogVGhlIHNvZnQgYmFuZCBmb3IgYHF1b3RhVHlwZWAgaW4gcGVyY2VudCwgb3IgMCBmb3IgYSB0eXBlIHRoYXQgc3RvcHMgaGFyZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdW90YUdyYWNlUGN0KHF1b3RhVHlwZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIFFVT1RBX0dSQUNFX1BDVFtxdW90YVR5cGVdID8/IDA7XG59XG5cbi8qKlxuICogVGhlIGxpbWl0IGVuZm9yY2VtZW50IGFjdHVhbGx5IGJpbmRzIG9uIGZvciBgcXVvdGFUeXBlYDogdGhlIG5vbWluYWwgbGltaXQsXG4gKiBwbHVzIHRoZSB0eXBlJ3Mge0BsaW5rIHF1b3RhR3JhY2VQY3R9IGJhbmQgd2hlcmUgaXQgaGFzIG9uZS4gVW5saW1pdGVkICgtMSlcbiAqIGFuZCB6ZXJvIChcIm5vbmVcIikgbGltaXRzIGFyZSByZXR1cm5lZCB1bmNoYW5nZWQg4oCUIGEgMCBjYXAgaXMgYSBkZWxpYmVyYXRlXG4gKiByZWZ1c2FsLCBub3QgYSBidWRnZXQgdG8gb3ZlcnJ1bi5cbiAqXG4gKiB7QGxpbmsgUVVPVEFfR1JBQ0VfUENUfSBkZWNpZGVzIFdIRVRIRVIgYSB0eXBlIGhhcyBhIGJhbmQ7IGBncmFjZVBjdGAgb25seVxuICogc2l6ZXMgaXQuIFNvIGFuIGV4cGxpY2l0IHBlcmNlbnRhZ2UgcGFzc2VkIGZvciBhbiB1bmJhbmRlZCB0eXBlIHN0aWxsIHlpZWxkc1xuICogdGhlIG5vbWluYWwgbGltaXQsIHJhdGhlciB0aGFuIHF1aWV0bHkgZ3JhbnRpbmcgYSBiYW5kIHRoZSB0eXBlIGlzIG5vdCBtZWFudFxuICogdG8gaGF2ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VkUXVvdGFMaW1pdChxdW90YVR5cGU6IHN0cmluZywgbGltaXQ6IG51bWJlciwgZ3JhY2VQY3Q6IG51bWJlciA9IHF1b3RhR3JhY2VQY3QocXVvdGFUeXBlKSk6IG51bWJlciB7XG4gIGlmIChsaW1pdCA8PSAwIHx8IGdyYWNlUGN0IDw9IDAgfHwgcXVvdGFHcmFjZVBjdChxdW90YVR5cGUpIDw9IDApIHJldHVybiBsaW1pdDtcbiAgcmV0dXJuIE1hdGguZmxvb3IoKGxpbWl0ICogKDEwMCArIGdyYWNlUGN0KSkgLyAxMDApO1xufVxuXG4vKipcbiAqIENvZGUtZGVmYXVsdCBsaW1pdHMgcGVyIHRpZXIg4oCUIHRoZSBmYWxsYmFjayB3aGVuIG5vIGVudiBvdmVycmlkZSBpcyBzZXQuXG4gKiAtMSBtZWFucyB1bmxpbWl0ZWQuIChDb3VudHMgc2l6ZWQgdG8gXCJjb21mb3J0YWJseSBlbm91Z2ggZm9yIG9uZSB0ZWFtLCBub3RcbiAqIHNjcmlwdCBzcGFtXCI6IDIwIGRhc2hib2FyZHMsIDUwIGFsZXJ0IHJ1bGVzLCAxMCBkZXN0aW5hdGlvbnMsIDEgSWRQIGNvbmZpZ1xuICogZm9yIERldmVsb3Blcjsgc2NhbGVkIHVwIGZvciBQcm87IC0xICh1bmNhcHBlZCkgZm9yIHRoZSBjaGVhcCBjb3VudC1xdW90YXNcbiAqIG9uIFRlYW0vRW50ZXJwcmlzZSB3aGlsZSBjb3N0LWRyaXZpbmcgcXVvdGFzIOKAlCBpbmNsLiBhcGlDYWxscyDigJQgc3RheSBmaW5pdGUuKVxuICovXG5jb25zdCBERUZBVUxUX1RJRVJfTElNSVRTOiBSZWNvcmQ8UXVvdGFUaWVyLCBRdW90YVRpZXJMaW1pdHM+ID0ge1xuICAvLyBGcmVlIHRpZXI6IHNpbmdsZSBzZWF0LCAyIHBpcGVsaW5lcywgYXBpQ2FsbHMgQ0FQUEVEICh3YXMgdW5saW1pdGVkIOKAlCBhXG4gIC8vIERvUy9hYnVzZSBob2xlIG9uIGEgc2hhcmVkIHJlc291cmNlKTsgYWlDYWxscyBzbWFsbCAoZWFjaCBoYXMgfiQwLjAxLTAuMTBcbiAgLy8gZXh0ZXJuYWwgY29zdCkuIExlYW4gYmFzZSDigJQgZ3Jvd3RoIGhhcHBlbnMgYnkgdXBncmFkaW5nLCBub3Qgc3RhY2tpbmcgaGVyZS5cbiAgZGV2ZWxvcGVyOiB7XG4gICAgcGx1Z2luczogMTAsXG4gICAgcGlwZWxpbmVzOiAyLFxuICAgIGFwaUNhbGxzOiAyNV8wMDAsXG4gICAgYXV0b21hdGlvbkNhbGxzOiAzMF8wMDAsXG4gICAgYWlDYWxsczogMjAsXG4gICAgY3B1Q3JlZGl0czogNF81MDAsXG4gICAgc3RvcmFnZUJ5dGVzOiAyICogR0IsXG4gICAgZGFzaGJvYXJkczogMjAsXG4gICAgYWxlcnRSdWxlczogNTAsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IDEwLFxuICAgIGlkcENvbmZpZ3M6IDEsXG4gICAgbGlzdGluZ3M6IDMsXG4gICAgc2VhdHM6IDEsXG4gICAgc3VwcG9ydENvbnRhY3RzOiAwLFxuICAgIHN1cHBvcnRQcmVtaXVtQ29udGFjdHM6IDAsXG4gICAgZXZlbnRSZXRlbnRpb25EYXlzOiAzMCxcbiAgICBkb3JhUmV0ZW50aW9uRGF5czogMTgwLFxuICB9LFxuICAvLyBQcm8gPSBpbmRpdmlkdWFsIHBvd2VyIHVzZXIsIHNpbmdsZSBzZWF0LCBpbmRpdmlkdWFsIHByaWNpbmcuIEEgMm5kIHNlYXQgKG9yXG4gIC8vIHRlYW0gY29sbGFib3JhdGlvbikgcmVxdWlyZXMgdGhlIFRlYW0gdGllciDigJQgdGhlIGBzZWF0YCBhZGQtb24gaXMgVGVhbSsgb25seSxcbiAgLy8ga2VlcGluZyBUZWFtIHRoZSBjb2xsYWJvcmF0aW9uIHRpZXIuIFBybydzIHZhbHVlIG92ZXIgRGV2ZWxvcGVyIGlzIGl0cyByaWNoZXJcbiAgLy8gY2FsbC9zdG9yYWdlL3BsdWdpbiBjZWlsaW5ncyArIGZlYXR1cmUgYWRkLW9ucyAoU1NPL2F1ZGl0L0RPUkEpLCBub3Qgc2VhdHMuXG4gIHBybzoge1xuICAgIHBsdWdpbnM6IDI1LFxuICAgIHBpcGVsaW5lczogNSxcbiAgICBhcGlDYWxsczogMTAwXzAwMCxcbiAgICBhdXRvbWF0aW9uQ2FsbHM6IDYwXzAwMCxcbiAgICBhaUNhbGxzOiAyMDAsXG4gICAgY3B1Q3JlZGl0czogMTFfMjUwLFxuICAgIHN0b3JhZ2VCeXRlczogMjUgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAyMDAsXG4gICAgYWxlcnRSdWxlczogNTAwLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiA1MCxcbiAgICBpZHBDb25maWdzOiA1LFxuICAgIGxpc3RpbmdzOiAxMCxcbiAgICBzZWF0czogMSxcbiAgICBzdXBwb3J0Q29udGFjdHM6IDAsXG4gICAgc3VwcG9ydFByZW1pdW1Db250YWN0czogMCxcbiAgICBldmVudFJldGVudGlvbkRheXM6IDMwLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiAxODAsXG4gIH0sXG4gIC8vIFRlYW0gPSBjb2xsYWJvcmF0aW9uIHRpZXI7IHRoZSBzZWF0IGxpbWl0ICgzKSBpcyB0aGUgcmVhbCBkaWZmZXJlbnRpYXRvciBvdmVyXG4gIC8vIFBybyAoc2luZ2xlLXNlYXQpIOKAlCBpdCdzIHRoZSBtdWx0aS1zZWF0IGNvbGxhYm9yYXRpb24gZmxvb3IuIExlYW4gYmFzZSAoJDc5KTpcbiAgLy8gZ3Jvd3RoIHJpZGVzIHRoZSBzZWF0L3BpcGVsaW5lL2V0YyBhZGQtb25zIChsYW5kLWFuZC1leHBhbmQpLiBMaW1pdHMgc2l0XG4gIC8vIGJldHdlZW4gUHJvIGFuZCBFbnRlcnByaXNlLlxuICB0ZWFtOiB7XG4gICAgcGx1Z2luczogNTAsXG4gICAgcGlwZWxpbmVzOiAxMCxcbiAgICBhcGlDYWxsczogMzAwXzAwMCxcbiAgICBhdXRvbWF0aW9uQ2FsbHM6IDExMF8wMDAsXG4gICAgYWlDYWxsczogNjAwLFxuICAgIGNwdUNyZWRpdHM6IDIyXzUwMCxcbiAgICBzdG9yYWdlQnl0ZXM6IDYwICogR0IsXG4gICAgZGFzaGJvYXJkczogLTEsXG4gICAgYWxlcnRSdWxlczogLTEsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IC0xLFxuICAgIGlkcENvbmZpZ3M6IDUsXG4gICAgbGlzdGluZ3M6IDI1LFxuICAgIHNlYXRzOiAzLFxuICAgIHN1cHBvcnRDb250YWN0czogMCxcbiAgICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiAwLFxuICAgIGV2ZW50UmV0ZW50aW9uRGF5czogMzAsXG4gICAgZG9yYVJldGVudGlvbkRheXM6IDE4MCxcbiAgfSxcbiAgLy8gQnVzaW5lc3MgKCQyNDkpOiB0aGUgc3RlcCB0aGUgJDc5IC0+ICQ1OTkgY2xpZmYgd2FzIG1pc3NpbmcuIDggc2VhdHMsIDIwXG4gIC8vIHBpcGVsaW5lcywgYW5kIERPUkEgKGFkdmFuY2VkX3JlcG9ydGluZykgaW5jbHVkZWQgcmF0aGVyIHRoYW4gYW4gYWRkLW9uLlxuICAvLyBFdmVyeSBjb3N0IGRyaXZlciBpcyAxMDAsMDAwIGFwaUNhbGxzIGFuZCAyMDAgYWlDYWxscyBQRVIgU0VBVCwgdGhlIHNhbWVcbiAgLy8gcGVyLXNlYXQgcmF0ZSBhcyBQcm8vVGVhbS9FbnRlcnByaXNlLCBzbyB0aGUgbGFkZGVyIHJlYWRzIGNvbnNpc3RlbnRseSB0byBhXG4gIC8vIGJ1eWVyIHdobyBkaXZpZGVzIGJ5IGhlYWRjb3VudC4gQ291bnQtcXVvdGFzIHRoYXQgVGVhbSBhbHJlYWR5IHVuY2FwcyBzdGF5XG4gIC8vIC0xOyBgaWRwQ29uZmlnc2Agc2l0cyBiZXR3ZWVuIFRlYW0ncyA1IGFuZCBFbnRlcnByaXNlJ3MgdW5saW1pdGVkLlxuICBidXNpbmVzczoge1xuICAgIHBsdWdpbnM6IDEwMCxcbiAgICBwaXBlbGluZXM6IDIwLFxuICAgIGFwaUNhbGxzOiA4MDBfMDAwLFxuICAgIGF1dG9tYXRpb25DYWxsczogMjEwXzAwMCxcbiAgICBhaUNhbGxzOiAxXzYwMCxcbiAgICBjcHVDcmVkaXRzOiA0NV8wMDAsXG4gICAgc3RvcmFnZUJ5dGVzOiAxMjAgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAtMSxcbiAgICBhbGVydFJ1bGVzOiAtMSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogLTEsXG4gICAgaWRwQ29uZmlnczogMTAsXG4gICAgbGlzdGluZ3M6IDUwLFxuICAgIHNlYXRzOiA4LFxuICAgIHN1cHBvcnRDb250YWN0czogMCxcbiAgICBzdXBwb3J0UHJlbWl1bUNvbnRhY3RzOiAwLFxuICAgIGV2ZW50UmV0ZW50aW9uRGF5czogMzAsXG4gICAgZG9yYVJldGVudGlvbkRheXM6IDE4MCxcbiAgfSxcbiAgLy8gRW50ZXJwcmlzZSAoJDU5OSwgaGVsZCk6IHRoZSBhbGwtaW5jbHVzaXZlIHRpZXIg4oCUIDE1IHNlYXRzLCAzMCBwaXBlbGluZXMsIEFMTFxuICAvLyBwcmVtaXVtIGZlYXR1cmVzIGluY2x1ZGVkIChzZWUgVElFUl9GRUFUVVJFUykuIEZBSVItVVNFIOKAlCBjb3N0IGRyaXZlcnMgKGFwaUNhbGxzLFxuICAvLyBhaUNhbGxzLCBzdG9yYWdlQnl0ZXMpIGNhcHBlZCBzbyBvbmUgYWNjb3VudCBjYW4ndCBydW4gdXAgdW5ib3VuZGVkXG4gIC8vIGNvbXB1dGUvcHJvdmlkZXIvc3RvcmFnZSBjb3N0IG9uIGEgZmxhdCBwcmljZTsgY2hlYXAgY291bnQtcXVvdGFzIHN0YXkgLTEuXG4gIGVudGVycHJpc2U6IHtcbiAgICBwbHVnaW5zOiAxNTAsXG4gICAgcGlwZWxpbmVzOiAzMCxcbiAgICBhcGlDYWxsczogMV81MDBfMDAwLFxuICAgIGF1dG9tYXRpb25DYWxsczogMzEwXzAwMCxcbiAgICBhaUNhbGxzOiAzXzAwMCxcbiAgICBjcHVDcmVkaXRzOiA2N181MDAsXG4gICAgc3RvcmFnZUJ5dGVzOiAyNTAgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAtMSxcbiAgICBhbGVydFJ1bGVzOiAtMSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogLTEsXG4gICAgaWRwQ29uZmlnczogLTEsXG4gICAgbGlzdGluZ3M6IDEwMCxcbiAgICBzZWF0czogMTUsXG4gICAgc3VwcG9ydENvbnRhY3RzOiAwLFxuICAgIHN1cHBvcnRQcmVtaXVtQ29udGFjdHM6IDAsXG4gICAgZXZlbnRSZXRlbnRpb25EYXlzOiAzMCxcbiAgICBkb3JhUmV0ZW50aW9uRGF5czogMTgwLFxuICB9LFxuICAvLyBVbmxpbWl0ZWQ6IEVWRVJZIHF1b3RhIHVuY2FwcGVkICgtMSkuIFRoZSBkZWZhdWx0IHdoZW4gYmlsbGluZyBpcyBkaXNhYmxlZFxuICAvLyAobm8gZW5mb3JjZW1lbnQgc3VyZmFjZSkg4oCUIG5ldmVyIHNob3duL3NlbGVjdGFibGUgd2hlbiBiaWxsaW5nIGlzIGVuYWJsZWQuXG4gIHVubGltaXRlZDoge1xuICAgIHBsdWdpbnM6IC0xLFxuICAgIHBpcGVsaW5lczogLTEsXG4gICAgYXBpQ2FsbHM6IC0xLFxuICAgIGF1dG9tYXRpb25DYWxsczogLTEsXG4gICAgYWlDYWxsczogLTEsXG4gICAgY3B1Q3JlZGl0czogLTEsXG4gICAgc3RvcmFnZUJ5dGVzOiAtMSxcbiAgICBkYXNoYm9hcmRzOiAtMSxcbiAgICBhbGVydFJ1bGVzOiAtMSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogLTEsXG4gICAgaWRwQ29uZmlnczogLTEsXG4gICAgbGlzdGluZ3M6IC0xLFxuICAgIHNlYXRzOiAtMSxcbiAgICBzdXBwb3J0Q29udGFjdHM6IC0xLFxuICAgIHN1cHBvcnRQcmVtaXVtQ29udGFjdHM6IC0xLFxuICAgIGV2ZW50UmV0ZW50aW9uRGF5czogLTEsXG4gICAgZG9yYVJldGVudGlvbkRheXM6IC0xLFxuICB9LFxufTtcblxuLyoqXG4gKiBSZWFkIGEgdGllciBMSU1JVCBlbnYgdmFyLiBgLTFgID0gdW5saW1pdGVkOyBhbnl0aGluZyBiZWxvdyB0aGF0IGlzIG5vbnNlbnNlXG4gKiAoYSBgLTVgIGxpbWl0IHdvdWxkIHNoaXAgYSBicm9rZW4gZmluaXRlIGNhcCksIHNvIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGNvZGVcbiAqIGRlZmF1bHQgcmF0aGVyIHRoYW4gY2xhbXBpbmcgdXAgdG8gYC0xYC4gVGhlIHBhcnNpbmcgaXRzZWxmIGlzIGFwaS1jb3JlJ3NcbiAqIHNoYXJlZCBgZW52SW50YCDigJQgc3RyaWN0IGFib3V0IGRlY2ltYWxzL2dhcmJhZ2Ug4oCUIG5vdCBhIGxvY2FsIHJlLWRlcml2YXRpb24uXG4gKi9cbmZ1bmN0aW9uIHRpZXJMaW1pdEVudihuYW1lOiBzdHJpbmcsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBuID0gZW52SW50KG5hbWUsIGZhbGxiYWNrKTtcbiAgcmV0dXJuIG4gPCAtMSA/IGZhbGxiYWNrIDogbjtcbn1cblxuLyoqXG4gKiBQZXItdGllciBsaW1pdHMsIGVhY2ggb3ZlcnJpZGFibGUgdmlhIGBRVU9UQV9USUVSXzxUSUVSPl88TElNSVQ+YCBlbnYgdmFyc1xuICogKGUuZy4gYFFVT1RBX1RJRVJfUFJPX1BJUEVMSU5FUz0yNTBgLCBgUVVPVEFfVElFUl9ERVZFTE9QRVJfU1RPUkFHRV9CWVRFUz0uLi5gKS5cbiAqIFVuc2V0L2VtcHR5IOKGkiB0aGUgY29kZSBkZWZhdWx0LiBgLTFgID0gdW5saW1pdGVkLiBSZWFkIG9uY2UgYXQgbW9kdWxlIGxvYWQg4oCUXG4gKiBvbiBrOHMgdGhlc2UgZmxvdyBpbiB2aWEgdGhlIGBhcHAtZW52YCBDb25maWdNYXAgKGJ1aWx0IGZyb20gYC5lbnZgKS5cbiAqL1xuZnVuY3Rpb24gdGllckxpbWl0cyh0aWVyOiBRdW90YVRpZXIpOiBRdW90YVRpZXJMaW1pdHMge1xuICAvLyBgdW5saW1pdGVkYCBpcyB1bmNhcHBlZCBCWSBERUZJTklUSU9OOiBFVkVSWSBxdW90YSBpcyAtMSBhbmQgaXQgaXMgTk9UXG4gIC8vIGVudi1vdmVycmlkYWJsZS4gUmVhZGluZyBRVU9UQV9USUVSX1VOTElNSVRFRF8qIGhlcmUgd291bGQgbGV0IGEgc3RyYXkgZW52XG4gIC8vIHZhciBzaWxlbnRseSBjYXAgdGhlIGJpbGxpbmctRElTQUJMRUQgZGVmYXVsdCB0aWVyIOKAlCBzdXJmYWNpbmcgYXMgYSBzcHVyaW91c1xuICAvLyBcInF1b3RhIGV4Y2VlZGVkXCIgb24gYSBkZXBsb3kgdGhhdCBtZXRlcnMgbm90aGluZy4gRGVyaXZlIC0xIGZvciBldmVyeSBmaWVsZFxuICAvLyBmcm9tIHRoZSBsaW1pdHMgc2hhcGUgc28gYSBuZXdseS1hZGRlZCBxdW90YSBpcyB1bmNhcHBlZCBoZXJlIGF1dG9tYXRpY2FsbHkuXG4gIGlmICh0aWVyID09PSAndW5saW1pdGVkJykge1xuICAgIGNvbnN0IHVuY2FwcGVkID0geyAuLi5ERUZBVUxUX1RJRVJfTElNSVRTLnVubGltaXRlZCB9O1xuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh1bmNhcHBlZCkgYXMgKGtleW9mIFF1b3RhVGllckxpbWl0cylbXSkgdW5jYXBwZWRba10gPSAtMTtcbiAgICByZXR1cm4gdW5jYXBwZWQ7XG4gIH1cbiAgY29uc3QgZCA9IERFRkFVTFRfVElFUl9MSU1JVFNbdGllcl07XG4gIGNvbnN0IFQgPSB0aWVyLnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiB7XG4gICAgcGx1Z2luczogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fUExVR0lOU2AsIGQucGx1Z2lucyksXG4gICAgcGlwZWxpbmVzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9QSVBFTElORVNgLCBkLnBpcGVsaW5lcyksXG4gICAgYXBpQ2FsbHM6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X0FQSV9DQUxMU2AsIGQuYXBpQ2FsbHMpLFxuICAgIGF1dG9tYXRpb25DYWxsczogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fQVVUT01BVElPTl9DQUxMU2AsIGQuYXV0b21hdGlvbkNhbGxzKSxcbiAgICBhaUNhbGxzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9BSV9DQUxMU2AsIGQuYWlDYWxscyksXG4gICAgc3RvcmFnZUJ5dGVzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9TVE9SQUdFX0JZVEVTYCwgZC5zdG9yYWdlQnl0ZXMpLFxuICAgIGNwdUNyZWRpdHM6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X0NQVV9DUkVESVRTYCwgZC5jcHVDcmVkaXRzKSxcbiAgICBkYXNoYm9hcmRzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9EQVNIQk9BUkRTYCwgZC5kYXNoYm9hcmRzKSxcbiAgICBhbGVydFJ1bGVzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9BTEVSVF9SVUxFU2AsIGQuYWxlcnRSdWxlcyksXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X0FMRVJUX0RFU1RJTkFUSU9OU2AsIGQuYWxlcnREZXN0aW5hdGlvbnMpLFxuICAgIGlkcENvbmZpZ3M6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X0lEUF9DT05GSUdTYCwgZC5pZHBDb25maWdzKSxcbiAgICBsaXN0aW5nczogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fTElTVElOR1NgLCBkLmxpc3RpbmdzKSxcbiAgICBzZWF0czogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fU0VBVFNgLCBkLnNlYXRzKSxcbiAgICBzdXBwb3J0Q29udGFjdHM6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X1NVUFBPUlRfQ09OVEFDVFNgLCBkLnN1cHBvcnRDb250YWN0cyksXG4gICAgc3VwcG9ydFByZW1pdW1Db250YWN0czogdGllckxpbWl0RW52KGBRVU9UQV9USUVSXyR7VH1fU1VQUE9SVF9QUkVNSVVNX0NPTlRBQ1RTYCwgZC5zdXBwb3J0UHJlbWl1bUNvbnRhY3RzKSxcbiAgICBldmVudFJldGVudGlvbkRheXM6IHRpZXJMaW1pdEVudihgUVVPVEFfVElFUl8ke1R9X0VWRU5UX1JFVEVOVElPTl9EQVlTYCwgZC5ldmVudFJldGVudGlvbkRheXMpLFxuICAgIGRvcmFSZXRlbnRpb25EYXlzOiB0aWVyTGltaXRFbnYoYFFVT1RBX1RJRVJfJHtUfV9ET1JBX1JFVEVOVElPTl9EQVlTYCwgZC5kb3JhUmV0ZW50aW9uRGF5cyksXG4gIH07XG59XG5cbi8vIExhYmVscyBhcmUgb3ZlcnJpZGFibGUgdmlhIGBRVU9UQV9USUVSXzxUSUVSPl9MQUJFTGAgKGRpc3BsYXkgbmFtZSBvbmx5KS5cbmV4cG9ydCBjb25zdCBRVU9UQV9USUVSUzogUmVjb3JkPFF1b3RhVGllciwgUXVvdGFUaWVyUHJlc2V0PiA9IHtcbiAgZGV2ZWxvcGVyOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfREVWRUxPUEVSX0xBQkVMJywgJ0RldmVsb3BlcicpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ2RldmVsb3BlcicpIH0sXG4gIHBybzogeyBsYWJlbDogZW52U3RyKCdRVU9UQV9USUVSX1BST19MQUJFTCcsICdQcm8nKSwgbGltaXRzOiB0aWVyTGltaXRzKCdwcm8nKSB9LFxuICB0ZWFtOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfVEVBTV9MQUJFTCcsICdUZWFtJyksIGxpbWl0czogdGllckxpbWl0cygndGVhbScpIH0sXG4gIGJ1c2luZXNzOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfQlVTSU5FU1NfTEFCRUwnLCAnQnVzaW5lc3MnKSwgbGltaXRzOiB0aWVyTGltaXRzKCdidXNpbmVzcycpIH0sXG4gIGVudGVycHJpc2U6IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9FTlRFUlBSSVNFX0xBQkVMJywgJ0VudGVycHJpc2UnKSwgbGltaXRzOiB0aWVyTGltaXRzKCdlbnRlcnByaXNlJykgfSxcbiAgdW5saW1pdGVkOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfVU5MSU1JVEVEX0xBQkVMJywgJ1VubGltaXRlZCcpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ3VubGltaXRlZCcpIH0sXG59O1xuXG4vKiogQWxsIHZhbGlkIHRpZXIgbmFtZXMgKGluY2wuIGB1bmxpbWl0ZWRgKS4gVXNlZCBmb3IgdmFsaWRhdGlvbiBvZiBhICpzdG9yZWQqXG4gKiAgdGllciDigJQgYHVubGltaXRlZGAgaXMgYSB2YWxpZCB2YWx1ZSBldmVuIHRob3VnaCBpdCdzIG5ldmVyIG9mZmVyZWQgZm9yIHNhbGUuICovXG5leHBvcnQgY29uc3QgVkFMSURfVElFUlM6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gT2JqZWN0LmtleXMoUVVPVEFfVElFUlMpIGFzIFF1b3RhVGllcltdO1xuXG4vKiogVGhlIHN0YW5kYXJkLCBiaWxsaW5nLXNlbGVjdGFibGUgdGllcnMg4oCUIHRoZSBvbmVzIG9mZmVyZWQgYXMgcHVyY2hhc2FibGUgcGxhbnNcbiAqICBhbmQgc2hvd24gaW4gdGllciBwaWNrZXJzLiBEZXJpdmVkIGFzIFwiZXZlcnkgdmFsaWQgdGllciBleGNlcHQgYHVubGltaXRlZGBcIixcbiAqICB3aGljaCBpcyB0aGUgYmlsbGluZy1ESVNBQkxFRCBkZWZhdWx0IGFuZCBpcyBuZXZlciBkaXNwbGF5ZWQvc2VsZWN0YWJsZSB3aGVuXG4gKiAgYmlsbGluZyBpcyBlbmFibGVkLiBLZXB0IERSWSBvZmYgYFZBTElEX1RJRVJTYCBzbyBhZGRpbmcgYSB0aWVyIGZsb3dzIHRocm91Z2guICovXG5leHBvcnQgY29uc3QgU1RBTkRBUkRfVElFUlM6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gVkFMSURfVElFUlMuZmlsdGVyKCh0KSA9PiB0ICE9PSAndW5saW1pdGVkJyk7XG5cbi8qKiBUaWVycyB0aGF0IHBlcm1pdCB0aGUgb3JnIOKGkiB0ZWFtIGhpZXJhcmNoeSAobmVzdGluZyB0ZWFtcyB1bmRlciBhIHJvb3QpLiBUaGVcbiAqICBiaWxsaW5nLW9mZiBgdW5saW1pdGVkYCB0aWVyIGlzIHRlYW0tY2FwYWJsZSAoaXQncyB0aGUgbW9zdCBwZXJtaXNzaXZlKTsgdGhlXG4gKiAgZW50cnktbGV2ZWwgYGRldmVsb3BlcmAvYHByb2AgdGllcnMgYXJlIG5vdC4gU2luZ2xlIHNvdXJjZSBmb3IgdGhlIHBhcmVudC1cbiAqICBlbGlnaWJpbGl0eSArIGRvd25ncmFkZS1vdmVyY2FwIGNoZWNrcyBzbyB0aGV5IGNhbid0IGRyaWZ0LiAqL1xuZXhwb3J0IGNvbnN0IFRFQU1fQ0FQQUJMRV9USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBbJ3RlYW0nLCAnYnVzaW5lc3MnLCAnZW50ZXJwcmlzZScsICd1bmxpbWl0ZWQnXTtcbmV4cG9ydCBmdW5jdGlvbiB0aWVyQWxsb3dzVGVhbXModGllcjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISF0aWVyICYmIChURUFNX0NBUEFCTEVfVElFUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHRpZXIpO1xufVxuXG4vKiogVGllcnMgdGhhdCBtYXkgYnV5IGV4dHJhIHNlYXRzIOKAlCBiaWxsaW5nJ3MgcGVyLXNlYXQgYHNlYXRgIGFkZC1vbi4gU2VhdHMgYXJlXG4gKiAgdGhlIFRlYW0gZGlmZmVyZW50aWF0b3IsIHNvIHRoZSBzaW5nbGUtc2VhdCBgZGV2ZWxvcGVyYC9gcHJvYCB0aWVycyBjYW5ub3RcbiAqICBzdGFjayB0aGVtIGFuZCBtdXN0IHVwZ3JhZGUgaW5zdGVhZDsgYHVubGltaXRlZGAgaGFzIG5vIHNlYXQgY2FwIGF0IGFsbC5cbiAqICBTaW5nbGUgc291cmNlIGZvciB0aGUgYmlsbGluZyBjYXRhbG9nIGFuZCBldmVyeSBcIm91dCBvZiBzZWF0c1wiIG1lc3NhZ2UuICovXG5leHBvcnQgY29uc3QgU0VBVF9QQUNLX1RJRVJTOiByZWFkb25seSBRdW90YVRpZXJbXSA9IFsndGVhbScsICdidXNpbmVzcycsICdlbnRlcnByaXNlJ107XG5cbi8qKiBIb3cgYW4gYWNjb3VudCB0aGF0IGhhcyB1c2VkIGV2ZXJ5IHNlYXQgY2FuIGdldCBhbm90aGVyLiAqL1xuZXhwb3J0IHR5cGUgU2VhdFJlbWVkeSA9ICd1cGdyYWRlJyB8ICdzZWF0X3BhY2snO1xuXG4vKipcbiAqIFRoZSByZW1lZHkgdG8gb2ZmZXIgYW4gYWNjb3VudCBhdCBpdHMgc2VhdCBjYXAsIGZyb20gdGhlIEFDQ09VTlQncyAocm9vdCkgdGllcjpcbiAqIGBzZWF0X3BhY2tgIHdoZXJlIHNlYXRzIGNhbiBiZSBib3VnaHQsIGB1cGdyYWRlYCBvbiB0aGUgc2luZ2xlLXNlYXQgdGllcnMuXG4gKiBgbnVsbGAgd2hlbiB0aGUgdGllciBpcyB1bmtub3duIG9yIGhhcyBubyBjYXAg4oCUIHNheSBub3RoaW5nIHJhdGhlciB0aGFuIGd1ZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhdFJlbWVkeSh0aWVyOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogU2VhdFJlbWVkeSB8IG51bGwge1xuICBpZiAoIXRpZXIgfHwgIWlzVmFsaWRUaWVyKHRpZXIpIHx8IHRpZXIgPT09ICd1bmxpbWl0ZWQnKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChTRUFUX1BBQ0tfVElFUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHRpZXIpID8gJ3NlYXRfcGFjaycgOiAndXBncmFkZSc7XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBiaWxsaW5nIHNlcnZpY2UgaXMgZW5hYmxlZCBpbiB0aGlzIGRlcGxveW1lbnQgKGBCSUxMSU5HX0VOQUJMRURgLFxuICogIG9wdC1vdXQgZGVmYXVsdC1vbiDigJQgbWlycm9ycyB0aGUgYmlsbGluZy9wbGF0Zm9ybSBjb25maWdzKS4gV2l0aCBiaWxsaW5nIE9GRlxuICogIHRoZXJlJ3Mgbm8gbWV0ZXJpbmcvZW5mb3JjZW1lbnQgc3VyZmFjZSwgc28gdGhlIGRlZmF1bHQgdGllciBpcyBgdW5saW1pdGVkYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpbGxpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZW52Qm9vbCgnQklMTElOR19FTkFCTEVEJywgdHJ1ZSk7XG59XG5cbi8qKlxuICogRGVmYXVsdCB0aWVyIGFzc2lnbmVkIHRvIG5ldyBvcmdhbml6YXRpb25zLlxuICogLSBCaWxsaW5nIERJU0FCTEVEIOKGkiBgdW5saW1pdGVkYCAobm90aGluZyBpcyBtZXRlcmVkLCBzbyBldmVyeXRoaW5nIGlzIHVuY2FwcGVkKS5cbiAqIC0gQmlsbGluZyBFTkFCTEVEICDihpIgYERFRkFVTFRfUVVPVEFfVElFUmAgaWYgaXQncyBhIHZhbGlkIHN0YW5kYXJkIHRpZXIsIGVsc2UgYGRldmVsb3BlcmAuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJRVI6IFF1b3RhVGllciA9ICFpc0JpbGxpbmdFbmFibGVkKClcbiAgPyAndW5saW1pdGVkJ1xuICA6IChpc1ZhbGlkVGllcihwcm9jZXNzLmVudi5ERUZBVUxUX1FVT1RBX1RJRVIgPz8gJycpICYmIHByb2Nlc3MuZW52LkRFRkFVTFRfUVVPVEFfVElFUiAhPT0gJ3VubGltaXRlZCdcbiAgICA/IChwcm9jZXNzLmVudi5ERUZBVUxUX1FVT1RBX1RJRVIgYXMgUXVvdGFUaWVyKVxuICAgIDogJ2RldmVsb3BlcicpO1xuXG4vKiogQ2hlY2sgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIFF1b3RhVGllci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGllcih2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgUXVvdGFUaWVyIHtcbiAgLy8gVXNlIHRoZSBleHBsaWNpdCB0dXBsZSwgbm90IGB2YWx1ZSBpbiBRVU9UQV9USUVSU2A6IGBpbmAgd2Fsa3MgdGhlIHByb3RvdHlwZVxuICAvLyBjaGFpbiwgc28gaW5oZXJpdGVkIE9iamVjdCBrZXlzICgndG9TdHJpbmcnLCAnY29uc3RydWN0b3InLCDigKYpIHdvdWxkIHJldHVyblxuICAvLyB0cnVlIGFuZCB0aGVuIGBnZXRUaWVyTGltaXRzYCB3b3VsZCByZWFkIGAubGltaXRzYCBvZmYgYSBmdW5jdGlvbiDihpIgY3Jhc2guXG4gIC8vIGB0aWVyYCBpcyBhdHRhY2tlci1pbmZsdWVuY2VhYmxlIChKV1QgLyByZXF1ZXN0IGJvZHkgLyBERUZBVUxUX1FVT1RBX1RJRVIgZW52KS5cbiAgcmV0dXJuIChWQUxJRF9USUVSUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vKiogR2V0IHRoZSBkZWZhdWx0IGxpbWl0cyBmb3IgYSBnaXZlbiB0aWVyIChmYWxscyBiYWNrIHRvIGRldmVsb3BlcikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGllckxpbWl0cyh0aWVyOiBzdHJpbmcpOiBRdW90YVRpZXJMaW1pdHMge1xuICByZXR1cm4gaXNWYWxpZFRpZXIodGllcikgPyBRVU9UQV9USUVSU1t0aWVyXS5saW1pdHM6IFFVT1RBX1RJRVJTLmRldmVsb3Blci5saW1pdHM7XG59XG5cbi8qKlxuICogVGhlIHBlcmlvZCAoZGF5cykgZXZlcnkgdXNhZ2UgY291bnRlciByb2xscyBvdmVyIG9uLiBBbGwgcXVvdGFzIGFyZSBwZXItcGVyaW9kXG4gKiBGTE9XIGNvdW50ZXJzIG9uIG9uZSBzaGFyZWQgcGVyaW9kOiB0aGUgcXVvdGEgc2VydmljZSByZXNldHMgYSBjb3VudGVyIHRoaXNcbiAqIG1hbnkgZGF5cyBhZnRlciBpdCBleHBpcmVzLCBhbmQgcGxhdGZvcm0gc2VlZHMgYSBuZXcgb3JnJ3MgY291bnRlcnMgd2l0aCB0aGVcbiAqIHNhbWUgd2luZG93IChgUVVPVEFfUkVTRVRfREFZU2AsIGRlZmF1bHQgMykuXG4gKi9cbmV4cG9ydCBjb25zdCBRVU9UQV9SRVNFVF9EQVlTID0gZW52SW50KCdRVU9UQV9SRVNFVF9EQVlTJywgMywgeyBtaW46IDEgfSk7XG5cbi8qKiBUaGUgbmV4dCBxdW90YSByZXNldDogbG9jYWwgbWlkbmlnaHQgYGRheXNgIGZyb20gYG5vd2AuICovXG4vKipcbiAqIFRoZSBgY3B1Q3JlZGl0c2AgcGVyaW9kLCBpbiBkYXlzLiBBIE1PTlRIIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgdGhyZWUtZGF5XG4gKiB3aW5kb3csIGJlY2F1c2UgYnVpbGQgZGVtYW5kIGlzIGJ1cnN0eSBpbiBhIHdheSBBUEkgdHJhZmZpYyBpcyBub3Q6IGEgZnVsbFxuICogY2F0YWxvZ3VlIHJlYnVpbGQgaXMgYSBkYXkncyB3b3JrIHRoYXQgYXJyaXZlcyBvbiBvbmUgZGF5LCBhbmQgYSB0aHJlZS1kYXlcbiAqIHdpbmRvdyByZWZ1c2VzIGl0IHdoaWxlIHRoZSBhY2NvdW50IGhvbGRzIG1vc3Qgb2YgYSBtb250aCdzIGJ1ZGdldCB1bnNwZW50LlxuICovXG5leHBvcnQgY29uc3QgQ1BVX0NSRURJVFNfUEVSSU9EX0RBWVMgPSBlbnZJbnQoJ1FVT1RBX0NQVV9DUkVESVRTX1BFUklPRF9EQVlTJywgMzAsIHsgbWluOiAxIH0pO1xuXG4vKipcbiAqIFRoZSB1c2FnZSBwZXJpb2QgZm9yIE9ORSBxdW90YSB0eXBlLCBpbiBkYXlzLlxuICpcbiAqIEV2ZXJ5IGZsb3cgcXVvdGEgYnV0IGBjcHVDcmVkaXRzYCByb2xscyBvbiB0aGUgZ2xvYmFsIHtAbGluayBRVU9UQV9SRVNFVF9EQVlTfS5cbiAqIENyZWRpdHMgYXJlIG1vbnRobHksIHdoaWNoIG1ha2VzIHRoZSBwZXJpb2QgYSBQRVItVFlQRSBmYWN0IOKAlCBzbyBhbnl0aGluZyB0aGF0XG4gKiBjb21wdXRlcyBhIHJlc2V0IGRhdGUsIGEgXCJyZXNldHMgaW4gTiBkYXlzXCIgbGluZSBvciBhIGJ1cm4tcmF0ZSBmb3JlY2FzdCBoYXNcbiAqIHRvIGFzayBmb3IgdGhlIHR5cGUncyBvd24gcGVyaW9kIHJhdGhlciB0aGFuIHJlYWRpbmcgdGhlIGdsb2JhbCBjb25zdGFudC4gQVxuICogZm9yZWNhc3QgYWdhaW5zdCB0aGUgd3Jvbmcgd2luZG93IGlzIHdyb25nIGJ5IGEgZmFjdG9yIG9mIHRlbi5cbiAqXG4gKiBTdG9ja3MgKGBzdG9yYWdlQnl0ZXNgIGFuZCB0aGUgcmVzb3VyY2UgY291bnRzKSBoYXZlIG5vIHBlcmlvZCBhdCBhbGw7IHRoaXNcbiAqIHJldHVybnMgdGhlIGdsb2JhbCB3aW5kb3cgZm9yIHRoZW0gYmVjYXVzZSBjYWxsZXJzIGdhdGUgb25cbiAqIGBxdW90YUFjY3J1YWwodHlwZSkgPT09ICdzdG9jaydgIGJlZm9yZSB1c2luZyBpdCwgYW5kIHJldHVybmluZyBhIGZpZ3VyZSBpc1xuICogbGVzcyBkaXNydXB0aXZlIHRoYW4gbWFraW5nIGV2ZXJ5IGNhbGxlciBoYW5kbGUgYSBudWxsLiBDaGVjayB0aGUgYWNjcnVhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RhUGVyaW9kRGF5cyh0eXBlOiBRdW90YVR5cGUpOiBudW1iZXIge1xuICByZXR1cm4gdHlwZSA9PT0gJ2NwdUNyZWRpdHMnID8gQ1BVX0NSRURJVFNfUEVSSU9EX0RBWVMgOiBRVU9UQV9SRVNFVF9EQVlTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV4dFF1b3RhUmVzZXREYXRlKGRheXM6IG51bWJlciA9IFFVT1RBX1JFU0VUX0RBWVMsIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCkpOiBEYXRlIHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5vdyk7XG4gIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRheXMpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gZGF0ZTtcbn1cbiJdfQ==
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* (`admin.superadmin.grant`, `org.ownership.transfer`, `user.login`, …). Keep
|
|
18
18
|
* this list free of any platform-only action.
|
|
19
19
|
*/
|
|
20
|
-
export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.vuln.waived', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'message.announcement.create', 'message.delete', 'message.restore', 'message.purge', 'support.case.open', 'support.case.reply', 'support.case.status', 'support.case.severity', 'support.case.assign', 'support.case.transfer', 'support.oncall.acknowledged', 'support.oncall.escalated', 'support.oncall.test', 'support.contact.designate', 'support.contact.revoke', 'support.contact.upgrade', 'support.contact.downgrade', 'support.case.note', 'support.canned.write', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.support-floor.override', 'billing.support-incident.grant', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'authz.denied', 'ask.query', 'ask.agent.turn', 'ask.feedback', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'plugin.version.deprecate', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.shadowing.denied', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test'];
|
|
20
|
+
export declare const REMOTE_AUDIT_ACTIONS: readonly ['plugin.build.completed', 'plugin.build.failed', 'plugin.build.timeout', 'plugin.scan.skipped', 'plugin.vuln.waived', 'plugin.vuln.flagged', 'plugin.vuln.cleared', 'plugin.delete', 'plugin.restore', 'plugin.purge', 'plugin.update', 'plugin.upload', 'plugin.deploy', 'plugin.bulk.update', 'plugin.bulk.delete', 'plugin.dlq.purge', 'plugin.build.retry', 'plugin.dlq.replay', 'pipeline.create', 'pipeline.update', 'pipeline.delete', 'pipeline.restore', 'pipeline.purge', 'pipeline_template.create', 'pipeline_template.update', 'pipeline_template.delete', 'pipeline_template.restore', 'pipeline_template.purge', 'pipeline.execution.start', 'pipeline.execution.cancel', 'pipeline.registry.register', 'pipeline.registry.deregister', 'quota.reset', 'quota.limit.update', 'quota.delete', 'quota.notice_settings.update', 'compliance.exemption.approve', 'compliance.exemption.revoke', 'compliance.exemption.request', 'compliance.exemption.reject', 'compliance.rule.toggle', 'compliance.rule.create', 'compliance.rule.update', 'compliance.rule.delete', 'compliance.rule.restore', 'compliance.rule.purge', 'compliance.policy.create', 'compliance.policy.update', 'compliance.policy.delete', 'compliance.policy.restore', 'compliance.policy.purge', 'compliance.scan-schedule.create', 'compliance.scan-schedule.update', 'compliance.scan-schedule.delete', 'compliance.template.apply', 'compliance.scan.create', 'compliance.scan.cancel', 'compliance.scan.complete', 'compliance.subscription.auto-subscribe', 'compliance.notification-preference.update', 'registry.gc', 'registry.image.delete', 'registry.image.copy', 'registry.image.sign', 'registry.token.issue', 'registry.quarantine.credential.mint', 'message.announcement.create', 'message.delete', 'message.restore', 'message.purge', 'message.update', 'message.attachment.upload', 'message.notify.internal', 'message.org.purge', 'support.case.open', 'support.case.reply', 'support.case.status', 'support.case.severity', 'support.case.assign', 'support.case.transfer', 'support.oncall.acknowledged', 'support.oncall.escalated', 'support.oncall.test', 'support.oncall.paged', 'support.contact.designate', 'support.contact.revoke', 'support.contact.upgrade', 'support.contact.downgrade', 'support.case.note', 'support.canned.write', 'billing.subscription.create', 'billing.subscription.update', 'billing.subscription.reactivate', 'billing.subscription.cancel', 'billing.subscription.delete', 'billing.tier.override', 'billing.support-floor.override', 'billing.support-incident.grant', 'billing.addon.add', 'billing.addon.remove', 'billing.addon.prune', 'billing.discount.generate', 'billing.discount.issue', 'billing.discount.apply', 'billing.discount.remove', 'billing.discount.revoke', 'billing.campaign.create', 'billing.campaign.update', 'billing.campaign.end', 'billing.promotion.create', 'billing.promotion.update', 'billing.promotion.revoke', 'billing.promotion.grant', 'billing.promotion.activate', 'billing.credit.consumed', 'billing.credit.exhausted', 'billing.combo.expired', 'reporting.settings.update', 'reporting.deployment.outcome', 'reporting.retention.sync', 'reporting.report.definition.create', 'reporting.report.definition.update', 'reporting.report.definition.delete', 'reporting.report.ownership.transfer', 'reporting.report.published', 'reporting.report.republished', 'reporting.report.link.created', 'reporting.report.link.revoked', 'reporting.report.recipient.added', 'reporting.report.recipient.removed', 'reporting.report.policy.update', 'reporting.report.paused', 'reporting.report.resumed', 'reporting.report.run.compose', 'reporting.report.run.notes', 'reporting.report.run.summary', 'reporting.report.recipient.resend', 'reporting.report.recipient.verified', 'reporting.report.recipient.unsubscribed', 'reporting.ingest.batch', 'reporting.ingest.rejected', 'reporting.incident.record', 'authz.denied', 'ask.query', 'ask.agent.turn', 'ask.feedback', 'pipeline.ai.generate', 'plugin.ai.generate', 'publisher.create', 'publisher.update', 'publisher.terms.accept', 'publisher.verify.request', 'publisher.verify.approve', 'publisher.verify.reject', 'publisher.tier.change', 'publisher.suspend', 'publisher.unsuspend', 'publisher.transfer.request', 'publisher.transfer.accept', 'publisher.transfer.decline', 'publisher.transfer.approve', 'publisher.transfer.reject', 'publisher.profile-change.approve', 'publisher.profile-change.reject', 'plugin.request.submit', 'plugin.request.withdraw', 'plugin.request.approve', 'plugin.request.second-approve', 'plugin.request.reject', 'plugin.request.auto-approve', 'plugin.listing.publish', 'plugin.listing.update', 'plugin.listing.state.change', 'plugin.listing.pause', 'plugin.listing.unpause', 'plugin.version.pause', 'plugin.version.yank', 'plugin.version.unyank', 'plugin.version.deprecate', 'plugin.version.prune', 'ecosystem.auto-approval-rule.create', 'ecosystem.auto-approval-rule.update', 'ecosystem.auto-approval-rule.delete', 'ecosystem.reserved-name.update', 'ecosystem.bootstrap.open', 'ecosystem.bootstrap.close', 'registry.image.publish', 'registry.image.resign', 'registry.image.yank', 'registry.image.gc', 'plugin.install.request', 'plugin.install.approve', 'plugin.install.deny', 'plugin.install.create', 'plugin.install.upgrade', 'plugin.install.change-request', 'plugin.install.change-approve', 'plugin.install.change-reject', 'plugin.install.remove', 'org.plugin-install-policy.update', 'plugin.shadowing.denied', 'plugin.review.create', 'plugin.review.update', 'plugin.review.delete', 'plugin.review.report', 'plugin.review.hold', 'plugin.review.release', 'plugin.review.remove', 'plugin.review.anonymize', 'plugin.review.reply.create', 'plugin.review.reply.update', 'plugin.review.reply.delete', 'plugin.submission.create', 'plugin.submission.verify', 'plugin.submission.gate-fail', 'plugin.submission.approve', 'plugin.submission.reject', 'plugin.submission.claim', 'plugin.submission.expire', 'plugin.advisory.create', 'plugin.advisory.update', 'plugin.advisory.publish', 'plugin.advisory.withdraw', 'plugin.security_notifications.update', 'plugin.security_notifications.external_email.verify', 'plugin.security_notifications.test', 'plugin.setup_image.promoted', 'plugin.setup_image.promote_refused', 'plugin.setup_image.kept', 'plugin.setup_image.discarded', 'pipeline.vuln.accepted', 'pipeline.vuln.false_positive', 'pipeline.vuln.reopened', 'pipeline.runtime_check.flagged', 'pipeline.plugin.upgraded', 'pipeline.security_report.upload'];
|
|
21
21
|
export type RemoteAuditAction = typeof REMOTE_AUDIT_ACTIONS[number];
|
|
22
22
|
/** Whether `value` is an action a remote service may emit (the ingest allow-list). */
|
|
23
23
|
export declare function isRemoteAuditAction(value: string): value is RemoteAuditAction;
|