bways-report 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +293 -464
- package/esm2022/lib/core/config/bways-report-config.mjs +83 -0
- package/esm2022/lib/core/index.mjs +2 -1
- package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
- package/esm2022/lib/core/services/report-data-discovery.service.mjs +6 -3
- package/esm2022/lib/core/services/report-session-context.service.mjs +11 -7
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
- package/esm2022/lib/core/utils/data-normalization.util.mjs +87 -1
- package/esm2022/lib/core/utils/report-parameter.util.mjs +119 -3
- package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +69 -0
- package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +98 -0
- package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +57 -0
- package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +85 -0
- package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +163 -0
- package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +12 -0
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +4 -23
- package/esm2022/lib/data-access/adapters/index.mjs +8 -1
- package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +12 -2
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +5 -5
- package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +407 -0
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +109 -60
- package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +110 -20
- package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +60 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +11 -5
- package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +15 -3
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +204 -10
- package/esm2022/lib/features/designer/designer.component.mjs +43 -2
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +9 -2
- package/esm2022/lib/features/embed/bways-report-builder.component.mjs +207 -0
- package/esm2022/lib/features/embed/bways-report-menu.component.mjs +433 -0
- package/esm2022/lib/features/embed/bways-report-page.component.mjs +204 -0
- package/esm2022/lib/features/embed/index.mjs +5 -0
- package/esm2022/lib/features/embed/inject-report-menu.mjs +99 -0
- package/esm2022/lib/features/index.mjs +2 -1
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +43 -5
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +4 -4
- package/esm2022/lib/features/routing/index.mjs +2 -2
- package/esm2022/lib/features/routing/models/report-route.models.mjs +1 -1
- package/esm2022/lib/features/routing/report-routes.mjs +42 -1
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +6 -8
- package/esm2022/lib/features/routing/services/report-menu.service.mjs +14 -4
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +22 -3
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +16 -2
- package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +28 -5
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +86 -19
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
- package/esm2022/lib/primitives/components/index.mjs +2 -1
- package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +9 -3
- package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +386 -0
- package/esm2022/lib/provide-reporting.mjs +137 -7
- package/fesm2022/bways-report.mjs +4053 -840
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +161 -0
- package/lib/core/index.d.ts +1 -0
- package/lib/core/models/report-definition.model.d.ts +16 -0
- package/lib/core/services/report-session-context.service.d.ts +1 -0
- package/lib/core/tokens/reporting-config.token.d.ts +16 -0
- package/lib/core/utils/data-normalization.util.d.ts +10 -0
- package/lib/core/utils/report-parameter.util.d.ts +18 -1
- package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +13 -0
- package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +14 -0
- package/lib/data-access/adapters/endpoint-masterdata.adapter.d.ts +11 -0
- package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +15 -0
- package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +21 -0
- package/lib/data-access/adapters/endpoint-tokens.d.ts +21 -0
- package/lib/data-access/adapters/index.d.ts +7 -0
- package/lib/data-access/contracts/lookup.contract.d.ts +2 -2
- package/lib/features/designer/components/component-palette/component-palette.component.d.ts +1 -0
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +1 -1
- package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +34 -0
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +1 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +12 -2
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +10 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +13 -1
- package/lib/features/designer/designer.component.d.ts +4 -0
- package/lib/features/embed/bways-report-builder.component.d.ts +48 -0
- package/lib/features/embed/bways-report-menu.component.d.ts +40 -0
- package/lib/features/embed/bways-report-page.component.d.ts +61 -0
- package/lib/features/embed/index.d.ts +4 -0
- package/lib/features/embed/inject-report-menu.d.ts +44 -0
- package/lib/features/index.d.ts +1 -0
- package/lib/features/persistence/services/report-store.service.d.ts +5 -0
- package/lib/features/routing/index.d.ts +1 -1
- package/lib/features/routing/models/report-route.models.d.ts +3 -0
- package/lib/features/routing/report-routes.d.ts +40 -0
- package/lib/features/routing/resolvers/report.resolver.d.ts +1 -1
- package/lib/features/runtime/dynamic-renderer.component.d.ts +1 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -1
- package/lib/primitives/components/button/rpt-button.component.d.ts +3 -0
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +16 -3
- package/lib/primitives/components/index.d.ts +2 -0
- package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +89 -0
- package/lib/provide-reporting.d.ts +22 -6
- package/package.json +1 -1
|
@@ -11,9 +11,10 @@ import { MasterDataProvider } from './data-access/contracts/master-data.provider
|
|
|
11
11
|
import { ReportPersistenceAdapter } from './data-access/contracts/report-persistence.contract';
|
|
12
12
|
import { ReportSchemaDiscoveryAdapter } from './data-access/contracts/schema-discovery.contract';
|
|
13
13
|
import { ReportLookupAdapter } from './data-access/contracts/lookup.contract';
|
|
14
|
-
import { HttpReportDataSourceAdapter, HttpReportPersistenceAdapter, HttpReportLookupAdapter, HttpReportSchemaDiscoveryAdapter, HttpMasterDataAdapter, LocalStorageReportPersistenceAdapter, MockReportDataSourceAdapter, } from './data-access/adapters';
|
|
14
|
+
import { HttpReportDataSourceAdapter, HttpReportPersistenceAdapter, HttpReportLookupAdapter, HttpReportSchemaDiscoveryAdapter, HttpMasterDataAdapter, LocalStorageReportPersistenceAdapter, MockReportDataSourceAdapter, EndpointSchemaDiscoveryAdapter, EndpointDataSourceAdapter, EndpointLookupAdapter, EndpointPersistenceAdapter, EndpointMasterDataAdapter, BWAYS_REPORT_ENDPOINTS, } from './data-access/adapters';
|
|
15
15
|
import { ComponentRegistry } from './core/registry/component-registry';
|
|
16
16
|
import { registerBuiltinComponents } from './primitives/register-builtins';
|
|
17
|
+
import { normalizeBwaysConfig, } from './core/config/bways-report-config';
|
|
17
18
|
/** Default configuration values. */
|
|
18
19
|
const DEFAULT_CONFIG = {
|
|
19
20
|
defaultPageSize: 25,
|
|
@@ -113,19 +114,140 @@ export function withLocalStorage() {
|
|
|
113
114
|
}
|
|
114
115
|
/** Alias for withLocalStorage */
|
|
115
116
|
export const withMockAdapters = withLocalStorage;
|
|
117
|
+
/**
|
|
118
|
+
* Type guard to detect the simplified `BwaysReportConfig` shape.
|
|
119
|
+
*/
|
|
120
|
+
function isBwaysReportConfig(arg) {
|
|
121
|
+
return (typeof arg === 'object' &&
|
|
122
|
+
arg !== null &&
|
|
123
|
+
'spEndpoint' in arg &&
|
|
124
|
+
'tablesEndpoint' in arg &&
|
|
125
|
+
'executeEndpoint' in arg);
|
|
126
|
+
}
|
|
116
127
|
/**
|
|
117
128
|
* Provides the BWays-Report library to the Angular application.
|
|
118
129
|
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
130
|
+
* **Simple config (recommended for most projects):**
|
|
131
|
+
* ```typescript
|
|
132
|
+
* provideBwaysReport({
|
|
133
|
+
* spEndpoint: '/api/reporting/procedures',
|
|
134
|
+
* tablesEndpoint: '/api/reporting/tables',
|
|
135
|
+
* executeEndpoint: '/api/reporting/execute',
|
|
136
|
+
* reportsEndpoint: '/api/reporting/reports',
|
|
137
|
+
* components: ['formInputs', 'actionButtons'],
|
|
138
|
+
* session: () => inject(AuthService).session(),
|
|
139
|
+
* })
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* **Advanced config (existing adapter pattern):**
|
|
143
|
+
* ```typescript
|
|
144
|
+
* provideBwaysReport(
|
|
145
|
+
* { apiBaseUrl: '/api/reporting' },
|
|
146
|
+
* withHttpAdapters({ apiBaseUrl: '/api/reporting' })
|
|
147
|
+
* )
|
|
148
|
+
* ```
|
|
123
149
|
*
|
|
124
|
-
* @param options -
|
|
150
|
+
* @param options - Either a `BwaysReportConfig` (simple) or `ProvideBwaysReportOptions` (advanced).
|
|
125
151
|
* @param features - Optional features like `withHttpAdapters(...)` or `withLocalStorage()`.
|
|
126
152
|
* @returns Environment providers for the reporting library.
|
|
127
153
|
*/
|
|
128
154
|
export function provideBwaysReport(options = {}, ...features) {
|
|
155
|
+
// ─── Simple config path ────────────────────────────────────────
|
|
156
|
+
if (isBwaysReportConfig(options)) {
|
|
157
|
+
return provideBwaysReportFromSimpleConfig(options);
|
|
158
|
+
}
|
|
159
|
+
// ─── Advanced / legacy config path ─────────────────────────────
|
|
160
|
+
return provideBwaysReportFromOptions(options, features);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Wires up endpoint-based adapters from the simplified `BwaysReportConfig`.
|
|
164
|
+
*/
|
|
165
|
+
function provideBwaysReportFromSimpleConfig(config) {
|
|
166
|
+
const normalized = normalizeBwaysConfig(config);
|
|
167
|
+
const reportingConfig = {
|
|
168
|
+
...DEFAULT_CONFIG,
|
|
169
|
+
defaultPageSize: normalized.defaultPageSize,
|
|
170
|
+
dateFormat: normalized.dateFormat,
|
|
171
|
+
lookupTimeoutMs: normalized.lookupTimeoutMs,
|
|
172
|
+
enableDesigner: true,
|
|
173
|
+
allowedCategories: normalized.allowedCategories,
|
|
174
|
+
autoParameter: normalized.autoParameter,
|
|
175
|
+
routeBase: normalized.routeBase,
|
|
176
|
+
};
|
|
177
|
+
const providers = [
|
|
178
|
+
// Builtin component registration
|
|
179
|
+
{
|
|
180
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
181
|
+
multi: true,
|
|
182
|
+
useValue: () => {
|
|
183
|
+
const registry = inject(ComponentRegistry);
|
|
184
|
+
registerBuiltinComponents(registry);
|
|
185
|
+
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
|
186
|
+
window.addEventListener('wheel', () => {
|
|
187
|
+
const activeEl = document.activeElement;
|
|
188
|
+
if (activeEl instanceof HTMLInputElement && activeEl.type === 'number') {
|
|
189
|
+
activeEl.blur();
|
|
190
|
+
}
|
|
191
|
+
}, { passive: true });
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
// Core configuration
|
|
196
|
+
{ provide: REPORTING_CONFIG, useValue: reportingConfig },
|
|
197
|
+
// Endpoint URLs for the adapters
|
|
198
|
+
{
|
|
199
|
+
provide: BWAYS_REPORT_ENDPOINTS,
|
|
200
|
+
useValue: {
|
|
201
|
+
spEndpoint: normalized.spEndpoint,
|
|
202
|
+
tablesEndpoint: normalized.tablesEndpoint,
|
|
203
|
+
executeEndpoint: normalized.executeEndpoint,
|
|
204
|
+
lookupEndpoint: normalized.lookupEndpoint,
|
|
205
|
+
reportsEndpoint: normalized.reportsEndpoint,
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
// Endpoint-based adapters
|
|
209
|
+
{ provide: ReportSchemaDiscoveryAdapter, useClass: EndpointSchemaDiscoveryAdapter },
|
|
210
|
+
{ provide: ReportDataSourceAdapter, useClass: EndpointDataSourceAdapter },
|
|
211
|
+
{ provide: ReportLookupAdapter, useClass: EndpointLookupAdapter },
|
|
212
|
+
{ provide: MasterDataProvider, useClass: EndpointMasterDataAdapter },
|
|
213
|
+
// Persistence: use endpoint adapter if reportsEndpoint is set, otherwise localStorage
|
|
214
|
+
{
|
|
215
|
+
provide: ReportPersistenceAdapter,
|
|
216
|
+
useClass: normalized.reportsEndpoint
|
|
217
|
+
? EndpointPersistenceAdapter
|
|
218
|
+
: LocalStorageReportPersistenceAdapter,
|
|
219
|
+
},
|
|
220
|
+
];
|
|
221
|
+
// Grid / Chart overrides
|
|
222
|
+
if (normalized.gridComponent) {
|
|
223
|
+
providers.push({ provide: GRID_COMPONENT, useValue: normalized.gridComponent });
|
|
224
|
+
}
|
|
225
|
+
if (normalized.chartComponent) {
|
|
226
|
+
providers.push({ provide: CHART_COMPONENT, useValue: normalized.chartComponent });
|
|
227
|
+
}
|
|
228
|
+
// Session context / provider
|
|
229
|
+
const sessionTarget = normalized.sessionProvider ?? normalized.session;
|
|
230
|
+
if (sessionTarget) {
|
|
231
|
+
if (typeof sessionTarget === 'function') {
|
|
232
|
+
const isClass = /^class\s/.test(Function.prototype.toString.call(sessionTarget));
|
|
233
|
+
if (isClass) {
|
|
234
|
+
providers.push(sessionTarget);
|
|
235
|
+
providers.push({ provide: REPORT_SESSION_PROVIDER, useExisting: sessionTarget });
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
providers.push({ provide: REPORT_SESSION_CONTEXT, useFactory: sessionTarget });
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
providers.push({ provide: REPORT_SESSION_CONTEXT, useValue: sessionTarget });
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return makeEnvironmentProviders(providers);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Original advanced config path — unchanged behavior.
|
|
249
|
+
*/
|
|
250
|
+
function provideBwaysReportFromOptions(options, features) {
|
|
129
251
|
const config = { ...DEFAULT_CONFIG, ...options };
|
|
130
252
|
for (const feature of features) {
|
|
131
253
|
if (feature.ɵconfig) {
|
|
@@ -142,6 +264,14 @@ export function provideBwaysReport(options = {}, ...features) {
|
|
|
142
264
|
useValue: () => {
|
|
143
265
|
const registry = inject(ComponentRegistry);
|
|
144
266
|
registerBuiltinComponents(registry);
|
|
267
|
+
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
|
268
|
+
window.addEventListener('wheel', () => {
|
|
269
|
+
const activeEl = document.activeElement;
|
|
270
|
+
if (activeEl instanceof HTMLInputElement && activeEl.type === 'number') {
|
|
271
|
+
activeEl.blur();
|
|
272
|
+
}
|
|
273
|
+
}, { passive: true });
|
|
274
|
+
}
|
|
145
275
|
},
|
|
146
276
|
},
|
|
147
277
|
];
|
|
@@ -225,4 +355,4 @@ export const provideBwaysReporting = provideBwaysReport;
|
|
|
225
355
|
export const provideReporting = provideBwaysReport;
|
|
226
356
|
/** Semantic alias for BWays report providers */
|
|
227
357
|
export const bwaysReportProviders = provideBwaysReport;
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1yZXBvcnRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcm92aWRlLXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEdBR3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGdCQUFnQixHQUVqQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEdBR3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxFQUNoQyxxQkFBcUIsRUFDckIsb0NBQW9DLEVBQ3BDLDJCQUEyQixHQUM1QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNFLG9DQUFvQztBQUNwQyxNQUFNLGNBQWMsR0FBb0I7SUFDdEMsZUFBZSxFQUFFLEVBQUU7SUFDbkIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsY0FBYyxFQUFFLEtBQUs7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LElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsT0FBTyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDO0FBRXhELHVEQUF1RDtBQUN2RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQUVuRCxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcG9ydGluZyBsaWJyYXJ5IHJvb3QgcHJvdmlkZXIgZnVuY3Rpb24gYW5kIGZlYXR1cmUgZnVuY3Rpb25zLlxuICpcbiAqIENvbmZpZ3VyZXMgdGhlIGxpYnJhcnksIGl0cyB0b2tlbnMsIGFuZCByZWdpc3RlcnMgYnVpbHQtaW4gcHJpbWl0aXZlcy5cbiAqL1xuXG5pbXBvcnQge1xuICBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIGluamVjdCxcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICBQcm92aWRlcixcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDSEFSVF9DT01QT05FTlQsXG4gIEdSSURfQ09NUE9ORU5ULFxuICBSRVBPUlRJTkdfQ09ORklHLFxuICBSZXBvcnRpbmdDb25maWcsXG59IGZyb20gJy4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge1xuICBSRVBPUlRfU0VTU0lPTl9DT05URVhULFxuICBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUixcbiAgU2Vzc2lvbkNvbnRleHRQcm92aWRlcixcbiAgU2Vzc2lvbkNvbnRleHRTb3VyY2UsXG59IGZyb20gJy4vY29yZS90b2tlbnMvc2Vzc2lvbi1jb250ZXh0LnRva2VuJztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvZGF0YS1zb3VyY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVByb3ZpZGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvbWFzdGVyLWRhdGEucHJvdmlkZXInO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvcmVwb3J0LXBlcnNpc3RlbmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydExvb2t1cEFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9sb29rdXAuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgSHR0cFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgSHR0cFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gIEh0dHBNYXN0ZXJEYXRhQWRhcHRlcixcbiAgTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBNb2NrUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG59IGZyb20gJy4vZGF0YS1hY2Nlc3MvYWRhcHRlcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVnaXN0cnkgfSBmcm9tICcuL2NvcmUvcmVnaXN0cnkvY29tcG9uZW50LXJlZ2lzdHJ5JztcbmltcG9ydCB7IHJlZ2lzdGVyQnVpbHRpbkNvbXBvbmVudHMgfSBmcm9tICcuL3ByaW1pdGl2ZXMvcmVnaXN0ZXItYnVpbHRpbnMnO1xuXG4vKiogRGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcy4gKi9cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBSZXBvcnRpbmdDb25maWcgPSB7XG4gIGRlZmF1bHRQYWdlU2l6ZTogMjUsXG4gIGRhdGVGb3JtYXQ6ICdkZC9NTS95eXl5JyxcbiAgZW5hYmxlRGVzaWduZXI6IGZhbHNlLFxuICBzY2hlbWFWZXJzaW9uOiAxLFxuICBsb29rdXBUaW1lb3V0TXM6IDMwMDAwMCxcbn07XG5cbi8qKlxuICogS2luZHMgb2YgcmVwb3J0aW5nIGZlYXR1cmVzIGF2YWlsYWJsZSBpbiBgcHJvdmlkZUJ3YXlzUmVwb3J0YC5cbiAqL1xuZXhwb3J0IGVudW0gUmVwb3J0aW5nRmVhdHVyZUtpbmQge1xuICBIdHRwQWRhcHRlcnMgPSAwLFxuICBMb2NhbFN0b3JhZ2UgPSAxLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmZWF0dXJlIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBgcHJvdmlkZUJ3YXlzUmVwb3J0KC4uLilgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydGluZ0ZlYXR1cmU8S2luZFQgZXh0ZW5kcyBSZXBvcnRpbmdGZWF0dXJlS2luZCA9IFJlcG9ydGluZ0ZlYXR1cmVLaW5kPiB7XG4gIMm1a2luZDogS2luZFQ7XG4gIMm1Y29uZmlnPzogUGFydGlhbDxSZXBvcnRpbmdDb25maWc+O1xuICDJtXByb3ZpZGVyczogUHJvdmlkZXJbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBidWlsdC1pbiBIVFRQIGFkYXB0ZXJzIHZpYSBgd2l0aEh0dHBBZGFwdGVycyguLi4pYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQWRhcHRlcnNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIGJhY2tlbmQgcmVwb3J0aW5nIFJFU1QgQVBJIGVuZHBvaW50cy5cbiAgICogQGV4YW1wbGUgJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGkvcmVwb3J0aW5nJ1xuICAgKi9cbiAgYXBpQmFzZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGRhdGFiYXNlIGxvb2t1cCBxdWVyaWVzLlxuICAgKiBEZWZhdWx0cyB0byAzMDAwMDBtcyAoNSBtaW51dGVzKS5cbiAgICovXG4gIGxvb2t1cFRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBidWlsdC1pbiBIVFRQIGFkYXB0ZXJzIGZvciBiYWNrZW5kIGV4ZWN1dGlvbiwgcGVyc2lzdGVuY2UsXG4gKiBzY2hlbWEgZGlzY292ZXJ5LCBsb29rdXAsIGFuZCBtYXN0ZXIgZGF0YSBxdWVyaWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlUmVwb3J0aW5nKFxuICogICB7IGRlZmF1bHRQYWdlU2l6ZTogNTAgfSxcbiAqICAgd2l0aEh0dHBBZGFwdGVycyh7IGFwaUJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZycgfSlcbiAqIClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEh0dHBBZGFwdGVycyhcbiAgb3B0aW9uczogSHR0cEFkYXB0ZXJzT3B0aW9uc1xuKTogUmVwb3J0aW5nRmVhdHVyZTxSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnM+IHtcbiAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmFwaUJhc2VVcmwgfHwgdHlwZW9mIG9wdGlvbnMuYXBpQmFzZVVybCAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5hcGlCYXNlVXJsLnRyaW0oKSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgW2J3YXlzLXJlcG9ydF0gXCJhcGlCYXNlVXJsXCIgaXMgcmVxdWlyZWQgd2hlbiBjb25maWd1cmluZyB3aXRoSHR0cEFkYXB0ZXJzKCkuIGAgK1xuICAgICAgYFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgYmFja2VuZCBVUkwsIGUuZy4gd2l0aEh0dHBBZGFwdGVycyh7IGFwaUJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZycgfSlgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuVXJsID0gb3B0aW9ucy5hcGlCYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpO1xuXG4gIHJldHVybiB7XG4gICAgybVraW5kOiBSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnMsXG4gICAgybVjb25maWc6IHtcbiAgICAgIGFwaUJhc2VVcmw6IGNsZWFuVXJsLFxuICAgICAgLi4uKG9wdGlvbnMubG9va3VwVGltZW91dE1zID8geyBsb29rdXBUaW1lb3V0TXM6IG9wdGlvbnMubG9va3VwVGltZW91dE1zIH0gOiB7fSksXG4gICAgfSxcbiAgICDJtXByb3ZpZGVyczogW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSRVBPUlRJTkdfQ09ORklHLFxuICAgICAgICB1c2VWYWx1ZToge1xuICAgICAgICAgIGFwaUJhc2VVcmw6IGNsZWFuVXJsLFxuICAgICAgICAgIC4uLihvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyA/IHsgbG9va3VwVGltZW91dE1zOiBvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLFxuICAgICAgICB1c2VDbGFzczogSHR0cE1hc3RlckRhdGFBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vKipcbiAqIFplcm8tYmFja2VuZCBzYW5kYm94IG1vZGUgdXNpbmcgYnJvd3NlciBMb2NhbFN0b3JhZ2UgZm9yIHJlcG9ydCBkZWZpbml0aW9uc1xuICogYW5kIG1vY2sgcmVhbGlzdGljIGRhdGFzZXRzIGZvciBxdWVyeSBleGVjdXRpb24uXG4gKlxuICogSWRlYWwgZm9yIGxvY2FsIGRldmVsb3BtZW50LCBwcm90b3R5cGluZywgYW5kIG9mZmxpbmUgdGVzdGluZyB3aXRob3V0IHNwaW5uaW5nIHVwIGJhY2tlbmRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlUmVwb3J0aW5nKHdpdGhMb2NhbFN0b3JhZ2UoKSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aExvY2FsU3RvcmFnZSgpOiBSZXBvcnRpbmdGZWF0dXJlPFJlcG9ydGluZ0ZlYXR1cmVLaW5kLkxvY2FsU3RvcmFnZT4ge1xuICByZXR1cm4ge1xuICAgIMm1a2luZDogUmVwb3J0aW5nRmVhdHVyZUtpbmQuTG9jYWxTdG9yYWdlLFxuICAgIMm1cHJvdmlkZXJzOiBbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IExvY2FsU3RvcmFnZVJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogTW9ja1JlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vKiogQWxpYXMgZm9yIHdpdGhMb2NhbFN0b3JhZ2UgKi9cbmV4cG9ydCBjb25zdCB3aXRoTW9ja0FkYXB0ZXJzID0gd2l0aExvY2FsU3RvcmFnZTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBwcm92aWRlQndheXNSZXBvcnQoKWAgKGFuZCBgcHJvdmlkZVJlcG9ydGluZygpYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8UmVwb3J0aW5nQ29uZmlnPiB7XG4gIC8qKlxuICAgKiBUaGUgQW5ndWxhciBjb21wb25lbnQgdG8gdXNlIGZvciByZW5kZXJpbmcgcmVwb3J0IHJlc3VsdCBncmlkcy5cbiAgICogQldheXMtZ3JpZCBpcyB0aGUgcmVjb21tZW5kZWQgZGVmYXVsdC4gSG9zdCBjYW4gcHJvdmlkZSBhbnkgZ3JpZCBjb21wb25lbnQuXG4gICAqL1xuICBncmlkQ29tcG9uZW50PzogVHlwZTx1bmtub3duPjtcblxuICAvKipcbiAgICogVGhlIEFuZ3VsYXIgY29tcG9uZW50IHRvIHVzZSBmb3IgcmVuZGVyaW5nIHJlcG9ydCB2aXN1YWwgY2hhcnRzLlxuICAgKiBIb3N0IGNhbiBwcm92aWRlIHRoZWlyIHByZWZlcnJlZCBjaGFydCBjb21wb25lbnQsIG9yIHVzZSB0aGUgYnVpbHQtaW4gU1ZHIGNoYXJ0cy5cbiAgICovXG4gIGNoYXJ0Q29tcG9uZW50PzogVHlwZTx1bmtub3duPjtcblxuICAvKiogSG9zdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBkYXRhIHNvdXJjZSBhZGFwdGVyLiAqL1xuICBkYXRhU291cmNlQWRhcHRlcj86IFR5cGU8UmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1hc3RlciBkYXRhIHByb3ZpZGVyLiAqL1xuICBtYXN0ZXJEYXRhUHJvdmlkZXI/OiBUeXBlPE1hc3RlckRhdGFQcm92aWRlcj47XG5cbiAgLyoqIEhvc3QncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGVyc2lzdGVuY2UgYWRhcHRlci4gKi9cbiAgcGVyc2lzdGVuY2VBZGFwdGVyPzogVHlwZTxSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNjaGVtYSBkaXNjb3ZlcnkgYWRhcHRlci4gKi9cbiAgc2NoZW1hRGlzY292ZXJ5QWRhcHRlcj86IFR5cGU8UmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcj47XG5cbiAgLyoqIEhvc3QncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbG9va3VwIGFkYXB0ZXIuICovXG4gIGxvb2t1cEFkYXB0ZXI/OiBUeXBlPFJlcG9ydExvb2t1cEFkYXB0ZXI+O1xuXG4gIC8qKlxuICAgKiBJbmxpbmUgc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgb3IgZmFjdG9yeSBmdW5jdGlvbjpcbiAgICogZS5nLiBgc2Vzc2lvbjogKCkgPT4gKHsgYnJhbmNoSWQ6IGF1dGguYnJhbmNoSWQoKSwgdXNlcjogYXV0aC51c2VyKCkgfSlgXG4gICAqL1xuICBzZXNzaW9uPzogU2Vzc2lvbkNvbnRleHRTb3VyY2UgfCAoKCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXG4gIC8qKlxuICAgKiBIb3N0IGFwcGxpY2F0aW9uJ3Mgc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgKGUuZy4geyBicmFuY2hJZDogMSwgY29tcGFueUlkOiAxMCwgdXNlcklkOiAndXNyLTEnIH0pLlxuICAgKi9cbiAgc2Vzc2lvbkNvbnRleHQ/OiBTZXNzaW9uQ29udGV4dFNvdXJjZTtcblxuICAvKipcbiAgICogSG9zdCBhcHBsaWNhdGlvbiBzZXJ2aWNlIGNsYXNzIGltcGxlbWVudGluZyBgU2Vzc2lvbkNvbnRleHRQcm92aWRlcmAuXG4gICAqL1xuICBzZXNzaW9uQ29udGV4dFByb3ZpZGVyPzogVHlwZTxTZXNzaW9uQ29udGV4dFByb3ZpZGVyPjtcblxuICAvKipcbiAgICogRmFjdG9yeSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBTZXNzaW9uQ29udGV4dFNvdXJjZSB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGNvbnRleHQuXG4gICAqL1xuICBzZXNzaW9uQ29udGV4dEZhY3Rvcnk/OiAoKSA9PiBTZXNzaW9uQ29udGV4dFNvdXJjZTtcbn1cblxuLyoqIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIGFsdGVybmF0aXZlIG5hbWluZyBhbGlhc2VzICovXG5leHBvcnQgdHlwZSBQcm92aWRlUmVwb3J0aW5nT3B0aW9ucyA9IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnM7XG5leHBvcnQgdHlwZSBQcm92aWRlQndheXNSZXBvcnRpbmdPcHRpb25zID0gUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9ucztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgQldheXMtUmVwb3J0IGxpYnJhcnkgdG8gdGhlIEFuZ3VsYXIgYXBwbGljYXRpb24uXG4gKlxuICogU3VwcG9ydHMgbW9kZXJuIGlkaW9tYXRpYyBmZWF0dXJlIGZ1bmN0aW9ucywgZS5nLjpcbiAqIGBwcm92aWRlUmVwb3J0aW5nKHsgYXBpQmFzZVVybDogJy9hcGkvcmVwb3J0aW5nJyB9KWBcbiAqIG9yIHplcm8tYmFja2VuZCBzYW5kYm94IG1vZGU6XG4gKiBgcHJvdmlkZVJlcG9ydGluZyh3aXRoTG9jYWxTdG9yYWdlKCkpYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBhbmQgYWRhcHRlciBpbXBsZW1lbnRhdGlvbnMuXG4gKiBAcGFyYW0gZmVhdHVyZXMgLSBPcHRpb25hbCBmZWF0dXJlcyBsaWtlIGB3aXRoSHR0cEFkYXB0ZXJzKC4uLilgIG9yIGB3aXRoTG9jYWxTdG9yYWdlKClgLlxuICogQHJldHVybnMgRW52aXJvbm1lbnQgcHJvdmlkZXJzIGZvciB0aGUgcmVwb3J0aW5nIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQndheXNSZXBvcnQoXG4gIG9wdGlvbnM6IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnMgPSB7fSxcbiAgLi4uZmVhdHVyZXM6IFJlcG9ydGluZ0ZlYXR1cmVbXVxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICBjb25zdCBjb25maWc6IFJlcG9ydGluZ0NvbmZpZyA9IHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLm9wdGlvbnMgfTtcbiAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgaWYgKGZlYXR1cmUuybVjb25maWcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCBmZWF0dXJlLsm1Y29uZmlnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbmZpZy5hcGlCYXNlVXJsKSB7XG4gICAgY29uZmlnLmFwaUJhc2VVcmwgPSBjb25maWcuYXBpQmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgfVxuXG4gIGNvbnN0IHByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlVmFsdWU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuICAgICAgICByZWdpc3RlckJ1aWx0aW5Db21wb25lbnRzKHJlZ2lzdHJ5KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCBoYXNIdHRwRmVhdHVyZSA9IGZlYXR1cmVzLnNvbWUoKGYpID0+IGYuybVraW5kID09PSBSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnMpO1xuICBjb25zdCBoYXNMb2NhbEZlYXR1cmUgPSBmZWF0dXJlcy5zb21lKChmKSA9PiBmLsm1a2luZCA9PT0gUmVwb3J0aW5nRmVhdHVyZUtpbmQuTG9jYWxTdG9yYWdlKTtcblxuICAvLyBBcHBlbmQgZmVhdHVyZSBwcm92aWRlcnMgKGV4Y2x1ZGluZyBzdGFuZGFsb25lIFJFUE9SVElOR19DT05GSUcgc28gbWVyZ2VkIGNvbmZpZyB3aW5zKVxuICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmVhdHVyZXMpIHtcbiAgICBjb25zdCBub25Db25maWdQcm92aWRlcnMgPSBmZWF0dXJlLsm1cHJvdmlkZXJzLmZpbHRlcihcbiAgICAgIChwKSA9PiAhKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiBwICE9PSBudWxsICYmICdwcm92aWRlJyBpbiBwICYmIHAucHJvdmlkZSA9PT0gUkVQT1JUSU5HX0NPTkZJRylcbiAgICApO1xuICAgIHByb3ZpZGVycy5wdXNoKC4uLm5vbkNvbmZpZ1Byb3ZpZGVycyk7XG4gIH1cblxuICAvLyBVbmlmaWVkIG1lcmdlZCBjb25maWd1cmF0aW9uXG4gIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUSU5HX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9KTtcblxuICAvLyBBdXRvLXByb3Zpc2lvbiBIVFRQIGFkYXB0ZXJzIGlmIGFwaUJhc2VVcmwgd2FzIHN1cHBsaWVkIGFzIGEgMS1saW5lIG9wdGlvblxuICBpZiAoIWhhc0h0dHBGZWF0dXJlICYmICFoYXNMb2NhbEZlYXR1cmUgJiYgb3B0aW9ucy5hcGlCYXNlVXJsKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goXG4gICAgICB7IHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5kYXRhU291cmNlQWRhcHRlciA/PyBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5wZXJzaXN0ZW5jZUFkYXB0ZXIgPz8gSHR0cFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciB9LFxuICAgICAgeyBwcm92aWRlOiBNYXN0ZXJEYXRhUHJvdmlkZXIsIHVzZUNsYXNzOiBvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlciA/PyBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciA/PyBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9LFxuICAgICAgeyBwcm92aWRlOiBSZXBvcnRMb29rdXBBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5sb29rdXBBZGFwdGVyID8/IEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyIH1cbiAgICApO1xuICB9IGVsc2UgaWYgKCFoYXNIdHRwRmVhdHVyZSAmJiAhaGFzTG9jYWxGZWF0dXJlKSB7XG4gICAgLy8gSWYgbm8gYmFja2VuZCBhcGlCYXNlVXJsIGFuZCBubyBmZWF0dXJlIHBhc3NlZCwgZmFsbGJhY2sgdG8gemVyby1iYWNrZW5kIHNhbmRib3ggbW9kZVxuICAgIHByb3ZpZGVycy5wdXNoKFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLnBlcnNpc3RlbmNlQWRhcHRlciA/PyBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIgPz8gTW9ja1JlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciA/PyBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLmxvb2t1cEFkYXB0ZXIgPz8gSHR0cFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBNYXN0ZXJEYXRhUHJvdmlkZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlciA/PyBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBvdmVycmlkZXNcbiAgaWYgKG9wdGlvbnMuZ3JpZENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogR1JJRF9DT01QT05FTlQsIHVzZVZhbHVlOiBvcHRpb25zLmdyaWRDb21wb25lbnQgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5jaGFydENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogQ0hBUlRfQ09NUE9ORU5ULCB1c2VWYWx1ZTogb3B0aW9ucy5jaGFydENvbXBvbmVudCB9KTtcbiAgfVxuXG4gIC8vIEV4cGxpY2l0IGFkYXB0ZXIgb3ZlcnJpZGVzIGFsd2F5cyB3aW5cbiAgaWYgKG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5kYXRhU291cmNlQWRhcHRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLCB1c2VDbGFzczogb3B0aW9ucy5tYXN0ZXJEYXRhUHJvdmlkZXIgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMucGVyc2lzdGVuY2VBZGFwdGVyIH0pO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmxvb2t1cEFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLmxvb2t1cEFkYXB0ZXIgfSk7XG4gIH1cblxuICAvLyBEeW5hbWljIFNlc3Npb24gQ29udGV4dCBQcm92aWRlcnNcbiAgaWYgKG9wdGlvbnMuc2Vzc2lvbkNvbnRleHRQcm92aWRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fUFJPVklERVIsIHVzZUNsYXNzOiBvcHRpb25zLnNlc3Npb25Db250ZXh0UHJvdmlkZXIgfSk7XG4gIH1cblxuICAvLyBGbGV4aWJsZSBpbmxpbmUgc2Vzc2lvbiBzeW50YXg6IHNlc3Npb246ICgpID0+ICh7IC4uLiB9KVxuICBpZiAodHlwZW9mIG9wdGlvbnMuc2Vzc2lvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlRmFjdG9yeTogb3B0aW9ucy5zZXNzaW9uIGFzICgpID0+IGFueSB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnNlc3Npb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlVmFsdWU6IG9wdGlvbnMuc2Vzc2lvbiB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnNlc3Npb25Db250ZXh0RmFjdG9yeSkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlRmFjdG9yeTogb3B0aW9ucy5zZXNzaW9uQ29udGV4dEZhY3RvcnkgfSk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5zZXNzaW9uQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9DT05URVhULCB1c2VWYWx1ZTogb3B0aW9ucy5zZXNzaW9uQ29udGV4dCB9KTtcbiAgfVxuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cblxuLyoqIEFsaWFzIGZvciBwcm92aWRlQndheXNSZXBvcnQgKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlQndheXNSZXBvcnRpbmcgPSBwcm92aWRlQndheXNSZXBvcnQ7XG5cbi8qKiBCYWNrd2FyZC1jb21wYXRpYmxlIGFsaWFzIGZvciBwcm92aWRlQndheXNSZXBvcnQgKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlUmVwb3J0aW5nID0gcHJvdmlkZUJ3YXlzUmVwb3J0O1xuXG4vKiogU2VtYW50aWMgYWxpYXMgZm9yIEJXYXlzIHJlcG9ydCBwcm92aWRlcnMgKi9cbmV4cG9ydCBjb25zdCBid2F5c1JlcG9ydFByb3ZpZGVycyA9IHByb3ZpZGVCd2F5c1JlcG9ydDtcbiJdfQ==
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1yZXBvcnRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcm92aWRlLXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEdBR3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGdCQUFnQixHQUVqQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEdBR3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxFQUNoQyxxQkFBcUIsRUFDckIsb0NBQW9DLEVBQ3BDLDJCQUEyQixFQUMzQiw4QkFBOEIsRUFDOUIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHNCQUFzQixHQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFFTCxvQkFB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QUFtQztBQUNuQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxrQkFBa0IsQ0FBQztBQUV4RCx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7QUFFbkQsZ0RBQWdEO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnRpbmcgbGlicmFyeSByb290IHByb3ZpZGVyIGZ1bmN0aW9uIGFuZCBmZWF0dXJlIGZ1bmN0aW9ucy5cbiAqXG4gKiBDb25maWd1cmVzIHRoZSBsaWJyYXJ5LCBpdHMgdG9rZW5zLCBhbmQgcmVnaXN0ZXJzIGJ1aWx0LWluIHByaW1pdGl2ZXMuXG4gKi9cblxuaW1wb3J0IHtcbiAgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBpbmplY3QsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgUHJvdmlkZXIsXG4gIFR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ0hBUlRfQ09NUE9ORU5ULFxuICBHUklEX0NPTVBPTkVOVCxcbiAgUkVQT1JUSU5HX0NPTkZJRyxcbiAgUmVwb3J0aW5nQ29uZmlnLFxufSBmcm9tICcuL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHtcbiAgUkVQT1JUX1NFU1NJT05fQ09OVEVYVCxcbiAgUkVQT1JUX1NFU1NJT05fUFJPVklERVIsXG4gIFNlc3Npb25Db250ZXh0UHJvdmlkZXIsXG4gIFNlc3Npb25Db250ZXh0U291cmNlLFxufSBmcm9tICcuL2NvcmUvdG9rZW5zL3Nlc3Npb24tY29udGV4dC50b2tlbic7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2RhdGEtc291cmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IE1hc3RlckRhdGFQcm92aWRlciB9IGZyb20gJy4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL21hc3Rlci1kYXRhLnByb3ZpZGVyJztcbmltcG9ydCB7IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciB9IGZyb20gJy4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3JlcG9ydC1wZXJzaXN0ZW5jZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvc2NoZW1hLWRpc2NvdmVyeS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRMb29rdXBBZGFwdGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvbG9va3VwLmNvbnRyYWN0JztcbmltcG9ydCB7XG4gIEh0dHBSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgSHR0cFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgSHR0cFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gIEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIsXG4gIExvY2FsU3RvcmFnZVJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgTW9ja1JlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICBFbmRwb2ludFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gIEVuZHBvaW50RGF0YVNvdXJjZUFkYXB0ZXIsXG4gIEVuZHBvaW50TG9va3VwQWRhcHRlcixcbiAgRW5kcG9pbnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gIEVuZHBvaW50TWFzdGVyRGF0YUFkYXB0ZXIsXG4gIEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMsXG59IGZyb20gJy4vZGF0YS1hY2Nlc3MvYWRhcHRlcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVnaXN0cnkgfSBmcm9tICcuL2NvcmUvcmVnaXN0cnkvY29tcG9uZW50LXJlZ2lzdHJ5JztcbmltcG9ydCB7IHJlZ2lzdGVyQnVpbHRpbkNvbXBvbmVudHMgfSBmcm9tICcuL3ByaW1pdGl2ZXMvcmVnaXN0ZXItYnVpbHRpbnMnO1xuaW1wb3J0IHtcbiAgQndheXNSZXBvcnRDb25maWcsXG4gIG5vcm1hbGl6ZUJ3YXlzQ29uZmlnLFxufSBmcm9tICcuL2NvcmUvY29uZmlnL2J3YXlzLXJlcG9ydC1jb25maWcnO1xuXG4vKiogRGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcy4gKi9cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBSZXBvcnRpbmdDb25maWcgPSB7XG4gIGRlZmF1bHRQYWdlU2l6ZTogMjUsXG4gIGRhdGVGb3JtYXQ6ICdkZC9NTS95eXl5JyxcbiAgZW5hYmxlRGVzaWduZXI6IGZhbHNlLFxuICBzY2hlbWFWZXJzaW9uOiAxLFxuICBsb29rdXBUaW1lb3V0TXM6IDMwMDAwMCxcbn07XG5cbi8qKlxuICogS2luZHMgb2YgcmVwb3J0aW5nIGZlYXR1cmVzIGF2YWlsYWJsZSBpbiBgcHJvdmlkZUJ3YXlzUmVwb3J0YC5cbiAqL1xuZXhwb3J0IGVudW0gUmVwb3J0aW5nRmVhdHVyZUtpbmQge1xuICBIdHRwQWRhcHRlcnMgPSAwLFxuICBMb2NhbFN0b3JhZ2UgPSAxLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmZWF0dXJlIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBgcHJvdmlkZUJ3YXlzUmVwb3J0KC4uLilgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydGluZ0ZlYXR1cmU8S2luZFQgZXh0ZW5kcyBSZXBvcnRpbmdGZWF0dXJlS2luZCA9IFJlcG9ydGluZ0ZlYXR1cmVLaW5kPiB7XG4gIMm1a2luZDogS2luZFQ7XG4gIMm1Y29uZmlnPzogUGFydGlhbDxSZXBvcnRpbmdDb25maWc+O1xuICDJtXByb3ZpZGVyczogUHJvdmlkZXJbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBidWlsdC1pbiBIVFRQIGFkYXB0ZXJzIHZpYSBgd2l0aEh0dHBBZGFwdGVycyguLi4pYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQWRhcHRlcnNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIGJhY2tlbmQgcmVwb3J0aW5nIFJFU1QgQVBJIGVuZHBvaW50cy5cbiAgICogQGV4YW1wbGUgJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGkvcmVwb3J0aW5nJ1xuICAgKi9cbiAgYXBpQmFzZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGRhdGFiYXNlIGxvb2t1cCBxdWVyaWVzLlxuICAgKiBEZWZhdWx0cyB0byAzMDAwMDBtcyAoNSBtaW51dGVzKS5cbiAgICovXG4gIGxvb2t1cFRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBidWlsdC1pbiBIVFRQIGFkYXB0ZXJzIGZvciBiYWNrZW5kIGV4ZWN1dGlvbiwgcGVyc2lzdGVuY2UsXG4gKiBzY2hlbWEgZGlzY292ZXJ5LCBsb29rdXAsIGFuZCBtYXN0ZXIgZGF0YSBxdWVyaWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlUmVwb3J0aW5nKFxuICogICB7IGRlZmF1bHRQYWdlU2l6ZTogNTAgfSxcbiAqICAgd2l0aEh0dHBBZGFwdGVycyh7IGFwaUJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZycgfSlcbiAqIClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEh0dHBBZGFwdGVycyhcbiAgb3B0aW9uczogSHR0cEFkYXB0ZXJzT3B0aW9uc1xuKTogUmVwb3J0aW5nRmVhdHVyZTxSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnM+IHtcbiAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmFwaUJhc2VVcmwgfHwgdHlwZW9mIG9wdGlvbnMuYXBpQmFzZVVybCAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5hcGlCYXNlVXJsLnRyaW0oKSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgW2J3YXlzLXJlcG9ydF0gXCJhcGlCYXNlVXJsXCIgaXMgcmVxdWlyZWQgd2hlbiBjb25maWd1cmluZyB3aXRoSHR0cEFkYXB0ZXJzKCkuIGAgK1xuICAgICAgYFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgYmFja2VuZCBVUkwsIGUuZy4gd2l0aEh0dHBBZGFwdGVycyh7IGFwaUJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZycgfSlgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuVXJsID0gb3B0aW9ucy5hcGlCYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpO1xuXG4gIHJldHVybiB7XG4gICAgybVraW5kOiBSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnMsXG4gICAgybVjb25maWc6IHtcbiAgICAgIGFwaUJhc2VVcmw6IGNsZWFuVXJsLFxuICAgICAgLi4uKG9wdGlvbnMubG9va3VwVGltZW91dE1zID8geyBsb29rdXBUaW1lb3V0TXM6IG9wdGlvbnMubG9va3VwVGltZW91dE1zIH0gOiB7fSksXG4gICAgfSxcbiAgICDJtXByb3ZpZGVyczogW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSRVBPUlRJTkdfQ09ORklHLFxuICAgICAgICB1c2VWYWx1ZToge1xuICAgICAgICAgIGFwaUJhc2VVcmw6IGNsZWFuVXJsLFxuICAgICAgICAgIC4uLihvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyA/IHsgbG9va3VwVGltZW91dE1zOiBvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLFxuICAgICAgICB1c2VDbGFzczogSHR0cE1hc3RlckRhdGFBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vKipcbiAqIFplcm8tYmFja2VuZCBzYW5kYm94IG1vZGUgdXNpbmcgYnJvd3NlciBMb2NhbFN0b3JhZ2UgZm9yIHJlcG9ydCBkZWZpbml0aW9uc1xuICogYW5kIG1vY2sgcmVhbGlzdGljIGRhdGFzZXRzIGZvciBxdWVyeSBleGVjdXRpb24uXG4gKlxuICogSWRlYWwgZm9yIGxvY2FsIGRldmVsb3BtZW50LCBwcm90b3R5cGluZywgYW5kIG9mZmxpbmUgdGVzdGluZyB3aXRob3V0IHNwaW5uaW5nIHVwIGJhY2tlbmRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlUmVwb3J0aW5nKHdpdGhMb2NhbFN0b3JhZ2UoKSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aExvY2FsU3RvcmFnZSgpOiBSZXBvcnRpbmdGZWF0dXJlPFJlcG9ydGluZ0ZlYXR1cmVLaW5kLkxvY2FsU3RvcmFnZT4ge1xuICByZXR1cm4ge1xuICAgIMm1a2luZDogUmVwb3J0aW5nRmVhdHVyZUtpbmQuTG9jYWxTdG9yYWdlLFxuICAgIMm1cHJvdmlkZXJzOiBbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IExvY2FsU3RvcmFnZVJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogTW9ja1JlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vKiogQWxpYXMgZm9yIHdpdGhMb2NhbFN0b3JhZ2UgKi9cbmV4cG9ydCBjb25zdCB3aXRoTW9ja0FkYXB0ZXJzID0gd2l0aExvY2FsU3RvcmFnZTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBwcm92aWRlQndheXNSZXBvcnQoKWAgKGFuZCBgcHJvdmlkZVJlcG9ydGluZygpYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8UmVwb3J0aW5nQ29uZmlnPiB7XG4gIC8qKlxuICAgKiBUaGUgQW5ndWxhciBjb21wb25lbnQgdG8gdXNlIGZvciByZW5kZXJpbmcgcmVwb3J0IHJlc3VsdCBncmlkcy5cbiAgICogQldheXMtZ3JpZCBpcyB0aGUgcmVjb21tZW5kZWQgZGVmYXVsdC4gSG9zdCBjYW4gcHJvdmlkZSBhbnkgZ3JpZCBjb21wb25lbnQuXG4gICAqL1xuICBncmlkQ29tcG9uZW50PzogVHlwZTx1bmtub3duPjtcblxuICAvKipcbiAgICogVGhlIEFuZ3VsYXIgY29tcG9uZW50IHRvIHVzZSBmb3IgcmVuZGVyaW5nIHJlcG9ydCB2aXN1YWwgY2hhcnRzLlxuICAgKiBIb3N0IGNhbiBwcm92aWRlIHRoZWlyIHByZWZlcnJlZCBjaGFydCBjb21wb25lbnQsIG9yIHVzZSB0aGUgYnVpbHQtaW4gU1ZHIGNoYXJ0cy5cbiAgICovXG4gIGNoYXJ0Q29tcG9uZW50PzogVHlwZTx1bmtub3duPjtcblxuICAvKiogSG9zdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBkYXRhIHNvdXJjZSBhZGFwdGVyLiAqL1xuICBkYXRhU291cmNlQWRhcHRlcj86IFR5cGU8UmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1hc3RlciBkYXRhIHByb3ZpZGVyLiAqL1xuICBtYXN0ZXJEYXRhUHJvdmlkZXI/OiBUeXBlPE1hc3RlckRhdGFQcm92aWRlcj47XG5cbiAgLyoqIEhvc3QncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGVyc2lzdGVuY2UgYWRhcHRlci4gKi9cbiAgcGVyc2lzdGVuY2VBZGFwdGVyPzogVHlwZTxSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNjaGVtYSBkaXNjb3ZlcnkgYWRhcHRlci4gKi9cbiAgc2NoZW1hRGlzY292ZXJ5QWRhcHRlcj86IFR5cGU8UmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcj47XG5cbiAgLyoqIEhvc3QncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbG9va3VwIGFkYXB0ZXIuICovXG4gIGxvb2t1cEFkYXB0ZXI/OiBUeXBlPFJlcG9ydExvb2t1cEFkYXB0ZXI+O1xuXG4gIC8qKlxuICAgKiBJbmxpbmUgc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgb3IgZmFjdG9yeSBmdW5jdGlvbjpcbiAgICogZS5nLiBgc2Vzc2lvbjogKCkgPT4gKHsgYnJhbmNoSWQ6IGF1dGguYnJhbmNoSWQoKSwgdXNlcjogYXV0aC51c2VyKCkgfSlgXG4gICAqL1xuICBzZXNzaW9uPzogU2Vzc2lvbkNvbnRleHRTb3VyY2UgfCAoKCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXG4gIC8qKlxuICAgKiBIb3N0IGFwcGxpY2F0aW9uJ3Mgc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgKGUuZy4geyBicmFuY2hJZDogMSwgY29tcGFueUlkOiAxMCwgdXNlcklkOiAndXNyLTEnIH0pLlxuICAgKi9cbiAgc2Vzc2lvbkNvbnRleHQ/OiBTZXNzaW9uQ29udGV4dFNvdXJjZTtcblxuICAvKipcbiAgICogSG9zdCBhcHBsaWNhdGlvbiBzZXJ2aWNlIGNsYXNzIGltcGxlbWVudGluZyBgU2Vzc2lvbkNvbnRleHRQcm92aWRlcmAuXG4gICAqL1xuICBzZXNzaW9uQ29udGV4dFByb3ZpZGVyPzogVHlwZTxTZXNzaW9uQ29udGV4dFByb3ZpZGVyPjtcblxuICAvKipcbiAgICogRmFjdG9yeSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBTZXNzaW9uQ29udGV4dFNvdXJjZSB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGNvbnRleHQuXG4gICAqL1xuICBzZXNzaW9uQ29udGV4dEZhY3Rvcnk/OiAoKSA9PiBTZXNzaW9uQ29udGV4dFNvdXJjZTtcbn1cblxuLyoqIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIGFsdGVybmF0aXZlIG5hbWluZyBhbGlhc2VzICovXG5leHBvcnQgdHlwZSBQcm92aWRlUmVwb3J0aW5nT3B0aW9ucyA9IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnM7XG5leHBvcnQgdHlwZSBQcm92aWRlQndheXNSZXBvcnRpbmdPcHRpb25zID0gUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9ucztcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGRldGVjdCB0aGUgc2ltcGxpZmllZCBgQndheXNSZXBvcnRDb25maWdgIHNoYXBlLlxuICovXG5mdW5jdGlvbiBpc0J3YXlzUmVwb3J0Q29uZmlnKFxuICBhcmc6IEJ3YXlzUmVwb3J0Q29uZmlnIHwgUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9uc1xuKTogYXJnIGlzIEJ3YXlzUmVwb3J0Q29uZmlnIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJlxuICAgIGFyZyAhPT0gbnVsbCAmJlxuICAgICdzcEVuZHBvaW50JyBpbiBhcmcgJiZcbiAgICAndGFibGVzRW5kcG9pbnQnIGluIGFyZyAmJlxuICAgICdleGVjdXRlRW5kcG9pbnQnIGluIGFyZ1xuICApO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBCV2F5cy1SZXBvcnQgbGlicmFyeSB0byB0aGUgQW5ndWxhciBhcHBsaWNhdGlvbi5cbiAqXG4gKiAqKlNpbXBsZSBjb25maWcgKHJlY29tbWVuZGVkIGZvciBtb3N0IHByb2plY3RzKToqKlxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZUJ3YXlzUmVwb3J0KHtcbiAqICAgc3BFbmRwb2ludDogICAgICAnL2FwaS9yZXBvcnRpbmcvcHJvY2VkdXJlcycsXG4gKiAgIHRhYmxlc0VuZHBvaW50OiAgJy9hcGkvcmVwb3J0aW5nL3RhYmxlcycsXG4gKiAgIGV4ZWN1dGVFbmRwb2ludDogJy9hcGkvcmVwb3J0aW5nL2V4ZWN1dGUnLFxuICogICByZXBvcnRzRW5kcG9pbnQ6ICcvYXBpL3JlcG9ydGluZy9yZXBvcnRzJyxcbiAqICAgY29tcG9uZW50czogWydmb3JtSW5wdXRzJywgJ2FjdGlvbkJ1dHRvbnMnXSxcbiAqICAgc2Vzc2lvbjogKCkgPT4gaW5qZWN0KEF1dGhTZXJ2aWNlKS5zZXNzaW9uKCksXG4gKiB9KVxuICogYGBgXG4gKlxuICogKipBZHZhbmNlZCBjb25maWcgKGV4aXN0aW5nIGFkYXB0ZXIgcGF0dGVybik6KipcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHByb3ZpZGVCd2F5c1JlcG9ydChcbiAqICAgeyBhcGlCYXNlVXJsOiAnL2FwaS9yZXBvcnRpbmcnIH0sXG4gKiAgIHdpdGhIdHRwQWRhcHRlcnMoeyBhcGlCYXNlVXJsOiAnL2FwaS9yZXBvcnRpbmcnIH0pXG4gKiApXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEVpdGhlciBhIGBCd2F5c1JlcG9ydENvbmZpZ2AgKHNpbXBsZSkgb3IgYFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnNgIChhZHZhbmNlZCkuXG4gKiBAcGFyYW0gZmVhdHVyZXMgLSBPcHRpb25hbCBmZWF0dXJlcyBsaWtlIGB3aXRoSHR0cEFkYXB0ZXJzKC4uLilgIG9yIGB3aXRoTG9jYWxTdG9yYWdlKClgLlxuICogQHJldHVybnMgRW52aXJvbm1lbnQgcHJvdmlkZXJzIGZvciB0aGUgcmVwb3J0aW5nIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQndheXNSZXBvcnQoXG4gIG9wdGlvbnM6IEJ3YXlzUmVwb3J0Q29uZmlnIHwgUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9ucyA9IHt9IGFzIFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnMsXG4gIC4uLmZlYXR1cmVzOiBSZXBvcnRpbmdGZWF0dXJlW11cbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgLy8g4pSA4pSA4pSAIFNpbXBsZSBjb25maWcgcGF0aCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgaWYgKGlzQndheXNSZXBvcnRDb25maWcob3B0aW9ucykpIHtcbiAgICByZXR1cm4gcHJvdmlkZUJ3YXlzUmVwb3J0RnJvbVNpbXBsZUNvbmZpZyhvcHRpb25zKTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBBZHZhbmNlZCAvIGxlZ2FjeSBjb25maWcgcGF0aCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcmV0dXJuIHByb3ZpZGVCd2F5c1JlcG9ydEZyb21PcHRpb25zKG9wdGlvbnMsIGZlYXR1cmVzKTtcbn1cblxuLyoqXG4gKiBXaXJlcyB1cCBlbmRwb2ludC1iYXNlZCBhZGFwdGVycyBmcm9tIHRoZSBzaW1wbGlmaWVkIGBCd2F5c1JlcG9ydENvbmZpZ2AuXG4gKi9cbmZ1bmN0aW9uIHByb3ZpZGVCd2F5c1JlcG9ydEZyb21TaW1wbGVDb25maWcoY29uZmlnOiBCd2F5c1JlcG9ydENvbmZpZyk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUJ3YXlzQ29uZmlnKGNvbmZpZyk7XG5cbiAgY29uc3QgcmVwb3J0aW5nQ29uZmlnOiBSZXBvcnRpbmdDb25maWcgPSB7XG4gICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgZGVmYXVsdFBhZ2VTaXplOiBub3JtYWxpemVkLmRlZmF1bHRQYWdlU2l6ZSxcbiAgICBkYXRlRm9ybWF0OiBub3JtYWxpemVkLmRhdGVGb3JtYXQsXG4gICAgbG9va3VwVGltZW91dE1zOiBub3JtYWxpemVkLmxvb2t1cFRpbWVvdXRNcyxcbiAgICBlbmFibGVEZXNpZ25lcjogdHJ1ZSxcbiAgICBhbGxvd2VkQ2F0ZWdvcmllczogbm9ybWFsaXplZC5hbGxvd2VkQ2F0ZWdvcmllcyxcbiAgICBhdXRvUGFyYW1ldGVyOiBub3JtYWxpemVkLmF1dG9QYXJhbWV0ZXIsXG4gICAgcm91dGVCYXNlOiBub3JtYWxpemVkLnJvdXRlQmFzZSxcbiAgfTtcblxuICBjb25zdCBwcm92aWRlcnM6IFByb3ZpZGVyW10gPSBbXG4gICAgLy8gQnVpbHRpbiBjb21wb25lbnQgcmVnaXN0cmF0aW9uXG4gICAge1xuICAgICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZVZhbHVlOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gaW5qZWN0KENvbXBvbmVudFJlZ2lzdHJ5KTtcbiAgICAgICAgcmVnaXN0ZXJCdWlsdGluQ29tcG9uZW50cyhyZWdpc3RyeSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAnd2hlZWwnLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBhY3RpdmVFbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgIGlmIChhY3RpdmVFbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgYWN0aXZlRWwudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbC5ibHVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHBhc3NpdmU6IHRydWUgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcblxuICAgIC8vIENvcmUgY29uZmlndXJhdGlvblxuICAgIHsgcHJvdmlkZTogUkVQT1JUSU5HX0NPTkZJRywgdXNlVmFsdWU6IHJlcG9ydGluZ0NvbmZpZyB9LFxuXG4gICAgLy8gRW5kcG9pbnQgVVJMcyBmb3IgdGhlIGFkYXB0ZXJzXG4gICAge1xuICAgICAgcHJvdmlkZTogQldBWVNfUkVQT1JUX0VORFBPSU5UUyxcbiAgICAgIHVzZVZhbHVlOiB7XG4gICAgICAgIHNwRW5kcG9pbnQ6IG5vcm1hbGl6ZWQuc3BFbmRwb2ludCxcbiAgICAgICAgdGFibGVzRW5kcG9pbnQ6IG5vcm1hbGl6ZWQudGFibGVzRW5kcG9pbnQsXG4gICAgICAgIGV4ZWN1dGVFbmRwb2ludDogbm9ybWFsaXplZC5leGVjdXRlRW5kcG9pbnQsXG4gICAgICAgIGxvb2t1cEVuZHBvaW50OiBub3JtYWxpemVkLmxvb2t1cEVuZHBvaW50LFxuICAgICAgICByZXBvcnRzRW5kcG9pbnQ6IG5vcm1hbGl6ZWQucmVwb3J0c0VuZHBvaW50LFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgLy8gRW5kcG9pbnQtYmFzZWQgYWRhcHRlcnNcbiAgICB7IHByb3ZpZGU6IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsIHVzZUNsYXNzOiBFbmRwb2ludFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgfSxcbiAgICB7IHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB1c2VDbGFzczogRW5kcG9pbnREYXRhU291cmNlQWRhcHRlciB9LFxuICAgIHsgcHJvdmlkZTogUmVwb3J0TG9va3VwQWRhcHRlciwgdXNlQ2xhc3M6IEVuZHBvaW50TG9va3VwQWRhcHRlciB9LFxuICAgIHsgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLCB1c2VDbGFzczogRW5kcG9pbnRNYXN0ZXJEYXRhQWRhcHRlciB9LFxuXG4gICAgLy8gUGVyc2lzdGVuY2U6IHVzZSBlbmRwb2ludCBhZGFwdGVyIGlmIHJlcG9ydHNFbmRwb2ludCBpcyBzZXQsIG90aGVyd2lzZSBsb2NhbFN0b3JhZ2VcbiAgICB7XG4gICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICB1c2VDbGFzczogbm9ybWFsaXplZC5yZXBvcnRzRW5kcG9pbnRcbiAgICAgICAgPyBFbmRwb2ludFBlcnNpc3RlbmNlQWRhcHRlclxuICAgICAgICA6IExvY2FsU3RvcmFnZVJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICB9LFxuICBdO1xuXG4gIC8vIEdyaWQgLyBDaGFydCBvdmVycmlkZXNcbiAgaWYgKG5vcm1hbGl6ZWQuZ3JpZENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogR1JJRF9DT01QT05FTlQsIHVzZVZhbHVlOiBub3JtYWxpemVkLmdyaWRDb21wb25lbnQgfSk7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWQuY2hhcnRDb21wb25lbnQpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IENIQVJUX0NPTVBPTkVOVCwgdXNlVmFsdWU6IG5vcm1hbGl6ZWQuY2hhcnRDb21wb25lbnQgfSk7XG4gIH1cblxuICAvLyBTZXNzaW9uIGNvbnRleHQgLyBwcm92aWRlclxuICBjb25zdCBzZXNzaW9uVGFyZ2V0ID0gbm9ybWFsaXplZC5zZXNzaW9uUHJvdmlkZXIgPz8gbm9ybWFsaXplZC5zZXNzaW9uO1xuICBpZiAoc2Vzc2lvblRhcmdldCkge1xuICAgIGlmICh0eXBlb2Ygc2Vzc2lvblRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgaXNDbGFzcyA9IC9eY2xhc3NcXHMvLnRlc3QoRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2Vzc2lvblRhcmdldCkpO1xuICAgICAgaWYgKGlzQ2xhc3MpIHtcbiAgICAgICAgcHJvdmlkZXJzLnB1c2goc2Vzc2lvblRhcmdldCBhcyBUeXBlPGFueT4pO1xuICAgICAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJFUE9SVF9TRVNTSU9OX1BST1ZJREVSLCB1c2VFeGlzdGluZzogc2Vzc2lvblRhcmdldCBhcyBUeXBlPGFueT4gfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHVzZUZhY3Rvcnk6IHNlc3Npb25UYXJnZXQgYXMgKCkgPT4gYW55IH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHVzZVZhbHVlOiBzZXNzaW9uVGFyZ2V0IH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cblxuLyoqXG4gKiBPcmlnaW5hbCBhZHZhbmNlZCBjb25maWcgcGF0aCDigJQgdW5jaGFuZ2VkIGJlaGF2aW9yLlxuICovXG5mdW5jdGlvbiBwcm92aWRlQndheXNSZXBvcnRGcm9tT3B0aW9ucyhcbiAgb3B0aW9uczogUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9ucyxcbiAgZmVhdHVyZXM6IFJlcG9ydGluZ0ZlYXR1cmVbXVxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICBjb25zdCBjb25maWc6IFJlcG9ydGluZ0NvbmZpZyA9IHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLm9wdGlvbnMgfTtcbiAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgaWYgKGZlYXR1cmUuybVjb25maWcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCBmZWF0dXJlLsm1Y29uZmlnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbmZpZy5hcGlCYXNlVXJsKSB7XG4gICAgY29uZmlnLmFwaUJhc2VVcmwgPSBjb25maWcuYXBpQmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgfVxuXG4gIGNvbnN0IHByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlVmFsdWU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuICAgICAgICByZWdpc3RlckJ1aWx0aW5Db21wb25lbnRzKHJlZ2lzdHJ5KTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICd3aGVlbCcsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBhY3RpdmVFbC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsLmJsdXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgcGFzc2l2ZTogdHJ1ZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICBdO1xuXG4gIGNvbnN0IGhhc0h0dHBGZWF0dXJlID0gZmVhdHVyZXMuc29tZSgoZikgPT4gZi7JtWtpbmQgPT09IFJlcG9ydGluZ0ZlYXR1cmVLaW5kLkh0dHBBZGFwdGVycyk7XG4gIGNvbnN0IGhhc0xvY2FsRmVhdHVyZSA9IGZlYXR1cmVzLnNvbWUoKGYpID0+IGYuybVraW5kID09PSBSZXBvcnRpbmdGZWF0dXJlS2luZC5Mb2NhbFN0b3JhZ2UpO1xuXG4gIC8vIEFwcGVuZCBmZWF0dXJlIHByb3ZpZGVycyAoZXhjbHVkaW5nIHN0YW5kYWxvbmUgUkVQT1JUSU5HX0NPTkZJRyBzbyBtZXJnZWQgY29uZmlnIHdpbnMpXG4gIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuICAgIGNvbnN0IG5vbkNvbmZpZ1Byb3ZpZGVycyA9IGZlYXR1cmUuybVwcm92aWRlcnMuZmlsdGVyKFxuICAgICAgKHApID0+ICEodHlwZW9mIHAgPT09ICdvYmplY3QnICYmIHAgIT09IG51bGwgJiYgJ3Byb3ZpZGUnIGluIHAgJiYgcC5wcm92aWRlID09PSBSRVBPUlRJTkdfQ09ORklHKVxuICAgICk7XG4gICAgcHJvdmlkZXJzLnB1c2goLi4ubm9uQ29uZmlnUHJvdmlkZXJzKTtcbiAgfVxuXG4gIC8vIFVuaWZpZWQgbWVyZ2VkIGNvbmZpZ3VyYXRpb25cbiAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRJTkdfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0pO1xuXG4gIC8vIEF1dG8tcHJvdmlzaW9uIEhUVFAgYWRhcHRlcnMgaWYgYXBpQmFzZVVybCB3YXMgc3VwcGxpZWQgYXMgYSAxLWxpbmUgb3B0aW9uXG4gIGlmICghaGFzSHR0cEZlYXR1cmUgJiYgIWhhc0xvY2FsRmVhdHVyZSAmJiBvcHRpb25zLmFwaUJhc2VVcmwpIHtcbiAgICBwcm92aWRlcnMucHVzaChcbiAgICAgIHsgcHJvdmlkZTogUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLmRhdGFTb3VyY2VBZGFwdGVyID8/IEh0dHBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9LFxuICAgICAgeyBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLnBlcnNpc3RlbmNlQWRhcHRlciA/PyBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0sXG4gICAgICB7IHByb3ZpZGU6IE1hc3RlckRhdGFQcm92aWRlciwgdXNlQ2xhc3M6IG9wdGlvbnMubWFzdGVyRGF0YVByb3ZpZGVyID8/IEh0dHBNYXN0ZXJEYXRhQWRhcHRlciB9LFxuICAgICAgeyBwcm92aWRlOiBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5zY2hlbWFEaXNjb3ZlcnlBZGFwdGVyID8/IEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIH0sXG4gICAgICB7IHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLmxvb2t1cEFkYXB0ZXIgPz8gSHR0cFJlcG9ydExvb2t1cEFkYXB0ZXIgfVxuICAgICk7XG4gIH0gZWxzZSBpZiAoIWhhc0h0dHBGZWF0dXJlICYmICFoYXNMb2NhbEZlYXR1cmUpIHtcbiAgICAvLyBJZiBubyBiYWNrZW5kIGFwaUJhc2VVcmwgYW5kIG5vIGZlYXR1cmUgcGFzc2VkLCBmYWxsYmFjayB0byB6ZXJvLWJhY2tlbmQgc2FuZGJveCBtb2RlXG4gICAgcHJvdmlkZXJzLnB1c2goXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMucGVyc2lzdGVuY2VBZGFwdGVyID8/IExvY2FsU3RvcmFnZVJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogb3B0aW9ucy5kYXRhU291cmNlQWRhcHRlciA/PyBNb2NrUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogb3B0aW9ucy5zY2hlbWFEaXNjb3ZlcnlBZGFwdGVyID8/IEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMubG9va3VwQWRhcHRlciA/PyBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IE1hc3RlckRhdGFQcm92aWRlcixcbiAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMubWFzdGVyRGF0YVByb3ZpZGVyID8/IEh0dHBNYXN0ZXJEYXRhQWRhcHRlcixcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy8gQ29tcG9uZW50IG92ZXJyaWRlc1xuICBpZiAob3B0aW9ucy5ncmlkQ29tcG9uZW50KSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBHUklEX0NPTVBPTkVOVCwgdXNlVmFsdWU6IG9wdGlvbnMuZ3JpZENvbXBvbmVudCB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmNoYXJ0Q29tcG9uZW50KSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBDSEFSVF9DT01QT05FTlQsIHVzZVZhbHVlOiBvcHRpb25zLmNoYXJ0Q29tcG9uZW50IH0pO1xuICB9XG5cbiAgLy8gRXhwbGljaXQgYWRhcHRlciBvdmVycmlkZXMgYWx3YXlzIHdpblxuICBpZiAob3B0aW9ucy5kYXRhU291cmNlQWRhcHRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLmRhdGFTb3VyY2VBZGFwdGVyIH0pO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMubWFzdGVyRGF0YVByb3ZpZGVyKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBNYXN0ZXJEYXRhUHJvdmlkZXIsIHVzZUNsYXNzOiBvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnBlcnNpc3RlbmNlQWRhcHRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5wZXJzaXN0ZW5jZUFkYXB0ZXIgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5zY2hlbWFEaXNjb3ZlcnlBZGFwdGVyKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5zY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIH0pO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMubG9va3VwQWRhcHRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUmVwb3J0TG9va3VwQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMubG9va3VwQWRhcHRlciB9KTtcbiAgfVxuXG4gIC8vIER5bmFtaWMgU2Vzc2lvbiBDb250ZXh0IFByb3ZpZGVyc1xuICBpZiAob3B0aW9ucy5zZXNzaW9uQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUiwgdXNlQ2xhc3M6IG9wdGlvbnMuc2Vzc2lvbkNvbnRleHRQcm92aWRlciB9KTtcbiAgfVxuXG4gIC8vIEZsZXhpYmxlIGlubGluZSBzZXNzaW9uIHN5bnRheDogc2Vzc2lvbjogKCkgPT4gKHsgLi4uIH0pXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5zZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9DT05URVhULCB1c2VGYWN0b3J5OiBvcHRpb25zLnNlc3Npb24gYXMgKCkgPT4gYW55IH0pO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuc2Vzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9DT05URVhULCB1c2VWYWx1ZTogb3B0aW9ucy5zZXNzaW9uIH0pO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuc2Vzc2lvbkNvbnRleHRGYWN0b3J5KSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9DT05URVhULCB1c2VGYWN0b3J5OiBvcHRpb25zLnNlc3Npb25Db250ZXh0RmFjdG9yeSB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnNlc3Npb25Db250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHVzZVZhbHVlOiBvcHRpb25zLnNlc3Npb25Db250ZXh0IH0pO1xuICB9XG5cbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhwcm92aWRlcnMpO1xufVxuXG4vKiogQWxpYXMgZm9yIHByb3ZpZGVCd2F5c1JlcG9ydCAqL1xuZXhwb3J0IGNvbnN0IHByb3ZpZGVCd2F5c1JlcG9ydGluZyA9IHByb3ZpZGVCd2F5c1JlcG9ydDtcblxuLyoqIEJhY2t3YXJkLWNvbXBhdGlibGUgYWxpYXMgZm9yIHByb3ZpZGVCd2F5c1JlcG9ydCAqL1xuZXhwb3J0IGNvbnN0IHByb3ZpZGVSZXBvcnRpbmcgPSBwcm92aWRlQndheXNSZXBvcnQ7XG5cbi8qKiBTZW1hbnRpYyBhbGlhcyBmb3IgQldheXMgcmVwb3J0IHByb3ZpZGVycyAqL1xuZXhwb3J0IGNvbnN0IGJ3YXlzUmVwb3J0UHJvdmlkZXJzID0gcHJvdmlkZUJ3YXlzUmVwb3J0O1xuIl19
|