@tilde-nlp/ngx-translate 1.0.0

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 (541) hide show
  1. package/README.md +2 -0
  2. package/esm2020/lib/components/shared/extension-dialog/components/index.mjs +2 -0
  3. package/esm2020/lib/components/shared/extension-dialog/components/open-extension-dialog/open-extension-dialog.component.mjs +24 -0
  4. package/esm2020/lib/components/shared/extension-dialog/extension-dialog.component.mjs +133 -0
  5. package/esm2020/lib/components/shared/extension-dialog/extension-dialog.module.mjs +51 -0
  6. package/esm2020/lib/components/shared/extension-dialog/index.mjs +6 -0
  7. package/esm2020/lib/components/shared/extension-dialog/models/enums/file-categories.enum.mjs +9 -0
  8. package/esm2020/lib/components/shared/extension-dialog/models/enums/file-extensions.enum.mjs +35 -0
  9. package/esm2020/lib/components/shared/extension-dialog/models/enums/file-type-icons.enum.mjs +13 -0
  10. package/esm2020/lib/components/shared/extension-dialog/models/enums/file-types.enum.mjs +13 -0
  11. package/esm2020/lib/components/shared/extension-dialog/models/enums/index.mjs +5 -0
  12. package/esm2020/lib/components/shared/extension-dialog/models/index.mjs +3 -0
  13. package/esm2020/lib/components/shared/extension-dialog/models/interfaces/config.mjs +2 -0
  14. package/esm2020/lib/components/shared/extension-dialog/models/interfaces/dialog-data.model.mjs +2 -0
  15. package/esm2020/lib/components/shared/extension-dialog/models/interfaces/index.mjs +3 -0
  16. package/esm2020/lib/components/shared/extension-dialog/services/extension-dialog.service.mjs +22 -0
  17. package/esm2020/lib/components/shared/extension-dialog/services/index.mjs +2 -0
  18. package/esm2020/lib/components/shared/text-to-speech/index.mjs +3 -0
  19. package/esm2020/lib/components/shared/text-to-speech/models/text-to-speech-settings.model.mjs +2 -0
  20. package/esm2020/lib/components/shared/text-to-speech/text-to-speech.component.mjs +62 -0
  21. package/esm2020/lib/components/shared/text-to-speech/text-to-speech.module.mjs +36 -0
  22. package/esm2020/lib/components/shared/vendor-disclaimer/vendor-disclaimer.component.mjs +39 -0
  23. package/esm2020/lib/components/shared/vendor-disclaimer/vendor-disclaimer.module.mjs +28 -0
  24. package/esm2020/lib/factories/file-api-service.factory.mjs +12 -0
  25. package/esm2020/lib/factories/system-service.factory.mjs +12 -0
  26. package/esm2020/lib/factories/text-api-service.factory.mjs +12 -0
  27. package/esm2020/lib/i18n/available-languages.mjs +19 -0
  28. package/esm2020/lib/i18n/de.mjs +378 -0
  29. package/esm2020/lib/i18n/en.mjs +426 -0
  30. package/esm2020/lib/i18n/et.mjs +378 -0
  31. package/esm2020/lib/i18n/fi.mjs +383 -0
  32. package/esm2020/lib/i18n/lt.mjs +378 -0
  33. package/esm2020/lib/i18n/lv.mjs +391 -0
  34. package/esm2020/lib/i18n/models/available-languages.model.mjs +2 -0
  35. package/esm2020/lib/i18n/pl.mjs +378 -0
  36. package/esm2020/lib/i18n/sv.mjs +242 -0
  37. package/esm2020/lib/injection-tokens/file-api-service.token.mjs +2 -0
  38. package/esm2020/lib/injection-tokens/index.mjs +6 -0
  39. package/esm2020/lib/injection-tokens/system-service.token.mjs +2 -0
  40. package/esm2020/lib/injection-tokens/text-api-service.token.mjs +2 -0
  41. package/esm2020/lib/injection-tokens/tld-translate-config.token.mjs +2 -0
  42. package/esm2020/lib/injection-tokens/translation-api-version.token.mjs +2 -0
  43. package/esm2020/lib/modules/material.module.mjs +97 -0
  44. package/esm2020/lib/modules/tld-audio/index.mjs +4 -0
  45. package/esm2020/lib/modules/tld-audio/models/audio-error-case.model.mjs +13 -0
  46. package/esm2020/lib/modules/tld-audio/models/dictate-configurationi.model.mjs +2 -0
  47. package/esm2020/lib/modules/tld-audio/models/index.mjs +3 -0
  48. package/esm2020/lib/modules/tld-audio/models/transcription-update.model.mjs +2 -0
  49. package/esm2020/lib/modules/tld-audio/services/audio-record.service.mjs +116 -0
  50. package/esm2020/lib/modules/tld-audio/services/index.mjs +4 -0
  51. package/esm2020/lib/modules/tld-audio/services/tld-voice-input-api.service.mjs +48 -0
  52. package/esm2020/lib/modules/tld-audio/services/tld-voice-input.service.mjs +60 -0
  53. package/esm2020/lib/modules/tld-audio/tld-audio.module.mjs +41 -0
  54. package/esm2020/lib/modules/tld-audio/tld-dictate/tld-dictate.component.mjs +151 -0
  55. package/esm2020/lib/modules/tld-audio/tld-record/tld-record.component.mjs +87 -0
  56. package/esm2020/lib/modules/tld-common/animations/pulse.animation.mjs +11 -0
  57. package/esm2020/lib/modules/tld-common/components/index.mjs +10 -0
  58. package/esm2020/lib/modules/tld-common/components/open-close-button/open-close-button.component.mjs +41 -0
  59. package/esm2020/lib/modules/tld-common/components/source-and-target-wrapper/source-and-target-wrapper.component.mjs +44 -0
  60. package/esm2020/lib/modules/tld-common/components/tld-file-upload/tld-file-upload.component.mjs +103 -0
  61. package/esm2020/lib/modules/tld-common/components/tld-lang-list/tld-lang-list.component.mjs +193 -0
  62. package/esm2020/lib/modules/tld-common/components/tld-list-menu/tld-list-menu.component.mjs +60 -0
  63. package/esm2020/lib/modules/tld-common/components/tld-loader/tld-loader.component.mjs +12 -0
  64. package/esm2020/lib/modules/tld-common/components/tld-message/tld-message.component.mjs +49 -0
  65. package/esm2020/lib/modules/tld-common/components/tld-translate-achievement/tld-translate-achievement.component.mjs +17 -0
  66. package/esm2020/lib/modules/tld-common/components/translate-button/tld-translate-button.service.mjs +30 -0
  67. package/esm2020/lib/modules/tld-common/components/translate-button/translate-button.component.mjs +59 -0
  68. package/esm2020/lib/modules/tld-common/directives/drag-and-drop.directive.mjs +57 -0
  69. package/esm2020/lib/modules/tld-common/directives/index.mjs +2 -0
  70. package/esm2020/lib/modules/tld-common/index.mjs +2 -0
  71. package/esm2020/lib/modules/tld-common/models/auth-options.model.mjs +2 -0
  72. package/esm2020/lib/modules/tld-common/models/common.mjs +107 -0
  73. package/esm2020/lib/modules/tld-common/models/configs/tld-audio-config.model.mjs +2 -0
  74. package/esm2020/lib/modules/tld-common/models/configs/tld-term-config.model.mjs +2 -0
  75. package/esm2020/lib/modules/tld-common/models/configs/tld-text-to-speech-config.model.mjs +2 -0
  76. package/esm2020/lib/modules/tld-common/models/configs/tld-translate-api-v2-config.model.mjs +2 -0
  77. package/esm2020/lib/modules/tld-common/models/configs/tld-translate-config.model.mjs +2 -0
  78. package/esm2020/lib/modules/tld-common/models/configs/tld-translate-core-config.model.mjs +2 -0
  79. package/esm2020/lib/modules/tld-common/models/configs/tld-translate-file-config.model.mjs +2 -0
  80. package/esm2020/lib/modules/tld-common/models/configs/tld-translate-text-config.model.mjs +2 -0
  81. package/esm2020/lib/modules/tld-common/models/configs/tld-translate-web-config.model.mjs +2 -0
  82. package/esm2020/lib/modules/tld-common/models/core/index.mjs +3 -0
  83. package/esm2020/lib/modules/tld-common/models/core/language-menu-version.enum.mjs +6 -0
  84. package/esm2020/lib/modules/tld-common/models/core/translation-api-version.model.mjs +6 -0
  85. package/esm2020/lib/modules/tld-common/models/errors/error-codes.enum.mjs +27 -0
  86. package/esm2020/lib/modules/tld-common/models/errors/error-codes.type.mjs +2 -0
  87. package/esm2020/lib/modules/tld-common/models/errors/error.model.mjs +2 -0
  88. package/esm2020/lib/modules/tld-common/models/file-upload.model.mjs +10 -0
  89. package/esm2020/lib/modules/tld-common/models/index.mjs +22 -0
  90. package/esm2020/lib/modules/tld-common/models/lang-list-item.model.mjs +2 -0
  91. package/esm2020/lib/modules/tld-common/models/language-with-translation.model.mjs +2 -0
  92. package/esm2020/lib/modules/tld-common/models/message.model.mjs +7 -0
  93. package/esm2020/lib/modules/tld-common/models/selected-language.model.mjs +2 -0
  94. package/esm2020/lib/modules/tld-common/models/services/file-api/download-file-params.model.mjs +2 -0
  95. package/esm2020/lib/modules/tld-common/models/services/file-api/file-api-service.model.mjs +2 -0
  96. package/esm2020/lib/modules/tld-common/models/services/file-api/file-meta.model.mjs +2 -0
  97. package/esm2020/lib/modules/tld-common/models/services/file-api/file-translation-substatus.model.mjs +9 -0
  98. package/esm2020/lib/modules/tld-common/models/services/file-api/get-file-status-params.model.mjs +2 -0
  99. package/esm2020/lib/modules/tld-common/models/services/file-api/get-file-translation-status-response.model.mjs +2 -0
  100. package/esm2020/lib/modules/tld-common/models/services/file-api/remove-file-params.model.mjs +2 -0
  101. package/esm2020/lib/modules/tld-common/models/services/file-api/source-file-preview-response.model.mjs +2 -0
  102. package/esm2020/lib/modules/tld-common/models/services/file-api/start-file-translation-params.model.mjs +2 -0
  103. package/esm2020/lib/modules/tld-common/models/services/file-api/translated-document-preview-params.model.mjs +2 -0
  104. package/esm2020/lib/modules/tld-common/models/services/index.mjs +19 -0
  105. package/esm2020/lib/modules/tld-common/models/services/system/system.model.mjs +2 -0
  106. package/esm2020/lib/modules/tld-common/models/services/system/tld-system-api-service.model.mjs +2 -0
  107. package/esm2020/lib/modules/tld-common/models/services/text-api/check-grammar-response.model.mjs +2 -0
  108. package/esm2020/lib/modules/tld-common/models/services/text-api/tld-translate-text-api-service.model.mjs +2 -0
  109. package/esm2020/lib/modules/tld-common/models/services/text-api/translate-paragraph-request-params.model.mjs +2 -0
  110. package/esm2020/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-job-state.model.mjs +7 -0
  111. package/esm2020/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-job.model.mjs +2 -0
  112. package/esm2020/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-start-job-request-params.model.mjs +2 -0
  113. package/esm2020/lib/modules/tld-common/pipes/index.mjs +2 -0
  114. package/esm2020/lib/modules/tld-common/pipes/translate-domain.pipe.mjs +27 -0
  115. package/esm2020/lib/modules/tld-common/services/icon-service/icon.service.mjs +30 -0
  116. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/excel.icon.mjs +22 -0
  117. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/index.mjs +10 -0
  118. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/interchange.icon.mjs +6 -0
  119. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/office-other.icon.mjs +6 -0
  120. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/other.icon.mjs +6 -0
  121. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/pdf.icon.mjs +12 -0
  122. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/powerpoint.icon.mjs +10 -0
  123. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/scanned.icon.mjs +6 -0
  124. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/web.icon.mjs +6 -0
  125. package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/word.icon.mjs +11 -0
  126. package/esm2020/lib/modules/tld-common/services/icon-service/icons.mjs +52 -0
  127. package/esm2020/lib/modules/tld-common/services/index.mjs +5 -0
  128. package/esm2020/lib/modules/tld-common/services/scroll/tld-scroll.service.mjs +43 -0
  129. package/esm2020/lib/modules/tld-common/services/tld-alert.service.mjs +139 -0
  130. package/esm2020/lib/modules/tld-common/services/tld-highlight.service.mjs +25 -0
  131. package/esm2020/lib/modules/tld-common/services/tld-translate-config.service.mjs +226 -0
  132. package/esm2020/lib/modules/tld-common/services/wtw-link-params.service.mjs +33 -0
  133. package/esm2020/lib/modules/tld-common/tld-common.module.mjs +97 -0
  134. package/esm2020/lib/modules/tld-document/download-button/download-button.component.mjs +78 -0
  135. package/esm2020/lib/modules/tld-document/image-conversion-help/image-conversion-help.component.mjs +32 -0
  136. package/esm2020/lib/modules/tld-document/index.mjs +8 -0
  137. package/esm2020/lib/modules/tld-document/models/file-conversion-types.model.mjs +6 -0
  138. package/esm2020/lib/modules/tld-document/models/index.mjs +6 -0
  139. package/esm2020/lib/modules/tld-document/models/start-translation.model.mjs +2 -0
  140. package/esm2020/lib/modules/tld-document/models/translate-file.model.mjs +2 -0
  141. package/esm2020/lib/modules/tld-document/models/translation-statuss.model.mjs +15 -0
  142. package/esm2020/lib/modules/tld-document/models/upload-response.model.mjs +2 -0
  143. package/esm2020/lib/modules/tld-document/pdf-conversion-help/pdf-conversion-help.component.mjs +32 -0
  144. package/esm2020/lib/modules/tld-document/services/api/file-api.service.mjs +166 -0
  145. package/esm2020/lib/modules/tld-document/services/api/models/file-preview-v1-progress-response.model.mjs +2 -0
  146. package/esm2020/lib/modules/tld-document/services/api/models/file-preview-v1-response-body.model.mjs +2 -0
  147. package/esm2020/lib/modules/tld-document/services/api/models/get-file-translation-status-v1-response.model.mjs +2 -0
  148. package/esm2020/lib/modules/tld-document/services/api-v2/file-api-v2.service.mjs +87 -0
  149. package/esm2020/lib/modules/tld-document/services/api-v2/models/file-category-v2.model.mjs +6 -0
  150. package/esm2020/lib/modules/tld-document/services/api-v2/models/file-translation-status-v2-response.model.mjs +2 -0
  151. package/esm2020/lib/modules/tld-document/services/index.mjs +3 -0
  152. package/esm2020/lib/modules/tld-document/services/tld-translate-file.service.mjs +398 -0
  153. package/esm2020/lib/modules/tld-document/tld-document.module.mjs +70 -0
  154. package/esm2020/lib/modules/tld-document/tld-file-translate-base.component.mjs +76 -0
  155. package/esm2020/lib/modules/tld-document/tld-translate-file-multiple/tld-translate-file-multiple.component.mjs +94 -0
  156. package/esm2020/lib/modules/tld-term/index.mjs +7 -0
  157. package/esm2020/lib/modules/tld-term/models/converted-collection-tooltip-key.model.mjs +7 -0
  158. package/esm2020/lib/modules/tld-term/models/converted-collection-type.model.mjs +9 -0
  159. package/esm2020/lib/modules/tld-term/models/index.mjs +7 -0
  160. package/esm2020/lib/modules/tld-term/models/mt-api/tld-mt-term-collection.model.mjs +2 -0
  161. package/esm2020/lib/modules/tld-term/models/mt-collection-status.model.mjs +7 -0
  162. package/esm2020/lib/modules/tld-term/models/term-api/tld-term-collection-languages.model.mjs +2 -0
  163. package/esm2020/lib/modules/tld-term/models/term-api/tld-term-collection.model.mjs +2 -0
  164. package/esm2020/lib/modules/tld-term/models/tld-converted-collection.model.mjs +114 -0
  165. package/esm2020/lib/modules/tld-term/services/index.mjs +4 -0
  166. package/esm2020/lib/modules/tld-term/services/mt-collections-api.service.mjs +33 -0
  167. package/esm2020/lib/modules/tld-term/services/term-api.service.mjs +34 -0
  168. package/esm2020/lib/modules/tld-term/services/tld-term-collections.service.mjs +253 -0
  169. package/esm2020/lib/modules/tld-term/tld-term-collection/tld-term-collection.component.mjs +19 -0
  170. package/esm2020/lib/modules/tld-term/tld-term-collection-list/tld-term-collection-list.component.mjs +99 -0
  171. package/esm2020/lib/modules/tld-term/tld-term-create-collection-dialog/tld-term-create-collection-dialog.component.mjs +47 -0
  172. package/esm2020/lib/modules/tld-term/tld-term-menu/tld-term-menu.component.mjs +36 -0
  173. package/esm2020/lib/modules/tld-term/tld-term-promotion/tld-term-promotion.component.mjs +35 -0
  174. package/esm2020/lib/modules/tld-term/tld-term.module.mjs +67 -0
  175. package/esm2020/lib/modules/tld-text/components/highlight-tree/highlight-tree.component.mjs +109 -0
  176. package/esm2020/lib/modules/tld-text/components/progress-indicator/progress-indicator.component.mjs +35 -0
  177. package/esm2020/lib/modules/tld-text/components/textarea-with-background/textarea-with-background.component.mjs +153 -0
  178. package/esm2020/lib/modules/tld-text/components/tld-dictionary/tld-dictionary.component.mjs +56 -0
  179. package/esm2020/lib/modules/tld-text/components/tld-translate-source/tld-translate-source.component.mjs +60 -0
  180. package/esm2020/lib/modules/tld-text/components/tld-translate-suggest/dialog/suggest-translation.model.mjs +2 -0
  181. package/esm2020/lib/modules/tld-text/components/tld-translate-suggest/dialog/tld-translate-suggest-dialog.component.mjs +92 -0
  182. package/esm2020/lib/modules/tld-text/components/tld-translate-suggest/tld-translate-suggest.component.mjs +60 -0
  183. package/esm2020/lib/modules/tld-text/components/tld-translate-text/tld-translate-text.component.mjs +272 -0
  184. package/esm2020/lib/modules/tld-text/index.mjs +9 -0
  185. package/esm2020/lib/modules/tld-text/models/check-grammar-response-v2.model.mjs +2 -0
  186. package/esm2020/lib/modules/tld-text/models/dictionary.model.mjs +2 -0
  187. package/esm2020/lib/modules/tld-text/models/get-sentence-v1-response.model.mjs +2 -0
  188. package/esm2020/lib/modules/tld-text/models/grammar-check-base.model.mjs +2 -0
  189. package/esm2020/lib/modules/tld-text/models/grammar-check-meta.model.mjs +2 -0
  190. package/esm2020/lib/modules/tld-text/models/grammar-check-replacement.model.mjs +2 -0
  191. package/esm2020/lib/modules/tld-text/models/grammar-correction-v2.model.mjs +2 -0
  192. package/esm2020/lib/modules/tld-text/models/highlight-params.model.mjs +11 -0
  193. package/esm2020/lib/modules/tld-text/models/highlight-tree-type.model.mjs +12 -0
  194. package/esm2020/lib/modules/tld-text/models/highlight-tree.model.mjs +2 -0
  195. package/esm2020/lib/modules/tld-text/models/highlight.model.mjs +2 -0
  196. package/esm2020/lib/modules/tld-text/models/index.mjs +11 -0
  197. package/esm2020/lib/modules/tld-text/models/retranslate-params.model.mjs +2 -0
  198. package/esm2020/lib/modules/tld-text/models/source-text-changed.model.mjs +2 -0
  199. package/esm2020/lib/modules/tld-text/models/translate-paragraph-params.model.mjs +2 -0
  200. package/esm2020/lib/modules/tld-text/models/translate-paragraph-response-v1.model.mjs +2 -0
  201. package/esm2020/lib/modules/tld-text/models/translate-paragraph-response-v2.model.mjs +2 -0
  202. package/esm2020/lib/modules/tld-text/models/translate-paragraph-response.model.mjs +2 -0
  203. package/esm2020/lib/modules/tld-text/models/untranslated-paragraph.model.mjs +2 -0
  204. package/esm2020/lib/modules/tld-text/services/api/tld-translate-text-api.service.mjs +187 -0
  205. package/esm2020/lib/modules/tld-text/services/api-v2/tld-translate-text-api-v2.service.mjs +110 -0
  206. package/esm2020/lib/modules/tld-text/services/index.mjs +2 -0
  207. package/esm2020/lib/modules/tld-text/services/tld-translate-text.service.mjs +380 -0
  208. package/esm2020/lib/modules/tld-text/tld-text.module.mjs +95 -0
  209. package/esm2020/lib/modules/tld-text/utils/index.mjs +2 -0
  210. package/esm2020/lib/modules/tld-text/utils/models/existing-paragraph-info.model.mjs +2 -0
  211. package/esm2020/lib/modules/tld-text/utils/models/index.mjs +2 -0
  212. package/esm2020/lib/modules/tld-text/utils/tld-translate-text.utils.mjs +56 -0
  213. package/esm2020/lib/modules/tld-tooltip/index.mjs +5 -0
  214. package/esm2020/lib/modules/tld-tooltip/models/active-data.model.mjs +2 -0
  215. package/esm2020/lib/modules/tld-tooltip/models/domain.model.mjs +2 -0
  216. package/esm2020/lib/modules/tld-tooltip/models/index.mjs +5 -0
  217. package/esm2020/lib/modules/tld-tooltip/models/switcher-options.model.mjs +2 -0
  218. package/esm2020/lib/modules/tld-tooltip/models/system-metadata-keys.model.mjs +7 -0
  219. package/esm2020/lib/modules/tld-tooltip/models/vendor.model.mjs +2 -0
  220. package/esm2020/lib/modules/tld-tooltip/services/api/models/description.model.mjs +2 -0
  221. package/esm2020/lib/modules/tld-tooltip/services/api/models/language.model.mjs +2 -0
  222. package/esm2020/lib/modules/tld-tooltip/services/api/models/metadata.model.mjs +2 -0
  223. package/esm2020/lib/modules/tld-tooltip/services/api/models/name.model.mjs +2 -0
  224. package/esm2020/lib/modules/tld-tooltip/services/api/models/system.model.mjs +2 -0
  225. package/esm2020/lib/modules/tld-tooltip/services/api/tld-system-api.service.mjs +57 -0
  226. package/esm2020/lib/modules/tld-tooltip/services/api-v2/models/error.model.mjs +2 -0
  227. package/esm2020/lib/modules/tld-tooltip/services/api-v2/models/get-langauge-direction.mjs +2 -0
  228. package/esm2020/lib/modules/tld-tooltip/services/api-v2/models/language-direction.model.mjs +2 -0
  229. package/esm2020/lib/modules/tld-tooltip/services/api-v2/tld-system-api-v2.service.mjs +60 -0
  230. package/esm2020/lib/modules/tld-tooltip/services/index.mjs +2 -0
  231. package/esm2020/lib/modules/tld-tooltip/services/tld-system.service.mjs +302 -0
  232. package/esm2020/lib/modules/tld-tooltip/tld-domain-list/tld-domain-list.component.mjs +69 -0
  233. package/esm2020/lib/modules/tld-tooltip/tld-tooltip.module.mjs +95 -0
  234. package/esm2020/lib/modules/tld-tooltip/tld-translate-switcher/tld-translate-switcher.component.mjs +188 -0
  235. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/dropdown/translation-system-picker-dropdown.component.mjs +179 -0
  236. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/dropdown-body/translation-system-picker-dropdown-body.component.mjs +209 -0
  237. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/filter/translation-system-picker-filter.component.mjs +48 -0
  238. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/index.mjs +8 -0
  239. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/language-list/translation-system-picker-language-list.component.mjs +31 -0
  240. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/dropdown-body-config.model.mjs +2 -0
  241. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/grouped-language-item.mjs +3 -0
  242. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/index.mjs +6 -0
  243. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/opened-menu.mjs +7 -0
  244. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/translated-language.model.mjs +2 -0
  245. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/translated-system.model.mjs +2 -0
  246. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/services/index.mjs +2 -0
  247. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/services/translation-system-picker.service.mjs +58 -0
  248. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/system-list/translation-system-picker-system-list.component.mjs +31 -0
  249. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/system-picker-button/translation-system-picker-button.component.mjs +27 -0
  250. package/esm2020/lib/modules/tld-tooltip/translation-system-picker/translation-system-picker.component.mjs +79 -0
  251. package/esm2020/lib/modules/tld-translate-file/tld-translate-file.component.mjs +65 -0
  252. package/esm2020/lib/modules/tld-web/index.mjs +3 -0
  253. package/esm2020/lib/modules/tld-web/tld-translate-web/tld-translate-web.component.mjs +499 -0
  254. package/esm2020/lib/modules/tld-web/tld-translate-web.service.mjs +16 -0
  255. package/esm2020/lib/modules/tld-web/tld-web.module.mjs +52 -0
  256. package/esm2020/lib/tld-translate-body/tld-translate-body.component.mjs +60 -0
  257. package/esm2020/lib/tld-translate.component.mjs +229 -0
  258. package/esm2020/lib/tld-translate.module.mjs +118 -0
  259. package/esm2020/public-api.mjs +43 -0
  260. package/esm2020/tilde-nlp-ngx-translate.mjs +5 -0
  261. package/fesm2015/tilde-nlp-ngx-translate.mjs +11019 -0
  262. package/fesm2015/tilde-nlp-ngx-translate.mjs.map +1 -0
  263. package/fesm2020/tilde-nlp-ngx-translate.mjs +10912 -0
  264. package/fesm2020/tilde-nlp-ngx-translate.mjs.map +1 -0
  265. package/index.d.ts +5 -0
  266. package/lib/components/shared/extension-dialog/components/index.d.ts +1 -0
  267. package/lib/components/shared/extension-dialog/components/open-extension-dialog/open-extension-dialog.component.d.ts +12 -0
  268. package/lib/components/shared/extension-dialog/extension-dialog.component.d.ts +15 -0
  269. package/lib/components/shared/extension-dialog/extension-dialog.module.d.ts +15 -0
  270. package/lib/components/shared/extension-dialog/index.d.ts +5 -0
  271. package/lib/components/shared/extension-dialog/models/enums/file-categories.enum.d.ts +7 -0
  272. package/lib/components/shared/extension-dialog/models/enums/file-extensions.enum.d.ts +33 -0
  273. package/lib/components/shared/extension-dialog/models/enums/file-type-icons.enum.d.ts +11 -0
  274. package/lib/components/shared/extension-dialog/models/enums/file-types.enum.d.ts +11 -0
  275. package/lib/components/shared/extension-dialog/models/enums/index.d.ts +4 -0
  276. package/lib/components/shared/extension-dialog/models/index.d.ts +2 -0
  277. package/lib/components/shared/extension-dialog/models/interfaces/config.d.ts +18 -0
  278. package/lib/components/shared/extension-dialog/models/interfaces/dialog-data.model.d.ts +3 -0
  279. package/lib/components/shared/extension-dialog/models/interfaces/index.d.ts +2 -0
  280. package/lib/components/shared/extension-dialog/services/extension-dialog.service.d.ts +9 -0
  281. package/lib/components/shared/extension-dialog/services/index.d.ts +1 -0
  282. package/lib/components/shared/text-to-speech/index.d.ts +2 -0
  283. package/lib/components/shared/text-to-speech/models/text-to-speech-settings.model.d.ts +23 -0
  284. package/lib/components/shared/text-to-speech/text-to-speech.component.d.ts +18 -0
  285. package/lib/components/shared/text-to-speech/text-to-speech.module.d.ts +11 -0
  286. package/lib/components/shared/vendor-disclaimer/vendor-disclaimer.component.d.ts +17 -0
  287. package/lib/components/shared/vendor-disclaimer/vendor-disclaimer.module.d.ts +9 -0
  288. package/lib/factories/file-api-service.factory.d.ts +7 -0
  289. package/lib/factories/system-service.factory.d.ts +6 -0
  290. package/lib/factories/text-api-service.factory.d.ts +6 -0
  291. package/lib/i18n/available-languages.d.ts +2 -0
  292. package/lib/i18n/de.d.ts +377 -0
  293. package/lib/i18n/en.d.ts +425 -0
  294. package/lib/i18n/et.d.ts +377 -0
  295. package/lib/i18n/fi.d.ts +382 -0
  296. package/lib/i18n/lt.d.ts +377 -0
  297. package/lib/i18n/lv.d.ts +390 -0
  298. package/lib/i18n/models/available-languages.model.d.ts +10 -0
  299. package/lib/i18n/pl.d.ts +377 -0
  300. package/lib/i18n/sv.d.ts +241 -0
  301. package/lib/injection-tokens/file-api-service.token.d.ts +1 -0
  302. package/lib/injection-tokens/index.d.ts +5 -0
  303. package/lib/injection-tokens/system-service.token.d.ts +1 -0
  304. package/lib/injection-tokens/text-api-service.token.d.ts +1 -0
  305. package/lib/injection-tokens/tld-translate-config.token.d.ts +1 -0
  306. package/lib/injection-tokens/translation-api-version.token.d.ts +1 -0
  307. package/lib/modules/material.module.d.ts +27 -0
  308. package/lib/modules/tld-audio/index.d.ts +3 -0
  309. package/lib/modules/tld-audio/models/audio-error-case.model.d.ts +11 -0
  310. package/lib/modules/tld-audio/models/dictate-configurationi.model.d.ts +6 -0
  311. package/lib/modules/tld-audio/models/index.d.ts +2 -0
  312. package/lib/modules/tld-audio/models/transcription-update.model.d.ts +4 -0
  313. package/lib/modules/tld-audio/services/audio-record.service.d.ts +35 -0
  314. package/lib/modules/tld-audio/services/index.d.ts +3 -0
  315. package/lib/modules/tld-audio/services/tld-voice-input-api.service.d.ts +16 -0
  316. package/lib/modules/tld-audio/services/tld-voice-input.service.d.ts +20 -0
  317. package/lib/modules/tld-audio/tld-audio.module.d.ts +14 -0
  318. package/lib/modules/tld-audio/tld-dictate/tld-dictate.component.d.ts +43 -0
  319. package/lib/modules/tld-audio/tld-record/tld-record.component.d.ts +32 -0
  320. package/lib/modules/tld-common/animations/pulse.animation.d.ts +1 -0
  321. package/lib/modules/tld-common/components/index.d.ts +9 -0
  322. package/lib/modules/tld-common/components/open-close-button/open-close-button.component.d.ts +15 -0
  323. package/lib/modules/tld-common/components/source-and-target-wrapper/source-and-target-wrapper.component.d.ts +19 -0
  324. package/lib/modules/tld-common/components/tld-file-upload/tld-file-upload.component.d.ts +28 -0
  325. package/lib/modules/tld-common/components/tld-lang-list/tld-lang-list.component.d.ts +52 -0
  326. package/lib/modules/tld-common/components/tld-list-menu/tld-list-menu.component.d.ts +24 -0
  327. package/lib/modules/tld-common/components/tld-loader/tld-loader.component.d.ts +5 -0
  328. package/lib/modules/tld-common/components/tld-message/tld-message.component.d.ts +18 -0
  329. package/lib/modules/tld-common/components/tld-translate-achievement/tld-translate-achievement.component.d.ts +6 -0
  330. package/lib/modules/tld-common/components/translate-button/tld-translate-button.service.d.ts +12 -0
  331. package/lib/modules/tld-common/components/translate-button/translate-button.component.d.ts +22 -0
  332. package/lib/modules/tld-common/directives/drag-and-drop.directive.d.ts +14 -0
  333. package/lib/modules/tld-common/directives/index.d.ts +1 -0
  334. package/lib/modules/tld-common/index.d.ts +1 -0
  335. package/lib/modules/tld-common/models/auth-options.model.d.ts +4 -0
  336. package/lib/modules/tld-common/models/common.d.ts +28 -0
  337. package/lib/modules/tld-common/models/configs/tld-audio-config.model.d.ts +22 -0
  338. package/lib/modules/tld-common/models/configs/tld-term-config.model.d.ts +27 -0
  339. package/lib/modules/tld-common/models/configs/tld-text-to-speech-config.model.d.ts +11 -0
  340. package/lib/modules/tld-common/models/configs/tld-translate-api-v2-config.model.d.ts +11 -0
  341. package/lib/modules/tld-common/models/configs/tld-translate-config.model.d.ts +18 -0
  342. package/lib/modules/tld-common/models/configs/tld-translate-core-config.model.d.ts +42 -0
  343. package/lib/modules/tld-common/models/configs/tld-translate-file-config.model.d.ts +25 -0
  344. package/lib/modules/tld-common/models/configs/tld-translate-text-config.model.d.ts +39 -0
  345. package/lib/modules/tld-common/models/configs/tld-translate-web-config.model.d.ts +10 -0
  346. package/lib/modules/tld-common/models/core/index.d.ts +2 -0
  347. package/lib/modules/tld-common/models/core/language-menu-version.enum.d.ts +4 -0
  348. package/lib/modules/tld-common/models/core/translation-api-version.model.d.ts +4 -0
  349. package/lib/modules/tld-common/models/errors/error-codes.enum.d.ts +21 -0
  350. package/lib/modules/tld-common/models/errors/error-codes.type.d.ts +4 -0
  351. package/lib/modules/tld-common/models/errors/error.model.d.ts +3 -0
  352. package/lib/modules/tld-common/models/file-upload.model.d.ts +13 -0
  353. package/lib/modules/tld-common/models/index.d.ts +21 -0
  354. package/lib/modules/tld-common/models/lang-list-item.model.d.ts +6 -0
  355. package/lib/modules/tld-common/models/language-with-translation.model.d.ts +6 -0
  356. package/lib/modules/tld-common/models/message.model.d.ts +11 -0
  357. package/lib/modules/tld-common/models/selected-language.model.d.ts +4 -0
  358. package/lib/modules/tld-common/models/services/file-api/download-file-params.model.d.ts +5 -0
  359. package/lib/modules/tld-common/models/services/file-api/file-api-service.model.d.ts +17 -0
  360. package/lib/modules/tld-common/models/services/file-api/file-meta.model.d.ts +8 -0
  361. package/lib/modules/tld-common/models/services/file-api/file-translation-substatus.model.d.ts +7 -0
  362. package/lib/modules/tld-common/models/services/file-api/get-file-status-params.model.d.ts +6 -0
  363. package/lib/modules/tld-common/models/services/file-api/get-file-translation-status-response.model.d.ts +13 -0
  364. package/lib/modules/tld-common/models/services/file-api/remove-file-params.model.d.ts +4 -0
  365. package/lib/modules/tld-common/models/services/file-api/source-file-preview-response.model.d.ts +8 -0
  366. package/lib/modules/tld-common/models/services/file-api/start-file-translation-params.model.d.ts +6 -0
  367. package/lib/modules/tld-common/models/services/file-api/translated-document-preview-params.model.d.ts +4 -0
  368. package/lib/modules/tld-common/models/services/index.d.ts +18 -0
  369. package/lib/modules/tld-common/models/services/system/system.model.d.ts +17 -0
  370. package/lib/modules/tld-common/models/services/system/tld-system-api-service.model.d.ts +5 -0
  371. package/lib/modules/tld-common/models/services/text-api/check-grammar-response.model.d.ts +6 -0
  372. package/lib/modules/tld-common/models/services/text-api/tld-translate-text-api-service.model.d.ts +26 -0
  373. package/lib/modules/tld-common/models/services/text-api/translate-paragraph-request-params.model.d.ts +6 -0
  374. package/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-job-state.model.d.ts +5 -0
  375. package/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-job.model.d.ts +21 -0
  376. package/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-start-job-request-params.model.d.ts +7 -0
  377. package/lib/modules/tld-common/pipes/index.d.ts +1 -0
  378. package/lib/modules/tld-common/pipes/translate-domain.pipe.d.ts +13 -0
  379. package/lib/modules/tld-common/services/icon-service/icon.service.d.ts +12 -0
  380. package/lib/modules/tld-common/services/icon-service/icons/file-types/excel.icon.d.ts +1 -0
  381. package/lib/modules/tld-common/services/icon-service/icons/file-types/index.d.ts +9 -0
  382. package/lib/modules/tld-common/services/icon-service/icons/file-types/interchange.icon.d.ts +1 -0
  383. package/lib/modules/tld-common/services/icon-service/icons/file-types/office-other.icon.d.ts +1 -0
  384. package/lib/modules/tld-common/services/icon-service/icons/file-types/other.icon.d.ts +1 -0
  385. package/lib/modules/tld-common/services/icon-service/icons/file-types/pdf.icon.d.ts +1 -0
  386. package/lib/modules/tld-common/services/icon-service/icons/file-types/powerpoint.icon.d.ts +1 -0
  387. package/lib/modules/tld-common/services/icon-service/icons/file-types/scanned.icon.d.ts +1 -0
  388. package/lib/modules/tld-common/services/icon-service/icons/file-types/web.icon.d.ts +1 -0
  389. package/lib/modules/tld-common/services/icon-service/icons/file-types/word.icon.d.ts +1 -0
  390. package/lib/modules/tld-common/services/icon-service/icons.d.ts +3 -0
  391. package/lib/modules/tld-common/services/index.d.ts +4 -0
  392. package/lib/modules/tld-common/services/scroll/tld-scroll.service.d.ts +12 -0
  393. package/lib/modules/tld-common/services/tld-alert.service.d.ts +33 -0
  394. package/lib/modules/tld-common/services/tld-highlight.service.d.ts +14 -0
  395. package/lib/modules/tld-common/services/tld-translate-config.service.d.ts +39 -0
  396. package/lib/modules/tld-common/services/wtw-link-params.service.d.ts +13 -0
  397. package/lib/modules/tld-common/tld-common.module.d.ts +23 -0
  398. package/lib/modules/tld-document/download-button/download-button.component.d.ts +30 -0
  399. package/lib/modules/tld-document/image-conversion-help/image-conversion-help.component.d.ts +21 -0
  400. package/lib/modules/tld-document/index.d.ts +7 -0
  401. package/lib/modules/tld-document/models/file-conversion-types.model.d.ts +4 -0
  402. package/lib/modules/tld-document/models/index.d.ts +5 -0
  403. package/lib/modules/tld-document/models/start-translation.model.d.ts +16 -0
  404. package/lib/modules/tld-document/models/translate-file.model.d.ts +33 -0
  405. package/lib/modules/tld-document/models/translation-statuss.model.d.ts +12 -0
  406. package/lib/modules/tld-document/models/upload-response.model.d.ts +8 -0
  407. package/lib/modules/tld-document/pdf-conversion-help/pdf-conversion-help.component.d.ts +21 -0
  408. package/lib/modules/tld-document/services/api/file-api.service.d.ts +26 -0
  409. package/lib/modules/tld-document/services/api/models/file-preview-v1-progress-response.model.d.ts +6 -0
  410. package/lib/modules/tld-document/services/api/models/file-preview-v1-response-body.model.d.ts +8 -0
  411. package/lib/modules/tld-document/services/api/models/get-file-translation-status-v1-response.model.d.ts +11 -0
  412. package/lib/modules/tld-document/services/api-v2/file-api-v2.service.d.ts +22 -0
  413. package/lib/modules/tld-document/services/api-v2/models/file-category-v2.model.d.ts +4 -0
  414. package/lib/modules/tld-document/services/api-v2/models/file-translation-status-v2-response.model.d.ts +20 -0
  415. package/lib/modules/tld-document/services/index.d.ts +2 -0
  416. package/lib/modules/tld-document/services/tld-translate-file.service.d.ts +60 -0
  417. package/lib/modules/tld-document/tld-document.module.d.ts +19 -0
  418. package/lib/modules/tld-document/tld-file-translate-base.component.d.ts +29 -0
  419. package/lib/modules/tld-document/tld-translate-file-multiple/tld-translate-file-multiple.component.d.ts +40 -0
  420. package/lib/modules/tld-term/index.d.ts +6 -0
  421. package/lib/modules/tld-term/models/converted-collection-tooltip-key.model.d.ts +5 -0
  422. package/lib/modules/tld-term/models/converted-collection-type.model.d.ts +7 -0
  423. package/lib/modules/tld-term/models/index.d.ts +6 -0
  424. package/lib/modules/tld-term/models/mt-api/tld-mt-term-collection.model.d.ts +15 -0
  425. package/lib/modules/tld-term/models/mt-collection-status.model.d.ts +5 -0
  426. package/lib/modules/tld-term/models/term-api/tld-term-collection-languages.model.d.ts +11 -0
  427. package/lib/modules/tld-term/models/term-api/tld-term-collection.model.d.ts +46 -0
  428. package/lib/modules/tld-term/models/tld-converted-collection.model.d.ts +43 -0
  429. package/lib/modules/tld-term/services/index.d.ts +3 -0
  430. package/lib/modules/tld-term/services/mt-collections-api.service.d.ts +13 -0
  431. package/lib/modules/tld-term/services/term-api.service.d.ts +15 -0
  432. package/lib/modules/tld-term/services/tld-term-collections.service.d.ts +57 -0
  433. package/lib/modules/tld-term/tld-term-collection/tld-term-collection.component.d.ts +9 -0
  434. package/lib/modules/tld-term/tld-term-collection-list/tld-term-collection-list.component.d.ts +39 -0
  435. package/lib/modules/tld-term/tld-term-create-collection-dialog/tld-term-create-collection-dialog.component.d.ts +20 -0
  436. package/lib/modules/tld-term/tld-term-menu/tld-term-menu.component.d.ts +13 -0
  437. package/lib/modules/tld-term/tld-term-promotion/tld-term-promotion.component.d.ts +17 -0
  438. package/lib/modules/tld-term/tld-term.module.d.ts +22 -0
  439. package/lib/modules/tld-text/components/highlight-tree/highlight-tree.component.d.ts +27 -0
  440. package/lib/modules/tld-text/components/progress-indicator/progress-indicator.component.d.ts +20 -0
  441. package/lib/modules/tld-text/components/textarea-with-background/textarea-with-background.component.d.ts +40 -0
  442. package/lib/modules/tld-text/components/tld-dictionary/tld-dictionary.component.d.ts +24 -0
  443. package/lib/modules/tld-text/components/tld-translate-source/tld-translate-source.component.d.ts +36 -0
  444. package/lib/modules/tld-text/components/tld-translate-suggest/dialog/suggest-translation.model.d.ts +11 -0
  445. package/lib/modules/tld-text/components/tld-translate-suggest/dialog/tld-translate-suggest-dialog.component.d.ts +33 -0
  446. package/lib/modules/tld-text/components/tld-translate-suggest/tld-translate-suggest.component.d.ts +24 -0
  447. package/lib/modules/tld-text/components/tld-translate-text/tld-translate-text.component.d.ts +104 -0
  448. package/lib/modules/tld-text/index.d.ts +8 -0
  449. package/lib/modules/tld-text/models/check-grammar-response-v2.model.d.ts +4 -0
  450. package/lib/modules/tld-text/models/dictionary.model.d.ts +28 -0
  451. package/lib/modules/tld-text/models/get-sentence-v1-response.model.d.ts +5 -0
  452. package/lib/modules/tld-text/models/grammar-check-base.model.d.ts +6 -0
  453. package/lib/modules/tld-text/models/grammar-check-meta.model.d.ts +5 -0
  454. package/lib/modules/tld-text/models/grammar-check-replacement.model.d.ts +5 -0
  455. package/lib/modules/tld-text/models/grammar-correction-v2.model.d.ts +9 -0
  456. package/lib/modules/tld-text/models/highlight-params.model.d.ts +10 -0
  457. package/lib/modules/tld-text/models/highlight-tree-type.model.d.ts +10 -0
  458. package/lib/modules/tld-text/models/highlight-tree.model.d.ts +22 -0
  459. package/lib/modules/tld-text/models/highlight.model.d.ts +10 -0
  460. package/lib/modules/tld-text/models/index.d.ts +10 -0
  461. package/lib/modules/tld-text/models/retranslate-params.model.d.ts +4 -0
  462. package/lib/modules/tld-text/models/source-text-changed.model.d.ts +6 -0
  463. package/lib/modules/tld-text/models/translate-paragraph-params.model.d.ts +6 -0
  464. package/lib/modules/tld-text/models/translate-paragraph-response-v1.model.d.ts +15 -0
  465. package/lib/modules/tld-text/models/translate-paragraph-response-v2.model.d.ts +9 -0
  466. package/lib/modules/tld-text/models/translate-paragraph-response.model.d.ts +7 -0
  467. package/lib/modules/tld-text/models/untranslated-paragraph.model.d.ts +4 -0
  468. package/lib/modules/tld-text/services/api/tld-translate-text-api.service.d.ts +24 -0
  469. package/lib/modules/tld-text/services/api-v2/tld-translate-text-api-v2.service.d.ts +17 -0
  470. package/lib/modules/tld-text/services/index.d.ts +1 -0
  471. package/lib/modules/tld-text/services/tld-translate-text.service.d.ts +104 -0
  472. package/lib/modules/tld-text/tld-text.module.d.ts +27 -0
  473. package/lib/modules/tld-text/utils/index.d.ts +1 -0
  474. package/lib/modules/tld-text/utils/models/existing-paragraph-info.model.d.ts +5 -0
  475. package/lib/modules/tld-text/utils/models/index.d.ts +1 -0
  476. package/lib/modules/tld-text/utils/tld-translate-text.utils.d.ts +9 -0
  477. package/lib/modules/tld-tooltip/index.d.ts +4 -0
  478. package/lib/modules/tld-tooltip/models/active-data.model.d.ts +24 -0
  479. package/lib/modules/tld-tooltip/models/domain.model.d.ts +8 -0
  480. package/lib/modules/tld-tooltip/models/index.d.ts +4 -0
  481. package/lib/modules/tld-tooltip/models/switcher-options.model.d.ts +14 -0
  482. package/lib/modules/tld-tooltip/models/system-metadata-keys.model.d.ts +5 -0
  483. package/lib/modules/tld-tooltip/models/vendor.model.d.ts +4 -0
  484. package/lib/modules/tld-tooltip/services/api/models/description.model.d.ts +4 -0
  485. package/lib/modules/tld-tooltip/services/api/models/language.model.d.ts +5 -0
  486. package/lib/modules/tld-tooltip/services/api/models/metadata.model.d.ts +4 -0
  487. package/lib/modules/tld-tooltip/services/api/models/name.model.d.ts +4 -0
  488. package/lib/modules/tld-tooltip/services/api/models/system.model.d.ts +14 -0
  489. package/lib/modules/tld-tooltip/services/api/tld-system-api.service.d.ts +15 -0
  490. package/lib/modules/tld-tooltip/services/api-v2/models/error.model.d.ts +4 -0
  491. package/lib/modules/tld-tooltip/services/api-v2/models/get-langauge-direction.d.ts +6 -0
  492. package/lib/modules/tld-tooltip/services/api-v2/models/language-direction.model.d.ts +7 -0
  493. package/lib/modules/tld-tooltip/services/api-v2/tld-system-api-v2.service.d.ts +15 -0
  494. package/lib/modules/tld-tooltip/services/index.d.ts +1 -0
  495. package/lib/modules/tld-tooltip/services/tld-system.service.d.ts +57 -0
  496. package/lib/modules/tld-tooltip/tld-domain-list/tld-domain-list.component.d.ts +33 -0
  497. package/lib/modules/tld-tooltip/tld-tooltip.module.d.ts +25 -0
  498. package/lib/modules/tld-tooltip/tld-translate-switcher/tld-translate-switcher.component.d.ts +64 -0
  499. package/lib/modules/tld-tooltip/translation-system-picker/dropdown/translation-system-picker-dropdown.component.d.ts +44 -0
  500. package/lib/modules/tld-tooltip/translation-system-picker/dropdown-body/translation-system-picker-dropdown-body.component.d.ts +65 -0
  501. package/lib/modules/tld-tooltip/translation-system-picker/filter/translation-system-picker-filter.component.d.ts +17 -0
  502. package/lib/modules/tld-tooltip/translation-system-picker/index.d.ts +7 -0
  503. package/lib/modules/tld-tooltip/translation-system-picker/language-list/translation-system-picker-language-list.component.d.ts +14 -0
  504. package/lib/modules/tld-tooltip/translation-system-picker/models/dropdown-body-config.model.d.ts +11 -0
  505. package/lib/modules/tld-tooltip/translation-system-picker/models/grouped-language-item.d.ts +8 -0
  506. package/lib/modules/tld-tooltip/translation-system-picker/models/index.d.ts +5 -0
  507. package/lib/modules/tld-tooltip/translation-system-picker/models/opened-menu.d.ts +5 -0
  508. package/lib/modules/tld-tooltip/translation-system-picker/models/translated-language.model.d.ts +4 -0
  509. package/lib/modules/tld-tooltip/translation-system-picker/models/translated-system.model.d.ts +4 -0
  510. package/lib/modules/tld-tooltip/translation-system-picker/services/index.d.ts +1 -0
  511. package/lib/modules/tld-tooltip/translation-system-picker/services/translation-system-picker.service.d.ts +24 -0
  512. package/lib/modules/tld-tooltip/translation-system-picker/system-list/translation-system-picker-system-list.component.d.ts +13 -0
  513. package/lib/modules/tld-tooltip/translation-system-picker/system-picker-button/translation-system-picker-button.component.d.ts +10 -0
  514. package/lib/modules/tld-tooltip/translation-system-picker/translation-system-picker.component.d.ts +34 -0
  515. package/lib/modules/tld-translate-file/tld-translate-file.component.d.ts +37 -0
  516. package/lib/modules/tld-web/index.d.ts +2 -0
  517. package/lib/modules/tld-web/tld-translate-web/tld-translate-web.component.d.ts +85 -0
  518. package/lib/modules/tld-web/tld-translate-web.service.d.ts +7 -0
  519. package/lib/modules/tld-web/tld-web.module.d.ts +14 -0
  520. package/lib/tld-translate-body/tld-translate-body.component.d.ts +23 -0
  521. package/lib/tld-translate.component.d.ts +65 -0
  522. package/lib/tld-translate.module.d.ts +23 -0
  523. package/package.json +40 -0
  524. package/public-api.d.ts +28 -0
  525. package/src/assets/webcomponent/styles.css +1 -0
  526. package/src/assets/webcomponent/tld-translate.js +3 -0
  527. package/src/assets/webtranslate/page-translate-widget.js +4934 -0
  528. package/src/assets/webtranslate/remove.png +0 -0
  529. package/src/assets/webtranslate/tilde_logo.png +0 -0
  530. package/src/assets/webtranslate/translate-website.js +393 -0
  531. package/src/assets/webtranslate/widget.css +139 -0
  532. package/src/styles/colors.scss +15 -0
  533. package/src/styles/fonts.scss +3 -0
  534. package/src/styles/mixin/border-default.scss +10 -0
  535. package/src/styles/mixin/tld-translate-accent-colors.scss +46 -0
  536. package/src/styles/mixin/tld-translate-colors.scss +7 -0
  537. package/src/styles/mixin/tld-translate-placeholders.scss +5 -0
  538. package/src/styles/mixin/tld-translate-primary-colors.scss +5 -0
  539. package/src/styles/styles.scss +377 -0
  540. package/src/styles/translator-borders.scss +28 -0
  541. package/tilde-nlp-ngx-translate-1.0.0.tgz +0 -0
