@burgan-tech/morph-touch-runtime 0.0.3 → 0.0.4

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 (261) hide show
  1. package/burgan-tech-morph-touch-runtime-0.0.4.tgz +0 -0
  2. package/{touch → morph-touch}/Functions/check-livekit-room-access.1.0.0.json +2 -2
  3. package/{touch → morph-touch}/Functions/check-livekit-room-access.http +1 -1
  4. package/{touch → morph-touch}/Functions/get-absence-entry.1.0.0.json +2 -2
  5. package/{touch → morph-touch}/Functions/get-advisor-stats.1.0.0.json +2 -2
  6. package/morph-touch/Functions/get-available-slots.1.0.0.json +30 -0
  7. package/{touch → morph-touch}/Functions/get-available-slots.http +4 -2
  8. package/morph-touch/Functions/get-chat-rooms.1.0.0.json +28 -0
  9. package/{touch → morph-touch}/Functions/get-chat-rooms.http +2 -2
  10. package/{touch → morph-touch}/Functions/get-customer-info.1.0.0.json +2 -2
  11. package/{touch → morph-touch}/Functions/get-matrix-sync.1.0.0.json +2 -2
  12. package/morph-touch/Functions/get-rezervations.1.0.0.json +26 -0
  13. package/{touch → morph-touch}/Functions/get-rezervations.http +2 -2
  14. package/{touch → morph-touch}/Functions/get-room-messages.1.0.0.json +2 -2
  15. package/{touch → morph-touch}/Functions/get-room-messages.http +1 -1
  16. package/{touch → morph-touch}/Functions/rezervation-transfer.http +1 -1
  17. package/{touch → morph-touch}/Functions/send-room-message.1.0.0.json +2 -2
  18. package/{touch → morph-touch}/Functions/src/GetAvailableSlotsMapping.csx +125 -1
  19. package/{touch → morph-touch}/Functions/src/GetChatRoomsMapping.csx +6 -7
  20. package/{touch → morph-touch}/Functions/src/GetRezervationsMapping.csx +12 -5
  21. package/{touch → morph-touch}/Schemas/absence-entry.1.0.0.json +3 -3
  22. package/{touch → morph-touch}/Schemas/advisor-chat-rooms.1.0.0.json +2 -2
  23. package/{touch → morph-touch}/Schemas/chat-room.1.0.0.json +2 -2
  24. package/morph-touch/Schemas/chat-room.1.1.0.json +132 -0
  25. package/morph-touch/Schemas/chat-room.1.2.0.json +174 -0
  26. package/{touch → morph-touch}/Schemas/notification-sender.1.0.0.json +2 -2
  27. package/{touch → morph-touch}/Schemas/portfolio-manager.1.0.0.json +2 -2
  28. package/{touch → morph-touch}/Schemas/rezervation.1.0.0.json +2 -2
  29. package/{touch → morph-touch}/Tasks/cancel-absence-entry-for-rezervation.1.0.0.json +2 -2
  30. package/{touch → morph-touch}/Tasks/check-already-completed-chat-room.1.0.0.json +3 -3
  31. package/{touch → morph-touch}/Tasks/check-duplicate-portfolio-manager.1.0.0.json +3 -3
  32. package/{touch → morph-touch}/Tasks/check-duplicate-rezervation.1.0.0.json +3 -3
  33. package/{touch → morph-touch}/Tasks/check-existing-permanent-chat-room.1.0.0.json +3 -3
  34. package/{touch → morph-touch}/Tasks/check-randevu-time.1.0.0.json +1 -1
  35. package/{touch → morph-touch}/Tasks/create-permanent-chat-room.1.0.0.json +1 -1
  36. package/{touch → morph-touch}/Tasks/determine-transfer-type.1.0.0.json +1 -1
  37. package/{touch → morph-touch}/Tasks/enrich-rezervations-for-transfer.1.0.0.json +3 -3
  38. package/{touch → morph-touch}/Tasks/execute-permanent-chatroom-update.1.0.0.json +3 -3
  39. package/{touch → morph-touch}/Tasks/execute-rez-chatroom-transfer.1.0.0.json +2 -2
  40. package/{touch → morph-touch}/Tasks/execute-rezervation-transfer.1.0.0.json +2 -2
  41. package/{touch → morph-touch}/Tasks/fetch-absence-entries-for-transfer.1.0.0.json +3 -3
  42. package/{touch → morph-touch}/Tasks/fetch-advisors-for-transfer.1.0.0.json +3 -3
  43. package/{touch → morph-touch}/Tasks/fetch-permanent-chatrooms-for-transfer.1.0.0.json +3 -3
  44. package/{touch → morph-touch}/Tasks/fetch-rez-chatrooms-for-transfer.1.0.0.json +3 -3
  45. package/{touch → morph-touch}/Tasks/fetch-rezervations-for-transfer.1.0.0.json +3 -3
  46. package/{touch → morph-touch}/Tasks/get-absence-entry-task.1.0.0.json +3 -3
  47. package/{touch → morph-touch}/Tasks/get-available-slots-http.1.0.0.json +2 -2
  48. package/{touch → morph-touch}/Tasks/get-available-slots.1.0.0.json +3 -3
  49. package/{touch → morph-touch}/Tasks/get-chat-room-data-for-rezervation.1.0.0.json +3 -3
  50. package/{touch → morph-touch}/Tasks/get-chat-token.1.0.0.json +1 -1
  51. package/{touch → morph-touch}/Tasks/get-matrix-room-messages.1.0.0.json +1 -1
  52. package/{touch → morph-touch}/Tasks/get-matrix-sync.1.0.0.json +1 -1
  53. package/{touch → morph-touch}/Tasks/get-rezervation-data-task.1.0.0.json +3 -3
  54. package/{touch → morph-touch}/Tasks/get-rezervation-state-task.1.0.0.json +3 -3
  55. package/{touch → morph-touch}/Tasks/get-rezervations-task.1.0.0.json +3 -3
  56. package/{touch → morph-touch}/Tasks/get-user-info-for-rezervation.1.0.0.json +1 -1
  57. package/{touch → morph-touch}/Tasks/get-video-call-url.1.0.0.json +1 -1
  58. package/{touch → morph-touch}/Tasks/invite-user-to-rezervation-room.1.0.0.json +1 -1
  59. package/{touch → morph-touch}/Tasks/join-chat-room-for-rezervation.1.0.0.json +1 -1
  60. package/{touch → morph-touch}/Tasks/join-matrix-room.1.0.0.json +1 -1
  61. package/{touch → morph-touch}/Tasks/join-user-to-room.1.0.0.json +1 -1
  62. package/{touch → morph-touch}/Tasks/merge-invited-user.1.0.0.json +1 -1
  63. package/{touch → morph-touch}/Tasks/merge-rezervation-update.1.0.0.json +1 -1
  64. package/{touch → morph-touch}/Tasks/merge-target-advisor-for-transfer.1.0.0.json +1 -1
  65. package/{touch → morph-touch}/Tasks/merge-update-body-for-randevu-update.1.0.0.json +1 -1
  66. package/{touch → morph-touch}/Tasks/merge-video-call-urls.1.0.0.json +1 -1
  67. package/{touch → morph-touch}/Tasks/query-chat-room-instances.1.0.0.json +3 -3
  68. package/{touch → morph-touch}/Tasks/remove-member-from-room.1.0.0.json +1 -1
  69. package/{touch → morph-touch}/Tasks/send-matrix-room-message.1.0.0.json +1 -1
  70. package/{touch → morph-touch}/Tasks/send-push-notification.1.0.0.json +1 -1
  71. package/{touch → morph-touch}/Tasks/send-sms-notification.1.0.0.json +1 -1
  72. package/{touch → morph-touch}/Tasks/set-chat-room-status-active.1.0.0.json +1 -1
  73. package/{touch → morph-touch}/Tasks/set-chat-room-status-deactive.1.0.0.json +1 -1
  74. package/morph-touch/Tasks/set-matrix-room-history-visibility.1.0.0.json +26 -0
  75. package/{touch → morph-touch}/Tasks/set-previous-advisor.1.0.0.json +1 -1
  76. package/{touch → morph-touch}/Tasks/set-user-from-headers-for-rezervation.1.0.0.json +1 -1
  77. package/{touch → morph-touch}/Tasks/start-absence-entry-for-rezervation.1.0.0.json +2 -2
  78. package/{touch → morph-touch}/Tasks/start-chat-room-for-rezervation.1.0.0.json +2 -2
  79. package/{touch → morph-touch}/Tasks/start-notification-sender.1.0.0.json +2 -2
  80. package/{touch → morph-touch}/Tasks/start-permanent-chat-room.1.0.0.json +2 -2
  81. package/{touch → morph-touch}/Tasks/start-transfer-from-absence-entry.1.0.0.json +2 -2
  82. package/{touch → morph-touch}/Tasks/start-video-call.1.0.0.json +2 -2
  83. package/morph-touch/Tasks/summarize-chat-openai.1.0.0.json +27 -0
  84. package/morph-touch/Tasks/test-get-rezervation-count-by-advisor.1.0.0.json +22 -0
  85. package/morph-touch/Tasks/test-get-rezervation-instances-after-date.1.0.0.json +24 -0
  86. package/{touch → morph-touch}/Tasks/trigger-chat-room-deactivate.1.0.0.json +2 -2
  87. package/{touch → morph-touch}/Tasks/trigger-chat-room-transfer.1.0.0.json +2 -2
  88. package/{touch → morph-touch}/Tasks/trigger-chat-room-update.1.0.0.json +2 -2
  89. package/{touch → morph-touch}/Tasks/trigger-rezervation-add-invited-participant.1.0.0.json +2 -2
  90. package/{touch → morph-touch}/Tasks/trigger-rezervation-apply-update.1.0.0.json +2 -2
  91. package/{touch → morph-touch}/Tasks/trigger-rezervation-to-in-meet.1.0.0.json +2 -2
  92. package/{touch → morph-touch}/Tasks/trigger-rezervation-video-call-update.1.0.0.json +2 -2
  93. package/{touch → morph-touch}/Tasks/validate-date-for-rezervation.1.0.0.json +1 -1
  94. package/{touch → morph-touch}/Tasks/validate-slot-for-rezervation.1.0.0.json +3 -3
  95. package/{touch → morph-touch}/Tasks/validate-transfer-availability.1.0.0.json +3 -3
  96. package/{touch → morph-touch}/Workflows/absence-entry.http +21 -21
  97. package/{touch → morph-touch}/Workflows/absence-entry.json +3 -3
  98. package/{touch → morph-touch}/Workflows/add-participant-to-rezervation.http +3 -3
  99. package/{touch → morph-touch}/Workflows/add-participant-to-rezervation.json +23 -24
  100. package/{touch → morph-touch}/Workflows/chat-room.http +10 -8
  101. package/{touch → morph-touch}/Workflows/chat-room.json +37 -24
  102. package/{touch → morph-touch}/Workflows/investment-advisor.json +2 -2
  103. package/{touch → morph-touch}/Workflows/notification-sender.http +13 -13
  104. package/{touch → morph-touch}/Workflows/notification-sender.json +5 -5
  105. package/{touch → morph-touch}/Workflows/portfolio-manager.json +2 -2
  106. package/{touch → morph-touch}/Workflows/randevu-update.http +6 -6
  107. package/{touch → morph-touch}/Workflows/rezervation-start.json +16 -16
  108. package/{touch → morph-touch}/Workflows/rezervation-transfer.json +125 -22
  109. package/{touch → morph-touch}/Workflows/rezervation-update.http +6 -6
  110. package/{touch → morph-touch}/Workflows/rezervation-update.json +19 -19
  111. package/{touch → morph-touch}/Workflows/rezervation.http +6 -6
  112. package/{touch → morph-touch}/Workflows/rezervation.json +121 -180
  113. package/{touch → morph-touch}/Workflows/src/CancelAbsenceEntryForRezervationMapping.csx +1 -1
  114. package/{touch → morph-touch}/Workflows/src/CancelAbsenceForRandevuUpdateMapping.csx +1 -1
  115. package/{touch → morph-touch}/Workflows/src/ChatRoomRemoveMapping.csx +22 -1
  116. package/{touch → morph-touch}/Workflows/src/ChatRoomTransferInviteMapping.csx +21 -0
  117. package/{touch → morph-touch}/Workflows/src/ChatRoomUpdateMapping.csx +21 -0
  118. package/{touch → morph-touch}/Workflows/src/CreateAbsenceEntryForRezervationMapping.csx +1 -1
  119. package/{touch → morph-touch}/Workflows/src/CreateAbsenceForRandevuUpdateMapping.csx +1 -1
  120. package/{touch → morph-touch}/Workflows/src/CreateChatRoomForRezervationMapping.csx +12 -2
  121. package/{touch → morph-touch}/Workflows/src/CreatePermanentChatRoomMapping.csx +50 -9
  122. package/morph-touch/Workflows/src/DeactivatePermanentChatRoomFromTransferMapping.csx +133 -0
  123. package/{touch → morph-touch}/Workflows/src/EnrichRezervationsForTransferMapping.csx +16 -3
  124. package/{touch → morph-touch}/Workflows/src/ExecutePermanentChatRoomUpdateMapping.csx +23 -18
  125. package/{touch → morph-touch}/Workflows/src/ExecuteRezChatRoomTransferMapping.csx +1 -1
  126. package/{touch → morph-touch}/Workflows/src/ExecuteTransferMapping.csx +15 -12
  127. package/{touch → morph-touch}/Workflows/src/FetchAdvisorsForTransferMapping.csx +55 -7
  128. package/{touch → morph-touch}/Workflows/src/FetchPermanentChatRoomsMapping.csx +65 -2
  129. package/morph-touch/Workflows/src/FetchRoomMessagesForSummaryMapping.csx +182 -0
  130. package/{touch → morph-touch}/Workflows/src/GetChatRoomDataForRezervationMapping.csx +2 -2
  131. package/{touch → morph-touch}/Workflows/src/GetRezervationDataForAddParticipantMapping.csx +1 -1
  132. package/{touch → morph-touch}/Workflows/src/GetRezervationDataForRandevuUpdateMapping.csx +1 -1
  133. package/{touch → morph-touch}/Workflows/src/GetRezervationDataMapping.csx +2 -2
  134. package/{touch → morph-touch}/Workflows/src/GetRezervationStateForRandevuUpdateMapping.csx +1 -1
  135. package/{touch → morph-touch}/Workflows/src/GetRezervationStateMapping.csx +2 -2
  136. package/{touch → morph-touch}/Workflows/src/InvitedUserNotAllowedRule.csx +1 -1
  137. package/{touch → morph-touch}/Workflows/src/JoinUserToRoomMapping.csx +22 -1
  138. package/morph-touch/Workflows/src/NoOpGetInstancesTestMapping.csx +19 -0
  139. package/morph-touch/Workflows/src/PermanentProcessNextTerminationRule.csx +51 -0
  140. package/{touch → morph-touch}/Workflows/src/SendPushNotificationMapping.csx +2 -2
  141. package/{touch → morph-touch}/Workflows/src/SendSmsNotificationMapping.csx +1 -1
  142. package/morph-touch/Workflows/src/SendSummaryToNewRoomMapping.csx +178 -0
  143. package/morph-touch/Workflows/src/SetRoomHistoryVisibilityMapping.csx +109 -0
  144. package/{touch → morph-touch}/Workflows/src/StartChatRoomForRezervationMapping.csx +4 -3
  145. package/{touch → morph-touch}/Workflows/src/StartGetChatTokenForRezervationMapping.csx +1 -1
  146. package/morph-touch/Workflows/src/StartNewPermanentChatRoomFromTransferMapping.csx +197 -0
  147. package/{touch → morph-touch}/Workflows/src/StartNotificationForAdvisorMapping.csx +1 -1
  148. package/{touch → morph-touch}/Workflows/src/StartNotificationForRezervationFromUserInfoMapping.csx +1 -1
  149. package/{touch → morph-touch}/Workflows/src/StartNotificationForUserMapping.csx +1 -1
  150. package/{touch → morph-touch}/Workflows/src/StartPermanentChatRoomMapping.csx +5 -2
  151. package/{touch → morph-touch}/Workflows/src/StartTransferFromAbsenceEntryMapping.csx +6 -14
  152. package/{touch → morph-touch}/Workflows/src/StateInMeetRule.csx +1 -1
  153. package/morph-touch/Workflows/src/SummarizeChatWithOpenAIMapping.csx +172 -0
  154. package/{touch → morph-touch}/Workflows/src/TriggerChatRoomDeactivateMapping.csx +1 -1
  155. package/{touch → morph-touch}/Workflows/src/TriggerChatRoomTransferMapping.csx +1 -1
  156. package/{touch → morph-touch}/Workflows/src/TriggerChatRoomUpdateMapping.csx +3 -3
  157. package/{touch → morph-touch}/Workflows/src/TriggerRezervationAddInvitedParticipantMapping.csx +1 -1
  158. package/{touch → morph-touch}/Workflows/src/TriggerRezervationApplyUpdateMapping.csx +1 -1
  159. package/{touch → morph-touch}/Workflows/src/TriggerRezervationToInMeetMapping.csx +1 -1
  160. package/{touch → morph-touch}/Workflows/src/TriggerRezervationVideoCallUpdateMapping.csx +1 -1
  161. package/{touch → morph-touch}/Workflows/src/ValidateSlotForRandevuUpdateMapping.csx +29 -1
  162. package/{touch → morph-touch}/Workflows/src/ValidateSlotForRezervationMapping.csx +29 -1
  163. package/{touch → morph-touch}/Workflows/src/ValidateTransferMapping.csx +2 -2
  164. package/{touch → morph-touch}/Workflows/start-chat.json +6 -6
  165. package/{touch → morph-touch}/Workflows/start-video-call.http +3 -3
  166. package/{touch → morph-touch}/Workflows/start-video-call.json +4 -4
  167. package/package.json +1 -1
  168. package/vnext.config.json +6 -6
  169. package/burgan-tech-morph-touch-runtime-0.0.3.tgz +0 -0
  170. package/touch/Functions/get-available-slots.1.0.0.json +0 -30
  171. package/touch/Functions/get-chat-rooms.1.0.0.json +0 -28
  172. package/touch/Functions/get-rezervations.1.0.0.json +0 -26
  173. /package/{touch → morph-touch}/Extensions/.gitkeep +0 -0
  174. /package/{touch → morph-touch}/Functions/.gitkeep +0 -0
  175. /package/{touch → morph-touch}/Functions/src/CheckLivekitRoomAccessMapping.csx +0 -0
  176. /package/{touch → morph-touch}/Functions/src/GetAbsenceEntryMapping.csx +0 -0
  177. /package/{touch → morph-touch}/Functions/src/GetAdvisorStatsMapping.csx +0 -0
  178. /package/{touch → morph-touch}/Functions/src/GetCustomerInfoMapping.csx +0 -0
  179. /package/{touch → morph-touch}/Functions/src/GetMatrixSyncMapping.csx +0 -0
  180. /package/{touch → morph-touch}/Functions/src/GetRoomMessagesMapping.csx +0 -0
  181. /package/{touch → morph-touch}/Functions/src/SendCancelNotificationMapping.csx +0 -0
  182. /package/{touch → morph-touch}/Functions/src/SendRoomMessageMapping.csx +0 -0
  183. /package/{touch → morph-touch}/Schemas/.gitkeep +0 -0
  184. /package/{touch → morph-touch}/Tasks/.gitkeep +0 -0
  185. /package/{touch → morph-touch}/Views/.gitkeep +0 -0
  186. /package/{touch → morph-touch}/Workflows/.gitkeep +0 -0
  187. /package/{touch → morph-touch}/Workflows/src/AllChatRoomsSuccessRule.csx +0 -0
  188. /package/{touch → morph-touch}/Workflows/src/AlwaysTrueRule.csx +0 -0
  189. /package/{touch → morph-touch}/Workflows/src/AnyChatRoomFailedRule.csx +0 -0
  190. /package/{touch → morph-touch}/Workflows/src/AutoProcessRule.csx +0 -0
  191. /package/{touch → morph-touch}/Workflows/src/BuildRezChatRoomPlanMapping.csx +0 -0
  192. /package/{touch → morph-touch}/Workflows/src/CanStartRezervationTimerMapping.csx +0 -0
  193. /package/{touch → morph-touch}/Workflows/src/CanStartTransferMapping.csx +0 -0
  194. /package/{touch → morph-touch}/Workflows/src/ChatRoomCreatedFailedRule.csx +0 -0
  195. /package/{touch → morph-touch}/Workflows/src/ChatRoomCreatedSuccessRule.csx +0 -0
  196. /package/{touch → morph-touch}/Workflows/src/ChatRoomTransferRemoveMapping.csx +0 -0
  197. /package/{touch → morph-touch}/Workflows/src/CheckAlreadyCompletedChatRoomMapping.csx +0 -0
  198. /package/{touch → morph-touch}/Workflows/src/CheckDuplicatePortfolioManagerMapping.csx +0 -0
  199. /package/{touch → morph-touch}/Workflows/src/CheckDuplicateRezervationMapping.csx +0 -0
  200. /package/{touch → morph-touch}/Workflows/src/CheckExistingPermanentChatRoomMapping.csx +0 -0
  201. /package/{touch → morph-touch}/Workflows/src/CheckRandevuTimeMapping.csx +0 -0
  202. /package/{touch → morph-touch}/Workflows/src/CheckRezervationStateActiveOrInMeetRule.csx +0 -0
  203. /package/{touch → morph-touch}/Workflows/src/CustomerControlToEndRule.csx +0 -0
  204. /package/{touch → morph-touch}/Workflows/src/DetermineTransferTypeMapping.csx +0 -0
  205. /package/{touch → morph-touch}/Workflows/src/FetchAbsenceEntriesForTransferMapping.csx +0 -0
  206. /package/{touch → morph-touch}/Workflows/src/FetchRezervationsForTransferMapping.csx +0 -0
  207. /package/{touch → morph-touch}/Workflows/src/GetChatTokenMapping.csx +0 -0
  208. /package/{touch → morph-touch}/Workflows/src/GetUserInfoForRezervationMapping.csx +0 -0
  209. /package/{touch → morph-touch}/Workflows/src/GetVideoCallUrlMapping.csx +0 -0
  210. /package/{touch → morph-touch}/Workflows/src/HasChangedAdvisorRule.csx +0 -0
  211. /package/{touch → morph-touch}/Workflows/src/HasChatIntegrationRule.csx +0 -0
  212. /package/{touch → morph-touch}/Workflows/src/HasExistingPermanentRoomRule.csx +0 -0
  213. /package/{touch → morph-touch}/Workflows/src/InviteAdvisorForRandevuUpdateMapping.csx +0 -0
  214. /package/{touch → morph-touch}/Workflows/src/InviteNewAdvisorToRezervationRoomMapping.csx +0 -0
  215. /package/{touch → morph-touch}/Workflows/src/InviteNewParticipantToRandevuRoomMapping.csx +0 -0
  216. /package/{touch → morph-touch}/Workflows/src/InvitedUserMergeMapping.csx +0 -0
  217. /package/{touch → morph-touch}/Workflows/src/InvitedUserNotInMeetRule.csx +0 -0
  218. /package/{touch → morph-touch}/Workflows/src/IsNotfSentRule.csx +0 -0
  219. /package/{touch → morph-touch}/Workflows/src/JoinChatRoomForAddParticipantMapping.csx +0 -0
  220. /package/{touch → morph-touch}/Workflows/src/JoinChatRoomForRandevuStartMapping.csx +0 -0
  221. /package/{touch → morph-touch}/Workflows/src/JoinChatRoomForRezervationMapping.csx +0 -0
  222. /package/{touch → morph-touch}/Workflows/src/JoinMatrixRoomMapping.csx +0 -0
  223. /package/{touch → morph-touch}/Workflows/src/LoginForAddParticipantChatMapping.csx +0 -0
  224. /package/{touch → morph-touch}/Workflows/src/LoginForRandevuStartChatMapping.csx +0 -0
  225. /package/{touch → morph-touch}/Workflows/src/MergeRezervationUpdateMapping.csx +0 -0
  226. /package/{touch → morph-touch}/Workflows/src/MergeTargetAdvisorForTransferMapping.csx +0 -0
  227. /package/{touch → morph-touch}/Workflows/src/MergeUpdateBodyForRandevuUpdateMapping.csx +0 -0
  228. /package/{touch → morph-touch}/Workflows/src/NoExistingPermanentRoomRule.csx +0 -0
  229. /package/{touch → morph-touch}/Workflows/src/NotificationCompleteAlwaysRule.csx +0 -0
  230. /package/{touch → morph-touch}/Workflows/src/NotificationCompleteFromPendingRule.csx +0 -0
  231. /package/{touch → morph-touch}/Workflows/src/NotificationCompleteFromSmsRule.csx +0 -0
  232. /package/{touch → morph-touch}/Workflows/src/NotificationPushFromPendingRule.csx +0 -0
  233. /package/{touch → morph-touch}/Workflows/src/NotificationPushFromSmsRule.csx +0 -0
  234. /package/{touch → morph-touch}/Workflows/src/NotificationSmsPendingRule.csx +0 -0
  235. /package/{touch → morph-touch}/Workflows/src/PermanentDoneRule.csx +0 -0
  236. /package/{touch → morph-touch}/Workflows/src/PermanentProcessNextRule.csx +0 -0
  237. /package/{touch → morph-touch}/Workflows/src/RezChatRoomProcessNextRule.csx +0 -0
  238. /package/{touch → morph-touch}/Workflows/src/RezChatRoomsDoneRule.csx +0 -0
  239. /package/{touch → morph-touch}/Workflows/src/SetChatRoomStatusActiveMapping.csx +0 -0
  240. /package/{touch → morph-touch}/Workflows/src/SetChatRoomStatusDeactiveMapping.csx +0 -0
  241. /package/{touch → morph-touch}/Workflows/src/SetPreviousAdvisorMapping.csx +0 -0
  242. /package/{touch → morph-touch}/Workflows/src/SetUserFromHeadersForRezervationMapping.csx +0 -0
  243. /package/{touch → morph-touch}/Workflows/src/SlotAvailableRule.csx +0 -0
  244. /package/{touch → morph-touch}/Workflows/src/SlotUnavailableRule.csx +0 -0
  245. /package/{touch → morph-touch}/Workflows/src/StartVideoCallCustomerSubFlowMapping.csx +0 -0
  246. /package/{touch → morph-touch}/Workflows/src/StartVideoCallForInvitedParticipantMapping.csx +0 -0
  247. /package/{touch → morph-touch}/Workflows/src/StartVideoCallForRandevuStartMapping.csx +0 -0
  248. /package/{touch → morph-touch}/Workflows/src/StartVideoCallStaffSubFlowMapping.csx +0 -0
  249. /package/{touch → morph-touch}/Workflows/src/StateActiveForUpdateRule.csx +0 -0
  250. /package/{touch → morph-touch}/Workflows/src/StateActiveRule.csx +0 -0
  251. /package/{touch → morph-touch}/Workflows/src/StateNotActiveForUpdateRule.csx +0 -0
  252. /package/{touch → morph-touch}/Workflows/src/StateNotActiveOrInMeetRule.csx +0 -0
  253. /package/{touch → morph-touch}/Workflows/src/StatusCustomerEnterRule.csx +0 -0
  254. /package/{touch → morph-touch}/Workflows/src/StatusStaffEnterRule.csx +0 -0
  255. /package/{touch → morph-touch}/Workflows/src/SyncWorkingHoursRule.csx +0 -0
  256. /package/{touch → morph-touch}/Workflows/src/TokenSuccessRule.csx +0 -0
  257. /package/{touch → morph-touch}/Workflows/src/TransferAllDoneRule.csx +0 -0
  258. /package/{touch → morph-touch}/Workflows/src/TransferHasInvalidRule.csx +0 -0
  259. /package/{touch → morph-touch}/Workflows/src/TransferProcessNextRule.csx +0 -0
  260. /package/{touch → morph-touch}/Workflows/src/ValidateDateForRezervationMapping.csx +0 -0
  261. /package/{touch → morph-touch}/Workflows/src/VideoCallUrlUpdateMergeMapping.csx +0 -0
