@saritasa/crm-delmar-core-sdk 0.0.121 → 0.0.123

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 (368) hide show
  1. package/README.md +2 -2
  2. package/api/api.d.ts +4 -1
  3. package/api/clients-api.service.d.ts +105 -0
  4. package/api/clients-api.serviceInterface.d.ts +226 -0
  5. package/esm2022/api/api.mjs +5 -1
  6. package/esm2022/api/clients-api.service.mjs +1011 -0
  7. package/esm2022/api/clients-api.serviceInterface.mjs +2 -0
  8. package/esm2022/model/billing-method-enum.dto.mjs +20 -0
  9. package/esm2022/model/client-month-stats.dto.mjs +2 -0
  10. package/esm2022/model/client-stats.dto.mjs +2 -0
  11. package/esm2022/model/client-status-enum.dto.mjs +19 -0
  12. package/esm2022/model/client.dto.mjs +2 -0
  13. package/esm2022/model/clients-list-account-manager-error-component.dto.mjs +18 -0
  14. package/esm2022/model/clients-list-account-manager-in-error-component.dto.mjs +18 -0
  15. package/esm2022/model/clients-list-address1-error-component.dto.mjs +18 -0
  16. package/esm2022/model/clients-list-address1-in-error-component.dto.mjs +18 -0
  17. package/esm2022/model/clients-list-address2-error-component.dto.mjs +18 -0
  18. package/esm2022/model/clients-list-address2-in-error-component.dto.mjs +18 -0
  19. package/esm2022/model/clients-list-billing-address1-error-component.dto.mjs +18 -0
  20. package/esm2022/model/clients-list-billing-address1-in-error-component.dto.mjs +18 -0
  21. package/esm2022/model/clients-list-billing-address2-error-component.dto.mjs +18 -0
  22. package/esm2022/model/clients-list-billing-address2-in-error-component.dto.mjs +18 -0
  23. package/esm2022/model/clients-list-billing-city-error-component.dto.mjs +18 -0
  24. package/esm2022/model/clients-list-billing-city-in-error-component.dto.mjs +18 -0
  25. package/esm2022/model/clients-list-billing-country-error-component.dto.mjs +18 -0
  26. package/esm2022/model/clients-list-billing-country-in-error-component.dto.mjs +18 -0
  27. package/esm2022/model/clients-list-billing-method-error-component.dto.mjs +18 -0
  28. package/esm2022/model/clients-list-billing-method-in-error-component.dto.mjs +18 -0
  29. package/esm2022/model/clients-list-billing-notes-contains-error-component.dto.mjs +18 -0
  30. package/esm2022/model/clients-list-billing-notes-error-component.dto.mjs +18 -0
  31. package/esm2022/model/clients-list-billing-notes-in-error-component.dto.mjs +18 -0
  32. package/esm2022/model/clients-list-billing-state-error-component.dto.mjs +18 -0
  33. package/esm2022/model/clients-list-billing-state-in-error-component.dto.mjs +18 -0
  34. package/esm2022/model/clients-list-billing-zip-error-component.dto.mjs +18 -0
  35. package/esm2022/model/clients-list-billing-zip-in-error-component.dto.mjs +18 -0
  36. package/esm2022/model/clients-list-city-error-component.dto.mjs +18 -0
  37. package/esm2022/model/clients-list-city-in-error-component.dto.mjs +18 -0
  38. package/esm2022/model/clients-list-contract-until-gte-error-component.dto.mjs +18 -0
  39. package/esm2022/model/clients-list-contract-until-lte-error-component.dto.mjs +18 -0
  40. package/esm2022/model/clients-list-country-error-component.dto.mjs +18 -0
  41. package/esm2022/model/clients-list-country-in-error-component.dto.mjs +18 -0
  42. package/esm2022/model/clients-list-created-by-error-component.dto.mjs +18 -0
  43. package/esm2022/model/clients-list-created-by-in-error-component.dto.mjs +18 -0
  44. package/esm2022/model/clients-list-error-response400.dto.mjs +2 -0
  45. package/esm2022/model/clients-list-error.dto.mjs +2 -0
  46. package/esm2022/model/clients-list-id-error-component.dto.mjs +19 -0
  47. package/esm2022/model/clients-list-id-in-error-component.dto.mjs +19 -0
  48. package/esm2022/model/clients-list-notes-contains-error-component.dto.mjs +18 -0
  49. package/esm2022/model/clients-list-notes-error-component.dto.mjs +18 -0
  50. package/esm2022/model/clients-list-notes-in-error-component.dto.mjs +18 -0
  51. package/esm2022/model/clients-list-payment-recipient-name-error-component.dto.mjs +18 -0
  52. package/esm2022/model/clients-list-payment-recipient-name-in-error-component.dto.mjs +18 -0
  53. package/esm2022/model/clients-list-qb-client-id-error-component.dto.mjs +18 -0
  54. package/esm2022/model/clients-list-qb-client-id-in-error-component.dto.mjs +18 -0
  55. package/esm2022/model/clients-list-state-error-component.dto.mjs +18 -0
  56. package/esm2022/model/clients-list-state-in-error-component.dto.mjs +18 -0
  57. package/esm2022/model/clients-list-status-error-component.dto.mjs +18 -0
  58. package/esm2022/model/clients-list-status-in-error-component.dto.mjs +18 -0
  59. package/esm2022/model/clients-list-time-limit-per-month-gte-error-component.dto.mjs +19 -0
  60. package/esm2022/model/clients-list-time-limit-per-month-lte-error-component.dto.mjs +19 -0
  61. package/esm2022/model/clients-list-updated-by-error-component.dto.mjs +18 -0
  62. package/esm2022/model/clients-list-updated-by-in-error-component.dto.mjs +18 -0
  63. package/esm2022/model/clients-list-validation-error.dto.mjs +2 -0
  64. package/esm2022/model/clients-list-website-error-component.dto.mjs +18 -0
  65. package/esm2022/model/clients-list-website-in-error-component.dto.mjs +18 -0
  66. package/esm2022/model/clients-list-zip-error-component.dto.mjs +18 -0
  67. package/esm2022/model/clients-list-zip-in-error-component.dto.mjs +18 -0
  68. package/esm2022/model/clients-list-zoho-account-id-error-component.dto.mjs +18 -0
  69. package/esm2022/model/clients-list-zoho-account-id-in-error-component.dto.mjs +18 -0
  70. package/esm2022/model/clients-retrieve-error-response400.dto.mjs +2 -0
  71. package/esm2022/model/clients-with-month-stats-retrieve-account-manager-error-component.dto.mjs +18 -0
  72. package/esm2022/model/clients-with-month-stats-retrieve-account-manager-in-error-component.dto.mjs +18 -0
  73. package/esm2022/model/clients-with-month-stats-retrieve-address1-error-component.dto.mjs +18 -0
  74. package/esm2022/model/clients-with-month-stats-retrieve-address1-in-error-component.dto.mjs +18 -0
  75. package/esm2022/model/clients-with-month-stats-retrieve-address2-error-component.dto.mjs +18 -0
  76. package/esm2022/model/clients-with-month-stats-retrieve-address2-in-error-component.dto.mjs +18 -0
  77. package/esm2022/model/clients-with-month-stats-retrieve-billing-address1-error-component.dto.mjs +18 -0
  78. package/esm2022/model/clients-with-month-stats-retrieve-billing-address1-in-error-component.dto.mjs +18 -0
  79. package/esm2022/model/clients-with-month-stats-retrieve-billing-address2-error-component.dto.mjs +18 -0
  80. package/esm2022/model/clients-with-month-stats-retrieve-billing-address2-in-error-component.dto.mjs +18 -0
  81. package/esm2022/model/clients-with-month-stats-retrieve-billing-city-error-component.dto.mjs +18 -0
  82. package/esm2022/model/clients-with-month-stats-retrieve-billing-city-in-error-component.dto.mjs +18 -0
  83. package/esm2022/model/clients-with-month-stats-retrieve-billing-country-error-component.dto.mjs +18 -0
  84. package/esm2022/model/clients-with-month-stats-retrieve-billing-country-in-error-component.dto.mjs +18 -0
  85. package/esm2022/model/clients-with-month-stats-retrieve-billing-method-error-component.dto.mjs +18 -0
  86. package/esm2022/model/clients-with-month-stats-retrieve-billing-method-in-error-component.dto.mjs +18 -0
  87. package/esm2022/model/clients-with-month-stats-retrieve-billing-notes-contains-error-component.dto.mjs +18 -0
  88. package/esm2022/model/clients-with-month-stats-retrieve-billing-notes-error-component.dto.mjs +18 -0
  89. package/esm2022/model/clients-with-month-stats-retrieve-billing-notes-in-error-component.dto.mjs +18 -0
  90. package/esm2022/model/clients-with-month-stats-retrieve-billing-state-error-component.dto.mjs +18 -0
  91. package/esm2022/model/clients-with-month-stats-retrieve-billing-state-in-error-component.dto.mjs +18 -0
  92. package/esm2022/model/clients-with-month-stats-retrieve-billing-zip-error-component.dto.mjs +18 -0
  93. package/esm2022/model/clients-with-month-stats-retrieve-billing-zip-in-error-component.dto.mjs +18 -0
  94. package/esm2022/model/clients-with-month-stats-retrieve-city-error-component.dto.mjs +18 -0
  95. package/esm2022/model/clients-with-month-stats-retrieve-city-in-error-component.dto.mjs +18 -0
  96. package/esm2022/model/clients-with-month-stats-retrieve-contract-until-gte-error-component.dto.mjs +18 -0
  97. package/esm2022/model/clients-with-month-stats-retrieve-contract-until-lte-error-component.dto.mjs +18 -0
  98. package/esm2022/model/clients-with-month-stats-retrieve-country-error-component.dto.mjs +18 -0
  99. package/esm2022/model/clients-with-month-stats-retrieve-country-in-error-component.dto.mjs +18 -0
  100. package/esm2022/model/clients-with-month-stats-retrieve-created-by-error-component.dto.mjs +18 -0
  101. package/esm2022/model/clients-with-month-stats-retrieve-created-by-in-error-component.dto.mjs +18 -0
  102. package/esm2022/model/clients-with-month-stats-retrieve-error-response400.dto.mjs +2 -0
  103. package/esm2022/model/clients-with-month-stats-retrieve-error.dto.mjs +2 -0
  104. package/esm2022/model/clients-with-month-stats-retrieve-id-error-component.dto.mjs +19 -0
  105. package/esm2022/model/clients-with-month-stats-retrieve-id-in-error-component.dto.mjs +19 -0
  106. package/esm2022/model/clients-with-month-stats-retrieve-notes-contains-error-component.dto.mjs +18 -0
  107. package/esm2022/model/clients-with-month-stats-retrieve-notes-error-component.dto.mjs +18 -0
  108. package/esm2022/model/clients-with-month-stats-retrieve-notes-in-error-component.dto.mjs +18 -0
  109. package/esm2022/model/clients-with-month-stats-retrieve-payment-recipient-name-error-component.dto.mjs +18 -0
  110. package/esm2022/model/clients-with-month-stats-retrieve-payment-recipient-name-in-error-component.dto.mjs +18 -0
  111. package/esm2022/model/clients-with-month-stats-retrieve-qb-client-id-error-component.dto.mjs +18 -0
  112. package/esm2022/model/clients-with-month-stats-retrieve-qb-client-id-in-error-component.dto.mjs +18 -0
  113. package/esm2022/model/clients-with-month-stats-retrieve-state-error-component.dto.mjs +18 -0
  114. package/esm2022/model/clients-with-month-stats-retrieve-state-in-error-component.dto.mjs +18 -0
  115. package/esm2022/model/clients-with-month-stats-retrieve-status-error-component.dto.mjs +18 -0
  116. package/esm2022/model/clients-with-month-stats-retrieve-status-in-error-component.dto.mjs +18 -0
  117. package/esm2022/model/clients-with-month-stats-retrieve-time-limit-per-month-gte-error-component.dto.mjs +19 -0
  118. package/esm2022/model/clients-with-month-stats-retrieve-time-limit-per-month-lte-error-component.dto.mjs +19 -0
  119. package/esm2022/model/clients-with-month-stats-retrieve-updated-by-error-component.dto.mjs +18 -0
  120. package/esm2022/model/clients-with-month-stats-retrieve-updated-by-in-error-component.dto.mjs +18 -0
  121. package/esm2022/model/clients-with-month-stats-retrieve-validation-error.dto.mjs +2 -0
  122. package/esm2022/model/clients-with-month-stats-retrieve-website-error-component.dto.mjs +18 -0
  123. package/esm2022/model/clients-with-month-stats-retrieve-website-in-error-component.dto.mjs +18 -0
  124. package/esm2022/model/clients-with-month-stats-retrieve-zip-error-component.dto.mjs +18 -0
  125. package/esm2022/model/clients-with-month-stats-retrieve-zip-in-error-component.dto.mjs +18 -0
  126. package/esm2022/model/clients-with-month-stats-retrieve-zoho-account-id-error-component.dto.mjs +18 -0
  127. package/esm2022/model/clients-with-month-stats-retrieve-zoho-account-id-in-error-component.dto.mjs +18 -0
  128. package/esm2022/model/clients-with-stats-retrieve-account-manager-error-component.dto.mjs +18 -0
  129. package/esm2022/model/clients-with-stats-retrieve-account-manager-in-error-component.dto.mjs +18 -0
  130. package/esm2022/model/clients-with-stats-retrieve-address1-error-component.dto.mjs +18 -0
  131. package/esm2022/model/clients-with-stats-retrieve-address1-in-error-component.dto.mjs +18 -0
  132. package/esm2022/model/clients-with-stats-retrieve-address2-error-component.dto.mjs +18 -0
  133. package/esm2022/model/clients-with-stats-retrieve-address2-in-error-component.dto.mjs +18 -0
  134. package/esm2022/model/clients-with-stats-retrieve-billing-address1-error-component.dto.mjs +18 -0
  135. package/esm2022/model/clients-with-stats-retrieve-billing-address1-in-error-component.dto.mjs +18 -0
  136. package/esm2022/model/clients-with-stats-retrieve-billing-address2-error-component.dto.mjs +18 -0
  137. package/esm2022/model/clients-with-stats-retrieve-billing-address2-in-error-component.dto.mjs +18 -0
  138. package/esm2022/model/clients-with-stats-retrieve-billing-city-error-component.dto.mjs +18 -0
  139. package/esm2022/model/clients-with-stats-retrieve-billing-city-in-error-component.dto.mjs +18 -0
  140. package/esm2022/model/clients-with-stats-retrieve-billing-country-error-component.dto.mjs +18 -0
  141. package/esm2022/model/clients-with-stats-retrieve-billing-country-in-error-component.dto.mjs +18 -0
  142. package/esm2022/model/clients-with-stats-retrieve-billing-method-error-component.dto.mjs +18 -0
  143. package/esm2022/model/clients-with-stats-retrieve-billing-method-in-error-component.dto.mjs +18 -0
  144. package/esm2022/model/clients-with-stats-retrieve-billing-notes-contains-error-component.dto.mjs +18 -0
  145. package/esm2022/model/clients-with-stats-retrieve-billing-notes-error-component.dto.mjs +18 -0
  146. package/esm2022/model/clients-with-stats-retrieve-billing-notes-in-error-component.dto.mjs +18 -0
  147. package/esm2022/model/clients-with-stats-retrieve-billing-state-error-component.dto.mjs +18 -0
  148. package/esm2022/model/clients-with-stats-retrieve-billing-state-in-error-component.dto.mjs +18 -0
  149. package/esm2022/model/clients-with-stats-retrieve-billing-zip-error-component.dto.mjs +18 -0
  150. package/esm2022/model/clients-with-stats-retrieve-billing-zip-in-error-component.dto.mjs +18 -0
  151. package/esm2022/model/clients-with-stats-retrieve-city-error-component.dto.mjs +18 -0
  152. package/esm2022/model/clients-with-stats-retrieve-city-in-error-component.dto.mjs +18 -0
  153. package/esm2022/model/clients-with-stats-retrieve-contract-until-gte-error-component.dto.mjs +18 -0
  154. package/esm2022/model/clients-with-stats-retrieve-contract-until-lte-error-component.dto.mjs +18 -0
  155. package/esm2022/model/clients-with-stats-retrieve-country-error-component.dto.mjs +18 -0
  156. package/esm2022/model/clients-with-stats-retrieve-country-in-error-component.dto.mjs +18 -0
  157. package/esm2022/model/clients-with-stats-retrieve-created-by-error-component.dto.mjs +18 -0
  158. package/esm2022/model/clients-with-stats-retrieve-created-by-in-error-component.dto.mjs +18 -0
  159. package/esm2022/model/clients-with-stats-retrieve-error-response400.dto.mjs +2 -0
  160. package/esm2022/model/clients-with-stats-retrieve-error.dto.mjs +2 -0
  161. package/esm2022/model/clients-with-stats-retrieve-id-error-component.dto.mjs +19 -0
  162. package/esm2022/model/clients-with-stats-retrieve-id-in-error-component.dto.mjs +19 -0
  163. package/esm2022/model/clients-with-stats-retrieve-notes-contains-error-component.dto.mjs +18 -0
  164. package/esm2022/model/clients-with-stats-retrieve-notes-error-component.dto.mjs +18 -0
  165. package/esm2022/model/clients-with-stats-retrieve-notes-in-error-component.dto.mjs +18 -0
  166. package/esm2022/model/clients-with-stats-retrieve-payment-recipient-name-error-component.dto.mjs +18 -0
  167. package/esm2022/model/clients-with-stats-retrieve-payment-recipient-name-in-error-component.dto.mjs +18 -0
  168. package/esm2022/model/clients-with-stats-retrieve-qb-client-id-error-component.dto.mjs +18 -0
  169. package/esm2022/model/clients-with-stats-retrieve-qb-client-id-in-error-component.dto.mjs +18 -0
  170. package/esm2022/model/clients-with-stats-retrieve-state-error-component.dto.mjs +18 -0
  171. package/esm2022/model/clients-with-stats-retrieve-state-in-error-component.dto.mjs +18 -0
  172. package/esm2022/model/clients-with-stats-retrieve-status-error-component.dto.mjs +18 -0
  173. package/esm2022/model/clients-with-stats-retrieve-status-in-error-component.dto.mjs +18 -0
  174. package/esm2022/model/clients-with-stats-retrieve-time-limit-per-month-gte-error-component.dto.mjs +19 -0
  175. package/esm2022/model/clients-with-stats-retrieve-time-limit-per-month-lte-error-component.dto.mjs +19 -0
  176. package/esm2022/model/clients-with-stats-retrieve-updated-by-error-component.dto.mjs +18 -0
  177. package/esm2022/model/clients-with-stats-retrieve-updated-by-in-error-component.dto.mjs +18 -0
  178. package/esm2022/model/clients-with-stats-retrieve-validation-error.dto.mjs +2 -0
  179. package/esm2022/model/clients-with-stats-retrieve-website-error-component.dto.mjs +18 -0
  180. package/esm2022/model/clients-with-stats-retrieve-website-in-error-component.dto.mjs +18 -0
  181. package/esm2022/model/clients-with-stats-retrieve-zip-error-component.dto.mjs +18 -0
  182. package/esm2022/model/clients-with-stats-retrieve-zip-in-error-component.dto.mjs +18 -0
  183. package/esm2022/model/clients-with-stats-retrieve-zoho-account-id-error-component.dto.mjs +18 -0
  184. package/esm2022/model/clients-with-stats-retrieve-zoho-account-id-in-error-component.dto.mjs +18 -0
  185. package/esm2022/model/models.mjs +179 -1
  186. package/esm2022/model/paginated-client-list.dto.mjs +2 -0
  187. package/fesm2022/saritasa-crm-delmar-core-sdk.mjs +5196 -1226
  188. package/fesm2022/saritasa-crm-delmar-core-sdk.mjs.map +1 -1
  189. package/model/billing-method-enum.dto.d.ts +18 -0
  190. package/model/client-month-stats.dto.d.ts +66 -0
  191. package/model/client-stats.dto.d.ts +68 -0
  192. package/model/client-status-enum.dto.d.ts +17 -0
  193. package/model/client.dto.d.ts +58 -0
  194. package/model/clients-list-account-manager-error-component.dto.d.ts +26 -0
  195. package/model/clients-list-account-manager-in-error-component.dto.d.ts +26 -0
  196. package/model/clients-list-address1-error-component.dto.d.ts +26 -0
  197. package/model/clients-list-address1-in-error-component.dto.d.ts +26 -0
  198. package/model/clients-list-address2-error-component.dto.d.ts +26 -0
  199. package/model/clients-list-address2-in-error-component.dto.d.ts +26 -0
  200. package/model/clients-list-billing-address1-error-component.dto.d.ts +26 -0
  201. package/model/clients-list-billing-address1-in-error-component.dto.d.ts +26 -0
  202. package/model/clients-list-billing-address2-error-component.dto.d.ts +26 -0
  203. package/model/clients-list-billing-address2-in-error-component.dto.d.ts +26 -0
  204. package/model/clients-list-billing-city-error-component.dto.d.ts +26 -0
  205. package/model/clients-list-billing-city-in-error-component.dto.d.ts +26 -0
  206. package/model/clients-list-billing-country-error-component.dto.d.ts +26 -0
  207. package/model/clients-list-billing-country-in-error-component.dto.d.ts +26 -0
  208. package/model/clients-list-billing-method-error-component.dto.d.ts +26 -0
  209. package/model/clients-list-billing-method-in-error-component.dto.d.ts +26 -0
  210. package/model/clients-list-billing-notes-contains-error-component.dto.d.ts +26 -0
  211. package/model/clients-list-billing-notes-error-component.dto.d.ts +26 -0
  212. package/model/clients-list-billing-notes-in-error-component.dto.d.ts +26 -0
  213. package/model/clients-list-billing-state-error-component.dto.d.ts +26 -0
  214. package/model/clients-list-billing-state-in-error-component.dto.d.ts +26 -0
  215. package/model/clients-list-billing-zip-error-component.dto.d.ts +26 -0
  216. package/model/clients-list-billing-zip-in-error-component.dto.d.ts +26 -0
  217. package/model/clients-list-city-error-component.dto.d.ts +26 -0
  218. package/model/clients-list-city-in-error-component.dto.d.ts +26 -0
  219. package/model/clients-list-contract-until-gte-error-component.dto.d.ts +26 -0
  220. package/model/clients-list-contract-until-lte-error-component.dto.d.ts +26 -0
  221. package/model/clients-list-country-error-component.dto.d.ts +26 -0
  222. package/model/clients-list-country-in-error-component.dto.d.ts +26 -0
  223. package/model/clients-list-created-by-error-component.dto.d.ts +26 -0
  224. package/model/clients-list-created-by-in-error-component.dto.d.ts +26 -0
  225. package/model/clients-list-error-response400.dto.d.ts +16 -0
  226. package/model/clients-list-error.dto.d.ts +68 -0
  227. package/model/clients-list-id-error-component.dto.d.ts +27 -0
  228. package/model/clients-list-id-in-error-component.dto.d.ts +27 -0
  229. package/model/clients-list-notes-contains-error-component.dto.d.ts +26 -0
  230. package/model/clients-list-notes-error-component.dto.d.ts +26 -0
  231. package/model/clients-list-notes-in-error-component.dto.d.ts +26 -0
  232. package/model/clients-list-payment-recipient-name-error-component.dto.d.ts +26 -0
  233. package/model/clients-list-payment-recipient-name-in-error-component.dto.d.ts +26 -0
  234. package/model/clients-list-qb-client-id-error-component.dto.d.ts +26 -0
  235. package/model/clients-list-qb-client-id-in-error-component.dto.d.ts +26 -0
  236. package/model/clients-list-state-error-component.dto.d.ts +26 -0
  237. package/model/clients-list-state-in-error-component.dto.d.ts +26 -0
  238. package/model/clients-list-status-error-component.dto.d.ts +26 -0
  239. package/model/clients-list-status-in-error-component.dto.d.ts +26 -0
  240. package/model/clients-list-time-limit-per-month-gte-error-component.dto.d.ts +27 -0
  241. package/model/clients-list-time-limit-per-month-lte-error-component.dto.d.ts +27 -0
  242. package/model/clients-list-updated-by-error-component.dto.d.ts +26 -0
  243. package/model/clients-list-updated-by-in-error-component.dto.d.ts +26 -0
  244. package/model/clients-list-validation-error.dto.d.ts +15 -0
  245. package/model/clients-list-website-error-component.dto.d.ts +26 -0
  246. package/model/clients-list-website-in-error-component.dto.d.ts +26 -0
  247. package/model/clients-list-zip-error-component.dto.d.ts +26 -0
  248. package/model/clients-list-zip-in-error-component.dto.d.ts +26 -0
  249. package/model/clients-list-zoho-account-id-error-component.dto.d.ts +26 -0
  250. package/model/clients-list-zoho-account-id-in-error-component.dto.d.ts +26 -0
  251. package/model/clients-retrieve-error-response400.dto.d.ts +15 -0
  252. package/model/clients-with-month-stats-retrieve-account-manager-error-component.dto.d.ts +26 -0
  253. package/model/clients-with-month-stats-retrieve-account-manager-in-error-component.dto.d.ts +26 -0
  254. package/model/clients-with-month-stats-retrieve-address1-error-component.dto.d.ts +26 -0
  255. package/model/clients-with-month-stats-retrieve-address1-in-error-component.dto.d.ts +26 -0
  256. package/model/clients-with-month-stats-retrieve-address2-error-component.dto.d.ts +26 -0
  257. package/model/clients-with-month-stats-retrieve-address2-in-error-component.dto.d.ts +26 -0
  258. package/model/clients-with-month-stats-retrieve-billing-address1-error-component.dto.d.ts +26 -0
  259. package/model/clients-with-month-stats-retrieve-billing-address1-in-error-component.dto.d.ts +26 -0
  260. package/model/clients-with-month-stats-retrieve-billing-address2-error-component.dto.d.ts +26 -0
  261. package/model/clients-with-month-stats-retrieve-billing-address2-in-error-component.dto.d.ts +26 -0
  262. package/model/clients-with-month-stats-retrieve-billing-city-error-component.dto.d.ts +26 -0
  263. package/model/clients-with-month-stats-retrieve-billing-city-in-error-component.dto.d.ts +26 -0
  264. package/model/clients-with-month-stats-retrieve-billing-country-error-component.dto.d.ts +26 -0
  265. package/model/clients-with-month-stats-retrieve-billing-country-in-error-component.dto.d.ts +26 -0
  266. package/model/clients-with-month-stats-retrieve-billing-method-error-component.dto.d.ts +26 -0
  267. package/model/clients-with-month-stats-retrieve-billing-method-in-error-component.dto.d.ts +26 -0
  268. package/model/clients-with-month-stats-retrieve-billing-notes-contains-error-component.dto.d.ts +26 -0
  269. package/model/clients-with-month-stats-retrieve-billing-notes-error-component.dto.d.ts +26 -0
  270. package/model/clients-with-month-stats-retrieve-billing-notes-in-error-component.dto.d.ts +26 -0
  271. package/model/clients-with-month-stats-retrieve-billing-state-error-component.dto.d.ts +26 -0
  272. package/model/clients-with-month-stats-retrieve-billing-state-in-error-component.dto.d.ts +26 -0
  273. package/model/clients-with-month-stats-retrieve-billing-zip-error-component.dto.d.ts +26 -0
  274. package/model/clients-with-month-stats-retrieve-billing-zip-in-error-component.dto.d.ts +26 -0
  275. package/model/clients-with-month-stats-retrieve-city-error-component.dto.d.ts +26 -0
  276. package/model/clients-with-month-stats-retrieve-city-in-error-component.dto.d.ts +26 -0
  277. package/model/clients-with-month-stats-retrieve-contract-until-gte-error-component.dto.d.ts +26 -0
  278. package/model/clients-with-month-stats-retrieve-contract-until-lte-error-component.dto.d.ts +26 -0
  279. package/model/clients-with-month-stats-retrieve-country-error-component.dto.d.ts +26 -0
  280. package/model/clients-with-month-stats-retrieve-country-in-error-component.dto.d.ts +26 -0
  281. package/model/clients-with-month-stats-retrieve-created-by-error-component.dto.d.ts +26 -0
  282. package/model/clients-with-month-stats-retrieve-created-by-in-error-component.dto.d.ts +26 -0
  283. package/model/clients-with-month-stats-retrieve-error-response400.dto.d.ts +16 -0
  284. package/model/clients-with-month-stats-retrieve-error.dto.d.ts +68 -0
  285. package/model/clients-with-month-stats-retrieve-id-error-component.dto.d.ts +27 -0
  286. package/model/clients-with-month-stats-retrieve-id-in-error-component.dto.d.ts +27 -0
  287. package/model/clients-with-month-stats-retrieve-notes-contains-error-component.dto.d.ts +26 -0
  288. package/model/clients-with-month-stats-retrieve-notes-error-component.dto.d.ts +26 -0
  289. package/model/clients-with-month-stats-retrieve-notes-in-error-component.dto.d.ts +26 -0
  290. package/model/clients-with-month-stats-retrieve-payment-recipient-name-error-component.dto.d.ts +26 -0
  291. package/model/clients-with-month-stats-retrieve-payment-recipient-name-in-error-component.dto.d.ts +26 -0
  292. package/model/clients-with-month-stats-retrieve-qb-client-id-error-component.dto.d.ts +26 -0
  293. package/model/clients-with-month-stats-retrieve-qb-client-id-in-error-component.dto.d.ts +26 -0
  294. package/model/clients-with-month-stats-retrieve-state-error-component.dto.d.ts +26 -0
  295. package/model/clients-with-month-stats-retrieve-state-in-error-component.dto.d.ts +26 -0
  296. package/model/clients-with-month-stats-retrieve-status-error-component.dto.d.ts +26 -0
  297. package/model/clients-with-month-stats-retrieve-status-in-error-component.dto.d.ts +26 -0
  298. package/model/clients-with-month-stats-retrieve-time-limit-per-month-gte-error-component.dto.d.ts +27 -0
  299. package/model/clients-with-month-stats-retrieve-time-limit-per-month-lte-error-component.dto.d.ts +27 -0
  300. package/model/clients-with-month-stats-retrieve-updated-by-error-component.dto.d.ts +26 -0
  301. package/model/clients-with-month-stats-retrieve-updated-by-in-error-component.dto.d.ts +26 -0
  302. package/model/clients-with-month-stats-retrieve-validation-error.dto.d.ts +15 -0
  303. package/model/clients-with-month-stats-retrieve-website-error-component.dto.d.ts +26 -0
  304. package/model/clients-with-month-stats-retrieve-website-in-error-component.dto.d.ts +26 -0
  305. package/model/clients-with-month-stats-retrieve-zip-error-component.dto.d.ts +26 -0
  306. package/model/clients-with-month-stats-retrieve-zip-in-error-component.dto.d.ts +26 -0
  307. package/model/clients-with-month-stats-retrieve-zoho-account-id-error-component.dto.d.ts +26 -0
  308. package/model/clients-with-month-stats-retrieve-zoho-account-id-in-error-component.dto.d.ts +26 -0
  309. package/model/clients-with-stats-retrieve-account-manager-error-component.dto.d.ts +26 -0
  310. package/model/clients-with-stats-retrieve-account-manager-in-error-component.dto.d.ts +26 -0
  311. package/model/clients-with-stats-retrieve-address1-error-component.dto.d.ts +26 -0
  312. package/model/clients-with-stats-retrieve-address1-in-error-component.dto.d.ts +26 -0
  313. package/model/clients-with-stats-retrieve-address2-error-component.dto.d.ts +26 -0
  314. package/model/clients-with-stats-retrieve-address2-in-error-component.dto.d.ts +26 -0
  315. package/model/clients-with-stats-retrieve-billing-address1-error-component.dto.d.ts +26 -0
  316. package/model/clients-with-stats-retrieve-billing-address1-in-error-component.dto.d.ts +26 -0
  317. package/model/clients-with-stats-retrieve-billing-address2-error-component.dto.d.ts +26 -0
  318. package/model/clients-with-stats-retrieve-billing-address2-in-error-component.dto.d.ts +26 -0
  319. package/model/clients-with-stats-retrieve-billing-city-error-component.dto.d.ts +26 -0
  320. package/model/clients-with-stats-retrieve-billing-city-in-error-component.dto.d.ts +26 -0
  321. package/model/clients-with-stats-retrieve-billing-country-error-component.dto.d.ts +26 -0
  322. package/model/clients-with-stats-retrieve-billing-country-in-error-component.dto.d.ts +26 -0
  323. package/model/clients-with-stats-retrieve-billing-method-error-component.dto.d.ts +26 -0
  324. package/model/clients-with-stats-retrieve-billing-method-in-error-component.dto.d.ts +26 -0
  325. package/model/clients-with-stats-retrieve-billing-notes-contains-error-component.dto.d.ts +26 -0
  326. package/model/clients-with-stats-retrieve-billing-notes-error-component.dto.d.ts +26 -0
  327. package/model/clients-with-stats-retrieve-billing-notes-in-error-component.dto.d.ts +26 -0
  328. package/model/clients-with-stats-retrieve-billing-state-error-component.dto.d.ts +26 -0
  329. package/model/clients-with-stats-retrieve-billing-state-in-error-component.dto.d.ts +26 -0
  330. package/model/clients-with-stats-retrieve-billing-zip-error-component.dto.d.ts +26 -0
  331. package/model/clients-with-stats-retrieve-billing-zip-in-error-component.dto.d.ts +26 -0
  332. package/model/clients-with-stats-retrieve-city-error-component.dto.d.ts +26 -0
  333. package/model/clients-with-stats-retrieve-city-in-error-component.dto.d.ts +26 -0
  334. package/model/clients-with-stats-retrieve-contract-until-gte-error-component.dto.d.ts +26 -0
  335. package/model/clients-with-stats-retrieve-contract-until-lte-error-component.dto.d.ts +26 -0
  336. package/model/clients-with-stats-retrieve-country-error-component.dto.d.ts +26 -0
  337. package/model/clients-with-stats-retrieve-country-in-error-component.dto.d.ts +26 -0
  338. package/model/clients-with-stats-retrieve-created-by-error-component.dto.d.ts +26 -0
  339. package/model/clients-with-stats-retrieve-created-by-in-error-component.dto.d.ts +26 -0
  340. package/model/clients-with-stats-retrieve-error-response400.dto.d.ts +16 -0
  341. package/model/clients-with-stats-retrieve-error.dto.d.ts +68 -0
  342. package/model/clients-with-stats-retrieve-id-error-component.dto.d.ts +27 -0
  343. package/model/clients-with-stats-retrieve-id-in-error-component.dto.d.ts +27 -0
  344. package/model/clients-with-stats-retrieve-notes-contains-error-component.dto.d.ts +26 -0
  345. package/model/clients-with-stats-retrieve-notes-error-component.dto.d.ts +26 -0
  346. package/model/clients-with-stats-retrieve-notes-in-error-component.dto.d.ts +26 -0
  347. package/model/clients-with-stats-retrieve-payment-recipient-name-error-component.dto.d.ts +26 -0
  348. package/model/clients-with-stats-retrieve-payment-recipient-name-in-error-component.dto.d.ts +26 -0
  349. package/model/clients-with-stats-retrieve-qb-client-id-error-component.dto.d.ts +26 -0
  350. package/model/clients-with-stats-retrieve-qb-client-id-in-error-component.dto.d.ts +26 -0
  351. package/model/clients-with-stats-retrieve-state-error-component.dto.d.ts +26 -0
  352. package/model/clients-with-stats-retrieve-state-in-error-component.dto.d.ts +26 -0
  353. package/model/clients-with-stats-retrieve-status-error-component.dto.d.ts +26 -0
  354. package/model/clients-with-stats-retrieve-status-in-error-component.dto.d.ts +26 -0
  355. package/model/clients-with-stats-retrieve-time-limit-per-month-gte-error-component.dto.d.ts +27 -0
  356. package/model/clients-with-stats-retrieve-time-limit-per-month-lte-error-component.dto.d.ts +27 -0
  357. package/model/clients-with-stats-retrieve-updated-by-error-component.dto.d.ts +26 -0
  358. package/model/clients-with-stats-retrieve-updated-by-in-error-component.dto.d.ts +26 -0
  359. package/model/clients-with-stats-retrieve-validation-error.dto.d.ts +15 -0
  360. package/model/clients-with-stats-retrieve-website-error-component.dto.d.ts +26 -0
  361. package/model/clients-with-stats-retrieve-website-in-error-component.dto.d.ts +26 -0
  362. package/model/clients-with-stats-retrieve-zip-error-component.dto.d.ts +26 -0
  363. package/model/clients-with-stats-retrieve-zip-in-error-component.dto.d.ts +26 -0
  364. package/model/clients-with-stats-retrieve-zoho-account-id-error-component.dto.d.ts +26 -0
  365. package/model/clients-with-stats-retrieve-zoho-account-id-in-error-component.dto.d.ts +26 -0
  366. package/model/models.d.ts +178 -0
  367. package/model/paginated-client-list.dto.d.ts +16 -0
  368. package/package.json +2 -2