@@ -0,0 +1,499 @@
1
+ import { animate, style, transition, trigger } from '@angular/animations';
2
+ import { Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
3
+ import * as $ from 'jquery';
4
+ import { NotificationMessageType } from '@tilde-nlp/ngx-common';
5
+ import { Subject } from 'rxjs';
6
+ import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
7
+ import { TRANSLATION_API_VERSION_TOKEN } from '../../../injection-tokens';
8
+ import { TldMessageType, TranslationApiVersion } from '../../tld-common/models';
9
+ import { availableLanguages } from './../../../i18n/available-languages';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@ngx-translate/core";
12
+ import * as i2 from "../../tld-common/services";
13
+ import * as i3 from "../../tld-common/components/translate-button/tld-translate-button.service";
14
+ import * as i4 from "@angular/router";
15
+ import * as i5 from "../../tld-tooltip/services/tld-system.service";
16
+ import * as i6 from "../../tld-term/services";
17
+ import * as i7 from "../tld-translate-web.service";
18
+ import * as i8 from "@angular/common";
19
+ import * as i9 from "../../tld-tooltip/tld-translate-switcher/tld-translate-switcher.component";
20
+ import * as i10 from "../../tld-common/components/translate-button/translate-button.component";
21
+ import * as i11 from "@angular/material/button";
22
+ import * as i12 from "@angular/material/icon";
23
+ import * as i13 from "@angular/material/progress-bar";
24
+ import * as i14 from "@angular/flex-layout/flex";
25
+ import * as i15 from "@angular/flex-layout/extended";
26
+ import * as i16 from "@angular/forms";
27
+ import * as i17 from "@tilde-nlp/ngx-common";
28
+ import * as i18 from "../../tld-common/models";
29
+ window.$ = window.jQuery = $;
30
+ export class TldTranslateWebsiteComponent {
31
+ constructor(translate, configService, translateButtonService, alerts, router, activatedRoute, tldSystem, collectionService, tldTranslateWebService, iconService, apiVersion) {
32
+ this.translate = translate;
33
+ this.configService = configService;
34
+ this.translateButtonService = translateButtonService;
35
+ this.alerts = alerts;
36
+ this.router = router;
37
+ this.activatedRoute = activatedRoute;
38
+ this.tldSystem = tldSystem;
39
+ this.collectionService = collectionService;
40
+ this.tldTranslateWebService = tldTranslateWebService;
41
+ this.apiVersion = apiVersion;
42
+ this.product = '';
43
+ this.company = '';
44
+ this.urlToTranslate = ''; // translateWeb_Url
45
+ this.showCancel = false;
46
+ this.showRestore = false;
47
+ this.showTranslateBtn = true;
48
+ this.translating = false;
49
+ this.disableButton = false; // actionButtonDisabled
50
+ this.onError = new EventEmitter();
51
+ this.messages = [];
52
+ //Progress bar
53
+ this.mode = 'determinate';
54
+ this.progressValue = 0;
55
+ this.showProgress = false;
56
+ this.noSystemsError = { text: 'TLD_TRANSLATE.ERROR_NO_SYSTEMS_LOADED', type: TldMessageType.ERROR };
57
+ this.useParentWidth = true;
58
+ this.destroy$ = new Subject();
59
+ iconService.registerIcons();
60
+ }
61
+ get showNoSystemsError() {
62
+ return this.tldSystem.noSystemsError;
63
+ }
64
+ get actionButtonDisabled() { return this.disableButton; }
65
+ get hideLangMenuLabels() {
66
+ return this.configService?.coreConfig.hideLangMenuLabels;
67
+ }
68
+ get maxDisplayedLanguages() {
69
+ return this.configService.coreConfig.maxDisplayedLanguages;
70
+ }
71
+ get isCollectionsActivated() {
72
+ return this.configService?.termConfig?.isCollectionsActivated;
73
+ }
74
+ get showDomainsWithLanguageName() {
75
+ return this.configService.coreConfig.showDomainsWithLanguageName;
76
+ }
77
+ get sandbox() { return this.configService.webtranslateConfig.sandbox; }
78
+ changeAuth(isAuth) {
79
+ this.configService.coreConfig.isAuth = isAuth;
80
+ this.initializeWidget();
81
+ }
82
+ initializeWidget() {
83
+ this.tldSystem.init(this.tldSystem.getLastUsedSystem() ?? this.configService.coreConfig.defaultSystemId);
84
+ }
85
+ ngOnInit() {
86
+ if (this.configService.coreConfig.debug) {
87
+ for (const key in availableLanguages) {
88
+ this.translate.setTranslation(key, availableLanguages[key], true);
89
+ }
90
+ this.configService.coreConfig.isAuth = true;
91
+ this.translate.use("en");
92
+ }
93
+ this.initFromConfig();
94
+ this.initializeWidget();
95
+ this.tldSystem.getActiveData().pipe(distinctUntilChanged(), takeUntil(this.destroy$))
96
+ .subscribe((val) => {
97
+ this.activeSystemObj = val;
98
+ if (!val) {
99
+ return;
100
+ }
101
+ this.switcherOptions = {
102
+ domains: val.domains,
103
+ source: { code: val.sourceLang.lang, systemId: val.systemId },
104
+ sourceLanguageList: val.sourceLangList,
105
+ systemId: val.systemId,
106
+ swapActive: val.swapLangActive,
107
+ target: { code: val.targetLang.lang, systemId: val.systemId },
108
+ targetLanguageList: val.targetLangList,
109
+ vendors: val.vendors
110
+ };
111
+ });
112
+ this.translateButtonService.getActionClick().pipe(takeUntil(this.destroy$))
113
+ .subscribe(() => {
114
+ this.translateButtonClick();
115
+ });
116
+ this.alerts.getMessages().pipe(takeUntil(this.destroy$))
117
+ .subscribe((message) => {
118
+ if (message.type === NotificationMessageType.ERROR) {
119
+ this.onError.emit(message.error);
120
+ }
121
+ // pushing only "one of" message in array, so screen is not spammed with messages
122
+ const existingMessage = this.messages.find(msg => msg.body === message.body && msg.type === message.type && msg.title === message.title);
123
+ if (!existingMessage) {
124
+ this.messages.push(message);
125
+ }
126
+ });
127
+ this.translate.get('APP_NAME').pipe(takeUntil(this.destroy$))
128
+ .subscribe((text) => {
129
+ this.configService.coreConfig.appName = text;
130
+ });
131
+ window.onmessage = this.receiveMessage.bind(this);
132
+ }
133
+ ngAfterViewInit() {
134
+ if (!this.tldTranslateWebService.wtScriptsAdded) {
135
+ this.addScript('./assets/webtranslate/translate-website.js');
136
+ this.addConfigurationScrip();
137
+ this.addScript('./assets/webtranslate/page-translate-widget.js');
138
+ this.tldTranslateWebService.wtScriptsAdded = true;
139
+ }
140
+ }
141
+ ngOnDestroy() {
142
+ window.onmessage = undefined;
143
+ this.destroy$.next(null);
144
+ this.destroy$.complete();
145
+ }
146
+ receiveMessage(event) {
147
+ // TODO add correct origin
148
+ // if (event.origin !== "")
149
+ // return;
150
+ if (this.debug) {
151
+ // eslint-disable-next-line no-console
152
+ console.info('Message received from iframe:' + JSON.stringify(event.data));
153
+ }
154
+ if (event.data && event.data.message) {
155
+ switch (event.data.message) {
156
+ case 'ready':
157
+ this.tldSystem.sysList.pipe(takeUntil(this.destroy$))
158
+ .subscribe(data => {
159
+ let systemListToIframe = [];
160
+ data.forEach((sys, index) => {
161
+ systemListToIframe.push({
162
+ id: sys.id,
163
+ sourceLanguage: sys.sourceLanguage,
164
+ targetLanguage: sys.targetLanguage,
165
+ name: sys.title ?? sys.id,
166
+ order: index,
167
+ domain: sys.domain
168
+ });
169
+ });
170
+ // push system list to iframe
171
+ this.settingSystemListForFirstTime = true;
172
+ this.sendMessage({ message: 'setSystemList', systemList: systemListToIframe });
173
+ if (this.activatedRoute.snapshot.queryParams.url) {
174
+ this.sendMessage({
175
+ message: 'loadUrl',
176
+ url: this.activatedRoute.snapshot.queryParams.url,
177
+ translateAfterLoad: false
178
+ });
179
+ this.urlToTranslate = this.activatedRoute.snapshot.queryParams.url;
180
+ }
181
+ });
182
+ this.urlInputField.nativeElement.focus();
183
+ break;
184
+ case 'urlLoaded':
185
+ this.showProgress = false;
186
+ // webpage finished loading, set the full url in address box
187
+ this.urlToTranslate = event.data.url;
188
+ this.showTranslateBtn = true;
189
+ this.disableButton = false;
190
+ break;
191
+ case 'startedLoading':
192
+ this.mode = 'indeterminate';
193
+ this.showProgress = true;
194
+ this.showCancel = false;
195
+ this.showRestore = false;
196
+ this.showTranslateBtn = false;
197
+ break;
198
+ case 'stoppedLoading':
199
+ if (!this.translating) {
200
+ this.showCancel = false;
201
+ this.showRestore = false;
202
+ this.showTranslateBtn = true;
203
+ this.disableButton = false;
204
+ }
205
+ break;
206
+ case 'systemChanged':
207
+ // set default system, right after web translation widget in iframe is loaded
208
+ if (this.settingSystemListForFirstTime) {
209
+ this.settingSystemListForFirstTime = false;
210
+ this.sendMessage({ message: 'changeSystem', systemId: this.switcherOptions.systemId });
211
+ }
212
+ else {
213
+ // if initiated by language of the loaded webpage being different
214
+ // than source language of currently selected system
215
+ // we should change the system in UI and warn the user about the fact
216
+ if (event.data.auto && event.data.changed) {
217
+ if (this.webLangAutodetect) {
218
+ this.systemChange(event.data.systemId);
219
+ this.switcherOptions.systemId = event.data.systemId;
220
+ }
221
+ else {
222
+ this.sendMessage({ message: 'changeSystem', systemId: this.switcherOptions.systemId });
223
+ }
224
+ }
225
+ }
226
+ break;
227
+ case 'translationStarted':
228
+ this.mode = 'determinate';
229
+ this.progressValue = 0;
230
+ this.showProgress = true;
231
+ this.translating = true;
232
+ // disable system change, show cancel button
233
+ this.showTranslateBtn = false;
234
+ this.showCancel = true;
235
+ this.disableButton = true; // to disableSystemChange
236
+ break;
237
+ case 'translationStopped':
238
+ this.translating = false;
239
+ this.showProgress = false;
240
+ break;
241
+ case 'translated':
242
+ // show restore button
243
+ this.showRestore = true;
244
+ this.showCancel = false;
245
+ break;
246
+ case 'untranslated':
247
+ // enable system change, show translate button
248
+ this.disableButton = false;
249
+ this.showRestore = false;
250
+ this.showCancel = false;
251
+ this.showTranslateBtn = true;
252
+ break;
253
+ case 'progress':
254
+ this.progressValue = event.data.progress;
255
+ break;
256
+ case 'error':
257
+ // enable system change, show translate button
258
+ this.disableButton = false;
259
+ this.showRestore = false;
260
+ this.showCancel = false;
261
+ this.showTranslateBtn = true;
262
+ if (console) {
263
+ console.error(event.data.description);
264
+ }
265
+ break;
266
+ case 'warning':
267
+ if (console) {
268
+ console.warn(event.data.description);
269
+ }
270
+ break;
271
+ default:
272
+ break;
273
+ }
274
+ }
275
+ }
276
+ sendMessage(message) {
277
+ if (this.debug) {
278
+ // eslint-disable-next-line no-console
279
+ console.info('Message sent to iframe:' + JSON.stringify(message));
280
+ }
281
+ window.postMessage(message, window.location.origin);
282
+ }
283
+ removeMessage(ix) {
284
+ this.messages.splice(ix, 1);
285
+ }
286
+ swapLanguages() {
287
+ this.tldSystem.swapSystemLanguages();
288
+ const sys = this.tldSystem.getActiveSystemObj();
289
+ this.sendMessage({ message: 'changeSystem', systemId: sys.id });
290
+ }
291
+ systemChange(systemId) {
292
+ this.tldSystem.changeSystem(systemId);
293
+ this.sendMessage({ message: 'changeSystem', systemId });
294
+ }
295
+ sourceLanguageChange(language) {
296
+ this.tldSystem.changeLanguage(language, this.switcherOptions.target.code);
297
+ const sys = this.tldSystem.getActiveSystemObj();
298
+ this.sendMessage({ message: 'changeSystem', systemId: sys.id });
299
+ }
300
+ targetLanguageChange(language) {
301
+ this.tldSystem.changeLanguage(this.switcherOptions.source.code, language);
302
+ const sys = this.tldSystem.getActiveSystemObj();
303
+ this.sendMessage({ message: 'changeSystem', systemId: sys.id });
304
+ }
305
+ translateButtonClick() {
306
+ const selectedCollectionId = this.collectionService.selectedIdForTranslation();
307
+ if (this.urlToTranslate != '') {
308
+ this.sendMessage({
309
+ message: 'loadUrl',
310
+ url: this.urlToTranslate,
311
+ translateAfterLoad: true,
312
+ termCorpusId: selectedCollectionId
313
+ });
314
+ }
315
+ }
316
+ loadButtonClicked() {
317
+ if (this.urlToTranslate != '') {
318
+ this.sendMessage({
319
+ message: 'loadUrl',
320
+ url: this.urlToTranslate,
321
+ translateAfterLoad: false
322
+ });
323
+ }
324
+ }
325
+ cancel() {
326
+ this.sendMessage({ message: 'untranslate' });
327
+ }
328
+ restore() {
329
+ this.sendMessage({ message: 'untranslate' });
330
+ }
331
+ initFromConfig() {
332
+ const coreConfig = this.configService.coreConfig;
333
+ const webtranslateConfig = this.configService.webtranslateConfig;
334
+ this.logoLocation = webtranslateConfig.logoLocation;
335
+ this.debug = webtranslateConfig.debug;
336
+ this.webLangAutodetect = webtranslateConfig.webLangAutodetect; // after page is loaded auto detect language and change active system
337
+ this.allowSuggestions = webtranslateConfig.allowSuggestions;
338
+ this.hidePopup = webtranslateConfig.hidePopup;
339
+ this.translatePagePath = webtranslateConfig.translatePagePath;
340
+ this.appId = coreConfig.appId;
341
+ this.clientId = coreConfig.clientId;
342
+ if (this.apiVersion == TranslationApiVersion.V1) {
343
+ this.translateServiceUrl = this.configService.coreConfig.translationServiceUrl;
344
+ }
345
+ else if (this.apiVersion == TranslationApiVersion.V2) {
346
+ this.translateServiceUrl = this.configService.apiV2Config.translationUrl;
347
+ }
348
+ }
349
+ goToHome() {
350
+ this.router.navigateByUrl('');
351
+ this.sendMessage({ message: 'untranslate' });
352
+ }
353
+ addScript(url) {
354
+ const script = document.createElement('script');
355
+ script.src = url;
356
+ document.body.appendChild(script);
357
+ }
358
+ addConfigurationScrip() {
359
+ const body = document.body;
360
+ const script = document.createElement('script');
361
+ script.type = 'text/javascript';
362
+ script.innerHTML = '';
363
+ script.innerHTML = `
364
+
365
+ if (typeof (Tilde) === 'undefined')
366
+ Tilde = {};
367
+
368
+ Tilde.PageTranslateWidgetServerConfiguration = {
369
+ translateServiceUrl: '${this.translateServiceUrl}',
370
+ };
371
+
372
+ Tilde.PageTranslateWidgetClientConfiguration = {
373
+ TranslatePagePrefix: location.host + '/${this.translatePagePath}/',
374
+
375
+ // Url of the place where CSS for translation widget is kept
376
+ // if you wish to customize the standard letsmt style,
377
+ // point this to your own css file
378
+ cssLocation: './assets/webtranslate/widget.css',
379
+
380
+ // client id for authorization
381
+ clientId: "${this.clientId}",
382
+
383
+ //api version
384
+ apiVersion: "${this.apiVersion}", // 0 - V1; 1 - V2
385
+
386
+ // enable or disable original text popup
387
+ hidePopup: ${this.hidePopup},
388
+
389
+ // id of the <div> where to draw widget
390
+ widgetContainerId: "PageTranslateWidget",
391
+
392
+ // available translation systems (target languages)
393
+ translationSystems: [],
394
+
395
+ // source language of the page that needs to be translated
396
+ language: "en",
397
+
398
+ // translate widget UI to language that is chosen in target language dropdown
399
+ translateUItoChosenLanguage: false,
400
+
401
+ // translate widget administrative part to language that is chosen in target language dropdown
402
+ translateAdminUItoChosenLanguage: false,
403
+
404
+ uiLanguage: "${this.translate.currentLang}",
405
+
406
+ // if page was translated and you click on a link
407
+ // that goes to another page in the same site,
408
+ // then translate the newly opened page also
409
+ translateAfterNavigation: true,
410
+
411
+ // true - language list is shown as links
412
+ // false - language list is shown as dropdown list and "translate" button
413
+ languageListAsLinks: false,
414
+
415
+ showHeader: false,
416
+
417
+ showTranslationSuggestionAdminPage: false,
418
+
419
+ // after translation show a warning that page is machine translated at the top of the page
420
+ showMachineTranslationWarningAfterTranslation: false,
421
+
422
+ // show all available translation systems instead of just the ones configured in this file
423
+ showAllTranslationSystems: false,
424
+
425
+ // add some pixels to dropdown padding to make it look more similar on different browsers
426
+ browserSpecificDropdownPadding: false,
427
+
428
+ // name of icon set: "default", "white", "grey", "red"
429
+ iconSet: "white",
430
+
431
+ // Possible values: 1, 2, 3. Text for link "Restore original: Latvian" may be made shorter or longer
432
+ // useful to adapt to small or large screens
433
+ restoreOriginalLinkLength: 2,
434
+
435
+ // enable or disable "Suggest translation" link in popup that shows original text of translated sentence
436
+ suggestTranslation: ${this.allowSuggestions},
437
+
438
+ // show message box when error happens?
439
+ showMessageBoxOnError: false,
440
+
441
+ // application identifier
442
+ appId: "${this.appId}",
443
+
444
+ // server will only return systems that are meant for given appId
445
+ filterSystemsByAppId: false,
446
+
447
+ // show help link
448
+ enableHelp: false,
449
+
450
+ // show feedback link
451
+ enableFeedback: false,
452
+
453
+ // allowed system statuses, by default only "running"
454
+ allowedSystemStatuses: "running",
455
+
456
+ // passed to translation service for logging.
457
+ // "web-embedded" for widget that is embedded in html page,
458
+ // "web" for widget that can load and translate any website
459
+ widget: "web"
460
+ };
461
+ `;
462
+ body.appendChild(script);
463
+ }
464
+ }
465
+ TldTranslateWebsiteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldTranslateWebsiteComponent, deps: [{ token: i1.TranslateService }, { token: i2.TldTranslateConfigService }, { token: i3.TldTranslateButtonService }, { token: i2.TldAlertService }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i5.TldSystemService }, { token: i6.TldTermCollectionsService }, { token: i7.TldTranslateWebService }, { token: i2.IconService }, { token: TRANSLATION_API_VERSION_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
466
+ TldTranslateWebsiteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TldTranslateWebsiteComponent, selector: "tld-translate-website", inputs: { product: "product", company: "company" }, outputs: { onError: "onError" }, viewQueries: [{ propertyName: "urlInputField", first: true, predicate: ["url"], descendants: true }], ngImport: i0, template: "<div id=\"widget\" class=\"tld-translate-web\">\r\n <div class=\"translate-container-header\">\r\n <a href=\"/\" id=\"home-link\" [attr.title]=\"'WEBTRANSLATE.BACK' | translate\">\r\n <img [src]=\"logoLocation\" alt=\"logo\">\r\n <lib-company-product *ngIf=\"company && product\" [company]=\"company\" [product]=\"product\"></lib-company-product>\r\n </a>\r\n <div [ngClass.lt-sm]=\"'tld-translate-mobile'\">\r\n\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"address-wrapper\">\r\n <div fxFlex class=\"back-btn\">\r\n\r\n <button (click)=\"goToHome()\" color=\"accent\" mat-flat-button [attr.title]=\"'WEBTRANSLATE.BACK' | translate\">\r\n <mat-icon inline=true>chevron_left</mat-icon>\r\n </button>\r\n\r\n </div>\r\n <div fxFlex class=\"\">\r\n <div data-text=\"address\" class=\"\">{{'WEBTRANSLATE.ADDRESS' | translate}}</div>\r\n </div>\r\n <div fxFlex=\"100%\" class=\"address-input\">\r\n <input type=\"url\" #url class=\"url w-100\" autofocus=\"autofocus\" [(ngModel)]=\"urlToTranslate\"\r\n (keyup.enter)=\"loadButtonClicked()\" />\r\n </div>\r\n <div fxFlex class=\"load-btn\">\r\n <button (click)=\"loadButtonClicked()\" color=\"accent\" mat-flat-button\r\n [attr.title]=\"'WEBTRANSLATE.LOAD_PAGE' | translate\" [disabled]=\"!urlToTranslate\">\r\n <mat-icon inline=true>search</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center\" class=\"tld-translate-switcher-wrapper\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxFlex>\r\n <tld-translate-switcher\r\n *ngIf=\"switcherOptions\"\r\n [isCollectionsActivated]=\"isCollectionsActivated\"\r\n [useParentWidth]=\"useParentWidth\"\r\n [disabled]=\"actionButtonDisabled\"\r\n [settings]=\"switcherOptions\"\r\n [showTranslateButton]=\"false\"\r\n [hideOnSmallScreens]=\"false\"\r\n [hideLangMenuLabels]=\"hideLangMenuLabels\"\r\n [maxDisplayedLanguages]=\"maxDisplayedLanguages\"\r\n [showDomainsWithLanguageName]=\"showDomainsWithLanguageName\"\r\n (onDomainChange)=\"systemChange($event)\"\r\n (onActionClick)=\"translateButtonClick()\"\r\n (onLanguageSwap)=\"swapLanguages()\"\r\n (onSourceLanguageChange)=\"sourceLanguageChange($event)\"\r\n (onTargetLanguageChange)=\"targetLanguageChange($event)\">\r\n </tld-translate-switcher>\r\n <div fxFlexAlign=\"center\" class=\"action-btn-wrapper\">\r\n <tld-translate-button\r\n *ngIf=\"showTranslateBtn\"\r\n class=\"switcher-translate-button\"\r\n [disabled]=\"actionButtonDisabled || !urlToTranslate\">\r\n </tld-translate-button>\r\n <button *ngIf=\"showCancel\" mat-flat-button color=\"accent\" (click)=\"cancel()\"\r\n class=\"cancel-button\">{{'WEBTRANSLATE.CANCEL' | translate}}</button>\r\n <button *ngIf=\"showRestore\" mat-flat-button color=\"accent\" (click)=\"restore()\"\r\n class=\"restore-button\">{{'WEBTRANSLATE.RESTORE' | translate}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div id=\"website-frame-container\">\r\n <mat-progress-bar *ngIf=\"showProgress\" color=\"accent\" [mode]=\"mode\" [value]=\"progressValue\">\r\n </mat-progress-bar>\r\n <lib-tld-notification-message [@openCloseAnimation] *ngFor=\"let message of messages; let ix = index\" [message]=\"message\"\r\n (closeClicked)=\"removeMessage(ix)\"></lib-tld-notification-message>\r\n <iframe id=\"letsmt-translate-page-iframe\" name=\"letsmtTranslatePageIframe\" src=\"about:blank\"\r\n [attr.sandbox]=\"sandbox\"></iframe>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tld-translate-switcher-wrapper{padding:0 .5em;margin-left:auto;margin-right:auto}.translate-container-header{padding:.6em 1em 0;box-sizing:border-box}#widget .translate-container-header{width:100%;height:100%;margin-left:auto;margin-right:auto}#letsmt-translate-page-iframe{width:100%;height:100%;border:0}#website-frame-container{inset:5.92em 0 0;border-top:solid 1px #d4d4d4;position:fixed}#home-link{position:absolute;left:.75em;top:.2em;display:flex;flex-direction:row;text-decoration:none}#home-link img{margin-right:.75em;max-height:5.5em}@media screen and (max-width: 73em){#home-link{display:none}}.back-btn .mat-flat-button,.load-btn .mat-flat-button{width:27px;height:27px;line-height:27px;min-width:27px;padding:0}.back-btn .mat-flat-button .mat-icon,.load-btn .mat-flat-button .mat-icon{vertical-align:top;font-size:1.25em}.address-wrapper{max-width:60em;margin-bottom:.38em;margin-left:auto;margin-right:auto}.load-btn{padding-left:.8em}.back-btn{padding-right:.8em}.cancel-button,.restore-button{min-width:100px;height:36px;align-self:center}.w-100{width:100%}.address-input{padding-left:.9em;padding-right:.65em}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i9.TldTranslateSwitcherComponent, selector: "tld-translate-switcher", inputs: ["buttonDisabled", "showTranslateButton", "hideOnSmallScreens", "disabled", "hideLangMenuLabels", "maxDisplayedLanguages", "collections", "showDomainsWithLanguageName", "isCollectionsActivated", "useParentWidth", "loader", "settings"], outputs: ["onDomainChange", "onActionClick", "onSourceLanguageChange", "onTargetLanguageChange", "onLanguageSwap", "onVendorChange"] }, { kind: "component", type: i10.TldTranslateButtonComponent, selector: "tld-translate-button", inputs: ["disabled", "enablePulseAnimation"], outputs: ["clicked"] }, { kind: "component", type: i11.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"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i14.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"] }, { kind: "directive", type: i14.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"] }, { kind: "directive", type: i14.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i14.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"] }, { kind: "directive", type: i15.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i16.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i17.NotificationMessageComponent, selector: "lib-tld-notification-message", inputs: ["message", "inline"], outputs: ["buttonClicked", "closeClicked", "linkClicked"] }, { kind: "component", type: i17.CompanyProductComponent, selector: "lib-company-product", inputs: ["company", "product"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], animations: [
467
+ trigger('openCloseAnimation', [
468
+ transition(':enter', [
469
+ style({ height: 0 }),
470
+ animate(500)
471
+ ]),
472
+ transition(':leave', animate(500, style({ height: 0 })))
473
+ ])
474
+ ] });
475
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldTranslateWebsiteComponent, decorators: [{
476
+ type: Component,
477
+ args: [{ selector: 'tld-translate-website', animations: [
478
+ trigger('openCloseAnimation', [
479
+ transition(':enter', [
480
+ style({ height: 0 }),
481
+ animate(500)
482
+ ]),
483
+ transition(':leave', animate(500, style({ height: 0 })))
484
+ ])
485
+ ], template: "<div id=\"widget\" class=\"tld-translate-web\">\r\n <div class=\"translate-container-header\">\r\n <a href=\"/\" id=\"home-link\" [attr.title]=\"'WEBTRANSLATE.BACK' | translate\">\r\n <img [src]=\"logoLocation\" alt=\"logo\">\r\n <lib-company-product *ngIf=\"company && product\" [company]=\"company\" [product]=\"product\"></lib-company-product>\r\n </a>\r\n <div [ngClass.lt-sm]=\"'tld-translate-mobile'\">\r\n\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"address-wrapper\">\r\n <div fxFlex class=\"back-btn\">\r\n\r\n <button (click)=\"goToHome()\" color=\"accent\" mat-flat-button [attr.title]=\"'WEBTRANSLATE.BACK' | translate\">\r\n <mat-icon inline=true>chevron_left</mat-icon>\r\n </button>\r\n\r\n </div>\r\n <div fxFlex class=\"\">\r\n <div data-text=\"address\" class=\"\">{{'WEBTRANSLATE.ADDRESS' | translate}}</div>\r\n </div>\r\n <div fxFlex=\"100%\" class=\"address-input\">\r\n <input type=\"url\" #url class=\"url w-100\" autofocus=\"autofocus\" [(ngModel)]=\"urlToTranslate\"\r\n (keyup.enter)=\"loadButtonClicked()\" />\r\n </div>\r\n <div fxFlex class=\"load-btn\">\r\n <button (click)=\"loadButtonClicked()\" color=\"accent\" mat-flat-button\r\n [attr.title]=\"'WEBTRANSLATE.LOAD_PAGE' | translate\" [disabled]=\"!urlToTranslate\">\r\n <mat-icon inline=true>search</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center\" class=\"tld-translate-switcher-wrapper\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxFlex>\r\n <tld-translate-switcher\r\n *ngIf=\"switcherOptions\"\r\n [isCollectionsActivated]=\"isCollectionsActivated\"\r\n [useParentWidth]=\"useParentWidth\"\r\n [disabled]=\"actionButtonDisabled\"\r\n [settings]=\"switcherOptions\"\r\n [showTranslateButton]=\"false\"\r\n [hideOnSmallScreens]=\"false\"\r\n [hideLangMenuLabels]=\"hideLangMenuLabels\"\r\n [maxDisplayedLanguages]=\"maxDisplayedLanguages\"\r\n [showDomainsWithLanguageName]=\"showDomainsWithLanguageName\"\r\n (onDomainChange)=\"systemChange($event)\"\r\n (onActionClick)=\"translateButtonClick()\"\r\n (onLanguageSwap)=\"swapLanguages()\"\r\n (onSourceLanguageChange)=\"sourceLanguageChange($event)\"\r\n (onTargetLanguageChange)=\"targetLanguageChange($event)\">\r\n </tld-translate-switcher>\r\n <div fxFlexAlign=\"center\" class=\"action-btn-wrapper\">\r\n <tld-translate-button\r\n *ngIf=\"showTranslateBtn\"\r\n class=\"switcher-translate-button\"\r\n [disabled]=\"actionButtonDisabled || !urlToTranslate\">\r\n </tld-translate-button>\r\n <button *ngIf=\"showCancel\" mat-flat-button color=\"accent\" (click)=\"cancel()\"\r\n class=\"cancel-button\">{{'WEBTRANSLATE.CANCEL' | translate}}</button>\r\n <button *ngIf=\"showRestore\" mat-flat-button color=\"accent\" (click)=\"restore()\"\r\n class=\"restore-button\">{{'WEBTRANSLATE.RESTORE' | translate}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div id=\"website-frame-container\">\r\n <mat-progress-bar *ngIf=\"showProgress\" color=\"accent\" [mode]=\"mode\" [value]=\"progressValue\">\r\n </mat-progress-bar>\r\n <lib-tld-notification-message [@openCloseAnimation] *ngFor=\"let message of messages; let ix = index\" [message]=\"message\"\r\n (closeClicked)=\"removeMessage(ix)\"></lib-tld-notification-message>\r\n <iframe id=\"letsmt-translate-page-iframe\" name=\"letsmtTranslatePageIframe\" src=\"about:blank\"\r\n [attr.sandbox]=\"sandbox\"></iframe>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tld-translate-switcher-wrapper{padding:0 .5em;margin-left:auto;margin-right:auto}.translate-container-header{padding:.6em 1em 0;box-sizing:border-box}#widget .translate-container-header{width:100%;height:100%;margin-left:auto;margin-right:auto}#letsmt-translate-page-iframe{width:100%;height:100%;border:0}#website-frame-container{inset:5.92em 0 0;border-top:solid 1px #d4d4d4;position:fixed}#home-link{position:absolute;left:.75em;top:.2em;display:flex;flex-direction:row;text-decoration:none}#home-link img{margin-right:.75em;max-height:5.5em}@media screen and (max-width: 73em){#home-link{display:none}}.back-btn .mat-flat-button,.load-btn .mat-flat-button{width:27px;height:27px;line-height:27px;min-width:27px;padding:0}.back-btn .mat-flat-button .mat-icon,.load-btn .mat-flat-button .mat-icon{vertical-align:top;font-size:1.25em}.address-wrapper{max-width:60em;margin-bottom:.38em;margin-left:auto;margin-right:auto}.load-btn{padding-left:.8em}.back-btn{padding-right:.8em}.cancel-button,.restore-button{min-width:100px;height:36px;align-self:center}.w-100{width:100%}.address-input{padding-left:.9em;padding-right:.65em}\n"] }]
486
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.TldTranslateConfigService }, { type: i3.TldTranslateButtonService }, { type: i2.TldAlertService }, { type: i4.Router }, { type: i4.ActivatedRoute }, { type: i5.TldSystemService }, { type: i6.TldTermCollectionsService }, { type: i7.TldTranslateWebService }, { type: i2.IconService }, { type: i18.TranslationApiVersion, decorators: [{
487
+ type: Inject,
488
+ args: [TRANSLATION_API_VERSION_TOKEN]
489
+ }] }]; }, propDecorators: { product: [{
490
+ type: Input
491
+ }], company: [{
492
+ type: Input
493
+ }], urlInputField: [{
494
+ type: ViewChild,
495
+ args: ['url']
496
+ }], onError: [{
497
+ type: Output
498
+ }] } });
499
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS13ZWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLXdlYi90bGQtdHJhbnNsYXRlLXdlYi90bGQtdHJhbnNsYXRlLXdlYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtd2ViL3RsZC10cmFuc2xhdGUtd2ViL3RsZC10cmFuc2xhdGUtd2ViLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXpILE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBdUIsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRSxPQUFPLEVBQXdCLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUl6RSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FB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O2dCQUNuQixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUM7YUFDYixDQUFDO1lBRUYsVUFBVSxDQUFDLFFBQVEsRUFDakIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3RDLENBQUM7S0FDSDsyRkFFVSw0QkFBNEI7a0JBakJ4QyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQjt3QkFDVixPQUFPLENBQUMsb0JBQW9CLEVBQUU7NEJBRTVCLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztnQ0FDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQzs2QkFDYixDQUFDOzRCQUVGLFVBQVUsQ0FBQyxRQUFRLEVBQ2pCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt5QkFDdEMsQ0FBQztxQkFDSDs7MEJBY0UsTUFBTTsyQkFBQyw2QkFBNkI7NENBSTlCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRVksYUFBYTtzQkFBOUIsU0FBUzt1QkFBQyxLQUFLO2dCQXVCTixPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9ncmVzc0Jhck1vZGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUUkFOU0xBVElPTl9BUElfVkVSU0lPTl9UT0tFTiB9IGZyb20gJy4uLy4uLy4uL2luamVjdGlvbi10b2tlbnMnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9jb21wb25lbnRzL3RyYW5zbGF0ZS1idXR0b24vdGxkLXRyYW5zbGF0ZS1idXR0b24uc2VydmljZSc7XHJcbmltcG9ydCB7IElUbGRUcmFuc2xhdGVNZXNzYWdlLCBUbGRNZXNzYWdlVHlwZSwgVHJhbnNsYXRpb25BcGlWZXJzaW9uIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJY29uU2VydmljZSwgVGxkQWxlcnRTZXJ2aWNlLCBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFRlcm1Db2xsZWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtdGVybS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IElBY3RpdmVEYXRhIH0gZnJvbSAnLi4vLi4vdGxkLXRvb2x0aXAvbW9kZWxzL2FjdGl2ZS1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgSVN3aXRjaGVyVHJhbnNsYXRpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vdGxkLXRvb2x0aXAvbW9kZWxzL3N3aXRjaGVyLW9wdGlvbnMubW9kZWwnO1xyXG5pbXBvcnQgeyBUbGRTeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLXRvb2x0aXAvc2VydmljZXMvdGxkLXN5c3RlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlV2ViU2VydmljZSB9IGZyb20gJy4uL3RsZC10cmFuc2xhdGUtd2ViLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhdmFpbGFibGVMYW5ndWFnZXMgfSBmcm9tICcuLy4uLy4uLy4uL2kxOG4vYXZhaWxhYmxlLWxhbmd1YWdlcyc7XHJcblxyXG5cclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcbndpbmRvdy4kID0gd2luZG93LmpRdWVyeSA9ICQ7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RsZC10cmFuc2xhdGUtd2Vic2l0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RsZC10cmFuc2xhdGUtd2ViLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90bGQtdHJhbnNsYXRlLXdlYi5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ29wZW5DbG9zZUFuaW1hdGlvbicsIFtcclxuXHJcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICBzdHlsZSh7IGhlaWdodDogMCB9KSxcclxuICAgICAgICBhbmltYXRlKDUwMClcclxuICAgICAgXSksXHJcblxyXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLFxyXG4gICAgICAgIGFuaW1hdGUoNTAwLCBzdHlsZSh7IGhlaWdodDogMCB9KSkpXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVdlYnNpdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlQnV0dG9uU2VydmljZTogVGxkVHJhbnNsYXRlQnV0dG9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRzOiBUbGRBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFN5c3RlbTogVGxkU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29sbGVjdGlvblNlcnZpY2U6IFRsZFRlcm1Db2xsZWN0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFRyYW5zbGF0ZVdlYlNlcnZpY2U6IFRsZFRyYW5zbGF0ZVdlYlNlcnZpY2UsXHJcbiAgICBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFRSQU5TTEFUSU9OX0FQSV9WRVJTSU9OX1RPS0VOKSBwcml2YXRlIHJlYWRvbmx5IGFwaVZlcnNpb246IFRyYW5zbGF0aW9uQXBpVmVyc2lvblxyXG4gICkge1xyXG4gICAgaWNvblNlcnZpY2UucmVnaXN0ZXJJY29ucygpO1xyXG4gIH1cclxuICBASW5wdXQoKSBwcm9kdWN0ID0gJyc7XHJcbiAgQElucHV0KCkgY29tcGFueSA9ICcnO1xyXG5cclxuICBAVmlld0NoaWxkKCd1cmwnKSB1cmxJbnB1dEZpZWxkOiBFbGVtZW50UmVmO1xyXG5cclxuICBzZXR0aW5nU3lzdGVtTGlzdEZvckZpcnN0VGltZTogYm9vbGVhbjtcclxuICB1cmxUb1RyYW5zbGF0ZSA9ICcnOyAvLyB0cmFuc2xhdGVXZWJfVXJsXHJcbiAgc2hvd0NhbmNlbCA9IGZhbHNlO1xyXG4gIHNob3dSZXN0b3JlID0gZmFsc2U7XHJcbiAgc2hvd1RyYW5zbGF0ZUJ0biA9IHRydWU7XHJcbiAgdHJhbnNsYXRpbmcgPSBmYWxzZTtcclxuICBkaXNhYmxlQnV0dG9uID0gZmFsc2U7IC8vIGFjdGlvbkJ1dHRvbkRpc2FibGVkXHJcblxyXG4gIC8vIHBhcmFtcyBmcm9tIGNvbmZpZyBzZXJ2aWNlLlxyXG4gIGxvZ29Mb2NhdGlvbjogc3RyaW5nO1xyXG4gIGRlYnVnOiBib29sZWFuO1xyXG4gIHdlYkxhbmdBdXRvZGV0ZWN0OiBib29sZWFuOyAvLyBUT0RPIGNoZWNrIGlmIHJlYWxseSBuZWVkZWQgLy8gYWZ0ZXIgcGFnZSBpcyBsb2FkZWQgYXV0byBkZXRlY3QgbGFuZ3VhZ2UgYW5kIGNoYW5nZSBhY3RpdmUgc3lzdGVtXHJcbiAgYWxsb3dTdWdnZXN0aW9uczogYm9vbGVhbjtcclxuICBoaWRlUG9wdXA6IGJvb2xlYW47XHJcbiAgdHJhbnNsYXRlUGFnZVBhdGg6IHN0cmluZzsgLy8gIHBhdGggdG8gV2ViVHJhbnNsYXRpb25Qcm94eVxyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgYXBwSWQ6IHN0cmluZztcclxuICB0cmFuc2xhdGVTZXJ2aWNlVXJsOiBzdHJpbmc7XHJcblxyXG4gIHN3aXRjaGVyT3B0aW9uczogSVN3aXRjaGVyVHJhbnNsYXRpb25PcHRpb25zO1xyXG5cclxuICBAT3V0cHV0KCkgb25FcnJvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgYWN0aXZlU3lzdGVtT2JqOiBJQWN0aXZlRGF0YTtcclxuICBtZXNzYWdlczogTm90aWZpY2F0aW9uTWVzc2FnZVtdID0gW107XHJcblxyXG4gIC8vUHJvZ3Jlc3MgYmFyXHJcbiAgbW9kZTogUHJvZ3Jlc3NCYXJNb2RlID0gJ2RldGVybWluYXRlJztcclxuICBwcm9ncmVzc1ZhbHVlID0gMDtcclxuICBzaG93UHJvZ3Jlc3MgPSBmYWxzZTtcclxuICBnZXQgc2hvd05vU3lzdGVtc0Vycm9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yO1xyXG4gIH1cclxuICBub1N5c3RlbXNFcnJvcjogSVRsZFRyYW5zbGF0ZU1lc3NhZ2UgPSB7IHRleHQ6ICdUTERfVFJBTlNMQVRFLkVSUk9SX05PX1NZU1RFTVNfTE9BREVEJywgdHlwZTogVGxkTWVzc2FnZVR5cGUuRVJST1IgfTtcclxuXHJcbiAgZ2V0IGFjdGlvbkJ1dHRvbkRpc2FibGVkKCkgeyByZXR1cm4gdGhpcy5kaXNhYmxlQnV0dG9uOyB9XHJcblxyXG5cclxuICBnZXQgaGlkZUxhbmdNZW51TGFiZWxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZT8uY29yZUNvbmZpZy5oaWRlTGFuZ01lbnVMYWJlbHM7XHJcbiAgfVxyXG5cclxuICBnZXQgbWF4RGlzcGxheWVkTGFuZ3VhZ2VzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLmNvcmVDb25maWcubWF4RGlzcGxheWVkTGFuZ3VhZ2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQ29sbGVjdGlvbnNBY3RpdmF0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlPy50ZXJtQ29uZmlnPy5pc0NvbGxlY3Rpb25zQWN0aXZhdGVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dEb21haW5zV2l0aExhbmd1YWdlTmFtZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5zaG93RG9tYWluc1dpdGhMYW5ndWFnZU5hbWU7XHJcbiAgfVxyXG5cclxuICBnZXQgc2FuZGJveCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS53ZWJ0cmFuc2xhdGVDb25maWcuc2FuZGJveDsgfVxyXG5cclxuICByZWFkb25seSB1c2VQYXJlbnRXaWR0aCA9IHRydWU7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNoYW5nZUF1dGgoaXNBdXRoOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5pc0F1dGggPSBpc0F1dGg7XHJcbiAgICB0aGlzLmluaXRpYWxpemVXaWRnZXQoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVXaWRnZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRsZFN5c3RlbS5pbml0KHRoaXMudGxkU3lzdGVtLmdldExhc3RVc2VkU3lzdGVtKCkgPz8gdGhpcy5jb25maWdTZXJ2aWNlLmNvcmVDb25maWcuZGVmYXVsdFN5c3RlbUlkKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5jb3JlQ29uZmlnLmRlYnVnKSB7XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGF2YWlsYWJsZUxhbmd1YWdlcykge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnNldFRyYW5zbGF0aW9uKGtleSwgYXZhaWxhYmxlTGFuZ3VhZ2VzW2tleV0sIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb3JlQ29uZmlnLmlzQXV0aCA9IHRydWU7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShcImVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdEZyb21Db25maWcoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVdpZGdldCgpO1xyXG5cclxuICAgIHRoaXMudGxkU3lzdGVtLmdldEFjdGl2ZURhdGEoKS5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbDogSUFjdGl2ZURhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVN5c3RlbU9iaiA9IHZhbDtcclxuICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN3aXRjaGVyT3B0aW9ucyA9IHtcclxuICAgICAgICAgIGRvbWFpbnM6IHZhbC5kb21haW5zLFxyXG4gICAgICAgICAgc291cmNlOiB7IGNvZGU6IHZhbC5zb3VyY2VMYW5nLmxhbmcsIHN5c3RlbUlkOiB2YWwuc3lzdGVtSWQgfSxcclxuICAgICAgICAgIHNvdXJjZUxhbmd1YWdlTGlzdDogdmFsLnNvdXJjZUxhbmdMaXN0LFxyXG4gICAgICAgICAgc3lzdGVtSWQ6IHZhbC5zeXN0ZW1JZCxcclxuICAgICAgICAgIHN3YXBBY3RpdmU6IHZhbC5zd2FwTGFuZ0FjdGl2ZSxcclxuICAgICAgICAgIHRhcmdldDogeyBjb2RlOiB2YWwudGFyZ2V0TGFuZy5sYW5nLCBzeXN0ZW1JZDogdmFsLnN5c3RlbUlkIH0sXHJcbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZUxpc3Q6IHZhbC50YXJnZXRMYW5nTGlzdCxcclxuICAgICAgICAgIHZlbmRvcnM6IHZhbC52ZW5kb3JzXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMudHJhbnNsYXRlQnV0dG9uU2VydmljZS5nZXRBY3Rpb25DbGljaygpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVCdXR0b25DbGljaygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFsZXJ0cy5nZXRNZXNzYWdlcygpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobWVzc2FnZTogTm90aWZpY2F0aW9uTWVzc2FnZSkgPT4ge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLkVSUk9SKSB7XHJcbiAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChtZXNzYWdlLmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcHVzaGluZyBvbmx5IFwib25lIG9mXCIgbWVzc2FnZSBpbiBhcnJheSwgc28gc2NyZWVuIGlzIG5vdCBzcGFtbWVkIHdpdGggbWVzc2FnZXNcclxuICAgICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5ib2R5ID09PSBtZXNzYWdlLmJvZHkgJiYgbXNnLnR5cGUgPT09IG1lc3NhZ2UudHlwZSAmJiBtc2cudGl0bGUgPT09IG1lc3NhZ2UudGl0bGUpO1xyXG4gICAgICAgIGlmICghZXhpc3RpbmdNZXNzYWdlKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0FQUF9OQU1FJykucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh0ZXh0OiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5hcHBOYW1lID0gdGV4dDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgd2luZG93Lm9ubWVzc2FnZSA9IHRoaXMucmVjZWl2ZU1lc3NhZ2UuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50bGRUcmFuc2xhdGVXZWJTZXJ2aWNlLnd0U2NyaXB0c0FkZGVkKSB7XHJcbiAgICAgIHRoaXMuYWRkU2NyaXB0KCcuL2Fzc2V0cy93ZWJ0cmFuc2xhdGUvdHJhbnNsYXRlLXdlYnNpdGUuanMnKTtcclxuICAgICAgdGhpcy5hZGRDb25maWd1cmF0aW9uU2NyaXAoKTtcclxuICAgICAgdGhpcy5hZGRTY3JpcHQoJy4vYXNzZXRzL3dlYnRyYW5zbGF0ZS9wYWdlLXRyYW5zbGF0ZS13aWRnZXQuanMnKTtcclxuICAgICAgdGhpcy50bGRUcmFuc2xhdGVXZWJTZXJ2aWNlLnd0U2NyaXB0c0FkZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHdpbmRvdy5vbm1lc3NhZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY2VpdmVNZXNzYWdlKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIFRPRE8gYWRkIGNvcnJlY3Qgb3JpZ2luXHJcbiAgICAvLyBpZiAoZXZlbnQub3JpZ2luICE9PSBcIlwiKVxyXG4gICAgLy8gcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUuaW5mbygnTWVzc2FnZSByZWNlaXZlZCBmcm9tIGlmcmFtZTonICsgSlNPTi5zdHJpbmdpZnkoZXZlbnQuZGF0YSkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgc3dpdGNoIChldmVudC5kYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgICBjYXNlICdyZWFkeSc6XHJcbiAgICAgICAgICB0aGlzLnRsZFN5c3RlbS5zeXNMaXN0LnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgICBsZXQgc3lzdGVtTGlzdFRvSWZyYW1lID0gW107XHJcbiAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKChzeXMsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzeXN0ZW1MaXN0VG9JZnJhbWUucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIGlkOiBzeXMuaWQsXHJcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUxhbmd1YWdlOiBzeXMuc291cmNlTGFuZ3VhZ2UsXHJcbiAgICAgICAgICAgICAgICAgIHRhcmdldExhbmd1YWdlOiBzeXMudGFyZ2V0TGFuZ3VhZ2UsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHN5cy50aXRsZSA/PyBzeXMuaWQsXHJcbiAgICAgICAgICAgICAgICAgIG9yZGVyOiBpbmRleCxcclxuICAgICAgICAgICAgICAgICAgZG9tYWluOiBzeXMuZG9tYWluXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gcHVzaCBzeXN0ZW0gbGlzdCB0byBpZnJhbWVcclxuICAgICAgICAgICAgICB0aGlzLnNldHRpbmdTeXN0ZW1MaXN0Rm9yRmlyc3RUaW1lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKHsgbWVzc2FnZTogJ3NldFN5c3RlbUxpc3QnLCBzeXN0ZW1MaXN0OiBzeXN0ZW1MaXN0VG9JZnJhbWUgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2xvYWRVcmwnLFxyXG4gICAgICAgICAgICAgICAgICB1cmw6IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMudXJsLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVBZnRlckxvYWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXJsVG9UcmFuc2xhdGUgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnVybDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLnVybElucHV0RmllbGQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3VybExvYWRlZCc6XHJcbiAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gd2VicGFnZSBmaW5pc2hlZCBsb2FkaW5nLCBzZXQgdGhlIGZ1bGwgdXJsIGluIGFkZHJlc3MgYm94XHJcbiAgICAgICAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gZXZlbnQuZGF0YS51cmw7XHJcblxyXG4gICAgICAgICAgdGhpcy5zaG93VHJhbnNsYXRlQnRuID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3N0YXJ0ZWRMb2FkaW5nJzpcclxuICAgICAgICAgIHRoaXMubW9kZSA9ICdpbmRldGVybWluYXRlJztcclxuICAgICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2hvd0NhbmNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVzdG9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93VHJhbnNsYXRlQnRuID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdzdG9wcGVkTG9hZGluZyc6XHJcbiAgICAgICAgICBpZiAoIXRoaXMudHJhbnNsYXRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q2FuY2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jlc3RvcmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VHJhbnNsYXRlQnRuID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdzeXN0ZW1DaGFuZ2VkJzpcclxuICAgICAgICAgIC8vIHNldCBkZWZhdWx0IHN5c3RlbSwgcmlnaHQgYWZ0ZXIgd2ViIHRyYW5zbGF0aW9uIHdpZGdldCBpbiBpZnJhbWUgaXMgbG9hZGVkXHJcbiAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nU3lzdGVtTGlzdEZvckZpcnN0VGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdTeXN0ZW1MaXN0Rm9yRmlyc3RUaW1lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoeyBtZXNzYWdlOiAnY2hhbmdlU3lzdGVtJywgc3lzdGVtSWQ6IHRoaXMuc3dpdGNoZXJPcHRpb25zLnN5c3RlbUlkIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaWYgaW5pdGlhdGVkIGJ5IGxhbmd1YWdlIG9mIHRoZSBsb2FkZWQgd2VicGFnZSBiZWluZyBkaWZmZXJlbnRcclxuICAgICAgICAgICAgLy8gdGhhbiBzb3VyY2UgbGFuZ3VhZ2Ugb2YgY3VycmVudGx5IHNlbGVjdGVkICBzeXN0ZW1cclxuICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIGNoYW5nZSB0aGUgc3lzdGVtIGluIFVJIGFuZCB3YXJuIHRoZSB1c2VyIGFib3V0IHRoZSBmYWN0XHJcbiAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmF1dG8gJiYgZXZlbnQuZGF0YS5jaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMud2ViTGFuZ0F1dG9kZXRlY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3lzdGVtQ2hhbmdlKGV2ZW50LmRhdGEuc3lzdGVtSWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2l0Y2hlck9wdGlvbnMuc3lzdGVtSWQgPSBldmVudC5kYXRhLnN5c3RlbUlkO1xyXG5cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZSh7IG1lc3NhZ2U6ICdjaGFuZ2VTeXN0ZW0nLCBzeXN0ZW1JZDogdGhpcy5zd2l0Y2hlck9wdGlvbnMuc3lzdGVtSWQgfSk7XHJcblxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3RyYW5zbGF0aW9uU3RhcnRlZCc6XHJcbiAgICAgICAgICB0aGlzLm1vZGUgPSAnZGV0ZXJtaW5hdGUnO1xyXG4gICAgICAgICAgdGhpcy5wcm9ncmVzc1ZhbHVlID0gMDtcclxuICAgICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIC8vIGRpc2FibGUgc3lzdGVtIGNoYW5nZSwgc2hvdyBjYW5jZWwgYnV0dG9uXHJcbiAgICAgICAgICB0aGlzLnNob3dUcmFuc2xhdGVCdG4gPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2hvd0NhbmNlbCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVCdXR0b24gPSB0cnVlOyAgLy8gdG8gZGlzYWJsZVN5c3RlbUNoYW5nZVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3RyYW5zbGF0aW9uU3RvcHBlZCc6XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAndHJhbnNsYXRlZCc6XHJcbiAgICAgICAgICAvLyBzaG93IHJlc3RvcmUgYnV0dG9uXHJcbiAgICAgICAgICB0aGlzLnNob3dSZXN0b3JlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2hvd0NhbmNlbCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAndW50cmFuc2xhdGVkJzpcclxuICAgICAgICAgIC8vIGVuYWJsZSBzeXN0ZW0gY2hhbmdlLCBzaG93IHRyYW5zbGF0ZSBidXR0b25cclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVzdG9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2FuY2VsID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dUcmFuc2xhdGVCdG4gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAncHJvZ3Jlc3MnOlxyXG4gICAgICAgICAgdGhpcy5wcm9ncmVzc1ZhbHVlID0gZXZlbnQuZGF0YS5wcm9ncmVzcztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2Vycm9yJzpcclxuICAgICAgICAgIC8vIGVuYWJsZSBzeXN0ZW0gY2hhbmdlLCBzaG93IHRyYW5zbGF0ZSBidXR0b25cclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVzdG9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2FuY2VsID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dUcmFuc2xhdGVCdG4gPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGNvbnNvbGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihldmVudC5kYXRhLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICd3YXJuaW5nJzpcclxuICAgICAgICAgIGlmIChjb25zb2xlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihldmVudC5kYXRhLmRlc2NyaXB0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VuZE1lc3NhZ2UobWVzc2FnZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmluZm8oJ01lc3NhZ2Ugc2VudCB0byBpZnJhbWU6JyArIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UobWVzc2FnZSwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XHJcbiAgfVxyXG5cclxuICByZW1vdmVNZXNzYWdlKGl4OiBudW1iZXIpIHtcclxuICAgIHRoaXMubWVzc2FnZXMuc3BsaWNlKGl4LCAxKTtcclxuICB9XHJcblxyXG4gIHN3YXBMYW5ndWFnZXMoKSB7XHJcbiAgICB0aGlzLnRsZFN5c3RlbS5zd2FwU3lzdGVtTGFuZ3VhZ2VzKCk7XHJcblxyXG4gICAgY29uc3Qgc3lzID0gdGhpcy50bGRTeXN0ZW0uZ2V0QWN0aXZlU3lzdGVtT2JqKCk7XHJcbiAgICB0aGlzLnNlbmRNZXNzYWdlKHsgbWVzc2FnZTogJ2NoYW5nZVN5c3RlbScsIHN5c3RlbUlkOiBzeXMuaWQgfSk7XHJcbiAgfVxyXG5cclxuICBzeXN0ZW1DaGFuZ2Uoc3lzdGVtSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50bGRTeXN0ZW0uY2hhbmdlU3lzdGVtKHN5c3RlbUlkKTtcclxuXHJcbiAgICB0aGlzLnNlbmRNZXNzYWdlKHsgbWVzc2FnZTogJ2NoYW5nZVN5c3RlbScsIHN5c3RlbUlkIH0pO1xyXG4gIH1cclxuXHJcbiAgc291cmNlTGFuZ3VhZ2VDaGFuZ2UobGFuZ3VhZ2U6IHN0cmluZykge1xyXG4gICAgdGhpcy50bGRTeXN0ZW0uY2hhbmdlTGFuZ3VhZ2UobGFuZ3VhZ2UsIHRoaXMuc3dpdGNoZXJPcHRpb25zLnRhcmdldC5jb2RlKTtcclxuXHJcbiAgICBjb25zdCBzeXMgPSB0aGlzLnRsZFN5c3RlbS5nZXRBY3RpdmVTeXN0ZW1PYmooKTtcclxuICAgIHRoaXMuc2VuZE1lc3NhZ2UoeyBtZXNzYWdlOiAnY2hhbmdlU3lzdGVtJywgc3lzdGVtSWQ6IHN5cy5pZCB9KTtcclxuICB9XHJcblxyXG4gIHRhcmdldExhbmd1YWdlQ2hhbmdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGxkU3lzdGVtLmNoYW5nZUxhbmd1YWdlKHRoaXMuc3dpdGNoZXJPcHRpb25zLnNvdXJjZS5jb2RlLCBsYW5ndWFnZSk7XHJcblxyXG4gICAgY29uc3Qgc3lzID0gdGhpcy50bGRTeXN0ZW0uZ2V0QWN0aXZlU3lzdGVtT2JqKCk7XHJcbiAgICB0aGlzLnNlbmRNZXNzYWdlKHsgbWVzc2FnZTogJ2NoYW5nZVN5c3RlbScsIHN5c3RlbUlkOiBzeXMuaWQgfSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGVCdXR0b25DbGljaygpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ29sbGVjdGlvbklkID0gdGhpcy5jb2xsZWN0aW9uU2VydmljZS5zZWxlY3RlZElkRm9yVHJhbnNsYXRpb24oKTtcclxuXHJcbiAgICBpZiAodGhpcy51cmxUb1RyYW5zbGF0ZSAhPSAnJykge1xyXG4gICAgICB0aGlzLnNlbmRNZXNzYWdlKHtcclxuICAgICAgICBtZXNzYWdlOiAnbG9hZFVybCcsXHJcbiAgICAgICAgdXJsOiB0aGlzLnVybFRvVHJhbnNsYXRlLFxyXG4gICAgICAgIHRyYW5zbGF0ZUFmdGVyTG9hZDogdHJ1ZSxcclxuICAgICAgICB0ZXJtQ29ycHVzSWQ6IHNlbGVjdGVkQ29sbGVjdGlvbklkXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZEJ1dHRvbkNsaWNrZWQoKSB7XHJcbiAgICBpZiAodGhpcy51cmxUb1RyYW5zbGF0ZSAhPSAnJykge1xyXG4gICAgICB0aGlzLnNlbmRNZXNzYWdlKHtcclxuICAgICAgICBtZXNzYWdlOiAnbG9hZFVybCcsXHJcbiAgICAgICAgdXJsOiB0aGlzLnVybFRvVHJhbnNsYXRlLFxyXG4gICAgICAgIHRyYW5zbGF0ZUFmdGVyTG9hZDogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbmRNZXNzYWdlKHsgbWVzc2FnZTogJ3VudHJhbnNsYXRlJyB9KTtcclxuICB9XHJcblxyXG4gIHJlc3RvcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbmRNZXNzYWdlKHsgbWVzc2FnZTogJ3VudHJhbnNsYXRlJyB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEZyb21Db25maWcoKSB7XHJcbiAgICBjb25zdCBjb3JlQ29uZmlnID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvcmVDb25maWc7XHJcbiAgICBjb25zdCB3ZWJ0cmFuc2xhdGVDb25maWcgPSB0aGlzLmNvbmZpZ1NlcnZpY2Uud2VidHJhbnNsYXRlQ29uZmlnO1xyXG4gICAgdGhpcy5sb2dvTG9jYXRpb24gPSB3ZWJ0cmFuc2xhdGVDb25maWcubG9nb0xvY2F0aW9uO1xyXG4gICAgdGhpcy5kZWJ1ZyA9IHdlYnRyYW5zbGF0ZUNvbmZpZy5kZWJ1ZztcclxuICAgIHRoaXMud2ViTGFuZ0F1dG9kZXRlY3QgPSB3ZWJ0cmFuc2xhdGVDb25maWcud2ViTGFuZ0F1dG9kZXRlY3Q7IC8vIGFmdGVyIHBhZ2UgaXMgbG9hZGVkIGF1dG8gZGV0ZWN0IGxhbmd1YWdlIGFuZCBjaGFuZ2UgYWN0aXZlIHN5c3RlbVxyXG4gICAgdGhpcy5hbGxvd1N1Z2dlc3Rpb25zID0gd2VidHJhbnNsYXRlQ29uZmlnLmFsbG93U3VnZ2VzdGlvbnM7XHJcbiAgICB0aGlzLmhpZGVQb3B1cCA9IHdlYnRyYW5zbGF0ZUNvbmZpZy5oaWRlUG9wdXA7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVBhZ2VQYXRoID0gd2VidHJhbnNsYXRlQ29uZmlnLnRyYW5zbGF0ZVBhZ2VQYXRoO1xyXG4gICAgdGhpcy5hcHBJZCA9IGNvcmVDb25maWcuYXBwSWQ7XHJcbiAgICB0aGlzLmNsaWVudElkID0gY29yZUNvbmZpZy5jbGllbnRJZDtcclxuXHJcbiAgICBpZiAodGhpcy5hcGlWZXJzaW9uID09IFRyYW5zbGF0aW9uQXBpVmVyc2lvbi5WMSkge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VVcmwgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy50cmFuc2xhdGlvblNlcnZpY2VVcmw7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXBpVmVyc2lvbiA9PSBUcmFuc2xhdGlvbkFwaVZlcnNpb24uVjIpIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlVXJsID0gdGhpcy5jb25maWdTZXJ2aWNlLmFwaVYyQ29uZmlnLnRyYW5zbGF0aW9uVXJsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Ub0hvbWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcnKTtcclxuICAgIHRoaXMuc2VuZE1lc3NhZ2UoeyBtZXNzYWdlOiAndW50cmFuc2xhdGUnIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkU2NyaXB0KHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgIHNjcmlwdC5zcmMgPSB1cmw7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XHJcbiAgfVxyXG5cclxuICBhZGRDb25maWd1cmF0aW9uU2NyaXAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcclxuICAgIHNjcmlwdC5pbm5lckhUTUwgPSAnJztcclxuICAgIHNjcmlwdC5pbm5lckhUTUwgPSBgXHJcblxyXG4gICAgaWYgKHR5cGVvZiAoVGlsZGUpID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICBUaWxkZSA9IHt9O1xyXG5cclxuICAgICAgICBUaWxkZS5QYWdlVHJhbnNsYXRlV2lkZ2V0U2VydmVyQ29uZmlndXJhdGlvbiA9IHtcclxuICAgICAgICAgIHRyYW5zbGF0ZVNlcnZpY2VVcmw6ICcke3RoaXMudHJhbnNsYXRlU2VydmljZVVybH0nLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgVGlsZGUuUGFnZVRyYW5zbGF0ZVdpZGdldENsaWVudENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgIFRyYW5zbGF0ZVBhZ2VQcmVmaXg6IGxvY2F0aW9uLmhvc3QgKyAnLyR7dGhpcy50cmFuc2xhdGVQYWdlUGF0aH0vJyxcclxuXHJcbiAgICAgICAgLy8gVXJsIG9mIHRoZSBwbGFjZSB3aGVyZSBDU1MgZm9yIHRyYW5zbGF0aW9uIHdpZGdldCBpcyBrZXB0XHJcbiAgICAgICAgLy8gaWYgeW91IHdpc2ggdG8gY3VzdG9taXplIHRoZSBzdGFuZGFyZCBsZXRzbXQgc3R5bGUsXHJcbiAgICAgICAgLy8gcG9pbnQgdGhpcyB0byB5b3VyIG93biBjc3MgZmlsZVxyXG4gICAgICAgIGNzc0xvY2F0aW9uOiAnLi9hc3NldHMvd2VidHJhbnNsYXRlL3dpZGdldC5jc3MnLFxyXG5cclxuICAgICAgICAvLyBjbGllbnQgaWQgZm9yIGF1dGhvcml6YXRpb25cclxuICAgICAgICBjbGllbnRJZDogXCIke3RoaXMuY2xpZW50SWR9XCIsXHJcblxyXG4gICAgICAgIC8vYXBpIHZlcnNpb25cclxuICAgICAgICBhcGlWZXJzaW9uOiBcIiR7dGhpcy5hcGlWZXJzaW9ufVwiLCAgLy8gMCAtIFYxOyAxIC0gVjJcclxuXHJcbiAgICAgICAgLy8gZW5hYmxlIG9yIGRpc2FibGUgb3JpZ2luYWwgdGV4dCBwb3B1cFxyXG4gICAgICAgIGhpZGVQb3B1cDogJHt0aGlzLmhpZGVQb3B1cH0sXHJcblxyXG4gICAgICAgIC8vIGlkIG9mIHRoZSA8ZGl2PiB3aGVyZSB0byBkcmF3IHdpZGdldFxyXG4gICAgICAgIHdpZGdldENvbnRhaW5lcklkOiBcIlBhZ2VUcmFuc2xhdGVXaWRnZXRcIixcclxuXHJcbiAgICAgICAgLy8gYXZhaWxhYmxlIHRyYW5zbGF0aW9uIHN5c3RlbXMgKHRhcmdldCBsYW5ndWFnZXMpXHJcbiAgICAgICAgdHJhbnNsYXRpb25TeXN0ZW1zOiBbXSxcclxuXHJcbiAgICAgICAgLy8gc291cmNlIGxhbmd1YWdlIG9mIHRoZSBwYWdlIHRoYXQgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZFxyXG4gICAgICAgIGxhbmd1YWdlOiBcImVuXCIsXHJcblxyXG4gICAgICAgIC8vIHRyYW5zbGF0ZSB3aWRnZXQgVUkgdG8gbGFuZ3VhZ2UgdGhhdCBpcyBjaG9zZW4gaW4gdGFyZ2V0IGxhbmd1YWdlIGRyb3Bkb3duXHJcbiAgICAgICAgdHJhbnNsYXRlVUl0b0Nob3Nlbkxhbmd1YWdlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLy8gdHJhbnNsYXRlIHdpZGdldCBhZG1pbmlzdHJhdGl2ZSBwYXJ0IHRvIGxhbmd1YWdlIHRoYXQgaXMgY2hvc2VuIGluIHRhcmdldCBsYW5ndWFnZSBkcm9wZG93blxyXG4gICAgICAgIHRyYW5zbGF0ZUFkbWluVUl0b0Nob3Nlbkxhbmd1YWdlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgdWlMYW5ndWFnZTogXCIke3RoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nfVwiLFxyXG5cclxuICAgICAgICAvLyBpZiBwYWdlIHdhcyB0cmFuc2xhdGVkIGFuZCB5b3UgY2xpY2sgb24gYSBsaW5rXHJcbiAgICAgICAgLy8gdGhhdCBnb2VzIHRvIGFub3RoZXIgcGFnZSBpbiB0aGUgc2FtZSBzaXRlLFxyXG4gICAgICAgIC8vIHRoZW4gdHJhbnNsYXRlIHRoZSBuZXdseSBvcGVuZWQgcGFnZSBhbHNvXHJcbiAgICAgICAgdHJhbnNsYXRlQWZ0ZXJOYXZpZ2F0aW9uOiB0cnVlLFxyXG5cclxuICAgICAgICAvLyB0cnVlIC0gbGFuZ3VhZ2UgbGlzdCBpcyBzaG93biBhcyBsaW5rc1xyXG4gICAgICAgIC8vIGZhbHNlIC0gbGFuZ3VhZ2UgbGlzdCBpcyBzaG93biBhcyBkcm9wZG93biBsaXN0IGFuZCBcInRyYW5zbGF0ZVwiIGJ1dHRvblxyXG4gICAgICAgIGxhbmd1YWdlTGlzdEFzTGlua3M6IGZhbHNlLFxyXG5cclxuICAgICAgICBzaG93SGVhZGVyOiBmYWxzZSxcclxuXHJcbiAgICAgICAgc2hvd1RyYW5zbGF0aW9uU3VnZ2VzdGlvbkFkbWluUGFnZTogZmFsc2UsXHJcblxyXG4gICAgICAgIC8vIGFmdGVyIHRyYW5zbGF0aW9uIHNob3cgYSB3YXJuaW5nIHRoYXQgcGFnZSBpcyBtYWNoaW5lIHRyYW5zbGF0ZWQgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZVxyXG4gICAgICAgIHNob3dNYWNoaW5lVHJhbnNsYXRpb25XYXJuaW5nQWZ0ZXJUcmFuc2xhdGlvbjogZmFsc2UsXHJcblxyXG4gICAgICAgIC8vIHNob3cgYWxsIGF2YWlsYWJsZSB0cmFuc2xhdGlvbiBzeXN0ZW1zIGluc3RlYWQgb2YganVzdCB0aGUgb25lcyBjb25maWd1cmVkIGluIHRoaXMgZmlsZVxyXG4gICAgICAgIHNob3dBbGxUcmFuc2xhdGlvblN5c3RlbXM6IGZhbHNlLFxyXG5cclxuICAgICAgICAvLyBhZGQgc29tZSBwaXhlbHMgdG8gZHJvcGRvd24gcGFkZGluZyB0byBtYWtlIGl0IGxvb2sgbW9yZSBzaW1pbGFyIG9uIGRpZmZlcmVudCBicm93c2Vyc1xyXG4gICAgICAgIGJyb3dzZXJTcGVjaWZpY0Ryb3Bkb3duUGFkZGluZzogZmFsc2UsXHJcblxyXG4gICAgICAgIC8vIG5hbWUgb2YgaWNvbiBzZXQ6IFwiZGVmYXVsdFwiLCBcIndoaXRlXCIsIFwiZ3JleVwiLCBcInJlZFwiXHJcbiAgICAgICAgaWNvblNldDogXCJ3aGl0ZVwiLFxyXG5cclxuICAgICAgICAvLyBQb3NzaWJsZSB2YWx1ZXM6IDEsIDIsIDMuIFRleHQgZm9yIGxpbmsgXCJSZXN0b3JlIG9yaWdpbmFsOiBMYXR2aWFuXCIgbWF5IGJlIG1hZGUgc2hvcnRlciBvciBsb25nZXJcclxuICAgICAgICAvLyB1c2VmdWwgdG8gYWRhcHQgdG8gc21hbGwgb3IgbGFyZ2Ugc2NyZWVuc1xyXG4gICAgICAgIHJlc3RvcmVPcmlnaW5hbExpbmtMZW5ndGg6IDIsXHJcblxyXG4gICAgICAgIC8vIGVuYWJsZSBvciBkaXNhYmxlIFwiU3VnZ2VzdCB0cmFuc2xhdGlvblwiIGxpbmsgaW4gcG9wdXAgdGhhdCBzaG93cyBvcmlnaW5hbCB0ZXh0IG9mIHRyYW5zbGF0ZWQgc2VudGVuY2VcclxuICAgICAgICBzdWdnZXN0VHJhbnNsYXRpb246ICR7dGhpcy5hbGxvd1N1Z2dlc3Rpb25zfSxcclxuXHJcbiAgICAgICAgLy8gc2hvdyBtZXNzYWdlIGJveCB3aGVuIGVycm9yIGhhcHBlbnM/XHJcbiAgICAgICAgc2hvd01lc3NhZ2VCb3hPbkVycm9yOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLy8gYXBwbGljYXRpb24gaWRlbnRpZmllclxyXG4gICAgICAgIGFwcElkOiBcIiR7dGhpcy5hcHBJZH1cIixcclxuXHJcbiAgICAgICAgLy8gc2VydmVyIHdpbGwgb25seSByZXR1cm4gc3lzdGVtcyB0aGF0IGFyZSBtZWFudCBmb3IgZ2l2ZW4gYXBwSWRcclxuICAgICAgICBmaWx0ZXJTeXN0ZW1zQnlBcHBJZDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8vIHNob3cgaGVscCBsaW5rXHJcbiAgICAgICAgZW5hYmxlSGVscDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8vIHNob3cgZmVlZGJhY2sgbGlua1xyXG4gICAgICAgIGVuYWJsZUZlZWRiYWNrOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLy8gYWxsb3dlZCBzeXN0ZW0gc3RhdHVzZXMsIGJ5IGRlZmF1bHQgb25seSBcInJ1bm5pbmdcIlxyXG4gICAgICAgIGFsbG93ZWRTeXN0ZW1TdGF0dXNlczogXCJydW5uaW5nXCIsXHJcblxyXG4gICAgICAgIC8vIHBhc3NlZCB0byB0cmFuc2xhdGlvbiBzZXJ2aWNlIGZvciBsb2dnaW5nLlxyXG4gICAgICAgIC8vIFwid2ViLWVtYmVkZGVkXCIgZm9yIHdpZGdldCB0aGF0IGlzIGVtYmVkZGVkIGluIGh0bWwgcGFnZSxcclxuICAgICAgICAvLyBcIndlYlwiIGZvciB3aWRnZXQgdGhhdCBjYW4gbG9hZCBhbmQgdHJhbnNsYXRlIGFueSB3ZWJzaXRlXHJcbiAgICAgICAgd2lkZ2V0OiBcIndlYlwiXHJcbiAgICB9O1xyXG4gICAgYDtcclxuICAgIGJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cIndpZGdldFwiIGNsYXNzPVwidGxkLXRyYW5zbGF0ZS13ZWJcIj5cclxuICA8ZGl2IGNsYXNzPVwidHJhbnNsYXRlLWNvbnRhaW5lci1oZWFkZXJcIj5cclxuICAgIDxhIGhyZWY9XCIvXCIgaWQ9XCJob21lLWxpbmtcIiBbYXR0ci50aXRsZV09XCInV0VCVFJBTlNMQVRFLkJBQ0snIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgIDxpbWcgW3NyY109XCJsb2dvTG9jYXRpb25cIiBhbHQ9XCJsb2dvXCI+XHJcbiAgICAgIDxsaWItY29tcGFueS1wcm9kdWN0ICpuZ0lmPVwiY29tcGFueSAmJiBwcm9kdWN0XCIgW2NvbXBhbnldPVwiY29tcGFueVwiIFtwcm9kdWN0XT1cInByb2R1Y3RcIj48L2xpYi1jb21wYW55LXByb2R1Y3Q+XHJcbiAgICA8L2E+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzLmx0LXNtXT1cIid0bGQtdHJhbnNsYXRlLW1vYmlsZSdcIj5cclxuXHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwiYWRkcmVzcy13cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJiYWNrLWJ0blwiPlxyXG5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImdvVG9Ib21lKClcIiBjb2xvcj1cImFjY2VudFwiIG1hdC1mbGF0LWJ1dHRvbiBbYXR0ci50aXRsZV09XCInV0VCVFJBTlNMQVRFLkJBQ0snIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBpbmxpbmU9dHJ1ZT5jaGV2cm9uX2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICA8ZGl2IGRhdGEtdGV4dD1cImFkZHJlc3NcIiBjbGFzcz1cIlwiPnt7J1dFQlRSQU5TTEFURS5BRERSRVNTJyB8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIxMDAlXCIgY2xhc3M9XCJhZGRyZXNzLWlucHV0XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInVybFwiICN1cmwgY2xhc3M9XCJ1cmwgdy0xMDBcIiBhdXRvZm9jdXM9XCJhdXRvZm9jdXNcIiBbKG5nTW9kZWwpXT1cInVybFRvVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImxvYWRCdXR0b25DbGlja2VkKClcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwibG9hZC1idG5cIj5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRCdXR0b25DbGlja2VkKClcIiBjb2xvcj1cImFjY2VudFwiIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCInV0VCVFJBTlNMQVRFLkxPQURfUEFHRScgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiIXVybFRvVHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBpbmxpbmU9dHJ1ZT5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0bGQtdHJhbnNsYXRlLXN3aXRjaGVyLXdyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBmeEZsZXg+XHJcbiAgICAgICAgICA8dGxkLXRyYW5zbGF0ZS1zd2l0Y2hlclxyXG4gICAgICAgICAgICAqbmdJZj1cInN3aXRjaGVyT3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFtpc0NvbGxlY3Rpb25zQWN0aXZhdGVkXT1cImlzQ29sbGVjdGlvbnNBY3RpdmF0ZWRcIlxyXG4gICAgICAgICAgICBbdXNlUGFyZW50V2lkdGhdPVwidXNlUGFyZW50V2lkdGhcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uQnV0dG9uRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbc2V0dGluZ3NdPVwic3dpdGNoZXJPcHRpb25zXCJcclxuICAgICAgICAgICAgW3Nob3dUcmFuc2xhdGVCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICBbaGlkZU9uU21hbGxTY3JlZW5zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW2hpZGVMYW5nTWVudUxhYmVsc109XCJoaWRlTGFuZ01lbnVMYWJlbHNcIlxyXG4gICAgICAgICAgICBbbWF4RGlzcGxheWVkTGFuZ3VhZ2VzXT1cIm1heERpc3BsYXllZExhbmd1YWdlc1wiXHJcbiAgICAgICAgICAgIFtzaG93RG9tYWluc1dpdGhMYW5ndWFnZU5hbWVdPVwic2hvd0RvbWFpbnNXaXRoTGFuZ3VhZ2VOYW1lXCJcclxuICAgICAgICAgICAgKG9uRG9tYWluQ2hhbmdlKT1cInN5c3RlbUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9uQWN0aW9uQ2xpY2spPVwidHJhbnNsYXRlQnV0dG9uQ2xpY2soKVwiXHJcbiAgICAgICAgICAgIChvbkxhbmd1YWdlU3dhcCk9XCJzd2FwTGFuZ3VhZ2VzKClcIlxyXG4gICAgICAgICAgICAob25Tb3VyY2VMYW5ndWFnZUNoYW5nZSk9XCJzb3VyY2VMYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9uVGFyZ2V0TGFuZ3VhZ2VDaGFuZ2UpPVwidGFyZ2V0TGFuZ3VhZ2VDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPC90bGQtdHJhbnNsYXRlLXN3aXRjaGVyPlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIGNsYXNzPVwiYWN0aW9uLWJ0bi13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDx0bGQtdHJhbnNsYXRlLWJ1dHRvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic2hvd1RyYW5zbGF0ZUJ0blwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzd2l0Y2hlci10cmFuc2xhdGUtYnV0dG9uXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uQnV0dG9uRGlzYWJsZWQgfHwgIXVybFRvVHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgIDwvdGxkLXRyYW5zbGF0ZS1idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93Q2FuY2VsXCIgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cImNhbmNlbCgpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImNhbmNlbC1idXR0b25cIj57eydXRUJUUkFOU0xBVEUuQ0FOQ0VMJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93UmVzdG9yZVwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJyZXN0b3JlKClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmVzdG9yZS1idXR0b25cIj57eydXRUJUUkFOU0xBVEUuUkVTVE9SRScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgaWQ9XCJ3ZWJzaXRlLWZyYW1lLWNvbnRhaW5lclwiPlxyXG4gICAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cInNob3dQcm9ncmVzc1wiIGNvbG9yPVwiYWNjZW50XCIgW21vZGVdPVwibW9kZVwiIFt2YWx1ZV09XCJwcm9ncmVzc1ZhbHVlXCI+XHJcbiAgICAgIDwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgICAgPGxpYi10bGQtbm90aWZpY2F0aW9uLW1lc3NhZ2UgW0BvcGVuQ2xvc2VBbmltYXRpb25dICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzOyBsZXQgaXggPSBpbmRleFwiIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxyXG4gICAgICAgIChjbG9zZUNsaWNrZWQpPVwicmVtb3ZlTWVzc2FnZShpeClcIj48L2xpYi10bGQtbm90aWZpY2F0aW9uLW1lc3NhZ2U+XHJcbiAgICAgICAgPGlmcmFtZSBpZD1cImxldHNtdC10cmFuc2xhdGUtcGFnZS1pZnJhbWVcIiBuYW1lPVwibGV0c210VHJhbnNsYXRlUGFnZUlmcmFtZVwiIHNyYz1cImFib3V0OmJsYW5rXCJcclxuICAgICAgICAgIFthdHRyLnNhbmRib3hdPVwic2FuZGJveFwiPjwvaWZyYW1lPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=