@nlabs/reaktor 1.6.2 → 1.7.0
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/LICENSE +74 -201
- package/README.md +62 -15
- package/lib/actions/analytics.d.ts +10 -0
- package/lib/actions/analytics.js +539 -0
- package/lib/actions/apps.js +2 -2
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +2 -2
- package/lib/actions/conversations.js +2 -2
- package/lib/actions/crm.d.ts +5 -1
- package/lib/actions/crm.js +226 -3
- package/lib/actions/crud.js +2 -2
- package/lib/actions/dynamodb.d.ts +1 -1
- package/lib/actions/dynamodb.js +2 -2
- package/lib/actions/email.d.ts +1 -1
- package/lib/actions/email.js +2 -2
- package/lib/actions/files.js +2 -2
- package/lib/actions/flags.d.ts +6 -0
- package/lib/actions/flags.js +147 -0
- package/lib/actions/groups.js +2 -2
- package/lib/actions/images.d.ts +1 -1
- package/lib/actions/images.js +2 -2
- package/lib/actions/index.d.ts +3 -2
- package/lib/actions/index.js +4 -3
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +2 -2
- package/lib/actions/messages.js +2 -2
- package/lib/actions/notifications.d.ts +1 -1
- package/lib/actions/notifications.js +2 -2
- package/lib/actions/payments.d.ts +3 -3
- package/lib/actions/payments.js +144 -189
- package/lib/actions/personas.js +1 -1
- package/lib/actions/posts.d.ts +0 -4
- package/lib/actions/posts.js +2 -4
- package/lib/actions/query.js +2 -2
- package/lib/actions/reactions.js +2 -2
- package/lib/actions/rum.js +303 -25
- package/lib/actions/s3.d.ts +1 -1
- package/lib/actions/s3.js +2 -2
- package/lib/actions/search.js +2 -2
- package/lib/actions/sms.js +2 -2
- package/lib/actions/statistics.js +2 -2
- package/lib/actions/subscriptions.js +2 -2
- package/lib/actions/tags.js +2 -2
- package/lib/actions/users.js +59 -6
- package/lib/actions/videos.js +2 -2
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +2 -2
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/index.js +1 -1
- package/lib/adapters/messageAdapter.js +1 -1
- package/lib/adapters/postAdapter.js +1 -1
- package/lib/adapters/reaktorAdapter.js +1 -1
- package/lib/adapters/tagAdapter.d.ts +0 -1
- package/lib/adapters/tagAdapter.js +1 -2
- package/lib/adapters/userAdapter.d.ts +0 -1
- package/lib/adapters/userAdapter.js +1 -2
- package/lib/config.d.ts +10 -0
- package/lib/config.js +8 -2
- package/lib/constants/collections.d.ts +6 -3
- package/lib/constants/collections.js +7 -4
- package/lib/handlers/graphqlHandler.d.ts +2 -2
- package/lib/handlers/graphqlHandler.js +2 -19
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/lambdas/actions/websockets.js +2 -2
- package/lib/lambdas/authorizer.js +2 -2
- package/lib/lambdas/connection.js +2 -2
- package/lib/lambdas/utils/message.js +2 -2
- package/lib/lambdas/utils/websocket.d.ts +1 -1
- package/lib/lambdas/utils/websocket.js +2 -2
- package/lib/mocks/conversation.js +1 -1
- package/lib/mocks/file.js +1 -1
- package/lib/mocks/group.js +1 -1
- package/lib/mocks/image.js +1 -1
- package/lib/mocks/post.js +1 -1
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.js +1 -1
- package/lib/mocks/video.js +1 -1
- package/lib/mutations/analytics/analytics.d.ts +1 -0
- package/lib/mutations/analytics/analytics.js +35 -0
- package/lib/mutations/content/content.js +2 -2
- package/lib/mutations/crm/crm.js +18 -4
- package/lib/mutations/events/events.js +2 -2
- package/lib/mutations/flags/flags.d.ts +1 -0
- package/lib/mutations/flags/flags.js +33 -0
- package/lib/mutations/groups/groups.js +2 -2
- package/lib/mutations/images/images.js +2 -2
- package/lib/mutations/index.d.ts +3 -1
- package/lib/mutations/index.js +13 -3
- package/lib/mutations/locations/locations.js +2 -2
- package/lib/mutations/messages/messages.js +2 -2
- package/lib/mutations/personas/personas.js +2 -2
- package/lib/mutations/posts/posts.js +2 -2
- package/lib/mutations/reactions/reactions.js +2 -2
- package/lib/mutations/rum/rum.js +2 -2
- package/lib/mutations/statistics/statistics.js +2 -2
- package/lib/mutations/subscriptions/subscriptions.js +2 -2
- package/lib/mutations/tags/tags.js +2 -2
- package/lib/mutations/users/users.js +30 -17
- package/lib/mutations/videos/videos.js +2 -2
- package/lib/objectTypes/analytics.d.ts +8 -0
- package/lib/objectTypes/analytics.js +147 -0
- package/lib/objectTypes/app.js +2 -2
- package/lib/objectTypes/bankAccount.js +2 -2
- package/lib/objectTypes/connection.js +2 -2
- package/lib/objectTypes/content.js +2 -2
- package/lib/objectTypes/conversation.js +2 -2
- package/lib/objectTypes/creditCard.js +2 -2
- package/lib/objectTypes/crm.d.ts +5 -0
- package/lib/objectTypes/crm.js +64 -2
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +2 -2
- package/lib/objectTypes/event.js +2 -2
- package/lib/objectTypes/external.js +2 -2
- package/lib/objectTypes/file.js +2 -2
- package/lib/objectTypes/filter.js +2 -2
- package/lib/objectTypes/flag.d.ts +1 -0
- package/lib/objectTypes/flag.js +32 -0
- package/lib/objectTypes/group.js +2 -2
- package/lib/objectTypes/iapSubscription.js +2 -2
- package/lib/objectTypes/image.d.ts +1 -1
- package/lib/objectTypes/image.js +2 -2
- package/lib/objectTypes/index.d.ts +2 -0
- package/lib/objectTypes/index.js +3 -1
- package/lib/objectTypes/location.js +2 -2
- package/lib/objectTypes/message.js +2 -2
- package/lib/objectTypes/passcode.js +2 -2
- package/lib/objectTypes/persona.js +2 -2
- package/lib/objectTypes/plan.js +2 -2
- package/lib/objectTypes/post.js +2 -2
- package/lib/objectTypes/query.js +2 -2
- package/lib/objectTypes/reaction.js +2 -2
- package/lib/objectTypes/relation.js +2 -2
- package/lib/objectTypes/rum.js +4 -4
- package/lib/objectTypes/search.js +2 -2
- package/lib/objectTypes/statistics.js +2 -2
- package/lib/objectTypes/subscription.js +2 -2
- package/lib/objectTypes/tag.js +2 -2
- package/lib/objectTypes/user.js +2 -2
- package/lib/objectTypes/video.d.ts +1 -1
- package/lib/objectTypes/video.js +2 -2
- package/lib/queries/analytics/analytics.d.ts +1 -0
- package/lib/queries/analytics/analytics.js +41 -0
- package/lib/queries/content/content.js +2 -2
- package/lib/queries/crm/crm.js +15 -4
- package/lib/queries/events/events.js +2 -2
- package/lib/queries/flags/flags.d.ts +1 -0
- package/lib/queries/flags/flags.js +16 -0
- package/lib/queries/groups/groups.js +2 -2
- package/lib/queries/images/images.js +2 -2
- package/lib/queries/index.d.ts +3 -1
- package/lib/queries/index.js +13 -3
- package/lib/queries/locations/locations.js +2 -2
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +2 -2
- package/lib/queries/posts/posts.js +2 -2
- package/lib/queries/query/query.js +2 -2
- package/lib/queries/reactions/reactions.js +2 -2
- package/lib/queries/statistics/statistics.js +2 -2
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +2 -2
- package/lib/queries/users/users.js +2 -2
- package/lib/queries/videos/videos.js +2 -2
- package/lib/templates/email/layout.js +1 -1
- package/lib/templates/email/passwordForgot.js +1 -1
- package/lib/templates/email/passwordRecovery.js +1 -1
- package/lib/templates/email/verifyEmail.js +1 -1
- package/lib/templates/email/welcome.js +1 -1
- package/lib/templates/sms/passwordForgot.js +1 -1
- package/lib/templates/sms/passwordRecovery.js +1 -1
- package/lib/templates/sms/verifyEmail.js +1 -1
- package/lib/templates/sms/verifyPhone.js +1 -1
- package/lib/templates/sms/welcome.js +1 -1
- package/lib/types/analytics.types.d.ts +92 -0
- package/lib/types/analytics.types.js +6 -0
- package/lib/types/apps.types.d.ts +1 -1
- package/lib/types/apps.types.js +2 -2
- package/lib/types/arangodb.types.d.ts +2 -2
- package/lib/types/arangodb.types.js +2 -2
- package/lib/types/auth.types.d.ts +3 -1
- package/lib/types/auth.types.js +2 -2
- package/lib/types/connections.types.d.ts +1 -1
- package/lib/types/connections.types.js +2 -2
- package/lib/types/content.types.d.ts +1 -1
- package/lib/types/content.types.js +2 -2
- package/lib/types/conversations.types.d.ts +1 -1
- package/lib/types/conversations.types.js +2 -2
- package/lib/types/crm.types.d.ts +38 -1
- package/lib/types/crm.types.js +2 -2
- package/lib/types/email.types.d.ts +1 -1
- package/lib/types/email.types.js +2 -2
- package/lib/types/error.types.js +1 -1
- package/lib/types/files.types.d.ts +1 -1
- package/lib/types/files.types.js +2 -2
- package/lib/types/flags.types.d.ts +28 -0
- package/lib/types/flags.types.js +3 -0
- package/lib/types/google.types.d.ts +1 -1
- package/lib/types/google.types.js +2 -2
- package/lib/types/groups.types.d.ts +1 -1
- package/lib/types/groups.types.js +2 -2
- package/lib/types/images.types.d.ts +1 -1
- package/lib/types/images.types.js +2 -2
- package/lib/types/index.d.ts +3 -1
- package/lib/types/index.js +4 -2
- package/lib/types/locations.types.d.ts +1 -1
- package/lib/types/locations.types.js +2 -2
- package/lib/types/messages.types.d.ts +1 -1
- package/lib/types/messages.types.js +2 -2
- package/lib/types/notifications.types.d.ts +1 -1
- package/lib/types/notifications.types.js +2 -2
- package/lib/types/payments.types.d.ts +4 -1
- package/lib/types/payments.types.js +2 -2
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.d.ts +1 -1
- package/lib/types/posts.types.js +2 -2
- package/lib/types/rum.types.d.ts +3 -3
- package/lib/types/rum.types.js +2 -2
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.d.ts +1 -1
- package/lib/types/tags.types.js +2 -2
- package/lib/types/users.types.d.ts +1 -1
- package/lib/types/users.types.js +2 -2
- package/lib/types/videos.types.d.ts +1 -1
- package/lib/types/videos.types.js +2 -2
- package/lib/types/websockets.types.d.ts +1 -1
- package/lib/types/websockets.types.js +2 -2
- package/lib/upload.js +4 -9
- package/lib/utils/adapterUtils.d.ts +1 -1
- package/lib/utils/adapterUtils.js +2 -2
- package/lib/utils/analyticsUtils.d.ts +1 -1
- package/lib/utils/analyticsUtils.js +2 -2
- package/lib/utils/aqlHelpers.d.ts +1 -1
- package/lib/utils/aqlHelpers.js +2 -2
- package/lib/utils/arangodbUtils.d.ts +9 -1
- package/lib/utils/arangodbUtils.js +10 -2
- package/lib/utils/authUtils.js +2 -2
- package/lib/utils/awsUtils.js +2 -2
- package/lib/utils/collectionRegistry.d.ts +1 -1
- package/lib/utils/collectionRegistry.js +17 -2
- package/lib/utils/contextUtils.d.ts +2 -2
- package/lib/utils/contextUtils.js +2 -2
- package/lib/utils/dbI18n.example.d.ts +1 -1
- package/lib/utils/dbI18n.example.js +2 -2
- package/lib/utils/dbI18n.js +2 -2
- package/lib/utils/googleTranslate.d.ts +1 -1
- package/lib/utils/googleTranslate.js +2 -2
- package/lib/utils/graphqlUtils.d.ts +1 -0
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.d.ts +1 -1
- package/lib/utils/localeUtils.example.d.ts +1 -1
- package/lib/utils/localeUtils.example.js +2 -2
- package/lib/utils/localeUtils.js +2 -2
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/queryBuilder.d.ts +1 -1
- package/lib/utils/queryBuilder.js +2 -2
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.js +2 -2
- package/lib/utils/stripeUtils.d.ts +1 -1
- package/lib/utils/stripeUtils.js +2 -2
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +2 -2
- package/lib/utils/translationQueue.d.ts +1 -1
- package/lib/utils/translationQueue.example.d.ts +1 -1
- package/lib/utils/translationQueue.example.js +2 -2
- package/lib/utils/translationQueue.js +2 -2
- package/lib/videoProcessing.js +1 -1
- package/package.json +43 -79
- package/lib/actions/websockets.d.ts +0 -20
- package/lib/actions/websockets.js +0 -164
- package/lib/mocks/nlabs.png +0 -0
package/lib/actions/groups.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/ import { flatten } from '@nlabs/utils/arrays/flatten';
|
|
5
5
|
import { uniqBy } from '@nlabs/utils/arrays/uniq';
|
|
6
6
|
import { createHash, parseArangoId, parseChar, parseId } from '@nlabs/utils/parsers/strings';
|
|
@@ -277,4 +277,4 @@ export const isGrouped = (context, userId, groupId)=>{
|
|
|
277
277
|
}).then(()=>null));
|
|
278
278
|
};
|
|
279
279
|
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvZ3JvdXBzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2ZsYXR0ZW59IGZyb20gJ0BubGFicy91dGlscy9hcnJheXMvZmxhdHRlbic7XG5pbXBvcnQge3VuaXFCeX0gZnJvbSAnQG5sYWJzL3V0aWxzL2FycmF5cy91bmlxJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7ZXh0cmFjdFRhZ3MsIGdldFRhZ0xpc3RCeU5hbWUsIHVwZGF0ZVRhZ3NJbkl0ZW19IGZyb20gJy4vdGFncy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0dyb3VwRWRnZVR5cGUsIEdyb3VwVHlwZSwgR3JvdXBVc2VyfSBmcm9tICcuLi90eXBlcy9ncm91cHMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2dyb3Vwcyc7XG5jb25zdCBncm91cHNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5HUk9VUFMpO1xuY29uc3QgdXNlcnNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5VU0VSUyk7XG5jb25zdCBoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX0NPTk5FQ1RJT04pO1xuY29uc3QgaXNUYWdnZWRDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5JU19UQUdHRUQpO1xuXG4vKipcbiAqIEdldCBhbGwgZ3JvdXBzIGZvciB0aGUgYXBwIHdpdGggdGhlaXIgdXNlcnNcbiAqIE5vdGU6IFVzZXMgY3VzdG9tIHF1ZXJ5IGZvciBlZGdlIHRyYXZlcnNhbCB0byBpbmNsdWRlIHVzZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeUFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmcm9tPzogbnVtYmVyLCB0bz86IG51bWJlcik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEdyb3VwTGlzdEJ5QXBwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIC8vIENvbXBsZXggZWRnZSB0cmF2ZXJzYWwgcXVlcnkgLSBrZWVwIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBnIElOICR7Z3JvdXBzQ29sbGVjdGlvbn1cbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIGwgSU4gT1VUQk9VTkQgZy5faWQgJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgUkVUVVJOIE1FUkdFKHUsIHt0eXBlOiBsLnR5cGV9KVxuICAgICAgKVxuICAgICAgJHtmcm9tICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHVuZGVmaW5lZCA/IGxpdGVyYWwoYExJTUlUICR7ZnJvbX0sICR7dG8gLSBmcm9tfWApIDogbGl0ZXJhbCgnJyl9XG4gICAgICBTT1JUIGcuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnN9KVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBMaXN0QnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZnJvbTogbnVtYmVyLFxuICB0bzogbnVtYmVyXG4pOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRHcm91cExpc3RCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgLy8gQ29tcGxleCBlZGdlIHRyYXZlcnNhbCBxdWVyeSB3aXRoIHVzZXIgZmlsdGVyaW5nIC0ga2VlcCBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgZywgZSBJTiBJTkJPVU5EICR7YHVzZXJzLyR7dXNlcklkfWB9ICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgIFJFVFVSTiBNRVJHRSh1LCB7dHlwZTogbC50eXBlfSlcbiAgICAgIClcbiAgICAgICR7ZnJvbSAhPT0gdW5kZWZpbmVkICYmIHRvICE9PSB1bmRlZmluZWQgPyBsaXRlcmFsKGBMSU1JVCAke2Zyb219LCAke3RvIC0gZnJvbX1gKSA6IGxpdGVyYWwoJycpfVxuICAgICAgU09SVCBnLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UoZywge3VzZXJzfSlcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwTGlzdEJ5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnTmFtZXM6IHN0cmluZ1tdLFxuICBmcm9tOiBudW1iZXIsXG4gIHRvOiBudW1iZXJcbik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgLy8gQ29tcGxleCBtdWx0aS10YWcgcXVlcnkgd2l0aCBlZGdlIHRyYXZlcnNhbCAtIGtlZXAgY3VzdG9tIGltcGxlbWVudGF0aW9uXG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICB0YWdOYW1lcy5tYXAoKHRhZ05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0VGFnTmFtZSA9IHBhcnNlSWQodGFnTmFtZSk7XG4gICAgICBjb25zdCBsaW1pdENsYXVzZSA9IGZyb20gIT09IHVuZGVmaW5lZCAmJiB0byAhPT0gdW5kZWZpbmVkID8gYExJTUlUICR7ZnJvbX0sICR7dG8gLSBmcm9tfWAgOiAnJztcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAsIGUgSU4gT1VUQk9VTkQgJHtgdGFncy8ke2Zvcm1hdFRhZ05hbWV9YH0gJHtpc1RhZ2dlZENvbGxlY3Rpb259XG4gICAgICAgICAgRk9SIHUgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICAgICAgTEVUIGxpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBMRVQgZGlzbGlrZXMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgbGlrZSBJTiBJTkJPVU5EIHAuX2lkIGxpa2VzXG4gICAgICAgICAgICBGSUxURVIgbGlrZS52YWx1ZSA9PSAnZGlzbGlrZSdcbiAgICAgICAgICAgIFJFVFVSTiBsaWtlXG4gICAgICAgICAgKVxuICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gJ3Bvc3QnICYmIHAudXNlcklkID09IHUuX2tleVxuICAgICAgICAgICR7bGl0ZXJhbChsaW1pdENsYXVzZSl9XG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHt1c2VyOnUsIGxpa2VzOkxFTkdUSChsaWtlcyksIGRpc2xpa2VzOkxFTkdUSChkaXNsaWtlcyl9KWA7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuXG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KTtcbiAgICB9KVxuICApXG4gICAgLnRoZW4oKHJlc3VsdHMpID0+IHVuaXFCeShmbGF0dGVuKHJlc3VsdHMpLCAoaXRlbTogYW55KSA9PiBpdGVtLl9rZXkpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbn0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uSWQgPSBzZXNzaW9uPy51c2VySWQgfHwgJyc7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcblxuICAvLyBDb21wbGV4IGVkZ2UgdHJhdmVyc2FsIHdpdGggdXNlciBvd25lcnNoaXAgY2hlY2sgLSBrZWVwIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnLCBlIElOIE9VVEJPVU5EICR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9IGhhc0Nvbm5lY3Rpb25cbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgUkVUVVJOIE1FUkdFICh1LCB7dHlwZTpsLnR5cGV9KVxuICAgICAgKVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKGcsIHt1c2Vyczp1c2Vyc30pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4gZ3JvdXApXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBEZXRhaWxzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICByZXR1cm4gZ2V0SXRlbUJ5PEdyb3VwVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuR1JPVVBTLCB7X2tleTogZm9ybWF0R3JvdXBJZH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwRWRnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlckRvY0lkOiBzdHJpbmcsXG4gIGdyb3VwRG9jSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxHcm91cEVkZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVHcm91cEVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZURvY0lkID0gcGFyc2VBcmFuZ29JZCh1c2VyRG9jSWQpO1xuICBjb25zdCBmb3JtYXRHcm91cERvY0lkID0gcGFyc2VBcmFuZ29JZChncm91cERvY0lkKTtcblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0Nvbm5lY3Rpb24nKTtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtmb3JtYXRVc2VEb2NJZH0tJHtmb3JtYXRHcm91cERvY0lkfWApO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2Zyb206IGZvcm1hdFVzZURvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdEdyb3VwRG9jSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB0eXBlOiAnZ3JvdXBzJ1xuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHtzZXNzaW9uOiB7dXNlcklkOiBmb3JtYXRVc2VEb2NJZH19KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmNvbnN0IGJ1aWxkR3JvdXBNdXRhdGlvbiA9ICh7ZGVzY3JpcHRpb24gPSAnJywgbmFtZSA9ICdVbnRpdGxlZCcsIHR5cGV9OiBHcm91cFR5cGUpOiBQYXJ0aWFsPEdyb3VwVHlwZT4gPT4gKHtcbiAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCA2NDApLFxuICBuYW1lLFxuICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMTYpIHx8ICdwcml2YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCBhZGRHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkID0gYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiA9ICcnfTogR3JvdXBUeXBlID0gaXRlbTtcbiAgY29uc3QgaWQgPSBjcmVhdGVIYXNoKGBncm91cC0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgaW5zZXJ0OiBHcm91cFR5cGUgPSB7XG4gICAgX2tleTogaWQsXG4gICAgLi4uYnVpbGRHcm91cE11dGF0aW9uKGl0ZW0pXG4gIH07XG5cbiAgcmV0dXJuIGFkZEl0ZW08R3JvdXBUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5HUk9VUFMsIGluc2VydClcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4ge1xuICAgICAgLy8gVXBkYXRlIGxpbmtlZCB0YWdzXG4gICAgICBjb25zdCB7X2lkOiBncm91cERvY0lkfTogR3JvdXBUeXBlID0gZ3JvdXA7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHNlc3Npb25Eb2NJZCBhbmQgZ3JvdXBEb2NJZFxuICAgICAgaWYgKCFzZXNzaW9uRG9jSWQgfHwgdHlwZW9mIHNlc3Npb25Eb2NJZCAhPT0gJ3N0cmluZycgfHwgIXNlc3Npb25Eb2NJZC5zdGFydHNXaXRoKCd1c2Vycy8nKSkge1xuICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLklOVkFMSURfSU5QVVRcbiAgICAgICAgfSwgbmV3IEVycm9yKCdJbnZhbGlkIG9yIG1pc3Npbmcgc2Vzc2lvbkRvY0lkIGZvciBlZGdlIGNyZWF0aW9uJyksIGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghZ3JvdXBEb2NJZCB8fCB0eXBlb2YgZ3JvdXBEb2NJZCAhPT0gJ3N0cmluZycgfHwgIWdyb3VwRG9jSWQuc3RhcnRzV2l0aCgnZ3JvdXBzLycpKSB7XG4gICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuSU5WQUxJRF9JTlBVVFxuICAgICAgICB9LCBuZXcgRXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBncm91cERvY0lkIGZvciBlZGdlIGNyZWF0aW9uJyksIGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFnTmFtZXMgPSBleHRyYWN0VGFncyhkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCB0YWdOYW1lcylcbiAgICAgICAgLnRoZW4oKHJlc29sdmVkVGFncykgPT4gdXBkYXRlVGFnc0luSXRlbShjb250ZXh0LCB7aXRlbURvY0lkOiBncm91cERvY0lkLCB0YWdzOiByZXNvbHZlZFRhZ3N9KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY3JlYXRlR3JvdXBFZGdlKGNvbnRleHQsIHNlc3Npb25Eb2NJZCwgZ3JvdXBEb2NJZClcbiAgICAgICAgLnRoZW4oKCkgPT4gZ3JvdXApKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUdyb3VwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW06IEdyb3VwVHlwZSk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGUnO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBpZFxuICB9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpdGVtSWQgPSBwYXJzZUlkKGlkKTtcblxuICByZXR1cm4gdXBkYXRlSXRlbTxHcm91cFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkdST1VQUywgaXRlbUlkLCBidWlsZEdyb3VwTXV0YXRpb24oaXRlbSkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfaWQ6IGdyb3VwRG9jSWR9ID0gZ3JvdXA7XG5cbiAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgdGFnc1xuICAgICAgY29uc3QgdGFnTmFtZXMgPSBleHRyYWN0VGFncyhkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCB0YWdOYW1lcylcbiAgICAgICAgLnRoZW4oKHJlc29sdmVkVGFncykgPT4gdXBkYXRlVGFnc0luSXRlbShjb250ZXh0LCB7aXRlbURvY0lkOiBncm91cERvY0lkLCB0YWdzOiByZXNvbHZlZFRhZ3N9KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gZ3JvdXApO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlJztcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIHJldHVybiBkZWxldGVJdGVtPEdyb3VwVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuR1JPVVBTLCBmb3JtYXRJdGVtSWQpXG4gICAgLnRoZW4oKGdyb3VwKSA9PiBncm91cCB8fCAoe19rZXk6IGZvcm1hdEl0ZW1JZH0gYXMgR3JvdXBUeXBlKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cHNCeVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHJlYWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRHcm91cHNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbiA9IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpO1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCByIElOIE9VVEJPVU5EICR7dXNlckRvY0lkfSBoYXNSZWFjdGlvblxuICAgICAgRklMVEVSIHIudmFsdWUgPT0gJHtmb3JtYXRSZWFjdGlvbn1cbiAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiB7dmFsdWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0dyb3VwZWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBVc2VyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdpc0dyb3VwZWQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgZm9ybWF0R3JvdXBJZCA9IHBhcnNlSWQoZ3JvdXBJZCk7XG5cbiAgLy8gQ29tcGxleCBlZGdlIHRyYXZlcnNhbCB0byBjaGVjayBncm91cCBtZW1iZXJzaGlwIC0ga2VlcCBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZyBJTiAke2dyb3Vwc0NvbGxlY3Rpb259XG4gICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEdyb3VwSWR9XG4gICAgRk9SIHUgSU4gSU5CT1VORCBnLl9pZCAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtmb3JtYXRVc2VySWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChyZXN1bHRzID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSAhIXJlc3VsdHMubGVuZ3RoO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBncm91cElkLFxuICAgICAgICBpc1ZhbGlkLFxuICAgICAgICB1c2VySWRcbiAgICAgIH07XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7c2Vzc2lvbjoge3VzZXJJZH19KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXSwibmFtZXMiOlsiZmxhdHRlbiIsInVuaXFCeSIsImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsImFxbCIsImxpdGVyYWwiLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwidXNlRGIiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsInVwZGF0ZUl0ZW0iLCJleHRyYWN0VGFncyIsImdldFRhZ0xpc3RCeU5hbWUiLCJ1cGRhdGVUYWdzSW5JdGVtIiwiZXZlbnRDYXRlZ29yeSIsImdyb3Vwc0NvbGxlY3Rpb24iLCJHUk9VUFMiLCJ1c2Vyc0NvbGxlY3Rpb24iLCJVU0VSUyIsImhhc0Nvbm5lY3Rpb25Db2xsZWN0aW9uIiwiSEFTX0NPTk5FQ1RJT04iLCJpc1RhZ2dlZENvbGxlY3Rpb24iLCJJU19UQUdHRUQiLCJnZXRHcm91cExpc3RCeUFwcCIsImNvbnRleHQiLCJmcm9tIiwidG8iLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJhcWxRcnkiLCJ1bmRlZmluZWQiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJhbGwiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0R3JvdXBMaXN0QnlVc2VyIiwidXNlcklkIiwiZ2V0R3JvdXBMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJQcm9taXNlIiwibWFwIiwidGFnTmFtZSIsImZvcm1hdFRhZ05hbWUiLCJsaW1pdENsYXVzZSIsInJlc3VsdHMiLCJpdGVtIiwiX2tleSIsImdldEdyb3VwQnlJZCIsIml0ZW1JZCIsInNlc3Npb24iLCJzZXNzaW9uSWQiLCJmb3JtYXRJdGVtSWQiLCJuZXh0IiwiZ3JvdXAiLCJnZXRHcm91cERldGFpbHMiLCJncm91cElkIiwiZm9ybWF0R3JvdXBJZCIsImNyZWF0ZUdyb3VwRWRnZSIsInVzZXJEb2NJZCIsImdyb3VwRG9jSWQiLCJmb3JtYXRVc2VEb2NJZCIsImZvcm1hdEdyb3VwRG9jSWQiLCJub3ciLCJEYXRlIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJ0eXBlIiwic2F2ZSIsInJldHVybk5ldyIsImJ1aWxkR3JvdXBNdXRhdGlvbiIsImRlc2NyaXB0aW9uIiwibmFtZSIsInN1YnN0cmluZyIsImFkZEdyb3VwIiwic2Vzc2lvbkRvY0lkIiwiaWQiLCJpbnNlcnQiLCJfaWQiLCJzdGFydHNXaXRoIiwiSU5WQUxJRF9JTlBVVCIsIkVycm9yIiwicmVzb2x2ZWRUYWdzIiwiaXRlbURvY0lkIiwidGFncyIsInVwZGF0ZUdyb3VwIiwiZGVsZXRlR3JvdXAiLCJnZXRHcm91cHNCeVJlYWN0aW9uIiwicmVhY3Rpb24iLCJmb3JtYXRSZWFjdGlvbiIsImlzR3JvdXBlZCIsImZvcm1hdFVzZXJJZCIsImlzVmFsaWQiLCJsZW5ndGgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLE9BQU8sUUFBTyw4QkFBOEI7QUFDcEQsU0FBUUMsTUFBTSxRQUFPLDJCQUEyQjtBQUNoRCxTQUFRQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQzNGLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUUvQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxRQUFPLFlBQVk7QUFDckUsU0FBUUMsV0FBVyxFQUFFQyxnQkFBZ0IsRUFBRUMsZ0JBQWdCLFFBQU8sWUFBWTtBQU0xRSxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsbUJBQW1CZCxRQUFRQyxZQUFZYyxNQUFNO0FBQ25ELE1BQU1DLGtCQUFrQmhCLFFBQVFDLFlBQVlnQixLQUFLO0FBQ2pELE1BQU1DLDBCQUEwQmxCLFFBQVFFLE1BQU1pQixjQUFjO0FBQzVELE1BQU1DLHFCQUFxQnBCLFFBQVFFLE1BQU1tQixTQUFTO0FB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
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvZ3JvdXBzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge2ZsYXR0ZW59IGZyb20gJ0BubGFicy91dGlscy9hcnJheXMvZmxhdHRlbic7XG5pbXBvcnQge3VuaXFCeX0gZnJvbSAnQG5sYWJzL3V0aWxzL2FycmF5cy91bmlxJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7ZXh0cmFjdFRhZ3MsIGdldFRhZ0xpc3RCeU5hbWUsIHVwZGF0ZVRhZ3NJbkl0ZW19IGZyb20gJy4vdGFncy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0dyb3VwRWRnZVR5cGUsIEdyb3VwVHlwZSwgR3JvdXBVc2VyfSBmcm9tICcuLi90eXBlcy9ncm91cHMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2dyb3Vwcyc7XG5jb25zdCBncm91cHNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5HUk9VUFMpO1xuY29uc3QgdXNlcnNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5VU0VSUyk7XG5jb25zdCBoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX0NPTk5FQ1RJT04pO1xuY29uc3QgaXNUYWdnZWRDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5JU19UQUdHRUQpO1xuXG4vKipcbiAqIEdldCBhbGwgZ3JvdXBzIGZvciB0aGUgYXBwIHdpdGggdGhlaXIgdXNlcnNcbiAqIE5vdGU6IFVzZXMgY3VzdG9tIHF1ZXJ5IGZvciBlZGdlIHRyYXZlcnNhbCB0byBpbmNsdWRlIHVzZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeUFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmcm9tPzogbnVtYmVyLCB0bz86IG51bWJlcik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEdyb3VwTGlzdEJ5QXBwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIC8vIENvbXBsZXggZWRnZSB0cmF2ZXJzYWwgcXVlcnkgLSBrZWVwIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBnIElOICR7Z3JvdXBzQ29sbGVjdGlvbn1cbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIGwgSU4gT1VUQk9VTkQgZy5faWQgJHtoYXNDb25uZWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgUkVUVVJOIE1FUkdFKHUsIHt0eXBlOiBsLnR5cGV9KVxuICAgICAgKVxuICAgICAgJHtmcm9tICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHVuZGVmaW5lZCA/IGxpdGVyYWwoYExJTUlUICR7ZnJvbX0sICR7dG8gLSBmcm9tfWApIDogbGl0ZXJhbCgnJyl9XG4gICAgICBTT1JUIGcuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnN9KVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBMaXN0QnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZnJvbTogbnVtYmVyLFxuICB0bzogbnVtYmVyXG4pOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRHcm91cExpc3RCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgLy8gQ29tcGxleCBlZGdlIHRyYXZlcnNhbCBxdWVyeSB3aXRoIHVzZXIgZmlsdGVyaW5nIC0ga2VlcCBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgZywgZSBJTiBJTkJPVU5EICR7YHVzZXJzLyR7dXNlcklkfWB9ICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgIFJFVFVSTiBNRVJHRSh1LCB7dHlwZTogbC50eXBlfSlcbiAgICAgIClcbiAgICAgICR7ZnJvbSAhPT0gdW5kZWZpbmVkICYmIHRvICE9PSB1bmRlZmluZWQgPyBsaXRlcmFsKGBMSU1JVCAke2Zyb219LCAke3RvIC0gZnJvbX1gKSA6IGxpdGVyYWwoJycpfVxuICAgICAgU09SVCBnLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UoZywge3VzZXJzfSlcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwTGlzdEJ5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnTmFtZXM6IHN0cmluZ1tdLFxuICBmcm9tOiBudW1iZXIsXG4gIHRvOiBudW1iZXJcbik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgLy8gQ29tcGxleCBtdWx0aS10YWcgcXVlcnkgd2l0aCBlZGdlIHRyYXZlcnNhbCAtIGtlZXAgY3VzdG9tIGltcGxlbWVudGF0aW9uXG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICB0YWdOYW1lcy5tYXAoKHRhZ05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZm9ybWF0VGFnTmFtZSA9IHBhcnNlSWQodGFnTmFtZSk7XG4gICAgICBjb25zdCBsaW1pdENsYXVzZSA9IGZyb20gIT09IHVuZGVmaW5lZCAmJiB0byAhPT0gdW5kZWZpbmVkID8gYExJTUlUICR7ZnJvbX0sICR7dG8gLSBmcm9tfWAgOiAnJztcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHAsIGUgSU4gT1VUQk9VTkQgJHtgdGFncy8ke2Zvcm1hdFRhZ05hbWV9YH0gJHtpc1RhZ2dlZENvbGxlY3Rpb259XG4gICAgICAgICAgRk9SIHUgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICAgICAgTEVUIGxpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBMRVQgZGlzbGlrZXMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgbGlrZSBJTiBJTkJPVU5EIHAuX2lkIGxpa2VzXG4gICAgICAgICAgICBGSUxURVIgbGlrZS52YWx1ZSA9PSAnZGlzbGlrZSdcbiAgICAgICAgICAgIFJFVFVSTiBsaWtlXG4gICAgICAgICAgKVxuICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gJ3Bvc3QnICYmIHAudXNlcklkID09IHUuX2tleVxuICAgICAgICAgICR7bGl0ZXJhbChsaW1pdENsYXVzZSl9XG4gICAgICAgICAgU09SVCBwLmFkZGVkXG4gICAgICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHt1c2VyOnUsIGxpa2VzOkxFTkdUSChsaWtlcyksIGRpc2xpa2VzOkxFTkdUSChkaXNsaWtlcyl9KWA7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuXG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KTtcbiAgICB9KVxuICApXG4gICAgLnRoZW4oKHJlc3VsdHMpID0+IHVuaXFCeShmbGF0dGVuKHJlc3VsdHMpLCAoaXRlbTogYW55KSA9PiBpdGVtLl9rZXkpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbn0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uSWQgPSBzZXNzaW9uPy51c2VySWQgfHwgJyc7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcblxuICAvLyBDb21wbGV4IGVkZ2UgdHJhdmVyc2FsIHdpdGggdXNlciBvd25lcnNoaXAgY2hlY2sgLSBrZWVwIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnLCBlIElOIE9VVEJPVU5EICR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9IGhhc0Nvbm5lY3Rpb25cbiAgICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgUkVUVVJOIE1FUkdFICh1LCB7dHlwZTpsLnR5cGV9KVxuICAgICAgKVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKGcsIHt1c2Vyczp1c2Vyc30pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4gZ3JvdXApXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBEZXRhaWxzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICByZXR1cm4gZ2V0SXRlbUJ5PEdyb3VwVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuR1JPVVBTLCB7X2tleTogZm9ybWF0R3JvdXBJZH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwRWRnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlckRvY0lkOiBzdHJpbmcsXG4gIGdyb3VwRG9jSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxHcm91cEVkZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVHcm91cEVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZURvY0lkID0gcGFyc2VBcmFuZ29JZCh1c2VyRG9jSWQpO1xuICBjb25zdCBmb3JtYXRHcm91cERvY0lkID0gcGFyc2VBcmFuZ29JZChncm91cERvY0lkKTtcblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0Nvbm5lY3Rpb24nKTtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgZ3JvdXAtJHtmb3JtYXRVc2VEb2NJZH0tJHtmb3JtYXRHcm91cERvY0lkfWApO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2Zyb206IGZvcm1hdFVzZURvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdEdyb3VwRG9jSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB0eXBlOiAnZ3JvdXBzJ1xuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHtzZXNzaW9uOiB7dXNlcklkOiBmb3JtYXRVc2VEb2NJZH19KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmNvbnN0IGJ1aWxkR3JvdXBNdXRhdGlvbiA9ICh7ZGVzY3JpcHRpb24gPSAnJywgbmFtZSA9ICdVbnRpdGxlZCcsIHR5cGV9OiBHcm91cFR5cGUpOiBQYXJ0aWFsPEdyb3VwVHlwZT4gPT4gKHtcbiAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLnN1YnN0cmluZygwLCA2NDApLFxuICBuYW1lLFxuICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMTYpIHx8ICdwcml2YXRlJ1xufSk7XG5cbmV4cG9ydCBjb25zdCBhZGRHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkID0gYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IHtkZXNjcmlwdGlvbiA9ICcnfTogR3JvdXBUeXBlID0gaXRlbTtcbiAgY29uc3QgaWQgPSBjcmVhdGVIYXNoKGBncm91cC0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgaW5zZXJ0OiBHcm91cFR5cGUgPSB7XG4gICAgX2tleTogaWQsXG4gICAgLi4uYnVpbGRHcm91cE11dGF0aW9uKGl0ZW0pXG4gIH07XG5cbiAgcmV0dXJuIGFkZEl0ZW08R3JvdXBUeXBlPihjb250ZXh0LCBDT0xMRUNUSU9OUy5HUk9VUFMsIGluc2VydClcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4ge1xuICAgICAgLy8gVXBkYXRlIGxpbmtlZCB0YWdzXG4gICAgICBjb25zdCB7X2lkOiBncm91cERvY0lkfTogR3JvdXBUeXBlID0gZ3JvdXA7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHNlc3Npb25Eb2NJZCBhbmQgZ3JvdXBEb2NJZFxuICAgICAgaWYgKCFzZXNzaW9uRG9jSWQgfHwgdHlwZW9mIHNlc3Npb25Eb2NJZCAhPT0gJ3N0cmluZycgfHwgIXNlc3Npb25Eb2NJZC5zdGFydHNXaXRoKCd1c2Vycy8nKSkge1xuICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLklOVkFMSURfSU5QVVRcbiAgICAgICAgfSwgbmV3IEVycm9yKCdJbnZhbGlkIG9yIG1pc3Npbmcgc2Vzc2lvbkRvY0lkIGZvciBlZGdlIGNyZWF0aW9uJyksIGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghZ3JvdXBEb2NJZCB8fCB0eXBlb2YgZ3JvdXBEb2NJZCAhPT0gJ3N0cmluZycgfHwgIWdyb3VwRG9jSWQuc3RhcnRzV2l0aCgnZ3JvdXBzLycpKSB7XG4gICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuSU5WQUxJRF9JTlBVVFxuICAgICAgICB9LCBuZXcgRXJyb3IoJ0ludmFsaWQgb3IgbWlzc2luZyBncm91cERvY0lkIGZvciBlZGdlIGNyZWF0aW9uJyksIGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFnTmFtZXMgPSBleHRyYWN0VGFncyhkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCB0YWdOYW1lcylcbiAgICAgICAgLnRoZW4oKHJlc29sdmVkVGFncykgPT4gdXBkYXRlVGFnc0luSXRlbShjb250ZXh0LCB7aXRlbURvY0lkOiBncm91cERvY0lkLCB0YWdzOiByZXNvbHZlZFRhZ3N9KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY3JlYXRlR3JvdXBFZGdlKGNvbnRleHQsIHNlc3Npb25Eb2NJZCwgZ3JvdXBEb2NJZClcbiAgICAgICAgLnRoZW4oKCkgPT4gZ3JvdXApKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUdyb3VwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW06IEdyb3VwVHlwZSk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGUnO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBpZFxuICB9OiBHcm91cFR5cGUgPSBpdGVtO1xuICBjb25zdCBpdGVtSWQgPSBwYXJzZUlkKGlkKTtcblxuICByZXR1cm4gdXBkYXRlSXRlbTxHcm91cFR5cGU+KGNvbnRleHQsIENPTExFQ1RJT05TLkdST1VQUywgaXRlbUlkLCBidWlsZEdyb3VwTXV0YXRpb24oaXRlbSkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtfaWQ6IGdyb3VwRG9jSWR9ID0gZ3JvdXA7XG5cbiAgICAgIC8vIFVwZGF0ZSBsaW5rZWQgdGFnc1xuICAgICAgY29uc3QgdGFnTmFtZXMgPSBleHRyYWN0VGFncyhkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gZ2V0VGFnTGlzdEJ5TmFtZShjb250ZXh0LCB0YWdOYW1lcylcbiAgICAgICAgLnRoZW4oKHJlc29sdmVkVGFncykgPT4gdXBkYXRlVGFnc0luSXRlbShjb250ZXh0LCB7aXRlbURvY0lkOiBncm91cERvY0lkLCB0YWdzOiByZXNvbHZlZFRhZ3N9KSlcbiAgICAgICAgLnRoZW4oKCkgPT4gZ3JvdXApO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlJztcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIHJldHVybiBkZWxldGVJdGVtPEdyb3VwVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuR1JPVVBTLCBmb3JtYXRJdGVtSWQpXG4gICAgLnRoZW4oKGdyb3VwKSA9PiBncm91cCB8fCAoe19rZXk6IGZvcm1hdEl0ZW1JZH0gYXMgR3JvdXBUeXBlKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cHNCeVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHJlYWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRHcm91cHNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbiA9IHBhcnNlQ2hhcihyZWFjdGlvbiwgMzIpO1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCByIElOIE9VVEJPVU5EICR7dXNlckRvY0lkfSBoYXNSZWFjdGlvblxuICAgICAgRklMVEVSIHIudmFsdWUgPT0gJHtmb3JtYXRSZWFjdGlvbn1cbiAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiB7dmFsdWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0dyb3VwZWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIGdyb3VwSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBVc2VyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdpc0dyb3VwZWQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgZm9ybWF0R3JvdXBJZCA9IHBhcnNlSWQoZ3JvdXBJZCk7XG5cbiAgLy8gQ29tcGxleCBlZGdlIHRyYXZlcnNhbCB0byBjaGVjayBncm91cCBtZW1iZXJzaGlwIC0ga2VlcCBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZyBJTiAke2dyb3Vwc0NvbGxlY3Rpb259XG4gICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEdyb3VwSWR9XG4gICAgRk9SIHUgSU4gSU5CT1VORCBnLl9pZCAke2hhc0Nvbm5lY3Rpb25Db2xsZWN0aW9ufVxuICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtmb3JtYXRVc2VySWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChyZXN1bHRzID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSAhIXJlc3VsdHMubGVuZ3RoO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBncm91cElkLFxuICAgICAgICBpc1ZhbGlkLFxuICAgICAgICB1c2VySWRcbiAgICAgIH07XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7c2Vzc2lvbjoge3VzZXJJZH19KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXSwibmFtZXMiOlsiZmxhdHRlbiIsInVuaXFCeSIsImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsImFxbCIsImxpdGVyYWwiLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwidXNlRGIiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsInVwZGF0ZUl0ZW0iLCJleHRyYWN0VGFncyIsImdldFRhZ0xpc3RCeU5hbWUiLCJ1cGRhdGVUYWdzSW5JdGVtIiwiZXZlbnRDYXRlZ29yeSIsImdyb3Vwc0NvbGxlY3Rpb24iLCJHUk9VUFMiLCJ1c2Vyc0NvbGxlY3Rpb24iLCJVU0VSUyIsImhhc0Nvbm5lY3Rpb25Db2xsZWN0aW9uIiwiSEFTX0NPTk5FQ1RJT04iLCJpc1RhZ2dlZENvbGxlY3Rpb24iLCJJU19UQUdHRUQiLCJnZXRHcm91cExpc3RCeUFwcCIsImNvbnRleHQiLCJmcm9tIiwidG8iLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJhcWxRcnkiLCJ1bmRlZmluZWQiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJhbGwiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0R3JvdXBMaXN0QnlVc2VyIiwidXNlcklkIiwiZ2V0R3JvdXBMaXN0QnlUYWdzIiwidGFnTmFtZXMiLCJQcm9taXNlIiwibWFwIiwidGFnTmFtZSIsImZvcm1hdFRhZ05hbWUiLCJsaW1pdENsYXVzZSIsInJlc3VsdHMiLCJpdGVtIiwiX2tleSIsImdldEdyb3VwQnlJZCIsIml0ZW1JZCIsInNlc3Npb24iLCJzZXNzaW9uSWQiLCJmb3JtYXRJdGVtSWQiLCJuZXh0IiwiZ3JvdXAiLCJnZXRHcm91cERldGFpbHMiLCJncm91cElkIiwiZm9ybWF0R3JvdXBJZCIsImNyZWF0ZUdyb3VwRWRnZSIsInVzZXJEb2NJZCIsImdyb3VwRG9jSWQiLCJmb3JtYXRVc2VEb2NJZCIsImZvcm1hdEdyb3VwRG9jSWQiLCJub3ciLCJEYXRlIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJ0eXBlIiwic2F2ZSIsInJldHVybk5ldyIsImJ1aWxkR3JvdXBNdXRhdGlvbiIsImRlc2NyaXB0aW9uIiwibmFtZSIsInN1YnN0cmluZyIsImFkZEdyb3VwIiwic2Vzc2lvbkRvY0lkIiwiaWQiLCJpbnNlcnQiLCJfaWQiLCJzdGFydHNXaXRoIiwiSU5WQUxJRF9JTlBVVCIsIkVycm9yIiwicmVzb2x2ZWRUYWdzIiwiaXRlbURvY0lkIiwidGFncyIsInVwZGF0ZUdyb3VwIiwiZGVsZXRlR3JvdXAiLCJnZXRHcm91cHNCeVJlYWN0aW9uIiwicmVhY3Rpb24iLCJmb3JtYXRSZWFjdGlvbiIsImlzR3JvdXBlZCIsImZvcm1hdFVzZXJJZCIsImlzVmFsaWQiLCJsZW5ndGgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLE9BQU8sUUFBTyw4QkFBOEI7QUFDcEQsU0FBUUMsTUFBTSxRQUFPLDJCQUEyQjtBQUNoRCxTQUFRQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQzNGLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUUvQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxRQUFPLFlBQVk7QUFDckUsU0FBUUMsV0FBVyxFQUFFQyxnQkFBZ0IsRUFBRUMsZ0JBQWdCLFFBQU8sWUFBWTtBQU0xRSxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsbUJBQW1CZCxRQUFRQyxZQUFZYyxNQUFNO0FBQ25ELE1BQU1DLGtCQUFrQmhCLFFBQVFDLFlBQVlnQixLQUFLO0FBQ2pELE1BQU1DLDBCQUEwQmxCLFFBQVFFLE1BQU1pQixjQUFjO0FBQzVELE1BQU1DLHFCQUFxQnBC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
|
package/lib/actions/images.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/
|
|
5
5
|
import { PutObjectCommandInput } from '@aws-sdk/client-s3';
|
|
6
6
|
import type { QueryFilter } from '../types/apps.types.js';
|
package/lib/actions/images.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/ import { get as httpGet } from '@nlabs/rip-hunter';
|
|
5
5
|
import { parseNum } from '@nlabs/utils/parsers/numbers';
|
|
6
6
|
import { createHash, parseArangoId, parseChar, parseId, parseString } from '@nlabs/utils/parsers/strings';
|
|
@@ -870,4 +870,4 @@ export const deleteImage = async (context, imageId)=>{
|
|
|
870
870
|
}
|
|
871
871
|
};
|
|
872
872
|
|
|
873
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvaW1hZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge0RlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQsIFB1dE9iamVjdENvbW1hbmRJbnB1dH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXR9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IGV4aWZSZWFkZXIgZnJvbSAnZXhpZi1yZWFkZXInO1xuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRJbWFnZUV4dGVuc2lvbn0gZnJvbSAnLi4vdXRpbHMvaW1hZ2VVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRHcm91cERldGFpbHMsIGlzR3JvdXBlZH0gZnJvbSAnLi9ncm91cHMuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGV9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtzM0RlbGV0ZUxpc3QsIHMzR2V0U2lnbmVkVXJsLCBzM1B1dH0gZnJvbSAnLi9zMy5qcyc7XG5pbXBvcnQge2hhc1N1YnNjcmlwdGlvblRvSXRlbX0gZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge1F1ZXJ5RmlsdGVyfSBmcm9tICcuLi90eXBlcy9hcHBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkNvbGxlY3Rpb24sIEFyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtHcm91cFR5cGUsIEdyb3VwVXNlcn0gZnJvbSAnLi4vdHlwZXMvZ3JvdXBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtJbWFnZUVkZ2VUeXBlLCBJbWFnZU9wdGlvbnMsIEltYWdlVHlwZSwgSW1hZ2VVcmxEYXRhfSBmcm9tICcuLi90eXBlcy9pbWFnZXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ZpbHRlckdyb3VwfSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcblxuLy8gRGVmaW5lIGludGVyZmFjZSBmb3IgSFRUUCByZXNwb25zZSB3aXRoIGJ1ZmZlciBtZXRob2RcbmludGVyZmFjZSBIdHRwUmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZSB7XG4gIGJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj47XG59XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnaW1hZ2VzJztcbmNvbnN0IGhhc1JlYWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX1JFQUNUSU9OKTtcbmNvbnN0IGhhc01lZGlhQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX01FRElBKTtcbmNvbnN0IHBlcnNvbmFzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuY29uc3QgTUVESUFfSVRFTV9DT0xMRUNUSU9OUzogcmVhZG9ubHkgQXJhbmdvRGJDb2xsZWN0aW9uW10gPSBbXG4gIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICBDT0xMRUNUSU9OUy5VU0VSUyxcbiAgQ09MTEVDVElPTlMuUE9TVFMsXG4gIENPTExFQ1RJT05TLkdST1VQU1xuXTtcblxudHlwZSBTaGFycEZvcm1hdCA9IEV4dHJhY3Q8UGFyYW1ldGVyczxSZXR1cm5UeXBlPHR5cGVvZiBzaGFycD5bJ3RvRm9ybWF0J10+WzBdLCBzdHJpbmc+O1xuXG5jb25zdCBnZXRNZWRpYUl0ZW1Eb2NJZHMgPSAoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlPzogQXJhbmdvRGJDb2xsZWN0aW9uKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBkb2NJZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcblxuICBpZihkb2NJZCkge1xuICAgIHJldHVybiBbZG9jSWRdO1xuICB9XG5cbiAgY29uc3QgaXRlbUtleSA9IHBhcnNlSWQoaXRlbUlkKTtcblxuICBpZighaXRlbUtleSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmKGl0ZW1UeXBlICYmIE1FRElBX0lURU1fQ09MTEVDVElPTlMuaW5jbHVkZXMoaXRlbVR5cGUpKSB7XG4gICAgcmV0dXJuIFtgJHtpdGVtVHlwZX0vJHtpdGVtS2V5fWBdO1xuICB9XG5cbiAgcmV0dXJuIE1FRElBX0lURU1fQ09MTEVDVElPTlMubWFwKChjb2xsZWN0aW9uKSA9PiBgJHtjb2xsZWN0aW9ufS8ke2l0ZW1LZXl9YCk7XG59O1xuXG5jb25zdCBub3JtYWxpemVJbWFnZUZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IFNoYXJwRm9ybWF0ID0+XG4gIChmb3JtYXQgPT09ICdqcGcnID8gJ2pwZWcnIDogZm9ybWF0KSBhcyBTaGFycEZvcm1hdDtcblxuY29uc3QgaW1hZ2VFeGlmTWV0YWRhdGEgPSAoZXhpZj86IEJ1ZmZlcikgPT4ge1xuICBpZighZXhpZikgcmV0dXJuIHt9O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBleGlmUmVhZGVyKGV4aWYpO1xuICAgIGNvbnN0IHRha2VuID0gbWV0YWRhdGEuUGhvdG8/LkRhdGVUaW1lT3JpZ2luYWw7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ha2U6IG1ldGFkYXRhLkltYWdlPy5NYWtlLFxuICAgICAgbW9kZWw6IG1ldGFkYXRhLkltYWdlPy5Nb2RlbCxcbiAgICAgIHRha2VuOiB0YWtlbiBpbnN0YW5jZW9mIERhdGUgPyB0YWtlbi5nZXRUaW1lKCkgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmNvbnN0IG5vcm1hbGl6ZUltYWdlUHJpdmFjeSA9IChwcml2YWN5OiB1bmtub3duKTogJ2ZyaWVuZHMnIHwgJ3ByaXZhdGUnIHwgJ3B1YmxpYycgfCAndmlwJyA9PiB7XG4gIHN3aXRjaChTdHJpbmcocHJpdmFjeSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiAnZnJpZW5kcyc7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gJ3ZpcCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAncHVibGljJztcbiAgfVxufTtcblxuY29uc3QgY2FuVmlld0ltYWdlID0gKFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICB2aWV3ZXJVc2VySWQ6IHN0cmluZyxcbiAgYWNjZXNzOiB7XG4gICAgcmVhZG9ubHkgY2FuVmlld0ZyaWVuZHM6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY2FuVmlld1ZpcDogYm9vbGVhbjtcbiAgICByZWFkb25seSBpc093bmVyOiBib29sZWFuO1xuICB9XG4pID0+IHtcbiAgY29uc3QgcHJpdmFjeSA9IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShpbWFnZT8ucHJpdmFjeSk7XG5cbiAgaWYoYWNjZXNzLmlzT3duZXIgfHwgU3RyaW5nKGltYWdlPy51c2VySWQgfHwgJycpID09PSB2aWV3ZXJVc2VySWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaChwcml2YWN5KSB7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdGcmllbmRzO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdWaXA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VJbWFnZU9wdGlvbnMgPSAob3B0aW9uczogSW1hZ2VPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VPcHRpb25hbEZpZWxkcyA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBpZihmaWVsZC5pbmNsdWRlcygnQ291bnQnKSkge1xuICAgICAgcmV0dXJuIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUoJ2ltYWdlcycsICdpJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAncmVhY3Rpb25zJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICBGT1IgaW1hZ2UsIHIgSU4gSU5CT1VORCBpLl9pZCByZWFjdGlvbnNcbiAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhZ3MnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdGFncyA9IChcbiAgICAgICAgICBGT1IgdCwgcGwgSU4gSU5CT1VORCBpLl9pZCBpc1RhZ2dlZFxuICAgICAgICAgIFJFVFVSTiB0XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VzZXJzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHVzZXJzID0gRklSU1QoXG4gICAgICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgaS51c2VySWQgPT0gdS5fa2V5XG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB1XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3VzZXJzOnVzZXJzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlciA9IDAsXG4gIHRvOiBudW1iZXIgPSAzMFxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VzQnlVc2VyJztcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuXG4gIHJldHVybiBnZXRMaXN0Qnk8SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywge3VzZXJJZDogZm9ybWF0VXNlcklkfSwge1xuICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgbGltaXQ6IHtmcm9tLCB0b30sXG4gICAgY3VzdG9tUXVlcmllczogW1xuICAgICAgYExFVCB1c2VyID0gRklSU1QoRk9SIHUgSU4gdXNlcnMgRklMVEVSIHUuX2tleSA9PSBkb2MudXNlcklkIExJTUlUIDEgUkVUVVJOIHUpYFxuICAgIF0sXG4gICAgY3VzdG9tT2JqZWN0czogWyd1c2VyOnVzZXInXVxuICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2Zyb20sIHRvLCB1c2VySWR9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VDb3VudEJ5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZUNvdW50QnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0TWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIG1lZGlhID0gKFxuICAgICAgRk9SIGkgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBpLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgICAgRklMVEVSIGkudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgUkVUVVJOIDFcbiAgICApXG4gICAgUkVUVVJOIHtjb3VudDogTEVOR1RIKG1lZGlhKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoe2NvdW50fSkgPT4gY291bnQpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aXRlbUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeUl0ZW0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICBvcHRpb25zOiBJbWFnZU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VzQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZSA9IG9wdGlvbnM/Lml0ZW1UeXBlID8gcGFyc2VDaGFyKFN0cmluZyhvcHRpb25zLml0ZW1UeXBlIHx8ICcnKSwgMzIpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uIDogdW5kZWZpbmVkO1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0TWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCwgZm9ybWF0SXRlbVR5cGUpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEltYWdlT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgbCBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBsLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICBMRVQgaSA9IERPQ1VNRU5UKGwuX3RvKVxuICAgICAgRklMVEVSIE5PVCBJU19OVUxMKGkpXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbC5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgU09SVCBpLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKGksIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgnaScpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvbixcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSk7XG5cbiAgICBjb25zdCBvd25lclVzZXJJZCA9IFN0cmluZyhsaXN0WzBdPy51c2VySWQgfHwgJycpO1xuICAgIGNvbnN0IGlzT3duZXIgPSAhIXNlc3Npb25Vc2VySWQgJiYgISFvd25lclVzZXJJZCAmJiBzZXNzaW9uVXNlcklkID09PSBvd25lclVzZXJJZDtcblxuICAgIGlmKGlzT3duZXIpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoKGltYWdlKSA9PiBub3JtYWxpemVJbWFnZVByaXZhY3koaW1hZ2U/LnByaXZhY3kpID09PSAncHVibGljJyk7XG4gICAgfVxuXG4gICAgbGV0IGNhblZpZXdGcmllbmRzID0gZmFsc2U7XG4gICAgbGV0IGNhblZpZXdWaXAgPSBmYWxzZTtcblxuICAgIGNvbnN0IG1lZGlhSXRlbUtleSA9IFN0cmluZygobGlzdFswXSBhcyBJbWFnZVR5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZ30pPy5fbWVkaWFJdGVtS2V5IHx8ICcnKTtcbiAgICBjb25zdCBtZWRpYUl0ZW1UeXBlID0gU3RyaW5nKChsaXN0WzBdIGFzIEltYWdlVHlwZSAmIHtfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30pPy5fbWVkaWFJdGVtVHlwZSB8fCAnJyk7XG5cbiAgICBpZihtZWRpYUl0ZW1UeXBlID09PSBDT0xMRUNUSU9OUy5QRVJTT05BUyAmJiBtZWRpYUl0ZW1LZXkpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBtZWRpYUl0ZW1LZXkpO1xuICAgICAgY2FuVmlld0ZyaWVuZHMgPSAhIXJlbGF0aW9uc2hpcD8uaXNGcmllbmQ7XG4gICAgICBjYW5WaWV3VmlwID0gYXdhaXQgaGFzU3Vic2NyaXB0aW9uVG9JdGVtKGNvbnRleHQsIG1lZGlhSXRlbUtleSwgQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0LmZpbHRlcigoaW1hZ2UpID0+IGNhblZpZXdJbWFnZShpbWFnZSwgc2Vzc2lvblVzZXJJZCwge2NhblZpZXdGcmllbmRzLCBjYW5WaWV3VmlwLCBpc093bmVyfSkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2l0ZW1JZCwgb3B0aW9uczogey4uLm9wdGlvbnMsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZX19LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlHcm91cCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGFyYW1zOiB7ZmlsdGVyczogUXVlcnlGaWx0ZXJbXSwgZ3JvdXBJZDogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9XG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeUdyb3VwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7ZmlsdGVycywgZ3JvdXBJZCwgZnJvbSwgdG99ID0gcGFyYW1zO1xuICBjb25zdCBmb3JtYXRHcm91cElkID0gcGFyc2VJZChncm91cElkKTtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG5cbiAgZmlsdGVyc1xuICAgIC5tYXAoKGZpbHRlcjogUXVlcnlGaWx0ZXIpID0+IHtcbiAgICAgIGNvbnN0IHtjb25kaXRpb25hbCwgbmFtZSwgdmFsdWV9ID0gZmlsdGVyO1xuICAgICAgbGV0IGZvcm1hdENvbmQgPSBjb25kaXRpb25hbDtcblxuICAgICAgaWYoY29uZGl0aW9uYWwgIT09ICc+PScgJiYgY29uZGl0aW9uYWwgIT09ICc8PScgJiYgY29uZGl0aW9uYWwgIT09ICc+JyAmJiBjb25kaXRpb25hbCAhPT0gJzwnKSB7XG4gICAgICAgIGZvcm1hdENvbmQgPSAnPT0nO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2gobmFtZSkge1xuICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgcmV0dXJuIGBwLmFkZGVkICR7Zm9ybWF0Q29uZH0gJHtwYXJzZU51bSh2YWx1ZSl9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIGdldEdyb3VwRGV0YWlscyhjb250ZXh0LCBmb3JtYXRHcm91cElkKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlKSA9PiB7XG4gICAgICBpZihncm91cC5wcml2YWN5ID09PSAncHVibGljJykge1xuICAgICAgICBmaWx0ZXJzLnB1c2goe2NvbmRpdGlvbmFsOiAnPT0nLCBuYW1lOiAnZ3JvdXBJZCcsIHZhbHVlOiBmb3JtYXRHcm91cElkfSk7XG4gICAgICAgIGNvbnN0IGZpbHRlclN0ciA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICAgIEZPUiBpIElOIEZMQVRURU4oXG4gICAgICAgICAgICBGT1IgcCBJTiBwb3N0c1xuICAgICAgICAgICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlclN0cil9XG4gICAgICAgICAgICAgIExFVCBpbWFnZXMgPSAoXG4gICAgICAgICAgICAgICAgRk9SIGksIGUgSU4gT1VUQk9VTkQgcC5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgICAgICAgICBGSUxURVIgZS50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgUkVUVVJOIGlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgICAgICAgICAgICBSRVRVUk4gaW1hZ2VzXG4gICAgICAgICAgKVxuICAgICAgICAgICAgU09SVCBpLmFkZGVkIERFU0NcbiAgICAgICAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgICAgICAgUkVUVVJOIGlcbiAgICAgICAgYDtcblxuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgcGFyYW1zOiB7ZmlsdGVycywgZnJvbSwgZ3JvdXBJZCwgdG99LFxuICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzR3JvdXBlZChjb250ZXh0LCBzZXNzaW9uSWQsIGdyb3VwSWQpXG4gICAgICAgIC50aGVuKChncm91cGVkOiBHcm91cFVzZXIpID0+IHtcbiAgICAgICAgICBpZihncm91cGVkLmlzVmFsaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7Y29uZGl0aW9uYWw6ICc9PScsIG5hbWU6ICdncm91cElkJywgdmFsdWU6IGdyb3VwZWQuZ3JvdXBJZH0pO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyTGlzdCA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgICAgICAgICAgRk9SIHAgSU4gcG9zdFxuICAgICAgICAgICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyTGlzdCl9XG4gICAgICAgICAgICAgICAgRk9SIGYgSU4gcC5maWxlc1xuICAgICAgICAgICAgICAgICAgRklMVEVSIGYudHlwZSA9PSBcImltYWdlL2pwZWdcIiB8fCBmLnR5cGUgPT0gXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgICAgICAgICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgICAgICAgICAgICAgICAgUkVUVVJOIGZcbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICBwYXJhbXM6IHtmaWx0ZXJzLCBmcm9tLCBncm91cElkLCB0b30sXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5UmVhY3Rpb25zID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnNcbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlSW1hZ2VPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRJbWFnZU9wdGlvbmFsRmllbGRzKGZpZWxkcyk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZ1tdID0gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbXG4gICAgJ3IudHlwZSA9PSBcImltYWdlc1wiJyxcbiAgICBgUE9TSVRJT04oJHtKU09OLnN0cmluZ2lmeShmb3JtYXRSZWFjdGlvbnMpfSwgTE9XRVIoci5uYW1lKSlgXTtcblxuICAvLyBHZXQgZGF0YSBmcm9tIGRhdGFiYXNlXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGksIHIgSU4gT1VUQk9VTkQgJHtmb3JtYXRTZXNzaW9uSWR9IGhhc1JlYWN0aW9uXG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJpbWFnZXNcIn1cbiAgICAgIExFVCBtZWRpYSA9IEZJUlNUKFxuICAgICAgICBGT1Igb3duZXIsIGwgSU4gSU5CT1VORCBpLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgbC50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4ge1xuICAgICAgICAgICAgaXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgICBpdGVtVHlwZTogbC5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmNvbGxlY3Rpb25cbiAgICAgICAgICB9XG4gICAgICApXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbWVkaWEgJiYgbWVkaWEuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKX0sIG1lZGlhLml0ZW1LZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJCeS5qb2luKCcgJiYgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UoaSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdpJyl9LFxuICAgICAgICB7XG4gICAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VJZCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVRodW1iVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudGh1bWJVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgICAgfVxuICAgICAgKVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtvcHRpb25zLCByZWFjdGlvbnN9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0UGVyc29uYURvY0lkID0gKHBlcnNvbmFJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGVyc29uYURvY0lkID0gcGFyc2VBcmFuZ29JZChwZXJzb25hSWQpO1xuXG4gIGlmKHBlcnNvbmFEb2NJZCkge1xuICAgIHJldHVybiBwZXJzb25hRG9jSWQ7XG4gIH1cblxuICBjb25zdCBwZXJzb25hS2V5ID0gcGFyc2VJZChwZXJzb25hSWQpO1xuICByZXR1cm4gcGVyc29uYUtleSA/IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3BlcnNvbmFLZXl9YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5UGVyc29uYVJlYWN0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJyxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogSW1hZ2VPcHRpb25zXG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZUxpc3RCeVBlcnNvbmFSZWFjdGlvbnMnO1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJyk7XG4gIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGdldFBlcnNvbmFEb2NJZChwZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCk7XG4gIGNvbnN0IHJlYWN0aW9uTmFtZXMgPSBBcnJheS5pc0FycmF5KHJlYWN0aW9ucylcbiAgICA/IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpLnRvTG93ZXJDYXNlKCkpLmZpbHRlcihCb29sZWFuKVxuICAgIDogW107XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUltYWdlT3B0aW9ucyhvcHRpb25zKTtcblxuICBpZighcGVyc29uYURvY0lkIHx8ICFyZWFjdGlvbk5hbWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGltYWdlLCByZWFjdGlvbiBJTiBPVVRCT1VORCAke3BlcnNvbmFEb2NJZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJpbWFnZXNcIn1cbiAgICAgIExFVCBtZWRpYSA9IEZJUlNUKFxuICAgICAgICBGT1Igb3duZXIsIGxpbmsgSU4gSU5CT1VORCBpbWFnZS5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIGxpbmsudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobGluay5fZnJvbSkua2V5LFxuICAgICAgICAgICAgaXRlbVR5cGU6IGxpbmsuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsaW5rLl9mcm9tKS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IG1lZGlhICYmIG1lZGlhLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7cGVyc29uYXNDb2xsZWN0aW9ufSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICBGSUxURVIgTE9XRVIocmVhY3Rpb24udHlwZSB8fCBcIlwiKSBJTiBbXCJpbWFnZVwiLCBcImltYWdlc1wiXVxuICAgICAgRklMVEVSIFBPU0lUSU9OKCR7cmVhY3Rpb25OYW1lc30sIExPV0VSKHJlYWN0aW9uLm5hbWUgfHwgcmVhY3Rpb24udmFsdWUgfHwgXCJcIikpXG4gICAgICBTT1JUIHJlYWN0aW9uLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKGltYWdlLCB7XG4gICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgIH0pXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7b3B0aW9ucywgcGVyc29uYUlkLCByZWFjdGlvbnN9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUJ5SWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaW1hZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlckdyb3VwID0ge1xuICAgIG9wZXJhdG9yOiAnQU5EJyxcbiAgICBmaWx0ZXJzOiBbe2ZpZWxkOiAnX2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0SW1hZ2VJZH1dXG4gIH0gYXMgYW55O1xuXG4gIHJldHVybiBnZXRJdGVtQnk8SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgZmlsdGVycyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckltYWdlUGF0aCA9ICh1c2VySWQ6IHN0cmluZywgaW1hZ2VJZDogc3RyaW5nLCBpbWFnZVR5cGU6IHN0cmluZywgZGlyOiBzdHJpbmcgPSAnaW1hZ2VzJyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGZpbGVuYW1lID0gYCR7aW1hZ2VJZH0uJHtnZXRJbWFnZUV4dGVuc2lvbihpbWFnZVR5cGUpfWA7XG5cbiAgcmV0dXJuIGB1c2Vycy8ke3VzZXJJZH0vJHtkaXJ9LyR7ZmlsZW5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBJbWFnZVVybCA9ICh7XG4gIGJ1Y2tldCxcbiAgZGlyZWN0b3J5ID0gJ2ltYWdlcycsXG4gIGltYWdlSWQsXG4gIGltYWdlVHlwZSA9ICdqcGcnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZFxufTogSW1hZ2VVcmxEYXRhKTogc3RyaW5nID0+IHtcbiAgaWYoIXR5cGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZighaW1hZ2VJZCkge1xuICAgIGlmKGltYWdlVHlwZSA9PT0gJ3BlcnNvbmEnKSB7XG4gICAgICByZXR1cm4gYCR7Q29uZmlnLmdldCgnaW1hZ2UuZGVmYXVsdFVybCcpfS91c2Vyc19iay5qcGdgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7Q29uZmlnLmdldCgnaW1hZ2UuZGVmYXVsdFVybCcpfS91c2Vyc193aC5qcGdgO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCBpbWFnZU5hbWUgPSBpc1RodW1iID8gYCR7aW1hZ2VJZH0tdGguJHtpbWFnZVR5cGV9YCA6IGAke2ltYWdlSWR9LiR7aW1hZ2VUeXBlID09PSAncGVyc29uYScgfHwgaW1hZ2VUeXBlID09PSAnb3RoZXInID8gJ2pwZycgOiBpbWFnZVR5cGV9YDtcbiAgY29uc3QgaW1hZ2VVcmwgPSBDb25maWcuZ2V0KCdpbWFnZS51cmwnKSB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gO1xuXG4gIGlmKHR5cGUgPT09ICdhcHBzJykge1xuICAgIHJldHVybiBgJHtpbWFnZVVybH0vJHt0eXBlfS8ke2RpcmVjdG9yeX0vJHtpbWFnZU5hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBgJHtpbWFnZVVybH0vJHt0eXBlfS8ke3R5cGVJZH0vJHtkaXJlY3Rvcnl9LyR7aW1hZ2VOYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VVcmwgPSBhc3luYyAoe1xuICBidWNrZXQsXG4gIGltYWdlRGlyID0gJ2ltYWdlcycsXG4gIGltYWdlSWQsXG4gIGltYWdlVHlwZSA9ICdqcGcnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdXJsVHlwZSA9ICdwdWJsaWMnXG59OiBJbWFnZVVybERhdGEpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZighaW1hZ2VJZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBidWNrZXQgfHwgQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgY29uc3QgY29uZmlndXJlZEltYWdlVXJsID0gU3RyaW5nKENvbmZpZy5nZXQoJ2ltYWdlLnVybCcpIHx8ICcnKTtcbiAgY29uc3QgY29uZmlndXJlZEFwcFVybCA9IFN0cmluZyhDb25maWcuZ2V0KCdhcHAudXJsJykgfHwgJycpO1xuICBjb25zdCBwdWJsaWNCYXNlVXJsID0gY29uZmlndXJlZEFwcFVybFxuICAgID8gYGh0dHBzOi8vYm94LiR7Y29uZmlndXJlZEFwcFVybH1gXG4gICAgOiAoY29uZmlndXJlZEltYWdlVXJsIHx8IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vJHtidWNrZXROYW1lfWApO1xuICBjb25zdCBkZXZCYXNlVXJsID0gY29uZmlndXJlZEFwcFVybFxuICAgID8gYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9kZXYuJHtjb25maWd1cmVkQXBwVXJsfWBcbiAgICA6IChjb25maWd1cmVkSW1hZ2VVcmwgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YCk7XG5cbiAgLy8gQWx3YXlzIHVzZSBzaWduZWQgVVJMcyBmb3IgdGh1bWJuYWlsc1xuICBpZihpc1RodW1iKSB7XG4gICAgdXJsVHlwZSA9ICdzaWduZWQnO1xuICB9XG5cbiAgY29uc3QgdGh1bWJTdWZmaXggPSBpc1RodW1iID8gJy10aCcgOiAnJztcbiAgY29uc3QgaW1hZ2VLZXkgPSBgJHt0eXBlfS8ke3R5cGVJZH0vJHtpbWFnZURpcn0vJHtpbWFnZUlkfSR7dGh1bWJTdWZmaXh9LiR7aW1hZ2VUeXBlfWA7XG5cbiAgc3dpdGNoKHVybFR5cGUpIHtcbiAgICBjYXNlICdzaWduZWQnOiB7XG4gICAgICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0TmFtZSwgRXhwaXJlczogNjAgKiA2MCwgS2V5OiBpbWFnZUtleX0pO1xuICAgIH1cbiAgICBjYXNlICdwdWJsaWMnOiB7XG4gICAgICByZXR1cm4gYCR7cHVibGljQmFzZVVybH0vJHtpbWFnZUtleX1gO1xuICAgIH1cbiAgICBjYXNlICdkZXYnOiB7XG4gICAgICByZXR1cm4gYCR7ZGV2QmFzZVVybH0vJHtpbWFnZUtleX1gO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzaXplQW5kU2F2ZUltYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZUlkOiBzdHJpbmcsXG4gIGJ1ZmZlcjogQnVmZmVyLFxuICBmaWxlVHlwZTogc3RyaW5nID0gJ2ltYWdlL2pwZWcnLCBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdyZXNpemVTYXZlSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBpbWdXID0gQ29uZmlnLmdldCgnaW1hZ2UuaW1nU2l6ZScpO1xuICBjb25zdCBpbWdRID0gQ29uZmlnLmdldCgnaW1hZ2UuaW1nUXVhbGl0eScpO1xuICBjb25zdCBmb3JtYXQgPSAoZmlsZVR5cGUuc3BsaXQoJy8nKSlbMV0gfHwgJ2pwZWcnO1xuICBjb25zdCBzaGFycEZvcm1hdCA9IG5vcm1hbGl6ZUltYWdlRm9ybWF0KGZvcm1hdCk7XG4gIGxldCBpbWFnZU9wdGltaXplZEJ1ZmZlcjogQnVmZmVyID0gYnVmZmVyO1xuICBsZXQgdGh1bWJPcHRpbWl6ZWRCdWZmZXI6IEJ1ZmZlciA9IGJ1ZmZlcjtcbiAgbGV0IGltYWdlSWRlbnRpdHk6IEltYWdlVHlwZSA9IHtcbiAgICBmaWxlU2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICBmaWxlVHlwZTogZm9ybWF0LFxuICAgIGltYWdlSWRcbiAgfTtcblxuICB0cnkge1xuICAgIGltYWdlT3B0aW1pemVkQnVmZmVyID0gYXdhaXQgc2hhcnAoYnVmZmVyKVxuICAgICAgLnJvdGF0ZSgpXG4gICAgICAucmVzaXplKHtcbiAgICAgICAgZml0OiAnaW5zaWRlJyxcbiAgICAgICAgaGVpZ2h0OiBpbWdXLFxuICAgICAgICB3aWR0aDogaW1nVyxcbiAgICAgICAgd2l0aG91dEVubGFyZ2VtZW50OiB0cnVlXG4gICAgICB9KVxuICAgICAgLnRvRm9ybWF0KHNoYXJwRm9ybWF0LCB7cXVhbGl0eTogaW1nUX0pXG4gICAgICAudG9CdWZmZXIoKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ZpbGVUeXBlLCBpbWFnZUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGltYWdlT2JqOiBQdXRPYmplY3RDb21tYW5kSW5wdXQgPSB7XG4gICAgICBCb2R5OiBpbWFnZU9wdGltaXplZEJ1ZmZlcixcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgICAgS2V5OiBnZXRVc2VySW1hZ2VQYXRoKHNlc3Npb25JZCwgaW1hZ2VJZCwgZmlsZVR5cGUsICdpbWFnZXMnKVxuICAgIH07XG4gICAgYXdhaXQgczNQdXQoaW1hZ2VPYmopO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgW2ltYWdlTWV0YWRhdGEsIGltYWdlU3RhdHMsIHNvdXJjZU1ldGFkYXRhXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHNoYXJwKGltYWdlT3B0aW1pemVkQnVmZmVyKS5tZXRhZGF0YSgpLFxuICAgICAgc2hhcnAoaW1hZ2VPcHRpbWl6ZWRCdWZmZXIpLnN0YXRzKCksXG4gICAgICBzaGFycChidWZmZXIpLm1ldGFkYXRhKClcbiAgICBdKTtcbiAgICBjb25zdCB7YiwgZywgcn0gPSBpbWFnZVN0YXRzLmRvbWluYW50O1xuICAgIGNvbnN0IGNvbG9yID0gW3IsIGcsIGJdLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbiAgICBjb25zdCBleGlmTWV0YWRhdGEgPSBpbWFnZUV4aWZNZXRhZGF0YShzb3VyY2VNZXRhZGF0YS5leGlmKTtcblxuICAgIGltYWdlSWRlbnRpdHkgPSB7XG4gICAgICBjb2xvcixcbiAgICAgIGZpbGVTaXplOiBpbWFnZU9wdGltaXplZEJ1ZmZlci5sZW5ndGgsXG4gICAgICBmaWxlVHlwZTogZm9ybWF0LFxuICAgICAgaGVpZ2h0OiBpbWFnZU1ldGFkYXRhLmhlaWdodCB8fCAwLFxuICAgICAgaW1hZ2VJZCxcbiAgICAgIC4uLmV4aWZNZXRhZGF0YSxcbiAgICAgIG9yaWVudGF0aW9uOiBpbWFnZU1ldGFkYXRhLm9yaWVudGF0aW9uID8gU3RyaW5nKGltYWdlTWV0YWRhdGEub3JpZW50YXRpb24pIDogdW5kZWZpbmVkLFxuICAgICAgcXVhbGl0eTogaW1nUSxcbiAgICAgIHJlc29sdXRpb246IGltYWdlTWV0YWRhdGEuZGVuc2l0eSA/IGAke2ltYWdlTWV0YWRhdGEuZGVuc2l0eX0gcHBpYCA6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoOiBpbWFnZU1ldGFkYXRhLndpZHRoIHx8IDBcbiAgICB9O1xuXG4gICAgY29uc3QgdGhtVyA9IENvbmZpZy5nZXQoJ2ltYWdlLnRobVNpemUnKTtcbiAgICBjb25zdCB0aG1RID0gQ29uZmlnLmdldCgnaW1hZ2UudGhtUXVhbGl0eScpO1xuICAgIHRodW1iT3B0aW1pemVkQnVmZmVyID0gYXdhaXQgc2hhcnAoaW1hZ2VPcHRpbWl6ZWRCdWZmZXIpXG4gICAgICAucmVzaXplKHtcbiAgICAgICAgZml0OiAnY292ZXInLFxuICAgICAgICBoZWlnaHQ6IHRobVcsXG4gICAgICAgIHBvc2l0aW9uOiAnY2VudHJlJyxcbiAgICAgICAgd2lkdGg6IHRobVdcbiAgICAgIH0pXG4gICAgICAudG9Gb3JtYXQoc2hhcnBGb3JtYXQsIHtxdWFsaXR5OiB0aG1RfSlcbiAgICAgIC50b0J1ZmZlcigpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdGh1bWJPYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJvZHk6IHRodW1iT3B0aW1pemVkQnVmZmVyLFxuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgICBLZXk6IGdldFVzZXJJbWFnZVBhdGgoc2Vzc2lvbklkLCBpbWFnZUlkLCBmaWxlVHlwZSwgJ3RodW1icycpXG4gICAgfTtcbiAgICBhd2FpdCBzM1B1dCh0aHVtYk9iaik7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGltYWdlSWRlbnRpdHk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW1hZ2UgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlOiBJbWFnZVR5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEltYWdlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2ltYWdlSWQsIGRlc2NyaXB0aW9uLCBidWZmZXIsIGZpbGVUeXBlLCBpdGVtSWQsIGl0ZW1UeXBlLCBwcml2YWN5ID0gJ3B1YmxpYyd9ID0gaW1hZ2U7XG5cbiAgcmV0dXJuIHJlc2l6ZUFuZFNhdmVJbWFnZShjb250ZXh0LCBpbWFnZUlkLCBidWZmZXIsIGZpbGVUeXBlLCBzM09wdGlvbnMpXG4gICAgLnRoZW4oKHJlc2l6ZWRJbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICBjb25zdCBpbnNlcnQ6IEltYWdlVHlwZSA9IHtcbiAgICAgICAgLi4ucmVzaXplZEltYWdlLFxuICAgICAgICBfa2V5OiBpbWFnZUlkLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIHByaXZhY3k6IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShwcml2YWN5KSxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhZGRJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGluc2VydClcbiAgICAgICAgLnRoZW4oKHNhdmVkSW1hZ2U6IEltYWdlVHlwZSkgPT4gYWRkSW1hZ2VFZGdlKGNvbnRleHQsIHtcbiAgICAgICAgICBpbWFnZUlkLFxuICAgICAgICAgIGl0ZW1JZDogaXRlbUlkIHx8IHNlc3Npb25JZCxcbiAgICAgICAgICBpdGVtVHlwZTogcGFyc2VTdHJpbmcoaXRlbVR5cGUgfHwgJ3VzZXJzJywgMzIpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uLFxuICAgICAgICAgIHR5cGU6ICdpbWFnZSdcbiAgICAgICAgfSkudGhlbigoKSA9PiBzYXZlZEltYWdlKSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9SRVNJWkVcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEltYWdlRWRnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUVkZ2U6IEltYWdlRWRnZVR5cGUpOiBQcm9taXNlPG9iamVjdD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSW1hZ2VFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7aW1hZ2VJZCwgaXRlbUlkLCBpdGVtVHlwZX0gPSBpbWFnZUVkZ2U7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGhhc01lZGlhLWltYWdlLSR7aW1hZ2VJZH0tJHtpdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlKS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBnZXREb2NJZChmb3JtYXRJdGVtVHlwZSwge19rZXk6IGZvcm1hdEl0ZW1JZH0pO1xuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gcGFyc2VJZChpbWFnZUlkKTtcbiAgY29uc3QgZmlsZURvY0lkID0gYGltYWdlcy8ke2Zvcm1hdEltYWdlSWR9YDtcblxuICBjb25zdCBlZGdlOiBJbWFnZUVkZ2VUeXBlID0ge1xuICAgIF9mcm9tOiBpdGVtRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZmlsZURvY0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgaXRlbVR5cGUsXG4gICAgdHlwZTogJ2ltYWdlJ1xuICB9O1xuXG4gIGlmKGl0ZW1Eb2NJZCkge1xuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgLnRoZW4oKGZpbGVFZGdlKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5kb2N1bWVudChmaWxlRWRnZSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBlZGdlLFxuICAgICAgICAgIGZpbGVEb2NJZCxcbiAgICAgICAgICBpbWFnZUlkLFxuICAgICAgICAgIGl0ZW1Eb2NJZCxcbiAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgaXRlbVR5cGVcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVJbWFnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgYmFzZTY0ID0gJycsXG4gICAgYnVmZmVyOiBpbWFnZUJ1ZmZlcixcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpbWFnZUlkLFxuICAgIGl0ZW1JZCxcbiAgICBpdGVtVHlwZSxcbiAgICBmaWxlVHlwZSxcbiAgICBwcml2YWN5LFxuICAgIHVybCA9ICcnXG4gIH0gPSBpbWFnZTtcblxuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gaW1hZ2VJZCB8fCBjcmVhdGVIYXNoKGBpbWFnZS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGN1c3RvbVBhcmFtczogSW1hZ2VUeXBlID0ge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGltYWdlSWQ6IGZvcm1hdEltYWdlSWQsXG4gICAgcHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpLFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH07XG5cbiAgaWYoYmFzZTY0IHx8IGltYWdlQnVmZmVyKSB7XG4gICAgbGV0IGJ1ZmZlcjogQnVmZmVyID0gaW1hZ2VCdWZmZXI7XG5cbiAgICBpZihiYXNlNjQpIHtcbiAgICAgIGNvbnN0IGZvcm1hdEJhc2U2NCA9IGJhc2U2NC5zdWJzdHIoYmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZm9ybWF0QmFzZTY0LCAnYmFzZTY0Jyk7XG4gICAgfVxuXG4gICAgbGV0IHVwZGF0ZWRGaWxlVHlwZSA9IGZpbGVUeXBlO1xuXG4gICAgaWYoIWZpbGVUeXBlKSB7XG4gICAgICBjb25zdCB7ZmlsZVR5cGVGcm9tQnVmZmVyfSA9IGF3YWl0IGltcG9ydCgnZmlsZS10eXBlJyk7XG4gICAgICBjb25zdCB7bWltZX0gPSBhd2FpdCBmaWxlVHlwZUZyb21CdWZmZXIoYnVmZmVyKTtcbiAgICAgIHVwZGF0ZWRGaWxlVHlwZSA9IG1pbWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW1nUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICBidWZmZXIsXG4gICAgICBmaWxlVHlwZTogdXBkYXRlZEZpbGVUeXBlXG4gICAgfTtcblxuICAgIHJldHVybiBhZGRJbWFnZShjb250ZXh0LCBpbWdQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgIC50aGVuKChpbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNvbnN0IGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtcbiAgICAgICAgICAgIGltYWdlSWQ6IGZvcm1hdEltYWdlSWQsXG4gICAgICAgICAgICBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSxcbiAgICAgICAgICAgIHR5cGU6ICdpbWFnZSdcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBhZGRJbWFnZUVkZ2UoY29udGV4dCwgaW1hZ2VFZGdlKS50aGVuKCgpID0+IGltYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZih1cmwgIT09ICcnKSB7XG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gICAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgICAgLnRoZW4oKHJlczogSHR0cFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9SRVFVRVNUXG4gICAgICAgICAgfSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiAocmVzIGFzIEh0dHBSZXNwb25zZSkuYnVmZmVyKCkpXG4gICAgICAudGhlbigoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgaW1nUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBmaWxlVHlwZTogY29udGVudFR5cGVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gYWRkSW1hZ2UoY29udGV4dCwgaW1nUGFyYW1zLCBzM09wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKGltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBpbWFnZUVkZ2U6IEltYWdlRWRnZVR5cGUgPSB7aW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ2ltYWdlJ307XG4gICAgICAgICAgICAgIHJldHVybiBhZGRJbWFnZUVkZ2UoY29udGV4dCwgaW1hZ2VFZGdlKS50aGVuKCgpID0+IGltYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiAnZmV0Y2hfZXJyb3InXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYoaW1hZ2VJZCkge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgIC4uLihkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8ge2Rlc2NyaXB0aW9ufSA6IHt9KSxcbiAgICAgIC4uLihwcml2YWN5ICE9PSB1bmRlZmluZWQgPyB7cHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpfSA6IHt9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdXBkYXRlSXRlbTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCBmb3JtYXRJbWFnZUlkLCB1cGRhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlSW1hZ2UgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgaW1hZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBwYXJzZUlkKGltYWdlSWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBkZWxldGVJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGZvcm1hdEltYWdlSWQsIHtcbiAgICAgIGNhc2NhZGU6IFtFREdFUy5IQVNfTUVESUFdLFxuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZighaW1hZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIERlbGV0ZSBTMyBmaWxlc1xuICAgIGNvbnN0IHtfa2V5OiBpbWFnZUtleX0gPSBpbWFnZTtcbiAgICBjb25zdCBwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQgPSB7XG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBEZWxldGU6IHtcbiAgICAgICAgT2JqZWN0czogW1xuICAgICAgICAgIHtLZXk6IGB1c2Vycy8ke3Nlc3Npb25JZH0vaW1hZ2VzLyR7aW1hZ2VLZXl9LmpwZ2B9LFxuICAgICAgICAgIHtLZXk6IGB1c2Vycy8ke3Nlc3Npb25JZH0vdGh1bWJzLyR7aW1hZ2VLZXl9LmpwZ2B9XG4gICAgICAgIF0sXG4gICAgICAgIFF1aWV0OiB0cnVlXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBzM0RlbGV0ZUxpc3QocGFyYW1zKS50aGVuKCgpID0+IGltYWdlKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiZ2V0IiwiaHR0cEdldCIsInBhcnNlTnVtIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiZXhpZlJlYWRlciIsInNoYXJwIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImdldERvY0lkIiwiZ2V0TGltaXQiLCJzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlIiwidXNlRGIiLCJnZXRJbWFnZUV4dGVuc2lvbiIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImdldEdyb3VwRGV0YWlscyIsImlzR3JvdXBlZCIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsInMzRGVsZXRlTGlzdCIsInMzR2V0U2lnbmVkVXJsIiwiczNQdXQiLCJoYXNTdWJzY3JpcHRpb25Ub0l0ZW0iLCJldmVudENhdGVnb3J5IiwiaGFzUmVhY3Rpb25Db2xsZWN0aW9uIiwiSEFTX1JFQUNUSU9OIiwiaGFzTWVkaWFDb2xsZWN0aW9uIiwiSEFTX01FRElBIiwicGVyc29uYXNDb2xsZWN0aW9uIiwiUEVSU09OQVMiLCJNRURJQV9JVEVNX0NPTExFQ1RJT05TIiwiVVNFUlMiLCJQT1NUUyIsIkdST1VQUyIsImdldE1lZGlhSXRlbURvY0lkcyIsIml0ZW1JZCIsIml0ZW1UeXBlIiwiZG9jSWQiLCJpdGVtS2V5IiwiaW5jbHVkZXMiLCJtYXAiLCJjb2xsZWN0aW9uIiwibm9ybWFsaXplSW1hZ2VGb3JtYXQiLCJmb3JtYXQiLCJpbWFnZUV4aWZNZXRhZGF0YSIsImV4aWYiLCJtZXRhZGF0YSIsInRha2VuIiwiUGhvdG8iLCJEYXRlVGltZU9yaWdpbmFsIiwibWFrZSIsIkltYWdlIiwiTWFrZSIsIm1vZGVsIiwiTW9kZWwiLCJEYXRlIiwiZ2V0VGltZSIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZUltYWdlUHJpdmFjeSIsInByaXZhY3kiLCJTdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJjYW5WaWV3SW1hZ2UiLCJpbWFnZSIsInZpZXdlclVzZXJJZCIsImFjY2VzcyIsImlzT3duZXIiLCJ1c2VySWQiLCJjYW5WaWV3RnJpZW5kcyIsImNhblZpZXdWaXAiLCJwYXJzZUltYWdlT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwidG8iLCJ0eXBlIiwibGltaXQiLCJnZXRJbWFnZU9wdGlvbmFsRmllbGRzIiwiZmllbGRzIiwicmVkdWNlIiwic2VsZWN0cyIsImZpZWxkIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwiZ2V0SW1hZ2VMaXN0QnlVc2VyIiwiY29udGV4dCIsImFjdGlvbiIsImZvcm1hdFVzZXJJZCIsInNvcnQiLCJkaXJlY3Rpb24iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsInBhcmFtcyIsInZhbHVlIiwiREFUQUJBU0VfRVJST1IiLCJnZXRJbWFnZUNvdW50QnlJdGVtIiwiZGF0YWJhc2VOYW1lIiwiaXRlbURvY0lkcyIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsIm5leHQiLCJjb3VudCIsImdldEltYWdlTGlzdEJ5SXRlbSIsInNlc3Npb24iLCJzZXNzaW9uVXNlcklkIiwiZm9ybWF0SXRlbVR5cGUiLCJzZWxlY3RPYmplY3RzIiwic2VsZWN0UXVlcmllcyIsImpvaW4iLCJsZW5ndGgiLCJsaXN0IiwiYWxsIiwib3duZXJVc2VySWQiLCJmaWx0ZXIiLCJtZWRpYUl0ZW1LZXkiLCJfbWVkaWFJdGVtS2V5IiwibWVkaWFJdGVtVHlwZSIsIl9tZWRpYUl0ZW1UeXBlIiwicmVsYXRpb25zaGlwIiwiaXNGcmllbmQiLCJnZXRJbWFnZUxpc3RCeUdyb3VwIiwic2Vzc2lvbklkIiwiZmlsdGVycyIsImdyb3VwSWQiLCJmb3JtYXRHcm91cElkIiwiY29uZGl0aW9uYWwiLCJuYW1lIiwiZm9ybWF0Q29uZCIsImdyb3VwIiwiZmlsdGVyU3RyIiwiZ3JvdXBlZCIsImlzVmFsaWQiLCJmaWx0ZXJMaXN0IiwiZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbnMiLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJyZWFjdGlvbk5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRQZXJzb25hRG9jSWQiLCJwZXJzb25hSWQiLCJwZXJzb25hRG9jSWQiLCJwZXJzb25hS2V5IiwiZ2V0SW1hZ2VMaXN0QnlQZXJzb25hUmVhY3Rpb25zIiwic2Vzc2lvblBlcnNvbmFJZCIsInJlYWN0aW9uTmFtZXMiLCJBcnJheSIsImlzQXJyYXkiLCJCb29sZWFuIiwiZ2V0SW1hZ2VCeUlkIiwiaW1hZ2VJZCIsImZvcm1hdEltYWdlSWQiLCJvcGVyYXRvciIsImdldFVzZXJJbWFnZVBhdGgiLCJpbWFnZVR5cGUiLCJkaXIiLCJmaWxlbmFtZSIsImdldEFwcEltYWdlVXJsIiwiYnVja2V0IiwiZGlyZWN0b3J5IiwiaXNUaHVtYiIsInR5cGVJZCIsImJ1Y2tldE5hbWUiLCJpbWFnZU5hbWUiLCJpbWFnZVVybCIsImdldEltYWdlVXJsIiwiaW1hZ2VEaXIiLCJ1cmxUeXBlIiwiY29uZmlndXJlZEltYWdlVXJsIiwiY29uZmlndXJlZEFwcFVybCIsInB1YmxpY0Jhc2VVcmwiLCJkZXZCYXNlVXJsIiwidGh1bWJTdWZmaXgiLCJpbWFnZUtleSIsIkJ1Y2tldCIsIkV4cGlyZXMiLCJLZXkiLCJyZXNpemVBbmRTYXZlSW1hZ2UiLCJidWZmZXIiLCJmaWxlVHlwZSIsInMzT3B0aW9ucyIsImltZ1ciLCJpbWdRIiwic3BsaXQiLCJzaGFycEZvcm1hdCIsImltYWdlT3B0aW1pemVkQnVmZmVyIiwidGh1bWJPcHRpbWl6ZWRCdWZmZXIiLCJpbWFnZUlkZW50aXR5IiwiZmlsZVNpemUiLCJyb3RhdGUiLCJyZXNpemUiLCJmaXQiLCJoZWlnaHQiLCJ3aWR0aCIsIndpdGhvdXRFbmxhcmdlbWVudCIsInRvRm9ybWF0IiwicXVhbGl0eSIsInRvQnVmZmVyIiwiSU1BR0VfU0FWRSIsImltYWdlT2JqIiwiQm9keSIsIkNvbnRlbnRUeXBlIiwiaW1hZ2VNZXRhZGF0YSIsImltYWdlU3RhdHMiLCJzb3VyY2VNZXRhZGF0YSIsIlByb21pc2UiLCJzdGF0cyIsImIiLCJnIiwiciIsImRvbWluYW50IiwiY29sb3IiLCJ0b1N0cmluZyIsInBhZFN0YXJ0IiwiZXhpZk1ldGFkYXRhIiwib3JpZW50YXRpb24iLCJyZXNvbHV0aW9uIiwiZGVuc2l0eSIsInRobVciLCJ0aG1RIiwicG9zaXRpb24iLCJ0aHVtYk9iaiIsImFkZEltYWdlIiwiZGVzY3JpcHRpb24iLCJyZXNpemVkSW1hZ2UiLCJpbnNlcnQiLCJfa2V5Iiwic2F2ZWRJbWFnZSIsImFkZEltYWdlRWRnZSIsIklNQUdFX1JFU0laRSIsImltYWdlRWRnZSIsIm5vdyIsImVkZ2VJZCIsImZvcm1hdEl0ZW1JZCIsIml0ZW1Eb2NJZCIsImZpbGVEb2NJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImFkZGVkIiwic2F2ZSIsInJldHVybk5ldyIsImZpbGVFZGdlIiwiZG9jdW1lbnQiLCJ1cGRhdGVJbWFnZSIsImJhc2U2NCIsImltYWdlQnVmZmVyIiwidXJsIiwiY3VzdG9tUGFyYW1zIiwiZm9ybWF0QmFzZTY0Iiwic3Vic3RyIiwiaW5kZXhPZiIsIkJ1ZmZlciIsInVwZGF0ZWRGaWxlVHlwZSIsImZpbGVUeXBlRnJvbUJ1ZmZlciIsIm1pbWUiLCJpbWdQYXJhbXMiLCJjb250ZW50VHlwZSIsInJlcyIsInN0YXR1cyIsIklNQUdFX1JFUVVFU1QiLCJoZWFkZXJzIiwidXBkYXRlIiwiZGVsZXRlSW1hZ2UiLCJjYXNjYWRlIiwib3duZXJzaGlwIiwiRGVsZXRlIiwiT2JqZWN0cyIsIlF1aWV0Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRCxTQUFRQSxPQUFPQyxPQUFPLFFBQU8sb0JBQW9CO0FBQ2pELFNBQVFDLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3hHLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUMvQyxPQUFPQyxnQkFBZ0IsY0FBYztBQUNyQyxPQUFPQyxXQUFXLFFBQVE7QUFFMUIsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxFQUFFQyxZQUFZLFFBQU8sNkJBQTZCO0FBQ2xFLFNBQVFDLFFBQVEsRUFBRUMs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
|
|
873
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvaW1hZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge0RlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQsIFB1dE9iamVjdENvbW1hbmRJbnB1dH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXR9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IGV4aWZSZWFkZXIgZnJvbSAnZXhpZi1yZWFkZXInO1xuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRJbWFnZUV4dGVuc2lvbn0gZnJvbSAnLi4vdXRpbHMvaW1hZ2VVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRHcm91cERldGFpbHMsIGlzR3JvdXBlZH0gZnJvbSAnLi9ncm91cHMuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGV9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtzM0RlbGV0ZUxpc3QsIHMzR2V0U2lnbmVkVXJsLCBzM1B1dH0gZnJvbSAnLi9zMy5qcyc7XG5pbXBvcnQge2hhc1N1YnNjcmlwdGlvblRvSXRlbX0gZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge1F1ZXJ5RmlsdGVyfSBmcm9tICcuLi90eXBlcy9hcHBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkNvbGxlY3Rpb24sIEFyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtHcm91cFR5cGUsIEdyb3VwVXNlcn0gZnJvbSAnLi4vdHlwZXMvZ3JvdXBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtJbWFnZUVkZ2VUeXBlLCBJbWFnZU9wdGlvbnMsIEltYWdlVHlwZSwgSW1hZ2VVcmxEYXRhfSBmcm9tICcuLi90eXBlcy9pbWFnZXMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ZpbHRlckdyb3VwfSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcblxuLy8gRGVmaW5lIGludGVyZmFjZSBmb3IgSFRUUCByZXNwb25zZSB3aXRoIGJ1ZmZlciBtZXRob2RcbmludGVyZmFjZSBIdHRwUmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZSB7XG4gIGJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj47XG59XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnaW1hZ2VzJztcbmNvbnN0IGhhc1JlYWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX1JFQUNUSU9OKTtcbmNvbnN0IGhhc01lZGlhQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX01FRElBKTtcbmNvbnN0IHBlcnNvbmFzQ29sbGVjdGlvbiA9IGxpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuY29uc3QgTUVESUFfSVRFTV9DT0xMRUNUSU9OUzogcmVhZG9ubHkgQXJhbmdvRGJDb2xsZWN0aW9uW10gPSBbXG4gIENPTExFQ1RJT05TLlBFUlNPTkFTLFxuICBDT0xMRUNUSU9OUy5VU0VSUyxcbiAgQ09MTEVDVElPTlMuUE9TVFMsXG4gIENPTExFQ1RJT05TLkdST1VQU1xuXTtcblxudHlwZSBTaGFycEZvcm1hdCA9IEV4dHJhY3Q8UGFyYW1ldGVyczxSZXR1cm5UeXBlPHR5cGVvZiBzaGFycD5bJ3RvRm9ybWF0J10+WzBdLCBzdHJpbmc+O1xuXG5jb25zdCBnZXRNZWRpYUl0ZW1Eb2NJZHMgPSAoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlPzogQXJhbmdvRGJDb2xsZWN0aW9uKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBkb2NJZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcblxuICBpZihkb2NJZCkge1xuICAgIHJldHVybiBbZG9jSWRdO1xuICB9XG5cbiAgY29uc3QgaXRlbUtleSA9IHBhcnNlSWQoaXRlbUlkKTtcblxuICBpZighaXRlbUtleSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmKGl0ZW1UeXBlICYmIE1FRElBX0lURU1fQ09MTEVDVElPTlMuaW5jbHVkZXMoaXRlbVR5cGUpKSB7XG4gICAgcmV0dXJuIFtgJHtpdGVtVHlwZX0vJHtpdGVtS2V5fWBdO1xuICB9XG5cbiAgcmV0dXJuIE1FRElBX0lURU1fQ09MTEVDVElPTlMubWFwKChjb2xsZWN0aW9uKSA9PiBgJHtjb2xsZWN0aW9ufS8ke2l0ZW1LZXl9YCk7XG59O1xuXG5jb25zdCBub3JtYWxpemVJbWFnZUZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IFNoYXJwRm9ybWF0ID0+XG4gIChmb3JtYXQgPT09ICdqcGcnID8gJ2pwZWcnIDogZm9ybWF0KSBhcyBTaGFycEZvcm1hdDtcblxuY29uc3QgaW1hZ2VFeGlmTWV0YWRhdGEgPSAoZXhpZj86IEJ1ZmZlcikgPT4ge1xuICBpZighZXhpZikgcmV0dXJuIHt9O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBleGlmUmVhZGVyKGV4aWYpO1xuICAgIGNvbnN0IHRha2VuID0gbWV0YWRhdGEuUGhvdG8/LkRhdGVUaW1lT3JpZ2luYWw7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ha2U6IG1ldGFkYXRhLkltYWdlPy5NYWtlLFxuICAgICAgbW9kZWw6IG1ldGFkYXRhLkltYWdlPy5Nb2RlbCxcbiAgICAgIHRha2VuOiB0YWtlbiBpbnN0YW5jZW9mIERhdGUgPyB0YWtlbi5nZXRUaW1lKCkgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmNvbnN0IG5vcm1hbGl6ZUltYWdlUHJpdmFjeSA9IChwcml2YWN5OiB1bmtub3duKTogJ2ZyaWVuZHMnIHwgJ3ByaXZhdGUnIHwgJ3B1YmxpYycgfCAndmlwJyA9PiB7XG4gIHN3aXRjaChTdHJpbmcocHJpdmFjeSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiAnZnJpZW5kcyc7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gJ3ZpcCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAncHVibGljJztcbiAgfVxufTtcblxuY29uc3QgY2FuVmlld0ltYWdlID0gKFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICB2aWV3ZXJVc2VySWQ6IHN0cmluZyxcbiAgYWNjZXNzOiB7XG4gICAgcmVhZG9ubHkgY2FuVmlld0ZyaWVuZHM6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY2FuVmlld1ZpcDogYm9vbGVhbjtcbiAgICByZWFkb25seSBpc093bmVyOiBib29sZWFuO1xuICB9XG4pID0+IHtcbiAgY29uc3QgcHJpdmFjeSA9IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShpbWFnZT8ucHJpdmFjeSk7XG5cbiAgaWYoYWNjZXNzLmlzT3duZXIgfHwgU3RyaW5nKGltYWdlPy51c2VySWQgfHwgJycpID09PSB2aWV3ZXJVc2VySWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaChwcml2YWN5KSB7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdGcmllbmRzO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdWaXA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VJbWFnZU9wdGlvbnMgPSAob3B0aW9uczogSW1hZ2VPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VPcHRpb25hbEZpZWxkcyA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBpZihmaWVsZC5pbmNsdWRlcygnQ291bnQnKSkge1xuICAgICAgcmV0dXJuIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUoJ2ltYWdlcycsICdpJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAncmVhY3Rpb25zJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICBGT1IgaW1hZ2UsIHIgSU4gSU5CT1VORCBpLl9pZCByZWFjdGlvbnNcbiAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhZ3MnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdGFncyA9IChcbiAgICAgICAgICBGT1IgdCwgcGwgSU4gSU5CT1VORCBpLl9pZCBpc1RhZ2dlZFxuICAgICAgICAgIFJFVFVSTiB0XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VzZXJzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHVzZXJzID0gRklSU1QoXG4gICAgICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgaS51c2VySWQgPT0gdS5fa2V5XG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB1XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3VzZXJzOnVzZXJzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlciA9IDAsXG4gIHRvOiBudW1iZXIgPSAzMFxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VzQnlVc2VyJztcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuXG4gIHJldHVybiBnZXRMaXN0Qnk8SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywge3VzZXJJZDogZm9ybWF0VXNlcklkfSwge1xuICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgbGltaXQ6IHtmcm9tLCB0b30sXG4gICAgY3VzdG9tUXVlcmllczogW1xuICAgICAgYExFVCB1c2VyID0gRklSU1QoRk9SIHUgSU4gdXNlcnMgRklMVEVSIHUuX2tleSA9PSBkb2MudXNlcklkIExJTUlUIDEgUkVUVVJOIHUpYFxuICAgIF0sXG4gICAgY3VzdG9tT2JqZWN0czogWyd1c2VyOnVzZXInXVxuICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2Zyb20sIHRvLCB1c2VySWR9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VDb3VudEJ5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZUNvdW50QnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0TWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIG1lZGlhID0gKFxuICAgICAgRk9SIGkgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiBpLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgICAgRklMVEVSIGkudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgUkVUVVJOIDFcbiAgICApXG4gICAgUkVUVVJOIHtjb3VudDogTEVOR1RIKG1lZGlhKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoe2NvdW50fSkgPT4gY291bnQpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aXRlbUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeUl0ZW0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICBvcHRpb25zOiBJbWFnZU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VzQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZSA9IG9wdGlvbnM/Lml0ZW1UeXBlID8gcGFyc2VDaGFyKFN0cmluZyhvcHRpb25zLml0ZW1UeXBlIHx8ICcnKSwgMzIpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uIDogdW5kZWZpbmVkO1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0TWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCwgZm9ybWF0SXRlbVR5cGUpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEltYWdlT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgbCBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBsLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICBMRVQgaSA9IERPQ1VNRU5UKGwuX3RvKVxuICAgICAgRklMVEVSIE5PVCBJU19OVUxMKGkpXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbC5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgU09SVCBpLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKGksIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgnaScpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvbixcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSk7XG5cbiAgICBjb25zdCBvd25lclVzZXJJZCA9IFN0cmluZyhsaXN0WzBdPy51c2VySWQgfHwgJycpO1xuICAgIGNvbnN0IGlzT3duZXIgPSAhIXNlc3Npb25Vc2VySWQgJiYgISFvd25lclVzZXJJZCAmJiBzZXNzaW9uVXNlcklkID09PSBvd25lclVzZXJJZDtcblxuICAgIGlmKGlzT3duZXIpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoKGltYWdlKSA9PiBub3JtYWxpemVJbWFnZVByaXZhY3koaW1hZ2U/LnByaXZhY3kpID09PSAncHVibGljJyk7XG4gICAgfVxuXG4gICAgbGV0IGNhblZpZXdGcmllbmRzID0gZmFsc2U7XG4gICAgbGV0IGNhblZpZXdWaXAgPSBmYWxzZTtcblxuICAgIGNvbnN0IG1lZGlhSXRlbUtleSA9IFN0cmluZygobGlzdFswXSBhcyBJbWFnZVR5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZ30pPy5fbWVkaWFJdGVtS2V5IHx8ICcnKTtcbiAgICBjb25zdCBtZWRpYUl0ZW1UeXBlID0gU3RyaW5nKChsaXN0WzBdIGFzIEltYWdlVHlwZSAmIHtfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30pPy5fbWVkaWFJdGVtVHlwZSB8fCAnJyk7XG5cbiAgICBpZihtZWRpYUl0ZW1UeXBlID09PSBDT0xMRUNUSU9OUy5QRVJTT05BUyAmJiBtZWRpYUl0ZW1LZXkpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBtZWRpYUl0ZW1LZXkpO1xuICAgICAgY2FuVmlld0ZyaWVuZHMgPSAhIXJlbGF0aW9uc2hpcD8uaXNGcmllbmQ7XG4gICAgICBjYW5WaWV3VmlwID0gYXdhaXQgaGFzU3Vic2NyaXB0aW9uVG9JdGVtKGNvbnRleHQsIG1lZGlhSXRlbUtleSwgQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0LmZpbHRlcigoaW1hZ2UpID0+IGNhblZpZXdJbWFnZShpbWFnZSwgc2Vzc2lvblVzZXJJZCwge2NhblZpZXdGcmllbmRzLCBjYW5WaWV3VmlwLCBpc093bmVyfSkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2l0ZW1JZCwgb3B0aW9uczogey4uLm9wdGlvbnMsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZX19LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlHcm91cCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGFyYW1zOiB7ZmlsdGVyczogUXVlcnlGaWx0ZXJbXSwgZ3JvdXBJZDogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9XG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeUdyb3VwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7ZmlsdGVycywgZ3JvdXBJZCwgZnJvbSwgdG99ID0gcGFyYW1zO1xuICBjb25zdCBmb3JtYXRHcm91cElkID0gcGFyc2VJZChncm91cElkKTtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG5cbiAgZmlsdGVyc1xuICAgIC5tYXAoKGZpbHRlcjogUXVlcnlGaWx0ZXIpID0+IHtcbiAgICAgIGNvbnN0IHtjb25kaXRpb25hbCwgbmFtZSwgdmFsdWV9ID0gZmlsdGVyO1xuICAgICAgbGV0IGZvcm1hdENvbmQgPSBjb25kaXRpb25hbDtcblxuICAgICAgaWYoY29uZGl0aW9uYWwgIT09ICc+PScgJiYgY29uZGl0aW9uYWwgIT09ICc8PScgJiYgY29uZGl0aW9uYWwgIT09ICc+JyAmJiBjb25kaXRpb25hbCAhPT0gJzwnKSB7XG4gICAgICAgIGZvcm1hdENvbmQgPSAnPT0nO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2gobmFtZSkge1xuICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgcmV0dXJuIGBwLmFkZGVkICR7Zm9ybWF0Q29uZH0gJHtwYXJzZU51bSh2YWx1ZSl9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIGdldEdyb3VwRGV0YWlscyhjb250ZXh0LCBmb3JtYXRHcm91cElkKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlKSA9PiB7XG4gICAgICBpZihncm91cC5wcml2YWN5ID09PSAncHVibGljJykge1xuICAgICAgICBmaWx0ZXJzLnB1c2goe2NvbmRpdGlvbmFsOiAnPT0nLCBuYW1lOiAnZ3JvdXBJZCcsIHZhbHVlOiBmb3JtYXRHcm91cElkfSk7XG4gICAgICAgIGNvbnN0IGZpbHRlclN0ciA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICAgIEZPUiBpIElOIEZMQVRURU4oXG4gICAgICAgICAgICBGT1IgcCBJTiBwb3N0c1xuICAgICAgICAgICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlclN0cil9XG4gICAgICAgICAgICAgIExFVCBpbWFnZXMgPSAoXG4gICAgICAgICAgICAgICAgRk9SIGksIGUgSU4gT1VUQk9VTkQgcC5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgICAgICAgICBGSUxURVIgZS50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgUkVUVVJOIGlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgICAgICAgICAgICBSRVRVUk4gaW1hZ2VzXG4gICAgICAgICAgKVxuICAgICAgICAgICAgU09SVCBpLmFkZGVkIERFU0NcbiAgICAgICAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgICAgICAgUkVUVVJOIGlcbiAgICAgICAgYDtcblxuICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgcGFyYW1zOiB7ZmlsdGVycywgZnJvbSwgZ3JvdXBJZCwgdG99LFxuICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzR3JvdXBlZChjb250ZXh0LCBzZXNzaW9uSWQsIGdyb3VwSWQpXG4gICAgICAgIC50aGVuKChncm91cGVkOiBHcm91cFVzZXIpID0+IHtcbiAgICAgICAgICBpZihncm91cGVkLmlzVmFsaWQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7Y29uZGl0aW9uYWw6ICc9PScsIG5hbWU6ICdncm91cElkJywgdmFsdWU6IGdyb3VwZWQuZ3JvdXBJZH0pO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyTGlzdCA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgICAgICAgICAgRk9SIHAgSU4gcG9zdFxuICAgICAgICAgICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyTGlzdCl9XG4gICAgICAgICAgICAgICAgRk9SIGYgSU4gcC5maWxlc1xuICAgICAgICAgICAgICAgICAgRklMVEVSIGYudHlwZSA9PSBcImltYWdlL2pwZWdcIiB8fCBmLnR5cGUgPT0gXCJpbWFnZS9wbmdcIlxuICAgICAgICAgICAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgICAgICAgICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgICAgICAgICAgICAgICAgUkVUVVJOIGZcbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICBwYXJhbXM6IHtmaWx0ZXJzLCBmcm9tLCBncm91cElkLCB0b30sXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5UmVhY3Rpb25zID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnNcbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlSW1hZ2VPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRJbWFnZU9wdGlvbmFsRmllbGRzKGZpZWxkcyk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZ1tdID0gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbXG4gICAgJ3IudHlwZSA9PSBcImltYWdlc1wiJyxcbiAgICBgUE9TSVRJT04oJHtKU09OLnN0cmluZ2lmeShmb3JtYXRSZWFjdGlvbnMpfSwgTE9XRVIoci5uYW1lKSlgXTtcblxuICAvLyBHZXQgZGF0YSBmcm9tIGRhdGFiYXNlXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGksIHIgSU4gT1VUQk9VTkQgJHtmb3JtYXRTZXNzaW9uSWR9IGhhc1JlYWN0aW9uXG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJpbWFnZXNcIn1cbiAgICAgIExFVCBtZWRpYSA9IEZJUlNUKFxuICAgICAgICBGT1Igb3duZXIsIGwgSU4gSU5CT1VORCBpLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgbC50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4ge1xuICAgICAgICAgICAgaXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgICBpdGVtVHlwZTogbC5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmNvbGxlY3Rpb25cbiAgICAgICAgICB9XG4gICAgICApXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbWVkaWEgJiYgbWVkaWEuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKX0sIG1lZGlhLml0ZW1LZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJCeS5qb2luKCcgJiYgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UoaSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdpJyl9LFxuICAgICAgICB7XG4gICAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VJZCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVRodW1iVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudGh1bWJVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgICAgfVxuICAgICAgKVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtvcHRpb25zLCByZWFjdGlvbnN9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0UGVyc29uYURvY0lkID0gKHBlcnNvbmFJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGVyc29uYURvY0lkID0gcGFyc2VBcmFuZ29JZChwZXJzb25hSWQpO1xuXG4gIGlmKHBlcnNvbmFEb2NJZCkge1xuICAgIHJldHVybiBwZXJzb25hRG9jSWQ7XG4gIH1cblxuICBjb25zdCBwZXJzb25hS2V5ID0gcGFyc2VJZChwZXJzb25hSWQpO1xuICByZXR1cm4gcGVyc29uYUtleSA/IGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke3BlcnNvbmFLZXl9YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5UGVyc29uYVJlYWN0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGVyc29uYUlkOiBzdHJpbmcgPSAnJyxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogSW1hZ2VPcHRpb25zXG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZUxpc3RCeVBlcnNvbmFSZWFjdGlvbnMnO1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnBlcnNvbmFJZCB8fCAnJyk7XG4gIGNvbnN0IHBlcnNvbmFEb2NJZCA9IGdldFBlcnNvbmFEb2NJZChwZXJzb25hSWQgfHwgc2Vzc2lvblBlcnNvbmFJZCk7XG4gIGNvbnN0IHJlYWN0aW9uTmFtZXMgPSBBcnJheS5pc0FycmF5KHJlYWN0aW9ucylcbiAgICA/IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpLnRvTG93ZXJDYXNlKCkpLmZpbHRlcihCb29sZWFuKVxuICAgIDogW107XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUltYWdlT3B0aW9ucyhvcHRpb25zKTtcblxuICBpZighcGVyc29uYURvY0lkIHx8ICFyZWFjdGlvbk5hbWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGltYWdlLCByZWFjdGlvbiBJTiBPVVRCT1VORCAke3BlcnNvbmFEb2NJZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJpbWFnZXNcIn1cbiAgICAgIExFVCBtZWRpYSA9IEZJUlNUKFxuICAgICAgICBGT1Igb3duZXIsIGxpbmsgSU4gSU5CT1VORCBpbWFnZS5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIGxpbmsudHlwZSA9PSBcImltYWdlXCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobGluay5fZnJvbSkua2V5LFxuICAgICAgICAgICAgaXRlbVR5cGU6IGxpbmsuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsaW5rLl9mcm9tKS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IG1lZGlhICYmIG1lZGlhLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7cGVyc29uYXNDb2xsZWN0aW9ufSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICBGSUxURVIgTE9XRVIocmVhY3Rpb24udHlwZSB8fCBcIlwiKSBJTiBbXCJpbWFnZVwiLCBcImltYWdlc1wiXVxuICAgICAgRklMVEVSIFBPU0lUSU9OKCR7cmVhY3Rpb25OYW1lc30sIExPV0VSKHJlYWN0aW9uLm5hbWUgfHwgcmVhY3Rpb24udmFsdWUgfHwgXCJcIikpXG4gICAgICBTT1JUIHJlYWN0aW9uLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKGltYWdlLCB7XG4gICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgIH0pXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7b3B0aW9ucywgcGVyc29uYUlkLCByZWFjdGlvbnN9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUJ5SWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaW1hZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlckdyb3VwID0ge1xuICAgIG9wZXJhdG9yOiAnQU5EJyxcbiAgICBmaWx0ZXJzOiBbe2ZpZWxkOiAnX2tleScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogZm9ybWF0SW1hZ2VJZH1dXG4gIH0gYXMgYW55O1xuXG4gIHJldHVybiBnZXRJdGVtQnk8SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgZmlsdGVycyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckltYWdlUGF0aCA9ICh1c2VySWQ6IHN0cmluZywgaW1hZ2VJZDogc3RyaW5nLCBpbWFnZVR5cGU6IHN0cmluZywgZGlyOiBzdHJpbmcgPSAnaW1hZ2VzJyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGZpbGVuYW1lID0gYCR7aW1hZ2VJZH0uJHtnZXRJbWFnZUV4dGVuc2lvbihpbWFnZVR5cGUpfWA7XG5cbiAgcmV0dXJuIGB1c2Vycy8ke3VzZXJJZH0vJHtkaXJ9LyR7ZmlsZW5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBJbWFnZVVybCA9ICh7XG4gIGJ1Y2tldCxcbiAgZGlyZWN0b3J5ID0gJ2ltYWdlcycsXG4gIGltYWdlSWQsXG4gIGltYWdlVHlwZSA9ICdqcGcnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZFxufTogSW1hZ2VVcmxEYXRhKTogc3RyaW5nID0+IHtcbiAgaWYoIXR5cGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZighaW1hZ2VJZCkge1xuICAgIGlmKGltYWdlVHlwZSA9PT0gJ3BlcnNvbmEnKSB7XG4gICAgICByZXR1cm4gYCR7Q29uZmlnLmdldCgnaW1hZ2UuZGVmYXVsdFVybCcpfS91c2Vyc19iay5qcGdgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7Q29uZmlnLmdldCgnaW1hZ2UuZGVmYXVsdFVybCcpfS91c2Vyc193aC5qcGdgO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCBpbWFnZU5hbWUgPSBpc1RodW1iID8gYCR7aW1hZ2VJZH0tdGguJHtpbWFnZVR5cGV9YCA6IGAke2ltYWdlSWR9LiR7aW1hZ2VUeXBlID09PSAncGVyc29uYScgfHwgaW1hZ2VUeXBlID09PSAnb3RoZXInID8gJ2pwZycgOiBpbWFnZVR5cGV9YDtcbiAgY29uc3QgaW1hZ2VVcmwgPSBDb25maWcuZ2V0KCdpbWFnZS51cmwnKSB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gO1xuXG4gIGlmKHR5cGUgPT09ICdhcHBzJykge1xuICAgIHJldHVybiBgJHtpbWFnZVVybH0vJHt0eXBlfS8ke2RpcmVjdG9yeX0vJHtpbWFnZU5hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBgJHtpbWFnZVVybH0vJHt0eXBlfS8ke3R5cGVJZH0vJHtkaXJlY3Rvcnl9LyR7aW1hZ2VOYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VVcmwgPSBhc3luYyAoe1xuICBidWNrZXQsXG4gIGltYWdlRGlyID0gJ2ltYWdlcycsXG4gIGltYWdlSWQsXG4gIGltYWdlVHlwZSA9ICdqcGcnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdXJsVHlwZSA9ICdwdWJsaWMnXG59OiBJbWFnZVVybERhdGEpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZighaW1hZ2VJZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBidWNrZXQgfHwgQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgY29uc3QgY29uZmlndXJlZEltYWdlVXJsID0gU3RyaW5nKENvbmZpZy5nZXQoJ2ltYWdlLnVybCcpIHx8ICcnKTtcbiAgY29uc3QgY29uZmlndXJlZEFwcFVybCA9IFN0cmluZyhDb25maWcuZ2V0KCdhcHAudXJsJykgfHwgJycpO1xuICBjb25zdCBwdWJsaWNCYXNlVXJsID0gY29uZmlndXJlZEFwcFVybFxuICAgID8gYGh0dHBzOi8vYm94LiR7Y29uZmlndXJlZEFwcFVybH1gXG4gICAgOiAoY29uZmlndXJlZEltYWdlVXJsIHx8IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vJHtidWNrZXROYW1lfWApO1xuICBjb25zdCBkZXZCYXNlVXJsID0gY29uZmlndXJlZEFwcFVybFxuICAgID8gYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9kZXYuJHtjb25maWd1cmVkQXBwVXJsfWBcbiAgICA6IChjb25maWd1cmVkSW1hZ2VVcmwgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YCk7XG5cbiAgLy8gQWx3YXlzIHVzZSBzaWduZWQgVVJMcyBmb3IgdGh1bWJuYWlsc1xuICBpZihpc1RodW1iKSB7XG4gICAgdXJsVHlwZSA9ICdzaWduZWQnO1xuICB9XG5cbiAgY29uc3QgdGh1bWJTdWZmaXggPSBpc1RodW1iID8gJy10aCcgOiAnJztcbiAgY29uc3QgaW1hZ2VLZXkgPSBgJHt0eXBlfS8ke3R5cGVJZH0vJHtpbWFnZURpcn0vJHtpbWFnZUlkfSR7dGh1bWJTdWZmaXh9LiR7aW1hZ2VUeXBlfWA7XG5cbiAgc3dpdGNoKHVybFR5cGUpIHtcbiAgICBjYXNlICdzaWduZWQnOiB7XG4gICAgICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0TmFtZSwgRXhwaXJlczogNjAgKiA2MCwgS2V5OiBpbWFnZUtleX0pO1xuICAgIH1cbiAgICBjYXNlICdwdWJsaWMnOiB7XG4gICAgICByZXR1cm4gYCR7cHVibGljQmFzZVVybH0vJHtpbWFnZUtleX1gO1xuICAgIH1cbiAgICBjYXNlICdkZXYnOiB7XG4gICAgICByZXR1cm4gYCR7ZGV2QmFzZVVybH0vJHtpbWFnZUtleX1gO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzaXplQW5kU2F2ZUltYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZUlkOiBzdHJpbmcsXG4gIGJ1ZmZlcjogQnVmZmVyLFxuICBmaWxlVHlwZTogc3RyaW5nID0gJ2ltYWdlL2pwZWcnLCBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdyZXNpemVTYXZlSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBpbWdXID0gQ29uZmlnLmdldCgnaW1hZ2UuaW1nU2l6ZScpO1xuICBjb25zdCBpbWdRID0gQ29uZmlnLmdldCgnaW1hZ2UuaW1nUXVhbGl0eScpO1xuICBjb25zdCBmb3JtYXQgPSAoZmlsZVR5cGUuc3BsaXQoJy8nKSlbMV0gfHwgJ2pwZWcnO1xuICBjb25zdCBzaGFycEZvcm1hdCA9IG5vcm1hbGl6ZUltYWdlRm9ybWF0KGZvcm1hdCk7XG4gIGxldCBpbWFnZU9wdGltaXplZEJ1ZmZlcjogQnVmZmVyID0gYnVmZmVyO1xuICBsZXQgdGh1bWJPcHRpbWl6ZWRCdWZmZXI6IEJ1ZmZlciA9IGJ1ZmZlcjtcbiAgbGV0IGltYWdlSWRlbnRpdHk6IEltYWdlVHlwZSA9IHtcbiAgICBmaWxlU2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICBmaWxlVHlwZTogZm9ybWF0LFxuICAgIGltYWdlSWRcbiAgfTtcblxuICB0cnkge1xuICAgIGltYWdlT3B0aW1pemVkQnVmZmVyID0gYXdhaXQgc2hhcnAoYnVmZmVyKVxuICAgICAgLnJvdGF0ZSgpXG4gICAgICAucmVzaXplKHtcbiAgICAgICAgZml0OiAnaW5zaWRlJyxcbiAgICAgICAgaGVpZ2h0OiBpbWdXLFxuICAgICAgICB3aWR0aDogaW1nVyxcbiAgICAgICAgd2l0aG91dEVubGFyZ2VtZW50OiB0cnVlXG4gICAgICB9KVxuICAgICAgLnRvRm9ybWF0KHNoYXJwRm9ybWF0LCB7cXVhbGl0eTogaW1nUX0pXG4gICAgICAudG9CdWZmZXIoKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ZpbGVUeXBlLCBpbWFnZUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGltYWdlT2JqOiBQdXRPYmplY3RDb21tYW5kSW5wdXQgPSB7XG4gICAgICBCb2R5OiBpbWFnZU9wdGltaXplZEJ1ZmZlcixcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgICAgS2V5OiBnZXRVc2VySW1hZ2VQYXRoKHNlc3Npb25JZCwgaW1hZ2VJZCwgZmlsZVR5cGUsICdpbWFnZXMnKVxuICAgIH07XG4gICAgYXdhaXQgczNQdXQoaW1hZ2VPYmopO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgW2ltYWdlTWV0YWRhdGEsIGltYWdlU3RhdHMsIHNvdXJjZU1ldGFkYXRhXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHNoYXJwKGltYWdlT3B0aW1pemVkQnVmZmVyKS5tZXRhZGF0YSgpLFxuICAgICAgc2hhcnAoaW1hZ2VPcHRpbWl6ZWRCdWZmZXIpLnN0YXRzKCksXG4gICAgICBzaGFycChidWZmZXIpLm1ldGFkYXRhKClcbiAgICBdKTtcbiAgICBjb25zdCB7YiwgZywgcn0gPSBpbWFnZVN0YXRzLmRvbWluYW50O1xuICAgIGNvbnN0IGNvbG9yID0gW3IsIGcsIGJdLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbiAgICBjb25zdCBleGlmTWV0YWRhdGEgPSBpbWFnZUV4aWZNZXRhZGF0YShzb3VyY2VNZXRhZGF0YS5leGlmKTtcblxuICAgIGltYWdlSWRlbnRpdHkgPSB7XG4gICAgICBjb2xvcixcbiAgICAgIGZpbGVTaXplOiBpbWFnZU9wdGltaXplZEJ1ZmZlci5sZW5ndGgsXG4gICAgICBmaWxlVHlwZTogZm9ybWF0LFxuICAgICAgaGVpZ2h0OiBpbWFnZU1ldGFkYXRhLmhlaWdodCB8fCAwLFxuICAgICAgaW1hZ2VJZCxcbiAgICAgIC4uLmV4aWZNZXRhZGF0YSxcbiAgICAgIG9yaWVudGF0aW9uOiBpbWFnZU1ldGFkYXRhLm9yaWVudGF0aW9uID8gU3RyaW5nKGltYWdlTWV0YWRhdGEub3JpZW50YXRpb24pIDogdW5kZWZpbmVkLFxuICAgICAgcXVhbGl0eTogaW1nUSxcbiAgICAgIHJlc29sdXRpb246IGltYWdlTWV0YWRhdGEuZGVuc2l0eSA/IGAke2ltYWdlTWV0YWRhdGEuZGVuc2l0eX0gcHBpYCA6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoOiBpbWFnZU1ldGFkYXRhLndpZHRoIHx8IDBcbiAgICB9O1xuXG4gICAgY29uc3QgdGhtVyA9IENvbmZpZy5nZXQoJ2ltYWdlLnRobVNpemUnKTtcbiAgICBjb25zdCB0aG1RID0gQ29uZmlnLmdldCgnaW1hZ2UudGhtUXVhbGl0eScpO1xuICAgIHRodW1iT3B0aW1pemVkQnVmZmVyID0gYXdhaXQgc2hhcnAoaW1hZ2VPcHRpbWl6ZWRCdWZmZXIpXG4gICAgICAucmVzaXplKHtcbiAgICAgICAgZml0OiAnY292ZXInLFxuICAgICAgICBoZWlnaHQ6IHRobVcsXG4gICAgICAgIHBvc2l0aW9uOiAnY2VudHJlJyxcbiAgICAgICAgd2lkdGg6IHRobVdcbiAgICAgIH0pXG4gICAgICAudG9Gb3JtYXQoc2hhcnBGb3JtYXQsIHtxdWFsaXR5OiB0aG1RfSlcbiAgICAgIC50b0J1ZmZlcigpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdGh1bWJPYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJvZHk6IHRodW1iT3B0aW1pemVkQnVmZmVyLFxuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgICBLZXk6IGdldFVzZXJJbWFnZVBhdGgoc2Vzc2lvbklkLCBpbWFnZUlkLCBmaWxlVHlwZSwgJ3RodW1icycpXG4gICAgfTtcbiAgICBhd2FpdCBzM1B1dCh0aHVtYk9iaik7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGltYWdlSWRlbnRpdHk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW1hZ2UgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlOiBJbWFnZVR5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEltYWdlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2ltYWdlSWQsIGRlc2NyaXB0aW9uLCBidWZmZXIsIGZpbGVUeXBlLCBpdGVtSWQsIGl0ZW1UeXBlLCBwcml2YWN5ID0gJ3B1YmxpYyd9ID0gaW1hZ2U7XG5cbiAgcmV0dXJuIHJlc2l6ZUFuZFNhdmVJbWFnZShjb250ZXh0LCBpbWFnZUlkLCBidWZmZXIsIGZpbGVUeXBlLCBzM09wdGlvbnMpXG4gICAgLnRoZW4oKHJlc2l6ZWRJbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICBjb25zdCBpbnNlcnQ6IEltYWdlVHlwZSA9IHtcbiAgICAgICAgLi4ucmVzaXplZEltYWdlLFxuICAgICAgICBfa2V5OiBpbWFnZUlkLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIHByaXZhY3k6IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShwcml2YWN5KSxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhZGRJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGluc2VydClcbiAgICAgICAgLnRoZW4oKHNhdmVkSW1hZ2U6IEltYWdlVHlwZSkgPT4gYWRkSW1hZ2VFZGdlKGNvbnRleHQsIHtcbiAgICAgICAgICBpbWFnZUlkLFxuICAgICAgICAgIGl0ZW1JZDogaXRlbUlkIHx8IHNlc3Npb25JZCxcbiAgICAgICAgICBpdGVtVHlwZTogcGFyc2VTdHJpbmcoaXRlbVR5cGUgfHwgJ3VzZXJzJywgMzIpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uLFxuICAgICAgICAgIHR5cGU6ICdpbWFnZSdcbiAgICAgICAgfSkudGhlbigoKSA9PiBzYXZlZEltYWdlKSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9SRVNJWkVcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEltYWdlRWRnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUVkZ2U6IEltYWdlRWRnZVR5cGUpOiBQcm9taXNlPG9iamVjdD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSW1hZ2VFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7aW1hZ2VJZCwgaXRlbUlkLCBpdGVtVHlwZX0gPSBpbWFnZUVkZ2U7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGhhc01lZGlhLWltYWdlLSR7aW1hZ2VJZH0tJHtpdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlKS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBnZXREb2NJZChmb3JtYXRJdGVtVHlwZSwge19rZXk6IGZvcm1hdEl0ZW1JZH0pO1xuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gcGFyc2VJZChpbWFnZUlkKTtcbiAgY29uc3QgZmlsZURvY0lkID0gYGltYWdlcy8ke2Zvcm1hdEltYWdlSWR9YDtcblxuICBjb25zdCBlZGdlOiBJbWFnZUVkZ2VUeXBlID0ge1xuICAgIF9mcm9tOiBpdGVtRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZmlsZURvY0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgaXRlbVR5cGUsXG4gICAgdHlwZTogJ2ltYWdlJ1xuICB9O1xuXG4gIGlmKGl0ZW1Eb2NJZCkge1xuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgLnRoZW4oKGZpbGVFZGdlKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5kb2N1bWVudChmaWxlRWRnZSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBlZGdlLFxuICAgICAgICAgIGZpbGVEb2NJZCxcbiAgICAgICAgICBpbWFnZUlkLFxuICAgICAgICAgIGl0ZW1Eb2NJZCxcbiAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgaXRlbVR5cGVcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVJbWFnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgYmFzZTY0ID0gJycsXG4gICAgYnVmZmVyOiBpbWFnZUJ1ZmZlcixcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpbWFnZUlkLFxuICAgIGl0ZW1JZCxcbiAgICBpdGVtVHlwZSxcbiAgICBmaWxlVHlwZSxcbiAgICBwcml2YWN5LFxuICAgIHVybCA9ICcnXG4gIH0gPSBpbWFnZTtcblxuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gaW1hZ2VJZCB8fCBjcmVhdGVIYXNoKGBpbWFnZS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGN1c3RvbVBhcmFtczogSW1hZ2VUeXBlID0ge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGltYWdlSWQ6IGZvcm1hdEltYWdlSWQsXG4gICAgcHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpLFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH07XG5cbiAgaWYoYmFzZTY0IHx8IGltYWdlQnVmZmVyKSB7XG4gICAgbGV0IGJ1ZmZlcjogQnVmZmVyID0gaW1hZ2VCdWZmZXI7XG5cbiAgICBpZihiYXNlNjQpIHtcbiAgICAgIGNvbnN0IGZvcm1hdEJhc2U2NCA9IGJhc2U2NC5zdWJzdHIoYmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZm9ybWF0QmFzZTY0LCAnYmFzZTY0Jyk7XG4gICAgfVxuXG4gICAgbGV0IHVwZGF0ZWRGaWxlVHlwZSA9IGZpbGVUeXBlO1xuXG4gICAgaWYoIWZpbGVUeXBlKSB7XG4gICAgICBjb25zdCB7ZmlsZVR5cGVGcm9tQnVmZmVyfSA9IGF3YWl0IGltcG9ydCgnZmlsZS10eXBlJyk7XG4gICAgICBjb25zdCB7bWltZX0gPSBhd2FpdCBmaWxlVHlwZUZyb21CdWZmZXIoYnVmZmVyKTtcbiAgICAgIHVwZGF0ZWRGaWxlVHlwZSA9IG1pbWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW1nUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICBidWZmZXIsXG4gICAgICBmaWxlVHlwZTogdXBkYXRlZEZpbGVUeXBlXG4gICAgfTtcblxuICAgIHJldHVybiBhZGRJbWFnZShjb250ZXh0LCBpbWdQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgIC50aGVuKChpbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNvbnN0IGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtcbiAgICAgICAgICAgIGltYWdlSWQ6IGZvcm1hdEltYWdlSWQsXG4gICAgICAgICAgICBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSxcbiAgICAgICAgICAgIHR5cGU6ICdpbWFnZSdcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBhZGRJbWFnZUVkZ2UoY29udGV4dCwgaW1hZ2VFZGdlKS50aGVuKCgpID0+IGltYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZih1cmwgIT09ICcnKSB7XG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gICAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgICAgLnRoZW4oKHJlczogSHR0cFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9SRVFVRVNUXG4gICAgICAgICAgfSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiAocmVzIGFzIEh0dHBSZXNwb25zZSkuYnVmZmVyKCkpXG4gICAgICAudGhlbigoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgaW1nUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgICAgICAgLi4uY3VzdG9tUGFyYW1zLFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBmaWxlVHlwZTogY29udGVudFR5cGVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gYWRkSW1hZ2UoY29udGV4dCwgaW1nUGFyYW1zLCBzM09wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKGltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBpbWFnZUVkZ2U6IEltYWdlRWRnZVR5cGUgPSB7aW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ2ltYWdlJ307XG4gICAgICAgICAgICAgIHJldHVybiBhZGRJbWFnZUVkZ2UoY29udGV4dCwgaW1hZ2VFZGdlKS50aGVuKCgpID0+IGltYWdlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiAnZmV0Y2hfZXJyb3InXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYoaW1hZ2VJZCkge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgIC4uLihkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8ge2Rlc2NyaXB0aW9ufSA6IHt9KSxcbiAgICAgIC4uLihwcml2YWN5ICE9PSB1bmRlZmluZWQgPyB7cHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpfSA6IHt9KVxuICAgIH07XG5cbiAgICByZXR1cm4gdXBkYXRlSXRlbTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCBmb3JtYXRJbWFnZUlkLCB1cGRhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlSW1hZ2UgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgaW1hZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBwYXJzZUlkKGltYWdlSWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBkZWxldGVJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGZvcm1hdEltYWdlSWQsIHtcbiAgICAgIGNhc2NhZGU6IFtFREdFUy5IQVNfTUVESUFdLFxuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZighaW1hZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIERlbGV0ZSBTMyBmaWxlc1xuICAgIGNvbnN0IHtfa2V5OiBpbWFnZUtleX0gPSBpbWFnZTtcbiAgICBjb25zdCBwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQgPSB7XG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBEZWxldGU6IHtcbiAgICAgICAgT2JqZWN0czogW1xuICAgICAgICAgIHtLZXk6IGB1c2Vycy8ke3Nlc3Npb25JZH0vaW1hZ2VzLyR7aW1hZ2VLZXl9LmpwZ2B9LFxuICAgICAgICAgIHtLZXk6IGB1c2Vycy8ke3Nlc3Npb25JZH0vdGh1bWJzLyR7aW1hZ2VLZXl9LmpwZ2B9XG4gICAgICAgIF0sXG4gICAgICAgIFF1aWV0OiB0cnVlXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBzM0RlbGV0ZUxpc3QocGFyYW1zKS50aGVuKCgpID0+IGltYWdlKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiZ2V0IiwiaHR0cEdldCIsInBhcnNlTnVtIiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiZXhpZlJlYWRlciIsInNoYXJwIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImxvZ0V4Y2VwdGlvbiIsImdldERvY0lkIiwiZ2V0TGltaXQiLCJzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlIiwidXNlRGIiLCJnZXRJbWFnZUV4dGVuc2lvbiIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImdldEdyb3VwRGV0YWlscyIsImlzR3JvdXBlZCIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsInMzRGVsZXRlTGlzdCIsInMzR2V0U2lnbmVkVXJsIiwiczNQdXQiLCJoYXNTdWJzY3JpcHRpb25Ub0l0ZW0iLCJldmVudENhdGVnb3J5IiwiaGFzUmVhY3Rpb25Db2xsZWN0aW9uIiwiSEFTX1JFQUNUSU9OIiwiaGFzTWVkaWFDb2xsZWN0aW9uIiwiSEFTX01FRElBIiwicGVyc29uYXNDb2xsZWN0aW9uIiwiUEVSU09OQVMiLCJNRURJQV9JVEVNX0NPTExFQ1RJT05TIiwiVVNFUlMiLCJQT1NUUyIsIkdST1VQUyIsImdldE1lZGlhSXRlbURvY0lkcyIsIml0ZW1JZCIsIml0ZW1UeXBlIiwiZG9jSWQiLCJpdGVtS2V5IiwiaW5jbHVkZXMiLCJtYXAiLCJjb2xsZWN0aW9uIiwibm9ybWFsaXplSW1hZ2VGb3JtYXQiLCJmb3JtYXQiLCJpbWFnZUV4aWZNZXRhZGF0YSIsImV4aWYiLCJtZXRhZGF0YSIsInRha2VuIiwiUGhvdG8iLCJEYXRlVGltZU9yaWdpbmFsIiwibWFrZSIsIkltYWdlIiwiTWFrZSIsIm1vZGVsIiwiTW9kZWwiLCJEYXRlIiwiZ2V0VGltZSIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZUltYWdlUHJpdmFjeSIsInByaXZhY3kiLCJTdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJjYW5WaWV3SW1hZ2UiLCJpbWFnZSIsInZpZXdlclVzZXJJZCIsImFjY2VzcyIsImlzT3duZXIiLCJ1c2VySWQiLCJjYW5WaWV3RnJpZW5kcyIsImNhblZpZXdWaXAiLCJwYXJzZUltYWdlT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwidG8iLCJ0eXBlIiwibGltaXQiLCJnZXRJbWFnZU9wdGlvbmFsRmllbGRzIiwiZmllbGRzIiwicmVkdWNlIiwic2VsZWN0cyIsImZpZWxkIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwiZ2V0SW1hZ2VMaXN0QnlVc2VyIiwiY29udGV4dCIsImFjdGlvbiIsImZvcm1hdFVzZXJJZCIsInNvcnQiLCJkaXJlY3Rpb24iLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsInBhcmFtcyIsInZhbHVlIiwiREFUQUJBU0VfRVJST1IiLCJnZXRJbWFnZUNvdW50QnlJdGVtIiwiZGF0YWJhc2VOYW1lIiwiaXRlbURvY0lkcyIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsIm5leHQiLCJjb3VudCIsImdldEltYWdlTGlzdEJ5SXRlbSIsInNlc3Npb24iLCJzZXNzaW9uVXNlcklkIiwiZm9ybWF0SXRlbVR5cGUiLCJzZWxlY3RPYmplY3RzIiwic2VsZWN0UXVlcmllcyIsImpvaW4iLCJsZW5ndGgiLCJsaXN0IiwiYWxsIiwib3duZXJVc2VySWQiLCJmaWx0ZXIiLCJtZWRpYUl0ZW1LZXkiLCJfbWVkaWFJdGVtS2V5IiwibWVkaWFJdGVtVHlwZSIsIl9tZWRpYUl0ZW1UeXBlIiwicmVsYXRpb25zaGlwIiwiaXNGcmllbmQiLCJnZXRJbWFnZUxpc3RCeUdyb3VwIiwic2Vzc2lvbklkIiwiZmlsdGVycyIsImdyb3VwSWQiLCJmb3JtYXRHcm91cElkIiwiY29uZGl0aW9uYWwiLCJuYW1lIiwiZm9ybWF0Q29uZCIsImdyb3VwIiwiZmlsdGVyU3RyIiwiZ3JvdXBlZCIsImlzVmFsaWQiLCJmaWx0ZXJMaXN0IiwiZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbnMiLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJyZWFjdGlvbk5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRQZXJzb25hRG9jSWQiLCJwZXJzb25hSWQiLCJwZXJzb25hRG9jSWQiLCJwZXJzb25hS2V5IiwiZ2V0SW1hZ2VMaXN0QnlQZXJzb25hUmVhY3Rpb25zIiwic2Vzc2lvblBlcnNvbmFJZCIsInJlYWN0aW9uTmFtZXMiLCJBcnJheSIsImlzQXJyYXkiLCJCb29sZWFuIiwiZ2V0SW1hZ2VCeUlkIiwiaW1hZ2VJZCIsImZvcm1hdEltYWdlSWQiLCJvcGVyYXRvciIsImdldFVzZXJJbWFnZVBhdGgiLCJpbWFnZVR5cGUiLCJkaXIiLCJmaWxlbmFtZSIsImdldEFwcEltYWdlVXJsIiwiYnVja2V0IiwiZGlyZWN0b3J5IiwiaXNUaHVtYiIsInR5cGVJZCIsImJ1Y2tldE5hbWUiLCJpbWFnZU5hbWUiLCJpbWFnZVVybCIsImdldEltYWdlVXJsIiwiaW1hZ2VEaXIiLCJ1cmxUeXBlIiwiY29uZmlndXJlZEltYWdlVXJsIiwiY29uZmlndXJlZEFwcFVybCIsInB1YmxpY0Jhc2VVcmwiLCJkZXZCYXNlVXJsIiwidGh1bWJTdWZmaXgiLCJpbWFnZUtleSIsIkJ1Y2tldCIsIkV4cGlyZXMiLCJLZXkiLCJyZXNpemVBbmRTYXZlSW1hZ2UiLCJidWZmZXIiLCJmaWxlVHlwZSIsInMzT3B0aW9ucyIsImltZ1ciLCJpbWdRIiwic3BsaXQiLCJzaGFycEZvcm1hdCIsImltYWdlT3B0aW1pemVkQnVmZmVyIiwidGh1bWJPcHRpbWl6ZWRCdWZmZXIiLCJpbWFnZUlkZW50aXR5IiwiZmlsZVNpemUiLCJyb3RhdGUiLCJyZXNpemUiLCJmaXQiLCJoZWlnaHQiLCJ3aWR0aCIsIndpdGhvdXRFbmxhcmdlbWVudCIsInRvRm9ybWF0IiwicXVhbGl0eSIsInRvQnVmZmVyIiwiSU1BR0VfU0FWRSIsImltYWdlT2JqIiwiQm9keSIsIkNvbnRlbnRUeXBlIiwiaW1hZ2VNZXRhZGF0YSIsImltYWdlU3RhdHMiLCJzb3VyY2VNZXRhZGF0YSIsIlByb21pc2UiLCJzdGF0cyIsImIiLCJnIiwiciIsImRvbWluYW50IiwiY29sb3IiLCJ0b1N0cmluZyIsInBhZFN0YXJ0IiwiZXhpZk1ldGFkYXRhIiwib3JpZW50YXRpb24iLCJyZXNvbHV0aW9uIiwiZGVuc2l0eSIsInRobVciLCJ0aG1RIiwicG9zaXRpb24iLCJ0aHVtYk9iaiIsImFkZEltYWdlIiwiZGVzY3JpcHRpb24iLCJyZXNpemVkSW1hZ2UiLCJpbnNlcnQiLCJfa2V5Iiwic2F2ZWRJbWFnZSIsImFkZEltYWdlRWRnZSIsIklNQUdFX1JFU0laRSIsImltYWdlRWRnZSIsIm5vdyIsImVkZ2VJZCIsImZvcm1hdEl0ZW1JZCIsIml0ZW1Eb2NJZCIsImZpbGVEb2NJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImFkZGVkIiwic2F2ZSIsInJldHVybk5ldyIsImZpbGVFZGdlIiwiZG9jdW1lbnQiLCJ1cGRhdGVJbWFnZSIsImJhc2U2NCIsImltYWdlQnVmZmVyIiwidXJsIiwiY3VzdG9tUGFyYW1zIiwiZm9ybWF0QmFzZTY0Iiwic3Vic3RyIiwiaW5kZXhPZiIsIkJ1ZmZlciIsInVwZGF0ZWRGaWxlVHlwZSIsImZpbGVUeXBlRnJvbUJ1ZmZlciIsIm1pbWUiLCJpbWdQYXJhbXMiLCJjb250ZW50VHlwZSIsInJlcyIsInN0YXR1cyIsIklNQUdFX1JFUVVFU1QiLCJoZWFkZXJzIiwidXBkYXRlIiwiZGVsZXRlSW1hZ2UiLCJjYXNjYWRlIiwib3duZXJzaGlwIiwiRGVsZXRlIiwiT2JqZWN0cyIsIlF1aWV0Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRCxTQUFRQSxPQUFPQyxPQUFPLFFBQU8sb0JBQW9CO0FBQ2pELFNBQVFDLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3hHLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUMvQyxPQUFPQyxnQkFBZ0IsY0FBYztBQUNyQyxPQUFPQyxXQUFXLFFBQVE7QUFFMUIsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsV0FBVyxFQUFFQyxLQUFLLFFBQU8sOEJBQThCO0FBQy9ELFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxFQUFFQyxZQUFZLFFBQU8sNkJBQTZCO0FB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
|
package/lib/actions/index.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/
|
|
5
5
|
export * from './apps.js';
|
|
6
|
+
export * from './analytics.js';
|
|
6
7
|
export * from './connections.js';
|
|
7
8
|
export * from './conversations.js';
|
|
8
9
|
export * from './crm.js';
|
|
9
10
|
export * from './dynamodb.js';
|
|
10
11
|
export * from './email.js';
|
|
11
12
|
export * from './files.js';
|
|
13
|
+
export * from './flags.js';
|
|
12
14
|
export * from './groups.js';
|
|
13
15
|
export * from './images.js';
|
|
14
16
|
export * from './ios.js';
|
|
@@ -28,4 +30,3 @@ export * from './subscriptions.js';
|
|
|
28
30
|
export * from './tags.js';
|
|
29
31
|
export * from './users.js';
|
|
30
32
|
export * from './videos.js';
|
|
31
|
-
export * from './websockets.js';
|
package/lib/actions/index.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/ export * from './apps.js';
|
|
5
|
+
export * from './analytics.js';
|
|
5
6
|
export * from './connections.js';
|
|
6
7
|
export * from './conversations.js';
|
|
7
8
|
export * from './crm.js';
|
|
8
9
|
export * from './dynamodb.js';
|
|
9
10
|
export * from './email.js';
|
|
10
11
|
export * from './files.js';
|
|
12
|
+
export * from './flags.js';
|
|
11
13
|
export * from './groups.js';
|
|
12
14
|
export * from './images.js';
|
|
13
15
|
export * from './ios.js';
|
|
@@ -27,6 +29,5 @@ export * from './subscriptions.js';
|
|
|
27
29
|
export * from './tags.js';
|
|
28
30
|
export * from './users.js';
|
|
29
31
|
export * from './videos.js';
|
|
30
|
-
export * from './websockets.js';
|
|
31
32
|
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vYXBwcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FuYWx5dGljcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Nvbm5lY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udmVyc2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NybS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2R5bmFtb2RiLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZW1haWwuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZsYWdzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JvdXBzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaW1hZ2VzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vaW9zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9jYXRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9ub3RpZmljYXRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGF5bWVudHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wb3N0cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVhY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcnVtLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vczMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2guanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zbXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0aXN0aWNzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Vic2NyaXB0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RhZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91c2Vycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZGVvcy5qcyc7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsY0FBYyxZQUFZO0FBQzFCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsV0FBVztBQUN6QixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGFBQWE7QUFDM0IsY0FBYyxhQUFhO0FBQzNCLGNBQWMsYUFBYTtBQUMzQixjQUFjLGNBQWM7QUFDNUIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsV0FBVztBQUN6QixjQUFjLGlCQUFpQjtBQUMvQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGFBQWE7QUFDM0IsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsVUFBVTtBQUN4QixjQUFjLGNBQWM7QUFDNUIsY0FBYyxXQUFXO0FBQ3pCLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsWUFBWTtBQUMxQixjQUFjLGFBQWE7QUFDM0IsY0FBYyxjQUFjIn0=
|