@@ -0,0 +1,172 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.Linq;
4
+ using System.Threading.Tasks;
5
+ using BBT.Workflow.Scripting;
6
+ using BBT.Workflow.Definitions;
7
+
8
+ /// <summary>
9
+ /// Mapping for summarize-chat-openai HttpTask (Type 6) in the termination transfer loop.
10
+ /// Reads lastRoomMessages from instance data, sends them to OpenAI Chat Completions API,
11
+ /// and stores the summary in chatSummary.
12
+ /// Skips gracefully if no messages or on error -- transfer is never blocked.
13
+ /// </summary>
14
+ public class SummarizeChatWithOpenAIMapping : ScriptBase, IMapping
15
+ {
16
+ private const string SystemPrompt =
17
+ "Asagidaki musteri-danisman sohbet gecmisini Turkce olarak 3-5 cumle ile ozetle. " +
18
+ "Onemli konulari, kararlari ve aksiyonlari vurgula. " +
19
+ "Kisisel verileri (TC kimlik, hesap numarasi vb.) ozetleme.";
20
+
21
+ public async Task<ScriptResponse> InputHandler(WorkflowTask task, ScriptContext context)
22
+ {
23
+ var httpTask = task as HttpTask;
24
+ if (httpTask == null)
25
+ throw new InvalidOperationException("Task must be an HttpTask");
26
+
27
+ var data = context.Instance?.Data;
28
+ if (data == null)
29
+ return new ScriptResponse { Data = new { skipped = true, reason = "no-instance-data" } };
30
+
31
+ bool messagesOk = false;
32
+ if (HasProperty(data, "lastRoomMessagesSuccess"))
33
+ bool.TryParse(data.lastRoomMessagesSuccess?.ToString(), out messagesOk);
34
+
35
+ if (!messagesOk || !HasProperty(data, "lastRoomMessages") || data.lastRoomMessages == null)
36
+ return new ScriptResponse { Data = new { skipped = true, reason = "no-messages" } };
37
+
38
+ var msgs = data.lastRoomMessages as IEnumerable<object>;
39
+ if (msgs == null || !msgs.Any())
40
+ return new ScriptResponse { Data = new { skipped = true, reason = "empty-messages" } };
41
+
42
+ var combined = string.Join("\n", msgs.Select(m => m?.ToString() ?? ""));
43
+ if (string.IsNullOrWhiteSpace(combined))
44
+ return new ScriptResponse { Data = new { skipped = true, reason = "blank-messages" } };
45
+
46
+ var apiKey = await GetSecretAsync("vnext-secret", "workflow-secret", "OpenAIApiKey");
47
+ if (string.IsNullOrWhiteSpace(apiKey))
48
+ return new ScriptResponse { Data = new { skipped = true, reason = "no-OpenAIApiKey" } };
49
+
50
+ httpTask.SetUrl("https://api.openai.com/v1/chat/completions");
51
+ httpTask.SetHeaders(new Dictionary<string, string>
52
+ {
53
+ ["Content-Type"] = "application/json",
54
+ ["Accept"] = "application/json",
55
+ ["Authorization"] = "Bearer " + apiKey.Trim()
56
+ });
57
+ httpTask.SetBody(new
58
+ {
59
+ model = "gpt-4o-mini",
60
+ messages = new object[]
61
+ {
62
+ new { role = "system", content = SystemPrompt },
63
+ new { role = "user", content = combined }
64
+ },
65
+ max_tokens = 500,
66
+ temperature = 0.3
67
+ });
68
+
69
+ return new ScriptResponse();
70
+ }
71
+
72
+ public Task<ScriptResponse> OutputHandler(ScriptContext context)
73
+ {
74
+ var data = context.Instance?.Data;
75
+ var result = new Dictionary<string, object>();
76
+ CopyAllFields(result, data);
77
+
78
+ try
79
+ {
80
+ var response = context.Body;
81
+ var bodyData = response?.data;
82
+
83
+ if (bodyData == null)
84
+ {
85
+ result["chatSummary"] = null;
86
+ result["chatSummarySuccess"] = false;
87
+ return Task.FromResult(new ScriptResponse { Data = result });
88
+ }
89
+
90
+ string errType = GetString(bodyData, "error");
91
+ if (!string.IsNullOrEmpty(errType) && HasProperty(bodyData, "message"))
92
+ {
93
+ result["chatSummary"] = null;
94
+ result["chatSummarySuccess"] = false;
95
+ return Task.FromResult(new ScriptResponse { Data = result });
96
+ }
97
+
98
+ string summary = null;
99
+ if (HasProperty(bodyData, "choices") && bodyData.choices != null)
100
+ {
101
+ foreach (var choice in bodyData.choices)
102
+ {
103
+ var message = choice?.message;
104
+ if (message != null)
105
+ {
106
+ summary = GetString(message, "content");
107
+ break;
108
+ }
109
+ }
110
+ }
111
+
112
+ result["chatSummary"] = summary;
113
+ result["chatSummarySuccess"] = !string.IsNullOrWhiteSpace(summary);
114
+ }
115
+ catch
116
+ {
117
+ result["chatSummary"] = null;
118
+ result["chatSummarySuccess"] = false;
119
+ }
120
+
121
+ return Task.FromResult(new ScriptResponse { Data = result });
122
+ }
123
+
124
+ private string GetString(dynamic obj, string name)
125
+ {
126
+ if (obj == null) return null;
127
+ try
128
+ {
129
+ if (HasProperty(obj, name))
130
+ {
131
+ var v = GetPropertyValue(obj, name);
132
+ return v?.ToString()?.Trim();
133
+ }
134
+ }
135
+ catch { }
136
+ return null;
137
+ }
138
+
139
+ private void CopyAllFields(Dictionary<string, object> result, dynamic data)
140
+ {
141
+ CopyIfPresent(result, data, "transferPlan");
142
+ CopyIfPresent(result, data, "validationResult");
143
+ CopyIfPresent(result, data, "sourceAdvisorId");
144
+ CopyIfPresent(result, data, "advisorType");
145
+ CopyIfPresent(result, data, "startDate");
146
+ CopyIfPresent(result, data, "endDate");
147
+ CopyIfPresent(result, data, "transferType");
148
+ CopyIfPresent(result, data, "enrichedRezervations");
149
+ CopyIfPresent(result, data, "rezChatRoomPlan");
150
+ CopyIfPresent(result, data, "permanentRoomPlan");
151
+ CopyIfPresent(result, data, "permanentChatRooms");
152
+ CopyIfPresent(result, data, "permanentProcessedIndex");
153
+ CopyIfPresent(result, data, "lastPermanentDeactivateSuccess");
154
+ CopyIfPresent(result, data, "lastDeactivatedRoomId");
155
+ CopyIfPresent(result, data, "lastRoomMessages");
156
+ CopyIfPresent(result, data, "lastRoomMessagesSuccess");
157
+ }
158
+
159
+ private void CopyIfPresent(Dictionary<string, object> target, dynamic source, string name)
160
+ {
161
+ if (source == null) return;
162
+ try
163
+ {
164
+ if (HasProperty(source, name))
165
+ {
166
+ var v = GetPropertyValue(source, name);
167
+ if (v != null) target[name] = v;
168
+ }
169
+ }
170
+ catch { }
171
+ }
172
+ }
@@ -32,7 +32,7 @@ public class TriggerChatRoomDeactivateMapping : ScriptBase, IMapping
32
32
  });
33
33
  }
34
34
 
35
- triggerTask.SetDomain("touch");
35
+ triggerTask.SetDomain("morph-touch");
36
36
  triggerTask.SetFlow("chat-room");
37
37
  triggerTask.SetKey(existingChatRoomInstanceKey.Trim());
38
38
  triggerTask.SetTransitionName("deactivate");
@@ -45,7 +45,7 @@ public class TriggerChatRoomTransferMapping : ScriptBase, IMapping
45
45
  });
46
46
  }
47
47
 
48
- triggerTask.SetDomain("touch");
48
+ triggerTask.SetDomain("morph-touch");
49
49
  triggerTask.SetFlow("chat-room");
50
50
  triggerTask.SetKey(existingChatRoomInstanceKey.Trim());
51
51
  triggerTask.SetTransitionName("transfer");
@@ -6,7 +6,7 @@ using BBT.Workflow.Definitions;
6
6
 
7
7
  /// <summary>
8
8
  /// Mapping for trigger-chat-room-update DirectTriggerTask.
9
- /// Triggers update transition on chat-room instance (add member). Key = rezervation-chat-{NormalizeForKey(randevuKey)}, Body = { newMemberId }.
9
+ /// Triggers update transition on chat-room instance (add member). Key = NormalizeForKey(randevuKey), Body = { newMemberId }.
10
10
  /// </summary>
11
11
  public class TriggerChatRoomUpdateMapping : ScriptBase, IMapping
12
12
  {
@@ -44,8 +44,8 @@ public class TriggerChatRoomUpdateMapping : ScriptBase, IMapping
44
44
  });
45
45
  }
46
46
 
47
- var chatRoomKey = "rezervation-chat-" + NormalizeForKey(randevuKey);
48
- triggerTask.SetDomain("touch");
47
+ var chatRoomKey = NormalizeForKey(randevuKey);
48
+ triggerTask.SetDomain("morph-touch");
49
49
  triggerTask.SetFlow("chat-room");
50
50
  triggerTask.SetKey(chatRoomKey);
51
51
  triggerTask.SetTransitionName("update");
@@ -43,7 +43,7 @@ public class TriggerRezervationAddInvitedParticipantMapping : ScriptBase, IMappi
43
43
  });
44
44
  }
45
45
 
46
- triggerTask.SetDomain("touch");
46
+ triggerTask.SetDomain("morph-touch");
47
47
  triggerTask.SetFlow("rezervation");
48
48
  triggerTask.SetKey(randevuKey);
49
49
  triggerTask.SetTransitionName("add-invited-participant");
@@ -26,7 +26,7 @@ public class TriggerRezervationApplyUpdateMapping : ScriptBase, IMapping
26
26
  var absenceEntryKey = GetString(data, "absenceEntryKey");
27
27
  var originalAdvisor = GetString(data, "originalAdvisor");
28
28
 
29
- triggerTask.SetDomain("touch");
29
+ triggerTask.SetDomain("morph-touch");
30
30
  triggerTask.SetFlow("rezervation");
31
31
  triggerTask.SetKey(randevuKey);
32
32
  triggerTask.SetTransitionName("apply-update");
@@ -20,7 +20,7 @@ public class TriggerRezervationToInMeetMapping : ScriptBase, IMapping
20
20
  if (string.IsNullOrWhiteSpace(randevuKey))
21
21
  throw new InvalidOperationException("randevuKey is required");
22
22
 
23
- triggerTask.SetDomain("touch");
23
+ triggerTask.SetDomain("morph-touch");
24
24
  triggerTask.SetFlow("rezervation");
25
25
  triggerTask.SetKey(randevuKey);
26
26
  triggerTask.SetTransitionName("to-in-meet");
@@ -47,7 +47,7 @@ public class TriggerRezervationVideoCallUpdateMapping : ScriptBase, IMapping
47
47
  { "videoCallUrlToAdd", videoCallUrlToAdd }
48
48
  };
49
49
 
50
- triggerTask.SetDomain("touch");
50
+ triggerTask.SetDomain("morph-touch");
51
51
  triggerTask.SetFlow("rezervation");
52
52
  triggerTask.SetKey(roomName);
53
53
  triggerTask.SetTransitionName("video-call-url-update");
@@ -118,7 +118,10 @@ public class ValidateSlotForRandevuUpdateMapping : ScriptBase, IMapping
118
118
  });
119
119
  }
120
120
 
121
- var requestedSlot = startDt.ToString("HH:mm") + "-" + endDt.ToString("HH:mm");
121
+ var tz = ResolveBusinessTimeZone();
122
+ var localStart = ConvertToTimeZone(startDt, startDateTimeStr, tz);
123
+ var localEnd = ConvertToTimeZone(endDt, endDateTimeStr, tz);
124
+ var requestedSlot = localStart.ToString("HH:mm") + "-" + localEnd.ToString("HH:mm");
122
125
  bool available = false;
123
126
  string responseKey = null;
124
127
 
@@ -194,6 +197,31 @@ public class ValidateSlotForRandevuUpdateMapping : ScriptBase, IMapping
194
197
  }
195
198
  }
196
199
 
200
+ private TimeZoneInfo ResolveBusinessTimeZone()
201
+ {
202
+ var id = GetConfigValue("Appointments:TimeZone") ?? GetConfigValue("APPOINTMENT_TIMEZONE");
203
+ if (string.IsNullOrWhiteSpace(id))
204
+ id = "Europe/Istanbul";
205
+
206
+ try { return TimeZoneInfo.FindSystemTimeZoneById(id.Trim()); } catch { }
207
+ try { return TimeZoneInfo.FindSystemTimeZoneById("Turkey Standard Time"); } catch { }
208
+ return TimeZoneInfo.CreateCustomTimeZone("TRT", TimeSpan.FromHours(3), "TRT (UTC+3)", "TRT (UTC+3)");
209
+ }
210
+
211
+ private static DateTime ConvertToTimeZone(DateTime dt, string original, TimeZoneInfo tz)
212
+ {
213
+ if (dt.Kind == DateTimeKind.Utc)
214
+ return TimeZoneInfo.ConvertTimeFromUtc(dt, tz);
215
+
216
+ if (DateTimeOffset.TryParse(original, out var dto))
217
+ {
218
+ var utc = dto.UtcDateTime;
219
+ return TimeZoneInfo.ConvertTimeFromUtc(utc, tz);
220
+ }
221
+
222
+ return dt;
223
+ }
224
+
197
225
  private string GetString(dynamic obj, string name)
198
226
  {
199
227
  if (obj == null) return null;
@@ -134,7 +134,10 @@ public class ValidateSlotForRezervationMapping : ScriptBase, IMapping
134
134
  });
135
135
  }
136
136
 
137
- var requestedSlot = startDt.ToString("HH:mm") + "-" + endDt.ToString("HH:mm");
137
+ var tz = ResolveBusinessTimeZone();
138
+ var localStart = ConvertToTimeZone(startDt, startDateTimeStr, tz);
139
+ var localEnd = ConvertToTimeZone(endDt, endDateTimeStr, tz);
140
+ var requestedSlot = localStart.ToString("HH:mm") + "-" + localEnd.ToString("HH:mm");
138
141
 
139
142
  bool available = false;
140
143
  string responseKey = null;
@@ -229,6 +232,31 @@ public class ValidateSlotForRezervationMapping : ScriptBase, IMapping
229
232
  }
230
233
  }
231
234
 
235
+ private TimeZoneInfo ResolveBusinessTimeZone()
236
+ {
237
+ var id = GetConfigValue("Appointments:TimeZone") ?? GetConfigValue("APPOINTMENT_TIMEZONE");
238
+ if (string.IsNullOrWhiteSpace(id))
239
+ id = "Europe/Istanbul";
240
+
241
+ try { return TimeZoneInfo.FindSystemTimeZoneById(id.Trim()); } catch { }
242
+ try { return TimeZoneInfo.FindSystemTimeZoneById("Turkey Standard Time"); } catch { }
243
+ return TimeZoneInfo.CreateCustomTimeZone("TRT", TimeSpan.FromHours(3), "TRT (UTC+3)", "TRT (UTC+3)");
244
+ }
245
+
246
+ private static DateTime ConvertToTimeZone(DateTime dt, string original, TimeZoneInfo tz)
247
+ {
248
+ if (dt.Kind == DateTimeKind.Utc)
249
+ return TimeZoneInfo.ConvertTimeFromUtc(dt, tz);
250
+
251
+ if (DateTimeOffset.TryParse(original, out var dto))
252
+ {
253
+ var utc = dto.UtcDateTime;
254
+ return TimeZoneInfo.ConvertTimeFromUtc(utc, tz);
255
+ }
256
+
257
+ return dt;
258
+ }
259
+
232
260
  private string GetString(dynamic obj, string name)
233
261
  {
234
262
  if (obj == null) return null;
@@ -47,8 +47,8 @@ public class ValidateTransferMapping : ScriptBase, IMapping
47
47
  "{\"currentState\":{\"eq\":\"in-meet\"}}" +
48
48
  "]}",
49
49
  "{\"status\":{\"eq\":\"A\"}}",
50
- "{\"attributes\":{\"startDateTime\":{\"gte\":\"" + startDate + "\"}}}",
51
- "{\"attributes\":{\"endDateTime\":{\"lte\":\"" + endDate + "\"}}}"
50
+ "{\"attributes\":{\"startDateTime\":{\"dgt\":\"" + startDate + "\"}}}",
51
+ "{\"attributes\":{\"endDateTime\":{\"dlt\":\"" + endDate + "\"}}}"
52
52
  };
53
53
 
54
54
  var filterJson = "{\"and\":[" + string.Join(",", conditions) + "]}";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "key": "start-chat",
3
3
  "flow": "sys-flows",
4
- "domain": "touch",
4
+ "domain": "morph-touch",
5
5
  "version": "1.0.0",
6
6
  "flowVersion": "2.0.0",
