@lowcodeunit/applications-flow-common 1.33.154-social-ish-angular-13-test → 1.33.155-lets-get-social-ish

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 (264) hide show
  1. package/bundles/lowcodeunit-applications-flow-common.umd.js +6968 -0
  2. package/bundles/lowcodeunit-applications-flow-common.umd.js.map +1 -0
  3. package/bundles/lowcodeunit-applications-flow-common.umd.min.js +16 -0
  4. package/bundles/lowcodeunit-applications-flow-common.umd.min.js.map +1 -0
  5. package/esm2015/lcu.api.js +38 -0
  6. package/esm2015/lib/applications-flow.module.js +218 -0
  7. package/esm2015/lib/controls/build-pipeline-form/build-pipeline-form.component.js +210 -0
  8. package/esm2015/lib/controls/devops-source-control-form/devops-source-control-form.component.js +412 -0
  9. package/esm2015/lib/controls/edit-application-form/edit-application-form.component.js +60 -0
  10. package/esm2015/lib/controls/processor-details-form/processor-details-form.component.js +330 -0
  11. package/esm2015/lib/controls/security-toggle/security-toggle.component.js +51 -0
  12. package/esm2015/lib/controls/source-control-form/source-control-form.component.js +61 -0
  13. package/esm2015/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.js +25 -0
  14. package/esm2015/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.js +31 -0
  15. package/esm2015/lib/dialogs/edit-application-dialog/edit-application-dialog.component.js +29 -0
  16. package/esm2015/lib/dialogs/source-control-dialog/source-control-dialog.component.js +25 -0
  17. package/esm2015/lib/elements/analytics-card/analytics-card.component.js +21 -0
  18. package/esm2015/lib/elements/base-form/base-form.component.js +61 -0
  19. package/esm2015/lib/elements/breadcrumb/breadcrumb.component.js +113 -0
  20. package/esm2015/lib/elements/card-carousel/card-carousel.component.js +67 -0
  21. package/esm2015/lib/elements/dynamic-tabs/dynamic-tabs.component.js +69 -0
  22. package/esm2015/lib/elements/feed-card-sm/feed-card-sm.component.js +31 -0
  23. package/esm2015/lib/elements/form-card/form-card.component.js +22 -0
  24. package/esm2015/lib/elements/gh-control/gh-control.component.js +72 -0
  25. package/esm2015/lib/elements/main-feed-card/main-feed-card.component.js +24 -0
  26. package/esm2015/lib/elements/project-info-card/project-info-card.component.js +39 -0
  27. package/esm2015/lib/elements/projects/controls/builds/builds.component.js +26 -0
  28. package/esm2015/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.js +145 -0
  29. package/esm2015/lib/elements/projects/controls/forms/source-control/source-control.component.js +262 -0
  30. package/esm2015/lib/elements/projects/controls/git-auth/git-auth.component.js +25 -0
  31. package/esm2015/lib/elements/projects/controls/header/header.component.js +75 -0
  32. package/esm2015/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.js +102 -0
  33. package/esm2015/lib/elements/projects/controls/project-items/project-items.component.js +49 -0
  34. package/esm2015/lib/elements/projects/controls/project-tabs/project-tabs.component.js +91 -0
  35. package/esm2015/lib/elements/projects/controls/recent-activities/recent-activities.component.js +15 -0
  36. package/esm2015/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.js +590 -0
  37. package/esm2015/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.js +62 -0
  38. package/esm2015/lib/elements/projects/controls/tabs/devops/devops.component.js +202 -0
  39. package/esm2015/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.js +178 -0
  40. package/esm2015/lib/elements/projects/controls/tabs/domains/domains.component.js +133 -0
  41. package/esm2015/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.js +86 -0
  42. package/esm2015/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.js +129 -0
  43. package/esm2015/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.js +113 -0
  44. package/esm2015/lib/elements/projects/controls/tabs/general/general.component.js +46 -0
  45. package/esm2015/lib/elements/projects/projects.component.js +92 -0
  46. package/esm2015/lib/elements/slotted-card/slotted-card.component.js +30 -0
  47. package/esm2015/lib/elements/three-column/three-column.component.js +32 -0
  48. package/esm2015/lib/elements/two-column-header/two-column-header.component.js +15 -0
  49. package/esm2015/lib/models/actions.model.js +3 -0
  50. package/esm2015/lib/models/base-form-config.model.js +6 -0
  51. package/esm2015/lib/models/card-form-config.model.js +6 -0
  52. package/esm2015/lib/models/dev-settings-preset.model.js +3 -0
  53. package/esm2015/lib/models/domain.model.js +3 -0
  54. package/esm2015/lib/models/dynamic-tabs.model.js +6 -0
  55. package/esm2015/lib/models/form-actions.model.js +3 -0
  56. package/esm2015/lib/models/form.model.js +6 -0
  57. package/esm2015/lib/models/form.values.model.js +11 -0
  58. package/esm2015/lib/models/project-actions.model.js +6 -0
  59. package/esm2015/lib/models/user-feed.model.js +12 -0
  60. package/{esm2020/lib/services/applications-flow.service.mjs → esm2015/lib/services/applications-flow.service.js} +13 -9
  61. package/esm2015/lib/services/eac.service.js +223 -0
  62. package/esm2015/lib/services/forms.service.js +131 -0
  63. package/esm2015/lib/services/npm.service.js +79 -0
  64. package/esm2015/lib/services/project.service.js +340 -0
  65. package/esm2015/lib/state/applications-flow-state.context.js +37 -0
  66. package/esm2015/lib/state/applications-flow.state.js +72 -0
  67. package/esm2015/lowcodeunit-applications-flow-common.js +29 -0
  68. package/fesm2015/lowcodeunit-applications-flow-common.js +5364 -0
  69. package/fesm2015/lowcodeunit-applications-flow-common.js.map +1 -0
  70. package/lcu.api.d.ts +13 -39
  71. package/lcu.api.d.ts.map +1 -0
  72. package/lib/applications-flow.module.d.ts +1 -53
  73. package/lib/applications-flow.module.d.ts.map +1 -0
  74. package/lib/controls/build-pipeline-form/build-pipeline-form.component.d.ts +1 -3
  75. package/lib/controls/build-pipeline-form/build-pipeline-form.component.d.ts.map +1 -0
  76. package/lib/controls/devops-source-control-form/devops-source-control-form.component.d.ts +1 -3
  77. package/lib/controls/devops-source-control-form/devops-source-control-form.component.d.ts.map +1 -0
  78. package/lib/controls/edit-application-form/edit-application-form.component.d.ts +1 -3
  79. package/lib/controls/edit-application-form/edit-application-form.component.d.ts.map +1 -0
  80. package/lib/controls/processor-details-form/processor-details-form.component.d.ts +1 -3
  81. package/lib/controls/processor-details-form/processor-details-form.component.d.ts.map +1 -0
  82. package/lib/controls/security-toggle/security-toggle.component.d.ts +1 -3
  83. package/lib/controls/security-toggle/security-toggle.component.d.ts.map +1 -0
  84. package/lib/controls/source-control-form/source-control-form.component.d.ts +1 -3
  85. package/lib/controls/source-control-form/source-control-form.component.d.ts.map +1 -0
  86. package/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.d.ts +1 -3
  87. package/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.d.ts.map +1 -0
  88. package/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.d.ts +1 -3
  89. package/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.d.ts.map +1 -0
  90. package/lib/dialogs/edit-application-dialog/edit-application-dialog.component.d.ts +1 -3
  91. package/lib/dialogs/edit-application-dialog/edit-application-dialog.component.d.ts.map +1 -0
  92. package/lib/dialogs/source-control-dialog/source-control-dialog.component.d.ts +1 -3
  93. package/lib/dialogs/source-control-dialog/source-control-dialog.component.d.ts.map +1 -0
  94. package/lib/elements/analytics-card/analytics-card.component.d.ts +1 -3
  95. package/lib/elements/analytics-card/analytics-card.component.d.ts.map +1 -0
  96. package/lib/elements/base-form/base-form.component.d.ts +1 -3
  97. package/lib/elements/base-form/base-form.component.d.ts.map +1 -0
  98. package/lib/elements/breadcrumb/breadcrumb.component.d.ts +1 -3
  99. package/lib/elements/breadcrumb/breadcrumb.component.d.ts.map +1 -0
  100. package/lib/elements/card-carousel/card-carousel.component.d.ts +1 -3
  101. package/lib/elements/card-carousel/card-carousel.component.d.ts.map +1 -0
  102. package/lib/elements/dynamic-tabs/dynamic-tabs.component.d.ts +1 -3
  103. package/lib/elements/dynamic-tabs/dynamic-tabs.component.d.ts.map +1 -0
  104. package/lib/elements/feed-card-sm/feed-card-sm.component.d.ts +1 -3
  105. package/lib/elements/feed-card-sm/feed-card-sm.component.d.ts.map +1 -0
  106. package/lib/elements/form-card/form-card.component.d.ts +1 -3
  107. package/lib/elements/form-card/form-card.component.d.ts.map +1 -0
  108. package/lib/elements/gh-control/gh-control.component.d.ts +1 -3
  109. package/lib/elements/gh-control/gh-control.component.d.ts.map +1 -0
  110. package/lib/elements/main-feed-card/main-feed-card.component.d.ts +1 -3
  111. package/lib/elements/main-feed-card/main-feed-card.component.d.ts.map +1 -0
  112. package/lib/elements/project-info-card/project-info-card.component.d.ts +1 -3
  113. package/lib/elements/project-info-card/project-info-card.component.d.ts.map +1 -0
  114. package/lib/elements/projects/controls/builds/builds.component.d.ts +1 -3
  115. package/lib/elements/projects/controls/builds/builds.component.d.ts.map +1 -0
  116. package/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.d.ts +1 -3
  117. package/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.d.ts.map +1 -0
  118. package/lib/elements/projects/controls/forms/source-control/source-control.component.d.ts +1 -3
  119. package/lib/elements/projects/controls/forms/source-control/source-control.component.d.ts.map +1 -0
  120. package/lib/elements/projects/controls/git-auth/git-auth.component.d.ts +1 -3
  121. package/lib/elements/projects/controls/git-auth/git-auth.component.d.ts.map +1 -0
  122. package/lib/elements/projects/controls/header/header.component.d.ts +1 -3
  123. package/lib/elements/projects/controls/header/header.component.d.ts.map +1 -0
  124. package/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.d.ts +1 -3
  125. package/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.d.ts.map +1 -0
  126. package/lib/elements/projects/controls/project-items/project-items.component.d.ts +1 -3
  127. package/lib/elements/projects/controls/project-items/project-items.component.d.ts.map +1 -0
  128. package/lib/elements/projects/controls/project-tabs/project-tabs.component.d.ts +1 -3
  129. package/lib/elements/projects/controls/project-tabs/project-tabs.component.d.ts.map +1 -0
  130. package/lib/elements/projects/controls/recent-activities/recent-activities.component.d.ts +1 -3
  131. package/lib/elements/projects/controls/recent-activities/recent-activities.component.d.ts.map +1 -0
  132. package/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.d.ts +1 -3
  133. package/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.d.ts.map +1 -0
  134. package/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.d.ts +1 -3
  135. package/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.d.ts.map +1 -0
  136. package/lib/elements/projects/controls/tabs/devops/devops.component.d.ts +1 -3
  137. package/lib/elements/projects/controls/tabs/devops/devops.component.d.ts.map +1 -0
  138. package/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.d.ts +1 -3
  139. package/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.d.ts.map +1 -0
  140. package/lib/elements/projects/controls/tabs/domains/domains.component.d.ts +1 -3
  141. package/lib/elements/projects/controls/tabs/domains/domains.component.d.ts.map +1 -0
  142. package/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.d.ts +1 -3
  143. package/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.d.ts.map +1 -0
  144. package/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.d.ts +1 -3
  145. package/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.d.ts.map +1 -0
  146. package/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.d.ts +1 -3
  147. package/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.d.ts.map +1 -0
  148. package/lib/elements/projects/controls/tabs/general/general.component.d.ts +1 -3
  149. package/lib/elements/projects/controls/tabs/general/general.component.d.ts.map +1 -0
  150. package/lib/elements/projects/projects.component.d.ts +1 -3
  151. package/lib/elements/projects/projects.component.d.ts.map +1 -0
  152. package/lib/elements/slotted-card/slotted-card.component.d.ts +1 -3
  153. package/lib/elements/slotted-card/slotted-card.component.d.ts.map +1 -0
  154. package/lib/elements/three-column/three-column.component.d.ts +1 -3
  155. package/lib/elements/three-column/three-column.component.d.ts.map +1 -0
  156. package/lib/elements/two-column-header/two-column-header.component.d.ts +1 -3
  157. package/lib/elements/two-column-header/two-column-header.component.d.ts.map +1 -0
  158. package/lib/models/actions.model.d.ts +1 -0
  159. package/lib/models/actions.model.d.ts.map +1 -0
  160. package/lib/models/base-form-config.model.d.ts +1 -0
  161. package/lib/models/base-form-config.model.d.ts.map +1 -0
  162. package/lib/models/card-form-config.model.d.ts +1 -0
  163. package/lib/models/card-form-config.model.d.ts.map +1 -0
  164. package/lib/models/dev-settings-preset.model.d.ts +1 -0
  165. package/lib/models/dev-settings-preset.model.d.ts.map +1 -0
  166. package/lib/models/domain.model.d.ts +1 -0
  167. package/lib/models/domain.model.d.ts.map +1 -0
  168. package/lib/models/dynamic-tabs.model.d.ts +1 -0
  169. package/lib/models/dynamic-tabs.model.d.ts.map +1 -0
  170. package/lib/models/form-actions.model.d.ts +1 -0
  171. package/lib/models/form-actions.model.d.ts.map +1 -0
  172. package/lib/models/form.model.d.ts +1 -0
  173. package/lib/models/form.model.d.ts.map +1 -0
  174. package/lib/models/form.values.model.d.ts +1 -0
  175. package/lib/models/form.values.model.d.ts.map +1 -0
  176. package/lib/models/project-actions.model.d.ts +1 -0
  177. package/lib/models/project-actions.model.d.ts.map +1 -0
  178. package/lib/models/user-feed.model.d.ts +42 -0
  179. package/lib/models/user-feed.model.d.ts.map +1 -0
  180. package/lib/services/applications-flow.service.d.ts +1 -3
  181. package/lib/services/applications-flow.service.d.ts.map +1 -0
  182. package/lib/services/eac.service.d.ts +2 -3
  183. package/lib/services/eac.service.d.ts.map +1 -0
  184. package/lib/services/forms.service.d.ts +1 -3
  185. package/lib/services/forms.service.d.ts.map +1 -0
  186. package/lib/services/npm.service.d.ts +1 -3
  187. package/lib/services/npm.service.d.ts.map +1 -0
  188. package/lib/services/project.service.d.ts +3 -3
  189. package/lib/services/project.service.d.ts.map +1 -0
  190. package/lib/state/applications-flow-state.context.d.ts +1 -3
  191. package/lib/state/applications-flow-state.context.d.ts.map +1 -0
  192. package/lib/state/applications-flow.state.d.ts +4 -0
  193. package/lib/state/applications-flow.state.d.ts.map +1 -0
  194. package/lowcodeunit-applications-flow-common.d.ts +25 -1
  195. package/lowcodeunit-applications-flow-common.d.ts.map +1 -0
  196. package/lowcodeunit-applications-flow-common.metadata.json +1 -0
  197. package/package.json +12 -20
  198. package/esm2020/lcu.api.mjs +0 -65
  199. package/esm2020/lib/applications-flow.module.mjs +0 -328
  200. package/esm2020/lib/controls/build-pipeline-form/build-pipeline-form.component.mjs +0 -245
  201. package/esm2020/lib/controls/devops-source-control-form/devops-source-control-form.component.mjs +0 -446
  202. package/esm2020/lib/controls/edit-application-form/edit-application-form.component.mjs +0 -67
  203. package/esm2020/lib/controls/processor-details-form/processor-details-form.component.mjs +0 -318
  204. package/esm2020/lib/controls/security-toggle/security-toggle.component.mjs +0 -58
  205. package/esm2020/lib/controls/source-control-form/source-control-form.component.mjs +0 -69
  206. package/esm2020/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.mjs +0 -29
  207. package/esm2020/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.mjs +0 -35
  208. package/esm2020/lib/dialogs/edit-application-dialog/edit-application-dialog.component.mjs +0 -33
  209. package/esm2020/lib/dialogs/source-control-dialog/source-control-dialog.component.mjs +0 -29
  210. package/esm2020/lib/elements/analytics-card/analytics-card.component.mjs +0 -28
  211. package/esm2020/lib/elements/base-form/base-form.component.mjs +0 -57
  212. package/esm2020/lib/elements/breadcrumb/breadcrumb.component.mjs +0 -117
  213. package/esm2020/lib/elements/card-carousel/card-carousel.component.mjs +0 -70
  214. package/esm2020/lib/elements/dynamic-tabs/dynamic-tabs.component.mjs +0 -74
  215. package/esm2020/lib/elements/feed-card-sm/feed-card-sm.component.mjs +0 -40
  216. package/esm2020/lib/elements/flow-tool/flow-tool.component.mjs +0 -75
  217. package/esm2020/lib/elements/form-card/form-card.component.mjs +0 -33
  218. package/esm2020/lib/elements/gh-control/gh-control.component.mjs +0 -78
  219. package/esm2020/lib/elements/main-feed-card/main-feed-card.component.mjs +0 -34
  220. package/esm2020/lib/elements/project-info-card/project-info-card.component.mjs +0 -60
  221. package/esm2020/lib/elements/projects/controls/builds/builds.component.mjs +0 -32
  222. package/esm2020/lib/elements/projects/controls/create-project-wizard/create-project-wizard.component.mjs +0 -145
  223. package/esm2020/lib/elements/projects/controls/forms/source-control/source-control.component.mjs +0 -285
  224. package/esm2020/lib/elements/projects/controls/git-auth/git-auth.component.mjs +0 -26
  225. package/esm2020/lib/elements/projects/controls/header/header.component.mjs +0 -83
  226. package/esm2020/lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component.mjs +0 -118
  227. package/esm2020/lib/elements/projects/controls/project-items/project-items.component.mjs +0 -54
  228. package/esm2020/lib/elements/projects/controls/project-tabs/project-tabs.component.mjs +0 -103
  229. package/esm2020/lib/elements/projects/controls/recent-activities/recent-activities.component.mjs +0 -14
  230. package/esm2020/lib/elements/projects/controls/tabs/apps-flow/apps-flow.component.mjs +0 -561
  231. package/esm2020/lib/elements/projects/controls/tabs/apps-flow/npm-package-select/npm-package-select.component.mjs +0 -72
  232. package/esm2020/lib/elements/projects/controls/tabs/devops/devops.component.mjs +0 -242
  233. package/esm2020/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.mjs +0 -179
  234. package/esm2020/lib/elements/projects/controls/tabs/domains/domains.component.mjs +0 -140
  235. package/esm2020/lib/elements/projects/controls/tabs/general/forms/base-form-test/base-form-test.component.mjs +0 -90
  236. package/esm2020/lib/elements/projects/controls/tabs/general/forms/project-details/project-details.component.mjs +0 -142
  237. package/esm2020/lib/elements/projects/controls/tabs/general/forms/root-directory/root-directory.component.mjs +0 -124
  238. package/esm2020/lib/elements/projects/controls/tabs/general/general.component.mjs +0 -40
  239. package/esm2020/lib/elements/projects/projects.component.mjs +0 -98
  240. package/esm2020/lib/elements/slotted-card/slotted-card.component.mjs +0 -49
  241. package/esm2020/lib/elements/three-column/three-column.component.mjs +0 -30
  242. package/esm2020/lib/elements/two-column-header/two-column-header.component.mjs +0 -15
  243. package/esm2020/lib/models/actions.model.mjs +0 -3
  244. package/esm2020/lib/models/base-form-config.model.mjs +0 -6
  245. package/esm2020/lib/models/card-form-config.model.mjs +0 -6
  246. package/esm2020/lib/models/dev-settings-preset.model.mjs +0 -3
  247. package/esm2020/lib/models/domain.model.mjs +0 -3
  248. package/esm2020/lib/models/dynamic-tabs.model.mjs +0 -6
  249. package/esm2020/lib/models/form-actions.model.mjs +0 -3
  250. package/esm2020/lib/models/form.model.mjs +0 -6
  251. package/esm2020/lib/models/form.values.model.mjs +0 -11
  252. package/esm2020/lib/models/project-actions.model.mjs +0 -6
  253. package/esm2020/lib/services/eac.service.mjs +0 -173
  254. package/esm2020/lib/services/forms.service.mjs +0 -132
  255. package/esm2020/lib/services/npm.service.mjs +0 -77
  256. package/esm2020/lib/services/project.service.mjs +0 -303
  257. package/esm2020/lib/state/applications-flow-state.context.mjs +0 -36
  258. package/esm2020/lib/state/applications-flow.state.mjs +0 -72
  259. package/esm2020/lowcodeunit-applications-flow-common.mjs +0 -5
  260. package/fesm2015/lowcodeunit-applications-flow-common.mjs +0 -5570
  261. package/fesm2015/lowcodeunit-applications-flow-common.mjs.map +0 -1
  262. package/fesm2020/lowcodeunit-applications-flow-common.mjs +0 -5449
  263. package/fesm2020/lowcodeunit-applications-flow-common.mjs.map +0 -1
  264. package/lib/elements/flow-tool/flow-tool.component.d.ts +0 -28
