payload 3.0.0-alpha.2 → 3.0.0-alpha.21
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/auth.js +5 -44
- package/bin.js +40 -1
- package/components.d.ts +14 -0
- package/components.js +71 -0
- package/config.js +10 -59
- package/database.js +21 -108
- package/dist/admin/RichText.js +2 -5
- package/dist/admin/elements/Cell.js +2 -5
- package/dist/admin/elements/DatePicker.js +2 -5
- package/dist/admin/elements/PreviewButton.js +2 -5
- package/dist/admin/elements/PublishButton.js +2 -5
- package/dist/admin/elements/SaveButton.js +2 -5
- package/dist/admin/elements/SaveDraftButton.js +2 -5
- package/dist/admin/elements/Tab.js +2 -5
- package/dist/admin/forms/Error.js +2 -5
- package/dist/admin/forms/FieldDescription.js +2 -5
- package/dist/admin/forms/FieldTypes.js +2 -5
- package/dist/admin/forms/Form.d.ts +22 -0
- package/dist/admin/forms/Form.d.ts.map +1 -1
- package/dist/admin/forms/Form.js +2 -5
- package/dist/admin/forms/Label.js +2 -5
- package/dist/admin/forms/RowLabel.js +2 -5
- package/dist/admin/types.d.ts +2 -1
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js +2 -5
- package/dist/admin/views/types.d.ts +41 -0
- package/dist/admin/views/types.d.ts.map +1 -0
- package/dist/admin/views/types.js +3 -0
- package/dist/assets/assets.d.js +0 -1
- package/dist/auth/baseFields/accountLock.js +2 -12
- package/dist/auth/baseFields/apiKey.js +6 -21
- package/dist/auth/baseFields/auth.js +6 -16
- package/dist/auth/baseFields/verification.js +4 -14
- package/dist/auth/cookies.js +6 -33
- package/dist/auth/crypto.js +7 -30
- package/dist/auth/defaultAccess.js +2 -12
- package/dist/auth/defaultUser.js +4 -14
- package/dist/auth/executeAccess.js +5 -15
- package/dist/auth/extractJWT.js +4 -14
- package/dist/auth/getAccessResults.js +5 -15
- package/dist/auth/getAuthenticatedUser.js +2 -12
- package/dist/auth/getFieldsToSign.js +5 -15
- package/dist/auth/index.js +4 -27
- package/dist/auth/isLocked.js +2 -12
- package/dist/auth/operations/access.js +12 -22
- package/dist/auth/operations/forgotPassword.js +17 -32
- package/dist/auth/operations/init.js +2 -12
- package/dist/auth/operations/local/forgotPassword.js +8 -18
- package/dist/auth/operations/local/index.js +12 -27
- package/dist/auth/operations/local/login.js +8 -18
- package/dist/auth/operations/local/resetPassword.js +8 -18
- package/dist/auth/operations/local/unlock.js +8 -18
- package/dist/auth/operations/local/verifyEmail.js +8 -18
- package/dist/auth/operations/login.js +32 -47
- package/dist/auth/operations/logout.js +6 -21
- package/dist/auth/operations/me.js +4 -19
- package/dist/auth/operations/refresh.js +19 -34
- package/dist/auth/operations/registerFirstUser.js +10 -20
- package/dist/auth/operations/resetPassword.js +20 -43
- package/dist/auth/operations/unlock.js +16 -39
- package/dist/auth/operations/verifyEmail.js +14 -37
- package/dist/auth/sendVerificationEmail.js +4 -14
- package/dist/auth/strategies/apiKey.js +4 -19
- package/dist/auth/strategies/jwt.js +6 -21
- package/dist/auth/strategies/local/authenticate.js +6 -21
- package/dist/auth/strategies/local/generatePasswordSaltHash.js +7 -22
- package/dist/auth/strategies/local/incrementLoginAttempts.js +2 -12
- package/dist/auth/strategies/local/register.js +6 -16
- package/dist/auth/strategies/local/resetLoginAttempts.js +2 -12
- package/dist/auth/types.js +2 -12
- package/dist/bin/generateTypes.js +12 -27
- package/dist/bin/index.js +11 -53
- package/dist/bin/loadEnv.js +13 -26
- package/dist/bin/migrate.js +15 -30
- package/dist/bundlers/mocks/db-mongodb.js +0 -1
- package/dist/bundlers/mocks/db-postgres.js +2 -12
- package/dist/bundlers/mocks/dotENV.js +2 -12
- package/dist/bundlers/mocks/emptyModule.js +2 -12
- package/dist/bundlers/mocks/fileMock.js +2 -12
- package/dist/bundlers/types.js +2 -5
- package/dist/collections/config/build.js +2 -12
- package/dist/collections/config/defaults.js +9 -32
- package/dist/collections/config/sanitize.js +34 -49
- package/dist/collections/config/schema.js +157 -172
- package/dist/collections/config/types.d.ts +5 -5
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js +2 -5
- package/dist/collections/dataloader.js +8 -23
- package/dist/collections/operations/create.js +38 -53
- package/dist/collections/operations/delete.js +27 -42
- package/dist/collections/operations/deleteByID.js +27 -42
- package/dist/collections/operations/docAccess.js +10 -20
- package/dist/collections/operations/find.js +25 -40
- package/dist/collections/operations/findByID.js +21 -36
- package/dist/collections/operations/findVersionByID.js +19 -34
- package/dist/collections/operations/findVersions.js +20 -35
- package/dist/collections/operations/local/create.js +10 -25
- package/dist/collections/operations/local/delete.js +10 -20
- package/dist/collections/operations/local/find.js +8 -18
- package/dist/collections/operations/local/findByID.js +8 -18
- package/dist/collections/operations/local/findVersionByID.js +8 -18
- package/dist/collections/operations/local/findVersions.js +8 -18
- package/dist/collections/operations/local/index.js +20 -35
- package/dist/collections/operations/local/restoreVersion.js +8 -18
- package/dist/collections/operations/local/update.js +12 -27
- package/dist/collections/operations/restoreVersion.js +26 -41
- package/dist/collections/operations/update.js +43 -58
- package/dist/collections/operations/updateByID.js +44 -59
- package/dist/collections/operations/utils.js +3 -12
- package/dist/config/build.js +9 -15
- package/dist/config/clientFiles.js +2 -12
- package/dist/config/createClientConfig.d.ts.map +1 -1
- package/dist/config/createClientConfig.js +12 -25
- package/dist/config/defaults.js +4 -19
- package/dist/config/find.js +18 -33
- package/dist/config/load.d.ts +1 -3
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +8 -37
- package/dist/config/sanitize.js +25 -40
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +116 -133
- package/dist/config/shared/adminViewSchema.js +9 -24
- package/dist/config/shared/componentSchema.js +21 -50
- package/dist/config/types.d.ts +12 -21
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +9 -21
- package/dist/config/validate.js +15 -71
- package/dist/database/combineQueries.js +4 -14
- package/dist/database/createDatabaseAdapter.js +14 -24
- package/dist/database/flattenWhereToOperators.js +2 -12
- package/dist/database/getLocalizedPaths.js +7 -22
- package/dist/database/migrations/createMigration.js +7 -22
- package/dist/database/migrations/getMigrations.js +4 -12
- package/dist/database/migrations/migrate.js +12 -22
- package/dist/database/migrations/migrateDown.js +12 -22
- package/dist/database/migrations/migrateRefresh.js +16 -24
- package/dist/database/migrations/migrateReset.js +12 -22
- package/dist/database/migrations/migrateStatus.js +8 -18
- package/dist/database/migrations/migrationTemplate.js +2 -12
- package/dist/database/migrations/migrationsCollection.js +2 -12
- package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
- package/dist/database/migrations/readMigrationFiles.js +12 -24
- package/dist/database/queryValidation/types.js +2 -5
- package/dist/database/queryValidation/validateQueryPaths.js +13 -28
- package/dist/database/queryValidation/validateSearchParams.js +13 -21
- package/dist/database/types.d.ts +5 -2
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js +2 -5
- package/dist/email/build.js +11 -26
- package/dist/email/defaults.js +2 -12
- package/dist/email/mockHandler.js +8 -23
- package/dist/email/sendEmail.js +2 -12
- package/dist/email/types.js +2 -5
- package/dist/errors/APIError.js +4 -19
- package/dist/errors/AuthenticationError.js +7 -22
- package/dist/errors/DuplicateCollection.js +4 -19
- package/dist/errors/DuplicateFieldName.js +4 -19
- package/dist/errors/DuplicateGlobal.js +4 -19
- package/dist/errors/ErrorDeletingFile.js +7 -22
- package/dist/errors/FileUploadError.js +7 -22
- package/dist/errors/Forbidden.js +7 -22
- package/dist/errors/InvalidConfiguration.js +6 -21
- package/dist/errors/InvalidFieldName.js +4 -19
- package/dist/errors/InvalidFieldRelationship.js +4 -19
- package/dist/errors/InvalidSchema.js +6 -21
- package/dist/errors/LockedAuth.js +7 -22
- package/dist/errors/MissingCollectionLabel.js +4 -19
- package/dist/errors/MissingFieldInputOptions.js +4 -19
- package/dist/errors/MissingFieldType.js +6 -21
- package/dist/errors/MissingFile.js +7 -22
- package/dist/errors/NotFound.js +7 -22
- package/dist/errors/QueryError.js +6 -21
- package/dist/errors/TimestampsRequired.js +4 -19
- package/dist/errors/UnathorizedError.js +7 -22
- package/dist/errors/ValidationError.js +8 -23
- package/dist/errors/index.js +20 -94
- package/dist/errors/types.js +2 -19
- package/dist/exports/auth.js +5 -44
- package/dist/exports/components/utilities.d.ts +0 -1
- package/dist/exports/components/utilities.js +0 -1
- package/dist/exports/config.js +10 -59
- package/dist/exports/database.js +21 -108
- package/dist/exports/errors.js +2 -68
- package/dist/exports/fields/index.js +3 -26
- package/dist/exports/fields/validations.js +2 -19
- package/dist/exports/operations.js +29 -125
- package/dist/exports/types.js +4 -74
- package/dist/exports/utilities.js +28 -141
- package/dist/exports/versions.js +9 -45
- package/dist/express/middleware/errorHandler.d.ts +0 -1
- package/dist/express/middleware/errorHandler.js +0 -1
- package/dist/express/middleware/index.d.ts +0 -1
- package/dist/express/middleware/index.js +0 -1
- package/dist/fields/baseFields/baseBlockFields.js +4 -14
- package/dist/fields/baseFields/baseIDField.js +4 -19
- package/dist/fields/config/sanitize.js +24 -39
- package/dist/fields/config/sanitize.spec.js +25 -29
- package/dist/fields/config/schema.js +329 -424
- package/dist/fields/config/types.js +15 -69
- package/dist/fields/getDefaultValue.js +2 -12
- package/dist/fields/hooks/afterChange/index.js +6 -16
- package/dist/fields/hooks/afterChange/promise.js +14 -22
- package/dist/fields/hooks/afterChange/traverseFields.js +4 -14
- package/dist/fields/hooks/afterRead/index.js +6 -16
- package/dist/fields/hooks/afterRead/promise.js +28 -36
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +5 -15
- package/dist/fields/hooks/afterRead/traverseFields.js +4 -14
- package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.js +2 -12
- package/dist/fields/hooks/beforeChange/getExistingRowDoc.js +2 -12
- package/dist/fields/hooks/beforeChange/index.js +8 -18
- package/dist/fields/hooks/beforeChange/promise.js +26 -35
- package/dist/fields/hooks/beforeChange/traverseFields.js +4 -14
- package/dist/fields/hooks/beforeValidate/index.js +6 -16
- package/dist/fields/hooks/beforeValidate/promise.js +30 -39
- package/dist/fields/hooks/beforeValidate/traverseFields.js +4 -14
- package/dist/fields/mergeBaseFields.js +8 -23
- package/dist/fields/sortableFieldTypes.js +2 -12
- package/dist/fields/validations.js +31 -97
- package/dist/fields/validations.spec.js +93 -87
- package/dist/globals/config/build.d.ts +0 -1
- package/dist/globals/config/build.js +0 -1
- package/dist/globals/config/sanitize.js +17 -32
- package/dist/globals/config/schema.js +55 -70
- package/dist/globals/config/types.d.ts +5 -5
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js +2 -5
- package/dist/globals/graphql/resolvers/docAccess.d.ts +0 -1
- package/dist/globals/graphql/resolvers/docAccess.js +0 -1
- package/dist/globals/operations/docAccess.js +10 -20
- package/dist/globals/operations/findOne.js +14 -29
- package/dist/globals/operations/findVersionByID.js +18 -33
- package/dist/globals/operations/findVersions.js +20 -35
- package/dist/globals/operations/local/findOne.js +8 -18
- package/dist/globals/operations/local/findVersionByID.js +8 -18
- package/dist/globals/operations/local/findVersions.js +8 -18
- package/dist/globals/operations/local/index.js +12 -27
- package/dist/globals/operations/local/restoreVersion.js +8 -18
- package/dist/globals/operations/local/update.js +8 -18
- package/dist/globals/operations/restoreVersion.js +16 -31
- package/dist/globals/operations/update.js +23 -38
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -70
- package/dist/localization/middleware.js +2 -12
- package/dist/localization/sanitizeFallbackLocale.js +2 -12
- package/dist/preferences/deleteUserPreferences.js +2 -12
- package/dist/preferences/operations/delete.js +10 -25
- package/dist/preferences/operations/findOne.js +2 -12
- package/dist/preferences/operations/update.js +8 -23
- package/dist/preferences/preferencesCollection.js +8 -18
- package/dist/preferences/requestHandlers/delete.js +6 -21
- package/dist/preferences/requestHandlers/findOne.js +6 -21
- package/dist/preferences/requestHandlers/update.js +6 -21
- package/dist/preferences/types.js +2 -5
- package/dist/translations/extractTranslations.js +4 -14
- package/dist/translations/getLocalI18n.js +5 -15
- package/dist/types/constants.js +2 -12
- package/dist/types/index.js +2 -12
- package/dist/uploads/canResizeImage.js +2 -12
- package/dist/uploads/cropImage.d.ts +3 -7
- package/dist/uploads/cropImage.d.ts.map +1 -1
- package/dist/uploads/cropImage.js +4 -28
- package/dist/uploads/deleteAssociatedFiles.js +11 -26
- package/dist/uploads/docWithFilenameExists.js +2 -12
- package/dist/uploads/fileExists.js +4 -19
- package/dist/uploads/formatFilesize.js +2 -12
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +40 -53
- package/dist/uploads/getBaseFields.js +6 -16
- package/dist/uploads/getExternalFile.js +5 -15
- package/dist/uploads/getFileByPath.js +10 -25
- package/dist/uploads/getImageSize.js +7 -22
- package/dist/uploads/getSafeFilename.js +8 -23
- package/dist/uploads/imageResizer.d.ts +3 -1
- package/dist/uploads/imageResizer.d.ts.map +1 -1
- package/dist/uploads/imageResizer.js +28 -44
- package/dist/uploads/isImage.js +2 -12
- package/dist/uploads/mimeTypeValidator.js +2 -12
- package/dist/uploads/mimeTypeValidator.spec.js +11 -15
- package/dist/uploads/saveBufferToFile.js +6 -21
- package/dist/uploads/types.d.ts +7 -1
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js +2 -5
- package/dist/uploads/unlinkTempFiles.js +9 -22
- package/dist/uploads/uploadFiles.js +6 -21
- package/dist/utilities/checkDuplicateCollections.js +4 -14
- package/dist/utilities/combineMerge.js +4 -19
- package/dist/utilities/commitTransaction.js +4 -12
- package/dist/utilities/configToJSONSchema.js +22 -41
- package/dist/utilities/configToJSONSchema.spec.js +5 -9
- package/dist/utilities/convertData.js +3 -23
- package/dist/utilities/createArrayFromCommaDelineated.js +2 -12
- package/dist/utilities/createLocalReq.js +6 -16
- package/dist/utilities/deepCopyObject.js +2 -12
- package/dist/utilities/deepMerge.js +2 -12
- package/dist/utilities/fieldSchemaToJSON.js +2 -12
- package/dist/utilities/flattenTopLevelFields.js +6 -16
- package/dist/utilities/formatLabels.js +9 -70
- package/dist/utilities/formatLabels.spec.js +8 -12
- package/dist/utilities/getCSSVariable.js +2 -12
- package/dist/utilities/getEntityPolicies.js +4 -14
- package/dist/utilities/getIDType.js +2 -12
- package/dist/utilities/getObjectDotNotation.js +2 -12
- package/dist/utilities/getUniqueListBy.js +2 -12
- package/dist/utilities/initTransaction.js +5 -12
- package/dist/utilities/isEntityHidden.js +2 -12
- package/dist/utilities/isNumber.js +2 -12
- package/dist/utilities/isValidID.js +5 -20
- package/dist/utilities/isolateObjectProperty.js +2 -12
- package/dist/utilities/killTransaction.js +4 -12
- package/dist/utilities/logger.d.ts.map +1 -1
- package/dist/utilities/logger.js +16 -37
- package/dist/utilities/mapAsync.js +2 -12
- package/dist/utilities/overwriteMerge.js +2 -12
- package/dist/utilities/parseCookies.js +4 -14
- package/dist/utilities/pinoPretty.d.ts +1 -0
- package/dist/utilities/pinoPretty.d.ts.map +1 -0
- package/dist/utilities/pinoPretty.js +2 -0
- package/dist/utilities/sanitizeInternalFields.js +2 -12
- package/dist/utilities/setsAreEqual.js +2 -12
- package/dist/utilities/telemetry/events/adminInit.js +7 -17
- package/dist/utilities/telemetry/events/serverInit.js +4 -14
- package/dist/utilities/telemetry/index.js +17 -40
- package/dist/utilities/telemetry/oneWayHash.js +4 -14
- package/dist/utilities/timestamp.js +2 -12
- package/dist/utilities/toKebabCase.js +2 -12
- package/dist/utilities/wait.js +2 -12
- package/dist/utilities/wordBoundariesRegex.js +3 -13
- package/dist/versions/baseFields.js +5 -23
- package/dist/versions/buildCollectionFields.js +2 -12
- package/dist/versions/buildGlobalFields.js +2 -12
- package/dist/versions/deleteCollectionVersions.js +2 -12
- package/dist/versions/drafts/appendVersionToQueryKey.js +2 -12
- package/dist/versions/drafts/getQueryDraftsSort.js +2 -12
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js +12 -27
- package/dist/versions/enforceMaxVersions.js +2 -12
- package/dist/versions/getLatestCollectionVersion.js +4 -14
- package/dist/versions/getLatestGlobalVersion.js +4 -14
- package/dist/versions/getVersionsModelName.js +2 -12
- package/dist/versions/saveVersion.js +8 -23
- package/dist/versions/types.js +2 -5
- package/errors.js +2 -68
- package/graphql.d.ts +3 -0
- package/graphql.js +27 -0
- package/operations.js +29 -125
- package/package.json +17 -5
- package/types.js +4 -74
- package/utilities.js +28 -141
- package/versions.js +9 -45
|
@@ -1,560 +1,465 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: all[name]
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
array: function() {
|
|
13
|
-
return array;
|
|
14
|
-
},
|
|
15
|
-
baseAdminComponentFields: function() {
|
|
16
|
-
return baseAdminComponentFields;
|
|
17
|
-
},
|
|
18
|
-
baseAdminFields: function() {
|
|
19
|
-
return baseAdminFields;
|
|
20
|
-
},
|
|
21
|
-
baseField: function() {
|
|
22
|
-
return baseField;
|
|
23
|
-
},
|
|
24
|
-
blocks: function() {
|
|
25
|
-
return blocks;
|
|
26
|
-
},
|
|
27
|
-
checkbox: function() {
|
|
28
|
-
return checkbox;
|
|
29
|
-
},
|
|
30
|
-
code: function() {
|
|
31
|
-
return code;
|
|
32
|
-
},
|
|
33
|
-
collapsible: function() {
|
|
34
|
-
return collapsible;
|
|
35
|
-
},
|
|
36
|
-
date: function() {
|
|
37
|
-
return date;
|
|
38
|
-
},
|
|
39
|
-
default: function() {
|
|
40
|
-
return _default;
|
|
41
|
-
},
|
|
42
|
-
email: function() {
|
|
43
|
-
return email;
|
|
44
|
-
},
|
|
45
|
-
group: function() {
|
|
46
|
-
return group;
|
|
47
|
-
},
|
|
48
|
-
idField: function() {
|
|
49
|
-
return idField;
|
|
50
|
-
},
|
|
51
|
-
json: function() {
|
|
52
|
-
return json;
|
|
53
|
-
},
|
|
54
|
-
number: function() {
|
|
55
|
-
return number;
|
|
56
|
-
},
|
|
57
|
-
point: function() {
|
|
58
|
-
return point;
|
|
59
|
-
},
|
|
60
|
-
radio: function() {
|
|
61
|
-
return radio;
|
|
62
|
-
},
|
|
63
|
-
relationship: function() {
|
|
64
|
-
return relationship;
|
|
65
|
-
},
|
|
66
|
-
richText: function() {
|
|
67
|
-
return richText;
|
|
68
|
-
},
|
|
69
|
-
row: function() {
|
|
70
|
-
return row;
|
|
71
|
-
},
|
|
72
|
-
select: function() {
|
|
73
|
-
return select;
|
|
74
|
-
},
|
|
75
|
-
tabs: function() {
|
|
76
|
-
return tabs;
|
|
77
|
-
},
|
|
78
|
-
text: function() {
|
|
79
|
-
return text;
|
|
80
|
-
},
|
|
81
|
-
textarea: function() {
|
|
82
|
-
return textarea;
|
|
83
|
-
},
|
|
84
|
-
ui: function() {
|
|
85
|
-
return ui;
|
|
86
|
-
},
|
|
87
|
-
upload: function() {
|
|
88
|
-
return upload;
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
const _joi = /*#__PURE__*/ _interop_require_default(require("joi"));
|
|
92
|
-
const _componentSchema = require("../../config/shared/componentSchema");
|
|
93
|
-
function _interop_require_default(obj) {
|
|
94
|
-
return obj && obj.__esModule ? obj : {
|
|
95
|
-
default: obj
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
const baseAdminComponentFields = _joi.default.object().keys({
|
|
99
|
-
Cell: _componentSchema.componentSchema,
|
|
100
|
-
Field: _componentSchema.componentSchema,
|
|
101
|
-
Filter: _componentSchema.componentSchema
|
|
1
|
+
import joi from 'joi';
|
|
2
|
+
import { componentSchema } from '../../config/shared/componentSchema';
|
|
3
|
+
export const baseAdminComponentFields = joi.object().keys({
|
|
4
|
+
Cell: componentSchema,
|
|
5
|
+
Field: componentSchema,
|
|
6
|
+
Filter: componentSchema
|
|
102
7
|
}).default({});
|
|
103
|
-
const baseAdminFields =
|
|
104
|
-
className:
|
|
8
|
+
export const baseAdminFields = joi.object().keys({
|
|
9
|
+
className: joi.string(),
|
|
105
10
|
components: baseAdminComponentFields,
|
|
106
|
-
condition:
|
|
107
|
-
description:
|
|
108
|
-
|
|
109
|
-
]),
|
|
110
|
-
disableBulkEdit:
|
|
111
|
-
disabled:
|
|
112
|
-
hidden:
|
|
113
|
-
initCollapsed:
|
|
114
|
-
position:
|
|
115
|
-
readOnly:
|
|
116
|
-
style:
|
|
117
|
-
width:
|
|
11
|
+
condition: joi.func(),
|
|
12
|
+
description: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
13
|
+
joi.string()
|
|
14
|
+
]), componentSchema),
|
|
15
|
+
disableBulkEdit: joi.boolean().default(false),
|
|
16
|
+
disabled: joi.boolean().default(false),
|
|
17
|
+
hidden: joi.boolean().default(false),
|
|
18
|
+
initCollapsed: joi.boolean().default(false),
|
|
19
|
+
position: joi.string().valid('sidebar'),
|
|
20
|
+
readOnly: joi.boolean().default(false),
|
|
21
|
+
style: joi.object().unknown(),
|
|
22
|
+
width: joi.string()
|
|
118
23
|
});
|
|
119
|
-
const baseField =
|
|
120
|
-
access:
|
|
121
|
-
create:
|
|
122
|
-
read:
|
|
123
|
-
update:
|
|
24
|
+
export const baseField = joi.object().keys({
|
|
25
|
+
access: joi.object().keys({
|
|
26
|
+
create: joi.func(),
|
|
27
|
+
read: joi.func(),
|
|
28
|
+
update: joi.func()
|
|
124
29
|
}),
|
|
125
30
|
admin: baseAdminFields.default(),
|
|
126
|
-
custom:
|
|
127
|
-
hidden:
|
|
128
|
-
hooks:
|
|
129
|
-
afterChange:
|
|
130
|
-
afterRead:
|
|
131
|
-
beforeChange:
|
|
132
|
-
beforeValidate:
|
|
31
|
+
custom: joi.object().pattern(joi.string(), joi.any()),
|
|
32
|
+
hidden: joi.boolean().default(false),
|
|
33
|
+
hooks: joi.object().keys({
|
|
34
|
+
afterChange: joi.array().items(joi.func()).default([]),
|
|
35
|
+
afterRead: joi.array().items(joi.func()).default([]),
|
|
36
|
+
beforeChange: joi.array().items(joi.func()).default([]),
|
|
37
|
+
beforeValidate: joi.array().items(joi.func()).default([])
|
|
133
38
|
}).default(),
|
|
134
|
-
index:
|
|
135
|
-
label:
|
|
136
|
-
|
|
137
|
-
]),
|
|
138
|
-
localized:
|
|
139
|
-
required:
|
|
140
|
-
saveToJWT:
|
|
141
|
-
unique:
|
|
142
|
-
validate:
|
|
39
|
+
index: joi.boolean().default(false),
|
|
40
|
+
label: joi.alternatives().try(joi.object().pattern(joi.string(), [
|
|
41
|
+
joi.string()
|
|
42
|
+
]), joi.string(), joi.valid(false)),
|
|
43
|
+
localized: joi.boolean().default(false),
|
|
44
|
+
required: joi.boolean().default(false),
|
|
45
|
+
saveToJWT: joi.alternatives().try(joi.boolean(), joi.string()).default(false),
|
|
46
|
+
unique: joi.boolean().default(false),
|
|
47
|
+
validate: joi.func()
|
|
143
48
|
}).default();
|
|
144
|
-
const idField = baseField.keys({
|
|
145
|
-
name:
|
|
146
|
-
localized:
|
|
147
|
-
required:
|
|
148
|
-
type:
|
|
49
|
+
export const idField = baseField.keys({
|
|
50
|
+
name: joi.string().valid('id'),
|
|
51
|
+
localized: joi.invalid(true),
|
|
52
|
+
required: joi.not(false, 0).default(true),
|
|
53
|
+
type: joi.string().valid('text', 'number')
|
|
149
54
|
});
|
|
150
|
-
const text = baseField.keys({
|
|
151
|
-
name:
|
|
55
|
+
export const text = baseField.keys({
|
|
56
|
+
name: joi.string().required(),
|
|
152
57
|
admin: baseAdminFields.keys({
|
|
153
|
-
autoComplete:
|
|
58
|
+
autoComplete: joi.string(),
|
|
154
59
|
components: baseAdminComponentFields.keys({
|
|
155
|
-
Error:
|
|
156
|
-
Label:
|
|
157
|
-
afterInput:
|
|
158
|
-
beforeInput:
|
|
60
|
+
Error: componentSchema,
|
|
61
|
+
Label: componentSchema,
|
|
62
|
+
afterInput: joi.array().items(componentSchema),
|
|
63
|
+
beforeInput: joi.array().items(componentSchema)
|
|
159
64
|
}),
|
|
160
|
-
placeholder:
|
|
161
|
-
|
|
162
|
-
]),
|
|
163
|
-
rtl:
|
|
65
|
+
placeholder: joi.alternatives().try(joi.object().pattern(joi.string(), [
|
|
66
|
+
joi.string()
|
|
67
|
+
]), joi.string()),
|
|
68
|
+
rtl: joi.boolean()
|
|
164
69
|
}),
|
|
165
|
-
defaultValue:
|
|
166
|
-
hasMany:
|
|
167
|
-
maxLength:
|
|
168
|
-
maxRows:
|
|
169
|
-
is:
|
|
170
|
-
then:
|
|
70
|
+
defaultValue: joi.alternatives().try(joi.string(), joi.func()),
|
|
71
|
+
hasMany: joi.boolean().default(false),
|
|
72
|
+
maxLength: joi.number(),
|
|
73
|
+
maxRows: joi.number().when('hasMany', {
|
|
74
|
+
is: joi.not(true),
|
|
75
|
+
then: joi.forbidden()
|
|
171
76
|
}),
|
|
172
|
-
minLength:
|
|
173
|
-
minRows:
|
|
174
|
-
is:
|
|
175
|
-
then:
|
|
77
|
+
minLength: joi.number(),
|
|
78
|
+
minRows: joi.number().when('hasMany', {
|
|
79
|
+
is: joi.not(true),
|
|
80
|
+
then: joi.forbidden()
|
|
176
81
|
}),
|
|
177
|
-
type:
|
|
82
|
+
type: joi.string().valid('text').required()
|
|
178
83
|
});
|
|
179
|
-
const number = baseField.keys({
|
|
180
|
-
name:
|
|
84
|
+
export const number = baseField.keys({
|
|
85
|
+
name: joi.string().required(),
|
|
181
86
|
admin: baseAdminFields.keys({
|
|
182
|
-
autoComplete:
|
|
87
|
+
autoComplete: joi.string(),
|
|
183
88
|
components: baseAdminComponentFields.keys({
|
|
184
|
-
Error:
|
|
185
|
-
Label:
|
|
186
|
-
afterInput:
|
|
89
|
+
Error: componentSchema,
|
|
90
|
+
Label: componentSchema,
|
|
91
|
+
afterInput: joi.array().items(componentSchema).when('hasMany', {
|
|
187
92
|
not: true,
|
|
188
|
-
otherwise:
|
|
93
|
+
otherwise: joi.forbidden()
|
|
189
94
|
}),
|
|
190
|
-
beforeInput:
|
|
95
|
+
beforeInput: joi.array().items(componentSchema).when('hasMany', {
|
|
191
96
|
not: true,
|
|
192
|
-
otherwise:
|
|
97
|
+
otherwise: joi.forbidden()
|
|
193
98
|
})
|
|
194
99
|
}),
|
|
195
|
-
placeholder:
|
|
196
|
-
step:
|
|
100
|
+
placeholder: joi.string(),
|
|
101
|
+
step: joi.number()
|
|
197
102
|
}),
|
|
198
|
-
defaultValue:
|
|
199
|
-
hasMany:
|
|
200
|
-
max:
|
|
201
|
-
maxRows:
|
|
202
|
-
is:
|
|
203
|
-
then:
|
|
103
|
+
defaultValue: joi.alternatives().try(joi.number(), joi.func()),
|
|
104
|
+
hasMany: joi.boolean().default(false),
|
|
105
|
+
max: joi.number(),
|
|
106
|
+
maxRows: joi.number().when('hasMany', {
|
|
107
|
+
is: joi.not(true),
|
|
108
|
+
then: joi.forbidden()
|
|
204
109
|
}),
|
|
205
|
-
min:
|
|
206
|
-
minRows:
|
|
207
|
-
is:
|
|
208
|
-
then:
|
|
110
|
+
min: joi.number(),
|
|
111
|
+
minRows: joi.number().when('hasMany', {
|
|
112
|
+
is: joi.not(true),
|
|
113
|
+
then: joi.forbidden()
|
|
209
114
|
}),
|
|
210
|
-
type:
|
|
115
|
+
type: joi.string().valid('number').required()
|
|
211
116
|
});
|
|
212
|
-
const textarea = baseField.keys({
|
|
213
|
-
name:
|
|
117
|
+
export const textarea = baseField.keys({
|
|
118
|
+
name: joi.string().required(),
|
|
214
119
|
admin: baseAdminFields.keys({
|
|
215
120
|
components: baseAdminComponentFields.keys({
|
|
216
|
-
Error:
|
|
217
|
-
Label:
|
|
218
|
-
afterInput:
|
|
219
|
-
beforeInput:
|
|
121
|
+
Error: componentSchema,
|
|
122
|
+
Label: componentSchema,
|
|
123
|
+
afterInput: joi.array().items(componentSchema),
|
|
124
|
+
beforeInput: joi.array().items(componentSchema)
|
|
220
125
|
}),
|
|
221
|
-
placeholder:
|
|
222
|
-
rows:
|
|
223
|
-
rtl:
|
|
126
|
+
placeholder: joi.string(),
|
|
127
|
+
rows: joi.number(),
|
|
128
|
+
rtl: joi.boolean()
|
|
224
129
|
}),
|
|
225
|
-
defaultValue:
|
|
226
|
-
maxLength:
|
|
227
|
-
minLength:
|
|
228
|
-
type:
|
|
130
|
+
defaultValue: joi.alternatives().try(joi.string(), joi.func()),
|
|
131
|
+
maxLength: joi.number(),
|
|
132
|
+
minLength: joi.number(),
|
|
133
|
+
type: joi.string().valid('textarea').required()
|
|
229
134
|
});
|
|
230
|
-
const email = baseField.keys({
|
|
231
|
-
name:
|
|
135
|
+
export const email = baseField.keys({
|
|
136
|
+
name: joi.string().required(),
|
|
232
137
|
admin: baseAdminFields.keys({
|
|
233
|
-
autoComplete:
|
|
138
|
+
autoComplete: joi.string(),
|
|
234
139
|
components: baseAdminComponentFields.keys({
|
|
235
|
-
Error:
|
|
236
|
-
Label:
|
|
237
|
-
afterInput:
|
|
238
|
-
beforeInput:
|
|
140
|
+
Error: componentSchema,
|
|
141
|
+
Label: componentSchema,
|
|
142
|
+
afterInput: joi.array().items(componentSchema),
|
|
143
|
+
beforeInput: joi.array().items(componentSchema)
|
|
239
144
|
}),
|
|
240
|
-
placeholder:
|
|
145
|
+
placeholder: joi.string()
|
|
241
146
|
}),
|
|
242
|
-
defaultValue:
|
|
243
|
-
maxLength:
|
|
244
|
-
minLength:
|
|
245
|
-
type:
|
|
147
|
+
defaultValue: joi.alternatives().try(joi.string(), joi.func()),
|
|
148
|
+
maxLength: joi.number(),
|
|
149
|
+
minLength: joi.number(),
|
|
150
|
+
type: joi.string().valid('email').required()
|
|
246
151
|
});
|
|
247
|
-
const code = baseField.keys({
|
|
248
|
-
name:
|
|
152
|
+
export const code = baseField.keys({
|
|
153
|
+
name: joi.string().required(),
|
|
249
154
|
admin: baseAdminFields.keys({
|
|
250
155
|
components: baseAdminComponentFields.keys({
|
|
251
|
-
Error:
|
|
252
|
-
Label:
|
|
156
|
+
Error: componentSchema,
|
|
157
|
+
Label: componentSchema
|
|
253
158
|
}),
|
|
254
|
-
editorOptions:
|
|
255
|
-
language:
|
|
159
|
+
editorOptions: joi.object().unknown(),
|
|
160
|
+
language: joi.string()
|
|
256
161
|
}),
|
|
257
|
-
defaultValue:
|
|
258
|
-
type:
|
|
162
|
+
defaultValue: joi.alternatives().try(joi.string(), joi.func()),
|
|
163
|
+
type: joi.string().valid('code').required()
|
|
259
164
|
});
|
|
260
|
-
const json = baseField.keys({
|
|
261
|
-
name:
|
|
165
|
+
export const json = baseField.keys({
|
|
166
|
+
name: joi.string().required(),
|
|
262
167
|
admin: baseAdminFields.keys({
|
|
263
168
|
components: baseAdminComponentFields.keys({
|
|
264
|
-
Error:
|
|
265
|
-
Label:
|
|
169
|
+
Error: componentSchema,
|
|
170
|
+
Label: componentSchema
|
|
266
171
|
}),
|
|
267
|
-
editorOptions:
|
|
172
|
+
editorOptions: joi.object().unknown()
|
|
268
173
|
}),
|
|
269
|
-
defaultValue:
|
|
270
|
-
type:
|
|
174
|
+
defaultValue: joi.alternatives().try(joi.array(), joi.object()),
|
|
175
|
+
type: joi.string().valid('json').required()
|
|
271
176
|
});
|
|
272
|
-
const select = baseField.keys({
|
|
273
|
-
name:
|
|
177
|
+
export const select = baseField.keys({
|
|
178
|
+
name: joi.string().required(),
|
|
274
179
|
admin: baseAdminFields.keys({
|
|
275
180
|
components: baseAdminComponentFields.keys({
|
|
276
|
-
Error:
|
|
277
|
-
Label:
|
|
181
|
+
Error: componentSchema,
|
|
182
|
+
Label: componentSchema
|
|
278
183
|
}),
|
|
279
|
-
isClearable:
|
|
280
|
-
isSortable:
|
|
184
|
+
isClearable: joi.boolean().default(false),
|
|
185
|
+
isSortable: joi.boolean().default(false)
|
|
281
186
|
}),
|
|
282
|
-
defaultValue:
|
|
283
|
-
hasMany:
|
|
284
|
-
options:
|
|
285
|
-
label:
|
|
286
|
-
|
|
187
|
+
defaultValue: joi.alternatives().try(joi.string().allow(''), joi.array().items(joi.string().allow('')), joi.func()),
|
|
188
|
+
hasMany: joi.boolean().default(false),
|
|
189
|
+
options: joi.array().min(1).items(joi.alternatives().try(joi.string(), joi.object({
|
|
190
|
+
label: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
191
|
+
joi.string()
|
|
287
192
|
])),
|
|
288
|
-
value:
|
|
193
|
+
value: joi.string().required().allow('')
|
|
289
194
|
}))).required(),
|
|
290
|
-
type:
|
|
195
|
+
type: joi.string().valid('select').required()
|
|
291
196
|
});
|
|
292
|
-
const radio = baseField.keys({
|
|
293
|
-
name:
|
|
197
|
+
export const radio = baseField.keys({
|
|
198
|
+
name: joi.string().required(),
|
|
294
199
|
admin: baseAdminFields.keys({
|
|
295
200
|
components: baseAdminComponentFields.keys({
|
|
296
|
-
Error:
|
|
297
|
-
Label:
|
|
201
|
+
Error: componentSchema,
|
|
202
|
+
Label: componentSchema
|
|
298
203
|
}),
|
|
299
|
-
layout:
|
|
204
|
+
layout: joi.string().valid('vertical', 'horizontal')
|
|
300
205
|
}),
|
|
301
|
-
defaultValue:
|
|
302
|
-
options:
|
|
303
|
-
label:
|
|
304
|
-
|
|
206
|
+
defaultValue: joi.alternatives().try(joi.string().allow(''), joi.func()),
|
|
207
|
+
options: joi.array().min(1).items(joi.alternatives().try(joi.string(), joi.object({
|
|
208
|
+
label: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
209
|
+
joi.string()
|
|
305
210
|
])).required(),
|
|
306
|
-
value:
|
|
211
|
+
value: joi.string().required().allow('')
|
|
307
212
|
}))).required(),
|
|
308
|
-
type:
|
|
213
|
+
type: joi.string().valid('radio').required()
|
|
309
214
|
});
|
|
310
|
-
const row = baseField.keys({
|
|
215
|
+
export const row = baseField.keys({
|
|
311
216
|
admin: baseAdminFields.default(),
|
|
312
|
-
fields:
|
|
313
|
-
type:
|
|
217
|
+
fields: joi.array().items(joi.link('#field')),
|
|
218
|
+
type: joi.string().valid('row').required()
|
|
314
219
|
});
|
|
315
|
-
const collapsible = baseField.keys({
|
|
220
|
+
export const collapsible = baseField.keys({
|
|
316
221
|
admin: baseAdminFields.default(),
|
|
317
|
-
fields:
|
|
318
|
-
label:
|
|
319
|
-
type:
|
|
222
|
+
fields: joi.array().items(joi.link('#field')),
|
|
223
|
+
label: joi.alternatives().try(joi.string(), componentSchema),
|
|
224
|
+
type: joi.string().valid('collapsible').required()
|
|
320
225
|
});
|
|
321
226
|
const tab = baseField.keys({
|
|
322
|
-
name:
|
|
323
|
-
is:
|
|
324
|
-
then:
|
|
227
|
+
name: joi.string().when('localized', {
|
|
228
|
+
is: joi.exist(),
|
|
229
|
+
then: joi.required()
|
|
325
230
|
}),
|
|
326
|
-
description:
|
|
327
|
-
fields:
|
|
328
|
-
interfaceName:
|
|
329
|
-
not:
|
|
330
|
-
then:
|
|
231
|
+
description: joi.alternatives().try(joi.string(), componentSchema),
|
|
232
|
+
fields: joi.array().items(joi.link('#field')).required(),
|
|
233
|
+
interfaceName: joi.string().when('name', {
|
|
234
|
+
not: joi.exist(),
|
|
235
|
+
then: joi.forbidden()
|
|
331
236
|
}),
|
|
332
|
-
label:
|
|
333
|
-
|
|
237
|
+
label: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
238
|
+
joi.string()
|
|
334
239
|
])).when('name', {
|
|
335
|
-
is:
|
|
336
|
-
then:
|
|
240
|
+
is: joi.not(),
|
|
241
|
+
then: joi.required()
|
|
337
242
|
}),
|
|
338
|
-
localized:
|
|
339
|
-
saveToJWT:
|
|
243
|
+
localized: joi.boolean(),
|
|
244
|
+
saveToJWT: joi.alternatives().try(joi.boolean(), joi.string())
|
|
340
245
|
});
|
|
341
|
-
const tabs = baseField.keys({
|
|
246
|
+
export const tabs = baseField.keys({
|
|
342
247
|
admin: baseAdminFields.keys({
|
|
343
|
-
description:
|
|
248
|
+
description: joi.forbidden()
|
|
344
249
|
}),
|
|
345
|
-
fields:
|
|
346
|
-
localized:
|
|
347
|
-
tabs:
|
|
348
|
-
type:
|
|
250
|
+
fields: joi.forbidden(),
|
|
251
|
+
localized: joi.forbidden(),
|
|
252
|
+
tabs: joi.array().items(tab).required(),
|
|
253
|
+
type: joi.string().valid('tabs').required()
|
|
349
254
|
});
|
|
350
|
-
const group = baseField.keys({
|
|
351
|
-
name:
|
|
255
|
+
export const group = baseField.keys({
|
|
256
|
+
name: joi.string().required(),
|
|
352
257
|
admin: baseAdminFields.keys({
|
|
353
|
-
hideGutter:
|
|
258
|
+
hideGutter: joi.boolean().default(true)
|
|
354
259
|
}),
|
|
355
|
-
defaultValue:
|
|
356
|
-
fields:
|
|
357
|
-
interfaceName:
|
|
358
|
-
type:
|
|
260
|
+
defaultValue: joi.alternatives().try(joi.object(), joi.func()),
|
|
261
|
+
fields: joi.array().items(joi.link('#field')),
|
|
262
|
+
interfaceName: joi.string(),
|
|
263
|
+
type: joi.string().valid('group').required()
|
|
359
264
|
});
|
|
360
|
-
const array = baseField.keys({
|
|
361
|
-
name:
|
|
265
|
+
export const array = baseField.keys({
|
|
266
|
+
name: joi.string().required(),
|
|
362
267
|
admin: baseAdminFields.keys({
|
|
363
268
|
components: baseAdminComponentFields.keys({
|
|
364
|
-
RowLabel:
|
|
269
|
+
RowLabel: componentSchema
|
|
365
270
|
}).default({})
|
|
366
271
|
}).default({}),
|
|
367
|
-
defaultValue:
|
|
368
|
-
fields:
|
|
369
|
-
interfaceName:
|
|
370
|
-
labels:
|
|
371
|
-
plural:
|
|
372
|
-
|
|
272
|
+
defaultValue: joi.alternatives().try(joi.array().items(joi.object()), joi.func()),
|
|
273
|
+
fields: joi.array().items(joi.link('#field')).required(),
|
|
274
|
+
interfaceName: joi.string(),
|
|
275
|
+
labels: joi.object({
|
|
276
|
+
plural: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
277
|
+
joi.string()
|
|
373
278
|
])),
|
|
374
|
-
singular:
|
|
375
|
-
|
|
279
|
+
singular: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
280
|
+
joi.string()
|
|
376
281
|
]))
|
|
377
282
|
}),
|
|
378
|
-
maxRows:
|
|
379
|
-
minRows:
|
|
380
|
-
type:
|
|
283
|
+
maxRows: joi.number(),
|
|
284
|
+
minRows: joi.number(),
|
|
285
|
+
type: joi.string().valid('array').required()
|
|
381
286
|
});
|
|
382
|
-
const upload = baseField.keys({
|
|
383
|
-
name:
|
|
287
|
+
export const upload = baseField.keys({
|
|
288
|
+
name: joi.string().required(),
|
|
384
289
|
admin: baseAdminFields.keys({
|
|
385
290
|
components: baseAdminComponentFields.keys({
|
|
386
|
-
Error:
|
|
387
|
-
Label:
|
|
291
|
+
Error: componentSchema,
|
|
292
|
+
Label: componentSchema
|
|
388
293
|
})
|
|
389
294
|
}),
|
|
390
|
-
defaultValue:
|
|
391
|
-
filterOptions:
|
|
392
|
-
maxDepth:
|
|
393
|
-
relationTo:
|
|
394
|
-
type:
|
|
295
|
+
defaultValue: joi.alternatives().try(joi.object(), joi.func()),
|
|
296
|
+
filterOptions: joi.alternatives().try(joi.object(), joi.func()),
|
|
297
|
+
maxDepth: joi.number(),
|
|
298
|
+
relationTo: joi.string().required(),
|
|
299
|
+
type: joi.string().valid('upload').required()
|
|
395
300
|
});
|
|
396
|
-
const checkbox = baseField.keys({
|
|
397
|
-
name:
|
|
301
|
+
export const checkbox = baseField.keys({
|
|
302
|
+
name: joi.string().required(),
|
|
398
303
|
admin: baseAdminFields.keys({
|
|
399
304
|
components: baseAdminComponentFields.keys({
|
|
400
|
-
Error:
|
|
401
|
-
Label:
|
|
402
|
-
afterInput:
|
|
403
|
-
beforeInput:
|
|
305
|
+
Error: componentSchema,
|
|
306
|
+
Label: componentSchema,
|
|
307
|
+
afterInput: joi.array().items(componentSchema),
|
|
308
|
+
beforeInput: joi.array().items(componentSchema)
|
|
404
309
|
})
|
|
405
310
|
}),
|
|
406
|
-
defaultValue:
|
|
407
|
-
type:
|
|
311
|
+
defaultValue: joi.alternatives().try(joi.boolean(), joi.func()),
|
|
312
|
+
type: joi.string().valid('checkbox').required()
|
|
408
313
|
});
|
|
409
|
-
const point = baseField.keys({
|
|
410
|
-
name:
|
|
314
|
+
export const point = baseField.keys({
|
|
315
|
+
name: joi.string().required(),
|
|
411
316
|
admin: baseAdminFields.keys({
|
|
412
317
|
components: baseAdminComponentFields.keys({
|
|
413
|
-
Error:
|
|
414
|
-
Label:
|
|
415
|
-
afterInput:
|
|
416
|
-
beforeInput:
|
|
318
|
+
Error: componentSchema,
|
|
319
|
+
Label: componentSchema,
|
|
320
|
+
afterInput: joi.array().items(componentSchema),
|
|
321
|
+
beforeInput: joi.array().items(componentSchema)
|
|
417
322
|
})
|
|
418
323
|
}),
|
|
419
|
-
defaultValue:
|
|
420
|
-
type:
|
|
324
|
+
defaultValue: joi.alternatives().try(joi.array().items(joi.number()).max(2).min(2), joi.func()),
|
|
325
|
+
type: joi.string().valid('point').required()
|
|
421
326
|
});
|
|
422
|
-
const relationship = baseField.keys({
|
|
423
|
-
name:
|
|
327
|
+
export const relationship = baseField.keys({
|
|
328
|
+
name: joi.string().required(),
|
|
424
329
|
admin: baseAdminFields.keys({
|
|
425
|
-
allowCreate:
|
|
330
|
+
allowCreate: joi.boolean().default(true),
|
|
426
331
|
components: baseAdminComponentFields.keys({
|
|
427
|
-
Error:
|
|
428
|
-
Label:
|
|
332
|
+
Error: componentSchema,
|
|
333
|
+
Label: componentSchema
|
|
429
334
|
}),
|
|
430
|
-
isSortable:
|
|
431
|
-
sortOptions:
|
|
432
|
-
is:
|
|
433
|
-
otherwise:
|
|
434
|
-
then:
|
|
335
|
+
isSortable: joi.boolean().default(false),
|
|
336
|
+
sortOptions: joi.alternatives().conditional(joi.ref('...relationTo'), {
|
|
337
|
+
is: joi.string(),
|
|
338
|
+
otherwise: joi.object().pattern(joi.string(), joi.string()),
|
|
339
|
+
then: joi.string()
|
|
435
340
|
})
|
|
436
341
|
}),
|
|
437
|
-
defaultValue:
|
|
438
|
-
filterOptions:
|
|
439
|
-
hasMany:
|
|
440
|
-
max:
|
|
441
|
-
is:
|
|
442
|
-
then:
|
|
342
|
+
defaultValue: joi.alternatives().try(joi.func()),
|
|
343
|
+
filterOptions: joi.alternatives().try(joi.object(), joi.func()),
|
|
344
|
+
hasMany: joi.boolean().default(false),
|
|
345
|
+
max: joi.number().when('hasMany', {
|
|
346
|
+
is: joi.not(true),
|
|
347
|
+
then: joi.forbidden()
|
|
443
348
|
}).warning('deprecated', {
|
|
444
349
|
message: 'Use maxRows instead.'
|
|
445
350
|
}),
|
|
446
|
-
maxDepth:
|
|
447
|
-
maxRows:
|
|
448
|
-
is:
|
|
449
|
-
then:
|
|
351
|
+
maxDepth: joi.number(),
|
|
352
|
+
maxRows: joi.number().when('hasMany', {
|
|
353
|
+
is: joi.not(true),
|
|
354
|
+
then: joi.forbidden()
|
|
450
355
|
}),
|
|
451
|
-
min:
|
|
452
|
-
is:
|
|
453
|
-
then:
|
|
356
|
+
min: joi.number().when('hasMany', {
|
|
357
|
+
is: joi.not(true),
|
|
358
|
+
then: joi.forbidden()
|
|
454
359
|
}).warning('deprecated', {
|
|
455
360
|
message: 'Use minRows instead.'
|
|
456
361
|
}),
|
|
457
|
-
minRows:
|
|
458
|
-
is:
|
|
459
|
-
then:
|
|
362
|
+
minRows: joi.number().when('hasMany', {
|
|
363
|
+
is: joi.not(true),
|
|
364
|
+
then: joi.forbidden()
|
|
460
365
|
}),
|
|
461
|
-
relationTo:
|
|
462
|
-
type:
|
|
366
|
+
relationTo: joi.alternatives().try(joi.string().required(), joi.array().items(joi.string())),
|
|
367
|
+
type: joi.string().valid('relationship').required()
|
|
463
368
|
});
|
|
464
|
-
const blocks = baseField.keys({
|
|
465
|
-
name:
|
|
466
|
-
blocks:
|
|
467
|
-
fields:
|
|
468
|
-
graphQL:
|
|
469
|
-
singularName:
|
|
369
|
+
export const blocks = baseField.keys({
|
|
370
|
+
name: joi.string().required(),
|
|
371
|
+
blocks: joi.array().items(joi.object({
|
|
372
|
+
fields: joi.array().items(joi.link('#field')),
|
|
373
|
+
graphQL: joi.object().keys({
|
|
374
|
+
singularName: joi.string()
|
|
470
375
|
}),
|
|
471
|
-
imageAltText:
|
|
472
|
-
imageURL:
|
|
473
|
-
interfaceName:
|
|
474
|
-
labels:
|
|
475
|
-
plural:
|
|
476
|
-
|
|
376
|
+
imageAltText: joi.string(),
|
|
377
|
+
imageURL: joi.string(),
|
|
378
|
+
interfaceName: joi.string(),
|
|
379
|
+
labels: joi.object({
|
|
380
|
+
plural: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
381
|
+
joi.string()
|
|
477
382
|
])),
|
|
478
|
-
singular:
|
|
479
|
-
|
|
383
|
+
singular: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
384
|
+
joi.string()
|
|
480
385
|
]))
|
|
481
386
|
}),
|
|
482
|
-
slug:
|
|
483
|
-
custom:
|
|
387
|
+
slug: joi.string().required(),
|
|
388
|
+
custom: joi.object().pattern(joi.string(), joi.any())
|
|
484
389
|
})).required(),
|
|
485
|
-
defaultValue:
|
|
486
|
-
labels:
|
|
487
|
-
plural:
|
|
488
|
-
|
|
390
|
+
defaultValue: joi.alternatives().try(joi.array().items(joi.object()), joi.func()),
|
|
391
|
+
labels: joi.object({
|
|
392
|
+
plural: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
393
|
+
joi.string()
|
|
489
394
|
])),
|
|
490
|
-
singular:
|
|
491
|
-
|
|
395
|
+
singular: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
396
|
+
joi.string()
|
|
492
397
|
]))
|
|
493
398
|
}),
|
|
494
|
-
maxRows:
|
|
495
|
-
minRows:
|
|
496
|
-
type:
|
|
399
|
+
maxRows: joi.number(),
|
|
400
|
+
minRows: joi.number(),
|
|
401
|
+
type: joi.string().valid('blocks').required()
|
|
497
402
|
});
|
|
498
|
-
const richText = baseField.keys({
|
|
499
|
-
name:
|
|
403
|
+
export const richText = baseField.keys({
|
|
404
|
+
name: joi.string().required(),
|
|
500
405
|
admin: baseAdminFields.default(),
|
|
501
|
-
defaultValue:
|
|
502
|
-
editor:
|
|
503
|
-
CellComponent:
|
|
504
|
-
FieldComponent:
|
|
505
|
-
LazyCellComponent:
|
|
506
|
-
LazyFieldComponent:
|
|
507
|
-
afterReadPromise:
|
|
508
|
-
outputSchema:
|
|
509
|
-
populationPromise:
|
|
510
|
-
validate:
|
|
406
|
+
defaultValue: joi.alternatives().try(joi.array().items(joi.object()), joi.func(), joi.object()),
|
|
407
|
+
editor: joi.object().keys({
|
|
408
|
+
CellComponent: componentSchema.optional(),
|
|
409
|
+
FieldComponent: componentSchema.optional(),
|
|
410
|
+
LazyCellComponent: joi.func().optional(),
|
|
411
|
+
LazyFieldComponent: joi.func().optional(),
|
|
412
|
+
afterReadPromise: joi.func().optional(),
|
|
413
|
+
outputSchema: joi.func().optional(),
|
|
414
|
+
populationPromise: joi.func().optional(),
|
|
415
|
+
validate: joi.func().required()
|
|
511
416
|
}).unknown(),
|
|
512
|
-
type:
|
|
417
|
+
type: joi.string().valid('richText').required()
|
|
513
418
|
});
|
|
514
|
-
const date = baseField.keys({
|
|
515
|
-
name:
|
|
419
|
+
export const date = baseField.keys({
|
|
420
|
+
name: joi.string().required(),
|
|
516
421
|
admin: baseAdminFields.keys({
|
|
517
422
|
components: baseAdminComponentFields.keys({
|
|
518
|
-
Error:
|
|
519
|
-
Label:
|
|
520
|
-
afterInput:
|
|
521
|
-
beforeInput:
|
|
423
|
+
Error: componentSchema,
|
|
424
|
+
Label: componentSchema,
|
|
425
|
+
afterInput: joi.array().items(componentSchema),
|
|
426
|
+
beforeInput: joi.array().items(componentSchema)
|
|
522
427
|
}),
|
|
523
|
-
date:
|
|
524
|
-
displayFormat:
|
|
525
|
-
maxDate:
|
|
526
|
-
maxTime:
|
|
527
|
-
minDate:
|
|
528
|
-
minTime:
|
|
529
|
-
monthsToShow:
|
|
530
|
-
overrides:
|
|
531
|
-
pickerAppearance:
|
|
532
|
-
timeFormat:
|
|
533
|
-
timeIntervals:
|
|
428
|
+
date: joi.object({
|
|
429
|
+
displayFormat: joi.string(),
|
|
430
|
+
maxDate: joi.date(),
|
|
431
|
+
maxTime: joi.date(),
|
|
432
|
+
minDate: joi.date(),
|
|
433
|
+
minTime: joi.date(),
|
|
434
|
+
monthsToShow: joi.number(),
|
|
435
|
+
overrides: joi.object().unknown(),
|
|
436
|
+
pickerAppearance: joi.string(),
|
|
437
|
+
timeFormat: joi.string(),
|
|
438
|
+
timeIntervals: joi.number()
|
|
534
439
|
}),
|
|
535
|
-
placeholder:
|
|
440
|
+
placeholder: joi.string()
|
|
536
441
|
}),
|
|
537
|
-
defaultValue:
|
|
538
|
-
type:
|
|
442
|
+
defaultValue: joi.alternatives().try(joi.string(), joi.func()),
|
|
443
|
+
type: joi.string().valid('date').required()
|
|
539
444
|
});
|
|
540
|
-
const ui =
|
|
541
|
-
name:
|
|
542
|
-
admin:
|
|
543
|
-
components:
|
|
544
|
-
Cell:
|
|
545
|
-
Field:
|
|
445
|
+
export const ui = joi.object().keys({
|
|
446
|
+
name: joi.string().required(),
|
|
447
|
+
admin: joi.object().keys({
|
|
448
|
+
components: joi.object().keys({
|
|
449
|
+
Cell: componentSchema,
|
|
450
|
+
Field: componentSchema
|
|
546
451
|
}).default({}),
|
|
547
|
-
condition:
|
|
548
|
-
position:
|
|
549
|
-
width:
|
|
452
|
+
condition: joi.func(),
|
|
453
|
+
position: joi.string().valid('sidebar'),
|
|
454
|
+
width: joi.string()
|
|
550
455
|
}).default(),
|
|
551
|
-
custom:
|
|
552
|
-
label:
|
|
553
|
-
|
|
456
|
+
custom: joi.object().pattern(joi.string(), joi.any()),
|
|
457
|
+
label: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [
|
|
458
|
+
joi.string()
|
|
554
459
|
])),
|
|
555
|
-
type:
|
|
460
|
+
type: joi.string().valid('ui').required()
|
|
556
461
|
});
|
|
557
|
-
const fieldSchema =
|
|
558
|
-
|
|
462
|
+
const fieldSchema = joi.alternatives().try(text, number, textarea, email, code, json, select, group, array, row, collapsible, tabs, radio, relationship, checkbox, upload, richText, blocks, date, point, ui).id('field');
|
|
463
|
+
export default fieldSchema;
|
|
559
464
|
|
|
560
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWVsZHMvY29uZmlnL3NjaGVtYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgam9pIGZyb20gJ2pvaSdcblxuaW1wb3J0IHsgY29tcG9uZW50U2NoZW1hIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NoYXJlZC9jb21wb25lbnRTY2hlbWEnXG5cbmV4cG9ydCBjb25zdCBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMgPSBqb2lcbiAgLm9iamVjdCgpXG4gIC5rZXlzKHtcbiAgICBDZWxsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgRmllbGQ6IGNvbXBvbmVudFNjaGVtYSxcbiAgICBGaWx0ZXI6IGNvbXBvbmVudFNjaGVtYSxcbiAgfSlcbiAgLmRlZmF1bHQoe30pXG5cbmV4cG9ydCBjb25zdCBiYXNlQWRtaW5GaWVsZHMgPSBqb2kub2JqZWN0KCkua2V5cyh7XG4gIGNsYXNzTmFtZTogam9pLnN0cmluZygpLFxuICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMsXG4gIGNvbmRpdGlvbjogam9pLmZ1bmMoKSxcbiAgZGVzY3JpcHRpb246IGpvaVxuICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSwgY29tcG9uZW50U2NoZW1hKSxcbiAgZGlzYWJsZUJ1bGtFZGl0OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBkaXNhYmxlZDogam9pLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaGlkZGVuOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpbml0Q29sbGFwc2VkOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBwb3NpdGlvbjogam9pLnN0cmluZygpLnZhbGlkKCdzaWRlYmFyJyksXG4gIHJlYWRPbmx5OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBzdHlsZTogam9pLm9iamVjdCgpLnVua25vd24oKSxcbiAgd2lkdGg6IGpvaS5zdHJpbmcoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBiYXNlRmllbGQgPSBqb2lcbiAgLm9iamVjdCgpXG4gIC5rZXlzKHtcbiAgICBhY2Nlc3M6IGpvaS5vYmplY3QoKS5rZXlzKHtcbiAgICAgIGNyZWF0ZTogam9pLmZ1bmMoKSxcbiAgICAgIHJlYWQ6IGpvaS5mdW5jKCksXG4gICAgICB1cGRhdGU6IGpvaS5mdW5jKCksXG4gICAgfSksXG4gICAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5kZWZhdWx0KCksXG4gICAgY3VzdG9tOiBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIGpvaS5hbnkoKSksXG4gICAgaGlkZGVuOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGhvb2tzOiBqb2lcbiAgICAgIC5vYmplY3QoKVxuICAgICAgLmtleXMoe1xuICAgICAgICBhZnRlckNoYW5nZTogam9pLmFycmF5KCkuaXRlbXMoam9pLmZ1bmMoKSkuZGVmYXVsdChbXSksXG4gICAgICAgIGFmdGVyUmVhZDogam9pLmFycmF5KCkuaXRlbXMoam9pLmZ1bmMoKSkuZGVmYXVsdChbXSksXG4gICAgICAgIGJlZm9yZUNoYW5nZTogam9pLmFycmF5KCkuaXRlbXMoam9pLmZ1bmMoKSkuZGVmYXVsdChbXSksXG4gICAgICAgIGJlZm9yZVZhbGlkYXRlOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kuZnVuYygpKS5kZWZhdWx0KFtdKSxcbiAgICAgIH0pXG4gICAgICAuZGVmYXVsdCgpLFxuICAgIGluZGV4OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGxhYmVsOiBqb2lcbiAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgLnRyeShqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSwgam9pLnN0cmluZygpLCBqb2kudmFsaWQoZmFsc2UpKSxcbiAgICBsb2NhbGl6ZWQ6IGpvaS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcmVxdWlyZWQ6IGpvaS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgc2F2ZVRvSldUOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5ib29sZWFuKCksIGpvaS5zdHJpbmcoKSkuZGVmYXVsdChmYWxzZSksXG4gICAgdW5pcXVlOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHZhbGlkYXRlOiBqb2kuZnVuYygpLFxuICB9KVxuICAuZGVmYXVsdCgpXG5cbmV4cG9ydCBjb25zdCBpZEZpZWxkID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkudmFsaWQoJ2lkJyksXG4gIGxvY2FsaXplZDogam9pLmludmFsaWQodHJ1ZSksXG4gIHJlcXVpcmVkOiBqb2kubm90KGZhbHNlLCAwKS5kZWZhdWx0KHRydWUpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3RleHQnLCAnbnVtYmVyJyksXG59KVxuXG5leHBvcnQgY29uc3QgdGV4dCA9IGJhc2VGaWVsZC5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMua2V5cyh7XG4gICAgYXV0b0NvbXBsZXRlOiBqb2kuc3RyaW5nKCksXG4gICAgY29tcG9uZW50czogYmFzZUFkbWluQ29tcG9uZW50RmllbGRzLmtleXMoe1xuICAgICAgRXJyb3I6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgIExhYmVsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBhZnRlcklucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgICAgYmVmb3JlSW5wdXQ6IGpvaS5hcnJheSgpLml0ZW1zKGNvbXBvbmVudFNjaGVtYSksXG4gICAgfSksXG4gICAgcGxhY2Vob2xkZXI6IGpvaVxuICAgICAgLmFsdGVybmF0aXZlcygpXG4gICAgICAudHJ5KGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pLCBqb2kuc3RyaW5nKCkpLFxuICAgIHJ0bDogam9pLmJvb2xlYW4oKSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuc3RyaW5nKCksIGpvaS5mdW5jKCkpLFxuICBoYXNNYW55OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBtYXhMZW5ndGg6IGpvaS5udW1iZXIoKSxcbiAgbWF4Um93czogam9pLm51bWJlcigpLndoZW4oJ2hhc01hbnknLCB7IGlzOiBqb2kubm90KHRydWUpLCB0aGVuOiBqb2kuZm9yYmlkZGVuKCkgfSksXG4gIG1pbkxlbmd0aDogam9pLm51bWJlcigpLFxuICBtaW5Sb3dzOiBqb2kubnVtYmVyKCkud2hlbignaGFzTWFueScsIHsgaXM6IGpvaS5ub3QodHJ1ZSksIHRoZW46IGpvaS5mb3JiaWRkZW4oKSB9KSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCd0ZXh0JykucmVxdWlyZWQoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBudW1iZXIgPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGF1dG9Db21wbGV0ZTogam9pLnN0cmluZygpLFxuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgICAgYWZ0ZXJJbnB1dDogam9pXG4gICAgICAgIC5hcnJheSgpXG4gICAgICAgIC5pdGVtcyhjb21wb25lbnRTY2hlbWEpXG4gICAgICAgIC53aGVuKCdoYXNNYW55JywgeyBub3Q6IHRydWUsIG90aGVyd2lzZTogam9pLmZvcmJpZGRlbigpIH0pLFxuICAgICAgYmVmb3JlSW5wdXQ6IGpvaVxuICAgICAgICAuYXJyYXkoKVxuICAgICAgICAuaXRlbXMoY29tcG9uZW50U2NoZW1hKVxuICAgICAgICAud2hlbignaGFzTWFueScsIHsgbm90OiB0cnVlLCBvdGhlcndpc2U6IGpvaS5mb3JiaWRkZW4oKSB9KSxcbiAgICB9KSxcbiAgICBwbGFjZWhvbGRlcjogam9pLnN0cmluZygpLFxuICAgIHN0ZXA6IGpvaS5udW1iZXIoKSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kubnVtYmVyKCksIGpvaS5mdW5jKCkpLFxuICBoYXNNYW55OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBtYXg6IGpvaS5udW1iZXIoKSxcbiAgbWF4Um93czogam9pLm51bWJlcigpLndoZW4oJ2hhc01hbnknLCB7IGlzOiBqb2kubm90KHRydWUpLCB0aGVuOiBqb2kuZm9yYmlkZGVuKCkgfSksXG4gIG1pbjogam9pLm51bWJlcigpLFxuICBtaW5Sb3dzOiBqb2kubnVtYmVyKCkud2hlbignaGFzTWFueScsIHsgaXM6IGpvaS5ub3QodHJ1ZSksIHRoZW46IGpvaS5mb3JiaWRkZW4oKSB9KSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdudW1iZXInKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IHRleHRhcmVhID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMua2V5cyh7XG4gICAgICBFcnJvcjogY29tcG9uZW50U2NoZW1hLFxuICAgICAgTGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgIGFmdGVySW5wdXQ6IGpvaS5hcnJheSgpLml0ZW1zKGNvbXBvbmVudFNjaGVtYSksXG4gICAgICBiZWZvcmVJbnB1dDogam9pLmFycmF5KCkuaXRlbXMoY29tcG9uZW50U2NoZW1hKSxcbiAgICB9KSxcbiAgICBwbGFjZWhvbGRlcjogam9pLnN0cmluZygpLFxuICAgIHJvd3M6IGpvaS5udW1iZXIoKSxcbiAgICBydGw6IGpvaS5ib29sZWFuKCksXG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLnN0cmluZygpLCBqb2kuZnVuYygpKSxcbiAgbWF4TGVuZ3RoOiBqb2kubnVtYmVyKCksXG4gIG1pbkxlbmd0aDogam9pLm51bWJlcigpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3RleHRhcmVhJykucmVxdWlyZWQoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IGJhc2VGaWVsZC5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMua2V5cyh7XG4gICAgYXV0b0NvbXBsZXRlOiBqb2kuc3RyaW5nKCksXG4gICAgY29tcG9uZW50czogYmFzZUFkbWluQ29tcG9uZW50RmllbGRzLmtleXMoe1xuICAgICAgRXJyb3I6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgIExhYmVsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBhZnRlcklucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgICAgYmVmb3JlSW5wdXQ6IGpvaS5hcnJheSgpLml0ZW1zKGNvbXBvbmVudFNjaGVtYSksXG4gICAgfSksXG4gICAgcGxhY2Vob2xkZXI6IGpvaS5zdHJpbmcoKSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuc3RyaW5nKCksIGpvaS5mdW5jKCkpLFxuICBtYXhMZW5ndGg6IGpvaS5udW1iZXIoKSxcbiAgbWluTGVuZ3RoOiBqb2kubnVtYmVyKCksXG4gIHR5cGU6IGpvaS5zdHJpbmcoKS52YWxpZCgnZW1haWwnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGNvZGUgPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgIH0pLFxuICAgIGVkaXRvck9wdGlvbnM6IGpvaS5vYmplY3QoKS51bmtub3duKCksIC8vIEVkaXRvclsnb3B0aW9ucyddIEBtb25hY28tZWRpdG9yL3JlYWN0XG4gICAgbGFuZ3VhZ2U6IGpvaS5zdHJpbmcoKSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuc3RyaW5nKCksIGpvaS5mdW5jKCkpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ2NvZGUnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGpzb24gPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgIH0pLFxuICAgIGVkaXRvck9wdGlvbnM6IGpvaS5vYmplY3QoKS51bmtub3duKCksIC8vIEVkaXRvclsnb3B0aW9ucyddIEBtb25hY28tZWRpdG9yL3JlYWN0XG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLmFycmF5KCksIGpvaS5vYmplY3QoKSksXG4gIHR5cGU6IGpvaS5zdHJpbmcoKS52YWxpZCgnanNvbicpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3Qgc2VsZWN0ID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMua2V5cyh7XG4gICAgICBFcnJvcjogY29tcG9uZW50U2NoZW1hLFxuICAgICAgTGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICB9KSxcbiAgICBpc0NsZWFyYWJsZTogam9pLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBpc1NvcnRhYmxlOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICB9KSxcbiAgZGVmYXVsdFZhbHVlOiBqb2lcbiAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAudHJ5KGpvaS5zdHJpbmcoKS5hbGxvdygnJyksIGpvaS5hcnJheSgpLml0ZW1zKGpvaS5zdHJpbmcoKS5hbGxvdygnJykpLCBqb2kuZnVuYygpKSxcbiAgaGFzTWFueTogam9pLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgb3B0aW9uczogam9pXG4gICAgLmFycmF5KClcbiAgICAubWluKDEpXG4gICAgLml0ZW1zKFxuICAgICAgam9pLmFsdGVybmF0aXZlcygpLnRyeShcbiAgICAgICAgam9pLnN0cmluZygpLFxuICAgICAgICBqb2kub2JqZWN0KHtcbiAgICAgICAgICBsYWJlbDogam9pXG4gICAgICAgICAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAgICAgICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSksXG4gICAgICAgICAgdmFsdWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLmFsbG93KCcnKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIClcbiAgICAucmVxdWlyZWQoKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdzZWxlY3QnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IHJhZGlvID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMua2V5cyh7XG4gICAgICBFcnJvcjogY29tcG9uZW50U2NoZW1hLFxuICAgICAgTGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICB9KSxcbiAgICBsYXlvdXQ6IGpvaS5zdHJpbmcoKS52YWxpZCgndmVydGljYWwnLCAnaG9yaXpvbnRhbCcpLFxuICB9KSxcbiAgZGVmYXVsdFZhbHVlOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5zdHJpbmcoKS5hbGxvdygnJyksIGpvaS5mdW5jKCkpLFxuICBvcHRpb25zOiBqb2lcbiAgICAuYXJyYXkoKVxuICAgIC5taW4oMSlcbiAgICAuaXRlbXMoXG4gICAgICBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KFxuICAgICAgICBqb2kuc3RyaW5nKCksXG4gICAgICAgIGpvaS5vYmplY3Qoe1xuICAgICAgICAgIGxhYmVsOiBqb2lcbiAgICAgICAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgICAgICAgLnRyeShqb2kuc3RyaW5nKCksIGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pKVxuICAgICAgICAgICAgLnJlcXVpcmVkKCksXG4gICAgICAgICAgdmFsdWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLmFsbG93KCcnKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIClcbiAgICAucmVxdWlyZWQoKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdyYWRpbycpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3Qgcm93ID0gYmFzZUZpZWxkLmtleXMoe1xuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmRlZmF1bHQoKSxcbiAgZmllbGRzOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kubGluaygnI2ZpZWxkJykpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3JvdycpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3QgY29sbGFwc2libGUgPSBiYXNlRmllbGQua2V5cyh7XG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMuZGVmYXVsdCgpLFxuICBmaWVsZHM6IGpvaS5hcnJheSgpLml0ZW1zKGpvaS5saW5rKCcjZmllbGQnKSksXG4gIGxhYmVsOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5zdHJpbmcoKSwgY29tcG9uZW50U2NoZW1hKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdjb2xsYXBzaWJsZScpLnJlcXVpcmVkKCksXG59KVxuXG5jb25zdCB0YWIgPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS53aGVuKCdsb2NhbGl6ZWQnLCB7IGlzOiBqb2kuZXhpc3QoKSwgdGhlbjogam9pLnJlcXVpcmVkKCkgfSksXG4gIGRlc2NyaXB0aW9uOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5zdHJpbmcoKSwgY29tcG9uZW50U2NoZW1hKSxcbiAgZmllbGRzOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kubGluaygnI2ZpZWxkJykpLnJlcXVpcmVkKCksXG4gIGludGVyZmFjZU5hbWU6IGpvaS5zdHJpbmcoKS53aGVuKCduYW1lJywgeyBub3Q6IGpvaS5leGlzdCgpLCB0aGVuOiBqb2kuZm9yYmlkZGVuKCkgfSksXG4gIGxhYmVsOiBqb2lcbiAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAudHJ5KGpvaS5zdHJpbmcoKSwgam9pLm9iamVjdCgpLnBhdHRlcm4oam9pLnN0cmluZygpLCBbam9pLnN0cmluZygpXSkpXG4gICAgLndoZW4oJ25hbWUnLCB7IGlzOiBqb2kubm90KCksIHRoZW46IGpvaS5yZXF1aXJlZCgpIH0pLFxuICBsb2NhbGl6ZWQ6IGpvaS5ib29sZWFuKCksXG4gIHNhdmVUb0pXVDogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuYm9vbGVhbigpLCBqb2kuc3RyaW5nKCkpLFxufSlcblxuZXhwb3J0IGNvbnN0IHRhYnMgPSBiYXNlRmllbGQua2V5cyh7XG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMua2V5cyh7XG4gICAgZGVzY3JpcHRpb246IGpvaS5mb3JiaWRkZW4oKSxcbiAgfSksXG4gIGZpZWxkczogam9pLmZvcmJpZGRlbigpLFxuICBsb2NhbGl6ZWQ6IGpvaS5mb3JiaWRkZW4oKSxcbiAgdGFiczogam9pLmFycmF5KCkuaXRlbXModGFiKS5yZXF1aXJlZCgpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3RhYnMnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGdyb3VwID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBoaWRlR3V0dGVyOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLm9iamVjdCgpLCBqb2kuZnVuYygpKSxcbiAgZmllbGRzOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kubGluaygnI2ZpZWxkJykpLFxuICBpbnRlcmZhY2VOYW1lOiBqb2kuc3RyaW5nKCksXG4gIHR5cGU6IGpvaS5zdHJpbmcoKS52YWxpZCgnZ3JvdXAnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGFycmF5ID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkc1xuICAgIC5rZXlzKHtcbiAgICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkc1xuICAgICAgICAua2V5cyh7XG4gICAgICAgICAgUm93TGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgfSlcbiAgICAgICAgLmRlZmF1bHQoe30pLFxuICAgIH0pXG4gICAgLmRlZmF1bHQoe30pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLmFycmF5KCkuaXRlbXMoam9pLm9iamVjdCgpKSwgam9pLmZ1bmMoKSksXG4gIGZpZWxkczogam9pLmFycmF5KCkuaXRlbXMoam9pLmxpbmsoJyNmaWVsZCcpKS5yZXF1aXJlZCgpLFxuICBpbnRlcmZhY2VOYW1lOiBqb2kuc3RyaW5nKCksXG4gIGxhYmVsczogam9pLm9iamVjdCh7XG4gICAgcGx1cmFsOiBqb2lcbiAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgLnRyeShqb2kuc3RyaW5nKCksIGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pKSxcbiAgICBzaW5ndWxhcjogam9pXG4gICAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSksXG4gIH0pLFxuICBtYXhSb3dzOiBqb2kubnVtYmVyKCksXG4gIG1pblJvd3M6IGpvaS5udW1iZXIoKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdhcnJheScpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3QgdXBsb2FkID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMua2V5cyh7XG4gICAgICBFcnJvcjogY29tcG9uZW50U2NoZW1hLFxuICAgICAgTGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICB9KSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kub2JqZWN0KCksIGpvaS5mdW5jKCkpLFxuICBmaWx0ZXJPcHRpb25zOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5vYmplY3QoKSwgam9pLmZ1bmMoKSksXG4gIG1heERlcHRoOiBqb2kubnVtYmVyKCksXG4gIHJlbGF0aW9uVG86IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3VwbG9hZCcpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3QgY2hlY2tib3ggPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgICAgYWZ0ZXJJbnB1dDogam9pLmFycmF5KCkuaXRlbXMoY29tcG9uZW50U2NoZW1hKSxcbiAgICAgIGJlZm9yZUlucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgIH0pLFxuICB9KSxcbiAgZGVmYXVsdFZhbHVlOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5ib29sZWFuKCksIGpvaS5mdW5jKCkpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ2NoZWNrYm94JykucmVxdWlyZWQoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBwb2ludCA9IGJhc2VGaWVsZC5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMua2V5cyh7XG4gICAgY29tcG9uZW50czogYmFzZUFkbWluQ29tcG9uZW50RmllbGRzLmtleXMoe1xuICAgICAgRXJyb3I6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgIExhYmVsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBhZnRlcklucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgICAgYmVmb3JlSW5wdXQ6IGpvaS5hcnJheSgpLml0ZW1zKGNvbXBvbmVudFNjaGVtYSksXG4gICAgfSksXG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLmFycmF5KCkuaXRlbXMoam9pLm51bWJlcigpKS5tYXgoMikubWluKDIpLCBqb2kuZnVuYygpKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdwb2ludCcpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3QgcmVsYXRpb25zaGlwID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBhbGxvd0NyZWF0ZTogam9pLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgIH0pLFxuICAgIGlzU29ydGFibGU6IGpvaS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgc29ydE9wdGlvbnM6IGpvaS5hbHRlcm5hdGl2ZXMoKS5jb25kaXRpb25hbChqb2kucmVmKCcuLi5yZWxhdGlvblRvJyksIHtcbiAgICAgIGlzOiBqb2kuc3RyaW5nKCksXG4gICAgICBvdGhlcndpc2U6IGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgam9pLnN0cmluZygpKSxcbiAgICAgIHRoZW46IGpvaS5zdHJpbmcoKSxcbiAgICB9KSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuZnVuYygpKSxcbiAgZmlsdGVyT3B0aW9uczogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kub2JqZWN0KCksIGpvaS5mdW5jKCkpLFxuICBoYXNNYW55OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBtYXg6IGpvaVxuICAgIC5udW1iZXIoKVxuICAgIC53aGVuKCdoYXNNYW55JywgeyBpczogam9pLm5vdCh0cnVlKSwgdGhlbjogam9pLmZvcmJpZGRlbigpIH0pXG4gICAgLndhcm5pbmcoJ2RlcHJlY2F0ZWQnLCB7IG1lc3NhZ2U6ICdVc2UgbWF4Um93cyBpbnN0ZWFkLicgfSksXG4gIG1heERlcHRoOiBqb2kubnVtYmVyKCksXG4gIG1heFJvd3M6IGpvaS5udW1iZXIoKS53aGVuKCdoYXNNYW55JywgeyBpczogam9pLm5vdCh0cnVlKSwgdGhlbjogam9pLmZvcmJpZGRlbigpIH0pLFxuICBtaW46IGpvaVxuICAgIC5udW1iZXIoKVxuICAgIC53aGVuKCdoYXNNYW55JywgeyBpczogam9pLm5vdCh0cnVlKSwgdGhlbjogam9pLmZvcmJpZGRlbigpIH0pXG4gICAgLndhcm5pbmcoJ2RlcHJlY2F0ZWQnLCB7IG1lc3NhZ2U6ICdVc2UgbWluUm93cyBpbnN0ZWFkLicgfSksXG4gIG1pblJvd3M6IGpvaS5udW1iZXIoKS53aGVuKCdoYXNNYW55JywgeyBpczogam9pLm5vdCh0cnVlKSwgdGhlbjogam9pLmZvcmJpZGRlbigpIH0pLFxuICByZWxhdGlvblRvOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLCBqb2kuYXJyYXkoKS5pdGVtcyhqb2kuc3RyaW5nKCkpKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdyZWxhdGlvbnNoaXAnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGJsb2NrcyA9IGJhc2VGaWVsZC5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGJsb2Nrczogam9pXG4gICAgLmFycmF5KClcbiAgICAuaXRlbXMoXG4gICAgICBqb2kub2JqZWN0KHtcbiAgICAgICAgZmllbGRzOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kubGluaygnI2ZpZWxkJykpLFxuICAgICAgICBncmFwaFFMOiBqb2kub2JqZWN0KCkua2V5cyh7XG4gICAgICAgICAgc2luZ3VsYXJOYW1lOiBqb2kuc3RyaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBpbWFnZUFsdFRleHQ6IGpvaS5zdHJpbmcoKSxcbiAgICAgICAgaW1hZ2VVUkw6IGpvaS5zdHJpbmcoKSxcbiAgICAgICAgaW50ZXJmYWNlTmFtZTogam9pLnN0cmluZygpLFxuICAgICAgICBsYWJlbHM6IGpvaS5vYmplY3Qoe1xuICAgICAgICAgIHBsdXJhbDogam9pXG4gICAgICAgICAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAgICAgICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSksXG4gICAgICAgICAgc2luZ3VsYXI6IGpvaVxuICAgICAgICAgICAgLmFsdGVybmF0aXZlcygpXG4gICAgICAgICAgICAudHJ5KGpvaS5zdHJpbmcoKSwgam9pLm9iamVjdCgpLnBhdHRlcm4oam9pLnN0cmluZygpLCBbam9pLnN0cmluZygpXSkpLFxuICAgICAgICB9KSxcbiAgICAgICAgc2x1Zzogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gICAgICAgIGN1c3RvbTogam9pLm9iamVjdCgpLnBhdHRlcm4oam9pLnN0cmluZygpLCBqb2kuYW55KCkpLFxuICAgICAgfSksXG4gICAgKVxuICAgIC5yZXF1aXJlZCgpLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLmFycmF5KCkuaXRlbXMoam9pLm9iamVjdCgpKSwgam9pLmZ1bmMoKSksXG4gIGxhYmVsczogam9pLm9iamVjdCh7XG4gICAgcGx1cmFsOiBqb2lcbiAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgLnRyeShqb2kuc3RyaW5nKCksIGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pKSxcbiAgICBzaW5ndWxhcjogam9pXG4gICAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSksXG4gIH0pLFxuICBtYXhSb3dzOiBqb2kubnVtYmVyKCksXG4gIG1pblJvd3M6IGpvaS5udW1iZXIoKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdibG9ja3MnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IHJpY2hUZXh0ID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5kZWZhdWx0KCksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuYXJyYXkoKS5pdGVtcyhqb2kub2JqZWN0KCkpLCBqb2kuZnVuYygpLCBqb2kub2JqZWN0KCkpLFxuICBlZGl0b3I6IGpvaVxuICAgIC5vYmplY3QoKVxuICAgIC5rZXlzKHtcbiAgICAgIENlbGxDb21wb25lbnQ6IGNvbXBvbmVudFNjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgRmllbGRDb21wb25lbnQ6IGNvbXBvbmVudFNjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgTGF6eUNlbGxDb21wb25lbnQ6IGpvaS5mdW5jKCkub3B0aW9uYWwoKSxcbiAgICAgIExhenlGaWVsZENvbXBvbmVudDogam9pLmZ1bmMoKS5vcHRpb25hbCgpLFxuICAgICAgYWZ0ZXJSZWFkUHJvbWlzZTogam9pLmZ1bmMoKS5vcHRpb25hbCgpLFxuICAgICAgb3V0cHV0U2NoZW1hOiBqb2kuZnVuYygpLm9wdGlvbmFsKCksXG4gICAgICBwb3B1bGF0aW9uUHJvbWlzZTogam9pLmZ1bmMoKS5vcHRpb25hbCgpLFxuICAgICAgdmFsaWRhdGU6IGpvaS5mdW5jKCkucmVxdWlyZWQoKSxcbiAgICB9KVxuICAgIC51bmtub3duKCksXG4gIHR5cGU6IGpvaS5zdHJpbmcoKS52YWxpZCgncmljaFRleHQnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGRhdGUgPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgICAgYWZ0ZXJJbnB1dDogam9pLmFycmF5KCkuaXRlbXMoY29tcG9uZW50U2NoZW1hKSxcbiAgICAgIGJlZm9yZUlucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgIH0pLFxuICAgIGRhdGU6IGpvaS5vYmplY3Qoe1xuICAgICAgZGlzcGxheUZvcm1hdDogam9pLnN0cmluZygpLFxuICAgICAgbWF4RGF0ZTogam9pLmRhdGUoKSxcbiAgICAgIG1heFRpbWU6IGpvaS5kYXRlKCksXG4gICAgICBtaW5EYXRlOiBqb2kuZGF0ZSgpLFxuICAgICAgbWluVGltZTogam9pLmRhdGUoKSxcbiAgICAgIG1vbnRoc1RvU2hvdzogam9pLm51bWJlcigpLFxuICAgICAgb3ZlcnJpZGVzOiBqb2kub2JqZWN0KCkudW5rbm93bigpLFxuICAgICAgcGlja2VyQXBwZWFyYW5jZTogam9pLnN0cmluZygpLFxuICAgICAgdGltZUZvcm1hdDogam9pLnN0cmluZygpLFxuICAgICAgdGltZUludGVydmFsczogam9pLm51bWJlcigpLFxuICAgIH0pLFxuICAgIHBsYWNlaG9sZGVyOiBqb2kuc3RyaW5nKCksXG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLnN0cmluZygpLCBqb2kuZnVuYygpKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdkYXRlJykucmVxdWlyZWQoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCB1aSA9IGpvaS5vYmplY3QoKS5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGFkbWluOiBqb2lcbiAgICAub2JqZWN0KClcbiAgICAua2V5cyh7XG4gICAgICBjb21wb25lbnRzOiBqb2lcbiAgICAgICAgLm9iamVjdCgpXG4gICAgICAgIC5rZXlzKHtcbiAgICAgICAgICBDZWxsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgRmllbGQ6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgfSlcbiAgICAgICAgLmRlZmF1bHQoe30pLFxuICAgICAgY29uZGl0aW9uOiBqb2kuZnVuYygpLFxuICAgICAgcG9zaXRpb246IGpvaS5zdHJpbmcoKS52YWxpZCgnc2lkZWJhcicpLFxuICAgICAgd2lkdGg6IGpvaS5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5kZWZhdWx0KCksXG4gIGN1c3RvbTogam9pLm9iamVjdCgpLnBhdHRlcm4oam9pLnN0cmluZygpLCBqb2kuYW55KCkpLFxuICBsYWJlbDogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuc3RyaW5nKCksIGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCd1aScpLnJlcXVpcmVkKCksXG59KVxuXG5jb25zdCBmaWVsZFNjaGVtYSA9IGpvaVxuICAuYWx0ZXJuYXRpdmVzKClcbiAgLnRyeShcbiAgICB0ZXh0LFxuICAgIG51bWJlcixcbiAgICB0ZXh0YXJlYSxcbiAgICBlbWFpbCxcbiAgICBjb2RlLFxuICAgIGpzb24sXG4gICAgc2VsZWN0LFxuICAgIGdyb3VwLFxuICAgIGFycmF5LFxuICAgIHJvdyxcbiAgICBjb2xsYXBzaWJsZSxcbiAgICB0YWJzLFxuICAgIHJhZGlvLFxuICAgIHJlbGF0aW9uc2hpcCxcbiAgICBjaGVja2JveCxcbiAgICB1cGxvYWQsXG4gICAgcmljaFRleHQsXG4gICAgYmxvY2tzLFxuICAgIGRhdGUsXG4gICAgcG9pbnQsXG4gICAgdWksXG4gIClcbiAgLmlkKCdmaWVsZCcpXG5cbmV4cG9ydCBkZWZhdWx0IGZpZWxkU2NoZW1hXG4iXSwibmFtZXMiOlsiYXJyYXkiLCJiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMiLCJiYXNlQWRtaW5GaWVsZHMiLCJiYXNlRmllbGQiLCJibG9ja3MiLCJjaGVja2JveCIsImNvZGUiLCJjb2xsYXBzaWJsZSIsImRhdGUiLCJlbWFpbCIsImdyb3VwIiwiaWRGaWVsZCIsImpzb24iLCJudW1iZXIiLCJwb2ludCIsInJhZGlvIiwicmVsYXRpb25zaGlwIiwicmljaFRleHQiLCJyb3ciLCJzZWxlY3QiLCJ0YWJzIiwidGV4dCIsInRleHRhcmVhIiwidWkiLCJ1cGxvYWQiLCJqb2kiLCJvYmplY3QiLCJrZXlzIiwiQ2VsbCIsImNvbXBvbmVudFNjaGVtYSIsIkZpZWxkIiwiRmlsdGVyIiwiZGVmYXVsdCIsImNsYXNzTmFtZSIsInN0cmluZyIsImNvbXBvbmVudHMiLCJjb25kaXRpb24iLCJmdW5jIiwiZGVzY3JpcHRpb24iLCJhbHRlcm5hdGl2ZXMiLCJ0cnkiLCJwYXR0ZXJuIiwiZGlzYWJsZUJ1bGtFZGl0IiwiYm9vbGVhbiIsImRpc2FibGVkIiwiaGlkZGVuIiwiaW5pdENvbGxhcHNlZCIsInBvc2l0aW9uIiwidmFsaWQiLCJyZWFkT25seSIsInN0eWxlIiwidW5rbm93biIsIndpZHRoIiwiYWNjZXNzIiwiY3JlYXRlIiwicmVhZCIsInVwZGF0ZSIsImFkbWluIiwiY3VzdG9tIiwiYW55IiwiaG9va3MiLCJhZnRlckNoYW5nZSIsIml0ZW1zIiwiYWZ0ZXJSZWFkIiwiYmVmb3JlQ2hhbmdlIiwiYmVmb3JlVmFsaWRhdGUiLCJpbmRleCIsImxhYmVsIiwibG9jYWxpemVkIiwicmVxdWlyZWQiLCJzYXZlVG9KV1QiLCJ1bmlxdWUiLCJ2YWxpZGF0ZSIsIm5hbWUiLCJpbnZhbGlkIiwibm90IiwidHlwZSIsImF1dG9Db21wbGV0ZSIsIkVycm9yIiwiTGFiZWwiLCJhZnRlcklucHV0IiwiYmVmb3JlSW5wdXQiLCJwbGFjZWhvbGRlciIsInJ0bCIsImRlZmF1bHRWYWx1ZSIsImhhc01hbnkiLCJtYXhMZW5ndGgiLCJtYXhSb3dzIiwid2hlbiIsImlzIiwidGhlbiIsImZvcmJpZGRlbiIsIm1pbkxlbmd0aCIsIm1pblJvd3MiLCJvdGhlcndpc2UiLCJzdGVwIiwibWF4IiwibWluIiwicm93cyIsImVkaXRvck9wdGlvbnMiLCJsYW5ndWFnZSIsImlzQ2xlYXJhYmxlIiwiaXNTb3J0YWJsZSIsImFsbG93Iiwib3B0aW9ucyIsInZhbHVlIiwibGF5b3V0IiwiZmllbGRzIiwibGluayIsInRhYiIsImV4aXN0IiwiaW50ZXJmYWNlTmFtZSIsImhpZGVHdXR0ZXIiLCJSb3dMYWJlbCIsImxhYmVscyIsInBsdXJhbCIsInNpbmd1bGFyIiwiZmlsdGVyT3B0aW9ucyIsIm1heERlcHRoIiwicmVsYXRpb25UbyIsImFsbG93Q3JlYXRlIiwic29ydE9wdGlvbnMiLCJjb25kaXRpb25hbCIsInJlZiIsIndhcm5pbmciLCJtZXNzYWdlIiwiZ3JhcGhRTCIsInNpbmd1bGFyTmFtZSIsImltYWdlQWx0VGV4dCIsImltYWdlVVJMIiwic2x1ZyIsImVkaXRvciIsIkNlbGxDb21wb25lbnQiLCJvcHRpb25hbCIsIkZpZWxkQ29tcG9uZW50IiwiTGF6eUNlbGxDb21wb25lbnQiLCJMYXp5RmllbGRDb21wb25lbnQiLCJhZnRlclJlYWRQcm9taXNlIiwib3V0cHV0U2NoZW1hIiwicG9wdWxhdGlvblByb21pc2UiLCJkaXNwbGF5Rm9ybWF0IiwibWF4RGF0ZSIsIm1heFRpbWUiLCJtaW5EYXRlIiwibWluVGltZSIsIm1vbnRoc1RvU2hvdyIsIm92ZXJyaWRlcyIsInBpY2tlckFwcGVh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
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWVsZHMvY29uZmlnL3NjaGVtYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgam9pIGZyb20gJ2pvaSdcblxuaW1wb3J0IHsgY29tcG9uZW50U2NoZW1hIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NoYXJlZC9jb21wb25lbnRTY2hlbWEnXG5cbmV4cG9ydCBjb25zdCBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMgPSBqb2lcbiAgLm9iamVjdCgpXG4gIC5rZXlzKHtcbiAgICBDZWxsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgRmllbGQ6IGNvbXBvbmVudFNjaGVtYSxcbiAgICBGaWx0ZXI6IGNvbXBvbmVudFNjaGVtYSxcbiAgfSlcbiAgLmRlZmF1bHQoe30pXG5cbmV4cG9ydCBjb25zdCBiYXNlQWRtaW5GaWVsZHMgPSBqb2kub2JqZWN0KCkua2V5cyh7XG4gIGNsYXNzTmFtZTogam9pLnN0cmluZygpLFxuICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMsXG4gIGNvbmRpdGlvbjogam9pLmZ1bmMoKSxcbiAgZGVzY3JpcHRpb246IGpvaVxuICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSwgY29tcG9uZW50U2NoZW1hKSxcbiAgZGlzYWJsZUJ1bGtFZGl0OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBkaXNhYmxlZDogam9pLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgaGlkZGVuOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBpbml0Q29sbGFwc2VkOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBwb3NpdGlvbjogam9pLnN0cmluZygpLnZhbGlkKCdzaWRlYmFyJyksXG4gIHJlYWRPbmx5OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBzdHlsZTogam9pLm9iamVjdCgpLnVua25vd24oKSxcbiAgd2lkdGg6IGpvaS5zdHJpbmcoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBiYXNlRmllbGQgPSBqb2lcbiAgLm9iamVjdCgpXG4gIC5rZXlzKHtcbiAgICBhY2Nlc3M6IGpvaS5vYmplY3QoKS5rZXlzKHtcbiAgICAgIGNyZWF0ZTogam9pLmZ1bmMoKSxcbiAgICAgIHJlYWQ6IGpvaS5mdW5jKCksXG4gICAgICB1cGRhdGU6IGpvaS5mdW5jKCksXG4gICAgfSksXG4gICAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5kZWZhdWx0KCksXG4gICAgY3VzdG9tOiBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIGpvaS5hbnkoKSksXG4gICAgaGlkZGVuOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGhvb2tzOiBqb2lcbiAgICAgIC5vYmplY3QoKVxuICAgICAgLmtleXMoe1xuICAgICAgICBhZnRlckNoYW5nZTogam9pLmFycmF5KCkuaXRlbXMoam9pLmZ1bmMoKSkuZGVmYXVsdChbXSksXG4gICAgICAgIGFmdGVyUmVhZDogam9pLmFycmF5KCkuaXRlbXMoam9pLmZ1bmMoKSkuZGVmYXVsdChbXSksXG4gICAgICAgIGJlZm9yZUNoYW5nZTogam9pLmFycmF5KCkuaXRlbXMoam9pLmZ1bmMoKSkuZGVmYXVsdChbXSksXG4gICAgICAgIGJlZm9yZVZhbGlkYXRlOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kuZnVuYygpKS5kZWZhdWx0KFtdKSxcbiAgICAgIH0pXG4gICAgICAuZGVmYXVsdCgpLFxuICAgIGluZGV4OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGxhYmVsOiBqb2lcbiAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgLnRyeShqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSwgam9pLnN0cmluZygpLCBqb2kudmFsaWQoZmFsc2UpKSxcbiAgICBsb2NhbGl6ZWQ6IGpvaS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcmVxdWlyZWQ6IGpvaS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgc2F2ZVRvSldUOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5ib29sZWFuKCksIGpvaS5zdHJpbmcoKSkuZGVmYXVsdChmYWxzZSksXG4gICAgdW5pcXVlOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHZhbGlkYXRlOiBqb2kuZnVuYygpLFxuICB9KVxuICAuZGVmYXVsdCgpXG5cbmV4cG9ydCBjb25zdCBpZEZpZWxkID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkudmFsaWQoJ2lkJyksXG4gIGxvY2FsaXplZDogam9pLmludmFsaWQodHJ1ZSksXG4gIHJlcXVpcmVkOiBqb2kubm90KGZhbHNlLCAwKS5kZWZhdWx0KHRydWUpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3RleHQnLCAnbnVtYmVyJyksXG59KVxuXG5leHBvcnQgY29uc3QgdGV4dCA9IGJhc2VGaWVsZC5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMua2V5cyh7XG4gICAgYXV0b0NvbXBsZXRlOiBqb2kuc3RyaW5nKCksXG4gICAgY29tcG9uZW50czogYmFzZUFkbWluQ29tcG9uZW50RmllbGRzLmtleXMoe1xuICAgICAgRXJyb3I6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgIExhYmVsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBhZnRlcklucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgICAgYmVmb3JlSW5wdXQ6IGpvaS5hcnJheSgpLml0ZW1zKGNvbXBvbmVudFNjaGVtYSksXG4gICAgfSksXG4gICAgcGxhY2Vob2xkZXI6IGpvaVxuICAgICAgLmFsdGVybmF0aXZlcygpXG4gICAgICAudHJ5KGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pLCBqb2kuc3RyaW5nKCkpLFxuICAgIHJ0bDogam9pLmJvb2xlYW4oKSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuc3RyaW5nKCksIGpvaS5mdW5jKCkpLFxuICBoYXNNYW55OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBtYXhMZW5ndGg6IGpvaS5udW1iZXIoKSxcbiAgbWF4Um93czogam9pLm51bWJlcigpLndoZW4oJ2hhc01hbnknLCB7IGlzOiBqb2kubm90KHRydWUpLCB0aGVuOiBqb2kuZm9yYmlkZGVuKCkgfSksXG4gIG1pbkxlbmd0aDogam9pLm51bWJlcigpLFxuICBtaW5Sb3dzOiBqb2kubnVtYmVyKCkud2hlbignaGFzTWFueScsIHsgaXM6IGpvaS5ub3QodHJ1ZSksIHRoZW46IGpvaS5mb3JiaWRkZW4oKSB9KSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCd0ZXh0JykucmVxdWlyZWQoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBudW1iZXIgPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGF1dG9Db21wbGV0ZTogam9pLnN0cmluZygpLFxuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgICAgYWZ0ZXJJbnB1dDogam9pXG4gICAgICAgIC5hcnJheSgpXG4gICAgICAgIC5pdGVtcyhjb21wb25lbnRTY2hlbWEpXG4gICAgICAgIC53aGVuKCdoYXNNYW55JywgeyBub3Q6IHRydWUsIG90aGVyd2lzZTogam9pLmZvcmJpZGRlbigpIH0pLFxuICAgICAgYmVmb3JlSW5wdXQ6IGpvaVxuICAgICAgICAuYXJyYXkoKVxuICAgICAgICAuaXRlbXMoY29tcG9uZW50U2NoZW1hKVxuICAgICAgICAud2hlbignaGFzTWFueScsIHsgbm90OiB0cnVlLCBvdGhlcndpc2U6IGpvaS5mb3JiaWRkZW4oKSB9KSxcbiAgICB9KSxcbiAgICBwbGFjZWhvbGRlcjogam9pLnN0cmluZygpLFxuICAgIHN0ZXA6IGpvaS5udW1iZXIoKSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kubnVtYmVyKCksIGpvaS5mdW5jKCkpLFxuICBoYXNNYW55OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBtYXg6IGpvaS5udW1iZXIoKSxcbiAgbWF4Um93czogam9pLm51bWJlcigpLndoZW4oJ2hhc01hbnknLCB7IGlzOiBqb2kubm90KHRydWUpLCB0aGVuOiBqb2kuZm9yYmlkZGVuKCkgfSksXG4gIG1pbjogam9pLm51bWJlcigpLFxuICBtaW5Sb3dzOiBqb2kubnVtYmVyKCkud2hlbignaGFzTWFueScsIHsgaXM6IGpvaS5ub3QodHJ1ZSksIHRoZW46IGpvaS5mb3JiaWRkZW4oKSB9KSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdudW1iZXInKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IHRleHRhcmVhID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMua2V5cyh7XG4gICAgICBFcnJvcjogY29tcG9uZW50U2NoZW1hLFxuICAgICAgTGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgIGFmdGVySW5wdXQ6IGpvaS5hcnJheSgpLml0ZW1zKGNvbXBvbmVudFNjaGVtYSksXG4gICAgICBiZWZvcmVJbnB1dDogam9pLmFycmF5KCkuaXRlbXMoY29tcG9uZW50U2NoZW1hKSxcbiAgICB9KSxcbiAgICBwbGFjZWhvbGRlcjogam9pLnN0cmluZygpLFxuICAgIHJvd3M6IGpvaS5udW1iZXIoKSxcbiAgICBydGw6IGpvaS5ib29sZWFuKCksXG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLnN0cmluZygpLCBqb2kuZnVuYygpKSxcbiAgbWF4TGVuZ3RoOiBqb2kubnVtYmVyKCksXG4gIG1pbkxlbmd0aDogam9pLm51bWJlcigpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3RleHRhcmVhJykucmVxdWlyZWQoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IGJhc2VGaWVsZC5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMua2V5cyh7XG4gICAgYXV0b0NvbXBsZXRlOiBqb2kuc3RyaW5nKCksXG4gICAgY29tcG9uZW50czogYmFzZUFkbWluQ29tcG9uZW50RmllbGRzLmtleXMoe1xuICAgICAgRXJyb3I6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgIExhYmVsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBhZnRlcklucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgICAgYmVmb3JlSW5wdXQ6IGpvaS5hcnJheSgpLml0ZW1zKGNvbXBvbmVudFNjaGVtYSksXG4gICAgfSksXG4gICAgcGxhY2Vob2xkZXI6IGpvaS5zdHJpbmcoKSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuc3RyaW5nKCksIGpvaS5mdW5jKCkpLFxuICBtYXhMZW5ndGg6IGpvaS5udW1iZXIoKSxcbiAgbWluTGVuZ3RoOiBqb2kubnVtYmVyKCksXG4gIHR5cGU6IGpvaS5zdHJpbmcoKS52YWxpZCgnZW1haWwnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGNvZGUgPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgIH0pLFxuICAgIGVkaXRvck9wdGlvbnM6IGpvaS5vYmplY3QoKS51bmtub3duKCksIC8vIEVkaXRvclsnb3B0aW9ucyddIEBtb25hY28tZWRpdG9yL3JlYWN0XG4gICAgbGFuZ3VhZ2U6IGpvaS5zdHJpbmcoKSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuc3RyaW5nKCksIGpvaS5mdW5jKCkpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ2NvZGUnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGpzb24gPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgIH0pLFxuICAgIGVkaXRvck9wdGlvbnM6IGpvaS5vYmplY3QoKS51bmtub3duKCksIC8vIEVkaXRvclsnb3B0aW9ucyddIEBtb25hY28tZWRpdG9yL3JlYWN0XG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLmFycmF5KCksIGpvaS5vYmplY3QoKSksXG4gIHR5cGU6IGpvaS5zdHJpbmcoKS52YWxpZCgnanNvbicpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3Qgc2VsZWN0ID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMua2V5cyh7XG4gICAgICBFcnJvcjogY29tcG9uZW50U2NoZW1hLFxuICAgICAgTGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICB9KSxcbiAgICBpc0NsZWFyYWJsZTogam9pLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBpc1NvcnRhYmxlOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICB9KSxcbiAgZGVmYXVsdFZhbHVlOiBqb2lcbiAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAudHJ5KGpvaS5zdHJpbmcoKS5hbGxvdygnJyksIGpvaS5hcnJheSgpLml0ZW1zKGpvaS5zdHJpbmcoKS5hbGxvdygnJykpLCBqb2kuZnVuYygpKSxcbiAgaGFzTWFueTogam9pLmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgb3B0aW9uczogam9pXG4gICAgLmFycmF5KClcbiAgICAubWluKDEpXG4gICAgLml0ZW1zKFxuICAgICAgam9pLmFsdGVybmF0aXZlcygpLnRyeShcbiAgICAgICAgam9pLnN0cmluZygpLFxuICAgICAgICBqb2kub2JqZWN0KHtcbiAgICAgICAgICBsYWJlbDogam9pXG4gICAgICAgICAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAgICAgICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSksXG4gICAgICAgICAgdmFsdWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLmFsbG93KCcnKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIClcbiAgICAucmVxdWlyZWQoKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdzZWxlY3QnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IHJhZGlvID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMua2V5cyh7XG4gICAgICBFcnJvcjogY29tcG9uZW50U2NoZW1hLFxuICAgICAgTGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICB9KSxcbiAgICBsYXlvdXQ6IGpvaS5zdHJpbmcoKS52YWxpZCgndmVydGljYWwnLCAnaG9yaXpvbnRhbCcpLFxuICB9KSxcbiAgZGVmYXVsdFZhbHVlOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5zdHJpbmcoKS5hbGxvdygnJyksIGpvaS5mdW5jKCkpLFxuICBvcHRpb25zOiBqb2lcbiAgICAuYXJyYXkoKVxuICAgIC5taW4oMSlcbiAgICAuaXRlbXMoXG4gICAgICBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KFxuICAgICAgICBqb2kuc3RyaW5nKCksXG4gICAgICAgIGpvaS5vYmplY3Qoe1xuICAgICAgICAgIGxhYmVsOiBqb2lcbiAgICAgICAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgICAgICAgLnRyeShqb2kuc3RyaW5nKCksIGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pKVxuICAgICAgICAgICAgLnJlcXVpcmVkKCksXG4gICAgICAgICAgdmFsdWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLmFsbG93KCcnKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIClcbiAgICAucmVxdWlyZWQoKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdyYWRpbycpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3Qgcm93ID0gYmFzZUZpZWxkLmtleXMoe1xuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmRlZmF1bHQoKSxcbiAgZmllbGRzOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kubGluaygnI2ZpZWxkJykpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3JvdycpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3QgY29sbGFwc2libGUgPSBiYXNlRmllbGQua2V5cyh7XG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMuZGVmYXVsdCgpLFxuICBmaWVsZHM6IGpvaS5hcnJheSgpLml0ZW1zKGpvaS5saW5rKCcjZmllbGQnKSksXG4gIGxhYmVsOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5zdHJpbmcoKSwgY29tcG9uZW50U2NoZW1hKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdjb2xsYXBzaWJsZScpLnJlcXVpcmVkKCksXG59KVxuXG5jb25zdCB0YWIgPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS53aGVuKCdsb2NhbGl6ZWQnLCB7IGlzOiBqb2kuZXhpc3QoKSwgdGhlbjogam9pLnJlcXVpcmVkKCkgfSksXG4gIGRlc2NyaXB0aW9uOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5zdHJpbmcoKSwgY29tcG9uZW50U2NoZW1hKSxcbiAgZmllbGRzOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kubGluaygnI2ZpZWxkJykpLnJlcXVpcmVkKCksXG4gIGludGVyZmFjZU5hbWU6IGpvaS5zdHJpbmcoKS53aGVuKCduYW1lJywgeyBub3Q6IGpvaS5leGlzdCgpLCB0aGVuOiBqb2kuZm9yYmlkZGVuKCkgfSksXG4gIGxhYmVsOiBqb2lcbiAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAudHJ5KGpvaS5zdHJpbmcoKSwgam9pLm9iamVjdCgpLnBhdHRlcm4oam9pLnN0cmluZygpLCBbam9pLnN0cmluZygpXSkpXG4gICAgLndoZW4oJ25hbWUnLCB7IGlzOiBqb2kubm90KCksIHRoZW46IGpvaS5yZXF1aXJlZCgpIH0pLFxuICBsb2NhbGl6ZWQ6IGpvaS5ib29sZWFuKCksXG4gIHNhdmVUb0pXVDogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuYm9vbGVhbigpLCBqb2kuc3RyaW5nKCkpLFxufSlcblxuZXhwb3J0IGNvbnN0IHRhYnMgPSBiYXNlRmllbGQua2V5cyh7XG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMua2V5cyh7XG4gICAgZGVzY3JpcHRpb246IGpvaS5mb3JiaWRkZW4oKSxcbiAgfSksXG4gIGZpZWxkczogam9pLmZvcmJpZGRlbigpLFxuICBsb2NhbGl6ZWQ6IGpvaS5mb3JiaWRkZW4oKSxcbiAgdGFiczogam9pLmFycmF5KCkuaXRlbXModGFiKS5yZXF1aXJlZCgpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3RhYnMnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGdyb3VwID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBoaWRlR3V0dGVyOiBqb2kuYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLm9iamVjdCgpLCBqb2kuZnVuYygpKSxcbiAgZmllbGRzOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kubGluaygnI2ZpZWxkJykpLFxuICBpbnRlcmZhY2VOYW1lOiBqb2kuc3RyaW5nKCksXG4gIHR5cGU6IGpvaS5zdHJpbmcoKS52YWxpZCgnZ3JvdXAnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGFycmF5ID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkc1xuICAgIC5rZXlzKHtcbiAgICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkc1xuICAgICAgICAua2V5cyh7XG4gICAgICAgICAgUm93TGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgfSlcbiAgICAgICAgLmRlZmF1bHQoe30pLFxuICAgIH0pXG4gICAgLmRlZmF1bHQoe30pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLmFycmF5KCkuaXRlbXMoam9pLm9iamVjdCgpKSwgam9pLmZ1bmMoKSksXG4gIGZpZWxkczogam9pLmFycmF5KCkuaXRlbXMoam9pLmxpbmsoJyNmaWVsZCcpKS5yZXF1aXJlZCgpLFxuICBpbnRlcmZhY2VOYW1lOiBqb2kuc3RyaW5nKCksXG4gIGxhYmVsczogam9pLm9iamVjdCh7XG4gICAgcGx1cmFsOiBqb2lcbiAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgLnRyeShqb2kuc3RyaW5nKCksIGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pKSxcbiAgICBzaW5ndWxhcjogam9pXG4gICAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSksXG4gIH0pLFxuICBtYXhSb3dzOiBqb2kubnVtYmVyKCksXG4gIG1pblJvd3M6IGpvaS5udW1iZXIoKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdhcnJheScpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3QgdXBsb2FkID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBjb21wb25lbnRzOiBiYXNlQWRtaW5Db21wb25lbnRGaWVsZHMua2V5cyh7XG4gICAgICBFcnJvcjogY29tcG9uZW50U2NoZW1hLFxuICAgICAgTGFiZWw6IGNvbXBvbmVudFNjaGVtYSxcbiAgICB9KSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kub2JqZWN0KCksIGpvaS5mdW5jKCkpLFxuICBmaWx0ZXJPcHRpb25zOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5vYmplY3QoKSwgam9pLmZ1bmMoKSksXG4gIG1heERlcHRoOiBqb2kubnVtYmVyKCksXG4gIHJlbGF0aW9uVG86IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ3VwbG9hZCcpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3QgY2hlY2tib3ggPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgICAgYWZ0ZXJJbnB1dDogam9pLmFycmF5KCkuaXRlbXMoY29tcG9uZW50U2NoZW1hKSxcbiAgICAgIGJlZm9yZUlucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgIH0pLFxuICB9KSxcbiAgZGVmYXVsdFZhbHVlOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5ib29sZWFuKCksIGpvaS5mdW5jKCkpLFxuICB0eXBlOiBqb2kuc3RyaW5nKCkudmFsaWQoJ2NoZWNrYm94JykucmVxdWlyZWQoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBwb2ludCA9IGJhc2VGaWVsZC5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGFkbWluOiBiYXNlQWRtaW5GaWVsZHMua2V5cyh7XG4gICAgY29tcG9uZW50czogYmFzZUFkbWluQ29tcG9uZW50RmllbGRzLmtleXMoe1xuICAgICAgRXJyb3I6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgIExhYmVsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBhZnRlcklucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgICAgYmVmb3JlSW5wdXQ6IGpvaS5hcnJheSgpLml0ZW1zKGNvbXBvbmVudFNjaGVtYSksXG4gICAgfSksXG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLmFycmF5KCkuaXRlbXMoam9pLm51bWJlcigpKS5tYXgoMikubWluKDIpLCBqb2kuZnVuYygpKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdwb2ludCcpLnJlcXVpcmVkKCksXG59KVxuXG5leHBvcnQgY29uc3QgcmVsYXRpb25zaGlwID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5rZXlzKHtcbiAgICBhbGxvd0NyZWF0ZTogam9pLmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgIH0pLFxuICAgIGlzU29ydGFibGU6IGpvaS5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgc29ydE9wdGlvbnM6IGpvaS5hbHRlcm5hdGl2ZXMoKS5jb25kaXRpb25hbChqb2kucmVmKCcuLi5yZWxhdGlvblRvJyksIHtcbiAgICAgIGlzOiBqb2kuc3RyaW5nKCksXG4gICAgICBvdGhlcndpc2U6IGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgam9pLnN0cmluZygpKSxcbiAgICAgIHRoZW46IGpvaS5zdHJpbmcoKSxcbiAgICB9KSxcbiAgfSksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuZnVuYygpKSxcbiAgZmlsdGVyT3B0aW9uczogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kub2JqZWN0KCksIGpvaS5mdW5jKCkpLFxuICBoYXNNYW55OiBqb2kuYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICBtYXg6IGpvaVxuICAgIC5udW1iZXIoKVxuICAgIC53aGVuKCdoYXNNYW55JywgeyBpczogam9pLm5vdCh0cnVlKSwgdGhlbjogam9pLmZvcmJpZGRlbigpIH0pXG4gICAgLndhcm5pbmcoJ2RlcHJlY2F0ZWQnLCB7IG1lc3NhZ2U6ICdVc2UgbWF4Um93cyBpbnN0ZWFkLicgfSksXG4gIG1heERlcHRoOiBqb2kubnVtYmVyKCksXG4gIG1heFJvd3M6IGpvaS5udW1iZXIoKS53aGVuKCdoYXNNYW55JywgeyBpczogam9pLm5vdCh0cnVlKSwgdGhlbjogam9pLmZvcmJpZGRlbigpIH0pLFxuICBtaW46IGpvaVxuICAgIC5udW1iZXIoKVxuICAgIC53aGVuKCdoYXNNYW55JywgeyBpczogam9pLm5vdCh0cnVlKSwgdGhlbjogam9pLmZvcmJpZGRlbigpIH0pXG4gICAgLndhcm5pbmcoJ2RlcHJlY2F0ZWQnLCB7IG1lc3NhZ2U6ICdVc2UgbWluUm93cyBpbnN0ZWFkLicgfSksXG4gIG1pblJvd3M6IGpvaS5udW1iZXIoKS53aGVuKCdoYXNNYW55JywgeyBpczogam9pLm5vdCh0cnVlKSwgdGhlbjogam9pLmZvcmJpZGRlbigpIH0pLFxuICByZWxhdGlvblRvOiBqb2kuYWx0ZXJuYXRpdmVzKCkudHJ5KGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLCBqb2kuYXJyYXkoKS5pdGVtcyhqb2kuc3RyaW5nKCkpKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdyZWxhdGlvbnNoaXAnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGJsb2NrcyA9IGJhc2VGaWVsZC5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGJsb2Nrczogam9pXG4gICAgLmFycmF5KClcbiAgICAuaXRlbXMoXG4gICAgICBqb2kub2JqZWN0KHtcbiAgICAgICAgZmllbGRzOiBqb2kuYXJyYXkoKS5pdGVtcyhqb2kubGluaygnI2ZpZWxkJykpLFxuICAgICAgICBncmFwaFFMOiBqb2kub2JqZWN0KCkua2V5cyh7XG4gICAgICAgICAgc2luZ3VsYXJOYW1lOiBqb2kuc3RyaW5nKCksXG4gICAgICAgIH0pLFxuICAgICAgICBpbWFnZUFsdFRleHQ6IGpvaS5zdHJpbmcoKSxcbiAgICAgICAgaW1hZ2VVUkw6IGpvaS5zdHJpbmcoKSxcbiAgICAgICAgaW50ZXJmYWNlTmFtZTogam9pLnN0cmluZygpLFxuICAgICAgICBsYWJlbHM6IGpvaS5vYmplY3Qoe1xuICAgICAgICAgIHBsdXJhbDogam9pXG4gICAgICAgICAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAgICAgICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSksXG4gICAgICAgICAgc2luZ3VsYXI6IGpvaVxuICAgICAgICAgICAgLmFsdGVybmF0aXZlcygpXG4gICAgICAgICAgICAudHJ5KGpvaS5zdHJpbmcoKSwgam9pLm9iamVjdCgpLnBhdHRlcm4oam9pLnN0cmluZygpLCBbam9pLnN0cmluZygpXSkpLFxuICAgICAgICB9KSxcbiAgICAgICAgc2x1Zzogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gICAgICAgIGN1c3RvbTogam9pLm9iamVjdCgpLnBhdHRlcm4oam9pLnN0cmluZygpLCBqb2kuYW55KCkpLFxuICAgICAgfSksXG4gICAgKVxuICAgIC5yZXF1aXJlZCgpLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLmFycmF5KCkuaXRlbXMoam9pLm9iamVjdCgpKSwgam9pLmZ1bmMoKSksXG4gIGxhYmVsczogam9pLm9iamVjdCh7XG4gICAgcGx1cmFsOiBqb2lcbiAgICAgIC5hbHRlcm5hdGl2ZXMoKVxuICAgICAgLnRyeShqb2kuc3RyaW5nKCksIGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pKSxcbiAgICBzaW5ndWxhcjogam9pXG4gICAgICAuYWx0ZXJuYXRpdmVzKClcbiAgICAgIC50cnkoam9pLnN0cmluZygpLCBqb2kub2JqZWN0KCkucGF0dGVybihqb2kuc3RyaW5nKCksIFtqb2kuc3RyaW5nKCldKSksXG4gIH0pLFxuICBtYXhSb3dzOiBqb2kubnVtYmVyKCksXG4gIG1pblJvd3M6IGpvaS5udW1iZXIoKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdibG9ja3MnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IHJpY2hUZXh0ID0gYmFzZUZpZWxkLmtleXMoe1xuICBuYW1lOiBqb2kuc3RyaW5nKCkucmVxdWlyZWQoKSxcbiAgYWRtaW46IGJhc2VBZG1pbkZpZWxkcy5kZWZhdWx0KCksXG4gIGRlZmF1bHRWYWx1ZTogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuYXJyYXkoKS5pdGVtcyhqb2kub2JqZWN0KCkpLCBqb2kuZnVuYygpLCBqb2kub2JqZWN0KCkpLFxuICBlZGl0b3I6IGpvaVxuICAgIC5vYmplY3QoKVxuICAgIC5rZXlzKHtcbiAgICAgIENlbGxDb21wb25lbnQ6IGNvbXBvbmVudFNjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgRmllbGRDb21wb25lbnQ6IGNvbXBvbmVudFNjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgTGF6eUNlbGxDb21wb25lbnQ6IGpvaS5mdW5jKCkub3B0aW9uYWwoKSxcbiAgICAgIExhenlGaWVsZENvbXBvbmVudDogam9pLmZ1bmMoKS5vcHRpb25hbCgpLFxuICAgICAgYWZ0ZXJSZWFkUHJvbWlzZTogam9pLmZ1bmMoKS5vcHRpb25hbCgpLFxuICAgICAgb3V0cHV0U2NoZW1hOiBqb2kuZnVuYygpLm9wdGlvbmFsKCksXG4gICAgICBwb3B1bGF0aW9uUHJvbWlzZTogam9pLmZ1bmMoKS5vcHRpb25hbCgpLFxuICAgICAgdmFsaWRhdGU6IGpvaS5mdW5jKCkucmVxdWlyZWQoKSxcbiAgICB9KVxuICAgIC51bmtub3duKCksXG4gIHR5cGU6IGpvaS5zdHJpbmcoKS52YWxpZCgncmljaFRleHQnKS5yZXF1aXJlZCgpLFxufSlcblxuZXhwb3J0IGNvbnN0IGRhdGUgPSBiYXNlRmllbGQua2V5cyh7XG4gIG5hbWU6IGpvaS5zdHJpbmcoKS5yZXF1aXJlZCgpLFxuICBhZG1pbjogYmFzZUFkbWluRmllbGRzLmtleXMoe1xuICAgIGNvbXBvbmVudHM6IGJhc2VBZG1pbkNvbXBvbmVudEZpZWxkcy5rZXlzKHtcbiAgICAgIEVycm9yOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICBMYWJlbDogY29tcG9uZW50U2NoZW1hLFxuICAgICAgYWZ0ZXJJbnB1dDogam9pLmFycmF5KCkuaXRlbXMoY29tcG9uZW50U2NoZW1hKSxcbiAgICAgIGJlZm9yZUlucHV0OiBqb2kuYXJyYXkoKS5pdGVtcyhjb21wb25lbnRTY2hlbWEpLFxuICAgIH0pLFxuICAgIGRhdGU6IGpvaS5vYmplY3Qoe1xuICAgICAgZGlzcGxheUZvcm1hdDogam9pLnN0cmluZygpLFxuICAgICAgbWF4RGF0ZTogam9pLmRhdGUoKSxcbiAgICAgIG1heFRpbWU6IGpvaS5kYXRlKCksXG4gICAgICBtaW5EYXRlOiBqb2kuZGF0ZSgpLFxuICAgICAgbWluVGltZTogam9pLmRhdGUoKSxcbiAgICAgIG1vbnRoc1RvU2hvdzogam9pLm51bWJlcigpLFxuICAgICAgb3ZlcnJpZGVzOiBqb2kub2JqZWN0KCkudW5rbm93bigpLFxuICAgICAgcGlja2VyQXBwZWFyYW5jZTogam9pLnN0cmluZygpLFxuICAgICAgdGltZUZvcm1hdDogam9pLnN0cmluZygpLFxuICAgICAgdGltZUludGVydmFsczogam9pLm51bWJlcigpLFxuICAgIH0pLFxuICAgIHBsYWNlaG9sZGVyOiBqb2kuc3RyaW5nKCksXG4gIH0pLFxuICBkZWZhdWx0VmFsdWU6IGpvaS5hbHRlcm5hdGl2ZXMoKS50cnkoam9pLnN0cmluZygpLCBqb2kuZnVuYygpKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCdkYXRlJykucmVxdWlyZWQoKSxcbn0pXG5cbmV4cG9ydCBjb25zdCB1aSA9IGpvaS5vYmplY3QoKS5rZXlzKHtcbiAgbmFtZTogam9pLnN0cmluZygpLnJlcXVpcmVkKCksXG4gIGFkbWluOiBqb2lcbiAgICAub2JqZWN0KClcbiAgICAua2V5cyh7XG4gICAgICBjb21wb25lbnRzOiBqb2lcbiAgICAgICAgLm9iamVjdCgpXG4gICAgICAgIC5rZXlzKHtcbiAgICAgICAgICBDZWxsOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgRmllbGQ6IGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgfSlcbiAgICAgICAgLmRlZmF1bHQoe30pLFxuICAgICAgY29uZGl0aW9uOiBqb2kuZnVuYygpLFxuICAgICAgcG9zaXRpb246IGpvaS5zdHJpbmcoKS52YWxpZCgnc2lkZWJhcicpLFxuICAgICAgd2lkdGg6IGpvaS5zdHJpbmcoKSxcbiAgICB9KVxuICAgIC5kZWZhdWx0KCksXG4gIGN1c3RvbTogam9pLm9iamVjdCgpLnBhdHRlcm4oam9pLnN0cmluZygpLCBqb2kuYW55KCkpLFxuICBsYWJlbDogam9pLmFsdGVybmF0aXZlcygpLnRyeShqb2kuc3RyaW5nKCksIGpvaS5vYmplY3QoKS5wYXR0ZXJuKGpvaS5zdHJpbmcoKSwgW2pvaS5zdHJpbmcoKV0pKSxcbiAgdHlwZTogam9pLnN0cmluZygpLnZhbGlkKCd1aScpLnJlcXVpcmVkKCksXG59KVxuXG5jb25zdCBmaWVsZFNjaGVtYSA9IGpvaVxuICAuYWx0ZXJuYXRpdmVzKClcbiAgLnRyeShcbiAgICB0ZXh0LFxuICAgIG51bWJlcixcbiAgICB0ZXh0YXJlYSxcbiAgICBlbWFpbCxcbiAgICBjb2RlLFxuICAgIGpzb24sXG4gICAgc2VsZWN0LFxuICAgIGdyb3VwLFxuICAgIGFycmF5LFxuICAgIHJvdyxcbiAgICBjb2xsYXBzaWJsZSxcbiAgICB0YWJzLFxuICAgIHJhZGlvLFxuICAgIHJlbGF0aW9uc2hpcCxcbiAgICBjaGVja2JveCxcbiAgICB1cGxvYWQsXG4gICAgcmljaFRleHQsXG4gICAgYmxvY2tzLFxuICAgIGRhdGUsXG4gICAgcG9pbnQsXG4gICAgdWksXG4gIClcbiAgLmlkKCdmaWVsZCcpXG5cbmV4cG9ydCBkZWZhdWx0IGZpZWxkU2NoZW1hXG4iXSwibmFtZXMiOlsiam9pIiwiY29tcG9uZW50U2NoZW1hIiwiYmFzZUFkbWluQ29tcG9uZW50RmllbGRzIiwib2JqZWN0Iiwia2V5cyIsIkNlbGwiLCJGaWVsZCIsIkZpbHRlciIsImRlZmF1bHQiLCJiYXNlQWRtaW5GaWVsZHMiLCJjbGFzc05hbWUiLCJzdHJpbmciLCJjb21wb25lbnRzIiwiY29uZGl0aW9uIiwiZnVuYyIsImRlc2NyaXB0aW9uIiwiYWx0ZXJuYXRpdmVzIiwidHJ5IiwicGF0dGVybiIsImRpc2FibGVCdWxrRWRpdCIsImJvb2xlYW4iLCJkaXNhYmxlZCIsImhpZGRlbiIsImluaXRDb2xsYXBzZWQiLCJwb3NpdGlvbiIsInZhbGlkIiwicmVhZE9ubHkiLCJzdHlsZSIsInVua25vd24iLCJ3aWR0aCIsImJhc2VGaWVsZCIsImFjY2VzcyIsImNyZWF0ZSIsInJlYWQiLCJ1cGRhdGUiLCJhZG1pbiIsImN1c3RvbSIsImFueSIsImhvb2tzIiwiYWZ0ZXJDaGFuZ2UiLCJhcnJheSIsIml0ZW1zIiwiYWZ0ZXJSZWFkIiwiYmVmb3JlQ2hhbmdlIiwiYmVmb3JlVmFsaWRhdGUiLCJpbmRleCIsImxhYmVsIiwibG9jYWxpemVkIiwicmVxdWlyZWQiLCJzYXZlVG9KV1QiLCJ1bmlxdWUiLCJ2YWxpZGF0ZSIsImlkRmllbGQiLCJuYW1lIiwiaW52YWxpZCIsIm5vdCIsInR5cGUiLCJ0ZXh0IiwiYXV0b0NvbXBsZXRlIiwiRXJyb3IiLCJMYWJlbCIsImFmdGVySW5wdXQiLCJiZWZvcmVJbnB1dCIsInBsYWNlaG9sZGVyIiwicnRsIiwiZGVmYXVsdFZhbHVlIiwiaGFzTWFueSIsIm1heExlbmd0aCIsIm51bWJlciIsIm1heFJvd3MiLCJ3aGVuIiwiaXMiLCJ0aGVuIiwiZm9yYmlkZGVuIiwibWluTGVuZ3RoIiwibWluUm93cyIsIm90aGVyd2lzZSIsInN0ZXAiLCJtYXgiLCJtaW4iLCJ0ZXh0YXJlYSIsInJvd3MiLCJlbWFpbCIsImNvZGUiLCJlZGl0b3JPcHRpb25zIiwibGFuZ3VhZ2UiLCJqc29uIiwic2VsZWN0IiwiaXNDbGVhcmFibGUiLCJpc1NvcnRhYmxlIiwiYWxsb3ciLCJvcHRpb25zIiwidmFsdWUiLCJyYWRpbyIsImxheW91dCIsInJvdyIsImZpZWxkcyIsImxpbmsiLCJjb2xsYXBzaWJsZSIsInRhYiIsImV4aXN0IiwiaW50ZXJmYWNlTmFtZSIsInRhYnMiLCJncm91cCIsImhpZGVHdXR0ZXIiLCJSb3dMYWJlbCIsImxhYmVscyIsInBsdXJhbCIsInNpbmd1bGFyIiwidXBsb2FkIiwiZmlsdGVyT3B0aW9ucyIsIm1heERlcHRoIiwicmVsYXRpb25UbyIsImNoZWNrYm94IiwicG9pbnQiLCJyZWxhdGlvbnNoaXAiLCJhbGxvd0NyZWF0ZSIsInNvcnRPcHRpb25zIiwiY29uZGl0aW9uYWwiLCJyZWYiLCJ3YXJuaW5nIiwibWVzc2FnZSIsImJsb2NrcyIsImdyYXBoUUwiLCJzaW5ndWxhck5hbWUiLCJpbWFnZUFsdFRleHQiLCJpbWFnZVVSTCIsInNsdWciLCJyaWNoVGV4dCIsImVkaXRvciIsIkNlbGxDb21wb25lbnQiLCJvcHRpb25hbCIsIkZpZWxkQ29tcG9uZW50IiwiTGF6eUNlbGxDb21wb25lbnQiLCJMYXp5RmllbGRDb21wb25lbnQiLCJhZnRlclJlYWRQcm9taXNlIiwib3V0cHV0U2NoZW1hIiwicG9wdWxhdGlvblByb21pc2UiLCJkYXRlIiwiZGlzcGxheUZvcm1hdCIsIm1heERhdGUiLCJtYXhUaW1lIiwibWluRGF0ZSIsIm1pblRpbWUiLCJtb250aHNUb1Nob3ciLCJvdmVycmlkZXMiLCJwaWNrZXJBcHBlYXJhbmNl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
|