7
7
  "tags": [
@@ -42,7 +42,7 @@
42
42
  {
43
43
  "order": 1,
44
44
  "task": {
45
- "domain": "touch",
45
+ "domain": "morph-touch",
46
46
  "flow": "sys-tasks",
47
47
  "key": "check-existing-permanent-chat-room",
48
48
  "version": "1.0.0"
@@ -113,14 +113,14 @@
113
113
  {
114
114
  "order": 1,
115
115
  "task": {
116
- "domain": "touch",
116
+ "domain": "morph-touch",
117
117
  "flow": "sys-tasks",
118
118
  "key": "trigger-chat-room-transfer",
119
119
  "version": "1.0.0"
120
120
  },
121
121
  "mapping": {
122
122
  "location": "./src/TriggerChatRoomTransferMapping.csx",
123
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgdHJpZ2dlci1jaGF0LXJvb20tdHJhbnNmZXIgRGlyZWN0VHJpZ2dlclRhc2suCi8vLyBUcmlnZ2VycyB0cmFuc2ZlciB0cmFuc2l0aW9uIG9uIGNoYXQtcm9vbSBpbnN0YW5jZS4gVXNlcyBleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkgYW5kIG5ld0Fkdmlzb3JJZCBmcm9tIHN0YXJ0LWNoYXQgaW5zdGFuY2UgZGF0YS4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIFRyaWdnZXJDaGF0Um9vbVRyYW5zZmVyTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgdHJpZ2dlclRhc2sgPSB0YXNrIGFzIERpcmVjdFRyaWdnZXJUYXNrOwogICAgICAgIGlmICh0cmlnZ2VyVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGEgRGlyZWN0VHJpZ2dlclRhc2siKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIHZhciBleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkgPSBHZXRTdHJpbmcoZGF0YSwgImV4aXN0aW5nQ2hhdFJvb21JbnN0YW5jZUtleSIpOwogICAgICAgIHZhciBuZXdBZHZpc29ySWQgPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JJZCIpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImNoYXQtcm9vbS10cmFuc2Zlci1za2lwcGVkIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB7ICJ0cmFuc2ZlclRyaWdnZXJlZCIsIGZhbHNlIH0sCiAgICAgICAgICAgICAgICAgICAgeyAicmVhc29uIiwgIm1pc3NpbmctZXhpc3RpbmdDaGF0Um9vbUluc3RhbmNlS2V5IiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShuZXdBZHZpc29ySWQpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImNoYXQtcm9vbS10cmFuc2Zlci1za2lwcGVkIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB7ICJ0cmFuc2ZlclRyaWdnZXJlZCIsIGZhbHNlIH0sCiAgICAgICAgICAgICAgICAgICAgeyAicmVhc29uIiwgIm1pc3NpbmctbmV3QWR2aXNvcklkIiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdHJpZ2dlclRhc2suU2V0RG9tYWluKCJ0b3VjaCIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEZsb3coImNoYXQtcm9vbSIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEtleShleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkuVHJpbSgpKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUcmFuc2l0aW9uTmFtZSgidHJhbnNmZXIiKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRCb2R5KG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PgogICAgICAgIHsKICAgICAgICAgICAgeyAibmV3QWR2aXNvcklkIiwgbmV3QWR2aXNvcklkLlRyaW0oKSB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgewogICAgICAgICAgICBEYXRhID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHsgeyAidHJhbnNmZXJUcmlnZ2VyZWQiLCB0cnVlIH0gfQogICAgICAgIH0pOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICBpZiAoY29udGV4dC5Cb2R5Py5pc1N1Y2Nlc3MgIT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJjaGF0LXJvb20tdHJhbnNmZXItZmFpbGVkIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbnRleHQuQm9keT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJDaGF0IHJvb20gdHJhbnNmZXIgZmFpbGVkIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk/LlRyaW0oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo="
123
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgdHJpZ2dlci1jaGF0LXJvb20tdHJhbnNmZXIgRGlyZWN0VHJpZ2dlclRhc2suCi8vLyBUcmlnZ2VycyB0cmFuc2ZlciB0cmFuc2l0aW9uIG9uIGNoYXQtcm9vbSBpbnN0YW5jZS4gVXNlcyBleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkgYW5kIG5ld0Fkdmlzb3JJZCBmcm9tIHN0YXJ0LWNoYXQgaW5zdGFuY2UgZGF0YS4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIFRyaWdnZXJDaGF0Um9vbVRyYW5zZmVyTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgdHJpZ2dlclRhc2sgPSB0YXNrIGFzIERpcmVjdFRyaWdnZXJUYXNrOwogICAgICAgIGlmICh0cmlnZ2VyVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGEgRGlyZWN0VHJpZ2dlclRhc2siKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIHZhciBleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkgPSBHZXRTdHJpbmcoZGF0YSwgImV4aXN0aW5nQ2hhdFJvb21JbnN0YW5jZUtleSIpOwogICAgICAgIHZhciBuZXdBZHZpc29ySWQgPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JJZCIpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImNoYXQtcm9vbS10cmFuc2Zlci1za2lwcGVkIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB7ICJ0cmFuc2ZlclRyaWdnZXJlZCIsIGZhbHNlIH0sCiAgICAgICAgICAgICAgICAgICAgeyAicmVhc29uIiwgIm1pc3NpbmctZXhpc3RpbmdDaGF0Um9vbUluc3RhbmNlS2V5IiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShuZXdBZHZpc29ySWQpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImNoYXQtcm9vbS10cmFuc2Zlci1za2lwcGVkIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB7ICJ0cmFuc2ZlclRyaWdnZXJlZCIsIGZhbHNlIH0sCiAgICAgICAgICAgICAgICAgICAgeyAicmVhc29uIiwgIm1pc3NpbmctbmV3QWR2aXNvcklkIiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdHJpZ2dlclRhc2suU2V0RG9tYWluKCJtb3JwaC10b3VjaCIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEZsb3coImNoYXQtcm9vbSIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEtleShleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkuVHJpbSgpKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUcmFuc2l0aW9uTmFtZSgidHJhbnNmZXIiKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRCb2R5KG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PgogICAgICAgIHsKICAgICAgICAgICAgeyAibmV3QWR2aXNvcklkIiwgbmV3QWR2aXNvcklkLlRyaW0oKSB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgewogICAgICAgICAgICBEYXRhID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHsgeyAidHJhbnNmZXJUcmlnZ2VyZWQiLCB0cnVlIH0gfQogICAgICAgIH0pOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICBpZiAoY29udGV4dC5Cb2R5Py5pc1N1Y2Nlc3MgIT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJjaGF0LXJvb20tdHJhbnNmZXItZmFpbGVkIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbnRleHQuQm9keT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJDaGF0IHJvb20gdHJhbnNmZXIgZmFpbGVkIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk/LlRyaW0oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo="
124
124
  }
125
125
  }
126
126
  ]
@@ -148,14 +148,14 @@
148
148
  {
149
149
  "order": 1,
150
150
  "task": {
151
- "domain": "touch",
151
+ "domain": "morph-touch",
152
152
  "flow": "sys-tasks",
153
153
  "key": "start-permanent-chat-room",
154
154
  "version": "1.0.0"
155
155
  },
156
156
  "mapping": {
157
157
  "location": "./src/StartPermanentChatRoomMapping.csx",
158
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7CgovLy8gPHN1bW1hcnk+Ci8vLyBNYXBwaW5nIGZvciBzdGFydC1wZXJtYW5lbnQtY2hhdC1yb29tIFN0YXJ0VGFzayAoVHlwZSAxMSkuCi8vLyBTdGFydHMgY2hhdC1yb29tIGZsb3cgYXMgc3ViZmxvdyB3aXRoIGJvZHk6IHVzZXIsIGFkdmlzb3JUeXBlLCBhZHZpc29ySWQgZnJvbSBJbnN0YW5jZURhdGEsIHJvb21UeXBlICJwZXJtYW5lbnQiLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgU3RhcnRQZXJtYW5lbnRDaGF0Um9vbU1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHN0YXJ0VGFzayA9IHRhc2sgYXMgU3RhcnRUYXNrOwogICAgICAgIGlmIChzdGFydFRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIFN0YXJ0VGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHVzZXIgPSBHZXRTdHJpbmcoZGF0YSwgInVzZXIiKTsKICAgICAgICB2YXIgYWR2aXNvclR5cGUgPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgdmFyIGFkdmlzb3JJZCA9IEdldFN0cmluZyhkYXRhLCAiYWR2aXNvcklkIik7CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHVzZXIpKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigidXNlciBpcyByZXF1aXJlZCIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGFkdmlzb3JJZCkpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJhZHZpc29ySWQgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UoYWR2aXNvclR5cGUpKQogICAgICAgICAgICBhZHZpc29yVHlwZSA9ICJJQSI7CgogICAgICAgIHZhciBjaGF0Um9vbUtleSA9IE5vcm1hbGl6ZUZvcktleSh1c2VyKSArICItIiArIE5vcm1hbGl6ZUZvcktleShhZHZpc29yVHlwZSk7CgogICAgICAgIHN0YXJ0VGFzay5TZXREb21haW4oInRvdWNoIik7CiAgICAgICAgc3RhcnRUYXNrLlNldEZsb3coImNoYXQtcm9vbSIpOwogICAgICAgIHN0YXJ0VGFzay5TZXRLZXkoY2hhdFJvb21LZXkpOwogICAgICAgIHN0YXJ0VGFzay5TZXRTeW5jKHRydWUpOwogICAgICAgIHN0YXJ0VGFzay5TZXRCb2R5KG5ldwogICAgICAgIHsKICAgICAgICAgICAgdXNlciwKICAgICAgICAgICAgYWR2aXNvclR5cGUsCiAgICAgICAgICAgIGFkdmlzb3JJZCwKICAgICAgICAgICAgcm9vbVR5cGUgPSAicGVybWFuZW50IgogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBjaGF0Um9vbUluc3RhbmNlS2V5ID0gY2hhdFJvb21LZXkgfSB9KTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNjcmlwdFJlc3BvbnNlKCk7CiAgICAgICAgaWYgKGNvbnRleHQuQm9keT8uaXNTdWNjZXNzID09IHRydWUpCiAgICAgICAgewogICAgICAgICAgICB2YXIga2V5ID0gR2V0U3RyaW5nKGNvbnRleHQuQm9keSwgImtleSIpID8/IEdldFN0cmluZyhjb250ZXh0LkJvZHk/LmRhdGEgPz8gY29udGV4dC5Cb2R5Py5EYXRhLCAia2V5Iik7CiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGtleSkpCiAgICAgICAgICAgICAgICBrZXkgPSBHZXRTdHJpbmcoY29udGV4dC5JbnN0YW5jZT8uRGF0YSwgImNoYXRSb29tSW5zdGFuY2VLZXkiKTsKICAgICAgICAgICAgcmVzcG9uc2UuRGF0YSA9IG5ldyB7IGNoYXRSb29tSW5zdGFuY2VLZXkgPSBrZXkgfTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmVzcG9uc2UuRGF0YSA9IG5ldwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGF0Um9vbUluc3RhbmNlS2V5ID0gKHN0cmluZyludWxsLAogICAgICAgICAgICAgICAgZXJyb3IgPSBjb250ZXh0LkJvZHk/LmVycm9yTWVzc2FnZT8uVG9TdHJpbmcoKSA/PyAiRmFpbGVkIHRvIHN0YXJ0IHBlcm1hbmVudCBjaGF0LXJvb20iCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQocmVzcG9uc2UpOwogICAgfQoKICAgIHByaXZhdGUgc3RyaW5nIEdldFN0cmluZyhkeW5hbWljIG9iaiwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUob2JqLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiB2Py5Ub1N0cmluZygpPy5UcmltKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgTm9ybWFsaXplRm9yS2V5KHN0cmluZyB2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkodmFsdWUpKSByZXR1cm4gdmFsdWUgPz8gIiI7CiAgICAgICAgcmV0dXJuIHZhbHVlLlJlcGxhY2UoIjoiLCAiLSIpLlJlcGxhY2UoIiAiLCAiLSIpLlJlcGxhY2UoIkAiLCAiLSIpOwogICAgfQp9Cg=="
158
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7CgovLy8gPHN1bW1hcnk+Ci8vLyBNYXBwaW5nIGZvciBzdGFydC1wZXJtYW5lbnQtY2hhdC1yb29tIFN0YXJ0VGFzayAoVHlwZSAxMSkuCi8vLyBTdGFydHMgY2hhdC1yb29tIGZsb3cgYXMgc3ViZmxvdyB3aXRoIGJvZHk6IHVzZXIsIGFkdmlzb3JUeXBlLCBhZHZpc29ySWQgZnJvbSBJbnN0YW5jZURhdGEsIHJvb21UeXBlICJwZXJtYW5lbnQiLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgU3RhcnRQZXJtYW5lbnRDaGF0Um9vbU1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHN0YXJ0VGFzayA9IHRhc2sgYXMgU3RhcnRUYXNrOwogICAgICAgIGlmIChzdGFydFRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIFN0YXJ0VGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHVzZXIgPSBHZXRTdHJpbmcoZGF0YSwgInVzZXIiKTsKICAgICAgICB2YXIgYWR2aXNvclR5cGUgPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgdmFyIGFkdmlzb3JJZCA9IEdldFN0cmluZyhkYXRhLCAiYWR2aXNvcklkIik7CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHVzZXIpKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigidXNlciBpcyByZXF1aXJlZCIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGFkdmlzb3JJZCkpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJhZHZpc29ySWQgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UoYWR2aXNvclR5cGUpKQogICAgICAgICAgICBhZHZpc29yVHlwZSA9ICJJQSI7CgogICAgICAgIHZhciBrZXlPdmVycmlkZSA9IEdldFN0cmluZyhkYXRhLCAiY2hhdFJvb21JbnN0YW5jZUtleSIpOwogICAgICAgIHZhciBjaGF0Um9vbUtleSA9ICFzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGtleU92ZXJyaWRlKQogICAgICAgICAgICA/IGtleU92ZXJyaWRlLlRyaW0oKQogICAgICAgICAgICA6IE5vcm1hbGl6ZUZvcktleSh1c2VyKSArICItIiArIE5vcm1hbGl6ZUZvcktleShhZHZpc29yVHlwZSk7CgogICAgICAgIHN0YXJ0VGFzay5TZXREb21haW4oIm1vcnBoLXRvdWNoIik7CiAgICAgICAgc3RhcnRUYXNrLlNldEZsb3coImNoYXQtcm9vbSIpOwogICAgICAgIHN0YXJ0VGFzay5TZXRLZXkoY2hhdFJvb21LZXkpOwogICAgICAgIHN0YXJ0VGFzay5TZXRTeW5jKHRydWUpOwogICAgICAgIHN0YXJ0VGFzay5TZXRCb2R5KG5ldwogICAgICAgIHsKICAgICAgICAgICAgdXNlciwKICAgICAgICAgICAgYWR2aXNvclR5cGUsCiAgICAgICAgICAgIGFkdmlzb3JJZCwKICAgICAgICAgICAgcm9vbVR5cGUgPSAicGVybWFuZW50IgogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBjaGF0Um9vbUluc3RhbmNlS2V5ID0gY2hhdFJvb21LZXkgfSB9KTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNjcmlwdFJlc3BvbnNlKCk7CiAgICAgICAgaWYgKGNvbnRleHQuQm9keT8uaXNTdWNjZXNzID09IHRydWUpCiAgICAgICAgewogICAgICAgICAgICB2YXIga2V5ID0gR2V0U3RyaW5nKGNvbnRleHQuQm9keSwgImtleSIpID8/IEdldFN0cmluZyhjb250ZXh0LkJvZHk/LmRhdGEgPz8gY29udGV4dC5Cb2R5Py5EYXRhLCAia2V5Iik7CiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGtleSkpCiAgICAgICAgICAgICAgICBrZXkgPSBHZXRTdHJpbmcoY29udGV4dC5JbnN0YW5jZT8uRGF0YSwgImNoYXRSb29tSW5zdGFuY2VLZXkiKTsKICAgICAgICAgICAgcmVzcG9uc2UuRGF0YSA9IG5ldyB7IGNoYXRSb29tSW5zdGFuY2VLZXkgPSBrZXkgfTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmVzcG9uc2UuRGF0YSA9IG5ldwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGF0Um9vbUluc3RhbmNlS2V5ID0gKHN0cmluZyludWxsLAogICAgICAgICAgICAgICAgZXJyb3IgPSBjb250ZXh0LkJvZHk/LmVycm9yTWVzc2FnZT8uVG9TdHJpbmcoKSA/PyAiRmFpbGVkIHRvIHN0YXJ0IHBlcm1hbmVudCBjaGF0LXJvb20iCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQocmVzcG9uc2UpOwogICAgfQoKICAgIHByaXZhdGUgc3RyaW5nIEdldFN0cmluZyhkeW5hbWljIG9iaiwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUob2JqLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiB2Py5Ub1N0cmluZygpPy5UcmltKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgTm9ybWFsaXplRm9yS2V5KHN0cmluZyB2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkodmFsdWUpKSByZXR1cm4gdmFsdWUgPz8gIiI7CiAgICAgICAgcmV0dXJuIHZhbHVlLlJlcGxhY2UoIjoiLCAiLSIpLlJlcGxhY2UoIiAiLCAiLSIpLlJlcGxhY2UoIkAiLCAiLSIpOwogICAgfQp9Cg=="
159
159
  }
160
160
  }
161
161
  ]
@@ -14,7 +14,7 @@
14
14
 
15
15
  @baseUrl = http://localhost:4201
16
16
  @apiVersion = 1
17
- @domain = touch
17
+ @domain = morph-touch
18
18
  @workflow = start-video-call
19
19
 
20
20
  ###############################################################################
@@ -41,7 +41,7 @@ X-Request-Id: {{$guid}}
41
41
  "roomName": "{{rezervationKey}}",
42
42
  "status": "staff-enter",
43
43
  "user": "core.user.user-001",
44
- "advisor": "touch.portfolio-manager.pm-001"
44
+ "advisor": "morph-touch.portfolio-manager.pm-001"
45
45
  }
46
46
  }
47
47
 
@@ -60,7 +60,7 @@ X-Request-Id: {{$guid}}
60
60
  "roomName": "{{rezervationKey}}",
61
61
  "status": "customer-enter",
62
62
  "user": "core.user.user-001",
63
- "advisor": "touch.portfolio-manager.pm-001"
63
+ "advisor": "morph-touch.portfolio-manager.pm-001"
64
64
  }
65
65
  }
66
66
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "key": "start-video-call",
3
3
  "flow": "sys-flows",
4
- "domain": "touch",
4
+ "domain": "morph-touch",
5
5
  "version": "1.0.0",
6
6
  "flowVersion": "2.0.0",
