@nlabs/reaktor 0.10.2 → 0.10.5

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.
Files changed (165) hide show
  1. package/coverage/block-navigation.js +1 -1
  2. package/coverage/index.html +23 -23
  3. package/coverage/sorter.js +21 -7
  4. package/lib/actions/index.d.ts +1 -0
  5. package/lib/actions/notifications.d.ts +2 -2
  6. package/lib/actions/videos.d.ts +25 -0
  7. package/lib/mocks/video.d.ts +3 -0
  8. package/lib/types/arangodb.types.d.ts +1 -1
  9. package/lib/types/index.d.ts +1 -0
  10. package/lib/types/videos.types.d.ts +46 -0
  11. package/lib/utils/stripeUtils.d.ts +1 -1
  12. package/package.json +21 -22
  13. package/lib/actions/apps.js +0 -20
  14. package/lib/actions/connections.js +0 -7
  15. package/lib/actions/content.js +0 -17
  16. package/lib/actions/conversations.js +0 -33
  17. package/lib/actions/dynamodb.js +0 -2
  18. package/lib/actions/email.js +0 -2
  19. package/lib/actions/files.js +0 -5
  20. package/lib/actions/groups.js +0 -52
  21. package/lib/actions/images.js +0 -66
  22. package/lib/actions/index.js +0 -2
  23. package/lib/actions/ios.js +0 -11
  24. package/lib/actions/locations.js +0 -7
  25. package/lib/actions/messages.js +0 -33
  26. package/lib/actions/notifications.js +0 -2
  27. package/lib/actions/payments.js +0 -32
  28. package/lib/actions/posts.js +0 -143
  29. package/lib/actions/profiles.js +0 -8
  30. package/lib/actions/reactions.js +0 -35
  31. package/lib/actions/s3.js +0 -2
  32. package/lib/actions/search.js +0 -5
  33. package/lib/actions/sms.js +0 -2
  34. package/lib/actions/statistics.js +0 -8
  35. package/lib/actions/subscriptions.js +0 -12
  36. package/lib/actions/tags.js +0 -24
  37. package/lib/actions/users.js +0 -87
  38. package/lib/actions/websockets.js +0 -30
  39. package/lib/adapters/arangoAdapter.js +0 -2
  40. package/lib/adapters/contentAdapter.js +0 -2
  41. package/lib/adapters/fileAdapter.js +0 -2
  42. package/lib/adapters/imageAdapter.js +0 -2
  43. package/lib/adapters/index.js +0 -2
  44. package/lib/adapters/messageAdapter.js +0 -2
  45. package/lib/adapters/postAdapter.js +0 -2
  46. package/lib/adapters/reaktorAdapter.js +0 -2
  47. package/lib/adapters/tagAdapter.js +0 -2
  48. package/lib/adapters/userAdapter.js +0 -2
  49. package/lib/config.js +0 -2
  50. package/lib/handlers/graphqlHandler.js +0 -2
  51. package/lib/index.js +0 -2
  52. package/lib/lambdas/actions/websockets.js +0 -30
  53. package/lib/lambdas/authorizer.js +0 -2
  54. package/lib/lambdas/connection.js +0 -2
  55. package/lib/lambdas/utils/message.js +0 -2
  56. package/lib/lambdas/utils/websocket.js +0 -2
  57. package/lib/mocks/conversation.js +0 -2
  58. package/lib/mocks/file.js +0 -2
  59. package/lib/mocks/group.js +0 -2
  60. package/lib/mocks/image.js +0 -2
  61. package/lib/mocks/post.js +0 -2
  62. package/lib/mocks/tag.js +0 -2
  63. package/lib/mocks/user.js +0 -2
  64. package/lib/mutations/content.js +0 -2
  65. package/lib/mutations/index.js +0 -2
  66. package/lib/mutations/locations.js +0 -2
  67. package/lib/mutations/messages.js +0 -2
  68. package/lib/mutations/posts.js +0 -2
  69. package/lib/mutations/profiles.js +0 -2
  70. package/lib/mutations/reactions.js +0 -2
  71. package/lib/mutations/statistics.js +0 -2
  72. package/lib/mutations/subscriptions.js +0 -2
  73. package/lib/mutations/tags.js +0 -2
  74. package/lib/mutations/users.js +0 -2
  75. package/lib/objectTypes/app.js +0 -2
  76. package/lib/objectTypes/bankAccount.js +0 -2
  77. package/lib/objectTypes/connection.js +0 -2
  78. package/lib/objectTypes/content.js +0 -2
  79. package/lib/objectTypes/conversation.js +0 -2
  80. package/lib/objectTypes/creditCard.js +0 -2
  81. package/lib/objectTypes/document.js +0 -2
  82. package/lib/objectTypes/error.js +0 -2
  83. package/lib/objectTypes/external.js +0 -2
  84. package/lib/objectTypes/file.js +0 -2
  85. package/lib/objectTypes/filter.js +0 -2
  86. package/lib/objectTypes/group.js +0 -2
  87. package/lib/objectTypes/iapSubscription.js +0 -2
  88. package/lib/objectTypes/image.js +0 -2
  89. package/lib/objectTypes/index.js +0 -2
  90. package/lib/objectTypes/location.js +0 -2
  91. package/lib/objectTypes/message.js +0 -2
  92. package/lib/objectTypes/passcode.js +0 -2
  93. package/lib/objectTypes/plan.js +0 -2
  94. package/lib/objectTypes/post.js +0 -2
  95. package/lib/objectTypes/profile.js +0 -2
  96. package/lib/objectTypes/reaction.js +0 -2
  97. package/lib/objectTypes/relation.js +0 -2
  98. package/lib/objectTypes/search.js +0 -2
  99. package/lib/objectTypes/statistics.js +0 -2
  100. package/lib/objectTypes/subscription.js +0 -2
  101. package/lib/objectTypes/tag.js +0 -2
  102. package/lib/objectTypes/user.js +0 -2
  103. package/lib/queries/content.js +0 -2
  104. package/lib/queries/index.js +0 -2
  105. package/lib/queries/locations.js +0 -2
  106. package/lib/queries/messages.js +0 -2
  107. package/lib/queries/posts.js +0 -2
  108. package/lib/queries/reactions.js +0 -2
  109. package/lib/queries/statistics.js +0 -2
  110. package/lib/queries/subscriptions.js +0 -2
  111. package/lib/queries/tags.js +0 -2
  112. package/lib/queries/users.js +0 -2
  113. package/lib/templates/email/layout.js +0 -280
  114. package/lib/templates/email/passwordForgot.js +0 -16
  115. package/lib/templates/email/passwordRecovery.js +0 -13
  116. package/lib/templates/email/verifyEmail.js +0 -16
  117. package/lib/templates/email/welcome.js +0 -16
  118. package/lib/templates/sms/passwordForgot.js +0 -2
  119. package/lib/templates/sms/passwordRecovery.js +0 -2
  120. package/lib/templates/sms/verifyEmail.js +0 -2
  121. package/lib/templates/sms/verifyPhone.js +0 -2
  122. package/lib/templates/sms/welcome.js +0 -2
  123. package/lib/types/apps.types.js +0 -2
  124. package/lib/types/arangodb.types.js +0 -1
  125. package/lib/types/auth.types.js +0 -1
  126. package/lib/types/connections.types.js +0 -1
  127. package/lib/types/content.types.js +0 -1
  128. package/lib/types/conversations.types.js +0 -1
  129. package/lib/types/email.types.js +0 -1
  130. package/lib/types/error.types.js +0 -2
  131. package/lib/types/files.types.js +0 -1
  132. package/lib/types/google.types.js +0 -1
  133. package/lib/types/groups.types.js +0 -1
  134. package/lib/types/images.types.js +0 -1
  135. package/lib/types/index.js +0 -2
  136. package/lib/types/locations.types.js +0 -1
  137. package/lib/types/messages.types.js +0 -1
  138. package/lib/types/notifications.types.js +0 -1
  139. package/lib/types/payments.types.js +0 -1
  140. package/lib/types/posts.types.js +0 -1
  141. package/lib/types/profiles.types.js +0 -1
  142. package/lib/types/statistics.types.js +0 -1
  143. package/lib/types/tags.types.js +0 -1
  144. package/lib/types/users.types.js +0 -1
  145. package/lib/types/websockets.types.js +0 -1
  146. package/lib/utils/adapterUtils.js +0 -2
  147. package/lib/utils/analyticsUtils.js +0 -2
  148. package/lib/utils/arangodbUtils.js +0 -7
  149. package/lib/utils/authUtils.js +0 -2
  150. package/lib/utils/contextUtils.js +0 -2
  151. package/lib/utils/dbI18n.example.js +0 -6
  152. package/lib/utils/dbI18n.js +0 -2
  153. package/lib/utils/googleTranslate.js +0 -2
  154. package/lib/utils/graphqlUtils.js +0 -2
  155. package/lib/utils/index.js +0 -2
  156. package/lib/utils/languageDetection.js +0 -2
  157. package/lib/utils/localeUtils.example.js +0 -2
  158. package/lib/utils/localeUtils.js +0 -2
  159. package/lib/utils/middlewareUtils.js +0 -2
  160. package/lib/utils/sessionUtils.js +0 -2
  161. package/lib/utils/stripeUtils.js +0 -2
  162. package/lib/utils/templateUtils.js +0 -2
  163. package/lib/utils/testUtils.js +0 -2
  164. package/lib/utils/translationQueue.example.js +0 -2
  165. package/lib/utils/translationQueue.js +0 -2
