@reusa/ngx-reusa-app-lib 0.0.1303 → 0.0.1305

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 (536) hide show
  1. package/esm2022/lib/components/add-employer/add-employer.component.mjs +1296 -2414
  2. package/esm2022/lib/components/add-participant/add-participant.component.mjs +105 -159
  3. package/esm2022/lib/components/add-payment/add-payment.component.mjs +53 -59
  4. package/esm2022/lib/components/address/address.component.mjs +150 -285
  5. package/esm2022/lib/components/bank-details/bank-details.component.mjs +219 -79
  6. package/esm2022/lib/components/contact-us/contact-us.component.mjs +43 -17
  7. package/esm2022/lib/components/correspondence-download/correspondence-download.component.mjs +9 -3
  8. package/esm2022/lib/components/dashboard-card/dashboard-card.component.mjs +4 -21
  9. package/esm2022/lib/components/dependent-grid/dependent-grid.component.mjs +15 -30
  10. package/esm2022/lib/components/disclosure/disclosure.component.mjs +1 -1
  11. package/esm2022/lib/components/dropdown/dropdown.component.mjs +4 -4
  12. package/esm2022/lib/components/dropdown/dropdown.interface.mjs +1 -1
  13. package/esm2022/lib/components/email-update/email-update.component.mjs +140 -63
  14. package/esm2022/lib/components/employer-grid/employer-grid.component.mjs +560 -363
  15. package/esm2022/lib/components/error/error.component.mjs +5 -22
  16. package/esm2022/lib/components/fav-menu/fav-menu.component.mjs +1 -1
  17. package/esm2022/lib/components/file-uploader/file-uploader.component.mjs +49 -178
  18. package/esm2022/lib/components/footer/footer.component.mjs +83 -94
  19. package/esm2022/lib/components/header/header.component.mjs +171 -439
  20. package/esm2022/lib/components/idle-detector/idle-detector.component.mjs +36 -25
  21. package/esm2022/lib/components/info/info.component.mjs +12 -4
  22. package/esm2022/lib/components/job-search-result-page/job-search-result-page.component.mjs +22 -16
  23. package/esm2022/lib/components/job-title/job-title.component.mjs +97 -92
  24. package/esm2022/lib/components/legal-disclaimar/legal-disclaimar.component.mjs +513 -143
  25. package/esm2022/lib/components/lexis-nexis/lexis-nexis.component.mjs +402 -0
  26. package/esm2022/lib/components/link/link.component.mjs +1 -1
  27. package/esm2022/lib/components/menu/menu.component.mjs +100 -69
  28. package/esm2022/lib/components/mfa/mfa.component.mjs +287 -158
  29. package/esm2022/lib/components/mfa-popup/mfa-popup.component.mjs +18 -11
  30. package/esm2022/lib/components/mfa2/mfa2.component.mjs +285 -0
  31. package/esm2022/lib/components/money-expect/money-expect.component.mjs +54 -158
  32. package/esm2022/lib/components/profile/profile.component.mjs +354 -717
  33. package/esm2022/lib/components/profile-redirect/profile-redirect.component.mjs +38 -108
  34. package/esm2022/lib/components/questionnaire/AppValidators.mjs +43 -289
  35. package/esm2022/lib/components/questionnaire/account-success/account-success.page.mjs +65 -110
  36. package/esm2022/lib/components/questionnaire/common-success/common-success.page.mjs +173 -377
  37. package/esm2022/lib/components/questionnaire/dynamic-form-panel.component.mjs +95 -76
  38. package/esm2022/lib/components/questionnaire/dynamic-form-question.component.mjs +1070 -849
  39. package/esm2022/lib/components/questionnaire/dynamic-form.component.mjs +667 -207
  40. package/esm2022/lib/components/questionnaire/form-builder/form-builder.page.mjs +22 -28
  41. package/esm2022/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.mjs +32 -116
  42. package/esm2022/lib/components/questionnaire/question-control.service.mjs +1 -2
  43. package/esm2022/lib/components/questionnaire/question.service.mjs +7 -5
  44. package/esm2022/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.mjs +29 -15
  45. package/esm2022/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.mjs +233 -457
  46. package/esm2022/lib/components/search-employer/search-employer.component.mjs +30 -155
  47. package/esm2022/lib/components/security-question/security-question.component.mjs +199 -0
  48. package/esm2022/lib/components/select/select.component.mjs +10 -5
  49. package/esm2022/lib/components/sign-ssn/sign-ssn.component.mjs +3 -3
  50. package/esm2022/lib/components/ssn-reverify/ssn-reverify.component.mjs +72 -52
  51. package/esm2022/lib/components/user-login/user-login.component.mjs +357 -139
  52. package/esm2022/lib/components/weekly-cert-employer/weekly-cert-employer.component.mjs +237 -613
  53. package/esm2022/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.mjs +59 -114
  54. package/esm2022/lib/guards/auth.guard.mjs +2 -50
  55. package/esm2022/lib/guards/no-login/no-login.guard.mjs +1 -1
  56. package/esm2022/lib/interceptors/error-interceptor/http-error-interceptor.mjs +3 -51
  57. package/esm2022/lib/interceptors/header-interceptor/http-header.interceptor.mjs +1 -1
  58. package/esm2022/lib/models/EmployerDetailSearchResult.mjs +1 -1
  59. package/esm2022/lib/models/LexisNexisAccountCreationModel.mjs +2 -0
  60. package/esm2022/lib/models/LexisNexisAuthSelectionRequestModel.mjs +2 -0
  61. package/esm2022/lib/models/LexisNexisAuthSelectionResponseModel.mjs +2 -0
  62. package/esm2022/lib/models/LexisNexisEnabledResponseModel.mjs +2 -0
  63. package/esm2022/lib/models/LexisNexisResponseModel.mjs +3 -0
  64. package/esm2022/lib/models/LibConstants.mjs +6 -45
  65. package/esm2022/lib/models/PartialEmploymentModel.mjs +3 -0
  66. package/esm2022/lib/models/PaymentComponentModel.mjs +1 -1
  67. package/esm2022/lib/models/SecurityQuestionModel.mjs +3 -0
  68. package/esm2022/lib/models/dashboard-model.mjs +1 -1
  69. package/esm2022/lib/models/dependent.model.mjs +1 -1
  70. package/esm2022/lib/models/questionnaire/ClaimAppEmpResponseModel.mjs +1 -1
  71. package/esm2022/lib/models/questionnaire/ClaimAppEmployerDetailsModel.mjs +1 -2
  72. package/esm2022/lib/models/questionnaire/ClaimOnlyEmployerDataModel.mjs +1 -1
  73. package/esm2022/lib/models/questionnaire/ComboModel.mjs +653 -96
  74. package/esm2022/lib/models/questionnaire/ElementsModel.mjs +1 -1
  75. package/esm2022/lib/models/questionnaire/LegalDiscaimarModel.mjs +1 -1
  76. package/esm2022/lib/models/questionnaire/StatusModel.mjs +1 -1
  77. package/esm2022/lib/ngx-reusa-app-lib.module.mjs +23 -135
  78. package/esm2022/lib/pages/BasePage.mjs +23 -4
  79. package/esm2022/lib/pages/common/accessibility-policy/accessibility-policy.page.mjs +18 -22
  80. package/esm2022/lib/pages/common/change-password/change-password.page.mjs +124 -142
  81. package/esm2022/lib/pages/common/landing/landing.component.mjs +8 -7
  82. package/esm2022/lib/pages/common/landing2/landing2.component.mjs +4 -4
  83. package/esm2022/lib/pages/common/login/login.component.mjs +11 -7
  84. package/esm2022/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.mjs +14 -14
  85. package/esm2022/lib/pages/common/security-policy/security-policy.page.mjs +5 -5
  86. package/esm2022/lib/pages/popovers/language/language.page.mjs +2 -1
  87. package/esm2022/lib/pages/popovers/my-notifications/my-notifications.page.mjs +4 -4
  88. package/esm2022/lib/pages/popovers/my-profile/my-profile.page.mjs +2 -7
  89. package/esm2022/lib/pipes/translate/dynamic-translate.pipe.mjs +2 -2
  90. package/esm2022/lib/services/base-service.mjs +1 -4
  91. package/esm2022/lib/services/chatbot/chatbot.service.mjs +2 -1
  92. package/esm2022/lib/services/claimant-service/claimant-usps-redirect.service.mjs +36 -0
  93. package/esm2022/lib/services/claimant-service/claimant.service.mjs +13 -7
  94. package/esm2022/lib/services/claims/claims.service.mjs +14 -102
  95. package/esm2022/lib/services/help/help.service.mjs +1 -1
  96. package/esm2022/lib/services/lexis-nexis/lexis.nexis.service.mjs +60 -0
  97. package/esm2022/lib/services/logger/logger.service.mjs +1 -1
  98. package/esm2022/lib/services/login/login.service.mjs +11 -29
  99. package/esm2022/lib/services/ovp/ovp.service.mjs +43 -0
  100. package/esm2022/lib/services/questionnaire/questionnaire.service.mjs +1 -4
  101. package/esm2022/lib/services/questionnaire/validation.service.mjs +1 -4
  102. package/esm2022/lib/services/security-service/security.service.mjs +6 -23
  103. package/esm2022/lib/services/util/util.service.mjs +5 -61
  104. package/esm2022/lib/services/weekly-cert/weekly-cert-v2.service.mjs +14 -186
  105. package/esm2022/lib/validations/AppRegex.mjs +3 -1
  106. package/esm2022/lib/validations/AppValidators.mjs +31 -84
  107. package/esm2022/public-api.mjs +5 -47
  108. package/fesm2022/reusa-ngx-reusa-app-lib.mjs +26361 -44289
  109. package/fesm2022/reusa-ngx-reusa-app-lib.mjs.map +1 -1
  110. package/lib/components/add-employer/add-employer.component.d.ts +50 -137
  111. package/lib/components/add-employer/add-employer.component.d.ts.map +1 -1
  112. package/lib/components/add-participant/add-participant.component.d.ts +5 -11
  113. package/lib/components/add-participant/add-participant.component.d.ts.map +1 -1
  114. package/lib/components/add-payment/add-payment.component.d.ts +3 -9
  115. package/lib/components/add-payment/add-payment.component.d.ts.map +1 -1
  116. package/lib/components/address/address.component.d.ts +15 -42
  117. package/lib/components/address/address.component.d.ts.map +1 -1
  118. package/lib/components/bank-details/bank-details.component.d.ts +23 -1
  119. package/lib/components/bank-details/bank-details.component.d.ts.map +1 -1
  120. package/lib/components/contact-us/contact-us.component.d.ts +4 -1
  121. package/lib/components/contact-us/contact-us.component.d.ts.map +1 -1
  122. package/lib/components/correspondence-download/correspondence-download.component.d.ts.map +1 -1
  123. package/lib/components/dashboard-card/dashboard-card.component.d.ts.map +1 -1
  124. package/lib/components/email-update/email-update.component.d.ts +12 -1
  125. package/lib/components/email-update/email-update.component.d.ts.map +1 -1
  126. package/lib/components/employer-grid/employer-grid.component.d.ts +14 -21
  127. package/lib/components/employer-grid/employer-grid.component.d.ts.map +1 -1
  128. package/lib/components/error/error.component.d.ts +2 -3
  129. package/lib/components/error/error.component.d.ts.map +1 -1
  130. package/lib/components/file-uploader/file-uploader.component.d.ts +1 -5
  131. package/lib/components/file-uploader/file-uploader.component.d.ts.map +1 -1
  132. package/lib/components/footer/footer.component.d.ts.map +1 -1
  133. package/lib/components/header/header.component.d.ts +5 -17
  134. package/lib/components/header/header.component.d.ts.map +1 -1
  135. package/lib/components/job-search-result-page/job-search-result-page.component.d.ts +3 -1
  136. package/lib/components/job-search-result-page/job-search-result-page.component.d.ts.map +1 -1
  137. package/lib/components/job-title/job-title.component.d.ts +23 -22
  138. package/lib/components/job-title/job-title.component.d.ts.map +1 -1
  139. package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts +6 -5
  140. package/lib/components/legal-disclaimar/legal-disclaimar.component.d.ts.map +1 -1
  141. package/lib/components/lexis-nexis/lexis-nexis.component.d.ts +59 -0
  142. package/lib/components/lexis-nexis/lexis-nexis.component.d.ts.map +1 -0
  143. package/lib/components/menu/menu.component.d.ts +12 -3
  144. package/lib/components/menu/menu.component.d.ts.map +1 -1
  145. package/lib/components/mfa/mfa.component.d.ts +19 -7
  146. package/lib/components/mfa/mfa.component.d.ts.map +1 -1
  147. package/lib/components/mfa-popup/mfa-popup.component.d.ts +8 -6
  148. package/lib/components/mfa-popup/mfa-popup.component.d.ts.map +1 -1
  149. package/lib/components/mfa2/mfa2.component.d.ts +48 -0
  150. package/lib/components/mfa2/mfa2.component.d.ts.map +1 -0
  151. package/lib/components/money-expect/money-expect.component.d.ts +4 -15
  152. package/lib/components/money-expect/money-expect.component.d.ts.map +1 -1
  153. package/lib/components/profile/profile.component.d.ts +49 -83
  154. package/lib/components/profile/profile.component.d.ts.map +1 -1
  155. package/lib/components/profile-redirect/profile-redirect.component.d.ts +2 -9
  156. package/lib/components/profile-redirect/profile-redirect.component.d.ts.map +1 -1
  157. package/lib/components/questionnaire/AppValidators.d.ts +0 -1
  158. package/lib/components/questionnaire/AppValidators.d.ts.map +1 -1
  159. package/lib/components/questionnaire/account-success/account-success.page.d.ts +10 -13
  160. package/lib/components/questionnaire/account-success/account-success.page.d.ts.map +1 -1
  161. package/lib/components/questionnaire/common-success/common-success.page.d.ts +1 -7
  162. package/lib/components/questionnaire/common-success/common-success.page.d.ts.map +1 -1
  163. package/lib/components/questionnaire/dynamic-form-panel.component.d.ts +1 -3
  164. package/lib/components/questionnaire/dynamic-form-panel.component.d.ts.map +1 -1
  165. package/lib/components/questionnaire/dynamic-form-question.component.d.ts +33 -31
  166. package/lib/components/questionnaire/dynamic-form-question.component.d.ts.map +1 -1
  167. package/lib/components/questionnaire/dynamic-form.component.d.ts +34 -10
  168. package/lib/components/questionnaire/dynamic-form.component.d.ts.map +1 -1
  169. package/lib/components/questionnaire/form-builder/form-builder.page.d.ts +7 -0
  170. package/lib/components/questionnaire/form-builder/form-builder.page.d.ts.map +1 -1
  171. package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts +1 -7
  172. package/lib/components/questionnaire/multi-questionnaire/multi-questionnaire.component.d.ts.map +1 -1
  173. package/lib/components/questionnaire/question-control.service.d.ts.map +1 -1
  174. package/lib/components/questionnaire/question.service.d.ts +1 -0
  175. package/lib/components/questionnaire/question.service.d.ts.map +1 -1
  176. package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts +7 -1
  177. package/lib/components/questionnaire/render-questionnaire/render-questionnaire.page.d.ts.map +1 -1
  178. package/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.d.ts +3 -10
  179. package/lib/components/requalify-lift-previous-issues/requalify-lift-previous-issues.component.d.ts.map +1 -1
  180. package/lib/components/search-employer/search-employer.component.d.ts +4 -5
  181. package/lib/components/search-employer/search-employer.component.d.ts.map +1 -1
  182. package/lib/components/security-question/security-question.component.d.ts +37 -0
  183. package/lib/components/security-question/security-question.component.d.ts.map +1 -0
  184. package/lib/components/ssn-reverify/ssn-reverify.component.d.ts +5 -1
  185. package/lib/components/ssn-reverify/ssn-reverify.component.d.ts.map +1 -1
  186. package/lib/components/user-login/user-login.component.d.ts +38 -5
  187. package/lib/components/user-login/user-login.component.d.ts.map +1 -1
  188. package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts +10 -27
  189. package/lib/components/weekly-cert-employer/weekly-cert-employer.component.d.ts.map +1 -1
  190. package/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.d.ts +3 -9
  191. package/lib/components/weekly-cert-employer-grid/weekly-cert-employer-grid.component.d.ts.map +1 -1
  192. package/lib/guards/auth.guard.d.ts.map +1 -1
  193. package/lib/interceptors/error-interceptor/http-error-interceptor.d.ts.map +1 -1
  194. package/lib/models/EmployerDetailSearchResult.d.ts +1 -4
  195. package/lib/models/EmployerDetailSearchResult.d.ts.map +1 -1
  196. package/lib/models/LexisNexisAccountCreationModel.d.ts +15 -0
  197. package/lib/models/LexisNexisAccountCreationModel.d.ts.map +1 -0
  198. package/lib/models/LexisNexisAuthSelectionRequestModel.d.ts +16 -0
  199. package/lib/models/LexisNexisAuthSelectionRequestModel.d.ts.map +1 -0
  200. package/lib/models/LexisNexisAuthSelectionResponseModel.d.ts +39 -0
  201. package/lib/models/LexisNexisAuthSelectionResponseModel.d.ts.map +1 -0
  202. package/lib/models/LexisNexisEnabledResponseModel.d.ts +5 -0
  203. package/lib/models/LexisNexisEnabledResponseModel.d.ts.map +1 -0
  204. package/lib/models/LexisNexisResponseModel.d.ts +7 -0
  205. package/lib/models/LexisNexisResponseModel.d.ts.map +1 -0
  206. package/lib/models/LibConstants.d.ts +1 -40
  207. package/lib/models/LibConstants.d.ts.map +1 -1
  208. package/lib/models/PartialEmploymentModel.d.ts +6 -0
  209. package/lib/models/PartialEmploymentModel.d.ts.map +1 -0
  210. package/lib/models/PaymentComponentModel.d.ts +1 -1
  211. package/lib/models/PaymentComponentModel.d.ts.map +1 -1
  212. package/lib/models/SecurityQuestionModel.d.ts +7 -0
  213. package/lib/models/SecurityQuestionModel.d.ts.map +1 -0
  214. package/lib/models/dashboard-model.d.ts +0 -16
  215. package/lib/models/dashboard-model.d.ts.map +1 -1
  216. package/lib/models/questionnaire/ClaimAppEmpResponseModel.d.ts +0 -3
  217. package/lib/models/questionnaire/ClaimAppEmpResponseModel.d.ts.map +1 -1
  218. package/lib/models/questionnaire/ClaimAppEmployerDetailsModel.d.ts +4 -13
  219. package/lib/models/questionnaire/ClaimAppEmployerDetailsModel.d.ts.map +1 -1
  220. package/lib/models/questionnaire/ClaimOnlyEmployerDataModel.d.ts +1 -4
  221. package/lib/models/questionnaire/ClaimOnlyEmployerDataModel.d.ts.map +1 -1
  222. package/lib/models/questionnaire/ComboModel.d.ts +82 -14
  223. package/lib/models/questionnaire/ComboModel.d.ts.map +1 -1
  224. package/lib/models/questionnaire/ElementsModel.d.ts +1 -0
  225. package/lib/models/questionnaire/ElementsModel.d.ts.map +1 -1
  226. package/lib/models/questionnaire/LegalDiscaimarModel.d.ts +0 -2
  227. package/lib/models/questionnaire/LegalDiscaimarModel.d.ts.map +1 -1
  228. package/lib/models/questionnaire/StatusModel.d.ts +0 -1
  229. package/lib/models/questionnaire/StatusModel.d.ts.map +1 -1
  230. package/lib/ngx-reusa-app-lib.module.d.ts +86 -124
  231. package/lib/ngx-reusa-app-lib.module.d.ts.map +1 -1
  232. package/lib/pages/BasePage.d.ts +6 -3
  233. package/lib/pages/BasePage.d.ts.map +1 -1
  234. package/lib/pages/common/change-password/change-password.page.d.ts +0 -3
  235. package/lib/pages/common/change-password/change-password.page.d.ts.map +1 -1
  236. package/lib/pages/common/login/login.component.d.ts.map +1 -1
  237. package/lib/pages/popovers/language/language.page.d.ts.map +1 -1
  238. package/lib/pages/popovers/my-profile/my-profile.page.d.ts.map +1 -1
  239. package/lib/services/base-service.d.ts +0 -12
  240. package/lib/services/base-service.d.ts.map +1 -1
  241. package/lib/services/claimant-service/claimant-usps-redirect.service.d.ts +16 -0
  242. package/lib/services/claimant-service/claimant-usps-redirect.service.d.ts.map +1 -0
  243. package/lib/services/claimant-service/claimant.service.d.ts +6 -5
  244. package/lib/services/claimant-service/claimant.service.d.ts.map +1 -1
  245. package/lib/services/claims/claims.service.d.ts +5 -38
  246. package/lib/services/claims/claims.service.d.ts.map +1 -1
  247. package/lib/services/lexis-nexis/lexis.nexis.service.d.ts +26 -0
  248. package/lib/services/lexis-nexis/lexis.nexis.service.d.ts.map +1 -0
  249. package/lib/services/login/login.service.d.ts +3 -5
  250. package/lib/services/login/login.service.d.ts.map +1 -1
  251. package/lib/services/ovp/ovp.service.d.ts +17 -0
  252. package/lib/services/ovp/ovp.service.d.ts.map +1 -0
  253. package/lib/services/questionnaire/questionnaire.service.d.ts +0 -1
  254. package/lib/services/questionnaire/questionnaire.service.d.ts.map +1 -1
  255. package/lib/services/questionnaire/validation.service.d.ts +0 -3
  256. package/lib/services/questionnaire/validation.service.d.ts.map +1 -1
  257. package/lib/services/security-service/security.service.d.ts +4 -12
  258. package/lib/services/security-service/security.service.d.ts.map +1 -1
  259. package/lib/services/util/util.service.d.ts +0 -6
  260. package/lib/services/util/util.service.d.ts.map +1 -1
  261. package/lib/services/weekly-cert/weekly-cert-v2.service.d.ts +5 -47
  262. package/lib/services/weekly-cert/weekly-cert-v2.service.d.ts.map +1 -1
  263. package/lib/validations/AppRegex.d.ts +2 -0
  264. package/lib/validations/AppRegex.d.ts.map +1 -1
  265. package/lib/validations/AppValidators.d.ts +14 -20
  266. package/lib/validations/AppValidators.d.ts.map +1 -1
  267. package/package.json +2 -2
  268. package/public-api.d.ts +4 -46
  269. package/public-api.d.ts.map +1 -1
  270. package/esm2022/lib/components/add-wage/add-wage.component.mjs +0 -161
  271. package/esm2022/lib/components/address-popup/address-popup.component.mjs +0 -97
  272. package/esm2022/lib/components/address-suggestion/address-suggestion.component.mjs +0 -281
  273. package/esm2022/lib/components/appointment-self-scheduler/appointment-self-scheduler.component.mjs +0 -245
  274. package/esm2022/lib/components/associate-ssn/associate-ssn.component.mjs +0 -203
  275. package/esm2022/lib/components/claim-info/claim-info.component.mjs +0 -408
  276. package/esm2022/lib/components/dua-request-page/dua-request-page.component.mjs +0 -596
  277. package/esm2022/lib/components/dua-request-popup/dua-request-popup.component.mjs +0 -356
  278. package/esm2022/lib/components/employer-info/employer-info.component.mjs +0 -319
  279. package/esm2022/lib/components/employer-pay/employer-pay.component.mjs +0 -238
  280. package/esm2022/lib/components/employer-pay-grid/employer-pay-grid.component.mjs +0 -302
  281. package/esm2022/lib/components/farm-usage/farm-usage.component.mjs +0 -172
  282. package/esm2022/lib/components/gross-earnings/gross-earnings.component.mjs +0 -201
  283. package/esm2022/lib/components/history-page/history-page.component.mjs +0 -560
  284. package/esm2022/lib/components/idme/idme.component.mjs +0 -84
  285. package/esm2022/lib/components/offline-add-employer/offline-add-employer.component.mjs +0 -3661
  286. package/esm2022/lib/components/offline-bank-details/offline-bank-details.component.mjs +0 -258
  287. package/esm2022/lib/components/offline-employer-grid/offline-employer-grid.component.mjs +0 -853
  288. package/esm2022/lib/components/offline-legal-disclaimar/offline-legal-disclaimar.component.mjs +0 -251
  289. package/esm2022/lib/components/proof-of-anything/proof-of-anything.component.mjs +0 -261
  290. package/esm2022/lib/components/proof-of-document-upload/proof-of-document-upload.component.mjs +0 -510
  291. package/esm2022/lib/components/scrollable-text/scrollable-text.component.mjs +0 -25
  292. package/esm2022/lib/components/sms/sms.component.mjs +0 -336
  293. package/esm2022/lib/components/wage-calculator/wage-calculator.component.mjs +0 -527
  294. package/esm2022/lib/components/wage-grid/wage-grid.component.mjs +0 -274
  295. package/esm2022/lib/components/weekly-acknowledgement-ms/acknowledgement-ms.component.mjs +0 -147
  296. package/esm2022/lib/components/weekly-acknowledgement-v2/acknowledgement.component-v2.mjs +0 -167
  297. package/esm2022/lib/components/weekly-certification/weekly-certification.component.mjs +0 -804
  298. package/esm2022/lib/components/weekly-confirmation/confirmation.component.mjs +0 -129
  299. package/esm2022/lib/components/weekly-interim-confirmation/interim-confirmation.component.mjs +0 -136
  300. package/esm2022/lib/components/weekly-summary-v2/summary.component-v2.mjs +0 -72
  301. package/esm2022/lib/components/weekly-work-performed-popup/weekly-work-performed-popup.component.mjs +0 -50
  302. package/esm2022/lib/components/weekly-work-search-counter/work-search-counter.component.mjs +0 -92
  303. package/esm2022/lib/components/weekly-work-search-employer-me/work-search-employer.component-me.mjs +0 -1190
  304. package/esm2022/lib/components/weekly-work-search-employer-ms/work-search-employer-ms.component.mjs +0 -683
  305. package/esm2022/lib/components/weekly-work-search-employer-v2/work-search-employer.component-v2.mjs +0 -524
  306. package/esm2022/lib/components/weekly-work-search-journal/weekly-work-search-journal.component.mjs +0 -394
  307. package/esm2022/lib/components/weekly-work-search-question-v2/work-search-question.component-v2.mjs +0 -640
  308. package/esm2022/lib/directives/strip-invisible-characters/strip-invisible-characters.directive.mjs +0 -33
  309. package/esm2022/lib/enums/AddressValidationResponseEnum.mjs +0 -9
  310. package/esm2022/lib/enums/AddressValidationSourceFunctionEnum.mjs +0 -5
  311. package/esm2022/lib/models/ActiveClaimModel.mjs +0 -3
  312. package/esm2022/lib/models/CountyModel.mjs +0 -3
  313. package/esm2022/lib/models/DuaAppDataModel.mjs +0 -3
  314. package/esm2022/lib/models/DuaRequestModel.mjs +0 -3
  315. package/esm2022/lib/models/DuaRetroWeeksComponentModel.mjs +0 -6
  316. package/esm2022/lib/models/EmployerInfoComponentModel.mjs +0 -4
  317. package/esm2022/lib/models/EmployerPayInfoModel.mjs +0 -6
  318. package/esm2022/lib/models/FarmUsageComponentModel.mjs +0 -2
  319. package/esm2022/lib/models/GrossEarningsModel.mjs +0 -3
  320. package/esm2022/lib/models/HelpConstants.mjs +0 -5
  321. package/esm2022/lib/models/LexisNexisOtpDetailsResponseModel.mjs +0 -3
  322. package/esm2022/lib/models/ReasonSeparationRequestModel.mjs +0 -3
  323. package/esm2022/lib/models/RetroWeeksModel.mjs +0 -3
  324. package/esm2022/lib/models/SecurityQuestionAnswerModel.mjs +0 -3
  325. package/esm2022/lib/models/SendOtpRequestModel.mjs +0 -3
  326. package/esm2022/lib/models/VerifyOtpRequestModel.mjs +0 -3
  327. package/esm2022/lib/models/WageCalculatorModel.mjs +0 -3
  328. package/esm2022/lib/models/WageInfoModel.mjs +0 -4
  329. package/esm2022/lib/models/addressValidation/AddressRecommendationModel.mjs +0 -3
  330. package/esm2022/lib/models/addressValidation/AddressValidationRequestComponentModel.mjs +0 -3
  331. package/esm2022/lib/models/addressValidation/AddressValidationResponseComponentModel.mjs +0 -3
  332. package/esm2022/lib/models/addressValidation/AddressValidationReturnComponentModel.mjs +0 -3
  333. package/esm2022/lib/models/combo-model.mjs +0 -343
  334. package/esm2022/lib/models/fileupload/DocUploadModel.mjs +0 -7
  335. package/esm2022/lib/models/fileupload/EmployerDataModel.mjs +0 -3
  336. package/esm2022/lib/models/fileupload/FileObject.mjs +0 -3
  337. package/esm2022/lib/models/fileupload/FileObjectArray.mjs +0 -7
  338. package/esm2022/lib/models/questionnaire/AppealParticipantModel.mjs +0 -8
  339. package/esm2022/lib/models/questionnaire/ScrollableTextModel.mjs +0 -3
  340. package/esm2022/lib/models/questionnaire/WbaHelperTextModel.mjs +0 -3
  341. package/esm2022/lib/models/weekly-cert/WorkSearchWaiverModel.mjs +0 -3
  342. package/esm2022/lib/models/weekly-cert/address-detail-model.mjs +0 -2
  343. package/esm2022/lib/models/weekly-cert/admin-leave-details-model.mjs +0 -7
  344. package/esm2022/lib/models/weekly-cert/employer-info-v2-model.mjs +0 -7
  345. package/esm2022/lib/models/weekly-cert/weekly-cert-eligibility-v2-model.mjs +0 -6
  346. package/esm2022/lib/models/weekly-cert/weekly-certification-v2-model.mjs +0 -34
  347. package/esm2022/lib/models/weekly-cert/work-search-record-v2-model.mjs +0 -15
  348. package/esm2022/lib/models/weekly-cert/work-search-v2-model.mjs +0 -11
  349. package/esm2022/lib/pipes/format-worksearch/format-worksearch.pipe.mjs +0 -101
  350. package/esm2022/lib/services/address-validation-service/address-validation.service.mjs +0 -151
  351. package/esm2022/lib/services/appeal/appeal.service.mjs +0 -37
  352. package/esm2022/lib/services/birt-service/birt.service.mjs +0 -57
  353. package/esm2022/lib/services/employer/employer-service.mjs +0 -35
  354. package/esm2022/lib/services/event-service/event-service.mjs +0 -44
  355. package/esm2022/lib/services/offline-claims/offline-claims.service.mjs +0 -327
  356. package/esm2022/lib/services/weekly-cert/review.service.mjs +0 -101
  357. package/esm2022/lib/services/weekly-cert/weekly-cert.service.mjs +0 -37
  358. package/esm2022/lib/services/weekly-cert/work-search.service.mjs +0 -58
  359. package/lib/components/add-wage/add-wage.component.d.ts +0 -30
  360. package/lib/components/add-wage/add-wage.component.d.ts.map +0 -1
  361. package/lib/components/address-popup/address-popup.component.d.ts +0 -16
  362. package/lib/components/address-popup/address-popup.component.d.ts.map +0 -1
  363. package/lib/components/address-suggestion/address-suggestion.component.d.ts +0 -43
  364. package/lib/components/address-suggestion/address-suggestion.component.d.ts.map +0 -1
  365. package/lib/components/appointment-self-scheduler/appointment-self-scheduler.component.d.ts +0 -37
  366. package/lib/components/appointment-self-scheduler/appointment-self-scheduler.component.d.ts.map +0 -1
  367. package/lib/components/associate-ssn/associate-ssn.component.d.ts +0 -33
  368. package/lib/components/associate-ssn/associate-ssn.component.d.ts.map +0 -1
  369. package/lib/components/claim-info/claim-info.component.d.ts +0 -49
  370. package/lib/components/claim-info/claim-info.component.d.ts.map +0 -1
  371. package/lib/components/dua-request-page/dua-request-page.component.d.ts +0 -74
  372. package/lib/components/dua-request-page/dua-request-page.component.d.ts.map +0 -1
  373. package/lib/components/dua-request-popup/dua-request-popup.component.d.ts +0 -61
  374. package/lib/components/dua-request-popup/dua-request-popup.component.d.ts.map +0 -1
  375. package/lib/components/employer-info/employer-info.component.d.ts +0 -50
  376. package/lib/components/employer-info/employer-info.component.d.ts.map +0 -1
  377. package/lib/components/employer-pay/employer-pay.component.d.ts +0 -51
  378. package/lib/components/employer-pay/employer-pay.component.d.ts.map +0 -1
  379. package/lib/components/employer-pay-grid/employer-pay-grid.component.d.ts +0 -43
  380. package/lib/components/employer-pay-grid/employer-pay-grid.component.d.ts.map +0 -1
  381. package/lib/components/farm-usage/farm-usage.component.d.ts +0 -33
  382. package/lib/components/farm-usage/farm-usage.component.d.ts.map +0 -1
  383. package/lib/components/gross-earnings/gross-earnings.component.d.ts +0 -42
  384. package/lib/components/gross-earnings/gross-earnings.component.d.ts.map +0 -1
  385. package/lib/components/history-page/history-page.component.d.ts +0 -80
  386. package/lib/components/history-page/history-page.component.d.ts.map +0 -1
  387. package/lib/components/idme/idme.component.d.ts +0 -19
  388. package/lib/components/idme/idme.component.d.ts.map +0 -1
  389. package/lib/components/offline-add-employer/offline-add-employer.component.d.ts +0 -311
  390. package/lib/components/offline-add-employer/offline-add-employer.component.d.ts.map +0 -1
  391. package/lib/components/offline-bank-details/offline-bank-details.component.d.ts +0 -33
  392. package/lib/components/offline-bank-details/offline-bank-details.component.d.ts.map +0 -1
  393. package/lib/components/offline-employer-grid/offline-employer-grid.component.d.ts +0 -97
  394. package/lib/components/offline-employer-grid/offline-employer-grid.component.d.ts.map +0 -1
  395. package/lib/components/offline-legal-disclaimar/offline-legal-disclaimar.component.d.ts +0 -33
  396. package/lib/components/offline-legal-disclaimar/offline-legal-disclaimar.component.d.ts.map +0 -1
  397. package/lib/components/proof-of-anything/proof-of-anything.component.d.ts +0 -54
  398. package/lib/components/proof-of-anything/proof-of-anything.component.d.ts.map +0 -1
  399. package/lib/components/proof-of-document-upload/proof-of-document-upload.component.d.ts +0 -74
  400. package/lib/components/proof-of-document-upload/proof-of-document-upload.component.d.ts.map +0 -1
  401. package/lib/components/scrollable-text/scrollable-text.component.d.ts +0 -11
  402. package/lib/components/scrollable-text/scrollable-text.component.d.ts.map +0 -1
  403. package/lib/components/sms/sms.component.d.ts +0 -63
  404. package/lib/components/sms/sms.component.d.ts.map +0 -1
  405. package/lib/components/wage-calculator/wage-calculator.component.d.ts +0 -44
  406. package/lib/components/wage-calculator/wage-calculator.component.d.ts.map +0 -1
  407. package/lib/components/wage-grid/wage-grid.component.d.ts +0 -43
  408. package/lib/components/wage-grid/wage-grid.component.d.ts.map +0 -1
  409. package/lib/components/weekly-acknowledgement-ms/acknowledgement-ms.component.d.ts +0 -28
  410. package/lib/components/weekly-acknowledgement-ms/acknowledgement-ms.component.d.ts.map +0 -1
  411. package/lib/components/weekly-acknowledgement-v2/acknowledgement.component-v2.d.ts +0 -28
  412. package/lib/components/weekly-acknowledgement-v2/acknowledgement.component-v2.d.ts.map +0 -1
  413. package/lib/components/weekly-certification/weekly-certification.component.d.ts +0 -99
  414. package/lib/components/weekly-certification/weekly-certification.component.d.ts.map +0 -1
  415. package/lib/components/weekly-confirmation/confirmation.component.d.ts +0 -21
  416. package/lib/components/weekly-confirmation/confirmation.component.d.ts.map +0 -1
  417. package/lib/components/weekly-interim-confirmation/interim-confirmation.component.d.ts +0 -34
  418. package/lib/components/weekly-interim-confirmation/interim-confirmation.component.d.ts.map +0 -1
  419. package/lib/components/weekly-summary-v2/summary.component-v2.d.ts +0 -17
  420. package/lib/components/weekly-summary-v2/summary.component-v2.d.ts.map +0 -1
  421. package/lib/components/weekly-work-performed-popup/weekly-work-performed-popup.component.d.ts +0 -10
  422. package/lib/components/weekly-work-performed-popup/weekly-work-performed-popup.component.d.ts.map +0 -1
  423. package/lib/components/weekly-work-search-counter/work-search-counter.component.d.ts +0 -17
  424. package/lib/components/weekly-work-search-counter/work-search-counter.component.d.ts.map +0 -1
  425. package/lib/components/weekly-work-search-employer-me/work-search-employer.component-me.d.ts +0 -105
  426. package/lib/components/weekly-work-search-employer-me/work-search-employer.component-me.d.ts.map +0 -1
  427. package/lib/components/weekly-work-search-employer-ms/work-search-employer-ms.component.d.ts +0 -69
  428. package/lib/components/weekly-work-search-employer-ms/work-search-employer-ms.component.d.ts.map +0 -1
  429. package/lib/components/weekly-work-search-employer-v2/work-search-employer.component-v2.d.ts +0 -59
  430. package/lib/components/weekly-work-search-employer-v2/work-search-employer.component-v2.d.ts.map +0 -1
  431. package/lib/components/weekly-work-search-journal/weekly-work-search-journal.component.d.ts +0 -47
  432. package/lib/components/weekly-work-search-journal/weekly-work-search-journal.component.d.ts.map +0 -1
  433. package/lib/components/weekly-work-search-question-v2/work-search-question.component-v2.d.ts +0 -78
  434. package/lib/components/weekly-work-search-question-v2/work-search-question.component-v2.d.ts.map +0 -1
  435. package/lib/directives/strip-invisible-characters/strip-invisible-characters.directive.d.ts +0 -8
  436. package/lib/directives/strip-invisible-characters/strip-invisible-characters.directive.d.ts.map +0 -1
  437. package/lib/enums/AddressValidationResponseEnum.d.ts +0 -8
  438. package/lib/enums/AddressValidationResponseEnum.d.ts.map +0 -1
  439. package/lib/enums/AddressValidationSourceFunctionEnum.d.ts +0 -4
  440. package/lib/enums/AddressValidationSourceFunctionEnum.d.ts.map +0 -1
  441. package/lib/models/ActiveClaimModel.d.ts +0 -8
  442. package/lib/models/ActiveClaimModel.d.ts.map +0 -1
  443. package/lib/models/CountyModel.d.ts +0 -8
  444. package/lib/models/CountyModel.d.ts.map +0 -1
  445. package/lib/models/DuaAppDataModel.d.ts +0 -5
  446. package/lib/models/DuaAppDataModel.d.ts.map +0 -1
  447. package/lib/models/DuaRequestModel.d.ts +0 -10
  448. package/lib/models/DuaRequestModel.d.ts.map +0 -1
  449. package/lib/models/DuaRetroWeeksComponentModel.d.ts +0 -5
  450. package/lib/models/DuaRetroWeeksComponentModel.d.ts.map +0 -1
  451. package/lib/models/EmployerInfoComponentModel.d.ts +0 -9
  452. package/lib/models/EmployerInfoComponentModel.d.ts.map +0 -1
  453. package/lib/models/EmployerPayInfoModel.d.ts +0 -20
  454. package/lib/models/EmployerPayInfoModel.d.ts.map +0 -1
  455. package/lib/models/FarmUsageComponentModel.d.ts +0 -10
  456. package/lib/models/FarmUsageComponentModel.d.ts.map +0 -1
  457. package/lib/models/GrossEarningsModel.d.ts +0 -6
  458. package/lib/models/GrossEarningsModel.d.ts.map +0 -1
  459. package/lib/models/HelpConstants.d.ts +0 -5
  460. package/lib/models/HelpConstants.d.ts.map +0 -1
  461. package/lib/models/LexisNexisOtpDetailsResponseModel.d.ts +0 -7
  462. package/lib/models/LexisNexisOtpDetailsResponseModel.d.ts.map +0 -1
  463. package/lib/models/ReasonSeparationRequestModel.d.ts +0 -7
  464. package/lib/models/ReasonSeparationRequestModel.d.ts.map +0 -1
  465. package/lib/models/RetroWeeksModel.d.ts +0 -11
  466. package/lib/models/RetroWeeksModel.d.ts.map +0 -1
  467. package/lib/models/SecurityQuestionAnswerModel.d.ts +0 -7
  468. package/lib/models/SecurityQuestionAnswerModel.d.ts.map +0 -1
  469. package/lib/models/SendOtpRequestModel.d.ts +0 -12
  470. package/lib/models/SendOtpRequestModel.d.ts.map +0 -1
  471. package/lib/models/VerifyOtpRequestModel.d.ts +0 -8
  472. package/lib/models/VerifyOtpRequestModel.d.ts.map +0 -1
  473. package/lib/models/WageCalculatorModel.d.ts +0 -15
  474. package/lib/models/WageCalculatorModel.d.ts.map +0 -1
  475. package/lib/models/WageInfoModel.d.ts +0 -9
  476. package/lib/models/WageInfoModel.d.ts.map +0 -1
  477. package/lib/models/addressValidation/AddressRecommendationModel.d.ts +0 -12
  478. package/lib/models/addressValidation/AddressRecommendationModel.d.ts.map +0 -1
  479. package/lib/models/addressValidation/AddressValidationRequestComponentModel.d.ts +0 -11
  480. package/lib/models/addressValidation/AddressValidationRequestComponentModel.d.ts.map +0 -1
  481. package/lib/models/addressValidation/AddressValidationResponseComponentModel.d.ts +0 -6
  482. package/lib/models/addressValidation/AddressValidationResponseComponentModel.d.ts.map +0 -1
  483. package/lib/models/addressValidation/AddressValidationReturnComponentModel.d.ts +0 -16
  484. package/lib/models/addressValidation/AddressValidationReturnComponentModel.d.ts.map +0 -1
  485. package/lib/models/combo-model.d.ts +0 -42
  486. package/lib/models/combo-model.d.ts.map +0 -1
  487. package/lib/models/fileupload/DocUploadModel.d.ts +0 -22
  488. package/lib/models/fileupload/DocUploadModel.d.ts.map +0 -1
  489. package/lib/models/fileupload/EmployerDataModel.d.ts +0 -6
  490. package/lib/models/fileupload/EmployerDataModel.d.ts.map +0 -1
  491. package/lib/models/fileupload/FileObject.d.ts +0 -8
  492. package/lib/models/fileupload/FileObject.d.ts.map +0 -1
  493. package/lib/models/fileupload/FileObjectArray.d.ts +0 -8
  494. package/lib/models/fileupload/FileObjectArray.d.ts.map +0 -1
  495. package/lib/models/questionnaire/AppealParticipantModel.d.ts +0 -17
  496. package/lib/models/questionnaire/AppealParticipantModel.d.ts.map +0 -1
  497. package/lib/models/questionnaire/ScrollableTextModel.d.ts +0 -4
  498. package/lib/models/questionnaire/ScrollableTextModel.d.ts.map +0 -1
  499. package/lib/models/questionnaire/WbaHelperTextModel.d.ts +0 -4
  500. package/lib/models/questionnaire/WbaHelperTextModel.d.ts.map +0 -1
  501. package/lib/models/weekly-cert/WorkSearchWaiverModel.d.ts +0 -9
  502. package/lib/models/weekly-cert/WorkSearchWaiverModel.d.ts.map +0 -1
  503. package/lib/models/weekly-cert/address-detail-model.d.ts +0 -14
  504. package/lib/models/weekly-cert/address-detail-model.d.ts.map +0 -1
  505. package/lib/models/weekly-cert/admin-leave-details-model.d.ts +0 -15
  506. package/lib/models/weekly-cert/admin-leave-details-model.d.ts.map +0 -1
  507. package/lib/models/weekly-cert/employer-info-v2-model.d.ts +0 -27
  508. package/lib/models/weekly-cert/employer-info-v2-model.d.ts.map +0 -1
  509. package/lib/models/weekly-cert/weekly-cert-eligibility-v2-model.d.ts +0 -57
  510. package/lib/models/weekly-cert/weekly-cert-eligibility-v2-model.d.ts.map +0 -1
  511. package/lib/models/weekly-cert/weekly-certification-v2-model.d.ts +0 -59
  512. package/lib/models/weekly-cert/weekly-certification-v2-model.d.ts.map +0 -1
  513. package/lib/models/weekly-cert/work-search-record-v2-model.d.ts +0 -66
  514. package/lib/models/weekly-cert/work-search-record-v2-model.d.ts.map +0 -1
  515. package/lib/models/weekly-cert/work-search-v2-model.d.ts +0 -18
  516. package/lib/models/weekly-cert/work-search-v2-model.d.ts.map +0 -1
  517. package/lib/pipes/format-worksearch/format-worksearch.pipe.d.ts +0 -14
  518. package/lib/pipes/format-worksearch/format-worksearch.pipe.d.ts.map +0 -1
  519. package/lib/services/address-validation-service/address-validation.service.d.ts +0 -44
  520. package/lib/services/address-validation-service/address-validation.service.d.ts.map +0 -1
  521. package/lib/services/appeal/appeal.service.d.ts +0 -16
  522. package/lib/services/appeal/appeal.service.d.ts.map +0 -1
  523. package/lib/services/birt-service/birt.service.d.ts +0 -17
  524. package/lib/services/birt-service/birt.service.d.ts.map +0 -1
  525. package/lib/services/employer/employer-service.d.ts +0 -16
  526. package/lib/services/employer/employer-service.d.ts.map +0 -1
  527. package/lib/services/event-service/event-service.d.ts +0 -20
  528. package/lib/services/event-service/event-service.d.ts.map +0 -1
  529. package/lib/services/offline-claims/offline-claims.service.d.ts +0 -64
  530. package/lib/services/offline-claims/offline-claims.service.d.ts.map +0 -1
  531. package/lib/services/weekly-cert/review.service.d.ts +0 -23
  532. package/lib/services/weekly-cert/review.service.d.ts.map +0 -1
  533. package/lib/services/weekly-cert/weekly-cert.service.d.ts +0 -17
  534. package/lib/services/weekly-cert/weekly-cert.service.d.ts.map +0 -1
  535. package/lib/services/weekly-cert/work-search.service.d.ts +0 -26
  536. package/lib/services/weekly-cert/work-search.service.d.ts.map +0 -1
