@acorex/modules 20.7.17 → 20.7.19

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 (142) hide show
  1. package/assessment-management/index.d.ts +0 -1
  2. package/business-core/index.d.ts +32 -2
  3. package/common/index.d.ts +21 -0
  4. package/customer-management/index.d.ts +1 -27
  5. package/document-management/index.d.ts +0 -1
  6. package/fesm2022/acorex-modules-application-management.mjs +19 -27
  7. package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
  8. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-HgaOIA2U.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-CULLP39a.mjs} +65 -67
  9. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-CULLP39a.mjs.map +1 -0
  10. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-DyxE9Xec.mjs → acorex-modules-assessment-management-answers-viewer-widget-column.component-BLjzQMgD.mjs} +2 -2
  11. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-column.component-DyxE9Xec.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-column.component-BLjzQMgD.mjs.map} +1 -1
  12. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-DC2Ep3r1.mjs → acorex-modules-assessment-management-answers-viewer-widget-edit.component-Dy1fV5UY.mjs} +2 -2
  13. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-edit.component-DC2Ep3r1.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-edit.component-Dy1fV5UY.mjs.map} +1 -1
  14. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-iKqac5PE.mjs → acorex-modules-assessment-management-answers-viewer-widget-view.component-UWn57QXA.mjs} +2 -2
  15. package/fesm2022/{acorex-modules-assessment-management-answers-viewer-widget-view.component-iKqac5PE.mjs.map → acorex-modules-assessment-management-answers-viewer-widget-view.component-UWn57QXA.mjs.map} +1 -1
  16. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-CsCMlcvF.mjs → acorex-modules-assessment-management-assessment-case.entity-DMSrj4-x.mjs} +2 -2
  17. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-CsCMlcvF.mjs.map → acorex-modules-assessment-management-assessment-case.entity-DMSrj4-x.mjs.map} +1 -1
  18. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-BkNVe3FO.mjs → acorex-modules-assessment-management-assessment-session.entity-Amq-d0wb.mjs} +2 -2
  19. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-BkNVe3FO.mjs.map → acorex-modules-assessment-management-assessment-session.entity-Amq-d0wb.mjs.map} +1 -1
  20. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-Dgeh3E5f.mjs → acorex-modules-assessment-management-fill-assessment-session.command-CdxcGakt.mjs} +3 -3
  21. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-Dgeh3E5f.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-CdxcGakt.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-NcZlE6DU.mjs → acorex-modules-assessment-management-preview-questionnaire.command-C5zwNwJi.mjs} +4 -4
  23. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-NcZlE6DU.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-C5zwNwJi.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-vNxSmJuv.mjs → acorex-modules-assessment-management-question-bank-item.entity-MlspdBfD.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-vNxSmJuv.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-MlspdBfD.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-CbfHOFT1.mjs → acorex-modules-assessment-management-questionnaire-builder-edit.component-DswgENO1.mjs} +3 -3
  27. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-edit.component-CbfHOFT1.mjs.map → acorex-modules-assessment-management-questionnaire-builder-edit.component-DswgENO1.mjs.map} +1 -1
  28. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-DDqDjzwH.mjs → acorex-modules-assessment-management-questionnaire-builder-view.component-C3BXFr5P.mjs} +2 -2
  29. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder-view.component-DDqDjzwH.mjs.map → acorex-modules-assessment-management-questionnaire-builder-view.component-C3BXFr5P.mjs.map} +1 -1
  30. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-BOnwdWj7.mjs → acorex-modules-assessment-management-questionnaire-builder.component-BMR71H5h.mjs} +3 -3
  31. package/fesm2022/{acorex-modules-assessment-management-questionnaire-builder.component-BOnwdWj7.mjs.map → acorex-modules-assessment-management-questionnaire-builder.component-BMR71H5h.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BX8Q2Kfn.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-Bj-JfJqq.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BX8Q2Kfn.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-Bj-JfJqq.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-CSdVNxV2.mjs → acorex-modules-assessment-management-questionnaire-viewer.service-CVF6-BFW.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer.service-CSdVNxV2.mjs.map → acorex-modules-assessment-management-questionnaire-viewer.service-CVF6-BFW.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-DFQIvlza.mjs → acorex-modules-assessment-management-questionnaire.entity-BZj3A4yO.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-DFQIvlza.mjs.map → acorex-modules-assessment-management-questionnaire.entity-BZj3A4yO.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CMmE72Kt.mjs → acorex-modules-assessment-management-view-session-answers.command-BVwF-Qvd.mjs} +3 -3
  39. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CMmE72Kt.mjs.map → acorex-modules-assessment-management-view-session-answers.command-BVwF-Qvd.mjs.map} +1 -1
  40. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  41. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CZuDhBx5.mjs → acorex-modules-auth-acorex-modules-auth-CCFM_tlK.mjs} +13 -13
  42. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-CZuDhBx5.mjs.map → acorex-modules-auth-acorex-modules-auth-CCFM_tlK.mjs.map} +1 -1
  43. package/fesm2022/{acorex-modules-auth-app-chooser.component-DJE47I8p.mjs → acorex-modules-auth-app-chooser.component-CK5MfqD3.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-auth-app-chooser.component-DJE47I8p.mjs.map → acorex-modules-auth-app-chooser.component-CK5MfqD3.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-auth-login.module-CI_lkyb7.mjs → acorex-modules-auth-login.module-CoRuFgHW.mjs} +4 -4
  46. package/fesm2022/{acorex-modules-auth-login.module-CI_lkyb7.mjs.map → acorex-modules-auth-login.module-CoRuFgHW.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-auth-master.layout-CdY380qS.mjs → acorex-modules-auth-master.layout-DtQSZBEK.mjs} +2 -2
  48. package/fesm2022/{acorex-modules-auth-master.layout-CdY380qS.mjs.map → acorex-modules-auth-master.layout-DtQSZBEK.mjs.map} +1 -1
  49. package/fesm2022/{acorex-modules-auth-menu.provider-Bk9KXBU3.mjs → acorex-modules-auth-menu.provider-CBNyM4Ax.mjs} +2 -14
  50. package/fesm2022/acorex-modules-auth-menu.provider-CBNyM4Ax.mjs.map +1 -0
  51. package/fesm2022/{acorex-modules-auth-oauth-callback.component-BvPk9b3e.mjs → acorex-modules-auth-oauth-callback.component-CLdkbMqN.mjs} +2 -2
  52. package/fesm2022/{acorex-modules-auth-oauth-callback.component-BvPk9b3e.mjs.map → acorex-modules-auth-oauth-callback.component-CLdkbMqN.mjs.map} +1 -1
  53. package/fesm2022/{acorex-modules-auth-password.component-Dw_v_EFQ.mjs → acorex-modules-auth-password.component-DFh6ylyI.mjs} +2 -2
  54. package/fesm2022/{acorex-modules-auth-password.component-Dw_v_EFQ.mjs.map → acorex-modules-auth-password.component-DFh6ylyI.mjs.map} +1 -1
  55. package/fesm2022/{acorex-modules-auth-password.component-CefISnvd.mjs → acorex-modules-auth-password.component-zygAB4zy.mjs} +2 -2
  56. package/fesm2022/{acorex-modules-auth-password.component-CefISnvd.mjs.map → acorex-modules-auth-password.component-zygAB4zy.mjs.map} +1 -1
  57. package/fesm2022/{acorex-modules-auth-routes-CwcJHbAi.mjs → acorex-modules-auth-routes-44-jn5HH.mjs} +2 -2
  58. package/fesm2022/{acorex-modules-auth-routes-CwcJHbAi.mjs.map → acorex-modules-auth-routes-44-jn5HH.mjs.map} +1 -1
  59. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DFhTYEDt.mjs → acorex-modules-auth-tenant-chooser.component-B7og_Ed1.mjs} +2 -2
  60. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-DFhTYEDt.mjs.map → acorex-modules-auth-tenant-chooser.component-B7og_Ed1.mjs.map} +1 -1
  61. package/fesm2022/{acorex-modules-auth-two-factor.module-BOZB6sLo.mjs → acorex-modules-auth-two-factor.module--ToitCHE.mjs} +2 -2
  62. package/fesm2022/{acorex-modules-auth-two-factor.module-BOZB6sLo.mjs.map → acorex-modules-auth-two-factor.module--ToitCHE.mjs.map} +1 -1
  63. package/fesm2022/{acorex-modules-auth-user-sessions.component-BnrnXg4G.mjs → acorex-modules-auth-user-sessions.component-B49q0G5k.mjs} +2 -2
  64. package/fesm2022/{acorex-modules-auth-user-sessions.component-BnrnXg4G.mjs.map → acorex-modules-auth-user-sessions.component-B49q0G5k.mjs.map} +1 -1
  65. package/fesm2022/acorex-modules-auth.mjs +1 -1
  66. package/fesm2022/acorex-modules-business-core.mjs +124 -1
  67. package/fesm2022/acorex-modules-business-core.mjs.map +1 -1
  68. package/fesm2022/acorex-modules-common.mjs +49 -0
  69. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  70. package/fesm2022/acorex-modules-content-management.mjs +21 -22
  71. package/fesm2022/acorex-modules-content-management.mjs.map +1 -1
  72. package/fesm2022/{acorex-modules-customer-management-customer.entity-B7-T9_T7.mjs → acorex-modules-customer-management-customer.entity-BOUGKl2b.mjs} +53 -1
  73. package/fesm2022/acorex-modules-customer-management-customer.entity-BOUGKl2b.mjs.map +1 -0
  74. package/fesm2022/{acorex-modules-customer-management-lead.entity-Da9JTLOl.mjs → acorex-modules-customer-management-lead.entity-C-juNxOd.mjs} +19 -14
  75. package/fesm2022/acorex-modules-customer-management-lead.entity-C-juNxOd.mjs.map +1 -0
  76. package/fesm2022/acorex-modules-customer-management.mjs +34 -152
  77. package/fesm2022/acorex-modules-customer-management.mjs.map +1 -1
  78. package/fesm2022/acorex-modules-dashboard-management.mjs +28 -39
  79. package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
  80. package/fesm2022/acorex-modules-document-management.mjs +51 -42
  81. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  82. package/fesm2022/acorex-modules-form-template-management.mjs +21 -17
  83. package/fesm2022/acorex-modules-form-template-management.mjs.map +1 -1
  84. package/fesm2022/{acorex-modules-help-desk-acorex-modules-help-desk-MfqQx2iN.mjs → acorex-modules-help-desk-acorex-modules-help-desk-6uU5upBy.mjs} +65 -70
  85. package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-6uU5upBy.mjs.map +1 -0
  86. package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CATwc3fe.mjs → acorex-modules-help-desk-capture-screen.component-CqtTzbgS.mjs} +2 -2
  87. package/fesm2022/{acorex-modules-help-desk-capture-screen.component-CATwc3fe.mjs.map → acorex-modules-help-desk-capture-screen.component-CqtTzbgS.mjs.map} +1 -1
  88. package/fesm2022/acorex-modules-help-desk.mjs +1 -1
  89. package/fesm2022/acorex-modules-human-capital-management.mjs +85 -76
  90. package/fesm2022/acorex-modules-human-capital-management.mjs.map +1 -1
  91. package/fesm2022/acorex-modules-learning-management.mjs +105 -137
  92. package/fesm2022/acorex-modules-learning-management.mjs.map +1 -1
  93. package/fesm2022/acorex-modules-location-management.mjs +64 -198
  94. package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
  95. package/fesm2022/acorex-modules-meeting-management.mjs +45 -39
  96. package/fesm2022/acorex-modules-meeting-management.mjs.map +1 -1
  97. package/fesm2022/acorex-modules-order-management-menu.provider-DeMKkRZa.mjs +61 -0
  98. package/fesm2022/acorex-modules-order-management-menu.provider-DeMKkRZa.mjs.map +1 -0
  99. package/fesm2022/acorex-modules-order-management.mjs +2 -2
  100. package/fesm2022/acorex-modules-organization-management.mjs +140 -90
  101. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  102. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-ndbiBVUt.mjs → acorex-modules-platform-management-acorex-modules-platform-management-fAjKD6Y5.mjs} +20 -17
  103. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-ndbiBVUt.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-fAjKD6Y5.mjs.map} +1 -1
  104. package/fesm2022/{acorex-modules-platform-management-menu-list.component-w-Ix2VZA.mjs → acorex-modules-platform-management-menu-list.component-BJsd86Vf.mjs} +2 -2
  105. package/fesm2022/{acorex-modules-platform-management-menu-list.component-w-Ix2VZA.mjs.map → acorex-modules-platform-management-menu-list.component-BJsd86Vf.mjs.map} +1 -1
  106. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  107. package/fesm2022/acorex-modules-procurement-management.mjs +13 -18
  108. package/fesm2022/acorex-modules-procurement-management.mjs.map +1 -1
  109. package/fesm2022/acorex-modules-product-catalog.mjs +24 -27
  110. package/fesm2022/acorex-modules-product-catalog.mjs.map +1 -1
  111. package/fesm2022/acorex-modules-reservation-management.mjs +91 -54
  112. package/fesm2022/acorex-modules-reservation-management.mjs.map +1 -1
  113. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-Dpjfgmg9.mjs → acorex-modules-settings-management-acorex-modules-settings-management-fj933lbu.mjs} +6 -6
  114. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-Dpjfgmg9.mjs.map → acorex-modules-settings-management-acorex-modules-settings-management-fj933lbu.mjs.map} +1 -1
  115. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-nYV8iDwJ.mjs → acorex-modules-settings-management-permission-definition.provider-CW3wSb7v.mjs} +2 -2
  116. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-nYV8iDwJ.mjs.map → acorex-modules-settings-management-permission-definition.provider-CW3wSb7v.mjs.map} +1 -1
  117. package/fesm2022/{acorex-modules-settings-management-setting-page.component-B1lhCtl_.mjs → acorex-modules-settings-management-setting-page.component-BqJ31scm.mjs} +2 -2
  118. package/fesm2022/{acorex-modules-settings-management-setting-page.component-B1lhCtl_.mjs.map → acorex-modules-settings-management-setting-page.component-BqJ31scm.mjs.map} +1 -1
  119. package/fesm2022/{acorex-modules-settings-management-setting-view.component-CAX1kFy2.mjs → acorex-modules-settings-management-setting-view.component-D7QpT246.mjs} +2 -2
  120. package/fesm2022/{acorex-modules-settings-management-setting-view.component-CAX1kFy2.mjs.map → acorex-modules-settings-management-setting-view.component-D7QpT246.mjs.map} +1 -1
  121. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  122. package/fesm2022/acorex-modules-subscription-management.mjs +19 -28
  123. package/fesm2022/acorex-modules-subscription-management.mjs.map +1 -1
  124. package/fesm2022/acorex-modules-tenant-management.mjs +9 -16
  125. package/fesm2022/acorex-modules-tenant-management.mjs.map +1 -1
  126. package/fesm2022/acorex-modules-workflow-management.mjs +51 -36
  127. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  128. package/learning-management/index.d.ts +6 -0
  129. package/meeting-management/index.d.ts +0 -1
  130. package/package.json +10 -10
  131. package/reservation-management/index.d.ts +13 -12
  132. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-HgaOIA2U.mjs.map +0 -1
  133. package/fesm2022/acorex-modules-auth-menu.provider-Bk9KXBU3.mjs.map +0 -1
  134. package/fesm2022/acorex-modules-customer-management-customer.entity-B7-T9_T7.mjs.map +0 -1
  135. package/fesm2022/acorex-modules-customer-management-lead.entity-Da9JTLOl.mjs.map +0 -1
  136. package/fesm2022/acorex-modules-customer-management-lifecycle-stage.entity-DNFSDcpD.mjs +0 -60
  137. package/fesm2022/acorex-modules-customer-management-lifecycle-stage.entity-DNFSDcpD.mjs.map +0 -1
  138. package/fesm2022/acorex-modules-customer-management-sales-territory.entity-Bw5YU_a3.mjs +0 -60
  139. package/fesm2022/acorex-modules-customer-management-sales-territory.entity-Bw5YU_a3.mjs.map +0 -1
  140. package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-MfqQx2iN.mjs.map +0 -1
  141. package/fesm2022/acorex-modules-order-management-menu.provider-CDXy5oMa.mjs +0 -68
  142. package/fesm2022/acorex-modules-order-management-menu.provider-CDXy5oMa.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-workflow-management.mjs","sources":["../tmp-esm2022/workflow-management/lib/const.js","../tmp-esm2022/workflow-management/lib/entity.provider.js","../tmp-esm2022/workflow-management/lib/menu.keys.js","../tmp-esm2022/workflow-management/lib/menu.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/execute-query.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/execute-command.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/show-confirm-popup.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/show-layout-popup.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/human-task.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/show-toast.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/collect-signature.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/workflow-activities-definition.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/entiy.create.activity.js","../tmp-esm2022/workflow-management/lib/features/workflow-plugin/workflow.plugin.js","../tmp-esm2022/workflow-management/lib/features/workflow-plugin/workflow-plugin.module.js","../tmp-esm2022/workflow-management/lib/features/engine/category.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/workflows/workflow-category.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/workflows/workflow-definition.provider.js","../tmp-esm2022/workflow-management/lib/manifest.js","../tmp-esm2022/workflow-management/lib/permission.keys.js","../tmp-esm2022/workflow-management/lib/permission-definition.provider.js","../tmp-esm2022/workflow-management/lib/features/task-provider/generic-workflow-task.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/provider.task.js","../tmp-esm2022/workflow-management/lib/workflow-management.module.js","../tmp-esm2022/workflow-management/lib/entities/index.js","../tmp-esm2022/workflow-management/lib/features/engine/studio/components/activity-categories-tree/activity-categories-tree.component.js","../tmp-esm2022/workflow-management/lib/features/engine/studio/workflow-studio.component.js","../tmp-esm2022/workflow-management/acorex-modules-workflow-management.js"],"sourcesContent":["const config = {\n i18n: 'workflow-management',\n module: 'WorkflowManagement',\n};\nexport const RootConfig = {\n config,\n module: {\n route: 'workflow-management',\n name: config.module,\n title: '@workflow-management:module.title',\n icon: 'fa-light fa-diagram-project',\n },\n entities: {\n workflowDefinition: {\n name: 'WorkflowDefinition',\n fullName: `${config.module}.WorkflowDefinition`,\n title: '@workflow-management:workflow-definitions.entities.workflow-definition.title',\n titlePlural: '@workflow-management:workflow-definitions.entities.workflow-definition.plural',\n icon: 'fa-light fa-diagram-project',\n },\n workflowInstance: {\n name: 'WorkflowInstance',\n fullName: `${config.module}.WorkflowInstance`,\n title: '@workflow-management:workflow-instances.entities.workflow-instance.title',\n titlePlural: '@workflow-management:workflow-instances.entities.workflow-instance.plural',\n icon: 'fa-light fa-play-circle',\n },\n activityDefinition: {\n name: 'ActivityDefinition',\n fullName: `${config.module}.ActivityDefinition`,\n title: '@workflow-management:activities.entities.activity-definition.title',\n titlePlural: '@workflow-management:activities.entities.activity-definition.plural',\n icon: 'fa-light fa-puzzle-piece',\n },\n // workflowCategory: {\n // name: 'WorkflowCategory',\n // fullName: `${config.module}.WorkflowCategory`,\n // title: '@workflow-management:workflows.entities.workflow-category.title',\n // titlePlural: '@workflow-management:workflows.entities.workflow-category.plural',\n // icon: 'fa-light fa-folder',\n // },\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2NvbnN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFLHFCQUFxQjtJQUMzQixNQUFNLEVBQUUsb0JBQW9CO0NBQzdCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsTUFBTTtJQUNOLE1BQU0sRUFBRTtRQUNOLEtBQUssRUFBRSxxQkFBcUI7UUFDNUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ25CLEtBQUssRUFBRSxtQ0FBbUM7UUFDMUMsSUFBSSxFQUFFLDZCQUE2QjtLQUNwQztJQUNELFFBQVEsRUFBRTtRQUNSLGtCQUFrQixFQUFFO1lBQ2xCLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0scUJBQXFCO1lBQy9DLEtBQUssRUFBRSw4RUFBOEU7WUFDckYsV0FBVyxFQUFFLCtFQUErRTtZQUM1RixJQUFJLEVBQUUsNkJBQTZCO1NBQ3BDO1FBQ0QsZ0JBQWdCLEVBQUU7WUFDaEIsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxtQkFBbUI7WUFDN0MsS0FBSyxFQUFFLDBFQUEwRTtZQUNqRixXQUFXLEVBQUUsMkVBQTJFO1lBQ3hGLElBQUksRUFBRSx5QkFBeUI7U0FDaEM7UUFDRCxrQkFBa0IsRUFBRTtZQUNsQixJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQjtZQUMvQyxLQUFLLEVBQUUsb0VBQW9FO1lBQzNFLFdBQVcsRUFBRSxxRUFBcUU7WUFDbEYsSUFBSSxFQUFFLDBCQUEwQjtTQUNqQztRQUNELHNCQUFzQjtRQUN0Qiw4QkFBOEI7UUFDOUIsbURBQW1EO1FBQ25ELDhFQUE4RTtRQUM5RSxxRkFBcUY7UUFDckYsZ0NBQWdDO1FBQ2hDLEtBQUs7S0FDTjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb25maWcgPSB7XG4gIGkxOG46ICd3b3JrZmxvdy1tYW5hZ2VtZW50JyxcbiAgbW9kdWxlOiAnV29ya2Zsb3dNYW5hZ2VtZW50Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBSb290Q29uZmlnID0ge1xuICBjb25maWcsXG4gIG1vZHVsZToge1xuICAgIHJvdXRlOiAnd29ya2Zsb3ctbWFuYWdlbWVudCcsXG4gICAgbmFtZTogY29uZmlnLm1vZHVsZSxcbiAgICB0aXRsZTogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50Om1vZHVsZS50aXRsZScsXG4gICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdCcsXG4gIH0sXG4gIGVudGl0aWVzOiB7XG4gICAgd29ya2Zsb3dEZWZpbml0aW9uOiB7XG4gICAgICBuYW1lOiAnV29ya2Zsb3dEZWZpbml0aW9uJyxcbiAgICAgIGZ1bGxOYW1lOiBgJHtjb25maWcubW9kdWxlfS5Xb3JrZmxvd0RlZmluaXRpb25gLFxuICAgICAgdGl0bGU6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1kZWZpbml0aW9ucy5lbnRpdGllcy53b3JrZmxvdy1kZWZpbml0aW9uLnRpdGxlJyxcbiAgICAgIHRpdGxlUGx1cmFsOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctZGVmaW5pdGlvbnMuZW50aXRpZXMud29ya2Zsb3ctZGVmaW5pdGlvbi5wbHVyYWwnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdCcsXG4gICAgfSxcbiAgICB3b3JrZmxvd0luc3RhbmNlOiB7XG4gICAgICBuYW1lOiAnV29ya2Zsb3dJbnN0YW5jZScsXG4gICAgICBmdWxsTmFtZTogYCR7Y29uZmlnLm1vZHVsZX0uV29ya2Zsb3dJbnN0YW5jZWAsXG4gICAgICB0aXRsZTogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LWluc3RhbmNlcy5lbnRpdGllcy53b3JrZmxvdy1pbnN0YW5jZS50aXRsZScsXG4gICAgICB0aXRsZVBsdXJhbDogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LWluc3RhbmNlcy5lbnRpdGllcy53b3JrZmxvdy1pbnN0YW5jZS5wbHVyYWwnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXBsYXktY2lyY2xlJyxcbiAgICB9LFxuICAgIGFjdGl2aXR5RGVmaW5pdGlvbjoge1xuICAgICAgbmFtZTogJ0FjdGl2aXR5RGVmaW5pdGlvbicsXG4gICAgICBmdWxsTmFtZTogYCR7Y29uZmlnLm1vZHVsZX0uQWN0aXZpdHlEZWZpbml0aW9uYCxcbiAgICAgIHRpdGxlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6YWN0aXZpdGllcy5lbnRpdGllcy5hY3Rpdml0eS1kZWZpbml0aW9uLnRpdGxlJyxcbiAgICAgIHRpdGxlUGx1cmFsOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6YWN0aXZpdGllcy5lbnRpdGllcy5hY3Rpdml0eS1kZWZpbml0aW9uLnBsdXJhbCcsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcHV6emxlLXBpZWNlJyxcbiAgICB9LFxuICAgIC8vIHdvcmtmbG93Q2F0ZWdvcnk6IHtcbiAgICAvLyAgIG5hbWU6ICdXb3JrZmxvd0NhdGVnb3J5JyxcbiAgICAvLyAgIGZ1bGxOYW1lOiBgJHtjb25maWcubW9kdWxlfS5Xb3JrZmxvd0NhdGVnb3J5YCxcbiAgICAvLyAgIHRpdGxlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3dzLmVudGl0aWVzLndvcmtmbG93LWNhdGVnb3J5LnRpdGxlJyxcbiAgICAvLyAgIHRpdGxlUGx1cmFsOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3dzLmVudGl0aWVzLndvcmtmbG93LWNhdGVnb3J5LnBsdXJhbCcsXG4gICAgLy8gICBpY29uOiAnZmEtbGlnaHQgZmEtZm9sZGVyJyxcbiAgICAvLyB9LFxuICB9LFxufTtcbiJdfQ==","import { Injectable } from '@angular/core';\nimport { RootConfig } from './const';\nimport * as i0 from \"@angular/core\";\nexport class AXMWorkflowManagementModuleEntityProvider {\n preload() {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity) => ({\n module: module,\n entity: entity.name,\n }));\n }\n async get(moduleName, entityName) {\n if (moduleName === RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.workflowDefinition.name:\n return (await import('./entities/workflow-definition/workflow-definition.entity')).factory();\n case RootConfig.entities.workflowInstance.name:\n return (await import('./entities/workflow-instance/workflow-instance.entity')).factory();\n case RootConfig.entities.activityDefinition.name:\n return (await import('./entities/activity-definition/activity-definition.entity')).factory();\n }\n }\n return null;\n }\n async list() {\n const m = RootConfig.module.name;\n return Promise.resolve(Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m })));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModuleEntityProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModuleEntityProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModuleEntityProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9lbnRpdHkucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUdyQyxNQUFNLE9BQU8seUNBQXlDO0lBQzdDLE9BQU87UUFDWixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUUsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUk7U0FDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFrQixFQUFFLFVBQWtCO1FBQzlDLElBQUksVUFBVSxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUMsUUFBUSxVQUFVLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUk7b0JBQzlDLE9BQU8sQ0FBQyxNQUFNLE1BQU0sQ0FBQywyREFBMkQsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQy9GLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJO29CQUM1QyxPQUFPLENBQUMsTUFBTSxNQUFNLENBQUMsdURBQXVELENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMzRixLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSTtvQkFDOUMsT0FBTyxDQUFDLE1BQU0sTUFBTSxDQUFDLDJEQUEyRCxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqRyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDakMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM3RSxDQUFDO0lBQ0osQ0FBQzsrR0E1QlUseUNBQXlDO21IQUF6Qyx5Q0FBeUM7OzRGQUF6Qyx5Q0FBeUM7a0JBRHJELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBFbnRpdHlEZWZpbml0aW9uTG9hZGVyLCBBWFBFbnRpdHlQcmVsb2FkRW50aXR5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuL2NvbnN0JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTVdvcmtmbG93TWFuYWdlbWVudE1vZHVsZUVudGl0eVByb3ZpZGVyIGltcGxlbWVudHMgQVhQRW50aXR5RGVmaW5pdGlvbkxvYWRlciB7XG4gIHB1YmxpYyBwcmVsb2FkKCk6IEFYUEVudGl0eVByZWxvYWRFbnRpdHlbXSB7XG4gICAgY29uc3QgbW9kdWxlID0gUm9vdENvbmZpZy5tb2R1bGUubmFtZTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKFJvb3RDb25maWcuZW50aXRpZXMpKS5tYXAoKGVudGl0eTogYW55KSA9PiAoe1xuICAgICAgbW9kdWxlOiBtb2R1bGUsXG4gICAgICBlbnRpdHk6IGVudGl0eS5uYW1lLFxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIGdldChtb2R1bGVOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQRW50aXR5IHwgbnVsbD4ge1xuICAgIGlmIChtb2R1bGVOYW1lID09PSBSb290Q29uZmlnLm1vZHVsZS5uYW1lKSB7XG4gICAgICBzd2l0Y2ggKGVudGl0eU5hbWUpIHtcbiAgICAgICAgY2FzZSBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93RGVmaW5pdGlvbi5uYW1lOlxuICAgICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KCcuL2VudGl0aWVzL3dvcmtmbG93LWRlZmluaXRpb24vd29ya2Zsb3ctZGVmaW5pdGlvbi5lbnRpdHknKSkuZmFjdG9yeSgpO1xuICAgICAgICBjYXNlIFJvb3RDb25maWcuZW50aXRpZXMud29ya2Zsb3dJbnN0YW5jZS5uYW1lOlxuICAgICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KCcuL2VudGl0aWVzL3dvcmtmbG93LWluc3RhbmNlL3dvcmtmbG93LWluc3RhbmNlLmVudGl0eScpKS5mYWN0b3J5KCk7XG4gICAgICAgIGNhc2UgUm9vdENvbmZpZy5lbnRpdGllcy5hY3Rpdml0eURlZmluaXRpb24ubmFtZTpcbiAgICAgICAgICByZXR1cm4gKGF3YWl0IGltcG9ydCgnLi9lbnRpdGllcy9hY3Rpdml0eS1kZWZpbml0aW9uL2FjdGl2aXR5LWRlZmluaXRpb24uZW50aXR5JykpLmZhY3RvcnkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IG1vZHVsZTogc3RyaW5nIH1bXT4ge1xuICAgIGNvbnN0IG0gPSBSb290Q29uZmlnLm1vZHVsZS5uYW1lO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICBPYmplY3QudmFsdWVzKFJvb3RDb25maWcuZW50aXRpZXMpLm1hcCgoZSkgPT4gKHsgbmFtZTogZS5uYW1lLCBtb2R1bGU6IG0gfSkpXG4gICAgKTtcbiAgfVxufVxuXG4iXX0=","export const AXPWorkflowManagementMenuKeys = {\n Root: 'workflow-management:menu',\n Workflow: 'workflow-management:workflow',\n WorkflowDefinitions: 'workflow-management:workflow-definitions',\n WorkflowInstances: 'workflow-management:workflow-instances',\n WorkflowStudio: 'workflow-management:workflow-studio',\n Activities: 'workflow-management:activities',\n ActivityDefinitions: 'workflow-management:activity-definitions',\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5rZXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9tZW51LmtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFDM0MsSUFBSSxFQUFFLDBCQUEwQjtJQUNoQyxRQUFRLEVBQUUsOEJBQThCO0lBQ3hDLG1CQUFtQixFQUFFLDBDQUEwQztJQUMvRCxpQkFBaUIsRUFBRSx3Q0FBd0M7SUFDM0QsY0FBYyxFQUFFLHFDQUFxQztJQUNyRCxVQUFVLEVBQUUsZ0NBQWdDO0lBQzVDLG1CQUFtQixFQUFFLDBDQUEwQztDQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFYUFdvcmtmbG93TWFuYWdlbWVudE1lbnVLZXlzID0ge1xuICBSb290OiAnd29ya2Zsb3ctbWFuYWdlbWVudDptZW51JyxcbiAgV29ya2Zsb3c6ICd3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93JyxcbiAgV29ya2Zsb3dEZWZpbml0aW9uczogJ3dvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctZGVmaW5pdGlvbnMnLFxuICBXb3JrZmxvd0luc3RhbmNlczogJ3dvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctaW5zdGFuY2VzJyxcbiAgV29ya2Zsb3dTdHVkaW86ICd3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpbycsXG4gIEFjdGl2aXRpZXM6ICd3b3JrZmxvdy1tYW5hZ2VtZW50OmFjdGl2aXRpZXMnLFxuICBBY3Rpdml0eURlZmluaXRpb25zOiAnd29ya2Zsb3ctbWFuYWdlbWVudDphY3Rpdml0eS1kZWZpbml0aW9ucycsXG59IGFzIGNvbnN0O1xuXG4iXX0=","import { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from './const';\nimport { AXPWorkflowManagementMenuKeys } from './menu.keys';\nexport class AXMMenuProvider {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.sessionService = inject(AXPSessionService);\n }\n async provide(context) {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n const module = RootConfig.module;\n context.addItems([\n {\n name: AXPWorkflowManagementMenuKeys.Root,\n priority: 9500,\n text: '@workflow-management:module.menus.root.title',\n icon: module.icon,\n policy: {\n features: [module.name],\n },\n children: [\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowDefinitions,\n text: '@workflow-management:workflow-definitions.menus.workflow-definitions.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.workflowDefinition.name),\n priority: 10,\n icon: RootConfig.entities.workflowDefinition.icon,\n },\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowInstances,\n text: '@workflow-management:workflow-instances.menus.workflow-instances.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.workflowInstance.name),\n priority: 20,\n icon: RootConfig.entities.workflowInstance.icon,\n },\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowStudio,\n text: '@workflow-management:workflow-studio.menus.workflow-studio.title',\n path: `/${this.sessionService.application?.name ?? module.name}/workflow-management/studio`,\n priority: 30,\n icon: 'fa-light fa-wrench',\n },\n {\n name: AXPWorkflowManagementMenuKeys.ActivityDefinitions,\n text: '@workflow-management:activities.menus.activity.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.activityDefinition.name),\n priority: 40,\n icon: RootConfig.entities.activityDefinition.icon,\n },\n ],\n },\n ]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvbWVudS5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUQsTUFBTSxPQUFPLGVBQWU7SUFBNUI7UUFDVSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFvRHJELENBQUM7SUFsREMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUErQjtRQUMzQyxNQUFNLFlBQVksR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFFakMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNmO2dCQUNFLElBQUksRUFBRSw2QkFBNkIsQ0FBQyxJQUFJO2dCQUN4QyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsOENBQThDO2dCQUNwRCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2lCQUN4QjtnQkFDRCxRQUFRLEVBQUU7b0JBQ1I7d0JBQ0UsSUFBSSxFQUFFLDZCQUE2QixDQUFDLG1CQUFtQjt3QkFDdkQsSUFBSSxFQUFFLDRFQUE0RTt3QkFDbEYsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7d0JBQzdGLFFBQVEsRUFBRSxFQUFFO3dCQUNaLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUk7cUJBQ2xEO29CQUNEO3dCQUNFLElBQUksRUFBRSw2QkFBNkIsQ0FBQyxpQkFBaUI7d0JBQ3JELElBQUksRUFBRSx3RUFBd0U7d0JBQzlFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO3dCQUMzRixRQUFRLEVBQUUsRUFBRTt3QkFDWixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJO3FCQUNoRDtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsNkJBQTZCLENBQUMsY0FBYzt3QkFDbEQsSUFBSSxFQUFFLGtFQUFrRTt3QkFDeEUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLDZCQUE2Qjt3QkFDM0YsUUFBUSxFQUFFLEVBQUU7d0JBQ1osSUFBSSxFQUFFLG9CQUFvQjtxQkFDM0I7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLDZCQUE2QixDQUFDLG1CQUFtQjt3QkFDdkQsSUFBSSxFQUFFLHNEQUFzRDt3QkFDNUQsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7d0JBQzdGLFFBQVEsRUFBRSxFQUFFO3dCQUNaLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUk7cUJBQ2xEO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vYXV0aCc7XG5pbXBvcnQgeyBBWFBNZW51UHJvdmlkZXIsIEFYUE1lbnVQcm92aWRlckNvbnRleHQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7IEFYUFdvcmtmbG93TWFuYWdlbWVudE1lbnVLZXlzIH0gZnJvbSAnLi9tZW51LmtleXMnO1xuXG5leHBvcnQgY2xhc3MgQVhNTWVudVByb3ZpZGVyIGltcGxlbWVudHMgQVhQTWVudVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSBlbnRpdHlTZXJ2aWNlID0gaW5qZWN0KEFYUEVudGl0eVNlcnZpY2UpO1xuICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcblxuICBhc3luYyBwcm92aWRlKGNvbnRleHQ6IEFYUE1lbnVQcm92aWRlckNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc0F1dGhvcml6ZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnNlc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZCQpO1xuICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbW9kdWxlID0gUm9vdENvbmZpZy5tb2R1bGU7XG5cbiAgICBjb250ZXh0LmFkZEl0ZW1zKFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogQVhQV29ya2Zsb3dNYW5hZ2VtZW50TWVudUtleXMuUm9vdCxcbiAgICAgICAgcHJpb3JpdHk6IDk1MDAsXG4gICAgICAgIHRleHQ6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDptb2R1bGUubWVudXMucm9vdC50aXRsZScsXG4gICAgICAgIGljb246IG1vZHVsZS5pY29uLFxuICAgICAgICBwb2xpY3k6IHtcbiAgICAgICAgICBmZWF0dXJlczogW21vZHVsZS5uYW1lXSxcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBBWFBXb3JrZmxvd01hbmFnZW1lbnRNZW51S2V5cy5Xb3JrZmxvd0RlZmluaXRpb25zLFxuICAgICAgICAgICAgdGV4dDogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LWRlZmluaXRpb25zLm1lbnVzLndvcmtmbG93LWRlZmluaXRpb25zLnRpdGxlJyxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuZW50aXR5U2VydmljZS5jcmVhdGVQYXRoKG1vZHVsZS5uYW1lLCBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93RGVmaW5pdGlvbi5uYW1lKSxcbiAgICAgICAgICAgIHByaW9yaXR5OiAxMCxcbiAgICAgICAgICAgIGljb246IFJvb3RDb25maWcuZW50aXRpZXMud29ya2Zsb3dEZWZpbml0aW9uLmljb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBBWFBXb3JrZmxvd01hbmFnZW1lbnRNZW51S2V5cy5Xb3JrZmxvd0luc3RhbmNlcyxcbiAgICAgICAgICAgIHRleHQ6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1pbnN0YW5jZXMubWVudXMud29ya2Zsb3ctaW5zdGFuY2VzLnRpdGxlJyxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuZW50aXR5U2VydmljZS5jcmVhdGVQYXRoKG1vZHVsZS5uYW1lLCBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93SW5zdGFuY2UubmFtZSksXG4gICAgICAgICAgICBwcmlvcml0eTogMjAsXG4gICAgICAgICAgICBpY29uOiBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93SW5zdGFuY2UuaWNvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IEFYUFdvcmtmbG93TWFuYWdlbWVudE1lbnVLZXlzLldvcmtmbG93U3R1ZGlvLFxuICAgICAgICAgICAgdGV4dDogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5tZW51cy53b3JrZmxvdy1zdHVkaW8udGl0bGUnLFxuICAgICAgICAgICAgcGF0aDogYC8ke3RoaXMuc2Vzc2lvblNlcnZpY2UuYXBwbGljYXRpb24/Lm5hbWUgPz8gbW9kdWxlLm5hbWV9L3dvcmtmbG93LW1hbmFnZW1lbnQvc3R1ZGlvYCxcbiAgICAgICAgICAgIHByaW9yaXR5OiAzMCxcbiAgICAgICAgICAgIGljb246ICdmYS1saWdodCBmYS13cmVuY2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogQVhQV29ya2Zsb3dNYW5hZ2VtZW50TWVudUtleXMuQWN0aXZpdHlEZWZpbml0aW9ucyxcbiAgICAgICAgICAgIHRleHQ6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDphY3Rpdml0aWVzLm1lbnVzLmFjdGl2aXR5LnRpdGxlJyxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMuZW50aXR5U2VydmljZS5jcmVhdGVQYXRoKG1vZHVsZS5uYW1lLCBSb290Q29uZmlnLmVudGl0aWVzLmFjdGl2aXR5RGVmaW5pdGlvbi5uYW1lKSxcbiAgICAgICAgICAgIHByaW9yaXR5OiA0MCxcbiAgICAgICAgICAgIGljb246IFJvb3RDb25maWcuZW50aXRpZXMuYWN0aXZpdHlEZWZpbml0aW9uLmljb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityStorageService } from '@acorex/platform/layout/entity';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ExecuteQuery Activity (Backend)\n *\n * Executes a query operation.\n * This is a mock implementation that simulates common queries.\n *\n * Execution Mode: backend\n * Activity Type: workflow-activity:execute-query\n *\n * Outcomes:\n * - Done: Query executed successfully\n * - Valid: Data is valid (for validation queries)\n * - Exists: Data exists (for existence checks)\n * - NotFound: Data not found\n * - Failed: Query execution failed\n */\nexport class ExecuteQueryActivity {\n constructor() {\n //#region ---- Services ----\n this.storageService = inject(AXPEntityStorageService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n console.log(`[ExecuteQueryActivity] Executing query '${input.queryKey}' with parameters:`, input.parameters);\n // Route to appropriate query handler based on queryKey\n const result = await this.routeQuery(input.queryKey, input.parameters || {});\n return {\n success: true,\n data: result,\n };\n }\n catch (error) {\n console.error(`[ExecuteQueryActivity] Query '${input.queryKey}' failed:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Unknown error',\n },\n data: {\n output: {\n data: null,\n success: false,\n error: error.message || 'Unknown error',\n },\n outcomes: {\n Failed: true,\n },\n },\n };\n }\n }\n //#endregion\n //#region ---- Query Routing ----\n /**\n * Routes query to appropriate handler based on queryKey.\n */\n async routeQuery(queryKey, parameters) {\n switch (queryKey) {\n case 'User:CheckEmailExists':\n return await this.checkEmailExists(parameters);\n case 'Data:Validate':\n return await this.validateData(parameters);\n default:\n // Mock: return empty result for unknown queries\n console.warn(`[ExecuteQueryActivity] Unknown query key: ${queryKey}`);\n return {\n output: {\n data: null,\n success: true,\n },\n outcomes: {\n Done: true,\n },\n };\n }\n }\n //#endregion\n //#region ---- Query Handlers ----\n /**\n * Checks if email already exists in database.\n */\n async checkEmailExists(parameters) {\n const email = parameters['email'] || parameters['userEmail'];\n // Mock implementation: randomly decide if email exists\n // In production, check against real database\n const exists = Math.random() > 0.8; // 20% chance email exists\n console.log(`[ExecuteQueryActivity] Checking email '${email}': ${exists ? 'EXISTS' : 'AVAILABLE'}`);\n const outcome = exists ? 'Exists' : 'Valid';\n return {\n output: {\n data: {\n email,\n exists,\n available: !exists,\n },\n success: true,\n },\n outcomes: {\n [outcome]: true,\n Done: true,\n },\n };\n }\n /**\n * Validates data structure and content.\n */\n async validateData(parameters) {\n const data = parameters['data'];\n // Mock validation: check if data exists and has content\n const isValid = data && Object.keys(data).length > 0;\n console.log(`[ExecuteQueryActivity] Validating data: ${isValid ? 'VALID' : 'INVALID'}`);\n const outcome = isValid ? 'Valid' : 'Invalid';\n return {\n output: {\n data: {\n valid: isValid,\n errors: isValid ? [] : ['Data is empty or invalid'],\n },\n success: true,\n },\n outcomes: {\n [outcome]: true,\n Done: true,\n },\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteQueryActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteQueryActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteQueryActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1xdWVyeS5hY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMvZXhlY3V0ZS1xdWVyeS5hY3Rpdml0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUF1Q3pFLFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBRGpDO1FBR0UsZ0NBQWdDO1FBRWYsbUJBQWMsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQTZJbkU7SUEzSUMsWUFBWTtJQUVaLGlEQUFpRDtJQUVqRCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQXdCO1FBRXhCLElBQUksQ0FBQztZQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsMkNBQTJDLEtBQUssQ0FBQyxRQUFRLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUU3Ryx1REFBdUQ7WUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUU3RSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxNQUFNO2FBQ2IsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEtBQUssQ0FBQyxRQUFRLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVqRixPQUFPO2dCQUNM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LE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO2lCQUNwRDtnQkFDRCxPQUFPLEVBQUUsSUFBSTthQUNkO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSTtnQkFDZixJQUFJLEVBQUUsSUFBSTthQUNYO1NBQ0YsQ0FBQztJQUNKLENBQUM7K0dBOUlVLG9CQUFvQjttSEFBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEVudGl0eVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAgIC0tLS1cblxuLyoqXG4gKiBJbnB1dCBmb3IgRXhlY3V0ZVF1ZXJ5IGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVRdWVyeUlucHV0IHtcbiAgLyoqXG4gICAqIFF1ZXJ5IGtleSB0byBleGVjdXRlIChlLmcuLCBcIlVzZXI6Q2hlY2tFbWFpbEV4aXN0c1wiKVxuICAgKi9cbiAgcXVlcnlLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogUXVlcnkgcGFyYW1ldGVyc1xuICAgKi9cbiAgcGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogT3V0cHV0IGZvciBFeGVjdXRlUXVlcnkgYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZVF1ZXJ5T3V0cHV0IHtcbiAgLyoqXG4gICAqIFF1ZXJ5IHJlc3VsdCBkYXRhXG4gICAqL1xuICBkYXRhOiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcXVlcnkgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAqL1xuICBzdWNjZXNzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIGlmIHF1ZXJ5IGZhaWxlZFxuICAgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIEV4ZWN1dGVRdWVyeSBBY3Rpdml0eSAoQmFja2VuZClcbiAqIFxuICogRXhlY3V0ZXMgYSBxdWVyeSBvcGVyYXRpb24uXG4gKiBUaGlzIGlzIGEgbW9jayBpbXBsZW1lbnRhdGlvbiB0aGF0IHNpbXVsYXRlcyBjb21tb24gcXVlcmllcy5cbiAqIFxuICogRXhlY3V0aW9uIE1vZGU6IGJhY2tlbmRcbiAqIEFjdGl2aXR5IFR5cGU6IHdvcmtmbG93LWFjdGl2aXR5OmV4ZWN1dGUtcXVlcnlcbiAqIFxuICogT3V0Y29tZXM6XG4gKiAtIERvbmU6IFF1ZXJ5IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICogLSBWYWxpZDogRGF0YSBpcyB2YWxpZCAoZm9yIHZhbGlkYXRpb24gcXVlcmllcylcbiAqIC0gRXhpc3RzOiBEYXRhIGV4aXN0cyAoZm9yIGV4aXN0ZW5jZSBjaGVja3MpXG4gKiAtIE5vdEZvdW5kOiBEYXRhIG5vdCBmb3VuZFxuICogLSBGYWlsZWQ6IFF1ZXJ5IGV4ZWN1dGlvbiBmYWlsZWRcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEV4ZWN1dGVRdWVyeUFjdGl2aXR5XG4gIGltcGxlbWVudHMgQVhQQ29tbWFuZDxFeGVjdXRlUXVlcnlJbnB1dCwgeyBvdXRwdXQ6IEV4ZWN1dGVRdWVyeU91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U3RvcmFnZVNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQVhQQ29tbWFuZCBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBFeGVjdXRlUXVlcnlJbnB1dCxcbiAgKTogUHJvbWlzZTxBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdDx7IG91dHB1dDogRXhlY3V0ZVF1ZXJ5T3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9Pj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0V4ZWN1dGVRdWVyeUFjdGl2aXR5XSBFeGVjdXRpbmcgcXVlcnkgJyR7aW5wdXQucXVlcnlLZXl9JyB3aXRoIHBhcmFtZXRlcnM6YCwgaW5wdXQucGFyYW1ldGVycyk7XG5cbiAgICAgIC8vIFJvdXRlIHRvIGFwcHJvcHJpYXRlIHF1ZXJ5IGhhbmRsZXIgYmFzZWQgb24gcXVlcnlLZXlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucm91dGVRdWVyeShpbnB1dC5xdWVyeUtleSwgaW5wdXQucGFyYW1ldGVycyB8fCB7fSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW0V4ZWN1dGVRdWVyeUFjdGl2aXR5XSBRdWVyeSAnJHtpbnB1dC5xdWVyeUtleX0nIGZhaWxlZDpgLCBlcnJvcik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgdGV4dDogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICBGYWlsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBRdWVyeSBSb3V0aW5nICAgLS0tLVxuXG4gIC8qKlxuICAgKiBSb3V0ZXMgcXVlcnkgdG8gYXBwcm9wcmlhdGUgaGFuZGxlciBiYXNlZCBvbiBxdWVyeUtleS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcm91dGVRdWVyeShcbiAgICBxdWVyeUtleTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogUHJvbWlzZTx7IG91dHB1dDogRXhlY3V0ZVF1ZXJ5T3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG4gICAgc3dpdGNoIChxdWVyeUtleSkge1xuICAgICAgY2FzZSAnVXNlcjpDaGVja0VtYWlsRXhpc3RzJzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tFbWFpbEV4aXN0cyhwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSAnRGF0YTpWYWxpZGF0ZSc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZhbGlkYXRlRGF0YShwYXJhbWV0ZXJzKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gTW9jazogcmV0dXJuIGVtcHR5IHJlc3VsdCBmb3IgdW5rbm93biBxdWVyaWVzXG4gICAgICAgIGNvbnNvbGUud2FybihgW0V4ZWN1dGVRdWVyeUFjdGl2aXR5XSBVbmtub3duIHF1ZXJ5IGtleTogJHtxdWVyeUtleX1gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIERvbmU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IEhhbmRsZXJzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZW1haWwgYWxyZWFkeSBleGlzdHMgaW4gZGF0YWJhc2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNoZWNrRW1haWxFeGlzdHMoXG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPHsgb3V0cHV0OiBFeGVjdXRlUXVlcnlPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+IHtcbiAgICBjb25zdCBlbWFpbCA9IHBhcmFtZXRlcnNbJ2VtYWlsJ10gfHwgcGFyYW1ldGVyc1sndXNlckVtYWlsJ107XG5cbiAgICAvLyBNb2NrIGltcGxlbWVudGF0aW9uOiByYW5kb21seSBkZWNpZGUgaWYgZW1haWwgZXhpc3RzXG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgY2hlY2sgYWdhaW5zdCByZWFsIGRhdGFiYXNlXG4gICAgY29uc3QgZXhpc3RzID0gTWF0aC5yYW5kb20oKSA+IDAuODsgLy8gMjAlIGNoYW5jZSBlbWFpbCBleGlzdHNcblxuICAgIGNvbnNvbGUubG9nKGBbRXhlY3V0ZVF1ZXJ5QWN0aXZpdHldIENoZWNraW5nIGVtYWlsICcke2VtYWlsfSc6ICR7ZXhpc3RzID8gJ0VYSVNUUycgOiAnQVZBSUxBQkxFJ31gKTtcblxuICAgIGNvbnN0IG91dGNvbWUgPSBleGlzdHMgPyAnRXhpc3RzJyA6ICdWYWxpZCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3V0cHV0OiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBleGlzdHMsXG4gICAgICAgICAgYXZhaWxhYmxlOiAhZXhpc3RzLFxuICAgICAgICB9LFxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgIFtvdXRjb21lXTogdHJ1ZSxcbiAgICAgICAgRG9uZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZGF0YSBzdHJ1Y3R1cmUgYW5kIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlRGF0YShcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFByb21pc2U8eyBvdXRwdXQ6IEV4ZWN1dGVRdWVyeU91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAgIGNvbnN0IGRhdGEgPSBwYXJhbWV0ZXJzWydkYXRhJ107XG5cbiAgICAvLyBNb2NrIHZhbGlkYXRpb246IGNoZWNrIGlmIGRhdGEgZXhpc3RzIGFuZCBoYXMgY29udGVudFxuICAgIGNvbnN0IGlzVmFsaWQgPSBkYXRhICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zb2xlLmxvZyhgW0V4ZWN1dGVRdWVyeUFjdGl2aXR5XSBWYWxpZGF0aW5nIGRhdGE6ICR7aXNWYWxpZCA/ICdWQUxJRCcgOiAnSU5WQUxJRCd9YCk7XG5cbiAgICBjb25zdCBvdXRjb21lID0gaXNWYWxpZCA/ICdWYWxpZCcgOiAnSW52YWxpZCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3V0cHV0OiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB2YWxpZDogaXNWYWxpZCxcbiAgICAgICAgICBlcnJvcnM6IGlzVmFsaWQgPyBbXSA6IFsnRGF0YSBpcyBlbXB0eSBvciBpbnZhbGlkJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICB9LFxuICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgW291dGNvbWVdOiB0cnVlLFxuICAgICAgICBEb25lOiB0cnVlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG5cblxuIl19","import { Injectable } from '@angular/core';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ExecuteCommand Activity (Backend)\n *\n * Executes a command operation.\n * This is a mock implementation that simulates common commands.\n *\n * Execution Mode: backend\n * Activity Type: workflow-activity:execute-command\n *\n * Outcomes:\n * - Done: Command executed successfully\n * - Failed: Command execution failed\n */\nexport class ExecuteCommandActivity {\n async execute(input) {\n try {\n console.log(`[ExecuteCommandActivity] Executing command '${input.commandKey}' with input:`, input.input);\n // Route to appropriate command handler based on commandKey\n const result = await this.routeCommand(input.commandKey, input.input || {});\n return {\n success: true,\n data: result,\n };\n }\n catch (error) {\n console.error(`[ExecuteCommandActivity] Command '${input.commandKey}' failed:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Unknown error',\n },\n data: {\n output: {\n result: null,\n success: false,\n error: error.message || 'Unknown error',\n },\n outcomes: {\n Failed: true,\n },\n },\n };\n }\n }\n //#endregion\n //#region ---- Command Routing ----\n /**\n * Routes command to appropriate handler based on commandKey.\n */\n async routeCommand(commandKey, input) {\n switch (commandKey) {\n case 'User:Create':\n return await this.createUser(input);\n case 'Data:Process':\n return await this.processData(input);\n default:\n // Mock: return success for unknown commands\n console.warn(`[ExecuteCommandActivity] Unknown command key: ${commandKey}`);\n return {\n output: {\n result: { success: true },\n success: true,\n },\n outcomes: {\n Done: true,\n },\n };\n }\n }\n //#endregion\n //#region ---- Command Handlers ----\n /**\n * Creates a new user in the system.\n */\n async createUser(input) {\n // Extract user data from input\n const email = input['email'] || input['userEmail'];\n const name = input['name'] || input['userName'] || 'New User';\n const role = input['role'] || input['userRole'] || 'User';\n // Create new user object\n const userId = AXPDataGenerator.uuid();\n const newUser = {\n id: userId,\n email,\n name,\n role,\n createdAt: new Date().toISOString(),\n isActive: true,\n };\n console.log(`[ExecuteCommandActivity] Creating user:`, newUser);\n // In production, save to database via EntityStorageService or API\n // For mock, we'll just simulate success\n // await this.storageService.create('User', newUser);\n return {\n output: {\n result: newUser,\n success: true,\n entityId: userId,\n },\n outcomes: {\n Done: true,\n },\n };\n }\n /**\n * Processes data according to business rules.\n */\n async processData(input) {\n const data = input['data'];\n // Mock processing: just add timestamp and processed flag\n const processedData = {\n ...data,\n processed: true,\n processedAt: new Date().toISOString(),\n };\n console.log(`[ExecuteCommandActivity] Processed data:`, processedData);\n return {\n output: {\n result: processedData,\n success: true,\n },\n outcomes: {\n Done: true,\n },\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteCommandActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteCommandActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteCommandActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1jb21tYW5kLmFjdGl2aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy9leGVjdXRlLWNvbW1hbmQuYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQTJCLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBOENsRixZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQUdqQyxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQTBCO1FBRTFCLElBQUksQ0FBQztZQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsK0NBQStDLEtBQUssQ0FBQyxVQUFVLGVBQWUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekcsMkRBQTJEO1lBQzNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFFNUUsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixJQUFJLEVBQUUsTUFBTTthQUNiLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxLQUFLLENBQUMsVUFBVSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFdkYsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZTtpQkFDdkM7Z0JBQ0QsSUFBSSxFQUFFO29CQUNK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QUUsSUFBSTthQUNYO1NBQ0YsQ0FBQztJQUNKLENBQUM7K0dBN0lVLHNCQUFzQjttSEFBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdCwgQVhQRGF0YUdlbmVyYXRvciB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEVudGl0eVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAgIC0tLS1cblxuLyoqXG4gKiBJbnB1dCBmb3IgRXhlY3V0ZUNvbW1hbmQgYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZUNvbW1hbmRJbnB1dCB7XG4gIC8qKlxuICAgKiBDb21tYW5kIGtleSB0byBleGVjdXRlIChlLmcuLCBcIlVzZXI6Q3JlYXRlXCIpXG4gICAqL1xuICBjb21tYW5kS2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbW1hbmQgaW5wdXQgZGF0YVxuICAgKi9cbiAgaW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIE91dHB1dCBmb3IgRXhlY3V0ZUNvbW1hbmQgYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZUNvbW1hbmRPdXRwdXQge1xuICAvKipcbiAgICogQ29tbWFuZCByZXN1bHQgZGF0YVxuICAgKi9cbiAgcmVzdWx0OiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHlcbiAgICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgaWYgY29tbWFuZCBmYWlsZWRcbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVkL1VwZGF0ZWQgZW50aXR5IElEIChpZiBhcHBsaWNhYmxlKVxuICAgKi9cbiAgZW50aXR5SWQ/OiBzdHJpbmc7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIEV4ZWN1dGVDb21tYW5kIEFjdGl2aXR5IChCYWNrZW5kKVxuICogXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQgb3BlcmF0aW9uLlxuICogVGhpcyBpcyBhIG1vY2sgaW1wbGVtZW50YXRpb24gdGhhdCBzaW11bGF0ZXMgY29tbW9uIGNvbW1hbmRzLlxuICogXG4gKiBFeGVjdXRpb24gTW9kZTogYmFja2VuZFxuICogQWN0aXZpdHkgVHlwZTogd29ya2Zsb3ctYWN0aXZpdHk6ZXhlY3V0ZS1jb21tYW5kXG4gKiBcbiAqIE91dGNvbWVzOlxuICogLSBEb25lOiBDb21tYW5kIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICogLSBGYWlsZWQ6IENvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRXhlY3V0ZUNvbW1hbmRBY3Rpdml0eVxuICBpbXBsZW1lbnRzIEFYUENvbW1hbmQ8RXhlY3V0ZUNvbW1hbmRJbnB1dCwgeyBvdXRwdXQ6IEV4ZWN1dGVDb21tYW5kT3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG5cbiAgYXN5bmMgZXhlY3V0ZShcbiAgICBpbnB1dDogRXhlY3V0ZUNvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdDx7IG91dHB1dDogRXhlY3V0ZUNvbW1hbmRPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKGBbRXhlY3V0ZUNvbW1hbmRBY3Rpdml0eV0gRXhlY3V0aW5nIGNvbW1hbmQgJyR7aW5wdXQuY29tbWFuZEtleX0nIHdpdGggaW5wdXQ6YCwgaW5wdXQuaW5wdXQpO1xuXG4gICAgICAvLyBSb3V0ZSB0byBhcHByb3ByaWF0ZSBjb21tYW5kIGhhbmRsZXIgYmFzZWQgb24gY29tbWFuZEtleVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yb3V0ZUNvbW1hbmQoaW5wdXQuY29tbWFuZEtleSwgaW5wdXQuaW5wdXQgfHwge30pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtFeGVjdXRlQ29tbWFuZEFjdGl2aXR5XSBDb21tYW5kICcke2lucHV0LmNvbW1hbmRLZXl9JyBmYWlsZWQ6YCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIHRleHQ6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICBGYWlsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21tYW5kIFJvdXRpbmcgICAtLS0tXG5cbiAgLyoqXG4gICAqIFJvdXRlcyBjb21tYW5kIHRvIGFwcHJvcHJpYXRlIGhhbmRsZXIgYmFzZWQgb24gY29tbWFuZEtleS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcm91dGVDb21tYW5kKFxuICAgIGNvbW1hbmRLZXk6IHN0cmluZyxcbiAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPHsgb3V0cHV0OiBFeGVjdXRlQ29tbWFuZE91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAgIHN3aXRjaCAoY29tbWFuZEtleSkge1xuICAgICAgY2FzZSAnVXNlcjpDcmVhdGUnOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVVc2VyKGlucHV0KTtcblxuICAgICAgY2FzZSAnRGF0YTpQcm9jZXNzJzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvY2Vzc0RhdGEoaW5wdXQpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBNb2NrOiByZXR1cm4gc3VjY2VzcyBmb3IgdW5rbm93biBjb21tYW5kc1xuICAgICAgICBjb25zb2xlLndhcm4oYFtFeGVjdXRlQ29tbWFuZEFjdGl2aXR5XSBVbmtub3duIGNvbW1hbmQga2V5OiAke2NvbW1hbmRLZXl9YCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICByZXN1bHQ6IHsgc3VjY2VzczogdHJ1ZSB9LFxuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICBEb25lOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21tYW5kIEhhbmRsZXJzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHVzZXIgaW4gdGhlIHN5c3RlbS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVXNlcihcbiAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPHsgb3V0cHV0OiBFeGVjdXRlQ29tbWFuZE91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAgIC8vIEV4dHJhY3QgdXNlciBkYXRhIGZyb20gaW5wdXRcbiAgICBjb25zdCBlbWFpbCA9IGlucHV0WydlbWFpbCddIHx8IGlucHV0Wyd1c2VyRW1haWwnXTtcbiAgICBjb25zdCBuYW1lID0gaW5wdXRbJ25hbWUnXSB8fCBpbnB1dFsndXNlck5hbWUnXSB8fCAnTmV3IFVzZXInO1xuICAgIGNvbnN0IHJvbGUgPSBpbnB1dFsncm9sZSddIHx8IGlucHV0Wyd1c2VyUm9sZSddIHx8ICdVc2VyJztcblxuICAgIC8vIENyZWF0ZSBuZXcgdXNlciBvYmplY3RcbiAgICBjb25zdCB1c2VySWQgPSBBWFBEYXRhR2VuZXJhdG9yLnV1aWQoKTtcbiAgICBjb25zdCBuZXdVc2VyID0ge1xuICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgIGVtYWlsLFxuICAgICAgbmFtZSxcbiAgICAgIHJvbGUsXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZyhgW0V4ZWN1dGVDb21tYW5kQWN0aXZpdHldIENyZWF0aW5nIHVzZXI6YCwgbmV3VXNlcik7XG5cbiAgICAvLyBJbiBwcm9kdWN0aW9uLCBzYXZlIHRvIGRhdGFiYXNlIHZpYSBFbnRpdHlTdG9yYWdlU2VydmljZSBvciBBUElcbiAgICAvLyBGb3IgbW9jaywgd2UnbGwganVzdCBzaW11bGF0ZSBzdWNjZXNzXG4gICAgLy8gYXdhaXQgdGhpcy5zdG9yYWdlU2VydmljZS5jcmVhdGUoJ1VzZXInLCBuZXdVc2VyKTtcblxuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXQ6IHtcbiAgICAgICAgcmVzdWx0OiBuZXdVc2VyLFxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBlbnRpdHlJZDogdXNlcklkLFxuICAgICAgfSxcbiAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgIERvbmU6IHRydWUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGRhdGEgYWNjb3JkaW5nIHRvIGJ1c2luZXNzIHJ1bGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShcbiAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPHsgb3V0cHV0OiBFeGVjdXRlQ29tbWFuZE91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAgIGNvbnN0IGRhdGEgPSBpbnB1dFsnZGF0YSddO1xuXG4gICAgLy8gTW9jayBwcm9jZXNzaW5nOiBqdXN0IGFkZCB0aW1lc3RhbXAgYW5kIHByb2Nlc3NlZCBmbGFnXG4gICAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBwcm9jZXNzZWQ6IHRydWUsXG4gICAgICBwcm9jZXNzZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZyhgW0V4ZWN1dGVDb21tYW5kQWN0aXZpdHldIFByb2Nlc3NlZCBkYXRhOmAsIHByb2Nlc3NlZERhdGEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dDoge1xuICAgICAgICByZXN1bHQ6IHByb2Nlc3NlZERhdGEsXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICB9LFxuICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgRG9uZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG5cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ShowConfirmPopup Activity (Frontend)\n *\n * Shows a confirmation popup dialog with OK and Cancel buttons.\n * This activity runs on the frontend and requires user interaction.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-confirm-popup\n *\n * Outcomes:\n * - ok: User clicked OK button\n * - cancel: User clicked Cancel button or closed the dialog\n */\nexport class ShowConfirmPopupActivity {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.dialogService = inject(AXDialogService);\n this.translationService = inject(AXTranslationService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n // Translate title and message if they are translation keys\n const title = await this.translationService.translateAsync(input.title);\n const message = await this.translationService.translateAsync(input.message);\n // Show confirmation dialog\n const dialogResult = await this.dialogService.confirm(title, message, input.type || 'warning', input.direction || 'horizontal', input.closable ?? false, input.defaultAction || 'cancel');\n const confirmed = dialogResult.result === true;\n // Determine outcome based on user action\n const outcomes = confirmed\n ? { ok: true }\n : { cancel: true };\n console.log(`[ShowConfirmPopupActivity] User ${confirmed ? 'confirmed' : 'cancelled'} the dialog`);\n return {\n success: true,\n data: {\n output: {},\n outcomes,\n },\n };\n }\n catch (error) {\n console.error(`[ShowConfirmPopupActivity] Failed to show confirm popup:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show confirmation dialog',\n },\n data: {\n output: {},\n outcomes: {\n cancel: true,\n },\n },\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowConfirmPopupActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowConfirmPopupActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowConfirmPopupActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdy1jb25maXJtLXBvcHVwLmFjdGl2aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy9zaG93LWNvbmZpcm0tcG9wdXAuYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQWdEaEUsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFHRSwrQ0FBK0M7UUFFOUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0EyRHBFO0lBekRDLFlBQVk7SUFFWixpREFBaUQ7SUFFakQsS0FBSyxDQUFDLE9BQU8sQ0FDWCxLQUE0QjtRQUU1QixJQUFJLENBQUM7WUFDSCwyREFBMkQ7WUFDM0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTVFLDJCQUEyQjtZQUMzQixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUNuRCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxFQUN2QixLQUFLLENBQUMsU0FBUyxJQUFJLFlBQVksRUFDL0IsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLEVBQ3ZCLEtBQUssQ0FBQyxhQUFhLElBQUksUUFBUSxDQUNoQyxDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7WUFFL0MseUNBQXlDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLFNBQVM7Z0JBQ3hCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUU7Z0JBQ2QsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1lBRXJCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLGFBQWEsQ0FBQyxDQUFDO1lBRW5HLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRSxFQUE0QjtvQkFDcEMsUUFBUTtpQkFDVDthQUNGLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWpGLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLG9DQUFvQztpQkFDNUQ7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRSxFQUE0QjtvQkFDcEMsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2lCQUNGO2FBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOytHQTdEVSx3QkFBd0I7bUhBQXhCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ29tbWFuZCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBBWERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGlhbG9nJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYU3R5bGVDb2xvclR5cGUgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuXG4vLyNyZWdpb24gLS0tLSAgIFR5cGVzICAgLS0tLVxuXG4vKipcbiAqIElucHV0IGZvciBTaG93Q29uZmlybVBvcHVwIGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3dDb25maXJtUG9wdXBJbnB1dCB7XG4gIC8qKlxuICAgKiBUaXRsZSBvZiB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgKi9cbiAgdGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZS9jb250ZW50IG9mIHRoZSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpYWxvZyB0eXBlL2NvbG9yIChlLmcuLCAnd2FybmluZycsICdkYW5nZXInLCAnaW5mbycsICdzdWNjZXNzJylcbiAgICovXG4gIHR5cGU/OiBBWFN0eWxlQ29sb3JUeXBlO1xuXG4gIC8qKlxuICAgKiBCdXR0b24gbGF5b3V0IGRpcmVjdGlvbiAoJ2hvcml6b250YWwnIG9yICd2ZXJ0aWNhbCcpXG4gICAqL1xuICBkaXJlY3Rpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGRpYWxvZyBpcyBjbG9zYWJsZVxuICAgKi9cbiAgY2xvc2FibGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGFjdGlvbiBidXR0b24gKCdjb25maXJtJyBvciAnY2FuY2VsJylcbiAgICovXG4gIGRlZmF1bHRBY3Rpb24/OiAnY29uZmlybScgfCAnY2FuY2VsJztcbn1cblxuLyoqXG4gKiBPdXRwdXQgZm9yIFNob3dDb25maXJtUG9wdXAgYWN0aXZpdHkuXG4gKiBPdXRjb21lIGlzIGRldGVybWluZWQgYnkgdGhlIG91dGNvbWVzIG9iamVjdCAob2sgb3IgY2FuY2VsKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaG93Q29uZmlybVBvcHVwT3V0cHV0IHtcbiAgLy8gTm8gb3V0cHV0IGRhdGEgbmVlZGVkIC0gb3V0Y29tZSBpcyBkZXRlcm1pbmVkIGJ5IG91dGNvbWVzXG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIFNob3dDb25maXJtUG9wdXAgQWN0aXZpdHkgKEZyb250ZW5kKVxuICogXG4gKiBTaG93cyBhIGNvbmZpcm1hdGlvbiBwb3B1cCBkaWFsb2cgd2l0aCBPSyBhbmQgQ2FuY2VsIGJ1dHRvbnMuXG4gKiBUaGlzIGFjdGl2aXR5IHJ1bnMgb24gdGhlIGZyb250ZW5kIGFuZCByZXF1aXJlcyB1c2VyIGludGVyYWN0aW9uLlxuICogXG4gKiBFeGVjdXRpb24gTW9kZTogZnJvbnRlbmRcbiAqIEFjdGl2aXR5IFR5cGU6IHdvcmtmbG93LWFjdGl2aXR5OnNob3ctY29uZmlybS1wb3B1cFxuICogXG4gKiBPdXRjb21lczpcbiAqIC0gb2s6IFVzZXIgY2xpY2tlZCBPSyBidXR0b25cbiAqIC0gY2FuY2VsOiBVc2VyIGNsaWNrZWQgQ2FuY2VsIGJ1dHRvbiBvciBjbG9zZWQgdGhlIGRpYWxvZ1xuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2hvd0NvbmZpcm1Qb3B1cEFjdGl2aXR5XG4gIGltcGxlbWVudHMgQVhQQ29tbWFuZDxTaG93Q29uZmlybVBvcHVwSW5wdXQsIHsgb3V0cHV0OiBTaG93Q29uZmlybVBvcHVwT3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFYRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEFYUENvbW1hbmQgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbiAgYXN5bmMgZXhlY3V0ZShcbiAgICBpbnB1dDogU2hvd0NvbmZpcm1Qb3B1cElucHV0LFxuICApOiBQcm9taXNlPEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0PHsgb3V0cHV0OiBTaG93Q29uZmlybVBvcHVwT3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9Pj4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBUcmFuc2xhdGUgdGl0bGUgYW5kIG1lc3NhZ2UgaWYgdGhleSBhcmUgdHJhbnNsYXRpb24ga2V5c1xuICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhpbnB1dC50aXRsZSk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoaW5wdXQubWVzc2FnZSk7XG5cbiAgICAgIC8vIFNob3cgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgY29uc3QgZGlhbG9nUmVzdWx0ID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBpbnB1dC50eXBlIHx8ICd3YXJuaW5nJyxcbiAgICAgICAgaW5wdXQuZGlyZWN0aW9uIHx8ICdob3Jpem9udGFsJyxcbiAgICAgICAgaW5wdXQuY2xvc2FibGUgPz8gZmFsc2UsXG4gICAgICAgIGlucHV0LmRlZmF1bHRBY3Rpb24gfHwgJ2NhbmNlbCcsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBjb25maXJtZWQgPSBkaWFsb2dSZXN1bHQucmVzdWx0ID09PSB0cnVlO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgb3V0Y29tZSBiYXNlZCBvbiB1c2VyIGFjdGlvblxuICAgICAgY29uc3Qgb3V0Y29tZXMgPSBjb25maXJtZWRcbiAgICAgICAgPyB7IG9rOiB0cnVlIH1cbiAgICAgICAgOiB7IGNhbmNlbDogdHJ1ZSB9O1xuXG4gICAgICBjb25zb2xlLmxvZyhgW1Nob3dDb25maXJtUG9wdXBBY3Rpdml0eV0gVXNlciAke2NvbmZpcm1lZCA/ICdjb25maXJtZWQnIDogJ2NhbmNlbGxlZCd9IHRoZSBkaWFsb2dgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG91dHB1dDoge30gYXMgU2hvd0NvbmZpcm1Qb3B1cE91dHB1dCxcbiAgICAgICAgICBvdXRjb21lcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1Nob3dDb25maXJtUG9wdXBBY3Rpdml0eV0gRmFpbGVkIHRvIHNob3cgY29uZmlybSBwb3B1cDpgLCBlcnJvcik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgdGV4dDogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHNob3cgY29uZmlybWF0aW9uIGRpYWxvZycsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvdXRwdXQ6IHt9IGFzIFNob3dDb25maXJtUG9wdXBPdXRwdXQsXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","//#region ---- Imports ----\nimport { Injectable, inject } from '@angular/core';\nimport { AXPWidgetSerializationHelper } from '@acorex/platform/layout/widget-core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDialogRendererComponent } from '@acorex/platform/layout/builder';\nimport { cloneDeep } from 'lodash-es';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ShowLayoutPopup Activity (Frontend)\n *\n * Shows a popup dialog with a custom layout built using layout builder.\n * The layout can be provided as JSON string or AXPWidgetNode object.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-layout-popup\n *\n * Outcomes:\n * Outcomes are dynamically generated based on the actions provided in the input.\n * Each action creates a corresponding outcome with the action name (from command.name or action.name).\n * If no actions are provided, default actions (cancel, submit) are used.\n *\n * Examples:\n * - If action has command.name = 'save', outcome will be { save: true }\n * - If action has name = 'delete', outcome will be { delete: true }\n * - Default outcomes: { cancel: true } or { submit: true }\n */\nexport class ShowLayoutPopupActivity {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.popupService = inject(AXPopupService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n // Parse layout definition\n let layoutNode;\n if (typeof input.layout === 'string') {\n // If it's a JSON string, parse it\n try {\n layoutNode = AXPWidgetSerializationHelper.fromJson(input.layout);\n }\n catch (error) {\n throw new Error(`Invalid layout JSON: ${error.message}`);\n }\n }\n else {\n // If it's already an object, use it directly (clone to avoid mutations)\n layoutNode = cloneDeep(input.layout);\n }\n // Validate layout node\n if (!layoutNode || !layoutNode.type) {\n throw new Error('Invalid layout: missing type property');\n }\n // Build actions from input or use defaults\n const actions = input.actions || {\n suffix: [\n {\n title: '@general:actions.cancel.title',\n icon: 'fa-times',\n color: 'default',\n command: { name: 'cancel' },\n },\n {\n title: '@general:actions.submit.title',\n icon: 'fa-check',\n color: 'primary',\n command: { name: 'submit', options: { validate: true } },\n },\n ],\n };\n // Create dialog configuration\n const dialogConfig = {\n title: input.title || 'Dialog',\n context: input.context || {},\n definition: layoutNode,\n actions: {\n footer: {\n prefix: actions.prefix || [],\n suffix: actions.suffix || [],\n },\n },\n };\n // Extract action names for outcomes (from command.name or action.name)\n const actionNames = new Set();\n if (actions.prefix) {\n actions.prefix.forEach((action) => {\n const actionName = action.command?.name || action.name || 'unknown';\n actionNames.add(actionName);\n });\n }\n if (actions.suffix) {\n actions.suffix.forEach((action) => {\n const actionName = action.command?.name || action.name || 'unknown';\n actionNames.add(actionName);\n });\n }\n // Show dialog using AXPDialogRendererComponent\n const dialogResult = await new Promise((resolve) => {\n this.popupService.open(AXPDialogRendererComponent, {\n title: dialogConfig.title,\n size: input.size || 'md',\n closeButton: input.closeButton !== undefined ? input.closeButton : true,\n closeOnBackdropClick: false,\n draggable: false,\n data: {\n config: dialogConfig,\n callBack: (result) => {\n resolve({\n context: result.context?.() || dialogConfig.context,\n action: result.action?.() || 'cancel',\n });\n },\n },\n });\n });\n // Extract result data and action\n const result = dialogResult?.context || {};\n const action = dialogResult?.action || 'cancel';\n // Build outcomes dynamically based on action names\n // Each action creates a corresponding outcome\n const outcomes = {};\n // Set the outcome for the clicked action to true\n if (action && actionNames.has(action)) {\n outcomes[action] = true;\n }\n else if (action) {\n // If action is not in the list, still add it as outcome\n outcomes[action] = true;\n }\n console.log(`[ShowLayoutPopupActivity] Dialog closed with action: ${action}`, result);\n return {\n success: true,\n data: {\n output: {\n result,\n action,\n },\n outcomes,\n },\n };\n }\n catch (error) {\n console.error(`[ShowLayoutPopupActivity] Failed to show layout popup:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show layout popup',\n },\n data: {\n output: {\n result: {},\n action: 'cancel',\n },\n outcomes: {\n cancel: true,\n },\n },\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowLayoutPopupActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowLayoutPopupActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowLayoutPopupActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdy1sYXlvdXQtcG9wdXAuYWN0aXZpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzL3Nob3ctbGF5b3V0LXBvcHVwLmFjdGl2aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUUvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQWlCLDRCQUE0QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsMEJBQTBCLEVBQThDLE1BQU0saUNBQWlDLENBQUM7QUFFekgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUE0RHRDLFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQURwQztRQUdFLCtDQUErQztRQUU5QixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztLQWtKeEQ7SUFoSkMsWUFBWTtJQUVaLGlEQUFpRDtJQUVqRCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQTJCO1FBRTNCLElBQUksQ0FBQztZQUNILDBCQUEwQjtZQUMxQixJQUFJLFVBQXlCLENBQUM7WUFFOUIsSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLGtDQUFrQztnQkFDbEMsSUFBSSxDQUFDO29CQUNILFVBQVUsR0FBRyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHdFQUF3RTtnQkFDeEUsVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELHVCQUF1QjtZQUN2QixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUVELDJDQUEyQztZQUMzQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJO2dCQUMvQixNQUFNLEVBQUU7b0JBQ047d0JBQ0UsS0FBSyxFQUFFLCtCQUErQjt3QkFDdEMsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO3FCQUM1QjtvQkFDRDt3QkFDRSxLQUFLLEVBQUUsK0JBQStCO3dCQUN0QyxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFO3FCQUN6RDtpQkFDRjthQUNGLENBQUM7WUFFRiw4QkFBOEI7WUFDOUIsTUFBTSxZQUFZLEdBQXlCO2dCQUN6QyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxRQUFRO2dCQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFO2dCQUM1QixVQUFVLEVBQUUsVUFBVTtnQkFDdEIsT0FBTyxFQUFFO29CQUNQLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFO3dCQUM1QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFO3FCQUM3QjtpQkFDRjthQUNGLENBQUM7WUFFRix1RUFBdUU7WUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztZQUN0QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDaEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUM7b0JBQ3BFLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNoQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQztvQkFDcEUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsK0NBQStDO1lBQy9DLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQXVCLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO29CQUNqRCxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUs7b0JBQ3pCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUk7b0JBQ3hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDdkUsb0JBQW9CLEVBQUUsS0FBSztvQkFDM0IsU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLElBQUksRUFBRTt3QkFDSixNQUFNLEVBQUUsWUFBWTt3QkFDcEIsUUFBUSxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUU7NEJBQ3hCLE9BQU8sQ0FBQztnQ0FDTixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksWUFBWSxDQUFDLE9BQU87Z0NBQ25ELE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxRQUFROzZCQUN0QyxDQUFDLENBQUM7d0JBQ0wsQ0FBQztxQkFDRjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILGlDQUFpQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxZQUFZLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxNQUFNLE1BQU0sR0FBRyxZQUFZLEVBQUUsTUFBTSxJQUFJLFFBQVEsQ0FBQztZQUVoRCxtREFBbUQ7WUFDbkQsOENBQThDO1lBQzlDLE1BQU0sUUFBUSxHQUF3QixFQUFFLENBQUM7WUFFekMsaURBQWlEO1lBQ2pELElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMxQixDQUFDO2lCQUFNLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLHdEQUF3RDtnQkFDeEQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMxQixDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3REFBd0QsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFdEYsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixJQUFJLEVBQUU7b0JBQ0osTUFBTSxFQUFFO3dCQUNOLE1BQU07d0JBQ04sTUFBTTtxQkFDUDtvQkFDRCxRQUFRO2lCQUNUO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0RBQXdELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFL0UsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksNkJBQTZCO2lCQUNyRDtnQkFDRCxJQUFJLEVBQUU7b0JBQ0osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3FCQUNqQjtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLElBQUk7cUJBQ2I7aUJBQ0Y7YUFDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7K0dBbkpVLHVCQUF1QjttSEFBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQVhQV2lkZ2V0Tm9kZSwgQVhQV2lkZ2V0U2VyaWFsaXphdGlvbkhlbHBlciB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcbmltcG9ydCB7IEFYUG9wdXBTZXJ2aWNlLCBBWFBvcHVwU2l6ZVR5cGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHsgQVhQRGlhbG9nUmVuZGVyZXJDb21wb25lbnQsIERpYWxvZ1JlbmRlcmVyQ29uZmlnLCBEaWFsb2dSZW5kZXJlclJlc3VsdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0gfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgICAtLS0tXG5cbi8qKlxuICogSW5wdXQgZm9yIFNob3dMYXlvdXRQb3B1cCBhY3Rpdml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaG93TGF5b3V0UG9wdXBJbnB1dCB7XG4gIC8qKlxuICAgKiBMYXlvdXQgZGVmaW5pdGlvbiBhcyBKU09OIHN0cmluZyBvciBBWFBXaWRnZXROb2RlIG9iamVjdFxuICAgKi9cbiAgbGF5b3V0OiBzdHJpbmcgfCBBWFBXaWRnZXROb2RlO1xuXG4gIC8qKlxuICAgKiBEaWFsb2cgdGl0bGVcbiAgICovXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaWFsb2cgc2l6ZVxuICAgKi9cbiAgc2l6ZT86IEFYUG9wdXBTaXplVHlwZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IGNsb3NlIGJ1dHRvblxuICAgKi9cbiAgY2xvc2VCdXR0b24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIGNvbnRleHQgZGF0YSBmb3IgdGhlIGZvcm1cbiAgICovXG4gIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBEaWFsb2cgYWN0aW9ucyAoYnV0dG9ucykgdG8gZGlzcGxheSBpbiBmb290ZXJcbiAgICogRWFjaCBhY3Rpb24gd2lsbCBjcmVhdGUgYSBjb3JyZXNwb25kaW5nIG91dGNvbWVcbiAgICovXG4gIGFjdGlvbnM/OiB7XG4gICAgcHJlZml4PzogQVhQQWN0aW9uTWVudUl0ZW1bXTtcbiAgICBzdWZmaXg/OiBBWFBBY3Rpb25NZW51SXRlbVtdO1xuICB9O1xufVxuXG4vKipcbiAqIE91dHB1dCBmb3IgU2hvd0xheW91dFBvcHVwIGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3dMYXlvdXRQb3B1cE91dHB1dCB7XG4gIC8qKlxuICAgKiBSZXN1bHQgZGF0YSBmcm9tIHRoZSBkaWFsb2cgKGZvcm0gdmFsdWVzKVxuICAgKi9cbiAgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBBY3Rpb24gdGhhdCB3YXMgY2xpY2tlZCAoZS5nLiwgJ3N1Ym1pdCcsICdjYW5jZWwnLCBvciBjdXN0b20gYWN0aW9uIG5hbWUpXG4gICAqL1xuICBhY3Rpb246IHN0cmluZztcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogU2hvd0xheW91dFBvcHVwIEFjdGl2aXR5IChGcm9udGVuZClcbiAqIFxuICogU2hvd3MgYSBwb3B1cCBkaWFsb2cgd2l0aCBhIGN1c3RvbSBsYXlvdXQgYnVpbHQgdXNpbmcgbGF5b3V0IGJ1aWxkZXIuXG4gKiBUaGUgbGF5b3V0IGNhbiBiZSBwcm92aWRlZCBhcyBKU09OIHN0cmluZyBvciBBWFBXaWRnZXROb2RlIG9iamVjdC5cbiAqIFxuICogRXhlY3V0aW9uIE1vZGU6IGZyb250ZW5kXG4gKiBBY3Rpdml0eSBUeXBlOiB3b3JrZmxvdy1hY3Rpdml0eTpzaG93LWxheW91dC1wb3B1cFxuICogXG4gKiBPdXRjb21lczpcbiAqIE91dGNvbWVzIGFyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGFjdGlvbnMgcHJvdmlkZWQgaW4gdGhlIGlucHV0LlxuICogRWFjaCBhY3Rpb24gY3JlYXRlcyBhIGNvcnJlc3BvbmRpbmcgb3V0Y29tZSB3aXRoIHRoZSBhY3Rpb24gbmFtZSAoZnJvbSBjb21tYW5kLm5hbWUgb3IgYWN0aW9uLm5hbWUpLlxuICogSWYgbm8gYWN0aW9ucyBhcmUgcHJvdmlkZWQsIGRlZmF1bHQgYWN0aW9ucyAoY2FuY2VsLCBzdWJtaXQpIGFyZSB1c2VkLlxuICogXG4gKiBFeGFtcGxlczpcbiAqIC0gSWYgYWN0aW9uIGhhcyBjb21tYW5kLm5hbWUgPSAnc2F2ZScsIG91dGNvbWUgd2lsbCBiZSB7IHNhdmU6IHRydWUgfVxuICogLSBJZiBhY3Rpb24gaGFzIG5hbWUgPSAnZGVsZXRlJywgb3V0Y29tZSB3aWxsIGJlIHsgZGVsZXRlOiB0cnVlIH1cbiAqIC0gRGVmYXVsdCBvdXRjb21lczogeyBjYW5jZWw6IHRydWUgfSBvciB7IHN1Ym1pdDogdHJ1ZSB9XG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaG93TGF5b3V0UG9wdXBBY3Rpdml0eVxuICBpbXBsZW1lbnRzIEFYUENvbW1hbmQ8U2hvd0xheW91dFBvcHVwSW5wdXQsIHsgb3V0cHV0OiBTaG93TGF5b3V0UG9wdXBPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+IHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IHBvcHVwU2VydmljZSA9IGluamVjdChBWFBvcHVwU2VydmljZSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBBWFBDb21tYW5kIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgaW5wdXQ6IFNob3dMYXlvdXRQb3B1cElucHV0LFxuICApOiBQcm9taXNlPEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0PHsgb3V0cHV0OiBTaG93TGF5b3V0UG9wdXBPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFBhcnNlIGxheW91dCBkZWZpbml0aW9uXG4gICAgICBsZXQgbGF5b3V0Tm9kZTogQVhQV2lkZ2V0Tm9kZTtcblxuICAgICAgaWYgKHR5cGVvZiBpbnB1dC5sYXlvdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIElmIGl0J3MgYSBKU09OIHN0cmluZywgcGFyc2UgaXRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsYXlvdXROb2RlID0gQVhQV2lkZ2V0U2VyaWFsaXphdGlvbkhlbHBlci5mcm9tSnNvbihpbnB1dC5sYXlvdXQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxheW91dCBKU09OOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhbiBvYmplY3QsIHVzZSBpdCBkaXJlY3RseSAoY2xvbmUgdG8gYXZvaWQgbXV0YXRpb25zKVxuICAgICAgICBsYXlvdXROb2RlID0gY2xvbmVEZWVwKGlucHV0LmxheW91dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGxheW91dCBub2RlXG4gICAgICBpZiAoIWxheW91dE5vZGUgfHwgIWxheW91dE5vZGUudHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbGF5b3V0OiBtaXNzaW5nIHR5cGUgcHJvcGVydHknKTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgYWN0aW9ucyBmcm9tIGlucHV0IG9yIHVzZSBkZWZhdWx0c1xuICAgICAgY29uc3QgYWN0aW9ucyA9IGlucHV0LmFjdGlvbnMgfHwge1xuICAgICAgICBzdWZmaXg6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0BnZW5lcmFsOmFjdGlvbnMuY2FuY2VsLnRpdGxlJyxcbiAgICAgICAgICAgIGljb246ICdmYS10aW1lcycsXG4gICAgICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgY29tbWFuZDogeyBuYW1lOiAnY2FuY2VsJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdAZ2VuZXJhbDphY3Rpb25zLnN1Ym1pdC50aXRsZScsXG4gICAgICAgICAgICBpY29uOiAnZmEtY2hlY2snLFxuICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ3N1Ym1pdCcsIG9wdGlvbnM6IHsgdmFsaWRhdGU6IHRydWUgfSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICAvLyBDcmVhdGUgZGlhbG9nIGNvbmZpZ3VyYXRpb25cbiAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogRGlhbG9nUmVuZGVyZXJDb25maWcgPSB7XG4gICAgICAgIHRpdGxlOiBpbnB1dC50aXRsZSB8fCAnRGlhbG9nJyxcbiAgICAgICAgY29udGV4dDogaW5wdXQuY29udGV4dCB8fCB7fSxcbiAgICAgICAgZGVmaW5pdGlvbjogbGF5b3V0Tm9kZSxcbiAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgIGZvb3Rlcjoge1xuICAgICAgICAgICAgcHJlZml4OiBhY3Rpb25zLnByZWZpeCB8fCBbXSxcbiAgICAgICAgICAgIHN1ZmZpeDogYWN0aW9ucy5zdWZmaXggfHwgW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEV4dHJhY3QgYWN0aW9uIG5hbWVzIGZvciBvdXRjb21lcyAoZnJvbSBjb21tYW5kLm5hbWUgb3IgYWN0aW9uLm5hbWUpXG4gICAgICBjb25zdCBhY3Rpb25OYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgaWYgKGFjdGlvbnMucHJlZml4KSB7XG4gICAgICAgIGFjdGlvbnMucHJlZml4LmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb24uY29tbWFuZD8ubmFtZSB8fCBhY3Rpb24ubmFtZSB8fCAndW5rbm93bic7XG4gICAgICAgICAgYWN0aW9uTmFtZXMuYWRkKGFjdGlvbk5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb25zLnN1ZmZpeCkge1xuICAgICAgICBhY3Rpb25zLnN1ZmZpeC5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uLmNvbW1hbmQ/Lm5hbWUgfHwgYWN0aW9uLm5hbWUgfHwgJ3Vua25vd24nO1xuICAgICAgICAgIGFjdGlvbk5hbWVzLmFkZChhY3Rpb25OYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgZGlhbG9nIHVzaW5nIEFYUERpYWxvZ1JlbmRlcmVyQ29tcG9uZW50XG4gICAgICBjb25zdCBkaWFsb2dSZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZTxEaWFsb2dSZW5kZXJlclJlc3VsdD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihBWFBEaWFsb2dSZW5kZXJlckNvbXBvbmVudCwge1xuICAgICAgICAgIHRpdGxlOiBkaWFsb2dDb25maWcudGl0bGUsXG4gICAgICAgICAgc2l6ZTogaW5wdXQuc2l6ZSB8fCAnbWQnLFxuICAgICAgICAgIGNsb3NlQnV0dG9uOiBpbnB1dC5jbG9zZUJ1dHRvbiAhPT0gdW5kZWZpbmVkID8gaW5wdXQuY2xvc2VCdXR0b24gOiB0cnVlLFxuICAgICAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiBmYWxzZSxcbiAgICAgICAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNvbmZpZzogZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgY2FsbEJhY2s6IChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiByZXN1bHQuY29udGV4dD8uKCkgfHwgZGlhbG9nQ29uZmlnLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiByZXN1bHQuYWN0aW9uPy4oKSB8fCAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEV4dHJhY3QgcmVzdWx0IGRhdGEgYW5kIGFjdGlvblxuICAgICAgY29uc3QgcmVzdWx0ID0gZGlhbG9nUmVzdWx0Py5jb250ZXh0IHx8IHt9O1xuICAgICAgY29uc3QgYWN0aW9uID0gZGlhbG9nUmVzdWx0Py5hY3Rpb24gfHwgJ2NhbmNlbCc7XG5cbiAgICAgIC8vIEJ1aWxkIG91dGNvbWVzIGR5bmFtaWNhbGx5IGJhc2VkIG9uIGFjdGlvbiBuYW1lc1xuICAgICAgLy8gRWFjaCBhY3Rpb24gY3JlYXRlcyBhIGNvcnJlc3BvbmRpbmcgb3V0Y29tZVxuICAgICAgY29uc3Qgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIFxuICAgICAgLy8gU2V0IHRoZSBvdXRjb21lIGZvciB0aGUgY2xpY2tlZCBhY3Rpb24gdG8gdHJ1ZVxuICAgICAgaWYgKGFjdGlvbiAmJiBhY3Rpb25OYW1lcy5oYXMoYWN0aW9uKSkge1xuICAgICAgICBvdXRjb21lc1thY3Rpb25dID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uKSB7XG4gICAgICAgIC8vIElmIGFjdGlvbiBpcyBub3QgaW4gdGhlIGxpc3QsIHN0aWxsIGFkZCBpdCBhcyBvdXRjb21lXG4gICAgICAgIG91dGNvbWVzW2FjdGlvbl0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhgW1Nob3dMYXlvdXRQb3B1cEFjdGl2aXR5XSBEaWFsb2cgY2xvc2VkIHdpdGggYWN0aW9uOiAke2FjdGlvbn1gLCByZXN1bHQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRjb21lcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1Nob3dMYXlvdXRQb3B1cEFjdGl2aXR5XSBGYWlsZWQgdG8gc2hvdyBsYXlvdXQgcG9wdXA6YCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIHRleHQ6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzaG93IGxheW91dCBwb3B1cCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIHJlc3VsdDoge30sXG4gICAgICAgICAgICBhY3Rpb246ICdjYW5jZWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","//#region ---- Imports ----\nimport { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Human Task Activity (Frontend)\n *\n * Generic human task activity that suspends workflow and waits for user interaction.\n * Supports assignment and actions (displayed inline). For dialog-style flow, use a follow-up activity.\n *\n * Execution Mode: frontend\n * Task Type: human-task\n * Activity Type: workflow-activity:human-task\n *\n * Outcomes:\n * Outcomes are dynamically generated based on the actions provided in the input.\n * Each action creates a corresponding outcome with the action name (from command.name or action.name).\n * If no actions are provided, default actions (cancel, submit) are used.\n *\n * Examples:\n * - If action has command.name = 'approve', outcome will be { approve: true }\n * - If action has name = 'reject', outcome will be { reject: true }\n * - Default outcomes: { cancel: true } or { submit: true }\n *\n * Assignment:\n * - assignedUserIds: Direct assignment to specific users\n * - candidateUserIds: Users who can claim the task\n * - candidateRoleIds: Roles whose members can claim the task\n *\n * Display Modes:\n * - 'dialog': Traditional modal dialog (default)\n * - 'inline': Actions displayed directly on page before resume\n */\nexport class HumanTaskActivity {\n //#region ---- Services & Dependencies ----\n // Note: This activity doesn't execute immediately - it suspends the workflow\n // The actual UI display is handled by the Generic Task Provider and Display Service\n //#endregion\n //#region ---- AXPCommand Implementation ----\n /**\n * Execute human task activity.\n *\n * This method doesn't actually show UI - it just validates input and returns success.\n * The workflow engine will suspend at this activity and create a bookmark.\n * The Generic Task Provider will handle displaying the task UI inline.\n */\n async execute(input) {\n console.log('human task input', input.context?.['input'] ?? 'no input');\n try {\n // Validate required fields\n if (!input.title && !input.description) {\n console.warn('[HumanTaskActivity] No title or description provided');\n }\n // Build outcomes from actions (dynamic) or default submit/cancel\n const outcomes = {};\n const rawActions = input.actions;\n if (rawActions) {\n try {\n const actions = typeof rawActions === 'string' ? JSON.parse(rawActions) : rawActions;\n const prefix = actions?.prefix ?? [];\n const suffix = actions?.suffix ?? [];\n for (const item of [...prefix, ...suffix]) {\n const name = item?.command?.name ?? item?.name;\n if (name && typeof name === 'string')\n outcomes[name] = true;\n }\n }\n catch {\n // ignore parse error\n }\n }\n if (Object.keys(outcomes).length === 0) {\n outcomes['cancel'] = true;\n outcomes['submit'] = true;\n }\n // This activity suspends the workflow - the actual result will come from resume\n // Return a placeholder result - the real result comes when user completes the task\n return {\n success: true,\n data: {\n output: {\n result: input.context || {},\n action: 'pending', // Will be replaced when task is completed\n },\n outcomes,\n },\n };\n }\n catch (error) {\n console.error(`[HumanTaskActivity] Failed to execute human task:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to execute human task',\n },\n data: {\n output: {\n result: {},\n action: 'cancel',\n },\n outcomes: {\n cancel: true,\n },\n },\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: HumanTaskActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: HumanTaskActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: HumanTaskActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW4tdGFzay5hY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMvaHVtYW4tdGFzay5hY3Rpdml0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUEwRTNDLFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsK0NBQStDO0lBRS9DLDZFQUE2RTtJQUM3RSxvRkFBb0Y7SUFFcEYsWUFBWTtJQUVaLGlEQUFpRDtJQUVqRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQXFCO1FBR3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDO1FBR3pFLElBQUksQ0FBQztZQUNILDJCQUEyQjtZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFHRCxpRUFBaUU7WUFDakUsTUFBTSxRQUFRLEdBQXdCLEVBQUUsQ0FBQztZQUN6QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2pDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDO29CQUNILE1BQU0sT0FBTyxHQUFHLE9BQU8sVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO29CQUNyRixNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7b0JBQ3JDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLENBQUM7d0JBQy9DLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7NEJBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDOUQsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE1BQU0sQ0FBQztvQkFDUCxxQkFBcUI7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDMUIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDO1lBRUQsZ0ZBQWdGO1lBQ2hGLG1GQUFtRjtZQUNuRixPQUFPO2dCQUNMLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRTt3QkFDM0IsTUFBTSxFQUFFLFNBQVMsRUFBRSwwQ0FBMEM7cUJBQzlEO29CQUNELFFBQVE7aUJBQ1Q7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUUxRSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSw4QkFBOEI7aUJBQ3REO2dCQUNELElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7cUJBQ2pCO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsSUFBSTtxQkFDYjtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzsrR0FwRlUsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAgIC0tLS1cblxuLyoqXG4gKiBJbnB1dCBmb3IgSHVtYW4gVGFzayBhY3Rpdml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdW1hblRhc2tJbnB1dCB7XG4gIC8qKlxuICAgKiBUYXNrIHRpdGxlXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGFzayBkZXNjcmlwdGlvblxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFzc2lnbmVkIHVzZXIgSURzIChkaXJlY3QgYXNzaWdubWVudClcbiAgICovXG4gIGFzc2lnbmVkVXNlcklkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDYW5kaWRhdGUgdXNlciBJRHMgKHVzZXJzIHdobyBjYW4gY2xhaW0gdGhlIHRhc2spXG4gICAqL1xuICBjYW5kaWRhdGVVc2VySWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENhbmRpZGF0ZSByb2xlIElEcyAocm9sZXMgd2hvc2UgbWVtYmVycyBjYW4gY2xhaW0gdGhlIHRhc2spXG4gICAqL1xuICBjYW5kaWRhdGVSb2xlSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRhc2sgcHJpb3JpdHlcbiAgICovXG4gIHByaW9yaXR5PzogJ0xvdycgfCAnTm9ybWFsJyB8ICdIaWdoJyB8ICdVcmdlbnQnO1xuXG4gIC8qKlxuICAgKiBUYXNrIGR1ZSBkYXRlIChJU08gZGF0ZSBzdHJpbmcgb3IgRGF0ZSlcbiAgICovXG4gIGR1ZURhdGU/OiBzdHJpbmcgfCBEYXRlO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIGNvbnRleHQgZGF0YSBmb3IgdGhlIGZvcm1cbiAgICovXG4gIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBBY3Rpb25zIChidXR0b25zKSBmb3IgdGhpcyB0YXNrLiBGb3JtYXQ6IHsgcHJlZml4PzogQXJyYXk8QWN0aW9uPiwgc3VmZml4PzogQXJyYXk8QWN0aW9uPiB9IChvciBKU09OIHN0cmluZykuXG4gICAqIEVhY2ggYWN0aW9uIG5hbWUgYmVjb21lcyBhbiBvdXRjb21lIHdoZW4gdGhlIHRhc2sgaXMgY29tcGxldGVkLlxuICAgKi9cbiAgYWN0aW9ucz86IHsgcHJlZml4PzogQXJyYXk8eyBuYW1lPzogc3RyaW5nOyBjb21tYW5kPzogeyBuYW1lPzogc3RyaW5nIH0gfT47IHN1ZmZpeD86IEFycmF5PHsgbmFtZT86IHN0cmluZzsgY29tbWFuZD86IHsgbmFtZT86IHN0cmluZyB9IH0+IH0gfCBzdHJpbmc7XG59XG5cbi8qKlxuICogT3V0cHV0IGZvciBIdW1hbiBUYXNrIGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh1bWFuVGFza091dHB1dCB7XG4gIC8qKlxuICAgKiBSZXN1bHQgZGF0YSBmcm9tIHRhc2sgY29tcGxldGlvbiAoZm9ybSB2YWx1ZXMpXG4gICAqL1xuICByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEFjdGlvbiB0aGF0IHdhcyBjbGlja2VkIChlLmcuLCAnYXBwcm92ZScsICdyZWplY3QnLCAnY2FuY2VsJylcbiAgICovXG4gIGFjdGlvbjogc3RyaW5nO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBIdW1hbiBUYXNrIEFjdGl2aXR5IChGcm9udGVuZClcbiAqIFxuICogR2VuZXJpYyBodW1hbiB0YXNrIGFjdGl2aXR5IHRoYXQgc3VzcGVuZHMgd29ya2Zsb3cgYW5kIHdhaXRzIGZvciB1c2VyIGludGVyYWN0aW9uLlxuICogU3VwcG9ydHMgYXNzaWdubWVudCBhbmQgYWN0aW9ucyAoZGlzcGxheWVkIGlubGluZSkuIEZvciBkaWFsb2ctc3R5bGUgZmxvdywgdXNlIGEgZm9sbG93LXVwIGFjdGl2aXR5LlxuICogXG4gKiBFeGVjdXRpb24gTW9kZTogZnJvbnRlbmRcbiAqIFRhc2sgVHlwZTogaHVtYW4tdGFza1xuICogQWN0aXZpdHkgVHlwZTogd29ya2Zsb3ctYWN0aXZpdHk6aHVtYW4tdGFza1xuICogXG4gKiBPdXRjb21lczpcbiAqIE91dGNvbWVzIGFyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGFjdGlvbnMgcHJvdmlkZWQgaW4gdGhlIGlucHV0LlxuICogRWFjaCBhY3Rpb24gY3JlYXRlcyBhIGNvcnJlc3BvbmRpbmcgb3V0Y29tZSB3aXRoIHRoZSBhY3Rpb24gbmFtZSAoZnJvbSBjb21tYW5kLm5hbWUgb3IgYWN0aW9uLm5hbWUpLlxuICogSWYgbm8gYWN0aW9ucyBhcmUgcHJvdmlkZWQsIGRlZmF1bHQgYWN0aW9ucyAoY2FuY2VsLCBzdWJtaXQpIGFyZSB1c2VkLlxuICogXG4gKiBFeGFtcGxlczpcbiAqIC0gSWYgYWN0aW9uIGhhcyBjb21tYW5kLm5hbWUgPSAnYXBwcm92ZScsIG91dGNvbWUgd2lsbCBiZSB7IGFwcHJvdmU6IHRydWUgfVxuICogLSBJZiBhY3Rpb24gaGFzIG5hbWUgPSAncmVqZWN0Jywgb3V0Y29tZSB3aWxsIGJlIHsgcmVqZWN0OiB0cnVlIH1cbiAqIC0gRGVmYXVsdCBvdXRjb21lczogeyBjYW5jZWw6IHRydWUgfSBvciB7IHN1Ym1pdDogdHJ1ZSB9XG4gKiBcbiAqIEFzc2lnbm1lbnQ6XG4gKiAtIGFzc2lnbmVkVXNlcklkczogRGlyZWN0IGFzc2lnbm1lbnQgdG8gc3BlY2lmaWMgdXNlcnNcbiAqIC0gY2FuZGlkYXRlVXNlcklkczogVXNlcnMgd2hvIGNhbiBjbGFpbSB0aGUgdGFza1xuICogLSBjYW5kaWRhdGVSb2xlSWRzOiBSb2xlcyB3aG9zZSBtZW1iZXJzIGNhbiBjbGFpbSB0aGUgdGFza1xuICogXG4gKiBEaXNwbGF5IE1vZGVzOlxuICogLSAnZGlhbG9nJzogVHJhZGl0aW9uYWwgbW9kYWwgZGlhbG9nIChkZWZhdWx0KVxuICogLSAnaW5saW5lJzogQWN0aW9ucyBkaXNwbGF5ZWQgZGlyZWN0bHkgb24gcGFnZSBiZWZvcmUgcmVzdW1lXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIdW1hblRhc2tBY3Rpdml0eVxuICBpbXBsZW1lbnRzIEFYUENvbW1hbmQ8SHVtYW5UYXNrSW5wdXQsIHsgb3V0cHV0OiBIdW1hblRhc2tPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+IHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICAvLyBOb3RlOiBUaGlzIGFjdGl2aXR5IGRvZXNuJ3QgZXhlY3V0ZSBpbW1lZGlhdGVseSAtIGl0IHN1c3BlbmRzIHRoZSB3b3JrZmxvd1xuICAvLyBUaGUgYWN0dWFsIFVJIGRpc3BsYXkgaXMgaGFuZGxlZCBieSB0aGUgR2VuZXJpYyBUYXNrIFByb3ZpZGVyIGFuZCBEaXNwbGF5IFNlcnZpY2VcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEFYUENvbW1hbmQgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgaHVtYW4gdGFzayBhY3Rpdml0eS5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGRvZXNuJ3QgYWN0dWFsbHkgc2hvdyBVSSAtIGl0IGp1c3QgdmFsaWRhdGVzIGlucHV0IGFuZCByZXR1cm5zIHN1Y2Nlc3MuXG4gICAqIFRoZSB3b3JrZmxvdyBlbmdpbmUgd2lsbCBzdXNwZW5kIGF0IHRoaXMgYWN0aXZpdHkgYW5kIGNyZWF0ZSBhIGJvb2ttYXJrLlxuICAgKiBUaGUgR2VuZXJpYyBUYXNrIFByb3ZpZGVyIHdpbGwgaGFuZGxlIGRpc3BsYXlpbmcgdGhlIHRhc2sgVUkgaW5saW5lLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShcbiAgICBpbnB1dDogSHVtYW5UYXNrSW5wdXQsXG4gICk6IFByb21pc2U8QVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQ8eyBvdXRwdXQ6IEh1bWFuVGFza091dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4+IHtcblxuICAgIGNvbnNvbGUubG9nKCdodW1hbiB0YXNrIGlucHV0JyAsIGlucHV0LmNvbnRleHQ/LlsnaW5wdXQnXSA/PyAnbm8gaW5wdXQnKTtcbiAgICBcblxuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGlmICghaW5wdXQudGl0bGUgJiYgIWlucHV0LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0h1bWFuVGFza0FjdGl2aXR5XSBObyB0aXRsZSBvciBkZXNjcmlwdGlvbiBwcm92aWRlZCcpO1xuICAgICAgfVxuXG5cbiAgICAgIC8vIEJ1aWxkIG91dGNvbWVzIGZyb20gYWN0aW9ucyAoZHluYW1pYykgb3IgZGVmYXVsdCBzdWJtaXQvY2FuY2VsXG4gICAgICBjb25zdCBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgY29uc3QgcmF3QWN0aW9ucyA9IGlucHV0LmFjdGlvbnM7XG4gICAgICBpZiAocmF3QWN0aW9ucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSB0eXBlb2YgcmF3QWN0aW9ucyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJhd0FjdGlvbnMpIDogcmF3QWN0aW9ucztcbiAgICAgICAgICBjb25zdCBwcmVmaXggPSBhY3Rpb25zPy5wcmVmaXggPz8gW107XG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gYWN0aW9ucz8uc3VmZml4ID8/IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBbLi4ucHJlZml4LCAuLi5zdWZmaXhdKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gaXRlbT8uY29tbWFuZD8ubmFtZSA/PyBpdGVtPy5uYW1lO1xuICAgICAgICAgICAgaWYgKG5hbWUgJiYgdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSBvdXRjb21lc1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBpZ25vcmUgcGFyc2UgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5rZXlzKG91dGNvbWVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgb3V0Y29tZXNbJ2NhbmNlbCddID0gdHJ1ZTtcbiAgICAgICAgb3V0Y29tZXNbJ3N1Ym1pdCddID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBhY3Rpdml0eSBzdXNwZW5kcyB0aGUgd29ya2Zsb3cgLSB0aGUgYWN0dWFsIHJlc3VsdCB3aWxsIGNvbWUgZnJvbSByZXN1bWVcbiAgICAgIC8vIFJldHVybiBhIHBsYWNlaG9sZGVyIHJlc3VsdCAtIHRoZSByZWFsIHJlc3VsdCBjb21lcyB3aGVuIHVzZXIgY29tcGxldGVzIHRoZSB0YXNrXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICByZXN1bHQ6IGlucHV0LmNvbnRleHQgfHwge30sXG4gICAgICAgICAgICBhY3Rpb246ICdwZW5kaW5nJywgLy8gV2lsbCBiZSByZXBsYWNlZCB3aGVuIHRhc2sgaXMgY29tcGxldGVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRjb21lcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW0h1bWFuVGFza0FjdGl2aXR5XSBGYWlsZWQgdG8gZXhlY3V0ZSBodW1hbiB0YXNrOmAsIGVycm9yKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICB0ZXh0OiBlcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZXhlY3V0ZSBodW1hbiB0YXNrJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgcmVzdWx0OiB7fSxcbiAgICAgICAgICAgIGFjdGlvbjogJ2NhbmNlbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRjb21lczoge1xuICAgICAgICAgICAgY2FuY2VsOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ShowToast Activity (Frontend)\n *\n * Shows a toast notification message to the user.\n * This activity runs on the frontend and displays a temporary notification.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-toast\n *\n * Outcomes:\n * - done: Toast was displayed successfully\n */\nexport class ShowToastActivity {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.toastService = inject(AXToastService);\n this.translationService = inject(AXTranslationService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n // Translate message and title if they are translation keys\n const message = await this.translationService.translateAsync(input.message);\n const title = input.title ? await this.translationService.translateAsync(input.title) : undefined;\n // Show toast notification\n this.toastService.show({\n color: input.type || 'default',\n title: title,\n content: message,\n closeButton: input.closeButton ?? true,\n timeOut: input.timeOut ?? 3000,\n timeOutProgress: input.timeOutProgress ?? false,\n });\n return {\n success: true,\n data: {\n output: {},\n outcomes: {\n done: true,\n },\n },\n };\n }\n catch (error) {\n console.error(`[ShowToastActivity] Failed to show toast:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show toast notification',\n },\n data: {\n output: {},\n outcomes: {\n failed: true,\n },\n },\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowToastActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowToastActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowToastActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdy10b2FzdC5hY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMvc2hvdy10b2FzdC5hY3Rpdml0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBK0NoRSxZQUFZO0FBRVo7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBRDlCO1FBR0UsK0NBQStDO1FBRTlCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RDLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBb0RwRTtJQWxEQyxZQUFZO0lBRVosaURBQWlEO0lBRWpELEtBQUssQ0FBQyxPQUFPLENBQ1gsS0FBcUI7UUFFckIsSUFBSSxDQUFDO1lBQ0gsMkRBQTJEO1lBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRWxHLDBCQUEwQjtZQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUztnQkFDOUIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUk7Z0JBQzlCLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxJQUFJLEtBQUs7YUFDaEQsQ0FBQyxDQUFDO1lBRUgsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixJQUFJLEVBQUU7b0JBQ0osTUFBTSxFQUFFLEVBQXFCO29CQUM3QixRQUFRLEVBQUU7d0JBQ1IsSUFBSSxFQUFFLElBQUk7cUJBQ1g7aUJBQ0Y7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsRSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxtQ0FBbUM7aUJBQzNEO2dCQUNELElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUUsRUFBcUI7b0JBQzdCLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsSUFBSTtxQkFDYjtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzsrR0F0RFUsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQVhUb2FzdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9hc3QnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhTdHlsZUNvbG9yVHlwZSB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgICAtLS0tXG5cbi8qKlxuICogSW5wdXQgZm9yIFNob3dUb2FzdCBhY3Rpdml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaG93VG9hc3RJbnB1dCB7XG4gIC8qKlxuICAgKiBNZXNzYWdlL2NvbnRlbnQgb2YgdGhlIHRvYXN0XG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvYXN0IHR5cGUvY29sb3IgKGUuZy4sICdzdWNjZXNzJywgJ2RhbmdlcicsICdpbmZvJywgJ3dhcm5pbmcnKVxuICAgKi9cbiAgdHlwZT86IEFYU3R5bGVDb2xvclR5cGU7XG5cbiAgLyoqXG4gICAqIFRvYXN0IHRpdGxlIChvcHRpb25hbClcbiAgICovXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgY2xvc2UgYnV0dG9uXG4gICAqL1xuICBjbG9zZUJ1dHRvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICgwID0gbm8gdGltZW91dClcbiAgICovXG4gIHRpbWVPdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aW1lb3V0IHByb2dyZXNzXG4gICAqL1xuICB0aW1lT3V0UHJvZ3Jlc3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE91dHB1dCBmb3IgU2hvd1RvYXN0IGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3dUb2FzdE91dHB1dCB7XG4gIC8vIE5vIG91dHB1dCBkYXRhIG5lZWRlZCAtIHRvYXN0IGlzIGp1c3QgYSBub3RpZmljYXRpb25cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogU2hvd1RvYXN0IEFjdGl2aXR5IChGcm9udGVuZClcbiAqIFxuICogU2hvd3MgYSB0b2FzdCBub3RpZmljYXRpb24gbWVzc2FnZSB0byB0aGUgdXNlci5cbiAqIFRoaXMgYWN0aXZpdHkgcnVucyBvbiB0aGUgZnJvbnRlbmQgYW5kIGRpc3BsYXlzIGEgdGVtcG9yYXJ5IG5vdGlmaWNhdGlvbi5cbiAqIFxuICogRXhlY3V0aW9uIE1vZGU6IGZyb250ZW5kXG4gKiBBY3Rpdml0eSBUeXBlOiB3b3JrZmxvdy1hY3Rpdml0eTpzaG93LXRvYXN0XG4gKiBcbiAqIE91dGNvbWVzOlxuICogLSBkb25lOiBUb2FzdCB3YXMgZGlzcGxheWVkIHN1Y2Nlc3NmdWxseVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2hvd1RvYXN0QWN0aXZpdHlcbiAgaW1wbGVtZW50cyBBWFBDb21tYW5kPFNob3dUb2FzdElucHV0LCB7IG91dHB1dDogU2hvd1RvYXN0T3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSB0b2FzdFNlcnZpY2UgPSBpbmplY3QoQVhUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBBWFBDb21tYW5kIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgaW5wdXQ6IFNob3dUb2FzdElucHV0LFxuICApOiBQcm9taXNlPEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0PHsgb3V0cHV0OiBTaG93VG9hc3RPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyYW5zbGF0ZSBtZXNzYWdlIGFuZCB0aXRsZSBpZiB0aGV5IGFyZSB0cmFuc2xhdGlvbiBrZXlzXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoaW5wdXQubWVzc2FnZSk7XG4gICAgICBjb25zdCB0aXRsZSA9IGlucHV0LnRpdGxlID8gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoaW5wdXQudGl0bGUpIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBTaG93IHRvYXN0IG5vdGlmaWNhdGlvblxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIGNvbG9yOiBpbnB1dC50eXBlIHx8ICdkZWZhdWx0JyxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBjb250ZW50OiBtZXNzYWdlLFxuICAgICAgICBjbG9zZUJ1dHRvbjogaW5wdXQuY2xvc2VCdXR0b24gPz8gdHJ1ZSxcbiAgICAgICAgdGltZU91dDogaW5wdXQudGltZU91dCA/PyAzMDAwLFxuICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IGlucHV0LnRpbWVPdXRQcm9ncmVzcyA/PyBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7fSBhcyBTaG93VG9hc3RPdXRwdXQsXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIGRvbmU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1Nob3dUb2FzdEFjdGl2aXR5XSBGYWlsZWQgdG8gc2hvdyB0b2FzdDpgLCBlcnJvcik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgdGV4dDogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHNob3cgdG9hc3Qgbm90aWZpY2F0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG91dHB1dDoge30gYXMgU2hvd1RvYXN0T3V0cHV0LFxuICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICBmYWlsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * CollectSignature Activity (Frontend)\n *\n * Collects a signature from a user through a dialog.\n * This activity runs on the frontend and requires user interaction.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:collect-signature\n *\n * Outcomes:\n * - Signed: User provided signature successfully\n * - Cancelled: User cancelled the signature dialog\n */\nexport class CollectSignatureActivity {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this.translationService = inject(AXTranslationService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n console.log(`[CollectSignatureActivity] Collecting signature from user: ${input.signerId}`);\n // Translate message if provided\n const message = input.message\n ? await this.translationService.translateAsync(input.message)\n : await this.translationService.translateAsync('@workflow-management:signature.activities.collect-signature.default-message');\n // Show signature collection dialog\n const dialogResult = await this.showSignatureDialog(message);\n if (dialogResult.cancelled) {\n console.log(`[CollectSignatureActivity] User cancelled signature collection`);\n return {\n success: true,\n data: {\n output: {\n signature: '',\n signedAt: new Date().toISOString(),\n },\n outcomes: {\n Cancelled: true,\n },\n },\n };\n }\n const signedAt = new Date().toISOString();\n console.log(`[CollectSignatureActivity] Signature collected successfully at ${signedAt}`);\n return {\n success: true,\n data: {\n output: {\n signature: dialogResult.signature,\n note: dialogResult.note,\n signedAt,\n },\n outcomes: {\n Signed: true,\n },\n },\n };\n }\n catch (error) {\n console.error(`[CollectSignatureActivity] Failed to collect signature:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to collect signature',\n },\n data: {\n output: {\n signature: '',\n signedAt: new Date().toISOString(),\n },\n outcomes: {\n Cancelled: true,\n },\n },\n };\n }\n }\n //#endregion\n //#region ---- Dialog Logic ----\n /**\n * Shows a dialog to collect signature from the user.\n */\n async showSignatureDialog(message) {\n const result = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle('@workflow-management:signature.activities.collect-signature.dialog-title')\n .setMessage(message)\n .setContext({ signature: '', note: '' })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@workflow-management:signature.activities.collect-signature.note-label', (field) => {\n field.path('note');\n field.largeTextBox({\n placeholder: '@workflow-management:signature.activities.collect-signature.note-placeholder',\n maxLength: 1000,\n });\n })\n .formField('@workflow-management:signature.activities.collect-signature.signature-label', (field) => {\n field.path('signature');\n field.customWidget(AXPWidgetsList.Editors.SignatureBox, {\n validations: [\n {\n rule: 'required',\n options: {\n message: '@workflow-management:signature.activities.collect-signature.signature-required',\n },\n },\n ],\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@workflow-management:signature.activities.collect-signature.submit-text');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return { signature: '', note: undefined, cancelled: true };\n }\n const formData = context;\n return {\n signature: formData['signature'] || '',\n note: formData['note'],\n cancelled: false,\n };\n });\n })\n .show();\n return result;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: CollectSignatureActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: CollectSignatureActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: CollectSignatureActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdC1zaWduYXR1cmUuYWN0aXZpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzL2NvbGxlY3Qtc2lnbmF0dXJlLmFjdGl2aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFzRHhELFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBRHJDO1FBR0UsK0NBQStDO1FBRTlCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEQsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0E0SXBFO0lBMUlDLFlBQVk7SUFFWixpREFBaUQ7SUFFakQsS0FBSyxDQUFDLE9BQU8sQ0FDWCxLQUE0QjtRQUU1QixJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLDhEQUE4RCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUU1RixnQ0FBZ0M7WUFDaEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU87Z0JBQzNCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyw2RUFBNkUs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Y29yZSc7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlcic7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBXaWRnZXRzTGlzdCB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9jb21tb24nO1xuXG4vLyNyZWdpb24gLS0tLSAgIFR5cGVzICAgLS0tLVxuXG4vKipcbiAqIElucHV0IGZvciBDb2xsZWN0U2lnbmF0dXJlIGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3RTaWduYXR1cmVJbnB1dCB7XG4gIC8qKlxuICAgKiBTaWduYXR1cmUgcmVxdWVzdCBJRFxuICAgKi9cbiAgc2lnbmF0dXJlUmVxdWVzdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElEIG9mIHRoZSBzaWduZXJcbiAgICovXG4gIHNpZ25lcklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSBJRCBvZiB0aGUgZW50aXR5IHJlY29yZFxuICAgKi9cbiAgcmVmSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHR5cGUgKG1vZHVsZS5lbnRpdHkgZm9ybWF0KVxuICAgKi9cbiAgcmVmVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIHRvIGRpc3BsYXkgdG8gdGhlIHNpZ25lclxuICAgKi9cbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPdXRwdXQgZm9yIENvbGxlY3RTaWduYXR1cmUgYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdFNpZ25hdHVyZU91dHB1dCB7XG4gIC8qKlxuICAgKiBTaWduYXR1cmUgZGF0YSAoYmFzZTY0IGVuY29kZWQgaW1hZ2Ugb3IgdGV4dClcbiAgICovXG4gIHNpZ25hdHVyZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBub3RlIGZyb20gdGhlIHNpZ25lclxuICAgKi9cbiAgbm90ZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gc2lnbmF0dXJlIHdhcyBjb2xsZWN0ZWRcbiAgICovXG4gIHNpZ25lZEF0OiBzdHJpbmc7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIENvbGxlY3RTaWduYXR1cmUgQWN0aXZpdHkgKEZyb250ZW5kKVxuICogXG4gKiBDb2xsZWN0cyBhIHNpZ25hdHVyZSBmcm9tIGEgdXNlciB0aHJvdWdoIGEgZGlhbG9nLlxuICogVGhpcyBhY3Rpdml0eSBydW5zIG9uIHRoZSBmcm9udGVuZCBhbmQgcmVxdWlyZXMgdXNlciBpbnRlcmFjdGlvbi5cbiAqIFxuICogRXhlY3V0aW9uIE1vZGU6IGZyb250ZW5kXG4gKiBBY3Rpdml0eSBUeXBlOiB3b3JrZmxvdy1hY3Rpdml0eTpjb2xsZWN0LXNpZ25hdHVyZVxuICogXG4gKiBPdXRjb21lczpcbiAqIC0gU2lnbmVkOiBVc2VyIHByb3ZpZGVkIHNpZ25hdHVyZSBzdWNjZXNzZnVsbHlcbiAqIC0gQ2FuY2VsbGVkOiBVc2VyIGNhbmNlbGxlZCB0aGUgc2lnbmF0dXJlIGRpYWxvZ1xuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5XG4gIGltcGxlbWVudHMgQVhQQ29tbWFuZDxDb2xsZWN0U2lnbmF0dXJlSW5wdXQsIHsgb3V0cHV0OiBDb2xsZWN0U2lnbmF0dXJlT3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsYXlvdXRCdWlsZGVyID0gaW5qZWN0KEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQVhQQ29tbWFuZCBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBDb2xsZWN0U2lnbmF0dXJlSW5wdXQsXG4gICk6IFByb21pc2U8QVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQ8eyBvdXRwdXQ6IENvbGxlY3RTaWduYXR1cmVPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5XSBDb2xsZWN0aW5nIHNpZ25hdHVyZSBmcm9tIHVzZXI6ICR7aW5wdXQuc2lnbmVySWR9YCk7XG5cbiAgICAgIC8vIFRyYW5zbGF0ZSBtZXNzYWdlIGlmIHByb3ZpZGVkXG4gICAgICBjb25zdCBtZXNzYWdlID0gaW5wdXQubWVzc2FnZVxuICAgICAgICA/IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGlucHV0Lm1lc3NhZ2UpXG4gICAgICAgIDogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnNpZ25hdHVyZS5hY3Rpdml0aWVzLmNvbGxlY3Qtc2lnbmF0dXJlLmRlZmF1bHQtbWVzc2FnZScpO1xuXG4gICAgICAvLyBTaG93IHNpZ25hdHVyZSBjb2xsZWN0aW9uIGRpYWxvZ1xuICAgICAgY29uc3QgZGlhbG9nUmVzdWx0ID0gYXdhaXQgdGhpcy5zaG93U2lnbmF0dXJlRGlhbG9nKG1lc3NhZ2UpO1xuXG4gICAgICBpZiAoZGlhbG9nUmVzdWx0LmNhbmNlbGxlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0NvbGxlY3RTaWduYXR1cmVBY3Rpdml0eV0gVXNlciBjYW5jZWxsZWQgc2lnbmF0dXJlIGNvbGxlY3Rpb25gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgICBzaWduYXR1cmU6ICcnLFxuICAgICAgICAgICAgICBzaWduZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICAgIENhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2lnbmVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGBbQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5XSBTaWduYXR1cmUgY29sbGVjdGVkIHN1Y2Nlc3NmdWxseSBhdCAke3NpZ25lZEF0fWApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICBzaWduYXR1cmU6IGRpYWxvZ1Jlc3VsdC5zaWduYXR1cmUsXG4gICAgICAgICAgICBub3RlOiBkaWFsb2dSZXN1bHQubm90ZSxcbiAgICAgICAgICAgIHNpZ25lZEF0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIFNpZ25lZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5XSBGYWlsZWQgdG8gY29sbGVjdCBzaWduYXR1cmU6YCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIHRleHQ6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjb2xsZWN0IHNpZ25hdHVyZScsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIHNpZ25hdHVyZTogJycsXG4gICAgICAgICAgICBzaWduZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIENhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIERpYWxvZyBMb2dpYyAgIC0tLS1cblxuICAvKipcbiAgICogU2hvd3MgYSBkaWFsb2cgdG8gY29sbGVjdCBzaWduYXR1cmUgZnJvbSB0aGUgdXNlci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2hvd1NpZ25hdHVyZURpYWxvZyhcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICk6IFByb21pc2U8eyBzaWduYXR1cmU6IHN0cmluZzsgbm90ZT86IHN0cmluZzsgY2FuY2VsbGVkOiBib29sZWFuIH0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmxheW91dEJ1aWxkZXJcbiAgICAgIC5jcmVhdGUoKVxuICAgICAgLmRpYWxvZzx7IHNpZ25hdHVyZTogc3RyaW5nOyBub3RlPzogc3RyaW5nOyBjYW5jZWxsZWQ6IGJvb2xlYW4gfT4oKGRpYWxvZykgPT4ge1xuICAgICAgICBkaWFsb2dcbiAgICAgICAgICAuc2V0VGl0bGUoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnNpZ25hdHVyZS5hY3Rpdml0aWVzLmNvbGxlY3Qtc2lnbmF0dXJlLmRpYWxvZy10aXRsZScpXG4gICAgICAgICAgLnNldE1lc3NhZ2UobWVzc2FnZSlcbiAgICAgICAgICAuc2V0Q29udGV4dCh7IHNpZ25hdHVyZTogJycsIG5vdGU6ICcnIH0pXG4gICAgICAgICAgLmNvbnRlbnQoKGZsZXgpID0+IHtcbiAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQHdvcmtmbG93LW1hbmFnZW1lbnQ6c2lnbmF0dXJlLmFjdGl2aXRpZXMuY29sbGVjdC1zaWduYXR1cmUubm90ZS1sYWJlbCcsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ25vdGUnKTtcbiAgICAgICAgICAgICAgICBmaWVsZC5sYXJnZVRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDpzaWduYXR1cmUuYWN0aXZpdGllcy5jb2xsZWN0LXNpZ25hdHVyZS5ub3RlLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgICAgIG1heExlbmd0aDogMTAwMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQHdvcmtmbG93LW1hbmFnZW1lbnQ6c2lnbmF0dXJlLmFjdGl2aXRpZXMuY29sbGVjdC1zaWduYXR1cmUuc2lnbmF0dXJlLWxhYmVsJywgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucGF0aCgnc2lnbmF0dXJlJyk7XG4gICAgICAgICAgICAgICAgZmllbGQuY3VzdG9tV2lkZ2V0KEFYUFdpZGdldHNMaXN0LkVkaXRvcnMuU2lnbmF0dXJlQm94LCB7XG4gICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcnVsZTogJ3JlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6c2lnbmF0dXJlLmFjdGl2aXRpZXMuY29sbGVjdC1zaWduYXR1cmUuc2lnbmF0dXJlLXJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2V0QWN0aW9ucygoYWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgYWN0aW9uc1xuICAgICAgICAgICAgICAuY2FuY2VsKCdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScpXG4gICAgICAgICAgICAgIC5zdWJtaXQoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnNpZ25hdHVyZS5hY3Rpdml0aWVzLmNvbGxlY3Qtc2lnbmF0dXJlLnN1Ym1pdC10ZXh0Jyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAub25BY3Rpb24oYXN5bmMgKGRpYWxvZ1JlZikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGRpYWxvZ1JlZi5jb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBkaWFsb2dSZWYuYWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQgfHwgYWN0aW9uID09PSAnY2FuY2VsJykge1xuICAgICAgICAgICAgICByZXR1cm4geyBzaWduYXR1cmU6ICcnLCBub3RlOiB1bmRlZmluZWQsIGNhbmNlbGxlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBjb250ZXh0IGFzIHsgc2lnbmF0dXJlPzogc3RyaW5nOyBub3RlPzogc3RyaW5nIH07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzaWduYXR1cmU6IGZvcm1EYXRhWydzaWduYXR1cmUnXSB8fCAnJyxcbiAgICAgICAgICAgICAgbm90ZTogZm9ybURhdGFbJ25vdGUnXSxcbiAgICAgICAgICAgICAgY2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnNob3coKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\nimport * as i0 from \"@angular/core\";\n/**\n * Workflow Activities Definition Provider\n *\n * Provides activity definitions (metadata only).\n * Activity definitions contain metadata for UI and tooling.\n * The `name` property is used as the command key for execution.\n * Reads from entity service (mock data).\n */\nexport class AXMWorkflowActivitiesDefinitionProvider {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.entityService = inject(AXPEntityService);\n this.activityDefinitionService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.activityDefinition.name).data();\n }\n //#endregion\n //#region ---- AXPActivityProvider Implementation ----\n async getList(categoryId) {\n // Use 'equal' operator to filter by category field\n const result = await this.activityDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'category',\n operator: {\n type: 'equal',\n },\n value: categoryId,\n }]\n }\n });\n return result.items;\n }\n async getById(name) {\n // Try to find by name field first, then by type field\n const byName = await this.activityDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n if (byName.items && byName.items.length > 0) {\n return byName.items[0];\n }\n // Try by type field\n const byType = await this.activityDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'type',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n if (byType.items && byType.items.length > 0) {\n return byType.items[0];\n }\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowActivitiesDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowActivitiesDefinitionProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowActivitiesDefinitionProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctYWN0aXZpdGllcy1kZWZpbml0aW9uLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy93b3JrZmxvdy1hY3Rpdml0aWVzLWRlZmluaXRpb24ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUU1Qzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLHVDQUF1QztJQURwRDtRQUVJLCtDQUErQztRQUU5QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELDhCQUF5QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUM3RCxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFDdEIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQzlDLENBQUMsSUFBSSxFQUFZLENBQUM7S0FzRXRCO0lBcEVHLFlBQVk7SUFFWiwwREFBMEQ7SUFFMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFrQjtRQUM1QixtREFBbUQ7UUFDbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDO1lBQ3RELElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLENBQUM7d0JBQ04sS0FBSyxFQUFFLFVBQVU7d0JBQ2pCLFFBQVEsRUFBRTs0QkFDTixJQUFJLEVBQUUsT0FBTzt5QkFDaEI7d0JBQ0QsS0FBSyxFQUFFLFVBQVU7cUJBQ3BCLENBQUM7YUFDTDtTQUNKLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLEtBQWdDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWTtRQUN0QixzREFBc0Q7UUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDO1lBQ3RELElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLENBQUM7d0JBQ04sS0FBSyxFQUFFLE1BQU07d0JBQ2IsUUFBUSxFQUFFOzRCQUNOLElBQUksRUFBRSxPQUFPO3lCQUNoQjt3QkFDRCxLQUFLLEVBQUUsSUFBSTtxQkFDZCxDQUFDO2FBQ0w7U0FDSixDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBMEIsQ0FBQztRQUNwRCxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQztZQUN0RCxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxFQUFFO2dCQUNKLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxDQUFDO3dCQUNOLEtBQUssRUFBRSxNQUFNO3dCQUNiLFFBQVEsRUFBRTs0QkFDTixJQUFJLEVBQUUsT0FBTzt5QkFDaEI7d0JBQ0QsS0FBSyxFQUFFLElBQUk7cUJBQ2QsQ0FBQzthQUNMO1NBQ0osQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQTBCLENBQUM7UUFDcEQsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7K0dBMUVRLHVDQUF1QzttSEFBdkMsdUNBQXVDOzs0RkFBdkMsdUNBQXVDO2tCQURuRCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBBY3Rpdml0eVByb3ZpZGVyLCBBWFBBY3Rpdml0eURlZmluaXRpb24gfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0JztcblxuLyoqXG4gKiBXb3JrZmxvdyBBY3Rpdml0aWVzIERlZmluaXRpb24gUHJvdmlkZXJcbiAqIFxuICogUHJvdmlkZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnMgKG1ldGFkYXRhIG9ubHkpLlxuICogQWN0aXZpdHkgZGVmaW5pdGlvbnMgY29udGFpbiBtZXRhZGF0YSBmb3IgVUkgYW5kIHRvb2xpbmcuXG4gKiBUaGUgYG5hbWVgIHByb3BlcnR5IGlzIHVzZWQgYXMgdGhlIGNvbW1hbmQga2V5IGZvciBleGVjdXRpb24uXG4gKiBSZWFkcyBmcm9tIGVudGl0eSBzZXJ2aWNlIChtb2NrIGRhdGEpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNV29ya2Zsb3dBY3Rpdml0aWVzRGVmaW5pdGlvblByb3ZpZGVyIGltcGxlbWVudHMgQVhQQWN0aXZpdHlQcm92aWRlciB7XG4gICAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICAgICAgUm9vdENvbmZpZy5tb2R1bGUubmFtZSxcbiAgICAgICAgUm9vdENvbmZpZy5lbnRpdGllcy5hY3Rpdml0eURlZmluaXRpb24ubmFtZVxuICAgICkuZGF0YTxhbnksIGFueT4oKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBBWFBBY3Rpdml0eVByb3ZpZGVyIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gICAgYXN5bmMgZ2V0TGlzdChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIC8vIFVzZSAnZXF1YWwnIG9wZXJhdG9yIHRvIGZpbHRlciBieSBjYXRlZ29yeSBmaWVsZFxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEwMDAsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdjYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnlJZCxcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVtcyBhcyBBWFBBY3Rpdml0eURlZmluaXRpb25bXTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRCeUlkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIFRyeSB0byBmaW5kIGJ5IG5hbWUgZmllbGQgZmlyc3QsIHRoZW4gYnkgdHlwZSBmaWVsZFxuICAgICAgICBjb25zdCBieU5hbWUgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaWYgKGJ5TmFtZS5pdGVtcyAmJiBieU5hbWUuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJ5TmFtZS5pdGVtc1swXSBhcyBBWFBBY3Rpdml0eURlZmluaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcnkgYnkgdHlwZSBmaWVsZFxuICAgICAgICBjb25zdCBieVR5cGUgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICd0eXBlJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChieVR5cGUuaXRlbXMgJiYgYnlUeXBlLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBieVR5cGUuaXRlbXNbMF0gYXMgQVhQQWN0aXZpdHlEZWZpbml0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntityDefinitionRegistryService, AXPEntityFormBuilderService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPCreateEntityActivity {\n constructor() {\n this.entityForm = inject(AXPEntityFormBuilderService);\n this.entityService = inject(AXPEntityDefinitionRegistryService);\n this.translationService = inject(AXTranslationService);\n this.context = {};\n }\n async execute(input) {\n const entityRef = await this.entityService.resolve(input.module, input.entity);\n let dialogRef;\n try {\n let chain = this.entityForm.entity(`${input.module}.${input.entity}`).create({});\n chain.actions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.create.title');\n });\n dialogRef = await chain.show();\n if (dialogRef.action() == 'cancel') {\n dialogRef.close();\n return {\n success: false,\n };\n }\n else if (dialogRef.action() == 'submit') {\n dialogRef.setLoading(true);\n const context = dialogRef.context();\n const createFn = entityRef.commands?.create?.execute;\n if (!createFn) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.create-command-unavailable'),\n },\n };\n }\n const result = await createFn(context);\n if (result) {\n dialogRef.close();\n return {\n success: true,\n data: {\n outcomes: {\n \"Submitted\": true,\n },\n output: {\n id: result.id,\n }\n },\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n }\n else {\n //todo\n return ({\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.command-no-result'),\n },\n //todo\n data: {\n outcomes: {\n 'Submitted': true,\n },\n output: {\n \"id\": '-1'\n }\n }\n });\n }\n }\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-action'),\n },\n };\n }\n catch (error) {\n return {\n success: false,\n message: {\n text: error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.entity.create-failed'),\n },\n };\n }\n finally {\n if (dialogRef) {\n dialogRef.setLoading(false);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPCreateEntityActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPCreateEntityActivity, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPCreateEntityActivity, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXkuY3JlYXRlLmFjdGl2aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy9lbnRpeS5jcmVhdGUuYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFakgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBa0JuRCxNQUFNLE9BQU8sdUJBQXVCO0lBSHBDO1FBSVUsZUFBVSxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDM0QsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFaEQsWUFBTyxHQUFHLEVBQUUsQ0FBQztLQThGeEI7SUE1RkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUF1QjtRQUNuQyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9FLElBQUksU0FBYyxDQUFDO1FBRW5CLElBQUksQ0FBQztZQUNILElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9B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QUM5QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7K0dBbEdVLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBFbnRpdHlEZWZpbml0aW9uUmVnaXN0cnlTZXJ2aWNlLCBBWFBFbnRpdHlGb3JtQnVpbGRlclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhQQ29tbWFuZCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUVuaXR5SW5wdXR7XG4gIG1vZHVsZSA6IHN0cmluZztcbiAgZW50aXR5IDogc3RyaW5nO1xuXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVFbml0eU91dHB1dCB7XG4gIGlkOnN0cmluZztcbn1cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQQ3JlYXRlRW50aXR5QWN0aXZpdHkgaW1wbGVtZW50cyBBWFBDb21tYW5kPENyZWF0ZUVuaXR5SW5wdXQsICB7IG91dHB1dDogQ3JlYXRlRW5pdHlPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+IHtcbiAgcHJpdmF0ZSBlbnRpdHlGb3JtID0gaW5qZWN0KEFYUEVudGl0eUZvcm1CdWlsZGVyU2VydmljZSk7XG4gIHByaXZhdGUgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlEZWZpbml0aW9uUmVnaXN0cnlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBjb250ZXh0ID0ge307XG5cbiAgYXN5bmMgZXhlY3V0ZShpbnB1dDogQ3JlYXRlRW5pdHlJbnB1dCk6IFByb21pc2U8QVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQ8eyBvdXRwdXQ6IENyZWF0ZUVuaXR5T3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9Pj4ge1xuICAgIGNvbnN0IGVudGl0eVJlZiA9IGF3YWl0IHRoaXMuZW50aXR5U2VydmljZS5yZXNvbHZlKGlucHV0Lm1vZHVsZSwgaW5wdXQuZW50aXR5KTtcblxuICAgIGxldCBkaWFsb2dSZWY6IGFueTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgY2hhaW4gPSB0aGlzLmVudGl0eUZvcm0uZW50aXR5KGAke2lucHV0Lm1vZHVsZX0uJHtpbnB1dC5lbnRpdHl9YCkuY3JlYXRlKHt9KTtcbiAgICAgIGNoYWluLmFjdGlvbnMoKGFjdGlvbnMpID0+IHtcbiAgICAgICAgYWN0aW9ucy5jYW5jZWwoJ0BnZW5lcmFsOmFjdGlvbnMuY2FuY2VsLnRpdGxlJyk7XG4gICAgICAgIGFjdGlvbnMuc3VibWl0KCdAZ2VuZXJhbDphY3Rpb25zLmNyZWF0ZS50aXRsZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZiA9IGF3YWl0IGNoYWluLnNob3coKTtcbiAgICAgIGlmIChkaWFsb2dSZWYuYWN0aW9uKCkgPT0gJ2NhbmNlbCcpIHtcbiAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGRpYWxvZ1JlZi5hY3Rpb24oKSA9PSAnc3VibWl0Jykge1xuICAgICAgICBkaWFsb2dSZWYuc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGRpYWxvZ1JlZi5jb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUZuID0gZW50aXR5UmVmLmNvbW1hbmRzPy5jcmVhdGU/LmV4ZWN1dGUgYXMgKHBheWxvYWQ6IGFueSkgPT4gUHJvbWlzZTx7aWQgOiBzdHJpbmd9PjtcblxuICAgICAgICBpZiAoIWNyZWF0ZUZuKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICB0ZXh0OiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQGdlbmVyYWw6bWVzc2FnZXMuZW50aXR5LmNyZWF0ZS1jb21tYW5kLXVuYXZhaWxhYmxlJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlRm4oY29udGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgb3V0Y29tZXMgOiB7XG4gICAgICAgICAgICAgICAgXCJTdWJtaXR0ZWRcIiA6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG91dHB1dCA6IHtcbiAgICAgICAgICAgICAgICBpZCA6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgdGV4dDogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BnZW5lcmFsOm1lc3NhZ2VzLmdlbmVyaWMuc3VjY2Vzcy5kZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAvL3RvZG9cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQGdlbmVyYWw6bWVzc2FnZXMuZW50aXR5LmNvbW1hbmQtbm8tcmVzdWx0JyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC8vdG9kb1xuICAgICAgICAgICAgICBkYXRhIDoge1xuICAgICAgICAgICAgICAgIG91dGNvbWVzIDoge1xuICAgICAgICAgICAgICAgICAgJ1N1Ym1pdHRlZCcgOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3V0cHV0IDoge1xuICAgICAgICAgICAgICAgICAgXCJpZFwiIDogJy0xJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgdGV4dDogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BnZW5lcmFsOm1lc3NhZ2VzLmVudGl0eS5pbnZhbGlkLWFjdGlvbicpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgICAgOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQGdlbmVyYWw6bWVzc2FnZXMuZW50aXR5LmNyZWF0ZS1mYWlsZWQnKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChkaWFsb2dSZWYpIHtcbiAgICAgICAgZGlhbG9nUmVmLnNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","/**\n * Workflow Plugin\n *\n * Marks an entity as workflow-capable. This plugin does NOT configure workflows;\n * it only indicates that the entity can participate in workflows.\n *\n * Workflow bindings are configured in Workflow Management (workflow definition → bindings),\n * not in the entity definition.\n *\n * This plugin:\n * - Adds workflow capability marker to entity extensions\n * - Enables workflow trigger middleware to detect workflow-capable entities\n * - Provides UI hooks for workflow-related features (future enhancement)\n *\n * Usage:\n * ```typescript\n * plugins: [\n * { name: 'workflow' }, // Entity is workflow-capable\n * ]\n * ```\n */\nexport const workflowPlugin = {\n name: 'workflow',\n order: 50, // After core plugins (40-45), before status/archive (60-70)\n apply: (ctx) => {\n // Mark entity as workflow-capable in extensions\n ctx.entity.extensions ??= {};\n ctx.entity.extensions.workflow = {\n enabled: true,\n };\n // Note: No properties, actions, or views are added by this plugin.\n // It only marks the entity as workflow-capable.\n // Actual workflow bindings are configured in Workflow Management.\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy93b3JrZmxvdy1wbHVnaW4vd29ya2Zsb3cucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBMEI7SUFDbkQsSUFBSSxFQUFFLFVBQVU7SUFDaEIsS0FBSyxFQUFFLEVBQUUsRUFBRSw0REFBNEQ7SUFDdkUsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDYixnREFBZ0Q7UUFDL0MsR0FBRyxDQUFDLE1BQWMsQ0FBQyxVQUFVLEtBQUssRUFBRSxDQUFDO1FBQ3JDLEdBQUcsQ0FBQyxNQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRztZQUN4QyxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7UUFFRixtRUFBbUU7UUFDbkUsZ0RBQWdEO1FBQ2hELGtFQUFrRTtJQUNwRSxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEVudGl0eUFjdGlvblBsdWdpbiB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5cbi8qKlxuICogV29ya2Zsb3cgUGx1Z2luXG4gKlxuICogTWFya3MgYW4gZW50aXR5IGFzIHdvcmtmbG93LWNhcGFibGUuIFRoaXMgcGx1Z2luIGRvZXMgTk9UIGNvbmZpZ3VyZSB3b3JrZmxvd3M7XG4gKiBpdCBvbmx5IGluZGljYXRlcyB0aGF0IHRoZSBlbnRpdHkgY2FuIHBhcnRpY2lwYXRlIGluIHdvcmtmbG93cy5cbiAqXG4gKiBXb3JrZmxvdyBiaW5kaW5ncyBhcmUgY29uZmlndXJlZCBpbiBXb3JrZmxvdyBNYW5hZ2VtZW50ICh3b3JrZmxvdyBkZWZpbml0aW9uIOKGkiBiaW5kaW5ncyksXG4gKiBub3QgaW4gdGhlIGVudGl0eSBkZWZpbml0aW9uLlxuICpcbiAqIFRoaXMgcGx1Z2luOlxuICogLSBBZGRzIHdvcmtmbG93IGNhcGFiaWxpdHkgbWFya2VyIHRvIGVudGl0eSBleHRlbnNpb25zXG4gKiAtIEVuYWJsZXMgd29ya2Zsb3cgdHJpZ2dlciBtaWRkbGV3YXJlIHRvIGRldGVjdCB3b3JrZmxvdy1jYXBhYmxlIGVudGl0aWVzXG4gKiAtIFByb3ZpZGVzIFVJIGhvb2tzIGZvciB3b3JrZmxvdy1yZWxhdGVkIGZlYXR1cmVzIChmdXR1cmUgZW5oYW5jZW1lbnQpXG4gKlxuICogVXNhZ2U6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwbHVnaW5zOiBbXG4gKiAgIHsgbmFtZTogJ3dvcmtmbG93JyB9LCAvLyBFbnRpdHkgaXMgd29ya2Zsb3ctY2FwYWJsZVxuICogXVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCB3b3JrZmxvd1BsdWdpbjogQVhQRW50aXR5QWN0aW9uUGx1Z2luID0ge1xuICBuYW1lOiAnd29ya2Zsb3cnLFxuICBvcmRlcjogNTAsIC8vIEFmdGVyIGNvcmUgcGx1Z2lucyAoNDAtNDUpLCBiZWZvcmUgc3RhdHVzL2FyY2hpdmUgKDYwLTcwKVxuICBhcHBseTogKGN0eCkgPT4ge1xuICAgIC8vIE1hcmsgZW50aXR5IGFzIHdvcmtmbG93LWNhcGFibGUgaW4gZXh0ZW5zaW9uc1xuICAgIChjdHguZW50aXR5IGFzIGFueSkuZXh0ZW5zaW9ucyA/Pz0ge307XG4gICAgKGN0eC5lbnRpdHkgYXMgYW55KS5leHRlbnNpb25zLndvcmtmbG93ID0ge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgLy8gTm90ZTogTm8gcHJvcGVydGllcywgYWN0aW9ucywgb3Igdmlld3MgYXJlIGFkZGVkIGJ5IHRoaXMgcGx1Z2luLlxuICAgIC8vIEl0IG9ubHkgbWFya3MgdGhlIGVudGl0eSBhcyB3b3JrZmxvdy1jYXBhYmxlLlxuICAgIC8vIEFjdHVhbCB3b3JrZmxvdyBiaW5kaW5ncyBhcmUgY29uZmlndXJlZCBpbiBXb3JrZmxvdyBNYW5hZ2VtZW50LlxuICB9LFxufTtcblxuIl19","import { NgModule } from '@angular/core';\nimport { AXP_ENTITY_ACTION_PLUGIN } from '@acorex/platform/layout/entity';\nimport { workflowPlugin } from './workflow.plugin';\nimport * as i0 from \"@angular/core\";\n/**\n * Workflow Plugin Module\n *\n * Registers the workflow plugin that marks entities as workflow-capable.\n */\nexport class AXMWorkflowPluginModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowPluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowPluginModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowPluginModule, providers: [\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: workflowPlugin,\n multi: true,\n },\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowPluginModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: workflowPlugin,\n multi: true,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcGx1Z2luLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvd29ya2Zsb3ctcGx1Z2luL3dvcmtmbG93LXBsdWdpbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRW5EOzs7O0dBSUc7QUFVSCxNQUFNLE9BQU8sdUJBQXVCOytHQUF2Qix1QkFBdUI7Z0hBQXZCLHVCQUF1QjtnSEFBdkIsdUJBQXVCLGFBUnZCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHdCQUF3QjtnQkFDakMsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjs7NEZBRVUsdUJBQXVCO2tCQVRuQyxRQUFRO21CQUFDO29CQUNSLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsd0JBQXdCOzRCQUNqQyxRQUFRLEVBQUUsY0FBYzs0QkFDeEIsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQX0VOVElUWV9BQ1RJT05fUExVR0lOIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IHdvcmtmbG93UGx1Z2luIH0gZnJvbSAnLi93b3JrZmxvdy5wbHVnaW4nO1xuXG4vKipcbiAqIFdvcmtmbG93IFBsdWdpbiBNb2R1bGVcbiAqXG4gKiBSZWdpc3RlcnMgdGhlIHdvcmtmbG93IHBsdWdpbiB0aGF0IG1hcmtzIGVudGl0aWVzIGFzIHdvcmtmbG93LWNhcGFibGUuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9FTlRJVFlfQUNUSU9OX1BMVUdJTixcbiAgICAgIHVzZVZhbHVlOiB3b3JrZmxvd1BsdWdpbixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTVdvcmtmbG93UGx1Z2luTW9kdWxlIHt9XG5cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\nimport * as i0 from \"@angular/core\";\n/**\n * Provider for activity categories.\n * Reads categories from entity service (mock data).\n */\nexport class AXCCategoryProvider {\n constructor() {\n this.entityService = inject(AXPEntityService);\n /** Category entity is provided by category plugin (ActivityDefinition → ActivityDefinitionCategory). */\n this.categoryService = this.entityService.withEntity(RootConfig.module.name, 'ActivityDefinitionCategory').data();\n }\n async getList(parentId) {\n const list = [];\n if (parentId) {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n }]\n }\n });\n list.push(...result.items);\n }\n else {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n });\n list.push(...result.items);\n }\n return list;\n }\n async getById(id) {\n return await this.categoryService.byKey(id);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXCCategoryProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXCCategoryProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXCCategoryProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL2VuZ2luZS9jYXRlZ29yeS5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUV6Qzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBR21CLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUQsd0dBQXdHO1FBQ2hHLG9CQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQ3JELFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUN0Qiw0QkFBNEIsQ0FDN0IsQ0FBQyxJQUFJLEVBQVksQ0FBQztLQW1DcEI7SUFqQ0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFpQjtRQUM3QixNQUFNLElBQUksR0FBMEIsRUFBRSxDQUFDO1FBRXZDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUM5QyxJQUFJLEVBQUUsQ0FBQztnQkFDUCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUU7b0JBQ04sS0FBSyxFQUFFLEtBQUs7b0JBQ1osT0FBTyxFQUFFLENBQUM7NEJBQ1IsS0FBSyxFQUFFLFVBQVU7NEJBQ2pCLFFBQVEsRUFBRTtnQ0FDUixJQUFJLEVBQUUsT0FBTzs2QkFDZDs0QkFDRCxLQUFLLEVBQUUsUUFBUTt5QkFDaEIsQ0FBQztpQkFDSDthQUNGLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUM5QyxJQUFJLEVBQUUsQ0FBQztnQkFDUCxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBVTtRQUN0QixPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQzsrR0F6Q1UsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBBY3Rpdml0eUNhdGVnb3J5UHJvdmlkZXIsIEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRW50aXR5U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3QnO1xuXG4vKipcbiAqIFByb3ZpZGVyIGZvciBhY3Rpdml0eSBjYXRlZ29yaWVzLlxuICogUmVhZHMgY2F0ZWdvcmllcyBmcm9tIGVudGl0eSBzZXJ2aWNlIChtb2NrIGRhdGEpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhDQ2F0ZWdvcnlQcm92aWRlciBpbXBsZW1lbnRzIEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlciB7XG4gIFxuICBwcml2YXRlIHJlYWRvbmx5IGVudGl0eVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U2VydmljZSk7XG4gIC8qKiBDYXRlZ29yeSBlbnRpdHkgaXMgcHJvdmlkZWQgYnkgY2F0ZWdvcnkgcGx1Z2luIChBY3Rpdml0eURlZmluaXRpb24g4oaSIEFjdGl2aXR5RGVmaW5pdGlvbkNhdGVnb3J5KS4gKi9cbiAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICdBY3Rpdml0eURlZmluaXRpb25DYXRlZ29yeSdcbiAgKS5kYXRhPGFueSwgYW55PigpO1xuXG4gIGFzeW5jIGdldExpc3QocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXT4ge1xuICAgIGNvbnN0IGxpc3Q6IEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXSA9IFtdO1xuICAgIFxuICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYXRlZ29yeVNlcnZpY2UucXVlcnkoe1xuICAgICAgICBza2lwOiAwLFxuICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgIGZpZWxkOiAncGFyZW50SWQnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VxdWFsJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWx1ZTogcGFyZW50SWQsXG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsaXN0LnB1c2goLi4ucmVzdWx0Lml0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYXRlZ29yeVNlcnZpY2UucXVlcnkoe1xuICAgICAgICBza2lwOiAwLFxuICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgfSk7XG4gICAgICBsaXN0LnB1c2goLi4ucmVzdWx0Lml0ZW1zKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBhc3luYyBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jYXRlZ29yeVNlcnZpY2UuYnlLZXkoaWQpO1xuICB9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\nimport * as i0 from \"@angular/core\";\n/**\n * Workflow Category Provider\n *\n * Provides workflow categories from entity service.\n * Reads from entity service (mock data or API).\n */\nexport class AXMWorkflowCategoryProvider {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.entityService = inject(AXPEntityService);\n this.categoryService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name + 'Category')\n .data();\n }\n //#endregion\n //#region ---- AXPWorkflowCategoryProvider Implementation ----\n async getList(parentId) {\n const filters = [];\n if (parentId === undefined) {\n // Root categories: parentId is null or undefined\n filters.push({\n field: 'parentId',\n operator: {\n type: 'isNull',\n },\n });\n }\n else {\n // Child categories: parentId matches\n filters.push({\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n });\n }\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters,\n },\n });\n return (result.items || []);\n }\n async getById(id) {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: id,\n }],\n },\n });\n if (result.items && result.items.length > 0) {\n return result.items[0];\n }\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowCategoryProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowCategoryProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowCategoryProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctY2F0ZWdvcnkucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL2VuZ2luZS93b3JrZmxvd3Mvd29ya2Zsb3ctY2F0ZWdvcnkucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUU1Qzs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTywyQkFBMkI7SUFEeEM7UUFFSSwrQ0FBK0M7UUFFOUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6QyxvQkFBZSxHQUFHLElBQUksQ0FBQyxhQUFhO2FBQ2hELFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7YUFDNUYsSUFBSSxFQUFZLENBQUM7S0FnRXpCO0lBOURHLFlBQVk7SUFFWixrRUFBa0U7SUFFbEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFpQjtRQUMzQixNQUFNLE9BQU8sR0FBVSxFQUFFLENBQUM7UUFFMUIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsaURBQWlEO1lBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLFFBQVEsRUFBRTtvQkFDTixJQUFJLEVBQUUsUUFBUTtpQkFDakI7YUFDSixDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNKLHFDQUFxQztZQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNULEtBQUssRUFBRSxVQUFVO2dCQUNqQixRQUFRLEVBQUU7b0JBQ04sSUFBSSxFQUFFLE9BQU87aUJBQ2hCO2dCQUNELEtBQUssRUFBRSxRQUFRO2FBQ2xCLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQzVDLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTzthQUNWO1NBQ0osQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUEwQixDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQVU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUM1QyxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxFQUFFO2dCQUNKLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxDQUFDO3dCQUNOLEtBQUssRUFBRSxJQUFJO3dCQUNYLFFBQVEsRUFBRTs0QkFDTixJQUFJLEVBQUUsT0FBTzt5QkFDaEI7d0JBQ0QsS0FBSyxFQUFFLEVBQUU7cUJBQ1osQ0FBQzthQUNMO1NBQ0osQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQXdCLENBQUM7UUFDbEQsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7K0dBbkVRLDJCQUEyQjttSEFBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0NhdGVnb3J5UHJvdmlkZXIsIEFYUFdvcmtmbG93Q2F0ZWdvcnkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0JztcblxuLyoqXG4gKiBXb3JrZmxvdyBDYXRlZ29yeSBQcm92aWRlclxuICogXG4gKiBQcm92aWRlcyB3b3JrZmxvdyBjYXRlZ29yaWVzIGZyb20gZW50aXR5IHNlcnZpY2UuXG4gKiBSZWFkcyBmcm9tIGVudGl0eSBzZXJ2aWNlIChtb2NrIGRhdGEgb3IgQVBJKS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTVdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciBpbXBsZW1lbnRzIEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5U2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZVxuICAgICAgICAud2l0aEVudGl0eShSb290Q29uZmlnLm1vZHVsZS5uYW1lLCBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93RGVmaW5pdGlvbi5uYW1lICsgJ0NhdGVnb3J5JylcbiAgICAgICAgLmRhdGE8YW55LCBhbnk+KCk7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gICAgYXN5bmMgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IGFueVtdID0gW107XG5cbiAgICAgICAgaWYgKHBhcmVudElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIFJvb3QgY2F0ZWdvcmllczogcGFyZW50SWQgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2lzTnVsbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2hpbGQgY2F0ZWdvcmllczogcGFyZW50SWQgbWF0Y2hlc1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3BhcmVudElkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHBhcmVudElkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNhdGVnb3J5U2VydmljZS5xdWVyeSh7XG4gICAgICAgICAgICBza2lwOiAwLFxuICAgICAgICAgICAgdGFrZTogMTAwMCxcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIChyZXN1bHQuaXRlbXMgfHwgW10pIGFzIEFYUFdvcmtmbG93Q2F0ZWdvcnlbXTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYXRlZ29yeVNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzdWx0Lml0ZW1zICYmIHJlc3VsdC5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZW1zWzBdIGFzIEFYUFdvcmtmbG93Q2F0ZWdvcnk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\nimport * as i0 from \"@angular/core\";\n/**\n * Workflow Definition Provider\n *\n * Provides workflow definitions for UI and tooling.\n * The `name` property is used as the workflow identifier.\n * Reads from entity service (mock data or API).\n */\nexport class AXMWorkflowDefinitionProvider {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.entityService = inject(AXPEntityService);\n this.workflowDefinitionService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name)\n .data();\n }\n //#endregion\n //#region ---- AXPWorkflowProvider Implementation ----\n async getList(categoryId) {\n // Same as report: filter by categoryIds array with 'contains'\n const result = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'categoryIds',\n operator: {\n type: 'contains',\n },\n value: categoryId,\n }]\n }\n });\n // Convert entity data to workflow definition format\n return (result.items || []).map((item) => ({\n schemaVersion: item.schemaVersion || 'acorex-platform-workflow/v1',\n name: item.name || item.id || '',\n title: item.title || item.name || item.id || null,\n description: item.description || null,\n variables: item.variables || [],\n inputs: item.inputs || [],\n outputs: item.outputs || [],\n graph: item.graph,\n customProperties: item.customProperties || {},\n extensions: item.extensions || {},\n }));\n }\n async getByName(name) {\n // Try to find by name field first, then by id field\n const byName = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n if (byName.items && byName.items.length > 0) {\n const entity = byName.items[0];\n return {\n schemaVersion: entity.schemaVersion || 'acorex-platform-workflow/v1',\n name: entity.name,\n title: entity.title || null,\n description: entity.description || null,\n variables: entity.variables || [],\n inputs: entity.inputs || [],\n outputs: entity.outputs || [],\n graph: entity.graph,\n customProperties: entity.customProperties || {},\n extensions: entity.extensions || {},\n };\n }\n // Try by id field\n const byId = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n if (byId.items && byId.items.length > 0) {\n const entity = byId.items[0];\n return {\n schemaVersion: entity.schemaVersion || 'acorex-platform-workflow/v1',\n name: entity.name,\n title: entity.title || null,\n description: entity.description || null,\n variables: entity.variables || [],\n inputs: entity.inputs || [],\n outputs: entity.outputs || [],\n graph: entity.graph,\n customProperties: entity.customProperties || {},\n extensions: entity.extensions || {},\n };\n }\n return null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowDefinitionProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowDefinitionProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL3dvcmtmbG93cy93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFNUM7Ozs7OztHQU1HO0FBRUgsTUFBTSxPQUFPLDZCQUE2QjtJQUQxQztRQUVJLCtDQUErQztRQUU5QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLDhCQUF5QixHQUFHLElBQUksQ0FBQyxhQUFhO2FBQzFELFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQzthQUMvRSxJQUFJLEVBQVksQ0FBQztLQTJHekI7SUF6R0csWUFBWTtJQUVaLDBEQUEwRDtJQUUxRCxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQWtCO1FBQzVCLDhEQUE4RDtRQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7WUFDdEQsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsSUFBSTtZQUNWLE1BQU0sRUFBRTtnQkFDSixLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsQ0FBQzt3QkFDTixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsUUFBUSxFQUFFOzRCQUNOLElBQUksRUFBRSxV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QUk7cUJBQ2QsQ0FBQzthQUNMO1NBQ0osQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsT0FBTztnQkFDSCxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsSUFBSSw2QkFBNkI7Z0JBQ3BFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSTtnQkFDM0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSTtnQkFDdkMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRTtnQkFDakMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDM0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRTtnQkFDN0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRTtnQkFDL0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRTthQUN0QyxDQUFDO1FBQ04sQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7K0dBOUdRLDZCQUE2QjttSEFBN0IsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQUR6QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd1Byb3ZpZGVyLCBBWFBXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0JztcblxuLyoqXG4gKiBXb3JrZmxvdyBEZWZpbml0aW9uIFByb3ZpZGVyXG4gKiBcbiAqIFByb3ZpZGVzIHdvcmtmbG93IGRlZmluaXRpb25zIGZvciBVSSBhbmQgdG9vbGluZy5cbiAqIFRoZSBgbmFtZWAgcHJvcGVydHkgaXMgdXNlZCBhcyB0aGUgd29ya2Zsb3cgaWRlbnRpZmllci5cbiAqIFJlYWRzIGZyb20gZW50aXR5IHNlcnZpY2UgKG1vY2sgZGF0YSBvciBBUEkpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNV29ya2Zsb3dEZWZpbml0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBBWFBXb3JrZmxvd1Byb3ZpZGVyIHtcbiAgICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXJ2aWNlID0gaW5qZWN0KEFYUEVudGl0eVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dEZWZpbml0aW9uU2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZVxuICAgICAgICAud2l0aEVudGl0eShSb290Q29uZmlnLm1vZHVsZS5uYW1lLCBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93RGVmaW5pdGlvbi5uYW1lKVxuICAgICAgICAuZGF0YTxhbnksIGFueT4oKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBBWFBXb3JrZmxvd1Byb3ZpZGVyIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gICAgYXN5bmMgZ2V0TGlzdChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIC8vIFNhbWUgYXMgcmVwb3J0OiBmaWx0ZXIgYnkgY2F0ZWdvcnlJZHMgYXJyYXkgd2l0aCAnY29udGFpbnMnXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMud29ya2Zsb3dEZWZpbml0aW9uU2VydmljZS5xdWVyeSh7XG4gICAgICAgICAgICBza2lwOiAwLFxuICAgICAgICAgICAgdGFrZTogMTAwMCxcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2NhdGVnb3J5SWRzJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb250YWlucycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENvbnZlcnQgZW50aXR5IGRhdGEgdG8gd29ya2Zsb3cgZGVmaW5pdGlvbiBmb3JtYXRcbiAgICAgICAgcmV0dXJuIChyZXN1bHQuaXRlbXMgfHwgW10pLm1hcCgoaXRlbTogYW55KTogQVhQV29ya2Zsb3dEZWZpbml0aW9uID0+ICh7XG4gICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBpdGVtLnNjaGVtYVZlcnNpb24gfHwgJ2Fjb3JleC1wbGF0Zm9ybS13b3JrZmxvdy92MScsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUgfHwgaXRlbS5pZCB8fCAnJyxcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlIHx8IGl0ZW0ubmFtZSB8fCBpdGVtLmlkIHx8IG51bGwsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvbiB8fCBudWxsLFxuICAgICAgICAgICAgdmFyaWFibGVzOiBpdGVtLnZhcmlhYmxlcyB8fCBbXSxcbiAgICAgICAgICAgIGlucHV0czogaXRlbS5pbnB1dHMgfHwgW10sXG4gICAgICAgICAgICBvdXRwdXRzOiBpdGVtLm91dHB1dHMgfHwgW10sXG4gICAgICAgICAgICBncmFwaDogaXRlbS5ncmFwaCxcbiAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXM6IGl0ZW0uY3VzdG9tUHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgICAgIGV4dGVuc2lvbnM6IGl0ZW0uZXh0ZW5zaW9ucyB8fCB7fSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbiB8IG51bGw+IHtcbiAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYnkgbmFtZSBmaWVsZCBmaXJzdCwgdGhlbiBieSBpZCBmaWVsZFxuICAgICAgICBjb25zdCBieU5hbWUgPSBhd2FpdCB0aGlzLndvcmtmbG93RGVmaW5pdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaWYgKGJ5TmFtZS5pdGVtcyAmJiBieU5hbWUuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYnlOYW1lLml0ZW1zWzBdO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBlbnRpdHkuc2NoZW1hVmVyc2lvbiB8fCAnYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93L3YxJyxcbiAgICAgICAgICAgICAgICBuYW1lOiBlbnRpdHkubmFtZSxcbiAgICAgICAgICAgICAgICB0aXRsZTogZW50aXR5LnRpdGxlIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGVudGl0eS5kZXNjcmlwdGlvbiB8fCBudWxsLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogZW50aXR5LnZhcmlhYmxlcyB8fCBbXSxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IGVudGl0eS5pbnB1dHMgfHwgW10sXG4gICAgICAgICAgICAgICAgb3V0cHV0czogZW50aXR5Lm91dHB1dHMgfHwgW10sXG4gICAgICAgICAgICAgICAgZ3JhcGg6IGVudGl0eS5ncmFwaCxcbiAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBlbnRpdHkuY3VzdG9tUHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgICAgICAgICBleHRlbnNpb25zOiBlbnRpdHkuZXh0ZW5zaW9ucyB8fCB7fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcnkgYnkgaWQgZmllbGRcbiAgICAgICAgY29uc3QgYnlJZCA9IGF3YWl0IHRoaXMud29ya2Zsb3dEZWZpbml0aW9uU2VydmljZS5xdWVyeSh7XG4gICAgICAgICAgICBza2lwOiAwLFxuICAgICAgICAgICAgdGFrZTogMSxcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChieUlkLml0ZW1zICYmIGJ5SWQuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYnlJZC5pdGVtc1swXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2NoZW1hVmVyc2lvbjogZW50aXR5LnNjaGVtYVZlcnNpb24gfHwgJ2Fjb3JleC1wbGF0Zm9ybS13b3JrZmxvdy92MScsXG4gICAgICAgICAgICAgICAgbmFtZTogZW50aXR5Lm5hbWUsXG4gICAgICAgICAgICAgICAgdGl0bGU6IGVudGl0eS50aXRsZSB8fCBudWxsLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbnRpdHkuZGVzY3JpcHRpb24gfHwgbnVsbCxcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IGVudGl0eS52YXJpYWJsZXMgfHwgW10sXG4gICAgICAgICAgICAgICAgaW5wdXRzOiBlbnRpdHkuaW5wdXRzIHx8IFtdLFxuICAgICAgICAgICAgICAgIG91dHB1dHM6IGVudGl0eS5vdXRwdXRzIHx8IFtdLFxuICAgICAgICAgICAgICAgIGdyYXBoOiBlbnRpdHkuZ3JhcGgsXG4gICAgICAgICAgICAgICAgY3VzdG9tUHJvcGVydGllczogZW50aXR5LmN1c3RvbVByb3BlcnRpZXMgfHwge30sXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uczogZW50aXR5LmV4dGVuc2lvbnMgfHwge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","//#region ---- Imports ----\nimport { RootConfig } from './const';\n//#endregion\n//#region ---- Manifest Definition ----\n/**\n * Workflow Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const WorkflowManagementManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n // Module dependencies (optional)\n};\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL21hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUcvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLFlBQVk7QUFFWiwyQ0FBMkM7QUFFM0M7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQXNCO0lBQzNELElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUk7SUFDNUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSztJQUM5QixJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJO0lBQzVCLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUk7SUFFNUIsaUNBQWlDO0NBQ2xDLENBQUM7QUFFRixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBBWFBNb2R1bGVNYW5pZmVzdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi9jb25zdCc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIE1hbmlmZXN0IERlZmluaXRpb24gICAtLS0tXG5cbi8qKlxuICogV29ya2Zsb3cgTWFuYWdlbWVudCBNb2R1bGUgTWFuaWZlc3QuXG4gKiBEZWZpbmVzIG1vZHVsZSBtZXRhZGF0YSwgZmVhdHVyZXMsIGFuZCBwcm92aWRlciByZWZlcmVuY2VzLlxuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dNYW5hZ2VtZW50TWFuaWZlc3Q6IEFYUE1vZHVsZU1hbmlmZXN0ID0ge1xuICBuYW1lOiBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICB2ZXJzaW9uOiAnMS4wLjAnLFxuICB0aXRsZTogUm9vdENvbmZpZy5tb2R1bGUudGl0bGUsXG4gIGljb246IFJvb3RDb25maWcubW9kdWxlLmljb24sXG4gIGkxOG46IFJvb3RDb25maWcuY29uZmlnLmkxOG4sXG5cbiAgLy8gTW9kdWxlIGRlcGVuZGVuY2llcyAob3B0aW9uYWwpXG59O1xuXG4vLyNlbmRyZWdpb25cblxuIl19","export const AXMPermissionsKeys = {\n WorkflowManagement: {\n Management: 'WorkflowManagement:Permission:Management',\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5rZXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9wZXJtaXNzaW9uLmtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsa0JBQWtCLEVBQUU7UUFDbEIsVUFBVSxFQUFFLDBDQUEwQztLQUN2RDtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQVhNUGVybWlzc2lvbnNLZXlzID0ge1xuICBXb3JrZmxvd01hbmFnZW1lbnQ6IHtcbiAgICBNYW5hZ2VtZW50OiAnV29ya2Zsb3dNYW5hZ2VtZW50OlBlcm1pc3Npb246TWFuYWdlbWVudCcsXG4gIH0sXG59O1xuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { RootConfig } from './const';\nimport { AXMPermissionsKeys } from './permission.keys';\nimport * as i0 from \"@angular/core\";\nexport class AXMPermissionDefinitionProvider {\n constructor() {\n this.translationService = inject(AXTranslationService);\n }\n async define(context) {\n const trans = async (key) => await this.translationService.translateAsync(`@workflow-management:${key}`);\n const keys = AXMPermissionsKeys;\n const MODULE_PERMISSIONS = '@workflow-management:module.permissions';\n context.addGroup(RootConfig.module.name, `${MODULE_PERMISSIONS}.title`, `${MODULE_PERMISSIONS}.description`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMPermissionDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMPermissionDefinitionProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMPermissionDefinitionProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1kZWZpbml0aW9uLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9wZXJtaXNzaW9uLWRlZmluaXRpb24ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHdkQsTUFBTSxPQUFPLCtCQUErQjtJQUQ1QztRQUVtQix1QkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztLQWdCcEU7SUFkQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQStDO1FBQzFELE1BQU0sS0FBSyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUNsQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFOUUsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUM7UUFFaEMsTUFBTSxrQkFBa0IsR0FBRyx5Q0FBeUMsQ0FBQztRQUVyRSxPQUFPLENBQUMsUUFBUSxDQUNkLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUN0QixHQUFHLGtCQUFrQixRQUFRLEVBQzdCLEdBQUcsa0JBQWtCLGNBQWMsQ0FDcEMsQ0FBQztJQUNKLENBQUM7K0dBaEJVLCtCQUErQjttSEFBL0IsK0JBQStCOzs0RkFBL0IsK0JBQStCO2tCQUQzQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlciwgQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlckNvbnRleHQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1QZXJtaXNzaW9uc0tleXMgfSBmcm9tICcuL3Blcm1pc3Npb24ua2V5cyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWE1QZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyIGltcGxlbWVudHMgQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICBhc3luYyBkZWZpbmUoY29udGV4dDogQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlckNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0cmFucyA9IGFzeW5jIChrZXk6IHN0cmluZykgPT5cbiAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGBAd29ya2Zsb3ctbWFuYWdlbWVudDoke2tleX1gKTtcblxuICAgIGNvbnN0IGtleXMgPSBBWE1QZXJtaXNzaW9uc0tleXM7XG5cbiAgICBjb25zdCBNT0RVTEVfUEVSTUlTU0lPTlMgPSAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6bW9kdWxlLnBlcm1pc3Npb25zJztcblxuICAgIGNvbnRleHQuYWRkR3JvdXAoXG4gICAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICAgYCR7TU9EVUxFX1BFUk1JU1NJT05TfS50aXRsZWAsXG4gICAgICBgJHtNT0RVTEVfUEVSTUlTU0lPTlN9LmRlc2NyaXB0aW9uYFxuICAgICk7XG4gIH1cbn1cbiJdfQ==","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowTaskProvider, } from '@acorex/modules/task-management';\nimport { AXPSystemStatuses } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWorkflowManager } from '@acorex/platform/workflow';\nimport { Inject, Injectable, InjectionToken, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Injection token for provider config. Use when registering via DI (provide token + useFactory with deps).\n * When creating via useFactory: () => new AXPGenericWorkflowTaskProvider({ ... }), config is passed in the closure.\n */\nexport const AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG = new InjectionToken('AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG');\n//#endregion\n/**\n * Generic Workflow Task Provider\n *\n * Provides tasks from Workflow Instances directly (no Work Items).\n * Queries suspended workflow instances and extracts tasks from bookmarks.\n *\n * Create one provider per workflow definition by passing a config (name, title, definitionId).\n * E.g. leave request: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' }\n *\n * Architecture:\n * - Queries Workflow Instances with subStatus = 'Suspended'\n * - Filters by config.definitionId when set (one provider = one definition)\n * - Extracts active bookmarks for each instance\n * - Parses bookmark payload for assignment/actions\n * - Maps to task board format\n */\nexport class AXPGenericWorkflowTaskProvider extends AXPWorkflowTaskProvider {\n //#endregion\n //#region ---- Constructor ----\n constructor(config) {\n super();\n //#endregion\n //#region ---- Services & Dependencies ----\n this.entityService = inject(AXPEntityService);\n this.workflowInstanceData = this.entityService\n .withEntity('WorkflowManagement', 'WorkflowInstance')\n .data();\n this.translationService = inject(AXTranslationService);\n this.workflowManager = inject(AXPWorkflowManager);\n this.config = config;\n }\n //#endregion\n //#region ---- Provider Metadata ----\n get name() {\n return this.config.name;\n }\n get title() {\n return this.config.title;\n }\n get icon() {\n return this.config.icon ?? 'fa-light fa-diagram-project';\n }\n //#endregion\n //#region ---- Task Retrieval ----\n /**\n * Get tasks from suspended workflow instances.\n *\n * Queries workflow instances filtered by:\n * - subStatus = 'Suspended'\n * - entityRefType (if provided in filter)\n * - definitionId (if provided in filter)\n * - assignee/claimant (if filter provided)\n *\n * Then extracts active bookmarks and maps to task board format.\n */\n async getTasks(options) {\n console.log(`[GenericWorkflowTaskProvider] 🔍 getTasks called with options:`, {\n skip: options?.skip,\n take: options?.take,\n assigneeIds: options?.assigneeIds,\n range: options?.range,\n types: options?.types,\n });\n // Build filter for workflow instances\n const baseFilter = { logic: 'and', filters: [] };\n // Filter by subStatus = 'Suspended' (only suspended workflows have pending tasks)\n baseFilter.filters?.push({\n field: 'subStatus',\n operator: { type: 'equal' },\n value: 'Suspended',\n });\n // Scope this provider to one workflow definition\n if (this.config.definitionId) {\n baseFilter.filters?.push({\n field: 'definitionId',\n operator: { type: 'equal' },\n value: this.config.definitionId,\n });\n }\n // Filter by date range if provided (using createdAt or updatedAt)\n if (options?.range?.from || options?.range?.end) {\n if (options.range.from) {\n baseFilter.filters?.push({\n field: 'createdAt',\n operator: { type: 'gte' },\n value: options.range.from.toISOString(),\n });\n }\n if (options.range.end) {\n baseFilter.filters?.push({\n field: 'createdAt',\n operator: { type: 'lte' },\n value: options.range.end.toISOString(),\n });\n }\n }\n console.log(`[GenericWorkflowTaskProvider] 🔎 Query filter:`, JSON.stringify(baseFilter, null, 2));\n // Query workflow instances\n const { items: instances, total } = await this.workflowInstanceData.query({\n skip: options?.skip ?? 0,\n take: options?.take ?? 20,\n filter: baseFilter,\n });\n console.log(`[GenericWorkflowTaskProvider] 📦 Query result:`, {\n total,\n itemsCount: instances.length,\n instances: instances.map((inst) => ({\n id: inst.id,\n definitionId: inst.definitionId,\n entityRefType: inst.entityRefType,\n entityRefId: inst.entityRefId,\n subStatus: inst.subStatus,\n })),\n });\n // Extract tasks from bookmarks for each instance\n const tasks = [];\n console.log(`[GenericWorkflowTaskProvider] 🔄 Processing ${instances.length} workflow instances...`);\n for (const instance of instances) {\n try {\n console.log(`[GenericWorkflowTaskProvider] 📝 Processing instance:`, {\n id: instance.id,\n definitionId: instance.definitionId,\n entityRefType: instance.entityRefType,\n entityRefId: instance.entityRefId,\n });\n // Get active bookmarks from instance entity (workflowInstance.bookmarks)\n const bookmarks = this.getActiveBookmarksFromInstance(instance);\n console.log(`[GenericWorkflowTaskProvider] 📌 Found ${bookmarks.length} active bookmarks for instance ${instance.id}`);\n // Process each bookmark (typically one per suspended activity)\n for (const bookmark of bookmarks) {\n try {\n // Get payload from entity (payload object or parse payloadJson)\n let payload;\n try {\n const raw = bookmark.payload ??\n (bookmark.payloadJson ? JSON.parse(bookmark.payloadJson) : null);\n payload =\n typeof raw === 'object' && raw !== null\n ? raw\n : {};\n }\n catch (error) {\n console.warn(`[GenericWorkflowTaskProvider] ⚠️ Failed to parse bookmark payload:`, error);\n continue;\n }\n // Only process human-task bookmarks\n if (payload.taskType !== 'human-task') {\n console.log(`[GenericWorkflowTaskProvider] ⏭️ Skipping bookmark (taskType: ${payload.taskType}, not human-task)`);\n continue;\n }\n // Check assignment filter if provided\n if (options?.assigneeIds && options.assigneeIds.length > 0) {\n const assignedIds = payload.assignedUserIds || [];\n const candidateIds = payload.candidateUserIds || [];\n const allUserIds = [...assignedIds, ...candidateIds];\n // TODO: Also check candidateRoleIds by resolving role members\n const matchesAssignee = allUserIds.some((id) => options.assigneeIds.includes(id));\n if (!matchesAssignee) {\n console.log(`[GenericWorkflowTaskProvider] ⏭️ Skipping task (assignee filter doesn't match)`);\n continue;\n }\n }\n // Map bookmark to task\n const task = this.mapBookmarkToTask(instance, bookmark, payload);\n console.log(`[GenericWorkflowTaskProvider] ✅ Mapped to task:`, {\n id: task.id,\n title: task.title,\n status: task.status,\n });\n tasks.push(task);\n }\n catch (error) {\n console.error(`[GenericWorkflowTaskProvider] ❌ Failed to process bookmark ${bookmark.id}:`, error);\n // Skip this bookmark and continue\n }\n }\n }\n catch (error) {\n console.error(`[GenericWorkflowTaskProvider] ❌ Failed to process instance ${instance.id}:`, error);\n // Skip this instance and continue\n }\n }\n console.log(`[GenericWorkflowTaskProvider] ✅ Returning ${tasks.length} tasks (total instances: ${total})`);\n return { items: tasks, total };\n }\n /**\n * Get active (non-consumed) bookmarks from workflow instance entity.\n * Reads from instance.workflowInstance?.bookmarks — no direct DB access.\n */\n getActiveBookmarksFromInstance(instance) {\n const wi = instance?.workflowInstance;\n const bookmarks = wi?.bookmarks ?? [];\n const active = bookmarks.filter((b) => !b.isConsumed && !b.consumed);\n return active;\n }\n /**\n * Map bookmark to task board task format.\n */\n mapBookmarkToTask(instance, bookmark, payload) {\n // Extract dates\n const dueDate = payload.dueDate\n ? (typeof payload.dueDate === 'string' ? new Date(payload.dueDate) : payload.dueDate)\n : (instance.createdAt ? new Date(instance.createdAt) : new Date());\n const startDate = instance.createdAt\n ? new Date(instance.createdAt)\n : dueDate;\n // If startDate and endDate are the same, set endDate to one day after startDate\n let endDate = dueDate;\n if (startDate.getTime() === dueDate.getTime()) {\n endDate = new Date(startDate);\n console.log(endDate);\n endDate.setDate(endDate.getDate() + 1);\n }\n // Map priority\n const priority = this.mapPriorityToTaskPriority(payload.priority || 'Normal');\n // Build title\n const title = payload.title || payload.activityName || 'Workflow Task';\n return {\n id: bookmark.id, // Use bookmark ID as task ID\n title,\n description: payload.description || `Action required: ${payload.activityName}`,\n startDate,\n endDate,\n allDay: false,\n assignee: payload.assignedUserIds && payload.assignedUserIds.length > 0\n ? {\n id: payload.assignedUserIds[0], // Use first assigned user\n type: 'user',\n fullName: '', // Will be populated if user data is loaded\n }\n : undefined,\n index: 2,\n status: {\n id: AXPSystemStatuses.Pending.name,\n title: this.translationService.translateSync('@workflow-management:tasks.states.pending'),\n },\n priority,\n reporter: {\n id: instance.auditInfo?.created?.by?.id || '',\n type: 'user',\n fullName: instance.auditInfo?.created?.by?.fullName || '',\n },\n data: {\n // Store workflow instance and bookmark metadata\n instanceId: instance.id,\n bookmarkId: bookmark.id,\n activityId: bookmark.activityId,\n activityType: payload.activityType,\n activityName: payload.activityName,\n taskToken: payload.taskToken,\n entityRefId: instance.entityRefId,\n entityRefType: instance.entityRefType,\n definitionId: instance.definitionId,\n // Store full payload for actions\n payload: payload,\n },\n };\n }\n /**\n * Map priority to task board priority.\n */\n mapPriorityToTaskPriority(priority) {\n switch (priority) {\n case 'Urgent':\n return 'highest';\n case 'High':\n return 'high';\n case 'Normal':\n return 'medium';\n case 'Low':\n return 'low';\n default:\n return 'medium';\n }\n }\n //#endregion\n //#region ---- Task Updates ----\n /**\n * Update tasks (not applicable for workflow instances - they are read-only from task provider perspective).\n */\n async updateTasks(tasksToUpdate) {\n // Workflow instances are managed by workflow engine\n // Task updates should be done through workflow resume, not direct updates\n console.warn(`[GenericWorkflowTaskProvider] ⚠️ updateTasks called - workflow tasks are read-only from provider`);\n return tasksToUpdate;\n }\n //#endregion\n //#region ---- Command Execution ----\n /**\n * Execute commands on tasks.\n *\n * Supports:\n * - Workflow resume commands (Complete, Cancel)\n */\n async executeCommand(command) {\n if (!command?.name)\n return { success: true };\n const taskData = command.options?.['data'];\n const instanceId = taskData?.instanceId ?? command.options?.['instanceId'] ?? '';\n const bookmarkId = taskData?.bookmarkId ?? command.options?.['bookmarkId'] ?? '';\n const taskToken = taskData?.taskToken ?? command.options?.['taskToken'] ?? '';\n const activityId = taskData?.activityId ?? command.options?.['activityId'] ?? '';\n const outcome = command.options?.['outcome'] ?? 'Done';\n const userInput = command.options?.['userInput'] ?? {};\n // Handle workflow resume commands\n if (command.name === 'WorkflowManagement.WorkflowInstance:Resume' || command.name === 'resume-workflow') {\n if (!instanceId || !taskToken || !activityId) {\n return {\n success: false,\n message: {\n text: 'Missing required parameters: instanceId, taskToken, activityId',\n },\n };\n }\n try {\n const result = await this.workflowManager.resume(instanceId, activityId, outcome, userInput, taskToken);\n return {\n success: result.success,\n message: result.error\n ? {\n text: result.error,\n }\n : undefined,\n };\n }\n catch (error) {\n console.error(`[GenericWorkflowTaskProvider] ❌ Error resuming workflow:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to resume workflow',\n },\n };\n }\n }\n return { success: true };\n }\n //#endregion\n //#region ---- Actions & Statuses ----\n /**\n * Get available actions for a task.\n *\n * Extracts actions from bookmark payload.\n */\n async getActions(task) {\n const actions = [];\n if (!task)\n return actions;\n const taskData = task.data;\n const payload = taskData?.payload;\n if (!payload)\n return actions;\n // Extract actions from payload\n if (payload.actions) {\n const allActions = [\n ...(payload.actions.prefix || []),\n ...(payload.actions.suffix || []),\n ];\n for (const action of allActions) {\n const actionName = action.command?.name || action.name || 'unknown';\n actions.push({\n name: actionName,\n title: action.title || actionName,\n icon: action.icon,\n color: action.color,\n priority: 'primary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: actionName,\n userInput: {},\n },\n },\n });\n }\n }\n else {\n // Default actions if none provided\n actions.push({\n name: 'submit',\n title: this.translationService.translateSync('@general:actions.submit.title'),\n icon: 'fa-light fa-check',\n color: 'primary',\n priority: 'primary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: 'submit',\n userInput: {},\n },\n },\n });\n actions.push({\n name: 'cancel',\n title: this.translationService.translateSync('@general:actions.cancel.title'),\n icon: 'fa-light fa-times',\n color: 'default',\n priority: 'secondary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: 'cancel',\n userInput: {},\n },\n },\n });\n }\n console.log('actions', actions);\n return actions;\n }\n async getExtraFields() {\n return [];\n }\n async getStatuses() {\n return [\n {\n index: 0,\n key: AXPSystemStatuses.Pending.name,\n title: await this.translationService.translateAsync('@workflow-management:tasks.states.pending'),\n color: 'warning',\n },\n ];\n }\n //#endregion\n //#region ---- Component ----\n getComponent() {\n return () => import('./workflow-task-popover.component').then((m) => m.AXMWorkflowTaskPopoverComponent);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPGenericWorkflowTaskProvider, deps: [{ token: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPGenericWorkflowTaskProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPGenericWorkflowTaskProvider, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy13b3JrZmxvdy10YXNrLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy90YXNrLXByb3ZpZGVyL2dlbmVyaWMtd29ya2Zsb3ctdGFzay5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBT0wsdUJBQXVCLEdBQ3hCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBUSxNQUFNLGVBQWUsQ0FBQzs7QUF5QmpGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlDQUF5QyxHQUNwRCxJQUFJLGNBQWMsQ0FBdUMsMkNBQTJDLENBQUMsQ0FBQztBQTZDeEcsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE1BQU0sT0FBTyw4QkFBK0IsU0FBUSx1QkFBNEM7SUFnQjlGLFlBQVk7SUFFWixtQ0FBbUM7SUFFbkMsWUFDcUQsTUFBNEM7UUFFL0YsS0FBSyxFQUFFLENBQUM7UUFsQlYsWUFBWTtRQUVaLCtDQUErQztRQUU5QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLHlCQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhO2FBQ3ZELFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQzthQUNwRCxJQUFJLEVBQTRELENB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LEVBQUUsUUFBUTt3QkFDakIsU0FBUyxFQUFFLEVBQUU7cUJBQ2Q7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFaEMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsT0FBTztZQUNMO2dCQUNFLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDbkMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQywyQ0FBMkMsQ0FBQztnQkFDaEcsS0FBSyxFQUFFLFNBQVM7YUFDakI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVk7SUFFWixpQ0FBaUM7SUFFeEIsWUFBWTtRQUNuQixPQUFPLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDL0YsQ0FBQzsrR0FsZ0JVLDhCQUE4QixrQkFxQi9CLHlDQUF5QzttSEFyQnhDLDhCQUE4Qjs7NEZBQTlCLDhCQUE4QjtrQkFEMUMsVUFBVTs7MEJBc0JOLE1BQU07MkJBQUMseUNBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb24gfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHtcbiAgQVhQRXh0cmFGaWVsZCxcbiAgQVhQVGFzayxcbiAgQVhQVGFza0FjdGlvbk1lbnVJdGVtLFxuICBBWFBUYXNrRmlsdGVyLFxuICBBWFBUYXNrUG9wb3ZlckNvbXBvbmVudCxcbiAgQVhQVGFza1N0YXR1cyxcbiAgQVhQV29ya2Zsb3dUYXNrUHJvdmlkZXIsXG59IGZyb20gJ0BhY29yZXgvbW9kdWxlcy90YXNrLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQU3lzdGVtU3RhdHVzZXMgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZCwgQVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQsIEFYUEFjdGlvbk1lbnVJdGVtIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dNYW5hZ2VyIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBpbmplY3QsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTVdvcmtmbG93TWFuYWdlbWVudFdvcmtmbG93SW5zdGFuY2VFbnRpdHlNb2RlbCB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3dvcmtmbG93LWluc3RhbmNlL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzJztcblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgICAtLS0tXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSB3b3JrZmxvdy1zcGVjaWZpYyB0YXNrIHByb3ZpZGVyLlxuICogT25lIHByb3ZpZGVyIHBlciB3b3JrZmxvdyBkZWZpbml0aW9uIOKAkyBwYXNzIGRlZmluaXRpb25JZCB0byBzY29wZSB0YXNrcyB0byB0aGF0IGRlZmluaXRpb24gb25seS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJDb25maWcge1xuICAvKiogVW5pcXVlIHByb3ZpZGVyIG5hbWUgKGUuZy4gJ2xlYXZlLXJlcXVlc3Qtd29ya2Zsb3ctdGFza3MnLCAnZG9jdW1lbnQtcmV2aWV3LXdvcmtmbG93LXRhc2tzJykuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgdGl0bGUgaW4gdGFzayBib2FyZCB0eXBlIHNlbGVjdG9yLiAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgaWNvbiAoZGVmYXVsdDogJ2ZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdCcpLiAqL1xuICBpY29uPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiBzZXQsIG9ubHkgd29ya2Zsb3cgaW5zdGFuY2VzIGZvciB0aGlzIGRlZmluaXRpb24gYXJlIHNob3duLlxuICAgKiBPbmUgcHJvdmlkZXIgPSBvbmUgZGVmaW5pdGlvbi4gT21pdCB0byBzaG93IGFsbCBzdXNwZW5kZWQgd29ya2Zsb3cgdGFza3MgKHNpbmdsZSBnZW5lcmljIHByb3ZpZGVyKS5cbiAgICovXG4gIGRlZmluaXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHByb3ZpZGVyIGNvbmZpZy4gVXNlIHdoZW4gcmVnaXN0ZXJpbmcgdmlhIERJIChwcm92aWRlIHRva2VuICsgdXNlRmFjdG9yeSB3aXRoIGRlcHMpLlxuICogV2hlbiBjcmVhdGluZyB2aWEgdXNlRmFjdG9yeTogKCkgPT4gbmV3IEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcih7IC4uLiB9KSwgY29uZmlnIGlzIHBhc3NlZCBpbiB0aGUgY2xvc3VyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYUF9HRU5FUklDX1dPUktGTE9XX1RBU0tfUFJPVklERVJfQ09ORklHID1cbiAgbmV3IEluamVjdGlvblRva2VuPEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlckNvbmZpZz4oJ0FYUF9HRU5FUklDX1dPUktGTE9XX1RBU0tfUFJPVklERVJfQ09ORklHJyk7XG5cbi8qKlxuICogQm9va21hcmsgYXMgc3RvcmVkIGluIFdvcmtmbG93SW5zdGFuY2UgZW50aXR5ICh3b3JrZmxvd0luc3RhbmNlLmJvb2ttYXJrcykuXG4gKiBSZWFkIGZyb20gZW50aXR5IHNlcnZpY2U7IG5vIGRpcmVjdCBEQiBhY2Nlc3MuXG4gKi9cbmludGVyZmFjZSBXb3JrZmxvd0luc3RhbmNlQm9va21hcmsge1xuICBpZDogc3RyaW5nO1xuICBhY3Rpdml0eUlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcGF5bG9hZD86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsO1xuICBwYXlsb2FkSnNvbj86IHN0cmluZztcbiAgY29uc3VtZWQ/OiBib29sZWFuO1xuICBpc0NvbnN1bWVkPzogYm9vbGVhbjtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nO1xufVxuXG4vKiogU2hhcGUgdXNlZCB3aGVuIGVudGl0eSBzdG9yYWdlIHN0b3JlcyB3b3JrZmxvd0luc3RhbmNlIHdpdGggYm9va21hcmtzIGF0IHJvb3QgbGV2ZWwuICovXG5pbnRlcmZhY2UgV29ya2Zsb3dJbnN0YW5jZVdpdGhCb29rbWFya3Mge1xuICBib29rbWFya3M/OiBXb3JrZmxvd0luc3RhbmNlQm9va21hcmtbXTtcbn1cblxuLyoqXG4gKiBCb29rbWFyayBwYXlsb2FkIHN0cnVjdHVyZSBmb3IgaHVtYW4tdGFzayBhY3Rpdml0aWVzLlxuICovXG5pbnRlcmZhY2UgSHVtYW5UYXNrQm9va21hcmtQYXlsb2FkIHtcbiAgYWN0aXZpdHlUeXBlOiBzdHJpbmc7XG4gIGFjdGl2aXR5TmFtZTogc3RyaW5nO1xuICB0YXNrVG9rZW46IHN0cmluZztcbiAgdGFza1R5cGU6ICdodW1hbi10YXNrJyB8ICd1aS1hY3Rpdml0eScgfCAnc3lzdGVtLWFjdGl2aXR5JztcbiAgYXNzaWduZWRVc2VySWRzPzogc3RyaW5nW10gfCBudWxsO1xuICBjYW5kaWRhdGVVc2VySWRzPzogc3RyaW5nW10gfCBudWxsO1xuICBjYW5kaWRhdGVSb2xlSWRzPzogc3RyaW5nW10gfCBudWxsO1xuICB0aXRsZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHByaW9yaXR5PzogJ0xvdycgfCAnTm9ybWFsJyB8ICdIaWdoJyB8ICdVcmdlbnQnO1xuICBkdWVEYXRlPzogc3RyaW5nIHwgRGF0ZSB8IG51bGw7XG4gIGxheW91dD86IHN0cmluZyB8IGFueTtcbiAgYWN0aW9ucz86IHtcbiAgICBwcmVmaXg/OiBBWFBBY3Rpb25NZW51SXRlbVtdO1xuICAgIHN1ZmZpeD86IEFYUEFjdGlvbk1lbnVJdGVtW107XG4gIH07XG4gIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBHZW5lcmljIFdvcmtmbG93IFRhc2sgUHJvdmlkZXJcbiAqXG4gKiBQcm92aWRlcyB0YXNrcyBmcm9tIFdvcmtmbG93IEluc3RhbmNlcyBkaXJlY3RseSAobm8gV29yayBJdGVtcykuXG4gKiBRdWVyaWVzIHN1c3BlbmRlZCB3b3JrZmxvdyBpbnN0YW5jZXMgYW5kIGV4dHJhY3RzIHRhc2tzIGZyb20gYm9va21hcmtzLlxuICpcbiAqIENyZWF0ZSBvbmUgcHJvdmlkZXIgcGVyIHdvcmtmbG93IGRlZmluaXRpb24gYnkgcGFzc2luZyBhIGNvbmZpZyAobmFtZSwgdGl0bGUsIGRlZmluaXRpb25JZCkuXG4gKiBFLmcuIGxlYXZlIHJlcXVlc3Q6IHsgbmFtZTogJ2xlYXZlLXJlcXVlc3Qtd29ya2Zsb3ctdGFza3MnLCB0aXRsZTogJ0xlYXZlIFJlcXVlc3QnLCBkZWZpbml0aW9uSWQ6ICdMZWF2ZVJlcXVlc3RXb3JrZmxvdycgfVxuICpcbiAqIEFyY2hpdGVjdHVyZTpcbiAqIC0gUXVlcmllcyBXb3JrZmxvdyBJbnN0YW5jZXMgd2l0aCBzdWJTdGF0dXMgPSAnU3VzcGVuZGVkJ1xuICogLSBGaWx0ZXJzIGJ5IGNvbmZpZy5kZWZpbml0aW9uSWQgd2hlbiBzZXQgKG9uZSBwcm92aWRlciA9IG9uZSBkZWZpbml0aW9uKVxuICogLSBFeHRyYWN0cyBhY3RpdmUgYm9va21hcmtzIGZvciBlYWNoIGluc3RhbmNlXG4gKiAtIFBhcnNlcyBib29rbWFyayBwYXlsb2FkIGZvciBhc3NpZ25tZW50L2FjdGlvbnNcbiAqIC0gTWFwcyB0byB0YXNrIGJvYXJkIGZvcm1hdFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhQR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyIGV4dGVuZHMgQVhQV29ya2Zsb3dUYXNrUHJvdmlkZXI8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAvLyNyZWdpb24gLS0tLSAgIENvbmZpZyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQVhQR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyQ29uZmlnO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXJ2aWNlID0gaW5qZWN0KEFYUEVudGl0eVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93SW5zdGFuY2VEYXRhID0gdGhpcy5lbnRpdHlTZXJ2aWNlXG4gICAgLndpdGhFbnRpdHkoJ1dvcmtmbG93TWFuYWdlbWVudCcsICdXb3JrZmxvd0luc3RhbmNlJylcbiAgICAuZGF0YTxzdHJpbmcsIEFYTVdvcmtmbG93TWFuYWdlbWVudFdvcmtmbG93SW5zdGFuY2VFbnRpdHlNb2RlbD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93TWFuYWdlciA9IGluamVjdChBWFBXb3JrZmxvd01hbmFnZXIpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29uc3RydWN0b3IgICAtLS0tXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJRykgY29uZmlnOiBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJDb25maWcsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByb3ZpZGVyIE1ldGFkYXRhICAgLS0tLVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm5hbWU7XG4gIH1cblxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudGl0bGU7XG4gIH1cblxuICBnZXQgaWNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5pY29uID8/ICdmYS1saWdodCBmYS1kaWFncmFtLXByb2plY3QnO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBUYXNrIFJldHJpZXZhbCAgIC0tLS1cblxuICAvKipcbiAgICogR2V0IHRhc2tzIGZyb20gc3VzcGVuZGVkIHdvcmtmbG93IGluc3RhbmNlcy5cbiAgICogXG4gICAqIFF1ZXJpZXMgd29ya2Zsb3cgaW5zdGFuY2VzIGZpbHRlcmVkIGJ5OlxuICAgKiAtIHN1YlN0YXR1cyA9ICdTdXNwZW5kZWQnXG4gICAqIC0gZW50aXR5UmVmVHlwZSAoaWYgcHJvdmlkZWQgaW4gZmlsdGVyKVxuICAgKiAtIGRlZmluaXRpb25JZCAoaWYgcHJvdmlkZWQgaW4gZmlsdGVyKVxuICAgKiAtIGFzc2lnbmVlL2NsYWltYW50IChpZiBmaWx0ZXIgcHJvdmlkZWQpXG4gICAqIFxuICAgKiBUaGVuIGV4dHJhY3RzIGFjdGl2ZSBib29rbWFya3MgYW5kIG1hcHMgdG8gdGFzayBib2FyZCBmb3JtYXQuXG4gICAqL1xuICBhc3luYyBnZXRUYXNrcyhcbiAgICBvcHRpb25zOiBBWFBUYXNrRmlsdGVyLFxuICApOiBQcm9taXNlPHsgaXRlbXM6IEFYUFRhc2s8UmVjb3JkPHN0cmluZywgYW55Pj5bXTsgdG90YWw6IG51bWJlciB9PiB7XG4gICAgY29uc29sZS5sb2coYFtHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJdIPCflI0gZ2V0VGFza3MgY2FsbGVkIHdpdGggb3B0aW9uczpgLCB7XG4gICAgICBza2lwOiBvcHRpb25zPy5za2lwLFxuICAgICAgdGFrZTogb3B0aW9ucz8udGFrZSxcbiAgICAgIGFzc2lnbmVlSWRzOiBvcHRpb25zPy5hc3NpZ25lZUlkcyxcbiAgICAgIHJhbmdlOiBvcHRpb25zPy5yYW5nZSxcbiAgICAgIHR5cGVzOiBvcHRpb25zPy50eXBlcyxcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxkIGZpbHRlciBmb3Igd29ya2Zsb3cgaW5zdGFuY2VzXG4gICAgY29uc3QgYmFzZUZpbHRlcjogQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uID0geyBsb2dpYzogJ2FuZCcsIGZpbHRlcnM6IFtdIH07XG5cbiAgICAvLyBGaWx0ZXIgYnkgc3ViU3RhdHVzID0gJ1N1c3BlbmRlZCcgKG9ubHkgc3VzcGVuZGVkIHdvcmtmbG93cyBoYXZlIHBlbmRpbmcgdGFza3MpXG4gICAgYmFzZUZpbHRlci5maWx0ZXJzPy5wdXNoKHtcbiAgICAgIGZpZWxkOiAnc3ViU3RhdHVzJyxcbiAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSxcbiAgICAgIHZhbHVlOiAnU3VzcGVuZGVkJyxcbiAgICB9KTtcblxuICAgIC8vIFNjb3BlIHRoaXMgcHJvdmlkZXIgdG8gb25lIHdvcmtmbG93IGRlZmluaXRpb25cbiAgICBpZiAodGhpcy5jb25maWcuZGVmaW5pdGlvbklkKSB7XG4gICAgICBiYXNlRmlsdGVyLmZpbHRlcnM/LnB1c2goe1xuICAgICAgICBmaWVsZDogJ2RlZmluaXRpb25JZCcsXG4gICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSxcbiAgICAgICAgdmFsdWU6IHRoaXMuY29uZmlnLmRlZmluaXRpb25JZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBieSBkYXRlIHJhbmdlIGlmIHByb3ZpZGVkICh1c2luZyBjcmVhdGVkQXQgb3IgdXBkYXRlZEF0KVxuICAgIGlmIChvcHRpb25zPy5yYW5nZT8uZnJvbSB8fCBvcHRpb25zPy5yYW5nZT8uZW5kKSB7XG4gICAgICBpZiAob3B0aW9ucy5yYW5nZS5mcm9tKSB7XG4gICAgICAgIGJhc2VGaWx0ZXIuZmlsdGVycz8ucHVzaCh7XG4gICAgICAgICAgZmllbGQ6ICdjcmVhdGVkQXQnLFxuICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdndGUnIH0sXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbnMucmFuZ2UuZnJvbS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKG9wdGlvbnMucmFuZ2UuZW5kKSB7XG4gICAgICAgIGJhc2VGaWx0ZXIuZmlsdGVycz8ucHVzaCh7XG4gICAgICAgICAgZmllbGQ6ICdjcmVhdGVkQXQnLFxuICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdsdGUnIH0sXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbnMucmFuZ2UuZW5kLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDwn5SOIFF1ZXJ5IGZpbHRlcjpgLCBKU09OLnN0cmluZ2lmeShiYXNlRmlsdGVyLCBudWxsLCAyKSk7XG5cbiAgICAvLyBRdWVyeSB3b3JrZmxvdyBpbnN0YW5jZXNcbiAgICBjb25zdCB7IGl0ZW1zOiBpbnN0YW5jZXMsIHRvdGFsIH0gPSBhd2FpdCB0aGlzLndvcmtmbG93SW5zdGFuY2VEYXRhLnF1ZXJ5KHtcbiAgICAgIHNraXA6IG9wdGlvbnM/LnNraXAgPz8gMCxcbiAgICAgIHRha2U6IG9wdGlvbnM/LnRha2UgPz8gMjAsXG4gICAgICBmaWx0ZXI6IGJhc2VGaWx0ZXIsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g8J+TpiBRdWVyeSByZXN1bHQ6YCwge1xuICAgICAgdG90YWwsXG4gICAgICBpdGVtc0NvdW50OiBpbnN0YW5jZXMubGVuZ3RoLFxuICAgICAgaW5zdGFuY2VzOiBpbnN0YW5jZXMubWFwKChpbnN0KSA9PiAoe1xuICAgICAgICBpZDogaW5zdC5pZCxcbiAgICAgICAgZGVmaW5pdGlvbklkOiBpbnN0LmRlZmluaXRpb25JZCxcbiAgICAgICAgZW50aXR5UmVmVHlwZTogaW5zdC5lbnRpdHlSZWZUeXBlLFxuICAgICAgICBlbnRpdHlSZWZJZDogaW5zdC5lbnRpdHlSZWZJZCxcbiAgICAgICAgc3ViU3RhdHVzOiBpbnN0LnN1YlN0YXR1cyxcbiAgICAgIH0pKSxcbiAgICB9KTtcblxuICAgIC8vIEV4dHJhY3QgdGFza3MgZnJvbSBib29rbWFya3MgZm9yIGVhY2ggaW5zdGFuY2VcbiAgICBjb25zdCB0YXNrczogQVhQVGFzazxSZWNvcmQ8c3RyaW5nLCBhbnk+PltdID0gW107XG5cbiAgICBjb25zb2xlLmxvZyhgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g8J+UhCBQcm9jZXNzaW5nICR7aW5zdGFuY2VzLmxlbmd0aH0gd29ya2Zsb3cgaW5zdGFuY2VzLi4uYCk7XG5cbiAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIGluc3RhbmNlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJdIPCfk50gUHJvY2Vzc2luZyBpbnN0YW5jZTpgLCB7XG4gICAgICAgICAgaWQ6IGluc3RhbmNlLmlkLFxuICAgICAgICAgIGRlZmluaXRpb25JZDogaW5zdGFuY2UuZGVmaW5pdGlvbklkLFxuICAgICAgICAgIGVudGl0eVJlZlR5cGU6IGluc3RhbmNlLmVudGl0eVJlZlR5cGUsXG4gICAgICAgICAgZW50aXR5UmVmSWQ6IGluc3RhbmNlLmVudGl0eVJlZklkLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBHZXQgYWN0aXZlIGJvb2ttYXJrcyBmcm9tIGluc3RhbmNlIGVudGl0eSAod29ya2Zsb3dJbnN0YW5jZS5ib29rbWFya3MpXG4gICAgICAgIGNvbnN0IGJvb2ttYXJrcyA9IHRoaXMuZ2V0QWN0aXZlQm9va21hcmtzRnJvbUluc3RhbmNlKGluc3RhbmNlKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g8J+TjCBGb3VuZCAke2Jvb2ttYXJrcy5sZW5ndGh9IGFjdGl2ZSBib29rbWFya3MgZm9yIGluc3RhbmNlICR7aW5zdGFuY2UuaWR9YCk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBlYWNoIGJvb2ttYXJrICh0eXBpY2FsbHkgb25lIHBlciBzdXNwZW5kZWQgYWN0aXZpdHkpXG4gICAgICAgIGZvciAoY29uc3QgYm9va21hcmsgb2YgYm9va21hcmtzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEdldCBwYXlsb2FkIGZyb20gZW50aXR5IChwYXlsb2FkIG9iamVjdCBvciBwYXJzZSBwYXlsb2FkSnNvbilcbiAgICAgICAgICAgIGxldCBwYXlsb2FkOiBIdW1hblRhc2tCb29rbWFya1BheWxvYWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByYXcgPVxuICAgICAgICAgICAgICAgIGJvb2ttYXJrLnBheWxvYWQgPz9cbiAgICAgICAgICAgICAgICAoYm9va21hcmsucGF5bG9hZEpzb24gPyBKU09OLnBhcnNlKGJvb2ttYXJrLnBheWxvYWRKc29uKSA6IG51bGwpO1xuICAgICAgICAgICAgICBwYXlsb2FkID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgcmF3ID09PSAnb2JqZWN0JyAmJiByYXcgIT09IG51bGxcbiAgICAgICAgICAgICAgICAgID8gKHJhdyBhcyBIdW1hblRhc2tCb29rbWFya1BheWxvYWQpXG4gICAgICAgICAgICAgICAgICA6ICh7fSBhcyBIdW1hblRhc2tCb29rbWFya1BheWxvYWQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDimqDvuI8gRmFpbGVkIHRvIHBhcnNlIGJvb2ttYXJrIHBheWxvYWQ6YCwgZXJyb3IpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT25seSBwcm9jZXNzIGh1bWFuLXRhc2sgYm9va21hcmtzXG4gICAgICAgICAgICBpZiAocGF5bG9hZC50YXNrVHlwZSAhPT0gJ2h1bWFuLXRhc2snKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDij63vuI8gU2tpcHBpbmcgYm9va21hcmsgKHRhc2tUeXBlOiAke3BheWxvYWQudGFza1R5cGV9LCBub3QgaHVtYW4tdGFzaylgKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGFzc2lnbm1lbnQgZmlsdGVyIGlmIHByb3ZpZGVkXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uYXNzaWduZWVJZHMgJiYgb3B0aW9ucy5hc3NpZ25lZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFzc2lnbmVkSWRzID0gcGF5bG9hZC5hc3NpZ25lZFVzZXJJZHMgfHwgW107XG4gICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUlkcyA9IHBheWxvYWQuY2FuZGlkYXRlVXNlcklkcyB8fCBbXTtcbiAgICAgICAgICAgICAgY29uc3QgYWxsVXNlcklkcyA9IFsuLi5hc3NpZ25lZElkcywgLi4uY2FuZGlkYXRlSWRzXTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8vIFRPRE86IEFsc28gY2hlY2sgY2FuZGlkYXRlUm9sZUlkcyBieSByZXNvbHZpbmcgcm9sZSBtZW1iZXJzXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzQXNzaWduZWUgPSBhbGxVc2VySWRzLnNvbWUoKGlkKSA9PiBvcHRpb25zLmFzc2lnbmVlSWRzIS5pbmNsdWRlcyhpZCkpO1xuICAgICAgICAgICAgICBpZiAoIW1hdGNoZXNBc3NpZ25lZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDij63vuI8gU2tpcHBpbmcgdGFzayAoYXNzaWduZWUgZmlsdGVyIGRvZXNuJ3QgbWF0Y2gpYCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGJvb2ttYXJrIHRvIHRhc2tcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLm1hcEJvb2ttYXJrVG9UYXNrKGluc3RhbmNlLCBib29rbWFyaywgcGF5bG9hZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g4pyFIE1hcHBlZCB0byB0YXNrOmAsIHtcbiAgICAgICAgICAgICAgaWQ6IHRhc2suaWQsXG4gICAgICAgICAgICAgIHRpdGxlOiB0YXNrLnRpdGxlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRhc2suc3RhdHVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0YXNrcy5wdXNoKHRhc2spO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDinYwgRmFpbGVkIHRvIHByb2Nlc3MgYm9va21hcmsgJHtib29rbWFyay5pZH06YCwgZXJyb3IpO1xuICAgICAgICAgICAgLy8gU2tpcCB0aGlzIGJvb2ttYXJrIGFuZCBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g4p2MIEZhaWxlZCB0byBwcm9jZXNzIGluc3RhbmNlICR7aW5zdGFuY2UuaWR9OmAsIGVycm9yKTtcbiAgICAgICAgLy8gU2tpcCB0aGlzIGluc3RhbmNlIGFuZCBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDinIUgUmV0dXJuaW5nICR7dGFza3MubGVuZ3RofSB0YXNrcyAodG90YWwgaW5zdGFuY2VzOiAke3RvdGFsfSlgKTtcblxuICAgIHJldHVybiB7IGl0ZW1zOiB0YXNrcywgdG90YWwgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIChub24tY29uc3VtZWQpIGJvb2ttYXJrcyBmcm9tIHdvcmtmbG93IGluc3RhbmNlIGVudGl0eS5cbiAgICogUmVhZHMgZnJvbSBpbnN0YW5jZS53b3JrZmxvd0luc3RhbmNlPy5ib29rbWFya3Mg4oCUIG5vIGRpcmVjdCBEQiBhY2Nlc3MuXG4gICAqL1xuICBwcml2YXRlIGdldEFjdGl2ZUJvb2ttYXJrc0Zyb21JbnN0YW5jZShcbiAgICBpbnN0YW5jZTogQVhNV29ya2Zsb3dNYW5hZ2VtZW50V29ya2Zsb3dJbnN0YW5jZUVudGl0eU1vZGVsXG4gICk6IFdvcmtmbG93SW5zdGFuY2VCb29rbWFya1tdIHtcbiAgICBjb25zdCB3aSA9IGluc3RhbmNlPy53b3JrZmxvd0luc3RhbmNlIGFzIFdvcmtmbG93SW5zdGFuY2VXaXRoQm9va21hcmtzIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJvb2ttYXJrcyA9IHdpPy5ib29rbWFya3MgPz8gW107XG4gICAgY29uc3QgYWN0aXZlID0gYm9va21hcmtzLmZpbHRlcihcbiAgICAgIChiOiBXb3JrZmxvd0luc3RhbmNlQm9va21hcmspID0+ICFiLmlzQ29uc3VtZWQgJiYgIWIuY29uc3VtZWRcbiAgICApIGFzIFdvcmtmbG93SW5zdGFuY2VCb29rbWFya1tdO1xuICAgIHJldHVybiBhY3RpdmU7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGJvb2ttYXJrIHRvIHRhc2sgYm9hcmQgdGFzayBmb3JtYXQuXG4gICAqL1xuICBwcml2YXRlIG1hcEJvb2ttYXJrVG9UYXNrKFxuICAgIGluc3RhbmNlOiBBWE1Xb3JrZmxvd01hbmFnZW1lbnRXb3JrZmxvd0luc3RhbmNlRW50aXR5TW9kZWwsXG4gICAgYm9va21hcms6IFdvcmtmbG93SW5zdGFuY2VCb29rbWFyayxcbiAgICBwYXlsb2FkOiBIdW1hblRhc2tCb29rbWFya1BheWxvYWRcbiAgKTogQVhQVGFzazxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgLy8gRXh0cmFjdCBkYXRlc1xuICAgIGNvbnN0IGR1ZURhdGUgPSBwYXlsb2FkLmR1ZURhdGUgXG4gICAgICA/ICh0eXBlb2YgcGF5bG9hZC5kdWVEYXRlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHBheWxvYWQuZHVlRGF0ZSkgOiBwYXlsb2FkLmR1ZURhdGUpXG4gICAgICA6IChpbnN0YW5jZS5jcmVhdGVkQXQgPyBuZXcgRGF0ZShpbnN0YW5jZS5jcmVhdGVkQXQpIDogbmV3IERhdGUoKSk7XG4gICAgXG4gICAgY29uc3Qgc3RhcnREYXRlID0gaW5zdGFuY2UuY3JlYXRlZEF0IFxuICAgICAgPyBuZXcgRGF0ZShpbnN0YW5jZS5jcmVhdGVkQXQpIFxuICAgICAgOiBkdWVEYXRlO1xuXG4gICAgLy8gSWYgc3RhcnREYXRlIGFuZCBlbmREYXRlIGFyZSB0aGUgc2FtZSwgc2V0IGVuZERhdGUgdG8gb25lIGRheSBhZnRlciBzdGFydERhdGVcbiAgICBsZXQgZW5kRGF0ZSA9IGR1ZURhdGU7XG4gICAgaWYgKHN0YXJ0RGF0ZS5nZXRUaW1lKCkgPT09IGR1ZURhdGUuZ2V0VGltZSgpKSB7XG4gICAgICBlbmREYXRlID0gbmV3IERhdGUoc3RhcnREYXRlKTtcbiAgICAgIGNvbnNvbGUubG9nKGVuZERhdGUpO1xuICAgICAgXG4gICAgICBlbmREYXRlLnNldERhdGUoZW5kRGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICB9XG5cbiAgICAvLyBNYXAgcHJpb3JpdHlcbiAgICBjb25zdCBwcmlvcml0eSA9IHRoaXMubWFwUHJpb3JpdHlUb1Rhc2tQcmlvcml0eShwYXlsb2FkLnByaW9yaXR5IHx8ICdOb3JtYWwnKTtcblxuICAgIC8vIEJ1aWxkIHRpdGxlXG4gICAgY29uc3QgdGl0bGUgPSBwYXlsb2FkLnRpdGxlIHx8IHBheWxvYWQuYWN0aXZpdHlOYW1lIHx8ICdXb3JrZmxvdyBUYXNrJztcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogYm9va21hcmsuaWQsIC8vIFVzZSBib29rbWFyayBJRCBhcyB0YXNrIElEXG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXlsb2FkLmRlc2NyaXB0aW9uIHx8IGBBY3Rpb24gcmVxdWlyZWQ6ICR7cGF5bG9hZC5hY3Rpdml0eU5hbWV9YCxcbiAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGUsXG4gICAgICBhbGxEYXk6IGZhbHNlLFxuICAgICAgYXNzaWduZWU6IHBheWxvYWQuYXNzaWduZWRVc2VySWRzICYmIHBheWxvYWQuYXNzaWduZWRVc2VySWRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpZDogcGF5bG9hZC5hc3NpZ25lZFVzZXJJZHNbMF0sIC8vIFVzZSBmaXJzdCBhc3NpZ25lZCB1c2VyXG4gICAgICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgICAgICBmdWxsTmFtZTogJycsIC8vIFdpbGwgYmUgcG9wdWxhdGVkIGlmIHVzZXIgZGF0YSBpcyBsb2FkZWRcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaW5kZXg6IDIsXG4gICAgICBzdGF0dXM6IHtcbiAgICAgICAgaWQ6IEFYUFN5c3RlbVN0YXR1c2VzLlBlbmRpbmcubmFtZSxcbiAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZVN5bmMoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnRhc2tzLnN0YXRlcy5wZW5kaW5nJyksXG4gICAgICB9LFxuICAgICAgcHJpb3JpdHksXG4gICAgICByZXBvcnRlcjoge1xuICAgICAgICBpZDogaW5zdGFuY2UuYXVkaXRJbmZvPy5jcmVhdGVkPy5ieT8uaWQgfHwgJycsXG4gICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgZnVsbE5hbWU6IGluc3RhbmNlLmF1ZGl0SW5mbz8uY3JlYXRlZD8uYnk/LmZ1bGxOYW1lIHx8ICcnLFxuICAgICAgfSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgLy8gU3RvcmUgd29ya2Zsb3cgaW5zdGFuY2UgYW5kIGJvb2ttYXJrIG1ldGFkYXRhXG4gICAgICAgIGluc3RhbmNlSWQ6IGluc3RhbmNlLmlkLFxuICAgICAgICBib29rbWFya0lkOiBib29rbWFyay5pZCxcbiAgICAgICAgYWN0aXZpdHlJZDogYm9va21hcmsuYWN0aXZpdHlJZCxcbiAgICAgICAgYWN0aXZpdHlUeXBlOiBwYXlsb2FkLmFjdGl2aXR5VHlwZSxcbiAgICAgICAgYWN0aXZpdHlOYW1lOiBwYXlsb2FkLmFjdGl2aXR5TmFtZSxcbiAgICAgICAgdGFza1Rva2VuOiBwYXlsb2FkLnRhc2tUb2tlbixcbiAgICAgICAgZW50aXR5UmVmSWQ6IGluc3RhbmNlLmVudGl0eVJlZklkLFxuICAgICAgICBlbnRpdHlSZWZUeXBlOiBpbnN0YW5jZS5lbnRpdHlSZWZUeXBlLFxuICAgICAgICBkZWZpbml0aW9uSWQ6IGluc3RhbmNlLmRlZmluaXRpb25JZCxcbiAgICAgICAgLy8gU3RvcmUgZnVsbCBwYXlsb2FkIGZvciBhY3Rpb25zXG4gICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICB9IGFzIGFueSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBwcmlvcml0eSB0byB0YXNrIGJvYXJkIHByaW9yaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSBtYXBQcmlvcml0eVRvVGFza1ByaW9yaXR5KFxuICAgIHByaW9yaXR5OiAnTG93JyB8ICdOb3JtYWwnIHwgJ0hpZ2gnIHwgJ1VyZ2VudCdcbiAgKTogJ2hpZ2hlc3QnIHwgJ2hpZ2gnIHwgJ21lZGl1bScgfCAnbG93JyB8ICdsb3dlc3QnIHtcbiAgICBzd2l0Y2ggKHByaW9yaXR5KSB7XG4gICAgICBjYXNlICdVcmdlbnQnOlxuICAgICAgICByZXR1cm4gJ2hpZ2hlc3QnO1xuICAgICAgY2FzZSAnSGlnaCc6XG4gICAgICAgIHJldHVybiAnaGlnaCc7XG4gICAgICBjYXNlICdOb3JtYWwnOlxuICAgICAgICByZXR1cm4gJ21lZGl1bSc7XG4gICAgICBjYXNlICdMb3cnOlxuICAgICAgICByZXR1cm4gJ2xvdyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ21lZGl1bSc7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBUYXNrIFVwZGF0ZXMgICAtLS0tXG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0YXNrcyAobm90IGFwcGxpY2FibGUgZm9yIHdvcmtmbG93IGluc3RhbmNlcyAtIHRoZXkgYXJlIHJlYWQtb25seSBmcm9tIHRhc2sgcHJvdmlkZXIgcGVyc3BlY3RpdmUpLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlVGFza3MoXG4gICAgdGFza3NUb1VwZGF0ZTogQVhQVGFzazxSZWNvcmQ8c3RyaW5nLCBhbnk+PltdLFxuICApOiBQcm9taXNlPEFYUFRhc2s8UmVjb3JkPHN0cmluZywgYW55Pj5bXT4ge1xuICAgIC8vIFdvcmtmbG93IGluc3RhbmNlcyBhcmUgbWFuYWdlZCBieSB3b3JrZmxvdyBlbmdpbmVcbiAgICAvLyBUYXNrIHVwZGF0ZXMgc2hvdWxkIGJlIGRvbmUgdGhyb3VnaCB3b3JrZmxvdyByZXN1bWUsIG5vdCBkaXJlY3QgdXBkYXRlc1xuICAgIGNvbnNvbGUud2FybihgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g4pqg77iPIHVwZGF0ZVRhc2tzIGNhbGxlZCAtIHdvcmtmbG93IHRhc2tzIGFyZSByZWFkLW9ubHkgZnJvbSBwcm92aWRlcmApO1xuICAgIHJldHVybiB0YXNrc1RvVXBkYXRlO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21tYW5kIEV4ZWN1dGlvbiAgIC0tLS1cblxuICAvKipcbiAgICogRXhlY3V0ZSBjb21tYW5kcyBvbiB0YXNrcy5cbiAgICogXG4gICAqIFN1cHBvcnRzOlxuICAgKiAtIFdvcmtmbG93IHJlc3VtZSBjb21tYW5kcyAoQ29tcGxldGUsIENhbmNlbClcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQ6IEFYUEV4ZWN1dGVDb21tYW5kKTogUHJvbWlzZTxBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdD4ge1xuICAgIGlmICghY29tbWFuZD8ubmFtZSkgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuXG4gICAgY29uc3QgdGFza0RhdGEgPSBjb21tYW5kLm9wdGlvbnM/LlsnZGF0YSddIGFzIGFueTtcbiAgICBjb25zdCBpbnN0YW5jZUlkID0gdGFza0RhdGE/Lmluc3RhbmNlSWQgPz8gY29tbWFuZC5vcHRpb25zPy5bJ2luc3RhbmNlSWQnXSA/PyAnJztcbiAgICBjb25zdCBib29rbWFya0lkID0gdGFza0RhdGE/LmJvb2ttYXJrSWQgPz8gY29tbWFuZC5vcHRpb25zPy5bJ2Jvb2ttYXJrSWQnXSA/PyAnJztcbiAgICBjb25zdCB0YXNrVG9rZW4gPSB0YXNrRGF0YT8udGFza1Rva2VuID8/IGNvbW1hbmQub3B0aW9ucz8uWyd0YXNrVG9rZW4nXSA/PyAnJztcbiAgICBjb25zdCBhY3Rpdml0eUlkID0gdGFza0RhdGE/LmFjdGl2aXR5SWQgPz8gY29tbWFuZC5vcHRpb25zPy5bJ2FjdGl2aXR5SWQnXSA/PyAnJztcbiAgICBjb25zdCBvdXRjb21lID0gY29tbWFuZC5vcHRpb25zPy5bJ291dGNvbWUnXSA/PyAnRG9uZSc7XG4gICAgY29uc3QgdXNlcklucHV0ID0gY29tbWFuZC5vcHRpb25zPy5bJ3VzZXJJbnB1dCddID8/IHt9O1xuXG4gICAgLy8gSGFuZGxlIHdvcmtmbG93IHJlc3VtZSBjb21tYW5kc1xuICAgIGlmIChjb21tYW5kLm5hbWUgPT09ICdXb3JrZmxvd01hbmFnZW1lbnQuV29ya2Zsb3dJbnN0YW5jZTpSZXN1bWUnIHx8IGNvbW1hbmQubmFtZSA9PT0gJ3Jlc3VtZS13b3JrZmxvdycpIHtcbiAgICAgIGlmICghaW5zdGFuY2VJZCB8fCAhdGFza1Rva2VuIHx8ICFhY3Rpdml0eUlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgdGV4dDogJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyczogaW5zdGFuY2VJZCwgdGFza1Rva2VuLCBhY3Rpdml0eUlkJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLndvcmtmbG93TWFuYWdlci5yZXN1bWUoXG4gICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICBhY3Rpdml0eUlkLFxuICAgICAgICAgIG91dGNvbWUsXG4gICAgICAgICAgdXNlcklucHV0LFxuICAgICAgICAgIHRhc2tUb2tlblxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogcmVzdWx0LnN1Y2Nlc3MsXG4gICAgICAgICAgbWVzc2FnZTogcmVzdWx0LmVycm9yXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXN1bHQuZXJyb3IsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDinYwgRXJyb3IgcmVzdW1pbmcgd29ya2Zsb3c6YCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgIHRleHQ6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byByZXN1bWUgd29ya2Zsb3cnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBBY3Rpb25zICYgU3RhdHVzZXMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEdldCBhdmFpbGFibGUgYWN0aW9ucyBmb3IgYSB0YXNrLlxuICAgKiBcbiAgICogRXh0cmFjdHMgYWN0aW9ucyBmcm9tIGJvb2ttYXJrIHBheWxvYWQuXG4gICAqL1xuICBhc3luYyBnZXRBY3Rpb25zKHRhc2s/OiBBWFBUYXNrPFJlY29yZDxzdHJpbmcsIGFueT4+KTogUHJvbWlzZTxBWFBUYXNrQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIGNvbnN0IGFjdGlvbnM6IEFYUFRhc2tBY3Rpb25NZW51SXRlbVtdID0gW107XG5cbiAgICBpZiAoIXRhc2spIHJldHVybiBhY3Rpb25zO1xuXG4gICAgY29uc3QgdGFza0RhdGEgPSB0YXNrLmRhdGEgYXMgYW55O1xuICAgIGNvbnN0IHBheWxvYWQgPSB0YXNrRGF0YT8ucGF5bG9hZCBhcyBIdW1hblRhc2tCb29rbWFya1BheWxvYWQgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXBheWxvYWQpIHJldHVybiBhY3Rpb25zO1xuXG4gICAgLy8gRXh0cmFjdCBhY3Rpb25zIGZyb20gcGF5bG9hZFxuICAgIGlmIChwYXlsb2FkLmFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFsbEFjdGlvbnMgPSBbXG4gICAgICAgIC4uLihwYXlsb2FkLmFjdGlvbnMucHJlZml4IHx8IFtdKSxcbiAgICAgICAgLi4uKHBheWxvYWQuYWN0aW9ucy5zdWZmaXggfHwgW10pLFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgYWxsQWN0aW9ucykge1xuICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uLmNvbW1hbmQ/Lm5hbWUgfHwgYWN0aW9uLm5hbWUgfHwgJ3Vua25vd24nO1xuICAgICAgICBcbiAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb25OYW1lLFxuICAgICAgICAgIHRpdGxlOiBhY3Rpb24udGl0bGUgfHwgYWN0aW9uTmFtZSxcbiAgICAgICAgICBpY29uOiBhY3Rpb24uaWNvbixcbiAgICAgICAgICBjb2xvcjogYWN0aW9uLmNvbG9yLFxuICAgICAgICAgIHByaW9yaXR5OiAncHJpbWFyeScsXG4gICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgbmFtZTogJ1dvcmtmbG93TWFuYWdlbWVudC5Xb3JrZmxvd0luc3RhbmNlOlJlc3VtZScsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIGluc3RhbmNlSWQ6IHRhc2tEYXRhLmluc3RhbmNlSWQsXG4gICAgICAgICAgICAgIGJvb2ttYXJrSWQ6IHRhc2tEYXRhLmJvb2ttYXJrSWQsXG4gICAgICAgICAgICAgIGFjdGl2aXR5SWQ6IHRhc2tEYXRhLmFjdGl2aXR5SWQsXG4gICAgICAgICAgICAgIHRhc2tUb2tlbjogdGFza0RhdGEudGFza1Rva2VuLFxuICAgICAgICAgICAgICBvdXRjb21lOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICB1c2VySW5wdXQ6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdCBhY3Rpb25zIGlmIG5vbmUgcHJvdmlkZWRcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdzdWJtaXQnLFxuICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlU3luYygnQGdlbmVyYWw6YWN0aW9ucy5zdWJtaXQudGl0bGUnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNoZWNrJyxcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgcHJpb3JpdHk6ICdwcmltYXJ5JyxcbiAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgIG5hbWU6ICdXb3JrZmxvd01hbmFnZW1lbnQuV29ya2Zsb3dJbnN0YW5jZTpSZXN1bWUnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGluc3RhbmNlSWQ6IHRhc2tEYXRhLmluc3RhbmNlSWQsXG4gICAgICAgICAgICBib29rbWFya0lkOiB0YXNrRGF0YS5ib29rbWFya0lkLFxuICAgICAgICAgICAgYWN0aXZpdHlJZDogdGFza0RhdGEuYWN0aXZpdHlJZCxcbiAgICAgICAgICAgIHRhc2tUb2tlbjogdGFza0RhdGEudGFza1Rva2VuLFxuICAgICAgICAgICAgb3V0Y29tZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICB1c2VySW5wdXQ6IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVTeW5jKCdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScpLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtdGltZXMnLFxuICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgICBwcmlvcml0eTogJ3NlY29uZGFyeScsXG4gICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICBuYW1lOiAnV29ya2Zsb3dNYW5hZ2VtZW50LldvcmtmbG93SW5zdGFuY2U6UmVzdW1lJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBpbnN0YW5jZUlkOiB0YXNrRGF0YS5pbnN0YW5jZUlkLFxuICAgICAgICAgICAgYm9va21hcmtJZDogdGFza0RhdGEuYm9va21hcmtJZCxcbiAgICAgICAgICAgIGFjdGl2aXR5SWQ6IHRhc2tEYXRhLmFjdGl2aXR5SWQsXG4gICAgICAgICAgICB0YXNrVG9rZW46IHRhc2tEYXRhLnRhc2tUb2tlbixcbiAgICAgICAgICAgIG91dGNvbWU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgdXNlcklucHV0OiB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ2FjdGlvbnMnLCBhY3Rpb25zKTtcbiAgICBcbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIGFzeW5jIGdldEV4dHJhRmllbGRzKCk6IFByb21pc2U8QVhQRXh0cmFGaWVsZFtdPiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzZXMoKTogUHJvbWlzZTxBWFBUYXNrU3RhdHVzW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpbmRleDogMCxcbiAgICAgICAga2V5OiBBWFBTeXN0ZW1TdGF0dXNlcy5QZW5kaW5nLm5hbWUsXG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGFza3Muc3RhdGVzLnBlbmRpbmcnKSxcbiAgICAgICAgY29sb3I6ICd3YXJuaW5nJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tcG9uZW50ICAgLS0tLVxuXG4gIG92ZXJyaWRlIGdldENvbXBvbmVudCgpOiAoKCkgPT4gUHJvbWlzZTxUeXBlPEFYUFRhc2tQb3BvdmVyQ29tcG9uZW50Pj4pIHwgVHlwZTxBWFBUYXNrUG9wb3ZlckNvbXBvbmVudD4gfCBudWxsIHtcbiAgICByZXR1cm4gKCkgPT5cbiAgICAgIGltcG9ydCgnLi93b3JrZmxvdy10YXNrLXBvcG92ZXIuY29tcG9uZW50JykudGhlbigobSkgPT4gbS5BWE1Xb3JrZmxvd1Rhc2tQb3BvdmVyQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19","import { AXP_WORKFLOW_TASK_PROVIDER } from '@acorex/modules/task-management';\nimport { AXPWorkflowDefinitionService } from '@acorex/platform/workflow';\nimport { Injector, makeEnvironmentProviders, runInInjectionContext, } from '@angular/core';\nimport { AXPGenericWorkflowTaskProvider } from '../task-provider/generic-workflow-task.provider';\nexport function provideTaskWorkflow() {\n return makeEnvironmentProviders([\n {\n provide: AXP_WORKFLOW_TASK_PROVIDER,\n multi: true,\n useFactory: (injector) => {\n return (async () => {\n const workflowDefinitionService = injector.get(AXPWorkflowDefinitionService);\n const categories = await workflowDefinitionService.getCategories();\n const providers = [];\n for (const category of categories) {\n const workflows = await workflowDefinitionService.getWorkflowsByCategoryId(category.id);\n for (const workflow of workflows) {\n const provider = runInInjectionContext(injector, () => new AXPGenericWorkflowTaskProvider({\n name: workflow.name,\n title: workflow.title ?? workflow.name,\n icon: 'fa-light fa-diagram-project',\n definitionId: workflow.name,\n }));\n providers.push(provider);\n }\n }\n console.log('providers', providers);\n return providers;\n })();\n },\n deps: [Injector],\n },\n ]);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIudGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL3Byb3ZpZGVyLnRhc2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUVILFFBQVEsRUFDUix3QkFBd0IsRUFDeEIscUJBQXFCLEdBQ3hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRWpHLE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QjtZQUNFLE9BQU8sRUFBRSwwQkFBMEI7WUFDbkMsS0FBSyxFQUFFLElBQUk7WUFDWCxVQUFVLEVBQUUsQ0FBQyxRQUFrQixFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDakIsTUFBTSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7b0JBQzdFLE1BQU0sVUFBVSxHQUFHLE1BQU0seUJBQXlCLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ25FLE1BQU0sU0FBUyxHQUFxQyxFQUFFLENBQUM7b0JBQ3ZELEtBQUssTUFBTSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2xDLE1BQU0sU0FBUyxHQUFHLE1BQU0seUJBQXlCLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN4RixLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDOzRCQUNqQyxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQ3BELElBQUksOEJBQThCLENBQUM7Z0NBQ2pDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtnQ0FDbkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLElBQUk7Z0NBQ3RDLElBQUksRUFBRSw2QkFBNkI7Z0NBQ25DLFlBQVksRUFBRSxRQUFRLENBQUMsSUFBSTs2QkFDNUIsQ0FBQyxDQUNILENBQUM7NEJBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDM0IsQ0FBQztvQkFDSCxDQUFDO29CQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUVwQyxPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7U0FDakI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQX1dPUktGTE9XX1RBU0tfUFJPVklERVIgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvdGFzay1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7XG4gICAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gICAgSW5qZWN0b3IsXG4gICAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXIgfSBmcm9tICcuLi90YXNrLXByb3ZpZGVyL2dlbmVyaWMtd29ya2Zsb3ctdGFzay5wcm92aWRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGFza1dvcmtmbG93KCk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX1dPUktGTE9XX1RBU0tfUFJPVklERVIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUZhY3Rvcnk6IChpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcbiAgICAgICAgcmV0dXJuIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dEZWZpbml0aW9uU2VydmljZSA9IGluamVjdG9yLmdldChBWFBXb3JrZmxvd0RlZmluaXRpb25TZXJ2aWNlKTtcbiAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgd29ya2Zsb3dEZWZpbml0aW9uU2VydmljZS5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJzOiBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJbXSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dzID0gYXdhaXQgd29ya2Zsb3dEZWZpbml0aW9uU2VydmljZS5nZXRXb3JrZmxvd3NCeUNhdGVnb3J5SWQoY2F0ZWdvcnkuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB3b3JrZmxvdyBvZiB3b3JrZmxvd3MpIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+XG4gICAgICAgICAgICAgICAgbmV3IEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcih7XG4gICAgICAgICAgICAgICAgICBuYW1lOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHdvcmtmbG93LnRpdGxlID8/IHdvcmtmbG93Lm5hbWUsXG4gICAgICAgICAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtZGlhZ3JhbS1wcm9qZWN0JyxcbiAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZDogd29ya2Zsb3cubmFtZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBwcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdwcm92aWRlcnMnLCBwcm92aWRlcnMpO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiBwcm92aWRlcnM7XG4gICAgICAgIH0pKCk7XG4gICAgICB9LFxuICAgICAgZGVwczogW0luamVjdG9yXSxcbiAgICB9LFxuICBdKTtcbn1cbiJdfQ==","import { AXMCalendarManagementModule } from '@acorex/modules/calendar-management';\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';\nimport { AXPDomainModule } from '@acorex/platform/domain';\nimport { AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, } from '@acorex/platform/layout/entity';\nimport { provideCommandSetups } from '@acorex/platform/runtime';\nimport { AXP_ACTIVITY_CATEGORY_PROVIDER, AXP_ACTIVITY_PROVIDER, AXP_WORKFLOW_CATEGORY_PROVIDER, AXP_WORKFLOW_PROVIDER, } from '@acorex/platform/workflow';\nimport { inject, NgModule } from '@angular/core';\nimport { ROUTES } from '@angular/router';\nimport { AXMWorkflowManagementModuleEntityProvider } from './entity.provider';\nimport { CollectSignatureActivity, ExecuteCommandActivity, ExecuteQueryActivity, HumanTaskActivity, ShowConfirmPopupActivity, ShowLayoutPopupActivity, ShowToastActivity, } from './features/engine/activities';\nimport { AXMWorkflowPluginModule } from './features/workflow-plugin/workflow-plugin.module';\nimport { AXMWorkflowActivitiesDefinitionProvider } from './features/engine/activities/workflow-activities-definition.provider';\nimport { AXCCategoryProvider } from './features/engine/category.provider';\nimport { AXMWorkflowCategoryProvider } from './features/engine/workflows/workflow-category.provider';\nimport { AXMWorkflowDefinitionProvider } from './features/engine/workflows/workflow-definition.provider';\nimport { WorkflowManagementManifest } from './manifest';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { provideTaskWorkflow } from './features/engine/provider.task';\nimport * as i0 from \"@angular/core\";\nfunction routesFactory() {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n const routes = [\n {\n path: ':app/workflow-management/studio',\n loadComponent: () => {\n return config.viewers.root();\n },\n canActivate: [AXPAuthGuard],\n data: { reuse: true },\n children: [\n {\n path: '',\n loadComponent: () => import('./features/engine/studio/workflow-studio.component').then((c) => c.WorkflowStudioComponent),\n },\n ],\n },\n ];\n return routes;\n}\nexport class AXMWorkflowManagementModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModule, imports: [AXMCalendarManagementModule,\n AXPDomainModule,\n AXMWorkflowPluginModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModule, providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n provideCommandSetups([\n {\n key: 'WorkflowManagement.WorkflowDefinition:Execute',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.ExecuteWorkflowCommand),\n },\n {\n key: 'WorkflowManagement.WorkflowDefinition:EditInStudio',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.EditInStudioCommand),\n },\n {\n key: 'workflow-activity:show-toast',\n command: () => import('./features/engine/activities').then((c) => c.ShowToastActivity),\n },\n {\n key: 'workflow-activity:create-entity',\n command: () => import('./features/engine/activities').then((c) => c.AXPCreateEntityActivity),\n },\n {\n key: 'workflow-activity:execute-query',\n command: () => import('./features/engine/activities').then((c) => c.ExecuteQueryActivity),\n },\n {\n key: 'workflow-activity:execute-command',\n command: () => import('./features/engine/activities').then((c) => c.ExecuteCommandActivity),\n },\n {\n key: 'workflow-activity:show-confirm-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowConfirmPopupActivity),\n },\n {\n key: 'workflow-activity:show-layout-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowLayoutPopupActivity),\n },\n {\n key: 'workflow-activity:human-task',\n command: () => import('./features/engine/activities').then((c) => c.HumanTaskActivity),\n },\n {\n key: 'workflow-activity:collect-signature',\n command: () => import('./features/engine/activities').then((c) => c.CollectSignatureActivity),\n },\n ]),\n // provideEntity([RootConfig.entities.activityDefinition.fullName]),\n // Entity Definition Loader\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMWorkflowManagementModuleEntityProvider,\n multi: true,\n },\n // Menu Provider\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n // Permission Definition Provider\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: WorkflowManagementManifest,\n multi: true,\n },\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_CATEGORY_PROVIDER,\n useClass: AXCCategoryProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_PROVIDER,\n useClass: AXMWorkflowActivitiesDefinitionProvider,\n multi: true,\n },\n // Workflow Category Provider\n {\n provide: AXP_WORKFLOW_CATEGORY_PROVIDER,\n useClass: AXMWorkflowCategoryProvider,\n multi: true,\n },\n // Workflow Definition Metadata Provider\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n // Provide activity classes for dependency injection (only frontend activities)\n ExecuteQueryActivity,\n ExecuteCommandActivity,\n ShowConfirmPopupActivity,\n ShowLayoutPopupActivity,\n HumanTaskActivity,\n ShowToastActivity,\n CollectSignatureActivity,\n // Generic Workflow Task Provider (all workflows – no definitionId filter).\n // For one provider per definition, register in your module with definitionId, e.g.:\n // { provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG, useValue: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' } },\n // { provide: AXP_WORKFLOW_TASK_PROVIDER, multi: true, useFactory: (c) => new AXPGenericWorkflowTaskProvider(c), deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG] }\n // Leave Request workflow: task board shows suspended human-tasks.\n // definitionId must match instance.definitionId: mock engine uses workflow name ('createLeaveRequest'); real API may use definition entity id.\n // {\n // provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG,\n // useValue: {\n // name: 'leave-request',\n // title: 'Leave Request Tasks',\n // icon: 'fa-light fa-diagram-project',\n // definitionId: 'createLeaveRequest',\n // } as AXPGenericWorkflowTaskProviderConfig,\n // },\n // {\n // provide: AXP_WORKFLOW_TASK_PROVIDER,\n // multi: true,\n // useFactory: (config: AXPGenericWorkflowTaskProviderConfig) =>\n // new AXPGenericWorkflowTaskProvider(config),\n // deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG],\n // },\n provideTaskWorkflow()\n ], imports: [AXMCalendarManagementModule,\n AXPDomainModule,\n AXMWorkflowPluginModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n AXMCalendarManagementModule,\n AXPDomainModule,\n AXMWorkflowPluginModule, // Register workflow plugin\n ],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n provideCommandSetups([\n {\n key: 'WorkflowManagement.WorkflowDefinition:Execute',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.ExecuteWorkflowCommand),\n },\n {\n key: 'WorkflowManagement.WorkflowDefinition:EditInStudio',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.EditInStudioCommand),\n },\n {\n key: 'workflow-activity:show-toast',\n command: () => import('./features/engine/activities').then((c) => c.ShowToastActivity),\n },\n {\n key: 'workflow-activity:create-entity',\n command: () => import('./features/engine/activities').then((c) => c.AXPCreateEntityActivity),\n },\n {\n key: 'workflow-activity:execute-query',\n command: () => import('./features/engine/activities').then((c) => c.ExecuteQueryActivity),\n },\n {\n key: 'workflow-activity:execute-command',\n command: () => import('./features/engine/activities').then((c) => c.ExecuteCommandActivity),\n },\n {\n key: 'workflow-activity:show-confirm-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowConfirmPopupActivity),\n },\n {\n key: 'workflow-activity:show-layout-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowLayoutPopupActivity),\n },\n {\n key: 'workflow-activity:human-task',\n command: () => import('./features/engine/activities').then((c) => c.HumanTaskActivity),\n },\n {\n key: 'workflow-activity:collect-signature',\n command: () => import('./features/engine/activities').then((c) => c.CollectSignatureActivity),\n },\n ]),\n // provideEntity([RootConfig.entities.activityDefinition.fullName]),\n // Entity Definition Loader\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMWorkflowManagementModuleEntityProvider,\n multi: true,\n },\n // Menu Provider\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n // Permission Definition Provider\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: WorkflowManagementManifest,\n multi: true,\n },\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_CATEGORY_PROVIDER,\n useClass: AXCCategoryProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_PROVIDER,\n useClass: AXMWorkflowActivitiesDefinitionProvider,\n multi: true,\n },\n // Workflow Category Provider\n {\n provide: AXP_WORKFLOW_CATEGORY_PROVIDER,\n useClass: AXMWorkflowCategoryProvider,\n multi: true,\n },\n // Workflow Definition Metadata Provider\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n // Provide activity classes for dependency injection (only frontend activities)\n ExecuteQueryActivity,\n ExecuteCommandActivity,\n ShowConfirmPopupActivity,\n ShowLayoutPopupActivity,\n HumanTaskActivity,\n ShowToastActivity,\n CollectSignatureActivity,\n // Generic Workflow Task Provider (all workflows – no definitionId filter).\n // For one provider per definition, register in your module with definitionId, e.g.:\n // { provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG, useValue: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' } },\n // { provide: AXP_WORKFLOW_TASK_PROVIDER, multi: true, useFactory: (c) => new AXPGenericWorkflowTaskProvider(c), deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG] }\n // Leave Request workflow: task board shows suspended human-tasks.\n // definitionId must match instance.definitionId: mock engine uses workflow name ('createLeaveRequest'); real API may use definition entity id.\n // {\n // provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG,\n // useValue: {\n // name: 'leave-request',\n // title: 'Leave Request Tasks',\n // icon: 'fa-light fa-diagram-project',\n // definitionId: 'createLeaveRequest',\n // } as AXPGenericWorkflowTaskProviderConfig,\n // },\n // {\n // provide: AXP_WORKFLOW_TASK_PROVIDER,\n // multi: true,\n // useFactory: (config: AXPGenericWorkflowTaskProviderConfig) =>\n // new AXPGenericWorkflowTaskProvider(config),\n // deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG],\n // },\n provideTaskWorkflow()\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlbWVudC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL3dvcmtmbG93LW1hbmFnZW1lbnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qiw0QkFBNEIsR0FDN0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLHFCQUFxQixFQUNyQiw4QkFBOEIsRUFDOUIscUJBQXFCLEdBQ3RCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSw4QkFBOEIsQ0FBQztBQU10QyxPQUFPLEVBQUUsdUJBQXVC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LElBQUk7eUJBQ1o7d0JBQ0Qsd0NBQXdDO3dCQUN4Qzs0QkFDRSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixRQUFRLEVBQUUsNkJBQTZCOzRCQUN2QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRCwrRUFBK0U7d0JBQy9FLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0Qix3QkFBd0I7d0JBQ3hCLHVCQUF1Qjt3QkFDdkIsaUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLHdCQUF3Qjt3QkFDeEIsMkVBQTJFO3dCQUMzRSxvRkFBb0Y7d0JBQ3BGLDRLQUE0Szt3QkFDNUssb0tBQW9LO3dCQUNwSyxrRUFBa0U7d0JBQ2xFLCtJQUErSTt3QkFDL0ksSUFBSTt3QkFDSix3REFBd0Q7d0JBQ3hELGdCQUFnQjt3QkFDaEIsNkJBQTZCO3dCQUM3QixvQ0FBb0M7d0JBQ3BDLDJDQUEyQzt3QkFDM0MsMENBQTBDO3dCQUMxQywrQ0FBK0M7d0JBQy9DLEtBQUs7d0JBQ0wsSUFBSTt3QkFDSix5Q0FBeUM7d0JBQ3pDLGlCQUFpQjt3QkFDakIsa0VBQWtFO3dCQUNsRSxrREFBa0Q7d0JBQ2xELHVEQUF1RDt3QkFDdkQsS0FBSzt3QkFDTCxtQkFBbUIsRUFBRTtxQkFDdEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWE1DYWxlbmRhck1hbmFnZW1lbnRNb2R1bGUgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvY2FsZW5kYXItbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWFBfV09SS0ZMT1dfVEFTS19QUk9WSURFUiB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy90YXNrLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQQXV0aEd1YXJkLCBBWFBfUEVSTUlTU0lPTl9ERUZJTklUSU9OX1BST1ZJREVSIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUF9NRU5VX1BST1ZJREVSIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQX01PRFVMRV9NQU5JRkVTVF9QUk9WSURFUiB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBEb21haW5Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2RvbWFpbic7XG5pbXBvcnQge1xuICBBWFBfRU5USVRZX0NPTkZJR19UT0tFTixcbiAgQVhQX0VOVElUWV9ERUZJTklUSU9OX0xPQURFUixcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IHByb3ZpZGVDb21tYW5kU2V0dXBzIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7XG4gIEFYUF9BQ1RJVklUWV9DQVRFR09SWV9QUk9WSURFUixcbiAgQVhQX0FDVElWSVRZX1BST1ZJREVSLFxuICBBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsXG4gIEFYUF9XT1JLRkxPV19QUk9WSURFUixcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5pbXBvcnQgeyBpbmplY3QsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXMsIFJPVVRFUyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBWE1Xb3JrZmxvd01hbmFnZW1lbnRNb2R1bGVFbnRpdHlQcm92aWRlciB9IGZyb20gJy4vZW50aXR5LnByb3ZpZGVyJztcbmltcG9ydCB7XG4gIENvbGxlY3RTaWduYXR1cmVBY3Rpdml0eSxcbiAgRXhlY3V0ZUNvbW1hbmRBY3Rpdml0eSxcbiAgRXhlY3V0ZVF1ZXJ5QWN0aXZpdHksXG4gIEh1bWFuVGFza0FjdGl2aXR5LFxuICBTaG93Q29uZmlybVBvcHVwQWN0aXZpdHksXG4gIFNob3dMYXlvdXRQb3B1cEFjdGl2aXR5LFxuICBTaG93VG9hc3RBY3Rpdml0eSxcbn0gZnJvbSAnLi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcyc7XG5pbXBvcnQge1xuICBBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJRyxcbiAgQVhQR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyLFxuICBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJDb25maWcsXG59IGZyb20gJy4vZmVhdHVyZXMvdGFzay1wcm92aWRlci9nZW5lcmljLXdvcmtmbG93LXRhc2sucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhNV29ya2Zsb3dQbHVnaW5Nb2R1bGUgfSBmcm9tICcuL2ZlYXR1cmVzL3dvcmtmbG93LXBsdWdpbi93b3JrZmxvdy1wbHVnaW4ubW9kdWxlJztcblxuaW1wb3J0IHsgQVhNV29ya2Zsb3dBY3Rpdml0aWVzRGVmaW5pdGlvblByb3ZpZGVyIH0gZnJvbSAnLi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy93b3JrZmxvdy1hY3Rpdml0aWVzLWRlZmluaXRpb24ucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhDQ2F0ZWdvcnlQcm92aWRlciB9IGZyb20gJy4vZmVhdHVyZXMvZW5naW5lL2NhdGVnb3J5LnByb3ZpZGVyJztcbmltcG9ydCB7IEFYTVdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciB9IGZyb20gJy4vZmVhdHVyZXMvZW5naW5lL3dvcmtmbG93cy93b3JrZmxvdy1jYXRlZ29yeS5wcm92aWRlcic7XG5pbXBvcnQgeyBBWE1Xb3JrZmxvd0RlZmluaXRpb25Qcm92aWRlciB9IGZyb20gJy4vZmVhdHVyZXMvZW5naW5lL3dvcmtmbG93cy93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcbmltcG9ydCB7IFdvcmtmbG93TWFuYWdlbWVudE1hbmlmZXN0IH0gZnJvbSAnLi9tYW5pZmVzdCc7XG5pbXBvcnQgeyBBWE1NZW51UHJvdmlkZXIgfSBmcm9tICcuL21lbnUucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhNUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlciB9IGZyb20gJy4vcGVybWlzc2lvbi1kZWZpbml0aW9uLnByb3ZpZGVyJztcbmltcG9ydCB7IHByb3ZpZGVUYXNrV29ya2Zsb3cgfSBmcm9tICcuL2ZlYXR1cmVzL2VuZ2luZS9wcm92aWRlci50YXNrJztcbmZ1bmN0aW9uIHJvdXRlc0ZhY3RvcnkoKSB7XG4gIGNvbnN0IGNvbmZpZyA9IGluamVjdChBWFBfRU5USVRZX0NPTkZJR19UT0tFTik7XG4gIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgIHtcbiAgICAgIHBhdGg6ICc6YXBwL3dvcmtmbG93LW1hbmFnZW1lbnQvc3R1ZGlvJyxcbiAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy52aWV3ZXJzLnJvb3QoKTtcbiAgICAgIH0sXG4gICAgICBjYW5BY3RpdmF0ZTogW0FYUEF1dGhHdWFyZF0sXG4gICAgICBkYXRhOiB7IHJldXNlOiB0cnVlIH0sXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgbG9hZENvbXBvbmVudDogKCkgPT5cbiAgICAgICAgICAgIGltcG9ydCgnLi9mZWF0dXJlcy9lbmdpbmUvc3R1ZGlvL3dvcmtmbG93LXN0dWRpby5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLldvcmtmbG93U3R1ZGlvQ29tcG9uZW50KSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcbiAgcmV0dXJuIHJvdXRlcztcbn1cblxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQVhNQ2FsZW5kYXJNYW5hZ2VtZW50TW9kdWxlLFxuICAgIEFYUERvbWFpbk1vZHVsZSxcbiAgICBBWE1Xb3JrZmxvd1BsdWdpbk1vZHVsZSwgLy8gUmVnaXN0ZXIgd29ya2Zsb3cgcGx1Z2luXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJPVVRFUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRmFjdG9yeTogcm91dGVzRmFjdG9yeSxcbiAgICB9LFxuICAgIHByb3ZpZGVDb21tYW5kU2V0dXBzKFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAnV29ya2Zsb3dNYW5hZ2VtZW50LldvcmtmbG93RGVmaW5pdGlvbjpFeGVjdXRlJyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2VudGl0aWVzL3dvcmtmbG93LWRlZmluaXRpb24vY29tbWFuZHMnKS50aGVuKChjKSA9PiBjLkV4ZWN1dGVXb3JrZmxvd0NvbW1hbmQpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnV29ya2Zsb3dNYW5hZ2VtZW50LldvcmtmbG93RGVmaW5pdGlvbjpFZGl0SW5TdHVkaW8nLFxuICAgICAgICBjb21tYW5kOiAoKSA9PiBpbXBvcnQoJy4vZW50aXRpZXMvd29ya2Zsb3ctZGVmaW5pdGlvbi9jb21tYW5kcycpLnRoZW4oKGMpID0+IGMuRWRpdEluU3R1ZGlvQ29tbWFuZCksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd3b3JrZmxvdy1hY3Rpdml0eTpzaG93LXRvYXN0JyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5TaG93VG9hc3RBY3Rpdml0eSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd3b3JrZmxvdy1hY3Rpdml0eTpjcmVhdGUtZW50aXR5JyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5BWFBDcmVhdGVFbnRpdHlBY3Rpdml0eSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd3b3JrZmxvdy1hY3Rpdml0eTpleGVjdXRlLXF1ZXJ5JyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5FeGVjdXRlUXVlcnlBY3Rpdml0eSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd3b3JrZmxvdy1hY3Rpdml0eTpleGVjdXRlLWNvbW1hbmQnLFxuICAgICAgICBjb21tYW5kOiAoKSA9PiBpbXBvcnQoJy4vZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMnKS50aGVuKChjKSA9PiBjLkV4ZWN1dGVDb21tYW5kQWN0aXZpdHkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy1jb25maXJtLXBvcHVwJyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5TaG93Q29uZmlybVBvcHVwQWN0aXZpdHkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy1sYXlvdXQtcG9wdXAnLFxuICAgICAgICBjb21tYW5kOiAoKSA9PiBpbXBvcnQoJy4vZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMnKS50aGVuKChjKSA9PiBjLlNob3dMYXlvdXRQb3B1cEFjdGl2aXR5KSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3dvcmtmbG93LWFjdGl2aXR5Omh1bWFuLXRhc2snLFxuICAgICAgICBjb21tYW5kOiAoKSA9PiBpbXBvcnQoJy4vZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMnKS50aGVuKChjKSA9PiBjLkh1bWFuVGFza0FjdGl2aXR5KSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3dvcmtmbG93LWFjdGl2aXR5OmNvbGxlY3Qtc2lnbmF0dXJlJyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5Db2xsZWN0U2lnbmF0dXJlQWN0aXZpdHkpLFxuICAgICAgfSxcbiAgICBdKSxcbiAgICAvLyBwcm92aWRlRW50aXR5KFtSb290Q29uZmlnLmVudGl0aWVzLmFjdGl2aXR5RGVmaW5pdGlvbi5mdWxsTmFtZV0pLFxuICAgIC8vIEVudGl0eSBEZWZpbml0aW9uIExvYWRlclxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9FTlRJVFlfREVGSU5JVElPTl9MT0FERVIsXG4gICAgICB1c2VDbGFzczogQVhNV29ya2Zsb3dNYW5hZ2VtZW50TW9kdWxlRW50aXR5UHJvdmlkZXIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIC8vIE1lbnUgUHJvdmlkZXJcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBfTUVOVV9QUk9WSURFUixcbiAgICAgIHVzZUNsYXNzOiBBWE1NZW51UHJvdmlkZXIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIC8vIFBlcm1pc3Npb24gRGVmaW5pdGlvbiBQcm92aWRlclxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9QRVJNSVNTSU9OX0RFRklOSVRJT05fUFJPVklERVIsXG4gICAgICB1c2VDbGFzczogQVhNUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgLy8gTW9kdWxlIE1hbmlmZXN0IFByb3ZpZGVyXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX01PRFVMRV9NQU5JRkVTVF9QUk9WSURFUixcbiAgICAgIHVzZVZhbHVlOiBXb3JrZmxvd01hbmFnZW1lbnRNYW5pZmVzdCxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX1dPUktGTE9XX1BST1ZJREVSLFxuICAgICAgdXNlQ2xhc3M6IEFYTVdvcmtmbG93RGVmaW5pdGlvblByb3ZpZGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBfQUNUSVZJVFlfQ0FURUdPUllfUFJPVklERVIsXG4gICAgICB1c2VDbGFzczogQVhDQ2F0ZWdvcnlQcm92aWRlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX0FDVElWSVRZX1BST1ZJREVSLFxuICAgICAgdXNlQ2xhc3M6IEFYTVdvcmtmbG93QWN0aXZpdGllc0RlZmluaXRpb25Qcm92aWRlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgLy8gV29ya2Zsb3cgQ2F0ZWdvcnkgUHJvdmlkZXJcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsXG4gICAgICB1c2VDbGFzczogQVhNV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICAvLyBXb3JrZmxvdyBEZWZpbml0aW9uIE1ldGFkYXRhIFByb3ZpZGVyXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX1dPUktGTE9XX1BST1ZJREVSLFxuICAgICAgdXNlQ2xhc3M6IEFYTVdvcmtmbG93RGVmaW5pdGlvblByb3ZpZGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICAvLyBQcm92aWRlIGFjdGl2aXR5IGNsYXNzZXMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uIChvbmx5IGZyb250ZW5kIGFjdGl2aXRpZXMpXG4gICAgRXhlY3V0ZVF1ZXJ5QWN0aXZpdHksXG4gICAgRXhlY3V0ZUNvbW1hbmRBY3Rpdml0eSxcbiAgICBTaG93Q29uZmlybVBvcHVwQWN0aXZpdHksXG4gICAgU2hvd0xheW91dFBvcHVwQWN0aXZpdHksXG4gICAgSHVtYW5UYXNrQWN0aXZpdHksXG4gICAgU2hvd1RvYXN0QWN0aXZpdHksXG4gICAgQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5LFxuICAgIC8vIEdlbmVyaWMgV29ya2Zsb3cgVGFzayBQcm92aWRlciAoYWxsIHdvcmtmbG93cyDigJMgbm8gZGVmaW5pdGlvbklkIGZpbHRlcikuXG4gICAgLy8gRm9yIG9uZSBwcm92aWRlciBwZXIgZGVmaW5pdGlvbiwgcmVnaXN0ZXIgaW4geW91ciBtb2R1bGUgd2l0aCBkZWZpbml0aW9uSWQsIGUuZy46XG4gICAgLy8geyBwcm92aWRlOiBBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJRywgdXNlVmFsdWU6IHsgbmFtZTogJ2xlYXZlLXJlcXVlc3Qtd29ya2Zsb3ctdGFza3MnLCB0aXRsZTogJ0xlYXZlIFJlcXVlc3QnLCBkZWZpbml0aW9uSWQ6ICdMZWF2ZVJlcXVlc3RXb3JrZmxvdycgfSB9LFxuICAgIC8vIHsgcHJvdmlkZTogQVhQX1dPUktGTE9XX1RBU0tfUFJPVklERVIsIG11bHRpOiB0cnVlLCB1c2VGYWN0b3J5OiAoYykgPT4gbmV3IEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcihjKSwgZGVwczogW0FYUF9HRU5FUklDX1dPUktGTE9XX1RBU0tfUFJPVklERVJfQ09ORklHXSB9XG4gICAgLy8gTGVhdmUgUmVxdWVzdCB3b3JrZmxvdzogdGFzayBib2FyZCBzaG93cyBzdXNwZW5kZWQgaHVtYW4tdGFza3MuXG4gICAgLy8gZGVmaW5pdGlvbklkIG11c3QgbWF0Y2ggaW5zdGFuY2UuZGVmaW5pdGlvbklkOiBtb2NrIGVuZ2luZSB1c2VzIHdvcmtmbG93IG5hbWUgKCdjcmVhdGVMZWF2ZVJlcXVlc3QnKTsgcmVhbCBBUEkgbWF5IHVzZSBkZWZpbml0aW9uIGVudGl0eSBpZC5cbiAgICAvLyB7XG4gICAgLy8gICBwcm92aWRlOiBBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJRyxcbiAgICAvLyAgIHVzZVZhbHVlOiB7XG4gICAgLy8gICAgIG5hbWU6ICdsZWF2ZS1yZXF1ZXN0JyxcbiAgICAvLyAgICAgdGl0bGU6ICdMZWF2ZSBSZXF1ZXN0IFRhc2tzJyxcbiAgICAvLyAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdCcsXG4gICAgLy8gICAgIGRlZmluaXRpb25JZDogJ2NyZWF0ZUxlYXZlUmVxdWVzdCcsXG4gICAgLy8gICB9IGFzIEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlckNvbmZpZyxcbiAgICAvLyB9LFxuICAgIC8vIHtcbiAgICAvLyAgIHByb3ZpZGU6IEFYUF9XT1JLRkxPV19UQVNLX1BST1ZJREVSLFxuICAgIC8vICAgbXVsdGk6IHRydWUsXG4gICAgLy8gICB1c2VGYWN0b3J5OiAoY29uZmlnOiBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJDb25maWcpID0+XG4gICAgLy8gICAgIG5ldyBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXIoY29uZmlnKSxcbiAgICAvLyAgIGRlcHM6IFtBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJR10sXG4gICAgLy8gfSxcbiAgICBwcm92aWRlVGFza1dvcmtmbG93KClcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNV29ya2Zsb3dNYW5hZ2VtZW50TW9kdWxlIHt9XG4iXX0=","// Entity exports - services and modules removed, handled by middleware\n// Exporting entity types for use in feature components\nexport * from './activity-category/activity-category.types';\nexport * from './activity-definition/activity-definition.types';\nexport * from './workflow-definition/workflow-definition.types';\nexport * from './workflow-instance/workflow-instance.types';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2VudGl0aWVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVFQUF1RTtBQUN2RSx1REFBdUQ7QUFFdkQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyw2Q0FBNkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEVudGl0eSBleHBvcnRzIC0gc2VydmljZXMgYW5kIG1vZHVsZXMgcmVtb3ZlZCwgaGFuZGxlZCBieSBtaWRkbGV3YXJlXG4vLyBFeHBvcnRpbmcgZW50aXR5IHR5cGVzIGZvciB1c2UgaW4gZmVhdHVyZSBjb21wb25lbnRzXG5cbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZpdHktY2F0ZWdvcnkvYWN0aXZpdHktY2F0ZWdvcnkudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpdml0eS1kZWZpbml0aW9uL2FjdGl2aXR5LWRlZmluaXRpb24udHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uL3dvcmtmbG93LWRlZmluaXRpb24udHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1pbnN0YW5jZS93b3JrZmxvdy1pbnN0YW5jZS50eXBlcyc7XG4iXX0=","//#region ---- Imports ----\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, output, ViewEncapsulation } from '@angular/core';\nimport { AXPCategoryTreeComponent, } from '@acorex/platform/layout/components';\nimport { AXPActivityDefinitionService } from '@acorex/platform/workflow';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class AXMActivityCategoriesTreeComponent {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.activityDefinitionService = inject(AXPActivityDefinitionService);\n //#endregion\n //#region ---- Output Events ----\n /**\n * Emitted when a category node is clicked\n */\n this.categoryClick = output();\n /**\n * Emitted when an activity node is clicked\n */\n this.activityClick = output();\n //#endregion\n //#region ---- Category Tree Configuration ----\n /**\n * Category tree data source\n */\n this.categoryTreeDataSource = {\n loadRootNodes: async () => {\n const categories = await this.activityDefinitionService.getCategories();\n return this.mapCategoriesToEntities(categories);\n },\n loadChildNodes: async (parentId) => {\n // Check if parentId is an activity (prefixed with 'activity_')\n if (parentId.startsWith('activity_')) {\n return []; // Activities are leaf nodes\n }\n // Load child categories\n const categories = await this.activityDefinitionService.getCategories(parentId);\n const categoryEntities = this.mapCategoriesToEntities(categories);\n // Load activities for this category\n const activities = await this.activityDefinitionService.getActivitiesByCategoryId(parentId);\n const activityEntities = this.mapActivitiesToEntities(activities, parentId);\n // Return categories first, then activities\n return [...categoryEntities, ...activityEntities];\n },\n searchNodes: async (searchValue) => {\n // TODO: Implement search if needed\n return [];\n },\n };\n /**\n * Category tree configuration\n */\n this.categoryTreeConfig = computed(() => ({\n textField: 'title',\n valueField: 'id',\n expandedField: 'expand',\n showCheckbox: false,\n searchable: false,\n emptyStateTitle: '@workflow-management:activities.components.activity-categories-tree.empty-state.title',\n emptyStateDescription: '@workflow-management:activities.components.activity-categories-tree.empty-state.description',\n emptyStateIcon: 'fa-light fa-folder-open',\n }), ...(ngDevMode ? [{ debugName: \"categoryTreeConfig\" }] : []));\n /**\n * Category tree actions (disabled CRUD operations)\n */\n this.categoryTreeActions = computed(() => ({\n canCreate: false,\n canUpdate: false,\n canDelete: false,\n canCreateChild: false,\n }), ...(ngDevMode ? [{ debugName: \"categoryTreeActions\" }] : []));\n /**\n * Category tree events\n */\n this.categoryTreeEvents = computed(() => ({\n onNodeClick: (entity) => {\n this.handleNodeClick(entity);\n },\n }), ...(ngDevMode ? [{ debugName: \"categoryTreeEvents\" }] : []));\n }\n //#endregion\n //#region ---- Event Handlers ----\n /**\n * Handle category tree node click events\n */\n handleNodeClick(entity) {\n const activityEntity = entity;\n if (activityEntity.itemType === 'category' && activityEntity.originalItem) {\n this.categoryClick.emit(activityEntity.originalItem);\n }\n else if (activityEntity.itemType === 'activity' && activityEntity.originalItem) {\n this.activityClick.emit(activityEntity.originalItem);\n }\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Map activity categories to category entities\n */\n mapCategoriesToEntities(categories) {\n return categories.map((category) => ({\n id: category.id,\n title: category.title || category.id,\n description: category.description,\n parentId: category.parentId,\n childrenCount: (category.childrenCount ?? 0) + (category.itemsCount ?? 0), // Include activities in children count\n itemsCount: category.itemsCount,\n originalItem: category,\n itemType: 'category',\n }));\n }\n /**\n * Map activity definitions to category entities\n */\n mapActivitiesToEntities(activities, parentId) {\n return activities.map((activity) => ({\n id: `activity_${activity.type || activity.name}`,\n title: activity.title || activity.name || activity.type,\n description: activity.description,\n parentId: parentId,\n childrenCount: 0, // Activities are leaf nodes\n itemsCount: 0,\n originalItem: activity,\n itemType: 'activity',\n }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMActivityCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.16\", type: AXMActivityCategoriesTreeComponent, isStandalone: true, selector: \"axp-activity-categories-tree\", outputs: { categoryClick: \"categoryClick\", activityClick: \"activityClick\" }, host: { classAttribute: \"axp-activity-categories-tree\" }, ngImport: i0, template: \"<axp-category-tree\\n [dataSource]=\\\"categoryTreeDataSource\\\"\\n [config]=\\\"categoryTreeConfig()\\\"\\n [actions]=\\\"categoryTreeActions()\\\"\\n [events]=\\\"categoryTreeEvents()\\\"\\n (nodeClick)=\\\"handleNodeClick($event)\\\"\\n>\\n</axp-category-tree>\\n\\n\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"component\", type: AXPCategoryTreeComponent, selector: \"axp-category-tree\", inputs: [\"dataSource\", \"config\", \"actions\", \"events\"], outputs: [\"nodeClick\", \"nodeSelect\", \"nodeCreate\", \"nodeUpdate\", \"nodeDelete\", \"searchChange\", \"collapseChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMActivityCategoriesTreeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-activity-categories-tree', standalone: true, imports: [CommonModule, AXPCategoryTreeComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-activity-categories-tree' }, template: \"<axp-category-tree\\n [dataSource]=\\\"categoryTreeDataSource\\\"\\n [config]=\\\"categoryTreeConfig()\\\"\\n [actions]=\\\"categoryTreeActions()\\\"\\n [events]=\\\"categoryTreeEvents()\\\"\\n (nodeClick)=\\\"handleNodeClick($event)\\\"\\n>\\n</axp-category-tree>\\n\\n\" }]\n }], propDecorators: { categoryClick: [{ type: i0.Output, args: [\"categoryClick\"] }], activityClick: [{ type: i0.Output, args: [\"activityClick\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL3N0dWRpby9jb21wb25lbnRzL2FjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZS9hY3Rpdml0eS1jYXRlZ29yaWVzLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvc3R1ZGlvL2NvbXBvbmVudHMvYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlL2FjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEgsT0FBTyxFQUNMLHdCQUF3QixHQUt6QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBOEMsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFnQnJILFlBQVk7QUFZWixNQUFNLE9BQU8sa0NBQWtDO0lBVi9DO1FBV0UsK0NBQStDO1FBRTlCLDhCQUF5QixHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBRWxGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckM7O1dBRUc7UUFDSCxrQkFBYSxHQUFHLE1BQU0sRUFBdUIsQ0FBQztRQUU5Qzs7V0FFRztRQUNILGtCQUFhLEdBQUcsTUFBTSxFQUF5QixDQUFDO1FBRWhELFlBQVk7UUFFWixtREFBbUQ7UUFFbkQ7O1dBRUc7UUFDZ0IsMkJBQXNCLEdBQThCO1lBQ3JFLGFBQWEsRUFBRSxLQUFLLElBQXVDLEVBQUU7Z0JBQzNELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN4RSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsY0FBYyxFQUFFLEtBQUssRUFBRSxRQUFnQixFQUFxQyxFQUFFO2dCQUM1RSwrREFBK0Q7Z0JBQy9ELElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtnQkFDekMsQ0FBQztnQkFFRCx3QkFBd0I7Z0JBQ3hCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRWxFLG9DQUFvQztnQkFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFNUUsMkNBQTJDO2dCQUMzQyxPQUFPLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELFdBQVcsRUFBRSxLQUFLLEVBQUUsV0FBbUIsRUFBcUMsRUFBRTtnQkFDNUUsbUNBQW1DO2dCQUNuQyxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7U0FDRixDQUFDO1FBRUY7O1dBRUc7UUFDZ0IsdUJBQWtCLEdBQUcsUUFBUSxDQUF3QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLFlBQVksRUFBRSxLQUFLO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGVBQWUsRUFBRSx1RkFBdUY7WUFDeEcscUJBQXFCLEVBQUUsNkZBQTZGO1lBQ3BILGNBQWMsRUFBRSx5QkFBeUI7U0FDMUMsQ0FBQyw4REFBQyxDQUFDO1FBRUo7O1dBRUc7UUFDZ0Isd0JBQW1CLEdBQUcsUUFBUSxDQUF5QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUMsK0RBQUMsQ0FBQztRQUVKOztXQUVHO1FBQ2dCLHVCQUFrQixHQUFHLFFBQVEsQ0FBd0IsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3RSxXQUFXLEVBQUUsQ0FBQyxNQUF5QixFQUFFLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsQ0FBQztTQUNGLENBQUMsOERBQUMsQ0FBQztLQTJETDtJQXpEQyxZQUFZO0lBRVosc0NBQXNDO0lBRXRDOztPQUVHO0lBQ08sZUFBZSxDQUFDLE1BQXlCO1FBQ2pELE1BQU0sY0FBYyxHQUFHLE1BQWdDLENBQUM7UUFFeEQsSUFBSSxjQUFjLENBQUMsUUFBUSxLQUFLLFVBQVUsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQW1DLENBQUMsQ0FBQztRQUM5RSxDQUFDO2FBQU0sSUFBSSxjQUFjLENBQUMsUUFBUSxLQUFLLFVBQVUsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDakYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQXFDLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7SUFFWix1Q0FBdUM7SUFFdkM7O09BRUc7SUFDSyx1QkFBdUIsQ0FBQyxVQUFpQztRQUMvRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ2YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEVBQUU7WUFDcEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1lBQ2pDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRSx1Q0FBdUM7WUFDbEgsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLFlBQVksRUFBRSxRQUFRO1lBQ3RCLFFBQVEsRUFBRSxVQUFtQjtTQUM5QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QixDQUM3QixVQUFtQyxFQUNuQyxRQUFnQjtRQUVoQixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkMsRUFBRSxFQUFFLFlBQVksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ2hELEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUk7WUFDdkQsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1lBQ2pDLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLGFBQWEsRUFBRSxDQUFDLEVBQUUsNEJBQTRCO1lBQzlDLFVBQVUsRUFBRSxDQUFDO1lBQ2IsWUFBWSxFQUFFLFFBQVE7WUFDdEIsUUFBUSxFQUFFLFVBQW1CO1NBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQzsrR0E3SVUsa0NBQWtDO21HQUFsQyxrQ0FBa0MsK05DeEMvQyx3UEFTQSx5RER3QlksWUFBWSwrQkFBRSx3QkFBd0I7OzRGQU9yQyxrQ0FBa0M7a0JBVjlDLFNBQVM7K0JBQ0UsOEJBQThCLGNBQzVCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQyxtQkFHaEMsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiAtLS0tICAgSW1wb3J0cyAgIC0tLS1cblxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIG91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUENhdGVnb3J5RW50aXR5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7XG4gIEFYUENhdGVnb3J5VHJlZUNvbXBvbmVudCxcbiAgQVhQQ2F0ZWdvcnlUcmVlRGF0YVNvdXJjZSxcbiAgQVhQQ2F0ZWdvcnlUcmVlQ29uZmlnLFxuICBBWFBDYXRlZ29yeVRyZWVBY3Rpb25zLFxuICBBWFBDYXRlZ29yeVRyZWVFdmVudHMsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhQQWN0aXZpdHlDYXRlZ29yeSwgQVhQQWN0aXZpdHlEZWZpbml0aW9uLCBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIEV4dGVuZGVkIENhdGVnb3J5IEVudGl0eSBJbnRlcmZhY2UgICAtLS0tXG5cbi8qKlxuICogRXh0ZW5kZWQgY2F0ZWdvcnkgZW50aXR5IHRoYXQgaW5jbHVkZXMgYWN0aXZpdHkgaW5mb3JtYXRpb25cbiAqL1xuaW50ZXJmYWNlIEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHkgZXh0ZW5kcyBBWFBDYXRlZ29yeUVudGl0eSB7XG4gIC8qKiBPcmlnaW5hbCBjYXRlZ29yeSBvciBhY3Rpdml0eSBpdGVtICovXG4gIG9yaWdpbmFsSXRlbT86IEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCBBWFBBY3Rpdml0eURlZmluaXRpb247XG4gIC8qKiBUeXBlIG9mIHRoZSBpdGVtOiAnY2F0ZWdvcnknIG9yICdhY3Rpdml0eScgKi9cbiAgaXRlbVR5cGU/OiAnY2F0ZWdvcnknIHwgJ2FjdGl2aXR5Jztcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1hY3Rpdml0eS1jYXRlZ29yaWVzLXRyZWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBWFBDYXRlZ29yeVRyZWVDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2FjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7IGNsYXNzOiAnYXhwLWFjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZScgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQWN0aXZpdHlDYXRlZ29yaWVzVHJlZUNvbXBvbmVudCB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYUEFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgT3V0cHV0IEV2ZW50cyAgIC0tLS1cblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgY2F0ZWdvcnkgbm9kZSBpcyBjbGlja2VkXG4gICAqL1xuICBjYXRlZ29yeUNsaWNrID0gb3V0cHV0PEFYUEFjdGl2aXR5Q2F0ZWdvcnk+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhbiBhY3Rpdml0eSBub2RlIGlzIGNsaWNrZWRcbiAgICovXG4gIGFjdGl2aXR5Q2xpY2sgPSBvdXRwdXQ8QVhQQWN0aXZpdHlEZWZpbml0aW9uPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ2F0ZWdvcnkgVHJlZSBDb25maWd1cmF0aW9uICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDYXRlZ29yeSB0cmVlIGRhdGEgc291cmNlXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2F0ZWdvcnlUcmVlRGF0YVNvdXJjZTogQVhQQ2F0ZWdvcnlUcmVlRGF0YVNvdXJjZSA9IHtcbiAgICBsb2FkUm9vdE5vZGVzOiBhc3luYyAoKTogUHJvbWlzZTxBY3Rpdml0eUNhdGVnb3J5RW50aXR5W10+ID0+IHtcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgcmV0dXJuIHRoaXMubWFwQ2F0ZWdvcmllc1RvRW50aXRpZXMoY2F0ZWdvcmllcyk7XG4gICAgfSxcbiAgICBsb2FkQ2hpbGROb2RlczogYXN5bmMgKHBhcmVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHlbXT4gPT4ge1xuICAgICAgLy8gQ2hlY2sgaWYgcGFyZW50SWQgaXMgYW4gYWN0aXZpdHkgKHByZWZpeGVkIHdpdGggJ2FjdGl2aXR5XycpXG4gICAgICBpZiAocGFyZW50SWQuc3RhcnRzV2l0aCgnYWN0aXZpdHlfJykpIHtcbiAgICAgICAgcmV0dXJuIFtdOyAvLyBBY3Rpdml0aWVzIGFyZSBsZWFmIG5vZGVzXG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgY2hpbGQgY2F0ZWdvcmllc1xuICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuYWN0aXZpdHlEZWZpbml0aW9uU2VydmljZS5nZXRDYXRlZ29yaWVzKHBhcmVudElkKTtcbiAgICAgIGNvbnN0IGNhdGVnb3J5RW50aXRpZXMgPSB0aGlzLm1hcENhdGVnb3JpZXNUb0VudGl0aWVzKGNhdGVnb3JpZXMpO1xuXG4gICAgICAvLyBMb2FkIGFjdGl2aXRpZXMgZm9yIHRoaXMgY2F0ZWdvcnlcbiAgICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UuZ2V0QWN0aXZpdGllc0J5Q2F0ZWdvcnlJZChwYXJlbnRJZCk7XG4gICAgICBjb25zdCBhY3Rpdml0eUVudGl0aWVzID0gdGhpcy5tYXBBY3Rpdml0aWVzVG9FbnRpdGllcyhhY3Rpdml0aWVzLCBwYXJlbnRJZCk7XG5cbiAgICAgIC8vIFJldHVybiBjYXRlZ29yaWVzIGZpcnN0LCB0aGVuIGFjdGl2aXRpZXNcbiAgICAgIHJldHVybiBbLi4uY2F0ZWdvcnlFbnRpdGllcywgLi4uYWN0aXZpdHlFbnRpdGllc107XG4gICAgfSxcbiAgICBzZWFyY2hOb2RlczogYXN5bmMgKHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHlbXT4gPT4ge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IHNlYXJjaCBpZiBuZWVkZWRcbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICB9O1xuXG4gIC8qKlxuICAgKiBDYXRlZ29yeSB0cmVlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjYXRlZ29yeVRyZWVDb25maWcgPSBjb21wdXRlZDxBWFBDYXRlZ29yeVRyZWVDb25maWc+KCgpID0+ICh7XG4gICAgdGV4dEZpZWxkOiAndGl0bGUnLFxuICAgIHZhbHVlRmllbGQ6ICdpZCcsXG4gICAgZXhwYW5kZWRGaWVsZDogJ2V4cGFuZCcsXG4gICAgc2hvd0NoZWNrYm94OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBlbXB0eVN0YXRlVGl0bGU6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDphY3Rpdml0aWVzLmNvbXBvbmVudHMuYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlLmVtcHR5LXN0YXRlLnRpdGxlJyxcbiAgICBlbXB0eVN0YXRlRGVzY3JpcHRpb246ICdAd29ya2Zsb3ctbWFuYWdlbWVudDphY3Rpdml0aWVzLmNvbXBvbmVudHMuYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlLmVtcHR5LXN0YXRlLmRlc2NyaXB0aW9uJyxcbiAgICBlbXB0eVN0YXRlSWNvbjogJ2ZhLWxpZ2h0IGZhLWZvbGRlci1vcGVuJyxcbiAgfSkpO1xuXG4gIC8qKlxuICAgKiBDYXRlZ29yeSB0cmVlIGFjdGlvbnMgKGRpc2FibGVkIENSVUQgb3BlcmF0aW9ucylcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjYXRlZ29yeVRyZWVBY3Rpb25zID0gY29tcHV0ZWQ8QVhQQ2F0ZWdvcnlUcmVlQWN0aW9ucz4oKCkgPT4gKHtcbiAgICBjYW5DcmVhdGU6IGZhbHNlLFxuICAgIGNhblVwZGF0ZTogZmFsc2UsXG4gICAgY2FuRGVsZXRlOiBmYWxzZSxcbiAgICBjYW5DcmVhdGVDaGlsZDogZmFsc2UsXG4gIH0pKTtcblxuICAvKipcbiAgICogQ2F0ZWdvcnkgdHJlZSBldmVudHNcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjYXRlZ29yeVRyZWVFdmVudHMgPSBjb21wdXRlZDxBWFBDYXRlZ29yeVRyZWVFdmVudHM+KCgpID0+ICh7XG4gICAgb25Ob2RlQ2xpY2s6IChlbnRpdHk6IEFYUENhdGVnb3J5RW50aXR5KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZU5vZGVDbGljayhlbnRpdHkpO1xuICAgIH0sXG4gIH0pKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEV2ZW50IEhhbmRsZXJzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2F0ZWdvcnkgdHJlZSBub2RlIGNsaWNrIGV2ZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZU5vZGVDbGljayhlbnRpdHk6IEFYUENhdGVnb3J5RW50aXR5KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZpdHlFbnRpdHkgPSBlbnRpdHkgYXMgQWN0aXZpdHlDYXRlZ29yeUVudGl0eTtcblxuICAgIGlmIChhY3Rpdml0eUVudGl0eS5pdGVtVHlwZSA9PT0gJ2NhdGVnb3J5JyAmJiBhY3Rpdml0eUVudGl0eS5vcmlnaW5hbEl0ZW0pIHtcbiAgICAgIHRoaXMuY2F0ZWdvcnlDbGljay5lbWl0KGFjdGl2aXR5RW50aXR5Lm9yaWdpbmFsSXRlbSBhcyBBWFBBY3Rpdml0eUNhdGVnb3J5KTtcbiAgICB9IGVsc2UgaWYgKGFjdGl2aXR5RW50aXR5Lml0ZW1UeXBlID09PSAnYWN0aXZpdHknICYmIGFjdGl2aXR5RW50aXR5Lm9yaWdpbmFsSXRlbSkge1xuICAgICAgdGhpcy5hY3Rpdml0eUNsaWNrLmVtaXQoYWN0aXZpdHlFbnRpdHkub3JpZ2luYWxJdGVtIGFzIEFYUEFjdGl2aXR5RGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBVdGlsaXR5IE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIE1hcCBhY3Rpdml0eSBjYXRlZ29yaWVzIHRvIGNhdGVnb3J5IGVudGl0aWVzXG4gICAqL1xuICBwcml2YXRlIG1hcENhdGVnb3JpZXNUb0VudGl0aWVzKGNhdGVnb3JpZXM6IEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXSk6IEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHlbXSB7XG4gICAgcmV0dXJuIGNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gKHtcbiAgICAgIGlkOiBjYXRlZ29yeS5pZCxcbiAgICAgIHRpdGxlOiBjYXRlZ29yeS50aXRsZSB8fCBjYXRlZ29yeS5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBjYXRlZ29yeS5kZXNjcmlwdGlvbixcbiAgICAgIHBhcmVudElkOiBjYXRlZ29yeS5wYXJlbnRJZCxcbiAgICAgIGNoaWxkcmVuQ291bnQ6IChjYXRlZ29yeS5jaGlsZHJlbkNvdW50ID8/IDApICsgKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCksIC8vIEluY2x1ZGUgYWN0aXZpdGllcyBpbiBjaGlsZHJlbiBjb3VudFxuICAgICAgaXRlbXNDb3VudDogY2F0ZWdvcnkuaXRlbXNDb3VudCxcbiAgICAgIG9yaWdpbmFsSXRlbTogY2F0ZWdvcnksXG4gICAgICBpdGVtVHlwZTogJ2NhdGVnb3J5JyBhcyBjb25zdCxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGFjdGl2aXR5IGRlZmluaXRpb25zIHRvIGNhdGVnb3J5IGVudGl0aWVzXG4gICAqL1xuICBwcml2YXRlIG1hcEFjdGl2aXRpZXNUb0VudGl0aWVzKFxuICAgIGFjdGl2aXRpZXM6IEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdLFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICk6IEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHlbXSB7XG4gICAgcmV0dXJuIGFjdGl2aXRpZXMubWFwKChhY3Rpdml0eSkgPT4gKHtcbiAgICAgIGlkOiBgYWN0aXZpdHlfJHthY3Rpdml0eS50eXBlIHx8IGFjdGl2aXR5Lm5hbWV9YCxcbiAgICAgIHRpdGxlOiBhY3Rpdml0eS50aXRsZSB8fCBhY3Rpdml0eS5uYW1lIHx8IGFjdGl2aXR5LnR5cGUsXG4gICAgICBkZXNjcmlwdGlvbjogYWN0aXZpdHkuZGVzY3JpcHRpb24sXG4gICAgICBwYXJlbnRJZDogcGFyZW50SWQsXG4gICAgICBjaGlsZHJlbkNvdW50OiAwLCAvLyBBY3Rpdml0aWVzIGFyZSBsZWFmIG5vZGVzXG4gICAgICBpdGVtc0NvdW50OiAwLFxuICAgICAgb3JpZ2luYWxJdGVtOiBhY3Rpdml0eSxcbiAgICAgIGl0ZW1UeXBlOiAnYWN0aXZpdHknIGFzIGNvbnN0LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iLCI8YXhwLWNhdGVnb3J5LXRyZWVcbiAgW2RhdGFTb3VyY2VdPVwiY2F0ZWdvcnlUcmVlRGF0YVNvdXJjZVwiXG4gIFtjb25maWddPVwiY2F0ZWdvcnlUcmVlQ29uZmlnKClcIlxuICBbYWN0aW9uc109XCJjYXRlZ29yeVRyZWVBY3Rpb25zKClcIlxuICBbZXZlbnRzXT1cImNhdGVnb3J5VHJlZUV2ZW50cygpXCJcbiAgKG5vZGVDbGljayk9XCJoYW5kbGVOb2RlQ2xpY2soJGV2ZW50KVwiXG4+XG48L2F4cC1jYXRlZ29yeS10cmVlPlxuXG4iXX0=","import { Component, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXPWorkflowManager, AXPActivityDefinitionService, AXPWorkflowDefinitionService } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';\nimport { RootConfig } from '../../../const';\nimport { AXMActivityCategoriesTreeComponent } from './components/activity-categories-tree/activity-categories-tree.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/components/button-group\";\nimport * as i4 from \"@acorex/components/decorators\";\nimport * as i5 from \"@angular/common\";\nimport * as i6 from \"@acorex/core/translation\";\nexport class WorkflowStudioComponent extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n //#region ---- Services & Dependencies ----\n this.workflowManager = inject(AXPWorkflowManager);\n this.activityDefinitionService = inject(AXPActivityDefinitionService);\n this.entityService = inject(AXPEntityService);\n this.translationService = inject(AXTranslationService);\n this.activatedRoute = inject(ActivatedRoute);\n this.router = inject(Router);\n this.workflowDefinitionService = inject(AXPWorkflowDefinitionService);\n //#endregion\n //#region ---- State ----\n this.activeTab = signal('json', ...(ngDevMode ? [{ debugName: \"activeTab\" }] : []));\n this.selectedCategory = signal(null, ...(ngDevMode ? [{ debugName: \"selectedCategory\" }] : []));\n this.selectedActivity = signal(null, ...(ngDevMode ? [{ debugName: \"selectedActivity\" }] : []));\n this.workflowJson = signal(this.getEmptyWorkflow(), ...(ngDevMode ? [{ debugName: \"workflowJson\" }] : []));\n this.visualNodes = signal([], ...(ngDevMode ? [{ debugName: \"visualNodes\" }] : []));\n this.selectedNode = signal(null, ...(ngDevMode ? [{ debugName: \"selectedNode\" }] : []));\n this.isExecuting = signal(false, ...(ngDevMode ? [{ debugName: \"isExecuting\" }] : []));\n this.executionLogs = signal([], ...(ngDevMode ? [{ debugName: \"executionLogs\" }] : []));\n // Execution Dialog State\n this.showExecutionDialog = signal(false, ...(ngDevMode ? [{ debugName: \"showExecutionDialog\" }] : []));\n this.workflowInstanceState = signal(null, ...(ngDevMode ? [{ debugName: \"workflowInstanceState\" }] : []));\n // UI State\n this.showPropertiesPanel = signal(true, ...(ngDevMode ? [{ debugName: \"showPropertiesPanel\" }] : []));\n this.showWorkflowSettings = signal(false, ...(ngDevMode ? [{ debugName: \"showWorkflowSettings\" }] : []));\n this.activeSettingsTab = signal('general', ...(ngDevMode ? [{ debugName: \"activeSettingsTab\" }] : []));\n // Workflow Settings\n this.workflowSettings = signal({\n definitionId: '',\n name: '',\n description: '',\n inputs: [],\n outputs: [],\n variables: [],\n outcomes: ['Done'],\n usableAsActivity: false,\n autoUpdateConsumingWorkflows: false,\n version: 1,\n isLatest: true,\n isPublished: false,\n toolVersion: '1.0.0',\n providerName: 'WorkflowStudio'\n }, ...(ngDevMode ? [{ debugName: \"workflowSettings\" }] : []));\n // Canvas state\n this.canvasOffset = { x: 0, y: 0 };\n this.isDraggingCanvas = false;\n this.dragStartPos = { x: 0, y: 0 };\n this.draggedActivity = null;\n this.draggedNode = null;\n this.nodeDragOffset = { x: 0, y: 0 };\n this.connectionSource = null;\n /**\n * دسترسی به Object برای استفاده در template\n */\n this.Object = Object;\n /**\n * دسترسی به typeof برای استفاده در template\n */\n this.typeof = (value) => typeof value;\n /**\n * دسترسی به JSON برای استفاده در template\n */\n this.JSON = JSON;\n }\n async ngOnInit() {\n // Page layout initialization\n await super.ngOnInit();\n // Load workflow from query parameter if provided\n await this.loadWorkflowFromRoute();\n }\n /**\n * Load workflow from route query parameter\n */\n async loadWorkflowFromRoute() {\n // Read from snapshot (for initial load)\n const workflowName = this.activatedRoute.snapshot.queryParams['workflow'];\n if (!workflowName) {\n return;\n }\n await this.loadWorkflowByName(workflowName);\n // Subscribe to query param changes (like drive component)\n this.activatedRoute.queryParams.subscribe(async (params) => {\n const newWorkflowName = params['workflow'];\n if (newWorkflowName && newWorkflowName !== workflowName) {\n await this.loadWorkflowByName(newWorkflowName);\n }\n });\n }\n /**\n * Load workflow by name\n */\n async loadWorkflowByName(workflowName) {\n try {\n this.addLog('info', `Loading workflow: ${workflowName}...`);\n // Try to get workflow from entity service first\n const workflowEntityService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name).data();\n const result = await workflowEntityService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: { type: 'equal' },\n value: workflowName,\n }]\n }\n });\n let workflowDef = null;\n if (result.items && result.items.length > 0) {\n workflowDef = result.items[0];\n }\n else {\n // Try workflow definition service\n workflowDef = await this.workflowDefinitionService.getWorkflowByName(workflowName);\n }\n if (!workflowDef) {\n this.addLog('warning', `Workflow '${workflowName}' not found`);\n return;\n }\n // Convert workflow definition to studio JSON format\n const studioJson = this.convertWorkflowDefinitionToStudioJson(workflowDef);\n this.workflowJson.set(JSON.stringify(studioJson, null, 2));\n // Update workflow settings\n this.workflowSettings.set({\n definitionId: workflowDef.id || workflowDef.definitionId || workflowDef.name,\n name: workflowDef.name || '',\n description: workflowDef.description || '',\n inputs: (workflowDef.inputs || []).map((input) => ({\n name: input.name,\n title: input.title || input.name,\n description: input.description,\n schema: input.schema || { dataType: 'string' },\n validations: input.validations,\n })),\n outputs: (workflowDef.outputs || []).map((output) => ({\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: output.schema || { dataType: 'string' },\n })),\n variables: workflowDef.variables || [],\n outcomes: workflowDef.outcomes || ['Done'],\n usableAsActivity: workflowDef.extensions?.elsa?.options?.usableAsActivity || false,\n autoUpdateConsumingWorkflows: workflowDef.extensions?.elsa?.options?.autoUpdateConsumingWorkflows || false,\n version: workflowDef.version || 1,\n isLatest: workflowDef.isLatest !== undefined ? workflowDef.isLatest : true,\n isPublished: workflowDef.isPublished || false,\n toolVersion: workflowDef.toolVersion || '1.0.0',\n providerName: workflowDef.providerName || 'ACoreX',\n });\n this.addLog('success', `Workflow '${workflowName}' loaded successfully`);\n // If visual tab is active, convert to visual\n if (this.activeTab() === 'visual') {\n this.jsonToVisual();\n }\n }\n catch (error) {\n this.addLog('error', `Failed to load workflow: ${error.message}`);\n console.error('[WorkflowStudio] Error loading workflow:', error);\n }\n }\n /**\n * Convert workflow definition to studio JSON format\n */\n convertWorkflowDefinitionToStudioJson(workflowDef) {\n // Convert graph format to root activity format\n const graph = workflowDef.graph;\n if (!graph) {\n return this.getEmptyWorkflow();\n }\n // Build root activity structure\n const rootActivity = {\n id: graph.startActivityId || 'root',\n type: 'workflow-activity:sequence',\n name: workflowDef.title || workflowDef.name || 'Root',\n children: [],\n };\n // Convert activities to children\n const activities = graph.activities || [];\n const connections = graph.connections || [];\n // Build activity map\n const activityMap = new Map();\n activities.forEach((activity) => {\n activityMap.set(activity.id, {\n id: activity.id,\n type: activity.name || activity.type,\n name: activity.customProperties?.nodeId || activity.id,\n properties: activity.inputs || {},\n children: [],\n });\n });\n // Build connections tree\n const startActivity = activityMap.get(graph.startActivityId);\n if (startActivity) {\n rootActivity.children.push(startActivity);\n // Follow connections to build tree\n const processed = new Set();\n const processActivity = (activityId) => {\n if (processed.has(activityId)) {\n return;\n }\n processed.add(activityId);\n const activity = activityMap.get(activityId);\n if (!activity) {\n return;\n }\n // Find outgoing connections\n const outgoingConnections = connections.filter((conn) => conn.source.activtyName === activityId);\n outgoingConnections.forEach((conn) => {\n const targetActivity = activityMap.get(conn.target.activtyName);\n if (targetActivity && !processed.has(targetActivity.id)) {\n activity.children.push(targetActivity);\n processActivity(targetActivity.id);\n }\n });\n };\n processActivity(graph.startActivityId);\n }\n return {\n id: workflowDef.id || workflowDef.name || 'workflow',\n name: workflowDef.name || '',\n description: workflowDef.description || '',\n version: workflowDef.version || 1,\n root: rootActivity,\n };\n }\n //#endregion\n //#region ---- Page Layout Overrides ----\n async getPageTitle() {\n return await this.translationService.translateAsync('@workflow-management:workflow-studio.menus.workflow-studio.title');\n }\n async getPageDescription() {\n return await this.translationService.translateAsync('@workflow-management:workflow-studio.menus.workflow-studio.description');\n }\n async getPrimaryMenuItems() {\n return [\n {\n name: 'execute-workflow',\n title: '@workflow-management:workflow-studio.actions.execute-workflow.title',\n icon: 'fa-light fa-play',\n color: 'success',\n disabled: this.isExecuting(),\n },\n {\n name: 'workflow-settings',\n title: '@workflow-management:workflow-studio.actions.settings.title',\n icon: 'fa-light fa-cog',\n color: 'default',\n },\n {\n name: 'export-workflow',\n title: '@workflow-management:workflow-studio.actions.export.title',\n icon: 'fa-light fa-download',\n color: 'default',\n },\n ];\n }\n async getSecondaryMenuItems() {\n return [\n {\n name: 'format-json',\n title: '@workflow-management:workflow-studio.actions.format-json.title',\n icon: 'fa-light fa-code',\n color: 'default',\n },\n {\n name: 'clear-canvas',\n title: '@workflow-management:workflow-studio.actions.clear-canvas.title',\n icon: 'fa-light fa-trash',\n color: 'danger',\n visible: this.activeTab() === 'visual',\n },\n ];\n }\n async execute(command) {\n switch (command.name) {\n case 'execute-workflow':\n this.openExecutionDialog();\n break;\n case 'workflow-settings':\n this.openWorkflowSettings();\n break;\n case 'export-workflow':\n this.downloadWorkflowDefinition();\n break;\n case 'format-json':\n this.formatJson();\n break;\n case 'clear-canvas':\n this.clearCanvas();\n break;\n }\n }\n //#endregion\n //#region ---- Category & Activity Loading ----\n /**\n * Handle category selection from tree\n */\n onCategoryClick(category) {\n this.selectedCategory.set(category);\n this.selectedActivity.set(null);\n }\n /**\n * Handle activity selection from tree\n */\n onActivityClick(activity) {\n this.selectedActivity.set(activity);\n this.addLog('info', `Activity selected: ${activity.name}`);\n }\n /**\n * Convert AXPActivityDefinition to ActivityInfo\n */\n convertActivityDefinitionToInfo(activity) {\n const properties = (activity.inputs || []).map(input => ({\n name: input.name,\n type: this.getPropertyTypeFromSchema(input.schema),\n required: !input.schema.nullable,\n description: input.description,\n defaultValue: input.schema.defaultValue\n }));\n const defaultProperties = {};\n properties.forEach(prop => {\n if (prop.defaultValue !== undefined) {\n defaultProperties[prop.name] = prop.defaultValue;\n }\n });\n return {\n type: activity.type,\n name: activity.name,\n description: activity.description || '',\n icon: activity.icon || 'fa-light fa-circle',\n properties,\n defaultProperties\n };\n }\n /**\n * Get property type from schema\n */\n getPropertyTypeFromSchema(schema) {\n const dataType = schema?.dataType || 'string';\n if (dataType === 'array')\n return 'array';\n if (dataType === 'object')\n return 'object';\n if (dataType === 'boolean')\n return 'boolean';\n if (dataType === 'number' || dataType === 'integer')\n return 'number';\n return 'string';\n }\n /**\n * Get category color\n */\n getCategoryColor(categoryId) {\n const colorMap = {\n 'workflow-markers': '#10B981',\n 'control-flow': '#3B82F6',\n 'user-interaction': '#8B5CF6',\n 'data': '#10B981',\n 'navigation': '#F59E0B',\n 'events': '#EF4444',\n 'http': '#06B6D4'\n };\n return colorMap[categoryId] || '#64748B';\n }\n /**\n * Get empty workflow JSON\n */\n getEmptyWorkflow() {\n return JSON.stringify({\n id: 'new-workflow',\n name: '',\n description: '',\n version: 1,\n root: {\n id: 'root',\n type: 'workflow-activity:sequence',\n name: 'Root',\n children: []\n }\n }, null, 2);\n }\n //#endregion\n /**\n * Sync visualizer with JSON changes\n */\n syncVisualizerWithJson() {\n try {\n if (this.activeTab() === 'visual') {\n this.jsonToVisual();\n }\n }\n catch (err) {\n console.error('[WorkflowStudio] Error syncing visualizer:', err);\n }\n }\n //#region ---- Workflow Execution ----\n /**\n * Open execution dialog\n */\n openExecutionDialog() {\n this.showExecutionDialog.set(true);\n this.workflowInstanceState.set(null);\n }\n /**\n * Close execution dialog\n */\n closeExecutionDialog() {\n this.showExecutionDialog.set(false);\n this.workflowInstanceState.set(null);\n }\n /**\n * Start workflow execution\n */\n async startWorkflowExecution() {\n await this.runWorkflow();\n }\n /**\n * اجرای workflow\n */\n async runWorkflow() {\n this.isExecuting.set(true);\n this.executionLogs.set([]);\n this.workflowInstanceState.set({\n status: 'running',\n startTime: new Date(),\n currentState: null\n });\n this.addLog('info', 'شروع اجرای Workflow...');\n try {\n // Parse JSON\n const workflowDef = JSON.parse(this.workflowJson());\n const logMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.info.json-parsed');\n this.addLog('success', logMessage, workflowDef);\n // Save workflow definition to entity service first\n const workflowId = workflowDef.id || `workflow-${Date.now()}`;\n const definitionToSave = this.exportWorkflowDefinition();\n if (!definitionToSave) {\n throw new Error('Failed to export workflow definition');\n }\n // Save or update workflow definition\n try {\n const existing = await this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name).data().byKey(workflowId);\n if (existing) {\n await this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name).data().update(workflowId, definitionToSave);\n }\n else {\n await this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name).data().create({ ...definitionToSave, id: workflowId });\n }\n const saveMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.success.workflow-saved');\n this.addLog('success', saveMessage);\n }\n catch (saveError) {\n // Continue execution even if save fails\n const saveErrorMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.warning.save-failed');\n this.addLog('warning', `${saveErrorMessage}: ${saveError.message}`);\n }\n // اجرای workflow\n const executingMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.info.executing');\n this.addLog('info', executingMessage);\n // Start workflow execution using the workflow name\n const workflowName = definitionToSave.name || workflowId;\n let result = await this.workflowManager.start(workflowName, {});\n this.addLog('info', `Workflow started. Instance ID: ${result.instanceId}`, result);\n if (!result.instanceId) {\n this.addLog('error', '❌ Workflow با خطا مواجه شد', result);\n return;\n }\n // Handle workflow execution loop - execute all frontend tasks\n let currentResult = result;\n let taskCount = 0;\n while (currentResult.nextTask) {\n taskCount++;\n const task = currentResult.nextTask;\n this.addLog('info', `📋 Task ${taskCount}: ${task.activityType} (${task.activityName || task.activityId})`, task);\n try {\n // Execute frontend task\n this.addLog('info', `⚡ Executing task: ${task.activityType}...`);\n // const { output, outcome } = await this.workflowManager.execute(task);\n // this.addLog('success', `✅ Task executed. Outcome: ${outcome}`, { output, outcome });\n // Complete task and get next\n this.addLog('info', `🔄 Completing task and getting next...`);\n // currentResult = await this.workflowManager.complete(\n // currentResult.instanceId!,\n // task,\n // outcome,\n // output\n // );\n if (!currentResult.instanceId) {\n this.addLog('error', '❌ Task completion failed', currentResult);\n break;\n }\n if (currentResult.nextTask) {\n this.addLog('info', `➡️ Next task available: ${currentResult.nextTask.activityType}`);\n }\n else {\n this.addLog('success', '✅ No more tasks. Workflow completed!');\n }\n }\n catch (error) {\n this.addLog('error', `❌ Error executing task: ${error.message}`, error);\n currentResult = {\n ...currentResult,\n success: false,\n error: error.message || 'Task execution failed'\n };\n break;\n }\n }\n // نتیجه\n this.workflowInstanceState.set({\n status: 'finished',\n finalResult: currentResult,\n startTime: this.workflowInstanceState().startTime || new Date(),\n endTime: new Date(),\n result: currentResult,\n currentState: currentResult.state?.output?.['taskStatus'] || currentResult.state?.output?.['currentState']\n });\n if (currentResult.success) {\n this.addLog('success', `✅ Workflow با موفقیت اجرا شد! (${taskCount} task(s) executed)`, currentResult);\n }\n else {\n this.addLog('error', '❌ Workflow با خطا مواجه شد: ' + (currentResult.error || 'Unknown error'), currentResult);\n }\n }\n catch (error) {\n this.addLog('error', '❌ خطا در اجرای Workflow: ' + error.message, error);\n this.workflowInstanceState.set({\n status: 'error',\n error: error.message,\n startTime: this.workflowInstanceState().startTime\n });\n }\n finally {\n this.isExecuting.set(false);\n }\n }\n /**\n * اضافه کردن لاگ\n */\n addLog(level, message, data) {\n const logs = this.executionLogs();\n logs.push({\n timestamp: new Date(),\n level,\n message,\n data\n });\n this.executionLogs.set([...logs]);\n }\n /**\n * کپی کردن نمونه activity\n */\n copyActivityTemplate(activity) {\n const template = {\n id: `${activity.type.toLowerCase()}-${Date.now()}`,\n type: activity.type,\n name: activity.name,\n properties: {}\n };\n // کپی در کلیپ‌بورد\n navigator.clipboard.writeText(JSON.stringify(template, null, 2));\n this.addLog('success', `✂️ Template برای ${activity.name} کپی شد!`);\n }\n /**\n * فرمت کردن JSON\n */\n formatJson() {\n try {\n const parsed = JSON.parse(this.workflowJson());\n this.workflowJson.set(JSON.stringify(parsed, null, 2));\n this.addLog('success', '✨ JSON فرمت شد');\n }\n catch (error) {\n this.addLog('error', '❌ خطا در فرمت: ' + error.message);\n }\n }\n /**\n * باز کردن تنظیمات workflow\n */\n openWorkflowSettings() {\n // Extract settings from current workflow JSON\n try {\n const workflow = JSON.parse(this.workflowJson());\n // Convert old format inputs/outputs to new format\n const convertInput = (input) => {\n if (input.schema) {\n // Already in new format\n return {\n name: input.name,\n title: input.title || input.name,\n description: input.description,\n schema: input.schema,\n validations: input.validations\n };\n }\n else {\n // Old format - convert\n return {\n name: input.name,\n title: input.name,\n description: input.description,\n schema: {\n dataType: input.typeName || 'string',\n defaultValue: input.defaultValue\n },\n validations: input.isRequired ? [{ rule: 'required' }] : undefined\n };\n }\n };\n const convertOutput = (output) => {\n if (output.schema) {\n // Already in new format\n return {\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: output.schema\n };\n }\n else {\n // Old format - convert\n return {\n name: output.name,\n title: output.name,\n description: output.description,\n schema: {\n dataType: output.typeName || 'string'\n }\n };\n }\n };\n this.workflowSettings.set({\n definitionId: workflow.definitionId || workflow.id || '',\n name: workflow.name || '',\n description: workflow.description || '',\n inputs: (workflow.inputs || []).map(convertInput),\n outputs: (workflow.outputs || []).map(convertOutput),\n variables: workflow.variables || [],\n outcomes: workflow.outcomes || ['Done'],\n usableAsActivity: workflow.options?.usableAsActivity || false,\n autoUpdateConsumingWorkflows: workflow.options?.autoUpdateConsumingWorkflows || false,\n version: workflow.version || 1,\n isLatest: workflow.isLatest !== undefined ? workflow.isLatest : true,\n isPublished: workflow.isPublished || false,\n toolVersion: workflow.toolVersion || '1.0.0',\n providerName: workflow.providerName || 'WorkflowStudio'\n });\n }\n catch (error) {\n // If parsing fails, use default settings\n this.workflowSettings.set({\n definitionId: '',\n name: '',\n description: '',\n inputs: [],\n outputs: [],\n variables: [],\n outcomes: ['Done'],\n usableAsActivity: false,\n autoUpdateConsumingWorkflows: false,\n version: 1,\n isLatest: true,\n isPublished: false,\n toolVersion: '1.0.0',\n providerName: 'WorkflowStudio'\n });\n }\n this.showWorkflowSettings.set(true);\n }\n /**\n * بستن تنظیمات workflow\n */\n closeWorkflowSettings() {\n this.showWorkflowSettings.set(false);\n }\n /**\n * ذخیره تنظیمات workflow\n */\n saveWorkflowSettings() {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const settings = this.workflowSettings();\n // Update workflow with settings according to WorkflowDefinition structure\n workflow.definitionId = settings.definitionId;\n workflow.name = settings.name;\n workflow.description = settings.description;\n workflow.version = settings.version;\n workflow.isLatest = settings.isLatest;\n workflow.isPublished = settings.isPublished;\n workflow.toolVersion = settings.toolVersion;\n workflow.providerName = settings.providerName;\n // WorkflowCommon properties\n workflow.options = {\n usableAsActivity: settings.usableAsActivity,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows\n };\n workflow.variables = settings.variables.map(v => ({\n id: v.name, // Use name as id for now\n name: v.name,\n typeName: v.typeName,\n value: v.value,\n storageDriverType: 'Memory' // Default storage driver\n }));\n workflow.inputs = settings.inputs.map(i => ({\n name: i.name,\n title: i.title,\n description: i.description,\n schema: {\n dataType: i.schema.dataType,\n nullable: i.schema.nullable,\n readonly: i.schema.readonly,\n hidden: i.schema.hidden,\n defaultValue: i.schema.defaultValue\n },\n validations: i.validations\n }));\n workflow.outputs = settings.outputs.map(o => ({\n name: o.name,\n title: o.title,\n description: o.description,\n schema: {\n dataType: o.schema.dataType\n }\n }));\n workflow.outcomes = settings.outcomes;\n workflow.customProperties = workflow.customProperties || {};\n workflow.isReadonly = false;\n workflow.isSystem = false;\n this.workflowJson.set(JSON.stringify(workflow, null, 2));\n this.addLog('success', '✅ تنظیمات ورک فلو ذخیره شد');\n this.closeWorkflowSettings();\n }\n catch (error) {\n this.addLog('error', '❌ خطا در ذخیره تنظیمات: ' + error.message);\n }\n }\n /**\n * Export workflow به فرمت Elsa Workflow Definition v3.0.0\n * https://elsaworkflows.io/schemas/workflow-definition/v3.0.0/schema.json\n */\n exportWorkflowDefinition() {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const settings = this.workflowSettings();\n // Create Elsa Workflow Definition v3.0.0 structure\n const definition = {\n // VersionedEntity fields\n id: workflow.id || this.generateId(),\n version: settings.version,\n isLatest: settings.isLatest,\n isPublished: settings.isPublished,\n // Identification fields\n definitionId: settings.definitionId || workflow.id || this.generateId(),\n name: settings.name || workflow.name || 'Untitled Workflow',\n description: settings.description || workflow.description || '',\n toolVersion: settings.toolVersion || '3.0.0',\n // Materialization fields\n providerName: settings.providerName || 'ACoreX',\n materializerContext: {\n materializerName: 'Json',\n // Store the root activity as JSON string\n stringData: JSON.stringify(workflow.root)\n },\n // WorkflowCommon fields\n options: {\n usableAsActivity: settings.usableAsActivity || false,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows || false\n },\n // Variables array\n variables: settings.variables.map(v => ({\n id: v.name,\n name: v.name,\n typeName: v.typeName,\n value: v.value,\n storageDriverType: 'Memory'\n })),\n // Inputs array\n inputs: settings.inputs.map(i => ({\n name: i.name,\n title: i.title,\n description: i.description,\n schema: {\n dataType: i.schema.dataType,\n nullable: i.schema.nullable,\n readonly: i.schema.readonly,\n hidden: i.schema.hidden,\n defaultValue: i.schema.defaultValue\n },\n validations: i.validations || []\n })),\n // Outputs array\n outputs: settings.outputs.map(o => ({\n name: o.name,\n title: o.title,\n description: o.description,\n schema: {\n dataType: o.schema.dataType\n }\n })),\n // Outcomes array\n outcomes: settings.outcomes || ['Done'],\n // Custom properties\n customProperties: workflow.customProperties || {},\n // Flags\n isReadonly: false,\n isSystem: false,\n // Root activity (direct reference for Elsa compatibility)\n root: workflow.root\n };\n return definition;\n }\n catch (error) {\n this.addLog('error', '❌ خطا در export: ' + error.message);\n return null;\n }\n }\n /**\n * دانلود WorkflowDefinition به صورت JSON file\n */\n downloadWorkflowDefinition() {\n const definition = this.exportWorkflowDefinition();\n if (!definition)\n return;\n const blob = new Blob([JSON.stringify(definition, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${definition.definitionId || 'workflow'}-v${definition.version}.json`;\n link.click();\n URL.revokeObjectURL(url);\n this.addLog('success', `📥 Workflow Definition دانلود شد: ${link.download}`);\n }\n generateId() {\n return `wf-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n /**\n * تغییر تب settings\n */\n switchSettingsTab(tab) {\n this.activeSettingsTab.set(tab);\n }\n // ============ Workflow Inputs Management ============\n addWorkflowInput() {\n const settings = this.workflowSettings();\n settings.inputs.push({\n name: `input${settings.inputs.length + 1}`,\n title: `Input ${settings.inputs.length + 1}`,\n description: '',\n schema: {\n dataType: 'string',\n defaultValue: undefined\n },\n validations: undefined\n });\n this.workflowSettings.set({ ...settings });\n }\n removeWorkflowInput(index) {\n const settings = this.workflowSettings();\n settings.inputs.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowInput(index, field, value) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (field === 'schema') {\n // For nested schema updates\n input[field] = value;\n }\n else if (field.startsWith('schema.')) {\n // For nested schema properties like 'schema.dataType'\n const schemaField = field.replace('schema.', '');\n if (!input.schema) {\n input.schema = { dataType: 'string' };\n }\n input.schema[schemaField] = value;\n }\n else {\n input[field] = value;\n }\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowInputSchema(index, schemaField, value) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (!input.schema) {\n input.schema = { dataType: 'string' };\n }\n input.schema[schemaField] = value;\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowInputValidation(index, isRequired) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (isRequired) {\n if (!input.validations) {\n input.validations = [];\n }\n if (!input.validations.some(v => v.rule === 'required')) {\n input.validations.push({ rule: 'required' });\n }\n }\n else {\n input.validations = input.validations?.filter(v => v.rule !== 'required');\n if (input.validations?.length === 0) {\n input.validations = undefined;\n }\n }\n this.workflowSettings.set({ ...settings });\n }\n getInputIsRequired(input) {\n return input.validations?.some(v => v.rule === 'required') ?? false;\n }\n // ============ Workflow Outputs Management ============\n addWorkflowOutput() {\n const settings = this.workflowSettings();\n settings.outputs.push({\n name: `output${settings.outputs.length + 1}`,\n title: `Output ${settings.outputs.length + 1}`,\n description: '',\n schema: {\n dataType: 'string'\n }\n });\n this.workflowSettings.set({ ...settings });\n }\n removeWorkflowOutput(index) {\n const settings = this.workflowSettings();\n settings.outputs.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowOutput(index, field, value) {\n const settings = this.workflowSettings();\n const output = settings.outputs[index];\n if (field.startsWith('schema.')) {\n // For nested schema properties like 'schema.dataType'\n const schemaField = field.replace('schema.', '');\n if (!output.schema) {\n output.schema = { dataType: 'string' };\n }\n output.schema[schemaField] = value;\n }\n else {\n output[field] = value;\n }\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowOutputSchema(index, schemaField, value) {\n const settings = this.workflowSettings();\n const output = settings.outputs[index];\n if (!output.schema) {\n output.schema = { dataType: 'string' };\n }\n output.schema[schemaField] = value;\n this.workflowSettings.set({ ...settings });\n }\n // ============ Workflow Variables Management ============\n addWorkflowVariable() {\n const settings = this.workflowSettings();\n settings.variables.push({\n name: `variable${settings.variables.length + 1}`,\n typeName: 'string',\n value: '',\n description: ''\n });\n this.workflowSettings.set({ ...settings });\n }\n removeWorkflowVariable(index) {\n const settings = this.workflowSettings();\n settings.variables.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowVariable(index, field, value) {\n const settings = this.workflowSettings();\n settings.variables[index][field] = value;\n this.workflowSettings.set({ ...settings });\n }\n /**\n * به‌روزرسانی outcomes از string\n */\n updateOutcomes(outcomesString) {\n const settings = this.workflowSettings();\n settings.outcomes = outcomesString\n .split(',')\n .map(o => o.trim())\n .filter(o => o.length > 0);\n this.workflowSettings.set({ ...settings });\n }\n /**\n * پاک کردن لاگ‌ها\n */\n clearLogs() {\n this.executionLogs.set([]);\n }\n // ============ Visual Designer Methods ============\n /**\n * تغییر تب\n */\n switchTab(tab) {\n if (tab === 'visual' && this.activeTab() === 'json') {\n // تبدیل JSON به Visual\n this.jsonToVisual();\n }\n else if (tab === 'json' && this.activeTab() === 'visual') {\n // تبدیل Visual به JSON\n this.visualToJson();\n }\n this.activeTab.set(tab);\n }\n /**\n * انتخاب Node\n */\n selectNodeById(node) {\n this.selectedNode.set(node);\n }\n /**\n * حذف Node\n */\n deleteNode(nodeId) {\n const nodes = this.visualNodes().filter(n => n.id !== nodeId);\n // حذف اتصالات به این نود\n nodes.forEach(n => {\n n.connections = n.connections.filter(c => c !== nodeId);\n });\n this.visualNodes.set(nodes);\n if (this.selectedNode()?.id === nodeId) {\n this.selectedNode.set(null);\n }\n this.addLog('info', `🗑️ Node حذف شد`);\n }\n /**\n * اتصال دو Node با outcome مشخص\n */\n connectNodes(fromId, toId, outcome) {\n const nodes = this.visualNodes();\n const fromNodeIndex = nodes.findIndex(n => n.id === fromId);\n const toNode = nodes.find(n => n.id === toId);\n if (fromNodeIndex !== -1 && toNode) {\n const fromNode = nodes[fromNodeIndex];\n // Use outcome-based connections if available\n if (outcome && fromNode.outcomes && fromNode.outcomes.length > 1) {\n const outcomeConnections = fromNode.outcomeConnections || [];\n // Check if this outcome already has a connection\n const existingConnection = outcomeConnections.find(c => c.outcome === outcome);\n if (existingConnection) {\n this.addLog('warning', `⚠️ Outcome \"${outcome}\" قبلاً متصل شده است`);\n return;\n }\n // Add new outcome connection\n const updatedNodes = [...nodes];\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n outcomeConnections: [...outcomeConnections, { outcome, targetNodeId: toId }],\n connections: [...fromNode.connections, toId] // Keep for backward compat\n };\n this.visualNodes.set(updatedNodes);\n this.addLog('success', `🔗 ${fromNode.name} [${outcome}] → ${toNode.name}`);\n }\n else {\n // Simple connection (no outcomes)\n if (!fromNode.connections.includes(toId)) {\n const updatedNodes = [...nodes];\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n connections: [...fromNode.connections, toId]\n };\n this.visualNodes.set(updatedNodes);\n this.addLog('success', `🔗 ${fromNode.name} متصل شد به ${toNode.name}`);\n }\n else {\n this.addLog('warning', '⚠️ این اتصال از قبل وجود دارد');\n }\n }\n }\n else {\n this.addLog('error', '❌ خطا در ایجاد اتصال');\n }\n }\n /**\n * قطع اتصال (با یا بدون outcome)\n */\n disconnectNodes(fromId, toId, outcome) {\n const nodes = this.visualNodes();\n const fromNodeIndex = nodes.findIndex(n => n.id === fromId);\n if (fromNodeIndex !== -1) {\n const fromNode = nodes[fromNodeIndex];\n const updatedNodes = [...nodes];\n // Remove from outcome connections if specified\n if (outcome && fromNode.outcomeConnections) {\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n outcomeConnections: fromNode.outcomeConnections.filter(c => !(c.outcome === outcome && c.targetNodeId === toId)),\n connections: fromNode.connections.filter(c => c !== toId)\n };\n }\n else {\n // Simple disconnect\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n connections: fromNode.connections.filter(c => c !== toId),\n outcomeConnections: fromNode.outcomeConnections?.filter(c => c.targetNodeId !== toId)\n };\n }\n this.visualNodes.set(updatedNodes);\n this.addLog('info', `✂️ اتصال قطع شد${outcome ? ` [${outcome}]` : ''}`);\n }\n }\n /**\n * تبدیل JSON به Visual\n */\n jsonToVisual() {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const nodes = [];\n let yPos = 100;\n // پردازش root activity\n if (workflow.root) {\n this.processActivityToNode(workflow.root, nodes, 100, yPos);\n }\n this.visualNodes.set(nodes);\n this.addLog('success', '✅ JSON به Visual تبدیل شد');\n }\n catch (error) {\n this.addLog('error', '❌ خطا در تبدیل: ' + error.message);\n }\n }\n /**\n * پردازش Activity به Node (recursive)\n */\n processActivityToNode(activity, nodes, x, y, parentId) {\n const nodeId = activity.id || `${activity.type}-${Date.now()}-${Math.random()}`;\n // Get outcomes for this activity type (use default for now, will be updated async if needed)\n const outcomes = ['Done']; // Default outcome, will be updated when activity info is loaded\n // Get outcomeConnections from activity definition\n const outcomeConnections = activity.outcomeConnections || [];\n // Build simple connections list from outcomeConnections for backward compatibility\n const connections = outcomeConnections.map((conn) => conn.targetNodeId);\n const node = {\n id: nodeId,\n type: activity.type,\n name: activity.name || activity.type,\n icon: this.getIconForActivityType(activity.type),\n properties: activity.properties || {},\n position: { x, y },\n connections: connections,\n outcomeConnections: outcomeConnections,\n outcomes: outcomes\n };\n nodes.push(node);\n // اگر parent دارد، اتصال برقرار کن (برای Sequence)\n if (parentId && !outcomeConnections.length) {\n const parentNode = nodes.find(n => n.id === parentId);\n if (parentNode && !parentNode.connections.includes(nodeId)) {\n parentNode.connections.push(nodeId);\n }\n }\n // پردازش children (برای Sequence) - اما فقط اگر outcomeConnections نباشد\n if (activity.children && Array.isArray(activity.children) && !outcomeConnections.length) {\n let childY = y;\n activity.children.forEach((child, index) => {\n childY = y + (index * 100);\n this.processActivityToNode(child, nodes, x + 250, childY, nodeId);\n });\n }\n return nodeId;\n }\n /**\n * تبدیل Visual به JSON\n */\n visualToJson() {\n try {\n const nodes = this.visualNodes();\n if (nodes.length === 0) {\n this.addLog('warning', '⚠️ هیچ Node ای وجود ندارد');\n return;\n }\n // پیدا کردن root node (node بدون parent)\n const rootNode = this.findRootNode(nodes);\n if (!rootNode) {\n this.addLog('error', '❌ Root Node پیدا نشد');\n return;\n }\n const workflow = {\n id: 'visual-workflow-' + Date.now(),\n name: 'Visual Workflow',\n version: 1,\n root: this.nodeToActivity(rootNode, nodes)\n };\n this.workflowJson.set(JSON.stringify(workflow, null, 2));\n this.addLog('success', '✅ Visual به JSON تبدیل شد');\n }\n catch (error) {\n this.addLog('error', '❌ خطا در تبدیل: ' + error.message);\n }\n }\n /**\n * پیدا کردن Root Node\n */\n findRootNode(nodes) {\n // Node ای که به آن اشاره نشده\n const connectedIds = new Set();\n nodes.forEach(n => n.connections.forEach(c => connectedIds.add(c)));\n const rootNodes = nodes.filter(n => !connectedIds.has(n.id));\n return rootNodes[0] || nodes[0];\n }\n /**\n * تبدیل Node به Activity (recursive)\n */\n nodeToActivity(node, allNodes) {\n const activity = {\n id: node.id,\n type: node.type,\n name: node.name,\n properties: node.properties\n };\n // اگر children دارد (connections)\n if (node.connections.length > 0) {\n const children = node.connections\n .map(connId => allNodes.find(n => n.id === connId))\n .filter(n => n !== undefined)\n .map(childNode => this.nodeToActivity(childNode, allNodes));\n if (children.length > 0) {\n activity.children = children;\n }\n }\n return activity;\n }\n /**\n * دریافت آیکون برای نوع Activity\n */\n getIconForActivityType(type) {\n const iconMap = {\n 'workflow-activity:sequence': 'fa-light fa-list-ol',\n 'workflow-activity:show-confirm-dialog': 'fa-light fa-question-circle',\n 'workflow-activity:show-alert-dialog': 'fa-light fa-circle-info',\n 'workflow-activity:show-toast': 'fa-light fa-bell',\n 'workflow-activity:set-variable': 'fa-light fa-variable',\n 'workflow-activity:execute-query': 'fa-light fa-search',\n 'workflow-activity:execute-command': 'fa-light fa-bolt',\n 'workflow-activity:navigate': 'fa-light fa-route',\n 'workflow-activity:dispatch-event': 'fa-light fa-paper-plane'\n };\n return iconMap[type] || 'fa-light fa-circle';\n }\n /**\n * به‌روزرسانی property نود\n */\n updateNodeProperty(nodeId, propertyName, value) {\n const nodes = this.visualNodes();\n const nodeIndex = nodes.findIndex(n => n.id === nodeId);\n if (nodeIndex !== -1) {\n const node = nodes[nodeIndex];\n const updatedNodes = [...nodes];\n if (propertyName === 'name') {\n updatedNodes[nodeIndex] = {\n ...node,\n name: value\n };\n }\n else {\n const newProperties = {\n ...node.properties,\n [propertyName]: value\n };\n let newOutcomes = node.outcomes;\n const shouldRecomputeOutcomes = (propertyName === 'expectedStatusCodes' && node.type === 'workflow-activity:http-request') ||\n (propertyName === 'actions' && node.type === 'workflow-activity:human-task');\n if (shouldRecomputeOutcomes) {\n this.findActivityInfo(node.type).then(activityInfo => {\n if (activityInfo) {\n const computedOutcomes = this.computeOutcomes(activityInfo, newProperties);\n const updatedNodes = this.visualNodes();\n const nodeIdx = updatedNodes.findIndex(n => n.id === nodeId);\n if (nodeIdx !== -1) {\n updatedNodes[nodeIdx] = {\n ...updatedNodes[nodeIdx],\n outcomes: computedOutcomes\n };\n this.visualNodes.set([...updatedNodes]);\n this.addLog('info', `🔄 Outcomes updated: [${computedOutcomes.join(', ')}]`);\n }\n }\n }).catch(() => {\n });\n }\n updatedNodes[nodeIndex] = {\n ...node,\n properties: newProperties,\n outcomes: newOutcomes\n };\n }\n this.visualNodes.set(updatedNodes);\n if (this.selectedNode()?.id === nodeId) {\n this.selectedNode.set(updatedNodes[nodeIndex]);\n }\n }\n }\n /**\n * پیدا کردن activity info بر اساس type\n */\n async findActivityInfo(type) {\n try {\n const activity = await this.activityDefinitionService.getActivityByName(type);\n if (activity) {\n return this.convertActivityDefinitionToInfo(activity);\n }\n }\n catch (error) {\n console.warn(`Failed to find activity info for type: ${type}`, error);\n }\n return null;\n }\n /**\n * پاک کردن همه نودها\n */\n clearCanvas() {\n this.visualNodes.set([]);\n this.selectedNode.set(null);\n this.addLog('info', '🗑️ Canvas پاک شد');\n }\n // ============ Drag & Drop Methods ============\n /**\n * شروع drag از activity list\n */\n onActivityDragStart(event, activity) {\n this.draggedActivity = activity;\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'copy';\n event.dataTransfer.setData('text/plain', activity.type);\n }\n this.addLog('info', `🎯 در حال Drag: ${activity.name}`);\n }\n /**\n * پایان drag از activity list\n */\n onActivityDragEnd(event) {\n this.draggedActivity = null;\n }\n /**\n * drag over روی Canvas\n */\n onCanvasDragOver(event) {\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n }\n /**\n * drag leave از Canvas\n */\n onCanvasDragLeave(event) {\n // می‌توان از این برای visual feedback استفاده کرد\n }\n /**\n * محاسبه outcomes برای یک activity\n */\n computeOutcomes(activityInfo, properties) {\n // For HTTP Request with expected status codes\n if (activityInfo.type === 'workflow-activity:http-request' && properties['expectedStatusCodes']) {\n const codes = Array.isArray(properties['expectedStatusCodes'])\n ? properties['expectedStatusCodes']\n : [properties['expectedStatusCodes']];\n const statusOutcomes = codes.map((code) => code.toString());\n return [...statusOutcomes, 'Done', 'Failed', 'Timeout'];\n }\n // Human Task: outcomes from actions (prefix/suffix) in workflow definition\n if (activityInfo.type === 'workflow-activity:human-task' && properties['actions']) {\n const names = [];\n try {\n const actions = properties['actions'];\n const parsed = typeof actions === 'string' ? JSON.parse(actions) : actions;\n const prefix = parsed?.prefix ?? [];\n const suffix = parsed?.suffix ?? [];\n for (const item of [...prefix, ...suffix]) {\n const name = item?.command?.name ?? item?.name;\n if (name && typeof name === 'string' && !names.includes(name))\n names.push(name);\n }\n }\n catch {\n // ignore parse error\n }\n if (names.length > 0)\n return names;\n }\n // Default: check activity info for outcomes\n const outcomeMap = {\n 'workflow-activity:if': ['Then', 'Else'],\n 'workflow-activity:show-confirm-dialog': ['Confirmed', 'Cancelled'],\n 'workflow-activity:show-alert-dialog': ['Done'],\n 'workflow-activity:show-form': ['Submitted', 'Cancelled'],\n 'workflow-activity:human-task': ['submit', 'cancel'],\n 'workflow-activity:http-request': ['Done', 'Failed', 'Timeout'],\n 'workflow-activity:sequence': ['Done'],\n 'workflow-activity:for-each': ['Done'],\n 'workflow-activity:while': ['Done'],\n 'workflow-activity:set-variable': ['Done'],\n 'workflow-activity:execute-query': ['Done'],\n 'workflow-activity:execute-command': ['Done'],\n 'workflow-activity:navigate': ['Done'],\n 'workflow-activity:show-toast': ['Done'],\n 'workflow-activity:dispatch-event': ['Done']\n };\n return outcomeMap[activityInfo.type] || ['Done'];\n }\n /**\n * drop روی Canvas - اضافه کردن activity جدید\n */\n onCanvasDrop(event) {\n event.preventDefault();\n if (!this.draggedActivity) {\n return;\n }\n const canvas = event.currentTarget;\n const rect = canvas.getBoundingClientRect();\n const x = event.clientX - rect.left - 75; // center node\n const y = event.clientY - rect.top - 40;\n const nodes = this.visualNodes();\n const defaultProps = { ...(this.draggedActivity.defaultProperties || {}) };\n const newNode = {\n id: `${this.draggedActivity.type}-${Date.now()}`,\n type: this.draggedActivity.type,\n name: this.draggedActivity.name,\n icon: this.draggedActivity.icon,\n properties: defaultProps,\n position: { x: Math.max(0, x), y: Math.max(0, y) },\n connections: [],\n outcomeConnections: [],\n outcomes: this.computeOutcomes(this.draggedActivity, defaultProps)\n };\n this.visualNodes.set([...nodes, newNode]);\n const outcomesInfo = newNode.outcomes && newNode.outcomes.length > 1\n ? ` with ${newNode.outcomes.length} outcomes [${newNode.outcomes.join(', ')}]`\n : '';\n this.addLog('success', `✅ Activity ${this.draggedActivity.name} اضافه شد${outcomesInfo}`);\n this.draggedActivity = null;\n }\n /**\n * شروع drag نود\n */\n onNodeDragStart(event, node) {\n this.draggedNode = node;\n const target = event.target;\n const rect = target.getBoundingClientRect();\n this.nodeDragOffset = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top\n };\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n // Make drag image transparent\n const img = new Image();\n img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n event.dataTransfer.setDragImage(img, 0, 0);\n }\n }\n /**\n * در حال drag نود\n */\n onNodeDrag(event, node) {\n if (!this.draggedNode || event.clientX === 0 || event.clientY === 0) {\n return;\n }\n const canvas = document.querySelector('.canvas-area');\n if (!canvas)\n return;\n const rect = canvas.getBoundingClientRect();\n const x = event.clientX - rect.left - this.nodeDragOffset.x;\n const y = event.clientY - rect.top - this.nodeDragOffset.y;\n const nodes = this.visualNodes();\n const nodeIndex = nodes.findIndex(n => n.id === node.id);\n if (nodeIndex !== -1) {\n nodes[nodeIndex].position = {\n x: Math.max(0, x),\n y: Math.max(0, y)\n };\n this.visualNodes.set([...nodes]);\n }\n }\n /**\n * پایان drag نود\n */\n onNodeDragEnd(event, node) {\n this.draggedNode = null;\n }\n /**\n * کلیک روی کانکتور - برای ایجاد اتصال (برای activities با یک outcome)\n */\n onConnectorClick(event, node, type) {\n event.stopPropagation();\n if (!this.connectionSource) {\n // اولین کلیک - ذخیره source\n if (type === 'out') {\n this.connectionSource = { node, type };\n this.addLog('info', `🔗 منبع اتصال انتخاب شد: ${node.name}`);\n }\n }\n else {\n // دومین کلیک - ایجاد اتصال\n if (type === 'in' && this.connectionSource.node.id !== node.id) {\n this.connectNodes(this.connectionSource.node.id, node.id, this.connectionSource.outcome);\n this.connectionSource = null;\n }\n else {\n this.addLog('warning', '⚠️ اتصال نامعتبر - ابتدا روی connector خروجی و سپس ورودی کلیک کنید');\n this.connectionSource = null;\n }\n }\n }\n /**\n * کلیک روی outcome connector - برای activities با چند outcome\n */\n onOutcomeConnectorClick(event, node, outcome) {\n event.stopPropagation();\n if (!this.connectionSource) {\n // اولین کلیک - ذخیره source با outcome\n this.connectionSource = { node, type: 'out', outcome };\n this.addLog('info', `🔗 منبع اتصال انتخاب شد: ${node.name} [${outcome}]`);\n }\n else {\n this.addLog('warning', '⚠️ لطفاً روی input connector یک نود دیگر کلیک کنید');\n this.connectionSource = null;\n }\n }\n // ============ UI Methods ============\n /**\n * تغییر وضعیت نمایش Properties Panel\n */\n togglePropertiesPanel() {\n this.showPropertiesPanel.set(!this.showPropertiesPanel());\n }\n // ============ Template Helper Methods ============\n /**\n * پیدا کردن Node با ID\n */\n findNodeById(nodeId) {\n return this.visualNodes().find(n => n.id === nodeId);\n }\n /**\n * بررسی اینکه آیا properties خالی است یا نه\n */\n hasProperties(properties) {\n return properties && Object.keys(properties).length > 0;\n }\n /**\n * دریافت رنگ بر اساس outcome\n */\n getOutcomeColor(outcome) {\n const colorMap = {\n '200': '#10b981', // Green - Success\n 'Done': '#10b981', // Green - Success\n 'Success': '#10b981', // Green - Success\n '404': '#ef4444', // Red - Error\n '500': '#ef4444', // Red - Error\n 'Failed': '#ef4444', // Red - Error\n 'Error': '#ef4444', // Red - Error\n 'Timeout': '#f59e0b', // Orange - Warning\n 'Cancelled': '#f59e0b', // Orange - Warning\n 'Then': '#3b82f6', // Blue - Info\n 'Else': '#64748b', // Gray\n };\n return colorMap[outcome] || '#8b5cf6'; // Purple - Default\n }\n /**\n * دریافت نام رنگ برای marker ID\n */\n getOutcomeColorName(outcome) {\n if (['200', 'Done', 'Success'].includes(outcome)) {\n return 'success';\n }\n if (['404', '500', 'Failed', 'Error'].includes(outcome)) {\n return 'error';\n }\n if (['Timeout', 'Cancelled'].includes(outcome)) {\n return 'warning';\n }\n if (['Then'].includes(outcome)) {\n return 'info';\n }\n return 'default';\n }\n /**\n * به‌روزرسانی property با parse کردن JSON\n */\n updateNodePropertyJSON(nodeId, propertyName, jsonString) {\n try {\n const value = JSON.parse(jsonString);\n this.updateNodeProperty(nodeId, propertyName, value);\n }\n catch (error) {\n // اگر JSON نامعتبر بود، چیزی نکن\n console.warn('Invalid JSON:', jsonString);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowStudioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: WorkflowStudioComponent, isStandalone: true, selector: \"app-workflow-studio\", providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: WorkflowStudioComponent,\n },\n ], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout>\\n <axp-layout-start-side>\\n <axp-activity-categories-tree (categoryClick)=\\\"onCategoryClick($event)\\\"\\n (activityClick)=\\\"onActivityClick($event)\\\"></axp-activity-categories-tree>\\n </axp-layout-start-side>\\n\\n <axp-page-toolbar>\\n <axp-layout-prefix>\\n <!-- Editor Tabs -->\\n <ax-button-group class=\\\"ax-sm\\\" [selection]=\\\"'single'\\\">\\n <ax-button-group-item (onClick)=\\\"switchTab('json')\\\" [selected]=\\\"activeTab() === 'json'\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-code\\\"></i>\\n </ax-prefix>\\n {{ '@workflow-management:workflow-studio.terms.json-editor' | translate | async }}\\n </ax-button-group-item>\\n <ax-button-group-item (onClick)=\\\"switchTab('visual')\\\" [selected]=\\\"activeTab() === 'visual'\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-diagram-project\\\"></i>\\n </ax-prefix>\\n {{ '@workflow-management:workflow-studio.terms.visual-designer' | translate | async }}\\n </ax-button-group-item>\\n </ax-button-group>\\n </axp-layout-prefix>\\n </axp-page-toolbar>\\n\\n <axp-page-content>\\n <div class=\\\"workflow-studio\\\">\\n <!-- Main Layout -->\\n <div class=\\\"studio-body\\\" [class.properties-hidden]=\\\"!showPropertiesPanel()\\\">\\n\\n <!-- Editor -->\\n <div class=\\\"studio-editor\\\">\\n <!-- Tab Content -->\\n <div class=\\\"editor-content\\\">\\n <!-- JSON Tab -->\\n @if (activeTab() === 'json') {\\n <div class=\\\"json-tab\\\">\\n <textarea class=\\\"json-editor\\\" [(ngModel)]=\\\"workflowJson\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.components.json-editor.placeholder' | translate | async\\\"\\n spellcheck=\\\"false\\\">\\n </textarea>\\n </div>\\n }\\n\\n <!-- Visual Tab -->\\n @if (activeTab() === 'visual') {\\n <div class=\\\"visual-tab\\\">\\n <!-- Canvas -->\\n <div class=\\\"visual-canvas\\\">\\n <div class=\\\"canvas-toolbar\\\">\\n <button class=\\\"tool-btn\\\" (click)=\\\"clearCanvas()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.canvas-toolbar.clear-canvas.title' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n <button class=\\\"tool-btn\\\" (click)=\\\"visualToJson()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.canvas-toolbar.convert-to-json.title' | translate | async\\\">\\n <i class=\\\"fa-light fa-code\\\"></i>\\n </button>\\n <span class=\\\"tool-info\\\">\\n <i class=\\\"fa-light fa-lightbulb\\\"></i>\\n <strong>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.hint' | translate | async }}</strong>\\n </span>\\n </div>\\n\\n <div class=\\\"canvas-area\\\" (drop)=\\\"onCanvasDrop($event)\\\" (dragover)=\\\"onCanvasDragOver($event)\\\"\\n (dragleave)=\\\"onCanvasDragLeave($event)\\\">\\n <!-- SVG for Connections -->\\n <svg class=\\\"connections-layer\\\">\\n <!-- Outcome-based Connections -->\\n @for (node of visualNodes(); track node.id) {\\n @if (node.outcomeConnections && node.outcomeConnections.length > 0) {\\n @for (conn of node.outcomeConnections; track conn.targetNodeId + conn.outcome) {\\n @let targetNode = findNodeById(conn.targetNodeId);\\n @if (targetNode) {\\n <g class=\\\"outcome-connection-group\\\">\\n <line [attr.x1]=\\\"node.position.x + 75\\\" [attr.y1]=\\\"node.position.y + 80\\\"\\n [attr.x2]=\\\"targetNode.position.x + 75\\\" [attr.y2]=\\\"targetNode.position.y - 50\\\"\\n class=\\\"connection-line outcome-line\\\" [attr.stroke]=\\\"getOutcomeColor(conn.outcome)\\\"\\n stroke-width=\\\"2.5\\\"\\n [attr.marker-end]=\\\"'url(#arrowhead-' + getOutcomeColorName(conn.outcome) + ')'\\\"\\n style=\\\"cursor: pointer\\\" (dblclick)=\\\"disconnectNodes(node.id, conn.targetNodeId, conn.outcome)\\\"\\n [attr.title]=\\\"'Outcome: ' + conn.outcome + ' (Double-click to remove)'\\\">\\n <title>{{ conn.outcome }} \\u2192 {{ targetNode.name }}</title>\\n </line>\\n <text [attr.x]=\\\"(node.position.x + targetNode.position.x) / 2 + 75\\\"\\n [attr.y]=\\\"(node.position.y + targetNode.position.y) / 2 + 15\\\" class=\\\"connection-label\\\"\\n text-anchor=\\\"middle\\\" [attr.fill]=\\\"getOutcomeColor(conn.outcome)\\\" font-size=\\\"11\\\"\\n font-weight=\\\"600\\\" pointer-events=\\\"none\\\">\\n {{ conn.outcome }}\\n </text>\\n </g>\\n }\\n }\\n } @else {\\n <!-- Simple Connections (backward compatibility) -->\\n @for (targetId of node.connections; track targetId) {\\n @let targetNode = findNodeById(targetId);\\n @if (targetNode) {\\n <line [attr.x1]=\\\"node.position.x + 75\\\" [attr.y1]=\\\"node.position.y + 40\\\"\\n [attr.x2]=\\\"targetNode.position.x + 75\\\" [attr.y2]=\\\"targetNode.position.y - 50\\\"\\n class=\\\"connection-line\\\" stroke=\\\"#64748b\\\" stroke-width=\\\"2\\\" marker-end=\\\"url(#arrowhead-default)\\\"\\n style=\\\"cursor: pointer\\\" (dblclick)=\\\"disconnectNodes(node.id, targetId)\\\"\\n title=\\\"Double-click \\u0628\\u0631\\u0627\\u06CC \\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <title>Double-click \\u0628\\u0631\\u0627\\u06CC \\u062D\\u0630\\u0641</title>\\n </line>\\n }\\n }\\n }\\n }\\n\\n <defs>\\n <!-- Default Arrow -->\\n <marker id=\\\"arrowhead-default\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#64748b\\\" />\\n </marker>\\n <!-- Success Arrow (Green) -->\\n <marker id=\\\"arrowhead-success\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#10b981\\\" />\\n </marker>\\n <!-- Error Arrow (Red) -->\\n <marker id=\\\"arrowhead-error\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#ef4444\\\" />\\n </marker>\\n <!-- Warning Arrow (Orange) -->\\n <marker id=\\\"arrowhead-warning\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#f59e0b\\\" />\\n </marker>\\n <!-- Info Arrow (Blue) -->\\n <marker id=\\\"arrowhead-info\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#3b82f6\\\" />\\n </marker>\\n </defs>\\n </svg>\\n\\n <!-- Nodes -->\\n @for (node of visualNodes(); track node.id) {\\n <div class=\\\"visual-node\\\" [class.selected]=\\\"selectedNode()?.id === node.id\\\"\\n [style.left.px]=\\\"node.position.x\\\" [style.top.px]=\\\"node.position.y\\\" [attr.data-node-id]=\\\"node.id\\\"\\n draggable=\\\"true\\\" (dragstart)=\\\"onNodeDragStart($event, node)\\\" (drag)=\\\"onNodeDrag($event, node)\\\"\\n (dragend)=\\\"onNodeDragEnd($event, node)\\\" (click)=\\\"selectNodeById(node)\\\">\\n <div class=\\\"node-header\\\">\\n <i [class]=\\\"node.icon\\\"></i>\\n <span>{{ node.name }}</span>\\n <button class=\\\"node-delete\\\" (click)=\\\"deleteNode(node.id); $event.stopPropagation()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <div class=\\\"node-body\\\">\\n <small>{{ node.type }}</small>\\n </div>\\n\\n <div class=\\\"node-connectors\\\">\\n <!-- Input Connector -->\\n <div class=\\\"connector connector-in\\\" title=\\\"Input\\\" (click)=\\\"onConnectorClick($event, node, 'in')\\\">\\n </div>\\n\\n <!-- Output Connectors - Multiple outcomes support -->\\n @if (node.outcomes && node.outcomes.length > 1) {\\n <!-- Multiple outcomes: show separate port for each -->\\n <div class=\\\"outcomes-container\\\">\\n @for (outcome of node.outcomes; track outcome; let idx = $index) {\\n <div class=\\\"outcome-connector\\\" [class.active]=\\\"\\n connectionSource?.node?.id === node.id && connectionSource?.outcome === outcome\\n \\\" [attr.data-outcome]=\\\"outcome\\\" [title]=\\\"'Output: ' + outcome\\\"\\n (click)=\\\"onOutcomeConnectorClick($event, node, outcome)\\\">\\n <span class=\\\"outcome-label\\\">{{ outcome }}</span>\\n <div class=\\\"outcome-dot\\\"></div>\\n </div>\\n }\\n </div>\\n } @else {\\n <!-- Single outcome: show simple output connector -->\\n <div class=\\\"connector connector-out\\\" [class.active]=\\\"connectionSource?.node?.id === node.id\\\"\\n title=\\\"Output\\\" (click)=\\\"onConnectorClick($event, node, 'out')\\\"></div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Empty State -->\\n @if (visualNodes().length === 0) {\\n <div class=\\\"canvas-empty-state\\\">\\n <i class=\\\"fa-light fa-diagram-project\\\"></i>\\n <p>Activity \\u0647\\u0627 \\u0631\\u0627 \\u0627\\u0632 \\u0633\\u0627\\u06CC\\u062F\\u0628\\u0627\\u0631 \\u0628\\u0647 \\u0627\\u06CC\\u0646\\u062C\\u0627 \\u0628\\u06A9\\u0634\\u06CC\\u062F</p>\\n <small>\\u06CC\\u0627 \\u0627\\u0632 \\u062A\\u0628 JSON\\u060C workflow \\u0631\\u0627 import \\u06A9\\u0646\\u06CC\\u062F</small>\\n </div>\\n }\\n </div>\\n </div>\\n\\n <!-- Properties Panel -->\\n @if (selectedNode() && showPropertiesPanel()) {\\n <div class=\\\"properties-panel\\\">\\n <div class=\\\"properties-header\\\">\\n <i class=\\\"fa-light fa-sliders\\\"></i>\\n <h4>{{ '@workflow-management:workflow-studio.components.properties-panel.title' | translate | async }}</h4>\\n <div class=\\\"header-actions\\\">\\n <button class=\\\"header-btn\\\" (click)=\\\"togglePropertiesPanel()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.close-panel' | translate | async\\\">\\n <i class=\\\"fa-light fa-angle-right\\\"></i>\\n </button>\\n <button class=\\\"header-btn\\\" (click)=\\\"selectedNode.set(null)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.close' | translate | async\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n </div>\\n <div class=\\\"properties-body\\\">\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.id' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.id\\\" disabled />\\n </div>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.type' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.type\\\" disabled />\\n </div>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.name' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.name\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, 'name', $any($event.target).value)\\\" />\\n </div>\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCE5 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.input-properties' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">{{ '@workflow-management:workflow-studio.components.properties-panel.sections.input-properties' | translate | async }} - \\u0645\\u0642\\u0627\\u062F\\u06CC\\u0631 \\u0631\\u0627 \\u062A\\u0646\\u0638\\u06CC\\u0645 \\u06A9\\u0646\\u06CC\\u062F</small>\\n\\n @if (hasProperties(selectedNode()!.properties)) {\\n <div class=\\\"property-editor\\\">\\n @for (key of Object.keys(selectedNode()!.properties); track key) {\\n <div class=\\\"property-row\\\">\\n <label>\\n {{ key }}\\n <span class=\\\"property-type-badge\\\">{{ typeof selectedNode()!.properties[key] }}</span>\\n </label>\\n\\n @if (typeof selectedNode()!.properties[key] === 'boolean') {\\n <select [value]=\\\"selectedNode()!.properties[key]\\\" (change)=\\\"\\n updateNodeProperty(selectedNode()!.id, key, $any($event.target).value === 'true')\\n \\\">\\n <option [value]=\\\"true\\\">True</option>\\n <option [value]=\\\"false\\\">False</option>\\n </select>\\n } @else if (typeof selectedNode()!.properties[key] === 'number') {\\n <input type=\\\"number\\\" [value]=\\\"selectedNode()!.properties[key]\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, key, +$any($event.target).value)\\\" />\\n } @else if (typeof selectedNode()!.properties[key] === 'object') {\\n <textarea rows=\\\"3\\\" [value]=\\\"JSON.stringify(selectedNode()!.properties[key], null, 2)\\\"\\n (input)=\\\"updateNodePropertyJSON(selectedNode()!.id, key, $any($event.target).value)\\\"></textarea>\\n } @else {\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.properties[key]\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, key, $any($event.target).value)\\\" />\\n }\\n </div>\\n }\\n </div>\\n } @else {\\n <p class=\\\"no-properties\\\">\\n {{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-properties' | translate | async }}\\n </p>\\n }\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCE4 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.output-variables' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u062E\\u0631\\u0648\\u062C\\u06CC \\u0648 \\u0645\\u062A\\u063A\\u06CC\\u0631\\u0647\\u0627</small>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.output-variable' | translate | async }}:</label>\\n <input type=\\\"text\\\" placeholder=\\\"\\u0645\\u062B\\u0644\\u0627\\u064B result\\\"\\n [value]=\\\"selectedNode()!.properties['outputVariable'] || ''\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, 'outputVariable', $any($event.target).value)\\\" />\\n </div>\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDD17 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.connections' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u0627\\u062A\\u0635\\u0627\\u0644\\u0627\\u062A \\u0627\\u06CC\\u0646 \\u0646\\u0648\\u062F</small>\\n\\n <!-- Outcome-based Connections -->\\n @if (selectedNode()!.outcomeConnections && selectedNode()!.outcomeConnections!.length > 0) {\\n <div class=\\\"connections-list\\\">\\n @for (conn of selectedNode()!.outcomeConnections!; track conn.targetNodeId + conn.outcome) {\\n @let targetNode = findNodeById(conn.targetNodeId);\\n @if (targetNode) {\\n <div class=\\\"connection-item outcome-connection\\\">\\n <span class=\\\"outcome-badge\\\" [style.background]=\\\"getOutcomeColor(conn.outcome)\\\">\\n {{ conn.outcome }}\\n </span>\\n <i class=\\\"fa-light fa-arrow-right\\\"></i>\\n <span>{{ targetNode.name }}</span>\\n <button class=\\\"remove-btn\\\"\\n (click)=\\\"disconnectNodes(selectedNode()!.id, conn.targetNodeId, conn.outcome)\\\"\\n title=\\\"\\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n }\\n }\\n </div>\\n } @else if (selectedNode()!.connections.length > 0) {\\n <!-- Simple Connections (fallback) -->\\n <div class=\\\"connections-list\\\">\\n @for (targetId of selectedNode()!.connections; track targetId) {\\n @let targetNode = findNodeById(targetId);\\n @if (targetNode) {\\n <div class=\\\"connection-item\\\">\\n <i class=\\\"fa-light fa-arrow-right\\\"></i>\\n <span>{{ targetNode.name }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"disconnectNodes(selectedNode()!.id, targetId)\\\"\\n title=\\\"\\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n }\\n }\\n </div>\\n } @else {\\n <p class=\\\"no-properties\\\">{{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-connections' | translate | async }}</p>\\n }\\n\\n <!-- Available Outcomes Info -->\\n @if (selectedNode()!.outcomes && selectedNode()!.outcomes!.length > 1) {\\n <div class=\\\"properties-divider\\\"></div>\\n <h5>\\uD83D\\uDCE4 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.available-outcomes' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u062E\\u0631\\u0648\\u062C\\u06CC\\u200C\\u0647\\u0627\\u06CC \\u0645\\u0648\\u062C\\u0648\\u062F \\u0628\\u0631\\u0627\\u06CC \\u0627\\u062A\\u0635\\u0627\\u0644</small>\\n <div class=\\\"outcomes-info\\\">\\n @for (outcome of selectedNode()!.outcomes!; track outcome) {\\n <span class=\\\"outcome-tag\\\" [style.borderColor]=\\\"getOutcomeColor(outcome)\\\">\\n <span class=\\\"outcome-dot\\\" [style.background]=\\\"getOutcomeColor(outcome)\\\"></span>\\n {{ outcome }}\\n </span>\\n }\\n </div>\\n }\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCDD {{ '@workflow-management:workflow-studio.components.properties-panel.sections.raw-json' | translate | async }}</h5>\\n <pre class=\\\"properties-json\\\">{{ selectedNode() | json }}</pre>\\n </div>\\n </div>\\n }\\n\\n <!-- Toggle Button for Properties (when closed) -->\\n @if (selectedNode() && !showPropertiesPanel()) {\\n <button class=\\\"sidebar-toggle-btn right\\\" (click)=\\\"togglePropertiesPanel()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.show-panel' | translate | async\\\">\\n <i class=\\\"fa-light fa-sliders\\\"></i>\\n </button>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n\\n </div>\\n\\n <!-- Workflow Settings Modal -->\\n @if (showWorkflowSettings()) {\\n <div class=\\\"settings-modal-overlay\\\" (click)=\\\"closeWorkflowSettings()\\\">\\n <div class=\\\"settings-modal\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Modal Header -->\\n <div class=\\\"settings-modal-header\\\">\\n <div class=\\\"header-title\\\">\\n <i class=\\\"fa-light fa-cog\\\"></i>\\n <h2>{{ '@workflow-management:workflow-studio.settings.title' | translate | async }}</h2>\\n </div>\\n <button class=\\\"close-btn\\\" (click)=\\\"closeWorkflowSettings()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <!-- Modal Body -->\\n <div class=\\\"settings-modal-body\\\">\\n <!-- Tabs Navigation -->\\n <div class=\\\"settings-tabs\\\">\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'general'\\\"\\n (click)=\\\"switchSettingsTab('general')\\\">\\n <i class=\\\"fa-light fa-info-circle\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.general' | translate | async }}\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'inputs'\\\"\\n (click)=\\\"switchSettingsTab('inputs')\\\">\\n <i class=\\\"fa-light fa-sign-in\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.inputs' | translate | async }}\\n @if (workflowSettings().inputs.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().inputs.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'outputs'\\\"\\n (click)=\\\"switchSettingsTab('outputs')\\\">\\n <i class=\\\"fa-light fa-sign-out\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.outputs' | translate | async }}\\n @if (workflowSettings().outputs.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().outputs.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'variables'\\\"\\n (click)=\\\"switchSettingsTab('variables')\\\">\\n <i class=\\\"fa-light fa-box\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.variables' | translate | async }}\\n @if (workflowSettings().variables.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().variables.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'advanced'\\\"\\n (click)=\\\"switchSettingsTab('advanced')\\\">\\n <i class=\\\"fa-light fa-cog\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.advanced' | translate | async }}\\n </button>\\n </div>\\n\\n <!-- Tab Content -->\\n <div class=\\\"settings-content\\\">\\n <!-- General Tab -->\\n @if (activeSettingsTab() === 'general') {\\n <div class=\\\"settings-section\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.general.title' | translate | async }}</h3>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.name.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.name.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().name\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().definitionId\\\" />\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.description' | translate | async }}</small>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.description.title' | translate | async }}</label>\\n <textarea class=\\\"form-textarea\\\" rows=\\\"4\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.description.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().description\\\"></textarea>\\n </div>\\n </div>\\n }\\n\\n <!-- Inputs Tab -->\\n @if (activeSettingsTab() === 'inputs') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.inputs.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowInput()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.inputs.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().inputs.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.inputs.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.inputs.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (input of workflowSettings().inputs; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowInput($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"userName\\\" [value]=\\\"input.name\\\"\\n (input)=\\\"updateWorkflowInput($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"User Name\\\" [value]=\\\"input.title\\\"\\n (input)=\\\"updateWorkflowInput($index, 'title', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"input.description || ''\\\"\\n (input)=\\\"updateWorkflowInput($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.data-type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"input.schema.dataType || 'string'\\\"\\n (change)=\\\"updateWorkflowInputSchema($index, 'dataType', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.default-value' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.fields.default-value-placeholder' | translate | async\\\"\\n [value]=\\\"input.schema.defaultValue || ''\\\"\\n (input)=\\\"updateWorkflowInputSchema($index, 'defaultValue', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [checked]=\\\"getInputIsRequired(input)\\\"\\n (change)=\\\"updateWorkflowInputValidation($index, $any($event.target).checked)\\\" />\\n <span>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.required' | translate | async }}</span>\\n </label>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Outputs Tab -->\\n @if (activeSettingsTab() === 'outputs') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.outputs.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowOutput()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.outputs.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().outputs.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.outputs.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.outputs.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (output of workflowSettings().outputs; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowOutput($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.outputs.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"result\\\" [value]=\\\"output.name\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"Result\\\" [value]=\\\"output.title\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'title', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.outputs.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"output.description || ''\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.data-type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"output.schema.dataType || 'string'\\\"\\n (change)=\\\"updateWorkflowOutputSchema($index, 'dataType', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Variables Tab -->\\n @if (activeSettingsTab() === 'variables') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.variables.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowVariable()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.variables.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().variables.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.variables.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.variables.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (variable of workflowSettings().variables; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowVariable($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"tempData\\\" [value]=\\\"variable.name\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"variable.typeName\\\"\\n (change)=\\\"updateWorkflowVariable($index, 'typeName', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"variable.description || ''\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.initial-value' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.fields.initial-value-placeholder' | translate | async\\\"\\n [value]=\\\"variable.value || ''\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'value', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Advanced Tab -->\\n @if (activeSettingsTab() === 'advanced') {\\n <div class=\\\"settings-section\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.advanced.title' | translate | async }}</h3>\\n\\n <!-- Versioning -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u0646\\u0633\\u062E\\u0647\\u200C\\u0628\\u0646\\u062F\\u06CC (Versioning)</h4>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>Version</label>\\n <input type=\\\"number\\\" class=\\\"form-input\\\" min=\\\"1\\\" [(ngModel)]=\\\"workflowSettings().version\\\" />\\n <small>\\u0634\\u0645\\u0627\\u0631\\u0647 \\u0646\\u0633\\u062E\\u0647 workflow (1, 2, 3, ...)</small>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\" style=\\\"margin-top: 1.8rem\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().isLatest\\\" />\\n <span>\\u0622\\u062E\\u0631\\u06CC\\u0646 \\u0646\\u0633\\u062E\\u0647 (Is Latest)</span>\\n </label>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\" style=\\\"margin-top: 1.8rem\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().isPublished\\\" />\\n <span>\\u0645\\u0646\\u062A\\u0634\\u0631 \\u0634\\u062F\\u0647 (Published)</span>\\n </label>\\n </div>\\n </div>\\n </div>\\n\\n <!-- Options -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u062A\\u0646\\u0638\\u06CC\\u0645\\u0627\\u062A (Options)</h4>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().usableAsActivity\\\" />\\n <span>\\u0642\\u0627\\u0628\\u0644 \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0628\\u0647 \\u0639\\u0646\\u0648\\u0627\\u0646 Activity</span>\\n </label>\\n <small>\\u0627\\u06CC\\u0646 workflow \\u0645\\u06CC\\u200C\\u062A\\u0648\\u0627\\u0646\\u062F \\u0628\\u0647 \\u0639\\u0646\\u0648\\u0627\\u0646 \\u06CC\\u06A9 activity \\u062F\\u0631 workflow \\u0647\\u0627\\u06CC \\u062F\\u06CC\\u06AF\\u0631 \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0634\\u0648\\u062F</small>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().autoUpdateConsumingWorkflows\\\" />\\n <span>\\u0628\\u0647\\u200C\\u0631\\u0648\\u0632\\u0631\\u0633\\u0627\\u0646\\u06CC \\u062E\\u0648\\u062F\\u06A9\\u0627\\u0631 workflows \\u0645\\u0635\\u0631\\u0641\\u200C\\u06A9\\u0646\\u0646\\u062F\\u0647</span>\\n </label>\\n <small>workflow \\u0647\\u0627\\u06CC\\u06CC \\u06A9\\u0647 \\u0627\\u0632 \\u0627\\u06CC\\u0646 workflow \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0645\\u06CC\\u200C\\u06A9\\u0646\\u0646\\u062F \\u0628\\u0647 \\u0635\\u0648\\u0631\\u062A \\u062E\\u0648\\u062F\\u06A9\\u0627\\u0631 \\u0628\\u0647\\u200C\\u0631\\u0648\\u0632 \\u0645\\u06CC\\u200C\\u0634\\u0648\\u0646\\u062F</small>\\n </div>\\n </div>\\n\\n <!-- Metadata -->\\n <div class=\\\"advanced-group\\\">\\n <h4>Metadata</h4>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>Tool Version</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"1.0.0\\\"\\n [(ngModel)]=\\\"workflowSettings().toolVersion\\\" />\\n <small>\\u0646\\u0633\\u062E\\u0647 \\u0627\\u0628\\u0632\\u0627\\u0631 \\u0633\\u0627\\u0632\\u0646\\u062F\\u0647</small>\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>Provider Name</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"WorkflowStudio\\\"\\n [(ngModel)]=\\\"workflowSettings().providerName\\\" />\\n <small>\\u0646\\u0627\\u0645 \\u0627\\u0628\\u0632\\u0627\\u0631 \\u0633\\u0627\\u0632\\u0646\\u062F\\u0647</small>\\n </div>\\n </div>\\n </div>\\n\\n <!-- Outcomes -->\\n <div class=\\\"advanced-group\\\">\\n <h4>Workflow Outcomes</h4>\\n <div class=\\\"form-group\\\">\\n <label>Possible Outcomes</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"Done, Success, Failed (\\u062C\\u062F\\u0627 \\u0634\\u062F\\u0647 \\u0628\\u0627 \\u06A9\\u0627\\u0645\\u0627)\\\"\\n [value]=\\\"workflowSettings().outcomes.join(', ')\\\"\\n (input)=\\\"updateOutcomes($any($event.target).value)\\\" />\\n <small>\\u0646\\u062A\\u0627\\u06CC\\u062C \\u0645\\u0645\\u06A9\\u0646 \\u06A9\\u0647 \\u0627\\u06CC\\u0646 workflow \\u0645\\u06CC\\u200C\\u062A\\u0648\\u0627\\u0646\\u062F \\u0628\\u0631\\u06AF\\u0631\\u062F\\u0627\\u0646\\u062F (\\u0645\\u062B\\u0644\\u0627\\u064B: Done, Success, Failed)</small>\\n </div>\\n <div class=\\\"outcomes-preview\\\">\\n @for (outcome of workflowSettings().outcomes; track outcome) {\\n <span class=\\\"outcome-chip\\\">{{ outcome }}</span>\\n }\\n </div>\\n </div>\\n\\n <!-- Export Preview -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u062E\\u0631\\u0648\\u062C\\u06CC \\u0646\\u0647\\u0627\\u06CC\\u06CC (WorkflowDefinition)</h4>\\n <small>\\u0627\\u06CC\\u0646 \\u0633\\u0627\\u062E\\u062A\\u0627\\u0631 \\u062F\\u0642\\u06CC\\u0642\\u0627\\u064B \\u0645\\u0637\\u0627\\u0628\\u0642 \\u0628\\u0627 WorkflowDefinition \\u0627\\u0633\\u062A \\u0648 \\u062F\\u0631 \\u062F\\u06CC\\u062A\\u0627\\u0628\\u06CC\\u0633 \\u0630\\u062E\\u06CC\\u0631\\u0647 \\u0645\\u06CC\\u200C\\u0634\\u0648\\u062F</small>\\n <div class=\\\"export-info\\\">\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Definition ID:</span>\\n <code>{{ workflowSettings().definitionId || '(\\u062E\\u0627\\u0644\\u06CC)' }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Name:</span>\\n <code>{{ workflowSettings().name || '(\\u062E\\u0627\\u0644\\u06CC)' }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Version:</span>\\n <code>v{{ workflowSettings().version }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Inputs:</span>\\n <code>{{ workflowSettings().inputs.length }} items</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Outputs:</span>\\n <code>{{ workflowSettings().outputs.length }} items</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Variables:</span>\\n <code>{{ workflowSettings().variables.length }} items</code>\\n </div>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n\\n <!-- Modal Footer -->\\n <div class=\\\"settings-modal-footer\\\">\\n <ax-button [text]=\\\"'@workflow-management:workflow-studio.settings.actions.cancel' | translate | async\\\" color=\\\"secondary\\\" size=\\\"md\\\" (onClick)=\\\"closeWorkflowSettings()\\\"> </ax-button>\\n <ax-button [text]=\\\"'@workflow-management:workflow-studio.settings.actions.save' | translate | async\\\" color=\\\"primary\\\" size=\\\"md\\\" (onClick)=\\\"saveWorkflowSettings()\\\"> </ax-button>\\n </div>\\n </div>\\n </div>\\n }\\n\\n <!-- Workflow Execution Dialog -->\\n @if (showExecutionDialog()) {\\n <div class=\\\"execution-dialog-overlay\\\" (click)=\\\"closeExecutionDialog()\\\">\\n <div class=\\\"execution-dialog\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Dialog Header -->\\n <div class=\\\"execution-dialog-header\\\">\\n <div class=\\\"header-content\\\">\\n <i class=\\\"fa-light fa-play-circle\\\"></i>\\n <div class=\\\"header-info\\\">\\n <h2>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.title' | translate |\\n async }}</h2>\\n <p>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.description' | translate\\n | async }}</p>\\n </div>\\n </div>\\n <button class=\\\"close-btn\\\" (click)=\\\"closeExecutionDialog()\\\" [disabled]=\\\"isExecuting()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <!-- Dialog Body -->\\n <div class=\\\"execution-dialog-body\\\">\\n <!-- Workflow Info Panel (Before Execution) -->\\n @if (!workflowInstanceState()) {\\n <div class=\\\"workflow-info-panel\\\">\\n <div class=\\\"start-section\\\">\\n <div class=\\\"start-illustration\\\">\\n <i class=\\\"fa-light fa-rocket\\\"></i>\\n </div>\\n <h3>{{ '@workflow-management:test-pages.workflow-studio.messages.info.ready-to-execute' | translate |\\n async }}</h3>\\n <p>{{ '@workflow-management:test-pages.workflow-studio.messages.info.click-to-start' | translate | async\\n }}</p>\\n <ax-button\\n [text]=\\\"'@workflow-management:test-pages.workflow-studio.actions.start-execution.title' | translate | async\\\"\\n color=\\\"success\\\" size=\\\"lg\\\" (onClick)=\\\"startWorkflowExecution()\\\">\\n </ax-button>\\n </div>\\n </div>\\n }\\n\\n\\n <!-- Custom UI for Registration -->\\n @if (false) {\\n <div class=\\\"registration-ui\\\">\\n <div class=\\\"registration-card\\\">\\n <div class=\\\"registration-icon\\\">\\n <i class=\\\"fa-light fa-user-circle\\\"></i>\\n </div>\\n <h3>\\u0641\\u0631\\u0622\\u06CC\\u0646\\u062F \\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645</h3>\\n <p class=\\\"registration-desc\\\">\\n \\u0627\\u06CC\\u0646 \\u0641\\u0644\\u0648 \\u0634\\u0627\\u0645\\u0644 \\u0686\\u0646\\u062F \\u0645\\u0631\\u062D\\u0644\\u0647 \\u0627\\u0633\\u062A \\u06A9\\u0647 \\u062F\\u0627\\u062F\\u0647\\u200C\\u0647\\u0627\\u06CC \\u06A9\\u0627\\u0631\\u0628\\u0631 \\u0631\\u0627 \\u062C\\u0645\\u0639\\u200C\\u0622\\u0648\\u0631\\u06CC \\u06A9\\u0631\\u062F\\u0647 \\u0648 \\u062F\\u0631 \\u0646\\u0647\\u0627\\u06CC\\u062A \\u062D\\u0633\\u0627\\u0628 \\u06A9\\u0627\\u0631\\u0628\\u0631\\u06CC \\u0627\\u06CC\\u062C\\u0627\\u062F \\u0645\\u06CC\\u200C\\u06A9\\u0646\\u062F.\\n </p>\\n\\n @if (workflowInstanceState()?.status === 'running') {\\n <div class=\\\"registration-progress\\\">\\n <div class=\\\"progress-spinner\\\">\\n <i class=\\\"fa-light fa-spinner-third fa-spin\\\"></i>\\n </div>\\n <p>\\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627\\u06CC \\u0645\\u0631\\u0627\\u062D\\u0644 \\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645...</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'finished') {\\n <div class=\\\"registration-success\\\">\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n <h4>\\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645 \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u0627\\u0646\\u062C\\u0627\\u0645 \\u0634\\u062F!</h4>\\n <p>\\u062D\\u0633\\u0627\\u0628 \\u06A9\\u0627\\u0631\\u0628\\u0631\\u06CC \\u0634\\u0645\\u0627 \\u0627\\u06CC\\u062C\\u0627\\u062F \\u0634\\u062F \\u0648 \\u0628\\u0647 \\u0632\\u0648\\u062F\\u06CC \\u0628\\u0647 \\u062F\\u0627\\u0634\\u0628\\u0648\\u0631\\u062F \\u0645\\u0646\\u062A\\u0642\\u0644 \\u062E\\u0648\\u0627\\u0647\\u06CC\\u062F \\u0634\\u062F.</p>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Default Execution View -->\\n @if (workflowInstanceState()) {\\n <div class=\\\"default-execution-view\\\">\\n <div class=\\\"execution-status\\\">\\n @if (workflowInstanceState()?.status === 'running') {\\n <div class=\\\"status-running\\\">\\n <i class=\\\"fa-light fa-spinner-third fa-spin\\\"></i>\\n <h3>\\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627...</h3>\\n <p>Workflow \\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627 \\u0627\\u0633\\u062A. \\u0644\\u0637\\u0641\\u0627\\u064B \\u0635\\u0628\\u0631 \\u06A9\\u0646\\u06CC\\u062F.</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'finished') {\\n <div class=\\\"status-finished\\\">\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n <h3>\\u0627\\u062C\\u0631\\u0627 \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u062A\\u06A9\\u0645\\u06CC\\u0644 \\u0634\\u062F</h3>\\n <p>Workflow \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u0627\\u062C\\u0631\\u0627 \\u0634\\u062F \\u0648 \\u062A\\u0645\\u0627\\u0645 Activities \\u0627\\u0646\\u062C\\u0627\\u0645 \\u0634\\u062F\\u0646\\u062F.</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'error') {\\n <div class=\\\"status-error\\\">\\n <i class=\\\"fa-light fa-times-circle\\\"></i>\\n <h3>\\u062E\\u0637\\u0627 \\u062F\\u0631 \\u0627\\u062C\\u0631\\u0627</h3>\\n <p>{{ workflowInstanceState()?.error }}</p>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Execution Logs Panel -->\\n @if (workflowInstanceState() && executionLogs().length > 0) {\\n <div class=\\\"execution-logs-panel\\\">\\n <h3><i class=\\\"fa-light fa-terminal\\\"></i> \\u0644\\u0627\\u06AF\\u200C\\u0647\\u0627\\u06CC \\u0627\\u062C\\u0631\\u0627</h3>\\n <div class=\\\"logs-container-compact\\\">\\n @for (log of executionLogs(); track $index) {\\n <div class=\\\"log-item-compact\\\" [class]=\\\"'log-' + log.level\\\">\\n <span class=\\\"log-time\\\">{{ log.timestamp | date: 'HH:mm:ss' }}</span>\\n <span class=\\\"log-icon\\\">\\n @switch (log.level) {\\n @case ('info') {\\n <i class=\\\"fa-light fa-info-circle\\\"></i>\\n }\\n @case ('success') {\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n }\\n @case ('warning') {\\n <i class=\\\"fa-light fa-exclamation-triangle\\\"></i>\\n }\\n @case ('error') {\\n <i class=\\\"fa-light fa-times-circle\\\"></i>\\n }\\n }\\n </span>\\n <span class=\\\"log-message\\\">{{ log.message }}</span>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n\\n <!-- Dialog Footer -->\\n <div class=\\\"execution-dialog-footer\\\">\\n <div class=\\\"footer-info\\\">\\n @if (workflowInstanceState()?.startTime) {\\n <span class=\\\"time-info\\\">\\n <i class=\\\"fa-light fa-clock\\\"></i>\\n \\u0634\\u0631\\u0648\\u0639: {{ workflowInstanceState()!.startTime | date: 'HH:mm:ss' }}\\n </span>\\n }\\n @if (workflowInstanceState()?.endTime) {\\n <span class=\\\"time-info\\\">\\n <i class=\\\"fa-light fa-flag-checkered\\\"></i>\\n \\u067E\\u0627\\u06CC\\u0627\\u0646: {{ workflowInstanceState()!.endTime | date: 'HH:mm:ss' }}\\n </span>\\n }\\n </div>\\n <div class=\\\"footer-actions\\\">\\n <ax-button\\n [text]=\\\"(workflowInstanceState() ? '@general:actions.close.title' : '@general:actions.cancel.title') | translate | async\\\"\\n color=\\\"secondary\\\" size=\\\"md\\\" [disabled]=\\\"isExecuting()\\\" (onClick)=\\\"closeExecutionDialog()\\\">\\n </ax-button>\\n </div>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </axp-page-content>\\n</axp-page-layout>\", styles: [\".sidebar-header .toggle-btn{padding:.5rem;margin-left:auto;background:transparent;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;cursor:pointer;transition:all .2s}.sidebar-header .toggle-btn:hover{background:#f8fafc;border-color:#8b5cf6;color:#8b5cf6}.sidebar-header .toggle-btn i{font-size:.875rem}.sidebar-toggle-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:100;padding:1rem .5rem;background:#fff;border:1px solid #e2e8f0;border-radius:8px;color:#8b5cf6;cursor:pointer;box-shadow:0 4px 12px #0000001a;transition:all .3s}.sidebar-toggle-btn:hover{background:#8b5cf6;color:#fff;box-shadow:0 8px 24px #8b5cf64d;transform:translateY(-50%) scale(1.1)}.sidebar-toggle-btn.left{left:0;border-left:none;border-radius:0 8px 8px 0}.sidebar-toggle-btn.right{right:0;border-right:none;border-radius:8px 0 0 8px}.sidebar-toggle-btn i{font-size:1.25rem;display:block}.properties-header .header-actions{display:flex;gap:.5rem;margin-left:auto}.properties-header .header-btn{padding:.375rem .5rem;background:transparent;border:1px solid #e2e8f0;border-radius:4px;color:#64748b;cursor:pointer;transition:all .2s}.properties-header .header-btn:hover{background:#f8fafc;border-color:#8b5cf6;color:#8b5cf6}.properties-header .header-btn i{font-size:.75rem}.connections-list{margin-top:.75rem}.connection-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;margin-bottom:.5rem;font-size:.875rem}.connection-item i{color:#8b5cf6}.connection-item span{flex:1;color:#1e293b}.connection-item .remove-btn{padding:.25rem .375rem;background:transparent;border:1px solid #e2e8f0;border-radius:4px;color:#ef4444;cursor:pointer;transition:all .2s}.connection-item .remove-btn:hover{background:#fef2f2;border-color:#ef4444}.connection-item .remove-btn i{font-size:.75rem;color:inherit}.property-editor{margin-top:.75rem}.property-editor .property-row label{display:flex;align-items:center;gap:.5rem;justify-content:space-between}.property-editor .property-row label .property-type-badge{padding:.125rem .375rem;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;font-size:.625rem;font-weight:400;color:#64748b;text-transform:lowercase;font-family:JetBrains Mono,monospace}.property-editor .property-row select{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;background:#fff;cursor:pointer;transition:all .2s}.property-editor .property-row select:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.property-editor .property-row textarea{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.75rem;font-family:JetBrains Mono,monospace;color:#1e293b;resize:vertical;transition:all .2s}.property-editor .property-row textarea:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.workflow-studio{display:flex;flex-direction:column;height:100vh;background:#f8fafc;overflow:hidden}.workflow-popup .popup-header{text-align:center;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:2px solid #e2e8f0}.workflow-popup .popup-header h3{margin:0 0 .5rem;color:#1e293b;font-size:1.5rem;font-weight:700}.workflow-popup .popup-header p{margin:0;color:#64748b;font-size:.95rem}.workflow-popup .popup-body{max-height:60vh;overflow-y:auto;padding:0 .5rem}.workflow-popup .popup-body h4{margin:1.5rem 0 .75rem;color:#374151;font-size:1.1rem;font-weight:600;display:flex;align-items:center;gap:.5rem}.workflow-popup .popup-body ul{margin:0;padding-left:1.5rem}.workflow-popup .popup-body ul li{margin-bottom:.5rem;color:#4b5563}.workflow-popup .popup-body ul li strong{color:#1f2937}.workflow-popup .workflow-info{background:#f8fafc;padding:1rem;border-radius:8px;border:1px solid #e2e8f0}.workflow-popup .workflow-variables{background:#fef3c7;padding:1rem;border-radius:8px;border:1px solid #f59e0b}.workflow-popup .workflow-flow{background:#ecfdf5;padding:1rem;border-radius:8px;border:1px solid #10b981}.workflow-popup .workflow-flow .flow-steps{display:flex;flex-direction:column;gap:.75rem}.workflow-popup .workflow-flow .flow-steps .flow-step{display:flex;align-items:center;gap:.75rem;padding:.5rem;background:#fff;border-radius:6px;border:1px solid #d1d5db}.workflow-popup .workflow-flow .flow-steps .flow-step .step-number{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:#3b82f6;color:#fff;border-radius:50%;font-size:.8rem;font-weight:600}.workflow-popup .workflow-flow .flow-steps .flow-step .step-text{color:#374151;font-weight:500}.workflow-popup .workflow-json{background:#1f2937;padding:1rem;border-radius:8px;border:1px solid #374151}.workflow-popup .workflow-json .json-preview{background:transparent;color:#e5e7eb;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.8rem;line-height:1.4;margin:0;white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto}.workflow-popup .popup-footer{text-align:center;margin-top:1.5rem;padding-top:1rem;border-top:1px solid #e2e8f0}.workflow-popup .popup-footer .btn{padding:.75rem 1.5rem;background:#3b82f6;color:#fff;border:none;border-radius:6px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:.5rem;transition:background-color .2s}.workflow-popup .popup-footer .btn:hover{background:#2563eb}.workflow-popup .popup-footer .btn i{font-size:.9rem}.view-workflow-link{color:#3b82f6;text-decoration:none;font-size:.85rem;margin-left:.5rem;transition:color .2s}.view-workflow-link:hover{color:#1d4ed8;text-decoration:underline}.studio-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:#fff;border-bottom:1px solid #e2e8f0;box-shadow:0 1px 3px #0000000d}.studio-header .header-title{display:flex;align-items:center;gap:.75rem}.studio-header .header-title i{font-size:1.75rem;color:#8b5cf6}.studio-header .header-title h1{margin:0;font-size:1.5rem;font-weight:700;color:#1e293b}.studio-header .header-title .badge{padding:.25rem .75rem;background:#8b5cf6;color:#fff;border-radius:12px;font-size:.75rem;font-weight:600}.studio-header .header-actions{display:flex;gap:.75rem;align-items:center}.samples-dropdown{position:relative}.samples-dropdown .samples-menu{position:absolute;top:calc(100% + .5rem);left:0;min-width:320px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 10px 25px #0000001a;z-index:1000;max-height:400px;overflow-y:auto}.samples-dropdown .samples-menu .sample-item{padding:.875rem 1rem;display:flex;align-items:flex-start;gap:.75rem;cursor:pointer;border-bottom:1px solid #f1f5f9;transition:all .2s}.samples-dropdown .samples-menu .sample-item:last-child{border-bottom:none}.samples-dropdown .samples-menu .sample-item:hover{background:#f8fafc;transform:translate(4px)}.samples-dropdown .samples-menu .sample-item i{font-size:1.25rem;margin-top:.125rem;color:#8b5cf6}.samples-dropdown .samples-menu .sample-item .sample-info{display:flex;flex-direction:column;gap:.25rem;flex:1}.samples-dropdown .samples-menu .sample-item .sample-info strong{color:#1e293b;font-size:.875rem;font-weight:600}.samples-dropdown .samples-menu .sample-item .sample-info span{color:#64748b;font-size:.75rem;line-height:1.4}.studio-body{display:grid;grid-template-columns:1fr;gap:0;flex:1;overflow:hidden;transition:grid-template-columns .3s ease}.studio-body.sidebar-hidden,.studio-body.properties-hidden,.studio-body.sidebar-hidden.properties-hidden{grid-template-columns:1fr}.studio-sidebar{background:#fff;border-right:1px solid #e2e8f0;display:flex;flex-direction:column;overflow:hidden}.studio-sidebar .sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:.5rem}.studio-sidebar .sidebar-header i{font-size:1.25rem;color:#8b5cf6}.studio-sidebar .sidebar-header h3{flex:1;margin:0;font-size:1.125rem;font-weight:600;color:#1e293b}.activities-tree{flex:1;overflow-y:auto;padding:.5rem}.category-section{margin-bottom:.5rem}.category-section .category-header{display:flex;align-items:center;gap:.5rem;padding:.75rem;border-radius:8px;cursor:pointer;transition:all .2s;background:#f8fafc}.category-section .category-header:hover{background:#f1f5f9}.category-section .category-header.active{background:#ede9fe}.category-section .category-header.active>i:first-child{color:#8b5cf6}.category-section .category-header>i:first-child{font-size:.875rem;color:#94a3b8;transition:transform .2s,color .2s}.category-section .category-header>i:nth-child(2){font-size:1.125rem}.category-section .category-header span{flex:1;font-weight:600;font-size:.875rem;color:#334155}.category-section .category-header .count{flex:none;padding:.125rem .5rem;background:#fff;border-radius:10px;font-size:.75rem;font-weight:600;color:#64748b;border:1px solid #e2e8f0}.activities-list{padding:.5rem 0 .5rem 1.5rem;display:flex;flex-direction:column;gap:.5rem;animation:slideDown .3s ease}.activities-list .activities-header{padding:.5rem .75rem;margin-bottom:.5rem}.activities-list .activities-header h4{margin:0;font-size:.875rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.activity-card{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:.875rem;margin-bottom:.75rem;transition:all .2s}.activity-card:hover{border-color:#8b5cf6;box-shadow:0 4px 12px #8b5cf61a;transform:translateY(-1px)}.activity-card .activity-info{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:.5rem}.activity-card .activity-info>i{font-size:1.5rem;color:#8b5cf6;margin-top:.125rem}.activity-card .activity-info .activity-details{flex:1;display:flex;flex-direction:column;gap:.25rem}.activity-card .activity-info .activity-details strong{font-size:.875rem;color:#1e293b}.activity-card .activity-info .activity-details small{font-size:.75rem;color:#64748b;line-height:1.4}.activity-card .activity-info .activity-details code{font-size:.75rem;color:#8b5cf6;background:#f3f0ff;padding:.125rem .375rem;border-radius:4px;width:fit-content}.activity-card .copy-btn{float:right;padding:.375rem .75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s;color:#64748b}.activity-card .copy-btn:hover{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.activity-card .copy-btn i{font-size:.875rem}.activity-card .activity-properties{margin-top:.75rem;padding-top:.75rem;border-top:1px solid #f1f5f9}.activity-card .activity-properties .properties-title{display:block;font-size:.75rem;font-weight:600;color:#64748b;margin-bottom:.5rem}.activity-card .activity-properties .property-item{display:flex;align-items:center;gap:.5rem;padding:.25rem 0;font-size:.75rem}.activity-card .activity-properties .property-item code{color:#1e293b;background:#f8fafc;padding:.125rem .375rem;border-radius:3px}.activity-card .activity-properties .property-item .property-type{color:#64748b;font-style:italic}.activity-card .activity-properties .property-item .required{color:#ef4444;font-weight:700}.studio-editor{display:flex;flex-direction:column;background:#1e293b;overflow:hidden}.studio-editor .editor-header{padding:1rem 1.25rem;background:#0f172a;display:flex;align-items:center;gap:.5rem}.studio-editor .editor-header i{font-size:1.125rem;color:#8b5cf6}.studio-editor .editor-header h3{margin:0;font-size:1rem;font-weight:600;color:#e2e8f0}.studio-editor axp-page-toolbar .editor-tabs{display:flex;gap:.5rem;background:transparent}.studio-editor axp-page-toolbar .editor-tabs .tab-btn{padding:.5rem 1rem;background:transparent;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:.5rem}.studio-editor axp-page-toolbar .editor-tabs .tab-btn i{font-size:.875rem}.studio-editor axp-page-toolbar .editor-tabs .tab-btn:hover{background:#f8fafc;border-color:#cbd5e1;color:#475569}.studio-editor axp-page-toolbar .editor-tabs .tab-btn.active{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.studio-editor .editor-content{flex:1;display:flex;overflow:hidden}.studio-editor .json-tab{flex:1;display:flex;flex-direction:column}.studio-editor .json-editor{flex:1;padding:1.5rem;background:#1e293b;color:#e2e8f0;border:none;outline:none;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.875rem;line-height:1.6;resize:none;overflow:auto}.studio-editor .json-editor::placeholder{color:#475569}.studio-editor .json-editor::-webkit-scrollbar{width:10px;height:10px}.studio-editor .json-editor::-webkit-scrollbar-track{background:#0f172a}.studio-editor .json-editor::-webkit-scrollbar-thumb{background:#475569;border-radius:5px}.studio-editor .json-editor::-webkit-scrollbar-thumb:hover{background:#64748b}.studio-editor .visual-tab{flex:1;display:flex;background:#f8fafc;position:relative}.studio-editor .visual-canvas{flex:1;display:flex;flex-direction:column;overflow:hidden}.studio-editor .visual-canvas .canvas-toolbar{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:#fff;border-bottom:1px solid #e2e8f0}.studio-editor .visual-canvas .canvas-toolbar .tool-btn{padding:.5rem .75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;cursor:pointer;transition:all .2s}.studio-editor .visual-canvas .canvas-toolbar .tool-btn:hover{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.studio-editor .visual-canvas .canvas-toolbar .tool-btn i{font-size:.875rem}.studio-editor .visual-canvas .canvas-toolbar .tool-info{flex:1;display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:#64748b}.studio-editor .visual-canvas .canvas-toolbar .tool-info i{font-size:1rem;color:#8b5cf6}.studio-editor .visual-canvas .canvas-area{flex:1;position:relative;background:linear-gradient(90deg,#e5e7eb 1px,transparent 1px),linear-gradient(#e5e7eb 1px,transparent 1px);background-size:20px 20px;overflow:auto;min-height:600px}.studio-editor .visual-canvas .connections-layer{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1}.studio-editor .visual-canvas .connection-line{stroke:#64748b;stroke-width:2;fill:none;opacity:.6;cursor:pointer;pointer-events:stroke;transition:all .2s}.studio-editor .visual-canvas .connection-line:hover{stroke:#ef4444;stroke-width:3;opacity:1}.studio-editor .visual-canvas .visual-node{position:absolute;width:150px;background:#fff;border:2px solid #e2e8f0;border-radius:8px;box-shadow:0 2px 8px #0000001a;cursor:move;transition:all .2s;z-index:2}.studio-editor .visual-canvas .visual-node:hover{border-color:#8b5cf6;box-shadow:0 4px 16px #8b5cf633;transform:translateY(-2px)}.studio-editor .visual-canvas .visual-node.selected{border-color:#8b5cf6;border-width:3px;box-shadow:0 0 0 3px #8b5cf633}.studio-editor .visual-canvas .visual-node .node-header{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:linear-gradient(135deg,#8b5cf6,#7c3aed);color:#fff;border-radius:6px 6px 0 0;font-size:.875rem;font-weight:600}.studio-editor .visual-canvas .visual-node .node-header i{font-size:1rem}.studio-editor .visual-canvas .visual-node .node-header span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.studio-editor .visual-canvas .visual-node .node-header .node-delete{padding:.25rem;background:#fff3;border:none;border-radius:4px;color:#fff;cursor:pointer;transition:all .2s}.studio-editor .visual-canvas .visual-node .node-header .node-delete:hover{background:#ef4444cc}.studio-editor .visual-canvas .visual-node .node-header .node-delete i{font-size:.75rem}.studio-editor .visual-canvas .visual-node .node-body{padding:.75rem}.studio-editor .visual-canvas .visual-node .node-body small{display:block;font-size:.75rem;color:#64748b;text-align:center}.studio-editor .visual-canvas .visual-node .node-connectors{position:relative}.studio-editor .visual-canvas .visual-node .node-connectors .connector{position:absolute;width:12px;height:12px;background:#8b5cf6;border:2px solid white;border-radius:50%;cursor:pointer;transition:all .2s;z-index:10}.studio-editor .visual-canvas .visual-node .node-connectors .connector:hover{transform:scale(1.3);box-shadow:0 0 0 3px #8b5cf64d}.studio-editor .visual-canvas .visual-node .node-connectors .connector-in{top:-50px;left:50%;transform:translate(-50%);background:#3b82f6}.studio-editor .visual-canvas .visual-node .node-connectors .connector-out{bottom:-6px;left:50%;transform:translate(-50%);background:#8b5cf6}.studio-editor .visual-canvas .visual-node .node-connectors .connector-out.active{background:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcomes-container{position:absolute;bottom:-60px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:8px;background:#fff;padding:8px;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px #00000026;min-width:120px;z-index:100}.studio-editor .visual-canvas .visual-node .node-connectors .outcomes-container:before{content:\\\"\\\";position:absolute;top:-8px;left:50%;transform:translate(-50%);width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid white;filter:drop-shadow(0 -2px 2px rgba(0,0,0,.05))}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s;position:relative}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector:hover{background:#f1f5f9;border-color:#8b5cf6;transform:translate(2px)}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector.active{background:#fef2f2;border-color:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector.active .outcome-dot{background:#ef4444;box-shadow:0 0 0 3px #ef444433}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector .outcome-label{font-size:.75rem;font-weight:600;color:#475569;-webkit-user-select:none;user-select:none;flex:1}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector .outcome-dot{width:10px;height:10px;background:#8b5cf6;border:2px solid white;border-radius:50%;transition:all .2s;flex-shrink:0}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=\\\"200\\\"] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Done] .outcome-dot{background:#10b981}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=\\\"404\\\"] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Failed] .outcome-dot{background:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Timeout] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Cancelled] .outcome-dot{background:#f59e0b}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Then] .outcome-dot{background:#3b82f6}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Else] .outcome-dot{background:#64748b}.studio-editor .visual-canvas .canvas-empty-state{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:#94a3b8;pointer-events:none}.studio-editor .visual-canvas .canvas-empty-state i{font-size:4rem;margin-bottom:1rem;opacity:.5}.studio-editor .visual-canvas .canvas-empty-state p{margin:0 0 .5rem;font-size:1rem;font-weight:500}.studio-editor .visual-canvas .canvas-empty-state small{font-size:.875rem;opacity:.8}.studio-editor .properties-panel{width:280px;background:#fff;border-left:1px solid #e2e8f0;display:flex;flex-direction:column}.studio-editor .properties-panel .properties-header{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid #e2e8f0}.studio-editor .properties-panel .properties-header i{font-size:1.125rem;color:#8b5cf6}.studio-editor .properties-panel .properties-header h4{flex:1;margin:0;font-size:.875rem;font-weight:600;color:#1e293b}.studio-editor .properties-panel .properties-header button{padding:.25rem .5rem;background:transparent;border:none;color:#64748b;cursor:pointer;transition:color .2s}.studio-editor .properties-panel .properties-header button:hover{color:#ef4444}.studio-editor .properties-panel .properties-body{flex:1;padding:1rem;overflow-y:auto}.studio-editor .properties-panel .properties-body .property-row{margin-bottom:1rem}.studio-editor .properties-panel .properties-body .property-row label{display:block;font-size:.75rem;font-weight:600;color:#64748b;margin-bottom:.375rem;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .property-row input{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;transition:all .2s}.studio-editor .properties-panel .properties-body .property-row input:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.studio-editor .properties-panel .properties-body .property-row input:disabled{background:#f8fafc;color:#94a3b8;cursor:not-allowed}.studio-editor .properties-panel .properties-body .properties-divider{height:1px;background:#e2e8f0;margin:1.5rem 0}.studio-editor .properties-panel .properties-body h5{margin:0 0 .5rem;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .properties-hint{display:block;font-size:.75rem;color:#94a3b8;margin-bottom:.75rem}.studio-editor .properties-panel .properties-body .properties-json{margin:.75rem 0 0;padding:.75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;color:#1e293b;overflow-x:auto}.studio-editor .properties-panel .properties-body .no-properties{margin:.75rem 0 0;padding:1rem;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:6px;text-align:center;font-size:.75rem;color:#94a3b8}.studio-editor .properties-panel .properties-body .connections-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;font-size:.75rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item.outcome-connection{border-left-width:3px}.studio-editor .properties-panel .properties-body .connections-list .connection-item i{color:#64748b;font-size:.875rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item span{flex:1;color:#1e293b;font-weight:500}.studio-editor .properties-panel .properties-body .connections-list .connection-item .outcome-badge{padding:.25rem .5rem;border-radius:4px;color:#fff;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn{padding:.25rem;background:transparent;border:none;color:#ef4444;cursor:pointer;border-radius:4px;transition:all .2s}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn:hover{background:#fee2e2}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn i{font-size:.75rem;color:inherit}.studio-editor .properties-panel .properties-body .outcomes-info{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;background:#fff;border:2px solid;border-radius:6px;font-size:.75rem;font-weight:600;color:#1e293b;transition:all .2s}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag:hover{transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag .outcome-dot{width:8px;height:8px;border-radius:50%}.studio-result{display:flex;flex-direction:column;background:#fff;border-left:1px solid #e2e8f0;overflow:hidden}.studio-result .result-header{padding:1rem 1.25rem;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:.5rem}.studio-result .result-header i{font-size:1.125rem;color:#10b981}.studio-result .result-header h3{flex:1;margin:0;font-size:1rem;font-weight:600;color:#1e293b}.studio-result .result-header .clear-btn{padding:.375rem .75rem;background:#fee2e2;color:#dc2626;border:none;border-radius:6px;cursor:pointer;font-size:.75rem;font-weight:500;transition:all .2s}.studio-result .result-header .clear-btn:hover{background:#fecaca}.studio-result .result-header .clear-btn i{font-size:.75rem;color:inherit}.studio-result .result-body{flex:1;overflow-y:auto;padding:1rem}.logs-container{display:flex;flex-direction:column;gap:.5rem}.log-item{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem;background:#f8fafc;border-left:3px solid #cbd5e1;border-radius:6px;font-size:.875rem}.log-item.log-info{border-left-color:#3b82f6;background:#eff6ff}.log-item.log-info .log-icon{color:#3b82f6}.log-item.log-success{border-left-color:#10b981;background:#f0fdf4}.log-item.log-success .log-icon{color:#10b981}.log-item.log-warning{border-left-color:#f59e0b;background:#fffbeb}.log-item.log-warning .log-icon{color:#f59e0b}.log-item.log-error{border-left-color:#ef4444;background:#fef2f2}.log-item.log-error .log-icon{color:#ef4444}.log-item .log-time{font-family:JetBrains Mono,monospace;font-size:.75rem;color:#64748b;min-width:80px}.log-item .log-icon{font-size:1rem}.log-item .log-message{flex:1;color:#1e293b}.log-item .log-data-toggle{padding:.25rem .5rem;background:transparent;border:1px solid #cbd5e1;border-radius:4px;cursor:pointer;transition:all .2s}.log-item .log-data-toggle:hover{background:#fff}.log-item .log-data-toggle i{font-size:.75rem;color:#64748b}.log-data{margin:.5rem 0 0;padding:1rem;background:#0f172a;color:#e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;overflow-x:auto}.settings-modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:9999;padding:2rem;animation:fadeIn .2s ease}.settings-modal{background:#fff;border-radius:12px;box-shadow:0 20px 60px #0000004d;width:100%;max-width:900px;max-height:90vh;display:flex;flex-direction:column;animation:slideUp .3s ease}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.settings-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.5rem 2rem;border-bottom:1px solid #e2e8f0}.settings-modal-header .header-title{display:flex;align-items:center;gap:.75rem}.settings-modal-header .header-title i{font-size:1.5rem;color:#8b5cf6}.settings-modal-header .header-title h2{margin:0;font-size:1.25rem;font-weight:700;color:#1e293b}.settings-modal-header .close-btn{padding:.5rem;background:transparent;border:none;color:#64748b;cursor:pointer;border-radius:6px;transition:all .2s}.settings-modal-header .close-btn:hover{background:#f1f5f9;color:#ef4444}.settings-modal-header .close-btn i{font-size:1.25rem}.settings-modal-body{flex:1;display:flex;flex-direction:column;overflow:hidden}.settings-tabs{display:flex;gap:.5rem;padding:1rem 2rem 0;border-bottom:1px solid #e2e8f0}.settings-tabs .tab-btn{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.25rem;background:transparent;border:none;border-bottom:2px solid transparent;color:#64748b;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;position:relative}.settings-tabs .tab-btn:hover{color:#8b5cf6;background:#f8fafc}.settings-tabs .tab-btn.active{color:#8b5cf6;border-bottom-color:#8b5cf6}.settings-tabs .tab-btn i{font-size:1rem}.settings-tabs .tab-btn .badge{padding:.125rem .5rem;background:#8b5cf6;color:#fff;border-radius:10px;font-size:.7rem;font-weight:600}.settings-content{flex:1;overflow-y:auto;padding:2rem}.settings-section h3{margin:0 0 1.5rem;font-size:1rem;font-weight:600;color:#1e293b}.settings-section .section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem}.settings-section .section-header h3{margin:0}.settings-section .section-header .add-btn{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#8b5cf6;color:#fff;border:none;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.settings-section .section-header .add-btn:hover{background:#7c3aed;transform:translateY(-1px);box-shadow:0 4px 12px #8b5cf64d}.settings-section .section-header .add-btn i{font-size:.875rem}.form-group{margin-bottom:1.25rem}.form-group label{display:block;font-size:.875rem;font-weight:600;color:#475569;margin-bottom:.5rem}.form-group small{display:block;font-size:.75rem;color:#94a3b8;margin-top:.375rem}.form-group.checkbox-group{margin-bottom:0}.form-group.checkbox-group label{display:flex;align-items:center;gap:.5rem;cursor:pointer;margin-bottom:0}.form-group.checkbox-group label input[type=checkbox]{width:18px;height:18px;cursor:pointer}.form-group.checkbox-group label span{font-size:.875rem;font-weight:500}.form-group.flex-1{flex:1}.form-row{display:flex;gap:1rem;align-items:flex-start}.form-input,.form-select,.form-textarea{width:100%;padding:.625rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;transition:all .2s}.form-input:focus,.form-select:focus,.form-textarea:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.form-input::placeholder,.form-select::placeholder,.form-textarea::placeholder{color:#cbd5e1}.form-textarea{resize:vertical;font-family:inherit}.items-list{display:flex;flex-direction:column;gap:1rem}.item-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;transition:all .2s}.item-card:hover{border-color:#cbd5e1;box-shadow:0 2px 8px #0000000d}.item-card .item-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:#f1f5f9;border-bottom:1px solid #e2e8f0}.item-card .item-header .item-number{font-size:.75rem;font-weight:700;color:#8b5cf6;padding:.25rem .5rem;background:#fff;border-radius:4px}.item-card .item-header .remove-btn{padding:.375rem .625rem;background:transparent;border:none;color:#ef4444;cursor:pointer;border-radius:4px;transition:all .2s}.item-card .item-header .remove-btn:hover{background:#fee2e2}.item-card .item-header .remove-btn i{font-size:.875rem}.item-card .item-body{padding:1rem}.advanced-group{margin-bottom:2rem;padding-bottom:2rem;border-bottom:1px solid #e2e8f0}.advanced-group:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.advanced-group h4{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.5px}.outcomes-preview{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.outcomes-preview .outcome-chip{display:inline-flex;align-items:center;padding:.375rem .75rem;background:#f1f5f9;border:1px solid #cbd5e1;border-radius:6px;font-size:.75rem;font-weight:600;color:#475569}.export-info{margin-top:1rem;padding:1rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px}.export-info .info-row{display:flex;align-items:center;gap:.75rem;padding:.5rem 0;border-bottom:1px solid #e2e8f0}.export-info .info-row:last-child{border-bottom:none;padding-bottom:0}.export-info .info-row .label{font-size:.75rem;font-weight:600;color:#64748b;min-width:120px}.export-info .info-row code{flex:1;padding:.25rem .5rem;background:#fff;border:1px solid #e2e8f0;border-radius:4px;font-size:.75rem;color:#1e293b;font-family:JetBrains Mono,monospace}.settings-modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:1rem;padding:1.5rem 2rem;border-top:1px solid #e2e8f0;background:#f8fafc}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 1rem;text-align:center;color:#94a3b8}.empty-state i{font-size:3rem;margin-bottom:1rem}.empty-state p{margin:0;font-size:.875rem}.final-result{margin-top:1.5rem;padding-top:1.5rem;border-top:2px solid #e2e8f0}.final-result .result-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem;background:#f8fafc;border-radius:8px;margin-bottom:1rem;cursor:pointer;transition:all .2s}.final-result .result-header:hover{background:#f1f5f9;transform:translate(-2px)}.final-result .result-header h4{display:flex;align-items:center;gap:.5rem;margin:0;font-size:.875rem;font-weight:600;color:#475569;text-transform:uppercase}.final-result .result-header h4 i{font-size:.875rem;transition:transform .2s}.final-result .result-header .toggle-hint{font-size:.75rem;color:#94a3b8}.final-result .result-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:1rem}.final-result .result-card .result-row{display:flex;align-items:center;gap:.75rem;padding:.5rem 0}.final-result .result-card .result-row:not(:last-child){border-bottom:1px solid #e2e8f0}.final-result .result-card .result-row strong{font-size:.875rem;color:#475569;min-width:100px}.final-result .result-card .result-row .badge{padding:.25rem .75rem;border-radius:12px;font-size:.75rem;font-weight:600}.final-result .result-card .result-row .badge.badge-running{background:#dbeafe;color:#1e40af}.final-result .result-card .result-row .badge.badge-finished{background:#d1fae5;color:#065f46}.final-result .result-card .result-row .badge.badge-cancelled{background:#fed7aa;color:#92400e}.final-result .result-card .result-row .badge.badge-faulted{background:#fee2e2;color:#991b1b}.final-result .result-card .result-row pre{margin:.5rem 0 0;padding:.75rem;background:#0f172a;color:#e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;overflow-x:auto;width:100%}.activities-list::-webkit-scrollbar,.result-body::-webkit-scrollbar{width:8px}.activities-list::-webkit-scrollbar-track,.result-body::-webkit-scrollbar-track{background:#f1f5f9}.activities-list::-webkit-scrollbar-thumb,.result-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}.activities-list::-webkit-scrollbar-thumb:hover,.result-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.activity-card{cursor:grab}.activity-card:active{cursor:grabbing}.activity-card[draggable=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.visual-node[draggable=true]{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.visual-node:active{cursor:grabbing}.canvas-area[data-drag-over=true]{background-color:#8b5cf60d}.connector:hover{transform:scale(1.3);box-shadow:0 0 0 3px #8b5cf64d}.connector-out.active{animation:pulse 1s infinite}@keyframes pulse{0%,to{box-shadow:0 0 0 3px #ef44444d}50%{box-shadow:0 0 0 6px #ef44441a}}@keyframes slideDown{0%{opacity:0;max-height:0}to{opacity:1;max-height:2000px}}.execution-dialog-overlay{position:fixed;inset:0;background:#000000b3;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn .2s ease}.execution-dialog{width:90vw;max-width:1200px;height:90vh;background:#fff;border-radius:16px;box-shadow:0 25px 50px #0000004d;display:flex;flex-direction:column;overflow:hidden;animation:slideUp .3s ease}.execution-dialog-header{padding:1.5rem 2rem;background:linear-gradient(135deg,#8b5cf6,#7c3aed);color:#fff;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.execution-dialog-header .header-content{display:flex;align-items:center;gap:1rem;flex:1}.execution-dialog-header .header-content>i{font-size:2.5rem;opacity:.9}.execution-dialog-header .header-content .header-info h2{margin:0;font-size:1.75rem;font-weight:700}.execution-dialog-header .header-content .header-info p{margin:.25rem 0 0;opacity:.9;font-size:.95rem}.execution-dialog-header .close-btn{background:#fff3;border:none;width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;color:#fff;font-size:1.25rem}.execution-dialog-header .close-btn:hover:not(:disabled){background:#ffffff4d;transform:scale(1.05)}.execution-dialog-header .close-btn:disabled{opacity:.5;cursor:not-allowed}.execution-dialog-body{flex:1;overflow-y:auto;padding:2rem;background:#f8fafc}.execution-dialog-footer{padding:1rem 2rem;background:#fff;border-top:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.execution-dialog-footer .footer-info{display:flex;gap:1.5rem}.execution-dialog-footer .footer-info .time-info{display:flex;align-items:center;gap:.5rem;color:#64748b;font-size:.875rem}.execution-dialog-footer .footer-info .time-info i{color:#8b5cf6}.execution-dialog-footer .footer-actions{display:flex;gap:.75rem}.workflow-info-panel{background:#fff;border-radius:12px;padding:2rem;box-shadow:0 4px 6px #0000000d}.workflow-info-panel .info-section{margin-bottom:2rem}.workflow-info-panel .info-section h3{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;color:#1e293b;font-size:1.25rem}.workflow-info-panel .info-section h3 i{color:#8b5cf6}.workflow-info-panel .info-section .description{color:#475569;line-height:1.7;margin:0}.workflow-info-panel .info-section .features-list{list-style:none;padding:0;margin:0;display:grid;gap:.75rem}.workflow-info-panel .info-section .features-list li{display:flex;align-items:center;gap:.75rem;padding:.75rem;background:#f8fafc;border-radius:8px;color:#334155}.workflow-info-panel .info-section .features-list li i{color:#10b981;font-size:1.125rem}.workflow-info-panel .start-section{text-align:center;padding:2rem;background:linear-gradient(135deg,#f0fdf4,#dcfce7);border-radius:12px;border:2px dashed #10b981}.workflow-info-panel .start-section .start-illustration{margin-bottom:1rem}.workflow-info-panel .start-section .start-illustration i{font-size:4rem;color:#10b981;animation:float 3s ease-in-out infinite}.workflow-info-panel .start-section h3{margin:0 0 .5rem;color:#1e293b;font-size:1.5rem}.workflow-info-panel .start-section p{margin:0 0 1.5rem;color:#64748b}.state-machine-ui .issue-tracker{background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 2px #0000000d}.state-machine-ui .issue-tracker .issue-header-main{padding:1.5rem 2rem 1rem;border-bottom:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#64748b;margin-bottom:.75rem}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .project-name{color:#3b82f6;font-weight:600}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .separator{color:#94a3b8}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .issue-key{color:#64748b}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title{display:flex;align-items:center;gap:.75rem}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .type-badge{padding:.375rem .75rem;border-radius:4px;font-size:.8125rem;font-weight:600;display:flex;align-items:center;gap:.375rem;background:#eff6ff;color:#3b82f6}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .type-badge i{font-size:1rem}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .issue-main-title{margin:0;font-size:1.5rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-action-bar{padding:.75rem 2rem;background:#f8fafc;border-bottom:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left{display:flex;gap:.5rem}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn{padding:.5rem 1rem;border:1px solid #cbd5e1;border-radius:4px;background:#fff;font-weight:500;font-size:.875rem;cursor:pointer;transition:all .2s;color:#334155}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn:hover:not(:disabled){background:#f1f5f9;border-color:#94a3b8}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn:disabled{opacity:.5;cursor:not-allowed}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-primary{background:#3b82f6;color:#fff;border-color:#3b82f6}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-primary:hover:not(:disabled){background:#2563eb}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-success{background:#10b981;color:#fff;border-color:#10b981}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-success:hover:not(:disabled){background:#059669}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-warning{background:#f59e0b;color:#fff;border-color:#f59e0b}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-warning:hover:not(:disabled){background:#d97706}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-right .more-actions-btn{padding:.5rem 1rem;border:1px solid #cbd5e1;border-radius:4px;background:#fff;font-weight:500;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;color:#334155;transition:all .2s}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-right .more-actions-btn:hover{background:#f1f5f9}.state-machine-ui .issue-tracker .issue-main-content{display:grid;grid-template-columns:320px 1fr;gap:2rem;padding:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section{margin-bottom:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row{display:flex;padding:.625rem 0;border-bottom:1px solid #f1f5f9}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row:last-child{border-bottom:none}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row label{min-width:100px;font-size:.8125rem;color:#64748b;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value i{font-size:1rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .status-badge{padding:.25rem .625rem;border-radius:4px;color:#fff;font-weight:600;font-size:.75rem;text-transform:uppercase}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .view-workflow-link{color:#3b82f6;font-size:.8125rem;text-decoration:none;margin-left:.5rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .view-workflow-link:hover{text-decoration:underline}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .user-avatar{width:24px;height:24px;border-radius:50%;background:#8b5cf6;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.75rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz{background:#f8fafc;border-radius:8px;padding:1.5rem;border:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz h3{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state{display:flex;flex-direction:column;align-items:center;gap:.375rem;opacity:.4;transition:opacity .2s}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.active,.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.completed{opacity:1}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state .state-circle{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:.875rem;box-shadow:0 2px 4px #0000001a}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state .state-name{font-size:.6875rem;color:#64748b;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.active .state-name{color:#1e293b;font-weight:600}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-arrow{color:#cbd5e1;font-size:.75rem;margin:0 .25rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section{margin-bottom:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section h3,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section .description-content,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .description-content{padding:1rem;background:#f8fafc;border-radius:6px;border:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section .description-content p,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .description-content p{margin:0;color:#475569;line-height:1.7;font-size:.875rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline{display:flex;flex-direction:column;gap:1rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item{display:flex;gap:.75rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-avatar{width:32px;height:32px;border-radius:50%;background:#8b5cf6;color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.875rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content{flex:1;padding-bottom:1rem;border-bottom:1px solid #f1f5f9}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header{font-size:.875rem;color:#334155;line-height:1.6;margin-bottom:.375rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header strong{color:#1e293b;font-weight:600}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header .activity-action{color:#64748b}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-meta{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;color:#94a3b8}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-meta .activity-label{color:#8b5cf6;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item:last-child .activity-content{border-bottom:none;padding-bottom:0}.registration-ui{display:flex;justify-content:center;align-items:center;min-height:400px}.registration-ui .registration-card{background:#fff;border-radius:12px;padding:3rem;box-shadow:0 4px 6px #0000000d;text-align:center;max-width:500px}.registration-ui .registration-card .registration-icon{margin-bottom:1.5rem}.registration-ui .registration-card .registration-icon i{font-size:5rem;color:#8b5cf6}.registration-ui .registration-card h3{margin:0 0 .75rem;color:#1e293b;font-size:1.75rem;font-weight:700}.registration-ui .registration-card .registration-desc{margin:0 0 2rem;color:#64748b;line-height:1.7}.registration-ui .registration-card .registration-progress{padding:2rem;background:#fef3c7;border-radius:8px}.registration-ui .registration-card .registration-progress .progress-spinner{margin-bottom:1rem}.registration-ui .registration-card .registration-progress .progress-spinner i{font-size:3rem;color:#f59e0b}.registration-ui .registration-card .registration-progress p{margin:0;color:#92400e;font-weight:500}.registration-ui .registration-card .registration-success{padding:2rem;background:#f0fdf4;border-radius:8px}.registration-ui .registration-card .registration-success i{font-size:4rem;color:#10b981;margin-bottom:1rem}.registration-ui .registration-card .registration-success h4{margin:0 0 .5rem;color:#064e3b;font-size:1.5rem;font-weight:700}.registration-ui .registration-card .registration-success p{margin:0;color:#065f46}.default-execution-view{display:flex;justify-content:center;align-items:center;min-height:400px}.default-execution-view .execution-status{text-align:center;padding:3rem;background:#fff;border-radius:12px;box-shadow:0 4px 6px #0000000d;min-width:400px}.default-execution-view .execution-status i{font-size:5rem;margin-bottom:1.5rem}.default-execution-view .execution-status h3{margin:0 0 .75rem;font-size:1.75rem;font-weight:700}.default-execution-view .execution-status p{margin:0;color:#64748b;line-height:1.7}.default-execution-view .execution-status .status-running i{color:#f59e0b}.default-execution-view .execution-status .status-finished i{color:#10b981}.default-execution-view .execution-status .status-error i{color:#ef4444}.execution-logs-panel{margin-top:2rem;background:#fff;border-radius:12px;padding:1.5rem;box-shadow:0 4px 6px #0000000d}.execution-logs-panel h3{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;color:#1e293b;font-size:1.125rem}.execution-logs-panel h3 i{color:#8b5cf6}.execution-logs-panel .logs-container-compact{max-height:300px;overflow-y:auto;background:#f8fafc;border-radius:8px;padding:.75rem}.execution-logs-panel .logs-container-compact .log-item-compact{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-radius:6px;margin-bottom:.5rem;font-size:.875rem}.execution-logs-panel .logs-container-compact .log-item-compact:last-child{margin-bottom:0}.execution-logs-panel .logs-container-compact .log-item-compact .log-time{font-family:Courier New,monospace;color:#64748b;font-size:.8125rem;min-width:70px}.execution-logs-panel .logs-container-compact .log-item-compact .log-icon{display:flex;align-items:center;justify-content:center;width:20px}.execution-logs-panel .logs-container-compact .log-item-compact .log-icon i{font-size:1rem}.execution-logs-panel .logs-container-compact .log-item-compact .log-message{flex:1;color:#334155}.execution-logs-panel .logs-container-compact .log-item-compact.log-info{background:#eff6ff}.execution-logs-panel .logs-container-compact .log-item-compact.log-info .log-icon i{color:#3b82f6}.execution-logs-panel .logs-container-compact .log-item-compact.log-success{background:#f0fdf4}.execution-logs-panel .logs-container-compact .log-item-compact.log-success .log-icon i{color:#10b981}.execution-logs-panel .logs-container-compact .log-item-compact.log-warning{background:#fffbeb}.execution-logs-panel .logs-container-compact .log-item-compact.log-warning .log-icon i{color:#f59e0b}.execution-logs-panel .logs-container-compact .log-item-compact.log-error{background:#fef2f2}.execution-logs-panel .logs-container-compact .log-item-compact.log-error .log-icon i{color:#ef4444}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgSelectOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.ɵNgSelectMultipleOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.NumberValueAccessor, selector: \"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]\" }, { kind: \"directive\", type: i1.CheckboxControlValueAccessor, selector: \"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.MinValidator, selector: \"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]\", inputs: [\"min\"] }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXButtonGroupModule }, { kind: \"component\", type: i3.AXButtonGroupComponent, selector: \"ax-button-group\", inputs: [\"disabled\", \"color\", \"look\", \"fitParent\", \"selection\"], outputs: [\"onBlur\", \"onFocus\", \"lookChange\", \"colorChange\", \"disabledChange\", \"onClick\", \"selectionChange\", \"selectedButtonChange\"] }, { kind: \"component\", type: i3.AXButtonGroupItemComponent, selector: \"ax-button-group-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i4.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXTextBoxModule }, { kind: \"ngmodule\", type: AXSelectBoxModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPThemeLayoutStartSideComponent, selector: \"axp-layout-page-start-side, axp-layout-start-side\" }, { kind: \"component\", type: AXMActivityCategoriesTreeComponent, selector: \"axp-activity-categories-tree\", outputs: [\"categoryClick\", \"activityClick\"] }, { kind: \"pipe\", type: i5.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.JsonPipe, name: \"json\" }, { kind: \"pipe\", type: i5.DatePipe, name: \"date\" }, { kind: \"pipe\", type: i6.AXTranslatorPipe, name: \"translate\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowStudioComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-workflow-studio', standalone: true, imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDecoratorModule,\n AXTextBoxModule,\n AXSelectBoxModule,\n AXTranslationModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutStartSideComponent,\n AXMActivityCategoriesTreeComponent\n ], providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: WorkflowStudioComponent,\n },\n ], template: \"<axp-page-layout>\\n <axp-layout-start-side>\\n <axp-activity-categories-tree (categoryClick)=\\\"onCategoryClick($event)\\\"\\n (activityClick)=\\\"onActivityClick($event)\\\"></axp-activity-categories-tree>\\n </axp-layout-start-side>\\n\\n <axp-page-toolbar>\\n <axp-layout-prefix>\\n <!-- Editor Tabs -->\\n <ax-button-group class=\\\"ax-sm\\\" [selection]=\\\"'single'\\\">\\n <ax-button-group-item (onClick)=\\\"switchTab('json')\\\" [selected]=\\\"activeTab() === 'json'\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-code\\\"></i>\\n </ax-prefix>\\n {{ '@workflow-management:workflow-studio.terms.json-editor' | translate | async }}\\n </ax-button-group-item>\\n <ax-button-group-item (onClick)=\\\"switchTab('visual')\\\" [selected]=\\\"activeTab() === 'visual'\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-diagram-project\\\"></i>\\n </ax-prefix>\\n {{ '@workflow-management:workflow-studio.terms.visual-designer' | translate | async }}\\n </ax-button-group-item>\\n </ax-button-group>\\n </axp-layout-prefix>\\n </axp-page-toolbar>\\n\\n <axp-page-content>\\n <div class=\\\"workflow-studio\\\">\\n <!-- Main Layout -->\\n <div class=\\\"studio-body\\\" [class.properties-hidden]=\\\"!showPropertiesPanel()\\\">\\n\\n <!-- Editor -->\\n <div class=\\\"studio-editor\\\">\\n <!-- Tab Content -->\\n <div class=\\\"editor-content\\\">\\n <!-- JSON Tab -->\\n @if (activeTab() === 'json') {\\n <div class=\\\"json-tab\\\">\\n <textarea class=\\\"json-editor\\\" [(ngModel)]=\\\"workflowJson\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.components.json-editor.placeholder' | translate | async\\\"\\n spellcheck=\\\"false\\\">\\n </textarea>\\n </div>\\n }\\n\\n <!-- Visual Tab -->\\n @if (activeTab() === 'visual') {\\n <div class=\\\"visual-tab\\\">\\n <!-- Canvas -->\\n <div class=\\\"visual-canvas\\\">\\n <div class=\\\"canvas-toolbar\\\">\\n <button class=\\\"tool-btn\\\" (click)=\\\"clearCanvas()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.canvas-toolbar.clear-canvas.title' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n <button class=\\\"tool-btn\\\" (click)=\\\"visualToJson()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.canvas-toolbar.convert-to-json.title' | translate | async\\\">\\n <i class=\\\"fa-light fa-code\\\"></i>\\n </button>\\n <span class=\\\"tool-info\\\">\\n <i class=\\\"fa-light fa-lightbulb\\\"></i>\\n <strong>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.hint' | translate | async }}</strong>\\n </span>\\n </div>\\n\\n <div class=\\\"canvas-area\\\" (drop)=\\\"onCanvasDrop($event)\\\" (dragover)=\\\"onCanvasDragOver($event)\\\"\\n (dragleave)=\\\"onCanvasDragLeave($event)\\\">\\n <!-- SVG for Connections -->\\n <svg class=\\\"connections-layer\\\">\\n <!-- Outcome-based Connections -->\\n @for (node of visualNodes(); track node.id) {\\n @if (node.outcomeConnections && node.outcomeConnections.length > 0) {\\n @for (conn of node.outcomeConnections; track conn.targetNodeId + conn.outcome) {\\n @let targetNode = findNodeById(conn.targetNodeId);\\n @if (targetNode) {\\n <g class=\\\"outcome-connection-group\\\">\\n <line [attr.x1]=\\\"node.position.x + 75\\\" [attr.y1]=\\\"node.position.y + 80\\\"\\n [attr.x2]=\\\"targetNode.position.x + 75\\\" [attr.y2]=\\\"targetNode.position.y - 50\\\"\\n class=\\\"connection-line outcome-line\\\" [attr.stroke]=\\\"getOutcomeColor(conn.outcome)\\\"\\n stroke-width=\\\"2.5\\\"\\n [attr.marker-end]=\\\"'url(#arrowhead-' + getOutcomeColorName(conn.outcome) + ')'\\\"\\n style=\\\"cursor: pointer\\\" (dblclick)=\\\"disconnectNodes(node.id, conn.targetNodeId, conn.outcome)\\\"\\n [attr.title]=\\\"'Outcome: ' + conn.outcome + ' (Double-click to remove)'\\\">\\n <title>{{ conn.outcome }} \\u2192 {{ targetNode.name }}</title>\\n </line>\\n <text [attr.x]=\\\"(node.position.x + targetNode.position.x) / 2 + 75\\\"\\n [attr.y]=\\\"(node.position.y + targetNode.position.y) / 2 + 15\\\" class=\\\"connection-label\\\"\\n text-anchor=\\\"middle\\\" [attr.fill]=\\\"getOutcomeColor(conn.outcome)\\\" font-size=\\\"11\\\"\\n font-weight=\\\"600\\\" pointer-events=\\\"none\\\">\\n {{ conn.outcome }}\\n </text>\\n </g>\\n }\\n }\\n } @else {\\n <!-- Simple Connections (backward compatibility) -->\\n @for (targetId of node.connections; track targetId) {\\n @let targetNode = findNodeById(targetId);\\n @if (targetNode) {\\n <line [attr.x1]=\\\"node.position.x + 75\\\" [attr.y1]=\\\"node.position.y + 40\\\"\\n [attr.x2]=\\\"targetNode.position.x + 75\\\" [attr.y2]=\\\"targetNode.position.y - 50\\\"\\n class=\\\"connection-line\\\" stroke=\\\"#64748b\\\" stroke-width=\\\"2\\\" marker-end=\\\"url(#arrowhead-default)\\\"\\n style=\\\"cursor: pointer\\\" (dblclick)=\\\"disconnectNodes(node.id, targetId)\\\"\\n title=\\\"Double-click \\u0628\\u0631\\u0627\\u06CC \\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <title>Double-click \\u0628\\u0631\\u0627\\u06CC \\u062D\\u0630\\u0641</title>\\n </line>\\n }\\n }\\n }\\n }\\n\\n <defs>\\n <!-- Default Arrow -->\\n <marker id=\\\"arrowhead-default\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#64748b\\\" />\\n </marker>\\n <!-- Success Arrow (Green) -->\\n <marker id=\\\"arrowhead-success\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#10b981\\\" />\\n </marker>\\n <!-- Error Arrow (Red) -->\\n <marker id=\\\"arrowhead-error\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#ef4444\\\" />\\n </marker>\\n <!-- Warning Arrow (Orange) -->\\n <marker id=\\\"arrowhead-warning\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#f59e0b\\\" />\\n </marker>\\n <!-- Info Arrow (Blue) -->\\n <marker id=\\\"arrowhead-info\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#3b82f6\\\" />\\n </marker>\\n </defs>\\n </svg>\\n\\n <!-- Nodes -->\\n @for (node of visualNodes(); track node.id) {\\n <div class=\\\"visual-node\\\" [class.selected]=\\\"selectedNode()?.id === node.id\\\"\\n [style.left.px]=\\\"node.position.x\\\" [style.top.px]=\\\"node.position.y\\\" [attr.data-node-id]=\\\"node.id\\\"\\n draggable=\\\"true\\\" (dragstart)=\\\"onNodeDragStart($event, node)\\\" (drag)=\\\"onNodeDrag($event, node)\\\"\\n (dragend)=\\\"onNodeDragEnd($event, node)\\\" (click)=\\\"selectNodeById(node)\\\">\\n <div class=\\\"node-header\\\">\\n <i [class]=\\\"node.icon\\\"></i>\\n <span>{{ node.name }}</span>\\n <button class=\\\"node-delete\\\" (click)=\\\"deleteNode(node.id); $event.stopPropagation()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <div class=\\\"node-body\\\">\\n <small>{{ node.type }}</small>\\n </div>\\n\\n <div class=\\\"node-connectors\\\">\\n <!-- Input Connector -->\\n <div class=\\\"connector connector-in\\\" title=\\\"Input\\\" (click)=\\\"onConnectorClick($event, node, 'in')\\\">\\n </div>\\n\\n <!-- Output Connectors - Multiple outcomes support -->\\n @if (node.outcomes && node.outcomes.length > 1) {\\n <!-- Multiple outcomes: show separate port for each -->\\n <div class=\\\"outcomes-container\\\">\\n @for (outcome of node.outcomes; track outcome; let idx = $index) {\\n <div class=\\\"outcome-connector\\\" [class.active]=\\\"\\n connectionSource?.node?.id === node.id && connectionSource?.outcome === outcome\\n \\\" [attr.data-outcome]=\\\"outcome\\\" [title]=\\\"'Output: ' + outcome\\\"\\n (click)=\\\"onOutcomeConnectorClick($event, node, outcome)\\\">\\n <span class=\\\"outcome-label\\\">{{ outcome }}</span>\\n <div class=\\\"outcome-dot\\\"></div>\\n </div>\\n }\\n </div>\\n } @else {\\n <!-- Single outcome: show simple output connector -->\\n <div class=\\\"connector connector-out\\\" [class.active]=\\\"connectionSource?.node?.id === node.id\\\"\\n title=\\\"Output\\\" (click)=\\\"onConnectorClick($event, node, 'out')\\\"></div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Empty State -->\\n @if (visualNodes().length === 0) {\\n <div class=\\\"canvas-empty-state\\\">\\n <i class=\\\"fa-light fa-diagram-project\\\"></i>\\n <p>Activity \\u0647\\u0627 \\u0631\\u0627 \\u0627\\u0632 \\u0633\\u0627\\u06CC\\u062F\\u0628\\u0627\\u0631 \\u0628\\u0647 \\u0627\\u06CC\\u0646\\u062C\\u0627 \\u0628\\u06A9\\u0634\\u06CC\\u062F</p>\\n <small>\\u06CC\\u0627 \\u0627\\u0632 \\u062A\\u0628 JSON\\u060C workflow \\u0631\\u0627 import \\u06A9\\u0646\\u06CC\\u062F</small>\\n </div>\\n }\\n </div>\\n </div>\\n\\n <!-- Properties Panel -->\\n @if (selectedNode() && showPropertiesPanel()) {\\n <div class=\\\"properties-panel\\\">\\n <div class=\\\"properties-header\\\">\\n <i class=\\\"fa-light fa-sliders\\\"></i>\\n <h4>{{ '@workflow-management:workflow-studio.components.properties-panel.title' | translate | async }}</h4>\\n <div class=\\\"header-actions\\\">\\n <button class=\\\"header-btn\\\" (click)=\\\"togglePropertiesPanel()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.close-panel' | translate | async\\\">\\n <i class=\\\"fa-light fa-angle-right\\\"></i>\\n </button>\\n <button class=\\\"header-btn\\\" (click)=\\\"selectedNode.set(null)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.close' | translate | async\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n </div>\\n <div class=\\\"properties-body\\\">\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.id' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.id\\\" disabled />\\n </div>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.type' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.type\\\" disabled />\\n </div>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.name' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.name\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, 'name', $any($event.target).value)\\\" />\\n </div>\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCE5 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.input-properties' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">{{ '@workflow-management:workflow-studio.components.properties-panel.sections.input-properties' | translate | async }} - \\u0645\\u0642\\u0627\\u062F\\u06CC\\u0631 \\u0631\\u0627 \\u062A\\u0646\\u0638\\u06CC\\u0645 \\u06A9\\u0646\\u06CC\\u062F</small>\\n\\n @if (hasProperties(selectedNode()!.properties)) {\\n <div class=\\\"property-editor\\\">\\n @for (key of Object.keys(selectedNode()!.properties); track key) {\\n <div class=\\\"property-row\\\">\\n <label>\\n {{ key }}\\n <span class=\\\"property-type-badge\\\">{{ typeof selectedNode()!.properties[key] }}</span>\\n </label>\\n\\n @if (typeof selectedNode()!.properties[key] === 'boolean') {\\n <select [value]=\\\"selectedNode()!.properties[key]\\\" (change)=\\\"\\n updateNodeProperty(selectedNode()!.id, key, $any($event.target).value === 'true')\\n \\\">\\n <option [value]=\\\"true\\\">True</option>\\n <option [value]=\\\"false\\\">False</option>\\n </select>\\n } @else if (typeof selectedNode()!.properties[key] === 'number') {\\n <input type=\\\"number\\\" [value]=\\\"selectedNode()!.properties[key]\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, key, +$any($event.target).value)\\\" />\\n } @else if (typeof selectedNode()!.properties[key] === 'object') {\\n <textarea rows=\\\"3\\\" [value]=\\\"JSON.stringify(selectedNode()!.properties[key], null, 2)\\\"\\n (input)=\\\"updateNodePropertyJSON(selectedNode()!.id, key, $any($event.target).value)\\\"></textarea>\\n } @else {\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.properties[key]\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, key, $any($event.target).value)\\\" />\\n }\\n </div>\\n }\\n </div>\\n } @else {\\n <p class=\\\"no-properties\\\">\\n {{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-properties' | translate | async }}\\n </p>\\n }\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCE4 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.output-variables' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u062E\\u0631\\u0648\\u062C\\u06CC \\u0648 \\u0645\\u062A\\u063A\\u06CC\\u0631\\u0647\\u0627</small>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.output-variable' | translate | async }}:</label>\\n <input type=\\\"text\\\" placeholder=\\\"\\u0645\\u062B\\u0644\\u0627\\u064B result\\\"\\n [value]=\\\"selectedNode()!.properties['outputVariable'] || ''\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, 'outputVariable', $any($event.target).value)\\\" />\\n </div>\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDD17 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.connections' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u0627\\u062A\\u0635\\u0627\\u0644\\u0627\\u062A \\u0627\\u06CC\\u0646 \\u0646\\u0648\\u062F</small>\\n\\n <!-- Outcome-based Connections -->\\n @if (selectedNode()!.outcomeConnections && selectedNode()!.outcomeConnections!.length > 0) {\\n <div class=\\\"connections-list\\\">\\n @for (conn of selectedNode()!.outcomeConnections!; track conn.targetNodeId + conn.outcome) {\\n @let targetNode = findNodeById(conn.targetNodeId);\\n @if (targetNode) {\\n <div class=\\\"connection-item outcome-connection\\\">\\n <span class=\\\"outcome-badge\\\" [style.background]=\\\"getOutcomeColor(conn.outcome)\\\">\\n {{ conn.outcome }}\\n </span>\\n <i class=\\\"fa-light fa-arrow-right\\\"></i>\\n <span>{{ targetNode.name }}</span>\\n <button class=\\\"remove-btn\\\"\\n (click)=\\\"disconnectNodes(selectedNode()!.id, conn.targetNodeId, conn.outcome)\\\"\\n title=\\\"\\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n }\\n }\\n </div>\\n } @else if (selectedNode()!.connections.length > 0) {\\n <!-- Simple Connections (fallback) -->\\n <div class=\\\"connections-list\\\">\\n @for (targetId of selectedNode()!.connections; track targetId) {\\n @let targetNode = findNodeById(targetId);\\n @if (targetNode) {\\n <div class=\\\"connection-item\\\">\\n <i class=\\\"fa-light fa-arrow-right\\\"></i>\\n <span>{{ targetNode.name }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"disconnectNodes(selectedNode()!.id, targetId)\\\"\\n title=\\\"\\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n }\\n }\\n </div>\\n } @else {\\n <p class=\\\"no-properties\\\">{{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-connections' | translate | async }}</p>\\n }\\n\\n <!-- Available Outcomes Info -->\\n @if (selectedNode()!.outcomes && selectedNode()!.outcomes!.length > 1) {\\n <div class=\\\"properties-divider\\\"></div>\\n <h5>\\uD83D\\uDCE4 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.available-outcomes' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u062E\\u0631\\u0648\\u062C\\u06CC\\u200C\\u0647\\u0627\\u06CC \\u0645\\u0648\\u062C\\u0648\\u062F \\u0628\\u0631\\u0627\\u06CC \\u0627\\u062A\\u0635\\u0627\\u0644</small>\\n <div class=\\\"outcomes-info\\\">\\n @for (outcome of selectedNode()!.outcomes!; track outcome) {\\n <span class=\\\"outcome-tag\\\" [style.borderColor]=\\\"getOutcomeColor(outcome)\\\">\\n <span class=\\\"outcome-dot\\\" [style.background]=\\\"getOutcomeColor(outcome)\\\"></span>\\n {{ outcome }}\\n </span>\\n }\\n </div>\\n }\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCDD {{ '@workflow-management:workflow-studio.components.properties-panel.sections.raw-json' | translate | async }}</h5>\\n <pre class=\\\"properties-json\\\">{{ selectedNode() | json }}</pre>\\n </div>\\n </div>\\n }\\n\\n <!-- Toggle Button for Properties (when closed) -->\\n @if (selectedNode() && !showPropertiesPanel()) {\\n <button class=\\\"sidebar-toggle-btn right\\\" (click)=\\\"togglePropertiesPanel()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.show-panel' | translate | async\\\">\\n <i class=\\\"fa-light fa-sliders\\\"></i>\\n </button>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n\\n </div>\\n\\n <!-- Workflow Settings Modal -->\\n @if (showWorkflowSettings()) {\\n <div class=\\\"settings-modal-overlay\\\" (click)=\\\"closeWorkflowSettings()\\\">\\n <div class=\\\"settings-modal\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Modal Header -->\\n <div class=\\\"settings-modal-header\\\">\\n <div class=\\\"header-title\\\">\\n <i class=\\\"fa-light fa-cog\\\"></i>\\n <h2>{{ '@workflow-management:workflow-studio.settings.title' | translate | async }}</h2>\\n </div>\\n <button class=\\\"close-btn\\\" (click)=\\\"closeWorkflowSettings()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <!-- Modal Body -->\\n <div class=\\\"settings-modal-body\\\">\\n <!-- Tabs Navigation -->\\n <div class=\\\"settings-tabs\\\">\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'general'\\\"\\n (click)=\\\"switchSettingsTab('general')\\\">\\n <i class=\\\"fa-light fa-info-circle\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.general' | translate | async }}\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'inputs'\\\"\\n (click)=\\\"switchSettingsTab('inputs')\\\">\\n <i class=\\\"fa-light fa-sign-in\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.inputs' | translate | async }}\\n @if (workflowSettings().inputs.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().inputs.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'outputs'\\\"\\n (click)=\\\"switchSettingsTab('outputs')\\\">\\n <i class=\\\"fa-light fa-sign-out\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.outputs' | translate | async }}\\n @if (workflowSettings().outputs.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().outputs.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'variables'\\\"\\n (click)=\\\"switchSettingsTab('variables')\\\">\\n <i class=\\\"fa-light fa-box\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.variables' | translate | async }}\\n @if (workflowSettings().variables.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().variables.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'advanced'\\\"\\n (click)=\\\"switchSettingsTab('advanced')\\\">\\n <i class=\\\"fa-light fa-cog\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.advanced' | translate | async }}\\n </button>\\n </div>\\n\\n <!-- Tab Content -->\\n <div class=\\\"settings-content\\\">\\n <!-- General Tab -->\\n @if (activeSettingsTab() === 'general') {\\n <div class=\\\"settings-section\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.general.title' | translate | async }}</h3>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.name.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.name.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().name\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().definitionId\\\" />\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.description' | translate | async }}</small>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.description.title' | translate | async }}</label>\\n <textarea class=\\\"form-textarea\\\" rows=\\\"4\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.description.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().description\\\"></textarea>\\n </div>\\n </div>\\n }\\n\\n <!-- Inputs Tab -->\\n @if (activeSettingsTab() === 'inputs') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.inputs.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowInput()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.inputs.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().inputs.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.inputs.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.inputs.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (input of workflowSettings().inputs; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowInput($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"userName\\\" [value]=\\\"input.name\\\"\\n (input)=\\\"updateWorkflowInput($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"User Name\\\" [value]=\\\"input.title\\\"\\n (input)=\\\"updateWorkflowInput($index, 'title', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"input.description || ''\\\"\\n (input)=\\\"updateWorkflowInput($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.data-type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"input.schema.dataType || 'string'\\\"\\n (change)=\\\"updateWorkflowInputSchema($index, 'dataType', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.default-value' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.fields.default-value-placeholder' | translate | async\\\"\\n [value]=\\\"input.schema.defaultValue || ''\\\"\\n (input)=\\\"updateWorkflowInputSchema($index, 'defaultValue', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [checked]=\\\"getInputIsRequired(input)\\\"\\n (change)=\\\"updateWorkflowInputValidation($index, $any($event.target).checked)\\\" />\\n <span>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.required' | translate | async }}</span>\\n </label>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Outputs Tab -->\\n @if (activeSettingsTab() === 'outputs') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.outputs.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowOutput()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.outputs.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().outputs.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.outputs.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.outputs.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (output of workflowSettings().outputs; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowOutput($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.outputs.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"result\\\" [value]=\\\"output.name\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"Result\\\" [value]=\\\"output.title\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'title', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.outputs.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"output.description || ''\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.data-type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"output.schema.dataType || 'string'\\\"\\n (change)=\\\"updateWorkflowOutputSchema($index, 'dataType', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Variables Tab -->\\n @if (activeSettingsTab() === 'variables') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.variables.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowVariable()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.variables.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().variables.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.variables.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.variables.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (variable of workflowSettings().variables; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowVariable($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"tempData\\\" [value]=\\\"variable.name\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"variable.typeName\\\"\\n (change)=\\\"updateWorkflowVariable($index, 'typeName', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"variable.description || ''\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.initial-value' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.fields.initial-value-placeholder' | translate | async\\\"\\n [value]=\\\"variable.value || ''\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'value', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Advanced Tab -->\\n @if (activeSettingsTab() === 'advanced') {\\n <div class=\\\"settings-section\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.advanced.title' | translate | async }}</h3>\\n\\n <!-- Versioning -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u0646\\u0633\\u062E\\u0647\\u200C\\u0628\\u0646\\u062F\\u06CC (Versioning)</h4>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>Version</label>\\n <input type=\\\"number\\\" class=\\\"form-input\\\" min=\\\"1\\\" [(ngModel)]=\\\"workflowSettings().version\\\" />\\n <small>\\u0634\\u0645\\u0627\\u0631\\u0647 \\u0646\\u0633\\u062E\\u0647 workflow (1, 2, 3, ...)</small>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\" style=\\\"margin-top: 1.8rem\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().isLatest\\\" />\\n <span>\\u0622\\u062E\\u0631\\u06CC\\u0646 \\u0646\\u0633\\u062E\\u0647 (Is Latest)</span>\\n </label>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\" style=\\\"margin-top: 1.8rem\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().isPublished\\\" />\\n <span>\\u0645\\u0646\\u062A\\u0634\\u0631 \\u0634\\u062F\\u0647 (Published)</span>\\n </label>\\n </div>\\n </div>\\n </div>\\n\\n <!-- Options -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u062A\\u0646\\u0638\\u06CC\\u0645\\u0627\\u062A (Options)</h4>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().usableAsActivity\\\" />\\n <span>\\u0642\\u0627\\u0628\\u0644 \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0628\\u0647 \\u0639\\u0646\\u0648\\u0627\\u0646 Activity</span>\\n </label>\\n <small>\\u0627\\u06CC\\u0646 workflow \\u0645\\u06CC\\u200C\\u062A\\u0648\\u0627\\u0646\\u062F \\u0628\\u0647 \\u0639\\u0646\\u0648\\u0627\\u0646 \\u06CC\\u06A9 activity \\u062F\\u0631 workflow \\u0647\\u0627\\u06CC \\u062F\\u06CC\\u06AF\\u0631 \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0634\\u0648\\u062F</small>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().autoUpdateConsumingWorkflows\\\" />\\n <span>\\u0628\\u0647\\u200C\\u0631\\u0648\\u0632\\u0631\\u0633\\u0627\\u0646\\u06CC \\u062E\\u0648\\u062F\\u06A9\\u0627\\u0631 workflows \\u0645\\u0635\\u0631\\u0641\\u200C\\u06A9\\u0646\\u0646\\u062F\\u0647</span>\\n </label>\\n <small>workflow \\u0647\\u0627\\u06CC\\u06CC \\u06A9\\u0647 \\u0627\\u0632 \\u0627\\u06CC\\u0646 workflow \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0645\\u06CC\\u200C\\u06A9\\u0646\\u0646\\u062F \\u0628\\u0647 \\u0635\\u0648\\u0631\\u062A \\u062E\\u0648\\u062F\\u06A9\\u0627\\u0631 \\u0628\\u0647\\u200C\\u0631\\u0648\\u0632 \\u0645\\u06CC\\u200C\\u0634\\u0648\\u0646\\u062F</small>\\n </div>\\n </div>\\n\\n <!-- Metadata -->\\n <div class=\\\"advanced-group\\\">\\n <h4>Metadata</h4>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>Tool Version</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"1.0.0\\\"\\n [(ngModel)]=\\\"workflowSettings().toolVersion\\\" />\\n <small>\\u0646\\u0633\\u062E\\u0647 \\u0627\\u0628\\u0632\\u0627\\u0631 \\u0633\\u0627\\u0632\\u0646\\u062F\\u0647</small>\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>Provider Name</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"WorkflowStudio\\\"\\n [(ngModel)]=\\\"workflowSettings().providerName\\\" />\\n <small>\\u0646\\u0627\\u0645 \\u0627\\u0628\\u0632\\u0627\\u0631 \\u0633\\u0627\\u0632\\u0646\\u062F\\u0647</small>\\n </div>\\n </div>\\n </div>\\n\\n <!-- Outcomes -->\\n <div class=\\\"advanced-group\\\">\\n <h4>Workflow Outcomes</h4>\\n <div class=\\\"form-group\\\">\\n <label>Possible Outcomes</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"Done, Success, Failed (\\u062C\\u062F\\u0627 \\u0634\\u062F\\u0647 \\u0628\\u0627 \\u06A9\\u0627\\u0645\\u0627)\\\"\\n [value]=\\\"workflowSettings().outcomes.join(', ')\\\"\\n (input)=\\\"updateOutcomes($any($event.target).value)\\\" />\\n <small>\\u0646\\u062A\\u0627\\u06CC\\u062C \\u0645\\u0645\\u06A9\\u0646 \\u06A9\\u0647 \\u0627\\u06CC\\u0646 workflow \\u0645\\u06CC\\u200C\\u062A\\u0648\\u0627\\u0646\\u062F \\u0628\\u0631\\u06AF\\u0631\\u062F\\u0627\\u0646\\u062F (\\u0645\\u062B\\u0644\\u0627\\u064B: Done, Success, Failed)</small>\\n </div>\\n <div class=\\\"outcomes-preview\\\">\\n @for (outcome of workflowSettings().outcomes; track outcome) {\\n <span class=\\\"outcome-chip\\\">{{ outcome }}</span>\\n }\\n </div>\\n </div>\\n\\n <!-- Export Preview -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u062E\\u0631\\u0648\\u062C\\u06CC \\u0646\\u0647\\u0627\\u06CC\\u06CC (WorkflowDefinition)</h4>\\n <small>\\u0627\\u06CC\\u0646 \\u0633\\u0627\\u062E\\u062A\\u0627\\u0631 \\u062F\\u0642\\u06CC\\u0642\\u0627\\u064B \\u0645\\u0637\\u0627\\u0628\\u0642 \\u0628\\u0627 WorkflowDefinition \\u0627\\u0633\\u062A \\u0648 \\u062F\\u0631 \\u062F\\u06CC\\u062A\\u0627\\u0628\\u06CC\\u0633 \\u0630\\u062E\\u06CC\\u0631\\u0647 \\u0645\\u06CC\\u200C\\u0634\\u0648\\u062F</small>\\n <div class=\\\"export-info\\\">\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Definition ID:</span>\\n <code>{{ workflowSettings().definitionId || '(\\u062E\\u0627\\u0644\\u06CC)' }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Name:</span>\\n <code>{{ workflowSettings().name || '(\\u062E\\u0627\\u0644\\u06CC)' }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Version:</span>\\n <code>v{{ workflowSettings().version }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Inputs:</span>\\n <code>{{ workflowSettings().inputs.length }} items</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Outputs:</span>\\n <code>{{ workflowSettings().outputs.length }} items</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Variables:</span>\\n <code>{{ workflowSettings().variables.length }} items</code>\\n </div>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n\\n <!-- Modal Footer -->\\n <div class=\\\"settings-modal-footer\\\">\\n <ax-button [text]=\\\"'@workflow-management:workflow-studio.settings.actions.cancel' | translate | async\\\" color=\\\"secondary\\\" size=\\\"md\\\" (onClick)=\\\"closeWorkflowSettings()\\\"> </ax-button>\\n <ax-button [text]=\\\"'@workflow-management:workflow-studio.settings.actions.save' | translate | async\\\" color=\\\"primary\\\" size=\\\"md\\\" (onClick)=\\\"saveWorkflowSettings()\\\"> </ax-button>\\n </div>\\n </div>\\n </div>\\n }\\n\\n <!-- Workflow Execution Dialog -->\\n @if (showExecutionDialog()) {\\n <div class=\\\"execution-dialog-overlay\\\" (click)=\\\"closeExecutionDialog()\\\">\\n <div class=\\\"execution-dialog\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Dialog Header -->\\n <div class=\\\"execution-dialog-header\\\">\\n <div class=\\\"header-content\\\">\\n <i class=\\\"fa-light fa-play-circle\\\"></i>\\n <div class=\\\"header-info\\\">\\n <h2>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.title' | translate |\\n async }}</h2>\\n <p>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.description' | translate\\n | async }}</p>\\n </div>\\n </div>\\n <button class=\\\"close-btn\\\" (click)=\\\"closeExecutionDialog()\\\" [disabled]=\\\"isExecuting()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <!-- Dialog Body -->\\n <div class=\\\"execution-dialog-body\\\">\\n <!-- Workflow Info Panel (Before Execution) -->\\n @if (!workflowInstanceState()) {\\n <div class=\\\"workflow-info-panel\\\">\\n <div class=\\\"start-section\\\">\\n <div class=\\\"start-illustration\\\">\\n <i class=\\\"fa-light fa-rocket\\\"></i>\\n </div>\\n <h3>{{ '@workflow-management:test-pages.workflow-studio.messages.info.ready-to-execute' | translate |\\n async }}</h3>\\n <p>{{ '@workflow-management:test-pages.workflow-studio.messages.info.click-to-start' | translate | async\\n }}</p>\\n <ax-button\\n [text]=\\\"'@workflow-management:test-pages.workflow-studio.actions.start-execution.title' | translate | async\\\"\\n color=\\\"success\\\" size=\\\"lg\\\" (onClick)=\\\"startWorkflowExecution()\\\">\\n </ax-button>\\n </div>\\n </div>\\n }\\n\\n\\n <!-- Custom UI for Registration -->\\n @if (false) {\\n <div class=\\\"registration-ui\\\">\\n <div class=\\\"registration-card\\\">\\n <div class=\\\"registration-icon\\\">\\n <i class=\\\"fa-light fa-user-circle\\\"></i>\\n </div>\\n <h3>\\u0641\\u0631\\u0622\\u06CC\\u0646\\u062F \\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645</h3>\\n <p class=\\\"registration-desc\\\">\\n \\u0627\\u06CC\\u0646 \\u0641\\u0644\\u0648 \\u0634\\u0627\\u0645\\u0644 \\u0686\\u0646\\u062F \\u0645\\u0631\\u062D\\u0644\\u0647 \\u0627\\u0633\\u062A \\u06A9\\u0647 \\u062F\\u0627\\u062F\\u0647\\u200C\\u0647\\u0627\\u06CC \\u06A9\\u0627\\u0631\\u0628\\u0631 \\u0631\\u0627 \\u062C\\u0645\\u0639\\u200C\\u0622\\u0648\\u0631\\u06CC \\u06A9\\u0631\\u062F\\u0647 \\u0648 \\u062F\\u0631 \\u0646\\u0647\\u0627\\u06CC\\u062A \\u062D\\u0633\\u0627\\u0628 \\u06A9\\u0627\\u0631\\u0628\\u0631\\u06CC \\u0627\\u06CC\\u062C\\u0627\\u062F \\u0645\\u06CC\\u200C\\u06A9\\u0646\\u062F.\\n </p>\\n\\n @if (workflowInstanceState()?.status === 'running') {\\n <div class=\\\"registration-progress\\\">\\n <div class=\\\"progress-spinner\\\">\\n <i class=\\\"fa-light fa-spinner-third fa-spin\\\"></i>\\n </div>\\n <p>\\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627\\u06CC \\u0645\\u0631\\u0627\\u062D\\u0644 \\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645...</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'finished') {\\n <div class=\\\"registration-success\\\">\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n <h4>\\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645 \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u0627\\u0646\\u062C\\u0627\\u0645 \\u0634\\u062F!</h4>\\n <p>\\u062D\\u0633\\u0627\\u0628 \\u06A9\\u0627\\u0631\\u0628\\u0631\\u06CC \\u0634\\u0645\\u0627 \\u0627\\u06CC\\u062C\\u0627\\u062F \\u0634\\u062F \\u0648 \\u0628\\u0647 \\u0632\\u0648\\u062F\\u06CC \\u0628\\u0647 \\u062F\\u0627\\u0634\\u0628\\u0648\\u0631\\u062F \\u0645\\u0646\\u062A\\u0642\\u0644 \\u062E\\u0648\\u0627\\u0647\\u06CC\\u062F \\u0634\\u062F.</p>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Default Execution View -->\\n @if (workflowInstanceState()) {\\n <div class=\\\"default-execution-view\\\">\\n <div class=\\\"execution-status\\\">\\n @if (workflowInstanceState()?.status === 'running') {\\n <div class=\\\"status-running\\\">\\n <i class=\\\"fa-light fa-spinner-third fa-spin\\\"></i>\\n <h3>\\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627...</h3>\\n <p>Workflow \\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627 \\u0627\\u0633\\u062A. \\u0644\\u0637\\u0641\\u0627\\u064B \\u0635\\u0628\\u0631 \\u06A9\\u0646\\u06CC\\u062F.</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'finished') {\\n <div class=\\\"status-finished\\\">\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n <h3>\\u0627\\u062C\\u0631\\u0627 \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u062A\\u06A9\\u0645\\u06CC\\u0644 \\u0634\\u062F</h3>\\n <p>Workflow \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u0627\\u062C\\u0631\\u0627 \\u0634\\u062F \\u0648 \\u062A\\u0645\\u0627\\u0645 Activities \\u0627\\u0646\\u062C\\u0627\\u0645 \\u0634\\u062F\\u0646\\u062F.</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'error') {\\n <div class=\\\"status-error\\\">\\n <i class=\\\"fa-light fa-times-circle\\\"></i>\\n <h3>\\u062E\\u0637\\u0627 \\u062F\\u0631 \\u0627\\u062C\\u0631\\u0627</h3>\\n <p>{{ workflowInstanceState()?.error }}</p>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Execution Logs Panel -->\\n @if (workflowInstanceState() && executionLogs().length > 0) {\\n <div class=\\\"execution-logs-panel\\\">\\n <h3><i class=\\\"fa-light fa-terminal\\\"></i> \\u0644\\u0627\\u06AF\\u200C\\u0647\\u0627\\u06CC \\u0627\\u062C\\u0631\\u0627</h3>\\n <div class=\\\"logs-container-compact\\\">\\n @for (log of executionLogs(); track $index) {\\n <div class=\\\"log-item-compact\\\" [class]=\\\"'log-' + log.level\\\">\\n <span class=\\\"log-time\\\">{{ log.timestamp | date: 'HH:mm:ss' }}</span>\\n <span class=\\\"log-icon\\\">\\n @switch (log.level) {\\n @case ('info') {\\n <i class=\\\"fa-light fa-info-circle\\\"></i>\\n }\\n @case ('success') {\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n }\\n @case ('warning') {\\n <i class=\\\"fa-light fa-exclamation-triangle\\\"></i>\\n }\\n @case ('error') {\\n <i class=\\\"fa-light fa-times-circle\\\"></i>\\n }\\n }\\n </span>\\n <span class=\\\"log-message\\\">{{ log.message }}</span>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n\\n <!-- Dialog Footer -->\\n <div class=\\\"execution-dialog-footer\\\">\\n <div class=\\\"footer-info\\\">\\n @if (workflowInstanceState()?.startTime) {\\n <span class=\\\"time-info\\\">\\n <i class=\\\"fa-light fa-clock\\\"></i>\\n \\u0634\\u0631\\u0648\\u0639: {{ workflowInstanceState()!.startTime | date: 'HH:mm:ss' }}\\n </span>\\n }\\n @if (workflowInstanceState()?.endTime) {\\n <span class=\\\"time-info\\\">\\n <i class=\\\"fa-light fa-flag-checkered\\\"></i>\\n \\u067E\\u0627\\u06CC\\u0627\\u0646: {{ workflowInstanceState()!.endTime | date: 'HH:mm:ss' }}\\n </span>\\n }\\n </div>\\n <div class=\\\"footer-actions\\\">\\n <ax-button\\n [text]=\\\"(workflowInstanceState() ? '@general:actions.close.title' : '@general:actions.cancel.title') | translate | async\\\"\\n color=\\\"secondary\\\" size=\\\"md\\\" [disabled]=\\\"isExecuting()\\\" (onClick)=\\\"closeExecutionDialog()\\\">\\n </ax-button>\\n </div>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </axp-page-content>\\n</axp-page-layout>\", styles: [\".sidebar-header .toggle-btn{padding:.5rem;margin-left:auto;background:transparent;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;cursor:pointer;transition:all .2s}.sidebar-header .toggle-btn:hover{background:#f8fafc;border-color:#8b5cf6;color:#8b5cf6}.sidebar-header .toggle-btn i{font-size:.875rem}.sidebar-toggle-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:100;padding:1rem .5rem;background:#fff;border:1px solid #e2e8f0;border-radius:8px;color:#8b5cf6;cursor:pointer;box-shadow:0 4px 12px #0000001a;transition:all .3s}.sidebar-toggle-btn:hover{background:#8b5cf6;color:#fff;box-shadow:0 8px 24px #8b5cf64d;transform:translateY(-50%) scale(1.1)}.sidebar-toggle-btn.left{left:0;border-left:none;border-radius:0 8px 8px 0}.sidebar-toggle-btn.right{right:0;border-right:none;border-radius:8px 0 0 8px}.sidebar-toggle-btn i{font-size:1.25rem;display:block}.properties-header .header-actions{display:flex;gap:.5rem;margin-left:auto}.properties-header .header-btn{padding:.375rem .5rem;background:transparent;border:1px solid #e2e8f0;border-radius:4px;color:#64748b;cursor:pointer;transition:all .2s}.properties-header .header-btn:hover{background:#f8fafc;border-color:#8b5cf6;color:#8b5cf6}.properties-header .header-btn i{font-size:.75rem}.connections-list{margin-top:.75rem}.connection-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;margin-bottom:.5rem;font-size:.875rem}.connection-item i{color:#8b5cf6}.connection-item span{flex:1;color:#1e293b}.connection-item .remove-btn{padding:.25rem .375rem;background:transparent;border:1px solid #e2e8f0;border-radius:4px;color:#ef4444;cursor:pointer;transition:all .2s}.connection-item .remove-btn:hover{background:#fef2f2;border-color:#ef4444}.connection-item .remove-btn i{font-size:.75rem;color:inherit}.property-editor{margin-top:.75rem}.property-editor .property-row label{display:flex;align-items:center;gap:.5rem;justify-content:space-between}.property-editor .property-row label .property-type-badge{padding:.125rem .375rem;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;font-size:.625rem;font-weight:400;color:#64748b;text-transform:lowercase;font-family:JetBrains Mono,monospace}.property-editor .property-row select{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;background:#fff;cursor:pointer;transition:all .2s}.property-editor .property-row select:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.property-editor .property-row textarea{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.75rem;font-family:JetBrains Mono,monospace;color:#1e293b;resize:vertical;transition:all .2s}.property-editor .property-row textarea:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.workflow-studio{display:flex;flex-direction:column;height:100vh;background:#f8fafc;overflow:hidden}.workflow-popup .popup-header{text-align:center;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:2px solid #e2e8f0}.workflow-popup .popup-header h3{margin:0 0 .5rem;color:#1e293b;font-size:1.5rem;font-weight:700}.workflow-popup .popup-header p{margin:0;color:#64748b;font-size:.95rem}.workflow-popup .popup-body{max-height:60vh;overflow-y:auto;padding:0 .5rem}.workflow-popup .popup-body h4{margin:1.5rem 0 .75rem;color:#374151;font-size:1.1rem;font-weight:600;display:flex;align-items:center;gap:.5rem}.workflow-popup .popup-body ul{margin:0;padding-left:1.5rem}.workflow-popup .popup-body ul li{margin-bottom:.5rem;color:#4b5563}.workflow-popup .popup-body ul li strong{color:#1f2937}.workflow-popup .workflow-info{background:#f8fafc;padding:1rem;border-radius:8px;border:1px solid #e2e8f0}.workflow-popup .workflow-variables{background:#fef3c7;padding:1rem;border-radius:8px;border:1px solid #f59e0b}.workflow-popup .workflow-flow{background:#ecfdf5;padding:1rem;border-radius:8px;border:1px solid #10b981}.workflow-popup .workflow-flow .flow-steps{display:flex;flex-direction:column;gap:.75rem}.workflow-popup .workflow-flow .flow-steps .flow-step{display:flex;align-items:center;gap:.75rem;padding:.5rem;background:#fff;border-radius:6px;border:1px solid #d1d5db}.workflow-popup .workflow-flow .flow-steps .flow-step .step-number{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:#3b82f6;color:#fff;border-radius:50%;font-size:.8rem;font-weight:600}.workflow-popup .workflow-flow .flow-steps .flow-step .step-text{color:#374151;font-weight:500}.workflow-popup .workflow-json{background:#1f2937;padding:1rem;border-radius:8px;border:1px solid #374151}.workflow-popup .workflow-json .json-preview{background:transparent;color:#e5e7eb;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.8rem;line-height:1.4;margin:0;white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto}.workflow-popup .popup-footer{text-align:center;margin-top:1.5rem;padding-top:1rem;border-top:1px solid #e2e8f0}.workflow-popup .popup-footer .btn{padding:.75rem 1.5rem;background:#3b82f6;color:#fff;border:none;border-radius:6px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:.5rem;transition:background-color .2s}.workflow-popup .popup-footer .btn:hover{background:#2563eb}.workflow-popup .popup-footer .btn i{font-size:.9rem}.view-workflow-link{color:#3b82f6;text-decoration:none;font-size:.85rem;margin-left:.5rem;transition:color .2s}.view-workflow-link:hover{color:#1d4ed8;text-decoration:underline}.studio-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:#fff;border-bottom:1px solid #e2e8f0;box-shadow:0 1px 3px #0000000d}.studio-header .header-title{display:flex;align-items:center;gap:.75rem}.studio-header .header-title i{font-size:1.75rem;color:#8b5cf6}.studio-header .header-title h1{margin:0;font-size:1.5rem;font-weight:700;color:#1e293b}.studio-header .header-title .badge{padding:.25rem .75rem;background:#8b5cf6;color:#fff;border-radius:12px;font-size:.75rem;font-weight:600}.studio-header .header-actions{display:flex;gap:.75rem;align-items:center}.samples-dropdown{position:relative}.samples-dropdown .samples-menu{position:absolute;top:calc(100% + .5rem);left:0;min-width:320px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 10px 25px #0000001a;z-index:1000;max-height:400px;overflow-y:auto}.samples-dropdown .samples-menu .sample-item{padding:.875rem 1rem;display:flex;align-items:flex-start;gap:.75rem;cursor:pointer;border-bottom:1px solid #f1f5f9;transition:all .2s}.samples-dropdown .samples-menu .sample-item:last-child{border-bottom:none}.samples-dropdown .samples-menu .sample-item:hover{background:#f8fafc;transform:translate(4px)}.samples-dropdown .samples-menu .sample-item i{font-size:1.25rem;margin-top:.125rem;color:#8b5cf6}.samples-dropdown .samples-menu .sample-item .sample-info{display:flex;flex-direction:column;gap:.25rem;flex:1}.samples-dropdown .samples-menu .sample-item .sample-info strong{color:#1e293b;font-size:.875rem;font-weight:600}.samples-dropdown .samples-menu .sample-item .sample-info span{color:#64748b;font-size:.75rem;line-height:1.4}.studio-body{display:grid;grid-template-columns:1fr;gap:0;flex:1;overflow:hidden;transition:grid-template-columns .3s ease}.studio-body.sidebar-hidden,.studio-body.properties-hidden,.studio-body.sidebar-hidden.properties-hidden{grid-template-columns:1fr}.studio-sidebar{background:#fff;border-right:1px solid #e2e8f0;display:flex;flex-direction:column;overflow:hidden}.studio-sidebar .sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:.5rem}.studio-sidebar .sidebar-header i{font-size:1.25rem;color:#8b5cf6}.studio-sidebar .sidebar-header h3{flex:1;margin:0;font-size:1.125rem;font-weight:600;color:#1e293b}.activities-tree{flex:1;overflow-y:auto;padding:.5rem}.category-section{margin-bottom:.5rem}.category-section .category-header{display:flex;align-items:center;gap:.5rem;padding:.75rem;border-radius:8px;cursor:pointer;transition:all .2s;background:#f8fafc}.category-section .category-header:hover{background:#f1f5f9}.category-section .category-header.active{background:#ede9fe}.category-section .category-header.active>i:first-child{color:#8b5cf6}.category-section .category-header>i:first-child{font-size:.875rem;color:#94a3b8;transition:transform .2s,color .2s}.category-section .category-header>i:nth-child(2){font-size:1.125rem}.category-section .category-header span{flex:1;font-weight:600;font-size:.875rem;color:#334155}.category-section .category-header .count{flex:none;padding:.125rem .5rem;background:#fff;border-radius:10px;font-size:.75rem;font-weight:600;color:#64748b;border:1px solid #e2e8f0}.activities-list{padding:.5rem 0 .5rem 1.5rem;display:flex;flex-direction:column;gap:.5rem;animation:slideDown .3s ease}.activities-list .activities-header{padding:.5rem .75rem;margin-bottom:.5rem}.activities-list .activities-header h4{margin:0;font-size:.875rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.activity-card{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:.875rem;margin-bottom:.75rem;transition:all .2s}.activity-card:hover{border-color:#8b5cf6;box-shadow:0 4px 12px #8b5cf61a;transform:translateY(-1px)}.activity-card .activity-info{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:.5rem}.activity-card .activity-info>i{font-size:1.5rem;color:#8b5cf6;margin-top:.125rem}.activity-card .activity-info .activity-details{flex:1;display:flex;flex-direction:column;gap:.25rem}.activity-card .activity-info .activity-details strong{font-size:.875rem;color:#1e293b}.activity-card .activity-info .activity-details small{font-size:.75rem;color:#64748b;line-height:1.4}.activity-card .activity-info .activity-details code{font-size:.75rem;color:#8b5cf6;background:#f3f0ff;padding:.125rem .375rem;border-radius:4px;width:fit-content}.activity-card .copy-btn{float:right;padding:.375rem .75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s;color:#64748b}.activity-card .copy-btn:hover{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.activity-card .copy-btn i{font-size:.875rem}.activity-card .activity-properties{margin-top:.75rem;padding-top:.75rem;border-top:1px solid #f1f5f9}.activity-card .activity-properties .properties-title{display:block;font-size:.75rem;font-weight:600;color:#64748b;margin-bottom:.5rem}.activity-card .activity-properties .property-item{display:flex;align-items:center;gap:.5rem;padding:.25rem 0;font-size:.75rem}.activity-card .activity-properties .property-item code{color:#1e293b;background:#f8fafc;padding:.125rem .375rem;border-radius:3px}.activity-card .activity-properties .property-item .property-type{color:#64748b;font-style:italic}.activity-card .activity-properties .property-item .required{color:#ef4444;font-weight:700}.studio-editor{display:flex;flex-direction:column;background:#1e293b;overflow:hidden}.studio-editor .editor-header{padding:1rem 1.25rem;background:#0f172a;display:flex;align-items:center;gap:.5rem}.studio-editor .editor-header i{font-size:1.125rem;color:#8b5cf6}.studio-editor .editor-header h3{margin:0;font-size:1rem;font-weight:600;color:#e2e8f0}.studio-editor axp-page-toolbar .editor-tabs{display:flex;gap:.5rem;background:transparent}.studio-editor axp-page-toolbar .editor-tabs .tab-btn{padding:.5rem 1rem;background:transparent;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:.5rem}.studio-editor axp-page-toolbar .editor-tabs .tab-btn i{font-size:.875rem}.studio-editor axp-page-toolbar .editor-tabs .tab-btn:hover{background:#f8fafc;border-color:#cbd5e1;color:#475569}.studio-editor axp-page-toolbar .editor-tabs .tab-btn.active{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.studio-editor .editor-content{flex:1;display:flex;overflow:hidden}.studio-editor .json-tab{flex:1;display:flex;flex-direction:column}.studio-editor .json-editor{flex:1;padding:1.5rem;background:#1e293b;color:#e2e8f0;border:none;outline:none;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.875rem;line-height:1.6;resize:none;overflow:auto}.studio-editor .json-editor::placeholder{color:#475569}.studio-editor .json-editor::-webkit-scrollbar{width:10px;height:10px}.studio-editor .json-editor::-webkit-scrollbar-track{background:#0f172a}.studio-editor .json-editor::-webkit-scrollbar-thumb{background:#475569;border-radius:5px}.studio-editor .json-editor::-webkit-scrollbar-thumb:hover{background:#64748b}.studio-editor .visual-tab{flex:1;display:flex;background:#f8fafc;position:relative}.studio-editor .visual-canvas{flex:1;display:flex;flex-direction:column;overflow:hidden}.studio-editor .visual-canvas .canvas-toolbar{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:#fff;border-bottom:1px solid #e2e8f0}.studio-editor .visual-canvas .canvas-toolbar .tool-btn{padding:.5rem .75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;cursor:pointer;transition:all .2s}.studio-editor .visual-canvas .canvas-toolbar .tool-btn:hover{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.studio-editor .visual-canvas .canvas-toolbar .tool-btn i{font-size:.875rem}.studio-editor .visual-canvas .canvas-toolbar .tool-info{flex:1;display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:#64748b}.studio-editor .visual-canvas .canvas-toolbar .tool-info i{font-size:1rem;color:#8b5cf6}.studio-editor .visual-canvas .canvas-area{flex:1;position:relative;background:linear-gradient(90deg,#e5e7eb 1px,transparent 1px),linear-gradient(#e5e7eb 1px,transparent 1px);background-size:20px 20px;overflow:auto;min-height:600px}.studio-editor .visual-canvas .connections-layer{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1}.studio-editor .visual-canvas .connection-line{stroke:#64748b;stroke-width:2;fill:none;opacity:.6;cursor:pointer;pointer-events:stroke;transition:all .2s}.studio-editor .visual-canvas .connection-line:hover{stroke:#ef4444;stroke-width:3;opacity:1}.studio-editor .visual-canvas .visual-node{position:absolute;width:150px;background:#fff;border:2px solid #e2e8f0;border-radius:8px;box-shadow:0 2px 8px #0000001a;cursor:move;transition:all .2s;z-index:2}.studio-editor .visual-canvas .visual-node:hover{border-color:#8b5cf6;box-shadow:0 4px 16px #8b5cf633;transform:translateY(-2px)}.studio-editor .visual-canvas .visual-node.selected{border-color:#8b5cf6;border-width:3px;box-shadow:0 0 0 3px #8b5cf633}.studio-editor .visual-canvas .visual-node .node-header{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:linear-gradient(135deg,#8b5cf6,#7c3aed);color:#fff;border-radius:6px 6px 0 0;font-size:.875rem;font-weight:600}.studio-editor .visual-canvas .visual-node .node-header i{font-size:1rem}.studio-editor .visual-canvas .visual-node .node-header span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.studio-editor .visual-canvas .visual-node .node-header .node-delete{padding:.25rem;background:#fff3;border:none;border-radius:4px;color:#fff;cursor:pointer;transition:all .2s}.studio-editor .visual-canvas .visual-node .node-header .node-delete:hover{background:#ef4444cc}.studio-editor .visual-canvas .visual-node .node-header .node-delete i{font-size:.75rem}.studio-editor .visual-canvas .visual-node .node-body{padding:.75rem}.studio-editor .visual-canvas .visual-node .node-body small{display:block;font-size:.75rem;color:#64748b;text-align:center}.studio-editor .visual-canvas .visual-node .node-connectors{position:relative}.studio-editor .visual-canvas .visual-node .node-connectors .connector{position:absolute;width:12px;height:12px;background:#8b5cf6;border:2px solid white;border-radius:50%;cursor:pointer;transition:all .2s;z-index:10}.studio-editor .visual-canvas .visual-node .node-connectors .connector:hover{transform:scale(1.3);box-shadow:0 0 0 3px #8b5cf64d}.studio-editor .visual-canvas .visual-node .node-connectors .connector-in{top:-50px;left:50%;transform:translate(-50%);background:#3b82f6}.studio-editor .visual-canvas .visual-node .node-connectors .connector-out{bottom:-6px;left:50%;transform:translate(-50%);background:#8b5cf6}.studio-editor .visual-canvas .visual-node .node-connectors .connector-out.active{background:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcomes-container{position:absolute;bottom:-60px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:8px;background:#fff;padding:8px;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px #00000026;min-width:120px;z-index:100}.studio-editor .visual-canvas .visual-node .node-connectors .outcomes-container:before{content:\\\"\\\";position:absolute;top:-8px;left:50%;transform:translate(-50%);width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid white;filter:drop-shadow(0 -2px 2px rgba(0,0,0,.05))}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s;position:relative}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector:hover{background:#f1f5f9;border-color:#8b5cf6;transform:translate(2px)}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector.active{background:#fef2f2;border-color:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector.active .outcome-dot{background:#ef4444;box-shadow:0 0 0 3px #ef444433}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector .outcome-label{font-size:.75rem;font-weight:600;color:#475569;-webkit-user-select:none;user-select:none;flex:1}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector .outcome-dot{width:10px;height:10px;background:#8b5cf6;border:2px solid white;border-radius:50%;transition:all .2s;flex-shrink:0}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=\\\"200\\\"] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Done] .outcome-dot{background:#10b981}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=\\\"404\\\"] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Failed] .outcome-dot{background:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Timeout] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Cancelled] .outcome-dot{background:#f59e0b}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Then] .outcome-dot{background:#3b82f6}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Else] .outcome-dot{background:#64748b}.studio-editor .visual-canvas .canvas-empty-state{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:#94a3b8;pointer-events:none}.studio-editor .visual-canvas .canvas-empty-state i{font-size:4rem;margin-bottom:1rem;opacity:.5}.studio-editor .visual-canvas .canvas-empty-state p{margin:0 0 .5rem;font-size:1rem;font-weight:500}.studio-editor .visual-canvas .canvas-empty-state small{font-size:.875rem;opacity:.8}.studio-editor .properties-panel{width:280px;background:#fff;border-left:1px solid #e2e8f0;display:flex;flex-direction:column}.studio-editor .properties-panel .properties-header{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid #e2e8f0}.studio-editor .properties-panel .properties-header i{font-size:1.125rem;color:#8b5cf6}.studio-editor .properties-panel .properties-header h4{flex:1;margin:0;font-size:.875rem;font-weight:600;color:#1e293b}.studio-editor .properties-panel .properties-header button{padding:.25rem .5rem;background:transparent;border:none;color:#64748b;cursor:pointer;transition:color .2s}.studio-editor .properties-panel .properties-header button:hover{color:#ef4444}.studio-editor .properties-panel .properties-body{flex:1;padding:1rem;overflow-y:auto}.studio-editor .properties-panel .properties-body .property-row{margin-bottom:1rem}.studio-editor .properties-panel .properties-body .property-row label{display:block;font-size:.75rem;font-weight:600;color:#64748b;margin-bottom:.375rem;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .property-row input{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;transition:all .2s}.studio-editor .properties-panel .properties-body .property-row input:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.studio-editor .properties-panel .properties-body .property-row input:disabled{background:#f8fafc;color:#94a3b8;cursor:not-allowed}.studio-editor .properties-panel .properties-body .properties-divider{height:1px;background:#e2e8f0;margin:1.5rem 0}.studio-editor .properties-panel .properties-body h5{margin:0 0 .5rem;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .properties-hint{display:block;font-size:.75rem;color:#94a3b8;margin-bottom:.75rem}.studio-editor .properties-panel .properties-body .properties-json{margin:.75rem 0 0;padding:.75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;color:#1e293b;overflow-x:auto}.studio-editor .properties-panel .properties-body .no-properties{margin:.75rem 0 0;padding:1rem;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:6px;text-align:center;font-size:.75rem;color:#94a3b8}.studio-editor .properties-panel .properties-body .connections-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;font-size:.75rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item.outcome-connection{border-left-width:3px}.studio-editor .properties-panel .properties-body .connections-list .connection-item i{color:#64748b;font-size:.875rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item span{flex:1;color:#1e293b;font-weight:500}.studio-editor .properties-panel .properties-body .connections-list .connection-item .outcome-badge{padding:.25rem .5rem;border-radius:4px;color:#fff;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn{padding:.25rem;background:transparent;border:none;color:#ef4444;cursor:pointer;border-radius:4px;transition:all .2s}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn:hover{background:#fee2e2}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn i{font-size:.75rem;color:inherit}.studio-editor .properties-panel .properties-body .outcomes-info{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;background:#fff;border:2px solid;border-radius:6px;font-size:.75rem;font-weight:600;color:#1e293b;transition:all .2s}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag:hover{transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag .outcome-dot{width:8px;height:8px;border-radius:50%}.studio-result{display:flex;flex-direction:column;background:#fff;border-left:1px solid #e2e8f0;overflow:hidden}.studio-result .result-header{padding:1rem 1.25rem;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:.5rem}.studio-result .result-header i{font-size:1.125rem;color:#10b981}.studio-result .result-header h3{flex:1;margin:0;font-size:1rem;font-weight:600;color:#1e293b}.studio-result .result-header .clear-btn{padding:.375rem .75rem;background:#fee2e2;color:#dc2626;border:none;border-radius:6px;cursor:pointer;font-size:.75rem;font-weight:500;transition:all .2s}.studio-result .result-header .clear-btn:hover{background:#fecaca}.studio-result .result-header .clear-btn i{font-size:.75rem;color:inherit}.studio-result .result-body{flex:1;overflow-y:auto;padding:1rem}.logs-container{display:flex;flex-direction:column;gap:.5rem}.log-item{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem;background:#f8fafc;border-left:3px solid #cbd5e1;border-radius:6px;font-size:.875rem}.log-item.log-info{border-left-color:#3b82f6;background:#eff6ff}.log-item.log-info .log-icon{color:#3b82f6}.log-item.log-success{border-left-color:#10b981;background:#f0fdf4}.log-item.log-success .log-icon{color:#10b981}.log-item.log-warning{border-left-color:#f59e0b;background:#fffbeb}.log-item.log-warning .log-icon{color:#f59e0b}.log-item.log-error{border-left-color:#ef4444;background:#fef2f2}.log-item.log-error .log-icon{color:#ef4444}.log-item .log-time{font-family:JetBrains Mono,monospace;font-size:.75rem;color:#64748b;min-width:80px}.log-item .log-icon{font-size:1rem}.log-item .log-message{flex:1;color:#1e293b}.log-item .log-data-toggle{padding:.25rem .5rem;background:transparent;border:1px solid #cbd5e1;border-radius:4px;cursor:pointer;transition:all .2s}.log-item .log-data-toggle:hover{background:#fff}.log-item .log-data-toggle i{font-size:.75rem;color:#64748b}.log-data{margin:.5rem 0 0;padding:1rem;background:#0f172a;color:#e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;overflow-x:auto}.settings-modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:9999;padding:2rem;animation:fadeIn .2s ease}.settings-modal{background:#fff;border-radius:12px;box-shadow:0 20px 60px #0000004d;width:100%;max-width:900px;max-height:90vh;display:flex;flex-direction:column;animation:slideUp .3s ease}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.settings-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.5rem 2rem;border-bottom:1px solid #e2e8f0}.settings-modal-header .header-title{display:flex;align-items:center;gap:.75rem}.settings-modal-header .header-title i{font-size:1.5rem;color:#8b5cf6}.settings-modal-header .header-title h2{margin:0;font-size:1.25rem;font-weight:700;color:#1e293b}.settings-modal-header .close-btn{padding:.5rem;background:transparent;border:none;color:#64748b;cursor:pointer;border-radius:6px;transition:all .2s}.settings-modal-header .close-btn:hover{background:#f1f5f9;color:#ef4444}.settings-modal-header .close-btn i{font-size:1.25rem}.settings-modal-body{flex:1;display:flex;flex-direction:column;overflow:hidden}.settings-tabs{display:flex;gap:.5rem;padding:1rem 2rem 0;border-bottom:1px solid #e2e8f0}.settings-tabs .tab-btn{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.25rem;background:transparent;border:none;border-bottom:2px solid transparent;color:#64748b;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;position:relative}.settings-tabs .tab-btn:hover{color:#8b5cf6;background:#f8fafc}.settings-tabs .tab-btn.active{color:#8b5cf6;border-bottom-color:#8b5cf6}.settings-tabs .tab-btn i{font-size:1rem}.settings-tabs .tab-btn .badge{padding:.125rem .5rem;background:#8b5cf6;color:#fff;border-radius:10px;font-size:.7rem;font-weight:600}.settings-content{flex:1;overflow-y:auto;padding:2rem}.settings-section h3{margin:0 0 1.5rem;font-size:1rem;font-weight:600;color:#1e293b}.settings-section .section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem}.settings-section .section-header h3{margin:0}.settings-section .section-header .add-btn{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#8b5cf6;color:#fff;border:none;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.settings-section .section-header .add-btn:hover{background:#7c3aed;transform:translateY(-1px);box-shadow:0 4px 12px #8b5cf64d}.settings-section .section-header .add-btn i{font-size:.875rem}.form-group{margin-bottom:1.25rem}.form-group label{display:block;font-size:.875rem;font-weight:600;color:#475569;margin-bottom:.5rem}.form-group small{display:block;font-size:.75rem;color:#94a3b8;margin-top:.375rem}.form-group.checkbox-group{margin-bottom:0}.form-group.checkbox-group label{display:flex;align-items:center;gap:.5rem;cursor:pointer;margin-bottom:0}.form-group.checkbox-group label input[type=checkbox]{width:18px;height:18px;cursor:pointer}.form-group.checkbox-group label span{font-size:.875rem;font-weight:500}.form-group.flex-1{flex:1}.form-row{display:flex;gap:1rem;align-items:flex-start}.form-input,.form-select,.form-textarea{width:100%;padding:.625rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;transition:all .2s}.form-input:focus,.form-select:focus,.form-textarea:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.form-input::placeholder,.form-select::placeholder,.form-textarea::placeholder{color:#cbd5e1}.form-textarea{resize:vertical;font-family:inherit}.items-list{display:flex;flex-direction:column;gap:1rem}.item-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;transition:all .2s}.item-card:hover{border-color:#cbd5e1;box-shadow:0 2px 8px #0000000d}.item-card .item-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:#f1f5f9;border-bottom:1px solid #e2e8f0}.item-card .item-header .item-number{font-size:.75rem;font-weight:700;color:#8b5cf6;padding:.25rem .5rem;background:#fff;border-radius:4px}.item-card .item-header .remove-btn{padding:.375rem .625rem;background:transparent;border:none;color:#ef4444;cursor:pointer;border-radius:4px;transition:all .2s}.item-card .item-header .remove-btn:hover{background:#fee2e2}.item-card .item-header .remove-btn i{font-size:.875rem}.item-card .item-body{padding:1rem}.advanced-group{margin-bottom:2rem;padding-bottom:2rem;border-bottom:1px solid #e2e8f0}.advanced-group:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.advanced-group h4{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.5px}.outcomes-preview{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.outcomes-preview .outcome-chip{display:inline-flex;align-items:center;padding:.375rem .75rem;background:#f1f5f9;border:1px solid #cbd5e1;border-radius:6px;font-size:.75rem;font-weight:600;color:#475569}.export-info{margin-top:1rem;padding:1rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px}.export-info .info-row{display:flex;align-items:center;gap:.75rem;padding:.5rem 0;border-bottom:1px solid #e2e8f0}.export-info .info-row:last-child{border-bottom:none;padding-bottom:0}.export-info .info-row .label{font-size:.75rem;font-weight:600;color:#64748b;min-width:120px}.export-info .info-row code{flex:1;padding:.25rem .5rem;background:#fff;border:1px solid #e2e8f0;border-radius:4px;font-size:.75rem;color:#1e293b;font-family:JetBrains Mono,monospace}.settings-modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:1rem;padding:1.5rem 2rem;border-top:1px solid #e2e8f0;background:#f8fafc}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 1rem;text-align:center;color:#94a3b8}.empty-state i{font-size:3rem;margin-bottom:1rem}.empty-state p{margin:0;font-size:.875rem}.final-result{margin-top:1.5rem;padding-top:1.5rem;border-top:2px solid #e2e8f0}.final-result .result-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem;background:#f8fafc;border-radius:8px;margin-bottom:1rem;cursor:pointer;transition:all .2s}.final-result .result-header:hover{background:#f1f5f9;transform:translate(-2px)}.final-result .result-header h4{display:flex;align-items:center;gap:.5rem;margin:0;font-size:.875rem;font-weight:600;color:#475569;text-transform:uppercase}.final-result .result-header h4 i{font-size:.875rem;transition:transform .2s}.final-result .result-header .toggle-hint{font-size:.75rem;color:#94a3b8}.final-result .result-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:1rem}.final-result .result-card .result-row{display:flex;align-items:center;gap:.75rem;padding:.5rem 0}.final-result .result-card .result-row:not(:last-child){border-bottom:1px solid #e2e8f0}.final-result .result-card .result-row strong{font-size:.875rem;color:#475569;min-width:100px}.final-result .result-card .result-row .badge{padding:.25rem .75rem;border-radius:12px;font-size:.75rem;font-weight:600}.final-result .result-card .result-row .badge.badge-running{background:#dbeafe;color:#1e40af}.final-result .result-card .result-row .badge.badge-finished{background:#d1fae5;color:#065f46}.final-result .result-card .result-row .badge.badge-cancelled{background:#fed7aa;color:#92400e}.final-result .result-card .result-row .badge.badge-faulted{background:#fee2e2;color:#991b1b}.final-result .result-card .result-row pre{margin:.5rem 0 0;padding:.75rem;background:#0f172a;color:#e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;overflow-x:auto;width:100%}.activities-list::-webkit-scrollbar,.result-body::-webkit-scrollbar{width:8px}.activities-list::-webkit-scrollbar-track,.result-body::-webkit-scrollbar-track{background:#f1f5f9}.activities-list::-webkit-scrollbar-thumb,.result-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}.activities-list::-webkit-scrollbar-thumb:hover,.result-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.activity-card{cursor:grab}.activity-card:active{cursor:grabbing}.activity-card[draggable=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.visual-node[draggable=true]{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.visual-node:active{cursor:grabbing}.canvas-area[data-drag-over=true]{background-color:#8b5cf60d}.connector:hover{transform:scale(1.3);box-shadow:0 0 0 3px #8b5cf64d}.connector-out.active{animation:pulse 1s infinite}@keyframes pulse{0%,to{box-shadow:0 0 0 3px #ef44444d}50%{box-shadow:0 0 0 6px #ef44441a}}@keyframes slideDown{0%{opacity:0;max-height:0}to{opacity:1;max-height:2000px}}.execution-dialog-overlay{position:fixed;inset:0;background:#000000b3;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn .2s ease}.execution-dialog{width:90vw;max-width:1200px;height:90vh;background:#fff;border-radius:16px;box-shadow:0 25px 50px #0000004d;display:flex;flex-direction:column;overflow:hidden;animation:slideUp .3s ease}.execution-dialog-header{padding:1.5rem 2rem;background:linear-gradient(135deg,#8b5cf6,#7c3aed);color:#fff;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.execution-dialog-header .header-content{display:flex;align-items:center;gap:1rem;flex:1}.execution-dialog-header .header-content>i{font-size:2.5rem;opacity:.9}.execution-dialog-header .header-content .header-info h2{margin:0;font-size:1.75rem;font-weight:700}.execution-dialog-header .header-content .header-info p{margin:.25rem 0 0;opacity:.9;font-size:.95rem}.execution-dialog-header .close-btn{background:#fff3;border:none;width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;color:#fff;font-size:1.25rem}.execution-dialog-header .close-btn:hover:not(:disabled){background:#ffffff4d;transform:scale(1.05)}.execution-dialog-header .close-btn:disabled{opacity:.5;cursor:not-allowed}.execution-dialog-body{flex:1;overflow-y:auto;padding:2rem;background:#f8fafc}.execution-dialog-footer{padding:1rem 2rem;background:#fff;border-top:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.execution-dialog-footer .footer-info{display:flex;gap:1.5rem}.execution-dialog-footer .footer-info .time-info{display:flex;align-items:center;gap:.5rem;color:#64748b;font-size:.875rem}.execution-dialog-footer .footer-info .time-info i{color:#8b5cf6}.execution-dialog-footer .footer-actions{display:flex;gap:.75rem}.workflow-info-panel{background:#fff;border-radius:12px;padding:2rem;box-shadow:0 4px 6px #0000000d}.workflow-info-panel .info-section{margin-bottom:2rem}.workflow-info-panel .info-section h3{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;color:#1e293b;font-size:1.25rem}.workflow-info-panel .info-section h3 i{color:#8b5cf6}.workflow-info-panel .info-section .description{color:#475569;line-height:1.7;margin:0}.workflow-info-panel .info-section .features-list{list-style:none;padding:0;margin:0;display:grid;gap:.75rem}.workflow-info-panel .info-section .features-list li{display:flex;align-items:center;gap:.75rem;padding:.75rem;background:#f8fafc;border-radius:8px;color:#334155}.workflow-info-panel .info-section .features-list li i{color:#10b981;font-size:1.125rem}.workflow-info-panel .start-section{text-align:center;padding:2rem;background:linear-gradient(135deg,#f0fdf4,#dcfce7);border-radius:12px;border:2px dashed #10b981}.workflow-info-panel .start-section .start-illustration{margin-bottom:1rem}.workflow-info-panel .start-section .start-illustration i{font-size:4rem;color:#10b981;animation:float 3s ease-in-out infinite}.workflow-info-panel .start-section h3{margin:0 0 .5rem;color:#1e293b;font-size:1.5rem}.workflow-info-panel .start-section p{margin:0 0 1.5rem;color:#64748b}.state-machine-ui .issue-tracker{background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 2px #0000000d}.state-machine-ui .issue-tracker .issue-header-main{padding:1.5rem 2rem 1rem;border-bottom:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#64748b;margin-bottom:.75rem}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .project-name{color:#3b82f6;font-weight:600}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .separator{color:#94a3b8}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .issue-key{color:#64748b}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title{display:flex;align-items:center;gap:.75rem}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .type-badge{padding:.375rem .75rem;border-radius:4px;font-size:.8125rem;font-weight:600;display:flex;align-items:center;gap:.375rem;background:#eff6ff;color:#3b82f6}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .type-badge i{font-size:1rem}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .issue-main-title{margin:0;font-size:1.5rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-action-bar{padding:.75rem 2rem;background:#f8fafc;border-bottom:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left{display:flex;gap:.5rem}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn{padding:.5rem 1rem;border:1px solid #cbd5e1;border-radius:4px;background:#fff;font-weight:500;font-size:.875rem;cursor:pointer;transition:all .2s;color:#334155}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn:hover:not(:disabled){background:#f1f5f9;border-color:#94a3b8}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn:disabled{opacity:.5;cursor:not-allowed}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-primary{background:#3b82f6;color:#fff;border-color:#3b82f6}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-primary:hover:not(:disabled){background:#2563eb}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-success{background:#10b981;color:#fff;border-color:#10b981}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-success:hover:not(:disabled){background:#059669}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-warning{background:#f59e0b;color:#fff;border-color:#f59e0b}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-warning:hover:not(:disabled){background:#d97706}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-right .more-actions-btn{padding:.5rem 1rem;border:1px solid #cbd5e1;border-radius:4px;background:#fff;font-weight:500;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;color:#334155;transition:all .2s}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-right .more-actions-btn:hover{background:#f1f5f9}.state-machine-ui .issue-tracker .issue-main-content{display:grid;grid-template-columns:320px 1fr;gap:2rem;padding:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section{margin-bottom:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row{display:flex;padding:.625rem 0;border-bottom:1px solid #f1f5f9}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row:last-child{border-bottom:none}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row label{min-width:100px;font-size:.8125rem;color:#64748b;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value i{font-size:1rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .status-badge{padding:.25rem .625rem;border-radius:4px;color:#fff;font-weight:600;font-size:.75rem;text-transform:uppercase}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .view-workflow-link{color:#3b82f6;font-size:.8125rem;text-decoration:none;margin-left:.5rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .view-workflow-link:hover{text-decoration:underline}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .user-avatar{width:24px;height:24px;border-radius:50%;background:#8b5cf6;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.75rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz{background:#f8fafc;border-radius:8px;padding:1.5rem;border:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz h3{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state{display:flex;flex-direction:column;align-items:center;gap:.375rem;opacity:.4;transition:opacity .2s}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.active,.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.completed{opacity:1}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state .state-circle{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:.875rem;box-shadow:0 2px 4px #0000001a}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state .state-name{font-size:.6875rem;color:#64748b;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.active .state-name{color:#1e293b;font-weight:600}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-arrow{color:#cbd5e1;font-size:.75rem;margin:0 .25rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section{margin-bottom:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section h3,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section .description-content,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .description-content{padding:1rem;background:#f8fafc;border-radius:6px;border:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section .description-content p,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .description-content p{margin:0;color:#475569;line-height:1.7;font-size:.875rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline{display:flex;flex-direction:column;gap:1rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item{display:flex;gap:.75rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-avatar{width:32px;height:32px;border-radius:50%;background:#8b5cf6;color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.875rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content{flex:1;padding-bottom:1rem;border-bottom:1px solid #f1f5f9}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header{font-size:.875rem;color:#334155;line-height:1.6;margin-bottom:.375rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header strong{color:#1e293b;font-weight:600}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header .activity-action{color:#64748b}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-meta{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;color:#94a3b8}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-meta .activity-label{color:#8b5cf6;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item:last-child .activity-content{border-bottom:none;padding-bottom:0}.registration-ui{display:flex;justify-content:center;align-items:center;min-height:400px}.registration-ui .registration-card{background:#fff;border-radius:12px;padding:3rem;box-shadow:0 4px 6px #0000000d;text-align:center;max-width:500px}.registration-ui .registration-card .registration-icon{margin-bottom:1.5rem}.registration-ui .registration-card .registration-icon i{font-size:5rem;color:#8b5cf6}.registration-ui .registration-card h3{margin:0 0 .75rem;color:#1e293b;font-size:1.75rem;font-weight:700}.registration-ui .registration-card .registration-desc{margin:0 0 2rem;color:#64748b;line-height:1.7}.registration-ui .registration-card .registration-progress{padding:2rem;background:#fef3c7;border-radius:8px}.registration-ui .registration-card .registration-progress .progress-spinner{margin-bottom:1rem}.registration-ui .registration-card .registration-progress .progress-spinner i{font-size:3rem;color:#f59e0b}.registration-ui .registration-card .registration-progress p{margin:0;color:#92400e;font-weight:500}.registration-ui .registration-card .registration-success{padding:2rem;background:#f0fdf4;border-radius:8px}.registration-ui .registration-card .registration-success i{font-size:4rem;color:#10b981;margin-bottom:1rem}.registration-ui .registration-card .registration-success h4{margin:0 0 .5rem;color:#064e3b;font-size:1.5rem;font-weight:700}.registration-ui .registration-card .registration-success p{margin:0;color:#065f46}.default-execution-view{display:flex;justify-content:center;align-items:center;min-height:400px}.default-execution-view .execution-status{text-align:center;padding:3rem;background:#fff;border-radius:12px;box-shadow:0 4px 6px #0000000d;min-width:400px}.default-execution-view .execution-status i{font-size:5rem;margin-bottom:1.5rem}.default-execution-view .execution-status h3{margin:0 0 .75rem;font-size:1.75rem;font-weight:700}.default-execution-view .execution-status p{margin:0;color:#64748b;line-height:1.7}.default-execution-view .execution-status .status-running i{color:#f59e0b}.default-execution-view .execution-status .status-finished i{color:#10b981}.default-execution-view .execution-status .status-error i{color:#ef4444}.execution-logs-panel{margin-top:2rem;background:#fff;border-radius:12px;padding:1.5rem;box-shadow:0 4px 6px #0000000d}.execution-logs-panel h3{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;color:#1e293b;font-size:1.125rem}.execution-logs-panel h3 i{color:#8b5cf6}.execution-logs-panel .logs-container-compact{max-height:300px;overflow-y:auto;background:#f8fafc;border-radius:8px;padding:.75rem}.execution-logs-panel .logs-container-compact .log-item-compact{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-radius:6px;margin-bottom:.5rem;font-size:.875rem}.execution-logs-panel .logs-container-compact .log-item-compact:last-child{margin-bottom:0}.execution-logs-panel .logs-container-compact .log-item-compact .log-time{font-family:Courier New,monospace;color:#64748b;font-size:.8125rem;min-width:70px}.execution-logs-panel .logs-container-compact .log-item-compact .log-icon{display:flex;align-items:center;justify-content:center;width:20px}.execution-logs-panel .logs-container-compact .log-item-compact .log-icon i{font-size:1rem}.execution-logs-panel .logs-container-compact .log-item-compact .log-message{flex:1;color:#334155}.execution-logs-panel .logs-container-compact .log-item-compact.log-info{background:#eff6ff}.execution-logs-panel .logs-container-compact .log-item-compact.log-info .log-icon i{color:#3b82f6}.execution-logs-panel .logs-container-compact .log-item-compact.log-success{background:#f0fdf4}.execution-logs-panel .logs-container-compact .log-item-compact.log-success .log-icon i{color:#10b981}.execution-logs-panel .logs-container-compact .log-item-compact.log-warning{background:#fffbeb}.execution-logs-panel .logs-container-compact .log-item-compact.log-warning .log-icon i{color:#f59e0b}.execution-logs-panel .logs-container-compact .log-item-compact.log-error{background:#fef2f2}.execution-logs-panel .logs-container-compact .log-item-compact.log-error .log-icon i{color:#ef4444}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL3N0dWRpby93b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvc3R1ZGlvL3dvcmtmbG93LXN0dWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLDRCQUE0QixFQUE4Qyw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZLLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxv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SyxFQUFFLENBQUM7WUFDZixpQ0FBaUM7WUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7K0dBbHhEVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixrRUFUdkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsdUJBQXVCO2FBQ3JDO1NBQ0YsaURDeEtILDRveURBMjdCa0IsazRuRERyeUJkLFlBQVksOEJBQ1osV0FBVyx5MENBQ1gsY0FBYyw2WEFDZCxtQkFBbUIsa2lCQUNuQixpQkFBaUIscVBBQ2pCLGVBQWUsOEJBQ2YsaUJBQWlCLDhCQUNqQixtQkFBbUIsK0JBQ25CLHNCQUFzQiw0REFDdEIsNEJBQTRCLGdpQkFDNUIsZ0NBQWdDLDhGQUNoQyxrQ0FBa0M7OzRGQVd6Qix1QkFBdUI7a0JBMUJuQyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3dCQUM1QixnQ0FBZ0M7d0JBQ2hDLGtDQUFrQztxQkFDbkMsYUFDVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHlCQUF5Qjt5QkFDckM7cUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWEJ1dHRvbkdyb3VwTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbi1ncm91cCc7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYVGV4dEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90ZXh0LWJveCc7XG5pbXBvcnQgeyBBWFNlbGVjdEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYUFdvcmtmbG93TWFuYWdlciwgQVhQQWN0aXZpdHlEZWZpbml0aW9uU2VydmljZSwgQVhQQWN0aXZpdHlEZWZpbml0aW9uLCBBWFBBY3Rpdml0eUNhdGVnb3J5LCBBWFBXb3JrZmxvd0RlZmluaXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5pbXBvcnQgeyBBWFBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlLCBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYUFBhZ2VMYXlvdXRCYXNlLCBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCwgQVhQUGFnZUxheW91dENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3ZpZXdzJztcbmltcG9ydCB7IEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsIEFYUFRoZW1lTGF5b3V0U3RhcnRTaWRlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBBY3Rpb25NZW51SXRlbSwgQVhQRXhlY3V0ZUNvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0JztcbmltcG9ydCB7IEFYTUFjdGl2aXR5Q2F0ZWdvcmllc1RyZWVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlL2FjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQnO1xuXG5pbnRlcmZhY2UgQWN0aXZpdHlDYXRlZ29yeVVJIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIGFjdGl2aXRpZXM6IEFjdGl2aXR5SW5mb1tdO1xufVxuXG5pbnRlcmZhY2UgUHJvcGVydHlTY2hlbWEge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnb2JqZWN0JyB8ICdhcnJheScgfCAnc2VsZWN0JyB8ICdhbnknO1xuICByZXF1aXJlZDogYm9vbGVhbjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgb3B0aW9ucz86IEFycmF5PHsgdmFsdWU6IGFueTsgbGFiZWw6IHN0cmluZyB9PjsgLy8gRm9yIHNlbGVjdCB0eXBlXG59XG5cbmludGVyZmFjZSBBY3Rpdml0eUluZm8ge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xuICBwcm9wZXJ0aWVzOiBQcm9wZXJ0eVNjaGVtYVtdO1xuICBkZWZhdWx0UHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIGFueT47IC8vIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzXG59XG5cbmludGVyZmFjZSBFeGVjdXRpb25Mb2cge1xuICB0aW1lc3RhbXA6IERhdGU7XG4gIGxldmVsOiAnaW5mbycgfCAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRhdGE/OiBhbnk7XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29ubmVjdGlvbiBmcm9tIG9uZSBvdXRjb21lIHRvIGEgdGFyZ2V0IG5vZGUuXG4gKi9cbmludGVyZmFjZSBPdXRjb21lQ29ubmVjdGlvbiB7XG4gIG91dGNvbWU6IHN0cmluZzsgIC8vIGUuZy4sIFwiMjAwXCIsIFwiRG9uZVwiLCBcIkZhaWxlZFwiXG4gIHRhcmdldE5vZGVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVmlzdWFsTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvdXRjb21lQ29ubmVjdGlvbnMgaW5zdGVhZFxuICAgKiBTaW1wbGUgbGlzdCBvZiBjb25uZWN0aW9ucyAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAqL1xuICBjb25uZWN0aW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE91dGNvbWUtYmFzZWQgY29ubmVjdGlvbnMuXG4gICAqIEVhY2ggb3V0Y29tZSBjYW4gY29ubmVjdCB0byBhIGRpZmZlcmVudCB0YXJnZXQuXG4gICAqL1xuICBvdXRjb21lQ29ubmVjdGlvbnM/OiBPdXRjb21lQ29ubmVjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBBdmFpbGFibGUgb3V0Y29tZXMgZm9yIHRoaXMgbm9kZS5cbiAgICogQ29tcHV0ZWQgZnJvbSBhY3Rpdml0eSBkZXNjcmlwdG9yLlxuICAgKi9cbiAgb3V0Y29tZXM/OiBzdHJpbmdbXTtcbn1cblxudHlwZSBFZGl0b3JUYWIgPSAnanNvbicgfCAndmlzdWFsJztcbnR5cGUgU2V0dGluZ3NUYWIgPSAnZ2VuZXJhbCcgfCAnaW5wdXRzJyB8ICdvdXRwdXRzJyB8ICd2YXJpYWJsZXMnIHwgJ2FkdmFuY2VkJztcblxuaW50ZXJmYWNlIFdvcmtmbG93U2V0dGluZ3Mge1xuICAvLyBJZGVudGlmaWNhdGlvblxuICBkZWZpbml0aW9uSWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8vIFdvcmtmbG93IENvbW1vblxuICBpbnB1dHM6IFdvcmtmbG93SW5wdXRbXTtcbiAgb3V0cHV0czogV29ya2Zsb3dPdXRwdXRbXTtcbiAgdmFyaWFibGVzOiBXb3JrZmxvd1ZhcmlhYmxlW107XG4gIG91dGNvbWVzOiBzdHJpbmdbXTtcblxuICAvLyBPcHRpb25zXG4gIHVzYWJsZUFzQWN0aXZpdHk6IGJvb2xlYW47XG4gIGF1dG9VcGRhdGVDb25zdW1pbmdXb3JrZmxvd3M6IGJvb2xlYW47XG5cbiAgLy8gTWV0YWRhdGFcbiAgdmVyc2lvbjogbnVtYmVyO1xuICBpc0xhdGVzdDogYm9vbGVhbjtcbiAgaXNQdWJsaXNoZWQ6IGJvb2xlYW47XG4gIHRvb2xWZXJzaW9uOiBzdHJpbmc7XG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV29ya2Zsb3dJbnB1dCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHNjaGVtYToge1xuICAgIGRhdGFUeXBlOiBzdHJpbmc7XG4gICAgbnVsbGFibGU/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgICBoaWRkZW4/OiBib29sZWFuIHwgc3RyaW5nO1xuICAgIGRlZmF1bHRWYWx1ZT86IGFueSB8IHN0cmluZyB8ICgoY29udGV4dDogYW55IHwgbnVsbCkgPT4gYW55KTtcbiAgfTtcbiAgdmFsaWRhdGlvbnM/OiBBcnJheTx7IHJ1bGU6IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZzsgb3B0aW9ucz86IGFueSB9Pjtcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93T3V0cHV0IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2NoZW1hOiB7XG4gICAgZGF0YVR5cGU6IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93VmFyaWFibGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGVOYW1lOiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd29ya2Zsb3ctc3R1ZGlvJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWEJ1dHRvbkdyb3VwTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVGV4dEJveE1vZHVsZSxcbiAgICBBWFNlbGVjdEJveE1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQsXG4gICAgQVhQVGhlbWVMYXlvdXRCbG9ja0NvbXBvbmVudCxcbiAgICBBWFBUaGVtZUxheW91dFN0YXJ0U2lkZUNvbXBvbmVudCxcbiAgICBBWE1BY3Rpdml0eUNhdGVnb3JpZXNUcmVlQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUFBhZ2VMYXlvdXRCYXNlLFxuICAgICAgdXNlRXhpc3Rpbmc6IFdvcmtmbG93U3R1ZGlvQ29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1N0dWRpb0NvbXBvbmVudCBleHRlbmRzIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50IHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93TWFuYWdlciA9IGluamVjdChBWFBXb3JrZmxvd01hbmFnZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UgPSBpbmplY3QoQVhQQWN0aXZpdHlEZWZpbml0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd0RlZmluaXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgU3RhdGUgICAtLS0tXG5cbiAgYWN0aXZlVGFiID0gc2lnbmFsPEVkaXRvclRhYj4oJ2pzb24nKTtcbiAgc2VsZWN0ZWRDYXRlZ29yeSA9IHNpZ25hbDxBWFBBY3Rpdml0eUNhdGVnb3J5IHwgbnVsbD4obnVsbCk7XG4gIHNlbGVjdGVkQWN0aXZpdHkgPSBzaWduYWw8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgbnVsbD4obnVsbCk7XG4gIHdvcmtmbG93SnNvbiA9IHNpZ25hbDxzdHJpbmc+KHRoaXMuZ2V0RW1wdHlXb3JrZmxvdygpKTtcbiAgdmlzdWFsTm9kZXMgPSBzaWduYWw8VmlzdWFsTm9kZVtdPihbXSk7XG4gIHNlbGVjdGVkTm9kZSA9IHNpZ25hbDxWaXN1YWxOb2RlIHwgbnVsbD4obnVsbCk7XG4gIGlzRXhlY3V0aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgZXhlY3V0aW9uTG9ncyA9IHNpZ25hbDxFeGVjdXRpb25Mb2dbXT4oW10pO1xuXG4gIC8vIEV4ZWN1dGlvbiBEaWFsb2cgU3RhdGVcbiAgc2hvd0V4ZWN1dGlvbkRpYWxvZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHdvcmtmbG93SW5zdGFuY2VTdGF0ZSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIC8vIFVJIFN0YXRlXG4gIHNob3dQcm9wZXJ0aWVzUGFuZWwgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHNob3dXb3JrZmxvd1NldHRpbmdzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgYWN0aXZlU2V0dGluZ3NUYWIgPSBzaWduYWw8U2V0dGluZ3NUYWI+KCdnZW5lcmFsJyk7XG5cbiAgLy8gV29ya2Zsb3cgU2V0dGluZ3NcbiAgd29ya2Zsb3dTZXR0aW5ncyA9IHNpZ25hbDxXb3JrZmxvd1NldHRpbmdzPih7XG4gICAgZGVmaW5pdGlvbklkOiAnJyxcbiAgICBuYW1lOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgaW5wdXRzOiBbXSxcbiAgICBvdXRwdXRzOiBbXSxcbiAgICB2YXJpYWJsZXM6IFtdLFxuICAgIG91dGNvbWVzOiBbJ0RvbmUnXSxcbiAgICB1c2FibGVBc0FjdGl2aXR5OiBmYWxzZSxcbiAgICBhdXRvVXBkYXRlQ29uc3VtaW5nV29ya2Zsb3dzOiBmYWxzZSxcbiAgICB2ZXJzaW9uOiAxLFxuICAgIGlzTGF0ZXN0OiB0cnVlLFxuICAgIGlzUHVibGlzaGVkOiBmYWxzZSxcbiAgICB0b29sVmVyc2lvbjogJzEuMC4wJyxcbiAgICBwcm92aWRlck5hbWU6ICdXb3JrZmxvd1N0dWRpbydcbiAgfSk7XG5cbiAgLy8gQ2FudmFzIHN0YXRlXG4gIGNhbnZhc09mZnNldCA9IHsgeDogMCwgeTogMCB9O1xuICBpc0RyYWdnaW5nQ2FudmFzID0gZmFsc2U7XG4gIGRyYWdTdGFydFBvcyA9IHsgeDogMCwgeTogMCB9O1xuICBkcmFnZ2VkQWN0aXZpdHk6IEFjdGl2aXR5SW5mbyB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkTm9kZTogVmlzdWFsTm9kZSB8IG51bGwgPSBudWxsO1xuICBub2RlRHJhZ09mZnNldCA9IHsgeDogMCwgeTogMCB9O1xuICBjb25uZWN0aW9uU291cmNlOiB7IG5vZGU6IFZpc3VhbE5vZGU7IHR5cGU6ICdpbicgfCAnb3V0Jzsgb3V0Y29tZT86IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgLy8gUGFnZSBsYXlvdXQgaW5pdGlhbGl6YXRpb25cbiAgICBhd2FpdCBzdXBlci5uZ09uSW5pdCgpO1xuICAgIFxuICAgIC8vIExvYWQgd29ya2Zsb3cgZnJvbSBxdWVyeSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBhd2FpdCB0aGlzLmxvYWRXb3JrZmxvd0Zyb21Sb3V0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgd29ya2Zsb3cgZnJvbSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZFdvcmtmbG93RnJvbVJvdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFJlYWQgZnJvbSBzbmFwc2hvdCAoZm9yIGluaXRpYWwgbG9hZClcbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWyd3b3JrZmxvdyddO1xuICAgIFxuICAgIGlmICghd29ya2Zsb3dOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5sb2FkV29ya2Zsb3dCeU5hbWUod29ya2Zsb3dOYW1lKTtcbiAgICBcbiAgICAvLyBTdWJzY3JpYmUgdG8gcXVlcnkgcGFyYW0gY2hhbmdlcyAobGlrZSBkcml2ZSBjb21wb25lbnQpXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgbmV3V29ya2Zsb3dOYW1lID0gcGFyYW1zWyd3b3JrZmxvdyddO1xuICAgICAgaWYgKG5ld1dvcmtmbG93TmFtZSAmJiBuZXdXb3JrZmxvd05hbWUgIT09IHdvcmtmbG93TmFtZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRXb3JrZmxvd0J5TmFtZShuZXdXb3JrZmxvd05hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgd29ya2Zsb3cgYnkgbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkV29ya2Zsb3dCeU5hbWUod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFkZExvZygnaW5mbycsIGBMb2FkaW5nIHdvcmtmbG93OiAke3dvcmtmbG93TmFtZX0uLi5gKTtcblxuICAgICAgLy8gVHJ5IHRvIGdldCB3b3JrZmxvdyBmcm9tIGVudGl0eSBzZXJ2aWNlIGZpcnN0XG4gICAgICBjb25zdCB3b3JrZmxvd0VudGl0eVNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICAgICAgUm9vdENvbmZpZy5tb2R1bGUubmFtZSxcbiAgICAgICAgUm9vdENvbmZpZy5lbnRpdGllcy53b3JrZmxvd0RlZmluaXRpb24ubmFtZVxuICAgICAgKS5kYXRhPGFueSwgYW55PigpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3b3JrZmxvd0VudGl0eVNlcnZpY2UucXVlcnkoe1xuICAgICAgICBza2lwOiAwLFxuICAgICAgICB0YWtlOiAxLFxuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgIGZpZWxkOiAnbmFtZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICB2YWx1ZTogd29ya2Zsb3dOYW1lLFxuICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBsZXQgd29ya2Zsb3dEZWY6IGFueSA9IG51bGw7XG5cbiAgICAgIGlmIChyZXN1bHQuaXRlbXMgJiYgcmVzdWx0Lml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgd29ya2Zsb3dEZWYgPSByZXN1bHQuaXRlbXNbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUcnkgd29ya2Zsb3cgZGVmaW5pdGlvbiBzZXJ2aWNlXG4gICAgICAgIHdvcmtmbG93RGVmID0gYXdhaXQgdGhpcy53b3JrZmxvd0RlZmluaXRpb25TZXJ2aWNlLmdldFdvcmtmbG93QnlOYW1lKHdvcmtmbG93TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghd29ya2Zsb3dEZWYpIHtcbiAgICAgICAgdGhpcy5hZGRMb2coJ3dhcm5pbmcnLCBgV29ya2Zsb3cgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ29udmVydCB3b3JrZmxvdyBkZWZpbml0aW9uIHRvIHN0dWRpbyBKU09OIGZvcm1hdFxuICAgICAgY29uc3Qgc3R1ZGlvSnNvbiA9IHRoaXMuY29udmVydFdvcmtmbG93RGVmaW5pdGlvblRvU3R1ZGlvSnNvbih3b3JrZmxvd0RlZik7XG4gICAgICB0aGlzLndvcmtmbG93SnNvbi5zZXQoSlNPTi5zdHJpbmdpZnkoc3R1ZGlvSnNvbiwgbnVsbCwgMikpO1xuXG4gICAgICAvLyBVcGRhdGUgd29ya2Zsb3cgc2V0dGluZ3NcbiAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoe1xuICAgICAgICBkZWZpbml0aW9uSWQ6IHdvcmtmbG93RGVmLmlkIHx8IHdvcmtmbG93RGVmLmRlZmluaXRpb25JZCB8fCB3b3JrZmxvd0RlZi5uYW1lLFxuICAgICAgICBuYW1lOiB3b3JrZmxvd0RlZi5uYW1lIHx8ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogd29ya2Zsb3dEZWYuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIGlucHV0czogKHdvcmtmbG93RGVmLmlucHV0cyB8fCBbXSkubWFwKChpbnB1dDogYW55KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGlucHV0Lm5hbWUsXG4gICAgICAgICAgdGl0bGU6IGlucHV0LnRpdGxlIHx8IGlucHV0Lm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNjaGVtYTogaW5wdXQuc2NoZW1hIHx8IHsgZGF0YVR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgdmFsaWRhdGlvbnM6IGlucHV0LnZhbGlkYXRpb25zLFxuICAgICAgICB9KSksXG4gICAgICAgIG91dHB1dHM6ICh3b3JrZmxvd0RlZi5vdXRwdXRzIHx8IFtdKS5tYXAoKG91dHB1dDogYW55KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IG91dHB1dC5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBvdXRwdXQudGl0bGUgfHwgb3V0cHV0Lm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IG91dHB1dC5kZXNjcmlwdGlvbixcbiAgICAgICAgICBzY2hlbWE6IG91dHB1dC5zY2hlbWEgfHwgeyBkYXRhVHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgfSkpLFxuICAgICAgICB2YXJpYWJsZXM6IHdvcmtmbG93RGVmLnZhcmlhYmxlcyB8fCBbXSxcbiAgICAgICAgb3V0Y29tZXM6IHdvcmtmbG93RGVmLm91dGNvbWVzIHx8IFsnRG9uZSddLFxuICAgICAgICB1c2FibGVBc0FjdGl2aXR5OiB3b3JrZmxvd0RlZi5leHRlbnNpb25zPy5lbHNhPy5vcHRpb25zPy51c2FibGVBc0FjdGl2aXR5IHx8IGZhbHNlLFxuICAgICAgICBhdXRvVXBkYXRlQ29uc3VtaW5nV29ya2Zsb3dzOiB3b3JrZmxvd0RlZi5leHRlbnNpb25zPy5lbHNhPy5vcHRpb25zPy5hdXRvVXBkYXRlQ29uc3VtaW5nV29ya2Zsb3dzIHx8IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiB3b3JrZmxvd0RlZi52ZXJzaW9uIHx8IDEsXG4gICAgICAgIGlzTGF0ZXN0OiB3b3JrZmxvd0RlZi5pc0xhdGVzdCAhPT0gdW5kZWZpbmVkID8gd29ya2Zsb3dEZWYuaXNMYXRlc3QgOiB0cnVlLFxuICAgICAgICBpc1B1Ymxpc2hlZDogd29ya2Zsb3dEZWYuaXNQdWJsaXNoZWQgfHwgZmFsc2UsXG4gICAgICAgIHRvb2xWZXJzaW9uOiB3b3JrZmxvd0RlZi50b29sVmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgICBwcm92aWRlck5hbWU6IHdvcmtmbG93RGVmLnByb3ZpZGVyTmFtZSB8fCAnQUNvcmVYJyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFkZExvZygnc3VjY2VzcycsIGBXb3JrZmxvdyAnJHt3b3JrZmxvd05hbWV9JyBsb2FkZWQgc3VjY2Vzc2Z1bGx5YCk7XG5cbiAgICAgIC8vIElmIHZpc3VhbCB0YWIgaXMgYWN0aXZlLCBjb252ZXJ0IHRvIHZpc3VhbFxuICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiKCkgPT09ICd2aXN1YWwnKSB7XG4gICAgICAgIHRoaXMuanNvblRvVmlzdWFsKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhpcy5hZGRMb2coJ2Vycm9yJywgYEZhaWxlZCB0byBsb2FkIHdvcmtmbG93OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKCdbV29ya2Zsb3dTdHVkaW9dIEVycm9yIGxvYWRpbmcgd29ya2Zsb3c6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHdvcmtmbG93IGRlZmluaXRpb24gdG8gc3R1ZGlvIEpTT04gZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRXb3JrZmxvd0RlZmluaXRpb25Ub1N0dWRpb0pzb24od29ya2Zsb3dEZWY6IGFueSk6IGFueSB7XG4gICAgLy8gQ29udmVydCBncmFwaCBmb3JtYXQgdG8gcm9vdCBhY3Rpdml0eSBmb3JtYXRcbiAgICBjb25zdCBncmFwaCA9IHdvcmtmbG93RGVmLmdyYXBoO1xuICAgIGlmICghZ3JhcGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEVtcHR5V29ya2Zsb3coKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCByb290IGFjdGl2aXR5IHN0cnVjdHVyZVxuICAgIGNvbnN0IHJvb3RBY3Rpdml0eTogYW55ID0ge1xuICAgICAgaWQ6IGdyYXBoLnN0YXJ0QWN0aXZpdHlJZCB8fCAncm9vdCcsXG4gICAgICB0eXBlOiAnd29ya2Zsb3ctYWN0aXZpdHk6c2VxdWVuY2UnLFxuICAgICAgbmFtZTogd29ya2Zsb3dEZWYudGl0bGUgfHwgd29ya2Zsb3dEZWYubmFtZSB8fCAnUm9vdCcsXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgfTtcblxuICAgIC8vIENvbnZlcnQgYWN0aXZpdGllcyB0byBjaGlsZHJlblxuICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBncmFwaC5hY3Rpdml0aWVzIHx8IFtdO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gZ3JhcGguY29ubmVjdGlvbnMgfHwgW107XG5cbiAgICAvLyBCdWlsZCBhY3Rpdml0eSBtYXBcbiAgICBjb25zdCBhY3Rpdml0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgYWN0aXZpdGllcy5mb3JFYWNoKChhY3Rpdml0eTogYW55KSA9PiB7XG4gICAgICBhY3Rpdml0eU1hcC5zZXQoYWN0aXZpdHkuaWQsIHtcbiAgICAgICAgaWQ6IGFjdGl2aXR5LmlkLFxuICAgICAgICB0eXBlOiBhY3Rpdml0eS5uYW1lIHx8IGFjdGl2aXR5LnR5cGUsXG4gICAgICAgIG5hbWU6IGFjdGl2aXR5LmN1c3RvbVByb3BlcnRpZXM/Lm5vZGVJZCB8fCBhY3Rpdml0eS5pZCxcbiAgICAgICAgcHJvcGVydGllczogYWN0aXZpdHkuaW5wdXRzIHx8IHt9LFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxkIGNvbm5lY3Rpb25zIHRyZWVcbiAgICBjb25zdCBzdGFydEFjdGl2aXR5ID0gYWN0aXZpdHlNYXAuZ2V0KGdyYXBoLnN0YXJ0QWN0aXZpdHlJZCk7XG4gICAgaWYgKHN0YXJ0QWN0aXZpdHkpIHtcbiAgICAgIHJvb3RBY3Rpdml0eS5jaGlsZHJlbi5wdXNoKHN0YXJ0QWN0aXZpdHkpO1xuICAgICAgXG4gICAgICAvLyBGb2xsb3cgY29ubmVjdGlvbnMgdG8gYnVpbGQgdHJlZVxuICAgICAgY29uc3QgcHJvY2Vzc2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBjb25zdCBwcm9jZXNzQWN0aXZpdHkgPSAoYWN0aXZpdHlJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChwcm9jZXNzZWQuaGFzKGFjdGl2aXR5SWQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NlZC5hZGQoYWN0aXZpdHlJZCk7XG5cbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSBhY3Rpdml0eU1hcC5nZXQoYWN0aXZpdHlJZCk7XG4gICAgICAgIGlmICghYWN0aXZpdHkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIG91dGdvaW5nIGNvbm5lY3Rpb25zXG4gICAgICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSBjb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKGNvbm46IGFueSkgPT4gY29ubi5zb3VyY2UuYWN0aXZ0eU5hbWUgPT09IGFjdGl2aXR5SWRcbiAgICAgICAgKTtcblxuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLmZvckVhY2goKGNvbm46IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldEFjdGl2aXR5ID0gYWN0aXZpdHlNYXAuZ2V0KGNvbm4udGFyZ2V0LmFjdGl2dHlOYW1lKTtcbiAgICAgICAgICBpZiAodGFyZ2V0QWN0aXZpdHkgJiYgIXByb2Nlc3NlZC5oYXModGFyZ2V0QWN0aXZpdHkuaWQpKSB7XG4gICAgICAgICAgICBhY3Rpdml0eS5jaGlsZHJlbi5wdXNoKHRhcmdldEFjdGl2aXR5KTtcbiAgICAgICAgICAgIHByb2Nlc3NBY3Rpdml0eSh0YXJnZXRBY3Rpdml0eS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHByb2Nlc3NBY3Rpdml0eShncmFwaC5zdGFydEFjdGl2aXR5SWQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogd29ya2Zsb3dEZWYuaWQgfHwgd29ya2Zsb3dEZWYubmFtZSB8fCAnd29ya2Zsb3cnLFxuICAgICAgbmFtZTogd29ya2Zsb3dEZWYubmFtZSB8fCAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiB3b3JrZmxvd0RlZi5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIHZlcnNpb246IHdvcmtmbG93RGVmLnZlcnNpb24gfHwgMSxcbiAgICAgIHJvb3Q6IHJvb3RBY3Rpdml0eSxcbiAgICB9O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQYWdlIExheW91dCBPdmVycmlkZXMgICAtLS0tXG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZVRpdGxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8ubWVudXMud29ya2Zsb3ctc3R1ZGlvLnRpdGxlJyk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlRGVzY3JpcHRpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8ubWVudXMud29ya2Zsb3ctc3R1ZGlvLmRlc2NyaXB0aW9uJyk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRQcmltYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdleGVjdXRlLXdvcmtmbG93JyxcbiAgICAgICAgdGl0bGU6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uYWN0aW9ucy5leGVjdXRlLXdvcmtmbG93LnRpdGxlJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXBsYXknLFxuICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0V4ZWN1dGluZygpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3dvcmtmbG93LXNldHRpbmdzJyxcbiAgICAgICAgdGl0bGU6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uYWN0aW9ucy5zZXR0aW5ncy50aXRsZScsXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS1jb2cnLFxuICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2V4cG9ydC13b3JrZmxvdycsXG4gICAgICAgIHRpdGxlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmFjdGlvbnMuZXhwb3J0LnRpdGxlJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWRvd25sb2FkJyxcbiAgICAgICAgY29sb3I6ICdkZWZhdWx0JyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFNlY29uZGFyeU1lbnVJdGVtcygpOiBQcm9taXNlPEFYUEFjdGlvbk1lbnVJdGVtW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnZm9ybWF0LWpzb24nLFxuICAgICAgICB0aXRsZTogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5hY3Rpb25zLmZvcm1hdC1qc29uLnRpdGxlJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNvZGUnLFxuICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NsZWFyLWNhbnZhcycsXG4gICAgICAgIHRpdGxlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmFjdGlvbnMuY2xlYXItY2FudmFzLnRpdGxlJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoJyxcbiAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGl2ZVRhYigpID09PSAndmlzdWFsJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGV4ZWN1dGUoY29tbWFuZDogQVhQRXhlY3V0ZUNvbW1hbmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKGNvbW1hbmQubmFtZSkge1xuICAgICAgY2FzZSAnZXhlY3V0ZS13b3JrZmxvdyc6XG4gICAgICAgIHRoaXMub3BlbkV4ZWN1dGlvbkRpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dvcmtmbG93LXNldHRpbmdzJzpcbiAgICAgICAgdGhpcy5vcGVuV29ya2Zsb3dTZXR0aW5ncygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4cG9ydC13b3JrZmxvdyc6XG4gICAgICAgIHRoaXMuZG93bmxvYWRXb3JrZmxvd0RlZmluaXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmb3JtYXQtanNvbic6XG4gICAgICAgIHRoaXMuZm9ybWF0SnNvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NsZWFyLWNhbnZhcyc6XG4gICAgICAgIHRoaXMuY2xlYXJDYW52YXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDYXRlZ29yeSAmIEFjdGl2aXR5IExvYWRpbmcgICAtLS0tXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjYXRlZ29yeSBzZWxlY3Rpb24gZnJvbSB0cmVlXG4gICAqL1xuICBvbkNhdGVnb3J5Q2xpY2soY2F0ZWdvcnk6IEFYUEFjdGl2aXR5Q2F0ZWdvcnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KGNhdGVnb3J5KTtcbiAgICB0aGlzLnNlbGVjdGVkQWN0aXZpdHkuc2V0KG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhY3Rpdml0eSBzZWxlY3Rpb24gZnJvbSB0cmVlXG4gICAqL1xuICBvbkFjdGl2aXR5Q2xpY2soYWN0aXZpdHk6IEFYUEFjdGl2aXR5RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBY3Rpdml0eS5zZXQoYWN0aXZpdHkpO1xuICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYEFjdGl2aXR5IHNlbGVjdGVkOiAke2FjdGl2aXR5Lm5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBBWFBBY3Rpdml0eURlZmluaXRpb24gdG8gQWN0aXZpdHlJbmZvXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRBY3Rpdml0eURlZmluaXRpb25Ub0luZm8oYWN0aXZpdHk6IEFYUEFjdGl2aXR5RGVmaW5pdGlvbik6IEFjdGl2aXR5SW5mbyB7XG4gICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlTY2hlbWFbXSA9IChhY3Rpdml0eS5pbnB1dHMgfHwgW10pLm1hcChpbnB1dCA9PiAoe1xuICAgICAgbmFtZTogaW5wdXQubmFtZSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0UHJvcGVydHlUeXBlRnJvbVNjaGVtYShpbnB1dC5zY2hlbWEpLFxuICAgICAgcmVxdWlyZWQ6ICFpbnB1dC5zY2hlbWEubnVsbGFibGUsXG4gICAgICBkZXNjcmlwdGlvbjogaW5wdXQuZGVzY3JpcHRpb24sXG4gICAgICBkZWZhdWx0VmFsdWU6IGlucHV0LnNjaGVtYS5kZWZhdWx0VmFsdWVcbiAgICB9KSk7XG5cbiAgICBjb25zdCBkZWZhdWx0UHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIHByb3BlcnRpZXMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGlmIChwcm9wLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzW3Byb3AubmFtZV0gPSBwcm9wLmRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBhY3Rpdml0eS50eXBlLFxuICAgICAgbmFtZTogYWN0aXZpdHkubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBhY3Rpdml0eS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIGljb246IGFjdGl2aXR5Lmljb24gfHwgJ2ZhLWxpZ2h0IGZhLWNpcmNsZScsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwcm9wZXJ0eSB0eXBlIGZyb20gc2NoZW1hXG4gICAqL1xuICBwcml2YXRlIGdldFByb3BlcnR5VHlwZUZyb21TY2hlbWEoc2NoZW1hOiBhbnkpOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnYXJyYXknIHwgJ3NlbGVjdCcgfCAnYW55JyB7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBzY2hlbWE/LmRhdGFUeXBlIHx8ICdzdHJpbmcnO1xuICAgIGlmIChkYXRhVHlwZSA9PT0gJ2FycmF5JykgcmV0dXJuICdhcnJheSc7XG4gICAgaWYgKGRhdGFUeXBlID09PSAnb2JqZWN0JykgcmV0dXJuICdvYmplY3QnO1xuICAgIGlmIChkYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIGlmIChkYXRhVHlwZSA9PT0gJ251bWJlcicgfHwgZGF0YVR5cGUgPT09ICdpbnRlZ2VyJykgcmV0dXJuICdudW1iZXInO1xuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2F0ZWdvcnkgY29sb3JcbiAgICovXG4gIHByaXZhdGUgZ2V0Q2F0ZWdvcnlDb2xvcihjYXRlZ29yeUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbG9yTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3dvcmtmbG93LW1hcmtlcnMnOiAnIzEwQjk4MScsXG4gICAgICAnY29udHJvbC1mbG93JzogJyMzQjgyRjYnLFxuICAgICAgJ3VzZXItaW50ZXJhY3Rpb24nOiAnIzhCNUNGNicsXG4gICAgICAnZGF0YSc6ICcjMTBCOTgxJyxcbiAgICAgICduYXZpZ2F0aW9uJzogJyNGNTlFMEInLFxuICAgICAgJ2V2ZW50cyc6ICcjRUY0NDQ0JyxcbiAgICAgICdodHRwJzogJyMwNkI2RDQnXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JNYXBbY2F0ZWdvcnlJZF0gfHwgJyM2NDc0OEInO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbXB0eSB3b3JrZmxvdyBKU09OXG4gICAqL1xuICBwcml2YXRlIGdldEVtcHR5V29ya2Zsb3coKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6ICduZXctd29ya2Zsb3cnLFxuICAgICAgbmFtZTogJycsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgcm9vdDoge1xuICAgICAgICBpZDogJ3Jvb3QnLFxuICAgICAgICB0eXBlOiAnd29ya2Zsb3ctYWN0aXZpdHk6c2VxdWVuY2UnLFxuICAgICAgICBuYW1lOiAnUm9vdCcsXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgfVxuICAgIH0sIG51bGwsIDIpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cblxuXG5cbiAgLyoqXG4gICAqIFN5bmMgdmlzdWFsaXplciB3aXRoIEpTT04gY2hhbmdlc1xuICAgKi9cbiAgc3luY1Zpc3VhbGl6ZXJXaXRoSnNvbigpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiKCkgPT09ICd2aXN1YWwnKSB7XG4gICAgICAgIHRoaXMuanNvblRvVmlzdWFsKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbV29ya2Zsb3dTdHVkaW9dIEVycm9yIHN5bmNpbmcgdmlzdWFsaXplcjonLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgV29ya2Zsb3cgRXhlY3V0aW9uICAgLS0tLVxuXG4gIC8qKlxuICAgKiBPcGVuIGV4ZWN1dGlvbiBkaWFsb2dcbiAgICovXG4gIG9wZW5FeGVjdXRpb25EaWFsb2coKSB7XG4gICAgdGhpcy5zaG93RXhlY3V0aW9uRGlhbG9nLnNldCh0cnVlKTtcbiAgICB0aGlzLndvcmtmbG93SW5zdGFuY2VTdGF0ZS5zZXQobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgZXhlY3V0aW9uIGRpYWxvZ1xuICAgKi9cbiAgY2xvc2VFeGVjdXRpb25EaWFsb2coKSB7XG4gICAgdGhpcy5zaG93RXhlY3V0aW9uRGlhbG9nLnNldChmYWxzZSk7XG4gICAgdGhpcy53b3JrZmxvd0luc3RhbmNlU3RhdGUuc2V0KG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHdvcmtmbG93IGV4ZWN1dGlvblxuICAgKi9cbiAgYXN5bmMgc3RhcnRXb3JrZmxvd0V4ZWN1dGlvbigpIHtcbiAgICBhd2FpdCB0aGlzLnJ1bldvcmtmbG93KCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiDYp9is2LHYp9uMIHdvcmtmbG93XG4gICAqL1xuICBhc3luYyBydW5Xb3JrZmxvdygpIHtcbiAgICB0aGlzLmlzRXhlY3V0aW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmV4ZWN1dGlvbkxvZ3Muc2V0KFtdKTtcbiAgICB0aGlzLndvcmtmbG93SW5zdGFuY2VTdGF0ZS5zZXQoe1xuICAgICAgc3RhdHVzOiAncnVubmluZycsXG4gICAgICBzdGFydFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICBjdXJyZW50U3RhdGU6IG51bGxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgJ9i02LHZiNi5INin2KzYsdin24wgV29ya2Zsb3cuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSBKU09OXG4gICAgICBjb25zdCB3b3JrZmxvd0RlZiA9IEpTT04ucGFyc2UodGhpcy53b3JrZmxvd0pzb24oKSk7XG4gICAgICBjb25zdCBsb2dNZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnRlc3QtcGFnZXMubWVzc2FnZXMuaW5mby5qc29uLXBhcnNlZCcpO1xuICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBsb2dNZXNzYWdlLCB3b3JrZmxvd0RlZik7XG5cbiAgICAgIC8vIFNhdmUgd29ya2Zsb3cgZGVmaW5pdGlvbiB0byBlbnRpdHkgc2VydmljZSBmaXJzdFxuICAgICAgY29uc3Qgd29ya2Zsb3dJZCA9IHdvcmtmbG93RGVmLmlkIHx8IGB3b3JrZmxvdy0ke0RhdGUubm93KCl9YDtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25Ub1NhdmUgPSB0aGlzLmV4cG9ydFdvcmtmbG93RGVmaW5pdGlvbigpO1xuICAgICAgXG4gICAgICBpZiAoIWRlZmluaXRpb25Ub1NhdmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZXhwb3J0IHdvcmtmbG93IGRlZmluaXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBvciB1cGRhdGUgd29ya2Zsb3cgZGVmaW5pdGlvblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICAgICAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICAgICAgIFJvb3RDb25maWcuZW50aXRpZXMud29ya2Zsb3dEZWZpbml0aW9uLm5hbWVcbiAgICAgICAgKS5kYXRhKCkuYnlLZXkod29ya2Zsb3dJZCk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5lbnRpdHlTZXJ2aWNlLndpdGhFbnRpdHkoXG4gICAgICAgICAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICAgICAgICAgUm9vdENvbmZpZy5lbnRpdGllcy53b3JrZmxvd0RlZmluaXRpb24ubmFtZVxuICAgICAgICAgICkuZGF0YSgpLnVwZGF0ZSh3b3JrZmxvd0lkLCBkZWZpbml0aW9uVG9TYXZlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICAgICAgICAgIFJvb3RDb25maWcubW9kdWxlLm5hbWUsXG4gICAgICAgICAgICBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93RGVmaW5pdGlvbi5uYW1lXG4gICAgICAgICAgKS5kYXRhKCkuY3JlYXRlKHsgLi4uZGVmaW5pdGlvblRvU2F2ZSwgaWQ6IHdvcmtmbG93SWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYXZlTWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAd29ya2Zsb3ctbWFuYWdlbWVudDp0ZXN0LXBhZ2VzLm1lc3NhZ2VzLnN1Y2Nlc3Mud29ya2Zsb3ctc2F2ZWQnKTtcbiAgICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBzYXZlTWVzc2FnZSk7XG4gICAgICB9IGNhdGNoIChzYXZlRXJyb3I6IGFueSkge1xuICAgICAgICAvLyBDb250aW51ZSBleGVjdXRpb24gZXZlbiBpZiBzYXZlIGZhaWxzXG4gICAgICAgIGNvbnN0IHNhdmVFcnJvck1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGVzdC1wYWdlcy5tZXNzYWdlcy53YXJuaW5nLnNhdmUtZmFpbGVkJyk7XG4gICAgICAgIHRoaXMuYWRkTG9nKCd3YXJuaW5nJywgYCR7c2F2ZUVycm9yTWVzc2FnZX06ICR7c2F2ZUVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vINin2KzYsdin24wgd29ya2Zsb3dcbiAgICAgIGNvbnN0IGV4ZWN1dGluZ01lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGVzdC1wYWdlcy5tZXNzYWdlcy5pbmZvLmV4ZWN1dGluZycpO1xuICAgICAgdGhpcy5hZGRMb2coJ2luZm8nLCBleGVjdXRpbmdNZXNzYWdlKTtcblxuICAgICAgLy8gU3RhcnQgd29ya2Zsb3cgZXhlY3V0aW9uIHVzaW5nIHRoZSB3b3JrZmxvdyBuYW1lXG4gICAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBkZWZpbml0aW9uVG9TYXZlLm5hbWUgfHwgd29ya2Zsb3dJZDtcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLndvcmtmbG93TWFuYWdlci5zdGFydCh3b3JrZmxvd05hbWUsIHt9KTtcbiAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYFdvcmtmbG93IHN0YXJ0ZWQuIEluc3RhbmNlIElEOiAke3Jlc3VsdC5pbnN0YW5jZUlkfWAsIHJlc3VsdCk7XG5cbiAgICAgIGlmICghcmVzdWx0Lmluc3RhbmNlSWQpIHtcbiAgICAgICAgdGhpcy5hZGRMb2coJ2Vycm9yJywgJ+KdjCBXb3JrZmxvdyDYqNinINiu2LfYpyDZhdmI2KfYrNmHINi02K8nLCByZXN1bHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSB3b3JrZmxvdyBleGVjdXRpb24gbG9vcCAtIGV4ZWN1dGUgYWxsIGZyb250ZW5kIHRhc2tzXG4gICAgICBsZXQgY3VycmVudFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIGxldCB0YXNrQ291bnQgPSAwO1xuXG4gICAgICB3aGlsZSAoY3VycmVudFJlc3VsdC5uZXh0VGFzaykge1xuICAgICAgICB0YXNrQ291bnQrKztcbiAgICAgICAgY29uc3QgdGFzayA9IGN1cnJlbnRSZXN1bHQubmV4dFRhc2s7XG5cbiAgICAgICAgdGhpcy5hZGRMb2coJ2luZm8nLCBg8J+TiyBUYXNrICR7dGFza0NvdW50fTogJHt0YXNrLmFjdGl2aXR5VHlwZX0gKCR7dGFzay5hY3Rpdml0eU5hbWUgfHwgdGFzay5hY3Rpdml0eUlkfSlgLCB0YXNrKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEV4ZWN1dGUgZnJvbnRlbmQgdGFza1xuICAgICAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYOKaoSBFeGVjdXRpbmcgdGFzazogJHt0YXNrLmFjdGl2aXR5VHlwZX0uLi5gKTtcbiAgICAgICAgICAvLyBjb25zdCB7IG91dHB1dCwgb3V0Y29tZSB9ID0gYXdhaXQgdGhpcy53b3JrZmxvd01hbmFnZXIuZXhlY3V0ZSh0YXNrKTtcbiAgICAgICAgIC8vIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgYOKchSBUYXNrIGV4ZWN1dGVkLiBPdXRjb21lOiAke291dGNvbWV9YCwgeyBvdXRwdXQsIG91dGNvbWUgfSk7XG5cbiAgICAgICAgICAvLyBDb21wbGV0ZSB0YXNrIGFuZCBnZXQgbmV4dFxuICAgICAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYPCflIQgQ29tcGxldGluZyB0YXNrIGFuZCBnZXR0aW5nIG5leHQuLi5gKTtcbiAgICAgICAgICAvLyBjdXJyZW50UmVzdWx0ID0gYXdhaXQgdGhpcy53b3JrZmxvd01hbmFnZXIuY29tcGxldGUoXG4gICAgICAgICAgLy8gICBjdXJyZW50UmVzdWx0Lmluc3RhbmNlSWQhLFxuICAgICAgICAgIC8vICAgdGFzayxcbiAgICAgICAgICAvLyAgIG91dGNvbWUsXG4gICAgICAgICAgLy8gICBvdXRwdXRcbiAgICAgICAgICAvLyApO1xuXG4gICAgICAgICAgaWYgKCFjdXJyZW50UmVzdWx0Lmluc3RhbmNlSWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTG9nKCdlcnJvcicsICfinYwgVGFzayBjb21wbGV0aW9uIGZhaWxlZCcsIGN1cnJlbnRSZXN1bHQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGN1cnJlbnRSZXN1bHQubmV4dFRhc2spIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYOKeoe+4jyBOZXh0IHRhc2sgYXZhaWxhYmxlOiAke2N1cnJlbnRSZXN1bHQubmV4dFRhc2suYWN0aXZpdHlUeXBlfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZExvZygnc3VjY2VzcycsICfinIUgTm8gbW9yZSB0YXNrcy4gV29ya2Zsb3cgY29tcGxldGVkIScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHRoaXMuYWRkTG9nKCdlcnJvcicsIGDinYwgRXJyb3IgZXhlY3V0aW5nIHRhc2s6ICR7ZXJyb3IubWVzc2FnZX1gLCBlcnJvcik7XG4gICAgICAgICAgY3VycmVudFJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnRSZXN1bHQsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdUYXNrIGV4ZWN1dGlvbiBmYWlsZWQnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDZhtiq24zYrNmHXG4gICAgICB0aGlzLndvcmtmbG93SW5zdGFuY2VTdGF0ZS5zZXQoe1xuICAgICAgICBzdGF0dXM6ICdmaW5pc2hlZCcsXG4gICAgICAgIGZpbmFsUmVzdWx0OiBjdXJyZW50UmVzdWx0LFxuICAgICAgICBzdGFydFRpbWU6IHRoaXMud29ya2Zsb3dJbnN0YW5jZVN0YXRlKCkuc3RhcnRUaW1lIHx8IG5ldyBEYXRlKCksXG4gICAgICAgIGVuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgIHJlc3VsdDogY3VycmVudFJlc3VsdCxcbiAgICAgICAgY3VycmVudFN0YXRlOiBjdXJyZW50UmVzdWx0LnN0YXRlPy5vdXRwdXQ/LlsndGFza1N0YXR1cyddIHx8IGN1cnJlbnRSZXN1bHQuc3RhdGU/Lm91dHB1dD8uWydjdXJyZW50U3RhdGUnXVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjdXJyZW50UmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBg4pyFIFdvcmtmbG93INio2Kcg2YXZiNmB2YLbjNiqINin2KzYsdinINi02K8hICgke3Rhc2tDb3VudH0gdGFzayhzKSBleGVjdXRlZClgLCBjdXJyZW50UmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkTG9nKCdlcnJvcicsICfinYwgV29ya2Zsb3cg2KjYpyDYrti32Kcg2YXZiNin2KzZhyDYtNivOiAnICsgKGN1cnJlbnRSZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKSwgY3VycmVudFJlc3VsdCk7XG4gICAgICB9XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixINin2KzYsdin24wgV29ya2Zsb3c6ICcgKyBlcnJvci5tZXNzYWdlLCBlcnJvcik7XG4gICAgICB0aGlzLndvcmtmbG93SW5zdGFuY2VTdGF0ZS5zZXQoe1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFydFRpbWU6IHRoaXMud29ya2Zsb3dJbnN0YW5jZVN0YXRlKCkuc3RhcnRUaW1lXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0V4ZWN1dGluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqINin2LbYp9mB2Ycg2qnYsdiv2YYg2YTYp9qvXG4gICAqL1xuICBhZGRMb2cobGV2ZWw6ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdlcnJvcicsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IGFueSkge1xuICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmV4ZWN1dGlvbkxvZ3MoKTtcbiAgICBsb2dzLnB1c2goe1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgbGV2ZWwsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZGF0YVxuICAgIH0pO1xuICAgIHRoaXMuZXhlY3V0aW9uTG9ncy5zZXQoWy4uLmxvZ3NdKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqINqp2b7bjCDaqdix2K/ZhiDZhtmF2YjZhtmHIGFjdGl2aXR5XG4gICAqL1xuICBjb3B5QWN0aXZpdHlUZW1wbGF0ZShhY3Rpdml0eTogQWN0aXZpdHlJbmZvKSB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB7XG4gICAgICBpZDogYCR7YWN0aXZpdHkudHlwZS50b0xvd2VyQ2FzZSgpfS0ke0RhdGUubm93KCl9YCxcbiAgICAgIHR5cGU6IGFjdGl2aXR5LnR5cGUsXG4gICAgICBuYW1lOiBhY3Rpdml0eS5uYW1lLFxuICAgICAgcHJvcGVydGllczoge31cbiAgICB9O1xuXG4gICAgLy8g2qnZvtuMINiv2LEg2qnZhNuM2b7igIzYqNmI2LHYr1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlLCBudWxsLCAyKSk7XG4gICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBg4pyC77iPIFRlbXBsYXRlINio2LHYp9uMICR7YWN0aXZpdHkubmFtZX0g2qnZvtuMINi02K8hYCk7XG4gIH1cblxuICAvKipcbiAgICog2YHYsdmF2Kog2qnYsdiv2YYgSlNPTlxuICAgKi9cbiAgZm9ybWF0SnNvbigpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0aGlzLndvcmtmbG93SnNvbigpKTtcbiAgICAgIHRoaXMud29ya2Zsb3dKc29uLnNldChKU09OLnN0cmluZ2lmeShwYXJzZWQsIG51bGwsIDIpKTtcbiAgICAgIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgJ+KcqCBKU09OINmB2LHZhdiqINi02K8nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixINmB2LHZhdiqOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICog2KjYp9iyINqp2LHYr9mGINiq2YbYuNuM2YXYp9iqIHdvcmtmbG93XG4gICAqL1xuICBvcGVuV29ya2Zsb3dTZXR0aW5ncygpIHtcbiAgICAvLyBFeHRyYWN0IHNldHRpbmdzIGZyb20gY3VycmVudCB3b3JrZmxvdyBKU09OXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtmbG93ID0gSlNPTi5wYXJzZSh0aGlzLndvcmtmbG93SnNvbigpKTtcblxuICAgICAgLy8gQ29udmVydCBvbGQgZm9ybWF0IGlucHV0cy9vdXRwdXRzIHRvIG5ldyBmb3JtYXRcbiAgICAgIGNvbnN0IGNvbnZlcnRJbnB1dCA9IChpbnB1dDogYW55KTogV29ya2Zsb3dJbnB1dCA9PiB7XG4gICAgICAgIGlmIChpbnB1dC5zY2hlbWEpIHtcbiAgICAgICAgICAvLyBBbHJlYWR5IGluIG5ldyBmb3JtYXRcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogaW5wdXQubmFtZSxcbiAgICAgICAgICAgIHRpdGxlOiBpbnB1dC50aXRsZSB8fCBpbnB1dC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgc2NoZW1hOiBpbnB1dC5zY2hlbWEsXG4gICAgICAgICAgICB2YWxpZGF0aW9uczogaW5wdXQudmFsaWRhdGlvbnNcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE9sZCBmb3JtYXQgLSBjb252ZXJ0XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGlucHV0Lm5hbWUsXG4gICAgICAgICAgICB0aXRsZTogaW5wdXQubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpbnB1dC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICBkYXRhVHlwZTogaW5wdXQudHlwZU5hbWUgfHwgJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogaW5wdXQuZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsaWRhdGlvbnM6IGlucHV0LmlzUmVxdWlyZWQgPyBbeyBydWxlOiAncmVxdWlyZWQnIH1dIDogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29udmVydE91dHB1dCA9IChvdXRwdXQ6IGFueSk6IFdvcmtmbG93T3V0cHV0ID0+IHtcbiAgICAgICAgaWYgKG91dHB1dC5zY2hlbWEpIHtcbiAgICAgICAgICAvLyBBbHJlYWR5IGluIG5ldyBmb3JtYXRcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogb3V0cHV0Lm5hbWUsXG4gICAgICAgICAgICB0aXRsZTogb3V0cHV0LnRpdGxlIHx8IG91dHB1dC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IG91dHB1dC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjaGVtYTogb3V0cHV0LnNjaGVtYVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT2xkIGZvcm1hdCAtIGNvbnZlcnRcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogb3V0cHV0Lm5hbWUsXG4gICAgICAgICAgICB0aXRsZTogb3V0cHV0Lm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3V0cHV0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgIGRhdGFUeXBlOiBvdXRwdXQudHlwZU5hbWUgfHwgJ3N0cmluZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHtcbiAgICAgICAgZGVmaW5pdGlvbklkOiB3b3JrZmxvdy5kZWZpbml0aW9uSWQgfHwgd29ya2Zsb3cuaWQgfHwgJycsXG4gICAgICAgIG5hbWU6IHdvcmtmbG93Lm5hbWUgfHwgJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB3b3JrZmxvdy5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgaW5wdXRzOiAod29ya2Zsb3cuaW5wdXRzIHx8IFtdKS5tYXAoY29udmVydElucHV0KSxcbiAgICAgICAgb3V0cHV0czogKHdvcmtmbG93Lm91dHB1dHMgfHwgW10pLm1hcChjb252ZXJ0T3V0cHV0KSxcbiAgICAgICAgdmFyaWFibGVzOiB3b3JrZmxvdy52YXJpYWJsZXMgfHwgW10sXG4gICAgICAgIG91dGNvbWVzOiB3b3JrZmxvdy5vdXRjb21lcyB8fCBbJ0RvbmUnXSxcbiAgICAgICAgdXNhYmxlQXNBY3Rpdml0eTogd29ya2Zsb3cub3B0aW9ucz8udXNhYmxlQXNBY3Rpdml0eSB8fCBmYWxzZSxcbiAgICAgICAgYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93czogd29ya2Zsb3cub3B0aW9ucz8uYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93cyB8fCBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogd29ya2Zsb3cudmVyc2lvbiB8fCAxLFxuICAgICAgICBpc0xhdGVzdDogd29ya2Zsb3cuaXNMYXRlc3QgIT09IHVuZGVmaW5lZCA/IHdvcmtmbG93LmlzTGF0ZXN0IDogdHJ1ZSxcbiAgICAgICAgaXNQdWJsaXNoZWQ6IHdvcmtmbG93LmlzUHVibGlzaGVkIHx8IGZhbHNlLFxuICAgICAgICB0b29sVmVyc2lvbjogd29ya2Zsb3cudG9vbFZlcnNpb24gfHwgJzEuMC4wJyxcbiAgICAgICAgcHJvdmlkZXJOYW1lOiB3b3JrZmxvdy5wcm92aWRlck5hbWUgfHwgJ1dvcmtmbG93U3R1ZGlvJ1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHVzZSBkZWZhdWx0IHNldHRpbmdzXG4gICAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHtcbiAgICAgICAgZGVmaW5pdGlvbklkOiAnJyxcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgaW5wdXRzOiBbXSxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIHZhcmlhYmxlczogW10sXG4gICAgICAgIG91dGNvbWVzOiBbJ0RvbmUnXSxcbiAgICAgICAgdXNhYmxlQXNBY3Rpdml0eTogZmFsc2UsXG4gICAgICAgIGF1dG9VcGRhdGVDb25zdW1pbmdXb3JrZmxvd3M6IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBpc0xhdGVzdDogdHJ1ZSxcbiAgICAgICAgaXNQdWJsaXNoZWQ6IGZhbHNlLFxuICAgICAgICB0b29sVmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgcHJvdmlkZXJOYW1lOiAnV29ya2Zsb3dTdHVkaW8nXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zaG93V29ya2Zsb3dTZXR0aW5ncy5zZXQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICog2KjYs9iq2YYg2KrZhti424zZhdin2Kogd29ya2Zsb3dcbiAgICovXG4gIGNsb3NlV29ya2Zsb3dTZXR0aW5ncygpIHtcbiAgICB0aGlzLnNob3dXb3JrZmxvd1NldHRpbmdzLnNldChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICog2LDYrtuM2LHZhyDYqtmG2LjbjNmF2KfYqiB3b3JrZmxvd1xuICAgKi9cbiAgc2F2ZVdvcmtmbG93U2V0dGluZ3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtmbG93ID0gSlNPTi5wYXJzZSh0aGlzLndvcmtmbG93SnNvbigpKTtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy53b3JrZmxvd1NldHRpbmdzKCk7XG5cbiAgICAgIC8vIFVwZGF0ZSB3b3JrZmxvdyB3aXRoIHNldHRpbmdzIGFjY29yZGluZyB0byBXb3JrZmxvd0RlZmluaXRpb24gc3RydWN0dXJlXG4gICAgICB3b3JrZmxvdy5kZWZpbml0aW9uSWQgPSBzZXR0aW5ncy5kZWZpbml0aW9uSWQ7XG4gICAgICB3b3JrZmxvdy5uYW1lID0gc2V0dGluZ3MubmFtZTtcbiAgICAgIHdvcmtmbG93LmRlc2NyaXB0aW9uID0gc2V0dGluZ3MuZGVzY3JpcHRpb247XG4gICAgICB3b3JrZmxvdy52ZXJzaW9uID0gc2V0dGluZ3MudmVyc2lvbjtcbiAgICAgIHdvcmtmbG93LmlzTGF0ZXN0ID0gc2V0dGluZ3MuaXNMYXRlc3Q7XG4gICAgICB3b3JrZmxvdy5pc1B1Ymxpc2hlZCA9IHNldHRpbmdzLmlzUHVibGlzaGVkO1xuICAgICAgd29ya2Zsb3cudG9vbFZlcnNpb24gPSBzZXR0aW5ncy50b29sVmVyc2lvbjtcbiAgICAgIHdvcmtmbG93LnByb3ZpZGVyTmFtZSA9IHNldHRpbmdzLnByb3ZpZGVyTmFtZTtcblxuICAgICAgLy8gV29ya2Zsb3dDb21tb24gcHJvcGVydGllc1xuICAgICAgd29ya2Zsb3cub3B0aW9ucyA9IHtcbiAgICAgICAgdXNhYmxlQXNBY3Rpdml0eTogc2V0dGluZ3MudXNhYmxlQXNBY3Rpdml0eSxcbiAgICAgICAgYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93czogc2V0dGluZ3MuYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93c1xuICAgICAgfTtcbiAgICAgIHdvcmtmbG93LnZhcmlhYmxlcyA9IHNldHRpbmdzLnZhcmlhYmxlcy5tYXAodiA9PiAoe1xuICAgICAgICBpZDogdi5uYW1lLCAvLyBVc2UgbmFtZSBhcyBpZCBmb3Igbm93XG4gICAgICAgIG5hbWU6IHYubmFtZSxcbiAgICAgICAgdHlwZU5hbWU6IHYudHlwZU5hbWUsXG4gICAgICAgIHZhbHVlOiB2LnZhbHVlLFxuICAgICAgICBzdG9yYWdlRHJpdmVyVHlwZTogJ01lbW9yeScgLy8gRGVmYXVsdCBzdG9yYWdlIGRyaXZlclxuICAgICAgfSkpO1xuICAgICAgd29ya2Zsb3cuaW5wdXRzID0gc2V0dGluZ3MuaW5wdXRzLm1hcChpID0+ICh7XG4gICAgICAgIG5hbWU6IGkubmFtZSxcbiAgICAgICAgdGl0bGU6IGkudGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBpLmRlc2NyaXB0aW9uLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBkYXRhVHlwZTogaS5zY2hlbWEuZGF0YVR5cGUsXG4gICAgICAgICAgbnVsbGFibGU6IGkuc2NoZW1hLm51bGxhYmxlLFxuICAgICAgICAgIHJlYWRvbmx5OiBpLnNjaGVtYS5yZWFkb25seSxcbiAgICAgICAgICBoaWRkZW46IGkuc2NoZW1hLmhpZGRlbixcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IGkuc2NoZW1hLmRlZmF1bHRWYWx1ZVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogaS52YWxpZGF0aW9uc1xuICAgICAgfSkpO1xuICAgICAgd29ya2Zsb3cub3V0cHV0cyA9IHNldHRpbmdzLm91dHB1dHMubWFwKG8gPT4gKHtcbiAgICAgICAgbmFtZTogby5uYW1lLFxuICAgICAgICB0aXRsZTogby50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG8uZGVzY3JpcHRpb24sXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiBvLnNjaGVtYS5kYXRhVHlwZVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICB3b3JrZmxvdy5vdXRjb21lcyA9IHNldHRpbmdzLm91dGNvbWVzO1xuICAgICAgd29ya2Zsb3cuY3VzdG9tUHJvcGVydGllcyA9IHdvcmtmbG93LmN1c3RvbVByb3BlcnRpZXMgfHwge307XG4gICAgICB3b3JrZmxvdy5pc1JlYWRvbmx5ID0gZmFsc2U7XG4gICAgICB3b3JrZmxvdy5pc1N5c3RlbSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLndvcmtmbG93SnNvbi5zZXQoSlNPTi5zdHJpbmdpZnkod29ya2Zsb3csIG51bGwsIDIpKTtcbiAgICAgIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgJ+KchSDYqtmG2LjbjNmF2KfYqiDZiNix2qkg2YHZhNmIINiw2K7bjNix2Ycg2LTYrycpO1xuICAgICAgdGhpcy5jbG9zZVdvcmtmbG93U2V0dGluZ3MoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixINiw2K7bjNix2Ycg2KrZhti424zZhdin2Ko6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHdvcmtmbG93INio2Ycg2YHYsdmF2KogRWxzYSBXb3JrZmxvdyBEZWZpbml0aW9uIHYzLjAuMFxuICAgKiBodHRwczovL2Vsc2F3b3JrZmxvd3MuaW8vc2NoZW1hcy93b3JrZmxvdy1kZWZpbml0aW9uL3YzLjAuMC9zY2hlbWEuanNvblxuICAgKi9cbiAgZXhwb3J0V29ya2Zsb3dEZWZpbml0aW9uKCk6IGFueSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtmbG93ID0gSlNPTi5wYXJzZSh0aGlzLndvcmtmbG93SnNvbigpKTtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy53b3JrZmxvd1NldHRpbmdzKCk7XG5cbiAgICAgIC8vIENyZWF0ZSBFbHNhIFdvcmtmbG93IERlZmluaXRpb24gdjMuMC4wIHN0cnVjdHVyZVxuICAgICAgY29uc3QgZGVmaW5pdGlvbjogYW55ID0ge1xuICAgICAgICAvLyBWZXJzaW9uZWRFbnRpdHkgZmllbGRzXG4gICAgICAgIGlkOiB3b3JrZmxvdy5pZCB8fCB0aGlzLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdmVyc2lvbjogc2V0dGluZ3MudmVyc2lvbixcbiAgICAgICAgaXNMYXRlc3Q6IHNldHRpbmdzLmlzTGF0ZXN0LFxuICAgICAgICBpc1B1Ymxpc2hlZDogc2V0dGluZ3MuaXNQdWJsaXNoZWQsXG5cbiAgICAgICAgLy8gSWRlbnRpZmljYXRpb24gZmllbGRzXG4gICAgICAgIGRlZmluaXRpb25JZDogc2V0dGluZ3MuZGVmaW5pdGlvbklkIHx8IHdvcmtmbG93LmlkIHx8IHRoaXMuZ2VuZXJhdGVJZCgpLFxuICAgICAgICBuYW1lOiBzZXR0aW5ncy5uYW1lIHx8IHdvcmtmbG93Lm5hbWUgfHwgJ1VudGl0bGVkIFdvcmtmbG93JyxcbiAgICAgICAgZGVzY3JpcHRpb246IHNldHRpbmdzLmRlc2NyaXB0aW9uIHx8IHdvcmtmbG93LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICB0b29sVmVyc2lvbjogc2V0dGluZ3MudG9vbFZlcnNpb24gfHwgJzMuMC4wJyxcblxuICAgICAgICAvLyBNYXRlcmlhbGl6YXRpb24gZmllbGRzXG4gICAgICAgIHByb3ZpZGVyTmFtZTogc2V0dGluZ3MucHJvdmlkZXJOYW1lIHx8ICdBQ29yZVgnLFxuICAgICAgICBtYXRlcmlhbGl6ZXJDb250ZXh0OiB7XG4gICAgICAgICAgbWF0ZXJpYWxpemVyTmFtZTogJ0pzb24nLFxuICAgICAgICAgIC8vIFN0b3JlIHRoZSByb290IGFjdGl2aXR5IGFzIEpTT04gc3RyaW5nXG4gICAgICAgICAgc3RyaW5nRGF0YTogSlNPTi5zdHJpbmdpZnkod29ya2Zsb3cucm9vdClcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBXb3JrZmxvd0NvbW1vbiBmaWVsZHNcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHVzYWJsZUFzQWN0aXZpdHk6IHNldHRpbmdzLnVzYWJsZUFzQWN0aXZpdHkgfHwgZmFsc2UsXG4gICAgICAgICAgYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93czogc2V0dGluZ3MuYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93cyB8fCBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFZhcmlhYmxlcyBhcnJheVxuICAgICAgICB2YXJpYWJsZXM6IHNldHRpbmdzLnZhcmlhYmxlcy5tYXAodiA9PiAoe1xuICAgICAgICAgIGlkOiB2Lm5hbWUsXG4gICAgICAgICAgbmFtZTogdi5uYW1lLFxuICAgICAgICAgIHR5cGVOYW1lOiB2LnR5cGVOYW1lLFxuICAgICAgICAgIHZhbHVlOiB2LnZhbHVlLFxuICAgICAgICAgIHN0b3JhZ2VEcml2ZXJUeXBlOiAnTWVtb3J5J1xuICAgICAgICB9KSksXG5cbiAgICAgICAgLy8gSW5wdXRzIGFycmF5XG4gICAgICAgIGlucHV0czogc2V0dGluZ3MuaW5wdXRzLm1hcChpID0+ICh7XG4gICAgICAgICAgbmFtZTogaS5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBpLnRpdGxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBpLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgZGF0YVR5cGU6IGkuc2NoZW1hLmRhdGFUeXBlLFxuICAgICAgICAgICAgbnVsbGFibGU6IGkuc2NoZW1hLm51bGxhYmxlLFxuICAgICAgICAgICAgcmVhZG9ubHk6IGkuc2NoZW1hLnJlYWRvbmx5LFxuICAgICAgICAgICAgaGlkZGVuOiBpLnNjaGVtYS5oaWRkZW4sXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGkuc2NoZW1hLmRlZmF1bHRWYWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmFsaWRhdGlvbnM6IGkudmFsaWRhdGlvbnMgfHwgW11cbiAgICAgICAgfSkpLFxuXG4gICAgICAgIC8vIE91dHB1dHMgYXJyYXlcbiAgICAgICAgb3V0cHV0czogc2V0dGluZ3Mub3V0cHV0cy5tYXAobyA9PiAoe1xuICAgICAgICAgIG5hbWU6IG8ubmFtZSxcbiAgICAgICAgICB0aXRsZTogby50aXRsZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogby5kZXNjcmlwdGlvbixcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiBvLnNjaGVtYS5kYXRhVHlwZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpLFxuXG4gICAgICAgIC8vIE91dGNvbWVzIGFycmF5XG4gICAgICAgIG91dGNvbWVzOiBzZXR0aW5ncy5vdXRjb21lcyB8fCBbJ0RvbmUnXSxcblxuICAgICAgICAvLyBDdXN0b20gcHJvcGVydGllc1xuICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiB3b3JrZmxvdy5jdXN0b21Qcm9wZXJ0aWVzIHx8IHt9LFxuXG4gICAgICAgIC8vIEZsYWdzXG4gICAgICAgIGlzUmVhZG9ubHk6IGZhbHNlLFxuICAgICAgICBpc1N5c3RlbTogZmFsc2UsXG5cbiAgICAgICAgLy8gUm9vdCBhY3Rpdml0eSAoZGlyZWN0IHJlZmVyZW5jZSBmb3IgRWxzYSBjb21wYXRpYmlsaXR5KVxuICAgICAgICByb290OiB3b3JrZmxvdy5yb290XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixIGV4cG9ydDogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINiv2KfZhtmE2YjYryBXb3JrZmxvd0RlZmluaXRpb24g2KjZhyDYtdmI2LHYqiBKU09OIGZpbGVcbiAgICovXG4gIGRvd25sb2FkV29ya2Zsb3dEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmV4cG9ydFdvcmtmbG93RGVmaW5pdGlvbigpO1xuICAgIGlmICghZGVmaW5pdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShkZWZpbml0aW9uLCBudWxsLCAyKV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9IGAke2RlZmluaXRpb24uZGVmaW5pdGlvbklkIHx8ICd3b3JrZmxvdyd9LXYke2RlZmluaXRpb24udmVyc2lvbn0uanNvbmA7XG4gICAgbGluay5jbGljaygpO1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcblxuICAgIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgYPCfk6UgV29ya2Zsb3cgRGVmaW5pdGlvbiDYr9in2YbZhNmI2K8g2LTYrzogJHtsaW5rLmRvd25sb2FkfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB3Zi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XG4gIH1cblxuICAvKipcbiAgICog2KrYutuM24zYsSDYqtioIHNldHRpbmdzXG4gICAqL1xuICBzd2l0Y2hTZXR0aW5nc1RhYih0YWI6IFNldHRpbmdzVGFiKSB7XG4gICAgdGhpcy5hY3RpdmVTZXR0aW5nc1RhYi5zZXQodGFiKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PSBXb3JrZmxvdyBJbnB1dHMgTWFuYWdlbWVudCA9PT09PT09PT09PT1cblxuICBhZGRXb3JrZmxvd0lucHV0KCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy53b3JrZmxvd1NldHRpbmdzKCk7XG4gICAgc2V0dGluZ3MuaW5wdXRzLnB1c2goe1xuICAgICAgbmFtZTogYGlucHV0JHtzZXR0aW5ncy5pbnB1dHMubGVuZ3RoICsgMX1gLFxuICAgICAgdGl0bGU6IGBJbnB1dCAke3NldHRpbmdzLmlucHV0cy5sZW5ndGggKyAxfWAsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzY2hlbWE6IHtcbiAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb25zOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHsgLi4uc2V0dGluZ3MgfSk7XG4gIH1cblxuICByZW1vdmVXb3JrZmxvd0lucHV0KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIHNldHRpbmdzLmlucHV0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoeyAuLi5zZXR0aW5ncyB9KTtcbiAgfVxuXG4gIHVwZGF0ZVdvcmtmbG93SW5wdXQoaW5kZXg6IG51bWJlciwgZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy53b3JrZmxvd1NldHRpbmdzKCk7XG4gICAgY29uc3QgaW5wdXQgPSBzZXR0aW5ncy5pbnB1dHNbaW5kZXhdO1xuXG4gICAgaWYgKGZpZWxkID09PSAnc2NoZW1hJykge1xuICAgICAgLy8gRm9yIG5lc3RlZCBzY2hlbWEgdXBkYXRlc1xuICAgICAgKGlucHV0IGFzIGFueSlbZmllbGRdID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5zdGFydHNXaXRoKCdzY2hlbWEuJykpIHtcbiAgICAgIC8vIEZvciBuZXN0ZWQgc2NoZW1hIHByb3BlcnRpZXMgbGlrZSAnc2NoZW1hLmRhdGFUeXBlJ1xuICAgICAgY29uc3Qgc2NoZW1hRmllbGQgPSBmaWVsZC5yZXBsYWNlKCdzY2hlbWEuJywgJycpO1xuICAgICAgaWYgKCFpbnB1dC5zY2hlbWEpIHtcbiAgICAgICAgaW5wdXQuc2NoZW1hID0geyBkYXRhVHlwZTogJ3N0cmluZycgfTtcbiAgICAgIH1cbiAgICAgIChpbnB1dC5zY2hlbWEgYXMgYW55KVtzY2hlbWFGaWVsZF0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgKGlucHV0IGFzIGFueSlbZmllbGRdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgdXBkYXRlV29ya2Zsb3dJbnB1dFNjaGVtYShpbmRleDogbnVtYmVyLCBzY2hlbWFGaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBjb25zdCBpbnB1dCA9IHNldHRpbmdzLmlucHV0c1tpbmRleF07XG4gICAgaWYgKCFpbnB1dC5zY2hlbWEpIHtcbiAgICAgIGlucHV0LnNjaGVtYSA9IHsgZGF0YVR5cGU6ICdzdHJpbmcnIH07XG4gICAgfVxuICAgIChpbnB1dC5zY2hlbWEgYXMgYW55KVtzY2hlbWFGaWVsZF0gPSB2YWx1ZTtcbiAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHsgLi4uc2V0dGluZ3MgfSk7XG4gIH1cblxuICB1cGRhdGVXb3JrZmxvd0lucHV0VmFsaWRhdGlvbihpbmRleDogbnVtYmVyLCBpc1JlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBjb25zdCBpbnB1dCA9IHNldHRpbmdzLmlucHV0c1tpbmRleF07XG4gICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgIGlmICghaW5wdXQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgaW5wdXQudmFsaWRhdGlvbnMgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5wdXQudmFsaWRhdGlvbnMuc29tZSh2ID0+IHYucnVsZSA9PT0gJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgaW5wdXQudmFsaWRhdGlvbnMucHVzaCh7IHJ1bGU6ICdyZXF1aXJlZCcgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LnZhbGlkYXRpb25zID0gaW5wdXQudmFsaWRhdGlvbnM/LmZpbHRlcih2ID0+IHYucnVsZSAhPT0gJ3JlcXVpcmVkJyk7XG4gICAgICBpZiAoaW5wdXQudmFsaWRhdGlvbnM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpbnB1dC52YWxpZGF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgZ2V0SW5wdXRJc1JlcXVpcmVkKGlucHV0OiBXb3JrZmxvd0lucHV0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlucHV0LnZhbGlkYXRpb25zPy5zb21lKHYgPT4gdi5ydWxlID09PSAncmVxdWlyZWQnKSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PSBXb3JrZmxvdyBPdXRwdXRzIE1hbmFnZW1lbnQgPT09PT09PT09PT09XG5cbiAgYWRkV29ya2Zsb3dPdXRwdXQoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBzZXR0aW5ncy5vdXRwdXRzLnB1c2goe1xuICAgICAgbmFtZTogYG91dHB1dCR7c2V0dGluZ3Mub3V0cHV0cy5sZW5ndGggKyAxfWAsXG4gICAgICB0aXRsZTogYE91dHB1dCAke3NldHRpbmdzLm91dHB1dHMubGVuZ3RoICsgMX1gLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgc2NoZW1hOiB7XG4gICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoeyAuLi5zZXR0aW5ncyB9KTtcbiAgfVxuXG4gIHJlbW92ZVdvcmtmbG93T3V0cHV0KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIHNldHRpbmdzLm91dHB1dHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHsgLi4uc2V0dGluZ3MgfSk7XG4gIH1cblxuICB1cGRhdGVXb3JrZmxvd091dHB1dChpbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBzZXR0aW5ncy5vdXRwdXRzW2luZGV4XTtcblxuICAgIGlmIChmaWVsZC5zdGFydHNXaXRoKCdzY2hlbWEuJykpIHtcbiAgICAgIC8vIEZvciBuZXN0ZWQgc2NoZW1hIHByb3BlcnRpZXMgbGlrZSAnc2NoZW1hLmRhdGFUeXBlJ1xuICAgICAgY29uc3Qgc2NoZW1hRmllbGQgPSBmaWVsZC5yZXBsYWNlKCdzY2hlbWEuJywgJycpO1xuICAgICAgaWYgKCFvdXRwdXQuc2NoZW1hKSB7XG4gICAgICAgIG91dHB1dC5zY2hlbWEgPSB7IGRhdGFUeXBlOiAnc3RyaW5nJyB9O1xuICAgICAgfVxuICAgICAgKG91dHB1dC5zY2hlbWEgYXMgYW55KVtzY2hlbWFGaWVsZF0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgKG91dHB1dCBhcyBhbnkpW2ZpZWxkXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoeyAuLi5zZXR0aW5ncyB9KTtcbiAgfVxuXG4gIHVwZGF0ZVdvcmtmbG93T3V0cHV0U2NoZW1hKGluZGV4OiBudW1iZXIsIHNjaGVtYUZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIGNvbnN0IG91dHB1dCA9IHNldHRpbmdzLm91dHB1dHNbaW5kZXhdO1xuICAgIGlmICghb3V0cHV0LnNjaGVtYSkge1xuICAgICAgb3V0cHV0LnNjaGVtYSA9IHsgZGF0YVR5cGU6ICdzdHJpbmcnIH07XG4gICAgfVxuICAgIChvdXRwdXQuc2NoZW1hIGFzIGFueSlbc2NoZW1hRmllbGRdID0gdmFsdWU7XG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09IFdvcmtmbG93IFZhcmlhYmxlcyBNYW5hZ2VtZW50ID09PT09PT09PT09PVxuXG4gIGFkZFdvcmtmbG93VmFyaWFibGUoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBzZXR0aW5ncy52YXJpYWJsZXMucHVzaCh7XG4gICAgICBuYW1lOiBgdmFyaWFibGUke3NldHRpbmdzLnZhcmlhYmxlcy5sZW5ndGggKyAxfWAsXG4gICAgICB0eXBlTmFtZTogJ3N0cmluZycsXG4gICAgICB2YWx1ZTogJycsXG4gICAgICBkZXNjcmlwdGlvbjogJydcbiAgICB9KTtcbiAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHsgLi4uc2V0dGluZ3MgfSk7XG4gIH1cblxuICByZW1vdmVXb3JrZmxvd1ZhcmlhYmxlKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIHNldHRpbmdzLnZhcmlhYmxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoeyAuLi5zZXR0aW5ncyB9KTtcbiAgfVxuXG4gIHVwZGF0ZVdvcmtmbG93VmFyaWFibGUoaW5kZXg6IG51bWJlciwgZmllbGQ6IGtleW9mIFdvcmtmbG93VmFyaWFibGUsIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIChzZXR0aW5ncy52YXJpYWJsZXNbaW5kZXhdIGFzIGFueSlbZmllbGRdID0gdmFsdWU7XG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqINio2YfigIzYsdmI2LLYsdiz2KfZhtuMIG91dGNvbWVzINin2LIgc3RyaW5nXG4gICAqL1xuICB1cGRhdGVPdXRjb21lcyhvdXRjb21lc1N0cmluZzogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBzZXR0aW5ncy5vdXRjb21lcyA9IG91dGNvbWVzU3RyaW5nXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChvID0+IG8udHJpbSgpKVxuICAgICAgLmZpbHRlcihvID0+IG8ubGVuZ3RoID4gMCk7XG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqINm+2KfaqSDaqdix2K/ZhiDZhNin2q/igIzZh9inXG4gICAqL1xuICBjbGVhckxvZ3MoKSB7XG4gICAgdGhpcy5leGVjdXRpb25Mb2dzLnNldChbXSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT0gVmlzdWFsIERlc2lnbmVyIE1ldGhvZHMgPT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqINiq2LrbjNuM2LEg2KrYqFxuICAgKi9cbiAgc3dpdGNoVGFiKHRhYjogRWRpdG9yVGFiKSB7XG4gICAgaWYgKHRhYiA9PT0gJ3Zpc3VhbCcgJiYgdGhpcy5hY3RpdmVUYWIoKSA9PT0gJ2pzb24nKSB7XG4gICAgICAvLyDYqtio2K/bjNmEIEpTT04g2KjZhyBWaXN1YWxcbiAgICAgIHRoaXMuanNvblRvVmlzdWFsKCk7XG4gICAgfSBlbHNlIGlmICh0YWIgPT09ICdqc29uJyAmJiB0aGlzLmFjdGl2ZVRhYigpID09PSAndmlzdWFsJykge1xuICAgICAgLy8g2KrYqNiv24zZhCBWaXN1YWwg2KjZhyBKU09OXG4gICAgICB0aGlzLnZpc3VhbFRvSnNvbigpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZVRhYi5zZXQodGFiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYp9mG2KrYrtin2KggTm9kZVxuICAgKi9cbiAgc2VsZWN0Tm9kZUJ5SWQobm9kZTogVmlzdWFsTm9kZSkge1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNldChub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYrdiw2YEgTm9kZVxuICAgKi9cbiAgZGVsZXRlTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy52aXN1YWxOb2RlcygpLmZpbHRlcihuID0+IG4uaWQgIT09IG5vZGVJZCk7XG4gICAgLy8g2K3YsNmBINin2KrYtdin2YTYp9iqINio2Ycg2KfbjNmGINmG2YjYr1xuICAgIG5vZGVzLmZvckVhY2gobiA9PiB7XG4gICAgICBuLmNvbm5lY3Rpb25zID0gbi5jb25uZWN0aW9ucy5maWx0ZXIoYyA9PiBjICE9PSBub2RlSWQpO1xuICAgIH0pO1xuICAgIHRoaXMudmlzdWFsTm9kZXMuc2V0KG5vZGVzKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZSgpPy5pZCA9PT0gbm9kZUlkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZXQobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRMb2coJ2luZm8nLCBg8J+Xke+4jyBOb2RlINit2LDZgSDYtNivYCk7XG4gIH1cblxuICAvKipcbiAgICog2KfYqti12KfZhCDYr9mIIE5vZGUg2KjYpyBvdXRjb21lINmF2LTYrti1XG4gICAqL1xuICBjb25uZWN0Tm9kZXMoZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZywgb3V0Y29tZT86IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy52aXN1YWxOb2RlcygpO1xuICAgIGNvbnN0IGZyb21Ob2RlSW5kZXggPSBub2Rlcy5maW5kSW5kZXgobiA9PiBuLmlkID09PSBmcm9tSWQpO1xuICAgIGNvbnN0IHRvTm9kZSA9IG5vZGVzLmZpbmQobiA9PiBuLmlkID09PSB0b0lkKTtcblxuICAgIGlmIChmcm9tTm9kZUluZGV4ICE9PSAtMSAmJiB0b05vZGUpIHtcbiAgICAgIGNvbnN0IGZyb21Ob2RlID0gbm9kZXNbZnJvbU5vZGVJbmRleF07XG5cbiAgICAgIC8vIFVzZSBvdXRjb21lLWJhc2VkIGNvbm5lY3Rpb25zIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKG91dGNvbWUgJiYgZnJvbU5vZGUub3V0Y29tZXMgJiYgZnJvbU5vZGUub3V0Y29tZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBvdXRjb21lQ29ubmVjdGlvbnMgPSBmcm9tTm9kZS5vdXRjb21lQ29ubmVjdGlvbnMgfHwgW107XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvdXRjb21lIGFscmVhZHkgaGFzIGEgY29ubmVjdGlvblxuICAgICAgICBjb25zdCBleGlzdGluZ0Nvbm5lY3Rpb24gPSBvdXRjb21lQ29ubmVjdGlvbnMuZmluZChjID0+IGMub3V0Y29tZSA9PT0gb3V0Y29tZSk7XG4gICAgICAgIGlmIChleGlzdGluZ0Nvbm5lY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmFkZExvZygnd2FybmluZycsIGDimqDvuI8gT3V0Y29tZSBcIiR7b3V0Y29tZX1cIiDZgtio2YTYp9mLINmF2KrYtdmEINi02K/ZhyDYp9iz2KpgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgbmV3IG91dGNvbWUgY29ubmVjdGlvblxuICAgICAgICBjb25zdCB1cGRhdGVkTm9kZXMgPSBbLi4ubm9kZXNdO1xuICAgICAgICB1cGRhdGVkTm9kZXNbZnJvbU5vZGVJbmRleF0gPSB7XG4gICAgICAgICAgLi4uZnJvbU5vZGUsXG4gICAgICAgICAgb3V0Y29tZUNvbm5lY3Rpb25zOiBbLi4ub3V0Y29tZUNvbm5lY3Rpb25zLCB7IG91dGNvbWUsIHRhcmdldE5vZGVJZDogdG9JZCB9XSxcbiAgICAgICAgICBjb25uZWN0aW9uczogWy4uLmZyb21Ob2RlLmNvbm5lY3Rpb25zLCB0b0lkXSAvLyBLZWVwIGZvciBiYWNrd2FyZCBjb21wYXRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnZpc3VhbE5vZGVzLnNldCh1cGRhdGVkTm9kZXMpO1xuICAgICAgICB0aGlzLmFkZExvZygnc3VjY2VzcycsIGDwn5SXICR7ZnJvbU5vZGUubmFtZX0gWyR7b3V0Y29tZX1dIOKGkiAke3RvTm9kZS5uYW1lfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2ltcGxlIGNvbm5lY3Rpb24gKG5vIG91dGNvbWVzKVxuICAgICAgICBpZiAoIWZyb21Ob2RlLmNvbm5lY3Rpb25zLmluY2x1ZGVzKHRvSWQpKSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZE5vZGVzID0gWy4uLm5vZGVzXTtcbiAgICAgICAgICB1cGRhdGVkTm9kZXNbZnJvbU5vZGVJbmRleF0gPSB7XG4gICAgICAgICAgICAuLi5mcm9tTm9kZSxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zOiBbLi4uZnJvbU5vZGUuY29ubmVjdGlvbnMsIHRvSWRdXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMudmlzdWFsTm9kZXMuc2V0KHVwZGF0ZWROb2Rlcyk7XG4gICAgICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBg8J+UlyAke2Zyb21Ob2RlLm5hbWV9INmF2KrYtdmEINi02K8g2KjZhyAke3RvTm9kZS5uYW1lfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWRkTG9nKCd3YXJuaW5nJywgJ+KaoO+4jyDYp9uM2YYg2KfYqti12KfZhCDYp9iyINmC2KjZhCDZiNis2YjYryDYr9in2LHYrycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkTG9nKCdlcnJvcicsICfinYwg2K7Yt9inINiv2LEg2KfbjNis2KfYryDYp9iq2LXYp9mEJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINmC2LfYuSDYp9iq2LXYp9mEICjYqNinINuM2Kcg2KjYr9mI2YYgb3V0Y29tZSlcbiAgICovXG4gIGRpc2Nvbm5lY3ROb2Rlcyhmcm9tSWQ6IHN0cmluZywgdG9JZDogc3RyaW5nLCBvdXRjb21lPzogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnZpc3VhbE5vZGVzKCk7XG4gICAgY29uc3QgZnJvbU5vZGVJbmRleCA9IG5vZGVzLmZpbmRJbmRleChuID0+IG4uaWQgPT09IGZyb21JZCk7XG5cbiAgICBpZiAoZnJvbU5vZGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGZyb21Ob2RlID0gbm9kZXNbZnJvbU5vZGVJbmRleF07XG4gICAgICBjb25zdCB1cGRhdGVkTm9kZXMgPSBbLi4ubm9kZXNdO1xuXG4gICAgICAvLyBSZW1vdmUgZnJvbSBvdXRjb21lIGNvbm5lY3Rpb25zIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG91dGNvbWUgJiYgZnJvbU5vZGUub3V0Y29tZUNvbm5lY3Rpb25zKSB7XG4gICAgICAgIHVwZGF0ZWROb2Rlc1tmcm9tTm9kZUluZGV4XSA9IHtcbiAgICAgICAgICAuLi5mcm9tTm9kZSxcbiAgICAgICAgICBvdXRjb21lQ29ubmVjdGlvbnM6IGZyb21Ob2RlLm91dGNvbWVDb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICBjID0+ICEoYy5vdXRjb21lID09PSBvdXRjb21lICYmIGMudGFyZ2V0Tm9kZUlkID09PSB0b0lkKVxuICAgICAgICAgICksXG4gICAgICAgICAgY29ubmVjdGlvbnM6IGZyb21Ob2RlLmNvbm5lY3Rpb25zLmZpbHRlcihjID0+IGMgIT09IHRvSWQpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaW1wbGUgZGlzY29ubmVjdFxuICAgICAgICB1cGRhdGVkTm9kZXNbZnJvbU5vZGVJbmRleF0gPSB7XG4gICAgICAgICAgLi4uZnJvbU5vZGUsXG4gICAgICAgICAgY29ubmVjdGlvbnM6IGZyb21Ob2RlLmNvbm5lY3Rpb25zLmZpbHRlcihjID0+IGMgIT09IHRvSWQpLFxuICAgICAgICAgIG91dGNvbWVDb25uZWN0aW9uczogZnJvbU5vZGUub3V0Y29tZUNvbm5lY3Rpb25zPy5maWx0ZXIoYyA9PiBjLnRhcmdldE5vZGVJZCAhPT0gdG9JZClcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQodXBkYXRlZE5vZGVzKTtcbiAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYOKcgu+4jyDYp9iq2LXYp9mEINmC2LfYuSDYtNivJHtvdXRjb21lID8gYCBbJHtvdXRjb21lfV1gIDogJyd9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINiq2KjYr9uM2YQgSlNPTiDYqNmHIFZpc3VhbFxuICAgKi9cbiAganNvblRvVmlzdWFsKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3b3JrZmxvdyA9IEpTT04ucGFyc2UodGhpcy53b3JrZmxvd0pzb24oKSk7XG4gICAgICBjb25zdCBub2RlczogVmlzdWFsTm9kZVtdID0gW107XG4gICAgICBsZXQgeVBvcyA9IDEwMDtcblxuICAgICAgLy8g2b7Ysdiv2KfYsti0IHJvb3QgYWN0aXZpdHlcbiAgICAgIGlmICh3b3JrZmxvdy5yb290KSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0FjdGl2aXR5VG9Ob2RlKHdvcmtmbG93LnJvb3QsIG5vZGVzLCAxMDAsIHlQb3MpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnZpc3VhbE5vZGVzLnNldChub2Rlcyk7XG4gICAgICB0aGlzLmFkZExvZygnc3VjY2VzcycsICfinIUgSlNPTiDYqNmHIFZpc3VhbCDYqtio2K/bjNmEINi02K8nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixINiq2KjYr9uM2YQ6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog2b7Ysdiv2KfYsti0IEFjdGl2aXR5INio2YcgTm9kZSAocmVjdXJzaXZlKVxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzQWN0aXZpdHlUb05vZGUoXG4gICAgYWN0aXZpdHk6IGFueSxcbiAgICBub2RlczogVmlzdWFsTm9kZVtdLFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgcGFyZW50SWQ/OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBub2RlSWQgPSBhY3Rpdml0eS5pZCB8fCBgJHthY3Rpdml0eS50eXBlfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKX1gO1xuXG4gICAgLy8gR2V0IG91dGNvbWVzIGZvciB0aGlzIGFjdGl2aXR5IHR5cGUgKHVzZSBkZWZhdWx0IGZvciBub3csIHdpbGwgYmUgdXBkYXRlZCBhc3luYyBpZiBuZWVkZWQpXG4gICAgY29uc3Qgb3V0Y29tZXMgPSBbJ0RvbmUnXTsgLy8gRGVmYXVsdCBvdXRjb21lLCB3aWxsIGJlIHVwZGF0ZWQgd2hlbiBhY3Rpdml0eSBpbmZvIGlzIGxvYWRlZFxuXG4gICAgLy8gR2V0IG91dGNvbWVDb25uZWN0aW9ucyBmcm9tIGFjdGl2aXR5IGRlZmluaXRpb25cbiAgICBjb25zdCBvdXRjb21lQ29ubmVjdGlvbnMgPSBhY3Rpdml0eS5vdXRjb21lQ29ubmVjdGlvbnMgfHwgW107XG5cbiAgICAvLyBCdWlsZCBzaW1wbGUgY29ubmVjdGlvbnMgbGlzdCBmcm9tIG91dGNvbWVDb25uZWN0aW9ucyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gb3V0Y29tZUNvbm5lY3Rpb25zLm1hcCgoY29ubjogYW55KSA9PiBjb25uLnRhcmdldE5vZGVJZCk7XG5cbiAgICBjb25zdCBub2RlOiBWaXN1YWxOb2RlID0ge1xuICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgIHR5cGU6IGFjdGl2aXR5LnR5cGUsXG4gICAgICBuYW1lOiBhY3Rpdml0eS5uYW1lIHx8IGFjdGl2aXR5LnR5cGUsXG4gICAgICBpY29uOiB0aGlzLmdldEljb25Gb3JBY3Rpdml0eVR5cGUoYWN0aXZpdHkudHlwZSksXG4gICAgICBwcm9wZXJ0aWVzOiBhY3Rpdml0eS5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgcG9zaXRpb246IHsgeCwgeSB9LFxuICAgICAgY29ubmVjdGlvbnM6IGNvbm5lY3Rpb25zLFxuICAgICAgb3V0Y29tZUNvbm5lY3Rpb25zOiBvdXRjb21lQ29ubmVjdGlvbnMsXG4gICAgICBvdXRjb21lczogb3V0Y29tZXNcbiAgICB9O1xuXG4gICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgIC8vINin2q/YsSBwYXJlbnQg2K/Yp9ix2K/YjCDYp9iq2LXYp9mEINio2LHZgtix2KfYsSDaqdmGICjYqNix2KfbjCBTZXF1ZW5jZSlcbiAgICBpZiAocGFyZW50SWQgJiYgIW91dGNvbWVDb25uZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2Rlcy5maW5kKG4gPT4gbi5pZCA9PT0gcGFyZW50SWQpO1xuICAgICAgaWYgKHBhcmVudE5vZGUgJiYgIXBhcmVudE5vZGUuY29ubmVjdGlvbnMuaW5jbHVkZXMobm9kZUlkKSkge1xuICAgICAgICBwYXJlbnROb2RlLmNvbm5lY3Rpb25zLnB1c2gobm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDZvtix2K/Yp9iy2LQgY2hpbGRyZW4gKNio2LHYp9uMIFNlcXVlbmNlKSAtINin2YXYpyDZgdmC2Lcg2Kfar9ixIG91dGNvbWVDb25uZWN0aW9ucyDZhtio2KfYtNivXG4gICAgaWYgKGFjdGl2aXR5LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoYWN0aXZpdHkuY2hpbGRyZW4pICYmICFvdXRjb21lQ29ubmVjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBsZXQgY2hpbGRZID0geTtcbiAgICAgIGFjdGl2aXR5LmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY2hpbGRZID0geSArIChpbmRleCAqIDEwMCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0FjdGl2aXR5VG9Ob2RlKGNoaWxkLCBub2RlcywgeCArIDI1MCwgY2hpbGRZLCBub2RlSWQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiDYqtio2K/bjNmEIFZpc3VhbCDYqNmHIEpTT05cbiAgICovXG4gIHZpc3VhbFRvSnNvbigpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLnZpc3VhbE5vZGVzKCk7XG5cbiAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5hZGRMb2coJ3dhcm5pbmcnLCAn4pqg77iPINmH24zahiBOb2RlINin24wg2YjYrNmI2K8g2YbYr9in2LHYrycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vINm+24zYr9inINqp2LHYr9mGIHJvb3Qgbm9kZSAobm9kZSDYqNiv2YjZhiBwYXJlbnQpXG4gICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMuZmluZFJvb3ROb2RlKG5vZGVzKTtcblxuICAgICAgaWYgKCFyb290Tm9kZSkge1xuICAgICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MIFJvb3QgTm9kZSDZvtuM2K/YpyDZhti02K8nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3b3JrZmxvdyA9IHtcbiAgICAgICAgaWQ6ICd2aXN1YWwtd29ya2Zsb3ctJyArIERhdGUubm93KCksXG4gICAgICAgIG5hbWU6ICdWaXN1YWwgV29ya2Zsb3cnLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICByb290OiB0aGlzLm5vZGVUb0FjdGl2aXR5KHJvb3ROb2RlLCBub2RlcylcbiAgICAgIH07XG5cbiAgICAgIHRoaXMud29ya2Zsb3dKc29uLnNldChKU09OLnN0cmluZ2lmeSh3b3JrZmxvdywgbnVsbCwgMikpO1xuICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCAn4pyFIFZpc3VhbCDYqNmHIEpTT04g2KrYqNiv24zZhCDYtNivJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhpcy5hZGRMb2coJ2Vycm9yJywgJ+KdjCDYrti32Kcg2K/YsSDYqtio2K/bjNmEOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINm+24zYr9inINqp2LHYr9mGIFJvb3QgTm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kUm9vdE5vZGUobm9kZXM6IFZpc3VhbE5vZGVbXSk6IFZpc3VhbE5vZGUgfCBudWxsIHtcbiAgICAvLyBOb2RlINin24wg2qnZhyDYqNmHINii2YYg2KfYtNin2LHZhyDZhti02K/Zh1xuICAgIGNvbnN0IGNvbm5lY3RlZElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIG5vZGVzLmZvckVhY2gobiA9PiBuLmNvbm5lY3Rpb25zLmZvckVhY2goYyA9PiBjb25uZWN0ZWRJZHMuYWRkKGMpKSk7XG5cbiAgICBjb25zdCByb290Tm9kZXMgPSBub2Rlcy5maWx0ZXIobiA9PiAhY29ubmVjdGVkSWRzLmhhcyhuLmlkKSk7XG4gICAgcmV0dXJuIHJvb3ROb2Rlc1swXSB8fCBub2Rlc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYqtio2K/bjNmEIE5vZGUg2KjZhyBBY3Rpdml0eSAocmVjdXJzaXZlKVxuICAgKi9cbiAgcHJpdmF0ZSBub2RlVG9BY3Rpdml0eShub2RlOiBWaXN1YWxOb2RlLCBhbGxOb2RlczogVmlzdWFsTm9kZVtdKTogYW55IHtcbiAgICBjb25zdCBhY3Rpdml0eTogYW55ID0ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBub2RlLnByb3BlcnRpZXNcbiAgICB9O1xuXG4gICAgLy8g2Kfar9ixIGNoaWxkcmVuINiv2KfYsdivIChjb25uZWN0aW9ucylcbiAgICBpZiAobm9kZS5jb25uZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY29ubmVjdGlvbnNcbiAgICAgICAgLm1hcChjb25uSWQgPT4gYWxsTm9kZXMuZmluZChuID0+IG4uaWQgPT09IGNvbm5JZCkpXG4gICAgICAgIC5maWx0ZXIobiA9PiBuICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoY2hpbGROb2RlID0+IHRoaXMubm9kZVRvQWN0aXZpdHkoY2hpbGROb2RlISwgYWxsTm9kZXMpKTtcblxuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWN0aXZpdHkuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aXZpdHk7XG4gIH1cblxuICAvKipcbiAgICog2K/YsduM2KfZgdiqINii24zaqdmI2YYg2KjYsdin24wg2YbZiNi5IEFjdGl2aXR5XG4gICAqL1xuICBwcml2YXRlIGdldEljb25Gb3JBY3Rpdml0eVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpY29uTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNlcXVlbmNlJzogJ2ZhLWxpZ2h0IGZhLWxpc3Qtb2wnLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNob3ctY29uZmlybS1kaWFsb2cnOiAnZmEtbGlnaHQgZmEtcXVlc3Rpb24tY2lyY2xlJyxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpzaG93LWFsZXJ0LWRpYWxvZyc6ICdmYS1saWdodCBmYS1jaXJjbGUtaW5mbycsXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy10b2FzdCc6ICdmYS1saWdodCBmYS1iZWxsJyxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpzZXQtdmFyaWFibGUnOiAnZmEtbGlnaHQgZmEtdmFyaWFibGUnLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OmV4ZWN1dGUtcXVlcnknOiAnZmEtbGlnaHQgZmEtc2VhcmNoJyxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpleGVjdXRlLWNvbW1hbmQnOiAnZmEtbGlnaHQgZmEtYm9sdCcsXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6bmF2aWdhdGUnOiAnZmEtbGlnaHQgZmEtcm91dGUnLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OmRpc3BhdGNoLWV2ZW50JzogJ2ZhLWxpZ2h0IGZhLXBhcGVyLXBsYW5lJ1xuICAgIH07XG5cbiAgICByZXR1cm4gaWNvbk1hcFt0eXBlXSB8fCAnZmEtbGlnaHQgZmEtY2lyY2xlJztcbiAgfVxuXG4gIC8qKlxuICAgKiDYqNmH4oCM2LHZiNiy2LHYs9in2YbbjCBwcm9wZXJ0eSDZhtmI2K9cbiAgICovXG4gIHVwZGF0ZU5vZGVQcm9wZXJ0eShub2RlSWQ6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudmlzdWFsTm9kZXMoKTtcbiAgICBjb25zdCBub2RlSW5kZXggPSBub2Rlcy5maW5kSW5kZXgobiA9PiBuLmlkID09PSBub2RlSWQpO1xuXG4gICAgaWYgKG5vZGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tub2RlSW5kZXhdO1xuICAgICAgY29uc3QgdXBkYXRlZE5vZGVzID0gWy4uLm5vZGVzXTtcblxuICAgICAgXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgdXBkYXRlZE5vZGVzW25vZGVJbmRleF0gPSB7XG4gICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICBuYW1lOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3UHJvcGVydGllcyA9IHtcbiAgICAgICAgICAuLi5ub2RlLnByb3BlcnRpZXMsXG4gICAgICAgICAgW3Byb3BlcnR5TmFtZV06IHZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IG5ld091dGNvbWVzID0gbm9kZS5vdXRjb21lcztcbiAgICAgICAgY29uc3Qgc2hvdWxkUmVjb21wdXRlT3V0Y29tZXMgPVxuICAgICAgICAgIChwcm9wZXJ0eU5hbWUgPT09ICdleHBlY3RlZFN0YXR1c0NvZGVzJyAmJiBub2RlLnR5cGUgPT09ICd3b3JrZmxvdy1hY3Rpdml0eTpodHRwLXJlcXVlc3QnKSB8fFxuICAgICAgICAgIChwcm9wZXJ0eU5hbWUgPT09ICdhY3Rpb25zJyAmJiBub2RlLnR5cGUgPT09ICd3b3JrZmxvdy1hY3Rpdml0eTpodW1hbi10YXNrJyk7XG4gICAgICAgIGlmIChzaG91bGRSZWNvbXB1dGVPdXRjb21lcykge1xuICAgICAgICAgIHRoaXMuZmluZEFjdGl2aXR5SW5mbyhub2RlLnR5cGUpLnRoZW4oYWN0aXZpdHlJbmZvID0+IHtcbiAgICAgICAgICAgIGlmIChhY3Rpdml0eUluZm8pIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRPdXRjb21lcyA9IHRoaXMuY29tcHV0ZU91dGNvbWVzKGFjdGl2aXR5SW5mbywgbmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWROb2RlcyA9IHRoaXMudmlzdWFsTm9kZXMoKTtcbiAgICAgICAgICAgICAgY29uc3Qgbm9kZUlkeCA9IHVwZGF0ZWROb2Rlcy5maW5kSW5kZXgobiA9PiBuLmlkID09PSBub2RlSWQpO1xuICAgICAgICAgICAgICBpZiAobm9kZUlkeCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkTm9kZXNbbm9kZUlkeF0gPSB7XG4gICAgICAgICAgICAgICAgICAuLi51cGRhdGVkTm9kZXNbbm9kZUlkeF0sXG4gICAgICAgICAgICAgICAgICBvdXRjb21lczogY29tcHV0ZWRPdXRjb21lc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQoWy4uLnVwZGF0ZWROb2Rlc10pO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYPCflIQgT3V0Y29tZXMgdXBkYXRlZDogWyR7Y29tcHV0ZWRPdXRjb21lcy5qb2luKCcsICcpfV1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZWROb2Rlc1tub2RlSW5kZXhdID0ge1xuICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgcHJvcGVydGllczogbmV3UHJvcGVydGllcyxcbiAgICAgICAgICBvdXRjb21lczogbmV3T3V0Y29tZXNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQodXBkYXRlZE5vZGVzKTtcblxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlKCk/LmlkID09PSBub2RlSWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuc2V0KHVwZGF0ZWROb2Rlc1tub2RlSW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog2b7bjNiv2Kcg2qnYsdiv2YYgYWN0aXZpdHkgaW5mbyDYqNixINin2LPYp9izIHR5cGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmluZEFjdGl2aXR5SW5mbyh0eXBlOiBzdHJpbmcpOiBQcm9taXNlPEFjdGl2aXR5SW5mbyB8IG51bGw+IHtcbiAgICB0cnkgeyBcbiAgICAgIGNvbnN0IGFjdGl2aXR5ID0gYXdhaXQgdGhpcy5hY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlLmdldEFjdGl2aXR5QnlOYW1lKHR5cGUpO1xuICAgICAgaWYgKGFjdGl2aXR5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRBY3Rpdml0eURlZmluaXRpb25Ub0luZm8oYWN0aXZpdHkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBmaW5kIGFjdGl2aXR5IGluZm8gZm9yIHR5cGU6ICR7dHlwZX1gLCBlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINm+2KfaqSDaqdix2K/ZhiDZh9mF2Ycg2YbZiNiv2YfYp1xuICAgKi9cbiAgY2xlYXJDYW52YXMoKSB7XG4gICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQoW10pO1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNldChudWxsKTtcbiAgICB0aGlzLmFkZExvZygnaW5mbycsICfwn5eR77iPIENhbnZhcyDZvtin2qkg2LTYrycpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09IERyYWcgJiBEcm9wIE1ldGhvZHMgPT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqINi02LHZiNi5IGRyYWcg2KfYsiBhY3Rpdml0eSBsaXN0XG4gICAqL1xuICBvbkFjdGl2aXR5RHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIGFjdGl2aXR5OiBBY3Rpdml0eUluZm8pIHtcbiAgICB0aGlzLmRyYWdnZWRBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ2NvcHknO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCBhY3Rpdml0eS50eXBlKTtcbiAgICB9XG4gICAgdGhpcy5hZGRMb2coJ2luZm8nLCBg8J+OryDYr9ixINit2KfZhCBEcmFnOiAke2FjdGl2aXR5Lm5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICog2b7Yp9uM2KfZhiBkcmFnINin2LIgYWN0aXZpdHkgbGlzdFxuICAgKi9cbiAgb25BY3Rpdml0eURyYWdFbmQoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIHRoaXMuZHJhZ2dlZEFjdGl2aXR5ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcmFnIG92ZXIg2LHZiNuMIENhbnZhc1xuICAgKi9cbiAgb25DYW52YXNEcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZHJhZyBsZWF2ZSDYp9iyIENhbnZhc1xuICAgKi9cbiAgb25DYW52YXNEcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIC8vINmF24zigIzYqtmI2KfZhiDYp9iyINin24zZhiDYqNix2KfbjCB2aXN1YWwgZmVlZGJhY2sg2KfYs9iq2YHYp9iv2Ycg2qnYsdivXG4gIH1cblxuICAvKipcbiAgICog2YXYrdin2LPYqNmHIG91dGNvbWVzINio2LHYp9uMINuM2qkgYWN0aXZpdHlcbiAgICovXG4gIGNvbXB1dGVPdXRjb21lcyhhY3Rpdml0eUluZm86IEFjdGl2aXR5SW5mbywgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZ1tdIHtcbiAgICAvLyBGb3IgSFRUUCBSZXF1ZXN0IHdpdGggZXhwZWN0ZWQgc3RhdHVzIGNvZGVzXG4gICAgaWYgKGFjdGl2aXR5SW5mby50eXBlID09PSAnd29ya2Zsb3ctYWN0aXZpdHk6aHR0cC1yZXF1ZXN0JyAmJiBwcm9wZXJ0aWVzWydleHBlY3RlZFN0YXR1c0NvZGVzJ10pIHtcbiAgICAgIGNvbnN0IGNvZGVzID0gQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzWydleHBlY3RlZFN0YXR1c0NvZGVzJ10pXG4gICAgICAgID8gcHJvcGVydGllc1snZXhwZWN0ZWRTdGF0dXNDb2RlcyddXG4gICAgICAgIDogW3Byb3BlcnRpZXNbJ2V4cGVjdGVkU3RhdHVzQ29kZXMnXV07XG5cbiAgICAgIGNvbnN0IHN0YXR1c091dGNvbWVzID0gY29kZXMubWFwKChjb2RlOiBudW1iZXIpID0+IGNvZGUudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm4gWy4uLnN0YXR1c091dGNvbWVzLCAnRG9uZScsICdGYWlsZWQnLCAnVGltZW91dCddO1xuICAgIH1cblxuICAgIC8vIEh1bWFuIFRhc2s6IG91dGNvbWVzIGZyb20gYWN0aW9ucyAocHJlZml4L3N1ZmZpeCkgaW4gd29ya2Zsb3cgZGVmaW5pdGlvblxuICAgIGlmIChhY3Rpdml0eUluZm8udHlwZSA9PT0gJ3dvcmtmbG93LWFjdGl2aXR5Omh1bWFuLXRhc2snICYmIHByb3BlcnRpZXNbJ2FjdGlvbnMnXSkge1xuICAgICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gcHJvcGVydGllc1snYWN0aW9ucyddO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0eXBlb2YgYWN0aW9ucyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGFjdGlvbnMpIDogYWN0aW9ucztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gcGFyc2VkPy5wcmVmaXggPz8gW107XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHBhcnNlZD8uc3VmZml4ID8/IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgWy4uLnByZWZpeCwgLi4uc3VmZml4XSkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBpdGVtPy5jb21tYW5kPy5uYW1lID8/IGl0ZW0/Lm5hbWU7XG4gICAgICAgICAgaWYgKG5hbWUgJiYgdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmICFuYW1lcy5pbmNsdWRlcyhuYW1lKSkgbmFtZXMucHVzaChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGlnbm9yZSBwYXJzZSBlcnJvclxuICAgICAgfVxuICAgICAgaWYgKG5hbWVzLmxlbmd0aCA+IDApIHJldHVybiBuYW1lcztcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0OiBjaGVjayBhY3Rpdml0eSBpbmZvIGZvciBvdXRjb21lc1xuICAgIGNvbnN0IG91dGNvbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTppZic6IFsnVGhlbicsICdFbHNlJ10sXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy1jb25maXJtLWRpYWxvZyc6IFsnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNob3ctYWxlcnQtZGlhbG9nJzogWydEb25lJ10sXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy1mb3JtJzogWydTdWJtaXR0ZWQnLCAnQ2FuY2VsbGVkJ10sXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6aHVtYW4tdGFzayc6IFsnc3VibWl0JywgJ2NhbmNlbCddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5Omh0dHAtcmVxdWVzdCc6IFsnRG9uZScsICdGYWlsZWQnLCAnVGltZW91dCddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNlcXVlbmNlJzogWydEb25lJ10sXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6Zm9yLWVhY2gnOiBbJ0RvbmUnXSxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTp3aGlsZSc6IFsnRG9uZSddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNldC12YXJpYWJsZSc6IFsnRG9uZSddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OmV4ZWN1dGUtcXVlcnknOiBbJ0RvbmUnXSxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpleGVjdXRlLWNvbW1hbmQnOiBbJ0RvbmUnXSxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpuYXZpZ2F0ZSc6IFsnRG9uZSddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNob3ctdG9hc3QnOiBbJ0RvbmUnXSxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpkaXNwYXRjaC1ldmVudCc6IFsnRG9uZSddXG4gICAgfTtcblxuICAgIHJldHVybiBvdXRjb21lTWFwW2FjdGl2aXR5SW5mby50eXBlXSB8fCBbJ0RvbmUnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcm9wINix2YjbjCBDYW52YXMgLSDYp9i22KfZgdmHINqp2LHYr9mGIGFjdGl2aXR5INis2K/bjNivXG4gICAqL1xuICBvbkNhbnZhc0Ryb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIXRoaXMuZHJhZ2dlZEFjdGl2aXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gNzU7IC8vIGNlbnRlciBub2RlXG4gICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIDQwO1xuXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnZpc3VhbE5vZGVzKCk7XG4gICAgY29uc3QgZGVmYXVsdFByb3BzID0geyAuLi4odGhpcy5kcmFnZ2VkQWN0aXZpdHkuZGVmYXVsdFByb3BlcnRpZXMgfHwge30pIH07XG5cbiAgICBjb25zdCBuZXdOb2RlOiBWaXN1YWxOb2RlID0ge1xuICAgICAgaWQ6IGAke3RoaXMuZHJhZ2dlZEFjdGl2aXR5LnR5cGV9LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgdHlwZTogdGhpcy5kcmFnZ2VkQWN0aXZpdHkudHlwZSxcbiAgICAgIG5hbWU6IHRoaXMuZHJhZ2dlZEFjdGl2aXR5Lm5hbWUsXG4gICAgICBpY29uOiB0aGlzLmRyYWdnZWRBY3Rpdml0eS5pY29uLFxuICAgICAgcHJvcGVydGllczogZGVmYXVsdFByb3BzLFxuICAgICAgcG9zaXRpb246IHsgeDogTWF0aC5tYXgoMCwgeCksIHk6IE1hdGgubWF4KDAsIHkpIH0sXG4gICAgICBjb25uZWN0aW9uczogW10sXG4gICAgICBvdXRjb21lQ29ubmVjdGlvbnM6IFtdLFxuICAgICAgb3V0Y29tZXM6IHRoaXMuY29tcHV0ZU91dGNvbWVzKHRoaXMuZHJhZ2dlZEFjdGl2aXR5LCBkZWZhdWx0UHJvcHMpXG4gICAgfTtcblxuICAgIHRoaXMudmlzdWFsTm9kZXMuc2V0KFsuLi5ub2RlcywgbmV3Tm9kZV0pO1xuXG4gICAgY29uc3Qgb3V0Y29tZXNJbmZvID0gbmV3Tm9kZS5vdXRjb21lcyAmJiBuZXdOb2RlLm91dGNvbWVzLmxlbmd0aCA+IDFcbiAgICAgID8gYCB3aXRoICR7bmV3Tm9kZS5vdXRjb21lcy5sZW5ndGh9IG91dGNvbWVzIFske25ld05vZGUub3V0Y29tZXMuam9pbignLCAnKX1dYFxuICAgICAgOiAnJztcblxuICAgIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgYOKchSBBY3Rpdml0eSAke3RoaXMuZHJhZ2dlZEFjdGl2aXR5Lm5hbWV9INin2LbYp9mB2Ycg2LTYryR7b3V0Y29tZXNJbmZvfWApO1xuICAgIHRoaXMuZHJhZ2dlZEFjdGl2aXR5ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDYtNix2YjYuSBkcmFnINmG2YjYr1xuICAgKi9cbiAgb25Ob2RlRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIG5vZGU6IFZpc3VhbE5vZGUpIHtcbiAgICB0aGlzLmRyYWdnZWROb2RlID0gbm9kZTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMubm9kZURyYWdPZmZzZXQgPSB7XG4gICAgICB4OiBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgeTogZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wXG4gICAgfTtcblxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgICAgLy8gTWFrZSBkcmFnIGltYWdlIHRyYW5zcGFyZW50XG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGltZy5zcmMgPSAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3JztcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoaW1nLCAwLCAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog2K/YsSDYrdin2YQgZHJhZyDZhtmI2K9cbiAgICovXG4gIG9uTm9kZURyYWcoZXZlbnQ6IERyYWdFdmVudCwgbm9kZTogVmlzdWFsTm9kZSkge1xuICAgIGlmICghdGhpcy5kcmFnZ2VkTm9kZSB8fCBldmVudC5jbGllbnRYID09PSAwIHx8IGV2ZW50LmNsaWVudFkgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2FudmFzLWFyZWEnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWNhbnZhcykgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIHRoaXMubm9kZURyYWdPZmZzZXQueDtcbiAgICBjb25zdCB5ID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gdGhpcy5ub2RlRHJhZ09mZnNldC55O1xuXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnZpc3VhbE5vZGVzKCk7XG4gICAgY29uc3Qgbm9kZUluZGV4ID0gbm9kZXMuZmluZEluZGV4KG4gPT4gbi5pZCA9PT0gbm9kZS5pZCk7XG5cbiAgICBpZiAobm9kZUluZGV4ICE9PSAtMSkge1xuICAgICAgbm9kZXNbbm9kZUluZGV4XS5wb3NpdGlvbiA9IHtcbiAgICAgICAgeDogTWF0aC5tYXgoMCwgeCksXG4gICAgICAgIHk6IE1hdGgubWF4KDAsIHkpXG4gICAgICB9O1xuICAgICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQoWy4uLm5vZGVzXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINm+2KfbjNin2YYgZHJhZyDZhtmI2K9cbiAgICovXG4gIG9uTm9kZURyYWdFbmQoZXZlbnQ6IERyYWdFdmVudCwgbm9kZTogVmlzdWFsTm9kZSkge1xuICAgIHRoaXMuZHJhZ2dlZE5vZGUgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINqp2YTbjNqpINix2YjbjCDaqdin2Ybaqdiq2YjYsSAtINio2LHYp9uMINin24zYrNin2K8g2KfYqti12KfZhCAo2KjYsdin24wgYWN0aXZpdGllcyDYqNinINuM2qkgb3V0Y29tZSlcbiAgICovXG4gIG9uQ29ubmVjdG9yQ2xpY2soZXZlbnQ6IEV2ZW50LCBub2RlOiBWaXN1YWxOb2RlLCB0eXBlOiAnaW4nIHwgJ291dCcpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghdGhpcy5jb25uZWN0aW9uU291cmNlKSB7XG4gICAgICAvLyDYp9mI2YTbjNmGINqp2YTbjNqpIC0g2LDYrtuM2LHZhyBzb3VyY2VcbiAgICAgIGlmICh0eXBlID09PSAnb3V0Jykge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Tb3VyY2UgPSB7IG5vZGUsIHR5cGUgfTtcbiAgICAgICAgdGhpcy5hZGRMb2coJ2luZm8nLCBg8J+UlyDZhdmG2KjYuSDYp9iq2LXYp9mEINin2YbYqtiu2KfYqCDYtNivOiAke25vZGUubmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8g2K/ZiNmF24zZhiDaqdmE24zaqSAtINin24zYrNin2K8g2KfYqti12KfZhFxuICAgICAgaWYgKHR5cGUgPT09ICdpbicgJiYgdGhpcy5jb25uZWN0aW9uU291cmNlLm5vZGUuaWQgIT09IG5vZGUuaWQpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0Tm9kZXModGhpcy5jb25uZWN0aW9uU291cmNlLm5vZGUuaWQsIG5vZGUuaWQsIHRoaXMuY29ubmVjdGlvblNvdXJjZS5vdXRjb21lKTtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU291cmNlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkTG9nKCd3YXJuaW5nJywgJ+KaoO+4jyDYp9iq2LXYp9mEINmG2KfZhdi52KrYqNixIC0g2KfYqNiq2K/YpyDYsdmI24wgY29ubmVjdG9yINiu2LHZiNis24wg2Ygg2LPZvtizINmI2LHZiNiv24wg2qnZhNuM2qkg2qnZhtuM2K8nKTtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU291cmNlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog2qnZhNuM2qkg2LHZiNuMIG91dGNvbWUgY29ubmVjdG9yIC0g2KjYsdin24wgYWN0aXZpdGllcyDYqNinINqG2YbYryBvdXRjb21lXG4gICAqL1xuICBvbk91dGNvbWVDb25uZWN0b3JDbGljayhldmVudDogRXZlbnQsIG5vZGU6IFZpc3VhbE5vZGUsIG91dGNvbWU6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKCF0aGlzLmNvbm5lY3Rpb25Tb3VyY2UpIHtcbiAgICAgIC8vINin2YjZhNuM2YYg2qnZhNuM2qkgLSDYsNiu24zYsdmHIHNvdXJjZSDYqNinIG91dGNvbWVcbiAgICAgIHRoaXMuY29ubmVjdGlvblNvdXJjZSA9IHsgbm9kZSwgdHlwZTogJ291dCcsIG91dGNvbWUgfTtcbiAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYPCflJcg2YXZhtio2Lkg2KfYqti12KfZhCDYp9mG2KrYrtin2Kgg2LTYrzogJHtub2RlLm5hbWV9IFske291dGNvbWV9XWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZExvZygnd2FybmluZycsICfimqDvuI8g2YTYt9mB2KfZiyDYsdmI24wgaW5wdXQgY29ubmVjdG9yINuM2qkg2YbZiNivINiv24zar9ixINqp2YTbjNqpINqp2YbbjNivJyk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25Tb3VyY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PSBVSSBNZXRob2RzID09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiDYqti624zbjNixINmI2LbYuduM2Kog2YbZhdin24zYtCBQcm9wZXJ0aWVzIFBhbmVsXG4gICAqL1xuICB0b2dnbGVQcm9wZXJ0aWVzUGFuZWwoKSB7XG4gICAgdGhpcy5zaG93UHJvcGVydGllc1BhbmVsLnNldCghdGhpcy5zaG93UHJvcGVydGllc1BhbmVsKCkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09IFRlbXBsYXRlIEhlbHBlciBNZXRob2RzID09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiDZvtuM2K/YpyDaqdix2K/ZhiBOb2RlINio2KcgSURcbiAgICovXG4gIGZpbmROb2RlQnlJZChub2RlSWQ6IHN0cmluZyk6IFZpc3VhbE5vZGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnZpc3VhbE5vZGVzKCkuZmluZChuID0+IG4uaWQgPT09IG5vZGVJZCk7XG4gIH1cblxuICAvKipcbiAgICog2KjYsdix2LPbjCDYp9uM2YbaqdmHINii24zYpyBwcm9wZXJ0aWVzINiu2KfZhNuMINin2LPYqiDbjNinINmG2YdcbiAgICovXG4gIGhhc1Byb3BlcnRpZXMocHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICog2K/Ys9iq2LHYs9uMINio2YcgT2JqZWN0INio2LHYp9uMINin2LPYqtmB2KfYr9mHINiv2LEgdGVtcGxhdGVcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBPYmplY3QgPSBPYmplY3Q7XG5cbiAgLyoqXG4gICAqINiv2LPYqtix2LPbjCDYqNmHIHR5cGVvZiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYr9ixIHRlbXBsYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHlwZW9mID0gKHZhbHVlOiBhbnkpID0+IHR5cGVvZiB2YWx1ZTtcblxuICAvKipcbiAgICog2K/Ys9iq2LHYs9uMINio2YcgSlNPTiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYr9ixIHRlbXBsYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgSlNPTiA9IEpTT047XG5cbiAgLyoqXG4gICAqINiv2LHbjNin2YHYqiDYsdmG2q8g2KjYsSDYp9iz2KfYsyBvdXRjb21lXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0T3V0Y29tZUNvbG9yKG91dGNvbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sb3JNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnMjAwJzogJyMxMGI5ODEnLCAgICAgIC8vIEdyZWVuIC0gU3VjY2Vzc1xuICAgICAgJ0RvbmUnOiAnIzEwYjk4MScsICAgICAvLyBHcmVlbiAtIFN1Y2Nlc3NcbiAgICAgICdTdWNjZXNzJzogJyMxMGI5ODEnLCAgLy8gR3JlZW4gLSBTdWNjZXNzXG4gICAgICAnNDA0JzogJyNlZjQ0NDQnLCAgICAgIC8vIFJlZCAtIEVycm9yXG4gICAgICAnNTAwJzogJyNlZjQ0NDQnLCAgICAgIC8vIFJlZCAtIEVycm9yXG4gICAgICAnRmFpbGVkJzogJyNlZjQ0NDQnLCAgIC8vIFJlZCAtIEVycm9yXG4gICAgICAnRXJyb3InOiAnI2VmNDQ0NCcsICAgIC8vIFJlZCAtIEVycm9yXG4gICAgICAnVGltZW91dCc6ICcjZjU5ZTBiJywgIC8vIE9yYW5nZSAtIFdhcm5pbmdcbiAgICAgICdDYW5jZWxsZWQnOiAnI2Y1OWUwYicsLy8gT3JhbmdlIC0gV2FybmluZ1xuICAgICAgJ1RoZW4nOiAnIzNiODJmNicsICAgICAvLyBCbHVlIC0gSW5mb1xuICAgICAgJ0Vsc2UnOiAnIzY0NzQ4YicsICAgICAvLyBHcmF5XG4gICAgfTtcblxuICAgIHJldHVybiBjb2xvck1hcFtvdXRjb21lXSB8fCAnIzhiNWNmNic7IC8vIFB1cnBsZSAtIERlZmF1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiDYr9ix24zYp9mB2Kog2YbYp9mFINix2YbaryDYqNix2KfbjCBtYXJrZXIgSURcbiAgICovXG4gIHByb3RlY3RlZCBnZXRPdXRjb21lQ29sb3JOYW1lKG91dGNvbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKFsnMjAwJywgJ0RvbmUnLCAnU3VjY2VzcyddLmluY2x1ZGVzKG91dGNvbWUpKSB7XG4gICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgIH1cbiAgICBpZiAoWyc0MDQnLCAnNTAwJywgJ0ZhaWxlZCcsICdFcnJvciddLmluY2x1ZGVzKG91dGNvbWUpKSB7XG4gICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICB9XG4gICAgaWYgKFsnVGltZW91dCcsICdDYW5jZWxsZWQnXS5pbmNsdWRlcyhvdXRjb21lKSkge1xuICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgICB9XG4gICAgaWYgKFsnVGhlbiddLmluY2x1ZGVzKG91dGNvbWUpKSB7XG4gICAgICByZXR1cm4gJ2luZm8nO1xuICAgIH1cbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9XG5cbiAgLyoqXG4gICAqINio2YfigIzYsdmI2LLYsdiz2KfZhtuMIHByb3BlcnR5INio2KcgcGFyc2Ug2qnYsdiv2YYgSlNPTlxuICAgKi9cbiAgdXBkYXRlTm9kZVByb3BlcnR5SlNPTihub2RlSWQ6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGpzb25TdHJpbmc6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gICAgICB0aGlzLnVwZGF0ZU5vZGVQcm9wZXJ0eShub2RlSWQsIHByb3BlcnR5TmFtZSwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyDYp9qv2LEgSlNPTiDZhtin2YXYudiq2KjYsSDYqNmI2K/YjCDahtuM2LLbjCDZhtqp2YZcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBKU09OOicsIGpzb25TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8YXhwLXBhZ2UtbGF5b3V0PlxuICA8YXhwLWxheW91dC1zdGFydC1zaWRlPlxuICAgIDxheHAtYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlIChjYXRlZ29yeUNsaWNrKT1cIm9uQ2F0ZWdvcnlDbGljaygkZXZlbnQpXCJcbiAgICAgIChhY3Rpdml0eUNsaWNrKT1cIm9uQWN0aXZpdHlDbGljaygkZXZlbnQpXCI+PC9heHAtYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlPlxuICA8L2F4cC1sYXlvdXQtc3RhcnQtc2lkZT5cblxuICA8YXhwLXBhZ2UtdG9vbGJhcj5cbiAgICA8YXhwLWxheW91dC1wcmVmaXg+XG4gICAgICA8IS0tIEVkaXRvciBUYWJzIC0tPlxuICAgICAgPGF4LWJ1dHRvbi1ncm91cCBjbGFzcz1cImF4LXNtXCIgW3NlbGVjdGlvbl09XCInc2luZ2xlJ1wiPlxuICAgICAgICA8YXgtYnV0dG9uLWdyb3VwLWl0ZW0gKG9uQ2xpY2spPVwic3dpdGNoVGFiKCdqc29uJylcIiBbc2VsZWN0ZWRdPVwiYWN0aXZlVGFiKCkgPT09ICdqc29uJ1wiPlxuICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWNvZGVcIj48L2k+XG4gICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby50ZXJtcy5qc29uLWVkaXRvcicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICA8L2F4LWJ1dHRvbi1ncm91cC1pdGVtPlxuICAgICAgICA8YXgtYnV0dG9uLWdyb3VwLWl0ZW0gKG9uQ2xpY2spPVwic3dpdGNoVGFiKCd2aXN1YWwnKVwiIFtzZWxlY3RlZF09XCJhY3RpdmVUYWIoKSA9PT0gJ3Zpc3VhbCdcIj5cbiAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1kaWFncmFtLXByb2plY3RcIj48L2k+XG4gICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby50ZXJtcy52aXN1YWwtZGVzaWduZXInIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgPC9heC1idXR0b24tZ3JvdXAtaXRlbT5cbiAgICAgIDwvYXgtYnV0dG9uLWdyb3VwPlxuICAgIDwvYXhwLWxheW91dC1wcmVmaXg+XG4gIDwvYXhwLXBhZ2UtdG9vbGJhcj5cblxuICA8YXhwLXBhZ2UtY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctc3R1ZGlvXCI+XG4gICAgICA8IS0tIE1haW4gTGF5b3V0IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInN0dWRpby1ib2R5XCIgW2NsYXNzLnByb3BlcnRpZXMtaGlkZGVuXT1cIiFzaG93UHJvcGVydGllc1BhbmVsKClcIj5cblxuICAgICAgICA8IS0tIEVkaXRvciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0dWRpby1lZGl0b3JcIj5cbiAgICAgICAgICA8IS0tIFRhYiBDb250ZW50IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgPCEtLSBKU09OIFRhYiAtLT5cbiAgICAgICAgICAgIEBpZiAoYWN0aXZlVGFiKCkgPT09ICdqc29uJykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdGFiXCI+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImpzb24tZWRpdG9yXCIgWyhuZ01vZGVsKV09XCJ3b3JrZmxvd0pzb25cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMuanNvbi1lZGl0b3IucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiPlxuICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIFZpc3VhbCBUYWIgLS0+XG4gICAgICAgICAgICBAaWYgKGFjdGl2ZVRhYigpID09PSAndmlzdWFsJykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpc3VhbC10YWJcIj5cbiAgICAgICAgICAgICAgPCEtLSBDYW52YXMgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aXN1YWwtY2FudmFzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbnZhcy10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidG9vbC1idG5cIiAoY2xpY2spPVwiY2xlYXJDYW52YXMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMuY2FudmFzLXRvb2xiYXIuY2xlYXItY2FudmFzLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0b29sLWJ0blwiIChjbGljayk9XCJ2aXN1YWxUb0pzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMuY2FudmFzLXRvb2xiYXIuY29udmVydC10by1qc29uLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtY29kZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1saWdodGJ1bGJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLmNhbnZhcy10b29sYmFyLmhpbnQnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW52YXMtYXJlYVwiIChkcm9wKT1cIm9uQ2FudmFzRHJvcCgkZXZlbnQpXCIgKGRyYWdvdmVyKT1cIm9uQ2FudmFzRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uQ2FudmFzRHJhZ0xlYXZlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gU1ZHIGZvciBDb25uZWN0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjb25uZWN0aW9ucy1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE91dGNvbWUtYmFzZWQgQ29ubmVjdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgdmlzdWFsTm9kZXMoKTsgdHJhY2sgbm9kZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUub3V0Y29tZUNvbm5lY3Rpb25zICYmIG5vZGUub3V0Y29tZUNvbm5lY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY29ubiBvZiBub2RlLm91dGNvbWVDb25uZWN0aW9uczsgdHJhY2sgY29ubi50YXJnZXROb2RlSWQgKyBjb25uLm91dGNvbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgQGxldCB0YXJnZXROb2RlID0gZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgQGlmICh0YXJnZXROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwib3V0Y29tZS1jb25uZWN0aW9uLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpbmUgW2F0dHIueDFdPVwibm9kZS5wb3NpdGlvbi54ICsgNzVcIiBbYXR0ci55MV09XCJub2RlLnBvc2l0aW9uLnkgKyA4MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci54Ml09XCJ0YXJnZXROb2RlLnBvc2l0aW9uLnggKyA3NVwiIFthdHRyLnkyXT1cInRhcmdldE5vZGUucG9zaXRpb24ueSAtIDUwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29ubmVjdGlvbi1saW5lIG91dGNvbWUtbGluZVwiIFthdHRyLnN0cm9rZV09XCJnZXRPdXRjb21lQ29sb3IoY29ubi5vdXRjb21lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIubWFya2VyLWVuZF09XCIndXJsKCNhcnJvd2hlYWQtJyArIGdldE91dGNvbWVDb2xvck5hbWUoY29ubi5vdXRjb21lKSArICcpJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIChkYmxjbGljayk9XCJkaXNjb25uZWN0Tm9kZXMobm9kZS5pZCwgY29ubi50YXJnZXROb2RlSWQsIGNvbm4ub3V0Y29tZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ091dGNvbWU6ICcgKyBjb25uLm91dGNvbWUgKyAnIChEb3VibGUtY2xpY2sgdG8gcmVtb3ZlKSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aXRsZT57eyBjb25uLm91dGNvbWUgfX0g4oaSIHt7IHRhcmdldE5vZGUubmFtZSB9fTwvdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saW5lPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IFthdHRyLnhdPVwiKG5vZGUucG9zaXRpb24ueCArIHRhcmdldE5vZGUucG9zaXRpb24ueCkgLyAyICsgNzVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIueV09XCIobm9kZS5wb3NpdGlvbi55ICsgdGFyZ2V0Tm9kZS5wb3NpdGlvbi55KSAvIDIgKyAxNVwiIGNsYXNzPVwiY29ubmVjdGlvbi1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIFthdHRyLmZpbGxdPVwiZ2V0T3V0Y29tZUNvbG9yKGNvbm4ub3V0Y29tZSlcIiBmb250LXNpemU9XCIxMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodD1cIjYwMFwiIHBvaW50ZXItZXZlbnRzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29ubi5vdXRjb21lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTaW1wbGUgQ29ubmVjdGlvbnMgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIC0tPlxuICAgICAgICAgICAgICAgICAgICBAZm9yICh0YXJnZXRJZCBvZiBub2RlLmNvbm5lY3Rpb25zOyB0cmFjayB0YXJnZXRJZCkge1xuICAgICAgICAgICAgICAgICAgICBAbGV0IHRhcmdldE5vZGUgPSBmaW5kTm9kZUJ5SWQodGFyZ2V0SWQpO1xuICAgICAgICAgICAgICAgICAgICBAaWYgKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpbmUgW2F0dHIueDFdPVwibm9kZS5wb3NpdGlvbi54ICsgNzVcIiBbYXR0ci55MV09XCJub2RlLnBvc2l0aW9uLnkgKyA0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIueDJdPVwidGFyZ2V0Tm9kZS5wb3NpdGlvbi54ICsgNzVcIiBbYXR0ci55Ml09XCJ0YXJnZXROb2RlLnBvc2l0aW9uLnkgLSA1MFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb25uZWN0aW9uLWxpbmVcIiBzdHJva2U9XCIjNjQ3NDhiXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIG1hcmtlci1lbmQ9XCJ1cmwoI2Fycm93aGVhZC1kZWZhdWx0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIiAoZGJsY2xpY2spPVwiZGlzY29ubmVjdE5vZGVzKG5vZGUuaWQsIHRhcmdldElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEb3VibGUtY2xpY2sg2KjYsdin24wg2K3YsNmBINin2KrYtdin2YRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGl0bGU+RG91YmxlLWNsaWNrINio2LHYp9uMINit2LDZgTwvdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbGluZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBBcnJvdyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyIGlkPVwiYXJyb3doZWFkLWRlZmF1bHRcIiBtYXJrZXJXaWR0aD1cIjEwXCIgbWFya2VySGVpZ2h0PVwiMTBcIiByZWZYPVwiOVwiIHJlZlk9XCIzXCIgb3JpZW50PVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMCAwLCAxMCAzLCAwIDZcIiBmaWxsPVwiIzY0NzQ4YlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXJrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdWNjZXNzIEFycm93IChHcmVlbikgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hcmtlciBpZD1cImFycm93aGVhZC1zdWNjZXNzXCIgbWFya2VyV2lkdGg9XCIxMFwiIG1hcmtlckhlaWdodD1cIjEwXCIgcmVmWD1cIjlcIiByZWZZPVwiM1wiIG9yaWVudD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjAgMCwgMTAgMywgMCA2XCIgZmlsbD1cIiMxMGI5ODFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXJyb3IgQXJyb3cgKFJlZCkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hcmtlciBpZD1cImFycm93aGVhZC1lcnJvclwiIG1hcmtlcldpZHRoPVwiMTBcIiBtYXJrZXJIZWlnaHQ9XCIxMFwiIHJlZlg9XCI5XCIgcmVmWT1cIjNcIiBvcmllbnQ9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9XCIwIDAsIDEwIDMsIDAgNlwiIGZpbGw9XCIjZWY0NDQ0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdhcm5pbmcgQXJyb3cgKE9yYW5nZSkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hcmtlciBpZD1cImFycm93aGVhZC13YXJuaW5nXCIgbWFya2VyV2lkdGg9XCIxMFwiIG1hcmtlckhlaWdodD1cIjEwXCIgcmVmWD1cIjlcIiByZWZZPVwiM1wiIG9yaWVudD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjAgMCwgMTAgMywgMCA2XCIgZmlsbD1cIiNmNTllMGJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5mbyBBcnJvdyAoQmx1ZSkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hcmtlciBpZD1cImFycm93aGVhZC1pbmZvXCIgbWFya2VyV2lkdGg9XCIxMFwiIG1hcmtlckhlaWdodD1cIjEwXCIgcmVmWD1cIjlcIiByZWZZPVwiM1wiIG9yaWVudD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjAgMCwgMTAgMywgMCA2XCIgZmlsbD1cIiMzYjgyZjZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBOb2RlcyAtLT5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgdmlzdWFsTm9kZXMoKTsgdHJhY2sgbm9kZS5pZCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpc3VhbC1ub2RlXCIgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkTm9kZSgpPy5pZCA9PT0gbm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIm5vZGUucG9zaXRpb24ueFwiIFtzdHlsZS50b3AucHhdPVwibm9kZS5wb3NpdGlvbi55XCIgW2F0dHIuZGF0YS1ub2RlLWlkXT1cIm5vZGUuaWRcIlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgKGRyYWdzdGFydCk9XCJvbk5vZGVEcmFnU3RhcnQoJGV2ZW50LCBub2RlKVwiIChkcmFnKT1cIm9uTm9kZURyYWcoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uTm9kZURyYWdFbmQoJGV2ZW50LCBub2RlKVwiIChjbGljayk9XCJzZWxlY3ROb2RlQnlJZChub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5vZGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibm9kZS1kZWxldGVcIiAoY2xpY2spPVwiZGVsZXRlTm9kZShub2RlLmlkKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kZS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IG5vZGUudHlwZSB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RlLWNvbm5lY3RvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIElucHV0IENvbm5lY3RvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdG9yIGNvbm5lY3Rvci1pblwiIHRpdGxlPVwiSW5wdXRcIiAoY2xpY2spPVwib25Db25uZWN0b3JDbGljaygkZXZlbnQsIG5vZGUsICdpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIE91dHB1dCBDb25uZWN0b3JzIC0gTXVsdGlwbGUgb3V0Y29tZXMgc3VwcG9ydCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUub3V0Y29tZXMgJiYgbm9kZS5vdXRjb21lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBNdWx0aXBsZSBvdXRjb21lczogc2hvdyBzZXBhcmF0ZSBwb3J0IGZvciBlYWNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRjb21lcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG91dGNvbWUgb2Ygbm9kZS5vdXRjb21lczsgdHJhY2sgb3V0Y29tZTsgbGV0IGlkeCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dGNvbWUtY29ubmVjdG9yXCIgW2NsYXNzLmFjdGl2ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvblNvdXJjZT8ubm9kZT8uaWQgPT09IG5vZGUuaWQgJiYgY29ubmVjdGlvblNvdXJjZT8ub3V0Y29tZSA9PT0gb3V0Y29tZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW2F0dHIuZGF0YS1vdXRjb21lXT1cIm91dGNvbWVcIiBbdGl0bGVdPVwiJ091dHB1dDogJyArIG91dGNvbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25PdXRjb21lQ29ubmVjdG9yQ2xpY2soJGV2ZW50LCBub2RlLCBvdXRjb21lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm91dGNvbWUtbGFiZWxcIj57eyBvdXRjb21lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0Y29tZS1kb3RcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2luZ2xlIG91dGNvbWU6IHNob3cgc2ltcGxlIG91dHB1dCBjb25uZWN0b3IgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3RvciBjb25uZWN0b3Itb3V0XCIgW2NsYXNzLmFjdGl2ZV09XCJjb25uZWN0aW9uU291cmNlPy5ub2RlPy5pZCA9PT0gbm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk91dHB1dFwiIChjbGljayk9XCJvbkNvbm5lY3RvckNsaWNrKCRldmVudCwgbm9kZSwgJ291dCcpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmICh2aXN1YWxOb2RlcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbnZhcy1lbXB0eS1zdGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHA+QWN0aXZpdHkg2YfYpyDYsdinINin2LIg2LPYp9uM2K/YqNin2LEg2KjZhyDYp9uM2YbYrNinINio2qnYtNuM2K88L3A+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD7bjNinINin2LIg2KrYqCBKU09O2Iwgd29ya2Zsb3cg2LHYpyBpbXBvcnQg2qnZhtuM2K88L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gUHJvcGVydGllcyBQYW5lbCAtLT5cbiAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZE5vZGUoKSAmJiBzaG93UHJvcGVydGllc1BhbmVsKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb3BlcnRpZXMtcGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc2xpZGVyc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxoND57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImhlYWRlci1idG5cIiAoY2xpY2spPVwidG9nZ2xlUHJvcGVydGllc1BhbmVsKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5hY3Rpb25zLmNsb3NlLXBhbmVsJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1hbmdsZS1yaWdodFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJoZWFkZXItYnRuXCIgKGNsaWNrKT1cInNlbGVjdGVkTm9kZS5zZXQobnVsbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5hY3Rpb25zLmNsb3NlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydHktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5maWVsZHMuaWQnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX06PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cInNlbGVjdGVkTm9kZSgpIS5pZFwiIGRpc2FibGVkIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmZpZWxkcy50eXBlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJzZWxlY3RlZE5vZGUoKSEudHlwZVwiIGRpc2FibGVkIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmZpZWxkcy5uYW1lJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJzZWxlY3RlZE5vZGUoKSEubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZU5vZGVQcm9wZXJ0eShzZWxlY3RlZE5vZGUoKSEuaWQsICduYW1lJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGg1PvCfk6Uge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuc2VjdGlvbnMuaW5wdXQtcHJvcGVydGllcycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwcm9wZXJ0aWVzLWhpbnRcIj57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5zZWN0aW9ucy5pbnB1dC1wcm9wZXJ0aWVzJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19IC0g2YXZgtin2K/bjNixINix2Kcg2KrZhti424zZhSDaqdmG24zYrzwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgIEBpZiAoaGFzUHJvcGVydGllcyhzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllcykpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1lZGl0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoa2V5IG9mIE9iamVjdC5rZXlzKHNlbGVjdGVkTm9kZSgpIS5wcm9wZXJ0aWVzKTsgdHJhY2sga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvcGVydHktdHlwZS1iYWRnZVwiPnt7IHR5cGVvZiBzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHR5cGVvZiBzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IFt2YWx1ZV09XCJzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldXCIgKGNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTm9kZVByb3BlcnR5KHNlbGVjdGVkTm9kZSgpIS5pZCwga2V5LCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlID09PSAndHJ1ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cInRydWVcIj5UcnVlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPkZhbHNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAodHlwZW9mIHNlbGVjdGVkTm9kZSgpIS5wcm9wZXJ0aWVzW2tleV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBbdmFsdWVdPVwic2VsZWN0ZWROb2RlKCkhLnByb3BlcnRpZXNba2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlTm9kZVByb3BlcnR5KHNlbGVjdGVkTm9kZSgpIS5pZCwga2V5LCArJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVwiM1wiIFt2YWx1ZV09XCJKU09OLnN0cmluZ2lmeShzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldLCBudWxsLCAyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlTm9kZVByb3BlcnR5SlNPTihzZWxlY3RlZE5vZGUoKSEuaWQsIGtleSwgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVOb2RlUHJvcGVydHkoc2VsZWN0ZWROb2RlKCkhLmlkLCBrZXksICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuby1wcm9wZXJ0aWVzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmVtcHR5LXN0YXRlcy5uby1wcm9wZXJ0aWVzJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGg1PvCfk6Qge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuc2VjdGlvbnMub3V0cHV0LXZhcmlhYmxlcycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwcm9wZXJ0aWVzLWhpbnRcIj7Yrtix2YjYrNuMINmIINmF2KrYutuM2LHZh9inPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmZpZWxkcy5vdXRwdXQtdmFyaWFibGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX06PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCLZhdir2YTYp9mLIHJlc3VsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkTm9kZSgpIS5wcm9wZXJ0aWVzWydvdXRwdXRWYXJpYWJsZSddIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlTm9kZVByb3BlcnR5KHNlbGVjdGVkTm9kZSgpIS5pZCwgJ291dHB1dFZhcmlhYmxlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGg1PvCflJcge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuc2VjdGlvbnMuY29ubmVjdGlvbnMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvcGVydGllcy1oaW50XCI+2KfYqti12KfZhNin2Kog2KfbjNmGINmG2YjYrzwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gT3V0Y29tZS1iYXNlZCBDb25uZWN0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWROb2RlKCkhLm91dGNvbWVDb25uZWN0aW9ucyAmJiBzZWxlY3RlZE5vZGUoKSEub3V0Y29tZUNvbm5lY3Rpb25zIS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdGlvbnMtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjb25uIG9mIHNlbGVjdGVkTm9kZSgpIS5vdXRjb21lQ29ubmVjdGlvbnMhOyB0cmFjayBjb25uLnRhcmdldE5vZGVJZCArIGNvbm4ub3V0Y29tZSkge1xuICAgICAgICAgICAgICAgICAgICBAbGV0IHRhcmdldE5vZGUgPSBmaW5kTm9kZUJ5SWQoY29ubi50YXJnZXROb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICBAaWYgKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpb24taXRlbSBvdXRjb21lLWNvbm5lY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm91dGNvbWUtYmFkZ2VcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJnZXRPdXRjb21lQ29sb3IoY29ubi5vdXRjb21lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29ubi5vdXRjb21lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtYXJyb3ctcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdGFyZ2V0Tm9kZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZW1vdmUtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkaXNjb25uZWN0Tm9kZXMoc2VsZWN0ZWROb2RlKCkhLmlkLCBjb25uLnRhcmdldE5vZGVJZCwgY29ubi5vdXRjb21lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cItit2LDZgSDYp9iq2LXYp9mEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHNlbGVjdGVkTm9kZSgpIS5jb25uZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIFNpbXBsZSBDb25uZWN0aW9ucyAoZmFsbGJhY2spIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpb25zLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAodGFyZ2V0SWQgb2Ygc2VsZWN0ZWROb2RlKCkhLmNvbm5lY3Rpb25zOyB0cmFjayB0YXJnZXRJZCkge1xuICAgICAgICAgICAgICAgICAgICBAbGV0IHRhcmdldE5vZGUgPSBmaW5kTm9kZUJ5SWQodGFyZ2V0SWQpO1xuICAgICAgICAgICAgICAgICAgICBAaWYgKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtYXJyb3ctcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdGFyZ2V0Tm9kZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZW1vdmUtYnRuXCIgKGNsaWNrKT1cImRpc2Nvbm5lY3ROb2RlcyhzZWxlY3RlZE5vZGUoKSEuaWQsIHRhcmdldElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cItit2LDZgSDYp9iq2LXYp9mEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuby1wcm9wZXJ0aWVzXCI+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuZW1wdHktc3RhdGVzLm5vLWNvbm5lY3Rpb25zJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9wPlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEF2YWlsYWJsZSBPdXRjb21lcyBJbmZvIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZE5vZGUoKSEub3V0Y29tZXMgJiYgc2VsZWN0ZWROb2RlKCkhLm91dGNvbWVzIS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8aDU+8J+TpCB7eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5zZWN0aW9ucy5hdmFpbGFibGUtb3V0Y29tZXMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvcGVydGllcy1oaW50XCI+2K7YsdmI2KzbjOKAjNmH2KfbjCDZhdmI2KzZiNivINio2LHYp9uMINin2KrYtdin2YQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dGNvbWVzLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAob3V0Y29tZSBvZiBzZWxlY3RlZE5vZGUoKSEub3V0Y29tZXMhOyB0cmFjayBvdXRjb21lKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3V0Y29tZS10YWdcIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZ2V0T3V0Y29tZUNvbG9yKG91dGNvbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvdXRjb21lLWRvdFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImdldE91dGNvbWVDb2xvcihvdXRjb21lKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvdXRjb21lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGg1PvCfk50ge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuc2VjdGlvbnMucmF3LWpzb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz1cInByb3BlcnRpZXMtanNvblwiPnt7IHNlbGVjdGVkTm9kZSgpIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gVG9nZ2xlIEJ1dHRvbiBmb3IgUHJvcGVydGllcyAod2hlbiBjbG9zZWQpIC0tPlxuICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkTm9kZSgpICYmICFzaG93UHJvcGVydGllc1BhbmVsKCkpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNpZGViYXItdG9nZ2xlLWJ0biByaWdodFwiIChjbGljayk9XCJ0b2dnbGVQcm9wZXJ0aWVzUGFuZWwoKVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmFjdGlvbnMuc2hvdy1wYW5lbCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc2xpZGVyc1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gV29ya2Zsb3cgU2V0dGluZ3MgTW9kYWwgLS0+XG4gICAgICBAaWYgKHNob3dXb3JrZmxvd1NldHRpbmdzKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1tb2RhbC1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlV29ya2Zsb3dTZXR0aW5ncygpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1tb2RhbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8IS0tIE1vZGFsIEhlYWRlciAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtbW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtY29nXCI+PC9pPlxuICAgICAgICAgICAgICA8aDI+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2VXb3JrZmxvd1NldHRpbmdzKClcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBNb2RhbCBCb2R5IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICA8IS0tIFRhYnMgTmF2aWdhdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy10YWJzXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0YWItYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZXR0aW5nc1RhYigpID09PSAnZ2VuZXJhbCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hTZXR0aW5nc1RhYignZ2VuZXJhbCcpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnRhYnMuZ2VuZXJhbCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1idG5cIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNldHRpbmdzVGFiKCkgPT09ICdpbnB1dHMnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoU2V0dGluZ3NUYWIoJ2lucHV0cycpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1zaWduLWluXCI+PC9pPlxuICAgICAgICAgICAgICAgIHt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3MudGFicy5pbnB1dHMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93U2V0dGluZ3MoKS5pbnB1dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIj57eyB3b3JrZmxvd1NldHRpbmdzKCkuaW5wdXRzLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2V0dGluZ3NUYWIoKSA9PT0gJ291dHB1dHMnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoU2V0dGluZ3NUYWIoJ291dHB1dHMnKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc2lnbi1vdXRcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy50YWJzLm91dHB1dHMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93U2V0dGluZ3MoKS5vdXRwdXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlXCI+e3sgd29ya2Zsb3dTZXR0aW5ncygpLm91dHB1dHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0YWItYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZXR0aW5nc1RhYigpID09PSAndmFyaWFibGVzJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFNldHRpbmdzVGFiKCd2YXJpYWJsZXMnKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtYm94XCI+PC9pPlxuICAgICAgICAgICAgICAgIHt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3MudGFicy52YXJpYWJsZXMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93U2V0dGluZ3MoKS52YXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIj57eyB3b3JrZmxvd1NldHRpbmdzKCkudmFyaWFibGVzLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2V0dGluZ3NUYWIoKSA9PT0gJ2FkdmFuY2VkJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFNldHRpbmdzVGFiKCdhZHZhbmNlZCcpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jb2dcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy50YWJzLmFkdmFuY2VkJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVGFiIENvbnRlbnQgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtY29udGVudFwiPlxuICAgICAgICAgICAgICA8IS0tIEdlbmVyYWwgVGFiIC0tPlxuICAgICAgICAgICAgICBAaWYgKGFjdGl2ZVNldHRpbmdzVGFiKCkgPT09ICdnZW5lcmFsJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxoMz57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmdlbmVyYWwudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2gzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5nZW5lcmFsLmZpZWxkcy5uYW1lLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmdlbmVyYWwuZmllbGRzLm5hbWUucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMuZ2VuZXJhbC5maWVsZHMuZGVmaW5pdGlvbi1pZC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0taW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5nZW5lcmFsLmZpZWxkcy5kZWZpbml0aW9uLWlkLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ3b3JrZmxvd1NldHRpbmdzKCkuZGVmaW5pdGlvbklkXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmdlbmVyYWwuZmllbGRzLmRlZmluaXRpb24taWQuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5nZW5lcmFsLmZpZWxkcy5kZXNjcmlwdGlvbi50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLXRleHRhcmVhXCIgcm93cz1cIjRcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5nZW5lcmFsLmZpZWxkcy5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwid29ya2Zsb3dTZXR0aW5ncygpLmRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICA8IS0tIElucHV0cyBUYWIgLS0+XG4gICAgICAgICAgICAgIEBpZiAoYWN0aXZlU2V0dGluZ3NUYWIoKSA9PT0gJ2lucHV0cycpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxoMz57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDM+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJhZGRXb3JrZmxvd0lucHV0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1wbHVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5hZGQtYnV0dG9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAod29ya2Zsb3dTZXR0aW5ncygpLmlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtaW5ib3hcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8cD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5lbXB0eS1zdGF0ZS50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvcD5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5lbXB0eS1zdGF0ZS5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGlucHV0IG9mIHdvcmtmbG93U2V0dGluZ3MoKS5pbnB1dHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tbnVtYmVyXCI+I3t7ICRpbmRleCArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlbW92ZS1idG5cIiAoY2xpY2spPVwicmVtb3ZlV29ya2Zsb3dJbnB1dCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5hY3Rpb25zLnJlbW92ZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10cmFzaFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5pbnB1dHMuZmllbGRzLm5hbWUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0taW5wdXRcIiBwbGFjZWhvbGRlcj1cInVzZXJOYW1lXCIgW3ZhbHVlXT1cImlucHV0Lm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVXb3JrZmxvd0lucHV0KCRpbmRleCwgJ25hbWUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5pbnB1dHMuZmllbGRzLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJVc2VyIE5hbWVcIiBbdmFsdWVdPVwiaW5wdXQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVXb3JrZmxvd0lucHV0KCRpbmRleCwgJ3RpdGxlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5maWVsZHMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMuaW5wdXRzLmZpZWxkcy5kZXNjcmlwdGlvbi1wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpbnB1dC5kZXNjcmlwdGlvbiB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVXb3JrZmxvd0lucHV0KCRpbmRleCwgJ2Rlc2NyaXB0aW9uJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5maWVsZHMuZGF0YS10eXBlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW3ZhbHVlXT1cImlucHV0LnNjaGVtYS5kYXRhVHlwZSB8fCAnc3RyaW5nJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVXb3JrZmxvd0lucHV0U2NoZW1hKCRpbmRleCwgJ2RhdGFUeXBlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic3RyaW5nXCI+U3RyaW5nPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm51bWJlclwiPk51bWJlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJvYmplY3RcIj5PYmplY3Q8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYXJyYXlcIj5BcnJheTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5maWVsZHMuZGVmYXVsdC12YWx1ZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMuaW5wdXRzLmZpZWxkcy5kZWZhdWx0LXZhbHVlLXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaW5wdXQuc2NoZW1hLmRlZmF1bHRWYWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVdvcmtmbG93SW5wdXRTY2hlbWEoJGluZGV4LCAnZGVmYXVsdFZhbHVlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY2hlY2tib3gtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImdldElucHV0SXNSZXF1aXJlZChpbnB1dClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlV29ya2Zsb3dJbnB1dFZhbGlkYXRpb24oJGluZGV4LCAkYW55KCRldmVudC50YXJnZXQpLmNoZWNrZWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5pbnB1dHMuZmllbGRzLnJlcXVpcmVkJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBPdXRwdXRzIFRhYiAtLT5cbiAgICAgICAgICAgICAgQGlmIChhY3RpdmVTZXR0aW5nc1RhYigpID09PSAnb3V0cHV0cycpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxoMz57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLm91dHB1dHMudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwiYWRkV29ya2Zsb3dPdXRwdXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXBsdXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5hZGQtYnV0dG9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAod29ya2Zsb3dTZXR0aW5ncygpLm91dHB1dHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWluYm94XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHA+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5vdXRwdXRzLmVtcHR5LXN0YXRlLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9wPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5lbXB0eS1zdGF0ZS5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKG91dHB1dCBvZiB3b3JrZmxvd1NldHRpbmdzKCkub3V0cHV0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS1udW1iZXJcIj4je3sgJGluZGV4ICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVtb3ZlLWJ0blwiIChjbGljayk9XCJyZW1vdmVXb3JrZmxvd091dHB1dCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLm91dHB1dHMuYWN0aW9ucy5yZW1vdmUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5maWVsZHMubmFtZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwicmVzdWx0XCIgW3ZhbHVlXT1cIm91dHB1dC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlV29ya2Zsb3dPdXRwdXQoJGluZGV4LCAnbmFtZScsICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLm91dHB1dHMuZmllbGRzLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJSZXN1bHRcIiBbdmFsdWVdPVwib3V0cHV0LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlV29ya2Zsb3dPdXRwdXQoJGluZGV4LCAndGl0bGUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5maWVsZHMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5maWVsZHMuZGVzY3JpcHRpb24tcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3V0cHV0LmRlc2NyaXB0aW9uIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVdvcmtmbG93T3V0cHV0KCRpbmRleCwgJ2Rlc2NyaXB0aW9uJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5vdXRwdXRzLmZpZWxkcy5kYXRhLXR5cGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW3ZhbHVlXT1cIm91dHB1dC5zY2hlbWEuZGF0YVR5cGUgfHwgJ3N0cmluZydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVdvcmtmbG93T3V0cHV0U2NoZW1hKCRpbmRleCwgJ2RhdGFUeXBlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInN0cmluZ1wiPlN0cmluZzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVtYmVyXCI+TnVtYmVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib2JqZWN0XCI+T2JqZWN0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhcnJheVwiPkFycmF5PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBWYXJpYWJsZXMgVGFiIC0tPlxuICAgICAgICAgICAgICBAaWYgKGFjdGl2ZVNldHRpbmdzVGFiKCkgPT09ICd2YXJpYWJsZXMnKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aDM+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwiYWRkV29ya2Zsb3dWYXJpYWJsZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuYWRkLWJ1dHRvbicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93U2V0dGluZ3MoKS52YXJpYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWluYm94XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHA+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuZW1wdHktc3RhdGUudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3A+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuZW1wdHktc3RhdGUuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1saXN0XCI+XG4gICAgICAgICAgICAgICAgICBAZm9yICh2YXJpYWJsZSBvZiB3b3JrZmxvd1NldHRpbmdzKCkudmFyaWFibGVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLW51bWJlclwiPiN7eyAkaW5kZXggKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZW1vdmUtYnRuXCIgKGNsaWNrKT1cInJlbW92ZVdvcmtmbG93VmFyaWFibGUoJGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuYWN0aW9ucy5yZW1vdmUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMudmFyaWFibGVzLmZpZWxkcy5uYW1lJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJ0ZW1wRGF0YVwiIFt2YWx1ZV09XCJ2YXJpYWJsZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlV29ya2Zsb3dWYXJpYWJsZSgkaW5kZXgsICduYW1lJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMudmFyaWFibGVzLmZpZWxkcy50eXBlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW3ZhbHVlXT1cInZhcmlhYmxlLnR5cGVOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVdvcmtmbG93VmFyaWFibGUoJGluZGV4LCAndHlwZU5hbWUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzdHJpbmdcIj5TdHJpbmc8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVtYmVyXCI+TnVtYmVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJvb2xlYW5cIj5Cb29sZWFuPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm9iamVjdFwiPk9iamVjdDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhcnJheVwiPkFycmF5PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLnZhcmlhYmxlcy5maWVsZHMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMudmFyaWFibGVzLmZpZWxkcy5kZXNjcmlwdGlvbi1wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YXJpYWJsZS5kZXNjcmlwdGlvbiB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVXb3JrZmxvd1ZhcmlhYmxlKCRpbmRleCwgJ2Rlc2NyaXB0aW9uJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuZmllbGRzLmluaXRpYWwtdmFsdWUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMudmFyaWFibGVzLmZpZWxkcy5pbml0aWFsLXZhbHVlLXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhcmlhYmxlLnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVdvcmtmbG93VmFyaWFibGUoJGluZGV4LCAndmFsdWUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gQWR2YW5jZWQgVGFiIC0tPlxuICAgICAgICAgICAgICBAaWYgKGFjdGl2ZVNldHRpbmdzVGFiKCkgPT09ICdhZHZhbmNlZCcpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8aDM+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5hZHZhbmNlZC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDM+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFZlcnNpb25pbmcgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8aDQ+2YbYs9iu2YfigIzYqNmG2K/bjCAoVmVyc2lvbmluZyk8L2g0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5WZXJzaW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIG1pbj1cIjFcIiBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS52ZXJzaW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+2LTZhdin2LHZhyDZhtiz2K7ZhyB3b3JrZmxvdyAoMSwgMiwgMywgLi4uKTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBjaGVja2JveC1ncm91cFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMS44cmVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwid29ya2Zsb3dTZXR0aW5ncygpLmlzTGF0ZXN0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPtii2K7YsduM2YYg2YbYs9iu2YcgKElzIExhdGVzdCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGNoZWNrYm94LWdyb3VwXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxLjhyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJ3b3JrZmxvd1NldHRpbmdzKCkuaXNQdWJsaXNoZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+2YXZhtiq2LTYsSDYtNiv2YcgKFB1Ymxpc2hlZCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxoND7YqtmG2LjbjNmF2KfYqiAoT3B0aW9ucyk8L2g0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY2hlY2tib3gtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS51c2FibGVBc0FjdGl2aXR5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7Zgtin2KjZhCDYp9iz2KrZgdin2K/ZhyDYqNmHINi52YbZiNin2YYgQWN0aXZpdHk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD7Yp9uM2YYgd29ya2Zsb3cg2YXbjOKAjNiq2YjYp9mG2K8g2KjZhyDYudmG2YjYp9mGINuM2qkgYWN0aXZpdHkg2K/YsSB3b3JrZmxvdyDZh9in24wg2K/bjNqv2LEg2KfYs9iq2YHYp9iv2Ycg2LTZiNivPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY2hlY2tib3gtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS5hdXRvVXBkYXRlQ29uc3VtaW5nV29ya2Zsb3dzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7YqNmH4oCM2LHZiNiy2LHYs9in2YbbjCDYrtmI2K/aqdin2LEgd29ya2Zsb3dzINmF2LXYsdmB4oCM2qnZhtmG2K/Zhzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPndvcmtmbG93INmH2KfbjNuMINqp2Ycg2KfYsiDYp9uM2YYgd29ya2Zsb3cg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNqp2YbZhtivINio2Ycg2LXZiNix2Kog2K7ZiNiv2qnYp9ixINio2YfigIzYsdmI2LIg2YXbjOKAjNi02YjZhtivPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBNZXRhZGF0YSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxoND5NZXRhZGF0YTwvaDQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlRvb2wgVmVyc2lvbjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgcGxhY2Vob2xkZXI9XCIxLjAuMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS50b29sVmVyc2lvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPtmG2LPYrtmHINin2KjYstin2LEg2LPYp9iy2YbYr9mHPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5Qcm92aWRlciBOYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0taW5wdXRcIiBwbGFjZWhvbGRlcj1cIldvcmtmbG93U3R1ZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwid29ya2Zsb3dTZXR0aW5ncygpLnByb3ZpZGVyTmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPtmG2KfZhSDYp9io2LLYp9ixINiz2KfYstmG2K/Zhzwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIE91dGNvbWVzIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHZhbmNlZC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGg0PldvcmtmbG93IE91dGNvbWVzPC9oND5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5Qb3NzaWJsZSBPdXRjb21lczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRG9uZSwgU3VjY2VzcywgRmFpbGVkICjYrNiv2Kcg2LTYr9mHINio2Kcg2qnYp9mF2KcpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwid29ya2Zsb3dTZXR0aW5ncygpLm91dGNvbWVzLmpvaW4oJywgJylcIlxuICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVPdXRjb21lcygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD7Zhtiq2KfbjNisINmF2YXaqdmGINqp2Ycg2KfbjNmGIHdvcmtmbG93INmF24zigIzYqtmI2KfZhtivINio2LHar9ix2K/Yp9mG2K8gKNmF2KvZhNin2Ys6IERvbmUsIFN1Y2Nlc3MsIEZhaWxlZCk8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0Y29tZXMtcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvdXRjb21lIG9mIHdvcmtmbG93U2V0dGluZ3MoKS5vdXRjb21lczsgdHJhY2sgb3V0Y29tZSkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm91dGNvbWUtY2hpcFwiPnt7IG91dGNvbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBFeHBvcnQgUHJldmlldyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxoND7Yrtix2YjYrNuMINmG2YfYp9uM24wgKFdvcmtmbG93RGVmaW5pdGlvbik8L2g0PlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPtin24zZhiDYs9in2K7Yqtin2LEg2K/ZgtuM2YLYp9mLINmF2LfYp9io2YIg2KjYpyBXb3JrZmxvd0RlZmluaXRpb24g2KfYs9iqINmIINiv2LEg2K/bjNiq2KfYqNuM2LMg2LDYrtuM2LHZhyDZhduM4oCM2LTZiNivPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBvcnQtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+RGVmaW5pdGlvbiBJRDo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3sgd29ya2Zsb3dTZXR0aW5ncygpLmRlZmluaXRpb25JZCB8fCAnKNiu2KfZhNuMKScgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+TmFtZTo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3sgd29ya2Zsb3dTZXR0aW5ncygpLm5hbWUgfHwgJyjYrtin2YTbjCknIH19PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlZlcnNpb246PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnZ7eyB3b3JrZmxvd1NldHRpbmdzKCkudmVyc2lvbiB9fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5JbnB1dHM6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7IHdvcmtmbG93U2V0dGluZ3MoKS5pbnB1dHMubGVuZ3RoIH19IGl0ZW1zPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPk91dHB1dHM6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7IHdvcmtmbG93U2V0dGluZ3MoKS5vdXRwdXRzLmxlbmd0aCB9fSBpdGVtczwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5WYXJpYWJsZXM6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7IHdvcmtmbG93U2V0dGluZ3MoKS52YXJpYWJsZXMubGVuZ3RoIH19IGl0ZW1zPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIE1vZGFsIEZvb3RlciAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICA8YXgtYnV0dG9uIFt0ZXh0XT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3MuYWN0aW9ucy5jYW5jZWwnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIiBjb2xvcj1cInNlY29uZGFyeVwiIHNpemU9XCJtZFwiIChvbkNsaWNrKT1cImNsb3NlV29ya2Zsb3dTZXR0aW5ncygpXCI+IDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbiBbdGV4dF09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLmFjdGlvbnMuc2F2ZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiIGNvbG9yPVwicHJpbWFyeVwiIHNpemU9XCJtZFwiIChvbkNsaWNrKT1cInNhdmVXb3JrZmxvd1NldHRpbmdzKClcIj4gPC9heC1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gV29ya2Zsb3cgRXhlY3V0aW9uIERpYWxvZyAtLT5cbiAgICAgIEBpZiAoc2hvd0V4ZWN1dGlvbkRpYWxvZygpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXhlY3V0aW9uLWRpYWxvZy1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlRXhlY3V0aW9uRGlhbG9nKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWN1dGlvbi1kaWFsb2dcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgPCEtLSBEaWFsb2cgSGVhZGVyIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVjdXRpb24tZGlhbG9nLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtcGxheS1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICAgIDxoMj57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGVzdC1wYWdlcy53b3JrZmxvdy1zdHVkaW8uYWN0aW9ucy5leGVjdXRlLXdvcmtmbG93LnRpdGxlJyB8IHRyYW5zbGF0ZSB8XG4gICAgICAgICAgICAgICAgICBhc3luYyB9fTwvaDI+XG4gICAgICAgICAgICAgICAgPHA+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnRlc3QtcGFnZXMud29ya2Zsb3ctc3R1ZGlvLmFjdGlvbnMuZXhlY3V0ZS13b3JrZmxvdy5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIHwgYXN5bmMgfX08L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNsb3NlRXhlY3V0aW9uRGlhbG9nKClcIiBbZGlzYWJsZWRdPVwiaXNFeGVjdXRpbmcoKVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERpYWxvZyBCb2R5IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVjdXRpb24tZGlhbG9nLWJvZHlcIj5cbiAgICAgICAgICAgIDwhLS0gV29ya2Zsb3cgSW5mbyBQYW5lbCAoQmVmb3JlIEV4ZWN1dGlvbikgLS0+XG4gICAgICAgICAgICBAaWYgKCF3b3JrZmxvd0luc3RhbmNlU3RhdGUoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93LWluZm8tcGFuZWxcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXJ0LXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhcnQtaWxsdXN0cmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXJvY2tldFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aDM+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnRlc3QtcGFnZXMud29ya2Zsb3ctc3R1ZGlvLm1lc3NhZ2VzLmluZm8ucmVhZHktdG8tZXhlY3V0ZScgfCB0cmFuc2xhdGUgfFxuICAgICAgICAgICAgICAgICAgYXN5bmMgfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp0ZXN0LXBhZ2VzLndvcmtmbG93LXN0dWRpby5tZXNzYWdlcy5pbmZvLmNsaWNrLXRvLXN0YXJ0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICB9fTwvcD5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbdGV4dF09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGVzdC1wYWdlcy53b3JrZmxvdy1zdHVkaW8uYWN0aW9ucy5zdGFydC1leGVjdXRpb24udGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzXCIgc2l6ZT1cImxnXCIgKG9uQ2xpY2spPVwic3RhcnRXb3JrZmxvd0V4ZWN1dGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgPCEtLSBDdXN0b20gVUkgZm9yIFJlZ2lzdHJhdGlvbiAtLT5cbiAgICAgICAgICAgIEBpZiAoZmFsc2UpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWdpc3RyYXRpb24tdWlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZ2lzdHJhdGlvbi1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZ2lzdHJhdGlvbi1pY29uXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXVzZXItY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxoMz7Zgdix2KLbjNmG2K8g2KvYqNiq4oCM2YbYp9mFPC9oMz5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInJlZ2lzdHJhdGlvbi1kZXNjXCI+XG4gICAgICAgICAgICAgICAgICDYp9uM2YYg2YHZhNmIINi02KfZhdmEINqG2YbYryDZhdix2K3ZhNmHINin2LPYqiDaqdmHINiv2KfYr9mH4oCM2YfYp9uMINqp2KfYsdio2LEg2LHYpyDYrNmF2LnigIzYotmI2LHbjCDaqdix2K/ZhyDZiCDYr9ixINmG2YfYp9uM2Kog2K3Ys9in2Kgg2qnYp9ix2KjYsduMINin24zYrNin2K8g2YXbjOKAjNqp2YbYry5cbiAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93SW5zdGFuY2VTdGF0ZSgpPy5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWdpc3RyYXRpb24tcHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8cD7Yr9ixINit2KfZhCDYp9is2LHYp9uMINmF2LHYp9it2YQg2KvYqNiq4oCM2YbYp9mFLi4uPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpZiAod29ya2Zsb3dJbnN0YW5jZVN0YXRlKCk/LnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWdpc3RyYXRpb24tc3VjY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jaGVjay1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8aDQ+2KvYqNiq4oCM2YbYp9mFINio2Kcg2YXZiNmB2YLbjNiqINin2YbYrNin2YUg2LTYryE8L2g0PlxuICAgICAgICAgICAgICAgICAgPHA+2K3Ys9in2Kgg2qnYp9ix2KjYsduMINi02YXYpyDYp9uM2KzYp9ivINi02K8g2Ygg2KjZhyDYstmI2K/bjCDYqNmHINiv2KfYtNio2YjYsdivINmF2YbYqtmC2YQg2K7ZiNin2YfbjNivINi02K8uPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBEZWZhdWx0IEV4ZWN1dGlvbiBWaWV3IC0tPlxuICAgICAgICAgICAgQGlmICh3b3JrZmxvd0luc3RhbmNlU3RhdGUoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlZmF1bHQtZXhlY3V0aW9uLXZpZXdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWN1dGlvbi1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93SW5zdGFuY2VTdGF0ZSgpPy5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtcnVubmluZ1wiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1zcGlubmVyLXRoaXJkIGZhLXNwaW5cIj48L2k+XG4gICAgICAgICAgICAgICAgICA8aDM+2K/YsSDYrdin2YQg2KfYrNix2KcuLi48L2gzPlxuICAgICAgICAgICAgICAgICAgPHA+V29ya2Zsb3cg2K/YsSDYrdin2YQg2KfYrNix2Kcg2KfYs9iqLiDZhNi32YHYp9mLINi12KjYsSDaqdmG24zYry48L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGlmICh3b3JrZmxvd0luc3RhbmNlU3RhdGUoKT8uc3RhdHVzID09PSAnZmluaXNoZWQnKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy1maW5pc2hlZFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jaGVjay1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8aDM+2KfYrNix2Kcg2KjYpyDZhdmI2YHZgtuM2Kog2KraqdmF24zZhCDYtNivPC9oMz5cbiAgICAgICAgICAgICAgICAgIDxwPldvcmtmbG93INio2Kcg2YXZiNmB2YLbjNiqINin2KzYsdinINi02K8g2Ygg2KrZhdin2YUgQWN0aXZpdGllcyDYp9mG2KzYp9mFINi02K/ZhtivLjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93SW5zdGFuY2VTdGF0ZSgpPy5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWVycm9yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxoMz7Yrti32Kcg2K/YsSDYp9is2LHYpzwvaDM+XG4gICAgICAgICAgICAgICAgICA8cD57eyB3b3JrZmxvd0luc3RhbmNlU3RhdGUoKT8uZXJyb3IgfX08L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIEV4ZWN1dGlvbiBMb2dzIFBhbmVsIC0tPlxuICAgICAgICAgICAgQGlmICh3b3JrZmxvd0luc3RhbmNlU3RhdGUoKSAmJiBleGVjdXRpb25Mb2dzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWN1dGlvbi1sb2dzLXBhbmVsXCI+XG4gICAgICAgICAgICAgIDxoMz48aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRlcm1pbmFsXCI+PC9pPiDZhNin2q/igIzZh9in24wg2KfYrNix2Kc8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9ncy1jb250YWluZXItY29tcGFjdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGxvZyBvZiBleGVjdXRpb25Mb2dzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2ctaXRlbS1jb21wYWN0XCIgW2NsYXNzXT1cIidsb2ctJyArIGxvZy5sZXZlbFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2ctdGltZVwiPnt7IGxvZy50aW1lc3RhbXAgfCBkYXRlOiAnSEg6bW06c3MnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2ctaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChsb2cubGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdpbmZvJykge1xuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlICgnc3VjY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jaGVjay1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCd3YXJuaW5nJykge1xuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlICgnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdGltZXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nLW1lc3NhZ2VcIj57eyBsb2cubWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERpYWxvZyBGb290ZXIgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWN1dGlvbi1kaWFsb2ctZm9vdGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWluZm9cIj5cbiAgICAgICAgICAgICAgQGlmICh3b3JrZmxvd0luc3RhbmNlU3RhdGUoKT8uc3RhcnRUaW1lKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1pbmZvXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jbG9ja1wiPjwvaT5cbiAgICAgICAgICAgICAgICDYtNix2YjYuToge3sgd29ya2Zsb3dJbnN0YW5jZVN0YXRlKCkhLnN0YXJ0VGltZSB8IGRhdGU6ICdISDptbTpzcycgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAod29ya2Zsb3dJbnN0YW5jZVN0YXRlKCk/LmVuZFRpbWUpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLWluZm9cIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWZsYWctY2hlY2tlcmVkXCI+PC9pPlxuICAgICAgICAgICAgICAgINm+2KfbjNin2YY6IHt7IHdvcmtmbG93SW5zdGFuY2VTdGF0ZSgpIS5lbmRUaW1lIHwgZGF0ZTogJ0hIOm1tOnNzJyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgICAgICBbdGV4dF09XCIod29ya2Zsb3dJbnN0YW5jZVN0YXRlKCkgPyAnQGdlbmVyYWw6YWN0aW9ucy5jbG9zZS50aXRsZScgOiAnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnKSB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiIHNpemU9XCJtZFwiIFtkaXNhYmxlZF09XCJpc0V4ZWN1dGluZygpXCIgKG9uQ2xpY2spPVwiY2xvc2VFeGVjdXRpb25EaWFsb2coKVwiPlxuICAgICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG48L2F4cC1wYWdlLWxheW91dD4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LW1vZHVsZXMtd29ya2Zsb3ctbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9hY29yZXgtbW9kdWxlcy13b3JrZmxvdy1tYW5hZ2VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-workflow-management.mjs","sources":["../tmp-esm2022/workflow-management/lib/const.js","../tmp-esm2022/workflow-management/lib/entity.provider.js","../tmp-esm2022/workflow-management/lib/menu.keys.js","../tmp-esm2022/workflow-management/lib/menu.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/execute-query.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/execute-command.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/show-confirm-popup.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/show-layout-popup.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/human-task.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/show-toast.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/collect-signature.activity.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/workflow-activities-definition.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/activities/entiy.create.activity.js","../tmp-esm2022/workflow-management/lib/features/workflow-plugin/workflow.plugin.js","../tmp-esm2022/workflow-management/lib/features/workflow-plugin/workflow-plugin.module.js","../tmp-esm2022/workflow-management/lib/features/engine/category.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/workflows/workflow-category.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/workflows/workflow-definition.provider.js","../tmp-esm2022/workflow-management/lib/manifest.js","../tmp-esm2022/workflow-management/lib/permission.keys.js","../tmp-esm2022/workflow-management/lib/permission-definition.provider.js","../tmp-esm2022/workflow-management/lib/features/task-provider/generic-workflow-task.provider.js","../tmp-esm2022/workflow-management/lib/features/engine/provider.task.js","../tmp-esm2022/workflow-management/lib/workflow-management.module.js","../tmp-esm2022/workflow-management/lib/entities/index.js","../tmp-esm2022/workflow-management/lib/features/engine/studio/components/activity-categories-tree/activity-categories-tree.component.js","../tmp-esm2022/workflow-management/lib/features/engine/studio/workflow-studio.component.js","../tmp-esm2022/workflow-management/acorex-modules-workflow-management.js"],"sourcesContent":["const config = {\n i18n: 'workflow-management',\n module: 'WorkflowManagement',\n};\nexport const RootConfig = {\n config,\n module: {\n route: 'workflow-management',\n name: config.module,\n title: '@workflow-management:module.title',\n icon: 'fa-light fa-diagram-project',\n },\n entities: {\n workflowDefinition: {\n name: 'WorkflowDefinition',\n fullName: `${config.module}.WorkflowDefinition`,\n title: '@workflow-management:workflow-definitions.entities.workflow-definition.title',\n titlePlural: '@workflow-management:workflow-definitions.entities.workflow-definition.plural',\n icon: 'fa-light fa-diagram-project',\n },\n workflowInstance: {\n name: 'WorkflowInstance',\n fullName: `${config.module}.WorkflowInstance`,\n title: '@workflow-management:workflow-instances.entities.workflow-instance.title',\n titlePlural: '@workflow-management:workflow-instances.entities.workflow-instance.plural',\n icon: 'fa-light fa-play-circle',\n },\n activityDefinition: {\n name: 'ActivityDefinition',\n fullName: `${config.module}.ActivityDefinition`,\n title: '@workflow-management:activities.entities.activity-definition.title',\n titlePlural: '@workflow-management:activities.entities.activity-definition.plural',\n icon: 'fa-light fa-puzzle-piece',\n },\n // workflowCategory: {\n // name: 'WorkflowCategory',\n // fullName: `${config.module}.WorkflowCategory`,\n // title: '@workflow-management:workflows.entities.workflow-category.title',\n // titlePlural: '@workflow-management:workflows.entities.workflow-category.plural',\n // icon: 'fa-light fa-folder',\n // },\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2NvbnN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFLHFCQUFxQjtJQUMzQixNQUFNLEVBQUUsb0JBQW9CO0NBQzdCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsTUFBTTtJQUNOLE1BQU0sRUFBRTtRQUNOLEtBQUssRUFBRSxxQkFBcUI7UUFDNUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ25CLEtBQUssRUFBRSxtQ0FBbUM7UUFDMUMsSUFBSSxFQUFFLDZCQUE2QjtLQUNwQztJQUNELFFBQVEsRUFBRTtRQUNSLGtCQUFrQixFQUFFO1lBQ2xCLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0scUJBQXFCO1lBQy9DLEtBQUssRUFBRSw4RUFBOEU7WUFDckYsV0FBVyxFQUFFLCtFQUErRTtZQUM1RixJQUFJLEVBQUUsNkJBQTZCO1NBQ3BDO1FBQ0QsZ0JBQWdCLEVBQUU7WUFDaEIsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxtQkFBbUI7WUFDN0MsS0FBSyxFQUFFLDBFQUEwRTtZQUNqRixXQUFXLEVBQUUsMkVBQTJFO1lBQ3hGLElBQUksRUFBRSx5QkFBeUI7U0FDaEM7UUFDRCxrQkFBa0IsRUFBRTtZQUNsQixJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQjtZQUMvQyxLQUFLLEVBQUUsb0VBQW9FO1lBQzNFLFdBQVcsRUFBRSxxRUFBcUU7WUFDbEYsSUFBSSxFQUFFLDBCQUEwQjtTQUNqQztRQUNELHNCQUFzQjtRQUN0Qiw4QkFBOEI7UUFDOUIsbURBQW1EO1FBQ25ELDhFQUE4RTtRQUM5RSxxRkFBcUY7UUFDckYsZ0NBQWdDO1FBQ2hDLEtBQUs7S0FDTjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjb25maWcgPSB7XG4gIGkxOG46ICd3b3JrZmxvdy1tYW5hZ2VtZW50JyxcbiAgbW9kdWxlOiAnV29ya2Zsb3dNYW5hZ2VtZW50Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBSb290Q29uZmlnID0ge1xuICBjb25maWcsXG4gIG1vZHVsZToge1xuICAgIHJvdXRlOiAnd29ya2Zsb3ctbWFuYWdlbWVudCcsXG4gICAgbmFtZTogY29uZmlnLm1vZHVsZSxcbiAgICB0aXRsZTogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50Om1vZHVsZS50aXRsZScsXG4gICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdCcsXG4gIH0sXG4gIGVudGl0aWVzOiB7XG4gICAgd29ya2Zsb3dEZWZpbml0aW9uOiB7XG4gICAgICBuYW1lOiAnV29ya2Zsb3dEZWZpbml0aW9uJyxcbiAgICAgIGZ1bGxOYW1lOiBgJHtjb25maWcubW9kdWxlfS5Xb3JrZmxvd0RlZmluaXRpb25gLFxuICAgICAgdGl0bGU6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1kZWZpbml0aW9ucy5lbnRpdGllcy53b3JrZmxvdy1kZWZpbml0aW9uLnRpdGxlJyxcbiAgICAgIHRpdGxlUGx1cmFsOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctZGVmaW5pdGlvbnMuZW50aXRpZXMud29ya2Zsb3ctZGVmaW5pdGlvbi5wbHVyYWwnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdCcsXG4gICAgfSxcbiAgICB3b3JrZmxvd0luc3RhbmNlOiB7XG4gICAgICBuYW1lOiAnV29ya2Zsb3dJbnN0YW5jZScsXG4gICAgICBmdWxsTmFtZTogYCR7Y29uZmlnLm1vZHVsZX0uV29ya2Zsb3dJbnN0YW5jZWAsXG4gICAgICB0aXRsZTogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LWluc3RhbmNlcy5lbnRpdGllcy53b3JrZmxvdy1pbnN0YW5jZS50aXRsZScsXG4gICAgICB0aXRsZVBsdXJhbDogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LWluc3RhbmNlcy5lbnRpdGllcy53b3JrZmxvdy1pbnN0YW5jZS5wbHVyYWwnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXBsYXktY2lyY2xlJyxcbiAgICB9LFxuICAgIGFjdGl2aXR5RGVmaW5pdGlvbjoge1xuICAgICAgbmFtZTogJ0FjdGl2aXR5RGVmaW5pdGlvbicsXG4gICAgICBmdWxsTmFtZTogYCR7Y29uZmlnLm1vZHVsZX0uQWN0aXZpdHlEZWZpbml0aW9uYCxcbiAgICAgIHRpdGxlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6YWN0aXZpdGllcy5lbnRpdGllcy5hY3Rpdml0eS1kZWZpbml0aW9uLnRpdGxlJyxcbiAgICAgIHRpdGxlUGx1cmFsOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6YWN0aXZpdGllcy5lbnRpdGllcy5hY3Rpdml0eS1kZWZpbml0aW9uLnBsdXJhbCcsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcHV6emxlLXBpZWNlJyxcbiAgICB9LFxuICAgIC8vIHdvcmtmbG93Q2F0ZWdvcnk6IHtcbiAgICAvLyAgIG5hbWU6ICdXb3JrZmxvd0NhdGVnb3J5JyxcbiAgICAvLyAgIGZ1bGxOYW1lOiBgJHtjb25maWcubW9kdWxlfS5Xb3JrZmxvd0NhdGVnb3J5YCxcbiAgICAvLyAgIHRpdGxlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3dzLmVudGl0aWVzLndvcmtmbG93LWNhdGVnb3J5LnRpdGxlJyxcbiAgICAvLyAgIHRpdGxlUGx1cmFsOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3dzLmVudGl0aWVzLndvcmtmbG93LWNhdGVnb3J5LnBsdXJhbCcsXG4gICAgLy8gICBpY29uOiAnZmEtbGlnaHQgZmEtZm9sZGVyJyxcbiAgICAvLyB9LFxuICB9LFxufTtcbiJdfQ==","import { Injectable } from '@angular/core';\nimport { RootConfig } from './const';\nimport * as i0 from \"@angular/core\";\nexport class AXMWorkflowManagementModuleEntityProvider {\n preload() {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity) => ({\n module: module,\n entity: entity.name,\n }));\n }\n async get(moduleName, entityName) {\n if (moduleName === RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.workflowDefinition.name:\n return (await import('./entities/workflow-definition/workflow-definition.entity')).factory();\n case RootConfig.entities.workflowInstance.name:\n return (await import('./entities/workflow-instance/workflow-instance.entity')).factory();\n case RootConfig.entities.activityDefinition.name:\n return (await import('./entities/activity-definition/activity-definition.entity')).factory();\n }\n }\n return null;\n }\n async list() {\n const m = RootConfig.module.name;\n return Promise.resolve(Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m })));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModuleEntityProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModuleEntityProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModuleEntityProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9lbnRpdHkucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUdyQyxNQUFNLE9BQU8seUNBQXlDO0lBQzdDLE9BQU87UUFDWixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUUsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUk7U0FDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFrQixFQUFFLFVBQWtCO1FBQzlDLElBQUksVUFBVSxLQUFLLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUMsUUFBUSxVQUFVLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUk7b0JBQzlDLE9BQU8sQ0FBQyxNQUFNLE1BQU0sQ0FBQywyREFBMkQsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQy9GLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJO29CQUM1QyxPQUFPLENBQUMsTUFBTSxNQUFNLENBQUMsdURBQXVELENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMzRixLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSTtvQkFDOUMsT0FBTyxDQUFDLE1BQU0sTUFBTSxDQUFDLDJEQUEyRCxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqRyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDakMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM3RSxDQUFDO0lBQ0osQ0FBQzsrR0E1QlUseUNBQXlDO21IQUF6Qyx5Q0FBeUM7OzRGQUF6Qyx5Q0FBeUM7a0JBRHJELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBFbnRpdHlEZWZpbml0aW9uTG9hZGVyLCBBWFBFbnRpdHlQcmVsb2FkRW50aXR5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuL2NvbnN0JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTVdvcmtmbG93TWFuYWdlbWVudE1vZHVsZUVudGl0eVByb3ZpZGVyIGltcGxlbWVudHMgQVhQRW50aXR5RGVmaW5pdGlvbkxvYWRlciB7XG4gIHB1YmxpYyBwcmVsb2FkKCk6IEFYUEVudGl0eVByZWxvYWRFbnRpdHlbXSB7XG4gICAgY29uc3QgbW9kdWxlID0gUm9vdENvbmZpZy5tb2R1bGUubmFtZTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKFJvb3RDb25maWcuZW50aXRpZXMpKS5tYXAoKGVudGl0eTogYW55KSA9PiAoe1xuICAgICAgbW9kdWxlOiBtb2R1bGUsXG4gICAgICBlbnRpdHk6IGVudGl0eS5uYW1lLFxuICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIGdldChtb2R1bGVOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQRW50aXR5IHwgbnVsbD4ge1xuICAgIGlmIChtb2R1bGVOYW1lID09PSBSb290Q29uZmlnLm1vZHVsZS5uYW1lKSB7XG4gICAgICBzd2l0Y2ggKGVudGl0eU5hbWUpIHtcbiAgICAgICAgY2FzZSBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93RGVmaW5pdGlvbi5uYW1lOlxuICAgICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KCcuL2VudGl0aWVzL3dvcmtmbG93LWRlZmluaXRpb24vd29ya2Zsb3ctZGVmaW5pdGlvbi5lbnRpdHknKSkuZmFjdG9yeSgpO1xuICAgICAgICBjYXNlIFJvb3RDb25maWcuZW50aXRpZXMud29ya2Zsb3dJbnN0YW5jZS5uYW1lOlxuICAgICAgICAgIHJldHVybiAoYXdhaXQgaW1wb3J0KCcuL2VudGl0aWVzL3dvcmtmbG93LWluc3RhbmNlL3dvcmtmbG93LWluc3RhbmNlLmVudGl0eScpKS5mYWN0b3J5KCk7XG4gICAgICAgIGNhc2UgUm9vdENvbmZpZy5lbnRpdGllcy5hY3Rpdml0eURlZmluaXRpb24ubmFtZTpcbiAgICAgICAgICByZXR1cm4gKGF3YWl0IGltcG9ydCgnLi9lbnRpdGllcy9hY3Rpdml0eS1kZWZpbml0aW9uL2FjdGl2aXR5LWRlZmluaXRpb24uZW50aXR5JykpLmZhY3RvcnkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IG1vZHVsZTogc3RyaW5nIH1bXT4ge1xuICAgIGNvbnN0IG0gPSBSb290Q29uZmlnLm1vZHVsZS5uYW1lO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICBPYmplY3QudmFsdWVzKFJvb3RDb25maWcuZW50aXRpZXMpLm1hcCgoZSkgPT4gKHsgbmFtZTogZS5uYW1lLCBtb2R1bGU6IG0gfSkpXG4gICAgKTtcbiAgfVxufVxuXG4iXX0=","export const AXPWorkflowManagementMenuKeys = {\n Root: 'workflow-management:menu',\n Workflow: 'workflow-management:workflow',\n WorkflowDefinitions: 'workflow-management:workflow-definitions',\n WorkflowInstances: 'workflow-management:workflow-instances',\n WorkflowStudio: 'workflow-management:workflow-studio',\n Activities: 'workflow-management:activities',\n ActivityDefinitions: 'workflow-management:activity-definitions',\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5rZXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9tZW51LmtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFDM0MsSUFBSSxFQUFFLDBCQUEwQjtJQUNoQyxRQUFRLEVBQUUsOEJBQThCO0lBQ3hDLG1CQUFtQixFQUFFLDBDQUEwQztJQUMvRCxpQkFBaUIsRUFBRSx3Q0FBd0M7SUFDM0QsY0FBYyxFQUFFLHFDQUFxQztJQUNyRCxVQUFVLEVBQUUsZ0NBQWdDO0lBQzVDLG1CQUFtQixFQUFFLDBDQUEwQztDQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFYUFdvcmtmbG93TWFuYWdlbWVudE1lbnVLZXlzID0ge1xuICBSb290OiAnd29ya2Zsb3ctbWFuYWdlbWVudDptZW51JyxcbiAgV29ya2Zsb3c6ICd3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93JyxcbiAgV29ya2Zsb3dEZWZpbml0aW9uczogJ3dvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctZGVmaW5pdGlvbnMnLFxuICBXb3JrZmxvd0luc3RhbmNlczogJ3dvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctaW5zdGFuY2VzJyxcbiAgV29ya2Zsb3dTdHVkaW86ICd3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpbycsXG4gIEFjdGl2aXRpZXM6ICd3b3JrZmxvdy1tYW5hZ2VtZW50OmFjdGl2aXRpZXMnLFxuICBBY3Rpdml0eURlZmluaXRpb25zOiAnd29ya2Zsb3ctbWFuYWdlbWVudDphY3Rpdml0eS1kZWZpbml0aW9ucycsXG59IGFzIGNvbnN0O1xuXG4iXX0=","import { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from './const';\nimport { AXPWorkflowManagementMenuKeys } from './menu.keys';\nexport class AXMMenuProvider {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.sessionService = inject(AXPSessionService);\n }\n async provide(context) {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n const module = RootConfig.module;\n const appName = this.sessionService.application?.name ?? module.name;\n const workflowsMenu = context.find(AXPCommonMenuKeys.Workflows);\n if (!workflowsMenu.exists) {\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n name: AXPCommonMenuKeys.Workflows,\n priority: 12,\n text: '@general:menus.workflows.title',\n icon: module.icon,\n type: 'menu',\n children: [],\n },\n ]);\n }\n context.find(AXPCommonMenuKeys.Workflows).addItems([\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowDefinitions,\n text: '@workflow-management:workflow-definitions.menus.workflow-definitions.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.workflowDefinition.name),\n priority: 1,\n icon: RootConfig.entities.workflowDefinition.icon,\n policy: {\n features: [module.name],\n },\n },\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowInstances,\n text: '@workflow-management:workflow-instances.menus.workflow-instances.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.workflowInstance.name),\n priority: 2,\n icon: RootConfig.entities.workflowInstance.icon,\n policy: {\n features: [module.name],\n },\n },\n {\n name: AXPWorkflowManagementMenuKeys.WorkflowStudio,\n text: '@workflow-management:workflow-studio.menus.workflow-studio.title',\n path: `/${appName}/workflow-management/studio`,\n priority: 3,\n icon: 'fa-light fa-wrench',\n policy: {\n features: [module.name],\n },\n },\n {\n name: AXPWorkflowManagementMenuKeys.ActivityDefinitions,\n text: '@workflow-management:activities.menus.activity.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.activityDefinition.name),\n priority: 4,\n icon: RootConfig.entities.activityDefinition.icon,\n policy: {\n features: [module.name],\n },\n },\n ]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvbWVudS5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUQsTUFBTSxPQUFPLGVBQWU7SUFBNUI7UUFDVSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFvRXJELENBQUM7SUFsRUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUErQjtRQUMzQyxNQUFNLFlBQVksR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFckUsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUN0RDtvQkFDRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsU0FBUztvQkFDakMsUUFBUSxFQUFFLEVBQUU7b0JBQ1osSUFBSSxFQUFFLGdDQUFnQztvQkFDdEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO29CQUNqQixJQUFJLEVBQUUsTUFBTTtvQkFDWixRQUFRLEVBQUUsRUFBRTtpQkFDYjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNqRDtnQkFDRSxJQUFJLEVBQUUsNkJBQTZCLENBQUMsbUJBQW1CO2dCQUN2RCxJQUFJLEVBQUUsNEVBQTRFO2dCQUNsRixJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztnQkFDN0YsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSTtnQkFDakQsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7aUJBQ3hCO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsNkJBQTZCLENBQUMsaUJBQWlCO2dCQUNyRCxJQUFJLEVBQUUsd0VBQXdFO2dCQUM5RSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDM0YsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSTtnQkFDL0MsTUFBTSxFQUFFO29CQUNOLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7aUJBQ3hCO2FBQ0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsNkJBQTZCLENBQUMsY0FBYztnQkFDbEQsSUFBSSxFQUFFLGtFQUFrRTtnQkFDeEUsSUFBSSxFQUFFLElBQUksT0FBTyw2QkFBNkI7Z0JBQzlDLFFBQVEsRUFBRSxDQUFDO2dCQUNYLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2lCQUN4QjthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDZCQUE2QixDQUFDLG1CQUFtQjtnQkFDdkQsSUFBSSxFQUFFLHNEQUFzRDtnQkFDNUQsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7Z0JBQzdGLFFBQVEsRUFBRSxDQUFDO2dCQUNYLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUk7Z0JBQ2pELE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2lCQUN4QjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQQ29tbW9uTWVudUtleXMgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvY29tbW9uJztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUE1lbnVQcm92aWRlciwgQVhQTWVudVByb3ZpZGVyQ29udGV4dCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dNYW5hZ2VtZW50TWVudUtleXMgfSBmcm9tICcuL21lbnUua2V5cyc7XG5cbmV4cG9ydCBjbGFzcyBBWE1NZW51UHJvdmlkZXIgaW1wbGVtZW50cyBBWFBNZW51UHJvdmlkZXIge1xuICBwcml2YXRlIGVudGl0eVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U2VydmljZSk7XG4gIHByaXZhdGUgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuXG4gIGFzeW5jIHByb3ZpZGUoY29udGV4dDogQVhQTWVudVByb3ZpZGVyQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlzQXV0aG9yaXplZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuc2Vzc2lvblNlcnZpY2UuaXNBdXRob3JpemVkJCk7XG4gICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGUgPSBSb290Q29uZmlnLm1vZHVsZTtcbiAgICBjb25zdCBhcHBOYW1lID0gdGhpcy5zZXNzaW9uU2VydmljZS5hcHBsaWNhdGlvbj8ubmFtZSA/PyBtb2R1bGUubmFtZTtcblxuICAgIGNvbnN0IHdvcmtmbG93c01lbnUgPSBjb250ZXh0LmZpbmQoQVhQQ29tbW9uTWVudUtleXMuV29ya2Zsb3dzKTtcbiAgICBpZiAoIXdvcmtmbG93c01lbnUuZXhpc3RzKSB7XG4gICAgICBjb250ZXh0LmZpbmQoQVhQQ29tbW9uTWVudUtleXMuQWRtaW5pc3RyYXRpb24pLmFkZEl0ZW1zKFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IEFYUENvbW1vbk1lbnVLZXlzLldvcmtmbG93cyxcbiAgICAgICAgICBwcmlvcml0eTogMTIsXG4gICAgICAgICAgdGV4dDogJ0BnZW5lcmFsOm1lbnVzLndvcmtmbG93cy50aXRsZScsXG4gICAgICAgICAgaWNvbjogbW9kdWxlLmljb24sXG4gICAgICAgICAgdHlwZTogJ21lbnUnLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmluZChBWFBDb21tb25NZW51S2V5cy5Xb3JrZmxvd3MpLmFkZEl0ZW1zKFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogQVhQV29ya2Zsb3dNYW5hZ2VtZW50TWVudUtleXMuV29ya2Zsb3dEZWZpbml0aW9ucyxcbiAgICAgICAgdGV4dDogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LWRlZmluaXRpb25zLm1lbnVzLndvcmtmbG93LWRlZmluaXRpb25zLnRpdGxlJyxcbiAgICAgICAgcGF0aDogdGhpcy5lbnRpdHlTZXJ2aWNlLmNyZWF0ZVBhdGgobW9kdWxlLm5hbWUsIFJvb3RDb25maWcuZW50aXRpZXMud29ya2Zsb3dEZWZpbml0aW9uLm5hbWUpLFxuICAgICAgICBwcmlvcml0eTogMSxcbiAgICAgICAgaWNvbjogUm9vdENvbmZpZy5lbnRpdGllcy53b3JrZmxvd0RlZmluaXRpb24uaWNvbixcbiAgICAgICAgcG9saWN5OiB7XG4gICAgICAgICAgZmVhdHVyZXM6IFttb2R1bGUubmFtZV0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBBWFBXb3JrZmxvd01hbmFnZW1lbnRNZW51S2V5cy5Xb3JrZmxvd0luc3RhbmNlcyxcbiAgICAgICAgdGV4dDogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LWluc3RhbmNlcy5tZW51cy53b3JrZmxvdy1pbnN0YW5jZXMudGl0bGUnLFxuICAgICAgICBwYXRoOiB0aGlzLmVudGl0eVNlcnZpY2UuY3JlYXRlUGF0aChtb2R1bGUubmFtZSwgUm9vdENvbmZpZy5lbnRpdGllcy53b3JrZmxvd0luc3RhbmNlLm5hbWUpLFxuICAgICAgICBwcmlvcml0eTogMixcbiAgICAgICAgaWNvbjogUm9vdENvbmZpZy5lbnRpdGllcy53b3JrZmxvd0luc3RhbmNlLmljb24sXG4gICAgICAgIHBvbGljeToge1xuICAgICAgICAgIGZlYXR1cmVzOiBbbW9kdWxlLm5hbWVdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogQVhQV29ya2Zsb3dNYW5hZ2VtZW50TWVudUtleXMuV29ya2Zsb3dTdHVkaW8sXG4gICAgICAgIHRleHQ6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8ubWVudXMud29ya2Zsb3ctc3R1ZGlvLnRpdGxlJyxcbiAgICAgICAgcGF0aDogYC8ke2FwcE5hbWV9L3dvcmtmbG93LW1hbmFnZW1lbnQvc3R1ZGlvYCxcbiAgICAgICAgcHJpb3JpdHk6IDMsXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS13cmVuY2gnLFxuICAgICAgICBwb2xpY3k6IHtcbiAgICAgICAgICBmZWF0dXJlczogW21vZHVsZS5uYW1lXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IEFYUFdvcmtmbG93TWFuYWdlbWVudE1lbnVLZXlzLkFjdGl2aXR5RGVmaW5pdGlvbnMsXG4gICAgICAgIHRleHQ6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDphY3Rpdml0aWVzLm1lbnVzLmFjdGl2aXR5LnRpdGxlJyxcbiAgICAgICAgcGF0aDogdGhpcy5lbnRpdHlTZXJ2aWNlLmNyZWF0ZVBhdGgobW9kdWxlLm5hbWUsIFJvb3RDb25maWcuZW50aXRpZXMuYWN0aXZpdHlEZWZpbml0aW9uLm5hbWUpLFxuICAgICAgICBwcmlvcml0eTogNCxcbiAgICAgICAgaWNvbjogUm9vdENvbmZpZy5lbnRpdGllcy5hY3Rpdml0eURlZmluaXRpb24uaWNvbixcbiAgICAgICAgcG9saWN5OiB7XG4gICAgICAgICAgZmVhdHVyZXM6IFttb2R1bGUubmFtZV0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityStorageService } from '@acorex/platform/layout/entity';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ExecuteQuery Activity (Backend)\n *\n * Executes a query operation.\n * This is a mock implementation that simulates common queries.\n *\n * Execution Mode: backend\n * Activity Type: workflow-activity:execute-query\n *\n * Outcomes:\n * - Done: Query executed successfully\n * - Valid: Data is valid (for validation queries)\n * - Exists: Data exists (for existence checks)\n * - NotFound: Data not found\n * - Failed: Query execution failed\n */\nexport class ExecuteQueryActivity {\n constructor() {\n //#region ---- Services ----\n this.storageService = inject(AXPEntityStorageService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n console.log(`[ExecuteQueryActivity] Executing query '${input.queryKey}' with parameters:`, input.parameters);\n // Route to appropriate query handler based on queryKey\n const result = await this.routeQuery(input.queryKey, input.parameters || {});\n return {\n success: true,\n data: result,\n };\n }\n catch (error) {\n console.error(`[ExecuteQueryActivity] Query '${input.queryKey}' failed:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Unknown error',\n },\n data: {\n output: {\n data: null,\n success: false,\n error: error.message || 'Unknown error',\n },\n outcomes: {\n Failed: true,\n },\n },\n };\n }\n }\n //#endregion\n //#region ---- Query Routing ----\n /**\n * Routes query to appropriate handler based on queryKey.\n */\n async routeQuery(queryKey, parameters) {\n switch (queryKey) {\n case 'User:CheckEmailExists':\n return await this.checkEmailExists(parameters);\n case 'Data:Validate':\n return await this.validateData(parameters);\n default:\n // Mock: return empty result for unknown queries\n console.warn(`[ExecuteQueryActivity] Unknown query key: ${queryKey}`);\n return {\n output: {\n data: null,\n success: true,\n },\n outcomes: {\n Done: true,\n },\n };\n }\n }\n //#endregion\n //#region ---- Query Handlers ----\n /**\n * Checks if email already exists in database.\n */\n async checkEmailExists(parameters) {\n const email = parameters['email'] || parameters['userEmail'];\n // Mock implementation: randomly decide if email exists\n // In production, check against real database\n const exists = Math.random() > 0.8; // 20% chance email exists\n console.log(`[ExecuteQueryActivity] Checking email '${email}': ${exists ? 'EXISTS' : 'AVAILABLE'}`);\n const outcome = exists ? 'Exists' : 'Valid';\n return {\n output: {\n data: {\n email,\n exists,\n available: !exists,\n },\n success: true,\n },\n outcomes: {\n [outcome]: true,\n Done: true,\n },\n };\n }\n /**\n * Validates data structure and content.\n */\n async validateData(parameters) {\n const data = parameters['data'];\n // Mock validation: check if data exists and has content\n const isValid = data && Object.keys(data).length > 0;\n console.log(`[ExecuteQueryActivity] Validating data: ${isValid ? 'VALID' : 'INVALID'}`);\n const outcome = isValid ? 'Valid' : 'Invalid';\n return {\n output: {\n data: {\n valid: isValid,\n errors: isValid ? [] : ['Data is empty or invalid'],\n },\n success: true,\n },\n outcomes: {\n [outcome]: true,\n Done: true,\n },\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteQueryActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteQueryActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteQueryActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1xdWVyeS5hY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMvZXhlY3V0ZS1xdWVyeS5hY3Rpdml0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUF1Q3pFLFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBRGpDO1FBR0UsZ0NBQWdDO1FBRWYsbUJBQWMsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQTZJbkU7SUEzSUMsWUFBWTtJQUVaLGlEQUFpRDtJQUVqRCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQXdCO1FBRXhCLElBQUksQ0FBQztZQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsMkNBQTJDLEtBQUssQ0FBQyxRQUFRLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUU3Ryx1REFBdUQ7WUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUU3RSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxNQUFNO2FBQ2IsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEtBQUssQ0FBQyxRQUFRLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVqRixPQUFPO2dCQUNM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LE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO2lCQUNwRDtnQkFDRCxPQUFPLEVBQUUsSUFBSTthQUNkO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSTtnQkFDZixJQUFJLEVBQUUsSUFBSTthQUNYO1NBQ0YsQ0FBQztJQUNKLENBQUM7K0dBOUlVLG9CQUFvQjttSEFBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEVudGl0eVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAgIC0tLS1cblxuLyoqXG4gKiBJbnB1dCBmb3IgRXhlY3V0ZVF1ZXJ5IGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVRdWVyeUlucHV0IHtcbiAgLyoqXG4gICAqIFF1ZXJ5IGtleSB0byBleGVjdXRlIChlLmcuLCBcIlVzZXI6Q2hlY2tFbWFpbEV4aXN0c1wiKVxuICAgKi9cbiAgcXVlcnlLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogUXVlcnkgcGFyYW1ldGVyc1xuICAgKi9cbiAgcGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogT3V0cHV0IGZvciBFeGVjdXRlUXVlcnkgYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZVF1ZXJ5T3V0cHV0IHtcbiAgLyoqXG4gICAqIFF1ZXJ5IHJlc3VsdCBkYXRhXG4gICAqL1xuICBkYXRhOiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcXVlcnkgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAqL1xuICBzdWNjZXNzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFcnJvciBtZXNzYWdlIGlmIHF1ZXJ5IGZhaWxlZFxuICAgKi9cbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIEV4ZWN1dGVRdWVyeSBBY3Rpdml0eSAoQmFja2VuZClcbiAqIFxuICogRXhlY3V0ZXMgYSBxdWVyeSBvcGVyYXRpb24uXG4gKiBUaGlzIGlzIGEgbW9jayBpbXBsZW1lbnRhdGlvbiB0aGF0IHNpbXVsYXRlcyBjb21tb24gcXVlcmllcy5cbiAqIFxuICogRXhlY3V0aW9uIE1vZGU6IGJhY2tlbmRcbiAqIEFjdGl2aXR5IFR5cGU6IHdvcmtmbG93LWFjdGl2aXR5OmV4ZWN1dGUtcXVlcnlcbiAqIFxuICogT3V0Y29tZXM6XG4gKiAtIERvbmU6IFF1ZXJ5IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICogLSBWYWxpZDogRGF0YSBpcyB2YWxpZCAoZm9yIHZhbGlkYXRpb24gcXVlcmllcylcbiAqIC0gRXhpc3RzOiBEYXRhIGV4aXN0cyAoZm9yIGV4aXN0ZW5jZSBjaGVja3MpXG4gKiAtIE5vdEZvdW5kOiBEYXRhIG5vdCBmb3VuZFxuICogLSBGYWlsZWQ6IFF1ZXJ5IGV4ZWN1dGlvbiBmYWlsZWRcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEV4ZWN1dGVRdWVyeUFjdGl2aXR5XG4gIGltcGxlbWVudHMgQVhQQ29tbWFuZDxFeGVjdXRlUXVlcnlJbnB1dCwgeyBvdXRwdXQ6IEV4ZWN1dGVRdWVyeU91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICAgLS0tLVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U3RvcmFnZVNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQVhQQ29tbWFuZCBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBFeGVjdXRlUXVlcnlJbnB1dCxcbiAgKTogUHJvbWlzZTxBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdDx7IG91dHB1dDogRXhlY3V0ZVF1ZXJ5T3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9Pj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0V4ZWN1dGVRdWVyeUFjdGl2aXR5XSBFeGVjdXRpbmcgcXVlcnkgJyR7aW5wdXQucXVlcnlLZXl9JyB3aXRoIHBhcmFtZXRlcnM6YCwgaW5wdXQucGFyYW1ldGVycyk7XG5cbiAgICAgIC8vIFJvdXRlIHRvIGFwcHJvcHJpYXRlIHF1ZXJ5IGhhbmRsZXIgYmFzZWQgb24gcXVlcnlLZXlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucm91dGVRdWVyeShpbnB1dC5xdWVyeUtleSwgaW5wdXQucGFyYW1ldGVycyB8fCB7fSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW0V4ZWN1dGVRdWVyeUFjdGl2aXR5XSBRdWVyeSAnJHtpbnB1dC5xdWVyeUtleX0nIGZhaWxlZDpgLCBlcnJvcik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgdGV4dDogZXJyb3IubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICBGYWlsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBRdWVyeSBSb3V0aW5nICAgLS0tLVxuXG4gIC8qKlxuICAgKiBSb3V0ZXMgcXVlcnkgdG8gYXBwcm9wcmlhdGUgaGFuZGxlciBiYXNlZCBvbiBxdWVyeUtleS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcm91dGVRdWVyeShcbiAgICBxdWVyeUtleTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogUHJvbWlzZTx7IG91dHB1dDogRXhlY3V0ZVF1ZXJ5T3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG4gICAgc3dpdGNoIChxdWVyeUtleSkge1xuICAgICAgY2FzZSAnVXNlcjpDaGVja0VtYWlsRXhpc3RzJzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tFbWFpbEV4aXN0cyhwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSAnRGF0YTpWYWxpZGF0ZSc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZhbGlkYXRlRGF0YShwYXJhbWV0ZXJzKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gTW9jazogcmV0dXJuIGVtcHR5IHJlc3VsdCBmb3IgdW5rbm93biBxdWVyaWVzXG4gICAgICAgIGNvbnNvbGUud2FybihgW0V4ZWN1dGVRdWVyeUFjdGl2aXR5XSBVbmtub3duIHF1ZXJ5IGtleTogJHtxdWVyeUtleX1gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIERvbmU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFF1ZXJ5IEhhbmRsZXJzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZW1haWwgYWxyZWFkeSBleGlzdHMgaW4gZGF0YWJhc2UuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNoZWNrRW1haWxFeGlzdHMoXG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPHsgb3V0cHV0OiBFeGVjdXRlUXVlcnlPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+IHtcbiAgICBjb25zdCBlbWFpbCA9IHBhcmFtZXRlcnNbJ2VtYWlsJ10gfHwgcGFyYW1ldGVyc1sndXNlckVtYWlsJ107XG5cbiAgICAvLyBNb2NrIGltcGxlbWVudGF0aW9uOiByYW5kb21seSBkZWNpZGUgaWYgZW1haWwgZXhpc3RzXG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgY2hlY2sgYWdhaW5zdCByZWFsIGRhdGFiYXNlXG4gICAgY29uc3QgZXhpc3RzID0gTWF0aC5yYW5kb20oKSA+IDAuODsgLy8gMjAlIGNoYW5jZSBlbWFpbCBleGlzdHNcblxuICAgIGNvbnNvbGUubG9nKGBbRXhlY3V0ZVF1ZXJ5QWN0aXZpdHldIENoZWNraW5nIGVtYWlsICcke2VtYWlsfSc6ICR7ZXhpc3RzID8gJ0VYSVNUUycgOiAnQVZBSUxBQkxFJ31gKTtcblxuICAgIGNvbnN0IG91dGNvbWUgPSBleGlzdHMgPyAnRXhpc3RzJyA6ICdWYWxpZCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3V0cHV0OiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBleGlzdHMsXG4gICAgICAgICAgYXZhaWxhYmxlOiAhZXhpc3RzLFxuICAgICAgICB9LFxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgIFtvdXRjb21lXTogdHJ1ZSxcbiAgICAgICAgRG9uZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZGF0YSBzdHJ1Y3R1cmUgYW5kIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlRGF0YShcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFByb21pc2U8eyBvdXRwdXQ6IEV4ZWN1dGVRdWVyeU91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAgIGNvbnN0IGRhdGEgPSBwYXJhbWV0ZXJzWydkYXRhJ107XG5cbiAgICAvLyBNb2NrIHZhbGlkYXRpb246IGNoZWNrIGlmIGRhdGEgZXhpc3RzIGFuZCBoYXMgY29udGVudFxuICAgIGNvbnN0IGlzVmFsaWQgPSBkYXRhICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zb2xlLmxvZyhgW0V4ZWN1dGVRdWVyeUFjdGl2aXR5XSBWYWxpZGF0aW5nIGRhdGE6ICR7aXNWYWxpZCA/ICdWQUxJRCcgOiAnSU5WQUxJRCd9YCk7XG5cbiAgICBjb25zdCBvdXRjb21lID0gaXNWYWxpZCA/ICdWYWxpZCcgOiAnSW52YWxpZCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3V0cHV0OiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB2YWxpZDogaXNWYWxpZCxcbiAgICAgICAgICBlcnJvcnM6IGlzVmFsaWQgPyBbXSA6IFsnRGF0YSBpcyBlbXB0eSBvciBpbnZhbGlkJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICB9LFxuICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgW291dGNvbWVdOiB0cnVlLFxuICAgICAgICBEb25lOiB0cnVlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG5cblxuIl19","import { Injectable } from '@angular/core';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ExecuteCommand Activity (Backend)\n *\n * Executes a command operation.\n * This is a mock implementation that simulates common commands.\n *\n * Execution Mode: backend\n * Activity Type: workflow-activity:execute-command\n *\n * Outcomes:\n * - Done: Command executed successfully\n * - Failed: Command execution failed\n */\nexport class ExecuteCommandActivity {\n async execute(input) {\n try {\n console.log(`[ExecuteCommandActivity] Executing command '${input.commandKey}' with input:`, input.input);\n // Route to appropriate command handler based on commandKey\n const result = await this.routeCommand(input.commandKey, input.input || {});\n return {\n success: true,\n data: result,\n };\n }\n catch (error) {\n console.error(`[ExecuteCommandActivity] Command '${input.commandKey}' failed:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Unknown error',\n },\n data: {\n output: {\n result: null,\n success: false,\n error: error.message || 'Unknown error',\n },\n outcomes: {\n Failed: true,\n },\n },\n };\n }\n }\n //#endregion\n //#region ---- Command Routing ----\n /**\n * Routes command to appropriate handler based on commandKey.\n */\n async routeCommand(commandKey, input) {\n switch (commandKey) {\n case 'User:Create':\n return await this.createUser(input);\n case 'Data:Process':\n return await this.processData(input);\n default:\n // Mock: return success for unknown commands\n console.warn(`[ExecuteCommandActivity] Unknown command key: ${commandKey}`);\n return {\n output: {\n result: { success: true },\n success: true,\n },\n outcomes: {\n Done: true,\n },\n };\n }\n }\n //#endregion\n //#region ---- Command Handlers ----\n /**\n * Creates a new user in the system.\n */\n async createUser(input) {\n // Extract user data from input\n const email = input['email'] || input['userEmail'];\n const name = input['name'] || input['userName'] || 'New User';\n const role = input['role'] || input['userRole'] || 'User';\n // Create new user object\n const userId = AXPDataGenerator.uuid();\n const newUser = {\n id: userId,\n email,\n name,\n role,\n createdAt: new Date().toISOString(),\n isActive: true,\n };\n console.log(`[ExecuteCommandActivity] Creating user:`, newUser);\n // In production, save to database via EntityStorageService or API\n // For mock, we'll just simulate success\n // await this.storageService.create('User', newUser);\n return {\n output: {\n result: newUser,\n success: true,\n entityId: userId,\n },\n outcomes: {\n Done: true,\n },\n };\n }\n /**\n * Processes data according to business rules.\n */\n async processData(input) {\n const data = input['data'];\n // Mock processing: just add timestamp and processed flag\n const processedData = {\n ...data,\n processed: true,\n processedAt: new Date().toISOString(),\n };\n console.log(`[ExecuteCommandActivity] Processed data:`, processedData);\n return {\n output: {\n result: processedData,\n success: true,\n },\n outcomes: {\n Done: true,\n },\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteCommandActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteCommandActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ExecuteCommandActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1jb21tYW5kLmFjdGl2aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy9leGVjdXRlLWNvbW1hbmQuYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQTJCLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBOENsRixZQUFZO0FBRVo7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQUdqQyxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQTBCO1FBRTFCLElBQUksQ0FBQztZQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsK0NBQStDLEtBQUssQ0FBQyxVQUFVLGVBQWUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekcsMkRBQTJEO1lBQzNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFFNUUsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixJQUFJLEVBQUUsTUFBTTthQUNiLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxLQUFLLENBQUMsVUFBVSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFdkYsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZTtpQkFDdkM7Z0JBQ0QsSUFBSSxFQUFFO29CQUNK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QUUsSUFBSTthQUNYO1NBQ0YsQ0FBQztJQUNKLENBQUM7K0dBN0lVLHNCQUFzQjttSEFBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdCwgQVhQRGF0YUdlbmVyYXRvciB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUEVudGl0eVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAgIC0tLS1cblxuLyoqXG4gKiBJbnB1dCBmb3IgRXhlY3V0ZUNvbW1hbmQgYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZUNvbW1hbmRJbnB1dCB7XG4gIC8qKlxuICAgKiBDb21tYW5kIGtleSB0byBleGVjdXRlIChlLmcuLCBcIlVzZXI6Q3JlYXRlXCIpXG4gICAqL1xuICBjb21tYW5kS2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbW1hbmQgaW5wdXQgZGF0YVxuICAgKi9cbiAgaW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIE91dHB1dCBmb3IgRXhlY3V0ZUNvbW1hbmQgYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZUNvbW1hbmRPdXRwdXQge1xuICAvKipcbiAgICogQ29tbWFuZCByZXN1bHQgZGF0YVxuICAgKi9cbiAgcmVzdWx0OiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHlcbiAgICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVycm9yIG1lc3NhZ2UgaWYgY29tbWFuZCBmYWlsZWRcbiAgICovXG4gIGVycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVkL1VwZGF0ZWQgZW50aXR5IElEIChpZiBhcHBsaWNhYmxlKVxuICAgKi9cbiAgZW50aXR5SWQ/OiBzdHJpbmc7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIEV4ZWN1dGVDb21tYW5kIEFjdGl2aXR5IChCYWNrZW5kKVxuICogXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQgb3BlcmF0aW9uLlxuICogVGhpcyBpcyBhIG1vY2sgaW1wbGVtZW50YXRpb24gdGhhdCBzaW11bGF0ZXMgY29tbW9uIGNvbW1hbmRzLlxuICogXG4gKiBFeGVjdXRpb24gTW9kZTogYmFja2VuZFxuICogQWN0aXZpdHkgVHlwZTogd29ya2Zsb3ctYWN0aXZpdHk6ZXhlY3V0ZS1jb21tYW5kXG4gKiBcbiAqIE91dGNvbWVzOlxuICogLSBEb25lOiBDb21tYW5kIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICogLSBGYWlsZWQ6IENvbW1hbmQgZXhlY3V0aW9uIGZhaWxlZFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRXhlY3V0ZUNvbW1hbmRBY3Rpdml0eVxuICBpbXBsZW1lbnRzIEFYUENvbW1hbmQ8RXhlY3V0ZUNvbW1hbmRJbnB1dCwgeyBvdXRwdXQ6IEV4ZWN1dGVDb21tYW5kT3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG5cbiAgYXN5bmMgZXhlY3V0ZShcbiAgICBpbnB1dDogRXhlY3V0ZUNvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdDx7IG91dHB1dDogRXhlY3V0ZUNvbW1hbmRPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKGBbRXhlY3V0ZUNvbW1hbmRBY3Rpdml0eV0gRXhlY3V0aW5nIGNvbW1hbmQgJyR7aW5wdXQuY29tbWFuZEtleX0nIHdpdGggaW5wdXQ6YCwgaW5wdXQuaW5wdXQpO1xuXG4gICAgICAvLyBSb3V0ZSB0byBhcHByb3ByaWF0ZSBjb21tYW5kIGhhbmRsZXIgYmFzZWQgb24gY29tbWFuZEtleVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yb3V0ZUNvbW1hbmQoaW5wdXQuY29tbWFuZEtleSwgaW5wdXQuaW5wdXQgfHwge30pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtFeGVjdXRlQ29tbWFuZEFjdGl2aXR5XSBDb21tYW5kICcke2lucHV0LmNvbW1hbmRLZXl9JyBmYWlsZWQ6YCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIHRleHQ6IGVycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICByZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICBGYWlsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21tYW5kIFJvdXRpbmcgICAtLS0tXG5cbiAgLyoqXG4gICAqIFJvdXRlcyBjb21tYW5kIHRvIGFwcHJvcHJpYXRlIGhhbmRsZXIgYmFzZWQgb24gY29tbWFuZEtleS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcm91dGVDb21tYW5kKFxuICAgIGNvbW1hbmRLZXk6IHN0cmluZyxcbiAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPHsgb3V0cHV0OiBFeGVjdXRlQ29tbWFuZE91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAgIHN3aXRjaCAoY29tbWFuZEtleSkge1xuICAgICAgY2FzZSAnVXNlcjpDcmVhdGUnOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVVc2VyKGlucHV0KTtcblxuICAgICAgY2FzZSAnRGF0YTpQcm9jZXNzJzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvY2Vzc0RhdGEoaW5wdXQpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBNb2NrOiByZXR1cm4gc3VjY2VzcyBmb3IgdW5rbm93biBjb21tYW5kc1xuICAgICAgICBjb25zb2xlLndhcm4oYFtFeGVjdXRlQ29tbWFuZEFjdGl2aXR5XSBVbmtub3duIGNvbW1hbmQga2V5OiAke2NvbW1hbmRLZXl9YCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICByZXN1bHQ6IHsgc3VjY2VzczogdHJ1ZSB9LFxuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICBEb25lOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21tYW5kIEhhbmRsZXJzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHVzZXIgaW4gdGhlIHN5c3RlbS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlVXNlcihcbiAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPHsgb3V0cHV0OiBFeGVjdXRlQ29tbWFuZE91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAgIC8vIEV4dHJhY3QgdXNlciBkYXRhIGZyb20gaW5wdXRcbiAgICBjb25zdCBlbWFpbCA9IGlucHV0WydlbWFpbCddIHx8IGlucHV0Wyd1c2VyRW1haWwnXTtcbiAgICBjb25zdCBuYW1lID0gaW5wdXRbJ25hbWUnXSB8fCBpbnB1dFsndXNlck5hbWUnXSB8fCAnTmV3IFVzZXInO1xuICAgIGNvbnN0IHJvbGUgPSBpbnB1dFsncm9sZSddIHx8IGlucHV0Wyd1c2VyUm9sZSddIHx8ICdVc2VyJztcblxuICAgIC8vIENyZWF0ZSBuZXcgdXNlciBvYmplY3RcbiAgICBjb25zdCB1c2VySWQgPSBBWFBEYXRhR2VuZXJhdG9yLnV1aWQoKTtcbiAgICBjb25zdCBuZXdVc2VyID0ge1xuICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgIGVtYWlsLFxuICAgICAgbmFtZSxcbiAgICAgIHJvbGUsXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZyhgW0V4ZWN1dGVDb21tYW5kQWN0aXZpdHldIENyZWF0aW5nIHVzZXI6YCwgbmV3VXNlcik7XG5cbiAgICAvLyBJbiBwcm9kdWN0aW9uLCBzYXZlIHRvIGRhdGFiYXNlIHZpYSBFbnRpdHlTdG9yYWdlU2VydmljZSBvciBBUElcbiAgICAvLyBGb3IgbW9jaywgd2UnbGwganVzdCBzaW11bGF0ZSBzdWNjZXNzXG4gICAgLy8gYXdhaXQgdGhpcy5zdG9yYWdlU2VydmljZS5jcmVhdGUoJ1VzZXInLCBuZXdVc2VyKTtcblxuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXQ6IHtcbiAgICAgICAgcmVzdWx0OiBuZXdVc2VyLFxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBlbnRpdHlJZDogdXNlcklkLFxuICAgICAgfSxcbiAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgIERvbmU6IHRydWUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGRhdGEgYWNjb3JkaW5nIHRvIGJ1c2luZXNzIHJ1bGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShcbiAgICBpbnB1dDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPHsgb3V0cHV0OiBFeGVjdXRlQ29tbWFuZE91dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4ge1xuICAgIGNvbnN0IGRhdGEgPSBpbnB1dFsnZGF0YSddO1xuXG4gICAgLy8gTW9jayBwcm9jZXNzaW5nOiBqdXN0IGFkZCB0aW1lc3RhbXAgYW5kIHByb2Nlc3NlZCBmbGFnXG4gICAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBwcm9jZXNzZWQ6IHRydWUsXG4gICAgICBwcm9jZXNzZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZyhgW0V4ZWN1dGVDb21tYW5kQWN0aXZpdHldIFByb2Nlc3NlZCBkYXRhOmAsIHByb2Nlc3NlZERhdGEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dDoge1xuICAgICAgICByZXN1bHQ6IHByb2Nlc3NlZERhdGEsXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICB9LFxuICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgRG9uZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG5cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ShowConfirmPopup Activity (Frontend)\n *\n * Shows a confirmation popup dialog with OK and Cancel buttons.\n * This activity runs on the frontend and requires user interaction.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-confirm-popup\n *\n * Outcomes:\n * - ok: User clicked OK button\n * - cancel: User clicked Cancel button or closed the dialog\n */\nexport class ShowConfirmPopupActivity {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.dialogService = inject(AXDialogService);\n this.translationService = inject(AXTranslationService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n // Translate title and message if they are translation keys\n const title = await this.translationService.translateAsync(input.title);\n const message = await this.translationService.translateAsync(input.message);\n // Show confirmation dialog\n const dialogResult = await this.dialogService.confirm(title, message, input.type || 'warning', input.direction || 'horizontal', input.closable ?? false, input.defaultAction || 'cancel');\n const confirmed = dialogResult.result === true;\n // Determine outcome based on user action\n const outcomes = confirmed\n ? { ok: true }\n : { cancel: true };\n console.log(`[ShowConfirmPopupActivity] User ${confirmed ? 'confirmed' : 'cancelled'} the dialog`);\n return {\n success: true,\n data: {\n output: {},\n outcomes,\n },\n };\n }\n catch (error) {\n console.error(`[ShowConfirmPopupActivity] Failed to show confirm popup:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show confirmation dialog',\n },\n data: {\n output: {},\n outcomes: {\n cancel: true,\n },\n },\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowConfirmPopupActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowConfirmPopupActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowConfirmPopupActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdy1jb25maXJtLXBvcHVwLmFjdGl2aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy9zaG93LWNvbmZpcm0tcG9wdXAuYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQWdEaEUsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFHRSwrQ0FBK0M7UUFFOUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0EyRHBFO0lBekRDLFlBQVk7SUFFWixpREFBaUQ7SUFFakQsS0FBSyxDQUFDLE9BQU8sQ0FDWCxLQUE0QjtRQUU1QixJQUFJLENBQUM7WUFDSCwyREFBMkQ7WUFDM0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTVFLDJCQUEyQjtZQUMzQixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUNuRCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxFQUN2QixLQUFLLENBQUMsU0FBUyxJQUFJLFlBQVksRUFDL0IsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLEVBQ3ZCLEtBQUssQ0FBQyxhQUFhLElBQUksUUFBUSxDQUNoQyxDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7WUFFL0MseUNBQXlDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLFNBQVM7Z0JBQ3hCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUU7Z0JBQ2QsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1lBRXJCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLGFBQWEsQ0FBQyxDQUFDO1lBRW5HLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRSxFQUE0QjtvQkFDcEMsUUFBUTtpQkFDVDthQUNGLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWpGLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLG9DQUFvQztpQkFDNUQ7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRSxFQUE0QjtvQkFDcEMsUUFBUSxFQUFFO3dCQUNSLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2lCQUNGO2FBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOytHQTdEVSx3QkFBd0I7bUhBQXhCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ29tbWFuZCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBBWERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGlhbG9nJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYU3R5bGVDb2xvclR5cGUgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuXG4vLyNyZWdpb24gLS0tLSAgIFR5cGVzICAgLS0tLVxuXG4vKipcbiAqIElucHV0IGZvciBTaG93Q29uZmlybVBvcHVwIGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3dDb25maXJtUG9wdXBJbnB1dCB7XG4gIC8qKlxuICAgKiBUaXRsZSBvZiB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgKi9cbiAgdGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogTWVzc2FnZS9jb250ZW50IG9mIHRoZSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpYWxvZyB0eXBlL2NvbG9yIChlLmcuLCAnd2FybmluZycsICdkYW5nZXInLCAnaW5mbycsICdzdWNjZXNzJylcbiAgICovXG4gIHR5cGU/OiBBWFN0eWxlQ29sb3JUeXBlO1xuXG4gIC8qKlxuICAgKiBCdXR0b24gbGF5b3V0IGRpcmVjdGlvbiAoJ2hvcml6b250YWwnIG9yICd2ZXJ0aWNhbCcpXG4gICAqL1xuICBkaXJlY3Rpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGRpYWxvZyBpcyBjbG9zYWJsZVxuICAgKi9cbiAgY2xvc2FibGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGFjdGlvbiBidXR0b24gKCdjb25maXJtJyBvciAnY2FuY2VsJylcbiAgICovXG4gIGRlZmF1bHRBY3Rpb24/OiAnY29uZmlybScgfCAnY2FuY2VsJztcbn1cblxuLyoqXG4gKiBPdXRwdXQgZm9yIFNob3dDb25maXJtUG9wdXAgYWN0aXZpdHkuXG4gKiBPdXRjb21lIGlzIGRldGVybWluZWQgYnkgdGhlIG91dGNvbWVzIG9iamVjdCAob2sgb3IgY2FuY2VsKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaG93Q29uZmlybVBvcHVwT3V0cHV0IHtcbiAgLy8gTm8gb3V0cHV0IGRhdGEgbmVlZGVkIC0gb3V0Y29tZSBpcyBkZXRlcm1pbmVkIGJ5IG91dGNvbWVzXG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIFNob3dDb25maXJtUG9wdXAgQWN0aXZpdHkgKEZyb250ZW5kKVxuICogXG4gKiBTaG93cyBhIGNvbmZpcm1hdGlvbiBwb3B1cCBkaWFsb2cgd2l0aCBPSyBhbmQgQ2FuY2VsIGJ1dHRvbnMuXG4gKiBUaGlzIGFjdGl2aXR5IHJ1bnMgb24gdGhlIGZyb250ZW5kIGFuZCByZXF1aXJlcyB1c2VyIGludGVyYWN0aW9uLlxuICogXG4gKiBFeGVjdXRpb24gTW9kZTogZnJvbnRlbmRcbiAqIEFjdGl2aXR5IFR5cGU6IHdvcmtmbG93LWFjdGl2aXR5OnNob3ctY29uZmlybS1wb3B1cFxuICogXG4gKiBPdXRjb21lczpcbiAqIC0gb2s6IFVzZXIgY2xpY2tlZCBPSyBidXR0b25cbiAqIC0gY2FuY2VsOiBVc2VyIGNsaWNrZWQgQ2FuY2VsIGJ1dHRvbiBvciBjbG9zZWQgdGhlIGRpYWxvZ1xuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2hvd0NvbmZpcm1Qb3B1cEFjdGl2aXR5XG4gIGltcGxlbWVudHMgQVhQQ29tbWFuZDxTaG93Q29uZmlybVBvcHVwSW5wdXQsIHsgb3V0cHV0OiBTaG93Q29uZmlybVBvcHVwT3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFYRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEFYUENvbW1hbmQgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbiAgYXN5bmMgZXhlY3V0ZShcbiAgICBpbnB1dDogU2hvd0NvbmZpcm1Qb3B1cElucHV0LFxuICApOiBQcm9taXNlPEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0PHsgb3V0cHV0OiBTaG93Q29uZmlybVBvcHVwT3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9Pj4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBUcmFuc2xhdGUgdGl0bGUgYW5kIG1lc3NhZ2UgaWYgdGhleSBhcmUgdHJhbnNsYXRpb24ga2V5c1xuICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhpbnB1dC50aXRsZSk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoaW5wdXQubWVzc2FnZSk7XG5cbiAgICAgIC8vIFNob3cgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgY29uc3QgZGlhbG9nUmVzdWx0ID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBpbnB1dC50eXBlIHx8ICd3YXJuaW5nJyxcbiAgICAgICAgaW5wdXQuZGlyZWN0aW9uIHx8ICdob3Jpem9udGFsJyxcbiAgICAgICAgaW5wdXQuY2xvc2FibGUgPz8gZmFsc2UsXG4gICAgICAgIGlucHV0LmRlZmF1bHRBY3Rpb24gfHwgJ2NhbmNlbCcsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBjb25maXJtZWQgPSBkaWFsb2dSZXN1bHQucmVzdWx0ID09PSB0cnVlO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgb3V0Y29tZSBiYXNlZCBvbiB1c2VyIGFjdGlvblxuICAgICAgY29uc3Qgb3V0Y29tZXMgPSBjb25maXJtZWRcbiAgICAgICAgPyB7IG9rOiB0cnVlIH1cbiAgICAgICAgOiB7IGNhbmNlbDogdHJ1ZSB9O1xuXG4gICAgICBjb25zb2xlLmxvZyhgW1Nob3dDb25maXJtUG9wdXBBY3Rpdml0eV0gVXNlciAke2NvbmZpcm1lZCA/ICdjb25maXJtZWQnIDogJ2NhbmNlbGxlZCd9IHRoZSBkaWFsb2dgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG91dHB1dDoge30gYXMgU2hvd0NvbmZpcm1Qb3B1cE91dHB1dCxcbiAgICAgICAgICBvdXRjb21lcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1Nob3dDb25maXJtUG9wdXBBY3Rpdml0eV0gRmFpbGVkIHRvIHNob3cgY29uZmlybSBwb3B1cDpgLCBlcnJvcik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgdGV4dDogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHNob3cgY29uZmlybWF0aW9uIGRpYWxvZycsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvdXRwdXQ6IHt9IGFzIFNob3dDb25maXJtUG9wdXBPdXRwdXQsXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","//#region ---- Imports ----\nimport { Injectable, inject } from '@angular/core';\nimport { AXPWidgetSerializationHelper } from '@acorex/platform/layout/widget-core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDialogRendererComponent } from '@acorex/platform/layout/builder';\nimport { cloneDeep } from 'lodash-es';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ShowLayoutPopup Activity (Frontend)\n *\n * Shows a popup dialog with a custom layout built using layout builder.\n * The layout can be provided as JSON string or AXPWidgetNode object.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-layout-popup\n *\n * Outcomes:\n * Outcomes are dynamically generated based on the actions provided in the input.\n * Each action creates a corresponding outcome with the action name (from command.name or action.name).\n * If no actions are provided, default actions (cancel, submit) are used.\n *\n * Examples:\n * - If action has command.name = 'save', outcome will be { save: true }\n * - If action has name = 'delete', outcome will be { delete: true }\n * - Default outcomes: { cancel: true } or { submit: true }\n */\nexport class ShowLayoutPopupActivity {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.popupService = inject(AXPopupService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n // Parse layout definition\n let layoutNode;\n if (typeof input.layout === 'string') {\n // If it's a JSON string, parse it\n try {\n layoutNode = AXPWidgetSerializationHelper.fromJson(input.layout);\n }\n catch (error) {\n throw new Error(`Invalid layout JSON: ${error.message}`);\n }\n }\n else {\n // If it's already an object, use it directly (clone to avoid mutations)\n layoutNode = cloneDeep(input.layout);\n }\n // Validate layout node\n if (!layoutNode || !layoutNode.type) {\n throw new Error('Invalid layout: missing type property');\n }\n // Build actions from input or use defaults\n const actions = input.actions || {\n suffix: [\n {\n title: '@general:actions.cancel.title',\n icon: 'fa-times',\n color: 'default',\n command: { name: 'cancel' },\n },\n {\n title: '@general:actions.submit.title',\n icon: 'fa-check',\n color: 'primary',\n command: { name: 'submit', options: { validate: true } },\n },\n ],\n };\n // Create dialog configuration\n const dialogConfig = {\n title: input.title || 'Dialog',\n context: input.context || {},\n definition: layoutNode,\n actions: {\n footer: {\n prefix: actions.prefix || [],\n suffix: actions.suffix || [],\n },\n },\n };\n // Extract action names for outcomes (from command.name or action.name)\n const actionNames = new Set();\n if (actions.prefix) {\n actions.prefix.forEach((action) => {\n const actionName = action.command?.name || action.name || 'unknown';\n actionNames.add(actionName);\n });\n }\n if (actions.suffix) {\n actions.suffix.forEach((action) => {\n const actionName = action.command?.name || action.name || 'unknown';\n actionNames.add(actionName);\n });\n }\n // Show dialog using AXPDialogRendererComponent\n const dialogResult = await new Promise((resolve) => {\n this.popupService.open(AXPDialogRendererComponent, {\n title: dialogConfig.title,\n size: input.size || 'md',\n closeButton: input.closeButton !== undefined ? input.closeButton : true,\n closeOnBackdropClick: false,\n draggable: false,\n data: {\n config: dialogConfig,\n callBack: (result) => {\n resolve({\n context: result.context?.() || dialogConfig.context,\n action: result.action?.() || 'cancel',\n });\n },\n },\n });\n });\n // Extract result data and action\n const result = dialogResult?.context || {};\n const action = dialogResult?.action || 'cancel';\n // Build outcomes dynamically based on action names\n // Each action creates a corresponding outcome\n const outcomes = {};\n // Set the outcome for the clicked action to true\n if (action && actionNames.has(action)) {\n outcomes[action] = true;\n }\n else if (action) {\n // If action is not in the list, still add it as outcome\n outcomes[action] = true;\n }\n console.log(`[ShowLayoutPopupActivity] Dialog closed with action: ${action}`, result);\n return {\n success: true,\n data: {\n output: {\n result,\n action,\n },\n outcomes,\n },\n };\n }\n catch (error) {\n console.error(`[ShowLayoutPopupActivity] Failed to show layout popup:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show layout popup',\n },\n data: {\n output: {\n result: {},\n action: 'cancel',\n },\n outcomes: {\n cancel: true,\n },\n },\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowLayoutPopupActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowLayoutPopupActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowLayoutPopupActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdy1sYXlvdXQtcG9wdXAuYWN0aXZpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzL3Nob3ctbGF5b3V0LXBvcHVwLmFjdGl2aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUUvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQWlCLDRCQUE0QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsMEJBQTBCLEVBQThDLE1BQU0saUNBQWlDLENBQUM7QUFFekgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUE0RHRDLFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQURwQztRQUdFLCtDQUErQztRQUU5QixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztLQWtKeEQ7SUFoSkMsWUFBWTtJQUVaLGlEQUFpRDtJQUVqRCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQTJCO1FBRTNCLElBQUksQ0FBQztZQUNILDBCQUEwQjtZQUMxQixJQUFJLFVBQXlCLENBQUM7WUFFOUIsSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLGtDQUFrQztnQkFDbEMsSUFBSSxDQUFDO29CQUNILFVBQVUsR0FBRyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0s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O1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0RBQXdELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFL0UsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksNkJBQTZCO2lCQUNyRDtnQkFDRCxJQUFJLEVBQUU7b0JBQ0osTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxRQUFRO3FCQUNqQjtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsTUFBTSxFQUFFLElBQUk7cUJBQ2I7aUJBQ0Y7YUFDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7K0dBbkpVLHVCQUF1QjttSEFBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQVhQV2lkZ2V0Tm9kZSwgQVhQV2lkZ2V0U2VyaWFsaXphdGlvbkhlbHBlciB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcbmltcG9ydCB7IEFYUG9wdXBTZXJ2aWNlLCBBWFBvcHVwU2l6ZVR5cGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHsgQVhQRGlhbG9nUmVuZGVyZXJDb21wb25lbnQsIERpYWxvZ1JlbmRlcmVyQ29uZmlnLCBEaWFsb2dSZW5kZXJlclJlc3VsdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0gfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgICAtLS0tXG5cbi8qKlxuICogSW5wdXQgZm9yIFNob3dMYXlvdXRQb3B1cCBhY3Rpdml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaG93TGF5b3V0UG9wdXBJbnB1dCB7XG4gIC8qKlxuICAgKiBMYXlvdXQgZGVmaW5pdGlvbiBhcyBKU09OIHN0cmluZyBvciBBWFBXaWRnZXROb2RlIG9iamVjdFxuICAgKi9cbiAgbGF5b3V0OiBzdHJpbmcgfCBBWFBXaWRnZXROb2RlO1xuXG4gIC8qKlxuICAgKiBEaWFsb2cgdGl0bGVcbiAgICovXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaWFsb2cgc2l6ZVxuICAgKi9cbiAgc2l6ZT86IEFYUG9wdXBTaXplVHlwZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IGNsb3NlIGJ1dHRvblxuICAgKi9cbiAgY2xvc2VCdXR0b24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIGNvbnRleHQgZGF0YSBmb3IgdGhlIGZvcm1cbiAgICovXG4gIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBEaWFsb2cgYWN0aW9ucyAoYnV0dG9ucykgdG8gZGlzcGxheSBpbiBmb290ZXJcbiAgICogRWFjaCBhY3Rpb24gd2lsbCBjcmVhdGUgYSBjb3JyZXNwb25kaW5nIG91dGNvbWVcbiAgICovXG4gIGFjdGlvbnM/OiB7XG4gICAgcHJlZml4PzogQVhQQWN0aW9uTWVudUl0ZW1bXTtcbiAgICBzdWZmaXg/OiBBWFBBY3Rpb25NZW51SXRlbVtdO1xuICB9O1xufVxuXG4vKipcbiAqIE91dHB1dCBmb3IgU2hvd0xheW91dFBvcHVwIGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3dMYXlvdXRQb3B1cE91dHB1dCB7XG4gIC8qKlxuICAgKiBSZXN1bHQgZGF0YSBmcm9tIHRoZSBkaWFsb2cgKGZvcm0gdmFsdWVzKVxuICAgKi9cbiAgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBBY3Rpb24gdGhhdCB3YXMgY2xpY2tlZCAoZS5nLiwgJ3N1Ym1pdCcsICdjYW5jZWwnLCBvciBjdXN0b20gYWN0aW9uIG5hbWUpXG4gICAqL1xuICBhY3Rpb246IHN0cmluZztcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogU2hvd0xheW91dFBvcHVwIEFjdGl2aXR5IChGcm9udGVuZClcbiAqIFxuICogU2hvd3MgYSBwb3B1cCBkaWFsb2cgd2l0aCBhIGN1c3RvbSBsYXlvdXQgYnVpbHQgdXNpbmcgbGF5b3V0IGJ1aWxkZXIuXG4gKiBUaGUgbGF5b3V0IGNhbiBiZSBwcm92aWRlZCBhcyBKU09OIHN0cmluZyBvciBBWFBXaWRnZXROb2RlIG9iamVjdC5cbiAqIFxuICogRXhlY3V0aW9uIE1vZGU6IGZyb250ZW5kXG4gKiBBY3Rpdml0eSBUeXBlOiB3b3JrZmxvdy1hY3Rpdml0eTpzaG93LWxheW91dC1wb3B1cFxuICogXG4gKiBPdXRjb21lczpcbiAqIE91dGNvbWVzIGFyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGFjdGlvbnMgcHJvdmlkZWQgaW4gdGhlIGlucHV0LlxuICogRWFjaCBhY3Rpb24gY3JlYXRlcyBhIGNvcnJlc3BvbmRpbmcgb3V0Y29tZSB3aXRoIHRoZSBhY3Rpb24gbmFtZSAoZnJvbSBjb21tYW5kLm5hbWUgb3IgYWN0aW9uLm5hbWUpLlxuICogSWYgbm8gYWN0aW9ucyBhcmUgcHJvdmlkZWQsIGRlZmF1bHQgYWN0aW9ucyAoY2FuY2VsLCBzdWJtaXQpIGFyZSB1c2VkLlxuICogXG4gKiBFeGFtcGxlczpcbiAqIC0gSWYgYWN0aW9uIGhhcyBjb21tYW5kLm5hbWUgPSAnc2F2ZScsIG91dGNvbWUgd2lsbCBiZSB7IHNhdmU6IHRydWUgfVxuICogLSBJZiBhY3Rpb24gaGFzIG5hbWUgPSAnZGVsZXRlJywgb3V0Y29tZSB3aWxsIGJlIHsgZGVsZXRlOiB0cnVlIH1cbiAqIC0gRGVmYXVsdCBvdXRjb21lczogeyBjYW5jZWw6IHRydWUgfSBvciB7IHN1Ym1pdDogdHJ1ZSB9XG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaG93TGF5b3V0UG9wdXBBY3Rpdml0eVxuICBpbXBsZW1lbnRzIEFYUENvbW1hbmQ8U2hvd0xheW91dFBvcHVwSW5wdXQsIHsgb3V0cHV0OiBTaG93TGF5b3V0UG9wdXBPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+IHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IHBvcHVwU2VydmljZSA9IGluamVjdChBWFBvcHVwU2VydmljZSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBBWFBDb21tYW5kIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgaW5wdXQ6IFNob3dMYXlvdXRQb3B1cElucHV0LFxuICApOiBQcm9taXNlPEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0PHsgb3V0cHV0OiBTaG93TGF5b3V0UG9wdXBPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFBhcnNlIGxheW91dCBkZWZpbml0aW9uXG4gICAgICBsZXQgbGF5b3V0Tm9kZTogQVhQV2lkZ2V0Tm9kZTtcblxuICAgICAgaWYgKHR5cGVvZiBpbnB1dC5sYXlvdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIElmIGl0J3MgYSBKU09OIHN0cmluZywgcGFyc2UgaXRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsYXlvdXROb2RlID0gQVhQV2lkZ2V0U2VyaWFsaXphdGlvbkhlbHBlci5mcm9tSnNvbihpbnB1dC5sYXlvdXQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGxheW91dCBKU09OOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhbiBvYmplY3QsIHVzZSBpdCBkaXJlY3RseSAoY2xvbmUgdG8gYXZvaWQgbXV0YXRpb25zKVxuICAgICAgICBsYXlvdXROb2RlID0gY2xvbmVEZWVwKGlucHV0LmxheW91dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGxheW91dCBub2RlXG4gICAgICBpZiAoIWxheW91dE5vZGUgfHwgIWxheW91dE5vZGUudHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbGF5b3V0OiBtaXNzaW5nIHR5cGUgcHJvcGVydHknKTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgYWN0aW9ucyBmcm9tIGlucHV0IG9yIHVzZSBkZWZhdWx0c1xuICAgICAgY29uc3QgYWN0aW9ucyA9IGlucHV0LmFjdGlvbnMgfHwge1xuICAgICAgICBzdWZmaXg6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0BnZW5lcmFsOmFjdGlvbnMuY2FuY2VsLnRpdGxlJyxcbiAgICAgICAgICAgIGljb246ICdmYS10aW1lcycsXG4gICAgICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgY29tbWFuZDogeyBuYW1lOiAnY2FuY2VsJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdAZ2VuZXJhbDphY3Rpb25zLnN1Ym1pdC50aXRsZScsXG4gICAgICAgICAgICBpY29uOiAnZmEtY2hlY2snLFxuICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ3N1Ym1pdCcsIG9wdGlvbnM6IHsgdmFsaWRhdGU6IHRydWUgfSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICAvLyBDcmVhdGUgZGlhbG9nIGNvbmZpZ3VyYXRpb25cbiAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogRGlhbG9nUmVuZGVyZXJDb25maWcgPSB7XG4gICAgICAgIHRpdGxlOiBpbnB1dC50aXRsZSB8fCAnRGlhbG9nJyxcbiAgICAgICAgY29udGV4dDogaW5wdXQuY29udGV4dCB8fCB7fSxcbiAgICAgICAgZGVmaW5pdGlvbjogbGF5b3V0Tm9kZSxcbiAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgIGZvb3Rlcjoge1xuICAgICAgICAgICAgcHJlZml4OiBhY3Rpb25zLnByZWZpeCB8fCBbXSxcbiAgICAgICAgICAgIHN1ZmZpeDogYWN0aW9ucy5zdWZmaXggfHwgW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEV4dHJhY3QgYWN0aW9uIG5hbWVzIGZvciBvdXRjb21lcyAoZnJvbSBjb21tYW5kLm5hbWUgb3IgYWN0aW9uLm5hbWUpXG4gICAgICBjb25zdCBhY3Rpb25OYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgaWYgKGFjdGlvbnMucHJlZml4KSB7XG4gICAgICAgIGFjdGlvbnMucHJlZml4LmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb24uY29tbWFuZD8ubmFtZSB8fCBhY3Rpb24ubmFtZSB8fCAndW5rbm93bic7XG4gICAgICAgICAgYWN0aW9uTmFtZXMuYWRkKGFjdGlvbk5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb25zLnN1ZmZpeCkge1xuICAgICAgICBhY3Rpb25zLnN1ZmZpeC5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uLmNvbW1hbmQ/Lm5hbWUgfHwgYWN0aW9uLm5hbWUgfHwgJ3Vua25vd24nO1xuICAgICAgICAgIGFjdGlvbk5hbWVzLmFkZChhY3Rpb25OYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgZGlhbG9nIHVzaW5nIEFYUERpYWxvZ1JlbmRlcmVyQ29tcG9uZW50XG4gICAgICBjb25zdCBkaWFsb2dSZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZTxEaWFsb2dSZW5kZXJlclJlc3VsdD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihBWFBEaWFsb2dSZW5kZXJlckNvbXBvbmVudCwge1xuICAgICAgICAgIHRpdGxlOiBkaWFsb2dDb25maWcudGl0bGUsXG4gICAgICAgICAgc2l6ZTogaW5wdXQuc2l6ZSB8fCAnbWQnLFxuICAgICAgICAgIGNsb3NlQnV0dG9uOiBpbnB1dC5jbG9zZUJ1dHRvbiAhPT0gdW5kZWZpbmVkID8gaW5wdXQuY2xvc2VCdXR0b24gOiB0cnVlLFxuICAgICAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiBmYWxzZSxcbiAgICAgICAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNvbmZpZzogZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgY2FsbEJhY2s6IChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiByZXN1bHQuY29udGV4dD8uKCkgfHwgZGlhbG9nQ29uZmlnLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiByZXN1bHQuYWN0aW9uPy4oKSB8fCAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEV4dHJhY3QgcmVzdWx0IGRhdGEgYW5kIGFjdGlvblxuICAgICAgY29uc3QgcmVzdWx0ID0gZGlhbG9nUmVzdWx0Py5jb250ZXh0IHx8IHt9O1xuICAgICAgY29uc3QgYWN0aW9uID0gZGlhbG9nUmVzdWx0Py5hY3Rpb24gfHwgJ2NhbmNlbCc7XG5cbiAgICAgIC8vIEJ1aWxkIG91dGNvbWVzIGR5bmFtaWNhbGx5IGJhc2VkIG9uIGFjdGlvbiBuYW1lc1xuICAgICAgLy8gRWFjaCBhY3Rpb24gY3JlYXRlcyBhIGNvcnJlc3BvbmRpbmcgb3V0Y29tZVxuICAgICAgY29uc3Qgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIFxuICAgICAgLy8gU2V0IHRoZSBvdXRjb21lIGZvciB0aGUgY2xpY2tlZCBhY3Rpb24gdG8gdHJ1ZVxuICAgICAgaWYgKGFjdGlvbiAmJiBhY3Rpb25OYW1lcy5oYXMoYWN0aW9uKSkge1xuICAgICAgICBvdXRjb21lc1thY3Rpb25dID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uKSB7XG4gICAgICAgIC8vIElmIGFjdGlvbiBpcyBub3QgaW4gdGhlIGxpc3QsIHN0aWxsIGFkZCBpdCBhcyBvdXRjb21lXG4gICAgICAgIG91dGNvbWVzW2FjdGlvbl0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhgW1Nob3dMYXlvdXRQb3B1cEFjdGl2aXR5XSBEaWFsb2cgY2xvc2VkIHdpdGggYWN0aW9uOiAke2FjdGlvbn1gLCByZXN1bHQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRjb21lcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1Nob3dMYXlvdXRQb3B1cEFjdGl2aXR5XSBGYWlsZWQgdG8gc2hvdyBsYXlvdXQgcG9wdXA6YCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIHRleHQ6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzaG93IGxheW91dCBwb3B1cCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIHJlc3VsdDoge30sXG4gICAgICAgICAgICBhY3Rpb246ICdjYW5jZWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","//#region ---- Imports ----\nimport { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * Human Task Activity (Frontend)\n *\n * Generic human task activity that suspends workflow and waits for user interaction.\n * Supports assignment and actions (displayed inline). For dialog-style flow, use a follow-up activity.\n *\n * Execution Mode: frontend\n * Task Type: human-task\n * Activity Type: workflow-activity:human-task\n *\n * Outcomes:\n * Outcomes are dynamically generated based on the actions provided in the input.\n * Each action creates a corresponding outcome with the action name (from command.name or action.name).\n * If no actions are provided, default actions (cancel, submit) are used.\n *\n * Examples:\n * - If action has command.name = 'approve', outcome will be { approve: true }\n * - If action has name = 'reject', outcome will be { reject: true }\n * - Default outcomes: { cancel: true } or { submit: true }\n *\n * Assignment:\n * - assignedUserIds: Direct assignment to specific users\n * - candidateUserIds: Users who can claim the task\n * - candidateRoleIds: Roles whose members can claim the task\n *\n * Display Modes:\n * - 'dialog': Traditional modal dialog (default)\n * - 'inline': Actions displayed directly on page before resume\n */\nexport class HumanTaskActivity {\n //#region ---- Services & Dependencies ----\n // Note: This activity doesn't execute immediately - it suspends the workflow\n // The actual UI display is handled by the Generic Task Provider and Display Service\n //#endregion\n //#region ---- AXPCommand Implementation ----\n /**\n * Execute human task activity.\n *\n * This method doesn't actually show UI - it just validates input and returns success.\n * The workflow engine will suspend at this activity and create a bookmark.\n * The Generic Task Provider will handle displaying the task UI inline.\n */\n async execute(input) {\n console.log('human task input', input.context?.['input'] ?? 'no input');\n try {\n // Validate required fields\n if (!input.title && !input.description) {\n console.warn('[HumanTaskActivity] No title or description provided');\n }\n // Build outcomes from actions (dynamic) or default submit/cancel\n const outcomes = {};\n const rawActions = input.actions;\n if (rawActions) {\n try {\n const actions = typeof rawActions === 'string' ? JSON.parse(rawActions) : rawActions;\n const prefix = actions?.prefix ?? [];\n const suffix = actions?.suffix ?? [];\n for (const item of [...prefix, ...suffix]) {\n const name = item?.command?.name ?? item?.name;\n if (name && typeof name === 'string')\n outcomes[name] = true;\n }\n }\n catch {\n // ignore parse error\n }\n }\n if (Object.keys(outcomes).length === 0) {\n outcomes['cancel'] = true;\n outcomes['submit'] = true;\n }\n // This activity suspends the workflow - the actual result will come from resume\n // Return a placeholder result - the real result comes when user completes the task\n return {\n success: true,\n data: {\n output: {\n result: input.context || {},\n action: 'pending', // Will be replaced when task is completed\n },\n outcomes,\n },\n };\n }\n catch (error) {\n console.error(`[HumanTaskActivity] Failed to execute human task:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to execute human task',\n },\n data: {\n output: {\n result: {},\n action: 'cancel',\n },\n outcomes: {\n cancel: true,\n },\n },\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: HumanTaskActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: HumanTaskActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: HumanTaskActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW4tdGFzay5hY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMvaHVtYW4tdGFzay5hY3Rpdml0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUEwRTNDLFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsK0NBQStDO0lBRS9DLDZFQUE2RTtJQUM3RSxvRkFBb0Y7SUFFcEYsWUFBWTtJQUVaLGlEQUFpRDtJQUVqRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQXFCO1FBR3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDO1FBR3pFLElBQUksQ0FBQztZQUNILDJCQUEyQjtZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFHRCxpRUFBaUU7WUFDakUsTUFBTSxRQUFRLEdBQXdCLEVBQUUsQ0FBQztZQUN6QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2pDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDO29CQUNILE1BQU0sT0FBTyxHQUFHLE9BQU8sVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO29CQUNyRixNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7b0JBQ3JDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLENBQUM7d0JBQy9DLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7NEJBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDOUQsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE1BQU0sQ0FBQztvQkFDUCxxQkFBcUI7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDMUIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDO1lBRUQsZ0ZBQWdGO1lBQ2hGLG1GQUFtRjtZQUNuRixPQUFPO2dCQUNMLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRTt3QkFDM0IsTUFBTSxFQUFFLFNBQVMsRUFBRSwwQ0FBMEM7cUJBQzlEO29CQUNELFFBQVE7aUJBQ1Q7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUUxRSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSw4QkFBOEI7aUJBQ3REO2dCQUNELElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLFFBQVE7cUJBQ2pCO29CQUNELFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsSUFBSTtxQkFDYjtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzsrR0FwRlUsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBUeXBlcyAgIC0tLS1cblxuLyoqXG4gKiBJbnB1dCBmb3IgSHVtYW4gVGFzayBhY3Rpdml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdW1hblRhc2tJbnB1dCB7XG4gIC8qKlxuICAgKiBUYXNrIHRpdGxlXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGFzayBkZXNjcmlwdGlvblxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFzc2lnbmVkIHVzZXIgSURzIChkaXJlY3QgYXNzaWdubWVudClcbiAgICovXG4gIGFzc2lnbmVkVXNlcklkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDYW5kaWRhdGUgdXNlciBJRHMgKHVzZXJzIHdobyBjYW4gY2xhaW0gdGhlIHRhc2spXG4gICAqL1xuICBjYW5kaWRhdGVVc2VySWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENhbmRpZGF0ZSByb2xlIElEcyAocm9sZXMgd2hvc2UgbWVtYmVycyBjYW4gY2xhaW0gdGhlIHRhc2spXG4gICAqL1xuICBjYW5kaWRhdGVSb2xlSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRhc2sgcHJpb3JpdHlcbiAgICovXG4gIHByaW9yaXR5PzogJ0xvdycgfCAnTm9ybWFsJyB8ICdIaWdoJyB8ICdVcmdlbnQnO1xuXG4gIC8qKlxuICAgKiBUYXNrIGR1ZSBkYXRlIChJU08gZGF0ZSBzdHJpbmcgb3IgRGF0ZSlcbiAgICovXG4gIGR1ZURhdGU/OiBzdHJpbmcgfCBEYXRlO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIGNvbnRleHQgZGF0YSBmb3IgdGhlIGZvcm1cbiAgICovXG4gIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBBY3Rpb25zIChidXR0b25zKSBmb3IgdGhpcyB0YXNrLiBGb3JtYXQ6IHsgcHJlZml4PzogQXJyYXk8QWN0aW9uPiwgc3VmZml4PzogQXJyYXk8QWN0aW9uPiB9IChvciBKU09OIHN0cmluZykuXG4gICAqIEVhY2ggYWN0aW9uIG5hbWUgYmVjb21lcyBhbiBvdXRjb21lIHdoZW4gdGhlIHRhc2sgaXMgY29tcGxldGVkLlxuICAgKi9cbiAgYWN0aW9ucz86IHsgcHJlZml4PzogQXJyYXk8eyBuYW1lPzogc3RyaW5nOyBjb21tYW5kPzogeyBuYW1lPzogc3RyaW5nIH0gfT47IHN1ZmZpeD86IEFycmF5PHsgbmFtZT86IHN0cmluZzsgY29tbWFuZD86IHsgbmFtZT86IHN0cmluZyB9IH0+IH0gfCBzdHJpbmc7XG59XG5cbi8qKlxuICogT3V0cHV0IGZvciBIdW1hbiBUYXNrIGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh1bWFuVGFza091dHB1dCB7XG4gIC8qKlxuICAgKiBSZXN1bHQgZGF0YSBmcm9tIHRhc2sgY29tcGxldGlvbiAoZm9ybSB2YWx1ZXMpXG4gICAqL1xuICByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgLyoqXG4gICAqIEFjdGlvbiB0aGF0IHdhcyBjbGlja2VkIChlLmcuLCAnYXBwcm92ZScsICdyZWplY3QnLCAnY2FuY2VsJylcbiAgICovXG4gIGFjdGlvbjogc3RyaW5nO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBIdW1hbiBUYXNrIEFjdGl2aXR5IChGcm9udGVuZClcbiAqIFxuICogR2VuZXJpYyBodW1hbiB0YXNrIGFjdGl2aXR5IHRoYXQgc3VzcGVuZHMgd29ya2Zsb3cgYW5kIHdhaXRzIGZvciB1c2VyIGludGVyYWN0aW9uLlxuICogU3VwcG9ydHMgYXNzaWdubWVudCBhbmQgYWN0aW9ucyAoZGlzcGxheWVkIGlubGluZSkuIEZvciBkaWFsb2ctc3R5bGUgZmxvdywgdXNlIGEgZm9sbG93LXVwIGFjdGl2aXR5LlxuICogXG4gKiBFeGVjdXRpb24gTW9kZTogZnJvbnRlbmRcbiAqIFRhc2sgVHlwZTogaHVtYW4tdGFza1xuICogQWN0aXZpdHkgVHlwZTogd29ya2Zsb3ctYWN0aXZpdHk6aHVtYW4tdGFza1xuICogXG4gKiBPdXRjb21lczpcbiAqIE91dGNvbWVzIGFyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGFjdGlvbnMgcHJvdmlkZWQgaW4gdGhlIGlucHV0LlxuICogRWFjaCBhY3Rpb24gY3JlYXRlcyBhIGNvcnJlc3BvbmRpbmcgb3V0Y29tZSB3aXRoIHRoZSBhY3Rpb24gbmFtZSAoZnJvbSBjb21tYW5kLm5hbWUgb3IgYWN0aW9uLm5hbWUpLlxuICogSWYgbm8gYWN0aW9ucyBhcmUgcHJvdmlkZWQsIGRlZmF1bHQgYWN0aW9ucyAoY2FuY2VsLCBzdWJtaXQpIGFyZSB1c2VkLlxuICogXG4gKiBFeGFtcGxlczpcbiAqIC0gSWYgYWN0aW9uIGhhcyBjb21tYW5kLm5hbWUgPSAnYXBwcm92ZScsIG91dGNvbWUgd2lsbCBiZSB7IGFwcHJvdmU6IHRydWUgfVxuICogLSBJZiBhY3Rpb24gaGFzIG5hbWUgPSAncmVqZWN0Jywgb3V0Y29tZSB3aWxsIGJlIHsgcmVqZWN0OiB0cnVlIH1cbiAqIC0gRGVmYXVsdCBvdXRjb21lczogeyBjYW5jZWw6IHRydWUgfSBvciB7IHN1Ym1pdDogdHJ1ZSB9XG4gKiBcbiAqIEFzc2lnbm1lbnQ6XG4gKiAtIGFzc2lnbmVkVXNlcklkczogRGlyZWN0IGFzc2lnbm1lbnQgdG8gc3BlY2lmaWMgdXNlcnNcbiAqIC0gY2FuZGlkYXRlVXNlcklkczogVXNlcnMgd2hvIGNhbiBjbGFpbSB0aGUgdGFza1xuICogLSBjYW5kaWRhdGVSb2xlSWRzOiBSb2xlcyB3aG9zZSBtZW1iZXJzIGNhbiBjbGFpbSB0aGUgdGFza1xuICogXG4gKiBEaXNwbGF5IE1vZGVzOlxuICogLSAnZGlhbG9nJzogVHJhZGl0aW9uYWwgbW9kYWwgZGlhbG9nIChkZWZhdWx0KVxuICogLSAnaW5saW5lJzogQWN0aW9ucyBkaXNwbGF5ZWQgZGlyZWN0bHkgb24gcGFnZSBiZWZvcmUgcmVzdW1lXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIdW1hblRhc2tBY3Rpdml0eVxuICBpbXBsZW1lbnRzIEFYUENvbW1hbmQ8SHVtYW5UYXNrSW5wdXQsIHsgb3V0cHV0OiBIdW1hblRhc2tPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+IHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICAvLyBOb3RlOiBUaGlzIGFjdGl2aXR5IGRvZXNuJ3QgZXhlY3V0ZSBpbW1lZGlhdGVseSAtIGl0IHN1c3BlbmRzIHRoZSB3b3JrZmxvd1xuICAvLyBUaGUgYWN0dWFsIFVJIGRpc3BsYXkgaXMgaGFuZGxlZCBieSB0aGUgR2VuZXJpYyBUYXNrIFByb3ZpZGVyIGFuZCBEaXNwbGF5IFNlcnZpY2VcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEFYUENvbW1hbmQgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgaHVtYW4gdGFzayBhY3Rpdml0eS5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGRvZXNuJ3QgYWN0dWFsbHkgc2hvdyBVSSAtIGl0IGp1c3QgdmFsaWRhdGVzIGlucHV0IGFuZCByZXR1cm5zIHN1Y2Nlc3MuXG4gICAqIFRoZSB3b3JrZmxvdyBlbmdpbmUgd2lsbCBzdXNwZW5kIGF0IHRoaXMgYWN0aXZpdHkgYW5kIGNyZWF0ZSBhIGJvb2ttYXJrLlxuICAgKiBUaGUgR2VuZXJpYyBUYXNrIFByb3ZpZGVyIHdpbGwgaGFuZGxlIGRpc3BsYXlpbmcgdGhlIHRhc2sgVUkgaW5saW5lLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShcbiAgICBpbnB1dDogSHVtYW5UYXNrSW5wdXQsXG4gICk6IFByb21pc2U8QVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQ8eyBvdXRwdXQ6IEh1bWFuVGFza091dHB1dDsgb3V0Y29tZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gfT4+IHtcblxuICAgIGNvbnNvbGUubG9nKCdodW1hbiB0YXNrIGlucHV0JyAsIGlucHV0LmNvbnRleHQ/LlsnaW5wdXQnXSA/PyAnbm8gaW5wdXQnKTtcbiAgICBcblxuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGlmICghaW5wdXQudGl0bGUgJiYgIWlucHV0LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0h1bWFuVGFza0FjdGl2aXR5XSBObyB0aXRsZSBvciBkZXNjcmlwdGlvbiBwcm92aWRlZCcpO1xuICAgICAgfVxuXG5cbiAgICAgIC8vIEJ1aWxkIG91dGNvbWVzIGZyb20gYWN0aW9ucyAoZHluYW1pYykgb3IgZGVmYXVsdCBzdWJtaXQvY2FuY2VsXG4gICAgICBjb25zdCBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgY29uc3QgcmF3QWN0aW9ucyA9IGlucHV0LmFjdGlvbnM7XG4gICAgICBpZiAocmF3QWN0aW9ucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSB0eXBlb2YgcmF3QWN0aW9ucyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJhd0FjdGlvbnMpIDogcmF3QWN0aW9ucztcbiAgICAgICAgICBjb25zdCBwcmVmaXggPSBhY3Rpb25zPy5wcmVmaXggPz8gW107XG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gYWN0aW9ucz8uc3VmZml4ID8/IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBbLi4ucHJlZml4LCAuLi5zdWZmaXhdKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gaXRlbT8uY29tbWFuZD8ubmFtZSA/PyBpdGVtPy5uYW1lO1xuICAgICAgICAgICAgaWYgKG5hbWUgJiYgdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSBvdXRjb21lc1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBpZ25vcmUgcGFyc2UgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5rZXlzKG91dGNvbWVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgb3V0Y29tZXNbJ2NhbmNlbCddID0gdHJ1ZTtcbiAgICAgICAgb3V0Y29tZXNbJ3N1Ym1pdCddID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBhY3Rpdml0eSBzdXNwZW5kcyB0aGUgd29ya2Zsb3cgLSB0aGUgYWN0dWFsIHJlc3VsdCB3aWxsIGNvbWUgZnJvbSByZXN1bWVcbiAgICAgIC8vIFJldHVybiBhIHBsYWNlaG9sZGVyIHJlc3VsdCAtIHRoZSByZWFsIHJlc3VsdCBjb21lcyB3aGVuIHVzZXIgY29tcGxldGVzIHRoZSB0YXNrXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICByZXN1bHQ6IGlucHV0LmNvbnRleHQgfHwge30sXG4gICAgICAgICAgICBhY3Rpb246ICdwZW5kaW5nJywgLy8gV2lsbCBiZSByZXBsYWNlZCB3aGVuIHRhc2sgaXMgY29tcGxldGVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRjb21lcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW0h1bWFuVGFza0FjdGl2aXR5XSBGYWlsZWQgdG8gZXhlY3V0ZSBodW1hbiB0YXNrOmAsIGVycm9yKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICB0ZXh0OiBlcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZXhlY3V0ZSBodW1hbiB0YXNrJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgcmVzdWx0OiB7fSxcbiAgICAgICAgICAgIGFjdGlvbjogJ2NhbmNlbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdXRjb21lczoge1xuICAgICAgICAgICAgY2FuY2VsOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * ShowToast Activity (Frontend)\n *\n * Shows a toast notification message to the user.\n * This activity runs on the frontend and displays a temporary notification.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:show-toast\n *\n * Outcomes:\n * - done: Toast was displayed successfully\n */\nexport class ShowToastActivity {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.toastService = inject(AXToastService);\n this.translationService = inject(AXTranslationService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n // Translate message and title if they are translation keys\n const message = await this.translationService.translateAsync(input.message);\n const title = input.title ? await this.translationService.translateAsync(input.title) : undefined;\n // Show toast notification\n this.toastService.show({\n color: input.type || 'default',\n title: title,\n content: message,\n closeButton: input.closeButton ?? true,\n timeOut: input.timeOut ?? 3000,\n timeOutProgress: input.timeOutProgress ?? false,\n });\n return {\n success: true,\n data: {\n output: {},\n outcomes: {\n done: true,\n },\n },\n };\n }\n catch (error) {\n console.error(`[ShowToastActivity] Failed to show toast:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to show toast notification',\n },\n data: {\n output: {},\n outcomes: {\n failed: true,\n },\n },\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowToastActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowToastActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: ShowToastActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdy10b2FzdC5hY3Rpdml0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMvc2hvdy10b2FzdC5hY3Rpdml0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBK0NoRSxZQUFZO0FBRVo7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBRDlCO1FBR0UsK0NBQStDO1FBRTlCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RDLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBb0RwRTtJQWxEQyxZQUFZO0lBRVosaURBQWlEO0lBRWpELEtBQUssQ0FBQyxPQUFPLENBQ1gsS0FBcUI7UUFFckIsSUFBSSxDQUFDO1lBQ0gsMkRBQTJEO1lBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRWxHLDBCQUEwQjtZQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUztnQkFDOUIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUk7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUk7Z0JBQzlCLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxJQUFJLEtBQUs7YUFDaEQsQ0FBQyxDQUFDO1lBRUgsT0FBTztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixJQUFJLEVBQUU7b0JBQ0osTUFBTSxFQUFFLEVBQXFCO29CQUM3QixRQUFRLEVBQUU7d0JBQ1IsSUFBSSxFQUFFLElBQUk7cUJBQ1g7aUJBQ0Y7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsRSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxtQ0FBbUM7aUJBQzNEO2dCQUNELElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUUsRUFBcUI7b0JBQzdCLFFBQVEsRUFBRTt3QkFDUixNQUFNLEVBQUUsSUFBSTtxQkFDYjtpQkFDRjthQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzsrR0F0RFUsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUENvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQVhUb2FzdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9hc3QnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhTdHlsZUNvbG9yVHlwZSB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgICAtLS0tXG5cbi8qKlxuICogSW5wdXQgZm9yIFNob3dUb2FzdCBhY3Rpdml0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaG93VG9hc3RJbnB1dCB7XG4gIC8qKlxuICAgKiBNZXNzYWdlL2NvbnRlbnQgb2YgdGhlIHRvYXN0XG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvYXN0IHR5cGUvY29sb3IgKGUuZy4sICdzdWNjZXNzJywgJ2RhbmdlcicsICdpbmZvJywgJ3dhcm5pbmcnKVxuICAgKi9cbiAgdHlwZT86IEFYU3R5bGVDb2xvclR5cGU7XG5cbiAgLyoqXG4gICAqIFRvYXN0IHRpdGxlIChvcHRpb25hbClcbiAgICovXG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgY2xvc2UgYnV0dG9uXG4gICAqL1xuICBjbG9zZUJ1dHRvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICgwID0gbm8gdGltZW91dClcbiAgICovXG4gIHRpbWVPdXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyB0aW1lb3V0IHByb2dyZXNzXG4gICAqL1xuICB0aW1lT3V0UHJvZ3Jlc3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE91dHB1dCBmb3IgU2hvd1RvYXN0IGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNob3dUb2FzdE91dHB1dCB7XG4gIC8vIE5vIG91dHB1dCBkYXRhIG5lZWRlZCAtIHRvYXN0IGlzIGp1c3QgYSBub3RpZmljYXRpb25cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8qKlxuICogU2hvd1RvYXN0IEFjdGl2aXR5IChGcm9udGVuZClcbiAqIFxuICogU2hvd3MgYSB0b2FzdCBub3RpZmljYXRpb24gbWVzc2FnZSB0byB0aGUgdXNlci5cbiAqIFRoaXMgYWN0aXZpdHkgcnVucyBvbiB0aGUgZnJvbnRlbmQgYW5kIGRpc3BsYXlzIGEgdGVtcG9yYXJ5IG5vdGlmaWNhdGlvbi5cbiAqIFxuICogRXhlY3V0aW9uIE1vZGU6IGZyb250ZW5kXG4gKiBBY3Rpdml0eSBUeXBlOiB3b3JrZmxvdy1hY3Rpdml0eTpzaG93LXRvYXN0XG4gKiBcbiAqIE91dGNvbWVzOlxuICogLSBkb25lOiBUb2FzdCB3YXMgZGlzcGxheWVkIHN1Y2Nlc3NmdWxseVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2hvd1RvYXN0QWN0aXZpdHlcbiAgaW1wbGVtZW50cyBBWFBDb21tYW5kPFNob3dUb2FzdElucHV0LCB7IG91dHB1dDogU2hvd1RvYXN0T3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSB0b2FzdFNlcnZpY2UgPSBpbmplY3QoQVhUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBBWFBDb21tYW5kIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgaW5wdXQ6IFNob3dUb2FzdElucHV0LFxuICApOiBQcm9taXNlPEFYUEV4ZWN1dGVDb21tYW5kUmVzdWx0PHsgb3V0cHV0OiBTaG93VG9hc3RPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyYW5zbGF0ZSBtZXNzYWdlIGFuZCB0aXRsZSBpZiB0aGV5IGFyZSB0cmFuc2xhdGlvbiBrZXlzXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoaW5wdXQubWVzc2FnZSk7XG4gICAgICBjb25zdCB0aXRsZSA9IGlucHV0LnRpdGxlID8gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoaW5wdXQudGl0bGUpIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBTaG93IHRvYXN0IG5vdGlmaWNhdGlvblxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIGNvbG9yOiBpbnB1dC50eXBlIHx8ICdkZWZhdWx0JyxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBjb250ZW50OiBtZXNzYWdlLFxuICAgICAgICBjbG9zZUJ1dHRvbjogaW5wdXQuY2xvc2VCdXR0b24gPz8gdHJ1ZSxcbiAgICAgICAgdGltZU91dDogaW5wdXQudGltZU91dCA/PyAzMDAwLFxuICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IGlucHV0LnRpbWVPdXRQcm9ncmVzcyA/PyBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7fSBhcyBTaG93VG9hc3RPdXRwdXQsXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIGRvbmU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1Nob3dUb2FzdEFjdGl2aXR5XSBGYWlsZWQgdG8gc2hvdyB0b2FzdDpgLCBlcnJvcik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgdGV4dDogZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHNob3cgdG9hc3Qgbm90aWZpY2F0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG91dHB1dDoge30gYXMgU2hvd1RvYXN0T3V0cHV0LFxuICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICBmYWlsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport * as i0 from \"@angular/core\";\n//#endregion\n/**\n * CollectSignature Activity (Frontend)\n *\n * Collects a signature from a user through a dialog.\n * This activity runs on the frontend and requires user interaction.\n *\n * Execution Mode: frontend\n * Activity Type: workflow-activity:collect-signature\n *\n * Outcomes:\n * - Signed: User provided signature successfully\n * - Cancelled: User cancelled the signature dialog\n */\nexport class CollectSignatureActivity {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this.translationService = inject(AXTranslationService);\n }\n //#endregion\n //#region ---- AXPCommand Implementation ----\n async execute(input) {\n try {\n console.log(`[CollectSignatureActivity] Collecting signature from user: ${input.signerId}`);\n // Translate message if provided\n const message = input.message\n ? await this.translationService.translateAsync(input.message)\n : await this.translationService.translateAsync('@workflow-management:signature.activities.collect-signature.default-message');\n // Show signature collection dialog\n const dialogResult = await this.showSignatureDialog(message);\n if (dialogResult.cancelled) {\n console.log(`[CollectSignatureActivity] User cancelled signature collection`);\n return {\n success: true,\n data: {\n output: {\n signature: '',\n signedAt: new Date().toISOString(),\n },\n outcomes: {\n Cancelled: true,\n },\n },\n };\n }\n const signedAt = new Date().toISOString();\n console.log(`[CollectSignatureActivity] Signature collected successfully at ${signedAt}`);\n return {\n success: true,\n data: {\n output: {\n signature: dialogResult.signature,\n note: dialogResult.note,\n signedAt,\n },\n outcomes: {\n Signed: true,\n },\n },\n };\n }\n catch (error) {\n console.error(`[CollectSignatureActivity] Failed to collect signature:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to collect signature',\n },\n data: {\n output: {\n signature: '',\n signedAt: new Date().toISOString(),\n },\n outcomes: {\n Cancelled: true,\n },\n },\n };\n }\n }\n //#endregion\n //#region ---- Dialog Logic ----\n /**\n * Shows a dialog to collect signature from the user.\n */\n async showSignatureDialog(message) {\n const result = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle('@workflow-management:signature.activities.collect-signature.dialog-title')\n .setMessage(message)\n .setContext({ signature: '', note: '' })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@workflow-management:signature.activities.collect-signature.note-label', (field) => {\n field.path('note');\n field.largeTextBox({\n placeholder: '@workflow-management:signature.activities.collect-signature.note-placeholder',\n maxLength: 1000,\n });\n })\n .formField('@workflow-management:signature.activities.collect-signature.signature-label', (field) => {\n field.path('signature');\n field.customWidget(AXPWidgetsList.Editors.SignatureBox, {\n validations: [\n {\n rule: 'required',\n options: {\n message: '@workflow-management:signature.activities.collect-signature.signature-required',\n },\n },\n ],\n });\n });\n })\n .setActions((actions) => {\n actions\n .cancel('@general:actions.cancel.title')\n .submit('@workflow-management:signature.activities.collect-signature.submit-text');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return { signature: '', note: undefined, cancelled: true };\n }\n const formData = context;\n return {\n signature: formData['signature'] || '',\n note: formData['note'],\n cancelled: false,\n };\n });\n })\n .show();\n return result;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: CollectSignatureActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: CollectSignatureActivity }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: CollectSignatureActivity, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdC1zaWduYXR1cmUuYWN0aXZpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzL2NvbGxlY3Qtc2lnbmF0dXJlLmFjdGl2aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFzRHhELFlBQVk7QUFFWjs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBRHJDO1FBR0UsK0NBQStDO1FBRTlCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEQsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0E0SXBFO0lBMUlDLFlBQVk7SUFFWixpREFBaUQ7SUFFakQsS0FBSyxDQUFDLE9BQU8sQ0FDWCxLQUE0QjtRQUU1QixJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLDhEQUE4RCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUU1RixnQ0FBZ0M7WUFDaEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU87Z0JBQzNCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyw2RUFBNkUs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Y29yZSc7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7IEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlcic7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBXaWRnZXRzTGlzdCB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9jb21tb24nO1xuXG4vLyNyZWdpb24gLS0tLSAgIFR5cGVzICAgLS0tLVxuXG4vKipcbiAqIElucHV0IGZvciBDb2xsZWN0U2lnbmF0dXJlIGFjdGl2aXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3RTaWduYXR1cmVJbnB1dCB7XG4gIC8qKlxuICAgKiBTaWduYXR1cmUgcmVxdWVzdCBJRFxuICAgKi9cbiAgc2lnbmF0dXJlUmVxdWVzdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElEIG9mIHRoZSBzaWduZXJcbiAgICovXG4gIHNpZ25lcklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSBJRCBvZiB0aGUgZW50aXR5IHJlY29yZFxuICAgKi9cbiAgcmVmSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHR5cGUgKG1vZHVsZS5lbnRpdHkgZm9ybWF0KVxuICAgKi9cbiAgcmVmVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIHRvIGRpc3BsYXkgdG8gdGhlIHNpZ25lclxuICAgKi9cbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPdXRwdXQgZm9yIENvbGxlY3RTaWduYXR1cmUgYWN0aXZpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdFNpZ25hdHVyZU91dHB1dCB7XG4gIC8qKlxuICAgKiBTaWduYXR1cmUgZGF0YSAoYmFzZTY0IGVuY29kZWQgaW1hZ2Ugb3IgdGV4dClcbiAgICovXG4gIHNpZ25hdHVyZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBub3RlIGZyb20gdGhlIHNpZ25lclxuICAgKi9cbiAgbm90ZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gc2lnbmF0dXJlIHdhcyBjb2xsZWN0ZWRcbiAgICovXG4gIHNpZ25lZEF0OiBzdHJpbmc7XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vKipcbiAqIENvbGxlY3RTaWduYXR1cmUgQWN0aXZpdHkgKEZyb250ZW5kKVxuICogXG4gKiBDb2xsZWN0cyBhIHNpZ25hdHVyZSBmcm9tIGEgdXNlciB0aHJvdWdoIGEgZGlhbG9nLlxuICogVGhpcyBhY3Rpdml0eSBydW5zIG9uIHRoZSBmcm9udGVuZCBhbmQgcmVxdWlyZXMgdXNlciBpbnRlcmFjdGlvbi5cbiAqIFxuICogRXhlY3V0aW9uIE1vZGU6IGZyb250ZW5kXG4gKiBBY3Rpdml0eSBUeXBlOiB3b3JrZmxvdy1hY3Rpdml0eTpjb2xsZWN0LXNpZ25hdHVyZVxuICogXG4gKiBPdXRjb21lczpcbiAqIC0gU2lnbmVkOiBVc2VyIHByb3ZpZGVkIHNpZ25hdHVyZSBzdWNjZXNzZnVsbHlcbiAqIC0gQ2FuY2VsbGVkOiBVc2VyIGNhbmNlbGxlZCB0aGUgc2lnbmF0dXJlIGRpYWxvZ1xuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5XG4gIGltcGxlbWVudHMgQVhQQ29tbWFuZDxDb2xsZWN0U2lnbmF0dXJlSW5wdXQsIHsgb3V0cHV0OiBDb2xsZWN0U2lnbmF0dXJlT3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9PiB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsYXlvdXRCdWlsZGVyID0gaW5qZWN0KEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQVhQQ29tbWFuZCBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBDb2xsZWN0U2lnbmF0dXJlSW5wdXQsXG4gICk6IFByb21pc2U8QVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQ8eyBvdXRwdXQ6IENvbGxlY3RTaWduYXR1cmVPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5XSBDb2xsZWN0aW5nIHNpZ25hdHVyZSBmcm9tIHVzZXI6ICR7aW5wdXQuc2lnbmVySWR9YCk7XG5cbiAgICAgIC8vIFRyYW5zbGF0ZSBtZXNzYWdlIGlmIHByb3ZpZGVkXG4gICAgICBjb25zdCBtZXNzYWdlID0gaW5wdXQubWVzc2FnZVxuICAgICAgICA/IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGlucHV0Lm1lc3NhZ2UpXG4gICAgICAgIDogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnNpZ25hdHVyZS5hY3Rpdml0aWVzLmNvbGxlY3Qtc2lnbmF0dXJlLmRlZmF1bHQtbWVzc2FnZScpO1xuXG4gICAgICAvLyBTaG93IHNpZ25hdHVyZSBjb2xsZWN0aW9uIGRpYWxvZ1xuICAgICAgY29uc3QgZGlhbG9nUmVzdWx0ID0gYXdhaXQgdGhpcy5zaG93U2lnbmF0dXJlRGlhbG9nKG1lc3NhZ2UpO1xuXG4gICAgICBpZiAoZGlhbG9nUmVzdWx0LmNhbmNlbGxlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgW0NvbGxlY3RTaWduYXR1cmVBY3Rpdml0eV0gVXNlciBjYW5jZWxsZWQgc2lnbmF0dXJlIGNvbGxlY3Rpb25gKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgICBzaWduYXR1cmU6ICcnLFxuICAgICAgICAgICAgICBzaWduZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG91dGNvbWVzOiB7XG4gICAgICAgICAgICAgIENhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2lnbmVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGBbQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5XSBTaWduYXR1cmUgY29sbGVjdGVkIHN1Y2Nlc3NmdWxseSBhdCAke3NpZ25lZEF0fWApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgICBzaWduYXR1cmU6IGRpYWxvZ1Jlc3VsdC5zaWduYXR1cmUsXG4gICAgICAgICAgICBub3RlOiBkaWFsb2dSZXN1bHQubm90ZSxcbiAgICAgICAgICAgIHNpZ25lZEF0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIFNpZ25lZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5XSBGYWlsZWQgdG8gY29sbGVjdCBzaWduYXR1cmU6YCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgIHRleHQ6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjb2xsZWN0IHNpZ25hdHVyZScsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIHNpZ25hdHVyZTogJycsXG4gICAgICAgICAgICBzaWduZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3V0Y29tZXM6IHtcbiAgICAgICAgICAgIENhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIERpYWxvZyBMb2dpYyAgIC0tLS1cblxuICAvKipcbiAgICogU2hvd3MgYSBkaWFsb2cgdG8gY29sbGVjdCBzaWduYXR1cmUgZnJvbSB0aGUgdXNlci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2hvd1NpZ25hdHVyZURpYWxvZyhcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICk6IFByb21pc2U8eyBzaWduYXR1cmU6IHN0cmluZzsgbm90ZT86IHN0cmluZzsgY2FuY2VsbGVkOiBib29sZWFuIH0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmxheW91dEJ1aWxkZXJcbiAgICAgIC5jcmVhdGUoKVxuICAgICAgLmRpYWxvZzx7IHNpZ25hdHVyZTogc3RyaW5nOyBub3RlPzogc3RyaW5nOyBjYW5jZWxsZWQ6IGJvb2xlYW4gfT4oKGRpYWxvZykgPT4ge1xuICAgICAgICBkaWFsb2dcbiAgICAgICAgICAuc2V0VGl0bGUoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnNpZ25hdHVyZS5hY3Rpdml0aWVzLmNvbGxlY3Qtc2lnbmF0dXJlLmRpYWxvZy10aXRsZScpXG4gICAgICAgICAgLnNldE1lc3NhZ2UobWVzc2FnZSlcbiAgICAgICAgICAuc2V0Q29udGV4dCh7IHNpZ25hdHVyZTogJycsIG5vdGU6ICcnIH0pXG4gICAgICAgICAgLmNvbnRlbnQoKGZsZXgpID0+IHtcbiAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQHdvcmtmbG93LW1hbmFnZW1lbnQ6c2lnbmF0dXJlLmFjdGl2aXRpZXMuY29sbGVjdC1zaWduYXR1cmUubm90ZS1sYWJlbCcsIChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ25vdGUnKTtcbiAgICAgICAgICAgICAgICBmaWVsZC5sYXJnZVRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDpzaWduYXR1cmUuYWN0aXZpdGllcy5jb2xsZWN0LXNpZ25hdHVyZS5ub3RlLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgICAgIG1heExlbmd0aDogMTAwMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQHdvcmtmbG93LW1hbmFnZW1lbnQ6c2lnbmF0dXJlLmFjdGl2aXRpZXMuY29sbGVjdC1zaWduYXR1cmUuc2lnbmF0dXJlLWxhYmVsJywgKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucGF0aCgnc2lnbmF0dXJlJyk7XG4gICAgICAgICAgICAgICAgZmllbGQuY3VzdG9tV2lkZ2V0KEFYUFdpZGdldHNMaXN0LkVkaXRvcnMuU2lnbmF0dXJlQm94LCB7XG4gICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcnVsZTogJ3JlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6c2lnbmF0dXJlLmFjdGl2aXRpZXMuY29sbGVjdC1zaWduYXR1cmUuc2lnbmF0dXJlLXJlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2V0QWN0aW9ucygoYWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgYWN0aW9uc1xuICAgICAgICAgICAgICAuY2FuY2VsKCdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScpXG4gICAgICAgICAgICAgIC5zdWJtaXQoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnNpZ25hdHVyZS5hY3Rpdml0aWVzLmNvbGxlY3Qtc2lnbmF0dXJlLnN1Ym1pdC10ZXh0Jyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAub25BY3Rpb24oYXN5bmMgKGRpYWxvZ1JlZikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGRpYWxvZ1JlZi5jb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBkaWFsb2dSZWYuYWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIWNvbnRleHQgfHwgYWN0aW9uID09PSAnY2FuY2VsJykge1xuICAgICAgICAgICAgICByZXR1cm4geyBzaWduYXR1cmU6ICcnLCBub3RlOiB1bmRlZmluZWQsIGNhbmNlbGxlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBjb250ZXh0IGFzIHsgc2lnbmF0dXJlPzogc3RyaW5nOyBub3RlPzogc3RyaW5nIH07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzaWduYXR1cmU6IGZvcm1EYXRhWydzaWduYXR1cmUnXSB8fCAnJyxcbiAgICAgICAgICAgICAgbm90ZTogZm9ybURhdGFbJ25vdGUnXSxcbiAgICAgICAgICAgICAgY2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnNob3coKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\nimport * as i0 from \"@angular/core\";\n/**\n * Workflow Activities Definition Provider\n *\n * Provides activity definitions (metadata only).\n * Activity definitions contain metadata for UI and tooling.\n * The `name` property is used as the command key for execution.\n * Reads from entity service (mock data).\n */\nexport class AXMWorkflowActivitiesDefinitionProvider {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.entityService = inject(AXPEntityService);\n this.activityDefinitionService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.activityDefinition.name).data();\n }\n //#endregion\n //#region ---- AXPActivityProvider Implementation ----\n async getList(categoryId) {\n // Use 'equal' operator to filter by category field\n const result = await this.activityDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'category',\n operator: {\n type: 'equal',\n },\n value: categoryId,\n }]\n }\n });\n return result.items;\n }\n async getById(name) {\n // Try to find by name field first, then by type field\n const byName = await this.activityDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n if (byName.items && byName.items.length > 0) {\n return byName.items[0];\n }\n // Try by type field\n const byType = await this.activityDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'type',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n if (byType.items && byType.items.length > 0) {\n return byType.items[0];\n }\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowActivitiesDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowActivitiesDefinitionProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowActivitiesDefinitionProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctYWN0aXZpdGllcy1kZWZpbml0aW9uLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy93b3JrZmxvdy1hY3Rpdml0aWVzLWRlZmluaXRpb24ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUU1Qzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLHVDQUF1QztJQURwRDtRQUVJLCtDQUErQztRQUU5QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELDhCQUF5QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUM3RCxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFDdEIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQzlDLENBQUMsSUFBSSxFQUFZLENBQUM7S0FzRXRCO0lBcEVHLFlBQVk7SUFFWiwwREFBMEQ7SUFFMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFrQjtRQUM1QixtREFBbUQ7UUFDbkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDO1lBQ3RELElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLENBQUM7d0JBQ04sS0FBSyxFQUFFLFVBQVU7d0JBQ2pCLFFBQVEsRUFBRTs0QkFDTixJQUFJLEVBQUUsT0FBTzt5QkFDaEI7d0JBQ0QsS0FBSyxFQUFFLFVBQVU7cUJBQ3BCLENBQUM7YUFDTDtTQUNKLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLEtBQWdDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWTtRQUN0QixzREFBc0Q7UUFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDO1lBQ3RELElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLENBQUM7d0JBQ04sS0FBSyxFQUFFLE1BQU07d0JBQ2IsUUFBUSxFQUFFOzRCQUNOLElBQUksRUFBRSxPQUFPO3lCQUNoQjt3QkFDRCxLQUFLLEVBQUUsSUFBSTtxQkFDZCxDQUFDO2FBQ0w7U0FDSixDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBMEIsQ0FBQztRQUNwRCxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQztZQUN0RCxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxFQUFFO2dCQUNKLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxDQUFDO3dCQUNOLEtBQUssRUFBRSxNQUFNO3dCQUNiLFFBQVEsRUFBRTs0QkFDTixJQUFJLEVBQUUsT0FBTzt5QkFDaEI7d0JBQ0QsS0FBSyxFQUFFLElBQUk7cUJBQ2QsQ0FBQzthQUNMO1NBQ0osQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQTBCLENBQUM7UUFDcEQsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7K0dBMUVRLHVDQUF1QzttSEFBdkMsdUNBQXVDOzs0RkFBdkMsdUNBQXVDO2tCQURuRCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBBY3Rpdml0eVByb3ZpZGVyLCBBWFBBY3Rpdml0eURlZmluaXRpb24gfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0JztcblxuLyoqXG4gKiBXb3JrZmxvdyBBY3Rpdml0aWVzIERlZmluaXRpb24gUHJvdmlkZXJcbiAqIFxuICogUHJvdmlkZXMgYWN0aXZpdHkgZGVmaW5pdGlvbnMgKG1ldGFkYXRhIG9ubHkpLlxuICogQWN0aXZpdHkgZGVmaW5pdGlvbnMgY29udGFpbiBtZXRhZGF0YSBmb3IgVUkgYW5kIHRvb2xpbmcuXG4gKiBUaGUgYG5hbWVgIHByb3BlcnR5IGlzIHVzZWQgYXMgdGhlIGNvbW1hbmQga2V5IGZvciBleGVjdXRpb24uXG4gKiBSZWFkcyBmcm9tIGVudGl0eSBzZXJ2aWNlIChtb2NrIGRhdGEpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNV29ya2Zsb3dBY3Rpdml0aWVzRGVmaW5pdGlvblByb3ZpZGVyIGltcGxlbWVudHMgQVhQQWN0aXZpdHlQcm92aWRlciB7XG4gICAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICAgICAgUm9vdENvbmZpZy5tb2R1bGUubmFtZSxcbiAgICAgICAgUm9vdENvbmZpZy5lbnRpdGllcy5hY3Rpdml0eURlZmluaXRpb24ubmFtZVxuICAgICkuZGF0YTxhbnksIGFueT4oKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBBWFBBY3Rpdml0eVByb3ZpZGVyIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gICAgYXN5bmMgZ2V0TGlzdChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIC8vIFVzZSAnZXF1YWwnIG9wZXJhdG9yIHRvIGZpbHRlciBieSBjYXRlZ29yeSBmaWVsZFxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEwMDAsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdjYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnlJZCxcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVtcyBhcyBBWFBBY3Rpdml0eURlZmluaXRpb25bXTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRCeUlkKG5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIC8vIFRyeSB0byBmaW5kIGJ5IG5hbWUgZmllbGQgZmlyc3QsIHRoZW4gYnkgdHlwZSBmaWVsZFxuICAgICAgICBjb25zdCBieU5hbWUgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaWYgKGJ5TmFtZS5pdGVtcyAmJiBieU5hbWUuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJ5TmFtZS5pdGVtc1swXSBhcyBBWFBBY3Rpdml0eURlZmluaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcnkgYnkgdHlwZSBmaWVsZFxuICAgICAgICBjb25zdCBieVR5cGUgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICd0eXBlJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChieVR5cGUuaXRlbXMgJiYgYnlUeXBlLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBieVR5cGUuaXRlbXNbMF0gYXMgQVhQQWN0aXZpdHlEZWZpbml0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cbn1cblxuIl19","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntityDefinitionRegistryService, AXPEntityFormBuilderService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPCreateEntityActivity {\n constructor() {\n this.entityForm = inject(AXPEntityFormBuilderService);\n this.entityService = inject(AXPEntityDefinitionRegistryService);\n this.translationService = inject(AXTranslationService);\n this.context = {};\n }\n async execute(input) {\n const entityRef = await this.entityService.resolve(input.module, input.entity);\n let dialogRef;\n try {\n let chain = this.entityForm.entity(`${input.module}.${input.entity}`).create({});\n chain.actions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.create.title');\n });\n dialogRef = await chain.show();\n if (dialogRef.action() == 'cancel') {\n dialogRef.close();\n return {\n success: false,\n };\n }\n else if (dialogRef.action() == 'submit') {\n dialogRef.setLoading(true);\n const context = dialogRef.context();\n const createFn = entityRef.commands?.create?.execute;\n if (!createFn) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.create-command-unavailable'),\n },\n };\n }\n const result = await createFn(context);\n if (result) {\n dialogRef.close();\n return {\n success: true,\n data: {\n outcomes: {\n \"Submitted\": true,\n },\n output: {\n id: result.id,\n }\n },\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n }\n else {\n //todo\n return ({\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.command-no-result'),\n },\n //todo\n data: {\n outcomes: {\n 'Submitted': true,\n },\n output: {\n \"id\": '-1'\n }\n }\n });\n }\n }\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-action'),\n },\n };\n }\n catch (error) {\n return {\n success: false,\n message: {\n text: error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.entity.create-failed'),\n },\n };\n }\n finally {\n if (dialogRef) {\n dialogRef.setLoading(false);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPCreateEntityActivity, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPCreateEntityActivity, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPCreateEntityActivity, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXkuY3JlYXRlLmFjdGl2aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy9lbnRpeS5jcmVhdGUuYWN0aXZpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFakgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBa0JuRCxNQUFNLE9BQU8sdUJBQXVCO0lBSHBDO1FBSVUsZUFBVSxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDM0QsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFaEQsWUFBTyxHQUFHLEVBQUUsQ0FBQztLQThGeEI7SUE1RkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUF1QjtRQUNuQyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9FLElBQUksU0FBYyxDQUFDO1FBRW5CLElBQUksQ0FBQztZQUNILElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9B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QUM5QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7K0dBbEdVLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBFbnRpdHlEZWZpbml0aW9uUmVnaXN0cnlTZXJ2aWNlLCBBWFBFbnRpdHlGb3JtQnVpbGRlclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhQQ29tbWFuZCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vcnVudGltZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUVuaXR5SW5wdXR7XG4gIG1vZHVsZSA6IHN0cmluZztcbiAgZW50aXR5IDogc3RyaW5nO1xuXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVFbml0eU91dHB1dCB7XG4gIGlkOnN0cmluZztcbn1cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQQ3JlYXRlRW50aXR5QWN0aXZpdHkgaW1wbGVtZW50cyBBWFBDb21tYW5kPENyZWF0ZUVuaXR5SW5wdXQsICB7IG91dHB1dDogQ3JlYXRlRW5pdHlPdXRwdXQ7IG91dGNvbWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0+IHtcbiAgcHJpdmF0ZSBlbnRpdHlGb3JtID0gaW5qZWN0KEFYUEVudGl0eUZvcm1CdWlsZGVyU2VydmljZSk7XG4gIHByaXZhdGUgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlEZWZpbml0aW9uUmVnaXN0cnlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBjb250ZXh0ID0ge307XG5cbiAgYXN5bmMgZXhlY3V0ZShpbnB1dDogQ3JlYXRlRW5pdHlJbnB1dCk6IFByb21pc2U8QVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQ8eyBvdXRwdXQ6IENyZWF0ZUVuaXR5T3V0cHV0OyBvdXRjb21lczogUmVjb3JkPHN0cmluZywgYW55PiB9Pj4ge1xuICAgIGNvbnN0IGVudGl0eVJlZiA9IGF3YWl0IHRoaXMuZW50aXR5U2VydmljZS5yZXNvbHZlKGlucHV0Lm1vZHVsZSwgaW5wdXQuZW50aXR5KTtcblxuICAgIGxldCBkaWFsb2dSZWY6IGFueTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgY2hhaW4gPSB0aGlzLmVudGl0eUZvcm0uZW50aXR5KGAke2lucHV0Lm1vZHVsZX0uJHtpbnB1dC5lbnRpdHl9YCkuY3JlYXRlKHt9KTtcbiAgICAgIGNoYWluLmFjdGlvbnMoKGFjdGlvbnMpID0+IHtcbiAgICAgICAgYWN0aW9ucy5jYW5jZWwoJ0BnZW5lcmFsOmFjdGlvbnMuY2FuY2VsLnRpdGxlJyk7XG4gICAgICAgIGFjdGlvbnMuc3VibWl0KCdAZ2VuZXJhbDphY3Rpb25zLmNyZWF0ZS50aXRsZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGRpYWxvZ1JlZiA9IGF3YWl0IGNoYWluLnNob3coKTtcbiAgICAgIGlmIChkaWFsb2dSZWYuYWN0aW9uKCkgPT0gJ2NhbmNlbCcpIHtcbiAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGRpYWxvZ1JlZi5hY3Rpb24oKSA9PSAnc3VibWl0Jykge1xuICAgICAgICBkaWFsb2dSZWYuc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGRpYWxvZ1JlZi5jb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUZuID0gZW50aXR5UmVmLmNvbW1hbmRzPy5jcmVhdGU/LmV4ZWN1dGUgYXMgKHBheWxvYWQ6IGFueSkgPT4gUHJvbWlzZTx7aWQgOiBzdHJpbmd9PjtcblxuICAgICAgICBpZiAoIWNyZWF0ZUZuKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgICB0ZXh0OiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQGdlbmVyYWw6bWVzc2FnZXMuZW50aXR5LmNyZWF0ZS1jb21tYW5kLXVuYXZhaWxhYmxlJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlRm4oY29udGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgb3V0Y29tZXMgOiB7XG4gICAgICAgICAgICAgICAgXCJTdWJtaXR0ZWRcIiA6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG91dHB1dCA6IHtcbiAgICAgICAgICAgICAgICBpZCA6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgdGV4dDogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BnZW5lcmFsOm1lc3NhZ2VzLmdlbmVyaWMuc3VjY2Vzcy5kZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAvL3RvZG9cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQGdlbmVyYWw6bWVzc2FnZXMuZW50aXR5LmNvbW1hbmQtbm8tcmVzdWx0JyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC8vdG9kb1xuICAgICAgICAgICAgICBkYXRhIDoge1xuICAgICAgICAgICAgICAgIG91dGNvbWVzIDoge1xuICAgICAgICAgICAgICAgICAgJ1N1Ym1pdHRlZCcgOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3V0cHV0IDoge1xuICAgICAgICAgICAgICAgICAgXCJpZFwiIDogJy0xJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgdGV4dDogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BnZW5lcmFsOm1lc3NhZ2VzLmVudGl0eS5pbnZhbGlkLWFjdGlvbicpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgICAgOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQGdlbmVyYWw6bWVzc2FnZXMuZW50aXR5LmNyZWF0ZS1mYWlsZWQnKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChkaWFsb2dSZWYpIHtcbiAgICAgICAgZGlhbG9nUmVmLnNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","/**\n * Workflow Plugin\n *\n * Marks an entity as workflow-capable. This plugin does NOT configure workflows;\n * it only indicates that the entity can participate in workflows.\n *\n * Workflow bindings are configured in Workflow Management (workflow definition → bindings),\n * not in the entity definition.\n *\n * This plugin:\n * - Adds workflow capability marker to entity extensions\n * - Enables workflow trigger middleware to detect workflow-capable entities\n * - Provides UI hooks for workflow-related features (future enhancement)\n *\n * Usage:\n * ```typescript\n * plugins: [\n * { name: 'workflow' }, // Entity is workflow-capable\n * ]\n * ```\n */\nexport const workflowPlugin = {\n name: 'workflow',\n order: 50, // After core plugins (40-45), before status/archive (60-70)\n apply: (ctx) => {\n // Mark entity as workflow-capable in extensions\n ctx.entity.extensions ??= {};\n ctx.entity.extensions.workflow = {\n enabled: true,\n };\n // Note: No properties, actions, or views are added by this plugin.\n // It only marks the entity as workflow-capable.\n // Actual workflow bindings are configured in Workflow Management.\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy93b3JrZmxvdy1wbHVnaW4vd29ya2Zsb3cucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBMEI7SUFDbkQsSUFBSSxFQUFFLFVBQVU7SUFDaEIsS0FBSyxFQUFFLEVBQUUsRUFBRSw0REFBNEQ7SUFDdkUsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDYixnREFBZ0Q7UUFDL0MsR0FBRyxDQUFDLE1BQWMsQ0FBQyxVQUFVLEtBQUssRUFBRSxDQUFDO1FBQ3JDLEdBQUcsQ0FBQyxNQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRztZQUN4QyxPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUM7UUFFRixtRUFBbUU7UUFDbkUsZ0RBQWdEO1FBQ2hELGtFQUFrRTtJQUNwRSxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEVudGl0eUFjdGlvblBsdWdpbiB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5cbi8qKlxuICogV29ya2Zsb3cgUGx1Z2luXG4gKlxuICogTWFya3MgYW4gZW50aXR5IGFzIHdvcmtmbG93LWNhcGFibGUuIFRoaXMgcGx1Z2luIGRvZXMgTk9UIGNvbmZpZ3VyZSB3b3JrZmxvd3M7XG4gKiBpdCBvbmx5IGluZGljYXRlcyB0aGF0IHRoZSBlbnRpdHkgY2FuIHBhcnRpY2lwYXRlIGluIHdvcmtmbG93cy5cbiAqXG4gKiBXb3JrZmxvdyBiaW5kaW5ncyBhcmUgY29uZmlndXJlZCBpbiBXb3JrZmxvdyBNYW5hZ2VtZW50ICh3b3JrZmxvdyBkZWZpbml0aW9uIOKGkiBiaW5kaW5ncyksXG4gKiBub3QgaW4gdGhlIGVudGl0eSBkZWZpbml0aW9uLlxuICpcbiAqIFRoaXMgcGx1Z2luOlxuICogLSBBZGRzIHdvcmtmbG93IGNhcGFiaWxpdHkgbWFya2VyIHRvIGVudGl0eSBleHRlbnNpb25zXG4gKiAtIEVuYWJsZXMgd29ya2Zsb3cgdHJpZ2dlciBtaWRkbGV3YXJlIHRvIGRldGVjdCB3b3JrZmxvdy1jYXBhYmxlIGVudGl0aWVzXG4gKiAtIFByb3ZpZGVzIFVJIGhvb2tzIGZvciB3b3JrZmxvdy1yZWxhdGVkIGZlYXR1cmVzIChmdXR1cmUgZW5oYW5jZW1lbnQpXG4gKlxuICogVXNhZ2U6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwbHVnaW5zOiBbXG4gKiAgIHsgbmFtZTogJ3dvcmtmbG93JyB9LCAvLyBFbnRpdHkgaXMgd29ya2Zsb3ctY2FwYWJsZVxuICogXVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCB3b3JrZmxvd1BsdWdpbjogQVhQRW50aXR5QWN0aW9uUGx1Z2luID0ge1xuICBuYW1lOiAnd29ya2Zsb3cnLFxuICBvcmRlcjogNTAsIC8vIEFmdGVyIGNvcmUgcGx1Z2lucyAoNDAtNDUpLCBiZWZvcmUgc3RhdHVzL2FyY2hpdmUgKDYwLTcwKVxuICBhcHBseTogKGN0eCkgPT4ge1xuICAgIC8vIE1hcmsgZW50aXR5IGFzIHdvcmtmbG93LWNhcGFibGUgaW4gZXh0ZW5zaW9uc1xuICAgIChjdHguZW50aXR5IGFzIGFueSkuZXh0ZW5zaW9ucyA/Pz0ge307XG4gICAgKGN0eC5lbnRpdHkgYXMgYW55KS5leHRlbnNpb25zLndvcmtmbG93ID0ge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgLy8gTm90ZTogTm8gcHJvcGVydGllcywgYWN0aW9ucywgb3Igdmlld3MgYXJlIGFkZGVkIGJ5IHRoaXMgcGx1Z2luLlxuICAgIC8vIEl0IG9ubHkgbWFya3MgdGhlIGVudGl0eSBhcyB3b3JrZmxvdy1jYXBhYmxlLlxuICAgIC8vIEFjdHVhbCB3b3JrZmxvdyBiaW5kaW5ncyBhcmUgY29uZmlndXJlZCBpbiBXb3JrZmxvdyBNYW5hZ2VtZW50LlxuICB9LFxufTtcblxuIl19","import { NgModule } from '@angular/core';\nimport { AXP_ENTITY_ACTION_PLUGIN } from '@acorex/platform/layout/entity';\nimport { workflowPlugin } from './workflow.plugin';\nimport * as i0 from \"@angular/core\";\n/**\n * Workflow Plugin Module\n *\n * Registers the workflow plugin that marks entities as workflow-capable.\n */\nexport class AXMWorkflowPluginModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowPluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowPluginModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowPluginModule, providers: [\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: workflowPlugin,\n multi: true,\n },\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowPluginModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: workflowPlugin,\n multi: true,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcGx1Z2luLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvd29ya2Zsb3ctcGx1Z2luL3dvcmtmbG93LXBsdWdpbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRW5EOzs7O0dBSUc7QUFVSCxNQUFNLE9BQU8sdUJBQXVCOytHQUF2Qix1QkFBdUI7Z0hBQXZCLHVCQUF1QjtnSEFBdkIsdUJBQXVCLGFBUnZCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLHdCQUF3QjtnQkFDakMsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjs7NEZBRVUsdUJBQXVCO2tCQVRuQyxRQUFRO21CQUFDO29CQUNSLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsd0JBQXdCOzRCQUNqQyxRQUFRLEVBQUUsY0FBYzs0QkFDeEIsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQX0VOVElUWV9BQ1RJT05fUExVR0lOIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IHdvcmtmbG93UGx1Z2luIH0gZnJvbSAnLi93b3JrZmxvdy5wbHVnaW4nO1xuXG4vKipcbiAqIFdvcmtmbG93IFBsdWdpbiBNb2R1bGVcbiAqXG4gKiBSZWdpc3RlcnMgdGhlIHdvcmtmbG93IHBsdWdpbiB0aGF0IG1hcmtzIGVudGl0aWVzIGFzIHdvcmtmbG93LWNhcGFibGUuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9FTlRJVFlfQUNUSU9OX1BMVUdJTixcbiAgICAgIHVzZVZhbHVlOiB3b3JrZmxvd1BsdWdpbixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTVdvcmtmbG93UGx1Z2luTW9kdWxlIHt9XG5cbiJdfQ==","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\nimport * as i0 from \"@angular/core\";\n/**\n * Provider for activity categories.\n * Reads categories from entity service (mock data).\n */\nexport class AXCCategoryProvider {\n constructor() {\n this.entityService = inject(AXPEntityService);\n /** Category entity is provided by category plugin (ActivityDefinition → ActivityDefinitionCategory). */\n this.categoryService = this.entityService.withEntity(RootConfig.module.name, 'ActivityDefinitionCategory').data();\n }\n async getList(parentId) {\n const list = [];\n if (parentId) {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n }]\n }\n });\n list.push(...result.items);\n }\n else {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n });\n list.push(...result.items);\n }\n return list;\n }\n async getById(id) {\n return await this.categoryService.byKey(id);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXCCategoryProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXCCategoryProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXCCategoryProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL2VuZ2luZS9jYXRlZ29yeS5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUV6Qzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBR21CLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUQsd0dBQXdHO1FBQ2hHLG9CQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQ3JELFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUN0Qiw0QkFBNEIsQ0FDN0IsQ0FBQyxJQUFJLEVBQVksQ0FBQztLQW1DcEI7SUFqQ0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFpQjtRQUM3QixNQUFNLElBQUksR0FBMEIsRUFBRSxDQUFDO1FBRXZDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUM5QyxJQUFJLEVBQUUsQ0FBQztnQkFDUCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUU7b0JBQ04sS0FBSyxFQUFFLEtBQUs7b0JBQ1osT0FBTyxFQUFFLENBQUM7NEJBQ1IsS0FBSyxFQUFFLFVBQVU7NEJBQ2pCLFFBQVEsRUFBRTtnQ0FDUixJQUFJLEVBQUUsT0FBTzs2QkFDZDs0QkFDRCxLQUFLLEVBQUUsUUFBUTt5QkFDaEIsQ0FBQztpQkFDSDthQUNGLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUM5QyxJQUFJLEVBQUUsQ0FBQztnQkFDUCxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBVTtRQUN0QixPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQzsrR0F6Q1UsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBBY3Rpdml0eUNhdGVnb3J5UHJvdmlkZXIsIEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRW50aXR5U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3QnO1xuXG4vKipcbiAqIFByb3ZpZGVyIGZvciBhY3Rpdml0eSBjYXRlZ29yaWVzLlxuICogUmVhZHMgY2F0ZWdvcmllcyBmcm9tIGVudGl0eSBzZXJ2aWNlIChtb2NrIGRhdGEpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhDQ2F0ZWdvcnlQcm92aWRlciBpbXBsZW1lbnRzIEFYUEFjdGl2aXR5Q2F0ZWdvcnlQcm92aWRlciB7XG4gIFxuICBwcml2YXRlIHJlYWRvbmx5IGVudGl0eVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U2VydmljZSk7XG4gIC8qKiBDYXRlZ29yeSBlbnRpdHkgaXMgcHJvdmlkZWQgYnkgY2F0ZWdvcnkgcGx1Z2luIChBY3Rpdml0eURlZmluaXRpb24g4oaSIEFjdGl2aXR5RGVmaW5pdGlvbkNhdGVnb3J5KS4gKi9cbiAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICdBY3Rpdml0eURlZmluaXRpb25DYXRlZ29yeSdcbiAgKS5kYXRhPGFueSwgYW55PigpO1xuXG4gIGFzeW5jIGdldExpc3QocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXT4ge1xuICAgIGNvbnN0IGxpc3Q6IEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXSA9IFtdO1xuICAgIFxuICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYXRlZ29yeVNlcnZpY2UucXVlcnkoe1xuICAgICAgICBza2lwOiAwLFxuICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgIGZpZWxkOiAncGFyZW50SWQnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2VxdWFsJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWx1ZTogcGFyZW50SWQsXG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsaXN0LnB1c2goLi4ucmVzdWx0Lml0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYXRlZ29yeVNlcnZpY2UucXVlcnkoe1xuICAgICAgICBza2lwOiAwLFxuICAgICAgICB0YWtlOiAxMDAwLFxuICAgICAgfSk7XG4gICAgICBsaXN0LnB1c2goLi4ucmVzdWx0Lml0ZW1zKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBhc3luYyBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jYXRlZ29yeVNlcnZpY2UuYnlLZXkoaWQpO1xuICB9XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\nimport * as i0 from \"@angular/core\";\n/**\n * Workflow Category Provider\n *\n * Provides workflow categories from entity service.\n * Reads from entity service (mock data or API).\n */\nexport class AXMWorkflowCategoryProvider {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.entityService = inject(AXPEntityService);\n this.categoryService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name + 'Category')\n .data();\n }\n //#endregion\n //#region ---- AXPWorkflowCategoryProvider Implementation ----\n async getList(parentId) {\n const filters = [];\n if (parentId === undefined) {\n // Root categories: parentId is null or undefined\n filters.push({\n field: 'parentId',\n operator: {\n type: 'isNull',\n },\n });\n }\n else {\n // Child categories: parentId matches\n filters.push({\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: parentId,\n });\n }\n const result = await this.categoryService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters,\n },\n });\n return (result.items || []);\n }\n async getById(id) {\n const result = await this.categoryService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: id,\n }],\n },\n });\n if (result.items && result.items.length > 0) {\n return result.items[0];\n }\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowCategoryProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowCategoryProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowCategoryProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctY2F0ZWdvcnkucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL2VuZ2luZS93b3JrZmxvd3Mvd29ya2Zsb3ctY2F0ZWdvcnkucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUU1Qzs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTywyQkFBMkI7SUFEeEM7UUFFSSwrQ0FBK0M7UUFFOUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6QyxvQkFBZSxHQUFHLElBQUksQ0FBQyxhQUFhO2FBQ2hELFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7YUFDNUYsSUFBSSxFQUFZLENBQUM7S0FnRXpCO0lBOURHLFlBQVk7SUFFWixrRUFBa0U7SUFFbEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFpQjtRQUMzQixNQUFNLE9BQU8sR0FBVSxFQUFFLENBQUM7UUFFMUIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsaURBQWlEO1lBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLFFBQVEsRUFBRTtvQkFDTixJQUFJLEVBQUUsUUFBUTtpQkFDakI7YUFDSixDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNKLHFDQUFxQztZQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNULEtBQUssRUFBRSxVQUFVO2dCQUNqQixRQUFRLEVBQUU7b0JBQ04sSUFBSSxFQUFFLE9BQU87aUJBQ2hCO2dCQUNELEtBQUssRUFBRSxRQUFRO2FBQ2xCLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQzVDLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTzthQUNWO1NBQ0osQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUEwQixDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQVU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUM1QyxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxFQUFFO2dCQUNKLEtBQUssRUFBRSxLQUFLO2dCQUNaLE9BQU8sRUFBRSxDQUFDO3dCQUNOLEtBQUssRUFBRSxJQUFJO3dCQUNYLFFBQVEsRUFBRTs0QkFDTixJQUFJLEVBQUUsT0FBTzt5QkFDaEI7d0JBQ0QsS0FBSyxFQUFFLEVBQUU7cUJBQ1osQ0FBQzthQUNMO1NBQ0osQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQXdCLENBQUM7UUFDbEQsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7K0dBbkVRLDJCQUEyQjttSEFBM0IsMkJBQTJCOzs0RkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0NhdGVnb3J5UHJvdmlkZXIsIEFYUFdvcmtmbG93Q2F0ZWdvcnkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0JztcblxuLyoqXG4gKiBXb3JrZmxvdyBDYXRlZ29yeSBQcm92aWRlclxuICogXG4gKiBQcm92aWRlcyB3b3JrZmxvdyBjYXRlZ29yaWVzIGZyb20gZW50aXR5IHNlcnZpY2UuXG4gKiBSZWFkcyBmcm9tIGVudGl0eSBzZXJ2aWNlIChtb2NrIGRhdGEgb3IgQVBJKS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTVdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciBpbXBsZW1lbnRzIEFYUFdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciB7XG4gICAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5U2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZVxuICAgICAgICAud2l0aEVudGl0eShSb290Q29uZmlnLm1vZHVsZS5uYW1lLCBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93RGVmaW5pdGlvbi5uYW1lICsgJ0NhdGVnb3J5JylcbiAgICAgICAgLmRhdGE8YW55LCBhbnk+KCk7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQVhQV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gICAgYXN5bmMgZ2V0TGlzdChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDYXRlZ29yeVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IGFueVtdID0gW107XG5cbiAgICAgICAgaWYgKHBhcmVudElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIFJvb3QgY2F0ZWdvcmllczogcGFyZW50SWQgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2lzTnVsbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2hpbGQgY2F0ZWdvcmllczogcGFyZW50SWQgbWF0Y2hlc1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3BhcmVudElkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHBhcmVudElkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNhdGVnb3J5U2VydmljZS5xdWVyeSh7XG4gICAgICAgICAgICBza2lwOiAwLFxuICAgICAgICAgICAgdGFrZTogMTAwMCxcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIChyZXN1bHQuaXRlbXMgfHwgW10pIGFzIEFYUFdvcmtmbG93Q2F0ZWdvcnlbXTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93Q2F0ZWdvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYXRlZ29yeVNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaWQsXG4gICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzdWx0Lml0ZW1zICYmIHJlc3VsdC5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZW1zWzBdIGFzIEFYUFdvcmtmbG93Q2F0ZWdvcnk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\nimport * as i0 from \"@angular/core\";\n/**\n * Workflow Definition Provider\n *\n * Provides workflow definitions for UI and tooling.\n * The `name` property is used as the workflow identifier.\n * Reads from entity service (mock data or API).\n */\nexport class AXMWorkflowDefinitionProvider {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.entityService = inject(AXPEntityService);\n this.workflowDefinitionService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name)\n .data();\n }\n //#endregion\n //#region ---- AXPWorkflowProvider Implementation ----\n async getList(categoryId) {\n // Same as report: filter by categoryIds array with 'contains'\n const result = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1000,\n filter: {\n logic: 'and',\n filters: [{\n field: 'categoryIds',\n operator: {\n type: 'contains',\n },\n value: categoryId,\n }]\n }\n });\n // Convert entity data to workflow definition format\n return (result.items || []).map((item) => ({\n schemaVersion: item.schemaVersion || 'acorex-platform-workflow/v1',\n name: item.name || item.id || '',\n title: item.title || item.name || item.id || null,\n description: item.description || null,\n variables: item.variables || [],\n inputs: item.inputs || [],\n outputs: item.outputs || [],\n graph: item.graph,\n customProperties: item.customProperties || {},\n extensions: item.extensions || {},\n }));\n }\n async getByName(name) {\n // Try to find by name field first, then by id field\n const byName = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n if (byName.items && byName.items.length > 0) {\n const entity = byName.items[0];\n return {\n schemaVersion: entity.schemaVersion || 'acorex-platform-workflow/v1',\n name: entity.name,\n title: entity.title || null,\n description: entity.description || null,\n variables: entity.variables || [],\n inputs: entity.inputs || [],\n outputs: entity.outputs || [],\n graph: entity.graph,\n customProperties: entity.customProperties || {},\n extensions: entity.extensions || {},\n };\n }\n // Try by id field\n const byId = await this.workflowDefinitionService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'id',\n operator: {\n type: 'equal',\n },\n value: name,\n }]\n }\n });\n if (byId.items && byId.items.length > 0) {\n const entity = byId.items[0];\n return {\n schemaVersion: entity.schemaVersion || 'acorex-platform-workflow/v1',\n name: entity.name,\n title: entity.title || null,\n description: entity.description || null,\n variables: entity.variables || [],\n inputs: entity.inputs || [],\n outputs: entity.outputs || [],\n graph: entity.graph,\n customProperties: entity.customProperties || {},\n extensions: entity.extensions || {},\n };\n }\n return null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowDefinitionProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowDefinitionProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVmaW5pdGlvbi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL3dvcmtmbG93cy93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFNUM7Ozs7OztHQU1HO0FBRUgsTUFBTSxPQUFPLDZCQUE2QjtJQUQxQztRQUVJLCtDQUErQztRQUU5QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLDhCQUF5QixHQUFHLElBQUksQ0FBQyxhQUFhO2FBQzFELFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQzthQUMvRSxJQUFJLEVBQVksQ0FBQztLQTJHekI7SUF6R0csWUFBWTtJQUVaLDBEQUEwRDtJQUUxRCxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQWtCO1FBQzVCLDhEQUE4RDtRQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7WUFDdEQsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsSUFBSTtZQUNWLE1BQU0sRUFBRTtnQkFDSixLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsQ0FBQzt3QkFDTixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsUUFBUSxFQUFFOzRCQUNOLElBQUksRUFBRSxV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QUk7cUJBQ2QsQ0FBQzthQUNMO1NBQ0osQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsT0FBTztnQkFDSCxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsSUFBSSw2QkFBNkI7Z0JBQ3BFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSTtnQkFDM0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSTtnQkFDdkMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRTtnQkFDakMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDM0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRTtnQkFDN0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRTtnQkFDL0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRTthQUN0QyxDQUFDO1FBQ04sQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7K0dBOUdRLDZCQUE2QjttSEFBN0IsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQUR6QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd1Byb3ZpZGVyLCBBWFBXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0JztcblxuLyoqXG4gKiBXb3JrZmxvdyBEZWZpbml0aW9uIFByb3ZpZGVyXG4gKiBcbiAqIFByb3ZpZGVzIHdvcmtmbG93IGRlZmluaXRpb25zIGZvciBVSSBhbmQgdG9vbGluZy5cbiAqIFRoZSBgbmFtZWAgcHJvcGVydHkgaXMgdXNlZCBhcyB0aGUgd29ya2Zsb3cgaWRlbnRpZmllci5cbiAqIFJlYWRzIGZyb20gZW50aXR5IHNlcnZpY2UgKG1vY2sgZGF0YSBvciBBUEkpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNV29ya2Zsb3dEZWZpbml0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBBWFBXb3JrZmxvd1Byb3ZpZGVyIHtcbiAgICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXJ2aWNlID0gaW5qZWN0KEFYUEVudGl0eVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dEZWZpbml0aW9uU2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZVxuICAgICAgICAud2l0aEVudGl0eShSb290Q29uZmlnLm1vZHVsZS5uYW1lLCBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93RGVmaW5pdGlvbi5uYW1lKVxuICAgICAgICAuZGF0YTxhbnksIGFueT4oKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBBWFBXb3JrZmxvd1Byb3ZpZGVyIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4gICAgYXN5bmMgZ2V0TGlzdChjYXRlZ29yeUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbltdPiB7XG4gICAgICAgIC8vIFNhbWUgYXMgcmVwb3J0OiBmaWx0ZXIgYnkgY2F0ZWdvcnlJZHMgYXJyYXkgd2l0aCAnY29udGFpbnMnXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMud29ya2Zsb3dEZWZpbml0aW9uU2VydmljZS5xdWVyeSh7XG4gICAgICAgICAgICBza2lwOiAwLFxuICAgICAgICAgICAgdGFrZTogMTAwMCxcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2NhdGVnb3J5SWRzJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb250YWlucycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENvbnZlcnQgZW50aXR5IGRhdGEgdG8gd29ya2Zsb3cgZGVmaW5pdGlvbiBmb3JtYXRcbiAgICAgICAgcmV0dXJuIChyZXN1bHQuaXRlbXMgfHwgW10pLm1hcCgoaXRlbTogYW55KTogQVhQV29ya2Zsb3dEZWZpbml0aW9uID0+ICh7XG4gICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBpdGVtLnNjaGVtYVZlcnNpb24gfHwgJ2Fjb3JleC1wbGF0Zm9ybS13b3JrZmxvdy92MScsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUgfHwgaXRlbS5pZCB8fCAnJyxcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlIHx8IGl0ZW0ubmFtZSB8fCBpdGVtLmlkIHx8IG51bGwsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogaXRlbS5kZXNjcmlwdGlvbiB8fCBudWxsLFxuICAgICAgICAgICAgdmFyaWFibGVzOiBpdGVtLnZhcmlhYmxlcyB8fCBbXSxcbiAgICAgICAgICAgIGlucHV0czogaXRlbS5pbnB1dHMgfHwgW10sXG4gICAgICAgICAgICBvdXRwdXRzOiBpdGVtLm91dHB1dHMgfHwgW10sXG4gICAgICAgICAgICBncmFwaDogaXRlbS5ncmFwaCxcbiAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXM6IGl0ZW0uY3VzdG9tUHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgICAgIGV4dGVuc2lvbnM6IGl0ZW0uZXh0ZW5zaW9ucyB8fCB7fSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEFYUFdvcmtmbG93RGVmaW5pdGlvbiB8IG51bGw+IHtcbiAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYnkgbmFtZSBmaWVsZCBmaXJzdCwgdGhlbiBieSBpZCBmaWVsZFxuICAgICAgICBjb25zdCBieU5hbWUgPSBhd2FpdCB0aGlzLndvcmtmbG93RGVmaW5pdGlvblNlcnZpY2UucXVlcnkoe1xuICAgICAgICAgICAgc2tpcDogMCxcbiAgICAgICAgICAgIHRha2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaWYgKGJ5TmFtZS5pdGVtcyAmJiBieU5hbWUuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYnlOYW1lLml0ZW1zWzBdO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzY2hlbWFWZXJzaW9uOiBlbnRpdHkuc2NoZW1hVmVyc2lvbiB8fCAnYWNvcmV4LXBsYXRmb3JtLXdvcmtmbG93L3YxJyxcbiAgICAgICAgICAgICAgICBuYW1lOiBlbnRpdHkubmFtZSxcbiAgICAgICAgICAgICAgICB0aXRsZTogZW50aXR5LnRpdGxlIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGVudGl0eS5kZXNjcmlwdGlvbiB8fCBudWxsLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogZW50aXR5LnZhcmlhYmxlcyB8fCBbXSxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IGVudGl0eS5pbnB1dHMgfHwgW10sXG4gICAgICAgICAgICAgICAgb3V0cHV0czogZW50aXR5Lm91dHB1dHMgfHwgW10sXG4gICAgICAgICAgICAgICAgZ3JhcGg6IGVudGl0eS5ncmFwaCxcbiAgICAgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiBlbnRpdHkuY3VzdG9tUHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgICAgICAgICBleHRlbnNpb25zOiBlbnRpdHkuZXh0ZW5zaW9ucyB8fCB7fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcnkgYnkgaWQgZmllbGRcbiAgICAgICAgY29uc3QgYnlJZCA9IGF3YWl0IHRoaXMud29ya2Zsb3dEZWZpbml0aW9uU2VydmljZS5xdWVyeSh7XG4gICAgICAgICAgICBza2lwOiAwLFxuICAgICAgICAgICAgdGFrZTogMSxcbiAgICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChieUlkLml0ZW1zICYmIGJ5SWQuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gYnlJZC5pdGVtc1swXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2NoZW1hVmVyc2lvbjogZW50aXR5LnNjaGVtYVZlcnNpb24gfHwgJ2Fjb3JleC1wbGF0Zm9ybS13b3JrZmxvdy92MScsXG4gICAgICAgICAgICAgICAgbmFtZTogZW50aXR5Lm5hbWUsXG4gICAgICAgICAgICAgICAgdGl0bGU6IGVudGl0eS50aXRsZSB8fCBudWxsLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBlbnRpdHkuZGVzY3JpcHRpb24gfHwgbnVsbCxcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IGVudGl0eS52YXJpYWJsZXMgfHwgW10sXG4gICAgICAgICAgICAgICAgaW5wdXRzOiBlbnRpdHkuaW5wdXRzIHx8IFtdLFxuICAgICAgICAgICAgICAgIG91dHB1dHM6IGVudGl0eS5vdXRwdXRzIHx8IFtdLFxuICAgICAgICAgICAgICAgIGdyYXBoOiBlbnRpdHkuZ3JhcGgsXG4gICAgICAgICAgICAgICAgY3VzdG9tUHJvcGVydGllczogZW50aXR5LmN1c3RvbVByb3BlcnRpZXMgfHwge30sXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uczogZW50aXR5LmV4dGVuc2lvbnMgfHwge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG5cbiJdfQ==","//#region ---- Imports ----\nimport { RootConfig } from './const';\n//#endregion\n//#region ---- Manifest Definition ----\n/**\n * Workflow Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const WorkflowManagementManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n // Module dependencies (optional)\n};\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL21hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUcvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLFlBQVk7QUFFWiwyQ0FBMkM7QUFFM0M7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQXNCO0lBQzNELElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUk7SUFDNUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSztJQUM5QixJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJO0lBQzVCLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUk7SUFFNUIsaUNBQWlDO0NBQ2xDLENBQUM7QUFFRixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBBWFBNb2R1bGVNYW5pZmVzdCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi9jb25zdCc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIE1hbmlmZXN0IERlZmluaXRpb24gICAtLS0tXG5cbi8qKlxuICogV29ya2Zsb3cgTWFuYWdlbWVudCBNb2R1bGUgTWFuaWZlc3QuXG4gKiBEZWZpbmVzIG1vZHVsZSBtZXRhZGF0YSwgZmVhdHVyZXMsIGFuZCBwcm92aWRlciByZWZlcmVuY2VzLlxuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dNYW5hZ2VtZW50TWFuaWZlc3Q6IEFYUE1vZHVsZU1hbmlmZXN0ID0ge1xuICBuYW1lOiBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICB2ZXJzaW9uOiAnMS4wLjAnLFxuICB0aXRsZTogUm9vdENvbmZpZy5tb2R1bGUudGl0bGUsXG4gIGljb246IFJvb3RDb25maWcubW9kdWxlLmljb24sXG4gIGkxOG46IFJvb3RDb25maWcuY29uZmlnLmkxOG4sXG5cbiAgLy8gTW9kdWxlIGRlcGVuZGVuY2llcyAob3B0aW9uYWwpXG59O1xuXG4vLyNlbmRyZWdpb25cblxuIl19","export const AXMPermissionsKeys = {\n WorkflowManagement: {\n Management: 'WorkflowManagement:Permission:Management',\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5rZXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9wZXJtaXNzaW9uLmtleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsa0JBQWtCLEVBQUU7UUFDbEIsVUFBVSxFQUFFLDBDQUEwQztLQUN2RDtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQVhNUGVybWlzc2lvbnNLZXlzID0ge1xuICBXb3JrZmxvd01hbmFnZW1lbnQ6IHtcbiAgICBNYW5hZ2VtZW50OiAnV29ya2Zsb3dNYW5hZ2VtZW50OlBlcm1pc3Npb246TWFuYWdlbWVudCcsXG4gIH0sXG59O1xuIl19","import { Injectable, inject } from '@angular/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { RootConfig } from './const';\nimport { AXMPermissionsKeys } from './permission.keys';\nimport * as i0 from \"@angular/core\";\nexport class AXMPermissionDefinitionProvider {\n constructor() {\n this.translationService = inject(AXTranslationService);\n }\n async define(context) {\n const trans = async (key) => await this.translationService.translateAsync(`@workflow-management:${key}`);\n const keys = AXMPermissionsKeys;\n const MODULE_PERMISSIONS = '@workflow-management:module.permissions';\n context.addGroup(RootConfig.module.name, `${MODULE_PERMISSIONS}.title`, `${MODULE_PERMISSIONS}.description`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMPermissionDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMPermissionDefinitionProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMPermissionDefinitionProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1kZWZpbml0aW9uLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9wZXJtaXNzaW9uLWRlZmluaXRpb24ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHdkQsTUFBTSxPQUFPLCtCQUErQjtJQUQ1QztRQUVtQix1QkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztLQWdCcEU7SUFkQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQStDO1FBQzFELE1BQU0sS0FBSyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUNsQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFOUUsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUM7UUFFaEMsTUFBTSxrQkFBa0IsR0FBRyx5Q0FBeUMsQ0FBQztRQUVyRSxPQUFPLENBQUMsUUFBUSxDQUNkLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUN0QixHQUFHLGtCQUFrQixRQUFRLEVBQzdCLEdBQUcsa0JBQWtCLGNBQWMsQ0FDcEMsQ0FBQztJQUNKLENBQUM7K0dBaEJVLCtCQUErQjttSEFBL0IsK0JBQStCOzs0RkFBL0IsK0JBQStCO2tCQUQzQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlciwgQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlckNvbnRleHQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1QZXJtaXNzaW9uc0tleXMgfSBmcm9tICcuL3Blcm1pc3Npb24ua2V5cyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWE1QZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyIGltcGxlbWVudHMgQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICBhc3luYyBkZWZpbmUoY29udGV4dDogQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlckNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0cmFucyA9IGFzeW5jIChrZXk6IHN0cmluZykgPT5cbiAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGBAd29ya2Zsb3ctbWFuYWdlbWVudDoke2tleX1gKTtcblxuICAgIGNvbnN0IGtleXMgPSBBWE1QZXJtaXNzaW9uc0tleXM7XG5cbiAgICBjb25zdCBNT0RVTEVfUEVSTUlTU0lPTlMgPSAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6bW9kdWxlLnBlcm1pc3Npb25zJztcblxuICAgIGNvbnRleHQuYWRkR3JvdXAoXG4gICAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICAgYCR7TU9EVUxFX1BFUk1JU1NJT05TfS50aXRsZWAsXG4gICAgICBgJHtNT0RVTEVfUEVSTUlTU0lPTlN9LmRlc2NyaXB0aW9uYFxuICAgICk7XG4gIH1cbn1cbiJdfQ==","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowTaskProvider, } from '@acorex/modules/task-management';\nimport { AXPSystemStatuses } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWorkflowManager } from '@acorex/platform/workflow';\nimport { Inject, Injectable, InjectionToken, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Injection token for provider config. Use when registering via DI (provide token + useFactory with deps).\n * When creating via useFactory: () => new AXPGenericWorkflowTaskProvider({ ... }), config is passed in the closure.\n */\nexport const AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG = new InjectionToken('AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG');\n//#endregion\n/**\n * Generic Workflow Task Provider\n *\n * Provides tasks from Workflow Instances directly (no Work Items).\n * Queries suspended workflow instances and extracts tasks from bookmarks.\n *\n * Create one provider per workflow definition by passing a config (name, title, definitionId).\n * E.g. leave request: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' }\n *\n * Architecture:\n * - Queries Workflow Instances with subStatus = 'Suspended'\n * - Filters by config.definitionId when set (one provider = one definition)\n * - Extracts active bookmarks for each instance\n * - Parses bookmark payload for assignment/actions\n * - Maps to task board format\n */\nexport class AXPGenericWorkflowTaskProvider extends AXPWorkflowTaskProvider {\n //#endregion\n //#region ---- Constructor ----\n constructor(config) {\n super();\n //#endregion\n //#region ---- Services & Dependencies ----\n this.entityService = inject(AXPEntityService);\n this.workflowInstanceData = this.entityService\n .withEntity('WorkflowManagement', 'WorkflowInstance')\n .data();\n this.translationService = inject(AXTranslationService);\n this.workflowManager = inject(AXPWorkflowManager);\n this.config = config;\n }\n //#endregion\n //#region ---- Provider Metadata ----\n get name() {\n return this.config.name;\n }\n get title() {\n return this.config.title;\n }\n get icon() {\n return this.config.icon ?? 'fa-light fa-diagram-project';\n }\n //#endregion\n //#region ---- Task Retrieval ----\n /**\n * Get tasks from suspended workflow instances.\n *\n * Queries workflow instances filtered by:\n * - subStatus = 'Suspended'\n * - entityRefType (if provided in filter)\n * - definitionId (if provided in filter)\n * - assignee/claimant (if filter provided)\n *\n * Then extracts active bookmarks and maps to task board format.\n */\n async getTasks(options) {\n console.log(`[GenericWorkflowTaskProvider] 🔍 getTasks called with options:`, {\n skip: options?.skip,\n take: options?.take,\n assigneeIds: options?.assigneeIds,\n range: options?.range,\n types: options?.types,\n });\n // Build filter for workflow instances\n const baseFilter = { logic: 'and', filters: [] };\n // Filter by subStatus = 'Suspended' (only suspended workflows have pending tasks)\n baseFilter.filters?.push({\n field: 'subStatus',\n operator: { type: 'equal' },\n value: 'Suspended',\n });\n // Scope this provider to one workflow definition\n if (this.config.definitionId) {\n baseFilter.filters?.push({\n field: 'definitionId',\n operator: { type: 'equal' },\n value: this.config.definitionId,\n });\n }\n // Filter by date range if provided (using createdAt or updatedAt)\n if (options?.range?.from || options?.range?.end) {\n if (options.range.from) {\n baseFilter.filters?.push({\n field: 'createdAt',\n operator: { type: 'gte' },\n value: options.range.from.toISOString(),\n });\n }\n if (options.range.end) {\n baseFilter.filters?.push({\n field: 'createdAt',\n operator: { type: 'lte' },\n value: options.range.end.toISOString(),\n });\n }\n }\n console.log(`[GenericWorkflowTaskProvider] 🔎 Query filter:`, JSON.stringify(baseFilter, null, 2));\n // Query workflow instances\n const { items: instances, total } = await this.workflowInstanceData.query({\n skip: options?.skip ?? 0,\n take: options?.take ?? 20,\n filter: baseFilter,\n });\n console.log(`[GenericWorkflowTaskProvider] 📦 Query result:`, {\n total,\n itemsCount: instances.length,\n instances: instances.map((inst) => ({\n id: inst.id,\n definitionId: inst.definitionId,\n entityRefType: inst.entityRefType,\n entityRefId: inst.entityRefId,\n subStatus: inst.subStatus,\n })),\n });\n // Extract tasks from bookmarks for each instance\n const tasks = [];\n console.log(`[GenericWorkflowTaskProvider] 🔄 Processing ${instances.length} workflow instances...`);\n for (const instance of instances) {\n try {\n console.log(`[GenericWorkflowTaskProvider] 📝 Processing instance:`, {\n id: instance.id,\n definitionId: instance.definitionId,\n entityRefType: instance.entityRefType,\n entityRefId: instance.entityRefId,\n });\n // Get active bookmarks from instance entity (workflowInstance.bookmarks)\n const bookmarks = this.getActiveBookmarksFromInstance(instance);\n console.log(`[GenericWorkflowTaskProvider] 📌 Found ${bookmarks.length} active bookmarks for instance ${instance.id}`);\n // Process each bookmark (typically one per suspended activity)\n for (const bookmark of bookmarks) {\n try {\n // Get payload from entity (payload object or parse payloadJson)\n let payload;\n try {\n const raw = bookmark.payload ??\n (bookmark.payloadJson ? JSON.parse(bookmark.payloadJson) : null);\n payload =\n typeof raw === 'object' && raw !== null\n ? raw\n : {};\n }\n catch (error) {\n console.warn(`[GenericWorkflowTaskProvider] ⚠️ Failed to parse bookmark payload:`, error);\n continue;\n }\n // Only process human-task bookmarks\n if (payload.taskType !== 'human-task') {\n console.log(`[GenericWorkflowTaskProvider] ⏭️ Skipping bookmark (taskType: ${payload.taskType}, not human-task)`);\n continue;\n }\n // Check assignment filter if provided\n if (options?.assigneeIds && options.assigneeIds.length > 0) {\n const assignedIds = payload.assignedUserIds || [];\n const candidateIds = payload.candidateUserIds || [];\n const allUserIds = [...assignedIds, ...candidateIds];\n // TODO: Also check candidateRoleIds by resolving role members\n const matchesAssignee = allUserIds.some((id) => options.assigneeIds.includes(id));\n if (!matchesAssignee) {\n console.log(`[GenericWorkflowTaskProvider] ⏭️ Skipping task (assignee filter doesn't match)`);\n continue;\n }\n }\n // Map bookmark to task\n const task = this.mapBookmarkToTask(instance, bookmark, payload);\n console.log(`[GenericWorkflowTaskProvider] ✅ Mapped to task:`, {\n id: task.id,\n title: task.title,\n status: task.status,\n });\n tasks.push(task);\n }\n catch (error) {\n console.error(`[GenericWorkflowTaskProvider] ❌ Failed to process bookmark ${bookmark.id}:`, error);\n // Skip this bookmark and continue\n }\n }\n }\n catch (error) {\n console.error(`[GenericWorkflowTaskProvider] ❌ Failed to process instance ${instance.id}:`, error);\n // Skip this instance and continue\n }\n }\n console.log(`[GenericWorkflowTaskProvider] ✅ Returning ${tasks.length} tasks (total instances: ${total})`);\n return { items: tasks, total };\n }\n /**\n * Get active (non-consumed) bookmarks from workflow instance entity.\n * Reads from instance.workflowInstance?.bookmarks — no direct DB access.\n */\n getActiveBookmarksFromInstance(instance) {\n const wi = instance?.workflowInstance;\n const bookmarks = wi?.bookmarks ?? [];\n const active = bookmarks.filter((b) => !b.isConsumed && !b.consumed);\n return active;\n }\n /**\n * Map bookmark to task board task format.\n */\n mapBookmarkToTask(instance, bookmark, payload) {\n // Extract dates\n const dueDate = payload.dueDate\n ? (typeof payload.dueDate === 'string' ? new Date(payload.dueDate) : payload.dueDate)\n : (instance.createdAt ? new Date(instance.createdAt) : new Date());\n const startDate = instance.createdAt\n ? new Date(instance.createdAt)\n : dueDate;\n // If startDate and endDate are the same, set endDate to one day after startDate\n let endDate = dueDate;\n if (startDate.getTime() === dueDate.getTime()) {\n endDate = new Date(startDate);\n console.log(endDate);\n endDate.setDate(endDate.getDate() + 1);\n }\n // Map priority\n const priority = this.mapPriorityToTaskPriority(payload.priority || 'Normal');\n // Build title\n const title = payload.title || payload.activityName || 'Workflow Task';\n return {\n id: bookmark.id, // Use bookmark ID as task ID\n title,\n description: payload.description || `Action required: ${payload.activityName}`,\n startDate,\n endDate,\n allDay: false,\n assignee: payload.assignedUserIds && payload.assignedUserIds.length > 0\n ? {\n id: payload.assignedUserIds[0], // Use first assigned user\n type: 'user',\n fullName: '', // Will be populated if user data is loaded\n }\n : undefined,\n index: 2,\n status: {\n id: AXPSystemStatuses.Pending.name,\n title: this.translationService.translateSync('@workflow-management:tasks.states.pending'),\n },\n priority,\n reporter: {\n id: instance.auditInfo?.created?.by?.id || '',\n type: 'user',\n fullName: instance.auditInfo?.created?.by?.fullName || '',\n },\n data: {\n // Store workflow instance and bookmark metadata\n instanceId: instance.id,\n bookmarkId: bookmark.id,\n activityId: bookmark.activityId,\n activityType: payload.activityType,\n activityName: payload.activityName,\n taskToken: payload.taskToken,\n entityRefId: instance.entityRefId,\n entityRefType: instance.entityRefType,\n definitionId: instance.definitionId,\n // Store full payload for actions\n payload: payload,\n },\n };\n }\n /**\n * Map priority to task board priority.\n */\n mapPriorityToTaskPriority(priority) {\n switch (priority) {\n case 'Urgent':\n return 'highest';\n case 'High':\n return 'high';\n case 'Normal':\n return 'medium';\n case 'Low':\n return 'low';\n default:\n return 'medium';\n }\n }\n //#endregion\n //#region ---- Task Updates ----\n /**\n * Update tasks (not applicable for workflow instances - they are read-only from task provider perspective).\n */\n async updateTasks(tasksToUpdate) {\n // Workflow instances are managed by workflow engine\n // Task updates should be done through workflow resume, not direct updates\n console.warn(`[GenericWorkflowTaskProvider] ⚠️ updateTasks called - workflow tasks are read-only from provider`);\n return tasksToUpdate;\n }\n //#endregion\n //#region ---- Command Execution ----\n /**\n * Execute commands on tasks.\n *\n * Supports:\n * - Workflow resume commands (Complete, Cancel)\n */\n async executeCommand(command) {\n if (!command?.name)\n return { success: true };\n const taskData = command.options?.['data'];\n const instanceId = taskData?.instanceId ?? command.options?.['instanceId'] ?? '';\n const bookmarkId = taskData?.bookmarkId ?? command.options?.['bookmarkId'] ?? '';\n const taskToken = taskData?.taskToken ?? command.options?.['taskToken'] ?? '';\n const activityId = taskData?.activityId ?? command.options?.['activityId'] ?? '';\n const outcome = command.options?.['outcome'] ?? 'Done';\n const userInput = command.options?.['userInput'] ?? {};\n // Handle workflow resume commands\n if (command.name === 'WorkflowManagement.WorkflowInstance:Resume' || command.name === 'resume-workflow') {\n if (!instanceId || !taskToken || !activityId) {\n return {\n success: false,\n message: {\n text: 'Missing required parameters: instanceId, taskToken, activityId',\n },\n };\n }\n try {\n const result = await this.workflowManager.resume(instanceId, activityId, outcome, userInput, taskToken);\n return {\n success: result.success,\n message: result.error\n ? {\n text: result.error,\n }\n : undefined,\n };\n }\n catch (error) {\n console.error(`[GenericWorkflowTaskProvider] ❌ Error resuming workflow:`, error);\n return {\n success: false,\n message: {\n text: error.message || 'Failed to resume workflow',\n },\n };\n }\n }\n return { success: true };\n }\n //#endregion\n //#region ---- Actions & Statuses ----\n /**\n * Get available actions for a task.\n *\n * Extracts actions from bookmark payload.\n */\n async getActions(task) {\n const actions = [];\n if (!task)\n return actions;\n const taskData = task.data;\n const payload = taskData?.payload;\n if (!payload)\n return actions;\n // Extract actions from payload\n if (payload.actions) {\n const allActions = [\n ...(payload.actions.prefix || []),\n ...(payload.actions.suffix || []),\n ];\n for (const action of allActions) {\n const actionName = action.command?.name || action.name || 'unknown';\n actions.push({\n name: actionName,\n title: action.title || actionName,\n icon: action.icon,\n color: action.color,\n priority: 'primary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: actionName,\n userInput: {},\n },\n },\n });\n }\n }\n else {\n // Default actions if none provided\n actions.push({\n name: 'submit',\n title: this.translationService.translateSync('@general:actions.submit.title'),\n icon: 'fa-light fa-check',\n color: 'primary',\n priority: 'primary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: 'submit',\n userInput: {},\n },\n },\n });\n actions.push({\n name: 'cancel',\n title: this.translationService.translateSync('@general:actions.cancel.title'),\n icon: 'fa-light fa-times',\n color: 'default',\n priority: 'secondary',\n command: {\n name: 'WorkflowManagement.WorkflowInstance:Resume',\n options: {\n instanceId: taskData.instanceId,\n bookmarkId: taskData.bookmarkId,\n activityId: taskData.activityId,\n taskToken: taskData.taskToken,\n outcome: 'cancel',\n userInput: {},\n },\n },\n });\n }\n console.log('actions', actions);\n return actions;\n }\n async getExtraFields() {\n return [];\n }\n async getStatuses() {\n return [\n {\n index: 0,\n key: AXPSystemStatuses.Pending.name,\n title: await this.translationService.translateAsync('@workflow-management:tasks.states.pending'),\n color: 'warning',\n },\n ];\n }\n //#endregion\n //#region ---- Component ----\n getComponent() {\n return () => import('./workflow-task-popover.component').then((m) => m.AXMWorkflowTaskPopoverComponent);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPGenericWorkflowTaskProvider, deps: [{ token: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPGenericWorkflowTaskProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPGenericWorkflowTaskProvider, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy13b3JrZmxvdy10YXNrLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy90YXNrLXByb3ZpZGVyL2dlbmVyaWMtd29ya2Zsb3ctdGFzay5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBT0wsdUJBQXVCLEdBQ3hCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBUSxNQUFNLGVBQWUsQ0FBQzs7QUF5QmpGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlDQUF5QyxHQUNwRCxJQUFJLGNBQWMsQ0FBdUMsMkNBQTJDLENBQUMsQ0FBQztBQTZDeEcsWUFBWTtBQUVaOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE1BQU0sT0FBTyw4QkFBK0IsU0FBUSx1QkFBNEM7SUFnQjlGLFlBQVk7SUFFWixtQ0FBbUM7SUFFbkMsWUFDcUQsTUFBNEM7UUFFL0YsS0FBSyxFQUFFLENBQUM7UUFsQlYsWUFBWTtRQUVaLCtDQUErQztRQUU5QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLHlCQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhO2FBQ3ZELFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQzthQUNwRCxJQUFJLEVBQTRELENB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LEVBQUUsUUFBUTt3QkFDakIsU0FBUyxFQUFFLEVBQUU7cUJBQ2Q7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFaEMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsT0FBTztZQUNMO2dCQUNFLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDbkMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQywyQ0FBMkMsQ0FBQztnQkFDaEcsS0FBSyxFQUFFLFNBQVM7YUFDakI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVk7SUFFWixpQ0FBaUM7SUFFeEIsWUFBWTtRQUNuQixPQUFPLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDL0YsQ0FBQzsrR0FsZ0JVLDhCQUE4QixrQkFxQi9CLHlDQUF5QzttSEFyQnhDLDhCQUE4Qjs7NEZBQTlCLDhCQUE4QjtrQkFEMUMsVUFBVTs7MEJBc0JOLE1BQU07MkJBQUMseUNBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBJbXBvcnRzICAgLS0tLVxuXG5pbXBvcnQgeyBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb24gfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHtcbiAgQVhQRXh0cmFGaWVsZCxcbiAgQVhQVGFzayxcbiAgQVhQVGFza0FjdGlvbk1lbnVJdGVtLFxuICBBWFBUYXNrRmlsdGVyLFxuICBBWFBUYXNrUG9wb3ZlckNvbXBvbmVudCxcbiAgQVhQVGFza1N0YXR1cyxcbiAgQVhQV29ya2Zsb3dUYXNrUHJvdmlkZXIsXG59IGZyb20gJ0BhY29yZXgvbW9kdWxlcy90YXNrLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQU3lzdGVtU3RhdHVzZXMgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBFeGVjdXRlQ29tbWFuZCwgQVhQRXhlY3V0ZUNvbW1hbmRSZXN1bHQsIEFYUEFjdGlvbk1lbnVJdGVtIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUEVudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3dNYW5hZ2VyIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBpbmplY3QsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTVdvcmtmbG93TWFuYWdlbWVudFdvcmtmbG93SW5zdGFuY2VFbnRpdHlNb2RlbCB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3dvcmtmbG93LWluc3RhbmNlL3dvcmtmbG93LWluc3RhbmNlLnR5cGVzJztcblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgVHlwZXMgICAtLS0tXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSB3b3JrZmxvdy1zcGVjaWZpYyB0YXNrIHByb3ZpZGVyLlxuICogT25lIHByb3ZpZGVyIHBlciB3b3JrZmxvdyBkZWZpbml0aW9uIOKAkyBwYXNzIGRlZmluaXRpb25JZCB0byBzY29wZSB0YXNrcyB0byB0aGF0IGRlZmluaXRpb24gb25seS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJDb25maWcge1xuICAvKiogVW5pcXVlIHByb3ZpZGVyIG5hbWUgKGUuZy4gJ2xlYXZlLXJlcXVlc3Qtd29ya2Zsb3ctdGFza3MnLCAnZG9jdW1lbnQtcmV2aWV3LXdvcmtmbG93LXRhc2tzJykuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgdGl0bGUgaW4gdGFzayBib2FyZCB0eXBlIHNlbGVjdG9yLiAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgaWNvbiAoZGVmYXVsdDogJ2ZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdCcpLiAqL1xuICBpY29uPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiBzZXQsIG9ubHkgd29ya2Zsb3cgaW5zdGFuY2VzIGZvciB0aGlzIGRlZmluaXRpb24gYXJlIHNob3duLlxuICAgKiBPbmUgcHJvdmlkZXIgPSBvbmUgZGVmaW5pdGlvbi4gT21pdCB0byBzaG93IGFsbCBzdXNwZW5kZWQgd29ya2Zsb3cgdGFza3MgKHNpbmdsZSBnZW5lcmljIHByb3ZpZGVyKS5cbiAgICovXG4gIGRlZmluaXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHByb3ZpZGVyIGNvbmZpZy4gVXNlIHdoZW4gcmVnaXN0ZXJpbmcgdmlhIERJIChwcm92aWRlIHRva2VuICsgdXNlRmFjdG9yeSB3aXRoIGRlcHMpLlxuICogV2hlbiBjcmVhdGluZyB2aWEgdXNlRmFjdG9yeTogKCkgPT4gbmV3IEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcih7IC4uLiB9KSwgY29uZmlnIGlzIHBhc3NlZCBpbiB0aGUgY2xvc3VyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYUF9HRU5FUklDX1dPUktGTE9XX1RBU0tfUFJPVklERVJfQ09ORklHID1cbiAgbmV3IEluamVjdGlvblRva2VuPEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlckNvbmZpZz4oJ0FYUF9HRU5FUklDX1dPUktGTE9XX1RBU0tfUFJPVklERVJfQ09ORklHJyk7XG5cbi8qKlxuICogQm9va21hcmsgYXMgc3RvcmVkIGluIFdvcmtmbG93SW5zdGFuY2UgZW50aXR5ICh3b3JrZmxvd0luc3RhbmNlLmJvb2ttYXJrcykuXG4gKiBSZWFkIGZyb20gZW50aXR5IHNlcnZpY2U7IG5vIGRpcmVjdCBEQiBhY2Nlc3MuXG4gKi9cbmludGVyZmFjZSBXb3JrZmxvd0luc3RhbmNlQm9va21hcmsge1xuICBpZDogc3RyaW5nO1xuICBhY3Rpdml0eUlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcGF5bG9hZD86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsO1xuICBwYXlsb2FkSnNvbj86IHN0cmluZztcbiAgY29uc3VtZWQ/OiBib29sZWFuO1xuICBpc0NvbnN1bWVkPzogYm9vbGVhbjtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nO1xufVxuXG4vKiogU2hhcGUgdXNlZCB3aGVuIGVudGl0eSBzdG9yYWdlIHN0b3JlcyB3b3JrZmxvd0luc3RhbmNlIHdpdGggYm9va21hcmtzIGF0IHJvb3QgbGV2ZWwuICovXG5pbnRlcmZhY2UgV29ya2Zsb3dJbnN0YW5jZVdpdGhCb29rbWFya3Mge1xuICBib29rbWFya3M/OiBXb3JrZmxvd0luc3RhbmNlQm9va21hcmtbXTtcbn1cblxuLyoqXG4gKiBCb29rbWFyayBwYXlsb2FkIHN0cnVjdHVyZSBmb3IgaHVtYW4tdGFzayBhY3Rpdml0aWVzLlxuICovXG5pbnRlcmZhY2UgSHVtYW5UYXNrQm9va21hcmtQYXlsb2FkIHtcbiAgYWN0aXZpdHlUeXBlOiBzdHJpbmc7XG4gIGFjdGl2aXR5TmFtZTogc3RyaW5nO1xuICB0YXNrVG9rZW46IHN0cmluZztcbiAgdGFza1R5cGU6ICdodW1hbi10YXNrJyB8ICd1aS1hY3Rpdml0eScgfCAnc3lzdGVtLWFjdGl2aXR5JztcbiAgYXNzaWduZWRVc2VySWRzPzogc3RyaW5nW10gfCBudWxsO1xuICBjYW5kaWRhdGVVc2VySWRzPzogc3RyaW5nW10gfCBudWxsO1xuICBjYW5kaWRhdGVSb2xlSWRzPzogc3RyaW5nW10gfCBudWxsO1xuICB0aXRsZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHByaW9yaXR5PzogJ0xvdycgfCAnTm9ybWFsJyB8ICdIaWdoJyB8ICdVcmdlbnQnO1xuICBkdWVEYXRlPzogc3RyaW5nIHwgRGF0ZSB8IG51bGw7XG4gIGxheW91dD86IHN0cmluZyB8IGFueTtcbiAgYWN0aW9ucz86IHtcbiAgICBwcmVmaXg/OiBBWFBBY3Rpb25NZW51SXRlbVtdO1xuICAgIHN1ZmZpeD86IEFYUEFjdGlvbk1lbnVJdGVtW107XG4gIH07XG4gIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBHZW5lcmljIFdvcmtmbG93IFRhc2sgUHJvdmlkZXJcbiAqXG4gKiBQcm92aWRlcyB0YXNrcyBmcm9tIFdvcmtmbG93IEluc3RhbmNlcyBkaXJlY3RseSAobm8gV29yayBJdGVtcykuXG4gKiBRdWVyaWVzIHN1c3BlbmRlZCB3b3JrZmxvdyBpbnN0YW5jZXMgYW5kIGV4dHJhY3RzIHRhc2tzIGZyb20gYm9va21hcmtzLlxuICpcbiAqIENyZWF0ZSBvbmUgcHJvdmlkZXIgcGVyIHdvcmtmbG93IGRlZmluaXRpb24gYnkgcGFzc2luZyBhIGNvbmZpZyAobmFtZSwgdGl0bGUsIGRlZmluaXRpb25JZCkuXG4gKiBFLmcuIGxlYXZlIHJlcXVlc3Q6IHsgbmFtZTogJ2xlYXZlLXJlcXVlc3Qtd29ya2Zsb3ctdGFza3MnLCB0aXRsZTogJ0xlYXZlIFJlcXVlc3QnLCBkZWZpbml0aW9uSWQ6ICdMZWF2ZVJlcXVlc3RXb3JrZmxvdycgfVxuICpcbiAqIEFyY2hpdGVjdHVyZTpcbiAqIC0gUXVlcmllcyBXb3JrZmxvdyBJbnN0YW5jZXMgd2l0aCBzdWJTdGF0dXMgPSAnU3VzcGVuZGVkJ1xuICogLSBGaWx0ZXJzIGJ5IGNvbmZpZy5kZWZpbml0aW9uSWQgd2hlbiBzZXQgKG9uZSBwcm92aWRlciA9IG9uZSBkZWZpbml0aW9uKVxuICogLSBFeHRyYWN0cyBhY3RpdmUgYm9va21hcmtzIGZvciBlYWNoIGluc3RhbmNlXG4gKiAtIFBhcnNlcyBib29rbWFyayBwYXlsb2FkIGZvciBhc3NpZ25tZW50L2FjdGlvbnNcbiAqIC0gTWFwcyB0byB0YXNrIGJvYXJkIGZvcm1hdFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhQR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyIGV4dGVuZHMgQVhQV29ya2Zsb3dUYXNrUHJvdmlkZXI8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAvLyNyZWdpb24gLS0tLSAgIENvbmZpZyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQVhQR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyQ29uZmlnO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXJ2aWNlID0gaW5qZWN0KEFYUEVudGl0eVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93SW5zdGFuY2VEYXRhID0gdGhpcy5lbnRpdHlTZXJ2aWNlXG4gICAgLndpdGhFbnRpdHkoJ1dvcmtmbG93TWFuYWdlbWVudCcsICdXb3JrZmxvd0luc3RhbmNlJylcbiAgICAuZGF0YTxzdHJpbmcsIEFYTVdvcmtmbG93TWFuYWdlbWVudFdvcmtmbG93SW5zdGFuY2VFbnRpdHlNb2RlbD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93TWFuYWdlciA9IGluamVjdChBWFBXb3JrZmxvd01hbmFnZXIpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29uc3RydWN0b3IgICAtLS0tXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJRykgY29uZmlnOiBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJDb25maWcsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByb3ZpZGVyIE1ldGFkYXRhICAgLS0tLVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm5hbWU7XG4gIH1cblxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudGl0bGU7XG4gIH1cblxuICBnZXQgaWNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5pY29uID8/ICdmYS1saWdodCBmYS1kaWFncmFtLXByb2plY3QnO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBUYXNrIFJldHJpZXZhbCAgIC0tLS1cblxuICAvKipcbiAgICogR2V0IHRhc2tzIGZyb20gc3VzcGVuZGVkIHdvcmtmbG93IGluc3RhbmNlcy5cbiAgICogXG4gICAqIFF1ZXJpZXMgd29ya2Zsb3cgaW5zdGFuY2VzIGZpbHRlcmVkIGJ5OlxuICAgKiAtIHN1YlN0YXR1cyA9ICdTdXNwZW5kZWQnXG4gICAqIC0gZW50aXR5UmVmVHlwZSAoaWYgcHJvdmlkZWQgaW4gZmlsdGVyKVxuICAgKiAtIGRlZmluaXRpb25JZCAoaWYgcHJvdmlkZWQgaW4gZmlsdGVyKVxuICAgKiAtIGFzc2lnbmVlL2NsYWltYW50IChpZiBmaWx0ZXIgcHJvdmlkZWQpXG4gICAqIFxuICAgKiBUaGVuIGV4dHJhY3RzIGFjdGl2ZSBib29rbWFya3MgYW5kIG1hcHMgdG8gdGFzayBib2FyZCBmb3JtYXQuXG4gICAqL1xuICBhc3luYyBnZXRUYXNrcyhcbiAgICBvcHRpb25zOiBBWFBUYXNrRmlsdGVyLFxuICApOiBQcm9taXNlPHsgaXRlbXM6IEFYUFRhc2s8UmVjb3JkPHN0cmluZywgYW55Pj5bXTsgdG90YWw6IG51bWJlciB9PiB7XG4gICAgY29uc29sZS5sb2coYFtHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJdIPCflI0gZ2V0VGFza3MgY2FsbGVkIHdpdGggb3B0aW9uczpgLCB7XG4gICAgICBza2lwOiBvcHRpb25zPy5za2lwLFxuICAgICAgdGFrZTogb3B0aW9ucz8udGFrZSxcbiAgICAgIGFzc2lnbmVlSWRzOiBvcHRpb25zPy5hc3NpZ25lZUlkcyxcbiAgICAgIHJhbmdlOiBvcHRpb25zPy5yYW5nZSxcbiAgICAgIHR5cGVzOiBvcHRpb25zPy50eXBlcyxcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxkIGZpbHRlciBmb3Igd29ya2Zsb3cgaW5zdGFuY2VzXG4gICAgY29uc3QgYmFzZUZpbHRlcjogQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uID0geyBsb2dpYzogJ2FuZCcsIGZpbHRlcnM6IFtdIH07XG5cbiAgICAvLyBGaWx0ZXIgYnkgc3ViU3RhdHVzID0gJ1N1c3BlbmRlZCcgKG9ubHkgc3VzcGVuZGVkIHdvcmtmbG93cyBoYXZlIHBlbmRpbmcgdGFza3MpXG4gICAgYmFzZUZpbHRlci5maWx0ZXJzPy5wdXNoKHtcbiAgICAgIGZpZWxkOiAnc3ViU3RhdHVzJyxcbiAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSxcbiAgICAgIHZhbHVlOiAnU3VzcGVuZGVkJyxcbiAgICB9KTtcblxuICAgIC8vIFNjb3BlIHRoaXMgcHJvdmlkZXIgdG8gb25lIHdvcmtmbG93IGRlZmluaXRpb25cbiAgICBpZiAodGhpcy5jb25maWcuZGVmaW5pdGlvbklkKSB7XG4gICAgICBiYXNlRmlsdGVyLmZpbHRlcnM/LnB1c2goe1xuICAgICAgICBmaWVsZDogJ2RlZmluaXRpb25JZCcsXG4gICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSxcbiAgICAgICAgdmFsdWU6IHRoaXMuY29uZmlnLmRlZmluaXRpb25JZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBieSBkYXRlIHJhbmdlIGlmIHByb3ZpZGVkICh1c2luZyBjcmVhdGVkQXQgb3IgdXBkYXRlZEF0KVxuICAgIGlmIChvcHRpb25zPy5yYW5nZT8uZnJvbSB8fCBvcHRpb25zPy5yYW5nZT8uZW5kKSB7XG4gICAgICBpZiAob3B0aW9ucy5yYW5nZS5mcm9tKSB7XG4gICAgICAgIGJhc2VGaWx0ZXIuZmlsdGVycz8ucHVzaCh7XG4gICAgICAgICAgZmllbGQ6ICdjcmVhdGVkQXQnLFxuICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdndGUnIH0sXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbnMucmFuZ2UuZnJvbS50b0lTT1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKG9wdGlvbnMucmFuZ2UuZW5kKSB7XG4gICAgICAgIGJhc2VGaWx0ZXIuZmlsdGVycz8ucHVzaCh7XG4gICAgICAgICAgZmllbGQ6ICdjcmVhdGVkQXQnLFxuICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdsdGUnIH0sXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbnMucmFuZ2UuZW5kLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDwn5SOIFF1ZXJ5IGZpbHRlcjpgLCBKU09OLnN0cmluZ2lmeShiYXNlRmlsdGVyLCBudWxsLCAyKSk7XG5cbiAgICAvLyBRdWVyeSB3b3JrZmxvdyBpbnN0YW5jZXNcbiAgICBjb25zdCB7IGl0ZW1zOiBpbnN0YW5jZXMsIHRvdGFsIH0gPSBhd2FpdCB0aGlzLndvcmtmbG93SW5zdGFuY2VEYXRhLnF1ZXJ5KHtcbiAgICAgIHNraXA6IG9wdGlvbnM/LnNraXAgPz8gMCxcbiAgICAgIHRha2U6IG9wdGlvbnM/LnRha2UgPz8gMjAsXG4gICAgICBmaWx0ZXI6IGJhc2VGaWx0ZXIsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g8J+TpiBRdWVyeSByZXN1bHQ6YCwge1xuICAgICAgdG90YWwsXG4gICAgICBpdGVtc0NvdW50OiBpbnN0YW5jZXMubGVuZ3RoLFxuICAgICAgaW5zdGFuY2VzOiBpbnN0YW5jZXMubWFwKChpbnN0KSA9PiAoe1xuICAgICAgICBpZDogaW5zdC5pZCxcbiAgICAgICAgZGVmaW5pdGlvbklkOiBpbnN0LmRlZmluaXRpb25JZCxcbiAgICAgICAgZW50aXR5UmVmVHlwZTogaW5zdC5lbnRpdHlSZWZUeXBlLFxuICAgICAgICBlbnRpdHlSZWZJZDogaW5zdC5lbnRpdHlSZWZJZCxcbiAgICAgICAgc3ViU3RhdHVzOiBpbnN0LnN1YlN0YXR1cyxcbiAgICAgIH0pKSxcbiAgICB9KTtcblxuICAgIC8vIEV4dHJhY3QgdGFza3MgZnJvbSBib29rbWFya3MgZm9yIGVhY2ggaW5zdGFuY2VcbiAgICBjb25zdCB0YXNrczogQVhQVGFzazxSZWNvcmQ8c3RyaW5nLCBhbnk+PltdID0gW107XG5cbiAgICBjb25zb2xlLmxvZyhgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g8J+UhCBQcm9jZXNzaW5nICR7aW5zdGFuY2VzLmxlbmd0aH0gd29ya2Zsb3cgaW5zdGFuY2VzLi4uYCk7XG5cbiAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIGluc3RhbmNlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2coYFtHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJdIPCfk50gUHJvY2Vzc2luZyBpbnN0YW5jZTpgLCB7XG4gICAgICAgICAgaWQ6IGluc3RhbmNlLmlkLFxuICAgICAgICAgIGRlZmluaXRpb25JZDogaW5zdGFuY2UuZGVmaW5pdGlvbklkLFxuICAgICAgICAgIGVudGl0eVJlZlR5cGU6IGluc3RhbmNlLmVudGl0eVJlZlR5cGUsXG4gICAgICAgICAgZW50aXR5UmVmSWQ6IGluc3RhbmNlLmVudGl0eVJlZklkLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBHZXQgYWN0aXZlIGJvb2ttYXJrcyBmcm9tIGluc3RhbmNlIGVudGl0eSAod29ya2Zsb3dJbnN0YW5jZS5ib29rbWFya3MpXG4gICAgICAgIGNvbnN0IGJvb2ttYXJrcyA9IHRoaXMuZ2V0QWN0aXZlQm9va21hcmtzRnJvbUluc3RhbmNlKGluc3RhbmNlKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g8J+TjCBGb3VuZCAke2Jvb2ttYXJrcy5sZW5ndGh9IGFjdGl2ZSBib29rbWFya3MgZm9yIGluc3RhbmNlICR7aW5zdGFuY2UuaWR9YCk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyBlYWNoIGJvb2ttYXJrICh0eXBpY2FsbHkgb25lIHBlciBzdXNwZW5kZWQgYWN0aXZpdHkpXG4gICAgICAgIGZvciAoY29uc3QgYm9va21hcmsgb2YgYm9va21hcmtzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEdldCBwYXlsb2FkIGZyb20gZW50aXR5IChwYXlsb2FkIG9iamVjdCBvciBwYXJzZSBwYXlsb2FkSnNvbilcbiAgICAgICAgICAgIGxldCBwYXlsb2FkOiBIdW1hblRhc2tCb29rbWFya1BheWxvYWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByYXcgPVxuICAgICAgICAgICAgICAgIGJvb2ttYXJrLnBheWxvYWQgPz9cbiAgICAgICAgICAgICAgICAoYm9va21hcmsucGF5bG9hZEpzb24gPyBKU09OLnBhcnNlKGJvb2ttYXJrLnBheWxvYWRKc29uKSA6IG51bGwpO1xuICAgICAgICAgICAgICBwYXlsb2FkID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgcmF3ID09PSAnb2JqZWN0JyAmJiByYXcgIT09IG51bGxcbiAgICAgICAgICAgICAgICAgID8gKHJhdyBhcyBIdW1hblRhc2tCb29rbWFya1BheWxvYWQpXG4gICAgICAgICAgICAgICAgICA6ICh7fSBhcyBIdW1hblRhc2tCb29rbWFya1BheWxvYWQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDimqDvuI8gRmFpbGVkIHRvIHBhcnNlIGJvb2ttYXJrIHBheWxvYWQ6YCwgZXJyb3IpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT25seSBwcm9jZXNzIGh1bWFuLXRhc2sgYm9va21hcmtzXG4gICAgICAgICAgICBpZiAocGF5bG9hZC50YXNrVHlwZSAhPT0gJ2h1bWFuLXRhc2snKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDij63vuI8gU2tpcHBpbmcgYm9va21hcmsgKHRhc2tUeXBlOiAke3BheWxvYWQudGFza1R5cGV9LCBub3QgaHVtYW4tdGFzaylgKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGFzc2lnbm1lbnQgZmlsdGVyIGlmIHByb3ZpZGVkXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uYXNzaWduZWVJZHMgJiYgb3B0aW9ucy5hc3NpZ25lZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFzc2lnbmVkSWRzID0gcGF5bG9hZC5hc3NpZ25lZFVzZXJJZHMgfHwgW107XG4gICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUlkcyA9IHBheWxvYWQuY2FuZGlkYXRlVXNlcklkcyB8fCBbXTtcbiAgICAgICAgICAgICAgY29uc3QgYWxsVXNlcklkcyA9IFsuLi5hc3NpZ25lZElkcywgLi4uY2FuZGlkYXRlSWRzXTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8vIFRPRE86IEFsc28gY2hlY2sgY2FuZGlkYXRlUm9sZUlkcyBieSByZXNvbHZpbmcgcm9sZSBtZW1iZXJzXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzQXNzaWduZWUgPSBhbGxVc2VySWRzLnNvbWUoKGlkKSA9PiBvcHRpb25zLmFzc2lnbmVlSWRzIS5pbmNsdWRlcyhpZCkpO1xuICAgICAgICAgICAgICBpZiAoIW1hdGNoZXNBc3NpZ25lZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDij63vuI8gU2tpcHBpbmcgdGFzayAoYXNzaWduZWUgZmlsdGVyIGRvZXNuJ3QgbWF0Y2gpYCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWFwIGJvb2ttYXJrIHRvIHRhc2tcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLm1hcEJvb2ttYXJrVG9UYXNrKGluc3RhbmNlLCBib29rbWFyaywgcGF5bG9hZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g4pyFIE1hcHBlZCB0byB0YXNrOmAsIHtcbiAgICAgICAgICAgICAgaWQ6IHRhc2suaWQsXG4gICAgICAgICAgICAgIHRpdGxlOiB0YXNrLnRpdGxlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRhc2suc3RhdHVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0YXNrcy5wdXNoKHRhc2spO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDinYwgRmFpbGVkIHRvIHByb2Nlc3MgYm9va21hcmsgJHtib29rbWFyay5pZH06YCwgZXJyb3IpO1xuICAgICAgICAgICAgLy8gU2tpcCB0aGlzIGJvb2ttYXJrIGFuZCBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g4p2MIEZhaWxlZCB0byBwcm9jZXNzIGluc3RhbmNlICR7aW5zdGFuY2UuaWR9OmAsIGVycm9yKTtcbiAgICAgICAgLy8gU2tpcCB0aGlzIGluc3RhbmNlIGFuZCBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDinIUgUmV0dXJuaW5nICR7dGFza3MubGVuZ3RofSB0YXNrcyAodG90YWwgaW5zdGFuY2VzOiAke3RvdGFsfSlgKTtcblxuICAgIHJldHVybiB7IGl0ZW1zOiB0YXNrcywgdG90YWwgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIChub24tY29uc3VtZWQpIGJvb2ttYXJrcyBmcm9tIHdvcmtmbG93IGluc3RhbmNlIGVudGl0eS5cbiAgICogUmVhZHMgZnJvbSBpbnN0YW5jZS53b3JrZmxvd0luc3RhbmNlPy5ib29rbWFya3Mg4oCUIG5vIGRpcmVjdCBEQiBhY2Nlc3MuXG4gICAqL1xuICBwcml2YXRlIGdldEFjdGl2ZUJvb2ttYXJrc0Zyb21JbnN0YW5jZShcbiAgICBpbnN0YW5jZTogQVhNV29ya2Zsb3dNYW5hZ2VtZW50V29ya2Zsb3dJbnN0YW5jZUVudGl0eU1vZGVsXG4gICk6IFdvcmtmbG93SW5zdGFuY2VCb29rbWFya1tdIHtcbiAgICBjb25zdCB3aSA9IGluc3RhbmNlPy53b3JrZmxvd0luc3RhbmNlIGFzIFdvcmtmbG93SW5zdGFuY2VXaXRoQm9va21hcmtzIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJvb2ttYXJrcyA9IHdpPy5ib29rbWFya3MgPz8gW107XG4gICAgY29uc3QgYWN0aXZlID0gYm9va21hcmtzLmZpbHRlcihcbiAgICAgIChiOiBXb3JrZmxvd0luc3RhbmNlQm9va21hcmspID0+ICFiLmlzQ29uc3VtZWQgJiYgIWIuY29uc3VtZWRcbiAgICApIGFzIFdvcmtmbG93SW5zdGFuY2VCb29rbWFya1tdO1xuICAgIHJldHVybiBhY3RpdmU7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGJvb2ttYXJrIHRvIHRhc2sgYm9hcmQgdGFzayBmb3JtYXQuXG4gICAqL1xuICBwcml2YXRlIG1hcEJvb2ttYXJrVG9UYXNrKFxuICAgIGluc3RhbmNlOiBBWE1Xb3JrZmxvd01hbmFnZW1lbnRXb3JrZmxvd0luc3RhbmNlRW50aXR5TW9kZWwsXG4gICAgYm9va21hcms6IFdvcmtmbG93SW5zdGFuY2VCb29rbWFyayxcbiAgICBwYXlsb2FkOiBIdW1hblRhc2tCb29rbWFya1BheWxvYWRcbiAgKTogQVhQVGFzazxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgLy8gRXh0cmFjdCBkYXRlc1xuICAgIGNvbnN0IGR1ZURhdGUgPSBwYXlsb2FkLmR1ZURhdGUgXG4gICAgICA/ICh0eXBlb2YgcGF5bG9hZC5kdWVEYXRlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHBheWxvYWQuZHVlRGF0ZSkgOiBwYXlsb2FkLmR1ZURhdGUpXG4gICAgICA6IChpbnN0YW5jZS5jcmVhdGVkQXQgPyBuZXcgRGF0ZShpbnN0YW5jZS5jcmVhdGVkQXQpIDogbmV3IERhdGUoKSk7XG4gICAgXG4gICAgY29uc3Qgc3RhcnREYXRlID0gaW5zdGFuY2UuY3JlYXRlZEF0IFxuICAgICAgPyBuZXcgRGF0ZShpbnN0YW5jZS5jcmVhdGVkQXQpIFxuICAgICAgOiBkdWVEYXRlO1xuXG4gICAgLy8gSWYgc3RhcnREYXRlIGFuZCBlbmREYXRlIGFyZSB0aGUgc2FtZSwgc2V0IGVuZERhdGUgdG8gb25lIGRheSBhZnRlciBzdGFydERhdGVcbiAgICBsZXQgZW5kRGF0ZSA9IGR1ZURhdGU7XG4gICAgaWYgKHN0YXJ0RGF0ZS5nZXRUaW1lKCkgPT09IGR1ZURhdGUuZ2V0VGltZSgpKSB7XG4gICAgICBlbmREYXRlID0gbmV3IERhdGUoc3RhcnREYXRlKTtcbiAgICAgIGNvbnNvbGUubG9nKGVuZERhdGUpO1xuICAgICAgXG4gICAgICBlbmREYXRlLnNldERhdGUoZW5kRGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICB9XG5cbiAgICAvLyBNYXAgcHJpb3JpdHlcbiAgICBjb25zdCBwcmlvcml0eSA9IHRoaXMubWFwUHJpb3JpdHlUb1Rhc2tQcmlvcml0eShwYXlsb2FkLnByaW9yaXR5IHx8ICdOb3JtYWwnKTtcblxuICAgIC8vIEJ1aWxkIHRpdGxlXG4gICAgY29uc3QgdGl0bGUgPSBwYXlsb2FkLnRpdGxlIHx8IHBheWxvYWQuYWN0aXZpdHlOYW1lIHx8ICdXb3JrZmxvdyBUYXNrJztcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogYm9va21hcmsuaWQsIC8vIFVzZSBib29rbWFyayBJRCBhcyB0YXNrIElEXG4gICAgICB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwYXlsb2FkLmRlc2NyaXB0aW9uIHx8IGBBY3Rpb24gcmVxdWlyZWQ6ICR7cGF5bG9hZC5hY3Rpdml0eU5hbWV9YCxcbiAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgIGVuZERhdGUsXG4gICAgICBhbGxEYXk6IGZhbHNlLFxuICAgICAgYXNzaWduZWU6IHBheWxvYWQuYXNzaWduZWRVc2VySWRzICYmIHBheWxvYWQuYXNzaWduZWRVc2VySWRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpZDogcGF5bG9hZC5hc3NpZ25lZFVzZXJJZHNbMF0sIC8vIFVzZSBmaXJzdCBhc3NpZ25lZCB1c2VyXG4gICAgICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgICAgICBmdWxsTmFtZTogJycsIC8vIFdpbGwgYmUgcG9wdWxhdGVkIGlmIHVzZXIgZGF0YSBpcyBsb2FkZWRcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaW5kZXg6IDIsXG4gICAgICBzdGF0dXM6IHtcbiAgICAgICAgaWQ6IEFYUFN5c3RlbVN0YXR1c2VzLlBlbmRpbmcubmFtZSxcbiAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZVN5bmMoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnRhc2tzLnN0YXRlcy5wZW5kaW5nJyksXG4gICAgICB9LFxuICAgICAgcHJpb3JpdHksXG4gICAgICByZXBvcnRlcjoge1xuICAgICAgICBpZDogaW5zdGFuY2UuYXVkaXRJbmZvPy5jcmVhdGVkPy5ieT8uaWQgfHwgJycsXG4gICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgZnVsbE5hbWU6IGluc3RhbmNlLmF1ZGl0SW5mbz8uY3JlYXRlZD8uYnk/LmZ1bGxOYW1lIHx8ICcnLFxuICAgICAgfSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgLy8gU3RvcmUgd29ya2Zsb3cgaW5zdGFuY2UgYW5kIGJvb2ttYXJrIG1ldGFkYXRhXG4gICAgICAgIGluc3RhbmNlSWQ6IGluc3RhbmNlLmlkLFxuICAgICAgICBib29rbWFya0lkOiBib29rbWFyay5pZCxcbiAgICAgICAgYWN0aXZpdHlJZDogYm9va21hcmsuYWN0aXZpdHlJZCxcbiAgICAgICAgYWN0aXZpdHlUeXBlOiBwYXlsb2FkLmFjdGl2aXR5VHlwZSxcbiAgICAgICAgYWN0aXZpdHlOYW1lOiBwYXlsb2FkLmFjdGl2aXR5TmFtZSxcbiAgICAgICAgdGFza1Rva2VuOiBwYXlsb2FkLnRhc2tUb2tlbixcbiAgICAgICAgZW50aXR5UmVmSWQ6IGluc3RhbmNlLmVudGl0eVJlZklkLFxuICAgICAgICBlbnRpdHlSZWZUeXBlOiBpbnN0YW5jZS5lbnRpdHlSZWZUeXBlLFxuICAgICAgICBkZWZpbml0aW9uSWQ6IGluc3RhbmNlLmRlZmluaXRpb25JZCxcbiAgICAgICAgLy8gU3RvcmUgZnVsbCBwYXlsb2FkIGZvciBhY3Rpb25zXG4gICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICB9IGFzIGFueSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBwcmlvcml0eSB0byB0YXNrIGJvYXJkIHByaW9yaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSBtYXBQcmlvcml0eVRvVGFza1ByaW9yaXR5KFxuICAgIHByaW9yaXR5OiAnTG93JyB8ICdOb3JtYWwnIHwgJ0hpZ2gnIHwgJ1VyZ2VudCdcbiAgKTogJ2hpZ2hlc3QnIHwgJ2hpZ2gnIHwgJ21lZGl1bScgfCAnbG93JyB8ICdsb3dlc3QnIHtcbiAgICBzd2l0Y2ggKHByaW9yaXR5KSB7XG4gICAgICBjYXNlICdVcmdlbnQnOlxuICAgICAgICByZXR1cm4gJ2hpZ2hlc3QnO1xuICAgICAgY2FzZSAnSGlnaCc6XG4gICAgICAgIHJldHVybiAnaGlnaCc7XG4gICAgICBjYXNlICdOb3JtYWwnOlxuICAgICAgICByZXR1cm4gJ21lZGl1bSc7XG4gICAgICBjYXNlICdMb3cnOlxuICAgICAgICByZXR1cm4gJ2xvdyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ21lZGl1bSc7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBUYXNrIFVwZGF0ZXMgICAtLS0tXG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0YXNrcyAobm90IGFwcGxpY2FibGUgZm9yIHdvcmtmbG93IGluc3RhbmNlcyAtIHRoZXkgYXJlIHJlYWQtb25seSBmcm9tIHRhc2sgcHJvdmlkZXIgcGVyc3BlY3RpdmUpLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlVGFza3MoXG4gICAgdGFza3NUb1VwZGF0ZTogQVhQVGFzazxSZWNvcmQ8c3RyaW5nLCBhbnk+PltdLFxuICApOiBQcm9taXNlPEFYUFRhc2s8UmVjb3JkPHN0cmluZywgYW55Pj5bXT4ge1xuICAgIC8vIFdvcmtmbG93IGluc3RhbmNlcyBhcmUgbWFuYWdlZCBieSB3b3JrZmxvdyBlbmdpbmVcbiAgICAvLyBUYXNrIHVwZGF0ZXMgc2hvdWxkIGJlIGRvbmUgdGhyb3VnaCB3b3JrZmxvdyByZXN1bWUsIG5vdCBkaXJlY3QgdXBkYXRlc1xuICAgIGNvbnNvbGUud2FybihgW0dlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcl0g4pqg77iPIHVwZGF0ZVRhc2tzIGNhbGxlZCAtIHdvcmtmbG93IHRhc2tzIGFyZSByZWFkLW9ubHkgZnJvbSBwcm92aWRlcmApO1xuICAgIHJldHVybiB0YXNrc1RvVXBkYXRlO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21tYW5kIEV4ZWN1dGlvbiAgIC0tLS1cblxuICAvKipcbiAgICogRXhlY3V0ZSBjb21tYW5kcyBvbiB0YXNrcy5cbiAgICogXG4gICAqIFN1cHBvcnRzOlxuICAgKiAtIFdvcmtmbG93IHJlc3VtZSBjb21tYW5kcyAoQ29tcGxldGUsIENhbmNlbClcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQ6IEFYUEV4ZWN1dGVDb21tYW5kKTogUHJvbWlzZTxBWFBFeGVjdXRlQ29tbWFuZFJlc3VsdD4ge1xuICAgIGlmICghY29tbWFuZD8ubmFtZSkgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuXG4gICAgY29uc3QgdGFza0RhdGEgPSBjb21tYW5kLm9wdGlvbnM/LlsnZGF0YSddIGFzIGFueTtcbiAgICBjb25zdCBpbnN0YW5jZUlkID0gdGFza0RhdGE/Lmluc3RhbmNlSWQgPz8gY29tbWFuZC5vcHRpb25zPy5bJ2luc3RhbmNlSWQnXSA/PyAnJztcbiAgICBjb25zdCBib29rbWFya0lkID0gdGFza0RhdGE/LmJvb2ttYXJrSWQgPz8gY29tbWFuZC5vcHRpb25zPy5bJ2Jvb2ttYXJrSWQnXSA/PyAnJztcbiAgICBjb25zdCB0YXNrVG9rZW4gPSB0YXNrRGF0YT8udGFza1Rva2VuID8/IGNvbW1hbmQub3B0aW9ucz8uWyd0YXNrVG9rZW4nXSA/PyAnJztcbiAgICBjb25zdCBhY3Rpdml0eUlkID0gdGFza0RhdGE/LmFjdGl2aXR5SWQgPz8gY29tbWFuZC5vcHRpb25zPy5bJ2FjdGl2aXR5SWQnXSA/PyAnJztcbiAgICBjb25zdCBvdXRjb21lID0gY29tbWFuZC5vcHRpb25zPy5bJ291dGNvbWUnXSA/PyAnRG9uZSc7XG4gICAgY29uc3QgdXNlcklucHV0ID0gY29tbWFuZC5vcHRpb25zPy5bJ3VzZXJJbnB1dCddID8/IHt9O1xuXG4gICAgLy8gSGFuZGxlIHdvcmtmbG93IHJlc3VtZSBjb21tYW5kc1xuICAgIGlmIChjb21tYW5kLm5hbWUgPT09ICdXb3JrZmxvd01hbmFnZW1lbnQuV29ya2Zsb3dJbnN0YW5jZTpSZXN1bWUnIHx8IGNvbW1hbmQubmFtZSA9PT0gJ3Jlc3VtZS13b3JrZmxvdycpIHtcbiAgICAgIGlmICghaW5zdGFuY2VJZCB8fCAhdGFza1Rva2VuIHx8ICFhY3Rpdml0eUlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZToge1xuICAgICAgICAgICAgdGV4dDogJ01pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyczogaW5zdGFuY2VJZCwgdGFza1Rva2VuLCBhY3Rpdml0eUlkJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLndvcmtmbG93TWFuYWdlci5yZXN1bWUoXG4gICAgICAgICAgaW5zdGFuY2VJZCxcbiAgICAgICAgICBhY3Rpdml0eUlkLFxuICAgICAgICAgIG91dGNvbWUsXG4gICAgICAgICAgdXNlcklucHV0LFxuICAgICAgICAgIHRhc2tUb2tlblxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogcmVzdWx0LnN1Y2Nlc3MsXG4gICAgICAgICAgbWVzc2FnZTogcmVzdWx0LmVycm9yXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXN1bHQuZXJyb3IsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyXSDinYwgRXJyb3IgcmVzdW1pbmcgd29ya2Zsb3c6YCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgIHRleHQ6IGVycm9yLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byByZXN1bWUgd29ya2Zsb3cnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBBY3Rpb25zICYgU3RhdHVzZXMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEdldCBhdmFpbGFibGUgYWN0aW9ucyBmb3IgYSB0YXNrLlxuICAgKiBcbiAgICogRXh0cmFjdHMgYWN0aW9ucyBmcm9tIGJvb2ttYXJrIHBheWxvYWQuXG4gICAqL1xuICBhc3luYyBnZXRBY3Rpb25zKHRhc2s/OiBBWFBUYXNrPFJlY29yZDxzdHJpbmcsIGFueT4+KTogUHJvbWlzZTxBWFBUYXNrQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIGNvbnN0IGFjdGlvbnM6IEFYUFRhc2tBY3Rpb25NZW51SXRlbVtdID0gW107XG5cbiAgICBpZiAoIXRhc2spIHJldHVybiBhY3Rpb25zO1xuXG4gICAgY29uc3QgdGFza0RhdGEgPSB0YXNrLmRhdGEgYXMgYW55O1xuICAgIGNvbnN0IHBheWxvYWQgPSB0YXNrRGF0YT8ucGF5bG9hZCBhcyBIdW1hblRhc2tCb29rbWFya1BheWxvYWQgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXBheWxvYWQpIHJldHVybiBhY3Rpb25zO1xuXG4gICAgLy8gRXh0cmFjdCBhY3Rpb25zIGZyb20gcGF5bG9hZFxuICAgIGlmIChwYXlsb2FkLmFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFsbEFjdGlvbnMgPSBbXG4gICAgICAgIC4uLihwYXlsb2FkLmFjdGlvbnMucHJlZml4IHx8IFtdKSxcbiAgICAgICAgLi4uKHBheWxvYWQuYWN0aW9ucy5zdWZmaXggfHwgW10pLFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgYWxsQWN0aW9ucykge1xuICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uLmNvbW1hbmQ/Lm5hbWUgfHwgYWN0aW9uLm5hbWUgfHwgJ3Vua25vd24nO1xuICAgICAgICBcbiAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb25OYW1lLFxuICAgICAgICAgIHRpdGxlOiBhY3Rpb24udGl0bGUgfHwgYWN0aW9uTmFtZSxcbiAgICAgICAgICBpY29uOiBhY3Rpb24uaWNvbixcbiAgICAgICAgICBjb2xvcjogYWN0aW9uLmNvbG9yLFxuICAgICAgICAgIHByaW9yaXR5OiAncHJpbWFyeScsXG4gICAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgICAgbmFtZTogJ1dvcmtmbG93TWFuYWdlbWVudC5Xb3JrZmxvd0luc3RhbmNlOlJlc3VtZScsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIGluc3RhbmNlSWQ6IHRhc2tEYXRhLmluc3RhbmNlSWQsXG4gICAgICAgICAgICAgIGJvb2ttYXJrSWQ6IHRhc2tEYXRhLmJvb2ttYXJrSWQsXG4gICAgICAgICAgICAgIGFjdGl2aXR5SWQ6IHRhc2tEYXRhLmFjdGl2aXR5SWQsXG4gICAgICAgICAgICAgIHRhc2tUb2tlbjogdGFza0RhdGEudGFza1Rva2VuLFxuICAgICAgICAgICAgICBvdXRjb21lOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICB1c2VySW5wdXQ6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdCBhY3Rpb25zIGlmIG5vbmUgcHJvdmlkZWRcbiAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdzdWJtaXQnLFxuICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlU3luYygnQGdlbmVyYWw6YWN0aW9ucy5zdWJtaXQudGl0bGUnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNoZWNrJyxcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgcHJpb3JpdHk6ICdwcmltYXJ5JyxcbiAgICAgICAgY29tbWFuZDoge1xuICAgICAgICAgIG5hbWU6ICdXb3JrZmxvd01hbmFnZW1lbnQuV29ya2Zsb3dJbnN0YW5jZTpSZXN1bWUnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGluc3RhbmNlSWQ6IHRhc2tEYXRhLmluc3RhbmNlSWQsXG4gICAgICAgICAgICBib29rbWFya0lkOiB0YXNrRGF0YS5ib29rbWFya0lkLFxuICAgICAgICAgICAgYWN0aXZpdHlJZDogdGFza0RhdGEuYWN0aXZpdHlJZCxcbiAgICAgICAgICAgIHRhc2tUb2tlbjogdGFza0RhdGEudGFza1Rva2VuLFxuICAgICAgICAgICAgb3V0Y29tZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICB1c2VySW5wdXQ6IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVTeW5jKCdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScpLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtdGltZXMnLFxuICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgICBwcmlvcml0eTogJ3NlY29uZGFyeScsXG4gICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICBuYW1lOiAnV29ya2Zsb3dNYW5hZ2VtZW50LldvcmtmbG93SW5zdGFuY2U6UmVzdW1lJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBpbnN0YW5jZUlkOiB0YXNrRGF0YS5pbnN0YW5jZUlkLFxuICAgICAgICAgICAgYm9va21hcmtJZDogdGFza0RhdGEuYm9va21hcmtJZCxcbiAgICAgICAgICAgIGFjdGl2aXR5SWQ6IHRhc2tEYXRhLmFjdGl2aXR5SWQsXG4gICAgICAgICAgICB0YXNrVG9rZW46IHRhc2tEYXRhLnRhc2tUb2tlbixcbiAgICAgICAgICAgIG91dGNvbWU6ICdjYW5jZWwnLFxuICAgICAgICAgICAgdXNlcklucHV0OiB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ2FjdGlvbnMnLCBhY3Rpb25zKTtcbiAgICBcbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIGFzeW5jIGdldEV4dHJhRmllbGRzKCk6IFByb21pc2U8QVhQRXh0cmFGaWVsZFtdPiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzZXMoKTogUHJvbWlzZTxBWFBUYXNrU3RhdHVzW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpbmRleDogMCxcbiAgICAgICAga2V5OiBBWFBTeXN0ZW1TdGF0dXNlcy5QZW5kaW5nLm5hbWUsXG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGFza3Muc3RhdGVzLnBlbmRpbmcnKSxcbiAgICAgICAgY29sb3I6ICd3YXJuaW5nJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tcG9uZW50ICAgLS0tLVxuXG4gIG92ZXJyaWRlIGdldENvbXBvbmVudCgpOiAoKCkgPT4gUHJvbWlzZTxUeXBlPEFYUFRhc2tQb3BvdmVyQ29tcG9uZW50Pj4pIHwgVHlwZTxBWFBUYXNrUG9wb3ZlckNvbXBvbmVudD4gfCBudWxsIHtcbiAgICByZXR1cm4gKCkgPT5cbiAgICAgIGltcG9ydCgnLi93b3JrZmxvdy10YXNrLXBvcG92ZXIuY29tcG9uZW50JykudGhlbigobSkgPT4gbS5BWE1Xb3JrZmxvd1Rhc2tQb3BvdmVyQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19","import { AXP_WORKFLOW_TASK_PROVIDER } from '@acorex/modules/task-management';\nimport { AXPWorkflowDefinitionService } from '@acorex/platform/workflow';\nimport { Injector, makeEnvironmentProviders, runInInjectionContext, } from '@angular/core';\nimport { AXPGenericWorkflowTaskProvider } from '../task-provider/generic-workflow-task.provider';\nexport function provideTaskWorkflow() {\n return makeEnvironmentProviders([\n {\n provide: AXP_WORKFLOW_TASK_PROVIDER,\n multi: true,\n useFactory: (injector) => {\n return (async () => {\n const workflowDefinitionService = injector.get(AXPWorkflowDefinitionService);\n const categories = await workflowDefinitionService.getCategories();\n const providers = [];\n for (const category of categories) {\n const workflows = await workflowDefinitionService.getWorkflowsByCategoryId(category.id);\n for (const workflow of workflows) {\n const provider = runInInjectionContext(injector, () => new AXPGenericWorkflowTaskProvider({\n name: workflow.name,\n title: workflow.title ?? workflow.name,\n icon: 'fa-light fa-diagram-project',\n definitionId: workflow.name,\n }));\n providers.push(provider);\n }\n }\n console.log('providers', providers);\n return providers;\n })();\n },\n deps: [Injector],\n },\n ]);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIudGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL3Byb3ZpZGVyLnRhc2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0UsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUVILFFBQVEsRUFDUix3QkFBd0IsRUFDeEIscUJBQXFCLEdBQ3hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRWpHLE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QjtZQUNFLE9BQU8sRUFBRSwwQkFBMEI7WUFDbkMsS0FBSyxFQUFFLElBQUk7WUFDWCxVQUFVLEVBQUUsQ0FBQyxRQUFrQixFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDakIsTUFBTSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7b0JBQzdFLE1BQU0sVUFBVSxHQUFHLE1BQU0seUJBQXlCLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ25FLE1BQU0sU0FBUyxHQUFxQyxFQUFFLENBQUM7b0JBQ3ZELEtBQUssTUFBTSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2xDLE1BQU0sU0FBUyxHQUFHLE1BQU0seUJBQXlCLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN4RixLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDOzRCQUNqQyxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQ3BELElBQUksOEJBQThCLENBQUM7Z0NBQ2pDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtnQ0FDbkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLElBQUk7Z0NBQ3RDLElBQUksRUFBRSw2QkFBNkI7Z0NBQ25DLFlBQVksRUFBRSxRQUFRLENBQUMsSUFBSTs2QkFDNUIsQ0FBQyxDQUNILENBQUM7NEJBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDM0IsQ0FBQztvQkFDSCxDQUFDO29CQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUVwQyxPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7U0FDakI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQX1dPUktGTE9XX1RBU0tfUFJPVklERVIgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvdGFzay1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7XG4gICAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gICAgSW5qZWN0b3IsXG4gICAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXIgfSBmcm9tICcuLi90YXNrLXByb3ZpZGVyL2dlbmVyaWMtd29ya2Zsb3ctdGFzay5wcm92aWRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGFza1dvcmtmbG93KCk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX1dPUktGTE9XX1RBU0tfUFJPVklERVIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUZhY3Rvcnk6IChpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcbiAgICAgICAgcmV0dXJuIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dEZWZpbml0aW9uU2VydmljZSA9IGluamVjdG9yLmdldChBWFBXb3JrZmxvd0RlZmluaXRpb25TZXJ2aWNlKTtcbiAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gYXdhaXQgd29ya2Zsb3dEZWZpbml0aW9uU2VydmljZS5nZXRDYXRlZ29yaWVzKCk7XG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJzOiBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJbXSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dzID0gYXdhaXQgd29ya2Zsb3dEZWZpbml0aW9uU2VydmljZS5nZXRXb3JrZmxvd3NCeUNhdGVnb3J5SWQoY2F0ZWdvcnkuaWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB3b3JrZmxvdyBvZiB3b3JrZmxvd3MpIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+XG4gICAgICAgICAgICAgICAgbmV3IEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcih7XG4gICAgICAgICAgICAgICAgICBuYW1lOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHdvcmtmbG93LnRpdGxlID8/IHdvcmtmbG93Lm5hbWUsXG4gICAgICAgICAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtZGlhZ3JhbS1wcm9qZWN0JyxcbiAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZDogd29ya2Zsb3cubmFtZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBwcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKCdwcm92aWRlcnMnLCBwcm92aWRlcnMpO1xuICAgICAgICAgIFxuICAgICAgICAgIHJldHVybiBwcm92aWRlcnM7XG4gICAgICAgIH0pKCk7XG4gICAgICB9LFxuICAgICAgZGVwczogW0luamVjdG9yXSxcbiAgICB9LFxuICBdKTtcbn1cbiJdfQ==","import { AXMCalendarManagementModule } from '@acorex/modules/calendar-management';\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXP_MODULE_MANIFEST_PROVIDER } from '@acorex/platform/core';\nimport { AXPDomainModule } from '@acorex/platform/domain';\nimport { AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, } from '@acorex/platform/layout/entity';\nimport { provideCommandSetups } from '@acorex/platform/runtime';\nimport { AXP_ACTIVITY_CATEGORY_PROVIDER, AXP_ACTIVITY_PROVIDER, AXP_WORKFLOW_CATEGORY_PROVIDER, AXP_WORKFLOW_PROVIDER, } from '@acorex/platform/workflow';\nimport { inject, NgModule } from '@angular/core';\nimport { ROUTES } from '@angular/router';\nimport { AXMWorkflowManagementModuleEntityProvider } from './entity.provider';\nimport { CollectSignatureActivity, ExecuteCommandActivity, ExecuteQueryActivity, HumanTaskActivity, ShowConfirmPopupActivity, ShowLayoutPopupActivity, ShowToastActivity, } from './features/engine/activities';\nimport { AXMWorkflowPluginModule } from './features/workflow-plugin/workflow-plugin.module';\nimport { AXMWorkflowActivitiesDefinitionProvider } from './features/engine/activities/workflow-activities-definition.provider';\nimport { AXCCategoryProvider } from './features/engine/category.provider';\nimport { AXMWorkflowCategoryProvider } from './features/engine/workflows/workflow-category.provider';\nimport { AXMWorkflowDefinitionProvider } from './features/engine/workflows/workflow-definition.provider';\nimport { WorkflowManagementManifest } from './manifest';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { provideTaskWorkflow } from './features/engine/provider.task';\nimport * as i0 from \"@angular/core\";\nfunction routesFactory() {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n const routes = [\n {\n path: ':app/workflow-management/studio',\n loadComponent: () => {\n return config.viewers.root();\n },\n canActivate: [AXPAuthGuard],\n data: { reuse: true },\n children: [\n {\n path: '',\n loadComponent: () => import('./features/engine/studio/workflow-studio.component').then((c) => c.WorkflowStudioComponent),\n },\n ],\n },\n ];\n return routes;\n}\nexport class AXMWorkflowManagementModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModule, imports: [AXMCalendarManagementModule,\n AXPDomainModule,\n AXMWorkflowPluginModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModule, providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n provideCommandSetups([\n {\n key: 'WorkflowManagement.WorkflowDefinition:Execute',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.ExecuteWorkflowCommand),\n },\n {\n key: 'WorkflowManagement.WorkflowDefinition:EditInStudio',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.EditInStudioCommand),\n },\n {\n key: 'workflow-activity:show-toast',\n command: () => import('./features/engine/activities').then((c) => c.ShowToastActivity),\n },\n {\n key: 'workflow-activity:create-entity',\n command: () => import('./features/engine/activities').then((c) => c.AXPCreateEntityActivity),\n },\n {\n key: 'workflow-activity:execute-query',\n command: () => import('./features/engine/activities').then((c) => c.ExecuteQueryActivity),\n },\n {\n key: 'workflow-activity:execute-command',\n command: () => import('./features/engine/activities').then((c) => c.ExecuteCommandActivity),\n },\n {\n key: 'workflow-activity:show-confirm-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowConfirmPopupActivity),\n },\n {\n key: 'workflow-activity:show-layout-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowLayoutPopupActivity),\n },\n {\n key: 'workflow-activity:human-task',\n command: () => import('./features/engine/activities').then((c) => c.HumanTaskActivity),\n },\n {\n key: 'workflow-activity:collect-signature',\n command: () => import('./features/engine/activities').then((c) => c.CollectSignatureActivity),\n },\n ]),\n // provideEntity([RootConfig.entities.activityDefinition.fullName]),\n // Entity Definition Loader\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMWorkflowManagementModuleEntityProvider,\n multi: true,\n },\n // Menu Provider\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n // Permission Definition Provider\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: WorkflowManagementManifest,\n multi: true,\n },\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_CATEGORY_PROVIDER,\n useClass: AXCCategoryProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_PROVIDER,\n useClass: AXMWorkflowActivitiesDefinitionProvider,\n multi: true,\n },\n // Workflow Category Provider\n {\n provide: AXP_WORKFLOW_CATEGORY_PROVIDER,\n useClass: AXMWorkflowCategoryProvider,\n multi: true,\n },\n // Workflow Definition Metadata Provider\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n // Provide activity classes for dependency injection (only frontend activities)\n ExecuteQueryActivity,\n ExecuteCommandActivity,\n ShowConfirmPopupActivity,\n ShowLayoutPopupActivity,\n HumanTaskActivity,\n ShowToastActivity,\n CollectSignatureActivity,\n // Generic Workflow Task Provider (all workflows – no definitionId filter).\n // For one provider per definition, register in your module with definitionId, e.g.:\n // { provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG, useValue: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' } },\n // { provide: AXP_WORKFLOW_TASK_PROVIDER, multi: true, useFactory: (c) => new AXPGenericWorkflowTaskProvider(c), deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG] }\n // Leave Request workflow: task board shows suspended human-tasks.\n // definitionId must match instance.definitionId: mock engine uses workflow name ('createLeaveRequest'); real API may use definition entity id.\n // {\n // provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG,\n // useValue: {\n // name: 'leave-request',\n // title: 'Leave Request Tasks',\n // icon: 'fa-light fa-diagram-project',\n // definitionId: 'createLeaveRequest',\n // } as AXPGenericWorkflowTaskProviderConfig,\n // },\n // {\n // provide: AXP_WORKFLOW_TASK_PROVIDER,\n // multi: true,\n // useFactory: (config: AXPGenericWorkflowTaskProviderConfig) =>\n // new AXPGenericWorkflowTaskProvider(config),\n // deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG],\n // },\n provideTaskWorkflow()\n ], imports: [AXMCalendarManagementModule,\n AXPDomainModule,\n AXMWorkflowPluginModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMWorkflowManagementModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n AXMCalendarManagementModule,\n AXPDomainModule,\n AXMWorkflowPluginModule, // Register workflow plugin\n ],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n provideCommandSetups([\n {\n key: 'WorkflowManagement.WorkflowDefinition:Execute',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.ExecuteWorkflowCommand),\n },\n {\n key: 'WorkflowManagement.WorkflowDefinition:EditInStudio',\n command: () => import('./entities/workflow-definition/commands').then((c) => c.EditInStudioCommand),\n },\n {\n key: 'workflow-activity:show-toast',\n command: () => import('./features/engine/activities').then((c) => c.ShowToastActivity),\n },\n {\n key: 'workflow-activity:create-entity',\n command: () => import('./features/engine/activities').then((c) => c.AXPCreateEntityActivity),\n },\n {\n key: 'workflow-activity:execute-query',\n command: () => import('./features/engine/activities').then((c) => c.ExecuteQueryActivity),\n },\n {\n key: 'workflow-activity:execute-command',\n command: () => import('./features/engine/activities').then((c) => c.ExecuteCommandActivity),\n },\n {\n key: 'workflow-activity:show-confirm-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowConfirmPopupActivity),\n },\n {\n key: 'workflow-activity:show-layout-popup',\n command: () => import('./features/engine/activities').then((c) => c.ShowLayoutPopupActivity),\n },\n {\n key: 'workflow-activity:human-task',\n command: () => import('./features/engine/activities').then((c) => c.HumanTaskActivity),\n },\n {\n key: 'workflow-activity:collect-signature',\n command: () => import('./features/engine/activities').then((c) => c.CollectSignatureActivity),\n },\n ]),\n // provideEntity([RootConfig.entities.activityDefinition.fullName]),\n // Entity Definition Loader\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMWorkflowManagementModuleEntityProvider,\n multi: true,\n },\n // Menu Provider\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n // Permission Definition Provider\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: WorkflowManagementManifest,\n multi: true,\n },\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_CATEGORY_PROVIDER,\n useClass: AXCCategoryProvider,\n multi: true,\n },\n {\n provide: AXP_ACTIVITY_PROVIDER,\n useClass: AXMWorkflowActivitiesDefinitionProvider,\n multi: true,\n },\n // Workflow Category Provider\n {\n provide: AXP_WORKFLOW_CATEGORY_PROVIDER,\n useClass: AXMWorkflowCategoryProvider,\n multi: true,\n },\n // Workflow Definition Metadata Provider\n {\n provide: AXP_WORKFLOW_PROVIDER,\n useClass: AXMWorkflowDefinitionProvider,\n multi: true,\n },\n // Provide activity classes for dependency injection (only frontend activities)\n ExecuteQueryActivity,\n ExecuteCommandActivity,\n ShowConfirmPopupActivity,\n ShowLayoutPopupActivity,\n HumanTaskActivity,\n ShowToastActivity,\n CollectSignatureActivity,\n // Generic Workflow Task Provider (all workflows – no definitionId filter).\n // For one provider per definition, register in your module with definitionId, e.g.:\n // { provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG, useValue: { name: 'leave-request-workflow-tasks', title: 'Leave Request', definitionId: 'LeaveRequestWorkflow' } },\n // { provide: AXP_WORKFLOW_TASK_PROVIDER, multi: true, useFactory: (c) => new AXPGenericWorkflowTaskProvider(c), deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG] }\n // Leave Request workflow: task board shows suspended human-tasks.\n // definitionId must match instance.definitionId: mock engine uses workflow name ('createLeaveRequest'); real API may use definition entity id.\n // {\n // provide: AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG,\n // useValue: {\n // name: 'leave-request',\n // title: 'Leave Request Tasks',\n // icon: 'fa-light fa-diagram-project',\n // definitionId: 'createLeaveRequest',\n // } as AXPGenericWorkflowTaskProviderConfig,\n // },\n // {\n // provide: AXP_WORKFLOW_TASK_PROVIDER,\n // multi: true,\n // useFactory: (config: AXPGenericWorkflowTaskProviderConfig) =>\n // new AXPGenericWorkflowTaskProvider(config),\n // deps: [AXP_GENERIC_WORKFLOW_TASK_PROVIDER_CONFIG],\n // },\n provideTaskWorkflow()\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlbWVudC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL3dvcmtmbG93LW1hbmFnZW1lbnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qiw0QkFBNEIsR0FDN0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLHFCQUFxQixFQUNyQiw4QkFBOEIsRUFDOUIscUJBQXFCLEdBQ3RCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSw4QkFBOEIsQ0FBQztBQU10QyxPQUFPLEVBQUUsdUJBQXVC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LElBQUk7eUJBQ1o7d0JBQ0Qsd0NBQXdDO3dCQUN4Qzs0QkFDRSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixRQUFRLEVBQUUsNkJBQTZCOzRCQUN2QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRCwrRUFBK0U7d0JBQy9FLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0Qix3QkFBd0I7d0JBQ3hCLHVCQUF1Qjt3QkFDdkIsaUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLHdCQUF3Qjt3QkFDeEIsMkVBQTJFO3dCQUMzRSxvRkFBb0Y7d0JBQ3BGLDRLQUE0Szt3QkFDNUssb0tBQW9LO3dCQUNwSyxrRUFBa0U7d0JBQ2xFLCtJQUErSTt3QkFDL0ksSUFBSTt3QkFDSix3REFBd0Q7d0JBQ3hELGdCQUFnQjt3QkFDaEIsNkJBQTZCO3dCQUM3QixvQ0FBb0M7d0JBQ3BDLDJDQUEyQzt3QkFDM0MsMENBQTBDO3dCQUMxQywrQ0FBK0M7d0JBQy9DLEtBQUs7d0JBQ0wsSUFBSTt3QkFDSix5Q0FBeUM7d0JBQ3pDLGlCQUFpQjt3QkFDakIsa0VBQWtFO3dCQUNsRSxrREFBa0Q7d0JBQ2xELHVEQUF1RDt3QkFDdkQsS0FBSzt3QkFDTCxtQkFBbUIsRUFBRTtxQkFDdEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWE1DYWxlbmRhck1hbmFnZW1lbnRNb2R1bGUgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvY2FsZW5kYXItbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWFBfV09SS0ZMT1dfVEFTS19QUk9WSURFUiB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy90YXNrLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQQXV0aEd1YXJkLCBBWFBfUEVSTUlTU0lPTl9ERUZJTklUSU9OX1BST1ZJREVSIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUF9NRU5VX1BST1ZJREVSIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQX01PRFVMRV9NQU5JRkVTVF9QUk9WSURFUiB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBEb21haW5Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2RvbWFpbic7XG5pbXBvcnQge1xuICBBWFBfRU5USVRZX0NPTkZJR19UT0tFTixcbiAgQVhQX0VOVElUWV9ERUZJTklUSU9OX0xPQURFUixcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IHByb3ZpZGVDb21tYW5kU2V0dXBzIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9ydW50aW1lJztcbmltcG9ydCB7XG4gIEFYUF9BQ1RJVklUWV9DQVRFR09SWV9QUk9WSURFUixcbiAgQVhQX0FDVElWSVRZX1BST1ZJREVSLFxuICBBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsXG4gIEFYUF9XT1JLRkxPV19QUk9WSURFUixcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5pbXBvcnQgeyBpbmplY3QsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXMsIFJPVVRFUyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBWE1Xb3JrZmxvd01hbmFnZW1lbnRNb2R1bGVFbnRpdHlQcm92aWRlciB9IGZyb20gJy4vZW50aXR5LnByb3ZpZGVyJztcbmltcG9ydCB7XG4gIENvbGxlY3RTaWduYXR1cmVBY3Rpdml0eSxcbiAgRXhlY3V0ZUNvbW1hbmRBY3Rpdml0eSxcbiAgRXhlY3V0ZVF1ZXJ5QWN0aXZpdHksXG4gIEh1bWFuVGFza0FjdGl2aXR5LFxuICBTaG93Q29uZmlybVBvcHVwQWN0aXZpdHksXG4gIFNob3dMYXlvdXRQb3B1cEFjdGl2aXR5LFxuICBTaG93VG9hc3RBY3Rpdml0eSxcbn0gZnJvbSAnLi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcyc7XG5pbXBvcnQge1xuICBBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJRyxcbiAgQVhQR2VuZXJpY1dvcmtmbG93VGFza1Byb3ZpZGVyLFxuICBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJDb25maWcsXG59IGZyb20gJy4vZmVhdHVyZXMvdGFzay1wcm92aWRlci9nZW5lcmljLXdvcmtmbG93LXRhc2sucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhNV29ya2Zsb3dQbHVnaW5Nb2R1bGUgfSBmcm9tICcuL2ZlYXR1cmVzL3dvcmtmbG93LXBsdWdpbi93b3JrZmxvdy1wbHVnaW4ubW9kdWxlJztcblxuaW1wb3J0IHsgQVhNV29ya2Zsb3dBY3Rpdml0aWVzRGVmaW5pdGlvblByb3ZpZGVyIH0gZnJvbSAnLi9mZWF0dXJlcy9lbmdpbmUvYWN0aXZpdGllcy93b3JrZmxvdy1hY3Rpdml0aWVzLWRlZmluaXRpb24ucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhDQ2F0ZWdvcnlQcm92aWRlciB9IGZyb20gJy4vZmVhdHVyZXMvZW5naW5lL2NhdGVnb3J5LnByb3ZpZGVyJztcbmltcG9ydCB7IEFYTVdvcmtmbG93Q2F0ZWdvcnlQcm92aWRlciB9IGZyb20gJy4vZmVhdHVyZXMvZW5naW5lL3dvcmtmbG93cy93b3JrZmxvdy1jYXRlZ29yeS5wcm92aWRlcic7XG5pbXBvcnQgeyBBWE1Xb3JrZmxvd0RlZmluaXRpb25Qcm92aWRlciB9IGZyb20gJy4vZmVhdHVyZXMvZW5naW5lL3dvcmtmbG93cy93b3JrZmxvdy1kZWZpbml0aW9uLnByb3ZpZGVyJztcbmltcG9ydCB7IFdvcmtmbG93TWFuYWdlbWVudE1hbmlmZXN0IH0gZnJvbSAnLi9tYW5pZmVzdCc7XG5pbXBvcnQgeyBBWE1NZW51UHJvdmlkZXIgfSBmcm9tICcuL21lbnUucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhNUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlciB9IGZyb20gJy4vcGVybWlzc2lvbi1kZWZpbml0aW9uLnByb3ZpZGVyJztcbmltcG9ydCB7IHByb3ZpZGVUYXNrV29ya2Zsb3cgfSBmcm9tICcuL2ZlYXR1cmVzL2VuZ2luZS9wcm92aWRlci50YXNrJztcbmZ1bmN0aW9uIHJvdXRlc0ZhY3RvcnkoKSB7XG4gIGNvbnN0IGNvbmZpZyA9IGluamVjdChBWFBfRU5USVRZX0NPTkZJR19UT0tFTik7XG4gIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgIHtcbiAgICAgIHBhdGg6ICc6YXBwL3dvcmtmbG93LW1hbmFnZW1lbnQvc3R1ZGlvJyxcbiAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy52aWV3ZXJzLnJvb3QoKTtcbiAgICAgIH0sXG4gICAgICBjYW5BY3RpdmF0ZTogW0FYUEF1dGhHdWFyZF0sXG4gICAgICBkYXRhOiB7IHJldXNlOiB0cnVlIH0sXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgbG9hZENvbXBvbmVudDogKCkgPT5cbiAgICAgICAgICAgIGltcG9ydCgnLi9mZWF0dXJlcy9lbmdpbmUvc3R1ZGlvL3dvcmtmbG93LXN0dWRpby5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLldvcmtmbG93U3R1ZGlvQ29tcG9uZW50KSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcbiAgcmV0dXJuIHJvdXRlcztcbn1cblxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQVhNQ2FsZW5kYXJNYW5hZ2VtZW50TW9kdWxlLFxuICAgIEFYUERvbWFpbk1vZHVsZSxcbiAgICBBWE1Xb3JrZmxvd1BsdWdpbk1vZHVsZSwgLy8gUmVnaXN0ZXIgd29ya2Zsb3cgcGx1Z2luXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJPVVRFUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRmFjdG9yeTogcm91dGVzRmFjdG9yeSxcbiAgICB9LFxuICAgIHByb3ZpZGVDb21tYW5kU2V0dXBzKFtcbiAgICAgIHtcbiAgICAgICAga2V5OiAnV29ya2Zsb3dNYW5hZ2VtZW50LldvcmtmbG93RGVmaW5pdGlvbjpFeGVjdXRlJyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2VudGl0aWVzL3dvcmtmbG93LWRlZmluaXRpb24vY29tbWFuZHMnKS50aGVuKChjKSA9PiBjLkV4ZWN1dGVXb3JrZmxvd0NvbW1hbmQpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnV29ya2Zsb3dNYW5hZ2VtZW50LldvcmtmbG93RGVmaW5pdGlvbjpFZGl0SW5TdHVkaW8nLFxuICAgICAgICBjb21tYW5kOiAoKSA9PiBpbXBvcnQoJy4vZW50aXRpZXMvd29ya2Zsb3ctZGVmaW5pdGlvbi9jb21tYW5kcycpLnRoZW4oKGMpID0+IGMuRWRpdEluU3R1ZGlvQ29tbWFuZCksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd3b3JrZmxvdy1hY3Rpdml0eTpzaG93LXRvYXN0JyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5TaG93VG9hc3RBY3Rpdml0eSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd3b3JrZmxvdy1hY3Rpdml0eTpjcmVhdGUtZW50aXR5JyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5BWFBDcmVhdGVFbnRpdHlBY3Rpdml0eSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd3b3JrZmxvdy1hY3Rpdml0eTpleGVjdXRlLXF1ZXJ5JyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5FeGVjdXRlUXVlcnlBY3Rpdml0eSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICd3b3JrZmxvdy1hY3Rpdml0eTpleGVjdXRlLWNvbW1hbmQnLFxuICAgICAgICBjb21tYW5kOiAoKSA9PiBpbXBvcnQoJy4vZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMnKS50aGVuKChjKSA9PiBjLkV4ZWN1dGVDb21tYW5kQWN0aXZpdHkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy1jb25maXJtLXBvcHVwJyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5TaG93Q29uZmlybVBvcHVwQWN0aXZpdHkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy1sYXlvdXQtcG9wdXAnLFxuICAgICAgICBjb21tYW5kOiAoKSA9PiBpbXBvcnQoJy4vZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMnKS50aGVuKChjKSA9PiBjLlNob3dMYXlvdXRQb3B1cEFjdGl2aXR5KSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3dvcmtmbG93LWFjdGl2aXR5Omh1bWFuLXRhc2snLFxuICAgICAgICBjb21tYW5kOiAoKSA9PiBpbXBvcnQoJy4vZmVhdHVyZXMvZW5naW5lL2FjdGl2aXRpZXMnKS50aGVuKChjKSA9PiBjLkh1bWFuVGFza0FjdGl2aXR5KSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3dvcmtmbG93LWFjdGl2aXR5OmNvbGxlY3Qtc2lnbmF0dXJlJyxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2VuZ2luZS9hY3Rpdml0aWVzJykudGhlbigoYykgPT4gYy5Db2xsZWN0U2lnbmF0dXJlQWN0aXZpdHkpLFxuICAgICAgfSxcbiAgICBdKSxcbiAgICAvLyBwcm92aWRlRW50aXR5KFtSb290Q29uZmlnLmVudGl0aWVzLmFjdGl2aXR5RGVmaW5pdGlvbi5mdWxsTmFtZV0pLFxuICAgIC8vIEVudGl0eSBEZWZpbml0aW9uIExvYWRlclxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9FTlRJVFlfREVGSU5JVElPTl9MT0FERVIsXG4gICAgICB1c2VDbGFzczogQVhNV29ya2Zsb3dNYW5hZ2VtZW50TW9kdWxlRW50aXR5UHJvdmlkZXIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIC8vIE1lbnUgUHJvdmlkZXJcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBfTUVOVV9QUk9WSURFUixcbiAgICAgIHVzZUNsYXNzOiBBWE1NZW51UHJvdmlkZXIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIC8vIFBlcm1pc3Npb24gRGVmaW5pdGlvbiBQcm92aWRlclxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9QRVJNSVNTSU9OX0RFRklOSVRJT05fUFJPVklERVIsXG4gICAgICB1c2VDbGFzczogQVhNUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgLy8gTW9kdWxlIE1hbmlmZXN0IFByb3ZpZGVyXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX01PRFVMRV9NQU5JRkVTVF9QUk9WSURFUixcbiAgICAgIHVzZVZhbHVlOiBXb3JrZmxvd01hbmFnZW1lbnRNYW5pZmVzdCxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX1dPUktGTE9XX1BST1ZJREVSLFxuICAgICAgdXNlQ2xhc3M6IEFYTVdvcmtmbG93RGVmaW5pdGlvblByb3ZpZGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBfQUNUSVZJVFlfQ0FURUdPUllfUFJPVklERVIsXG4gICAgICB1c2VDbGFzczogQVhDQ2F0ZWdvcnlQcm92aWRlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX0FDVElWSVRZX1BST1ZJREVSLFxuICAgICAgdXNlQ2xhc3M6IEFYTVdvcmtmbG93QWN0aXZpdGllc0RlZmluaXRpb25Qcm92aWRlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgLy8gV29ya2Zsb3cgQ2F0ZWdvcnkgUHJvdmlkZXJcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBfV09SS0ZMT1dfQ0FURUdPUllfUFJPVklERVIsXG4gICAgICB1c2VDbGFzczogQVhNV29ya2Zsb3dDYXRlZ29yeVByb3ZpZGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICAvLyBXb3JrZmxvdyBEZWZpbml0aW9uIE1ldGFkYXRhIFByb3ZpZGVyXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX1dPUktGTE9XX1BST1ZJREVSLFxuICAgICAgdXNlQ2xhc3M6IEFYTVdvcmtmbG93RGVmaW5pdGlvblByb3ZpZGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICAvLyBQcm92aWRlIGFjdGl2aXR5IGNsYXNzZXMgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uIChvbmx5IGZyb250ZW5kIGFjdGl2aXRpZXMpXG4gICAgRXhlY3V0ZVF1ZXJ5QWN0aXZpdHksXG4gICAgRXhlY3V0ZUNvbW1hbmRBY3Rpdml0eSxcbiAgICBTaG93Q29uZmlybVBvcHVwQWN0aXZpdHksXG4gICAgU2hvd0xheW91dFBvcHVwQWN0aXZpdHksXG4gICAgSHVtYW5UYXNrQWN0aXZpdHksXG4gICAgU2hvd1RvYXN0QWN0aXZpdHksXG4gICAgQ29sbGVjdFNpZ25hdHVyZUFjdGl2aXR5LFxuICAgIC8vIEdlbmVyaWMgV29ya2Zsb3cgVGFzayBQcm92aWRlciAoYWxsIHdvcmtmbG93cyDigJMgbm8gZGVmaW5pdGlvbklkIGZpbHRlcikuXG4gICAgLy8gRm9yIG9uZSBwcm92aWRlciBwZXIgZGVmaW5pdGlvbiwgcmVnaXN0ZXIgaW4geW91ciBtb2R1bGUgd2l0aCBkZWZpbml0aW9uSWQsIGUuZy46XG4gICAgLy8geyBwcm92aWRlOiBBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJRywgdXNlVmFsdWU6IHsgbmFtZTogJ2xlYXZlLXJlcXVlc3Qtd29ya2Zsb3ctdGFza3MnLCB0aXRsZTogJ0xlYXZlIFJlcXVlc3QnLCBkZWZpbml0aW9uSWQ6ICdMZWF2ZVJlcXVlc3RXb3JrZmxvdycgfSB9LFxuICAgIC8vIHsgcHJvdmlkZTogQVhQX1dPUktGTE9XX1RBU0tfUFJPVklERVIsIG11bHRpOiB0cnVlLCB1c2VGYWN0b3J5OiAoYykgPT4gbmV3IEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlcihjKSwgZGVwczogW0FYUF9HRU5FUklDX1dPUktGTE9XX1RBU0tfUFJPVklERVJfQ09ORklHXSB9XG4gICAgLy8gTGVhdmUgUmVxdWVzdCB3b3JrZmxvdzogdGFzayBib2FyZCBzaG93cyBzdXNwZW5kZWQgaHVtYW4tdGFza3MuXG4gICAgLy8gZGVmaW5pdGlvbklkIG11c3QgbWF0Y2ggaW5zdGFuY2UuZGVmaW5pdGlvbklkOiBtb2NrIGVuZ2luZSB1c2VzIHdvcmtmbG93IG5hbWUgKCdjcmVhdGVMZWF2ZVJlcXVlc3QnKTsgcmVhbCBBUEkgbWF5IHVzZSBkZWZpbml0aW9uIGVudGl0eSBpZC5cbiAgICAvLyB7XG4gICAgLy8gICBwcm92aWRlOiBBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJRyxcbiAgICAvLyAgIHVzZVZhbHVlOiB7XG4gICAgLy8gICAgIG5hbWU6ICdsZWF2ZS1yZXF1ZXN0JyxcbiAgICAvLyAgICAgdGl0bGU6ICdMZWF2ZSBSZXF1ZXN0IFRhc2tzJyxcbiAgICAvLyAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdCcsXG4gICAgLy8gICAgIGRlZmluaXRpb25JZDogJ2NyZWF0ZUxlYXZlUmVxdWVzdCcsXG4gICAgLy8gICB9IGFzIEFYUEdlbmVyaWNXb3JrZmxvd1Rhc2tQcm92aWRlckNvbmZpZyxcbiAgICAvLyB9LFxuICAgIC8vIHtcbiAgICAvLyAgIHByb3ZpZGU6IEFYUF9XT1JLRkxPV19UQVNLX1BST1ZJREVSLFxuICAgIC8vICAgbXVsdGk6IHRydWUsXG4gICAgLy8gICB1c2VGYWN0b3J5OiAoY29uZmlnOiBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXJDb25maWcpID0+XG4gICAgLy8gICAgIG5ldyBBWFBHZW5lcmljV29ya2Zsb3dUYXNrUHJvdmlkZXIoY29uZmlnKSxcbiAgICAvLyAgIGRlcHM6IFtBWFBfR0VORVJJQ19XT1JLRkxPV19UQVNLX1BST1ZJREVSX0NPTkZJR10sXG4gICAgLy8gfSxcbiAgICBwcm92aWRlVGFza1dvcmtmbG93KClcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNV29ya2Zsb3dNYW5hZ2VtZW50TW9kdWxlIHt9XG4iXX0=","// Entity exports - services and modules removed, handled by middleware\n// Exporting entity types for use in feature components\nexport * from './activity-category/activity-category.types';\nexport * from './activity-definition/activity-definition.types';\nexport * from './workflow-definition/workflow-definition.types';\nexport * from './workflow-instance/workflow-instance.types';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvd29ya2Zsb3ctbWFuYWdlbWVudC9zcmMvbGliL2VudGl0aWVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVFQUF1RTtBQUN2RSx1REFBdUQ7QUFFdkQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyw2Q0FBNkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEVudGl0eSBleHBvcnRzIC0gc2VydmljZXMgYW5kIG1vZHVsZXMgcmVtb3ZlZCwgaGFuZGxlZCBieSBtaWRkbGV3YXJlXG4vLyBFeHBvcnRpbmcgZW50aXR5IHR5cGVzIGZvciB1c2UgaW4gZmVhdHVyZSBjb21wb25lbnRzXG5cbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZpdHktY2F0ZWdvcnkvYWN0aXZpdHktY2F0ZWdvcnkudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpdml0eS1kZWZpbml0aW9uL2FjdGl2aXR5LWRlZmluaXRpb24udHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1kZWZpbml0aW9uL3dvcmtmbG93LWRlZmluaXRpb24udHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1pbnN0YW5jZS93b3JrZmxvdy1pbnN0YW5jZS50eXBlcyc7XG4iXX0=","//#region ---- Imports ----\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, output, ViewEncapsulation } from '@angular/core';\nimport { AXPCategoryTreeComponent, } from '@acorex/platform/layout/components';\nimport { AXPActivityDefinitionService } from '@acorex/platform/workflow';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class AXMActivityCategoriesTreeComponent {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.activityDefinitionService = inject(AXPActivityDefinitionService);\n //#endregion\n //#region ---- Output Events ----\n /**\n * Emitted when a category node is clicked\n */\n this.categoryClick = output();\n /**\n * Emitted when an activity node is clicked\n */\n this.activityClick = output();\n //#endregion\n //#region ---- Category Tree Configuration ----\n /**\n * Category tree data source\n */\n this.categoryTreeDataSource = {\n loadRootNodes: async () => {\n const categories = await this.activityDefinitionService.getCategories();\n return this.mapCategoriesToEntities(categories);\n },\n loadChildNodes: async (parentId) => {\n // Check if parentId is an activity (prefixed with 'activity_')\n if (parentId.startsWith('activity_')) {\n return []; // Activities are leaf nodes\n }\n // Load child categories\n const categories = await this.activityDefinitionService.getCategories(parentId);\n const categoryEntities = this.mapCategoriesToEntities(categories);\n // Load activities for this category\n const activities = await this.activityDefinitionService.getActivitiesByCategoryId(parentId);\n const activityEntities = this.mapActivitiesToEntities(activities, parentId);\n // Return categories first, then activities\n return [...categoryEntities, ...activityEntities];\n },\n searchNodes: async (searchValue) => {\n // TODO: Implement search if needed\n return [];\n },\n };\n /**\n * Category tree configuration\n */\n this.categoryTreeConfig = computed(() => ({\n textField: 'title',\n valueField: 'id',\n expandedField: 'expand',\n showCheckbox: false,\n searchable: false,\n emptyStateTitle: '@workflow-management:activities.components.activity-categories-tree.empty-state.title',\n emptyStateDescription: '@workflow-management:activities.components.activity-categories-tree.empty-state.description',\n emptyStateIcon: 'fa-light fa-folder-open',\n }), ...(ngDevMode ? [{ debugName: \"categoryTreeConfig\" }] : []));\n /**\n * Category tree actions (disabled CRUD operations)\n */\n this.categoryTreeActions = computed(() => ({\n canCreate: false,\n canUpdate: false,\n canDelete: false,\n canCreateChild: false,\n }), ...(ngDevMode ? [{ debugName: \"categoryTreeActions\" }] : []));\n /**\n * Category tree events\n */\n this.categoryTreeEvents = computed(() => ({\n onNodeClick: (entity) => {\n this.handleNodeClick(entity);\n },\n }), ...(ngDevMode ? [{ debugName: \"categoryTreeEvents\" }] : []));\n }\n //#endregion\n //#region ---- Event Handlers ----\n /**\n * Handle category tree node click events\n */\n handleNodeClick(entity) {\n const activityEntity = entity;\n if (activityEntity.itemType === 'category' && activityEntity.originalItem) {\n this.categoryClick.emit(activityEntity.originalItem);\n }\n else if (activityEntity.itemType === 'activity' && activityEntity.originalItem) {\n this.activityClick.emit(activityEntity.originalItem);\n }\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Map activity categories to category entities\n */\n mapCategoriesToEntities(categories) {\n return categories.map((category) => ({\n id: category.id,\n title: category.title || category.id,\n description: category.description,\n parentId: category.parentId,\n childrenCount: (category.childrenCount ?? 0) + (category.itemsCount ?? 0), // Include activities in children count\n itemsCount: category.itemsCount,\n originalItem: category,\n itemType: 'category',\n }));\n }\n /**\n * Map activity definitions to category entities\n */\n mapActivitiesToEntities(activities, parentId) {\n return activities.map((activity) => ({\n id: `activity_${activity.type || activity.name}`,\n title: activity.title || activity.name || activity.type,\n description: activity.description,\n parentId: parentId,\n childrenCount: 0, // Activities are leaf nodes\n itemsCount: 0,\n originalItem: activity,\n itemType: 'activity',\n }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMActivityCategoriesTreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.16\", type: AXMActivityCategoriesTreeComponent, isStandalone: true, selector: \"axp-activity-categories-tree\", outputs: { categoryClick: \"categoryClick\", activityClick: \"activityClick\" }, host: { classAttribute: \"axp-activity-categories-tree\" }, ngImport: i0, template: \"<axp-category-tree\\n [dataSource]=\\\"categoryTreeDataSource\\\"\\n [config]=\\\"categoryTreeConfig()\\\"\\n [actions]=\\\"categoryTreeActions()\\\"\\n [events]=\\\"categoryTreeEvents()\\\"\\n (nodeClick)=\\\"handleNodeClick($event)\\\"\\n>\\n</axp-category-tree>\\n\\n\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"component\", type: AXPCategoryTreeComponent, selector: \"axp-category-tree\", inputs: [\"dataSource\", \"config\", \"actions\", \"events\"], outputs: [\"nodeClick\", \"nodeSelect\", \"nodeCreate\", \"nodeUpdate\", \"nodeDelete\", \"searchChange\", \"collapseChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXMActivityCategoriesTreeComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-activity-categories-tree', standalone: true, imports: [CommonModule, AXPCategoryTreeComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'axp-activity-categories-tree' }, template: \"<axp-category-tree\\n [dataSource]=\\\"categoryTreeDataSource\\\"\\n [config]=\\\"categoryTreeConfig()\\\"\\n [actions]=\\\"categoryTreeActions()\\\"\\n [events]=\\\"categoryTreeEvents()\\\"\\n (nodeClick)=\\\"handleNodeClick($event)\\\"\\n>\\n</axp-category-tree>\\n\\n\" }]\n }], propDecorators: { categoryClick: [{ type: i0.Output, args: [\"categoryClick\"] }], activityClick: [{ type: i0.Output, args: [\"activityClick\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL3N0dWRpby9jb21wb25lbnRzL2FjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZS9hY3Rpdml0eS1jYXRlZ29yaWVzLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvc3R1ZGlvL2NvbXBvbmVudHMvYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlL2FjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEgsT0FBTyxFQUNMLHdCQUF3QixHQUt6QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBOEMsNEJBQTRCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFnQnJILFlBQVk7QUFZWixNQUFNLE9BQU8sa0NBQWtDO0lBVi9DO1FBV0UsK0NBQStDO1FBRTlCLDhCQUF5QixHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBRWxGLFlBQVk7UUFFWixxQ0FBcUM7UUFFckM7O1dBRUc7UUFDSCxrQkFBYSxHQUFHLE1BQU0sRUFBdUIsQ0FBQztRQUU5Qzs7V0FFRztRQUNILGtCQUFhLEdBQUcsTUFBTSxFQUF5QixDQUFDO1FBRWhELFlBQVk7UUFFWixtREFBbUQ7UUFFbkQ7O1dBRUc7UUFDZ0IsMkJBQXNCLEdBQThCO1lBQ3JFLGFBQWEsRUFBRSxLQUFLLElBQXVDLEVBQUU7Z0JBQzNELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN4RSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsY0FBYyxFQUFFLEtBQUssRUFBRSxRQUFnQixFQUFxQyxFQUFFO2dCQUM1RSwrREFBK0Q7Z0JBQy9ELElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtnQkFDekMsQ0FBQztnQkFFRCx3QkFBd0I7Z0JBQ3hCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRWxFLG9DQUFvQztnQkFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFNUUsMkNBQTJDO2dCQUMzQyxPQUFPLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELFdBQVcsRUFBRSxLQUFLLEVBQUUsV0FBbUIsRUFBcUMsRUFBRTtnQkFDNUUsbUNBQW1DO2dCQUNuQyxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7U0FDRixDQUFDO1FBRUY7O1dBRUc7UUFDZ0IsdUJBQWtCLEdBQUcsUUFBUSxDQUF3QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLFlBQVksRUFBRSxLQUFLO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGVBQWUsRUFBRSx1RkFBdUY7WUFDeEcscUJBQXFCLEVBQUUsNkZBQTZGO1lBQ3BILGNBQWMsRUFBRSx5QkFBeUI7U0FDMUMsQ0FBQyw4REFBQyxDQUFDO1FBRUo7O1dBRUc7UUFDZ0Isd0JBQW1CLEdBQUcsUUFBUSxDQUF5QixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUMsK0RBQUMsQ0FBQztRQUVKOztXQUVHO1FBQ2dCLHVCQUFrQixHQUFHLFFBQVEsQ0FBd0IsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM3RSxXQUFXLEVBQUUsQ0FBQyxNQUF5QixFQUFFLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsQ0FBQztTQUNGLENBQUMsOERBQUMsQ0FBQztLQTJETDtJQXpEQyxZQUFZO0lBRVosc0NBQXNDO0lBRXRDOztPQUVHO0lBQ08sZUFBZSxDQUFDLE1BQXlCO1FBQ2pELE1BQU0sY0FBYyxHQUFHLE1BQWdDLENBQUM7UUFFeEQsSUFBSSxjQUFjLENBQUMsUUFBUSxLQUFLLFVBQVUsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQW1DLENBQUMsQ0FBQztRQUM5RSxDQUFDO2FBQU0sSUFBSSxjQUFjLENBQUMsUUFBUSxLQUFLLFVBQVUsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDakYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQXFDLENBQUMsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7SUFFWix1Q0FBdUM7SUFFdkM7O09BRUc7SUFDSyx1QkFBdUIsQ0FBQyxVQUFpQztRQUMvRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ2YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLEVBQUU7WUFDcEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1lBQ2pDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRSx1Q0FBdUM7WUFDbEgsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLFlBQVksRUFBRSxRQUFRO1lBQ3RCLFFBQVEsRUFBRSxVQUFtQjtTQUM5QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QixDQUM3QixVQUFtQyxFQUNuQyxRQUFnQjtRQUVoQixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkMsRUFBRSxFQUFFLFlBQVksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ2hELEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUk7WUFDdkQsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1lBQ2pDLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLGFBQWEsRUFBRSxDQUFDLEVBQUUsNEJBQTRCO1lBQzlDLFVBQVUsRUFBRSxDQUFDO1lBQ2IsWUFBWSxFQUFFLFFBQVE7WUFDdEIsUUFBUSxFQUFFLFVBQW1CO1NBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQzsrR0E3SVUsa0NBQWtDO21HQUFsQyxrQ0FBa0MsK05DeEMvQyx3UEFTQSx5RER3QlksWUFBWSwrQkFBRSx3QkFBd0I7OzRGQU9yQyxrQ0FBa0M7a0JBVjlDLFNBQVM7K0JBQ0UsOEJBQThCLGNBQzVCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQyxtQkFHaEMsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiAtLS0tICAgSW1wb3J0cyAgIC0tLS1cblxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIG91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUENhdGVnb3J5RW50aXR5IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7XG4gIEFYUENhdGVnb3J5VHJlZUNvbXBvbmVudCxcbiAgQVhQQ2F0ZWdvcnlUcmVlRGF0YVNvdXJjZSxcbiAgQVhQQ2F0ZWdvcnlUcmVlQ29uZmlnLFxuICBBWFBDYXRlZ29yeVRyZWVBY3Rpb25zLFxuICBBWFBDYXRlZ29yeVRyZWVFdmVudHMsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhQQWN0aXZpdHlDYXRlZ29yeSwgQVhQQWN0aXZpdHlEZWZpbml0aW9uLCBBWFBBY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIEV4dGVuZGVkIENhdGVnb3J5IEVudGl0eSBJbnRlcmZhY2UgICAtLS0tXG5cbi8qKlxuICogRXh0ZW5kZWQgY2F0ZWdvcnkgZW50aXR5IHRoYXQgaW5jbHVkZXMgYWN0aXZpdHkgaW5mb3JtYXRpb25cbiAqL1xuaW50ZXJmYWNlIEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHkgZXh0ZW5kcyBBWFBDYXRlZ29yeUVudGl0eSB7XG4gIC8qKiBPcmlnaW5hbCBjYXRlZ29yeSBvciBhY3Rpdml0eSBpdGVtICovXG4gIG9yaWdpbmFsSXRlbT86IEFYUEFjdGl2aXR5Q2F0ZWdvcnkgfCBBWFBBY3Rpdml0eURlZmluaXRpb247XG4gIC8qKiBUeXBlIG9mIHRoZSBpdGVtOiAnY2F0ZWdvcnknIG9yICdhY3Rpdml0eScgKi9cbiAgaXRlbVR5cGU/OiAnY2F0ZWdvcnknIHwgJ2FjdGl2aXR5Jztcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1hY3Rpdml0eS1jYXRlZ29yaWVzLXRyZWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBWFBDYXRlZ29yeVRyZWVDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2FjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7IGNsYXNzOiAnYXhwLWFjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZScgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQWN0aXZpdHlDYXRlZ29yaWVzVHJlZUNvbXBvbmVudCB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYUEFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgT3V0cHV0IEV2ZW50cyAgIC0tLS1cblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgY2F0ZWdvcnkgbm9kZSBpcyBjbGlja2VkXG4gICAqL1xuICBjYXRlZ29yeUNsaWNrID0gb3V0cHV0PEFYUEFjdGl2aXR5Q2F0ZWdvcnk+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhbiBhY3Rpdml0eSBub2RlIGlzIGNsaWNrZWRcbiAgICovXG4gIGFjdGl2aXR5Q2xpY2sgPSBvdXRwdXQ8QVhQQWN0aXZpdHlEZWZpbml0aW9uPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ2F0ZWdvcnkgVHJlZSBDb25maWd1cmF0aW9uICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDYXRlZ29yeSB0cmVlIGRhdGEgc291cmNlXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2F0ZWdvcnlUcmVlRGF0YVNvdXJjZTogQVhQQ2F0ZWdvcnlUcmVlRGF0YVNvdXJjZSA9IHtcbiAgICBsb2FkUm9vdE5vZGVzOiBhc3luYyAoKTogUHJvbWlzZTxBY3Rpdml0eUNhdGVnb3J5RW50aXR5W10+ID0+IHtcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgcmV0dXJuIHRoaXMubWFwQ2F0ZWdvcmllc1RvRW50aXRpZXMoY2F0ZWdvcmllcyk7XG4gICAgfSxcbiAgICBsb2FkQ2hpbGROb2RlczogYXN5bmMgKHBhcmVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHlbXT4gPT4ge1xuICAgICAgLy8gQ2hlY2sgaWYgcGFyZW50SWQgaXMgYW4gYWN0aXZpdHkgKHByZWZpeGVkIHdpdGggJ2FjdGl2aXR5XycpXG4gICAgICBpZiAocGFyZW50SWQuc3RhcnRzV2l0aCgnYWN0aXZpdHlfJykpIHtcbiAgICAgICAgcmV0dXJuIFtdOyAvLyBBY3Rpdml0aWVzIGFyZSBsZWFmIG5vZGVzXG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgY2hpbGQgY2F0ZWdvcmllc1xuICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuYWN0aXZpdHlEZWZpbml0aW9uU2VydmljZS5nZXRDYXRlZ29yaWVzKHBhcmVudElkKTtcbiAgICAgIGNvbnN0IGNhdGVnb3J5RW50aXRpZXMgPSB0aGlzLm1hcENhdGVnb3JpZXNUb0VudGl0aWVzKGNhdGVnb3JpZXMpO1xuXG4gICAgICAvLyBMb2FkIGFjdGl2aXRpZXMgZm9yIHRoaXMgY2F0ZWdvcnlcbiAgICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBhd2FpdCB0aGlzLmFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UuZ2V0QWN0aXZpdGllc0J5Q2F0ZWdvcnlJZChwYXJlbnRJZCk7XG4gICAgICBjb25zdCBhY3Rpdml0eUVudGl0aWVzID0gdGhpcy5tYXBBY3Rpdml0aWVzVG9FbnRpdGllcyhhY3Rpdml0aWVzLCBwYXJlbnRJZCk7XG5cbiAgICAgIC8vIFJldHVybiBjYXRlZ29yaWVzIGZpcnN0LCB0aGVuIGFjdGl2aXRpZXNcbiAgICAgIHJldHVybiBbLi4uY2F0ZWdvcnlFbnRpdGllcywgLi4uYWN0aXZpdHlFbnRpdGllc107XG4gICAgfSxcbiAgICBzZWFyY2hOb2RlczogYXN5bmMgKHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHlbXT4gPT4ge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IHNlYXJjaCBpZiBuZWVkZWRcbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICB9O1xuXG4gIC8qKlxuICAgKiBDYXRlZ29yeSB0cmVlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjYXRlZ29yeVRyZWVDb25maWcgPSBjb21wdXRlZDxBWFBDYXRlZ29yeVRyZWVDb25maWc+KCgpID0+ICh7XG4gICAgdGV4dEZpZWxkOiAndGl0bGUnLFxuICAgIHZhbHVlRmllbGQ6ICdpZCcsXG4gICAgZXhwYW5kZWRGaWVsZDogJ2V4cGFuZCcsXG4gICAgc2hvd0NoZWNrYm94OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBlbXB0eVN0YXRlVGl0bGU6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDphY3Rpdml0aWVzLmNvbXBvbmVudHMuYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlLmVtcHR5LXN0YXRlLnRpdGxlJyxcbiAgICBlbXB0eVN0YXRlRGVzY3JpcHRpb246ICdAd29ya2Zsb3ctbWFuYWdlbWVudDphY3Rpdml0aWVzLmNvbXBvbmVudHMuYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlLmVtcHR5LXN0YXRlLmRlc2NyaXB0aW9uJyxcbiAgICBlbXB0eVN0YXRlSWNvbjogJ2ZhLWxpZ2h0IGZhLWZvbGRlci1vcGVuJyxcbiAgfSkpO1xuXG4gIC8qKlxuICAgKiBDYXRlZ29yeSB0cmVlIGFjdGlvbnMgKGRpc2FibGVkIENSVUQgb3BlcmF0aW9ucylcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjYXRlZ29yeVRyZWVBY3Rpb25zID0gY29tcHV0ZWQ8QVhQQ2F0ZWdvcnlUcmVlQWN0aW9ucz4oKCkgPT4gKHtcbiAgICBjYW5DcmVhdGU6IGZhbHNlLFxuICAgIGNhblVwZGF0ZTogZmFsc2UsXG4gICAgY2FuRGVsZXRlOiBmYWxzZSxcbiAgICBjYW5DcmVhdGVDaGlsZDogZmFsc2UsXG4gIH0pKTtcblxuICAvKipcbiAgICogQ2F0ZWdvcnkgdHJlZSBldmVudHNcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBjYXRlZ29yeVRyZWVFdmVudHMgPSBjb21wdXRlZDxBWFBDYXRlZ29yeVRyZWVFdmVudHM+KCgpID0+ICh7XG4gICAgb25Ob2RlQ2xpY2s6IChlbnRpdHk6IEFYUENhdGVnb3J5RW50aXR5KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZU5vZGVDbGljayhlbnRpdHkpO1xuICAgIH0sXG4gIH0pKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEV2ZW50IEhhbmRsZXJzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2F0ZWdvcnkgdHJlZSBub2RlIGNsaWNrIGV2ZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZU5vZGVDbGljayhlbnRpdHk6IEFYUENhdGVnb3J5RW50aXR5KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZpdHlFbnRpdHkgPSBlbnRpdHkgYXMgQWN0aXZpdHlDYXRlZ29yeUVudGl0eTtcblxuICAgIGlmIChhY3Rpdml0eUVudGl0eS5pdGVtVHlwZSA9PT0gJ2NhdGVnb3J5JyAmJiBhY3Rpdml0eUVudGl0eS5vcmlnaW5hbEl0ZW0pIHtcbiAgICAgIHRoaXMuY2F0ZWdvcnlDbGljay5lbWl0KGFjdGl2aXR5RW50aXR5Lm9yaWdpbmFsSXRlbSBhcyBBWFBBY3Rpdml0eUNhdGVnb3J5KTtcbiAgICB9IGVsc2UgaWYgKGFjdGl2aXR5RW50aXR5Lml0ZW1UeXBlID09PSAnYWN0aXZpdHknICYmIGFjdGl2aXR5RW50aXR5Lm9yaWdpbmFsSXRlbSkge1xuICAgICAgdGhpcy5hY3Rpdml0eUNsaWNrLmVtaXQoYWN0aXZpdHlFbnRpdHkub3JpZ2luYWxJdGVtIGFzIEFYUEFjdGl2aXR5RGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBVdGlsaXR5IE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIE1hcCBhY3Rpdml0eSBjYXRlZ29yaWVzIHRvIGNhdGVnb3J5IGVudGl0aWVzXG4gICAqL1xuICBwcml2YXRlIG1hcENhdGVnb3JpZXNUb0VudGl0aWVzKGNhdGVnb3JpZXM6IEFYUEFjdGl2aXR5Q2F0ZWdvcnlbXSk6IEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHlbXSB7XG4gICAgcmV0dXJuIGNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gKHtcbiAgICAgIGlkOiBjYXRlZ29yeS5pZCxcbiAgICAgIHRpdGxlOiBjYXRlZ29yeS50aXRsZSB8fCBjYXRlZ29yeS5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBjYXRlZ29yeS5kZXNjcmlwdGlvbixcbiAgICAgIHBhcmVudElkOiBjYXRlZ29yeS5wYXJlbnRJZCxcbiAgICAgIGNoaWxkcmVuQ291bnQ6IChjYXRlZ29yeS5jaGlsZHJlbkNvdW50ID8/IDApICsgKGNhdGVnb3J5Lml0ZW1zQ291bnQgPz8gMCksIC8vIEluY2x1ZGUgYWN0aXZpdGllcyBpbiBjaGlsZHJlbiBjb3VudFxuICAgICAgaXRlbXNDb3VudDogY2F0ZWdvcnkuaXRlbXNDb3VudCxcbiAgICAgIG9yaWdpbmFsSXRlbTogY2F0ZWdvcnksXG4gICAgICBpdGVtVHlwZTogJ2NhdGVnb3J5JyBhcyBjb25zdCxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwIGFjdGl2aXR5IGRlZmluaXRpb25zIHRvIGNhdGVnb3J5IGVudGl0aWVzXG4gICAqL1xuICBwcml2YXRlIG1hcEFjdGl2aXRpZXNUb0VudGl0aWVzKFxuICAgIGFjdGl2aXRpZXM6IEFYUEFjdGl2aXR5RGVmaW5pdGlvbltdLFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICk6IEFjdGl2aXR5Q2F0ZWdvcnlFbnRpdHlbXSB7XG4gICAgcmV0dXJuIGFjdGl2aXRpZXMubWFwKChhY3Rpdml0eSkgPT4gKHtcbiAgICAgIGlkOiBgYWN0aXZpdHlfJHthY3Rpdml0eS50eXBlIHx8IGFjdGl2aXR5Lm5hbWV9YCxcbiAgICAgIHRpdGxlOiBhY3Rpdml0eS50aXRsZSB8fCBhY3Rpdml0eS5uYW1lIHx8IGFjdGl2aXR5LnR5cGUsXG4gICAgICBkZXNjcmlwdGlvbjogYWN0aXZpdHkuZGVzY3JpcHRpb24sXG4gICAgICBwYXJlbnRJZDogcGFyZW50SWQsXG4gICAgICBjaGlsZHJlbkNvdW50OiAwLCAvLyBBY3Rpdml0aWVzIGFyZSBsZWFmIG5vZGVzXG4gICAgICBpdGVtc0NvdW50OiAwLFxuICAgICAgb3JpZ2luYWxJdGVtOiBhY3Rpdml0eSxcbiAgICAgIGl0ZW1UeXBlOiAnYWN0aXZpdHknIGFzIGNvbnN0LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iLCI8YXhwLWNhdGVnb3J5LXRyZWVcbiAgW2RhdGFTb3VyY2VdPVwiY2F0ZWdvcnlUcmVlRGF0YVNvdXJjZVwiXG4gIFtjb25maWddPVwiY2F0ZWdvcnlUcmVlQ29uZmlnKClcIlxuICBbYWN0aW9uc109XCJjYXRlZ29yeVRyZWVBY3Rpb25zKClcIlxuICBbZXZlbnRzXT1cImNhdGVnb3J5VHJlZUV2ZW50cygpXCJcbiAgKG5vZGVDbGljayk9XCJoYW5kbGVOb2RlQ2xpY2soJGV2ZW50KVwiXG4+XG48L2F4cC1jYXRlZ29yeS10cmVlPlxuXG4iXX0=","import { Component, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXPWorkflowManager, AXPActivityDefinitionService, AXPWorkflowDefinitionService } from '@acorex/platform/workflow';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';\nimport { RootConfig } from '../../../const';\nimport { AXMActivityCategoriesTreeComponent } from './components/activity-categories-tree/activity-categories-tree.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/components/button-group\";\nimport * as i4 from \"@acorex/components/decorators\";\nimport * as i5 from \"@angular/common\";\nimport * as i6 from \"@acorex/core/translation\";\nexport class WorkflowStudioComponent extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n //#region ---- Services & Dependencies ----\n this.workflowManager = inject(AXPWorkflowManager);\n this.activityDefinitionService = inject(AXPActivityDefinitionService);\n this.entityService = inject(AXPEntityService);\n this.translationService = inject(AXTranslationService);\n this.activatedRoute = inject(ActivatedRoute);\n this.router = inject(Router);\n this.workflowDefinitionService = inject(AXPWorkflowDefinitionService);\n //#endregion\n //#region ---- State ----\n this.activeTab = signal('json', ...(ngDevMode ? [{ debugName: \"activeTab\" }] : []));\n this.selectedCategory = signal(null, ...(ngDevMode ? [{ debugName: \"selectedCategory\" }] : []));\n this.selectedActivity = signal(null, ...(ngDevMode ? [{ debugName: \"selectedActivity\" }] : []));\n this.workflowJson = signal(this.getEmptyWorkflow(), ...(ngDevMode ? [{ debugName: \"workflowJson\" }] : []));\n this.visualNodes = signal([], ...(ngDevMode ? [{ debugName: \"visualNodes\" }] : []));\n this.selectedNode = signal(null, ...(ngDevMode ? [{ debugName: \"selectedNode\" }] : []));\n this.isExecuting = signal(false, ...(ngDevMode ? [{ debugName: \"isExecuting\" }] : []));\n this.executionLogs = signal([], ...(ngDevMode ? [{ debugName: \"executionLogs\" }] : []));\n // Execution Dialog State\n this.showExecutionDialog = signal(false, ...(ngDevMode ? [{ debugName: \"showExecutionDialog\" }] : []));\n this.workflowInstanceState = signal(null, ...(ngDevMode ? [{ debugName: \"workflowInstanceState\" }] : []));\n // UI State\n this.showPropertiesPanel = signal(true, ...(ngDevMode ? [{ debugName: \"showPropertiesPanel\" }] : []));\n this.showWorkflowSettings = signal(false, ...(ngDevMode ? [{ debugName: \"showWorkflowSettings\" }] : []));\n this.activeSettingsTab = signal('general', ...(ngDevMode ? [{ debugName: \"activeSettingsTab\" }] : []));\n // Workflow Settings\n this.workflowSettings = signal({\n definitionId: '',\n name: '',\n description: '',\n inputs: [],\n outputs: [],\n variables: [],\n outcomes: ['Done'],\n usableAsActivity: false,\n autoUpdateConsumingWorkflows: false,\n version: 1,\n isLatest: true,\n isPublished: false,\n toolVersion: '1.0.0',\n providerName: 'WorkflowStudio'\n }, ...(ngDevMode ? [{ debugName: \"workflowSettings\" }] : []));\n // Canvas state\n this.canvasOffset = { x: 0, y: 0 };\n this.isDraggingCanvas = false;\n this.dragStartPos = { x: 0, y: 0 };\n this.draggedActivity = null;\n this.draggedNode = null;\n this.nodeDragOffset = { x: 0, y: 0 };\n this.connectionSource = null;\n /**\n * دسترسی به Object برای استفاده در template\n */\n this.Object = Object;\n /**\n * دسترسی به typeof برای استفاده در template\n */\n this.typeof = (value) => typeof value;\n /**\n * دسترسی به JSON برای استفاده در template\n */\n this.JSON = JSON;\n }\n async ngOnInit() {\n // Page layout initialization\n await super.ngOnInit();\n // Load workflow from query parameter if provided\n await this.loadWorkflowFromRoute();\n }\n /**\n * Load workflow from route query parameter\n */\n async loadWorkflowFromRoute() {\n // Read from snapshot (for initial load)\n const workflowName = this.activatedRoute.snapshot.queryParams['workflow'];\n if (!workflowName) {\n return;\n }\n await this.loadWorkflowByName(workflowName);\n // Subscribe to query param changes (like drive component)\n this.activatedRoute.queryParams.subscribe(async (params) => {\n const newWorkflowName = params['workflow'];\n if (newWorkflowName && newWorkflowName !== workflowName) {\n await this.loadWorkflowByName(newWorkflowName);\n }\n });\n }\n /**\n * Load workflow by name\n */\n async loadWorkflowByName(workflowName) {\n try {\n this.addLog('info', `Loading workflow: ${workflowName}...`);\n // Try to get workflow from entity service first\n const workflowEntityService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name).data();\n const result = await workflowEntityService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [{\n field: 'name',\n operator: { type: 'equal' },\n value: workflowName,\n }]\n }\n });\n let workflowDef = null;\n if (result.items && result.items.length > 0) {\n workflowDef = result.items[0];\n }\n else {\n // Try workflow definition service\n workflowDef = await this.workflowDefinitionService.getWorkflowByName(workflowName);\n }\n if (!workflowDef) {\n this.addLog('warning', `Workflow '${workflowName}' not found`);\n return;\n }\n // Convert workflow definition to studio JSON format\n const studioJson = this.convertWorkflowDefinitionToStudioJson(workflowDef);\n this.workflowJson.set(JSON.stringify(studioJson, null, 2));\n // Update workflow settings\n this.workflowSettings.set({\n definitionId: workflowDef.id || workflowDef.definitionId || workflowDef.name,\n name: workflowDef.name || '',\n description: workflowDef.description || '',\n inputs: (workflowDef.inputs || []).map((input) => ({\n name: input.name,\n title: input.title || input.name,\n description: input.description,\n schema: input.schema || { dataType: 'string' },\n validations: input.validations,\n })),\n outputs: (workflowDef.outputs || []).map((output) => ({\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: output.schema || { dataType: 'string' },\n })),\n variables: workflowDef.variables || [],\n outcomes: workflowDef.outcomes || ['Done'],\n usableAsActivity: workflowDef.extensions?.elsa?.options?.usableAsActivity || false,\n autoUpdateConsumingWorkflows: workflowDef.extensions?.elsa?.options?.autoUpdateConsumingWorkflows || false,\n version: workflowDef.version || 1,\n isLatest: workflowDef.isLatest !== undefined ? workflowDef.isLatest : true,\n isPublished: workflowDef.isPublished || false,\n toolVersion: workflowDef.toolVersion || '1.0.0',\n providerName: workflowDef.providerName || 'ACoreX',\n });\n this.addLog('success', `Workflow '${workflowName}' loaded successfully`);\n // If visual tab is active, convert to visual\n if (this.activeTab() === 'visual') {\n this.jsonToVisual();\n }\n }\n catch (error) {\n this.addLog('error', `Failed to load workflow: ${error.message}`);\n console.error('[WorkflowStudio] Error loading workflow:', error);\n }\n }\n /**\n * Convert workflow definition to studio JSON format\n */\n convertWorkflowDefinitionToStudioJson(workflowDef) {\n // Convert graph format to root activity format\n const graph = workflowDef.graph;\n if (!graph) {\n return this.getEmptyWorkflow();\n }\n // Build root activity structure\n const rootActivity = {\n id: graph.startActivityId || 'root',\n type: 'workflow-activity:sequence',\n name: workflowDef.title || workflowDef.name || 'Root',\n children: [],\n };\n // Convert activities to children\n const activities = graph.activities || [];\n const connections = graph.connections || [];\n // Build activity map\n const activityMap = new Map();\n activities.forEach((activity) => {\n activityMap.set(activity.id, {\n id: activity.id,\n type: activity.name || activity.type,\n name: activity.customProperties?.nodeId || activity.id,\n properties: activity.inputs || {},\n children: [],\n });\n });\n // Build connections tree\n const startActivity = activityMap.get(graph.startActivityId);\n if (startActivity) {\n rootActivity.children.push(startActivity);\n // Follow connections to build tree\n const processed = new Set();\n const processActivity = (activityId) => {\n if (processed.has(activityId)) {\n return;\n }\n processed.add(activityId);\n const activity = activityMap.get(activityId);\n if (!activity) {\n return;\n }\n // Find outgoing connections\n const outgoingConnections = connections.filter((conn) => conn.source.activtyName === activityId);\n outgoingConnections.forEach((conn) => {\n const targetActivity = activityMap.get(conn.target.activtyName);\n if (targetActivity && !processed.has(targetActivity.id)) {\n activity.children.push(targetActivity);\n processActivity(targetActivity.id);\n }\n });\n };\n processActivity(graph.startActivityId);\n }\n return {\n id: workflowDef.id || workflowDef.name || 'workflow',\n name: workflowDef.name || '',\n description: workflowDef.description || '',\n version: workflowDef.version || 1,\n root: rootActivity,\n };\n }\n //#endregion\n //#region ---- Page Layout Overrides ----\n async getPageTitle() {\n return await this.translationService.translateAsync('@workflow-management:workflow-studio.menus.workflow-studio.title');\n }\n async getPageDescription() {\n return await this.translationService.translateAsync('@workflow-management:workflow-studio.menus.workflow-studio.description');\n }\n async getPrimaryMenuItems() {\n return [\n {\n name: 'execute-workflow',\n title: '@workflow-management:workflow-studio.actions.execute-workflow.title',\n icon: 'fa-light fa-play',\n color: 'success',\n disabled: this.isExecuting(),\n },\n {\n name: 'workflow-settings',\n title: '@workflow-management:workflow-studio.actions.settings.title',\n icon: 'fa-light fa-cog',\n color: 'default',\n },\n {\n name: 'export-workflow',\n title: '@workflow-management:workflow-studio.actions.export.title',\n icon: 'fa-light fa-download',\n color: 'default',\n },\n ];\n }\n async getSecondaryMenuItems() {\n return [\n {\n name: 'format-json',\n title: '@workflow-management:workflow-studio.actions.format-json.title',\n icon: 'fa-light fa-code',\n color: 'default',\n },\n {\n name: 'clear-canvas',\n title: '@workflow-management:workflow-studio.actions.clear-canvas.title',\n icon: 'fa-light fa-trash',\n color: 'danger',\n visible: this.activeTab() === 'visual',\n },\n ];\n }\n async execute(command) {\n switch (command.name) {\n case 'execute-workflow':\n this.openExecutionDialog();\n break;\n case 'workflow-settings':\n this.openWorkflowSettings();\n break;\n case 'export-workflow':\n this.downloadWorkflowDefinition();\n break;\n case 'format-json':\n this.formatJson();\n break;\n case 'clear-canvas':\n this.clearCanvas();\n break;\n }\n }\n //#endregion\n //#region ---- Category & Activity Loading ----\n /**\n * Handle category selection from tree\n */\n onCategoryClick(category) {\n this.selectedCategory.set(category);\n this.selectedActivity.set(null);\n }\n /**\n * Handle activity selection from tree\n */\n onActivityClick(activity) {\n this.selectedActivity.set(activity);\n this.addLog('info', `Activity selected: ${activity.name}`);\n }\n /**\n * Convert AXPActivityDefinition to ActivityInfo\n */\n convertActivityDefinitionToInfo(activity) {\n const properties = (activity.inputs || []).map(input => ({\n name: input.name,\n type: this.getPropertyTypeFromSchema(input.schema),\n required: !input.schema.nullable,\n description: input.description,\n defaultValue: input.schema.defaultValue\n }));\n const defaultProperties = {};\n properties.forEach(prop => {\n if (prop.defaultValue !== undefined) {\n defaultProperties[prop.name] = prop.defaultValue;\n }\n });\n return {\n type: activity.type,\n name: activity.name,\n description: activity.description || '',\n icon: activity.icon || 'fa-light fa-circle',\n properties,\n defaultProperties\n };\n }\n /**\n * Get property type from schema\n */\n getPropertyTypeFromSchema(schema) {\n const dataType = schema?.dataType || 'string';\n if (dataType === 'array')\n return 'array';\n if (dataType === 'object')\n return 'object';\n if (dataType === 'boolean')\n return 'boolean';\n if (dataType === 'number' || dataType === 'integer')\n return 'number';\n return 'string';\n }\n /**\n * Get category color\n */\n getCategoryColor(categoryId) {\n const colorMap = {\n 'workflow-markers': '#10B981',\n 'control-flow': '#3B82F6',\n 'user-interaction': '#8B5CF6',\n 'data': '#10B981',\n 'navigation': '#F59E0B',\n 'events': '#EF4444',\n 'http': '#06B6D4'\n };\n return colorMap[categoryId] || '#64748B';\n }\n /**\n * Get empty workflow JSON\n */\n getEmptyWorkflow() {\n return JSON.stringify({\n id: 'new-workflow',\n name: '',\n description: '',\n version: 1,\n root: {\n id: 'root',\n type: 'workflow-activity:sequence',\n name: 'Root',\n children: []\n }\n }, null, 2);\n }\n //#endregion\n /**\n * Sync visualizer with JSON changes\n */\n syncVisualizerWithJson() {\n try {\n if (this.activeTab() === 'visual') {\n this.jsonToVisual();\n }\n }\n catch (err) {\n console.error('[WorkflowStudio] Error syncing visualizer:', err);\n }\n }\n //#region ---- Workflow Execution ----\n /**\n * Open execution dialog\n */\n openExecutionDialog() {\n this.showExecutionDialog.set(true);\n this.workflowInstanceState.set(null);\n }\n /**\n * Close execution dialog\n */\n closeExecutionDialog() {\n this.showExecutionDialog.set(false);\n this.workflowInstanceState.set(null);\n }\n /**\n * Start workflow execution\n */\n async startWorkflowExecution() {\n await this.runWorkflow();\n }\n /**\n * اجرای workflow\n */\n async runWorkflow() {\n this.isExecuting.set(true);\n this.executionLogs.set([]);\n this.workflowInstanceState.set({\n status: 'running',\n startTime: new Date(),\n currentState: null\n });\n this.addLog('info', 'شروع اجرای Workflow...');\n try {\n // Parse JSON\n const workflowDef = JSON.parse(this.workflowJson());\n const logMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.info.json-parsed');\n this.addLog('success', logMessage, workflowDef);\n // Save workflow definition to entity service first\n const workflowId = workflowDef.id || `workflow-${Date.now()}`;\n const definitionToSave = this.exportWorkflowDefinition();\n if (!definitionToSave) {\n throw new Error('Failed to export workflow definition');\n }\n // Save or update workflow definition\n try {\n const existing = await this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name).data().byKey(workflowId);\n if (existing) {\n await this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name).data().update(workflowId, definitionToSave);\n }\n else {\n await this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.workflowDefinition.name).data().create({ ...definitionToSave, id: workflowId });\n }\n const saveMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.success.workflow-saved');\n this.addLog('success', saveMessage);\n }\n catch (saveError) {\n // Continue execution even if save fails\n const saveErrorMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.warning.save-failed');\n this.addLog('warning', `${saveErrorMessage}: ${saveError.message}`);\n }\n // اجرای workflow\n const executingMessage = await this.translationService.translateAsync('@workflow-management:test-pages.messages.info.executing');\n this.addLog('info', executingMessage);\n // Start workflow execution using the workflow name\n const workflowName = definitionToSave.name || workflowId;\n let result = await this.workflowManager.start(workflowName, {});\n this.addLog('info', `Workflow started. Instance ID: ${result.instanceId}`, result);\n if (!result.instanceId) {\n this.addLog('error', '❌ Workflow با خطا مواجه شد', result);\n return;\n }\n // Handle workflow execution loop - execute all frontend tasks\n let currentResult = result;\n let taskCount = 0;\n while (currentResult.nextTask) {\n taskCount++;\n const task = currentResult.nextTask;\n this.addLog('info', `📋 Task ${taskCount}: ${task.activityType} (${task.activityName || task.activityId})`, task);\n try {\n // Execute frontend task\n this.addLog('info', `⚡ Executing task: ${task.activityType}...`);\n // const { output, outcome } = await this.workflowManager.execute(task);\n // this.addLog('success', `✅ Task executed. Outcome: ${outcome}`, { output, outcome });\n // Complete task and get next\n this.addLog('info', `🔄 Completing task and getting next...`);\n // currentResult = await this.workflowManager.complete(\n // currentResult.instanceId!,\n // task,\n // outcome,\n // output\n // );\n if (!currentResult.instanceId) {\n this.addLog('error', '❌ Task completion failed', currentResult);\n break;\n }\n if (currentResult.nextTask) {\n this.addLog('info', `➡️ Next task available: ${currentResult.nextTask.activityType}`);\n }\n else {\n this.addLog('success', '✅ No more tasks. Workflow completed!');\n }\n }\n catch (error) {\n this.addLog('error', `❌ Error executing task: ${error.message}`, error);\n currentResult = {\n ...currentResult,\n success: false,\n error: error.message || 'Task execution failed'\n };\n break;\n }\n }\n // نتیجه\n this.workflowInstanceState.set({\n status: 'finished',\n finalResult: currentResult,\n startTime: this.workflowInstanceState().startTime || new Date(),\n endTime: new Date(),\n result: currentResult,\n currentState: currentResult.state?.output?.['taskStatus'] || currentResult.state?.output?.['currentState']\n });\n if (currentResult.success) {\n this.addLog('success', `✅ Workflow با موفقیت اجرا شد! (${taskCount} task(s) executed)`, currentResult);\n }\n else {\n this.addLog('error', '❌ Workflow با خطا مواجه شد: ' + (currentResult.error || 'Unknown error'), currentResult);\n }\n }\n catch (error) {\n this.addLog('error', '❌ خطا در اجرای Workflow: ' + error.message, error);\n this.workflowInstanceState.set({\n status: 'error',\n error: error.message,\n startTime: this.workflowInstanceState().startTime\n });\n }\n finally {\n this.isExecuting.set(false);\n }\n }\n /**\n * اضافه کردن لاگ\n */\n addLog(level, message, data) {\n const logs = this.executionLogs();\n logs.push({\n timestamp: new Date(),\n level,\n message,\n data\n });\n this.executionLogs.set([...logs]);\n }\n /**\n * کپی کردن نمونه activity\n */\n copyActivityTemplate(activity) {\n const template = {\n id: `${activity.type.toLowerCase()}-${Date.now()}`,\n type: activity.type,\n name: activity.name,\n properties: {}\n };\n // کپی در کلیپ‌بورد\n navigator.clipboard.writeText(JSON.stringify(template, null, 2));\n this.addLog('success', `✂️ Template برای ${activity.name} کپی شد!`);\n }\n /**\n * فرمت کردن JSON\n */\n formatJson() {\n try {\n const parsed = JSON.parse(this.workflowJson());\n this.workflowJson.set(JSON.stringify(parsed, null, 2));\n this.addLog('success', '✨ JSON فرمت شد');\n }\n catch (error) {\n this.addLog('error', '❌ خطا در فرمت: ' + error.message);\n }\n }\n /**\n * باز کردن تنظیمات workflow\n */\n openWorkflowSettings() {\n // Extract settings from current workflow JSON\n try {\n const workflow = JSON.parse(this.workflowJson());\n // Convert old format inputs/outputs to new format\n const convertInput = (input) => {\n if (input.schema) {\n // Already in new format\n return {\n name: input.name,\n title: input.title || input.name,\n description: input.description,\n schema: input.schema,\n validations: input.validations\n };\n }\n else {\n // Old format - convert\n return {\n name: input.name,\n title: input.name,\n description: input.description,\n schema: {\n dataType: input.typeName || 'string',\n defaultValue: input.defaultValue\n },\n validations: input.isRequired ? [{ rule: 'required' }] : undefined\n };\n }\n };\n const convertOutput = (output) => {\n if (output.schema) {\n // Already in new format\n return {\n name: output.name,\n title: output.title || output.name,\n description: output.description,\n schema: output.schema\n };\n }\n else {\n // Old format - convert\n return {\n name: output.name,\n title: output.name,\n description: output.description,\n schema: {\n dataType: output.typeName || 'string'\n }\n };\n }\n };\n this.workflowSettings.set({\n definitionId: workflow.definitionId || workflow.id || '',\n name: workflow.name || '',\n description: workflow.description || '',\n inputs: (workflow.inputs || []).map(convertInput),\n outputs: (workflow.outputs || []).map(convertOutput),\n variables: workflow.variables || [],\n outcomes: workflow.outcomes || ['Done'],\n usableAsActivity: workflow.options?.usableAsActivity || false,\n autoUpdateConsumingWorkflows: workflow.options?.autoUpdateConsumingWorkflows || false,\n version: workflow.version || 1,\n isLatest: workflow.isLatest !== undefined ? workflow.isLatest : true,\n isPublished: workflow.isPublished || false,\n toolVersion: workflow.toolVersion || '1.0.0',\n providerName: workflow.providerName || 'WorkflowStudio'\n });\n }\n catch (error) {\n // If parsing fails, use default settings\n this.workflowSettings.set({\n definitionId: '',\n name: '',\n description: '',\n inputs: [],\n outputs: [],\n variables: [],\n outcomes: ['Done'],\n usableAsActivity: false,\n autoUpdateConsumingWorkflows: false,\n version: 1,\n isLatest: true,\n isPublished: false,\n toolVersion: '1.0.0',\n providerName: 'WorkflowStudio'\n });\n }\n this.showWorkflowSettings.set(true);\n }\n /**\n * بستن تنظیمات workflow\n */\n closeWorkflowSettings() {\n this.showWorkflowSettings.set(false);\n }\n /**\n * ذخیره تنظیمات workflow\n */\n saveWorkflowSettings() {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const settings = this.workflowSettings();\n // Update workflow with settings according to WorkflowDefinition structure\n workflow.definitionId = settings.definitionId;\n workflow.name = settings.name;\n workflow.description = settings.description;\n workflow.version = settings.version;\n workflow.isLatest = settings.isLatest;\n workflow.isPublished = settings.isPublished;\n workflow.toolVersion = settings.toolVersion;\n workflow.providerName = settings.providerName;\n // WorkflowCommon properties\n workflow.options = {\n usableAsActivity: settings.usableAsActivity,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows\n };\n workflow.variables = settings.variables.map(v => ({\n id: v.name, // Use name as id for now\n name: v.name,\n typeName: v.typeName,\n value: v.value,\n storageDriverType: 'Memory' // Default storage driver\n }));\n workflow.inputs = settings.inputs.map(i => ({\n name: i.name,\n title: i.title,\n description: i.description,\n schema: {\n dataType: i.schema.dataType,\n nullable: i.schema.nullable,\n readonly: i.schema.readonly,\n hidden: i.schema.hidden,\n defaultValue: i.schema.defaultValue\n },\n validations: i.validations\n }));\n workflow.outputs = settings.outputs.map(o => ({\n name: o.name,\n title: o.title,\n description: o.description,\n schema: {\n dataType: o.schema.dataType\n }\n }));\n workflow.outcomes = settings.outcomes;\n workflow.customProperties = workflow.customProperties || {};\n workflow.isReadonly = false;\n workflow.isSystem = false;\n this.workflowJson.set(JSON.stringify(workflow, null, 2));\n this.addLog('success', '✅ تنظیمات ورک فلو ذخیره شد');\n this.closeWorkflowSettings();\n }\n catch (error) {\n this.addLog('error', '❌ خطا در ذخیره تنظیمات: ' + error.message);\n }\n }\n /**\n * Export workflow به فرمت Elsa Workflow Definition v3.0.0\n * https://elsaworkflows.io/schemas/workflow-definition/v3.0.0/schema.json\n */\n exportWorkflowDefinition() {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const settings = this.workflowSettings();\n // Create Elsa Workflow Definition v3.0.0 structure\n const definition = {\n // VersionedEntity fields\n id: workflow.id || this.generateId(),\n version: settings.version,\n isLatest: settings.isLatest,\n isPublished: settings.isPublished,\n // Identification fields\n definitionId: settings.definitionId || workflow.id || this.generateId(),\n name: settings.name || workflow.name || 'Untitled Workflow',\n description: settings.description || workflow.description || '',\n toolVersion: settings.toolVersion || '3.0.0',\n // Materialization fields\n providerName: settings.providerName || 'ACoreX',\n materializerContext: {\n materializerName: 'Json',\n // Store the root activity as JSON string\n stringData: JSON.stringify(workflow.root)\n },\n // WorkflowCommon fields\n options: {\n usableAsActivity: settings.usableAsActivity || false,\n autoUpdateConsumingWorkflows: settings.autoUpdateConsumingWorkflows || false\n },\n // Variables array\n variables: settings.variables.map(v => ({\n id: v.name,\n name: v.name,\n typeName: v.typeName,\n value: v.value,\n storageDriverType: 'Memory'\n })),\n // Inputs array\n inputs: settings.inputs.map(i => ({\n name: i.name,\n title: i.title,\n description: i.description,\n schema: {\n dataType: i.schema.dataType,\n nullable: i.schema.nullable,\n readonly: i.schema.readonly,\n hidden: i.schema.hidden,\n defaultValue: i.schema.defaultValue\n },\n validations: i.validations || []\n })),\n // Outputs array\n outputs: settings.outputs.map(o => ({\n name: o.name,\n title: o.title,\n description: o.description,\n schema: {\n dataType: o.schema.dataType\n }\n })),\n // Outcomes array\n outcomes: settings.outcomes || ['Done'],\n // Custom properties\n customProperties: workflow.customProperties || {},\n // Flags\n isReadonly: false,\n isSystem: false,\n // Root activity (direct reference for Elsa compatibility)\n root: workflow.root\n };\n return definition;\n }\n catch (error) {\n this.addLog('error', '❌ خطا در export: ' + error.message);\n return null;\n }\n }\n /**\n * دانلود WorkflowDefinition به صورت JSON file\n */\n downloadWorkflowDefinition() {\n const definition = this.exportWorkflowDefinition();\n if (!definition)\n return;\n const blob = new Blob([JSON.stringify(definition, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `${definition.definitionId || 'workflow'}-v${definition.version}.json`;\n link.click();\n URL.revokeObjectURL(url);\n this.addLog('success', `📥 Workflow Definition دانلود شد: ${link.download}`);\n }\n generateId() {\n return `wf-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n /**\n * تغییر تب settings\n */\n switchSettingsTab(tab) {\n this.activeSettingsTab.set(tab);\n }\n // ============ Workflow Inputs Management ============\n addWorkflowInput() {\n const settings = this.workflowSettings();\n settings.inputs.push({\n name: `input${settings.inputs.length + 1}`,\n title: `Input ${settings.inputs.length + 1}`,\n description: '',\n schema: {\n dataType: 'string',\n defaultValue: undefined\n },\n validations: undefined\n });\n this.workflowSettings.set({ ...settings });\n }\n removeWorkflowInput(index) {\n const settings = this.workflowSettings();\n settings.inputs.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowInput(index, field, value) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (field === 'schema') {\n // For nested schema updates\n input[field] = value;\n }\n else if (field.startsWith('schema.')) {\n // For nested schema properties like 'schema.dataType'\n const schemaField = field.replace('schema.', '');\n if (!input.schema) {\n input.schema = { dataType: 'string' };\n }\n input.schema[schemaField] = value;\n }\n else {\n input[field] = value;\n }\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowInputSchema(index, schemaField, value) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (!input.schema) {\n input.schema = { dataType: 'string' };\n }\n input.schema[schemaField] = value;\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowInputValidation(index, isRequired) {\n const settings = this.workflowSettings();\n const input = settings.inputs[index];\n if (isRequired) {\n if (!input.validations) {\n input.validations = [];\n }\n if (!input.validations.some(v => v.rule === 'required')) {\n input.validations.push({ rule: 'required' });\n }\n }\n else {\n input.validations = input.validations?.filter(v => v.rule !== 'required');\n if (input.validations?.length === 0) {\n input.validations = undefined;\n }\n }\n this.workflowSettings.set({ ...settings });\n }\n getInputIsRequired(input) {\n return input.validations?.some(v => v.rule === 'required') ?? false;\n }\n // ============ Workflow Outputs Management ============\n addWorkflowOutput() {\n const settings = this.workflowSettings();\n settings.outputs.push({\n name: `output${settings.outputs.length + 1}`,\n title: `Output ${settings.outputs.length + 1}`,\n description: '',\n schema: {\n dataType: 'string'\n }\n });\n this.workflowSettings.set({ ...settings });\n }\n removeWorkflowOutput(index) {\n const settings = this.workflowSettings();\n settings.outputs.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowOutput(index, field, value) {\n const settings = this.workflowSettings();\n const output = settings.outputs[index];\n if (field.startsWith('schema.')) {\n // For nested schema properties like 'schema.dataType'\n const schemaField = field.replace('schema.', '');\n if (!output.schema) {\n output.schema = { dataType: 'string' };\n }\n output.schema[schemaField] = value;\n }\n else {\n output[field] = value;\n }\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowOutputSchema(index, schemaField, value) {\n const settings = this.workflowSettings();\n const output = settings.outputs[index];\n if (!output.schema) {\n output.schema = { dataType: 'string' };\n }\n output.schema[schemaField] = value;\n this.workflowSettings.set({ ...settings });\n }\n // ============ Workflow Variables Management ============\n addWorkflowVariable() {\n const settings = this.workflowSettings();\n settings.variables.push({\n name: `variable${settings.variables.length + 1}`,\n typeName: 'string',\n value: '',\n description: ''\n });\n this.workflowSettings.set({ ...settings });\n }\n removeWorkflowVariable(index) {\n const settings = this.workflowSettings();\n settings.variables.splice(index, 1);\n this.workflowSettings.set({ ...settings });\n }\n updateWorkflowVariable(index, field, value) {\n const settings = this.workflowSettings();\n settings.variables[index][field] = value;\n this.workflowSettings.set({ ...settings });\n }\n /**\n * به‌روزرسانی outcomes از string\n */\n updateOutcomes(outcomesString) {\n const settings = this.workflowSettings();\n settings.outcomes = outcomesString\n .split(',')\n .map(o => o.trim())\n .filter(o => o.length > 0);\n this.workflowSettings.set({ ...settings });\n }\n /**\n * پاک کردن لاگ‌ها\n */\n clearLogs() {\n this.executionLogs.set([]);\n }\n // ============ Visual Designer Methods ============\n /**\n * تغییر تب\n */\n switchTab(tab) {\n if (tab === 'visual' && this.activeTab() === 'json') {\n // تبدیل JSON به Visual\n this.jsonToVisual();\n }\n else if (tab === 'json' && this.activeTab() === 'visual') {\n // تبدیل Visual به JSON\n this.visualToJson();\n }\n this.activeTab.set(tab);\n }\n /**\n * انتخاب Node\n */\n selectNodeById(node) {\n this.selectedNode.set(node);\n }\n /**\n * حذف Node\n */\n deleteNode(nodeId) {\n const nodes = this.visualNodes().filter(n => n.id !== nodeId);\n // حذف اتصالات به این نود\n nodes.forEach(n => {\n n.connections = n.connections.filter(c => c !== nodeId);\n });\n this.visualNodes.set(nodes);\n if (this.selectedNode()?.id === nodeId) {\n this.selectedNode.set(null);\n }\n this.addLog('info', `🗑️ Node حذف شد`);\n }\n /**\n * اتصال دو Node با outcome مشخص\n */\n connectNodes(fromId, toId, outcome) {\n const nodes = this.visualNodes();\n const fromNodeIndex = nodes.findIndex(n => n.id === fromId);\n const toNode = nodes.find(n => n.id === toId);\n if (fromNodeIndex !== -1 && toNode) {\n const fromNode = nodes[fromNodeIndex];\n // Use outcome-based connections if available\n if (outcome && fromNode.outcomes && fromNode.outcomes.length > 1) {\n const outcomeConnections = fromNode.outcomeConnections || [];\n // Check if this outcome already has a connection\n const existingConnection = outcomeConnections.find(c => c.outcome === outcome);\n if (existingConnection) {\n this.addLog('warning', `⚠️ Outcome \"${outcome}\" قبلاً متصل شده است`);\n return;\n }\n // Add new outcome connection\n const updatedNodes = [...nodes];\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n outcomeConnections: [...outcomeConnections, { outcome, targetNodeId: toId }],\n connections: [...fromNode.connections, toId] // Keep for backward compat\n };\n this.visualNodes.set(updatedNodes);\n this.addLog('success', `🔗 ${fromNode.name} [${outcome}] → ${toNode.name}`);\n }\n else {\n // Simple connection (no outcomes)\n if (!fromNode.connections.includes(toId)) {\n const updatedNodes = [...nodes];\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n connections: [...fromNode.connections, toId]\n };\n this.visualNodes.set(updatedNodes);\n this.addLog('success', `🔗 ${fromNode.name} متصل شد به ${toNode.name}`);\n }\n else {\n this.addLog('warning', '⚠️ این اتصال از قبل وجود دارد');\n }\n }\n }\n else {\n this.addLog('error', '❌ خطا در ایجاد اتصال');\n }\n }\n /**\n * قطع اتصال (با یا بدون outcome)\n */\n disconnectNodes(fromId, toId, outcome) {\n const nodes = this.visualNodes();\n const fromNodeIndex = nodes.findIndex(n => n.id === fromId);\n if (fromNodeIndex !== -1) {\n const fromNode = nodes[fromNodeIndex];\n const updatedNodes = [...nodes];\n // Remove from outcome connections if specified\n if (outcome && fromNode.outcomeConnections) {\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n outcomeConnections: fromNode.outcomeConnections.filter(c => !(c.outcome === outcome && c.targetNodeId === toId)),\n connections: fromNode.connections.filter(c => c !== toId)\n };\n }\n else {\n // Simple disconnect\n updatedNodes[fromNodeIndex] = {\n ...fromNode,\n connections: fromNode.connections.filter(c => c !== toId),\n outcomeConnections: fromNode.outcomeConnections?.filter(c => c.targetNodeId !== toId)\n };\n }\n this.visualNodes.set(updatedNodes);\n this.addLog('info', `✂️ اتصال قطع شد${outcome ? ` [${outcome}]` : ''}`);\n }\n }\n /**\n * تبدیل JSON به Visual\n */\n jsonToVisual() {\n try {\n const workflow = JSON.parse(this.workflowJson());\n const nodes = [];\n let yPos = 100;\n // پردازش root activity\n if (workflow.root) {\n this.processActivityToNode(workflow.root, nodes, 100, yPos);\n }\n this.visualNodes.set(nodes);\n this.addLog('success', '✅ JSON به Visual تبدیل شد');\n }\n catch (error) {\n this.addLog('error', '❌ خطا در تبدیل: ' + error.message);\n }\n }\n /**\n * پردازش Activity به Node (recursive)\n */\n processActivityToNode(activity, nodes, x, y, parentId) {\n const nodeId = activity.id || `${activity.type}-${Date.now()}-${Math.random()}`;\n // Get outcomes for this activity type (use default for now, will be updated async if needed)\n const outcomes = ['Done']; // Default outcome, will be updated when activity info is loaded\n // Get outcomeConnections from activity definition\n const outcomeConnections = activity.outcomeConnections || [];\n // Build simple connections list from outcomeConnections for backward compatibility\n const connections = outcomeConnections.map((conn) => conn.targetNodeId);\n const node = {\n id: nodeId,\n type: activity.type,\n name: activity.name || activity.type,\n icon: this.getIconForActivityType(activity.type),\n properties: activity.properties || {},\n position: { x, y },\n connections: connections,\n outcomeConnections: outcomeConnections,\n outcomes: outcomes\n };\n nodes.push(node);\n // اگر parent دارد، اتصال برقرار کن (برای Sequence)\n if (parentId && !outcomeConnections.length) {\n const parentNode = nodes.find(n => n.id === parentId);\n if (parentNode && !parentNode.connections.includes(nodeId)) {\n parentNode.connections.push(nodeId);\n }\n }\n // پردازش children (برای Sequence) - اما فقط اگر outcomeConnections نباشد\n if (activity.children && Array.isArray(activity.children) && !outcomeConnections.length) {\n let childY = y;\n activity.children.forEach((child, index) => {\n childY = y + (index * 100);\n this.processActivityToNode(child, nodes, x + 250, childY, nodeId);\n });\n }\n return nodeId;\n }\n /**\n * تبدیل Visual به JSON\n */\n visualToJson() {\n try {\n const nodes = this.visualNodes();\n if (nodes.length === 0) {\n this.addLog('warning', '⚠️ هیچ Node ای وجود ندارد');\n return;\n }\n // پیدا کردن root node (node بدون parent)\n const rootNode = this.findRootNode(nodes);\n if (!rootNode) {\n this.addLog('error', '❌ Root Node پیدا نشد');\n return;\n }\n const workflow = {\n id: 'visual-workflow-' + Date.now(),\n name: 'Visual Workflow',\n version: 1,\n root: this.nodeToActivity(rootNode, nodes)\n };\n this.workflowJson.set(JSON.stringify(workflow, null, 2));\n this.addLog('success', '✅ Visual به JSON تبدیل شد');\n }\n catch (error) {\n this.addLog('error', '❌ خطا در تبدیل: ' + error.message);\n }\n }\n /**\n * پیدا کردن Root Node\n */\n findRootNode(nodes) {\n // Node ای که به آن اشاره نشده\n const connectedIds = new Set();\n nodes.forEach(n => n.connections.forEach(c => connectedIds.add(c)));\n const rootNodes = nodes.filter(n => !connectedIds.has(n.id));\n return rootNodes[0] || nodes[0];\n }\n /**\n * تبدیل Node به Activity (recursive)\n */\n nodeToActivity(node, allNodes) {\n const activity = {\n id: node.id,\n type: node.type,\n name: node.name,\n properties: node.properties\n };\n // اگر children دارد (connections)\n if (node.connections.length > 0) {\n const children = node.connections\n .map(connId => allNodes.find(n => n.id === connId))\n .filter(n => n !== undefined)\n .map(childNode => this.nodeToActivity(childNode, allNodes));\n if (children.length > 0) {\n activity.children = children;\n }\n }\n return activity;\n }\n /**\n * دریافت آیکون برای نوع Activity\n */\n getIconForActivityType(type) {\n const iconMap = {\n 'workflow-activity:sequence': 'fa-light fa-list-ol',\n 'workflow-activity:show-confirm-dialog': 'fa-light fa-question-circle',\n 'workflow-activity:show-alert-dialog': 'fa-light fa-circle-info',\n 'workflow-activity:show-toast': 'fa-light fa-bell',\n 'workflow-activity:set-variable': 'fa-light fa-variable',\n 'workflow-activity:execute-query': 'fa-light fa-search',\n 'workflow-activity:execute-command': 'fa-light fa-bolt',\n 'workflow-activity:navigate': 'fa-light fa-route',\n 'workflow-activity:dispatch-event': 'fa-light fa-paper-plane'\n };\n return iconMap[type] || 'fa-light fa-circle';\n }\n /**\n * به‌روزرسانی property نود\n */\n updateNodeProperty(nodeId, propertyName, value) {\n const nodes = this.visualNodes();\n const nodeIndex = nodes.findIndex(n => n.id === nodeId);\n if (nodeIndex !== -1) {\n const node = nodes[nodeIndex];\n const updatedNodes = [...nodes];\n if (propertyName === 'name') {\n updatedNodes[nodeIndex] = {\n ...node,\n name: value\n };\n }\n else {\n const newProperties = {\n ...node.properties,\n [propertyName]: value\n };\n let newOutcomes = node.outcomes;\n const shouldRecomputeOutcomes = (propertyName === 'expectedStatusCodes' && node.type === 'workflow-activity:http-request') ||\n (propertyName === 'actions' && node.type === 'workflow-activity:human-task');\n if (shouldRecomputeOutcomes) {\n this.findActivityInfo(node.type).then(activityInfo => {\n if (activityInfo) {\n const computedOutcomes = this.computeOutcomes(activityInfo, newProperties);\n const updatedNodes = this.visualNodes();\n const nodeIdx = updatedNodes.findIndex(n => n.id === nodeId);\n if (nodeIdx !== -1) {\n updatedNodes[nodeIdx] = {\n ...updatedNodes[nodeIdx],\n outcomes: computedOutcomes\n };\n this.visualNodes.set([...updatedNodes]);\n this.addLog('info', `🔄 Outcomes updated: [${computedOutcomes.join(', ')}]`);\n }\n }\n }).catch(() => {\n });\n }\n updatedNodes[nodeIndex] = {\n ...node,\n properties: newProperties,\n outcomes: newOutcomes\n };\n }\n this.visualNodes.set(updatedNodes);\n if (this.selectedNode()?.id === nodeId) {\n this.selectedNode.set(updatedNodes[nodeIndex]);\n }\n }\n }\n /**\n * پیدا کردن activity info بر اساس type\n */\n async findActivityInfo(type) {\n try {\n const activity = await this.activityDefinitionService.getActivityByName(type);\n if (activity) {\n return this.convertActivityDefinitionToInfo(activity);\n }\n }\n catch (error) {\n console.warn(`Failed to find activity info for type: ${type}`, error);\n }\n return null;\n }\n /**\n * پاک کردن همه نودها\n */\n clearCanvas() {\n this.visualNodes.set([]);\n this.selectedNode.set(null);\n this.addLog('info', '🗑️ Canvas پاک شد');\n }\n // ============ Drag & Drop Methods ============\n /**\n * شروع drag از activity list\n */\n onActivityDragStart(event, activity) {\n this.draggedActivity = activity;\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'copy';\n event.dataTransfer.setData('text/plain', activity.type);\n }\n this.addLog('info', `🎯 در حال Drag: ${activity.name}`);\n }\n /**\n * پایان drag از activity list\n */\n onActivityDragEnd(event) {\n this.draggedActivity = null;\n }\n /**\n * drag over روی Canvas\n */\n onCanvasDragOver(event) {\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy';\n }\n }\n /**\n * drag leave از Canvas\n */\n onCanvasDragLeave(event) {\n // می‌توان از این برای visual feedback استفاده کرد\n }\n /**\n * محاسبه outcomes برای یک activity\n */\n computeOutcomes(activityInfo, properties) {\n // For HTTP Request with expected status codes\n if (activityInfo.type === 'workflow-activity:http-request' && properties['expectedStatusCodes']) {\n const codes = Array.isArray(properties['expectedStatusCodes'])\n ? properties['expectedStatusCodes']\n : [properties['expectedStatusCodes']];\n const statusOutcomes = codes.map((code) => code.toString());\n return [...statusOutcomes, 'Done', 'Failed', 'Timeout'];\n }\n // Human Task: outcomes from actions (prefix/suffix) in workflow definition\n if (activityInfo.type === 'workflow-activity:human-task' && properties['actions']) {\n const names = [];\n try {\n const actions = properties['actions'];\n const parsed = typeof actions === 'string' ? JSON.parse(actions) : actions;\n const prefix = parsed?.prefix ?? [];\n const suffix = parsed?.suffix ?? [];\n for (const item of [...prefix, ...suffix]) {\n const name = item?.command?.name ?? item?.name;\n if (name && typeof name === 'string' && !names.includes(name))\n names.push(name);\n }\n }\n catch {\n // ignore parse error\n }\n if (names.length > 0)\n return names;\n }\n // Default: check activity info for outcomes\n const outcomeMap = {\n 'workflow-activity:if': ['Then', 'Else'],\n 'workflow-activity:show-confirm-dialog': ['Confirmed', 'Cancelled'],\n 'workflow-activity:show-alert-dialog': ['Done'],\n 'workflow-activity:show-form': ['Submitted', 'Cancelled'],\n 'workflow-activity:human-task': ['submit', 'cancel'],\n 'workflow-activity:http-request': ['Done', 'Failed', 'Timeout'],\n 'workflow-activity:sequence': ['Done'],\n 'workflow-activity:for-each': ['Done'],\n 'workflow-activity:while': ['Done'],\n 'workflow-activity:set-variable': ['Done'],\n 'workflow-activity:execute-query': ['Done'],\n 'workflow-activity:execute-command': ['Done'],\n 'workflow-activity:navigate': ['Done'],\n 'workflow-activity:show-toast': ['Done'],\n 'workflow-activity:dispatch-event': ['Done']\n };\n return outcomeMap[activityInfo.type] || ['Done'];\n }\n /**\n * drop روی Canvas - اضافه کردن activity جدید\n */\n onCanvasDrop(event) {\n event.preventDefault();\n if (!this.draggedActivity) {\n return;\n }\n const canvas = event.currentTarget;\n const rect = canvas.getBoundingClientRect();\n const x = event.clientX - rect.left - 75; // center node\n const y = event.clientY - rect.top - 40;\n const nodes = this.visualNodes();\n const defaultProps = { ...(this.draggedActivity.defaultProperties || {}) };\n const newNode = {\n id: `${this.draggedActivity.type}-${Date.now()}`,\n type: this.draggedActivity.type,\n name: this.draggedActivity.name,\n icon: this.draggedActivity.icon,\n properties: defaultProps,\n position: { x: Math.max(0, x), y: Math.max(0, y) },\n connections: [],\n outcomeConnections: [],\n outcomes: this.computeOutcomes(this.draggedActivity, defaultProps)\n };\n this.visualNodes.set([...nodes, newNode]);\n const outcomesInfo = newNode.outcomes && newNode.outcomes.length > 1\n ? ` with ${newNode.outcomes.length} outcomes [${newNode.outcomes.join(', ')}]`\n : '';\n this.addLog('success', `✅ Activity ${this.draggedActivity.name} اضافه شد${outcomesInfo}`);\n this.draggedActivity = null;\n }\n /**\n * شروع drag نود\n */\n onNodeDragStart(event, node) {\n this.draggedNode = node;\n const target = event.target;\n const rect = target.getBoundingClientRect();\n this.nodeDragOffset = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top\n };\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n // Make drag image transparent\n const img = new Image();\n img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n event.dataTransfer.setDragImage(img, 0, 0);\n }\n }\n /**\n * در حال drag نود\n */\n onNodeDrag(event, node) {\n if (!this.draggedNode || event.clientX === 0 || event.clientY === 0) {\n return;\n }\n const canvas = document.querySelector('.canvas-area');\n if (!canvas)\n return;\n const rect = canvas.getBoundingClientRect();\n const x = event.clientX - rect.left - this.nodeDragOffset.x;\n const y = event.clientY - rect.top - this.nodeDragOffset.y;\n const nodes = this.visualNodes();\n const nodeIndex = nodes.findIndex(n => n.id === node.id);\n if (nodeIndex !== -1) {\n nodes[nodeIndex].position = {\n x: Math.max(0, x),\n y: Math.max(0, y)\n };\n this.visualNodes.set([...nodes]);\n }\n }\n /**\n * پایان drag نود\n */\n onNodeDragEnd(event, node) {\n this.draggedNode = null;\n }\n /**\n * کلیک روی کانکتور - برای ایجاد اتصال (برای activities با یک outcome)\n */\n onConnectorClick(event, node, type) {\n event.stopPropagation();\n if (!this.connectionSource) {\n // اولین کلیک - ذخیره source\n if (type === 'out') {\n this.connectionSource = { node, type };\n this.addLog('info', `🔗 منبع اتصال انتخاب شد: ${node.name}`);\n }\n }\n else {\n // دومین کلیک - ایجاد اتصال\n if (type === 'in' && this.connectionSource.node.id !== node.id) {\n this.connectNodes(this.connectionSource.node.id, node.id, this.connectionSource.outcome);\n this.connectionSource = null;\n }\n else {\n this.addLog('warning', '⚠️ اتصال نامعتبر - ابتدا روی connector خروجی و سپس ورودی کلیک کنید');\n this.connectionSource = null;\n }\n }\n }\n /**\n * کلیک روی outcome connector - برای activities با چند outcome\n */\n onOutcomeConnectorClick(event, node, outcome) {\n event.stopPropagation();\n if (!this.connectionSource) {\n // اولین کلیک - ذخیره source با outcome\n this.connectionSource = { node, type: 'out', outcome };\n this.addLog('info', `🔗 منبع اتصال انتخاب شد: ${node.name} [${outcome}]`);\n }\n else {\n this.addLog('warning', '⚠️ لطفاً روی input connector یک نود دیگر کلیک کنید');\n this.connectionSource = null;\n }\n }\n // ============ UI Methods ============\n /**\n * تغییر وضعیت نمایش Properties Panel\n */\n togglePropertiesPanel() {\n this.showPropertiesPanel.set(!this.showPropertiesPanel());\n }\n // ============ Template Helper Methods ============\n /**\n * پیدا کردن Node با ID\n */\n findNodeById(nodeId) {\n return this.visualNodes().find(n => n.id === nodeId);\n }\n /**\n * بررسی اینکه آیا properties خالی است یا نه\n */\n hasProperties(properties) {\n return properties && Object.keys(properties).length > 0;\n }\n /**\n * دریافت رنگ بر اساس outcome\n */\n getOutcomeColor(outcome) {\n const colorMap = {\n '200': '#10b981', // Green - Success\n 'Done': '#10b981', // Green - Success\n 'Success': '#10b981', // Green - Success\n '404': '#ef4444', // Red - Error\n '500': '#ef4444', // Red - Error\n 'Failed': '#ef4444', // Red - Error\n 'Error': '#ef4444', // Red - Error\n 'Timeout': '#f59e0b', // Orange - Warning\n 'Cancelled': '#f59e0b', // Orange - Warning\n 'Then': '#3b82f6', // Blue - Info\n 'Else': '#64748b', // Gray\n };\n return colorMap[outcome] || '#8b5cf6'; // Purple - Default\n }\n /**\n * دریافت نام رنگ برای marker ID\n */\n getOutcomeColorName(outcome) {\n if (['200', 'Done', 'Success'].includes(outcome)) {\n return 'success';\n }\n if (['404', '500', 'Failed', 'Error'].includes(outcome)) {\n return 'error';\n }\n if (['Timeout', 'Cancelled'].includes(outcome)) {\n return 'warning';\n }\n if (['Then'].includes(outcome)) {\n return 'info';\n }\n return 'default';\n }\n /**\n * به‌روزرسانی property با parse کردن JSON\n */\n updateNodePropertyJSON(nodeId, propertyName, jsonString) {\n try {\n const value = JSON.parse(jsonString);\n this.updateNodeProperty(nodeId, propertyName, value);\n }\n catch (error) {\n // اگر JSON نامعتبر بود، چیزی نکن\n console.warn('Invalid JSON:', jsonString);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowStudioComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: WorkflowStudioComponent, isStandalone: true, selector: \"app-workflow-studio\", providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: WorkflowStudioComponent,\n },\n ], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout>\\n <axp-layout-start-side>\\n <axp-activity-categories-tree (categoryClick)=\\\"onCategoryClick($event)\\\"\\n (activityClick)=\\\"onActivityClick($event)\\\"></axp-activity-categories-tree>\\n </axp-layout-start-side>\\n\\n <axp-page-toolbar>\\n <axp-layout-prefix>\\n <!-- Editor Tabs -->\\n <ax-button-group class=\\\"ax-sm\\\" [selection]=\\\"'single'\\\">\\n <ax-button-group-item (onClick)=\\\"switchTab('json')\\\" [selected]=\\\"activeTab() === 'json'\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-code\\\"></i>\\n </ax-prefix>\\n {{ '@workflow-management:workflow-studio.terms.json-editor' | translate | async }}\\n </ax-button-group-item>\\n <ax-button-group-item (onClick)=\\\"switchTab('visual')\\\" [selected]=\\\"activeTab() === 'visual'\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-diagram-project\\\"></i>\\n </ax-prefix>\\n {{ '@workflow-management:workflow-studio.terms.visual-designer' | translate | async }}\\n </ax-button-group-item>\\n </ax-button-group>\\n </axp-layout-prefix>\\n </axp-page-toolbar>\\n\\n <axp-page-content>\\n <div class=\\\"workflow-studio\\\">\\n <!-- Main Layout -->\\n <div class=\\\"studio-body\\\" [class.properties-hidden]=\\\"!showPropertiesPanel()\\\">\\n\\n <!-- Editor -->\\n <div class=\\\"studio-editor\\\">\\n <!-- Tab Content -->\\n <div class=\\\"editor-content\\\">\\n <!-- JSON Tab -->\\n @if (activeTab() === 'json') {\\n <div class=\\\"json-tab\\\">\\n <textarea class=\\\"json-editor\\\" [(ngModel)]=\\\"workflowJson\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.components.json-editor.placeholder' | translate | async\\\"\\n spellcheck=\\\"false\\\">\\n </textarea>\\n </div>\\n }\\n\\n <!-- Visual Tab -->\\n @if (activeTab() === 'visual') {\\n <div class=\\\"visual-tab\\\">\\n <!-- Canvas -->\\n <div class=\\\"visual-canvas\\\">\\n <div class=\\\"canvas-toolbar\\\">\\n <button class=\\\"tool-btn\\\" (click)=\\\"clearCanvas()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.canvas-toolbar.clear-canvas.title' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n <button class=\\\"tool-btn\\\" (click)=\\\"visualToJson()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.canvas-toolbar.convert-to-json.title' | translate | async\\\">\\n <i class=\\\"fa-light fa-code\\\"></i>\\n </button>\\n <span class=\\\"tool-info\\\">\\n <i class=\\\"fa-light fa-lightbulb\\\"></i>\\n <strong>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.hint' | translate | async }}</strong>\\n </span>\\n </div>\\n\\n <div class=\\\"canvas-area\\\" (drop)=\\\"onCanvasDrop($event)\\\" (dragover)=\\\"onCanvasDragOver($event)\\\"\\n (dragleave)=\\\"onCanvasDragLeave($event)\\\">\\n <!-- SVG for Connections -->\\n <svg class=\\\"connections-layer\\\">\\n <!-- Outcome-based Connections -->\\n @for (node of visualNodes(); track node.id) {\\n @if (node.outcomeConnections && node.outcomeConnections.length > 0) {\\n @for (conn of node.outcomeConnections; track conn.targetNodeId + conn.outcome) {\\n @let targetNode = findNodeById(conn.targetNodeId);\\n @if (targetNode) {\\n <g class=\\\"outcome-connection-group\\\">\\n <line [attr.x1]=\\\"node.position.x + 75\\\" [attr.y1]=\\\"node.position.y + 80\\\"\\n [attr.x2]=\\\"targetNode.position.x + 75\\\" [attr.y2]=\\\"targetNode.position.y - 50\\\"\\n class=\\\"connection-line outcome-line\\\" [attr.stroke]=\\\"getOutcomeColor(conn.outcome)\\\"\\n stroke-width=\\\"2.5\\\"\\n [attr.marker-end]=\\\"'url(#arrowhead-' + getOutcomeColorName(conn.outcome) + ')'\\\"\\n style=\\\"cursor: pointer\\\" (dblclick)=\\\"disconnectNodes(node.id, conn.targetNodeId, conn.outcome)\\\"\\n [attr.title]=\\\"'Outcome: ' + conn.outcome + ' (Double-click to remove)'\\\">\\n <title>{{ conn.outcome }} \\u2192 {{ targetNode.name }}</title>\\n </line>\\n <text [attr.x]=\\\"(node.position.x + targetNode.position.x) / 2 + 75\\\"\\n [attr.y]=\\\"(node.position.y + targetNode.position.y) / 2 + 15\\\" class=\\\"connection-label\\\"\\n text-anchor=\\\"middle\\\" [attr.fill]=\\\"getOutcomeColor(conn.outcome)\\\" font-size=\\\"11\\\"\\n font-weight=\\\"600\\\" pointer-events=\\\"none\\\">\\n {{ conn.outcome }}\\n </text>\\n </g>\\n }\\n }\\n } @else {\\n <!-- Simple Connections (backward compatibility) -->\\n @for (targetId of node.connections; track targetId) {\\n @let targetNode = findNodeById(targetId);\\n @if (targetNode) {\\n <line [attr.x1]=\\\"node.position.x + 75\\\" [attr.y1]=\\\"node.position.y + 40\\\"\\n [attr.x2]=\\\"targetNode.position.x + 75\\\" [attr.y2]=\\\"targetNode.position.y - 50\\\"\\n class=\\\"connection-line\\\" stroke=\\\"#64748b\\\" stroke-width=\\\"2\\\" marker-end=\\\"url(#arrowhead-default)\\\"\\n style=\\\"cursor: pointer\\\" (dblclick)=\\\"disconnectNodes(node.id, targetId)\\\"\\n title=\\\"Double-click \\u0628\\u0631\\u0627\\u06CC \\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <title>Double-click \\u0628\\u0631\\u0627\\u06CC \\u062D\\u0630\\u0641</title>\\n </line>\\n }\\n }\\n }\\n }\\n\\n <defs>\\n <!-- Default Arrow -->\\n <marker id=\\\"arrowhead-default\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#64748b\\\" />\\n </marker>\\n <!-- Success Arrow (Green) -->\\n <marker id=\\\"arrowhead-success\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#10b981\\\" />\\n </marker>\\n <!-- Error Arrow (Red) -->\\n <marker id=\\\"arrowhead-error\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#ef4444\\\" />\\n </marker>\\n <!-- Warning Arrow (Orange) -->\\n <marker id=\\\"arrowhead-warning\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#f59e0b\\\" />\\n </marker>\\n <!-- Info Arrow (Blue) -->\\n <marker id=\\\"arrowhead-info\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#3b82f6\\\" />\\n </marker>\\n </defs>\\n </svg>\\n\\n <!-- Nodes -->\\n @for (node of visualNodes(); track node.id) {\\n <div class=\\\"visual-node\\\" [class.selected]=\\\"selectedNode()?.id === node.id\\\"\\n [style.left.px]=\\\"node.position.x\\\" [style.top.px]=\\\"node.position.y\\\" [attr.data-node-id]=\\\"node.id\\\"\\n draggable=\\\"true\\\" (dragstart)=\\\"onNodeDragStart($event, node)\\\" (drag)=\\\"onNodeDrag($event, node)\\\"\\n (dragend)=\\\"onNodeDragEnd($event, node)\\\" (click)=\\\"selectNodeById(node)\\\">\\n <div class=\\\"node-header\\\">\\n <i [class]=\\\"node.icon\\\"></i>\\n <span>{{ node.name }}</span>\\n <button class=\\\"node-delete\\\" (click)=\\\"deleteNode(node.id); $event.stopPropagation()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <div class=\\\"node-body\\\">\\n <small>{{ node.type }}</small>\\n </div>\\n\\n <div class=\\\"node-connectors\\\">\\n <!-- Input Connector -->\\n <div class=\\\"connector connector-in\\\" title=\\\"Input\\\" (click)=\\\"onConnectorClick($event, node, 'in')\\\">\\n </div>\\n\\n <!-- Output Connectors - Multiple outcomes support -->\\n @if (node.outcomes && node.outcomes.length > 1) {\\n <!-- Multiple outcomes: show separate port for each -->\\n <div class=\\\"outcomes-container\\\">\\n @for (outcome of node.outcomes; track outcome; let idx = $index) {\\n <div class=\\\"outcome-connector\\\" [class.active]=\\\"\\n connectionSource?.node?.id === node.id && connectionSource?.outcome === outcome\\n \\\" [attr.data-outcome]=\\\"outcome\\\" [title]=\\\"'Output: ' + outcome\\\"\\n (click)=\\\"onOutcomeConnectorClick($event, node, outcome)\\\">\\n <span class=\\\"outcome-label\\\">{{ outcome }}</span>\\n <div class=\\\"outcome-dot\\\"></div>\\n </div>\\n }\\n </div>\\n } @else {\\n <!-- Single outcome: show simple output connector -->\\n <div class=\\\"connector connector-out\\\" [class.active]=\\\"connectionSource?.node?.id === node.id\\\"\\n title=\\\"Output\\\" (click)=\\\"onConnectorClick($event, node, 'out')\\\"></div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Empty State -->\\n @if (visualNodes().length === 0) {\\n <div class=\\\"canvas-empty-state\\\">\\n <i class=\\\"fa-light fa-diagram-project\\\"></i>\\n <p>Activity \\u0647\\u0627 \\u0631\\u0627 \\u0627\\u0632 \\u0633\\u0627\\u06CC\\u062F\\u0628\\u0627\\u0631 \\u0628\\u0647 \\u0627\\u06CC\\u0646\\u062C\\u0627 \\u0628\\u06A9\\u0634\\u06CC\\u062F</p>\\n <small>\\u06CC\\u0627 \\u0627\\u0632 \\u062A\\u0628 JSON\\u060C workflow \\u0631\\u0627 import \\u06A9\\u0646\\u06CC\\u062F</small>\\n </div>\\n }\\n </div>\\n </div>\\n\\n <!-- Properties Panel -->\\n @if (selectedNode() && showPropertiesPanel()) {\\n <div class=\\\"properties-panel\\\">\\n <div class=\\\"properties-header\\\">\\n <i class=\\\"fa-light fa-sliders\\\"></i>\\n <h4>{{ '@workflow-management:workflow-studio.components.properties-panel.title' | translate | async }}</h4>\\n <div class=\\\"header-actions\\\">\\n <button class=\\\"header-btn\\\" (click)=\\\"togglePropertiesPanel()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.close-panel' | translate | async\\\">\\n <i class=\\\"fa-light fa-angle-right\\\"></i>\\n </button>\\n <button class=\\\"header-btn\\\" (click)=\\\"selectedNode.set(null)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.close' | translate | async\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n </div>\\n <div class=\\\"properties-body\\\">\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.id' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.id\\\" disabled />\\n </div>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.type' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.type\\\" disabled />\\n </div>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.name' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.name\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, 'name', $any($event.target).value)\\\" />\\n </div>\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCE5 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.input-properties' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">{{ '@workflow-management:workflow-studio.components.properties-panel.sections.input-properties' | translate | async }} - \\u0645\\u0642\\u0627\\u062F\\u06CC\\u0631 \\u0631\\u0627 \\u062A\\u0646\\u0638\\u06CC\\u0645 \\u06A9\\u0646\\u06CC\\u062F</small>\\n\\n @if (hasProperties(selectedNode()!.properties)) {\\n <div class=\\\"property-editor\\\">\\n @for (key of Object.keys(selectedNode()!.properties); track key) {\\n <div class=\\\"property-row\\\">\\n <label>\\n {{ key }}\\n <span class=\\\"property-type-badge\\\">{{ typeof selectedNode()!.properties[key] }}</span>\\n </label>\\n\\n @if (typeof selectedNode()!.properties[key] === 'boolean') {\\n <select [value]=\\\"selectedNode()!.properties[key]\\\" (change)=\\\"\\n updateNodeProperty(selectedNode()!.id, key, $any($event.target).value === 'true')\\n \\\">\\n <option [value]=\\\"true\\\">True</option>\\n <option [value]=\\\"false\\\">False</option>\\n </select>\\n } @else if (typeof selectedNode()!.properties[key] === 'number') {\\n <input type=\\\"number\\\" [value]=\\\"selectedNode()!.properties[key]\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, key, +$any($event.target).value)\\\" />\\n } @else if (typeof selectedNode()!.properties[key] === 'object') {\\n <textarea rows=\\\"3\\\" [value]=\\\"JSON.stringify(selectedNode()!.properties[key], null, 2)\\\"\\n (input)=\\\"updateNodePropertyJSON(selectedNode()!.id, key, $any($event.target).value)\\\"></textarea>\\n } @else {\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.properties[key]\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, key, $any($event.target).value)\\\" />\\n }\\n </div>\\n }\\n </div>\\n } @else {\\n <p class=\\\"no-properties\\\">\\n {{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-properties' | translate | async }}\\n </p>\\n }\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCE4 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.output-variables' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u062E\\u0631\\u0648\\u062C\\u06CC \\u0648 \\u0645\\u062A\\u063A\\u06CC\\u0631\\u0647\\u0627</small>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.output-variable' | translate | async }}:</label>\\n <input type=\\\"text\\\" placeholder=\\\"\\u0645\\u062B\\u0644\\u0627\\u064B result\\\"\\n [value]=\\\"selectedNode()!.properties['outputVariable'] || ''\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, 'outputVariable', $any($event.target).value)\\\" />\\n </div>\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDD17 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.connections' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u0627\\u062A\\u0635\\u0627\\u0644\\u0627\\u062A \\u0627\\u06CC\\u0646 \\u0646\\u0648\\u062F</small>\\n\\n <!-- Outcome-based Connections -->\\n @if (selectedNode()!.outcomeConnections && selectedNode()!.outcomeConnections!.length > 0) {\\n <div class=\\\"connections-list\\\">\\n @for (conn of selectedNode()!.outcomeConnections!; track conn.targetNodeId + conn.outcome) {\\n @let targetNode = findNodeById(conn.targetNodeId);\\n @if (targetNode) {\\n <div class=\\\"connection-item outcome-connection\\\">\\n <span class=\\\"outcome-badge\\\" [style.background]=\\\"getOutcomeColor(conn.outcome)\\\">\\n {{ conn.outcome }}\\n </span>\\n <i class=\\\"fa-light fa-arrow-right\\\"></i>\\n <span>{{ targetNode.name }}</span>\\n <button class=\\\"remove-btn\\\"\\n (click)=\\\"disconnectNodes(selectedNode()!.id, conn.targetNodeId, conn.outcome)\\\"\\n title=\\\"\\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n }\\n }\\n </div>\\n } @else if (selectedNode()!.connections.length > 0) {\\n <!-- Simple Connections (fallback) -->\\n <div class=\\\"connections-list\\\">\\n @for (targetId of selectedNode()!.connections; track targetId) {\\n @let targetNode = findNodeById(targetId);\\n @if (targetNode) {\\n <div class=\\\"connection-item\\\">\\n <i class=\\\"fa-light fa-arrow-right\\\"></i>\\n <span>{{ targetNode.name }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"disconnectNodes(selectedNode()!.id, targetId)\\\"\\n title=\\\"\\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n }\\n }\\n </div>\\n } @else {\\n <p class=\\\"no-properties\\\">{{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-connections' | translate | async }}</p>\\n }\\n\\n <!-- Available Outcomes Info -->\\n @if (selectedNode()!.outcomes && selectedNode()!.outcomes!.length > 1) {\\n <div class=\\\"properties-divider\\\"></div>\\n <h5>\\uD83D\\uDCE4 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.available-outcomes' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u062E\\u0631\\u0648\\u062C\\u06CC\\u200C\\u0647\\u0627\\u06CC \\u0645\\u0648\\u062C\\u0648\\u062F \\u0628\\u0631\\u0627\\u06CC \\u0627\\u062A\\u0635\\u0627\\u0644</small>\\n <div class=\\\"outcomes-info\\\">\\n @for (outcome of selectedNode()!.outcomes!; track outcome) {\\n <span class=\\\"outcome-tag\\\" [style.borderColor]=\\\"getOutcomeColor(outcome)\\\">\\n <span class=\\\"outcome-dot\\\" [style.background]=\\\"getOutcomeColor(outcome)\\\"></span>\\n {{ outcome }}\\n </span>\\n }\\n </div>\\n }\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCDD {{ '@workflow-management:workflow-studio.components.properties-panel.sections.raw-json' | translate | async }}</h5>\\n <pre class=\\\"properties-json\\\">{{ selectedNode() | json }}</pre>\\n </div>\\n </div>\\n }\\n\\n <!-- Toggle Button for Properties (when closed) -->\\n @if (selectedNode() && !showPropertiesPanel()) {\\n <button class=\\\"sidebar-toggle-btn right\\\" (click)=\\\"togglePropertiesPanel()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.show-panel' | translate | async\\\">\\n <i class=\\\"fa-light fa-sliders\\\"></i>\\n </button>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n\\n </div>\\n\\n <!-- Workflow Settings Modal -->\\n @if (showWorkflowSettings()) {\\n <div class=\\\"settings-modal-overlay\\\" (click)=\\\"closeWorkflowSettings()\\\">\\n <div class=\\\"settings-modal\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Modal Header -->\\n <div class=\\\"settings-modal-header\\\">\\n <div class=\\\"header-title\\\">\\n <i class=\\\"fa-light fa-cog\\\"></i>\\n <h2>{{ '@workflow-management:workflow-studio.settings.title' | translate | async }}</h2>\\n </div>\\n <button class=\\\"close-btn\\\" (click)=\\\"closeWorkflowSettings()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <!-- Modal Body -->\\n <div class=\\\"settings-modal-body\\\">\\n <!-- Tabs Navigation -->\\n <div class=\\\"settings-tabs\\\">\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'general'\\\"\\n (click)=\\\"switchSettingsTab('general')\\\">\\n <i class=\\\"fa-light fa-info-circle\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.general' | translate | async }}\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'inputs'\\\"\\n (click)=\\\"switchSettingsTab('inputs')\\\">\\n <i class=\\\"fa-light fa-sign-in\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.inputs' | translate | async }}\\n @if (workflowSettings().inputs.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().inputs.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'outputs'\\\"\\n (click)=\\\"switchSettingsTab('outputs')\\\">\\n <i class=\\\"fa-light fa-sign-out\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.outputs' | translate | async }}\\n @if (workflowSettings().outputs.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().outputs.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'variables'\\\"\\n (click)=\\\"switchSettingsTab('variables')\\\">\\n <i class=\\\"fa-light fa-box\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.variables' | translate | async }}\\n @if (workflowSettings().variables.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().variables.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'advanced'\\\"\\n (click)=\\\"switchSettingsTab('advanced')\\\">\\n <i class=\\\"fa-light fa-cog\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.advanced' | translate | async }}\\n </button>\\n </div>\\n\\n <!-- Tab Content -->\\n <div class=\\\"settings-content\\\">\\n <!-- General Tab -->\\n @if (activeSettingsTab() === 'general') {\\n <div class=\\\"settings-section\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.general.title' | translate | async }}</h3>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.name.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.name.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().name\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().definitionId\\\" />\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.description' | translate | async }}</small>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.description.title' | translate | async }}</label>\\n <textarea class=\\\"form-textarea\\\" rows=\\\"4\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.description.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().description\\\"></textarea>\\n </div>\\n </div>\\n }\\n\\n <!-- Inputs Tab -->\\n @if (activeSettingsTab() === 'inputs') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.inputs.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowInput()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.inputs.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().inputs.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.inputs.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.inputs.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (input of workflowSettings().inputs; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowInput($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"userName\\\" [value]=\\\"input.name\\\"\\n (input)=\\\"updateWorkflowInput($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"User Name\\\" [value]=\\\"input.title\\\"\\n (input)=\\\"updateWorkflowInput($index, 'title', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"input.description || ''\\\"\\n (input)=\\\"updateWorkflowInput($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.data-type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"input.schema.dataType || 'string'\\\"\\n (change)=\\\"updateWorkflowInputSchema($index, 'dataType', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.default-value' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.fields.default-value-placeholder' | translate | async\\\"\\n [value]=\\\"input.schema.defaultValue || ''\\\"\\n (input)=\\\"updateWorkflowInputSchema($index, 'defaultValue', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [checked]=\\\"getInputIsRequired(input)\\\"\\n (change)=\\\"updateWorkflowInputValidation($index, $any($event.target).checked)\\\" />\\n <span>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.required' | translate | async }}</span>\\n </label>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Outputs Tab -->\\n @if (activeSettingsTab() === 'outputs') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.outputs.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowOutput()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.outputs.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().outputs.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.outputs.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.outputs.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (output of workflowSettings().outputs; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowOutput($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.outputs.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"result\\\" [value]=\\\"output.name\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"Result\\\" [value]=\\\"output.title\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'title', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.outputs.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"output.description || ''\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.data-type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"output.schema.dataType || 'string'\\\"\\n (change)=\\\"updateWorkflowOutputSchema($index, 'dataType', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Variables Tab -->\\n @if (activeSettingsTab() === 'variables') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.variables.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowVariable()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.variables.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().variables.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.variables.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.variables.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (variable of workflowSettings().variables; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowVariable($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"tempData\\\" [value]=\\\"variable.name\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"variable.typeName\\\"\\n (change)=\\\"updateWorkflowVariable($index, 'typeName', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"variable.description || ''\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.initial-value' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.fields.initial-value-placeholder' | translate | async\\\"\\n [value]=\\\"variable.value || ''\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'value', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Advanced Tab -->\\n @if (activeSettingsTab() === 'advanced') {\\n <div class=\\\"settings-section\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.advanced.title' | translate | async }}</h3>\\n\\n <!-- Versioning -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u0646\\u0633\\u062E\\u0647\\u200C\\u0628\\u0646\\u062F\\u06CC (Versioning)</h4>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>Version</label>\\n <input type=\\\"number\\\" class=\\\"form-input\\\" min=\\\"1\\\" [(ngModel)]=\\\"workflowSettings().version\\\" />\\n <small>\\u0634\\u0645\\u0627\\u0631\\u0647 \\u0646\\u0633\\u062E\\u0647 workflow (1, 2, 3, ...)</small>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\" style=\\\"margin-top: 1.8rem\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().isLatest\\\" />\\n <span>\\u0622\\u062E\\u0631\\u06CC\\u0646 \\u0646\\u0633\\u062E\\u0647 (Is Latest)</span>\\n </label>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\" style=\\\"margin-top: 1.8rem\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().isPublished\\\" />\\n <span>\\u0645\\u0646\\u062A\\u0634\\u0631 \\u0634\\u062F\\u0647 (Published)</span>\\n </label>\\n </div>\\n </div>\\n </div>\\n\\n <!-- Options -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u062A\\u0646\\u0638\\u06CC\\u0645\\u0627\\u062A (Options)</h4>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().usableAsActivity\\\" />\\n <span>\\u0642\\u0627\\u0628\\u0644 \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0628\\u0647 \\u0639\\u0646\\u0648\\u0627\\u0646 Activity</span>\\n </label>\\n <small>\\u0627\\u06CC\\u0646 workflow \\u0645\\u06CC\\u200C\\u062A\\u0648\\u0627\\u0646\\u062F \\u0628\\u0647 \\u0639\\u0646\\u0648\\u0627\\u0646 \\u06CC\\u06A9 activity \\u062F\\u0631 workflow \\u0647\\u0627\\u06CC \\u062F\\u06CC\\u06AF\\u0631 \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0634\\u0648\\u062F</small>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().autoUpdateConsumingWorkflows\\\" />\\n <span>\\u0628\\u0647\\u200C\\u0631\\u0648\\u0632\\u0631\\u0633\\u0627\\u0646\\u06CC \\u062E\\u0648\\u062F\\u06A9\\u0627\\u0631 workflows \\u0645\\u0635\\u0631\\u0641\\u200C\\u06A9\\u0646\\u0646\\u062F\\u0647</span>\\n </label>\\n <small>workflow \\u0647\\u0627\\u06CC\\u06CC \\u06A9\\u0647 \\u0627\\u0632 \\u0627\\u06CC\\u0646 workflow \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0645\\u06CC\\u200C\\u06A9\\u0646\\u0646\\u062F \\u0628\\u0647 \\u0635\\u0648\\u0631\\u062A \\u062E\\u0648\\u062F\\u06A9\\u0627\\u0631 \\u0628\\u0647\\u200C\\u0631\\u0648\\u0632 \\u0645\\u06CC\\u200C\\u0634\\u0648\\u0646\\u062F</small>\\n </div>\\n </div>\\n\\n <!-- Metadata -->\\n <div class=\\\"advanced-group\\\">\\n <h4>Metadata</h4>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>Tool Version</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"1.0.0\\\"\\n [(ngModel)]=\\\"workflowSettings().toolVersion\\\" />\\n <small>\\u0646\\u0633\\u062E\\u0647 \\u0627\\u0628\\u0632\\u0627\\u0631 \\u0633\\u0627\\u0632\\u0646\\u062F\\u0647</small>\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>Provider Name</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"WorkflowStudio\\\"\\n [(ngModel)]=\\\"workflowSettings().providerName\\\" />\\n <small>\\u0646\\u0627\\u0645 \\u0627\\u0628\\u0632\\u0627\\u0631 \\u0633\\u0627\\u0632\\u0646\\u062F\\u0647</small>\\n </div>\\n </div>\\n </div>\\n\\n <!-- Outcomes -->\\n <div class=\\\"advanced-group\\\">\\n <h4>Workflow Outcomes</h4>\\n <div class=\\\"form-group\\\">\\n <label>Possible Outcomes</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"Done, Success, Failed (\\u062C\\u062F\\u0627 \\u0634\\u062F\\u0647 \\u0628\\u0627 \\u06A9\\u0627\\u0645\\u0627)\\\"\\n [value]=\\\"workflowSettings().outcomes.join(', ')\\\"\\n (input)=\\\"updateOutcomes($any($event.target).value)\\\" />\\n <small>\\u0646\\u062A\\u0627\\u06CC\\u062C \\u0645\\u0645\\u06A9\\u0646 \\u06A9\\u0647 \\u0627\\u06CC\\u0646 workflow \\u0645\\u06CC\\u200C\\u062A\\u0648\\u0627\\u0646\\u062F \\u0628\\u0631\\u06AF\\u0631\\u062F\\u0627\\u0646\\u062F (\\u0645\\u062B\\u0644\\u0627\\u064B: Done, Success, Failed)</small>\\n </div>\\n <div class=\\\"outcomes-preview\\\">\\n @for (outcome of workflowSettings().outcomes; track outcome) {\\n <span class=\\\"outcome-chip\\\">{{ outcome }}</span>\\n }\\n </div>\\n </div>\\n\\n <!-- Export Preview -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u062E\\u0631\\u0648\\u062C\\u06CC \\u0646\\u0647\\u0627\\u06CC\\u06CC (WorkflowDefinition)</h4>\\n <small>\\u0627\\u06CC\\u0646 \\u0633\\u0627\\u062E\\u062A\\u0627\\u0631 \\u062F\\u0642\\u06CC\\u0642\\u0627\\u064B \\u0645\\u0637\\u0627\\u0628\\u0642 \\u0628\\u0627 WorkflowDefinition \\u0627\\u0633\\u062A \\u0648 \\u062F\\u0631 \\u062F\\u06CC\\u062A\\u0627\\u0628\\u06CC\\u0633 \\u0630\\u062E\\u06CC\\u0631\\u0647 \\u0645\\u06CC\\u200C\\u0634\\u0648\\u062F</small>\\n <div class=\\\"export-info\\\">\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Definition ID:</span>\\n <code>{{ workflowSettings().definitionId || '(\\u062E\\u0627\\u0644\\u06CC)' }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Name:</span>\\n <code>{{ workflowSettings().name || '(\\u062E\\u0627\\u0644\\u06CC)' }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Version:</span>\\n <code>v{{ workflowSettings().version }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Inputs:</span>\\n <code>{{ workflowSettings().inputs.length }} items</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Outputs:</span>\\n <code>{{ workflowSettings().outputs.length }} items</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Variables:</span>\\n <code>{{ workflowSettings().variables.length }} items</code>\\n </div>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n\\n <!-- Modal Footer -->\\n <div class=\\\"settings-modal-footer\\\">\\n <ax-button [text]=\\\"'@workflow-management:workflow-studio.settings.actions.cancel' | translate | async\\\" color=\\\"secondary\\\" size=\\\"md\\\" (onClick)=\\\"closeWorkflowSettings()\\\"> </ax-button>\\n <ax-button [text]=\\\"'@workflow-management:workflow-studio.settings.actions.save' | translate | async\\\" color=\\\"primary\\\" size=\\\"md\\\" (onClick)=\\\"saveWorkflowSettings()\\\"> </ax-button>\\n </div>\\n </div>\\n </div>\\n }\\n\\n <!-- Workflow Execution Dialog -->\\n @if (showExecutionDialog()) {\\n <div class=\\\"execution-dialog-overlay\\\" (click)=\\\"closeExecutionDialog()\\\">\\n <div class=\\\"execution-dialog\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Dialog Header -->\\n <div class=\\\"execution-dialog-header\\\">\\n <div class=\\\"header-content\\\">\\n <i class=\\\"fa-light fa-play-circle\\\"></i>\\n <div class=\\\"header-info\\\">\\n <h2>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.title' | translate |\\n async }}</h2>\\n <p>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.description' | translate\\n | async }}</p>\\n </div>\\n </div>\\n <button class=\\\"close-btn\\\" (click)=\\\"closeExecutionDialog()\\\" [disabled]=\\\"isExecuting()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <!-- Dialog Body -->\\n <div class=\\\"execution-dialog-body\\\">\\n <!-- Workflow Info Panel (Before Execution) -->\\n @if (!workflowInstanceState()) {\\n <div class=\\\"workflow-info-panel\\\">\\n <div class=\\\"start-section\\\">\\n <div class=\\\"start-illustration\\\">\\n <i class=\\\"fa-light fa-rocket\\\"></i>\\n </div>\\n <h3>{{ '@workflow-management:test-pages.workflow-studio.messages.info.ready-to-execute' | translate |\\n async }}</h3>\\n <p>{{ '@workflow-management:test-pages.workflow-studio.messages.info.click-to-start' | translate | async\\n }}</p>\\n <ax-button\\n [text]=\\\"'@workflow-management:test-pages.workflow-studio.actions.start-execution.title' | translate | async\\\"\\n color=\\\"success\\\" size=\\\"lg\\\" (onClick)=\\\"startWorkflowExecution()\\\">\\n </ax-button>\\n </div>\\n </div>\\n }\\n\\n\\n <!-- Custom UI for Registration -->\\n @if (false) {\\n <div class=\\\"registration-ui\\\">\\n <div class=\\\"registration-card\\\">\\n <div class=\\\"registration-icon\\\">\\n <i class=\\\"fa-light fa-user-circle\\\"></i>\\n </div>\\n <h3>\\u0641\\u0631\\u0622\\u06CC\\u0646\\u062F \\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645</h3>\\n <p class=\\\"registration-desc\\\">\\n \\u0627\\u06CC\\u0646 \\u0641\\u0644\\u0648 \\u0634\\u0627\\u0645\\u0644 \\u0686\\u0646\\u062F \\u0645\\u0631\\u062D\\u0644\\u0647 \\u0627\\u0633\\u062A \\u06A9\\u0647 \\u062F\\u0627\\u062F\\u0647\\u200C\\u0647\\u0627\\u06CC \\u06A9\\u0627\\u0631\\u0628\\u0631 \\u0631\\u0627 \\u062C\\u0645\\u0639\\u200C\\u0622\\u0648\\u0631\\u06CC \\u06A9\\u0631\\u062F\\u0647 \\u0648 \\u062F\\u0631 \\u0646\\u0647\\u0627\\u06CC\\u062A \\u062D\\u0633\\u0627\\u0628 \\u06A9\\u0627\\u0631\\u0628\\u0631\\u06CC \\u0627\\u06CC\\u062C\\u0627\\u062F \\u0645\\u06CC\\u200C\\u06A9\\u0646\\u062F.\\n </p>\\n\\n @if (workflowInstanceState()?.status === 'running') {\\n <div class=\\\"registration-progress\\\">\\n <div class=\\\"progress-spinner\\\">\\n <i class=\\\"fa-light fa-spinner-third fa-spin\\\"></i>\\n </div>\\n <p>\\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627\\u06CC \\u0645\\u0631\\u0627\\u062D\\u0644 \\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645...</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'finished') {\\n <div class=\\\"registration-success\\\">\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n <h4>\\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645 \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u0627\\u0646\\u062C\\u0627\\u0645 \\u0634\\u062F!</h4>\\n <p>\\u062D\\u0633\\u0627\\u0628 \\u06A9\\u0627\\u0631\\u0628\\u0631\\u06CC \\u0634\\u0645\\u0627 \\u0627\\u06CC\\u062C\\u0627\\u062F \\u0634\\u062F \\u0648 \\u0628\\u0647 \\u0632\\u0648\\u062F\\u06CC \\u0628\\u0647 \\u062F\\u0627\\u0634\\u0628\\u0648\\u0631\\u062F \\u0645\\u0646\\u062A\\u0642\\u0644 \\u062E\\u0648\\u0627\\u0647\\u06CC\\u062F \\u0634\\u062F.</p>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Default Execution View -->\\n @if (workflowInstanceState()) {\\n <div class=\\\"default-execution-view\\\">\\n <div class=\\\"execution-status\\\">\\n @if (workflowInstanceState()?.status === 'running') {\\n <div class=\\\"status-running\\\">\\n <i class=\\\"fa-light fa-spinner-third fa-spin\\\"></i>\\n <h3>\\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627...</h3>\\n <p>Workflow \\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627 \\u0627\\u0633\\u062A. \\u0644\\u0637\\u0641\\u0627\\u064B \\u0635\\u0628\\u0631 \\u06A9\\u0646\\u06CC\\u062F.</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'finished') {\\n <div class=\\\"status-finished\\\">\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n <h3>\\u0627\\u062C\\u0631\\u0627 \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u062A\\u06A9\\u0645\\u06CC\\u0644 \\u0634\\u062F</h3>\\n <p>Workflow \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u0627\\u062C\\u0631\\u0627 \\u0634\\u062F \\u0648 \\u062A\\u0645\\u0627\\u0645 Activities \\u0627\\u0646\\u062C\\u0627\\u0645 \\u0634\\u062F\\u0646\\u062F.</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'error') {\\n <div class=\\\"status-error\\\">\\n <i class=\\\"fa-light fa-times-circle\\\"></i>\\n <h3>\\u062E\\u0637\\u0627 \\u062F\\u0631 \\u0627\\u062C\\u0631\\u0627</h3>\\n <p>{{ workflowInstanceState()?.error }}</p>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Execution Logs Panel -->\\n @if (workflowInstanceState() && executionLogs().length > 0) {\\n <div class=\\\"execution-logs-panel\\\">\\n <h3><i class=\\\"fa-light fa-terminal\\\"></i> \\u0644\\u0627\\u06AF\\u200C\\u0647\\u0627\\u06CC \\u0627\\u062C\\u0631\\u0627</h3>\\n <div class=\\\"logs-container-compact\\\">\\n @for (log of executionLogs(); track $index) {\\n <div class=\\\"log-item-compact\\\" [class]=\\\"'log-' + log.level\\\">\\n <span class=\\\"log-time\\\">{{ log.timestamp | date: 'HH:mm:ss' }}</span>\\n <span class=\\\"log-icon\\\">\\n @switch (log.level) {\\n @case ('info') {\\n <i class=\\\"fa-light fa-info-circle\\\"></i>\\n }\\n @case ('success') {\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n }\\n @case ('warning') {\\n <i class=\\\"fa-light fa-exclamation-triangle\\\"></i>\\n }\\n @case ('error') {\\n <i class=\\\"fa-light fa-times-circle\\\"></i>\\n }\\n }\\n </span>\\n <span class=\\\"log-message\\\">{{ log.message }}</span>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n\\n <!-- Dialog Footer -->\\n <div class=\\\"execution-dialog-footer\\\">\\n <div class=\\\"footer-info\\\">\\n @if (workflowInstanceState()?.startTime) {\\n <span class=\\\"time-info\\\">\\n <i class=\\\"fa-light fa-clock\\\"></i>\\n \\u0634\\u0631\\u0648\\u0639: {{ workflowInstanceState()!.startTime | date: 'HH:mm:ss' }}\\n </span>\\n }\\n @if (workflowInstanceState()?.endTime) {\\n <span class=\\\"time-info\\\">\\n <i class=\\\"fa-light fa-flag-checkered\\\"></i>\\n \\u067E\\u0627\\u06CC\\u0627\\u0646: {{ workflowInstanceState()!.endTime | date: 'HH:mm:ss' }}\\n </span>\\n }\\n </div>\\n <div class=\\\"footer-actions\\\">\\n <ax-button\\n [text]=\\\"(workflowInstanceState() ? '@general:actions.close.title' : '@general:actions.cancel.title') | translate | async\\\"\\n color=\\\"secondary\\\" size=\\\"md\\\" [disabled]=\\\"isExecuting()\\\" (onClick)=\\\"closeExecutionDialog()\\\">\\n </ax-button>\\n </div>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </axp-page-content>\\n</axp-page-layout>\", styles: [\".sidebar-header .toggle-btn{padding:.5rem;margin-left:auto;background:transparent;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;cursor:pointer;transition:all .2s}.sidebar-header .toggle-btn:hover{background:#f8fafc;border-color:#8b5cf6;color:#8b5cf6}.sidebar-header .toggle-btn i{font-size:.875rem}.sidebar-toggle-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:100;padding:1rem .5rem;background:#fff;border:1px solid #e2e8f0;border-radius:8px;color:#8b5cf6;cursor:pointer;box-shadow:0 4px 12px #0000001a;transition:all .3s}.sidebar-toggle-btn:hover{background:#8b5cf6;color:#fff;box-shadow:0 8px 24px #8b5cf64d;transform:translateY(-50%) scale(1.1)}.sidebar-toggle-btn.left{left:0;border-left:none;border-radius:0 8px 8px 0}.sidebar-toggle-btn.right{right:0;border-right:none;border-radius:8px 0 0 8px}.sidebar-toggle-btn i{font-size:1.25rem;display:block}.properties-header .header-actions{display:flex;gap:.5rem;margin-left:auto}.properties-header .header-btn{padding:.375rem .5rem;background:transparent;border:1px solid #e2e8f0;border-radius:4px;color:#64748b;cursor:pointer;transition:all .2s}.properties-header .header-btn:hover{background:#f8fafc;border-color:#8b5cf6;color:#8b5cf6}.properties-header .header-btn i{font-size:.75rem}.connections-list{margin-top:.75rem}.connection-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;margin-bottom:.5rem;font-size:.875rem}.connection-item i{color:#8b5cf6}.connection-item span{flex:1;color:#1e293b}.connection-item .remove-btn{padding:.25rem .375rem;background:transparent;border:1px solid #e2e8f0;border-radius:4px;color:#ef4444;cursor:pointer;transition:all .2s}.connection-item .remove-btn:hover{background:#fef2f2;border-color:#ef4444}.connection-item .remove-btn i{font-size:.75rem;color:inherit}.property-editor{margin-top:.75rem}.property-editor .property-row label{display:flex;align-items:center;gap:.5rem;justify-content:space-between}.property-editor .property-row label .property-type-badge{padding:.125rem .375rem;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;font-size:.625rem;font-weight:400;color:#64748b;text-transform:lowercase;font-family:JetBrains Mono,monospace}.property-editor .property-row select{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;background:#fff;cursor:pointer;transition:all .2s}.property-editor .property-row select:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.property-editor .property-row textarea{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.75rem;font-family:JetBrains Mono,monospace;color:#1e293b;resize:vertical;transition:all .2s}.property-editor .property-row textarea:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.workflow-studio{display:flex;flex-direction:column;height:100vh;background:#f8fafc;overflow:hidden}.workflow-popup .popup-header{text-align:center;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:2px solid #e2e8f0}.workflow-popup .popup-header h3{margin:0 0 .5rem;color:#1e293b;font-size:1.5rem;font-weight:700}.workflow-popup .popup-header p{margin:0;color:#64748b;font-size:.95rem}.workflow-popup .popup-body{max-height:60vh;overflow-y:auto;padding:0 .5rem}.workflow-popup .popup-body h4{margin:1.5rem 0 .75rem;color:#374151;font-size:1.1rem;font-weight:600;display:flex;align-items:center;gap:.5rem}.workflow-popup .popup-body ul{margin:0;padding-left:1.5rem}.workflow-popup .popup-body ul li{margin-bottom:.5rem;color:#4b5563}.workflow-popup .popup-body ul li strong{color:#1f2937}.workflow-popup .workflow-info{background:#f8fafc;padding:1rem;border-radius:8px;border:1px solid #e2e8f0}.workflow-popup .workflow-variables{background:#fef3c7;padding:1rem;border-radius:8px;border:1px solid #f59e0b}.workflow-popup .workflow-flow{background:#ecfdf5;padding:1rem;border-radius:8px;border:1px solid #10b981}.workflow-popup .workflow-flow .flow-steps{display:flex;flex-direction:column;gap:.75rem}.workflow-popup .workflow-flow .flow-steps .flow-step{display:flex;align-items:center;gap:.75rem;padding:.5rem;background:#fff;border-radius:6px;border:1px solid #d1d5db}.workflow-popup .workflow-flow .flow-steps .flow-step .step-number{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:#3b82f6;color:#fff;border-radius:50%;font-size:.8rem;font-weight:600}.workflow-popup .workflow-flow .flow-steps .flow-step .step-text{color:#374151;font-weight:500}.workflow-popup .workflow-json{background:#1f2937;padding:1rem;border-radius:8px;border:1px solid #374151}.workflow-popup .workflow-json .json-preview{background:transparent;color:#e5e7eb;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.8rem;line-height:1.4;margin:0;white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto}.workflow-popup .popup-footer{text-align:center;margin-top:1.5rem;padding-top:1rem;border-top:1px solid #e2e8f0}.workflow-popup .popup-footer .btn{padding:.75rem 1.5rem;background:#3b82f6;color:#fff;border:none;border-radius:6px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:.5rem;transition:background-color .2s}.workflow-popup .popup-footer .btn:hover{background:#2563eb}.workflow-popup .popup-footer .btn i{font-size:.9rem}.view-workflow-link{color:#3b82f6;text-decoration:none;font-size:.85rem;margin-left:.5rem;transition:color .2s}.view-workflow-link:hover{color:#1d4ed8;text-decoration:underline}.studio-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:#fff;border-bottom:1px solid #e2e8f0;box-shadow:0 1px 3px #0000000d}.studio-header .header-title{display:flex;align-items:center;gap:.75rem}.studio-header .header-title i{font-size:1.75rem;color:#8b5cf6}.studio-header .header-title h1{margin:0;font-size:1.5rem;font-weight:700;color:#1e293b}.studio-header .header-title .badge{padding:.25rem .75rem;background:#8b5cf6;color:#fff;border-radius:12px;font-size:.75rem;font-weight:600}.studio-header .header-actions{display:flex;gap:.75rem;align-items:center}.samples-dropdown{position:relative}.samples-dropdown .samples-menu{position:absolute;top:calc(100% + .5rem);left:0;min-width:320px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 10px 25px #0000001a;z-index:1000;max-height:400px;overflow-y:auto}.samples-dropdown .samples-menu .sample-item{padding:.875rem 1rem;display:flex;align-items:flex-start;gap:.75rem;cursor:pointer;border-bottom:1px solid #f1f5f9;transition:all .2s}.samples-dropdown .samples-menu .sample-item:last-child{border-bottom:none}.samples-dropdown .samples-menu .sample-item:hover{background:#f8fafc;transform:translate(4px)}.samples-dropdown .samples-menu .sample-item i{font-size:1.25rem;margin-top:.125rem;color:#8b5cf6}.samples-dropdown .samples-menu .sample-item .sample-info{display:flex;flex-direction:column;gap:.25rem;flex:1}.samples-dropdown .samples-menu .sample-item .sample-info strong{color:#1e293b;font-size:.875rem;font-weight:600}.samples-dropdown .samples-menu .sample-item .sample-info span{color:#64748b;font-size:.75rem;line-height:1.4}.studio-body{display:grid;grid-template-columns:1fr;gap:0;flex:1;overflow:hidden;transition:grid-template-columns .3s ease}.studio-body.sidebar-hidden,.studio-body.properties-hidden,.studio-body.sidebar-hidden.properties-hidden{grid-template-columns:1fr}.studio-sidebar{background:#fff;border-right:1px solid #e2e8f0;display:flex;flex-direction:column;overflow:hidden}.studio-sidebar .sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:.5rem}.studio-sidebar .sidebar-header i{font-size:1.25rem;color:#8b5cf6}.studio-sidebar .sidebar-header h3{flex:1;margin:0;font-size:1.125rem;font-weight:600;color:#1e293b}.activities-tree{flex:1;overflow-y:auto;padding:.5rem}.category-section{margin-bottom:.5rem}.category-section .category-header{display:flex;align-items:center;gap:.5rem;padding:.75rem;border-radius:8px;cursor:pointer;transition:all .2s;background:#f8fafc}.category-section .category-header:hover{background:#f1f5f9}.category-section .category-header.active{background:#ede9fe}.category-section .category-header.active>i:first-child{color:#8b5cf6}.category-section .category-header>i:first-child{font-size:.875rem;color:#94a3b8;transition:transform .2s,color .2s}.category-section .category-header>i:nth-child(2){font-size:1.125rem}.category-section .category-header span{flex:1;font-weight:600;font-size:.875rem;color:#334155}.category-section .category-header .count{flex:none;padding:.125rem .5rem;background:#fff;border-radius:10px;font-size:.75rem;font-weight:600;color:#64748b;border:1px solid #e2e8f0}.activities-list{padding:.5rem 0 .5rem 1.5rem;display:flex;flex-direction:column;gap:.5rem;animation:slideDown .3s ease}.activities-list .activities-header{padding:.5rem .75rem;margin-bottom:.5rem}.activities-list .activities-header h4{margin:0;font-size:.875rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.activity-card{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:.875rem;margin-bottom:.75rem;transition:all .2s}.activity-card:hover{border-color:#8b5cf6;box-shadow:0 4px 12px #8b5cf61a;transform:translateY(-1px)}.activity-card .activity-info{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:.5rem}.activity-card .activity-info>i{font-size:1.5rem;color:#8b5cf6;margin-top:.125rem}.activity-card .activity-info .activity-details{flex:1;display:flex;flex-direction:column;gap:.25rem}.activity-card .activity-info .activity-details strong{font-size:.875rem;color:#1e293b}.activity-card .activity-info .activity-details small{font-size:.75rem;color:#64748b;line-height:1.4}.activity-card .activity-info .activity-details code{font-size:.75rem;color:#8b5cf6;background:#f3f0ff;padding:.125rem .375rem;border-radius:4px;width:fit-content}.activity-card .copy-btn{float:right;padding:.375rem .75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s;color:#64748b}.activity-card .copy-btn:hover{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.activity-card .copy-btn i{font-size:.875rem}.activity-card .activity-properties{margin-top:.75rem;padding-top:.75rem;border-top:1px solid #f1f5f9}.activity-card .activity-properties .properties-title{display:block;font-size:.75rem;font-weight:600;color:#64748b;margin-bottom:.5rem}.activity-card .activity-properties .property-item{display:flex;align-items:center;gap:.5rem;padding:.25rem 0;font-size:.75rem}.activity-card .activity-properties .property-item code{color:#1e293b;background:#f8fafc;padding:.125rem .375rem;border-radius:3px}.activity-card .activity-properties .property-item .property-type{color:#64748b;font-style:italic}.activity-card .activity-properties .property-item .required{color:#ef4444;font-weight:700}.studio-editor{display:flex;flex-direction:column;background:#1e293b;overflow:hidden}.studio-editor .editor-header{padding:1rem 1.25rem;background:#0f172a;display:flex;align-items:center;gap:.5rem}.studio-editor .editor-header i{font-size:1.125rem;color:#8b5cf6}.studio-editor .editor-header h3{margin:0;font-size:1rem;font-weight:600;color:#e2e8f0}.studio-editor axp-page-toolbar .editor-tabs{display:flex;gap:.5rem;background:transparent}.studio-editor axp-page-toolbar .editor-tabs .tab-btn{padding:.5rem 1rem;background:transparent;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:.5rem}.studio-editor axp-page-toolbar .editor-tabs .tab-btn i{font-size:.875rem}.studio-editor axp-page-toolbar .editor-tabs .tab-btn:hover{background:#f8fafc;border-color:#cbd5e1;color:#475569}.studio-editor axp-page-toolbar .editor-tabs .tab-btn.active{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.studio-editor .editor-content{flex:1;display:flex;overflow:hidden}.studio-editor .json-tab{flex:1;display:flex;flex-direction:column}.studio-editor .json-editor{flex:1;padding:1.5rem;background:#1e293b;color:#e2e8f0;border:none;outline:none;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.875rem;line-height:1.6;resize:none;overflow:auto}.studio-editor .json-editor::placeholder{color:#475569}.studio-editor .json-editor::-webkit-scrollbar{width:10px;height:10px}.studio-editor .json-editor::-webkit-scrollbar-track{background:#0f172a}.studio-editor .json-editor::-webkit-scrollbar-thumb{background:#475569;border-radius:5px}.studio-editor .json-editor::-webkit-scrollbar-thumb:hover{background:#64748b}.studio-editor .visual-tab{flex:1;display:flex;background:#f8fafc;position:relative}.studio-editor .visual-canvas{flex:1;display:flex;flex-direction:column;overflow:hidden}.studio-editor .visual-canvas .canvas-toolbar{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:#fff;border-bottom:1px solid #e2e8f0}.studio-editor .visual-canvas .canvas-toolbar .tool-btn{padding:.5rem .75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;cursor:pointer;transition:all .2s}.studio-editor .visual-canvas .canvas-toolbar .tool-btn:hover{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.studio-editor .visual-canvas .canvas-toolbar .tool-btn i{font-size:.875rem}.studio-editor .visual-canvas .canvas-toolbar .tool-info{flex:1;display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:#64748b}.studio-editor .visual-canvas .canvas-toolbar .tool-info i{font-size:1rem;color:#8b5cf6}.studio-editor .visual-canvas .canvas-area{flex:1;position:relative;background:linear-gradient(90deg,#e5e7eb 1px,transparent 1px),linear-gradient(#e5e7eb 1px,transparent 1px);background-size:20px 20px;overflow:auto;min-height:600px}.studio-editor .visual-canvas .connections-layer{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1}.studio-editor .visual-canvas .connection-line{stroke:#64748b;stroke-width:2;fill:none;opacity:.6;cursor:pointer;pointer-events:stroke;transition:all .2s}.studio-editor .visual-canvas .connection-line:hover{stroke:#ef4444;stroke-width:3;opacity:1}.studio-editor .visual-canvas .visual-node{position:absolute;width:150px;background:#fff;border:2px solid #e2e8f0;border-radius:8px;box-shadow:0 2px 8px #0000001a;cursor:move;transition:all .2s;z-index:2}.studio-editor .visual-canvas .visual-node:hover{border-color:#8b5cf6;box-shadow:0 4px 16px #8b5cf633;transform:translateY(-2px)}.studio-editor .visual-canvas .visual-node.selected{border-color:#8b5cf6;border-width:3px;box-shadow:0 0 0 3px #8b5cf633}.studio-editor .visual-canvas .visual-node .node-header{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:linear-gradient(135deg,#8b5cf6,#7c3aed);color:#fff;border-radius:6px 6px 0 0;font-size:.875rem;font-weight:600}.studio-editor .visual-canvas .visual-node .node-header i{font-size:1rem}.studio-editor .visual-canvas .visual-node .node-header span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.studio-editor .visual-canvas .visual-node .node-header .node-delete{padding:.25rem;background:#fff3;border:none;border-radius:4px;color:#fff;cursor:pointer;transition:all .2s}.studio-editor .visual-canvas .visual-node .node-header .node-delete:hover{background:#ef4444cc}.studio-editor .visual-canvas .visual-node .node-header .node-delete i{font-size:.75rem}.studio-editor .visual-canvas .visual-node .node-body{padding:.75rem}.studio-editor .visual-canvas .visual-node .node-body small{display:block;font-size:.75rem;color:#64748b;text-align:center}.studio-editor .visual-canvas .visual-node .node-connectors{position:relative}.studio-editor .visual-canvas .visual-node .node-connectors .connector{position:absolute;width:12px;height:12px;background:#8b5cf6;border:2px solid white;border-radius:50%;cursor:pointer;transition:all .2s;z-index:10}.studio-editor .visual-canvas .visual-node .node-connectors .connector:hover{transform:scale(1.3);box-shadow:0 0 0 3px #8b5cf64d}.studio-editor .visual-canvas .visual-node .node-connectors .connector-in{top:-50px;left:50%;transform:translate(-50%);background:#3b82f6}.studio-editor .visual-canvas .visual-node .node-connectors .connector-out{bottom:-6px;left:50%;transform:translate(-50%);background:#8b5cf6}.studio-editor .visual-canvas .visual-node .node-connectors .connector-out.active{background:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcomes-container{position:absolute;bottom:-60px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:8px;background:#fff;padding:8px;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px #00000026;min-width:120px;z-index:100}.studio-editor .visual-canvas .visual-node .node-connectors .outcomes-container:before{content:\\\"\\\";position:absolute;top:-8px;left:50%;transform:translate(-50%);width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid white;filter:drop-shadow(0 -2px 2px rgba(0,0,0,.05))}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s;position:relative}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector:hover{background:#f1f5f9;border-color:#8b5cf6;transform:translate(2px)}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector.active{background:#fef2f2;border-color:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector.active .outcome-dot{background:#ef4444;box-shadow:0 0 0 3px #ef444433}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector .outcome-label{font-size:.75rem;font-weight:600;color:#475569;-webkit-user-select:none;user-select:none;flex:1}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector .outcome-dot{width:10px;height:10px;background:#8b5cf6;border:2px solid white;border-radius:50%;transition:all .2s;flex-shrink:0}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=\\\"200\\\"] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Done] .outcome-dot{background:#10b981}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=\\\"404\\\"] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Failed] .outcome-dot{background:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Timeout] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Cancelled] .outcome-dot{background:#f59e0b}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Then] .outcome-dot{background:#3b82f6}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Else] .outcome-dot{background:#64748b}.studio-editor .visual-canvas .canvas-empty-state{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:#94a3b8;pointer-events:none}.studio-editor .visual-canvas .canvas-empty-state i{font-size:4rem;margin-bottom:1rem;opacity:.5}.studio-editor .visual-canvas .canvas-empty-state p{margin:0 0 .5rem;font-size:1rem;font-weight:500}.studio-editor .visual-canvas .canvas-empty-state small{font-size:.875rem;opacity:.8}.studio-editor .properties-panel{width:280px;background:#fff;border-left:1px solid #e2e8f0;display:flex;flex-direction:column}.studio-editor .properties-panel .properties-header{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid #e2e8f0}.studio-editor .properties-panel .properties-header i{font-size:1.125rem;color:#8b5cf6}.studio-editor .properties-panel .properties-header h4{flex:1;margin:0;font-size:.875rem;font-weight:600;color:#1e293b}.studio-editor .properties-panel .properties-header button{padding:.25rem .5rem;background:transparent;border:none;color:#64748b;cursor:pointer;transition:color .2s}.studio-editor .properties-panel .properties-header button:hover{color:#ef4444}.studio-editor .properties-panel .properties-body{flex:1;padding:1rem;overflow-y:auto}.studio-editor .properties-panel .properties-body .property-row{margin-bottom:1rem}.studio-editor .properties-panel .properties-body .property-row label{display:block;font-size:.75rem;font-weight:600;color:#64748b;margin-bottom:.375rem;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .property-row input{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;transition:all .2s}.studio-editor .properties-panel .properties-body .property-row input:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.studio-editor .properties-panel .properties-body .property-row input:disabled{background:#f8fafc;color:#94a3b8;cursor:not-allowed}.studio-editor .properties-panel .properties-body .properties-divider{height:1px;background:#e2e8f0;margin:1.5rem 0}.studio-editor .properties-panel .properties-body h5{margin:0 0 .5rem;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .properties-hint{display:block;font-size:.75rem;color:#94a3b8;margin-bottom:.75rem}.studio-editor .properties-panel .properties-body .properties-json{margin:.75rem 0 0;padding:.75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;color:#1e293b;overflow-x:auto}.studio-editor .properties-panel .properties-body .no-properties{margin:.75rem 0 0;padding:1rem;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:6px;text-align:center;font-size:.75rem;color:#94a3b8}.studio-editor .properties-panel .properties-body .connections-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;font-size:.75rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item.outcome-connection{border-left-width:3px}.studio-editor .properties-panel .properties-body .connections-list .connection-item i{color:#64748b;font-size:.875rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item span{flex:1;color:#1e293b;font-weight:500}.studio-editor .properties-panel .properties-body .connections-list .connection-item .outcome-badge{padding:.25rem .5rem;border-radius:4px;color:#fff;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn{padding:.25rem;background:transparent;border:none;color:#ef4444;cursor:pointer;border-radius:4px;transition:all .2s}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn:hover{background:#fee2e2}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn i{font-size:.75rem;color:inherit}.studio-editor .properties-panel .properties-body .outcomes-info{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;background:#fff;border:2px solid;border-radius:6px;font-size:.75rem;font-weight:600;color:#1e293b;transition:all .2s}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag:hover{transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag .outcome-dot{width:8px;height:8px;border-radius:50%}.studio-result{display:flex;flex-direction:column;background:#fff;border-left:1px solid #e2e8f0;overflow:hidden}.studio-result .result-header{padding:1rem 1.25rem;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:.5rem}.studio-result .result-header i{font-size:1.125rem;color:#10b981}.studio-result .result-header h3{flex:1;margin:0;font-size:1rem;font-weight:600;color:#1e293b}.studio-result .result-header .clear-btn{padding:.375rem .75rem;background:#fee2e2;color:#dc2626;border:none;border-radius:6px;cursor:pointer;font-size:.75rem;font-weight:500;transition:all .2s}.studio-result .result-header .clear-btn:hover{background:#fecaca}.studio-result .result-header .clear-btn i{font-size:.75rem;color:inherit}.studio-result .result-body{flex:1;overflow-y:auto;padding:1rem}.logs-container{display:flex;flex-direction:column;gap:.5rem}.log-item{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem;background:#f8fafc;border-left:3px solid #cbd5e1;border-radius:6px;font-size:.875rem}.log-item.log-info{border-left-color:#3b82f6;background:#eff6ff}.log-item.log-info .log-icon{color:#3b82f6}.log-item.log-success{border-left-color:#10b981;background:#f0fdf4}.log-item.log-success .log-icon{color:#10b981}.log-item.log-warning{border-left-color:#f59e0b;background:#fffbeb}.log-item.log-warning .log-icon{color:#f59e0b}.log-item.log-error{border-left-color:#ef4444;background:#fef2f2}.log-item.log-error .log-icon{color:#ef4444}.log-item .log-time{font-family:JetBrains Mono,monospace;font-size:.75rem;color:#64748b;min-width:80px}.log-item .log-icon{font-size:1rem}.log-item .log-message{flex:1;color:#1e293b}.log-item .log-data-toggle{padding:.25rem .5rem;background:transparent;border:1px solid #cbd5e1;border-radius:4px;cursor:pointer;transition:all .2s}.log-item .log-data-toggle:hover{background:#fff}.log-item .log-data-toggle i{font-size:.75rem;color:#64748b}.log-data{margin:.5rem 0 0;padding:1rem;background:#0f172a;color:#e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;overflow-x:auto}.settings-modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:9999;padding:2rem;animation:fadeIn .2s ease}.settings-modal{background:#fff;border-radius:12px;box-shadow:0 20px 60px #0000004d;width:100%;max-width:900px;max-height:90vh;display:flex;flex-direction:column;animation:slideUp .3s ease}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.settings-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.5rem 2rem;border-bottom:1px solid #e2e8f0}.settings-modal-header .header-title{display:flex;align-items:center;gap:.75rem}.settings-modal-header .header-title i{font-size:1.5rem;color:#8b5cf6}.settings-modal-header .header-title h2{margin:0;font-size:1.25rem;font-weight:700;color:#1e293b}.settings-modal-header .close-btn{padding:.5rem;background:transparent;border:none;color:#64748b;cursor:pointer;border-radius:6px;transition:all .2s}.settings-modal-header .close-btn:hover{background:#f1f5f9;color:#ef4444}.settings-modal-header .close-btn i{font-size:1.25rem}.settings-modal-body{flex:1;display:flex;flex-direction:column;overflow:hidden}.settings-tabs{display:flex;gap:.5rem;padding:1rem 2rem 0;border-bottom:1px solid #e2e8f0}.settings-tabs .tab-btn{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.25rem;background:transparent;border:none;border-bottom:2px solid transparent;color:#64748b;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;position:relative}.settings-tabs .tab-btn:hover{color:#8b5cf6;background:#f8fafc}.settings-tabs .tab-btn.active{color:#8b5cf6;border-bottom-color:#8b5cf6}.settings-tabs .tab-btn i{font-size:1rem}.settings-tabs .tab-btn .badge{padding:.125rem .5rem;background:#8b5cf6;color:#fff;border-radius:10px;font-size:.7rem;font-weight:600}.settings-content{flex:1;overflow-y:auto;padding:2rem}.settings-section h3{margin:0 0 1.5rem;font-size:1rem;font-weight:600;color:#1e293b}.settings-section .section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem}.settings-section .section-header h3{margin:0}.settings-section .section-header .add-btn{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#8b5cf6;color:#fff;border:none;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.settings-section .section-header .add-btn:hover{background:#7c3aed;transform:translateY(-1px);box-shadow:0 4px 12px #8b5cf64d}.settings-section .section-header .add-btn i{font-size:.875rem}.form-group{margin-bottom:1.25rem}.form-group label{display:block;font-size:.875rem;font-weight:600;color:#475569;margin-bottom:.5rem}.form-group small{display:block;font-size:.75rem;color:#94a3b8;margin-top:.375rem}.form-group.checkbox-group{margin-bottom:0}.form-group.checkbox-group label{display:flex;align-items:center;gap:.5rem;cursor:pointer;margin-bottom:0}.form-group.checkbox-group label input[type=checkbox]{width:18px;height:18px;cursor:pointer}.form-group.checkbox-group label span{font-size:.875rem;font-weight:500}.form-group.flex-1{flex:1}.form-row{display:flex;gap:1rem;align-items:flex-start}.form-input,.form-select,.form-textarea{width:100%;padding:.625rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;transition:all .2s}.form-input:focus,.form-select:focus,.form-textarea:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.form-input::placeholder,.form-select::placeholder,.form-textarea::placeholder{color:#cbd5e1}.form-textarea{resize:vertical;font-family:inherit}.items-list{display:flex;flex-direction:column;gap:1rem}.item-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;transition:all .2s}.item-card:hover{border-color:#cbd5e1;box-shadow:0 2px 8px #0000000d}.item-card .item-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:#f1f5f9;border-bottom:1px solid #e2e8f0}.item-card .item-header .item-number{font-size:.75rem;font-weight:700;color:#8b5cf6;padding:.25rem .5rem;background:#fff;border-radius:4px}.item-card .item-header .remove-btn{padding:.375rem .625rem;background:transparent;border:none;color:#ef4444;cursor:pointer;border-radius:4px;transition:all .2s}.item-card .item-header .remove-btn:hover{background:#fee2e2}.item-card .item-header .remove-btn i{font-size:.875rem}.item-card .item-body{padding:1rem}.advanced-group{margin-bottom:2rem;padding-bottom:2rem;border-bottom:1px solid #e2e8f0}.advanced-group:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.advanced-group h4{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.5px}.outcomes-preview{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.outcomes-preview .outcome-chip{display:inline-flex;align-items:center;padding:.375rem .75rem;background:#f1f5f9;border:1px solid #cbd5e1;border-radius:6px;font-size:.75rem;font-weight:600;color:#475569}.export-info{margin-top:1rem;padding:1rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px}.export-info .info-row{display:flex;align-items:center;gap:.75rem;padding:.5rem 0;border-bottom:1px solid #e2e8f0}.export-info .info-row:last-child{border-bottom:none;padding-bottom:0}.export-info .info-row .label{font-size:.75rem;font-weight:600;color:#64748b;min-width:120px}.export-info .info-row code{flex:1;padding:.25rem .5rem;background:#fff;border:1px solid #e2e8f0;border-radius:4px;font-size:.75rem;color:#1e293b;font-family:JetBrains Mono,monospace}.settings-modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:1rem;padding:1.5rem 2rem;border-top:1px solid #e2e8f0;background:#f8fafc}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 1rem;text-align:center;color:#94a3b8}.empty-state i{font-size:3rem;margin-bottom:1rem}.empty-state p{margin:0;font-size:.875rem}.final-result{margin-top:1.5rem;padding-top:1.5rem;border-top:2px solid #e2e8f0}.final-result .result-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem;background:#f8fafc;border-radius:8px;margin-bottom:1rem;cursor:pointer;transition:all .2s}.final-result .result-header:hover{background:#f1f5f9;transform:translate(-2px)}.final-result .result-header h4{display:flex;align-items:center;gap:.5rem;margin:0;font-size:.875rem;font-weight:600;color:#475569;text-transform:uppercase}.final-result .result-header h4 i{font-size:.875rem;transition:transform .2s}.final-result .result-header .toggle-hint{font-size:.75rem;color:#94a3b8}.final-result .result-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:1rem}.final-result .result-card .result-row{display:flex;align-items:center;gap:.75rem;padding:.5rem 0}.final-result .result-card .result-row:not(:last-child){border-bottom:1px solid #e2e8f0}.final-result .result-card .result-row strong{font-size:.875rem;color:#475569;min-width:100px}.final-result .result-card .result-row .badge{padding:.25rem .75rem;border-radius:12px;font-size:.75rem;font-weight:600}.final-result .result-card .result-row .badge.badge-running{background:#dbeafe;color:#1e40af}.final-result .result-card .result-row .badge.badge-finished{background:#d1fae5;color:#065f46}.final-result .result-card .result-row .badge.badge-cancelled{background:#fed7aa;color:#92400e}.final-result .result-card .result-row .badge.badge-faulted{background:#fee2e2;color:#991b1b}.final-result .result-card .result-row pre{margin:.5rem 0 0;padding:.75rem;background:#0f172a;color:#e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;overflow-x:auto;width:100%}.activities-list::-webkit-scrollbar,.result-body::-webkit-scrollbar{width:8px}.activities-list::-webkit-scrollbar-track,.result-body::-webkit-scrollbar-track{background:#f1f5f9}.activities-list::-webkit-scrollbar-thumb,.result-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}.activities-list::-webkit-scrollbar-thumb:hover,.result-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.activity-card{cursor:grab}.activity-card:active{cursor:grabbing}.activity-card[draggable=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.visual-node[draggable=true]{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.visual-node:active{cursor:grabbing}.canvas-area[data-drag-over=true]{background-color:#8b5cf60d}.connector:hover{transform:scale(1.3);box-shadow:0 0 0 3px #8b5cf64d}.connector-out.active{animation:pulse 1s infinite}@keyframes pulse{0%,to{box-shadow:0 0 0 3px #ef44444d}50%{box-shadow:0 0 0 6px #ef44441a}}@keyframes slideDown{0%{opacity:0;max-height:0}to{opacity:1;max-height:2000px}}.execution-dialog-overlay{position:fixed;inset:0;background:#000000b3;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn .2s ease}.execution-dialog{width:90vw;max-width:1200px;height:90vh;background:#fff;border-radius:16px;box-shadow:0 25px 50px #0000004d;display:flex;flex-direction:column;overflow:hidden;animation:slideUp .3s ease}.execution-dialog-header{padding:1.5rem 2rem;background:linear-gradient(135deg,#8b5cf6,#7c3aed);color:#fff;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.execution-dialog-header .header-content{display:flex;align-items:center;gap:1rem;flex:1}.execution-dialog-header .header-content>i{font-size:2.5rem;opacity:.9}.execution-dialog-header .header-content .header-info h2{margin:0;font-size:1.75rem;font-weight:700}.execution-dialog-header .header-content .header-info p{margin:.25rem 0 0;opacity:.9;font-size:.95rem}.execution-dialog-header .close-btn{background:#fff3;border:none;width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;color:#fff;font-size:1.25rem}.execution-dialog-header .close-btn:hover:not(:disabled){background:#ffffff4d;transform:scale(1.05)}.execution-dialog-header .close-btn:disabled{opacity:.5;cursor:not-allowed}.execution-dialog-body{flex:1;overflow-y:auto;padding:2rem;background:#f8fafc}.execution-dialog-footer{padding:1rem 2rem;background:#fff;border-top:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.execution-dialog-footer .footer-info{display:flex;gap:1.5rem}.execution-dialog-footer .footer-info .time-info{display:flex;align-items:center;gap:.5rem;color:#64748b;font-size:.875rem}.execution-dialog-footer .footer-info .time-info i{color:#8b5cf6}.execution-dialog-footer .footer-actions{display:flex;gap:.75rem}.workflow-info-panel{background:#fff;border-radius:12px;padding:2rem;box-shadow:0 4px 6px #0000000d}.workflow-info-panel .info-section{margin-bottom:2rem}.workflow-info-panel .info-section h3{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;color:#1e293b;font-size:1.25rem}.workflow-info-panel .info-section h3 i{color:#8b5cf6}.workflow-info-panel .info-section .description{color:#475569;line-height:1.7;margin:0}.workflow-info-panel .info-section .features-list{list-style:none;padding:0;margin:0;display:grid;gap:.75rem}.workflow-info-panel .info-section .features-list li{display:flex;align-items:center;gap:.75rem;padding:.75rem;background:#f8fafc;border-radius:8px;color:#334155}.workflow-info-panel .info-section .features-list li i{color:#10b981;font-size:1.125rem}.workflow-info-panel .start-section{text-align:center;padding:2rem;background:linear-gradient(135deg,#f0fdf4,#dcfce7);border-radius:12px;border:2px dashed #10b981}.workflow-info-panel .start-section .start-illustration{margin-bottom:1rem}.workflow-info-panel .start-section .start-illustration i{font-size:4rem;color:#10b981;animation:float 3s ease-in-out infinite}.workflow-info-panel .start-section h3{margin:0 0 .5rem;color:#1e293b;font-size:1.5rem}.workflow-info-panel .start-section p{margin:0 0 1.5rem;color:#64748b}.state-machine-ui .issue-tracker{background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 2px #0000000d}.state-machine-ui .issue-tracker .issue-header-main{padding:1.5rem 2rem 1rem;border-bottom:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#64748b;margin-bottom:.75rem}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .project-name{color:#3b82f6;font-weight:600}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .separator{color:#94a3b8}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .issue-key{color:#64748b}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title{display:flex;align-items:center;gap:.75rem}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .type-badge{padding:.375rem .75rem;border-radius:4px;font-size:.8125rem;font-weight:600;display:flex;align-items:center;gap:.375rem;background:#eff6ff;color:#3b82f6}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .type-badge i{font-size:1rem}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .issue-main-title{margin:0;font-size:1.5rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-action-bar{padding:.75rem 2rem;background:#f8fafc;border-bottom:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left{display:flex;gap:.5rem}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn{padding:.5rem 1rem;border:1px solid #cbd5e1;border-radius:4px;background:#fff;font-weight:500;font-size:.875rem;cursor:pointer;transition:all .2s;color:#334155}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn:hover:not(:disabled){background:#f1f5f9;border-color:#94a3b8}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn:disabled{opacity:.5;cursor:not-allowed}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-primary{background:#3b82f6;color:#fff;border-color:#3b82f6}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-primary:hover:not(:disabled){background:#2563eb}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-success{background:#10b981;color:#fff;border-color:#10b981}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-success:hover:not(:disabled){background:#059669}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-warning{background:#f59e0b;color:#fff;border-color:#f59e0b}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-warning:hover:not(:disabled){background:#d97706}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-right .more-actions-btn{padding:.5rem 1rem;border:1px solid #cbd5e1;border-radius:4px;background:#fff;font-weight:500;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;color:#334155;transition:all .2s}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-right .more-actions-btn:hover{background:#f1f5f9}.state-machine-ui .issue-tracker .issue-main-content{display:grid;grid-template-columns:320px 1fr;gap:2rem;padding:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section{margin-bottom:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row{display:flex;padding:.625rem 0;border-bottom:1px solid #f1f5f9}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row:last-child{border-bottom:none}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row label{min-width:100px;font-size:.8125rem;color:#64748b;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value i{font-size:1rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .status-badge{padding:.25rem .625rem;border-radius:4px;color:#fff;font-weight:600;font-size:.75rem;text-transform:uppercase}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .view-workflow-link{color:#3b82f6;font-size:.8125rem;text-decoration:none;margin-left:.5rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .view-workflow-link:hover{text-decoration:underline}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .user-avatar{width:24px;height:24px;border-radius:50%;background:#8b5cf6;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.75rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz{background:#f8fafc;border-radius:8px;padding:1.5rem;border:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz h3{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state{display:flex;flex-direction:column;align-items:center;gap:.375rem;opacity:.4;transition:opacity .2s}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.active,.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.completed{opacity:1}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state .state-circle{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:.875rem;box-shadow:0 2px 4px #0000001a}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state .state-name{font-size:.6875rem;color:#64748b;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.active .state-name{color:#1e293b;font-weight:600}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-arrow{color:#cbd5e1;font-size:.75rem;margin:0 .25rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section{margin-bottom:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section h3,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section .description-content,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .description-content{padding:1rem;background:#f8fafc;border-radius:6px;border:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section .description-content p,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .description-content p{margin:0;color:#475569;line-height:1.7;font-size:.875rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline{display:flex;flex-direction:column;gap:1rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item{display:flex;gap:.75rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-avatar{width:32px;height:32px;border-radius:50%;background:#8b5cf6;color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.875rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content{flex:1;padding-bottom:1rem;border-bottom:1px solid #f1f5f9}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header{font-size:.875rem;color:#334155;line-height:1.6;margin-bottom:.375rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header strong{color:#1e293b;font-weight:600}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header .activity-action{color:#64748b}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-meta{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;color:#94a3b8}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-meta .activity-label{color:#8b5cf6;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item:last-child .activity-content{border-bottom:none;padding-bottom:0}.registration-ui{display:flex;justify-content:center;align-items:center;min-height:400px}.registration-ui .registration-card{background:#fff;border-radius:12px;padding:3rem;box-shadow:0 4px 6px #0000000d;text-align:center;max-width:500px}.registration-ui .registration-card .registration-icon{margin-bottom:1.5rem}.registration-ui .registration-card .registration-icon i{font-size:5rem;color:#8b5cf6}.registration-ui .registration-card h3{margin:0 0 .75rem;color:#1e293b;font-size:1.75rem;font-weight:700}.registration-ui .registration-card .registration-desc{margin:0 0 2rem;color:#64748b;line-height:1.7}.registration-ui .registration-card .registration-progress{padding:2rem;background:#fef3c7;border-radius:8px}.registration-ui .registration-card .registration-progress .progress-spinner{margin-bottom:1rem}.registration-ui .registration-card .registration-progress .progress-spinner i{font-size:3rem;color:#f59e0b}.registration-ui .registration-card .registration-progress p{margin:0;color:#92400e;font-weight:500}.registration-ui .registration-card .registration-success{padding:2rem;background:#f0fdf4;border-radius:8px}.registration-ui .registration-card .registration-success i{font-size:4rem;color:#10b981;margin-bottom:1rem}.registration-ui .registration-card .registration-success h4{margin:0 0 .5rem;color:#064e3b;font-size:1.5rem;font-weight:700}.registration-ui .registration-card .registration-success p{margin:0;color:#065f46}.default-execution-view{display:flex;justify-content:center;align-items:center;min-height:400px}.default-execution-view .execution-status{text-align:center;padding:3rem;background:#fff;border-radius:12px;box-shadow:0 4px 6px #0000000d;min-width:400px}.default-execution-view .execution-status i{font-size:5rem;margin-bottom:1.5rem}.default-execution-view .execution-status h3{margin:0 0 .75rem;font-size:1.75rem;font-weight:700}.default-execution-view .execution-status p{margin:0;color:#64748b;line-height:1.7}.default-execution-view .execution-status .status-running i{color:#f59e0b}.default-execution-view .execution-status .status-finished i{color:#10b981}.default-execution-view .execution-status .status-error i{color:#ef4444}.execution-logs-panel{margin-top:2rem;background:#fff;border-radius:12px;padding:1.5rem;box-shadow:0 4px 6px #0000000d}.execution-logs-panel h3{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;color:#1e293b;font-size:1.125rem}.execution-logs-panel h3 i{color:#8b5cf6}.execution-logs-panel .logs-container-compact{max-height:300px;overflow-y:auto;background:#f8fafc;border-radius:8px;padding:.75rem}.execution-logs-panel .logs-container-compact .log-item-compact{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-radius:6px;margin-bottom:.5rem;font-size:.875rem}.execution-logs-panel .logs-container-compact .log-item-compact:last-child{margin-bottom:0}.execution-logs-panel .logs-container-compact .log-item-compact .log-time{font-family:Courier New,monospace;color:#64748b;font-size:.8125rem;min-width:70px}.execution-logs-panel .logs-container-compact .log-item-compact .log-icon{display:flex;align-items:center;justify-content:center;width:20px}.execution-logs-panel .logs-container-compact .log-item-compact .log-icon i{font-size:1rem}.execution-logs-panel .logs-container-compact .log-item-compact .log-message{flex:1;color:#334155}.execution-logs-panel .logs-container-compact .log-item-compact.log-info{background:#eff6ff}.execution-logs-panel .logs-container-compact .log-item-compact.log-info .log-icon i{color:#3b82f6}.execution-logs-panel .logs-container-compact .log-item-compact.log-success{background:#f0fdf4}.execution-logs-panel .logs-container-compact .log-item-compact.log-success .log-icon i{color:#10b981}.execution-logs-panel .logs-container-compact .log-item-compact.log-warning{background:#fffbeb}.execution-logs-panel .logs-container-compact .log-item-compact.log-warning .log-icon i{color:#f59e0b}.execution-logs-panel .logs-container-compact .log-item-compact.log-error{background:#fef2f2}.execution-logs-panel .logs-container-compact .log-item-compact.log-error .log-icon i{color:#ef4444}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgSelectOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.ɵNgSelectMultipleOption, selector: \"option\", inputs: [\"ngValue\", \"value\"] }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.NumberValueAccessor, selector: \"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]\" }, { kind: \"directive\", type: i1.CheckboxControlValueAccessor, selector: \"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.MinValidator, selector: \"input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]\", inputs: [\"min\"] }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXButtonGroupModule }, { kind: \"component\", type: i3.AXButtonGroupComponent, selector: \"ax-button-group\", inputs: [\"disabled\", \"color\", \"look\", \"fitParent\", \"selection\"], outputs: [\"onBlur\", \"onFocus\", \"lookChange\", \"colorChange\", \"disabledChange\", \"onClick\", \"selectionChange\", \"selectedButtonChange\"] }, { kind: \"component\", type: i3.AXButtonGroupItemComponent, selector: \"ax-button-group-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i4.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXTextBoxModule }, { kind: \"ngmodule\", type: AXSelectBoxModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPThemeLayoutStartSideComponent, selector: \"axp-layout-page-start-side, axp-layout-start-side\" }, { kind: \"component\", type: AXMActivityCategoriesTreeComponent, selector: \"axp-activity-categories-tree\", outputs: [\"categoryClick\", \"activityClick\"] }, { kind: \"pipe\", type: i5.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.JsonPipe, name: \"json\" }, { kind: \"pipe\", type: i5.DatePipe, name: \"date\" }, { kind: \"pipe\", type: i6.AXTranslatorPipe, name: \"translate\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: WorkflowStudioComponent, decorators: [{\n type: Component,\n args: [{ selector: 'app-workflow-studio', standalone: true, imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDecoratorModule,\n AXTextBoxModule,\n AXSelectBoxModule,\n AXTranslationModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutStartSideComponent,\n AXMActivityCategoriesTreeComponent\n ], providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: WorkflowStudioComponent,\n },\n ], template: \"<axp-page-layout>\\n <axp-layout-start-side>\\n <axp-activity-categories-tree (categoryClick)=\\\"onCategoryClick($event)\\\"\\n (activityClick)=\\\"onActivityClick($event)\\\"></axp-activity-categories-tree>\\n </axp-layout-start-side>\\n\\n <axp-page-toolbar>\\n <axp-layout-prefix>\\n <!-- Editor Tabs -->\\n <ax-button-group class=\\\"ax-sm\\\" [selection]=\\\"'single'\\\">\\n <ax-button-group-item (onClick)=\\\"switchTab('json')\\\" [selected]=\\\"activeTab() === 'json'\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-code\\\"></i>\\n </ax-prefix>\\n {{ '@workflow-management:workflow-studio.terms.json-editor' | translate | async }}\\n </ax-button-group-item>\\n <ax-button-group-item (onClick)=\\\"switchTab('visual')\\\" [selected]=\\\"activeTab() === 'visual'\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-diagram-project\\\"></i>\\n </ax-prefix>\\n {{ '@workflow-management:workflow-studio.terms.visual-designer' | translate | async }}\\n </ax-button-group-item>\\n </ax-button-group>\\n </axp-layout-prefix>\\n </axp-page-toolbar>\\n\\n <axp-page-content>\\n <div class=\\\"workflow-studio\\\">\\n <!-- Main Layout -->\\n <div class=\\\"studio-body\\\" [class.properties-hidden]=\\\"!showPropertiesPanel()\\\">\\n\\n <!-- Editor -->\\n <div class=\\\"studio-editor\\\">\\n <!-- Tab Content -->\\n <div class=\\\"editor-content\\\">\\n <!-- JSON Tab -->\\n @if (activeTab() === 'json') {\\n <div class=\\\"json-tab\\\">\\n <textarea class=\\\"json-editor\\\" [(ngModel)]=\\\"workflowJson\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.components.json-editor.placeholder' | translate | async\\\"\\n spellcheck=\\\"false\\\">\\n </textarea>\\n </div>\\n }\\n\\n <!-- Visual Tab -->\\n @if (activeTab() === 'visual') {\\n <div class=\\\"visual-tab\\\">\\n <!-- Canvas -->\\n <div class=\\\"visual-canvas\\\">\\n <div class=\\\"canvas-toolbar\\\">\\n <button class=\\\"tool-btn\\\" (click)=\\\"clearCanvas()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.canvas-toolbar.clear-canvas.title' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n <button class=\\\"tool-btn\\\" (click)=\\\"visualToJson()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.canvas-toolbar.convert-to-json.title' | translate | async\\\">\\n <i class=\\\"fa-light fa-code\\\"></i>\\n </button>\\n <span class=\\\"tool-info\\\">\\n <i class=\\\"fa-light fa-lightbulb\\\"></i>\\n <strong>{{ '@workflow-management:workflow-studio.components.canvas-toolbar.hint' | translate | async }}</strong>\\n </span>\\n </div>\\n\\n <div class=\\\"canvas-area\\\" (drop)=\\\"onCanvasDrop($event)\\\" (dragover)=\\\"onCanvasDragOver($event)\\\"\\n (dragleave)=\\\"onCanvasDragLeave($event)\\\">\\n <!-- SVG for Connections -->\\n <svg class=\\\"connections-layer\\\">\\n <!-- Outcome-based Connections -->\\n @for (node of visualNodes(); track node.id) {\\n @if (node.outcomeConnections && node.outcomeConnections.length > 0) {\\n @for (conn of node.outcomeConnections; track conn.targetNodeId + conn.outcome) {\\n @let targetNode = findNodeById(conn.targetNodeId);\\n @if (targetNode) {\\n <g class=\\\"outcome-connection-group\\\">\\n <line [attr.x1]=\\\"node.position.x + 75\\\" [attr.y1]=\\\"node.position.y + 80\\\"\\n [attr.x2]=\\\"targetNode.position.x + 75\\\" [attr.y2]=\\\"targetNode.position.y - 50\\\"\\n class=\\\"connection-line outcome-line\\\" [attr.stroke]=\\\"getOutcomeColor(conn.outcome)\\\"\\n stroke-width=\\\"2.5\\\"\\n [attr.marker-end]=\\\"'url(#arrowhead-' + getOutcomeColorName(conn.outcome) + ')'\\\"\\n style=\\\"cursor: pointer\\\" (dblclick)=\\\"disconnectNodes(node.id, conn.targetNodeId, conn.outcome)\\\"\\n [attr.title]=\\\"'Outcome: ' + conn.outcome + ' (Double-click to remove)'\\\">\\n <title>{{ conn.outcome }} \\u2192 {{ targetNode.name }}</title>\\n </line>\\n <text [attr.x]=\\\"(node.position.x + targetNode.position.x) / 2 + 75\\\"\\n [attr.y]=\\\"(node.position.y + targetNode.position.y) / 2 + 15\\\" class=\\\"connection-label\\\"\\n text-anchor=\\\"middle\\\" [attr.fill]=\\\"getOutcomeColor(conn.outcome)\\\" font-size=\\\"11\\\"\\n font-weight=\\\"600\\\" pointer-events=\\\"none\\\">\\n {{ conn.outcome }}\\n </text>\\n </g>\\n }\\n }\\n } @else {\\n <!-- Simple Connections (backward compatibility) -->\\n @for (targetId of node.connections; track targetId) {\\n @let targetNode = findNodeById(targetId);\\n @if (targetNode) {\\n <line [attr.x1]=\\\"node.position.x + 75\\\" [attr.y1]=\\\"node.position.y + 40\\\"\\n [attr.x2]=\\\"targetNode.position.x + 75\\\" [attr.y2]=\\\"targetNode.position.y - 50\\\"\\n class=\\\"connection-line\\\" stroke=\\\"#64748b\\\" stroke-width=\\\"2\\\" marker-end=\\\"url(#arrowhead-default)\\\"\\n style=\\\"cursor: pointer\\\" (dblclick)=\\\"disconnectNodes(node.id, targetId)\\\"\\n title=\\\"Double-click \\u0628\\u0631\\u0627\\u06CC \\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <title>Double-click \\u0628\\u0631\\u0627\\u06CC \\u062D\\u0630\\u0641</title>\\n </line>\\n }\\n }\\n }\\n }\\n\\n <defs>\\n <!-- Default Arrow -->\\n <marker id=\\\"arrowhead-default\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#64748b\\\" />\\n </marker>\\n <!-- Success Arrow (Green) -->\\n <marker id=\\\"arrowhead-success\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#10b981\\\" />\\n </marker>\\n <!-- Error Arrow (Red) -->\\n <marker id=\\\"arrowhead-error\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#ef4444\\\" />\\n </marker>\\n <!-- Warning Arrow (Orange) -->\\n <marker id=\\\"arrowhead-warning\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#f59e0b\\\" />\\n </marker>\\n <!-- Info Arrow (Blue) -->\\n <marker id=\\\"arrowhead-info\\\" markerWidth=\\\"10\\\" markerHeight=\\\"10\\\" refX=\\\"9\\\" refY=\\\"3\\\" orient=\\\"auto\\\">\\n <polygon points=\\\"0 0, 10 3, 0 6\\\" fill=\\\"#3b82f6\\\" />\\n </marker>\\n </defs>\\n </svg>\\n\\n <!-- Nodes -->\\n @for (node of visualNodes(); track node.id) {\\n <div class=\\\"visual-node\\\" [class.selected]=\\\"selectedNode()?.id === node.id\\\"\\n [style.left.px]=\\\"node.position.x\\\" [style.top.px]=\\\"node.position.y\\\" [attr.data-node-id]=\\\"node.id\\\"\\n draggable=\\\"true\\\" (dragstart)=\\\"onNodeDragStart($event, node)\\\" (drag)=\\\"onNodeDrag($event, node)\\\"\\n (dragend)=\\\"onNodeDragEnd($event, node)\\\" (click)=\\\"selectNodeById(node)\\\">\\n <div class=\\\"node-header\\\">\\n <i [class]=\\\"node.icon\\\"></i>\\n <span>{{ node.name }}</span>\\n <button class=\\\"node-delete\\\" (click)=\\\"deleteNode(node.id); $event.stopPropagation()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <div class=\\\"node-body\\\">\\n <small>{{ node.type }}</small>\\n </div>\\n\\n <div class=\\\"node-connectors\\\">\\n <!-- Input Connector -->\\n <div class=\\\"connector connector-in\\\" title=\\\"Input\\\" (click)=\\\"onConnectorClick($event, node, 'in')\\\">\\n </div>\\n\\n <!-- Output Connectors - Multiple outcomes support -->\\n @if (node.outcomes && node.outcomes.length > 1) {\\n <!-- Multiple outcomes: show separate port for each -->\\n <div class=\\\"outcomes-container\\\">\\n @for (outcome of node.outcomes; track outcome; let idx = $index) {\\n <div class=\\\"outcome-connector\\\" [class.active]=\\\"\\n connectionSource?.node?.id === node.id && connectionSource?.outcome === outcome\\n \\\" [attr.data-outcome]=\\\"outcome\\\" [title]=\\\"'Output: ' + outcome\\\"\\n (click)=\\\"onOutcomeConnectorClick($event, node, outcome)\\\">\\n <span class=\\\"outcome-label\\\">{{ outcome }}</span>\\n <div class=\\\"outcome-dot\\\"></div>\\n </div>\\n }\\n </div>\\n } @else {\\n <!-- Single outcome: show simple output connector -->\\n <div class=\\\"connector connector-out\\\" [class.active]=\\\"connectionSource?.node?.id === node.id\\\"\\n title=\\\"Output\\\" (click)=\\\"onConnectorClick($event, node, 'out')\\\"></div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Empty State -->\\n @if (visualNodes().length === 0) {\\n <div class=\\\"canvas-empty-state\\\">\\n <i class=\\\"fa-light fa-diagram-project\\\"></i>\\n <p>Activity \\u0647\\u0627 \\u0631\\u0627 \\u0627\\u0632 \\u0633\\u0627\\u06CC\\u062F\\u0628\\u0627\\u0631 \\u0628\\u0647 \\u0627\\u06CC\\u0646\\u062C\\u0627 \\u0628\\u06A9\\u0634\\u06CC\\u062F</p>\\n <small>\\u06CC\\u0627 \\u0627\\u0632 \\u062A\\u0628 JSON\\u060C workflow \\u0631\\u0627 import \\u06A9\\u0646\\u06CC\\u062F</small>\\n </div>\\n }\\n </div>\\n </div>\\n\\n <!-- Properties Panel -->\\n @if (selectedNode() && showPropertiesPanel()) {\\n <div class=\\\"properties-panel\\\">\\n <div class=\\\"properties-header\\\">\\n <i class=\\\"fa-light fa-sliders\\\"></i>\\n <h4>{{ '@workflow-management:workflow-studio.components.properties-panel.title' | translate | async }}</h4>\\n <div class=\\\"header-actions\\\">\\n <button class=\\\"header-btn\\\" (click)=\\\"togglePropertiesPanel()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.close-panel' | translate | async\\\">\\n <i class=\\\"fa-light fa-angle-right\\\"></i>\\n </button>\\n <button class=\\\"header-btn\\\" (click)=\\\"selectedNode.set(null)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.close' | translate | async\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n </div>\\n <div class=\\\"properties-body\\\">\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.id' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.id\\\" disabled />\\n </div>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.type' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.type\\\" disabled />\\n </div>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.name' | translate | async }}:</label>\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.name\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, 'name', $any($event.target).value)\\\" />\\n </div>\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCE5 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.input-properties' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">{{ '@workflow-management:workflow-studio.components.properties-panel.sections.input-properties' | translate | async }} - \\u0645\\u0642\\u0627\\u062F\\u06CC\\u0631 \\u0631\\u0627 \\u062A\\u0646\\u0638\\u06CC\\u0645 \\u06A9\\u0646\\u06CC\\u062F</small>\\n\\n @if (hasProperties(selectedNode()!.properties)) {\\n <div class=\\\"property-editor\\\">\\n @for (key of Object.keys(selectedNode()!.properties); track key) {\\n <div class=\\\"property-row\\\">\\n <label>\\n {{ key }}\\n <span class=\\\"property-type-badge\\\">{{ typeof selectedNode()!.properties[key] }}</span>\\n </label>\\n\\n @if (typeof selectedNode()!.properties[key] === 'boolean') {\\n <select [value]=\\\"selectedNode()!.properties[key]\\\" (change)=\\\"\\n updateNodeProperty(selectedNode()!.id, key, $any($event.target).value === 'true')\\n \\\">\\n <option [value]=\\\"true\\\">True</option>\\n <option [value]=\\\"false\\\">False</option>\\n </select>\\n } @else if (typeof selectedNode()!.properties[key] === 'number') {\\n <input type=\\\"number\\\" [value]=\\\"selectedNode()!.properties[key]\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, key, +$any($event.target).value)\\\" />\\n } @else if (typeof selectedNode()!.properties[key] === 'object') {\\n <textarea rows=\\\"3\\\" [value]=\\\"JSON.stringify(selectedNode()!.properties[key], null, 2)\\\"\\n (input)=\\\"updateNodePropertyJSON(selectedNode()!.id, key, $any($event.target).value)\\\"></textarea>\\n } @else {\\n <input type=\\\"text\\\" [value]=\\\"selectedNode()!.properties[key]\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, key, $any($event.target).value)\\\" />\\n }\\n </div>\\n }\\n </div>\\n } @else {\\n <p class=\\\"no-properties\\\">\\n {{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-properties' | translate | async }}\\n </p>\\n }\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCE4 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.output-variables' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u062E\\u0631\\u0648\\u062C\\u06CC \\u0648 \\u0645\\u062A\\u063A\\u06CC\\u0631\\u0647\\u0627</small>\\n <div class=\\\"property-row\\\">\\n <label>{{ '@workflow-management:workflow-studio.components.properties-panel.fields.output-variable' | translate | async }}:</label>\\n <input type=\\\"text\\\" placeholder=\\\"\\u0645\\u062B\\u0644\\u0627\\u064B result\\\"\\n [value]=\\\"selectedNode()!.properties['outputVariable'] || ''\\\"\\n (input)=\\\"updateNodeProperty(selectedNode()!.id, 'outputVariable', $any($event.target).value)\\\" />\\n </div>\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDD17 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.connections' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u0627\\u062A\\u0635\\u0627\\u0644\\u0627\\u062A \\u0627\\u06CC\\u0646 \\u0646\\u0648\\u062F</small>\\n\\n <!-- Outcome-based Connections -->\\n @if (selectedNode()!.outcomeConnections && selectedNode()!.outcomeConnections!.length > 0) {\\n <div class=\\\"connections-list\\\">\\n @for (conn of selectedNode()!.outcomeConnections!; track conn.targetNodeId + conn.outcome) {\\n @let targetNode = findNodeById(conn.targetNodeId);\\n @if (targetNode) {\\n <div class=\\\"connection-item outcome-connection\\\">\\n <span class=\\\"outcome-badge\\\" [style.background]=\\\"getOutcomeColor(conn.outcome)\\\">\\n {{ conn.outcome }}\\n </span>\\n <i class=\\\"fa-light fa-arrow-right\\\"></i>\\n <span>{{ targetNode.name }}</span>\\n <button class=\\\"remove-btn\\\"\\n (click)=\\\"disconnectNodes(selectedNode()!.id, conn.targetNodeId, conn.outcome)\\\"\\n title=\\\"\\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n }\\n }\\n </div>\\n } @else if (selectedNode()!.connections.length > 0) {\\n <!-- Simple Connections (fallback) -->\\n <div class=\\\"connections-list\\\">\\n @for (targetId of selectedNode()!.connections; track targetId) {\\n @let targetNode = findNodeById(targetId);\\n @if (targetNode) {\\n <div class=\\\"connection-item\\\">\\n <i class=\\\"fa-light fa-arrow-right\\\"></i>\\n <span>{{ targetNode.name }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"disconnectNodes(selectedNode()!.id, targetId)\\\"\\n title=\\\"\\u062D\\u0630\\u0641 \\u0627\\u062A\\u0635\\u0627\\u0644\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n }\\n }\\n </div>\\n } @else {\\n <p class=\\\"no-properties\\\">{{ '@workflow-management:workflow-studio.components.properties-panel.empty-states.no-connections' | translate | async }}</p>\\n }\\n\\n <!-- Available Outcomes Info -->\\n @if (selectedNode()!.outcomes && selectedNode()!.outcomes!.length > 1) {\\n <div class=\\\"properties-divider\\\"></div>\\n <h5>\\uD83D\\uDCE4 {{ '@workflow-management:workflow-studio.components.properties-panel.sections.available-outcomes' | translate | async }}</h5>\\n <small class=\\\"properties-hint\\\">\\u062E\\u0631\\u0648\\u062C\\u06CC\\u200C\\u0647\\u0627\\u06CC \\u0645\\u0648\\u062C\\u0648\\u062F \\u0628\\u0631\\u0627\\u06CC \\u0627\\u062A\\u0635\\u0627\\u0644</small>\\n <div class=\\\"outcomes-info\\\">\\n @for (outcome of selectedNode()!.outcomes!; track outcome) {\\n <span class=\\\"outcome-tag\\\" [style.borderColor]=\\\"getOutcomeColor(outcome)\\\">\\n <span class=\\\"outcome-dot\\\" [style.background]=\\\"getOutcomeColor(outcome)\\\"></span>\\n {{ outcome }}\\n </span>\\n }\\n </div>\\n }\\n\\n <div class=\\\"properties-divider\\\"></div>\\n\\n <h5>\\uD83D\\uDCDD {{ '@workflow-management:workflow-studio.components.properties-panel.sections.raw-json' | translate | async }}</h5>\\n <pre class=\\\"properties-json\\\">{{ selectedNode() | json }}</pre>\\n </div>\\n </div>\\n }\\n\\n <!-- Toggle Button for Properties (when closed) -->\\n @if (selectedNode() && !showPropertiesPanel()) {\\n <button class=\\\"sidebar-toggle-btn right\\\" (click)=\\\"togglePropertiesPanel()\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.components.properties-panel.actions.show-panel' | translate | async\\\">\\n <i class=\\\"fa-light fa-sliders\\\"></i>\\n </button>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n\\n </div>\\n\\n <!-- Workflow Settings Modal -->\\n @if (showWorkflowSettings()) {\\n <div class=\\\"settings-modal-overlay\\\" (click)=\\\"closeWorkflowSettings()\\\">\\n <div class=\\\"settings-modal\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Modal Header -->\\n <div class=\\\"settings-modal-header\\\">\\n <div class=\\\"header-title\\\">\\n <i class=\\\"fa-light fa-cog\\\"></i>\\n <h2>{{ '@workflow-management:workflow-studio.settings.title' | translate | async }}</h2>\\n </div>\\n <button class=\\\"close-btn\\\" (click)=\\\"closeWorkflowSettings()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <!-- Modal Body -->\\n <div class=\\\"settings-modal-body\\\">\\n <!-- Tabs Navigation -->\\n <div class=\\\"settings-tabs\\\">\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'general'\\\"\\n (click)=\\\"switchSettingsTab('general')\\\">\\n <i class=\\\"fa-light fa-info-circle\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.general' | translate | async }}\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'inputs'\\\"\\n (click)=\\\"switchSettingsTab('inputs')\\\">\\n <i class=\\\"fa-light fa-sign-in\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.inputs' | translate | async }}\\n @if (workflowSettings().inputs.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().inputs.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'outputs'\\\"\\n (click)=\\\"switchSettingsTab('outputs')\\\">\\n <i class=\\\"fa-light fa-sign-out\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.outputs' | translate | async }}\\n @if (workflowSettings().outputs.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().outputs.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'variables'\\\"\\n (click)=\\\"switchSettingsTab('variables')\\\">\\n <i class=\\\"fa-light fa-box\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.variables' | translate | async }}\\n @if (workflowSettings().variables.length > 0) {\\n <span class=\\\"badge\\\">{{ workflowSettings().variables.length }}</span>\\n }\\n </button>\\n <button class=\\\"tab-btn\\\" [class.active]=\\\"activeSettingsTab() === 'advanced'\\\"\\n (click)=\\\"switchSettingsTab('advanced')\\\">\\n <i class=\\\"fa-light fa-cog\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.tabs.advanced' | translate | async }}\\n </button>\\n </div>\\n\\n <!-- Tab Content -->\\n <div class=\\\"settings-content\\\">\\n <!-- General Tab -->\\n @if (activeSettingsTab() === 'general') {\\n <div class=\\\"settings-section\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.general.title' | translate | async }}</h3>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.name.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.name.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().name\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().definitionId\\\" />\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.definition-id.description' | translate | async }}</small>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.general.fields.description.title' | translate | async }}</label>\\n <textarea class=\\\"form-textarea\\\" rows=\\\"4\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.general.fields.description.placeholder' | translate | async\\\"\\n [(ngModel)]=\\\"workflowSettings().description\\\"></textarea>\\n </div>\\n </div>\\n }\\n\\n <!-- Inputs Tab -->\\n @if (activeSettingsTab() === 'inputs') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.inputs.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowInput()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.inputs.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().inputs.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.inputs.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.inputs.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (input of workflowSettings().inputs; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowInput($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"userName\\\" [value]=\\\"input.name\\\"\\n (input)=\\\"updateWorkflowInput($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"User Name\\\" [value]=\\\"input.title\\\"\\n (input)=\\\"updateWorkflowInput($index, 'title', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"input.description || ''\\\"\\n (input)=\\\"updateWorkflowInput($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.data-type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"input.schema.dataType || 'string'\\\"\\n (change)=\\\"updateWorkflowInputSchema($index, 'dataType', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.default-value' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.inputs.fields.default-value-placeholder' | translate | async\\\"\\n [value]=\\\"input.schema.defaultValue || ''\\\"\\n (input)=\\\"updateWorkflowInputSchema($index, 'defaultValue', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [checked]=\\\"getInputIsRequired(input)\\\"\\n (change)=\\\"updateWorkflowInputValidation($index, $any($event.target).checked)\\\" />\\n <span>{{ '@workflow-management:workflow-studio.settings.sections.inputs.fields.required' | translate | async }}</span>\\n </label>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Outputs Tab -->\\n @if (activeSettingsTab() === 'outputs') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.outputs.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowOutput()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.outputs.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().outputs.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.outputs.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.outputs.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (output of workflowSettings().outputs; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowOutput($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.outputs.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"result\\\" [value]=\\\"output.name\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.title' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"Result\\\" [value]=\\\"output.title\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'title', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.outputs.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"output.description || ''\\\"\\n (input)=\\\"updateWorkflowOutput($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.outputs.fields.data-type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"output.schema.dataType || 'string'\\\"\\n (change)=\\\"updateWorkflowOutputSchema($index, 'dataType', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Variables Tab -->\\n @if (activeSettingsTab() === 'variables') {\\n <div class=\\\"settings-section\\\">\\n <div class=\\\"section-header\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.variables.title' | translate | async }}</h3>\\n <button class=\\\"add-btn\\\" (click)=\\\"addWorkflowVariable()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n {{ '@workflow-management:workflow-studio.settings.sections.variables.add-button' | translate | async }}\\n </button>\\n </div>\\n\\n @if (workflowSettings().variables.length === 0) {\\n <div class=\\\"empty-state\\\">\\n <i class=\\\"fa-light fa-inbox\\\"></i>\\n <p>{{ '@workflow-management:workflow-studio.settings.sections.variables.empty-state.title' | translate | async }}</p>\\n <small>{{ '@workflow-management:workflow-studio.settings.sections.variables.empty-state.description' | translate | async }}</small>\\n </div>\\n } @else {\\n <div class=\\\"items-list\\\">\\n @for (variable of workflowSettings().variables; track $index) {\\n <div class=\\\"item-card\\\">\\n <div class=\\\"item-header\\\">\\n <span class=\\\"item-number\\\">#{{ $index + 1 }}</span>\\n <button class=\\\"remove-btn\\\" (click)=\\\"removeWorkflowVariable($index)\\\"\\n [title]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.actions.remove' | translate | async\\\">\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </button>\\n </div>\\n <div class=\\\"item-body\\\">\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.name' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"tempData\\\" [value]=\\\"variable.name\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'name', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.type' | translate | async }}</label>\\n <select class=\\\"form-select\\\" [value]=\\\"variable.typeName\\\"\\n (change)=\\\"updateWorkflowVariable($index, 'typeName', $any($event.target).value)\\\">\\n <option value=\\\"string\\\">String</option>\\n <option value=\\\"number\\\">Number</option>\\n <option value=\\\"boolean\\\">Boolean</option>\\n <option value=\\\"object\\\">Object</option>\\n <option value=\\\"array\\\">Array</option>\\n </select>\\n </div>\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.description' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.fields.description-placeholder' | translate | async\\\"\\n [value]=\\\"variable.description || ''\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'description', $any($event.target).value)\\\" />\\n </div>\\n <div class=\\\"form-group\\\">\\n <label>{{ '@workflow-management:workflow-studio.settings.sections.variables.fields.initial-value' | translate | async }}</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\"\\n [placeholder]=\\\"'@workflow-management:workflow-studio.settings.sections.variables.fields.initial-value-placeholder' | translate | async\\\"\\n [value]=\\\"variable.value || ''\\\"\\n (input)=\\\"updateWorkflowVariable($index, 'value', $any($event.target).value)\\\" />\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n }\\n </div>\\n }\\n\\n <!-- Advanced Tab -->\\n @if (activeSettingsTab() === 'advanced') {\\n <div class=\\\"settings-section\\\">\\n <h3>{{ '@workflow-management:workflow-studio.settings.sections.advanced.title' | translate | async }}</h3>\\n\\n <!-- Versioning -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u0646\\u0633\\u062E\\u0647\\u200C\\u0628\\u0646\\u062F\\u06CC (Versioning)</h4>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>Version</label>\\n <input type=\\\"number\\\" class=\\\"form-input\\\" min=\\\"1\\\" [(ngModel)]=\\\"workflowSettings().version\\\" />\\n <small>\\u0634\\u0645\\u0627\\u0631\\u0647 \\u0646\\u0633\\u062E\\u0647 workflow (1, 2, 3, ...)</small>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\" style=\\\"margin-top: 1.8rem\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().isLatest\\\" />\\n <span>\\u0622\\u062E\\u0631\\u06CC\\u0646 \\u0646\\u0633\\u062E\\u0647 (Is Latest)</span>\\n </label>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\" style=\\\"margin-top: 1.8rem\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().isPublished\\\" />\\n <span>\\u0645\\u0646\\u062A\\u0634\\u0631 \\u0634\\u062F\\u0647 (Published)</span>\\n </label>\\n </div>\\n </div>\\n </div>\\n\\n <!-- Options -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u062A\\u0646\\u0638\\u06CC\\u0645\\u0627\\u062A (Options)</h4>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().usableAsActivity\\\" />\\n <span>\\u0642\\u0627\\u0628\\u0644 \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0628\\u0647 \\u0639\\u0646\\u0648\\u0627\\u0646 Activity</span>\\n </label>\\n <small>\\u0627\\u06CC\\u0646 workflow \\u0645\\u06CC\\u200C\\u062A\\u0648\\u0627\\u0646\\u062F \\u0628\\u0647 \\u0639\\u0646\\u0648\\u0627\\u0646 \\u06CC\\u06A9 activity \\u062F\\u0631 workflow \\u0647\\u0627\\u06CC \\u062F\\u06CC\\u06AF\\u0631 \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0634\\u0648\\u062F</small>\\n </div>\\n <div class=\\\"form-group checkbox-group\\\">\\n <label>\\n <input type=\\\"checkbox\\\" [(ngModel)]=\\\"workflowSettings().autoUpdateConsumingWorkflows\\\" />\\n <span>\\u0628\\u0647\\u200C\\u0631\\u0648\\u0632\\u0631\\u0633\\u0627\\u0646\\u06CC \\u062E\\u0648\\u062F\\u06A9\\u0627\\u0631 workflows \\u0645\\u0635\\u0631\\u0641\\u200C\\u06A9\\u0646\\u0646\\u062F\\u0647</span>\\n </label>\\n <small>workflow \\u0647\\u0627\\u06CC\\u06CC \\u06A9\\u0647 \\u0627\\u0632 \\u0627\\u06CC\\u0646 workflow \\u0627\\u0633\\u062A\\u0641\\u0627\\u062F\\u0647 \\u0645\\u06CC\\u200C\\u06A9\\u0646\\u0646\\u062F \\u0628\\u0647 \\u0635\\u0648\\u0631\\u062A \\u062E\\u0648\\u062F\\u06A9\\u0627\\u0631 \\u0628\\u0647\\u200C\\u0631\\u0648\\u0632 \\u0645\\u06CC\\u200C\\u0634\\u0648\\u0646\\u062F</small>\\n </div>\\n </div>\\n\\n <!-- Metadata -->\\n <div class=\\\"advanced-group\\\">\\n <h4>Metadata</h4>\\n <div class=\\\"form-row\\\">\\n <div class=\\\"form-group flex-1\\\">\\n <label>Tool Version</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"1.0.0\\\"\\n [(ngModel)]=\\\"workflowSettings().toolVersion\\\" />\\n <small>\\u0646\\u0633\\u062E\\u0647 \\u0627\\u0628\\u0632\\u0627\\u0631 \\u0633\\u0627\\u0632\\u0646\\u062F\\u0647</small>\\n </div>\\n <div class=\\\"form-group flex-1\\\">\\n <label>Provider Name</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"WorkflowStudio\\\"\\n [(ngModel)]=\\\"workflowSettings().providerName\\\" />\\n <small>\\u0646\\u0627\\u0645 \\u0627\\u0628\\u0632\\u0627\\u0631 \\u0633\\u0627\\u0632\\u0646\\u062F\\u0647</small>\\n </div>\\n </div>\\n </div>\\n\\n <!-- Outcomes -->\\n <div class=\\\"advanced-group\\\">\\n <h4>Workflow Outcomes</h4>\\n <div class=\\\"form-group\\\">\\n <label>Possible Outcomes</label>\\n <input type=\\\"text\\\" class=\\\"form-input\\\" placeholder=\\\"Done, Success, Failed (\\u062C\\u062F\\u0627 \\u0634\\u062F\\u0647 \\u0628\\u0627 \\u06A9\\u0627\\u0645\\u0627)\\\"\\n [value]=\\\"workflowSettings().outcomes.join(', ')\\\"\\n (input)=\\\"updateOutcomes($any($event.target).value)\\\" />\\n <small>\\u0646\\u062A\\u0627\\u06CC\\u062C \\u0645\\u0645\\u06A9\\u0646 \\u06A9\\u0647 \\u0627\\u06CC\\u0646 workflow \\u0645\\u06CC\\u200C\\u062A\\u0648\\u0627\\u0646\\u062F \\u0628\\u0631\\u06AF\\u0631\\u062F\\u0627\\u0646\\u062F (\\u0645\\u062B\\u0644\\u0627\\u064B: Done, Success, Failed)</small>\\n </div>\\n <div class=\\\"outcomes-preview\\\">\\n @for (outcome of workflowSettings().outcomes; track outcome) {\\n <span class=\\\"outcome-chip\\\">{{ outcome }}</span>\\n }\\n </div>\\n </div>\\n\\n <!-- Export Preview -->\\n <div class=\\\"advanced-group\\\">\\n <h4>\\u062E\\u0631\\u0648\\u062C\\u06CC \\u0646\\u0647\\u0627\\u06CC\\u06CC (WorkflowDefinition)</h4>\\n <small>\\u0627\\u06CC\\u0646 \\u0633\\u0627\\u062E\\u062A\\u0627\\u0631 \\u062F\\u0642\\u06CC\\u0642\\u0627\\u064B \\u0645\\u0637\\u0627\\u0628\\u0642 \\u0628\\u0627 WorkflowDefinition \\u0627\\u0633\\u062A \\u0648 \\u062F\\u0631 \\u062F\\u06CC\\u062A\\u0627\\u0628\\u06CC\\u0633 \\u0630\\u062E\\u06CC\\u0631\\u0647 \\u0645\\u06CC\\u200C\\u0634\\u0648\\u062F</small>\\n <div class=\\\"export-info\\\">\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Definition ID:</span>\\n <code>{{ workflowSettings().definitionId || '(\\u062E\\u0627\\u0644\\u06CC)' }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Name:</span>\\n <code>{{ workflowSettings().name || '(\\u062E\\u0627\\u0644\\u06CC)' }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Version:</span>\\n <code>v{{ workflowSettings().version }}</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Inputs:</span>\\n <code>{{ workflowSettings().inputs.length }} items</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Outputs:</span>\\n <code>{{ workflowSettings().outputs.length }} items</code>\\n </div>\\n <div class=\\\"info-row\\\">\\n <span class=\\\"label\\\">Variables:</span>\\n <code>{{ workflowSettings().variables.length }} items</code>\\n </div>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </div>\\n\\n <!-- Modal Footer -->\\n <div class=\\\"settings-modal-footer\\\">\\n <ax-button [text]=\\\"'@workflow-management:workflow-studio.settings.actions.cancel' | translate | async\\\" color=\\\"secondary\\\" size=\\\"md\\\" (onClick)=\\\"closeWorkflowSettings()\\\"> </ax-button>\\n <ax-button [text]=\\\"'@workflow-management:workflow-studio.settings.actions.save' | translate | async\\\" color=\\\"primary\\\" size=\\\"md\\\" (onClick)=\\\"saveWorkflowSettings()\\\"> </ax-button>\\n </div>\\n </div>\\n </div>\\n }\\n\\n <!-- Workflow Execution Dialog -->\\n @if (showExecutionDialog()) {\\n <div class=\\\"execution-dialog-overlay\\\" (click)=\\\"closeExecutionDialog()\\\">\\n <div class=\\\"execution-dialog\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Dialog Header -->\\n <div class=\\\"execution-dialog-header\\\">\\n <div class=\\\"header-content\\\">\\n <i class=\\\"fa-light fa-play-circle\\\"></i>\\n <div class=\\\"header-info\\\">\\n <h2>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.title' | translate |\\n async }}</h2>\\n <p>{{ '@workflow-management:test-pages.workflow-studio.actions.execute-workflow.description' | translate\\n | async }}</p>\\n </div>\\n </div>\\n <button class=\\\"close-btn\\\" (click)=\\\"closeExecutionDialog()\\\" [disabled]=\\\"isExecuting()\\\">\\n <i class=\\\"fa-light fa-times\\\"></i>\\n </button>\\n </div>\\n\\n <!-- Dialog Body -->\\n <div class=\\\"execution-dialog-body\\\">\\n <!-- Workflow Info Panel (Before Execution) -->\\n @if (!workflowInstanceState()) {\\n <div class=\\\"workflow-info-panel\\\">\\n <div class=\\\"start-section\\\">\\n <div class=\\\"start-illustration\\\">\\n <i class=\\\"fa-light fa-rocket\\\"></i>\\n </div>\\n <h3>{{ '@workflow-management:test-pages.workflow-studio.messages.info.ready-to-execute' | translate |\\n async }}</h3>\\n <p>{{ '@workflow-management:test-pages.workflow-studio.messages.info.click-to-start' | translate | async\\n }}</p>\\n <ax-button\\n [text]=\\\"'@workflow-management:test-pages.workflow-studio.actions.start-execution.title' | translate | async\\\"\\n color=\\\"success\\\" size=\\\"lg\\\" (onClick)=\\\"startWorkflowExecution()\\\">\\n </ax-button>\\n </div>\\n </div>\\n }\\n\\n\\n <!-- Custom UI for Registration -->\\n @if (false) {\\n <div class=\\\"registration-ui\\\">\\n <div class=\\\"registration-card\\\">\\n <div class=\\\"registration-icon\\\">\\n <i class=\\\"fa-light fa-user-circle\\\"></i>\\n </div>\\n <h3>\\u0641\\u0631\\u0622\\u06CC\\u0646\\u062F \\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645</h3>\\n <p class=\\\"registration-desc\\\">\\n \\u0627\\u06CC\\u0646 \\u0641\\u0644\\u0648 \\u0634\\u0627\\u0645\\u0644 \\u0686\\u0646\\u062F \\u0645\\u0631\\u062D\\u0644\\u0647 \\u0627\\u0633\\u062A \\u06A9\\u0647 \\u062F\\u0627\\u062F\\u0647\\u200C\\u0647\\u0627\\u06CC \\u06A9\\u0627\\u0631\\u0628\\u0631 \\u0631\\u0627 \\u062C\\u0645\\u0639\\u200C\\u0622\\u0648\\u0631\\u06CC \\u06A9\\u0631\\u062F\\u0647 \\u0648 \\u062F\\u0631 \\u0646\\u0647\\u0627\\u06CC\\u062A \\u062D\\u0633\\u0627\\u0628 \\u06A9\\u0627\\u0631\\u0628\\u0631\\u06CC \\u0627\\u06CC\\u062C\\u0627\\u062F \\u0645\\u06CC\\u200C\\u06A9\\u0646\\u062F.\\n </p>\\n\\n @if (workflowInstanceState()?.status === 'running') {\\n <div class=\\\"registration-progress\\\">\\n <div class=\\\"progress-spinner\\\">\\n <i class=\\\"fa-light fa-spinner-third fa-spin\\\"></i>\\n </div>\\n <p>\\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627\\u06CC \\u0645\\u0631\\u0627\\u062D\\u0644 \\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645...</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'finished') {\\n <div class=\\\"registration-success\\\">\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n <h4>\\u062B\\u0628\\u062A\\u200C\\u0646\\u0627\\u0645 \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u0627\\u0646\\u062C\\u0627\\u0645 \\u0634\\u062F!</h4>\\n <p>\\u062D\\u0633\\u0627\\u0628 \\u06A9\\u0627\\u0631\\u0628\\u0631\\u06CC \\u0634\\u0645\\u0627 \\u0627\\u06CC\\u062C\\u0627\\u062F \\u0634\\u062F \\u0648 \\u0628\\u0647 \\u0632\\u0648\\u062F\\u06CC \\u0628\\u0647 \\u062F\\u0627\\u0634\\u0628\\u0648\\u0631\\u062F \\u0645\\u0646\\u062A\\u0642\\u0644 \\u062E\\u0648\\u0627\\u0647\\u06CC\\u062F \\u0634\\u062F.</p>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Default Execution View -->\\n @if (workflowInstanceState()) {\\n <div class=\\\"default-execution-view\\\">\\n <div class=\\\"execution-status\\\">\\n @if (workflowInstanceState()?.status === 'running') {\\n <div class=\\\"status-running\\\">\\n <i class=\\\"fa-light fa-spinner-third fa-spin\\\"></i>\\n <h3>\\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627...</h3>\\n <p>Workflow \\u062F\\u0631 \\u062D\\u0627\\u0644 \\u0627\\u062C\\u0631\\u0627 \\u0627\\u0633\\u062A. \\u0644\\u0637\\u0641\\u0627\\u064B \\u0635\\u0628\\u0631 \\u06A9\\u0646\\u06CC\\u062F.</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'finished') {\\n <div class=\\\"status-finished\\\">\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n <h3>\\u0627\\u062C\\u0631\\u0627 \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u062A\\u06A9\\u0645\\u06CC\\u0644 \\u0634\\u062F</h3>\\n <p>Workflow \\u0628\\u0627 \\u0645\\u0648\\u0641\\u0642\\u06CC\\u062A \\u0627\\u062C\\u0631\\u0627 \\u0634\\u062F \\u0648 \\u062A\\u0645\\u0627\\u0645 Activities \\u0627\\u0646\\u062C\\u0627\\u0645 \\u0634\\u062F\\u0646\\u062F.</p>\\n </div>\\n }\\n\\n @if (workflowInstanceState()?.status === 'error') {\\n <div class=\\\"status-error\\\">\\n <i class=\\\"fa-light fa-times-circle\\\"></i>\\n <h3>\\u062E\\u0637\\u0627 \\u062F\\u0631 \\u0627\\u062C\\u0631\\u0627</h3>\\n <p>{{ workflowInstanceState()?.error }}</p>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n\\n <!-- Execution Logs Panel -->\\n @if (workflowInstanceState() && executionLogs().length > 0) {\\n <div class=\\\"execution-logs-panel\\\">\\n <h3><i class=\\\"fa-light fa-terminal\\\"></i> \\u0644\\u0627\\u06AF\\u200C\\u0647\\u0627\\u06CC \\u0627\\u062C\\u0631\\u0627</h3>\\n <div class=\\\"logs-container-compact\\\">\\n @for (log of executionLogs(); track $index) {\\n <div class=\\\"log-item-compact\\\" [class]=\\\"'log-' + log.level\\\">\\n <span class=\\\"log-time\\\">{{ log.timestamp | date: 'HH:mm:ss' }}</span>\\n <span class=\\\"log-icon\\\">\\n @switch (log.level) {\\n @case ('info') {\\n <i class=\\\"fa-light fa-info-circle\\\"></i>\\n }\\n @case ('success') {\\n <i class=\\\"fa-light fa-check-circle\\\"></i>\\n }\\n @case ('warning') {\\n <i class=\\\"fa-light fa-exclamation-triangle\\\"></i>\\n }\\n @case ('error') {\\n <i class=\\\"fa-light fa-times-circle\\\"></i>\\n }\\n }\\n </span>\\n <span class=\\\"log-message\\\">{{ log.message }}</span>\\n </div>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n\\n <!-- Dialog Footer -->\\n <div class=\\\"execution-dialog-footer\\\">\\n <div class=\\\"footer-info\\\">\\n @if (workflowInstanceState()?.startTime) {\\n <span class=\\\"time-info\\\">\\n <i class=\\\"fa-light fa-clock\\\"></i>\\n \\u0634\\u0631\\u0648\\u0639: {{ workflowInstanceState()!.startTime | date: 'HH:mm:ss' }}\\n </span>\\n }\\n @if (workflowInstanceState()?.endTime) {\\n <span class=\\\"time-info\\\">\\n <i class=\\\"fa-light fa-flag-checkered\\\"></i>\\n \\u067E\\u0627\\u06CC\\u0627\\u0646: {{ workflowInstanceState()!.endTime | date: 'HH:mm:ss' }}\\n </span>\\n }\\n </div>\\n <div class=\\\"footer-actions\\\">\\n <ax-button\\n [text]=\\\"(workflowInstanceState() ? '@general:actions.close.title' : '@general:actions.cancel.title') | translate | async\\\"\\n color=\\\"secondary\\\" size=\\\"md\\\" [disabled]=\\\"isExecuting()\\\" (onClick)=\\\"closeExecutionDialog()\\\">\\n </ax-button>\\n </div>\\n </div>\\n </div>\\n </div>\\n }\\n </div>\\n </axp-page-content>\\n</axp-page-layout>\", styles: [\".sidebar-header .toggle-btn{padding:.5rem;margin-left:auto;background:transparent;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;cursor:pointer;transition:all .2s}.sidebar-header .toggle-btn:hover{background:#f8fafc;border-color:#8b5cf6;color:#8b5cf6}.sidebar-header .toggle-btn i{font-size:.875rem}.sidebar-toggle-btn{position:absolute;top:50%;transform:translateY(-50%);z-index:100;padding:1rem .5rem;background:#fff;border:1px solid #e2e8f0;border-radius:8px;color:#8b5cf6;cursor:pointer;box-shadow:0 4px 12px #0000001a;transition:all .3s}.sidebar-toggle-btn:hover{background:#8b5cf6;color:#fff;box-shadow:0 8px 24px #8b5cf64d;transform:translateY(-50%) scale(1.1)}.sidebar-toggle-btn.left{left:0;border-left:none;border-radius:0 8px 8px 0}.sidebar-toggle-btn.right{right:0;border-right:none;border-radius:8px 0 0 8px}.sidebar-toggle-btn i{font-size:1.25rem;display:block}.properties-header .header-actions{display:flex;gap:.5rem;margin-left:auto}.properties-header .header-btn{padding:.375rem .5rem;background:transparent;border:1px solid #e2e8f0;border-radius:4px;color:#64748b;cursor:pointer;transition:all .2s}.properties-header .header-btn:hover{background:#f8fafc;border-color:#8b5cf6;color:#8b5cf6}.properties-header .header-btn i{font-size:.75rem}.connections-list{margin-top:.75rem}.connection-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;margin-bottom:.5rem;font-size:.875rem}.connection-item i{color:#8b5cf6}.connection-item span{flex:1;color:#1e293b}.connection-item .remove-btn{padding:.25rem .375rem;background:transparent;border:1px solid #e2e8f0;border-radius:4px;color:#ef4444;cursor:pointer;transition:all .2s}.connection-item .remove-btn:hover{background:#fef2f2;border-color:#ef4444}.connection-item .remove-btn i{font-size:.75rem;color:inherit}.property-editor{margin-top:.75rem}.property-editor .property-row label{display:flex;align-items:center;gap:.5rem;justify-content:space-between}.property-editor .property-row label .property-type-badge{padding:.125rem .375rem;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;font-size:.625rem;font-weight:400;color:#64748b;text-transform:lowercase;font-family:JetBrains Mono,monospace}.property-editor .property-row select{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;background:#fff;cursor:pointer;transition:all .2s}.property-editor .property-row select:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.property-editor .property-row textarea{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.75rem;font-family:JetBrains Mono,monospace;color:#1e293b;resize:vertical;transition:all .2s}.property-editor .property-row textarea:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.workflow-studio{display:flex;flex-direction:column;height:100vh;background:#f8fafc;overflow:hidden}.workflow-popup .popup-header{text-align:center;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:2px solid #e2e8f0}.workflow-popup .popup-header h3{margin:0 0 .5rem;color:#1e293b;font-size:1.5rem;font-weight:700}.workflow-popup .popup-header p{margin:0;color:#64748b;font-size:.95rem}.workflow-popup .popup-body{max-height:60vh;overflow-y:auto;padding:0 .5rem}.workflow-popup .popup-body h4{margin:1.5rem 0 .75rem;color:#374151;font-size:1.1rem;font-weight:600;display:flex;align-items:center;gap:.5rem}.workflow-popup .popup-body ul{margin:0;padding-left:1.5rem}.workflow-popup .popup-body ul li{margin-bottom:.5rem;color:#4b5563}.workflow-popup .popup-body ul li strong{color:#1f2937}.workflow-popup .workflow-info{background:#f8fafc;padding:1rem;border-radius:8px;border:1px solid #e2e8f0}.workflow-popup .workflow-variables{background:#fef3c7;padding:1rem;border-radius:8px;border:1px solid #f59e0b}.workflow-popup .workflow-flow{background:#ecfdf5;padding:1rem;border-radius:8px;border:1px solid #10b981}.workflow-popup .workflow-flow .flow-steps{display:flex;flex-direction:column;gap:.75rem}.workflow-popup .workflow-flow .flow-steps .flow-step{display:flex;align-items:center;gap:.75rem;padding:.5rem;background:#fff;border-radius:6px;border:1px solid #d1d5db}.workflow-popup .workflow-flow .flow-steps .flow-step .step-number{display:flex;align-items:center;justify-content:center;width:24px;height:24px;background:#3b82f6;color:#fff;border-radius:50%;font-size:.8rem;font-weight:600}.workflow-popup .workflow-flow .flow-steps .flow-step .step-text{color:#374151;font-weight:500}.workflow-popup .workflow-json{background:#1f2937;padding:1rem;border-radius:8px;border:1px solid #374151}.workflow-popup .workflow-json .json-preview{background:transparent;color:#e5e7eb;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.8rem;line-height:1.4;margin:0;white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto}.workflow-popup .popup-footer{text-align:center;margin-top:1.5rem;padding-top:1rem;border-top:1px solid #e2e8f0}.workflow-popup .popup-footer .btn{padding:.75rem 1.5rem;background:#3b82f6;color:#fff;border:none;border-radius:6px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:.5rem;transition:background-color .2s}.workflow-popup .popup-footer .btn:hover{background:#2563eb}.workflow-popup .popup-footer .btn i{font-size:.9rem}.view-workflow-link{color:#3b82f6;text-decoration:none;font-size:.85rem;margin-left:.5rem;transition:color .2s}.view-workflow-link:hover{color:#1d4ed8;text-decoration:underline}.studio-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:#fff;border-bottom:1px solid #e2e8f0;box-shadow:0 1px 3px #0000000d}.studio-header .header-title{display:flex;align-items:center;gap:.75rem}.studio-header .header-title i{font-size:1.75rem;color:#8b5cf6}.studio-header .header-title h1{margin:0;font-size:1.5rem;font-weight:700;color:#1e293b}.studio-header .header-title .badge{padding:.25rem .75rem;background:#8b5cf6;color:#fff;border-radius:12px;font-size:.75rem;font-weight:600}.studio-header .header-actions{display:flex;gap:.75rem;align-items:center}.samples-dropdown{position:relative}.samples-dropdown .samples-menu{position:absolute;top:calc(100% + .5rem);left:0;min-width:320px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 10px 25px #0000001a;z-index:1000;max-height:400px;overflow-y:auto}.samples-dropdown .samples-menu .sample-item{padding:.875rem 1rem;display:flex;align-items:flex-start;gap:.75rem;cursor:pointer;border-bottom:1px solid #f1f5f9;transition:all .2s}.samples-dropdown .samples-menu .sample-item:last-child{border-bottom:none}.samples-dropdown .samples-menu .sample-item:hover{background:#f8fafc;transform:translate(4px)}.samples-dropdown .samples-menu .sample-item i{font-size:1.25rem;margin-top:.125rem;color:#8b5cf6}.samples-dropdown .samples-menu .sample-item .sample-info{display:flex;flex-direction:column;gap:.25rem;flex:1}.samples-dropdown .samples-menu .sample-item .sample-info strong{color:#1e293b;font-size:.875rem;font-weight:600}.samples-dropdown .samples-menu .sample-item .sample-info span{color:#64748b;font-size:.75rem;line-height:1.4}.studio-body{display:grid;grid-template-columns:1fr;gap:0;flex:1;overflow:hidden;transition:grid-template-columns .3s ease}.studio-body.sidebar-hidden,.studio-body.properties-hidden,.studio-body.sidebar-hidden.properties-hidden{grid-template-columns:1fr}.studio-sidebar{background:#fff;border-right:1px solid #e2e8f0;display:flex;flex-direction:column;overflow:hidden}.studio-sidebar .sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:.5rem}.studio-sidebar .sidebar-header i{font-size:1.25rem;color:#8b5cf6}.studio-sidebar .sidebar-header h3{flex:1;margin:0;font-size:1.125rem;font-weight:600;color:#1e293b}.activities-tree{flex:1;overflow-y:auto;padding:.5rem}.category-section{margin-bottom:.5rem}.category-section .category-header{display:flex;align-items:center;gap:.5rem;padding:.75rem;border-radius:8px;cursor:pointer;transition:all .2s;background:#f8fafc}.category-section .category-header:hover{background:#f1f5f9}.category-section .category-header.active{background:#ede9fe}.category-section .category-header.active>i:first-child{color:#8b5cf6}.category-section .category-header>i:first-child{font-size:.875rem;color:#94a3b8;transition:transform .2s,color .2s}.category-section .category-header>i:nth-child(2){font-size:1.125rem}.category-section .category-header span{flex:1;font-weight:600;font-size:.875rem;color:#334155}.category-section .category-header .count{flex:none;padding:.125rem .5rem;background:#fff;border-radius:10px;font-size:.75rem;font-weight:600;color:#64748b;border:1px solid #e2e8f0}.activities-list{padding:.5rem 0 .5rem 1.5rem;display:flex;flex-direction:column;gap:.5rem;animation:slideDown .3s ease}.activities-list .activities-header{padding:.5rem .75rem;margin-bottom:.5rem}.activities-list .activities-header h4{margin:0;font-size:.875rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.activity-card{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:.875rem;margin-bottom:.75rem;transition:all .2s}.activity-card:hover{border-color:#8b5cf6;box-shadow:0 4px 12px #8b5cf61a;transform:translateY(-1px)}.activity-card .activity-info{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:.5rem}.activity-card .activity-info>i{font-size:1.5rem;color:#8b5cf6;margin-top:.125rem}.activity-card .activity-info .activity-details{flex:1;display:flex;flex-direction:column;gap:.25rem}.activity-card .activity-info .activity-details strong{font-size:.875rem;color:#1e293b}.activity-card .activity-info .activity-details small{font-size:.75rem;color:#64748b;line-height:1.4}.activity-card .activity-info .activity-details code{font-size:.75rem;color:#8b5cf6;background:#f3f0ff;padding:.125rem .375rem;border-radius:4px;width:fit-content}.activity-card .copy-btn{float:right;padding:.375rem .75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s;color:#64748b}.activity-card .copy-btn:hover{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.activity-card .copy-btn i{font-size:.875rem}.activity-card .activity-properties{margin-top:.75rem;padding-top:.75rem;border-top:1px solid #f1f5f9}.activity-card .activity-properties .properties-title{display:block;font-size:.75rem;font-weight:600;color:#64748b;margin-bottom:.5rem}.activity-card .activity-properties .property-item{display:flex;align-items:center;gap:.5rem;padding:.25rem 0;font-size:.75rem}.activity-card .activity-properties .property-item code{color:#1e293b;background:#f8fafc;padding:.125rem .375rem;border-radius:3px}.activity-card .activity-properties .property-item .property-type{color:#64748b;font-style:italic}.activity-card .activity-properties .property-item .required{color:#ef4444;font-weight:700}.studio-editor{display:flex;flex-direction:column;background:#1e293b;overflow:hidden}.studio-editor .editor-header{padding:1rem 1.25rem;background:#0f172a;display:flex;align-items:center;gap:.5rem}.studio-editor .editor-header i{font-size:1.125rem;color:#8b5cf6}.studio-editor .editor-header h3{margin:0;font-size:1rem;font-weight:600;color:#e2e8f0}.studio-editor axp-page-toolbar .editor-tabs{display:flex;gap:.5rem;background:transparent}.studio-editor axp-page-toolbar .editor-tabs .tab-btn{padding:.5rem 1rem;background:transparent;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:.5rem}.studio-editor axp-page-toolbar .editor-tabs .tab-btn i{font-size:.875rem}.studio-editor axp-page-toolbar .editor-tabs .tab-btn:hover{background:#f8fafc;border-color:#cbd5e1;color:#475569}.studio-editor axp-page-toolbar .editor-tabs .tab-btn.active{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.studio-editor .editor-content{flex:1;display:flex;overflow:hidden}.studio-editor .json-tab{flex:1;display:flex;flex-direction:column}.studio-editor .json-editor{flex:1;padding:1.5rem;background:#1e293b;color:#e2e8f0;border:none;outline:none;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.875rem;line-height:1.6;resize:none;overflow:auto}.studio-editor .json-editor::placeholder{color:#475569}.studio-editor .json-editor::-webkit-scrollbar{width:10px;height:10px}.studio-editor .json-editor::-webkit-scrollbar-track{background:#0f172a}.studio-editor .json-editor::-webkit-scrollbar-thumb{background:#475569;border-radius:5px}.studio-editor .json-editor::-webkit-scrollbar-thumb:hover{background:#64748b}.studio-editor .visual-tab{flex:1;display:flex;background:#f8fafc;position:relative}.studio-editor .visual-canvas{flex:1;display:flex;flex-direction:column;overflow:hidden}.studio-editor .visual-canvas .canvas-toolbar{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:#fff;border-bottom:1px solid #e2e8f0}.studio-editor .visual-canvas .canvas-toolbar .tool-btn{padding:.5rem .75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;color:#64748b;cursor:pointer;transition:all .2s}.studio-editor .visual-canvas .canvas-toolbar .tool-btn:hover{background:#8b5cf6;border-color:#8b5cf6;color:#fff}.studio-editor .visual-canvas .canvas-toolbar .tool-btn i{font-size:.875rem}.studio-editor .visual-canvas .canvas-toolbar .tool-info{flex:1;display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:#64748b}.studio-editor .visual-canvas .canvas-toolbar .tool-info i{font-size:1rem;color:#8b5cf6}.studio-editor .visual-canvas .canvas-area{flex:1;position:relative;background:linear-gradient(90deg,#e5e7eb 1px,transparent 1px),linear-gradient(#e5e7eb 1px,transparent 1px);background-size:20px 20px;overflow:auto;min-height:600px}.studio-editor .visual-canvas .connections-layer{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1}.studio-editor .visual-canvas .connection-line{stroke:#64748b;stroke-width:2;fill:none;opacity:.6;cursor:pointer;pointer-events:stroke;transition:all .2s}.studio-editor .visual-canvas .connection-line:hover{stroke:#ef4444;stroke-width:3;opacity:1}.studio-editor .visual-canvas .visual-node{position:absolute;width:150px;background:#fff;border:2px solid #e2e8f0;border-radius:8px;box-shadow:0 2px 8px #0000001a;cursor:move;transition:all .2s;z-index:2}.studio-editor .visual-canvas .visual-node:hover{border-color:#8b5cf6;box-shadow:0 4px 16px #8b5cf633;transform:translateY(-2px)}.studio-editor .visual-canvas .visual-node.selected{border-color:#8b5cf6;border-width:3px;box-shadow:0 0 0 3px #8b5cf633}.studio-editor .visual-canvas .visual-node .node-header{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:linear-gradient(135deg,#8b5cf6,#7c3aed);color:#fff;border-radius:6px 6px 0 0;font-size:.875rem;font-weight:600}.studio-editor .visual-canvas .visual-node .node-header i{font-size:1rem}.studio-editor .visual-canvas .visual-node .node-header span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.studio-editor .visual-canvas .visual-node .node-header .node-delete{padding:.25rem;background:#fff3;border:none;border-radius:4px;color:#fff;cursor:pointer;transition:all .2s}.studio-editor .visual-canvas .visual-node .node-header .node-delete:hover{background:#ef4444cc}.studio-editor .visual-canvas .visual-node .node-header .node-delete i{font-size:.75rem}.studio-editor .visual-canvas .visual-node .node-body{padding:.75rem}.studio-editor .visual-canvas .visual-node .node-body small{display:block;font-size:.75rem;color:#64748b;text-align:center}.studio-editor .visual-canvas .visual-node .node-connectors{position:relative}.studio-editor .visual-canvas .visual-node .node-connectors .connector{position:absolute;width:12px;height:12px;background:#8b5cf6;border:2px solid white;border-radius:50%;cursor:pointer;transition:all .2s;z-index:10}.studio-editor .visual-canvas .visual-node .node-connectors .connector:hover{transform:scale(1.3);box-shadow:0 0 0 3px #8b5cf64d}.studio-editor .visual-canvas .visual-node .node-connectors .connector-in{top:-50px;left:50%;transform:translate(-50%);background:#3b82f6}.studio-editor .visual-canvas .visual-node .node-connectors .connector-out{bottom:-6px;left:50%;transform:translate(-50%);background:#8b5cf6}.studio-editor .visual-canvas .visual-node .node-connectors .connector-out.active{background:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcomes-container{position:absolute;bottom:-60px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:8px;background:#fff;padding:8px;border:1px solid #e2e8f0;border-radius:8px;box-shadow:0 4px 12px #00000026;min-width:120px;z-index:100}.studio-editor .visual-canvas .visual-node .node-connectors .outcomes-container:before{content:\\\"\\\";position:absolute;top:-8px;left:50%;transform:translate(-50%);width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid white;filter:drop-shadow(0 -2px 2px rgba(0,0,0,.05))}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s;position:relative}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector:hover{background:#f1f5f9;border-color:#8b5cf6;transform:translate(2px)}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector.active{background:#fef2f2;border-color:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector.active .outcome-dot{background:#ef4444;box-shadow:0 0 0 3px #ef444433}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector .outcome-label{font-size:.75rem;font-weight:600;color:#475569;-webkit-user-select:none;user-select:none;flex:1}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector .outcome-dot{width:10px;height:10px;background:#8b5cf6;border:2px solid white;border-radius:50%;transition:all .2s;flex-shrink:0}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=\\\"200\\\"] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Done] .outcome-dot{background:#10b981}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=\\\"404\\\"] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Failed] .outcome-dot{background:#ef4444}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Timeout] .outcome-dot,.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Cancelled] .outcome-dot{background:#f59e0b}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Then] .outcome-dot{background:#3b82f6}.studio-editor .visual-canvas .visual-node .node-connectors .outcome-connector[data-outcome=Else] .outcome-dot{background:#64748b}.studio-editor .visual-canvas .canvas-empty-state{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:#94a3b8;pointer-events:none}.studio-editor .visual-canvas .canvas-empty-state i{font-size:4rem;margin-bottom:1rem;opacity:.5}.studio-editor .visual-canvas .canvas-empty-state p{margin:0 0 .5rem;font-size:1rem;font-weight:500}.studio-editor .visual-canvas .canvas-empty-state small{font-size:.875rem;opacity:.8}.studio-editor .properties-panel{width:280px;background:#fff;border-left:1px solid #e2e8f0;display:flex;flex-direction:column}.studio-editor .properties-panel .properties-header{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid #e2e8f0}.studio-editor .properties-panel .properties-header i{font-size:1.125rem;color:#8b5cf6}.studio-editor .properties-panel .properties-header h4{flex:1;margin:0;font-size:.875rem;font-weight:600;color:#1e293b}.studio-editor .properties-panel .properties-header button{padding:.25rem .5rem;background:transparent;border:none;color:#64748b;cursor:pointer;transition:color .2s}.studio-editor .properties-panel .properties-header button:hover{color:#ef4444}.studio-editor .properties-panel .properties-body{flex:1;padding:1rem;overflow-y:auto}.studio-editor .properties-panel .properties-body .property-row{margin-bottom:1rem}.studio-editor .properties-panel .properties-body .property-row label{display:block;font-size:.75rem;font-weight:600;color:#64748b;margin-bottom:.375rem;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .property-row input{width:100%;padding:.5rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;transition:all .2s}.studio-editor .properties-panel .properties-body .property-row input:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.studio-editor .properties-panel .properties-body .property-row input:disabled{background:#f8fafc;color:#94a3b8;cursor:not-allowed}.studio-editor .properties-panel .properties-body .properties-divider{height:1px;background:#e2e8f0;margin:1.5rem 0}.studio-editor .properties-panel .properties-body h5{margin:0 0 .5rem;font-size:.75rem;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .properties-hint{display:block;font-size:.75rem;color:#94a3b8;margin-bottom:.75rem}.studio-editor .properties-panel .properties-body .properties-json{margin:.75rem 0 0;padding:.75rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;color:#1e293b;overflow-x:auto}.studio-editor .properties-panel .properties-body .no-properties{margin:.75rem 0 0;padding:1rem;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:6px;text-align:center;font-size:.75rem;color:#94a3b8}.studio-editor .properties-panel .properties-body .connections-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.75rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;font-size:.75rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item.outcome-connection{border-left-width:3px}.studio-editor .properties-panel .properties-body .connections-list .connection-item i{color:#64748b;font-size:.875rem}.studio-editor .properties-panel .properties-body .connections-list .connection-item span{flex:1;color:#1e293b;font-weight:500}.studio-editor .properties-panel .properties-body .connections-list .connection-item .outcome-badge{padding:.25rem .5rem;border-radius:4px;color:#fff;font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn{padding:.25rem;background:transparent;border:none;color:#ef4444;cursor:pointer;border-radius:4px;transition:all .2s}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn:hover{background:#fee2e2}.studio-editor .properties-panel .properties-body .connections-list .connection-item .remove-btn i{font-size:.75rem;color:inherit}.studio-editor .properties-panel .properties-body .outcomes-info{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .625rem;background:#fff;border:2px solid;border-radius:6px;font-size:.75rem;font-weight:600;color:#1e293b;transition:all .2s}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag:hover{transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.studio-editor .properties-panel .properties-body .outcomes-info .outcome-tag .outcome-dot{width:8px;height:8px;border-radius:50%}.studio-result{display:flex;flex-direction:column;background:#fff;border-left:1px solid #e2e8f0;overflow:hidden}.studio-result .result-header{padding:1rem 1.25rem;border-bottom:1px solid #e2e8f0;display:flex;align-items:center;gap:.5rem}.studio-result .result-header i{font-size:1.125rem;color:#10b981}.studio-result .result-header h3{flex:1;margin:0;font-size:1rem;font-weight:600;color:#1e293b}.studio-result .result-header .clear-btn{padding:.375rem .75rem;background:#fee2e2;color:#dc2626;border:none;border-radius:6px;cursor:pointer;font-size:.75rem;font-weight:500;transition:all .2s}.studio-result .result-header .clear-btn:hover{background:#fecaca}.studio-result .result-header .clear-btn i{font-size:.75rem;color:inherit}.studio-result .result-body{flex:1;overflow-y:auto;padding:1rem}.logs-container{display:flex;flex-direction:column;gap:.5rem}.log-item{display:flex;align-items:flex-start;gap:.5rem;padding:.75rem;background:#f8fafc;border-left:3px solid #cbd5e1;border-radius:6px;font-size:.875rem}.log-item.log-info{border-left-color:#3b82f6;background:#eff6ff}.log-item.log-info .log-icon{color:#3b82f6}.log-item.log-success{border-left-color:#10b981;background:#f0fdf4}.log-item.log-success .log-icon{color:#10b981}.log-item.log-warning{border-left-color:#f59e0b;background:#fffbeb}.log-item.log-warning .log-icon{color:#f59e0b}.log-item.log-error{border-left-color:#ef4444;background:#fef2f2}.log-item.log-error .log-icon{color:#ef4444}.log-item .log-time{font-family:JetBrains Mono,monospace;font-size:.75rem;color:#64748b;min-width:80px}.log-item .log-icon{font-size:1rem}.log-item .log-message{flex:1;color:#1e293b}.log-item .log-data-toggle{padding:.25rem .5rem;background:transparent;border:1px solid #cbd5e1;border-radius:4px;cursor:pointer;transition:all .2s}.log-item .log-data-toggle:hover{background:#fff}.log-item .log-data-toggle i{font-size:.75rem;color:#64748b}.log-data{margin:.5rem 0 0;padding:1rem;background:#0f172a;color:#e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;overflow-x:auto}.settings-modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:9999;padding:2rem;animation:fadeIn .2s ease}.settings-modal{background:#fff;border-radius:12px;box-shadow:0 20px 60px #0000004d;width:100%;max-width:900px;max-height:90vh;display:flex;flex-direction:column;animation:slideUp .3s ease}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.settings-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.5rem 2rem;border-bottom:1px solid #e2e8f0}.settings-modal-header .header-title{display:flex;align-items:center;gap:.75rem}.settings-modal-header .header-title i{font-size:1.5rem;color:#8b5cf6}.settings-modal-header .header-title h2{margin:0;font-size:1.25rem;font-weight:700;color:#1e293b}.settings-modal-header .close-btn{padding:.5rem;background:transparent;border:none;color:#64748b;cursor:pointer;border-radius:6px;transition:all .2s}.settings-modal-header .close-btn:hover{background:#f1f5f9;color:#ef4444}.settings-modal-header .close-btn i{font-size:1.25rem}.settings-modal-body{flex:1;display:flex;flex-direction:column;overflow:hidden}.settings-tabs{display:flex;gap:.5rem;padding:1rem 2rem 0;border-bottom:1px solid #e2e8f0}.settings-tabs .tab-btn{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.25rem;background:transparent;border:none;border-bottom:2px solid transparent;color:#64748b;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;position:relative}.settings-tabs .tab-btn:hover{color:#8b5cf6;background:#f8fafc}.settings-tabs .tab-btn.active{color:#8b5cf6;border-bottom-color:#8b5cf6}.settings-tabs .tab-btn i{font-size:1rem}.settings-tabs .tab-btn .badge{padding:.125rem .5rem;background:#8b5cf6;color:#fff;border-radius:10px;font-size:.7rem;font-weight:600}.settings-content{flex:1;overflow-y:auto;padding:2rem}.settings-section h3{margin:0 0 1.5rem;font-size:1rem;font-weight:600;color:#1e293b}.settings-section .section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.5rem}.settings-section .section-header h3{margin:0}.settings-section .section-header .add-btn{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:#8b5cf6;color:#fff;border:none;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.settings-section .section-header .add-btn:hover{background:#7c3aed;transform:translateY(-1px);box-shadow:0 4px 12px #8b5cf64d}.settings-section .section-header .add-btn i{font-size:.875rem}.form-group{margin-bottom:1.25rem}.form-group label{display:block;font-size:.875rem;font-weight:600;color:#475569;margin-bottom:.5rem}.form-group small{display:block;font-size:.75rem;color:#94a3b8;margin-top:.375rem}.form-group.checkbox-group{margin-bottom:0}.form-group.checkbox-group label{display:flex;align-items:center;gap:.5rem;cursor:pointer;margin-bottom:0}.form-group.checkbox-group label input[type=checkbox]{width:18px;height:18px;cursor:pointer}.form-group.checkbox-group label span{font-size:.875rem;font-weight:500}.form-group.flex-1{flex:1}.form-row{display:flex;gap:1rem;align-items:flex-start}.form-input,.form-select,.form-textarea{width:100%;padding:.625rem;border:1px solid #e2e8f0;border-radius:6px;font-size:.875rem;color:#1e293b;transition:all .2s}.form-input:focus,.form-select:focus,.form-textarea:focus{outline:none;border-color:#8b5cf6;box-shadow:0 0 0 3px #8b5cf61a}.form-input::placeholder,.form-select::placeholder,.form-textarea::placeholder{color:#cbd5e1}.form-textarea{resize:vertical;font-family:inherit}.items-list{display:flex;flex-direction:column;gap:1rem}.item-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden;transition:all .2s}.item-card:hover{border-color:#cbd5e1;box-shadow:0 2px 8px #0000000d}.item-card .item-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:#f1f5f9;border-bottom:1px solid #e2e8f0}.item-card .item-header .item-number{font-size:.75rem;font-weight:700;color:#8b5cf6;padding:.25rem .5rem;background:#fff;border-radius:4px}.item-card .item-header .remove-btn{padding:.375rem .625rem;background:transparent;border:none;color:#ef4444;cursor:pointer;border-radius:4px;transition:all .2s}.item-card .item-header .remove-btn:hover{background:#fee2e2}.item-card .item-header .remove-btn i{font-size:.875rem}.item-card .item-body{padding:1rem}.advanced-group{margin-bottom:2rem;padding-bottom:2rem;border-bottom:1px solid #e2e8f0}.advanced-group:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.advanced-group h4{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.5px}.outcomes-preview{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}.outcomes-preview .outcome-chip{display:inline-flex;align-items:center;padding:.375rem .75rem;background:#f1f5f9;border:1px solid #cbd5e1;border-radius:6px;font-size:.75rem;font-weight:600;color:#475569}.export-info{margin-top:1rem;padding:1rem;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px}.export-info .info-row{display:flex;align-items:center;gap:.75rem;padding:.5rem 0;border-bottom:1px solid #e2e8f0}.export-info .info-row:last-child{border-bottom:none;padding-bottom:0}.export-info .info-row .label{font-size:.75rem;font-weight:600;color:#64748b;min-width:120px}.export-info .info-row code{flex:1;padding:.25rem .5rem;background:#fff;border:1px solid #e2e8f0;border-radius:4px;font-size:.75rem;color:#1e293b;font-family:JetBrains Mono,monospace}.settings-modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:1rem;padding:1.5rem 2rem;border-top:1px solid #e2e8f0;background:#f8fafc}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 1rem;text-align:center;color:#94a3b8}.empty-state i{font-size:3rem;margin-bottom:1rem}.empty-state p{margin:0;font-size:.875rem}.final-result{margin-top:1.5rem;padding-top:1.5rem;border-top:2px solid #e2e8f0}.final-result .result-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem;background:#f8fafc;border-radius:8px;margin-bottom:1rem;cursor:pointer;transition:all .2s}.final-result .result-header:hover{background:#f1f5f9;transform:translate(-2px)}.final-result .result-header h4{display:flex;align-items:center;gap:.5rem;margin:0;font-size:.875rem;font-weight:600;color:#475569;text-transform:uppercase}.final-result .result-header h4 i{font-size:.875rem;transition:transform .2s}.final-result .result-header .toggle-hint{font-size:.75rem;color:#94a3b8}.final-result .result-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:1rem}.final-result .result-card .result-row{display:flex;align-items:center;gap:.75rem;padding:.5rem 0}.final-result .result-card .result-row:not(:last-child){border-bottom:1px solid #e2e8f0}.final-result .result-card .result-row strong{font-size:.875rem;color:#475569;min-width:100px}.final-result .result-card .result-row .badge{padding:.25rem .75rem;border-radius:12px;font-size:.75rem;font-weight:600}.final-result .result-card .result-row .badge.badge-running{background:#dbeafe;color:#1e40af}.final-result .result-card .result-row .badge.badge-finished{background:#d1fae5;color:#065f46}.final-result .result-card .result-row .badge.badge-cancelled{background:#fed7aa;color:#92400e}.final-result .result-card .result-row .badge.badge-faulted{background:#fee2e2;color:#991b1b}.final-result .result-card .result-row pre{margin:.5rem 0 0;padding:.75rem;background:#0f172a;color:#e2e8f0;border-radius:6px;font-family:JetBrains Mono,monospace;font-size:.75rem;line-height:1.6;overflow-x:auto;width:100%}.activities-list::-webkit-scrollbar,.result-body::-webkit-scrollbar{width:8px}.activities-list::-webkit-scrollbar-track,.result-body::-webkit-scrollbar-track{background:#f1f5f9}.activities-list::-webkit-scrollbar-thumb,.result-body::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}.activities-list::-webkit-scrollbar-thumb:hover,.result-body::-webkit-scrollbar-thumb:hover{background:#94a3b8}.activity-card{cursor:grab}.activity-card:active{cursor:grabbing}.activity-card[draggable=true]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.visual-node[draggable=true]{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.visual-node:active{cursor:grabbing}.canvas-area[data-drag-over=true]{background-color:#8b5cf60d}.connector:hover{transform:scale(1.3);box-shadow:0 0 0 3px #8b5cf64d}.connector-out.active{animation:pulse 1s infinite}@keyframes pulse{0%,to{box-shadow:0 0 0 3px #ef44444d}50%{box-shadow:0 0 0 6px #ef44441a}}@keyframes slideDown{0%{opacity:0;max-height:0}to{opacity:1;max-height:2000px}}.execution-dialog-overlay{position:fixed;inset:0;background:#000000b3;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn .2s ease}.execution-dialog{width:90vw;max-width:1200px;height:90vh;background:#fff;border-radius:16px;box-shadow:0 25px 50px #0000004d;display:flex;flex-direction:column;overflow:hidden;animation:slideUp .3s ease}.execution-dialog-header{padding:1.5rem 2rem;background:linear-gradient(135deg,#8b5cf6,#7c3aed);color:#fff;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.execution-dialog-header .header-content{display:flex;align-items:center;gap:1rem;flex:1}.execution-dialog-header .header-content>i{font-size:2.5rem;opacity:.9}.execution-dialog-header .header-content .header-info h2{margin:0;font-size:1.75rem;font-weight:700}.execution-dialog-header .header-content .header-info p{margin:.25rem 0 0;opacity:.9;font-size:.95rem}.execution-dialog-header .close-btn{background:#fff3;border:none;width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;color:#fff;font-size:1.25rem}.execution-dialog-header .close-btn:hover:not(:disabled){background:#ffffff4d;transform:scale(1.05)}.execution-dialog-header .close-btn:disabled{opacity:.5;cursor:not-allowed}.execution-dialog-body{flex:1;overflow-y:auto;padding:2rem;background:#f8fafc}.execution-dialog-footer{padding:1rem 2rem;background:#fff;border-top:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center;flex-shrink:0}.execution-dialog-footer .footer-info{display:flex;gap:1.5rem}.execution-dialog-footer .footer-info .time-info{display:flex;align-items:center;gap:.5rem;color:#64748b;font-size:.875rem}.execution-dialog-footer .footer-info .time-info i{color:#8b5cf6}.execution-dialog-footer .footer-actions{display:flex;gap:.75rem}.workflow-info-panel{background:#fff;border-radius:12px;padding:2rem;box-shadow:0 4px 6px #0000000d}.workflow-info-panel .info-section{margin-bottom:2rem}.workflow-info-panel .info-section h3{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;color:#1e293b;font-size:1.25rem}.workflow-info-panel .info-section h3 i{color:#8b5cf6}.workflow-info-panel .info-section .description{color:#475569;line-height:1.7;margin:0}.workflow-info-panel .info-section .features-list{list-style:none;padding:0;margin:0;display:grid;gap:.75rem}.workflow-info-panel .info-section .features-list li{display:flex;align-items:center;gap:.75rem;padding:.75rem;background:#f8fafc;border-radius:8px;color:#334155}.workflow-info-panel .info-section .features-list li i{color:#10b981;font-size:1.125rem}.workflow-info-panel .start-section{text-align:center;padding:2rem;background:linear-gradient(135deg,#f0fdf4,#dcfce7);border-radius:12px;border:2px dashed #10b981}.workflow-info-panel .start-section .start-illustration{margin-bottom:1rem}.workflow-info-panel .start-section .start-illustration i{font-size:4rem;color:#10b981;animation:float 3s ease-in-out infinite}.workflow-info-panel .start-section h3{margin:0 0 .5rem;color:#1e293b;font-size:1.5rem}.workflow-info-panel .start-section p{margin:0 0 1.5rem;color:#64748b}.state-machine-ui .issue-tracker{background:#fff;border-radius:8px;overflow:hidden;box-shadow:0 1px 2px #0000000d}.state-machine-ui .issue-tracker .issue-header-main{padding:1.5rem 2rem 1rem;border-bottom:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#64748b;margin-bottom:.75rem}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .project-name{color:#3b82f6;font-weight:600}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .separator{color:#94a3b8}.state-machine-ui .issue-tracker .issue-header-main .issue-breadcrumb .issue-key{color:#64748b}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title{display:flex;align-items:center;gap:.75rem}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .type-badge{padding:.375rem .75rem;border-radius:4px;font-size:.8125rem;font-weight:600;display:flex;align-items:center;gap:.375rem;background:#eff6ff;color:#3b82f6}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .type-badge i{font-size:1rem}.state-machine-ui .issue-tracker .issue-header-main .issue-type-title .issue-main-title{margin:0;font-size:1.5rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-action-bar{padding:.75rem 2rem;background:#f8fafc;border-bottom:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left{display:flex;gap:.5rem}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn{padding:.5rem 1rem;border:1px solid #cbd5e1;border-radius:4px;background:#fff;font-weight:500;font-size:.875rem;cursor:pointer;transition:all .2s;color:#334155}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn:hover:not(:disabled){background:#f1f5f9;border-color:#94a3b8}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn:disabled{opacity:.5;cursor:not-allowed}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-primary{background:#3b82f6;color:#fff;border-color:#3b82f6}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-primary:hover:not(:disabled){background:#2563eb}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-success{background:#10b981;color:#fff;border-color:#10b981}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-success:hover:not(:disabled){background:#059669}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-warning{background:#f59e0b;color:#fff;border-color:#f59e0b}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-left .status-transition-btn.btn-warning:hover:not(:disabled){background:#d97706}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-right .more-actions-btn{padding:.5rem 1rem;border:1px solid #cbd5e1;border-radius:4px;background:#fff;font-weight:500;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;color:#334155;transition:all .2s}.state-machine-ui .issue-tracker .issue-action-bar .action-bar-right .more-actions-btn:hover{background:#f1f5f9}.state-machine-ui .issue-tracker .issue-main-content{display:grid;grid-template-columns:320px 1fr;gap:2rem;padding:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section{margin-bottom:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row{display:flex;padding:.625rem 0;border-bottom:1px solid #f1f5f9}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row:last-child{border-bottom:none}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row label{min-width:100px;font-size:.8125rem;color:#64748b;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value i{font-size:1rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .status-badge{padding:.25rem .625rem;border-radius:4px;color:#fff;font-weight:600;font-size:.75rem;text-transform:uppercase}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .view-workflow-link{color:#3b82f6;font-size:.8125rem;text-decoration:none;margin-left:.5rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .view-workflow-link:hover{text-decoration:underline}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .details-section .detail-row .detail-value .user-avatar{width:24px;height:24px;border-radius:50%;background:#8b5cf6;color:#fff;display:flex;align-items:center;justify-content:center;font-size:.75rem}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz{background:#f8fafc;border-radius:8px;padding:1.5rem;border:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz h3{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state{display:flex;flex-direction:column;align-items:center;gap:.375rem;opacity:.4;transition:opacity .2s}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.active,.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.completed{opacity:1}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state .state-circle{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:.875rem;box-shadow:0 2px 4px #0000001a}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state .state-name{font-size:.6875rem;color:#64748b;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-state.active .state-name{color:#1e293b;font-weight:600}.state-machine-ui .issue-tracker .issue-main-content .issue-details-panel .state-machine-viz .states-flow .flow-arrow{color:#cbd5e1;font-size:.75rem;margin:0 .25rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section{margin-bottom:2rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section h3,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section h3{margin:0 0 1rem;font-size:1rem;font-weight:600;color:#1e293b}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section .description-content,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .description-content{padding:1rem;background:#f8fafc;border-radius:6px;border:1px solid #e2e8f0}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .description-section .description-content p,.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .description-content p{margin:0;color:#475569;line-height:1.7;font-size:.875rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline{display:flex;flex-direction:column;gap:1rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item{display:flex;gap:.75rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-avatar{width:32px;height:32px;border-radius:50%;background:#8b5cf6;color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.875rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content{flex:1;padding-bottom:1rem;border-bottom:1px solid #f1f5f9}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header{font-size:.875rem;color:#334155;line-height:1.6;margin-bottom:.375rem}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header strong{color:#1e293b;font-weight:600}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-header .activity-action{color:#64748b}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-meta{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;color:#94a3b8}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item .activity-content .activity-meta .activity-label{color:#8b5cf6;font-weight:500}.state-machine-ui .issue-tracker .issue-main-content .issue-description-panel .activity-section .activity-timeline .activity-item:last-child .activity-content{border-bottom:none;padding-bottom:0}.registration-ui{display:flex;justify-content:center;align-items:center;min-height:400px}.registration-ui .registration-card{background:#fff;border-radius:12px;padding:3rem;box-shadow:0 4px 6px #0000000d;text-align:center;max-width:500px}.registration-ui .registration-card .registration-icon{margin-bottom:1.5rem}.registration-ui .registration-card .registration-icon i{font-size:5rem;color:#8b5cf6}.registration-ui .registration-card h3{margin:0 0 .75rem;color:#1e293b;font-size:1.75rem;font-weight:700}.registration-ui .registration-card .registration-desc{margin:0 0 2rem;color:#64748b;line-height:1.7}.registration-ui .registration-card .registration-progress{padding:2rem;background:#fef3c7;border-radius:8px}.registration-ui .registration-card .registration-progress .progress-spinner{margin-bottom:1rem}.registration-ui .registration-card .registration-progress .progress-spinner i{font-size:3rem;color:#f59e0b}.registration-ui .registration-card .registration-progress p{margin:0;color:#92400e;font-weight:500}.registration-ui .registration-card .registration-success{padding:2rem;background:#f0fdf4;border-radius:8px}.registration-ui .registration-card .registration-success i{font-size:4rem;color:#10b981;margin-bottom:1rem}.registration-ui .registration-card .registration-success h4{margin:0 0 .5rem;color:#064e3b;font-size:1.5rem;font-weight:700}.registration-ui .registration-card .registration-success p{margin:0;color:#065f46}.default-execution-view{display:flex;justify-content:center;align-items:center;min-height:400px}.default-execution-view .execution-status{text-align:center;padding:3rem;background:#fff;border-radius:12px;box-shadow:0 4px 6px #0000000d;min-width:400px}.default-execution-view .execution-status i{font-size:5rem;margin-bottom:1.5rem}.default-execution-view .execution-status h3{margin:0 0 .75rem;font-size:1.75rem;font-weight:700}.default-execution-view .execution-status p{margin:0;color:#64748b;line-height:1.7}.default-execution-view .execution-status .status-running i{color:#f59e0b}.default-execution-view .execution-status .status-finished i{color:#10b981}.default-execution-view .execution-status .status-error i{color:#ef4444}.execution-logs-panel{margin-top:2rem;background:#fff;border-radius:12px;padding:1.5rem;box-shadow:0 4px 6px #0000000d}.execution-logs-panel h3{display:flex;align-items:center;gap:.5rem;margin:0 0 1rem;color:#1e293b;font-size:1.125rem}.execution-logs-panel h3 i{color:#8b5cf6}.execution-logs-panel .logs-container-compact{max-height:300px;overflow-y:auto;background:#f8fafc;border-radius:8px;padding:.75rem}.execution-logs-panel .logs-container-compact .log-item-compact{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;border-radius:6px;margin-bottom:.5rem;font-size:.875rem}.execution-logs-panel .logs-container-compact .log-item-compact:last-child{margin-bottom:0}.execution-logs-panel .logs-container-compact .log-item-compact .log-time{font-family:Courier New,monospace;color:#64748b;font-size:.8125rem;min-width:70px}.execution-logs-panel .logs-container-compact .log-item-compact .log-icon{display:flex;align-items:center;justify-content:center;width:20px}.execution-logs-panel .logs-container-compact .log-item-compact .log-icon i{font-size:1rem}.execution-logs-panel .logs-container-compact .log-item-compact .log-message{flex:1;color:#334155}.execution-logs-panel .logs-container-compact .log-item-compact.log-info{background:#eff6ff}.execution-logs-panel .logs-container-compact .log-item-compact.log-info .log-icon i{color:#3b82f6}.execution-logs-panel .logs-container-compact .log-item-compact.log-success{background:#f0fdf4}.execution-logs-panel .logs-container-compact .log-item-compact.log-success .log-icon i{color:#10b981}.execution-logs-panel .logs-container-compact .log-item-compact.log-warning{background:#fffbeb}.execution-logs-panel .logs-container-compact .log-item-compact.log-warning .log-icon i{color:#f59e0b}.execution-logs-panel .logs-container-compact .log-item-compact.log-error{background:#fef2f2}.execution-logs-panel .logs-container-compact .log-item-compact.log-error .log-icon i{color:#ef4444}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvZW5naW5lL3N0dWRpby93b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3dvcmtmbG93LW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9lbmdpbmUvc3R1ZGlvL3dvcmtmbG93LXN0dWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLDRCQUE0QixFQUE4Qyw0QkFBNEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZLLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxv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SyxFQUFFLENBQUM7WUFDZixpQ0FBaUM7WUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7K0dBbHhEVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixrRUFUdkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsdUJBQXVCO2FBQ3JDO1NBQ0YsaURDeEtILDRveURBMjdCa0IsazRuRERyeUJkLFlBQVksOEJBQ1osV0FBVyx5MENBQ1gsY0FBYyw2WEFDZCxtQkFBbUIsa2lCQUNuQixpQkFBaUIscVBBQ2pCLGVBQWUsOEJBQ2YsaUJBQWlCLDhCQUNqQixtQkFBbUIsK0JBQ25CLHNCQUFzQiw0REFDdEIsNEJBQTRCLGdpQkFDNUIsZ0NBQWdDLDhGQUNoQyxrQ0FBa0M7OzRGQVd6Qix1QkFBdUI7a0JBMUJuQyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3dCQUM1QixnQ0FBZ0M7d0JBQ2hDLGtDQUFrQztxQkFDbkMsYUFDVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHlCQUF5Qjt5QkFDckM7cUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWEJ1dHRvbkdyb3VwTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbi1ncm91cCc7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYVGV4dEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90ZXh0LWJveCc7XG5pbXBvcnQgeyBBWFNlbGVjdEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYUFdvcmtmbG93TWFuYWdlciwgQVhQQWN0aXZpdHlEZWZpbml0aW9uU2VydmljZSwgQVhQQWN0aXZpdHlEZWZpbml0aW9uLCBBWFBBY3Rpdml0eUNhdGVnb3J5LCBBWFBXb3JrZmxvd0RlZmluaXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5pbXBvcnQgeyBBWFBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlLCBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYUFBhZ2VMYXlvdXRCYXNlLCBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCwgQVhQUGFnZUxheW91dENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3ZpZXdzJztcbmltcG9ydCB7IEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsIEFYUFRoZW1lTGF5b3V0U3RhcnRTaWRlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBBY3Rpb25NZW51SXRlbSwgQVhQRXhlY3V0ZUNvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0JztcbmltcG9ydCB7IEFYTUFjdGl2aXR5Q2F0ZWdvcmllc1RyZWVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlL2FjdGl2aXR5LWNhdGVnb3JpZXMtdHJlZS5jb21wb25lbnQnO1xuXG5pbnRlcmZhY2UgQWN0aXZpdHlDYXRlZ29yeVVJIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIGFjdGl2aXRpZXM6IEFjdGl2aXR5SW5mb1tdO1xufVxuXG5pbnRlcmZhY2UgUHJvcGVydHlTY2hlbWEge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnb2JqZWN0JyB8ICdhcnJheScgfCAnc2VsZWN0JyB8ICdhbnknO1xuICByZXF1aXJlZDogYm9vbGVhbjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgb3B0aW9ucz86IEFycmF5PHsgdmFsdWU6IGFueTsgbGFiZWw6IHN0cmluZyB9PjsgLy8gRm9yIHNlbGVjdCB0eXBlXG59XG5cbmludGVyZmFjZSBBY3Rpdml0eUluZm8ge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xuICBwcm9wZXJ0aWVzOiBQcm9wZXJ0eVNjaGVtYVtdO1xuICBkZWZhdWx0UHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIGFueT47IC8vIERlZmF1bHQgcHJvcGVydHkgdmFsdWVzXG59XG5cbmludGVyZmFjZSBFeGVjdXRpb25Mb2cge1xuICB0aW1lc3RhbXA6IERhdGU7XG4gIGxldmVsOiAnaW5mbycgfCAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRhdGE/OiBhbnk7XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29ubmVjdGlvbiBmcm9tIG9uZSBvdXRjb21lIHRvIGEgdGFyZ2V0IG5vZGUuXG4gKi9cbmludGVyZmFjZSBPdXRjb21lQ29ubmVjdGlvbiB7XG4gIG91dGNvbWU6IHN0cmluZzsgIC8vIGUuZy4sIFwiMjAwXCIsIFwiRG9uZVwiLCBcIkZhaWxlZFwiXG4gIHRhcmdldE5vZGVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVmlzdWFsTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvdXRjb21lQ29ubmVjdGlvbnMgaW5zdGVhZFxuICAgKiBTaW1wbGUgbGlzdCBvZiBjb25uZWN0aW9ucyAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAqL1xuICBjb25uZWN0aW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE91dGNvbWUtYmFzZWQgY29ubmVjdGlvbnMuXG4gICAqIEVhY2ggb3V0Y29tZSBjYW4gY29ubmVjdCB0byBhIGRpZmZlcmVudCB0YXJnZXQuXG4gICAqL1xuICBvdXRjb21lQ29ubmVjdGlvbnM/OiBPdXRjb21lQ29ubmVjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBBdmFpbGFibGUgb3V0Y29tZXMgZm9yIHRoaXMgbm9kZS5cbiAgICogQ29tcHV0ZWQgZnJvbSBhY3Rpdml0eSBkZXNjcmlwdG9yLlxuICAgKi9cbiAgb3V0Y29tZXM/OiBzdHJpbmdbXTtcbn1cblxudHlwZSBFZGl0b3JUYWIgPSAnanNvbicgfCAndmlzdWFsJztcbnR5cGUgU2V0dGluZ3NUYWIgPSAnZ2VuZXJhbCcgfCAnaW5wdXRzJyB8ICdvdXRwdXRzJyB8ICd2YXJpYWJsZXMnIHwgJ2FkdmFuY2VkJztcblxuaW50ZXJmYWNlIFdvcmtmbG93U2V0dGluZ3Mge1xuICAvLyBJZGVudGlmaWNhdGlvblxuICBkZWZpbml0aW9uSWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8vIFdvcmtmbG93IENvbW1vblxuICBpbnB1dHM6IFdvcmtmbG93SW5wdXRbXTtcbiAgb3V0cHV0czogV29ya2Zsb3dPdXRwdXRbXTtcbiAgdmFyaWFibGVzOiBXb3JrZmxvd1ZhcmlhYmxlW107XG4gIG91dGNvbWVzOiBzdHJpbmdbXTtcblxuICAvLyBPcHRpb25zXG4gIHVzYWJsZUFzQWN0aXZpdHk6IGJvb2xlYW47XG4gIGF1dG9VcGRhdGVDb25zdW1pbmdXb3JrZmxvd3M6IGJvb2xlYW47XG5cbiAgLy8gTWV0YWRhdGFcbiAgdmVyc2lvbjogbnVtYmVyO1xuICBpc0xhdGVzdDogYm9vbGVhbjtcbiAgaXNQdWJsaXNoZWQ6IGJvb2xlYW47XG4gIHRvb2xWZXJzaW9uOiBzdHJpbmc7XG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgV29ya2Zsb3dJbnB1dCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHNjaGVtYToge1xuICAgIGRhdGFUeXBlOiBzdHJpbmc7XG4gICAgbnVsbGFibGU/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgICBoaWRkZW4/OiBib29sZWFuIHwgc3RyaW5nO1xuICAgIGRlZmF1bHRWYWx1ZT86IGFueSB8IHN0cmluZyB8ICgoY29udGV4dDogYW55IHwgbnVsbCkgPT4gYW55KTtcbiAgfTtcbiAgdmFsaWRhdGlvbnM/OiBBcnJheTx7IHJ1bGU6IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZzsgb3B0aW9ucz86IGFueSB9Pjtcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93T3V0cHV0IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2NoZW1hOiB7XG4gICAgZGF0YVR5cGU6IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93VmFyaWFibGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGVOYW1lOiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd29ya2Zsb3ctc3R1ZGlvJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWEJ1dHRvbkdyb3VwTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVGV4dEJveE1vZHVsZSxcbiAgICBBWFNlbGVjdEJveE1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQsXG4gICAgQVhQVGhlbWVMYXlvdXRCbG9ja0NvbXBvbmVudCxcbiAgICBBWFBUaGVtZUxheW91dFN0YXJ0U2lkZUNvbXBvbmVudCxcbiAgICBBWE1BY3Rpdml0eUNhdGVnb3JpZXNUcmVlQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUFBhZ2VMYXlvdXRCYXNlLFxuICAgICAgdXNlRXhpc3Rpbmc6IFdvcmtmbG93U3R1ZGlvQ29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1N0dWRpb0NvbXBvbmVudCBleHRlbmRzIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50IHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93TWFuYWdlciA9IGluamVjdChBWFBXb3JrZmxvd01hbmFnZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2aXR5RGVmaW5pdGlvblNlcnZpY2UgPSBpbmplY3QoQVhQQWN0aXZpdHlEZWZpbml0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2VydmljZSA9IGluamVjdChBWFBFbnRpdHlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd0RlZmluaXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYUFdvcmtmbG93RGVmaW5pdGlvblNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgU3RhdGUgICAtLS0tXG5cbiAgYWN0aXZlVGFiID0gc2lnbmFsPEVkaXRvclRhYj4oJ2pzb24nKTtcbiAgc2VsZWN0ZWRDYXRlZ29yeSA9IHNpZ25hbDxBWFBBY3Rpdml0eUNhdGVnb3J5IHwgbnVsbD4obnVsbCk7XG4gIHNlbGVjdGVkQWN0aXZpdHkgPSBzaWduYWw8QVhQQWN0aXZpdHlEZWZpbml0aW9uIHwgbnVsbD4obnVsbCk7XG4gIHdvcmtmbG93SnNvbiA9IHNpZ25hbDxzdHJpbmc+KHRoaXMuZ2V0RW1wdHlXb3JrZmxvdygpKTtcbiAgdmlzdWFsTm9kZXMgPSBzaWduYWw8VmlzdWFsTm9kZVtdPihbXSk7XG4gIHNlbGVjdGVkTm9kZSA9IHNpZ25hbDxWaXN1YWxOb2RlIHwgbnVsbD4obnVsbCk7XG4gIGlzRXhlY3V0aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgZXhlY3V0aW9uTG9ncyA9IHNpZ25hbDxFeGVjdXRpb25Mb2dbXT4oW10pO1xuXG4gIC8vIEV4ZWN1dGlvbiBEaWFsb2cgU3RhdGVcbiAgc2hvd0V4ZWN1dGlvbkRpYWxvZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHdvcmtmbG93SW5zdGFuY2VTdGF0ZSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIC8vIFVJIFN0YXRlXG4gIHNob3dQcm9wZXJ0aWVzUGFuZWwgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHNob3dXb3JrZmxvd1NldHRpbmdzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgYWN0aXZlU2V0dGluZ3NUYWIgPSBzaWduYWw8U2V0dGluZ3NUYWI+KCdnZW5lcmFsJyk7XG5cbiAgLy8gV29ya2Zsb3cgU2V0dGluZ3NcbiAgd29ya2Zsb3dTZXR0aW5ncyA9IHNpZ25hbDxXb3JrZmxvd1NldHRpbmdzPih7XG4gICAgZGVmaW5pdGlvbklkOiAnJyxcbiAgICBuYW1lOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgaW5wdXRzOiBbXSxcbiAgICBvdXRwdXRzOiBbXSxcbiAgICB2YXJpYWJsZXM6IFtdLFxuICAgIG91dGNvbWVzOiBbJ0RvbmUnXSxcbiAgICB1c2FibGVBc0FjdGl2aXR5OiBmYWxzZSxcbiAgICBhdXRvVXBkYXRlQ29uc3VtaW5nV29ya2Zsb3dzOiBmYWxzZSxcbiAgICB2ZXJzaW9uOiAxLFxuICAgIGlzTGF0ZXN0OiB0cnVlLFxuICAgIGlzUHVibGlzaGVkOiBmYWxzZSxcbiAgICB0b29sVmVyc2lvbjogJzEuMC4wJyxcbiAgICBwcm92aWRlck5hbWU6ICdXb3JrZmxvd1N0dWRpbydcbiAgfSk7XG5cbiAgLy8gQ2FudmFzIHN0YXRlXG4gIGNhbnZhc09mZnNldCA9IHsgeDogMCwgeTogMCB9O1xuICBpc0RyYWdnaW5nQ2FudmFzID0gZmFsc2U7XG4gIGRyYWdTdGFydFBvcyA9IHsgeDogMCwgeTogMCB9O1xuICBkcmFnZ2VkQWN0aXZpdHk6IEFjdGl2aXR5SW5mbyB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkTm9kZTogVmlzdWFsTm9kZSB8IG51bGwgPSBudWxsO1xuICBub2RlRHJhZ09mZnNldCA9IHsgeDogMCwgeTogMCB9O1xuICBjb25uZWN0aW9uU291cmNlOiB7IG5vZGU6IFZpc3VhbE5vZGU7IHR5cGU6ICdpbicgfCAnb3V0Jzsgb3V0Y29tZT86IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgLy8gUGFnZSBsYXlvdXQgaW5pdGlhbGl6YXRpb25cbiAgICBhd2FpdCBzdXBlci5uZ09uSW5pdCgpO1xuICAgIFxuICAgIC8vIExvYWQgd29ya2Zsb3cgZnJvbSBxdWVyeSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBhd2FpdCB0aGlzLmxvYWRXb3JrZmxvd0Zyb21Sb3V0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgd29ya2Zsb3cgZnJvbSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZFdvcmtmbG93RnJvbVJvdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFJlYWQgZnJvbSBzbmFwc2hvdCAoZm9yIGluaXRpYWwgbG9hZClcbiAgICBjb25zdCB3b3JrZmxvd05hbWUgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWyd3b3JrZmxvdyddO1xuICAgIFxuICAgIGlmICghd29ya2Zsb3dOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5sb2FkV29ya2Zsb3dCeU5hbWUod29ya2Zsb3dOYW1lKTtcbiAgICBcbiAgICAvLyBTdWJzY3JpYmUgdG8gcXVlcnkgcGFyYW0gY2hhbmdlcyAobGlrZSBkcml2ZSBjb21wb25lbnQpXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgbmV3V29ya2Zsb3dOYW1lID0gcGFyYW1zWyd3b3JrZmxvdyddO1xuICAgICAgaWYgKG5ld1dvcmtmbG93TmFtZSAmJiBuZXdXb3JrZmxvd05hbWUgIT09IHdvcmtmbG93TmFtZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRXb3JrZmxvd0J5TmFtZShuZXdXb3JrZmxvd05hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgd29ya2Zsb3cgYnkgbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkV29ya2Zsb3dCeU5hbWUod29ya2Zsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFkZExvZygnaW5mbycsIGBMb2FkaW5nIHdvcmtmbG93OiAke3dvcmtmbG93TmFtZX0uLi5gKTtcblxuICAgICAgLy8gVHJ5IHRvIGdldCB3b3JrZmxvdyBmcm9tIGVudGl0eSBzZXJ2aWNlIGZpcnN0XG4gICAgICBjb25zdCB3b3JrZmxvd0VudGl0eVNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICAgICAgUm9vdENvbmZpZy5tb2R1bGUubmFtZSxcbiAgICAgICAgUm9vdENvbmZpZy5lbnRpdGllcy53b3JrZmxvd0RlZmluaXRpb24ubmFtZVxuICAgICAgKS5kYXRhPGFueSwgYW55PigpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3b3JrZmxvd0VudGl0eVNlcnZpY2UucXVlcnkoe1xuICAgICAgICBza2lwOiAwLFxuICAgICAgICB0YWtlOiAxLFxuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgZmlsdGVyczogW3tcbiAgICAgICAgICAgIGZpZWxkOiAnbmFtZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICB2YWx1ZTogd29ya2Zsb3dOYW1lLFxuICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBsZXQgd29ya2Zsb3dEZWY6IGFueSA9IG51bGw7XG5cbiAgICAgIGlmIChyZXN1bHQuaXRlbXMgJiYgcmVzdWx0Lml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgd29ya2Zsb3dEZWYgPSByZXN1bHQuaXRlbXNbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUcnkgd29ya2Zsb3cgZGVmaW5pdGlvbiBzZXJ2aWNlXG4gICAgICAgIHdvcmtmbG93RGVmID0gYXdhaXQgdGhpcy53b3JrZmxvd0RlZmluaXRpb25TZXJ2aWNlLmdldFdvcmtmbG93QnlOYW1lKHdvcmtmbG93TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghd29ya2Zsb3dEZWYpIHtcbiAgICAgICAgdGhpcy5hZGRMb2coJ3dhcm5pbmcnLCBgV29ya2Zsb3cgJyR7d29ya2Zsb3dOYW1lfScgbm90IGZvdW5kYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ29udmVydCB3b3JrZmxvdyBkZWZpbml0aW9uIHRvIHN0dWRpbyBKU09OIGZvcm1hdFxuICAgICAgY29uc3Qgc3R1ZGlvSnNvbiA9IHRoaXMuY29udmVydFdvcmtmbG93RGVmaW5pdGlvblRvU3R1ZGlvSnNvbih3b3JrZmxvd0RlZik7XG4gICAgICB0aGlzLndvcmtmbG93SnNvbi5zZXQoSlNPTi5zdHJpbmdpZnkoc3R1ZGlvSnNvbiwgbnVsbCwgMikpO1xuXG4gICAgICAvLyBVcGRhdGUgd29ya2Zsb3cgc2V0dGluZ3NcbiAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoe1xuICAgICAgICBkZWZpbml0aW9uSWQ6IHdvcmtmbG93RGVmLmlkIHx8IHdvcmtmbG93RGVmLmRlZmluaXRpb25JZCB8fCB3b3JrZmxvd0RlZi5uYW1lLFxuICAgICAgICBuYW1lOiB3b3JrZmxvd0RlZi5uYW1lIHx8ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogd29ya2Zsb3dEZWYuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIGlucHV0czogKHdvcmtmbG93RGVmLmlucHV0cyB8fCBbXSkubWFwKChpbnB1dDogYW55KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGlucHV0Lm5hbWUsXG4gICAgICAgICAgdGl0bGU6IGlucHV0LnRpdGxlIHx8IGlucHV0Lm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNjaGVtYTogaW5wdXQuc2NoZW1hIHx8IHsgZGF0YVR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgdmFsaWRhdGlvbnM6IGlucHV0LnZhbGlkYXRpb25zLFxuICAgICAgICB9KSksXG4gICAgICAgIG91dHB1dHM6ICh3b3JrZmxvd0RlZi5vdXRwdXRzIHx8IFtdKS5tYXAoKG91dHB1dDogYW55KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IG91dHB1dC5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBvdXRwdXQudGl0bGUgfHwgb3V0cHV0Lm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IG91dHB1dC5kZXNjcmlwdGlvbixcbiAgICAgICAgICBzY2hlbWE6IG91dHB1dC5zY2hlbWEgfHwgeyBkYXRhVHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgfSkpLFxuICAgICAgICB2YXJpYWJsZXM6IHdvcmtmbG93RGVmLnZhcmlhYmxlcyB8fCBbXSxcbiAgICAgICAgb3V0Y29tZXM6IHdvcmtmbG93RGVmLm91dGNvbWVzIHx8IFsnRG9uZSddLFxuICAgICAgICB1c2FibGVBc0FjdGl2aXR5OiB3b3JrZmxvd0RlZi5leHRlbnNpb25zPy5lbHNhPy5vcHRpb25zPy51c2FibGVBc0FjdGl2aXR5IHx8IGZhbHNlLFxuICAgICAgICBhdXRvVXBkYXRlQ29uc3VtaW5nV29ya2Zsb3dzOiB3b3JrZmxvd0RlZi5leHRlbnNpb25zPy5lbHNhPy5vcHRpb25zPy5hdXRvVXBkYXRlQ29uc3VtaW5nV29ya2Zsb3dzIHx8IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiB3b3JrZmxvd0RlZi52ZXJzaW9uIHx8IDEsXG4gICAgICAgIGlzTGF0ZXN0OiB3b3JrZmxvd0RlZi5pc0xhdGVzdCAhPT0gdW5kZWZpbmVkID8gd29ya2Zsb3dEZWYuaXNMYXRlc3QgOiB0cnVlLFxuICAgICAgICBpc1B1Ymxpc2hlZDogd29ya2Zsb3dEZWYuaXNQdWJsaXNoZWQgfHwgZmFsc2UsXG4gICAgICAgIHRvb2xWZXJzaW9uOiB3b3JrZmxvd0RlZi50b29sVmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgICBwcm92aWRlck5hbWU6IHdvcmtmbG93RGVmLnByb3ZpZGVyTmFtZSB8fCAnQUNvcmVYJyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFkZExvZygnc3VjY2VzcycsIGBXb3JrZmxvdyAnJHt3b3JrZmxvd05hbWV9JyBsb2FkZWQgc3VjY2Vzc2Z1bGx5YCk7XG5cbiAgICAgIC8vIElmIHZpc3VhbCB0YWIgaXMgYWN0aXZlLCBjb252ZXJ0IHRvIHZpc3VhbFxuICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiKCkgPT09ICd2aXN1YWwnKSB7XG4gICAgICAgIHRoaXMuanNvblRvVmlzdWFsKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhpcy5hZGRMb2coJ2Vycm9yJywgYEZhaWxlZCB0byBsb2FkIHdvcmtmbG93OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKCdbV29ya2Zsb3dTdHVkaW9dIEVycm9yIGxvYWRpbmcgd29ya2Zsb3c6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHdvcmtmbG93IGRlZmluaXRpb24gdG8gc3R1ZGlvIEpTT04gZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRXb3JrZmxvd0RlZmluaXRpb25Ub1N0dWRpb0pzb24od29ya2Zsb3dEZWY6IGFueSk6IGFueSB7XG4gICAgLy8gQ29udmVydCBncmFwaCBmb3JtYXQgdG8gcm9vdCBhY3Rpdml0eSBmb3JtYXRcbiAgICBjb25zdCBncmFwaCA9IHdvcmtmbG93RGVmLmdyYXBoO1xuICAgIGlmICghZ3JhcGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEVtcHR5V29ya2Zsb3coKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCByb290IGFjdGl2aXR5IHN0cnVjdHVyZVxuICAgIGNvbnN0IHJvb3RBY3Rpdml0eTogYW55ID0ge1xuICAgICAgaWQ6IGdyYXBoLnN0YXJ0QWN0aXZpdHlJZCB8fCAncm9vdCcsXG4gICAgICB0eXBlOiAnd29ya2Zsb3ctYWN0aXZpdHk6c2VxdWVuY2UnLFxuICAgICAgbmFtZTogd29ya2Zsb3dEZWYudGl0bGUgfHwgd29ya2Zsb3dEZWYubmFtZSB8fCAnUm9vdCcsXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgfTtcblxuICAgIC8vIENvbnZlcnQgYWN0aXZpdGllcyB0byBjaGlsZHJlblxuICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBncmFwaC5hY3Rpdml0aWVzIHx8IFtdO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gZ3JhcGguY29ubmVjdGlvbnMgfHwgW107XG5cbiAgICAvLyBCdWlsZCBhY3Rpdml0eSBtYXBcbiAgICBjb25zdCBhY3Rpdml0eU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgYWN0aXZpdGllcy5mb3JFYWNoKChhY3Rpdml0eTogYW55KSA9PiB7XG4gICAgICBhY3Rpdml0eU1hcC5zZXQoYWN0aXZpdHkuaWQsIHtcbiAgICAgICAgaWQ6IGFjdGl2aXR5LmlkLFxuICAgICAgICB0eXBlOiBhY3Rpdml0eS5uYW1lIHx8IGFjdGl2aXR5LnR5cGUsXG4gICAgICAgIG5hbWU6IGFjdGl2aXR5LmN1c3RvbVByb3BlcnRpZXM/Lm5vZGVJZCB8fCBhY3Rpdml0eS5pZCxcbiAgICAgICAgcHJvcGVydGllczogYWN0aXZpdHkuaW5wdXRzIHx8IHt9LFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxkIGNvbm5lY3Rpb25zIHRyZWVcbiAgICBjb25zdCBzdGFydEFjdGl2aXR5ID0gYWN0aXZpdHlNYXAuZ2V0KGdyYXBoLnN0YXJ0QWN0aXZpdHlJZCk7XG4gICAgaWYgKHN0YXJ0QWN0aXZpdHkpIHtcbiAgICAgIHJvb3RBY3Rpdml0eS5jaGlsZHJlbi5wdXNoKHN0YXJ0QWN0aXZpdHkpO1xuICAgICAgXG4gICAgICAvLyBGb2xsb3cgY29ubmVjdGlvbnMgdG8gYnVpbGQgdHJlZVxuICAgICAgY29uc3QgcHJvY2Vzc2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBjb25zdCBwcm9jZXNzQWN0aXZpdHkgPSAoYWN0aXZpdHlJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChwcm9jZXNzZWQuaGFzKGFjdGl2aXR5SWQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NlZC5hZGQoYWN0aXZpdHlJZCk7XG5cbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSBhY3Rpdml0eU1hcC5nZXQoYWN0aXZpdHlJZCk7XG4gICAgICAgIGlmICghYWN0aXZpdHkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIG91dGdvaW5nIGNvbm5lY3Rpb25zXG4gICAgICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSBjb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKGNvbm46IGFueSkgPT4gY29ubi5zb3VyY2UuYWN0aXZ0eU5hbWUgPT09IGFjdGl2aXR5SWRcbiAgICAgICAgKTtcblxuICAgICAgICBvdXRnb2luZ0Nvbm5lY3Rpb25zLmZvckVhY2goKGNvbm46IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldEFjdGl2aXR5ID0gYWN0aXZpdHlNYXAuZ2V0KGNvbm4udGFyZ2V0LmFjdGl2dHlOYW1lKTtcbiAgICAgICAgICBpZiAodGFyZ2V0QWN0aXZpdHkgJiYgIXByb2Nlc3NlZC5oYXModGFyZ2V0QWN0aXZpdHkuaWQpKSB7XG4gICAgICAgICAgICBhY3Rpdml0eS5jaGlsZHJlbi5wdXNoKHRhcmdldEFjdGl2aXR5KTtcbiAgICAgICAgICAgIHByb2Nlc3NBY3Rpdml0eSh0YXJnZXRBY3Rpdml0eS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHByb2Nlc3NBY3Rpdml0eShncmFwaC5zdGFydEFjdGl2aXR5SWQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogd29ya2Zsb3dEZWYuaWQgfHwgd29ya2Zsb3dEZWYubmFtZSB8fCAnd29ya2Zsb3cnLFxuICAgICAgbmFtZTogd29ya2Zsb3dEZWYubmFtZSB8fCAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiB3b3JrZmxvd0RlZi5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIHZlcnNpb246IHdvcmtmbG93RGVmLnZlcnNpb24gfHwgMSxcbiAgICAgIHJvb3Q6IHJvb3RBY3Rpdml0eSxcbiAgICB9O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQYWdlIExheW91dCBPdmVycmlkZXMgICAtLS0tXG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZVRpdGxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8ubWVudXMud29ya2Zsb3ctc3R1ZGlvLnRpdGxlJyk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRQYWdlRGVzY3JpcHRpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8ubWVudXMud29ya2Zsb3ctc3R1ZGlvLmRlc2NyaXB0aW9uJyk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBnZXRQcmltYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdleGVjdXRlLXdvcmtmbG93JyxcbiAgICAgICAgdGl0bGU6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uYWN0aW9ucy5leGVjdXRlLXdvcmtmbG93LnRpdGxlJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXBsYXknLFxuICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0V4ZWN1dGluZygpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3dvcmtmbG93LXNldHRpbmdzJyxcbiAgICAgICAgdGl0bGU6ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uYWN0aW9ucy5zZXR0aW5ncy50aXRsZScsXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS1jb2cnLFxuICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2V4cG9ydC13b3JrZmxvdycsXG4gICAgICAgIHRpdGxlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmFjdGlvbnMuZXhwb3J0LnRpdGxlJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWRvd25sb2FkJyxcbiAgICAgICAgY29sb3I6ICdkZWZhdWx0JyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFNlY29uZGFyeU1lbnVJdGVtcygpOiBQcm9taXNlPEFYUEFjdGlvbk1lbnVJdGVtW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnZm9ybWF0LWpzb24nLFxuICAgICAgICB0aXRsZTogJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5hY3Rpb25zLmZvcm1hdC1qc29uLnRpdGxlJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNvZGUnLFxuICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NsZWFyLWNhbnZhcycsXG4gICAgICAgIHRpdGxlOiAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmFjdGlvbnMuY2xlYXItY2FudmFzLnRpdGxlJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoJyxcbiAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGl2ZVRhYigpID09PSAndmlzdWFsJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGV4ZWN1dGUoY29tbWFuZDogQVhQRXhlY3V0ZUNvbW1hbmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKGNvbW1hbmQubmFtZSkge1xuICAgICAgY2FzZSAnZXhlY3V0ZS13b3JrZmxvdyc6XG4gICAgICAgIHRoaXMub3BlbkV4ZWN1dGlvbkRpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dvcmtmbG93LXNldHRpbmdzJzpcbiAgICAgICAgdGhpcy5vcGVuV29ya2Zsb3dTZXR0aW5ncygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V4cG9ydC13b3JrZmxvdyc6XG4gICAgICAgIHRoaXMuZG93bmxvYWRXb3JrZmxvd0RlZmluaXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmb3JtYXQtanNvbic6XG4gICAgICAgIHRoaXMuZm9ybWF0SnNvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NsZWFyLWNhbnZhcyc6XG4gICAgICAgIHRoaXMuY2xlYXJDYW52YXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDYXRlZ29yeSAmIEFjdGl2aXR5IExvYWRpbmcgICAtLS0tXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjYXRlZ29yeSBzZWxlY3Rpb24gZnJvbSB0cmVlXG4gICAqL1xuICBvbkNhdGVnb3J5Q2xpY2soY2F0ZWdvcnk6IEFYUEFjdGl2aXR5Q2F0ZWdvcnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkuc2V0KGNhdGVnb3J5KTtcbiAgICB0aGlzLnNlbGVjdGVkQWN0aXZpdHkuc2V0KG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhY3Rpdml0eSBzZWxlY3Rpb24gZnJvbSB0cmVlXG4gICAqL1xuICBvbkFjdGl2aXR5Q2xpY2soYWN0aXZpdHk6IEFYUEFjdGl2aXR5RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBY3Rpdml0eS5zZXQoYWN0aXZpdHkpO1xuICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYEFjdGl2aXR5IHNlbGVjdGVkOiAke2FjdGl2aXR5Lm5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBBWFBBY3Rpdml0eURlZmluaXRpb24gdG8gQWN0aXZpdHlJbmZvXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRBY3Rpdml0eURlZmluaXRpb25Ub0luZm8oYWN0aXZpdHk6IEFYUEFjdGl2aXR5RGVmaW5pdGlvbik6IEFjdGl2aXR5SW5mbyB7XG4gICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlTY2hlbWFbXSA9IChhY3Rpdml0eS5pbnB1dHMgfHwgW10pLm1hcChpbnB1dCA9PiAoe1xuICAgICAgbmFtZTogaW5wdXQubmFtZSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0UHJvcGVydHlUeXBlRnJvbVNjaGVtYShpbnB1dC5zY2hlbWEpLFxuICAgICAgcmVxdWlyZWQ6ICFpbnB1dC5zY2hlbWEubnVsbGFibGUsXG4gICAgICBkZXNjcmlwdGlvbjogaW5wdXQuZGVzY3JpcHRpb24sXG4gICAgICBkZWZhdWx0VmFsdWU6IGlucHV0LnNjaGVtYS5kZWZhdWx0VmFsdWVcbiAgICB9KSk7XG5cbiAgICBjb25zdCBkZWZhdWx0UHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIHByb3BlcnRpZXMuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGlmIChwcm9wLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzW3Byb3AubmFtZV0gPSBwcm9wLmRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBhY3Rpdml0eS50eXBlLFxuICAgICAgbmFtZTogYWN0aXZpdHkubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBhY3Rpdml0eS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIGljb246IGFjdGl2aXR5Lmljb24gfHwgJ2ZhLWxpZ2h0IGZhLWNpcmNsZScsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwcm9wZXJ0eSB0eXBlIGZyb20gc2NoZW1hXG4gICAqL1xuICBwcml2YXRlIGdldFByb3BlcnR5VHlwZUZyb21TY2hlbWEoc2NoZW1hOiBhbnkpOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnYXJyYXknIHwgJ3NlbGVjdCcgfCAnYW55JyB7XG4gICAgY29uc3QgZGF0YVR5cGUgPSBzY2hlbWE/LmRhdGFUeXBlIHx8ICdzdHJpbmcnO1xuICAgIGlmIChkYXRhVHlwZSA9PT0gJ2FycmF5JykgcmV0dXJuICdhcnJheSc7XG4gICAgaWYgKGRhdGFUeXBlID09PSAnb2JqZWN0JykgcmV0dXJuICdvYmplY3QnO1xuICAgIGlmIChkYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIGlmIChkYXRhVHlwZSA9PT0gJ251bWJlcicgfHwgZGF0YVR5cGUgPT09ICdpbnRlZ2VyJykgcmV0dXJuICdudW1iZXInO1xuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2F0ZWdvcnkgY29sb3JcbiAgICovXG4gIHByaXZhdGUgZ2V0Q2F0ZWdvcnlDb2xvcihjYXRlZ29yeUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbG9yTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3dvcmtmbG93LW1hcmtlcnMnOiAnIzEwQjk4MScsXG4gICAgICAnY29udHJvbC1mbG93JzogJyMzQjgyRjYnLFxuICAgICAgJ3VzZXItaW50ZXJhY3Rpb24nOiAnIzhCNUNGNicsXG4gICAgICAnZGF0YSc6ICcjMTBCOTgxJyxcbiAgICAgICduYXZpZ2F0aW9uJzogJyNGNTlFMEInLFxuICAgICAgJ2V2ZW50cyc6ICcjRUY0NDQ0JyxcbiAgICAgICdodHRwJzogJyMwNkI2RDQnXG4gICAgfTtcbiAgICByZXR1cm4gY29sb3JNYXBbY2F0ZWdvcnlJZF0gfHwgJyM2NDc0OEInO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbXB0eSB3b3JrZmxvdyBKU09OXG4gICAqL1xuICBwcml2YXRlIGdldEVtcHR5V29ya2Zsb3coKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6ICduZXctd29ya2Zsb3cnLFxuICAgICAgbmFtZTogJycsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgcm9vdDoge1xuICAgICAgICBpZDogJ3Jvb3QnLFxuICAgICAgICB0eXBlOiAnd29ya2Zsb3ctYWN0aXZpdHk6c2VxdWVuY2UnLFxuICAgICAgICBuYW1lOiAnUm9vdCcsXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgfVxuICAgIH0sIG51bGwsIDIpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cblxuXG5cbiAgLyoqXG4gICAqIFN5bmMgdmlzdWFsaXplciB3aXRoIEpTT04gY2hhbmdlc1xuICAgKi9cbiAgc3luY1Zpc3VhbGl6ZXJXaXRoSnNvbigpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiKCkgPT09ICd2aXN1YWwnKSB7XG4gICAgICAgIHRoaXMuanNvblRvVmlzdWFsKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbV29ya2Zsb3dTdHVkaW9dIEVycm9yIHN5bmNpbmcgdmlzdWFsaXplcjonLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgV29ya2Zsb3cgRXhlY3V0aW9uICAgLS0tLVxuXG4gIC8qKlxuICAgKiBPcGVuIGV4ZWN1dGlvbiBkaWFsb2dcbiAgICovXG4gIG9wZW5FeGVjdXRpb25EaWFsb2coKSB7XG4gICAgdGhpcy5zaG93RXhlY3V0aW9uRGlhbG9nLnNldCh0cnVlKTtcbiAgICB0aGlzLndvcmtmbG93SW5zdGFuY2VTdGF0ZS5zZXQobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgZXhlY3V0aW9uIGRpYWxvZ1xuICAgKi9cbiAgY2xvc2VFeGVjdXRpb25EaWFsb2coKSB7XG4gICAgdGhpcy5zaG93RXhlY3V0aW9uRGlhbG9nLnNldChmYWxzZSk7XG4gICAgdGhpcy53b3JrZmxvd0luc3RhbmNlU3RhdGUuc2V0KG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHdvcmtmbG93IGV4ZWN1dGlvblxuICAgKi9cbiAgYXN5bmMgc3RhcnRXb3JrZmxvd0V4ZWN1dGlvbigpIHtcbiAgICBhd2FpdCB0aGlzLnJ1bldvcmtmbG93KCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiDYp9is2LHYp9uMIHdvcmtmbG93XG4gICAqL1xuICBhc3luYyBydW5Xb3JrZmxvdygpIHtcbiAgICB0aGlzLmlzRXhlY3V0aW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmV4ZWN1dGlvbkxvZ3Muc2V0KFtdKTtcbiAgICB0aGlzLndvcmtmbG93SW5zdGFuY2VTdGF0ZS5zZXQoe1xuICAgICAgc3RhdHVzOiAncnVubmluZycsXG4gICAgICBzdGFydFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICBjdXJyZW50U3RhdGU6IG51bGxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgJ9i02LHZiNi5INin2KzYsdin24wgV29ya2Zsb3cuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSBKU09OXG4gICAgICBjb25zdCB3b3JrZmxvd0RlZiA9IEpTT04ucGFyc2UodGhpcy53b3JrZmxvd0pzb24oKSk7XG4gICAgICBjb25zdCBsb2dNZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnRlc3QtcGFnZXMubWVzc2FnZXMuaW5mby5qc29uLXBhcnNlZCcpO1xuICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBsb2dNZXNzYWdlLCB3b3JrZmxvd0RlZik7XG5cbiAgICAgIC8vIFNhdmUgd29ya2Zsb3cgZGVmaW5pdGlvbiB0byBlbnRpdHkgc2VydmljZSBmaXJzdFxuICAgICAgY29uc3Qgd29ya2Zsb3dJZCA9IHdvcmtmbG93RGVmLmlkIHx8IGB3b3JrZmxvdy0ke0RhdGUubm93KCl9YDtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25Ub1NhdmUgPSB0aGlzLmV4cG9ydFdvcmtmbG93RGVmaW5pdGlvbigpO1xuICAgICAgXG4gICAgICBpZiAoIWRlZmluaXRpb25Ub1NhdmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZXhwb3J0IHdvcmtmbG93IGRlZmluaXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBvciB1cGRhdGUgd29ya2Zsb3cgZGVmaW5pdGlvblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICAgICAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICAgICAgIFJvb3RDb25maWcuZW50aXRpZXMud29ya2Zsb3dEZWZpbml0aW9uLm5hbWVcbiAgICAgICAgKS5kYXRhKCkuYnlLZXkod29ya2Zsb3dJZCk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5lbnRpdHlTZXJ2aWNlLndpdGhFbnRpdHkoXG4gICAgICAgICAgICBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgICAgICAgICAgUm9vdENvbmZpZy5lbnRpdGllcy53b3JrZmxvd0RlZmluaXRpb24ubmFtZVxuICAgICAgICAgICkuZGF0YSgpLnVwZGF0ZSh3b3JrZmxvd0lkLCBkZWZpbml0aW9uVG9TYXZlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmVudGl0eVNlcnZpY2Uud2l0aEVudGl0eShcbiAgICAgICAgICAgIFJvb3RDb25maWcubW9kdWxlLm5hbWUsXG4gICAgICAgICAgICBSb290Q29uZmlnLmVudGl0aWVzLndvcmtmbG93RGVmaW5pdGlvbi5uYW1lXG4gICAgICAgICAgKS5kYXRhKCkuY3JlYXRlKHsgLi4uZGVmaW5pdGlvblRvU2F2ZSwgaWQ6IHdvcmtmbG93SWQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYXZlTWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAd29ya2Zsb3ctbWFuYWdlbWVudDp0ZXN0LXBhZ2VzLm1lc3NhZ2VzLnN1Y2Nlc3Mud29ya2Zsb3ctc2F2ZWQnKTtcbiAgICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBzYXZlTWVzc2FnZSk7XG4gICAgICB9IGNhdGNoIChzYXZlRXJyb3I6IGFueSkge1xuICAgICAgICAvLyBDb250aW51ZSBleGVjdXRpb24gZXZlbiBpZiBzYXZlIGZhaWxzXG4gICAgICAgIGNvbnN0IHNhdmVFcnJvck1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGVzdC1wYWdlcy5tZXNzYWdlcy53YXJuaW5nLnNhdmUtZmFpbGVkJyk7XG4gICAgICAgIHRoaXMuYWRkTG9nKCd3YXJuaW5nJywgYCR7c2F2ZUVycm9yTWVzc2FnZX06ICR7c2F2ZUVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vINin2KzYsdin24wgd29ya2Zsb3dcbiAgICAgIGNvbnN0IGV4ZWN1dGluZ01lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGVzdC1wYWdlcy5tZXNzYWdlcy5pbmZvLmV4ZWN1dGluZycpO1xuICAgICAgdGhpcy5hZGRMb2coJ2luZm8nLCBleGVjdXRpbmdNZXNzYWdlKTtcblxuICAgICAgLy8gU3RhcnQgd29ya2Zsb3cgZXhlY3V0aW9uIHVzaW5nIHRoZSB3b3JrZmxvdyBuYW1lXG4gICAgICBjb25zdCB3b3JrZmxvd05hbWUgPSBkZWZpbml0aW9uVG9TYXZlLm5hbWUgfHwgd29ya2Zsb3dJZDtcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLndvcmtmbG93TWFuYWdlci5zdGFydCh3b3JrZmxvd05hbWUsIHt9KTtcbiAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYFdvcmtmbG93IHN0YXJ0ZWQuIEluc3RhbmNlIElEOiAke3Jlc3VsdC5pbnN0YW5jZUlkfWAsIHJlc3VsdCk7XG5cbiAgICAgIGlmICghcmVzdWx0Lmluc3RhbmNlSWQpIHtcbiAgICAgICAgdGhpcy5hZGRMb2coJ2Vycm9yJywgJ+KdjCBXb3JrZmxvdyDYqNinINiu2LfYpyDZhdmI2KfYrNmHINi02K8nLCByZXN1bHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSB3b3JrZmxvdyBleGVjdXRpb24gbG9vcCAtIGV4ZWN1dGUgYWxsIGZyb250ZW5kIHRhc2tzXG4gICAgICBsZXQgY3VycmVudFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIGxldCB0YXNrQ291bnQgPSAwO1xuXG4gICAgICB3aGlsZSAoY3VycmVudFJlc3VsdC5uZXh0VGFzaykge1xuICAgICAgICB0YXNrQ291bnQrKztcbiAgICAgICAgY29uc3QgdGFzayA9IGN1cnJlbnRSZXN1bHQubmV4dFRhc2s7XG5cbiAgICAgICAgdGhpcy5hZGRMb2coJ2luZm8nLCBg8J+TiyBUYXNrICR7dGFza0NvdW50fTogJHt0YXNrLmFjdGl2aXR5VHlwZX0gKCR7dGFzay5hY3Rpdml0eU5hbWUgfHwgdGFzay5hY3Rpdml0eUlkfSlgLCB0YXNrKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEV4ZWN1dGUgZnJvbnRlbmQgdGFza1xuICAgICAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYOKaoSBFeGVjdXRpbmcgdGFzazogJHt0YXNrLmFjdGl2aXR5VHlwZX0uLi5gKTtcbiAgICAgICAgICAvLyBjb25zdCB7IG91dHB1dCwgb3V0Y29tZSB9ID0gYXdhaXQgdGhpcy53b3JrZmxvd01hbmFnZXIuZXhlY3V0ZSh0YXNrKTtcbiAgICAgICAgIC8vIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgYOKchSBUYXNrIGV4ZWN1dGVkLiBPdXRjb21lOiAke291dGNvbWV9YCwgeyBvdXRwdXQsIG91dGNvbWUgfSk7XG5cbiAgICAgICAgICAvLyBDb21wbGV0ZSB0YXNrIGFuZCBnZXQgbmV4dFxuICAgICAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYPCflIQgQ29tcGxldGluZyB0YXNrIGFuZCBnZXR0aW5nIG5leHQuLi5gKTtcbiAgICAgICAgICAvLyBjdXJyZW50UmVzdWx0ID0gYXdhaXQgdGhpcy53b3JrZmxvd01hbmFnZXIuY29tcGxldGUoXG4gICAgICAgICAgLy8gICBjdXJyZW50UmVzdWx0Lmluc3RhbmNlSWQhLFxuICAgICAgICAgIC8vICAgdGFzayxcbiAgICAgICAgICAvLyAgIG91dGNvbWUsXG4gICAgICAgICAgLy8gICBvdXRwdXRcbiAgICAgICAgICAvLyApO1xuXG4gICAgICAgICAgaWYgKCFjdXJyZW50UmVzdWx0Lmluc3RhbmNlSWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTG9nKCdlcnJvcicsICfinYwgVGFzayBjb21wbGV0aW9uIGZhaWxlZCcsIGN1cnJlbnRSZXN1bHQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGN1cnJlbnRSZXN1bHQubmV4dFRhc2spIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYOKeoe+4jyBOZXh0IHRhc2sgYXZhaWxhYmxlOiAke2N1cnJlbnRSZXN1bHQubmV4dFRhc2suYWN0aXZpdHlUeXBlfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZExvZygnc3VjY2VzcycsICfinIUgTm8gbW9yZSB0YXNrcy4gV29ya2Zsb3cgY29tcGxldGVkIScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHRoaXMuYWRkTG9nKCdlcnJvcicsIGDinYwgRXJyb3IgZXhlY3V0aW5nIHRhc2s6ICR7ZXJyb3IubWVzc2FnZX1gLCBlcnJvcik7XG4gICAgICAgICAgY3VycmVudFJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnRSZXN1bHQsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlIHx8ICdUYXNrIGV4ZWN1dGlvbiBmYWlsZWQnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDZhtiq24zYrNmHXG4gICAgICB0aGlzLndvcmtmbG93SW5zdGFuY2VTdGF0ZS5zZXQoe1xuICAgICAgICBzdGF0dXM6ICdmaW5pc2hlZCcsXG4gICAgICAgIGZpbmFsUmVzdWx0OiBjdXJyZW50UmVzdWx0LFxuICAgICAgICBzdGFydFRpbWU6IHRoaXMud29ya2Zsb3dJbnN0YW5jZVN0YXRlKCkuc3RhcnRUaW1lIHx8IG5ldyBEYXRlKCksXG4gICAgICAgIGVuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgIHJlc3VsdDogY3VycmVudFJlc3VsdCxcbiAgICAgICAgY3VycmVudFN0YXRlOiBjdXJyZW50UmVzdWx0LnN0YXRlPy5vdXRwdXQ/LlsndGFza1N0YXR1cyddIHx8IGN1cnJlbnRSZXN1bHQuc3RhdGU/Lm91dHB1dD8uWydjdXJyZW50U3RhdGUnXVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjdXJyZW50UmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBg4pyFIFdvcmtmbG93INio2Kcg2YXZiNmB2YLbjNiqINin2KzYsdinINi02K8hICgke3Rhc2tDb3VudH0gdGFzayhzKSBleGVjdXRlZClgLCBjdXJyZW50UmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkTG9nKCdlcnJvcicsICfinYwgV29ya2Zsb3cg2KjYpyDYrti32Kcg2YXZiNin2KzZhyDYtNivOiAnICsgKGN1cnJlbnRSZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKSwgY3VycmVudFJlc3VsdCk7XG4gICAgICB9XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixINin2KzYsdin24wgV29ya2Zsb3c6ICcgKyBlcnJvci5tZXNzYWdlLCBlcnJvcik7XG4gICAgICB0aGlzLndvcmtmbG93SW5zdGFuY2VTdGF0ZS5zZXQoe1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFydFRpbWU6IHRoaXMud29ya2Zsb3dJbnN0YW5jZVN0YXRlKCkuc3RhcnRUaW1lXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0V4ZWN1dGluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqINin2LbYp9mB2Ycg2qnYsdiv2YYg2YTYp9qvXG4gICAqL1xuICBhZGRMb2cobGV2ZWw6ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdlcnJvcicsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IGFueSkge1xuICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmV4ZWN1dGlvbkxvZ3MoKTtcbiAgICBsb2dzLnB1c2goe1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgbGV2ZWwsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZGF0YVxuICAgIH0pO1xuICAgIHRoaXMuZXhlY3V0aW9uTG9ncy5zZXQoWy4uLmxvZ3NdKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqINqp2b7bjCDaqdix2K/ZhiDZhtmF2YjZhtmHIGFjdGl2aXR5XG4gICAqL1xuICBjb3B5QWN0aXZpdHlUZW1wbGF0ZShhY3Rpdml0eTogQWN0aXZpdHlJbmZvKSB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB7XG4gICAgICBpZDogYCR7YWN0aXZpdHkudHlwZS50b0xvd2VyQ2FzZSgpfS0ke0RhdGUubm93KCl9YCxcbiAgICAgIHR5cGU6IGFjdGl2aXR5LnR5cGUsXG4gICAgICBuYW1lOiBhY3Rpdml0eS5uYW1lLFxuICAgICAgcHJvcGVydGllczoge31cbiAgICB9O1xuXG4gICAgLy8g2qnZvtuMINiv2LEg2qnZhNuM2b7igIzYqNmI2LHYr1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlLCBudWxsLCAyKSk7XG4gICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBg4pyC77iPIFRlbXBsYXRlINio2LHYp9uMICR7YWN0aXZpdHkubmFtZX0g2qnZvtuMINi02K8hYCk7XG4gIH1cblxuICAvKipcbiAgICog2YHYsdmF2Kog2qnYsdiv2YYgSlNPTlxuICAgKi9cbiAgZm9ybWF0SnNvbigpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0aGlzLndvcmtmbG93SnNvbigpKTtcbiAgICAgIHRoaXMud29ya2Zsb3dKc29uLnNldChKU09OLnN0cmluZ2lmeShwYXJzZWQsIG51bGwsIDIpKTtcbiAgICAgIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgJ+KcqCBKU09OINmB2LHZhdiqINi02K8nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixINmB2LHZhdiqOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICog2KjYp9iyINqp2LHYr9mGINiq2YbYuNuM2YXYp9iqIHdvcmtmbG93XG4gICAqL1xuICBvcGVuV29ya2Zsb3dTZXR0aW5ncygpIHtcbiAgICAvLyBFeHRyYWN0IHNldHRpbmdzIGZyb20gY3VycmVudCB3b3JrZmxvdyBKU09OXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtmbG93ID0gSlNPTi5wYXJzZSh0aGlzLndvcmtmbG93SnNvbigpKTtcblxuICAgICAgLy8gQ29udmVydCBvbGQgZm9ybWF0IGlucHV0cy9vdXRwdXRzIHRvIG5ldyBmb3JtYXRcbiAgICAgIGNvbnN0IGNvbnZlcnRJbnB1dCA9IChpbnB1dDogYW55KTogV29ya2Zsb3dJbnB1dCA9PiB7XG4gICAgICAgIGlmIChpbnB1dC5zY2hlbWEpIHtcbiAgICAgICAgICAvLyBBbHJlYWR5IGluIG5ldyBmb3JtYXRcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogaW5wdXQubmFtZSxcbiAgICAgICAgICAgIHRpdGxlOiBpbnB1dC50aXRsZSB8fCBpbnB1dC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgc2NoZW1hOiBpbnB1dC5zY2hlbWEsXG4gICAgICAgICAgICB2YWxpZGF0aW9uczogaW5wdXQudmFsaWRhdGlvbnNcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE9sZCBmb3JtYXQgLSBjb252ZXJ0XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGlucHV0Lm5hbWUsXG4gICAgICAgICAgICB0aXRsZTogaW5wdXQubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBpbnB1dC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICBkYXRhVHlwZTogaW5wdXQudHlwZU5hbWUgfHwgJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogaW5wdXQuZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmFsaWRhdGlvbnM6IGlucHV0LmlzUmVxdWlyZWQgPyBbeyBydWxlOiAncmVxdWlyZWQnIH1dIDogdW5kZWZpbmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgY29udmVydE91dHB1dCA9IChvdXRwdXQ6IGFueSk6IFdvcmtmbG93T3V0cHV0ID0+IHtcbiAgICAgICAgaWYgKG91dHB1dC5zY2hlbWEpIHtcbiAgICAgICAgICAvLyBBbHJlYWR5IGluIG5ldyBmb3JtYXRcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogb3V0cHV0Lm5hbWUsXG4gICAgICAgICAgICB0aXRsZTogb3V0cHV0LnRpdGxlIHx8IG91dHB1dC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IG91dHB1dC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNjaGVtYTogb3V0cHV0LnNjaGVtYVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT2xkIGZvcm1hdCAtIGNvbnZlcnRcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogb3V0cHV0Lm5hbWUsXG4gICAgICAgICAgICB0aXRsZTogb3V0cHV0Lm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3V0cHV0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgIGRhdGFUeXBlOiBvdXRwdXQudHlwZU5hbWUgfHwgJ3N0cmluZydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHtcbiAgICAgICAgZGVmaW5pdGlvbklkOiB3b3JrZmxvdy5kZWZpbml0aW9uSWQgfHwgd29ya2Zsb3cuaWQgfHwgJycsXG4gICAgICAgIG5hbWU6IHdvcmtmbG93Lm5hbWUgfHwgJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB3b3JrZmxvdy5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgaW5wdXRzOiAod29ya2Zsb3cuaW5wdXRzIHx8IFtdKS5tYXAoY29udmVydElucHV0KSxcbiAgICAgICAgb3V0cHV0czogKHdvcmtmbG93Lm91dHB1dHMgfHwgW10pLm1hcChjb252ZXJ0T3V0cHV0KSxcbiAgICAgICAgdmFyaWFibGVzOiB3b3JrZmxvdy52YXJpYWJsZXMgfHwgW10sXG4gICAgICAgIG91dGNvbWVzOiB3b3JrZmxvdy5vdXRjb21lcyB8fCBbJ0RvbmUnXSxcbiAgICAgICAgdXNhYmxlQXNBY3Rpdml0eTogd29ya2Zsb3cub3B0aW9ucz8udXNhYmxlQXNBY3Rpdml0eSB8fCBmYWxzZSxcbiAgICAgICAgYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93czogd29ya2Zsb3cub3B0aW9ucz8uYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93cyB8fCBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogd29ya2Zsb3cudmVyc2lvbiB8fCAxLFxuICAgICAgICBpc0xhdGVzdDogd29ya2Zsb3cuaXNMYXRlc3QgIT09IHVuZGVmaW5lZCA/IHdvcmtmbG93LmlzTGF0ZXN0IDogdHJ1ZSxcbiAgICAgICAgaXNQdWJsaXNoZWQ6IHdvcmtmbG93LmlzUHVibGlzaGVkIHx8IGZhbHNlLFxuICAgICAgICB0b29sVmVyc2lvbjogd29ya2Zsb3cudG9vbFZlcnNpb24gfHwgJzEuMC4wJyxcbiAgICAgICAgcHJvdmlkZXJOYW1lOiB3b3JrZmxvdy5wcm92aWRlck5hbWUgfHwgJ1dvcmtmbG93U3R1ZGlvJ1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHVzZSBkZWZhdWx0IHNldHRpbmdzXG4gICAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHtcbiAgICAgICAgZGVmaW5pdGlvbklkOiAnJyxcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgaW5wdXRzOiBbXSxcbiAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgIHZhcmlhYmxlczogW10sXG4gICAgICAgIG91dGNvbWVzOiBbJ0RvbmUnXSxcbiAgICAgICAgdXNhYmxlQXNBY3Rpdml0eTogZmFsc2UsXG4gICAgICAgIGF1dG9VcGRhdGVDb25zdW1pbmdXb3JrZmxvd3M6IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBpc0xhdGVzdDogdHJ1ZSxcbiAgICAgICAgaXNQdWJsaXNoZWQ6IGZhbHNlLFxuICAgICAgICB0b29sVmVyc2lvbjogJzEuMC4wJyxcbiAgICAgICAgcHJvdmlkZXJOYW1lOiAnV29ya2Zsb3dTdHVkaW8nXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zaG93V29ya2Zsb3dTZXR0aW5ncy5zZXQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICog2KjYs9iq2YYg2KrZhti424zZhdin2Kogd29ya2Zsb3dcbiAgICovXG4gIGNsb3NlV29ya2Zsb3dTZXR0aW5ncygpIHtcbiAgICB0aGlzLnNob3dXb3JrZmxvd1NldHRpbmdzLnNldChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICog2LDYrtuM2LHZhyDYqtmG2LjbjNmF2KfYqiB3b3JrZmxvd1xuICAgKi9cbiAgc2F2ZVdvcmtmbG93U2V0dGluZ3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtmbG93ID0gSlNPTi5wYXJzZSh0aGlzLndvcmtmbG93SnNvbigpKTtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy53b3JrZmxvd1NldHRpbmdzKCk7XG5cbiAgICAgIC8vIFVwZGF0ZSB3b3JrZmxvdyB3aXRoIHNldHRpbmdzIGFjY29yZGluZyB0byBXb3JrZmxvd0RlZmluaXRpb24gc3RydWN0dXJlXG4gICAgICB3b3JrZmxvdy5kZWZpbml0aW9uSWQgPSBzZXR0aW5ncy5kZWZpbml0aW9uSWQ7XG4gICAgICB3b3JrZmxvdy5uYW1lID0gc2V0dGluZ3MubmFtZTtcbiAgICAgIHdvcmtmbG93LmRlc2NyaXB0aW9uID0gc2V0dGluZ3MuZGVzY3JpcHRpb247XG4gICAgICB3b3JrZmxvdy52ZXJzaW9uID0gc2V0dGluZ3MudmVyc2lvbjtcbiAgICAgIHdvcmtmbG93LmlzTGF0ZXN0ID0gc2V0dGluZ3MuaXNMYXRlc3Q7XG4gICAgICB3b3JrZmxvdy5pc1B1Ymxpc2hlZCA9IHNldHRpbmdzLmlzUHVibGlzaGVkO1xuICAgICAgd29ya2Zsb3cudG9vbFZlcnNpb24gPSBzZXR0aW5ncy50b29sVmVyc2lvbjtcbiAgICAgIHdvcmtmbG93LnByb3ZpZGVyTmFtZSA9IHNldHRpbmdzLnByb3ZpZGVyTmFtZTtcblxuICAgICAgLy8gV29ya2Zsb3dDb21tb24gcHJvcGVydGllc1xuICAgICAgd29ya2Zsb3cub3B0aW9ucyA9IHtcbiAgICAgICAgdXNhYmxlQXNBY3Rpdml0eTogc2V0dGluZ3MudXNhYmxlQXNBY3Rpdml0eSxcbiAgICAgICAgYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93czogc2V0dGluZ3MuYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93c1xuICAgICAgfTtcbiAgICAgIHdvcmtmbG93LnZhcmlhYmxlcyA9IHNldHRpbmdzLnZhcmlhYmxlcy5tYXAodiA9PiAoe1xuICAgICAgICBpZDogdi5uYW1lLCAvLyBVc2UgbmFtZSBhcyBpZCBmb3Igbm93XG4gICAgICAgIG5hbWU6IHYubmFtZSxcbiAgICAgICAgdHlwZU5hbWU6IHYudHlwZU5hbWUsXG4gICAgICAgIHZhbHVlOiB2LnZhbHVlLFxuICAgICAgICBzdG9yYWdlRHJpdmVyVHlwZTogJ01lbW9yeScgLy8gRGVmYXVsdCBzdG9yYWdlIGRyaXZlclxuICAgICAgfSkpO1xuICAgICAgd29ya2Zsb3cuaW5wdXRzID0gc2V0dGluZ3MuaW5wdXRzLm1hcChpID0+ICh7XG4gICAgICAgIG5hbWU6IGkubmFtZSxcbiAgICAgICAgdGl0bGU6IGkudGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBpLmRlc2NyaXB0aW9uLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBkYXRhVHlwZTogaS5zY2hlbWEuZGF0YVR5cGUsXG4gICAgICAgICAgbnVsbGFibGU6IGkuc2NoZW1hLm51bGxhYmxlLFxuICAgICAgICAgIHJlYWRvbmx5OiBpLnNjaGVtYS5yZWFkb25seSxcbiAgICAgICAgICBoaWRkZW46IGkuc2NoZW1hLmhpZGRlbixcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IGkuc2NoZW1hLmRlZmF1bHRWYWx1ZVxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogaS52YWxpZGF0aW9uc1xuICAgICAgfSkpO1xuICAgICAgd29ya2Zsb3cub3V0cHV0cyA9IHNldHRpbmdzLm91dHB1dHMubWFwKG8gPT4gKHtcbiAgICAgICAgbmFtZTogby5uYW1lLFxuICAgICAgICB0aXRsZTogby50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG8uZGVzY3JpcHRpb24sXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiBvLnNjaGVtYS5kYXRhVHlwZVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICB3b3JrZmxvdy5vdXRjb21lcyA9IHNldHRpbmdzLm91dGNvbWVzO1xuICAgICAgd29ya2Zsb3cuY3VzdG9tUHJvcGVydGllcyA9IHdvcmtmbG93LmN1c3RvbVByb3BlcnRpZXMgfHwge307XG4gICAgICB3b3JrZmxvdy5pc1JlYWRvbmx5ID0gZmFsc2U7XG4gICAgICB3b3JrZmxvdy5pc1N5c3RlbSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLndvcmtmbG93SnNvbi5zZXQoSlNPTi5zdHJpbmdpZnkod29ya2Zsb3csIG51bGwsIDIpKTtcbiAgICAgIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgJ+KchSDYqtmG2LjbjNmF2KfYqiDZiNix2qkg2YHZhNmIINiw2K7bjNix2Ycg2LTYrycpO1xuICAgICAgdGhpcy5jbG9zZVdvcmtmbG93U2V0dGluZ3MoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixINiw2K7bjNix2Ycg2KrZhti424zZhdin2Ko6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHdvcmtmbG93INio2Ycg2YHYsdmF2KogRWxzYSBXb3JrZmxvdyBEZWZpbml0aW9uIHYzLjAuMFxuICAgKiBodHRwczovL2Vsc2F3b3JrZmxvd3MuaW8vc2NoZW1hcy93b3JrZmxvdy1kZWZpbml0aW9uL3YzLjAuMC9zY2hlbWEuanNvblxuICAgKi9cbiAgZXhwb3J0V29ya2Zsb3dEZWZpbml0aW9uKCk6IGFueSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdvcmtmbG93ID0gSlNPTi5wYXJzZSh0aGlzLndvcmtmbG93SnNvbigpKTtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy53b3JrZmxvd1NldHRpbmdzKCk7XG5cbiAgICAgIC8vIENyZWF0ZSBFbHNhIFdvcmtmbG93IERlZmluaXRpb24gdjMuMC4wIHN0cnVjdHVyZVxuICAgICAgY29uc3QgZGVmaW5pdGlvbjogYW55ID0ge1xuICAgICAgICAvLyBWZXJzaW9uZWRFbnRpdHkgZmllbGRzXG4gICAgICAgIGlkOiB3b3JrZmxvdy5pZCB8fCB0aGlzLmdlbmVyYXRlSWQoKSxcbiAgICAgICAgdmVyc2lvbjogc2V0dGluZ3MudmVyc2lvbixcbiAgICAgICAgaXNMYXRlc3Q6IHNldHRpbmdzLmlzTGF0ZXN0LFxuICAgICAgICBpc1B1Ymxpc2hlZDogc2V0dGluZ3MuaXNQdWJsaXNoZWQsXG5cbiAgICAgICAgLy8gSWRlbnRpZmljYXRpb24gZmllbGRzXG4gICAgICAgIGRlZmluaXRpb25JZDogc2V0dGluZ3MuZGVmaW5pdGlvbklkIHx8IHdvcmtmbG93LmlkIHx8IHRoaXMuZ2VuZXJhdGVJZCgpLFxuICAgICAgICBuYW1lOiBzZXR0aW5ncy5uYW1lIHx8IHdvcmtmbG93Lm5hbWUgfHwgJ1VudGl0bGVkIFdvcmtmbG93JyxcbiAgICAgICAgZGVzY3JpcHRpb246IHNldHRpbmdzLmRlc2NyaXB0aW9uIHx8IHdvcmtmbG93LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICB0b29sVmVyc2lvbjogc2V0dGluZ3MudG9vbFZlcnNpb24gfHwgJzMuMC4wJyxcblxuICAgICAgICAvLyBNYXRlcmlhbGl6YXRpb24gZmllbGRzXG4gICAgICAgIHByb3ZpZGVyTmFtZTogc2V0dGluZ3MucHJvdmlkZXJOYW1lIHx8ICdBQ29yZVgnLFxuICAgICAgICBtYXRlcmlhbGl6ZXJDb250ZXh0OiB7XG4gICAgICAgICAgbWF0ZXJpYWxpemVyTmFtZTogJ0pzb24nLFxuICAgICAgICAgIC8vIFN0b3JlIHRoZSByb290IGFjdGl2aXR5IGFzIEpTT04gc3RyaW5nXG4gICAgICAgICAgc3RyaW5nRGF0YTogSlNPTi5zdHJpbmdpZnkod29ya2Zsb3cucm9vdClcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBXb3JrZmxvd0NvbW1vbiBmaWVsZHNcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHVzYWJsZUFzQWN0aXZpdHk6IHNldHRpbmdzLnVzYWJsZUFzQWN0aXZpdHkgfHwgZmFsc2UsXG4gICAgICAgICAgYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93czogc2V0dGluZ3MuYXV0b1VwZGF0ZUNvbnN1bWluZ1dvcmtmbG93cyB8fCBmYWxzZVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFZhcmlhYmxlcyBhcnJheVxuICAgICAgICB2YXJpYWJsZXM6IHNldHRpbmdzLnZhcmlhYmxlcy5tYXAodiA9PiAoe1xuICAgICAgICAgIGlkOiB2Lm5hbWUsXG4gICAgICAgICAgbmFtZTogdi5uYW1lLFxuICAgICAgICAgIHR5cGVOYW1lOiB2LnR5cGVOYW1lLFxuICAgICAgICAgIHZhbHVlOiB2LnZhbHVlLFxuICAgICAgICAgIHN0b3JhZ2VEcml2ZXJUeXBlOiAnTWVtb3J5J1xuICAgICAgICB9KSksXG5cbiAgICAgICAgLy8gSW5wdXRzIGFycmF5XG4gICAgICAgIGlucHV0czogc2V0dGluZ3MuaW5wdXRzLm1hcChpID0+ICh7XG4gICAgICAgICAgbmFtZTogaS5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBpLnRpdGxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBpLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgZGF0YVR5cGU6IGkuc2NoZW1hLmRhdGFUeXBlLFxuICAgICAgICAgICAgbnVsbGFibGU6IGkuc2NoZW1hLm51bGxhYmxlLFxuICAgICAgICAgICAgcmVhZG9ubHk6IGkuc2NoZW1hLnJlYWRvbmx5LFxuICAgICAgICAgICAgaGlkZGVuOiBpLnNjaGVtYS5oaWRkZW4sXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGkuc2NoZW1hLmRlZmF1bHRWYWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmFsaWRhdGlvbnM6IGkudmFsaWRhdGlvbnMgfHwgW11cbiAgICAgICAgfSkpLFxuXG4gICAgICAgIC8vIE91dHB1dHMgYXJyYXlcbiAgICAgICAgb3V0cHV0czogc2V0dGluZ3Mub3V0cHV0cy5tYXAobyA9PiAoe1xuICAgICAgICAgIG5hbWU6IG8ubmFtZSxcbiAgICAgICAgICB0aXRsZTogby50aXRsZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogby5kZXNjcmlwdGlvbixcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiBvLnNjaGVtYS5kYXRhVHlwZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpLFxuXG4gICAgICAgIC8vIE91dGNvbWVzIGFycmF5XG4gICAgICAgIG91dGNvbWVzOiBzZXR0aW5ncy5vdXRjb21lcyB8fCBbJ0RvbmUnXSxcblxuICAgICAgICAvLyBDdXN0b20gcHJvcGVydGllc1xuICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzOiB3b3JrZmxvdy5jdXN0b21Qcm9wZXJ0aWVzIHx8IHt9LFxuXG4gICAgICAgIC8vIEZsYWdzXG4gICAgICAgIGlzUmVhZG9ubHk6IGZhbHNlLFxuICAgICAgICBpc1N5c3RlbTogZmFsc2UsXG5cbiAgICAgICAgLy8gUm9vdCBhY3Rpdml0eSAoZGlyZWN0IHJlZmVyZW5jZSBmb3IgRWxzYSBjb21wYXRpYmlsaXR5KVxuICAgICAgICByb290OiB3b3JrZmxvdy5yb290XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixIGV4cG9ydDogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINiv2KfZhtmE2YjYryBXb3JrZmxvd0RlZmluaXRpb24g2KjZhyDYtdmI2LHYqiBKU09OIGZpbGVcbiAgICovXG4gIGRvd25sb2FkV29ya2Zsb3dEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmV4cG9ydFdvcmtmbG93RGVmaW5pdGlvbigpO1xuICAgIGlmICghZGVmaW5pdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShkZWZpbml0aW9uLCBudWxsLCAyKV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9IGAke2RlZmluaXRpb24uZGVmaW5pdGlvbklkIHx8ICd3b3JrZmxvdyd9LXYke2RlZmluaXRpb24udmVyc2lvbn0uanNvbmA7XG4gICAgbGluay5jbGljaygpO1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcblxuICAgIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgYPCfk6UgV29ya2Zsb3cgRGVmaW5pdGlvbiDYr9in2YbZhNmI2K8g2LTYrzogJHtsaW5rLmRvd25sb2FkfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB3Zi0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7XG4gIH1cblxuICAvKipcbiAgICog2KrYutuM24zYsSDYqtioIHNldHRpbmdzXG4gICAqL1xuICBzd2l0Y2hTZXR0aW5nc1RhYih0YWI6IFNldHRpbmdzVGFiKSB7XG4gICAgdGhpcy5hY3RpdmVTZXR0aW5nc1RhYi5zZXQodGFiKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PSBXb3JrZmxvdyBJbnB1dHMgTWFuYWdlbWVudCA9PT09PT09PT09PT1cblxuICBhZGRXb3JrZmxvd0lucHV0KCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy53b3JrZmxvd1NldHRpbmdzKCk7XG4gICAgc2V0dGluZ3MuaW5wdXRzLnB1c2goe1xuICAgICAgbmFtZTogYGlucHV0JHtzZXR0aW5ncy5pbnB1dHMubGVuZ3RoICsgMX1gLFxuICAgICAgdGl0bGU6IGBJbnB1dCAke3NldHRpbmdzLmlucHV0cy5sZW5ndGggKyAxfWAsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzY2hlbWE6IHtcbiAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHZhbGlkYXRpb25zOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHsgLi4uc2V0dGluZ3MgfSk7XG4gIH1cblxuICByZW1vdmVXb3JrZmxvd0lucHV0KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIHNldHRpbmdzLmlucHV0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoeyAuLi5zZXR0aW5ncyB9KTtcbiAgfVxuXG4gIHVwZGF0ZVdvcmtmbG93SW5wdXQoaW5kZXg6IG51bWJlciwgZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy53b3JrZmxvd1NldHRpbmdzKCk7XG4gICAgY29uc3QgaW5wdXQgPSBzZXR0aW5ncy5pbnB1dHNbaW5kZXhdO1xuXG4gICAgaWYgKGZpZWxkID09PSAnc2NoZW1hJykge1xuICAgICAgLy8gRm9yIG5lc3RlZCBzY2hlbWEgdXBkYXRlc1xuICAgICAgKGlucHV0IGFzIGFueSlbZmllbGRdID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChmaWVsZC5zdGFydHNXaXRoKCdzY2hlbWEuJykpIHtcbiAgICAgIC8vIEZvciBuZXN0ZWQgc2NoZW1hIHByb3BlcnRpZXMgbGlrZSAnc2NoZW1hLmRhdGFUeXBlJ1xuICAgICAgY29uc3Qgc2NoZW1hRmllbGQgPSBmaWVsZC5yZXBsYWNlKCdzY2hlbWEuJywgJycpO1xuICAgICAgaWYgKCFpbnB1dC5zY2hlbWEpIHtcbiAgICAgICAgaW5wdXQuc2NoZW1hID0geyBkYXRhVHlwZTogJ3N0cmluZycgfTtcbiAgICAgIH1cbiAgICAgIChpbnB1dC5zY2hlbWEgYXMgYW55KVtzY2hlbWFGaWVsZF0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgKGlucHV0IGFzIGFueSlbZmllbGRdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgdXBkYXRlV29ya2Zsb3dJbnB1dFNjaGVtYShpbmRleDogbnVtYmVyLCBzY2hlbWFGaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBjb25zdCBpbnB1dCA9IHNldHRpbmdzLmlucHV0c1tpbmRleF07XG4gICAgaWYgKCFpbnB1dC5zY2hlbWEpIHtcbiAgICAgIGlucHV0LnNjaGVtYSA9IHsgZGF0YVR5cGU6ICdzdHJpbmcnIH07XG4gICAgfVxuICAgIChpbnB1dC5zY2hlbWEgYXMgYW55KVtzY2hlbWFGaWVsZF0gPSB2YWx1ZTtcbiAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHsgLi4uc2V0dGluZ3MgfSk7XG4gIH1cblxuICB1cGRhdGVXb3JrZmxvd0lucHV0VmFsaWRhdGlvbihpbmRleDogbnVtYmVyLCBpc1JlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBjb25zdCBpbnB1dCA9IHNldHRpbmdzLmlucHV0c1tpbmRleF07XG4gICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgIGlmICghaW5wdXQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgaW5wdXQudmFsaWRhdGlvbnMgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5wdXQudmFsaWRhdGlvbnMuc29tZSh2ID0+IHYucnVsZSA9PT0gJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgaW5wdXQudmFsaWRhdGlvbnMucHVzaCh7IHJ1bGU6ICdyZXF1aXJlZCcgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LnZhbGlkYXRpb25zID0gaW5wdXQudmFsaWRhdGlvbnM/LmZpbHRlcih2ID0+IHYucnVsZSAhPT0gJ3JlcXVpcmVkJyk7XG4gICAgICBpZiAoaW5wdXQudmFsaWRhdGlvbnM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpbnB1dC52YWxpZGF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgZ2V0SW5wdXRJc1JlcXVpcmVkKGlucHV0OiBXb3JrZmxvd0lucHV0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlucHV0LnZhbGlkYXRpb25zPy5zb21lKHYgPT4gdi5ydWxlID09PSAncmVxdWlyZWQnKSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PSBXb3JrZmxvdyBPdXRwdXRzIE1hbmFnZW1lbnQgPT09PT09PT09PT09XG5cbiAgYWRkV29ya2Zsb3dPdXRwdXQoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBzZXR0aW5ncy5vdXRwdXRzLnB1c2goe1xuICAgICAgbmFtZTogYG91dHB1dCR7c2V0dGluZ3Mub3V0cHV0cy5sZW5ndGggKyAxfWAsXG4gICAgICB0aXRsZTogYE91dHB1dCAke3NldHRpbmdzLm91dHB1dHMubGVuZ3RoICsgMX1gLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgc2NoZW1hOiB7XG4gICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoeyAuLi5zZXR0aW5ncyB9KTtcbiAgfVxuXG4gIHJlbW92ZVdvcmtmbG93T3V0cHV0KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIHNldHRpbmdzLm91dHB1dHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHsgLi4uc2V0dGluZ3MgfSk7XG4gIH1cblxuICB1cGRhdGVXb3JrZmxvd091dHB1dChpbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBzZXR0aW5ncy5vdXRwdXRzW2luZGV4XTtcblxuICAgIGlmIChmaWVsZC5zdGFydHNXaXRoKCdzY2hlbWEuJykpIHtcbiAgICAgIC8vIEZvciBuZXN0ZWQgc2NoZW1hIHByb3BlcnRpZXMgbGlrZSAnc2NoZW1hLmRhdGFUeXBlJ1xuICAgICAgY29uc3Qgc2NoZW1hRmllbGQgPSBmaWVsZC5yZXBsYWNlKCdzY2hlbWEuJywgJycpO1xuICAgICAgaWYgKCFvdXRwdXQuc2NoZW1hKSB7XG4gICAgICAgIG91dHB1dC5zY2hlbWEgPSB7IGRhdGFUeXBlOiAnc3RyaW5nJyB9O1xuICAgICAgfVxuICAgICAgKG91dHB1dC5zY2hlbWEgYXMgYW55KVtzY2hlbWFGaWVsZF0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgKG91dHB1dCBhcyBhbnkpW2ZpZWxkXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoeyAuLi5zZXR0aW5ncyB9KTtcbiAgfVxuXG4gIHVwZGF0ZVdvcmtmbG93T3V0cHV0U2NoZW1hKGluZGV4OiBudW1iZXIsIHNjaGVtYUZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIGNvbnN0IG91dHB1dCA9IHNldHRpbmdzLm91dHB1dHNbaW5kZXhdO1xuICAgIGlmICghb3V0cHV0LnNjaGVtYSkge1xuICAgICAgb3V0cHV0LnNjaGVtYSA9IHsgZGF0YVR5cGU6ICdzdHJpbmcnIH07XG4gICAgfVxuICAgIChvdXRwdXQuc2NoZW1hIGFzIGFueSlbc2NoZW1hRmllbGRdID0gdmFsdWU7XG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09IFdvcmtmbG93IFZhcmlhYmxlcyBNYW5hZ2VtZW50ID09PT09PT09PT09PVxuXG4gIGFkZFdvcmtmbG93VmFyaWFibGUoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBzZXR0aW5ncy52YXJpYWJsZXMucHVzaCh7XG4gICAgICBuYW1lOiBgdmFyaWFibGUke3NldHRpbmdzLnZhcmlhYmxlcy5sZW5ndGggKyAxfWAsXG4gICAgICB0eXBlTmFtZTogJ3N0cmluZycsXG4gICAgICB2YWx1ZTogJycsXG4gICAgICBkZXNjcmlwdGlvbjogJydcbiAgICB9KTtcbiAgICB0aGlzLndvcmtmbG93U2V0dGluZ3Muc2V0KHsgLi4uc2V0dGluZ3MgfSk7XG4gIH1cblxuICByZW1vdmVXb3JrZmxvd1ZhcmlhYmxlKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIHNldHRpbmdzLnZhcmlhYmxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMud29ya2Zsb3dTZXR0aW5ncy5zZXQoeyAuLi5zZXR0aW5ncyB9KTtcbiAgfVxuXG4gIHVwZGF0ZVdvcmtmbG93VmFyaWFibGUoaW5kZXg6IG51bWJlciwgZmllbGQ6IGtleW9mIFdvcmtmbG93VmFyaWFibGUsIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMud29ya2Zsb3dTZXR0aW5ncygpO1xuICAgIChzZXR0aW5ncy52YXJpYWJsZXNbaW5kZXhdIGFzIGFueSlbZmllbGRdID0gdmFsdWU7XG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqINio2YfigIzYsdmI2LLYsdiz2KfZhtuMIG91dGNvbWVzINin2LIgc3RyaW5nXG4gICAqL1xuICB1cGRhdGVPdXRjb21lcyhvdXRjb21lc1N0cmluZzogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLndvcmtmbG93U2V0dGluZ3MoKTtcbiAgICBzZXR0aW5ncy5vdXRjb21lcyA9IG91dGNvbWVzU3RyaW5nXG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLm1hcChvID0+IG8udHJpbSgpKVxuICAgICAgLmZpbHRlcihvID0+IG8ubGVuZ3RoID4gMCk7XG4gICAgdGhpcy53b3JrZmxvd1NldHRpbmdzLnNldCh7IC4uLnNldHRpbmdzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqINm+2KfaqSDaqdix2K/ZhiDZhNin2q/igIzZh9inXG4gICAqL1xuICBjbGVhckxvZ3MoKSB7XG4gICAgdGhpcy5leGVjdXRpb25Mb2dzLnNldChbXSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT0gVmlzdWFsIERlc2lnbmVyIE1ldGhvZHMgPT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqINiq2LrbjNuM2LEg2KrYqFxuICAgKi9cbiAgc3dpdGNoVGFiKHRhYjogRWRpdG9yVGFiKSB7XG4gICAgaWYgKHRhYiA9PT0gJ3Zpc3VhbCcgJiYgdGhpcy5hY3RpdmVUYWIoKSA9PT0gJ2pzb24nKSB7XG4gICAgICAvLyDYqtio2K/bjNmEIEpTT04g2KjZhyBWaXN1YWxcbiAgICAgIHRoaXMuanNvblRvVmlzdWFsKCk7XG4gICAgfSBlbHNlIGlmICh0YWIgPT09ICdqc29uJyAmJiB0aGlzLmFjdGl2ZVRhYigpID09PSAndmlzdWFsJykge1xuICAgICAgLy8g2KrYqNiv24zZhCBWaXN1YWwg2KjZhyBKU09OXG4gICAgICB0aGlzLnZpc3VhbFRvSnNvbigpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZVRhYi5zZXQodGFiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYp9mG2KrYrtin2KggTm9kZVxuICAgKi9cbiAgc2VsZWN0Tm9kZUJ5SWQobm9kZTogVmlzdWFsTm9kZSkge1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNldChub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYrdiw2YEgTm9kZVxuICAgKi9cbiAgZGVsZXRlTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy52aXN1YWxOb2RlcygpLmZpbHRlcihuID0+IG4uaWQgIT09IG5vZGVJZCk7XG4gICAgLy8g2K3YsNmBINin2KrYtdin2YTYp9iqINio2Ycg2KfbjNmGINmG2YjYr1xuICAgIG5vZGVzLmZvckVhY2gobiA9PiB7XG4gICAgICBuLmNvbm5lY3Rpb25zID0gbi5jb25uZWN0aW9ucy5maWx0ZXIoYyA9PiBjICE9PSBub2RlSWQpO1xuICAgIH0pO1xuICAgIHRoaXMudmlzdWFsTm9kZXMuc2V0KG5vZGVzKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZSgpPy5pZCA9PT0gbm9kZUlkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZXQobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRMb2coJ2luZm8nLCBg8J+Xke+4jyBOb2RlINit2LDZgSDYtNivYCk7XG4gIH1cblxuICAvKipcbiAgICog2KfYqti12KfZhCDYr9mIIE5vZGUg2KjYpyBvdXRjb21lINmF2LTYrti1XG4gICAqL1xuICBjb25uZWN0Tm9kZXMoZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZywgb3V0Y29tZT86IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy52aXN1YWxOb2RlcygpO1xuICAgIGNvbnN0IGZyb21Ob2RlSW5kZXggPSBub2Rlcy5maW5kSW5kZXgobiA9PiBuLmlkID09PSBmcm9tSWQpO1xuICAgIGNvbnN0IHRvTm9kZSA9IG5vZGVzLmZpbmQobiA9PiBuLmlkID09PSB0b0lkKTtcblxuICAgIGlmIChmcm9tTm9kZUluZGV4ICE9PSAtMSAmJiB0b05vZGUpIHtcbiAgICAgIGNvbnN0IGZyb21Ob2RlID0gbm9kZXNbZnJvbU5vZGVJbmRleF07XG5cbiAgICAgIC8vIFVzZSBvdXRjb21lLWJhc2VkIGNvbm5lY3Rpb25zIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKG91dGNvbWUgJiYgZnJvbU5vZGUub3V0Y29tZXMgJiYgZnJvbU5vZGUub3V0Y29tZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBvdXRjb21lQ29ubmVjdGlvbnMgPSBmcm9tTm9kZS5vdXRjb21lQ29ubmVjdGlvbnMgfHwgW107XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvdXRjb21lIGFscmVhZHkgaGFzIGEgY29ubmVjdGlvblxuICAgICAgICBjb25zdCBleGlzdGluZ0Nvbm5lY3Rpb24gPSBvdXRjb21lQ29ubmVjdGlvbnMuZmluZChjID0+IGMub3V0Y29tZSA9PT0gb3V0Y29tZSk7XG4gICAgICAgIGlmIChleGlzdGluZ0Nvbm5lY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmFkZExvZygnd2FybmluZycsIGDimqDvuI8gT3V0Y29tZSBcIiR7b3V0Y29tZX1cIiDZgtio2YTYp9mLINmF2KrYtdmEINi02K/ZhyDYp9iz2KpgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgbmV3IG91dGNvbWUgY29ubmVjdGlvblxuICAgICAgICBjb25zdCB1cGRhdGVkTm9kZXMgPSBbLi4ubm9kZXNdO1xuICAgICAgICB1cGRhdGVkTm9kZXNbZnJvbU5vZGVJbmRleF0gPSB7XG4gICAgICAgICAgLi4uZnJvbU5vZGUsXG4gICAgICAgICAgb3V0Y29tZUNvbm5lY3Rpb25zOiBbLi4ub3V0Y29tZUNvbm5lY3Rpb25zLCB7IG91dGNvbWUsIHRhcmdldE5vZGVJZDogdG9JZCB9XSxcbiAgICAgICAgICBjb25uZWN0aW9uczogWy4uLmZyb21Ob2RlLmNvbm5lY3Rpb25zLCB0b0lkXSAvLyBLZWVwIGZvciBiYWNrd2FyZCBjb21wYXRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnZpc3VhbE5vZGVzLnNldCh1cGRhdGVkTm9kZXMpO1xuICAgICAgICB0aGlzLmFkZExvZygnc3VjY2VzcycsIGDwn5SXICR7ZnJvbU5vZGUubmFtZX0gWyR7b3V0Y29tZX1dIOKGkiAke3RvTm9kZS5uYW1lfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2ltcGxlIGNvbm5lY3Rpb24gKG5vIG91dGNvbWVzKVxuICAgICAgICBpZiAoIWZyb21Ob2RlLmNvbm5lY3Rpb25zLmluY2x1ZGVzKHRvSWQpKSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZE5vZGVzID0gWy4uLm5vZGVzXTtcbiAgICAgICAgICB1cGRhdGVkTm9kZXNbZnJvbU5vZGVJbmRleF0gPSB7XG4gICAgICAgICAgICAuLi5mcm9tTm9kZSxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zOiBbLi4uZnJvbU5vZGUuY29ubmVjdGlvbnMsIHRvSWRdXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMudmlzdWFsTm9kZXMuc2V0KHVwZGF0ZWROb2Rlcyk7XG4gICAgICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCBg8J+UlyAke2Zyb21Ob2RlLm5hbWV9INmF2KrYtdmEINi02K8g2KjZhyAke3RvTm9kZS5uYW1lfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWRkTG9nKCd3YXJuaW5nJywgJ+KaoO+4jyDYp9uM2YYg2KfYqti12KfZhCDYp9iyINmC2KjZhCDZiNis2YjYryDYr9in2LHYrycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkTG9nKCdlcnJvcicsICfinYwg2K7Yt9inINiv2LEg2KfbjNis2KfYryDYp9iq2LXYp9mEJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINmC2LfYuSDYp9iq2LXYp9mEICjYqNinINuM2Kcg2KjYr9mI2YYgb3V0Y29tZSlcbiAgICovXG4gIGRpc2Nvbm5lY3ROb2Rlcyhmcm9tSWQ6IHN0cmluZywgdG9JZDogc3RyaW5nLCBvdXRjb21lPzogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnZpc3VhbE5vZGVzKCk7XG4gICAgY29uc3QgZnJvbU5vZGVJbmRleCA9IG5vZGVzLmZpbmRJbmRleChuID0+IG4uaWQgPT09IGZyb21JZCk7XG5cbiAgICBpZiAoZnJvbU5vZGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGZyb21Ob2RlID0gbm9kZXNbZnJvbU5vZGVJbmRleF07XG4gICAgICBjb25zdCB1cGRhdGVkTm9kZXMgPSBbLi4ubm9kZXNdO1xuXG4gICAgICAvLyBSZW1vdmUgZnJvbSBvdXRjb21lIGNvbm5lY3Rpb25zIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG91dGNvbWUgJiYgZnJvbU5vZGUub3V0Y29tZUNvbm5lY3Rpb25zKSB7XG4gICAgICAgIHVwZGF0ZWROb2Rlc1tmcm9tTm9kZUluZGV4XSA9IHtcbiAgICAgICAgICAuLi5mcm9tTm9kZSxcbiAgICAgICAgICBvdXRjb21lQ29ubmVjdGlvbnM6IGZyb21Ob2RlLm91dGNvbWVDb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICBjID0+ICEoYy5vdXRjb21lID09PSBvdXRjb21lICYmIGMudGFyZ2V0Tm9kZUlkID09PSB0b0lkKVxuICAgICAgICAgICksXG4gICAgICAgICAgY29ubmVjdGlvbnM6IGZyb21Ob2RlLmNvbm5lY3Rpb25zLmZpbHRlcihjID0+IGMgIT09IHRvSWQpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaW1wbGUgZGlzY29ubmVjdFxuICAgICAgICB1cGRhdGVkTm9kZXNbZnJvbU5vZGVJbmRleF0gPSB7XG4gICAgICAgICAgLi4uZnJvbU5vZGUsXG4gICAgICAgICAgY29ubmVjdGlvbnM6IGZyb21Ob2RlLmNvbm5lY3Rpb25zLmZpbHRlcihjID0+IGMgIT09IHRvSWQpLFxuICAgICAgICAgIG91dGNvbWVDb25uZWN0aW9uczogZnJvbU5vZGUub3V0Y29tZUNvbm5lY3Rpb25zPy5maWx0ZXIoYyA9PiBjLnRhcmdldE5vZGVJZCAhPT0gdG9JZClcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQodXBkYXRlZE5vZGVzKTtcbiAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYOKcgu+4jyDYp9iq2LXYp9mEINmC2LfYuSDYtNivJHtvdXRjb21lID8gYCBbJHtvdXRjb21lfV1gIDogJyd9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINiq2KjYr9uM2YQgSlNPTiDYqNmHIFZpc3VhbFxuICAgKi9cbiAganNvblRvVmlzdWFsKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3b3JrZmxvdyA9IEpTT04ucGFyc2UodGhpcy53b3JrZmxvd0pzb24oKSk7XG4gICAgICBjb25zdCBub2RlczogVmlzdWFsTm9kZVtdID0gW107XG4gICAgICBsZXQgeVBvcyA9IDEwMDtcblxuICAgICAgLy8g2b7Ysdiv2KfYsti0IHJvb3QgYWN0aXZpdHlcbiAgICAgIGlmICh3b3JrZmxvdy5yb290KSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0FjdGl2aXR5VG9Ob2RlKHdvcmtmbG93LnJvb3QsIG5vZGVzLCAxMDAsIHlQb3MpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnZpc3VhbE5vZGVzLnNldChub2Rlcyk7XG4gICAgICB0aGlzLmFkZExvZygnc3VjY2VzcycsICfinIUgSlNPTiDYqNmHIFZpc3VhbCDYqtio2K/bjNmEINi02K8nKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MINiu2LfYpyDYr9ixINiq2KjYr9uM2YQ6ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog2b7Ysdiv2KfYsti0IEFjdGl2aXR5INio2YcgTm9kZSAocmVjdXJzaXZlKVxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzQWN0aXZpdHlUb05vZGUoXG4gICAgYWN0aXZpdHk6IGFueSxcbiAgICBub2RlczogVmlzdWFsTm9kZVtdLFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgcGFyZW50SWQ/OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBub2RlSWQgPSBhY3Rpdml0eS5pZCB8fCBgJHthY3Rpdml0eS50eXBlfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKX1gO1xuXG4gICAgLy8gR2V0IG91dGNvbWVzIGZvciB0aGlzIGFjdGl2aXR5IHR5cGUgKHVzZSBkZWZhdWx0IGZvciBub3csIHdpbGwgYmUgdXBkYXRlZCBhc3luYyBpZiBuZWVkZWQpXG4gICAgY29uc3Qgb3V0Y29tZXMgPSBbJ0RvbmUnXTsgLy8gRGVmYXVsdCBvdXRjb21lLCB3aWxsIGJlIHVwZGF0ZWQgd2hlbiBhY3Rpdml0eSBpbmZvIGlzIGxvYWRlZFxuXG4gICAgLy8gR2V0IG91dGNvbWVDb25uZWN0aW9ucyBmcm9tIGFjdGl2aXR5IGRlZmluaXRpb25cbiAgICBjb25zdCBvdXRjb21lQ29ubmVjdGlvbnMgPSBhY3Rpdml0eS5vdXRjb21lQ29ubmVjdGlvbnMgfHwgW107XG5cbiAgICAvLyBCdWlsZCBzaW1wbGUgY29ubmVjdGlvbnMgbGlzdCBmcm9tIG91dGNvbWVDb25uZWN0aW9ucyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGNvbnN0IGNvbm5lY3Rpb25zID0gb3V0Y29tZUNvbm5lY3Rpb25zLm1hcCgoY29ubjogYW55KSA9PiBjb25uLnRhcmdldE5vZGVJZCk7XG5cbiAgICBjb25zdCBub2RlOiBWaXN1YWxOb2RlID0ge1xuICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgIHR5cGU6IGFjdGl2aXR5LnR5cGUsXG4gICAgICBuYW1lOiBhY3Rpdml0eS5uYW1lIHx8IGFjdGl2aXR5LnR5cGUsXG4gICAgICBpY29uOiB0aGlzLmdldEljb25Gb3JBY3Rpdml0eVR5cGUoYWN0aXZpdHkudHlwZSksXG4gICAgICBwcm9wZXJ0aWVzOiBhY3Rpdml0eS5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgcG9zaXRpb246IHsgeCwgeSB9LFxuICAgICAgY29ubmVjdGlvbnM6IGNvbm5lY3Rpb25zLFxuICAgICAgb3V0Y29tZUNvbm5lY3Rpb25zOiBvdXRjb21lQ29ubmVjdGlvbnMsXG4gICAgICBvdXRjb21lczogb3V0Y29tZXNcbiAgICB9O1xuXG4gICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgIC8vINin2q/YsSBwYXJlbnQg2K/Yp9ix2K/YjCDYp9iq2LXYp9mEINio2LHZgtix2KfYsSDaqdmGICjYqNix2KfbjCBTZXF1ZW5jZSlcbiAgICBpZiAocGFyZW50SWQgJiYgIW91dGNvbWVDb25uZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2Rlcy5maW5kKG4gPT4gbi5pZCA9PT0gcGFyZW50SWQpO1xuICAgICAgaWYgKHBhcmVudE5vZGUgJiYgIXBhcmVudE5vZGUuY29ubmVjdGlvbnMuaW5jbHVkZXMobm9kZUlkKSkge1xuICAgICAgICBwYXJlbnROb2RlLmNvbm5lY3Rpb25zLnB1c2gobm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDZvtix2K/Yp9iy2LQgY2hpbGRyZW4gKNio2LHYp9uMIFNlcXVlbmNlKSAtINin2YXYpyDZgdmC2Lcg2Kfar9ixIG91dGNvbWVDb25uZWN0aW9ucyDZhtio2KfYtNivXG4gICAgaWYgKGFjdGl2aXR5LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoYWN0aXZpdHkuY2hpbGRyZW4pICYmICFvdXRjb21lQ29ubmVjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBsZXQgY2hpbGRZID0geTtcbiAgICAgIGFjdGl2aXR5LmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY2hpbGRZID0geSArIChpbmRleCAqIDEwMCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0FjdGl2aXR5VG9Ob2RlKGNoaWxkLCBub2RlcywgeCArIDI1MCwgY2hpbGRZLCBub2RlSWQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiDYqtio2K/bjNmEIFZpc3VhbCDYqNmHIEpTT05cbiAgICovXG4gIHZpc3VhbFRvSnNvbigpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLnZpc3VhbE5vZGVzKCk7XG5cbiAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5hZGRMb2coJ3dhcm5pbmcnLCAn4pqg77iPINmH24zahiBOb2RlINin24wg2YjYrNmI2K8g2YbYr9in2LHYrycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vINm+24zYr9inINqp2LHYr9mGIHJvb3Qgbm9kZSAobm9kZSDYqNiv2YjZhiBwYXJlbnQpXG4gICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMuZmluZFJvb3ROb2RlKG5vZGVzKTtcblxuICAgICAgaWYgKCFyb290Tm9kZSkge1xuICAgICAgICB0aGlzLmFkZExvZygnZXJyb3InLCAn4p2MIFJvb3QgTm9kZSDZvtuM2K/YpyDZhti02K8nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3b3JrZmxvdyA9IHtcbiAgICAgICAgaWQ6ICd2aXN1YWwtd29ya2Zsb3ctJyArIERhdGUubm93KCksXG4gICAgICAgIG5hbWU6ICdWaXN1YWwgV29ya2Zsb3cnLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICByb290OiB0aGlzLm5vZGVUb0FjdGl2aXR5KHJvb3ROb2RlLCBub2RlcylcbiAgICAgIH07XG5cbiAgICAgIHRoaXMud29ya2Zsb3dKc29uLnNldChKU09OLnN0cmluZ2lmeSh3b3JrZmxvdywgbnVsbCwgMikpO1xuICAgICAgdGhpcy5hZGRMb2coJ3N1Y2Nlc3MnLCAn4pyFIFZpc3VhbCDYqNmHIEpTT04g2KrYqNiv24zZhCDYtNivJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhpcy5hZGRMb2coJ2Vycm9yJywgJ+KdjCDYrti32Kcg2K/YsSDYqtio2K/bjNmEOiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINm+24zYr9inINqp2LHYr9mGIFJvb3QgTm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kUm9vdE5vZGUobm9kZXM6IFZpc3VhbE5vZGVbXSk6IFZpc3VhbE5vZGUgfCBudWxsIHtcbiAgICAvLyBOb2RlINin24wg2qnZhyDYqNmHINii2YYg2KfYtNin2LHZhyDZhti02K/Zh1xuICAgIGNvbnN0IGNvbm5lY3RlZElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIG5vZGVzLmZvckVhY2gobiA9PiBuLmNvbm5lY3Rpb25zLmZvckVhY2goYyA9PiBjb25uZWN0ZWRJZHMuYWRkKGMpKSk7XG5cbiAgICBjb25zdCByb290Tm9kZXMgPSBub2Rlcy5maWx0ZXIobiA9PiAhY29ubmVjdGVkSWRzLmhhcyhuLmlkKSk7XG4gICAgcmV0dXJuIHJvb3ROb2Rlc1swXSB8fCBub2Rlc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYqtio2K/bjNmEIE5vZGUg2KjZhyBBY3Rpdml0eSAocmVjdXJzaXZlKVxuICAgKi9cbiAgcHJpdmF0ZSBub2RlVG9BY3Rpdml0eShub2RlOiBWaXN1YWxOb2RlLCBhbGxOb2RlczogVmlzdWFsTm9kZVtdKTogYW55IHtcbiAgICBjb25zdCBhY3Rpdml0eTogYW55ID0ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBub2RlLnByb3BlcnRpZXNcbiAgICB9O1xuXG4gICAgLy8g2Kfar9ixIGNoaWxkcmVuINiv2KfYsdivIChjb25uZWN0aW9ucylcbiAgICBpZiAobm9kZS5jb25uZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY29ubmVjdGlvbnNcbiAgICAgICAgLm1hcChjb25uSWQgPT4gYWxsTm9kZXMuZmluZChuID0+IG4uaWQgPT09IGNvbm5JZCkpXG4gICAgICAgIC5maWx0ZXIobiA9PiBuICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoY2hpbGROb2RlID0+IHRoaXMubm9kZVRvQWN0aXZpdHkoY2hpbGROb2RlISwgYWxsTm9kZXMpKTtcblxuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYWN0aXZpdHkuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aXZpdHk7XG4gIH1cblxuICAvKipcbiAgICog2K/YsduM2KfZgdiqINii24zaqdmI2YYg2KjYsdin24wg2YbZiNi5IEFjdGl2aXR5XG4gICAqL1xuICBwcml2YXRlIGdldEljb25Gb3JBY3Rpdml0eVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpY29uTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNlcXVlbmNlJzogJ2ZhLWxpZ2h0IGZhLWxpc3Qtb2wnLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNob3ctY29uZmlybS1kaWFsb2cnOiAnZmEtbGlnaHQgZmEtcXVlc3Rpb24tY2lyY2xlJyxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpzaG93LWFsZXJ0LWRpYWxvZyc6ICdmYS1saWdodCBmYS1jaXJjbGUtaW5mbycsXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy10b2FzdCc6ICdmYS1saWdodCBmYS1iZWxsJyxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpzZXQtdmFyaWFibGUnOiAnZmEtbGlnaHQgZmEtdmFyaWFibGUnLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OmV4ZWN1dGUtcXVlcnknOiAnZmEtbGlnaHQgZmEtc2VhcmNoJyxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpleGVjdXRlLWNvbW1hbmQnOiAnZmEtbGlnaHQgZmEtYm9sdCcsXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6bmF2aWdhdGUnOiAnZmEtbGlnaHQgZmEtcm91dGUnLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OmRpc3BhdGNoLWV2ZW50JzogJ2ZhLWxpZ2h0IGZhLXBhcGVyLXBsYW5lJ1xuICAgIH07XG5cbiAgICByZXR1cm4gaWNvbk1hcFt0eXBlXSB8fCAnZmEtbGlnaHQgZmEtY2lyY2xlJztcbiAgfVxuXG4gIC8qKlxuICAgKiDYqNmH4oCM2LHZiNiy2LHYs9in2YbbjCBwcm9wZXJ0eSDZhtmI2K9cbiAgICovXG4gIHVwZGF0ZU5vZGVQcm9wZXJ0eShub2RlSWQ6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudmlzdWFsTm9kZXMoKTtcbiAgICBjb25zdCBub2RlSW5kZXggPSBub2Rlcy5maW5kSW5kZXgobiA9PiBuLmlkID09PSBub2RlSWQpO1xuXG4gICAgaWYgKG5vZGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tub2RlSW5kZXhdO1xuICAgICAgY29uc3QgdXBkYXRlZE5vZGVzID0gWy4uLm5vZGVzXTtcblxuICAgICAgXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgdXBkYXRlZE5vZGVzW25vZGVJbmRleF0gPSB7XG4gICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICBuYW1lOiB2YWx1ZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3UHJvcGVydGllcyA9IHtcbiAgICAgICAgICAuLi5ub2RlLnByb3BlcnRpZXMsXG4gICAgICAgICAgW3Byb3BlcnR5TmFtZV06IHZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IG5ld091dGNvbWVzID0gbm9kZS5vdXRjb21lcztcbiAgICAgICAgY29uc3Qgc2hvdWxkUmVjb21wdXRlT3V0Y29tZXMgPVxuICAgICAgICAgIChwcm9wZXJ0eU5hbWUgPT09ICdleHBlY3RlZFN0YXR1c0NvZGVzJyAmJiBub2RlLnR5cGUgPT09ICd3b3JrZmxvdy1hY3Rpdml0eTpodHRwLXJlcXVlc3QnKSB8fFxuICAgICAgICAgIChwcm9wZXJ0eU5hbWUgPT09ICdhY3Rpb25zJyAmJiBub2RlLnR5cGUgPT09ICd3b3JrZmxvdy1hY3Rpdml0eTpodW1hbi10YXNrJyk7XG4gICAgICAgIGlmIChzaG91bGRSZWNvbXB1dGVPdXRjb21lcykge1xuICAgICAgICAgIHRoaXMuZmluZEFjdGl2aXR5SW5mbyhub2RlLnR5cGUpLnRoZW4oYWN0aXZpdHlJbmZvID0+IHtcbiAgICAgICAgICAgIGlmIChhY3Rpdml0eUluZm8pIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcHV0ZWRPdXRjb21lcyA9IHRoaXMuY29tcHV0ZU91dGNvbWVzKGFjdGl2aXR5SW5mbywgbmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWROb2RlcyA9IHRoaXMudmlzdWFsTm9kZXMoKTtcbiAgICAgICAgICAgICAgY29uc3Qgbm9kZUlkeCA9IHVwZGF0ZWROb2Rlcy5maW5kSW5kZXgobiA9PiBuLmlkID09PSBub2RlSWQpO1xuICAgICAgICAgICAgICBpZiAobm9kZUlkeCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkTm9kZXNbbm9kZUlkeF0gPSB7XG4gICAgICAgICAgICAgICAgICAuLi51cGRhdGVkTm9kZXNbbm9kZUlkeF0sXG4gICAgICAgICAgICAgICAgICBvdXRjb21lczogY29tcHV0ZWRPdXRjb21lc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQoWy4uLnVwZGF0ZWROb2Rlc10pO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYPCflIQgT3V0Y29tZXMgdXBkYXRlZDogWyR7Y29tcHV0ZWRPdXRjb21lcy5qb2luKCcsICcpfV1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZWROb2Rlc1tub2RlSW5kZXhdID0ge1xuICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgcHJvcGVydGllczogbmV3UHJvcGVydGllcyxcbiAgICAgICAgICBvdXRjb21lczogbmV3T3V0Y29tZXNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQodXBkYXRlZE5vZGVzKTtcblxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlKCk/LmlkID09PSBub2RlSWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuc2V0KHVwZGF0ZWROb2Rlc1tub2RlSW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog2b7bjNiv2Kcg2qnYsdiv2YYgYWN0aXZpdHkgaW5mbyDYqNixINin2LPYp9izIHR5cGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmluZEFjdGl2aXR5SW5mbyh0eXBlOiBzdHJpbmcpOiBQcm9taXNlPEFjdGl2aXR5SW5mbyB8IG51bGw+IHtcbiAgICB0cnkgeyBcbiAgICAgIGNvbnN0IGFjdGl2aXR5ID0gYXdhaXQgdGhpcy5hY3Rpdml0eURlZmluaXRpb25TZXJ2aWNlLmdldEFjdGl2aXR5QnlOYW1lKHR5cGUpO1xuICAgICAgaWYgKGFjdGl2aXR5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRBY3Rpdml0eURlZmluaXRpb25Ub0luZm8oYWN0aXZpdHkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBmaW5kIGFjdGl2aXR5IGluZm8gZm9yIHR5cGU6ICR7dHlwZX1gLCBlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINm+2KfaqSDaqdix2K/ZhiDZh9mF2Ycg2YbZiNiv2YfYp1xuICAgKi9cbiAgY2xlYXJDYW52YXMoKSB7XG4gICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQoW10pO1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNldChudWxsKTtcbiAgICB0aGlzLmFkZExvZygnaW5mbycsICfwn5eR77iPIENhbnZhcyDZvtin2qkg2LTYrycpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09IERyYWcgJiBEcm9wIE1ldGhvZHMgPT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqINi02LHZiNi5IGRyYWcg2KfYsiBhY3Rpdml0eSBsaXN0XG4gICAqL1xuICBvbkFjdGl2aXR5RHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIGFjdGl2aXR5OiBBY3Rpdml0eUluZm8pIHtcbiAgICB0aGlzLmRyYWdnZWRBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ2NvcHknO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCBhY3Rpdml0eS50eXBlKTtcbiAgICB9XG4gICAgdGhpcy5hZGRMb2coJ2luZm8nLCBg8J+OryDYr9ixINit2KfZhCBEcmFnOiAke2FjdGl2aXR5Lm5hbWV9YCk7XG4gIH1cblxuICAvKipcbiAgICog2b7Yp9uM2KfZhiBkcmFnINin2LIgYWN0aXZpdHkgbGlzdFxuICAgKi9cbiAgb25BY3Rpdml0eURyYWdFbmQoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIHRoaXMuZHJhZ2dlZEFjdGl2aXR5ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcmFnIG92ZXIg2LHZiNuMIENhbnZhc1xuICAgKi9cbiAgb25DYW52YXNEcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZHJhZyBsZWF2ZSDYp9iyIENhbnZhc1xuICAgKi9cbiAgb25DYW52YXNEcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIC8vINmF24zigIzYqtmI2KfZhiDYp9iyINin24zZhiDYqNix2KfbjCB2aXN1YWwgZmVlZGJhY2sg2KfYs9iq2YHYp9iv2Ycg2qnYsdivXG4gIH1cblxuICAvKipcbiAgICog2YXYrdin2LPYqNmHIG91dGNvbWVzINio2LHYp9uMINuM2qkgYWN0aXZpdHlcbiAgICovXG4gIGNvbXB1dGVPdXRjb21lcyhhY3Rpdml0eUluZm86IEFjdGl2aXR5SW5mbywgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZ1tdIHtcbiAgICAvLyBGb3IgSFRUUCBSZXF1ZXN0IHdpdGggZXhwZWN0ZWQgc3RhdHVzIGNvZGVzXG4gICAgaWYgKGFjdGl2aXR5SW5mby50eXBlID09PSAnd29ya2Zsb3ctYWN0aXZpdHk6aHR0cC1yZXF1ZXN0JyAmJiBwcm9wZXJ0aWVzWydleHBlY3RlZFN0YXR1c0NvZGVzJ10pIHtcbiAgICAgIGNvbnN0IGNvZGVzID0gQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzWydleHBlY3RlZFN0YXR1c0NvZGVzJ10pXG4gICAgICAgID8gcHJvcGVydGllc1snZXhwZWN0ZWRTdGF0dXNDb2RlcyddXG4gICAgICAgIDogW3Byb3BlcnRpZXNbJ2V4cGVjdGVkU3RhdHVzQ29kZXMnXV07XG5cbiAgICAgIGNvbnN0IHN0YXR1c091dGNvbWVzID0gY29kZXMubWFwKChjb2RlOiBudW1iZXIpID0+IGNvZGUudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm4gWy4uLnN0YXR1c091dGNvbWVzLCAnRG9uZScsICdGYWlsZWQnLCAnVGltZW91dCddO1xuICAgIH1cblxuICAgIC8vIEh1bWFuIFRhc2s6IG91dGNvbWVzIGZyb20gYWN0aW9ucyAocHJlZml4L3N1ZmZpeCkgaW4gd29ya2Zsb3cgZGVmaW5pdGlvblxuICAgIGlmIChhY3Rpdml0eUluZm8udHlwZSA9PT0gJ3dvcmtmbG93LWFjdGl2aXR5Omh1bWFuLXRhc2snICYmIHByb3BlcnRpZXNbJ2FjdGlvbnMnXSkge1xuICAgICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gcHJvcGVydGllc1snYWN0aW9ucyddO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0eXBlb2YgYWN0aW9ucyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGFjdGlvbnMpIDogYWN0aW9ucztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gcGFyc2VkPy5wcmVmaXggPz8gW107XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHBhcnNlZD8uc3VmZml4ID8/IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgWy4uLnByZWZpeCwgLi4uc3VmZml4XSkge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBpdGVtPy5jb21tYW5kPy5uYW1lID8/IGl0ZW0/Lm5hbWU7XG4gICAgICAgICAgaWYgKG5hbWUgJiYgdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmICFuYW1lcy5pbmNsdWRlcyhuYW1lKSkgbmFtZXMucHVzaChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGlnbm9yZSBwYXJzZSBlcnJvclxuICAgICAgfVxuICAgICAgaWYgKG5hbWVzLmxlbmd0aCA+IDApIHJldHVybiBuYW1lcztcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0OiBjaGVjayBhY3Rpdml0eSBpbmZvIGZvciBvdXRjb21lc1xuICAgIGNvbnN0IG91dGNvbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTppZic6IFsnVGhlbicsICdFbHNlJ10sXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy1jb25maXJtLWRpYWxvZyc6IFsnQ29uZmlybWVkJywgJ0NhbmNlbGxlZCddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNob3ctYWxlcnQtZGlhbG9nJzogWydEb25lJ10sXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6c2hvdy1mb3JtJzogWydTdWJtaXR0ZWQnLCAnQ2FuY2VsbGVkJ10sXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6aHVtYW4tdGFzayc6IFsnc3VibWl0JywgJ2NhbmNlbCddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5Omh0dHAtcmVxdWVzdCc6IFsnRG9uZScsICdGYWlsZWQnLCAnVGltZW91dCddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNlcXVlbmNlJzogWydEb25lJ10sXG4gICAgICAnd29ya2Zsb3ctYWN0aXZpdHk6Zm9yLWVhY2gnOiBbJ0RvbmUnXSxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTp3aGlsZSc6IFsnRG9uZSddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNldC12YXJpYWJsZSc6IFsnRG9uZSddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OmV4ZWN1dGUtcXVlcnknOiBbJ0RvbmUnXSxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpleGVjdXRlLWNvbW1hbmQnOiBbJ0RvbmUnXSxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpuYXZpZ2F0ZSc6IFsnRG9uZSddLFxuICAgICAgJ3dvcmtmbG93LWFjdGl2aXR5OnNob3ctdG9hc3QnOiBbJ0RvbmUnXSxcbiAgICAgICd3b3JrZmxvdy1hY3Rpdml0eTpkaXNwYXRjaC1ldmVudCc6IFsnRG9uZSddXG4gICAgfTtcblxuICAgIHJldHVybiBvdXRjb21lTWFwW2FjdGl2aXR5SW5mby50eXBlXSB8fCBbJ0RvbmUnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkcm9wINix2YjbjCBDYW52YXMgLSDYp9i22KfZgdmHINqp2LHYr9mGIGFjdGl2aXR5INis2K/bjNivXG4gICAqL1xuICBvbkNhbnZhc0Ryb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIXRoaXMuZHJhZ2dlZEFjdGl2aXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gNzU7IC8vIGNlbnRlciBub2RlXG4gICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCAtIDQwO1xuXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnZpc3VhbE5vZGVzKCk7XG4gICAgY29uc3QgZGVmYXVsdFByb3BzID0geyAuLi4odGhpcy5kcmFnZ2VkQWN0aXZpdHkuZGVmYXVsdFByb3BlcnRpZXMgfHwge30pIH07XG5cbiAgICBjb25zdCBuZXdOb2RlOiBWaXN1YWxOb2RlID0ge1xuICAgICAgaWQ6IGAke3RoaXMuZHJhZ2dlZEFjdGl2aXR5LnR5cGV9LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgdHlwZTogdGhpcy5kcmFnZ2VkQWN0aXZpdHkudHlwZSxcbiAgICAgIG5hbWU6IHRoaXMuZHJhZ2dlZEFjdGl2aXR5Lm5hbWUsXG4gICAgICBpY29uOiB0aGlzLmRyYWdnZWRBY3Rpdml0eS5pY29uLFxuICAgICAgcHJvcGVydGllczogZGVmYXVsdFByb3BzLFxuICAgICAgcG9zaXRpb246IHsgeDogTWF0aC5tYXgoMCwgeCksIHk6IE1hdGgubWF4KDAsIHkpIH0sXG4gICAgICBjb25uZWN0aW9uczogW10sXG4gICAgICBvdXRjb21lQ29ubmVjdGlvbnM6IFtdLFxuICAgICAgb3V0Y29tZXM6IHRoaXMuY29tcHV0ZU91dGNvbWVzKHRoaXMuZHJhZ2dlZEFjdGl2aXR5LCBkZWZhdWx0UHJvcHMpXG4gICAgfTtcblxuICAgIHRoaXMudmlzdWFsTm9kZXMuc2V0KFsuLi5ub2RlcywgbmV3Tm9kZV0pO1xuXG4gICAgY29uc3Qgb3V0Y29tZXNJbmZvID0gbmV3Tm9kZS5vdXRjb21lcyAmJiBuZXdOb2RlLm91dGNvbWVzLmxlbmd0aCA+IDFcbiAgICAgID8gYCB3aXRoICR7bmV3Tm9kZS5vdXRjb21lcy5sZW5ndGh9IG91dGNvbWVzIFske25ld05vZGUub3V0Y29tZXMuam9pbignLCAnKX1dYFxuICAgICAgOiAnJztcblxuICAgIHRoaXMuYWRkTG9nKCdzdWNjZXNzJywgYOKchSBBY3Rpdml0eSAke3RoaXMuZHJhZ2dlZEFjdGl2aXR5Lm5hbWV9INin2LbYp9mB2Ycg2LTYryR7b3V0Y29tZXNJbmZvfWApO1xuICAgIHRoaXMuZHJhZ2dlZEFjdGl2aXR5ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDYtNix2YjYuSBkcmFnINmG2YjYr1xuICAgKi9cbiAgb25Ob2RlRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIG5vZGU6IFZpc3VhbE5vZGUpIHtcbiAgICB0aGlzLmRyYWdnZWROb2RlID0gbm9kZTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMubm9kZURyYWdPZmZzZXQgPSB7XG4gICAgICB4OiBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgeTogZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wXG4gICAgfTtcblxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgICAgLy8gTWFrZSBkcmFnIGltYWdlIHRyYW5zcGFyZW50XG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGltZy5zcmMgPSAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3JztcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoaW1nLCAwLCAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog2K/YsSDYrdin2YQgZHJhZyDZhtmI2K9cbiAgICovXG4gIG9uTm9kZURyYWcoZXZlbnQ6IERyYWdFdmVudCwgbm9kZTogVmlzdWFsTm9kZSkge1xuICAgIGlmICghdGhpcy5kcmFnZ2VkTm9kZSB8fCBldmVudC5jbGllbnRYID09PSAwIHx8IGV2ZW50LmNsaWVudFkgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2FudmFzLWFyZWEnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWNhbnZhcykgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIHRoaXMubm9kZURyYWdPZmZzZXQueDtcbiAgICBjb25zdCB5ID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gdGhpcy5ub2RlRHJhZ09mZnNldC55O1xuXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnZpc3VhbE5vZGVzKCk7XG4gICAgY29uc3Qgbm9kZUluZGV4ID0gbm9kZXMuZmluZEluZGV4KG4gPT4gbi5pZCA9PT0gbm9kZS5pZCk7XG5cbiAgICBpZiAobm9kZUluZGV4ICE9PSAtMSkge1xuICAgICAgbm9kZXNbbm9kZUluZGV4XS5wb3NpdGlvbiA9IHtcbiAgICAgICAgeDogTWF0aC5tYXgoMCwgeCksXG4gICAgICAgIHk6IE1hdGgubWF4KDAsIHkpXG4gICAgICB9O1xuICAgICAgdGhpcy52aXN1YWxOb2Rlcy5zZXQoWy4uLm5vZGVzXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqINm+2KfbjNin2YYgZHJhZyDZhtmI2K9cbiAgICovXG4gIG9uTm9kZURyYWdFbmQoZXZlbnQ6IERyYWdFdmVudCwgbm9kZTogVmlzdWFsTm9kZSkge1xuICAgIHRoaXMuZHJhZ2dlZE5vZGUgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqINqp2YTbjNqpINix2YjbjCDaqdin2Ybaqdiq2YjYsSAtINio2LHYp9uMINin24zYrNin2K8g2KfYqti12KfZhCAo2KjYsdin24wgYWN0aXZpdGllcyDYqNinINuM2qkgb3V0Y29tZSlcbiAgICovXG4gIG9uQ29ubmVjdG9yQ2xpY2soZXZlbnQ6IEV2ZW50LCBub2RlOiBWaXN1YWxOb2RlLCB0eXBlOiAnaW4nIHwgJ291dCcpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghdGhpcy5jb25uZWN0aW9uU291cmNlKSB7XG4gICAgICAvLyDYp9mI2YTbjNmGINqp2YTbjNqpIC0g2LDYrtuM2LHZhyBzb3VyY2VcbiAgICAgIGlmICh0eXBlID09PSAnb3V0Jykge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25Tb3VyY2UgPSB7IG5vZGUsIHR5cGUgfTtcbiAgICAgICAgdGhpcy5hZGRMb2coJ2luZm8nLCBg8J+UlyDZhdmG2KjYuSDYp9iq2LXYp9mEINin2YbYqtiu2KfYqCDYtNivOiAke25vZGUubmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8g2K/ZiNmF24zZhiDaqdmE24zaqSAtINin24zYrNin2K8g2KfYqti12KfZhFxuICAgICAgaWYgKHR5cGUgPT09ICdpbicgJiYgdGhpcy5jb25uZWN0aW9uU291cmNlLm5vZGUuaWQgIT09IG5vZGUuaWQpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0Tm9kZXModGhpcy5jb25uZWN0aW9uU291cmNlLm5vZGUuaWQsIG5vZGUuaWQsIHRoaXMuY29ubmVjdGlvblNvdXJjZS5vdXRjb21lKTtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU291cmNlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkTG9nKCd3YXJuaW5nJywgJ+KaoO+4jyDYp9iq2LXYp9mEINmG2KfZhdi52KrYqNixIC0g2KfYqNiq2K/YpyDYsdmI24wgY29ubmVjdG9yINiu2LHZiNis24wg2Ygg2LPZvtizINmI2LHZiNiv24wg2qnZhNuM2qkg2qnZhtuM2K8nKTtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU291cmNlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog2qnZhNuM2qkg2LHZiNuMIG91dGNvbWUgY29ubmVjdG9yIC0g2KjYsdin24wgYWN0aXZpdGllcyDYqNinINqG2YbYryBvdXRjb21lXG4gICAqL1xuICBvbk91dGNvbWVDb25uZWN0b3JDbGljayhldmVudDogRXZlbnQsIG5vZGU6IFZpc3VhbE5vZGUsIG91dGNvbWU6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKCF0aGlzLmNvbm5lY3Rpb25Tb3VyY2UpIHtcbiAgICAgIC8vINin2YjZhNuM2YYg2qnZhNuM2qkgLSDYsNiu24zYsdmHIHNvdXJjZSDYqNinIG91dGNvbWVcbiAgICAgIHRoaXMuY29ubmVjdGlvblNvdXJjZSA9IHsgbm9kZSwgdHlwZTogJ291dCcsIG91dGNvbWUgfTtcbiAgICAgIHRoaXMuYWRkTG9nKCdpbmZvJywgYPCflJcg2YXZhtio2Lkg2KfYqti12KfZhCDYp9mG2KrYrtin2Kgg2LTYrzogJHtub2RlLm5hbWV9IFske291dGNvbWV9XWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZExvZygnd2FybmluZycsICfimqDvuI8g2YTYt9mB2KfZiyDYsdmI24wgaW5wdXQgY29ubmVjdG9yINuM2qkg2YbZiNivINiv24zar9ixINqp2YTbjNqpINqp2YbbjNivJyk7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25Tb3VyY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PSBVSSBNZXRob2RzID09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiDYqti624zbjNixINmI2LbYuduM2Kog2YbZhdin24zYtCBQcm9wZXJ0aWVzIFBhbmVsXG4gICAqL1xuICB0b2dnbGVQcm9wZXJ0aWVzUGFuZWwoKSB7XG4gICAgdGhpcy5zaG93UHJvcGVydGllc1BhbmVsLnNldCghdGhpcy5zaG93UHJvcGVydGllc1BhbmVsKCkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09IFRlbXBsYXRlIEhlbHBlciBNZXRob2RzID09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiDZvtuM2K/YpyDaqdix2K/ZhiBOb2RlINio2KcgSURcbiAgICovXG4gIGZpbmROb2RlQnlJZChub2RlSWQ6IHN0cmluZyk6IFZpc3VhbE5vZGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnZpc3VhbE5vZGVzKCkuZmluZChuID0+IG4uaWQgPT09IG5vZGVJZCk7XG4gIH1cblxuICAvKipcbiAgICog2KjYsdix2LPbjCDYp9uM2YbaqdmHINii24zYpyBwcm9wZXJ0aWVzINiu2KfZhNuMINin2LPYqiDbjNinINmG2YdcbiAgICovXG4gIGhhc1Byb3BlcnRpZXMocHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICog2K/Ys9iq2LHYs9uMINio2YcgT2JqZWN0INio2LHYp9uMINin2LPYqtmB2KfYr9mHINiv2LEgdGVtcGxhdGVcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBPYmplY3QgPSBPYmplY3Q7XG5cbiAgLyoqXG4gICAqINiv2LPYqtix2LPbjCDYqNmHIHR5cGVvZiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYr9ixIHRlbXBsYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHlwZW9mID0gKHZhbHVlOiBhbnkpID0+IHR5cGVvZiB2YWx1ZTtcblxuICAvKipcbiAgICog2K/Ys9iq2LHYs9uMINio2YcgSlNPTiDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYr9ixIHRlbXBsYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgSlNPTiA9IEpTT047XG5cbiAgLyoqXG4gICAqINiv2LHbjNin2YHYqiDYsdmG2q8g2KjYsSDYp9iz2KfYsyBvdXRjb21lXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0T3V0Y29tZUNvbG9yKG91dGNvbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sb3JNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnMjAwJzogJyMxMGI5ODEnLCAgICAgIC8vIEdyZWVuIC0gU3VjY2Vzc1xuICAgICAgJ0RvbmUnOiAnIzEwYjk4MScsICAgICAvLyBHcmVlbiAtIFN1Y2Nlc3NcbiAgICAgICdTdWNjZXNzJzogJyMxMGI5ODEnLCAgLy8gR3JlZW4gLSBTdWNjZXNzXG4gICAgICAnNDA0JzogJyNlZjQ0NDQnLCAgICAgIC8vIFJlZCAtIEVycm9yXG4gICAgICAnNTAwJzogJyNlZjQ0NDQnLCAgICAgIC8vIFJlZCAtIEVycm9yXG4gICAgICAnRmFpbGVkJzogJyNlZjQ0NDQnLCAgIC8vIFJlZCAtIEVycm9yXG4gICAgICAnRXJyb3InOiAnI2VmNDQ0NCcsICAgIC8vIFJlZCAtIEVycm9yXG4gICAgICAnVGltZW91dCc6ICcjZjU5ZTBiJywgIC8vIE9yYW5nZSAtIFdhcm5pbmdcbiAgICAgICdDYW5jZWxsZWQnOiAnI2Y1OWUwYicsLy8gT3JhbmdlIC0gV2FybmluZ1xuICAgICAgJ1RoZW4nOiAnIzNiODJmNicsICAgICAvLyBCbHVlIC0gSW5mb1xuICAgICAgJ0Vsc2UnOiAnIzY0NzQ4YicsICAgICAvLyBHcmF5XG4gICAgfTtcblxuICAgIHJldHVybiBjb2xvck1hcFtvdXRjb21lXSB8fCAnIzhiNWNmNic7IC8vIFB1cnBsZSAtIERlZmF1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiDYr9ix24zYp9mB2Kog2YbYp9mFINix2YbaryDYqNix2KfbjCBtYXJrZXIgSURcbiAgICovXG4gIHByb3RlY3RlZCBnZXRPdXRjb21lQ29sb3JOYW1lKG91dGNvbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKFsnMjAwJywgJ0RvbmUnLCAnU3VjY2VzcyddLmluY2x1ZGVzKG91dGNvbWUpKSB7XG4gICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgIH1cbiAgICBpZiAoWyc0MDQnLCAnNTAwJywgJ0ZhaWxlZCcsICdFcnJvciddLmluY2x1ZGVzKG91dGNvbWUpKSB7XG4gICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICB9XG4gICAgaWYgKFsnVGltZW91dCcsICdDYW5jZWxsZWQnXS5pbmNsdWRlcyhvdXRjb21lKSkge1xuICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgICB9XG4gICAgaWYgKFsnVGhlbiddLmluY2x1ZGVzKG91dGNvbWUpKSB7XG4gICAgICByZXR1cm4gJ2luZm8nO1xuICAgIH1cbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9XG5cbiAgLyoqXG4gICAqINio2YfigIzYsdmI2LLYsdiz2KfZhtuMIHByb3BlcnR5INio2KcgcGFyc2Ug2qnYsdiv2YYgSlNPTlxuICAgKi9cbiAgdXBkYXRlTm9kZVByb3BlcnR5SlNPTihub2RlSWQ6IHN0cmluZywgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGpzb25TdHJpbmc6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gICAgICB0aGlzLnVwZGF0ZU5vZGVQcm9wZXJ0eShub2RlSWQsIHByb3BlcnR5TmFtZSwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyDYp9qv2LEgSlNPTiDZhtin2YXYudiq2KjYsSDYqNmI2K/YjCDahtuM2LLbjCDZhtqp2YZcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBKU09OOicsIGpzb25TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8YXhwLXBhZ2UtbGF5b3V0PlxuICA8YXhwLWxheW91dC1zdGFydC1zaWRlPlxuICAgIDxheHAtYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlIChjYXRlZ29yeUNsaWNrKT1cIm9uQ2F0ZWdvcnlDbGljaygkZXZlbnQpXCJcbiAgICAgIChhY3Rpdml0eUNsaWNrKT1cIm9uQWN0aXZpdHlDbGljaygkZXZlbnQpXCI+PC9heHAtYWN0aXZpdHktY2F0ZWdvcmllcy10cmVlPlxuICA8L2F4cC1sYXlvdXQtc3RhcnQtc2lkZT5cblxuICA8YXhwLXBhZ2UtdG9vbGJhcj5cbiAgICA8YXhwLWxheW91dC1wcmVmaXg+XG4gICAgICA8IS0tIEVkaXRvciBUYWJzIC0tPlxuICAgICAgPGF4LWJ1dHRvbi1ncm91cCBjbGFzcz1cImF4LXNtXCIgW3NlbGVjdGlvbl09XCInc2luZ2xlJ1wiPlxuICAgICAgICA8YXgtYnV0dG9uLWdyb3VwLWl0ZW0gKG9uQ2xpY2spPVwic3dpdGNoVGFiKCdqc29uJylcIiBbc2VsZWN0ZWRdPVwiYWN0aXZlVGFiKCkgPT09ICdqc29uJ1wiPlxuICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWNvZGVcIj48L2k+XG4gICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby50ZXJtcy5qc29uLWVkaXRvcicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICA8L2F4LWJ1dHRvbi1ncm91cC1pdGVtPlxuICAgICAgICA8YXgtYnV0dG9uLWdyb3VwLWl0ZW0gKG9uQ2xpY2spPVwic3dpdGNoVGFiKCd2aXN1YWwnKVwiIFtzZWxlY3RlZF09XCJhY3RpdmVUYWIoKSA9PT0gJ3Zpc3VhbCdcIj5cbiAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1kaWFncmFtLXByb2plY3RcIj48L2k+XG4gICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby50ZXJtcy52aXN1YWwtZGVzaWduZXInIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgPC9heC1idXR0b24tZ3JvdXAtaXRlbT5cbiAgICAgIDwvYXgtYnV0dG9uLWdyb3VwPlxuICAgIDwvYXhwLWxheW91dC1wcmVmaXg+XG4gIDwvYXhwLXBhZ2UtdG9vbGJhcj5cblxuICA8YXhwLXBhZ2UtY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctc3R1ZGlvXCI+XG4gICAgICA8IS0tIE1haW4gTGF5b3V0IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInN0dWRpby1ib2R5XCIgW2NsYXNzLnByb3BlcnRpZXMtaGlkZGVuXT1cIiFzaG93UHJvcGVydGllc1BhbmVsKClcIj5cblxuICAgICAgICA8IS0tIEVkaXRvciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0dWRpby1lZGl0b3JcIj5cbiAgICAgICAgICA8IS0tIFRhYiBDb250ZW50IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgPCEtLSBKU09OIFRhYiAtLT5cbiAgICAgICAgICAgIEBpZiAoYWN0aXZlVGFiKCkgPT09ICdqc29uJykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdGFiXCI+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImpzb24tZWRpdG9yXCIgWyhuZ01vZGVsKV09XCJ3b3JrZmxvd0pzb25cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMuanNvbi1lZGl0b3IucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiPlxuICAgICAgICAgICAgPC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIFZpc3VhbCBUYWIgLS0+XG4gICAgICAgICAgICBAaWYgKGFjdGl2ZVRhYigpID09PSAndmlzdWFsJykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpc3VhbC10YWJcIj5cbiAgICAgICAgICAgICAgPCEtLSBDYW52YXMgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aXN1YWwtY2FudmFzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbnZhcy10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidG9vbC1idG5cIiAoY2xpY2spPVwiY2xlYXJDYW52YXMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMuY2FudmFzLXRvb2xiYXIuY2xlYXItY2FudmFzLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0b29sLWJ0blwiIChjbGljayk9XCJ2aXN1YWxUb0pzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMuY2FudmFzLXRvb2xiYXIuY29udmVydC10by1qc29uLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtY29kZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1saWdodGJ1bGJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLmNhbnZhcy10b29sYmFyLmhpbnQnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW52YXMtYXJlYVwiIChkcm9wKT1cIm9uQ2FudmFzRHJvcCgkZXZlbnQpXCIgKGRyYWdvdmVyKT1cIm9uQ2FudmFzRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uQ2FudmFzRHJhZ0xlYXZlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gU1ZHIGZvciBDb25uZWN0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjb25uZWN0aW9ucy1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE91dGNvbWUtYmFzZWQgQ29ubmVjdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgdmlzdWFsTm9kZXMoKTsgdHJhY2sgbm9kZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUub3V0Y29tZUNvbm5lY3Rpb25zICYmIG5vZGUub3V0Y29tZUNvbm5lY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY29ubiBvZiBub2RlLm91dGNvbWVDb25uZWN0aW9uczsgdHJhY2sgY29ubi50YXJnZXROb2RlSWQgKyBjb25uLm91dGNvbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgQGxldCB0YXJnZXROb2RlID0gZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgQGlmICh0YXJnZXROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwib3V0Y29tZS1jb25uZWN0aW9uLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpbmUgW2F0dHIueDFdPVwibm9kZS5wb3NpdGlvbi54ICsgNzVcIiBbYXR0ci55MV09XCJub2RlLnBvc2l0aW9uLnkgKyA4MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci54Ml09XCJ0YXJnZXROb2RlLnBvc2l0aW9uLnggKyA3NVwiIFthdHRyLnkyXT1cInRhcmdldE5vZGUucG9zaXRpb24ueSAtIDUwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29ubmVjdGlvbi1saW5lIG91dGNvbWUtbGluZVwiIFthdHRyLnN0cm9rZV09XCJnZXRPdXRjb21lQ29sb3IoY29ubi5vdXRjb21lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIubWFya2VyLWVuZF09XCIndXJsKCNhcnJvd2hlYWQtJyArIGdldE91dGNvbWVDb2xvck5hbWUoY29ubi5vdXRjb21lKSArICcpJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIChkYmxjbGljayk9XCJkaXNjb25uZWN0Tm9kZXMobm9kZS5pZCwgY29ubi50YXJnZXROb2RlSWQsIGNvbm4ub3V0Y29tZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ091dGNvbWU6ICcgKyBjb25uLm91dGNvbWUgKyAnIChEb3VibGUtY2xpY2sgdG8gcmVtb3ZlKSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aXRsZT57eyBjb25uLm91dGNvbWUgfX0g4oaSIHt7IHRhcmdldE5vZGUubmFtZSB9fTwvdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saW5lPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IFthdHRyLnhdPVwiKG5vZGUucG9zaXRpb24ueCArIHRhcmdldE5vZGUucG9zaXRpb24ueCkgLyAyICsgNzVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIueV09XCIobm9kZS5wb3NpdGlvbi55ICsgdGFyZ2V0Tm9kZS5wb3NpdGlvbi55KSAvIDIgKyAxNVwiIGNsYXNzPVwiY29ubmVjdGlvbi1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIFthdHRyLmZpbGxdPVwiZ2V0T3V0Y29tZUNvbG9yKGNvbm4ub3V0Y29tZSlcIiBmb250LXNpemU9XCIxMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodD1cIjYwMFwiIHBvaW50ZXItZXZlbnRzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29ubi5vdXRjb21lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTaW1wbGUgQ29ubmVjdGlvbnMgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIC0tPlxuICAgICAgICAgICAgICAgICAgICBAZm9yICh0YXJnZXRJZCBvZiBub2RlLmNvbm5lY3Rpb25zOyB0cmFjayB0YXJnZXRJZCkge1xuICAgICAgICAgICAgICAgICAgICBAbGV0IHRhcmdldE5vZGUgPSBmaW5kTm9kZUJ5SWQodGFyZ2V0SWQpO1xuICAgICAgICAgICAgICAgICAgICBAaWYgKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpbmUgW2F0dHIueDFdPVwibm9kZS5wb3NpdGlvbi54ICsgNzVcIiBbYXR0ci55MV09XCJub2RlLnBvc2l0aW9uLnkgKyA0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIueDJdPVwidGFyZ2V0Tm9kZS5wb3NpdGlvbi54ICsgNzVcIiBbYXR0ci55Ml09XCJ0YXJnZXROb2RlLnBvc2l0aW9uLnkgLSA1MFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb25uZWN0aW9uLWxpbmVcIiBzdHJva2U9XCIjNjQ3NDhiXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIG1hcmtlci1lbmQ9XCJ1cmwoI2Fycm93aGVhZC1kZWZhdWx0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIiAoZGJsY2xpY2spPVwiZGlzY29ubmVjdE5vZGVzKG5vZGUuaWQsIHRhcmdldElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEb3VibGUtY2xpY2sg2KjYsdin24wg2K3YsNmBINin2KrYtdin2YRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGl0bGU+RG91YmxlLWNsaWNrINio2LHYp9uMINit2LDZgTwvdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbGluZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBBcnJvdyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyIGlkPVwiYXJyb3doZWFkLWRlZmF1bHRcIiBtYXJrZXJXaWR0aD1cIjEwXCIgbWFya2VySGVpZ2h0PVwiMTBcIiByZWZYPVwiOVwiIHJlZlk9XCIzXCIgb3JpZW50PVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMCAwLCAxMCAzLCAwIDZcIiBmaWxsPVwiIzY0NzQ4YlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXJrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdWNjZXNzIEFycm93IChHcmVlbikgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hcmtlciBpZD1cImFycm93aGVhZC1zdWNjZXNzXCIgbWFya2VyV2lkdGg9XCIxMFwiIG1hcmtlckhlaWdodD1cIjEwXCIgcmVmWD1cIjlcIiByZWZZPVwiM1wiIG9yaWVudD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjAgMCwgMTAgMywgMCA2XCIgZmlsbD1cIiMxMGI5ODFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXJyb3IgQXJyb3cgKFJlZCkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hcmtlciBpZD1cImFycm93aGVhZC1lcnJvclwiIG1hcmtlcldpZHRoPVwiMTBcIiBtYXJrZXJIZWlnaHQ9XCIxMFwiIHJlZlg9XCI5XCIgcmVmWT1cIjNcIiBvcmllbnQ9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9XCIwIDAsIDEwIDMsIDAgNlwiIGZpbGw9XCIjZWY0NDQ0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFdhcm5pbmcgQXJyb3cgKE9yYW5nZSkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hcmtlciBpZD1cImFycm93aGVhZC13YXJuaW5nXCIgbWFya2VyV2lkdGg9XCIxMFwiIG1hcmtlckhlaWdodD1cIjEwXCIgcmVmWD1cIjlcIiByZWZZPVwiM1wiIG9yaWVudD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjAgMCwgMTAgMywgMCA2XCIgZmlsbD1cIiNmNTllMGJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5mbyBBcnJvdyAoQmx1ZSkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hcmtlciBpZD1cImFycm93aGVhZC1pbmZvXCIgbWFya2VyV2lkdGg9XCIxMFwiIG1hcmtlckhlaWdodD1cIjEwXCIgcmVmWD1cIjlcIiByZWZZPVwiM1wiIG9yaWVudD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz1cIjAgMCwgMTAgMywgMCA2XCIgZmlsbD1cIiMzYjgyZjZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWFya2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBOb2RlcyAtLT5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgdmlzdWFsTm9kZXMoKTsgdHJhY2sgbm9kZS5pZCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZpc3VhbC1ub2RlXCIgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGVkTm9kZSgpPy5pZCA9PT0gbm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIm5vZGUucG9zaXRpb24ueFwiIFtzdHlsZS50b3AucHhdPVwibm9kZS5wb3NpdGlvbi55XCIgW2F0dHIuZGF0YS1ub2RlLWlkXT1cIm5vZGUuaWRcIlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgKGRyYWdzdGFydCk9XCJvbk5vZGVEcmFnU3RhcnQoJGV2ZW50LCBub2RlKVwiIChkcmFnKT1cIm9uTm9kZURyYWcoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uTm9kZURyYWdFbmQoJGV2ZW50LCBub2RlKVwiIChjbGljayk9XCJzZWxlY3ROb2RlQnlJZChub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5vZGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibm9kZS1kZWxldGVcIiAoY2xpY2spPVwiZGVsZXRlTm9kZShub2RlLmlkKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kZS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IG5vZGUudHlwZSB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RlLWNvbm5lY3RvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIElucHV0IENvbm5lY3RvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdG9yIGNvbm5lY3Rvci1pblwiIHRpdGxlPVwiSW5wdXRcIiAoY2xpY2spPVwib25Db25uZWN0b3JDbGljaygkZXZlbnQsIG5vZGUsICdpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIE91dHB1dCBDb25uZWN0b3JzIC0gTXVsdGlwbGUgb3V0Y29tZXMgc3VwcG9ydCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUub3V0Y29tZXMgJiYgbm9kZS5vdXRjb21lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBNdWx0aXBsZSBvdXRjb21lczogc2hvdyBzZXBhcmF0ZSBwb3J0IGZvciBlYWNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdXRjb21lcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG91dGNvbWUgb2Ygbm9kZS5vdXRjb21lczsgdHJhY2sgb3V0Y29tZTsgbGV0IGlkeCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dGNvbWUtY29ubmVjdG9yXCIgW2NsYXNzLmFjdGl2ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvblNvdXJjZT8ubm9kZT8uaWQgPT09IG5vZGUuaWQgJiYgY29ubmVjdGlvblNvdXJjZT8ub3V0Y29tZSA9PT0gb3V0Y29tZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW2F0dHIuZGF0YS1vdXRjb21lXT1cIm91dGNvbWVcIiBbdGl0bGVdPVwiJ091dHB1dDogJyArIG91dGNvbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25PdXRjb21lQ29ubmVjdG9yQ2xpY2soJGV2ZW50LCBub2RlLCBvdXRjb21lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm91dGNvbWUtbGFiZWxcIj57eyBvdXRjb21lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0Y29tZS1kb3RcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2luZ2xlIG91dGNvbWU6IHNob3cgc2ltcGxlIG91dHB1dCBjb25uZWN0b3IgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3RvciBjb25uZWN0b3Itb3V0XCIgW2NsYXNzLmFjdGl2ZV09XCJjb25uZWN0aW9uU291cmNlPy5ub2RlPy5pZCA9PT0gbm9kZS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk91dHB1dFwiIChjbGljayk9XCJvbkNvbm5lY3RvckNsaWNrKCRldmVudCwgbm9kZSwgJ291dCcpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmICh2aXN1YWxOb2RlcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbnZhcy1lbXB0eS1zdGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWRpYWdyYW0tcHJvamVjdFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHA+QWN0aXZpdHkg2YfYpyDYsdinINin2LIg2LPYp9uM2K/YqNin2LEg2KjZhyDYp9uM2YbYrNinINio2qnYtNuM2K88L3A+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD7bjNinINin2LIg2KrYqCBKU09O2Iwgd29ya2Zsb3cg2LHYpyBpbXBvcnQg2qnZhtuM2K88L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gUHJvcGVydGllcyBQYW5lbCAtLT5cbiAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZE5vZGUoKSAmJiBzaG93UHJvcGVydGllc1BhbmVsKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb3BlcnRpZXMtcGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc2xpZGVyc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxoND57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImhlYWRlci1idG5cIiAoY2xpY2spPVwidG9nZ2xlUHJvcGVydGllc1BhbmVsKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5hY3Rpb25zLmNsb3NlLXBhbmVsJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1hbmdsZS1yaWdodFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJoZWFkZXItYnRuXCIgKGNsaWNrKT1cInNlbGVjdGVkTm9kZS5zZXQobnVsbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5hY3Rpb25zLmNsb3NlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydHktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5maWVsZHMuaWQnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX06PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cInNlbGVjdGVkTm9kZSgpIS5pZFwiIGRpc2FibGVkIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmZpZWxkcy50eXBlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJzZWxlY3RlZE5vZGUoKSEudHlwZVwiIGRpc2FibGVkIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmZpZWxkcy5uYW1lJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJzZWxlY3RlZE5vZGUoKSEubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZU5vZGVQcm9wZXJ0eShzZWxlY3RlZE5vZGUoKSEuaWQsICduYW1lJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGg1PvCfk6Uge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuc2VjdGlvbnMuaW5wdXQtcHJvcGVydGllcycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwcm9wZXJ0aWVzLWhpbnRcIj57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5zZWN0aW9ucy5pbnB1dC1wcm9wZXJ0aWVzJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19IC0g2YXZgtin2K/bjNixINix2Kcg2KrZhti424zZhSDaqdmG24zYrzwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgIEBpZiAoaGFzUHJvcGVydGllcyhzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllcykpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1lZGl0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoa2V5IG9mIE9iamVjdC5rZXlzKHNlbGVjdGVkTm9kZSgpIS5wcm9wZXJ0aWVzKTsgdHJhY2sga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvcGVydHktdHlwZS1iYWRnZVwiPnt7IHR5cGVvZiBzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHR5cGVvZiBzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IFt2YWx1ZV09XCJzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldXCIgKGNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTm9kZVByb3BlcnR5KHNlbGVjdGVkTm9kZSgpIS5pZCwga2V5LCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlID09PSAndHJ1ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cInRydWVcIj5UcnVlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPkZhbHNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAodHlwZW9mIHNlbGVjdGVkTm9kZSgpIS5wcm9wZXJ0aWVzW2tleV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBbdmFsdWVdPVwic2VsZWN0ZWROb2RlKCkhLnByb3BlcnRpZXNba2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlTm9kZVByb3BlcnR5KHNlbGVjdGVkTm9kZSgpIS5pZCwga2V5LCArJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVwiM1wiIFt2YWx1ZV09XCJKU09OLnN0cmluZ2lmeShzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldLCBudWxsLCAyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlTm9kZVByb3BlcnR5SlNPTihzZWxlY3RlZE5vZGUoKSEuaWQsIGtleSwgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJzZWxlY3RlZE5vZGUoKSEucHJvcGVydGllc1trZXldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVOb2RlUHJvcGVydHkoc2VsZWN0ZWROb2RlKCkhLmlkLCBrZXksICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuby1wcm9wZXJ0aWVzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmVtcHR5LXN0YXRlcy5uby1wcm9wZXJ0aWVzJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGg1PvCfk6Qge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuc2VjdGlvbnMub3V0cHV0LXZhcmlhYmxlcycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwcm9wZXJ0aWVzLWhpbnRcIj7Yrtix2YjYrNuMINmIINmF2KrYutuM2LHZh9inPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmZpZWxkcy5vdXRwdXQtdmFyaWFibGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX06PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCLZhdir2YTYp9mLIHJlc3VsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkTm9kZSgpIS5wcm9wZXJ0aWVzWydvdXRwdXRWYXJpYWJsZSddIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlTm9kZVByb3BlcnR5KHNlbGVjdGVkTm9kZSgpIS5pZCwgJ291dHB1dFZhcmlhYmxlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGg1PvCflJcge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuc2VjdGlvbnMuY29ubmVjdGlvbnMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvcGVydGllcy1oaW50XCI+2KfYqti12KfZhNin2Kog2KfbjNmGINmG2YjYrzwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gT3V0Y29tZS1iYXNlZCBDb25uZWN0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWROb2RlKCkhLm91dGNvbWVDb25uZWN0aW9ucyAmJiBzZWxlY3RlZE5vZGUoKSEub3V0Y29tZUNvbm5lY3Rpb25zIS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdGlvbnMtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjb25uIG9mIHNlbGVjdGVkTm9kZSgpIS5vdXRjb21lQ29ubmVjdGlvbnMhOyB0cmFjayBjb25uLnRhcmdldE5vZGVJZCArIGNvbm4ub3V0Y29tZSkge1xuICAgICAgICAgICAgICAgICAgICBAbGV0IHRhcmdldE5vZGUgPSBmaW5kTm9kZUJ5SWQoY29ubi50YXJnZXROb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICBAaWYgKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpb24taXRlbSBvdXRjb21lLWNvbm5lY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm91dGNvbWUtYmFkZ2VcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJnZXRPdXRjb21lQ29sb3IoY29ubi5vdXRjb21lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29ubi5vdXRjb21lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtYXJyb3ctcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdGFyZ2V0Tm9kZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZW1vdmUtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkaXNjb25uZWN0Tm9kZXMoc2VsZWN0ZWROb2RlKCkhLmlkLCBjb25uLnRhcmdldE5vZGVJZCwgY29ubi5vdXRjb21lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cItit2LDZgSDYp9iq2LXYp9mEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHNlbGVjdGVkTm9kZSgpIS5jb25uZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIFNpbXBsZSBDb25uZWN0aW9ucyAoZmFsbGJhY2spIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpb25zLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAodGFyZ2V0SWQgb2Ygc2VsZWN0ZWROb2RlKCkhLmNvbm5lY3Rpb25zOyB0cmFjayB0YXJnZXRJZCkge1xuICAgICAgICAgICAgICAgICAgICBAbGV0IHRhcmdldE5vZGUgPSBmaW5kTm9kZUJ5SWQodGFyZ2V0SWQpO1xuICAgICAgICAgICAgICAgICAgICBAaWYgKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbm5lY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtYXJyb3ctcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdGFyZ2V0Tm9kZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZW1vdmUtYnRuXCIgKGNsaWNrKT1cImRpc2Nvbm5lY3ROb2RlcyhzZWxlY3RlZE5vZGUoKSEuaWQsIHRhcmdldElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cItit2LDZgSDYp9iq2LXYp9mEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuby1wcm9wZXJ0aWVzXCI+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuZW1wdHktc3RhdGVzLm5vLWNvbm5lY3Rpb25zJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9wPlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEF2YWlsYWJsZSBPdXRjb21lcyBJbmZvIC0tPlxuICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZE5vZGUoKSEub3V0Y29tZXMgJiYgc2VsZWN0ZWROb2RlKCkhLm91dGNvbWVzIS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8aDU+8J+TpCB7eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLmNvbXBvbmVudHMucHJvcGVydGllcy1wYW5lbC5zZWN0aW9ucy5hdmFpbGFibGUtb3V0Y29tZXMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwicHJvcGVydGllcy1oaW50XCI+2K7YsdmI2KzbjOKAjNmH2KfbjCDZhdmI2KzZiNivINio2LHYp9uMINin2KrYtdin2YQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dGNvbWVzLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAob3V0Y29tZSBvZiBzZWxlY3RlZE5vZGUoKSEub3V0Y29tZXMhOyB0cmFjayBvdXRjb21lKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3V0Y29tZS10YWdcIiBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiZ2V0T3V0Y29tZUNvbG9yKG91dGNvbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvdXRjb21lLWRvdFwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImdldE91dGNvbWVDb2xvcihvdXRjb21lKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvdXRjb21lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWRpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGg1PvCfk50ge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5jb21wb25lbnRzLnByb3BlcnRpZXMtcGFuZWwuc2VjdGlvbnMucmF3LWpzb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2g1PlxuICAgICAgICAgICAgICAgICAgPHByZSBjbGFzcz1cInByb3BlcnRpZXMtanNvblwiPnt7IHNlbGVjdGVkTm9kZSgpIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gVG9nZ2xlIEJ1dHRvbiBmb3IgUHJvcGVydGllcyAod2hlbiBjbG9zZWQpIC0tPlxuICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkTm9kZSgpICYmICFzaG93UHJvcGVydGllc1BhbmVsKCkpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNpZGViYXItdG9nZ2xlLWJ0biByaWdodFwiIChjbGljayk9XCJ0b2dnbGVQcm9wZXJ0aWVzUGFuZWwoKVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uY29tcG9uZW50cy5wcm9wZXJ0aWVzLXBhbmVsLmFjdGlvbnMuc2hvdy1wYW5lbCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc2xpZGVyc1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gV29ya2Zsb3cgU2V0dGluZ3MgTW9kYWwgLS0+XG4gICAgICBAaWYgKHNob3dXb3JrZmxvd1NldHRpbmdzKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1tb2RhbC1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlV29ya2Zsb3dTZXR0aW5ncygpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1tb2RhbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8IS0tIE1vZGFsIEhlYWRlciAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtbW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtY29nXCI+PC9pPlxuICAgICAgICAgICAgICA8aDI+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2VXb3JrZmxvd1NldHRpbmdzKClcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBNb2RhbCBCb2R5IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICA8IS0tIFRhYnMgTmF2aWdhdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy10YWJzXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0YWItYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZXR0aW5nc1RhYigpID09PSAnZ2VuZXJhbCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hTZXR0aW5nc1RhYignZ2VuZXJhbCcpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnRhYnMuZ2VuZXJhbCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1idG5cIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNldHRpbmdzVGFiKCkgPT09ICdpbnB1dHMnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoU2V0dGluZ3NUYWIoJ2lucHV0cycpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1zaWduLWluXCI+PC9pPlxuICAgICAgICAgICAgICAgIHt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3MudGFicy5pbnB1dHMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93U2V0dGluZ3MoKS5pbnB1dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIj57eyB3b3JrZmxvd1NldHRpbmdzKCkuaW5wdXRzLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2V0dGluZ3NUYWIoKSA9PT0gJ291dHB1dHMnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoU2V0dGluZ3NUYWIoJ291dHB1dHMnKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc2lnbi1vdXRcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy50YWJzLm91dHB1dHMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93U2V0dGluZ3MoKS5vdXRwdXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlXCI+e3sgd29ya2Zsb3dTZXR0aW5ncygpLm91dHB1dHMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0YWItYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZXR0aW5nc1RhYigpID09PSAndmFyaWFibGVzJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFNldHRpbmdzVGFiKCd2YXJpYWJsZXMnKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtYm94XCI+PC9pPlxuICAgICAgICAgICAgICAgIHt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3MudGFicy52YXJpYWJsZXMnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93U2V0dGluZ3MoKS52YXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIj57eyB3b3JrZmxvd1NldHRpbmdzKCkudmFyaWFibGVzLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2V0dGluZ3NUYWIoKSA9PT0gJ2FkdmFuY2VkJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFNldHRpbmdzVGFiKCdhZHZhbmNlZCcpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jb2dcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy50YWJzLmFkdmFuY2VkJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVGFiIENvbnRlbnQgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtY29udGVudFwiPlxuICAgICAgICAgICAgICA8IS0tIEdlbmVyYWwgVGFiIC0tPlxuICAgICAgICAgICAgICBAaWYgKGFjdGl2ZVNldHRpbmdzVGFiKCkgPT09ICdnZW5lcmFsJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxoMz57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmdlbmVyYWwudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2gzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5nZW5lcmFsLmZpZWxkcy5uYW1lLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmdlbmVyYWwuZmllbGRzLm5hbWUucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS5uYW1lXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMuZ2VuZXJhbC5maWVsZHMuZGVmaW5pdGlvbi1pZC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0taW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5nZW5lcmFsLmZpZWxkcy5kZWZpbml0aW9uLWlkLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ3b3JrZmxvd1NldHRpbmdzKCkuZGVmaW5pdGlvbklkXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmdlbmVyYWwuZmllbGRzLmRlZmluaXRpb24taWQuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5nZW5lcmFsLmZpZWxkcy5kZXNjcmlwdGlvbi50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLXRleHRhcmVhXCIgcm93cz1cIjRcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5nZW5lcmFsLmZpZWxkcy5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwid29ya2Zsb3dTZXR0aW5ncygpLmRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICA8IS0tIElucHV0cyBUYWIgLS0+XG4gICAgICAgICAgICAgIEBpZiAoYWN0aXZlU2V0dGluZ3NUYWIoKSA9PT0gJ2lucHV0cycpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxoMz57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDM+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJhZGRXb3JrZmxvd0lucHV0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1wbHVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5hZGQtYnV0dG9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAod29ya2Zsb3dTZXR0aW5ncygpLmlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtaW5ib3hcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8cD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5lbXB0eS1zdGF0ZS50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvcD5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5lbXB0eS1zdGF0ZS5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGlucHV0IG9mIHdvcmtmbG93U2V0dGluZ3MoKS5pbnB1dHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tbnVtYmVyXCI+I3t7ICRpbmRleCArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlbW92ZS1idG5cIiAoY2xpY2spPVwicmVtb3ZlV29ya2Zsb3dJbnB1dCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5hY3Rpb25zLnJlbW92ZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10cmFzaFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5pbnB1dHMuZmllbGRzLm5hbWUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0taW5wdXRcIiBwbGFjZWhvbGRlcj1cInVzZXJOYW1lXCIgW3ZhbHVlXT1cImlucHV0Lm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVXb3JrZmxvd0lucHV0KCRpbmRleCwgJ25hbWUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5pbnB1dHMuZmllbGRzLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJVc2VyIE5hbWVcIiBbdmFsdWVdPVwiaW5wdXQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVXb3JrZmxvd0lucHV0KCRpbmRleCwgJ3RpdGxlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5maWVsZHMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMuaW5wdXRzLmZpZWxkcy5kZXNjcmlwdGlvbi1wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpbnB1dC5kZXNjcmlwdGlvbiB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVXb3JrZmxvd0lucHV0KCRpbmRleCwgJ2Rlc2NyaXB0aW9uJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5maWVsZHMuZGF0YS10eXBlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW3ZhbHVlXT1cImlucHV0LnNjaGVtYS5kYXRhVHlwZSB8fCAnc3RyaW5nJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVXb3JrZmxvd0lucHV0U2NoZW1hKCRpbmRleCwgJ2RhdGFUeXBlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic3RyaW5nXCI+U3RyaW5nPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm51bWJlclwiPk51bWJlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJvYmplY3RcIj5PYmplY3Q8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYXJyYXlcIj5BcnJheTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLmlucHV0cy5maWVsZHMuZGVmYXVsdC12YWx1ZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMuaW5wdXRzLmZpZWxkcy5kZWZhdWx0LXZhbHVlLXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaW5wdXQuc2NoZW1hLmRlZmF1bHRWYWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVdvcmtmbG93SW5wdXRTY2hlbWEoJGluZGV4LCAnZGVmYXVsdFZhbHVlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY2hlY2tib3gtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImdldElucHV0SXNSZXF1aXJlZChpbnB1dClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlV29ya2Zsb3dJbnB1dFZhbGlkYXRpb24oJGluZGV4LCAkYW55KCRldmVudC50YXJnZXQpLmNoZWNrZWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5pbnB1dHMuZmllbGRzLnJlcXVpcmVkJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBPdXRwdXRzIFRhYiAtLT5cbiAgICAgICAgICAgICAgQGlmIChhY3RpdmVTZXR0aW5nc1RhYigpID09PSAnb3V0cHV0cycpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxoMz57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLm91dHB1dHMudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwiYWRkV29ya2Zsb3dPdXRwdXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXBsdXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5hZGQtYnV0dG9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAod29ya2Zsb3dTZXR0aW5ncygpLm91dHB1dHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWluYm94XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHA+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5vdXRwdXRzLmVtcHR5LXN0YXRlLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9wPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5lbXB0eS1zdGF0ZS5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKG91dHB1dCBvZiB3b3JrZmxvd1NldHRpbmdzKCkub3V0cHV0czsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS1udW1iZXJcIj4je3sgJGluZGV4ICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVtb3ZlLWJ0blwiIChjbGljayk9XCJyZW1vdmVXb3JrZmxvd091dHB1dCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLm91dHB1dHMuYWN0aW9ucy5yZW1vdmUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5maWVsZHMubmFtZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwicmVzdWx0XCIgW3ZhbHVlXT1cIm91dHB1dC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlV29ya2Zsb3dPdXRwdXQoJGluZGV4LCAnbmFtZScsICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLm91dHB1dHMuZmllbGRzLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJSZXN1bHRcIiBbdmFsdWVdPVwib3V0cHV0LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlV29ya2Zsb3dPdXRwdXQoJGluZGV4LCAndGl0bGUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5maWVsZHMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMub3V0cHV0cy5maWVsZHMuZGVzY3JpcHRpb24tcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3V0cHV0LmRlc2NyaXB0aW9uIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVdvcmtmbG93T3V0cHV0KCRpbmRleCwgJ2Rlc2NyaXB0aW9uJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5vdXRwdXRzLmZpZWxkcy5kYXRhLXR5cGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW3ZhbHVlXT1cIm91dHB1dC5zY2hlbWEuZGF0YVR5cGUgfHwgJ3N0cmluZydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVdvcmtmbG93T3V0cHV0U2NoZW1hKCRpbmRleCwgJ2RhdGFUeXBlJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInN0cmluZ1wiPlN0cmluZzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVtYmVyXCI+TnVtYmVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib2JqZWN0XCI+T2JqZWN0PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhcnJheVwiPkFycmF5PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBWYXJpYWJsZXMgVGFiIC0tPlxuICAgICAgICAgICAgICBAaWYgKGFjdGl2ZVNldHRpbmdzVGFiKCkgPT09ICd2YXJpYWJsZXMnKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aDM+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwiYWRkV29ya2Zsb3dWYXJpYWJsZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuYWRkLWJ1dHRvbicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93U2V0dGluZ3MoKS52YXJpYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWluYm94XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHA+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuZW1wdHktc3RhdGUudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3A+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuZW1wdHktc3RhdGUuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtcy1saXN0XCI+XG4gICAgICAgICAgICAgICAgICBAZm9yICh2YXJpYWJsZSBvZiB3b3JrZmxvd1NldHRpbmdzKCkudmFyaWFibGVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLW51bWJlclwiPiN7eyAkaW5kZXggKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZW1vdmUtYnRuXCIgKGNsaWNrKT1cInJlbW92ZVdvcmtmbG93VmFyaWFibGUoJGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuYWN0aW9ucy5yZW1vdmUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMudmFyaWFibGVzLmZpZWxkcy5uYW1lJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJ0ZW1wRGF0YVwiIFt2YWx1ZV09XCJ2YXJpYWJsZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlV29ya2Zsb3dWYXJpYWJsZSgkaW5kZXgsICduYW1lJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMudmFyaWFibGVzLmZpZWxkcy50eXBlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW3ZhbHVlXT1cInZhcmlhYmxlLnR5cGVOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVdvcmtmbG93VmFyaWFibGUoJGluZGV4LCAndHlwZU5hbWUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzdHJpbmdcIj5TdHJpbmc8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVtYmVyXCI+TnVtYmVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJvb2xlYW5cIj5Cb29sZWFuPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm9iamVjdFwiPk9iamVjdDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhcnJheVwiPkFycmF5PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLnNlY3Rpb25zLnZhcmlhYmxlcy5maWVsZHMuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMudmFyaWFibGVzLmZpZWxkcy5kZXNjcmlwdGlvbi1wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YXJpYWJsZS5kZXNjcmlwdGlvbiB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVXb3JrZmxvd1ZhcmlhYmxlKCRpbmRleCwgJ2Rlc2NyaXB0aW9uJywgJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy52YXJpYWJsZXMuZmllbGRzLmluaXRpYWwtdmFsdWUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3Muc2VjdGlvbnMudmFyaWFibGVzLmZpZWxkcy5pbml0aWFsLXZhbHVlLXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhcmlhYmxlLnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVdvcmtmbG93VmFyaWFibGUoJGluZGV4LCAndmFsdWUnLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gQWR2YW5jZWQgVGFiIC0tPlxuICAgICAgICAgICAgICBAaWYgKGFjdGl2ZVNldHRpbmdzVGFiKCkgPT09ICdhZHZhbmNlZCcpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8aDM+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OndvcmtmbG93LXN0dWRpby5zZXR0aW5ncy5zZWN0aW9ucy5hZHZhbmNlZC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvaDM+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFZlcnNpb25pbmcgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8aDQ+2YbYs9iu2YfigIzYqNmG2K/bjCAoVmVyc2lvbmluZyk8L2g0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5WZXJzaW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIG1pbj1cIjFcIiBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS52ZXJzaW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+2LTZhdin2LHZhyDZhtiz2K7ZhyB3b3JrZmxvdyAoMSwgMiwgMywgLi4uKTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBjaGVja2JveC1ncm91cFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMS44cmVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwid29ya2Zsb3dTZXR0aW5ncygpLmlzTGF0ZXN0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPtii2K7YsduM2YYg2YbYs9iu2YcgKElzIExhdGVzdCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGNoZWNrYm94LWdyb3VwXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxLjhyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJ3b3JrZmxvd1NldHRpbmdzKCkuaXNQdWJsaXNoZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+2YXZhtiq2LTYsSDYtNiv2YcgKFB1Ymxpc2hlZCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxoND7YqtmG2LjbjNmF2KfYqiAoT3B0aW9ucyk8L2g0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY2hlY2tib3gtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS51c2FibGVBc0FjdGl2aXR5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7Zgtin2KjZhCDYp9iz2KrZgdin2K/ZhyDYqNmHINi52YbZiNin2YYgQWN0aXZpdHk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD7Yp9uM2YYgd29ya2Zsb3cg2YXbjOKAjNiq2YjYp9mG2K8g2KjZhyDYudmG2YjYp9mGINuM2qkgYWN0aXZpdHkg2K/YsSB3b3JrZmxvdyDZh9in24wg2K/bjNqv2LEg2KfYs9iq2YHYp9iv2Ycg2LTZiNivPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY2hlY2tib3gtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS5hdXRvVXBkYXRlQ29uc3VtaW5nV29ya2Zsb3dzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7YqNmH4oCM2LHZiNiy2LHYs9in2YbbjCDYrtmI2K/aqdin2LEgd29ya2Zsb3dzINmF2LXYsdmB4oCM2qnZhtmG2K/Zhzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPndvcmtmbG93INmH2KfbjNuMINqp2Ycg2KfYsiDYp9uM2YYgd29ya2Zsb3cg2KfYs9iq2YHYp9iv2Ycg2YXbjOKAjNqp2YbZhtivINio2Ycg2LXZiNix2Kog2K7ZiNiv2qnYp9ixINio2YfigIzYsdmI2LIg2YXbjOKAjNi02YjZhtivPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBNZXRhZGF0YSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxoND5NZXRhZGF0YTwvaDQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlRvb2wgVmVyc2lvbjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgcGxhY2Vob2xkZXI9XCIxLjAuMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIndvcmtmbG93U2V0dGluZ3MoKS50b29sVmVyc2lvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPtmG2LPYrtmHINin2KjYstin2LEg2LPYp9iy2YbYr9mHPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5Qcm92aWRlciBOYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0taW5wdXRcIiBwbGFjZWhvbGRlcj1cIldvcmtmbG93U3R1ZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwid29ya2Zsb3dTZXR0aW5ncygpLnByb3ZpZGVyTmFtZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPtmG2KfZhSDYp9io2LLYp9ixINiz2KfYstmG2K/Zhzwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIE91dGNvbWVzIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHZhbmNlZC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGg0PldvcmtmbG93IE91dGNvbWVzPC9oND5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5Qb3NzaWJsZSBPdXRjb21lczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRG9uZSwgU3VjY2VzcywgRmFpbGVkICjYrNiv2Kcg2LTYr9mHINio2Kcg2qnYp9mF2KcpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwid29ya2Zsb3dTZXR0aW5ncygpLm91dGNvbWVzLmpvaW4oJywgJylcIlxuICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVPdXRjb21lcygkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD7Zhtiq2KfbjNisINmF2YXaqdmGINqp2Ycg2KfbjNmGIHdvcmtmbG93INmF24zigIzYqtmI2KfZhtivINio2LHar9ix2K/Yp9mG2K8gKNmF2KvZhNin2Ys6IERvbmUsIFN1Y2Nlc3MsIEZhaWxlZCk8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3V0Y29tZXMtcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvdXRjb21lIG9mIHdvcmtmbG93U2V0dGluZ3MoKS5vdXRjb21lczsgdHJhY2sgb3V0Y29tZSkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm91dGNvbWUtY2hpcFwiPnt7IG91dGNvbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBFeHBvcnQgUHJldmlldyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxoND7Yrtix2YjYrNuMINmG2YfYp9uM24wgKFdvcmtmbG93RGVmaW5pdGlvbik8L2g0PlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPtin24zZhiDYs9in2K7Yqtin2LEg2K/ZgtuM2YLYp9mLINmF2LfYp9io2YIg2KjYpyBXb3JrZmxvd0RlZmluaXRpb24g2KfYs9iqINmIINiv2LEg2K/bjNiq2KfYqNuM2LMg2LDYrtuM2LHZhyDZhduM4oCM2LTZiNivPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBvcnQtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+RGVmaW5pdGlvbiBJRDo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3sgd29ya2Zsb3dTZXR0aW5ncygpLmRlZmluaXRpb25JZCB8fCAnKNiu2KfZhNuMKScgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+TmFtZTo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3sgd29ya2Zsb3dTZXR0aW5ncygpLm5hbWUgfHwgJyjYrtin2YTbjCknIH19PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPlZlcnNpb246PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnZ7eyB3b3JrZmxvd1NldHRpbmdzKCkudmVyc2lvbiB9fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5JbnB1dHM6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7IHdvcmtmbG93U2V0dGluZ3MoKS5pbnB1dHMubGVuZ3RoIH19IGl0ZW1zPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPk91dHB1dHM6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7IHdvcmtmbG93U2V0dGluZ3MoKS5vdXRwdXRzLmxlbmd0aCB9fSBpdGVtczwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5WYXJpYWJsZXM6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt7IHdvcmtmbG93U2V0dGluZ3MoKS52YXJpYWJsZXMubGVuZ3RoIH19IGl0ZW1zPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIE1vZGFsIEZvb3RlciAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICA8YXgtYnV0dG9uIFt0ZXh0XT1cIidAd29ya2Zsb3ctbWFuYWdlbWVudDp3b3JrZmxvdy1zdHVkaW8uc2V0dGluZ3MuYWN0aW9ucy5jYW5jZWwnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIiBjb2xvcj1cInNlY29uZGFyeVwiIHNpemU9XCJtZFwiIChvbkNsaWNrKT1cImNsb3NlV29ya2Zsb3dTZXR0aW5ncygpXCI+IDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbiBbdGV4dF09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6d29ya2Zsb3ctc3R1ZGlvLnNldHRpbmdzLmFjdGlvbnMuc2F2ZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiIGNvbG9yPVwicHJpbWFyeVwiIHNpemU9XCJtZFwiIChvbkNsaWNrKT1cInNhdmVXb3JrZmxvd1NldHRpbmdzKClcIj4gPC9heC1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gV29ya2Zsb3cgRXhlY3V0aW9uIERpYWxvZyAtLT5cbiAgICAgIEBpZiAoc2hvd0V4ZWN1dGlvbkRpYWxvZygpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZXhlY3V0aW9uLWRpYWxvZy1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlRXhlY3V0aW9uRGlhbG9nKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWN1dGlvbi1kaWFsb2dcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgPCEtLSBEaWFsb2cgSGVhZGVyIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVjdXRpb24tZGlhbG9nLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtcGxheS1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICAgIDxoMj57eyAnQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGVzdC1wYWdlcy53b3JrZmxvdy1zdHVkaW8uYWN0aW9ucy5leGVjdXRlLXdvcmtmbG93LnRpdGxlJyB8IHRyYW5zbGF0ZSB8XG4gICAgICAgICAgICAgICAgICBhc3luYyB9fTwvaDI+XG4gICAgICAgICAgICAgICAgPHA+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnRlc3QtcGFnZXMud29ya2Zsb3ctc3R1ZGlvLmFjdGlvbnMuZXhlY3V0ZS13b3JrZmxvdy5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIHwgYXN5bmMgfX08L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNsb3NlRXhlY3V0aW9uRGlhbG9nKClcIiBbZGlzYWJsZWRdPVwiaXNFeGVjdXRpbmcoKVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERpYWxvZyBCb2R5IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVjdXRpb24tZGlhbG9nLWJvZHlcIj5cbiAgICAgICAgICAgIDwhLS0gV29ya2Zsb3cgSW5mbyBQYW5lbCAoQmVmb3JlIEV4ZWN1dGlvbikgLS0+XG4gICAgICAgICAgICBAaWYgKCF3b3JrZmxvd0luc3RhbmNlU3RhdGUoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93LWluZm8tcGFuZWxcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXJ0LXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhcnQtaWxsdXN0cmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXJvY2tldFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aDM+e3sgJ0B3b3JrZmxvdy1tYW5hZ2VtZW50OnRlc3QtcGFnZXMud29ya2Zsb3ctc3R1ZGlvLm1lc3NhZ2VzLmluZm8ucmVhZHktdG8tZXhlY3V0ZScgfCB0cmFuc2xhdGUgfFxuICAgICAgICAgICAgICAgICAgYXN5bmMgfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwPnt7ICdAd29ya2Zsb3ctbWFuYWdlbWVudDp0ZXN0LXBhZ2VzLndvcmtmbG93LXN0dWRpby5tZXNzYWdlcy5pbmZvLmNsaWNrLXRvLXN0YXJ0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICB9fTwvcD5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbdGV4dF09XCInQHdvcmtmbG93LW1hbmFnZW1lbnQ6dGVzdC1wYWdlcy53b3JrZmxvdy1zdHVkaW8uYWN0aW9ucy5zdGFydC1leGVjdXRpb24udGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzXCIgc2l6ZT1cImxnXCIgKG9uQ2xpY2spPVwic3RhcnRXb3JrZmxvd0V4ZWN1dGlvbigpXCI+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgPCEtLSBDdXN0b20gVUkgZm9yIFJlZ2lzdHJhdGlvbiAtLT5cbiAgICAgICAgICAgIEBpZiAoZmFsc2UpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWdpc3RyYXRpb24tdWlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZ2lzdHJhdGlvbi1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZ2lzdHJhdGlvbi1pY29uXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXVzZXItY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxoMz7Zgdix2KLbjNmG2K8g2KvYqNiq4oCM2YbYp9mFPC9oMz5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInJlZ2lzdHJhdGlvbi1kZXNjXCI+XG4gICAgICAgICAgICAgICAgICDYp9uM2YYg2YHZhNmIINi02KfZhdmEINqG2YbYryDZhdix2K3ZhNmHINin2LPYqiDaqdmHINiv2KfYr9mH4oCM2YfYp9uMINqp2KfYsdio2LEg2LHYpyDYrNmF2LnigIzYotmI2LHbjCDaqdix2K/ZhyDZiCDYr9ixINmG2YfYp9uM2Kog2K3Ys9in2Kgg2qnYp9ix2KjYsduMINin24zYrNin2K8g2YXbjOKAjNqp2YbYry5cbiAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93SW5zdGFuY2VTdGF0ZSgpPy5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWdpc3RyYXRpb24tcHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8cD7Yr9ixINit2KfZhCDYp9is2LHYp9uMINmF2LHYp9it2YQg2KvYqNiq4oCM2YbYp9mFLi4uPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpZiAod29ya2Zsb3dJbnN0YW5jZVN0YXRlKCk/LnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWdpc3RyYXRpb24tc3VjY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jaGVjay1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8aDQ+2KvYqNiq4oCM2YbYp9mFINio2Kcg2YXZiNmB2YLbjNiqINin2YbYrNin2YUg2LTYryE8L2g0PlxuICAgICAgICAgICAgICAgICAgPHA+2K3Ys9in2Kgg2qnYp9ix2KjYsduMINi02YXYpyDYp9uM2KzYp9ivINi02K8g2Ygg2KjZhyDYstmI2K/bjCDYqNmHINiv2KfYtNio2YjYsdivINmF2YbYqtmC2YQg2K7ZiNin2YfbjNivINi02K8uPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBEZWZhdWx0IEV4ZWN1dGlvbiBWaWV3IC0tPlxuICAgICAgICAgICAgQGlmICh3b3JrZmxvd0luc3RhbmNlU3RhdGUoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlZmF1bHQtZXhlY3V0aW9uLXZpZXdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWN1dGlvbi1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93SW5zdGFuY2VTdGF0ZSgpPy5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXMtcnVubmluZ1wiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1zcGlubmVyLXRoaXJkIGZhLXNwaW5cIj48L2k+XG4gICAgICAgICAgICAgICAgICA8aDM+2K/YsSDYrdin2YQg2KfYrNix2KcuLi48L2gzPlxuICAgICAgICAgICAgICAgICAgPHA+V29ya2Zsb3cg2K/YsSDYrdin2YQg2KfYrNix2Kcg2KfYs9iqLiDZhNi32YHYp9mLINi12KjYsSDaqdmG24zYry48L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGlmICh3b3JrZmxvd0luc3RhbmNlU3RhdGUoKT8uc3RhdHVzID09PSAnZmluaXNoZWQnKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy1maW5pc2hlZFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jaGVjay1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8aDM+2KfYrNix2Kcg2KjYpyDZhdmI2YHZgtuM2Kog2KraqdmF24zZhCDYtNivPC9oMz5cbiAgICAgICAgICAgICAgICAgIDxwPldvcmtmbG93INio2Kcg2YXZiNmB2YLbjNiqINin2KzYsdinINi02K8g2Ygg2KrZhdin2YUgQWN0aXZpdGllcyDYp9mG2KzYp9mFINi02K/ZhtivLjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaWYgKHdvcmtmbG93SW5zdGFuY2VTdGF0ZSgpPy5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWVycm9yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRpbWVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxoMz7Yrti32Kcg2K/YsSDYp9is2LHYpzwvaDM+XG4gICAgICAgICAgICAgICAgICA8cD57eyB3b3JrZmxvd0luc3RhbmNlU3RhdGUoKT8uZXJyb3IgfX08L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIEV4ZWN1dGlvbiBMb2dzIFBhbmVsIC0tPlxuICAgICAgICAgICAgQGlmICh3b3JrZmxvd0luc3RhbmNlU3RhdGUoKSAmJiBleGVjdXRpb25Mb2dzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWN1dGlvbi1sb2dzLXBhbmVsXCI+XG4gICAgICAgICAgICAgIDxoMz48aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRlcm1pbmFsXCI+PC9pPiDZhNin2q/igIzZh9in24wg2KfYrNix2Kc8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9ncy1jb250YWluZXItY29tcGFjdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGxvZyBvZiBleGVjdXRpb25Mb2dzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2ctaXRlbS1jb21wYWN0XCIgW2NsYXNzXT1cIidsb2ctJyArIGxvZy5sZXZlbFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2ctdGltZVwiPnt7IGxvZy50aW1lc3RhbXAgfCBkYXRlOiAnSEg6bW06c3MnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb2ctaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChsb2cubGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdpbmZvJykge1xuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlICgnc3VjY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jaGVjay1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCd3YXJuaW5nJykge1xuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlICgnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdGltZXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG9nLW1lc3NhZ2VcIj57eyBsb2cubWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERpYWxvZyBGb290ZXIgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWN1dGlvbi1kaWFsb2ctZm9vdGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWluZm9cIj5cbiAgICAgICAgICAgICAgQGlmICh3b3JrZmxvd0luc3RhbmNlU3RhdGUoKT8uc3RhcnRUaW1lKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1pbmZvXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jbG9ja1wiPjwvaT5cbiAgICAgICAgICAgICAgICDYtNix2YjYuToge3sgd29ya2Zsb3dJbnN0YW5jZVN0YXRlKCkhLnN0YXJ0VGltZSB8IGRhdGU6ICdISDptbTpzcycgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAod29ya2Zsb3dJbnN0YW5jZVN0YXRlKCk/LmVuZFRpbWUpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLWluZm9cIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWZsYWctY2hlY2tlcmVkXCI+PC9pPlxuICAgICAgICAgICAgICAgINm+2KfbjNin2YY6IHt7IHdvcmtmbG93SW5zdGFuY2VTdGF0ZSgpIS5lbmRUaW1lIHwgZGF0ZTogJ0hIOm1tOnNzJyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgICAgICBbdGV4dF09XCIod29ya2Zsb3dJbnN0YW5jZVN0YXRlKCkgPyAnQGdlbmVyYWw6YWN0aW9ucy5jbG9zZS50aXRsZScgOiAnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnKSB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInNlY29uZGFyeVwiIHNpemU9XCJtZFwiIFtkaXNhYmxlZF09XCJpc0V4ZWN1dGluZygpXCIgKG9uQ2xpY2spPVwiY2xvc2VFeGVjdXRpb25EaWFsb2coKVwiPlxuICAgICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG48L2F4cC1wYWdlLWxheW91dD4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LW1vZHVsZXMtd29ya2Zsb3ctbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy93b3JrZmxvdy1tYW5hZ2VtZW50L3NyYy9hY29yZXgtbW9kdWxlcy13b3JrZmxvdy1tYW5hZ2VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}