@@ -0,0 +1,1011 @@
1
+ /**
2
+ * Delmar Api
3
+ *
4
+ *
5
+ *
6
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
7
+ * https://openapi-generator.tech
8
+ * Do not edit the class manually.
9
+ */
10
+ /* tslint:disable:no-unused-variable member-ordering */
11
+ import { Inject, Injectable, Optional } from "@angular/core";
12
+ import { HttpHeaders, HttpParams, HttpContext, } from "@angular/common/http";
13
+ import { CustomHttpParameterCodec } from "../encoder";
14
+ // @ts-ignore
15
+ import { BASE_PATH, COLLECTION_FORMATS } from "../variables";
16
+ import { Configuration } from "../configuration";
17
+ import * as i0 from "@angular/core";
18
+ import * as i1 from "@angular/common/http";
19
+ import * as i2 from "../configuration";
20
+ export class ClientsApiService {
21
+ httpClient;
22
+ basePath = "";
23
+ defaultHeaders = new HttpHeaders();
24
+ configuration = new Configuration();
25
+ encoder;
26
+ constructor(httpClient, basePath, configuration) {
27
+ this.httpClient = httpClient;
28
+ if (configuration) {
29
+ this.configuration = configuration;
30
+ }
31
+ if (typeof this.configuration.basePath !== "string") {
32
+ const firstBasePath = Array.isArray(basePath) ? basePath[0] : undefined;
33
+ if (firstBasePath != undefined) {
34
+ basePath = firstBasePath;
35
+ }
36
+ if (typeof basePath !== "string") {
37
+ basePath = this.basePath;
38
+ }
39
+ this.configuration.basePath = basePath;
40
+ }
41
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
42
+ }
43
+ // @ts-ignore
44
+ addToHttpParams(httpParams, value, key) {
45
+ if (typeof value === "object" && value instanceof Date === false) {
46
+ httpParams = this.addToHttpParamsRecursive(httpParams, value);
47
+ }
48
+ else {
49
+ httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
50
+ }
51
+ return httpParams;
52
+ }
53
+ addToHttpParamsRecursive(httpParams, value, key) {
54
+ if (value == null) {
55
+ return httpParams;
56
+ }
57
+ if (typeof value === "object") {
58
+ if (Array.isArray(value)) {
59
+ value.forEach((elem) => (httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)));
60
+ }
61
+ else if (value instanceof Date) {
62
+ if (key != null) {
63
+ httpParams = httpParams.append(key, value.toISOString().substring(0, 10));
64
+ }
65
+ else {
66
+ throw Error("key may not be null if value is Date");
67
+ }
68
+ }
69
+ else {
70
+ Object.keys(value).forEach((k) => (httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k)));
71
+ }
72
+ }
73
+ else if (key != null) {
74
+ httpParams = httpParams.append(key, value);
75
+ }
76
+ else {
77
+ throw Error("key may not be null if value is not object or array");
78
+ }
79
+ return httpParams;
80
+ }
81
+ clientsList(requestParameters, observe = "body", reportProgress = false, options) {
82
+ const accountManager = requestParameters?.accountManager;
83
+ const accountManagerIn = requestParameters?.accountManagerIn;
84
+ const address1 = requestParameters?.address1;
85
+ const address1In = requestParameters?.address1In;
86
+ const address2 = requestParameters?.address2;
87
+ const address2In = requestParameters?.address2In;
88
+ const billingAddress1 = requestParameters?.billingAddress1;
89
+ const billingAddress1In = requestParameters?.billingAddress1In;
90
+ const billingAddress2 = requestParameters?.billingAddress2;
91
+ const billingAddress2In = requestParameters?.billingAddress2In;
92
+ const billingCity = requestParameters?.billingCity;
93
+ const billingCityIn = requestParameters?.billingCityIn;
94
+ const billingCountry = requestParameters?.billingCountry;
95
+ const billingCountryIn = requestParameters?.billingCountryIn;
96
+ const billingMethod = requestParameters?.billingMethod;
97
+ const billingMethodIn = requestParameters?.billingMethodIn;
98
+ const billingNotes = requestParameters?.billingNotes;
99
+ const billingNotesContains = requestParameters?.billingNotesContains;
100
+ const billingNotesIn = requestParameters?.billingNotesIn;
101
+ const billingState = requestParameters?.billingState;
102
+ const billingStateIn = requestParameters?.billingStateIn;
103
+ const billingZip = requestParameters?.billingZip;
104
+ const billingZipIn = requestParameters?.billingZipIn;
105
+ const city = requestParameters?.city;
106
+ const cityIn = requestParameters?.cityIn;
107
+ const contractUntilGte = requestParameters?.contractUntilGte;
108
+ const contractUntilLte = requestParameters?.contractUntilLte;
109
+ const country = requestParameters?.country;
110
+ const countryIn = requestParameters?.countryIn;
111
+ const createdBy = requestParameters?.createdBy;
112
+ const createdByIn = requestParameters?.createdByIn;
113
+ const id = requestParameters?.id;
114
+ const idIn = requestParameters?.idIn;
115
+ const isBillable = requestParameters?.isBillable;
116
+ const limit = requestParameters?.limit;
117
+ const notes = requestParameters?.notes;
118
+ const notesContains = requestParameters?.notesContains;
119
+ const notesIn = requestParameters?.notesIn;
120
+ const offset = requestParameters?.offset;
121
+ const ordering = requestParameters?.ordering;
122
+ const paymentRecipientName = requestParameters?.paymentRecipientName;
123
+ const paymentRecipientNameIn = requestParameters?.paymentRecipientNameIn;
124
+ const qbClientId = requestParameters?.qbClientId;
125
+ const qbClientIdIn = requestParameters?.qbClientIdIn;
126
+ const search = requestParameters?.search;
127
+ const state = requestParameters?.state;
128
+ const stateIn = requestParameters?.stateIn;
129
+ const status = requestParameters?.status;
130
+ const statusIn = requestParameters?.statusIn;
131
+ const timeLimitPerMonthGte = requestParameters?.timeLimitPerMonthGte;
132
+ const timeLimitPerMonthLte = requestParameters?.timeLimitPerMonthLte;
133
+ const updatedBy = requestParameters?.updatedBy;
134
+ const updatedByIn = requestParameters?.updatedByIn;
135
+ const website = requestParameters?.website;
136
+ const websiteIn = requestParameters?.websiteIn;
137
+ const zip = requestParameters?.zip;
138
+ const zipIn = requestParameters?.zipIn;
139
+ const zohoAccountId = requestParameters?.zohoAccountId;
140
+ const zohoAccountIdIn = requestParameters?.zohoAccountIdIn;
141
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
142
+ if (accountManager !== undefined && accountManager !== null) {
143
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, accountManager, "account_manager");
144
+ }
145
+ if (accountManagerIn) {
146
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...accountManagerIn].join(COLLECTION_FORMATS["csv"]), "account_manager__in");
147
+ }
148
+ if (address1 !== undefined && address1 !== null) {
149
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, address1, "address1");
150
+ }
151
+ if (address1In) {
152
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...address1In].join(COLLECTION_FORMATS["csv"]), "address1__in");
153
+ }
154
+ if (address2 !== undefined && address2 !== null) {
155
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, address2, "address2");
156
+ }
157
+ if (address2In) {
158
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...address2In].join(COLLECTION_FORMATS["csv"]), "address2__in");
159
+ }
160
+ if (billingAddress1 !== undefined && billingAddress1 !== null) {
161
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingAddress1, "billing_address1");
162
+ }
163
+ if (billingAddress1In) {
164
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingAddress1In].join(COLLECTION_FORMATS["csv"]), "billing_address1__in");
165
+ }
166
+ if (billingAddress2 !== undefined && billingAddress2 !== null) {
167
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingAddress2, "billing_address2");
168
+ }
169
+ if (billingAddress2In) {
170
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingAddress2In].join(COLLECTION_FORMATS["csv"]), "billing_address2__in");
171
+ }
172
+ if (billingCity !== undefined && billingCity !== null) {
173
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingCity, "billing_city");
174
+ }
175
+ if (billingCityIn) {
176
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingCityIn].join(COLLECTION_FORMATS["csv"]), "billing_city__in");
177
+ }
178
+ if (billingCountry !== undefined && billingCountry !== null) {
179
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingCountry, "billing_country");
180
+ }
181
+ if (billingCountryIn) {
182
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingCountryIn].join(COLLECTION_FORMATS["csv"]), "billing_country__in");
183
+ }
184
+ if (billingMethod !== undefined && billingMethod !== null) {
185
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingMethod, "billing_method");
186
+ }
187
+ if (billingMethodIn) {
188
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingMethodIn].join(COLLECTION_FORMATS["csv"]), "billing_method__in");
189
+ }
190
+ if (billingNotes !== undefined && billingNotes !== null) {
191
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingNotes, "billing_notes");
192
+ }
193
+ if (billingNotesContains !== undefined && billingNotesContains !== null) {
194
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingNotesContains, "billing_notes__contains");
195
+ }
196
+ if (billingNotesIn) {
197
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingNotesIn].join(COLLECTION_FORMATS["csv"]), "billing_notes__in");
198
+ }
199
+ if (billingState !== undefined && billingState !== null) {
200
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingState, "billing_state");
201
+ }
202
+ if (billingStateIn) {
203
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingStateIn].join(COLLECTION_FORMATS["csv"]), "billing_state__in");
204
+ }
205
+ if (billingZip !== undefined && billingZip !== null) {
206
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingZip, "billing_zip");
207
+ }
208
+ if (billingZipIn) {
209
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingZipIn].join(COLLECTION_FORMATS["csv"]), "billing_zip__in");
210
+ }
211
+ if (city !== undefined && city !== null) {
212
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, city, "city");
213
+ }
214
+ if (cityIn) {
215
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...cityIn].join(COLLECTION_FORMATS["csv"]), "city__in");
216
+ }
217
+ if (contractUntilGte !== undefined && contractUntilGte !== null) {
218
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, contractUntilGte, "contract_until__gte");
219
+ }
220
+ if (contractUntilLte !== undefined && contractUntilLte !== null) {
221
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, contractUntilLte, "contract_until__lte");
222
+ }
223
+ if (country !== undefined && country !== null) {
224
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, country, "country");
225
+ }
226
+ if (countryIn) {
227
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...countryIn].join(COLLECTION_FORMATS["csv"]), "country__in");
228
+ }
229
+ if (createdBy !== undefined && createdBy !== null) {
230
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, createdBy, "created_by");
231
+ }
232
+ if (createdByIn) {
233
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...createdByIn].join(COLLECTION_FORMATS["csv"]), "created_by__in");
234
+ }
235
+ if (id !== undefined && id !== null) {
236
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, id, "id");
237
+ }
238
+ if (idIn) {
239
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...idIn].join(COLLECTION_FORMATS["csv"]), "id__in");
240
+ }
241
+ if (isBillable !== undefined && isBillable !== null) {
242
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, isBillable, "is_billable");
243
+ }
244
+ if (limit !== undefined && limit !== null) {
245
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, "limit");
246
+ }
247
+ if (notes !== undefined && notes !== null) {
248
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, notes, "notes");
249
+ }
250
+ if (notesContains !== undefined && notesContains !== null) {
251
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, notesContains, "notes__contains");
252
+ }
253
+ if (notesIn) {
254
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...notesIn].join(COLLECTION_FORMATS["csv"]), "notes__in");
255
+ }
256
+ if (offset !== undefined && offset !== null) {
257
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, offset, "offset");
258
+ }
259
+ if (ordering !== undefined && ordering !== null) {
260
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
261
+ }
262
+ if (paymentRecipientName !== undefined && paymentRecipientName !== null) {
263
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, paymentRecipientName, "payment_recipient_name");
264
+ }
265
+ if (paymentRecipientNameIn) {
266
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...paymentRecipientNameIn].join(COLLECTION_FORMATS["csv"]), "payment_recipient_name__in");
267
+ }
268
+ if (qbClientId !== undefined && qbClientId !== null) {
269
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, qbClientId, "qb_client_id");
270
+ }
271
+ if (qbClientIdIn) {
272
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...qbClientIdIn].join(COLLECTION_FORMATS["csv"]), "qb_client_id__in");
273
+ }
274
+ if (search !== undefined && search !== null) {
275
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
276
+ }
277
+ if (state !== undefined && state !== null) {
278
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, state, "state");
279
+ }
280
+ if (stateIn) {
281
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...stateIn].join(COLLECTION_FORMATS["csv"]), "state__in");
282
+ }
283
+ if (status !== undefined && status !== null) {
284
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, status, "status");
285
+ }
286
+ if (statusIn) {
287
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...statusIn].join(COLLECTION_FORMATS["csv"]), "status__in");
288
+ }
289
+ if (timeLimitPerMonthGte !== undefined && timeLimitPerMonthGte !== null) {
290
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, timeLimitPerMonthGte, "time_limit_per_month__gte");
291
+ }
292
+ if (timeLimitPerMonthLte !== undefined && timeLimitPerMonthLte !== null) {
293
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, timeLimitPerMonthLte, "time_limit_per_month__lte");
294
+ }
295
+ if (updatedBy !== undefined && updatedBy !== null) {
296
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, updatedBy, "updated_by");
297
+ }
298
+ if (updatedByIn) {
299
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...updatedByIn].join(COLLECTION_FORMATS["csv"]), "updated_by__in");
300
+ }
301
+ if (website !== undefined && website !== null) {
302
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, website, "website");
303
+ }
304
+ if (websiteIn) {
305
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...websiteIn].join(COLLECTION_FORMATS["csv"]), "website__in");
306
+ }
307
+ if (zip !== undefined && zip !== null) {
308
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, zip, "zip");
309
+ }
310
+ if (zipIn) {
311
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...zipIn].join(COLLECTION_FORMATS["csv"]), "zip__in");
312
+ }
313
+ if (zohoAccountId !== undefined && zohoAccountId !== null) {
314
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, zohoAccountId, "zoho_account_id");
315
+ }
316
+ if (zohoAccountIdIn) {
317
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...zohoAccountIdIn].join(COLLECTION_FORMATS["csv"]), "zoho_account_id__in");
318
+ }
319
+ let localVarHeaders = this.defaultHeaders;
320
+ let localVarCredential;
321
+ // authentication (cookieAuth) required
322
+ localVarCredential = this.configuration.lookupCredential("cookieAuth");
323
+ if (localVarCredential) {
324
+ }
325
+ // authentication (jwtAuth) required
326
+ localVarCredential = this.configuration.lookupCredential("jwtAuth");
327
+ if (localVarCredential) {
328
+ localVarHeaders = localVarHeaders.set("Authorization", "Bearer " + localVarCredential);
329
+ }
330
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
331
+ if (localVarHttpHeaderAcceptSelected === undefined) {
332
+ // to determine the Accept header
333
+ const httpHeaderAccepts = ["application/json"];
334
+ localVarHttpHeaderAcceptSelected =
335
+ this.configuration.selectHeaderAccept(httpHeaderAccepts);
336
+ }
337
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
338
+ localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
339
+ }
340
+ let localVarHttpContext = options && options.context;
341
+ if (localVarHttpContext === undefined) {
342
+ localVarHttpContext = new HttpContext();
343
+ }
344
+ let localVarTransferCache = options && options.transferCache;
345
+ if (localVarTransferCache === undefined) {
346
+ localVarTransferCache = true;
347
+ }
348
+ let responseType_ = "json";
349
+ if (localVarHttpHeaderAcceptSelected) {
350
+ if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
351
+ responseType_ = "text";
352
+ }
353
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
354
+ responseType_ = "json";
355
+ }
356
+ else {
357
+ responseType_ = "blob";
358
+ }
359
+ }
360
+ let localVarPath = `/api/v1/clients/`;
361
+ return this.httpClient.request("get", `${this.configuration.basePath}${localVarPath}`, {
362
+ context: localVarHttpContext,
363
+ params: localVarQueryParameters,
364
+ responseType: responseType_,
365
+ withCredentials: this.configuration.withCredentials,
366
+ headers: localVarHeaders,
367
+ observe: observe,
368
+ transferCache: localVarTransferCache,
369
+ reportProgress: reportProgress,
370
+ });
371
+ }
372
+ clientsRetrieve(requestParameters, observe = "body", reportProgress = false, options) {
373
+ const id = requestParameters?.id;
374
+ if (id === null || id === undefined) {
375
+ throw new Error("Required parameter id was null or undefined when calling clientsRetrieve.");
376
+ }
377
+ let localVarHeaders = this.defaultHeaders;
378
+ let localVarCredential;
379
+ // authentication (cookieAuth) required
380
+ localVarCredential = this.configuration.lookupCredential("cookieAuth");
381
+ if (localVarCredential) {
382
+ }
383
+ // authentication (jwtAuth) required
384
+ localVarCredential = this.configuration.lookupCredential("jwtAuth");
385
+ if (localVarCredential) {
386
+ localVarHeaders = localVarHeaders.set("Authorization", "Bearer " + localVarCredential);
387
+ }
388
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
389
+ if (localVarHttpHeaderAcceptSelected === undefined) {
390
+ // to determine the Accept header
391
+ const httpHeaderAccepts = ["application/json"];
392
+ localVarHttpHeaderAcceptSelected =
393
+ this.configuration.selectHeaderAccept(httpHeaderAccepts);
394
+ }
395
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
396
+ localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
397
+ }
398
+ let localVarHttpContext = options && options.context;
399
+ if (localVarHttpContext === undefined) {
400
+ localVarHttpContext = new HttpContext();
401
+ }
402
+ let localVarTransferCache = options && options.transferCache;
403
+ if (localVarTransferCache === undefined) {
404
+ localVarTransferCache = true;
405
+ }
406
+ let responseType_ = "json";
407
+ if (localVarHttpHeaderAcceptSelected) {
408
+ if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
409
+ responseType_ = "text";
410
+ }
411
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
412
+ responseType_ = "json";
413
+ }
414
+ else {
415
+ responseType_ = "blob";
416
+ }
417
+ }
418
+ let localVarPath = `/api/v1/clients/${this.configuration.encodeParam({ name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "number", dataFormat: undefined })}/`;
419
+ return this.httpClient.request("get", `${this.configuration.basePath}${localVarPath}`, {
420
+ context: localVarHttpContext,
421
+ responseType: responseType_,
422
+ withCredentials: this.configuration.withCredentials,
423
+ headers: localVarHeaders,
424
+ observe: observe,
425
+ transferCache: localVarTransferCache,
426
+ reportProgress: reportProgress,
427
+ });
428
+ }
429
+ clientsWithMonthStatsRetrieve(requestParameters, observe = "body", reportProgress = false, options) {
430
+ const accountManager = requestParameters?.accountManager;
431
+ const accountManagerIn = requestParameters?.accountManagerIn;
432
+ const address1 = requestParameters?.address1;
433
+ const address1In = requestParameters?.address1In;
434
+ const address2 = requestParameters?.address2;
435
+ const address2In = requestParameters?.address2In;
436
+ const billingAddress1 = requestParameters?.billingAddress1;
437
+ const billingAddress1In = requestParameters?.billingAddress1In;
438
+ const billingAddress2 = requestParameters?.billingAddress2;
439
+ const billingAddress2In = requestParameters?.billingAddress2In;
440
+ const billingCity = requestParameters?.billingCity;
441
+ const billingCityIn = requestParameters?.billingCityIn;
442
+ const billingCountry = requestParameters?.billingCountry;
443
+ const billingCountryIn = requestParameters?.billingCountryIn;
444
+ const billingMethod = requestParameters?.billingMethod;
445
+ const billingMethodIn = requestParameters?.billingMethodIn;
446
+ const billingNotes = requestParameters?.billingNotes;
447
+ const billingNotesContains = requestParameters?.billingNotesContains;
448
+ const billingNotesIn = requestParameters?.billingNotesIn;
449
+ const billingState = requestParameters?.billingState;
450
+ const billingStateIn = requestParameters?.billingStateIn;
451
+ const billingZip = requestParameters?.billingZip;
452
+ const billingZipIn = requestParameters?.billingZipIn;
453
+ const city = requestParameters?.city;
454
+ const cityIn = requestParameters?.cityIn;
455
+ const contractUntilGte = requestParameters?.contractUntilGte;
456
+ const contractUntilLte = requestParameters?.contractUntilLte;
457
+ const country = requestParameters?.country;
458
+ const countryIn = requestParameters?.countryIn;
459
+ const createdBy = requestParameters?.createdBy;
460
+ const createdByIn = requestParameters?.createdByIn;
461
+ const id = requestParameters?.id;
462
+ const idIn = requestParameters?.idIn;
463
+ const isBillable = requestParameters?.isBillable;
464
+ const notes = requestParameters?.notes;
465
+ const notesContains = requestParameters?.notesContains;
466
+ const notesIn = requestParameters?.notesIn;
467
+ const ordering = requestParameters?.ordering;
468
+ const paymentRecipientName = requestParameters?.paymentRecipientName;
469
+ const paymentRecipientNameIn = requestParameters?.paymentRecipientNameIn;
470
+ const qbClientId = requestParameters?.qbClientId;
471
+ const qbClientIdIn = requestParameters?.qbClientIdIn;
472
+ const search = requestParameters?.search;
473
+ const state = requestParameters?.state;
474
+ const stateIn = requestParameters?.stateIn;
475
+ const status = requestParameters?.status;
476
+ const statusIn = requestParameters?.statusIn;
477
+ const timeLimitPerMonthGte = requestParameters?.timeLimitPerMonthGte;
478
+ const timeLimitPerMonthLte = requestParameters?.timeLimitPerMonthLte;
479
+ const updatedBy = requestParameters?.updatedBy;
480
+ const updatedByIn = requestParameters?.updatedByIn;
481
+ const website = requestParameters?.website;
482
+ const websiteIn = requestParameters?.websiteIn;
483
+ const zip = requestParameters?.zip;
484
+ const zipIn = requestParameters?.zipIn;
485
+ const zohoAccountId = requestParameters?.zohoAccountId;
486
+ const zohoAccountIdIn = requestParameters?.zohoAccountIdIn;
487
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
488
+ if (accountManager !== undefined && accountManager !== null) {
489
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, accountManager, "account_manager");
490
+ }
491
+ if (accountManagerIn) {
492
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...accountManagerIn].join(COLLECTION_FORMATS["csv"]), "account_manager__in");
493
+ }
494
+ if (address1 !== undefined && address1 !== null) {
495
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, address1, "address1");
496
+ }
497
+ if (address1In) {
498
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...address1In].join(COLLECTION_FORMATS["csv"]), "address1__in");
499
+ }
500
+ if (address2 !== undefined && address2 !== null) {
501
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, address2, "address2");
502
+ }
503
+ if (address2In) {
504
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...address2In].join(COLLECTION_FORMATS["csv"]), "address2__in");
505
+ }
506
+ if (billingAddress1 !== undefined && billingAddress1 !== null) {
507
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingAddress1, "billing_address1");
508
+ }
509
+ if (billingAddress1In) {
510
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingAddress1In].join(COLLECTION_FORMATS["csv"]), "billing_address1__in");
511
+ }
512
+ if (billingAddress2 !== undefined && billingAddress2 !== null) {
513
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingAddress2, "billing_address2");
514
+ }
515
+ if (billingAddress2In) {
516
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingAddress2In].join(COLLECTION_FORMATS["csv"]), "billing_address2__in");
517
+ }
518
+ if (billingCity !== undefined && billingCity !== null) {
519
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingCity, "billing_city");
520
+ }
521
+ if (billingCityIn) {
522
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingCityIn].join(COLLECTION_FORMATS["csv"]), "billing_city__in");
523
+ }
524
+ if (billingCountry !== undefined && billingCountry !== null) {
525
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingCountry, "billing_country");
526
+ }
527
+ if (billingCountryIn) {
528
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingCountryIn].join(COLLECTION_FORMATS["csv"]), "billing_country__in");
529
+ }
530
+ if (billingMethod !== undefined && billingMethod !== null) {
531
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingMethod, "billing_method");
532
+ }
533
+ if (billingMethodIn) {
534
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingMethodIn].join(COLLECTION_FORMATS["csv"]), "billing_method__in");
535
+ }
536
+ if (billingNotes !== undefined && billingNotes !== null) {
537
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingNotes, "billing_notes");
538
+ }
539
+ if (billingNotesContains !== undefined && billingNotesContains !== null) {
540
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingNotesContains, "billing_notes__contains");
541
+ }
542
+ if (billingNotesIn) {
543
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingNotesIn].join(COLLECTION_FORMATS["csv"]), "billing_notes__in");
544
+ }
545
+ if (billingState !== undefined && billingState !== null) {
546
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingState, "billing_state");
547
+ }
548
+ if (billingStateIn) {
549
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingStateIn].join(COLLECTION_FORMATS["csv"]), "billing_state__in");
550
+ }
551
+ if (billingZip !== undefined && billingZip !== null) {
552
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingZip, "billing_zip");
553
+ }
554
+ if (billingZipIn) {
555
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingZipIn].join(COLLECTION_FORMATS["csv"]), "billing_zip__in");
556
+ }
557
+ if (city !== undefined && city !== null) {
558
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, city, "city");
559
+ }
560
+ if (cityIn) {
561
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...cityIn].join(COLLECTION_FORMATS["csv"]), "city__in");
562
+ }
563
+ if (contractUntilGte !== undefined && contractUntilGte !== null) {
564
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, contractUntilGte, "contract_until__gte");
565
+ }
566
+ if (contractUntilLte !== undefined && contractUntilLte !== null) {
567
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, contractUntilLte, "contract_until__lte");
568
+ }
569
+ if (country !== undefined && country !== null) {
570
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, country, "country");
571
+ }
572
+ if (countryIn) {
573
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...countryIn].join(COLLECTION_FORMATS["csv"]), "country__in");
574
+ }
575
+ if (createdBy !== undefined && createdBy !== null) {
576
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, createdBy, "created_by");
577
+ }
578
+ if (createdByIn) {
579
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...createdByIn].join(COLLECTION_FORMATS["csv"]), "created_by__in");
580
+ }
581
+ if (id !== undefined && id !== null) {
582
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, id, "id");
583
+ }
584
+ if (idIn) {
585
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...idIn].join(COLLECTION_FORMATS["csv"]), "id__in");
586
+ }
587
+ if (isBillable !== undefined && isBillable !== null) {
588
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, isBillable, "is_billable");
589
+ }
590
+ if (notes !== undefined && notes !== null) {
591
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, notes, "notes");
592
+ }
593
+ if (notesContains !== undefined && notesContains !== null) {
594
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, notesContains, "notes__contains");
595
+ }
596
+ if (notesIn) {
597
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...notesIn].join(COLLECTION_FORMATS["csv"]), "notes__in");
598
+ }
599
+ if (ordering !== undefined && ordering !== null) {
600
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
601
+ }
602
+ if (paymentRecipientName !== undefined && paymentRecipientName !== null) {
603
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, paymentRecipientName, "payment_recipient_name");
604
+ }
605
+ if (paymentRecipientNameIn) {
606
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...paymentRecipientNameIn].join(COLLECTION_FORMATS["csv"]), "payment_recipient_name__in");
607
+ }
608
+ if (qbClientId !== undefined && qbClientId !== null) {
609
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, qbClientId, "qb_client_id");
610
+ }
611
+ if (qbClientIdIn) {
612
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...qbClientIdIn].join(COLLECTION_FORMATS["csv"]), "qb_client_id__in");
613
+ }
614
+ if (search !== undefined && search !== null) {
615
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
616
+ }
617
+ if (state !== undefined && state !== null) {
618
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, state, "state");
619
+ }
620
+ if (stateIn) {
621
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...stateIn].join(COLLECTION_FORMATS["csv"]), "state__in");
622
+ }
623
+ if (status !== undefined && status !== null) {
624
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, status, "status");
625
+ }
626
+ if (statusIn) {
627
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...statusIn].join(COLLECTION_FORMATS["csv"]), "status__in");
628
+ }
629
+ if (timeLimitPerMonthGte !== undefined && timeLimitPerMonthGte !== null) {
630
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, timeLimitPerMonthGte, "time_limit_per_month__gte");
631
+ }
632
+ if (timeLimitPerMonthLte !== undefined && timeLimitPerMonthLte !== null) {
633
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, timeLimitPerMonthLte, "time_limit_per_month__lte");
634
+ }
635
+ if (updatedBy !== undefined && updatedBy !== null) {
636
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, updatedBy, "updated_by");
637
+ }
638
+ if (updatedByIn) {
639
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...updatedByIn].join(COLLECTION_FORMATS["csv"]), "updated_by__in");
640
+ }
641
+ if (website !== undefined && website !== null) {
642
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, website, "website");
643
+ }
644
+ if (websiteIn) {
645
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...websiteIn].join(COLLECTION_FORMATS["csv"]), "website__in");
646
+ }
647
+ if (zip !== undefined && zip !== null) {
648
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, zip, "zip");
649
+ }
650
+ if (zipIn) {
651
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...zipIn].join(COLLECTION_FORMATS["csv"]), "zip__in");
652
+ }
653
+ if (zohoAccountId !== undefined && zohoAccountId !== null) {
654
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, zohoAccountId, "zoho_account_id");
655
+ }
656
+ if (zohoAccountIdIn) {
657
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...zohoAccountIdIn].join(COLLECTION_FORMATS["csv"]), "zoho_account_id__in");
658
+ }
659
+ let localVarHeaders = this.defaultHeaders;
660
+ let localVarCredential;
661
+ // authentication (cookieAuth) required
662
+ localVarCredential = this.configuration.lookupCredential("cookieAuth");
663
+ if (localVarCredential) {
664
+ }
665
+ // authentication (jwtAuth) required
666
+ localVarCredential = this.configuration.lookupCredential("jwtAuth");
667
+ if (localVarCredential) {
668
+ localVarHeaders = localVarHeaders.set("Authorization", "Bearer " + localVarCredential);
669
+ }
670
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
671
+ if (localVarHttpHeaderAcceptSelected === undefined) {
672
+ // to determine the Accept header
673
+ const httpHeaderAccepts = ["application/json"];
674
+ localVarHttpHeaderAcceptSelected =
675
+ this.configuration.selectHeaderAccept(httpHeaderAccepts);
676
+ }
677
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
678
+ localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
679
+ }
680
+ let localVarHttpContext = options && options.context;
681
+ if (localVarHttpContext === undefined) {
682
+ localVarHttpContext = new HttpContext();
683
+ }
684
+ let localVarTransferCache = options && options.transferCache;
685
+ if (localVarTransferCache === undefined) {
686
+ localVarTransferCache = true;
687
+ }
688
+ let responseType_ = "json";
689
+ if (localVarHttpHeaderAcceptSelected) {
690
+ if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
691
+ responseType_ = "text";
692
+ }
693
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
694
+ responseType_ = "json";
695
+ }
696
+ else {
697
+ responseType_ = "blob";
698
+ }
699
+ }
700
+ let localVarPath = `/api/v1/clients/with-month-stats/`;
701
+ return this.httpClient.request("get", `${this.configuration.basePath}${localVarPath}`, {
702
+ context: localVarHttpContext,
703
+ params: localVarQueryParameters,
704
+ responseType: responseType_,
705
+ withCredentials: this.configuration.withCredentials,
706
+ headers: localVarHeaders,
707
+ observe: observe,
708
+ transferCache: localVarTransferCache,
709
+ reportProgress: reportProgress,
710
+ });
711
+ }
712
+ clientsWithStatsRetrieve(requestParameters, observe = "body", reportProgress = false, options) {
713
+ const accountManager = requestParameters?.accountManager;
714
+ const accountManagerIn = requestParameters?.accountManagerIn;
715
+ const address1 = requestParameters?.address1;
716
+ const address1In = requestParameters?.address1In;
717
+ const address2 = requestParameters?.address2;
718
+ const address2In = requestParameters?.address2In;
719
+ const billingAddress1 = requestParameters?.billingAddress1;
720
+ const billingAddress1In = requestParameters?.billingAddress1In;
721
+ const billingAddress2 = requestParameters?.billingAddress2;
722
+ const billingAddress2In = requestParameters?.billingAddress2In;
723
+ const billingCity = requestParameters?.billingCity;
724
+ const billingCityIn = requestParameters?.billingCityIn;
725
+ const billingCountry = requestParameters?.billingCountry;
726
+ const billingCountryIn = requestParameters?.billingCountryIn;
727
+ const billingMethod = requestParameters?.billingMethod;
728
+ const billingMethodIn = requestParameters?.billingMethodIn;
729
+ const billingNotes = requestParameters?.billingNotes;
730
+ const billingNotesContains = requestParameters?.billingNotesContains;
731
+ const billingNotesIn = requestParameters?.billingNotesIn;
732
+ const billingState = requestParameters?.billingState;
733
+ const billingStateIn = requestParameters?.billingStateIn;
734
+ const billingZip = requestParameters?.billingZip;
735
+ const billingZipIn = requestParameters?.billingZipIn;
736
+ const city = requestParameters?.city;
737
+ const cityIn = requestParameters?.cityIn;
738
+ const contractUntilGte = requestParameters?.contractUntilGte;
739
+ const contractUntilLte = requestParameters?.contractUntilLte;
740
+ const country = requestParameters?.country;
741
+ const countryIn = requestParameters?.countryIn;
742
+ const createdBy = requestParameters?.createdBy;
743
+ const createdByIn = requestParameters?.createdByIn;
744
+ const id = requestParameters?.id;
745
+ const idIn = requestParameters?.idIn;
746
+ const isBillable = requestParameters?.isBillable;
747
+ const notes = requestParameters?.notes;
748
+ const notesContains = requestParameters?.notesContains;
749
+ const notesIn = requestParameters?.notesIn;
750
+ const ordering = requestParameters?.ordering;
751
+ const paymentRecipientName = requestParameters?.paymentRecipientName;
752
+ const paymentRecipientNameIn = requestParameters?.paymentRecipientNameIn;
753
+ const qbClientId = requestParameters?.qbClientId;
754
+ const qbClientIdIn = requestParameters?.qbClientIdIn;
755
+ const search = requestParameters?.search;
756
+ const state = requestParameters?.state;
757
+ const stateIn = requestParameters?.stateIn;
758
+ const status = requestParameters?.status;
759
+ const statusIn = requestParameters?.statusIn;
760
+ const timeLimitPerMonthGte = requestParameters?.timeLimitPerMonthGte;
761
+ const timeLimitPerMonthLte = requestParameters?.timeLimitPerMonthLte;
762
+ const updatedBy = requestParameters?.updatedBy;
763
+ const updatedByIn = requestParameters?.updatedByIn;
764
+ const website = requestParameters?.website;
765
+ const websiteIn = requestParameters?.websiteIn;
766
+ const zip = requestParameters?.zip;
767
+ const zipIn = requestParameters?.zipIn;
768
+ const zohoAccountId = requestParameters?.zohoAccountId;
769
+ const zohoAccountIdIn = requestParameters?.zohoAccountIdIn;
770
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
771
+ if (accountManager !== undefined && accountManager !== null) {
772
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, accountManager, "account_manager");
773
+ }
774
+ if (accountManagerIn) {
775
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...accountManagerIn].join(COLLECTION_FORMATS["csv"]), "account_manager__in");
776
+ }
777
+ if (address1 !== undefined && address1 !== null) {
778
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, address1, "address1");
779
+ }
780
+ if (address1In) {
781
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...address1In].join(COLLECTION_FORMATS["csv"]), "address1__in");
782
+ }
783
+ if (address2 !== undefined && address2 !== null) {
784
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, address2, "address2");
785
+ }
786
+ if (address2In) {
787
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...address2In].join(COLLECTION_FORMATS["csv"]), "address2__in");
788
+ }
789
+ if (billingAddress1 !== undefined && billingAddress1 !== null) {
790
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingAddress1, "billing_address1");
791
+ }
792
+ if (billingAddress1In) {
793
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingAddress1In].join(COLLECTION_FORMATS["csv"]), "billing_address1__in");
794
+ }
795
+ if (billingAddress2 !== undefined && billingAddress2 !== null) {
796
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingAddress2, "billing_address2");
797
+ }
798
+ if (billingAddress2In) {
799
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingAddress2In].join(COLLECTION_FORMATS["csv"]), "billing_address2__in");
800
+ }
801
+ if (billingCity !== undefined && billingCity !== null) {
802
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingCity, "billing_city");
803
+ }
804
+ if (billingCityIn) {
805
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingCityIn].join(COLLECTION_FORMATS["csv"]), "billing_city__in");
806
+ }
807
+ if (billingCountry !== undefined && billingCountry !== null) {
808
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingCountry, "billing_country");
809
+ }
810
+ if (billingCountryIn) {
811
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingCountryIn].join(COLLECTION_FORMATS["csv"]), "billing_country__in");
812
+ }
813
+ if (billingMethod !== undefined && billingMethod !== null) {
814
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingMethod, "billing_method");
815
+ }
816
+ if (billingMethodIn) {
817
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingMethodIn].join(COLLECTION_FORMATS["csv"]), "billing_method__in");
818
+ }
819
+ if (billingNotes !== undefined && billingNotes !== null) {
820
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingNotes, "billing_notes");
821
+ }
822
+ if (billingNotesContains !== undefined && billingNotesContains !== null) {
823
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingNotesContains, "billing_notes__contains");
824
+ }
825
+ if (billingNotesIn) {
826
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingNotesIn].join(COLLECTION_FORMATS["csv"]), "billing_notes__in");
827
+ }
828
+ if (billingState !== undefined && billingState !== null) {
829
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingState, "billing_state");
830
+ }
831
+ if (billingStateIn) {
832
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingStateIn].join(COLLECTION_FORMATS["csv"]), "billing_state__in");
833
+ }
834
+ if (billingZip !== undefined && billingZip !== null) {
835
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, billingZip, "billing_zip");
836
+ }
837
+ if (billingZipIn) {
838
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...billingZipIn].join(COLLECTION_FORMATS["csv"]), "billing_zip__in");
839
+ }
840
+ if (city !== undefined && city !== null) {
841
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, city, "city");
842
+ }
843
+ if (cityIn) {
844
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...cityIn].join(COLLECTION_FORMATS["csv"]), "city__in");
845
+ }
846
+ if (contractUntilGte !== undefined && contractUntilGte !== null) {
847
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, contractUntilGte, "contract_until__gte");
848
+ }
849
+ if (contractUntilLte !== undefined && contractUntilLte !== null) {
850
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, contractUntilLte, "contract_until__lte");
851
+ }
852
+ if (country !== undefined && country !== null) {
853
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, country, "country");
854
+ }
855
+ if (countryIn) {
856
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...countryIn].join(COLLECTION_FORMATS["csv"]), "country__in");
857
+ }
858
+ if (createdBy !== undefined && createdBy !== null) {
859
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, createdBy, "created_by");
860
+ }
861
+ if (createdByIn) {
862
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...createdByIn].join(COLLECTION_FORMATS["csv"]), "created_by__in");
863
+ }
864
+ if (id !== undefined && id !== null) {
865
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, id, "id");
866
+ }
867
+ if (idIn) {
868
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...idIn].join(COLLECTION_FORMATS["csv"]), "id__in");
869
+ }
870
+ if (isBillable !== undefined && isBillable !== null) {
871
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, isBillable, "is_billable");
872
+ }
873
+ if (notes !== undefined && notes !== null) {
874
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, notes, "notes");
875
+ }
876
+ if (notesContains !== undefined && notesContains !== null) {
877
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, notesContains, "notes__contains");
878
+ }
879
+ if (notesIn) {
880
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...notesIn].join(COLLECTION_FORMATS["csv"]), "notes__in");
881
+ }
882
+ if (ordering !== undefined && ordering !== null) {
883
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
884
+ }
885
+ if (paymentRecipientName !== undefined && paymentRecipientName !== null) {
886
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, paymentRecipientName, "payment_recipient_name");
887
+ }
888
+ if (paymentRecipientNameIn) {
889
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...paymentRecipientNameIn].join(COLLECTION_FORMATS["csv"]), "payment_recipient_name__in");
890
+ }
891
+ if (qbClientId !== undefined && qbClientId !== null) {
892
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, qbClientId, "qb_client_id");
893
+ }
894
+ if (qbClientIdIn) {
895
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...qbClientIdIn].join(COLLECTION_FORMATS["csv"]), "qb_client_id__in");
896
+ }
897
+ if (search !== undefined && search !== null) {
898
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
899
+ }
900
+ if (state !== undefined && state !== null) {
901
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, state, "state");
902
+ }
903
+ if (stateIn) {
904
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...stateIn].join(COLLECTION_FORMATS["csv"]), "state__in");
905
+ }
906
+ if (status !== undefined && status !== null) {
907
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, status, "status");
908
+ }
909
+ if (statusIn) {
910
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...statusIn].join(COLLECTION_FORMATS["csv"]), "status__in");
911
+ }
912
+ if (timeLimitPerMonthGte !== undefined && timeLimitPerMonthGte !== null) {
913
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, timeLimitPerMonthGte, "time_limit_per_month__gte");
914
+ }
915
+ if (timeLimitPerMonthLte !== undefined && timeLimitPerMonthLte !== null) {
916
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, timeLimitPerMonthLte, "time_limit_per_month__lte");
917
+ }
918
+ if (updatedBy !== undefined && updatedBy !== null) {
919
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, updatedBy, "updated_by");
920
+ }
921
+ if (updatedByIn) {
922
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...updatedByIn].join(COLLECTION_FORMATS["csv"]), "updated_by__in");
923
+ }
924
+ if (website !== undefined && website !== null) {
925
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, website, "website");
926
+ }
927
+ if (websiteIn) {
928
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...websiteIn].join(COLLECTION_FORMATS["csv"]), "website__in");
929
+ }
930
+ if (zip !== undefined && zip !== null) {
931
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, zip, "zip");
932
+ }
933
+ if (zipIn) {
934
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...zipIn].join(COLLECTION_FORMATS["csv"]), "zip__in");
935
+ }
936
+ if (zohoAccountId !== undefined && zohoAccountId !== null) {
937
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, zohoAccountId, "zoho_account_id");
938
+ }
939
+ if (zohoAccountIdIn) {
940
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...zohoAccountIdIn].join(COLLECTION_FORMATS["csv"]), "zoho_account_id__in");
941
+ }
942
+ let localVarHeaders = this.defaultHeaders;
943
+ let localVarCredential;
944
+ // authentication (cookieAuth) required
945
+ localVarCredential = this.configuration.lookupCredential("cookieAuth");
946
+ if (localVarCredential) {
947
+ }
948
+ // authentication (jwtAuth) required
949
+ localVarCredential = this.configuration.lookupCredential("jwtAuth");
950
+ if (localVarCredential) {
951
+ localVarHeaders = localVarHeaders.set("Authorization", "Bearer " + localVarCredential);
952
+ }
953
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
954
+ if (localVarHttpHeaderAcceptSelected === undefined) {
955
+ // to determine the Accept header
956
+ const httpHeaderAccepts = ["application/json"];
957
+ localVarHttpHeaderAcceptSelected =
958
+ this.configuration.selectHeaderAccept(httpHeaderAccepts);
959
+ }
960
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
961
+ localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
962
+ }
963
+ let localVarHttpContext = options && options.context;
964
+ if (localVarHttpContext === undefined) {
965
+ localVarHttpContext = new HttpContext();
966
+ }
967
+ let localVarTransferCache = options && options.transferCache;
968
+ if (localVarTransferCache === undefined) {
969
+ localVarTransferCache = true;
970
+ }
971
+ let responseType_ = "json";
972
+ if (localVarHttpHeaderAcceptSelected) {
973
+ if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
974
+ responseType_ = "text";
975
+ }
976
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
977
+ responseType_ = "json";
978
+ }
979
+ else {
980
+ responseType_ = "blob";
981
+ }
982
+ }
983
+ let localVarPath = `/api/v1/clients/with-stats/`;
984
+ return this.httpClient.request("get", `${this.configuration.basePath}${localVarPath}`, {
985
+ context: localVarHttpContext,
986
+ params: localVarQueryParameters,
987
+ responseType: responseType_,
988
+ withCredentials: this.configuration.withCredentials,
989
+ headers: localVarHeaders,
990
+ observe: observe,
991
+ transferCache: localVarTransferCache,
992
+ reportProgress: reportProgress,
993
+ });
994
+ }
995
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClientsApiService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
996
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClientsApiService, providedIn: "root" });
997
+ }
998
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClientsApiService, decorators: [{
999
+ type: Injectable,
1000
+ args: [{
1001
+ providedIn: "root",
1002
+ }]
1003
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
1004
+ type: Optional
1005
+ }, {
1006
+ type: Inject,
1007
+ args: [BASE_PATH]
1008
+ }] }, { type: i2.Configuration, decorators: [{
1009
+ type: Optional
1010
+ }] }] });
1011
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50cy1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9jbGllbnRzLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBRUwsV0FBVyxFQUNYLFVBQVUsRUFJVixXQUFXLEdBQ1osTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFnQ3RELGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQVlqRCxNQUFNLE9BQU8saUJBQWlCO0lBT2hCO0lBTkYsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNqQixjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNuQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUNwQyxPQUFPLENBQXFCO0lBRW5DLFlBQ1ksVUFBc0IsRUFDRCxRQUEyQixFQUM5QyxhQUE0QjtRQUY5QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBSWhDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDckMsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4RSxJ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QztZQUN6QixDQUFDO2lCQUFNLElBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsRUFDL0QsQ0FBQztnQkFDRCxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsNkJBQTZCLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FDNUIsS0FBSyxFQUNMLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEVBQy9DO1lBQ0UsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUMvQixDQUNGLENBQUM7SUFDSixDQUFDO3dHQXo2RFUsaUJBQWlCLDRDQVFOLFNBQVM7NEdBUnBCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVM7OzBCQUM1QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWxtYXIgQXBpXG4gKlxuICpcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwSGVhZGVycyxcbiAgSHR0cFBhcmFtcyxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBQYXJhbWV0ZXJDb2RlYyxcbiAgSHR0cENvbnRleHQsXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjIH0gZnJvbSBcIi4uL2VuY29kZXJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBDbGllbnREdG8gfSBmcm9tIFwiLi4vbW9kZWwvY2xpZW50LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQ2xpZW50TW9udGhTdGF0c0R0byB9IGZyb20gXCIuLi9tb2RlbC9jbGllbnQtbW9udGgtc3RhdHMuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBDbGllbnRTdGF0c0R0byB9IGZyb20gXCIuLi9tb2RlbC9jbGllbnQtc3RhdHMuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBDbGllbnRzTGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvY2xpZW50cy1saXN0LWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQ2xpZW50c1JldHJpZXZlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9jbGllbnRzLXJldHJpZXZlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQ2xpZW50c1dpdGhNb250aFN0YXRzUmV0cmlldmVFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL2NsaWVudHMtd2l0aC1tb250aC1zdGF0cy1yZXRyaWV2ZS1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IENsaWVudHNXaXRoU3RhdHNSZXRyaWV2ZUVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvY2xpZW50cy13aXRoLXN0YXRzLXJldHJpZXZlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwMUR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwMS5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDREdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDQuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA1RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDA1LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNkR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwNi5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MTVEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MTUuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNTAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNTAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnaW5hdGVkQ2xpZW50TGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9wYWdpbmF0ZWQtY2xpZW50LWxpc3QuZHRvXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gZnJvbSBcIi4uL3ZhcmlhYmxlc1wiO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQge1xuICBDbGllbnRzQXBpU2VydmljZUludGVyZmFjZSxcbiAgQ2xpZW50c0xpc3RSZXF1ZXN0UGFyYW1zLFxuICBDbGllbnRzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICBDbGllbnRzV2l0aE1vbnRoU3RhdHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gIENsaWVudHNXaXRoU3RhdHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG59IGZyb20gXCIuL2NsaWVudHMtYXBpLnNlcnZpY2VJbnRlcmZhY2VcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgQ2xpZW50c0FwaVNlcnZpY2UgaW1wbGVtZW50cyBDbGllbnRzQXBpU2VydmljZUludGVyZmFjZSB7XG4gIHByb3RlY3RlZCBiYXNlUGF0aCA9IFwiXCI7XG4gIHB1YmxpYyBkZWZhdWx0SGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICBwdWJsaWMgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG4gIHB1YmxpYyBlbmNvZGVyOiBIdHRwUGFyYW1ldGVyQ29kZWM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChCQVNFX1BBVEgpIGJhc2VQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICBAT3B0aW9uYWwoKSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uLFxuICApIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IGZpcnN0QmFzZVBhdGggPSBBcnJheS5pc0FycmF5KGJhc2VQYXRoKSA/IGJhc2VQYXRoWzBdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGZpcnN0QmFzZVBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJhc2VQYXRoID0gZmlyc3RCYXNlUGF0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBiYXNlUGF0aCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBiYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGg7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICB9XG4gICAgdGhpcy5lbmNvZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmVuY29kZXIgfHwgbmV3IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYygpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtcyhcbiAgICBodHRwUGFyYW1zOiBIdHRwUGFyYW1zLFxuICAgIHZhbHVlOiBhbnksXG4gICAga2V5Pzogc3RyaW5nLFxuICApOiBIdHRwUGFyYW1zIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSwga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICBodHRwUGFyYW1zOiBIdHRwUGFyYW1zLFxuICAgIHZhbHVlPzogYW55LFxuICAgIGtleT86IHN0cmluZyxcbiAgKTogSHR0cFBhcmFtcyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBodHRwUGFyYW1zO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAodmFsdWUgYXMgYW55W10pLmZvckVhY2goXG4gICAgICAgICAgKGVsZW0pID0+XG4gICAgICAgICAgICAoaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIGVsZW0sIGtleSkpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgKHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBEYXRlXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChcbiAgICAgICAgICAoaykgPT5cbiAgICAgICAgICAgIChodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoXG4gICAgICAgICAgICAgIGh0dHBQYXJhbXMsXG4gICAgICAgICAgICAgIHZhbHVlW2tdLFxuICAgICAgICAgICAgICBrZXkgIT0gbnVsbCA/IGAke2tleX0uJHtrfWAgOiBrLFxuICAgICAgICAgICAgKSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgbm90IG9iamVjdCBvciBhcnJheVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogVmlldyBzZXQgQVBJIGZvciBDbGllbnQgbW9kZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgY2xpZW50c0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBDbGllbnRzTGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxQYWdpbmF0ZWRDbGllbnRMaXN0RHRvPjtcbiAgcHVibGljIGNsaWVudHNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogQ2xpZW50c0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdpbmF0ZWRDbGllbnRMaXN0RHRvPj47XG4gIHB1YmxpYyBjbGllbnRzTGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IENsaWVudHNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJldmVudHNcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFBhZ2luYXRlZENsaWVudExpc3REdG8+PjtcbiAgcHVibGljIGNsaWVudHNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogQ2xpZW50c0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYWNjb3VudE1hbmFnZXIgPSByZXF1ZXN0UGFyYW1ldGVycz8uYWNjb3VudE1hbmFnZXI7XG4gICAgY29uc3QgYWNjb3VudE1hbmFnZXJJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hY2NvdW50TWFuYWdlckluO1xuICAgIGNvbnN0IGFkZHJlc3MxID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFkZHJlc3MxO1xuICAgIGNvbnN0IGFkZHJlc3MxSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYWRkcmVzczFJbjtcbiAgICBjb25zdCBhZGRyZXNzMiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hZGRyZXNzMjtcbiAgICBjb25zdCBhZGRyZXNzMkluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFkZHJlc3MySW47XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MxID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdBZGRyZXNzMTtcbiAgICBjb25zdCBiaWxsaW5nQWRkcmVzczFJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nQWRkcmVzczFJbjtcbiAgICBjb25zdCBiaWxsaW5nQWRkcmVzczIgPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ0FkZHJlc3MyO1xuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzMkluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdBZGRyZXNzMkluO1xuICAgIGNvbnN0IGJpbGxpbmdDaXR5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdDaXR5O1xuICAgIGNvbnN0IGJpbGxpbmdDaXR5SW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ0NpdHlJbjtcbiAgICBjb25zdCBiaWxsaW5nQ291bnRyeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nQ291bnRyeTtcbiAgICBjb25zdCBiaWxsaW5nQ291bnRyeUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdDb3VudHJ5SW47XG4gICAgY29uc3QgYmlsbGluZ01ldGhvZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nTWV0aG9kO1xuICAgIGNvbnN0IGJpbGxpbmdNZXRob2RJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nTWV0aG9kSW47XG4gICAgY29uc3QgYmlsbGluZ05vdGVzID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdOb3RlcztcbiAgICBjb25zdCBiaWxsaW5nTm90ZXNDb250YWlucyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nTm90ZXNDb250YWlucztcbiAgICBjb25zdCBiaWxsaW5nTm90ZXNJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nTm90ZXNJbjtcbiAgICBjb25zdCBiaWxsaW5nU3RhdGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ1N0YXRlO1xuICAgIGNvbnN0IGJpbGxpbmdTdGF0ZUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdTdGF0ZUluO1xuICAgIGNvbnN0IGJpbGxpbmdaaXAgPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ1ppcDtcbiAgICBjb25zdCBiaWxsaW5nWmlwSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ1ppcEluO1xuICAgIGNvbnN0IGNpdHkgPSByZXF1ZXN0UGFyYW1ldGVycz8uY2l0eTtcbiAgICBjb25zdCBjaXR5SW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uY2l0eUluO1xuICAgIGNvbnN0IGNvbnRyYWN0VW50aWxHdGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29udHJhY3RVbnRpbEd0ZTtcbiAgICBjb25zdCBjb250cmFjdFVudGlsTHRlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvbnRyYWN0VW50aWxMdGU7XG4gICAgY29uc3QgY291bnRyeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb3VudHJ5O1xuICAgIGNvbnN0IGNvdW50cnlJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb3VudHJ5SW47XG4gICAgY29uc3QgY3JlYXRlZEJ5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNyZWF0ZWRCeTtcbiAgICBjb25zdCBjcmVhdGVkQnlJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jcmVhdGVkQnlJbjtcbiAgICBjb25zdCBpZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pZDtcbiAgICBjb25zdCBpZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkSW47XG4gICAgY29uc3QgaXNCaWxsYWJsZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pc0JpbGxhYmxlO1xuICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgIGNvbnN0IG5vdGVzID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm5vdGVzO1xuICAgIGNvbnN0IG5vdGVzQ29udGFpbnMgPSByZXF1ZXN0UGFyYW1ldGVycz8ubm90ZXNDb250YWlucztcbiAgICBjb25zdCBub3Rlc0luID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm5vdGVzSW47XG4gICAgY29uc3Qgb2Zmc2V0ID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9mZnNldDtcbiAgICBjb25zdCBvcmRlcmluZyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vcmRlcmluZztcbiAgICBjb25zdCBwYXltZW50UmVjaXBpZW50TmFtZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5wYXltZW50UmVjaXBpZW50TmFtZTtcbiAgICBjb25zdCBwYXltZW50UmVjaXBpZW50TmFtZUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBheW1lbnRSZWNpcGllbnROYW1lSW47XG4gICAgY29uc3QgcWJDbGllbnRJZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5xYkNsaWVudElkO1xuICAgIGNvbnN0IHFiQ2xpZW50SWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5xYkNsaWVudElkSW47XG4gICAgY29uc3Qgc2VhcmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNlYXJjaDtcbiAgICBjb25zdCBzdGF0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdGF0ZTtcbiAgICBjb25zdCBzdGF0ZUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXRlSW47XG4gICAgY29uc3Qgc3RhdHVzID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXR1cztcbiAgICBjb25zdCBzdGF0dXNJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdGF0dXNJbjtcbiAgICBjb25zdCB0aW1lTGltaXRQZXJNb250aEd0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy50aW1lTGltaXRQZXJNb250aEd0ZTtcbiAgICBjb25zdCB0aW1lTGltaXRQZXJNb250aEx0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy50aW1lTGltaXRQZXJNb250aEx0ZTtcbiAgICBjb25zdCB1cGRhdGVkQnkgPSByZXF1ZXN0UGFyYW1ldGVycz8udXBkYXRlZEJ5O1xuICAgIGNvbnN0IHVwZGF0ZWRCeUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVwZGF0ZWRCeUluO1xuICAgIGNvbnN0IHdlYnNpdGUgPSByZXF1ZXN0UGFyYW1ldGVycz8ud2Vic2l0ZTtcbiAgICBjb25zdCB3ZWJzaXRlSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8ud2Vic2l0ZUluO1xuICAgIGNvbnN0IHppcCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy56aXA7XG4gICAgY29uc3QgemlwSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uemlwSW47XG4gICAgY29uc3Qgem9ob0FjY291bnRJZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy56b2hvQWNjb3VudElkO1xuICAgIGNvbnN0IHpvaG9BY2NvdW50SWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy56b2hvQWNjb3VudElkSW47XG5cbiAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXI6IHRoaXMuZW5jb2RlciB9KTtcbiAgICBpZiAoYWNjb3VudE1hbmFnZXIgIT09IHVuZGVmaW5lZCAmJiBhY2NvdW50TWFuYWdlciAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YWNjb3VudE1hbmFnZXIsXG4gICAgICAgIFwiYWNjb3VudF9tYW5hZ2VyXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudE1hbmFnZXJJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5hY2NvdW50TWFuYWdlckluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYWNjb3VudF9tYW5hZ2VyX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFkZHJlc3MxICE9PSB1bmRlZmluZWQgJiYgYWRkcmVzczEgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmFkZHJlc3MxLFxuICAgICAgICBcImFkZHJlc3MxXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWRkcmVzczFJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5hZGRyZXNzMUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYWRkcmVzczFfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWRkcmVzczIgIT09IHVuZGVmaW5lZCAmJiBhZGRyZXNzMiAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YWRkcmVzczIsXG4gICAgICAgIFwiYWRkcmVzczJcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhZGRyZXNzMkluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmFkZHJlc3MySW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJhZGRyZXNzMl9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nQWRkcmVzczEgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nQWRkcmVzczEgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJpbGxpbmdBZGRyZXNzMSxcbiAgICAgICAgXCJiaWxsaW5nX2FkZHJlc3MxXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ0FkZHJlc3MxSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uYmlsbGluZ0FkZHJlc3MxSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJiaWxsaW5nX2FkZHJlc3MxX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdBZGRyZXNzMiAhPT0gdW5kZWZpbmVkICYmIGJpbGxpbmdBZGRyZXNzMiAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ0FkZHJlc3MyLFxuICAgICAgICBcImJpbGxpbmdfYWRkcmVzczJcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nQWRkcmVzczJJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nQWRkcmVzczJJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJpbGxpbmdfYWRkcmVzczJfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ0NpdHkgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nQ2l0eSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ0NpdHksXG4gICAgICAgIFwiYmlsbGluZ19jaXR5XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ0NpdHlJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nQ2l0eUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYmlsbGluZ19jaXR5X19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdDb3VudHJ5ICE9PSB1bmRlZmluZWQgJiYgYmlsbGluZ0NvdW50cnkgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJpbGxpbmdDb3VudHJ5LFxuICAgICAgICBcImJpbGxpbmdfY291bnRyeVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdDb3VudHJ5SW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uYmlsbGluZ0NvdW50cnlJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJpbGxpbmdfY291bnRyeV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nTWV0aG9kICE9PSB1bmRlZmluZWQgJiYgYmlsbGluZ01ldGhvZCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ01ldGhvZCxcbiAgICAgICAgXCJiaWxsaW5nX21ldGhvZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdNZXRob2RJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nTWV0aG9kSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJiaWxsaW5nX21ldGhvZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nTm90ZXMgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nTm90ZXMgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJpbGxpbmdOb3RlcyxcbiAgICAgICAgXCJiaWxsaW5nX25vdGVzXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ05vdGVzQ29udGFpbnMgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nTm90ZXNDb250YWlucyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ05vdGVzQ29udGFpbnMsXG4gICAgICAgIFwiYmlsbGluZ19ub3Rlc19fY29udGFpbnNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nTm90ZXNJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nTm90ZXNJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJpbGxpbmdfbm90ZXNfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ1N0YXRlICE9PSB1bmRlZmluZWQgJiYgYmlsbGluZ1N0YXRlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5iaWxsaW5nU3RhdGUsXG4gICAgICAgIFwiYmlsbGluZ19zdGF0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdTdGF0ZUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJpbGxpbmdTdGF0ZUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYmlsbGluZ19zdGF0ZV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nWmlwICE9PSB1bmRlZmluZWQgJiYgYmlsbGluZ1ppcCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ1ppcCxcbiAgICAgICAgXCJiaWxsaW5nX3ppcFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdaaXBJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nWmlwSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJiaWxsaW5nX3ppcF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjaXR5ICE9PSB1bmRlZmluZWQgJiYgY2l0eSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+Y2l0eSxcbiAgICAgICAgXCJjaXR5XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY2l0eUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmNpdHlJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImNpdHlfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY29udHJhY3RVbnRpbEd0ZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRyYWN0VW50aWxHdGUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmNvbnRyYWN0VW50aWxHdGUsXG4gICAgICAgIFwiY29udHJhY3RfdW50aWxfX2d0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbnRyYWN0VW50aWxMdGUgIT09IHVuZGVmaW5lZCAmJiBjb250cmFjdFVudGlsTHRlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5jb250cmFjdFVudGlsTHRlLFxuICAgICAgICBcImNvbnRyYWN0X3VudGlsX19sdGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb3VudHJ5ICE9PSB1bmRlZmluZWQgJiYgY291bnRyeSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+Y291bnRyeSxcbiAgICAgICAgXCJjb3VudHJ5XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY291bnRyeUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmNvdW50cnlJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImNvdW50cnlfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZEJ5ICE9PSB1bmRlZmluZWQgJiYgY3JlYXRlZEJ5ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5jcmVhdGVkQnksXG4gICAgICAgIFwiY3JlYXRlZF9ieVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZWRCeUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmNyZWF0ZWRCeUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiY3JlYXRlZF9ieV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIGlkICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5pZCxcbiAgICAgICAgXCJpZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uaWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImlkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzQmlsbGFibGUgIT09IHVuZGVmaW5lZCAmJiBpc0JpbGxhYmxlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5pc0JpbGxhYmxlLFxuICAgICAgICBcImlzX2JpbGxhYmxlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBsaW1pdCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+bGltaXQsXG4gICAgICAgIFwibGltaXRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChub3RlcyAhPT0gdW5kZWZpbmVkICYmIG5vdGVzICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5ub3RlcyxcbiAgICAgICAgXCJub3Rlc1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG5vdGVzQ29udGFpbnMgIT09IHVuZGVmaW5lZCAmJiBub3Rlc0NvbnRhaW5zICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5ub3Rlc0NvbnRhaW5zLFxuICAgICAgICBcIm5vdGVzX19jb250YWluc1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG5vdGVzSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4ubm90ZXNJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcIm5vdGVzX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+b2Zmc2V0LFxuICAgICAgICBcIm9mZnNldFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9yZGVyaW5nICE9PSB1bmRlZmluZWQgJiYgb3JkZXJpbmcgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55Pm9yZGVyaW5nLFxuICAgICAgICBcIm9yZGVyaW5nXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocGF5bWVudFJlY2lwaWVudE5hbWUgIT09IHVuZGVmaW5lZCAmJiBwYXltZW50UmVjaXBpZW50TmFtZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+cGF5bWVudFJlY2lwaWVudE5hbWUsXG4gICAgICAgIFwicGF5bWVudF9yZWNpcGllbnRfbmFtZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHBheW1lbnRSZWNpcGllbnROYW1lSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4ucGF5bWVudFJlY2lwaWVudE5hbWVJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInBheW1lbnRfcmVjaXBpZW50X25hbWVfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocWJDbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHFiQ2xpZW50SWQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnFiQ2xpZW50SWQsXG4gICAgICAgIFwicWJfY2xpZW50X2lkXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocWJDbGllbnRJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnFiQ2xpZW50SWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInFiX2NsaWVudF9pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzZWFyY2ggIT09IHVuZGVmaW5lZCAmJiBzZWFyY2ggIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnNlYXJjaCxcbiAgICAgICAgXCJzZWFyY2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5zdGF0ZSxcbiAgICAgICAgXCJzdGF0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uc3RhdGVJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInN0YXRlX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c3RhdHVzLFxuICAgICAgICBcInN0YXR1c1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1c0luKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnN0YXR1c0luXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwic3RhdHVzX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRpbWVMaW1pdFBlck1vbnRoR3RlICE9PSB1bmRlZmluZWQgJiYgdGltZUxpbWl0UGVyTW9udGhHdGUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnRpbWVMaW1pdFBlck1vbnRoR3RlLFxuICAgICAgICBcInRpbWVfbGltaXRfcGVyX21vbnRoX19ndGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aW1lTGltaXRQZXJNb250aEx0ZSAhPT0gdW5kZWZpbmVkICYmIHRpbWVMaW1pdFBlck1vbnRoTHRlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT50aW1lTGltaXRQZXJNb250aEx0ZSxcbiAgICAgICAgXCJ0aW1lX2xpbWl0X3Blcl9tb250aF9fbHRlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZEJ5ICE9PSB1bmRlZmluZWQgJiYgdXBkYXRlZEJ5ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT51cGRhdGVkQnksXG4gICAgICAgIFwidXBkYXRlZF9ieVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWRCeUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnVwZGF0ZWRCeUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwidXBkYXRlZF9ieV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh3ZWJzaXRlICE9PSB1bmRlZmluZWQgJiYgd2Vic2l0ZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+d2Vic2l0ZSxcbiAgICAgICAgXCJ3ZWJzaXRlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAod2Vic2l0ZUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLndlYnNpdGVJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcIndlYnNpdGVfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoemlwICE9PSB1bmRlZmluZWQgJiYgemlwICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT56aXAsXG4gICAgICAgIFwiemlwXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoemlwSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uemlwSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ6aXBfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoem9ob0FjY291bnRJZCAhPT0gdW5kZWZpbmVkICYmIHpvaG9BY2NvdW50SWQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnpvaG9BY2NvdW50SWQsXG4gICAgICAgIFwiem9ob19hY2NvdW50X2lkXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoem9ob0FjY291bnRJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnpvaG9BY2NvdW50SWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInpvaG9fYWNjb3VudF9pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2NsaWVudHMvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnaW5hdGVkQ2xpZW50TGlzdER0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmlldyBzZXQgQVBJIGZvciBDbGllbnQgbW9kZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgY2xpZW50c1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogQ2xpZW50c1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPENsaWVudER0bz47XG4gIHB1YmxpYyBjbGllbnRzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBDbGllbnRzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxDbGllbnREdG8+PjtcbiAgcHVibGljIGNsaWVudHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IENsaWVudHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxDbGllbnREdG8+PjtcbiAgcHVibGljIGNsaWVudHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IENsaWVudHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBpZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pZDtcbiAgICBpZiAoaWQgPT09IG51bGwgfHwgaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlJlcXVpcmVkIHBhcmFtZXRlciBpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGNsaWVudHNSZXRyaWV2ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2NsaWVudHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oeyBuYW1lOiBcImlkXCIsIHZhbHVlOiBpZCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcIm51bWJlclwiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWQgfSl9L2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PENsaWVudER0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNsaWVudHMgd2l0aCBtb250aCBzdGF0cy5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBjbGllbnRzV2l0aE1vbnRoU3RhdHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IENsaWVudHNXaXRoTW9udGhTdGF0c1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPENsaWVudE1vbnRoU3RhdHNEdG8+O1xuICBwdWJsaWMgY2xpZW50c1dpdGhNb250aFN0YXRzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBDbGllbnRzV2l0aE1vbnRoU3RhdHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwicmVzcG9uc2VcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPENsaWVudE1vbnRoU3RhdHNEdG8+PjtcbiAgcHVibGljIGNsaWVudHNXaXRoTW9udGhTdGF0c1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogQ2xpZW50c1dpdGhNb250aFN0YXRzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8Q2xpZW50TW9udGhTdGF0c0R0bz4+O1xuICBwdWJsaWMgY2xpZW50c1dpdGhNb250aFN0YXRzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBDbGllbnRzV2l0aE1vbnRoU3RhdHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBhY2NvdW50TWFuYWdlciA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hY2NvdW50TWFuYWdlcjtcbiAgICBjb25zdCBhY2NvdW50TWFuYWdlckluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFjY291bnRNYW5hZ2VySW47XG4gICAgY29uc3QgYWRkcmVzczEgPSByZXF1ZXN0UGFyYW1ldGVycz8uYWRkcmVzczE7XG4gICAgY29uc3QgYWRkcmVzczFJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hZGRyZXNzMUluO1xuICAgIGNvbnN0IGFkZHJlc3MyID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFkZHJlc3MyO1xuICAgIGNvbnN0IGFkZHJlc3MySW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYWRkcmVzczJJbjtcbiAgICBjb25zdCBiaWxsaW5nQWRkcmVzczEgPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ0FkZHJlc3MxO1xuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzMUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdBZGRyZXNzMUluO1xuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzMiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nQWRkcmVzczI7XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MySW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ0FkZHJlc3MySW47XG4gICAgY29uc3QgYmlsbGluZ0NpdHkgPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ0NpdHk7XG4gICAgY29uc3QgYmlsbGluZ0NpdHlJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nQ2l0eUluO1xuICAgIGNvbnN0IGJpbGxpbmdDb3VudHJ5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdDb3VudHJ5O1xuICAgIGNvbnN0IGJpbGxpbmdDb3VudHJ5SW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ0NvdW50cnlJbjtcbiAgICBjb25zdCBiaWxsaW5nTWV0aG9kID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdNZXRob2Q7XG4gICAgY29uc3QgYmlsbGluZ01ldGhvZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdNZXRob2RJbjtcbiAgICBjb25zdCBiaWxsaW5nTm90ZXMgPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ05vdGVzO1xuICAgIGNvbnN0IGJpbGxpbmdOb3Rlc0NvbnRhaW5zID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdOb3Rlc0NvbnRhaW5zO1xuICAgIGNvbnN0IGJpbGxpbmdOb3Rlc0luID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdOb3Rlc0luO1xuICAgIGNvbnN0IGJpbGxpbmdTdGF0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nU3RhdGU7XG4gICAgY29uc3QgYmlsbGluZ1N0YXRlSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ1N0YXRlSW47XG4gICAgY29uc3QgYmlsbGluZ1ppcCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nWmlwO1xuICAgIGNvbnN0IGJpbGxpbmdaaXBJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nWmlwSW47XG4gICAgY29uc3QgY2l0eSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jaXR5O1xuICAgIGNvbnN0IGNpdHlJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jaXR5SW47XG4gICAgY29uc3QgY29udHJhY3RVbnRpbEd0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb250cmFjdFVudGlsR3RlO1xuICAgIGNvbnN0IGNvbnRyYWN0VW50aWxMdGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uY29udHJhY3RVbnRpbEx0ZTtcbiAgICBjb25zdCBjb3VudHJ5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvdW50cnk7XG4gICAgY29uc3QgY291bnRyeUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvdW50cnlJbjtcbiAgICBjb25zdCBjcmVhdGVkQnkgPSByZXF1ZXN0UGFyYW1ldGVycz8uY3JlYXRlZEJ5O1xuICAgIGNvbnN0IGNyZWF0ZWRCeUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNyZWF0ZWRCeUluO1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkO1xuICAgIGNvbnN0IGlkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uaWRJbjtcbiAgICBjb25zdCBpc0JpbGxhYmxlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlzQmlsbGFibGU7XG4gICAgY29uc3Qgbm90ZXMgPSByZXF1ZXN0UGFyYW1ldGVycz8ubm90ZXM7XG4gICAgY29uc3Qgbm90ZXNDb250YWlucyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5ub3Rlc0NvbnRhaW5zO1xuICAgIGNvbnN0IG5vdGVzSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8ubm90ZXNJbjtcbiAgICBjb25zdCBvcmRlcmluZyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vcmRlcmluZztcbiAgICBjb25zdCBwYXltZW50UmVjaXBpZW50TmFtZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5wYXltZW50UmVjaXBpZW50TmFtZTtcbiAgICBjb25zdCBwYXltZW50UmVjaXBpZW50TmFtZUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBheW1lbnRSZWNpcGllbnROYW1lSW47XG4gICAgY29uc3QgcWJDbGllbnRJZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5xYkNsaWVudElkO1xuICAgIGNvbnN0IHFiQ2xpZW50SWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5xYkNsaWVudElkSW47XG4gICAgY29uc3Qgc2VhcmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNlYXJjaDtcbiAgICBjb25zdCBzdGF0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdGF0ZTtcbiAgICBjb25zdCBzdGF0ZUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXRlSW47XG4gICAgY29uc3Qgc3RhdHVzID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXR1cztcbiAgICBjb25zdCBzdGF0dXNJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdGF0dXNJbjtcbiAgICBjb25zdCB0aW1lTGltaXRQZXJNb250aEd0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy50aW1lTGltaXRQZXJNb250aEd0ZTtcbiAgICBjb25zdCB0aW1lTGltaXRQZXJNb250aEx0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy50aW1lTGltaXRQZXJNb250aEx0ZTtcbiAgICBjb25zdCB1cGRhdGVkQnkgPSByZXF1ZXN0UGFyYW1ldGVycz8udXBkYXRlZEJ5O1xuICAgIGNvbnN0IHVwZGF0ZWRCeUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVwZGF0ZWRCeUluO1xuICAgIGNvbnN0IHdlYnNpdGUgPSByZXF1ZXN0UGFyYW1ldGVycz8ud2Vic2l0ZTtcbiAgICBjb25zdCB3ZWJzaXRlSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8ud2Vic2l0ZUluO1xuICAgIGNvbnN0IHppcCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy56aXA7XG4gICAgY29uc3QgemlwSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uemlwSW47XG4gICAgY29uc3Qgem9ob0FjY291bnRJZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy56b2hvQWNjb3VudElkO1xuICAgIGNvbnN0IHpvaG9BY2NvdW50SWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy56b2hvQWNjb3VudElkSW47XG5cbiAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXI6IHRoaXMuZW5jb2RlciB9KTtcbiAgICBpZiAoYWNjb3VudE1hbmFnZXIgIT09IHVuZGVmaW5lZCAmJiBhY2NvdW50TWFuYWdlciAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YWNjb3VudE1hbmFnZXIsXG4gICAgICAgIFwiYWNjb3VudF9tYW5hZ2VyXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWNjb3VudE1hbmFnZXJJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5hY2NvdW50TWFuYWdlckluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYWNjb3VudF9tYW5hZ2VyX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFkZHJlc3MxICE9PSB1bmRlZmluZWQgJiYgYWRkcmVzczEgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmFkZHJlc3MxLFxuICAgICAgICBcImFkZHJlc3MxXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWRkcmVzczFJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5hZGRyZXNzMUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYWRkcmVzczFfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWRkcmVzczIgIT09IHVuZGVmaW5lZCAmJiBhZGRyZXNzMiAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YWRkcmVzczIsXG4gICAgICAgIFwiYWRkcmVzczJcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhZGRyZXNzMkluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmFkZHJlc3MySW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJhZGRyZXNzMl9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nQWRkcmVzczEgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nQWRkcmVzczEgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJpbGxpbmdBZGRyZXNzMSxcbiAgICAgICAgXCJiaWxsaW5nX2FkZHJlc3MxXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ0FkZHJlc3MxSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uYmlsbGluZ0FkZHJlc3MxSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJiaWxsaW5nX2FkZHJlc3MxX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdBZGRyZXNzMiAhPT0gdW5kZWZpbmVkICYmIGJpbGxpbmdBZGRyZXNzMiAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ0FkZHJlc3MyLFxuICAgICAgICBcImJpbGxpbmdfYWRkcmVzczJcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nQWRkcmVzczJJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nQWRkcmVzczJJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJpbGxpbmdfYWRkcmVzczJfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ0NpdHkgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nQ2l0eSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ0NpdHksXG4gICAgICAgIFwiYmlsbGluZ19jaXR5XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ0NpdHlJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nQ2l0eUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYmlsbGluZ19jaXR5X19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdDb3VudHJ5ICE9PSB1bmRlZmluZWQgJiYgYmlsbGluZ0NvdW50cnkgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJpbGxpbmdDb3VudHJ5LFxuICAgICAgICBcImJpbGxpbmdfY291bnRyeVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdDb3VudHJ5SW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uYmlsbGluZ0NvdW50cnlJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJpbGxpbmdfY291bnRyeV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nTWV0aG9kICE9PSB1bmRlZmluZWQgJiYgYmlsbGluZ01ldGhvZCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ01ldGhvZCxcbiAgICAgICAgXCJiaWxsaW5nX21ldGhvZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdNZXRob2RJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nTWV0aG9kSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJiaWxsaW5nX21ldGhvZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nTm90ZXMgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nTm90ZXMgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJpbGxpbmdOb3RlcyxcbiAgICAgICAgXCJiaWxsaW5nX25vdGVzXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ05vdGVzQ29udGFpbnMgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nTm90ZXNDb250YWlucyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ05vdGVzQ29udGFpbnMsXG4gICAgICAgIFwiYmlsbGluZ19ub3Rlc19fY29udGFpbnNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nTm90ZXNJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nTm90ZXNJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJpbGxpbmdfbm90ZXNfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ1N0YXRlICE9PSB1bmRlZmluZWQgJiYgYmlsbGluZ1N0YXRlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5iaWxsaW5nU3RhdGUsXG4gICAgICAgIFwiYmlsbGluZ19zdGF0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdTdGF0ZUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJpbGxpbmdTdGF0ZUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYmlsbGluZ19zdGF0ZV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nWmlwICE9PSB1bmRlZmluZWQgJiYgYmlsbGluZ1ppcCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ1ppcCxcbiAgICAgICAgXCJiaWxsaW5nX3ppcFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdaaXBJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nWmlwSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJiaWxsaW5nX3ppcF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjaXR5ICE9PSB1bmRlZmluZWQgJiYgY2l0eSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+Y2l0eSxcbiAgICAgICAgXCJjaXR5XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY2l0eUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmNpdHlJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImNpdHlfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY29udHJhY3RVbnRpbEd0ZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRyYWN0VW50aWxHdGUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmNvbnRyYWN0VW50aWxHdGUsXG4gICAgICAgIFwiY29udHJhY3RfdW50aWxfX2d0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbnRyYWN0VW50aWxMdGUgIT09IHVuZGVmaW5lZCAmJiBjb250cmFjdFVudGlsTHRlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5jb250cmFjdFVudGlsTHRlLFxuICAgICAgICBcImNvbnRyYWN0X3VudGlsX19sdGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb3VudHJ5ICE9PSB1bmRlZmluZWQgJiYgY291bnRyeSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+Y291bnRyeSxcbiAgICAgICAgXCJjb3VudHJ5XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY291bnRyeUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmNvdW50cnlJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImNvdW50cnlfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZEJ5ICE9PSB1bmRlZmluZWQgJiYgY3JlYXRlZEJ5ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5jcmVhdGVkQnksXG4gICAgICAgIFwiY3JlYXRlZF9ieVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZWRCeUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmNyZWF0ZWRCeUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiY3JlYXRlZF9ieV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIGlkICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5pZCxcbiAgICAgICAgXCJpZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uaWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImlkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzQmlsbGFibGUgIT09IHVuZGVmaW5lZCAmJiBpc0JpbGxhYmxlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5pc0JpbGxhYmxlLFxuICAgICAgICBcImlzX2JpbGxhYmxlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAobm90ZXMgIT09IHVuZGVmaW5lZCAmJiBub3RlcyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+bm90ZXMsXG4gICAgICAgIFwibm90ZXNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChub3Rlc0NvbnRhaW5zICE9PSB1bmRlZmluZWQgJiYgbm90ZXNDb250YWlucyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+bm90ZXNDb250YWlucyxcbiAgICAgICAgXCJub3Rlc19fY29udGFpbnNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChub3Rlc0luKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLm5vdGVzSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJub3Rlc19faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcmRlcmluZyAhPT0gdW5kZWZpbmVkICYmIG9yZGVyaW5nICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5vcmRlcmluZyxcbiAgICAgICAgXCJvcmRlcmluZ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHBheW1lbnRSZWNpcGllbnROYW1lICE9PSB1bmRlZmluZWQgJiYgcGF5bWVudFJlY2lwaWVudE5hbWUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnBheW1lbnRSZWNpcGllbnROYW1lLFxuICAgICAgICBcInBheW1lbnRfcmVjaXBpZW50X25hbWVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwYXltZW50UmVjaXBpZW50TmFtZUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnBheW1lbnRSZWNpcGllbnROYW1lSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJwYXltZW50X3JlY2lwaWVudF9uYW1lX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHFiQ2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBxYkNsaWVudElkICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5xYkNsaWVudElkLFxuICAgICAgICBcInFiX2NsaWVudF9pZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHFiQ2xpZW50SWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5xYkNsaWVudElkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJxYl9jbGllbnRfaWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc2VhcmNoICE9PSB1bmRlZmluZWQgJiYgc2VhcmNoICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5zZWFyY2gsXG4gICAgICAgIFwic2VhcmNoXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c3RhdGUsXG4gICAgICAgIFwic3RhdGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0ZUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnN0YXRlSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJzdGF0ZV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnN0YXR1cyxcbiAgICAgICAgXCJzdGF0dXNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXNJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5zdGF0dXNJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInN0YXR1c19faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aW1lTGltaXRQZXJNb250aEd0ZSAhPT0gdW5kZWZpbmVkICYmIHRpbWVMaW1pdFBlck1vbnRoR3RlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT50aW1lTGltaXRQZXJNb250aEd0ZSxcbiAgICAgICAgXCJ0aW1lX2xpbWl0X3Blcl9tb250aF9fZ3RlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGltZUxpbWl0UGVyTW9udGhMdGUgIT09IHVuZGVmaW5lZCAmJiB0aW1lTGltaXRQZXJNb250aEx0ZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+dGltZUxpbWl0UGVyTW9udGhMdGUsXG4gICAgICAgIFwidGltZV9saW1pdF9wZXJfbW9udGhfX2x0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWRCeSAhPT0gdW5kZWZpbmVkICYmIHVwZGF0ZWRCeSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+dXBkYXRlZEJ5LFxuICAgICAgICBcInVwZGF0ZWRfYnlcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh1cGRhdGVkQnlJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi51cGRhdGVkQnlJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInVwZGF0ZWRfYnlfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAod2Vic2l0ZSAhPT0gdW5kZWZpbmVkICYmIHdlYnNpdGUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PndlYnNpdGUsXG4gICAgICAgIFwid2Vic2l0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHdlYnNpdGVJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi53ZWJzaXRlSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ3ZWJzaXRlX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHppcCAhPT0gdW5kZWZpbmVkICYmIHppcCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+emlwLFxuICAgICAgICBcInppcFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHppcEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnppcEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiemlwX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHpvaG9BY2NvdW50SWQgIT09IHVuZGVmaW5lZCAmJiB6b2hvQWNjb3VudElkICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT56b2hvQWNjb3VudElkLFxuICAgICAgICBcInpvaG9fYWNjb3VudF9pZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHpvaG9BY2NvdW50SWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi56b2hvQWNjb3VudElkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ6b2hvX2FjY291bnRfaWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChjb29raWVBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiY29va2llQXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgfVxuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGp3dEF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJqd3RBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiLFxuICAgICAgICBcIkJlYXJlciBcIiArIGxvY2FsVmFyQ3JlZGVudGlhbCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1wiYXBwbGljYXRpb24vanNvblwiXTtcbiAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID1cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgfVxuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS9jbGllbnRzL3dpdGgtbW9udGgtc3RhdHMvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8Q2xpZW50TW9udGhTdGF0c0R0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNsaWVudHMgd2l0aCBzdGF0cy5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBjbGllbnRzV2l0aFN0YXRzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBDbGllbnRzV2l0aFN0YXRzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8Q2xpZW50U3RhdHNEdG8+O1xuICBwdWJsaWMgY2xpZW50c1dpdGhTdGF0c1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogQ2xpZW50c1dpdGhTdGF0c1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8Q2xpZW50U3RhdHNEdG8+PjtcbiAgcHVibGljIGNsaWVudHNXaXRoU3RhdHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IENsaWVudHNXaXRoU3RhdHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxDbGllbnRTdGF0c0R0bz4+O1xuICBwdWJsaWMgY2xpZW50c1dpdGhTdGF0c1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogQ2xpZW50c1dpdGhTdGF0c1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGFjY291bnRNYW5hZ2VyID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFjY291bnRNYW5hZ2VyO1xuICAgIGNvbnN0IGFjY291bnRNYW5hZ2VySW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYWNjb3VudE1hbmFnZXJJbjtcbiAgICBjb25zdCBhZGRyZXNzMSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hZGRyZXNzMTtcbiAgICBjb25zdCBhZGRyZXNzMUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmFkZHJlc3MxSW47XG4gICAgY29uc3QgYWRkcmVzczIgPSByZXF1ZXN0UGFyYW1ldGVycz8uYWRkcmVzczI7XG4gICAgY29uc3QgYWRkcmVzczJJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5hZGRyZXNzMkluO1xuICAgIGNvbnN0IGJpbGxpbmdBZGRyZXNzMSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nQWRkcmVzczE7XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MxSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ0FkZHJlc3MxSW47XG4gICAgY29uc3QgYmlsbGluZ0FkZHJlc3MyID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdBZGRyZXNzMjtcbiAgICBjb25zdCBiaWxsaW5nQWRkcmVzczJJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nQWRkcmVzczJJbjtcbiAgICBjb25zdCBiaWxsaW5nQ2l0eSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nQ2l0eTtcbiAgICBjb25zdCBiaWxsaW5nQ2l0eUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdDaXR5SW47XG4gICAgY29uc3QgYmlsbGluZ0NvdW50cnkgPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ0NvdW50cnk7XG4gICAgY29uc3QgYmlsbGluZ0NvdW50cnlJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nQ291bnRyeUluO1xuICAgIGNvbnN0IGJpbGxpbmdNZXRob2QgPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ01ldGhvZDtcbiAgICBjb25zdCBiaWxsaW5nTWV0aG9kSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ01ldGhvZEluO1xuICAgIGNvbnN0IGJpbGxpbmdOb3RlcyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nTm90ZXM7XG4gICAgY29uc3QgYmlsbGluZ05vdGVzQ29udGFpbnMgPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ05vdGVzQ29udGFpbnM7XG4gICAgY29uc3QgYmlsbGluZ05vdGVzSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYmlsbGluZ05vdGVzSW47XG4gICAgY29uc3QgYmlsbGluZ1N0YXRlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdTdGF0ZTtcbiAgICBjb25zdCBiaWxsaW5nU3RhdGVJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5iaWxsaW5nU3RhdGVJbjtcbiAgICBjb25zdCBiaWxsaW5nWmlwID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdaaXA7XG4gICAgY29uc3QgYmlsbGluZ1ppcEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJpbGxpbmdaaXBJbjtcbiAgICBjb25zdCBjaXR5ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNpdHk7XG4gICAgY29uc3QgY2l0eUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNpdHlJbjtcbiAgICBjb25zdCBjb250cmFjdFVudGlsR3RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LmNvbnRyYWN0VW50aWxHdGU7XG4gICAgY29uc3QgY29udHJhY3RVbnRpbEx0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jb250cmFjdFVudGlsTHRlO1xuICAgIGNvbnN0IGNvdW50cnkgPSByZXF1ZXN0UGFyYW1ldGVycz8uY291bnRyeTtcbiAgICBjb25zdCBjb3VudHJ5SW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uY291bnRyeUluO1xuICAgIGNvbnN0IGNyZWF0ZWRCeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5jcmVhdGVkQnk7XG4gICAgY29uc3QgY3JlYXRlZEJ5SW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uY3JlYXRlZEJ5SW47XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgY29uc3QgaWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pZEluO1xuICAgIGNvbnN0IGlzQmlsbGFibGUgPSByZXF1ZXN0UGFyYW1ldGVycz8uaXNCaWxsYWJsZTtcbiAgICBjb25zdCBub3RlcyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5ub3RlcztcbiAgICBjb25zdCBub3Rlc0NvbnRhaW5zID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm5vdGVzQ29udGFpbnM7XG4gICAgY29uc3Qgbm90ZXNJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5ub3Rlc0luO1xuICAgIGNvbnN0IG9yZGVyaW5nID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9yZGVyaW5nO1xuICAgIGNvbnN0IHBheW1lbnRSZWNpcGllbnROYW1lID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBheW1lbnRSZWNpcGllbnROYW1lO1xuICAgIGNvbnN0IHBheW1lbnRSZWNpcGllbnROYW1lSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8ucGF5bWVudFJlY2lwaWVudE5hbWVJbjtcbiAgICBjb25zdCBxYkNsaWVudElkID0gcmVxdWVzdFBhcmFtZXRlcnM/LnFiQ2xpZW50SWQ7XG4gICAgY29uc3QgcWJDbGllbnRJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnFiQ2xpZW50SWRJbjtcbiAgICBjb25zdCBzZWFyY2ggPSByZXF1ZXN0UGFyYW1ldGVycz8uc2VhcmNoO1xuICAgIGNvbnN0IHN0YXRlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXRlO1xuICAgIGNvbnN0IHN0YXRlSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uc3RhdGVJbjtcbiAgICBjb25zdCBzdGF0dXMgPSByZXF1ZXN0UGFyYW1ldGVycz8uc3RhdHVzO1xuICAgIGNvbnN0IHN0YXR1c0luID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXR1c0luO1xuICAgIGNvbnN0IHRpbWVMaW1pdFBlck1vbnRoR3RlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnRpbWVMaW1pdFBlck1vbnRoR3RlO1xuICAgIGNvbnN0IHRpbWVMaW1pdFBlck1vbnRoTHRlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnRpbWVMaW1pdFBlck1vbnRoTHRlO1xuICAgIGNvbnN0IHVwZGF0ZWRCeSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy51cGRhdGVkQnk7XG4gICAgY29uc3QgdXBkYXRlZEJ5SW4gPSByZXF1ZXN0UGFyYW1ldGVycz8udXBkYXRlZEJ5SW47XG4gICAgY29uc3Qgd2Vic2l0ZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy53ZWJzaXRlO1xuICAgIGNvbnN0IHdlYnNpdGVJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy53ZWJzaXRlSW47XG4gICAgY29uc3QgemlwID0gcmVxdWVzdFBhcmFtZXRlcnM/LnppcDtcbiAgICBjb25zdCB6aXBJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy56aXBJbjtcbiAgICBjb25zdCB6b2hvQWNjb3VudElkID0gcmVxdWVzdFBhcmFtZXRlcnM/LnpvaG9BY2NvdW50SWQ7XG4gICAgY29uc3Qgem9ob0FjY291bnRJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnpvaG9BY2NvdW50SWRJbjtcblxuICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHsgZW5jb2RlcjogdGhpcy5lbmNvZGVyIH0pO1xuICAgIGlmIChhY2NvdW50TWFuYWdlciAhPT0gdW5kZWZpbmVkICYmIGFjY291bnRNYW5hZ2VyICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5hY2NvdW50TWFuYWdlcixcbiAgICAgICAgXCJhY2NvdW50X21hbmFnZXJcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhY2NvdW50TWFuYWdlckluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmFjY291bnRNYW5hZ2VySW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJhY2NvdW50X21hbmFnZXJfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWRkcmVzczEgIT09IHVuZGVmaW5lZCAmJiBhZGRyZXNzMSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YWRkcmVzczEsXG4gICAgICAgIFwiYWRkcmVzczFcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhZGRyZXNzMUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmFkZHJlc3MxSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJhZGRyZXNzMV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhZGRyZXNzMiAhPT0gdW5kZWZpbmVkICYmIGFkZHJlc3MyICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5hZGRyZXNzMixcbiAgICAgICAgXCJhZGRyZXNzMlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFkZHJlc3MySW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uYWRkcmVzczJJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImFkZHJlc3MyX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdBZGRyZXNzMSAhPT0gdW5kZWZpbmVkICYmIGJpbGxpbmdBZGRyZXNzMSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ0FkZHJlc3MxLFxuICAgICAgICBcImJpbGxpbmdfYWRkcmVzczFcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nQWRkcmVzczFJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nQWRkcmVzczFJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJpbGxpbmdfYWRkcmVzczFfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ0FkZHJlc3MyICE9PSB1bmRlZmluZWQgJiYgYmlsbGluZ0FkZHJlc3MyICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5iaWxsaW5nQWRkcmVzczIsXG4gICAgICAgIFwiYmlsbGluZ19hZGRyZXNzMlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdBZGRyZXNzMkluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJpbGxpbmdBZGRyZXNzMkluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYmlsbGluZ19hZGRyZXNzMl9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nQ2l0eSAhPT0gdW5kZWZpbmVkICYmIGJpbGxpbmdDaXR5ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5iaWxsaW5nQ2l0eSxcbiAgICAgICAgXCJiaWxsaW5nX2NpdHlcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nQ2l0eUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJpbGxpbmdDaXR5SW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJiaWxsaW5nX2NpdHlfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ0NvdW50cnkgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nQ291bnRyeSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ0NvdW50cnksXG4gICAgICAgIFwiYmlsbGluZ19jb3VudHJ5XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ0NvdW50cnlJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5iaWxsaW5nQ291bnRyeUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYmlsbGluZ19jb3VudHJ5X19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdNZXRob2QgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nTWV0aG9kICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5iaWxsaW5nTWV0aG9kLFxuICAgICAgICBcImJpbGxpbmdfbWV0aG9kXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ01ldGhvZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJpbGxpbmdNZXRob2RJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJpbGxpbmdfbWV0aG9kX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdOb3RlcyAhPT0gdW5kZWZpbmVkICYmIGJpbGxpbmdOb3RlcyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YmlsbGluZ05vdGVzLFxuICAgICAgICBcImJpbGxpbmdfbm90ZXNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nTm90ZXNDb250YWlucyAhPT0gdW5kZWZpbmVkICYmIGJpbGxpbmdOb3Rlc0NvbnRhaW5zICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5iaWxsaW5nTm90ZXNDb250YWlucyxcbiAgICAgICAgXCJiaWxsaW5nX25vdGVzX19jb250YWluc1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdOb3Rlc0luKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJpbGxpbmdOb3Rlc0luXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYmlsbGluZ19ub3Rlc19faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChiaWxsaW5nU3RhdGUgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJpbGxpbmdTdGF0ZSxcbiAgICAgICAgXCJiaWxsaW5nX3N0YXRlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ1N0YXRlSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uYmlsbGluZ1N0YXRlSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJiaWxsaW5nX3N0YXRlX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJpbGxpbmdaaXAgIT09IHVuZGVmaW5lZCAmJiBiaWxsaW5nWmlwICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5iaWxsaW5nWmlwLFxuICAgICAgICBcImJpbGxpbmdfemlwXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYmlsbGluZ1ppcEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJpbGxpbmdaaXBJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJpbGxpbmdfemlwX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNpdHkgIT09IHVuZGVmaW5lZCAmJiBjaXR5ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5jaXR5LFxuICAgICAgICBcImNpdHlcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjaXR5SW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uY2l0eUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiY2l0eV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb250cmFjdFVudGlsR3RlICE9PSB1bmRlZmluZWQgJiYgY29udHJhY3RVbnRpbEd0ZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+Y29udHJhY3RVbnRpbEd0ZSxcbiAgICAgICAgXCJjb250cmFjdF91bnRpbF9fZ3RlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY29udHJhY3RVbnRpbEx0ZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRyYWN0VW50aWxMdGUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmNvbnRyYWN0VW50aWxMdGUsXG4gICAgICAgIFwiY29udHJhY3RfdW50aWxfX2x0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvdW50cnkgIT09IHVuZGVmaW5lZCAmJiBjb3VudHJ5ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5jb3VudHJ5LFxuICAgICAgICBcImNvdW50cnlcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb3VudHJ5SW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uY291bnRyeUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiY291bnRyeV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjcmVhdGVkQnkgIT09IHVuZGVmaW5lZCAmJiBjcmVhdGVkQnkgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmNyZWF0ZWRCeSxcbiAgICAgICAgXCJjcmVhdGVkX2J5XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZEJ5SW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uY3JlYXRlZEJ5SW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJjcmVhdGVkX2J5X19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgaWQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmlkLFxuICAgICAgICBcImlkXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5pZEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiaWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaXNCaWxsYWJsZSAhPT0gdW5kZWZpbmVkICYmIGlzQmlsbGFibGUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmlzQmlsbGFibGUsXG4gICAgICAgIFwiaXNfYmlsbGFibGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChub3RlcyAhPT0gdW5kZWZpbmVkICYmIG5vdGVzICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5ub3RlcyxcbiAgICAgICAgXCJub3Rlc1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG5vdGVzQ29udGFpbnMgIT09IHVuZGVmaW5lZCAmJiBub3Rlc0NvbnRhaW5zICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5ub3Rlc0NvbnRhaW5zLFxuICAgICAgICBcIm5vdGVzX19jb250YWluc1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG5vdGVzSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4ubm90ZXNJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcIm5vdGVzX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9yZGVyaW5nICE9PSB1bmRlZmluZWQgJiYgb3JkZXJpbmcgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55Pm9yZGVyaW5nLFxuICAgICAgICBcIm9yZGVyaW5nXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocGF5bWVudFJlY2lwaWVudE5hbWUgIT09IHVuZGVmaW5lZCAmJiBwYXltZW50UmVjaXBpZW50TmFtZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+cGF5bWVudFJlY2lwaWVudE5hbWUsXG4gICAgICAgIFwicGF5bWVudF9yZWNpcGllbnRfbmFtZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHBheW1lbnRSZWNpcGllbnROYW1lSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4ucGF5bWVudFJlY2lwaWVudE5hbWVJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInBheW1lbnRfcmVjaXBpZW50X25hbWVfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocWJDbGllbnRJZCAhPT0gdW5kZWZpbmVkICYmIHFiQ2xpZW50SWQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnFiQ2xpZW50SWQsXG4gICAgICAgIFwicWJfY2xpZW50X2lkXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocWJDbGllbnRJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnFiQ2xpZW50SWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInFiX2NsaWVudF9pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzZWFyY2ggIT09IHVuZGVmaW5lZCAmJiBzZWFyY2ggIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnNlYXJjaCxcbiAgICAgICAgXCJzZWFyY2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5zdGF0ZSxcbiAgICAgICAgXCJzdGF0ZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uc3RhdGVJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInN0YXRlX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c3RhdHVzLFxuICAgICAgICBcInN0YXR1c1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1c0luKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnN0YXR1c0luXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwic3RhdHVzX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRpbWVMaW1pdFBlck1vbnRoR3RlICE9PSB1bmRlZmluZWQgJiYgdGltZUxpbWl0UGVyTW9udGhHdGUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnRpbWVMaW1pdFBlck1vbnRoR3RlLFxuICAgICAgICBcInRpbWVfbGltaXRfcGVyX21vbnRoX19ndGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aW1lTGltaXRQZXJNb250aEx0ZSAhPT0gdW5kZWZpbmVkICYmIHRpbWVMaW1pdFBlck1vbnRoTHRlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT50aW1lTGltaXRQZXJNb250aEx0ZSxcbiAgICAgICAgXCJ0aW1lX2xpbWl0X3Blcl9tb250aF9fbHRlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZEJ5ICE9PSB1bmRlZmluZWQgJiYgdXBkYXRlZEJ5ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT51cGRhdGVkQnksXG4gICAgICAgIFwidXBkYXRlZF9ieVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWRCeUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnVwZGF0ZWRCeUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwidXBkYXRlZF9ieV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh3ZWJzaXRlICE9PSB1bmRlZmluZWQgJiYgd2Vic2l0ZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+d2Vic2l0ZSxcbiAgICAgICAgXCJ3ZWJzaXRlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAod2Vic2l0ZUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLndlYnNpdGVJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcIndlYnNpdGVfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoemlwICE9PSB1bmRlZmluZWQgJiYgemlwICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT56aXAsXG4gICAgICAgIFwiemlwXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoemlwSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uemlwSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ6aXBfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoem9ob0FjY291bnRJZCAhPT0gdW5kZWZpbmVkICYmIHpvaG9BY2NvdW50SWQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnpvaG9BY2NvdW50SWQsXG4gICAgICAgIFwiem9ob19hY2NvdW50X2lkXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoem9ob0FjY291bnRJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnpvaG9BY2NvdW50SWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInpvaG9fYWNjb3VudF9pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2NsaWVudHMvd2l0aC1zdGF0cy9gO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxDbGllbnRTdGF0c0R0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==