@@ -5,21 +5,21 @@ export class AppValidators {
5
5
  const func = (formGroup) => {
6
6
  if (validationName === "basePeriodEmplValidation") {
7
7
  let val;
8
- if (element.name === 'prevwork') {
8
+ if (formGroup.controls[element.name]) {
9
9
  val = formGroup.controls[element.name].value;
10
10
  if (val) {
11
11
  let bpEmpList;
12
12
  bpEmpList = val.bpEmpList;
13
- /*if (formGroup.controls['pastemp'] //&& formGroup.controls['workforemp'].value === 'Y'
13
+ if (formGroup.controls['workforemp'] && formGroup.controls['workforemp'].value === 'Y'
14
14
  && bpEmpList.length < 1) {
15
15
  formGroup.controls[element.name].setErrors({ bpEmplrLengthFlag: true });
16
16
  return { bpEmplrLengthFlag: true };
17
- } else {
17
+ }
18
+ else {
18
19
  formGroup.controls[element.name].setErrors(null);
19
- }*/
20
+ }
20
21
  for (var bpEmp of bpEmpList) {
21
- if (bpEmp.bpEmployerFlag === '1' && bpEmp.empDeleted === 'N'
22
- && (bpEmp.startDate === null && bpEmp.startDateFed === null && bpEmp.startDateMil === null)) {
22
+ if (bpEmp.bpEmployerFlag === '1' && !bpEmp.empDeleted) {
23
23
  formGroup.controls[element.name].setErrors({ bpEmplrFlag: true });
24
24
  return { bpEmplrFlag: true };
25
25
  }
@@ -63,76 +63,41 @@ export class AppValidators {
63
63
  else if (validationName === "addressValidation") {
64
64
  let addressCompValue;
65
65
  if (formGroup.controls[element.name]) {
66
- if (element.requiredIf) {
67
- let expression = element.requiredIf;
68
- let splitArray = expression.split('==');
69
- let contolName = splitArray[0].replace('{', '').replace('}', '').trim();
70
- let value = splitArray[1].replace(/'/g, '').trim();
71
- if (formGroup.controls[contolName] && formGroup.controls[contolName].value) {
72
- let valueOfCnrtrlToCheck = formGroup.controls[contolName].value.trim();
73
- if (value === 'Y' && valueOfCnrtrlToCheck === 'N') {
74
- const currentErrors = formGroup.controls[element.name].errors;
75
- if (currentErrors) {
76
- delete currentErrors['addressValidationFlag'];
77
- if (Object.keys(currentErrors).length === 0) {
78
- formGroup.controls[element.name].setErrors(null);
79
- }
80
- else {
81
- formGroup.controls[element.name].setErrors(currentErrors);
82
- }
83
- }
84
- else {
85
- formGroup.controls[element.name].setErrors(null);
86
- }
87
- return;
88
- }
89
- }
90
- }
91
66
  addressCompValue = formGroup.controls[element.name].value;
92
67
  if (addressCompValue) {
93
68
  if (!addressCompValue.city || !addressCompValue.state ||
94
69
  !addressCompValue['zip'] || !addressCompValue.country ||
95
- !addressCompValue['streetAddress']
96
- || (addressCompValue['neighborStateCheckRequired'] === 'Y' && !addressCompValue['neighbourFlag'])) {
97
- if (element.name === 'mailAddress') {
98
- }
70
+ !addressCompValue['streetAddress']) {
99
71
  formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
100
72
  }
101
- if (addressCompValue.state && addressCompValue.state.value &&
102
- ((addressCompValue.state.value === 'MS' && stateName === 'MS') ||
103
- (addressCompValue.state.value === 'CT' && stateName === 'CT')) &&
104
- element.countyRequired === true && !addressCompValue['county']) {
73
+ if (addressCompValue.state && addressCompValue.state.value && ((addressCompValue.state.value === 'MS' && stateName === 'MS')
74
+ || (addressCompValue.state.value === 'CT' && stateName === 'CT'))
75
+ && element.countyRequired === true && !addressCompValue['county']) {
105
76
  formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
106
77
  }
107
- if (addressCompValue.state && addressCompValue.state.value === 'ME' && stateName === 'ME' &&
108
- element.countyRequired === true && !addressCompValue['town']) {
78
+ if (addressCompValue.state && addressCompValue.state.value
79
+ && addressCompValue.state.value === 'ME' && stateName === 'ME'
80
+ && element.countyRequired === true && !addressCompValue['town']) {
81
+ formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
82
+ }
83
+ if ((addressCompValue.country.value === 'US'
84
+ && !(/^\d{5}(\d{4})?$/.test(addressCompValue.zip))) ||
85
+ (addressCompValue.country.value === 'CA'
86
+ && !(/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ -]?\d[ABCEGHJ-NPRSTV-Z]\d$/i.test(addressCompValue.zip)))) {
109
87
  formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
110
88
  }
111
89
  }
112
90
  else {
113
91
  if (element.requiredIf) {
114
92
  let expression = element.requiredIf;
115
- let splitArray = expression.split('==');
116
- let contolName = splitArray[0].replace('{', '').replace('}', '').trim();
117
- let value = splitArray[1].replace(/'/g, '').trim();
93
+ var splitArray = expression.split('==');
94
+ let contolName = splitArray[0];
95
+ let value = splitArray[1];
96
+ contolName = contolName.replace('{', '').replace('}', '').trim();
97
+ value = value.replace('\'', '').replace('\'', '').trim();
118
98
  if (formGroup.controls[contolName] && formGroup.controls[contolName].value) {
119
- let valueOfCnrtrlToCheck = formGroup.controls[contolName].value.trim();
120
- if (value === 'Y' && valueOfCnrtrlToCheck === 'N') {
121
- const currentErrors = formGroup.controls[element.name].errors;
122
- if (currentErrors) {
123
- delete currentErrors['addressValidationFlag'];
124
- if (Object.keys(currentErrors).length === 0) {
125
- formGroup.controls[element.name].setErrors(null);
126
- }
127
- else {
128
- formGroup.controls[element.name].setErrors(currentErrors);
129
- }
130
- }
131
- else {
132
- formGroup.controls[element.name].setErrors(null);
133
- }
134
- }
135
- else if (valueOfCnrtrlToCheck === value) {
99
+ var valueOfCnrtrlToCheck = formGroup.controls[contolName].value.trim();
100
+ if (valueOfCnrtrlToCheck === value) {
136
101
  formGroup.controls[element.name].setErrors({ addressValidationFlag: true });
137
102
  }
138
103
  }
@@ -172,82 +137,6 @@ export class AppValidators {
172
137
  }
173
138
  }
174
139
  }
175
- else if (validationName === "jobTileValidationFlag") {
176
- if (formGroup.controls[element.name]) {
177
- if (element.isRequired) {
178
- if (formGroup.controls[element.name].value === null) {
179
- formGroup.controls[element.name].setErrors({ jobTitleFlag: true });
180
- }
181
- else {
182
- formGroup.controls[element.name].setErrors(null);
183
- }
184
- }
185
- }
186
- }
187
- else if (validationName === "atLeastOne") {
188
- let currentFormControl = formGroup.controls[element.name];
189
- if (currentFormControl) {
190
- if (element.requiredIf) {
191
- let expression = element.requiredIf;
192
- let isRequired = false;
193
- if (expression.includes('&&') && !expression.includes('||')) {
194
- let expr = expression.split('&&');
195
- isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
196
- && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
197
- }
198
- if (expression.includes('||') && !expression.includes('&&')) {
199
- let expr = expression.split('||');
200
- isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
201
- || AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
202
- }
203
- let fields = validation.expression.split(",");
204
- let firstFormControl = formGroup.controls[fields[0].trim()];
205
- let secondFormCOntrol = formGroup.controls[fields[1].trim()];
206
- if (isRequired) {
207
- if (this.isNullOrUndefined(currentFormControl.value)
208
- && this.isNullOrUndefined(firstFormControl.value)
209
- && this.isNullOrUndefined(secondFormCOntrol.value)) {
210
- currentFormControl.setErrors({ atLeastOne: true });
211
- firstFormControl.setErrors({ atLeastOne: true });
212
- secondFormCOntrol.setErrors({ atLeastOne: true });
213
- }
214
- else {
215
- currentFormControl.setErrors(null);
216
- firstFormControl.setErrors(null);
217
- secondFormCOntrol.setErrors(null);
218
- if (this.isNullOrUndefined(currentFormControl.value)) {
219
- currentFormControl.setValue(0);
220
- }
221
- if (this.isNullOrUndefined(firstFormControl.value)) {
222
- firstFormControl.setValue(0);
223
- }
224
- if (this.isNullOrUndefined(secondFormCOntrol.value)) {
225
- secondFormCOntrol.setValue(0);
226
- }
227
- }
228
- }
229
- else {
230
- if (currentFormControl.value === 0
231
- && firstFormControl.value === 0
232
- && secondFormCOntrol.value === 0) {
233
- currentFormControl.setErrors({ atLeastOne: true });
234
- firstFormControl.setErrors({ atLeastOne: true });
235
- secondFormCOntrol.setErrors({ atLeastOne: true });
236
- }
237
- }
238
- }
239
- }
240
- }
241
- else if (validationName === "isGreaterDate") {
242
- // Comparison with referenceDate we can add controls like If Block 253 Set Values, appealConsideredLateDate used in QE_FILE_APPEAL for ME
243
- if (formGroup.controls['appealConsideredLateDate'].value != null && formGroup.controls['currentDate'].value != null) {
244
- let appealLateDate = formGroup.controls['appealConsideredLateDate'].value;
245
- let currentDate = formGroup.controls['currentDate'].value;
246
- if (new Date(currentDate.replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3")) >= new Date(appealLateDate.replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))) {
247
- formGroup.get('lateAppeal').setValue('Y', { onlySelf: true, emitEvent: false });
248
- }
249
- }
250
- }
251
140
  else if (validationName === "notEquals") {
252
141
  let currentFormControl = formGroup.controls[element.name];
253
142
  if (currentFormControl) {
@@ -272,155 +161,24 @@ export class AppValidators {
272
161
  });
273
162
  }
274
163
  }
275
- // Custom Validation for weeklies Page since there are empty strings passed
276
- // while loading the model to prevent null pointer exception in DUA
277
- else if (validationName === "wcCommonValidation") {
278
- let currentFormControl = formGroup.controls[element.name];
279
- if (currentFormControl) {
280
- if (element.name === 'workPerformed' || element.name === 'available') {
281
- if (element.requiredIf) {
282
- let expression = element.requiredIf;
283
- let isRequired = false;
284
- if (expression.includes('&&') && !expression.includes('||')) {
285
- let expr = expression.split('&&');
286
- isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
287
- && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
288
- }
289
- if (isRequired) {
290
- if (currentFormControl.value === " ") {
291
- currentFormControl.setErrors({ wcRequired: true });
292
- }
293
- }
294
- }
295
- }
296
- else if (element.name != 'workPerformed' || element.name != 'available') {
297
- if (currentFormControl.value === " ") {
298
- currentFormControl.setErrors({ wcRequired: true });
299
- }
300
- }
301
- }
302
- }
303
164
  else if (validationName === "wcEmployerValidation") {
304
165
  let empModels = formGroup.controls[element.name]?.value;
305
- if (empModels) {
306
- let nonCompletedEmps = empModels.filter(e => !e.isPartTimeEmployerEdited && e.isPartTimeEmployer);
307
- if (nonCompletedEmps && nonCompletedEmps.length > 0) {
308
- formGroup.controls[element.name].setErrors({ wcEmployerValidation: true });
309
- }
310
- }
311
- if (element.requiredIf) {
312
- let expression = element.requiredIf;
313
- let isRequired = false;
314
- let isPartialClaimEmployment = false;
315
- if (expression.includes('&&') && !expression.includes('||')) {
316
- let expr = expression.split('&&');
317
- isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
318
- && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
319
- }
320
- if (expression.includes('||') && !expression.includes('&&')) {
321
- let expr = expression.split('||');
322
- let target = "hidPartialClaimEmploymentFlag";
323
- let index = expr.findIndex(e => e.includes(target));
324
- if (index >= 0) {
325
- isPartialClaimEmployment = AppValidators.calculateOperandValueForRequiredIf(expr[index].trim(), formGroup, element, null);
326
- }
327
- if ((isPartialClaimEmployment == false) || (index < 0)) {
328
- isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
329
- || AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
330
- if (expr.length >= 3) {
331
- isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[2].trim(), formGroup, element, null);
332
- }
333
- if (expr.length >= 4) {
334
- isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[3].trim(), formGroup, element, null);
335
- }
336
- if (expr.length == 5) {
337
- isRequired = isRequired || AppValidators.calculateOperandValueForRequiredIf(expr[4].trim(), formGroup, element, null);
338
- }
339
- if (expr.length > 5) {
340
- throw "AppValidators : More than 5 '&&' expressions are not supported.";
341
- }
166
+ let ifWorkPerformed = formGroup.controls["workPerformed"].value;
167
+ if (ifWorkPerformed === "Y") {
168
+ if (empModels) {
169
+ let nonCompletedEmps = empModels.filter(e => !e.isPartTimeEmployerEdited && e.isPartTimeEmployer);
170
+ if (nonCompletedEmps && nonCompletedEmps.length > 0) {
171
+ formGroup.controls[element.name].setErrors({ wcEmployerValidation: true });
342
172
  }
343
173
  }
344
- if (isPartialClaimEmployment && !empModels) {
345
- if (formGroup.controls['hidCsrFirstPass'].value == 'Y') {
346
- formGroup.controls[element.name].setErrors(null);
347
- }
348
- else {
349
- formGroup.controls[element.name].setErrors({ wcPartialClaimEmployment: true });
350
- }
351
- }
352
- if (isRequired && !empModels) {
353
- formGroup.controls[element.name].setErrors({ wcEmployerRequired: true });
354
- }
355
- }
356
- }
357
- else if (validationName === "wcDependentRequired") {
358
- let dependentModels = formGroup.controls[element.name]?.value;
359
- if (element.requiredIf) {
360
- let expression = element.requiredIf;
361
- let isRequired = false;
362
- if (expression) {
363
- let expr = expression;
364
- isRequired = AppValidators.calculateOperandValueForRequiredIf(expr, formGroup, element, null);
365
- }
366
- if (isRequired && !dependentModels) {
367
- formGroup.controls[element.name].setErrors({ wcDependentRequired: true });
368
- }
369
- }
370
- }
371
- else if (validationName === "remunerationPaymentInfoRequired") {
372
- let paymentComponentModels = formGroup.controls[element.name].value?.payFormElements;
373
- if (paymentComponentModels != null && paymentComponentModels.length > 0) {
374
- for (let i = 0; i < paymentComponentModels.length; i++) {
375
- var model = paymentComponentModels[i];
376
- if (model.amount && model.date && model.wageType) {
377
- formGroup.controls[element.name].setErrors(null);
378
- }
379
- else {
380
- formGroup.controls[element.name].setErrors({ remunerationPaymentInfoRequired: true });
381
- }
382
- }
383
- }
384
- else {
385
- formGroup.controls[element.name].setErrors({ remunerationPaymentInfoRequired: true });
386
- }
387
- }
388
- else if (validationName === "grossEarningsInfoRequired") {
389
- let grossEarningsComponentModels = formGroup.controls[element.name].value?.payFormElements;
390
- if (grossEarningsComponentModels != null && grossEarningsComponentModels.length > 0) {
391
- for (let i = 0; i < grossEarningsComponentModels.length; i++) {
392
- var grossEarningModel = grossEarningsComponentModels[i];
393
- if (grossEarningModel.hoursWorked) {
394
- formGroup.controls[element.name].setErrors(null);
395
- }
396
- else {
397
- formGroup.controls[element.name].setErrors({ grossEarningsInfoRequired: true });
398
- }
174
+ else {
175
+ formGroup.controls[element.name].setErrors({ wcEmployerValidation: true });
399
176
  }
400
177
  }
401
- else {
402
- formGroup.controls[element.name].setErrors({ grossEarningsInfoRequired: true });
403
- }
404
178
  }
405
- else if (validationName === "wcEmployerPaymentInfoRequired") {
406
- let employerPaymentInfoModels = formGroup.controls[element.name]?.value;
407
- if (element.requiredIf) {
408
- let expression = element.requiredIf;
409
- let isRequired = false;
410
- if (expression.includes('&&') && !expression.includes('||')) {
411
- let expr = expression.split('&&');
412
- isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
413
- && AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
414
- }
415
- if (expression.includes('||') && !expression.includes('&&')) {
416
- let expr = expression.split('||');
417
- isRequired = AppValidators.calculateOperandValueForRequiredIf(expr[0].trim(), formGroup, element, null)
418
- || AppValidators.calculateOperandValueForRequiredIf(expr[1].trim(), formGroup, element, null);
419
- }
420
- if (isRequired && (!employerPaymentInfoModels || employerPaymentInfoModels.length < 1)) {
421
- formGroup.controls[element.name].setErrors({ wcEmployerPaymentInfoRequired: true });
422
- }
423
- }
179
+ else if (validationName === "jobTitleValidation") {
180
+ let jobTitleModels = formGroup.controls[element.name]?.value;
181
+ // validation code placeholder for job title
424
182
  }
425
183
  return null;
426
184
  };
@@ -449,7 +207,7 @@ export class AppValidators {
449
207
  validationService
450
208
  .get(`${serviceName}${fieldValue}`)
451
209
  .subscribe(res => {
452
- //console.log('res ', res);
210
+ console.log('res ', res);
453
211
  });
454
212
  if (serviceType === 'VALIDATE') {
455
213
  }
@@ -546,7 +304,6 @@ export class AppValidators {
546
304
  var valueOfActualControl;
547
305
  if (formGroup.controls[element.name]) {
548
306
  valueOfActualControl = formGroup.controls[element.name].value;
549
- valueOfActualControl = this.isNullOrUndefined(valueOfActualControl) ? valueOfActualControl : valueOfActualControl + '';
550
307
  }
551
308
  else {
552
309
  sharedData.forEach(data => {
@@ -557,10 +314,10 @@ export class AppValidators {
557
314
  });
558
315
  }
559
316
  var valueOfCnrtrlToCheck;
560
- if (formGroup.controls[operand1] && !this.isNullOrUndefined(formGroup.controls[operand1].value) && typeof (formGroup.controls[operand1]).value === 'string') {
317
+ if (formGroup.controls[operand1] && formGroup.controls[operand1].value && typeof (formGroup.controls[operand1]).value === 'string') {
561
318
  valueOfCnrtrlToCheck = formGroup.controls[operand1].value.trim();
562
319
  }
563
- if (formGroup.controls[operand1] && !this.isNullOrUndefined(formGroup.controls[operand1].value) && typeof (formGroup.controls[operand1]).value != 'string') {
320
+ if (formGroup.controls[operand1] && formGroup.controls[operand1].value && typeof (formGroup.controls[operand1]).value != 'string') {
564
321
  if (formGroup.controls[operand1].value['value']) {
565
322
  valueOfCnrtrlToCheck = formGroup.controls[operand1].value['value'].trim();
566
323
  }
@@ -581,10 +338,10 @@ export class AppValidators {
581
338
  return true;
582
339
  }
583
340
  operand2 = operand2.replace(/\'/g, ""); //null
584
- if (isContains && (valueOfCnrtrlToCheck && Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && this.isNullOrUndefined(formGroup.controls[element?.name]?.value)) {
341
+ if (isContains && (valueOfCnrtrlToCheck && Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && !formGroup.controls[element?.name]?.value) {
585
342
  return true;
586
343
  }
587
- if (isContains && (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && this.isNullOrUndefined(formGroup.controls[element?.name]?.value)) {
344
+ if (isContains && (valueOfCnrtrlToCheck && !Array.isArray(valueOfCnrtrlToCheck) && valueOfCnrtrlToCheck.includes(operand2)) && !formGroup.controls[element?.name]?.value) {
588
345
  return true;
589
346
  }
590
347
  if (operand2 != 'null' && !isDoesNotEqual && valueOfCnrtrlToCheck === operand2 && !valueOfActualControl && formGroup.controls[element?.name]) {
@@ -595,9 +352,6 @@ export class AppValidators {
595
352
  }
596
353
  return false;
597
354
  }
598
- static isNullOrUndefined(value) {
599
- return value == null || value == undefined;
600
- }
601
355
  // @dynamic
602
356
  static setEqualsValidation(element, sharedData) {
603
357
  const func = (formGroup) => {
@@ -784,4 +538,4 @@ export class AppValidators {
784
538
  return false;
785
539
  }
786
540
  }
787
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwVmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL0FwcFZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSxPQUFPLGFBQWE7SUFJdEIsV0FBVztJQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFZLEVBQUUsVUFBMkIsRUFBRSxTQUFpQjtRQUNoRixJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUEyQixFQUFFLEVBQUU7WUFDekMsSUFBSSxjQUFjLEtBQUssMEJBQTBCLEVBQUU7Z0JBQy9DLElBQUksR0FBNkIsQ0FBQztnQkFDbEMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtvQkFDN0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDN0MsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsSUFBSSxTQUF5QyxDQUFDO3dCQUM5QyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDMUI7Ozs7OzsyQkFNRzt3QkFDSCxLQUFLLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTs0QkFDekIsSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLEdBQUc7bUNBQ3JELENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsRUFBRTtnQ0FDN0YsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVB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Q0FBQyxFQUFFO1lBQ3pILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxvQkFBb0IsS0FBSyxRQUFRLENBQUMsRUFBRTtZQUN0RyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLGNBQWMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFO1lBQzNHLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBZGRyZXNzQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvQWRkcmVzc0NvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQmFua0RldGFpbHNDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9CYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0NsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwnO1xyXG5pbXBvcnQgeyBDbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9DbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWwnO1xyXG5pbXBvcnQgeyBFbGVtZW50c01vZGVsLCBWYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9FbGVtZW50c01vZGVsJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVzdGlvbm5haXJlL3ZhbGlkYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEVtcGxveWVySW5mb01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0VtcGxveWVyRGV0YWlsU2VhcmNoUmVzdWx0JztcclxuaW1wb3J0IHsgRGVwZW5kZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGVwZW5kZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgRW1wbG95ZXJQYXlJbmZvTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvRW1wbG95ZXJQYXlJbmZvTW9kZWwnO1xyXG5pbXBvcnQgeyBQYXltZW50Q29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvUGF5bWVudENvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQXV0b2NvZGVyTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9BdXRvY29kZXJNb2RlbCc7XHJcbmltcG9ydCB7IEdyb3NzRWFybmluZ3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9Hcm9zc0Vhcm5pbmdzTW9kZWwnO1xyXG5leHBvcnQgY2xhc3MgQXBwVmFsaWRhdG9ycyB7XHJcblxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIGN1c3RvbVZhbGlkYXRpb24oZWxlbWVudDogYW55LCB2YWxpZGF0aW9uOiBWYWxpZGF0aW9uTW9kZWwsIHN0YXRlTmFtZTogc3RyaW5nLCk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBsZXQgdmFsaWRhdGlvbk5hbWUgPSB2YWxpZGF0aW9uLmN1c3RvbVZhbGlkYXRpb25OYW1lO1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJiYXNlUGVyaW9kRW1wbFZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbDogQ2xhaW1BcHBFbXBSZXNwb25zZU1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubmFtZSA9PT0gJ3ByZXZ3b3JrJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJwRW1wTGlzdDogQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicEVtcExpc3QgPSB2YWwuYnBFbXBMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKmlmIChmb3JtR3JvdXAuY29udHJvbHNbJ3Bhc3RlbXAnXSAvLyYmIGZvcm1Hcm91cC5jb250cm9sc1snd29ya2ZvcmVtcCddLnZhbHVlID09PSAnWSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGJwRW1wTGlzdC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyTGVuZ3RoRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGJwRW1wbHJMZW5ndGhGbGFnOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBicEVtcCBvZiBicEVtcExpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicEVtcC5icEVtcGxveWVyRmxhZyA9PT0gJzEnICYmIGJwRW1wLmVtcERlbGV0ZWQgPT09ICdOJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChicEVtcC5zdGFydERhdGUgPT09IG51bGwgJiYgYnBFbXAuc3RhcnREYXRlRmVkID09PSBudWxsICYmIGJwRW1wLnN0YXJ0RGF0ZU1pbCA9PT0gbnVsbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBicEVtcGxyRmxhZzogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwic2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgc2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImNwYXRjaHZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBjcGF0Y2h2YWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcInVwbG9hZHZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSB8fCAoQXJyYXkuaXNBcnJheShmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkgJiYgIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgdXBsb2FkdmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJhZGRyZXNzVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYWRkcmVzc0NvbXBWYWx1ZTogQWRkcmVzc0NvbXBvbmVudE1vZGVsO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnPT0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRvbE5hbWU6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF0ucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdLnJlcGxhY2UoLycvZywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ1knICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSAnTicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RXJyb3JzID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uZXJyb3JzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50RXJyb3JzWydhZGRyZXNzVmFsaWRhdGlvbkZsYWcnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGN1cnJlbnRFcnJvcnMpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKGN1cnJlbnRFcnJvcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3NDb21wVmFsdWUgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0NvbXBWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZHJlc3NDb21wVmFsdWUuY2l0eSB8fCAhYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFkZHJlc3NDb21wVmFsdWVbJ3ppcCddIHx8ICFhZGRyZXNzQ29tcFZhbHVlLmNvdW50cnkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFhZGRyZXNzQ29tcFZhbHVlWydzdHJlZXRBZGRyZXNzJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChhZGRyZXNzQ29tcFZhbHVlWyduZWlnaGJvclN0YXRlQ2hlY2tSZXF1aXJlZCddPT09J1knICYmICFhZGRyZXNzQ29tcFZhbHVlWyduZWlnaGJvdXJGbGFnJ10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5uYW1lID09PSAnbWFpbEFkZHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzQ29tcFZhbHVlLnN0YXRlICYmIGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSA9PT0gJ01TJyAmJiBzdGF0ZU5hbWUgPT09ICdNUycpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdDVCcgJiYgc3RhdGVOYW1lID09PSAnQ1QnKSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY291bnR5UmVxdWlyZWQgPT09IHRydWUgJiYgIWFkZHJlc3NDb21wVmFsdWVbJ2NvdW50eSddKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZSAmJiBhZGRyZXNzQ29tcFZhbHVlLnN0YXRlLnZhbHVlID09PSAnTUUnICYmIHN0YXRlTmFtZSA9PT0gJ01FJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb3VudHlSZXF1aXJlZCA9PT0gdHJ1ZSAmJiAhYWRkcmVzc0NvbXBWYWx1ZVsndG93biddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udG9sTmFtZTogc3RyaW5nID0gc3BsaXRBcnJheVswXS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdLnJlcGxhY2UoLycvZywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdICYmIGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ1knICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSAnTicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVycm9ycyA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLmVycm9ycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50RXJyb3JzWydhZGRyZXNzVmFsaWRhdGlvbkZsYWcnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjdXJyZW50RXJyb3JzKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhjdXJyZW50RXJyb3JzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZ1wiKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsOiBCYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFua0RldGFpbHNDb21wb25lbnRWYWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250b2xOYW1lOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvbE5hbWUgPSBjb250b2xOYW1lLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnXFwnJywgJycpLnJlcGxhY2UoJ1xcJycsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYW5rRGV0YWlsc0NvbXBvbmVudFZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnROdW1iZXIgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhYmFua0RldGFpbHNDb21wb25lbnRWYWwubmFtZU9uQWNjb3VudCB8fCAhYmFua0RldGFpbHNDb21wb25lbnRWYWwucmVFbnRlckFjY291bnROdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFiYW5rRGV0YWlsc0NvbXBvbmVudFZhbC5yb3V0aW5nTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBiYW5rRGV0YWlsc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJqb2JUaWxlVmFsaWRhdGlvbkZsYWdcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGpvYlRpdGxlRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJhdExlYXN0T25lXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Rm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJ3x8Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWVsZHM6IHN0cmluZ1tdID0gdmFsaWRhdGlvbi5leHByZXNzaW9uLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0Rm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZmllbGRzWzBdLnRyaW0oKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWNvbmRGb3JtQ09udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tmaWVsZHNbMV0udHJpbSgpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRGb3JtQ29udHJvbC52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGZpcnN0Rm9ybUNvbnRyb2wudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc051bGxPclVuZGVmaW5lZChzZWNvbmRGb3JtQ09udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEZvcm1Db250cm9sLnNldEVycm9ycyh7IGF0TGVhc3RPbmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kRm9ybUNPbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm1Db250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEZvcm1Db250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRGb3JtQ09udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGN1cnJlbnRGb3JtQ29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZChmaXJzdEZvcm1Db250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc051bGxPclVuZGVmaW5lZChzZWNvbmRGb3JtQ09udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kRm9ybUNPbnRyb2wuc2V0VmFsdWUoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb3JtQ29udHJvbC52YWx1ZSA9PT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZpcnN0Rm9ybUNvbnRyb2wudmFsdWUgPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWNvbmRGb3JtQ09udHJvbC52YWx1ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBhdExlYXN0T25lOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgYXRMZWFzdE9uZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRGb3JtQ09udHJvbC5zZXRFcnJvcnMoeyBhdExlYXN0T25lOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImlzR3JlYXRlckRhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyaXNvbiB3aXRoIHJlZmVyZW5jZURhdGUgd2UgY2FuIGFkZCBjb250cm9scyBsaWtlIElmIEJsb2NrIDI1MyBTZXQgVmFsdWVzLCBhcHBlYWxDb25zaWRlcmVkTGF0ZURhdGUgdXNlZCBpbiBRRV9GSUxFX0FQUEVBTCBmb3IgTUVcclxuICAgICAgICAgICAgICAgIGlmKGZvcm1Hcm91cC5jb250cm9sc1snYXBwZWFsQ29uc2lkZXJlZExhdGVEYXRlJ10udmFsdWUgIT0gbnVsbCAmJiBmb3JtR3JvdXAuY29udHJvbHNbJ2N1cnJlbnREYXRlJ10udmFsdWUgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHBlYWxMYXRlRGF0ZSA9IGZvcm1Hcm91cC5jb250cm9sc1snYXBwZWFsQ29uc2lkZXJlZExhdGVEYXRlJ10udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RGF0ZSA9IGZvcm1Hcm91cC5jb250cm9sc1snY3VycmVudERhdGUnXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3IERhdGUoY3VycmVudERhdGUucmVwbGFjZSggLyhcXGR7Mn0pLShcXGR7Mn0pLShcXGR7NH0pLywgXCIkMi8kMS8kM1wiKSkgPj0gbmV3IERhdGUoYXBwZWFsTGF0ZURhdGUucmVwbGFjZSggLyhcXGR7Mn0pLShcXGR7Mn0pLShcXGR7NH0pLywgXCIkMi8kMS8kM1wiKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2xhdGVBcHBlYWwnKS5zZXRWYWx1ZSgnWScsIHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcIm5vdEVxdWFsc1wiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkczogc3RyaW5nW10gPSB2YWxpZGF0aW9uLmV4cHJlc3Npb24uc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IGN1cnJlbnRGb3JtQ29udHJvbC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZSA9IGZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC50cmltKCldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3RoZXJGaWVsZFZhbHVlID0gb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmJiBvdGhlckZpZWxkVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgodmFsLnZhbHVlICYmIG90aGVyRmllbGRWYWx1ZS52YWx1ZSAmJiB2YWwudmFsdWUgPT09IG90aGVyRmllbGRWYWx1ZS52YWx1ZSkgfHwgdmFsID09PSBvdGhlckZpZWxkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lLnNldEVycm9ycyh7IG5vdEVxdWFsczogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZvcm1Db250cm9sLmVycm9ycyAmJiB2YWwgJiYgb3RoZXJGaWVsZFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCh2YWwudmFsdWUgJiYgb3RoZXJGaWVsZFZhbHVlLnZhbHVlICYmIHZhbC52YWx1ZSAhPSBvdGhlckZpZWxkVmFsdWUudmFsdWUpIHx8IHZhbCAhPSBvdGhlckZpZWxkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlczogU2V0PGFueT4gPSB0aGlzLmdldE90aGVyRm9ybUZpZWxkc1ZhbHVlcyhmaWVsZHMsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5zaXplID09IGZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJGaWVsZEZvcm1Db250cm9sTmFtZS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ3VzdG9tIFZhbGlkYXRpb24gZm9yIHdlZWtsaWVzIFBhZ2Ugc2luY2UgdGhlcmUgYXJlIGVtcHR5IHN0cmluZ3MgcGFzc2VkXHJcbiAgICAgICAgICAgIC8vIHdoaWxlIGxvYWRpbmcgdGhlIG1vZGVsIHRvIHByZXZlbnQgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbiBpbiBEVUEgXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcIndjQ29tbW9uVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZWxlbWVudC5uYW1lPT09J3dvcmtQZXJmb3JtZWQnIHx8IGVsZW1lbnQubmFtZT09PSdhdmFpbGFibGUnKXsgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50LnJlcXVpcmVkSWYpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCcmJicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sLnZhbHVlID09PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgd2NSZXF1aXJlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoZWxlbWVudC5uYW1lIT0nd29ya1BlcmZvcm1lZCcgfHwgZWxlbWVudC5uYW1lICE9J2F2YWlsYWJsZScpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvcm1Db250cm9sLnZhbHVlID09PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyB3Y1JlcXVpcmVkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0VtcGxveWVyVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW1wTW9kZWxzOiBFbXBsb3llckluZm9Nb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVtcE1vZGVscykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBub25Db21wbGV0ZWRFbXBzID0gZW1wTW9kZWxzLmZpbHRlcihlID0+ICFlLmlzUGFydFRpbWVFbXBsb3llckVkaXRlZCAmJiBlLmlzUGFydFRpbWVFbXBsb3llcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vbkNvbXBsZXRlZEVtcHMgJiYgbm9uQ29tcGxldGVkRW1wcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRW1wbG95ZXJWYWxpZGF0aW9uOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzUGFydGlhbENsYWltRW1wbG95bWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJyYmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnfHwnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IFwiaGlkUGFydGlhbENsYWltRW1wbG95bWVudEZsYWdcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gZXhwci5maW5kSW5kZXgoZSA9PiBlLmluY2x1ZGVzKHRhcmdldCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50ID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbaW5kZXhdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGlzUGFydGlhbENsYWltRW1wbG95bWVudCA9PSBmYWxzZSkgfHwgKGluZGV4IDwgMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPT0gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID4gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICcmJicgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFydGlhbENsYWltRW1wbG95bWVudCAmJiAhZW1wTW9kZWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbJ2hpZENzckZpcnN0UGFzcyddLnZhbHVlID09ICdZJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgd2NQYXJ0aWFsQ2xhaW1FbXBsb3ltZW50OiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIWVtcE1vZGVscykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y0VtcGxveWVyUmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwid2NEZXBlbmRlbnRSZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGVwZW5kZW50TW9kZWxzOiBEZXBlbmRlbnRNb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZyA9IGV4cHJlc3Npb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwciwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIWRlcGVuZGVudE1vZGVscykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y0RlcGVuZGVudFJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcInJlbXVuZXJhdGlvblBheW1lbnRJbmZvUmVxdWlyZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBheW1lbnRDb21wb25lbnRNb2RlbHM6IFBheW1lbnRDb21wb25lbnRNb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWU/LnBheUZvcm1FbGVtZW50cztcclxuICAgICAgICAgICAgICAgIGlmIChwYXltZW50Q29tcG9uZW50TW9kZWxzICE9IG51bGwgJiYgcGF5bWVudENvbXBvbmVudE1vZGVscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXltZW50Q29tcG9uZW50TW9kZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IHBheW1lbnRDb21wb25lbnRNb2RlbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlbC5hbW91bnQgJiYgbW9kZWwuZGF0ZSAmJiBtb2RlbC53YWdlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgcmVtdW5lcmF0aW9uUGF5bWVudEluZm9SZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyByZW11bmVyYXRpb25QYXltZW50SW5mb1JlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiZ3Jvc3NFYXJuaW5nc0luZm9SZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZ3Jvc3NFYXJuaW5nc0NvbXBvbmVudE1vZGVsczogR3Jvc3NFYXJuaW5nc01vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZT8ucGF5Rm9ybUVsZW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyb3NzRWFybmluZ3NDb21wb25lbnRNb2RlbHMgIT0gbnVsbCAmJiBncm9zc0Vhcm5pbmdzQ29tcG9uZW50TW9kZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3NzRWFybmluZ3NDb21wb25lbnRNb2RlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3NzRWFybmluZ01vZGVsID0gZ3Jvc3NFYXJuaW5nc0NvbXBvbmVudE1vZGVsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3NzRWFybmluZ01vZGVsLmhvdXJzV29ya2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBncm9zc0Vhcm5pbmdzSW5mb1JlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGdyb3NzRWFybmluZ3NJbmZvUmVxdWlyZWQ6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0VtcGxveWVyUGF5bWVudEluZm9SZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW1wbG95ZXJQYXltZW50SW5mb01vZGVsczogRW1wbG95ZXJQYXlJbmZvTW9kZWxbXSA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdPy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBleHByOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJyYmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaW5jbHVkZXMoJ3x8JykgJiYgIWV4cHJlc3Npb24uaW5jbHVkZXMoJyYmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnfHwnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMV0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCAmJiAoIWVtcGxveWVyUGF5bWVudEluZm9Nb2RlbHMgfHwgZW1wbG95ZXJQYXltZW50SW5mb01vZGVscy5sZW5ndGggPCAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y0VtcGxveWVyUGF5bWVudEluZm9SZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZ2V0T3RoZXJGb3JtRmllbGRzVmFsdWVzKGZpZWxkczogc3RyaW5nW10sIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFNldDxhbnk+IHtcclxuICAgICAgICBsZXQgc2V0OiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcclxuICAgICAgICBmaWVsZHMuZm9yRWFjaChmID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBmb3JtR3JvdXAuY29udHJvbHNbZl0/LnZhbHVlO1xyXG4gICAgICAgICAgICB2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PSAnb2JqZWN0JyA/IHNldC5hZGQodmFsdWUudmFsdWUpIDogc2V0LmFkZCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHNldDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQGR5bmFtaWNcclxuICAgIHN0YXRpYyBjcmVhdGVWYWxpZGF0b3IodmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLCBlbGVtZW50OiBhbnkpOiBBc3luY1ZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycz4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgICAgIGxldCBmaWVsZFZhbHVlOiBzdHJpbmcgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoIWZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgc2VydmljZU5hbWU6IHN0cmluZyA9IGVsZW1lbnQuc2VydmljZU5hbWU7XHJcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlQ2FsbFR5cGUgPSBlbGVtZW50LnNlcnZpY2VDYWxsVHlwZTtcclxuICAgICAgICAgICAgbGV0IHNlcnZpY2VUeXBlID0gZWxlbWVudC5zZXJ2aWNlVHlwZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlQ2FsbFR5cGUgPT09ICdHRVQnKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXQoYCR7c2VydmljZU5hbWV9JHtmaWVsZFZhbHVlfWApXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3JlcyAnLCByZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdWQUxJREFURScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdWQUxJREFURScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZVR5cGUgPT09ICdVUERBVEUnKSB7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldFJlcXVpcmVkSWZWYWxpZGF0aW9uKGVsZW1lbnQ6IEVsZW1lbnRzTW9kZWwsIHNoYXJlZERhdGE6IGFueSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkgPT4ge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdzZXRSZXF1aXJlZElmVmFsaWRhdGlvbiAtLScsZWxlbWVudCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3JtR3JvdXAgLS0nLGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jdXN0b21UYWcgJiYgZWxlbWVudC5jdXN0b21UYWcgPT09ICdPcHRpb25hbCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGV4cHI6IHN0cmluZ1tdID0gZXhwcmVzc2lvbi5zcGxpdCgnJiYnKTtcclxuICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPT0gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID4gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICcmJicgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXhwcjogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KCd8fCcpO1xyXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclsyXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5sZW5ndGggPT0gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV4cHIubGVuZ3RoID4gNSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICd8fCcgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSkge1xyXG4gICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByZXNzaW9uLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHJlcXVpcmVkSWY6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZElmOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb246IHN0cmluZywgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBlbGVtZW50OiBFbGVtZW50c01vZGVsLCBzaGFyZWREYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICB2YXIgc3BsaXRBcnJheTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc9PScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnIT0nKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnIT0nKTtcclxuICAgICAgICAgICAgaXNEb2VzTm90RXF1YWwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnY29udGFpbnMnKTtcclxuICAgICAgICAgICAgaXNDb250YWlucyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgIHZhciB2YWx1ZU9mQWN0dWFsQ29udHJvbDtcclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgdmFsdWVPZkFjdHVhbENvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgdmFsdWVPZkFjdHVhbENvbnRyb2wgPSB0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlT2ZBY3R1YWxDb250cm9sKSA/IHZhbHVlT2ZBY3R1YWxDb250cm9sIDogdmFsdWVPZkFjdHVhbENvbnRyb2wgKyAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaGFyZWREYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iajogW10gPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0ckludG9PYmpbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlT2ZBY3R1YWxDb250cm9sID0gc3RySW50b09ialtlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjaztcclxuXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgIXRoaXMuaXNOdWxsT3JVbmRlZmluZWQoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSkgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmICF0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUpICYmIHR5cGVvZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSkudmFsdWUgIT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVsndmFsdWUnXS50cmltKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmFsdWVPZkNucnRybFRvQ2hlY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spKSB7XHJcbiAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gdmFsdWVPZkNucnRybFRvQ2hlY2sudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgIWlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZBY3R1YWxDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKC9cXCcvZywgXCJcIik7IC8vbnVsbFxyXG5cclxuICAgICAgICBpZiAoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZU9mQ25ydHJsVG9DaGVjaykgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2suaW5jbHVkZXMob3BlcmFuZDIpKSAmJiB0aGlzLmlzTnVsbE9yVW5kZWZpbmVkKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXT8udmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmICFBcnJheS5pc0FycmF5KHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjay5pbmNsdWRlcyhvcGVyYW5kMikpICYmIHRoaXMuaXNOdWxsT3JVbmRlZmluZWQoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQ/Lm5hbWVdPy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gb3BlcmFuZDIgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICE9IG9wZXJhbmQyICYmICF2YWx1ZU9mQWN0dWFsQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldEVxdWFsc1ZhbGlkYXRpb24oZWxlbWVudDogYW55LCBzaGFyZWREYXRhOiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UGFzc3dvcmRWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdEFycmF5O1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHZhbGlkYXRvci5leHByZXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBleHByZXNzaW9uLmluZGV4T2YoJz09PScpO1xyXG4gICAgICAgICAgICBsZXQgaXNFcXVhbE9wZXJhbmQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc+Jyk7XHJcbiAgICAgICAgICAgICAgICBpc0VxdWFsT3BlcmFuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09PScpO1xyXG4gICAgICAgICAgICAgICAgaXNFcXVhbE9wZXJhbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdzZXREYXRlVmFsaWRhdGlvbiBzaGFyZWREYXRhJywgc2hhcmVkRGF0YSk7XHJcblxyXG5cclxuICAgICAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb250cm9sLnBhcmVudCcsIGNvbnRyb2wucGFyZW50KVxyXG4gICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICBsZXQgY29udHJvbDIgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDJdO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbDEudmFsdWUgIT0gY29udHJvbDIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHBhc3N3b3JkQ29tcGFyaXNpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwYXNzd29yZENvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldERhdGVWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9yTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdmFsaWRhdG9yLmV4cHJlc3Npb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYXRvciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpIHx8IGV4cHJlc3Npb24uaW5jbHVkZXMoJzw9JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpID8gJz49JyA6ICc8PSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+JykgPyAnPicgOiAnPCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheTogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KG9wZXJhdG9yKS5tYXAoc3RyID0+IHN0ci50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQxID0gb3BlcmFuZDEucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250cm9sMiA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMl07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlMjogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShjb250cm9sMS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkRGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJJbnRvT2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJJbnRvT2JqW29wZXJhbmQxXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoc3RySW50b09ialtvcGVyYW5kMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUyID0gbmV3IERhdGUoY29udHJvbDIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtvcGVyYW5kMl0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKHN0ckludG9PYmpbb3BlcmFuZDJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZTEgJiYgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnPj0nICYmIGRhdGUxID49IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzw9JyAmJiBkYXRlMSA8PSBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICc+JyAmJiBkYXRlMSA+IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJzwnICYmIGRhdGUxIDwgZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRXF1YWwodmFsdWUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5vdEVxdWFsOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjYWxjdWxhdGVPcGVyYW5kVmFsdWUoc3RyRXhwOiBzdHJpbmcsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5OiBzdHJpbmdbXTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcbiAgICAgICAgaWYgKHN0ckV4cC5pbmNsdWRlcygnPT0nKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RyRXhwLmluY2x1ZGVzKCchPScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBzdHJFeHAuc3BsaXQoJyE9Jyk7XHJcbiAgICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHN0ckV4cC5pbmNsdWRlcygnY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCdjb250YWlucycpO1xyXG4gICAgICAgICAgICBpc0NvbnRhaW5zID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG9wZXJhbmQxOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICBvcGVyYW5kMSA9IG9wZXJhbmQxLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7IC8vY2xhaW1hbnRQcmlvclBheTEwMlxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTsgLy9udWxsXHJcbiAgICAgICAgdmFyIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ29wZXJhbmQxJyxvcGVyYW5kMSk7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG5cclxuICAgICAgICAgICAgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdICYmIGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUgJiYgdHlwZW9mIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdKS52YWx1ZSAhPSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdvcGVyYW5mb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlW3ZhbHVlXScsZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSk7XHJcbiAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10udHJpbSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbMF0pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3BlcmFuZDIgPT09ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgIXZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcGVyYW5kMiA9IG9wZXJhbmQyLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpOyAvL251bGxcclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgdmFsdWVPZkNucnRybFRvQ2hlY2sgPT09IG9wZXJhbmQyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLnRyaW0oKSAhPSBvcGVyYW5kMikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG59Il19
541
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwVmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL0FwcFZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxPQUFPLGFBQWE7SUFJdEIsV0FBVztJQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFZLEVBQUUsVUFBMkIsRUFBRSxTQUFpQjtRQUNoRixJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUEyQixFQUFFLEVBQUU7WUFDekMsSUFBSSxjQUFjLEtBQUssMEJBQTBCLEVBQUU7Z0JBQy9DLElBQUksR0FBNkIsQ0FBQztnQkFDbEMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbEMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDN0MsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsSUFBSSxTQUF5QyxDQUFDO3dCQUM5QyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDMUIsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUc7K0JBQy9FLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7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QUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBQztZQUN6SCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsb0JBQW9CLElBQUksb0JBQW9CLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDeEcsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxjQUFjLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRTtZQUM3RyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBRU4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBZGRyZXNzQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvQWRkcmVzc0NvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQmFua0RldGFpbHNDb21wb25lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9CYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsJztcclxuaW1wb3J0IHsgQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0NsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwnO1xyXG5pbXBvcnQgeyBDbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9DbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWwnO1xyXG5pbXBvcnQgeyBFbGVtZW50c01vZGVsLCBWYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9FbGVtZW50c01vZGVsJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVzdGlvbm5haXJlL3ZhbGlkYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEVtcGxveWVySW5mb01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0VtcGxveWVyRGV0YWlsU2VhcmNoUmVzdWx0JztcclxuaW1wb3J0IHsgQXV0b2NvZGVyTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9BdXRvY29kZXJNb2RlbCc7XHJcbmV4cG9ydCBjbGFzcyBBcHBWYWxpZGF0b3JzIHtcclxuXHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgY3VzdG9tVmFsaWRhdGlvbihlbGVtZW50OiBhbnksIHZhbGlkYXRpb246IFZhbGlkYXRpb25Nb2RlbCwgc3RhdGVOYW1lOiBzdHJpbmcsKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGxldCB2YWxpZGF0aW9uTmFtZSA9IHZhbGlkYXRpb24uY3VzdG9tVmFsaWRhdGlvbk5hbWU7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImJhc2VQZXJpb2RFbXBsVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsOiBDbGFpbUFwcEVtcFJlc3BvbnNlTW9kZWw7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBicEVtcExpc3Q6IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWxbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnBFbXBMaXN0ID0gdmFsLmJwRW1wTGlzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1snd29ya2ZvcmVtcCddICYmIGZvcm1Hcm91cC5jb250cm9sc1snd29ya2ZvcmVtcCddLnZhbHVlID09PSAnWSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGJwRW1wTGlzdC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyTGVuZ3RoRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGJwRW1wbHJMZW5ndGhGbGFnOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYnBFbXAgb2YgYnBFbXBMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnBFbXAuYnBFbXBsb3llckZsYWcgPT09ICcxJyAmJiAhYnBFbXAuZW1wRGVsZXRlZCApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBicEVtcGxyRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBicEVtcGxyRmxhZzogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwic2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgc2ltcGxlQ2hlY2tCb3hWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcImNwYXRjaHZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBjcGF0Y2h2YWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25OYW1lID09PSBcInVwbG9hZHZhbGlkYXRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSB8fCAoQXJyYXkuaXNBcnJheShmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkgJiYgIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgdXBsb2FkdmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJhZGRyZXNzVmFsaWRhdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYWRkcmVzc0NvbXBWYWx1ZTogQWRkcmVzc0NvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzc0NvbXBWYWx1ZSA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzQ29tcFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWRkcmVzc0NvbXBWYWx1ZS5jaXR5IHx8ICFhZGRyZXNzQ29tcFZhbHVlLnN0YXRlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWRkcmVzc0NvbXBWYWx1ZVsnemlwJ10gfHwgIWFkZHJlc3NDb21wVmFsdWUuY291bnRyeSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFkZHJlc3NDb21wVmFsdWVbJ3N0cmVldEFkZHJlc3MnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSAmJiAoKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdNUycgJiYgc3RhdGVOYW1lID09PSAnTVMnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUudmFsdWUgPT09ICdDVCcgJiYgc3RhdGVOYW1lID09PSAnQ1QnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQuY291bnR5UmVxdWlyZWQgPT09IHRydWUgJiYgIWFkZHJlc3NDb21wVmFsdWVbJ2NvdW50eSddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3NDb21wVmFsdWUuc3RhdGUgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWRkcmVzc0NvbXBWYWx1ZS5zdGF0ZS52YWx1ZSA9PT0gJ01FJyAmJiBzdGF0ZU5hbWUgPT09ICdNRSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQuY291bnR5UmVxdWlyZWQgPT09IHRydWUgJiYgIWFkZHJlc3NDb21wVmFsdWVbJ3Rvd24nXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYWRkcmVzc1ZhbGlkYXRpb25GbGFnOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGRyZXNzQ29tcFZhbHVlLmNvdW50cnkudmFsdWUgPT09ICdVUycgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgISgvXlxcZHs1fShcXGR7NH0pPyQvLnRlc3QoYWRkcmVzc0NvbXBWYWx1ZS56aXApKSkgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkcmVzc0NvbXBWYWx1ZS5jb3VudHJ5LnZhbHVlID09PSAnQ0EnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoIC9eW0FCQ0VHSEotTlBSU1RWWFldXFxkW0FCQ0VHSEotTlBSU1RWLVpdWyAtXT9cXGRbQUJDRUdISi1OUFJTVFYtWl1cXGQkL2kudGVzdChhZGRyZXNzQ29tcFZhbHVlLnppcCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IGVsZW1lbnQucmVxdWlyZWRJZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnPT0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250b2xOYW1lOiBzdHJpbmcgPSBzcGxpdEFycmF5WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udG9sTmFtZSA9IGNvbnRvbE5hbWUucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnXFwnJywgJycpLnJlcGxhY2UoJ1xcJycsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRvbE5hbWVdICYmIGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXS52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyBhZGRyZXNzVmFsaWRhdGlvbkZsYWc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGFkZHJlc3NWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZ1wiKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsOiBCYW5rRGV0YWlsc0NvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFua0RldGFpbHNDb21wb25lbnRWYWwgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBlbGVtZW50LnJlcXVpcmVkSWY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udG9sTmFtZTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvbE5hbWUgPSBjb250b2xOYW1lLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJ1xcJycsICcnKS5yZXBsYWNlKCdcXCcnLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250b2xOYW1lXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVPZkNucnRybFRvQ2hlY2sgPSBmb3JtR3JvdXAuY29udHJvbHNbY29udG9sTmFtZV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhbmtEZXRhaWxzQ29tcG9uZW50VmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnROdW1iZXIgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLmFjY291bnRUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLm5hbWVPbkFjY291bnQgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLnJlRW50ZXJBY2NvdW50TnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWJhbmtEZXRhaWxzQ29tcG9uZW50VmFsLnJvdXRpbmdOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0RXJyb3JzKHsgYmFua0RldGFpbHNWYWxpZGF0aW9uRmxhZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwibm90RXF1YWxzXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Rm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGRzOiBzdHJpbmdbXSA9IHZhbGlkYXRpb24uZXhwcmVzc2lvbi5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsID0gY3VycmVudEZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lID0gZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLnRyaW0oKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvdGhlckZpZWxkVmFsdWUgPSBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsICYmIG90aGVyRmllbGRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCh2YWwudmFsdWUgJiYgb3RoZXJGaWVsZFZhbHVlLnZhbHVlICYmIHZhbC52YWx1ZSA9PT0gb3RoZXJGaWVsZFZhbHVlLnZhbHVlKSB8fCB2YWwgPT09IG90aGVyRmllbGRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyRmllbGRGb3JtQ29udHJvbE5hbWUuc2V0RXJyb3JzKHsgbm90RXF1YWxzOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWN1cnJlbnRGb3JtQ29udHJvbC5lcnJvcnMgJiYgdmFsICYmIG90aGVyRmllbGRWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgodmFsLnZhbHVlICYmIG90aGVyRmllbGRWYWx1ZS52YWx1ZSAmJiB2YWwudmFsdWUgIT0gb3RoZXJGaWVsZFZhbHVlLnZhbHVlKSB8fCB2YWwgIT0gb3RoZXJGaWVsZFZhbHVlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA6IFNldDxhbnk+ID0gdGhpcy5nZXRPdGhlckZvcm1GaWVsZHNWYWx1ZXMoZmllbGRzLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlcy5zaXplID09IGZpZWxkcy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckZpZWxkRm9ybUNvbnRyb2xOYW1lLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uTmFtZSA9PT0gXCJ3Y0VtcGxveWVyVmFsaWRhdGlvblwiKXtcclxuICAgICAgICAgICAgICAgIGxldCBlbXBNb2RlbHMgOiBFbXBsb3llckluZm9Nb2RlbFtdID0gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGlmV29ya1BlcmZvcm1lZCA9IGZvcm1Hcm91cC5jb250cm9sc1tcIndvcmtQZXJmb3JtZWRcIl0udmFsdWU7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoaWZXb3JrUGVyZm9ybWVkID09PSBcIllcIil7XHJcbiAgICAgICAgICAgICAgICBpZihlbXBNb2RlbHMpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBub25Db21wbGV0ZWRFbXBzID0gZW1wTW9kZWxzLmZpbHRlcihlID0+ICFlLmlzUGFydFRpbWVFbXBsb3llckVkaXRlZCAmJiBlLmlzUGFydFRpbWVFbXBsb3llcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYobm9uQ29tcGxldGVkRW1wcyAmJiBub25Db21wbGV0ZWRFbXBzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRFcnJvcnMoeyB3Y0VtcGxveWVyVmFsaWRhdGlvbiA6IHRydWUgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHdjRW1wbG95ZXJWYWxpZGF0aW9uIDogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbk5hbWUgPT09IFwiam9iVGl0bGVWYWxpZGF0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBqb2JUaXRsZU1vZGVscyA6IEF1dG9jb2Rlck1vZGVsW10gPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGNvZGUgcGxhY2Vob2xkZXIgZm9yIGpvYiB0aXRsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXRPdGhlckZvcm1GaWVsZHNWYWx1ZXMoZmllbGRzOiBzdHJpbmdbXSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA6IFNldDxhbnk+e1xyXG4gICAgICAgIGxldCBzZXQgOiBTZXQ8YW55PiA9IG5ldyBTZXQoKTtcclxuICAgICAgICBmaWVsZHMuZm9yRWFjaCAoZiA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA6IGFueSA9IGZvcm1Hcm91cC5jb250cm9sc1tmXT8udmFsdWU7XHJcbiAgICAgICAgICAgIHZhbHVlICYmIHR5cGVvZih2YWx1ZSkgPT0gJ29iamVjdCcgPyBzZXQuYWRkKHZhbHVlLnZhbHVlKSA6IHNldC5hZGQodmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBzZXQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgY3JlYXRlVmFsaWRhdG9yKHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSwgZWxlbWVudDogYW55KTogQXN5bmNWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnM+ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICBsZXQgZmllbGRWYWx1ZTogc3RyaW5nID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKCFmaWVsZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHNlcnZpY2VOYW1lOiBzdHJpbmcgPSBlbGVtZW50LnNlcnZpY2VOYW1lO1xyXG4gICAgICAgICAgICBsZXQgc2VydmljZUNhbGxUeXBlID0gZWxlbWVudC5zZXJ2aWNlQ2FsbFR5cGU7XHJcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlVHlwZSA9IGVsZW1lbnQuc2VydmljZVR5cGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VydmljZUNhbGxUeXBlID09PSAnR0VUJykge1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdGlvblNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KGAke3NlcnZpY2VOYW1lfSR7ZmllbGRWYWx1ZX1gKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVzICcsIHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1ZBTElEQVRFJykge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1ZBTElEQVRFJykge1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ1VQREFURScpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UmVxdWlyZWRJZlZhbGlkYXRpb24oZWxlbWVudDogRWxlbWVudHNNb2RlbCwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3NldFJlcXVpcmVkSWZWYWxpZGF0aW9uIC0tJyxlbGVtZW50KTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Zvcm1Hcm91cCAtLScsZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gZWxlbWVudC5yZXF1aXJlZElmO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmN1c3RvbVRhZyAmJiBlbGVtZW50LmN1c3RvbVRhZyA9PT0gJ09wdGlvbmFsJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc1JlcXVpcmVkIDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZihleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpKXtcclxuICAgICAgICAgICAgbGV0IGV4cHIgOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJyYmJyk7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPj0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgJiYgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMl0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA+PSA0KXtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID09IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkICYmIEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPiA1KXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIkFwcFZhbGlkYXRvcnMgOiBNb3JlIHRoYW4gNSAnJiYnIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkLlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZihleHByZXNzaW9uLmluY2x1ZGVzKCd8fCcpICYmICFleHByZXNzaW9uLmluY2x1ZGVzKCcmJicpKXtcclxuICAgICAgICAgICAgbGV0IGV4cHIgOiBzdHJpbmdbXSA9IGV4cHJlc3Npb24uc3BsaXQoJ3x8Jyk7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMF0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPj0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZCA9IGlzUmVxdWlyZWQgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJbMl0udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihleHByLmxlbmd0aCA+PSA0KXtcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gaXNSZXF1aXJlZCB8fCBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZUZvclJlcXVpcmVkSWYoZXhwclszXS50cmltKCksIGZvcm1Hcm91cCwgZWxlbWVudCwgc2hhcmVkRGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGV4cHIubGVuZ3RoID09IDUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlRm9yUmVxdWlyZWRJZihleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwLCBlbGVtZW50LCBzaGFyZWREYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZXhwci5sZW5ndGggPiA1KXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIkFwcFZhbGlkYXRvcnMgOiBNb3JlIHRoYW4gNSAnfHwnIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkLlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZighZXhwcmVzc2lvbi5pbmNsdWRlcygnfHwnKSAmJiAhZXhwcmVzc2lvbi5pbmNsdWRlcygnJiYnKSl7XHJcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb24udHJpbSgpLCBmb3JtR3JvdXAsIGVsZW1lbnQsIHNoYXJlZERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZihpc1JlcXVpcmVkKXtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHJlcXVpcmVkSWY6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZElmOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjYWxjdWxhdGVPcGVyYW5kVmFsdWVGb3JSZXF1aXJlZElmKGV4cHJlc3Npb246IHN0cmluZywgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLCBlbGVtZW50OiBFbGVtZW50c01vZGVsLCBzaGFyZWREYXRhOiBhbnkpIDogYm9vbGVhbntcclxuICAgICAgICB2YXIgc3BsaXRBcnJheTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc9PScpKSB7XHJcbiAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc9PScpO1xyXG4gICAgICAgICAgICBpc0RvZXNOb3RFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnIT0nKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnIT0nKTtcclxuICAgICAgICAgICAgaXNEb2VzTm90RXF1YWwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pbmNsdWRlcygnY29udGFpbnMnKSkge1xyXG4gICAgICAgICAgICBzcGxpdEFycmF5ID0gZXhwcmVzc2lvbi5zcGxpdCgnY29udGFpbnMnKTtcclxuICAgICAgICAgICAgaXNDb250YWlucyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpO1xyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgIHZhciB2YWx1ZU9mQWN0dWFsQ29udHJvbDtcclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgICAgICAgdmFsdWVPZkFjdHVhbENvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaGFyZWREYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iajogW10gPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0ckludG9PYmpbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlT2ZBY3R1YWxDb250cm9sID0gc3RySW50b09ialtlbGVtZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2YWx1ZU9mQ25ydHJsVG9DaGVjaztcclxuXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlWyd2YWx1ZSddKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10udHJpbSgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbMF0pIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmICFBcnJheS5pc0FycmF5KHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSkge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmICF2YWx1ZU9mQWN0dWFsQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayAmJiB2YWx1ZU9mQWN0dWFsQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgvXFwnL2csIFwiXCIpOyAvL251bGxcclxuXHJcbiAgICAgICAgaWYgKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkgJiYgIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXT8udmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkgJiYgIWZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXT8udmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmICFpc0RvZXNOb3RFcXVhbCAmJiB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9PT0gb3BlcmFuZDIgJiYgIXZhbHVlT2ZBY3R1YWxDb250cm9sICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Py5uYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAob3BlcmFuZDIgIT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICE9IG9wZXJhbmQyICYmICF2YWx1ZU9mQWN0dWFsQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldEVxdWFsc1ZhbGlkYXRpb24oZWxlbWVudDogYW55LCBzaGFyZWREYXRhOiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IChmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcclxuICAgICAgICAgICAgaWYgKCFmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEBkeW5hbWljXHJcbiAgICBzdGF0aWMgc2V0UGFzc3dvcmRWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgIHZhciBzcGxpdEFycmF5O1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHZhbGlkYXRvci5leHByZXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBleHByZXNzaW9uLmluZGV4T2YoJz09PScpO1xyXG4gICAgICAgICAgICBsZXQgaXNFcXVhbE9wZXJhbmQ6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0QXJyYXkgPSBleHByZXNzaW9uLnNwbGl0KCc+Jyk7XHJcbiAgICAgICAgICAgICAgICBpc0VxdWFsT3BlcmFuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3BsaXRBcnJheSA9IGV4cHJlc3Npb24uc3BsaXQoJz09PScpO1xyXG4gICAgICAgICAgICAgICAgaXNFcXVhbE9wZXJhbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgICAgIGxldCBvcGVyYW5kMjogc3RyaW5nID0gc3BsaXRBcnJheVsxXTtcclxuICAgICAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdzZXREYXRlVmFsaWRhdGlvbiBzaGFyZWREYXRhJywgc2hhcmVkRGF0YSk7XHJcblxyXG5cclxuICAgICAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb250cm9sLnBhcmVudCcsIGNvbnRyb2wucGFyZW50KVxyXG4gICAgICAgICAgICBsZXQgY29udHJvbDEgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdO1xyXG4gICAgICAgICAgICBsZXQgY29udHJvbDIgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDJdO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbDEudmFsdWUgIT0gY29udHJvbDIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IHBhc3N3b3JkQ29tcGFyaXNpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBwYXNzd29yZENvbXBhcmlzaW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBAZHluYW1pY1xyXG4gICAgc3RhdGljIHNldERhdGVWYWxpZGF0aW9uKGVsZW1lbnQ6IGFueSwgc2hhcmVkRGF0YTogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9yTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdmFsaWRhdG9yLmV4cHJlc3Npb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYXRvciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpIHx8IGV4cHJlc3Npb24uaW5jbHVkZXMoJzw9JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+PScpID8gJz49JyA6ICc8PSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBleHByZXNzaW9uLmluY2x1ZGVzKCc+JykgPyAnPicgOiAnPCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXRBcnJheTogc3RyaW5nW10gPSBleHByZXNzaW9uLnNwbGl0KG9wZXJhdG9yKS5tYXAoc3RyID0+IHN0ci50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVyYW5kMTogc3RyaW5nID0gc3BsaXRBcnJheVswXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmFuZDI6IHN0cmluZyA9IHNwbGl0QXJyYXlbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmFuZDEgPSBvcGVyYW5kMS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wxID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udHJvbDIgPSBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDJdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZTE6IERhdGUgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZTI6IERhdGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoY29udHJvbDEudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZERhdGEuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RySW50b09iaiA9IEpTT04ucGFyc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RySW50b09ialtvcGVyYW5kMV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlMSA9IG5ldyBEYXRlKHN0ckludG9PYmpbb3BlcmFuZDFdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKGNvbnRyb2wyLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWREYXRhLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ckludG9PYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ckludG9PYmpbb3BlcmFuZDJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTIgPSBuZXcgRGF0ZShzdHJJbnRvT2JqW29wZXJhbmQyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUxICYmIGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJz49JyAmJiBkYXRlMSA+PSBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICc8PScgJiYgZGF0ZTEgPD0gZGF0ZTIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSAnPicgJiYgZGF0ZTEgPiBkYXRlMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICc8JyAmJiBkYXRlMSA8IGRhdGUyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldEVycm9ycyh7IGRhdGVDb21wYXJpc2lvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGVDb21wYXJpc2lvbjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0VxdWFsKHZhbHVlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBub3RFcXVhbDogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY2FsY3VsYXRlT3BlcmFuZFZhbHVlKHN0ckV4cDogc3RyaW5nLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApe1xyXG4gICAgICAgIHZhciBzcGxpdEFycmF5OiBzdHJpbmdbXTtcclxuICAgICAgICBsZXQgaXNEb2VzTm90RXF1YWw6IGJvb2xlYW47XHJcbiAgICAgICAgbGV0IGlzQ29udGFpbnM6IGJvb2xlYW47XHJcbiAgICAgICAgaWYgKHN0ckV4cC5pbmNsdWRlcygnPT0nKSkge1xyXG4gICAgICAgICAgc3BsaXRBcnJheSA9IHN0ckV4cC5zcGxpdCgnPT0nKTtcclxuICAgICAgICAgIGlzRG9lc05vdEVxdWFsID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmKHN0ckV4cC5pbmNsdWRlcygnIT0nKSl7XHJcbiAgICAgICAgICBzcGxpdEFycmF5ID0gc3RyRXhwLnNwbGl0KCchPScpO1xyXG4gICAgICAgICAgaXNEb2VzTm90RXF1YWwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZihzdHJFeHAuaW5jbHVkZXMoJ2NvbnRhaW5zJykpe1xyXG4gICAgICAgICAgc3BsaXRBcnJheSA9IHN0ckV4cC5zcGxpdCgnY29udGFpbnMnKTtcclxuICAgICAgICAgIGlzQ29udGFpbnMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgb3BlcmFuZDE6IHN0cmluZyA9IHNwbGl0QXJyYXlbMF07XHJcbiAgICAgICAgbGV0IG9wZXJhbmQyOiBzdHJpbmcgPSBzcGxpdEFycmF5WzFdO1xyXG4gICAgICAgIG9wZXJhbmQxID0gb3BlcmFuZDEucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnRyaW0oKTsgLy9jbGFpbWFudFByaW9yUGF5MTAyXHJcbiAgICAgICAgb3BlcmFuZDIgPSBvcGVyYW5kMi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykudHJpbSgpOyAvL251bGxcclxuICAgICAgICB2YXIgdmFsdWVPZkNucnRybFRvQ2hlY2s7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnb3BlcmFuZDEnLG9wZXJhbmQxKTtcclxuICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSAmJiBmb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlICYmIHR5cGVvZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXSkudmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICBcclxuICAgICAgICAgIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID0gZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0gJiYgZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZSAmJiB0eXBlb2YgKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0pLnZhbHVlICE9ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdvcGVyYW5mb3JtR3JvdXAuY29udHJvbHNbb3BlcmFuZDFdLnZhbHVlW3ZhbHVlXScsZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVswXSk7XHJcbiAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW29wZXJhbmQxXS52YWx1ZVsndmFsdWUnXSkge1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbJ3ZhbHVlJ10udHJpbSgpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmKGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWVbMF0pe1xyXG4gICAgICAgICAgICB2YWx1ZU9mQ25ydHJsVG9DaGVjayA9IGZvcm1Hcm91cC5jb250cm9sc1tvcGVyYW5kMV0udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChvcGVyYW5kMiA9PT0gJ251bGwnICYmIGlzRG9lc05vdEVxdWFsICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wZXJhbmQyID09PSAnbnVsbCcgJiYgIWlzRG9lc05vdEVxdWFsICYmICF2YWx1ZU9mQ25ydHJsVG9DaGVjaykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZXJhbmQyID0gb3BlcmFuZDIucmVwbGFjZSgnXFwnJywgJycpLnJlcGxhY2UoJ1xcJycsICcnKS50cmltKCk7IC8vbnVsbFxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKGlzQ29udGFpbnMgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIEFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgaWYoaXNDb250YWlucyAmJiAodmFsdWVPZkNucnRybFRvQ2hlY2sgJiYgIUFycmF5LmlzQXJyYXkodmFsdWVPZkNucnRybFRvQ2hlY2spICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLmluY2x1ZGVzKG9wZXJhbmQyKSkpe1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgaWYgKG9wZXJhbmQyICE9ICdudWxsJyAmJiAhaXNEb2VzTm90RXF1YWwgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrID09PSBvcGVyYW5kMikpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIGlmIChvcGVyYW5kMiAhPSAnbnVsbCcgJiYgaXNEb2VzTm90RXF1YWwgJiYgKHZhbHVlT2ZDbnJ0cmxUb0NoZWNrICYmIHZhbHVlT2ZDbnJ0cmxUb0NoZWNrLnRyaW0oKSAhPSBvcGVyYW5kMikpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxufSJdfQ==