@bnsights/bbsf-controls 1.0.106 → 1.0.109

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 (221) hide show
  1. package/README.md +11 -0
  2. package/esm2020/bnsights-bbsf-controls.mjs +5 -0
  3. package/esm2020/lib/Shared/Components/app-base-component.mjs +226 -0
  4. package/esm2020/lib/Shared/Components/ng-tag-input.mjs +331 -0
  5. package/esm2020/lib/Shared/Directives/template-name.directive.mjs +18 -0
  6. package/{esm2015/lib/Shared/Models/DropdownListItem.js → esm2020/lib/Shared/Models/DropdownListItem.mjs} +1 -1
  7. package/esm2020/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +21 -0
  8. package/esm2020/lib/Shared/Pipes/bbsf-date.pipe.mjs +21 -0
  9. package/esm2020/lib/Shared/default_intl.mjs +29 -0
  10. package/esm2020/lib/Shared/services/ControlUtility.mjs +162 -0
  11. package/esm2020/lib/Shared/services/GlobalSettings.service.mjs +30 -0
  12. package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +24 -0
  13. package/esm2020/lib/Shared/services/render-component-service.service.mjs +30 -0
  14. package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +170 -0
  15. package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +262 -0
  16. package/esm2020/lib/controls/Calendar/Calendar.component.mjs +173 -0
  17. package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +117 -0
  18. package/esm2020/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +136 -0
  19. package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +223 -0
  20. package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +194 -0
  21. package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +447 -0
  22. package/esm2020/lib/controls/Form/Form.component.mjs +101 -0
  23. package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +226 -0
  24. package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +350 -0
  25. package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +325 -0
  26. package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +427 -0
  27. package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +429 -0
  28. package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +428 -0
  29. package/esm2020/lib/controls/Paging/JwPagination.component.mjs +156 -0
  30. package/esm2020/lib/controls/Paging/Paging.component.mjs +312 -0
  31. package/esm2020/lib/controls/Phone/Phone.component.mjs +129 -0
  32. package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +376 -0
  33. package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +109 -0
  34. package/esm2020/lib/controls/Recaptcha/Recaptcha.component.mjs +135 -0
  35. package/esm2020/lib/controls/Repeater/repeater/repeater.component.mjs +125 -0
  36. package/esm2020/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +750 -0
  37. package/esm2020/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +21 -0
  38. package/esm2020/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +108 -0
  39. package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +277 -0
  40. package/esm2020/lib/controls/TextArea/TextArea.component.mjs +196 -0
  41. package/esm2020/lib/controls/TextBox/TextBox.component.mjs +312 -0
  42. package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +90 -0
  43. package/esm2020/lib/controls/bbsf-controls.module.mjs +361 -0
  44. package/esm2020/lib/controls/page-header-component/page-header-component.component.mjs +37 -0
  45. package/{esm2015/public-api.js → esm2020/public-api.mjs} +2 -2
  46. package/fesm2015/{bnsights-bbsf-controls.js → bnsights-bbsf-controls.mjs} +2214 -2111
  47. package/fesm2015/bnsights-bbsf-controls.mjs.map +1 -0
  48. package/fesm2020/bnsights-bbsf-controls.mjs +9098 -0
  49. package/fesm2020/bnsights-bbsf-controls.mjs.map +1 -0
  50. package/index.d.ts +5 -0
  51. package/lib/Shared/Components/app-base-component.d.ts +7 -0
  52. package/lib/Shared/Components/ng-tag-input.d.ts +4 -1
  53. package/lib/Shared/Directives/template-name.directive.d.ts +3 -0
  54. package/lib/Shared/Models/DropdownListItem.d.ts +2 -2
  55. package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +3 -0
  56. package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +3 -0
  57. package/lib/Shared/default_intl.d.ts +3 -0
  58. package/lib/Shared/services/ControlUtility.d.ts +3 -0
  59. package/lib/Shared/services/GlobalSettings.service.d.ts +3 -0
  60. package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +3 -0
  61. package/lib/Shared/services/render-component-service.service.d.ts +3 -0
  62. package/lib/Shared/services/validationErrorMassage.service.d.ts +4 -3
  63. package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +3 -0
  64. package/lib/controls/Calendar/Calendar.component.d.ts +3 -0
  65. package/lib/controls/CheckBox/CheckBox.component.d.ts +3 -0
  66. package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +3 -0
  67. package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +3 -0
  68. package/lib/controls/DropdownList/DropdownList.component.d.ts +5 -0
  69. package/lib/controls/FileUplaod/FileUplaod.component.d.ts +3 -0
  70. package/lib/controls/Form/Form.component.d.ts +3 -0
  71. package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +3 -0
  72. package/lib/controls/ImageUpload/ImageUpload.component.d.ts +3 -0
  73. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +3 -0
  74. package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +3 -0
  75. package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +3 -0
  76. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +3 -0
  77. package/lib/controls/Paging/JwPagination.component.d.ts +3 -0
  78. package/lib/controls/Paging/Paging.component.d.ts +3 -0
  79. package/lib/controls/Phone/Phone.component.d.ts +3 -0
  80. package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +3 -0
  81. package/lib/controls/RadioButton/RadioButton.component.d.ts +3 -0
  82. package/lib/controls/Recaptcha/Recaptcha.component.d.ts +3 -0
  83. package/lib/controls/Repeater/repeater/repeater.component.d.ts +3 -0
  84. package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +3 -0
  85. package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +3 -0
  86. package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +3 -0
  87. package/lib/controls/TagsInput/TagsInput.component.d.ts +3 -0
  88. package/lib/controls/TextArea/TextArea.component.d.ts +3 -0
  89. package/lib/controls/TextBox/TextBox.component.d.ts +3 -0
  90. package/lib/controls/Toggleslide/toggleslide.component.d.ts +3 -0
  91. package/lib/controls/bbsf-controls.module.d.ts +71 -4
  92. package/lib/controls/page-header-component/page-header-component.component.d.ts +3 -0
  93. package/package.json +44 -48
  94. package/public-api.d.ts +1 -1
  95. package/bnsights-bbsf-controls-1.0.106.tgz +0 -0
  96. package/bnsights-bbsf-controls.d.ts +0 -5
  97. package/bnsights-bbsf-controls.metadata.json +0 -1
  98. package/bundles/bnsights-bbsf-controls.umd.js +0 -9636
  99. package/bundles/bnsights-bbsf-controls.umd.js.map +0 -1
  100. package/esm2015/bnsights-bbsf-controls.js +0 -6
  101. package/esm2015/lib/Shared/Components/app-base-component.js +0 -202
  102. package/esm2015/lib/Shared/Components/ng-tag-input.js +0 -323
  103. package/esm2015/lib/Shared/Directives/template-name.directive.js +0 -18
  104. package/esm2015/lib/Shared/Pipes/bbsf-date-time.pipe.js +0 -20
  105. package/esm2015/lib/Shared/Pipes/bbsf-date.pipe.js +0 -20
  106. package/esm2015/lib/Shared/default_intl.js +0 -29
  107. package/esm2015/lib/Shared/services/ControlUtility.js +0 -164
  108. package/esm2015/lib/Shared/services/GlobalSettings.service.js +0 -28
  109. package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +0 -22
  110. package/esm2015/lib/Shared/services/render-component-service.service.js +0 -30
  111. package/esm2015/lib/Shared/services/validationErrorMassage.service.js +0 -172
  112. package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +0 -266
  113. package/esm2015/lib/controls/Calendar/Calendar.component.js +0 -177
  114. package/esm2015/lib/controls/CheckBox/CheckBox.component.js +0 -118
  115. package/esm2015/lib/controls/ConfirmationModal/ConfirmationModal.component.js +0 -139
  116. package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +0 -227
  117. package/esm2015/lib/controls/DropdownList/DropdownList.component.js +0 -192
  118. package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +0 -447
  119. package/esm2015/lib/controls/Form/Form.component.js +0 -106
  120. package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +0 -226
  121. package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +0 -347
  122. package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +0 -325
  123. package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +0 -429
  124. package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +0 -434
  125. package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +0 -433
  126. package/esm2015/lib/controls/Paging/JwPagination.component.js +0 -129
  127. package/esm2015/lib/controls/Paging/Paging.component.js +0 -312
  128. package/esm2015/lib/controls/Phone/Phone.component.js +0 -129
  129. package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +0 -371
  130. package/esm2015/lib/controls/RadioButton/RadioButton.component.js +0 -111
  131. package/esm2015/lib/controls/Recaptcha/Recaptcha.component.js +0 -135
  132. package/esm2015/lib/controls/Repeater/repeater/repeater.component.js +0 -117
  133. package/esm2015/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.js +0 -748
  134. package/esm2015/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.js +0 -19
  135. package/esm2015/lib/controls/Repeater/repeater-table/repeater-table.component.js +0 -108
  136. package/esm2015/lib/controls/TagsInput/TagsInput.component.js +0 -278
  137. package/esm2015/lib/controls/TextArea/TextArea.component.js +0 -197
  138. package/esm2015/lib/controls/TextBox/TextBox.component.js +0 -309
  139. package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +0 -90
  140. package/esm2015/lib/controls/bbsf-controls.module.js +0 -240
  141. package/esm2015/lib/controls/page-header-component/page-header-component.component.js +0 -32
  142. package/fesm2015/bnsights-bbsf-controls.js.map +0 -1
  143. package/src/lib/assets/.gitkeep +0 -0
  144. /package/{esm2015/lib/Shared/Enums/CalendarView.js → esm2020/lib/Shared/Enums/CalendarView.mjs} +0 -0
  145. /package/{esm2015/lib/Shared/Enums/ControlLayout.js → esm2020/lib/Shared/Enums/ControlLayout.mjs} +0 -0
  146. /package/{esm2015/lib/Shared/Enums/Countries.js → esm2020/lib/Shared/Enums/Countries.mjs} +0 -0
  147. /package/{esm2015/lib/Shared/Enums/Enums.js → esm2020/lib/Shared/Enums/Enums.mjs} +0 -0
  148. /package/{esm2015/lib/Shared/Enums/FileType.js → esm2020/lib/Shared/Enums/FileType.mjs} +0 -0
  149. /package/{esm2015/lib/Shared/Enums/FilterType.js → esm2020/lib/Shared/Enums/FilterType.mjs} +0 -0
  150. /package/{esm2015/lib/Shared/Enums/FontSize.js → esm2020/lib/Shared/Enums/FontSize.mjs} +0 -0
  151. /package/{esm2015/lib/Shared/Enums/ForceDirection.js → esm2020/lib/Shared/Enums/ForceDirection.mjs} +0 -0
  152. /package/{esm2015/lib/Shared/Enums/IconPosition.js → esm2020/lib/Shared/Enums/IconPosition.mjs} +0 -0
  153. /package/{esm2015/lib/Shared/Enums/ImageType.js → esm2020/lib/Shared/Enums/ImageType.mjs} +0 -0
  154. /package/{esm2015/lib/Shared/Enums/InputType.js → esm2020/lib/Shared/Enums/InputType.mjs} +0 -0
  155. /package/{esm2015/lib/Shared/Enums/Insert.js → esm2020/lib/Shared/Enums/Insert.mjs} +0 -0
  156. /package/{esm2015/lib/Shared/Enums/LanguageMode.js → esm2020/lib/Shared/Enums/LanguageMode.mjs} +0 -0
  157. /package/{esm2015/lib/Shared/Enums/LanguageValidation.js → esm2020/lib/Shared/Enums/LanguageValidation.mjs} +0 -0
  158. /package/{esm2015/lib/Shared/Enums/Misc.js → esm2020/lib/Shared/Enums/Misc.mjs} +0 -0
  159. /package/{esm2015/lib/Shared/Enums/PagingActionMode.js → esm2020/lib/Shared/Enums/PagingActionMode.mjs} +0 -0
  160. /package/{esm2015/lib/Shared/Enums/Para.js → esm2020/lib/Shared/Enums/Para.mjs} +0 -0
  161. /package/{esm2015/lib/Shared/Enums/PickerType.js → esm2020/lib/Shared/Enums/PickerType.mjs} +0 -0
  162. /package/{esm2015/lib/Shared/Enums/SelectMode.js → esm2020/lib/Shared/Enums/SelectMode.mjs} +0 -0
  163. /package/{esm2015/lib/Shared/Enums/StartView.js → esm2020/lib/Shared/Enums/StartView.mjs} +0 -0
  164. /package/{esm2015/lib/Shared/Enums/Style.js → esm2020/lib/Shared/Enums/Style.mjs} +0 -0
  165. /package/{esm2015/lib/Shared/Enums/StyleConfirmationMode.js → esm2020/lib/Shared/Enums/StyleConfirmationMode.mjs} +0 -0
  166. /package/{esm2015/lib/Shared/Enums/TagInputView.js → esm2020/lib/Shared/Enums/TagInputView.mjs} +0 -0
  167. /package/{esm2015/lib/Shared/Enums/menu-list-enum.js → esm2020/lib/Shared/Enums/menu-list-enum.mjs} +0 -0
  168. /package/{esm2015/lib/Shared/Models/Attribute.js → esm2020/lib/Shared/Models/Attribute.mjs} +0 -0
  169. /package/{esm2015/lib/Shared/Models/AutocompleteDTO.js → esm2020/lib/Shared/Models/AutocompleteDTO.mjs} +0 -0
  170. /package/{esm2015/lib/Shared/Models/AutocompleteOptions.js → esm2020/lib/Shared/Models/AutocompleteOptions.mjs} +0 -0
  171. /package/{esm2015/lib/Shared/Models/CalendarEventDTO.js → esm2020/lib/Shared/Models/CalendarEventDTO.mjs} +0 -0
  172. /package/{esm2015/lib/Shared/Models/CalendarOptions.js → esm2020/lib/Shared/Models/CalendarOptions.mjs} +0 -0
  173. /package/{esm2015/lib/Shared/Models/CancelDTO.js → esm2020/lib/Shared/Models/CancelDTO.mjs} +0 -0
  174. /package/{esm2015/lib/Shared/Models/CaptchaStyle.js → esm2020/lib/Shared/Models/CaptchaStyle.mjs} +0 -0
  175. /package/{esm2015/lib/Shared/Models/CheckBoxOptions.js → esm2020/lib/Shared/Models/CheckBoxOptions.mjs} +0 -0
  176. /package/{esm2015/lib/Shared/Models/ConfirmationModalOptions.js → esm2020/lib/Shared/Models/ConfirmationModalOptions.mjs} +0 -0
  177. /package/{esm2015/lib/Shared/Models/ControlOptionsBase.js → esm2020/lib/Shared/Models/ControlOptionsBase.mjs} +0 -0
  178. /package/{esm2015/lib/Shared/Models/CustomValidation.js → esm2020/lib/Shared/Models/CustomValidation.mjs} +0 -0
  179. /package/{esm2015/lib/Shared/Models/DropdownOptions.js → esm2020/lib/Shared/Models/DropdownOptions.mjs} +0 -0
  180. /package/{esm2015/lib/Shared/Models/EditPersonalImage.js → esm2020/lib/Shared/Models/EditPersonalImage.mjs} +0 -0
  181. /package/{esm2015/lib/Shared/Models/EnglishArabicDTO.js → esm2020/lib/Shared/Models/EnglishArabicDTO.mjs} +0 -0
  182. /package/{esm2015/lib/Shared/Models/FileDTO.js → esm2020/lib/Shared/Models/FileDTO.mjs} +0 -0
  183. /package/{esm2015/lib/Shared/Models/FileUploadModel.js → esm2020/lib/Shared/Models/FileUploadModel.mjs} +0 -0
  184. /package/{esm2015/lib/Shared/Models/FileUploadOptions.js → esm2020/lib/Shared/Models/FileUploadOptions.mjs} +0 -0
  185. /package/{esm2015/lib/Shared/Models/FilterItem.js → esm2020/lib/Shared/Models/FilterItem.mjs} +0 -0
  186. /package/{esm2015/lib/Shared/Models/FormOptions.js → esm2020/lib/Shared/Models/FormOptions.mjs} +0 -0
  187. /package/{esm2015/lib/Shared/Models/HtmlEditorOptions.js → esm2020/lib/Shared/Models/HtmlEditorOptions.mjs} +0 -0
  188. /package/{esm2015/lib/Shared/Models/ImageUploadOptions.js → esm2020/lib/Shared/Models/ImageUploadOptions.mjs} +0 -0
  189. /package/{esm2015/lib/Shared/Models/MapAutoCompleteOptions.js → esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs} +0 -0
  190. /package/{esm2015/lib/Shared/Models/MapAutocompleteDTO.js → esm2020/lib/Shared/Models/MapAutocompleteDTO.mjs} +0 -0
  191. /package/{esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js → esm2020/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs} +0 -0
  192. /package/{esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js → esm2020/lib/Shared/Models/MultiLingualTextAreaOptions.mjs} +0 -0
  193. /package/{esm2015/lib/Shared/Models/MultilingualControlOptionsBase.js → esm2020/lib/Shared/Models/MultilingualControlOptionsBase.mjs} +0 -0
  194. /package/{esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js → esm2020/lib/Shared/Models/MultilingualTextBoxOptions.mjs} +0 -0
  195. /package/{esm2015/lib/Shared/Models/MultipleFileUploadModel.js → esm2020/lib/Shared/Models/MultipleFileUploadModel.mjs} +0 -0
  196. /package/{esm2015/lib/Shared/Models/PagingDTO.js → esm2020/lib/Shared/Models/PagingDTO.mjs} +0 -0
  197. /package/{esm2015/lib/Shared/Models/PagingOptions.js → esm2020/lib/Shared/Models/PagingOptions.mjs} +0 -0
  198. /package/{esm2015/lib/Shared/Models/PagingPayload.js → esm2020/lib/Shared/Models/PagingPayload.mjs} +0 -0
  199. /package/{esm2015/lib/Shared/Models/PhoneOptions.js → esm2020/lib/Shared/Models/PhoneOptions.mjs} +0 -0
  200. /package/{esm2015/lib/Shared/Models/ProfileImageUploadOptions.js → esm2020/lib/Shared/Models/ProfileImageUploadOptions.mjs} +0 -0
  201. /package/{esm2015/lib/Shared/Models/ProfilePictureDTO.js → esm2020/lib/Shared/Models/ProfilePictureDTO.mjs} +0 -0
  202. /package/{esm2015/lib/Shared/Models/RadioButtonItem.js → esm2020/lib/Shared/Models/RadioButtonItem.mjs} +0 -0
  203. /package/{esm2015/lib/Shared/Models/RadioButtonOptions.js → esm2020/lib/Shared/Models/RadioButtonOptions.mjs} +0 -0
  204. /package/{esm2015/lib/Shared/Models/RangeNumber.js → esm2020/lib/Shared/Models/RangeNumber.mjs} +0 -0
  205. /package/{esm2015/lib/Shared/Models/Recaptcha.js → esm2020/lib/Shared/Models/Recaptcha.mjs} +0 -0
  206. /package/{esm2015/lib/Shared/Models/RecaptchaOptions.js → esm2020/lib/Shared/Models/RecaptchaOptions.mjs} +0 -0
  207. /package/{esm2015/lib/Shared/Models/RepeaterField.js → esm2020/lib/Shared/Models/RepeaterField.mjs} +0 -0
  208. /package/{esm2015/lib/Shared/Models/RepeaterOptions.js → esm2020/lib/Shared/Models/RepeaterOptions.mjs} +0 -0
  209. /package/{esm2015/lib/Shared/Models/SaveDTO.js → esm2020/lib/Shared/Models/SaveDTO.mjs} +0 -0
  210. /package/{esm2015/lib/Shared/Models/TagsInputDTO.js → esm2020/lib/Shared/Models/TagsInputDTO.mjs} +0 -0
  211. /package/{esm2015/lib/Shared/Models/TagsInputOptions.js → esm2020/lib/Shared/Models/TagsInputOptions.mjs} +0 -0
  212. /package/{esm2015/lib/Shared/Models/TextAreaOptions.js → esm2020/lib/Shared/Models/TextAreaOptions.mjs} +0 -0
  213. /package/{esm2015/lib/Shared/Models/TextBoxOptions.js → esm2020/lib/Shared/Models/TextBoxOptions.mjs} +0 -0
  214. /package/{esm2015/lib/Shared/Models/ToggleslideOptions.js → esm2020/lib/Shared/Models/ToggleslideOptions.mjs} +0 -0
  215. /package/{esm2015/lib/Shared/Models/UploadPersonalImage.js → esm2020/lib/Shared/Models/UploadPersonalImage.mjs} +0 -0
  216. /package/{esm2015/lib/Shared/Models/bread-crumb.js → esm2020/lib/Shared/Models/bread-crumb.mjs} +0 -0
  217. /package/{esm2015/lib/Shared/Models/control-filter-Item.js → esm2020/lib/Shared/Models/control-filter-Item.mjs} +0 -0
  218. /package/{esm2015/lib/Shared/Models/datePickerOptions.js → esm2020/lib/Shared/Models/datePickerOptions.mjs} +0 -0
  219. /package/{esm2015/lib/Shared/Models/filter-options.js → esm2020/lib/Shared/Models/filter-options.mjs} +0 -0
  220. /package/{esm2015/lib/Shared/Models/page-header-options.js → esm2020/lib/Shared/Models/page-header-options.mjs} +0 -0
  221. /package/{esm2015/lib/Shared/config/environment.js → esm2020/lib/Shared/config/environment.mjs} +0 -0
@@ -0,0 +1,427 @@
1
+ import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
2
+ import { FormControl, Validators, FormGroup } from '@angular/forms';
3
+ import { InputType } from '../../Shared/Enums/InputType';
4
+ import { EnglishArabicDTO } from '../../Shared/Models/EnglishArabicDTO';
5
+ import { LanguageMode } from '../../Shared/Enums/LanguageMode';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "../../Shared/services/ControlUtility";
9
+ import * as i3 from "@bnsights/bbsf-utilities";
10
+ import * as i4 from "../../Shared/services/GlobalSettings.service";
11
+ import * as i5 from "@angular/common";
12
+ import * as i6 from "@angular/cdk/bidi";
13
+ import * as i7 from "ngx-intl-tel-input";
14
+ import * as i8 from "@kolkov/angular-editor";
15
+ export class MultiLingualHtmlEditorComponent {
16
+ constructor(MultiLingualHtmlEditorFormControlHost, controlContainer, controlUtility, UtilityService, controlValidationService, globalSettings) {
17
+ this.MultiLingualHtmlEditorFormControlHost = MultiLingualHtmlEditorFormControlHost;
18
+ this.controlContainer = controlContainer;
19
+ this.controlUtility = controlUtility;
20
+ this.UtilityService = UtilityService;
21
+ this.controlValidationService = controlValidationService;
22
+ this.globalSettings = globalSettings;
23
+ this.OnChange = new EventEmitter();
24
+ this.CurrentLanguage = "";
25
+ this.ArabicValidationRules = [];
26
+ this.ArabicValidationRulesasync = [];
27
+ this.EnglishValidationRules = [];
28
+ this.EnglishValidationRulesasync = [];
29
+ this.markAllAsTouched = false;
30
+ this.validationRules = [];
31
+ this.validationRulesasync = [];
32
+ this.ArabicLetterOnly = "";
33
+ this.EnglishLetterOnly = "";
34
+ this.englishValue = null;
35
+ this.arabicValue = null;
36
+ this.resetError = () => {
37
+ this.controlValidationService.removeGlobalError();
38
+ };
39
+ //External Method
40
+ this.RemoveRequiredValidation = () => {
41
+ this.controlUtility.RemoveRequiredValidation(this.EnglishHtmlEditorFormControl, this.EnglishValidationRules, this.options);
42
+ this.controlUtility.RemoveRequiredValidation(this.ArabicHtmlEditorFormControl, this.ArabicValidationRules, this.options);
43
+ };
44
+ //External Method
45
+ this.AddRequiredValidation = () => {
46
+ this.controlUtility.AddRequiredValidation(this.EnglishHtmlEditorFormControl, this.EnglishValidationRules, this.options);
47
+ this.controlUtility.AddRequiredValidation(this.ArabicHtmlEditorFormControl, this.ArabicValidationRules, this.options);
48
+ };
49
+ //External Method
50
+ this.RemoveCustomValidation = (CustomValidation) => {
51
+ this.controlUtility.RemoveCustomValidation(this.EnglishHtmlEditorFormControl, this.EnglishValidationRules, CustomValidation);
52
+ this.controlUtility.RemoveCustomValidation(this.ArabicHtmlEditorFormControl, this.ArabicValidationRules, CustomValidation);
53
+ };
54
+ //External Method
55
+ this.AddCustomValidation = (CustomValidation) => {
56
+ this.controlUtility.AddCustomValidation(this.EnglishHtmlEditorFormControl, this.EnglishValidationRules, CustomValidation);
57
+ this.controlUtility.AddCustomValidation(this.ArabicHtmlEditorFormControl, this.ArabicValidationRules, CustomValidation);
58
+ };
59
+ //External Method
60
+ this.IsValid = () => {
61
+ this.controlUtility.IsValid(this.EnglishHtmlEditorFormControl);
62
+ this.controlUtility.IsValid(this.ArabicHtmlEditorFormControl);
63
+ };
64
+ MultiLingualHtmlEditorComponent.controlContainerstatic = this.controlContainer;
65
+ }
66
+ ;
67
+ getCustomErrorsMassages() {
68
+ this.ArabicLetterOnly = this.UtilityService.getResourceValue("ArabicLetterOnly");
69
+ this.EnglishLetterOnly = this.UtilityService.getResourceValue("EnglishLetterOnly");
70
+ }
71
+ async ngOnInit() {
72
+ if (!this.options.ViewType)
73
+ this.options.ViewType = this.globalSettings.ViewType;
74
+ if (!this.options.LanguageMode)
75
+ this.options.LanguageMode = this.globalSettings.LanguageMode;
76
+ this.editorEnglishConfig = {
77
+ editable: !this.options.IsDisabled,
78
+ spellcheck: true,
79
+ height: this.options.Height.toString(),
80
+ minHeight: this.options.Height.toString(),
81
+ maxHeight: 'auto',
82
+ width: 'auto',
83
+ minWidth: 'auto',
84
+ translate: 'yes',
85
+ enableToolbar: true,
86
+ showToolbar: true,
87
+ placeholder: this.options.EnglishPlaceholder,
88
+ defaultParagraphSeparator: '',
89
+ defaultFontName: '',
90
+ defaultFontSize: '',
91
+ fonts: [
92
+ { class: 'arial', name: 'Arial' },
93
+ { class: 'times-new-roman', name: 'Times New Roman' },
94
+ { class: 'calibri', name: 'Calibri' },
95
+ { class: 'comic-sans-ms', name: 'Comic Sans MS' }
96
+ ],
97
+ customClasses: [
98
+ {
99
+ name: 'quote',
100
+ class: 'quote',
101
+ },
102
+ {
103
+ name: 'redText',
104
+ class: 'redText'
105
+ },
106
+ {
107
+ name: 'titleText',
108
+ class: 'titleText',
109
+ tag: 'h1',
110
+ },
111
+ ],
112
+ uploadUrl: 'v1/image',
113
+ uploadWithCredentials: false,
114
+ sanitize: false,
115
+ toolbarPosition: 'top',
116
+ toolbarHiddenButtons: []
117
+ };
118
+ this.editorArabicConfig = {
119
+ editable: !this.options.IsDisabled,
120
+ spellcheck: true,
121
+ height: this.options.Height.toString(),
122
+ minHeight: this.options.Height.toString(),
123
+ maxHeight: 'auto',
124
+ width: 'auto',
125
+ minWidth: 'auto',
126
+ translate: 'yes',
127
+ enableToolbar: true,
128
+ showToolbar: true,
129
+ placeholder: this.options.ArabicPlaceholder,
130
+ defaultParagraphSeparator: '',
131
+ defaultFontName: '',
132
+ defaultFontSize: '',
133
+ fonts: [
134
+ { class: 'arial', name: 'Arial' },
135
+ { class: 'times-new-roman', name: 'Times New Roman' },
136
+ { class: 'calibri', name: 'Calibri' },
137
+ { class: 'comic-sans-ms', name: 'Comic Sans MS' }
138
+ ],
139
+ customClasses: [
140
+ {
141
+ name: 'quote',
142
+ class: 'quote',
143
+ },
144
+ {
145
+ name: 'redText',
146
+ class: 'redText'
147
+ },
148
+ {
149
+ name: 'titleText',
150
+ class: 'titleText',
151
+ tag: 'h1',
152
+ },
153
+ ],
154
+ uploadUrl: 'v1/image',
155
+ uploadWithCredentials: false,
156
+ sanitize: false,
157
+ toolbarPosition: 'top',
158
+ toolbarHiddenButtons: []
159
+ };
160
+ this.controlValidationService.isCreatedBefor = false;
161
+ this.CurrentLanguage = await this.UtilityService.getCurrentLanguage();
162
+ // UtilityService.Translator.onLangChange.subscribe((event: LangChangeEvent) => {
163
+ // this.CurrentLanguage = event.lang
164
+ // this.showInputUsingLanguageMode();
165
+ // });
166
+ // this.miscList = this.options.ToolsList_Misc != null ? this.options.ToolsList_Misc : ['codeview', 'undo', 'redo'];
167
+ // this.styleList = this.options.ToolsList_Style != null ? this.options.ToolsList_Style : ['bold', 'italic', 'underline', 'clear']
168
+ // this.fontsizeList = this.options.ToolsList_FontSize != null ? this.options.ToolsList_FontSize : ['fontname', 'fontsize', 'color']
169
+ // this.paraList = this.options.ToolsList_Para != null ? this.options.ToolsList_Para : ['style', 'ul', 'ol', 'paragraph', 'height']
170
+ // this.insertList = this.options.ToolsList_Insert != null ? this.options.ToolsList_Insert : ['table', 'picture', 'link', 'video', 'hr']
171
+ // this.ArabicConfig = {
172
+ // placeholder: this.options.ArabicPlaceholder,
173
+ // height: `${this.options.Height}px`,
174
+ // toolbar: [
175
+ // ['misc', this.miscList],
176
+ // ['style', this.styleList],
177
+ // ['fontsize', this.fontsizeList],
178
+ // ['para', this.paraList],
179
+ // ['insert', this.insertList]
180
+ // ],
181
+ // fontNames: ['Helvetica', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Roboto', 'Times']
182
+ // }
183
+ // this.EnglishConfig = {
184
+ // placeholder: this.options.EnglishPlaceholder,
185
+ // height: `${this.options.Height}px`,
186
+ // toolbar: [
187
+ // ['misc', this.miscList],
188
+ // ['style', this.styleList],
189
+ // ['fontsize', this.fontsizeList],
190
+ // ['para', this.paraList],
191
+ // ['insert', this.insertList]
192
+ // ],
193
+ // fontNames: ['Helvetica', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Roboto', 'Times']
194
+ // }
195
+ this.MultilingualHtmlEditorgroup = new FormGroup({});
196
+ ;
197
+ this.MultilingualHtmlEditorgroup.addControl("Arabic", new FormControl(''));
198
+ this.MultilingualHtmlEditorgroup.addControl("English", new FormControl(''));
199
+ this.ArabicHtmlEditorFormControl = this.MultilingualHtmlEditorgroup.controls["Arabic"]; // new FormControl('',validationRules);
200
+ this.EnglishHtmlEditorFormControl = this.MultilingualHtmlEditorgroup.controls["English"]; // new FormControl('',validationRules);
201
+ this.group.addControl(this.options.Name, new FormGroup(this.MultilingualHtmlEditorgroup.controls));
202
+ this.getCustomErrorsMassages();
203
+ switch (this.options.Type) {
204
+ case InputType.Email:
205
+ this.EnglishValidationRules.push(Validators.compose([
206
+ this.controlUtility.patternValidator(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/, { EmailValidationKey: "" }),
207
+ ]));
208
+ this.ArabicValidationRules.push(Validators.compose([
209
+ this.controlUtility.patternValidator(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/, { EmailValidationKey: "" }),
210
+ ]));
211
+ break;
212
+ case InputType.Number:
213
+ this.EnglishValidationRules.push(Validators.pattern('^[0-9]+(\.?[0-9]+)?$'));
214
+ this.ArabicValidationRules.push(Validators.pattern('^[0-9]+(\.?[0-9]+)?$'));
215
+ break;
216
+ }
217
+ if (this.options.CustomValidation.length > 0) {
218
+ let Validations = this.options.CustomValidation;
219
+ for (let index = 0; index < Validations.length; index++) {
220
+ const Validation = Validations[index];
221
+ this.EnglishValidationRules.push(Validation.functionBody);
222
+ this.ArabicValidationRules.push(Validation.functionBody);
223
+ }
224
+ }
225
+ if (this.options.MinLength > 0) {
226
+ this.ArabicValidationRules.push(Validators.minLength(this.options.MinLength));
227
+ this.EnglishValidationRules.push(Validators.minLength(this.options.MinLength));
228
+ }
229
+ if (this.options.MaxLength > 0) {
230
+ this.EnglishValidationRules.push(Validators.maxLength(this.options.MaxLength));
231
+ this.ArabicValidationRules.push(Validators.maxLength(this.options.MaxLength));
232
+ }
233
+ if (this.options.LabelKey != null && this.options.LabelKey != "") {
234
+ this.options.ArabicLabelValue = this.UtilityService.getResourceValue(this.options.LabelKey) + " " + this.UtilityService.getResourceValue("InArabic");
235
+ this.options.EnglishLabelValue = this.UtilityService.getResourceValue(this.options.LabelKey) + " " + this.UtilityService.getResourceValue("InEnglish");
236
+ }
237
+ else {
238
+ if (this.options.ArabicLabelKey != null && this.options.ArabicLabelKey != "")
239
+ this.options.ArabicLabelValue = this.UtilityService.getResourceValue(this.options.ArabicLabelKey);
240
+ if (this.options.EnglishLabelKey != null && this.options.EnglishLabelKey != "")
241
+ this.options.EnglishLabelValue = this.UtilityService.getResourceValue(this.options.EnglishLabelKey);
242
+ }
243
+ this.showInputUsingLanguageMode();
244
+ this.ArabicValidationRules.push(Validators.compose([
245
+ this.controlUtility.patternValidator(/^[\u0621-\u064A\u0660-\u0669 ]+$/, { ArabicLetterOnly: this.ArabicLetterOnly }),
246
+ ]));
247
+ this.EnglishValidationRules.push(Validators.compose([
248
+ this.controlUtility.patternValidator(/^[~`!@#$%^&*()‘’“”_+=[\]\\{}|;':",.\/<>?a-zA-Z0-9- ]*$/, { EnglishLetterOnly: this.EnglishLetterOnly }),
249
+ ]));
250
+ // this.ArabicHtmlEditorFormControl.setValidators(this.ArabicValidationRules);
251
+ // this.ArabicHtmlEditorFormControl.setAsyncValidators(this.ArabicValidationRulesasync);
252
+ // this.EnglishHtmlEditorFormControl.setValidators(this.EnglishValidationRules);
253
+ // this.EnglishHtmlEditorFormControl.setAsyncValidators(this.EnglishValidationRulesasync);
254
+ if (this.options.IsDisabled) {
255
+ this.EnglishHtmlEditorFormControl.disable();
256
+ this.ArabicHtmlEditorFormControl.disable();
257
+ }
258
+ this.ArabicHtmlEditorFormControl.setValue(this.options.Value.Arabic);
259
+ this.EnglishHtmlEditorFormControl.setValue(this.options.Value.English);
260
+ this.MultiLingualHtmlEditorFormControlHost.ngSubmit.subscribe((value) => {
261
+ this.group.markAllAsTouched();
262
+ this.markAllAsTouched = true;
263
+ });
264
+ }
265
+ ngAfterViewChecked() {
266
+ let dir = this.UtilityService.getCurrentLanguage() == "en" ? "ltr" : "rtl";
267
+ var angularEditor = document.getElementsByClassName("angular-editor-toolbar ng-star-inserted");
268
+ for (let index = 0; index < angularEditor.length; index++) {
269
+ const element = angularEditor[index];
270
+ element.setAttribute("dir", dir);
271
+ }
272
+ }
273
+ onTextChange(type) {
274
+ if (type == "en") {
275
+ this.MultilingualHtmlEditorgroup.controls["English"].setValue(this.MultilingualHtmlEditorgroup.controls["English"].value.trim());
276
+ this.englishValue = this.MultilingualHtmlEditorgroup.controls["English"].value == null ? "" : this.MultilingualHtmlEditorgroup.controls["English"].value;
277
+ if (this.englishValue) {
278
+ this.EnglishHtmlEditorFormControl.setValue(this.englishValue);
279
+ let originalValue = this.englishValue;
280
+ if (this.options.PatchFunction && this.options.PatchPath && this.EnglishHtmlEditorFormControl.valid) {
281
+ this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
282
+ }
283
+ }
284
+ let EngliswordCountArray = this.EnglishHtmlEditorFormControl.value.split(" ").length;
285
+ if (EngliswordCountArray > 0) {
286
+ if (EngliswordCountArray > this.options.MaxWordCount)
287
+ this.MultilingualHtmlEditorgroup.controls["English"].setErrors({ MaxWordCountValidationKey: this.options.MaxWordCount });
288
+ this.MultilingualHtmlEditorgroup.controls["English"].markAsTouched();
289
+ this.MultilingualHtmlEditorgroup.controls["English"].invalid;
290
+ }
291
+ }
292
+ if (type == "ar") {
293
+ this.MultilingualHtmlEditorgroup.controls["Arabic"].setValue(this.MultilingualHtmlEditorgroup.controls["Arabic"].value.trim());
294
+ this.arabicValue = this.MultilingualHtmlEditorgroup.controls["Arabic"].value == null ? "" : this.MultilingualHtmlEditorgroup.controls["Arabic"].value;
295
+ if (this.arabicValue) {
296
+ this.ArabicHtmlEditorFormControl.setValue(this.arabicValue);
297
+ let originalValue = this.arabicValue;
298
+ if (this.options.PatchFunction && this.options.PatchPath && this.ArabicHtmlEditorFormControl.valid) {
299
+ this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
300
+ }
301
+ }
302
+ let ArabicwordCountArray = this.ArabicHtmlEditorFormControl.value.split(" ").length;
303
+ if (ArabicwordCountArray > 0) {
304
+ if (ArabicwordCountArray > this.options.MaxWordCount)
305
+ this.MultilingualHtmlEditorgroup.controls["Arabic"].setErrors({ MaxWordCountValidationKey: this.options.MaxWordCount });
306
+ this.MultilingualHtmlEditorgroup.controls["Arabic"].markAsTouched();
307
+ this.MultilingualHtmlEditorgroup.controls["Arabic"].invalid;
308
+ }
309
+ }
310
+ let mulitLangModel = new EnglishArabicDTO();
311
+ mulitLangModel.Arabic = this.arabicValue;
312
+ mulitLangModel.English = this.englishValue;
313
+ this.OnChange.emit(mulitLangModel);
314
+ if (this.arabicValue && this.englishValue)
315
+ this.group.get(this.options.Name).setValue(mulitLangModel);
316
+ //Use this line to enable two way binding.
317
+ this.options.Value = mulitLangModel;
318
+ }
319
+ showGlobalError() {
320
+ this.controlUtility.showGlobalError();
321
+ }
322
+ getErrorValidation(ErrorList) {
323
+ if (this.markAllAsTouched && this.group.invalid) {
324
+ this.showGlobalError();
325
+ this.markAllAsTouched = false;
326
+ }
327
+ return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
328
+ }
329
+ showInputUsingLanguageMode() {
330
+ this.ArabicValidationRules = this.ArabicValidationRules.filter(item => item !== Validators.required);
331
+ this.EnglishValidationRules = this.EnglishValidationRules.filter(item => item !== Validators.required);
332
+ this.ArabicHtmlEditorFormControl.clearValidators();
333
+ this.EnglishHtmlEditorFormControl.clearValidators();
334
+ this.ArabicHtmlEditorFormControl.updateValueAndValidity();
335
+ this.EnglishHtmlEditorFormControl.updateValueAndValidity();
336
+ switch (this.options.LanguageMode) {
337
+ case LanguageMode.Both_Languages_are_visible:
338
+ this.ShowArabicHtmlEditor = true;
339
+ this.ShowEnglishHtmlEditor = true;
340
+ if (this.options.IsRequired == true) {
341
+ this.EnglishValidationRules.push(Validators.required);
342
+ this.ArabicValidationRules.push(Validators.required);
343
+ this.IsShowAsteriskInArabic = true;
344
+ this.IsShowAsteriskInEnglish = true;
345
+ }
346
+ break;
347
+ case LanguageMode.Arabic_Language_only_is_visible:
348
+ this.ShowArabicHtmlEditor = true;
349
+ break;
350
+ case LanguageMode.English_Language_only_is_visible:
351
+ this.ShowEnglishHtmlEditor = true;
352
+ break;
353
+ case LanguageMode.Both_Languages_are_visible_but_only_current_language_is_required:
354
+ this.ShowArabicHtmlEditor = true;
355
+ this.ShowEnglishHtmlEditor = true;
356
+ if (this.CurrentLanguage == 'ar') {
357
+ if (this.options.IsRequired == true) {
358
+ this.ArabicValidationRules.push(Validators.required);
359
+ this.IsShowAsteriskInArabic = true;
360
+ }
361
+ }
362
+ if (this.CurrentLanguage == 'en') {
363
+ if (this.options.IsRequired == true) {
364
+ this.EnglishValidationRules.push(Validators.required);
365
+ this.IsShowAsteriskInEnglish = true;
366
+ }
367
+ }
368
+ break;
369
+ case LanguageMode.Both_Languages_but_only_Arabic_is_required:
370
+ this.ShowArabicHtmlEditor = true;
371
+ this.ShowEnglishHtmlEditor = true;
372
+ if (this.options.IsRequired == true) {
373
+ this.ArabicValidationRules.push(Validators.required);
374
+ this.IsShowAsteriskInArabic = true;
375
+ }
376
+ break;
377
+ case LanguageMode.Both_Languages_but_only_English_is_required:
378
+ this.ShowArabicHtmlEditor = true;
379
+ this.ShowEnglishHtmlEditor = true;
380
+ if (this.options.IsRequired == true) {
381
+ this.EnglishValidationRules.push(Validators.required);
382
+ this.IsShowAsteriskInEnglish = true;
383
+ }
384
+ break;
385
+ case LanguageMode.Current_Language_only_is_visible_and_required:
386
+ if (this.CurrentLanguage == 'ar') {
387
+ this.ShowArabicHtmlEditor = true;
388
+ this.ShowEnglishHtmlEditor = false;
389
+ if (this.options.IsRequired == true) {
390
+ this.ArabicValidationRules.push(Validators.required);
391
+ this.IsShowAsteriskInArabic = true;
392
+ }
393
+ }
394
+ if (this.CurrentLanguage == 'en') {
395
+ this.ShowArabicHtmlEditor = false;
396
+ this.ShowEnglishHtmlEditor = true;
397
+ if (this.options.IsRequired == true) {
398
+ this.EnglishValidationRules.push(Validators.required);
399
+ this.IsShowAsteriskInEnglish = true;
400
+ }
401
+ }
402
+ break;
403
+ default:
404
+ break;
405
+ }
406
+ this.ArabicHtmlEditorFormControl.setValidators(this.ArabicValidationRules);
407
+ this.EnglishHtmlEditorFormControl.setValidators(this.EnglishValidationRules);
408
+ this.ArabicHtmlEditorFormControl.updateValueAndValidity();
409
+ this.EnglishHtmlEditorFormControl.updateValueAndValidity();
410
+ }
411
+ }
412
+ MultiLingualHtmlEditorComponent.controlContainerstatic = null;
413
+ MultiLingualHtmlEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultiLingualHtmlEditorComponent, deps: [{ token: i1.FormGroupDirective }, { token: i1.ControlContainer, optional: true }, { token: i2.ControlUtility }, { token: i3.UtilityService }, { token: i3.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component });
414
+ MultiLingualHtmlEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MultiLingualHtmlEditorComponent, selector: "BBSF-MultiLingualHtmlEditor", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange" }, ngImport: i0, template: "<div [formGroup]=\"group\">\r\n <div class=\"bbsf-control form-group bbsf-multilang-htmleditor mb-0\" [formGroup]=\"MultilingualHtmlEditorgroup\">\r\n <div class=\"row\">\r\n <!--English htmleditor-->\r\n <div [ngClass]=\"ShowArabicHtmlEditor? 'col-md-6' : 'col-md-12'\" *ngIf=\"ShowEnglishHtmlEditor\" class=\" bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.LabelExtraClasses}}\" [hidden]=\"options.IsHideEnglishLabel\">\r\n {{(options.EnglishLabelValue!=null&&options.EnglishLabelValue!=\"\")?options.EnglishLabelValue:options.LabelValue+\"in English\"}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"(((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)&&IsShowAsteriskInEnglish))&&!options.IsReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.IsReadonly\">\r\n <!--input-->\r\n <angular-editor class=\"{{options.ExtraClasses_EN}}\" (change)=\"onTextChange('en')\"\r\n [class.is-invalid]=\"EnglishHtmlEditorFormControl.invalid && EnglishHtmlEditorFormControl.touched\" formControlName=\"English\"\r\n [config]=\"editorEnglishConfig\"></angular-editor>\r\n </div>\r\n <div *ngIf=\"options.IsReadonly\"><span class=\"readonly-view\" [innerHTML]=\"options.Value.English\"></span>\r\n\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.IsReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\"\r\n *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='') ||(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!='')\">\r\n {{(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!=\"\")?options.EnglishLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(EnglishHtmlEditorFormControl.invalid && EnglishHtmlEditorFormControl.touched)\">\r\n {{getErrorValidation(EnglishHtmlEditorFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Arabic htmleditor-->\r\n <div *ngIf=\"ShowArabicHtmlEditor\" [ngClass]=\"ShowEnglishHtmlEditor? 'col-md-6' : 'col-md-12'\" class=\"bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.LabelExtraClasses}}\" [hidden]=\"options.IsHideArabicLabel\">\r\n {{(options.ArabicLabelValue!=null&&options.ArabicLabelValue!=\"\")?options.ArabicLabelValue:options.LabelValue+\"in Arabic\"}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"(((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&IsShowAsteriskInArabic)&&!options.IsReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.IsReadonly\">\r\n <!--input-->\r\n <angular-editor dir=\"rtl\" class=\"{{options.ExtraClasses_AR}} \" (change)=\"onTextChange('ar')\"\r\n [class.is-invalid]=\"ArabicHtmlEditorFormControl.invalid && ArabicHtmlEditorFormControl.touched\" formControlName=\"Arabic\"\r\n [config]=\"editorArabicConfig\"></angular-editor>\r\n </div>\r\n <div *ngIf=\"options.IsReadonly\"><span class=\"readonly-view\" [innerHTML]=\"options.Value.Arabic\"></span>\r\n\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.IsReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\"\r\n *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='')||(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!='')\">\r\n {{(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!=\"\")?options.ArabicLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(ArabicHtmlEditorFormControl.invalid && ArabicHtmlEditorFormControl.touched)\">\r\n {{getErrorValidation(ArabicHtmlEditorFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i7.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.AngularEditorComponent, selector: "angular-editor", inputs: ["id", "config", "placeholder", "tabIndex"], outputs: ["viewMode", "blur", "focus", "html"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }] });
415
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MultiLingualHtmlEditorComponent, decorators: [{
416
+ type: Component,
417
+ args: [{ selector: 'BBSF-MultiLingualHtmlEditor', template: "<div [formGroup]=\"group\">\r\n <div class=\"bbsf-control form-group bbsf-multilang-htmleditor mb-0\" [formGroup]=\"MultilingualHtmlEditorgroup\">\r\n <div class=\"row\">\r\n <!--English htmleditor-->\r\n <div [ngClass]=\"ShowArabicHtmlEditor? 'col-md-6' : 'col-md-12'\" *ngIf=\"ShowEnglishHtmlEditor\" class=\" bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.LabelExtraClasses}}\" [hidden]=\"options.IsHideEnglishLabel\">\r\n {{(options.EnglishLabelValue!=null&&options.EnglishLabelValue!=\"\")?options.EnglishLabelValue:options.LabelValue+\"in English\"}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"(((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)&&IsShowAsteriskInEnglish))&&!options.IsReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.IsReadonly\">\r\n <!--input-->\r\n <angular-editor class=\"{{options.ExtraClasses_EN}}\" (change)=\"onTextChange('en')\"\r\n [class.is-invalid]=\"EnglishHtmlEditorFormControl.invalid && EnglishHtmlEditorFormControl.touched\" formControlName=\"English\"\r\n [config]=\"editorEnglishConfig\"></angular-editor>\r\n </div>\r\n <div *ngIf=\"options.IsReadonly\"><span class=\"readonly-view\" [innerHTML]=\"options.Value.English\"></span>\r\n\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.IsReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\"\r\n *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='') ||(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!='')\">\r\n {{(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!=\"\")?options.EnglishLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(EnglishHtmlEditorFormControl.invalid && EnglishHtmlEditorFormControl.touched)\">\r\n {{getErrorValidation(EnglishHtmlEditorFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Arabic htmleditor-->\r\n <div *ngIf=\"ShowArabicHtmlEditor\" [ngClass]=\"ShowEnglishHtmlEditor? 'col-md-6' : 'col-md-12'\" class=\"bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.LabelExtraClasses}}\" [hidden]=\"options.IsHideArabicLabel\">\r\n {{(options.ArabicLabelValue!=null&&options.ArabicLabelValue!=\"\")?options.ArabicLabelValue:options.LabelValue+\"in Arabic\"}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"(((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&IsShowAsteriskInArabic)&&!options.IsReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.IsReadonly\">\r\n <!--input-->\r\n <angular-editor dir=\"rtl\" class=\"{{options.ExtraClasses_AR}} \" (change)=\"onTextChange('ar')\"\r\n [class.is-invalid]=\"ArabicHtmlEditorFormControl.invalid && ArabicHtmlEditorFormControl.touched\" formControlName=\"Arabic\"\r\n [config]=\"editorArabicConfig\"></angular-editor>\r\n </div>\r\n <div *ngIf=\"options.IsReadonly\"><span class=\"readonly-view\" [innerHTML]=\"options.Value.Arabic\"></span>\r\n\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.IsReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\"\r\n *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='')||(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!='')\">\r\n {{(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!=\"\")?options.ArabicLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(ArabicHtmlEditorFormControl.invalid && ArabicHtmlEditorFormControl.touched)\">\r\n {{getErrorValidation(ArabicHtmlEditorFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
418
+ }], ctorParameters: function () { return [{ type: i1.FormGroupDirective }, { type: i1.ControlContainer, decorators: [{
419
+ type: Optional
420
+ }] }, { type: i2.ControlUtility }, { type: i3.UtilityService }, { type: i3.ControlValidationService }, { type: i4.GlobalSettings }]; }, propDecorators: { group: [{
421
+ type: Input
422
+ }], options: [{
423
+ type: Input
424
+ }], OnChange: [{
425
+ type: Output
426
+ }] } });
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlMaW5ndWFsSHRtbEVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvTXVsdGlMaW5ndWFsSHRtbEVkaXRvci9NdWx0aUxpbmd1YWxIdG1sRWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9NdWx0aUxpbmd1YWxIdG1sRWRpdG9yL011bHRpTGluZ3VhbEh0bWxFZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVcsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUF5RCxNQUFNLGdCQUFnQixDQUFDO0FBQzNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUd4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7QUFVL0QsTUFBTSxPQUFPLCtCQUErQjtJQUsxQyxZQUFtQixxQ0FBeUQsRUFBc0IsZ0JBQWtDLEVBQzFILGNBQThCLEVBQVUsY0FBOEIsRUFBVSx3QkFBa0QsRUFDbEksY0FBOEI7UUFGckIsMENBQXFDLEdBQXJDLHFDQUFxQyxDQUFvQjtRQUFzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQzFILG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEksbUJBQWMsR0FB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LEdBQUcsS0FBSyxDQUFDO29CQUNsQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO29CQUVsQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRTt3QkFDbkMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3RELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7cUJBRXJDO2lCQUNGO2dCQUNELE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFFRCxJQUFJLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLDJCQUEyQixDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFFN0QsQ0FBQzs7QUEvYk0sc0RBQXNCLEdBQUcsSUFBSSxDQUFDOzZIQUYxQiwrQkFBK0I7aUhBQS9CLCtCQUErQixzSkNoQjVDLGkySkF1RU07NEZEdkRPLCtCQUErQjtrQkFKM0MsU0FBUzsrQkFDRSw2QkFBNkI7OzBCQVF3QyxRQUFROzBLQU05RSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIERvQ2hlY2ssIE9wdGlvbmFsLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL0lucHV0VHlwZSc7XHJcbmltcG9ydCB7IEVuZ2xpc2hBcmFiaWNEVE8gfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0VuZ2xpc2hBcmFiaWNEVE8nO1xyXG5pbXBvcnQgeyBNdWx0aUxpbmd1YWxIdG1sRWRpdG9yT3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvTXVsdGlMaW5ndWFsSHRtbEVkaXRvck9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IExhbmd1YWdlTW9kZSB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9MYW5ndWFnZU1vZGUnO1xyXG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yQ29uZmlnIH0gZnJvbSAnQGtvbGtvdi9hbmd1bGFyLWVkaXRvcic7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtTXVsdGlMaW5ndWFsSHRtbEVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL011bHRpTGluZ3VhbEh0bWxFZGl0b3IuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aUxpbmd1YWxIdG1sRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgc3RhdGljIGNvbnRyb2xDb250YWluZXJzdGF0aWMgPSBudWxsO1xyXG4gIElzU2hvd0FzdGVyaXNrSW5BcmFiaWM6IGJvb2xlYW47XHJcbiAgSXNTaG93QXN0ZXJpc2tJbkVuZ2xpc2g6IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3IocHVibGljIE11bHRpTGluZ3VhbEh0bWxFZGl0b3JGb3JtQ29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksIHByaXZhdGUgVXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTogQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnbG9iYWxTZXR0aW5nczogR2xvYmFsU2V0dGluZ3NcclxuICApIHtcclxuICAgIE11bHRpTGluZ3VhbEh0bWxFZGl0b3JDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBNdWx0aUxpbmd1YWxIdG1sRWRpdG9yT3B0aW9ucztcclxuICBAT3V0cHV0KCkgT25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG5cclxuICBBcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBFbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgTXVsdGlUZXh0QXJlYUZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgTXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQXJhYmljQ29uZmlnOiBhbnlcclxuICBFbmdsaXNoQ29uZmlnOiBhbnlcclxuICBlZGl0b3JFbmdsaXNoQ29uZmlnOiBBbmd1bGFyRWRpdG9yQ29uZmlnXHJcbiAgZWRpdG9yQXJhYmljQ29uZmlnOiBBbmd1bGFyRWRpdG9yQ29uZmlnXHJcblxyXG4gIG1pc2NMaXN0OiBhbnlcclxuICBzdHlsZUxpc3Q6IGFueVxyXG4gIGZvbnRzaXplTGlzdDogYW55XHJcbiAgcGFyYUxpc3Q6IGFueVxyXG4gIGluc2VydExpc3Q6IGFueVxyXG5cclxuICBDdXJyZW50TGFuZ3VhZ2U6IHN0cmluZyA9IFwiXCI7O1xyXG4gIFNob3dBcmFiaWNIdG1sRWRpdG9yOiBib29sZWFuXHJcbiAgU2hvd0VuZ2xpc2hIdG1sRWRpdG9yOiBib29sZWFuXHJcbiAgQXJhYmljVmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgQXJhYmljVmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBFbmdsaXNoVmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgRW5nbGlzaFZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIHZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcblxyXG4gIEFyYWJpY0xldHRlck9ubHk6IHN0cmluZyA9IFwiXCJcclxuICBFbmdsaXNoTGV0dGVyT25seTogc3RyaW5nID0gXCJcIlxyXG5cclxuICBlbmdsaXNoVmFsdWUgPSBudWxsXHJcbiAgYXJhYmljVmFsdWUgPSBudWxsXHJcblxyXG4gIGdldEN1c3RvbUVycm9yc01hc3NhZ2VzKCkge1xyXG4gICAgdGhpcy5BcmFiaWNMZXR0ZXJPbmx5ID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQXJhYmljTGV0dGVyT25seVwiKTtcclxuICAgIHRoaXMuRW5nbGlzaExldHRlck9ubHkgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbmdsaXNoTGV0dGVyT25seVwiKTtcclxuICB9XHJcblxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLlZpZXdUeXBlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuVmlld1R5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLlZpZXdUeXBlO1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLkxhbmd1YWdlTW9kZSlcclxuICAgICAgdGhpcy5vcHRpb25zLkxhbmd1YWdlTW9kZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuTGFuZ3VhZ2VNb2RlO1xyXG5cclxuICAgIHRoaXMuZWRpdG9yRW5nbGlzaENvbmZpZyA9IHtcclxuICAgICAgZWRpdGFibGU6ICF0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCxcclxuICAgICAgc3BlbGxjaGVjazogdHJ1ZSxcclxuICAgICAgaGVpZ2h0OiB0aGlzLm9wdGlvbnMuSGVpZ2h0LnRvU3RyaW5nKCksXHJcbiAgICAgIG1pbkhlaWdodDogdGhpcy5vcHRpb25zLkhlaWdodC50b1N0cmluZygpLFxyXG4gICAgICBtYXhIZWlnaHQ6ICdhdXRvJyxcclxuICAgICAgd2lkdGg6ICdhdXRvJyxcclxuICAgICAgbWluV2lkdGg6ICdhdXRvJyxcclxuICAgICAgdHJhbnNsYXRlOiAneWVzJyxcclxuICAgICAgZW5hYmxlVG9vbGJhcjogdHJ1ZSxcclxuICAgICAgc2hvd1Rvb2xiYXI6IHRydWUsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLm9wdGlvbnMuRW5nbGlzaFBsYWNlaG9sZGVyLFxyXG4gICAgICBkZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yOiAnJyxcclxuICAgICAgZGVmYXVsdEZvbnROYW1lOiAnJyxcclxuICAgICAgZGVmYXVsdEZvbnRTaXplOiAnJyxcclxuICAgICAgZm9udHM6IFtcclxuICAgICAgICB7IGNsYXNzOiAnYXJpYWwnLCBuYW1lOiAnQXJpYWwnIH0sXHJcbiAgICAgICAgeyBjbGFzczogJ3RpbWVzLW5ldy1yb21hbicsIG5hbWU6ICdUaW1lcyBOZXcgUm9tYW4nIH0sXHJcbiAgICAgICAgeyBjbGFzczogJ2NhbGlicmknLCBuYW1lOiAnQ2FsaWJyaScgfSxcclxuICAgICAgICB7IGNsYXNzOiAnY29taWMtc2Fucy1tcycsIG5hbWU6ICdDb21pYyBTYW5zIE1TJyB9XHJcbiAgICAgIF0sXHJcbiAgICAgIGN1c3RvbUNsYXNzZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAncXVvdGUnLFxyXG4gICAgICAgICAgY2xhc3M6ICdxdW90ZScsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAncmVkVGV4dCcsXHJcbiAgICAgICAgICBjbGFzczogJ3JlZFRleHQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAndGl0bGVUZXh0JyxcclxuICAgICAgICAgIGNsYXNzOiAndGl0bGVUZXh0JyxcclxuICAgICAgICAgIHRhZzogJ2gxJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICB1cGxvYWRVcmw6ICd2MS9pbWFnZScsXHJcbiAgICAgIHVwbG9hZFdpdGhDcmVkZW50aWFsczogZmFsc2UsXHJcbiAgICAgIHNhbml0aXplOiBmYWxzZSxcclxuICAgICAgdG9vbGJhclBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgdG9vbGJhckhpZGRlbkJ1dHRvbnM6IFtcclxuXHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG5cclxuICAgIHRoaXMuZWRpdG9yQXJhYmljQ29uZmlnID0ge1xyXG4gICAgICBlZGl0YWJsZTogIXRoaXMub3B0aW9ucy5Jc0Rpc2FibGVkLFxyXG4gICAgICBzcGVsbGNoZWNrOiB0cnVlLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMub3B0aW9ucy5IZWlnaHQudG9TdHJpbmcoKSxcclxuICAgICAgbWluSGVpZ2h0OiB0aGlzLm9wdGlvbnMuSGVpZ2h0LnRvU3RyaW5nKCksXHJcbiAgICAgIG1heEhlaWdodDogJ2F1dG8nLFxyXG4gICAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgICBtaW5XaWR0aDogJ2F1dG8nLFxyXG4gICAgICB0cmFuc2xhdGU6ICd5ZXMnLFxyXG4gICAgICBlbmFibGVUb29sYmFyOiB0cnVlLFxyXG4gICAgICBzaG93VG9vbGJhcjogdHJ1ZSxcclxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMub3B0aW9ucy5BcmFiaWNQbGFjZWhvbGRlcixcclxuICAgICAgZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcjogJycsXHJcbiAgICAgIGRlZmF1bHRGb250TmFtZTogJycsXHJcbiAgICAgIGRlZmF1bHRGb250U2l6ZTogJycsXHJcbiAgICAgIGZvbnRzOiBbXHJcbiAgICAgICAgeyBjbGFzczogJ2FyaWFsJywgbmFtZTogJ0FyaWFsJyB9LFxyXG4gICAgICAgIHsgY2xhc3M6ICd0aW1lcy1uZXctcm9tYW4nLCBuYW1lOiAnVGltZXMgTmV3IFJvbWFuJyB9LFxyXG4gICAgICAgIHsgY2xhc3M6ICdjYWxpYnJpJywgbmFtZTogJ0NhbGlicmknIH0sXHJcbiAgICAgICAgeyBjbGFzczogJ2NvbWljLXNhbnMtbXMnLCBuYW1lOiAnQ29taWMgU2FucyBNUycgfVxyXG4gICAgICBdLFxyXG4gICAgICBjdXN0b21DbGFzc2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3F1b3RlJyxcclxuICAgICAgICAgIGNsYXNzOiAncXVvdGUnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3JlZFRleHQnLFxyXG4gICAgICAgICAgY2xhc3M6ICdyZWRUZXh0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3RpdGxlVGV4dCcsXHJcbiAgICAgICAgICBjbGFzczogJ3RpdGxlVGV4dCcsXHJcbiAgICAgICAgICB0YWc6ICdoMScsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgICAgdXBsb2FkVXJsOiAndjEvaW1hZ2UnLFxyXG4gICAgICB1cGxvYWRXaXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxyXG4gICAgICBzYW5pdGl6ZTogZmFsc2UsXHJcbiAgICAgIHRvb2xiYXJQb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHRvb2xiYXJIaWRkZW5CdXR0b25zOiBbXHJcblxyXG4gICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2VcclxuXHJcbiAgICB0aGlzLkN1cnJlbnRMYW5ndWFnZSA9IGF3YWl0IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCk7XHJcblxyXG4gICAgLy8gVXRpbGl0eVNlcnZpY2UuVHJhbnNsYXRvci5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudDogTGFuZ0NoYW5nZUV2ZW50KSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gZXZlbnQubGFuZ1xyXG4gICAgLy8gICB0aGlzLnNob3dJbnB1dFVzaW5nTGFuZ3VhZ2VNb2RlKCk7XHJcblxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLm1pc2NMaXN0ID0gdGhpcy5vcHRpb25zLlRvb2xzTGlzdF9NaXNjICE9IG51bGwgPyB0aGlzLm9wdGlvbnMuVG9vbHNMaXN0X01pc2MgOiBbJ2NvZGV2aWV3JywgJ3VuZG8nLCAncmVkbyddO1xyXG4gICAgLy8gdGhpcy5zdHlsZUxpc3QgPSB0aGlzLm9wdGlvbnMuVG9vbHNMaXN0X1N0eWxlICE9IG51bGwgPyB0aGlzLm9wdGlvbnMuVG9vbHNMaXN0X1N0eWxlIDogWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnLCAnY2xlYXInXVxyXG4gICAgLy8gdGhpcy5mb250c2l6ZUxpc3QgPSB0aGlzLm9wdGlvbnMuVG9vbHNMaXN0X0ZvbnRTaXplICE9IG51bGwgPyB0aGlzLm9wdGlvbnMuVG9vbHNMaXN0X0ZvbnRTaXplIDogWydmb250bmFtZScsICdmb250c2l6ZScsICdjb2xvciddXHJcbiAgICAvLyB0aGlzLnBhcmFMaXN0ID0gdGhpcy5vcHRpb25zLlRvb2xzTGlzdF9QYXJhICE9IG51bGwgPyB0aGlzLm9wdGlvbnMuVG9vbHNMaXN0X1BhcmEgOiBbJ3N0eWxlJywgJ3VsJywgJ29sJywgJ3BhcmFncmFwaCcsICdoZWlnaHQnXVxyXG4gICAgLy8gdGhpcy5pbnNlcnRMaXN0ID0gdGhpcy5vcHRpb25zLlRvb2xzTGlzdF9JbnNlcnQgIT0gbnVsbCA/IHRoaXMub3B0aW9ucy5Ub29sc0xpc3RfSW5zZXJ0IDogWyd0YWJsZScsICdwaWN0dXJlJywgJ2xpbmsnLCAndmlkZW8nLCAnaHInXVxyXG5cclxuICAgIC8vIHRoaXMuQXJhYmljQ29uZmlnID0ge1xyXG4gICAgLy8gICBwbGFjZWhvbGRlcjogdGhpcy5vcHRpb25zLkFyYWJpY1BsYWNlaG9sZGVyLFxyXG4gICAgLy8gICBoZWlnaHQ6IGAke3RoaXMub3B0aW9ucy5IZWlnaHR9cHhgLFxyXG4gICAgLy8gICB0b29sYmFyOiBbXHJcbiAgICAvLyAgICAgWydtaXNjJywgdGhpcy5taXNjTGlzdF0sXHJcbiAgICAvLyAgICAgWydzdHlsZScsIHRoaXMuc3R5bGVMaXN0XSxcclxuICAgIC8vICAgICBbJ2ZvbnRzaXplJywgdGhpcy5mb250c2l6ZUxpc3RdLFxyXG4gICAgLy8gICAgIFsncGFyYScsIHRoaXMucGFyYUxpc3RdLFxyXG4gICAgLy8gICAgIFsnaW5zZXJ0JywgdGhpcy5pbnNlcnRMaXN0XVxyXG4gICAgLy8gICBdLFxyXG4gICAgLy8gICBmb250TmFtZXM6IFsnSGVsdmV0aWNhJywgJ0FyaWFsJywgJ0FyaWFsIEJsYWNrJywgJ0NvbWljIFNhbnMgTVMnLCAnQ291cmllciBOZXcnLCAnUm9ib3RvJywgJ1RpbWVzJ11cclxuXHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLkVuZ2xpc2hDb25maWcgPSB7XHJcbiAgICAvLyAgIHBsYWNlaG9sZGVyOiB0aGlzLm9wdGlvbnMuRW5nbGlzaFBsYWNlaG9sZGVyLFxyXG4gICAgLy8gICBoZWlnaHQ6IGAke3RoaXMub3B0aW9ucy5IZWlnaHR9cHhgLFxyXG4gICAgLy8gICB0b29sYmFyOiBbXHJcbiAgICAvLyAgICAgWydtaXNjJywgdGhpcy5taXNjTGlzdF0sXHJcbiAgICAvLyAgICAgWydzdHlsZScsIHRoaXMuc3R5bGVMaXN0XSxcclxuICAgIC8vICAgICBbJ2ZvbnRzaXplJywgdGhpcy5mb250c2l6ZUxpc3RdLFxyXG4gICAgLy8gICAgIFsncGFyYScsIHRoaXMucGFyYUxpc3RdLFxyXG4gICAgLy8gICAgIFsnaW5zZXJ0JywgdGhpcy5pbnNlcnRMaXN0XVxyXG4gICAgLy8gICBdLFxyXG4gICAgLy8gICBmb250TmFtZXM6IFsnSGVsdmV0aWNhJywgJ0FyaWFsJywgJ0FyaWFsIEJsYWNrJywgJ0NvbWljIFNhbnMgTVMnLCAnQ291cmllciBOZXcnLCAnUm9ib3RvJywgJ1RpbWVzJ11cclxuXHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLk11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cCA9IG5ldyBGb3JtR3JvdXAoe30pOztcclxuICAgIHRoaXMuTXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmFkZENvbnRyb2woXCJBcmFiaWNcIiwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLk11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5hZGRDb250cm9sKFwiRW5nbGlzaFwiLCBuZXcgRm9ybUNvbnRyb2woJycpKTtcclxuICAgIHRoaXMuQXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sID0gdGhpcy5NdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbXCJBcmFiaWNcIl07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuRW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbCA9IHRoaXMuTXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzW1wiRW5nbGlzaFwiXTsgLy8gIG5ldyBGb3JtQ29udHJvbCgnJyx2YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCBuZXcgRm9ybUdyb3VwKHRoaXMuTXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzKSk7XHJcbiAgICB0aGlzLmdldEN1c3RvbUVycm9yc01hc3NhZ2VzKCk7XHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLkVtYWlsOlxyXG4gICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1xcLlthLXpdezIsNH0kLywgeyBFbWFpbFZhbGlkYXRpb25LZXk6IFwiXCIgfSksXHJcbiAgICAgICAgXSkpO1xyXG4gICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvXlthLXowLTkuXyUrLV0rQFthLXowLTkuLV0rXFwuW2Etel17Miw0fSQvLCB7IEVtYWlsVmFsaWRhdGlvbktleTogXCJcIiB9KSxcclxuICAgICAgICBdKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLk51bWJlcjpcclxuICAgICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oJ15bMC05XSsoXFwuP1swLTldKyk/JCcpKTtcclxuICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybignXlswLTldKyhcXC4/WzAtOV0rKT8kJykpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBWYWxpZGF0aW9ucyA9IHRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuTWluTGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMub3B0aW9ucy5NaW5MZW5ndGgpKTtcclxuICAgICAgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5vcHRpb25zLk1pbkxlbmd0aCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoKSk7XHJcbiAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5vcHRpb25zLk1heExlbmd0aCkpO1xyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuTGFiZWxLZXkgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuTGFiZWxLZXkgIT0gXCJcIikge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuQXJhYmljTGFiZWxWYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMuTGFiZWxLZXkpICsgXCIgXCIgKyB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJJbkFyYWJpY1wiKTtcclxuICAgICAgdGhpcy5vcHRpb25zLkVuZ2xpc2hMYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5MYWJlbEtleSkgKyBcIiBcIiArIHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkluRW5nbGlzaFwiKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLkFyYWJpY0xhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkFyYWJpY0xhYmVsS2V5ICE9IFwiXCIpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLkFyYWJpY0xhYmVsVmFsdWUgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUodGhpcy5vcHRpb25zLkFyYWJpY0xhYmVsS2V5KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuRW5nbGlzaExhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkVuZ2xpc2hMYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5FbmdsaXNoTGFiZWxWYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMuRW5nbGlzaExhYmVsS2V5KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0lucHV0VXNpbmdMYW5ndWFnZU1vZGUoKTtcclxuICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9eW1xcdTA2MjEtXFx1MDY0QVxcdTA2NjAtXFx1MDY2OSBdKyQvLCB7IEFyYWJpY0xldHRlck9ubHk6IHRoaXMuQXJhYmljTGV0dGVyT25seSB9KSxcclxuXHJcbiAgICBdKSk7XHJcbiAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bfmAhQCMkJV4mKigp4oCY4oCZ4oCc4oCdXys9W1xcXVxcXFx7fXw7JzpcIiwuXFwvPD4/YS16QS1aMC05LSBdKiQvLCB7IEVuZ2xpc2hMZXR0ZXJPbmx5OiB0aGlzLkVuZ2xpc2hMZXR0ZXJPbmx5IH0pLFxyXG5cclxuICAgIF0pKTtcclxuICAgIC8vIHRoaXMuQXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgLy8gdGhpcy5BcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzYXN5bmMpO1xyXG5cclxuICAgIC8vIHRoaXMuRW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICAvLyB0aGlzLkVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5FbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5BcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5BcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlLkFyYWJpYylcclxuICAgIHRoaXMuRW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMuVmFsdWUuRW5nbGlzaClcclxuICAgIHRoaXMuTXVsdGlMaW5ndWFsSHRtbEVkaXRvckZvcm1Db250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBsZXQgZGlyID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKSA9PSBcImVuXCIgPyBcImx0clwiIDogXCJydGxcIlxyXG4gICAgdmFyIGFuZ3VsYXJFZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYW5ndWxhci1lZGl0b3ItdG9vbGJhciBuZy1zdGFyLWluc2VydGVkXCIpO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFuZ3VsYXJFZGl0b3IubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBhbmd1bGFyRWRpdG9yW2luZGV4XTtcclxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkaXJcIiwgZGlyKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25UZXh0Q2hhbmdlKHR5cGU6IHN0cmluZykge1xyXG5cclxuICAgIGlmICh0eXBlID09IFwiZW5cIikge1xyXG4gICAgICB0aGlzLk11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1tcIkVuZ2xpc2hcIl0uc2V0VmFsdWUodGhpcy5NdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdLnZhbHVlLnRyaW0oKSk7XHJcbiAgICAgIHRoaXMuZW5nbGlzaFZhbHVlID0gdGhpcy5NdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdLnZhbHVlID09IG51bGwgPyBcIlwiIDogdGhpcy5NdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdLnZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5lbmdsaXNoVmFsdWUpIHtcclxuICAgICAgICB0aGlzLkVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5lbmdsaXNoVmFsdWUpO1xyXG4gICAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdGhpcy5lbmdsaXNoVmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uICYmIHRoaXMub3B0aW9ucy5QYXRjaFBhdGggJiYgdGhpcy5FbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLnZhbGlkKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdGNoQ29udHJvbFZhbHVlKG9yaWdpbmFsVmFsdWUsIHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uLCB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgRW5nbGlzd29yZENvdW50QXJyYXkgPSAodGhpcy5FbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLnZhbHVlIGFzIHN0cmluZykuc3BsaXQoXCIgXCIpLmxlbmd0aFxyXG4gICAgICBpZiAoRW5nbGlzd29yZENvdW50QXJyYXkgPiAwKSB7XHJcbiAgICAgICAgaWYgKEVuZ2xpc3dvcmRDb3VudEFycmF5ID4gdGhpcy5vcHRpb25zLk1heFdvcmRDb3VudClcclxuICAgICAgICAgIHRoaXMuTXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzW1wiRW5nbGlzaFwiXS5zZXRFcnJvcnMoeyBNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5OiB0aGlzLm9wdGlvbnMuTWF4V29yZENvdW50IH0pXHJcbiAgICAgICAgdGhpcy5NdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdLm1hcmtBc1RvdWNoZWQoKVxyXG4gICAgICAgIHRoaXMuTXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzW1wiRW5nbGlzaFwiXS5pbnZhbGlkXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlID09IFwiYXJcIikge1xyXG4gICAgICB0aGlzLk11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1tcIkFyYWJpY1wiXS5zZXRWYWx1ZSh0aGlzLk11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1tcIkFyYWJpY1wiXS52YWx1ZS50cmltKCkpO1xyXG5cclxuICAgICAgdGhpcy5hcmFiaWNWYWx1ZSA9IHRoaXMuTXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzW1wiQXJhYmljXCJdLnZhbHVlID09IG51bGwgPyBcIlwiIDogdGhpcy5NdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbXCJBcmFiaWNcIl0udmFsdWU7XHJcblxyXG4gICAgICBpZiAodGhpcy5hcmFiaWNWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuQXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuYXJhYmljVmFsdWUpO1xyXG4gICAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdGhpcy5hcmFiaWNWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gJiYgdGhpcy5vcHRpb25zLlBhdGNoUGF0aCAmJiB0aGlzLkFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC52YWxpZCkge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShvcmlnaW5hbFZhbHVlLCB0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiwgdGhpcy5vcHRpb25zLlBhdGNoUGF0aClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBBcmFiaWN3b3JkQ291bnRBcnJheSA9ICh0aGlzLkFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC52YWx1ZSBhcyBzdHJpbmcpLnNwbGl0KFwiIFwiKS5sZW5ndGhcclxuICAgICAgaWYgKEFyYWJpY3dvcmRDb3VudEFycmF5ID4gMCkge1xyXG4gICAgICAgIGlmIChBcmFiaWN3b3JkQ291bnRBcnJheSA+IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQpXHJcbiAgICAgICAgICB0aGlzLk11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1tcIkFyYWJpY1wiXS5zZXRFcnJvcnMoeyBNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5OiB0aGlzLm9wdGlvbnMuTWF4V29yZENvdW50IH0pXHJcbiAgICAgICAgdGhpcy5NdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbXCJBcmFiaWNcIl0ubWFya0FzVG91Y2hlZCgpXHJcbiAgICAgICAgdGhpcy5NdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbXCJBcmFiaWNcIl0uaW52YWxpZFxyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBtdWxpdExhbmdNb2RlbCA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKClcclxuICAgIG11bGl0TGFuZ01vZGVsLkFyYWJpYyA9IHRoaXMuYXJhYmljVmFsdWU7XHJcbiAgICBtdWxpdExhbmdNb2RlbC5FbmdsaXNoID0gdGhpcy5lbmdsaXNoVmFsdWVcclxuICAgIHRoaXMuT25DaGFuZ2UuZW1pdChtdWxpdExhbmdNb2RlbClcclxuICAgIGlmICh0aGlzLmFyYWJpY1ZhbHVlICYmIHRoaXMuZW5nbGlzaFZhbHVlKVxyXG4gICAgICB0aGlzLmdyb3VwLmdldCh0aGlzLm9wdGlvbnMuTmFtZSkuc2V0VmFsdWUobXVsaXRMYW5nTW9kZWwpXHJcbiAgICAvL1VzZSB0aGlzIGxpbmUgdG8gZW5hYmxlIHR3byB3YXkgYmluZGluZy5cclxuICAgIHRoaXMub3B0aW9ucy5WYWx1ZSA9IG11bGl0TGFuZ01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLnJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNob3dHbG9iYWxFcnJvcigpXHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHNob3dJbnB1dFVzaW5nTGFuZ3VhZ2VNb2RlKCkge1xyXG5cclxuICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzID0gdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMgPSB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgdGhpcy5BcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB0aGlzLkVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgdGhpcy5BcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5FbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5MYW5ndWFnZU1vZGUpIHtcclxuICAgICAgY2FzZSBMYW5ndWFnZU1vZGUuQm90aF9MYW5ndWFnZXNfYXJlX3Zpc2libGU6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljSHRtbEVkaXRvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93RW5nbGlzaEh0bWxFZGl0b3IgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5BcmFiaWMgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5Jc1Nob3dBc3Rlcmlza0luRW5nbGlzaCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5BcmFiaWNfTGFuZ3VhZ2Vfb25seV9pc192aXNpYmxlOlxyXG4gICAgICAgIHRoaXMuU2hvd0FyYWJpY0h0bWxFZGl0b3IgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5FbmdsaXNoX0xhbmd1YWdlX29ubHlfaXNfdmlzaWJsZTpcclxuICAgICAgICB0aGlzLlNob3dFbmdsaXNoSHRtbEVkaXRvciA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkJvdGhfTGFuZ3VhZ2VzX2FyZV92aXNpYmxlX2J1dF9vbmx5X2N1cnJlbnRfbGFuZ3VhZ2VfaXNfcmVxdWlyZWQ6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljSHRtbEVkaXRvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93RW5nbGlzaEh0bWxFZGl0b3IgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2FyJykge1xyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5Jc1Nob3dBc3Rlcmlza0luQXJhYmljID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLkN1cnJlbnRMYW5ndWFnZSA9PSAnZW4nKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5Jc1Nob3dBc3Rlcmlza0luRW5nbGlzaCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19idXRfb25seV9BcmFiaWNfaXNfcmVxdWlyZWQ6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljSHRtbEVkaXRvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93RW5nbGlzaEh0bWxFZGl0b3IgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgdGhpcy5Jc1Nob3dBc3Rlcmlza0luQXJhYmljID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkJvdGhfTGFuZ3VhZ2VzX2J1dF9vbmx5X0VuZ2xpc2hfaXNfcmVxdWlyZWQ6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljSHRtbEVkaXRvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93RW5nbGlzaEh0bWxFZGl0b3IgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIHRoaXMuSXNTaG93QXN0ZXJpc2tJbkVuZ2xpc2ggPSB0cnVlO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkN1cnJlbnRfTGFuZ3VhZ2Vfb25seV9pc192aXNpYmxlX2FuZF9yZXF1aXJlZDpcclxuICAgICAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2FyJykge1xyXG4gICAgICAgICAgdGhpcy5TaG93QXJhYmljSHRtbEVkaXRvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLlNob3dFbmdsaXNoSHRtbEVkaXRvciA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuSXNTaG93QXN0ZXJpc2tJbkFyYWJpYyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2VuJykge1xyXG4gICAgICAgICAgdGhpcy5TaG93QXJhYmljSHRtbEVkaXRvciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5TaG93RW5nbGlzaEh0bWxFZGl0b3IgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5FbmdsaXNoID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuQXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5FbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuQXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuRW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcblxyXG4gIFJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuRW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbCwgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLkFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbCwgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucylcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuXHJcbiAgQWRkUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5FbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLCB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucylcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuQXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLCB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuXHJcblxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuRW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbCwgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuQXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLCB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wsIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbCwgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIElzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5FbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sKVxyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuQXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sKVxyXG4gIH1cclxufVxyXG5cclxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJic2YtY29udHJvbCBmb3JtLWdyb3VwIGJic2YtbXVsdGlsYW5nLWh0bWxlZGl0b3IgbWItMFwiIFtmb3JtR3JvdXBdPVwiTXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDwhLS1FbmdsaXNoIGh0bWxlZGl0b3ItLT5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJTaG93QXJhYmljSHRtbEVkaXRvcj8gJ2NvbC1tZC02JyA6ICdjb2wtbWQtMTInXCIgKm5nSWY9XCJTaG93RW5nbGlzaEh0bWxFZGl0b3JcIiBjbGFzcz1cIiBiYnNmLW11bHRpbGFuZy1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCIob3B0aW9ucy5WaWV3VHlwZT09MSk/J2Jic2YtdmVydGljYWwnOidiYnNmLWhvcml6b250YWwnXCI+XHJcbiAgICAgICAgICA8IS0tbGFiZWwtLT5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJic2YtbGFiZWwge3tvcHRpb25zLkxhYmVsRXh0cmFDbGFzc2VzfX1cIiBbaGlkZGVuXT1cIm9wdGlvbnMuSXNIaWRlRW5nbGlzaExhYmVsXCI+XHJcbiAgICAgICAgICAgIHt7KG9wdGlvbnMuRW5nbGlzaExhYmVsVmFsdWUhPW51bGwmJm9wdGlvbnMuRW5nbGlzaExhYmVsVmFsdWUhPVwiXCIpP29wdGlvbnMuRW5nbGlzaExhYmVsVmFsdWU6b3B0aW9ucy5MYWJlbFZhbHVlK1wiaW4gRW5nbGlzaFwifX1cclxuICAgICAgICAgICAgPCEtLUFzdGVyaXNrLS0+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKCgob3B0aW9ucy5TaG93QXN0ZXJpc2smJm9wdGlvbnMuSXNSZXF1aXJlZCl8fChvcHRpb25zLklzUmVxdWlyZWQpJiZJc1Nob3dBc3Rlcmlza0luRW5nbGlzaCkpJiYhb3B0aW9ucy5Jc1JlYWRvbmx5XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cIiFvcHRpb25zLklzUmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgPCEtLWlucHV0LS0+XHJcbiAgICAgICAgICAgIDxhbmd1bGFyLWVkaXRvciBjbGFzcz1cInt7b3B0aW9ucy5FeHRyYUNsYXNzZXNfRU59fVwiIChjaGFuZ2UpPVwib25UZXh0Q2hhbmdlKCdlbicpXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJFbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLmludmFsaWQgJiYgRW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC50b3VjaGVkXCIgZm9ybUNvbnRyb2xOYW1lPVwiRW5nbGlzaFwiXHJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJlZGl0b3JFbmdsaXNoQ29uZmlnXCI+PC9hbmd1bGFyLWVkaXRvcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnMuSXNSZWFkb25seVwiPjxzcGFuIGNsYXNzPVwicmVhZG9ubHktdmlld1wiIFtpbm5lckhUTUxdPVwib3B0aW9ucy5WYWx1ZS5FbmdsaXNoXCI+PC9zcGFuPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5Jc1JlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgIDwhLS0gTGFiZWxEZXNjcmlwdGlvbi0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiKG9wdGlvbnMuTGFiZWxEZXNjcmlwdGlvbiE9bnVsbCYmb3B0aW9ucy5MYWJlbERlc2NyaXB0aW9uIT0nJykgfHwob3B0aW9ucy5FbmdsaXNoTGFiZWxEZXNjcmlwdGlvbiE9bnVsbCYmb3B0aW9ucy5FbmdsaXNoTGFiZWxEZXNjcmlwdGlvbiE9JycpXCI+XHJcbiAgICAgICAgICAgICAge3sob3B0aW9ucy5FbmdsaXNoTGFiZWxEZXNjcmlwdGlvbiE9bnVsbCYmb3B0aW9ucy5FbmdsaXNoTGFiZWxEZXNjcmlwdGlvbiE9XCJcIik/b3B0aW9ucy5FbmdsaXNoTGFiZWxEZXNjcmlwdGlvbjpvcHRpb25zLkxhYmVsRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiICpuZ0lmPVwiKEVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wuaW52YWxpZCAmJiBFbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAge3tnZXRFcnJvclZhbGlkYXRpb24oRW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC5lcnJvcnN8a2V5dmFsdWUpfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3JvdXAudmFsaWQmJmdyb3VwLmRpcnR5JiZncm91cC50b3VjaGVkICl8fChncm91cC51bnRvdWNoZWQmJmdyb3VwLmludmFsaWQmJmdyb3VwLmRpcnR5KSBcIj57e3Jlc2V0RXJyb3IoKX19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1BcmFiaWMgaHRtbGVkaXRvci0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiU2hvd0FyYWJpY0h0bWxFZGl0b3JcIiBbbmdDbGFzc109XCJTaG93RW5nbGlzaEh0bWxFZGl0b3I/ICdjb2wtbWQtNicgOiAnY29sLW1kLTEyJ1wiIGNsYXNzPVwiYmJzZi1tdWx0aWxhbmctZm9ybS1ncm91cFwiPlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiKG9wdGlvbnMuVmlld1R5cGU9PTEpPydiYnNmLXZlcnRpY2FsJzonYmJzZi1ob3Jpem9udGFsJ1wiPlxyXG4gICAgICAgICAgPCEtLWxhYmVsLS0+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJiYnNmLWxhYmVsIHt7b3B0aW9ucy5MYWJlbEV4dHJhQ2xhc3Nlc319XCIgW2hpZGRlbl09XCJvcHRpb25zLklzSGlkZUFyYWJpY0xhYmVsXCI+XHJcbiAgICAgICAgICAgIHt7KG9wdGlvbnMuQXJhYmljTGFiZWxWYWx1ZSE9bnVsbCYmb3B0aW9ucy5BcmFiaWNMYWJlbFZhbHVlIT1cIlwiKT9vcHRpb25zLkFyYWJpY0xhYmVsVmFsdWU6b3B0aW9ucy5MYWJlbFZhbHVlK1wiaW4gQXJhYmljXCJ9fVxyXG4gICAgICAgICAgICA8IS0tQXN0ZXJpc2stLT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIoKChvcHRpb25zLlNob3dBc3RlcmlzayYmb3B0aW9ucy5Jc1JlcXVpcmVkKXx8KG9wdGlvbnMuSXNSZXF1aXJlZCkpJiZJc1Nob3dBc3Rlcmlza0luQXJhYmljKSYmIW9wdGlvbnMuSXNSZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5Jc1JlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICAgICAgICA8YW5ndWxhci1lZGl0b3IgZGlyPVwicnRsXCIgY2xhc3M9XCJ7e29wdGlvbnMuRXh0cmFDbGFzc2VzX0FSfX0gXCIgKGNoYW5nZSk9XCJvblRleHRDaGFuZ2UoJ2FyJylcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cIkFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC5pbnZhbGlkICYmIEFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC50b3VjaGVkXCIgZm9ybUNvbnRyb2xOYW1lPVwiQXJhYmljXCJcclxuICAgICAgICAgICAgICBbY29uZmlnXT1cImVkaXRvckFyYWJpY0NvbmZpZ1wiPjwvYW5ndWxhci1lZGl0b3I+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLklzUmVhZG9ubHlcIj48c3BhbiBjbGFzcz1cInJlYWRvbmx5LXZpZXdcIiBbaW5uZXJIVE1MXT1cIm9wdGlvbnMuVmFsdWUuQXJhYmljXCI+PC9zcGFuPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5Jc1JlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgIDwhLS0gTGFiZWxEZXNjcmlwdGlvbi0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiKG9wdGlvbnMuTGFiZWxEZXNjcmlwdGlvbiE9bnVsbCYmb3B0aW9ucy5MYWJlbERlc2NyaXB0aW9uIT0nJyl8fChvcHRpb25zLkFyYWJpY0xhYmVsRGVzY3JpcHRpb24hPW51bGwmJm9wdGlvbnMuQXJhYmljTGFiZWxEZXNjcmlwdGlvbiE9JycpXCI+XHJcbiAgICAgICAgICAgICAge3sob3B0aW9ucy5BcmFiaWNMYWJlbERlc2NyaXB0aW9uIT1udWxsJiZvcHRpb25zLkFyYWJpY0xhYmVsRGVzY3JpcHRpb24hPVwiXCIpP29wdGlvbnMuQXJhYmljTGFiZWxEZXNjcmlwdGlvbjpvcHRpb25zLkxhYmVsRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiICpuZ0lmPVwiKEFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC5pbnZhbGlkICYmIEFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICAgIHt7Z2V0RXJyb3JWYWxpZGF0aW9uKEFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC5lcnJvcnN8a2V5dmFsdWUpfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3JvdXAudmFsaWQmJmdyb3VwLmRpcnR5JiZncm91cC50b3VjaGVkICl8fChncm91cC51bnRvdWNoZWQmJmdyb3VwLmludmFsaWQmJmdyb3VwLmRpcnR5KSBcIj57e3Jlc2V0RXJyb3IoKX19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19