payload-auth 1.5.1 → 1.6.1-canary.1
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/dist/better-auth/adapter/index.d.ts.map +1 -1
- package/dist/better-auth/adapter/index.js +30 -30
- package/dist/better-auth/adapter/transform/index.d.ts +8 -7
- package/dist/better-auth/adapter/transform/index.d.ts.map +1 -1
- package/dist/better-auth/adapter/transform/index.js +2 -2
- package/dist/better-auth/adapter/types.d.ts +5 -4
- package/dist/better-auth/adapter/types.d.ts.map +1 -1
- package/dist/better-auth/adapter/types.js +1 -1
- package/dist/better-auth/generated-types.d.ts +21 -0
- package/dist/better-auth/generated-types.d.ts.map +1 -1
- package/dist/better-auth/generated-types.js +1 -1
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts +14 -17
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts.map +1 -1
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.js +51 -33
- package/dist/better-auth/plugin/helpers/get-collection.d.ts +11 -36
- package/dist/better-auth/plugin/helpers/get-collection.d.ts.map +1 -1
- package/dist/better-auth/plugin/helpers/get-collection.js +20 -53
- package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts.map +1 -1
- package/dist/better-auth/plugin/helpers/prepare-session-data.js +1 -1
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts +21 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js +62 -0
- package/dist/better-auth/plugin/index.d.ts +8 -1
- package/dist/better-auth/plugin/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/index.js +67 -91
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts +13 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js +80 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts +2 -2
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +6 -16
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +2 -2
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +10 -12
- package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/api-keys.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/index.d.ts +3 -4
- package/dist/better-auth/plugin/lib/build-collections/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/index.js +15 -26
- package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/invitations.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/jwks.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/members.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/members.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/members.js +8 -10
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +7 -9
- package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/organizations.js +8 -10
- package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +2 -2
- package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/passkeys.js +23 -12
- package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/sessions.js +7 -8
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +8 -10
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.js +8 -10
- package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/teams.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/teams.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/two-factors.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +4 -11
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +3 -8
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +5 -15
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +19 -22
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/index.js +31 -14
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts +6 -6
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js +9 -17
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts +2 -2
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js +1 -1
- package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/verifications.js +8 -11
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts +1 -1
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/init-better-auth.js +3 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +4 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +3 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +15 -15
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +8 -8
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +12 -12
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +4 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +6 -6
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js +4 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +3 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +4 -4
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts +7 -0
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +120 -0
- package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/client.js +59 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts +5 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.js +40 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.scss +91 -0
- package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts +9 -0
- package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/list.js +57 -0
- package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +20 -0
- package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/types.js +3 -0
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts +2 -1
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/exports/rsc.js +3 -2
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +1 -0
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-login/client.js +11 -7
- package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-login/index.js +3 -1
- package/dist/better-auth/plugin/types.d.ts +6 -3
- package/dist/better-auth/plugin/types.d.ts.map +1 -1
- package/dist/better-auth/plugin/types.js +1 -1
- package/dist/better-auth/scripts/generate-types.js +15 -1
- package/package.json +1 -1
- package/dist/better-auth/plugin/helpers/get-collection-schema-map.d.ts +0 -16
- package/dist/better-auth/plugin/helpers/get-collection-schema-map.d.ts.map +0 -1
- package/dist/better-auth/plugin/helpers/get-collection-schema-map.js +0 -108
- package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts +0 -3
- package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts.map +0 -1
- package/dist/better-auth/plugin/helpers/get-requst-collection.js +0 -14
- package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +0 -105
- package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts.map +0 -1
- package/dist/better-auth/plugin/helpers/serialize-cookie.js +0 -186
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/better-auth/adapter/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/better-auth/adapter/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAK7C,eAAO,MAAM,uBAAuB,uBAAuB,CAAA;AAG3D;;;;;;;;;GASG;AACH,QAAA,MAAM,cAAc,EAAE,cAkkBrB,CAAA;AAED,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -12,12 +12,12 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
12
12
|
* @param payloadClient - The Payload CMS client instance or a function that returns it
|
|
13
13
|
* @param config - Configuration options for the adapter
|
|
14
14
|
* @returns A function that creates a Better Auth adapter
|
|
15
|
-
*/ const payloadAdapter = (payloadClient,
|
|
15
|
+
*/ const payloadAdapter = ({ payloadClient, enableDebugLogs = false, idType })=>{
|
|
16
16
|
/**
|
|
17
17
|
* Logs debug messages if debug logging is enabled
|
|
18
18
|
* @param message - The message to log
|
|
19
19
|
*/ function debugLog(message) {
|
|
20
|
-
if (
|
|
20
|
+
if (enableDebugLogs) {
|
|
21
21
|
console.log('[payload-db-adapter]', ...message);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -71,7 +71,7 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
71
71
|
* @param options - Better Auth options
|
|
72
72
|
* @returns A Better Auth adapter implementation
|
|
73
73
|
*/ return (options)=>{
|
|
74
|
-
const { transformInput, transformOutput, convertWhereClause, convertSelect, convertSort, getCollectionSlug, singleIdQuery } = createTransform(options,
|
|
74
|
+
const { transformInput, transformOutput, convertWhereClause, convertSelect, convertSort, getCollectionSlug, singleIdQuery } = createTransform(options, enableDebugLogs);
|
|
75
75
|
return {
|
|
76
76
|
id: 'payload-adapter',
|
|
77
77
|
async create ({ model, data: values, select }) {
|
|
@@ -82,8 +82,8 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
82
82
|
await validateCollection(payload, collectionSlug, model);
|
|
83
83
|
const transformedInput = transformInput({
|
|
84
84
|
data: values,
|
|
85
|
-
model,
|
|
86
|
-
idType:
|
|
85
|
+
model: model,
|
|
86
|
+
idType: idType
|
|
87
87
|
});
|
|
88
88
|
debugLog([
|
|
89
89
|
'create',
|
|
@@ -106,7 +106,7 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
106
106
|
});
|
|
107
107
|
const transformedResult = transformOutput({
|
|
108
108
|
doc: result,
|
|
109
|
-
model
|
|
109
|
+
model: model
|
|
110
110
|
});
|
|
111
111
|
debugLog([
|
|
112
112
|
'create result',
|
|
@@ -133,8 +133,8 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
133
133
|
// Validate collection exists before proceeding
|
|
134
134
|
await validateCollection(payload, collectionSlug, model);
|
|
135
135
|
const payloadWhere = convertWhereClause({
|
|
136
|
-
idType:
|
|
137
|
-
model,
|
|
136
|
+
idType: idType,
|
|
137
|
+
model: model,
|
|
138
138
|
where
|
|
139
139
|
});
|
|
140
140
|
debugLog([
|
|
@@ -187,7 +187,7 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
187
187
|
}
|
|
188
188
|
const transformedResult = transformOutput({
|
|
189
189
|
doc: result,
|
|
190
|
-
model
|
|
190
|
+
model: model
|
|
191
191
|
});
|
|
192
192
|
debugLog([
|
|
193
193
|
'findOne result',
|
|
@@ -216,8 +216,8 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
216
216
|
// Validate collection exists before proceeding
|
|
217
217
|
await validateCollection(payload, collectionSlug, model);
|
|
218
218
|
const payloadWhere = convertWhereClause({
|
|
219
|
-
idType:
|
|
220
|
-
model,
|
|
219
|
+
idType: idType,
|
|
220
|
+
model: model,
|
|
221
221
|
where
|
|
222
222
|
});
|
|
223
223
|
debugLog([
|
|
@@ -285,7 +285,7 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
285
285
|
}
|
|
286
286
|
const transformedResult = result?.docs.map((doc)=>transformOutput({
|
|
287
287
|
doc,
|
|
288
|
-
model
|
|
288
|
+
model: model
|
|
289
289
|
})) ?? [];
|
|
290
290
|
debugLog([
|
|
291
291
|
'findMany result',
|
|
@@ -314,14 +314,14 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
314
314
|
// Validate collection exists before proceeding
|
|
315
315
|
await validateCollection(payload, collectionSlug, model);
|
|
316
316
|
const payloadWhere = convertWhereClause({
|
|
317
|
-
idType:
|
|
318
|
-
model,
|
|
317
|
+
idType: idType,
|
|
318
|
+
model: model,
|
|
319
319
|
where
|
|
320
320
|
});
|
|
321
321
|
const transformedInput = transformInput({
|
|
322
322
|
data: update,
|
|
323
|
-
model,
|
|
324
|
-
idType:
|
|
323
|
+
model: model,
|
|
324
|
+
idType: idType
|
|
325
325
|
});
|
|
326
326
|
debugLog([
|
|
327
327
|
'update',
|
|
@@ -373,7 +373,7 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
373
373
|
}
|
|
374
374
|
const transformedResult = transformOutput({
|
|
375
375
|
doc: result,
|
|
376
|
-
model
|
|
376
|
+
model: model
|
|
377
377
|
});
|
|
378
378
|
debugLog([
|
|
379
379
|
'update-result',
|
|
@@ -402,14 +402,14 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
402
402
|
// Validate collection exists before proceeding
|
|
403
403
|
await validateCollection(payload, collectionSlug, model);
|
|
404
404
|
const payloadWhere = convertWhereClause({
|
|
405
|
-
idType:
|
|
406
|
-
model,
|
|
405
|
+
idType: idType,
|
|
406
|
+
model: model,
|
|
407
407
|
where
|
|
408
408
|
});
|
|
409
409
|
const transformedInput = transformInput({
|
|
410
410
|
data: update,
|
|
411
|
-
model,
|
|
412
|
-
idType:
|
|
411
|
+
model: model,
|
|
412
|
+
idType: idType
|
|
413
413
|
});
|
|
414
414
|
debugLog([
|
|
415
415
|
'updateMany',
|
|
@@ -457,8 +457,8 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
457
457
|
// Validate collection exists before proceeding
|
|
458
458
|
await validateCollection(payload, collectionSlug, model);
|
|
459
459
|
const payloadWhere = convertWhereClause({
|
|
460
|
-
idType:
|
|
461
|
-
model,
|
|
460
|
+
idType: idType,
|
|
461
|
+
model: model,
|
|
462
462
|
where
|
|
463
463
|
});
|
|
464
464
|
debugLog([
|
|
@@ -538,8 +538,8 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
538
538
|
// Validate collection exists before proceeding
|
|
539
539
|
await validateCollection(payload, collectionSlug, model);
|
|
540
540
|
const payloadWhere = convertWhereClause({
|
|
541
|
-
idType:
|
|
542
|
-
model,
|
|
541
|
+
idType: idType,
|
|
542
|
+
model: model,
|
|
543
543
|
where
|
|
544
544
|
});
|
|
545
545
|
debugLog([
|
|
@@ -586,8 +586,8 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
586
586
|
// Validate collection exists before proceeding
|
|
587
587
|
await validateCollection(payload, collectionSlug, model);
|
|
588
588
|
const payloadWhere = convertWhereClause({
|
|
589
|
-
idType:
|
|
590
|
-
model,
|
|
589
|
+
idType: idType,
|
|
590
|
+
model: model,
|
|
591
591
|
where
|
|
592
592
|
});
|
|
593
593
|
debugLog([
|
|
@@ -639,12 +639,12 @@ const PAYLOAD_QUERY_DEPTH = 0;
|
|
|
639
639
|
};
|
|
640
640
|
},
|
|
641
641
|
options: {
|
|
642
|
-
enableDebugLogs
|
|
643
|
-
idType
|
|
642
|
+
enableDebugLogs,
|
|
643
|
+
idType
|
|
644
644
|
}
|
|
645
645
|
};
|
|
646
646
|
};
|
|
647
647
|
};
|
|
648
648
|
export { generateSchema, payloadAdapter };
|
|
649
649
|
|
|
650
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9hZGFwdGVyL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJldHRlckF1dGhFcnJvciB9IGZyb20gJ2JldHRlci1hdXRoJ1xuaW1wb3J0IHR5cGUgeyBBZGFwdGVyLCBCZXR0ZXJBdXRoT3B0aW9ucywgV2hlcmUgfSBmcm9tICdiZXR0ZXItYXV0aCdcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSAnLi9nZW5lcmF0ZS1zY2hlbWEnXG5pbXBvcnQgeyBjcmVhdGVUcmFuc2Zvcm0gfSBmcm9tICcuL3RyYW5zZm9ybSdcbmltcG9ydCB0eXBlIHsgUGF5bG9hZEFkYXB0ZXIgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgQkVUVEVSX0FVVEhfQ09OVEVYVF9LRVkgPSAncGF5bG9hZC1kYi1hZGFwdGVyJ1xuY29uc3QgUEFZTE9BRF9RVUVSWV9ERVBUSCA9IDBcblxuLyoqXG4gKiBQYXlsb2FkIGFkYXB0ZXIgZm9yIEJldHRlciBBdXRoXG4gKlxuICogVGhpcyBhZGFwdGVyIGNvbm5lY3RzIEJldHRlciBBdXRoIHRvIFBheWxvYWQgQ01TLCBhbGxvd2luZyBhdXRoZW50aWNhdGlvblxuICogb3BlcmF0aW9ucyB0byBiZSBwZXJmb3JtZWQgYWdhaW5zdCBQYXlsb2FkIGNvbGxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBwYXlsb2FkQ2xpZW50IC0gVGhlIFBheWxvYWQgQ01TIGNsaWVudCBpbnN0YW5jZSBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBpdFxuICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGFkYXB0ZXJcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgQmV0dGVyIEF1dGggYWRhcHRlclxuICovXG5jb25zdCBwYXlsb2FkQWRhcHRlcjogUGF5bG9hZEFkYXB0ZXIgPSAocGF5bG9hZENsaWVudCwgY29uZmlnKSA9PiB7XG4gIC8qKlxuICAgKiBMb2dzIGRlYnVnIG1lc3NhZ2VzIGlmIGRlYnVnIGxvZ2dpbmcgaXMgZW5hYmxlZFxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZ1xuICAgKi9cbiAgZnVuY3Rpb24gZGVidWdMb2cobWVzc2FnZTogYW55W10pIHtcbiAgICBpZiAoY29uZmlnLmVuYWJsZURlYnVnTG9ncykge1xuICAgICAgY29uc29sZS5sb2coJ1twYXlsb2FkLWRiLWFkYXB0ZXJdJywgLi4ubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBlcnJvciBtZXNzYWdlc1xuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGxvZ1xuICAgKi9cbiAgZnVuY3Rpb24gZXJyb3JMb2cobWVzc2FnZTogYW55W10pIHtcbiAgICBjb25zb2xlLmVycm9yKGBbcGF5bG9hZC1kYi1hZGFwdGVyXWAsIC4uLm1lc3NhZ2UpXG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGFuIGVycm9yIHdoZW4gYSBjb2xsZWN0aW9uIHNsdWcgZG9lc24ndCBleGlzdFxuICAgKiBAcGFyYW0gbW9kZWwgLSBUaGUgbW9kZWwgbmFtZSB0aGF0IGNvdWxkbid0IGJlIGZvdW5kXG4gICAqIEB0aHJvd3Mge0JldHRlckF1dGhFcnJvcn0gV2hlbiB0aGUgY29sbGVjdGlvbiBkb2Vzbid0IGV4aXN0XG4gICAqIEByZXR1cm5zIE5ldmVyIC0gRnVuY3Rpb24gYWx3YXlzIHRocm93c1xuICAgKi9cbiAgZnVuY3Rpb24gY29sbGVjdGlvblNsdWdFcnJvcihtb2RlbDogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBCZXR0ZXJBdXRoRXJyb3IoYENvbGxlY3Rpb24gJHttb2RlbH0gZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBjaGVjayB5b3VyIHBheWxvYWQgY29sbGVjdGlvbiBzbHVncyBtYXRjaCB0aGUgYmV0dGVyIGF1dGggc2NoZW1hYClcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCBhIGNvbGxlY3Rpb24gZXhpc3RzIGluIFBheWxvYWRcbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgUGF5bG9hZCBjbGllbnQgaW5zdGFuY2VcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25TbHVnIC0gVGhlIGNvbGxlY3Rpb24gc2x1ZyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gbW9kZWwgLSBUaGUgbW9kZWwgbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICogQHRocm93cyB7QmV0dGVyQXV0aEVycm9yfSBXaGVuIHRoZSBjb2xsZWN0aW9uIGRvZXNuJ3QgZXhpc3RcbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlQ29sbGVjdGlvbihwYXlsb2FkOiBhbnksIGNvbGxlY3Rpb25TbHVnOiBzdHJpbmcsIG1vZGVsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb250ZXh0IG9iamVjdCBmb3IgUGF5bG9hZCBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0YSB0byBpbmNsdWRlIGluIHRoZSBjb250ZXh0XG4gICAqIEByZXR1cm5zIFRoZSBjb250ZXh0IG9iamVjdCB3aXRoIEJldHRlciBBdXRoIG1ldGFkYXRhXG4gICAqL1xuICBjb25zdCBjcmVhdGVBZGFwdGVyQ29udGV4dCA9IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiAoe1xuICAgIFtCRVRURVJfQVVUSF9DT05URVhUX0tFWV06IHsgLi4uZGF0YSB9XG4gIH0pXG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBQYXlsb2FkIGNsaWVudCwgaGFuZGxpbmcgYm90aCBmdW5jdGlvbiBhbmQgZGlyZWN0IHJlZmVyZW5jZXNcbiAgICogQHJldHVybnMgVGhlIHJlc29sdmVkIFBheWxvYWQgY2xpZW50XG4gICAqIEB0aHJvd3Mge0JldHRlckF1dGhFcnJvcn0gV2hlbiBCZXR0ZXIgQXV0aCBwbHVnaW4gaXMgbm90IGNvbmZpZ3VyZWRcbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYXlsb2FkQ2xpZW50KCkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eXBlb2YgcGF5bG9hZENsaWVudCA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IHBheWxvYWRDbGllbnQoKSA6IGF3YWl0IHBheWxvYWRDbGllbnRcbiAgICBpZiAoIXBheWxvYWQuY29uZmlnPy5jdXN0b20/Lmhhc0JldHRlckF1dGhQbHVnaW4pIHtcbiAgICAgIHRocm93IG5ldyBCZXR0ZXJBdXRoRXJyb3IoYFBheWxvYWQgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCB0aGUgYmV0dGVyLWF1dGggcGx1Z2luLiBQbGVhc2UgYWRkIHRoZSBwbHVnaW4gdG8geW91ciBwYXlsb2FkIGNvbmZpZy5gKVxuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZFxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBCZXR0ZXIgQXV0aCBhZGFwdGVyIGZvciBQYXlsb2FkXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQmV0dGVyIEF1dGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyBBIEJldHRlciBBdXRoIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25cbiAgICovXG4gIHJldHVybiAob3B0aW9uczogQmV0dGVyQXV0aE9wdGlvbnMpOiBBZGFwdGVyID0+IHtcbiAgICBjb25zdCB7IHRyYW5zZm9ybUlucHV0LCB0cmFuc2Zvcm1PdXRwdXQsIGNvbnZlcnRXaGVyZUNsYXVzZSwgY29udmVydFNlbGVjdCwgY29udmVydFNvcnQsIGdldENvbGxlY3Rpb25TbHVnLCBzaW5nbGVJZFF1ZXJ5IH0gPVxuICAgICAgY3JlYXRlVHJhbnNmb3JtKG9wdGlvbnMsIGNvbmZpZy5lbmFibGVEZWJ1Z0xvZ3MgPz8gZmFsc2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICdwYXlsb2FkLWFkYXB0ZXInLFxuICAgICAgYXN5bmMgY3JlYXRlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBSID0gVD4oe1xuICAgICAgICBtb2RlbCxcbiAgICAgICAgZGF0YTogdmFsdWVzLFxuICAgICAgICBzZWxlY3RcbiAgICAgIH06IHtcbiAgICAgICAgbW9kZWw6IHN0cmluZ1xuICAgICAgICBkYXRhOiBUXG4gICAgICAgIHNlbGVjdD86IHN0cmluZ1tdXG4gICAgICB9KTogUHJvbWlzZTxSPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldENvbGxlY3Rpb25TbHVnKG1vZGVsKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGNvbGxlY3Rpb24gZXhpc3RzIGJlZm9yZSBwcm9jZWVkaW5nXG4gICAgICAgIGF3YWl0IHZhbGlkYXRlQ29sbGVjdGlvbihwYXlsb2FkLCBjb2xsZWN0aW9uU2x1ZywgbW9kZWwpXG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRJbnB1dCA9IHRyYW5zZm9ybUlucHV0KHtcbiAgICAgICAgICBkYXRhOiB2YWx1ZXMsXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgaWRUeXBlOiBjb25maWcuaWRUeXBlXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVidWdMb2coWydjcmVhdGUnLCB7IGNvbGxlY3Rpb25TbHVnLCB0cmFuc2Zvcm1lZElucHV0LCBzZWxlY3QgfV0pXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmNyZWF0ZSh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgIGRhdGE6IHRyYW5zZm9ybWVkSW5wdXQsXG4gICAgICAgICAgICBzZWxlY3Q6IGNvbnZlcnRTZWxlY3QobW9kZWwsIHNlbGVjdCksXG4gICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7IG1vZGVsLCBvcGVyYXRpb246ICdjcmVhdGUnIH0pLFxuICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEhcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRSZXN1bHQgPSB0cmFuc2Zvcm1PdXRwdXQoe1xuICAgICAgICAgICAgZG9jOiByZXN1bHQsXG4gICAgICAgICAgICBtb2RlbFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICAnY3JlYXRlIHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdKVxuXG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVzdWx0IGFzIFJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIGNyZWF0aW5nOicsIG1vZGVsLCBlcnJvcl0pXG4gICAgICAgICAgcmV0dXJuIG51bGwgYXMgUlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgZmluZE9uZTxSPih7IG1vZGVsLCB3aGVyZSwgc2VsZWN0IH06IHsgbW9kZWw6IHN0cmluZzsgd2hlcmU6IFdoZXJlW107IHNlbGVjdD86IHN0cmluZ1tdIH0pOiBQcm9taXNlPFIgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldENvbGxlY3Rpb25TbHVnKG1vZGVsKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGNvbGxlY3Rpb24gZXhpc3RzIGJlZm9yZSBwcm9jZWVkaW5nXG4gICAgICAgIGF3YWl0IHZhbGlkYXRlQ29sbGVjdGlvbihwYXlsb2FkLCBjb2xsZWN0aW9uU2x1ZywgbW9kZWwpXG5cbiAgICAgICAgY29uc3QgcGF5bG9hZFdoZXJlID0gY29udmVydFdoZXJlQ2xhdXNlKHtcbiAgICAgICAgICBpZFR5cGU6IGNvbmZpZy5pZFR5cGUsXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgd2hlcmVcbiAgICAgICAgfSlcblxuICAgICAgICBkZWJ1Z0xvZyhbJ2ZpbmRPbmUnLCB7IGNvbGxlY3Rpb25TbHVnIH1dKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2luZ2xlSWQgPSBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSlcbiAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGxcblxuICAgICAgICAgIGlmIChzaW5nbGVJZCkge1xuICAgICAgICAgICAgZGVidWdMb2coWydmaW5kT25lQnlJRCcsIHsgY29sbGVjdGlvblNsdWcsIGlkOiBzaW5nbGVJZCB9XSlcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHBheWxvYWQuZmluZEJ5SUQoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgaWQ6IHNpbmdsZUlkLFxuICAgICAgICAgICAgICBzZWxlY3Q6IGNvbnZlcnRTZWxlY3QobW9kZWwsIHNlbGVjdCksXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdmaW5kT25lQnlJRCdcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRIXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbJ2ZpbmRPbmVCeVdoZXJlJywgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlIH1dKVxuICAgICAgICAgICAgY29uc3QgZG9jcyA9IGF3YWl0IHBheWxvYWQuZmluZCh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgICBzZWxlY3Q6IGNvbnZlcnRTZWxlY3QobW9kZWwsIHNlbGVjdCksXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdmaW5kT25lQnlXaGVyZSdcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgICBsaW1pdDogMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlc3VsdCA9IGRvY3MuZG9jc1swXVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUmVzdWx0ID0gdHJhbnNmb3JtT3V0cHV0PHR5cGVvZiByZXN1bHQgfCBudWxsPih7XG4gICAgICAgICAgICBkb2M6IHJlc3VsdCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgICdmaW5kT25lIHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdKVxuXG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVzdWx0IGFzIFJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAnc3RhdHVzJyBpbiBlcnJvciAmJiBlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3JMb2coWydFcnJvciBpbiBmaW5kT25lOiAnLCBlcnJvcl0pXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGZpbmRNYW55PFI+KHtcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIHdoZXJlLFxuICAgICAgICBsaW1pdCA9IDEwLFxuICAgICAgICBzb3J0QnksXG4gICAgICAgIG9mZnNldCA9IDBcbiAgICAgIH06IHtcbiAgICAgICAgbW9kZWw6IHN0cmluZ1xuICAgICAgICB3aGVyZT86IFdoZXJlW11cbiAgICAgICAgbGltaXQ/OiBudW1iZXJcbiAgICAgICAgc29ydEJ5Pzoge1xuICAgICAgICAgIGZpZWxkOiBzdHJpbmdcbiAgICAgICAgICBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnXG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0PzogbnVtYmVyXG4gICAgICB9KTogUHJvbWlzZTxSW10+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0Q29sbGVjdGlvblNsdWcobW9kZWwpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgY29sbGVjdGlvbiBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgICAgICAgYXdhaXQgdmFsaWRhdGVDb2xsZWN0aW9uKHBheWxvYWQsIGNvbGxlY3Rpb25TbHVnLCBtb2RlbClcblxuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2Uoe1xuICAgICAgICAgIGlkVHlwZTogY29uZmlnLmlkVHlwZSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB3aGVyZVxuICAgICAgICB9KVxuXG4gICAgICAgIGRlYnVnTG9nKFsnZmluZE1hbnknLCB7IGNvbGxlY3Rpb25TbHVnLCBzb3J0QnksIGxpbWl0LCBvZmZzZXQgfV0pXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgcmVzdWx0OiB7XG4gICAgICAgICAgICBkb2NzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W11cbiAgICAgICAgICAgIHRvdGFsRG9jczogbnVtYmVyXG4gICAgICAgICAgfSB8IG51bGwgPSBudWxsXG5cbiAgICAgICAgICBjb25zdCBzaW5nbGVJZCA9IHNpbmdsZUlkUXVlcnkocGF5bG9hZFdoZXJlKVxuICAgICAgICAgIGlmIChzaW5nbGVJZCkge1xuICAgICAgICAgICAgZGVidWdMb2coWydmaW5kTWFueUJ5U2luZ2xlSUQnLCB7IGNvbGxlY3Rpb25TbHVnLCBpZDogc2luZ2xlSWQgfV0pXG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBwYXlsb2FkLmZpbmRCeUlEKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIGlkOiBzaW5nbGVJZCxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdmaW5kTWFueUJ5U2luZ2xlSUQnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmVzdWx0ID0geyBkb2NzOiBkb2MgPyBbZG9jXSA6IFtdLCB0b3RhbERvY3M6IGRvYyA/IDEgOiAwIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVidWdMb2coWydmaW5kTWFueUJ5V2hlcmUnLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pXG4gICAgICAgICAgICBjb25zdCBzcGlsbCA9IG9mZnNldCAlIGxpbWl0XG4gICAgICAgICAgICBjb25zdCBwYWdlID0gTWF0aC5mbG9vcihvZmZzZXQgLyBsaW1pdCkgKyAxXG4gICAgICAgICAgICBjb25zdCBmZXRjaExpbWl0ID0gc3BpbGwgPyBsaW1pdCArIHNwaWxsIDogbGltaXRcblxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcGF5bG9hZC5maW5kKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHdoZXJlOiBwYXlsb2FkV2hlcmUsXG4gICAgICAgICAgICAgIGxpbWl0OiBmZXRjaExpbWl0LFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICBzb3J0OiBjb252ZXJ0U29ydChtb2RlbCwgc29ydEJ5KSxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdmaW5kTWFueUJ5V2hlcmUnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmVzdWx0ID0geyBkb2NzOiByZXMuZG9jcy5zbGljZShzcGlsbCwgc3BpbGwgKyBsaW1pdCksIHRvdGFsRG9jczogcmVzLnRvdGFsRG9jcyB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRSZXN1bHQgPVxuICAgICAgICAgICAgcmVzdWx0Py5kb2NzLm1hcCgoZG9jKSA9PlxuICAgICAgICAgICAgICB0cmFuc2Zvcm1PdXRwdXQoe1xuICAgICAgICAgICAgICAgIGRvYyxcbiAgICAgICAgICAgICAgICBtb2RlbFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSA/PyBbXVxuXG4gICAgICAgICAgZGVidWdMb2coW1xuICAgICAgICAgICAgJ2ZpbmRNYW55IHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdKVxuXG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVzdWx0IGFzIFJbXVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdzdGF0dXMnIGluIGVycm9yICYmIGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gW10gYXMgUltdXG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yTG9nKFsnRXJyb3IgaW4gZmluZE1hbnk6ICcsIGVycm9yXSlcbiAgICAgICAgICByZXR1cm4gW10gYXMgUltdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyB1cGRhdGU8Uj4oeyBtb2RlbCwgd2hlcmUsIHVwZGF0ZSB9OiB7IG1vZGVsOiBzdHJpbmc7IHdoZXJlOiBXaGVyZVtdOyB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pOiBQcm9taXNlPFIgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldENvbGxlY3Rpb25TbHVnKG1vZGVsKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGNvbGxlY3Rpb24gZXhpc3RzIGJlZm9yZSBwcm9jZWVkaW5nXG4gICAgICAgIGF3YWl0IHZhbGlkYXRlQ29sbGVjdGlvbihwYXlsb2FkLCBjb2xsZWN0aW9uU2x1ZywgbW9kZWwpXG5cbiAgICAgICAgY29uc3QgcGF5bG9hZFdoZXJlID0gY29udmVydFdoZXJlQ2xhdXNlKHtcbiAgICAgICAgICBpZFR5cGU6IGNvbmZpZy5pZFR5cGUsXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgd2hlcmVcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZElucHV0ID0gdHJhbnNmb3JtSW5wdXQoe1xuICAgICAgICAgIGRhdGE6IHVwZGF0ZSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBpZFR5cGU6IGNvbmZpZy5pZFR5cGVcbiAgICAgICAgfSlcblxuICAgICAgICBkZWJ1Z0xvZyhbJ3VwZGF0ZScsIHsgY29sbGVjdGlvblNsdWcsIHVwZGF0ZSB9XSlcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gbnVsbFxuICAgICAgICAgIGNvbnN0IGlkID0gc2luZ2xlSWRRdWVyeShwYXlsb2FkV2hlcmUpXG5cbiAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFsndXBkYXRlQnlJRCcsIHsgY29sbGVjdGlvblNsdWcsIGlkIH1dKVxuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgcGF5bG9hZC51cGRhdGUoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIGRhdGE6IHRyYW5zZm9ybWVkSW5wdXQsXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7IG1vZGVsLCBvcGVyYXRpb246ICd1cGRhdGVCeUlEJyB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVidWdMb2coWyd1cGRhdGVCeVdoZXJlJywgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlIH1dKVxuICAgICAgICAgICAgY29uc3QgZG9jID0gYXdhaXQgcGF5bG9hZC51cGRhdGUoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgICAgZGF0YTogdHJhbnNmb3JtZWRJbnB1dCxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICd1cGRhdGVCeVdoZXJlJ1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlc3VsdCA9IGRvYy5kb2NzWzBdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRSZXN1bHQgPSB0cmFuc2Zvcm1PdXRwdXQ8dHlwZW9mIHJlc3VsdCB8IG51bGw+KHtcbiAgICAgICAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgZGVidWdMb2coW1xuICAgICAgICAgICAgJ3VwZGF0ZS1yZXN1bHQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSlcblxuICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJlc3VsdCBhcyBSXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgJ3N0YXR1cycgaW4gZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yTG9nKFsnRXJyb3IgaW4gdXBkYXRlOiAnLCBlcnJvcl0pXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHVwZGF0ZU1hbnkoeyBtb2RlbCwgd2hlcmUsIHVwZGF0ZSB9OiB7IG1vZGVsOiBzdHJpbmc7IHdoZXJlOiBXaGVyZVtdOyB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc29sdmVQYXlsb2FkQ2xpZW50KClcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRDb2xsZWN0aW9uU2x1Zyhtb2RlbClcblxuICAgICAgICAvLyBWYWxpZGF0ZSBjb2xsZWN0aW9uIGV4aXN0cyBiZWZvcmUgcHJvY2VlZGluZ1xuICAgICAgICBhd2FpdCB2YWxpZGF0ZUNvbGxlY3Rpb24ocGF5bG9hZCwgY29sbGVjdGlvblNsdWcsIG1vZGVsKVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRXaGVyZSA9IGNvbnZlcnRXaGVyZUNsYXVzZSh7XG4gICAgICAgICAgaWRUeXBlOiBjb25maWcuaWRUeXBlLFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIHdoZXJlXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRJbnB1dCA9IHRyYW5zZm9ybUlucHV0KHtcbiAgICAgICAgICBkYXRhOiB1cGRhdGUsXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgaWRUeXBlOiBjb25maWcuaWRUeXBlXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVidWdMb2coWyd1cGRhdGVNYW55JywgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlLCB1cGRhdGUgfV0pXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGRvY3M6IHVwZGF0ZVJlc3VsdCB9ID0gYXdhaXQgcGF5bG9hZC51cGRhdGUoe1xuICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgZGF0YTogdHJhbnNmb3JtZWRJbnB1dCxcbiAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiAndXBkYXRlTWFueScgfSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgZGVidWdMb2coW1xuICAgICAgICAgICAgJ3VwZGF0ZU1hbnkgcmVzdWx0JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHJlc3VsdDogdXBkYXRlUmVzdWx0LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVzdWx0Py5sZW5ndGggfHwgMFxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdzdGF0dXMnIGluIGVycm9yICYmIGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIHVwZGF0ZU1hbnk6ICcsIGVycm9yXSlcbiAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgZGVsZXRlKHsgbW9kZWwsIHdoZXJlIH06IHsgbW9kZWw6IHN0cmluZzsgd2hlcmU6IFdoZXJlW10gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc29sdmVQYXlsb2FkQ2xpZW50KClcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRDb2xsZWN0aW9uU2x1Zyhtb2RlbClcblxuICAgICAgICAvLyBWYWxpZGF0ZSBjb2xsZWN0aW9uIGV4aXN0cyBiZWZvcmUgcHJvY2VlZGluZ1xuICAgICAgICBhd2FpdCB2YWxpZGF0ZUNvbGxlY3Rpb24ocGF5bG9hZCwgY29sbGVjdGlvblNsdWcsIG1vZGVsKVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRXaGVyZSA9IGNvbnZlcnRXaGVyZUNsYXVzZSh7XG4gICAgICAgICAgaWRUeXBlOiBjb25maWcuaWRUeXBlLFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIHdoZXJlXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVidWdMb2coWydkZWxldGUnLCB7IGNvbGxlY3Rpb25TbHVnIH1dKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IGRlbGV0ZVJlc3VsdDoge1xuICAgICAgICAgICAgZG9jOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbFxuICAgICAgICAgICAgZXJyb3JzOiBhbnlbXVxuICAgICAgICAgIH0gfCBudWxsID0gbnVsbFxuXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSWQgPSBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSlcbiAgICAgICAgICBpZiAoc2luZ2xlSWQpIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFsnZGVsZXRlQnlJRCcsIHsgY29sbGVjdGlvblNsdWcsIGlkOiBzaW5nbGVJZCB9XSlcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIGlkOiBzaW5nbGVJZCxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHsgbW9kZWwsIG9wZXJhdGlvbjogJ2RlbGV0ZUJ5SUQnIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZGVsZXRlUmVzdWx0ID0geyBkb2MsIGVycm9yczogW10gfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbJ2RlbGV0ZUJ5V2hlcmUnLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pXG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBwYXlsb2FkLmRlbGV0ZSh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ2RlbGV0ZUJ5V2hlcmUnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZGVsZXRlUmVzdWx0ID0geyBkb2M6IGRvYy5kb2NzWzBdLCBlcnJvcnM6IFtdIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICAnZGVsZXRlIHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICByZXN1bHQ6IGRlbGV0ZVJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdzdGF0dXMnIGluIGVycm9yICYmIGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3JMb2coWydFcnJvciBpbiBkZWxldGU6ICcsIGVycm9yXSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGRlbGV0ZU1hbnkoeyBtb2RlbCwgd2hlcmUgfTogeyBtb2RlbDogc3RyaW5nOyB3aGVyZTogV2hlcmVbXSB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0Q29sbGVjdGlvblNsdWcobW9kZWwpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgY29sbGVjdGlvbiBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgICAgICAgYXdhaXQgdmFsaWRhdGVDb2xsZWN0aW9uKHBheWxvYWQsIGNvbGxlY3Rpb25TbHVnLCBtb2RlbClcblxuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2Uoe1xuICAgICAgICAgIGlkVHlwZTogY29uZmlnLmlkVHlwZSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB3aGVyZVxuICAgICAgICB9KVxuXG4gICAgICAgIGRlYnVnTG9nKFsnZGVsZXRlTWFueScsIHsgY29sbGVjdGlvblNsdWcsIHBheWxvYWRXaGVyZSB9XSlcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZVJlc3VsdCA9IGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiAnZGVsZXRlTWFueScgfSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgZGVidWdMb2coW1xuICAgICAgICAgICAgJ2RlbGV0ZU1hbnkgcmVzdWx0JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHJlc3VsdDogZGVsZXRlUmVzdWx0LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG5cbiAgICAgICAgICByZXR1cm4gZGVsZXRlUmVzdWx0LmRvY3MubGVuZ3RoXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgJ3N0YXR1cycgaW4gZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yTG9nKFsnRXJyb3IgaW4gZGVsZXRlTWFueTogJywgZXJyb3JdKVxuICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyBjb3VudCh7IG1vZGVsLCB3aGVyZSB9OiB7IG1vZGVsOiBzdHJpbmc7IHdoZXJlPzogV2hlcmVbXSB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0Q29sbGVjdGlvblNsdWcobW9kZWwpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgY29sbGVjdGlvbiBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgICAgICAgYXdhaXQgdmFsaWRhdGVDb2xsZWN0aW9uKHBheWxvYWQsIGNvbGxlY3Rpb25TbHVnLCBtb2RlbClcblxuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2Uoe1xuICAgICAgICAgIGlkVHlwZTogY29uZmlnLmlkVHlwZSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB3aGVyZVxuICAgICAgICB9KVxuXG4gICAgICAgIGRlYnVnTG9nKFsnY291bnQnLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmNvdW50KHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiAnY291bnQnIH0pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgICdjb3VudCByZXN1bHQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgcmVzdWx0OiB7IHRvdGFsRG9jczogcmVzdWx0LnRvdGFsRG9jcyB9LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvdGFsRG9jc1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdzdGF0dXMnIGluIGVycm9yICYmIGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIGNvdW50OiAnLCBlcnJvcl0pXG4gICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZVNjaGVtYTogYXN5bmMgKG9wdGlvbnMsIGZpbGUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hQ29kZSA9IGF3YWl0IGdlbmVyYXRlU2NoZW1hKG9wdGlvbnMpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29kZTogc2NoZW1hQ29kZSxcbiAgICAgICAgICBwYXRoOiBmaWxlIHx8ICdzY2hlbWEudHMnLFxuICAgICAgICAgIGFwcGVuZDogZmFsc2UsXG4gICAgICAgICAgb3ZlcndyaXRlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGVuYWJsZURlYnVnTG9nczogY29uZmlnLmVuYWJsZURlYnVnTG9ncyxcbiAgICAgICAgaWRUeXBlOiBjb25maWcuaWRUeXBlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IGdlbmVyYXRlU2NoZW1hLCBwYXlsb2FkQWRhcHRlciB9XG4iXSwibmFtZXMiOlsiQmV0dGVyQXV0aEVycm9yIiwiZ2VuZXJhdGVTY2hlbWEiLCJjcmVhdGVUcmFuc2Zvcm0iLCJCRVRURVJfQVVUSF9DT05URVhUX0tFWSIsIlBBWUxPQURfUVVFUllfREVQVEgiLCJwYXlsb2FkQWRhcHRlciIsInBheWxvYWRDbGllbnQiLCJjb25maWciLCJkZWJ1Z0xvZyIsIm1lc3NhZ2UiLCJlbmFibGVEZWJ1Z0xvZ3MiLCJjb25zb2xlIiwibG9nIiwiZXJyb3JMb2ciLCJlcnJvciIsImNvbGxlY3Rpb25TbHVnRXJyb3IiLCJtb2RlbCIsInZhbGlkYXRlQ29sbGVjdGlvbiIsInBheWxvYWQiLCJjb2xsZWN0aW9uU2x1ZyIsImNvbGxlY3Rpb25zIiwiY3JlYXRlQWRhcHRlckNvbnRleHQiLCJkYXRhIiwicmVzb2x2ZVBheWxvYWRDbGllbnQiLCJjdXN0b20iLCJoYXNCZXR0ZXJBdXRoUGx1Z2luIiwib3B0aW9ucyIsInRyYW5zZm9ybUlucHV0IiwidHJhbnNmb3JtT3V0cHV0IiwiY29udmVydFdoZXJlQ2xhdXNlIiwiY29udmVydFNlbGVjdCIsImNvbnZlcnRTb3J0IiwiZ2V0Q29sbGVjdGlvblNsdWciLCJzaW5nbGVJZFF1ZXJ5IiwiaWQiLCJjcmVhdGUiLCJ2YWx1ZXMiLCJzZWxlY3QiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJ0cmFuc2Zvcm1lZElucHV0IiwiaWRUeXBlIiwicmVzdWx0IiwiY29sbGVjdGlvbiIsImNvbnRleHQiLCJvcGVyYXRpb24iLCJkZXB0aCIsInRyYW5zZm9ybWVkUmVzdWx0IiwiZG9jIiwiZHVyYXRpb24iLCJmaW5kT25lIiwid2hlcmUiLCJwYXlsb2FkV2hlcmUiLCJzaW5nbGVJZCIsImZpbmRCeUlEIiwiZG9jcyIsImZpbmQiLCJsaW1pdCIsIkVycm9yIiwic3RhdHVzIiwiZmluZE1hbnkiLCJzb3J0QnkiLCJvZmZzZXQiLCJ0b3RhbERvY3MiLCJzcGlsbCIsInBhZ2UiLCJNYXRoIiwiZmxvb3IiLCJmZXRjaExpbWl0IiwicmVzIiwic29ydCIsInNsaWNlIiwibWFwIiwidXBkYXRlIiwidXBkYXRlTWFueSIsInVwZGF0ZVJlc3VsdCIsImxlbmd0aCIsImRlbGV0ZSIsImRlbGV0ZVJlc3VsdCIsImVycm9ycyIsImRlbGV0ZU1hbnkiLCJjb3VudCIsImNyZWF0ZVNjaGVtYSIsImZpbGUiLCJzY2hlbWFDb2RlIiwiY29kZSIsInBhdGgiLCJhcHBlbmQiLCJvdmVyd3JpdGUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGVBQWUsUUFBUSxjQUFhO0FBRTdDLFNBQVNDLGNBQWMsUUFBUSxvQkFBbUI7QUFDbEQsU0FBU0MsZUFBZSxRQUFRLGNBQWE7QUFHN0MsT0FBTyxNQUFNQywwQkFBMEIscUJBQW9CO0FBQzNELE1BQU1DLHNCQUFzQjtBQUU1Qjs7Ozs7Ozs7O0NBU0MsR0FDRCxNQUFNQyxpQkFBaUMsQ0FBQ0MsZUFBZUM7SUFDckQ7OztHQUdDLEdBQ0QsU0FBU0MsU0FBU0MsT0FBYztRQUM5QixJQUFJRixPQUFPRyxlQUFlLEVBQUU7WUFDMUJDLFFBQVFDLEdBQUcsQ0FBQywyQkFBMkJIO1FBQ3pDO0lBQ0Y7SUFFQTs7O0dBR0MsR0FDRCxTQUFTSSxTQUFTSixPQUFjO1FBQzlCRSxRQUFRRyxLQUFLLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLTDtJQUMzQztJQUVBOzs7OztHQUtDLEdBQ0QsU0FBU00sb0JBQW9CQyxLQUFhO1FBQ3hDLE1BQU0sSUFBSWhCLGdCQUFnQixDQUFDLFdBQVcsRUFBRWdCLE1BQU0sd0ZBQXdGLENBQUM7SUFDekk7SUFFQTs7Ozs7O0dBTUMsR0FDRCxlQUFlQyxtQkFBbUJDLE9BQVksRUFBRUMsY0FBc0IsRUFBRUgsS0FBYTtRQUNuRixJQUFJLENBQUNHLGtCQUFrQixDQUFFQSxDQUFBQSxrQkFBa0JELFFBQVFFLFdBQVcsQUFBRCxHQUFJO1lBQy9ETCxvQkFBb0JDO1FBQ3RCO0lBQ0Y7SUFFQTs7OztHQUlDLEdBQ0QsTUFBTUssdUJBQXVCLENBQUNDLE9BQStCLENBQUE7WUFDM0QsQ0FBQ25CLHdCQUF3QixFQUFFO2dCQUFF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
|
|
650
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9hZGFwdGVyL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJldHRlckF1dGhFcnJvciB9IGZyb20gJ2JldHRlci1hdXRoJ1xuaW1wb3J0IHR5cGUgeyBBZGFwdGVyLCBCZXR0ZXJBdXRoT3B0aW9ucywgV2hlcmUgfSBmcm9tICdiZXR0ZXItYXV0aCdcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSAnLi9nZW5lcmF0ZS1zY2hlbWEnXG5pbXBvcnQgeyBjcmVhdGVUcmFuc2Zvcm0gfSBmcm9tICcuL3RyYW5zZm9ybSdcbmltcG9ydCB0eXBlIHsgUGF5bG9hZEFkYXB0ZXIgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgQmFzZVBheWxvYWQgfSBmcm9tICdwYXlsb2FkJ1xuaW1wb3J0IHsgQmV0dGVyQXV0aFNjaGVtYXMgfSBmcm9tICdAL2luZGV4J1xuaW1wb3J0IHsgTW9kZWxLZXkgfSBmcm9tICcuLi9nZW5lcmF0ZWQtdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBCRVRURVJfQVVUSF9DT05URVhUX0tFWSA9ICdwYXlsb2FkLWRiLWFkYXB0ZXInXG5jb25zdCBQQVlMT0FEX1FVRVJZX0RFUFRIID0gMFxuXG4vKipcbiAqIFBheWxvYWQgYWRhcHRlciBmb3IgQmV0dGVyIEF1dGhcbiAqXG4gKiBUaGlzIGFkYXB0ZXIgY29ubmVjdHMgQmV0dGVyIEF1dGggdG8gUGF5bG9hZCBDTVMsIGFsbG93aW5nIGF1dGhlbnRpY2F0aW9uXG4gKiBvcGVyYXRpb25zIHRvIGJlIHBlcmZvcm1lZCBhZ2FpbnN0IFBheWxvYWQgY29sbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHBheWxvYWRDbGllbnQgLSBUaGUgUGF5bG9hZCBDTVMgY2xpZW50IGluc3RhbmNlIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGl0XG4gKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgYWRhcHRlclxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBCZXR0ZXIgQXV0aCBhZGFwdGVyXG4gKi9cbmNvbnN0IHBheWxvYWRBZGFwdGVyOiBQYXlsb2FkQWRhcHRlciA9ICh7IHBheWxvYWRDbGllbnQsIGVuYWJsZURlYnVnTG9ncyA9IGZhbHNlLCBpZFR5cGUgfSkgPT4ge1xuICAvKipcbiAgICogTG9ncyBkZWJ1ZyBtZXNzYWdlcyBpZiBkZWJ1ZyBsb2dnaW5nIGlzIGVuYWJsZWRcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBsb2dcbiAgICovXG4gIGZ1bmN0aW9uIGRlYnVnTG9nKG1lc3NhZ2U6IGFueVtdKSB7XG4gICAgaWYgKGVuYWJsZURlYnVnTG9ncykge1xuICAgICAgY29uc29sZS5sb2coJ1twYXlsb2FkLWRiLWFkYXB0ZXJdJywgLi4ubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBlcnJvciBtZXNzYWdlc1xuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBlcnJvciBtZXNzYWdlIHRvIGxvZ1xuICAgKi9cbiAgZnVuY3Rpb24gZXJyb3JMb2cobWVzc2FnZTogYW55W10pIHtcbiAgICBjb25zb2xlLmVycm9yKGBbcGF5bG9hZC1kYi1hZGFwdGVyXWAsIC4uLm1lc3NhZ2UpXG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGFuIGVycm9yIHdoZW4gYSBjb2xsZWN0aW9uIHNsdWcgZG9lc24ndCBleGlzdFxuICAgKiBAcGFyYW0gbW9kZWwgLSBUaGUgbW9kZWwgbmFtZSB0aGF0IGNvdWxkbid0IGJlIGZvdW5kXG4gICAqIEB0aHJvd3Mge0JldHRlckF1dGhFcnJvcn0gV2hlbiB0aGUgY29sbGVjdGlvbiBkb2Vzbid0IGV4aXN0XG4gICAqIEByZXR1cm5zIE5ldmVyIC0gRnVuY3Rpb24gYWx3YXlzIHRocm93c1xuICAgKi9cbiAgZnVuY3Rpb24gY29sbGVjdGlvblNsdWdFcnJvcihtb2RlbDogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBCZXR0ZXJBdXRoRXJyb3IoYENvbGxlY3Rpb24gJHttb2RlbH0gZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBjaGVjayB5b3VyIHBheWxvYWQgY29sbGVjdGlvbiBzbHVncyBtYXRjaCB0aGUgYmV0dGVyIGF1dGggc2NoZW1hYClcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCBhIGNvbGxlY3Rpb24gZXhpc3RzIGluIFBheWxvYWRcbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgUGF5bG9hZCBjbGllbnQgaW5zdGFuY2VcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25TbHVnIC0gVGhlIGNvbGxlY3Rpb24gc2x1ZyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gbW9kZWwgLSBUaGUgbW9kZWwgbmFtZSBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICogQHRocm93cyB7QmV0dGVyQXV0aEVycm9yfSBXaGVuIHRoZSBjb2xsZWN0aW9uIGRvZXNuJ3QgZXhpc3RcbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlQ29sbGVjdGlvbihwYXlsb2FkOiBhbnksIGNvbGxlY3Rpb25TbHVnOiBzdHJpbmcsIG1vZGVsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb250ZXh0IG9iamVjdCBmb3IgUGF5bG9hZCBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0YSB0byBpbmNsdWRlIGluIHRoZSBjb250ZXh0XG4gICAqIEByZXR1cm5zIFRoZSBjb250ZXh0IG9iamVjdCB3aXRoIEJldHRlciBBdXRoIG1ldGFkYXRhXG4gICAqL1xuICBjb25zdCBjcmVhdGVBZGFwdGVyQ29udGV4dCA9IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiAoe1xuICAgIFtCRVRURVJfQVVUSF9DT05URVhUX0tFWV06IHsgLi4uZGF0YSB9XG4gIH0pXG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBQYXlsb2FkIGNsaWVudCwgaGFuZGxpbmcgYm90aCBmdW5jdGlvbiBhbmQgZGlyZWN0IHJlZmVyZW5jZXNcbiAgICogQHJldHVybnMgVGhlIHJlc29sdmVkIFBheWxvYWQgY2xpZW50XG4gICAqIEB0aHJvd3Mge0JldHRlckF1dGhFcnJvcn0gV2hlbiBCZXR0ZXIgQXV0aCBwbHVnaW4gaXMgbm90IGNvbmZpZ3VyZWRcbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYXlsb2FkQ2xpZW50KCkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eXBlb2YgcGF5bG9hZENsaWVudCA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IHBheWxvYWRDbGllbnQoKSA6IGF3YWl0IHBheWxvYWRDbGllbnRcbiAgICBpZiAoIXBheWxvYWQuY29uZmlnPy5jdXN0b20/Lmhhc0JldHRlckF1dGhQbHVnaW4pIHtcbiAgICAgIHRocm93IG5ldyBCZXR0ZXJBdXRoRXJyb3IoYFBheWxvYWQgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCB0aGUgYmV0dGVyLWF1dGggcGx1Z2luLiBQbGVhc2UgYWRkIHRoZSBwbHVnaW4gdG8geW91ciBwYXlsb2FkIGNvbmZpZy5gKVxuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZFxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBCZXR0ZXIgQXV0aCBhZGFwdGVyIGZvciBQYXlsb2FkXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQmV0dGVyIEF1dGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyBBIEJldHRlciBBdXRoIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25cbiAgICovXG4gIHJldHVybiAob3B0aW9uczogQmV0dGVyQXV0aE9wdGlvbnMpOiBBZGFwdGVyID0+IHtcbiAgICBjb25zdCB7IHRyYW5zZm9ybUlucHV0LCB0cmFuc2Zvcm1PdXRwdXQsIGNvbnZlcnRXaGVyZUNsYXVzZSwgY29udmVydFNlbGVjdCwgY29udmVydFNvcnQsIGdldENvbGxlY3Rpb25TbHVnLCBzaW5nbGVJZFF1ZXJ5IH0gPVxuICAgICAgY3JlYXRlVHJhbnNmb3JtKG9wdGlvbnMsIGVuYWJsZURlYnVnTG9ncylcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogJ3BheWxvYWQtYWRhcHRlcicsXG4gICAgICBhc3luYyBjcmVhdGU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sIFIgPSBUPih7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBkYXRhOiB2YWx1ZXMsXG4gICAgICAgIHNlbGVjdFxuICAgICAgfToge1xuICAgICAgICBtb2RlbDogc3RyaW5nXG4gICAgICAgIGRhdGE6IFRcbiAgICAgICAgc2VsZWN0Pzogc3RyaW5nW11cbiAgICAgIH0pOiBQcm9taXNlPFI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0Q29sbGVjdGlvblNsdWcobW9kZWwgYXMgTW9kZWxLZXkpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgY29sbGVjdGlvbiBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgICAgICAgYXdhaXQgdmFsaWRhdGVDb2xsZWN0aW9uKHBheWxvYWQsIGNvbGxlY3Rpb25TbHVnLCBtb2RlbClcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZElucHV0ID0gdHJhbnNmb3JtSW5wdXQoe1xuICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICBtb2RlbDogbW9kZWwgYXMgTW9kZWxLZXksXG4gICAgICAgICAgaWRUeXBlOiBpZFR5cGVcbiAgICAgICAgfSlcblxuICAgICAgICBkZWJ1Z0xvZyhbJ2NyZWF0ZScsIHsgY29sbGVjdGlvblNsdWcsIHRyYW5zZm9ybWVkSW5wdXQsIHNlbGVjdCB9XSlcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBheWxvYWQuY3JlYXRlKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgZGF0YTogdHJhbnNmb3JtZWRJbnB1dCxcbiAgICAgICAgICAgIHNlbGVjdDogY29udmVydFNlbGVjdChtb2RlbCBhcyBNb2RlbEtleSwgc2VsZWN0KSxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHsgbW9kZWwsIG9wZXJhdGlvbjogJ2NyZWF0ZScgfSksXG4gICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFJlc3VsdCA9IHRyYW5zZm9ybU91dHB1dCh7XG4gICAgICAgICAgICBkb2M6IHJlc3VsdCxcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbCBhcyBNb2RlbEtleVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICAnY3JlYXRlIHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdKVxuXG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVzdWx0IGFzIFJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIGNyZWF0aW5nOicsIG1vZGVsLCBlcnJvcl0pXG4gICAgICAgICAgcmV0dXJuIG51bGwgYXMgUlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgZmluZE9uZTxSPih7IG1vZGVsLCB3aGVyZSwgc2VsZWN0IH06IHsgbW9kZWw6IHN0cmluZzsgd2hlcmU6IFdoZXJlW107IHNlbGVjdD86IHN0cmluZ1tdIH0pOiBQcm9taXNlPFIgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldENvbGxlY3Rpb25TbHVnKG1vZGVsIGFzIE1vZGVsS2V5KVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGNvbGxlY3Rpb24gZXhpc3RzIGJlZm9yZSBwcm9jZWVkaW5nXG4gICAgICAgIGF3YWl0IHZhbGlkYXRlQ29sbGVjdGlvbihwYXlsb2FkLCBjb2xsZWN0aW9uU2x1ZywgbW9kZWwpXG5cbiAgICAgICAgY29uc3QgcGF5bG9hZFdoZXJlID0gY29udmVydFdoZXJlQ2xhdXNlKHtcbiAgICAgICAgICBpZFR5cGU6IGlkVHlwZSxcbiAgICAgICAgICBtb2RlbDogbW9kZWwgYXMgTW9kZWxLZXksXG4gICAgICAgICAgd2hlcmVcbiAgICAgICAgfSlcblxuICAgICAgICBkZWJ1Z0xvZyhbJ2ZpbmRPbmUnLCB7IGNvbGxlY3Rpb25TbHVnIH1dKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2luZ2xlSWQgPSBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSlcbiAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGxcblxuICAgICAgICAgIGlmIChzaW5nbGVJZCkge1xuICAgICAgICAgICAgZGVidWdMb2coWydmaW5kT25lQnlJRCcsIHsgY29sbGVjdGlvblNsdWcsIGlkOiBzaW5nbGVJZCB9XSlcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHBheWxvYWQuZmluZEJ5SUQoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgaWQ6IHNpbmdsZUlkLFxuICAgICAgICAgICAgICBzZWxlY3Q6IGNvbnZlcnRTZWxlY3QobW9kZWwgYXMgTW9kZWxLZXksIHNlbGVjdCksXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdmaW5kT25lQnlJRCdcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRIXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbJ2ZpbmRPbmVCeVdoZXJlJywgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlIH1dKVxuICAgICAgICAgICAgY29uc3QgZG9jcyA9IGF3YWl0IHBheWxvYWQuZmluZCh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgICBzZWxlY3Q6IGNvbnZlcnRTZWxlY3QobW9kZWwgYXMgTW9kZWxLZXksIHNlbGVjdCksXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdmaW5kT25lQnlXaGVyZSdcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgICBsaW1pdDogMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlc3VsdCA9IGRvY3MuZG9jc1swXVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUmVzdWx0ID0gdHJhbnNmb3JtT3V0cHV0PHR5cGVvZiByZXN1bHQgfCBudWxsPih7XG4gICAgICAgICAgICBkb2M6IHJlc3VsdCxcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbCBhcyBNb2RlbEtleVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICAnZmluZE9uZSByZXN1bHQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSlcblxuICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJlc3VsdCBhcyBSXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgJ3N0YXR1cycgaW4gZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yTG9nKFsnRXJyb3IgaW4gZmluZE9uZTogJywgZXJyb3JdKVxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyBmaW5kTWFueTxSPih7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICB3aGVyZSxcbiAgICAgICAgbGltaXQgPSAxMCxcbiAgICAgICAgc29ydEJ5LFxuICAgICAgICBvZmZzZXQgPSAwXG4gICAgICB9OiB7XG4gICAgICAgIG1vZGVsOiBzdHJpbmdcbiAgICAgICAgd2hlcmU/OiBXaGVyZVtdXG4gICAgICAgIGxpbWl0PzogbnVtYmVyXG4gICAgICAgIHNvcnRCeT86IHtcbiAgICAgICAgICBmaWVsZDogc3RyaW5nXG4gICAgICAgICAgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJ1xuICAgICAgICB9XG4gICAgICAgIG9mZnNldD86IG51bWJlclxuICAgICAgfSk6IFByb21pc2U8UltdPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldENvbGxlY3Rpb25TbHVnKG1vZGVsIGFzIE1vZGVsS2V5KVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGNvbGxlY3Rpb24gZXhpc3RzIGJlZm9yZSBwcm9jZWVkaW5nXG4gICAgICAgIGF3YWl0IHZhbGlkYXRlQ29sbGVjdGlvbihwYXlsb2FkLCBjb2xsZWN0aW9uU2x1ZywgbW9kZWwpXG5cbiAgICAgICAgY29uc3QgcGF5bG9hZFdoZXJlID0gY29udmVydFdoZXJlQ2xhdXNlKHtcbiAgICAgICAgICBpZFR5cGU6IGlkVHlwZSxcbiAgICAgICAgICBtb2RlbDogbW9kZWwgYXMgTW9kZWxLZXksXG4gICAgICAgICAgd2hlcmVcbiAgICAgICAgfSlcblxuICAgICAgICBkZWJ1Z0xvZyhbJ2ZpbmRNYW55JywgeyBjb2xsZWN0aW9uU2x1Zywgc29ydEJ5LCBsaW1pdCwgb2Zmc2V0IH1dKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IHJlc3VsdDoge1xuICAgICAgICAgICAgZG9jczogUmVjb3JkPHN0cmluZywgYW55PltdXG4gICAgICAgICAgICB0b3RhbERvY3M6IG51bWJlclxuICAgICAgICAgIH0gfCBudWxsID0gbnVsbFxuXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSWQgPSBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSlcbiAgICAgICAgICBpZiAoc2luZ2xlSWQpIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFsnZmluZE1hbnlCeVNpbmdsZUlEJywgeyBjb2xsZWN0aW9uU2x1ZywgaWQ6IHNpbmdsZUlkIH1dKVxuICAgICAgICAgICAgY29uc3QgZG9jID0gYXdhaXQgcGF5bG9hZC5maW5kQnlJRCh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICBpZDogc2luZ2xlSWQsXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnZmluZE1hbnlCeVNpbmdsZUlEJ1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlc3VsdCA9IHsgZG9jczogZG9jID8gW2RvY10gOiBbXSwgdG90YWxEb2NzOiBkb2MgPyAxIDogMCB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFsnZmluZE1hbnlCeVdoZXJlJywgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlIH1dKVxuICAgICAgICAgICAgY29uc3Qgc3BpbGwgPSBvZmZzZXQgJSBsaW1pdFxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gbGltaXQpICsgMVxuICAgICAgICAgICAgY29uc3QgZmV0Y2hMaW1pdCA9IHNwaWxsID8gbGltaXQgKyBzcGlsbCA6IGxpbWl0XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHBheWxvYWQuZmluZCh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgICBsaW1pdDogZmV0Y2hMaW1pdCxcbiAgICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgICAgc29ydDogY29udmVydFNvcnQobW9kZWwgYXMgTW9kZWxLZXksIHNvcnRCeSksXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnZmluZE1hbnlCeVdoZXJlJ1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlc3VsdCA9IHsgZG9jczogcmVzLmRvY3Muc2xpY2Uoc3BpbGwsIHNwaWxsICsgbGltaXQpLCB0b3RhbERvY3M6IHJlcy50b3RhbERvY3MgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUmVzdWx0ID1cbiAgICAgICAgICAgIHJlc3VsdD8uZG9jcy5tYXAoKGRvYykgPT5cbiAgICAgICAgICAgICAgdHJhbnNmb3JtT3V0cHV0KHtcbiAgICAgICAgICAgICAgICBkb2MsXG4gICAgICAgICAgICAgICAgbW9kZWw6IG1vZGVsIGFzIE1vZGVsS2V5XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApID8/IFtdXG5cbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICAnZmluZE1hbnkgcmVzdWx0JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkUmVzdWx0LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG5cbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWRSZXN1bHQgYXMgUltdXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgJ3N0YXR1cycgaW4gZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBbXSBhcyBSW11cbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3JMb2coWydFcnJvciBpbiBmaW5kTWFueTogJywgZXJyb3JdKVxuICAgICAgICAgIHJldHVybiBbXSBhcyBSW11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHVwZGF0ZTxSPih7IG1vZGVsLCB3aGVyZSwgdXBkYXRlIH06IHsgbW9kZWw6IHN0cmluZzsgd2hlcmU6IFdoZXJlW107IHVwZGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSk6IFByb21pc2U8UiB8IG51bGw+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0Q29sbGVjdGlvblNsdWcobW9kZWwgYXMgTW9kZWxLZXkpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgY29sbGVjdGlvbiBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgICAgICAgYXdhaXQgdmFsaWRhdGVDb2xsZWN0aW9uKHBheWxvYWQsIGNvbGxlY3Rpb25TbHVnLCBtb2RlbClcblxuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2Uoe1xuICAgICAgICAgIGlkVHlwZTogaWRUeXBlLFxuICAgICAgICAgIG1vZGVsOiBtb2RlbCBhcyBNb2RlbEtleSxcbiAgICAgICAgICB3aGVyZVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkSW5wdXQgPSB0cmFuc2Zvcm1JbnB1dCh7XG4gICAgICAgICAgZGF0YTogdXBkYXRlLFxuICAgICAgICAgIG1vZGVsOiBtb2RlbCBhcyBNb2RlbEtleSxcbiAgICAgICAgICBpZFR5cGU6IGlkVHlwZVxuICAgICAgICB9KVxuXG4gICAgICAgIGRlYnVnTG9nKFsndXBkYXRlJywgeyBjb2xsZWN0aW9uU2x1ZywgdXBkYXRlIH1dKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsXG4gICAgICAgICAgY29uc3QgaWQgPSBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSlcblxuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgZGVidWdMb2coWyd1cGRhdGVCeUlEJywgeyBjb2xsZWN0aW9uU2x1ZywgaWQgfV0pXG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLnVwZGF0ZSh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgZGF0YTogdHJhbnNmb3JtZWRJbnB1dCxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHsgbW9kZWwsIG9wZXJhdGlvbjogJ3VwZGF0ZUJ5SUQnIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbJ3VwZGF0ZUJ5V2hlcmUnLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pXG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBwYXlsb2FkLnVwZGF0ZSh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgICBkYXRhOiB0cmFuc2Zvcm1lZElucHV0LFxuICAgICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZUJ5V2hlcmUnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmVzdWx0ID0gZG9jLmRvY3NbMF1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFJlc3VsdCA9IHRyYW5zZm9ybU91dHB1dDx0eXBlb2YgcmVzdWx0IHwgbnVsbD4oe1xuICAgICAgICAgICAgZG9jOiByZXN1bHQsXG4gICAgICAgICAgICBtb2RlbDogbW9kZWwgYXMgTW9kZWxLZXlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgZGVidWdMb2coW1xuICAgICAgICAgICAgJ3VwZGF0ZS1yZXN1bHQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSlcblxuICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJlc3VsdCBhcyBSXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgJ3N0YXR1cycgaW4gZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yTG9nKFsnRXJyb3IgaW4gdXBkYXRlOiAnLCBlcnJvcl0pXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHVwZGF0ZU1hbnkoeyBtb2RlbCwgd2hlcmUsIHVwZGF0ZSB9OiB7IG1vZGVsOiBzdHJpbmc7IHdoZXJlOiBXaGVyZVtdOyB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc29sdmVQYXlsb2FkQ2xpZW50KClcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRDb2xsZWN0aW9uU2x1Zyhtb2RlbCBhcyBNb2RlbEtleSlcblxuICAgICAgICAvLyBWYWxpZGF0ZSBjb2xsZWN0aW9uIGV4aXN0cyBiZWZvcmUgcHJvY2VlZGluZ1xuICAgICAgICBhd2FpdCB2YWxpZGF0ZUNvbGxlY3Rpb24ocGF5bG9hZCwgY29sbGVjdGlvblNsdWcsIG1vZGVsKVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRXaGVyZSA9IGNvbnZlcnRXaGVyZUNsYXVzZSh7XG4gICAgICAgICAgaWRUeXBlOiBpZFR5cGUsXG4gICAgICAgICAgbW9kZWw6IG1vZGVsIGFzIE1vZGVsS2V5LFxuICAgICAgICAgIHdoZXJlXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRJbnB1dCA9IHRyYW5zZm9ybUlucHV0KHtcbiAgICAgICAgICBkYXRhOiB1cGRhdGUsXG4gICAgICAgICAgbW9kZWw6IG1vZGVsIGFzIE1vZGVsS2V5LFxuICAgICAgICAgIGlkVHlwZTogaWRUeXBlXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVidWdMb2coWyd1cGRhdGVNYW55JywgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlLCB1cGRhdGUgfV0pXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGRvY3M6IHVwZGF0ZVJlc3VsdCB9ID0gYXdhaXQgcGF5bG9hZC51cGRhdGUoe1xuICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgZGF0YTogdHJhbnNmb3JtZWRJbnB1dCxcbiAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiAndXBkYXRlTWFueScgfSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgZGVidWdMb2coW1xuICAgICAgICAgICAgJ3VwZGF0ZU1hbnkgcmVzdWx0JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHJlc3VsdDogdXBkYXRlUmVzdWx0LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVzdWx0Py5sZW5ndGggfHwgMFxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdzdGF0dXMnIGluIGVycm9yICYmIGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIHVwZGF0ZU1hbnk6ICcsIGVycm9yXSlcbiAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgZGVsZXRlKHsgbW9kZWwsIHdoZXJlIH06IHsgbW9kZWw6IHN0cmluZzsgd2hlcmU6IFdoZXJlW10gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc29sdmVQYXlsb2FkQ2xpZW50KClcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRDb2xsZWN0aW9uU2x1Zyhtb2RlbCBhcyBNb2RlbEtleSlcblxuICAgICAgICAvLyBWYWxpZGF0ZSBjb2xsZWN0aW9uIGV4aXN0cyBiZWZvcmUgcHJvY2VlZGluZ1xuICAgICAgICBhd2FpdCB2YWxpZGF0ZUNvbGxlY3Rpb24ocGF5bG9hZCwgY29sbGVjdGlvblNsdWcsIG1vZGVsKVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRXaGVyZSA9IGNvbnZlcnRXaGVyZUNsYXVzZSh7XG4gICAgICAgICAgaWRUeXBlOiBpZFR5cGUsXG4gICAgICAgICAgbW9kZWw6IG1vZGVsIGFzIE1vZGVsS2V5LFxuICAgICAgICAgIHdoZXJlXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVidWdMb2coWydkZWxldGUnLCB7IGNvbGxlY3Rpb25TbHVnIH1dKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IGRlbGV0ZVJlc3VsdDoge1xuICAgICAgICAgICAgZG9jOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbFxuICAgICAgICAgICAgZXJyb3JzOiBhbnlbXVxuICAgICAgICAgIH0gfCBudWxsID0gbnVsbFxuXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSWQgPSBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSlcbiAgICAgICAgICBpZiAoc2luZ2xlSWQpIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFsnZGVsZXRlQnlJRCcsIHsgY29sbGVjdGlvblNsdWcsIGlkOiBzaW5nbGVJZCB9XSlcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIGlkOiBzaW5nbGVJZCxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHsgbW9kZWwsIG9wZXJhdGlvbjogJ2RlbGV0ZUJ5SUQnIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZGVsZXRlUmVzdWx0ID0geyBkb2MsIGVycm9yczogW10gfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbJ2RlbGV0ZUJ5V2hlcmUnLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pXG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBwYXlsb2FkLmRlbGV0ZSh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ2RlbGV0ZUJ5V2hlcmUnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZGVsZXRlUmVzdWx0ID0geyBkb2M6IGRvYy5kb2NzWzBdLCBlcnJvcnM6IFtdIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICAnZGVsZXRlIHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICByZXN1bHQ6IGRlbGV0ZVJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdzdGF0dXMnIGluIGVycm9yICYmIGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3JMb2coWydFcnJvciBpbiBkZWxldGU6ICcsIGVycm9yXSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGRlbGV0ZU1hbnkoeyBtb2RlbCwgd2hlcmUgfTogeyBtb2RlbDogc3RyaW5nOyB3aGVyZTogV2hlcmVbXSB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0Q29sbGVjdGlvblNsdWcobW9kZWwgYXMgTW9kZWxLZXkpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgY29sbGVjdGlvbiBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgICAgICAgYXdhaXQgdmFsaWRhdGVDb2xsZWN0aW9uKHBheWxvYWQsIGNvbGxlY3Rpb25TbHVnLCBtb2RlbClcblxuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2Uoe1xuICAgICAgICAgIGlkVHlwZTogaWRUeXBlLFxuICAgICAgICAgIG1vZGVsOiBtb2RlbCBhcyBNb2RlbEtleSxcbiAgICAgICAgICB3aGVyZVxuICAgICAgICB9KVxuXG4gICAgICAgIGRlYnVnTG9nKFsnZGVsZXRlTWFueScsIHsgY29sbGVjdGlvblNsdWcsIHBheWxvYWRXaGVyZSB9XSlcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZVJlc3VsdCA9IGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiAnZGVsZXRlTWFueScgfSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgZGVidWdMb2coW1xuICAgICAgICAgICAgJ2RlbGV0ZU1hbnkgcmVzdWx0JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHJlc3VsdDogZGVsZXRlUmVzdWx0LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG5cbiAgICAgICAgICByZXR1cm4gZGVsZXRlUmVzdWx0LmRvY3MubGVuZ3RoXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgJ3N0YXR1cycgaW4gZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiAwXG4gICAgICAgICAgfVxuICAgICAgICAgIGVycm9yTG9nKFsnRXJyb3IgaW4gZGVsZXRlTWFueTogJywgZXJyb3JdKVxuICAgICAgICAgIHJldHVybiAwXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyBjb3VudCh7IG1vZGVsLCB3aGVyZSB9OiB7IG1vZGVsOiBzdHJpbmc7IHdoZXJlPzogV2hlcmVbXSB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0Q29sbGVjdGlvblNsdWcobW9kZWwgYXMgTW9kZWxLZXkpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgY29sbGVjdGlvbiBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgICAgICAgYXdhaXQgdmFsaWRhdGVDb2xsZWN0aW9uKHBheWxvYWQsIGNvbGxlY3Rpb25TbHVnLCBtb2RlbClcblxuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2Uoe1xuICAgICAgICAgIGlkVHlwZTogaWRUeXBlLFxuICAgICAgICAgIG1vZGVsOiBtb2RlbCBhcyBNb2RlbEtleSxcbiAgICAgICAgICB3aGVyZVxuICAgICAgICB9KVxuXG4gICAgICAgIGRlYnVnTG9nKFsnY291bnQnLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmNvdW50KHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiAnY291bnQnIH0pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgICdjb3VudCByZXN1bHQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgcmVzdWx0OiB7IHRvdGFsRG9jczogcmVzdWx0LnRvdGFsRG9jcyB9LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvdGFsRG9jc1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdzdGF0dXMnIGluIGVycm9yICYmIGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIGNvdW50OiAnLCBlcnJvcl0pXG4gICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZVNjaGVtYTogYXN5bmMgKG9wdGlvbnMsIGZpbGUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hQ29kZSA9IGF3YWl0IGdlbmVyYXRlU2NoZW1hKG9wdGlvbnMpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29kZTogc2NoZW1hQ29kZSxcbiAgICAgICAgICBwYXRoOiBmaWxlIHx8ICdzY2hlbWEudHMnLFxuICAgICAgICAgIGFwcGVuZDogZmFsc2UsXG4gICAgICAgICAgb3ZlcndyaXRlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGVuYWJsZURlYnVnTG9ncyxcbiAgICAgICAgaWRUeXBlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IGdlbmVyYXRlU2NoZW1hLCBwYXlsb2FkQWRhcHRlciB9XG4iXSwibmFtZXMiOlsiQmV0dGVyQXV0aEVycm9yIiwiZ2VuZXJhdGVTY2hlbWEiLCJjcmVhdGVUcmFuc2Zvcm0iLCJCRVRURVJfQVVUSF9DT05URVhUX0tFWSIsIlBBWUxPQURfUVVFUllfREVQVEgiLCJwYXlsb2FkQWRhcHRlciIsInBheWxvYWRDbGllbnQiLCJlbmFibGVEZWJ1Z0xvZ3MiLCJpZFR5cGUiLCJkZWJ1Z0xvZyIsIm1lc3NhZ2UiLCJjb25zb2xlIiwibG9nIiwiZXJyb3JMb2ciLCJlcnJvciIsImNvbGxlY3Rpb25TbHVnRXJyb3IiLCJtb2RlbCIsInZhbGlkYXRlQ29sbGVjdGlvbiIsInBheWxvYWQiLCJjb2xsZWN0aW9uU2x1ZyIsImNvbGxlY3Rpb25zIiwiY3JlYXRlQWRhcHRlckNvbnRleHQiLCJkYXRhIiwicmVzb2x2ZVBheWxvYWRDbGllbnQiLCJjb25maWciLCJjdXN0b20iLCJoYXNCZXR0ZXJBdXRoUGx1Z2luIiwib3B0aW9ucyIsInRyYW5zZm9ybUlucHV0IiwidHJhbnNmb3JtT3V0cHV0IiwiY29udmVydFdoZXJlQ2xhdXNlIiwiY29udmVydFNlbGVjdCIsImNvbnZlcnRTb3J0IiwiZ2V0Q29sbGVjdGlvblNsdWciLCJzaW5nbGVJZFF1ZXJ5IiwiaWQiLCJjcmVhdGUiLCJ2YWx1ZXMiLCJzZWxlY3QiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJ0cmFuc2Zvcm1lZElucHV0IiwicmVzdWx0IiwiY29sbGVjdGlvbiIsImNvbnRleHQiLCJvcGVyYXRpb24iLCJkZXB0aCIsInRyYW5zZm9ybWVkUmVzdWx0IiwiZG9jIiwiZHVyYXRpb24iLCJmaW5kT25lIiwid2hlcmUiLCJwYXlsb2FkV2hlcmUiLCJzaW5nbGVJZCIsImZpbmRCeUlEIiwiZG9jcyIsImZpbmQiLCJsaW1pdCIsIkVycm9yIiwic3RhdHVzIiwiZmluZE1hbnkiLCJzb3J0QnkiLCJvZmZzZXQiLCJ0b3RhbERvY3MiLCJzcGlsbCIsInBhZ2UiLCJNYXRoIiwiZmxvb3IiLCJmZXRjaExpbWl0IiwicmVzIiwic29ydCIsInNsaWNlIiwibWFwIiwidXBkYXRlIiwidXBkYXRlTWFueSIsInVwZGF0ZVJlc3VsdCIsImxlbmd0aCIsImRlbGV0ZSIsImRlbGV0ZVJlc3VsdCIsImVycm9ycyIsImRlbGV0ZU1hbnkiLCJjb3VudCIsImNyZWF0ZVNjaGVtYSIsImZpbGUiLCJzY2hlbWFDb2RlIiwiY29kZSIsInBhdGgiLCJhcHBlbmQiLCJvdmVyd3JpdGUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGVBQWUsUUFBUSxjQUFhO0FBRTdDLFNBQVNDLGNBQWMsUUFBUSxvQkFBbUI7QUFDbEQsU0FBU0MsZUFBZSxRQUFRLGNBQWE7QUFNN0MsT0FBTyxNQUFNQywwQkFBMEIscUJBQW9CO0FBQzNELE1BQU1DLHNCQUFzQjtBQUU1Qjs7Ozs7Ozs7O0NBU0MsR0FDRCxNQUFNQyxpQkFBaUMsQ0FBQyxFQUFFQyxhQUFhLEVBQUVDLGtCQUFrQixLQUFLLEVBQUVDLE1BQU0sRUFBRTtJQUN4Rjs7O0dBR0MsR0FDRCxTQUFTQyxTQUFTQyxPQUFjO1FBQzlCLElBQUlILGlCQUFpQjtZQUNuQkksUUFBUUMsR0FBRyxDQUFDLDJCQUEyQkY7UUFDekM7SUFDRjtJQUVBOzs7R0FHQyxHQUNELFNBQVNHLFNBQVNILE9BQWM7UUFDOUJDLFFBQVFHLEtBQUssQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEtBQUtKO0lBQzNDO0lBRUE7Ozs7O0dBS0MsR0FDRCxTQUFTSyxvQkFBb0JDLEtBQWE7UUFDeEMsTUFBTSxJQUFJaEIsZ0JBQWdCLENBQUMsV0FBVyxFQUFFZ0IsTUFBTSx3RkFBd0YsQ0FBQztJQUN6STtJQUVBOzs7Ozs7R0FNQyxHQUNELGVBQWVDLG1CQUFtQkMsT0FBWSxFQUFFQyxjQUFzQixFQUFFSCxLQUFhO1FBQ25GLElBQUksQ0FBQ0csa0JBQWtCLENBQUVBLENBQUFBLGtCQUFrQkQsUUFBUUUsV0FBVyxBQUFELEdBQUk7WUFDL0RMLG9CQUFvQkM7UUFDdEI7SUFDRjtJQUVBOzs7O0dBSUMsR0FDRCxNQUFNSyx1QkFBdUIsQ0FBQ0MsT0FBK0IsQ0FBQTtZQUMzRCxDQUFDbkIsd0JBQXdCLEVBQUU7Z0JBQUUsR0FBR21CLElBQUk7WUFBQztRQUN2QyxDQUFBO0lBRUE7Ozs7R0FJQyxHQUNELGVBQWVDO1FBQ2IsTUFBTUwsVUFBVSxPQUFPWixrQkFBa0IsYUFBYSxNQUFNQSxrQkFBa0IsTUFBTUE7UUFDcEYsSUFBSSxDQUFDWSxRQUFRTSxNQUFNLEVBQUVDLFFBQVFDLHFCQUFxQjtZQUNoRCxNQUFNLElBQUkxQixnQkFBZ0IsQ0FBQyxvR0FBb0csQ0FBQztRQUNsSTtRQUNBLE9BQU9rQjtJQUNUO0lBRUE7Ozs7R0FJQyxHQUNELE9BQU8sQ0FBQ1M7UUFDTixNQUFNLEVBQUVDLGNBQWMsRUFBRUMsZUFBZSxFQUFFQyxrQkFBa0IsRUFBRUMsYUFBYSxFQUFFQyxXQUFXLEVBQUVDLGlCQUFpQixFQUFFQyxhQUFhLEVBQUUsR0FDekhoQyxnQkFBZ0J5QixTQUFTcEI7UUFFM0IsT0FBTztZQUNMNEIsSUFBSTtZQUNKLE1BQU1DLFFBQTZDLEVBQ2pEcEIsS0FBSyxFQUNMTSxNQUFNZSxNQUFNLEVBQ1pDLE1BQU0sRUFLUDtnQkFDQyxNQUFNQyxRQUFRQyxLQUFLQyxHQUFHO2dCQUN0QixNQUFNdkIsVUFBVSxNQUFNSztnQkFDdEIsTUFBTUosaUJBQWlCYyxrQkFBa0JqQjtnQkFFekMsK0NBQStDO2dCQUMvQyxNQUFNQyxtQkFBbUJDLFNBQVNDLGdCQUFnQkg7Z0JBRWxELE1BQU0wQixtQkFBbUJkLGVBQWU7b0JBQ3RDTixNQUFNZTtvQkFDTnJCLE9BQU9BO29CQUNQUixRQUFRQTtnQkFDVjtnQkFFQUMsU0FBUztvQkFBQztvQkFBVTt3QkFBRVU7d0JBQWdCdUI7d0JBQWtCSjtvQkFBTztpQkFBRTtnQkFFakUsSUFBSTtvQkFDRixNQUFNSyxTQUFTLE1BQU16QixRQUFRa0IsTUFBTSxDQUFDO3dCQUNsQ1EsWUFBWXpCO3dCQUNaRyxNQUFNb0I7d0JBQ05KLFFBQVFQLGNBQWNmLE9BQW1Cc0I7d0JBQ3pDTyxTQUFTeEIscUJBQXFCOzRCQUFFTDs0QkFBTzhCLFdBQVc7d0JBQVM7d0JBQzNEQyxPQUFPM0M7b0JBQ1Q7b0JBRUEsTUFBTTRDLG9CQUFvQm5CLGdCQUFnQjt3QkFDeENvQixLQUFLTjt3QkFDTDNCLE9BQU9BO29CQUNUO29CQUVBUCxTQUFTO3dCQUNQO3dCQUNBOzRCQUNFVTs0QkFDQTZCOzRCQUNBRSxVQUFVLEdBQUdWLEtBQUtDLEdBQUcsS0FBS0YsTUFBTSxFQUFFLENBQUM7d0JBQ3JDO3FCQUNEO29CQUVELE9BQU9TO2dCQUNULEVBQUUsT0FBT2xDLE9BQU87b0JBQ2RELFNBQVM7d0JBQUM7d0JBQXNCRzt3QkFBT0Y7cUJBQU07b0JBQzdDLE9BQU87Z0JBQ1Q7WUFDRjtZQUNBLE1BQU1xQyxTQUFXLEVBQUVuQyxLQUFLLEVBQUVvQyxLQUFLLEVBQUVkLE1BQU0sRUFBd0Q7Z0JBQzdGLE1BQU1DLFFBQVFDLEtBQUtDLEdBQUc7Z0JBQ3RCLE1BQU12QixVQUFVLE1BQU1LO2dCQUN0QixNQUFNSixpQkFBaUJjLGtCQUFrQmpCO2dCQUV6QywrQ0FBK0M7Z0JBQy9DLE1BQU1DLG1CQUFtQkMsU0FBU0MsZ0JBQWdCSDtnQkFFbEQsTUFBTXFDLGVBQWV2QixtQkFBbUI7b0JBQ3RDdEIsUUFBUUE7b0JBQ1JRLE9BQU9BO29CQUNQb0M7Z0JBQ0Y7Z0JBRUEzQyxTQUFTO29CQUFDO29CQUFXO3dCQUFFVTtvQkFBZTtpQkFBRTtnQkFFeEMsSUFBSTtvQkFDRixNQUFNbUMsV0FBV3BCLGNBQWNtQjtvQkFDL0IsSUFBSVYsU0FBcUM7b0JBRXpDLElBQUlXLFVBQVU7d0JBQ1o3QyxTQUFTOzRCQUFDOzRCQUFlO2dDQUFFVTtnQ0FBZ0JnQixJQUFJbUI7NEJBQVM7eUJBQUU7d0JBQzFEWCxTQUFTLE1BQU16QixRQUFRcUMsUUFBUSxDQUFDOzRCQUM5QlgsWUFBWXpCOzRCQUNaZ0IsSUFBSW1COzRCQUNKaEIsUUFBUVAsY0FBY2YsT0FBbUJzQjs0QkFDekNPLFNBQVN4QixxQkFBcUI7Z0NBQzVCTDtnQ0FDQThCLFdBQVc7NEJBQ2I7NEJBQ0FDLE9BQU8zQzt3QkFDVDtvQkFDRixPQUFPO3dCQUNMSyxTQUFTOzRCQUFDOzRCQUFrQjtnQ0FBRVU7Z0NBQWdCa0M7NEJBQWE7eUJBQUU7d0JBQzdELE1BQU1HLE9BQU8sTUFBTXRDLFFBQVF1QyxJQUFJLENBQUM7NEJBQzlCYixZQUFZekI7NEJBQ1ppQyxPQUFPQzs0QkFDUGYsUUFBUVAsY0FBY2YsT0FBbUJzQjs0QkFDekNPLFNBQVN4QixxQkFBcUI7Z0NBQzVCTDtnQ0FDQThCLFdBQVc7NEJBQ2I7NEJBQ0FDLE9BQU8zQzs0QkFDUHNELE9BQU87d0JBQ1Q7d0JBQ0FmLFNBQVNhLEtBQUtBLElBQUksQ0FBQyxFQUFFO29CQUN2QjtvQkFFQSxNQUFNUixvQkFBb0JuQixnQkFBc0M7d0JBQzlEb0IsS0FBS047d0JBQ0wzQixPQUFPQTtvQkFDVDtvQkFFQVAsU0FBUzt3QkFDUDt3QkFDQTs0QkFDRVU7NEJBQ0E2Qjs0QkFDQUUsVUFBVSxHQUFHVixLQUFLQyxHQUFHLEtBQUtGLE1BQU0sRUFBRSxDQUFDO3dCQUNyQztxQkFDRDtvQkFFRCxPQUFPUztnQkFDVCxFQUFFLE9BQU9sQyxPQUFPO29CQUNkLElBQUlBLGlCQUFpQjZDLFNBQVMsWUFBWTdDLFNBQVNBLE1BQU04QyxNQUFNLEtBQUssS0FBSzt3QkFDdkUsT0FBTztvQkFDVDtvQkFDQS9DLFNBQVM7d0JBQUM7d0JBQXNCQztxQkFBTTtvQkFDdEMsT0FBTztnQkFDVDtZQUNGO1lBQ0EsTUFBTStDLFVBQVksRUFDaEI3QyxLQUFLLEVBQ0xvQyxLQUFLLEVBQ0xNLFFBQVEsRUFBRSxFQUNWSSxNQUFNLEVBQ05DLFNBQVMsQ0FBQyxFQVVYO2dCQUNDLE1BQU14QixRQUFRQyxLQUFLQyxHQUFHO2dCQUN0QixNQUFNdkIsVUFBVSxNQUFNSztnQkFDdEIsTUFBTUosaUJBQWlCYyxrQkFBa0JqQjtnQkFFekMsK0NBQStDO2dCQUMvQyxNQUFNQyxtQkFBbUJDLFNBQVNDLGdCQUFnQkg7Z0JBRWxELE1BQU1xQyxlQUFldkIsbUJBQW1CO29CQUN0Q3RCLFFBQVFBO29CQUNSUSxPQUFPQTtvQkFDUG9DO2dCQUNGO2dCQUVBM0MsU0FBUztvQkFBQztvQkFBWTt3QkFBRVU7d0JBQWdCMkM7d0JBQVFKO3dCQUFPSztvQkFBTztpQkFBRTtnQkFFaEUsSUFBSTtvQkFDRixJQUFJcEIsU0FHTztvQkFFWCxNQUFNVyxXQUFXcEIsY0FBY21CO29CQUMvQixJQUFJQyxVQUFVO3dCQUNaN0MsU0FBUzs0QkFBQzs0QkFBc0I7Z0NBQUVVO2dDQUFnQmdCLElBQUltQjs0QkFBUzt5QkFBRTt3QkFDakUsTUFBTUwsTUFBTSxNQUFNL0IsUUFBUXFDLFFBQVEsQ0FBQzs0QkFDakNYLFlBQVl6Qjs0QkFDWmdCLElBQUltQjs0QkFDSlAsT0FBTzNDOzRCQUNQeUMsU0FBU3hCLHFCQUFxQjtnQ0FDNUJMO2dDQUNBOEIsV0FBVzs0QkFDYjt3QkFDRjt3QkFDQUgsU0FBUzs0QkFBRWEsTUFBTVAsTUFBTTtnQ0FBQ0E7NkJBQUksR0FBRyxFQUFFOzRCQUFFZSxXQUFXZixNQUFNLElBQUk7d0JBQUU7b0JBQzVELE9BQU87d0JBQ0x4QyxTQUFTOzRCQUFDOzRCQUFtQjtnQ0FBRVU7Z0NBQWdCa0M7NEJBQWE7eUJBQUU7d0JBQzlELE1BQU1ZLFFBQVFGLFNBQVNMO3dCQUN2QixNQUFNUSxPQUFPQyxLQUFLQyxLQUFLLENBQUNMLFNBQVNMLFNBQVM7d0JBQzFDLE1BQU1XLGFBQWFKLFFBQVFQLFFBQVFPLFFBQVFQO3dCQUUzQyxNQUFNWSxNQUFNLE1BQU1wRCxRQUFRdUMsSUFBSSxDQUFDOzRCQUM3QmIsWUFBWXpCOzRCQUNaaUMsT0FBT0M7NEJBQ1BLLE9BQU9XOzRCQUNQSCxNQUFNQTs0QkFDTkssTUFBTXZDLFlBQVloQixPQUFtQjhDOzRCQUNyQ2YsT0FBTzNDOzRCQUNQeUMsU0FBU3hCLHFCQUFxQjtnQ0FDNUJMO2dDQUNBOEIsV0FBVzs0QkFDYjt3QkFDRjt3QkFDQUgsU0FBUzs0QkFBRWEsTUFBTWMsSUFBSWQsSUFBSSxDQUFDZ0IsS0FBSyxDQUFDUCxPQUFPQSxRQUFRUDs0QkFBUU0sV0FBV00sSUFBSU4sU0FBUzt3QkFBQztvQkFDbEY7b0JBRUEsTUFBTWhCLG9CQUNKTCxRQUFRYSxLQUFLaUIsSUFBSSxDQUFDeEIsTUFDaEJwQixnQkFBZ0I7NEJBQ2RvQjs0QkFDQWpDLE9BQU9BO3dCQUNULE9BQ0csRUFBRTtvQkFFVFAsU0FBUzt3QkFDUDt3QkFDQTs0QkFDRVU7NEJBQ0E2Qjs0QkFDQUUsVUFBVSxHQUFHVixLQUFLQyxHQUFHLEtBQUtGLE1BQU0sRUFBRSxDQUFDO3dCQUNyQztxQkFDRDtvQkFFRCxPQUFPUztnQkFDVCxFQUFFLE9BQU9sQyxPQUFPO29CQUNkLElBQUlBLGlCQUFpQjZDLFNBQVMsWUFBWTdDLFNBQVNBLE1BQU04QyxNQUFNLEtBQUssS0FBSzt3QkFDdkUsT0FBTyxFQUFFO29CQUNYO29CQUNBL0MsU0FBUzt3QkFBQzt3QkFBdUJDO3FCQUFNO29CQUN2QyxPQUFPLEVBQUU7Z0JBQ1g7WUFDRjtZQUNBLE1BQU00RCxRQUFVLEVBQUUxRCxLQUFLLEVBQUVvQyxLQUFLLEVBQUVzQixNQUFNLEVBQXNFO2dCQUMxRyxNQUFNbkMsUUFBUUMsS0FBS0MsR0FBRztnQkFDdEIsTUFBTXZCLFVBQVUsTUFBTUs7Z0JBQ3RCLE1BQU1KLGlCQUFpQmMsa0JBQWtCakI7Z0JBRXpDLCtDQUErQztnQkFDL0MsTUFBTUMsbUJBQW1CQyxTQUFTQyxnQkFBZ0JIO2dCQUVsRCxNQUFNcUMsZUFBZXZCLG1CQUFtQjtvQkFDdEN0QixRQUFRQTtvQkFDUlEsT0FBT0E7b0JBQ1BvQztnQkFDRjtnQkFFQSxNQUFNVixtQkFBbUJkLGVBQWU7b0JBQ3RDTixNQUFNb0Q7b0JBQ04xRCxPQUFPQTtvQkFDUFIsUUFBUUE7Z0JBQ1Y7Z0JBRUFDLFNBQVM7b0JBQUM7b0JBQVU7d0JBQUVVO3dCQUFnQnVEO29CQUFPO2lCQUFFO2dCQUUvQyxJQUFJO29CQUNGLElBQUkvQixTQUFxQztvQkFDekMsTUFBTVIsS0FBS0QsY0FBY21CO29CQUV6QixJQUFJbEIsSUFBSTt3QkFDTjFCLFNBQVM7NEJBQUM7NEJBQWM7Z0NBQUVVO2dDQUFnQmdCOzRCQUFHO3lCQUFFO3dCQUMvQ1EsU0FBUyxNQUFNekIsUUFBUXdELE1BQU0sQ0FBQzs0QkFDNUI5QixZQUFZekI7NEJBQ1pnQjs0QkFDQWIsTUFBTW9COzRCQUNOSyxPQUFPM0M7NEJBQ1B5QyxTQUFTeEIscUJBQXFCO2dDQUFFTDtnQ0FBTzhCLFdBQVc7NEJBQWE7d0JBQ2pFO29CQUNGLE9BQU87d0JBQ0xyQyxTQUFTOzRCQUFDOzRCQUFpQjtnQ0FBRVU7Z0NBQWdCa0M7NEJBQWE7eUJBQUU7d0JBQzVELE1BQU1KLE1BQU0sTUFBTS9CLFFBQVF3RCxNQUFNLENBQUM7NEJBQy9COUIsWUFBWXpCOzRCQUNaaUMsT0FBT0M7NEJBQ1AvQixNQUFNb0I7NEJBQ05LLE9BQU8zQzs0QkFDUHlDLFNBQVN4QixxQkFBcUI7Z0NBQzVCTDtnQ0FDQThCLFdBQVc7NEJBQ2I7d0JBQ0Y7d0JBQ0FILFNBQVNNLElBQUlPLElBQUksQ0FBQyxFQUFFO29CQUN0QjtvQkFFQSxNQUFNUixvQkFBb0JuQixnQkFBc0M7d0JBQzlEb0IsS0FBS047d0JBQ0wzQixPQUFPQTtvQkFDVDtvQkFFQVAsU0FBUzt3QkFDUDt3QkFDQTs0QkFDRVU7NEJBQ0E2Qjs0QkFDQUUsVUFBVSxHQUFHVixLQUFLQyxHQUFHLEtBQUtGLE1BQU0sRUFBRSxDQUFDO3dCQUNyQztxQkFDRDtvQkFFRCxPQUFPUztnQkFDVCxFQUFFLE9BQU9sQyxPQUFPO29CQUNkLElBQUlBLGlCQUFpQjZDLFNBQVMsWUFBWTdDLFNBQVNBLE1BQU04QyxNQUFNLEtBQUssS0FBSzt3QkFDdkUsT0FBTztvQkFDVDtvQkFDQS9DLFNBQVM7d0JBQUM7d0JBQXFCQztxQkFBTTtvQkFDckMsT0FBTztnQkFDVDtZQUNGO1lBQ0EsTUFBTTZELFlBQVcsRUFBRTNELEtBQUssRUFBRW9DLEtBQUssRUFBRXNCLE1BQU0sRUFBc0U7Z0JBQzNHLE1BQU1uQyxRQUFRQyxLQUFLQyxHQUFHO2dCQUN0QixNQUFNdkIsVUFBVSxNQUFNSztnQkFDdEIsTUFBTUosaUJBQWlCYyxrQkFBa0JqQjtnQkFFekMsK0NBQStDO2dCQUMvQyxNQUFNQyxtQkFBbUJDLFNBQVNDLGdCQUFnQkg7Z0JBRWxELE1BQU1xQyxlQUFldkIsbUJBQW1CO29CQUN0Q3RCLFFBQVFBO29CQUNSUSxPQUFPQTtvQkFDUG9DO2dCQUNGO2dCQUVBLE1BQU1WLG1CQUFtQmQsZUFBZTtvQkFDdENOLE1BQU1vRDtvQkFDTjFELE9BQU9BO29CQUNQUixRQUFRQTtnQkFDVjtnQkFFQUMsU0FBUztvQkFBQztvQkFBYzt3QkFBRVU7d0JBQWdCa0M7d0JBQWNxQjtvQkFBTztpQkFBRTtnQkFFakUsSUFBSTtvQkFDRixNQUFNLEVBQUVsQixNQUFNb0IsWUFBWSxFQUFFLEdBQUcsTUFBTTFELFFBQVF3RCxNQUFNLENBQUM7d0JBQ2xEOUIsWUFBWXpCO3dCQUNaaUMsT0FBT0M7d0JBQ1AvQixNQUFNb0I7d0JBQ05LLE9BQU8zQzt3QkFDUHlDLFNBQVN4QixxQkFBcUI7NEJBQUVMOzRCQUFPOEIsV0FBVzt3QkFBYTtvQkFDakU7b0JBRUFyQyxTQUFTO3dCQUNQO3dCQUNBOzRCQUNFVTs0QkFDQXdCLFFBQVFpQzs0QkFDUjFCLFVBQVUsR0FBR1YsS0FBS0MsR0FBRyxLQUFLRixNQUFNLEVBQUUsQ0FBQzt3QkFDckM7cUJBQ0Q7b0JBRUQsT0FBT3FDLGNBQWNDLFVBQVU7Z0JBQ2pDLEVBQUUsT0FBTy9ELE9BQU87b0JBQ2QsSUFBSUEsaUJBQWlCNkMsU0FBUyxZQUFZN0MsU0FBU0EsTUFBTThDLE1BQU0sS0FBSyxLQUFLO3dCQUN2RSxPQUFPO29CQUNUO29CQUNBL0MsU0FBUzt3QkFBQzt3QkFBeUJDO3FCQUFNO29CQUN6QyxPQUFPO2dCQUNUO1lBQ0Y7WUFDQSxNQUFNZ0UsUUFBTyxFQUFFOUQsS0FBSyxFQUFFb0MsS0FBSyxFQUFxQztnQkFDOUQsTUFBTWIsUUFBUUMsS0FBS0MsR0FBRztnQkFDdEIsTUFBTXZCLFVBQVUsTUFBTUs7Z0JBQ3RCLE1BQU1KLGlCQUFpQmMsa0JBQWtCakI7Z0JBRXpDLCtDQUErQztnQkFDL0MsTUFBTUMsbUJBQW1CQyxTQUFTQyxnQkFBZ0JIO2dCQUVsRCxNQUFNcUMsZUFBZXZCLG1CQUFtQjtvQkFDdEN0QixRQUFRQTtvQkFDUlEsT0FBT0E7b0JBQ1BvQztnQkFDRjtnQkFFQTNDLFNBQVM7b0JBQUM7b0JBQVU7d0JBQUVVO29CQUFlO2lCQUFFO2dCQUV2QyxJQUFJO29CQUNGLElBQUk0RCxlQUdPO29CQUVYLE1BQU16QixXQUFXcEIsY0FBY21CO29CQUMvQixJQUFJQyxVQUFVO3dCQUNaN0MsU0FBUzs0QkFBQzs0QkFBYztnQ0FBRVU7Z0NBQWdCZ0IsSUFBSW1COzRCQUFTO3lCQUFFO3dCQUN6RCxNQUFNTCxNQUFNLE1BQU0vQixRQUFRNEQsTUFBTSxDQUFDOzRCQUMvQmxDLFlBQVl6Qjs0QkFDWmdCLElBQUltQjs0QkFDSlAsT0FBTzNDOzRCQUNQeUMsU0FBU3hCLHFCQUFxQjtnQ0FBRUw7Z0NBQU84QixXQUFXOzRCQUFhO3dCQUNqRTt3QkFDQWlDLGVBQWU7NEJBQUU5Qjs0QkFBSytCLFFBQVEsRUFBRTt3QkFBQztvQkFDbkMsT0FBTzt3QkFDTHZFLFNBQVM7NEJBQUM7NEJBQWlCO2dDQUFFVTtnQ0FBZ0JrQzs0QkFBYTt5QkFBRTt3QkFDNUQsTUFBTUosTUFBTSxNQUFNL0IsUUFBUTRELE1BQU0sQ0FBQzs0QkFDL0JsQyxZQUFZekI7NEJBQ1ppQyxPQUFPQzs0QkFDUE4sT0FBTzNDOzRCQUNQeUMsU0FBU3hCLHFCQUFxQjtnQ0FDNUJMO2dDQUNBOEIsV0FBVzs0QkFDYjt3QkFDRjt3QkFDQWlDLGVBQWU7NEJBQUU5QixLQUFLQSxJQUFJTyxJQUFJLENBQUMsRUFBRTs0QkFBRXdCLFFBQVEsRUFBRTt3QkFBQztvQkFDaEQ7b0JBRUF2RSxTQUFTO3dCQUNQO3dCQUNBOzRCQUNFVTs0QkFDQXdCLFFBQVFvQzs0QkFDUjdCLFVBQVUsR0FBR1YsS0FBS0MsR0FBRyxLQUFLRixNQUFNLEVBQUUsQ0FBQzt3QkFDckM7cUJBQ0Q7Z0JBQ0gsRUFBRSxPQUFPekIsT0FBTztvQkFDZCxJQUFJQSxpQkFBaUI2QyxTQUFTLFlBQVk3QyxTQUFTQSxNQUFNOEMsTUFBTSxLQUFLLEtBQUs7d0JBQ3ZFO29CQUNGO29CQUNBL0MsU0FBUzt3QkFBQzt3QkFBcUJDO3FCQUFNO2dCQUN2QztZQUNGO1lBQ0EsTUFBTW1FLFlBQVcsRUFBRWpFLEtBQUssRUFBRW9DLEtBQUssRUFBcUM7Z0JBQ2xFLE1BQU1iLFFBQVFDLEtBQUtDLEdBQUc7Z0JBQ3RCLE1BQU12QixVQUFVLE1BQU1LO2dCQUN0QixNQUFNSixpQkFBaUJjLGtCQUFrQmpCO2dCQUV6QywrQ0FBK0M7Z0JBQy9DLE1BQU1DLG1CQUFtQkMsU0FBU0MsZ0JBQWdCSDtnQkFFbEQsTUFBTXFDLGVBQWV2QixtQkFBbUI7b0JBQ3RDdEIsUUFBUUE7b0JBQ1JRLE9BQU9BO29CQUNQb0M7Z0JBQ0Y7Z0JBRUEzQyxTQUFTO29CQUFDO29CQUFjO3dCQUFFVTt3QkFBZ0JrQztvQkFBYTtpQkFBRTtnQkFFekQsSUFBSTtvQkFDRixNQUFNMEIsZUFBZSxNQUFNN0QsUUFBUTRELE1BQU0sQ0FBQzt3QkFDeENsQyxZQUFZekI7d0JBQ1ppQyxPQUFPQzt3QkFDUE4sT0FBTzNDO3dCQUNQeUMsU0FBU3hCLHFCQUFxQjs0QkFBRUw7NEJBQU84QixXQUFXO3dCQUFhO29CQUNqRTtvQkFFQXJDLFNBQVM7d0JBQ1A7d0JBQ0E7NEJBQ0VVOzRCQUNBd0IsUUFBUW9DOzRCQUNSN0IsVUFBVSxHQUFHVixLQUFLQyxHQUFHLEtBQUtGLE1BQU0sRUFBRSxDQUFDO3dCQUNyQztxQkFDRDtvQkFFRCxPQUFPd0MsYUFBYXZCLElBQUksQ0FBQ3FCLE1BQU07Z0JBQ2pDLEVBQUUsT0FBTy9ELE9BQU87b0JBQ2QsSUFBSUEsaUJBQWlCNkMsU0FBUyxZQUFZN0MsU0FBU0EsTUFBTThDLE1BQU0sS0FBSyxLQUFLO3dCQUN2RSxPQUFPO29CQUNUO29CQUNBL0MsU0FBUzt3QkFBQzt3QkFBeUJDO3FCQUFNO29CQUN6QyxPQUFPO2dCQUNUO1lBQ0Y7WUFDQSxNQUFNb0UsT0FBTSxFQUFFbEUsS0FBSyxFQUFFb0MsS0FBSyxFQUFzQztnQkFDOUQsTUFBTWIsUUFBUUMsS0FBS0MsR0FBRztnQkFDdEIsTUFBTXZCLFVBQVUsTUFBTUs7Z0JBQ3RCLE1BQU1KLGlCQUFpQmMsa0JBQWtCakI7Z0JBRXpDLCtDQUErQztnQkFDL0MsTUFBTUMsbUJBQW1CQyxTQUFTQyxnQkFBZ0JIO2dCQUVsRCxNQUFNcUMsZUFBZXZCLG1CQUFtQjtvQkFDdEN0QixRQUFRQTtvQkFDUlEsT0FBT0E7b0JBQ1BvQztnQkFDRjtnQkFFQTNDLFNBQVM7b0JBQUM7b0JBQVM7d0JBQUVVO3dCQUFnQmtDO29CQUFhO2lCQUFFO2dCQUVwRCxJQUFJO29CQUNGLE1BQU1WLFNBQVMsTUFBTXpCLFFBQVFnRSxLQUFLLENBQUM7d0JBQ2pDdEMsWUFBWXpCO3dCQUNaaUMsT0FBT0M7d0JBQ1BOLE9BQU8zQzt3QkFDUHlDLFNBQVN4QixxQkFBcUI7NEJBQUVMOzRCQUFPOEIsV0FBVzt3QkFBUTtvQkFDNUQ7b0JBRUFyQyxTQUFTO3dCQUNQO3dCQUNBOzRCQUNFVTs0QkFDQXdCLFFBQVE7Z0NBQUVxQixXQUFXckIsT0FBT3FCLFNBQVM7NEJBQUM7NEJBQ3RDZCxVQUFVLEdBQUdWLEtBQUtDLEdBQUcsS0FBS0YsTUFBTSxFQUFFLENBQUM7d0JBQ3JDO3FCQUNEO29CQUVELE9BQU9JLE9BQU9xQixTQUFTO2dCQUN6QixFQUFFLE9BQU9sRCxPQUFPO29CQUNkLElBQUlBLGlCQUFpQjZDLFNBQVMsWUFBWTdDLFNBQVNBLE1BQU04QyxNQUFNLEtBQUssS0FBSzt3QkFDdkUsT0FBTztvQkFDVDtvQkFDQS9DLFNBQVM7d0JBQUM7d0JBQW9CQztxQkFBTTtvQkFDcEMsT0FBTztnQkFDVDtZQUNGO1lBQ0FxRSxjQUFjLE9BQU94RCxTQUFTeUQ7Z0JBQzVCLE1BQU1DLGFBQWEsTUFBTXBGLGVBQWUwQjtnQkFDeEMsT0FBTztvQkFDTDJELE1BQU1EO29CQUNORSxNQUFNSCxRQUFRO29CQUNkSSxRQUFRO29CQUNSQyxXQUFXO2dCQUNiO1lBQ0Y7WUFDQTlELFNBQVM7Z0JBQ1BwQjtnQkFDQUM7WUFDRjtRQUNGO0lBQ0Y7QUFDRjtBQUVBLFNBQVNQLGNBQWMsRUFBRUksY0FBYyxHQUFFIn0=
|
|
@@ -1,25 +1,26 @@
|
|
|
1
|
+
import type { ModelKey } from '@/better-auth/generated-types';
|
|
1
2
|
import type { BetterAuthOptions, Where } from 'better-auth';
|
|
2
3
|
import type { CollectionSlug, Where as PayloadWhere } from 'payload';
|
|
3
4
|
export declare const createTransform: (options: BetterAuthOptions, enableDebugLogs: boolean) => {
|
|
4
|
-
getFieldName: (model:
|
|
5
|
-
getCollectionSlug: (model:
|
|
5
|
+
getFieldName: (model: ModelKey, field: string) => string;
|
|
6
|
+
getCollectionSlug: (model: ModelKey) => CollectionSlug;
|
|
6
7
|
singleIdQuery: (where: PayloadWhere) => string | number | null;
|
|
7
8
|
transformInput: ({ data, model, idType }: {
|
|
8
9
|
data: Record<string, any>;
|
|
9
|
-
model:
|
|
10
|
+
model: ModelKey;
|
|
10
11
|
idType: "number" | "text";
|
|
11
12
|
}) => Record<string, any>;
|
|
12
13
|
transformOutput: <T extends Record<string, any> | null>({ doc, model }: {
|
|
13
14
|
doc: T;
|
|
14
|
-
model:
|
|
15
|
+
model: ModelKey;
|
|
15
16
|
}) => T;
|
|
16
17
|
convertWhereClause: ({ idType, model, where }: {
|
|
17
18
|
idType: "number" | "text";
|
|
18
|
-
model:
|
|
19
|
+
model: ModelKey;
|
|
19
20
|
where?: Where[];
|
|
20
21
|
}) => PayloadWhere;
|
|
21
|
-
convertSelect: (model:
|
|
22
|
-
convertSort: (model:
|
|
22
|
+
convertSelect: (model: ModelKey, select?: string[]) => {} | undefined;
|
|
23
|
+
convertSort: (model: ModelKey, sortBy?: {
|
|
23
24
|
field: string;
|
|
24
25
|
direction: "asc" | "desc";
|
|
25
26
|
}) => string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/adapter/transform/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/adapter/transform/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAG3D,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,SAAS,CAAA;AAEpE,eAAO,MAAM,eAAe,GAAI,SAAS,iBAAiB,EAAE,iBAAiB,OAAO;0BAqErD,QAAQ,SAAS,MAAM,KAAG,MAAM;+BAlC3B,QAAQ,KAAG,cAAc;2BA6H7B,YAAY;8CAwIvC;QACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACzB,KAAK,EAAE,QAAQ,CAAA;QACf,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAA;KAC1B,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;sBAqDE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,kBAAkB;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAA;KAAE,KAAG,CAAC;mDAuMxD;QAAE,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAA;KAAE,KAAG,YAAY;2BAmFtG,QAAQ,WAAW,MAAM,EAAE;yBA2B7B,QAAQ,WAAW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,KAAG,MAAM,GAAG,SAAS;CAiBjH,CAAA"}
|