7
7
  "tags": [
@@ -119,7 +119,7 @@
119
119
  {
120
120
  "order": 1,
121
121
  "task": {
122
- "domain": "touch",
122
+ "domain": "morph-touch",
123
123
  "flow": "sys-tasks",
124
124
  "key": "get-video-call-url",
125
125
  "version": "1.0.0"
@@ -187,14 +187,14 @@
187
187
  {
188
188
  "order": 1,
189
189
  "task": {
190
- "domain": "touch",
190
+ "domain": "morph-touch",
191
191
  "flow": "sys-tasks",
192
192
  "key": "trigger-rezervation-video-call-update",
193
193
  "version": "1.0.0"
194
194
  },
195
195
  "mapping": {
196
196
  "location": "./src/TriggerRezervationVideoCallUpdateMapping.csx",
197
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgdHJpZ2dlci1yZXplcnZhdGlvbi12aWRlby1jYWxsLXVwZGF0ZSBEaXJlY3RUcmlnZ2VyVGFzayAoVHlwZSAxMikuCi8vLyBUcmlnZ2VycyB2aWRlby1jYWxsLXVybC11cGRhdGUgdHJhbnNpdGlvbiBvbiBwYXJlbnQgcmV6ZXJ2YXRpb24gd2l0aCB2aWRlb0NhbGxVcmwgYW5kIEluc3RhbmNlRGF0YS4KLy8vIFBhcmVudCBrZXkgPSByb29tTmFtZSBmcm9tIHN1YmZsb3cgaW5zdGFuY2UgKHBhc3NlZCBmcm9tIHBhcmVudCB3aGVuIHN1YmZsb3cgc3RhcnRlZCkuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBUcmlnZ2VyUmV6ZXJ2YXRpb25WaWRlb0NhbGxVcGRhdGVNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciB0cmlnZ2VyVGFzayA9IHRhc2sgYXMgRGlyZWN0VHJpZ2dlclRhc2s7CiAgICAgICAgaWYgKHRyaWdnZXJUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEaXJlY3RUcmlnZ2VyVGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgdmFyIHJvb21OYW1lID0gZGF0YT8ucm9vbU5hbWU/LlRvU3RyaW5nKCk/LlRyaW0oKTsKICAgICAgICB2YXIgdmlkZW9DYWxsVXJsID0gZGF0YT8udmlkZW9DYWxsVXJsPy5Ub1N0cmluZygpPy5UcmltKCk7CiAgICAgICAgdmFyIGdldFRva2VuU3VjY2VzcyA9IGRhdGE/LmdldFRva2VuU3VjY2VzcyA/PyBmYWxzZTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHJvb21OYW1lKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB7ICJ1cGRhdGVUcmlnZ2VyZWQiLCBmYWxzZSB9LAogICAgICAgICAgICAgICAgICAgIHsgInJlYXNvbiIsICJtaXNzaW5nLXJvb21OYW1lIiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXR1cyA9IGRhdGE/LnN0YXR1cz8uVG9TdHJpbmcoKT8uVHJpbSgpOwogICAgICAgIHZhciBpc1N0YWZmID0gc3RhdHVzID09ICJzdGFmZi1lbnRlciI7CiAgICAgICAgdmFyIHBhcnRpY2lwYW50SWQgPSBpc1N0YWZmID8gKGRhdGE/LmFkdmlzb3I/LlRvU3RyaW5nKCk/LlRyaW0oKSA/PyAiYWR2aXNvciIpIDogKGRhdGE/LnVzZXI/LlRvU3RyaW5nKCk/LlRyaW0oKSA/PyAidXNlciIpOwogICAgICAgIHZhciB2aWRlb0NhbGxVcmxUb0FkZCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPiB7IHsgcGFydGljaXBhbnRJZCwgdmlkZW9DYWxsVXJsID8/IHN0cmluZy5FbXB0eSB9IH07CgogICAgICAgIHZhciBib2R5ID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+CiAgICAgICAgewogICAgICAgICAgICB7ICJnZXRUb2tlblN1Y2Nlc3MiLCBnZXRUb2tlblN1Y2Nlc3MgfSwKICAgICAgICAgICAgeyAicm9vbU5hbWUiLCByb29tTmFtZSB9LAogICAgICAgICAgICB7ICJzdGF0dXMiLCBkYXRhPy5zdGF0dXMgfSwKICAgICAgICAgICAgeyAidmlkZW9DYWxsVXJsVG9BZGQiLCB2aWRlb0NhbGxVcmxUb0FkZCB9CiAgICAgICAgfTsKCiAgICAgICAgdHJpZ2dlclRhc2suU2V0RG9tYWluKCJ0b3VjaCIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEZsb3coInJlemVydmF0aW9uIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0S2V5KHJvb21OYW1lKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUcmFuc2l0aW9uTmFtZSgidmlkZW8tY2FsbC11cmwtdXBkYXRlIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0Qm9keShib2R5KTsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICB7CiAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4geyB7ICJ1cGRhdGVUcmlnZ2VyZWQiLCB0cnVlIH0gfQogICAgICAgIH0pOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KfQoK"
197
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgdHJpZ2dlci1yZXplcnZhdGlvbi12aWRlby1jYWxsLXVwZGF0ZSBEaXJlY3RUcmlnZ2VyVGFzayAoVHlwZSAxMikuCi8vLyBUcmlnZ2VycyB2aWRlby1jYWxsLXVybC11cGRhdGUgdHJhbnNpdGlvbiBvbiBwYXJlbnQgcmV6ZXJ2YXRpb24gd2l0aCB2aWRlb0NhbGxVcmwgYW5kIEluc3RhbmNlRGF0YS4KLy8vIFBhcmVudCBrZXkgPSByb29tTmFtZSBmcm9tIHN1YmZsb3cgaW5zdGFuY2UgKHBhc3NlZCBmcm9tIHBhcmVudCB3aGVuIHN1YmZsb3cgc3RhcnRlZCkuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBUcmlnZ2VyUmV6ZXJ2YXRpb25WaWRlb0NhbGxVcGRhdGVNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciB0cmlnZ2VyVGFzayA9IHRhc2sgYXMgRGlyZWN0VHJpZ2dlclRhc2s7CiAgICAgICAgaWYgKHRyaWdnZXJUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEaXJlY3RUcmlnZ2VyVGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgdmFyIHJvb21OYW1lID0gZGF0YT8ucm9vbU5hbWU/LlRvU3RyaW5nKCk/LlRyaW0oKTsKICAgICAgICB2YXIgdmlkZW9DYWxsVXJsID0gZGF0YT8udmlkZW9DYWxsVXJsPy5Ub1N0cmluZygpPy5UcmltKCk7CiAgICAgICAgdmFyIGdldFRva2VuU3VjY2VzcyA9IGRhdGE/LmdldFRva2VuU3VjY2VzcyA/PyBmYWxzZTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHJvb21OYW1lKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB7ICJ1cGRhdGVUcmlnZ2VyZWQiLCBmYWxzZSB9LAogICAgICAgICAgICAgICAgICAgIHsgInJlYXNvbiIsICJtaXNzaW5nLXJvb21OYW1lIiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXR1cyA9IGRhdGE/LnN0YXR1cz8uVG9TdHJpbmcoKT8uVHJpbSgpOwogICAgICAgIHZhciBpc1N0YWZmID0gc3RhdHVzID09ICJzdGFmZi1lbnRlciI7CiAgICAgICAgdmFyIHBhcnRpY2lwYW50SWQgPSBpc1N0YWZmID8gKGRhdGE/LmFkdmlzb3I/LlRvU3RyaW5nKCk/LlRyaW0oKSA/PyAiYWR2aXNvciIpIDogKGRhdGE/LnVzZXI/LlRvU3RyaW5nKCk/LlRyaW0oKSA/PyAidXNlciIpOwogICAgICAgIHZhciB2aWRlb0NhbGxVcmxUb0FkZCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPiB7IHsgcGFydGljaXBhbnRJZCwgdmlkZW9DYWxsVXJsID8/IHN0cmluZy5FbXB0eSB9IH07CgogICAgICAgIHZhciBib2R5ID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+CiAgICAgICAgewogICAgICAgICAgICB7ICJnZXRUb2tlblN1Y2Nlc3MiLCBnZXRUb2tlblN1Y2Nlc3MgfSwKICAgICAgICAgICAgeyAicm9vbU5hbWUiLCByb29tTmFtZSB9LAogICAgICAgICAgICB7ICJzdGF0dXMiLCBkYXRhPy5zdGF0dXMgfSwKICAgICAgICAgICAgeyAidmlkZW9DYWxsVXJsVG9BZGQiLCB2aWRlb0NhbGxVcmxUb0FkZCB9CiAgICAgICAgfTsKCiAgICAgICAgdHJpZ2dlclRhc2suU2V0RG9tYWluKCJtb3JwaC10b3VjaCIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEZsb3coInJlemVydmF0aW9uIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0S2V5KHJvb21OYW1lKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUcmFuc2l0aW9uTmFtZSgidmlkZW8tY2FsbC11cmwtdXBkYXRlIik7CiAgICAgICAgdHJpZ2dlclRhc2suU2V0Qm9keShib2R5KTsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICB7CiAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4geyB7ICJ1cGRhdGVUcmlnZ2VyZWQiLCB0cnVlIH0gfQogICAgICAgIH0pOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KfQoK"
198
198
  }
199
199
  }
200
200
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burgan-tech/morph-touch-runtime",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "morph-touch - Runtime Package for engine deployment",
5
5
  "main": "index.js",
6
6
  "type": "module",
package/vnext.config.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
- "version": "0.0.3",
3
- "description": "touch Domain Definition Configuration",
4
- "domain": "touch",
5
- "runtimeVersion": "0.0.40",
2
+ "version": "0.0.4",
3
+ "description": "morph-touch Domain Definition Configuration",
4
+ "domain": "morph-touch",
5
+ "runtimeVersion": "0.0.41",
6
6
  "schemaVersion": "0.0.38",
7
7
  "paths": {
8
8
  "componentsRoot": "touch",
@@ -22,11 +22,11 @@
22
22
  "extensions": [],
23
23
  "visibility": "public",
24
24
  "metadata": {
25
- "description": "Exported components for touch domain",
25
+ "description": "Exported components for morph-touch domain",
26
26
  "maintainer": "vNext Team",
27
27
  "license": "MIT",
28
28
  "keywords": [
29
- "touch",
29
+ "morph-touch",
30
30
  "vnext",
31
31
  "workflow",
32
32
  "domain"
@@ -1,30 +0,0 @@
1
- {
2
- "key": "get-available-slots",
3
- "flow": "sys-functions",
4
- "domain": "touch",
5
- "version": "1.0.0",
6
- "flowVersion": "1.0.0",
7
- "tags": [
8
- "appointments",
9
- "availability",
10
- "slots",
11
- "advisor",
12
- "calendar"
13
- ],
14
- "attributes": {
15
- "scope": "I",
16
- "task": {
17
- "order": 1,
18
- "task": {
19
- "key": "get-available-slots-task",
20
- "domain": "touch",
21
- "version": "1.0.0",
22
- "flow": "sys-tasks"
23
- },
24
- "mapping": {
25
- "location": "./src/GetAvailableSlotsMapping.csx",
26
- "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgR2V0QXZhaWxhYmxlU2xvdHNUYXNrIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpCi8vLyBRdWVyaWVzIGFic2VuY2UtZW50cnkgd29ya2Zsb3cgKHN0YXRlOiBjb21wbGV0ZSkgdmlhIERhcHIgc2VydmljZSBpbnZvY2F0aW9uIHRvIGdldAovLy8gcHVibGljIGhvbGlkYXlzLCB3b3JraW5nIGhvdXJzIGNoYW5nZXMsIGFuZCBwZXJzb25hbCBsZWF2ZXMuCi8vLyBUaGVuIGNhbGN1bGF0ZXMgYXZhaWxhYmxlIGFwcG9pbnRtZW50IHNsb3RzIGZvciB0aGUgZ2l2ZW4gYWR2aXNvciBhbmQgZGF0ZS4KLy8vCi8vLyBXb3JraW5nIGhvdXJzIHByaW9yaXR5OiBhZHZpc29yLXNwZWNpZmljID4gY29tcGFueS13aWRlIChhZHZpc29yPW51bGwpID4gbm8gaG91cnMKLy8vIEhhbGYtZGF5IHB1YmxpYyBob2xpZGF5cyBvbmx5IGJsb2NrIHRoZSBob2xpZGF5IGhvdXJzLCBub3QgdGhlIGVudGlyZSBkYXkuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBHZXRBdmFpbGFibGVTbG90c01hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHNlcnZpY2VUYXNrID0gdGFzayBhcyBEYXByU2VydmljZVRhc2s7CiAgICAgICAgaWYgKHNlcnZpY2VUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgdmFyIGFwcElkID0gR2V0Q29uZmlnVmFsdWUoIkRBUFJfQVBQX0lEIik7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhcHBJZCkpCiAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgdmFyIGFkdmlzb3JJZCA9IGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzP1siYWR2aXNvcklkIl0/LlRvU3RyaW5nKCk7CiAgICAgICAgdmFyIGRhdGUgPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycz9bImRhdGUiXT8uVG9TdHJpbmcoKTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KGFkdmlzb3JJZCkgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZGF0ZSkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAidmFsaWRhdGlvbi1lcnJvciIsCiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAiYWR2aXNvcklkIGFuZCBkYXRlIGFyZSByZXF1aXJlZCIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIlZBTElEQVRJT05fRVJST1IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdmFyIHJlcXVlc3RlZERhdGUgPSBEYXRlVGltZS5QYXJzZShkYXRlKTsKICAgICAgICBpZiAocmVxdWVzdGVkRGF0ZS5EYXRlIDwgRGF0ZVRpbWUuVXRjTm93LkRhdGUpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiRGF0ZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuIiwgImRhdGUiKTsKCiAgICAgICAgdmFyIGZpbHRlckpzb24gPQogICAgICAgICAgICAie1wiYW5kXCI6WyIgKwogICAgICAgICAgICAie1wib3JcIjpbe1wiY3VycmVudFN0YXRlXCI6e1wiZXFcIjpcImNvbXBsZXRlXCJ9fSx7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiY29tcGxldGUtd2l0aC10cmFuc2ZlclwifX1dfSwiICsKICAgICAgICAgICAgIntcIm9yXCI6WyIgKwogICAgICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJhZHZpc29yXCI6e1wiZXFcIjpcIiIgKyBhZHZpc29ySWQgKyAiXCJ9fX0sIiArCiAgICAgICAgICAgICAgICAie1wiYXR0cmlidXRlc1wiOntcImFic2VuY2VUeXBlXCI6e1wiZXFcIjpcInB1YmxpYy1ob2xpZGF5XCJ9fX0sIiArCiAgICAgICAgICAgICAgICAie1wiYXR0cmlidXRlc1wiOntcImFic2VuY2VUeXBlXCI6e1wiZXFcIjpcIndvcmtpbmctaG91cnMtY2hhbmdlXCJ9fX0iICsKICAgICAgICAgICAgIl19IiArCiAgICAgICAgICAgICJdfSI7CgogICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJwYWdlU2l6ZT0xMDAiLAogICAgICAgICAgICAkImZpbHRlcj17ZmlsdGVySnNvbn0iCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgYWR2aXNvcklkID0gY29udGV4dC5RdWVyeVBhcmFtZXRlcnM/WyJhZHZpc29ySWQiXT8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgdmFyIGRhdGVTdHIgPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycz9bImRhdGUiXT8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gR2V0QXBwb2ludG1lbnREdXJhdGlvbihjb250ZXh0KTsKCiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShhZHZpc29ySWQpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGRhdGVTdHIpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJ2YWxpZGF0aW9uLWVycm9yIiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJhZHZpc29ySWQgYW5kIGRhdGUgYXJlIHJlcXVpcmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIlZBTElEQVRJT05fRVJST1IiLAogICAgICAgICAgICAgICAgICAgICAgICBhZHZpc29ySWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRlU3RyCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZXF1ZXN0ZWREYXRlID0gRGF0ZVRpbWUuUGFyc2UoZGF0ZVN0cik7CiAgICAgICAgICAgIHZhciBkYXlPZldlZWsgPSByZXF1ZXN0ZWREYXRlLkRheU9mV2Vlay5Ub1N0cmluZygpLlRvTG93ZXIoKTsKCiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGNvbnRleHQuQm9keTsKCiAgICAgICAgICAgIGlmIChyZXNwb25zZT8uaXNTdWNjZXNzID09IGZhbHNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgZXJyb3JUeXBlID0gQ2xhc3NpZnlTZXJ2aWNlRXJyb3IocmVzcG9uc2U/LmVycm9yTWVzc2FnZT8uVG9TdHJpbmcoKSA/PyAiIik7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJzZXJ2aWNlLWVycm9yIiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJGYWlsZWQgdG8gZmV0Y2ggYWJzZW5jZSBlbnRyaWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIlNFUlZJQ0VfRVJST1IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGUgPSBlcnJvclR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3BvbnNlPy5lcnJvck1lc3NhZ2U/LlRvU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VJbmZvID0gbmV3CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcElkID0gcmVzcG9uc2U/Lm1ldGFkYXRhPy5hcHBJZD8uVG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSByZXNwb25zZT8ubWV0YWRhdGE/Lm1ldGhvZE5hbWU/LlRvU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwVmVyYiA9IHJlc3BvbnNlPy5tZXRhZGF0YT8uaHR0cFZlcmI/LlRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImFwcG9pbnRtZW50cyIsICJlcnJvciIgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSByZXNwb25zZT8uZGF0YTsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKCiAgICAgICAgICAgIHZhciBpbnN0YW5jZXMgPSBuZXcgTGlzdDxkeW5hbWljPigpOwogICAgICAgICAgICBpZiAoaXRlbXMgIT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gaXRlbXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzLkFkZChpdGVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHB1YmxpY0hvbGlkYXlzID0gbmV3IExpc3Q8ZHluYW1pYz4oKTsKICAgICAgICAgICAgdmFyIGFkdmlzb3JXb3JraW5nSG91cnMgPSBuZXcgTGlzdDxkeW5hbWljPigpOwogICAgICAgICAgICB2YXIgY29tcGFueVdvcmtpbmdIb3VycyA9IG5ldyBMaXN0PGR5bmFtaWM+KCk7CiAgICAgICAgICAgIHZhciBwZXJzb25hbExlYXZlcyA9IG5ldyBMaXN0PGR5bmFtaWM+KCk7CgogICAgICAgICAgICBmb3JlYWNoICh2YXIgaW5zdGFuY2UgaW4gaW5zdGFuY2VzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGluc3RhbmNlPy5hdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbnVsbCkgY29udGludWU7CgogICAgICAgICAgICAgICAgdmFyIGFic2VuY2VUeXBlID0gYXR0cmlidXRlcz8uYWJzZW5jZVR5cGU/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB2YXIgYWR2aXNvciA9IEhhc1Byb3BlcnR5KGF0dHJpYnV0ZXMsICJhZHZpc29yIikgPyBhdHRyaWJ1dGVzPy5hZHZpc29yPy5Ub1N0cmluZygpIDogbnVsbDsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFic2VuY2VUeXBlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNhc2UgInB1YmxpYy1ob2xpZGF5IjoKICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljSG9saWRheXMuQWRkKGluc3RhbmNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAid29ya2luZy1ob3Vycy1jaGFuZ2UiOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFkdmlzb3IpICYmIGFkdmlzb3IgPT0gYWR2aXNvcklkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2aXNvcldvcmtpbmdIb3Vycy5BZGQoaW5zdGFuY2UpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShhZHZpc29yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhbnlXb3JraW5nSG91cnMuQWRkKGluc3RhbmNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAicGVyc29uYWwtbGVhdmUiIHdoZW4gYWR2aXNvciA9PSBhZHZpc29ySWQ6CiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFsTGVhdmVzLkFkZChpbnN0YW5jZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgInJlemVydmF0aW9uIiB3aGVuIGFkdmlzb3IgPT0gYWR2aXNvcklkOgogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hbExlYXZlcy5BZGQoaW5zdGFuY2UpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHVuYXZhaWxhYmxlUmFuZ2VzID0gR2V0VW5hdmFpbGFibGVSYW5nZXMocGVyc29uYWxMZWF2ZXMsIHJlcXVlc3RlZERhdGUpOwoKICAgICAgICAgICAgLy8gSGFsZi1kYXkgLyBmdWxsLWRheSBwdWJsaWMgaG9saWRheSBoYW5kbGluZwogICAgICAgICAgICB2YXIgaG9saWRheVJhbmdlcyA9IEdldEhvbGlkYXlSYW5nZXMocHVibGljSG9saWRheXMsIHJlcXVlc3RlZERhdGUpOwogICAgICAgICAgICBpZiAoaG9saWRheVJhbmdlcyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoaG9saWRheVJhbmdlcy5Db3VudCA9PSAxCiAgICAgICAgICAgICAgICAgICAgJiYgaG9saWRheVJhbmdlc1swXS5JdGVtMSA9PSBUaW1lU3Bhbi5aZXJvCiAgICAgICAgICAgICAgICAgICAgJiYgaG9saWRheVJhbmdlc1swXS5JdGVtMiA+PSBuZXcgVGltZVNwYW4oMjMsIDU5LCAwKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ID0gInB1YmxpYy1ob2xpZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IGF2YWlsYWJsZVNsb3RzID0gbmV3IExpc3Q8c3RyaW5nPigpIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJhcHBvaW50bWVudHMiLCAiaG9saWRheSIgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHVuYXZhaWxhYmxlUmFuZ2VzLkFkZFJhbmdlKGhvbGlkYXlSYW5nZXMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBXb3JraW5nIGhvdXJzIHByaW9yaXR5OiBhZHZpc29yLXNwZWNpZmljID4gY29tcGFueS13aWRlCiAgICAgICAgICAgIHZhciB3b3JraW5nSG91cnMgPSBHZXRXb3JraW5nSG91cnNGb3JEYXkoYWR2aXNvcldvcmtpbmdIb3VycywgZGF5T2ZXZWVrKTsKICAgICAgICAgICAgaWYgKHdvcmtpbmdIb3VycyA9PSBudWxsIHx8IHdvcmtpbmdIb3Vycy5Db3VudCA9PSAwKQogICAgICAgICAgICAgICAgd29ya2luZ0hvdXJzID0gR2V0V29ya2luZ0hvdXJzRm9yRGF5KGNvbXBhbnlXb3JraW5nSG91cnMsIGRheU9mV2Vlayk7CgogICAgICAgICAgICBpZiAod29ya2luZ0hvdXJzID09IG51bGwgfHwgd29ya2luZ0hvdXJzLkNvdW50ID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0gIm5vLXdvcmtpbmctaG91cnMiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgeyBhdmFpbGFibGVTbG90cyA9IG5ldyBMaXN0PHN0cmluZz4oKSB9LAogICAgICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJhcHBvaW50bWVudHMiLCAiY2xvc2VkIiB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF2YWlsYWJsZVNsb3RzID0gQ2FsY3VsYXRlQXZhaWxhYmxlU2xvdHMod29ya2luZ0hvdXJzLCB1bmF2YWlsYWJsZVJhbmdlcywgZHVyYXRpb24pOwoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImF2YWlsYWJsZS1zbG90cy1zdWNjZXNzIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgeyBhdmFpbGFibGVTbG90cyB9LAogICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImFwcG9pbnRtZW50cyIsICJhdmFpbGFiaWxpdHkiLCAic3VjY2VzcyIgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJvdXRwdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVycm9yID0gIkludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJQUk9DRVNTSU5HX0VSUk9SIiwKICAgICAgICAgICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gZXguTWVzc2FnZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJhcHBvaW50bWVudHMiLCAiZXJyb3IiIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgICNyZWdpb24gSGVscGVyIE1ldGhvZHMKCiAgICBwcml2YXRlIHN0cmluZyBDbGFzc2lmeVNlcnZpY2VFcnJvcihzdHJpbmcgZXJyb3JNZXNzYWdlKQogICAgewogICAgICAgIGlmIChlcnJvck1lc3NhZ2UuQ29udGFpbnMoInRpbWVvdXQiLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKICAgICAgICAgICAgcmV0dXJuICJ0aW1lb3V0IjsKICAgICAgICBpZiAoZXJyb3JNZXNzYWdlLkNvbnRhaW5zKCJ1bmF1dGhvcml6ZWQiLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKICAgICAgICAgICAgcmV0dXJuICJhdXRoZW50aWNhdGlvbiI7CiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5Db250YWlucygiZm9yYmlkZGVuIiwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkpCiAgICAgICAgICAgIHJldHVybiAiYXV0aG9yaXphdGlvbiI7CiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5Db250YWlucygibm90IGZvdW5kIiwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkpCiAgICAgICAgICAgIHJldHVybiAibm90LWZvdW5kIjsKICAgICAgICBpZiAoZXJyb3JNZXNzYWdlLkNvbnRhaW5zKCJzZXJ2aWNlIHVuYXZhaWxhYmxlIiwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkpCiAgICAgICAgICAgIHJldHVybiAic2VydmljZS11bmF2YWlsYWJsZSI7CiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5Db250YWlucygiY29ubmVjdGlvbiIsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpKQogICAgICAgICAgICByZXR1cm4gImNvbm5lY3Rpb24tZXJyb3IiOwoKICAgICAgICByZXR1cm4gImdlbmVyYWwtZXJyb3IiOwogICAgfQoKICAgIHByaXZhdGUgaW50IEdldEFwcG9pbnRtZW50RHVyYXRpb24oU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIGNvbnN0IGludCBkZWZhdWx0RHVyYXRpb24gPSAzMDsKCiAgICAgICAgaWYgKGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzICE9IG51bGwgJiYgSGFzUHJvcGVydHkoY29udGV4dC5RdWVyeVBhcmFtZXRlcnMsICJkdXJhdGlvbiIpKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGR1cmF0aW9uUGFyYW0gPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVyc1siZHVyYXRpb24iXTsKICAgICAgICAgICAgaW50IHF1ZXJ5RHVyYXRpb24gPSAwOwogICAgICAgICAgICBpZiAoZHVyYXRpb25QYXJhbSAhPSBudWxsICYmIGludC5UcnlQYXJzZShkdXJhdGlvblBhcmFtLlRvU3RyaW5nKCksIG91dCBxdWVyeUR1cmF0aW9uKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5RHVyYXRpb247CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdEdXJhdGlvbiA9IEdldENvbmZpZ1ZhbHVlKCJBcHBvaW50bWVudHM6RGVmYXVsdER1cmF0aW9uIik7CiAgICAgICAgaW50IGNvbmZpZ0R1cmF0aW9uVmFsdWUgPSAwOwogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoY29uZmlnRHVyYXRpb24pICYmIGludC5UcnlQYXJzZShjb25maWdEdXJhdGlvbiwgb3V0IGNvbmZpZ0R1cmF0aW9uVmFsdWUpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ0R1cmF0aW9uVmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZGVmYXVsdER1cmF0aW9uOwogICAgfQoKICAgICNlbmRyZWdpb24KCiAgICAjcmVnaW9uIEJ1c2luZXNzIExvZ2ljIE1ldGhvZHMKCiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gUmV0dXJucyB1bmF2YWlsYWJsZSB0aW1lIHJhbmdlcyBmb3IgcHVibGljIGhvbGlkYXlzIG9uIHRoZSByZXF1ZXN0ZWQgZGF0ZS4KICAgIC8vLyBudWxsID0gbm8gaG9saWRheSBvbiB0aGlzIGRhdGUuCiAgICAvLy8gRnVsbC1kYXkgaG9saWRheTogc2luZ2xlIHJhbmdlIDAwOjAwLTIzOjU5LgogICAgLy8vIEhhbGYtZGF5IGhvbGlkYXk6IHBhcnRpYWwgcmFuZ2UgKGUuZy4sIDAwOjAwLTEzOjAwKS4KICAgIC8vLyA8L3N1bW1hcnk+CiAgICBwcml2YXRlIExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4gR2V0SG9saWRheVJhbmdlcyhMaXN0PGR5bmFtaWM+IGhvbGlkYXlzLCBEYXRlVGltZSBkYXRlKQogICAgewogICAgICAgIHZhciByYW5nZXMgPSBuZXcgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PigpOwogICAgICAgIGJvb2wgaGFzSG9saWRheSA9IGZhbHNlOwoKICAgICAgICBmb3JlYWNoICh2YXIgaG9saWRheSBpbiBob2xpZGF5cykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBob2xpZGF5RGF0YSA9IGhvbGlkYXk/LmF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGlmIChob2xpZGF5RGF0YSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgIHN0cmluZyBzdGFydERhdGVUaW1lU3RyID0gbnVsbDsKICAgICAgICAgICAgc3RyaW5nIGVuZERhdGVUaW1lU3RyID0gbnVsbDsKCiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShob2xpZGF5RGF0YSwgInN0YXJ0RGF0ZVRpbWUiKSAmJiBob2xpZGF5RGF0YS5zdGFydERhdGVUaW1lICE9IG51bGwpCiAgICAgICAgICAgICAgICBzdGFydERhdGVUaW1lU3RyID0gaG9saWRheURhdGEuc3RhcnREYXRlVGltZS5Ub1N0cmluZygpOwoKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGhvbGlkYXlEYXRhLCAiZW5kRGF0ZVRpbWUiKSAmJiBob2xpZGF5RGF0YS5lbmREYXRlVGltZSAhPSBudWxsKQogICAgICAgICAgICAgICAgZW5kRGF0ZVRpbWVTdHIgPSBob2xpZGF5RGF0YS5lbmREYXRlVGltZS5Ub1N0cmluZygpOwoKICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZVRpbWUgPSBEYXRlVGltZS5QYXJzZShzdGFydERhdGVUaW1lU3RyKTsKICAgICAgICAgICAgdmFyIGVuZERhdGVUaW1lID0gRGF0ZVRpbWUuUGFyc2UoZW5kRGF0ZVRpbWVTdHIpOwoKICAgICAgICAgICAgaWYgKGRhdGUuRGF0ZSA8IHN0YXJ0RGF0ZVRpbWUuRGF0ZSB8fCBkYXRlLkRhdGUgPiBlbmREYXRlVGltZS5EYXRlKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICBoYXNIb2xpZGF5ID0gdHJ1ZTsKCiAgICAgICAgICAgIGlmIChzdGFydERhdGVUaW1lLkRhdGUgIT0gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGRhdGUuRGF0ZSA9PSBzdGFydERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoc3RhcnREYXRlVGltZS5UaW1lT2ZEYXksIG5ldyBUaW1lU3BhbigyMywgNTksIDU5KSkpOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0ZS5EYXRlID09IGVuZERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoVGltZVNwYW4uWmVybywgZW5kRGF0ZVRpbWUuVGltZU9mRGF5KSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoVGltZVNwYW4uWmVybywgbmV3IFRpbWVTcGFuKDIzLCA1OSwgNTkpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShzdGFydERhdGVUaW1lLlRpbWVPZkRheSwgZW5kRGF0ZVRpbWUuVGltZU9mRGF5KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBoYXNIb2xpZGF5ID8gcmFuZ2VzIDogbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIExpc3Q8b2JqZWN0PiBHZXRXb3JraW5nSG91cnNGb3JEYXkoTGlzdDxkeW5hbWljPiB3b3JraW5nSG91cnNDaGFuZ2VzLCBzdHJpbmcgZGF5T2ZXZWVrKQogICAgewogICAgICAgIGZvcmVhY2ggKHZhciBjaGFuZ2UgaW4gd29ya2luZ0hvdXJzQ2hhbmdlcykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGFuZ2VEYXRhID0gY2hhbmdlPy5hdHRyaWJ1dGVzOwogICAgICAgICAgICBpZiAoY2hhbmdlRGF0YSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciBjdXN0b21XSCA9IGNoYW5nZURhdGE/LmN1c3RvbVdvcmtpbmdIb3VyczsKICAgICAgICAgICAgaWYgKGN1c3RvbVdIID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIGRheUhvdXJzID0gR2V0RGF5SG91cnNGcm9tQ3VzdG9tKGN1c3RvbVdILCBkYXlPZldlZWspOwogICAgICAgICAgICBpZiAoZGF5SG91cnMgIT0gbnVsbCkgcmV0dXJuIGRheUhvdXJzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBMaXN0PG9iamVjdD4gR2V0RGF5SG91cnNGcm9tQ3VzdG9tKGR5bmFtaWMgY3VzdG9tV0gsIHN0cmluZyBkYXlPZldlZWspCiAgICB7CiAgICAgICAgZHluYW1pYyBkYXlIb3VycyA9IG51bGw7CiAgICAgICAgc3dpdGNoIChkYXlPZldlZWspCiAgICAgICAgewogICAgICAgICAgICBjYXNlICJtb25kYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy5tb25kYXk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0dWVzZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8udHVlc2RheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIndlZG5lc2RheSI6IGRheUhvdXJzID0gY3VzdG9tV0g/LndlZG5lc2RheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRodXJzZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8udGh1cnNkYXk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJmcmlkYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy5mcmlkYXk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJzYXR1cmRheSI6IGRheUhvdXJzID0gY3VzdG9tV0g/LnNhdHVyZGF5OyBicmVhazsKICAgICAgICAgICAgY2FzZSAic3VuZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8uc3VuZGF5OyBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChkYXlIb3VycyA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMaXN0PG9iamVjdD4oKTsKICAgICAgICBmb3JlYWNoICh2YXIgcmFuZ2UgaW4gZGF5SG91cnMpCiAgICAgICAgewogICAgICAgICAgICB2YXIgc3RhcnQgPSByYW5nZT8uc3RhcnQ/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIHZhciBlbmQgPSByYW5nZT8uZW5kPy5Ub1N0cmluZygpOwogICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0KSAmJiAhc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmVzdWx0LkFkZChuZXcgeyBzdGFydCwgZW5kIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQuQ291bnQgPiAwID8gcmVzdWx0IDogbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4gR2V0VW5hdmFpbGFibGVSYW5nZXMoTGlzdDxkeW5hbWljPiBwZXJzb25hbExlYXZlcywgRGF0ZVRpbWUgZGF0ZSkKICAgIHsKICAgICAgICB2YXIgcmFuZ2VzID0gbmV3IExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4oKTsKCiAgICAgICAgZm9yZWFjaCAodmFyIGxlYXZlIGluIHBlcnNvbmFsTGVhdmVzKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGxlYXZlRGF0YSA9IGxlYXZlPy5hdHRyaWJ1dGVzOwogICAgICAgICAgICBpZiAobGVhdmVEYXRhID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgc3RyaW5nIHN0YXJ0RGF0ZVRpbWVTdHIgPSBudWxsOwogICAgICAgICAgICBzdHJpbmcgZW5kRGF0ZVRpbWVTdHIgPSBudWxsOwoKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGxlYXZlRGF0YSwgInN0YXJ0RGF0ZVRpbWUiKSAmJiBsZWF2ZURhdGEuc3RhcnREYXRlVGltZSAhPSBudWxsKQogICAgICAgICAgICAgICAgc3RhcnREYXRlVGltZVN0ciA9IGxlYXZlRGF0YS5zdGFydERhdGVUaW1lLlRvU3RyaW5nKCk7CgogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkobGVhdmVEYXRhLCAiZW5kRGF0ZVRpbWUiKSAmJiBsZWF2ZURhdGEuZW5kRGF0ZVRpbWUgIT0gbnVsbCkKICAgICAgICAgICAgICAgIGVuZERhdGVUaW1lU3RyID0gbGVhdmVEYXRhLmVuZERhdGVUaW1lLlRvU3RyaW5nKCk7CgogICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlVGltZVN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kRGF0ZVRpbWVTdHIpKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICB2YXIgc3RhcnREYXRlVGltZSA9IERhdGVUaW1lLlBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIpOwogICAgICAgICAgICB2YXIgZW5kRGF0ZVRpbWUgPSBEYXRlVGltZS5QYXJzZShlbmREYXRlVGltZVN0cik7CgogICAgICAgICAgICBpZiAoZGF0ZS5EYXRlIDwgc3RhcnREYXRlVGltZS5EYXRlIHx8IGRhdGUuRGF0ZSA+IGVuZERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChzdGFydERhdGVUaW1lLkRhdGUgIT0gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGRhdGUuRGF0ZSA9PSBzdGFydERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoc3RhcnREYXRlVGltZS5UaW1lT2ZEYXksIG5ldyBUaW1lU3BhbigyMywgNTksIDU5KSkpOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0ZS5EYXRlID09IGVuZERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoVGltZVNwYW4uWmVybywgZW5kRGF0ZVRpbWUuVGltZU9mRGF5KSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoVGltZVNwYW4uWmVybywgbmV3IFRpbWVTcGFuKDIzLCA1OSwgNTkpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShzdGFydERhdGVUaW1lLlRpbWVPZkRheSwgZW5kRGF0ZVRpbWUuVGltZU9mRGF5KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiByYW5nZXM7CiAgICB9CgogICAgcHJpdmF0ZSBMaXN0PHN0cmluZz4gQ2FsY3VsYXRlQXZhaWxhYmxlU2xvdHMoTGlzdDxvYmplY3Q+IHdvcmtpbmdIb3VycywgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PiB1bmF2YWlsYWJsZVJhbmdlcywgaW50IGR1cmF0aW9uTWludXRlcykKICAgIHsKICAgICAgICB2YXIgc2xvdHMgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CiAgICAgICAgdmFyIGR1cmF0aW9uID0gVGltZVNwYW4uRnJvbU1pbnV0ZXMoZHVyYXRpb25NaW51dGVzKTsKCiAgICAgICAgZm9yZWFjaCAodmFyIHdoIGluIHdvcmtpbmdIb3VycykKICAgICAgICB7CiAgICAgICAgICAgIGR5bmFtaWMgd2hEeW4gPSB3aDsKICAgICAgICAgICAgdmFyIHN0YXJ0U3RyID0gd2hEeW4/LnN0YXJ0Py5Ub1N0cmluZygpOwogICAgICAgICAgICB2YXIgZW5kU3RyID0gd2hEeW4/LmVuZD8uVG9TdHJpbmcoKTsKCiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShzdGFydFN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIHdoU3RhcnQgPSBUaW1lU3Bhbi5QYXJzZShzdGFydFN0cik7CiAgICAgICAgICAgIHZhciB3aEVuZCA9IFRpbWVTcGFuLlBhcnNlKGVuZFN0cik7CgogICAgICAgICAgICBpZiAod2hTdGFydCA9PSB3aEVuZCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB3aFN0YXJ0OwogICAgICAgICAgICB3aGlsZSAoY3VycmVudCArIGR1cmF0aW9uIDw9IHdoRW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgc2xvdFN0YXJ0ID0gY3VycmVudDsKICAgICAgICAgICAgICAgIHZhciBzbG90RW5kID0gY3VycmVudCArIGR1cmF0aW9uOwoKICAgICAgICAgICAgICAgIGJvb2wgaXNBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIHVyIGluIHVuYXZhaWxhYmxlUmFuZ2VzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChzbG90U3RhcnQgPCB1ci5JdGVtMiAmJiBzbG90RW5kID4gdXIuSXRlbTEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpc0F2YWlsYWJsZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzQXZhaWxhYmxlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNsb3RzLkFkZCgkIntzbG90U3RhcnQ6aGhcXDptbX0te3Nsb3RFbmQ6aGhcXDptbX0iKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudCArIGR1cmF0aW9uOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2xvdHM7CiAgICB9CgogICAgI2VuZHJlZ2lvbgp9Cg=="
27
- }
28
- }
29
- }
30
- }