@nlabs/reaktor 0.10.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env +1 -0
- package/.env.example +1 -0
- package/DATABASE_I18N_GUIDE.md +434 -0
- package/TEST_UTILITIES_GUIDE.md +360 -0
- package/coverage/index.html +46 -76
- package/index.js +1 -1
- package/jest.config.js +17 -0
- package/jest.setup.js +36 -0
- package/lex.config.cjs +2 -2
- package/lib/actions/apps.js +17 -239
- package/lib/actions/connections.js +6 -89
- package/lib/actions/content.js +17 -0
- package/lib/actions/conversations.js +19 -336
- package/lib/actions/dynamodb.js +2 -150
- package/lib/actions/email.js +2 -152
- package/lib/actions/files.js +5 -283
- package/lib/actions/groups.js +19 -259
- package/lib/actions/images.js +31 -700
- package/lib/actions/index.js +2 -66
- package/lib/actions/ios.js +9 -162
- package/lib/actions/locations.js +7 -122
- package/lib/actions/messages.js +21 -196
- package/lib/actions/notifications.js +2 -59
- package/lib/actions/payments.js +11 -464
- package/lib/actions/posts.js +75 -527
- package/lib/actions/profiles.js +8 -0
- package/lib/actions/reactions.js +25 -312
- package/lib/actions/s3.js +2 -133
- package/lib/actions/search.js +5 -90
- package/lib/actions/sms.js +2 -108
- package/lib/actions/statistics.js +6 -60
- package/lib/actions/subscriptions.js +12 -0
- package/lib/actions/tags.js +19 -287
- package/lib/actions/users.js +64 -764
- package/lib/actions/websockets.js +14 -158
- package/lib/adapters/arangoAdapter.js +2 -46
- package/lib/adapters/contentAdapter.js +2 -0
- package/lib/adapters/fileAdapter.js +2 -76
- package/lib/adapters/imageAdapter.js +2 -40
- package/lib/adapters/messageAdapter.js +2 -49
- package/lib/adapters/postAdapter.js +2 -70
- package/lib/adapters/reaktorAdapter.js +2 -44
- package/lib/adapters/tagAdapter.js +2 -50
- package/lib/adapters/userAdapter.js +2 -115
- package/lib/config.js +2 -125
- package/lib/handlers/graphqlHandler.js +2 -0
- package/lib/index.js +2 -66
- package/lib/lambdas/actions/websockets.js +14 -116
- package/lib/lambdas/authorizer.js +2 -67
- package/lib/lambdas/connection.js +2 -91
- package/lib/lambdas/utils/message.js +2 -42
- package/lib/lambdas/utils/websocket.js +2 -105
- package/lib/mocks/conversation.js +2 -35
- package/lib/mocks/file.js +2 -38
- package/lib/mocks/group.js +2 -47
- package/lib/mocks/image.js +2 -44
- package/lib/mocks/post.js +2 -55
- package/lib/mocks/tag.js +2 -37
- package/lib/mocks/user.js +2 -88
- package/lib/mutations/index.js +2 -26
- package/lib/mutations/locations.integration.js +2 -0
- package/lib/mutations/locations.js +2 -44
- package/lib/mutations/messages.integration.js +2 -0
- package/lib/mutations/messages.js +2 -86
- package/lib/mutations/posts.integration.js +2 -0
- package/lib/mutations/posts.js +2 -53
- package/lib/mutations/profiles.integration.js +2 -0
- package/lib/mutations/profiles.js +2 -0
- package/lib/mutations/reactions.integration.js +2 -0
- package/lib/mutations/reactions.js +2 -51
- package/lib/mutations/statistics.integration.js +2 -0
- package/lib/mutations/statistics.js +2 -39
- package/lib/mutations/subscriptions.integration.js +2 -0
- package/lib/mutations/subscriptions.js +2 -56
- package/lib/mutations/tags.integration.js +2 -0
- package/lib/mutations/tags.js +2 -120
- package/lib/mutations/users.integration.js +2 -0
- package/lib/mutations/users.js +2 -116
- package/lib/objectTypes/app.js +2 -173
- package/lib/objectTypes/bankAccount.js +2 -76
- package/lib/objectTypes/connection.js +2 -48
- package/lib/objectTypes/conversation.js +2 -77
- package/lib/objectTypes/creditCard.js +2 -86
- package/lib/objectTypes/document.js +2 -46
- package/lib/objectTypes/error.js +2 -46
- package/lib/objectTypes/external.js +2 -74
- package/lib/objectTypes/file.js +2 -100
- package/lib/objectTypes/filter.js +2 -43
- package/lib/objectTypes/group.js +2 -123
- package/lib/objectTypes/iapSubscription.js +2 -40
- package/lib/objectTypes/image.js +2 -129
- package/lib/objectTypes/index.js +2 -68
- package/lib/objectTypes/location.js +2 -109
- package/lib/objectTypes/message.js +2 -96
- package/lib/objectTypes/passcode.js +2 -42
- package/lib/objectTypes/plan.js +2 -95
- package/lib/objectTypes/post.js +2 -125
- package/lib/objectTypes/profile.js +2 -0
- package/lib/objectTypes/reaction.js +2 -61
- package/lib/objectTypes/relation.js +2 -49
- package/lib/objectTypes/search.js +2 -72
- package/lib/objectTypes/statistics.js +2 -39
- package/lib/objectTypes/subscription.js +2 -117
- package/lib/objectTypes/tag.js +2 -65
- package/lib/objectTypes/user.js +2 -144
- package/lib/queries/index.js +2 -33
- package/lib/queries/locations.integration.js +2 -0
- package/lib/queries/locations.js +2 -45
- package/lib/queries/messages.integration.js +2 -0
- package/lib/queries/messages.js +2 -52
- package/lib/queries/posts.integration.js +2 -0
- package/lib/queries/posts.js +2 -154
- package/lib/queries/reactions.integration.js +2 -0
- package/lib/queries/reactions.js +2 -56
- package/lib/queries/statistics.js +2 -39
- package/lib/queries/subscriptions.js +2 -44
- package/lib/queries/tags.integration.js +2 -0
- package/lib/queries/tags.js +2 -75
- package/lib/queries/users.integration.js +2 -0
- package/lib/queries/users.js +2 -64
- package/lib/templates/email/layout.js +3 -25
- package/lib/templates/email/passwordForgot.js +3 -25
- package/lib/templates/email/passwordRecovery.js +3 -25
- package/lib/templates/email/verifyEmail.js +3 -25
- package/lib/templates/email/welcome.js +3 -25
- package/lib/templates/sms/passwordForgot.js +2 -24
- package/lib/templates/sms/passwordRecovery.js +2 -24
- package/lib/templates/sms/verifyEmail.js +2 -24
- package/lib/templates/sms/verifyPhone.js +2 -24
- package/lib/templates/sms/welcome.js +2 -24
- package/lib/types/apps.types.js +2 -32
- package/lib/types/arangodb.types.js +1 -16
- package/lib/types/auth.types.js +1 -16
- package/lib/types/connections.types.js +1 -16
- package/lib/types/content.types.js +1 -0
- package/lib/types/conversations.types.js +1 -16
- package/lib/types/email.types.js +1 -16
- package/lib/types/error.types.js +2 -44
- package/lib/types/files.types.js +1 -16
- package/lib/types/google.types.js +1 -16
- package/lib/types/groups.types.js +1 -16
- package/lib/types/images.types.js +1 -16
- package/lib/types/index.js +2 -60
- package/lib/types/locations.types.js +1 -16
- package/lib/types/messages.types.js +1 -16
- package/lib/types/notifications.types.js +1 -16
- package/lib/types/payments.types.js +1 -16
- package/lib/types/posts.types.js +1 -16
- package/lib/types/profiles.types.js +1 -0
- package/lib/types/statistics.types.js +1 -16
- package/lib/types/tags.types.js +1 -16
- package/lib/types/users.types.js +1 -16
- package/lib/types/websockets.types.js +1 -16
- package/lib/utils/adapterUtils.js +2 -45
- package/lib/utils/analyticsUtils.js +2 -72
- package/lib/utils/arangodbUtils.js +5 -163
- package/lib/utils/authUtils.js +2 -0
- package/lib/utils/contextUtils.js +2 -0
- package/lib/utils/dbI18n.example.js +6 -0
- package/lib/utils/dbI18n.js +2 -0
- package/lib/utils/googleTranslate.js +2 -0
- package/lib/utils/graphqlUtils.js +2 -0
- package/lib/utils/index.js +2 -30
- package/lib/utils/languageDetection.js +2 -0
- package/lib/utils/localeUtils.example.js +2 -0
- package/lib/utils/localeUtils.js +2 -0
- package/lib/utils/middlewareUtils.js +2 -0
- package/lib/utils/sessionUtils.js +2 -0
- package/lib/utils/stripeUtils.js +2 -43
- package/lib/utils/templateUtils.js +2 -0
- package/lib/utils/testUtils.js +2 -0
- package/lib/utils/translationQueue.example.js +2 -0
- package/lib/utils/translationQueue.js +2 -0
- package/package.json +27 -24
- package/.prettierrc.js +0 -4
- package/lib/actions/apps.d.ts +0 -25
- package/lib/actions/connections.d.ts +0 -4
- package/lib/actions/conversations.d.ts +0 -14
- package/lib/actions/dynamodb.d.ts +0 -8
- package/lib/actions/email.d.ts +0 -5
- package/lib/actions/files.d.ts +0 -19
- package/lib/actions/groups.d.ts +0 -14
- package/lib/actions/images.d.ts +0 -26
- package/lib/actions/index.d.ts +0 -23
- package/lib/actions/ios.d.ts +0 -7
- package/lib/actions/locations.d.ts +0 -6
- package/lib/actions/messages.d.ts +0 -14
- package/lib/actions/notifications.d.ts +0 -5
- package/lib/actions/payments.d.ts +0 -10
- package/lib/actions/personas.d.ts +0 -3
- package/lib/actions/personas.js +0 -110
- package/lib/actions/posts.d.ts +0 -22
- package/lib/actions/reactions.d.ts +0 -30
- package/lib/actions/s3.d.ts +0 -7
- package/lib/actions/search.d.ts +0 -3
- package/lib/actions/sms.d.ts +0 -9
- package/lib/actions/statistics.d.ts +0 -3
- package/lib/actions/subscription.d.ts +0 -7
- package/lib/actions/subscription.js +0 -208
- package/lib/actions/tags.d.ts +0 -34
- package/lib/actions/users.d.ts +0 -72
- package/lib/actions/websockets.d.ts +0 -20
- package/lib/adapters/arangoAdapter.d.ts +0 -2
- package/lib/adapters/fileAdapter.d.ts +0 -3
- package/lib/adapters/imageAdapter.d.ts +0 -2
- package/lib/adapters/messageAdapter.d.ts +0 -2
- package/lib/adapters/postAdapter.d.ts +0 -2
- package/lib/adapters/reaktorAdapter.d.ts +0 -6
- package/lib/adapters/tagAdapter.d.ts +0 -2
- package/lib/adapters/userAdapter.d.ts +0 -2
- package/lib/config.d.ts +0 -20
- package/lib/index.d.ts +0 -12
- package/lib/lambdas/actions/websockets.d.ts +0 -7
- package/lib/lambdas/authorizer.d.ts +0 -20
- package/lib/lambdas/connection.d.ts +0 -12
- package/lib/lambdas/utils/message.d.ts +0 -1
- package/lib/lambdas/utils/websocket.d.ts +0 -7
- package/lib/mocks/conversation.d.ts +0 -8
- package/lib/mocks/file.d.ts +0 -11
- package/lib/mocks/group.d.ts +0 -17
- package/lib/mocks/image.d.ts +0 -3
- package/lib/mocks/post.d.ts +0 -38
- package/lib/mocks/tag.d.ts +0 -2
- package/lib/mocks/user.d.ts +0 -4
- package/lib/mutations/index.d.ts +0 -3
- package/lib/mutations/locations.d.ts +0 -2
- package/lib/mutations/messages.d.ts +0 -2
- package/lib/mutations/personas.d.ts +0 -2
- package/lib/mutations/personas.js +0 -100
- package/lib/mutations/posts.d.ts +0 -2
- package/lib/mutations/reactions.d.ts +0 -2
- package/lib/mutations/statistics.d.ts +0 -2
- package/lib/mutations/subscriptions.d.ts +0 -2
- package/lib/mutations/tags.d.ts +0 -2
- package/lib/mutations/users.d.ts +0 -1
- package/lib/objectTypes/app.d.ts +0 -3
- package/lib/objectTypes/bankAccount.d.ts +0 -1
- package/lib/objectTypes/connection.d.ts +0 -1
- package/lib/objectTypes/conversation.d.ts +0 -2
- package/lib/objectTypes/creditCard.d.ts +0 -1
- package/lib/objectTypes/document.d.ts +0 -1
- package/lib/objectTypes/error.d.ts +0 -1
- package/lib/objectTypes/external.d.ts +0 -1
- package/lib/objectTypes/file.d.ts +0 -2
- package/lib/objectTypes/filter.d.ts +0 -1
- package/lib/objectTypes/group.d.ts +0 -3
- package/lib/objectTypes/iapSubscription.d.ts +0 -1
- package/lib/objectTypes/image.d.ts +0 -2
- package/lib/objectTypes/index.d.ts +0 -24
- package/lib/objectTypes/location.d.ts +0 -2
- package/lib/objectTypes/message.d.ts +0 -2
- package/lib/objectTypes/passcode.d.ts +0 -1
- package/lib/objectTypes/persona.d.ts +0 -3
- package/lib/objectTypes/persona.js +0 -87
- package/lib/objectTypes/plan.d.ts +0 -2
- package/lib/objectTypes/post.d.ts +0 -2
- package/lib/objectTypes/reaction.d.ts +0 -2
- package/lib/objectTypes/relation.d.ts +0 -1
- package/lib/objectTypes/search.d.ts +0 -1
- package/lib/objectTypes/statistics.d.ts +0 -1
- package/lib/objectTypes/subscription.d.ts +0 -2
- package/lib/objectTypes/tag.d.ts +0 -2
- package/lib/objectTypes/user.d.ts +0 -4
- package/lib/queries/index.d.ts +0 -3
- package/lib/queries/locations.d.ts +0 -2
- package/lib/queries/messages.d.ts +0 -2
- package/lib/queries/posts.d.ts +0 -2
- package/lib/queries/reactions.d.ts +0 -2
- package/lib/queries/statistics.d.ts +0 -2
- package/lib/queries/subscriptions.d.ts +0 -2
- package/lib/queries/tags.d.ts +0 -2
- package/lib/queries/users.d.ts +0 -1
- package/lib/templates/email/layout.d.ts +0 -2
- package/lib/templates/email/passwordForgot.d.ts +0 -2
- package/lib/templates/email/passwordRecovery.d.ts +0 -2
- package/lib/templates/email/verifyEmail.d.ts +0 -2
- package/lib/templates/email/welcome.d.ts +0 -2
- package/lib/templates/sms/passwordForgot.d.ts +0 -2
- package/lib/templates/sms/passwordRecovery.d.ts +0 -2
- package/lib/templates/sms/verifyEmail.d.ts +0 -2
- package/lib/templates/sms/verifyPhone.d.ts +0 -2
- package/lib/templates/sms/welcome.d.ts +0 -2
- package/lib/types/apps.types.d.ts +0 -46
- package/lib/types/arangodb.types.d.ts +0 -34
- package/lib/types/auth.types.d.ts +0 -9
- package/lib/types/connections.types.d.ts +0 -5
- package/lib/types/conversations.types.d.ts +0 -27
- package/lib/types/email.types.d.ts +0 -13
- package/lib/types/error.types.d.ts +0 -20
- package/lib/types/files.types.d.ts +0 -23
- package/lib/types/google.types.d.ts +0 -29
- package/lib/types/groups.types.d.ts +0 -18
- package/lib/types/images.types.d.ts +0 -52
- package/lib/types/index.d.ts +0 -20
- package/lib/types/locations.types.d.ts +0 -18
- package/lib/types/messages.types.d.ts +0 -16
- package/lib/types/notifications.types.d.ts +0 -19
- package/lib/types/payments.types.d.ts +0 -109
- package/lib/types/personas.types.d.ts +0 -32
- package/lib/types/personas.types.js +0 -16
- package/lib/types/posts.types.d.ts +0 -28
- package/lib/types/statistics.types.d.ts +0 -3
- package/lib/types/tags.types.d.ts +0 -15
- package/lib/types/users.types.d.ts +0 -79
- package/lib/types/websockets.types.d.ts +0 -18
- package/lib/utils/adapterUtils.d.ts +0 -1
- package/lib/utils/analyticsUtils.d.ts +0 -21
- package/lib/utils/arangodbUtils.d.ts +0 -66
- package/lib/utils/auth.d.ts +0 -21
- package/lib/utils/auth.js +0 -57
- package/lib/utils/index.d.ts +0 -5
- package/lib/utils/session.d.ts +0 -18
- package/lib/utils/session.js +0 -60
- package/lib/utils/stripeUtils.d.ts +0 -3
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{createHash as U,parseChar as E,parseId as q,parseVarChar as e}from"@nlabs/utils";import{aql as A}from"arangojs";import{useDb as I}from"../utils/arangodbUtils";const R=(N,n)=>{const{databaseName:P}=N,{city:d,country:t,street1:i,street2:r,zip:f,state:u,timezone:o,firstName:s,lastName:a,gender:p,name:m,userId:y}=n,l={city:d!==void 0?e(d,32):void 0,country:t!==void 0?e(t,32):void 0,firstName:s!==void 0?e(s,32):void 0,gender:p!==void 0?E(p,1).toUpperCase():void 0,lastName:a!==void 0?e(a,32):void 0,modified:Date.now(),name:m!==void 0?e(m,32):void 0,state:u!==void 0?e(u,2):void 0,street1:i!==void 0?e(i,32):void 0,street2:r!==void 0?e(r,32):void 0,timezone:o!==void 0?e(o,32):void 0,zip:f!==void 0?e(f,15):void 0},c={...l,_key:U(y),added:Date.now(),userId:q(y)},T=A`UPSERT {sub: ${c._key}}
|
|
2
|
+
INSERT ${c}
|
|
3
|
+
UPDATE ${l}
|
|
4
|
+
IN profiles RETURN NEW`;return I(P).query(T).then(z=>z.next())},$=(N,n)=>{const{databaseName:P}=N,{city:d,country:t,street1:i,street2:r,zip:f,state:u,timezone:o,firstName:s,lastName:a,gender:p,name:m,userId:y}=n,l={city:d!==void 0?e(d,32):void 0,country:t!==void 0?e(t,32):void 0,firstName:s!==void 0?e(s,32):void 0,gender:p!==void 0?E(p,1).toUpperCase():void 0,lastName:a!==void 0?e(a,32):void 0,modified:Date.now(),name:m!==void 0?e(m,32):void 0,state:u!==void 0?e(u,2):void 0,street1:i!==void 0?e(i,32):void 0,street2:r!==void 0?e(r,32):void 0,timezone:o!==void 0?e(o,32):void 0,userId:y!==void 0?q(y):void 0,zip:f!==void 0?e(f,15):void 0},c=A`UPDATE {sub: ${n._key}}
|
|
5
|
+
INSERT ${n}
|
|
6
|
+
UPDATE ${l}
|
|
7
|
+
IN profiles RETURN NEW`;return I(P).query(c).then(T=>T.next())};export{R as addProfile,$ as updateProfile};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcHJvZmlsZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuXG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHQsIFByb2ZpbGVUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmV4cG9ydCBjb25zdCBhZGRQcm9maWxlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHByb2ZpbGU6IFByb2ZpbGVUeXBlKTogUHJvbWlzZTxQcm9maWxlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgc3RyZWV0MSxcbiAgICBzdHJlZXQyLFxuICAgIHppcCxcbiAgICBzdGF0ZSxcbiAgICB0aW1lem9uZSxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgZ2VuZGVyLFxuICAgIG5hbWUsXG4gICAgdXNlcklkXG4gIH0gPSBwcm9maWxlO1xuXG4gIGNvbnN0IHVwZGF0ZTogUHJvZmlsZVR5cGUgPSB7XG4gICAgY2l0eTogY2l0eSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGNpdHksIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBjb3VudHJ5OiBjb3VudHJ5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY291bnRyeSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGZpcnN0TmFtZTogZmlyc3ROYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoZmlyc3ROYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgZ2VuZGVyOiBnZW5kZXIgIT09IHVuZGVmaW5lZCA/IHBhcnNlQ2hhcihnZW5kZXIsIDEpLnRvVXBwZXJDYXNlKCkgOiB1bmRlZmluZWQsXG4gICAgbGFzdE5hbWU6IGxhc3ROYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIobGFzdE5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBuYW1lOiBuYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIobmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHN0YXRlOiBzdGF0ZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0YXRlLCAyKSA6IHVuZGVmaW5lZCxcbiAgICBzdHJlZXQxOiBzdHJlZXQxICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RyZWV0MSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDI6IHN0cmVldDIgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQyLCAzMikgOiB1bmRlZmluZWQsXG4gICAgdGltZXpvbmU6IHRpbWV6b25lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIodGltZXpvbmUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB6aXA6IHppcCAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHppcCwgMTUpIDogdW5kZWZpbmVkXG4gIH07XG5cbiAgY29uc3QgaW5zZXJ0OiBQcm9maWxlVHlwZSA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogY3JlYXRlSGFzaCh1c2VySWQpLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIHVzZXJJZDogcGFyc2VJZCh1c2VySWQpXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge3N1YjogJHtpbnNlcnQuX2tleX19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBwcm9maWxlcyBSRVRVUk4gTkVXYDtcbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVByb2ZpbGUgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcHJvZmlsZTogUHJvZmlsZVR5cGUpOiBQcm9taXNlPFByb2ZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBzdHJlZXQxLFxuICAgIHN0cmVldDIsXG4gICAgemlwLFxuICAgIHN0YXRlLFxuICAgIHRpbWV6b25lLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBnZW5kZXIsXG4gICAgbmFtZSxcbiAgICB1c2VySWRcbiAgfSA9IHByb2ZpbGU7XG5cbiAgY29uc3QgdXBkYXRlOiBQcm9maWxlVHlwZSA9IHtcbiAgICBjaXR5OiBjaXR5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY2l0eSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGNvdW50cnk6IGNvdW50cnkgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihjb3VudHJ5LCAzMikgOiB1bmRlZmluZWQsXG4gICAgZmlyc3ROYW1lOiBmaXJzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihmaXJzdE5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBnZW5kZXI6IGdlbmRlciAhPT0gdW5kZWZpbmVkID8gcGFyc2VDaGFyKGdlbmRlciwgMSkudG9VcHBlckNhc2UoKSA6IHVuZGVmaW5lZCxcbiAgICBsYXN0TmFtZTogbGFzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihsYXN0TmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihuYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHN0YXRlICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RhdGUsIDIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDE6IHN0cmVldDEgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQxLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RyZWV0Mjogc3RyZWV0MiAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB0aW1lem9uZTogdGltZXpvbmUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih0aW1lem9uZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHVzZXJJZDogdXNlcklkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKHVzZXJJZCkgOiB1bmRlZmluZWQsXG4gICAgemlwOiB6aXAgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih6aXAsIDE1KSA6IHVuZGVmaW5lZFxuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFIHtzdWI6ICR7cHJvZmlsZS5fa2V5fX1cbiAgICBJTlNFUlQgJHtwcm9maWxlfVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBwcm9maWxlcyBSRVRVUk4gTkVXYDtcbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxPQUFRLGNBQUFBLEVBQVksYUFBQUMsRUFBVyxXQUFBQyxFQUFTLGdCQUFBQyxNQUFtQixlQUMzRCxPQUFRLE9BQUFDLE1BQVUsV0FFbEIsT0FBUSxTQUFBQyxNQUFZLHlCQUtiLE1BQU1DLEVBQWEsQ0FBQ0MsRUFBcUJDLElBQStDLENBQzdGLEtBQU0sQ0FBQyxhQUFBQyxDQUFZLEVBQUlGLEVBQ2pCLENBQ0osS0FBQUcsRUFDQSxRQUFBQyxFQUNBLFFBQUFDLEVBQ0EsUUFBQUMsRUFDQSxJQUFBQyxFQUNBLE1BQUFDLEVBQ0EsU0FBQUMsRUFDQSxVQUFBQyxFQUNBLFNBQUFDLEVBQ0EsT0FBQUMsRUFDQSxLQUFBQyxFQUNBLE9BQUFDLENBQ0YsRUFBSWIsRUFFRWMsRUFBc0IsQ0FDMUIsS0FBTVosSUFBUyxPQUFZUCxFQUFhTyxFQUFNLEVBQUUsRUFBSSxPQUNwRCxRQUFTQyxJQUFZLE9BQVlSLEVBQWFRLEVBQVMsRUFBRSxFQUFJLE9BQzdELFVBQVdNLElBQWMsT0FBWWQsRUFBYWMsRUFBVyxFQUFFLEVBQUksT0FDbkUsT0FBUUUsSUFBVyxPQUFZbEIsRUFBVWtCLEVBQVEsQ0FBQyxFQUFFLFlBQVksRUFBSSxPQUNwRSxTQUFVRCxJQUFhLE9BQVlmLEVBQWFlLEVBQVUsRUFBRSxFQUFJLE9BQ2hFLFNBQVUsS0FBSyxJQUFJLEVBQ25CLEtBQU1FLElBQVMsT0FBWWpCLEVBQWFpQixFQUFNLEVBQUUsRUFBSSxPQUNwRCxNQUFPTCxJQUFVLE9BQVlaLEVBQWFZLEVBQU8sQ0FBQyxFQUFJLE9BQ3RELFFBQVNILElBQVksT0FBWVQsRUFBYVMsRUFBUyxFQUFFLEVBQUksT0FDN0QsUUFBU0MsSUFBWSxPQUFZVixFQUFhVSxFQUFTLEVBQUUsRUFBSSxPQUM3RCxTQUFVRyxJQUFhLE9BQVliLEVBQWFhLEVBQVUsRUFBRSxFQUFJLE9BQ2hFLElBQUtGLElBQVEsT0FBWVgsRUFBYVcsRUFBSyxFQUFFLEVBQUksTUFDbkQsRUFFTVMsRUFBc0IsQ0FDMUIsR0FBR0QsRUFDSCxLQUFNdEIsRUFBV3FCLENBQU0sRUFDdkIsTUFBTyxLQUFLLElBQUksRUFDaEIsT0FBUW5CLEVBQVFtQixDQUFNLENBQ3hCLEVBRU1HLEVBQW1CcEIsaUJBQW1CbUIsRUFBTyxJQUFJO0FBQUEsYUFDNUNBLENBQU07QUFBQSxhQUNORCxDQUFNO0FBQUEsNEJBRWpCLE9BQU9qQixFQUFNSSxDQUFZLEVBQUUsTUFBTWUsQ0FBTSxFQUFFLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLENBQ3pFLEVBRWFDLEVBQWdCLENBQUNuQixFQUFxQkMsSUFBK0MsQ0FDaEcsS0FBTSxDQUFDLGFBQUFDLENBQVksRUFBSUYsRUFDakIsQ0FDSixLQUFBRyxFQUNBLFFBQUFDLEVBQ0EsUUFBQUMsRUFDQSxRQUFBQyxFQUNBLElBQUFDLEVBQ0EsTUFBQUMsRUFDQSxTQUFBQyxFQUNBLFVBQUFDLEVBQ0EsU0FBQUMsRUFDQSxPQUFBQyxFQUNBLEtBQUFDLEVBQ0EsT0FBQUMsQ0FDRixFQUFJYixFQUVFYyxFQUFzQixDQUMxQixLQUFNWixJQUFTLE9BQVlQLEVBQWFPLEVBQU0sRUFBRSxFQUFJLE9BQ3BELFFBQVNDLElBQVksT0FBWVIsRUFBYVEsRUFBUyxFQUFFLEVBQUksT0FDN0QsVUFBV00sSUFBYyxPQUFZZCxFQUFhYyxFQUFXLEVBQUUsRUFBSSxPQUNuRSxPQUFRRSxJQUFXLE9BQVlsQixFQUFVa0IsRUFBUSxDQUFDLEVBQUUsWUFBWSxFQUFJLE9BQ3BFLFNBQVVELElBQWEsT0FBWWYsRUFBYWUsRUFBVSxFQUFFLEVBQUksT0FDaEUsU0FBVSxLQUFLLElBQUksRUFDbkIsS0FBTUUsSUFBUyxPQUFZakIsRUFBYWlCLEVBQU0sRUFBRSxFQUFJLE9BQ3BELE1BQU9MLElBQVUsT0FBWVosRUFBYVksRUFBTyxDQUFDLEVBQUksT0FDdEQsUUFBU0gsSUFBWSxPQUFZVCxFQUFhUyxFQUFTLEVBQUUsRUFBSSxPQUM3RCxRQUFTQyxJQUFZLE9BQVlWLEVBQWFVLEVBQVMsRUFBRSxFQUFJLE9BQzdELFNBQVVHLElBQWEsT0FBWWIsRUFBYWEsRUFBVSxFQUFFLEVBQUksT0FDaEUsT0FBUUssSUFBVyxPQUFZbkIsRUFBUW1CLENBQU0sRUFBSSxPQUNqRCxJQUFLUCxJQUFRLE9BQVlYLEVBQWFXLEVBQUssRUFBRSxFQUFJLE1BQ25ELEVBRU1VLEVBQW1CcEIsaUJBQW1CSSxFQUFRLElBQUk7QUFBQSxhQUM3Q0EsQ0FBTztBQUFBLGFBQ1BjLENBQU07QUFBQSw0QkFFakIsT0FBT2pCLEVBQU1JLENBQVksRUFBRSxNQUFNZSxDQUFNLEVBQUUsS0FBTUMsR0FBV0EsRUFBTyxLQUFLLENBQUMsQ0FDekUiLAogICJuYW1lcyI6IFsiY3JlYXRlSGFzaCIsICJwYXJzZUNoYXIiLCAicGFyc2VJZCIsICJwYXJzZVZhckNoYXIiLCAiYXFsIiwgInVzZURiIiwgImFkZFByb2ZpbGUiLCAiY29udGV4dCIsICJwcm9maWxlIiwgImRhdGFiYXNlTmFtZSIsICJjaXR5IiwgImNvdW50cnkiLCAic3RyZWV0MSIsICJzdHJlZXQyIiwgInppcCIsICJzdGF0ZSIsICJ0aW1lem9uZSIsICJmaXJzdE5hbWUiLCAibGFzdE5hbWUiLCAiZ2VuZGVyIiwgIm5hbWUiLCAidXNlcklkIiwgInVwZGF0ZSIsICJpbnNlcnQiLCAiYXFsUXJ5IiwgImN1cnNvciIsICJ1cGRhdGVQcm9maWxlIl0KfQo=
|
package/lib/actions/reactions.js
CHANGED
|
@@ -1,322 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
var reactions_exports = {};
|
|
19
|
-
__export(reactions_exports, {
|
|
20
|
-
addReaction: () => addReaction,
|
|
21
|
-
deleteReaction: () => deleteReaction,
|
|
22
|
-
deleteReactionByItem: () => deleteReactionByItem,
|
|
23
|
-
getGroupUsersByReaction: () => getGroupUsersByReaction,
|
|
24
|
-
getItemsByReaction: () => getItemsByReaction,
|
|
25
|
-
getReactionCount: () => getReactionCount,
|
|
26
|
-
getReactionCountByUser: () => getReactionCountByUser,
|
|
27
|
-
getReactionsByItem: () => getReactionsByItem,
|
|
28
|
-
hasReaction: () => hasReaction,
|
|
29
|
-
parseReactionOptions: () => parseReactionOptions,
|
|
30
|
-
updateReaction: () => updateReaction
|
|
31
|
-
});
|
|
32
|
-
module.exports = __toCommonJS(reactions_exports);
|
|
33
|
-
var import_utils = require("@nlabs/utils");
|
|
34
|
-
var import_arangojs = require("arangojs");
|
|
35
|
-
var import_error = require("../types/error.types");
|
|
36
|
-
var import_analyticsUtils = require("../utils/analyticsUtils");
|
|
37
|
-
var import_arangodbUtils = require("../utils/arangodbUtils");
|
|
38
|
-
const eventCategory = "reactions";
|
|
39
|
-
const parseReactionOptions = (options = {}) => {
|
|
40
|
-
const {
|
|
41
|
-
from = 0,
|
|
42
|
-
to = 30
|
|
43
|
-
} = options;
|
|
44
|
-
return {
|
|
45
|
-
limit: (0, import_arangodbUtils.getLimit)(from, to)
|
|
46
|
-
};
|
|
47
|
-
};
|
|
48
|
-
const addReaction = (context, itemId, reaction = {}, allowDuplicate = false) => {
|
|
49
|
-
const action = "addReaction";
|
|
50
|
-
const { database, session: { userId: sessionId } } = context;
|
|
51
|
-
if (!sessionId) {
|
|
52
|
-
return (0, import_analyticsUtils.logException)({
|
|
53
|
-
action,
|
|
54
|
-
category: eventCategory,
|
|
55
|
-
label: "unauthorized",
|
|
56
|
-
value: "invalid_session"
|
|
57
|
-
}, context).then(() => null);
|
|
58
|
-
}
|
|
59
|
-
const {
|
|
60
|
-
name: itemName = "like",
|
|
61
|
-
value: itemValue
|
|
62
|
-
} = reaction;
|
|
63
|
-
const formatItemId = (0, import_utils.parseArangoId)(itemId);
|
|
64
|
-
const formatReactionName = (0, import_utils.parseChar)(itemName, 32);
|
|
65
|
-
const formatValue = (0, import_utils.parseString)(itemValue, 32);
|
|
66
|
-
const edgeCollection = database.collection("hasReaction");
|
|
67
|
-
const sessionDocId = `users/${sessionId}`;
|
|
68
|
-
const edgeId = (0, import_utils.createHash)(`reaction-${formatItemId}-${sessionId}`);
|
|
69
|
-
const edge = {
|
|
70
|
-
_from: sessionDocId,
|
|
71
|
-
_key: edgeId,
|
|
72
|
-
_to: formatItemId,
|
|
73
|
-
added: Date.now(),
|
|
74
|
-
name: formatReactionName,
|
|
75
|
-
value: itemValue !== void 0 ? formatValue : void 0
|
|
76
|
-
};
|
|
77
|
-
if (!allowDuplicate) {
|
|
78
|
-
const aqlQry = import_arangojs.aql`FOR r IN hasReaction
|
|
79
|
-
FILTER r._from == ${sessionDocId} && r._to == ${formatItemId} && r.name == ${formatReactionName}
|
|
1
|
+
import{createHash as $,parseArangoId as p,parseChar as h,parseId as U,parseNum as B,parseString as b}from"@nlabs/utils";import{aql as T}from"arangojs";import{ErrorTypes as E}from"../types/error.types";import{logError as N,logException as O}from"../utils/analyticsUtils";import{getLimit as q,useDb as g}from"../utils/arangodbUtils";const m="reactions",_=(e={})=>{const{from:o=0,to:n=30}=e;return{limit:q(o,n)}},x=(e,o,n={},a=!1)=>{const r="addReaction",{databaseName:s,session:{userId:i}}=e;if(!i)return O({action:r,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const{name:l="like",value:t}=n,u=p(o),c=h(l,32),d=b(t,32),R=g(s).collection("hasReaction"),I=`users/${i}`,A=$(`reaction-${u}-${i}`),y={_from:I,_key:A,_to:u,added:Date.now(),name:c,value:t!==void 0?d:void 0};if(!a){const D=T`FOR r IN hasReaction
|
|
2
|
+
FILTER r._from == ${I} && r._to == ${u} && r.name == ${c}
|
|
80
3
|
LIMIT 1
|
|
81
|
-
RETURN r`;
|
|
82
|
-
|
|
83
|
-
if (!!reaction2) {
|
|
84
|
-
return reaction2;
|
|
85
|
-
}
|
|
86
|
-
return edgeCollection.save(edge, { returnNew: true }).then(() => edge);
|
|
87
|
-
}).catch((error) => {
|
|
88
|
-
console.log("addReaction::error", error);
|
|
89
|
-
return (0, import_analyticsUtils.logError)({
|
|
90
|
-
action,
|
|
91
|
-
category: eventCategory,
|
|
92
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
93
|
-
}, error, context).then(() => null);
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
return edgeCollection.save(edge, { returnNew: true }).then(() => edge);
|
|
97
|
-
};
|
|
98
|
-
const deleteReaction = (context, reactionId) => {
|
|
99
|
-
const action = "deleteReaction";
|
|
100
|
-
const { database, session: { userId: sessionId } } = context;
|
|
101
|
-
if (!sessionId) {
|
|
102
|
-
return (0, import_analyticsUtils.logException)({
|
|
103
|
-
action,
|
|
104
|
-
category: eventCategory,
|
|
105
|
-
label: "unauthorized",
|
|
106
|
-
value: "invalid_session"
|
|
107
|
-
}, context).then(() => null);
|
|
108
|
-
}
|
|
109
|
-
const formatSessionId = `users/${(0, import_utils.parseId)(sessionId)}`;
|
|
110
|
-
const formatReactionId = `hasReaction/${(0, import_utils.parseId)(reactionId)}`;
|
|
111
|
-
const aqlQry = import_arangojs.aql`LET r = DOCUMENT(${formatReactionId})
|
|
112
|
-
FILTER r._from == ${formatSessionId}
|
|
4
|
+
RETURN r`;return g(s).query(D).then(f=>f.next()).then(f=>f||R.save(y,{returnNew:!0}).then(()=>y)).catch(f=>N({action:r,category:m,label:E.DATABASE_ERROR},f,e).then(()=>null))}return R.save(y,{returnNew:!0}).then(()=>y)},S=(e,o)=>{const n="deleteReaction",{databaseName:a,session:{userId:r}}=e;if(!r)return O({action:n,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const s=`users/${U(r)}`,i=`hasReaction/${U(o)}`,l=T`LET r = DOCUMENT(${i})
|
|
5
|
+
FILTER r._from == ${s}
|
|
113
6
|
LIMIT 1
|
|
114
7
|
REMOVE r IN hasReaction
|
|
115
|
-
RETURN OLD`;
|
|
116
|
-
|
|
117
|
-
action,
|
|
118
|
-
category: eventCategory,
|
|
119
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
120
|
-
}, error, context).then(() => null));
|
|
121
|
-
};
|
|
122
|
-
const deleteReactionByItem = (context, itemId, reactionName) => {
|
|
123
|
-
const action = "deleteReactionByItem";
|
|
124
|
-
const { database, session: { userId: sessionId } } = context;
|
|
125
|
-
if (!sessionId) {
|
|
126
|
-
return (0, import_analyticsUtils.logException)({
|
|
127
|
-
action,
|
|
128
|
-
category: eventCategory,
|
|
129
|
-
label: "unauthorized",
|
|
130
|
-
value: "invalid_session"
|
|
131
|
-
}, context).then(() => null);
|
|
132
|
-
}
|
|
133
|
-
const formatSessionId = `users/${(0, import_utils.parseId)(sessionId)}`;
|
|
134
|
-
const formatItemDocId = (0, import_utils.parseArangoId)(itemId);
|
|
135
|
-
const formatReactionName = (0, import_utils.parseChar)(reactionName);
|
|
136
|
-
const aqlQry = import_arangojs.aql`FOR r in hasReaction
|
|
137
|
-
FILTER r._from == ${formatSessionId} && r._to == ${formatItemDocId} && r.name == ${formatReactionName}
|
|
8
|
+
RETURN OLD`;return g(a).query(l).then(t=>t.next()).catch(t=>N({action:n,category:m,label:E.DATABASE_ERROR},t,e).then(()=>null))},P=(e,o,n)=>{const a="deleteReactionByItem",{databaseName:r,session:{userId:s}}=e;if(!s)return O({action:a,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const i=`users/${U(s)}`,l=p(o),t=h(n),u=T`FOR r in hasReaction
|
|
9
|
+
FILTER r._from == ${i} && r._to == ${l} && r.name == ${t}
|
|
138
10
|
LIMIT 1
|
|
139
11
|
REMOVE r IN hasReaction
|
|
140
|
-
RETURN OLD`;
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
category: eventCategory,
|
|
144
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
145
|
-
}, error, context).then(() => null));
|
|
146
|
-
};
|
|
147
|
-
const updateReaction = (context, reaction = {}) => {
|
|
148
|
-
const action = "updateReaction";
|
|
149
|
-
const { database, session: { userId: sessionId } } = context;
|
|
150
|
-
if (!sessionId) {
|
|
151
|
-
return (0, import_analyticsUtils.logException)({
|
|
152
|
-
action,
|
|
153
|
-
category: eventCategory,
|
|
154
|
-
label: "unauthorized",
|
|
155
|
-
value: "invalid_session"
|
|
156
|
-
}, context).then(() => null);
|
|
157
|
-
}
|
|
158
|
-
const {
|
|
159
|
-
id: itemId,
|
|
160
|
-
name: itemName,
|
|
161
|
-
value: itemValue
|
|
162
|
-
} = reaction;
|
|
163
|
-
const formatId = (0, import_utils.parseArangoId)(itemId);
|
|
164
|
-
const formatName = (0, import_utils.parseChar)(itemName, 32);
|
|
165
|
-
const formatValue = (0, import_utils.parseString)(itemValue, 32);
|
|
166
|
-
const edgeId = (0, import_utils.createHash)(`reaction-${formatId}-${sessionId}`);
|
|
167
|
-
const update = {
|
|
168
|
-
name: formatName,
|
|
169
|
-
value: formatValue
|
|
170
|
-
};
|
|
171
|
-
const insert = {
|
|
172
|
-
...update,
|
|
173
|
-
_key: edgeId,
|
|
174
|
-
added: Date.now()
|
|
175
|
-
};
|
|
176
|
-
const aqlQry = import_arangojs.aql`UPSERT ${{ _id: formatId }}
|
|
177
|
-
INSERT ${insert}
|
|
178
|
-
UPDATE ${update}
|
|
12
|
+
RETURN OLD`;return g(r).query(u).then(c=>c.next()).catch(c=>N({action:a,category:m,label:E.DATABASE_ERROR},c,e).then(()=>null))},M=(e,o={})=>{const n="updateReaction",{databaseName:a,session:{userId:r}}=e;if(!r)return O({action:n,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const{id:s,name:i,value:l}=o,t=p(s),u=h(i,32),c=b(l,32),d=$(`reaction-${t}-${r}`),R={name:u,value:c},I={...R,_key:d,added:Date.now()},A=T`UPSERT ${{_id:t}}
|
|
13
|
+
INSERT ${I}
|
|
14
|
+
UPDATE ${R}
|
|
179
15
|
LIMIT 1
|
|
180
|
-
RETURN NEW`;
|
|
181
|
-
|
|
182
|
-
action,
|
|
183
|
-
category: eventCategory,
|
|
184
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
185
|
-
}, error, context).then(() => null));
|
|
186
|
-
};
|
|
187
|
-
const getReactionCount = (context, itemId, reactionName) => {
|
|
188
|
-
const action = "getReactionCount";
|
|
189
|
-
const { database } = context;
|
|
190
|
-
const formatItemId = (0, import_utils.parseArangoId)(itemId);
|
|
191
|
-
const formatReactionName = (0, import_utils.parseChar)(reactionName, 32);
|
|
192
|
-
const aqlQry = import_arangojs.aql`FOR i, r IN INBOUND ${formatItemId} hasReaction
|
|
193
|
-
FILTER r.name == ${formatReactionName}
|
|
16
|
+
RETURN NEW`;return g(a).query(A).then(y=>y.next()).catch(y=>N({action:n,category:m,label:E.DATABASE_ERROR},y,e).then(()=>null))},V=(e,o,n)=>{const a="getReactionCount",{databaseName:r}=e,s=p(o),i=h(n,32),l=T`FOR i, r IN INBOUND ${s} hasReaction
|
|
17
|
+
FILTER r.name == ${i}
|
|
194
18
|
COLLECT WITH COUNT INTO count
|
|
195
|
-
RETURN count`;
|
|
196
|
-
|
|
197
|
-
action,
|
|
198
|
-
category: eventCategory,
|
|
199
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
200
|
-
}, error, context).then(() => void 0));
|
|
201
|
-
};
|
|
202
|
-
const getReactionCountByUser = (context, itemId, itemType, reactionName) => {
|
|
203
|
-
const action = "getReactionCountByUser";
|
|
204
|
-
const { database, session: { userId: sessionId } } = context;
|
|
205
|
-
const formatItemId = (0, import_utils.parseArangoId)(itemId);
|
|
206
|
-
const formatReactionName = (0, import_utils.parseChar)(reactionName, 32);
|
|
207
|
-
const sessionDocId = `users/${sessionId}`;
|
|
208
|
-
const aqlQry = import_arangojs.aql`FOR i, r IN INBOUND ${formatItemId} hasReaction
|
|
209
|
-
FILTER r.name == ${formatReactionName} && r._from == ${sessionDocId}
|
|
19
|
+
RETURN count`;return g(r).query(l).then(t=>t.next()).catch(t=>N({action:a,category:m,label:E.DATABASE_ERROR},t,e).then(()=>{}))},G=(e,o,n,a)=>{const r="getReactionCountByUser",{databaseName:s,session:{userId:i}}=e,l=p(o),t=h(a,32),u=`users/${i}`,c=T`FOR i, r IN INBOUND ${l} hasReaction
|
|
20
|
+
FILTER r.name == ${t} && r._from == ${u}
|
|
210
21
|
COLLECT reactionValue = r.value INTO reactionItems
|
|
211
|
-
RETURN MERGE(r, {count: LENGTH(reactionItems[*].r.value)})`;
|
|
212
|
-
return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
|
|
213
|
-
action,
|
|
214
|
-
category: eventCategory,
|
|
215
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
216
|
-
}, error, context).then(() => []));
|
|
217
|
-
};
|
|
218
|
-
const getGroupUsersByReaction = (context, params = {}) => {
|
|
219
|
-
const action = "getGroupUsersByReaction";
|
|
220
|
-
const { database, session: { userId: sessionId } } = context;
|
|
221
|
-
if (!sessionId) {
|
|
222
|
-
return (0, import_analyticsUtils.logException)({
|
|
223
|
-
action,
|
|
224
|
-
category: eventCategory,
|
|
225
|
-
label: "unauthorized",
|
|
226
|
-
value: "invalid_session"
|
|
227
|
-
}, context).then(() => null);
|
|
228
|
-
}
|
|
229
|
-
const { filters = [], id: groupId, value } = params;
|
|
230
|
-
const reaction = (0, import_utils.parseChar)(value, 32);
|
|
231
|
-
const groupDocId = (0, import_utils.parseArangoId)(groupId);
|
|
232
|
-
const filterStr = filters.map((filter) => {
|
|
233
|
-
const { conditional, name, value: queryValue } = filter;
|
|
234
|
-
let filterCond = conditional;
|
|
235
|
-
if (conditional !== ">=" && conditional !== "<=" && conditional !== ">" && conditional !== "<") {
|
|
236
|
-
filterCond = "==";
|
|
237
|
-
}
|
|
238
|
-
switch (name) {
|
|
239
|
-
case "added":
|
|
240
|
-
return `r.added ${filterCond} ${(0, import_utils.parseNum)(queryValue)}`;
|
|
241
|
-
default:
|
|
242
|
-
return "";
|
|
243
|
-
}
|
|
244
|
-
}).concat([
|
|
245
|
-
`r.value == "${reaction}"`,
|
|
246
|
-
"u._id == r._from"
|
|
247
|
-
]).join(" && ");
|
|
248
|
-
const aqlQry = `FOR g, r IN INBOUND "${groupDocId}" hasReaction
|
|
22
|
+
RETURN MERGE(r, {count: LENGTH(reactionItems[*].r.value)})`;return g(s).query(c).then(d=>d.all()).catch(d=>N({action:r,category:m,label:E.DATABASE_ERROR},d,e).then(()=>[]))},w=(e,o={})=>{const n="getGroupUsersByReaction",{databaseName:a,session:{userId:r}}=e;if(!r)return O({action:n,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const{filters:s=[],id:i,value:l}=o,t=h(l,32),u=p(i),c=s.map(R=>{const{conditional:I,name:A,value:y}=R;let D=I;switch(I!==">="&&I!=="<="&&I!==">"&&I!=="<"&&(D="=="),A){case"added":return`r.added ${D} ${B(y)}`;default:return""}}).concat([`r.value == "${t}"`,"u._id == r._from"]).join(" && "),d=`FOR g, r IN INBOUND "${u}" hasReaction
|
|
249
23
|
FOR u IN users
|
|
250
|
-
FILTER ${
|
|
251
|
-
RETURN u`;
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
category:
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
const action = "getReactionsByItem";
|
|
260
|
-
const { database } = context;
|
|
261
|
-
const formatItemId = (0, import_utils.parseArangoId)(itemId);
|
|
262
|
-
const formatReactionName = (0, import_utils.parseChar)(reactionName, 32);
|
|
263
|
-
const { limit } = parseReactionOptions(options);
|
|
264
|
-
const aqlQry = `FOR i, r IN INBOUND "${formatItemId}" hasReaction
|
|
265
|
-
FILTER r.name == "${formatReactionName}"
|
|
266
|
-
${limit.aql}
|
|
267
|
-
RETURN MERGE(i, {reaction: r})`;
|
|
268
|
-
return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
|
|
269
|
-
action,
|
|
270
|
-
category: eventCategory,
|
|
271
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
272
|
-
}, error, context).then(() => []));
|
|
273
|
-
};
|
|
274
|
-
const getItemsByReaction = (context, itemId, reactionName, options) => {
|
|
275
|
-
const action = "getItemsByReaction";
|
|
276
|
-
const { database } = context;
|
|
277
|
-
const formatItemId = (0, import_utils.parseArangoId)(itemId);
|
|
278
|
-
const formatReactionName = (0, import_utils.parseChar)(reactionName, 32);
|
|
279
|
-
const { limit } = parseReactionOptions(options);
|
|
280
|
-
const aqlQry = `FOR u, r IN OUTBOUND "${formatItemId}" hasReaction
|
|
281
|
-
FILTER r.name == ${formatReactionName}
|
|
282
|
-
${limit.aql}
|
|
283
|
-
RETURN MERGE(u, {reaction: r})`;
|
|
284
|
-
return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
|
|
285
|
-
action,
|
|
286
|
-
category: eventCategory,
|
|
287
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
288
|
-
}, error, context).then(() => []));
|
|
289
|
-
};
|
|
290
|
-
const hasReaction = (context, itemId, reactionName, direction = "OUTBOUND") => {
|
|
291
|
-
const action = "hasReaction";
|
|
292
|
-
const { database, session: { userId: sessionId } } = context;
|
|
293
|
-
const sessionDocId = `users/${sessionId}`;
|
|
294
|
-
const formatItemId = (0, import_utils.parseArangoId)(itemId);
|
|
295
|
-
const formatDirection = direction === "OUTBOUND" ? "OUTBOUND" : "INBOUND";
|
|
296
|
-
const itemDirection = direction === "OUTBOUND" ? "r._to" : "r._from";
|
|
297
|
-
const aqlQry = `FOR i, r IN ${formatDirection} "${sessionDocId}" hasReaction
|
|
298
|
-
FILTER r.name == "${reactionName}" && ${itemDirection} == "${formatItemId}"
|
|
24
|
+
FILTER ${c}
|
|
25
|
+
RETURN u`;return g(a).query(d).then(R=>R.all()).catch(R=>N({action:n,category:m,label:E.DATABASE_ERROR},R,e).then(()=>[]))},z=(e,o,n,a)=>{const r="getReactionsByItem",{databaseName:s}=e,i=p(o),l=h(n,32),{limit:t}=_(a),u=`FOR i, r IN INBOUND "${i}" hasReaction
|
|
26
|
+
FILTER r.name == "${l}"
|
|
27
|
+
${t.aql}
|
|
28
|
+
RETURN MERGE(i, {reaction: r})`;return g(s).query(u).then(c=>c.all()).catch(c=>N({action:r,category:m,label:E.DATABASE_ERROR},c,e).then(()=>[]))},k=(e,o,n,a)=>{const r="getItemsByReaction",{databaseName:s}=e,i=p(o),l=h(n,32),{limit:t}=_(a),u=`FOR u, r IN OUTBOUND "${i}" hasReaction
|
|
29
|
+
FILTER r.name == ${l}
|
|
30
|
+
${t.aql}
|
|
31
|
+
RETURN MERGE(u, {reaction: r})`;return g(s).query(u).then(c=>c.all()).catch(c=>N({action:r,category:m,label:E.DATABASE_ERROR},c,e).then(()=>[]))},H=(e,o,n,a="OUTBOUND")=>{const r="hasReaction",{databaseName:s,session:{userId:i}}=e,l=`users/${i}`,t=p(o),d=`FOR i, r IN ${a==="OUTBOUND"?"OUTBOUND":"INBOUND"} "${l}" hasReaction
|
|
32
|
+
FILTER r.name == "${n}" && ${a==="OUTBOUND"?"r._to":"r._from"} == "${t}"
|
|
299
33
|
LIMIT 1
|
|
300
|
-
RETURN r`;
|
|
301
|
-
console.log({ aqlQry });
|
|
302
|
-
return database.query(aqlQry).then((cursor) => cursor.next()).then((reactions) => reactions ? reactions.value === "true" : false).catch((error) => (0, import_analyticsUtils.logError)({
|
|
303
|
-
action,
|
|
304
|
-
category: eventCategory,
|
|
305
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
306
|
-
}, error, context).then(() => false));
|
|
307
|
-
};
|
|
308
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
309
|
-
0 && (module.exports = {
|
|
310
|
-
addReaction,
|
|
311
|
-
deleteReaction,
|
|
312
|
-
deleteReactionByItem,
|
|
313
|
-
getGroupUsersByReaction,
|
|
314
|
-
getItemsByReaction,
|
|
315
|
-
getReactionCount,
|
|
316
|
-
getReactionCountByUser,
|
|
317
|
-
getReactionsByItem,
|
|
318
|
-
hasReaction,
|
|
319
|
-
parseReactionOptions,
|
|
320
|
-
updateReaction
|
|
321
|
-
});
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcmVhY3Rpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdH0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0LCBBcmFuZ29EYkNvbGxlY3Rpb24sIEFyYW5nb0RiTGltaXQsIFF1ZXJ5RmlsdGVyLCBVc2VyVHlwZSwgVXNlclJlYWN0aW9uUXVlcnl9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAncmVhY3Rpb25zJztcblxuZXhwb3J0IHR5cGUgUmVhY3Rpb25EaXJlY3Rpb24gPSAnSU5CT1VORCcgfCAnT1VUQk9VTkQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uIHtcbiAgcmVhZG9ubHkgX2Zyb20/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF9rZXk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF90bz86IHN0cmluZztcbiAgcmVhZG9ubHkgYWRkZWQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyO1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZT86IEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25PcHRpb25zIHtcbiAgcmVhZG9ubHkgZnJvbT86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG8/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZVJlYWN0aW9uT3B0aW9ucyA9IChvcHRpb25zOiBSZWFjdGlvbk9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFJlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb246IFJlYWN0aW9uID0ge30sXG4gIGFsbG93RHVwbGljYXRlOiBib29sZWFuID0gZmFsc2Vcbik6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbmFtZTogaXRlbU5hbWUgPSAnbGlrZScsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZVxuICB9ID0gcmVhY3Rpb247XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihpdGVtTmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXRWYWx1ZTogc3RyaW5nID0gcGFyc2VTdHJpbmcoaXRlbVZhbHVlLCAzMik7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2hhc1JlYWN0aW9uJyk7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgcmVhY3Rpb24tJHtmb3JtYXRJdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBlZGdlOiBSZWFjdGlvbiA9IHtcbiAgICBfZnJvbTogc2Vzc2lvbkRvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdEl0ZW1JZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICBuYW1lOiBmb3JtYXRSZWFjdGlvbk5hbWUsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZSAhPT0gdW5kZWZpbmVkID8gZm9ybWF0VmFsdWUgOiB1bmRlZmluZWRcbiAgfTtcblxuICAvLyBDaGVjayBmb3IgZHVwbGljYXRlcyBpZiBub3QgYWxsb3dlZFxuICBpZighYWxsb3dEdXBsaWNhdGUpIHtcbiAgICAvLyBRdWVyeVxuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHIgSU4gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLl9mcm9tID09ICR7c2Vzc2lvbkRvY0lkfSAmJiByLl90byA9PSAke2Zvcm1hdEl0ZW1JZH0gJiYgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHJgO1xuXG4gICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAudGhlbigocmVhY3Rpb24pID0+IHtcbiAgICAgICAgaWYoISFyZWFjdGlvbikge1xuICAgICAgICAgIHJldHVybiByZWFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGVkZ2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGRSZWFjdGlvbjo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBlZGdlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkOiBzdHJpbmcgPSBgdXNlcnMvJHtwYXJzZUlkKHNlc3Npb25JZCl9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25JZDogc3RyaW5nID0gYGhhc1JlYWN0aW9uLyR7cGFyc2VJZChyZWFjdGlvbklkKX1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIHIgPSBET0NVTUVOVCgke2Zvcm1hdFJlYWN0aW9uSWR9KVxuICAgIEZJTFRFUiByLl9mcm9tID09ICR7Zm9ybWF0U2Vzc2lvbklkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgciBJTiBoYXNSZWFjdGlvblxuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbkJ5SXRlbSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkOiBzdHJpbmcgPSBgdXNlcnMvJHtwYXJzZUlkKHNlc3Npb25JZCl9YDtcbiAgY29uc3QgZm9ybWF0SXRlbURvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZTogc3RyaW5nID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSk7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgciBpbiBoYXNSZWFjdGlvblxuICAgIEZJTFRFUiByLl9mcm9tID09ICR7Zm9ybWF0U2Vzc2lvbklkfSAmJiByLl90byA9PSAke2Zvcm1hdEl0ZW1Eb2NJZH0gJiYgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgciBJTiBoYXNSZWFjdGlvblxuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogUmVhY3Rpb24gPSB7fSk6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgaWQ6IGl0ZW1JZCxcbiAgICBuYW1lOiBpdGVtTmFtZSxcbiAgICB2YWx1ZTogaXRlbVZhbHVlXG4gIH0gPSByZWFjdGlvbjtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0TmFtZTogc3RyaW5nID0gcGFyc2VDaGFyKGl0ZW1OYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFZhbHVlOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhpdGVtVmFsdWUsIDMyKTtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGByZWFjdGlvbi0ke2Zvcm1hdElkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgdXBkYXRlOiBSZWFjdGlvbiA9IHtcbiAgICBuYW1lOiBmb3JtYXROYW1lLFxuICAgIHZhbHVlOiBmb3JtYXRWYWx1ZVxuICB9O1xuICBjb25zdCBpbnNlcnQ6IFJlYWN0aW9uID0ge1xuICAgIC4uLnVwZGF0ZSxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KClcbiAgfTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCAke3tfaWQ6IGZvcm1hdElkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFJlYWN0aW9uQ291bnQnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZSA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBpLCByIElOIElOQk9VTkQgJHtmb3JtYXRJdGVtSWR9IGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgIFJFVFVSTiBjb3VudGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gdW5kZWZpbmVkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIGl0ZW1UeXBlOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFJlYWN0aW9uQ291bnRCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGksIHIgSU4gSU5CT1VORCAke2Zvcm1hdEl0ZW1JZH0gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gJHtmb3JtYXRSZWFjdGlvbk5hbWV9ICYmIHIuX2Zyb20gPT0gJHtzZXNzaW9uRG9jSWR9XG4gICAgICBDT0xMRUNUIHJlYWN0aW9uVmFsdWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIE1FUkdFKHIsIHtjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwVXNlcnNCeVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBhcmFtczogVXNlclJlYWN0aW9uUXVlcnkgPSB7fSk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0R3JvdXBVc2Vyc0J5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCB7ZmlsdGVycyA9IFtdLCBpZDogZ3JvdXBJZCwgdmFsdWV9OiBVc2VyUmVhY3Rpb25RdWVyeSA9IHBhcmFtcztcbiAgY29uc3QgcmVhY3Rpb24gPSBwYXJzZUNoYXIodmFsdWUsIDMyKTtcbiAgY29uc3QgZ3JvdXBEb2NJZCA9IHBhcnNlQXJhbmdvSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGZpbHRlclN0cjogc3RyaW5nID0gZmlsdGVyc1xuICAgIC5tYXAoKGZpbHRlcjogUXVlcnlGaWx0ZXIpID0+IHtcbiAgICAgIGNvbnN0IHtjb25kaXRpb25hbCwgbmFtZSwgdmFsdWU6IHF1ZXJ5VmFsdWV9OiBRdWVyeUZpbHRlciA9IGZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXJDb25kOiBzdHJpbmcgPSBjb25kaXRpb25hbDtcblxuICAgICAgaWYoY29uZGl0aW9uYWwgIT09ICc+PScgJiYgY29uZGl0aW9uYWwgIT09ICc8PScgJiYgY29uZGl0aW9uYWwgIT09ICc+JyAmJiBjb25kaXRpb25hbCAhPT0gJzwnKSB7XG4gICAgICAgIGZpbHRlckNvbmQgPSAnPT0nO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2gobmFtZSkge1xuICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgcmV0dXJuIGByLmFkZGVkICR7ZmlsdGVyQ29uZH0gJHtwYXJzZU51bShxdWVyeVZhbHVlKX1gO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jb25jYXQoW1xuICAgICAgYHIudmFsdWUgPT0gXCIke3JlYWN0aW9ufVwiYCxcbiAgICAgICd1Ll9pZCA9PSByLl9mcm9tJ1xuICAgIF0pXG4gICAgLmpvaW4oJyAmJiAnKTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgZywgciBJTiBJTkJPVU5EIFwiJHtncm91cERvY0lkfVwiIGhhc1JlYWN0aW9uXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSICR7ZmlsdGVyU3RyfVxuICAgICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWFjdGlvbnNCeUl0ZW0gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UmVhY3Rpb25zQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlUmVhY3Rpb25PcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgaSwgciBJTiBJTkJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09IFwiJHtmb3JtYXRSZWFjdGlvbk5hbWV9XCJcbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gTUVSR0UoaSwge3JlYWN0aW9uOiByfSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJdGVtc0J5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbXNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlUmVhY3Rpb25PcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB1LCByIElOIE9VVEJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFJFVFVSTiBNRVJHRSh1LCB7cmVhY3Rpb246IHJ9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1JlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGRpcmVjdGlvbjogUmVhY3Rpb25EaXJlY3Rpb24gPSAnT1VUQk9VTkQnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnaGFzUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ09VVEJPVU5EJyA/ICdPVVRCT1VORCcgOiAnSU5CT1VORCc7XG4gIGNvbnN0IGl0ZW1EaXJlY3Rpb246IHN0cmluZyA9IGRpcmVjdGlvbiA9PT0gJ09VVEJPVU5EJyA/ICdyLl90bycgOiAnci5fZnJvbSc7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGksIHIgSU4gJHtmb3JtYXREaXJlY3Rpb259IFwiJHtzZXNzaW9uRG9jSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09IFwiJHtyZWFjdGlvbk5hbWV9XCIgJiYgJHtpdGVtRGlyZWN0aW9ufSA9PSBcIiR7Zm9ybWF0SXRlbUlkfVwiXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiByYDtcblxuICBjb25zb2xlLmxvZyh7YXFsUXJ5fSk7XG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVhY3Rpb25zKSA9PiAocmVhY3Rpb25zID8gcmVhY3Rpb25zLnZhbHVlID09PSAndHJ1ZScgOiBmYWxzZSkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBmYWxzZSkpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsbUJBQW1GO0FBQ25GLHNCQUFrQjtBQUdsQixtQkFBeUI7QUFDekIsNEJBQXFDO0FBQ3JDLDJCQUF1QjtBQUt2QixNQUFNLGdCQUF3QjtBQXFCdkIsTUFBTSx1QkFBdUIsQ0FBQyxVQUEyQixDQUFDLE1BQU07QUFDckUsUUFBTTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLEVBQ1AsSUFBSTtBQUVKLFNBQU87QUFBQSxJQUNMLFdBQU8sK0JBQVMsTUFBTSxFQUFFO0FBQUEsRUFDMUI7QUFDRjtBQUVPLE1BQU0sY0FBYyxDQUN6QixTQUNBLFFBQ0EsV0FBcUIsQ0FBQyxHQUN0QixpQkFBMEIsVUFDSjtBQUN0QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFNBQVMsRUFBQyxRQUFRLFVB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QUMsY0FBaUIsZ0NBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTyx3QkFBVztBQUFBLEVBQ3BCLEdBQUcsT0FBTyxPQUFPLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0FBRU8sTUFBTSxxQkFBcUIsQ0FDaEMsU0FDQSxRQUNBLGNBQ0EsWUFDd0I7QUFDeEIsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsU0FBUSxJQUFJO0FBQ25CLFFBQU0sbUJBQXVCLDRCQUFjLE1BQU07QUFDakQsUUFBTSx5QkFBNkIsd0JBQVUsY0FBYyxFQUFFO0FBQzdELFFBQU0sRUFBQyxNQUFLLElBQUkscUJBQXFCLE9BQU87QUFHNUMsUUFBTSxTQUFpQix5QkFBeUIsWUFBWTtBQUFBLHVCQUN2QyxrQkFBa0I7QUFBQSxNQUNuQyxNQUFNLEdBQUc7QUFBQTtBQUdiLFNBQU8sU0FBUyxNQUFNLE1BQU0sRUFDekIsS0FBSyxDQUFDLFdBQVcsT0FBTyxJQUFJLENBQUMsRUFDN0IsTUFBTSxDQUFDLGNBQWlCLGdDQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU8sd0JBQVc7QUFBQSxFQUNwQixHQUFHLE9BQU8sT0FBTyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUVPLE1BQU0sY0FBYyxDQUN6QixTQUNBLFFBQ0EsY0FDQSxZQUErQixlQUNWO0FBQ3JCLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFVBQVUsU0FBUyxFQUFDLFFBQVEsVUFBUyxFQUFDLElBQUk7QUFDakQsUUFBTSxlQUF1QixTQUFTLFNBQVM7QUFDL0MsUUFBTSxtQkFBdUIsNEJBQWMsTUFBTTtBQUNqRCxRQUFNLGtCQUFrQixjQUFjLGFBQWEsYUFBYTtBQUNoRSxRQUFNLGdCQUF3QixjQUFjLGFBQWEsVUFBVTtBQUduRSxRQUFNLFNBQWlCLGVBQWUsZUFBZSxLQUFLLFlBQVk7QUFBQSx3QkFDaEQsWUFBWSxRQUFRLGFBQWEsUUFBUSxZQUFZO0FBQUE7QUFBQTtBQUkzRSxVQUFRLElBQUksRUFBQyxPQUFNLENBQUM7QUFDcEIsU0FBTyxTQUFTLE1BQU0sTUFBTSxFQUN6QixLQUFLLENBQUMsV0FBVyxPQUFPLEtBQUssQ0FBQyxFQUM5QixLQUFLLENBQUMsY0FBZSxZQUFZLFVBQVUsVUFBVSxTQUFTLEtBQU0sRUFDcEUsTUFBTSxDQUFDLGNBQWlCLGdDQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU8sd0JBQVc7QUFBQSxFQUNwQixHQUFHLE9BQU8sT0FBTyxFQUFFLEtBQUssTUFBTSxLQUFLLENBQUM7QUFDeEM7IiwKICAibmFtZXMiOiBbInJlYWN0aW9uIl0KfQo=
|
|
34
|
+
RETURN r`;return g(s).query(d).then(R=>R.next()).then(R=>R?R.value==="true":!1).catch(R=>N({action:r,category:m,label:E.DATABASE_ERROR},R,e).then(()=>!1))};export{x as addReaction,S as deleteReaction,P as deleteReactionByItem,w as getGroupUsersByReaction,k as getItemsByReaction,V as getReactionCount,G as getReactionCountByUser,z as getReactionsByItem,H as hasReaction,_ as parseReactionOptions,M as updateReaction};
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcmVhY3Rpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dCwgQXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0LCBRdWVyeUZpbHRlciwgVXNlclR5cGUsIFVzZXJSZWFjdGlvblF1ZXJ5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3JlYWN0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIFJlYWN0aW9uRGlyZWN0aW9uID0gJ0lOQk9VTkQnIHwgJ09VVEJPVU5EJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGlvbiB7XG4gIHJlYWRvbmx5IF9mcm9tPzogc3RyaW5nO1xuICByZWFkb25seSBfa2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBfdG8/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFkZGVkPzogbnVtYmVyO1xuICByZWFkb25seSBjb3VudD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU/OiBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGZyb20/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VSZWFjdGlvbk9wdGlvbnMgPSAob3B0aW9uczogUmVhY3Rpb25PcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRSZWFjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uOiBSZWFjdGlvbiA9IHt9LFxuICBhbGxvd0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBuYW1lOiBpdGVtTmFtZSA9ICdsaWtlJyxcbiAgICB2YWx1ZTogaXRlbVZhbHVlXG4gIH0gPSByZWFjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZTogc3RyaW5nID0gcGFyc2VDaGFyKGl0ZW1OYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFZhbHVlOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhpdGVtVmFsdWUsIDMyKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNSZWFjdGlvbicpO1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHJlYWN0aW9uLSR7Zm9ybWF0SXRlbUlkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZWRnZTogUmVhY3Rpb24gPSB7XG4gICAgX2Zyb206IHNlc3Npb25Eb2NJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmb3JtYXRJdGVtSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgbmFtZTogZm9ybWF0UmVhY3Rpb25OYW1lLFxuICAgIHZhbHVlOiBpdGVtVmFsdWUgIT09IHVuZGVmaW5lZCA/IGZvcm1hdFZhbHVlIDogdW5kZWZpbmVkXG4gIH07XG5cbiAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgaWYgbm90IGFsbG93ZWRcbiAgaWYoIWFsbG93RHVwbGljYXRlKSB7XG4gICAgLy8gUXVlcnlcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiByIElOIGhhc1JlYWN0aW9uXG4gICAgICBGSUxURVIgci5fZnJvbSA9PSAke3Nlc3Npb25Eb2NJZH0gJiYgci5fdG8gPT0gJHtmb3JtYXRJdGVtSWR9ICYmIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiByYDtcblxuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAudGhlbigocmVhY3Rpb24pID0+IHtcbiAgICAgICAgaWYoISFyZWFjdGlvbikge1xuICAgICAgICAgIHJldHVybiByZWFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGVkZ2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGRSZWFjdGlvbjo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBlZGdlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZDogc3RyaW5nID0gYHVzZXJzLyR7cGFyc2VJZChzZXNzaW9uSWQpfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uSWQ6IHN0cmluZyA9IGBoYXNSZWFjdGlvbi8ke3BhcnNlSWQocmVhY3Rpb25JZCl9YDtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCByID0gRE9DVU1FTlQoJHtmb3JtYXRSZWFjdGlvbklkfSlcbiAgICBGSUxURVIgci5fZnJvbSA9PSAke2Zvcm1hdFNlc3Npb25JZH1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIHIgSU4gaGFzUmVhY3Rpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbkJ5SXRlbSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZDogc3RyaW5nID0gYHVzZXJzLyR7cGFyc2VJZChzZXNzaW9uSWQpfWA7XG4gIGNvbnN0IGZvcm1hdEl0ZW1Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUpO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHIgaW4gaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5fZnJvbSA9PSAke2Zvcm1hdFNlc3Npb25JZH0gJiYgci5fdG8gPT0gJHtmb3JtYXRJdGVtRG9jSWR9ICYmIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIHIgSU4gaGFzUmVhY3Rpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogUmVhY3Rpb24gPSB7fSk6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlkOiBpdGVtSWQsXG4gICAgbmFtZTogaXRlbU5hbWUsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZVxuICB9ID0gcmVhY3Rpb247XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdE5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihpdGVtTmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXRWYWx1ZTogc3RyaW5nID0gcGFyc2VTdHJpbmcoaXRlbVZhbHVlLCAzMik7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgcmVhY3Rpb24tJHtmb3JtYXRJZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IHVwZGF0ZTogUmVhY3Rpb24gPSB7XG4gICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICB2YWx1ZTogZm9ybWF0VmFsdWVcbiAgfTtcbiAgY29uc3QgaW5zZXJ0OiBSZWFjdGlvbiA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gIH07XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQgJHt7X2lkOiBmb3JtYXRJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFJlYWN0aW9uQ291bnQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaSwgciBJTiBJTkJPVU5EICR7Zm9ybWF0SXRlbUlkfSBoYXNSZWFjdGlvblxuICAgIEZJTFRFUiByLm5hbWUgPT0gJHtmb3JtYXRSZWFjdGlvbk5hbWV9XG4gICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICBSRVRVUk4gY291bnRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gdW5kZWZpbmVkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIGl0ZW1UeXBlOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFJlYWN0aW9uQ291bnRCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpO1xuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBpLCByIElOIElOQk9VTkQgJHtmb3JtYXRJdGVtSWR9IGhhc1JlYWN0aW9uXG4gICAgICBGSUxURVIgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfSAmJiByLl9mcm9tID09ICR7c2Vzc2lvbkRvY0lkfVxuICAgICAgQ09MTEVDVCByZWFjdGlvblZhbHVlID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiBNRVJHRShyLCB7Y291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwVXNlcnNCeVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBhcmFtczogVXNlclJlYWN0aW9uUXVlcnkgPSB7fSk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0R3JvdXBVc2Vyc0J5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3Qge2ZpbHRlcnMgPSBbXSwgaWQ6IGdyb3VwSWQsIHZhbHVlfTogVXNlclJlYWN0aW9uUXVlcnkgPSBwYXJhbXM7XG4gIGNvbnN0IHJlYWN0aW9uID0gcGFyc2VDaGFyKHZhbHVlLCAzMik7XG4gIGNvbnN0IGdyb3VwRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGdyb3VwSWQpO1xuICBjb25zdCBmaWx0ZXJTdHI6IHN0cmluZyA9IGZpbHRlcnNcbiAgICAubWFwKChmaWx0ZXI6IFF1ZXJ5RmlsdGVyKSA9PiB7XG4gICAgICBjb25zdCB7Y29uZGl0aW9uYWwsIG5hbWUsIHZhbHVlOiBxdWVyeVZhbHVlfTogUXVlcnlGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICBsZXQgZmlsdGVyQ29uZDogc3RyaW5nID0gY29uZGl0aW9uYWw7XG5cbiAgICAgIGlmKGNvbmRpdGlvbmFsICE9PSAnPj0nICYmIGNvbmRpdGlvbmFsICE9PSAnPD0nICYmIGNvbmRpdGlvbmFsICE9PSAnPicgJiYgY29uZGl0aW9uYWwgIT09ICc8Jykge1xuICAgICAgICBmaWx0ZXJDb25kID0gJz09JztcbiAgICAgIH1cblxuICAgICAgc3dpdGNoKG5hbWUpIHtcbiAgICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICAgIHJldHVybiBgci5hZGRlZCAke2ZpbHRlckNvbmR9ICR7cGFyc2VOdW0ocXVlcnlWYWx1ZSl9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSlcbiAgICAuY29uY2F0KFtcbiAgICAgIGByLnZhbHVlID09IFwiJHtyZWFjdGlvbn1cImAsXG4gICAgICAndS5faWQgPT0gci5fZnJvbSdcbiAgICBdKVxuICAgIC5qb2luKCcgJiYgJyk7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGcsIHIgSU4gSU5CT1VORCBcIiR7Z3JvdXBEb2NJZH1cIiBoYXNSZWFjdGlvblxuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiAke2ZpbHRlclN0cn1cbiAgICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWFjdGlvbnNCeUl0ZW0gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UmVhY3Rpb25zQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lOiBzdHJpbmcgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVJlYWN0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGksIHIgSU4gSU5CT1VORCBcIiR7Zm9ybWF0SXRlbUlkfVwiIGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSBcIiR7Zm9ybWF0UmVhY3Rpb25OYW1lfVwiXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgUkVUVVJOIE1FUkdFKGksIHtyZWFjdGlvbjogcn0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJdGVtc0J5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbXNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lOiBzdHJpbmcgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVJlYWN0aW9uT3B0aW9ucyhvcHRpb25zKTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdSwgciBJTiBPVVRCT1VORCBcIiR7Zm9ybWF0SXRlbUlkfVwiIGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gTUVSR0UodSwge3JlYWN0aW9uOiByfSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1JlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGRpcmVjdGlvbjogUmVhY3Rpb25EaXJlY3Rpb24gPSAnT1VUQk9VTkQnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnaGFzUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXREaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT09ICdPVVRCT1VORCcgPyAnT1VUQk9VTkQnIDogJ0lOQk9VTkQnO1xuICBjb25zdCBpdGVtRGlyZWN0aW9uOiBzdHJpbmcgPSBkaXJlY3Rpb24gPT09ICdPVVRCT1VORCcgPyAnci5fdG8nIDogJ3IuX2Zyb20nO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBpLCByIElOICR7Zm9ybWF0RGlyZWN0aW9ufSBcIiR7c2Vzc2lvbkRvY0lkfVwiIGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSBcIiR7cmVhY3Rpb25OYW1lfVwiICYmICR7aXRlbURpcmVjdGlvbn0gPT0gXCIke2Zvcm1hdEl0ZW1JZH1cIlxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcmA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlYWN0aW9ucykgPT4gKHJlYWN0aW9ucyA/IHJlYWN0aW9ucy52YWx1ZSA9PT0gJ3RydWUnIDogZmFsc2UpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gZmFsc2UpKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUFRLGNBQUFBLEVBQVksaUJBQUFDLEVBQWUsYUFBQUMsRUFBVyxXQUFBQyxFQUFTLFlBQUFDLEVBQVUsZUFBQUMsTUFBa0IsZUFDbkYsT0FBUSxPQUFBQyxNQUFVLFdBR2xCLE9BQVEsY0FBQUMsTUFBaUIsdUJBQ3pCLE9BQVEsWUFBQUMsRUFBVSxnQkFBQUMsTUFBbUIsMEJBQ3JDLE9BQVEsWUFBQUMsRUFBVSxTQUFBQyxNQUFZLHlCQUs5QixNQUFNQyxFQUF3QixZQXFCakJDLEVBQXVCLENBQUNDLEVBQTJCLENBQUMsSUFBTSxDQUNyRSxLQUFNLENBQ0osS0FBQUMsRUFBTyxFQUNQLEdBQUFDLEVBQUssRUFDUCxFQUFJRixFQUVKLE1BQU8sQ0FDTCxNQUFPSixFQUFTSyxFQUFNQyxDQUFFLENBQzFCLENBQ0YsRUFFYUMsRUFBYyxDQUN6QkMsRUFDQUMsRUFDQUMsRUFBcUIsQ0FBQyxFQUN0QkMsRUFBMEIsS0FDSixDQUN0QixNQUFNQyxFQUFpQixjQUNqQixDQUFDLGFBQUFDLEVBQWMsUUFBUyxDQUFDLE9BQVFDLENBQVMsQ0FBQyxFQUFJTixFQUVyRCxHQUFHLENBQUNNLEVBQ0YsT0FBT2YsRUFBYSxDQUNsQixPQUFBYSxFQUNBLFNBQVVWLEVBQ1YsTUFBTyxlQUNQLE1BQU8saUJBQ1QsRUFBR00sQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLEVBRzdCLEtBQU0sQ0FDSixLQUFNTyxFQUFXLE9BQ2pCLE1BQU9DLENBQ1QsRUFBSU4sRUFDRU8sRUFBdUIxQixFQUFja0IsQ0FBTSxFQUMzQ1MsRUFBNkIxQixFQUFVdUIsRUFBVSxFQUFFLEVBQ25ESSxFQUFzQnhCLEVBQVlxQixFQUFXLEVBQUUsRUFDL0NJLEVBQWlDbkIsRUFBTVksQ0FBWSxFQUFFLFdBQVcsYUFBYSxFQUM3RVEsRUFBdUIsU0FBU1AsQ0FBUyxHQUN6Q1EsRUFBaUJoQyxFQUFXLFlBQVkyQixDQUFZLElBQUlILENBQVMsRUFBRSxFQUNuRVMsRUFBaUIsQ0FDckIsTUFBT0YsRUFDUCxLQUFNQyxFQUNOLElBQUtMLEVBQ0wsTUFBTyxLQUFLLElBQUksRUFDaEIsS0FBTUMsRUFDTixNQUFPRixJQUFjLE9BQVlHLEVBQWMsTUFDakQsRUFHQSxHQUFHLENBQUNSLEVBQWdCLENBRWxCLE1BQU1hLEVBQW1CNUI7QUFBQSwwQkFDSHlCLENBQVksZ0JBQWdCSixDQUFZLGlCQUFpQkMsQ0FBa0I7QUFBQTtBQUFBLGdCQUlqRyxPQUFPakIsRUFBTVksQ0FBWSxFQUFFLE1BQU1XLENBQU0sRUFDcEMsS0FBTUMsR0FBV0EsRUFBTyxLQUFLLENBQUMsRUFDOUIsS0FBTWYsR0FDQUEsR0FJRVUsRUFBZSxLQUFLRyxFQUFNLENBQUMsVUFBVyxFQUFJLENBQUMsRUFBRSxLQUFLLElBQU1BLENBQUksQ0FDcEUsRUFDQSxNQUFPRyxHQUVDNUIsRUFBUyxDQUNkLE9BQUFjLEVBQ0EsU0FBVVYsRUFDVixNQUFPTCxFQUFXLGNBQ3BCLEVBQUc2QixFQUFPbEIsQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLENBQ25DLENBQ0wsQ0FFQSxPQUFPWSxFQUFlLEtBQUtHLEVBQU0sQ0FBQyxVQUFXLEVBQUksQ0FBQyxFQUFFLEtBQUssSUFBTUEsQ0FBSSxDQUNyRSxFQUVhSSxFQUFpQixDQUFDbkIsRUFBcUJvQixJQUEwQyxDQUM1RixNQUFNaEIsRUFBaUIsaUJBQ2pCLENBQUMsYUFBQUMsRUFBYyxRQUFTLENBQUMsT0FBUUMsQ0FBUyxDQUFDLEVBQUlOLEVBRXJELEdBQUcsQ0FBQ00sRUFDRixPQUFPZixFQUFhLENBQ2xCLE9BQUFhLEVBQ0EsU0FBVVYsRUFDVixNQUFPLGVBQ1AsTUFBTyxpQkFDVCxFQUFHTSxDQUFPLEVBQUUsS0FBSyxJQUFNLElBQUksRUFHN0IsTUFBTXFCLEVBQTBCLFNBQVNwQyxFQUFRcUIsQ0FBUyxDQUFDLEdBQ3JEZ0IsRUFBMkIsZUFBZXJDLEVBQVFtQyxDQUFVLENBQUMsR0FHN0RKLEVBQW1CNUIscUJBQXVCa0MsQ0FBZ0I7QUFBQSx3QkFDMUNELENBQWU7QUFBQTtBQUFBO0FBQUEsZ0JBS3JDLE9BQU81QixFQUFNWSxDQUFZLEVBQUUsTUFBTVcsQ0FBTSxFQUNwQyxLQUFNQyxHQUFXQSxFQUFPLEtBQUssQ0FBQyxFQUM5QixNQUFPQyxHQUFpQjVCLEVBQVMsQ0FDaEMsT0FBQWMsRUFDQSxTQUFVVixFQUNWLE1BQU9MLEVBQVcsY0FDcEIsRUFBRzZCLEVBQU9sQixDQUFPLEVBQUUsS0FBSyxJQUFNLElBQUksQ0FBQyxDQUN2QyxFQUVhdUIsRUFBdUIsQ0FDbEN2QixFQUNBQyxFQUNBdUIsSUFDc0IsQ0FDdEIsTUFBTXBCLEVBQWlCLHVCQUNqQixDQUFDLGFBQUFDLEVBQWMsUUFBUyxDQUFDLE9BQVFDLENBQVMsQ0FBQyxFQUFJTixFQUVyRCxHQUFHLENBQUNNLEVBQ0YsT0FBT2YsRUFBYSxDQUNsQixPQUFBYSxFQUNBLFNBQVVWLEVBQ1YsTUFBTyxlQUNQLE1BQU8saUJBQ1QsRUFBR00sQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLEVBRzdCLE1BQU1xQixFQUEwQixTQUFTcEMsRUFBUXFCLENBQVMsQ0FBQyxHQUNyRG1CLEVBQTBCMUMsRUFBY2tCLENBQU0sRUFDOUNTLEVBQTZCMUIsRUFBVXdDLENBQVksRUFHbkRSLEVBQW1CNUI7QUFBQSx3QkFDSGlDLENBQWUsZ0JBQWdCSSxDQUFlLGlCQUFpQmYsQ0FBa0I7QUFBQTtBQUFBO0FBQUEsZ0JBS3ZHLE9BQU9qQixFQUFNWSxDQUFZLEVBQUUsTUFBTVcsQ0FBTSxFQUNwQyxLQUFNQyxHQUFXQSxFQUFPLEtBQUssQ0FBQyxFQUM5QixNQUFPQyxHQUFpQjVCLEVBQVMsQ0FDaEMsT0FBQWMsRUFDQSxTQUFVVixFQUNWLE1BQU9MLEVBQVcsY0FDcEIsRUFBRzZCLEVBQU9sQixDQUFPLEVBQUUsS0FBSyxJQUFNLElBQUksQ0FBQyxDQUN2QyxFQUVhMEIsRUFBaUIsQ0FBQzFCLEVBQXFCRSxFQUFxQixDQUFDLElBQXlCLENBQ2pHLE1BQU1FLEVBQWlCLGlCQUNqQixDQUFDLGFBQUFDLEVBQWMsUUFBUyxDQUFDLE9BQVFDLENBQVMsQ0FBQyxFQUFJTixFQUVyRCxHQUFHLENBQUNNLEVBQ0YsT0FBT2YsRUFBYSxDQUNsQixPQUFBYSxFQUNBLFNBQVVWLEVBQ1YsTUFBTyxlQUNQLE1BQU8saUJBQ1QsRUFBR00sQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLEVBRzdCLEtBQU0sQ0FDSixHQUFJQyxFQUNKLEtBQU1NLEVBQ04sTUFBT0MsQ0FDVCxFQUFJTixFQUNFeUIsRUFBbUI1QyxFQUFja0IsQ0FBTSxFQUN2QzJCLEVBQXFCNUMsRUFBVXVCLEVBQVUsRUFBRSxFQUMzQ0ksRUFBc0J4QixFQUFZcUIsRUFBVyxFQUFFLEVBQy9DTSxFQUFpQmhDLEVBQVcsWUFBWTZDLENBQVEsSUFBSXJCLENBQVMsRUFBRSxFQUMvRHVCLEVBQW1CLENBQ3ZCLEtBQU1ELEVBQ04sTUFBT2pCLENBQ1QsRUFDTW1CLEVBQW1CLENBQ3ZCLEdBQUdELEVBQ0gsS0FBTWYsRUFDTixNQUFPLEtBQUssSUFBSSxDQUNsQixFQUdNRSxFQUFtQjVCLFdBQWEsQ0FBQyxJQUFLdUMsQ0FBUSxDQUFDO0FBQUEsYUFDMUNHLENBQU07QUFBQSxhQUNORCxDQUFNO0FBQUE7QUFBQSxnQkFJakIsT0FBT3BDLEVBQU1ZLENBQVksRUFBRSxNQUFNVyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLE1BQU9DLEdBQWlCNUIsRUFBUyxDQUNoQyxPQUFBYyxFQUNBLFNBQVVWLEVBQ1YsTUFBT0wsRUFBVyxjQUNwQixFQUFHNkIsRUFBT2xCLENBQU8sRUFBRSxLQUFLLElBQU0sSUFBSSxDQUFDLENBQ3ZDLEVBRWErQixFQUFtQixDQUM5Qi9CLEVBQ0FDLEVBQ0F1QixJQUNzQixDQUN0QixNQUFNcEIsRUFBaUIsbUJBQ2pCLENBQUMsYUFBQUMsQ0FBWSxFQUFJTCxFQUNqQlMsRUFBdUIxQixFQUFja0IsQ0FBTSxFQUMzQ1MsRUFBcUIxQixFQUFVd0MsRUFBYyxFQUFFLEVBRy9DUixFQUFtQjVCLHdCQUEwQnFCLENBQVk7QUFBQSx1QkFDMUNDLENBQWtCO0FBQUE7QUFBQSxrQkFJdkMsT0FBT2pCLEVBQU1ZLENBQVksRUFBRSxNQUFNVyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLE1BQU9DLEdBQWlCNUIsRUFBUyxDQUNoQyxPQUFBYyxFQUNBLFNBQVVWLEVBQ1YsTUFBT0wsRUFBVyxjQUNwQixFQUFHNkIsRUFBT2xCLENBQU8sRUFBRSxLQUFLLElBQUcsRUFBWSxDQUFDLENBQzVDLEVBRWFnQyxFQUF5QixDQUNwQ2hDLEVBQ0FDLEVBQ0FnQyxFQUNBVCxJQUN3QixDQUN4QixNQUFNcEIsRUFBUyx5QkFDVCxDQUFDLGFBQUFDLEVBQWMsUUFBUyxDQUFDLE9BQVFDLENBQVMsQ0FBQyxFQUFJTixFQUMvQ1MsRUFBZTFCLEVBQWNrQixDQUFNLEVBQ25DUyxFQUFxQjFCLEVBQVV3QyxFQUFjLEVBQUUsRUFDL0NYLEVBQWUsU0FBU1AsQ0FBUyxHQUdqQ1UsRUFBbUI1Qix3QkFBMEJxQixDQUFZO0FBQUEseUJBQ3hDQyxDQUFrQixrQkFBa0JHLENBQVk7QUFBQTtBQUFBLGtFQUl2RSxPQUFPcEIsRUFBTVksQ0FBWSxFQUFFLE1BQU1XLENBQU0sRUFDcEMsS0FBTUMsR0FBV0EsRUFBTyxJQUFJLENBQUMsRUFDN0IsTUFBT0MsR0FBaUI1QixFQUFTLENBQ2hDLE9BQUFjLEVBQ0EsU0FBVVYsRUFDVixNQUFPTCxFQUFXLGNBQ3BCLEVBQUc2QixFQUFPbEIsQ0FBTyxFQUFFLEtBQUssSUFBTSxDQUFDLENBQUMsQ0FBQyxDQUNyQyxFQUVha0MsRUFBMEIsQ0FBQ2xDLEVBQXFCbUMsRUFBNEIsQ0FBQyxJQUEyQixDQUNuSCxNQUFNL0IsRUFBUywwQkFDVCxDQUFDLGFBQUFDLEVBQWMsUUFBUyxDQUFDLE9BQVFDLENBQVMsQ0FBQyxFQUFJTixFQUVyRCxHQUFHLENBQUNNLEVBQ0YsT0FBT2YsRUFBYSxDQUNsQixPQUFBYSxFQUNBLFNBQVVWLEVBQ1YsTUFBTyxlQUNQLE1BQU8saUJBQ1QsRUFBR00sQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLEVBRzdCLEtBQU0sQ0FBQyxRQUFBb0MsRUFBVSxDQUFDLEVBQUcsR0FBSUMsRUFBUyxNQUFBQyxDQUFLLEVBQXVCSCxFQUN4RGpDLEVBQVdsQixFQUFVc0QsRUFBTyxFQUFFLEVBQzlCQyxFQUFheEQsRUFBY3NELENBQU8sRUFDbENHLEVBQW9CSixFQUN2QixJQUFLSyxHQUF3QixDQUM1QixLQUFNLENBQUMsWUFBQUMsRUFBYSxLQUFBQyxFQUFNLE1BQU9DLENBQVUsRUFBaUJILEVBQzVELElBQUlJLEVBQXFCSCxFQU16QixPQUpHQSxJQUFnQixNQUFRQSxJQUFnQixNQUFRQSxJQUFnQixLQUFPQSxJQUFnQixNQUN4RkcsRUFBYSxNQUdSRixFQUFNLENBQ1gsSUFBSyxRQUNILE1BQU8sV0FBV0UsQ0FBVSxJQUFJM0QsRUFBUzBELENBQVUsQ0FBQyxHQUN0RCxRQUNFLE1BQU8sRUFDWCxDQUNGLENBQUMsRUFDQSxPQUFPLENBQ04sZUFBZTFDLENBQVEsSUFDdkIsa0JBQ0YsQ0FBQyxFQUNBLEtBQUssTUFBTSxFQUdSYyxFQUFpQix3QkFBd0J1QixDQUFVO0FBQUE7QUFBQSxlQUU1Q0MsQ0FBUztBQUFBLGdCQUd0QixPQUFPL0MsRUFBTVksQ0FBWSxFQUFFLE1BQU1XLENBQU0sRUFDcEMsS0FBTUMsR0FBV0EsRUFBTyxJQUFJLENBQUMsRUFDN0IsTUFBT0MsR0FBaUI1QixFQUFTLENBQ2hDLE9BQUFjLEVBQ0EsU0FBVVYsRUFDVixNQUFPTCxFQUFXLGNBQ3BCLEVBQUc2QixFQUFPbEIsQ0FBTyxFQUFFLEtBQUssSUFBTSxDQUFDLENBQUMsQ0FBQyxDQUNyQyxFQUVhOEMsRUFBcUIsQ0FDaEM5QyxFQUNBQyxFQUNBdUIsRUFDQTVCLElBQ3dCLENBQ3hCLE1BQU1RLEVBQWlCLHFCQUNqQixDQUFDLGFBQUFDLENBQVksRUFBSUwsRUFDakJTLEVBQXVCMUIsRUFBY2tCLENBQU0sRUFDM0NTLEVBQTZCMUIsRUFBVXdDLEVBQWMsRUFBRSxFQUN2RCxDQUFDLE1BQUF1QixDQUFLLEVBQUlwRCxFQUFxQkMsQ0FBTyxFQUN0Q29CLEVBQWlCLHdCQUF3QlAsQ0FBWTtBQUFBLHdCQUNyQ0MsQ0FBa0I7QUFBQSxNQUNwQ3FDLEVBQU0sR0FBRztBQUFBLG9DQUdiLE9BQU90RCxFQUFNWSxDQUFZLEVBQUUsTUFBTVcsQ0FBTSxFQUNwQyxLQUFNQyxHQUFXQSxFQUFPLElBQUksQ0FBQyxFQUM3QixNQUFPQyxHQUFpQjVCLEVBQVMsQ0FDaEMsT0FBQWMsRUFDQSxTQUFVVixFQUNWLE1BQU9MLEVBQVcsY0FDcEIsRUFBRzZCLEVBQU9sQixDQUFPLEVBQUUsS0FBSyxJQUFNLENBQUMsQ0FBQyxDQUFDLENBQ3JDLEVBRWFnRCxFQUFxQixDQUNoQ2hELEVBQ0FDLEVBQ0F1QixFQUNBNUIsSUFDd0IsQ0FDeEIsTUFBTVEsRUFBaUIscUJBQ2pCLENBQUMsYUFBQUMsQ0FBWSxFQUFJTCxFQUNqQlMsRUFBdUIxQixFQUFja0IsQ0FBTSxFQUMzQ1MsRUFBNkIxQixFQUFVd0MsRUFBYyxFQUFFLEVBQ3ZELENBQUMsTUFBQXVCLENBQUssRUFBSXBELEVBQXFCQyxDQUFPLEVBR3RDb0IsRUFBaUIseUJBQXlCUCxDQUFZO0FBQUEsdUJBQ3ZDQyxDQUFrQjtBQUFBLE1BQ25DcUMsRUFBTSxHQUFHO0FBQUEsb0NBR2IsT0FBT3RELEVBQU1ZLENBQVksRUFBRSxNQUFNVyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sSUFBSSxDQUFDLEVBQzdCLE1BQU9DLEdBQWlCNUIsRUFBUyxDQUNoQyxPQUFBYyxFQUNBLFNBQVVWLEVBQ1YsTUFBT0wsRUFBVyxjQUNwQixFQUFHNkIsRUFBT2xCLENBQU8sRUFBRSxLQUFLLElBQU0sQ0FBQyxDQUFDLENBQUMsQ0FDckMsRUFFYWlELEVBQWMsQ0FDekJqRCxFQUNBQyxFQUNBdUIsRUFDQTBCLEVBQStCLGFBQ1YsQ0FDckIsTUFBTTlDLEVBQWlCLGNBQ2pCLENBQUMsYUFBQUMsRUFBYyxRQUFTLENBQUMsT0FBUUMsQ0FBUyxDQUFDLEVBQUlOLEVBQy9DYSxFQUF1QixTQUFTUCxDQUFTLEdBQ3pDRyxFQUF1QjFCLEVBQWNrQixDQUFNLEVBSzNDZSxFQUFpQixlQUpDa0MsSUFBYyxXQUFhLFdBQWEsU0FJWCxLQUFLckMsQ0FBWTtBQUFBLHdCQUNoRFcsQ0FBWSxRQUpKMEIsSUFBYyxXQUFhLFFBQVUsU0FJWixRQUFRekMsQ0FBWTtBQUFBO0FBQUEsY0FJM0UsT0FBT2hCLEVBQU1ZLENBQVksRUFBRSxNQUFNVyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLEtBQU1rQyxHQUFlQSxFQUFZQSxFQUFVLFFBQVUsT0FBUyxFQUFNLEVBQ3BFLE1BQU9qQyxHQUFpQjVCLEVBQVMsQ0FDaEMsT0FBQWMsRUFDQSxTQUFVVixFQUNWLE1BQU9MLEVBQVcsY0FDcEIsRUFBRzZCLEVBQU9sQixDQUFPLEVBQUUsS0FBSyxJQUFNLEVBQUssQ0FBQyxDQUN4QyIsCiAgIm5hbWVzIjogWyJjcmVhdGVIYXNoIiwgInBhcnNlQXJhbmdvSWQiLCAicGFyc2VDaGFyIiwgInBhcnNlSWQiLCAicGFyc2VOdW0iLCAicGFyc2VTdHJpbmciLCAiYXFsIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAibG9nRXhjZXB0aW9uIiwgImdldExpbWl0IiwgInVzZURiIiwgImV2ZW50Q2F0ZWdvcnkiLCAicGFyc2VSZWFjdGlvbk9wdGlvbnMiLCAib3B0aW9ucyIsICJmcm9tIiwgInRvIiwgImFkZFJlYWN0aW9uIiwgImNvbnRleHQiLCAiaXRlbUlkIiwgInJlYWN0aW9uIiwgImFsbG93RHVwbGljYXRlIiwgImFjdGlvbiIsICJkYXRhYmFzZU5hbWUiLCAic2Vzc2lvbklkIiwgIml0ZW1OYW1lIiwgIml0ZW1WYWx1ZSIsICJmb3JtYXRJdGVtSWQiLCAiZm9ybWF0UmVhY3Rpb25OYW1lIiwgImZvcm1hdFZhbHVlIiwgImVkZ2VDb2xsZWN0aW9uIiwgInNlc3Npb25Eb2NJZCIsICJlZGdlSWQiLCAiZWRnZSIsICJhcWxRcnkiLCAiY3Vyc29yIiwgImVycm9yIiwgImRlbGV0ZVJlYWN0aW9uIiwgInJlYWN0aW9uSWQiLCAiZm9ybWF0U2Vzc2lvbklkIiwgImZvcm1hdFJlYWN0aW9uSWQiLCAiZGVsZXRlUmVhY3Rpb25CeUl0ZW0iLCAicmVhY3Rpb25OYW1lIiwgImZvcm1hdEl0ZW1Eb2NJZCIsICJ1cGRhdGVSZWFjdGlvbiIsICJmb3JtYXRJZCIsICJmb3JtYXROYW1lIiwgInVwZGF0ZSIsICJpbnNlcnQiLCAiZ2V0UmVhY3Rpb25Db3VudCIsICJnZXRSZWFjdGlvbkNvdW50QnlVc2VyIiwgIml0ZW1UeXBlIiwgImdldEdyb3VwVXNlcnNCeVJlYWN0aW9uIiwgInBhcmFtcyIsICJmaWx0ZXJzIiwgImdyb3VwSWQiLCAidmFsdWUiLCAiZ3JvdXBEb2NJZCIsICJmaWx0ZXJTdHIiLCAiZmlsdGVyIiwgImNvbmRpdGlvbmFsIiwgIm5hbWUiLCAicXVlcnlWYWx1ZSIsICJmaWx0ZXJDb25kIiwgImdldFJlYWN0aW9uc0J5SXRlbSIsICJsaW1pdCIsICJnZXRJdGVtc0J5UmVhY3Rpb24iLCAiaGFzUmVhY3Rpb24iLCAiZGlyZWN0aW9uIiwgInJlYWN0aW9ucyJdCn0K
|