@@ -1,33 +0,0 @@
1
- import{cloneDeep as O}from"@nlabs/utils/objects/clone";import{createHash as T,parseId as v}from"@nlabs/utils/parsers/strings";import{aql as R}from"arangojs";import{Config as q}from"../config.js";import{ErrorTypes as C}from"../types/error.types.js";import{logError as g}from"../utils/analyticsUtils.js";import{getLimit as b,sortIds as N,useDb as d}from"../utils/arangodbUtils.js";import{getImageUrl as _}from"./images.js";import{getDisplayName as P,getUser as A}from"./users.js";const I="conversations",Q=(e={})=>{const{from:n=0,to:a=30}=e;return{limit:b(n,a)}},G=(e,n,a)=>{const i="getConversations",{databaseName:c}=e,{limit:u}=Q(a),t=`users/${n}`,o=`FOR c, e IN 1..1 OUTBOUND "${t}" hasConversation
2
- ${u.aql}
3
- LET users = (
4
- FOR u, uc IN 1..1 INBOUND c._id hasConversation
5
- FILTER u._id != "${t}"
6
- RETURN u
7
- )
8
- RETURN MERGE(c, {users: users})`;return d(c).query(o).then(s=>s.all()).catch(s=>(g({action:i,category:I,label:C.DATABASE_ERROR},s,e),[]))},H=async(e,{fromId:n,toId:a,toUser:i})=>{const c="getDirectConversation",{databaseName:u}=e;try{const t=v(n),o=v(a),r=N([t,o]),p=T(`conversations-${r.join("-")}`,null),m=i||await A(e,{userId:o}),l=R`LET c = DOCUMENT(${`conversations/${p}`}) RETURN c`,y=await d(u).query(l).then(E=>E.next()).catch(E=>g({action:c,category:I,label:C.DATABASE_ERROR},E,e));return y?{...y,users:[m]}:F(e,{fromId:n,toId:a,toUser:m})}catch(t){return g({action:c,category:I,label:C.DATABASE_ERROR},t,e)}},F=async(e,{fromId:n,toId:a,toUser:i})=>{const c="getDirectConversation",{databaseName:u}=e;try{const t=v(n),o=v(a),s=[t,o],r=N([t,o]),p=i||await A(e,{userId:o}),m=T(`conversations-${r.join("-")}`,null),l=Date.now(),E=R`INSERT ${{_key:m,added:l,isDirect:!0,modified:l}} IN conversations RETURN NEW`,h=await d(u).query(E).then(U=>U.next());return await Promise.all(s.map(U=>{const D=T(`hasConversation-${U}-${m}`),f={_from:`users/${U}`,_key:D,_to:`conversations/${m}`,added:Date.now()},$=R`INSERT ${f} IN hasConversation RETURN NEW`;return d(u).query($)})),{...h,users:[p]}}catch(t){return g({action:c,category:I,label:C.DATABASE_ERROR},t,e),{}}},V=(e,{conversationId:n,includeAll:a=!1,isDirect:i})=>{const c="getConnectionUsers",{databaseName:u,session:{userId:t}}=e,o=["c.userId == u._key"];a||o.push(`u._key != ${t}`),i&&o.push(`p.vertices[0].isDirect == ${i}`);const s=R`FOR u, e,p IN 1..1 INBOUND ${`conversations/${n}`} hasConversation
9
- OPTIONS {vertexCollections: "users"}
10
- FOR c IN connections
11
- FILTER ${o.join(" && ")}
12
- RETURN c`;return d(u).query(s).then(r=>r.all()).catch(r=>(g({action:c,category:I,label:C.DATABASE_ERROR},r,e),[]))},z=(e,{conversationId:n,includeAll:a=!1,isDirect:i})=>{const c="getConversationUsers",{databaseName:u,session:{userId:t}}=e,o=["c.userId == u._key"];a||o.push(`u._key != ${t}`),i&&o.push(`p.vertices[0].isDirect == ${i}`);const s=R`FOR u, e,p IN 1..1 INBOUND ${`conversations/${n}`} hasConversation
13
- OPTIONS {vertexCollections: "users"}
14
- FILTER ${o.join(" && ")}
15
- RETURN u`;return d(u).query(s).then(r=>r.all()).catch(r=>(g({action:c,category:I,label:C.DATABASE_ERROR},r,e),[]))},J=(e,n)=>{const a="getItem",{databaseName:i,session:{userId:c}}=e,u=`users/${c}`,t=`conversations/${v(n)}`,o=R`FOR c, e IN 1..1 OUTBOUND ${u} hasConversation
16
- FILTER c._id == ${t}
17
- LET u = (
18
- FOR inUser, inEdge IN 1..1 INBOUND ${t} hasConversation
19
- RETURN inUser
20
- )
21
- LIMIT 1
22
- RETURN MERGE(c, {users: u})`;return d(i).query(o).then(s=>s.next()).then(s=>s?(s.users=s.users.map(r=>{const{imageId:p,userId:m}=r,l={bucket:q.get("aws.s3.Bucket"),imageDir:"thumbs",imageId:p,type:"users",typeId:m};return{...r,name:P(r),thumb:_(l)}}),s):{}).catch(s=>g({action:a,category:I,label:C.DATABASE_ERROR},s,e))},K=(e,n)=>{const a="updateConversation",{databaseName:i,session:{userId:c}}=e,{conversationId:u=T(`conversation-${c} `),isDirect:t=!1,name:o}=n,s=v(u),r=Date.now(),p={isDirect:t,modified:r,name:o},m={...O(p),_key:s,added:r},l=R`UPSERT {_key: ${s} }
23
- INSERT ${m}
24
- UPDATE ${p}
25
- IN conversations RETURN NEW`;return d(i).query(l).then(y=>y.next()).then(y=>y).catch(y=>g({action:a,category:I,label:C.DATABASE_ERROR},y,e))},X=(e,{conversationId:n,userId:a})=>{const i="addUserToConversation",{databaseName:c}=e,u=v(n),t=v(a),o=`conversations/${u}`,s=`users/${t}`,r=R`FOR hc IN hasConversation
26
- FILTER hc._from == ${s} && hc._to == ${o}
27
- LIMIT 1
28
- RETURN hc`;return d(c).query(r).then(p=>p.next()).then(p=>{if(p)return p;const m=d(c).collection("hasConversation"),l=T(`convo - ${u} -${t} `),y={_from:s,_key:l,_to:o,added:Date.now()};return m.save(y,{returnNew:!0}).then(()=>y)}).catch(p=>g({action:i,category:I,label:C.DATABASE_ERROR},p,e))},Y=(e,{conversationId:n,userId:a})=>{const i="deleteUserFromConversation",{databaseName:c}=e,u=v(n),t=v(a),o=`conversations/${u}`,s=`users/${t}`,r=R`FOR hc IN hasConversation
29
- FILTER hc._from == ${s} && hc._to == ${o}
30
- LIMIT 1
31
- REMOVE hc IN hasConversation
32
- RETURN OLD`;return d(c).query(r).then(p=>p.next()).catch(p=>g({action:i,category:I,label:C.DATABASE_ERROR},p,e))};export{F as addDirectConversation,X as addUserToConversation,Y as deleteUserFromConversation,V as getConnectionUsers,J as getConversation,z as getConversationUsers,G as getConversations,H as getDirectConversation,Q as parseConversationOptions,K as updateConversation};
33
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9jbG9uZSc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCBzb3J0SWRzLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEltYWdlVXJsfSBmcm9tICcuL2ltYWdlcy5qcyc7XG5pbXBvcnQge2dldERpc3BsYXlOYW1lLCBnZXRVc2VyfSBmcm9tICcuL3VzZXJzLmpzJztcblxuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJMaW1pdCwgRWRnZVR5cGV9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtDb25uZWN0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMvY29ubmVjdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBDb252ZXJzYXRpb25PcHRpb25zLFxuICBDb252ZXJzYXRpb25UeXBlLFxuICBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtcyxcbiAgRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zLFxuICBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG59IGZyb20gJy4uL3R5cGVzL2NvbnZlcnNhdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ltYWdlVXJsRGF0YX0gZnJvbSAnLi4vdHlwZXMvaW1hZ2VzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29udmVyc2F0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMgPSAob3B0aW9uczogQ29udmVyc2F0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9ucyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz8pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb252ZXJzYXRpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VDb252ZXJzYXRpb25PcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3VzZXJJZH1gO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EIFwiJHt1c2VyRG9jSWR9XCIgaGFzQ29udmVyc2F0aW9uXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgTEVUIHVzZXJzID0gKFxuICAgICAgRk9SIHUsIHVjIElOIDEuLjEgSU5CT1VORCBjLl9pZCBoYXNDb252ZXJzYXRpb25cbiAgICAgIEZJTFRFUiB1Ll9pZCAhPSBcIiR7dXNlckRvY0lkfVwiXG4gICAgICBSRVRVUk4gdVxuICAgIClcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1c2Vyc30pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29udmVyc2F0aW9uVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZCA9IHBhcnNlSWQoZnJvbUlkKTtcbiAgICBjb25zdCBmb3JtYXRUb0lkID0gcGFyc2VJZCh0b0lkKTtcbiAgICBjb25zdCB1c2VySWRzID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkcyA9IHNvcnRJZHModXNlcklkcyk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG4gICAgY29uc3QgdXNlcjogVXNlclR5cGUgPSB0b1VzZXIgfHwgYXdhaXQgZ2V0VXNlcihjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgYyA9IERPQ1VNRU5UKCR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSkgUkVUVVJOIGNgO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuXG4gICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICByZXR1cm4gey4uLmNvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZERpcmVjdENvbnZlcnNhdGlvbihjb250ZXh0LCB7ZnJvbUlkLCB0b0lkLCB0b1VzZXI6IHVzZXJ9KTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBkYXRhYmFzZUVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgY29uc3QgdXNlcklkcyA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHMgPSBzb3J0SWRzKFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyKGNvbnRleHQsIHt1c2VySWQ6IGZvcm1hdFRvSWR9KTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbnMtJHtzb3J0ZWRVc2VySWRzLmpvaW4oJy0nKX1gLCBudWxsKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGluc2VydCA9IHtcbiAgICAgIF9rZXk6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgIGlzRGlyZWN0OiB0cnVlLFxuICAgICAgbW9kaWZpZWQ6IG5vd1xuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0UXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcbiAgICBjb25zdCB1cGRhdGVkQ29udmVyc2F0aW9uID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShpbnNlcnRRdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodXNlcklkcy5tYXAoKHVzZXJJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBoYXNDb252ZXJzYXRpb24tJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBFZGdlVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IGB1c2Vycy8ke3VzZXJJZH1gLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7ZWRnZX0gSU4gaGFzQ29udmVyc2F0aW9uIFJFVFVSTiBORVdgO1xuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoaW5zZXJ0RWRnZVF1ZXJ5KTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gey4uLnVwZGF0ZWRDb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGF0YWJhc2VFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbm5lY3Rpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29ubmVjdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25cbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZPUiBjIElOIGNvbm5lY3Rpb25zXG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb25uZWN0aW9uVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uVXNlcnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBpbmNsdWRlQWxsID0gZmFsc2UsXG4gICAgaXNEaXJlY3RcbiAgfTogQ29udmVyc2F0aW9uVXNlcnNQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENvbnZlcnNhdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25cbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29udmVyc2F0aW9uVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG4vLyBleHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uT2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4vLyAgIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4vLyAgIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuLy8gICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuLy8gICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQodXNlcklkKTtcblxuLy8gICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBmcm9tID0gKFxuLy8gICAgICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3Nlc3Npb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4vLyAgICAgICBGSUxURVIgYy5kaXJlY3QgPT0gdHJ1ZVxuLy8gICAgICAgUkVUVVJOIGNcbi8vICAgICApXG4vLyAgICAgTEVUIHRvID0gKFxuLy8gICAgICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke2Zvcm1hdFVzZXJJZH0gaGFzQ29udmVyc2F0aW9uXG4vLyAgICAgICBGSUxURVIgYy5kaXJlY3QgPT0gdHJ1ZVxuLy8gICAgICAgUkVUVVJOIGNcbi8vICAgICApXG4vLyAgICAgTEVUIGNvbnZlcnNhdGlvbiA9IEZJUlNUKElOVEVSU0VDVElPTihmcm9tLCB0bykpXG4vLyAgICAgTEVUIHVzZXJzID0gIUlTX05VTEwoY29udmVyc2F0aW9uKSAmJiAoXG4vLyAgICAgICBGT1IgZyBJTlske3Nlc3Npb25Eb2NJZH0sICR7Zm9ybWF0VXNlcklkfV1cbi8vICAgICAgIEZPUiB1IElOIHVzZXJzXG4vLyAgICAgICBGSUxURVIgZyA9PSB1Ll9pZFxuLy8gICAgICAgUkVUVVJOIHVcbi8vICAgICApXG4vLyAgICAgUkVUVVJOIElTX05VTEwoY29udmVyc2F0aW9uKSA/IG51bGwgOiBNRVJHRShjb252ZXJzYXRpb24sIHt1c2VyczogdXNlcnN9KWA7XG5cbi8vICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbi8vICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuLy8gICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4vLyAgICAgICBhY3Rpb24sXG4vLyAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbi8vICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4vLyAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbi8vIH07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtwYXJzZUlkKGNvbnZlcnNhdGlvbklkKX1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3Nlc3Npb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGMuX2lkID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTEVUIHUgPSAoXG4gICAgICBGT1IgaW5Vc2VyLCBpbkVkZ2UgSU4gMS4uMSBJTkJPVU5EICR7Y29udmVyc2F0aW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgICAgUkVUVVJOIGluVXNlclxuICAgIClcbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBpZighY29udmVyc2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cblxuICAgICAgY29udmVyc2F0aW9uLnVzZXJzID0gY29udmVyc2F0aW9uLnVzZXJzLm1hcCgodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgICAgY29uc3Qge2ltYWdlSWQsIHVzZXJJZH0gPSB1c2VyO1xuICAgICAgICBjb25zdCB0aHVtYlVybERhdGE6IEltYWdlVXJsRGF0YSA9IHtcbiAgICAgICAgICBidWNrZXQ6IENvbmZpZy5nZXQoJ2F3cy5zMy5CdWNrZXQnKSxcbiAgICAgICAgICBpbWFnZURpcjogJ3RodW1icycsXG4gICAgICAgICAgaW1hZ2VJZCxcbiAgICAgICAgICB0eXBlOiAndXNlcnMnLFxuICAgICAgICAgIHR5cGVJZDogdXNlcklkXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi51c2VyLFxuICAgICAgICAgIG5hbWU6IGdldERpc3BsYXlOYW1lKHVzZXIpLFxuICAgICAgICAgIHRodW1iOiBnZXRJbWFnZVVybCh0aHVtYlVybERhdGEpXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNvbnZlcnNhdGlvbjtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVDb252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZVxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3VwZGF0ZUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBpc0RpcmVjdCA9IGZhbHNlLFxuICAgIG5hbWVcbiAgfSA9IGNvbnZlcnNhdGlvbjtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBpc0RpcmVjdCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQgPSB7XG4gICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgX2tleTogZm9ybWF0Q29udmVyc2F0aW9uSWQsXG4gICAgYWRkZWQ6IG5vd1xuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke2Zvcm1hdENvbnZlcnNhdGlvbklkfSB9XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IGNvbnZlcnNhdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVXNlclRvQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgdXNlcklkXG4gIH06IFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkOiBzdHJpbmcgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBoYy5fdG8gPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGhjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoaGFzQ29udmVyc2F0aW9uRWRnZSkgPT4ge1xuICAgICAgaWYoISFoYXNDb252ZXJzYXRpb25FZGdlKSB7XG4gICAgICAgIHJldHVybiBoYXNDb252ZXJzYXRpb25FZGdlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0NvbnZlcnNhdGlvbicpO1xuICAgICAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBjb252byAtICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9IC0ke2Zvcm1hdFVzZXJJZH0gYCk7XG5cbiAgICAgIGNvbnN0IGVkZ2U6IENvbnZlcnNhdGlvblR5cGUgPSB7XG4gICAgICAgIF9mcm9tOiB1c2VyRG9jSWQsXG4gICAgICAgIF9rZXk6IGVkZ2VJZCxcbiAgICAgICAgX3RvOiBjb252ZXJzYXRpb25Eb2NJZCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvblxuICAgICAgICAuc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gZWRnZSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICB1c2VySWRcbiAgfTogVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZDogc3RyaW5nID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtmb3JtYXRDb252ZXJzYXRpb25JZH1gO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFTU9WRSBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBUSxhQUFBQSxNQUFnQiw2QkFDeEIsT0FBUSxjQUFBQyxFQUFZLFdBQUFDLE1BQWMsK0JBQ2xDLE9BQVEsT0FBQUMsTUFBVSxXQUNsQixPQUFRLFVBQUFDLE1BQWEsZUFDckIsT0FBUSxjQUFBQyxNQUFpQiwwQkFDekIsT0FBUSxZQUFBQyxNQUFlLDZCQUN2QixPQUFRLFlBQUFDLEVBQVUsV0FBQUMsRUFBUyxTQUFBQyxNQUFZLDRCQUN2QyxPQUFRLGVBQUFDLE1BQWtCLGNBQzFCLE9BQVEsa0JBQUFDLEVBQWdCLFdBQUFDLE1BQWMsYUFpQnRDLE1BQU1DLEVBQXdCLGdCQUVqQkMsRUFBMkIsQ0FBQ0MsRUFBK0IsQ0FBQyxJQUFNLENBQzdFLEtBQU0sQ0FDSixLQUFBQyxFQUFPLEVBQ1AsR0FBQUMsRUFBSyxFQUNQLEVBQUlGLEVBRUosTUFBTyxDQUNMLE1BQU9SLEVBQVNTLEVBQU1DLENBQUUs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akQsRUFDQSxDQUNFLGVBQUFnQixFQUNBLE9BQUFmLENBQ0YsSUFDOEIsQ0FDOUIsTUFBTUMsRUFBaUIsNkJBQ2pCLENBQUMsYUFBQUMsQ0FBWSxFQUFJSCxFQUNqQjBDLEVBQStCM0QsRUFBUWlDLENBQWMsRUFDckQ4QixFQUF1Qi9ELEVBQVFrQixDQUFNLEVBQ3JDb0MsRUFBNEIsaUJBQWlCSyxDQUFvQixHQUNqRXJDLEVBQW9CLFNBQVN5QyxDQUFZLEdBRXpDeEMsRUFBbUJ0QjtBQUFBLHlCQUNGcUIsQ0FBUyxpQkFBaUJnQyxDQUFpQjtBQUFBO0FBQUE7QUFBQSxnQkFLbEUsT0FBTy9DLEVBQU1hLENBQVksRUFBRSxNQUFNRyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLE1BQU9DLEdBQWlCckIsRUFBUyxDQUNoQyxPQUFBZSxFQUNBLFNBQVVSLEVBQ1YsTUFBT1IsRUFBVyxjQUNwQixFQUFHc0IsRUFBT1IsQ0FBTyxDQUFDLENBQ3RCIiwKICAibmFtZXMiOiBbImNsb25lRGVlcCIsICJjcmVhdGVIYXNoIiwgInBhcnNlSWQiLCAiYXFsIiwgIkNvbmZpZyIsICJFcnJvclR5cGVzIiwgImxvZ0Vycm9yIiwgImdldExpbWl0IiwgInNvcnRJZHMiLCAidXNlRGIiLCAiZ2V0SW1hZ2VVcmwiLCAiZ2V0RGlzcGxheU5hbWUiLCAiZ2V0VXNlciIsICJldmVudENhdGVnb3J5IiwgInBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyIsICJvcHRpb25zIiwgImZyb20iLCAidG8iLCAiZ2V0Q29udmVyc2F0aW9ucyIsICJjb250ZXh0IiwgInVzZXJJZCIsICJhY3Rpb24iLCAiZGF0YWJhc2VOYW1lIiwgImxpbWl0IiwgInVzZXJEb2NJZCIsICJhcWxRcnkiLCAiY3Vyc29yIiwgImVycm9yIiwgImdldERpcmVjdENvbnZlcnNhdGlvbiIsICJmcm9tSWQiLCAidG9JZCIsICJ0b1VzZXIiLCAiZm9ybWF0RnJvbUlkIiwgImZvcm1hdFRvSWQiLCAic29ydGVkVXNlcklkcyIsICJjb252ZXJzYXRpb25JZCIsICJ1c2VyIiwgImNvbnZlcnNhdGlvbiIsICJhZGREaXJlY3RDb252ZXJzYXRpb24iLCAiZGF0YWJhc2VFcnJvciIsICJ1c2VySWRzIiwgIm5vdyIsICJpbnNlcnRRdWVyeSIsICJ1cGRhdGVkQ29udmVyc2F0aW9uIiwgImVkZ2VJZCIsICJlZGdlIiwgImluc2VydEVkZ2VRdWVyeSIsICJnZXRDb25uZWN0aW9uVXNlcnMiLCAiaW5jbHVkZUFsbCIsICJpc0RpcmVjdCIsICJzZXNzaW9uVXNlcklkIiwgImZpbHRlcnMiLCAiZ2V0Q29udmVyc2F0aW9uVXNlcnMiLCAiZ2V0Q29udmVyc2F0aW9uIiwgInNlc3Npb25JZCIsICJzZXNzaW9uRG9jSWQiLCAiY29udmVyc2F0aW9uRG9jSWQiLCAiaW1hZ2VJZCIsICJ0aHVtYlVybERhdGEiLCAidXBkYXRlQ29udmVyc2F0aW9uIiwgIm5hbWUiLCAiZm9ybWF0Q29udmVyc2F0aW9uSWQiLCAidXBkYXRlIiwgImluc2VydCIsICJhZGRVc2VyVG9Db252ZXJzYXRpb24iLCAiZm9ybWF0VXNlcklkIiwgImhhc0NvbnZlcnNhdGlvbkVkZ2UiLCAiZWRnZUNvbGxlY3Rpb24iLCAiZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24iXQp9Cg==
@@ -1,2 +0,0 @@
1
- import{DynamoDB as s}from"@aws-sdk/client-dynamodb";import{Config as d}from"../config.js";const U=n=>new Promise((m,o)=>{const r=new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")});n.ConsistentRead=!1,r.getItem(n,(e,t)=>e?o(e):m(t))}),c=n=>{const{Items:m=[]}=n,o=[];for(let r=0,e=m.length;r<e;r++){const t=m[r],u={};let a;for(a in t)t.hasOwnProperty(a)&&(t[a].S?u[a]=t[a].S.toString():t[a].N?u[a]=parseFloat(t[a].N):u[a]=t[a].B);o.push(u)}return o},C=(n,m)=>new Promise((o,r)=>{const e=new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}),{ConsistentRead:t}=n,u={...n};m&&(u.ExclusiveStartKey=m),t||(u.ConsistentRead=!1);const a=[];e.query(u,(i,p)=>{if(i)return r(i);a.push(...c(p)||[]);const{LastEvaluatedKey:I}=p;return I!==void 0?C(n,I):o(a)})}),W=n=>new Promise((m,o)=>{new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}).putItem(n,(e,t)=>e?o(e):m(t))}),Q=n=>new Promise((m,o)=>{new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}).updateItem(n,(e,t)=>e?o(e):m(t))}),L=n=>new Promise((m,o)=>{new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}).batchWriteItem(n,(e,t)=>e?o(e):m(t))}),R=n=>new Promise((m,o)=>{new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}).deleteItem(n,(e,t)=>e?o(e):m(t))});export{R as dynamoDel,U as dynamoGet,C as dynamoGetList,W as dynamoPut,L as dynamoPutList,Q as dynamoUpdate,c as parseDynamoList};
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZHluYW1vZGIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1xuICBCYXRjaFdyaXRlSXRlbUNvbW1hbmRJbnB1dCxcbiAgQmF0Y2hXcml0ZUl0ZW1Db21tYW5kT3V0cHV0LFxuICBEZWxldGVJdGVtQ29tbWFuZElucHV0LFxuICBEZWxldGVJdGVtQ29tbWFuZE91dHB1dCxcbiAgRHluYW1vREIsXG4gIEdldEl0ZW1Db21tYW5kSW5wdXQsXG4gIEdldEl0ZW1Db21tYW5kT3V0cHV0LFxuICBQdXRJdGVtQ29tbWFuZElucHV0LFxuICBQdXRJdGVtQ29tbWFuZE91dHB1dCxcbiAgUXVlcnlDb21tYW5kSW5wdXQsXG4gIFF1ZXJ5Q29tbWFuZE91dHB1dCxcbiAgVXBkYXRlSXRlbUNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlSXRlbUNvbW1hbmRPdXRwdXRcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdkeW5hbW9kYic7XG5leHBvcnQgY29uc3QgZHluYW1vR2V0ID0gKHBhcmFtczogR2V0SXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0SXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuICAgIHBhcmFtcy5Db25zaXN0ZW50UmVhZCA9IGZhbHNlO1xuXG4gICAgZHluYW1vZGIuZ2V0SXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3VsdHM6IEdldEl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEeW5hbW9MaXN0ID0gKHJlc3VsdHM6IFF1ZXJ5Q29tbWFuZE91dHB1dCk6IGFueVtdID0+IHtcbiAgY29uc3Qge0l0ZW1zOiBpdGVtcyA9IFtdfSA9IHJlc3VsdHM7XG4gIGNvbnN0IGRhdGE6IGFueVtdID0gW107XG5cblxuICBmb3IobGV0IGlkeDogbnVtYmVyID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpZHggPCBsZW47IGlkeCsrKSB7XG4gICAgY29uc3QgdG1wID0gaXRlbXNbaWR4XTtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yKGtleSBpbiB0bXApIHtcbiAgICAgIGlmKHRtcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGlmKHRtcFtrZXldLlMpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHRtcFtrZXldLlMudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmKHRtcFtrZXldLk4pIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHBhcnNlRmxvYXQodG1wW2tleV0uTik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2tleV0gPSB0bXBba2V5XS5CO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGF0YS5wdXNoKG9iaik7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9HZXRMaXN0ID0gKHBhcmFtczogUXVlcnlDb21tYW5kSW5wdXQsIHN0YXJ0SXRlbT8pOiBQcm9taXNlPEdldEl0ZW1Db21tYW5kT3V0cHV0W10+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuICAgIGNvbnN0IHtDb25zaXN0ZW50UmVhZDogY29uc2lzdGVudFJlYWR9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHVwZGF0ZWRQYXJhbXMgPSB7Li4ucGFyYW1zfTtcblxuICAgIGlmKHN0YXJ0SXRlbSkge1xuICAgICAgdXBkYXRlZFBhcmFtcy5FeGNsdXNpdmVTdGFydEtleSA9IHN0YXJ0SXRlbTtcbiAgICB9XG5cbiAgICBpZighY29uc2lzdGVudFJlYWQpIHtcbiAgICAgIHVwZGF0ZWRQYXJhbXMuQ29uc2lzdGVudFJlYWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ID0gW107XG5cbiAgICBkeW5hbW9kYi5xdWVyeSh1cGRhdGVkUGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IFF1ZXJ5Q29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaCguLi4ocGFyc2VEeW5hbW9MaXN0KG91dHB1dCkgfHwgW10pKTtcblxuICAgICAgY29uc3Qge0xhc3RFdmFsdWF0ZWRLZXk6IGxhc3RLZXl9ID0gb3V0cHV0O1xuXG4gICAgICBpZihsYXN0S2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGR5bmFtb0dldExpc3QocGFyYW1zLCBsYXN0S2V5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUobGlzdCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vUHV0ID0gKHBhcmFtczogUHV0SXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8UHV0SXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuXG4gICAgZHluYW1vZGIucHV0SXRlbShwYXJhbXMsIChlcnJvciwgb3V0cHV0OiBQdXRJdGVtQ29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb1VwZGF0ZSA9IChwYXJhbXM6IFVwZGF0ZUl0ZW1Db21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUl0ZW1Db21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcblxuICAgIGR5bmFtb2RiLnVwZGF0ZUl0ZW0ocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IFVwZGF0ZUl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vUHV0TGlzdCA9IChwYXJhbXM6IEJhdGNoV3JpdGVJdGVtQ29tbWFuZElucHV0KTogUHJvbWlzZTxCYXRjaFdyaXRlSXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuXG4gICAgZHluYW1vZGIuYmF0Y2hXcml0ZUl0ZW0ocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IEJhdGNoV3JpdGVJdGVtQ29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb0RlbCA9IChwYXJhbXM6IERlbGV0ZUl0ZW1Db21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZUl0ZW1Db21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcblxuICAgIGR5bmFtb2RiLmRlbGV0ZUl0ZW0ocGFyYW1zLCAoZXJyb3IsIG91dHB1dDogRGVsZXRlSXRlbUNvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUtFLFlBQUFBLE1BU0ssMkJBRVAsT0FBUSxVQUFBQyxNQUFhLGVBR2QsTUFBTUMsRUFBYUMsR0FDeEIsSUFBSSxRQUFRLENBQUNDLEVBQVNDLElBQVcsQ0FDL0IsTUFBTUMsRUFBVyxJQUFJTixFQUFTLENBQzVCLFlBQWFDLEVBQU8sSUFBSSxpQkFBaUIsRUFDekMsT0FBUUEsRUFBTyxJQUFJLFlBQVksQ0FDakMsQ0FBQyxFQUNERSxFQUFPLGVBQWlCLEdBRXhCRyxFQUFTLFFBQVFILEVBQVEsQ0FBQ0ksRUFBY0MsSUFDbkNELEVBQ01GLEVBQU9FLENBQUssRUFHZEgsRUFBUUksQ0FBTyxDQUN2QixDQUNILENBQUMsRUFFVUMsRUFBbUJELEdBQXVDLENBQ3JFLEtBQU0sQ0FBQyxNQUFPRSxFQUFRLENBQUMsQ0FBQyxFQUFJRixFQUN0QkcsRUFBYyxDQUFDLEVBR3JCLFFBQVFDLEVBQWMsRUFBR0MsRUFBTUgsRUFBTSxPQUFRRSxFQUFNQyxFQUFLRCxJQUFPLENBQzdELE1BQU1FLEVBQU1KLEVBQU1FLENBQUcsRUFDZkcsRUFBTSxDQUFDLEVBQ2IsSUFBSUMsRUFFSixJQUFJQSxLQUFPRixFQUNOQSxFQUFJLGVBQWVFLENBQUcsSUFDcEJGLEVBQUlFLENBQUcsRUFBRSxFQUNWRCxFQUFJQyxDQUFHLEVBQUlGLEVBQUlFLENBQUcsRUFBRSxFQUFFLFNBQVMsRUFDdkJGLEVBQUlFLENBQUcsRUFBRSxFQUNqQkQsRUFBSUMsQ0FBRyxFQUFJLFdBQVdGLEVBQUlFLENBQUcsRUFBRSxDQUFDLEVBRWhDRCxFQUFJQyxDQUFHLEVBQUlGLEVBQUlFLENBQUcsRUFBRSxHQUsxQkwsRUFBSyxLQUFLSSxDQUFHLENBQ2YsQ0FFQSxPQUFPSixDQUNULEVBRWFNLEVBQWdCLENBQUNkLEVBQTJCZSxJQUN2RCxJQUFJLFFBQVEsQ0FBQ2QsRUFBU0MsSUFBVyxDQUMvQixNQUFNQyxFQUFXLElBQUlOLEVBQVMsQ0FDNUIsWUFBYUMsRUFBTyxJQUFJLGlCQUFpQixFQUN6QyxPQUFRQSxFQUFPLElBQUksWUFBWSxDQUNqQyxDQUFDLEVBQ0ssQ0FBQyxlQUFnQmtCLENBQWMsRUFBSWhCLEVBQ25DaUIsRUFBZ0IsQ0FBQyxHQUFHakIsQ0FBTSxFQUU3QmUsSUFDREUsRUFBYyxrQkFBb0JGLEdBR2hDQyxJQUNGQyxFQUFjLGVBQWlCLElBR2pDLE1BQU1DLEVBQU8sQ0FBQyxFQUVkZixFQUFTLE1BQU1jLEVBQWUsQ0FBQ2IsRUFBY2UsSUFBK0IsQ0FDMUUsR0FBR2YsRUFDRCxPQUFPRixFQUFPRSxDQUFLLEVBR3JCYyxFQUFLLEtBQUssR0FBSVosRUFBZ0JhLENBQU0sR0FBSyxDQUFDLENBQUUsRUFFNUMsS0FBTSxDQUFDLGlCQUFrQkMsQ0FBTyxFQUFJRCxFQUVwQyxPQUFHQyxJQUFZLE9BQ05OLEVBQWNkLEVBQVFvQixDQUFPLEVBRy9CbkIsRUFBUWlCLENBQUksQ0FDckIsQ0FBQyxDQUNILENBQUMsRUFFVUcsRUFBYXJCLEdBQ3hCLElBQUksUUFBUSxDQUFDQyxFQUFTQyxJQUFXLENBQ2QsSUFBSUwsRUFBUyxDQUM1QixZQUFhQyxFQUFPLElBQUksaUJBQWlCLEVBQ3pDLE9BQVFBLEVBQU8sSUFBSSxZQUFZLENBQ2pDLENBQUMsRUFFUSxRQUFRRSxFQUFRLENBQUNJLEVBQU9lLElBQzVCZixFQUNNRixFQUFPRSxDQUFLLEVBRWRILEVBQVFrQixDQUFNLENBQ3RCLENBQ0gsQ0FBQyxFQUVVRyxFQUFnQnRCLEdBQzNCLElBQUksUUFBUSxDQUFDQyxFQUFTQyxJQUFXLENBQ2QsSUFBSUwsRUFBUyxDQUM1QixZQUFhQyxFQUFPLElBQUksaUJBQWlCLEVBQ3pDLE9BQVFBLEVBQU8sSUFBSSxZQUFZLENBQ2pDLENBQUMsRUFFUSxXQUFXRSxFQUFRLENBQUNJLEVBQWNlLElBQ3RDZixFQUNNRixFQUFPRSxDQUFLLEVBRWRILEVBQVFrQixDQUFNLENBQ3RCLENBQ0gsQ0FBQyxFQUVVSSxFQUFpQnZCLEdBQzVCLElBQUksUUFBUSxDQUFDQyxFQUFTQyxJQUFXLENBQ2QsSUFBSUwsRUFBUyxDQUM1QixZQUFhQyxFQUFPLElBQUksaUJBQWlCLEVBQ3pDLE9BQVFBLEVBQU8sSUFBSSxZQUFZLENBQ2pDLENBQUMsRUFFUSxlQUFlRSxFQUFRLENBQUNJLEVBQWNlLElBQzFDZixFQUNNRixFQUFPRSxDQUFLLEVBRWRILEVBQVFrQixDQUFNLENBQ3RCLENBQ0gsQ0FBQyxFQUVVSyxFQUFheEIsR0FDeEIsSUFBSSxRQUFRLENBQUNDLEVBQVNDLElBQVcsQ0FDZCxJQUFJTCxFQUFTLENBQzVCLFlBQWFDLEVBQU8sSUFBSSxpQkFBaUIsRUFDekMsT0FBUUEsRUFBTyxJQUFJLFlBQVksQ0FDakMsQ0FBQyxFQUVRLFdBQVdFLEVBQVEsQ0FBQ0ksRUFBT2UsSUFDL0JmLEVBQ01GLEVBQU9FLENBQUssRUFFZEgsRUFBUWtCLENBQU0sQ0FDdEIsQ0FDSCxDQUFDIiwKICAibmFtZXMiOiBbIkR5bmFtb0RCIiwgIkNvbmZpZyIsICJkeW5hbW9HZXQiLCAicGFyYW1zIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImR5bmFtb2RiIiwgImVycm9yIiwgInJlc3VsdHMiLCAicGFyc2VEeW5hbW9MaXN0IiwgIml0ZW1zIiwgImRhdGEiLCAiaWR4IiwgImxlbiIsICJ0bXAiLCAib2JqIiwgImtleSIsICJkeW5hbW9HZXRMaXN0IiwgInN0YXJ0SXRlbSIsICJjb25zaXN0ZW50UmVhZCIsICJ1cGRhdGVkUGFyYW1zIiwgImxpc3QiLCAib3V0cHV0IiwgImxhc3RLZXkiLCAiZHluYW1vUHV0IiwgImR5bmFtb1VwZGF0ZSIsICJkeW5hbW9QdXRMaXN0IiwgImR5bmFtb0RlbCJdCn0K
@@ -1,2 +0,0 @@
1
- import{SES as c}from"@aws-sdk/client-ses";import{Config as o}from"../config.js";import{logError as d}from"../utils/analyticsUtils.js";const l="email",u=s=>new Promise((e,a)=>{new c({credentials:{accessKeyId:o.get("aws.credentials.accessKeyId"),secretAccessKey:o.get("aws.credentials.secretAccessKey")},region:o.get("aws.region")}).sendEmail(s,(t,n)=>t?a(t):e(n))}),C=s=>{const{context:e,html:a,subject:r,text:t,user:n}=s,m={Destination:{ToAddresses:[n.email]},Message:{Body:{Html:{Data:a},Text:{Data:t}},Subject:{Data:r}},Source:`"${e.config.details.supportName}" <${e.config.details.supportEmail}>`};return u(m).then(()=>!0).catch(i=>(d({action:"sendEmail",category:l},i,e),!1))};export{C as sendEmail,u as sesSend};
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZW1haWwudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1NlbmRFbWFpbENvbW1hbmRJbnB1dCwgU2VuZEVtYWlsQ29tbWFuZE91dHB1dCwgU0VTfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VzJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge0VtYWlsVHlwZX0gZnJvbSAnLi4vdHlwZXMvZW1haWwudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnZW1haWwnO1xuXG5leHBvcnQgY29uc3Qgc2VzU2VuZCA9IChwYXJhbXM6IFNlbmRFbWFpbENvbW1hbmRJbnB1dCk6IFByb21pc2U8U2VuZEVtYWlsQ29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcyA9IG5ldyBTRVMoe1xuICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCcpLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXknKVxuICAgICAgfSxcbiAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgfSk7XG5cbiAgICBzZXMuc2VuZEVtYWlsKHBhcmFtcywgKGVycm9yOiBFcnJvciwgcmVzcG9uc2U6IFNlbmRFbWFpbENvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3Qgc2VuZEVtYWlsID0gKHBhcmFtczogRW1haWxUeXBlKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb250ZXh0LFxuICAgIGh0bWwsXG4gICAgc3ViamVjdCxcbiAgICB0ZXh0LFxuICAgIHVzZXJcbiAgfSA9IHBhcmFtcztcblxuICBjb25zdCB0byA9IFt1c2VyLmVtYWlsXTtcbiAgY29uc3QgZW1haWxQYXJhbXM6IFNlbmRFbWFpbENvbW1hbmRJbnB1dCA9IHtcbiAgICBEZXN0aW5hdGlvbjoge1RvQWRkcmVzc2VzOiB0b30sXG4gICAgTWVzc2FnZToge1xuICAgICAgQm9keToge1xuICAgICAgICBIdG1sOiB7RGF0YTogaHRtbH0sXG4gICAgICAgIFRleHQ6IHtEYXRhOiB0ZXh0fVxuICAgICAgfSxcbiAgICAgIFN1YmplY3Q6IHtEYXRhOiBzdWJqZWN0fVxuICAgIH0sXG4gICAgU291cmNlOiBgXCIke2NvbnRleHQuY29uZmlnLmRldGFpbHMuc3VwcG9ydE5hbWV9XCIgPCR7Y29udGV4dC5jb25maWcuZGV0YWlscy5zdXBwb3J0RW1haWx9PmBcbiAgfTtcblxuICByZXR1cm4gc2VzU2VuZChlbWFpbFBhcmFtcylcbiAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcihcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogJ3NlbmRFbWFpbCcsXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnlcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGNvbnRleHRcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUF1RCxPQUFBQSxNQUFVLHNCQUVqRSxPQUFRLFVBQUFDLE1BQWEsZUFFckIsT0FBUSxZQUFBQyxNQUFlLDZCQUV2QixNQUFNQyxFQUF3QixRQUVqQkMsRUFBV0MsR0FDdEIsSUFBSSxRQUFRLENBQUNDLEVBQVNDLElBQVcsQ0FDbkIsSUFBSVAsRUFBSSxDQUNsQixZQUFhLENBQ1gsWUFBYUMsRUFBTyxJQUFJLDZCQUE2QixFQUNyRCxnQkFBaUJBLEVBQU8sSUFBSSxpQ0FBaUMsQ0FDL0QsRUFDQSxPQUFRQSxFQUFPLElBQUksWUFBWSxDQUNqQyxDQUFDLEVBRUcsVUFBVUksRUFBUSxDQUFDRyxFQUFjQyxJQUNoQ0QsRUFDTUQsRUFBT0MsQ0FBSyxFQUdkRixFQUFRRyxDQUFRLENBQ3hCLENBQ0gsQ0FBQyxFQUVVQyxFQUFhTCxHQUF3QyxDQUNoRSxLQUFNLENBQ0osUUFBQU0sRUFDQSxLQUFBQyxFQUNBLFFBQUFDLEVBQ0EsS0FBQUMsRUFDQSxLQUFBQyxDQUNGLEVBQUlWLEVBR0VXLEVBQXFDLENBQ3pDLFlBQWEsQ0FBQyxZQUZMLENBQUNELEVBQUssS0FBSyxDQUVTLEVBQzdCLFFBQVMsQ0FDUCxLQUFNLENBQ0osS0FBTSxDQUFDLEtBQU1ILENBQUksRUFDakIsS0FBTSxDQUFDLEtBQU1FLENBQUksQ0FDbkIsRUFDQSxRQUFTLENBQUMsS0FBTUQsQ0FBTyxDQUN6QixFQUNBLE9BQVEsSUFBSUYsRUFBUSxPQUFPLFFBQVEsV0FBVyxNQUFNQSxFQUFRLE9BQU8sUUFBUSxZQUFZLEdBQ3pGLEVBRUEsT0FBT1AsRUFBUVksQ0FBVyxFQUN2QixLQUFLLElBQU0sRUFBSSxFQUNmLE1BQU9SLElBQ05OLEVBQ0UsQ0FDRSxPQUFRLFlBQ1IsU0FBVUMsQ0FDWixFQUNBSyxFQUNBRyxDQUNGLEVBRU8sR0FDUixDQUNMIiwKICAibmFtZXMiOiBbIlNFUyIsICJDb25maWciLCAibG9nRXJyb3IiLCAiZXZlbnRDYXRlZ29yeSIsICJzZXNTZW5kIiwgInBhcmFtcyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJlcnJvciIsICJyZXNwb25zZSIsICJzZW5kRW1haWwiLCAiY29udGV4dCIsICJodG1sIiwgInN1YmplY3QiLCAidGV4dCIsICJ1c2VyIiwgImVtYWlsUGFyYW1zIl0KfQo=
@@ -1,5 +0,0 @@
1
- import{get as f}from"@nlabs/rip-hunter";import{createHash as w}from"@nlabs/utils/parsers/strings";import{aql as h}from"arangojs";import{google as $}from"googleapis";import{parseFile as E}from"../adapters/fileAdapter.js";import{Config as T}from"../config.js";import{ErrorTypes as p}from"../types/error.types.js";import{logError as y}from"../utils/analyticsUtils.js";import{useDb as c}from"../utils/arangodbUtils.js";import{resizeSaveImage as x}from"./images.js";import{createPostEdge as C}from"./posts.js";const d="files",P="http://api.giphy.com/v1/gifs",A=()=>$.youtube({auth:T.get("google.key"),version:"v3"}),R=(e,t)=>{const r="insertFile",{databaseName:o}=e,n=E(t),i=h`INSERT ${n} IN files RETURN NEW`;return c(o).query(i).then(s=>s.next()).catch(s=>y({action:r,category:d,label:p.DATABASE_ERROR},s,e))},N=(e,t)=>{const r="upsertFile",{databaseName:o}=e,n=E(t),{fileId:i}=n,s={...n,_key:i,added:Date.now(),modified:Date.now()},l={...n,_key:i,modified:Date.now()},m=h`UPSERT {_key: ${i}}
2
- INSERT ${s}
3
- UPDATE ${l}
4
- IN files RETURN NEW`;return c(o).query(m).then(a=>a.next()).then(a=>a).catch(a=>y({action:r,category:d,label:p.DATABASE_ERROR},a,e))},F=(e,t,r)=>{const{session:{userId:o}}=e,n=E(t),{description:i,fileId:s,fileType:l,name:m,url:a}=n,u=Date.now(),b=s||w(`file-${o}`);let g=m;return!g&&a&&(g=a.substring(a.lastIndexOf("/")+1)),l==="image/jpeg"||l==="image/png"?x(e,b,r,l).then(_=>R(e,{..._,_key:b,added:u,description:i,modified:u,name:g,userId:o})):R(e,{...n,added:u,modified:u,userId:o})},L=(e,t)=>{const r="addFile",{base64:o,url:n}=t;if(n)return f(n).then(i=>F(e,t,Buffer.from(i,"binary"))).catch(i=>y({action:r,category:d,label:p.FILE_REQUEST},i,e));if(o){const i=Buffer.from(o);return F(e,t,i)}return Promise.reject(new Error(p.FILE_REQUIRED))},U=e=>{const{id:t,images:{original:{url:r=""}={},fixed_height_small:{url:o=""}={}}={}}=e;return!t||!r?null:{id:t,thumb:o,type:"giphy",url:r}},z=(e=30)=>{const t=`${P}/trending?api_key=${T.get("giphy.key")}&limit=${e}`;return f(t).then(r=>r.json()).then(r=>r?.data?.map(U).filter(o=>!!o))},H=(e,t=30)=>{const r=encodeURI(e),o=`${P}/search?q=${r}&api_key=${T.get("giphy.key")}&limit=${t}`;return f(o).then(n=>n.json()).then(n=>n?.data?.map(U).filter(i=>!!i))},V=(e=30)=>{const t=A();return new Promise((r,o)=>{t.videos.list({chart:"mostPopular",maxResults:e,part:["snippet"],regionCode:"US"},(n,i)=>{if(n)o(new Error(p.YOUTUBE_ERROR));else if(i){const s=i.items.map(l=>({id:l.id,thumb:l.snippet.thumbnails.high.url,type:"youtube",url:`http://www.youtube.com/embed/${l.id}`}));r(s)}})})},W=(e,t=30)=>{const r=A();return new Promise((o,n)=>{r.search.list({maxResults:t,part:["snippet"],q:e,regionCode:"US"},(i,s)=>{if(i)n(new Error(p.YOUTUBE_ERROR));else if(s){const{items:l}=s,m=l.map(a=>({id:a.id,thumb:a.snippet.thumbnails.high.url,type:"youtube",url:`http://www.youtube.com/embed/${a.id}`}));o(m)}})})},K=(e,t)=>`users/${e}/files/${t}`,I=(e,t,r)=>Promise.all(r.map(o=>N(e,o).then(n=>C(e,t,n.id,"isPosted",{type:n.fileType})))),M=(e,t,r)=>{const o="updateFiles",{databaseName:n}=e;return c(n).collection("isPosted").inEdges(t,{}).then(s=>s.length?Promise.all(s.map(l=>{const{_key:m}=l,a=h`REMOVE {_key:${m}} IN isPosted`;return c(n).query(a).catch(u=>{throw u})})).then(()=>r.length?I(e,t,r).then(()=>r):[]):r.length?I(e,t,r).then(()=>r):r).catch(s=>y({action:o,category:d,label:p.DATABASE_ERROR},s,e))},Z=e=>Buffer.from(e).toString("base64"),J=e=>{const t=o=>o.match(/^data:([A-Za-z-+/]+);base64,(.+)$/)||[];let r=t(e);if(r.length!==3&&(r=t(decodeURIComponent(e)),r.length!==3))throw Error(p.INVALID_INPUT);return{data:Buffer.from(r[2],"base64"),type:r[1]}};export{P as GIPHY_URL,L as addFile,J as decodeBase64,Z as encodeBase64,H as getGiphySearch,z as getGiphyTrends,K as getPathUserFiles,A as getYouTube,W as getYouTubeSearch,V as getYouTubeTrends,R as insertFile,I as linkFiles,U as parseGiphyItem,M as updateFiles,F as uploadFile,N as upsertFile};
5
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZmlsZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2dldCBhcyBodHRwR2V0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQge2dvb2dsZX0gZnJvbSAnZ29vZ2xlYXBpcyc7XG5cbmltcG9ydCB7cGFyc2VGaWxlfSBmcm9tICcuLi9hZGFwdGVycy9maWxlQWRhcHRlci5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7RmlsZVR5cGV9IGZyb20gJy4uL3R5cGVzL2ZpbGVzLnR5cGVzLmpzJztcbmltcG9ydCB7SW1hZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9pbWFnZXMudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge3Jlc2l6ZVNhdmVJbWFnZX0gZnJvbSAnLi9pbWFnZXMuanMnO1xuaW1wb3J0IHtjcmVhdGVQb3N0RWRnZX0gZnJvbSAnLi9wb3N0cy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnZmlsZXMnO1xuXG5leHBvcnQgY29uc3QgR0lQSFlfVVJMOiBzdHJpbmcgPSAnaHR0cDovL2FwaS5naXBoeS5jb20vdjEvZ2lmcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRZb3VUdWJlID0gKCkgPT4gZ29vZ2xlLnlvdXR1YmUoe2F1dGg6IENvbmZpZy5nZXQoJ2dvb2dsZS5rZXknKSwgdmVyc2lvbjogJ3YzJ30pO1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0RmlsZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmaWxlOiBGaWxlVHlwZSkgPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnaW5zZXJ0RmlsZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0dGVkRmlsZSA9IHBhcnNlRmlsZShmaWxlKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtmb3JtYXR0ZWRGaWxlfSBJTiBmaWxlcyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBzZXJ0RmlsZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmaWxlOiBGaWxlVHlwZSk6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3Vwc2VydEZpbGUnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdHRlZEZpbGUgPSBwYXJzZUZpbGUoZmlsZSk7XG4gIGNvbnN0IHtmaWxlSWR9ID0gZm9ybWF0dGVkRmlsZTtcbiAgY29uc3QgaW5zZXJ0OiBhbnkgPSB7XG4gICAgLi4uZm9ybWF0dGVkRmlsZSxcbiAgICBfa2V5OiBmaWxlSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgfTtcbiAgY29uc3QgdXBkYXRlOiBhbnkgPSB7XG4gICAgLi4uZm9ybWF0dGVkRmlsZSxcbiAgICBfa2V5OiBmaWxlSWQsXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KClcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmaWxlSWR9fVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gZmlsZXMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVwZGF0ZWRGaWxlOiBGaWxlVHlwZSkgPT4gdXBkYXRlZEZpbGUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwbG9hZEZpbGUgPSAoY29udGV4dCwgZmlsZTogRmlsZVR5cGUsIGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdHRlZEZpbGUgPSBwYXJzZUZpbGUoZmlsZSk7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBmaWxlSWQsXG4gICAgZmlsZVR5cGUsXG4gICAgbmFtZSxcbiAgICB1cmxcbiAgfSA9IGZvcm1hdHRlZEZpbGU7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGZvcm1hdEZpbGVJZDogc3RyaW5nID0gZmlsZUlkIHx8IGNyZWF0ZUhhc2goYGZpbGUtJHtzZXNzaW9uSWR9YCk7XG4gIGxldCB1cGRhdGVkTmFtZSA9IG5hbWU7XG5cbiAgaWYoIXVwZGF0ZWROYW1lICYmICEhdXJsKSB7XG4gICAgdXBkYXRlZE5hbWUgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gIH1cblxuICBpZihmaWxlVHlwZSA9PT0gJ2ltYWdlL2pwZWcnIHx8IGZpbGVUeXBlID09PSAnaW1hZ2UvcG5nJykge1xuICAgIHJldHVybiByZXNpemVTYXZlSW1hZ2UoY29udGV4dCwgZm9ybWF0RmlsZUlkLCBidWZmZXIsIGZpbGVUeXBlKVxuICAgICAgLnRoZW4oKHJlc2l6ZWRJbWFnZTogRmlsZVR5cGUpID0+IGluc2VydEZpbGUoY29udGV4dCwge1xuICAgICAgICAuLi5yZXNpemVkSW1hZ2UsXG4gICAgICAgIF9rZXk6IGZvcm1hdEZpbGVJZCxcbiAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIG5hbWU6IHVwZGF0ZWROYW1lLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIGluc2VydEZpbGUoY29udGV4dCwge1xuICAgIC4uLmZvcm1hdHRlZEZpbGUsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEZpbGUgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZmlsZTogRmlsZVR5cGUpOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRGaWxlJztcbiAgY29uc3Qge2Jhc2U2NCwgdXJsfSA9IGZpbGU7XG5cbiAgaWYoISF1cmwpIHtcbiAgICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgICAudGhlbigoYm9keSkgPT4gdXBsb2FkRmlsZShjb250ZXh0LCBmaWxlLCBCdWZmZXIuZnJvbShib2R5LCAnYmluYXJ5JykpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuRklMRV9SRVFVRVNUXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYoISFiYXNlNjQpIHtcbiAgICBjb25zdCBidWZmZXI6IEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhc2U2NCk7XG4gICAgcmV0dXJuIHVwbG9hZEZpbGUoY29udGV4dCwgZmlsZSwgYnVmZmVyKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoRXJyb3JUeXBlcy5GSUxFX1JFUVVJUkVEKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VHaXBoeUl0ZW0gPSAoZ2lmSW1hZ2U6IGFueSk6IEltYWdlVHlwZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICBpbWFnZXM6IHtcbiAgICAgIG9yaWdpbmFsOiB7dXJsID0gJyd9ID0ge30sXG4gICAgICBmaXhlZF9oZWlnaHRfc21hbGw6IHt1cmw6IHRodW1iID0gJyd9ID0ge31cbiAgICB9ID0ge31cbiAgfSA9IGdpZkltYWdlO1xuXG4gIGlmKCFpZCB8fCAhdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIHRodW1iLFxuICAgIHR5cGU6ICdnaXBoeScsXG4gICAgdXJsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2lwaHlUcmVuZHMgPSAobGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBnaWZVcmwgPSBgJHtHSVBIWV9VUkx9L3RyZW5kaW5nP2FwaV9rZXk9JHtDb25maWcuZ2V0KCdnaXBoeS5rZXknKX0mbGltaXQ9JHtsaW1pdH1gO1xuXG4gIHJldHVybiBodHRwR2V0KGdpZlVybClcbiAgICAudGhlbigocmVzOiBSZXNwb25zZSkgPT4gcmVzLmpzb24oKSlcbiAgICAudGhlbigoanNvbjogYW55KSA9PiBqc29uPy5kYXRhPy5tYXAocGFyc2VHaXBoeUl0ZW0pLmZpbHRlcigoaXRlbSkgPT4gISFpdGVtKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2lwaHlTZWFyY2ggPSAocXVlcnk6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBmb3JtYXRRdWVyeSA9IGVuY29kZVVSSShxdWVyeSk7XG4gIGNvbnN0IGdpZlVybCA9IGAke0dJUEhZX1VSTH0vc2VhcmNoP3E9JHtmb3JtYXRRdWVyeX0mYXBpX2tleT0ke0NvbmZpZy5nZXQoJ2dpcGh5LmtleScpfSZsaW1pdD0ke2xpbWl0fWA7XG5cbiAgcmV0dXJuIGh0dHBHZXQoZ2lmVXJsKVxuICAgIC50aGVuKChyZXM6IFJlc3BvbnNlKSA9PiByZXMuanNvbigpKVxuICAgIC50aGVuKChqc29uOiBhbnkpID0+IGpzb24/LmRhdGE/Lm1hcChwYXJzZUdpcGh5SXRlbSkuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRZb3VUdWJlVHJlbmRzID0gKGxpbWl0OiBudW1iZXIgPSAzMCk6IFByb21pc2U8YW55W10+ID0+IHtcbiAgLy8gY29uc3QgYWN0aW9uID0gJ2dldFlvdVR1YmVUcmVuZHMnO1xuICBjb25zdCB5b3V0dWJlID0gZ2V0WW91VHViZSgpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgeW91dHViZS52aWRlb3MubGlzdCh7XG4gICAgICBjaGFydDogJ21vc3RQb3B1bGFyJyxcbiAgICAgIG1heFJlc3VsdHM6IGxpbWl0LFxuICAgICAgcGFydDogWydzbmlwcGV0J10sXG4gICAgICByZWdpb25Db2RlOiAnVVMnXG4gICAgfSwgKGVycm9yOiBFcnJvciwgZGF0YTogYW55KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihFcnJvclR5cGVzLllPVVRVQkVfRVJST1IpKTtcbiAgICAgIH0gZWxzZSBpZihkYXRhKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBkYXRhLml0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICB0aHVtYjogaXRlbS5zbmlwcGV0LnRodW1ibmFpbHMuaGlnaC51cmwsXG4gICAgICAgICAgdHlwZTogJ3lvdXR1YmUnLFxuICAgICAgICAgIHVybDogYGh0dHA6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtpdGVtLmlkfWBcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHJlc29sdmUobGlzdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFlvdVR1YmVTZWFyY2ggPSAocXVlcnk6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxhbnlbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb24gPSAnZ2V0WW91VHViZVNlYXJjaCc7XG4gIGNvbnN0IHlvdXR1YmUgPSBnZXRZb3VUdWJlKCk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB5b3V0dWJlLnNlYXJjaC5saXN0KHtcbiAgICAgIG1heFJlc3VsdHM6IGxpbWl0LFxuICAgICAgcGFydDogWydzbmlwcGV0J10sXG4gICAgICBxOiBxdWVyeSxcbiAgICAgIHJlZ2lvbkNvZGU6ICdVUydcbiAgICB9LCAoZXJyb3I6IEVycm9yLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKEVycm9yVHlwZXMuWU9VVFVCRV9FUlJPUikpO1xuICAgICAgfSBlbHNlIGlmKGRhdGEpIHtcbiAgICAgICAgY29uc3Qge2l0ZW1zfSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBpdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgdGh1bWI6IGl0ZW0uc25pcHBldC50aHVtYm5haWxzLmhpZ2gudXJsLFxuICAgICAgICAgIHR5cGU6ICd5b3V0dWJlJyxcbiAgICAgICAgICB1cmw6IGBodHRwOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7aXRlbS5pZH1gXG4gICAgICAgIH0pKTtcblxuICAgICAgICByZXNvbHZlKGxpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYXRoVXNlckZpbGVzID0gKHVzZXJJZDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nID0+IGB1c2Vycy8ke3VzZXJJZH0vZmlsZXMvJHtmaWxlbmFtZX1gO1xuXG5leHBvcnQgY29uc3QgbGlua0ZpbGVzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nLCBmaWxlczogRmlsZVR5cGVbXSk6IFByb21pc2U8YW55PiA9PlxuICBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoKGZpbGU6IEZpbGVUeXBlKSA9PiB1cHNlcnRGaWxlKGNvbnRleHQsIGZpbGUpXG4gICAgICAudGhlbigoZmlsZTogRmlsZVR5cGUpID0+IGNyZWF0ZVBvc3RFZGdlKGNvbnRleHQsIHBvc3REb2NJZCwgZmlsZS5pZCwgJ2lzUG9zdGVkJywge3R5cGU6IGZpbGUuZmlsZVR5cGV9KSkpXG4gICk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWxlcyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0RG9jSWQ6IHN0cmluZywgZmlsZXM6IEZpbGVUeXBlW10pOiBQcm9taXNlPGFueT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlRmlsZXMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaXNQb3N0ZWQnKTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uaW5FZGdlcyhwb3N0RG9jSWQsIHt9KVxuICAgIC50aGVuKChlZGdlczogYW55KSA9PiB7XG4gICAgICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGlzUG9zdGVkYDtcblxuICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxpbmtGaWxlcyhjb250ZXh0LCBwb3N0RG9jSWQsIGZpbGVzKS50aGVuKCgpID0+IGZpbGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGlua0ZpbGVzKGNvbnRleHQsIHBvc3REb2NJZCwgZmlsZXMpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gZmlsZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsZXM7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5jb2RlQmFzZTY0ID0gKGJ1ZmZlcjogQnVmZmVyKTogc3RyaW5nID0+IEJ1ZmZlci5mcm9tKGJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG5leHBvcnQgY29uc3QgZGVjb2RlQmFzZTY0ID0gKGRhdGFTdHJpbmc6IHN0cmluZyk6IGFueSA9PiB7XG4gIC8vIGNvbnN0IGFjdGlvbiA9ICdkZWNvZGVCYXNlNjQnO1xuICBjb25zdCBnZXREYXRhID0gKHN0cjogc3RyaW5nKSA9PiBzdHIubWF0Y2goL15kYXRhOihbQS1aYS16LSsvXSspO2Jhc2U2NCwoLispJC8pIHx8IFtdO1xuICBsZXQgbWF0Y2hlcyA9IGdldERhdGEoZGF0YVN0cmluZyk7XG5cbiAgaWYobWF0Y2hlcy5sZW5ndGggIT09IDMpIHtcbiAgICBtYXRjaGVzID0gZ2V0RGF0YShkZWNvZGVVUklDb21wb25lbnQoZGF0YVN0cmluZykpO1xuXG4gICAgaWYobWF0Y2hlcy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9JTlBVVCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhOiBCdWZmZXIuZnJvbShtYXRjaGVzWzJdLCAnYmFzZTY0JyksXG4gICAgdHlwZTogbWF0Y2hlc1sxXVxuICB9O1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQVEsT0FBT0EsTUFBYyxvQkFDN0IsT0FBUSxjQUFBQyxNQUFpQiwrQkFDekIsT0FBUSxPQUFBQyxNQUFVLFdBRWxCLE9BQVEsVUFBQUMsTUFBYSxhQUVyQixPQUFRLGFBQUFDLE1BQWdCLDZCQUN4QixPQUFRLFVBQUFDLE1BQWEsZUFFckIsT0FBUSxjQUFBQyxNQUFpQiwwQkFHekIsT0FBUSxZQUFBQyxNQUFlLDZCQUN2QixPQUFRLFNBQUFDLE1BQVksNEJBQ3BCLE9BQVEsbUJBQUFDLE1BQXNCLGNBQzlCLE9BQVEsa0JBQUFDLE1BQXFCLGFBSTdCLE1BQU1DLEVBQXdCLFFBRWpCQyxFQUFvQiwrQkFFcEJDLEVBQWEsSUFBTVYsRUFBTyxRQUFRLENBQUMsS0FBTUUsRUFBTyxJQUFJLFlBQVksRUFBRyxRQUFTLElBQUksQ0FBQyxFQUVqRlMsRUFBYSxDQUFDQyxFQUFxQkMsSUFBbUIsQ0FDakUsTUFBTUMsRUFBUyxhQUNULENBQUMsYUFBQUMsQ0FBWSxFQUFJSCxFQUNqQkksRUFBZ0JmLEVBQVVZLENBQUksRUFDOUJJLEVBQW1CbEIsV0FBYWlCLENBQWEsdUJBRW5ELE9BQU9YLEVBQU1VLENBQVksRUFBRSxNQUFNRSxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLE1BQU9DLEdBQWlCZixFQUFTLENBQ2hDLE9BQUFVLEVBQ0EsU0FBVU4sRUFDVixNQUFPTCxFQUFXLGNBQ3BCLEVBQUdnQixFQUFPUCxDQUFPLENBQUMsQ0FDdEIsRUFFYVEsRUFBYSxDQUFDUixFQUFxQkMsSUFBc0MsQ0FDcEYsTUFBTUMsRUFBUyxhQUNULENBQUMsYUFBQUMsQ0FBWSxFQUFJSCxFQUNqQkks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LEVBQU0sSUFBS0MsR0FBUyxDQUNsQixLQUFNLENBQUMsS0FBTUMsQ0FBTyxFQUFJRCxFQUNsQm5ELEVBQW1CbEIsaUJBQW1Cc0UsQ0FBTyxnQkFFbkQsT0FBT2hFLEVBQU1VLENBQVksRUFBRSxNQUFNRSxDQUFNLEVBQ3BDLE1BQU9FLEdBQWlCLENBQ3ZCLE1BQU1BLENBQ1IsQ0FBQyxDQUNMLENBQUMsQ0FBQyxFQUNELEtBQUssSUFDRDhDLEVBQU0sT0FDQUYsRUFBVW5ELEVBQVNvRCxFQUFXQyxDQUFLLEVBQUUsS0FBSyxJQUFNQSxDQUFLLEVBR3ZELENBQUMsQ0FDVCxFQUNLQSxFQUFNLE9BQ1BGLEVBQVVuRCxFQUFTb0QsRUFBV0MsQ0FBSyxFQUN2QyxLQUFLLElBQU1BLENBQUssRUFHZEEsQ0FDUixFQUNBLE1BQU85QyxHQUFpQmYsRUFBUyxDQUNoQyxPQUFBVSxFQUNBLFNBQVVOLEVBQ1YsTUFBT0wsRUFBVyxjQUNwQixFQUFHZ0IsRUFBT1AsQ0FBTyxDQUFDLENBQ3RCLEVBRWEwRCxFQUFnQjVDLEdBQTJCLE9BQU8sS0FBS0EsQ0FBTSxFQUFFLFNBQVMsUUFBUSxFQUVoRjZDLEVBQWdCQyxHQUE0QixDQUV2RCxNQUFNQyxFQUFXQyxHQUFnQkEsRUFBSSxNQUFNLG1DQUFtQyxHQUFLLENBQUMsRUFDcEYsSUFBSUMsRUFBVUYsRUFBUUQsQ0FBVSxFQUVoQyxHQUFHRyxFQUFRLFNBQVcsSUFDcEJBLEVBQVVGLEVBQVEsbUJBQW1CRCxDQUFVLENBQUMsRUFFN0NHLEVBQVEsU0FBVyxHQUNwQixNQUFNLE1BQU14RSxFQUFXLGFBQWEsRUFJeEMsTUFBTyxDQUNMLEtBQU0sT0FBTyxLQUFLd0UsRUFBUSxDQUFDLEVBQUcsUUFBUSxFQUN0QyxLQUFNQSxFQUFRLENBQUMsQ0FDakIsQ0FDRiIsCiAgIm5hbWVzIjogWyJodHRwR2V0IiwgImNyZWF0ZUhhc2giLCAiYXFsIiwgImdvb2dsZSIsICJwYXJzZUZpbGUiLCAiQ29uZmlnIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAidXNlRGIiLCAicmVzaXplU2F2ZUltYWdlIiwgImNyZWF0ZVBvc3RFZGdlIiwgImV2ZW50Q2F0ZWdvcnkiLCAiR0lQSFlfVVJMIiwgImdldFlvdVR1YmUiLCAiaW5zZXJ0RmlsZSIsICJjb250ZXh0IiwgImZpbGUiLCAiYWN0aW9uIiwgImRhdGFiYXNlTmFtZSIsICJmb3JtYXR0ZWRGaWxlIiwgImFxbFFyeSIsICJjdXJzb3IiLCAiZXJyb3IiLCAidXBzZXJ0RmlsZSIsICJmaWxlSWQiLCAiaW5zZXJ0IiwgInVwZGF0ZSIsICJ1cGRhdGVkRmlsZSIsICJ1cGxvYWRGaWxlIiwgImJ1ZmZlciIsICJzZXNzaW9uSWQiLCAiZGVzY3JpcHRpb24iLCAiZmlsZVR5cGUiLCAibmFtZSIsICJ1cmwiLCAibm93IiwgImZvcm1hdEZpbGVJZCIsICJ1cGRhdGVkTmFtZSIsICJyZXNpemVkSW1hZ2UiLCAiYWRkRmlsZSIsICJiYXNlNjQiLCAiYm9keSIsICJwYXJzZUdpcGh5SXRlbSIsICJnaWZJbWFnZSIsICJpZCIsICJ0aHVtYiIsICJnZXRHaXBoeVRyZW5kcyIsICJsaW1pdCIsICJnaWZVcmwiLCAicmVzIiwgImpzb24iLCAiaXRlbSIsICJnZXRHaXBoeVNlYXJjaCIsICJxdWVyeSIsICJmb3JtYXRRdWVyeSIsICJnZXRZb3VUdWJlVHJlbmRzIiwgInlvdXR1YmUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZGF0YSIsICJsaXN0IiwgImdldFlvdVR1YmVTZWFyY2giLCAiaXRlbXMiLCAiZ2V0UGF0aFVzZXJGaWxlcyIsICJ1c2VySWQiLCAiZmlsZW5hbWUiLCAibGlua0ZpbGVzIiwgInBvc3REb2NJZCIsICJmaWxlcyIsICJ1cGRhdGVGaWxlcyIsICJlZGdlcyIsICJlZGdlIiwgImVkZ2VLZXkiLCAiZW5jb2RlQmFzZTY0IiwgImRlY29kZUJhc2U2NCIsICJkYXRhU3RyaW5nIiwgImdldERhdGEiLCAic3RyIiwgIm1hdGNoZXMiXQp9Cg==
@@ -1,52 +0,0 @@
1
- import{aql as E}from"arangojs";import{ErrorTypes as p}from"../types/error.types.js";import{logError as c}from"../utils/analyticsUtils.js";import{getLimit as A,useDb as g}from"../utils/arangodbUtils.js";import{extractTags as O,updateTagsInItem as D}from"./tags.js";import{flatten as q}from"@nlabs/utils/arrays/flatten";import{uniqBy as _}from"@nlabs/utils/arrays/uniq";import{createHash as b,parseArangoId as G,parseChar as U,parseId as d}from"@nlabs/utils/parsers/strings";const l="groups",P=(e,s,a)=>{const i="getListByApp",{databaseName:o}=e,t=`FOR g in groups
2
- LET users = (
3
- FOR u, l IN OUTBOUND g._id hasConnection
4
- RETURN MERGE (u, {type:l.type})
5
- )
6
- ${A(s,a).aql}
7
- SORT g.added
8
- RETURN DISTINCT MERGE(g, {users:users})`;return g(o).query(t).then(r=>r.all()).catch(r=>(c({action:i,category:l,label:p.DATABASE_ERROR},r,e).then(()=>null),[]))},M=(e,s,a)=>{const i="getGroupListByUser",{databaseName:o,session:{userId:n}={}}=e,t=A(s,a),r=`FOR g, e IN INBOUND "${`users/${n}`}" hasConnection
9
- LET users = (
10
- FOR u, l IN OUTBOUND g._id hasConnection
11
- RETURN MERGE (u, {type:l.type})
12
- )
13
- ${t.aql}
14
- SORT g.added
15
- RETURN DISTINCT MERGE(g, {users:users})`;return g(o).query(r).then(u=>u.all()).catch(u=>(c({action:i,category:l,label:p.DATABASE_ERROR},u,e).then(()=>null),[]))},v=(e,s,a,i)=>{const o="getListByTags",{databaseName:n}=e;return Promise.all(s.map(t=>{const r=d(t),u=A(a,i),y=`FOR p, e IN OUTBOUND "${`tags/${r}`}" isTagged
16
- FOR u IN users
17
- LET likes = (
18
- FOR post, like IN INBOUND p._id likes
19
- FILTER like.value == 'like'
20
- RETURN like
21
- )
22
- LET dislikes = (
23
- FOR post, like IN INBOUND p._id likes
24
- FILTER like.value == 'dislike'
25
- RETURN like
26
- )
27
- FILTER e.type == 'post' && p.userId == u._key
28
- ${u.aql}
29
- SORT p.added
30
- RETURN DISTINCT MERGE(p, {user:u, likes:LENGTH(likes), dislikes:LENGTH(dislikes)})`;return g(n).query(y).then(R=>R.all()).catch(R=>(c({action:o,category:l,label:p.DATABASE_ERROR},R,e).then(()=>null),[]))})).then(t=>_(q(t),r=>r._key)).catch(t=>c({action:o,category:l,label:p.DATABASE_ERROR},t,e).then(()=>null))},w=(e,s)=>{const a="getItem",{databaseName:i,session:{userId:o}}=e,n=d(s),t=E`FOR g, e IN INBOUND ${`users/${o}`} hasConnection
31
- FILTER g._key == ${n}
32
- LET users = (
33
- FOR u, l IN OUTBOUND g._id hasConnection
34
- RETURN MERGE (u, {type:l.type})
35
- )
36
- LIMIT 1
37
- RETURN DISTINCT MERGE(g, {users:users})`;return g(i).query(t).then(r=>r.next()).then(r=>r).catch(r=>c({action:a,category:l,label:p.DATABASE_ERROR},r,e).then(()=>null))},H=(e,s)=>{const a="getDetails",{databaseName:i}=e,o=d(s),n=E`FOR g IN groups
38
- FILTER g._key == ${o}
39
- LIMIT 1
40
- RETURN g`;return g(i).query(n).then(t=>t.next()).then(t=>t).catch(t=>c({action:a,category:l,label:p.DATABASE_ERROR},t,e).then(()=>null))},f=(e,s,a)=>{const i="createGroupEdge",{databaseName:o}=e,n=G(s),t=G(a),r=Date.now(),u=g(o).collection("hasConnection"),y=b(`group-${n}-${t}`),R={_from:n,_key:y,_to:t,added:r,type:"groups"};return u.save(R,{returnNew:!0}).catch(I=>c({action:i,category:l,label:p.DATABASE_ERROR},I,{session:{userId:n}}).then(()=>null))},W=(e,s)=>{const{databaseName:i,session:{userId:o}}=e,n=Date.now(),{description:t="",name:r="Untitled",type:u}=s,y=b(`group-${o}`),R=t.substr(0,640),I=U(u,16)||"private",N=E`INSERT ${{_key:y,added:n,description:R,modified:n,name:r,type:I}} IN groups RETURN NEW`;return g(i).query(N).then(T=>T.next()).then(T=>{const{_id:h}=T,L=O(R);return D(e,{itemDocId:h,tags:L}).then(()=>f(e,o,h).then(()=>T))}).catch(T=>c({action:"add",category:l,label:p.DATABASE_ERROR},T,e).then(()=>null))},j=(e,s)=>{const a="update",{databaseName:i}=e,{description:o="",id:n,name:t="Untitled"}=s,r=d(n),u=Date.now(),R={description:o.substr(0,640),modified:u,name:t},I=E`UPDATE ${r} WITH ${R} IN groups RETURN NEW`;return g(i).query(I).then(m=>m.next()).then(m=>{const{_id:N}=m,T=O(o);return D(e,{itemDocId:N,tags:T}).then(()=>m)}).catch(m=>c({action:a,category:l,label:p.DATABASE_ERROR},m,e).then(()=>null))},V=(e,s)=>{const a="delete",{databaseName:i}=e,o=d(s),n=E`FOR g IN groups
41
- FILTER g._key == ${o}
42
- REMOVE g IN groups
43
- RETURN OLD`;return g(i).query(n).then(t=>t.next()).then(t=>t).catch(t=>c({action:a,category:l,label:p.DATABASE_ERROR},t,e).then(()=>null))},z=(e,s)=>{const a="getGroupsByReaction",{databaseName:i,session:{userId:o}}=e,n=U(s,32),t=`users/${o}`,r=E`FOR u, r IN OUTBOUND ${t} hasReaction
44
- FILTER r.value == ${n}
45
- COLLECT reactionName = r.value INTO reactionItems
46
- RETURN {value: reactionName, count: LENGTH(reactionItems[*].r.value)}`;return g(i).query(r).then(u=>u.all()).catch(u=>c({action:a,category:l,label:p.DATABASE_ERROR},u,e).then(()=>null))},J=(e,s,a)=>{const i="isGrouped",{databaseName:o}=e,n=d(s),t=d(a),r=E`FOR g IN groups
47
- FILTER g._key == ${t}
48
- FOR u IN INBOUND g._id hasConnection
49
- FILTER u._key == ${n}
50
- LIMIT 1
51
- RETURN u`;return g(o).query(r).then(u=>u.all()).then((u=[])=>{const y=!!u.length;return{groupId:a,isValid:y,userId:s}}).catch(u=>c({action:i,category:l,label:p.DATABASE_ERROR},u,{session:{userId:s}}).then(()=>null))};export{W as addGroup,f as createGroupEdge,V as deleteGroup,w as getGroup,H as getGroupDetails,P as getGroupList,v as getGroupListByTags,M as getGroupListByUser,z as getGroupsByReaction,J as isGrouped,j as updateGroup};
52
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZ3JvdXBzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7R3JvdXBFZGdlVHlwZSwgR3JvdXBUeXBlLCBHcm91cFVzZXJ9IGZyb20gJy4uL3R5cGVzL2dyb3Vwcy50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2V4dHJhY3RUYWdzLCB1cGRhdGVUYWdzSW5JdGVtfSBmcm9tICcuL3RhZ3MuanMnO1xuXG5pbXBvcnQge2ZsYXR0ZW59IGZyb20gJ0BubGFicy91dGlscy9hcnJheXMvZmxhdHRlbic7XG5pbXBvcnQge3VuaXFCeX0gZnJvbSAnQG5sYWJzL3V0aWxzL2FycmF5cy91bmlxJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2dyb3Vwcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlBcHAnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EYkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgZyBpbiBncm91cHNcbiAgICAgIExFVCB1c2VycyA9IChcbiAgICAgICAgRk9SIHUsIGwgSU4gT1VUQk9VTkQgZy5faWQgaGFzQ29ubmVjdGlvblxuICAgICAgICBSRVRVUk4gTUVSR0UgKHUsIHt0eXBlOmwudHlwZX0pXG4gICAgICApXG4gICAgICAke2xpbWl0LmFxbH1cbiAgICAgIFNPUlQgZy5hZGRlZFxuICAgICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKGcsIHt1c2Vyczp1c2Vyc30pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwTGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEdyb3VwTGlzdEJ5VXNlcic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGcsIGUgSU4gSU5CT1VORCBcIiR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9XCIgaGFzQ29ubmVjdGlvblxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCBoYXNDb25uZWN0aW9uXG4gICAgICAgIFJFVFVSTiBNRVJHRSAodSwge3R5cGU6bC50eXBlfSlcbiAgICAgIClcbiAgICAgICR7bGltaXQuYXFsfVxuICAgICAgU09SVCBnLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UoZywge3VzZXJzOnVzZXJzfSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBMaXN0QnlUYWdzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0YWdzOiBzdHJpbmdbXSxcbiAgZnJvbTogbnVtYmVyLFxuICB0bzogbnVtYmVyXG4pOiBQcm9taXNlPEdyb3VwVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgIHRhZ3MubWFwKCh0YWdOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdFRhZ05hbWU6IHN0cmluZyA9IHBhcnNlSWQodGFnTmFtZSk7XG4gICAgICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgICAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwLCBlIElOIE9VVEJPVU5EIFwiJHtgdGFncy8ke2Zvcm1hdFRhZ05hbWV9YH1cIiBpc1RhZ2dlZFxuICAgICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgICAgTEVUIGxpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBMRVQgZGlzbGlrZXMgPSAoXG4gICAgICAgICAgICBGT1IgcG9zdCwgbGlrZSBJTiBJTkJPVU5EIHAuX2lkIGxpa2VzXG4gICAgICAgICAgICBGSUxURVIgbGlrZS52YWx1ZSA9PSAnZGlzbGlrZSdcbiAgICAgICAgICAgIFJFVFVSTiBsaWtlXG4gICAgICAgICAgKVxuICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gJ3Bvc3QnICYmIHAudXNlcklkID09IHUuX2tleVxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7dXNlcjp1LCBsaWtlczpMRU5HVEgobGlrZXMpLCBkaXNsaWtlczpMRU5HVEgoZGlzbGlrZXMpfSlgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcblxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgKVxuICAgIC50aGVuKChyZXN1bHRzKSA9PiB1bmlxQnkoZmxhdHRlbihyZXN1bHRzKSwgKGl0ZW06IGFueSkgPT4gaXRlbS5fa2V5KSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGcsIGUgSU4gSU5CT1VORCAke2B1c2Vycy8ke3Nlc3Npb25JZH1gfSBoYXNDb25uZWN0aW9uXG4gICAgICBGSUxURVIgZy5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCBoYXNDb25uZWN0aW9uXG4gICAgICAgIFJFVFVSTiBNRVJHRSAodSwge3R5cGU6bC50eXBlfSlcbiAgICAgIClcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwRGV0YWlscyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBncm91cElkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREZXRhaWxzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnIElOIGdyb3Vwc1xuICAgICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEdyb3VwSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gZ2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwRWRnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGdyb3VwSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxHcm91cEVkZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2NyZWF0ZUdyb3VwRWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHVzZXJJZCk7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoZ3JvdXBJZCk7XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0Nvbm5lY3Rpb24nKTtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBncm91cC0ke2Zvcm1hdFVzZXJJZH0tJHtmb3JtYXRHcm91cElkfWApO1xuXG4gIGNvbnN0IGVkZ2U6IGFueSA9IHtcbiAgICBfZnJvbTogZm9ybWF0VXNlcklkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdEdyb3VwSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB0eXBlOiAnZ3JvdXBzJ1xuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHtzZXNzaW9uOiB7dXNlcklkOiBmb3JtYXRVc2VySWR9fSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogR3JvdXBUeXBlKTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIG5hbWUgPSAnVW50aXRsZWQnLFxuICAgIHR5cGVcbiAgfTogR3JvdXBUeXBlID0gaXRlbTtcbiAgY29uc3QgaWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGdyb3VwLSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXREZXNjOiBzdHJpbmcgPSBkZXNjcmlwdGlvbi5zdWJzdHIoMCwgNjQwKTtcbiAgY29uc3QgZm9ybWF0VHlwZTogc3RyaW5nID0gcGFyc2VDaGFyKHR5cGUsIDE2KSB8fCAncHJpdmF0ZSc7XG4gIGNvbnN0IGluc2VydDogR3JvdXBUeXBlID0ge1xuICAgIF9rZXk6IGlkLFxuICAgIGFkZGVkOiBub3csXG4gICAgZGVzY3JpcHRpb246IGZvcm1hdERlc2MsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lLFxuICAgIHR5cGU6IGZvcm1hdFR5cGVcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGdyb3VwcyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4ge1xuICAgICAgLy8gVXBkYXRlIGxpbmtlZCB0YWdzXG4gICAgICBjb25zdCB7X2lkOiBncm91cERvY0lkfTogR3JvdXBUeXBlID0gZ3JvdXA7XG4gICAgICBjb25zdCB0YWdzID0gZXh0cmFjdFRhZ3MoZm9ybWF0RGVzYyk7XG5cbiAgICAgIHJldHVybiB1cGRhdGVUYWdzSW5JdGVtKGNvbnRleHQsIHtpdGVtRG9jSWQ6IGdyb3VwRG9jSWQsIHRhZ3N9KVxuICAgICAgICAudGhlbigoKSA9PiBjcmVhdGVHcm91cEVkZ2UoY29udGV4dCwgc2Vzc2lvbklkLCBncm91cERvY0lkKS50aGVuKCgpID0+IGdyb3VwKSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGUnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIGlkLFxuICAgIG5hbWUgPSAnVW50aXRsZWQnXG4gIH06IEdyb3VwVHlwZSA9IGl0ZW07XG4gIGNvbnN0IGl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpZCk7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0RGVzYzogc3RyaW5nID0gZGVzY3JpcHRpb24uc3Vic3RyKDAsIDY0MCk7XG4gIGNvbnN0IHVwZGF0ZTogYW55ID0ge1xuICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZVxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke2l0ZW1JZH0gV0lUSCAke3VwZGF0ZX0gSU4gZ3JvdXBzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2lkOiBncm91cERvY0lkfSA9IGdyb3VwO1xuXG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3NcbiAgICAgIGNvbnN0IHRhZ3MgPSBleHRyYWN0VGFncyhkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdXBkYXRlVGFnc0luSXRlbShjb250ZXh0LCB7aXRlbURvY0lkOiBncm91cERvY0lkLCB0YWdzfSkudGhlbigoKSA9PiBncm91cCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGcgSU4gZ3JvdXBzXG4gICAgICBGSUxURVIgZy5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgICAgUkVNT1ZFIGcgSU4gZ3JvdXBzXG4gICAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4gZ3JvdXApXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBzQnlSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRHcm91cHNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbjogc3RyaW5nID0gcGFyc2VDaGFyKHJlYWN0aW9uLCAzMik7XG4gIGNvbnN0IHVzZXJEb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgciBJTiBPVVRCT1VORCAke3VzZXJEb2NJZH0gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLnZhbHVlID09ICR7Zm9ybWF0UmVhY3Rpb259XG4gICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICBSRVRVUk4ge3ZhbHVlOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1gO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHcm91cGVkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVXNlcj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdpc0dyb3VwZWQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnIElOIGdyb3Vwc1xuICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRHcm91cElkfVxuICAgIEZPUiB1IElOIElOQk9VTkQgZy5faWQgaGFzQ29ubmVjdGlvblxuICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtmb3JtYXRVc2VySWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChyZXN1bHRzID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSAhIXJlc3VsdHMubGVuZ3RoO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBncm91cElkLFxuICAgICAgICBpc1ZhbGlkLFxuICAgICAgICB1c2VySWRcbiAgICAgIH07XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7c2Vzc2lvbjoge3VzZXJJZH19KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUFRLE9BQUFBLE1BQVUsV0FJbEIsT0FBUSxjQUFBQyxNQUFpQiwwQkFFekIsT0FBUSxZQUFBQyxNQUFlLDZCQUN2QixPQUFRLFlBQUFDLEVBQVUsU0FBQUMsTUFBWSw0QkFDOUIsT0FBUSxlQUFBQyxFQUFhLG9CQUFBQyxNQUF1QixZQUU1QyxPQUFRLFdBQUFDLE1BQWMsOEJBQ3RCLE9BQVEsVUFBQUMsTUFBYSwyQkFDckIsT0FBUSxjQUFBQyxFQUFZLGlCQUFBQyxFQUFlLGFBQUFDLEVBQVcsV0FBQUMsTUFBYywrQkFJNUQsTUFBTUMsRUFBd0IsU0FFakJDLEVBQWUsQ0FBQ0MsRUFBcUJDLEVBQWNDLElBQXFDLENBQ25HLE1BQU1DLEVBQWlCLGVBQ2pCLENBQUMsYUFBQUMsQ0FBWSxFQUFJSixFQUVqQkssRUFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBRE1qQixFQUFTYSxFQUFNQyxDQUFFLEVBTWxDLEdBQUc7QUFBQTtBQUFBLCtDQUlmLE9BQU9iLEVBQU1lLENBQVksRUFBRSxNQUFNQyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sSUFBSSxDQUFDLEVBQzdCLE1BQU9DLElBQ05wQixFQUFTLENBQ1AsT0FBQWdCLEVBQ0EsU0FBVUwsRUFDVixNQUFPWixFQUFXLGNBQ3BCLEVBQUdxQixFQUFPUCxDQUFPLEVBQUUsS0FBSyxJQUFNLElBQUksRUFFM0IsQ0FBQyxFQUNULENBQ0wsRUFFYVEsRUFBcUIsQ0FBQ1IsRUFBcUJDLEVBQWNDLElBQXFDLENBQ3pHLE1BQU1DLEVBQWlCLHFCQUNqQixDQUFDLGFBQUFDLEVBQWMsUUFBUyxDQUFDLE9BQVFLLENBQVMsRUFBSSxDQUFDLENBQUMsRUFBSVQsRUFDcERVLEVBQXVCdEIsRUFBU2EsRUFBTUMsQ0FBRSxFQUN4Q0csRUFBaUIsd0JBQXdCLFNBQVNJLENBQVMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLN0RDLEVBQU0sR0FBRztBQUFBO0FBQUEsK0NBSWYsT0FBT3JCLEVBQU1lLENBQVksRUFBRSxNQUFNQyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sSUFBSSxDQUFDLEVBQzdCLE1BQU9DLElBQ05wQixFQUFTLENBQ1AsT0FBQWdCLEVBQ0EsU0FBVUwsRUFDVixNQUFPWixFQUFXLGNBQ3BCLEVBQUdxQixFQUFPUCxDQUFPLEVBQUUsS0FBSyxJQUFNLElBQUksRUFFM0IsQ0FBQyxFQUNULENBQ0wsRUFFYVcsRUFBcUIsQ0FDaENYLEVBQ0FZLEVBQ0FYLEVBQ0FDLElBQ3lCLENBQ3pCLE1BQU1DLEVBQWlCLGdCQUNqQixDQUFDLGFBQUFDLENBQVksRUFBSUosRUFFdkIsT0FBTyxRQUFRLElBQ2JZLEVBQUssSUFBS0MsR0FBb0IsQ0FDNUIsTUFBTUMsRUFBd0JqQixFQUFRZ0IsQ0FBTyxFQUN2Q0gsRUFBdUJ0QixFQUFTYSxFQUFNQyxDQUFFLEVBQ3hDRyxFQUFpQix5QkFBeUIsUUFBUVMsQ0FBYSxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFhakVKLEVBQU0sR0FBRztBQUFBO0FBQUEsOEZBSWYsT0FBT3JCLEVBQU1lLENBQVksRUFBRSxNQUFNQyxDQUFNLEVBQUUsS0FBTUMsR0FBV0EsRUFBTyxJQUFJLENBQUMsRUFDbkUsTUFBT0MsSUFDTnBCLEVBQVMsQ0FDUCxPQUFBZ0IsRUFDQSxTQUFVTCxFQUNWLE1BQU9aLEVBQVcsY0FDcEIsRUFBR3FCLEVBQU9QLENBQU8sRUFBRSxLQUFLLElBQU0sSUFBSSxFQUUzQixDQUFDLEVBQ1QsQ0FDTCxDQUFDLENBQ0gsRUFDRyxLQUFNZSxHQUFZdEIsRUFBT0QsRUFBUXVCLENBQU8sRUFBSUMsR0FBY0EsRUFBSyxJQUFJLENBQUMsRUFDcEUsTUFBT1QsR0FBaUJwQixFQUFTLENBQ2hDLE9BQUFnQixFQUNBLFNBQVVMLEVBQ1YsTUFBT1osRUFBVyxjQUNwQixFQUFHcUIsRUFBT1AsQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLENBQUMsQ0FDdkMsRUFFYWlCLEVBQVcsQ0FBQ2pCLEVBQXFCa0IsSUFBdUMsQ0FDbkYsTUFBTWYsRUFBaUIsVUFDakIsQ0FBQyxhQUFBQyxFQUFjLFFBQVMsQ0FBQyxPQUFRSyxDQUFTLENBQUMsRUFBSVQsRUFDL0NtQixFQUF1QnRCLEVBQVFxQixDQUFNLEVBRXJDYixFQUFtQnBCLHdCQUEwQixTQUFTd0IsQ0FBUyxFQUFFO0FBQUEseUJBQ2hEVSxDQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtDQVFuQyxPQUFPOUIsRUFBTWUsQ0FBWSxFQUFFLE1BQU1DLENBQU0sRUFDcEMsS0FBTUMsR0FBV0EsRUFBTyxLQUFLLENBQUMsRUFDOUIsS0FBTWMsR0FBcUJBLENBQUssRUFDaEMsTUFBT2IsR0FBaUJwQixFQUFTLENBQ2hDLE9BQUFnQixFQUNBLFNBQVVMLEVBQ1YsTUFBT1osRUFBVyxjQUNwQixFQUFHcUIsRUFBT1AsQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLENBQUMsQ0FDdkMsRUFFYXFCLEVBQWtCLENBQUNyQixFQUFxQnNCLElBQXdDLENBQzNGLE1BQU1uQixFQUFpQixhQUNqQixDQUFDLGFBQUFDLENBQVksRUFBSUosRUFDakJ1QixFQUF3QjFCLEVBQVF5QixDQUFPLEVBQ3ZDakIsRUFBbUJwQjtBQUFBLHlCQUNGc0MsQ0FBYTtBQUFBO0FBQUEsZ0JBSXBDLE9BQU9sQyxFQUFNZSxDQUFZLEVBQUUsTUFBTUMsQ0FBTSxFQUNwQyxLQUFNQyxHQUFXQSxFQUFPLEtBQUssQ0FBQyxFQUM5QixLQUFNYyxHQUFxQkEsQ0FBSyxFQUNoQyxNQUFPYixHQUFpQnBCLEVBQVMsQ0FDaEMsT0FBQWdCLEVBQ0EsU0FBVUwsRUFDVixNQUFPWixFQUFXLGNBQ3BCLEVBQUdxQixFQUFPUCxDQUFPLEVBQUUsS0FBSyxJQUFNLElBQUksQ0FBQyxDQUN2QyxFQUVhd0IsRUFBa0IsQ0FDN0J4QixFQUNBeUIsRUFDQUgsSUFDMkIsQ0FDM0IsTUFBTW5CLEVBQWlCLGtCQUNqQixDQUFDLGFBQUFDLENBQVksRUFBSUosRUFDakIwQixFQUF1Qi9CLEVBQWM4QixDQUFNLEVBQzNDRixFQUF3QjVCLEVBQWMyQixDQUFPLEVBRTdDSyxFQUFjLEtBQUssSUFBSSxFQUN2QkMsRUFBaUN2QyxFQUFNZSxDQUFZLEVBQUUsV0FBVyxlQUFlLEVBQy9FeUIsRUFBaUJuQyxFQUFXLFNBQVNnQyxDQUFZLElBQUlILENBQWEsRUFBRSxFQUVwRU8sRUFBWSxDQUNoQixNQUFPSixFQUNQLEtBQU1HLEVBQ04sSUFBS04sRUFDTCxNQUFPSSxFQUNQLEtBQU0sUUFDUixFQUVBLE9BQU9DLEVBQWUsS0FBS0UsRUFBTSxDQUFDLFVBQVcsRUFBSSxDQUFDLEVBQy9DLE1BQU92QixHQUFpQnBCLEVBQVMsQ0FDaEMsT0FBQWdCLEVBQ0EsU0FBVUwsRUFDVixNQUFPWixFQUFXLGNBQ3BCLEVBQUdxQixFQUFPLENBQUMsUUFBUyxDQUFDLE9BQVFtQixDQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBTSxJQUFJLENBQUMsQ0FDakUsRUFFYUssRUFBVyxDQUFDL0IsRUFBcUJnQixJQUF3QyxDQUVwRixLQUFNLENBQUMsYUFBQVosRUFBYyxRQUFTLENBQUMsT0FBUUssQ0FBUyxDQUFDLEVBQUlULEVBQy9DMkIsRUFBYyxLQUFLLElBQUksRUFDdkIsQ0FDSixZQUFBSyxFQUFjLEdBQ2QsS0FBQUMsRUFBTyxXQUNQLEtBQUFDLENBQ0YsRUFBZWxCLEVBQ1RtQixFQUFhekMsRUFBVyxTQUFTZSxDQUFTLEVBQUUsRUFDNUMyQixFQUFxQkosRUFBWSxPQUFPLEVBQUcsR0FBRyxFQUM5Q0ssRUFBcUJ6QyxFQUFVc0MsRUFBTSxFQUFFLEdBQUssVUFTNUM3QixFQUFtQnBCLFdBUkMsQ0FDeEIsS0FBTWtELEVBQ04sTUFBT1IsRUFDUCxZQUFhUyxFQUNiLFNBQVVULEVBQ1YsS0FBQU0sRUFDQSxLQUFNSSxDQUNSLENBQzRDLHdCQUU1QyxPQUFPaEQsRUFBTWUsQ0FBWSxFQUFFLE1BQU1DLENBQU0sRUFDcEMsS0FBTUMsR0FBV0EsRUFBTyxLQUFLLENBQUMsRUFDOUIsS0FBTWMsR0FBcUIsQ0FFMUIsS0FBTSxDQUFDLElBQUtrQixDQUFVLEVBQWVsQixFQUMvQlIsRUFBT3RCLEVBQVk4QyxDQUFVLEVBRW5DLE9BQU83QyxFQUFpQlMsRUFBUyxDQUFDLFVBQVdzQyxFQUFZLEtBQUExQixDQUFJLENBQUMsRUFDM0QsS0FBSyxJQUFNWSxFQUFnQnhCLEVBQVNTLEVBQVc2QixDQUFVLEVBQUUsS0FBSyxJQUFNbEIsQ0FBSyxDQUFDLENBQ2pGLENBQUMsRUFDQSxNQUFPYixHQUFpQnBCLEVBQVMsQ0FDaEMsYUFDQSxTQUFVVyxFQUNWLE1BQU9aLEVBQVcsY0FDcEIsRUFBR3FCLEVBQU9QLENBQU8sRUFBRSxLQUFLLElBQU0sSUFBSSxDQUFDLENBQ3ZDLEVBRWF1QyxFQUFjLENBQUN2QyxFQUFxQmdCLElBQXdDLENBQ3ZGLE1BQU1iLEVBQWlCLFNBQ2pCLENBQUMsYUFBQUMsQ0FBWSxFQUFJSixFQUNqQixDQUNKLFlBQUFnQyxFQUFjLEdBQ2QsR0FBQUcsRUFDQSxLQUFBRixFQUFPLFVBQ1QsRUFBZWpCLEVBQ1RFLEVBQWlCckIsRUFBUXNDLENBQUUsRUFDM0JSLEVBQWMsS0FBSyxJQUFJLEVBRXZCYSxFQUFjLENBQ2xCLFlBRnlCUixFQUFZLE9BQU8sRUFBRyxHQUFHLEVBR2xELFNBQVVMLEVBQ1YsS0FBQU0sQ0FDRixFQUNNNUIsRUFBbUJwQixXQUFhaUMsQ0FBTSxTQUFTc0IsQ0FBTSx3QkFFM0QsT0FBT25ELEVBQU1lLENBQVksRUFBRSxNQUFNQyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLEtBQU1jLEdBQXFCLENBQzFCLEtBQU0sQ0FBQyxJQUFLa0IsQ0FBVSxFQUFJbEIsRUFHcEJSLEVBQU90QixFQUFZMEMsQ0FBVyxFQUNwQyxPQUFPekMsRUFBaUJTLEVBQVMsQ0FBQyxVQUFXc0MsRUFBWSxLQUFBMUIsQ0FBSSxDQUFDLEVBQUUsS0FBSyxJQUFNUSxDQUFLLENBQ2xGLENBQUMsRUFDQSxNQUFPYixHQUFpQnBCLEVBQVMsQ0FDaEMsT0FBQWdCLEVBQ0EsU0FBVUwsRUFDVixNQUFPWixFQUFXLGNBQ3BCLEVBQUdxQixFQUFPUCxDQUFPLEVBQUUsS0FBSyxJQUFNLElBQUksQ0FBQyxDQUN2QyxFQUVheUMsRUFBYyxDQUFDekMsRUFBcUJrQixJQUF1QyxDQUN0RixNQUFNZixFQUFpQixTQUNqQixDQUFDLGFBQUFDLENBQVksRUFBSUosRUFDakJtQixFQUF1QnRCLEVBQVFxQixDQUFNLEVBQ3JDYixFQUFtQnBCO0FBQUEseUJBQ0ZrQyxDQUFZO0FBQUE7QUFBQSxrQkFJbkMsT0FBTzlCLEVBQU1lLENBQVksRUFBRSxNQUFNQyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLEtBQU1jLEdBQXFCQSxDQUFLLEVBQ2hDLE1BQU9iLEdBQWlCcEIsRUFBUyxDQUNoQyxPQUFBZ0IsRUFDQSxTQUFVTCxFQUNWLE1BQU9aLEVBQVcsY0FDcEIsRUFBR3FCLEVBQU9QLENBQU8sRUFBRSxLQUFLLElBQU0sSUFBSSxDQUFDLENBQ3ZDLEVBRWEwQyxFQUFzQixDQUFDMUMsRUFBcUIyQyxJQUEyQyxDQUNsRyxNQUFNeEMsRUFBaUIsc0JBQ2pCLENBQUMsYUFBQUMsRUFBYyxRQUFTLENBQUMsT0FBUUssQ0FBUyxDQUFDLEVBQUlULEVBQy9DNEMsRUFBeUJoRCxFQUFVK0MsRUFBVSxFQUFFLEVBQy9DRSxFQUFvQixTQUFTcEMsQ0FBUyxHQUd0Q0osRUFBbUJwQix5QkFBMkI0RCxDQUFTO0FBQUEsMEJBQ3JDRCxDQUFjO0FBQUE7QUFBQSw2RUFJdEMsT0FBT3ZELEVBQU1lLENBQVksRUFBRSxNQUFNQyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sSUFBSSxDQUFDLEVBQzdCLE1BQU9DLEdBQWlCcEIsRUFBUyxDQUNoQyxPQUFBZ0IsRUFDQSxTQUFVTCxFQUNWLE1BQU9aLEVBQVcsY0FDcEIsRUFBR3FCLEVBQU9QLENBQU8sRUFBRSxLQUFLLElBQU0sSUFBSSxDQUFDLENBQ3ZDLEVBRWE4QyxFQUFZLENBQUM5QyxFQUFxQnlCLEVBQWdCSCxJQUF3QyxDQUNyRyxNQUFNbkIsRUFBaUIsWUFDakIsQ0FBQyxhQUFBQyxDQUFZLEVBQUlKLEVBQ2pCMEIsRUFBdUI3QixFQUFRNEIsQ0FBTSxFQUNyQ0YsRUFBd0IxQixFQUFReUIsQ0FBTyxFQUN2Q2pCLEVBQW1CcEI7QUFBQSx1QkFDSnNDLENBQWE7QUFBQTtBQUFBLHVCQUViRyxDQUFZO0FBQUE7QUFBQSxjQUlqQyxPQUFPckMsRUFBTWUsQ0FBWSxFQUFFLE1BQU1DLENBQU0sRUFDcEMsS0FBTUMsR0FBV0EsRUFBTyxJQUFJLENBQUMsRUFDN0IsS0FBSyxDQUFDUyxFQUFVLENBQUMsSUFBTSxDQUN0QixNQUFNZ0MsRUFBVSxDQUFDLENBQUNoQyxFQUFRLE9BRTFCLE1BQU8sQ0FDTCxRQUFBTyxFQUNBLFFBQUF5QixFQUNBLE9BQUF0QixDQUNGLENBQ0YsQ0FBQyxFQUNBLE1BQU9sQixHQUFpQnBCLEVBQVMsQ0FDaEMsT0FBQWdCLEVBQ0EsU0FBVUwsRUFDVixNQUFPWixFQUFXLGNBQ3BCLEVBQUdxQixFQUFPLENBQUMsUUFBUyxDQUFDLE9BQUFrQixDQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBTSxJQUFJLENBQUMsQ0FDbkQiLAogICJuYW1lcyI6IFsiYXFsIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAiZ2V0TGltaXQiLCAidXNlRGIiLCAiZXh0cmFjdFRhZ3MiLCAidXBkYXRlVGFnc0luSXRlbSIsICJmbGF0dGVuIiwgInVuaXFCeSIsICJjcmVhdGVIYXNoIiwgInBhcnNlQXJhbmdvSWQiLCAicGFyc2VDaGFyIiwgInBhcnNlSWQiLCAiZXZlbnRDYXRlZ29yeSIsICJnZXRHcm91cExpc3QiLCAiY29udGV4dCIsICJmcm9tIiwgInRvIiwgImFjdGlvbiIsICJkYXRhYmFzZU5hbWUiLCAiYXFsUXJ5IiwgImN1cnNvciIsICJlcnJvciIsICJnZXRHcm91cExpc3RCeVVzZXIiLCAic2Vzc2lvbklkIiwgImxpbWl0IiwgImdldEdyb3VwTGlzdEJ5VGFncyIsICJ0YWdzIiwgInRhZ05hbWUiLCAiZm9ybWF0VGFnTmFtZSIsICJyZXN1bHRzIiwgIml0ZW0iLCAiZ2V0R3JvdXAiLCAiaXRlbUlkIiwgImZvcm1hdEl0ZW1JZCIsICJncm91cCIsICJnZXRHcm91cERldGFpbHMiLCAiZ3JvdXBJZCIsICJmb3JtYXRHcm91cElkIiwgImNyZWF0ZUdyb3VwRWRnZSIsICJ1c2VySWQiLCAiZm9ybWF0VXNlcklkIiwgIm5vdyIsICJlZGdlQ29sbGVjdGlvbiIsICJlZGdlSWQiLCAiZWRnZSIsICJhZGRHcm91cCIsICJkZXNjcmlwdGlvbiIsICJuYW1lIiwgInR5cGUiLCAiaWQiLCAiZm9ybWF0RGVzYyIsICJmb3JtYXRUeXBlIiwgImdyb3VwRG9jSWQiLCAidXBkYXRlR3JvdXAiLCAidXBkYXRlIiwgImRlbGV0ZUdyb3VwIiwgImdldEdyb3Vwc0J5UmVhY3Rpb24iLCAicmVhY3Rpb24iLCAiZm9ybWF0UmVhY3Rpb24iLCAidXNlckRvY0lkIiwgImlzR3JvdXBlZCIsICJpc1ZhbGlkIl0KfQo=
@@ -1,66 +0,0 @@
1
- import{get as J}from"@nlabs/rip-hunter";import{parseNum as Z}from"@nlabs/utils/parsers/numbers";import{createHash as z,parseArangoId as K,parseChar as w,parseId as j}from"@nlabs/utils/parsers/strings";import{aql as v}from"arangojs";import L from"gm";import{DateTime as X}from"luxon";import{Config as O}from"../config.js";import{ErrorTypes as E}from"../types/error.types.js";import{logError as R,logException as Y}from"../utils/analyticsUtils.js";import{getDocId as ee,getLimit as _,selectReactionCountByType as te,useDb as N}from"../utils/arangodbUtils.js";import{getGroupDetails as re,isGrouped as ae}from"./groups.js";import{s3DeleteList as se,s3GetSignedUrl as ne,s3Put as G}from"./s3.js";import{lowerCaseKeys as oe}from"@nlabs/utils/parsers/objects";const f="images";L.subClass({imageMagick:"7+"});const H=(e={})=>{const{from:t=0,to:s=30,type:r="default"}=e;return{limit:_(t,s),type:w(r,32)}},W=(e=[])=>e.reduce((t,s)=>{if(s.includes("Count"))return te("images","i",s,t);switch(s){case"reactions":return t.queries.push(`LET reactions = (
2
- FOR image, r IN INBOUND i._id reactions
3
- COLLECT reactionName = r.value INTO reactionItems
4
- RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
5
- )`),t.objects.push("reactions:reactions"),t;case"tags":return t.queries.push(`LET tags = (
6
- FOR t, pl IN INBOUND i._id isTagged
7
- RETURN t
8
- )`),t.objects.push("tags:tags"),t;case"users":return t.queries.push(`LET users = FIRST(
9
- FOR u IN users
10
- FILTER i.userId == u._key
11
- LIMIT 1
12
- RETURN u
13
- )`),t.objects.push("users:users"),t;default:return t}},{objects:[],queries:[]}),be=(e,t,s=0,r=30)=>{const i="getImagesByUser",{databaseName:n}=e,a=j(t),m=_(s,r),g=`FOR i IN images
14
- FILTER i.userId == "${a}"
15
- LET user = FIRST(
16
- FOR u IN users
17
- FILTER u._key == i.userId
18
- LIMIT 1
19
- RETURN u
20
- )
21
- ${m.aql}
22
- SORT i.added
23
- RETURN MERGE(i, {user:user})`;return N(n).query(g).then(o=>o.all()).catch(o=>(R({action:i,category:f,params:{from:s,to:r,userId:t},value:E.DATABASE_ERROR},o,e),[]))},Ae=(e,t)=>{const s="getImageCountByItem",{databaseName:r}=e,i=K(t),n=v`FOR i IN hasImage
24
- FILTER i._to == ${i}
25
- RETURN {count: COUNT(i)}`;return N(r).query(n).then(a=>a.next()).then(({count:a})=>a).catch(a=>R({action:s,category:f,params:{itemId:t},value:E.DATABASE_ERROR},a,e))},Ne=async(e,t,s={})=>{const r="getImagesByItem",{databaseName:i,fields:n=[]}=e,a=K(t),{limit:m}=H(s),{objects:g,queries:o}=W(n),l=`FOR i, l IN 1..1 OUTBOUND "${a}" hasImage
26
- FILTER NOT IS_NULL(i)
27
- ${o.join(`
28
- `)}
29
- SORT i.added
30
- ${m.aql}
31
- RETURN MERGE(i, {${g.join(", ")}})`;return N(i).query(l).then(y=>y.all()).catch(y=>(R({action:r,category:f,params:{itemId:t,options:s},value:E.DATABASE_ERROR},y,e),[]))},Oe=(e,t)=>{const s="getImagesByGroup",{databaseName:r,session:{userId:i}}=e,{filters:n,groupId:a,from:m,to:g}=t,o=j(a),l=_(m,g);return n.map(y=>{const{conditional:I,name:c,value:u}=y;let p=I;switch(I!==">="&&I!=="<="&&I!==">"&&I!=="<"&&(p="=="),c){case"added":return`p.added ${p} ${Z(u)}`;default:return""}}),re(e,o).then(y=>{if(y.privacy==="public"){n.push({conditional:"==",name:"groupId",value:o});const c=`FOR i IN
32
- FLATTEN(
33
- FOR p IN posts
34
- FILTER ${n.join(" && ")}
35
- LET images = (
36
- FOR i, e IN INBOUND p._id hasImage
37
- RETURN i
38
- )
39
- SORT p.added DESC
40
- RETURN images
41
- )
42
- SORT i.added DESC
43
- ${l.aql}
44
- RETURN i`;return N(r).query(c).then(u=>u.all()).catch(u=>(R({action:s,category:f,params:{filters:n,from:m,groupId:a,to:g},value:E.DATABASE_ERROR},u,e),[]))}return ae(e,i,a).then(I=>{if(I.isValid){n.push({conditional:"==",name:"groupId",value:I.groupId});const u=`FOR p IN post
45
- FILTER ${n.join(" && ")}
46
- FOR f IN p.files
47
- FILTER f.type == "image/jpeg" || f.type == "image/png"
48
- ${l.aql}
49
- SORT p.added DESC
50
- RETURN f`;return N(r).query(u).then(p=>p.all()).catch(p=>(R({action:s,category:f,params:{filters:n,from:m,groupId:a,to:g},value:E.DATABASE_ERROR},p,e),[]))}return[]})})},$e=(e,t=[],s)=>{const r="getUsersByImage",{databaseName:i,fields:n=[],session:{userId:a}}=e,{limit:m}=H(s),{objects:g,queries:o}=W(n),l=`users/${a}`,y=t.map(u=>w(u,32)),I=['r.type == "images"',`POSITION(${JSON.stringify(y)}, LOWER(r.name))`],c=`FOR i, r IN OUTBOUND "${l}" hasReaction
51
- OPTIONS {vertexCollections: "images"}
52
- ${o.join(`
53
- `)}
54
- FILTER ${I.join(" && ")}
55
- ${m.aql}
56
- RETURN MERGE(i, {${g.join(", ")}})`;return N(i).query(c).then(u=>u.all()).catch(u=>(R({action:r,category:f,params:{options:s,reactions:t},value:E.DATABASE_ERROR},u,e),[]))},Be=(e,t)=>{const s="getItem",{databaseName:r}=e,i=j(t),n=v`FOR i IN images
57
- FILTER i._key==${i}
58
- LIMIT 1
59
- RETURN i`;return N(r).query(n).then(a=>a.next()).catch(a=>R({action:s,category:f,params:{imageId:t},value:E.DATABASE_ERROR},a,e))},M=(e,t,s,r="images")=>{let i=t;switch(s){case"image/png":i=`${t}.png`;break;default:i=`${t}.jpg`;break}return`users/${e}/${r}/${i}`},Ce=({bucket:e,directory:t="images",imageId:s,imageType:r="jpg",isThumb:i=!1,type:n,typeId:a})=>{if(!n)return"";if(!s)return r==="profile"?`${O.get("image.defaultUrl")}/users_bk.jpg`:`${O.get("image.defaultUrl")}/users_wh.jpg`;const m=e||O.get("image.bucket")||"dev.reaktor.io",g=i?`${s}-th.${r}`:`${s}.${r==="profile"||r==="other"?"jpg":r}`,o=O.get("image.url")||`https://s3.amazonaws.com/${m}`;return n==="apps"?`${o}/${n}/${t}/${g}`:`${o}/${n}/${a}/${t}/${g}`},De=async({bucket:e,imageDir:t="images",imageId:s,imageType:r="jpg",isThumb:i=!1,type:n,typeId:a,urlType:m="public"})=>{if(!s)return"";i&&(m="signed");const o=`${n}/${a}/${t}/${s}${i?"-th":""}.${r}`;switch(m){case"signed":try{const l=O.get("image.bucket")||"dev.reaktor.io";return await ne({Bucket:e||l,Expires:900,Key:o})}catch(l){throw l}case"public":return`https://box.${O.get("app.url")}/${o}`;case"dev":return`https://s3.amazonaws.com/dev.${O.get("app.url")}/${o}`;default:return""}},ie=async(e,t,s,r="image/jpeg",i)=>{const n="resizeSaveImage",{session:{userId:a}}=e,m=O.get("image.imgSize"),g=O.get("image.imgQuality"),o=r.split("/")[1],l=await new Promise((c,u)=>{L(s,"img").setFormat(o).quality(g).autoOrient().resize(m,m,">").stream((p,T)=>{if(p){u(R({action:n,category:f,params:{fileType:r,imageId:t},value:E.IMAGE_SAVE},p,e));return}let A=Buffer.from("");T.on("data",C=>{A=Buffer.concat([A,C])}),T.on("end",()=>c(A))})});try{const c={ACL:"authenticated-read",Body:l,Bucket:null,ContentType:r,...i||{},Key:M(a,t,r,"images")};await G(c)}catch(c){return R({action:n,category:f,params:{fileType:r,imageId:t},value:E.IMAGE_SAVE},c,e)}const y=await new Promise(c=>{L(l,"img").identify({bufferStream:!0},(u,p={})=>{if(u)return R({action:n,category:f,value:E.IMAGE_SAVE},u,e);const T=oe(p),{make:A,model:C,datetimeoriginal:h}=T,d=T["channel statistics"];let $;if(d){let{red:D,green:U,blue:S,mean:B}=d;D?(B=D["standard deviation"]||D.mean,D=B?+B.split(" ")[0].substring(0,3):0):D=0,U?(B=U["standard deviation"]||U.mean,U=B?+B.split(" ")[0].substring(0,3):0):U=0,S?(B=S["standard deviation"]||S.mean,S=B?+B.split(" ")[0].substring(0,3):0):S=0;const Q=(S|U<<8|D<<16).toString(16);$=Q==="0"?"000000":Q}const{"JPEG-Quality":b,Orientation:q,Resolution:F,size:k}=p;let P;if(F){const[D,U]=F.split(" ");P=`${D.split("x")[0]} ${U==="pixels/inch"?"ppi":""}`}return c({color:$,fileSize:l.length,fileType:o,height:k?.height||0,imageId:t,make:A,model:C,orientation:q==="Unknown"?void 0:q?.toLowerCase(),quality:b?+b:void 0,resolution:P,taken:h?X.fromMillis(h).millisecond:void 0,width:k?.width||0})})}),I=await new Promise((c,u)=>{const p=O.get("image.thmSize"),T=O.get("image.thmQuality");L(l,"img").setFormat(o).gravity("Center").resize(p,p,"^").extent(p,p).quality(T).stream((A,C)=>{if(A){R({action:n,category:f,params:{fileType:r,imageId:t},value:E.IMAGE_SAVE},A,e);return}let h=Buffer.from("");C.on("data",d=>{h=Buffer.concat([h,d])}),C.on("end",()=>c(h))})});try{const c={ACL:"authenticated-read",Body:I,Bucket:null,ContentType:r,...i||{},Key:M(a,t,r,"thumbs")};await G(c)}catch(c){return R({action:n,category:f,value:E.IMAGE_SAVE},c,e)}return y},x=(e,t,s)=>{const r="addImage",{databaseName:i,session:{userId:n}}=e,{imageId:a,description:m,buffer:g,fileType:o}=t,l=Date.now();return ie(e,a,g,o,s).then(y=>{const I={...y,_key:a,added:l,description:m,fileType:o,modified:l,userId:n},c=v`INSERT ${I} IN images RETURN NEW`;return N(i).query(c).then(u=>u.next()).catch(u=>R({action:r,category:f,params:{image:t,s3Options:s},value:E.DATABASE_ERROR},u,e))}).catch(y=>R({action:r,category:f,value:E.IMAGE_RESIZE},y,e))},V=async(e,t)=>{const s="addImageEdge",{databaseName:r,session:{userId:i}}=e,{imageId:n,itemId:a,itemType:m}=t,g=Date.now(),o=z(`hasImage-${n}-${a}-${i}`),l=w(m).toLowerCase(),y=j(a),I=ee(l,{_key:y}),u=`images/${j(n)}`,p={_from:I,_key:o,_to:u,added:g,itemType:m};return I?N(r).collection("hasImage").save(p,{returnNew:!0}).then(T=>N(r).collection("hasImage").document(T)).catch(T=>R({action:s,category:f,params:{edge:p,fileDocId:u,imageId:n,itemDocId:I,itemId:a,itemType:m},value:E.DATABASE_ERROR},T,e)):null},Ue=async(e,t,s)=>{const r="updateImage",{databaseName:i,session:{userId:n}}=e,{base64:a="",buffer:m,description:g="",imageId:o,itemId:l,itemType:y,fileType:I,url:c=""}=t,u=Date.now(),p=o||z(`image-${n}`),T=j(l),A=w(y,16).toLowerCase(),C={description:g,imageId:p,userId:n};if(a||m){let h=m;if(a){const b=a.substr(a.indexOf(",")+1);h=Buffer.from(b,"base64")}let d=I;if(!I){const{fileTypeFromBuffer:b}=await import("file-type"),{mime:q}=await b(h);d=q}const $={...C,buffer:h,fileType:d};return x(e,$,s).then(b=>T&&A?V(e,{imageId:p,itemId:T,itemType:A}).then(()=>b):b).catch(b=>R({action:r,category:f,value:E.IMAGE_SAVE},b,e))}else if(c!==""){let h;return J(c).then(d=>d.status!==200?Y({action:r,category:f,value:E.IMAGE_REQUEST},e):(h=d.headers.get("content-type"),d)).then(d=>d.buffer()).then(d=>{const $={...C,buffer:d,fileType:h};return x(e,$,s).then(b=>T&&A?V(e,{imageId:p,itemId:T,itemType:A}).then(()=>b):b)}).catch(d=>R({action:r,category:f,value:"fetch_error"},d,e))}else if(o!==""){const h={description:g,modified:u},d=v`UPDATE {_key: ${p}} WITH ${h} IN images RETURN NEW`;return N(i).query(d).then($=>$.next()).catch($=>R({action:r,category:f,params:{aqlQry:d,formatImageId:p,update:h},value:E.DATABASE_ERROR},$,e))}return null},Se=async(e,t)=>{const s="delete",{databaseName:r,session:{userId:i}}=e,n=j(t);try{const a=v`FOR hi IN hasImage
60
- FILTER hi._from == ${n}
61
- REMOVE hi IN hasImage
62
- RETURN OLD`;await N(r).query(a);const m=v`FOR i IN images
63
- FILTER i._key == ${n} && i.userId == ${i}
64
- REMOVE i IN images
65
- RETURN OLD`,g=await N(r).query(m).then(o=>o.next());if(g){const{_key:o}=g,l={Bucket:null,Delete:{Objects:[{Key:`users/${i}/images/${o}.jpg`},{Key:`users/${i}/thumbs/${o}.jpg`}],Quiet:!0}};return se(l).then(()=>g)}return null}catch(a){return R({action:s,category:f,params:{imageId:t},value:E.DATABASE_ERROR},a,e)}};export{x as addImage,V as addImageEdge,Se as deleteImage,Ce as getAppImageUrl,Be as getImage,Ae as getImageCountByItem,W as getImageOptional,De as getImageUrl,Oe as getImagesByGroup,Ne as getImagesByItem,$e as getImagesByReactions,be as getImagesByUser,M as getPathUserImages,H as parseImageOptions,ie as resizeSaveImage,Ue as updateImage};
66
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvaW1hZ2VzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtEZWxldGVPYmplY3RzQ29tbWFuZElucHV0LCBQdXRPYmplY3RDb21tYW5kSW5wdXR9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge2dldCBhcyBodHRwR2V0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IGdtIGZyb20gJ2dtJztcbmltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0R3JvdXBEZXRhaWxzLCBpc0dyb3VwZWR9IGZyb20gJy4vZ3JvdXBzLmpzJztcbmltcG9ydCB7czNEZWxldGVMaXN0LCBzM0dldFNpZ25lZFVybCwgczNQdXR9IGZyb20gJy4vczMuanMnO1xuXG5pbXBvcnQge2xvd2VyQ2FzZUtleXN9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL29iamVjdHMnO1xuaW1wb3J0IHR5cGUge1F1ZXJ5RmlsdGVyfSBmcm9tICcuLi90eXBlcy9hcHBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkNvbGxlY3Rpb24sIEFyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtHcm91cFR5cGUsIEdyb3VwVXNlcn0gZnJvbSAnLi4vdHlwZXMvZ3JvdXBzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtJbWFnZUVkZ2VUeXBlLCBJbWFnZUlkZW50aWZ5VHlwZSwgSW1hZ2VPcHRpb25zLCBJbWFnZVR5cGUsIEltYWdlVXJsRGF0YX0gZnJvbSAnLi4vdHlwZXMvaW1hZ2VzLnR5cGVzLmpzJztcblxuLy8gRGVmaW5lIGludGVyZmFjZSBmb3IgSFRUUCByZXNwb25zZSB3aXRoIGJ1ZmZlciBtZXRob2RcbmludGVyZmFjZSBIdHRwUmVzcG9uc2UgZXh0ZW5kcyBSZXNwb25zZSB7XG4gIGJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj47XG59XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdpbWFnZXMnO1xuZ20uc3ViQ2xhc3Moe2ltYWdlTWFnaWNrOiAnNysnfSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUltYWdlT3B0aW9ucyA9IChvcHRpb25zOiBJbWFnZU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ2RlZmF1bHQnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZU9wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgnaW1hZ2VzJywgJ2knLCBmaWVsZCwgc2VsZWN0cyk7XG4gICAgfVxuXG4gICAgc3dpdGNoKGZpZWxkKSB7XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgIEZPUiBpbWFnZSwgciBJTiBJTkJPVU5EIGkuX2lkIHJlYWN0aW9uc1xuICAgICAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFncyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCB0YWdzID0gKFxuICAgICAgICAgIEZPUiB0LCBwbCBJTiBJTkJPVU5EIGkuX2lkIGlzVGFnZ2VkXG4gICAgICAgICAgUkVUVVJOIHRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndXNlcnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdXNlcnMgPSBGSVJTVChcbiAgICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICAgIEZJTFRFUiBpLnVzZXJJZCA9PSB1Ll9rZXlcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHVcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndXNlcnM6dXNlcnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgIH1cbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VzQnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZnJvbTogbnVtYmVyID0gMCxcbiAgdG86IG51bWJlciA9IDMwXG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEltYWdlc0J5VXNlcic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EYkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgaSBJTiBpbWFnZXNcbiAgICAgIEZJTFRFUiBpLnVzZXJJZCA9PSBcIiR7Zm9ybWF0VXNlcklkfVwiXG4gICAgICBMRVQgdXNlciA9IEZJUlNUKFxuICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICBGSUxURVIgdS5fa2V5ID09IGkudXNlcklkXG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgICR7bGltaXQuYXFsfVxuICAgICAgU09SVCBpLmFkZGVkXG4gICAgICBSRVRVUk4gTUVSR0UoaSwge3VzZXI6dXNlcn0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7ZnJvbSwgdG8sIHVzZXJJZH0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUNvdW50QnlJdGVtID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SW1hZ2VDb3VudEJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGkgSU4gaGFzSW1hZ2VcbiAgICAgIEZJTFRFUiBpLl90byA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICAgIFJFVFVSTiB7Y291bnQ6IENPVU5UKGkpfWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHtjb3VudH0pID0+IGNvdW50KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2l0ZW1JZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VzQnlJdGVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogSW1hZ2VPcHRpb25zID0ge31cbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SW1hZ2VzQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW119ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUltYWdlT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0SW1hZ2VPcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgaSwgbCBJTiAxLi4xIE9VVEJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaGFzSW1hZ2VcbiAgICBGSUxURVIgTk9UIElTX05VTEwoaSlcbiAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgU09SVCBpLmFkZGVkXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgUkVUVVJOIE1FUkdFKGksIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2l0ZW1JZCwgb3B0aW9uc30sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VzQnlHcm91cCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcGFyYW1zOiB7ZmlsdGVyczogUXVlcnlGaWx0ZXJbXSwgZ3JvdXBJZDogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9XG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEltYWdlc0J5R3JvdXAnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtmaWx0ZXJzLCBncm91cElkLCBmcm9tLCB0b30gPSBwYXJhbXM7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGxpbWl0OiBBcmFuZ29EYkxpbWl0ID0gZ2V0TGltaXQoZnJvbSwgdG8pO1xuXG4gIGZpbHRlcnNcbiAgICAubWFwKChmaWx0ZXI6IFF1ZXJ5RmlsdGVyKSA9PiB7XG4gICAgICBjb25zdCB7Y29uZGl0aW9uYWwsIG5hbWUsIHZhbHVlfSA9IGZpbHRlcjtcbiAgICAgIGxldCBmb3JtYXRDb25kOiBzdHJpbmcgPSBjb25kaXRpb25hbDtcblxuICAgICAgaWYoY29uZGl0aW9uYWwgIT09ICc+PScgJiYgY29uZGl0aW9uYWwgIT09ICc8PScgJiYgY29uZGl0aW9uYWwgIT09ICc+JyAmJiBjb25kaXRpb25hbCAhPT0gJzwnKSB7XG4gICAgICAgIGZvcm1hdENvbmQgPSAnPT0nO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2gobmFtZSkge1xuICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgcmV0dXJuIGBwLmFkZGVkICR7Zm9ybWF0Q29uZH0gJHtwYXJzZU51bSh2YWx1ZSl9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIGdldEdyb3VwRGV0YWlscyhjb250ZXh0LCBmb3JtYXRHcm91cElkKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlKSA9PiB7XG4gICAgICBpZihncm91cC5wcml2YWN5ID09PSAncHVibGljJykge1xuICAgICAgICBmaWx0ZXJzLnB1c2goe2NvbmRpdGlvbmFsOiAnPT0nLCBuYW1lOiAnZ3JvdXBJZCcsIHZhbHVlOiBmb3JtYXRHcm91cElkfSk7XG4gICAgICAgIGNvbnN0IGZpbHRlclN0ciA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgaSBJTlxuICAgICAgICAgIEZMQVRURU4oXG4gICAgICAgICAgICBGT1IgcCBJTiBwb3N0c1xuICAgICAgICAgICAgRklMVEVSICR7ZmlsdGVyU3RyfVxuICAgICAgICAgICAgTEVUIGltYWdlcyA9IChcbiAgICAgICAgICAgICAgRk9SIGksIGUgSU4gSU5CT1VORCBwLl9pZCBoYXNJbWFnZVxuICAgICAgICAgICAgICBSRVRVUk4gaVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgU09SVCBwLmFkZGVkIERFU0NcbiAgICAgICAgICAgIFJFVFVSTiBpbWFnZXNcbiAgICAgICAgICApXG4gICAgICAgICAgU09SVCBpLmFkZGVkIERFU0NcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gaWA7XG5cbiAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIHBhcmFtczoge2ZpbHRlcnMsIGZyb20sIGdyb3VwSWQsIHRvfSxcbiAgICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0dyb3VwZWQoY29udGV4dCwgc2Vzc2lvbklkLCBncm91cElkKVxuICAgICAgICAudGhlbigoZ3JvdXBlZDogR3JvdXBVc2VyKSA9PiB7XG4gICAgICAgICAgaWYoZ3JvdXBlZC5pc1ZhbGlkKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2goe2NvbmRpdGlvbmFsOiAnPT0nLCBuYW1lOiAnZ3JvdXBJZCcsIHZhbHVlOiBncm91cGVkLmdyb3VwSWR9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckxpc3Q6IHN0cmluZyA9IGZpbHRlcnMuam9pbignICYmICcpO1xuICAgICAgICAgICAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdFxuICAgICAgICAgICAgICAgIEZJTFRFUiAke2ZpbHRlckxpc3R9XG4gICAgICAgICAgICAgICAgRk9SIGYgSU4gcC5maWxlc1xuICAgICAgICAgICAgICAgIEZJTFRFUiBmLnR5cGUgPT0gXCJpbWFnZS9qcGVnXCIgfHwgZi50eXBlID09IFwiaW1hZ2UvcG5nXCJcbiAgICAgICAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICAgICAgICBTT1JUIHAuYWRkZWQgREVTQ1xuICAgICAgICAgICAgICAgIFJFVFVSTiBmYDtcblxuICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge2ZpbHRlcnMsIGZyb20sIGdyb3VwSWQsIHRvfSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VzQnlSZWFjdGlvbnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IEltYWdlT3B0aW9uc1xuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRVc2Vyc0J5SW1hZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEltYWdlT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zOiBzdHJpbmdbXSA9IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICdyLnR5cGUgPT0gXCJpbWFnZXNcIicsXG4gICAgYFBPU0lUSU9OKCR7SlNPTi5zdHJpbmdpZnkoZm9ybWF0UmVhY3Rpb25zKX0sIExPV0VSKHIubmFtZSkpYF07XG5cbiAgLy8gR2V0IGRhdGEgZnJvbSBkYXRhYmFzZVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgaSwgciBJTiBPVVRCT1VORCBcIiR7Zm9ybWF0U2Vzc2lvbklkfVwiIGhhc1JlYWN0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwiaW1hZ2VzXCJ9XG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgIEZJTFRFUiAke2ZpbHRlckJ5LmpvaW4oJyAmJiAnKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gTUVSR0UoaSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7b3B0aW9ucywgcmVhY3Rpb25zfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJbWFnZUlkOiBzdHJpbmcgPSBwYXJzZUlkKGltYWdlSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBpIElOIGltYWdlc1xuICAgIEZJTFRFUiBpLl9rZXk9PSR7Zm9ybWF0SW1hZ2VJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhdGhVc2VySW1hZ2VzID0gKHVzZXJJZDogc3RyaW5nLCBpbWFnZUlkOiBzdHJpbmcsIGltYWdlVHlwZTogc3RyaW5nLCBkaXI6IHN0cmluZyA9ICdpbWFnZXMnKTogc3RyaW5nID0+IHtcbiAgbGV0IGZpbGVuYW1lOiBzdHJpbmcgPSBpbWFnZUlkO1xuXG4gIHN3aXRjaChpbWFnZVR5cGUpIHtcbiAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHtpbWFnZUlkfS5wbmdgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbGVuYW1lID0gYCR7aW1hZ2VJZH0uanBnYDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGB1c2Vycy8ke3VzZXJJZH0vJHtkaXJ9LyR7ZmlsZW5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBJbWFnZVVybCA9ICh7XG4gIGJ1Y2tldCxcbiAgZGlyZWN0b3J5ID0gJ2ltYWdlcycsXG4gIGltYWdlSWQsXG4gIGltYWdlVHlwZSA9ICdqcGcnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZFxufTogSW1hZ2VVcmxEYXRhKTogc3RyaW5nID0+IHtcbiAgaWYoIXR5cGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZighaW1hZ2VJZCkge1xuICAgIGlmKGltYWdlVHlwZSA9PT0gJ3Byb2ZpbGUnKSB7XG4gICAgICByZXR1cm4gYCR7Q29uZmlnLmdldCgnaW1hZ2UuZGVmYXVsdFVybCcpfS91c2Vyc19iay5qcGdgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7Q29uZmlnLmdldCgnaW1hZ2UuZGVmYXVsdFVybCcpfS91c2Vyc193aC5qcGdgO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCBpbWFnZU5hbWUgPSBpc1RodW1iID8gYCR7aW1hZ2VJZH0tdGguJHtpbWFnZVR5cGV9YCA6IGAke2ltYWdlSWR9LiR7aW1hZ2VUeXBlID09PSAncHJvZmlsZScgfHwgaW1hZ2VUeXBlID09PSAnb3RoZXInID8gJ2pwZycgOiBpbWFnZVR5cGV9YDtcbiAgY29uc3QgaW1hZ2VVcmwgPSBDb25maWcuZ2V0KCdpbWFnZS51cmwnKSB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gO1xuXG4gIGlmKHR5cGUgPT09ICdhcHBzJykge1xuICAgIHJldHVybiBgJHtpbWFnZVVybH0vJHt0eXBlfS8ke2RpcmVjdG9yeX0vJHtpbWFnZU5hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBgJHtpbWFnZVVybH0vJHt0eXBlfS8ke3R5cGVJZH0vJHtkaXJlY3Rvcnl9LyR7aW1hZ2VOYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VVcmwgPSBhc3luYyAoe1xuICBidWNrZXQsXG4gIGltYWdlRGlyID0gJ2ltYWdlcycsXG4gIGltYWdlSWQsXG4gIGltYWdlVHlwZSA9ICdqcGcnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdXJsVHlwZSA9ICdwdWJsaWMnXG59OiBJbWFnZVVybERhdGEpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZighaW1hZ2VJZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIEFsd2F5cyB1c2Ugc2lnbmVkIFVSTHMgZm9yIHRodW1ibmFpbHNcbiAgaWYoaXNUaHVtYikge1xuICAgIHVybFR5cGUgPSAnc2lnbmVkJztcbiAgfVxuXG4gIGNvbnN0IHRodW1iU3VmZml4ID0gaXNUaHVtYiA/ICctdGgnIDogJyc7XG4gIGNvbnN0IGltYWdlS2V5OiBzdHJpbmcgPSBgJHt0eXBlfS8ke3R5cGVJZH0vJHtpbWFnZURpcn0vJHtpbWFnZUlkfSR7dGh1bWJTdWZmaXh9LiR7aW1hZ2VUeXBlfWA7XG5cbiAgc3dpdGNoKHVybFR5cGUpIHtcbiAgICBjYXNlICdzaWduZWQnOiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWZhdWx0QnVja2V0ID0gQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgICAgICAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldCB8fCBkZWZhdWx0QnVja2V0LCBFeHBpcmVzOiA5MDAsIEtleTogaW1hZ2VLZXl9KTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIGNhc2UgJ3B1YmxpYyc6IHtcbiAgICAgIHJldHVybiBgaHR0cHM6Ly9ib3guJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9LyR7aW1hZ2VLZXl9YDtcbiAgICB9XG4gICAgY2FzZSAnZGV2Jzoge1xuICAgICAgcmV0dXJuIGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vZGV2LiR7Q29uZmlnLmdldCgnYXBwLnVybCcpfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXNpemVTYXZlSW1hZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlSWQ6IHN0cmluZyxcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGZpbGVUeXBlOiBzdHJpbmcgPSAnaW1hZ2UvanBlZycsIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAncmVzaXplU2F2ZUltYWdlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgaW1nVzogbnVtYmVyID0gQ29uZmlnLmdldCgnaW1hZ2UuaW1nU2l6ZScpO1xuICBjb25zdCBpbWdROiBudW1iZXIgPSBDb25maWcuZ2V0KCdpbWFnZS5pbWdRdWFsaXR5Jyk7XG4gIGNvbnN0IGZvcm1hdDogc3RyaW5nID0gKGZpbGVUeXBlLnNwbGl0KCcvJykpWzFdO1xuXG4gIGNvbnN0IGltYWdlT3B0aW1pemVkQnVmZmVyOiBCdWZmZXIgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZ20oYnVmZmVyLCAnaW1nJylcbiAgICAgIC5zZXRGb3JtYXQoZm9ybWF0KVxuICAgICAgLnF1YWxpdHkoaW1nUSlcbiAgICAgIC5hdXRvT3JpZW50KClcbiAgICAgIC5yZXNpemUoaW1nVywgaW1nVywgJz4nKVxuICAgICAgLnN0cmVhbSgoc3RyZWFtRXJyb3I6IEVycm9yLCBzdGRvdXQpOiB2b2lkID0+IHtcbiAgICAgICAgaWYoc3RyZWFtRXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIHBhcmFtczoge2ZpbGVUeXBlLCBpbWFnZUlkfSxcbiAgICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgICAgICAgICAgfSwgc3RyZWFtRXJyb3IsIGNvbnRleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW1hZ2VCdWZmZXI6IEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKCcnKTtcblxuICAgICAgICBzdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgIGltYWdlQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbaW1hZ2VCdWZmZXIsIGRhdGFdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3Rkb3V0Lm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKGltYWdlQnVmZmVyKSk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWFnZU9iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgICAgQUNMOiAnYXV0aGVudGljYXRlZC1yZWFkJyxcbiAgICAgIEJvZHk6IGltYWdlT3B0aW1pemVkQnVmZmVyLFxuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgICBLZXk6IGdldFBhdGhVc2VySW1hZ2VzKHNlc3Npb25JZCwgaW1hZ2VJZCwgZmlsZVR5cGUsICdpbWFnZXMnKVxuICAgIH07XG4gICAgYXdhaXQgczNQdXQoaW1hZ2VPYmopO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGltYWdlSWRlbnRpdHkgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGdtKGltYWdlT3B0aW1pemVkQnVmZmVyLCAnaW1nJylcbiAgICAgIC5pZGVudGlmeSh7YnVmZmVyU3RyZWFtOiB0cnVlfSwgKGVycm9yOiBFcnJvciwgaW1hZ2VEYXRhOiBJbWFnZUlkZW50aWZ5VHlwZSA9IHt9KSA9PiB7XG4gICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1hdFZhbHVlcyA9IGxvd2VyQ2FzZUtleXMoaW1hZ2VEYXRhKTtcbiAgICAgICAgY29uc3Qge21ha2U6IGNhbWVyYU1ha2UsIG1vZGVsOiBjYW1lcmFNb2RlbCwgZGF0ZXRpbWVvcmlnaW5hbDogdGFrZW59OiBJbWFnZUlkZW50aWZ5VHlwZSA9IGZvcm1hdFZhbHVlcztcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBmb3JtYXRWYWx1ZXNbJ2NoYW5uZWwgc3RhdGlzdGljcyddO1xuICAgICAgICBsZXQgY29sb3I6IHN0cmluZztcblxuICAgICAgICBpZihzdGF0cykge1xuICAgICAgICAgIGxldCB7cmVkLCBncmVlbiwgYmx1ZSwgbWVhbn0gPSBzdGF0cztcblxuICAgICAgICAgIGlmKHJlZCkge1xuICAgICAgICAgICAgbWVhbiA9IHJlZFsnc3RhbmRhcmQgZGV2aWF0aW9uJ10gfHwgcmVkLm1lYW47XG4gICAgICAgICAgICByZWQgPSBtZWFuID8gKygobWVhbi5zcGxpdCgnICcpWzBdKS5zdWJzdHJpbmcoMCwgMykpIDogMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVkID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihncmVlbikge1xuICAgICAgICAgICAgbWVhbiA9IGdyZWVuWydzdGFuZGFyZCBkZXZpYXRpb24nXSB8fCBncmVlbi5tZWFuO1xuICAgICAgICAgICAgZ3JlZW4gPSBtZWFuID8gKygobWVhbi5zcGxpdCgnICcpWzBdKS5zdWJzdHJpbmcoMCwgMykpIDogMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3JlZW4gPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKGJsdWUpIHtcbiAgICAgICAgICAgIG1lYW4gPSBibHVlWydzdGFuZGFyZCBkZXZpYXRpb24nXSB8fCBibHVlLm1lYW47XG4gICAgICAgICAgICBibHVlID0gbWVhbiA/ICsoKG1lYW4uc3BsaXQoJyAnKVswXSkuc3Vic3RyaW5nKDAsIDMpKSA6IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJsdWUgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJnYiA9IGJsdWUgfCAoZ3JlZW4gPDwgOCkgfCAocmVkIDw8IDE2KTtcbiAgICAgICAgICBjb25zdCByZ2JDb2xvciA9IHJnYi50b1N0cmluZygxNik7XG4gICAgICAgICAgY29sb3IgPSByZ2JDb2xvciA9PT0gJzAnID8gJzAwMDAwMCcgOiByZ2JDb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAnSlBFRy1RdWFsaXR5JzogcXVhbGl0eSxcbiAgICAgICAgICBPcmllbnRhdGlvbjogb3JpZW50YXRpb25EYXRhLFxuICAgICAgICAgIFJlc29sdXRpb246IHJlc29sdXRpb25EYXRhLFxuICAgICAgICAgIHNpemVcbiAgICAgICAgfSA9IGltYWdlRGF0YTtcbiAgICAgICAgbGV0IHJlc29sdXRpb247XG5cbiAgICAgICAgaWYocmVzb2x1dGlvbkRhdGEpIHtcbiAgICAgICAgICBjb25zdCBbcmVzb2x1dGlvbk51bWJlciwgcmVzb2x1dGlvblVuaXRdID0gcmVzb2x1dGlvbkRhdGEuc3BsaXQoJyAnKTtcbiAgICAgICAgICBjb25zdCByZXNvbHV0aW9uVmFsdWUgPSByZXNvbHV0aW9uTnVtYmVyLnNwbGl0KCd4JylbMF07XG4gICAgICAgICAgY29uc3QgcmVzb2x1dGlvblVuaXRWYWx1ZSA9IHJlc29sdXRpb25Vbml0ID09PSAncGl4ZWxzL2luY2gnID8gJ3BwaScgOiAnJztcbiAgICAgICAgICByZXNvbHV0aW9uID0gYCR7cmVzb2x1dGlvblZhbHVlfSAke3Jlc29sdXRpb25Vbml0VmFsdWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgICBjb2xvcixcbiAgICAgICAgICBmaWxlU2l6ZTogaW1hZ2VPcHRpbWl6ZWRCdWZmZXIubGVuZ3RoLFxuICAgICAgICAgIGZpbGVUeXBlOiBmb3JtYXQsXG4gICAgICAgICAgaGVpZ2h0OiBzaXplPy5oZWlnaHQgfHwgMCxcbiAgICAgICAgICBpbWFnZUlkLFxuICAgICAgICAgIG1ha2U6IGNhbWVyYU1ha2UsXG4gICAgICAgICAgbW9kZWw6IGNhbWVyYU1vZGVsLFxuICAgICAgICAgIG9yaWVudGF0aW9uOiBvcmllbnRhdGlvbkRhdGEgPT09ICdVbmtub3duJyA/IHVuZGVmaW5lZCA6IG9yaWVudGF0aW9uRGF0YT8udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBxdWFsaXR5OiBxdWFsaXR5ID8gK3F1YWxpdHkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVzb2x1dGlvbixcbiAgICAgICAgICB0YWtlbjogdGFrZW4gPyBEYXRlVGltZS5mcm9tTWlsbGlzKHRha2VuKS5taWxsaXNlY29uZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3aWR0aDogc2l6ZT8ud2lkdGggfHwgMFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9KTtcblxuICBjb25zdCB0aHVtYk9wdGltaXplZEJ1ZmZlcjogQnVmZmVyID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHRobVcgPSBDb25maWcuZ2V0KCdpbWFnZS50aG1TaXplJyk7XG4gICAgY29uc3QgdGhtUSA9IENvbmZpZy5nZXQoJ2ltYWdlLnRobVF1YWxpdHknKTtcblxuICAgIGdtKGltYWdlT3B0aW1pemVkQnVmZmVyLCAnaW1nJylcbiAgICAgIC5zZXRGb3JtYXQoZm9ybWF0KVxuICAgICAgLmdyYXZpdHkoJ0NlbnRlcicpXG4gICAgICAucmVzaXplKHRobVcsIHRobVcsICdeJylcbiAgICAgIC5leHRlbnQodGhtVywgdGhtVylcbiAgICAgIC5xdWFsaXR5KHRobVEpXG4gICAgICAuc3RyZWFtKChzdHJlYW1FcnJvcjogRXJyb3IsIHRodW1iU3Rkb3V0KTogdm9pZCA9PiB7XG4gICAgICAgIGlmKHN0cmVhbUVycm9yKSB7XG4gICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgICAgICAgfSwgc3RyZWFtRXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aHVtYkJ1ZmZlcjogQnVmZmVyID0gQnVmZmVyLmZyb20oJycpO1xuXG4gICAgICAgIHRodW1iU3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICB0aHVtYkJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RodW1iQnVmZmVyLCBkYXRhXSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRodW1iU3Rkb3V0Lm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKHRodW1iQnVmZmVyKSk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0aHVtYk9iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgICAgQUNMOiAnYXV0aGVudGljYXRlZC1yZWFkJyxcbiAgICAgIEJvZHk6IHRodW1iT3B0aW1pemVkQnVmZmVyLFxuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgICBLZXk6IGdldFBhdGhVc2VySW1hZ2VzKHNlc3Npb25JZCwgaW1hZ2VJZCwgZmlsZVR5cGUsICd0aHVtYnMnKVxuICAgIH07XG4gICAgYXdhaXQgczNQdXQodGh1bWJPYmopO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBpbWFnZUlkZW50aXR5O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEltYWdlID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZEltYWdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7aW1hZ2VJZCwgZGVzY3JpcHRpb24sIGJ1ZmZlciwgZmlsZVR5cGV9ID0gaW1hZ2U7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICByZXR1cm4gcmVzaXplU2F2ZUltYWdlKGNvbnRleHQsIGltYWdlSWQsIGJ1ZmZlciwgZmlsZVR5cGUsIHMzT3B0aW9ucylcbiAgICAudGhlbigocmVzaXplZEltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGluc2VydDogSW1hZ2VUeXBlID0ge1xuICAgICAgICAuLi5yZXNpemVkSW1hZ2UsXG4gICAgICAgIF9rZXk6IGltYWdlSWQsXG4gICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBpbWFnZXMgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgcGFyYW1zOiB7aW1hZ2UsIHMzT3B0aW9uc30sXG4gICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFU0laRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW1hZ2VFZGdlID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSk6IFByb21pc2U8b2JqZWN0PiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZEltYWdlRWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2ltYWdlSWQsIGl0ZW1JZCwgaXRlbVR5cGV9ID0gaW1hZ2VFZGdlO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIC8vIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzSW1hZ2UnKTtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBoYXNJbWFnZS0ke2ltYWdlSWR9LSR7aXRlbUlkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBpdGVtRG9jSWQ6IHN0cmluZyA9IGdldERvY0lkKGZvcm1hdEl0ZW1UeXBlLCB7X2tleTogZm9ybWF0SXRlbUlkfSk7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQ6IHN0cmluZyA9IHBhcnNlSWQoaW1hZ2VJZCk7XG4gIGNvbnN0IGZpbGVEb2NJZDogc3RyaW5nID0gYGltYWdlcy8ke2Zvcm1hdEltYWdlSWR9YDtcblxuICBjb25zdCBlZGdlOiBJbWFnZUVkZ2VUeXBlID0ge1xuICAgIF9mcm9tOiBpdGVtRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZmlsZURvY0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgaXRlbVR5cGVcbiAgfTtcblxuICBpZihpdGVtRG9jSWQpIHtcbiAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNJbWFnZScpLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAudGhlbigoZmlsZUVkZ2UpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzSW1hZ2UnKS5kb2N1bWVudChmaWxlRWRnZSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBlZGdlLFxuICAgICAgICAgIGZpbGVEb2NJZCxcbiAgICAgICAgICBpbWFnZUlkLFxuICAgICAgICAgIGl0ZW1Eb2NJZCxcbiAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgaXRlbVR5cGVcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVJbWFnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVJbWFnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGJhc2U2NCA9ICcnLFxuICAgIGJ1ZmZlcjogaW1hZ2VCdWZmZXIsXG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBpbWFnZUlkLFxuICAgIGl0ZW1JZCxcbiAgICBpdGVtVHlwZSxcbiAgICBmaWxlVHlwZSxcbiAgICB1cmwgPSAnJ1xuICB9ID0gaW1hZ2U7XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBmb3JtYXRJbWFnZUlkOiBzdHJpbmcgPSBpbWFnZUlkIHx8IGNyZWF0ZUhhc2goYGltYWdlLSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBjdXN0b21QYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBpbWFnZUlkOiBmb3JtYXRJbWFnZUlkLFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH07XG5cbiAgaWYoYmFzZTY0IHx8IGltYWdlQnVmZmVyKSB7XG4gICAgbGV0IGJ1ZmZlcjogQnVmZmVyID0gaW1hZ2VCdWZmZXI7XG5cbiAgICBpZihiYXNlNjQpIHtcbiAgICAgIGNvbnN0IGZvcm1hdEJhc2U2NDogc3RyaW5nID0gYmFzZTY0LnN1YnN0cihiYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlZEZpbGVUeXBlID0gZmlsZVR5cGU7XG5cbiAgICBpZighZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHtmaWxlVHlwZUZyb21CdWZmZXJ9ID0gYXdhaXQgaW1wb3J0KCdmaWxlLXR5cGUnKTtcbiAgICAgIGNvbnN0IHttaW1lfSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgdXBkYXRlZEZpbGVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgIGJ1ZmZlcixcbiAgICAgIGZpbGVUeXBlOiB1cGRhdGVkRmlsZVR5cGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFkZEltYWdlKGNvbnRleHQsIGltZ1BhcmFtcywgczNPcHRpb25zKVxuICAgICAgLnRoZW4oKGltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VFZGdlOiBJbWFnZUVkZ2VUeXBlID0ge1xuICAgICAgICAgICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICAgICAgICAgIGl0ZW1JZDogZm9ybWF0SXRlbUlkLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gYWRkSW1hZ2VFZGdlKGNvbnRleHQsIGltYWdlRWRnZSkudGhlbigoKSA9PiBpbWFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYodXJsICE9PSAnJykge1xuICAgIGxldCBjb250ZW50VHlwZTtcblxuICAgIHJldHVybiBodHRwR2V0KHVybClcbiAgICAgIC50aGVuKChyZXM6IEh0dHBSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfUkVRVUVTVFxuICAgICAgICAgIH0sIGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gKHJlcyBhcyBIdHRwUmVzcG9uc2UpLmJ1ZmZlcigpKVxuICAgICAgLnRoZW4oKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGltZ1BhcmFtczogSW1hZ2VUeXBlID0ge1xuICAgICAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgZmlsZVR5cGU6IGNvbnRlbnRUeXBlXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGFkZEltYWdlKGNvbnRleHQsIGltZ1BhcmFtcywgczNPcHRpb25zKVxuICAgICAgICAgIC50aGVuKChpbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICAgICAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW1hZ2VFZGdlOiBJbWFnZUVkZ2VUeXBlID0ge2ltYWdlSWQ6IGZvcm1hdEltYWdlSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGV9O1xuICAgICAgICAgICAgICByZXR1cm4gYWRkSW1hZ2VFZGdlKGNvbnRleHQsIGltYWdlRWRnZSkudGhlbigoKSA9PiBpbWFnZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogJ2ZldGNoX2Vycm9yJ1xuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKGltYWdlSWQgIT09ICcnKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBtb2RpZmllZDogbm93XG4gICAgfTtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSB7X2tleTogJHtmb3JtYXRJbWFnZUlkfX0gV0lUSCAke3VwZGF0ZX0gSU4gaW1hZ2VzIFJFVFVSTiBORVdgO1xuXG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGFxbFFyeSxcbiAgICAgICAgICBmb3JtYXRJbWFnZUlkLFxuICAgICAgICAgIHVwZGF0ZVxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUltYWdlID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGltYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZW1vdmVFZGdlUXVlcnkgPSBhcWxgRk9SIGhpIElOIGhhc0ltYWdlXG4gICAgRklMVEVSIGhpLl9mcm9tID09ICR7Zm9ybWF0SW1hZ2VJZH1cbiAgICBSRU1PVkUgaGkgSU4gaGFzSW1hZ2VcbiAgICBSRVRVUk4gT0xEYDtcblxuICAgIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkocmVtb3ZlRWRnZVF1ZXJ5KTtcblxuICAgIGNvbnN0IGFxbFF1ZXJ5ID0gYXFsYEZPUiBpIElOIGltYWdlc1xuICAgIEZJTFRFUiBpLl9rZXkgPT0gJHtmb3JtYXRJbWFnZUlkfSAmJiBpLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICBSRU1PVkUgaSBJTiBpbWFnZXNcbiAgICBSRVRVUk4gT0xEYDtcblxuICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICAgIGlmKGltYWdlKSB7XG4gICAgICBjb25zdCB7X2tleTogaW1hZ2VLZXl9ID0gaW1hZ2U7XG4gICAgICBjb25zdCBwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQgPSB7XG4gICAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgICAgRGVsZXRlOiB7XG4gICAgICAgICAgT2JqZWN0czogW1xuICAgICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS9pbWFnZXMvJHtpbWFnZUtleX0uanBnYH0sXG4gICAgICAgICAgICB7S2V5OiBgdXNlcnMvJHtzZXNzaW9uSWR9L3RodW1icy8ke2ltYWdlS2V5fS5qcGdgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgUXVpZXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHMzRGVsZXRlTGlzdChwYXJhbXMpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUtBLE9BQVEsT0FBT0EsTUFBYyxvQkFDN0IsT0FBUSxZQUFBQyxNQUFlLCtCQUN2QixPQUFRLGNBQUFDLEVBQVksaUJBQUFDLEVBQWUsYUFBQUMsRUFBVyxXQUFBQyxNQUFjLCtCQUM1RCxPQUFRLE9BQUFDLE1BQVUsV0FFbEIsT0FBT0MsTUFBUSxLQUNmLE9BQVEsWUFBQUMsTUFBZSxRQUV2QixPQUFRLFVBQUFDLE1BQWEsZUFDckIsT0FBUSxjQUFBQyxNQUFpQiwwQkFDekIsT0FBUSxZQUFBQyxFQUFVLGdCQUFBQyxNQUFtQiw2QkFDckMsT0FBUSxZQUFBQyxHQUFVLFlBQUFDLEVBQVUsNkJBQUFDLEdBQTJCLFNBQUFDLE1BQVksNEJBQ25F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dUJBQ0VpRSxDQUFhLG1CQUFtQm5CLENBQVM7QUFBQTtBQUFBLGdCQUl0RCtFLEVBQVEsTUFBTW5ILEVBQU1xQixDQUFZLEVBQUUsTUFBTTBILENBQVEsRUFBRSxLQUFNdEgsR0FBV0EsRUFBTyxLQUFLLENBQUMsRUFFdEYsR0FBRzBGLEVBQU8sQ0FDUixLQUFNLENBQUMsS0FBTTVDLENBQVEsRUFBSTRDLEVBQ25CaEYsRUFBb0MsQ0FDeEMsT0FBUSxLQUNSLE9BQVEsQ0FDTixRQUFTLENBQ1AsQ0FBQyxJQUFLLFNBQVNDLENBQVMsV0FBV21DLENBQVEsTUFBTSxFQUNqRCxDQUFDLElBQUssU0FBU25DLENBQVMsV0FBV21DLENBQVEsTUFBTSxDQUNuRCxFQUNBLE1BQU8sRUFDVCxDQUNGLEVBRUEsT0FBT3BFLEdBQWFnQyxDQUFNLEVBQUUsS0FBSyxJQUFNZ0YsQ0FBSyxDQUM5QyxDQUVBLE9BQU8sSUFDVCxPQUFRekYsRUFBTyxDQUNiLE9BQU8vQixFQUFTLENBQ2QsT0FBQXlCLEVBQ0EsU0FBVWIsRUFDVixPQUFRLENBQUMsUUFBQStDLENBQU8sRUFDaEIsTUFBTzVELEVBQVcsY0FDcEIsRUFBR2dDLEVBQU9SLENBQU8sQ0FDbkIsQ0FDRiIsCiAgIm5hbWVzIjogWyJodHRwR2V0IiwgInBhcnNlTnVtIiwgImNyZWF0ZUhhc2giLCAicGFyc2VBcmFuZ29JZCIsICJwYXJzZUNoYXIiLCAicGFyc2VJZCIsICJhcWwiLCAiZ20iLCAiRGF0ZVRpbWUiLCAiQ29uZmlnIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAibG9nRXhjZXB0aW9uIiwgImdldERvY0lkIiwgImdldExpbWl0IiwgInNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUiLCAidXNlRGIiLCAiZ2V0R3JvdXBEZXRhaWxzIiwgImlzR3JvdXBlZCIsICJzM0RlbGV0ZUxpc3QiLCAiczNHZXRTaWduZWRVcmwiLCAiczNQdXQiLCAibG93ZXJDYXNlS2V5cyIsICJldmVudENhdGVnb3J5IiwgInBhcnNlSW1hZ2VPcHRpb25zIiwgIm9wdGlvbnMiLCAiZnJvbSIsICJ0byIsICJ0eXBlIiwgImdldEltYWdlT3B0aW9uYWwiLCAiZmllbGRzIiwgInNlbGVjdHMiLCAiZmllbGQiLCAiZ2V0SW1hZ2VzQnlVc2VyIiwgImNvbnRleHQiLCAidXNlcklkIiwgImFjdGlvbiIsICJkYXRhYmFzZU5hbWUiLCAiZm9ybWF0VXNlcklkIiwgImxpbWl0IiwgImFxbFFyeSIsICJjdXJzb3IiLCAiZXJyb3IiLCAiZ2V0SW1hZ2VDb3VudEJ5SXRlbSIsICJpdGVtSWQiLCAiZm9ybWF0SXRlbUlkIiwgImNvdW50IiwgImdldEltYWdlc0J5SXRlbSIsICJzZWxlY3RPYmplY3RzIiwgInNlbGVjdFF1ZXJpZXMiLCAiZ2V0SW1hZ2VzQnlHcm91cCIsICJwYXJhbXMiLCAic2Vzc2lvbklkIiwgImZpbHRlcnMiLCAiZ3JvdXBJZCIsICJmb3JtYXRHcm91cElkIiwgImZpbHRlciIsICJjb25kaXRpb25hbCIsICJuYW1lIiwgInZhbHVlIiwgImZvcm1hdENvbmQiLCAiZ3JvdXAiLCAiZ3JvdXBlZCIsICJnZXRJbWFnZXNCeVJlYWN0aW9ucyIsICJyZWFjdGlvbnMiLCAiZm9ybWF0U2Vzc2lvbklkIiwgImZvcm1hdFJlYWN0aW9ucyIsICJyZWFjdGlvbk5hbWUiLCAiZmlsdGVyQnkiLCAiZ2V0SW1hZ2UiLCAiaW1hZ2VJZCIsICJmb3JtYXRJbWFnZUlkIiwgImdldFBhdGhVc2VySW1hZ2VzIiwgImltYWdlVHlwZSIsICJkaXIiLCAiZmlsZW5hbWUiLCAiZ2V0QXBwSW1hZ2VVcmwiLCAiYnVja2V0IiwgImRpcmVjdG9yeSIsICJpc1RodW1iIiwgInR5cGVJZCIsICJidWNrZXROYW1lIiwgImltYWdlTmFtZSIsICJpbWFnZVVybCIsICJnZXRJbWFnZVVybCIsICJpbWFnZURpciIsICJ1cmxUeXBlIiwgImltYWdlS2V5IiwgImRlZmF1bHRCdWNrZXQiLCAicmVzaXplU2F2ZUltYWdlIiwgImJ1ZmZlciIsICJmaWxlVHlwZSIsICJzM09wdGlvbnMiLCAiaW1nVyIsICJpbWdRIiwgImZvcm1hdCIsICJpbWFnZU9wdGltaXplZEJ1ZmZlciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJzdHJlYW1FcnJvciIsICJzdGRvdXQiLCAiaW1hZ2VCdWZmZXIiLCAiZGF0YSIsICJpbWFnZU9iaiIsICJpbWFnZUlkZW50aXR5IiwgImltYWdlRGF0YSIsICJmb3JtYXRWYWx1ZXMiLCAiY2FtZXJhTWFrZSIsICJjYW1lcmFNb2RlbCIsICJ0YWtlbiIsICJzdGF0cyIsICJjb2xvciIsICJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSIsICJtZWFuIiwgInJnYkNvbG9yIiwgInF1YWxpdHkiLCAib3JpZW50YXRpb25EYXRhIiwgInJlc29sdXRpb25EYXRhIiwgInNpemUiLCAicmVzb2x1dGlvbiIsICJyZXNvbHV0aW9uTnVtYmVyIiwgInJlc29sdXRpb25Vbml0IiwgInRodW1iT3B0aW1pemVkQnVmZmVyIiwgInRobVciLCAidGhtUSIsICJ0aHVtYlN0ZG91dCIsICJ0aHVtYkJ1ZmZlciIsICJ0aHVtYk9iaiIsICJhZGRJbWFnZSIsICJpbWFnZSIsICJkZXNjcmlwdGlvbiIsICJub3ciLCAicmVzaXplZEltYWdlIiwgImluc2VydCIsICJhZGRJbWFnZUVkZ2UiLCAiaW1hZ2VFZGdlIiwgIml0ZW1UeXBlIiwgImVkZ2VJZCIsICJmb3JtYXRJdGVtVHlwZSIsICJpdGVtRG9jSWQiLCAiZmlsZURvY0lkIiwgImVkZ2UiLCAiZmlsZUVkZ2UiLCAidXBkYXRlSW1hZ2UiLCAiYmFzZTY0IiwgInVybCIsICJjdXN0b21QYXJhbXMiLCAiZm9ybWF0QmFzZTY0IiwgInVwZGF0ZWRGaWxlVHlwZSIsICJmaWxlVHlwZUZyb21CdWZmZXIiLCAibWltZSIsICJpbWdQYXJhbXMiLCAiY29udGVudFR5cGUiLCAicmVzIiwgInVwZGF0ZSIsICJkZWxldGVJbWFnZSIsICJyZW1vdmVFZGdlUXVlcnkiLCAiYXFsUXVlcnkiXQp9Cg==
@@ -1,2 +0,0 @@
1
- export*from"./apps.js";export*from"./connections.js";export*from"./conversations.js";export*from"./dynamodb.js";export*from"./email.js";export*from"./files.js";export*from"./groups.js";export*from"./images.js";export*from"./ios.js";export*from"./locations.js";export*from"./messages.js";export*from"./notifications.js";export*from"./payments.js";export*from"./posts.js";export*from"./reactions.js";export*from"./s3.js";export*from"./search.js";export*from"./sms.js";export*from"./statistics.js";export*from"./subscriptions.js";export*from"./tags.js";export*from"./users.js";export*from"./websockets.js";
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5leHBvcnQgKiBmcm9tICcuL2FwcHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25uZWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnNhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbW9kYi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbWFnZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pb3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXltZW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc3RzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVhY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vczMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2guanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zbXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0aXN0aWNzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Vic2NyaXB0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RhZ3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91c2Vycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3dlYnNvY2tldHMuanMnO1xuXG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxXQUFjLFlBQ2QsV0FBYyxtQkFDZCxXQUFjLHFCQUNkLFdBQWMsZ0JBQ2QsV0FBYyxhQUNkLFdBQWMsYUFDZCxXQUFjLGNBQ2QsV0FBYyxjQUNkLFdBQWMsV0FDZCxXQUFjLGlCQUNkLFdBQWMsZ0JBQ2QsV0FBYyxxQkFDZCxXQUFjLGdCQUNkLFdBQWMsYUFDZCxXQUFjLGlCQUNkLFdBQWMsVUFDZCxXQUFjLGNBQ2QsV0FBYyxXQUNkLFdBQWMsa0JBQ2QsV0FBYyxxQkFDZCxXQUFjLFlBQ2QsV0FBYyxhQUNkLFdBQWMiLAogICJuYW1lcyI6IFtdCn0K