@@ -1,561 +0,0 @@
1
- import { Component, Input, ViewChild } from '@angular/core';
2
- import { Validators, } from '@angular/forms';
3
- import { Guid } from '@lcu/common';
4
- import { SourceControlFormControlsComponent } from '../../forms/source-control/source-control.component';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/forms";
7
- import * as i2 from "../../../../../services/applications-flow.service";
8
- import * as i3 from "../../../../../services/eac.service";
9
- import * as i4 from "@angular/material/button";
10
- import * as i5 from "@angular/material/icon";
11
- import * as i6 from "@angular/material/card";
12
- import * as i7 from "@angular/material/form-field";
13
- import * as i8 from "@angular/material/select";
14
- import * as i9 from "@angular/material/core";
15
- import * as i10 from "../../forms/source-control/source-control.component";
16
- import * as i11 from "./npm-package-select/npm-package-select.component";
17
- import * as i12 from "@angular/material/slide-toggle";
18
- import * as i13 from "@angular/common";
19
- import * as i14 from "@angular/material/tooltip";
20
- import * as i15 from "@angular/flex-layout/flex";
21
- import * as i16 from "@angular/material/input";
22
- export class AppsFlowComponent {
23
- // Constructors
24
- constructor(formBldr, appsFlowSvc, eacSvc) {
25
- this.formBldr = formBldr;
26
- this.appsFlowSvc = appsFlowSvc;
27
- this.eacSvc = eacSvc;
28
- this.EditingApplicationLookup = null;
29
- this.redirectTooltip = '';
30
- // this.IsPermanent = false;
31
- // this.IsPreserve = false;
32
- }
33
- // Fields
34
- // Properties
35
- get APIRootFormControl() {
36
- return this.ApplicationFormGroup?.controls.apiRoot;
37
- }
38
- get ApplicationIDFormControl() {
39
- return this.ApplicationFormGroup?.controls.applicationId;
40
- }
41
- get ApplicationLookups() {
42
- return Object.keys(this.Applications || {});
43
- }
44
- get ApplicationRoutes() {
45
- return Object.keys(this.RoutedApplications || {});
46
- }
47
- get ApplicationsBank() {
48
- return this.Data?.Applications || {};
49
- }
50
- get Applications() {
51
- const apps = {};
52
- this.Project.ApplicationLookups.forEach((appLookup) => {
53
- apps[appLookup] = this.ApplicationsBank[appLookup];
54
- });
55
- return apps;
56
- }
57
- get BuildFormControl() {
58
- return this.ApplicationFormGroup?.controls.build;
59
- }
60
- get ClientIDFormControl() {
61
- return this.ApplicationFormGroup?.controls.clientId;
62
- }
63
- get ClientSecretFormControl() {
64
- return this.ApplicationFormGroup?.controls.clientSecret;
65
- }
66
- get CurrentRouteApplicationLookups() {
67
- return Object.keys(this.RoutedApplications[this.CurrentApplicationRoute] || {});
68
- }
69
- get DefaultFileFormControl() {
70
- return this.ApplicationFormGroup?.controls.defaultFile;
71
- }
72
- get DefaultSourceControl() {
73
- return {
74
- Organization: this.EditingApplication?.LowCodeUnit?.Organization,
75
- Repository: this.EditingApplication?.LowCodeUnit?.Repository,
76
- };
77
- }
78
- get DescriptionFormControl() {
79
- return this.ApplicationFormGroup?.controls.description;
80
- }
81
- get EditingApplication() {
82
- let app = this.Applications
83
- ? this.Applications[this.EditingApplicationLookup]
84
- : null;
85
- if (app == null && this.EditingApplicationLookup) {
86
- app = {};
87
- }
88
- return app;
89
- }
90
- get HasBuildFormControl() {
91
- return this.ApplicationFormGroup?.controls.hasBuild;
92
- }
93
- get InboundPathFormControl() {
94
- return this.ApplicationFormGroup?.controls.inboundPath;
95
- }
96
- get IsPrivateFormControl() {
97
- return this.ApplicationFormGroup?.controls.isPrivate;
98
- }
99
- get IsTriggerSignInFormControl() {
100
- return this.ApplicationFormGroup?.controls.isTriggerSignIn;
101
- }
102
- get MethodsFormControl() {
103
- return this.ApplicationFormGroup?.controls.methods;
104
- }
105
- get NameFormControl() {
106
- return this.ApplicationFormGroup?.controls.name;
107
- }
108
- get PackageFormControl() {
109
- return this.ApplicationFormGroup?.controls.package;
110
- }
111
- get PermanentFormControl() {
112
- return this.ApplicationFormGroup?.controls.permanent;
113
- }
114
- get PreserveMethodFormControl() {
115
- return this.ApplicationFormGroup?.controls.preserveMethod;
116
- }
117
- get PrimaryHost() {
118
- return this.Data.PrimaryHost;
119
- }
120
- get Project() {
121
- return this.Data.Project;
122
- }
123
- get ProjectLookup() {
124
- return this.Data.ProjectLookup;
125
- }
126
- get RedirectFormControl() {
127
- return this.ApplicationFormGroup?.controls.redirect;
128
- }
129
- get RoutedApplications() {
130
- const appLookups = Object.keys(this.Applications);
131
- const apps = appLookups.map((appLookup) => this.Applications[appLookup]);
132
- let appRoutes = apps.map((app) => {
133
- return app.LookupConfig?.PathRegex.replace('.*', '');
134
- }) || [];
135
- appRoutes = appRoutes.filter((ar) => ar != null);
136
- let routeBases = [];
137
- appRoutes.forEach((appRoute) => {
138
- const appRouteParts = appRoute.split('/');
139
- const appRouteBase = `/${appRouteParts[1]}`;
140
- if (routeBases.indexOf(appRouteBase) < 0) {
141
- routeBases.push(appRouteBase);
142
- }
143
- });
144
- let workingAppLookups = [...(appLookups || [])];
145
- routeBases = routeBases.sort((a, b) => b.localeCompare(a));
146
- const routeSet = routeBases.reduce((prevRouteMap, currentRouteBase) => {
147
- const routeMap = {
148
- ...prevRouteMap,
149
- };
150
- const filteredAppLookups = workingAppLookups.filter((wal) => {
151
- const wa = this.Applications[wal];
152
- return wa.LookupConfig?.PathRegex.startsWith(currentRouteBase);
153
- });
154
- routeMap[currentRouteBase] =
155
- filteredAppLookups.reduce((prevAppMap, appLookup) => {
156
- const appMap = {
157
- ...prevAppMap,
158
- };
159
- appMap[appLookup] = this.Applications[appLookup];
160
- return appMap;
161
- }, {}) || {};
162
- workingAppLookups = workingAppLookups.filter((wa) => {
163
- return filteredAppLookups.indexOf(wa) < 0;
164
- });
165
- return routeMap;
166
- }, {}) || {};
167
- let routeSetKeys = Object.keys(routeSet);
168
- routeSetKeys = routeSetKeys.sort((a, b) => a.localeCompare(b));
169
- const routeSetResult = {};
170
- routeSetKeys.forEach((rsk) => (routeSetResult[rsk] = routeSet[rsk]));
171
- return routeSetResult;
172
- }
173
- get RouteFormControl() {
174
- return this.ApplicationFormGroup?.controls.route;
175
- }
176
- get ScopesFormControl() {
177
- return this.ApplicationFormGroup?.controls.scopes;
178
- }
179
- get SecurityFormControl() {
180
- return this.ApplicationFormGroup?.controls.security;
181
- }
182
- get SourceControlLookupFormControl() {
183
- return this.ApplicationFormGroup?.controls.sourceControlLookup;
184
- }
185
- get SourceControlLookups() {
186
- return Object.keys(this.SourceControls || {});
187
- }
188
- get SourceControls() {
189
- return this.Data.Environment.Sources || {};
190
- }
191
- get SPARootFormControl() {
192
- return this.ApplicationFormGroup?.controls.spaRoot;
193
- }
194
- get TokenLookupFormControl() {
195
- return this.ApplicationFormGroup?.controls.tokenLookup;
196
- }
197
- get VersionFormControl() {
198
- return this.ApplicationFormGroup?.controls.version;
199
- }
200
- get ZipFileFormControl() {
201
- return this.ApplicationFormGroup?.controls.zipFile;
202
- }
203
- // Life Cycle
204
- ngOnInit() {
205
- if (this.ApplicationLookups?.length <= 0) {
206
- this.CreateNewApplication();
207
- }
208
- }
209
- // API Methods
210
- CreateNewApplication() {
211
- this.SetEditingApplication(Guid.CreateRaw());
212
- }
213
- DeleteApplication(appLookup, appName) {
214
- this.eacSvc.DeleteApplication(appLookup, appName);
215
- }
216
- LCUTypeChanged(event) {
217
- this.LCUType = event.value;
218
- this.setupLcuTypeSubForm();
219
- }
220
- ProcessorTypeChanged(event) {
221
- this.ProcessorType = event.value;
222
- this.setupProcessorTypeSubForm();
223
- }
224
- DetermineTooltipText() {
225
- let permanentValue = this.PermanentFormControl.value;
226
- let preserveValue = this.PreserveMethodFormControl.value;
227
- if (permanentValue === true && preserveValue === false) {
228
- this.redirectTooltip = '301 – Permanent and Not Preserve';
229
- }
230
- else if (permanentValue === false && preserveValue === false) {
231
- this.redirectTooltip = '302 – Not Permanent and Not Preserve';
232
- }
233
- else if (permanentValue === false && preserveValue === true) {
234
- this.redirectTooltip = '307 – Not Permanent and Preserve';
235
- }
236
- else if (permanentValue === true && preserveValue === true) {
237
- this.redirectTooltip = '308 – Permanent and Preserve';
238
- }
239
- }
240
- GetProcessorType(appLookup) {
241
- let processorType = '';
242
- processorType = this.Applications[appLookup].Processor.Type
243
- ? this.Applications[appLookup].Processor.Type
244
- : '';
245
- // console.log("Ptype = ", processorType);
246
- return processorType;
247
- }
248
- EditApplicationRouteClicked(appRoute) {
249
- this.CurrentApplicationRoute = appRoute;
250
- }
251
- SaveApplication() {
252
- const app = {
253
- Application: {
254
- Name: this.NameFormControl.value,
255
- Description: this.DescriptionFormControl.value,
256
- PriorityShift: this.EditingApplication?.Application?.PriorityShift || 0,
257
- },
258
- AccessRightLookups: [],
259
- DataTokens: {},
260
- LicenseConfigurationLookups: [],
261
- LookupConfig: {
262
- IsPrivate: this.IsPrivateFormControl.value,
263
- IsTriggerSignIn: this.IsPrivateFormControl.value
264
- ? this.IsTriggerSignInFormControl.value
265
- : false,
266
- PathRegex: `${this.RouteFormControl.value}.*`,
267
- QueryRegex: this.EditingApplication?.LookupConfig?.QueryRegex || '',
268
- HeaderRegex: this.EditingApplication?.LookupConfig?.HeaderRegex || '',
269
- AllowedMethods: this.MethodsFormControl?.value
270
- ?.split(' ')
271
- .filter((v) => !!v),
272
- },
273
- Processor: {
274
- Type: this.ProcessorType,
275
- },
276
- };
277
- switch (app.Processor.Type) {
278
- case 'DFS':
279
- app.Processor.BaseHref = `${this.RouteFormControl.value}/`.replace('//', '/');
280
- app.Processor.DefaultFile =
281
- this.DefaultFileFormControl.value || 'index.html';
282
- app.LowCodeUnit = {
283
- Type: this.LCUType,
284
- };
285
- switch (app.LowCodeUnit.Type) {
286
- case 'GitHub':
287
- app.LowCodeUnit.Organization =
288
- this.SourceControlFormControls.OrganizationFormControl.value;
289
- app.LowCodeUnit.Repository =
290
- this.SourceControlFormControls.RepositoryFormControl.value;
291
- app.LowCodeUnit.Build = this.BuildFormControl.value;
292
- app.LowCodeUnit.Path =
293
- this.SourceControlFormControls.BuildPathFormControl.value;
294
- break;
295
- case 'NPM':
296
- app.LowCodeUnit.Package = this.PackageFormControl.value;
297
- app.LowCodeUnit.Version = this.VersionFormControl.value;
298
- break;
299
- case 'Zip':
300
- app.LowCodeUnit.ZipFile = this.ZipFileFormControl.value;
301
- break;
302
- }
303
- break;
304
- case 'OAuth':
305
- app.Processor.Scopes = this.ScopesFormControl.value.split(' ');
306
- app.Processor.TokenLookup = this.TokenLookupFormControl.value;
307
- app.LowCodeUnit = {
308
- Type: this.LCUType,
309
- };
310
- switch (app.LowCodeUnit.Type) {
311
- case 'GitHubOAuth':
312
- app.LowCodeUnit.ClientID = this.ClientIDFormControl.value;
313
- app.LowCodeUnit.ClientSecret = this.ClientSecretFormControl.value;
314
- break;
315
- }
316
- break;
317
- case 'Proxy':
318
- app.Processor.InboundPath = this.InboundPathFormControl.value;
319
- app.LowCodeUnit = {
320
- Type: this.LCUType,
321
- };
322
- switch (app.LowCodeUnit.Type) {
323
- case 'API':
324
- app.LowCodeUnit.APIRoot = this.APIRootFormControl.value;
325
- app.LowCodeUnit.Security = this.SecurityFormControl.value;
326
- break;
327
- case 'SPA':
328
- app.LowCodeUnit.SPARoot = this.SPARootFormControl.value;
329
- break;
330
- }
331
- break;
332
- case 'Redirect':
333
- app.Processor.Permanent = !!this.PermanentFormControl.value;
334
- app.Processor.PreserveMethod = !!this.PreserveMethodFormControl.value;
335
- app.Processor.Redirect = this.RedirectFormControl.value;
336
- break;
337
- }
338
- if (!app.LookupConfig.PathRegex.startsWith('/')) {
339
- app.LookupConfig.PathRegex = `/${app.LookupConfig.PathRegex}`;
340
- }
341
- const saveAppReq = {
342
- ProjectLookup: this.ProjectLookup,
343
- Application: app,
344
- ApplicationLookup: this.EditingApplicationLookup || Guid.CreateRaw(),
345
- };
346
- if (this.HasBuildFormControl.value && this.ProcessorType !== 'redirect') {
347
- if (app) {
348
- app.LowCodeUnit.SourceControlLookup = this.SourceControlLookupFormControl.value;
349
- }
350
- }
351
- else if (app) {
352
- app.LowCodeUnit.SourceControlLookup = null;
353
- }
354
- this.eacSvc.SaveApplicationAsCode(saveAppReq);
355
- }
356
- SetEditingApplication(appLookup) {
357
- this.EditingApplicationLookup = appLookup;
358
- this.setupApplicationForm();
359
- }
360
- SourceControlLookupChanged(event) {
361
- // TODO: Anything to do here on change?
362
- }
363
- StartsWith(app, appRouteBase) {
364
- if (appRouteBase === '/') {
365
- return app?.LookupConfig?.PathRegex === '/.*';
366
- }
367
- else {
368
- return app?.LookupConfig?.PathRegex.startsWith(appRouteBase);
369
- }
370
- }
371
- Unpack(appLookup, app) {
372
- this.eacSvc.UnpackLowCodeUnit({
373
- ApplicationLookup: appLookup,
374
- ApplicationName: app.Application?.Name,
375
- Version: app.LowCodeUnit?.Version || app.LowCodeUnit?.Build,
376
- });
377
- }
378
- // Helpers
379
- cleanupLcuTypeSubForm() {
380
- this.ApplicationFormGroup.removeControl('methods');
381
- this.ApplicationFormGroup.removeControl('apiRoot');
382
- this.ApplicationFormGroup.removeControl('security');
383
- this.ApplicationFormGroup.removeControl('spaRoot');
384
- this.ApplicationFormGroup.removeControl('applicationId');
385
- this.ApplicationFormGroup.removeControl('build');
386
- this.ApplicationFormGroup.removeControl('clientId');
387
- this.ApplicationFormGroup.removeControl('clientSecret');
388
- this.ApplicationFormGroup.removeControl('zipFile');
389
- }
390
- cleanupProcessorTypeSubForm() {
391
- this.ApplicationFormGroup.removeControl('defaultFile');
392
- this.ApplicationFormGroup.removeControl('dfsLcuType');
393
- this.ApplicationFormGroup.removeControl('oauthLcuType');
394
- this.ApplicationFormGroup.removeControl('scopes');
395
- this.ApplicationFormGroup.removeControl('tokenLookup');
396
- this.ApplicationFormGroup.removeControl('inboundPath');
397
- this.ApplicationFormGroup.removeControl('proxyLcuType');
398
- this.ApplicationFormGroup.removeControl('redirect');
399
- this.ApplicationFormGroup.removeControl('permanent');
400
- this.ApplicationFormGroup.removeControl('preserveMethod');
401
- this.cleanupLcuTypeSubForm();
402
- }
403
- setupApplicationForm() {
404
- this.ProcessorType = this.EditingApplication?.Processor?.Type || '';
405
- console.log('ProcessorType = ', this.ProcessorType);
406
- if (this.EditingApplication != null) {
407
- this.ApplicationFormGroup = this.formBldr.group({
408
- name: [this.EditingApplication.Application?.Name, Validators.required],
409
- description: [
410
- this.EditingApplication.Application?.Description,
411
- Validators.required,
412
- ],
413
- route: [
414
- this.EditingApplication.LookupConfig?.PathRegex.replace('.*', '') ||
415
- '/',
416
- Validators.required,
417
- ],
418
- // priority: [
419
- // this.EditingApplication.Application?.Priority || 10000,
420
- // Validators.required,
421
- // ],
422
- procType: [this.ProcessorType, [Validators.required]],
423
- });
424
- this.setupBuildForm();
425
- this.setupSecurityForm();
426
- this.setupProcessorTypeSubForm();
427
- }
428
- }
429
- setupBuildForm() {
430
- this.ApplicationFormGroup.addControl('hasBuild', this.formBldr.control(!!this.EditingApplication.LowCodeUnit?.SourceControlLookup || false, [Validators.required]));
431
- this.ApplicationFormGroup.addControl('sourceControlLookup', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SourceControlLookup || '', []));
432
- }
433
- setupDfsForm() {
434
- this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
435
- this.ApplicationFormGroup.addControl('defaultFile', this.formBldr.control(this.EditingApplication.Processor?.DefaultFile || 'index.html', [Validators.required]));
436
- this.ApplicationFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
437
- }
438
- setupLCUAPIForm() {
439
- this.ApplicationFormGroup.addControl('methods', this.formBldr.control(this.EditingApplication.LookupConfig?.AllowedMethods?.join(' ') || '', []));
440
- this.ApplicationFormGroup.addControl('apiRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.APIRoot || '', [Validators.required]));
441
- this.ApplicationFormGroup.addControl('security', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Security || '', [Validators.required]));
442
- }
443
- setupLCUApplicationPointerForm() {
444
- this.ApplicationFormGroup.addControl('applicationId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ApplicationID || '', [Validators.required]));
445
- }
446
- setupLCUGitHubForm() {
447
- this.ApplicationFormGroup.addControl('build', this.formBldr.control(this.EditingApplication.LowCodeUnit?.Build || 'latest', [Validators.required]));
448
- }
449
- setupLCUGitHubOAuthForm() {
450
- this.ApplicationFormGroup.addControl('clientId', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientID || '', [Validators.required]));
451
- this.ApplicationFormGroup.addControl('clientSecret', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ClientSecret || '', [Validators.required]));
452
- }
453
- setupLCUNPMForm() {
454
- // this.ApplicationFormGroup.addControl(
455
- // 'package',
456
- // this.formBldr.control(
457
- // this.EditingApplication.LowCodeUnit?.Package || '',
458
- // [Validators.required]
459
- // )
460
- // );
461
- // this.ApplicationFormGroup.addControl(
462
- // 'version',
463
- // this.formBldr.control(
464
- // this.EditingApplication.LowCodeUnit?.Version || '',
465
- // [Validators.required]
466
- // )
467
- // );
468
- }
469
- setupLCUSPAForm() {
470
- this.ApplicationFormGroup.addControl('spaRoot', this.formBldr.control(this.EditingApplication.LowCodeUnit?.SPARoot || '', [Validators.required]));
471
- }
472
- setupLCUZipForm() {
473
- this.ApplicationFormGroup.addControl('zipFile', this.formBldr.control(this.EditingApplication.LowCodeUnit?.ZipFile || '', [Validators.required]));
474
- }
475
- setupLcuTypeSubForm() {
476
- this.cleanupLcuTypeSubForm();
477
- // this.ApplicationFormGroup.removeControl('package');
478
- // this.ApplicationFormGroup.removeControl('version');
479
- if (this.LCUType) {
480
- switch (this.LCUType) {
481
- case 'API':
482
- this.setupLCUAPIForm();
483
- break;
484
- case 'ApplicationPointer':
485
- this.setupLCUApplicationPointerForm();
486
- break;
487
- case 'GitHub':
488
- this.setupLCUGitHubForm();
489
- break;
490
- case 'GitHubOAuth':
491
- this.setupLCUGitHubOAuthForm();
492
- break;
493
- case 'NPM':
494
- this.setupLCUNPMForm();
495
- break;
496
- case 'SPA':
497
- this.setupLCUSPAForm();
498
- break;
499
- case 'Zip':
500
- this.setupLCUZipForm();
501
- break;
502
- }
503
- }
504
- }
505
- setupOAuthForm() {
506
- this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
507
- this.ApplicationFormGroup.addControl('scopes', this.formBldr.control(this.EditingApplication.Processor?.Scopes?.Join(' ') || '', [Validators.required]));
508
- this.ApplicationFormGroup.addControl('tokenLookup', this.formBldr.control(this.EditingApplication.Processor?.TokenLookup || '', [Validators.required]));
509
- this.ApplicationFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
510
- }
511
- setupProxyForm() {
512
- this.LCUType = this.EditingApplication.LowCodeUnit?.Type || '';
513
- this.ApplicationFormGroup.addControl('inboundPath', this.formBldr.control(this.EditingApplication.Processor?.InboundPath || '', [Validators.required]));
514
- this.ApplicationFormGroup.addControl('lcuType', this.formBldr.control(this.LCUType, [Validators.required]));
515
- }
516
- setupProcessorTypeSubForm() {
517
- this.cleanupProcessorTypeSubForm();
518
- if (this.ProcessorType) {
519
- switch (this.ProcessorType) {
520
- case 'DFS':
521
- this.setupDfsForm();
522
- break;
523
- case 'OAuth':
524
- this.setupOAuthForm();
525
- break;
526
- case 'Proxy':
527
- this.setupProxyForm();
528
- break;
529
- case 'Redirect':
530
- this.setupRedirectForm();
531
- break;
532
- }
533
- }
534
- this.setupLcuTypeSubForm();
535
- }
536
- setupRedirectForm() {
537
- this.ApplicationFormGroup.addControl('redirect', this.formBldr.control(this.EditingApplication.Processor?.Redirect || '', [
538
- Validators.required,
539
- ]));
540
- this.ApplicationFormGroup.addControl('permanent', this.formBldr.control(this.EditingApplication.Processor?.Permanent || false, []));
541
- this.ApplicationFormGroup.addControl('preserveMethod', this.formBldr.control(this.EditingApplication.Processor?.PreserveMethod || false, []));
542
- this.DetermineTooltipText();
543
- }
544
- setupSecurityForm() {
545
- this.ApplicationFormGroup.addControl('isPrivate', this.formBldr.control(this.EditingApplication.LookupConfig?.IsPrivate || false, [Validators.required]));
546
- this.ApplicationFormGroup.addControl('isTriggerSignIn', this.formBldr.control(this.EditingApplication.LookupConfig?.IsTriggerSignIn || false, [Validators.required]));
547
- }
548
- }
549
- AppsFlowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AppsFlowComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ApplicationsFlowService }, { token: i3.EaCService }], target: i0.ɵɵFactoryTarget.Component });
550
- AppsFlowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: AppsFlowComponent, selector: "lcu-apps-flow", inputs: { Data: ["data", "Data"] }, viewQueries: [{ propertyName: "SourceControlFormControls", first: true, predicate: SourceControlFormControlsComponent, descendants: true }], ngImport: i0, template: "<div>\n <div *ngIf=\"EditingApplication?.Application\">\n <h2>\n <button\n mat-icon-button\n matTooltip=\"Back to Routes\"\n (click)=\"SetEditingApplication(null)\"\n >\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n {{ CurrentApplicationRoute }} / {{ EditingApplication.Application?.Name }}\n </h2>\n </div>\n <form\n [formGroup]=\"ApplicationFormGroup\"\n (ngSubmit)=\"SaveApplication()\"\n *ngIf=\"EditingApplication\"\n >\n\n <div\n fxLayout=\"row wrap\"\n fxLayoutAlign=\"center start\"\n fxLayout.lt-md=\"column\"\n >\n <div class=\"form-card\" fxFlex=\"70%\" fxFlex.lt-md=\"100%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title>\n <ng-container *ngIf=\"EditingApplication?.Application\">\n Edit Application:\n {{ EditingApplication.Application?.Name }}\n </ng-container>\n\n <ng-container *ngIf=\"!EditingApplication?.Application\">\n Create an Application\n </ng-container>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Name\"\n formControlName=\"name\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <textarea\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n rows=\"3\"\n required\n ></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Route\"\n formControlName=\"route\"\n required\n />\n </mat-form-field>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div class=\"form-card\" fxFlex=\"35%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title> Processor Details </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"procType\"\n (selectionChange)=\"ProcessorTypeChanged($event)\"\n required\n >\n <mat-option value=\"DFS\">View Package</mat-option>\n\n <mat-option value=\"Redirect\">Redirect</mat-option>\n\n <mat-option value=\"Proxy\">Proxy</mat-option>\n\n <mat-option value=\"OAuth\">OAuth</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"ProcessorType\">\n <div *ngSwitchCase=\"'DFS'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Default File\"\n formControlName=\"defaultFile\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"NPM\">NPM</mat-option>\n\n <mat-option value=\"GitHub\">GitHub</mat-option>\n\n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHub'\">\n <lcu-source-control-form-controls\n [build-path]=\"EditingApplication?.LowCodeUnit?.Path\"\n [form-group]=\"ApplicationFormGroup\"\n [source-control]=\"DefaultSourceControl\"\n [use-branches]=\"false\"\n [use-build-path]=\"true\"\n ></lcu-source-control-form-controls>\n\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n SourceControlFormControls?.RepositoryFormControl?.valid\n \"\n >\n <input\n matInput\n placeholder=\"Build\"\n formControlName=\"build\"\n required\n />\n\n <mat-hint>\n Current Build:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'NPM'\">\n <lcu-npm-package-select\n [npm-package]=\"EditingApplication?.LowCodeUnit?.Package\"\n [npm-package-version]=\"\n EditingApplication?.LowCodeUnit?.Version\n \"\n [form-group]=\"ApplicationFormGroup\"\n ></lcu-npm-package-select>\n\n <mat-hint>\n Current Version:\n {{ EditingApplication?.LowCodeUnit?.CurrentVersion }}\n </mat-hint>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'OAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Scopes (space separated)\"\n formControlName=\"scopes\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Token Lookup\"\n formControlName=\"tokenLookup\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"GitHubOAuth\">GitHub</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHubOAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client ID\"\n formControlName=\"clientId\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client Secret\"\n formControlName=\"clientSecret\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Proxy'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Inbound Path\"\n formControlName=\"inboundPath\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"API\">API</mat-option>\n\n <mat-option value=\"SPA\">Single Page Application</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'API'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Allowed Methods (separate with spaces)\"\n formControlName=\"methods\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Security ({header}~{value})\"\n formControlName=\"security\"\n required\n />\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'SPA'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"SPA Root\"\n formControlName=\"spaRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Redirect'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Redirect URL\"\n formControlName=\"redirect\"\n required\n />\n </mat-form-field>\n\n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"permanent\">\n Is Permanent?\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"spread\"\n formControlName=\"preserveMethod\"\n >\n Preserve Method?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n (mouseenter)=\"DetermineTooltipText()\"\n matTooltip={{redirectTooltip}}\n >\n info_outline\n </mat-icon>\n\n <!-- <mat-icon\n *ngIf=\"!IsPermanent && !IsPreserve\"\n\n class=\"spread\"\n matSuffix\n matTooltip=\"302 \u2013 Not Permanent and Not Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n <!-- <mat-icon\n *ngIf=\"!IsPermanent && IsPreserve\"\n class=\"spread\"\n matSuffix\n matTooltip=\"307 \u2013 Not Permanent and Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n <!-- <mat-icon\n *ngIf=\"IsPermanent && IsPreserve\"\n class=\"spread\"\n matSuffix\n matTooltip=\"308 \u2013 Permanent and Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n \n\n <!-- <mat-icon\n class=\"spread\"\n matSuffix\n matTooltip=\"Values used to control the redirect type. Permanent and Not Preserve = 301; Not Permanent and Not Preserve = 302; Permanent and Preserve = 308; Not Permanent and Not Preserve = 307;\"\n >\n info_outline\n </mat-icon> -->\n </div>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div class=\"form-card\" fxFlex=\"35%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title> Security Settings </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"isPrivate\"\n matTooltip=\"Is Secure Application?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Secured Application is one that requires the user to be authenticated to use the application. The application is hosted behind an identity wall.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <div>\n <div *ngIf=\"IsPrivateFormControl.value\">\n <div>\n <mat-slide-toggle formControlName=\"isTriggerSignIn\">\n Is Trigger Sign In Application?\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Trigger Sign In Application will direct the user to sign in if they are not already.\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"spread flow-card\" *ngIf=\"ProcessorType != 'Redirect'\">\n <mat-card-header>\n <mat-card-title *ngIf=\"!HasBuildFormControl.value\">\n Build & Source\n </mat-card-title>\n\n <mat-card-title *ngIf=\"HasBuildFormControl.value\">\n Source Control\n </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"hasBuild\"\n matTooltip=\"Has Build?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"Configure source control, DevOps CI/CD, and artifacts.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n HasBuildFormControl.value && SourceControlLookups?.length > 0\n \"\n >\n <mat-select\n formControlName=\"sourceControlLookup\"\n placeholder=\"Source Control\"\n (selectionChange)=\"SourceControlLookupChanged($event)\"\n [disabled]=\"\n SourceControlFormControls?.Loading || HostingDetails?.Loading\n \"\n >\n <ng-container\n *ngFor=\"let srcCtrlLookup of SourceControlLookups\"\n >\n <mat-option\n [value]=\"srcCtrlLookup\"\n *ngIf=\"SourceControls[srcCtrlLookup]; let srcCtrl\"\n >\n {{ srcCtrl.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <div *ngIf=\"HasBuildFormControl?.value\">\n <h3>\n @{{\n SourceControlFormControls?.OrganizationFormControl?.value ||\n SourceControl?.Organization\n }}/{{\n SourceControlFormControls?.RepositoryFormControl?.value ||\n SourceControl?.Repository\n }}\n </h3>\n\n <p>Organization and Repository pulled from build settings</p>\n\n <mat-hint>\n CurrentBuild:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </div>\n </mat-form-field>\n\n <div *ngIf=\"SourceControlLookups?.length < 0\">\n <h3>\n Create source control locations under the DevOps tab above.\n </h3>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n\n <div class=\"spread\">\n <div fxFlex></div>\n\n <button mat-button type=\"button\" (click)=\"SetEditingApplication(null)\">\n <mat-icon>cancel</mat-icon> Cancel\n </button>\n\n <div fxFlex></div>\n\n <button\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"!ApplicationFormGroup.valid || !ApplicationFormGroup.dirty\"\n >\n <mat-icon>save</mat-icon> Save Application\n </button>\n\n <div fxFlex></div>\n </div>\n </form>\n\n <div class=\"spread\" *ngIf=\"!EditingApplication\">\n <span class=\"apps-actions\">\n <button mat-raised-button color=\"accent\" (click)=\"CreateNewApplication()\">\n <mat-icon color=\"primary\">add</mat-icon> Create New\n </button>\n </span>\n\n <div class=\"spread\" *ngIf=\"!CurrentApplicationRoute\">\n <div *ngIf=\"ApplicationRoutes?.length <= 0\">\n <h2>No applications created, create your first application.</h2>\n </div>\n\n <div *ngIf=\"ApplicationRoutes?.length > 0\">\n <h2>Project Routes</h2>\n\n <div\n fxLayout=\"row wrap\"\n fxLayout.lt-md=\"column\"\n *ngIf=\"ApplicationRoutes\"\n >\n <div\n fxFlex=\"20%\"\n fxFlex.lt-md=\"100%\"\n *ngFor=\"let appRoute of ApplicationRoutes\"\n >\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <!-- <img mat-card-avatar=\"/assets/images/project-icon.png\" /> -->\n\n <mat-card-title\n class=\"mat-subheading-2\"\n [matTooltip]=\"appRoute\"\n >\n {{ appRoute }}\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"spread\"></div>\n </mat-card-content>\n\n <mat-card-actions>\n <div class=\"data-app-actions\">\n <div fxFlex></div>\n\n <a\n mat-icon-button\n href=\"https://{{ PrimaryHost }}{{ appRoute }}\"\n target=\"_blank\"\n >\n <mat-icon matTooltip=\"Launch\">launch</mat-icon>\n </a>\n\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"EditApplicationRouteClicked(appRoute)\"\n >\n <mat-icon matTooltip=\"Edit Application Route\">\n settings\n </mat-icon>\n </button>\n </div>\n\n <div class=\"data-app-fakes\">\n <div fxFlex></div>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"CurrentApplicationRoute\">\n <h2>\n <button\n mat-icon-button\n matTooltip=\"Back to Routes\"\n (click)=\"CurrentApplicationRoute = null\"\n >\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n {{ CurrentApplicationRoute }} Routes\n </h2>\n\n <div fxLayout=\"row wrap\" fxLayout.lt-md=\"column\">\n <ng-container *ngFor=\"let appLookup of CurrentRouteApplicationLookups\">\n <div\n fxFlex=\"30%\"\n fxFlex.lt-md=\"100%\"\n *ngIf=\"\n RoutedApplications[CurrentApplicationRoute][appLookup];\n let app\n \"\n >\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <!-- <img mat-card-avatar=\"/assets/images/project-icon.png\" /> -->\n\n <mat-card-title\n class=\"mat-subheading-2\"\n [matTooltip]=\"app.Application.Description\"\n >\n {{ app.Application.Name }}\n </mat-card-title>\n\n <mat-card-subtitle\n class=\"mat-subheading-1\"\n [matTooltip]=\"\n app.LowCodeUnit?.CurrentVersion ||\n app.LowCodeUnit?.CurrentBuild\n \"\n >\n @{{\n app.LowCodeUnit?.CurrentVersion ||\n app.LowCodeUnit?.CurrentBuild ||\n app.Processor?.Redirect ||\n \"No version deployed\"\n }}\n </mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"spread\"></div>\n </mat-card-content>\n\n <mat-card-actions>\n <div class=\"data-app-actions\">\n <div fxFlex></div>\n\n <a\n mat-icon-button\n href=\"https://{{ PrimaryHost }}{{\n app.LookupConfig.PathRegex.replace('.*', '')\n }}\"\n target=\"_blank\"\n >\n <mat-icon matTooltip=\"Launch\">launch</mat-icon>\n </a>\n\n <a\n *ngIf=\"GetProcessorType(appLookup) === 'DFS'\"\n mat-icon-button\n (click)=\"Unpack(appLookup, app)\"\n target=\"_blank\"\n matTooltip=\"Unpack {{\n app.LowCodeUnit?.Version || app.LowCodeUnit?.Build\n }}\"\n >\n <mat-icon>cloud_upload</mat-icon>\n </a>\n\n <button\n mat-icon-button\n (click)=\"SetEditingApplication(appLookup)\"\n >\n <mat-icon matTooltip=\"Edit Application\"> edit </mat-icon>\n </button>\n\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"DeleteApplication(appLookup, app.Application.Name)\"\n >\n <mat-icon matTooltip=\"Delete {{ app.Application.Name }}\">\n delete_forever\n </mat-icon>\n </button>\n </div>\n\n <div class=\"data-app-fakes\">\n <div fxFlex></div>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled \n *ngIf=\"GetProcessorType(appLookup) === 'DFS'\">\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";@import\"https://fonts.googleapis.com/css?family=Encode+Sans+Condensed:400,900&display=swap\";@import\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,700&display=swap\";.disable-autofill-background-default input:-webkit-autofill,.disable-autofill-background-default input:-webkit-autofill:hover,.disable-autofill-background-default input:-webkit-autofill:focus,.disable-autofill-background-default textarea:-webkit-autofill,.disable-autofill-background-default textarea:-webkit-autofill:hover,.disable-autofill-background-default textarea:-webkit-autofill:focus,.disable-autofill-background-default select:-webkit-autofill,.disable-autofill-background-default select:-webkit-autofill:hover,.disable-autofill-background-default select:-webkit-autofill:focus{-webkit-transition:background-color 5000s!important;transition:background-color 5000s!important}.list-item-disabled{opacity:.5;filter:alpha(opacity=50);cursor:not-allowed!important}.filler{flex:1 1 auto;display:inline-block!important}.sticky{position:sticky;z-index:750;top:0}.inline{display:inline-block}.contents,.page-element{display:contents}.mat-spinner{margin:auto}.mat-full-width{width:100%}.spread{margin:2rem}.spread-thin{margin:1rem}.overlay{position:sticky!important}.overlay.top{top:0}.overlay.bottom{bottom:0}.margin-0{margin:0!important}.margin-top-0,.margin-y-0{margin-top:0!important}.margin-right-0,.margin-x-0{margin-right:0!important}.margin-bottom-0,.margin-y-0{margin-bottom:0!important}.margin-left-0,.margin-x-0{margin-left:0!important}.margin-1{margin:.25rem!important}.margin-top-1,.margin-y-1{margin-top:.25rem!important}.margin-right-1,.margin-x-1{margin-right:.25rem!important}.margin-bottom-1,.margin-y-1{margin-bottom:.25rem!important}.margin-left-1,.margin-x-1{margin-left:.25rem!important}.margin-2{margin:.5rem!important}.margin-top-2,.margin-y-2{margin-top:.5rem!important}.margin-right-2,.margin-x-2{margin-right:.5rem!important}.margin-bottom-2,.margin-y-2{margin-bottom:.5rem!important}.margin-left-2,.margin-x-2{margin-left:.5rem!important}.margin-3{margin:1rem!important}.margin-top-3,.margin-y-3{margin-top:1rem!important}.margin-top-bottom-3{margin:1rem 0!important}.margin-right-3,.margin-x-3{margin-right:1rem!important}.margin-bottom-3,.margin-y-3{margin-bottom:1rem!important}.margin-left-3,.margin-x-3{margin-left:1rem!important}.margin-4{margin:2rem!important}.margin-top-4,.margin-y-4{margin-top:2rem!important}.margin-right-4,.margin-x-4{margin-right:2rem!important}.margin-bottom-4,.margin-y-4{margin-bottom:2rem!important}.margin-left-4,.margin-x-4{margin-left:2rem!important}.margin-right-5,.margin-x-5{margin-right:4rem!important}.margin-bottom-5,.margin-y-5{margin-bottom:4rem!important}.margin-left-5,.margin-x-5{margin-left:4rem!important}.margin-5{margin:4rem!important}.margin-top-5,.margin-y-5{margin-top:4rem!important}.margin-right-6,.margin-x-6{margin-right:4.5rem!important}.margin-bottom-6,.margin-y-6{margin-bottom:4.5rem!important}.margin-left-6,.margin-x-6{margin-left:4.5rem!important}.margin-7{margin:6rem!important}.margin-top-7,.margin-y-7{margin-top:6rem!important}.margin-right-7,.margin-x-7{margin-right:6rem!important}.margin-bottom-7,.margin-y-7{margin-bottom:6rem!important}.margin-left-7,.margin-x-7{margin-left:6rem!important}.margin-8{margin:7.5rem!important}.margin-top-8,.margin-y-8{margin-top:7.5rem!important}.margin-right-8,.margin-x-8{margin-right:7.5rem!important}.margin-bottom-8,.margin-y-8{margin-bottom:7.5rem!important}.margin-left-8,.margin-x-8{margin-left:7.5rem!important}.margin-9{margin:9rem!important}.margin-top-9,.margin-y-9{margin-top:9rem!important}.margin-right-9,.margin-x-9{margin-right:9rem!important}.margin-bottom-9,.margin-y-9{margin-bottom:9rem!important}.margin-left-9,.margin-x-9{margin-left:9rem!important}.padding-0{padding:0!important}.padding-top-0,.padding-y-0{padding-top:0!important}.padding-right-0,.padding-x-0{padding-right:0!important}.padding-bottom-0,.padding-y-0{padding-bottom:0!important}.padding-left-0,.padding-x-0{padding-left:0!important}.padding-1{padding:.25rem!important}.padding-top-1,.padding-y-1{padding-top:.25rem!important}.padding-right-1,.padding-x-1{padding-right:.25rem!important}.padding-bottom-1,.padding-y-1{padding-bottom:.25rem!important}.padding-left-1,.padding-x-1{padding-left:.25rem!important}.padding-2{padding:.5rem!important}.padding-top-2,.padding-y-2{padding-top:.5rem!important}.padding-right-2,.padding-x-2{padding-right:.5rem!important}.padding-bottom-2,.padding-y-2{padding-bottom:.5rem!important}.padding-left-2,.padding-x-2{padding-left:.5rem!important}.padding-3{padding:1rem!important}.padding-top-3,.padding-y-3{padding-top:1rem!important}.padding-right-3,.padding-x-3{padding-right:1rem!important}.padding-bottom-3,.padding-y-3{padding-bottom:1rem!important}.padding-left-3,.padding-x-3{padding-left:1rem!important}.padding-4{padding:2rem!important}.padding-top-4,.padding-y-4{padding-top:2rem!important}.padding-right-4,.padding-x-4{padding-right:2rem!important}.padding-bottom-4,.padding-y-4{padding-bottom:2rem!important}.padding-left-4,.padding-x-4{padding-left:2rem!important}.padding-5{padding:4rem!important}.padding-top-5,.padding-y-5{padding-top:4rem!important}.padding-right-5,.padding-x-5{padding-right:4rem!important}.padding-bottom-5,.padding-y-5{padding-bottom:4rem!important}.padding-left-5,.padding-x-5{padding-left:4rem!important}.margin-n1{margin:-.25rem!important}.margin-top-n1,.margin-y-n1{margin-top:-.25rem!important}.margin-right-n1,.margin-x-n1{margin-right:-.25rem!important}.margin-bottom-n1,.margin-y-n1{margin-bottom:-.25rem!important}.margin-left-n1,.margin-x-n1{margin-left:-.25rem!important}.margin-n2{margin:-.5rem!important}.margin-top-n2,.margin-y-n2{margin-top:-.5rem!important}.margin-right-n2,.margin-x-n2{margin-right:-.5rem!important}.margin-bottom-n2,.margin-y-n2{margin-bottom:-.5rem!important}.margin-left-n2,.margin-x-n2{margin-left:-.5rem!important}.margin-n3{margin:-1rem!important}.margin-top-n3,.margin-y-n3{margin-top:-1rem!important}.margin-right-n3,.margin-x-n3{margin-right:-1rem!important}.margin-bottom-n3,.margin-y-n3{margin-bottom:-1rem!important}.margin-left-n3,.margin-x-n3{margin-left:-1rem!important}.margin-n4{margin:-2rem!important}.margin-top-n4,.margin-y-n4{margin-top:-2rem!important}.margin-right-n4,.margin-x-n4{margin-right:-2rem!important}.margin-bottom-n4,.margin-y-n4{margin-bottom:-2rem!important}.margin-left-n4,.margin-x-n4{margin-left:-2rem!important}.margin-n5{margin:-4rem!important}.margin-top-n5,.margin-y-n5{margin-top:-4rem!important}.margin-right-n5,.margin-x-n5{margin-right:-4rem!important}.margin-bottom-n5,.margin-y-n5{margin-bottom:-4rem!important}.margin-left-n5,.margin-x-n5{margin-left:-4rem!important}.margin-auto{margin:auto!important}.margin-top-auto,.margin-y-auto{margin-top:auto!important}.margin-right-auto,.margin-x-auto{margin-right:auto!important}.margin-bottom-auto,.margin-y-auto{margin-bottom:auto!important}.margin-left-auto,.margin-x-auto{margin-left:auto!important}@media (min-width: 576px){.margin-sm-0{margin:0!important}.margin-top-sm-0,.margin-y-sm-0{margin-top:0!important}.margin-right-sm-0,.margin-x-sm-0{margin-right:0!important}.margin-bottom-sm-0,.margin-y-sm-0{margin-bottom:0!important}.margin-left-sm-0,.margin-x-sm-0{margin-left:0!important}.margin-sm-1{margin:.25rem!important}.margin-top-sm-1,.margin-y-sm-1{margin-top:.25rem!important}.margin-right-sm-1,.margin-x-sm-1{margin-right:.25rem!important}.margin-bottom-sm-1,.margin-y-sm-1{margin-bottom:.25rem!important}.margin-left-sm-1,.margin-x-sm-1{margin-left:.25rem!important}.margin-sm-2{margin:.5rem!important}.margin-top-sm-2,.margin-y-sm-2{margin-top:.5rem!important}.margin-right-sm-2,.margin-x-sm-2{margin-right:.5rem!important}.margin-bottom-sm-2,.margin-y-sm-2{margin-bottom:.5rem!important}.margin-left-sm-2,.margin-x-sm-2{margin-left:.5rem!important}.margin-sm-3{margin:1rem!important}.margin-top-sm-3,.margin-y-sm-3{margin-top:1rem!important}.margin-right-sm-3,.margin-x-sm-3{margin-right:1rem!important}.margin-bottom-sm-3,.margin-y-sm-3{margin-bottom:1rem!important}.margin-left-sm-3,.margin-x-sm-3{margin-left:1rem!important}.margin-sm-4{margin:2rem!important}.margin-top-sm-4,.margin-y-sm-4{margin-top:2rem!important}.margin-right-sm-4,.margin-x-sm-4{margin-right:2rem!important}.margin-bottom-sm-4,.margin-y-sm-4{margin-bottom:2rem!important}.margin-left-sm-4,.margin-x-sm-4{margin-left:2rem!important}.margin-sm-5{margin:4rem!important}.margin-top-sm-5,.margin-y-sm-5{margin-top:4rem!important}.margin-right-sm-5,.margin-x-sm-5{margin-right:4rem!important}.margin-bottom-sm-5,.margin-y-sm-5{margin-bottom:4rem!important}.margin-left-sm-5,.margin-x-sm-5{margin-left:4rem!important}.padding-sm-0{padding:0!important}.padding-top-sm-0,.padding-y-sm-0{padding-top:0!important}.padding-right-sm-0,.padding-x-sm-0{padding-right:0!important}.padding-bottom-sm-0,.padding-y-sm-0{padding-bottom:0!important}.padding-left-sm-0,.padding-x-sm-0{padding-left:0!important}.padding-sm-1{padding:.25rem!important}.padding-top-sm-1,.padding-y-sm-1{padding-top:.25rem!important}.padding-right-sm-1,.padding-x-sm-1{padding-right:.25rem!important}.padding-bottom-sm-1,.padding-y-sm-1{padding-bottom:.25rem!important}.padding-left-sm-1,.padding-x-sm-1{padding-left:.25rem!important}.padding-sm-2{padding:.5rem!important}.padding-top-sm-2,.padding-y-sm-2{padding-top:.5rem!important}.padding-right-sm-2,.padding-x-sm-2{padding-right:.5rem!important}.padding-bottom-sm-2,.padding-y-sm-2{padding-bottom:.5rem!important}.padding-left-sm-2,.padding-x-sm-2{padding-left:.5rem!important}.padding-sm-3{padding:1rem!important}.padding-top-sm-3,.padding-y-sm-3{padding-top:1rem!important}.padding-right-sm-3,.padding-x-sm-3{padding-right:1rem!important}.padding-bottom-sm-3,.padding-y-sm-3{padding-bottom:1rem!important}.padding-left-sm-3,.padding-x-sm-3{padding-left:1rem!important}.padding-sm-4{padding:2rem!important}.padding-top-sm-4,.padding-y-sm-4{padding-top:2rem!important}.padding-right-sm-4,.padding-x-sm-4{padding-right:2rem!important}.padding-bottom-sm-4,.padding-y-sm-4{padding-bottom:2rem!important}.padding-left-sm-4,.padding-x-sm-4{padding-left:2rem!important}.padding-sm-5{padding:4rem!important}.padding-top-sm-5,.padding-y-sm-5{padding-top:4rem!important}.padding-right-sm-5,.padding-x-sm-5{padding-right:4rem!important}.padding-bottom-sm-5,.padding-y-sm-5{padding-bottom:4rem!important}.padding-left-sm-5,.padding-x-sm-5{padding-left:4rem!important}.margin-sm-n1{margin:-.25rem!important}.margin-top-sm-n1,.margin-y-sm-n1{margin-top:-.25rem!important}.margin-right-sm-n1,.margin-x-sm-n1{margin-right:-.25rem!important}.margin-bottom-sm-n1,.margin-y-sm-n1{margin-bottom:-.25rem!important}.margin-left-sm-n1,.margin-x-sm-n1{margin-left:-.25rem!important}.margin-sm-n2{margin:-.5rem!important}.margin-top-sm-n2,.margin-y-sm-n2{margin-top:-.5rem!important}.margin-right-sm-n2,.margin-x-sm-n2{margin-right:-.5rem!important}.margin-bottom-sm-n2,.margin-y-sm-n2{margin-bottom:-.5rem!important}.margin-left-sm-n2,.margin-x-sm-n2{margin-left:-.5rem!important}.margin-sm-n3{margin:-1rem!important}.margin-top-sm-n3,.margin-y-sm-n3{margin-top:-1rem!important}.margin-right-sm-n3,.margin-x-sm-n3{margin-right:-1rem!important}.margin-bottom-sm-n3,.margin-y-sm-n3{margin-bottom:-1rem!important}.margin-left-sm-n3,.margin-x-sm-n3{margin-left:-1rem!important}.margin-sm-n4{margin:-2rem!important}.margin-top-sm-n4,.margin-y-sm-n4{margin-top:-2rem!important}.margin-right-sm-n4,.margin-x-sm-n4{margin-right:-2rem!important}.margin-bottom-sm-n4,.margin-y-sm-n4{margin-bottom:-2rem!important}.margin-left-sm-n4,.margin-x-sm-n4{margin-left:-2rem!important}.margin-sm-n5{margin:-4rem!important}.margin-top-sm-n5,.margin-y-sm-n5{margin-top:-4rem!important}.margin-right-sm-n5,.margin-x-sm-n5{margin-right:-4rem!important}.margin-bottom-sm-n5,.margin-y-sm-n5{margin-bottom:-4rem!important}.margin-left-sm-n5,.margin-x-sm-n5{margin-left:-4rem!important}.margin-sm-auto{margin:auto!important}.margin-top-sm-auto,.margin-y-sm-auto{margin-top:auto!important}.margin-right-sm-auto,.margin-x-sm-auto{margin-right:auto!important}.margin-bottom-sm-auto,.margin-y-sm-auto{margin-bottom:auto!important}.margin-left-sm-auto,.margin-x-sm-auto{margin-left:auto!important}}@media (min-width: 768px){.margin-md-0{margin:0!important}.margin-top-md-0,.margin-y-md-0{margin-top:0!important}.margin-right-md-0,.margin-x-md-0{margin-right:0!important}.margin-bottom-md-0,.margin-y-md-0{margin-bottom:0!important}.margin-left-md-0,.margin-x-md-0{margin-left:0!important}.margin-md-1{margin:.25rem!important}.margin-top-md-1,.margin-y-md-1{margin-top:.25rem!important}.margin-right-md-1,.margin-x-md-1{margin-right:.25rem!important}.margin-bottom-md-1,.margin-y-md-1{margin-bottom:.25rem!important}.margin-left-md-1,.margin-x-md-1{margin-left:.25rem!important}.margin-md-2{margin:.5rem!important}.margin-top-md-2,.margin-y-md-2{margin-top:.5rem!important}.margin-right-md-2,.margin-x-md-2{margin-right:.5rem!important}.margin-bottom-md-2,.margin-y-md-2{margin-bottom:.5rem!important}.margin-left-md-2,.margin-x-md-2{margin-left:.5rem!important}.margin-md-3{margin:1rem!important}.margin-top-md-3,.margin-y-md-3{margin-top:1rem!important}.margin-right-md-3,.margin-x-md-3{margin-right:1rem!important}.margin-bottom-md-3,.margin-y-md-3{margin-bottom:1rem!important}.margin-left-md-3,.margin-x-md-3{margin-left:1rem!important}.margin-md-4{margin:2rem!important}.margin-top-md-4,.margin-y-md-4{margin-top:2rem!important}.margin-right-md-4,.margin-x-md-4{margin-right:2rem!important}.margin-bottom-md-4,.margin-y-md-4{margin-bottom:2rem!important}.margin-left-md-4,.margin-x-md-4{margin-left:2rem!important}.margin-md-5{margin:4rem!important}.margin-top-md-5,.margin-y-md-5{margin-top:4rem!important}.margin-right-md-5,.margin-x-md-5{margin-right:4rem!important}.margin-bottom-md-5,.margin-y-md-5{margin-bottom:4rem!important}.margin-left-md-5,.margin-x-md-5{margin-left:4rem!important}.padding-md-0{padding:0!important}.padding-top-md-0,.padding-y-md-0{padding-top:0!important}.padding-right-md-0,.padding-x-md-0{padding-right:0!important}.padding-bottom-md-0,.padding-y-md-0{padding-bottom:0!important}.padding-left-md-0,.padding-x-md-0{padding-left:0!important}.padding-md-1{padding:.25rem!important}.padding-top-md-1,.padding-y-md-1{padding-top:.25rem!important}.padding-right-md-1,.padding-x-md-1{padding-right:.25rem!important}.padding-bottom-md-1,.padding-y-md-1{padding-bottom:.25rem!important}.padding-left-md-1,.padding-x-md-1{padding-left:.25rem!important}.padding-md-2{padding:.5rem!important}.padding-top-md-2,.padding-y-md-2{padding-top:.5rem!important}.padding-right-md-2,.padding-x-md-2{padding-right:.5rem!important}.padding-bottom-md-2,.padding-y-md-2{padding-bottom:.5rem!important}.padding-left-md-2,.padding-x-md-2{padding-left:.5rem!important}.padding-md-3{padding:1rem!important}.padding-top-md-3,.padding-y-md-3{padding-top:1rem!important}.padding-right-md-3,.padding-x-md-3{padding-right:1rem!important}.padding-bottom-md-3,.padding-y-md-3{padding-bottom:1rem!important}.padding-left-md-3,.padding-x-md-3{padding-left:1rem!important}.padding-md-4{padding:2rem!important}.padding-top-md-4,.padding-y-md-4{padding-top:2rem!important}.padding-right-md-4,.padding-x-md-4{padding-right:2rem!important}.padding-bottom-md-4,.padding-y-md-4{padding-bottom:2rem!important}.padding-left-md-4,.padding-x-md-4{padding-left:2rem!important}.padding-md-5{padding:4rem!important}.padding-top-md-5,.padding-y-md-5{padding-top:4rem!important}.padding-right-md-5,.padding-x-md-5{padding-right:4rem!important}.padding-bottom-md-5,.padding-y-md-5{padding-bottom:4rem!important}.padding-left-md-5,.padding-x-md-5{padding-left:4rem!important}.margin-md-n1{margin:-.25rem!important}.margin-top-md-n1,.margin-y-md-n1{margin-top:-.25rem!important}.margin-right-md-n1,.margin-x-md-n1{margin-right:-.25rem!important}.margin-bottom-md-n1,.margin-y-md-n1{margin-bottom:-.25rem!important}.margin-left-md-n1,.margin-x-md-n1{margin-left:-.25rem!important}.margin-md-n2{margin:-.5rem!important}.margin-top-md-n2,.margin-y-md-n2{margin-top:-.5rem!important}.margin-right-md-n2,.margin-x-md-n2{margin-right:-.5rem!important}.margin-bottom-md-n2,.margin-y-md-n2{margin-bottom:-.5rem!important}.margin-left-md-n2,.margin-x-md-n2{margin-left:-.5rem!important}.margin-md-n3{margin:-1rem!important}.margin-top-md-n3,.margin-y-md-n3{margin-top:-1rem!important}.margin-right-md-n3,.margin-x-md-n3{margin-right:-1rem!important}.margin-bottom-md-n3,.margin-y-md-n3{margin-bottom:-1rem!important}.margin-left-md-n3,.margin-x-md-n3{margin-left:-1rem!important}.margin-md-n4{margin:-2rem!important}.margin-top-md-n4,.margin-y-md-n4{margin-top:-2rem!important}.margin-right-md-n4,.margin-x-md-n4{margin-right:-2rem!important}.margin-bottom-md-n4,.margin-y-md-n4{margin-bottom:-2rem!important}.margin-left-md-n4,.margin-x-md-n4{margin-left:-2rem!important}.margin-md-n5{margin:-4rem!important}.margin-top-md-n5,.margin-y-md-n5{margin-top:-4rem!important}.margin-right-md-n5,.margin-x-md-n5{margin-right:-4rem!important}.margin-bottom-md-n5,.margin-y-md-n5{margin-bottom:-4rem!important}.margin-left-md-n5,.margin-x-md-n5{margin-left:-4rem!important}.margin-md-auto{margin:auto!important}.margin-top-md-auto,.margin-y-md-auto{margin-top:auto!important}.margin-right-md-auto,.margin-x-md-auto{margin-right:auto!important}.margin-bottom-md-auto,.margin-y-md-auto{margin-bottom:auto!important}.margin-left-md-auto,.margin-x-md-auto{margin-left:auto!important}}@media (min-width: 992px){.margin-lg-0{margin:0!important}.margin-top-lg-0,.margin-y-lg-0{margin-top:0!important}.margin-right-lg-0,.margin-x-lg-0{margin-right:0!important}.margin-bottom-lg-0,.margin-y-lg-0{margin-bottom:0!important}.margin-left-lg-0,.margin-x-lg-0{margin-left:0!important}.margin-lg-1{margin:.25rem!important}.margin-top-lg-1,.margin-y-lg-1{margin-top:.25rem!important}.margin-right-lg-1,.margin-x-lg-1{margin-right:.25rem!important}.margin-bottom-lg-1,.margin-y-lg-1{margin-bottom:.25rem!important}.margin-left-lg-1,.margin-x-lg-1{margin-left:.25rem!important}.margin-lg-2{margin:.5rem!important}.margin-top-lg-2,.margin-y-lg-2{margin-top:.5rem!important}.margin-right-lg-2,.margin-x-lg-2{margin-right:.5rem!important}.margin-bottom-lg-2,.margin-y-lg-2{margin-bottom:.5rem!important}.margin-left-lg-2,.margin-x-lg-2{margin-left:.5rem!important}.margin-lg-3{margin:1rem!important}.margin-top-lg-3,.margin-y-lg-3{margin-top:1rem!important}.margin-right-lg-3,.margin-x-lg-3{margin-right:1rem!important}.margin-bottom-lg-3,.margin-y-lg-3{margin-bottom:1rem!important}.margin-left-lg-3,.margin-x-lg-3{margin-left:1rem!important}.margin-lg-4{margin:2rem!important}.margin-top-lg-4,.margin-y-lg-4{margin-top:2rem!important}.margin-right-lg-4,.margin-x-lg-4{margin-right:2rem!important}.margin-bottom-lg-4,.margin-y-lg-4{margin-bottom:2rem!important}.margin-left-lg-4,.margin-x-lg-4{margin-left:2rem!important}.margin-lg-5{margin:4rem!important}.margin-top-lg-5,.margin-y-lg-5{margin-top:4rem!important}.margin-right-lg-5,.margin-x-lg-5{margin-right:4rem!important}.margin-bottom-lg-5,.margin-y-lg-5{margin-bottom:4rem!important}.margin-left-lg-5,.margin-x-lg-5{margin-left:4rem!important}.padding-lg-0{padding:0!important}.padding-top-lg-0,.padding-y-lg-0{padding-top:0!important}.padding-right-lg-0,.padding-x-lg-0{padding-right:0!important}.padding-bottom-lg-0,.padding-y-lg-0{padding-bottom:0!important}.padding-left-lg-0,.padding-x-lg-0{padding-left:0!important}.padding-lg-1{padding:.25rem!important}.padding-top-lg-1,.padding-y-lg-1{padding-top:.25rem!important}.padding-right-lg-1,.padding-x-lg-1{padding-right:.25rem!important}.padding-bottom-lg-1,.padding-y-lg-1{padding-bottom:.25rem!important}.padding-left-lg-1,.padding-x-lg-1{padding-left:.25rem!important}.padding-lg-2{padding:.5rem!important}.padding-top-lg-2,.padding-y-lg-2{padding-top:.5rem!important}.padding-right-lg-2,.padding-x-lg-2{padding-right:.5rem!important}.padding-bottom-lg-2,.padding-y-lg-2{padding-bottom:.5rem!important}.padding-left-lg-2,.padding-x-lg-2{padding-left:.5rem!important}.padding-lg-3{padding:1rem!important}.padding-top-lg-3,.padding-y-lg-3{padding-top:1rem!important}.padding-right-lg-3,.padding-x-lg-3{padding-right:1rem!important}.padding-bottom-lg-3,.padding-y-lg-3{padding-bottom:1rem!important}.padding-left-lg-3,.padding-x-lg-3{padding-left:1rem!important}.padding-lg-4{padding:2rem!important}.padding-top-lg-4,.padding-y-lg-4{padding-top:2rem!important}.padding-right-lg-4,.padding-x-lg-4{padding-right:2rem!important}.padding-bottom-lg-4,.padding-y-lg-4{padding-bottom:2rem!important}.padding-left-lg-4,.padding-x-lg-4{padding-left:2rem!important}.padding-lg-5{padding:4rem!important}.padding-top-lg-5,.padding-y-lg-5{padding-top:4rem!important}.padding-right-lg-5,.padding-x-lg-5{padding-right:4rem!important}.padding-bottom-lg-5,.padding-y-lg-5{padding-bottom:4rem!important}.padding-left-lg-5,.padding-x-lg-5{padding-left:4rem!important}.margin-lg-n1{margin:-.25rem!important}.margin-top-lg-n1,.margin-y-lg-n1{margin-top:-.25rem!important}.margin-right-lg-n1,.margin-x-lg-n1{margin-right:-.25rem!important}.margin-bottom-lg-n1,.margin-y-lg-n1{margin-bottom:-.25rem!important}.margin-left-lg-n1,.margin-x-lg-n1{margin-left:-.25rem!important}.margin-lg-n2{margin:-.5rem!important}.margin-top-lg-n2,.margin-y-lg-n2{margin-top:-.5rem!important}.margin-right-lg-n2,.margin-x-lg-n2{margin-right:-.5rem!important}.margin-bottom-lg-n2,.margin-y-lg-n2{margin-bottom:-.5rem!important}.margin-left-lg-n2,.margin-x-lg-n2{margin-left:-.5rem!important}.margin-lg-n3{margin:-1rem!important}.margin-top-lg-n3,.margin-y-lg-n3{margin-top:-1rem!important}.margin-right-lg-n3,.margin-x-lg-n3{margin-right:-1rem!important}.margin-bottom-lg-n3,.margin-y-lg-n3{margin-bottom:-1rem!important}.margin-left-lg-n3,.margin-x-lg-n3{margin-left:-1rem!important}.margin-lg-n4{margin:-2rem!important}.margin-top-lg-n4,.margin-y-lg-n4{margin-top:-2rem!important}.margin-right-lg-n4,.margin-x-lg-n4{margin-right:-2rem!important}.margin-bottom-lg-n4,.margin-y-lg-n4{margin-bottom:-2rem!important}.margin-left-lg-n4,.margin-x-lg-n4{margin-left:-2rem!important}.margin-lg-n5{margin:-4rem!important}.margin-top-lg-n5,.margin-y-lg-n5{margin-top:-4rem!important}.margin-right-lg-n5,.margin-x-lg-n5{margin-right:-4rem!important}.margin-bottom-lg-n5,.margin-y-lg-n5{margin-bottom:-4rem!important}.margin-left-lg-n5,.margin-x-lg-n5{margin-left:-4rem!important}.margin-lg-auto{margin:auto!important}.margin-top-lg-auto,.margin-y-lg-auto{margin-top:auto!important}.margin-right-lg-auto,.margin-x-lg-auto{margin-right:auto!important}.margin-bottom-lg-auto,.margin-y-lg-auto{margin-bottom:auto!important}.margin-left-lg-auto,.margin-x-lg-auto{margin-left:auto!important}}@media (min-width: 1200px){.margin-xl-0{margin:0!important}.margin-top-xl-0,.margin-y-xl-0{margin-top:0!important}.margin-right-xl-0,.margin-x-xl-0{margin-right:0!important}.margin-bottom-xl-0,.margin-y-xl-0{margin-bottom:0!important}.margin-left-xl-0,.margin-x-xl-0{margin-left:0!important}.margin-xl-1{margin:.25rem!important}.margin-top-xl-1,.margin-y-xl-1{margin-top:.25rem!important}.margin-right-xl-1,.margin-x-xl-1{margin-right:.25rem!important}.margin-bottom-xl-1,.margin-y-xl-1{margin-bottom:.25rem!important}.margin-left-xl-1,.margin-x-xl-1{margin-left:.25rem!important}.margin-xl-2{margin:.5rem!important}.margin-top-xl-2,.margin-y-xl-2{margin-top:.5rem!important}.margin-right-xl-2,.margin-x-xl-2{margin-right:.5rem!important}.margin-bottom-xl-2,.margin-y-xl-2{margin-bottom:.5rem!important}.margin-left-xl-2,.margin-x-xl-2{margin-left:.5rem!important}.margin-xl-3{margin:1rem!important}.margin-top-xl-3,.margin-y-xl-3{margin-top:1rem!important}.margin-right-xl-3,.margin-x-xl-3{margin-right:1rem!important}.margin-bottom-xl-3,.margin-y-xl-3{margin-bottom:1rem!important}.margin-left-xl-3,.margin-x-xl-3{margin-left:1rem!important}.margin-xl-4{margin:2rem!important}.margin-top-xl-4,.margin-y-xl-4{margin-top:2rem!important}.margin-right-xl-4,.margin-x-xl-4{margin-right:2rem!important}.margin-bottom-xl-4,.margin-y-xl-4{margin-bottom:2rem!important}.margin-left-xl-4,.margin-x-xl-4{margin-left:2rem!important}.margin-xl-5{margin:4rem!important}.margin-top-xl-5,.margin-y-xl-5{margin-top:4rem!important}.margin-right-xl-5,.margin-x-xl-5{margin-right:4rem!important}.margin-bottom-xl-5,.margin-y-xl-5{margin-bottom:4rem!important}.margin-left-xl-5,.margin-x-xl-5{margin-left:4rem!important}.padding-xl-0{padding:0!important}.padding-top-xl-0,.padding-y-xl-0{padding-top:0!important}.padding-right-xl-0,.padding-x-xl-0{padding-right:0!important}.padding-bottom-xl-0,.padding-y-xl-0{padding-bottom:0!important}.padding-left-xl-0,.padding-x-xl-0{padding-left:0!important}.padding-xl-1{padding:.25rem!important}.padding-top-xl-1,.padding-y-xl-1{padding-top:.25rem!important}.padding-right-xl-1,.padding-x-xl-1{padding-right:.25rem!important}.padding-bottom-xl-1,.padding-y-xl-1{padding-bottom:.25rem!important}.padding-left-xl-1,.padding-x-xl-1{padding-left:.25rem!important}.padding-xl-2{padding:.5rem!important}.padding-top-xl-2,.padding-y-xl-2{padding-top:.5rem!important}.padding-right-xl-2,.padding-x-xl-2{padding-right:.5rem!important}.padding-bottom-xl-2,.padding-y-xl-2{padding-bottom:.5rem!important}.padding-left-xl-2,.padding-x-xl-2{padding-left:.5rem!important}.padding-xl-3{padding:1rem!important}.padding-top-xl-3,.padding-y-xl-3{padding-top:1rem!important}.padding-right-xl-3,.padding-x-xl-3{padding-right:1rem!important}.padding-bottom-xl-3,.padding-y-xl-3{padding-bottom:1rem!important}.padding-left-xl-3,.padding-x-xl-3{padding-left:1rem!important}.padding-xl-4{padding:2rem!important}.padding-top-xl-4,.padding-y-xl-4{padding-top:2rem!important}.padding-right-xl-4,.padding-x-xl-4{padding-right:2rem!important}.padding-bottom-xl-4,.padding-y-xl-4{padding-bottom:2rem!important}.padding-left-xl-4,.padding-x-xl-4{padding-left:2rem!important}.padding-xl-5{padding:4rem!important}.padding-top-xl-5,.padding-y-xl-5{padding-top:4rem!important}.padding-right-xl-5,.padding-x-xl-5{padding-right:4rem!important}.padding-bottom-xl-5,.padding-y-xl-5{padding-bottom:4rem!important}.padding-left-xl-5,.padding-x-xl-5{padding-left:4rem!important}.margin-xl-n1{margin:-.25rem!important}.margin-top-xl-n1,.margin-y-xl-n1{margin-top:-.25rem!important}.margin-right-xl-n1,.margin-x-xl-n1{margin-right:-.25rem!important}.margin-bottom-xl-n1,.margin-y-xl-n1{margin-bottom:-.25rem!important}.margin-left-xl-n1,.margin-x-xl-n1{margin-left:-.25rem!important}.margin-xl-n2{margin:-.5rem!important}.margin-top-xl-n2,.margin-y-xl-n2{margin-top:-.5rem!important}.margin-right-xl-n2,.margin-x-xl-n2{margin-right:-.5rem!important}.margin-bottom-xl-n2,.margin-y-xl-n2{margin-bottom:-.5rem!important}.margin-left-xl-n2,.margin-x-xl-n2{margin-left:-.5rem!important}.margin-xl-n3{margin:-1rem!important}.margin-top-xl-n3,.margin-y-xl-n3{margin-top:-1rem!important}.margin-right-xl-n3,.margin-x-xl-n3{margin-right:-1rem!important}.margin-bottom-xl-n3,.margin-y-xl-n3{margin-bottom:-1rem!important}.margin-left-xl-n3,.margin-x-xl-n3{margin-left:-1rem!important}.margin-xl-n4{margin:-2rem!important}.margin-top-xl-n4,.margin-y-xl-n4{margin-top:-2rem!important}.margin-right-xl-n4,.margin-x-xl-n4{margin-right:-2rem!important}.margin-bottom-xl-n4,.margin-y-xl-n4{margin-bottom:-2rem!important}.margin-left-xl-n4,.margin-x-xl-n4{margin-left:-2rem!important}.margin-xl-n5{margin:-4rem!important}.margin-top-xl-n5,.margin-y-xl-n5{margin-top:-4rem!important}.margin-right-xl-n5,.margin-x-xl-n5{margin-right:-4rem!important}.margin-bottom-xl-n5,.margin-y-xl-n5{margin-bottom:-4rem!important}.margin-left-xl-n5,.margin-x-xl-n5{margin-left:-4rem!important}.margin-xl-auto{margin:auto!important}.margin-top-xl-auto,.margin-y-xl-auto{margin-top:auto!important}.margin-right-xl-auto,.margin-x-xl-auto{margin-right:auto!important}.margin-bottom-xl-auto,.margin-y-xl-auto{margin-bottom:auto!important}.margin-left-xl-auto,.margin-x-xl-auto{margin-left:auto!important}}.h1{font-size:2em}.h2{font-size:1.5em}.h3{font-size:1.17em}.h4{font-size:1em}.h5{font-size:.83em}.h6{font-size:.67em}.cursor-alias{cursor:alias}.cursor-all-scroll{cursor:all-scroll}.cursor-auto{cursor:auto}.cursor-cell{cursor:cell}.cursor-context-menu{cursor:context-menu}.cursor-col-resize{cursor:col-resize}.cursor-copy{cursor:copy}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-e-resize{cursor:e-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-help{cursor:help}.cursor-move{cursor:move}.cursor-n-resize{cursor:n-resize}.cursor-ne-resize{cursor:ne-resize}.cursor-nesw-resize{cursor:nesw-resize}.cursor-ns-resize{cursor:ns-resize}.cursor-nw-resize{cursor:nw-resize}.cursor-nwse-resize{cursor:nwse-resize}.cursor-no-drop{cursor:no-drop}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-row-resize{cursor:row-resize}.cursor-s-resize{cursor:s-resize}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.cursor-text{cursor:text}.cursor-w-resize{cursor:w-resize}.cursor-wait{cursor:wait}.cursor-zoom-in{cursor:zoom-in}.cursor-zoom-out{cursor:zoom-out}.mat-tooltip{font-size:16px!important}html,body{height:100%}body{margin:0;padding:0;font-family:opens sans regular,sans-serif}iframe{border:none}.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,Helvetica Neue,sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,Helvetica Neue,sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto,Helvetica Neue,sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto,Helvetica Neue,sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,Helvetica Neue,sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-expansion-panel-header{font-family:Roboto,Helvetica Neue,sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(.75);width:133.3333333333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(.75);width:133.3333433333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);width:133.3333333333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);width:133.3333433333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);width:133.3333533333%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59374em) scale(.75);width:133.3333433333%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(.75);width:133.3333433333%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,Helvetica Neue,sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto,Helvetica Neue,sans-serif}.mat-slider-thumb-label-text{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto,Helvetica Neue,sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0}.mat-tooltip{font-family:Roboto,Helvetica Neue,sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item,.mat-list-option{font-family:Roboto,Helvetica Neue,sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-simple-snackbar{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale(0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator,.mat-mdc-focus-indicator{position:relative}.title,.header{font-family:Encode Sans Condensed,sans-serif;font-weight:900}.paragraph-title,.tagline{font-family:Open Sans,sans-serif;font-weight:400}.paragraph-title-bold .tagLine-bold{font-family:Open Sans,sans-serif;font-weight:700}.plain-text,.remarks{font-family:Open Sans,sans-serif;font-weight:300}.plain-text-bold{font-family:Open Sans,sans-serif;font-weight:700}.flex-column{box-sizing:border-box;display:flex;flex-direction:column}.flex-row{box-sizing:border-box;display:flex;flex-direction:row}.flex-row-center{align-items:center;justify-content:center}.mat-button-large{line-height:48px;font-size:18px;font-weight:700;padding:0 24px!important}.mat-round{border-radius:.5em}:root{--initial-primary: #4a918e;--initial-accent: #9cd8d7;--initial-warn: #ef4351;--initial-dark-background: #222222;--initial-light-background: #f2f2f2;--initial-light-background: white;--initial-light-text: rgba(0, 0, 0, .87);--initial-dark-text: rgba(255, 255, 255, .87);--background: #050505;--orange-accent: #ff9800;--green-accent: #00e676;--yellow-accent: #fdd835;--purple-accent: #9c27b0;--cyan-accent: rgba(132, 255, 255, .75);--pink-accent: #e91e63;--success: #00e676}body{background-color:var(--initial-dark-background)}::ng-deep .mat-tooltip{font-size:16px!important}:host .valid-control{color:var(--green-accent)}:host .invalid-control{color:var(--theme-warn-500)}:host .actions .item:not(:last-child){margin-right:0}:host .project-thumbnail img{height:50px;width:auto}:host .active{background-color:var(--theme-accent-400);transition:background-color 1s linear}:host .inactive{background-color:#f2f5a900;transition:background-color 1s linear}:host .expansion-panel{width:100%;margin-bottom:10px}:host .expansion-container{max-height:300px;overflow-y:auto}:host .divider-fill-vert{background-color:var(--theme-accent-500);min-height:100%;top:10%;bottom:10%;min-width:5px}:host .divider-fill-hor{background-color:var(--theme-accent-500);height:5px;width:100%}:host .form-disabled{background-color:#797979;opacity:.5;border-radius:4px}::ng-deep input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s;-webkit-text-fill-color:#FFFFFFDE}@media (max-width: 768px){.spread{margin:1em!important}}@media (max-width: 480px){.spread{margin:.5em!important}}.spinner-logo{display:none!important}.flow-card{background-color:#2f2f2f!important}:host ::ng-deep #app-back-button{margin-left:-37px;margin-top:15px}:host ::ng-deep .apps-actions{float:right}:host ::ng-deep .mat-card .mat-card-content{text-align:center;overflow:hidden}:host ::ng-deep .mat-card .mat-card-actions .data-app-actions{display:none!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes{display:flex!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes .mat-icon{font-size:8px}:host ::ng-deep .mat-card:hover .mat-card-actions .data-app-actions{display:flex!important}:host ::ng-deep .mat-card:hover .mat-card-actions .data-app-fakes{display:none!important}:host ::ng-deep .mat-subtitle .mat-chip-list{display:inline-block}:host ::ng-deep .mat-form-field{margin-top:.5em;margin-bottom:.5em}:host ::ng-deep .mat-form-field.with-hint{margin-bottom:1em}@media (max-width: 768px){:host ::ng-deep .form-card{width:100%}:host ::ng-deep .mat-card .mat-card-actions .data-app-actions{display:flex!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes{display:none!important}}:host ::ng-deep .domain-item{border-radius:5;border:var(--theme-accent-500) solid 1px}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i6.MatCardHeader, selector: "mat-card-header" }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.SourceControlFormControlsComponent, selector: "lcu-source-control-form-controls", inputs: ["branches-disabled", "build-path", "build-path-disabled", "form-group", "org-disabled", "repo-disabled", "source-control", "source-control-root", "use-branches", "use-build-path"], outputs: ["branches-changed"] }, { type: i11.NpmPackageSelectComponent, selector: "lcu-npm-package-select", inputs: ["npm-package", "npm-package-version", "form-group"] }, { type: i12.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i15.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i15.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i15.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i6.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i16.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { 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]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i13.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i13.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i7.MatSuffix, selector: "[matSuffix]" }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i6.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }] });
551
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AppsFlowComponent, decorators: [{
552
- type: Component,
553
- args: [{ selector: 'lcu-apps-flow', template: "<div>\n <div *ngIf=\"EditingApplication?.Application\">\n <h2>\n <button\n mat-icon-button\n matTooltip=\"Back to Routes\"\n (click)=\"SetEditingApplication(null)\"\n >\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n {{ CurrentApplicationRoute }} / {{ EditingApplication.Application?.Name }}\n </h2>\n </div>\n <form\n [formGroup]=\"ApplicationFormGroup\"\n (ngSubmit)=\"SaveApplication()\"\n *ngIf=\"EditingApplication\"\n >\n\n <div\n fxLayout=\"row wrap\"\n fxLayoutAlign=\"center start\"\n fxLayout.lt-md=\"column\"\n >\n <div class=\"form-card\" fxFlex=\"70%\" fxFlex.lt-md=\"100%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title>\n <ng-container *ngIf=\"EditingApplication?.Application\">\n Edit Application:\n {{ EditingApplication.Application?.Name }}\n </ng-container>\n\n <ng-container *ngIf=\"!EditingApplication?.Application\">\n Create an Application\n </ng-container>\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Name\"\n formControlName=\"name\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <textarea\n matInput\n placeholder=\"Description\"\n formControlName=\"description\"\n rows=\"3\"\n required\n ></textarea>\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Route\"\n formControlName=\"route\"\n required\n />\n </mat-form-field>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div class=\"form-card\" fxFlex=\"35%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title> Processor Details </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"procType\"\n (selectionChange)=\"ProcessorTypeChanged($event)\"\n required\n >\n <mat-option value=\"DFS\">View Package</mat-option>\n\n <mat-option value=\"Redirect\">Redirect</mat-option>\n\n <mat-option value=\"Proxy\">Proxy</mat-option>\n\n <mat-option value=\"OAuth\">OAuth</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"ProcessorType\">\n <div *ngSwitchCase=\"'DFS'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Default File\"\n formControlName=\"defaultFile\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"NPM\">NPM</mat-option>\n\n <mat-option value=\"GitHub\">GitHub</mat-option>\n\n <!-- <mat-option value=\"Zip\">Zip</mat-option> -->\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHub'\">\n <lcu-source-control-form-controls\n [build-path]=\"EditingApplication?.LowCodeUnit?.Path\"\n [form-group]=\"ApplicationFormGroup\"\n [source-control]=\"DefaultSourceControl\"\n [use-branches]=\"false\"\n [use-build-path]=\"true\"\n ></lcu-source-control-form-controls>\n\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n SourceControlFormControls?.RepositoryFormControl?.valid\n \"\n >\n <input\n matInput\n placeholder=\"Build\"\n formControlName=\"build\"\n required\n />\n\n <mat-hint>\n Current Build:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'NPM'\">\n <lcu-npm-package-select\n [npm-package]=\"EditingApplication?.LowCodeUnit?.Package\"\n [npm-package-version]=\"\n EditingApplication?.LowCodeUnit?.Version\n \"\n [form-group]=\"ApplicationFormGroup\"\n ></lcu-npm-package-select>\n\n <mat-hint>\n Current Version:\n {{ EditingApplication?.LowCodeUnit?.CurrentVersion }}\n </mat-hint>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'OAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Scopes (space separated)\"\n formControlName=\"scopes\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Token Lookup\"\n formControlName=\"tokenLookup\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"GitHubOAuth\">GitHub</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'GitHubOAuth'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client ID\"\n formControlName=\"clientId\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Client Secret\"\n formControlName=\"clientSecret\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Proxy'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Inbound Path\"\n formControlName=\"inboundPath\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n placeholder=\"Type\"\n formControlName=\"lcuType\"\n (selectionChange)=\"LCUTypeChanged($event)\"\n required\n >\n <mat-option value=\"API\">API</mat-option>\n\n <mat-option value=\"SPA\">Single Page Application</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div [ngSwitch]=\"LCUType\">\n <div *ngSwitchCase=\"'API'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"API Root\"\n formControlName=\"apiRoot\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Allowed Methods (separate with spaces)\"\n formControlName=\"methods\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Security ({header}~{value})\"\n formControlName=\"security\"\n required\n />\n </mat-form-field>\n </div>\n\n <div *ngSwitchCase=\"'SPA'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"SPA Root\"\n formControlName=\"spaRoot\"\n required\n />\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <div *ngSwitchCase=\"'Redirect'\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Redirect URL\"\n formControlName=\"redirect\"\n required\n />\n </mat-form-field>\n\n <div>\n <mat-slide-toggle \n class=\"spread\" \n formControlName=\"permanent\">\n Is Permanent?\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"spread\"\n formControlName=\"preserveMethod\"\n >\n Preserve Method?\n </mat-slide-toggle>\n\n <mat-icon\n class=\"spread\"\n matSuffix\n (mouseenter)=\"DetermineTooltipText()\"\n matTooltip={{redirectTooltip}}\n >\n info_outline\n </mat-icon>\n\n <!-- <mat-icon\n *ngIf=\"!IsPermanent && !IsPreserve\"\n\n class=\"spread\"\n matSuffix\n matTooltip=\"302 \u2013 Not Permanent and Not Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n <!-- <mat-icon\n *ngIf=\"!IsPermanent && IsPreserve\"\n class=\"spread\"\n matSuffix\n matTooltip=\"307 \u2013 Not Permanent and Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n <!-- <mat-icon\n *ngIf=\"IsPermanent && IsPreserve\"\n class=\"spread\"\n matSuffix\n matTooltip=\"308 \u2013 Permanent and Preserve\"\n >\n info_outline\n </mat-icon> -->\n\n \n\n <!-- <mat-icon\n class=\"spread\"\n matSuffix\n matTooltip=\"Values used to control the redirect type. Permanent and Not Preserve = 301; Not Permanent and Not Preserve = 302; Permanent and Preserve = 308; Not Permanent and Not Preserve = 307;\"\n >\n info_outline\n </mat-icon> -->\n </div>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n\n <div class=\"form-card\" fxFlex=\"35%\">\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <mat-card-title> Security Settings </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"isPrivate\"\n matTooltip=\"Is Secure Application?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Secured Application is one that requires the user to be authenticated to use the application. The application is hosted behind an identity wall.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <div>\n <div *ngIf=\"IsPrivateFormControl.value\">\n <div>\n <mat-slide-toggle formControlName=\"isTriggerSignIn\">\n Is Trigger Sign In Application?\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"A Trigger Sign In Application will direct the user to sign in if they are not already.\"\n >\n info_outline\n </mat-icon>\n </div>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"spread flow-card\" *ngIf=\"ProcessorType != 'Redirect'\">\n <mat-card-header>\n <mat-card-title *ngIf=\"!HasBuildFormControl.value\">\n Build & Source\n </mat-card-title>\n\n <mat-card-title *ngIf=\"HasBuildFormControl.value\">\n Source Control\n </mat-card-title>\n\n <div fxFlex></div>\n\n <mat-slide-toggle\n formControlName=\"hasBuild\"\n matTooltip=\"Has Build?\"\n >\n </mat-slide-toggle>\n\n <mat-icon\n matSuffix\n matTooltip=\"Configure source control, DevOps CI/CD, and artifacts.\"\n >\n info_outline\n </mat-icon>\n </mat-card-header>\n\n <mat-card-content>\n <mat-form-field\n class=\"mat-full-width\"\n *ngIf=\"\n HasBuildFormControl.value && SourceControlLookups?.length > 0\n \"\n >\n <mat-select\n formControlName=\"sourceControlLookup\"\n placeholder=\"Source Control\"\n (selectionChange)=\"SourceControlLookupChanged($event)\"\n [disabled]=\"\n SourceControlFormControls?.Loading || HostingDetails?.Loading\n \"\n >\n <ng-container\n *ngFor=\"let srcCtrlLookup of SourceControlLookups\"\n >\n <mat-option\n [value]=\"srcCtrlLookup\"\n *ngIf=\"SourceControls[srcCtrlLookup]; let srcCtrl\"\n >\n {{ srcCtrl.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n <div *ngIf=\"HasBuildFormControl?.value\">\n <h3>\n @{{\n SourceControlFormControls?.OrganizationFormControl?.value ||\n SourceControl?.Organization\n }}/{{\n SourceControlFormControls?.RepositoryFormControl?.value ||\n SourceControl?.Repository\n }}\n </h3>\n\n <p>Organization and Repository pulled from build settings</p>\n\n <mat-hint>\n CurrentBuild:\n {{ EditingApplication?.LowCodeUnit?.CurrentBuild }}\n </mat-hint>\n </div>\n </mat-form-field>\n\n <div *ngIf=\"SourceControlLookups?.length < 0\">\n <h3>\n Create source control locations under the DevOps tab above.\n </h3>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n\n <div class=\"spread\">\n <div fxFlex></div>\n\n <button mat-button type=\"button\" (click)=\"SetEditingApplication(null)\">\n <mat-icon>cancel</mat-icon> Cancel\n </button>\n\n <div fxFlex></div>\n\n <button\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n [disabled]=\"!ApplicationFormGroup.valid || !ApplicationFormGroup.dirty\"\n >\n <mat-icon>save</mat-icon> Save Application\n </button>\n\n <div fxFlex></div>\n </div>\n </form>\n\n <div class=\"spread\" *ngIf=\"!EditingApplication\">\n <span class=\"apps-actions\">\n <button mat-raised-button color=\"accent\" (click)=\"CreateNewApplication()\">\n <mat-icon color=\"primary\">add</mat-icon> Create New\n </button>\n </span>\n\n <div class=\"spread\" *ngIf=\"!CurrentApplicationRoute\">\n <div *ngIf=\"ApplicationRoutes?.length <= 0\">\n <h2>No applications created, create your first application.</h2>\n </div>\n\n <div *ngIf=\"ApplicationRoutes?.length > 0\">\n <h2>Project Routes</h2>\n\n <div\n fxLayout=\"row wrap\"\n fxLayout.lt-md=\"column\"\n *ngIf=\"ApplicationRoutes\"\n >\n <div\n fxFlex=\"20%\"\n fxFlex.lt-md=\"100%\"\n *ngFor=\"let appRoute of ApplicationRoutes\"\n >\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <!-- <img mat-card-avatar=\"/assets/images/project-icon.png\" /> -->\n\n <mat-card-title\n class=\"mat-subheading-2\"\n [matTooltip]=\"appRoute\"\n >\n {{ appRoute }}\n </mat-card-title>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"spread\"></div>\n </mat-card-content>\n\n <mat-card-actions>\n <div class=\"data-app-actions\">\n <div fxFlex></div>\n\n <a\n mat-icon-button\n href=\"https://{{ PrimaryHost }}{{ appRoute }}\"\n target=\"_blank\"\n >\n <mat-icon matTooltip=\"Launch\">launch</mat-icon>\n </a>\n\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"EditApplicationRouteClicked(appRoute)\"\n >\n <mat-icon matTooltip=\"Edit Application Route\">\n settings\n </mat-icon>\n </button>\n </div>\n\n <div class=\"data-app-fakes\">\n <div fxFlex></div>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"CurrentApplicationRoute\">\n <h2>\n <button\n mat-icon-button\n matTooltip=\"Back to Routes\"\n (click)=\"CurrentApplicationRoute = null\"\n >\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n {{ CurrentApplicationRoute }} Routes\n </h2>\n\n <div fxLayout=\"row wrap\" fxLayout.lt-md=\"column\">\n <ng-container *ngFor=\"let appLookup of CurrentRouteApplicationLookups\">\n <div\n fxFlex=\"30%\"\n fxFlex.lt-md=\"100%\"\n *ngIf=\"\n RoutedApplications[CurrentApplicationRoute][appLookup];\n let app\n \"\n >\n <mat-card class=\"spread flow-card\">\n <mat-card-header>\n <!-- <img mat-card-avatar=\"/assets/images/project-icon.png\" /> -->\n\n <mat-card-title\n class=\"mat-subheading-2\"\n [matTooltip]=\"app.Application.Description\"\n >\n {{ app.Application.Name }}\n </mat-card-title>\n\n <mat-card-subtitle\n class=\"mat-subheading-1\"\n [matTooltip]=\"\n app.LowCodeUnit?.CurrentVersion ||\n app.LowCodeUnit?.CurrentBuild\n \"\n >\n @{{\n app.LowCodeUnit?.CurrentVersion ||\n app.LowCodeUnit?.CurrentBuild ||\n app.Processor?.Redirect ||\n \"No version deployed\"\n }}\n </mat-card-subtitle>\n </mat-card-header>\n\n <mat-card-content>\n <div class=\"spread\"></div>\n </mat-card-content>\n\n <mat-card-actions>\n <div class=\"data-app-actions\">\n <div fxFlex></div>\n\n <a\n mat-icon-button\n href=\"https://{{ PrimaryHost }}{{\n app.LookupConfig.PathRegex.replace('.*', '')\n }}\"\n target=\"_blank\"\n >\n <mat-icon matTooltip=\"Launch\">launch</mat-icon>\n </a>\n\n <a\n *ngIf=\"GetProcessorType(appLookup) === 'DFS'\"\n mat-icon-button\n (click)=\"Unpack(appLookup, app)\"\n target=\"_blank\"\n matTooltip=\"Unpack {{\n app.LowCodeUnit?.Version || app.LowCodeUnit?.Build\n }}\"\n >\n <mat-icon>cloud_upload</mat-icon>\n </a>\n\n <button\n mat-icon-button\n (click)=\"SetEditingApplication(appLookup)\"\n >\n <mat-icon matTooltip=\"Edit Application\"> edit </mat-icon>\n </button>\n\n <button\n mat-icon-button\n color=\"warn\"\n (click)=\"DeleteApplication(appLookup, app.Application.Name)\"\n >\n <mat-icon matTooltip=\"Delete {{ app.Application.Name }}\">\n delete_forever\n </mat-icon>\n </button>\n </div>\n\n <div class=\"data-app-fakes\">\n <div fxFlex></div>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled>\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n\n <button mat-icon-button disabled \n *ngIf=\"GetProcessorType(appLookup) === 'DFS'\">\n <mat-icon>fiber_manual_record</mat-icon>\n </button>\n </div>\n </mat-card-actions>\n </mat-card>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/icon?family=Material+Icons\";@import\"https://fonts.googleapis.com/css?family=Encode+Sans+Condensed:400,900&display=swap\";@import\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,700&display=swap\";.disable-autofill-background-default input:-webkit-autofill,.disable-autofill-background-default input:-webkit-autofill:hover,.disable-autofill-background-default input:-webkit-autofill:focus,.disable-autofill-background-default textarea:-webkit-autofill,.disable-autofill-background-default textarea:-webkit-autofill:hover,.disable-autofill-background-default textarea:-webkit-autofill:focus,.disable-autofill-background-default select:-webkit-autofill,.disable-autofill-background-default select:-webkit-autofill:hover,.disable-autofill-background-default select:-webkit-autofill:focus{-webkit-transition:background-color 5000s!important;transition:background-color 5000s!important}.list-item-disabled{opacity:.5;filter:alpha(opacity=50);cursor:not-allowed!important}.filler{flex:1 1 auto;display:inline-block!important}.sticky{position:sticky;z-index:750;top:0}.inline{display:inline-block}.contents,.page-element{display:contents}.mat-spinner{margin:auto}.mat-full-width{width:100%}.spread{margin:2rem}.spread-thin{margin:1rem}.overlay{position:sticky!important}.overlay.top{top:0}.overlay.bottom{bottom:0}.margin-0{margin:0!important}.margin-top-0,.margin-y-0{margin-top:0!important}.margin-right-0,.margin-x-0{margin-right:0!important}.margin-bottom-0,.margin-y-0{margin-bottom:0!important}.margin-left-0,.margin-x-0{margin-left:0!important}.margin-1{margin:.25rem!important}.margin-top-1,.margin-y-1{margin-top:.25rem!important}.margin-right-1,.margin-x-1{margin-right:.25rem!important}.margin-bottom-1,.margin-y-1{margin-bottom:.25rem!important}.margin-left-1,.margin-x-1{margin-left:.25rem!important}.margin-2{margin:.5rem!important}.margin-top-2,.margin-y-2{margin-top:.5rem!important}.margin-right-2,.margin-x-2{margin-right:.5rem!important}.margin-bottom-2,.margin-y-2{margin-bottom:.5rem!important}.margin-left-2,.margin-x-2{margin-left:.5rem!important}.margin-3{margin:1rem!important}.margin-top-3,.margin-y-3{margin-top:1rem!important}.margin-top-bottom-3{margin:1rem 0!important}.margin-right-3,.margin-x-3{margin-right:1rem!important}.margin-bottom-3,.margin-y-3{margin-bottom:1rem!important}.margin-left-3,.margin-x-3{margin-left:1rem!important}.margin-4{margin:2rem!important}.margin-top-4,.margin-y-4{margin-top:2rem!important}.margin-right-4,.margin-x-4{margin-right:2rem!important}.margin-bottom-4,.margin-y-4{margin-bottom:2rem!important}.margin-left-4,.margin-x-4{margin-left:2rem!important}.margin-right-5,.margin-x-5{margin-right:4rem!important}.margin-bottom-5,.margin-y-5{margin-bottom:4rem!important}.margin-left-5,.margin-x-5{margin-left:4rem!important}.margin-5{margin:4rem!important}.margin-top-5,.margin-y-5{margin-top:4rem!important}.margin-right-6,.margin-x-6{margin-right:4.5rem!important}.margin-bottom-6,.margin-y-6{margin-bottom:4.5rem!important}.margin-left-6,.margin-x-6{margin-left:4.5rem!important}.margin-7{margin:6rem!important}.margin-top-7,.margin-y-7{margin-top:6rem!important}.margin-right-7,.margin-x-7{margin-right:6rem!important}.margin-bottom-7,.margin-y-7{margin-bottom:6rem!important}.margin-left-7,.margin-x-7{margin-left:6rem!important}.margin-8{margin:7.5rem!important}.margin-top-8,.margin-y-8{margin-top:7.5rem!important}.margin-right-8,.margin-x-8{margin-right:7.5rem!important}.margin-bottom-8,.margin-y-8{margin-bottom:7.5rem!important}.margin-left-8,.margin-x-8{margin-left:7.5rem!important}.margin-9{margin:9rem!important}.margin-top-9,.margin-y-9{margin-top:9rem!important}.margin-right-9,.margin-x-9{margin-right:9rem!important}.margin-bottom-9,.margin-y-9{margin-bottom:9rem!important}.margin-left-9,.margin-x-9{margin-left:9rem!important}.padding-0{padding:0!important}.padding-top-0,.padding-y-0{padding-top:0!important}.padding-right-0,.padding-x-0{padding-right:0!important}.padding-bottom-0,.padding-y-0{padding-bottom:0!important}.padding-left-0,.padding-x-0{padding-left:0!important}.padding-1{padding:.25rem!important}.padding-top-1,.padding-y-1{padding-top:.25rem!important}.padding-right-1,.padding-x-1{padding-right:.25rem!important}.padding-bottom-1,.padding-y-1{padding-bottom:.25rem!important}.padding-left-1,.padding-x-1{padding-left:.25rem!important}.padding-2{padding:.5rem!important}.padding-top-2,.padding-y-2{padding-top:.5rem!important}.padding-right-2,.padding-x-2{padding-right:.5rem!important}.padding-bottom-2,.padding-y-2{padding-bottom:.5rem!important}.padding-left-2,.padding-x-2{padding-left:.5rem!important}.padding-3{padding:1rem!important}.padding-top-3,.padding-y-3{padding-top:1rem!important}.padding-right-3,.padding-x-3{padding-right:1rem!important}.padding-bottom-3,.padding-y-3{padding-bottom:1rem!important}.padding-left-3,.padding-x-3{padding-left:1rem!important}.padding-4{padding:2rem!important}.padding-top-4,.padding-y-4{padding-top:2rem!important}.padding-right-4,.padding-x-4{padding-right:2rem!important}.padding-bottom-4,.padding-y-4{padding-bottom:2rem!important}.padding-left-4,.padding-x-4{padding-left:2rem!important}.padding-5{padding:4rem!important}.padding-top-5,.padding-y-5{padding-top:4rem!important}.padding-right-5,.padding-x-5{padding-right:4rem!important}.padding-bottom-5,.padding-y-5{padding-bottom:4rem!important}.padding-left-5,.padding-x-5{padding-left:4rem!important}.margin-n1{margin:-.25rem!important}.margin-top-n1,.margin-y-n1{margin-top:-.25rem!important}.margin-right-n1,.margin-x-n1{margin-right:-.25rem!important}.margin-bottom-n1,.margin-y-n1{margin-bottom:-.25rem!important}.margin-left-n1,.margin-x-n1{margin-left:-.25rem!important}.margin-n2{margin:-.5rem!important}.margin-top-n2,.margin-y-n2{margin-top:-.5rem!important}.margin-right-n2,.margin-x-n2{margin-right:-.5rem!important}.margin-bottom-n2,.margin-y-n2{margin-bottom:-.5rem!important}.margin-left-n2,.margin-x-n2{margin-left:-.5rem!important}.margin-n3{margin:-1rem!important}.margin-top-n3,.margin-y-n3{margin-top:-1rem!important}.margin-right-n3,.margin-x-n3{margin-right:-1rem!important}.margin-bottom-n3,.margin-y-n3{margin-bottom:-1rem!important}.margin-left-n3,.margin-x-n3{margin-left:-1rem!important}.margin-n4{margin:-2rem!important}.margin-top-n4,.margin-y-n4{margin-top:-2rem!important}.margin-right-n4,.margin-x-n4{margin-right:-2rem!important}.margin-bottom-n4,.margin-y-n4{margin-bottom:-2rem!important}.margin-left-n4,.margin-x-n4{margin-left:-2rem!important}.margin-n5{margin:-4rem!important}.margin-top-n5,.margin-y-n5{margin-top:-4rem!important}.margin-right-n5,.margin-x-n5{margin-right:-4rem!important}.margin-bottom-n5,.margin-y-n5{margin-bottom:-4rem!important}.margin-left-n5,.margin-x-n5{margin-left:-4rem!important}.margin-auto{margin:auto!important}.margin-top-auto,.margin-y-auto{margin-top:auto!important}.margin-right-auto,.margin-x-auto{margin-right:auto!important}.margin-bottom-auto,.margin-y-auto{margin-bottom:auto!important}.margin-left-auto,.margin-x-auto{margin-left:auto!important}@media (min-width: 576px){.margin-sm-0{margin:0!important}.margin-top-sm-0,.margin-y-sm-0{margin-top:0!important}.margin-right-sm-0,.margin-x-sm-0{margin-right:0!important}.margin-bottom-sm-0,.margin-y-sm-0{margin-bottom:0!important}.margin-left-sm-0,.margin-x-sm-0{margin-left:0!important}.margin-sm-1{margin:.25rem!important}.margin-top-sm-1,.margin-y-sm-1{margin-top:.25rem!important}.margin-right-sm-1,.margin-x-sm-1{margin-right:.25rem!important}.margin-bottom-sm-1,.margin-y-sm-1{margin-bottom:.25rem!important}.margin-left-sm-1,.margin-x-sm-1{margin-left:.25rem!important}.margin-sm-2{margin:.5rem!important}.margin-top-sm-2,.margin-y-sm-2{margin-top:.5rem!important}.margin-right-sm-2,.margin-x-sm-2{margin-right:.5rem!important}.margin-bottom-sm-2,.margin-y-sm-2{margin-bottom:.5rem!important}.margin-left-sm-2,.margin-x-sm-2{margin-left:.5rem!important}.margin-sm-3{margin:1rem!important}.margin-top-sm-3,.margin-y-sm-3{margin-top:1rem!important}.margin-right-sm-3,.margin-x-sm-3{margin-right:1rem!important}.margin-bottom-sm-3,.margin-y-sm-3{margin-bottom:1rem!important}.margin-left-sm-3,.margin-x-sm-3{margin-left:1rem!important}.margin-sm-4{margin:2rem!important}.margin-top-sm-4,.margin-y-sm-4{margin-top:2rem!important}.margin-right-sm-4,.margin-x-sm-4{margin-right:2rem!important}.margin-bottom-sm-4,.margin-y-sm-4{margin-bottom:2rem!important}.margin-left-sm-4,.margin-x-sm-4{margin-left:2rem!important}.margin-sm-5{margin:4rem!important}.margin-top-sm-5,.margin-y-sm-5{margin-top:4rem!important}.margin-right-sm-5,.margin-x-sm-5{margin-right:4rem!important}.margin-bottom-sm-5,.margin-y-sm-5{margin-bottom:4rem!important}.margin-left-sm-5,.margin-x-sm-5{margin-left:4rem!important}.padding-sm-0{padding:0!important}.padding-top-sm-0,.padding-y-sm-0{padding-top:0!important}.padding-right-sm-0,.padding-x-sm-0{padding-right:0!important}.padding-bottom-sm-0,.padding-y-sm-0{padding-bottom:0!important}.padding-left-sm-0,.padding-x-sm-0{padding-left:0!important}.padding-sm-1{padding:.25rem!important}.padding-top-sm-1,.padding-y-sm-1{padding-top:.25rem!important}.padding-right-sm-1,.padding-x-sm-1{padding-right:.25rem!important}.padding-bottom-sm-1,.padding-y-sm-1{padding-bottom:.25rem!important}.padding-left-sm-1,.padding-x-sm-1{padding-left:.25rem!important}.padding-sm-2{padding:.5rem!important}.padding-top-sm-2,.padding-y-sm-2{padding-top:.5rem!important}.padding-right-sm-2,.padding-x-sm-2{padding-right:.5rem!important}.padding-bottom-sm-2,.padding-y-sm-2{padding-bottom:.5rem!important}.padding-left-sm-2,.padding-x-sm-2{padding-left:.5rem!important}.padding-sm-3{padding:1rem!important}.padding-top-sm-3,.padding-y-sm-3{padding-top:1rem!important}.padding-right-sm-3,.padding-x-sm-3{padding-right:1rem!important}.padding-bottom-sm-3,.padding-y-sm-3{padding-bottom:1rem!important}.padding-left-sm-3,.padding-x-sm-3{padding-left:1rem!important}.padding-sm-4{padding:2rem!important}.padding-top-sm-4,.padding-y-sm-4{padding-top:2rem!important}.padding-right-sm-4,.padding-x-sm-4{padding-right:2rem!important}.padding-bottom-sm-4,.padding-y-sm-4{padding-bottom:2rem!important}.padding-left-sm-4,.padding-x-sm-4{padding-left:2rem!important}.padding-sm-5{padding:4rem!important}.padding-top-sm-5,.padding-y-sm-5{padding-top:4rem!important}.padding-right-sm-5,.padding-x-sm-5{padding-right:4rem!important}.padding-bottom-sm-5,.padding-y-sm-5{padding-bottom:4rem!important}.padding-left-sm-5,.padding-x-sm-5{padding-left:4rem!important}.margin-sm-n1{margin:-.25rem!important}.margin-top-sm-n1,.margin-y-sm-n1{margin-top:-.25rem!important}.margin-right-sm-n1,.margin-x-sm-n1{margin-right:-.25rem!important}.margin-bottom-sm-n1,.margin-y-sm-n1{margin-bottom:-.25rem!important}.margin-left-sm-n1,.margin-x-sm-n1{margin-left:-.25rem!important}.margin-sm-n2{margin:-.5rem!important}.margin-top-sm-n2,.margin-y-sm-n2{margin-top:-.5rem!important}.margin-right-sm-n2,.margin-x-sm-n2{margin-right:-.5rem!important}.margin-bottom-sm-n2,.margin-y-sm-n2{margin-bottom:-.5rem!important}.margin-left-sm-n2,.margin-x-sm-n2{margin-left:-.5rem!important}.margin-sm-n3{margin:-1rem!important}.margin-top-sm-n3,.margin-y-sm-n3{margin-top:-1rem!important}.margin-right-sm-n3,.margin-x-sm-n3{margin-right:-1rem!important}.margin-bottom-sm-n3,.margin-y-sm-n3{margin-bottom:-1rem!important}.margin-left-sm-n3,.margin-x-sm-n3{margin-left:-1rem!important}.margin-sm-n4{margin:-2rem!important}.margin-top-sm-n4,.margin-y-sm-n4{margin-top:-2rem!important}.margin-right-sm-n4,.margin-x-sm-n4{margin-right:-2rem!important}.margin-bottom-sm-n4,.margin-y-sm-n4{margin-bottom:-2rem!important}.margin-left-sm-n4,.margin-x-sm-n4{margin-left:-2rem!important}.margin-sm-n5{margin:-4rem!important}.margin-top-sm-n5,.margin-y-sm-n5{margin-top:-4rem!important}.margin-right-sm-n5,.margin-x-sm-n5{margin-right:-4rem!important}.margin-bottom-sm-n5,.margin-y-sm-n5{margin-bottom:-4rem!important}.margin-left-sm-n5,.margin-x-sm-n5{margin-left:-4rem!important}.margin-sm-auto{margin:auto!important}.margin-top-sm-auto,.margin-y-sm-auto{margin-top:auto!important}.margin-right-sm-auto,.margin-x-sm-auto{margin-right:auto!important}.margin-bottom-sm-auto,.margin-y-sm-auto{margin-bottom:auto!important}.margin-left-sm-auto,.margin-x-sm-auto{margin-left:auto!important}}@media (min-width: 768px){.margin-md-0{margin:0!important}.margin-top-md-0,.margin-y-md-0{margin-top:0!important}.margin-right-md-0,.margin-x-md-0{margin-right:0!important}.margin-bottom-md-0,.margin-y-md-0{margin-bottom:0!important}.margin-left-md-0,.margin-x-md-0{margin-left:0!important}.margin-md-1{margin:.25rem!important}.margin-top-md-1,.margin-y-md-1{margin-top:.25rem!important}.margin-right-md-1,.margin-x-md-1{margin-right:.25rem!important}.margin-bottom-md-1,.margin-y-md-1{margin-bottom:.25rem!important}.margin-left-md-1,.margin-x-md-1{margin-left:.25rem!important}.margin-md-2{margin:.5rem!important}.margin-top-md-2,.margin-y-md-2{margin-top:.5rem!important}.margin-right-md-2,.margin-x-md-2{margin-right:.5rem!important}.margin-bottom-md-2,.margin-y-md-2{margin-bottom:.5rem!important}.margin-left-md-2,.margin-x-md-2{margin-left:.5rem!important}.margin-md-3{margin:1rem!important}.margin-top-md-3,.margin-y-md-3{margin-top:1rem!important}.margin-right-md-3,.margin-x-md-3{margin-right:1rem!important}.margin-bottom-md-3,.margin-y-md-3{margin-bottom:1rem!important}.margin-left-md-3,.margin-x-md-3{margin-left:1rem!important}.margin-md-4{margin:2rem!important}.margin-top-md-4,.margin-y-md-4{margin-top:2rem!important}.margin-right-md-4,.margin-x-md-4{margin-right:2rem!important}.margin-bottom-md-4,.margin-y-md-4{margin-bottom:2rem!important}.margin-left-md-4,.margin-x-md-4{margin-left:2rem!important}.margin-md-5{margin:4rem!important}.margin-top-md-5,.margin-y-md-5{margin-top:4rem!important}.margin-right-md-5,.margin-x-md-5{margin-right:4rem!important}.margin-bottom-md-5,.margin-y-md-5{margin-bottom:4rem!important}.margin-left-md-5,.margin-x-md-5{margin-left:4rem!important}.padding-md-0{padding:0!important}.padding-top-md-0,.padding-y-md-0{padding-top:0!important}.padding-right-md-0,.padding-x-md-0{padding-right:0!important}.padding-bottom-md-0,.padding-y-md-0{padding-bottom:0!important}.padding-left-md-0,.padding-x-md-0{padding-left:0!important}.padding-md-1{padding:.25rem!important}.padding-top-md-1,.padding-y-md-1{padding-top:.25rem!important}.padding-right-md-1,.padding-x-md-1{padding-right:.25rem!important}.padding-bottom-md-1,.padding-y-md-1{padding-bottom:.25rem!important}.padding-left-md-1,.padding-x-md-1{padding-left:.25rem!important}.padding-md-2{padding:.5rem!important}.padding-top-md-2,.padding-y-md-2{padding-top:.5rem!important}.padding-right-md-2,.padding-x-md-2{padding-right:.5rem!important}.padding-bottom-md-2,.padding-y-md-2{padding-bottom:.5rem!important}.padding-left-md-2,.padding-x-md-2{padding-left:.5rem!important}.padding-md-3{padding:1rem!important}.padding-top-md-3,.padding-y-md-3{padding-top:1rem!important}.padding-right-md-3,.padding-x-md-3{padding-right:1rem!important}.padding-bottom-md-3,.padding-y-md-3{padding-bottom:1rem!important}.padding-left-md-3,.padding-x-md-3{padding-left:1rem!important}.padding-md-4{padding:2rem!important}.padding-top-md-4,.padding-y-md-4{padding-top:2rem!important}.padding-right-md-4,.padding-x-md-4{padding-right:2rem!important}.padding-bottom-md-4,.padding-y-md-4{padding-bottom:2rem!important}.padding-left-md-4,.padding-x-md-4{padding-left:2rem!important}.padding-md-5{padding:4rem!important}.padding-top-md-5,.padding-y-md-5{padding-top:4rem!important}.padding-right-md-5,.padding-x-md-5{padding-right:4rem!important}.padding-bottom-md-5,.padding-y-md-5{padding-bottom:4rem!important}.padding-left-md-5,.padding-x-md-5{padding-left:4rem!important}.margin-md-n1{margin:-.25rem!important}.margin-top-md-n1,.margin-y-md-n1{margin-top:-.25rem!important}.margin-right-md-n1,.margin-x-md-n1{margin-right:-.25rem!important}.margin-bottom-md-n1,.margin-y-md-n1{margin-bottom:-.25rem!important}.margin-left-md-n1,.margin-x-md-n1{margin-left:-.25rem!important}.margin-md-n2{margin:-.5rem!important}.margin-top-md-n2,.margin-y-md-n2{margin-top:-.5rem!important}.margin-right-md-n2,.margin-x-md-n2{margin-right:-.5rem!important}.margin-bottom-md-n2,.margin-y-md-n2{margin-bottom:-.5rem!important}.margin-left-md-n2,.margin-x-md-n2{margin-left:-.5rem!important}.margin-md-n3{margin:-1rem!important}.margin-top-md-n3,.margin-y-md-n3{margin-top:-1rem!important}.margin-right-md-n3,.margin-x-md-n3{margin-right:-1rem!important}.margin-bottom-md-n3,.margin-y-md-n3{margin-bottom:-1rem!important}.margin-left-md-n3,.margin-x-md-n3{margin-left:-1rem!important}.margin-md-n4{margin:-2rem!important}.margin-top-md-n4,.margin-y-md-n4{margin-top:-2rem!important}.margin-right-md-n4,.margin-x-md-n4{margin-right:-2rem!important}.margin-bottom-md-n4,.margin-y-md-n4{margin-bottom:-2rem!important}.margin-left-md-n4,.margin-x-md-n4{margin-left:-2rem!important}.margin-md-n5{margin:-4rem!important}.margin-top-md-n5,.margin-y-md-n5{margin-top:-4rem!important}.margin-right-md-n5,.margin-x-md-n5{margin-right:-4rem!important}.margin-bottom-md-n5,.margin-y-md-n5{margin-bottom:-4rem!important}.margin-left-md-n5,.margin-x-md-n5{margin-left:-4rem!important}.margin-md-auto{margin:auto!important}.margin-top-md-auto,.margin-y-md-auto{margin-top:auto!important}.margin-right-md-auto,.margin-x-md-auto{margin-right:auto!important}.margin-bottom-md-auto,.margin-y-md-auto{margin-bottom:auto!important}.margin-left-md-auto,.margin-x-md-auto{margin-left:auto!important}}@media (min-width: 992px){.margin-lg-0{margin:0!important}.margin-top-lg-0,.margin-y-lg-0{margin-top:0!important}.margin-right-lg-0,.margin-x-lg-0{margin-right:0!important}.margin-bottom-lg-0,.margin-y-lg-0{margin-bottom:0!important}.margin-left-lg-0,.margin-x-lg-0{margin-left:0!important}.margin-lg-1{margin:.25rem!important}.margin-top-lg-1,.margin-y-lg-1{margin-top:.25rem!important}.margin-right-lg-1,.margin-x-lg-1{margin-right:.25rem!important}.margin-bottom-lg-1,.margin-y-lg-1{margin-bottom:.25rem!important}.margin-left-lg-1,.margin-x-lg-1{margin-left:.25rem!important}.margin-lg-2{margin:.5rem!important}.margin-top-lg-2,.margin-y-lg-2{margin-top:.5rem!important}.margin-right-lg-2,.margin-x-lg-2{margin-right:.5rem!important}.margin-bottom-lg-2,.margin-y-lg-2{margin-bottom:.5rem!important}.margin-left-lg-2,.margin-x-lg-2{margin-left:.5rem!important}.margin-lg-3{margin:1rem!important}.margin-top-lg-3,.margin-y-lg-3{margin-top:1rem!important}.margin-right-lg-3,.margin-x-lg-3{margin-right:1rem!important}.margin-bottom-lg-3,.margin-y-lg-3{margin-bottom:1rem!important}.margin-left-lg-3,.margin-x-lg-3{margin-left:1rem!important}.margin-lg-4{margin:2rem!important}.margin-top-lg-4,.margin-y-lg-4{margin-top:2rem!important}.margin-right-lg-4,.margin-x-lg-4{margin-right:2rem!important}.margin-bottom-lg-4,.margin-y-lg-4{margin-bottom:2rem!important}.margin-left-lg-4,.margin-x-lg-4{margin-left:2rem!important}.margin-lg-5{margin:4rem!important}.margin-top-lg-5,.margin-y-lg-5{margin-top:4rem!important}.margin-right-lg-5,.margin-x-lg-5{margin-right:4rem!important}.margin-bottom-lg-5,.margin-y-lg-5{margin-bottom:4rem!important}.margin-left-lg-5,.margin-x-lg-5{margin-left:4rem!important}.padding-lg-0{padding:0!important}.padding-top-lg-0,.padding-y-lg-0{padding-top:0!important}.padding-right-lg-0,.padding-x-lg-0{padding-right:0!important}.padding-bottom-lg-0,.padding-y-lg-0{padding-bottom:0!important}.padding-left-lg-0,.padding-x-lg-0{padding-left:0!important}.padding-lg-1{padding:.25rem!important}.padding-top-lg-1,.padding-y-lg-1{padding-top:.25rem!important}.padding-right-lg-1,.padding-x-lg-1{padding-right:.25rem!important}.padding-bottom-lg-1,.padding-y-lg-1{padding-bottom:.25rem!important}.padding-left-lg-1,.padding-x-lg-1{padding-left:.25rem!important}.padding-lg-2{padding:.5rem!important}.padding-top-lg-2,.padding-y-lg-2{padding-top:.5rem!important}.padding-right-lg-2,.padding-x-lg-2{padding-right:.5rem!important}.padding-bottom-lg-2,.padding-y-lg-2{padding-bottom:.5rem!important}.padding-left-lg-2,.padding-x-lg-2{padding-left:.5rem!important}.padding-lg-3{padding:1rem!important}.padding-top-lg-3,.padding-y-lg-3{padding-top:1rem!important}.padding-right-lg-3,.padding-x-lg-3{padding-right:1rem!important}.padding-bottom-lg-3,.padding-y-lg-3{padding-bottom:1rem!important}.padding-left-lg-3,.padding-x-lg-3{padding-left:1rem!important}.padding-lg-4{padding:2rem!important}.padding-top-lg-4,.padding-y-lg-4{padding-top:2rem!important}.padding-right-lg-4,.padding-x-lg-4{padding-right:2rem!important}.padding-bottom-lg-4,.padding-y-lg-4{padding-bottom:2rem!important}.padding-left-lg-4,.padding-x-lg-4{padding-left:2rem!important}.padding-lg-5{padding:4rem!important}.padding-top-lg-5,.padding-y-lg-5{padding-top:4rem!important}.padding-right-lg-5,.padding-x-lg-5{padding-right:4rem!important}.padding-bottom-lg-5,.padding-y-lg-5{padding-bottom:4rem!important}.padding-left-lg-5,.padding-x-lg-5{padding-left:4rem!important}.margin-lg-n1{margin:-.25rem!important}.margin-top-lg-n1,.margin-y-lg-n1{margin-top:-.25rem!important}.margin-right-lg-n1,.margin-x-lg-n1{margin-right:-.25rem!important}.margin-bottom-lg-n1,.margin-y-lg-n1{margin-bottom:-.25rem!important}.margin-left-lg-n1,.margin-x-lg-n1{margin-left:-.25rem!important}.margin-lg-n2{margin:-.5rem!important}.margin-top-lg-n2,.margin-y-lg-n2{margin-top:-.5rem!important}.margin-right-lg-n2,.margin-x-lg-n2{margin-right:-.5rem!important}.margin-bottom-lg-n2,.margin-y-lg-n2{margin-bottom:-.5rem!important}.margin-left-lg-n2,.margin-x-lg-n2{margin-left:-.5rem!important}.margin-lg-n3{margin:-1rem!important}.margin-top-lg-n3,.margin-y-lg-n3{margin-top:-1rem!important}.margin-right-lg-n3,.margin-x-lg-n3{margin-right:-1rem!important}.margin-bottom-lg-n3,.margin-y-lg-n3{margin-bottom:-1rem!important}.margin-left-lg-n3,.margin-x-lg-n3{margin-left:-1rem!important}.margin-lg-n4{margin:-2rem!important}.margin-top-lg-n4,.margin-y-lg-n4{margin-top:-2rem!important}.margin-right-lg-n4,.margin-x-lg-n4{margin-right:-2rem!important}.margin-bottom-lg-n4,.margin-y-lg-n4{margin-bottom:-2rem!important}.margin-left-lg-n4,.margin-x-lg-n4{margin-left:-2rem!important}.margin-lg-n5{margin:-4rem!important}.margin-top-lg-n5,.margin-y-lg-n5{margin-top:-4rem!important}.margin-right-lg-n5,.margin-x-lg-n5{margin-right:-4rem!important}.margin-bottom-lg-n5,.margin-y-lg-n5{margin-bottom:-4rem!important}.margin-left-lg-n5,.margin-x-lg-n5{margin-left:-4rem!important}.margin-lg-auto{margin:auto!important}.margin-top-lg-auto,.margin-y-lg-auto{margin-top:auto!important}.margin-right-lg-auto,.margin-x-lg-auto{margin-right:auto!important}.margin-bottom-lg-auto,.margin-y-lg-auto{margin-bottom:auto!important}.margin-left-lg-auto,.margin-x-lg-auto{margin-left:auto!important}}@media (min-width: 1200px){.margin-xl-0{margin:0!important}.margin-top-xl-0,.margin-y-xl-0{margin-top:0!important}.margin-right-xl-0,.margin-x-xl-0{margin-right:0!important}.margin-bottom-xl-0,.margin-y-xl-0{margin-bottom:0!important}.margin-left-xl-0,.margin-x-xl-0{margin-left:0!important}.margin-xl-1{margin:.25rem!important}.margin-top-xl-1,.margin-y-xl-1{margin-top:.25rem!important}.margin-right-xl-1,.margin-x-xl-1{margin-right:.25rem!important}.margin-bottom-xl-1,.margin-y-xl-1{margin-bottom:.25rem!important}.margin-left-xl-1,.margin-x-xl-1{margin-left:.25rem!important}.margin-xl-2{margin:.5rem!important}.margin-top-xl-2,.margin-y-xl-2{margin-top:.5rem!important}.margin-right-xl-2,.margin-x-xl-2{margin-right:.5rem!important}.margin-bottom-xl-2,.margin-y-xl-2{margin-bottom:.5rem!important}.margin-left-xl-2,.margin-x-xl-2{margin-left:.5rem!important}.margin-xl-3{margin:1rem!important}.margin-top-xl-3,.margin-y-xl-3{margin-top:1rem!important}.margin-right-xl-3,.margin-x-xl-3{margin-right:1rem!important}.margin-bottom-xl-3,.margin-y-xl-3{margin-bottom:1rem!important}.margin-left-xl-3,.margin-x-xl-3{margin-left:1rem!important}.margin-xl-4{margin:2rem!important}.margin-top-xl-4,.margin-y-xl-4{margin-top:2rem!important}.margin-right-xl-4,.margin-x-xl-4{margin-right:2rem!important}.margin-bottom-xl-4,.margin-y-xl-4{margin-bottom:2rem!important}.margin-left-xl-4,.margin-x-xl-4{margin-left:2rem!important}.margin-xl-5{margin:4rem!important}.margin-top-xl-5,.margin-y-xl-5{margin-top:4rem!important}.margin-right-xl-5,.margin-x-xl-5{margin-right:4rem!important}.margin-bottom-xl-5,.margin-y-xl-5{margin-bottom:4rem!important}.margin-left-xl-5,.margin-x-xl-5{margin-left:4rem!important}.padding-xl-0{padding:0!important}.padding-top-xl-0,.padding-y-xl-0{padding-top:0!important}.padding-right-xl-0,.padding-x-xl-0{padding-right:0!important}.padding-bottom-xl-0,.padding-y-xl-0{padding-bottom:0!important}.padding-left-xl-0,.padding-x-xl-0{padding-left:0!important}.padding-xl-1{padding:.25rem!important}.padding-top-xl-1,.padding-y-xl-1{padding-top:.25rem!important}.padding-right-xl-1,.padding-x-xl-1{padding-right:.25rem!important}.padding-bottom-xl-1,.padding-y-xl-1{padding-bottom:.25rem!important}.padding-left-xl-1,.padding-x-xl-1{padding-left:.25rem!important}.padding-xl-2{padding:.5rem!important}.padding-top-xl-2,.padding-y-xl-2{padding-top:.5rem!important}.padding-right-xl-2,.padding-x-xl-2{padding-right:.5rem!important}.padding-bottom-xl-2,.padding-y-xl-2{padding-bottom:.5rem!important}.padding-left-xl-2,.padding-x-xl-2{padding-left:.5rem!important}.padding-xl-3{padding:1rem!important}.padding-top-xl-3,.padding-y-xl-3{padding-top:1rem!important}.padding-right-xl-3,.padding-x-xl-3{padding-right:1rem!important}.padding-bottom-xl-3,.padding-y-xl-3{padding-bottom:1rem!important}.padding-left-xl-3,.padding-x-xl-3{padding-left:1rem!important}.padding-xl-4{padding:2rem!important}.padding-top-xl-4,.padding-y-xl-4{padding-top:2rem!important}.padding-right-xl-4,.padding-x-xl-4{padding-right:2rem!important}.padding-bottom-xl-4,.padding-y-xl-4{padding-bottom:2rem!important}.padding-left-xl-4,.padding-x-xl-4{padding-left:2rem!important}.padding-xl-5{padding:4rem!important}.padding-top-xl-5,.padding-y-xl-5{padding-top:4rem!important}.padding-right-xl-5,.padding-x-xl-5{padding-right:4rem!important}.padding-bottom-xl-5,.padding-y-xl-5{padding-bottom:4rem!important}.padding-left-xl-5,.padding-x-xl-5{padding-left:4rem!important}.margin-xl-n1{margin:-.25rem!important}.margin-top-xl-n1,.margin-y-xl-n1{margin-top:-.25rem!important}.margin-right-xl-n1,.margin-x-xl-n1{margin-right:-.25rem!important}.margin-bottom-xl-n1,.margin-y-xl-n1{margin-bottom:-.25rem!important}.margin-left-xl-n1,.margin-x-xl-n1{margin-left:-.25rem!important}.margin-xl-n2{margin:-.5rem!important}.margin-top-xl-n2,.margin-y-xl-n2{margin-top:-.5rem!important}.margin-right-xl-n2,.margin-x-xl-n2{margin-right:-.5rem!important}.margin-bottom-xl-n2,.margin-y-xl-n2{margin-bottom:-.5rem!important}.margin-left-xl-n2,.margin-x-xl-n2{margin-left:-.5rem!important}.margin-xl-n3{margin:-1rem!important}.margin-top-xl-n3,.margin-y-xl-n3{margin-top:-1rem!important}.margin-right-xl-n3,.margin-x-xl-n3{margin-right:-1rem!important}.margin-bottom-xl-n3,.margin-y-xl-n3{margin-bottom:-1rem!important}.margin-left-xl-n3,.margin-x-xl-n3{margin-left:-1rem!important}.margin-xl-n4{margin:-2rem!important}.margin-top-xl-n4,.margin-y-xl-n4{margin-top:-2rem!important}.margin-right-xl-n4,.margin-x-xl-n4{margin-right:-2rem!important}.margin-bottom-xl-n4,.margin-y-xl-n4{margin-bottom:-2rem!important}.margin-left-xl-n4,.margin-x-xl-n4{margin-left:-2rem!important}.margin-xl-n5{margin:-4rem!important}.margin-top-xl-n5,.margin-y-xl-n5{margin-top:-4rem!important}.margin-right-xl-n5,.margin-x-xl-n5{margin-right:-4rem!important}.margin-bottom-xl-n5,.margin-y-xl-n5{margin-bottom:-4rem!important}.margin-left-xl-n5,.margin-x-xl-n5{margin-left:-4rem!important}.margin-xl-auto{margin:auto!important}.margin-top-xl-auto,.margin-y-xl-auto{margin-top:auto!important}.margin-right-xl-auto,.margin-x-xl-auto{margin-right:auto!important}.margin-bottom-xl-auto,.margin-y-xl-auto{margin-bottom:auto!important}.margin-left-xl-auto,.margin-x-xl-auto{margin-left:auto!important}}.h1{font-size:2em}.h2{font-size:1.5em}.h3{font-size:1.17em}.h4{font-size:1em}.h5{font-size:.83em}.h6{font-size:.67em}.cursor-alias{cursor:alias}.cursor-all-scroll{cursor:all-scroll}.cursor-auto{cursor:auto}.cursor-cell{cursor:cell}.cursor-context-menu{cursor:context-menu}.cursor-col-resize{cursor:col-resize}.cursor-copy{cursor:copy}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-e-resize{cursor:e-resize}.cursor-ew-resize{cursor:ew-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-help{cursor:help}.cursor-move{cursor:move}.cursor-n-resize{cursor:n-resize}.cursor-ne-resize{cursor:ne-resize}.cursor-nesw-resize{cursor:nesw-resize}.cursor-ns-resize{cursor:ns-resize}.cursor-nw-resize{cursor:nw-resize}.cursor-nwse-resize{cursor:nwse-resize}.cursor-no-drop{cursor:no-drop}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-row-resize{cursor:row-resize}.cursor-s-resize{cursor:s-resize}.cursor-se-resize{cursor:se-resize}.cursor-sw-resize{cursor:sw-resize}.cursor-text{cursor:text}.cursor-w-resize{cursor:w-resize}.cursor-wait{cursor:wait}.cursor-zoom-in{cursor:zoom-in}.cursor-zoom-out{cursor:zoom-out}.mat-tooltip{font-size:16px!important}html,body{height:100%}body{margin:0;padding:0;font-family:opens sans regular,sans-serif}iframe{border:none}.mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,Helvetica Neue,sans-serif}.mat-badge-small .mat-badge-content{font-size:9px}.mat-badge-large .mat-badge-content{font-size:24px}.mat-h1,.mat-headline,.mat-typography h1{font:400 24px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto,Helvetica Neue,sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-display-4,.mat-typography .mat-display-4{font:300 112px/112px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.05em;margin:0 0 56px}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.02em;margin:0 0 64px}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto,Helvetica Neue,sans-serif;letter-spacing:-.005em;margin:0 0 64px}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-bottom-sheet-container{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-button-toggle,.mat-card{font-family:Roboto,Helvetica Neue,sans-serif}.mat-card-title{font-size:24px;font-weight:500}.mat-card-header .mat-card-title{font-size:20px}.mat-card-subtitle,.mat-card-content{font-size:14px}.mat-checkbox{font-family:Roboto,Helvetica Neue,sans-serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:14px;font-weight:500}.mat-chip .mat-chip-trailing-icon.mat-icon,.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto,Helvetica Neue,sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell,.mat-footer-cell{font-size:14px}.mat-calendar{font-family:Roboto,Helvetica Neue,sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-expansion-panel-header{font-family:Roboto,Helvetica Neue,sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-form-field-wrapper{padding-bottom:1.34375em}.mat-form-field-prefix .mat-icon,.mat-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.5em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34375em) scale(.75);width:133.3333333333%}.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.34374em) scale(.75);width:133.3333433333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.34375em}.mat-form-field-underline{bottom:1.34375em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.6666666667em;top:calc(100% - 1.7916666667em)}.mat-form-field-appearance-legacy .mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-infix{padding:.4375em 0}.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);width:133.3333333333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00101px);width:133.3333433333%}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.00102px);width:133.3333533333%}.mat-form-field-appearance-legacy .mat-form-field-label{top:1.28125em}.mat-form-field-appearance-legacy .mat-form-field-underline{bottom:1.25em}.mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper{margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}@media print{.mat-form-field-appearance-legacy.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28122em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28121em) scale(.75)}.mat-form-field-appearance-legacy.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.2812em) scale(.75)}}.mat-form-field-appearance-fill .mat-form-field-infix{padding:.25em 0 .75em}.mat-form-field-appearance-fill .mat-form-field-label{top:1.09375em;margin-top:-.5em}.mat-form-field-appearance-fill.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-fill.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-.59374em) scale(.75);width:133.3333433333%}.mat-form-field-appearance-outline .mat-form-field-infix{padding:1em 0}.mat-form-field-appearance-outline .mat-form-field-label{top:1.84375em;margin-top:-.25em}.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59375em) scale(.75);width:133.3333333333%}.mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.59374em) scale(.75);width:133.3333433333%}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:400}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px}.mat-radio-button,.mat-select{font-family:Roboto,Helvetica Neue,sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font-family:Roboto,Helvetica Neue,sans-serif}.mat-slider-thumb-label-text{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto,Helvetica Neue,sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-sub-label-error{font-weight:400}.mat-step-label-error{font-size:14px}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal;margin:0}.mat-tooltip{font-family:Roboto,Helvetica Neue,sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:8px;padding-bottom:8px}.mat-list-item,.mat-list-option{font-family:Roboto,Helvetica Neue,sans-serif}.mat-list-base .mat-list-item{font-size:16px}.mat-list-base .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-list-option{font-size:16px}.mat-list-base .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list-base .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px;font-weight:500}.mat-list-base[dense] .mat-list-item{font-size:12px}.mat-list-base[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-list-option{font-size:12px}.mat-list-base[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list-base[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list-base[dense] .mat-subheader{font-family:Roboto,Helvetica Neue,sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto,Helvetica Neue,sans-serif;letter-spacing:normal}.mat-simple-snackbar{font-family:Roboto,Helvetica Neue,sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-tree{font-family:Roboto,Helvetica Neue,sans-serif}.mat-tree-node,.mat-nested-tree-node{font-weight:400;font-size:14px}.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale(0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator,.mat-mdc-focus-indicator{position:relative}.title,.header{font-family:Encode Sans Condensed,sans-serif;font-weight:900}.paragraph-title,.tagline{font-family:Open Sans,sans-serif;font-weight:400}.paragraph-title-bold .tagLine-bold{font-family:Open Sans,sans-serif;font-weight:700}.plain-text,.remarks{font-family:Open Sans,sans-serif;font-weight:300}.plain-text-bold{font-family:Open Sans,sans-serif;font-weight:700}.flex-column{box-sizing:border-box;display:flex;flex-direction:column}.flex-row{box-sizing:border-box;display:flex;flex-direction:row}.flex-row-center{align-items:center;justify-content:center}.mat-button-large{line-height:48px;font-size:18px;font-weight:700;padding:0 24px!important}.mat-round{border-radius:.5em}:root{--initial-primary: #4a918e;--initial-accent: #9cd8d7;--initial-warn: #ef4351;--initial-dark-background: #222222;--initial-light-background: #f2f2f2;--initial-light-background: white;--initial-light-text: rgba(0, 0, 0, .87);--initial-dark-text: rgba(255, 255, 255, .87);--background: #050505;--orange-accent: #ff9800;--green-accent: #00e676;--yellow-accent: #fdd835;--purple-accent: #9c27b0;--cyan-accent: rgba(132, 255, 255, .75);--pink-accent: #e91e63;--success: #00e676}body{background-color:var(--initial-dark-background)}::ng-deep .mat-tooltip{font-size:16px!important}:host .valid-control{color:var(--green-accent)}:host .invalid-control{color:var(--theme-warn-500)}:host .actions .item:not(:last-child){margin-right:0}:host .project-thumbnail img{height:50px;width:auto}:host .active{background-color:var(--theme-accent-400);transition:background-color 1s linear}:host .inactive{background-color:#f2f5a900;transition:background-color 1s linear}:host .expansion-panel{width:100%;margin-bottom:10px}:host .expansion-container{max-height:300px;overflow-y:auto}:host .divider-fill-vert{background-color:var(--theme-accent-500);min-height:100%;top:10%;bottom:10%;min-width:5px}:host .divider-fill-hor{background-color:var(--theme-accent-500);height:5px;width:100%}:host .form-disabled{background-color:#797979;opacity:.5;border-radius:4px}::ng-deep input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s;-webkit-text-fill-color:#FFFFFFDE}@media (max-width: 768px){.spread{margin:1em!important}}@media (max-width: 480px){.spread{margin:.5em!important}}.spinner-logo{display:none!important}.flow-card{background-color:#2f2f2f!important}:host ::ng-deep #app-back-button{margin-left:-37px;margin-top:15px}:host ::ng-deep .apps-actions{float:right}:host ::ng-deep .mat-card .mat-card-content{text-align:center;overflow:hidden}:host ::ng-deep .mat-card .mat-card-actions .data-app-actions{display:none!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes{display:flex!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes .mat-icon{font-size:8px}:host ::ng-deep .mat-card:hover .mat-card-actions .data-app-actions{display:flex!important}:host ::ng-deep .mat-card:hover .mat-card-actions .data-app-fakes{display:none!important}:host ::ng-deep .mat-subtitle .mat-chip-list{display:inline-block}:host ::ng-deep .mat-form-field{margin-top:.5em;margin-bottom:.5em}:host ::ng-deep .mat-form-field.with-hint{margin-bottom:1em}@media (max-width: 768px){:host ::ng-deep .form-card{width:100%}:host ::ng-deep .mat-card .mat-card-actions .data-app-actions{display:flex!important}:host ::ng-deep .mat-card .mat-card-actions .data-app-fakes{display:none!important}}:host ::ng-deep .domain-item{border-radius:5;border:var(--theme-accent-500) solid 1px}\n"] }]
554
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ApplicationsFlowService }, { type: i3.EaCService }]; }, propDecorators: { Data: [{
555
- type: Input,
556
- args: ['data']
557
- }], SourceControlFormControls: [{
558
- type: ViewChild,
559
- args: [SourceControlFormControlsComponent]
560
- }] } });
561
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcy1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi9zcmMvbGliL2VsZW1lbnRzL3Byb2plY3RzL2NvbnRyb2xzL3RhYnMvYXBwcy1mbG93L2FwcHMtZmxvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9lbGVtZW50cy9wcm9qZWN0cy9jb250cm9scy90YWJzL2FwcHMtZmxvdy9hcHBzLWZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFJTCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRekcsTUFBTSxPQUFPLGlCQUFpQjtJQTZRNUIsZ0JBQWdCO0lBQ2hCLFlBQ1ksUUFBcUIsRUFDckIsV0FBb0MsRUFDcEMsTUFBa0I7UUFGbEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUU1QixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBRTFCLDRCQUE0QjtRQUU1QiwyQkFBMkI7SUFDN0IsQ0FBQztJQXhSRCxVQUFVO0lBRVYsY0FBYztJQUNkLElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUM7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LElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsY0FBYyxJQUFJLEtBQUssRUFDMUQsRUFBRSxDQUNILENBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFUyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FDbEMsV0FBVyxFQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUNuQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFNBQVMsSUFBSSxLQUFLLEVBQ3hELENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUN0QixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUNsQyxpQkFBaUIsRUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsZUFBZSxJQUFJLEtBQUssRUFDOUQsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQ3RCLENBQ0YsQ0FBQztJQUNKLENBQUM7OzhHQXQxQlUsaUJBQWlCO2tHQUFqQixpQkFBaUIsb0pBOE9qQixrQ0FBa0MsZ0RDdlEvQyx3d3dCQThzQkE7MkZEcnJCYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsZUFBZTtpS0E0RGxCLElBQUk7c0JBRFYsS0FBSzt1QkFBQyxNQUFNO2dCQXdMTix5QkFBeUI7c0JBRC9CLFNBQVM7dUJBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtFYUNTZXJ2aWNlLCBTYXZlQXBwbGljYXRpb25Bc0NvZGVFdmVudFJlcXVlc3R9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2VhYy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVhQ0FwcGxpY2F0aW9uQXNDb2RlLFxuICBFYUNFbnZpcm9ubWVudEFzQ29kZSxcbiAgRWFDUHJvY2Vzc29yLFxuICBFYUNQcm9qZWN0QXNDb2RlLFxuICBFYUNTb3VyY2VDb250cm9sLFxufSBmcm9tICdAc2VtYW50aWNqcy9jb21tb24nO1xuaW1wb3J0IHsgR3VpZCB9IGZyb20gJ0BsY3UvY29tbW9uJztcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTb3VyY2VDb250cm9sRm9ybUNvbnRyb2xzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9ybXMvc291cmNlLWNvbnRyb2wvc291cmNlLWNvbnRyb2wuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uc0Zsb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb25zLWZsb3cuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xjdS1hcHBzLWZsb3cnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwcy1mbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwcy1mbG93LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFwcHNGbG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gIEZpZWxkc1xuXG4gIC8vICBQcm9wZXJ0aWVzXG4gIHB1YmxpYyBnZXQgQVBJUm9vdEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmFwaVJvb3Q7XG4gIH1cblxuICBwdWJsaWMgQXBwbGljYXRpb25Gb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICBwdWJsaWMgZ2V0IEFwcGxpY2F0aW9uSURGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5hcHBsaWNhdGlvbklkO1xuICB9XG5cbiAgcHVibGljIGdldCBBcHBsaWNhdGlvbkxvb2t1cHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuQXBwbGljYXRpb25zIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQXBwbGljYXRpb25Sb3V0ZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuUm91dGVkQXBwbGljYXRpb25zIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQXBwbGljYXRpb25zQmFuaygpOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIH0ge1xuICAgIHJldHVybiB0aGlzLkRhdGE/LkFwcGxpY2F0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQXBwbGljYXRpb25zKCk6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDQXBwbGljYXRpb25Bc0NvZGUgfSB7XG4gICAgY29uc3QgYXBwczogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9ID0ge307XG5cbiAgICB0aGlzLlByb2plY3QuQXBwbGljYXRpb25Mb29rdXBzLmZvckVhY2goKGFwcExvb2t1cCkgPT4ge1xuICAgICAgYXBwc1thcHBMb29rdXBdID0gdGhpcy5BcHBsaWNhdGlvbnNCYW5rW2FwcExvb2t1cF07XG4gICAgfSk7XG4gICAgcmV0dXJuIGFwcHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEJ1aWxkRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMuYnVpbGQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IENsaWVudElERm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMuY2xpZW50SWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IENsaWVudFNlY3JldEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmNsaWVudFNlY3JldDtcbiAgfVxuXG4gIHB1YmxpYyBDdXJyZW50QXBwbGljYXRpb25Sb3V0ZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBnZXQgQ3VycmVudFJvdXRlQXBwbGljYXRpb25Mb29rdXBzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhcbiAgICAgIHRoaXMuUm91dGVkQXBwbGljYXRpb25zW3RoaXMuQ3VycmVudEFwcGxpY2F0aW9uUm91dGVdIHx8IHt9XG4gICAgKTtcbiAgfVxuXG4gIEBJbnB1dCgnZGF0YScpXG4gIHB1YmxpYyBEYXRhOiB7XG4gICAgQXBwbGljYXRpb25zOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIH07XG4gICAgRW52aXJvbm1lbnQ6IEVhQ0Vudmlyb25tZW50QXNDb2RlO1xuICAgIFByaW1hcnlIb3N0OiBzdHJpbmc7XG4gICAgUHJvamVjdDogRWFDUHJvamVjdEFzQ29kZTtcbiAgICBQcm9qZWN0TG9va3VwOiBzdHJpbmc7XG4gIH07XG5cbiAgcHVibGljIGdldCBEZWZhdWx0RmlsZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmRlZmF1bHRGaWxlO1xuICB9XG5cbiAgcHVibGljIGdldCBEZWZhdWx0U291cmNlQ29udHJvbCgpOiBFYUNTb3VyY2VDb250cm9sIHtcbiAgICByZXR1cm4ge1xuICAgICAgT3JnYW5pemF0aW9uOiB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbj8uTG93Q29kZVVuaXQ/Lk9yZ2FuaXphdGlvbixcbiAgICAgIFJlcG9zaXRvcnk6IHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uPy5Mb3dDb2RlVW5pdD8uUmVwb3NpdG9yeSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBEZXNjcmlwdGlvbkZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBFZGl0aW5nQXBwbGljYXRpb24oKTogRWFDQXBwbGljYXRpb25Bc0NvZGUge1xuICAgIGxldCBhcHAgPSB0aGlzLkFwcGxpY2F0aW9uc1xuICAgICAgPyB0aGlzLkFwcGxpY2F0aW9uc1t0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbkxvb2t1cF1cbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChhcHAgPT0gbnVsbCAmJiB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbkxvb2t1cCkge1xuICAgICAgYXBwID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIHB1YmxpYyBFZGl0aW5nQXBwbGljYXRpb25Mb29rdXA6IHN0cmluZztcblxuICBwdWJsaWMgZ2V0IEhhc0J1aWxkRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMuaGFzQnVpbGQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEluYm91bmRQYXRoRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMuaW5ib3VuZFBhdGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IElzUHJpdmF0ZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLmlzUHJpdmF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgSXNUcmlnZ2VyU2lnbkluRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMuaXNUcmlnZ2VyU2lnbkluO1xuICB9XG5cbiAgcHVibGljIExDVVR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgZ2V0IE1ldGhvZHNGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5tZXRob2RzO1xuICB9XG5cbiAgcHVibGljIGdldCBOYW1lRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgUGFja2FnZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnBhY2thZ2U7XG4gIH1cblxuICBwdWJsaWMgSXNQZXJtYW5lbnQ6IGJvb2xlYW47XG5cbiAgcHVibGljIElzUHJlc2VydmU6IGJvb2xlYW47XG5cbiAgcHVibGljIHJlZGlyZWN0VG9vbHRpcDogc3RyaW5nO1xuXG4gIHB1YmxpYyBnZXQgUGVybWFuZW50Rm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMucGVybWFuZW50O1xuICB9XG5cbiAgcHVibGljIGdldCBQcmVzZXJ2ZU1ldGhvZEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnByZXNlcnZlTWV0aG9kO1xuICB9XG5cbiAgcHVibGljIGdldCBQcmltYXJ5SG9zdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLkRhdGEuUHJpbWFyeUhvc3Q7XG4gIH1cblxuICBwdWJsaWMgUHJvY2Vzc29yVHlwZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBnZXQgUHJvamVjdCgpOiBFYUNQcm9qZWN0QXNDb2RlIHtcbiAgICByZXR1cm4gdGhpcy5EYXRhLlByb2plY3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFByb2plY3RMb29rdXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5EYXRhLlByb2plY3RMb29rdXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFJlZGlyZWN0Rm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMucmVkaXJlY3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFJvdXRlZEFwcGxpY2F0aW9ucygpOiB7XG4gICAgW3JvdXRlOiBzdHJpbmddOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0FwcGxpY2F0aW9uQXNDb2RlIH07XG4gIH0ge1xuICAgIGNvbnN0IGFwcExvb2t1cHMgPSBPYmplY3Qua2V5cyh0aGlzLkFwcGxpY2F0aW9ucyk7XG5cbiAgICBjb25zdCBhcHBzID0gYXBwTG9va3Vwcy5tYXAoKGFwcExvb2t1cCkgPT4gdGhpcy5BcHBsaWNhdGlvbnNbYXBwTG9va3VwXSk7XG5cbiAgICBsZXQgYXBwUm91dGVzID1cbiAgICAgIGFwcHMubWFwKChhcHApID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcC5Mb29rdXBDb25maWc/LlBhdGhSZWdleC5yZXBsYWNlKCcuKicsICcnKTtcbiAgICAgIH0pIHx8IFtdO1xuXG4gICAgYXBwUm91dGVzID0gYXBwUm91dGVzLmZpbHRlcigoYXIpID0+IGFyICE9IG51bGwpO1xuXG4gICAgbGV0IHJvdXRlQmFzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBhcHBSb3V0ZXMuZm9yRWFjaCgoYXBwUm91dGUpID0+IHtcbiAgICAgIGNvbnN0IGFwcFJvdXRlUGFydHMgPSBhcHBSb3V0ZS5zcGxpdCgnLycpO1xuXG4gICAgICBjb25zdCBhcHBSb3V0ZUJhc2UgPSBgLyR7YXBwUm91dGVQYXJ0c1sxXX1gO1xuXG4gICAgICBpZiAocm91dGVCYXNlcy5pbmRleE9mKGFwcFJvdXRlQmFzZSkgPCAwKSB7XG4gICAgICAgIHJvdXRlQmFzZXMucHVzaChhcHBSb3V0ZUJhc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHdvcmtpbmdBcHBMb29rdXBzID0gWy4uLihhcHBMb29rdXBzIHx8IFtdKV07XG5cbiAgICByb3V0ZUJhc2VzID0gcm91dGVCYXNlcy5zb3J0KChhLCBiKSA9PiBiLmxvY2FsZUNvbXBhcmUoYSkpO1xuXG4gICAgY29uc3Qgcm91dGVTZXQgPVxuICAgICAgcm91dGVCYXNlcy5yZWR1Y2UoKHByZXZSb3V0ZU1hcCwgY3VycmVudFJvdXRlQmFzZSkgPT4ge1xuICAgICAgICBjb25zdCByb3V0ZU1hcCA9IHtcbiAgICAgICAgICAuLi5wcmV2Um91dGVNYXAsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZmlsdGVyZWRBcHBMb29rdXBzID0gd29ya2luZ0FwcExvb2t1cHMuZmlsdGVyKCh3YWwpID0+IHtcbiAgICAgICAgICBjb25zdCB3YSA9IHRoaXMuQXBwbGljYXRpb25zW3dhbF07XG5cbiAgICAgICAgICByZXR1cm4gd2EuTG9va3VwQ29uZmlnPy5QYXRoUmVnZXguc3RhcnRzV2l0aChjdXJyZW50Um91dGVCYXNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcm91dGVNYXBbY3VycmVudFJvdXRlQmFzZV0gPVxuICAgICAgICAgIGZpbHRlcmVkQXBwTG9va3Vwcy5yZWR1Y2UoKHByZXZBcHBNYXAsIGFwcExvb2t1cCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXBwTWFwID0ge1xuICAgICAgICAgICAgICAuLi5wcmV2QXBwTWFwLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYXBwTWFwW2FwcExvb2t1cF0gPSB0aGlzLkFwcGxpY2F0aW9uc1thcHBMb29rdXBdO1xuXG4gICAgICAgICAgICByZXR1cm4gYXBwTWFwO1xuICAgICAgICAgIH0sIHt9KSB8fCB7fTtcblxuICAgICAgICB3b3JraW5nQXBwTG9va3VwcyA9IHdvcmtpbmdBcHBMb29rdXBzLmZpbHRlcigod2EpID0+IHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWRBcHBMb29rdXBzLmluZGV4T2Yod2EpIDwgMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJvdXRlTWFwO1xuICAgICAgfSwge30pIHx8IHt9O1xuXG4gICAgbGV0IHJvdXRlU2V0S2V5cyA9IE9iamVjdC5rZXlzKHJvdXRlU2V0KTtcblxuICAgIHJvdXRlU2V0S2V5cyA9IHJvdXRlU2V0S2V5cy5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgY29uc3Qgcm91dGVTZXRSZXN1bHQgPSB7fTtcblxuICAgIHJvdXRlU2V0S2V5cy5mb3JFYWNoKChyc2spID0+IChyb3V0ZVNldFJlc3VsdFtyc2tdID0gcm91dGVTZXRbcnNrXSkpO1xuXG4gICAgcmV0dXJuIHJvdXRlU2V0UmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldCBSb3V0ZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnJvdXRlO1xuICB9XG5cbiAgcHVibGljIGdldCBTY29wZXNGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy5zY29wZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFNlY3VyaXR5Rm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMuc2VjdXJpdHk7XG4gIH1cblxuICBAVmlld0NoaWxkKFNvdXJjZUNvbnRyb2xGb3JtQ29udHJvbHNDb21wb25lbnQpXG4gIHB1YmxpYyBTb3VyY2VDb250cm9sRm9ybUNvbnRyb2xzOiBTb3VyY2VDb250cm9sRm9ybUNvbnRyb2xzQ29tcG9uZW50O1xuXG4gIHB1YmxpYyBnZXQgU291cmNlQ29udHJvbExvb2t1cEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnNvdXJjZUNvbnRyb2xMb29rdXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFNvdXJjZUNvbnRyb2xMb29rdXBzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLlNvdXJjZUNvbnRyb2xzIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU291cmNlQ29udHJvbHMoKTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNTb3VyY2VDb250cm9sIH0ge1xuICAgIHJldHVybiB0aGlzLkRhdGEuRW52aXJvbm1lbnQuU291cmNlcyB8fCB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU1BBUm9vdEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXA/LmNvbnRyb2xzLnNwYVJvb3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFRva2VuTG9va3VwRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMudG9rZW5Mb29rdXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFZlcnNpb25Gb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwPy5jb250cm9scy52ZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBaaXBGaWxlRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cD8uY29udHJvbHMuemlwRmlsZTtcbiAgfVxuXG4gIC8vICBDb25zdHJ1Y3RvcnNcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGZvcm1CbGRyOiBGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgYXBwc0Zsb3dTdmM6IEFwcGxpY2F0aW9uc0Zsb3dTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBlYWNTdmM6IEVhQ1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb25Mb29rdXAgPSBudWxsO1xuICAgIHRoaXMucmVkaXJlY3RUb29sdGlwID0gJyc7XG5cbiAgICAvLyB0aGlzLklzUGVybWFuZW50ID0gZmFsc2U7XG5cbiAgICAvLyB0aGlzLklzUHJlc2VydmUgPSBmYWxzZTtcbiAgfVxuXG4gIC8vICBMaWZlIEN5Y2xlXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5BcHBsaWNhdGlvbkxvb2t1cHM/Lmxlbmd0aCA8PSAwKSB7XG4gICAgICB0aGlzLkNyZWF0ZU5ld0FwcGxpY2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gIEFQSSBNZXRob2RzXG4gIHB1YmxpYyBDcmVhdGVOZXdBcHBsaWNhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLlNldEVkaXRpbmdBcHBsaWNhdGlvbihHdWlkLkNyZWF0ZVJhdygpKTtcbiAgfVxuXG4gIHB1YmxpYyBEZWxldGVBcHBsaWNhdGlvbihhcHBMb29rdXA6IHN0cmluZywgYXBwTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lYWNTdmMuRGVsZXRlQXBwbGljYXRpb24oYXBwTG9va3VwLCBhcHBOYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBMQ1VUeXBlQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5MQ1VUeXBlID0gZXZlbnQudmFsdWU7XG5cbiAgICB0aGlzLnNldHVwTGN1VHlwZVN1YkZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBQcm9jZXNzb3JUeXBlQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5Qcm9jZXNzb3JUeXBlID0gZXZlbnQudmFsdWU7XG5cbiAgICB0aGlzLnNldHVwUHJvY2Vzc29yVHlwZVN1YkZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBEZXRlcm1pbmVUb29sdGlwVGV4dCgpIHtcbiAgICBsZXQgcGVybWFuZW50VmFsdWUgPSB0aGlzLlBlcm1hbmVudEZvcm1Db250cm9sLnZhbHVlO1xuICAgIGxldCBwcmVzZXJ2ZVZhbHVlID0gdGhpcy5QcmVzZXJ2ZU1ldGhvZEZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgaWYgKHBlcm1hbmVudFZhbHVlID09PSB0cnVlICYmIHByZXNlcnZlVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnJlZGlyZWN0VG9vbHRpcCA9ICczMDEg4oCTIFBlcm1hbmVudCBhbmQgTm90IFByZXNlcnZlJztcbiAgICB9IGVsc2UgaWYgKHBlcm1hbmVudFZhbHVlID09PSBmYWxzZSAmJiBwcmVzZXJ2ZVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5yZWRpcmVjdFRvb2x0aXAgPSAnMzAyIOKAkyBOb3QgUGVybWFuZW50IGFuZCBOb3QgUHJlc2VydmUnO1xuICAgIH0gZWxzZSBpZiAocGVybWFuZW50VmFsdWUgPT09IGZhbHNlICYmIHByZXNlcnZlVmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucmVkaXJlY3RUb29sdGlwID0gJzMwNyDigJMgTm90IFBlcm1hbmVudCBhbmQgUHJlc2VydmUnO1xuICAgIH0gZWxzZSBpZiAocGVybWFuZW50VmFsdWUgPT09IHRydWUgJiYgcHJlc2VydmVWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5yZWRpcmVjdFRvb2x0aXAgPSAnMzA4IOKAkyBQZXJtYW5lbnQgYW5kIFByZXNlcnZlJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgR2V0UHJvY2Vzc29yVHlwZShhcHBMb29rdXA6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHByb2Nlc3NvclR5cGUgPSAnJztcbiAgICBwcm9jZXNzb3JUeXBlID0gdGhpcy5BcHBsaWNhdGlvbnNbYXBwTG9va3VwXS5Qcm9jZXNzb3IuVHlwZVxuICAgICAgPyB0aGlzLkFwcGxpY2F0aW9uc1thcHBMb29rdXBdLlByb2Nlc3Nvci5UeXBlXG4gICAgICA6ICcnO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiUHR5cGUgPSBcIiwgcHJvY2Vzc29yVHlwZSk7XG5cbiAgICByZXR1cm4gcHJvY2Vzc29yVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBFZGl0QXBwbGljYXRpb25Sb3V0ZUNsaWNrZWQoYXBwUm91dGU6IGFueSkge1xuICAgIHRoaXMuQ3VycmVudEFwcGxpY2F0aW9uUm91dGUgPSBhcHBSb3V0ZTtcbiAgfVxuXG4gIHB1YmxpYyBTYXZlQXBwbGljYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgYXBwOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSA9IHtcbiAgICAgIEFwcGxpY2F0aW9uOiB7XG4gICAgICAgIE5hbWU6IHRoaXMuTmFtZUZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICBEZXNjcmlwdGlvbjogdGhpcy5EZXNjcmlwdGlvbkZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICBQcmlvcml0eVNoaWZ0OiB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbj8uQXBwbGljYXRpb24/LlByaW9yaXR5U2hpZnQgfHwgMCxcbiAgICAgIH0sXG4gICAgICBBY2Nlc3NSaWdodExvb2t1cHM6IFtdLFxuICAgICAgRGF0YVRva2Vuczoge30sXG4gICAgICBMaWNlbnNlQ29uZmlndXJhdGlvbkxvb2t1cHM6IFtdLFxuICAgICAgTG9va3VwQ29uZmlnOiB7XG4gICAgICAgIElzUHJpdmF0ZTogdGhpcy5Jc1ByaXZhdGVGb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgSXNUcmlnZ2VyU2lnbkluOiB0aGlzLklzUHJpdmF0ZUZvcm1Db250cm9sLnZhbHVlXG4gICAgICAgICAgPyB0aGlzLklzVHJpZ2dlclNpZ25JbkZvcm1Db250cm9sLnZhbHVlXG4gICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgUGF0aFJlZ2V4OiBgJHt0aGlzLlJvdXRlRm9ybUNvbnRyb2wudmFsdWV9LipgLFxuICAgICAgICBRdWVyeVJlZ2V4OiB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbj8uTG9va3VwQ29uZmlnPy5RdWVyeVJlZ2V4IHx8ICcnLFxuICAgICAgICBIZWFkZXJSZWdleDogdGhpcy5FZGl0aW5nQXBwbGljYXRpb24/Lkxvb2t1cENvbmZpZz8uSGVhZGVyUmVnZXggfHwgJycsXG4gICAgICAgIEFsbG93ZWRNZXRob2RzOiB0aGlzLk1ldGhvZHNGb3JtQ29udHJvbD8udmFsdWVcbiAgICAgICAgICA/LnNwbGl0KCcgJylcbiAgICAgICAgICAuZmlsdGVyKCh2OiBzdHJpbmcpID0+ICEhdiksXG4gICAgICB9LFxuICAgICAgUHJvY2Vzc29yOiB7XG4gICAgICAgIFR5cGU6IHRoaXMuUHJvY2Vzc29yVHlwZSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHN3aXRjaCAoYXBwLlByb2Nlc3Nvci5UeXBlKSB7XG4gICAgICBjYXNlICdERlMnOlxuICAgICAgICBhcHAuUHJvY2Vzc29yLkJhc2VIcmVmID0gYCR7dGhpcy5Sb3V0ZUZvcm1Db250cm9sLnZhbHVlfS9gLnJlcGxhY2UoXG4gICAgICAgICAgJy8vJyxcbiAgICAgICAgICAnLydcbiAgICAgICAgKTtcblxuICAgICAgICBhcHAuUHJvY2Vzc29yLkRlZmF1bHRGaWxlID1cbiAgICAgICAgICB0aGlzLkRlZmF1bHRGaWxlRm9ybUNvbnRyb2wudmFsdWUgfHwgJ2luZGV4Lmh0bWwnO1xuXG4gICAgICAgIGFwcC5Mb3dDb2RlVW5pdCA9IHtcbiAgICAgICAgICBUeXBlOiB0aGlzLkxDVVR5cGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoIChhcHAuTG93Q29kZVVuaXQuVHlwZSkge1xuICAgICAgICAgIGNhc2UgJ0dpdEh1Yic6XG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuT3JnYW5pemF0aW9uID1cbiAgICAgICAgICAgICAgdGhpcy5Tb3VyY2VDb250cm9sRm9ybUNvbnRyb2xzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuUmVwb3NpdG9yeSA9XG4gICAgICAgICAgICAgIHRoaXMuU291cmNlQ29udHJvbEZvcm1Db250cm9scy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5CdWlsZCA9IHRoaXMuQnVpbGRGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LlBhdGggPVxuICAgICAgICAgICAgICB0aGlzLlNvdXJjZUNvbnRyb2xGb3JtQ29udHJvbHMuQnVpbGRQYXRoRm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ05QTSc6XG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuUGFja2FnZSA9IHRoaXMuUGFja2FnZUZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuVmVyc2lvbiA9IHRoaXMuVmVyc2lvbkZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdaaXAnOlxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LlppcEZpbGUgPSB0aGlzLlppcEZpbGVGb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdPQXV0aCc6XG4gICAgICAgIGFwcC5Qcm9jZXNzb3IuU2NvcGVzID0gdGhpcy5TY29wZXNGb3JtQ29udHJvbC52YWx1ZS5zcGxpdCgnICcpO1xuXG4gICAgICAgIGFwcC5Qcm9jZXNzb3IuVG9rZW5Mb29rdXAgPSB0aGlzLlRva2VuTG9va3VwRm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgYXBwLkxvd0NvZGVVbml0ID0ge1xuICAgICAgICAgIFR5cGU6IHRoaXMuTENVVHlwZSxcbiAgICAgICAgfTtcblxuICAgICAgICBzd2l0Y2ggKGFwcC5Mb3dDb2RlVW5pdC5UeXBlKSB7XG4gICAgICAgICAgY2FzZSAnR2l0SHViT0F1dGgnOlxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LkNsaWVudElEID0gdGhpcy5DbGllbnRJREZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQuQ2xpZW50U2VjcmV0ID0gdGhpcy5DbGllbnRTZWNyZXRGb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdQcm94eSc6XG4gICAgICAgIGFwcC5Qcm9jZXNzb3IuSW5ib3VuZFBhdGggPSB0aGlzLkluYm91bmRQYXRoRm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgYXBwLkxvd0NvZGVVbml0ID0ge1xuICAgICAgICAgIFR5cGU6IHRoaXMuTENVVHlwZSxcbiAgICAgICAgfTtcblxuICAgICAgICBzd2l0Y2ggKGFwcC5Mb3dDb2RlVW5pdC5UeXBlKSB7XG4gICAgICAgICAgY2FzZSAnQVBJJzpcbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5BUElSb290ID0gdGhpcy5BUElSb290Rm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5TZWN1cml0eSA9IHRoaXMuU2VjdXJpdHlGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdTUEEnOlxuICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0LlNQQVJvb3QgPSB0aGlzLlNQQVJvb3RGb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdSZWRpcmVjdCc6XG4gICAgICAgIGFwcC5Qcm9jZXNzb3IuUGVybWFuZW50ID0gISF0aGlzLlBlcm1hbmVudEZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgIGFwcC5Qcm9jZXNzb3IuUHJlc2VydmVNZXRob2QgPSAhIXRoaXMuUHJlc2VydmVNZXRob2RGb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICBhcHAuUHJvY2Vzc29yLlJlZGlyZWN0ID0gdGhpcy5SZWRpcmVjdEZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoIWFwcC5Mb29rdXBDb25maWcuUGF0aFJlZ2V4LnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgYXBwLkxvb2t1cENvbmZpZy5QYXRoUmVnZXggPSBgLyR7YXBwLkxvb2t1cENvbmZpZy5QYXRoUmVnZXh9YDtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlQXBwUmVxOiBTYXZlQXBwbGljYXRpb25Bc0NvZGVFdmVudFJlcXVlc3QgPSB7XG4gICAgICBQcm9qZWN0TG9va3VwOiB0aGlzLlByb2plY3RMb29rdXAsXG4gICAgICBBcHBsaWNhdGlvbjogYXBwLFxuICAgICAgQXBwbGljYXRpb25Mb29rdXA6IHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uTG9va3VwIHx8IEd1aWQuQ3JlYXRlUmF3KCksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLkhhc0J1aWxkRm9ybUNvbnRyb2wudmFsdWUgJiYgdGhpcy5Qcm9jZXNzb3JUeXBlICE9PSAncmVkaXJlY3QnKSB7XG4gICAgICBpZiAoYXBwKSB7XG4gICAgICAgIGFwcC5Mb3dDb2RlVW5pdC5Tb3VyY2VDb250cm9sTG9va3VwID0gdGhpcy5Tb3VyY2VDb250cm9sTG9va3VwRm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcHApIHtcbiAgICAgIGFwcC5Mb3dDb2RlVW5pdC5Tb3VyY2VDb250cm9sTG9va3VwID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmVhY1N2Yy5TYXZlQXBwbGljYXRpb25Bc0NvZGUoc2F2ZUFwcFJlcSk7XG4gIH1cblxuICBwdWJsaWMgU2V0RWRpdGluZ0FwcGxpY2F0aW9uKGFwcExvb2t1cDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb25Mb29rdXAgPSBhcHBMb29rdXA7XG5cbiAgICB0aGlzLnNldHVwQXBwbGljYXRpb25Gb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgU291cmNlQ29udHJvbExvb2t1cENoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuICAgIC8vICBUT0RPOiAgQW55dGhpbmcgdG8gZG8gaGVyZSBvbiBjaGFuZ2U/XG4gIH1cblxuICBwdWJsaWMgU3RhcnRzV2l0aChhcHA6IEVhQ0FwcGxpY2F0aW9uQXNDb2RlLCBhcHBSb3V0ZUJhc2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChhcHBSb3V0ZUJhc2UgPT09ICcvJykge1xuICAgICAgcmV0dXJuIGFwcD8uTG9va3VwQ29uZmlnPy5QYXRoUmVnZXggPT09ICcvLionO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXBwPy5Mb29rdXBDb25maWc/LlBhdGhSZWdleC5zdGFydHNXaXRoKGFwcFJvdXRlQmFzZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIFVucGFjayhhcHBMb29rdXA6IHN0cmluZywgYXBwOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSk6IHZvaWQge1xuICAgIHRoaXMuZWFjU3ZjLlVucGFja0xvd0NvZGVVbml0KHtcbiAgICAgIEFwcGxpY2F0aW9uTG9va3VwOiBhcHBMb29rdXAsXG4gICAgICBBcHBsaWNhdGlvbk5hbWU6IGFwcC5BcHBsaWNhdGlvbj8uTmFtZSxcbiAgICAgIFZlcnNpb246IGFwcC5Mb3dDb2RlVW5pdD8uVmVyc2lvbiB8fCBhcHAuTG93Q29kZVVuaXQ/LkJ1aWxkLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gIEhlbHBlcnNcbiAgcHJvdGVjdGVkIGNsZWFudXBMY3VUeXBlU3ViRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ21ldGhvZHMnKTtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ2FwaVJvb3QnKTtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3NlY3VyaXR5Jyk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3NwYVJvb3QnKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnYXBwbGljYXRpb25JZCcpO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdidWlsZCcpO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdjbGllbnRJZCcpO1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnY2xpZW50U2VjcmV0Jyk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3ppcEZpbGUnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhbnVwUHJvY2Vzc29yVHlwZVN1YkZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdkZWZhdWx0RmlsZScpO1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnZGZzTGN1VHlwZScpO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdvYXV0aExjdVR5cGUnKTtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3Njb3BlcycpO1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgndG9rZW5Mb29rdXAnKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnaW5ib3VuZFBhdGgnKTtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woJ3Byb3h5TGN1VHlwZScpO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdyZWRpcmVjdCcpO1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgncGVybWFuZW50Jyk7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdwcmVzZXJ2ZU1ldGhvZCcpO1xuXG4gICAgdGhpcy5jbGVhbnVwTGN1VHlwZVN1YkZvcm0oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cEFwcGxpY2F0aW9uRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLlByb2Nlc3NvclR5cGUgPSB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbj8uUHJvY2Vzc29yPy5UeXBlIHx8ICcnO1xuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzb3JUeXBlID0gJywgdGhpcy5Qcm9jZXNzb3JUeXBlKTtcblxuICAgIGlmICh0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbiAhPSBudWxsKSB7XG4gICAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwID0gdGhpcy5mb3JtQmxkci5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5BcHBsaWNhdGlvbj8uTmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBbXG4gICAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uQXBwbGljYXRpb24/LkRlc2NyaXB0aW9uLFxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIF0sXG4gICAgICAgIHJvdXRlOiBbXG4gICAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG9va3VwQ29uZmlnPy5QYXRoUmVnZXgucmVwbGFjZSgnLionLCAnJykgfHxcbiAgICAgICAgICAgICcvJyxcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBdLFxuICAgICAgICAvLyBwcmlvcml0eTogW1xuICAgICAgICAvLyAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkFwcGxpY2F0aW9uPy5Qcmlvcml0eSB8fCAxMDAwMCxcbiAgICAgICAgLy8gICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAvLyBdLFxuICAgICAgICBwcm9jVHlwZTogW3RoaXMuUHJvY2Vzc29yVHlwZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNldHVwQnVpbGRGb3JtKCk7XG5cbiAgICAgIHRoaXMuc2V0dXBTZWN1cml0eUZvcm0oKTtcblxuICAgICAgdGhpcy5zZXR1cFByb2Nlc3NvclR5cGVTdWJGb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwQnVpbGRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdoYXNCdWlsZCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgICEhdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG93Q29kZVVuaXQ/LlNvdXJjZUNvbnRyb2xMb29rdXAgfHwgZmFsc2UsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnc291cmNlQ29udHJvbExvb2t1cCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5Tb3VyY2VDb250cm9sTG9va3VwIHx8ICcnLFxuICAgICAgICBbXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBEZnNGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuTENVVHlwZSA9IHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5UeXBlIHx8ICcnO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2RlZmF1bHRGaWxlJyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uUHJvY2Vzc29yPy5EZWZhdWx0RmlsZSB8fCAnaW5kZXguaHRtbCcsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnbGN1VHlwZScsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2wodGhpcy5MQ1VUeXBlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cExDVUFQSUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ21ldGhvZHMnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb29rdXBDb25maWc/LkFsbG93ZWRNZXRob2RzPy5qb2luKCcgJykgfHwgJycsXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdhcGlSb290JyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG93Q29kZVVuaXQ/LkFQSVJvb3QgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnc2VjdXJpdHknLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uU2VjdXJpdHkgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBMQ1VBcHBsaWNhdGlvblBvaW50ZXJGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdhcHBsaWNhdGlvbklkJyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG93Q29kZVVuaXQ/LkFwcGxpY2F0aW9uSUQgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBMQ1VHaXRIdWJGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdidWlsZCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5CdWlsZCB8fCAnbGF0ZXN0JyxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cExDVUdpdEh1Yk9BdXRoRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnY2xpZW50SWQnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uQ2xpZW50SUQgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnY2xpZW50U2VjcmV0JyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG93Q29kZVVuaXQ/LkNsaWVudFNlY3JldCB8fCAnJyxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cExDVU5QTUZvcm0oKTogdm9pZCB7XG4gICAgLy8gdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgIC8vICAgJ3BhY2thZ2UnLFxuICAgIC8vICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgIC8vICAgICB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uUGFja2FnZSB8fCAnJyxcbiAgICAvLyAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgLy8gICApXG4gICAgLy8gKTtcbiAgICAvLyB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgLy8gICAndmVyc2lvbicsXG4gICAgLy8gICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgLy8gICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5WZXJzaW9uIHx8ICcnLFxuICAgIC8vICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAvLyAgIClcbiAgICAvLyApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwTENVU1BBRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnc3BhUm9vdCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5TUEFSb290IHx8ICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwTENVWmlwRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnemlwRmlsZScsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvd0NvZGVVbml0Py5aaXBGaWxlIHx8ICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwTGN1VHlwZVN1YkZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwTGN1VHlwZVN1YkZvcm0oKTtcblxuICAgIC8vIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgncGFja2FnZScpO1xuICAgIC8vIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgndmVyc2lvbicpO1xuXG4gICAgaWYgKHRoaXMuTENVVHlwZSkge1xuICAgICAgc3dpdGNoICh0aGlzLkxDVVR5cGUpIHtcbiAgICAgICAgY2FzZSAnQVBJJzpcbiAgICAgICAgICB0aGlzLnNldHVwTENVQVBJRm9ybSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0FwcGxpY2F0aW9uUG9pbnRlcic6XG4gICAgICAgICAgdGhpcy5zZXR1cExDVUFwcGxpY2F0aW9uUG9pbnRlckZvcm0oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdHaXRIdWInOlxuICAgICAgICAgIHRoaXMuc2V0dXBMQ1VHaXRIdWJGb3JtKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnR2l0SHViT0F1dGgnOlxuICAgICAgICAgIHRoaXMuc2V0dXBMQ1VHaXRIdWJPQXV0aEZvcm0oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdOUE0nOlxuICAgICAgICAgIHRoaXMuc2V0dXBMQ1VOUE1Gb3JtKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnU1BBJzpcbiAgICAgICAgICB0aGlzLnNldHVwTENVU1BBRm9ybSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1ppcCc6XG4gICAgICAgICAgdGhpcy5zZXR1cExDVVppcEZvcm0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBPQXV0aEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5MQ1VUeXBlID0gdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uTG93Q29kZVVuaXQ/LlR5cGUgfHwgJyc7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnc2NvcGVzJyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uUHJvY2Vzc29yPy5TY29wZXM/LkpvaW4oJyAnKSB8fCAnJyxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICd0b2tlbkxvb2t1cCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLlByb2Nlc3Nvcj8uVG9rZW5Mb29rdXAgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnbGN1VHlwZScsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2wodGhpcy5MQ1VUeXBlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cFByb3h5Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLkxDVVR5cGUgPSB0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Mb3dDb2RlVW5pdD8uVHlwZSB8fCAnJztcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdpbmJvdW5kUGF0aCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLlByb2Nlc3Nvcj8uSW5ib3VuZFBhdGggfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnbGN1VHlwZScsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2wodGhpcy5MQ1VUeXBlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cFByb2Nlc3NvclR5cGVTdWJGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cFByb2Nlc3NvclR5cGVTdWJGb3JtKCk7XG5cbiAgICBpZiAodGhpcy5Qcm9jZXNzb3JUeXBlKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuUHJvY2Vzc29yVHlwZSkge1xuICAgICAgICBjYXNlICdERlMnOlxuICAgICAgICAgIHRoaXMuc2V0dXBEZnNGb3JtKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnT0F1dGgnOlxuICAgICAgICAgIHRoaXMuc2V0dXBPQXV0aEZvcm0oKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdQcm94eSc6XG4gICAgICAgICAgdGhpcy5zZXR1cFByb3h5Rm9ybSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1JlZGlyZWN0JzpcbiAgICAgICAgICB0aGlzLnNldHVwUmVkaXJlY3RGb3JtKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cExjdVR5cGVTdWJGb3JtKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBSZWRpcmVjdEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ3JlZGlyZWN0JyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbCh0aGlzLkVkaXRpbmdBcHBsaWNhdGlvbi5Qcm9jZXNzb3I/LlJlZGlyZWN0IHx8ICcnLCBbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBdKVxuICAgICk7XG5cbiAgICB0aGlzLkFwcGxpY2F0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAncGVybWFuZW50JyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgdGhpcy5FZGl0aW5nQXBwbGljYXRpb24uUHJvY2Vzc29yPy5QZXJtYW5lbnQgfHwgZmFsc2UsXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuQXBwbGljYXRpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdwcmVzZXJ2ZU1ldGhvZCcsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLlByb2Nlc3Nvcj8uUHJlc2VydmVNZXRob2QgfHwgZmFsc2UsXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLkRldGVybWluZVRvb2x0aXBUZXh0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBTZWN1cml0eUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2lzUHJpdmF0ZScsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvb2t1cENvbmZpZz8uSXNQcml2YXRlIHx8IGZhbHNlLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5BcHBsaWNhdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2lzVHJpZ2dlclNpZ25JbicsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgIHRoaXMuRWRpdGluZ0FwcGxpY2F0aW9uLkxvb2t1cENvbmZpZz8uSXNUcmlnZ2VyU2lnbkluIHx8IGZhbHNlLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2ICpuZ0lmPVwiRWRpdGluZ0FwcGxpY2F0aW9uPy5BcHBsaWNhdGlvblwiPlxuICAgIDxoMj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIG1hdFRvb2x0aXA9XCJCYWNrIHRvIFJvdXRlc1wiXG4gICAgICAgIChjbGljayk9XCJTZXRFZGl0aW5nQXBwbGljYXRpb24obnVsbClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAge3sgQ3VycmVudEFwcGxpY2F0aW9uUm91dGUgfX0gLyB7eyBFZGl0aW5nQXBwbGljYXRpb24uQXBwbGljYXRpb24/Lk5hbWUgfX1cbiAgICA8L2gyPlxuICAgIDwvZGl2PlxuICA8Zm9ybVxuICAgIFtmb3JtR3JvdXBdPVwiQXBwbGljYXRpb25Gb3JtR3JvdXBcIlxuICAgIChuZ1N1Ym1pdCk9XCJTYXZlQXBwbGljYXRpb24oKVwiXG4gICAgKm5nSWY9XCJFZGl0aW5nQXBwbGljYXRpb25cIlxuICA+XG5cbiAgICA8ZGl2XG4gICAgICBmeExheW91dD1cInJvdyB3cmFwXCJcbiAgICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgc3RhcnRcIlxuICAgICAgZnhMYXlvdXQubHQtbWQ9XCJjb2x1bW5cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNhcmRcIiBmeEZsZXg9XCI3MCVcIiBmeEZsZXgubHQtbWQ9XCIxMDAlXCI+XG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInNwcmVhZCBmbG93LWNhcmRcIj5cbiAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRWRpdGluZ0FwcGxpY2F0aW9uPy5BcHBsaWNhdGlvblwiPlxuICAgICAgICAgICAgICAgIEVkaXQgQXBwbGljYXRpb246XG4gICAgICAgICAgICAgICAge3sgRWRpdGluZ0FwcGxpY2F0aW9uLkFwcGxpY2F0aW9uPy5OYW1lIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhRWRpdGluZ0FwcGxpY2F0aW9uPy5BcHBsaWNhdGlvblwiPlxuICAgICAgICAgICAgICAgIENyZWF0ZSBhbiBBcHBsaWNhdGlvblxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG5cbiAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgcm93cz1cIjNcIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJvdXRlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyb3V0ZVwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNhcmRcIiBmeEZsZXg9XCIzNSVcIj5cbiAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwic3ByZWFkIGZsb3ctY2FyZFwiPlxuICAgICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGU+IFByb2Nlc3NvciBEZXRhaWxzIDwvbWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG5cbiAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9jVHlwZVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJQcm9jZXNzb3JUeXBlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJERlNcIj5WaWV3IFBhY2thZ2U8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlJlZGlyZWN0XCI+UmVkaXJlY3Q8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlByb3h5XCI+UHJveHk8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIk9BdXRoXCI+T0F1dGg8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cIlByb2Nlc3NvclR5cGVcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0RGUydcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGVmYXVsdCBGaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVmYXVsdEZpbGVcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxjdVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIkxDVVR5cGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIk5QTVwiPk5QTTwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkdpdEh1YlwiPkdpdEh1YjwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtb3B0aW9uIHZhbHVlPVwiWmlwXCI+WmlwPC9tYXQtb3B0aW9uPiAtLT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwiTENVVHlwZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0dpdEh1YidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxjdS1zb3VyY2UtY29udHJvbC1mb3JtLWNvbnRyb2xzXG4gICAgICAgICAgICAgICAgICAgICAgW2J1aWxkLXBhdGhdPVwiRWRpdGluZ0FwcGxpY2F0aW9uPy5Mb3dDb2RlVW5pdD8uUGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm0tZ3JvdXBdPVwiQXBwbGljYXRpb25Gb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzb3VyY2UtY29udHJvbF09XCJEZWZhdWx0U291cmNlQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3VzZS1icmFuY2hlc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3VzZS1idWlsZC1wYXRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9sY3Utc291cmNlLWNvbnRyb2wtZm9ybS1jb250cm9scz5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlQ29udHJvbEZvcm1Db250cm9scz8uUmVwb3NpdG9yeUZvcm1Db250cm9sPy52YWxpZFxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJ1aWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJ1aWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgQnVpbGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBFZGl0aW5nQXBwbGljYXRpb24/Lkxvd0NvZGVVbml0Py5DdXJyZW50QnVpbGQgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidOUE0nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsY3UtbnBtLXBhY2thZ2Utc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgW25wbS1wYWNrYWdlXT1cIkVkaXRpbmdBcHBsaWNhdGlvbj8uTG93Q29kZVVuaXQ/LlBhY2thZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtucG0tcGFja2FnZS12ZXJzaW9uXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdGluZ0FwcGxpY2F0aW9uPy5Mb3dDb2RlVW5pdD8uVmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm0tZ3JvdXBdPVwiQXBwbGljYXRpb25Gb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9sY3UtbnBtLXBhY2thZ2Utc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50IFZlcnNpb246XG4gICAgICAgICAgICAgICAgICAgICAge3sgRWRpdGluZ0FwcGxpY2F0aW9uPy5Mb3dDb2RlVW5pdD8uQ3VycmVudFZlcnNpb24gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInT0F1dGgnXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNjb3BlcyAoc3BhY2Ugc2VwYXJhdGVkKVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNjb3Blc1wiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVG9rZW4gTG9va3VwXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidG9rZW5Mb29rdXBcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxjdVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIkxDVVR5cGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkdpdEh1Yk9BdXRoXCI+R2l0SHViPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJMQ1VUeXBlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInR2l0SHViT0F1dGgnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDbGllbnQgSURcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2xpZW50SWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDbGllbnQgU2VjcmV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNsaWVudFNlY3JldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1Byb3h5J1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJJbmJvdW5kIFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbmJvdW5kUGF0aFwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGN1VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiTENVVHlwZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiQVBJXCI+QVBJPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU1BBXCI+U2luZ2xlIFBhZ2UgQXBwbGljYXRpb248L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cIkxDVVR5cGVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidBUEknXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBUEkgUm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhcGlSb290XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWxsb3dlZCBNZXRob2RzIChzZXBhcmF0ZSB3aXRoIHNwYWNlcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWV0aG9kc1wiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VjdXJpdHkgKHtoZWFkZXJ9fnt2YWx1ZX0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlY3VyaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInU1BBJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU1BBIFJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3BhUm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1JlZGlyZWN0J1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSZWRpcmVjdCBVUkxcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWRpcmVjdFwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ByZWFkXCIgXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBlcm1hbmVudFwiPlxuICAgICAgICAgICAgICAgICAgICBJcyBQZXJtYW5lbnQ/XG4gICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ByZWFkXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJlc2VydmVNZXRob2RcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBQcmVzZXJ2ZSBNZXRob2Q/XG4gICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNwcmVhZFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJEZXRlcm1pbmVUb29sdGlwVGV4dCgpXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD17e3JlZGlyZWN0VG9vbHRpcH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIUlzUGVybWFuZW50ICYmICFJc1ByZXNlcnZlXCJcblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNwcmVhZFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiMzAyIOKAkyBOb3QgUGVybWFuZW50IGFuZCBOb3QgUHJlc2VydmVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+IC0tPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtaWNvblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhSXNQZXJtYW5lbnQgJiYgSXNQcmVzZXJ2ZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ByZWFkXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCIzMDcg4oCTIE5vdCBQZXJtYW5lbnQgYW5kIFByZXNlcnZlXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgaW5mb19vdXRsaW5lXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPiAtLT5cblxuICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXNQZXJtYW5lbnQgJiYgSXNQcmVzZXJ2ZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ByZWFkXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCIzMDgg4oCTIFBlcm1hbmVudCBhbmQgUHJlc2VydmVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+IC0tPlxuXG4gICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcHJlYWRcIlxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlZhbHVlcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlZGlyZWN0IHR5cGUuICBQZXJtYW5lbnQgYW5kIE5vdCBQcmVzZXJ2ZSA9IDMwMTsgTm90IFBlcm1hbmVudCBhbmQgTm90IFByZXNlcnZlID0gMzAyOyBQZXJtYW5lbnQgYW5kIFByZXNlcnZlID0gMzA4OyBOb3QgUGVybWFuZW50IGFuZCBOb3QgUHJlc2VydmUgPSAzMDc7XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgaW5mb19vdXRsaW5lXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPiAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2FyZFwiIGZ4RmxleD1cIjM1JVwiPlxuICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJzcHJlYWQgZmxvdy1jYXJkXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZT4gU2VjdXJpdHkgU2V0dGluZ3MgPC9tYXQtY2FyZC10aXRsZT5cblxuICAgICAgICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzUHJpdmF0ZVwiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJJcyBTZWN1cmUgQXBwbGljYXRpb24/XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQSBTZWN1cmVkIEFwcGxpY2F0aW9uIGlzIG9uZSB0aGF0IHJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGF1dGhlbnRpY2F0ZWQgdG8gdXNlIHRoZSBhcHBsaWNhdGlvbi4gVGhlIGFwcGxpY2F0aW9uIGlzIGhvc3RlZCBiZWhpbmQgYW4gaWRlbnRpdHkgd2FsbC5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG5cbiAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJJc1ByaXZhdGVGb3JtQ29udHJvbC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJpc1RyaWdnZXJTaWduSW5cIj5cbiAgICAgICAgICAgICAgICAgICAgSXMgVHJpZ2dlciBTaWduIEluIEFwcGxpY2F0aW9uP1xuICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBIFRyaWdnZXIgU2lnbiBJbiBBcHBsaWNhdGlvbiB3aWxsIGRpcmVjdCB0aGUgdXNlciB0byBzaWduIGluIGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5LlwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG5cbiAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwic3ByZWFkIGZsb3ctY2FyZFwiICpuZ0lmPVwiUHJvY2Vzc29yVHlwZSAhPSAnUmVkaXJlY3QnXCI+XG4gICAgICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZSAqbmdJZj1cIiFIYXNCdWlsZEZvcm1Db250cm9sLnZhbHVlXCI+XG4gICAgICAgICAgICAgIEJ1aWxkICYgU291cmNlXG4gICAgICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxuXG4gICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJIYXNCdWlsZEZvcm1Db250cm9sLnZhbHVlXCI+XG4gICAgICAgICAgICAgIFNvdXJjZSBDb250cm9sXG4gICAgICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxuXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD48L2Rpdj5cblxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaGFzQnVpbGRcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSGFzIEJ1aWxkP1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbmZpZ3VyZSBzb3VyY2UgY29udHJvbCwgRGV2T3BzIENJL0NELCBhbmQgYXJ0aWZhY3RzLlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cblxuICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIEhhc0J1aWxkRm9ybUNvbnRyb2wudmFsdWUgJiYgU291cmNlQ29udHJvbExvb2t1cHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzb3VyY2VDb250cm9sTG9va3VwXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNvdXJjZSBDb250cm9sXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIlNvdXJjZUNvbnRyb2xMb29rdXBDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRyb2xGb3JtQ29udHJvbHM/LkxvYWRpbmcgfHwgSG9zdGluZ0RldGFpbHM/LkxvYWRpbmdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNyY0N0cmxMb29rdXAgb2YgU291cmNlQ29udHJvbExvb2t1cHNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzcmNDdHJsTG9va3VwXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJTb3VyY2VDb250cm9sc1tzcmNDdHJsTG9va3VwXTsgbGV0IHNyY0N0cmxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBzcmNDdHJsLk5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJIYXNCdWlsZEZvcm1Db250cm9sPy52YWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxoMz5cbiAgICAgICAgICAgICAgICAgIEB7e1xuICAgICAgICAgICAgICAgICAgICBTb3VyY2VDb250cm9sRm9ybUNvbnRyb2xzPy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbD8udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VDb250cm9sPy5Pcmdhbml6YXRpb25cbiAgICAgICAgICAgICAgICAgIH19L3t7XG4gICAgICAgICAgICAgICAgICAgIFNvdXJjZUNvbnRyb2xGb3JtQ29udHJvbHM/LlJlcG9zaXRvcnlGb3JtQ29udHJvbD8udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VDb250cm9sPy5SZXBvc2l0b3J5XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvaDM+XG5cbiAgICAgICAgICAgICAgICA8cD5Pcmdhbml6YXRpb24gYW5kIFJlcG9zaXRvcnkgcHVsbGVkIGZyb20gYnVpbGQgc2V0dGluZ3M8L3A+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgICBDdXJyZW50QnVpbGQ6XG4gICAgICAgICAgICAgICAgICB7eyBFZGl0aW5nQXBwbGljYXRpb24/Lkxvd0NvZGVVbml0Py5DdXJyZW50QnVpbGQgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJTb3VyY2VDb250cm9sTG9va3Vwcz8ubGVuZ3RoIDwgMFwiPlxuICAgICAgICAgICAgICA8aDM+XG4gICAgICAgICAgICAgICAgQ3JlYXRlIHNvdXJjZSBjb250cm9sIGxvY2F0aW9ucyB1bmRlciB0aGUgRGV2T3BzIHRhYiBhYm92ZS5cbiAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInNwcmVhZFwiPlxuICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIlNldEVkaXRpbmdBcHBsaWNhdGlvbihudWxsKVwiPlxuICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj4gQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhQXBwbGljYXRpb25Gb3JtR3JvdXAudmFsaWQgfHwgIUFwcGxpY2F0aW9uRm9ybUdyb3VwLmRpcnR5XCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPnNhdmU8L21hdC1pY29uPiBTYXZlIEFwcGxpY2F0aW9uXG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cblxuICA8ZGl2IGNsYXNzPVwic3ByZWFkXCIgKm5nSWY9XCIhRWRpdGluZ0FwcGxpY2F0aW9uXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJhcHBzLWFjdGlvbnNcIj5cbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwiQ3JlYXRlTmV3QXBwbGljYXRpb24oKVwiPlxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+YWRkPC9tYXQtaWNvbj4gQ3JlYXRlIE5ld1xuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxuXG4gICAgPGRpdiBjbGFzcz1cInNwcmVhZFwiICpuZ0lmPVwiIUN1cnJlbnRBcHBsaWNhdGlvblJvdXRlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiQXBwbGljYXRpb25Sb3V0ZXM/Lmxlbmd0aCA8PSAwXCI+XG4gICAgICAgIDxoMj5ObyBhcHBsaWNhdGlvbnMgY3JlYXRlZCwgY3JlYXRlIHlvdXIgZmlyc3QgYXBwbGljYXRpb24uPC9oMj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiQXBwbGljYXRpb25Sb3V0ZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGgyPlByb2plY3QgUm91dGVzPC9oMj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiXG4gICAgICAgICAgZnhMYXlvdXQubHQtbWQ9XCJjb2x1bW5cIlxuICAgICAgICAgICpuZ0lmPVwiQXBwbGljYXRpb25Sb3V0ZXNcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgZnhGbGV4PVwiMjAlXCJcbiAgICAgICAgICAgIGZ4RmxleC5sdC1tZD1cIjEwMCVcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFwcFJvdXRlIG9mIEFwcGxpY2F0aW9uUm91dGVzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJzcHJlYWQgZmxvdy1jYXJkXCI+XG4gICAgICAgICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPCEtLSA8aW1nIG1hdC1jYXJkLWF2YXRhcj1cIi9hc3NldHMvaW1hZ2VzL3Byb2plY3QtaWNvbi5wbmdcIiAvPiAtLT5cblxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImFwcFJvdXRlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBhcHBSb3V0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuXG4gICAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcHJlYWRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuXG4gICAgICAgICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLWFwcC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL3t7IFByaW1hcnlIb3N0IH19e3sgYXBwUm91dGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0VG9vbHRpcD1cIkxhdW5jaFwiPmxhdW5jaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkVkaXRBcHBsaWNhdGlvblJvdXRlQ2xpY2tlZChhcHBSb3V0ZSlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0VG9vbHRpcD1cIkVkaXQgQXBwbGljYXRpb24gUm91dGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YS1hcHAtZmFrZXNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmZpYmVyX21hbnVhbF9yZWNvcmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZmliZXJfbWFudWFsX3JlY29yZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuICAgICAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJDdXJyZW50QXBwbGljYXRpb25Sb3V0ZVwiPlxuICAgICAgPGgyPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIkJhY2sgdG8gUm91dGVzXCJcbiAgICAgICAgICAoY2xpY2spPVwiQ3VycmVudEFwcGxpY2F0aW9uUm91dGUgPSBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAge3sgQ3VycmVudEFwcGxpY2F0aW9uUm91dGUgfX0gUm91dGVzXG4gICAgICA8L2gyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dC5sdC1tZD1cImNvbHVtblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhcHBMb29rdXAgb2YgQ3VycmVudFJvdXRlQXBwbGljYXRpb25Mb29rdXBzXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgZnhGbGV4PVwiMzAlXCJcbiAgICAgICAgICAgIGZ4RmxleC5sdC1tZD1cIjEwMCVcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgUm91dGVkQXBwbGljYXRpb25zW0N1cnJlbnRBcHBsaWNhdGlvblJvdXRlXVthcHBMb29rdXBdO1xuICAgICAgICAgICAgICBsZXQgYXBwXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInNwcmVhZCBmbG93LWNhcmRcIj5cbiAgICAgICAgICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8IS0tIDxpbWcgbWF0LWNhcmQtYXZhdGFyPVwiL2Fzc2V0cy9pbWFnZXMvcHJvamVjdC1pY29uLnBuZ1wiIC8+IC0tPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTJcIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYXBwLkFwcGxpY2F0aW9uLkRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBhcHAuQXBwbGljYXRpb24uTmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQtc3VidGl0bGVcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMVwiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0Py5DdXJyZW50VmVyc2lvbiB8fFxuICAgICAgICAgICAgICAgICAgICBhcHAuTG93Q29kZVVuaXQ/LkN1cnJlbnRCdWlsZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAe3tcbiAgICAgICAgICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0Py5DdXJyZW50VmVyc2lvbiB8fFxuICAgICAgICAgICAgICAgICAgICAgIGFwcC5Mb3dDb2RlVW5pdD8uQ3VycmVudEJ1aWxkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgYXBwLlByb2Nlc3Nvcj8uUmVkaXJlY3QgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcIk5vIHZlcnNpb24gZGVwbG95ZWRcIlxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cblxuICAgICAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ByZWFkXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cblxuICAgICAgICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YS1hcHAtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly97eyBQcmltYXJ5SG9zdCB9fXt7XG4gICAgICAgICAgICAgICAgICAgICAgYXBwLkxvb2t1cENvbmZpZy5QYXRoUmVnZXgucmVwbGFjZSgnLionLCAnJylcbiAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0VG9vbHRpcD1cIkxhdW5jaFwiPmxhdW5jaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIkdldFByb2Nlc3NvclR5cGUoYXBwTG9va3VwKSA9PT0gJ0RGUydcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlVucGFjayhhcHBMb29rdXAsIGFwcClcIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiVW5wYWNrIHt7XG4gICAgICAgICAgICAgICAgICAgICAgYXBwLkxvd0NvZGVVbml0Py5WZXJzaW9uIHx8IGFwcC5Mb3dDb2RlVW5pdD8uQnVpbGRcbiAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvdWRfdXBsb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlNldEVkaXRpbmdBcHBsaWNhdGlvbihhcHBMb29rdXApXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFRvb2x0aXA9XCJFZGl0IEFwcGxpY2F0aW9uXCI+IGVkaXQgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiRGVsZXRlQXBwbGljYXRpb24oYXBwTG9va3VwLCBhcHAuQXBwbGljYXRpb24uTmFtZSlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0VG9vbHRpcD1cIkRlbGV0ZSB7eyBhcHAuQXBwbGljYXRpb24uTmFtZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZV9mb3JldmVyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLWFwcC1mYWtlc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZmliZXJfbWFudWFsX3JlY29yZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5maWJlcl9tYW51YWxfcmVjb3JkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmZpYmVyX21hbnVhbF9yZWNvcmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkIFxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJHZXRQcm9jZXNzb3JUeXBlKGFwcExvb2t1cCkgPT09ICdERlMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5maWJlcl9tYW51YWxfcmVjb3JkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XG4gICAgICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19