@decaf-ts/for-nest 0.11.1 → 0.11.2-refactor.2

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 (370) hide show
  1. package/README.md +1 -1
  2. package/dist/for-nest.cjs +2654 -2
  3. package/dist/for-nest.js +2756 -2
  4. package/lib/cjs/auth/AuthInterceptor.cjs +90 -0
  5. package/lib/cjs/auth/DecafAuthHandler.cjs +37 -0
  6. package/lib/cjs/auth/DecafAuthModule.cjs +56 -0
  7. package/lib/cjs/auth/constants.cjs +10 -0
  8. package/lib/cjs/auth/decorators.cjs +28 -0
  9. package/lib/cjs/auth/index.cjs +23 -0
  10. package/lib/cjs/bin/cli.cjs +2 -2
  11. package/lib/cjs/cli-module.cjs +64 -7
  12. package/lib/cjs/constants.cjs +5 -6
  13. package/lib/cjs/controllers.cjs +13 -109
  14. package/lib/cjs/core-module.cjs +8 -8
  15. package/lib/cjs/decaf-model/DecafModelModule.cjs +23 -4
  16. package/lib/cjs/decaf-model/FromModelController.cjs +751 -789
  17. package/lib/cjs/decaf-model/decorators/ApiOperationFromModel.cjs +53 -16
  18. package/lib/cjs/decaf-model/decorators/ApiParamsFromModel.cjs +2 -2
  19. package/lib/cjs/decaf-model/decorators/DecafBody.cjs +2 -2
  20. package/lib/cjs/decaf-model/decorators/DecafParams.cjs +2 -2
  21. package/lib/cjs/decaf-model/decorators/controller-config.cjs +29 -0
  22. package/lib/cjs/decaf-model/decorators/decorators.cjs +5 -45
  23. package/lib/cjs/decaf-model/decorators/expose.cjs +13 -0
  24. package/lib/cjs/decaf-model/decorators/index.cjs +3 -2
  25. package/lib/cjs/decaf-model/decorators/types.cjs +2 -2
  26. package/lib/cjs/decaf-model/decorators/utils.cjs +2 -2
  27. package/lib/cjs/decaf-model/index.cjs +28 -19
  28. package/lib/cjs/decaf-model/types.cjs +2 -2
  29. package/lib/cjs/decaf-model/utils.cjs +2 -2
  30. package/lib/cjs/decoration.cjs +2 -2
  31. package/lib/cjs/decorators.cjs +85 -0
  32. package/lib/cjs/events-module/DecafStreamModule.cjs +2 -2
  33. package/lib/cjs/events-module/EventsController.cjs +2 -2
  34. package/lib/cjs/events-module/constant.cjs +2 -2
  35. package/lib/cjs/events-module/index.cjs +2 -2
  36. package/lib/cjs/events-module/utils.cjs +2 -2
  37. package/lib/cjs/factory/NestBootstraper.cjs +2 -2
  38. package/lib/cjs/factory/errors/cors.cjs +2 -2
  39. package/lib/cjs/factory/errors/index.cjs +2 -2
  40. package/lib/cjs/factory/errors/throttling.cjs +2 -2
  41. package/lib/cjs/factory/exceptions/DecafErrorFilter.cjs +2 -2
  42. package/lib/cjs/factory/exceptions/decorators.cjs +2 -2
  43. package/lib/cjs/factory/exceptions/index.cjs +2 -2
  44. package/lib/cjs/factory/index.cjs +2 -2
  45. package/lib/cjs/factory/openapi/DtoBuilder.cjs +37 -6
  46. package/lib/cjs/factory/openapi/SwaggerBuilder.cjs +2 -2
  47. package/lib/cjs/factory/openapi/SwaggerCustomUI.cjs +2 -2
  48. package/lib/cjs/factory/openapi/constants.cjs +2 -2
  49. package/lib/cjs/factory/openapi/index.cjs +2 -2
  50. package/lib/cjs/index.cjs +8 -7
  51. package/lib/cjs/interceptors/DecafRequestHandlerInterceptor.cjs +25 -21
  52. package/lib/cjs/interceptors/index.cjs +3 -4
  53. package/lib/cjs/module.cjs +5 -2
  54. package/lib/cjs/overrides/Adapter.cjs +2 -2
  55. package/lib/cjs/overrides/ModelBuilderExtensions.cjs +2 -2
  56. package/lib/cjs/overrides/constants.cjs +2 -2
  57. package/lib/cjs/overrides/decoration.cjs +2 -2
  58. package/lib/cjs/overrides/helpers.cjs +2 -2
  59. package/lib/cjs/overrides/index.cjs +3 -2
  60. package/lib/cjs/overrides/logging.cjs +5 -0
  61. package/lib/cjs/overrides/overrides.cjs +2 -2
  62. package/lib/cjs/request/DecafAuthHandler.cjs +5 -39
  63. package/lib/cjs/request/DecafHandlerExecutor.cjs +2 -2
  64. package/lib/cjs/request/DecafRequestContext.cjs +11 -20
  65. package/lib/cjs/request/DecafResponseInterceptor.cjs +3 -3
  66. package/lib/cjs/request/index.cjs +2 -2
  67. package/lib/cjs/swagger-types.cjs +2 -2
  68. package/lib/cjs/types.cjs +2 -2
  69. package/lib/cjs/utils.cjs +2 -2
  70. package/lib/cjs/webhooks/DecafWebhookModule.cjs +11 -12
  71. package/lib/cjs/webhooks/controllers.cjs +10 -10
  72. package/lib/cjs/webhooks/index.cjs +2 -15
  73. package/lib/cjs/webhooks/types.cjs +2 -2
  74. package/lib/esm/auth/AuthInterceptor.js +81 -0
  75. package/lib/esm/auth/DecafAuthHandler.js +31 -0
  76. package/lib/esm/auth/DecafAuthModule.js +48 -0
  77. package/lib/esm/auth/constants.js +6 -0
  78. package/lib/esm/auth/decorators.js +22 -0
  79. package/lib/esm/auth/index.js +6 -0
  80. package/lib/esm/bin/cli.js +1 -1
  81. package/lib/esm/cli-module.js +63 -6
  82. package/lib/esm/constants.js +3 -4
  83. package/lib/esm/controllers.js +13 -109
  84. package/lib/esm/core-module.js +7 -7
  85. package/lib/esm/decaf-model/DecafModelModule.js +22 -3
  86. package/lib/esm/decaf-model/FromModelController.js +753 -791
  87. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js +53 -15
  88. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js +1 -1
  89. package/lib/esm/decaf-model/decorators/DecafBody.js +1 -1
  90. package/lib/esm/decaf-model/decorators/DecafParams.js +1 -1
  91. package/lib/esm/decaf-model/decorators/controller-config.js +25 -0
  92. package/lib/esm/decaf-model/decorators/decorators.js +2 -43
  93. package/lib/esm/decaf-model/decorators/expose.js +9 -0
  94. package/lib/esm/decaf-model/decorators/index.js +2 -1
  95. package/lib/esm/decaf-model/decorators/types.js +1 -1
  96. package/lib/esm/decaf-model/decorators/utils.js +1 -1
  97. package/lib/esm/decaf-model/index.js +11 -4
  98. package/lib/esm/decaf-model/types.js +1 -1
  99. package/lib/esm/decaf-model/utils.js +1 -1
  100. package/lib/esm/decoration.js +1 -1
  101. package/lib/esm/decorators.js +79 -0
  102. package/lib/esm/events-module/DecafStreamModule.js +1 -1
  103. package/lib/esm/events-module/EventsController.js +1 -1
  104. package/lib/esm/events-module/constant.js +1 -1
  105. package/lib/esm/events-module/index.js +1 -1
  106. package/lib/esm/events-module/utils.js +1 -1
  107. package/lib/esm/factory/NestBootstraper.js +1 -1
  108. package/lib/esm/factory/errors/cors.js +1 -1
  109. package/lib/esm/factory/errors/index.js +1 -1
  110. package/lib/esm/factory/errors/throttling.js +1 -1
  111. package/lib/esm/factory/exceptions/DecafErrorFilter.js +1 -1
  112. package/lib/esm/factory/exceptions/decorators.js +1 -1
  113. package/lib/esm/factory/exceptions/index.js +1 -1
  114. package/lib/esm/factory/index.js +1 -1
  115. package/lib/esm/factory/openapi/DtoBuilder.js +36 -5
  116. package/lib/esm/factory/openapi/SwaggerBuilder.js +1 -1
  117. package/lib/esm/factory/openapi/SwaggerCustomUI.js +1 -1
  118. package/lib/esm/factory/openapi/constants.js +1 -1
  119. package/lib/esm/factory/openapi/index.js +1 -1
  120. package/lib/esm/index.js +7 -6
  121. package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js +25 -21
  122. package/lib/esm/interceptors/index.js +2 -3
  123. package/lib/esm/module.js +4 -1
  124. package/lib/esm/overrides/Adapter.js +1 -1
  125. package/lib/esm/overrides/ModelBuilderExtensions.js +1 -1
  126. package/lib/esm/overrides/constants.js +1 -1
  127. package/lib/esm/overrides/decoration.js +1 -1
  128. package/lib/esm/overrides/helpers.js +1 -1
  129. package/lib/esm/overrides/index.js +2 -1
  130. package/lib/esm/overrides/logging.js +2 -0
  131. package/lib/esm/overrides/overrides.js +1 -1
  132. package/lib/esm/request/DecafAuthHandler.js +2 -36
  133. package/lib/esm/request/DecafHandlerExecutor.js +1 -1
  134. package/lib/esm/request/DecafRequestContext.js +10 -19
  135. package/lib/esm/request/DecafResponseInterceptor.js +2 -2
  136. package/lib/esm/request/index.js +1 -1
  137. package/lib/esm/swagger-types.js +1 -1
  138. package/lib/esm/types.js +1 -1
  139. package/lib/esm/utils.js +1 -1
  140. package/lib/esm/webhooks/DecafWebhookModule.js +5 -6
  141. package/lib/esm/webhooks/controllers.js +2 -2
  142. package/lib/esm/webhooks/index.js +1 -2
  143. package/lib/esm/webhooks/types.js +1 -1
  144. package/lib/types/{interceptors → auth}/AuthInterceptor.d.cts +4 -1
  145. package/lib/types/{interceptors → auth}/AuthInterceptor.d.mts +4 -1
  146. package/lib/types/auth/DecafAuthHandler.d.cts +22 -0
  147. package/lib/types/auth/DecafAuthHandler.d.mts +22 -0
  148. package/lib/types/auth/DecafAuthModule.d.cts +9 -0
  149. package/lib/types/auth/DecafAuthModule.d.mts +9 -0
  150. package/lib/types/auth/constants.d.cts +5 -0
  151. package/lib/types/auth/constants.d.mts +5 -0
  152. package/lib/types/auth/decorators.d.cts +4 -0
  153. package/lib/types/auth/decorators.d.mts +4 -0
  154. package/lib/types/auth/index.d.cts +6 -0
  155. package/lib/types/auth/index.d.mts +6 -0
  156. package/lib/types/cli-module.d.cts +1 -4
  157. package/lib/types/cli-module.d.mts +1 -4
  158. package/lib/types/constants.d.cts +2 -3
  159. package/lib/types/constants.d.mts +2 -3
  160. package/lib/types/controllers.d.cts +7 -12
  161. package/lib/types/controllers.d.mts +7 -12
  162. package/lib/types/decaf-model/DecafModelModule.d.cts +1 -0
  163. package/lib/types/decaf-model/DecafModelModule.d.mts +1 -0
  164. package/lib/types/decaf-model/FromModelController.d.cts +40 -52
  165. package/lib/types/decaf-model/FromModelController.d.mts +40 -52
  166. package/lib/types/decaf-model/decorators/ApiOperationFromModel.d.cts +0 -2
  167. package/lib/types/decaf-model/decorators/ApiOperationFromModel.d.mts +0 -2
  168. package/lib/types/decaf-model/decorators/controller-config.d.cts +18 -0
  169. package/lib/types/decaf-model/decorators/controller-config.d.mts +18 -0
  170. package/lib/types/decaf-model/decorators/decorators.d.cts +1 -29
  171. package/lib/types/decaf-model/decorators/decorators.d.mts +1 -29
  172. package/lib/types/decaf-model/decorators/expose.d.cts +1 -0
  173. package/lib/types/decaf-model/decorators/expose.d.mts +1 -0
  174. package/lib/types/decaf-model/decorators/index.d.cts +1 -0
  175. package/lib/types/decaf-model/decorators/index.d.mts +1 -0
  176. package/lib/types/decaf-model/decorators/types.d.cts +8 -21
  177. package/lib/types/decaf-model/decorators/types.d.mts +8 -21
  178. package/lib/types/decaf-model/index.d.cts +11 -3
  179. package/lib/types/decaf-model/index.d.mts +11 -3
  180. package/lib/types/decaf-model/utils.d.cts +2 -1
  181. package/lib/types/decaf-model/utils.d.mts +2 -1
  182. package/lib/types/decorators.d.cts +34 -0
  183. package/lib/types/decorators.d.mts +34 -0
  184. package/lib/types/factory/openapi/DtoBuilder.d.cts +7 -3
  185. package/lib/types/factory/openapi/DtoBuilder.d.mts +7 -3
  186. package/lib/types/index.d.cts +5 -5
  187. package/lib/types/index.d.mts +5 -5
  188. package/lib/types/interceptors/DecafRequestHandlerInterceptor.d.cts +1 -2
  189. package/lib/types/interceptors/DecafRequestHandlerInterceptor.d.mts +1 -2
  190. package/lib/types/interceptors/index.d.cts +1 -2
  191. package/lib/types/interceptors/index.d.mts +1 -2
  192. package/lib/types/overrides/Adapter.d.cts +1 -1
  193. package/lib/types/overrides/Adapter.d.mts +1 -1
  194. package/lib/types/overrides/index.d.cts +1 -0
  195. package/lib/types/overrides/index.d.mts +1 -0
  196. package/lib/types/overrides/logging.d.cts +1 -0
  197. package/lib/types/overrides/logging.d.mts +1 -0
  198. package/lib/types/request/DecafAuthHandler.d.cts +1 -10
  199. package/lib/types/request/DecafAuthHandler.d.mts +1 -10
  200. package/lib/types/request/DecafRequestContext.d.cts +4 -5
  201. package/lib/types/request/DecafRequestContext.d.mts +4 -5
  202. package/lib/types/types.d.cts +12 -24
  203. package/lib/types/types.d.mts +12 -24
  204. package/lib/types/webhooks/controllers.d.cts +1 -1
  205. package/lib/types/webhooks/controllers.d.mts +1 -1
  206. package/lib/types/webhooks/index.d.cts +0 -1
  207. package/lib/types/webhooks/index.d.mts +0 -1
  208. package/package.json +5 -13
  209. package/dist/for-nest.cjs.map +0 -1
  210. package/dist/for-nest.js.map +0 -1
  211. package/lib/cjs/bin/cli.cjs.map +0 -1
  212. package/lib/cjs/cli-module.cjs.map +0 -1
  213. package/lib/cjs/constants.cjs.map +0 -1
  214. package/lib/cjs/controllers.cjs.map +0 -1
  215. package/lib/cjs/core-module.cjs.map +0 -1
  216. package/lib/cjs/decaf-model/DecafModelModule.cjs.map +0 -1
  217. package/lib/cjs/decaf-model/FromModelController.cjs.map +0 -1
  218. package/lib/cjs/decaf-model/decorators/ApiOperationFromModel.cjs.map +0 -1
  219. package/lib/cjs/decaf-model/decorators/ApiParamsFromModel.cjs.map +0 -1
  220. package/lib/cjs/decaf-model/decorators/DecafBody.cjs.map +0 -1
  221. package/lib/cjs/decaf-model/decorators/DecafParams.cjs.map +0 -1
  222. package/lib/cjs/decaf-model/decorators/decorators.cjs.map +0 -1
  223. package/lib/cjs/decaf-model/decorators/index.cjs.map +0 -1
  224. package/lib/cjs/decaf-model/decorators/types.cjs.map +0 -1
  225. package/lib/cjs/decaf-model/decorators/utils.cjs.map +0 -1
  226. package/lib/cjs/decaf-model/index.cjs.map +0 -1
  227. package/lib/cjs/decaf-model/types.cjs.map +0 -1
  228. package/lib/cjs/decaf-model/utils.cjs.map +0 -1
  229. package/lib/cjs/decoration.cjs.map +0 -1
  230. package/lib/cjs/events-module/DecafStreamModule.cjs.map +0 -1
  231. package/lib/cjs/events-module/EventsController.cjs.map +0 -1
  232. package/lib/cjs/events-module/constant.cjs.map +0 -1
  233. package/lib/cjs/events-module/index.cjs.map +0 -1
  234. package/lib/cjs/events-module/utils.cjs.map +0 -1
  235. package/lib/cjs/factory/NestBootstraper.cjs.map +0 -1
  236. package/lib/cjs/factory/errors/cors.cjs.map +0 -1
  237. package/lib/cjs/factory/errors/index.cjs.map +0 -1
  238. package/lib/cjs/factory/errors/throttling.cjs.map +0 -1
  239. package/lib/cjs/factory/exceptions/DecafErrorFilter.cjs.map +0 -1
  240. package/lib/cjs/factory/exceptions/decorators.cjs.map +0 -1
  241. package/lib/cjs/factory/exceptions/index.cjs.map +0 -1
  242. package/lib/cjs/factory/index.cjs.map +0 -1
  243. package/lib/cjs/factory/openapi/DtoBuilder.cjs.map +0 -1
  244. package/lib/cjs/factory/openapi/SwaggerBuilder.cjs.map +0 -1
  245. package/lib/cjs/factory/openapi/SwaggerCustomUI.cjs.map +0 -1
  246. package/lib/cjs/factory/openapi/constants.cjs.map +0 -1
  247. package/lib/cjs/factory/openapi/index.cjs.map +0 -1
  248. package/lib/cjs/index.cjs.map +0 -1
  249. package/lib/cjs/interceptors/AuthInterceptor.cjs +0 -52
  250. package/lib/cjs/interceptors/AuthInterceptor.cjs.map +0 -1
  251. package/lib/cjs/interceptors/DecafRequestHandlerInterceptor.cjs.map +0 -1
  252. package/lib/cjs/interceptors/context.cjs +0 -18
  253. package/lib/cjs/interceptors/context.cjs.map +0 -1
  254. package/lib/cjs/interceptors/index.cjs.map +0 -1
  255. package/lib/cjs/migrations/index.cjs +0 -35
  256. package/lib/cjs/migrations/index.cjs.map +0 -1
  257. package/lib/cjs/migrations/migration-module.cjs +0 -60
  258. package/lib/cjs/migrations/migration-module.cjs.map +0 -1
  259. package/lib/cjs/migrations/migration-options.cjs +0 -4
  260. package/lib/cjs/migrations/migration-options.cjs.map +0 -1
  261. package/lib/cjs/module.cjs.map +0 -1
  262. package/lib/cjs/overrides/Adapter.cjs.map +0 -1
  263. package/lib/cjs/overrides/ModelBuilderExtensions.cjs.map +0 -1
  264. package/lib/cjs/overrides/constants.cjs.map +0 -1
  265. package/lib/cjs/overrides/decoration.cjs.map +0 -1
  266. package/lib/cjs/overrides/helpers.cjs.map +0 -1
  267. package/lib/cjs/overrides/index.cjs.map +0 -1
  268. package/lib/cjs/overrides/overrides.cjs.map +0 -1
  269. package/lib/cjs/ram/RamRequestTransformer.cjs +0 -26
  270. package/lib/cjs/ram/RamRequestTransformer.cjs.map +0 -1
  271. package/lib/cjs/ram/index.cjs +0 -19
  272. package/lib/cjs/ram/index.cjs.map +0 -1
  273. package/lib/cjs/request/DecafAuthHandler.cjs.map +0 -1
  274. package/lib/cjs/request/DecafHandlerExecutor.cjs.map +0 -1
  275. package/lib/cjs/request/DecafRequestContext.cjs.map +0 -1
  276. package/lib/cjs/request/DecafResponseInterceptor.cjs.map +0 -1
  277. package/lib/cjs/request/index.cjs.map +0 -1
  278. package/lib/cjs/swagger-types.cjs.map +0 -1
  279. package/lib/cjs/types.cjs.map +0 -1
  280. package/lib/cjs/utils.cjs.map +0 -1
  281. package/lib/cjs/webhooks/DecafWebhookModule.cjs.map +0 -1
  282. package/lib/cjs/webhooks/controllers.cjs.map +0 -1
  283. package/lib/cjs/webhooks/index.cjs.map +0 -1
  284. package/lib/cjs/webhooks/types.cjs.map +0 -1
  285. package/lib/esm/bin/cli.js.map +0 -1
  286. package/lib/esm/cli-module.js.map +0 -1
  287. package/lib/esm/constants.js.map +0 -1
  288. package/lib/esm/controllers.js.map +0 -1
  289. package/lib/esm/core-module.js.map +0 -1
  290. package/lib/esm/decaf-model/DecafModelModule.js.map +0 -1
  291. package/lib/esm/decaf-model/FromModelController.js.map +0 -1
  292. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js.map +0 -1
  293. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js.map +0 -1
  294. package/lib/esm/decaf-model/decorators/DecafBody.js.map +0 -1
  295. package/lib/esm/decaf-model/decorators/DecafParams.js.map +0 -1
  296. package/lib/esm/decaf-model/decorators/decorators.js.map +0 -1
  297. package/lib/esm/decaf-model/decorators/index.js.map +0 -1
  298. package/lib/esm/decaf-model/decorators/types.js.map +0 -1
  299. package/lib/esm/decaf-model/decorators/utils.js.map +0 -1
  300. package/lib/esm/decaf-model/index.js.map +0 -1
  301. package/lib/esm/decaf-model/types.js.map +0 -1
  302. package/lib/esm/decaf-model/utils.js.map +0 -1
  303. package/lib/esm/decoration.js.map +0 -1
  304. package/lib/esm/events-module/DecafStreamModule.js.map +0 -1
  305. package/lib/esm/events-module/EventsController.js.map +0 -1
  306. package/lib/esm/events-module/constant.js.map +0 -1
  307. package/lib/esm/events-module/index.js.map +0 -1
  308. package/lib/esm/events-module/utils.js.map +0 -1
  309. package/lib/esm/factory/NestBootstraper.js.map +0 -1
  310. package/lib/esm/factory/errors/cors.js.map +0 -1
  311. package/lib/esm/factory/errors/index.js.map +0 -1
  312. package/lib/esm/factory/errors/throttling.js.map +0 -1
  313. package/lib/esm/factory/exceptions/DecafErrorFilter.js.map +0 -1
  314. package/lib/esm/factory/exceptions/decorators.js.map +0 -1
  315. package/lib/esm/factory/exceptions/index.js.map +0 -1
  316. package/lib/esm/factory/index.js.map +0 -1
  317. package/lib/esm/factory/openapi/DtoBuilder.js.map +0 -1
  318. package/lib/esm/factory/openapi/SwaggerBuilder.js.map +0 -1
  319. package/lib/esm/factory/openapi/SwaggerCustomUI.js.map +0 -1
  320. package/lib/esm/factory/openapi/constants.js.map +0 -1
  321. package/lib/esm/factory/openapi/index.js.map +0 -1
  322. package/lib/esm/index.js.map +0 -1
  323. package/lib/esm/interceptors/AuthInterceptor.js +0 -43
  324. package/lib/esm/interceptors/AuthInterceptor.js.map +0 -1
  325. package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js.map +0 -1
  326. package/lib/esm/interceptors/context.js +0 -12
  327. package/lib/esm/interceptors/context.js.map +0 -1
  328. package/lib/esm/interceptors/index.js.map +0 -1
  329. package/lib/esm/migrations/index.js +0 -18
  330. package/lib/esm/migrations/index.js.map +0 -1
  331. package/lib/esm/migrations/migration-module.js +0 -52
  332. package/lib/esm/migrations/migration-module.js.map +0 -1
  333. package/lib/esm/migrations/migration-options.js +0 -7
  334. package/lib/esm/migrations/migration-options.js.map +0 -1
  335. package/lib/esm/module.js.map +0 -1
  336. package/lib/esm/overrides/Adapter.js.map +0 -1
  337. package/lib/esm/overrides/ModelBuilderExtensions.js.map +0 -1
  338. package/lib/esm/overrides/constants.js.map +0 -1
  339. package/lib/esm/overrides/decoration.js.map +0 -1
  340. package/lib/esm/overrides/helpers.js.map +0 -1
  341. package/lib/esm/overrides/index.js.map +0 -1
  342. package/lib/esm/overrides/overrides.js.map +0 -1
  343. package/lib/esm/ram/RamRequestTransformer.js +0 -21
  344. package/lib/esm/ram/RamRequestTransformer.js.map +0 -1
  345. package/lib/esm/ram/index.js +0 -2
  346. package/lib/esm/ram/index.js.map +0 -1
  347. package/lib/esm/request/DecafAuthHandler.js.map +0 -1
  348. package/lib/esm/request/DecafHandlerExecutor.js.map +0 -1
  349. package/lib/esm/request/DecafRequestContext.js.map +0 -1
  350. package/lib/esm/request/DecafResponseInterceptor.js.map +0 -1
  351. package/lib/esm/request/index.js.map +0 -1
  352. package/lib/esm/swagger-types.js.map +0 -1
  353. package/lib/esm/types.js.map +0 -1
  354. package/lib/esm/utils.js.map +0 -1
  355. package/lib/esm/webhooks/DecafWebhookModule.js.map +0 -1
  356. package/lib/esm/webhooks/controllers.js.map +0 -1
  357. package/lib/esm/webhooks/index.js.map +0 -1
  358. package/lib/esm/webhooks/types.js.map +0 -1
  359. package/lib/types/interceptors/context.d.cts +0 -6
  360. package/lib/types/interceptors/context.d.mts +0 -6
  361. package/lib/types/migrations/index.d.cts +0 -17
  362. package/lib/types/migrations/index.d.mts +0 -17
  363. package/lib/types/migrations/migration-module.d.cts +0 -15
  364. package/lib/types/migrations/migration-module.d.mts +0 -15
  365. package/lib/types/migrations/migration-options.d.cts +0 -11
  366. package/lib/types/migrations/migration-options.d.mts +0 -11
  367. package/lib/types/ram/RamRequestTransformer.d.cts +0 -5
  368. package/lib/types/ram/RamRequestTransformer.d.mts +0 -5
  369. package/lib/types/ram/index.d.cts +0 -1
  370. package/lib/types/ram/index.d.mts +0 -1
@@ -15,9 +15,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
15
15
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
16
16
  return Reflect.metadata(k, v);
17
17
  };
18
- var __param = (this && this.__param) || function (paramIndex, decorator) {
19
- return function (target, key) { decorator(target, key, paramIndex); };
20
- };
18
+ var DynamicModelController_1;
21
19
  const common_1 = require("@nestjs/common");
22
20
  const swagger_1 = require("@nestjs/swagger");
23
21
  const core_1 = require("@decaf-ts/core");
@@ -26,62 +24,15 @@ const logging_1 = require("@decaf-ts/logging");
26
24
  const db_decorators_1 = require("@decaf-ts/db-decorators");
27
25
  const decoration_1 = require("@decaf-ts/decoration");
28
26
  const index_js_1 = require("./decorators/index.cjs");
27
+ const utils_js_1 = require("./decorators/utils.cjs");
29
28
  const index_js_2 = require("./../request/index.cjs");
30
29
  const constants_js_1 = require("./../constants.cjs");
31
- const utils_js_1 = require("./utils.cjs");
32
- const decorators_js_1 = require("./decorators/decorators.cjs");
30
+ const constants_js_2 = require("./../auth/constants.cjs");
31
+ const decorators_js_1 = require("./../auth/decorators.cjs");
33
32
  const controllers_js_1 = require("./../controllers.cjs");
34
33
  const DtoBuilder_js_1 = require("./../factory/openapi/DtoBuilder.cjs");
35
34
  require("./../overrides/index.cjs");
36
- /**
37
- * @description
38
- * Factory and utilities for generating dynamic NestJS controllers from Decaf {@link Model} definitions.
39
- *
40
- * @summary
41
- * The `FromModelController` class provides the infrastructure necessary to automatically generate
42
- * strongly-typed CRUD controllers based on a given {@link ModelConstructor}. It inspects metadata from
43
- * the model, derives route paths, parameters, and generates a dynamic controller class at runtime with
44
- * full support for querying, creation, update, and deletion of model entities through a {@link Repo}.
45
- *
46
- * @template T The {@link Model} type associated with the generated controller.
47
- *
48
- * @param ModelClazz The model class to generate the controller from.
49
- *
50
- * @class FromModelController
51
- *
52
- * @example
53
- * ```ts
54
- * // Given a Decaf Model:
55
- * class User extends Model<User> {
56
- * id!: string;
57
- * name!: string;
58
- * }
59
- *
60
- * // Register controller:
61
- * const UserController = FromModelController.create(User);
62
- *
63
- * // NestJS will expose:
64
- * // POST /user
65
- * // GET /user/:id
66
- * // GET /user/query/:method
67
- * // PUT /user/:id
68
- * // DELETE /user/:id
69
- * ```
70
- *
71
- * @mermaid
72
- * sequenceDiagram
73
- * participant Client
74
- * participant Controller
75
- * participant Repo
76
- * participant DB
77
- *
78
- * Client->>Controller: HTTP Request
79
- * Controller->>Repo: Resolve repository for Model
80
- * Repo->>DB: Execute DB operation
81
- * DB-->>Repo: DB Result
82
- * Repo-->>Controller: Model Instance(s)
83
- * Controller-->>Client: JSON Response
84
- */
35
+ const server_1 = require("@decaf-ts/for-http/server");
85
36
  class FromModelController {
86
37
  static { this.log = logging_1.Logging.for(FromModelController.name); }
87
38
  static getPersistence(ModelClazz) {
@@ -91,20 +42,17 @@ class FromModelController {
91
42
  catch (e) {
92
43
  try {
93
44
  return core_1.ModelService.getService(ModelClazz);
94
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
95
45
  }
96
- catch (e) {
46
+ catch (e2) {
97
47
  return core_1.Repository.forModel(ModelClazz);
98
48
  }
99
49
  }
100
50
  }
101
51
  static createQueryRoutesFromRepository(persistence, prefix = core_1.PersistenceKeys.QUERY) {
102
- const log = FromModelController.log.for(FromModelController.createQueryRoutesFromRepository);
103
52
  const repo = persistence instanceof core_1.ModelService ? persistence.repo : persistence;
104
53
  const ModelConstr = repo.class;
105
54
  const queryMethods = decoration_1.Metadata.get(repo.constructor, decoration_1.Metadata.key(core_1.PersistenceKeys.QUERY)) ?? {};
106
55
  const routeMethods = decoration_1.Metadata.get(persistence.constructor, decoration_1.Metadata.key(constants_js_1.DECAF_ROUTE)) ?? {};
107
- // create base class
108
56
  class QueryController extends controllers_js_1.DecafModelController {
109
57
  get class() {
110
58
  throw new Error("Method not implemented.");
@@ -114,733 +62,700 @@ class FromModelController {
114
62
  }
115
63
  }
116
64
  for (const [methodName, params] of Object.entries(routeMethods)) {
117
- // regex to trim slashes from start and end
118
65
  const routePath = [params.path.replace(/^\/+|\/+$/g, "")]
119
66
  .filter((segment) => segment && segment.trim())
120
67
  .join("/");
121
- // const handler = params.handler.value;
122
- const handler = (0, utils_js_1.createRouteHandler)(methodName);
123
- if (!handler) {
124
- const message = `Invalid or missing handler for model ${ModelConstr.name} on decorated method ${methodName}`;
125
- log.error(message);
126
- throw new Error(message);
127
- }
128
- const descriptor = (0, utils_js_1.defineRouteMethod)(QueryController, methodName, handler);
129
- if (descriptor) {
130
- const decorators = (0, utils_js_1.getApiDecorators)(methodName, routePath, params.httpMethod);
131
- (0, utils_js_1.applyApiDecorators)(QueryController, methodName, descriptor, decorators);
132
- }
68
+ const handler = FromModelController.createComplexQueryHandler(methodName);
69
+ FromModelController.defineMethod(QueryController, methodName, handler);
70
+ const httpDecorator = (0, utils_js_1.HttpVerbToDecorator)(params.httpMethod)(routePath || undefined);
71
+ const decorators = FromModelController.getQueryDecorators(methodName, routePath, params.httpMethod);
72
+ FromModelController.applyDecorators(QueryController, methodName, [httpDecorator, ...decorators]);
133
73
  }
134
74
  for (const [methodName, objValues] of Object.entries(queryMethods)) {
135
75
  const fields = objValues.fields ?? [];
136
76
  const routePath = [prefix, methodName, ...fields.map((f) => `:${f}`)]
137
77
  .filter((segment) => segment && segment.trim())
138
78
  .join("/");
139
- const handler = (0, utils_js_1.createRouteHandler)(methodName);
140
- const descriptor = (0, utils_js_1.defineRouteMethod)(QueryController, methodName, handler);
141
- if (descriptor) {
142
- const decorators = (0, utils_js_1.getApiDecorators)(methodName, routePath, "GET", true);
143
- (0, utils_js_1.applyApiDecorators)(QueryController, methodName, descriptor, decorators);
144
- }
79
+ const handler = FromModelController.createComplexQueryHandler(methodName);
80
+ FromModelController.defineMethod(QueryController, methodName, handler);
81
+ const httpDecorator = (0, utils_js_1.HttpVerbToDecorator)("GET")(routePath || undefined);
82
+ const decorators = FromModelController.getQueryDecorators(methodName, routePath, "GET", true);
83
+ FromModelController.applyDecorators(QueryController, methodName, [httpDecorator, ...decorators]);
145
84
  }
146
85
  return QueryController;
147
86
  }
148
- static create(ModelConstr) {
87
+ static create(ModelConstr, moduleConfigOverrides, globalDefaults) {
149
88
  const log = FromModelController.log.for(FromModelController.create);
150
89
  const tableName = decorator_validation_1.Model.tableName(ModelConstr);
151
90
  const routePath = (0, logging_1.toKebabCase)(tableName);
152
91
  const modelClazzName = ModelConstr.name;
153
92
  const persistence = FromModelController.getPersistence(ModelConstr);
154
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
155
- const { description, getPK, apiProperties, path } = FromModelController.getRouteParametersFromModel(ModelConstr);
156
- log.debug(`Creating controller for model: ${modelClazzName}`);
157
- const BaseController = FromModelController.createQueryRoutesFromRepository(persistence // instanceof ModelService ? persistence.repo : persistence
158
- );
159
- let DynamicModelController = class DynamicModelController extends BaseController {
93
+ // When persistence is a ModelService, the @query/@route metadata lives on
94
+ // the underlying repository class (custom repo), not on ModelService itself.
95
+ // Pass the repo to the factory so addComplexQueries() can discover them.
96
+ const factoryPersistence = persistence instanceof core_1.ModelService ? persistence.repo : persistence;
97
+ const decoratorConfig = decoration_1.Metadata.get(ModelConstr, decoration_1.Metadata.key(constants_js_1.DECAF_CONTROLLER_CONFIG));
98
+ const moduleOverride = moduleConfigOverrides?.[ModelConstr.name];
99
+ const mergedConfig = {
100
+ ...(globalDefaults || {}),
101
+ ...(decoratorConfig || {}),
102
+ ...(moduleOverride || {}),
103
+ };
104
+ const FactoryController = server_1.ModelControllerFactory.create(ModelConstr, factoryPersistence, mergedConfig);
105
+ const factoryRoutes = FactoryController.__routes__;
106
+ const { getPK, apiProperties, path: pkPath } = FromModelController.getRouteParametersFromModel(ModelConstr);
107
+ log.debug(`Creating controller for model: ${modelClazzName} with ${factoryRoutes?.length ?? 0} factory routes`);
108
+ const authConfig = mergedConfig.auth;
109
+ function applyClassAuth(target) {
110
+ if (authConfig?.public) {
111
+ (0, decorators_js_1.Public)()(target);
112
+ }
113
+ else if (authConfig?.roles?.length) {
114
+ (0, decorators_js_1.RequireRoles)(...authConfig.roles)(target);
115
+ }
116
+ else {
117
+ (0, decorators_js_1.Auth)(ModelConstr)(target);
118
+ }
119
+ if (authConfig?.skipModelRoles) {
120
+ (0, common_1.SetMetadata)(constants_js_2.SKIP_MODEL_ROLES_KEY, true)(target);
121
+ }
122
+ }
123
+ let DynamicModelController = DynamicModelController_1 = class DynamicModelController extends controllers_js_1.DecafModelController {
160
124
  static get class() {
161
125
  return ModelConstr;
162
126
  }
163
127
  get class() {
164
128
  return ModelConstr;
165
- // return DynamicModelController.class;
166
129
  }
167
130
  constructor(clientContext) {
168
- super(clientContext);
131
+ super(clientContext, DynamicModelController_1.name);
169
132
  this.pk = decorator_validation_1.Model.pk(ModelConstr);
170
133
  log.info(`Registering dynamic controller for model: ${this.class.name} route: /${routePath}`);
171
134
  }
172
- //
173
- // @ApiOperationFromModel(ModelClazz, "GET", "query/:condition/:orderBy")
174
- // @ApiOperation({ summary: `Retrieve ${modelClazzName} records by query.` })
175
- // @ApiParam({ name: "method", description: "Query method to be called" })
176
- // @ApiOkResponse({
177
- // description: `${modelClazzName} retrieved successfully.`,
178
- // })
179
- // @ApiNotFoundResponse({
180
- // description: `No ${modelClazzName} records matches the query.`,
181
- // })
182
- // async query(
183
- // @Param("condition") condition: Condition<any>,
184
- // @Param("orderBy") orderBy: string,
185
- // @QueryDetails() details: DirectionLimitOffset,
186
- // ) {
187
- // const {direction, limit, offset} = details;
188
- // return this.persistence.query(condition, orderBy as keyof Model, direction, limit, offset);
189
- // }
190
- async listBy(key, details) {
191
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.LIST_BY, true)).for(this.listBy);
192
- return this.persistence(ctx).listBy(key, details.direction, ctx);
193
- }
194
- async paginateBy(key, details) {
195
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.PAGE_BY, true)).for(this.paginateBy);
196
- return this.persistence(ctx).paginateBy(key, details.direction, details, ctx);
197
- }
198
- async find(value, details) {
199
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.FIND, true)).for(this.find);
200
- const direction = (details.direction ??
201
- core_1.OrderDirection.ASC);
202
- return (0, utils_js_1.resolvePersistenceMethod)(this.persistence(ctx), this.find.name, value, direction, ctx);
203
- }
204
- async page(value, details) {
205
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.PAGE, true)).for(this.page);
206
- const { direction = core_1.OrderDirection.ASC, limit, offset, bookmark, } = details;
207
- const ref = {
208
- offset: offset ?? 1,
209
- limit: limit ?? 10,
210
- bookmark,
211
- };
212
- return (0, utils_js_1.resolvePersistenceMethod)(this.persistence(ctx), this.page.name, value, direction, ref, ctx);
213
- }
214
- async findOneBy(key, value) {
215
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.FIND_ONE_BY, true)).for(this.findOneBy);
216
- return this.persistence(ctx).findOneBy(key, value, ctx);
217
- }
218
- async findBy(key, value, details) {
219
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.FIND_BY, true)).for(this.findBy);
220
- return this.persistence(ctx)
221
- .for(ctx.toOverrides())
222
- .findBy(key, value, ctx);
223
- }
224
- async statement(name, args, details) {
225
- const { ctx } = (await this.logCtx([], core_1.PersistenceKeys.STATEMENT, true)).for(this.statement);
226
- const { direction, offset, limit, bookmark } = details;
227
- args = args.map((a) => (typeof a === "string" ? parseInt(a) : a) || a);
228
- const pathDirection = args.length > 1 ? args[1] : undefined;
229
- const resolvedDirection = (direction ?? pathDirection);
230
- if (resolvedDirection && args.length > 1)
231
- args[1] = resolvedDirection;
232
- switch (name) {
233
- case core_1.PreparedStatementKeys.FIND:
234
- case core_1.PreparedStatementKeys.FIND_BY:
235
- break;
236
- case core_1.PreparedStatementKeys.LIST_BY:
237
- args.push(direction);
238
- break;
239
- case core_1.PreparedStatementKeys.PAGE:
240
- case core_1.PreparedStatementKeys.PAGE_BY:
241
- args = [
242
- args[0],
243
- resolvedDirection,
244
- {
245
- limit: limit,
246
- offset: offset,
247
- bookmark: bookmark,
248
- },
249
- ];
250
- break;
251
- case core_1.PreparedStatementKeys.FIND_ONE_BY:
252
- break;
253
- case core_1.PreparedStatementKeys.COUNT_OF:
254
- case core_1.PreparedStatementKeys.MAX_OF:
255
- case core_1.PreparedStatementKeys.MIN_OF:
256
- case core_1.PreparedStatementKeys.AVG_OF:
257
- case core_1.PreparedStatementKeys.SUM_OF:
258
- case core_1.PreparedStatementKeys.DISTINCT_OF:
259
- case core_1.PreparedStatementKeys.GROUP_OF:
260
- // Aggregation methods - args[0] is the field name (if provided)
261
- break;
262
- }
263
- return this.persistence(ctx).statement(name, ...args, ctx);
264
- }
265
- //
266
- // @ApiOperationFromModel(ModelConstr, "GET", "countOf")
267
- // @ApiOperation({ summary: `Count all ${modelClazzName} records.` })
268
- // @ApiOkResponse({
269
- // description: `Count of ${modelClazzName} records.`,
270
- // type: Number,
271
- // })
272
- // async countOf() {
273
- // const { ctx } = (
274
- // await this.logCtx([], PreparedStatementKeys.COUNT_OF, true)
275
- // ).for(this.countOf);
276
- // return this.persistence(ctx).statement(
277
- // PreparedStatementKeys.COUNT_OF,
278
- // ctx
279
- // );
280
- // }
281
- //
282
- // @ApiOperationFromModel(ModelConstr, "GET", "countOf/:field")
283
- // @ApiOperation({ summary: `Count ${modelClazzName} records by field.` })
284
- // @ApiParam({ name: "field", description: "The field to count" })
285
- // @ApiOkResponse({
286
- // description: `Count of ${modelClazzName} records.`,
287
- // type: Number,
288
- // })
289
- // async countOfField(@Param("field") field: string) {
290
- // const { ctx } = (
291
- // await this.logCtx([], PreparedStatementKeys.COUNT_OF, true)
292
- // ).for(this.countOfField);
293
- // return this.persistence(ctx).statement(
294
- // PreparedStatementKeys.COUNT_OF,
295
- // field,
296
- // ctx
297
- // );
298
- // }
299
- //
300
- // @ApiOperationFromModel(ModelConstr, "GET", "maxOf/:field")
301
- // @ApiOperation({
302
- // summary: `Find maximum value of a field in ${modelClazzName}.`,
303
- // })
304
- // @ApiParam({ name: "field", description: "The field to find max of" })
305
- // @ApiOkResponse({
306
- // description: `Maximum value of the field in ${modelClazzName}.`,
307
- // })
308
- // async maxOf(@Param("field") field: string) {
309
- // const { ctx } = (
310
- // await this.logCtx([], PreparedStatementKeys.MAX_OF, true)
311
- // ).for(this.maxOf);
312
- // return this.persistence(ctx).statement(
313
- // PreparedStatementKeys.MAX_OF,
314
- // field,
315
- // ctx
316
- // );
317
- // }
318
- //
319
- // @ApiOperationFromModel(ModelConstr, "GET", "minOf/:field")
320
- // @ApiOperation({
321
- // summary: `Find minimum value of a field in ${modelClazzName}.`,
322
- // })
323
- // @ApiParam({ name: "field", description: "The field to find min of" })
324
- // @ApiOkResponse({
325
- // description: `Minimum value of the field in ${modelClazzName}.`,
326
- // })
327
- // async minOf(@Param("field") field: string) {
328
- // const { ctx } = (
329
- // await this.logCtx([], PreparedStatementKeys.MIN_OF, true)
330
- // ).for(this.minOf);
331
- // return this.persistence(ctx).statement(
332
- // PreparedStatementKeys.MIN_OF,
333
- // field,
334
- // ctx
335
- // );
336
- // }
337
- //
338
- // @ApiOperationFromModel(ModelConstr, "GET", "avgOf/:field")
339
- // @ApiOperation({
340
- // summary: `Calculate average of a field in ${modelClazzName}.`,
341
- // })
342
- // @ApiParam({
343
- // name: "field",
344
- // description: "The field to calculate average of",
345
- // })
346
- // @ApiOkResponse({
347
- // description: `Average value of the field in ${modelClazzName}.`,
348
- // type: Number,
349
- // })
350
- // async avgOf(@Param("field") field: string) {
351
- // const { ctx } = (
352
- // await this.logCtx([], PreparedStatementKeys.AVG_OF, true)
353
- // ).for(this.avgOf);
354
- // return this.persistence(ctx).statement(
355
- // PreparedStatementKeys.AVG_OF,
356
- // field,
357
- // ctx
358
- // );
359
- // }
360
- //
361
- // @ApiOperationFromModel(ModelConstr, "GET", "sumOf/:field")
362
- // @ApiOperation({
363
- // summary: `Calculate sum of a field in ${modelClazzName}.`,
364
- // })
365
- // @ApiParam({ name: "field", description: "The field to calculate sum of" })
366
- // @ApiOkResponse({
367
- // description: `Sum of the field in ${modelClazzName}.`,
368
- // type: Number,
369
- // })
370
- // async sumOf(@Param("field") field: string) {
371
- // const { ctx } = (
372
- // await this.logCtx([], PreparedStatementKeys.SUM_OF, true)
373
- // ).for(this.sumOf);
374
- // return this.persistence(ctx).statement(
375
- // PreparedStatementKeys.SUM_OF,
376
- // field,
377
- // ctx
378
- // );
379
- // }
380
- //
381
- // @ApiOperationFromModel(ModelConstr, "GET", "distinctOf/:field")
382
- // @ApiOperation({
383
- // summary: `Find distinct values of a field in ${modelClazzName}.`,
384
- // })
385
- // @ApiParam({
386
- // name: "field",
387
- // description: "The field to find distinct values of",
388
- // })
389
- // @ApiOkResponse({
390
- // description: `Distinct values of the field in ${modelClazzName}.`,
391
- // type: [String],
392
- // })
393
- // async distinctOf(@Param("field") field: string) {
394
- // const { ctx } = (
395
- // await this.logCtx([], PreparedStatementKeys.DISTINCT_OF, true)
396
- // ).for(this.distinctOf);
397
- // return this.persistence(ctx).statement(
398
- // PreparedStatementKeys.DISTINCT_OF,
399
- // field,
400
- // ctx
401
- // );
402
- // }
403
- //
404
- // @ApiOperationFromModel(ModelConstr, "GET", "groupOf/:field")
405
- // @ApiOperation({
406
- // summary: `Group ${modelClazzName} records by a field.`,
407
- // })
408
- // @ApiParam({ name: "field", description: "The field to group by" })
409
- // @ApiOkResponse({
410
- // description: `${modelClazzName} records grouped by the field.`,
411
- // })
412
- // async groupOf(@Param("field") field: string) {
413
- // const { ctx } = (
414
- // await this.logCtx([], PreparedStatementKeys.GROUP_OF, true)
415
- // ).for(this.groupOf);
416
- // return this.persistence(ctx).statement(
417
- // PreparedStatementKeys.GROUP_OF,
418
- // field,
419
- // ctx
420
- // );
421
- // }
422
- async createAll(data, resp) {
423
- const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.CREATE_ALL, true)).for(this.createAll);
424
- log.verbose(`creating new ${modelClazzName}`);
425
- let created;
426
- try {
427
- created = await this.persistence(ctx).createAll(data.map((d) => new ModelConstr(d)), ctx);
428
- }
429
- catch (e) {
430
- log.error(`Failed to create new ${modelClazzName}`, e);
431
- throw e;
135
+ };
136
+ DynamicModelController = DynamicModelController_1 = __decorate([
137
+ (0, common_1.Controller)(routePath),
138
+ (0, swagger_1.ApiTags)(modelClazzName),
139
+ (0, swagger_1.ApiExtraModels)(ModelConstr),
140
+ __metadata("design:paramtypes", [index_js_2.DecafRequestContext])
141
+ ], DynamicModelController);
142
+ applyClassAuth(DynamicModelController);
143
+ if (factoryRoutes) {
144
+ const sortedRoutes = [...factoryRoutes].sort((a, b) => {
145
+ const aSegments = a.path.split("/").filter(Boolean);
146
+ const bSegments = b.path.split("/").filter(Boolean);
147
+ const aParamCount = aSegments.filter((s) => s.startsWith(":")).length;
148
+ const bParamCount = bSegments.filter((s) => s.startsWith(":")).length;
149
+ const aLiteralCount = aSegments.length - aParamCount;
150
+ const bLiteralCount = bSegments.length - bParamCount;
151
+ if (aLiteralCount !== bLiteralCount)
152
+ return bLiteralCount - aLiteralCount;
153
+ if (aParamCount !== bParamCount)
154
+ return aParamCount - bParamCount;
155
+ return 0;
156
+ });
157
+ for (const route of sortedRoutes) {
158
+ const registration = FromModelController.matchRoute(route, pkPath, apiProperties, getPK, ModelConstr, modelClazzName, factoryPersistence);
159
+ if (!registration)
160
+ continue;
161
+ const { methodName, handler, decorators, paramDecorators } = registration;
162
+ const descriptor = FromModelController.defineMethod(DynamicModelController, methodName, handler);
163
+ if (descriptor) {
164
+ const httpDecorator = (0, utils_js_1.HttpVerbToDecorator)(route.method)(route.path.replace(/^\/+|\/+$/g, "") || undefined);
165
+ FromModelController.applyDecorators(DynamicModelController, methodName, [httpDecorator, ...decorators], paramDecorators);
432
166
  }
433
- log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
167
+ }
168
+ }
169
+ return DynamicModelController;
170
+ }
171
+ static getRouteParametersFromModel(ModelClazz) {
172
+ const pk = decorator_validation_1.Model.pk(ModelClazz);
173
+ const composed = decoration_1.Metadata.get(ModelClazz, decoration_1.Metadata.key(db_decorators_1.DBKeys.COMPOSED, pk));
174
+ const composedKeys = composed?.args ?? [];
175
+ const uniqueKeys = Array.isArray(composedKeys) && composedKeys.length > 0
176
+ ? Array.from(new Set([...composedKeys]))
177
+ : Array.from(new Set([pk]));
178
+ const description = decoration_1.Metadata.description(ModelClazz) ?? "";
179
+ const path = `:${uniqueKeys.join("/:")}`;
180
+ const apiProperties = uniqueKeys.map((key) => {
181
+ return {
182
+ name: key,
183
+ description: decoration_1.Metadata.description(ModelClazz, key),
184
+ required: true,
185
+ type: String,
186
+ };
187
+ });
188
+ return {
189
+ path,
190
+ description,
191
+ apiProperties,
192
+ getPK: (...params) => composed?.separator ? params.join(composed.separator) : params.join(""),
193
+ };
194
+ }
195
+ static defineMethod(target, methodName, handler) {
196
+ Object.defineProperty(target.prototype || target, methodName, {
197
+ value: handler,
198
+ writable: false,
199
+ configurable: true,
200
+ enumerable: false,
201
+ });
202
+ return Object.getOwnPropertyDescriptor(target.prototype || target, methodName);
203
+ }
204
+ static applyDecorators(target, methodName, methodDecorators, paramDecorators = []) {
205
+ const proto = target?.prototype ?? target;
206
+ const descriptor = Object.getOwnPropertyDescriptor(proto, methodName);
207
+ methodDecorators.forEach((d) => d(proto, methodName, descriptor));
208
+ paramDecorators.forEach(({ decorator, index }) => decorator(proto, methodName, index));
209
+ }
210
+ static matchRoute(route, pkPath, apiProperties, getPK, ModelConstr, modelClazzName, persistence) {
211
+ const { method, path } = route;
212
+ const normalizedPath = path.replace(/^\/+|\/+$/g, "");
213
+ if (method === "POST" && normalizedPath === "") {
214
+ return FromModelController.createRegistration("create", FromModelController.createCreateHandler(ModelConstr, modelClazzName), FromModelController.createCreateDecorators(ModelConstr, modelClazzName), [{ decorator: (0, index_js_1.DecafBody)(), index: 0 }, { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 }]);
215
+ }
216
+ if (method === "POST" && normalizedPath === "bulk") {
217
+ return FromModelController.createRegistration("createAll", FromModelController.createBulkCreateHandler(ModelConstr, modelClazzName), FromModelController.bulkCreateDecorators(ModelConstr, modelClazzName), [{ decorator: (0, index_js_1.DecafBody)(), index: 0 }, { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 }]);
218
+ }
219
+ if (method === "GET" && normalizedPath === "bulk") {
220
+ return FromModelController.createRegistration("readAll", FromModelController.createBulkReadHandler(modelClazzName), FromModelController.bulkReadDecorators(ModelConstr, modelClazzName), [{ decorator: (0, common_1.Query)("ids"), index: 0 }]);
221
+ }
222
+ if (method === "PUT" && normalizedPath === "bulk") {
223
+ return FromModelController.createRegistration("updateAll", FromModelController.createBulkUpdateHandler(modelClazzName), FromModelController.bulkUpdateDecorators(ModelConstr, modelClazzName, apiProperties), [{ decorator: (0, index_js_1.DecafBody)(), index: 0 }, { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 }]);
224
+ }
225
+ if (method === "DELETE" && normalizedPath === "bulk") {
226
+ return FromModelController.createRegistration("deleteAll", FromModelController.createBulkDeleteHandler(modelClazzName), FromModelController.bulkDeleteDecorators(ModelConstr, modelClazzName, apiProperties), [{ decorator: (0, common_1.Query)("ids"), index: 0 }, { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 }]);
227
+ }
228
+ if (method === "GET" && normalizedPath === pkPath) {
229
+ return FromModelController.createRegistration("read", FromModelController.createReadHandler(getPK, modelClazzName), FromModelController.readDecorators(ModelConstr, modelClazzName, apiProperties, pkPath), [{ decorator: (0, index_js_1.DecafParams)(apiProperties), index: 0 }]);
230
+ }
231
+ if (method === "PUT" && normalizedPath === pkPath) {
232
+ return FromModelController.createRegistration("update", FromModelController.createUpdateHandler(getPK, ModelConstr, modelClazzName), FromModelController.updateDecorators(ModelConstr, modelClazzName, apiProperties, pkPath), [
233
+ { decorator: (0, index_js_1.DecafParams)(apiProperties), index: 0 },
234
+ { decorator: (0, index_js_1.DecafBody)(), index: 1 },
235
+ { decorator: (0, common_1.Response)({ passthrough: true }), index: 2 },
236
+ ]);
237
+ }
238
+ if (method === "DELETE" && normalizedPath === pkPath) {
239
+ return FromModelController.createRegistration("delete", FromModelController.createDeleteHandler(getPK, modelClazzName), FromModelController.deleteDecorators(ModelConstr, modelClazzName, apiProperties, pkPath), [
240
+ { decorator: (0, index_js_1.DecafParams)(apiProperties), index: 0 },
241
+ { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 },
242
+ ]);
243
+ }
244
+ // Composed PK fallback routes (filterEmpty) — path differs from pkPath
245
+ const fallbackSegments = normalizedPath.split("/").filter(Boolean);
246
+ const isAllParams = fallbackSegments.length > 0 && fallbackSegments.every((s) => s.startsWith(":"));
247
+ if (isAllParams && normalizedPath !== pkPath) {
248
+ const fallbackApiProps = fallbackSegments.map((s) => s.slice(1)).map((name) => ({
249
+ name,
250
+ description: `${name} parameter`,
251
+ required: true,
252
+ type: String,
253
+ }));
254
+ const suffix = fallbackSegments.map((s) => s.slice(1)).join("And");
255
+ if (method === "GET") {
256
+ return FromModelController.createRegistration(`readBy${suffix}`, FromModelController.createReadHandler(getPK, modelClazzName), FromModelController.readDecorators(ModelConstr, modelClazzName, fallbackApiProps, normalizedPath), [{ decorator: (0, index_js_1.DecafParams)(fallbackApiProps), index: 0 }]);
257
+ }
258
+ if (method === "PUT") {
259
+ return FromModelController.createRegistration(`updateBy${suffix}`, FromModelController.createUpdateHandler(getPK, ModelConstr, modelClazzName), FromModelController.updateDecorators(ModelConstr, modelClazzName, fallbackApiProps, normalizedPath), [
260
+ { decorator: (0, index_js_1.DecafParams)(fallbackApiProps), index: 0 },
261
+ { decorator: (0, index_js_1.DecafBody)(), index: 1 },
262
+ { decorator: (0, common_1.Response)({ passthrough: true }), index: 2 },
263
+ ]);
264
+ }
265
+ if (method === "DELETE") {
266
+ return FromModelController.createRegistration(`deleteBy${suffix}`, FromModelController.createDeleteHandler(getPK, modelClazzName), FromModelController.deleteDecorators(ModelConstr, modelClazzName, fallbackApiProps, normalizedPath), [
267
+ { decorator: (0, index_js_1.DecafParams)(fallbackApiProps), index: 0 },
268
+ { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 },
269
+ ]);
270
+ }
271
+ }
272
+ if (method === "GET" && normalizedPath === "statement/:method/*args") {
273
+ return FromModelController.createRegistration("statement", FromModelController.createStatementHandler(modelClazzName), FromModelController.statementDecorators(ModelConstr, modelClazzName), [
274
+ { decorator: (0, common_1.Param)("method"), index: 0 },
275
+ { decorator: (0, common_1.Param)("args"), index: 1 },
276
+ { decorator: (0, index_js_1.DecafQuery)(), index: 2 },
277
+ ]);
278
+ }
279
+ const statementRoutes = {
280
+ "listBy/:key": core_1.PreparedStatementKeys.LIST_BY,
281
+ "paginateBy/:key/:page": core_1.PreparedStatementKeys.PAGE_BY,
282
+ "find/:value": core_1.PreparedStatementKeys.FIND,
283
+ "page/:value": core_1.PreparedStatementKeys.PAGE,
284
+ "findOneBy/:key/:value": core_1.PreparedStatementKeys.FIND_ONE_BY,
285
+ "findBy/:key/:value": core_1.PreparedStatementKeys.FIND_BY,
286
+ "countOf/:field": core_1.PreparedStatementKeys.COUNT_OF,
287
+ "maxOf/:field": core_1.PreparedStatementKeys.MAX_OF,
288
+ "minOf/:field": core_1.PreparedStatementKeys.MIN_OF,
289
+ "avgOf/:field": core_1.PreparedStatementKeys.AVG_OF,
290
+ "sumOf/:field": core_1.PreparedStatementKeys.SUM_OF,
291
+ "distinctOf/:field": core_1.PreparedStatementKeys.DISTINCT_OF,
292
+ "groupOf/:field": core_1.PreparedStatementKeys.GROUP_OF,
293
+ };
294
+ const statementKey = statementRoutes[normalizedPath];
295
+ if (statementKey && method === "GET") {
296
+ return FromModelController.createRegistration(FromModelController.statementMethodName(normalizedPath), FromModelController.createStatementShortcutHandler(statementKey, modelClazzName), FromModelController.statementShortcutDecorators(ModelConstr, modelClazzName, normalizedPath, statementKey), FromModelController.statementShortcutParams(normalizedPath));
297
+ }
298
+ if (method === "GET" && normalizedPath.startsWith("query/")) {
299
+ const queryMethod = normalizedPath.replace(/^query\//, "").split("/")[0];
300
+ return FromModelController.createRegistration(queryMethod, FromModelController.createComplexQueryHandler(queryMethod), FromModelController.getQueryDecorators(queryMethod, normalizedPath, "GET", true), FromModelController.complexQueryParams(normalizedPath));
301
+ }
302
+ // Fallback for custom @route() paths (e.g. "metadata/for-product/:productCode")
303
+ const pathSegments = normalizedPath.split("/").filter(Boolean);
304
+ const knownPrefixes = new Set([
305
+ "listBy", "findBy", "findByPaginate", "findOneBy", "paginateBy",
306
+ "find", "page", "countOf", "maxOf", "minOf", "avgOf", "sumOf",
307
+ "distinctOf", "groupOf", "statement", "bulk", "query",
308
+ ]);
309
+ if (pathSegments.length > 0 &&
310
+ !normalizedPath.startsWith("query/") &&
311
+ !knownPrefixes.has(pathSegments[0])) {
312
+ // Look up the actual method name from @route metadata by matching the path.
313
+ // The @route decorator stores { path, httpMethod, handler } keyed by method name
314
+ // on the repository constructor.
315
+ const routeMetadata = decoration_1.Metadata.get(persistence?.constructor, decoration_1.Metadata.key(constants_js_1.DECAF_ROUTE)) ?? {};
316
+ const matchedEntry = Object.entries(routeMetadata).find(([, info]) => info &&
317
+ typeof info === "object" &&
318
+ info.path?.replace(/^\/+|\/+$/g, "") === normalizedPath);
319
+ const actualMethodName = matchedEntry?.[0] || pathSegments[0];
320
+ const paramSegments = pathSegments.filter((s) => s.startsWith(":"));
321
+ const apiPathParams = paramSegments.map((s) => s.slice(1)).map((name) => ({
322
+ name,
323
+ description: `${name} parameter for the query`,
324
+ required: true,
325
+ type: String,
326
+ }));
327
+ return FromModelController.createRegistration(actualMethodName, FromModelController.createCustomRouteHandler(actualMethodName), [
328
+ ...apiPathParams.map((p) => (0, swagger_1.ApiParam)(p)),
329
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve records using "${actualMethodName}".` }),
330
+ (0, swagger_1.ApiOkResponse)({ description: "Result successfully retrieved." }),
331
+ (0, swagger_1.ApiNoContentResponse)({ description: "No content returned by the method." }),
332
+ ], FromModelController.complexQueryParams(normalizedPath));
333
+ }
334
+ return undefined;
335
+ }
336
+ static createRegistration(methodName, handler, decorators, paramDecorators) {
337
+ return { methodName, handler, decorators, paramDecorators };
338
+ }
339
+ static statementMethodName(path) {
340
+ const firstSegment = path.split("/")[0];
341
+ return firstSegment;
342
+ }
343
+ static statementShortcutParams(path) {
344
+ const segments = path.split("/").filter((s) => s.startsWith(":"));
345
+ const params = [];
346
+ segments.forEach((seg, i) => {
347
+ const name = seg.replace(":", "");
348
+ params.push({ decorator: (0, common_1.Param)(name), index: i });
349
+ });
350
+ if (path.startsWith("listBy/") ||
351
+ path.startsWith("paginateBy/") ||
352
+ path.startsWith("find/") ||
353
+ path.startsWith("page/")) {
354
+ params.push({ decorator: (0, index_js_1.DecafQuery)(), index: segments.length });
355
+ }
356
+ return params;
357
+ }
358
+ static complexQueryParams(path) {
359
+ const segments = path.split("/").filter((s) => s.startsWith(":"));
360
+ const params = [];
361
+ segments.forEach((seg, i) => {
362
+ const name = seg.replace(":", "");
363
+ params.push({ decorator: (0, common_1.Param)(name), index: i });
364
+ });
365
+ if (path.startsWith("query/")) {
366
+ params.push({ decorator: (0, index_js_1.DecafQuery)(), index: segments.length });
367
+ }
368
+ return params;
369
+ }
370
+ static createCreateHandler(ModelConstr, modelClazzName) {
371
+ return async function create(data, resp) {
372
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.CREATE, true)).for(create);
373
+ log.verbose(`creating new ${modelClazzName}`);
374
+ let created;
375
+ try {
376
+ created = await this.persistence(ctx).create(data, ctx);
377
+ }
378
+ catch (e) {
379
+ log.error(`Failed to create new ${modelClazzName}`, e);
380
+ throw e;
381
+ }
382
+ log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
383
+ if (resp)
434
384
  ctx.toResponse(resp);
435
- return created;
385
+ return created;
386
+ };
387
+ }
388
+ static createBulkCreateHandler(ModelConstr, modelClazzName) {
389
+ return async function createAll(data, resp) {
390
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.CREATE_ALL, true)).for(createAll);
391
+ log.verbose(`creating new ${modelClazzName}`);
392
+ let created;
393
+ try {
394
+ created = await this.persistence(ctx).createAll(data.map((d) => new ModelConstr(d)), ctx);
436
395
  }
437
- async create(data, resp) {
438
- const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.CREATE, true)).for(this.create);
439
- log.verbose(`creating new ${modelClazzName}`);
440
- let created;
441
- try {
442
- const persistence = this.persistence(ctx);
443
- created = await persistence.create(data, ctx);
444
- }
445
- catch (e) {
446
- log.error(`Failed to create new ${modelClazzName}`, e);
447
- throw e;
448
- }
449
- log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
396
+ catch (e) {
397
+ log.error(`Failed to create new ${modelClazzName}`, e);
398
+ throw e;
399
+ }
400
+ log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
401
+ if (resp)
450
402
  ctx.toResponse(resp);
451
- return created;
452
- }
453
- async readAll(ids) {
454
- const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.READ_ALL, true)).for(this.readAll);
455
- const normalizedIds = Array.isArray(ids) ? ids : [ids];
456
- let read;
457
- try {
458
- log.debug(`reading ${normalizedIds} ${modelClazzName}: ${normalizedIds}`);
459
- const persistence = this.persistence(ctx);
460
- read = await persistence.readAll(normalizedIds, ctx);
403
+ return created;
404
+ };
405
+ }
406
+ static createBulkReadHandler(modelClazzName) {
407
+ return async function readAll(ids) {
408
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.READ_ALL, true)).for(readAll);
409
+ const normalizedIds = Array.isArray(ids) ? ids : [ids];
410
+ let read;
411
+ try {
412
+ log.debug(`reading ${normalizedIds} ${modelClazzName}`);
413
+ read = await this.persistence(ctx).readAll(normalizedIds, ctx);
414
+ }
415
+ catch (e) {
416
+ log.error(`Failed to read ${modelClazzName}`, e);
417
+ throw e;
418
+ }
419
+ log.info(`read ${read.length} ${modelClazzName}`);
420
+ return read;
421
+ };
422
+ }
423
+ static createBulkUpdateHandler(modelClazzName) {
424
+ return async function updateAll(body, resp) {
425
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL, true)).for(updateAll);
426
+ let updated;
427
+ try {
428
+ log.info(`updating ${body.length} ${modelClazzName}`);
429
+ updated = await this.persistence(ctx).updateAll(body, ctx);
430
+ }
431
+ catch (e) {
432
+ log.error(e);
433
+ throw e;
434
+ }
435
+ if (resp)
436
+ ctx.toResponse(resp);
437
+ return updated;
438
+ };
439
+ }
440
+ static createBulkDeleteHandler(modelClazzName) {
441
+ return async function deleteAll(ids, resp) {
442
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.DELETE_ALL, true)).for(deleteAll);
443
+ const normalizedIds = Array.isArray(ids) ? ids : [ids];
444
+ let read;
445
+ try {
446
+ log.debug(`deleting ${normalizedIds.length} ${modelClazzName}`);
447
+ read = await this.persistence(ctx).deleteAll(normalizedIds, ctx);
448
+ }
449
+ catch (e) {
450
+ log.error(`Failed to delete ${modelClazzName}`, e);
451
+ throw e;
452
+ }
453
+ log.info(`deleted ${read.length} ${modelClazzName}`);
454
+ if (resp)
455
+ ctx.toResponse(resp);
456
+ return read;
457
+ };
458
+ }
459
+ static createReadHandler(getPK, modelClazzName) {
460
+ return async function read(routeParams) {
461
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.READ, true)).for(read);
462
+ const id = getPK(...routeParams.valuesInOrder);
463
+ if (typeof id === "undefined")
464
+ throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
465
+ let readResult;
466
+ try {
467
+ log.debug(`reading ${modelClazzName} with ${this.pk} ${id}`);
468
+ readResult = await this.persistence(ctx).read(id, ctx);
469
+ }
470
+ catch (e) {
471
+ log.error(`Failed to read ${modelClazzName} with id ${id}`, e);
472
+ throw e;
473
+ }
474
+ log.info(`read ${modelClazzName} with id ${readResult[this.pk]}`);
475
+ return readResult;
476
+ };
477
+ }
478
+ static createUpdateHandler(getPK, ModelConstr, modelClazzName) {
479
+ return async function update(routeParams, body, resp) {
480
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.UPDATE, true)).for(update);
481
+ const id = getPK(...routeParams.valuesInOrder);
482
+ if (typeof id === "undefined")
483
+ throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
484
+ let updated;
485
+ try {
486
+ log.info(`updating ${modelClazzName} with ${this.pk} ${id}`);
487
+ const payload = JSON.parse(JSON.stringify(body));
488
+ updated = await this.persistence(ctx).update(new ModelConstr({ ...payload, [this.pk]: id }), ctx);
489
+ }
490
+ catch (e) {
491
+ log.error(e);
492
+ throw e;
493
+ }
494
+ if (resp)
495
+ ctx.toResponse(resp);
496
+ return updated;
497
+ };
498
+ }
499
+ static createDeleteHandler(getPK, modelClazzName) {
500
+ return async function remove(routeParams, resp) {
501
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.DELETE, true)).for(remove);
502
+ const id = getPK(...routeParams.valuesInOrder);
503
+ if (typeof id === "undefined")
504
+ throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
505
+ let del;
506
+ try {
507
+ log.debug(`deleting ${modelClazzName} with ${this.pk} ${id}`);
508
+ del = await this.persistence(ctx).delete(id, ctx);
509
+ }
510
+ catch (e) {
511
+ log.error(`Failed to delete ${modelClazzName} with id ${id}`, e);
512
+ throw e;
513
+ }
514
+ log.info(`deleted ${modelClazzName} with id ${id}`);
515
+ if (resp)
516
+ ctx.toResponse(resp);
517
+ return del;
518
+ };
519
+ }
520
+ static createStatementHandler(modelClazzName) {
521
+ return async function statement(name, args, details) {
522
+ const { ctx } = (await this.logCtx([], core_1.PersistenceKeys.STATEMENT, true)).for(statement);
523
+ const { direction, offset, limit, bookmark } = details;
524
+ args = args.map((a) => (typeof a === "string" ? parseInt(a) : a) || a);
525
+ const pathDirection = args.length > 1 ? args[1] : undefined;
526
+ const resolvedDirection = (direction ?? pathDirection);
527
+ if (resolvedDirection && args.length > 1)
528
+ args[1] = resolvedDirection;
529
+ switch (name) {
530
+ case core_1.PreparedStatementKeys.FIND:
531
+ case core_1.PreparedStatementKeys.FIND_BY:
532
+ break;
533
+ case core_1.PreparedStatementKeys.LIST_BY:
534
+ args.push(direction);
535
+ break;
536
+ case core_1.PreparedStatementKeys.PAGE:
537
+ case core_1.PreparedStatementKeys.PAGE_BY:
538
+ args = [
539
+ args[0],
540
+ resolvedDirection,
541
+ { limit, offset, bookmark },
542
+ ];
543
+ break;
544
+ case core_1.PreparedStatementKeys.FIND_ONE_BY:
545
+ break;
546
+ case core_1.PreparedStatementKeys.COUNT_OF:
547
+ case core_1.PreparedStatementKeys.MAX_OF:
548
+ case core_1.PreparedStatementKeys.MIN_OF:
549
+ case core_1.PreparedStatementKeys.AVG_OF:
550
+ case core_1.PreparedStatementKeys.SUM_OF:
551
+ case core_1.PreparedStatementKeys.DISTINCT_OF:
552
+ case core_1.PreparedStatementKeys.GROUP_OF:
553
+ break;
554
+ }
555
+ return this.persistence(ctx).statement(name, ...args, ctx);
556
+ };
557
+ }
558
+ static createStatementShortcutHandler(statementKey, modelClazzName) {
559
+ return async function statementShortcut(...args) {
560
+ const { ctx } = (await this.logCtx([], statementKey, true)).for(statementShortcut);
561
+ switch (statementKey) {
562
+ case core_1.PreparedStatementKeys.LIST_BY: {
563
+ const [key, details] = args;
564
+ return this.persistence(ctx).listBy(key, details?.direction, ctx);
461
565
  }
462
- catch (e) {
463
- log.error(`Failed to ${modelClazzName} with id ${normalizedIds}`, e);
464
- throw e;
566
+ case core_1.PreparedStatementKeys.PAGE_BY: {
567
+ const [key, page, details] = args;
568
+ return this.persistence(ctx).paginateBy(key, details?.direction, {
569
+ limit: details?.limit,
570
+ offset: details?.offset,
571
+ page,
572
+ }, ctx);
465
573
  }
466
- log.info(`read ${read.length} ${modelClazzName}`);
467
- return read;
468
- }
469
- async read(routeParams) {
470
- const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.READ, true)).for(this.read);
471
- const id = getPK(...routeParams.valuesInOrder);
472
- if (typeof id === "undefined")
473
- throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
474
- let read;
475
- try {
476
- log.debug(`reading ${modelClazzName} with ${this.pk} ${id}`);
574
+ case core_1.PreparedStatementKeys.FIND: {
575
+ const [value, details] = args;
576
+ const direction = details?.direction ?? core_1.OrderDirection.ASC;
477
577
  const persistence = this.persistence(ctx);
478
- read = await persistence.read(id, ctx);
479
- }
480
- catch (e) {
481
- log.error(`Failed to read ${modelClazzName} with id ${id}`, e);
482
- throw e;
483
- }
484
- log.info(`read ${modelClazzName} with id ${read[this.pk]}`);
485
- return read;
486
- }
487
- async updateAll(body, resp) {
488
- const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL, true)).for(this.updateAll);
489
- let updated;
490
- try {
491
- log.info(`updating ${body.length} ${modelClazzName}`);
492
- updated = await this.persistence(ctx).updateAll(body, ctx);
493
- }
494
- catch (e) {
495
- log.error(e);
496
- throw e;
578
+ if (typeof persistence.find === "function")
579
+ return persistence.find(value, direction, ctx);
580
+ return persistence.statement(core_1.PreparedStatementKeys.FIND, value, direction, ctx);
497
581
  }
498
- ctx.toResponse(resp);
499
- return updated;
500
- }
501
- async update(routeParams, body, resp) {
502
- const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.UPDATE, true)).for(this.update);
503
- const id = getPK(...routeParams.valuesInOrder);
504
- if (typeof id === "undefined")
505
- throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
506
- let updated;
507
- try {
508
- log.info(`updating ${modelClazzName} with ${this.pk} ${id}`);
509
- const payload = JSON.parse(JSON.stringify(body));
582
+ case core_1.PreparedStatementKeys.PAGE: {
583
+ const [value, details] = args;
584
+ const ref = {
585
+ offset: details?.offset ?? 1,
586
+ limit: details?.limit ?? 10,
587
+ bookmark: details?.bookmark,
588
+ };
510
589
  const persistence = this.persistence(ctx);
511
- updated = await persistence.update(new ModelConstr({
512
- ...payload,
513
- [this.pk]: id,
514
- }), ctx);
515
- }
516
- catch (e) {
517
- log.error(e);
518
- throw e;
590
+ const direction = details?.direction ?? core_1.OrderDirection.ASC;
591
+ if (typeof persistence.page === "function")
592
+ return persistence.page(value, direction, ref, ctx);
593
+ return persistence.statement(core_1.PreparedStatementKeys.PAGE, value, direction, ref, ctx);
519
594
  }
520
- ctx.toResponse(resp);
521
- return updated;
522
- }
523
- async deleteAll(ids, resp) {
524
- const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.DELETE_ALL, true)).for(this.deleteAll);
525
- const normalizedIds = Array.isArray(ids) ? ids : [ids];
526
- let read;
527
- try {
528
- log.debug(`deleting ${normalizedIds.length} ${modelClazzName}: ${normalizedIds}`);
529
- read = await this.persistence(ctx).deleteAll(normalizedIds, ctx);
595
+ case core_1.PreparedStatementKeys.FIND_ONE_BY: {
596
+ const [key, value] = args;
597
+ return this.persistence(ctx).findOneBy(key, value, ctx);
530
598
  }
531
- catch (e) {
532
- log.error(`Failed to delete ${modelClazzName} with id ${normalizedIds}`, e);
533
- throw e;
599
+ case core_1.PreparedStatementKeys.FIND_BY: {
600
+ const [key, value] = args;
601
+ return this.persistence(ctx)
602
+ .for(ctx.toOverrides())
603
+ .findBy(key, value, ctx);
534
604
  }
535
- log.info(`deleted ${read.length} ${modelClazzName}`);
536
- ctx.toResponse(resp);
537
- return read;
538
- }
539
- async delete(routeParams, resp) {
540
- const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.DELETE, true)).for(this.delete);
541
- const id = getPK(...routeParams.valuesInOrder);
542
- if (typeof id === "undefined")
543
- throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
544
- let del;
545
- try {
546
- log.debug(`deleting ${modelClazzName} with ${this.pk} ${id}`);
547
- del = await this.persistence(ctx).delete(id, ctx);
605
+ default:
606
+ if (statementKey === core_1.PreparedStatementKeys.COUNT_OF ||
607
+ statementKey === core_1.PreparedStatementKeys.MAX_OF ||
608
+ statementKey === core_1.PreparedStatementKeys.MIN_OF ||
609
+ statementKey === core_1.PreparedStatementKeys.AVG_OF ||
610
+ statementKey === core_1.PreparedStatementKeys.SUM_OF ||
611
+ statementKey === core_1.PreparedStatementKeys.DISTINCT_OF ||
612
+ statementKey === core_1.PreparedStatementKeys.GROUP_OF) {
613
+ const [field] = args;
614
+ return this.persistence(ctx).statement(statementKey, field, ctx);
615
+ }
616
+ throw new Error(`Unknown statement: ${statementKey}`);
617
+ }
618
+ };
619
+ }
620
+ static createComplexQueryHandler(methodName) {
621
+ return async function complexQuery(...args) {
622
+ const log = this.log?.for?.(complexQuery);
623
+ try {
624
+ if (log)
625
+ log.debug(`Invoking custom query "${methodName}"`);
626
+ const { ctx } = (await this.logCtx([], methodName, true)).for(complexQuery);
627
+ const persistence = this.persistence(ctx);
628
+ const spreadArgs = FromModelController.extractQueryArgs(args);
629
+ if (typeof persistence[methodName] === "function") {
630
+ return persistence[methodName](...spreadArgs, ctx);
548
631
  }
549
- catch (e) {
550
- log.error(`Failed to delete ${modelClazzName} with id ${id}`, e);
551
- throw e;
632
+ if (typeof persistence.statement === "function") {
633
+ return persistence.statement(methodName, ...spreadArgs, ctx);
552
634
  }
553
- log.info(`deleted ${modelClazzName} with id ${id}`);
554
- ctx.toResponse(resp);
555
- return del;
635
+ throw new Error(`Persistence method "${methodName}" not found on ${persistence?.constructor?.name}`);
636
+ }
637
+ catch (e) {
638
+ if (log)
639
+ log.error(`Custom query "${methodName}" failed`, e);
640
+ throw e;
556
641
  }
557
642
  };
558
- __decorate([
559
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "listBy/:key"),
560
- (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
561
- (0, swagger_1.ApiParam)({ name: "key", description: "the model key to sort by" }),
562
- (0, swagger_1.ApiQuery)({ name: "direction", required: true, enum: core_1.OrderDirection }),
563
- (0, swagger_1.ApiOkResponse)({
564
- description: `${modelClazzName} listed successfully.`,
565
- }),
566
- __param(0, (0, common_1.Param)("key")),
567
- __param(1, (0, index_js_1.DecafQuery)()),
568
- __metadata("design:type", Function),
569
- __metadata("design:paramtypes", [String, Object]),
570
- __metadata("design:returntype", Promise)
571
- ], DynamicModelController.prototype, "listBy", null);
572
- __decorate([
573
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "paginateBy/:key/:page"),
574
- (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
575
- (0, swagger_1.ApiParam)({ name: "key", description: "the model key to sort by" }),
576
- (0, swagger_1.ApiParam)({
577
- name: "page",
578
- description: "the page to retrieve or the bookmark",
579
- }),
580
- (0, swagger_1.ApiQuery)({
581
- name: "direction",
582
- required: true,
583
- enum: core_1.OrderDirection,
584
- description: "the sort order",
585
- }),
586
- (0, swagger_1.ApiQuery)({ name: "limit", required: true, description: "the page size" }),
587
- (0, swagger_1.ApiQuery)({ name: "offset", description: "the bookmark when necessary" }),
588
- (0, swagger_1.ApiOkResponse)({
589
- description: `${modelClazzName} listed paginated.`,
590
- }),
591
- __param(0, (0, common_1.Param)("key")),
592
- __param(1, (0, index_js_1.DecafQuery)()),
593
- __metadata("design:type", Function),
594
- __metadata("design:paramtypes", [String, Object]),
595
- __metadata("design:returntype", Promise)
596
- ], DynamicModelController.prototype, "paginateBy", null);
597
- __decorate([
598
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "find/:value"),
599
- (0, swagger_1.ApiOperation)({
600
- summary: `Find ${modelClazzName} records using the default query attributes.`,
601
- }),
602
- (0, swagger_1.ApiParam)({
603
- name: "value",
604
- description: "The string to match against the default query attributes",
605
- }),
606
- (0, swagger_1.ApiQuery)({
607
- name: "direction",
608
- required: false,
609
- enum: core_1.OrderDirection,
610
- description: "the sort order for the matching results",
611
- }),
612
- (0, swagger_1.ApiOkResponse)({
613
- description: `${modelClazzName} records matching the provided prefix.`,
614
- }),
615
- __param(0, (0, common_1.Param)("value")),
616
- __param(1, (0, index_js_1.DecafQuery)()),
617
- __metadata("design:type", Function),
618
- __metadata("design:paramtypes", [String, Object]),
619
- __metadata("design:returntype", Promise)
620
- ], DynamicModelController.prototype, "find", null);
621
- __decorate([
622
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "page/:value"),
623
- (0, swagger_1.ApiOperation)({
624
- summary: `Page ${modelClazzName} records using the default query attributes.`,
625
- }),
626
- (0, swagger_1.ApiParam)({
627
- name: "value",
628
- description: "The string to match against the default query attributes",
629
- }),
630
- (0, swagger_1.ApiQuery)({
631
- name: "direction",
632
- required: false,
633
- enum: core_1.OrderDirection,
634
- description: "the sort order for the paged results",
635
- }),
636
- (0, swagger_1.ApiQuery)({
637
- name: "limit",
638
- required: false,
639
- description: "page size",
640
- }),
641
- (0, swagger_1.ApiQuery)({
642
- name: "offset",
643
- required: false,
644
- description: "page number",
645
- }),
646
- (0, swagger_1.ApiQuery)({
647
- name: "bookmark",
648
- required: false,
649
- description: "bookmark for cursor pagination",
650
- }),
651
- (0, swagger_1.ApiOkResponse)({
652
- description: `${modelClazzName} records paged by the provided prefix.`,
653
- }),
654
- __param(0, (0, common_1.Param)("value")),
655
- __param(1, (0, index_js_1.DecafQuery)()),
656
- __metadata("design:type", Function),
657
- __metadata("design:paramtypes", [String, Object]),
658
- __metadata("design:returntype", Promise)
659
- ], DynamicModelController.prototype, "page", null);
660
- __decorate([
661
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "findOneBy/:key"),
662
- (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
663
- (0, swagger_1.ApiParam)({ name: "key", description: "the model key to sort by" }),
664
- (0, swagger_1.ApiOkResponse)({
665
- description: `${modelClazzName} listed found.`,
666
- }),
667
- (0, swagger_1.ApiNotFoundResponse)({
668
- description: `No ${modelClazzName} record matches the provided identifier.`,
669
- }),
670
- __param(0, (0, common_1.Param)("key")),
671
- __param(1, (0, common_1.Param)("value")),
672
- __metadata("design:type", Function),
673
- __metadata("design:paramtypes", [String, Object]),
674
- __metadata("design:returntype", Promise)
675
- ], DynamicModelController.prototype, "findOneBy", null);
676
- __decorate([
677
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "findBy/:key/:value"),
678
- (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
679
- (0, swagger_1.ApiParam)({ name: "key", description: "the model key to compare" }),
680
- (0, swagger_1.ApiParam)({ name: "value", description: "the value to match" }),
681
- (0, swagger_1.ApiQuery)({
682
- name: "direction",
683
- required: true,
684
- enum: core_1.OrderDirection,
685
- description: "the sort order when applicable",
686
- }),
687
- (0, swagger_1.ApiOkResponse)({
688
- description: `${modelClazzName} listed found.`,
689
- }),
690
- (0, swagger_1.ApiNotFoundResponse)({
691
- description: `No ${modelClazzName} record matches the provided identifier.`,
692
- }),
693
- __param(0, (0, common_1.Param)("key")),
694
- __param(1, (0, common_1.Param)("value")),
695
- __param(2, (0, index_js_1.DecafQuery)()),
696
- __metadata("design:type", Function),
697
- __metadata("design:paramtypes", [String, Object, Object]),
698
- __metadata("design:returntype", Promise)
699
- ], DynamicModelController.prototype, "findBy", null);
700
- __decorate([
701
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "statement/:method/*args"),
702
- (0, swagger_1.ApiOperation)({
703
- summary: `Executes a prepared statement on ${modelClazzName}.`,
704
- }),
705
- (0, swagger_1.ApiParam)({
706
- name: "method",
707
- description: "the prepared statement to execute",
708
- }),
709
- (0, swagger_1.ApiParam)({
710
- name: "args",
711
- description: "concatenated list of arguments the prepared statement can accept",
712
- }),
713
- (0, swagger_1.ApiQuery)({
714
- name: "direction",
715
- required: true,
716
- enum: core_1.OrderDirection,
717
- description: "the sort order when applicable",
718
- }),
719
- (0, swagger_1.ApiQuery)({
720
- name: "limit",
721
- required: true,
722
- description: "limit or page size when applicable",
723
- }),
724
- (0, swagger_1.ApiQuery)({
725
- name: "offset",
726
- required: true,
727
- description: "offset or bookmark when applicable",
728
- }),
729
- (0, swagger_1.ApiOkResponse)({
730
- description: `${modelClazzName} listed found.`,
731
- }),
732
- (0, swagger_1.ApiNotFoundResponse)({
733
- description: `No ${modelClazzName} record matches the provided identifier.`,
734
- }),
735
- __param(0, (0, common_1.Param)("method")),
736
- __param(1, (0, common_1.Param)("args")),
737
- __param(2, (0, index_js_1.DecafQuery)()),
738
- __metadata("design:type", Function),
739
- __metadata("design:paramtypes", [String, Array, Object]),
740
- __metadata("design:returntype", Promise)
741
- ], DynamicModelController.prototype, "statement", null);
742
- __decorate([
743
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "POST", "bulk"),
643
+ }
644
+ static createCustomRouteHandler(methodName) {
645
+ return async function customRoute(...args) {
646
+ const log = this.log?.for?.(customRoute);
647
+ const { ctx } = (await this.logCtx([], methodName, true)).for(customRoute);
648
+ const persistence = this.persistence(ctx);
649
+ const spreadArgs = FromModelController.extractQueryArgs(args);
650
+ // Try the persistence directly (works when it's a custom Repository)
651
+ if (typeof persistence[methodName] === "function") {
652
+ return persistence[methodName](...spreadArgs, ctx);
653
+ }
654
+ // When persistence is a ModelService, the method lives on the underlying repo
655
+ if (persistence?.repo && typeof persistence.repo[methodName] === "function") {
656
+ return persistence.repo[methodName](...spreadArgs, ctx);
657
+ }
658
+ // Fall back to statement gateway
659
+ if (typeof persistence.statement === "function") {
660
+ return persistence.statement(methodName, ...spreadArgs, ctx);
661
+ }
662
+ throw new Error(`Method "${methodName}" not found on ${persistence?.constructor?.name} or its repo`);
663
+ };
664
+ }
665
+ static extractQueryArgs(args) {
666
+ if (args.length === 0)
667
+ return args;
668
+ const last = args[args.length - 1];
669
+ if (last &&
670
+ typeof last === "object" &&
671
+ !Array.isArray(last)) {
672
+ const queryObj = args.pop();
673
+ const hasDirection = queryObj.direction !== undefined;
674
+ const hasLimit = queryObj.limit !== undefined;
675
+ const hasOffset = queryObj.offset !== undefined;
676
+ if (!hasDirection && !hasLimit && !hasOffset)
677
+ return args;
678
+ const extras = [];
679
+ if (hasDirection)
680
+ extras.push(queryObj.direction);
681
+ else if (hasLimit || hasOffset)
682
+ extras.push(undefined);
683
+ if (hasLimit)
684
+ extras.push(queryObj.limit);
685
+ if (hasOffset)
686
+ extras.push(queryObj.offset);
687
+ return [...args, ...extras];
688
+ }
689
+ return args;
690
+ }
691
+ static createCreateDecorators(ModelConstr, modelClazzName) {
692
+ return [
693
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "POST"),
744
694
  (0, swagger_1.ApiOperation)({ summary: `Create a new ${modelClazzName}.` }),
745
695
  (0, swagger_1.ApiBody)({
746
696
  description: `Payload for ${modelClazzName}`,
747
- schema: {
748
- type: "array",
749
- items: {
750
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
751
- // $ref: getSchemaPath(DtoFor(OperationKeys.CREATE, ModelConstr)),
752
- },
753
- },
697
+ type: (0, DtoBuilder_js_1.DtoFor)(db_decorators_1.OperationKeys.CREATE, ModelConstr),
754
698
  }),
755
699
  (0, swagger_1.ApiCreatedResponse)({
756
700
  description: `${modelClazzName} created successfully.`,
757
- schema: {
758
- type: "array",
759
- items: {
760
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
761
- },
762
- },
701
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
763
702
  }),
764
703
  (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
765
704
  (0, swagger_1.ApiUnprocessableEntityResponse)({
766
705
  description: "Repository rejected the provided payload.",
767
706
  }),
768
- __param(0, (0, index_js_1.DecafBody)()),
769
- __param(1, (0, common_1.Response)({ passthrough: true })),
770
- __metadata("design:type", Function),
771
- __metadata("design:paramtypes", [Array, Object]),
772
- __metadata("design:returntype", Promise)
773
- ], DynamicModelController.prototype, "createAll", null);
774
- __decorate([
775
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "POST"),
707
+ ];
708
+ }
709
+ static bulkCreateDecorators(ModelConstr, modelClazzName) {
710
+ return [
711
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "POST", "bulk"),
776
712
  (0, swagger_1.ApiOperation)({ summary: `Create a new ${modelClazzName}.` }),
777
713
  (0, swagger_1.ApiBody)({
778
714
  description: `Payload for ${modelClazzName}`,
779
- type: (0, DtoBuilder_js_1.DtoFor)(db_decorators_1.OperationKeys.CREATE, ModelConstr),
715
+ schema: {
716
+ type: "array",
717
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
718
+ },
780
719
  }),
781
720
  (0, swagger_1.ApiCreatedResponse)({
782
721
  description: `${modelClazzName} created successfully.`,
783
722
  schema: {
784
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
723
+ type: "array",
724
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
785
725
  },
786
726
  }),
787
727
  (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
788
728
  (0, swagger_1.ApiUnprocessableEntityResponse)({
789
729
  description: "Repository rejected the provided payload.",
790
730
  }),
791
- __param(0, (0, index_js_1.DecafBody)()),
792
- __param(1, (0, common_1.Response)({ passthrough: true })),
793
- __metadata("design:type", Function),
794
- __metadata("design:paramtypes", [Object, Object]),
795
- __metadata("design:returntype", Promise)
796
- ], DynamicModelController.prototype, "create", null);
797
- __decorate([
731
+ ];
732
+ }
733
+ static bulkReadDecorators(ModelConstr, modelClazzName) {
734
+ return [
798
735
  (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "bulk"),
799
- (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
736
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by ids.` }),
800
737
  (0, swagger_1.ApiQuery)({ name: "ids", required: true, type: "array" }),
801
738
  (0, swagger_1.ApiOkResponse)({
802
739
  description: `${modelClazzName} retrieved successfully.`,
803
740
  schema: {
804
741
  type: "array",
805
- items: {
806
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
807
- },
742
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
808
743
  },
809
744
  }),
810
745
  (0, swagger_1.ApiNotFoundResponse)({
811
746
  description: `No ${modelClazzName} record matches the provided identifier.`,
812
747
  }),
813
- __param(0, (0, common_1.Query)("ids")),
814
- __metadata("design:type", Function),
815
- __metadata("design:paramtypes", [Array]),
816
- __metadata("design:returntype", Promise)
817
- ], DynamicModelController.prototype, "readAll", null);
818
- __decorate([
819
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", path),
820
- (0, index_js_1.ApiParamsFromModel)(apiProperties),
821
- (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
822
- (0, swagger_1.ApiOkResponse)({
823
- description: `${modelClazzName} retrieved successfully.`,
824
- schema: {
825
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
826
- },
827
- }),
828
- (0, swagger_1.ApiNotFoundResponse)({
829
- description: `No ${modelClazzName} record matches the provided identifier.`,
830
- }),
831
- __param(0, (0, index_js_1.DecafParams)(apiProperties)),
832
- __metadata("design:type", Function),
833
- __metadata("design:paramtypes", [Object]),
834
- __metadata("design:returntype", Promise)
835
- ], DynamicModelController.prototype, "read", null);
836
- __decorate([
837
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "PUT", `bulk`),
748
+ ];
749
+ }
750
+ static bulkUpdateDecorators(ModelConstr, modelClazzName, apiProperties) {
751
+ return [
752
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "PUT", "bulk"),
838
753
  (0, index_js_1.ApiParamsFromModel)(apiProperties),
839
754
  (0, swagger_1.ApiOperation)({
840
- summary: `Replace an existing ${modelClazzName} record with a new payload.`,
755
+ summary: `Replace existing ${modelClazzName} records with new payloads.`,
841
756
  }),
842
757
  (0, swagger_1.ApiBody)({
843
- description: `Payload for replace a existing record of ${modelClazzName}`,
758
+ description: `Payload for replacing existing records of ${modelClazzName}`,
844
759
  schema: {
845
760
  type: "array",
846
761
  $ref: (0, swagger_1.getSchemaPath)((0, DtoBuilder_js_1.DtoFor)(db_decorators_1.OperationKeys.UPDATE, ModelConstr)),
@@ -850,125 +765,172 @@ class FromModelController {
850
765
  description: `${modelClazzName} updated successfully.`,
851
766
  schema: {
852
767
  type: "array",
853
- items: {
854
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
855
- },
768
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
856
769
  },
857
770
  }),
858
771
  (0, swagger_1.ApiNotFoundResponse)({
859
772
  description: `No ${modelClazzName} record matches the provided identifier.`,
860
773
  }),
861
774
  (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
862
- __param(0, (0, index_js_1.DecafBody)()),
863
- __param(1, (0, common_1.Response)({ passthrough: true })),
864
- __metadata("design:type", Function),
865
- __metadata("design:paramtypes", [Array, Object]),
866
- __metadata("design:returntype", Promise)
867
- ], DynamicModelController.prototype, "updateAll", null);
868
- __decorate([
869
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "PUT", path),
775
+ ];
776
+ }
777
+ static bulkDeleteDecorators(ModelConstr, modelClazzName, apiProperties) {
778
+ return [
779
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "DELETE", "bulk"),
780
+ (0, index_js_1.ApiParamsFromModel)(apiProperties),
781
+ (0, swagger_1.ApiOperation)({ summary: `Delete ${modelClazzName} records by ids.` }),
782
+ (0, swagger_1.ApiQuery)({ name: "ids", required: true, type: "array" }),
783
+ (0, swagger_1.ApiOkResponse)({
784
+ description: `${modelClazzName} deleted successfully.`,
785
+ schema: {
786
+ type: "array",
787
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
788
+ },
789
+ }),
790
+ (0, swagger_1.ApiNotFoundResponse)({
791
+ description: `No ${modelClazzName} record matches the provided identifier.`,
792
+ }),
793
+ ];
794
+ }
795
+ static readDecorators(ModelConstr, modelClazzName, apiProperties, pkPath) {
796
+ return [
797
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", pkPath),
798
+ (0, index_js_1.ApiParamsFromModel)(apiProperties),
799
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
800
+ (0, swagger_1.ApiOkResponse)({
801
+ description: `${modelClazzName} retrieved successfully.`,
802
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
803
+ }),
804
+ (0, swagger_1.ApiNotFoundResponse)({
805
+ description: `No ${modelClazzName} record matches the provided identifier.`,
806
+ }),
807
+ ];
808
+ }
809
+ static updateDecorators(ModelConstr, modelClazzName, apiProperties, pkPath) {
810
+ return [
811
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "PUT", pkPath),
870
812
  (0, index_js_1.ApiParamsFromModel)(apiProperties),
871
813
  (0, swagger_1.ApiOperation)({
872
814
  summary: `Replace an existing ${modelClazzName} record with a new payload.`,
873
815
  }),
874
816
  (0, swagger_1.ApiBody)({
875
- description: `Payload for replace a existing record of ${modelClazzName}`,
817
+ description: `Payload for replacing an existing record of ${modelClazzName}`,
876
818
  type: (0, DtoBuilder_js_1.DtoFor)(db_decorators_1.OperationKeys.UPDATE, ModelConstr),
877
819
  }),
878
820
  (0, swagger_1.ApiOkResponse)({
879
821
  description: `${modelClazzName} updated successfully.`,
880
- schema: {
881
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
882
- },
822
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
883
823
  }),
884
824
  (0, swagger_1.ApiNotFoundResponse)({
885
825
  description: `No ${modelClazzName} record matches the provided identifier.`,
886
826
  }),
887
827
  (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
888
- __param(0, (0, index_js_1.DecafParams)(apiProperties)),
889
- __param(1, (0, index_js_1.DecafBody)()),
890
- __param(2, (0, common_1.Response)({ passthrough: true })),
891
- __metadata("design:type", Function),
892
- __metadata("design:paramtypes", [Object, Object, Object]),
893
- __metadata("design:returntype", Promise)
894
- ], DynamicModelController.prototype, "update", null);
895
- __decorate([
896
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "DELETE", "bulk"),
828
+ ];
829
+ }
830
+ static deleteDecorators(ModelConstr, modelClazzName, apiProperties, pkPath) {
831
+ return [
832
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "DELETE", pkPath),
897
833
  (0, index_js_1.ApiParamsFromModel)(apiProperties),
898
- (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
899
- (0, swagger_1.ApiQuery)({ name: "ids", required: true, type: "array" }),
834
+ (0, swagger_1.ApiOperation)({ summary: `Delete a ${modelClazzName} record by id.` }),
900
835
  (0, swagger_1.ApiOkResponse)({
901
836
  description: `${modelClazzName} deleted successfully.`,
902
- schema: {
903
- type: "array",
904
- items: {
905
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
906
- },
907
- },
837
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
908
838
  }),
909
839
  (0, swagger_1.ApiNotFoundResponse)({
910
840
  description: `No ${modelClazzName} record matches the provided identifier.`,
911
841
  }),
912
- __param(0, (0, common_1.Query)("ids")),
913
- __param(1, (0, common_1.Response)({ passthrough: true })),
914
- __metadata("design:type", Function),
915
- __metadata("design:paramtypes", [Array, Object]),
916
- __metadata("design:returntype", Promise)
917
- ], DynamicModelController.prototype, "deleteAll", null);
918
- __decorate([
919
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "DELETE", path),
920
- (0, index_js_1.ApiParamsFromModel)(apiProperties),
921
- (0, swagger_1.ApiOperation)({ summary: `Delete a ${modelClazzName} record by id.` }),
922
- (0, swagger_1.ApiOkResponse)({
923
- description: `${modelClazzName} deleted successfully.`,
924
- schema: {
925
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
926
- },
842
+ ];
843
+ }
844
+ static statementDecorators(ModelConstr, modelClazzName) {
845
+ return [
846
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "statement/:method/*args"),
847
+ (0, swagger_1.ApiOperation)({
848
+ summary: `Executes a prepared statement on ${modelClazzName}.`,
849
+ }),
850
+ (0, swagger_1.ApiParam)({ name: "method", description: "the prepared statement to execute" }),
851
+ (0, swagger_1.ApiParam)({
852
+ name: "args",
853
+ description: "concatenated list of arguments the prepared statement can accept",
854
+ }),
855
+ (0, swagger_1.ApiQuery)({
856
+ name: "direction",
857
+ required: true,
858
+ enum: core_1.OrderDirection,
859
+ description: "the sort order when applicable",
927
860
  }),
861
+ (0, swagger_1.ApiQuery)({ name: "limit", required: true, description: "limit or page size when applicable" }),
862
+ (0, swagger_1.ApiQuery)({ name: "offset", required: true, description: "offset or bookmark when applicable" }),
863
+ (0, swagger_1.ApiOkResponse)({ description: `${modelClazzName} listed found.` }),
928
864
  (0, swagger_1.ApiNotFoundResponse)({
929
865
  description: `No ${modelClazzName} record matches the provided identifier.`,
930
866
  }),
931
- __param(0, (0, index_js_1.DecafParams)(apiProperties)),
932
- __param(1, (0, common_1.Response)({ passthrough: true })),
933
- __metadata("design:type", Function),
934
- __metadata("design:paramtypes", [Object, Object]),
935
- __metadata("design:returntype", Promise)
936
- ], DynamicModelController.prototype, "delete", null);
937
- DynamicModelController = __decorate([
938
- (0, common_1.Controller)(routePath),
939
- (0, swagger_1.ApiTags)(modelClazzName),
940
- (0, swagger_1.ApiExtraModels)(ModelConstr),
941
- (0, decorators_js_1.Auth)(ModelConstr),
942
- __metadata("design:paramtypes", [index_js_2.DecafRequestContext])
943
- ], DynamicModelController);
944
- return DynamicModelController;
867
+ ];
945
868
  }
946
- static getRouteParametersFromModel(ModelClazz) {
947
- const pk = decorator_validation_1.Model.pk(ModelClazz);
948
- const composed = decoration_1.Metadata.get(ModelClazz, decoration_1.Metadata.key(db_decorators_1.DBKeys.COMPOSED, pk));
949
- const composedKeys = composed?.args ?? [];
950
- // remove duplicates while preserving order
951
- const uniqueKeys = Array.isArray(composedKeys) && composedKeys.length > 0
952
- ? Array.from(new Set([...composedKeys]))
953
- : Array.from(new Set([pk]));
954
- const description = decoration_1.Metadata.description(ModelClazz);
955
- const path = `:${uniqueKeys.join("/:")}`;
956
- const apiProperties = uniqueKeys.map((key) => {
957
- return {
958
- name: key,
959
- description: decoration_1.Metadata.description(ModelClazz, key),
960
- required: true,
961
- type: String,
962
- };
869
+ static statementShortcutDecorators(ModelConstr, modelClazzName, path, statementKey) {
870
+ const base = [
871
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", path),
872
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records.` }),
873
+ (0, swagger_1.ApiOkResponse)({ description: `${modelClazzName} retrieved successfully.` }),
874
+ ];
875
+ const segments = path.split("/").filter((s) => s.startsWith(":"));
876
+ segments.forEach((seg) => {
877
+ const name = seg.replace(":", "");
878
+ base.push((0, swagger_1.ApiParam)({ name, description: `The ${name} parameter` }));
963
879
  });
964
- return {
965
- path,
966
- description,
967
- apiProperties,
968
- getPK: (...params) => composed?.separator ? params.join(composed.separator) : params.join(""),
969
- };
880
+ if (path.startsWith("listBy/") ||
881
+ path.startsWith("paginateBy/") ||
882
+ path.startsWith("find/") ||
883
+ path.startsWith("page/")) {
884
+ base.push((0, swagger_1.ApiQuery)({
885
+ name: "direction",
886
+ required: true,
887
+ enum: core_1.OrderDirection,
888
+ description: "the sort order",
889
+ }));
890
+ }
891
+ if (path.startsWith("paginateBy/") || path.startsWith("page/")) {
892
+ base.push((0, swagger_1.ApiQuery)({ name: "limit", required: false, description: "page size" }), (0, swagger_1.ApiQuery)({ name: "offset", required: false, description: "page number" }), (0, swagger_1.ApiQuery)({ name: "bookmark", required: false, description: "bookmark for cursor pagination" }));
893
+ }
894
+ if (path.startsWith("findOneBy/") || path.startsWith("findBy/")) {
895
+ base.push((0, swagger_1.ApiNotFoundResponse)({
896
+ description: `No ${modelClazzName} record matches the provided identifier.`,
897
+ }));
898
+ }
899
+ if (statementKey === core_1.PreparedStatementKeys.COUNT_OF ||
900
+ statementKey === core_1.PreparedStatementKeys.AVG_OF ||
901
+ statementKey === core_1.PreparedStatementKeys.SUM_OF) {
902
+ base.push((0, swagger_1.ApiOkResponse)({ description: `Result for ${modelClazzName}.`, type: Number }));
903
+ }
904
+ if (statementKey === core_1.PreparedStatementKeys.DISTINCT_OF) {
905
+ base.push((0, swagger_1.ApiOkResponse)({ description: `Distinct values for ${modelClazzName}.`, type: [String] }));
906
+ }
907
+ return base;
908
+ }
909
+ static getQueryDecorators(methodName, routePath, httpVerb, includeQueryParams = false) {
910
+ const extractPathParams = (p) => p.split("/").filter((s) => s.startsWith(":")).map((s) => s.slice(1));
911
+ const apiPathParams = extractPathParams(routePath).map((name) => ({
912
+ name,
913
+ description: `${name} parameter for the query`,
914
+ required: true,
915
+ type: String,
916
+ }));
917
+ const decorators = [
918
+ ...apiPathParams.map((p) => (0, swagger_1.ApiParam)(p)),
919
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve records using "${methodName}".` }),
920
+ (0, swagger_1.ApiOkResponse)({ description: "Result successfully retrieved." }),
921
+ (0, swagger_1.ApiNoContentResponse)({ description: "No content returned by the method." }),
922
+ ];
923
+ if (httpVerb === "GET" && includeQueryParams) {
924
+ decorators.push((0, swagger_1.ApiQuery)({
925
+ name: "direction",
926
+ required: false,
927
+ enum: core_1.OrderDirection,
928
+ description: "the sort order when applicable",
929
+ }), (0, swagger_1.ApiQuery)({ name: "limit", required: false, description: "limit or page size" }), (0, swagger_1.ApiQuery)({ name: "offset", required: false, description: "offset or bookmark" }));
930
+ }
931
+ return decorators;
970
932
  }
971
933
  }
972
934
  exports.FromModelController = FromModelController;
973
- //# sourceMappingURL=FromModelController.js.map
974
- //# sourceMappingURL=FromModelController.js.map
935
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJvbU1vZGVsQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNhZi1tb2RlbC9Gcm9tTW9kZWxDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsT0FBTyxFQUNQLGtCQUFrQixFQUNsQixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsWUFBWSxFQUNaLFFBQVEsRUFDUixRQUFRLEVBQ1IsT0FBTyxFQUNQLDhCQUE4QixFQUM5QixhQUFhLEdBQ2QsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBRUwsWUFBWSxFQUNaLGNBQWMsRUFDZCxlQUFlLEVBQ2YscUJBQXFCLEVBRXJCLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsS0FBSyxFQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sYUFBYSxFQUNiLGVBQWUsR0FDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQWUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixrQkFBa0IsRUFFbEIsU0FBUyxFQUNULFdBQVcsRUFDWCxVQUFVLEdBQ1gsOEJBQXFCO0FBQ3RCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSw4QkFBMkI7QUFFekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDhCQUFtQjtBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLDBCQUFxQjtBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsK0JBQTBCO0FBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxnQ0FBMkI7QUFFaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDRCQUF1QjtBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLDJDQUFzQztBQUN2RCxpQ0FBc0I7QUFDdEIsT0FBTyxFQUNMLHNCQUFzQixHQUl2QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE1BQU0sT0FBTyxtQkFBbUI7YUFDTixRQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVwRSxNQUFNLENBQUMsY0FBYyxDQUNuQixVQUErQjtRQUUvQixJQUFJLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQWtCLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQztnQkFDSCxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFvQixDQUFDO1lBQ2hFLENBQUM7WUFBQyxPQUFPLEVBQVcsRUFBRSxDQUFDO2dCQUNyQixPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFZLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLCtCQUErQixDQUNwQyxXQUFzQyxFQUN0QyxTQUFpQixlQUFlLENBQUMsS0FBSztRQUV0QyxNQUFNLElBQUksR0FDUixXQUFXLFlBQVksWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDdkUsTUFBTSxXQUFXLEdBQWdCLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDNUMsTUFBTSxZQUFZLEdBQ2hCLFFBQVEsQ0FBQyxHQUFHLENBQ1YsSUFBSSxDQUFDLFdBQTBCLEVBQy9CLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUNwQyxJQUFJLEVBQUUsQ0FBQztRQUVWLE1BQU0sWUFBWSxHQUNoQixRQUFRLENBQUMsR0FBRyxDQUNWLFdBQVcsQ0FBQyxXQUEwQixFQUN0QyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUMxQixJQUFJLEVBQUUsQ0FBQztRQUVWLE1BQU0sZUFBZ0IsU0FBUSxvQkFBdUI7WUFDbkQsSUFBYSxLQUFLO2dCQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELFlBQVksYUFBa0MsRUFBRSxJQUFZO2dCQUMxRCxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7U0FDRjtRQUVELEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDaEUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ3RELE1BQU0sQ0FBQyxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWIsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMseUJBQXlCLENBQzNELFVBQVUsQ0FDSixDQUFDO1lBQ1QsbUJBQW1CLENBQUMsWUFBWSxDQUM5QixlQUFlLEVBQ2YsVUFBVSxFQUNWLE9BQU8sQ0FDUixDQUFDO1lBRUYsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFVBQXVCLENBQUMsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLENBQUM7WUFDbEcsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsa0JBQWtCLENBQ3ZELFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztZQUNGLG1CQUFtQixDQUFDLGVBQWUsQ0FDakMsZUFBZSxFQUNmLFVBQVUsRUFDVixDQUFDLGFBQWEsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUMvQixDQUFDO1FBQ0osQ0FBQztRQUVELEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDbkUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNsRSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUViLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLHlCQUF5QixDQUMzRCxVQUFVLENBQ0osQ0FBQztZQUNULG1CQUFtQixDQUFDLFlBQVksQ0FDOUIsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLENBQ1IsQ0FBQztZQUVGLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLEtBQWtCLENBQUMsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLENBQUM7WUFDdEYsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsa0JBQWtCLENBQ3ZELFVBQVUsRUFDVixTQUFTLEVBQ1QsS0FBSyxFQUNMLElBQUksQ0FDTCxDQUFDO1lBQ0YsbUJBQW1CLENBQUMsZUFBZSxDQUNqQyxlQUFlLEVBQ2YsVUFBVSxFQUNWLENBQUMsYUFBYSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQy9CLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVNLEFBQVAsTUFBTSxDQUFDLE1BQU0sQ0FDWCxXQUFnQyxFQUNoQyxxQkFBb0UsRUFDcEUsY0FBc0Q7UUFFdEQsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3hDLE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVwRSwwRUFBMEU7UUFDMUUsNkVBQTZFO1FBQzdFLHlFQUF5RTtRQUN6RSxNQUFNLGtCQUFrQixHQUN0QixXQUFXLFlBQVksWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFFdkUsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FDbEMsV0FBVyxFQUNYLFFBQVEsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FDTSxDQUFDO1FBQzlDLE1BQU0sY0FBYyxHQUFHLHFCQUFxQixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sWUFBWSxHQUFpQztZQUNqRCxHQUFHLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUN6QixHQUFHLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztZQUMxQixHQUFHLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztTQUMxQixDQUFDO1FBRUYsTUFBTSxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQ3JELFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsWUFBWSxDQUNiLENBQUM7UUFDRixNQUFNLGFBQWEsR0FBSSxpQkFBeUIsQ0FBQyxVQUVwQyxDQUFDO1FBRWQsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUMxQyxtQkFBbUIsQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUvRCxHQUFHLENBQUMsS0FBSyxDQUNQLGtDQUFrQyxjQUFjLFNBQVMsYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUNyRyxDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQTJCLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFFN0QsU0FBUyxjQUFjLENBQUMsTUFBVztZQUNqQyxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkIsQ0FBQztpQkFBTSxJQUFJLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3JDLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDRCxJQUFJLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDL0IsV0FBVyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFHTSxzQkFBc0IsOEJBSDVCLE1BR00sc0JBQXVCLFNBQVEsb0JBQXVCO1lBR2hELE1BQU0sS0FBSyxLQUFLO2dCQUN4QixPQUFPLFdBQVcsQ0FBQztZQUNyQixDQUFDO1lBRUQsSUFBYSxLQUFLO2dCQUNoQixPQUFPLFdBQVcsQ0FBQztZQUNyQixDQUFDO1lBRUQsWUFBWSxhQUFrQztnQkFDNUMsS0FBSyxDQUFDLGFBQWEsRUFBRSx3QkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFYbkMsT0FBRSxHQUFXLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFXLENBQUM7Z0JBWTVELEdBQUcsQ0FBQyxJQUFJLENBQ04sNkNBQTZDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLFNBQVMsRUFBRSxDQUNwRixDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUE7UUFqQkssc0JBQXNCO1lBSDNCLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDckIsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUN2QixjQUFjLENBQUMsV0FBVyxDQUFDOzZDQVlDLG1CQUFtQjtXQVgxQyxzQkFBc0IsQ0FpQjNCO1FBRUQsY0FBYyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFdkMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDdEUsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDdEUsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7Z0JBQ3JELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO2dCQUNyRCxJQUFJLGFBQWEsS0FBSyxhQUFhO29CQUNqQyxPQUFPLGFBQWEsR0FBRyxhQUFhLENBQUM7Z0JBQ3ZDLElBQUksV0FBVyxLQUFLLFdBQVc7b0JBQzdCLE9BQU8sV0FBVyxHQUFHLFdBQVcsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztZQUNILEtBQUssTUFBTSxLQUFLLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FDakQsS0FBSyxFQUNMLE1BQU0sRUFDTixhQUFhLEVBQ2IsS0FBSyxFQUNMLFdBQVcsRUFDWCxjQUFjLEVBQ2Qsa0JBQWtCLENBQ25CLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVk7b0JBQUUsU0FBUztnQkFFNUIsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxHQUN4RCxZQUFZLENBQUM7Z0JBRWYsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUNqRCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLE9BQU8sQ0FDUixDQUFDO2dCQUVGLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2YsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE1BQW1CLENBQUMsQ0FDbEUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FDbEQsQ0FBQztvQkFDRixtQkFBbUIsQ0FBQyxlQUFlLENBQ2pDLHNCQUFzQixFQUN0QixVQUFVLEVBQ1YsQ0FBQyxhQUFhLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFDOUIsZUFBZSxDQUNoQixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sc0JBQTZCLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBQywyQkFBMkIsQ0FDaEMsVUFBK0I7UUFPL0IsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQXFCLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FDM0IsVUFBVSxFQUNWLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FDbEMsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBRTFDLE1BQU0sVUFBVSxHQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sYUFBYSxHQUF1QixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDL0QsT0FBTztnQkFDTCxJQUFJLEVBQUUsR0FBRztnQkFDVCxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO2dCQUNsRCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsTUFBTTthQUNiLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxJQUFJO1lBQ0osV0FBVztZQUNYLGFBQWE7WUFDYixLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQThCLEVBQUUsRUFBRSxDQUMzQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsWUFBWSxDQUN6QixNQUFXLEVBQ1gsVUFBa0IsRUFDbEIsT0FBZ0M7UUFFaEMsTUFBTSxDQUFDLGNBQWMsQ0FDbkIsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLEVBQzFCLFVBQVUsRUFDVjtZQUNFLEtBQUssRUFBRSxPQUFPO1lBQ2QsUUFBUSxFQUFFLEtBQUs7WUFDZixZQUFZLEVBQUUsSUFBSTtZQUNsQixVQUFVLEVBQUUsS0FBSztTQUNsQixDQUNGLENBQUM7UUFFRixPQUFPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FDcEMsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLEVBQzFCLFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxlQUFlLENBQzVCLE1BQVcsRUFDWCxVQUFrQixFQUNsQixnQkFBc0UsRUFDdEUsa0JBQTJFLEVBQUU7UUFFN0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLFNBQVMsSUFBSSxNQUFNLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbEUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FDL0MsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQ3BDLENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLFVBQVUsQ0FDdkIsS0FBa0IsRUFDbEIsTUFBYyxFQUNkLGFBQWlDLEVBQ2pDLEtBQStDLEVBQy9DLFdBQWtDLEVBQ2xDLGNBQXNCLEVBQ3RCLFdBQWlCO1FBT2pCLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQy9CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXRELElBQUksTUFBTSxLQUFLLE1BQU0sSUFBSSxjQUFjLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDL0MsT0FBTyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FDM0MsUUFBUSxFQUNSLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFDcEUsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUN2RSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0csQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLE1BQU0sS0FBSyxNQUFNLElBQUksY0FBYyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ25ELE9BQU8sbUJBQW1CLENBQUMsa0JBQWtCLENBQzNDLFdBQVcsRUFDWCxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEVBQ3hFLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFDckUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9HLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLGNBQWMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUMzQyxTQUFTLEVBQ1QsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLEVBQ3pELG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFDbkUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9DLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLGNBQWMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUMzQyxXQUFXLEVBQ1gsbUJBQW1CLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLEVBQzNELG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLEVBQ3BGLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUMvRyxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLFFBQVEsSUFBSSxjQUFjLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDckQsT0FBTyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FDM0MsV0FBVyxFQUNYLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxFQUMzRCxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxFQUNwRixDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQ2hILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLGNBQWMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUMzQyxNQUFNLEVBQ04sbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxFQUM1RCxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLEVBQ3RGLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGFBQWEsQ0FBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUM3RCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLEtBQUssSUFBSSxjQUFjLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDbEQsT0FBTyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FDM0MsUUFBUSxFQUNSLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLEVBQzNFLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxFQUN4RjtnQkFDRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDMUQsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDM0MsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTthQUNoRSxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssUUFBUSxJQUFJLGNBQWMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNyRCxPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUMzQyxRQUFRLEVBQ1IsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxFQUM5RCxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsRUFDeEY7Z0JBQ0UsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGFBQWEsQ0FBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQzFELEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7YUFDaEUsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELHVFQUF1RTtRQUN2RSxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEcsSUFBSSxXQUFXLElBQUksY0FBYyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzdDLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJO2dCQUNKLFdBQVcsRUFBRSxHQUFHLElBQUksWUFBWTtnQkFDaEMsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsSUFBSSxFQUFFLE1BQU07YUFDYixDQUFDLENBQUMsQ0FBQztZQUNKLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRSxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FDM0MsU0FBUyxNQUFNLEVBQUUsRUFDakIsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxFQUM1RCxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFDakcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsZ0JBQWdCLENBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDaEUsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FDM0MsV0FBVyxNQUFNLEVBQUUsRUFDbkIsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsRUFDM0UsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsRUFDbkc7b0JBQ0UsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGdCQUFnQixDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtvQkFDN0QsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtvQkFDM0MsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtpQkFDaEUsQ0FDRixDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUMzQyxXQUFXLE1BQU0sRUFBRSxFQUNuQixtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEVBQzlELG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQ25HO29CQUNFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7b0JBQzdELEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7aUJBQ2hFLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLGNBQWMsS0FBSyx5QkFBeUIsRUFBRSxDQUFDO1lBQ3JFLE9BQU8sbUJBQW1CLENBQUMsa0JBQWtCLENBQzNDLFdBQVcsRUFDWCxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsRUFDMUQsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxFQUNwRTtnQkFDRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDL0MsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQzdDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7YUFDN0MsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sZUFBZSxHQUEyQjtZQUM5QyxhQUFhLEVBQUUscUJBQXFCLENBQUMsT0FBTztZQUM1Qyx1QkFBdUIsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPO1lBQ3RELGFBQWEsRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO1lBQ3pDLGFBQWEsRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO1lBQ3pDLHVCQUF1QixFQUFFLHFCQUFxQixDQUFDLFdBQVc7WUFDMUQsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsT0FBTztZQUNuRCxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxRQUFRO1lBQ2hELGNBQWMsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNO1lBQzVDLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNO1lBQzVDLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNO1lBQzVDLGNBQWMsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNO1lBQzVDLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLFdBQVc7WUFDdEQsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsUUFBUTtTQUNqRCxDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JELElBQUksWUFBWSxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUMzQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsRUFDdkQsbUJBQW1CLENBQUMsOEJBQThCLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxFQUNoRixtQkFBbUIsQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsRUFDMUcsbUJBQW1CLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQzVELENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsT0FBTyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FDM0MsV0FBVyxFQUNYLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxFQUMxRCxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFDaEYsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQ3ZELENBQUM7UUFDSixDQUFDO1FBRUQsZ0ZBQWdGO1FBQ2hGLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFTO1lBQ3BDLFFBQVEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFlBQVk7WUFDL0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTztZQUM3RCxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTztTQUN0RCxDQUFDLENBQUM7UUFDSCxJQUNFLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN2QixDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3BDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbkMsQ0FBQztZQUNELDRFQUE0RTtZQUM1RSxpRkFBaUY7WUFDakYsaUNBQWlDO1lBQ2pDLE1BQU0sYUFBYSxHQUNqQixRQUFRLENBQUMsR0FBRyxDQUNULFdBQW1CLEVBQUUsV0FBVyxFQUNqQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUMxQixJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUNyRCxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQ1gsSUFBSTtnQkFDSixPQUFPLElBQUksS0FBSyxRQUFRO2dCQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEtBQUssY0FBYyxDQUMxRCxDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFOUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3hFLElBQUk7Z0JBQ0osV0FBVyxFQUFFLEdBQUcsSUFBSSwwQkFBMEI7Z0JBQzlDLFFBQVEsRUFBRSxJQUFJO2dCQUNkLElBQUksRUFBRSxNQUFNO2FBQ2IsQ0FBQyxDQUFDLENBQUM7WUFFSixPQUFPLG1CQUFtQixDQUFDLGtCQUFrQixDQUMzQyxnQkFBZ0IsRUFDaEIsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsRUFDOUQ7Z0JBQ0UsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsZ0JBQWdCLElBQUksRUFBRSxDQUFDO2dCQUMxRSxhQUFhLENBQUMsRUFBRSxXQUFXLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQztnQkFDaEUsb0JBQW9CLENBQUMsRUFBRSxXQUFXLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQzthQUM1RSxFQUNELG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUN2RCxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQy9CLFVBQWtCLEVBQ2xCLE9BQWdDLEVBQ2hDLFVBQWdFLEVBQ2hFLGVBQXdFO1FBRXhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRU8sTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQVk7UUFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU8sTUFBTSxDQUFDLHVCQUF1QixDQUNwQyxJQUFZO1FBRVosTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRSxNQUFNLE1BQU0sR0FBNEQsRUFBRSxDQUFDO1FBQzNFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQ3hCLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBUyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDL0IsSUFBWTtRQUVaLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxNQUFNLEdBQTRELEVBQUUsQ0FBQztRQUMzRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxNQUFNLENBQUMsbUJBQW1CLENBQ2hDLFdBQWtDLEVBQ2xDLGNBQXNCO1FBRXRCLE9BQU8sS0FBSyxVQUFVLE1BQU0sQ0FFMUIsSUFBUyxFQUNULElBQVU7WUFFVixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQ25CLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FDbEQsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDZCxHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksT0FBYyxDQUFDO1lBQ25CLElBQUksQ0FBQztnQkFDSCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7Z0JBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLGNBQWMsRUFBRSxFQUFFLENBQVUsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLENBQUMsQ0FBQztZQUNWLENBQUM7WUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsY0FBYyxZQUFhLE9BQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLElBQUksSUFBSTtnQkFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsdUJBQXVCLENBQ3BDLFdBQWtDLEVBQ2xDLGNBQXNCO1FBRXRCLE9BQU8sS0FBSyxVQUFVLFNBQVMsQ0FFN0IsSUFBVyxFQUNYLElBQVU7WUFFVixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQ25CLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUM5RCxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQixHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksT0FBYyxDQUFDO1lBQ25CLElBQUksQ0FBQztnQkFDSCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbkMsR0FBRyxDQUNKLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsY0FBYyxFQUFFLEVBQUUsQ0FBVSxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sQ0FBQyxDQUFDO1lBQ1YsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxjQUFjLFlBQWEsT0FBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0UsSUFBSSxJQUFJO2dCQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxjQUFzQjtRQUN6RCxPQUFPLEtBQUssVUFBVSxPQUFPLENBRTNCLEdBQWE7WUFFYixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQ25CLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUM1RCxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNmLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxJQUFJLElBQWEsQ0FBQztZQUNsQixJQUFJLENBQUM7Z0JBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO2dCQUNwQixHQUFHLENBQUMsS0FBSyxDQUFDLGtCQUFrQixjQUFjLEVBQUUsRUFBRSxDQUFVLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1lBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNsRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsdUJBQXVCLENBQUMsY0FBc0I7UUFDM0QsT0FBTyxLQUFLLFVBQVUsU0FBUyxDQUU3QixJQUFXLEVBQ1gsSUFBVTtZQUVWLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FDbkIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQzlELENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pCLElBQUksT0FBYyxDQUFDO1lBQ25CLElBQUksQ0FBQztnQkFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7Z0JBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBVSxDQUFDLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxDQUFDO1lBQ1YsQ0FBQztZQUNELElBQUksSUFBSTtnQkFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsdUJBQXVCLENBQUMsY0FBc0I7UUFDM0QsT0FBTyxLQUFLLFVBQVUsU0FBUyxDQUU3QixHQUFhLEVBQ2IsSUFBVTtZQUVWLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FDbkIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQzlELENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxJQUFJLElBQWEsQ0FBQztZQUNsQixJQUFJLENBQUM7Z0JBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLGFBQWEsQ0FBQyxNQUFNLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ25FLENBQUM7WUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO2dCQUNwQixHQUFHLENBQUMsS0FBSyxDQUFDLG9CQUFvQixjQUFjLEVBQUUsRUFBRSxDQUFVLENBQUMsQ0FBQztnQkFDNUQsTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1lBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNyRCxJQUFJLElBQUk7Z0JBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCLENBQzlCLEtBQStDLEVBQy9DLGNBQXNCO1FBRXRCLE9BQU8sS0FBSyxVQUFVLElBQUksQ0FFeEIsV0FBZ0I7WUFFaEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQ2hELENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ1osTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQy9DLElBQUksT0FBTyxFQUFFLEtBQUssV0FBVztnQkFDM0IsTUFBTSxJQUFJLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3RELElBQUksVUFBaUIsQ0FBQztZQUN0QixJQUFJLENBQUM7Z0JBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLGNBQWMsU0FBUyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzdELFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsY0FBYyxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQVUsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLENBQUMsQ0FBQztZQUNWLENBQUM7WUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsY0FBYyxZQUFhLFVBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRSxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLG1CQUFtQixDQUNoQyxLQUErQyxFQUMvQyxXQUFrQyxFQUNsQyxjQUFzQjtRQUV0QixPQUFPLEtBQUssVUFBVSxNQUFNLENBRTFCLFdBQWdCLEVBQ2hCLElBQVMsRUFDVCxJQUFVO1lBRVYsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQ2xELENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2QsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQy9DLElBQUksT0FBTyxFQUFFLEtBQUssV0FBVztnQkFDM0IsTUFBTSxJQUFJLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3RELElBQUksT0FBWSxDQUFDO1lBQ2pCLElBQUksQ0FBQztnQkFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksY0FBYyxTQUFTLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUMxQyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQzlDLEdBQUcsQ0FDSixDQUFDO1lBQ0osQ0FBQztZQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7Z0JBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBVSxDQUFDLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxDQUFDO1lBQ1YsQ0FBQztZQUNELElBQUksSUFBSTtnQkFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsbUJBQW1CLENBQ2hDLEtBQStDLEVBQy9DLGNBQXNCO1FBRXRCLE9BQU8sS0FBSyxVQUFVLE1BQU0sQ0FFMUIsV0FBZ0IsRUFDaEIsSUFBVTtZQUVWLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FDbkIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUNsRCxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNkLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvQyxJQUFJLE9BQU8sRUFBRSxLQUFLLFdBQVc7Z0JBQzNCLE1BQU0sSUFBSSxlQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN0RCxJQUFJLEdBQVUsQ0FBQztZQUNmLElBQUksQ0FBQztnQkFDSCxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksY0FBYyxTQUFTLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDOUQsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO2dCQUNwQixHQUFHLENBQUMsS0FBSyxDQUFDLG9CQUFvQixjQUFjLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBVSxDQUFDLENBQUM7Z0JBQzFFLE1BQU0sQ0FBQyxDQUFDO1lBQ1YsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxjQUFjLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRCxJQUFJLElBQUk7Z0JBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsc0JBQXNCLENBQUMsY0FBc0I7UUFDMUQsT0FBTyxLQUFLLFVBQVUsU0FBUyxDQUU3QixJQUFZLEVBQ1osSUFBeUIsRUFDekIsT0FBNkI7WUFFN0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQ2QsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUN2RCxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDO1lBQ3ZELElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNiLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ3ZELENBQUM7WUFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFNBQVMsSUFBSSxhQUFhLENBRXhDLENBQUM7WUFDZCxJQUFJLGlCQUFpQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7WUFDdEUsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDYixLQUFLLHFCQUFxQixDQUFDLElBQUksQ0FBQztnQkFDaEMsS0FBSyxxQkFBcUIsQ0FBQyxPQUFPO29CQUNoQyxNQUFNO2dCQUNSLEtBQUsscUJBQXFCLENBQUMsT0FBTztvQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFtQixDQUFDLENBQUM7b0JBQy9CLE1BQU07Z0JBQ1IsS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLEtBQUsscUJBQXFCLENBQUMsT0FBTztvQkFDaEMsSUFBSSxHQUFHO3dCQUNMLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ1AsaUJBQXdCO3dCQUN4QixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO3FCQUM1QixDQUFDO29CQUNGLE1BQU07Z0JBQ1IsS0FBSyxxQkFBcUIsQ0FBQyxXQUFXO29CQUNwQyxNQUFNO2dCQUNSLEtBQUsscUJBQXFCLENBQUMsUUFBUSxDQUFDO2dCQUNwQyxLQUFLLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztnQkFDbEMsS0FBSyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7Z0JBQ2xDLEtBQUsscUJBQXFCLENBQUMsTUFBTSxDQUFDO2dCQUNsQyxLQUFLLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztnQkFDbEMsS0FBSyxxQkFBcUIsQ0FBQyxXQUFXLENBQUM7Z0JBQ3ZDLEtBQUsscUJBQXFCLENBQUMsUUFBUTtvQkFDakMsTUFBTTtZQUNWLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLDhCQUE4QixDQUMzQyxZQUFvQixFQUNwQixjQUFzQjtRQUV0QixPQUFPLEtBQUssVUFBVSxpQkFBaUIsQ0FFckMsR0FBRyxJQUFXO1lBRWQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQ2QsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQzFDLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFekIsUUFBUSxZQUFZLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDNUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FDakMsR0FBRyxFQUNGLE9BQWUsRUFBRSxTQUEyQixFQUM3QyxHQUFHLENBQ0osQ0FBQztnQkFDSixDQUFDO2dCQUNELEtBQUsscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDbkMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUNyQyxHQUFHLEVBQ0YsT0FBZSxFQUFFLFNBQTJCLEVBQzdDO3dCQUNFLEtBQUssRUFBRyxPQUFlLEVBQUUsS0FBSzt3QkFDOUIsTUFBTSxFQUFHLE9BQWUsRUFBRSxNQUFNO3dCQUNoQyxJQUFJO3FCQUNFLEVBQ1IsR0FBRyxDQUNKLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxLQUFLLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUM5QixNQUFNLFNBQVMsR0FDWixPQUFlLEVBQUUsU0FBUyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUM7b0JBQ3BELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzFDLElBQUksT0FBTyxXQUFXLENBQUMsSUFBSSxLQUFLLFVBQVU7d0JBQ3hDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNqRCxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2xGLENBQUM7Z0JBQ0QsS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDOUIsTUFBTSxHQUFHLEdBQUc7d0JBQ1YsTUFBTSxFQUFHLE9BQWUsRUFBRSxNQUFNLElBQUksQ0FBQzt3QkFDckMsS0FBSyxFQUFHLE9BQWUsRUFBRSxLQUFLLElBQUksRUFBRTt3QkFDcEMsUUFBUSxFQUFHLE9BQWUsRUFBRSxRQUFRO3FCQUNyQyxDQUFDO29CQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzFDLE1BQU0sU0FBUyxHQUFJLE9BQWUsRUFBRSxTQUFTLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQztvQkFDcEUsSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLEtBQUssVUFBVTt3QkFDeEMsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN0RCxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RixDQUFDO2dCQUNELEtBQUsscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQzFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxLQUFLLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ25DLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUMxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO3lCQUN6QixHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO3lCQUN0QixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztnQkFDRDtvQkFDRSxJQUNFLFlBQVksS0FBSyxxQkFBcUIsQ0FBQyxRQUFRO3dCQUMvQyxZQUFZLEtBQUsscUJBQXFCLENBQUMsTUFBTTt3QkFDN0MsWUFBWSxLQUFLLHFCQUFxQixDQUFDLE1BQU07d0JBQzdDLFlBQVksS0FBSyxxQkFBcUIsQ0FBQyxNQUFNO3dCQUM3QyxZQUFZLEtBQUsscUJBQXFCLENBQUMsTUFBTTt3QkFDN0MsWUFBWSxLQUFLLHFCQUFxQixDQUFDLFdBQVc7d0JBQ2xELFlBQVksS0FBSyxxQkFBcUIsQ0FBQyxRQUFRLEVBQy9DLENBQUM7d0JBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDckIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxDQUFDO29CQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMseUJBQXlCLENBQUMsVUFBa0I7UUFDekQsT0FBTyxLQUFLLFVBQVUsWUFBWSxDQUVoQyxHQUFHLElBQVc7WUFFZCxNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQztnQkFDSCxJQUFJLEdBQUc7b0JBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDNUQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQ2QsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQ3hDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDbEQsT0FBTyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQ0QsSUFBSSxPQUFPLFdBQVcsQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ2hELE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQy9ELENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYix1QkFBdUIsVUFBVSxrQkFBa0IsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FDcEYsQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO2dCQUNoQixJQUFJLEdBQUc7b0JBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsVUFBVSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELE1BQU0sQ0FBQyxDQUFDO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsd0JBQXdCLENBQUMsVUFBa0I7UUFDeEQsT0FBTyxLQUFLLFVBQVUsV0FBVyxDQUUvQixHQUFHLElBQVc7WUFFZCxNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUNkLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUN4QyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTlELHFFQUFxRTtZQUNyRSxJQUFJLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsRCxPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsOEVBQThFO1lBQzlFLElBQUksV0FBVyxFQUFFLElBQUksSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzVFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsaUNBQWlDO1lBQ2pDLElBQUksT0FBTyxXQUFXLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNoRCxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLFdBQVcsVUFBVSxrQkFBa0IsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLGNBQWMsQ0FDcEYsQ0FBQztRQUNKLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBVztRQUN6QyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQ0UsSUFBSTtZQUNKLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFDeEIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUNwQixDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDO1lBQ3RELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDO1lBQzlDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO1lBQ2hELElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzFELE1BQU0sTUFBTSxHQUFVLEVBQUUsQ0FBQztZQUN6QixJQUFJLFlBQVk7Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzdDLElBQUksUUFBUSxJQUFJLFNBQVM7Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxJQUFJLFFBQVE7Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsSUFBSSxTQUFTO2dCQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxNQUFNLENBQUMsc0JBQXNCLENBQ25DLFdBQWtDLEVBQ2xDLGNBQXNCO1FBRXRCLE9BQU87WUFDTCxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO1lBQzFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUM1RCxPQUFPLENBQUM7Z0JBQ04sV0FBVyxFQUFFLGVBQWUsY0FBYyxFQUFFO2dCQUM1QyxJQUFJLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO2FBQ2hELENBQUM7WUFDRixrQkFBa0IsQ0FBQztnQkFDakIsV0FBVyxFQUFFLEdBQUcsY0FBYyx3QkFBd0I7Z0JBQ3RELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUU7YUFDN0MsQ0FBQztZQUNGLHFCQUFxQixDQUFDLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLENBQUM7WUFDcEUsOEJBQThCLENBQUM7Z0JBQzdCLFdBQVcsRUFBRSwyQ0FBMkM7YUFDekQsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLG9CQUFvQixDQUNqQyxXQUFrQyxFQUNsQyxjQUFzQjtRQUV0QixPQUFPO1lBQ0wscUJBQXFCLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFDbEQsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQzVELE9BQU8sQ0FBQztnQkFDTixXQUFXLEVBQUUsZUFBZSxjQUFjLEVBQUU7Z0JBQzVDLE1BQU0sRUFBRTtvQkFDTixJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2lCQUM1QzthQUNGLENBQUM7WUFDRixrQkFBa0IsQ0FBQztnQkFDakIsV0FBVyxFQUFFLEdBQUcsY0FBYyx3QkFBd0I7Z0JBQ3RELE1BQU0sRUFBRTtvQkFDTixJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2lCQUM1QzthQUNGLENBQUM7WUFDRixxQkFBcUIsQ0FBQyxFQUFFLFdBQVcsRUFBRSw0QkFBNEIsRUFBRSxDQUFDO1lBQ3BFLDhCQUE4QixDQUFDO2dCQUM3QixXQUFXLEVBQUUsMkNBQTJDO2FBQ3pELENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDL0IsV0FBa0MsRUFDbEMsY0FBc0I7UUFFdEIsT0FBTztZQUNMLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDO1lBQ2pELFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLGNBQWMsa0JBQWtCLEVBQUUsQ0FBQztZQUN2RSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3hELGFBQWEsQ0FBQztnQkFDWixXQUFXLEVBQUUsR0FBRyxjQUFjLDBCQUEwQjtnQkFDeEQsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxPQUFPO29CQUNiLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUU7aUJBQzVDO2FBQ0YsQ0FBQztZQUNGLG1CQUFtQixDQUFDO2dCQUNsQixXQUFXLEVBQUUsTUFBTSxjQUFjLDBDQUEwQzthQUM1RSxDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsb0JBQW9CLENBQ2pDLFdBQWtDLEVBQ2xDLGNBQXNCLEVBQ3RCLGFBQWlDO1FBRWpDLE9BQU87WUFDTCxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztZQUNqRCxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDakMsWUFBWSxDQUFDO2dCQUNYLE9BQU8sRUFBRSxvQkFBb0IsY0FBYyw2QkFBNkI7YUFDekUsQ0FBQztZQUNGLE9BQU8sQ0FBQztnQkFDTixXQUFXLEVBQUUsNkNBQTZDLGNBQWMsRUFBRTtnQkFDMUUsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxPQUFPO29CQUNiLElBQUksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQy9EO2FBQ0YsQ0FBQztZQUNGLGFBQWEsQ0FBQztnQkFDWixXQUFXLEVBQUUsR0FBRyxjQUFjLHdCQUF3QjtnQkFDdEQsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxPQUFPO29CQUNiLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUU7aUJBQzVDO2FBQ0YsQ0FBQztZQUNGLG1CQUFtQixDQUFDO2dCQUNsQixXQUFXLEVBQUUsTUFBTSxjQUFjLDBDQUEwQzthQUM1RSxDQUFDO1lBQ0YscUJBQXFCLENBQUMsRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQztTQUNyRSxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDakMsV0FBa0MsRUFDbEMsY0FBc0IsRUFDdEIsYUFBaUM7UUFFakMsT0FBTztZQUNMLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ3BELGtCQUFrQixDQUFDLGFBQWEsQ0FBQztZQUNqQyxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxjQUFjLGtCQUFrQixFQUFFLENBQUM7WUFDckUsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN4RCxhQUFhLENBQUM7Z0JBQ1osV0FBVyxFQUFFLEdBQUcsY0FBYyx3QkFBd0I7Z0JBQ3RELE1BQU0sRUFBRTtvQkFDTixJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2lCQUM1QzthQUNGLENBQUM7WUFDRixtQkFBbUIsQ0FBQztnQkFDbEIsV0FBVyxFQUFFLE1BQU0sY0FBYywwQ0FBMEM7YUFDNUUsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FDM0IsV0FBa0MsRUFDbEMsY0FBc0IsRUFDdEIsYUFBaUMsRUFDakMsTUFBYztRQUVkLE9BQU87WUFDTCxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztZQUNqRCxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDakMsWUFBWSxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsY0FBYyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZFLGFBQWEsQ0FBQztnQkFDWixXQUFXLEVBQUUsR0FBRyxjQUFjLDBCQUEwQjtnQkFDeEQsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRTthQUM3QyxDQUFDO1lBQ0YsbUJBQW1CLENBQUM7Z0JBQ2xCLFdBQVcsRUFBRSxNQUFNLGNBQWMsMENBQTBDO2FBQzVFLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDN0IsV0FBa0MsRUFDbEMsY0FBc0IsRUFDdEIsYUFBaUMsRUFDakMsTUFBYztRQUVkLE9BQU87WUFDTCxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztZQUNqRCxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7WUFDakMsWUFBWSxDQUFDO2dCQUNYLE9BQU8sRUFBRSx1QkFBdUIsY0FBYyw2QkFBNkI7YUFDNUUsQ0FBQztZQUNGLE9BQU8sQ0FBQztnQkFDTixXQUFXLEVBQUUsK0NBQStDLGNBQWMsRUFBRTtnQkFDNUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQzthQUNoRCxDQUFDO1lBQ0YsYUFBYSxDQUFDO2dCQUNaLFdBQVcsRUFBRSxHQUFHLGNBQWMsd0JBQXdCO2dCQUN0RCxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2FBQzdDLENBQUM7WUFDRixtQkFBbUIsQ0FBQztnQkFDbEIsV0FBVyxFQUFFLE1BQU0sY0FBYywwQ0FBMEM7YUFDNUUsQ0FBQztZQUNGLHFCQUFxQixDQUFDLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLENBQUM7U0FDckUsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsZ0JBQWdCLENBQzdCLFdBQWtDLEVBQ2xDLGNBQXNCLEVBQ3RCLGFBQWlDLEVBQ2pDLE1BQWM7UUFFZCxPQUFPO1lBQ0wscUJBQXFCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDcEQsa0JBQWtCLENBQUMsYUFBYSxDQUFDO1lBQ2pDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLGNBQWMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNyRSxhQUFhLENBQUM7Z0JBQ1osV0FBVyxFQUFFLEdBQUcsY0FBYyx3QkFBd0I7Z0JBQ3RELE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUU7YUFDN0MsQ0FBQztZQUNGLG1CQUFtQixDQUFDO2dCQUNsQixXQUFXLEVBQUUsTUFBTSxjQUFjLDBDQUEwQzthQUM1RSxDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsbUJBQW1CLENBQ2hDLFdBQWtDLEVBQ2xDLGNBQXNCO1FBRXRCLE9BQU87WUFDTCxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixDQUFDO1lBQ3BFLFlBQVksQ0FBQztnQkFDWCxPQUFPLEVBQUUsb0NBQW9DLGNBQWMsR0FBRzthQUMvRCxDQUFDO1lBQ0YsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQztZQUM5RSxRQUFRLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLE1BQU07Z0JBQ1osV0FBVyxFQUFFLGtFQUFrRTthQUNoRixDQUFDO1lBQ0YsUUFBUSxDQUFDO2dCQUNQLElBQUksRUFBRSxXQUFXO2dCQUNqQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsY0FBYztnQkFDcEIsV0FBVyxFQUFFLGdDQUFnQzthQUM5QyxDQUFDO1lBQ0YsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDO1lBQzlGLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQztZQUMvRixhQUFhLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxjQUFjLGdCQUFnQixFQUFFLENBQUM7WUFDakUsbUJBQW1CLENBQUM7Z0JBQ2xCLFdBQVcsRUFBRSxNQUFNLGNBQWMsMENBQTBDO2FBQzVFLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQywyQkFBMkIsQ0FDeEMsV0FBa0MsRUFDbEMsY0FBc0IsRUFDdEIsSUFBWSxFQUNaLFlBQW9CO1FBRXBCLE1BQU0sSUFBSSxHQUF5RDtZQUNqRSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztZQUMvQyxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxjQUFjLFdBQVcsRUFBRSxDQUFDO1lBQ2hFLGFBQWEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLGNBQWMsMEJBQTBCLEVBQUUsQ0FBQztTQUM1RSxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUNFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQ3hCLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUNQLFFBQVEsQ0FBQztnQkFDUCxJQUFJLEVBQUUsV0FBVztnQkFDakIsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFdBQVcsRUFBRSxnQkFBZ0I7YUFDOUIsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsSUFBSSxDQUNQLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFDdEUsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUN6RSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGdDQUFnQyxFQUFFLENBQUMsQ0FDL0YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxJQUFJLENBQ1AsbUJBQW1CLENBQUM7Z0JBQ2xCLFdBQVcsRUFBRSxNQUFNLGNBQWMsMENBQTBDO2FBQzVFLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQ0UsWUFBWSxLQUFLLHFCQUFxQixDQUFDLFFBQVE7WUFDL0MsWUFBWSxLQUFLLHFCQUFxQixDQUFDLE1BQU07WUFDN0MsWUFBWSxLQUFLLHFCQUFxQixDQUFDLE1BQU0sRUFDN0MsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsY0FBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBQ0QsSUFBSSxZQUFZLEtBQUsscUJBQXFCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLGNBQWMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQy9CLFVBQWtCLEVBQ2xCLFNBQWlCLEVBQ2pCLFFBQWdCLEVBQ2hCLHFCQUE4QixLQUFLO1FBRW5DLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFTLEVBQVksRUFBRSxDQUNoRCxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZFLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJO1lBQ0osV0FBVyxFQUFFLEdBQUcsSUFBSSwwQkFBMEI7WUFDOUMsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUosTUFBTSxVQUFVLEdBQXlEO1lBQ3ZFLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUNwRSxhQUFhLENBQUMsRUFBRSxXQUFXLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQztZQUNoRSxvQkFBb0IsQ0FBQyxFQUFFLFdBQVcsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDO1NBQzVFLENBQUM7UUFFRixJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUM3QyxVQUFVLENBQUMsSUFBSSxDQUNiLFFBQVEsQ0FBQztnQkFDUCxJQUFJLEVBQUUsV0FBVztnQkFDakIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFdBQVcsRUFBRSxnQ0FBZ0M7YUFDOUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUMvRSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FDakYsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbGxlciwgUGFyYW0sIFF1ZXJ5LCBSZXNwb25zZSwgU2V0TWV0YWRhdGEgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7XG4gIEFwaUJhZFJlcXVlc3RSZXNwb25zZSxcbiAgQXBpQm9keSxcbiAgQXBpQ3JlYXRlZFJlc3BvbnNlLFxuICBBcGlFeHRyYU1vZGVscyxcbiAgQXBpTm9Db250ZW50UmVzcG9uc2UsXG4gIEFwaU5vdEZvdW5kUmVzcG9uc2UsXG4gIEFwaU9rUmVzcG9uc2UsXG4gIEFwaU9wZXJhdGlvbixcbiAgQXBpUGFyYW0sXG4gIEFwaVF1ZXJ5LFxuICBBcGlUYWdzLFxuICBBcGlVbnByb2Nlc3NhYmxlRW50aXR5UmVzcG9uc2UsXG4gIGdldFNjaGVtYVBhdGgsXG59IGZyb20gXCJAbmVzdGpzL3N3YWdnZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgRGlyZWN0aW9uTGltaXRPZmZzZXQsXG4gIE1vZGVsU2VydmljZSxcbiAgT3JkZXJEaXJlY3Rpb24sXG4gIFBlcnNpc3RlbmNlS2V5cyxcbiAgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLFxuICB0eXBlIFJlcG8sXG4gIFJlcG9zaXRvcnksXG4gIFNlcnZpY2UsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgTW9kZWwsIE1vZGVsQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBMb2dnaW5nLCB0b0tlYmFiQ2FzZSB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHtcbiAgQnVsa0NydWRPcGVyYXRpb25LZXlzLFxuICBEQktleXMsXG4gIE9wZXJhdGlvbktleXMsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7XG4gIEFwaU9wZXJhdGlvbkZyb21Nb2RlbCxcbiAgQXBpUGFyYW1zRnJvbU1vZGVsLFxuICB0eXBlIERlY2FmQXBpUHJvcGVydHksXG4gIERlY2FmQm9keSxcbiAgRGVjYWZQYXJhbXMsXG4gIERlY2FmUXVlcnksXG59IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IEh0dHBWZXJiVG9EZWNvcmF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEh0dHBWZXJicyB9IGZyb20gXCIuL2RlY29yYXRvcnMvdHlwZXNcIjtcbmltcG9ydCB7IERlY2FmUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiLi4vcmVxdWVzdFwiO1xuaW1wb3J0IHsgREVDQUZfQ09OVFJPTExFUl9DT05GSUcsIERFQ0FGX1JPVVRFIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgU0tJUF9NT0RFTF9ST0xFU19LRVkgfSBmcm9tIFwiLi4vYXV0aC9jb25zdGFudHNcIjtcbmltcG9ydCB7IEF1dGgsIFB1YmxpYywgUmVxdWlyZVJvbGVzIH0gZnJvbSBcIi4uL2F1dGgvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlckNvbnN0cnVjdG9yIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IERlY2FmTW9kZWxDb250cm9sbGVyIH0gZnJvbSBcIi4uL2NvbnRyb2xsZXJzXCI7XG5pbXBvcnQgeyBEdG9Gb3IgfSBmcm9tIFwiLi4vZmFjdG9yeS9vcGVuYXBpL0R0b0J1aWxkZXJcIjtcbmltcG9ydCBcIi4uL292ZXJyaWRlc1wiO1xuaW1wb3J0IHtcbiAgTW9kZWxDb250cm9sbGVyRmFjdG9yeSxcbiAgdHlwZSBNb2RlbENvbnRyb2xsZXJGYWN0b3J5Q29uZmlnLFxuICB0eXBlIEF1dGhDb25maWcsXG4gIHR5cGUgU2VydmVyUm91dGUsXG59IGZyb20gXCJAZGVjYWYtdHMvZm9yLWh0dHAvc2VydmVyXCI7XG5cbmV4cG9ydCBjbGFzcyBGcm9tTW9kZWxDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9nID0gTG9nZ2luZy5mb3IoRnJvbU1vZGVsQ29udHJvbGxlci5uYW1lKTtcblxuICBzdGF0aWMgZ2V0UGVyc2lzdGVuY2U8VCBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PihcbiAgICBNb2RlbENsYXp6OiBNb2RlbENvbnN0cnVjdG9yPFQ+XG4gICk6IFJlcG88VD4gfCBNb2RlbFNlcnZpY2U8VD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gU2VydmljZS5nZXQ8TW9kZWxTZXJ2aWNlPFQ+PihNb2RlbENsYXp6KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gTW9kZWxTZXJ2aWNlLmdldFNlcnZpY2UoTW9kZWxDbGF6eikgYXMgTW9kZWxTZXJ2aWNlPFQ+O1xuICAgICAgfSBjYXRjaCAoZTI6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIFJlcG9zaXRvcnkuZm9yTW9kZWwoTW9kZWxDbGF6eikgYXMgUmVwbzxUPjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUXVlcnlSb3V0ZXNGcm9tUmVwb3NpdG9yeTxUIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KFxuICAgIHBlcnNpc3RlbmNlOiBSZXBvPFQ+IHwgTW9kZWxTZXJ2aWNlPFQ+LFxuICAgIHByZWZpeDogc3RyaW5nID0gUGVyc2lzdGVuY2VLZXlzLlFVRVJZXG4gICk6IENvbnRyb2xsZXJDb25zdHJ1Y3RvcjxUPiB7XG4gICAgY29uc3QgcmVwbzogUmVwbzxUPiA9XG4gICAgICBwZXJzaXN0ZW5jZSBpbnN0YW5jZW9mIE1vZGVsU2VydmljZSA/IHBlcnNpc3RlbmNlLnJlcG8gOiBwZXJzaXN0ZW5jZTtcbiAgICBjb25zdCBNb2RlbENvbnN0cjogQ29uc3RydWN0b3IgPSByZXBvLmNsYXNzO1xuICAgIGNvbnN0IHF1ZXJ5TWV0aG9kczogUmVjb3JkPHN0cmluZywgeyBmaWVsZHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB9PiA9XG4gICAgICBNZXRhZGF0YS5nZXQoXG4gICAgICAgIHJlcG8uY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3IsXG4gICAgICAgIE1ldGFkYXRhLmtleShQZXJzaXN0ZW5jZUtleXMuUVVFUlkpXG4gICAgICApID8/IHt9O1xuXG4gICAgY29uc3Qgcm91dGVNZXRob2RzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID1cbiAgICAgIE1ldGFkYXRhLmdldChcbiAgICAgICAgcGVyc2lzdGVuY2UuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3IsXG4gICAgICAgIE1ldGFkYXRhLmtleShERUNBRl9ST1VURSlcbiAgICAgICkgPz8ge307XG5cbiAgICBjbGFzcyBRdWVyeUNvbnRyb2xsZXIgZXh0ZW5kcyBEZWNhZk1vZGVsQ29udHJvbGxlcjxUPiB7XG4gICAgICBvdmVycmlkZSBnZXQgY2xhc3MoKTogTW9kZWxDb25zdHJ1Y3RvcjxUPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgICAgfVxuICAgICAgY29uc3RydWN0b3IoY2xpZW50Q29udGV4dDogRGVjYWZSZXF1ZXN0Q29udGV4dCwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGNsaWVudENvbnRleHQsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIHBhcmFtc10gb2YgT2JqZWN0LmVudHJpZXMocm91dGVNZXRob2RzKSkge1xuICAgICAgY29uc3Qgcm91dGVQYXRoID0gW3BhcmFtcy5wYXRoLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpXVxuICAgICAgICAuZmlsdGVyKChzZWdtZW50OiBzdHJpbmcpID0+IHNlZ21lbnQgJiYgc2VnbWVudC50cmltKCkpXG4gICAgICAgIC5qb2luKFwiL1wiKTtcblxuICAgICAgY29uc3QgaGFuZGxlciA9IEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQ29tcGxleFF1ZXJ5SGFuZGxlcihcbiAgICAgICAgbWV0aG9kTmFtZVxuICAgICAgKSBhcyBhbnk7XG4gICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmRlZmluZU1ldGhvZChcbiAgICAgICAgUXVlcnlDb250cm9sbGVyLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBoYW5kbGVyXG4gICAgICApO1xuXG4gICAgICBjb25zdCBodHRwRGVjb3JhdG9yID0gSHR0cFZlcmJUb0RlY29yYXRvcihwYXJhbXMuaHR0cE1ldGhvZCBhcyBIdHRwVmVyYnMpKHJvdXRlUGF0aCB8fCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IEZyb21Nb2RlbENvbnRyb2xsZXIuZ2V0UXVlcnlEZWNvcmF0b3JzKFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICByb3V0ZVBhdGgsXG4gICAgICAgIHBhcmFtcy5odHRwTWV0aG9kXG4gICAgICApO1xuICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5hcHBseURlY29yYXRvcnMoXG4gICAgICAgIFF1ZXJ5Q29udHJvbGxlcixcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgW2h0dHBEZWNvcmF0b3IsIC4uLmRlY29yYXRvcnNdXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIG9ialZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMocXVlcnlNZXRob2RzKSkge1xuICAgICAgY29uc3QgZmllbGRzID0gb2JqVmFsdWVzLmZpZWxkcyA/PyBbXTtcbiAgICAgIGNvbnN0IHJvdXRlUGF0aCA9IFtwcmVmaXgsIG1ldGhvZE5hbWUsIC4uLmZpZWxkcy5tYXAoKGYpID0+IGA6JHtmfWApXVxuICAgICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50ICYmIHNlZ21lbnQudHJpbSgpKVxuICAgICAgICAuam9pbihcIi9cIik7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUNvbXBsZXhRdWVyeUhhbmRsZXIoXG4gICAgICAgIG1ldGhvZE5hbWVcbiAgICAgICkgYXMgYW55O1xuICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5kZWZpbmVNZXRob2QoXG4gICAgICAgIFF1ZXJ5Q29udHJvbGxlcixcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgaGFuZGxlclxuICAgICAgKTtcblxuICAgICAgY29uc3QgaHR0cERlY29yYXRvciA9IEh0dHBWZXJiVG9EZWNvcmF0b3IoXCJHRVRcIiBhcyBIdHRwVmVyYnMpKHJvdXRlUGF0aCB8fCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IEZyb21Nb2RlbENvbnRyb2xsZXIuZ2V0UXVlcnlEZWNvcmF0b3JzKFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICByb3V0ZVBhdGgsXG4gICAgICAgIFwiR0VUXCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmFwcGx5RGVjb3JhdG9ycyhcbiAgICAgICAgUXVlcnlDb250cm9sbGVyLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBbaHR0cERlY29yYXRvciwgLi4uZGVjb3JhdG9yc11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFF1ZXJ5Q29udHJvbGxlcjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGU8VCBleHRlbmRzIE1vZGVsPGFueT4+KFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPFQ+LFxuICAgIG1vZHVsZUNvbmZpZ092ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIE1vZGVsQ29udHJvbGxlckZhY3RvcnlDb25maWc+LFxuICAgIGdsb2JhbERlZmF1bHRzPzogUGFydGlhbDxNb2RlbENvbnRyb2xsZXJGYWN0b3J5Q29uZmlnPlxuICApOiBDb250cm9sbGVyQ29uc3RydWN0b3I8VD4ge1xuICAgIGNvbnN0IGxvZyA9IEZyb21Nb2RlbENvbnRyb2xsZXIubG9nLmZvcihGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZSk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKE1vZGVsQ29uc3RyKTtcbiAgICBjb25zdCByb3V0ZVBhdGggPSB0b0tlYmFiQ2FzZSh0YWJsZU5hbWUpO1xuICAgIGNvbnN0IG1vZGVsQ2xhenpOYW1lID0gTW9kZWxDb25zdHIubmFtZTtcbiAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IEZyb21Nb2RlbENvbnRyb2xsZXIuZ2V0UGVyc2lzdGVuY2UoTW9kZWxDb25zdHIpO1xuXG4gICAgLy8gV2hlbiBwZXJzaXN0ZW5jZSBpcyBhIE1vZGVsU2VydmljZSwgdGhlIEBxdWVyeS9Acm91dGUgbWV0YWRhdGEgbGl2ZXMgb25cbiAgICAvLyB0aGUgdW5kZXJseWluZyByZXBvc2l0b3J5IGNsYXNzIChjdXN0b20gcmVwbyksIG5vdCBvbiBNb2RlbFNlcnZpY2UgaXRzZWxmLlxuICAgIC8vIFBhc3MgdGhlIHJlcG8gdG8gdGhlIGZhY3Rvcnkgc28gYWRkQ29tcGxleFF1ZXJpZXMoKSBjYW4gZGlzY292ZXIgdGhlbS5cbiAgICBjb25zdCBmYWN0b3J5UGVyc2lzdGVuY2UgPVxuICAgICAgcGVyc2lzdGVuY2UgaW5zdGFuY2VvZiBNb2RlbFNlcnZpY2UgPyBwZXJzaXN0ZW5jZS5yZXBvIDogcGVyc2lzdGVuY2U7XG5cbiAgICBjb25zdCBkZWNvcmF0b3JDb25maWcgPSBNZXRhZGF0YS5nZXQoXG4gICAgICBNb2RlbENvbnN0cixcbiAgICAgIE1ldGFkYXRhLmtleShERUNBRl9DT05UUk9MTEVSX0NPTkZJRylcbiAgICApIGFzIE1vZGVsQ29udHJvbGxlckZhY3RvcnlDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbW9kdWxlT3ZlcnJpZGUgPSBtb2R1bGVDb25maWdPdmVycmlkZXM/LltNb2RlbENvbnN0ci5uYW1lXTtcbiAgICBjb25zdCBtZXJnZWRDb25maWc6IE1vZGVsQ29udHJvbGxlckZhY3RvcnlDb25maWcgPSB7XG4gICAgICAuLi4oZ2xvYmFsRGVmYXVsdHMgfHwge30pLFxuICAgICAgLi4uKGRlY29yYXRvckNvbmZpZyB8fCB7fSksXG4gICAgICAuLi4obW9kdWxlT3ZlcnJpZGUgfHwge30pLFxuICAgIH07XG5cbiAgICBjb25zdCBGYWN0b3J5Q29udHJvbGxlciA9IE1vZGVsQ29udHJvbGxlckZhY3RvcnkuY3JlYXRlPFQ+KFxuICAgICAgTW9kZWxDb25zdHIsXG4gICAgICBmYWN0b3J5UGVyc2lzdGVuY2UsXG4gICAgICBtZXJnZWRDb25maWdcbiAgICApO1xuICAgIGNvbnN0IGZhY3RvcnlSb3V0ZXMgPSAoRmFjdG9yeUNvbnRyb2xsZXIgYXMgYW55KS5fX3JvdXRlc19fIGFzXG4gICAgICB8IFNlcnZlclJvdXRlW11cbiAgICAgIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgeyBnZXRQSywgYXBpUHJvcGVydGllcywgcGF0aDogcGtQYXRoIH0gPVxuICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5nZXRSb3V0ZVBhcmFtZXRlcnNGcm9tTW9kZWwoTW9kZWxDb25zdHIpO1xuXG4gICAgbG9nLmRlYnVnKFxuICAgICAgYENyZWF0aW5nIGNvbnRyb2xsZXIgZm9yIG1vZGVsOiAke21vZGVsQ2xhenpOYW1lfSB3aXRoICR7ZmFjdG9yeVJvdXRlcz8ubGVuZ3RoID8/IDB9IGZhY3Rvcnkgcm91dGVzYFxuICAgICk7XG5cbiAgICBjb25zdCBhdXRoQ29uZmlnOiBBdXRoQ29uZmlnIHwgdW5kZWZpbmVkID0gbWVyZ2VkQ29uZmlnLmF1dGg7XG5cbiAgICBmdW5jdGlvbiBhcHBseUNsYXNzQXV0aCh0YXJnZXQ6IGFueSkge1xuICAgICAgaWYgKGF1dGhDb25maWc/LnB1YmxpYykge1xuICAgICAgICBQdWJsaWMoKSh0YXJnZXQpO1xuICAgICAgfSBlbHNlIGlmIChhdXRoQ29uZmlnPy5yb2xlcz8ubGVuZ3RoKSB7XG4gICAgICAgIFJlcXVpcmVSb2xlcyguLi5hdXRoQ29uZmlnLnJvbGVzKSh0YXJnZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQXV0aChNb2RlbENvbnN0cikodGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIGlmIChhdXRoQ29uZmlnPy5za2lwTW9kZWxSb2xlcykge1xuICAgICAgICBTZXRNZXRhZGF0YShTS0lQX01PREVMX1JPTEVTX0tFWSwgdHJ1ZSkodGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAQ29udHJvbGxlcihyb3V0ZVBhdGgpXG4gICAgQEFwaVRhZ3MobW9kZWxDbGF6ek5hbWUpXG4gICAgQEFwaUV4dHJhTW9kZWxzKE1vZGVsQ29uc3RyKVxuICAgIGNsYXNzIER5bmFtaWNNb2RlbENvbnRyb2xsZXIgZXh0ZW5kcyBEZWNhZk1vZGVsQ29udHJvbGxlcjxUPiB7XG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHBrOiBzdHJpbmcgPSBNb2RlbC5wayhNb2RlbENvbnN0cikgYXMgc3RyaW5nO1xuXG4gICAgICBwcm90ZWN0ZWQgc3RhdGljIGdldCBjbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIE1vZGVsQ29uc3RyO1xuICAgICAgfVxuXG4gICAgICBvdmVycmlkZSBnZXQgY2xhc3MoKTogTW9kZWxDb25zdHJ1Y3RvcjxUPiB7XG4gICAgICAgIHJldHVybiBNb2RlbENvbnN0cjtcbiAgICAgIH1cblxuICAgICAgY29uc3RydWN0b3IoY2xpZW50Q29udGV4dDogRGVjYWZSZXF1ZXN0Q29udGV4dCkge1xuICAgICAgICBzdXBlcihjbGllbnRDb250ZXh0LCBEeW5hbWljTW9kZWxDb250cm9sbGVyLm5hbWUpO1xuICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICBgUmVnaXN0ZXJpbmcgZHluYW1pYyBjb250cm9sbGVyIGZvciBtb2RlbDogJHt0aGlzLmNsYXNzLm5hbWV9IHJvdXRlOiAvJHtyb3V0ZVBhdGh9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFwcGx5Q2xhc3NBdXRoKER5bmFtaWNNb2RlbENvbnRyb2xsZXIpO1xuXG4gICAgaWYgKGZhY3RvcnlSb3V0ZXMpIHtcbiAgICAgIGNvbnN0IHNvcnRlZFJvdXRlcyA9IFsuLi5mYWN0b3J5Um91dGVzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFTZWdtZW50cyA9IGEucGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICBjb25zdCBiU2VnbWVudHMgPSBiLnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgY29uc3QgYVBhcmFtQ291bnQgPSBhU2VnbWVudHMuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGJQYXJhbUNvdW50ID0gYlNlZ21lbnRzLmZpbHRlcigocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSkubGVuZ3RoO1xuICAgICAgICBjb25zdCBhTGl0ZXJhbENvdW50ID0gYVNlZ21lbnRzLmxlbmd0aCAtIGFQYXJhbUNvdW50O1xuICAgICAgICBjb25zdCBiTGl0ZXJhbENvdW50ID0gYlNlZ21lbnRzLmxlbmd0aCAtIGJQYXJhbUNvdW50O1xuICAgICAgICBpZiAoYUxpdGVyYWxDb3VudCAhPT0gYkxpdGVyYWxDb3VudClcbiAgICAgICAgICByZXR1cm4gYkxpdGVyYWxDb3VudCAtIGFMaXRlcmFsQ291bnQ7XG4gICAgICAgIGlmIChhUGFyYW1Db3VudCAhPT0gYlBhcmFtQ291bnQpXG4gICAgICAgICAgcmV0dXJuIGFQYXJhbUNvdW50IC0gYlBhcmFtQ291bnQ7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHNvcnRlZFJvdXRlcykge1xuICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBGcm9tTW9kZWxDb250cm9sbGVyLm1hdGNoUm91dGUoXG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgcGtQYXRoLFxuICAgICAgICAgIGFwaVByb3BlcnRpZXMsXG4gICAgICAgICAgZ2V0UEssXG4gICAgICAgICAgTW9kZWxDb25zdHIsXG4gICAgICAgICAgbW9kZWxDbGF6ek5hbWUsXG4gICAgICAgICAgZmFjdG9yeVBlcnNpc3RlbmNlXG4gICAgICAgICk7XG4gICAgICAgIGlmICghcmVnaXN0cmF0aW9uKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCB7IG1ldGhvZE5hbWUsIGhhbmRsZXIsIGRlY29yYXRvcnMsIHBhcmFtRGVjb3JhdG9ycyB9ID1cbiAgICAgICAgICByZWdpc3RyYXRpb247XG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IEZyb21Nb2RlbENvbnRyb2xsZXIuZGVmaW5lTWV0aG9kKFxuICAgICAgICAgIER5bmFtaWNNb2RlbENvbnRyb2xsZXIsXG4gICAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgICBoYW5kbGVyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICBjb25zdCBodHRwRGVjb3JhdG9yID0gSHR0cFZlcmJUb0RlY29yYXRvcihyb3V0ZS5tZXRob2QgYXMgSHR0cFZlcmJzKShcbiAgICAgICAgICAgIHJvdXRlLnBhdGgucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIikgfHwgdW5kZWZpbmVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmFwcGx5RGVjb3JhdG9ycyhcbiAgICAgICAgICAgIER5bmFtaWNNb2RlbENvbnRyb2xsZXIsXG4gICAgICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICAgICAgW2h0dHBEZWNvcmF0b3IsIC4uLmRlY29yYXRvcnNdLFxuICAgICAgICAgICAgcGFyYW1EZWNvcmF0b3JzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBEeW5hbWljTW9kZWxDb250cm9sbGVyIGFzIGFueTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRSb3V0ZVBhcmFtZXRlcnNGcm9tTW9kZWw8VCBleHRlbmRzIE1vZGVsPGFueT4+KFxuICAgIE1vZGVsQ2xheno6IE1vZGVsQ29uc3RydWN0b3I8VD5cbiAgKToge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGFwaVByb3BlcnRpZXM6IERlY2FmQXBpUHJvcGVydHlbXTtcbiAgICBnZXRQSzogKC4uLnBhcmFtczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPikgPT4gc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCBwayA9IE1vZGVsLnBrKE1vZGVsQ2xhenopIGFzIGtleW9mIE1vZGVsPGFueT47XG4gICAgY29uc3QgY29tcG9zZWQgPSBNZXRhZGF0YS5nZXQoXG4gICAgICBNb2RlbENsYXp6LFxuICAgICAgTWV0YWRhdGEua2V5KERCS2V5cy5DT01QT1NFRCwgcGspXG4gICAgKTtcbiAgICBjb25zdCBjb21wb3NlZEtleXMgPSBjb21wb3NlZD8uYXJncyA/PyBbXTtcblxuICAgIGNvbnN0IHVuaXF1ZUtleXMgPVxuICAgICAgQXJyYXkuaXNBcnJheShjb21wb3NlZEtleXMpICYmIGNvbXBvc2VkS2V5cy5sZW5ndGggPiAwXG4gICAgICAgID8gQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5jb21wb3NlZEtleXNdKSlcbiAgICAgICAgOiBBcnJheS5mcm9tKG5ldyBTZXQoW3BrXSkpO1xuXG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBNZXRhZGF0YS5kZXNjcmlwdGlvbihNb2RlbENsYXp6KSA/PyBcIlwiO1xuICAgIGNvbnN0IHBhdGggPSBgOiR7dW5pcXVlS2V5cy5qb2luKFwiLzpcIil9YDtcbiAgICBjb25zdCBhcGlQcm9wZXJ0aWVzOiBEZWNhZkFwaVByb3BlcnR5W10gPSB1bmlxdWVLZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBNZXRhZGF0YS5kZXNjcmlwdGlvbihNb2RlbENsYXp6LCBrZXkpLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBhcGlQcm9wZXJ0aWVzLFxuICAgICAgZ2V0UEs6ICguLi5wYXJhbXM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4pID0+XG4gICAgICAgIGNvbXBvc2VkPy5zZXBhcmF0b3IgPyBwYXJhbXMuam9pbihjb21wb3NlZC5zZXBhcmF0b3IpIDogcGFyYW1zLmpvaW4oXCJcIiksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGRlZmluZU1ldGhvZChcbiAgICB0YXJnZXQ6IGFueSxcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgaGFuZGxlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnlcbiAgKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICB0YXJnZXQucHJvdG90eXBlIHx8IHRhcmdldCxcbiAgICAgIG1ldGhvZE5hbWUsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBoYW5kbGVyLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgdGFyZ2V0LnByb3RvdHlwZSB8fCB0YXJnZXQsXG4gICAgICBtZXRob2ROYW1lXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5RGVjb3JhdG9ycyhcbiAgICB0YXJnZXQ6IGFueSxcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgbWV0aG9kRGVjb3JhdG9yczogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPixcbiAgICBwYXJhbURlY29yYXRvcnM6IEFycmF5PHsgZGVjb3JhdG9yOiBQYXJhbWV0ZXJEZWNvcmF0b3I7IGluZGV4OiBudW1iZXIgfT4gPSBbXVxuICApIHtcbiAgICBjb25zdCBwcm90byA9IHRhcmdldD8ucHJvdG90eXBlID8/IHRhcmdldDtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgbWV0aG9kTmFtZSk7XG4gICAgbWV0aG9kRGVjb3JhdG9ycy5mb3JFYWNoKChkKSA9PiBkKHByb3RvLCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKSk7XG4gICAgcGFyYW1EZWNvcmF0b3JzLmZvckVhY2goKHsgZGVjb3JhdG9yLCBpbmRleCB9KSA9PlxuICAgICAgZGVjb3JhdG9yKHByb3RvLCBtZXRob2ROYW1lLCBpbmRleClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbWF0Y2hSb3V0ZShcbiAgICByb3V0ZTogU2VydmVyUm91dGUsXG4gICAgcGtQYXRoOiBzdHJpbmcsXG4gICAgYXBpUHJvcGVydGllczogRGVjYWZBcGlQcm9wZXJ0eVtdLFxuICAgIGdldFBLOiAoLi4ucDogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPikgPT4gc3RyaW5nLFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZyxcbiAgICBwZXJzaXN0ZW5jZT86IGFueVxuICApOiB7XG4gICAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICAgIGhhbmRsZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuICAgIGRlY29yYXRvcnM6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD47XG4gICAgcGFyYW1EZWNvcmF0b3JzOiBBcnJheTx7IGRlY29yYXRvcjogUGFyYW1ldGVyRGVjb3JhdG9yOyBpbmRleDogbnVtYmVyIH0+O1xuICB9IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB7IG1ldGhvZCwgcGF0aCB9ID0gcm91dGU7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpO1xuXG4gICAgaWYgKG1ldGhvZCA9PT0gXCJQT1NUXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgXCJjcmVhdGVcIixcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVDcmVhdGVIYW5kbGVyKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQ3JlYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICBbeyBkZWNvcmF0b3I6IERlY2FmQm9keSgpIGFzIGFueSwgaW5kZXg6IDAgfSwgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSkgYXMgYW55LCBpbmRleDogMSB9XVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSBcIlBPU1RcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJidWxrXCIpIHtcbiAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgXCJjcmVhdGVBbGxcIixcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVCdWxrQ3JlYXRlSGFuZGxlcihNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmJ1bGtDcmVhdGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIFt7IGRlY29yYXRvcjogRGVjYWZCb2R5KCkgYXMgYW55LCBpbmRleDogMCB9LCB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSBhcyBhbnksIGluZGV4OiAxIH1dXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IFwiYnVsa1wiKSB7XG4gICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXG4gICAgICAgIFwicmVhZEFsbFwiLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtSZWFkSGFuZGxlcihtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuYnVsa1JlYWREZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIFt7IGRlY29yYXRvcjogUXVlcnkoXCJpZHNcIikgYXMgYW55LCBpbmRleDogMCB9XVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSBcIlBVVFwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBcImJ1bGtcIikge1xuICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICBcInVwZGF0ZUFsbFwiLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtVcGRhdGVIYW5kbGVyKG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5idWxrVXBkYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMpLFxuICAgICAgICBbeyBkZWNvcmF0b3I6IERlY2FmQm9keSgpIGFzIGFueSwgaW5kZXg6IDAgfSwgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSkgYXMgYW55LCBpbmRleDogMSB9XVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSBcIkRFTEVURVwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBcImJ1bGtcIikge1xuICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICBcImRlbGV0ZUFsbFwiLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtEZWxldGVIYW5kbGVyKG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5idWxrRGVsZXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMpLFxuICAgICAgICBbeyBkZWNvcmF0b3I6IFF1ZXJ5KFwiaWRzXCIpIGFzIGFueSwgaW5kZXg6IDAgfSwgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSkgYXMgYW55LCBpbmRleDogMSB9XVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBwa1BhdGgpIHtcbiAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgXCJyZWFkXCIsXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVhZEhhbmRsZXIoZ2V0UEssIG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5yZWFkRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMsIHBrUGF0aCksXG4gICAgICAgIFt7IGRlY29yYXRvcjogRGVjYWZQYXJhbXMoYXBpUHJvcGVydGllcykgYXMgYW55LCBpbmRleDogMCB9XVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSBcIlBVVFwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBwa1BhdGgpIHtcbiAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgXCJ1cGRhdGVcIixcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVVcGRhdGVIYW5kbGVyKGdldFBLLCBNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLnVwZGF0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzLCBwa1BhdGgpLFxuICAgICAgICBbXG4gICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGFwaVByb3BlcnRpZXMpIGFzIGFueSwgaW5kZXg6IDAgfSxcbiAgICAgICAgICB7IGRlY29yYXRvcjogRGVjYWZCb2R5KCkgYXMgYW55LCBpbmRleDogMSB9LFxuICAgICAgICAgIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pIGFzIGFueSwgaW5kZXg6IDIgfSxcbiAgICAgICAgXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSBcIkRFTEVURVwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBwa1BhdGgpIHtcbiAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgXCJkZWxldGVcIixcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVEZWxldGVIYW5kbGVyKGdldFBLLCBtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuZGVsZXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMsIHBrUGF0aCksXG4gICAgICAgIFtcbiAgICAgICAgICB7IGRlY29yYXRvcjogRGVjYWZQYXJhbXMoYXBpUHJvcGVydGllcykgYXMgYW55LCBpbmRleDogMCB9LFxuICAgICAgICAgIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pIGFzIGFueSwgaW5kZXg6IDEgfSxcbiAgICAgICAgXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21wb3NlZCBQSyBmYWxsYmFjayByb3V0ZXMgKGZpbHRlckVtcHR5KSDigJQgcGF0aCBkaWZmZXJzIGZyb20gcGtQYXRoXG4gICAgY29uc3QgZmFsbGJhY2tTZWdtZW50cyA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgY29uc3QgaXNBbGxQYXJhbXMgPSBmYWxsYmFja1NlZ21lbnRzLmxlbmd0aCA+IDAgJiYgZmFsbGJhY2tTZWdtZW50cy5ldmVyeSgocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSk7XG4gICAgaWYgKGlzQWxsUGFyYW1zICYmIG5vcm1hbGl6ZWRQYXRoICE9PSBwa1BhdGgpIHtcbiAgICAgIGNvbnN0IGZhbGxiYWNrQXBpUHJvcHMgPSBmYWxsYmFja1NlZ21lbnRzLm1hcCgocykgPT4gcy5zbGljZSgxKSkubWFwKChuYW1lKSA9PiAoe1xuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYCR7bmFtZX0gcGFyYW1ldGVyYCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHN1ZmZpeCA9IGZhbGxiYWNrU2VnbWVudHMubWFwKChzKSA9PiBzLnNsaWNlKDEpKS5qb2luKFwiQW5kXCIpO1xuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXG4gICAgICAgICAgYHJlYWRCeSR7c3VmZml4fWAsXG4gICAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWFkSGFuZGxlcihnZXRQSywgbW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIucmVhZERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBmYWxsYmFja0FwaVByb3BzLCBub3JtYWxpemVkUGF0aCksXG4gICAgICAgICAgW3sgZGVjb3JhdG9yOiBEZWNhZlBhcmFtcyhmYWxsYmFja0FwaVByb3BzKSBhcyBhbnksIGluZGV4OiAwIH1dXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09PSBcIlBVVFwiKSB7XG4gICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgICBgdXBkYXRlQnkke3N1ZmZpeH1gLFxuICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlVXBkYXRlSGFuZGxlcihnZXRQSywgTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLnVwZGF0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBmYWxsYmFja0FwaVByb3BzLCBub3JtYWxpemVkUGF0aCksXG4gICAgICAgICAgW1xuICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGZhbGxiYWNrQXBpUHJvcHMpIGFzIGFueSwgaW5kZXg6IDAgfSxcbiAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBEZWNhZkJvZHkoKSBhcyBhbnksIGluZGV4OiAxIH0sXG4gICAgICAgICAgICB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSBhcyBhbnksIGluZGV4OiAyIH0sXG4gICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PT0gXCJERUxFVEVcIikge1xuICAgICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXG4gICAgICAgICAgYGRlbGV0ZUJ5JHtzdWZmaXh9YCxcbiAgICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZURlbGV0ZUhhbmRsZXIoZ2V0UEssIG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmRlbGV0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBmYWxsYmFja0FwaVByb3BzLCBub3JtYWxpemVkUGF0aCksXG4gICAgICAgICAgW1xuICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGZhbGxiYWNrQXBpUHJvcHMpIGFzIGFueSwgaW5kZXg6IDAgfSxcbiAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pIGFzIGFueSwgaW5kZXg6IDEgfSxcbiAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJzdGF0ZW1lbnQvOm1ldGhvZC8qYXJnc1wiKSB7XG4gICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXG4gICAgICAgIFwic3RhdGVtZW50XCIsXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlU3RhdGVtZW50SGFuZGxlcihtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuc3RhdGVtZW50RGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICBbXG4gICAgICAgICAgeyBkZWNvcmF0b3I6IFBhcmFtKFwibWV0aG9kXCIpIGFzIGFueSwgaW5kZXg6IDAgfSxcbiAgICAgICAgICB7IGRlY29yYXRvcjogUGFyYW0oXCJhcmdzXCIpIGFzIGFueSwgaW5kZXg6IDEgfSxcbiAgICAgICAgICB7IGRlY29yYXRvcjogRGVjYWZRdWVyeSgpIGFzIGFueSwgaW5kZXg6IDIgfSxcbiAgICAgICAgXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRSb3V0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBcImxpc3RCeS86a2V5XCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5MSVNUX0JZLFxuICAgICAgXCJwYWdpbmF0ZUJ5LzprZXkvOnBhZ2VcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0VfQlksXG4gICAgICBcImZpbmQvOnZhbHVlXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5ELFxuICAgICAgXCJwYWdlLzp2YWx1ZVwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRSxcbiAgICAgIFwiZmluZE9uZUJ5LzprZXkvOnZhbHVlXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX09ORV9CWSxcbiAgICAgIFwiZmluZEJ5LzprZXkvOnZhbHVlXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX0JZLFxuICAgICAgXCJjb3VudE9mLzpmaWVsZFwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuQ09VTlRfT0YsXG4gICAgICBcIm1heE9mLzpmaWVsZFwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUFYX09GLFxuICAgICAgXCJtaW5PZi86ZmllbGRcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLk1JTl9PRixcbiAgICAgIFwiYXZnT2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5BVkdfT0YsXG4gICAgICBcInN1bU9mLzpmaWVsZFwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuU1VNX09GLFxuICAgICAgXCJkaXN0aW5jdE9mLzpmaWVsZFwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuRElTVElOQ1RfT0YsXG4gICAgICBcImdyb3VwT2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5HUk9VUF9PRixcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhdGVtZW50S2V5ID0gc3RhdGVtZW50Um91dGVzW25vcm1hbGl6ZWRQYXRoXTtcbiAgICBpZiAoc3RhdGVtZW50S2V5ICYmIG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLnN0YXRlbWVudE1ldGhvZE5hbWUobm9ybWFsaXplZFBhdGgpLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVN0YXRlbWVudFNob3J0Y3V0SGFuZGxlcihzdGF0ZW1lbnRLZXksIG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5zdGF0ZW1lbnRTaG9ydGN1dERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBub3JtYWxpemVkUGF0aCwgc3RhdGVtZW50S2V5KSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5zdGF0ZW1lbnRTaG9ydGN1dFBhcmFtcyhub3JtYWxpemVkUGF0aClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIiAmJiBub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKFwicXVlcnkvXCIpKSB7XG4gICAgICBjb25zdCBxdWVyeU1ldGhvZCA9IG5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UoL15xdWVyeVxcLy8sIFwiXCIpLnNwbGl0KFwiL1wiKVswXTtcbiAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgcXVlcnlNZXRob2QsXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQ29tcGxleFF1ZXJ5SGFuZGxlcihxdWVyeU1ldGhvZCksXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuZ2V0UXVlcnlEZWNvcmF0b3JzKHF1ZXJ5TWV0aG9kLCBub3JtYWxpemVkUGF0aCwgXCJHRVRcIiwgdHJ1ZSksXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY29tcGxleFF1ZXJ5UGFyYW1zKG5vcm1hbGl6ZWRQYXRoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3IgY3VzdG9tIEByb3V0ZSgpIHBhdGhzIChlLmcuIFwibWV0YWRhdGEvZm9yLXByb2R1Y3QvOnByb2R1Y3RDb2RlXCIpXG4gICAgY29uc3QgcGF0aFNlZ21lbnRzID0gbm9ybWFsaXplZFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCBrbm93blByZWZpeGVzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICAgIFwibGlzdEJ5XCIsIFwiZmluZEJ5XCIsIFwiZmluZEJ5UGFnaW5hdGVcIiwgXCJmaW5kT25lQnlcIiwgXCJwYWdpbmF0ZUJ5XCIsXG4gICAgICBcImZpbmRcIiwgXCJwYWdlXCIsIFwiY291bnRPZlwiLCBcIm1heE9mXCIsIFwibWluT2ZcIiwgXCJhdmdPZlwiLCBcInN1bU9mXCIsXG4gICAgICBcImRpc3RpbmN0T2ZcIiwgXCJncm91cE9mXCIsIFwic3RhdGVtZW50XCIsIFwiYnVsa1wiLCBcInF1ZXJ5XCIsXG4gICAgXSk7XG4gICAgaWYgKFxuICAgICAgcGF0aFNlZ21lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICFub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKFwicXVlcnkvXCIpICYmXG4gICAgICAha25vd25QcmVmaXhlcy5oYXMocGF0aFNlZ21lbnRzWzBdKVxuICAgICkge1xuICAgICAgLy8gTG9vayB1cCB0aGUgYWN0dWFsIG1ldGhvZCBuYW1lIGZyb20gQHJvdXRlIG1ldGFkYXRhIGJ5IG1hdGNoaW5nIHRoZSBwYXRoLlxuICAgICAgLy8gVGhlIEByb3V0ZSBkZWNvcmF0b3Igc3RvcmVzIHsgcGF0aCwgaHR0cE1ldGhvZCwgaGFuZGxlciB9IGtleWVkIGJ5IG1ldGhvZCBuYW1lXG4gICAgICAvLyBvbiB0aGUgcmVwb3NpdG9yeSBjb25zdHJ1Y3Rvci5cbiAgICAgIGNvbnN0IHJvdXRlTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPVxuICAgICAgICBNZXRhZGF0YS5nZXQoXG4gICAgICAgICAgKHBlcnNpc3RlbmNlIGFzIGFueSk/LmNvbnN0cnVjdG9yLFxuICAgICAgICAgIE1ldGFkYXRhLmtleShERUNBRl9ST1VURSlcbiAgICAgICAgKSA/PyB7fTtcbiAgICAgIGNvbnN0IG1hdGNoZWRFbnRyeSA9IE9iamVjdC5lbnRyaWVzKHJvdXRlTWV0YWRhdGEpLmZpbmQoXG4gICAgICAgIChbLCBpbmZvXSkgPT5cbiAgICAgICAgICBpbmZvICYmXG4gICAgICAgICAgdHlwZW9mIGluZm8gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICBpbmZvLnBhdGg/LnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpID09PSBub3JtYWxpemVkUGF0aFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFjdHVhbE1ldGhvZE5hbWUgPSBtYXRjaGVkRW50cnk/LlswXSB8fCBwYXRoU2VnbWVudHNbMF07XG5cbiAgICAgIGNvbnN0IHBhcmFtU2VnbWVudHMgPSBwYXRoU2VnbWVudHMuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKTtcbiAgICAgIGNvbnN0IGFwaVBhdGhQYXJhbXMgPSBwYXJhbVNlZ21lbnRzLm1hcCgocykgPT4gcy5zbGljZSgxKSkubWFwKChuYW1lKSA9PiAoe1xuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYCR7bmFtZX0gcGFyYW1ldGVyIGZvciB0aGUgcXVlcnlgLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXG4gICAgICAgIGFjdHVhbE1ldGhvZE5hbWUsXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQ3VzdG9tUm91dGVIYW5kbGVyKGFjdHVhbE1ldGhvZE5hbWUpLFxuICAgICAgICBbXG4gICAgICAgICAgLi4uYXBpUGF0aFBhcmFtcy5tYXAoKHApID0+IEFwaVBhcmFtKHApKSxcbiAgICAgICAgICBBcGlPcGVyYXRpb24oeyBzdW1tYXJ5OiBgUmV0cmlldmUgcmVjb3JkcyB1c2luZyBcIiR7YWN0dWFsTWV0aG9kTmFtZX1cIi5gIH0pLFxuICAgICAgICAgIEFwaU9rUmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJSZXN1bHQgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZC5cIiB9KSxcbiAgICAgICAgICBBcGlOb0NvbnRlbnRSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBcIk5vIGNvbnRlbnQgcmV0dXJuZWQgYnkgdGhlIG1ldGhvZC5cIiB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jb21wbGV4UXVlcnlQYXJhbXMobm9ybWFsaXplZFBhdGgpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVSZWdpc3RyYXRpb24oXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIGhhbmRsZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55LFxuICAgIGRlY29yYXRvcnM6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD4sXG4gICAgcGFyYW1EZWNvcmF0b3JzOiBBcnJheTx7IGRlY29yYXRvcjogUGFyYW1ldGVyRGVjb3JhdG9yOyBpbmRleDogbnVtYmVyIH0+XG4gICkge1xuICAgIHJldHVybiB7IG1ldGhvZE5hbWUsIGhhbmRsZXIsIGRlY29yYXRvcnMsIHBhcmFtRGVjb3JhdG9ycyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc3RhdGVtZW50TWV0aG9kTmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpcnN0U2VnbWVudCA9IHBhdGguc3BsaXQoXCIvXCIpWzBdO1xuICAgIHJldHVybiBmaXJzdFNlZ21lbnQ7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzdGF0ZW1lbnRTaG9ydGN1dFBhcmFtcyhcbiAgICBwYXRoOiBzdHJpbmdcbiAgKTogQXJyYXk8eyBkZWNvcmF0b3I6IFBhcmFtZXRlckRlY29yYXRvcjsgaW5kZXg6IG51bWJlciB9PiB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpO1xuICAgIGNvbnN0IHBhcmFtczogQXJyYXk8eyBkZWNvcmF0b3I6IFBhcmFtZXRlckRlY29yYXRvcjsgaW5kZXg6IG51bWJlciB9PiA9IFtdO1xuICAgIHNlZ21lbnRzLmZvckVhY2goKHNlZywgaSkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHNlZy5yZXBsYWNlKFwiOlwiLCBcIlwiKTtcbiAgICAgIHBhcmFtcy5wdXNoKHsgZGVjb3JhdG9yOiBQYXJhbShuYW1lKSBhcyBhbnksIGluZGV4OiBpIH0pO1xuICAgIH0pO1xuICAgIGlmIChcbiAgICAgIHBhdGguc3RhcnRzV2l0aChcImxpc3RCeS9cIikgfHxcbiAgICAgIHBhdGguc3RhcnRzV2l0aChcInBhZ2luYXRlQnkvXCIpIHx8XG4gICAgICBwYXRoLnN0YXJ0c1dpdGgoXCJmaW5kL1wiKSB8fFxuICAgICAgcGF0aC5zdGFydHNXaXRoKFwicGFnZS9cIilcbiAgICApIHtcbiAgICAgIHBhcmFtcy5wdXNoKHsgZGVjb3JhdG9yOiBEZWNhZlF1ZXJ5KCkgYXMgYW55LCBpbmRleDogc2VnbWVudHMubGVuZ3RoIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY29tcGxleFF1ZXJ5UGFyYW1zKFxuICAgIHBhdGg6IHN0cmluZ1xuICApOiBBcnJheTx7IGRlY29yYXRvcjogUGFyYW1ldGVyRGVjb3JhdG9yOyBpbmRleDogbnVtYmVyIH0+IHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSk7XG4gICAgY29uc3QgcGFyYW1zOiBBcnJheTx7IGRlY29yYXRvcjogUGFyYW1ldGVyRGVjb3JhdG9yOyBpbmRleDogbnVtYmVyIH0+ID0gW107XG4gICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnLCBpKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gc2VnLnJlcGxhY2UoXCI6XCIsIFwiXCIpO1xuICAgICAgcGFyYW1zLnB1c2goeyBkZWNvcmF0b3I6IFBhcmFtKG5hbWUpIGFzIGFueSwgaW5kZXg6IGkgfSk7XG4gICAgfSk7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChcInF1ZXJ5L1wiKSkge1xuICAgICAgcGFyYW1zLnB1c2goeyBkZWNvcmF0b3I6IERlY2FmUXVlcnkoKSBhcyBhbnksIGluZGV4OiBzZWdtZW50cy5sZW5ndGggfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVDcmVhdGVIYW5kbGVyKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY3JlYXRlKFxuICAgICAgdGhpczogYW55LFxuICAgICAgZGF0YTogYW55LFxuICAgICAgcmVzcD86IGFueVxuICAgICk6IFByb21pc2U8TW9kZWw8YW55Pj4ge1xuICAgICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbXSwgT3BlcmF0aW9uS2V5cy5DUkVBVEUsIHRydWUpXG4gICAgICApLmZvcihjcmVhdGUpO1xuICAgICAgbG9nLnZlcmJvc2UoYGNyZWF0aW5nIG5ldyAke21vZGVsQ2xhenpOYW1lfWApO1xuICAgICAgbGV0IGNyZWF0ZWQ6IE1vZGVsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3JlYXRlZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5jcmVhdGUoZGF0YSwgY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIG5ldyAke21vZGVsQ2xhenpOYW1lfWAsIGUgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbG9nLmluZm8oYGNyZWF0ZWQgbmV3ICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHsoY3JlYXRlZCBhcyBhbnkpW3RoaXMucGtdfWApO1xuICAgICAgaWYgKHJlc3ApIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUJ1bGtDcmVhdGVIYW5kbGVyKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY3JlYXRlQWxsKFxuICAgICAgdGhpczogYW55LFxuICAgICAgZGF0YTogYW55W10sXG4gICAgICByZXNwPzogYW55XG4gICAgKTogUHJvbWlzZTxNb2RlbFtdPiB7XG4gICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuQ1JFQVRFX0FMTCwgdHJ1ZSlcbiAgICAgICkuZm9yKGNyZWF0ZUFsbCk7XG4gICAgICBsb2cudmVyYm9zZShgY3JlYXRpbmcgbmV3ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICBsZXQgY3JlYXRlZDogYW55W107XG4gICAgICB0cnkge1xuICAgICAgICBjcmVhdGVkID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLmNyZWF0ZUFsbChcbiAgICAgICAgICBkYXRhLm1hcCgoZCkgPT4gbmV3IE1vZGVsQ29uc3RyKGQpKSxcbiAgICAgICAgICBjdHhcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIG5ldyAke21vZGVsQ2xhenpOYW1lfWAsIGUgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbG9nLmluZm8oYGNyZWF0ZWQgbmV3ICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHsoY3JlYXRlZCBhcyBhbnkpW3RoaXMucGtdfWApO1xuICAgICAgaWYgKHJlc3ApIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUJ1bGtSZWFkSGFuZGxlcihtb2RlbENsYXp6TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHJlYWRBbGwoXG4gICAgICB0aGlzOiBhbnksXG4gICAgICBpZHM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxNb2RlbFtdPiB7XG4gICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuUkVBRF9BTEwsIHRydWUpXG4gICAgICApLmZvcihyZWFkQWxsKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRJZHMgPSBBcnJheS5pc0FycmF5KGlkcykgPyBpZHMgOiBbaWRzXTtcbiAgICAgIGxldCByZWFkOiBNb2RlbFtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nLmRlYnVnKGByZWFkaW5nICR7bm9ybWFsaXplZElkc30gJHttb2RlbENsYXp6TmFtZX1gKTtcbiAgICAgICAgcmVhZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5yZWFkQWxsKG5vcm1hbGl6ZWRJZHMgYXMgYW55LCBjdHgpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byByZWFkICR7bW9kZWxDbGF6ek5hbWV9YCwgZSBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhgcmVhZCAke3JlYWQubGVuZ3RofSAke21vZGVsQ2xhenpOYW1lfWApO1xuICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUJ1bGtVcGRhdGVIYW5kbGVyKG1vZGVsQ2xhenpOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsKFxuICAgICAgdGhpczogYW55LFxuICAgICAgYm9keTogYW55W10sXG4gICAgICByZXNwPzogYW55XG4gICAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbXSwgQnVsa0NydWRPcGVyYXRpb25LZXlzLlVQREFURV9BTEwsIHRydWUpXG4gICAgICApLmZvcih1cGRhdGVBbGwpO1xuICAgICAgbGV0IHVwZGF0ZWQ6IGFueVtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nLmluZm8oYHVwZGF0aW5nICR7Ym9keS5sZW5ndGh9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgIHVwZGF0ZWQgPSBhd2FpdCB0aGlzLnBlcnNpc3RlbmNlKGN0eCkudXBkYXRlQWxsKGJvZHksIGN0eCk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGxvZy5lcnJvcihlIGFzIEVycm9yKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXNwKSBjdHgudG9SZXNwb25zZShyZXNwKTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVCdWxrRGVsZXRlSGFuZGxlcihtb2RlbENsYXp6TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFsbChcbiAgICAgIHRoaXM6IGFueSxcbiAgICAgIGlkczogc3RyaW5nW10sXG4gICAgICByZXNwPzogYW55XG4gICAgKTogUHJvbWlzZTxNb2RlbFtdPiB7XG4gICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuREVMRVRFX0FMTCwgdHJ1ZSlcbiAgICAgICkuZm9yKGRlbGV0ZUFsbCk7XG4gICAgICBjb25zdCBub3JtYWxpemVkSWRzID0gQXJyYXkuaXNBcnJheShpZHMpID8gaWRzIDogW2lkc107XG4gICAgICBsZXQgcmVhZDogTW9kZWxbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgZGVsZXRpbmcgJHtub3JtYWxpemVkSWRzLmxlbmd0aH0gJHttb2RlbENsYXp6TmFtZX1gKTtcbiAgICAgICAgcmVhZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5kZWxldGVBbGwobm9ybWFsaXplZElkcywgY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlICR7bW9kZWxDbGF6ek5hbWV9YCwgZSBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhgZGVsZXRlZCAke3JlYWQubGVuZ3RofSAke21vZGVsQ2xhenpOYW1lfWApO1xuICAgICAgaWYgKHJlc3ApIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVJlYWRIYW5kbGVyKFxuICAgIGdldFBLOiAoLi4ucDogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPikgPT4gc3RyaW5nLFxuICAgIG1vZGVsQ2xhenpOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHJlYWQoXG4gICAgICB0aGlzOiBhbnksXG4gICAgICByb3V0ZVBhcmFtczogYW55XG4gICAgKTogUHJvbWlzZTxNb2RlbD4ge1xuICAgICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbXSwgT3BlcmF0aW9uS2V5cy5SRUFELCB0cnVlKVxuICAgICAgKS5mb3IocmVhZCk7XG4gICAgICBjb25zdCBpZCA9IGdldFBLKC4uLnJvdXRlUGFyYW1zLnZhbHVlc0luT3JkZXIpO1xuICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgTm8gJHt0aGlzLnBrfSBwcm92aWRlZGApO1xuICAgICAgbGV0IHJlYWRSZXN1bHQ6IE1vZGVsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nLmRlYnVnKGByZWFkaW5nICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHt0aGlzLnBrfSAke2lkfWApO1xuICAgICAgICByZWFkUmVzdWx0ID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLnJlYWQoaWQsIGN0eCk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIHJlYWQgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAke2lkfWAsIGUgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbG9nLmluZm8oYHJlYWQgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAkeyhyZWFkUmVzdWx0IGFzIGFueSlbdGhpcy5wa119YCk7XG4gICAgICByZXR1cm4gcmVhZFJlc3VsdDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlVXBkYXRlSGFuZGxlcihcbiAgICBnZXRQSzogKC4uLnA6IEFycmF5PHN0cmluZyB8IG51bWJlcj4pID0+IHN0cmluZyxcbiAgICBNb2RlbENvbnN0cjogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgIG1vZGVsQ2xhenpOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZShcbiAgICAgIHRoaXM6IGFueSxcbiAgICAgIHJvdXRlUGFyYW1zOiBhbnksXG4gICAgICBib2R5OiBhbnksXG4gICAgICByZXNwPzogYW55XG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoW10sIE9wZXJhdGlvbktleXMuVVBEQVRFLCB0cnVlKVxuICAgICAgKS5mb3IodXBkYXRlKTtcbiAgICAgIGNvbnN0IGlkID0gZ2V0UEsoLi4ucm91dGVQYXJhbXMudmFsdWVzSW5PcmRlcik7XG4gICAgICBpZiAodHlwZW9mIGlkID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBObyAke3RoaXMucGt9IHByb3ZpZGVkYCk7XG4gICAgICBsZXQgdXBkYXRlZDogYW55O1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nLmluZm8oYHVwZGF0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHt0aGlzLnBrfSAke2lkfWApO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShib2R5KSk7XG4gICAgICAgIHVwZGF0ZWQgPSBhd2FpdCB0aGlzLnBlcnNpc3RlbmNlKGN0eCkudXBkYXRlKFxuICAgICAgICAgIG5ldyBNb2RlbENvbnN0cih7IC4uLnBheWxvYWQsIFt0aGlzLnBrXTogaWQgfSksXG4gICAgICAgICAgY3R4XG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGxvZy5lcnJvcihlIGFzIEVycm9yKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXNwKSBjdHgudG9SZXNwb25zZShyZXNwKTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVEZWxldGVIYW5kbGVyKFxuICAgIGdldFBLOiAoLi4ucDogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPikgPT4gc3RyaW5nLFxuICAgIG1vZGVsQ2xhenpOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHJlbW92ZShcbiAgICAgIHRoaXM6IGFueSxcbiAgICAgIHJvdXRlUGFyYW1zOiBhbnksXG4gICAgICByZXNwPzogYW55XG4gICAgKTogUHJvbWlzZTxNb2RlbD4ge1xuICAgICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbXSwgT3BlcmF0aW9uS2V5cy5ERUxFVEUsIHRydWUpXG4gICAgICApLmZvcihyZW1vdmUpO1xuICAgICAgY29uc3QgaWQgPSBnZXRQSyguLi5yb3V0ZVBhcmFtcy52YWx1ZXNJbk9yZGVyKTtcbiAgICAgIGlmICh0eXBlb2YgaWQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYE5vICR7dGhpcy5wa30gcHJvdmlkZWRgKTtcbiAgICAgIGxldCBkZWw6IE1vZGVsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nLmRlYnVnKGBkZWxldGluZyAke21vZGVsQ2xhenpOYW1lfSB3aXRoICR7dGhpcy5wa30gJHtpZH1gKTtcbiAgICAgICAgZGVsID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLmRlbGV0ZShpZCwgY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtpZH1gLCBlIGFzIEVycm9yKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKGBkZWxldGVkICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtpZH1gKTtcbiAgICAgIGlmIChyZXNwKSBjdHgudG9SZXNwb25zZShyZXNwKTtcbiAgICAgIHJldHVybiBkZWw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVN0YXRlbWVudEhhbmRsZXIobW9kZWxDbGF6ek5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBzdGF0ZW1lbnQoXG4gICAgICB0aGlzOiBhbnksXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICBhcmdzOiAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICAgICAgZGV0YWlsczogRGlyZWN0aW9uTGltaXRPZmZzZXRcbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgY29uc3QgeyBjdHggfSA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoW10sIFBlcnNpc3RlbmNlS2V5cy5TVEFURU1FTlQsIHRydWUpXG4gICAgICApLmZvcihzdGF0ZW1lbnQpO1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24sIG9mZnNldCwgbGltaXQsIGJvb2ttYXJrIH0gPSBkZXRhaWxzO1xuICAgICAgYXJncyA9IGFyZ3MubWFwKFxuICAgICAgICAoYSkgPT4gKHR5cGVvZiBhID09PSBcInN0cmluZ1wiID8gcGFyc2VJbnQoYSBhcyBzdHJpbmcpIDogYSkgfHwgYVxuICAgICAgKSBhcyBhbnlbXTtcbiAgICAgIGNvbnN0IHBhdGhEaXJlY3Rpb24gPSBhcmdzLmxlbmd0aCA+IDEgPyBhcmdzWzFdIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzb2x2ZWREaXJlY3Rpb24gPSAoZGlyZWN0aW9uID8/IHBhdGhEaXJlY3Rpb24pIGFzXG4gICAgICAgIHwgc3RyaW5nXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHJlc29sdmVkRGlyZWN0aW9uICYmIGFyZ3MubGVuZ3RoID4gMSkgYXJnc1sxXSA9IHJlc29sdmVkRGlyZWN0aW9uO1xuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQ6XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfQlk6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkxJU1RfQlk6XG4gICAgICAgICAgYXJncy5wdXNoKGRpcmVjdGlvbiBhcyBzdHJpbmcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFOlxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFX0JZOlxuICAgICAgICAgIGFyZ3MgPSBbXG4gICAgICAgICAgICBhcmdzWzBdLFxuICAgICAgICAgICAgcmVzb2x2ZWREaXJlY3Rpb24gYXMgYW55LFxuICAgICAgICAgICAgeyBsaW1pdCwgb2Zmc2V0LCBib29rbWFyayB9LFxuICAgICAgICAgIF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfT05FX0JZOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRjpcbiAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUFYX09GOlxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5NSU5fT0Y6XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkFWR19PRjpcbiAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuU1VNX09GOlxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5ESVNUSU5DVF9PRjpcbiAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuR1JPVVBfT0Y6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZW5jZShjdHgpLnN0YXRlbWVudChuYW1lLCAuLi5hcmdzLCBjdHgpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVTdGF0ZW1lbnRTaG9ydGN1dEhhbmRsZXIoXG4gICAgc3RhdGVtZW50S2V5OiBzdHJpbmcsXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gc3RhdGVtZW50U2hvcnRjdXQoXG4gICAgICB0aGlzOiBhbnksXG4gICAgICAuLi5hcmdzOiBhbnlbXVxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICBjb25zdCB7IGN0eCB9ID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbXSwgc3RhdGVtZW50S2V5LCB0cnVlKVxuICAgICAgKS5mb3Ioc3RhdGVtZW50U2hvcnRjdXQpO1xuXG4gICAgICBzd2l0Y2ggKHN0YXRlbWVudEtleSkge1xuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5MSVNUX0JZOiB7XG4gICAgICAgICAgY29uc3QgW2tleSwgZGV0YWlsc10gPSBhcmdzO1xuICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eCkubGlzdEJ5KFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgKGRldGFpbHMgYXMgYW55KT8uZGlyZWN0aW9uIGFzIE9yZGVyRGlyZWN0aW9uLFxuICAgICAgICAgICAgY3R4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFX0JZOiB7XG4gICAgICAgICAgY29uc3QgW2tleSwgcGFnZSwgZGV0YWlsc10gPSBhcmdzO1xuICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eCkucGFnaW5hdGVCeShcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIChkZXRhaWxzIGFzIGFueSk/LmRpcmVjdGlvbiBhcyBPcmRlckRpcmVjdGlvbixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbGltaXQ6IChkZXRhaWxzIGFzIGFueSk/LmxpbWl0LFxuICAgICAgICAgICAgICBvZmZzZXQ6IChkZXRhaWxzIGFzIGFueSk/Lm9mZnNldCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICAgICAgY3R4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EOiB7XG4gICAgICAgICAgY29uc3QgW3ZhbHVlLCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgY29uc3QgZGlyZWN0aW9uID1cbiAgICAgICAgICAgIChkZXRhaWxzIGFzIGFueSk/LmRpcmVjdGlvbiA/PyBPcmRlckRpcmVjdGlvbi5BU0M7XG4gICAgICAgICAgY29uc3QgcGVyc2lzdGVuY2UgPSB0aGlzLnBlcnNpc3RlbmNlKGN0eCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwZXJzaXN0ZW5jZS5maW5kID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2UuZmluZCh2YWx1ZSwgZGlyZWN0aW9uLCBjdHgpO1xuICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQoUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQsIHZhbHVlLCBkaXJlY3Rpb24sIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRToge1xuICAgICAgICAgIGNvbnN0IFt2YWx1ZSwgZGV0YWlsc10gPSBhcmdzO1xuICAgICAgICAgIGNvbnN0IHJlZiA9IHtcbiAgICAgICAgICAgIG9mZnNldDogKGRldGFpbHMgYXMgYW55KT8ub2Zmc2V0ID8/IDEsXG4gICAgICAgICAgICBsaW1pdDogKGRldGFpbHMgYXMgYW55KT8ubGltaXQgPz8gMTAsXG4gICAgICAgICAgICBib29rbWFyazogKGRldGFpbHMgYXMgYW55KT8uYm9va21hcmssXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IHRoaXMucGVyc2lzdGVuY2UoY3R4KTtcbiAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSAoZGV0YWlscyBhcyBhbnkpPy5kaXJlY3Rpb24gPz8gT3JkZXJEaXJlY3Rpb24uQVNDO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2UucGFnZSA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgcmV0dXJuIHBlcnNpc3RlbmNlLnBhZ2UodmFsdWUsIGRpcmVjdGlvbiwgcmVmLCBjdHgpO1xuICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQoUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0UsIHZhbHVlLCBkaXJlY3Rpb24sIHJlZiwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX09ORV9CWToge1xuICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGFyZ3M7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2UoY3R4KS5maW5kT25lQnkoa2V5LCB2YWx1ZSwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX0JZOiB7XG4gICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gYXJncztcbiAgICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZW5jZShjdHgpXG4gICAgICAgICAgICAuZm9yKGN0eC50b092ZXJyaWRlcygpKVxuICAgICAgICAgICAgLmZpbmRCeShrZXksIHZhbHVlLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuQ09VTlRfT0YgfHxcbiAgICAgICAgICAgIHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLk1BWF9PRiB8fFxuICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUlOX09GIHx8XG4gICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5BVkdfT0YgfHxcbiAgICAgICAgICAgIHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlNVTV9PRiB8fFxuICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuRElTVElOQ1RfT0YgfHxcbiAgICAgICAgICAgIHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkdST1VQX09GXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBbZmllbGRdID0gYXJncztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eCkuc3RhdGVtZW50KHN0YXRlbWVudEtleSwgZmllbGQsIGN0eCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGF0ZW1lbnQ6ICR7c3RhdGVtZW50S2V5fWApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVDb21wbGV4UXVlcnlIYW5kbGVyKG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBjb21wbGV4UXVlcnkoXG4gICAgICB0aGlzOiBhbnksXG4gICAgICAuLi5hcmdzOiBhbnlbXVxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICBjb25zdCBsb2c6IGFueSA9IHRoaXMubG9nPy5mb3I/Lihjb21wbGV4UXVlcnkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGxvZykgbG9nLmRlYnVnKGBJbnZva2luZyBjdXN0b20gcXVlcnkgXCIke21ldGhvZE5hbWV9XCJgKTtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IChcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbXSwgbWV0aG9kTmFtZSwgdHJ1ZSlcbiAgICAgICAgKS5mb3IoY29tcGxleFF1ZXJ5KTtcbiAgICAgICAgY29uc3QgcGVyc2lzdGVuY2UgPSB0aGlzLnBlcnNpc3RlbmNlKGN0eCk7XG4gICAgICAgIGNvbnN0IHNwcmVhZEFyZ3MgPSBGcm9tTW9kZWxDb250cm9sbGVyLmV4dHJhY3RRdWVyeUFyZ3MoYXJncyk7XG4gICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2VbbWV0aG9kTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZVttZXRob2ROYW1lXSguLi5zcHJlYWRBcmdzLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2Uuc3RhdGVtZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2Uuc3RhdGVtZW50KG1ldGhvZE5hbWUsIC4uLnNwcmVhZEFyZ3MsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBQZXJzaXN0ZW5jZSBtZXRob2QgXCIke21ldGhvZE5hbWV9XCIgbm90IGZvdW5kIG9uICR7cGVyc2lzdGVuY2U/LmNvbnN0cnVjdG9yPy5uYW1lfWBcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAobG9nKSBsb2cuZXJyb3IoYEN1c3RvbSBxdWVyeSBcIiR7bWV0aG9kTmFtZX1cIiBmYWlsZWRgLCBlKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQ3VzdG9tUm91dGVIYW5kbGVyKG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBjdXN0b21Sb3V0ZShcbiAgICAgIHRoaXM6IGFueSxcbiAgICAgIC4uLmFyZ3M6IGFueVtdXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGNvbnN0IGxvZzogYW55ID0gdGhpcy5sb2c/LmZvcj8uKGN1c3RvbVJvdXRlKTtcbiAgICAgIGNvbnN0IHsgY3R4IH0gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBtZXRob2ROYW1lLCB0cnVlKVxuICAgICAgKS5mb3IoY3VzdG9tUm91dGUpO1xuICAgICAgY29uc3QgcGVyc2lzdGVuY2UgPSB0aGlzLnBlcnNpc3RlbmNlKGN0eCk7XG4gICAgICBjb25zdCBzcHJlYWRBcmdzID0gRnJvbU1vZGVsQ29udHJvbGxlci5leHRyYWN0UXVlcnlBcmdzKGFyZ3MpO1xuXG4gICAgICAvLyBUcnkgdGhlIHBlcnNpc3RlbmNlIGRpcmVjdGx5ICh3b3JrcyB3aGVuIGl0J3MgYSBjdXN0b20gUmVwb3NpdG9yeSlcbiAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2VbbWV0aG9kTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2VbbWV0aG9kTmFtZV0oLi4uc3ByZWFkQXJncywgY3R4KTtcbiAgICAgIH1cbiAgICAgIC8vIFdoZW4gcGVyc2lzdGVuY2UgaXMgYSBNb2RlbFNlcnZpY2UsIHRoZSBtZXRob2QgbGl2ZXMgb24gdGhlIHVuZGVybHlpbmcgcmVwb1xuICAgICAgaWYgKHBlcnNpc3RlbmNlPy5yZXBvICYmIHR5cGVvZiBwZXJzaXN0ZW5jZS5yZXBvW21ldGhvZE5hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHBlcnNpc3RlbmNlLnJlcG9bbWV0aG9kTmFtZV0oLi4uc3ByZWFkQXJncywgY3R4KTtcbiAgICAgIH1cbiAgICAgIC8vIEZhbGwgYmFjayB0byBzdGF0ZW1lbnQgZ2F0ZXdheVxuICAgICAgaWYgKHR5cGVvZiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2Uuc3RhdGVtZW50KG1ldGhvZE5hbWUsIC4uLnNwcmVhZEFyZ3MsIGN0eCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNZXRob2QgXCIke21ldGhvZE5hbWV9XCIgbm90IGZvdW5kIG9uICR7cGVyc2lzdGVuY2U/LmNvbnN0cnVjdG9yPy5uYW1lfSBvciBpdHMgcmVwb2BcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGV4dHJhY3RRdWVyeUFyZ3MoYXJnczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gYXJncztcbiAgICBjb25zdCBsYXN0ID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChcbiAgICAgIGxhc3QgJiZcbiAgICAgIHR5cGVvZiBsYXN0ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShsYXN0KVxuICAgICkge1xuICAgICAgY29uc3QgcXVlcnlPYmogPSBhcmdzLnBvcCgpO1xuICAgICAgY29uc3QgaGFzRGlyZWN0aW9uID0gcXVlcnlPYmouZGlyZWN0aW9uICE9PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBoYXNMaW1pdCA9IHF1ZXJ5T2JqLmxpbWl0ICE9PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBoYXNPZmZzZXQgPSBxdWVyeU9iai5vZmZzZXQgIT09IHVuZGVmaW5lZDtcbiAgICAgIGlmICghaGFzRGlyZWN0aW9uICYmICFoYXNMaW1pdCAmJiAhaGFzT2Zmc2V0KSByZXR1cm4gYXJncztcbiAgICAgIGNvbnN0IGV4dHJhczogYW55W10gPSBbXTtcbiAgICAgIGlmIChoYXNEaXJlY3Rpb24pIGV4dHJhcy5wdXNoKHF1ZXJ5T2JqLmRpcmVjdGlvbik7XG4gICAgICBlbHNlIGlmIChoYXNMaW1pdCB8fCBoYXNPZmZzZXQpIGV4dHJhcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFzTGltaXQpIGV4dHJhcy5wdXNoKHF1ZXJ5T2JqLmxpbWl0KTtcbiAgICAgIGlmIChoYXNPZmZzZXQpIGV4dHJhcy5wdXNoKHF1ZXJ5T2JqLm9mZnNldCk7XG4gICAgICByZXR1cm4gWy4uLmFyZ3MsIC4uLmV4dHJhc107XG4gICAgfVxuICAgIHJldHVybiBhcmdzO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQ3JlYXRlRGVjb3JhdG9ycyhcbiAgICBNb2RlbENvbnN0cjogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgIG1vZGVsQ2xhenpOYW1lOiBzdHJpbmdcbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJQT1NUXCIpLFxuICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYENyZWF0ZSBhIG5ldyAke21vZGVsQ2xhenpOYW1lfS5gIH0pLFxuICAgICAgQXBpQm9keSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgUGF5bG9hZCBmb3IgJHttb2RlbENsYXp6TmFtZX1gLFxuICAgICAgICB0eXBlOiBEdG9Gb3IoT3BlcmF0aW9uS2V5cy5DUkVBVEUsIE1vZGVsQ29uc3RyKSxcbiAgICAgIH0pLFxuICAgICAgQXBpQ3JlYXRlZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICBzY2hlbWE6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgIH0pLFxuICAgICAgQXBpQmFkUmVxdWVzdFJlc3BvbnNlKHsgZGVzY3JpcHRpb246IFwiUGF5bG9hZCB2YWxpZGF0aW9uIGZhaWxlZC5cIiB9KSxcbiAgICAgIEFwaVVucHJvY2Vzc2FibGVFbnRpdHlSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlJlcG9zaXRvcnkgcmVqZWN0ZWQgdGhlIHByb3ZpZGVkIHBheWxvYWQuXCIsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVsa0NyZWF0ZURlY29yYXRvcnMoXG4gICAgTW9kZWxDb25zdHI6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nXG4gICk6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD4ge1xuICAgIHJldHVybiBbXG4gICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiUE9TVFwiLCBcImJ1bGtcIiksXG4gICAgICBBcGlPcGVyYXRpb24oeyBzdW1tYXJ5OiBgQ3JlYXRlIGEgbmV3ICR7bW9kZWxDbGF6ek5hbWV9LmAgfSksXG4gICAgICBBcGlCb2R5KHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICBpdGVtczogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBBcGlDcmVhdGVkUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICBpdGVtczogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgQXBpVW5wcm9jZXNzYWJsZUVudGl0eVJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwiUmVwb3NpdG9yeSByZWplY3RlZCB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cIixcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWxrUmVhZERlY29yYXRvcnMoXG4gICAgTW9kZWxDb25zdHI6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nXG4gICk6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD4ge1xuICAgIHJldHVybiBbXG4gICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiR0VUXCIsIFwiYnVsa1wiKSxcbiAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmRzIGJ5IGlkcy5gIH0pLFxuICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcImlkc1wiLCByZXF1aXJlZDogdHJ1ZSwgdHlwZTogXCJhcnJheVwiIH0pLFxuICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgaXRlbXM6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTm8gJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIG1hdGNoZXMgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXIuYCxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWxrVXBkYXRlRGVjb3JhdG9ycyhcbiAgICBNb2RlbENvbnN0cjogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgIG1vZGVsQ2xhenpOYW1lOiBzdHJpbmcsXG4gICAgYXBpUHJvcGVydGllczogRGVjYWZBcGlQcm9wZXJ0eVtdXG4gICk6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD4ge1xuICAgIHJldHVybiBbXG4gICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiUFVUXCIsIFwiYnVsa1wiKSxcbiAgICAgIEFwaVBhcmFtc0Zyb21Nb2RlbChhcGlQcm9wZXJ0aWVzKSxcbiAgICAgIEFwaU9wZXJhdGlvbih7XG4gICAgICAgIHN1bW1hcnk6IGBSZXBsYWNlIGV4aXN0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZHMgd2l0aCBuZXcgcGF5bG9hZHMuYCxcbiAgICAgIH0pLFxuICAgICAgQXBpQm9keSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgUGF5bG9hZCBmb3IgcmVwbGFjaW5nIGV4aXN0aW5nIHJlY29yZHMgb2YgJHttb2RlbENsYXp6TmFtZX1gLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgJHJlZjogZ2V0U2NoZW1hUGF0aChEdG9Gb3IoT3BlcmF0aW9uS2V5cy5VUERBVEUsIE1vZGVsQ29uc3RyKSksXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICBpdGVtczogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgfSksXG4gICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWxrRGVsZXRlRGVjb3JhdG9ycyhcbiAgICBNb2RlbENvbnN0cjogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgIG1vZGVsQ2xhenpOYW1lOiBzdHJpbmcsXG4gICAgYXBpUHJvcGVydGllczogRGVjYWZBcGlQcm9wZXJ0eVtdXG4gICk6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD4ge1xuICAgIHJldHVybiBbXG4gICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiREVMRVRFXCIsIFwiYnVsa1wiKSxcbiAgICAgIEFwaVBhcmFtc0Zyb21Nb2RlbChhcGlQcm9wZXJ0aWVzKSxcbiAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBEZWxldGUgJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkcyBieSBpZHMuYCB9KSxcbiAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJpZHNcIiwgcmVxdWlyZWQ6IHRydWUsIHR5cGU6IFwiYXJyYXlcIiB9KSxcbiAgICAgIEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICBpdGVtczogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWREZWNvcmF0b3JzKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZyxcbiAgICBhcGlQcm9wZXJ0aWVzOiBEZWNhZkFwaVByb3BlcnR5W10sXG4gICAgcGtQYXRoOiBzdHJpbmdcbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJHRVRcIiwgcGtQYXRoKSxcbiAgICAgIEFwaVBhcmFtc0Zyb21Nb2RlbChhcGlQcm9wZXJ0aWVzKSxcbiAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSBhICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBieSBpZC5gIH0pLFxuICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICBzY2hlbWE6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgIH0pLFxuICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTm8gJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIG1hdGNoZXMgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXIuYCxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB1cGRhdGVEZWNvcmF0b3JzKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZyxcbiAgICBhcGlQcm9wZXJ0aWVzOiBEZWNhZkFwaVByb3BlcnR5W10sXG4gICAgcGtQYXRoOiBzdHJpbmdcbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJQVVRcIiwgcGtQYXRoKSxcbiAgICAgIEFwaVBhcmFtc0Zyb21Nb2RlbChhcGlQcm9wZXJ0aWVzKSxcbiAgICAgIEFwaU9wZXJhdGlvbih7XG4gICAgICAgIHN1bW1hcnk6IGBSZXBsYWNlIGFuIGV4aXN0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCB3aXRoIGEgbmV3IHBheWxvYWQuYCxcbiAgICAgIH0pLFxuICAgICAgQXBpQm9keSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgUGF5bG9hZCBmb3IgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHJlY29yZCBvZiAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgIHR5cGU6IER0b0ZvcihPcGVyYXRpb25LZXlzLlVQREFURSwgTW9kZWxDb25zdHIpLFxuICAgICAgfSksXG4gICAgICBBcGlPa1Jlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICBzY2hlbWE6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgIH0pLFxuICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTm8gJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIG1hdGNoZXMgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXIuYCxcbiAgICAgIH0pLFxuICAgICAgQXBpQmFkUmVxdWVzdFJlc3BvbnNlKHsgZGVzY3JpcHRpb246IFwiUGF5bG9hZCB2YWxpZGF0aW9uIGZhaWxlZC5cIiB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZGVsZXRlRGVjb3JhdG9ycyhcbiAgICBNb2RlbENvbnN0cjogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgIG1vZGVsQ2xhenpOYW1lOiBzdHJpbmcsXG4gICAgYXBpUHJvcGVydGllczogRGVjYWZBcGlQcm9wZXJ0eVtdLFxuICAgIHBrUGF0aDogc3RyaW5nXG4gICk6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD4ge1xuICAgIHJldHVybiBbXG4gICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiREVMRVRFXCIsIHBrUGF0aCksXG4gICAgICBBcGlQYXJhbXNGcm9tTW9kZWwoYXBpUHJvcGVydGllcyksXG4gICAgICBBcGlPcGVyYXRpb24oeyBzdW1tYXJ5OiBgRGVsZXRlIGEgJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIGJ5IGlkLmAgfSksXG4gICAgICBBcGlPa1Jlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSBkZWxldGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICBzY2hlbWE6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgIH0pLFxuICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTm8gJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIG1hdGNoZXMgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXIuYCxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzdGF0ZW1lbnREZWNvcmF0b3JzKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZ1xuICApOiBBcnJheTwodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nLCBkZXNjOiBhbnkpID0+IHZvaWQ+IHtcbiAgICByZXR1cm4gW1xuICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIkdFVFwiLCBcInN0YXRlbWVudC86bWV0aG9kLyphcmdzXCIpLFxuICAgICAgQXBpT3BlcmF0aW9uKHtcbiAgICAgICAgc3VtbWFyeTogYEV4ZWN1dGVzIGEgcHJlcGFyZWQgc3RhdGVtZW50IG9uICR7bW9kZWxDbGF6ek5hbWV9LmAsXG4gICAgICB9KSxcbiAgICAgIEFwaVBhcmFtKHsgbmFtZTogXCJtZXRob2RcIiwgZGVzY3JpcHRpb246IFwidGhlIHByZXBhcmVkIHN0YXRlbWVudCB0byBleGVjdXRlXCIgfSksXG4gICAgICBBcGlQYXJhbSh7XG4gICAgICAgIG5hbWU6IFwiYXJnc1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJjb25jYXRlbmF0ZWQgbGlzdCBvZiBhcmd1bWVudHMgdGhlIHByZXBhcmVkIHN0YXRlbWVudCBjYW4gYWNjZXB0XCIsXG4gICAgICB9KSxcbiAgICAgIEFwaVF1ZXJ5KHtcbiAgICAgICAgbmFtZTogXCJkaXJlY3Rpb25cIixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGVudW06IE9yZGVyRGlyZWN0aW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJ0aGUgc29ydCBvcmRlciB3aGVuIGFwcGxpY2FibGVcIixcbiAgICAgIH0pLFxuICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcImxpbWl0XCIsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogXCJsaW1pdCBvciBwYWdlIHNpemUgd2hlbiBhcHBsaWNhYmxlXCIgfSksXG4gICAgICBBcGlRdWVyeSh7IG5hbWU6IFwib2Zmc2V0XCIsIHJlcXVpcmVkOiB0cnVlLCBkZXNjcmlwdGlvbjogXCJvZmZzZXQgb3IgYm9va21hcmsgd2hlbiBhcHBsaWNhYmxlXCIgfSksXG4gICAgICBBcGlPa1Jlc3BvbnNlKHsgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSBsaXN0ZWQgZm91bmQuYCB9KSxcbiAgICAgIEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc3RhdGVtZW50U2hvcnRjdXREZWNvcmF0b3JzKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgc3RhdGVtZW50S2V5OiBzdHJpbmdcbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgY29uc3QgYmFzZTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiA9IFtcbiAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJHRVRcIiwgcGF0aCksXG4gICAgICBBcGlPcGVyYXRpb24oeyBzdW1tYXJ5OiBgUmV0cmlldmUgJHttb2RlbENsYXp6TmFtZX0gcmVjb3Jkcy5gIH0pLFxuICAgICAgQXBpT2tSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS5gIH0pLFxuICAgIF07XG5cbiAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSk7XG4gICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gc2VnLnJlcGxhY2UoXCI6XCIsIFwiXCIpO1xuICAgICAgYmFzZS5wdXNoKEFwaVBhcmFtKHsgbmFtZSwgZGVzY3JpcHRpb246IGBUaGUgJHtuYW1lfSBwYXJhbWV0ZXJgIH0pKTtcbiAgICB9KTtcblxuICAgIGlmIChcbiAgICAgIHBhdGguc3RhcnRzV2l0aChcImxpc3RCeS9cIikgfHxcbiAgICAgIHBhdGguc3RhcnRzV2l0aChcInBhZ2luYXRlQnkvXCIpIHx8XG4gICAgICBwYXRoLnN0YXJ0c1dpdGgoXCJmaW5kL1wiKSB8fFxuICAgICAgcGF0aC5zdGFydHNXaXRoKFwicGFnZS9cIilcbiAgICApIHtcbiAgICAgIGJhc2UucHVzaChcbiAgICAgICAgQXBpUXVlcnkoe1xuICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uXCIsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgZW51bTogT3JkZXJEaXJlY3Rpb24sXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwidGhlIHNvcnQgb3JkZXJcIixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCJwYWdpbmF0ZUJ5L1wiKSB8fCBwYXRoLnN0YXJ0c1dpdGgoXCJwYWdlL1wiKSkge1xuICAgICAgYmFzZS5wdXNoKFxuICAgICAgICBBcGlRdWVyeSh7IG5hbWU6IFwibGltaXRcIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJwYWdlIHNpemVcIiB9KSxcbiAgICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcIm9mZnNldFwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcInBhZ2UgbnVtYmVyXCIgfSksXG4gICAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJib29rbWFya1wiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcImJvb2ttYXJrIGZvciBjdXJzb3IgcGFnaW5hdGlvblwiIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCJmaW5kT25lQnkvXCIpIHx8IHBhdGguc3RhcnRzV2l0aChcImZpbmRCeS9cIikpIHtcbiAgICAgIGJhc2UucHVzaChcbiAgICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRiB8fFxuICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuQVZHX09GIHx8XG4gICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5TVU1fT0ZcbiAgICApIHtcbiAgICAgIGJhc2UucHVzaChBcGlPa1Jlc3BvbnNlKHsgZGVzY3JpcHRpb246IGBSZXN1bHQgZm9yICR7bW9kZWxDbGF6ek5hbWV9LmAsIHR5cGU6IE51bWJlciB9KSk7XG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5ESVNUSU5DVF9PRikge1xuICAgICAgYmFzZS5wdXNoKEFwaU9rUmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogYERpc3RpbmN0IHZhbHVlcyBmb3IgJHttb2RlbENsYXp6TmFtZX0uYCwgdHlwZTogW1N0cmluZ10gfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UXVlcnlEZWNvcmF0b3JzKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICByb3V0ZVBhdGg6IHN0cmluZyxcbiAgICBodHRwVmVyYjogc3RyaW5nLFxuICAgIGluY2x1ZGVRdWVyeVBhcmFtczogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD4ge1xuICAgIGNvbnN0IGV4dHJhY3RQYXRoUGFyYW1zID0gKHA6IHN0cmluZyk6IHN0cmluZ1tdID0+XG4gICAgICBwLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpLm1hcCgocykgPT4gcy5zbGljZSgxKSk7XG5cbiAgICBjb25zdCBhcGlQYXRoUGFyYW1zID0gZXh0cmFjdFBhdGhQYXJhbXMocm91dGVQYXRoKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGAke25hbWV9IHBhcmFtZXRlciBmb3IgdGhlIHF1ZXJ5YCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGRlY29yYXRvcnM6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD4gPSBbXG4gICAgICAuLi5hcGlQYXRoUGFyYW1zLm1hcCgocCkgPT4gQXBpUGFyYW0ocCkpLFxuICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYFJldHJpZXZlIHJlY29yZHMgdXNpbmcgXCIke21ldGhvZE5hbWV9XCIuYCB9KSxcbiAgICAgIEFwaU9rUmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJSZXN1bHQgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZC5cIiB9KSxcbiAgICAgIEFwaU5vQ29udGVudFJlc3BvbnNlKHsgZGVzY3JpcHRpb246IFwiTm8gY29udGVudCByZXR1cm5lZCBieSB0aGUgbWV0aG9kLlwiIH0pLFxuICAgIF07XG5cbiAgICBpZiAoaHR0cFZlcmIgPT09IFwiR0VUXCIgJiYgaW5jbHVkZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICBkZWNvcmF0b3JzLnB1c2goXG4gICAgICAgIEFwaVF1ZXJ5KHtcbiAgICAgICAgICBuYW1lOiBcImRpcmVjdGlvblwiLFxuICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICBlbnVtOiBPcmRlckRpcmVjdGlvbixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJ0aGUgc29ydCBvcmRlciB3aGVuIGFwcGxpY2FibGVcIixcbiAgICAgICAgfSksXG4gICAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJsaW1pdFwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcImxpbWl0IG9yIHBhZ2Ugc2l6ZVwiIH0pLFxuICAgICAgICBBcGlRdWVyeSh7IG5hbWU6IFwib2Zmc2V0XCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwib2Zmc2V0IG9yIGJvb2ttYXJrXCIgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY29yYXRvcnM7XG4gIH1cbn1cbiJdfQ==
936
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJvbU1vZGVsQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkZyb21Nb2RlbENvbnRyb2xsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSTtJQUNqRixJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdILElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxVQUFVO1FBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBQzFILEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFBRSxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFN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LEVBQUUsSUFBQSxrQkFBUSxFQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsSUFBQSxrQkFBUSxFQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzSyxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBajRCRCxrREFpNEJDO0FBQ0Qsc213SEFBc213SCIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgRHluYW1pY01vZGVsQ29udHJvbGxlcl8xO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgUGFyYW0sIFF1ZXJ5LCBSZXNwb25zZSwgU2V0TWV0YWRhdGEgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEFwaUJhZFJlcXVlc3RSZXNwb25zZSwgQXBpQm9keSwgQXBpQ3JlYXRlZFJlc3BvbnNlLCBBcGlFeHRyYU1vZGVscywgQXBpTm9Db250ZW50UmVzcG9uc2UsIEFwaU5vdEZvdW5kUmVzcG9uc2UsIEFwaU9rUmVzcG9uc2UsIEFwaU9wZXJhdGlvbiwgQXBpUGFyYW0sIEFwaVF1ZXJ5LCBBcGlUYWdzLCBBcGlVbnByb2Nlc3NhYmxlRW50aXR5UmVzcG9uc2UsIGdldFNjaGVtYVBhdGgsIH0gZnJvbSBcIkBuZXN0anMvc3dhZ2dlclwiO1xuaW1wb3J0IHsgTW9kZWxTZXJ2aWNlLCBPcmRlckRpcmVjdGlvbiwgUGVyc2lzdGVuY2VLZXlzLCBQcmVwYXJlZFN0YXRlbWVudEtleXMsIFJlcG9zaXRvcnksIFNlcnZpY2UsIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IExvZ2dpbmcsIHRvS2ViYWJDYXNlIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCdWxrQ3J1ZE9wZXJhdGlvbktleXMsIERCS2V5cywgT3BlcmF0aW9uS2V5cywgVmFsaWRhdGlvbkVycm9yLCB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IEFwaU9wZXJhdGlvbkZyb21Nb2RlbCwgQXBpUGFyYW1zRnJvbU1vZGVsLCBEZWNhZkJvZHksIERlY2FmUGFyYW1zLCBEZWNhZlF1ZXJ5LCB9IGZyb20gXCIuL2RlY29yYXRvcnMvaW5kZXguanNcIjtcbmltcG9ydCB7IEh0dHBWZXJiVG9EZWNvcmF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBEZWNhZlJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIi4vLi4vcmVxdWVzdC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgREVDQUZfQ09OVFJPTExFUl9DT05GSUcsIERFQ0FGX1JPVVRFIH0gZnJvbSBcIi4vLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBTS0lQX01PREVMX1JPTEVTX0tFWSB9IGZyb20gXCIuLy4uL2F1dGgvY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBdXRoLCBQdWJsaWMsIFJlcXVpcmVSb2xlcyB9IGZyb20gXCIuLy4uL2F1dGgvZGVjb3JhdG9ycy5qc1wiO1xuaW1wb3J0IHsgRGVjYWZNb2RlbENvbnRyb2xsZXIgfSBmcm9tIFwiLi8uLi9jb250cm9sbGVycy5qc1wiO1xuaW1wb3J0IHsgRHRvRm9yIH0gZnJvbSBcIi4vLi4vZmFjdG9yeS9vcGVuYXBpL0R0b0J1aWxkZXIuanNcIjtcbmltcG9ydCBcIi4vLi4vb3ZlcnJpZGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBNb2RlbENvbnRyb2xsZXJGYWN0b3J5LCB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWh0dHAvc2VydmVyXCI7XG5leHBvcnQgY2xhc3MgRnJvbU1vZGVsQ29udHJvbGxlciB7XG4gICAgc3RhdGljIHsgdGhpcy5sb2cgPSBMb2dnaW5nLmZvcihGcm9tTW9kZWxDb250cm9sbGVyLm5hbWUpOyB9XG4gICAgc3RhdGljIGdldFBlcnNpc3RlbmNlKE1vZGVsQ2xhenopIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBTZXJ2aWNlLmdldChNb2RlbENsYXp6KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTW9kZWxTZXJ2aWNlLmdldFNlcnZpY2UoTW9kZWxDbGF6eik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVwb3NpdG9yeS5mb3JNb2RlbChNb2RlbENsYXp6KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlUXVlcnlSb3V0ZXNGcm9tUmVwb3NpdG9yeShwZXJzaXN0ZW5jZSwgcHJlZml4ID0gUGVyc2lzdGVuY2VLZXlzLlFVRVJZKSB7XG4gICAgICAgIGNvbnN0IHJlcG8gPSBwZXJzaXN0ZW5jZSBpbnN0YW5jZW9mIE1vZGVsU2VydmljZSA/IHBlcnNpc3RlbmNlLnJlcG8gOiBwZXJzaXN0ZW5jZTtcbiAgICAgICAgY29uc3QgTW9kZWxDb25zdHIgPSByZXBvLmNsYXNzO1xuICAgICAgICBjb25zdCBxdWVyeU1ldGhvZHMgPSBNZXRhZGF0YS5nZXQocmVwby5jb25zdHJ1Y3RvciwgTWV0YWRhdGEua2V5KFBlcnNpc3RlbmNlS2V5cy5RVUVSWSkpID8/IHt9O1xuICAgICAgICBjb25zdCByb3V0ZU1ldGhvZHMgPSBNZXRhZGF0YS5nZXQocGVyc2lzdGVuY2UuY29uc3RydWN0b3IsIE1ldGFkYXRhLmtleShERUNBRl9ST1VURSkpID8/IHt9O1xuICAgICAgICBjbGFzcyBRdWVyeUNvbnRyb2xsZXIgZXh0ZW5kcyBEZWNhZk1vZGVsQ29udHJvbGxlciB7XG4gICAgICAgICAgICBnZXQgY2xhc3MoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcihjbGllbnRDb250ZXh0LCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgc3VwZXIoY2xpZW50Q29udGV4dCwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbbWV0aG9kTmFtZSwgcGFyYW1zXSBvZiBPYmplY3QuZW50cmllcyhyb3V0ZU1ldGhvZHMpKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZVBhdGggPSBbcGFyYW1zLnBhdGgucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIildXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoc2VnbWVudCkgPT4gc2VnbWVudCAmJiBzZWdtZW50LnRyaW0oKSlcbiAgICAgICAgICAgICAgICAuam9pbihcIi9cIik7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVDb21wbGV4UXVlcnlIYW5kbGVyKG1ldGhvZE5hbWUpO1xuICAgICAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5kZWZpbmVNZXRob2QoUXVlcnlDb250cm9sbGVyLCBtZXRob2ROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIGNvbnN0IGh0dHBEZWNvcmF0b3IgPSBIdHRwVmVyYlRvRGVjb3JhdG9yKHBhcmFtcy5odHRwTWV0aG9kKShyb3V0ZVBhdGggfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBGcm9tTW9kZWxDb250cm9sbGVyLmdldFF1ZXJ5RGVjb3JhdG9ycyhtZXRob2ROYW1lLCByb3V0ZVBhdGgsIHBhcmFtcy5odHRwTWV0aG9kKTtcbiAgICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuYXBwbHlEZWNvcmF0b3JzKFF1ZXJ5Q29udHJvbGxlciwgbWV0aG9kTmFtZSwgW2h0dHBEZWNvcmF0b3IsIC4uLmRlY29yYXRvcnNdKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBvYmpWYWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHF1ZXJ5TWV0aG9kcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IG9ialZhbHVlcy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICBjb25zdCByb3V0ZVBhdGggPSBbcHJlZml4LCBtZXRob2ROYW1lLCAuLi5maWVsZHMubWFwKChmKSA9PiBgOiR7Zn1gKV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50ICYmIHNlZ21lbnQudHJpbSgpKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiL1wiKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUNvbXBsZXhRdWVyeUhhbmRsZXIobWV0aG9kTmFtZSk7XG4gICAgICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmRlZmluZU1ldGhvZChRdWVyeUNvbnRyb2xsZXIsIG1ldGhvZE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICAgICAgY29uc3QgaHR0cERlY29yYXRvciA9IEh0dHBWZXJiVG9EZWNvcmF0b3IoXCJHRVRcIikocm91dGVQYXRoIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBjb25zdCBkZWNvcmF0b3JzID0gRnJvbU1vZGVsQ29udHJvbGxlci5nZXRRdWVyeURlY29yYXRvcnMobWV0aG9kTmFtZSwgcm91dGVQYXRoLCBcIkdFVFwiLCB0cnVlKTtcbiAgICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuYXBwbHlEZWNvcmF0b3JzKFF1ZXJ5Q29udHJvbGxlciwgbWV0aG9kTmFtZSwgW2h0dHBEZWNvcmF0b3IsIC4uLmRlY29yYXRvcnNdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUXVlcnlDb250cm9sbGVyO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKE1vZGVsQ29uc3RyLCBtb2R1bGVDb25maWdPdmVycmlkZXMsIGdsb2JhbERlZmF1bHRzKSB7XG4gICAgICAgIGNvbnN0IGxvZyA9IEZyb21Nb2RlbENvbnRyb2xsZXIubG9nLmZvcihGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZSk7XG4gICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShNb2RlbENvbnN0cik7XG4gICAgICAgIGNvbnN0IHJvdXRlUGF0aCA9IHRvS2ViYWJDYXNlKHRhYmxlTmFtZSk7XG4gICAgICAgIGNvbnN0IG1vZGVsQ2xhenpOYW1lID0gTW9kZWxDb25zdHIubmFtZTtcbiAgICAgICAgY29uc3QgcGVyc2lzdGVuY2UgPSBGcm9tTW9kZWxDb250cm9sbGVyLmdldFBlcnNpc3RlbmNlKE1vZGVsQ29uc3RyKTtcbiAgICAgICAgLy8gV2hlbiBwZXJzaXN0ZW5jZSBpcyBhIE1vZGVsU2VydmljZSwgdGhlIEBxdWVyeS9Acm91dGUgbWV0YWRhdGEgbGl2ZXMgb25cbiAgICAgICAgLy8gdGhlIHVuZGVybHlpbmcgcmVwb3NpdG9yeSBjbGFzcyAoY3VzdG9tIHJlcG8pLCBub3Qgb24gTW9kZWxTZXJ2aWNlIGl0c2VsZi5cbiAgICAgICAgLy8gUGFzcyB0aGUgcmVwbyB0byB0aGUgZmFjdG9yeSBzbyBhZGRDb21wbGV4UXVlcmllcygpIGNhbiBkaXNjb3ZlciB0aGVtLlxuICAgICAgICBjb25zdCBmYWN0b3J5UGVyc2lzdGVuY2UgPSBwZXJzaXN0ZW5jZSBpbnN0YW5jZW9mIE1vZGVsU2VydmljZSA/IHBlcnNpc3RlbmNlLnJlcG8gOiBwZXJzaXN0ZW5jZTtcbiAgICAgICAgY29uc3QgZGVjb3JhdG9yQ29uZmlnID0gTWV0YWRhdGEuZ2V0KE1vZGVsQ29uc3RyLCBNZXRhZGF0YS5rZXkoREVDQUZfQ09OVFJPTExFUl9DT05GSUcpKTtcbiAgICAgICAgY29uc3QgbW9kdWxlT3ZlcnJpZGUgPSBtb2R1bGVDb25maWdPdmVycmlkZXM/LltNb2RlbENvbnN0ci5uYW1lXTtcbiAgICAgICAgY29uc3QgbWVyZ2VkQ29uZmlnID0ge1xuICAgICAgICAgICAgLi4uKGdsb2JhbERlZmF1bHRzIHx8IHt9KSxcbiAgICAgICAgICAgIC4uLihkZWNvcmF0b3JDb25maWcgfHwge30pLFxuICAgICAgICAgICAgLi4uKG1vZHVsZU92ZXJyaWRlIHx8IHt9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgRmFjdG9yeUNvbnRyb2xsZXIgPSBNb2RlbENvbnRyb2xsZXJGYWN0b3J5LmNyZWF0ZShNb2RlbENvbnN0ciwgZmFjdG9yeVBlcnNpc3RlbmNlLCBtZXJnZWRDb25maWcpO1xuICAgICAgICBjb25zdCBmYWN0b3J5Um91dGVzID0gRmFjdG9yeUNvbnRyb2xsZXIuX19yb3V0ZXNfXztcbiAgICAgICAgY29uc3QgeyBnZXRQSywgYXBpUHJvcGVydGllcywgcGF0aDogcGtQYXRoIH0gPSBGcm9tTW9kZWxDb250cm9sbGVyLmdldFJvdXRlUGFyYW1ldGVyc0Zyb21Nb2RlbChNb2RlbENvbnN0cik7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ3JlYXRpbmcgY29udHJvbGxlciBmb3IgbW9kZWw6ICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHtmYWN0b3J5Um91dGVzPy5sZW5ndGggPz8gMH0gZmFjdG9yeSByb3V0ZXNgKTtcbiAgICAgICAgY29uc3QgYXV0aENvbmZpZyA9IG1lcmdlZENvbmZpZy5hdXRoO1xuICAgICAgICBmdW5jdGlvbiBhcHBseUNsYXNzQXV0aCh0YXJnZXQpIHtcbiAgICAgICAgICAgIGlmIChhdXRoQ29uZmlnPy5wdWJsaWMpIHtcbiAgICAgICAgICAgICAgICBQdWJsaWMoKSh0YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXV0aENvbmZpZz8ucm9sZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIFJlcXVpcmVSb2xlcyguLi5hdXRoQ29uZmlnLnJvbGVzKSh0YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgQXV0aChNb2RlbENvbnN0cikodGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhdXRoQ29uZmlnPy5za2lwTW9kZWxSb2xlcykge1xuICAgICAgICAgICAgICAgIFNldE1ldGFkYXRhKFNLSVBfTU9ERUxfUk9MRVNfS0VZLCB0cnVlKSh0YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBEeW5hbWljTW9kZWxDb250cm9sbGVyID0gRHluYW1pY01vZGVsQ29udHJvbGxlcl8xID0gY2xhc3MgRHluYW1pY01vZGVsQ29udHJvbGxlciBleHRlbmRzIERlY2FmTW9kZWxDb250cm9sbGVyIHtcbiAgICAgICAgICAgIHN0YXRpYyBnZXQgY2xhc3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1vZGVsQ29uc3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2V0IGNsYXNzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNb2RlbENvbnN0cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGNsaWVudENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihjbGllbnRDb250ZXh0LCBEeW5hbWljTW9kZWxDb250cm9sbGVyXzEubmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wayA9IE1vZGVsLnBrKE1vZGVsQ29uc3RyKTtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhgUmVnaXN0ZXJpbmcgZHluYW1pYyBjb250cm9sbGVyIGZvciBtb2RlbDogJHt0aGlzLmNsYXNzLm5hbWV9IHJvdXRlOiAvJHtyb3V0ZVBhdGh9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIER5bmFtaWNNb2RlbENvbnRyb2xsZXIgPSBEeW5hbWljTW9kZWxDb250cm9sbGVyXzEgPSBfX2RlY29yYXRlKFtcbiAgICAgICAgICAgIENvbnRyb2xsZXIocm91dGVQYXRoKSxcbiAgICAgICAgICAgIEFwaVRhZ3MobW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICAgICAgQXBpRXh0cmFNb2RlbHMoTW9kZWxDb25zdHIpLFxuICAgICAgICAgICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtEZWNhZlJlcXVlc3RDb250ZXh0XSlcbiAgICAgICAgXSwgRHluYW1pY01vZGVsQ29udHJvbGxlcik7XG4gICAgICAgIGFwcGx5Q2xhc3NBdXRoKER5bmFtaWNNb2RlbENvbnRyb2xsZXIpO1xuICAgICAgICBpZiAoZmFjdG9yeVJvdXRlcykge1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkUm91dGVzID0gWy4uLmZhY3RvcnlSb3V0ZXNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhU2VnbWVudHMgPSBhLnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiU2VnbWVudHMgPSBiLnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhUGFyYW1Db3VudCA9IGFTZWdtZW50cy5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBiUGFyYW1Db3VudCA9IGJTZWdtZW50cy5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBhTGl0ZXJhbENvdW50ID0gYVNlZ21lbnRzLmxlbmd0aCAtIGFQYXJhbUNvdW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGJMaXRlcmFsQ291bnQgPSBiU2VnbWVudHMubGVuZ3RoIC0gYlBhcmFtQ291bnQ7XG4gICAgICAgICAgICAgICAgaWYgKGFMaXRlcmFsQ291bnQgIT09IGJMaXRlcmFsQ291bnQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiTGl0ZXJhbENvdW50IC0gYUxpdGVyYWxDb3VudDtcbiAgICAgICAgICAgICAgICBpZiAoYVBhcmFtQ291bnQgIT09IGJQYXJhbUNvdW50KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYVBhcmFtQ291bnQgLSBiUGFyYW1Db3VudDtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiBzb3J0ZWRSb3V0ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBGcm9tTW9kZWxDb250cm9sbGVyLm1hdGNoUm91dGUocm91dGUsIHBrUGF0aCwgYXBpUHJvcGVydGllcywgZ2V0UEssIE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgZmFjdG9yeVBlcnNpc3RlbmNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2lzdHJhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBtZXRob2ROYW1lLCBoYW5kbGVyLCBkZWNvcmF0b3JzLCBwYXJhbURlY29yYXRvcnMgfSA9IHJlZ2lzdHJhdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gRnJvbU1vZGVsQ29udHJvbGxlci5kZWZpbmVNZXRob2QoRHluYW1pY01vZGVsQ29udHJvbGxlciwgbWV0aG9kTmFtZSwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaHR0cERlY29yYXRvciA9IEh0dHBWZXJiVG9EZWNvcmF0b3Iocm91dGUubWV0aG9kKShyb3V0ZS5wYXRoLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuYXBwbHlEZWNvcmF0b3JzKER5bmFtaWNNb2RlbENvbnRyb2xsZXIsIG1ldGhvZE5hbWUsIFtodHRwRGVjb3JhdG9yLCAuLi5kZWNvcmF0b3JzXSwgcGFyYW1EZWNvcmF0b3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIER5bmFtaWNNb2RlbENvbnRyb2xsZXI7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRSb3V0ZVBhcmFtZXRlcnNGcm9tTW9kZWwoTW9kZWxDbGF6eikge1xuICAgICAgICBjb25zdCBwayA9IE1vZGVsLnBrKE1vZGVsQ2xhenopO1xuICAgICAgICBjb25zdCBjb21wb3NlZCA9IE1ldGFkYXRhLmdldChNb2RlbENsYXp6LCBNZXRhZGF0YS5rZXkoREJLZXlzLkNPTVBPU0VELCBwaykpO1xuICAgICAgICBjb25zdCBjb21wb3NlZEtleXMgPSBjb21wb3NlZD8uYXJncyA/PyBbXTtcbiAgICAgICAgY29uc3QgdW5pcXVlS2V5cyA9IEFycmF5LmlzQXJyYXkoY29tcG9zZWRLZXlzKSAmJiBjb21wb3NlZEtleXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmNvbXBvc2VkS2V5c10pKVxuICAgICAgICAgICAgOiBBcnJheS5mcm9tKG5ldyBTZXQoW3BrXSkpO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IE1ldGFkYXRhLmRlc2NyaXB0aW9uKE1vZGVsQ2xhenopID8/IFwiXCI7XG4gICAgICAgIGNvbnN0IHBhdGggPSBgOiR7dW5pcXVlS2V5cy5qb2luKFwiLzpcIil9YDtcbiAgICAgICAgY29uc3QgYXBpUHJvcGVydGllcyA9IHVuaXF1ZUtleXMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZToga2V5LFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBNZXRhZGF0YS5kZXNjcmlwdGlvbihNb2RlbENsYXp6LCBrZXkpLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYXBpUHJvcGVydGllcyxcbiAgICAgICAgICAgIGdldFBLOiAoLi4ucGFyYW1zKSA9PiBjb21wb3NlZD8uc2VwYXJhdG9yID8gcGFyYW1zLmpvaW4oY29tcG9zZWQuc2VwYXJhdG9yKSA6IHBhcmFtcy5qb2luKFwiXCIpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgZGVmaW5lTWV0aG9kKHRhcmdldCwgbWV0aG9kTmFtZSwgaGFuZGxlcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LnByb3RvdHlwZSB8fCB0YXJnZXQsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgICAgIHZhbHVlOiBoYW5kbGVyLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQucHJvdG90eXBlIHx8IHRhcmdldCwgbWV0aG9kTmFtZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhcHBseURlY29yYXRvcnModGFyZ2V0LCBtZXRob2ROYW1lLCBtZXRob2REZWNvcmF0b3JzLCBwYXJhbURlY29yYXRvcnMgPSBbXSkge1xuICAgICAgICBjb25zdCBwcm90byA9IHRhcmdldD8ucHJvdG90eXBlID8/IHRhcmdldDtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIG1ldGhvZE5hbWUpO1xuICAgICAgICBtZXRob2REZWNvcmF0b3JzLmZvckVhY2goKGQpID0+IGQocHJvdG8sIG1ldGhvZE5hbWUsIGRlc2NyaXB0b3IpKTtcbiAgICAgICAgcGFyYW1EZWNvcmF0b3JzLmZvckVhY2goKHsgZGVjb3JhdG9yLCBpbmRleCB9KSA9PiBkZWNvcmF0b3IocHJvdG8sIG1ldGhvZE5hbWUsIGluZGV4KSk7XG4gICAgfVxuICAgIHN0YXRpYyBtYXRjaFJvdXRlKHJvdXRlLCBwa1BhdGgsIGFwaVByb3BlcnRpZXMsIGdldFBLLCBNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIHBlcnNpc3RlbmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kLCBwYXRoIH0gPSByb3V0ZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpO1xuICAgICAgICBpZiAobWV0aG9kID09PSBcIlBPU1RcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwiY3JlYXRlXCIsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQ3JlYXRlSGFuZGxlcihNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUNyZWF0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSwgW3sgZGVjb3JhdG9yOiBEZWNhZkJvZHkoKSwgaW5kZXg6IDAgfSwgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSksIGluZGV4OiAxIH1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kID09PSBcIlBPU1RcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJidWxrXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcImNyZWF0ZUFsbFwiLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtDcmVhdGVIYW5kbGVyKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIuYnVsa0NyZWF0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSwgW3sgZGVjb3JhdG9yOiBEZWNhZkJvZHkoKSwgaW5kZXg6IDAgfSwgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSksIGluZGV4OiAxIH1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBcImJ1bGtcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwicmVhZEFsbFwiLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtSZWFkSGFuZGxlcihtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIuYnVsa1JlYWREZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksIFt7IGRlY29yYXRvcjogUXVlcnkoXCJpZHNcIiksIGluZGV4OiAwIH1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kID09PSBcIlBVVFwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBcImJ1bGtcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwidXBkYXRlQWxsXCIsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQnVsa1VwZGF0ZUhhbmRsZXIobW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLmJ1bGtVcGRhdGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgYXBpUHJvcGVydGllcyksIFt7IGRlY29yYXRvcjogRGVjYWZCb2R5KCksIGluZGV4OiAwIH0sIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pLCBpbmRleDogMSB9XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJERUxFVEVcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJidWxrXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcImRlbGV0ZUFsbFwiLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtEZWxldGVIYW5kbGVyKG1vZGVsQ2xhenpOYW1lKSwgRnJvbU1vZGVsQ29udHJvbGxlci5idWxrRGVsZXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMpLCBbeyBkZWNvcmF0b3I6IFF1ZXJ5KFwiaWRzXCIpLCBpbmRleDogMCB9LCB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSwgaW5kZXg6IDEgfV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IHBrUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwicmVhZFwiLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlYWRIYW5kbGVyKGdldFBLLCBtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIucmVhZERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzLCBwa1BhdGgpLCBbeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGFwaVByb3BlcnRpZXMpLCBpbmRleDogMCB9XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJQVVRcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gcGtQYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXCJ1cGRhdGVcIiwgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVVcGRhdGVIYW5kbGVyKGdldFBLLCBNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLnVwZGF0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzLCBwa1BhdGgpLCBbXG4gICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGFwaVByb3BlcnRpZXMpLCBpbmRleDogMCB9LFxuICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBEZWNhZkJvZHkoKSwgaW5kZXg6IDEgfSxcbiAgICAgICAgICAgICAgICB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSwgaW5kZXg6IDIgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiREVMRVRFXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IHBrUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwiZGVsZXRlXCIsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlRGVsZXRlSGFuZGxlcihnZXRQSywgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLmRlbGV0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzLCBwa1BhdGgpLCBbXG4gICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGFwaVByb3BlcnRpZXMpLCBpbmRleDogMCB9LFxuICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pLCBpbmRleDogMSB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29tcG9zZWQgUEsgZmFsbGJhY2sgcm91dGVzIChmaWx0ZXJFbXB0eSkg4oCUIHBhdGggZGlmZmVycyBmcm9tIHBrUGF0aFxuICAgICAgICBjb25zdCBmYWxsYmFja1NlZ21lbnRzID0gbm9ybWFsaXplZFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgY29uc3QgaXNBbGxQYXJhbXMgPSBmYWxsYmFja1NlZ21lbnRzLmxlbmd0aCA+IDAgJiYgZmFsbGJhY2tTZWdtZW50cy5ldmVyeSgocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSk7XG4gICAgICAgIGlmIChpc0FsbFBhcmFtcyAmJiBub3JtYWxpemVkUGF0aCAhPT0gcGtQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBmYWxsYmFja0FwaVByb3BzID0gZmFsbGJhY2tTZWdtZW50cy5tYXAoKHMpID0+IHMuc2xpY2UoMSkpLm1hcCgobmFtZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHtuYW1lfSBwYXJhbWV0ZXJgLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGZhbGxiYWNrU2VnbWVudHMubWFwKChzKSA9PiBzLnNsaWNlKDEpKS5qb2luKFwiQW5kXCIpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihgcmVhZEJ5JHtzdWZmaXh9YCwgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWFkSGFuZGxlcihnZXRQSywgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLnJlYWREZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgZmFsbGJhY2tBcGlQcm9wcywgbm9ybWFsaXplZFBhdGgpLCBbeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGZhbGxiYWNrQXBpUHJvcHMpLCBpbmRleDogMCB9XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcIlBVVFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKGB1cGRhdGVCeSR7c3VmZml4fWAsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlVXBkYXRlSGFuZGxlcihnZXRQSywgTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSwgRnJvbU1vZGVsQ29udHJvbGxlci51cGRhdGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgZmFsbGJhY2tBcGlQcm9wcywgbm9ybWFsaXplZFBhdGgpLCBbXG4gICAgICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBEZWNhZlBhcmFtcyhmYWxsYmFja0FwaVByb3BzKSwgaW5kZXg6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmQm9keSgpLCBpbmRleDogMSB9LFxuICAgICAgICAgICAgICAgICAgICB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSwgaW5kZXg6IDIgfSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwiREVMRVRFXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oYGRlbGV0ZUJ5JHtzdWZmaXh9YCwgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVEZWxldGVIYW5kbGVyKGdldFBLLCBtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIuZGVsZXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGZhbGxiYWNrQXBpUHJvcHMsIG5vcm1hbGl6ZWRQYXRoKSwgW1xuICAgICAgICAgICAgICAgICAgICB7IGRlY29yYXRvcjogRGVjYWZQYXJhbXMoZmFsbGJhY2tBcGlQcm9wcyksIGluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pLCBpbmRleDogMSB9LFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IFwic3RhdGVtZW50LzptZXRob2QvKmFyZ3NcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwic3RhdGVtZW50XCIsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlU3RhdGVtZW50SGFuZGxlcihtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIuc3RhdGVtZW50RGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLCBbXG4gICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IFBhcmFtKFwibWV0aG9kXCIpLCBpbmRleDogMCB9LFxuICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBQYXJhbShcImFyZ3NcIiksIGluZGV4OiAxIH0sXG4gICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmUXVlcnkoKSwgaW5kZXg6IDIgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFJvdXRlcyA9IHtcbiAgICAgICAgICAgIFwibGlzdEJ5LzprZXlcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkxJU1RfQlksXG4gICAgICAgICAgICBcInBhZ2luYXRlQnkvOmtleS86cGFnZVwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRV9CWSxcbiAgICAgICAgICAgIFwiZmluZC86dmFsdWVcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQsXG4gICAgICAgICAgICBcInBhZ2UvOnZhbHVlXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFLFxuICAgICAgICAgICAgXCJmaW5kT25lQnkvOmtleS86dmFsdWVcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfT05FX0JZLFxuICAgICAgICAgICAgXCJmaW5kQnkvOmtleS86dmFsdWVcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfQlksXG4gICAgICAgICAgICBcImNvdW50T2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRixcbiAgICAgICAgICAgIFwibWF4T2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5NQVhfT0YsXG4gICAgICAgICAgICBcIm1pbk9mLzpmaWVsZFwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUlOX09GLFxuICAgICAgICAgICAgXCJhdmdPZi86ZmllbGRcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkFWR19PRixcbiAgICAgICAgICAgIFwic3VtT2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5TVU1fT0YsXG4gICAgICAgICAgICBcImRpc3RpbmN0T2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5ESVNUSU5DVF9PRixcbiAgICAgICAgICAgIFwiZ3JvdXBPZi86ZmllbGRcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkdST1VQX09GLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnRLZXkgPSBzdGF0ZW1lbnRSb3V0ZXNbbm9ybWFsaXplZFBhdGhdO1xuICAgICAgICBpZiAoc3RhdGVtZW50S2V5ICYmIG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKEZyb21Nb2RlbENvbnRyb2xsZXIuc3RhdGVtZW50TWV0aG9kTmFtZShub3JtYWxpemVkUGF0aCksIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlU3RhdGVtZW50U2hvcnRjdXRIYW5kbGVyKHN0YXRlbWVudEtleSwgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLnN0YXRlbWVudFNob3J0Y3V0RGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIG5vcm1hbGl6ZWRQYXRoLCBzdGF0ZW1lbnRLZXkpLCBGcm9tTW9kZWxDb250cm9sbGVyLnN0YXRlbWVudFNob3J0Y3V0UGFyYW1zKG5vcm1hbGl6ZWRQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIiAmJiBub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKFwicXVlcnkvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeU1ldGhvZCA9IG5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UoL15xdWVyeVxcLy8sIFwiXCIpLnNwbGl0KFwiL1wiKVswXTtcbiAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihxdWVyeU1ldGhvZCwgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVDb21wbGV4UXVlcnlIYW5kbGVyKHF1ZXJ5TWV0aG9kKSwgRnJvbU1vZGVsQ29udHJvbGxlci5nZXRRdWVyeURlY29yYXRvcnMocXVlcnlNZXRob2QsIG5vcm1hbGl6ZWRQYXRoLCBcIkdFVFwiLCB0cnVlKSwgRnJvbU1vZGVsQ29udHJvbGxlci5jb21wbGV4UXVlcnlQYXJhbXMobm9ybWFsaXplZFBhdGgpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGYWxsYmFjayBmb3IgY3VzdG9tIEByb3V0ZSgpIHBhdGhzIChlLmcuIFwibWV0YWRhdGEvZm9yLXByb2R1Y3QvOnByb2R1Y3RDb2RlXCIpXG4gICAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIGNvbnN0IGtub3duUHJlZml4ZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAgIFwibGlzdEJ5XCIsIFwiZmluZEJ5XCIsIFwiZmluZEJ5UGFnaW5hdGVcIiwgXCJmaW5kT25lQnlcIiwgXCJwYWdpbmF0ZUJ5XCIsXG4gICAgICAgICAgICBcImZpbmRcIiwgXCJwYWdlXCIsIFwiY291bnRPZlwiLCBcIm1heE9mXCIsIFwibWluT2ZcIiwgXCJhdmdPZlwiLCBcInN1bU9mXCIsXG4gICAgICAgICAgICBcImRpc3RpbmN0T2ZcIiwgXCJncm91cE9mXCIsIFwic3RhdGVtZW50XCIsIFwiYnVsa1wiLCBcInF1ZXJ5XCIsXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKFwicXVlcnkvXCIpICYmXG4gICAgICAgICAgICAha25vd25QcmVmaXhlcy5oYXMocGF0aFNlZ21lbnRzWzBdKSkge1xuICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUgYWN0dWFsIG1ldGhvZCBuYW1lIGZyb20gQHJvdXRlIG1ldGFkYXRhIGJ5IG1hdGNoaW5nIHRoZSBwYXRoLlxuICAgICAgICAgICAgLy8gVGhlIEByb3V0ZSBkZWNvcmF0b3Igc3RvcmVzIHsgcGF0aCwgaHR0cE1ldGhvZCwgaGFuZGxlciB9IGtleWVkIGJ5IG1ldGhvZCBuYW1lXG4gICAgICAgICAgICAvLyBvbiB0aGUgcmVwb3NpdG9yeSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlTWV0YWRhdGEgPSBNZXRhZGF0YS5nZXQocGVyc2lzdGVuY2U/LmNvbnN0cnVjdG9yLCBNZXRhZGF0YS5rZXkoREVDQUZfUk9VVEUpKSA/PyB7fTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRFbnRyeSA9IE9iamVjdC5lbnRyaWVzKHJvdXRlTWV0YWRhdGEpLmZpbmQoKFssIGluZm9dKSA9PiBpbmZvICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGluZm8gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICBpbmZvLnBhdGg/LnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpID09PSBub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxNZXRob2ROYW1lID0gbWF0Y2hlZEVudHJ5Py5bMF0gfHwgcGF0aFNlZ21lbnRzWzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1TZWdtZW50cyA9IHBhdGhTZWdtZW50cy5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpO1xuICAgICAgICAgICAgY29uc3QgYXBpUGF0aFBhcmFtcyA9IHBhcmFtU2VnbWVudHMubWFwKChzKSA9PiBzLnNsaWNlKDEpKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7bmFtZX0gcGFyYW1ldGVyIGZvciB0aGUgcXVlcnlgLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihhY3R1YWxNZXRob2ROYW1lLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUN1c3RvbVJvdXRlSGFuZGxlcihhY3R1YWxNZXRob2ROYW1lKSwgW1xuICAgICAgICAgICAgICAgIC4uLmFwaVBhdGhQYXJhbXMubWFwKChwKSA9PiBBcGlQYXJhbShwKSksXG4gICAgICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYFJldHJpZXZlIHJlY29yZHMgdXNpbmcgXCIke2FjdHVhbE1ldGhvZE5hbWV9XCIuYCB9KSxcbiAgICAgICAgICAgICAgICBBcGlPa1Jlc3BvbnNlKHsgZGVzY3JpcHRpb246IFwiUmVzdWx0IHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQuXCIgfSksXG4gICAgICAgICAgICAgICAgQXBpTm9Db250ZW50UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJObyBjb250ZW50IHJldHVybmVkIGJ5IHRoZSBtZXRob2QuXCIgfSksXG4gICAgICAgICAgICBdLCBGcm9tTW9kZWxDb250cm9sbGVyLmNvbXBsZXhRdWVyeVBhcmFtcyhub3JtYWxpemVkUGF0aCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVSZWdpc3RyYXRpb24obWV0aG9kTmFtZSwgaGFuZGxlciwgZGVjb3JhdG9ycywgcGFyYW1EZWNvcmF0b3JzKSB7XG4gICAgICAgIHJldHVybiB7IG1ldGhvZE5hbWUsIGhhbmRsZXIsIGRlY29yYXRvcnMsIHBhcmFtRGVjb3JhdG9ycyB9O1xuICAgIH1cbiAgICBzdGF0aWMgc3RhdGVtZW50TWV0aG9kTmFtZShwYXRoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0U2VnbWVudCA9IHBhdGguc3BsaXQoXCIvXCIpWzBdO1xuICAgICAgICByZXR1cm4gZmlyc3RTZWdtZW50O1xuICAgIH1cbiAgICBzdGF0aWMgc3RhdGVtZW50U2hvcnRjdXRQYXJhbXMocGF0aCkge1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xuICAgICAgICBzZWdtZW50cy5mb3JFYWNoKChzZWcsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBzZWcucmVwbGFjZShcIjpcIiwgXCJcIik7XG4gICAgICAgICAgICBwYXJhbXMucHVzaCh7IGRlY29yYXRvcjogUGFyYW0obmFtZSksIGluZGV4OiBpIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcImxpc3RCeS9cIikgfHxcbiAgICAgICAgICAgIHBhdGguc3RhcnRzV2l0aChcInBhZ2luYXRlQnkvXCIpIHx8XG4gICAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoXCJmaW5kL1wiKSB8fFxuICAgICAgICAgICAgcGF0aC5zdGFydHNXaXRoKFwicGFnZS9cIikpIHtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHsgZGVjb3JhdG9yOiBEZWNhZlF1ZXJ5KCksIGluZGV4OiBzZWdtZW50cy5sZW5ndGggfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG4gICAgc3RhdGljIGNvbXBsZXhRdWVyeVBhcmFtcyhwYXRoKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gW107XG4gICAgICAgIHNlZ21lbnRzLmZvckVhY2goKHNlZywgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHNlZy5yZXBsYWNlKFwiOlwiLCBcIlwiKTtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHsgZGVjb3JhdG9yOiBQYXJhbShuYW1lKSwgaW5kZXg6IGkgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwicXVlcnkvXCIpKSB7XG4gICAgICAgICAgICBwYXJhbXMucHVzaCh7IGRlY29yYXRvcjogRGVjYWZRdWVyeSgpLCBpbmRleDogc2VnbWVudHMubGVuZ3RoIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVDcmVhdGVIYW5kbGVyKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY3JlYXRlKGRhdGEsIHJlc3ApIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgT3BlcmF0aW9uS2V5cy5DUkVBVEUsIHRydWUpKS5mb3IoY3JlYXRlKTtcbiAgICAgICAgICAgIGxvZy52ZXJib3NlKGBjcmVhdGluZyBuZXcgJHttb2RlbENsYXp6TmFtZX1gKTtcbiAgICAgICAgICAgIGxldCBjcmVhdGVkO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLmNyZWF0ZShkYXRhLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3ICR7bW9kZWxDbGF6ek5hbWV9YCwgZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy5pbmZvKGBjcmVhdGVkIG5ldyAke21vZGVsQ2xhenpOYW1lfSB3aXRoIGlkICR7Y3JlYXRlZFt0aGlzLnBrXX1gKTtcbiAgICAgICAgICAgIGlmIChyZXNwKVxuICAgICAgICAgICAgICAgIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVCdWxrQ3JlYXRlSGFuZGxlcihNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFsbChkYXRhLCByZXNwKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5DUkVBVEVfQUxMLCB0cnVlKSkuZm9yKGNyZWF0ZUFsbCk7XG4gICAgICAgICAgICBsb2cudmVyYm9zZShgY3JlYXRpbmcgbmV3ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICBsZXQgY3JlYXRlZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5jcmVhdGVBbGwoZGF0YS5tYXAoKGQpID0+IG5ldyBNb2RlbENvbnN0cihkKSksIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBuZXcgJHttb2RlbENsYXp6TmFtZX1gLCBlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nLmluZm8oYGNyZWF0ZWQgbmV3ICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtjcmVhdGVkW3RoaXMucGtdfWApO1xuICAgICAgICAgICAgaWYgKHJlc3ApXG4gICAgICAgICAgICAgICAgY3R4LnRvUmVzcG9uc2UocmVzcCk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZUJ1bGtSZWFkSGFuZGxlcihtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcmVhZEFsbChpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgQnVsa0NydWRPcGVyYXRpb25LZXlzLlJFQURfQUxMLCB0cnVlKSkuZm9yKHJlYWRBbGwpO1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZElkcyA9IEFycmF5LmlzQXJyYXkoaWRzKSA/IGlkcyA6IFtpZHNdO1xuICAgICAgICAgICAgbGV0IHJlYWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgcmVhZGluZyAke25vcm1hbGl6ZWRJZHN9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICAgICAgcmVhZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5yZWFkQWxsKG5vcm1hbGl6ZWRJZHMsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIHJlYWQgJHttb2RlbENsYXp6TmFtZX1gLCBlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nLmluZm8oYHJlYWQgJHtyZWFkLmxlbmd0aH0gJHttb2RlbENsYXp6TmFtZX1gKTtcbiAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlQnVsa1VwZGF0ZUhhbmRsZXIobW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUFsbChib2R5LCByZXNwKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5VUERBVEVfQUxMLCB0cnVlKSkuZm9yKHVwZGF0ZUFsbCk7XG4gICAgICAgICAgICBsZXQgdXBkYXRlZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oYHVwZGF0aW5nICR7Ym9keS5sZW5ndGh9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS51cGRhdGVBbGwoYm9keSwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcClcbiAgICAgICAgICAgICAgICBjdHgudG9SZXNwb25zZShyZXNwKTtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlQnVsa0RlbGV0ZUhhbmRsZXIobW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFsbChpZHMsIHJlc3ApIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgQnVsa0NydWRPcGVyYXRpb25LZXlzLkRFTEVURV9BTEwsIHRydWUpKS5mb3IoZGVsZXRlQWxsKTtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRJZHMgPSBBcnJheS5pc0FycmF5KGlkcykgPyBpZHMgOiBbaWRzXTtcbiAgICAgICAgICAgIGxldCByZWFkO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoYGRlbGV0aW5nICR7bm9ybWFsaXplZElkcy5sZW5ndGh9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICAgICAgcmVhZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5kZWxldGVBbGwobm9ybWFsaXplZElkcywgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlICR7bW9kZWxDbGF6ek5hbWV9YCwgZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy5pbmZvKGBkZWxldGVkICR7cmVhZC5sZW5ndGh9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICBpZiAocmVzcClcbiAgICAgICAgICAgICAgICBjdHgudG9SZXNwb25zZShyZXNwKTtcbiAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlUmVhZEhhbmRsZXIoZ2V0UEssIG1vZGVsQ2xhenpOYW1lKSB7XG4gICAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiByZWFkKHJvdXRlUGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIE9wZXJhdGlvbktleXMuUkVBRCwgdHJ1ZSkpLmZvcihyZWFkKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZ2V0UEsoLi4ucm91dGVQYXJhbXMudmFsdWVzSW5PcmRlcik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlkID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYE5vICR7dGhpcy5wa30gcHJvdmlkZWRgKTtcbiAgICAgICAgICAgIGxldCByZWFkUmVzdWx0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoYHJlYWRpbmcgJHttb2RlbENsYXp6TmFtZX0gd2l0aCAke3RoaXMucGt9ICR7aWR9YCk7XG4gICAgICAgICAgICAgICAgcmVhZFJlc3VsdCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5yZWFkKGlkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byByZWFkICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtpZH1gLCBlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nLmluZm8oYHJlYWQgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAke3JlYWRSZXN1bHRbdGhpcy5wa119YCk7XG4gICAgICAgICAgICByZXR1cm4gcmVhZFJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZVVwZGF0ZUhhbmRsZXIoZ2V0UEssIE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gdXBkYXRlKHJvdXRlUGFyYW1zLCBib2R5LCByZXNwKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIE9wZXJhdGlvbktleXMuVVBEQVRFLCB0cnVlKSkuZm9yKHVwZGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGdldFBLKC4uLnJvdXRlUGFyYW1zLnZhbHVlc0luT3JkZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBObyAke3RoaXMucGt9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICBsZXQgdXBkYXRlZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oYHVwZGF0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHt0aGlzLnBrfSAke2lkfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVkID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLnVwZGF0ZShuZXcgTW9kZWxDb25zdHIoeyAuLi5wYXlsb2FkLCBbdGhpcy5wa106IGlkIH0pLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwKVxuICAgICAgICAgICAgICAgIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVEZWxldGVIYW5kbGVyKGdldFBLLCBtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlKHJvdXRlUGFyYW1zLCByZXNwKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIE9wZXJhdGlvbktleXMuREVMRVRFLCB0cnVlKSkuZm9yKHJlbW92ZSk7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGdldFBLKC4uLnJvdXRlUGFyYW1zLnZhbHVlc0luT3JkZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBObyAke3RoaXMucGt9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICBsZXQgZGVsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoYGRlbGV0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHt0aGlzLnBrfSAke2lkfWApO1xuICAgICAgICAgICAgICAgIGRlbCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5kZWxldGUoaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSAke21vZGVsQ2xhenpOYW1lfSB3aXRoIGlkICR7aWR9YCwgZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy5pbmZvKGBkZWxldGVkICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtpZH1gKTtcbiAgICAgICAgICAgIGlmIChyZXNwKVxuICAgICAgICAgICAgICAgIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgICAgICAgcmV0dXJuIGRlbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZVN0YXRlbWVudEhhbmRsZXIobW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHN0YXRlbWVudChuYW1lLCBhcmdzLCBkZXRhaWxzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBQZXJzaXN0ZW5jZUtleXMuU1RBVEVNRU5ULCB0cnVlKSkuZm9yKHN0YXRlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB7IGRpcmVjdGlvbiwgb2Zmc2V0LCBsaW1pdCwgYm9va21hcmsgfSA9IGRldGFpbHM7XG4gICAgICAgICAgICBhcmdzID0gYXJncy5tYXAoKGEpID0+ICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlSW50KGEpIDogYSkgfHwgYSk7XG4gICAgICAgICAgICBjb25zdCBwYXRoRGlyZWN0aW9uID0gYXJncy5sZW5ndGggPiAxID8gYXJnc1sxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkRGlyZWN0aW9uID0gKGRpcmVjdGlvbiA/PyBwYXRoRGlyZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChyZXNvbHZlZERpcmVjdGlvbiAmJiBhcmdzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgYXJnc1sxXSA9IHJlc29sdmVkRGlyZWN0aW9uO1xuICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORDpcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX0JZOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5MSVNUX0JZOlxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goZGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRTpcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFX0JZOlxuICAgICAgICAgICAgICAgICAgICBhcmdzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkRGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBsaW1pdCwgb2Zmc2V0LCBib29rbWFyayB9LFxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX09ORV9CWTpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuQ09VTlRfT0Y6XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUFYX09GOlxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLk1JTl9PRjpcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5BVkdfT0Y6XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuU1VNX09GOlxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkRJU1RJTkNUX09GOlxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkdST1VQX09GOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eCkuc3RhdGVtZW50KG5hbWUsIC4uLmFyZ3MsIGN0eCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVTdGF0ZW1lbnRTaG9ydGN1dEhhbmRsZXIoc3RhdGVtZW50S2V5LCBtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gc3RhdGVtZW50U2hvcnRjdXQoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgeyBjdHggfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgc3RhdGVtZW50S2V5LCB0cnVlKSkuZm9yKHN0YXRlbWVudFNob3J0Y3V0KTtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RhdGVtZW50S2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTElTVF9CWToge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5LCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eCkubGlzdEJ5KGtleSwgZGV0YWlscz8uZGlyZWN0aW9uLCBjdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFX0JZOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHBhZ2UsIGRldGFpbHNdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2UoY3R4KS5wYWdpbmF0ZUJ5KGtleSwgZGV0YWlscz8uZGlyZWN0aW9uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW1pdDogZGV0YWlscz8ubGltaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGRldGFpbHM/Lm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3ZhbHVlLCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGRldGFpbHM/LmRpcmVjdGlvbiA/PyBPcmRlckRpcmVjdGlvbi5BU0M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcnNpc3RlbmNlID0gdGhpcy5wZXJzaXN0ZW5jZShjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBlcnNpc3RlbmNlLmZpbmQgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5maW5kKHZhbHVlLCBkaXJlY3Rpb24sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQoUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQsIHZhbHVlLCBkaXJlY3Rpb24sIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0U6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3ZhbHVlLCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogZGV0YWlscz8ub2Zmc2V0ID8/IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW1pdDogZGV0YWlscz8ubGltaXQgPz8gMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBib29rbWFyazogZGV0YWlscz8uYm9va21hcmssXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcnNpc3RlbmNlID0gdGhpcy5wZXJzaXN0ZW5jZShjdHgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBkZXRhaWxzPy5kaXJlY3Rpb24gPz8gT3JkZXJEaXJlY3Rpb24uQVNDO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBlcnNpc3RlbmNlLnBhZ2UgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5wYWdlKHZhbHVlLCBkaXJlY3Rpb24sIHJlZiwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNpc3RlbmNlLnN0YXRlbWVudChQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRSwgdmFsdWUsIGRpcmVjdGlvbiwgcmVmLCBjdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX09ORV9CWToge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZW5jZShjdHgpLmZpbmRPbmVCeShrZXksIHZhbHVlLCBjdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX0JZOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3IoY3R4LnRvT3ZlcnJpZGVzKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZEJ5KGtleSwgdmFsdWUsIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUFYX09GIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5NSU5fT0YgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkFWR19PRiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuU1VNX09GIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5ESVNUSU5DVF9PRiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuR1JPVVBfT0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtmaWVsZF0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2UoY3R4KS5zdGF0ZW1lbnQoc3RhdGVtZW50S2V5LCBmaWVsZCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3RhdGVtZW50OiAke3N0YXRlbWVudEtleX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZUNvbXBsZXhRdWVyeUhhbmRsZXIobWV0aG9kTmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY29tcGxleFF1ZXJ5KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nPy5mb3I/Lihjb21wbGV4UXVlcnkpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAobG9nKVxuICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoYEludm9raW5nIGN1c3RvbSBxdWVyeSBcIiR7bWV0aG9kTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY3R4IH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIG1ldGhvZE5hbWUsIHRydWUpKS5mb3IoY29tcGxleFF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IHRoaXMucGVyc2lzdGVuY2UoY3R4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcHJlYWRBcmdzID0gRnJvbU1vZGVsQ29udHJvbGxlci5leHRyYWN0UXVlcnlBcmdzKGFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2VbbWV0aG9kTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2VbbWV0aG9kTmFtZV0oLi4uc3ByZWFkQXJncywgY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2Uuc3RhdGVtZW50KG1ldGhvZE5hbWUsIC4uLnNwcmVhZEFyZ3MsIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGVyc2lzdGVuY2UgbWV0aG9kIFwiJHttZXRob2ROYW1lfVwiIG5vdCBmb3VuZCBvbiAke3BlcnNpc3RlbmNlPy5jb25zdHJ1Y3Rvcj8ubmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZylcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKGBDdXN0b20gcXVlcnkgXCIke21ldGhvZE5hbWV9XCIgZmFpbGVkYCwgZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZUN1c3RvbVJvdXRlSGFuZGxlcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBjdXN0b21Sb3V0ZSguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBsb2cgPSB0aGlzLmxvZz8uZm9yPy4oY3VzdG9tUm91dGUpO1xuICAgICAgICAgICAgY29uc3QgeyBjdHggfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgbWV0aG9kTmFtZSwgdHJ1ZSkpLmZvcihjdXN0b21Sb3V0ZSk7XG4gICAgICAgICAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IHRoaXMucGVyc2lzdGVuY2UoY3R4KTtcbiAgICAgICAgICAgIGNvbnN0IHNwcmVhZEFyZ3MgPSBGcm9tTW9kZWxDb250cm9sbGVyLmV4dHJhY3RRdWVyeUFyZ3MoYXJncyk7XG4gICAgICAgICAgICAvLyBUcnkgdGhlIHBlcnNpc3RlbmNlIGRpcmVjdGx5ICh3b3JrcyB3aGVuIGl0J3MgYSBjdXN0b20gUmVwb3NpdG9yeSlcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2VbbWV0aG9kTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZVttZXRob2ROYW1lXSguLi5zcHJlYWRBcmdzLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2hlbiBwZXJzaXN0ZW5jZSBpcyBhIE1vZGVsU2VydmljZSwgdGhlIG1ldGhvZCBsaXZlcyBvbiB0aGUgdW5kZXJseWluZyByZXBvXG4gICAgICAgICAgICBpZiAocGVyc2lzdGVuY2U/LnJlcG8gJiYgdHlwZW9mIHBlcnNpc3RlbmNlLnJlcG9bbWV0aG9kTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5yZXBvW21ldGhvZE5hbWVdKC4uLnNwcmVhZEFyZ3MsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gc3RhdGVtZW50IGdhdGV3YXlcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2Uuc3RhdGVtZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2Uuc3RhdGVtZW50KG1ldGhvZE5hbWUsIC4uLnNwcmVhZEFyZ3MsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCBcIiR7bWV0aG9kTmFtZX1cIiBub3QgZm91bmQgb24gJHtwZXJzaXN0ZW5jZT8uY29uc3RydWN0b3I/Lm5hbWV9IG9yIGl0cyByZXBvYCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0UXVlcnlBcmdzKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChsYXN0ICYmXG4gICAgICAgICAgICB0eXBlb2YgbGFzdCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkobGFzdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5T2JqID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RpcmVjdGlvbiA9IHF1ZXJ5T2JqLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaGFzTGltaXQgPSBxdWVyeU9iai5saW1pdCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaGFzT2Zmc2V0ID0gcXVlcnlPYmoub2Zmc2V0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoIWhhc0RpcmVjdGlvbiAmJiAhaGFzTGltaXQgJiYgIWhhc09mZnNldClcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhcyA9IFtdO1xuICAgICAgICAgICAgaWYgKGhhc0RpcmVjdGlvbilcbiAgICAgICAgICAgICAgICBleHRyYXMucHVzaChxdWVyeU9iai5kaXJlY3Rpb24pO1xuICAgICAgICAgICAgZWxzZSBpZiAoaGFzTGltaXQgfHwgaGFzT2Zmc2V0KVxuICAgICAgICAgICAgICAgIGV4dHJhcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBpZiAoaGFzTGltaXQpXG4gICAgICAgICAgICAgICAgZXh0cmFzLnB1c2gocXVlcnlPYmoubGltaXQpO1xuICAgICAgICAgICAgaWYgKGhhc09mZnNldClcbiAgICAgICAgICAgICAgICBleHRyYXMucHVzaChxdWVyeU9iai5vZmZzZXQpO1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hcmdzLCAuLi5leHRyYXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlQ3JlYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJQT1NUXCIpLFxuICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYENyZWF0ZSBhIG5ldyAke21vZGVsQ2xhenpOYW1lfS5gIH0pLFxuICAgICAgICAgICAgQXBpQm9keSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgICAgICAgICAgdHlwZTogRHRvRm9yKE9wZXJhdGlvbktleXMuQ1JFQVRFLCBNb2RlbENvbnN0ciksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaUNyZWF0ZWRSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgICAgICAgQXBpVW5wcm9jZXNzYWJsZUVudGl0eVJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJSZXBvc2l0b3J5IHJlamVjdGVkIHRoZSBwcm92aWRlZCBwYXlsb2FkLlwiLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0YXRpYyBidWxrQ3JlYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJQT1NUXCIsIFwiYnVsa1wiKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBDcmVhdGUgYSBuZXcgJHttb2RlbENsYXp6TmFtZX0uYCB9KSxcbiAgICAgICAgICAgIEFwaUJvZHkoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUGF5bG9hZCBmb3IgJHttb2RlbENsYXp6TmFtZX1gLFxuICAgICAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpQ3JlYXRlZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgICAgICAgQXBpVW5wcm9jZXNzYWJsZUVudGl0eVJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJSZXBvc2l0b3J5IHJlamVjdGVkIHRoZSBwcm92aWRlZCBwYXlsb2FkLlwiLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0YXRpYyBidWxrUmVhZERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiR0VUXCIsIFwiYnVsa1wiKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmRzIGJ5IGlkcy5gIH0pLFxuICAgICAgICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcImlkc1wiLCByZXF1aXJlZDogdHJ1ZSwgdHlwZTogXCJhcnJheVwiIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgc3RhdGljIGJ1bGtVcGRhdGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgYXBpUHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIlBVVFwiLCBcImJ1bGtcIiksXG4gICAgICAgICAgICBBcGlQYXJhbXNGcm9tTW9kZWwoYXBpUHJvcGVydGllcyksXG4gICAgICAgICAgICBBcGlPcGVyYXRpb24oe1xuICAgICAgICAgICAgICAgIHN1bW1hcnk6IGBSZXBsYWNlIGV4aXN0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZHMgd2l0aCBuZXcgcGF5bG9hZHMuYCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpQm9keSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciByZXBsYWNpbmcgZXhpc3RpbmcgcmVjb3JkcyBvZiAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgJHJlZjogZ2V0U2NoZW1hUGF0aChEdG9Gb3IoT3BlcmF0aW9uS2V5cy5VUERBVEUsIE1vZGVsQ29uc3RyKSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdGF0aWMgYnVsa0RlbGV0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiREVMRVRFXCIsIFwiYnVsa1wiKSxcbiAgICAgICAgICAgIEFwaVBhcmFtc0Zyb21Nb2RlbChhcGlQcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBEZWxldGUgJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkcyBieSBpZHMuYCB9KSxcbiAgICAgICAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJpZHNcIiwgcmVxdWlyZWQ6IHRydWUsIHR5cGU6IFwiYXJyYXlcIiB9KSxcbiAgICAgICAgICAgIEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gZGVsZXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBpdGVtczogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgTm8gJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIG1hdGNoZXMgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXIuYCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdGF0aWMgcmVhZERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzLCBwa1BhdGgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJHRVRcIiwgcGtQYXRoKSxcbiAgICAgICAgICAgIEFwaVBhcmFtc0Zyb21Nb2RlbChhcGlQcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSBhICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBieSBpZC5gIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgTm8gJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIG1hdGNoZXMgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXIuYCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdGF0aWMgdXBkYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMsIHBrUGF0aCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIlBVVFwiLCBwa1BhdGgpLFxuICAgICAgICAgICAgQXBpUGFyYW1zRnJvbU1vZGVsKGFwaVByb3BlcnRpZXMpLFxuICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5OiBgUmVwbGFjZSBhbiBleGlzdGluZyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgd2l0aCBhIG5ldyBwYXlsb2FkLmAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaUJvZHkoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUGF5bG9hZCBmb3IgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHJlY29yZCBvZiAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgICAgICAgICAgdHlwZTogRHRvRm9yKE9wZXJhdGlvbktleXMuVVBEQVRFLCBNb2RlbENvbnN0ciksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gdXBkYXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdGF0aWMgZGVsZXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMsIHBrUGF0aCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIkRFTEVURVwiLCBwa1BhdGgpLFxuICAgICAgICAgICAgQXBpUGFyYW1zRnJvbU1vZGVsKGFwaVByb3BlcnRpZXMpLFxuICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYERlbGV0ZSBhICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBieSBpZC5gIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSBkZWxldGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgc3RhdGljIHN0YXRlbWVudERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiR0VUXCIsIFwic3RhdGVtZW50LzptZXRob2QvKmFyZ3NcIiksXG4gICAgICAgICAgICBBcGlPcGVyYXRpb24oe1xuICAgICAgICAgICAgICAgIHN1bW1hcnk6IGBFeGVjdXRlcyBhIHByZXBhcmVkIHN0YXRlbWVudCBvbiAke21vZGVsQ2xhenpOYW1lfS5gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlQYXJhbSh7IG5hbWU6IFwibWV0aG9kXCIsIGRlc2NyaXB0aW9uOiBcInRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQgdG8gZXhlY3V0ZVwiIH0pLFxuICAgICAgICAgICAgQXBpUGFyYW0oe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiYXJnc1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcImNvbmNhdGVuYXRlZCBsaXN0IG9mIGFyZ3VtZW50cyB0aGUgcHJlcGFyZWQgc3RhdGVtZW50IGNhbiBhY2NlcHRcIixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpUXVlcnkoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bTogT3JkZXJEaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwidGhlIHNvcnQgb3JkZXIgd2hlbiBhcHBsaWNhYmxlXCIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJsaW1pdFwiLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246IFwibGltaXQgb3IgcGFnZSBzaXplIHdoZW4gYXBwbGljYWJsZVwiIH0pLFxuICAgICAgICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcIm9mZnNldFwiLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246IFwib2Zmc2V0IG9yIGJvb2ttYXJrIHdoZW4gYXBwbGljYWJsZVwiIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gbGlzdGVkIGZvdW5kLmAgfSksXG4gICAgICAgICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgc3RhdGljIHN0YXRlbWVudFNob3J0Y3V0RGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIHBhdGgsIHN0YXRlbWVudEtleSkge1xuICAgICAgICBjb25zdCBiYXNlID0gW1xuICAgICAgICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIkdFVFwiLCBwYXRoKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmRzLmAgfSksXG4gICAgICAgICAgICBBcGlPa1Jlc3BvbnNlKHsgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAgfSksXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKTtcbiAgICAgICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gc2VnLnJlcGxhY2UoXCI6XCIsIFwiXCIpO1xuICAgICAgICAgICAgYmFzZS5wdXNoKEFwaVBhcmFtKHsgbmFtZSwgZGVzY3JpcHRpb246IGBUaGUgJHtuYW1lfSBwYXJhbWV0ZXJgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCJsaXN0QnkvXCIpIHx8XG4gICAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoXCJwYWdpbmF0ZUJ5L1wiKSB8fFxuICAgICAgICAgICAgcGF0aC5zdGFydHNXaXRoKFwiZmluZC9cIikgfHxcbiAgICAgICAgICAgIHBhdGguc3RhcnRzV2l0aChcInBhZ2UvXCIpKSB7XG4gICAgICAgICAgICBiYXNlLnB1c2goQXBpUXVlcnkoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bTogT3JkZXJEaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwidGhlIHNvcnQgb3JkZXJcIixcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwicGFnaW5hdGVCeS9cIikgfHwgcGF0aC5zdGFydHNXaXRoKFwicGFnZS9cIikpIHtcbiAgICAgICAgICAgIGJhc2UucHVzaChBcGlRdWVyeSh7IG5hbWU6IFwibGltaXRcIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJwYWdlIHNpemVcIiB9KSwgQXBpUXVlcnkoeyBuYW1lOiBcIm9mZnNldFwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcInBhZ2UgbnVtYmVyXCIgfSksIEFwaVF1ZXJ5KHsgbmFtZTogXCJib29rbWFya1wiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcImJvb2ttYXJrIGZvciBjdXJzb3IgcGFnaW5hdGlvblwiIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiZmluZE9uZUJ5L1wiKSB8fCBwYXRoLnN0YXJ0c1dpdGgoXCJmaW5kQnkvXCIpKSB7XG4gICAgICAgICAgICBiYXNlLnB1c2goQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRiB8fFxuICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuQVZHX09GIHx8XG4gICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5TVU1fT0YpIHtcbiAgICAgICAgICAgIGJhc2UucHVzaChBcGlPa1Jlc3BvbnNlKHsgZGVzY3JpcHRpb246IGBSZXN1bHQgZm9yICR7bW9kZWxDbGF6ek5hbWV9LmAsIHR5cGU6IE51bWJlciB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkRJU1RJTkNUX09GKSB7XG4gICAgICAgICAgICBiYXNlLnB1c2goQXBpT2tSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBgRGlzdGluY3QgdmFsdWVzIGZvciAke21vZGVsQ2xhenpOYW1lfS5gLCB0eXBlOiBbU3RyaW5nXSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRRdWVyeURlY29yYXRvcnMobWV0aG9kTmFtZSwgcm91dGVQYXRoLCBodHRwVmVyYiwgaW5jbHVkZVF1ZXJ5UGFyYW1zID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgZXh0cmFjdFBhdGhQYXJhbXMgPSAocCkgPT4gcC5zcGxpdChcIi9cIikuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKS5tYXAoKHMpID0+IHMuc2xpY2UoMSkpO1xuICAgICAgICBjb25zdCBhcGlQYXRoUGFyYW1zID0gZXh0cmFjdFBhdGhQYXJhbXMocm91dGVQYXRoKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke25hbWV9IHBhcmFtZXRlciBmb3IgdGhlIHF1ZXJ5YCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBbXG4gICAgICAgICAgICAuLi5hcGlQYXRoUGFyYW1zLm1hcCgocCkgPT4gQXBpUGFyYW0ocCkpLFxuICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYFJldHJpZXZlIHJlY29yZHMgdXNpbmcgXCIke21ldGhvZE5hbWV9XCIuYCB9KSxcbiAgICAgICAgICAgIEFwaU9rUmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJSZXN1bHQgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZC5cIiB9KSxcbiAgICAgICAgICAgIEFwaU5vQ29udGVudFJlc3BvbnNlKHsgZGVzY3JpcHRpb246IFwiTm8gY29udGVudCByZXR1cm5lZCBieSB0aGUgbWV0aG9kLlwiIH0pLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaHR0cFZlcmIgPT09IFwiR0VUXCIgJiYgaW5jbHVkZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICBkZWNvcmF0b3JzLnB1c2goQXBpUXVlcnkoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVudW06IE9yZGVyRGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcInRoZSBzb3J0IG9yZGVyIHdoZW4gYXBwbGljYWJsZVwiLFxuICAgICAgICAgICAgfSksIEFwaVF1ZXJ5KHsgbmFtZTogXCJsaW1pdFwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcImxpbWl0IG9yIHBhZ2Ugc2l6ZVwiIH0pLCBBcGlRdWVyeSh7IG5hbWU6IFwib2Zmc2V0XCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwib2Zmc2V0IG9yIGJvb2ttYXJrXCIgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNvcmF0b3JzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVJuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OWtaV05oWmkxdGIyUmxiQzlHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN1FVRkJRU3hQUVVGUExFVkJRVVVzVlVGQlZTeEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVVc1VVRkJVU3hGUVVGRkxGZEJRVmNzUlVGQlJTeE5RVUZOTEdkQ1FVRm5RaXhEUVVGRE8wRkJRMnBHTEU5QlFVOHNSVUZEVEN4eFFrRkJjVUlzUlVGRGNrSXNUMEZCVHl4RlFVTlFMR3RDUVVGclFpeEZRVU5zUWl4alFVRmpMRVZCUTJRc2IwSkJRVzlDTEVWQlEzQkNMRzFDUVVGdFFpeEZRVU51UWl4aFFVRmhMRVZCUTJJc1dVRkJXU3hGUVVOYUxGRkJRVkVzUlVGRFVpeFJRVUZSTEVWQlExSXNUMEZCVHl4RlFVTlFMRGhDUVVFNFFpeEZRVU01UWl4aFFVRmhMRWRCUTJRc1RVRkJUU3hwUWtGQmFVSXNRMEZCUXp0QlFVTjZRaXhQUVVGUExFVkJSVXdzV1VGQldTeEZRVU5hTEdOQlFXTXNSVUZEWkN4bFFVRmxMRVZCUTJZc2NVSkJRWEZDTEVWQlJYSkNMRlZCUVZVc1JVRkRWaXhQUVVGUExFZEJRMUlzVFVGQlRTeG5Ra0ZCWjBJc1EwRkJRenRCUVVONFFpeFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRnZRaXhOUVVGTkxHZERRVUZuUXl4RFFVRkRPMEZCUTNwRkxFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVVXNWMEZCVnl4RlFVRkZMRTFCUVUwc2JVSkJRVzFDTEVOQlFVTTdRVUZEZWtRc1QwRkJUeXhGUVVOTUxIRkNRVUZ4UWl4RlFVTnlRaXhOUVVGTkxFVkJRMDRzWVVGQllTeEZRVU5pTEdWQlFXVXNSMEZEYUVJc1RVRkJUU3g1UWtGQmVVSXNRMEZCUXp0QlFVTnFReXhQUVVGUExFVkJRV1VzVVVGQlVTeEZRVUZGTEUxQlFVMHNjMEpCUVhOQ0xFTkJRVU03UVVGRE4wUXNUMEZCVHl4RlFVTk1MSEZDUVVGeFFpeEZRVU55UWl4clFrRkJhMElzUlVGRmJFSXNVMEZCVXl4RlFVTlVMRmRCUVZjc1JVRkRXQ3hWUVVGVkxFZEJRMWdzT0VKQlFYRkNPMEZCUTNSQ0xFOUJRVThzUlVGQlJTeHRRa0ZCYlVJc1JVRkJSU3c0UWtGQk1rSTdRVUZGZWtRc1QwRkJUeXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMRGhDUVVGdFFqdEJRVU5xUkN4UFFVRlBMRVZCUVVVc2RVSkJRWFZDTEVWQlFVVXNWMEZCVnl4RlFVRkZMREJDUVVGeFFqdEJRVU53UlN4UFFVRlBMRVZCUVVVc2IwSkJRVzlDTEVWQlFVVXNLMEpCUVRCQ08wRkJRM3BFTEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVVc1RVRkJUU3hGUVVGRkxGbEJRVmtzUlVGQlJTeG5RMEZCTWtJN1FVRkZhRVVzVDBGQlR5eEZRVUZGTEc5Q1FVRnZRaXhGUVVGRkxEUkNRVUYxUWp0QlFVTjBSQ3hQUVVGUExFVkJRVVVzVFVGQlRTeEZRVUZGTERKRFFVRnpRenRCUVVOMlJDeHBRMEZCYzBJN1FVRkRkRUlzVDBGQlR5eEZRVU5NTEhOQ1FVRnpRaXhIUVVsMlFpeE5RVUZOTERKQ1FVRXlRaXhEUVVGRE8wRkJSVzVETEUxQlFVMHNUMEZCVHl4dFFrRkJiVUk3WVVGRFRpeFJRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVWd1JTeE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVTnVRaXhWUVVFclFqdFJRVVV2UWl4SlFVRkpMRU5CUVVNN1dVRkRTQ3hQUVVGUExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFXdENMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRMnhFTEVOQlFVTTdVVUZCUXl4UFFVRlBMRU5CUVZVc1JVRkJSU3hEUVVGRE8xbEJRM0JDTEVsQlFVa3NRMEZCUXp0blFrRkRTQ3hQUVVGUExGbEJRVmtzUTBGQlF5eFZRVUZWTEVOQlFVTXNWVUZCVlN4RFFVRnZRaXhEUVVGRE8xbEJRMmhGTEVOQlFVTTdXVUZCUXl4UFFVRlBMRVZCUVZjc1JVRkJSU3hEUVVGRE8yZENRVU55UWl4UFFVRlBMRlZCUVZVc1EwRkJReXhSUVVGUkxFTkJRVU1zVlVGQlZTeERRVUZaTEVOQlFVTTdXVUZEY0VRc1EwRkJRenRSUVVOSUxFTkJRVU03U1VGRFNDeERRVUZETzBsQlJVUXNUVUZCVFN4RFFVRkRMQ3RDUVVFclFpeERRVU53UXl4WFFVRnpReXhGUVVOMFF5eFRRVUZwUWl4bFFVRmxMRU5CUVVNc1MwRkJTenRSUVVWMFF5eE5RVUZOTEVsQlFVa3NSMEZEVWl4WFFVRlhMRmxCUVZrc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU03VVVGRGRrVXNUVUZCVFN4WFFVRlhMRWRCUVdkQ0xFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdVVUZETlVNc1RVRkJUU3haUVVGWkxFZEJRMmhDTEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUTFZc1NVRkJTU3hEUVVGRExGZEJRVEJDTEVWQlF5OUNMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zWlVGQlpTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVTndReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVVZXTEUxQlFVMHNXVUZCV1N4SFFVTm9RaXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVU5XTEZkQlFWY3NRMEZCUXl4WFFVRXdRaXhGUVVOMFF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVNeFFpeEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVVldMRTFCUVUwc1pVRkJaMElzVTBGQlVTeHZRa0ZCZFVJN1dVRkRia1FzU1VGQllTeExRVUZMTzJkQ1FVTm9RaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEhsQ1FVRjVRaXhEUVVGRExFTkJRVU03V1VGRE4wTXNRMEZCUXp0WlFVTkVMRmxCUVZrc1lVRkJhME1zUlVGQlJTeEpRVUZaTzJkQ1FVTXhSQ3hMUVVGTExFTkJRVU1zWVVGQllTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpkQ0xFTkJRVU03VTBGRFJqdFJRVVZFTEV0QlFVc3NUVUZCVFN4RFFVRkRMRlZCUVZVc1JVRkJSU3hOUVVGTkxFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhGUVVGRkxFTkJRVU03V1VGRGFFVXNUVUZCVFN4VFFVRlRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03YVVKQlEzUkVMRTFCUVUwc1EwRkJReXhEUVVGRExFOUJRV1VzUlVGQlJTeEZRVUZGTEVOQlFVTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dHBRa0ZEZEVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlJXSXNUVUZCVFN4UFFVRlBMRWRCUVVjc2JVSkJRVzFDTEVOQlFVTXNlVUpCUVhsQ0xFTkJRek5FTEZWQlFWVXNRMEZEU2l4RFFVRkRPMWxCUTFRc2JVSkJRVzFDTEVOQlFVTXNXVUZCV1N4RFFVTTVRaXhsUVVGbExFVkJRMllzVlVGQlZTeEZRVU5XTEU5QlFVOHNRMEZEVWl4RFFVRkRPMWxCUlVZc1RVRkJUU3hoUVVGaExFZEJRVWNzYlVKQlFXMUNMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRWFZDTEVOQlFVTXNRMEZCUXl4VFFVRlRMRWxCUVVrc1UwRkJVeXhEUVVGRExFTkJRVU03V1VGRGJFY3NUVUZCVFN4VlFVRlZMRWRCUVVjc2JVSkJRVzFDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRM1pFTEZWQlFWVXNSVUZEVml4VFFVRlRMRVZCUTFRc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGRGJFSXNRMEZCUXp0WlFVTkdMRzFDUVVGdFFpeERRVUZETEdWQlFXVXNRMEZEYWtNc1pVRkJaU3hGUVVObUxGVkJRVlVzUlVGRFZpeERRVUZETEdGQlFXRXNSVUZCUlN4SFFVRkhMRlZCUVZVc1EwRkJReXhEUVVNdlFpeERRVUZETzFGQlEwb3NRMEZCUXp0UlFVVkVMRXRCUVVzc1RVRkJUU3hEUVVGRExGVkJRVlVzUlVGQlJTeFRRVUZUTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTEVOQlFVTTdXVUZEYmtVc1RVRkJUU3hOUVVGTkxFZEJRVWNzVTBGQlV5eERRVUZETEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRkRU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1ZVRkJWU3hGUVVGRkxFZEJRVWNzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMmxDUVVOc1JTeE5RVUZOTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hEUVVGRExFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN2FVSkJRemxETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVWaUxFMUJRVTBzVDBGQlR5eEhRVUZITEcxQ1FVRnRRaXhEUVVGRExIbENRVUY1UWl4RFFVTXpSQ3hWUVVGVkxFTkJRMG9zUTBGQlF6dFpRVU5VTEcxQ1FVRnRRaXhEUVVGRExGbEJRVmtzUTBGRE9VSXNaVUZCWlN4RlFVTm1MRlZCUVZVc1JVRkRWaXhQUVVGUExFTkJRMUlzUTBGQlF6dFpRVVZHTEUxQlFVMHNZVUZCWVN4SFFVRkhMRzFDUVVGdFFpeERRVUZETEV0QlFXdENMRU5CUVVNc1EwRkJReXhUUVVGVExFbEJRVWtzVTBGQlV5eERRVUZETEVOQlFVTTdXVUZEZEVZc1RVRkJUU3hWUVVGVkxFZEJRVWNzYlVKQlFXMUNMRU5CUVVNc2EwSkJRV3RDTEVOQlEzWkVMRlZCUVZVc1JVRkRWaXhUUVVGVExFVkJRMVFzUzBGQlN5eEZRVU5NTEVsQlFVa3NRMEZEVEN4RFFVRkRPMWxCUTBZc2JVSkJRVzFDTEVOQlFVTXNaVUZCWlN4RFFVTnFReXhsUVVGbExFVkJRMllzVlVGQlZTeEZRVU5XTEVOQlFVTXNZVUZCWVN4RlFVRkZMRWRCUVVjc1ZVRkJWU3hEUVVGRExFTkJReTlDTEVOQlFVTTdVVUZEU2l4RFFVRkRPMUZCUlVRc1QwRkJUeXhsUVVGbExFTkJRVU03U1VGRGVrSXNRMEZCUXp0SlFVVk5MRUZCUVZBc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGRFdDeFhRVUZuUXl4RlFVTm9ReXh4UWtGQmIwVXNSVUZEY0VVc1kwRkJjMFE3VVVGRmRFUXNUVUZCVFN4SFFVRkhMRWRCUVVjc2JVSkJRVzFDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVOd1JTeE5RVUZOTEZOQlFWTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFGQlF5OURMRTFCUVUwc1UwRkJVeXhIUVVGSExGZEJRVmNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0UlFVTjZReXhOUVVGTkxHTkJRV01zUjBGQlJ5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUTNoRExFMUJRVTBzVjBGQlZ5eEhRVUZITEcxQ1FVRnRRaXhEUVVGRExHTkJRV01zUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVVndSU3d3UlVGQk1FVTdVVUZETVVVc05rVkJRVFpGTzFGQlF6ZEZMSGxGUVVGNVJUdFJRVU42UlN4TlFVRk5MR3RDUVVGclFpeEhRVU4wUWl4WFFVRlhMRmxCUVZrc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU03VVVGRmRrVXNUVUZCVFN4bFFVRmxMRWRCUVVjc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGRGJFTXNWMEZCVnl4RlFVTllMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1EwRkRUU3hEUVVGRE8xRkJRemxETEUxQlFVMHNZMEZCWXl4SFFVRkhMSEZDUVVGeFFpeEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMnBGTEUxQlFVMHNXVUZCV1N4SFFVRnBRenRaUVVOcVJDeEhRVUZITEVOQlFVTXNZMEZCWXl4SlFVRkpMRVZCUVVVc1EwRkJRenRaUVVONlFpeEhRVUZITEVOQlFVTXNaVUZCWlN4SlFVRkpMRVZCUVVVc1EwRkJRenRaUVVNeFFpeEhRVUZITEVOQlFVTXNZMEZCWXl4SlFVRkpMRVZCUVVVc1EwRkJRenRUUVVNeFFpeERRVUZETzFGQlJVWXNUVUZCVFN4cFFrRkJhVUlzUjBGQlJ5eHpRa0ZCYzBJc1EwRkJReXhOUVVGTkxFTkJRM0pFTEZkQlFWY3NSVUZEV0N4clFrRkJhMElzUlVGRGJFSXNXVUZCV1N4RFFVTmlMRU5CUVVNN1VVRkRSaXhOUVVGTkxHRkJRV0VzUjBGQlNTeHBRa0ZCZVVJc1EwRkJReXhWUVVWd1F5eERRVUZETzFGQlJXUXNUVUZCVFN4RlFVRkZMRXRCUVVzc1JVRkJSU3hoUVVGaExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4SFFVTXhReXh0UWtGQmJVSXNRMEZCUXl3eVFrRkJNa0lzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0UlFVVXZSQ3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVU5RTEd0RFFVRnJReXhqUVVGakxGTkJRVk1zWVVGQllTeEZRVUZGTEUxQlFVMHNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeERRVU55Unl4RFFVRkRPMUZCUlVZc1RVRkJUU3hWUVVGVkxFZEJRVEpDTEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkZOMFFzVTBGQlV5eGpRVUZqTEVOQlFVTXNUVUZCVnp0WlFVTnFReXhKUVVGSkxGVkJRVlVzUlVGQlJTeE5RVUZOTEVWQlFVVXNRMEZCUXp0blFrRkRka0lzVFVGQlRTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRia0lzUTBGQlF6dHBRa0ZCVFN4SlFVRkpMRlZCUVZVc1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTTdaMEpCUTNKRExGbEJRVmtzUTBGQlF5eEhRVUZITEZWQlFWVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU0xUXl4RFFVRkRPMmxDUVVGTkxFTkJRVU03WjBKQlEwNHNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFsQlF6VkNMRU5CUVVNN1dVRkRSQ3hKUVVGSkxGVkJRVlVzUlVGQlJTeGpRVUZqTEVWQlFVVXNRMEZCUXp0blFrRkRMMElzVjBGQlZ5eERRVUZETEc5Q1FVRnZRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMWxCUTJ4RUxFTkJRVU03VVVGRFNDeERRVUZETzFGQlJVUXNTVUZIVFN4elFrRkJjMElzT0VKQlNEVkNMRTFCUjAwc2MwSkJRWFZDTEZOQlFWRXNiMEpCUVhWQ08xbEJSMmhFTEUxQlFVMHNTMEZCU3l4TFFVRkxPMmRDUVVONFFpeFBRVUZQTEZkQlFWY3NRMEZCUXp0WlFVTnlRaXhEUVVGRE8xbEJSVVFzU1VGQllTeExRVUZMTzJkQ1FVTm9RaXhQUVVGUExGZEJRVmNzUTBGQlF6dFpRVU55UWl4RFFVRkRPMWxCUlVRc1dVRkJXU3hoUVVGclF6dG5Ra0ZETlVNc1MwRkJTeXhEUVVGRExHRkJRV0VzUlVGQlJTeDNRa0ZCYzBJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZZYmtNc1QwRkJSU3hIUVVGWExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRlhMRU5CUVVNN1owSkJXVFZFTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUTA0c05rTkJRVFpETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3haUVVGWkxGTkJRVk1zUlVGQlJTeERRVU53Uml4RFFVRkRPMWxCUTBvc1EwRkJRenRUUVVOR0xFTkJRVUU3VVVGcVFrc3NjMEpCUVhOQ08xbEJTRE5DTEZWQlFWVXNRMEZCUXl4VFFVRlRMRU5CUVVNN1dVRkRja0lzVDBGQlR5eERRVUZETEdOQlFXTXNRMEZCUXp0WlFVTjJRaXhqUVVGakxFTkJRVU1zVjBGQlZ5eERRVUZET3paRFFWbERMRzFDUVVGdFFqdFhRVmd4UXl4elFrRkJjMElzUTBGcFFqTkNPMUZCUlVRc1kwRkJZeXhEUVVGRExITkNRVUZ6UWl4RFFVRkRMRU5CUVVNN1VVRkZka01zU1VGQlNTeGhRVUZoTEVWQlFVVXNRMEZCUXp0WlFVTnNRaXhOUVVGTkxGbEJRVmtzUjBGQlJ5eERRVUZETEVkQlFVY3NZVUZCWVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMmRDUVVOd1JDeE5RVUZOTEZOQlFWTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03WjBKQlEzQkVMRTFCUVUwc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0blFrRkRjRVFzVFVGQlRTeFhRVUZYTEVkQlFVY3NVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0blFrRkRkRVVzVFVGQlRTeFhRVUZYTEVkQlFVY3NVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0blFrRkRkRVVzVFVGQlRTeGhRVUZoTEVkQlFVY3NVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhYUVVGWExFTkJRVU03WjBKQlEzSkVMRTFCUVUwc1lVRkJZU3hIUVVGSExGTkJRVk1zUTBGQlF5eE5RVUZOTEVkQlFVY3NWMEZCVnl4RFFVRkRPMmRDUVVOeVJDeEpRVUZKTEdGQlFXRXNTMEZCU3l4aFFVRmhPMjlDUVVOcVF5eFBRVUZQTEdGQlFXRXNSMEZCUnl4aFFVRmhMRU5CUVVNN1owSkJRM1pETEVsQlFVa3NWMEZCVnl4TFFVRkxMRmRCUVZjN2IwSkJRemRDTEU5QlFVOHNWMEZCVnl4SFFVRkhMRmRCUVZjc1EwRkJRenRuUWtGRGJrTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRXQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5JTEV0QlFVc3NUVUZCVFN4TFFVRkxMRWxCUVVrc1dVRkJXU3hGUVVGRkxFTkJRVU03WjBKQlEycERMRTFCUVUwc1dVRkJXU3hIUVVGSExHMUNRVUZ0UWl4RFFVRkRMRlZCUVZVc1EwRkRha1FzUzBGQlN5eEZRVU5NTEUxQlFVMHNSVUZEVGl4aFFVRmhMRVZCUTJJc1MwRkJTeXhGUVVOTUxGZEJRVmNzUlVGRFdDeGpRVUZqTEVWQlEyUXNhMEpCUVd0Q0xFTkJRMjVDTEVOQlFVTTdaMEpCUTBZc1NVRkJTU3hEUVVGRExGbEJRVms3YjBKQlFVVXNVMEZCVXp0blFrRkZOVUlzVFVGQlRTeEZRVUZGTEZWQlFWVXNSVUZCUlN4UFFVRlBMRVZCUVVVc1ZVRkJWU3hGUVVGRkxHVkJRV1VzUlVGQlJTeEhRVU40UkN4WlFVRlpMRU5CUVVNN1owSkJSV1lzVFVGQlRTeFZRVUZWTEVkQlFVY3NiVUpCUVcxQ0xFTkJRVU1zV1VGQldTeERRVU5xUkN4elFrRkJjMElzUlVGRGRFSXNWVUZCVlN4RlFVTldMRTlCUVU4c1EwRkRVaXhEUVVGRE8yZENRVVZHTEVsQlFVa3NWVUZCVlN4RlFVRkZMRU5CUVVNN2IwSkJRMllzVFVGQlRTeGhRVUZoTEVkQlFVY3NiVUpCUVcxQ0xFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFXMUNMRU5CUVVNc1EwRkRiRVVzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEpRVUZKTEZOQlFWTXNRMEZEYkVRc1EwRkJRenR2UWtGRFJpeHRRa0ZCYlVJc1EwRkJReXhsUVVGbExFTkJRMnBETEhOQ1FVRnpRaXhGUVVOMFFpeFZRVUZWTEVWQlExWXNRMEZCUXl4aFFVRmhMRVZCUVVVc1IwRkJSeXhWUVVGVkxFTkJRVU1zUlVGRE9VSXNaVUZCWlN4RFFVTm9RaXhEUVVGRE8yZENRVU5LTEVOQlFVTTdXVUZEU0N4RFFVRkRPMUZCUTBnc1EwRkJRenRSUVVWRUxFOUJRVThzYzBKQlFUWkNMRU5CUVVNN1NVRkRka01zUTBGQlF6dEpRVVZFTEUxQlFVMHNRMEZCUXl3eVFrRkJNa0lzUTBGRGFFTXNWVUZCSzBJN1VVRlBMMElzVFVGQlRTeEZRVUZGTEVkQlFVY3NTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRWEZDTEVOQlFVTTdVVUZEY0VRc1RVRkJUU3hSUVVGUkxFZEJRVWNzVVVGQlVTeERRVUZETEVkQlFVY3NRMEZETTBJc1ZVRkJWU3hGUVVOV0xGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRkZCUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGRGJFTXNRMEZCUXp0UlFVTkdMRTFCUVUwc1dVRkJXU3hIUVVGSExGRkJRVkVzUlVGQlJTeEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUlRGRExFMUJRVTBzVlVGQlZTeEhRVU5rTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzV1VGQldTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRPMWxCUTNCRUxFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNoRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUldoRExFMUJRVTBzVjBGQlZ5eEhRVUZITEZGQlFWRXNRMEZCUXl4WFFVRlhMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFGQlF6TkVMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRE8xRkJRM3BETEUxQlFVMHNZVUZCWVN4SFFVRjFRaXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRVZCUVVVN1dVRkRMMFFzVDBGQlR6dG5Ra0ZEVEN4SlFVRkpMRVZCUVVVc1IwRkJSenRuUWtGRFZDeFhRVUZYTEVWQlFVVXNVVUZCVVN4RFFVRkRMRmRCUVZjc1EwRkJReXhWUVVGVkxFVkJRVVVzUjBGQlJ5eERRVUZETzJkQ1FVTnNSQ3hSUVVGUkxFVkJRVVVzU1VGQlNUdG5Ra0ZEWkN4SlFVRkpMRVZCUVVVc1RVRkJUVHRoUVVOaUxFTkJRVU03VVVGRFNpeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVklMRTlCUVU4N1dVRkRUQ3hKUVVGSk8xbEJRMG9zVjBGQlZ6dFpRVU5ZTEdGQlFXRTdXVUZEWWl4TFFVRkxMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVGhDTEVWQlFVVXNSVUZCUlN4RFFVTXpReXhSUVVGUkxFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTTdVMEZETVVVc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlR5eE5RVUZOTEVOQlFVTXNXVUZCV1N4RFFVTjZRaXhOUVVGWExFVkJRMWdzVlVGQmEwSXNSVUZEYkVJc1QwRkJaME03VVVGRmFFTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkRia0lzVFVGQlRTeERRVUZETEZOQlFWTXNTVUZCU1N4TlFVRk5MRVZCUXpGQ0xGVkJRVlVzUlVGRFZqdFpRVU5GTEV0QlFVc3NSVUZCUlN4UFFVRlBPMWxCUTJRc1VVRkJVU3hGUVVGRkxFdEJRVXM3V1VGRFppeFpRVUZaTEVWQlFVVXNTVUZCU1R0WlFVTnNRaXhWUVVGVkxFVkJRVVVzUzBGQlN6dFRRVU5zUWl4RFFVTkdMRU5CUVVNN1VVRkZSaXhQUVVGUExFMUJRVTBzUTBGQlF5eDNRa0ZCZDBJc1EwRkRjRU1zVFVGQlRTeERRVUZETEZOQlFWTXNTVUZCU1N4TlFVRk5MRVZCUXpGQ0xGVkJRVlVzUTBGRFdDeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVlBMRTFCUVUwc1EwRkJReXhsUVVGbExFTkJRelZDTEUxQlFWY3NSVUZEV0N4VlFVRnJRaXhGUVVOc1FpeG5Ra0ZCYzBVc1JVRkRkRVVzYTBKQlFUSkZMRVZCUVVVN1VVRkZOMFVzVFVGQlRTeExRVUZMTEVkQlFVY3NUVUZCVFN4RlFVRkZMRk5CUVZNc1NVRkJTU3hOUVVGTkxFTkJRVU03VVVGRE1VTXNUVUZCVFN4VlFVRlZMRWRCUVVjc1RVRkJUU3hEUVVGRExIZENRVUYzUWl4RFFVRkRMRXRCUVVzc1JVRkJSU3hWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU4wUlN4blFrRkJaMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNWVUZCVlN4RlFVRkZMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGJFVXNaVUZCWlN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVVVzVTBGQlV5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkRMME1zVTBGQlV5eERRVUZETEV0QlFVc3NSVUZCUlN4VlFVRlZMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRM0JETEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlU4c1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGRGRrSXNTMEZCYTBJc1JVRkRiRUlzVFVGQll5eEZRVU5rTEdGQlFXbERMRVZCUTJwRExFdEJRU3RETEVWQlF5OURMRmRCUVd0RExFVkJRMnhETEdOQlFYTkNMRVZCUTNSQ0xGZEJRV2xDTzFGQlQycENMRTFCUVUwc1JVRkJSU3hOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUXk5Q0xFMUJRVTBzWTBGQll5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlJYUkVMRWxCUVVrc1RVRkJUU3hMUVVGTExFMUJRVTBzU1VGQlNTeGpRVUZqTEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNN1dVRkRMME1zVDBGQlR5eHRRa0ZCYlVJc1EwRkJReXhyUWtGQmEwSXNRMEZETTBNc1VVRkJVU3hGUVVOU0xHMUNRVUZ0UWl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEZkQlFWY3NSVUZCUlN4alFVRmpMRU5CUVVNc1JVRkRjRVVzYlVKQlFXMUNMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNWMEZCVnl4RlFVRkZMR05CUVdNc1EwRkJReXhGUVVOMlJTeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRk5CUVZNc1JVRkJVeXhGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RlFVRkZMRk5CUVZNc1JVRkJSU3hSUVVGUkxFTkJRVU1zUlVGQlJTeFhRVUZYTEVWQlFVVXNTVUZCU1N4RlFVRkZMRU5CUVZFc1JVRkJSU3hMUVVGTExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZETDBjc1EwRkJRenRSUVVOS0xFTkJRVU03VVVGRlJDeEpRVUZKTEUxQlFVMHNTMEZCU3l4TlFVRk5MRWxCUVVrc1kwRkJZeXhMUVVGTExFMUJRVTBzUlVGQlJTeERRVUZETzFsQlEyNUVMRTlCUVU4c2JVSkJRVzFDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRek5ETEZkQlFWY3NSVUZEV0N4dFFrRkJiVUlzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhYUVVGWExFVkJRVVVzWTBGQll5eERRVUZETEVWQlEzaEZMRzFDUVVGdFFpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExGZEJRVmNzUlVGQlJTeGpRVUZqTEVOQlFVTXNSVUZEY2tVc1EwRkJReXhGUVVGRkxGTkJRVk1zUlVGQlJTeFRRVUZUTEVWQlFWTXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeFRRVUZUTEVWQlFVVXNVVUZCVVN4RFFVRkRMRVZCUVVVc1YwRkJWeXhGUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZSTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJReTlITEVOQlFVTTdVVUZEU2l4RFFVRkRPMUZCUlVRc1NVRkJTU3hOUVVGTkxFdEJRVXNzUzBGQlN5eEpRVUZKTEdOQlFXTXNTMEZCU3l4TlFVRk5MRVZCUVVVc1EwRkJRenRaUVVOc1JDeFBRVUZQTEcxQ1FVRnRRaXhEUVVGRExHdENRVUZyUWl4RFFVTXpReXhUUVVGVExFVkJRMVFzYlVKQlFXMUNMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNZMEZCWXl4RFFVRkRMRVZCUTNwRUxHMUNRVUZ0UWl4RFFVRkRMR3RDUVVGclFpeERRVUZETEZkQlFWY3NSVUZCUlN4alFVRmpMRU5CUVVNc1JVRkRia1VzUTBGQlF5eEZRVUZGTEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGUkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUXk5RExFTkJRVU03VVVGRFNpeERRVUZETzFGQlJVUXNTVUZCU1N4TlFVRk5MRXRCUVVzc1MwRkJTeXhKUVVGSkxHTkJRV01zUzBGQlN5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTnNSQ3hQUVVGUExHMUNRVUZ0UWl4RFFVRkRMR3RDUVVGclFpeERRVU16UXl4WFFVRlhMRVZCUTFnc2JVSkJRVzFDTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zWTBGQll5eERRVUZETEVWQlF6TkVMRzFDUVVGdFFpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExGZEJRVmNzUlVGQlJTeGpRVUZqTEVWQlFVVXNZVUZCWVN4RFFVRkRMRVZCUTNCR0xFTkJRVU1zUlVGQlJTeFRRVUZUTEVWQlFVVXNVMEZCVXl4RlFVRlRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNVMEZCVXl4RlFVRkZMRkZCUVZFc1EwRkJReXhGUVVGRkxGZEJRVmNzUlVGQlJTeEpRVUZKTEVWQlFVVXNRMEZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVU12Unl4RFFVRkRPMUZCUTBvc1EwRkJRenRSUVVWRUxFbEJRVWtzVFVGQlRTeExRVUZMTEZGQlFWRXNTVUZCU1N4alFVRmpMRXRCUVVzc1RVRkJUU3hGUVVGRkxFTkJRVU03V1VGRGNrUXNUMEZCVHl4dFFrRkJiVUlzUTBGQlF5eHJRa0ZCYTBJc1EwRkRNME1zVjBGQlZ5eEZRVU5ZTEcxQ1FVRnRRaXhEUVVGRExIVkNRVUYxUWl4RFFVRkRMR05CUVdNc1EwRkJReXhGUVVNelJDeHRRa0ZCYlVJc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1kwRkJZeXhGUVVGRkxHRkJRV0VzUTBGQlF5eEZRVU53Uml4RFFVRkRMRVZCUVVVc1UwRkJVeXhGUVVGRkxFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFWRXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeFRRVUZUTEVWQlFVVXNVVUZCVVN4RFFVRkRMRVZCUVVVc1YwRkJWeXhGUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZSTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRMmhJTEVOQlFVTTdVVUZEU2l4RFFVRkRPMUZCUlVRc1NVRkJTU3hOUVVGTkxFdEJRVXNzUzBGQlN5eEpRVUZKTEdOQlFXTXNTMEZCU3l4TlFVRk5MRVZCUVVVc1EwRkJRenRaUVVOc1JDeFBRVUZQTEcxQ1FVRnRRaXhEUVVGRExHdENRVUZyUWl4RFFVTXpReXhOUVVGTkxFVkJRMDRzYlVKQlFXMUNMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNTMEZCU3l4RlFVRkZMR05CUVdNc1EwRkJReXhGUVVNMVJDeHRRa0ZCYlVJc1EwRkJReXhqUVVGakxFTkJRVU1zVjBGQlZ5eEZRVUZGTEdOQlFXTXNSVUZCUlN4aFFVRmhMRVZCUVVVc1RVRkJUU3hEUVVGRExFVkJRM1JHTEVOQlFVTXNSVUZCUlN4VFFVRlRMRVZCUVVVc1YwRkJWeXhEUVVGRExHRkJRV0VzUTBGQlVTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVNM1JDeERRVUZETzFGQlEwb3NRMEZCUXp0UlFVVkVMRWxCUVVrc1RVRkJUU3hMUVVGTExFdEJRVXNzU1VGQlNTeGpRVUZqTEV0QlFVc3NUVUZCVFN4RlFVRkZMRU5CUVVNN1dVRkRiRVFzVDBGQlR5eHRRa0ZCYlVJc1EwRkJReXhyUWtGQmEwSXNRMEZETTBNc1VVRkJVU3hGUVVOU0xHMUNRVUZ0UWl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEV0QlFVc3NSVUZCUlN4WFFVRlhMRVZCUVVVc1kwRkJZeXhEUVVGRExFVkJRek5GTEcxQ1FVRnRRaXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRmRCUVZjc1JVRkJSU3hqUVVGakxFVkJRVVVzWVVGQllTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RlFVTjRSanRuUWtGRFJTeEZRVUZGTEZOQlFWTXNSVUZCUlN4WFFVRlhMRU5CUVVNc1lVRkJZU3hEUVVGUkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlR0blFrRkRNVVFzUlVGQlJTeFRRVUZUTEVWQlFVVXNVMEZCVXl4RlFVRlRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZETTBNc1JVRkJSU3hUUVVGVExFVkJRVVVzVVVGQlVTeERRVUZETEVWQlFVVXNWMEZCVnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGUkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlR0aFFVTm9SU3hEUVVOR0xFTkJRVU03VVVGRFNpeERRVUZETzFGQlJVUXNTVUZCU1N4TlFVRk5MRXRCUVVzc1VVRkJVU3hKUVVGSkxHTkJRV01zUzBGQlN5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTnlSQ3hQUVVGUExHMUNRVUZ0UWl4RFFVRkRMR3RDUVVGclFpeERRVU16UXl4UlFVRlJMRVZCUTFJc2JVSkJRVzFDTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUzBGQlN5eEZRVUZGTEdOQlFXTXNRMEZCUXl4RlFVTTVSQ3h0UWtGQmJVSXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eFhRVUZYTEVWQlFVVXNZMEZCWXl4RlFVRkZMR0ZCUVdFc1JVRkJSU3hOUVVGTkxFTkJRVU1zUlVGRGVFWTdaMEpCUTBVc1JVRkJSU3hUUVVGVExFVkJRVVVzVjBGQlZ5eERRVUZETEdGQlFXRXNRMEZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlF6RkVMRVZCUVVVc1UwRkJVeXhGUVVGRkxGRkJRVkVzUTBGQlF5eEZRVUZGTEZkQlFWY3NSVUZCUlN4SlFVRkpMRVZCUVVVc1EwRkJVU3hGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVWQlFVVTdZVUZEYUVVc1EwRkRSaXhEUVVGRE8xRkJRMG9zUTBGQlF6dFJRVVZFTEhWRlFVRjFSVHRSUVVOMlJTeE5RVUZOTEdkQ1FVRm5RaXhIUVVGSExHTkJRV01zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEyNUZMRTFCUVUwc1YwRkJWeXhIUVVGSExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFbEJRVWtzWjBKQlFXZENMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY0Vjc1NVRkJTU3hYUVVGWExFbEJRVWtzWTBGQll5eExRVUZMTEUxQlFVMHNSVUZCUlN4RFFVRkRPMWxCUXpkRExFMUJRVTBzWjBKQlFXZENMRWRCUVVjc1owSkJRV2RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU01UlN4SlFVRkpPMmRDUVVOS0xGZEJRVmNzUlVGQlJTeEhRVUZITEVsQlFVa3NXVUZCV1R0blFrRkRhRU1zVVVGQlVTeEZRVUZGTEVsQlFVazdaMEpCUTJRc1NVRkJTU3hGUVVGRkxFMUJRVTA3WVVGRFlpeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTktMRTFCUVUwc1RVRkJUU3hIUVVGSExHZENRVUZuUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVOdVJTeEpRVUZKTEUxQlFVMHNTMEZCU3l4TFFVRkxMRVZCUVVVc1EwRkJRenRuUWtGRGNrSXNUMEZCVHl4dFFrRkJiVUlzUTBGQlF5eHJRa0ZCYTBJc1EwRkRNME1zVTBGQlV5eE5RVUZOTEVWQlFVVXNSVUZEYWtJc2JVSkJRVzFDTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zUzBGQlN5eEZRVUZGTEdOQlFXTXNRMEZCUXl4RlFVTTFSQ3h0UWtGQmJVSXNRMEZCUXl4alFVRmpMRU5CUVVNc1YwRkJWeXhGUVVGRkxHTkJRV01zUlVGQlJTeG5Ra0ZCWjBJc1JVRkJSU3hqUVVGakxFTkJRVU1zUlVGRGFrY3NRMEZCUXl4RlFVRkZMRk5CUVZNc1JVRkJSU3hYUVVGWExFTkJRVU1zWjBKQlFXZENMRU5CUVZFc1JVRkJSU3hMUVVGTExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZEYUVVc1EwRkJRenRaUVVOS0xFTkJRVU03V1VGRFJDeEpRVUZKTEUxQlFVMHNTMEZCU3l4TFFVRkxMRVZCUVVVc1EwRkJRenRuUWtGRGNrSXNUMEZCVHl4dFFrRkJiVUlzUTBGQlF5eHJRa0ZCYTBJc1EwRkRNME1zVjBGQlZ5eE5RVUZOTEVWQlFVVXNSVUZEYmtJc2JVSkJRVzFDTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUzBGQlN5eEZRVUZGTEZkQlFWY3NSVUZCUlN4alFVRmpMRU5CUVVNc1JVRkRNMFVzYlVKQlFXMUNMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWMEZCVnl4RlFVRkZMR05CUVdNc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4alFVRmpMRU5CUVVNc1JVRkRia2M3YjBKQlEwVXNSVUZCUlN4VFFVRlRMRVZCUVVVc1YwRkJWeXhEUVVGRExHZENRVUZuUWl4RFFVRlJMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJUdHZRa0ZETjBRc1JVRkJSU3hUUVVGVExFVkJRVVVzVTBGQlV5eEZRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSVHR2UWtGRE0wTXNSVUZCUlN4VFFVRlRMRVZCUVVVc1VVRkJVU3hEUVVGRExFVkJRVVVzVjBGQlZ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4RFFVRlJMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJUdHBRa0ZEYUVVc1EwRkRSaXhEUVVGRE8xbEJRMG9zUTBGQlF6dFpRVU5FTEVsQlFVa3NUVUZCVFN4TFFVRkxMRkZCUVZFc1JVRkJSU3hEUVVGRE8yZENRVU40UWl4UFFVRlBMRzFDUVVGdFFpeERRVUZETEd0Q1FVRnJRaXhEUVVNelF5eFhRVUZYTEUxQlFVMHNSVUZCUlN4RlFVTnVRaXh0UWtGQmJVSXNRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eExRVUZMTEVWQlFVVXNZMEZCWXl4RFFVRkRMRVZCUXpsRUxHMUNRVUZ0UWl4RFFVRkRMR2RDUVVGblFpeERRVUZETEZkQlFWY3NSVUZCUlN4alFVRmpMRVZCUVVVc1owSkJRV2RDTEVWQlFVVXNZMEZCWXl4RFFVRkRMRVZCUTI1SE8yOUNRVU5GTEVWQlFVVXNVMEZCVXl4RlFVRkZMRmRCUVZjc1EwRkJReXhuUWtGQlowSXNRMEZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVU3YjBKQlF6ZEVMRVZCUVVVc1UwRkJVeXhGUVVGRkxGRkJRVkVzUTBGQlF5eEZRVUZGTEZkQlFWY3NSVUZCUlN4SlFVRkpMRVZCUVVVc1EwRkJVU3hGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVWQlFVVTdhVUpCUTJoRkxFTkJRMFlzUTBGQlF6dFpRVU5LTEVOQlFVTTdVVUZEU0N4RFFVRkRPMUZCUlVRc1NVRkJTU3hOUVVGTkxFdEJRVXNzUzBGQlN5eEpRVUZKTEdOQlFXTXNTMEZCU3l4NVFrRkJlVUlzUlVGQlJTeERRVUZETzFsQlEzSkZMRTlCUVU4c2JVSkJRVzFDTEVOQlFVTXNhMEpCUVd0Q0xFTkJRek5ETEZkQlFWY3NSVUZEV0N4dFFrRkJiVUlzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhqUVVGakxFTkJRVU1zUlVGRE1VUXNiVUpCUVcxQ0xFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1YwRkJWeXhGUVVGRkxHTkJRV01zUTBGQlF5eEZRVU53UlR0blFrRkRSU3hGUVVGRkxGTkJRVk1zUlVGQlJTeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRlJMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZETDBNc1JVRkJSU3hUUVVGVExFVkJRVVVzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlF6ZERMRVZCUVVVc1UwRkJVeXhGUVVGRkxGVkJRVlVzUlVGQlV5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVN1lVRkROME1zUTBGRFJpeERRVUZETzFGQlEwb3NRMEZCUXp0UlFVVkVMRTFCUVUwc1pVRkJaU3hIUVVFeVFqdFpRVU01UXl4aFFVRmhMRVZCUVVVc2NVSkJRWEZDTEVOQlFVTXNUMEZCVHp0WlFVTTFReXgxUWtGQmRVSXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eFBRVUZQTzFsQlEzUkVMR0ZCUVdFc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4SlFVRkpPMWxCUTNwRExHRkJRV0VzUlVGQlJTeHhRa0ZCY1VJc1EwRkJReXhKUVVGSk8xbEJRM3BETEhWQ1FVRjFRaXhGUVVGRkxIRkNRVUZ4UWl4RFFVRkRMRmRCUVZjN1dVRkRNVVFzYjBKQlFXOUNMRVZCUVVVc2NVSkJRWEZDTEVOQlFVTXNUMEZCVHp0WlFVTnVSQ3huUWtGQlowSXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eFJRVUZSTzFsQlEyaEVMR05CUVdNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4TlFVRk5PMWxCUXpWRExHTkJRV01zUlVGQlJTeHhRa0ZCY1VJc1EwRkJReXhOUVVGTk8xbEJRelZETEdOQlFXTXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eE5RVUZOTzFsQlF6VkRMR05CUVdNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4TlFVRk5PMWxCUXpWRExHMUNRVUZ0UWl4RlFVRkZMSEZDUVVGeFFpeERRVUZETEZkQlFWYzdXVUZEZEVRc1owSkJRV2RDTEVWQlFVVXNjVUpCUVhGQ0xFTkJRVU1zVVVGQlVUdFRRVU5xUkN4RFFVRkRPMUZCUlVZc1RVRkJUU3haUVVGWkxFZEJRVWNzWlVGQlpTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMUZCUTNKRUxFbEJRVWtzV1VGQldTeEpRVUZKTEUxQlFVMHNTMEZCU3l4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVOeVF5eFBRVUZQTEcxQ1FVRnRRaXhEUVVGRExHdENRVUZyUWl4RFFVTXpReXh0UWtGQmJVSXNRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eGpRVUZqTEVOQlFVTXNSVUZEZGtRc2JVSkJRVzFDTEVOQlFVTXNPRUpCUVRoQ0xFTkJRVU1zV1VGQldTeEZRVUZGTEdOQlFXTXNRMEZCUXl4RlFVTm9SaXh0UWtGQmJVSXNRMEZCUXl3eVFrRkJNa0lzUTBGQlF5eFhRVUZYTEVWQlFVVXNZMEZCWXl4RlFVRkZMR05CUVdNc1JVRkJSU3haUVVGWkxFTkJRVU1zUlVGRE1VY3NiVUpCUVcxQ0xFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRelZFTEVOQlFVTTdVVUZEU2l4RFFVRkRPMUZCUlVRc1NVRkJTU3hOUVVGTkxFdEJRVXNzUzBGQlN5eEpRVUZKTEdOQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1VVRkJVU3hEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU0xUkN4TlFVRk5MRmRCUVZjc1IwRkJSeXhqUVVGakxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFWVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRla1VzVDBGQlR5eHRRa0ZCYlVJc1EwRkJReXhyUWtGQmEwSXNRMEZETTBNc1YwRkJWeXhGUVVOWUxHMUNRVUZ0UWl4RFFVRkRMSGxDUVVGNVFpeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVTXhSQ3h0UWtGQmJVSXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eFhRVUZYTEVWQlFVVXNZMEZCWXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGRGFFWXNiVUpCUVcxQ0xFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRM1pFTEVOQlFVTTdVVUZEU2l4RFFVRkRPMUZCUlVRc1owWkJRV2RHTzFGQlEyaEdMRTFCUVUwc1dVRkJXU3hIUVVGSExHTkJRV01zUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlF5OUVMRTFCUVUwc1lVRkJZU3hIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZUTzFsQlEzQkRMRkZCUVZFc1JVRkJSU3hSUVVGUkxFVkJRVVVzWjBKQlFXZENMRVZCUVVVc1YwRkJWeXhGUVVGRkxGbEJRVms3V1VGREwwUXNUVUZCVFN4RlFVRkZMRTFCUVUwc1JVRkJSU3hUUVVGVExFVkJRVVVzVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVc1QwRkJUenRaUVVNM1JDeFpRVUZaTEVWQlFVVXNVMEZCVXl4RlFVRkZMRmRCUVZjc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR6dFRRVU4wUkN4RFFVRkRMRU5CUVVNN1VVRkRTQ3hKUVVORkxGbEJRVmtzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXp0WlFVTjJRaXhEUVVGRExHTkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRPMWxCUTNCRExFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGRGJrTXNRMEZCUXp0WlFVTkVMRFJGUVVFMFJUdFpRVU0xUlN4cFJrRkJhVVk3V1VGRGFrWXNhVU5CUVdsRE8xbEJRMnBETEUxQlFVMHNZVUZCWVN4SFFVTnFRaXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVU5VTEZkQlFXMUNMRVZCUVVVc1YwRkJWeXhGUVVOcVF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVNeFFpeEpRVUZKTEVWQlFVVXNRMEZCUXp0WlFVTldMRTFCUVUwc1dVRkJXU3hIUVVGSExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVOeVJDeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRMWdzU1VGQlNUdG5Ra0ZEU2l4UFFVRlBMRWxCUVVrc1MwRkJTeXhSUVVGUk8yZENRVU40UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFOUJRVThzUTBGQlF5eFpRVUZaTEVWQlFVVXNSVUZCUlN4RFFVRkRMRXRCUVVzc1kwRkJZeXhEUVVNeFJDeERRVUZETzFsQlEwWXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eFpRVUZaTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3haUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZGT1VRc1RVRkJUU3hoUVVGaExFZEJRVWNzV1VGQldTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM0JGTEUxQlFVMHNZVUZCWVN4SFFVRkhMR0ZCUVdFc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdaMEpCUTNoRkxFbEJRVWs3WjBKQlEwb3NWMEZCVnl4RlFVRkZMRWRCUVVjc1NVRkJTU3d3UWtGQk1FSTdaMEpCUXpsRExGRkJRVkVzUlVGQlJTeEpRVUZKTzJkQ1FVTmtMRWxCUVVrc1JVRkJSU3hOUVVGTk8yRkJRMklzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZGU2l4UFFVRlBMRzFDUVVGdFFpeERRVUZETEd0Q1FVRnJRaXhEUVVNelF5eG5Ra0ZCWjBJc1JVRkRhRUlzYlVKQlFXMUNMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUlVGRE9VUTdaMEpCUTBVc1IwRkJSeXhoUVVGaExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTNoRExGbEJRVmtzUTBGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN3eVFrRkJNa0lzWjBKQlFXZENMRWxCUVVrc1JVRkJSU3hEUVVGRE8yZENRVU14UlN4aFFVRmhMRU5CUVVNc1JVRkJSU3hYUVVGWExFVkJRVVVzWjBOQlFXZERMRVZCUVVVc1EwRkJRenRuUWtGRGFFVXNiMEpCUVc5Q0xFTkJRVU1zUlVGQlJTeFhRVUZYTEVWQlFVVXNiME5CUVc5RExFVkJRVVVzUTBGQlF6dGhRVU0xUlN4RlFVTkVMRzFDUVVGdFFpeERRVUZETEd0Q1FVRnJRaXhEUVVGRExHTkJRV01zUTBGQlF5eERRVU4yUkN4RFFVRkRPMUZCUTBvc1EwRkJRenRSUVVWRUxFOUJRVThzVTBGQlV5eERRVUZETzBsQlEyNUNMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zYTBKQlFXdENMRU5CUXk5Q0xGVkJRV3RDTEVWQlEyeENMRTlCUVdkRExFVkJRMmhETEZWQlFXZEZMRVZCUTJoRkxHVkJRWGRGTzFGQlJYaEZMRTlCUVU4c1JVRkJSU3hWUVVGVkxFVkJRVVVzVDBGQlR5eEZRVUZGTEZWQlFWVXNSVUZCUlN4bFFVRmxMRVZCUVVVc1EwRkJRenRKUVVNNVJDeERRVUZETzBsQlJVOHNUVUZCVFN4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVsQlFWazdVVUZETjBNc1RVRkJUU3haUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU40UXl4UFFVRlBMRmxCUVZrc1EwRkJRenRKUVVOMFFpeERRVUZETzBsQlJVOHNUVUZCVFN4RFFVRkRMSFZDUVVGMVFpeERRVU53UXl4SlFVRlpPMUZCUlZvc1RVRkJUU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnNSU3hOUVVGTkxFMUJRVTBzUjBGQk5FUXNSVUZCUlN4RFFVRkRPMUZCUXpORkxGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRE1VSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1dVRkRiRU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRk5CUVZNc1JVRkJSU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZSTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRE0wUXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTQ3hKUVVORkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNVMEZCVXl4RFFVRkRPMWxCUXpGQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTNoQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUTNoQ0xFTkJRVU03V1VGRFJDeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1UwRkJVeXhGUVVGRkxGVkJRVlVzUlVGQlV5eEZRVUZGTEV0QlFVc3NSVUZCUlN4UlFVRlJMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU14UlN4RFFVRkRPMUZCUTBRc1QwRkJUeXhOUVVGTkxFTkJRVU03U1VGRGFFSXNRMEZCUXp0SlFVVlBMRTFCUVUwc1EwRkJReXhyUWtGQmEwSXNRMEZETDBJc1NVRkJXVHRSUVVWYUxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRiRVVzVFVGQlRTeE5RVUZOTEVkQlFUUkVMRVZCUVVVc1EwRkJRenRSUVVNelJTeFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlF6RkNMRTFCUVUwc1NVRkJTU3hIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8xbEJRMnhETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hUUVVGVExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlF6TkVMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMGdzU1VGQlNTeEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRkZCUVZFc1EwRkJReXhGUVVGRkxFTkJRVU03V1VGRE9VSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxGTkJRVk1zUlVGQlJTeFZRVUZWTEVWQlFWTXNSVUZCUlN4TFFVRkxMRVZCUVVVc1VVRkJVU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVOQlFVTTdVVUZETVVVc1EwRkJRenRSUVVORUxFOUJRVThzVFVGQlRTeERRVUZETzBsQlEyaENMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zYlVKQlFXMUNMRU5CUTJoRExGZEJRV3RETEVWQlEyeERMR05CUVhOQ08xRkJSWFJDTEU5QlFVOHNTMEZCU3l4VlFVRlZMRTFCUVUwc1EwRkZNVUlzU1VGQlV5eEZRVU5VTEVsQlFWVTdXVUZGVml4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlEyNUNMRTFCUVUwc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVWQlFVVXNZVUZCWVN4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGRGJFUXNRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRFpDeEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMR2RDUVVGblFpeGpRVUZqTEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUXpsRExFbEJRVWtzVDBGQll5eERRVUZETzFsQlEyNUNMRWxCUVVrc1EwRkJRenRuUWtGRFNDeFBRVUZQTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRE1VUXNRMEZCUXp0WlFVRkRMRTlCUVU4c1EwRkJWU3hGUVVGRkxFTkJRVU03WjBKQlEzQkNMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zZDBKQlFYZENMR05CUVdNc1JVRkJSU3hGUVVGRkxFTkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTm9SU3hOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU5XTEVOQlFVTTdXVUZEUkN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExHVkJRV1VzWTBGQll5eFpRVUZoTEU5QlFXVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlF5OUZMRWxCUVVrc1NVRkJTVHRuUWtGQlJTeEhRVUZITEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJReTlDTEU5QlFVOHNUMEZCVHl4RFFVRkRPMUZCUTJwQ0xFTkJRVU1zUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2RVSkJRWFZDTEVOQlEzQkRMRmRCUVd0RExFVkJRMnhETEdOQlFYTkNPMUZCUlhSQ0xFOUJRVThzUzBGQlN5eFZRVUZWTEZOQlFWTXNRMEZGTjBJc1NVRkJWeXhGUVVOWUxFbEJRVlU3V1VGRlZpeE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRMjVDTEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzY1VKQlFYRkNMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVU01UkN4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU5xUWl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExHZENRVUZuUWl4alFVRmpMRVZCUVVVc1EwRkJReXhEUVVGRE8xbEJRemxETEVsQlFVa3NUMEZCWXl4RFFVRkRPMWxCUTI1Q0xFbEJRVWtzUTBGQlF6dG5Ra0ZEU0N4UFFVRlBMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkROME1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkRia01zUjBGQlJ5eERRVU5LTEVOQlFVTTdXVUZEU2l4RFFVRkRPMWxCUVVNc1QwRkJUeXhEUVVGVkxFVkJRVVVzUTBGQlF6dG5Ra0ZEY0VJc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eDNRa0ZCZDBJc1kwRkJZeXhGUVVGRkxFVkJRVVVzUTBGQlZTeERRVUZETEVOQlFVTTdaMEpCUTJoRkxFMUJRVTBzUTBGQlF5eERRVUZETzFsQlExWXNRMEZCUXp0WlFVTkVMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeGpRVUZqTEZsQlFXRXNUMEZCWlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdXVUZETDBVc1NVRkJTU3hKUVVGSk8yZENRVUZGTEVkQlFVY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGREwwSXNUMEZCVHl4UFFVRlBMRU5CUVVNN1VVRkRha0lzUTBGQlF5eERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVlBMRTFCUVUwc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4alFVRnpRanRSUVVONlJDeFBRVUZQTEV0QlFVc3NWVUZCVlN4UFFVRlBMRU5CUlROQ0xFZEJRV0U3V1VGRllpeE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRMjVDTEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzY1VKQlFYRkNMRU5CUVVNc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVU0xUkN4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFpRVU5tTEUxQlFVMHNZVUZCWVN4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjJSQ3hKUVVGSkxFbEJRV0VzUTBGQlF6dFpRVU5zUWl4SlFVRkpMRU5CUVVNN1owSkJRMGdzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMR0ZCUVdFc1NVRkJTU3hqUVVGakxFVkJRVVVzUTBGQlF5eERRVUZETzJkQ1FVTjRSQ3hKUVVGSkxFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZ2UWl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hGTEVOQlFVTTdXVUZCUXl4UFFVRlBMRU5CUVZVc1JVRkJSU3hEUVVGRE8yZENRVU53UWl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExHdENRVUZyUWl4alFVRmpMRVZCUVVVc1JVRkJSU3hEUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZETVVRc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRFZpeERRVUZETzFsQlEwUXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVsQlFVa3NZMEZCWXl4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVOc1JDeFBRVUZQTEVsQlFVa3NRMEZCUXp0UlFVTmtMRU5CUVVNc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlR5eE5RVUZOTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zWTBGQmMwSTdVVUZETTBRc1QwRkJUeXhMUVVGTExGVkJRVlVzVTBGQlV5eERRVVUzUWl4SlFVRlhMRVZCUTFnc1NVRkJWVHRaUVVWV0xFMUJRVTBzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkRia0lzVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4VlFVRlZMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRemxFTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJRMnBDTEVsQlFVa3NUMEZCWXl4RFFVRkRPMWxCUTI1Q0xFbEJRVWtzUTBGQlF6dG5Ra0ZEU0N4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4alFVRmpMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU4wUkN4UFFVRlBMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZETjBRc1EwRkJRenRaUVVGRExFOUJRVThzUTBGQlZTeEZRVUZGTEVOQlFVTTdaMEpCUTNCQ0xFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCVlN4RFFVRkRMRU5CUVVNN1owSkJRM1JDTEUxQlFVMHNRMEZCUXl4RFFVRkRPMWxCUTFZc1EwRkJRenRaUVVORUxFbEJRVWtzU1VGQlNUdG5Ra0ZCUlN4SFFVRkhMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF5OUNMRTlCUVU4c1QwRkJUeXhEUVVGRE8xRkJRMnBDTEVOQlFVTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1kwRkJjMEk3VVVGRE0wUXNUMEZCVHl4TFFVRkxMRlZCUVZVc1UwRkJVeXhEUVVVM1FpeEhRVUZoTEVWQlEySXNTVUZCVlR0WlFVVldMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZEYmtJc1RVRkJUU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eFZRVUZWTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUXpsRUxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTJwQ0xFMUJRVTBzWVVGQllTeEhRVUZITEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU4yUkN4SlFVRkpMRWxCUVdFc1EwRkJRenRaUVVOc1FpeEpRVUZKTEVOQlFVTTdaMEpCUTBnc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eFpRVUZaTEdGQlFXRXNRMEZCUXl4TlFVRk5MRWxCUVVrc1kwRkJZeXhGUVVGRkxFTkJRVU1zUTBGQlF6dG5Ra0ZEYUVVc1NVRkJTU3hIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zWVVGQllTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTI1RkxFTkJRVU03V1VGQlF5eFBRVUZQTEVOQlFWVXNSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRzlDUVVGdlFpeGpRVUZqTEVWQlFVVXNSVUZCUlN4RFFVRlZMRU5CUVVNc1EwRkJRenRuUWtGRE5VUXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRWaXhEUVVGRE8xbEJRMFFzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRWxCUVVrc1EwRkJReXhOUVVGTkxFbEJRVWtzWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTnlSQ3hKUVVGSkxFbEJRVWs3WjBKQlFVVXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU12UWl4UFFVRlBMRWxCUVVrc1EwRkJRenRSUVVOa0xFTkJRVU1zUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2FVSkJRV2xDTEVOQlF6bENMRXRCUVN0RExFVkJReTlETEdOQlFYTkNPMUZCUlhSQ0xFOUJRVThzUzBGQlN5eFZRVUZWTEVsQlFVa3NRMEZGZUVJc1YwRkJaMEk3V1VGRmFFSXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVU51UWl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTEdGQlFXRXNRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRMmhFTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRMW9zVFVGQlRTeEZRVUZGTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1YwRkJWeXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETzFsQlF5OURMRWxCUVVrc1QwRkJUeXhGUVVGRkxFdEJRVXNzVjBGQlZ6dG5Ra0ZETTBJc1RVRkJUU3hKUVVGSkxHVkJRV1VzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhEUVVGRE8xbEJRM1JFTEVsQlFVa3NWVUZCYVVJc1EwRkJRenRaUVVOMFFpeEpRVUZKTEVOQlFVTTdaMEpCUTBnc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEdOQlFXTXNVMEZCVXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdaMEpCUXpkRUxGVkJRVlVzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVONlJDeERRVUZETzFsQlFVTXNUMEZCVHl4RFFVRlZMRVZCUVVVc1EwRkJRenRuUWtGRGNFSXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhyUWtGQmEwSXNZMEZCWXl4WlFVRlpMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTjRSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU5XTEVOQlFVTTdXVUZEUkN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzWTBGQll5eFpRVUZoTEZWQlFXdENMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTXpSU3hQUVVGUExGVkJRVlVzUTBGQlF6dFJRVU53UWl4RFFVRkRMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVThzVFVGQlRTeERRVUZETEcxQ1FVRnRRaXhEUVVOb1F5eExRVUVyUXl4RlFVTXZReXhYUVVGclF5eEZRVU5zUXl4alFVRnpRanRSUVVWMFFpeFBRVUZQTEV0QlFVc3NWVUZCVlN4TlFVRk5MRU5CUlRGQ0xGZEJRV2RDTEVWQlEyaENMRWxCUVZNc1JVRkRWQ3hKUVVGVk8xbEJSVllzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVOdVFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxHRkJRV0VzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUTJ4RUxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMWxCUTJRc1RVRkJUU3hGUVVGRkxFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NWMEZCVnl4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRE8xbEJReTlETEVsQlFVa3NUMEZCVHl4RlFVRkZMRXRCUVVzc1YwRkJWenRuUWtGRE0wSXNUVUZCVFN4SlFVRkpMR1ZCUVdVc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eEZRVUZGTEZkQlFWY3NRMEZCUXl4RFFVRkRPMWxCUTNSRUxFbEJRVWtzVDBGQldTeERRVUZETzFsQlEycENMRWxCUVVrc1EwRkJRenRuUWtGRFNDeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1kwRkJZeXhUUVVGVExFbEJRVWtzUTBGQlF5eEZRVUZGTEVsQlFVa3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRuUWtGRE4wUXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEycEVMRTlCUVU4c1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVNeFF5eEpRVUZKTEZkQlFWY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1QwRkJUeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRemxETEVkQlFVY3NRMEZEU2l4RFFVRkRPMWxCUTBvc1EwRkJRenRaUVVGRExFOUJRVThzUTBGQlZTeEZRVUZGTEVOQlFVTTdaMEpCUTNCQ0xFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCVlN4RFFVRkRMRU5CUVVNN1owSkJRM1JDTEUxQlFVMHNRMEZCUXl4RFFVRkRPMWxCUTFZc1EwRkJRenRaUVVORUxFbEJRVWtzU1VGQlNUdG5Ra0ZCUlN4SFFVRkhMRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF5OUNMRTlCUVU4c1QwRkJUeXhEUVVGRE8xRkJRMnBDTEVOQlFVTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zYlVKQlFXMUNMRU5CUTJoRExFdEJRU3RETEVWQlF5OURMR05CUVhOQ08xRkJSWFJDTEU5QlFVOHNTMEZCU3l4VlFVRlZMRTFCUVUwc1EwRkZNVUlzVjBGQlowSXNSVUZEYUVJc1NVRkJWVHRaUVVWV0xFMUJRVTBzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkRia0lzVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hoUVVGaExFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVTnNSQ3hEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0WlFVTmtMRTFCUVUwc1JVRkJSU3hIUVVGSExFdEJRVXNzUTBGQlF5eEhRVUZITEZkQlFWY3NRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRaUVVNdlF5eEpRVUZKTEU5QlFVOHNSVUZCUlN4TFFVRkxMRmRCUVZjN1owSkJRek5DTEUxQlFVMHNTVUZCU1N4bFFVRmxMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0WlFVTjBSQ3hKUVVGSkxFZEJRVlVzUTBGQlF6dFpRVU5tTEVsQlFVa3NRMEZCUXp0blFrRkRTQ3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEZsQlFWa3NZMEZCWXl4VFFVRlRMRWxCUVVrc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0blFrRkRPVVFzUjBGQlJ5eEhRVUZITEUxQlFVMHNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM0JFTEVOQlFVTTdXVUZCUXl4UFFVRlBMRU5CUVZVc1JVRkJSU3hEUVVGRE8yZENRVU53UWl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExHOUNRVUZ2UWl4alFVRmpMRmxCUVZrc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlZTeERRVUZETEVOQlFVTTdaMEpCUXpGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFsQlExWXNRMEZCUXp0WlFVTkVMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eGpRVUZqTEZsQlFWa3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVOd1JDeEpRVUZKTEVsQlFVazdaMEpCUVVVc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTXZRaXhQUVVGUExFZEJRVWNzUTBGQlF6dFJRVU5pTEVOQlFVTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1kwRkJjMEk3VVVGRE1VUXNUMEZCVHl4TFFVRkxMRlZCUVZVc1UwRkJVeXhEUVVVM1FpeEpRVUZaTEVWQlExb3NTVUZCZVVJc1JVRkRla0lzVDBGQk5rSTdXVUZGTjBJc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlEyUXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUlVGQlJTeGxRVUZsTEVOQlFVTXNVMEZCVXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVOMlJDeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVOcVFpeE5RVUZOTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hMUVVGTExFVkJRVVVzVVVGQlVTeEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRPMWxCUTNaRUxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVTmlMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlEzWkVMRU5CUVVNN1dVRkRXQ3hOUVVGTkxHRkJRV0VzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU03V1VGRE5VUXNUVUZCVFN4cFFrRkJhVUlzUjBGQlJ5eERRVUZETEZOQlFWTXNTVUZCU1N4aFFVRmhMRU5CUlhoRExFTkJRVU03V1VGRFpDeEpRVUZKTEdsQ1FVRnBRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXp0blFrRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NhVUpCUVdsQ0xFTkJRVU03V1VGRGRFVXNVVUZCVVN4SlFVRkpMRVZCUVVVc1EwRkJRenRuUWtGRFlpeExRVUZMTEhGQ1FVRnhRaXhEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEYUVNc1MwRkJTeXh4UWtGQmNVSXNRMEZCUXl4UFFVRlBPMjlDUVVOb1F5eE5RVUZOTzJkQ1FVTlNMRXRCUVVzc2NVSkJRWEZDTEVOQlFVTXNUMEZCVHp0dlFrRkRhRU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRnRRaXhEUVVGRExFTkJRVU03YjBKQlF5OUNMRTFCUVUwN1owSkJRMUlzUzBGQlN5eHhRa0ZCY1VJc1EwRkJReXhKUVVGSkxFTkJRVU03WjBKQlEyaERMRXRCUVVzc2NVSkJRWEZDTEVOQlFVTXNUMEZCVHp0dlFrRkRhRU1zU1VGQlNTeEhRVUZITzNkQ1FVTk1MRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03ZDBKQlExQXNhVUpCUVhkQ08zZENRVU40UWl4RlFVRkZMRXRCUVVzc1JVRkJSU3hOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTzNGQ1FVTTFRaXhEUVVGRE8yOUNRVU5HTEUxQlFVMDdaMEpCUTFJc1MwRkJTeXh4UWtGQmNVSXNRMEZCUXl4WFFVRlhPMjlDUVVOd1F5eE5RVUZOTzJkQ1FVTlNMRXRCUVVzc2NVSkJRWEZDTEVOQlFVTXNVVUZCVVN4RFFVRkRPMmRDUVVOd1F5eExRVUZMTEhGQ1FVRnhRaXhEUVVGRExFMUJRVTBzUTBGQlF6dG5Ra0ZEYkVNc1MwRkJTeXh4UWtGQmNVSXNRMEZCUXl4TlFVRk5MRU5CUVVNN1owSkJRMnhETEV0QlFVc3NjVUpCUVhGQ0xFTkJRVU1zVFVGQlRTeERRVUZETzJkQ1FVTnNReXhMUVVGTExIRkNRVUZ4UWl4RFFVRkRMRTFCUVUwc1EwRkJRenRuUWtGRGJFTXNTMEZCU3l4eFFrRkJjVUlzUTBGQlF5eFhRVUZYTEVOQlFVTTdaMEpCUTNaRExFdEJRVXNzY1VKQlFYRkNMRU5CUVVNc1VVRkJVVHR2UWtGRGFrTXNUVUZCVFR0WlFVTldMRU5CUVVNN1dVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeEhRVUZITEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVNM1JDeERRVUZETEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlU4c1RVRkJUU3hEUVVGRExEaENRVUU0UWl4RFFVTXpReXhaUVVGdlFpeEZRVU53UWl4alFVRnpRanRSUVVWMFFpeFBRVUZQTEV0QlFVc3NWVUZCVlN4cFFrRkJhVUlzUTBGRmNrTXNSMEZCUnl4SlFVRlhPMWxCUldRc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlEyUXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUlVGQlJTeFpRVUZaTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUXpGRExFTkJRVU1zUjBGQlJ5eERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU03V1VGRmVrSXNVVUZCVVN4WlFVRlpMRVZCUVVVc1EwRkJRenRuUWtGRGNrSXNTMEZCU3l4eFFrRkJjVUlzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVOdVF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RlFVRkZMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dHZRa0ZETlVJc1QwRkJUeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkRha01zUjBGQlJ5eEZRVU5HTEU5QlFXVXNSVUZCUlN4VFFVRXlRaXhGUVVNM1F5eEhRVUZITEVOQlEwb3NRMEZCUXp0blFrRkRTaXhEUVVGRE8yZENRVU5FTEV0QlFVc3NjVUpCUVhGQ0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRia01zVFVGQlRTeERRVUZETEVkQlFVY3NSVUZCUlN4SlFVRkpMRVZCUVVVc1QwRkJUeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzI5Q1FVTnNReXhQUVVGUExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVOeVF5eEhRVUZITEVWQlEwWXNUMEZCWlN4RlFVRkZMRk5CUVRKQ0xFVkJRemRETzNkQ1FVTkZMRXRCUVVzc1JVRkJSeXhQUVVGbExFVkJRVVVzUzBGQlN6dDNRa0ZET1VJc1RVRkJUU3hGUVVGSExFOUJRV1VzUlVGQlJTeE5RVUZOTzNkQ1FVTm9ReXhKUVVGSk8zRkNRVU5GTEVWQlExSXNSMEZCUnl4RFFVTktMRU5CUVVNN1owSkJRMG9zUTBGQlF6dG5Ra0ZEUkN4TFFVRkxMSEZDUVVGeFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMmhETEUxQlFVMHNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzI5Q1FVTTVRaXhOUVVGTkxGTkJRVk1zUjBGRFdpeFBRVUZsTEVWQlFVVXNVMEZCVXl4SlFVRkpMR05CUVdNc1EwRkJReXhIUVVGSExFTkJRVU03YjBKQlEzQkVMRTFCUVUwc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRekZETEVsQlFVa3NUMEZCVHl4WFFVRlhMRU5CUVVNc1NVRkJTU3hMUVVGTExGVkJRVlU3ZDBKQlEzaERMRTlCUVU4c1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVXNVMEZCVXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVU5xUkN4UFFVRlBMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRMnhHTEVOQlFVTTdaMEpCUTBRc1MwRkJTeXh4UWtGQmNVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU5vUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxFOUJRVThzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0dlFrRkRPVUlzVFVGQlRTeEhRVUZITEVkQlFVYzdkMEpCUTFZc1RVRkJUU3hGUVVGSExFOUJRV1VzUlVGQlJTeE5RVUZOTEVsQlFVa3NRMEZCUXp0M1FrRkRja01zUzBGQlN5eEZRVUZITEU5QlFXVXNSVUZCUlN4TFFVRkxMRWxCUVVrc1JVRkJSVHQzUWtGRGNFTXNVVUZCVVN4RlFVRkhMRTlCUVdVc1JVRkJSU3hSUVVGUk8zRkNRVU55UXl4RFFVRkRPMjlDUVVOR0xFMUJRVTBzVjBGQlZ5eEhRVUZITEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03YjBKQlF6RkRMRTFCUVUwc1UwRkJVeXhIUVVGSkxFOUJRV1VzUlVGQlJTeFRRVUZUTEVsQlFVa3NZMEZCWXl4RFFVRkRMRWRCUVVjc1EwRkJRenR2UWtGRGNFVXNTVUZCU1N4UFFVRlBMRmRCUVZjc1EwRkJReXhKUVVGSkxFdEJRVXNzVlVGQlZUdDNRa0ZEZUVNc1QwRkJUeXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTjBSQ3hQUVVGUExGZEJRVmNzUTBGQlF5eFRRVUZUTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTjJSaXhEUVVGRE8yZENRVU5FTEV0QlFVc3NjVUpCUVhGQ0xFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRka01zVFVGQlRTeERRVUZETEVkQlFVY3NSVUZCUlN4TFFVRkxMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03YjBKQlF6RkNMRTlCUVU4c1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkRNVVFzUTBGQlF6dG5Ra0ZEUkN4TFFVRkxMSEZDUVVGeFFpeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMjVETEUxQlFVMHNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzI5Q1FVTXhRaXhQUVVGUExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRPM2xDUVVONlFpeEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRE8zbENRVU4wUWl4TlFVRk5MRU5CUVVNc1IwRkJSeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkROMElzUTBGQlF6dG5Ra0ZEUkR0dlFrRkRSU3hKUVVORkxGbEJRVmtzUzBGQlN5eHhRa0ZCY1VJc1EwRkJReXhSUVVGUk8zZENRVU12UXl4WlFVRlpMRXRCUVVzc2NVSkJRWEZDTEVOQlFVTXNUVUZCVFR0M1FrRkROME1zV1VGQldTeExRVUZMTEhGQ1FVRnhRaXhEUVVGRExFMUJRVTA3ZDBKQlF6ZERMRmxCUVZrc1MwRkJTeXh4UWtGQmNVSXNRMEZCUXl4TlFVRk5PM2RDUVVNM1F5eFpRVUZaTEV0QlFVc3NjVUpCUVhGQ0xFTkJRVU1zVFVGQlRUdDNRa0ZETjBNc1dVRkJXU3hMUVVGTExIRkNRVUZ4UWl4RFFVRkRMRmRCUVZjN2QwSkJRMnhFTEZsQlFWa3NTMEZCU3l4eFFrRkJjVUlzUTBGQlF5eFJRVUZSTEVWQlF5OURMRU5CUVVNN2QwSkJRMFFzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJRenQzUWtGRGNrSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4WlFVRlpMRVZCUVVVc1MwRkJTeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzI5Q1FVTnVSU3hEUVVGRE8yOUNRVU5FTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2MwSkJRWE5DTEZsQlFWa3NSVUZCUlN4RFFVRkRMRU5CUVVNN1dVRkRNVVFzUTBGQlF6dFJRVU5JTEVOQlFVTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1ZVRkJhMEk3VVVGRGVrUXNUMEZCVHl4TFFVRkxMRlZCUVZVc1dVRkJXU3hEUVVWb1F5eEhRVUZITEVsQlFWYzdXVUZGWkN4TlFVRk5MRWRCUVVjc1IwRkJVU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8xbEJReTlETEVsQlFVa3NRMEZCUXp0blFrRkRTQ3hKUVVGSkxFZEJRVWM3YjBKQlFVVXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXd3UWtGQk1FSXNWVUZCVlN4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRE5VUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRMlFzVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlEzaERMRU5CUVVNc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzJkQ1FVTndRaXhOUVVGTkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU14UXl4TlFVRk5MRlZCUVZVc1IwRkJSeXh0UWtGQmJVSXNRMEZCUXl4blFrRkJaMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkRPVVFzU1VGQlNTeFBRVUZQTEZkQlFWY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhWUVVGVkxFVkJRVVVzUTBGQlF6dHZRa0ZEYkVRc1QwRkJUeXhYUVVGWExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNSMEZCUnl4VlFVRlZMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlEzSkVMRU5CUVVNN1owSkJRMFFzU1VGQlNTeFBRVUZQTEZkQlFWY3NRMEZCUXl4VFFVRlRMRXRCUVVzc1ZVRkJWU3hGUVVGRkxFTkJRVU03YjBKQlEyaEVMRTlCUVU4c1YwRkJWeXhEUVVGRExGTkJRVk1zUTBGQlF5eFZRVUZWTEVWQlFVVXNSMEZCUnl4VlFVRlZMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03WjBKQlF5OUVMRU5CUVVNN1owSkJRMFFzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZEWWl4MVFrRkJkVUlzVlVGQlZTeHJRa0ZCYTBJc1YwRkJWeXhGUVVGRkxGZEJRVmNzUlVGQlJTeEpRVUZKTEVWQlFVVXNRMEZEY0VZc1EwRkJRenRaUVVOS0xFTkJRVU03V1VGQlF5eFBRVUZQTEVOQlFVMHNSVUZCUlN4RFFVRkRPMmRDUVVOb1FpeEpRVUZKTEVkQlFVYzdiMEpCUVVVc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eHBRa0ZCYVVJc1ZVRkJWU3hWUVVGVkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpkRUxFMUJRVTBzUTBGQlF5eERRVUZETzFsQlExWXNRMEZCUXp0UlFVTklMRU5CUVVNc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlR5eE5RVUZOTEVOQlFVTXNkMEpCUVhkQ0xFTkJRVU1zVlVGQmEwSTdVVUZEZUVRc1QwRkJUeXhMUVVGTExGVkJRVlVzVjBGQlZ5eERRVVV2UWl4SFFVRkhMRWxCUVZjN1dVRkZaQ3hOUVVGTkxFZEJRVWNzUjBGQlVTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFsQlF6bERMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVU5rTEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzVlVGQlZTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVTjRReXhEUVVGRExFZEJRVWNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0WlFVTnVRaXhOUVVGTkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRekZETEUxQlFVMHNWVUZCVlN4SFFVRkhMRzFDUVVGdFFpeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlJUbEVMSEZGUVVGeFJUdFpRVU55UlN4SlFVRkpMRTlCUVU4c1YwRkJWeXhEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZMTEZWQlFWVXNSVUZCUlN4RFFVRkRPMmRDUVVOc1JDeFBRVUZQTEZkQlFWY3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhIUVVGSExGVkJRVlVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTnlSQ3hEUVVGRE8xbEJRMFFzT0VWQlFUaEZPMWxCUXpsRkxFbEJRVWtzVjBGQlZ5eEZRVUZGTEVsQlFVa3NTVUZCU1N4UFFVRlBMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEV0QlFVc3NWVUZCVlN4RlFVRkZMRU5CUVVNN1owSkJRelZGTEU5QlFVOHNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eEhRVUZITEZWQlFWVXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVNeFJDeERRVUZETzFsQlEwUXNhVU5CUVdsRE8xbEJRMnBETEVsQlFVa3NUMEZCVHl4WFFVRlhMRU5CUVVNc1UwRkJVeXhMUVVGTExGVkJRVlVzUlVGQlJTeERRVUZETzJkQ1FVTm9SQ3hQUVVGUExGZEJRVmNzUTBGQlF5eFRRVUZUTEVOQlFVTXNWVUZCVlN4RlFVRkZMRWRCUVVjc1ZVRkJWU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlF5OUVMRU5CUVVNN1dVRkRSQ3hOUVVGTkxFbEJRVWtzUzBGQlN5eERRVU5pTEZkQlFWY3NWVUZCVlN4clFrRkJhMElzVjBGQlZ5eEZRVUZGTEZkQlFWY3NSVUZCUlN4SlFVRkpMR05CUVdNc1EwRkRjRVlzUTBGQlF6dFJRVU5LTEVOQlFVTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1NVRkJWenRSUVVONlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJRenRaUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETzFGQlEyNURMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMjVETEVsQlEwVXNTVUZCU1R0WlFVTktMRTlCUVU4c1NVRkJTU3hMUVVGTExGRkJRVkU3V1VGRGVFSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVU53UWl4RFFVRkRPMWxCUTBRc1RVRkJUU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUXpWQ0xFMUJRVTBzV1VGQldTeEhRVUZITEZGQlFWRXNRMEZCUXl4VFFVRlRMRXRCUVVzc1UwRkJVeXhEUVVGRE8xbEJRM1JFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRkZCUVZFc1EwRkJReXhMUVVGTExFdEJRVXNzVTBGQlV5eERRVUZETzFsQlF6bERMRTFCUVUwc1UwRkJVeXhIUVVGSExGRkJRVkVzUTBGQlF5eE5RVUZOTEV0QlFVc3NVMEZCVXl4RFFVRkRPMWxCUTJoRUxFbEJRVWtzUTBGQlF5eFpRVUZaTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWxCUVVrc1EwRkJReXhUUVVGVE8yZENRVUZGTEU5QlFVOHNTVUZCU1N4RFFVRkRPMWxCUXpGRUxFMUJRVTBzVFVGQlRTeEhRVUZWTEVWQlFVVXNRMEZCUXp0WlFVTjZRaXhKUVVGSkxGbEJRVms3WjBKQlFVVXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdhVUpCUXpkRExFbEJRVWtzVVVGQlVTeEpRVUZKTEZOQlFWTTdaMEpCUVVVc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0WlFVTjJSQ3hKUVVGSkxGRkJRVkU3WjBKQlFVVXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdXVUZETVVNc1NVRkJTU3hUUVVGVE8yZENRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFsQlF6VkRMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUlVGQlJTeEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpsQ0xFTkJRVU03VVVGRFJDeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zYzBKQlFYTkNMRU5CUTI1RExGZEJRV3RETEVWQlEyeERMR05CUVhOQ08xRkJSWFJDTEU5QlFVODdXVUZEVEN4eFFrRkJjVUlzUTBGQlF5eFhRVUZYTEVWQlFVVXNUVUZCVFN4RFFVRkRPMWxCUXpGRExGbEJRVmtzUTBGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN4blFrRkJaMElzWTBGQll5eEhRVUZITEVWQlFVVXNRMEZCUXp0WlFVTTFSQ3hQUVVGUExFTkJRVU03WjBKQlEwNHNWMEZCVnl4RlFVRkZMR1ZCUVdVc1kwRkJZeXhGUVVGRk8yZENRVU0xUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVWQlFVVXNWMEZCVnl4RFFVRkRPMkZCUTJoRUxFTkJRVU03V1VGRFJpeHJRa0ZCYTBJc1EwRkJRenRuUWtGRGFrSXNWMEZCVnl4RlFVRkZMRWRCUVVjc1kwRkJZeXgzUWtGQmQwSTdaMEpCUTNSRUxFMUJRVTBzUlVGQlJTeEZRVUZGTEVsQlFVa3NSVUZCUlN4aFFVRmhMRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVVU3WVVGRE4wTXNRMEZCUXp0WlFVTkdMSEZDUVVGeFFpeERRVUZETEVWQlFVVXNWMEZCVnl4RlFVRkZMRFJDUVVFMFFpeEZRVUZGTEVOQlFVTTdXVUZEY0VVc09FSkJRVGhDTEVOQlFVTTdaMEpCUXpkQ0xGZEJRVmNzUlVGQlJTd3lRMEZCTWtNN1lVRkRla1FzUTBGQlF6dFRRVU5JTEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlU4c1RVRkJUU3hEUVVGRExHOUNRVUZ2UWl4RFFVTnFReXhYUVVGclF5eEZRVU5zUXl4alFVRnpRanRSUVVWMFFpeFBRVUZQTzFsQlEwd3NjVUpCUVhGQ0xFTkJRVU1zVjBGQlZ5eEZRVUZGTEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNN1dVRkRiRVFzV1VGQldTeERRVUZETEVWQlFVVXNUMEZCVHl4RlFVRkZMR2RDUVVGblFpeGpRVUZqTEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUXpWRUxFOUJRVThzUTBGQlF6dG5Ra0ZEVGl4WFFVRlhMRVZCUVVVc1pVRkJaU3hqUVVGakxFVkJRVVU3WjBKQlF6VkRMRTFCUVUwc1JVRkJSVHR2UWtGRFRpeEpRVUZKTEVWQlFVVXNUMEZCVHp0dlFrRkRZaXhMUVVGTExFVkJRVVVzUlVGQlJTeEpRVUZKTEVWQlFVVXNZVUZCWVN4RFFVRkRMRmRCUVZjc1EwRkJReXhGUVVGRk8ybENRVU0xUXp0aFFVTkdMRU5CUVVNN1dVRkRSaXhyUWtGQmEwSXNRMEZCUXp0blFrRkRha0lzVjBGQlZ5eEZRVUZGTEVkQlFVY3NZMEZCWXl4M1FrRkJkMEk3WjBKQlEzUkVMRTFCUVUwc1JVRkJSVHR2UWtGRFRpeEpRVUZKTEVWQlFVVXNUMEZCVHp0dlFrRkRZaXhMUVVGTExFVkJRVVVzUlVGQlJTeEpRVUZKTEVWQlFVVXNZVUZCWVN4RFFVRkRMRmRCUVZjc1EwRkJReXhGUVVGRk8ybENRVU0xUXp0aFFVTkdMRU5CUVVNN1dVRkRSaXh4UWtGQmNVSXNRMEZCUXl4RlFVRkZMRmRCUVZjc1JVRkJSU3cwUWtGQk5FSXNSVUZCUlN4RFFVRkRPMWxCUTNCRkxEaENRVUU0UWl4RFFVRkRPMmRDUVVNM1FpeFhRVUZYTEVWQlFVVXNNa05CUVRKRE8yRkJRM3BFTEVOQlFVTTdVMEZEU0N4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWUExFMUJRVTBzUTBGQlF5eHJRa0ZCYTBJc1EwRkRMMElzVjBGQmEwTXNSVUZEYkVNc1kwRkJjMEk3VVVGRmRFSXNUMEZCVHp0WlFVTk1MSEZDUVVGeFFpeERRVUZETEZkQlFWY3NSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hEUVVGRE8xbEJRMnBFTEZsQlFWa3NRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3haUVVGWkxHTkJRV01zYTBKQlFXdENMRVZCUVVVc1EwRkJRenRaUVVOMlJTeFJRVUZSTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhGUVVGRkxGRkJRVkVzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRTlCUVU4c1JVRkJSU3hEUVVGRE8xbEJRM2hFTEdGQlFXRXNRMEZCUXp0blFrRkRXaXhYUVVGWExFVkJRVVVzUjBGQlJ5eGpRVUZqTERCQ1FVRXdRanRuUWtGRGVFUXNUVUZCVFN4RlFVRkZPMjlDUVVOT0xFbEJRVWtzUlVGQlJTeFBRVUZQTzI5Q1FVTmlMRXRCUVVzc1JVRkJSU3hGUVVGRkxFbEJRVWtzUlVGQlJTeGhRVUZoTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVN2FVSkJRelZETzJGQlEwWXNRMEZCUXp0WlFVTkdMRzFDUVVGdFFpeERRVUZETzJkQ1FVTnNRaXhYUVVGWExFVkJRVVVzVFVGQlRTeGpRVUZqTERCRFFVRXdRenRoUVVNMVJTeERRVUZETzFOQlEwZ3NRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zYjBKQlFXOUNMRU5CUTJwRExGZEJRV3RETEVWQlEyeERMR05CUVhOQ0xFVkJRM1JDTEdGQlFXbERPMUZCUldwRExFOUJRVTg3V1VGRFRDeHhRa0ZCY1VJc1EwRkJReXhYUVVGWExFVkJRVVVzUzBGQlN5eEZRVUZGTEUxQlFVMHNRMEZCUXp0WlFVTnFSQ3hyUWtGQmEwSXNRMEZCUXl4aFFVRmhMRU5CUVVNN1dVRkRha01zV1VGQldTeERRVUZETzJkQ1FVTllMRTlCUVU4c1JVRkJSU3h2UWtGQmIwSXNZMEZCWXl3MlFrRkJOa0k3WVVGRGVrVXNRMEZCUXp0WlFVTkdMRTlCUVU4c1EwRkJRenRuUWtGRFRpeFhRVUZYTEVWQlFVVXNOa05CUVRaRExHTkJRV01zUlVGQlJUdG5Ra0ZETVVVc1RVRkJUU3hGUVVGRk8yOUNRVU5PTEVsQlFVa3NSVUZCUlN4UFFVRlBPMjlDUVVOaUxFbEJRVWtzUlVGQlJTeGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFVkJRVVVzVjBGQlZ5eERRVUZETEVOQlFVTTdhVUpCUXk5RU8yRkJRMFlzUTBGQlF6dFpRVU5HTEdGQlFXRXNRMEZCUXp0blFrRkRXaXhYUVVGWExFVkJRVVVzUjBGQlJ5eGpRVUZqTEhkQ1FVRjNRanRuUWtGRGRFUXNUVUZCVFN4RlFVRkZPMjlDUVVOT0xFbEJRVWtzUlVGQlJTeFBRVUZQTzI5Q1FVTmlMRXRCUVVzc1JVRkJSU3hGUVVGRkxFbEJRVWtzUlVGQlJTeGhRVUZoTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVN2FVSkJRelZETzJGQlEwWXNRMEZCUXp0WlFVTkdMRzFDUVVGdFFpeERRVUZETzJkQ1FVTnNRaXhYUVVGWExFVkJRVVVzVFVGQlRTeGpRVUZqTERCRFFVRXdRenRoUVVNMVJTeERRVUZETzFsQlEwWXNjVUpCUVhGQ0xFTkJRVU1zUlVGQlJTeFhRVUZYTEVWQlFVVXNORUpCUVRSQ0xFVkJRVVVzUTBGQlF6dFRRVU55UlN4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWUExFMUJRVTBzUTBGQlF5eHZRa0ZCYjBJc1EwRkRha01zVjBGQmEwTXNSVUZEYkVNc1kwRkJjMElzUlVGRGRFSXNZVUZCYVVNN1VVRkZha01zVDBGQlR6dFpRVU5NTEhGQ1FVRnhRaXhEUVVGRExGZEJRVmNzUlVGQlJTeFJRVUZSTEVWQlFVVXNUVUZCVFN4RFFVRkRPMWxCUTNCRUxHdENRVUZyUWl4RFFVRkRMR0ZCUVdFc1EwRkJRenRaUVVOcVF5eFpRVUZaTEVOQlFVTXNSVUZCUlN4UFFVRlBMRVZCUVVVc1ZVRkJWU3hqUVVGakxHdENRVUZyUWl4RlFVRkZMRU5CUVVNN1dVRkRja1VzVVVGQlVTeERRVUZETEVWQlFVVXNTVUZCU1N4RlFVRkZMRXRCUVVzc1JVRkJSU3hSUVVGUkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVONFJDeGhRVUZoTEVOQlFVTTdaMEpCUTFvc1YwRkJWeXhGUVVGRkxFZEJRVWNzWTBGQll5eDNRa0ZCZDBJN1owSkJRM1JFTEUxQlFVMHNSVUZCUlR0dlFrRkRUaXhKUVVGSkxFVkJRVVVzVDBGQlR6dHZRa0ZEWWl4TFFVRkxMRVZCUVVVc1JVRkJSU3hKUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZPMmxDUVVNMVF6dGhRVU5HTEVOQlFVTTdXVUZEUml4dFFrRkJiVUlzUTBGQlF6dG5Ra0ZEYkVJc1YwRkJWeXhGUVVGRkxFMUJRVTBzWTBGQll5d3dRMEZCTUVNN1lVRkROVVVzUTBGQlF6dFRRVU5JTEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlU4c1RVRkJUU3hEUVVGRExHTkJRV01zUTBGRE0wSXNWMEZCYTBNc1JVRkRiRU1zWTBGQmMwSXNSVUZEZEVJc1lVRkJhVU1zUlVGRGFrTXNUVUZCWXp0UlFVVmtMRTlCUVU4N1dVRkRUQ3h4UWtGQmNVSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFMUJRVTBzUTBGQlF6dFpRVU5xUkN4clFrRkJhMElzUTBGQlF5eGhRVUZoTEVOQlFVTTdXVUZEYWtNc1dVRkJXU3hEUVVGRExFVkJRVVVzVDBGQlR5eEZRVUZGTEdOQlFXTXNZMEZCWXl4blFrRkJaMElzUlVGQlJTeERRVUZETzFsQlEzWkZMR0ZCUVdFc1EwRkJRenRuUWtGRFdpeFhRVUZYTEVWQlFVVXNSMEZCUnl4alFVRmpMREJDUVVFd1FqdG5Ra0ZEZUVRc1RVRkJUU3hGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEdGQlFXRXNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJSVHRoUVVNM1F5eERRVUZETzFsQlEwWXNiVUpCUVcxQ0xFTkJRVU03WjBKQlEyeENMRmRCUVZjc1JVRkJSU3hOUVVGTkxHTkJRV01zTUVOQlFUQkRPMkZCUXpWRkxFTkJRVU03VTBGRFNDeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVlBMRTFCUVUwc1EwRkJReXhuUWtGQlowSXNRMEZETjBJc1YwRkJhME1zUlVGRGJFTXNZMEZCYzBJc1JVRkRkRUlzWVVGQmFVTXNSVUZEYWtNc1RVRkJZenRSUVVWa0xFOUJRVTg3V1VGRFRDeHhRa0ZCY1VJc1EwRkJReXhYUVVGWExFVkJRVVVzUzBGQlN5eEZRVUZGTEUxQlFVMHNRMEZCUXp0WlFVTnFSQ3hyUWtGQmEwSXNRMEZCUXl4aFFVRmhMRU5CUVVNN1dVRkRha01zV1VGQldTeERRVUZETzJkQ1FVTllMRTlCUVU4c1JVRkJSU3gxUWtGQmRVSXNZMEZCWXl3MlFrRkJOa0k3WVVGRE5VVXNRMEZCUXp0WlFVTkdMRTlCUVU4c1EwRkJRenRuUWtGRFRpeFhRVUZYTEVWQlFVVXNLME5CUVN0RExHTkJRV01zUlVGQlJUdG5Ra0ZETlVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RlFVRkZMRmRCUVZjc1EwRkJRenRoUVVOb1JDeERRVUZETzFsQlEwWXNZVUZCWVN4RFFVRkRPMmRDUVVOYUxGZEJRVmNzUlVGQlJTeEhRVUZITEdOQlFXTXNkMEpCUVhkQ08yZENRVU4wUkN4TlFVRk5MRVZCUVVVc1JVRkJSU3hKUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZPMkZCUXpkRExFTkJRVU03V1VGRFJpeHRRa0ZCYlVJc1EwRkJRenRuUWtGRGJFSXNWMEZCVnl4RlFVRkZMRTFCUVUwc1kwRkJZeXd3UTBGQk1FTTdZVUZETlVVc1EwRkJRenRaUVVOR0xIRkNRVUZ4UWl4RFFVRkRMRVZCUVVVc1YwRkJWeXhGUVVGRkxEUkNRVUUwUWl4RlFVRkZMRU5CUVVNN1UwRkRja1VzUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlF6ZENMRmRCUVd0RExFVkJRMnhETEdOQlFYTkNMRVZCUTNSQ0xHRkJRV2xETEVWQlEycERMRTFCUVdNN1VVRkZaQ3hQUVVGUE8xbEJRMHdzY1VKQlFYRkNMRU5CUVVNc1YwRkJWeXhGUVVGRkxGRkJRVkVzUlVGQlJTeE5RVUZOTEVOQlFVTTdXVUZEY0VRc2EwSkJRV3RDTEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUTJwRExGbEJRVmtzUTBGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN4WlFVRlpMR05CUVdNc1owSkJRV2RDTEVWQlFVVXNRMEZCUXp0WlFVTnlSU3hoUVVGaExFTkJRVU03WjBKQlExb3NWMEZCVnl4RlFVRkZMRWRCUVVjc1kwRkJZeXgzUWtGQmQwSTdaMEpCUTNSRUxFMUJRVTBzUlVGQlJTeEZRVUZGTEVsQlFVa3NSVUZCUlN4aFFVRmhMRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVVU3WVVGRE4wTXNRMEZCUXp0WlFVTkdMRzFDUVVGdFFpeERRVUZETzJkQ1FVTnNRaXhYUVVGWExFVkJRVVVzVFVGQlRTeGpRVUZqTERCRFFVRXdRenRoUVVNMVJTeERRVUZETzFOQlEwZ3NRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zYlVKQlFXMUNMRU5CUTJoRExGZEJRV3RETEVWQlEyeERMR05CUVhOQ08xRkJSWFJDTEU5QlFVODdXVUZEVEN4eFFrRkJjVUlzUTBGQlF5eFhRVUZYTEVWQlFVVXNTMEZCU3l4RlFVRkZMSGxDUVVGNVFpeERRVUZETzFsQlEzQkZMRmxCUVZrc1EwRkJRenRuUWtGRFdDeFBRVUZQTEVWQlFVVXNiME5CUVc5RExHTkJRV01zUjBGQlJ6dGhRVU12UkN4RFFVRkRPMWxCUTBZc1VVRkJVU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEZGQlFWRXNSVUZCUlN4WFFVRlhMRVZCUVVVc2JVTkJRVzFETEVWQlFVVXNRMEZCUXp0WlFVTTVSU3hSUVVGUkxFTkJRVU03WjBKQlExQXNTVUZCU1N4RlFVRkZMRTFCUVUwN1owSkJRMW9zVjBGQlZ5eEZRVUZGTEd0RlFVRnJSVHRoUVVOb1JpeERRVUZETzFsQlEwWXNVVUZCVVN4RFFVRkRPMmRDUVVOUUxFbEJRVWtzUlVGQlJTeFhRVUZYTzJkQ1FVTnFRaXhSUVVGUkxFVkJRVVVzU1VGQlNUdG5Ra0ZEWkN4SlFVRkpMRVZCUVVVc1kwRkJZenRuUWtGRGNFSXNWMEZCVnl4RlFVRkZMR2REUVVGblF6dGhRVU01UXl4RFFVRkRPMWxCUTBZc1VVRkJVU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEU5QlFVOHNSVUZCUlN4UlFVRlJMRVZCUVVVc1NVRkJTU3hGUVVGRkxGZEJRVmNzUlVGQlJTeHZRMEZCYjBNc1JVRkJSU3hEUVVGRE8xbEJRemxHTEZGQlFWRXNRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hSUVVGUkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVsQlFVa3NSVUZCUlN4WFFVRlhMRVZCUVVVc2IwTkJRVzlETEVWQlFVVXNRMEZCUXp0WlFVTXZSaXhoUVVGaExFTkJRVU1zUlVGQlJTeFhRVUZYTEVWQlFVVXNSMEZCUnl4alFVRmpMR2RDUVVGblFpeEZRVUZGTEVOQlFVTTdXVUZEYWtVc2JVSkJRVzFDTEVOQlFVTTdaMEpCUTJ4Q0xGZEJRVmNzUlVGQlJTeE5RVUZOTEdOQlFXTXNNRU5CUVRCRE8yRkJRelZGTEVOQlFVTTdVMEZEU0N4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWUExFMUJRVTBzUTBGQlF5d3lRa0ZCTWtJc1EwRkRlRU1zVjBGQmEwTXNSVUZEYkVNc1kwRkJjMElzUlVGRGRFSXNTVUZCV1N4RlFVTmFMRmxCUVc5Q08xRkJSWEJDTEUxQlFVMHNTVUZCU1N4SFFVRjVSRHRaUVVOcVJTeHhRa0ZCY1VJc1EwRkJReXhYUVVGWExFVkJRVVVzUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXp0WlFVTXZReXhaUVVGWkxFTkJRVU1zUlVGQlJTeFBRVUZQTEVWQlFVVXNXVUZCV1N4alFVRmpMRmRCUVZjc1JVRkJSU3hEUVVGRE8xbEJRMmhGTEdGQlFXRXNRMEZCUXl4RlFVRkZMRmRCUVZjc1JVRkJSU3hIUVVGSExHTkJRV01zTUVKQlFUQkNMRVZCUVVVc1EwRkJRenRUUVVNMVJTeERRVUZETzFGQlJVWXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5zUlN4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVTdXVUZEZGtJc1RVRkJUU3hKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGRGJFTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVWQlFVVXNWMEZCVnl4RlFVRkZMRTlCUVU4c1NVRkJTU3haUVVGWkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZEVVc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRlNDeEpRVU5GTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRekZDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1lVRkJZU3hEUVVGRE8xbEJRemxDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRE8xbEJRM2hDTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRM2hDTEVOQlFVTTdXVUZEUkN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVOUUxGRkJRVkVzUTBGQlF6dG5Ra0ZEVUN4SlFVRkpMRVZCUVVVc1YwRkJWenRuUWtGRGFrSXNVVUZCVVN4RlFVRkZMRWxCUVVrN1owSkJRMlFzU1VGQlNTeEZRVUZGTEdOQlFXTTdaMEpCUTNCQ0xGZEJRVmNzUlVGQlJTeG5Ra0ZCWjBJN1lVRkRPVUlzUTBGQlF5eERRVU5JTEVOQlFVTTdVVUZEU2l4RFFVRkRPMUZCUTBRc1NVRkJTU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXp0WlFVTXZSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVU5RTEZGQlFWRXNRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hQUVVGUExFVkJRVVVzVVVGQlVTeEZRVUZGTEV0QlFVc3NSVUZCUlN4WFFVRlhMRVZCUVVVc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGRGRFVXNVVUZCVVN4RFFVRkRMRVZCUVVVc1NVRkJTU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFJRVUZSTEVWQlFVVXNTMEZCU3l4RlFVRkZMRmRCUVZjc1JVRkJSU3hoUVVGaExFVkJRVVVzUTBGQlF5eEZRVU42UlN4UlFVRlJMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzVlVGQlZTeEZRVUZGTEZGQlFWRXNSVUZCUlN4TFFVRkxMRVZCUVVVc1YwRkJWeXhGUVVGRkxHZERRVUZuUXl4RlFVRkZMRU5CUVVNc1EwRkRMMFlzUTBGQlF6dFJRVU5LTEVOQlFVTTdVVUZGUkN4SlFVRkpMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlEyaEZMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRMUFzYlVKQlFXMUNMRU5CUVVNN1owSkJRMnhDTEZkQlFWY3NSVUZCUlN4TlFVRk5MR05CUVdNc01FTkJRVEJETzJGQlF6VkZMRU5CUVVNc1EwRkRTQ3hEUVVGRE8xRkJRMG9zUTBGQlF6dFJRVVZFTEVsQlEwVXNXVUZCV1N4TFFVRkxMSEZDUVVGeFFpeERRVUZETEZGQlFWRTdXVUZETDBNc1dVRkJXU3hMUVVGTExIRkNRVUZ4UWl4RFFVRkRMRTFCUVUwN1dVRkROME1zV1VGQldTeExRVUZMTEhGQ1FVRnhRaXhEUVVGRExFMUJRVTBzUlVGRE4wTXNRMEZCUXp0WlFVTkVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNWMEZCVnl4RlFVRkZMR05CUVdNc1kwRkJZeXhIUVVGSExFVkJRVVVzU1VGQlNTeEZRVUZGTEUxQlFVMHNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNelJpeERRVUZETzFGQlEwUXNTVUZCU1N4WlFVRlpMRXRCUVVzc2NVSkJRWEZDTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1dVRkRka1FzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1JVRkJSU3hYUVVGWExFVkJRVVVzZFVKQlFYVkNMR05CUVdNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM1JITEVOQlFVTTdVVUZGUkN4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlR5eE5RVUZOTEVOQlFVTXNhMEpCUVd0Q0xFTkJReTlDTEZWQlFXdENMRVZCUTJ4Q0xGTkJRV2xDTEVWQlEycENMRkZCUVdkQ0xFVkJRMmhDTEhGQ1FVRTRRaXhMUVVGTE8xRkJSVzVETEUxQlFVMHNhVUpCUVdsQ0xFZEJRVWNzUTBGQlF5eERRVUZUTEVWQlFWa3NSVUZCUlN4RFFVTm9SQ3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSWFpGTEUxQlFVMHNZVUZCWVN4SFFVRkhMR2xDUVVGcFFpeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTm9SU3hKUVVGSk8xbEJRMG9zVjBGQlZ5eEZRVUZGTEVkQlFVY3NTVUZCU1N3d1FrRkJNRUk3V1VGRE9VTXNVVUZCVVN4RlFVRkZMRWxCUVVrN1dVRkRaQ3hKUVVGSkxFVkJRVVVzVFVGQlRUdFRRVU5pTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUlVvc1RVRkJUU3hWUVVGVkxFZEJRWGxFTzFsQlEzWkZMRWRCUVVjc1lVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzaERMRmxCUVZrc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTd3lRa0ZCTWtJc1ZVRkJWU3hKUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU53UlN4aFFVRmhMRU5CUVVNc1JVRkJSU3hYUVVGWExFVkJRVVVzWjBOQlFXZERMRVZCUVVVc1EwRkJRenRaUVVOb1JTeHZRa0ZCYjBJc1EwRkJReXhGUVVGRkxGZEJRVmNzUlVGQlJTeHZRMEZCYjBNc1JVRkJSU3hEUVVGRE8xTkJRelZGTEVOQlFVTTdVVUZGUml4SlFVRkpMRkZCUVZFc1MwRkJTeXhMUVVGTExFbEJRVWtzYTBKQlFXdENMRVZCUVVVc1EwRkJRenRaUVVNM1F5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVTmlMRkZCUVZFc1EwRkJRenRuUWtGRFVDeEpRVUZKTEVWQlFVVXNWMEZCVnp0blFrRkRha0lzVVVGQlVTeEZRVUZGTEV0QlFVczdaMEpCUTJZc1NVRkJTU3hGUVVGRkxHTkJRV003WjBKQlEzQkNMRmRCUVZjc1JVRkJSU3huUTBGQlowTTdZVUZET1VNc1EwRkJReXhGUVVOR0xGRkJRVkVzUTBGQlF5eEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1VVRkJVU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFhRVUZYTEVWQlFVVXNiMEpCUVc5Q0xFVkJRVVVzUTBGQlF5eEZRVU12UlN4UlFVRlJMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzVVVGQlVTeEZRVUZGTEZGQlFWRXNSVUZCUlN4TFFVRkxMRVZCUVVVc1YwRkJWeXhGUVVGRkxHOUNRVUZ2UWl4RlFVRkZMRU5CUVVNc1EwRkRha1lzUTBGQlF6dFJRVU5LTEVOQlFVTTdVVUZGUkN4UFFVRlBMRlZCUVZVc1EwRkJRenRKUVVOd1FpeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhzZ1EyOXVkSEp2Ykd4bGNpd2dVR0Z5WVcwc0lGRjFaWEo1TENCU1pYTndiMjV6WlN3Z1UyVjBUV1YwWVdSaGRHRWdmU0JtY205dElGd2lRRzVsYzNScWN5OWpiMjF0YjI1Y0lqdGNibWx0Y0c5eWRDQjdYRzRnSUVGd2FVSmhaRkpsY1hWbGMzUlNaWE53YjI1elpTeGNiaUFnUVhCcFFtOWtlU3hjYmlBZ1FYQnBRM0psWVhSbFpGSmxjM0J2Ym5ObExGeHVJQ0JCY0dsRmVIUnlZVTF2WkdWc2N5eGNiaUFnUVhCcFRtOURiMjUwWlc1MFVtVnpjRzl1YzJVc1hHNGdJRUZ3YVU1dmRFWnZkVzVrVW1WemNHOXVjMlVzWEc0Z0lFRndhVTlyVW1WemNHOXVjMlVzWEc0Z0lFRndhVTl3WlhKaGRHbHZiaXhjYmlBZ1FYQnBVR0Z5WVcwc1hHNGdJRUZ3YVZGMVpYSjVMRnh1SUNCQmNHbFVZV2R6TEZ4dUlDQkJjR2xWYm5CeWIyTmxjM05oWW14bFJXNTBhWFI1VW1WemNHOXVjMlVzWEc0Z0lHZGxkRk5qYUdWdFlWQmhkR2dzWEc1OUlHWnliMjBnWENKQWJtVnpkR3B6TDNOM1lXZG5aWEpjSWp0Y2JtbHRjRzl5ZENCN1hHNGdJSFI1Y0dVZ1JHbHlaV04wYVc5dVRHbHRhWFJQWm1aelpYUXNYRzRnSUUxdlpHVnNVMlZ5ZG1salpTeGNiaUFnVDNKa1pYSkVhWEpsWTNScGIyNHNYRzRnSUZCbGNuTnBjM1JsYm1ObFMyVjVjeXhjYmlBZ1VISmxjR0Z5WldSVGRHRjBaVzFsYm5STFpYbHpMRnh1SUNCMGVYQmxJRkpsY0c4c1hHNGdJRkpsY0c5emFYUnZjbmtzWEc0Z0lGTmxjblpwWTJVc1hHNTlJR1p5YjIwZ1hDSkFaR1ZqWVdZdGRITXZZMjl5WlZ3aU8xeHVhVzF3YjNKMElIc2dUVzlrWld3c0lFMXZaR1ZzUTI5dWMzUnlkV04wYjNJZ2ZTQm1jbTl0SUZ3aVFHUmxZMkZtTFhSekwyUmxZMjl5WVhSdmNpMTJZV3hwWkdGMGFXOXVYQ0k3WEc1cGJYQnZjblFnZXlCTWIyZG5hVzVuTENCMGIwdGxZbUZpUTJGelpTQjlJR1p5YjIwZ1hDSkFaR1ZqWVdZdGRITXZiRzluWjJsdVoxd2lPMXh1YVcxd2IzSjBJSHRjYmlBZ1FuVnNhME55ZFdSUGNHVnlZWFJwYjI1TFpYbHpMRnh1SUNCRVFrdGxlWE1zWEc0Z0lFOXdaWEpoZEdsdmJrdGxlWE1zWEc0Z0lGWmhiR2xrWVhScGIyNUZjbkp2Y2l4Y2JuMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OWtZaTFrWldOdmNtRjBiM0p6WENJN1hHNXBiWEJ2Y25RZ2V5QkRiMjV6ZEhKMVkzUnZjaXdnVFdWMFlXUmhkR0VnZlNCbWNtOXRJRndpUUdSbFkyRm1MWFJ6TDJSbFkyOXlZWFJwYjI1Y0lqdGNibWx0Y0c5eWRDQjdYRzRnSUVGd2FVOXdaWEpoZEdsdmJrWnliMjFOYjJSbGJDeGNiaUFnUVhCcFVHRnlZVzF6Um5KdmJVMXZaR1ZzTEZ4dUlDQjBlWEJsSUVSbFkyRm1RWEJwVUhKdmNHVnlkSGtzWEc0Z0lFUmxZMkZtUW05a2VTeGNiaUFnUkdWallXWlFZWEpoYlhNc1hHNGdJRVJsWTJGbVVYVmxjbmtzWEc1OUlHWnliMjBnWENJdUwyUmxZMjl5WVhSdmNuTmNJanRjYm1sdGNHOXlkQ0I3SUVoMGRIQldaWEppVkc5RVpXTnZjbUYwYjNJZ2ZTQm1jbTl0SUZ3aUxpOWtaV052Y21GMGIzSnpMM1YwYVd4elhDSTdYRzVwYlhCdmNuUWdkSGx3WlNCN0lFaDBkSEJXWlhKaWN5QjlJR1p5YjIwZ1hDSXVMMlJsWTI5eVlYUnZjbk12ZEhsd1pYTmNJanRjYm1sdGNHOXlkQ0I3SUVSbFkyRm1VbVZ4ZFdWemRFTnZiblJsZUhRZ2ZTQm1jbTl0SUZ3aUxpNHZjbVZ4ZFdWemRGd2lPMXh1YVcxd2IzSjBJSHNnUkVWRFFVWmZRMDlPVkZKUFRFeEZVbDlEVDA1R1NVY3NJRVJGUTBGR1gxSlBWVlJGSUgwZ1puSnZiU0JjSWk0dUwyTnZibk4wWVc1MGMxd2lPMXh1YVcxd2IzSjBJSHNnVTB0SlVGOU5UMFJGVEY5U1QweEZVMTlMUlZrZ2ZTQm1jbTl0SUZ3aUxpNHZZWFYwYUM5amIyNXpkR0Z1ZEhOY0lqdGNibWx0Y0c5eWRDQjdJRUYxZEdnc0lGQjFZbXhwWXl3Z1VtVnhkV2x5WlZKdmJHVnpJSDBnWm5KdmJTQmNJaTR1TDJGMWRHZ3ZaR1ZqYjNKaGRHOXljMXdpTzF4dWFXMXdiM0owSUhzZ1EyOXVkSEp2Ykd4bGNrTnZibk4wY25WamRHOXlJSDBnWm5KdmJTQmNJaTR2ZEhsd1pYTmNJanRjYm1sdGNHOXlkQ0I3SUVSbFkyRm1UVzlrWld4RGIyNTBjbTlzYkdWeUlIMGdabkp2YlNCY0lpNHVMMk52Ym5SeWIyeHNaWEp6WENJN1hHNXBiWEJ2Y25RZ2V5QkVkRzlHYjNJZ2ZTQm1jbTl0SUZ3aUxpNHZabUZqZEc5eWVTOXZjR1Z1WVhCcEwwUjBiMEoxYVd4a1pYSmNJanRjYm1sdGNHOXlkQ0JjSWk0dUwyOTJaWEp5YVdSbGMxd2lPMXh1YVcxd2IzSjBJSHRjYmlBZ1RXOWtaV3hEYjI1MGNtOXNiR1Z5Um1GamRHOXllU3hjYmlBZ2RIbHdaU0JOYjJSbGJFTnZiblJ5YjJ4c1pYSkdZV04wYjNKNVEyOXVabWxuTEZ4dUlDQjBlWEJsSUVGMWRHaERiMjVtYVdjc1hHNGdJSFI1Y0dVZ1UyVnlkbVZ5VW05MWRHVXNYRzU5SUdaeWIyMGdYQ0pBWkdWallXWXRkSE12Wm05eUxXaDBkSEF2YzJWeWRtVnlYQ0k3WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5SUh0Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ2NtVmhaRzl1YkhrZ2JHOW5JRDBnVEc5bloybHVaeTVtYjNJb1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNXVZVzFsS1R0Y2JseHVJQ0J6ZEdGMGFXTWdaMlYwVUdWeWMybHpkR1Z1WTJVOFZDQmxlSFJsYm1SeklFMXZaR1ZzUEdKdmIyeGxZVzQrUGloY2JpQWdJQ0JOYjJSbGJFTnNZWHA2T2lCTmIyUmxiRU52Ym5OMGNuVmpkRzl5UEZRK1hHNGdJQ2s2SUZKbGNHODhWRDRnZkNCTmIyUmxiRk5sY25acFkyVThWRDRnZTF4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnVTJWeWRtbGpaUzVuWlhROFRXOWtaV3hUWlhKMmFXTmxQRlErUGloTmIyUmxiRU5zWVhwNktUdGNiaUFnSUNCOUlHTmhkR05vSUNobE9pQjFibXR1YjNkdUtTQjdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVFc5a1pXeFRaWEoyYVdObExtZGxkRk5sY25acFkyVW9UVzlrWld4RGJHRjZlaWtnWVhNZ1RXOWtaV3hUWlhKMmFXTmxQRlErTzF4dUlDQWdJQ0FnZlNCallYUmphQ0FvWlRJNklIVnVhMjV2ZDI0cElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlGSmxjRzl6YVhSdmNua3VabTl5VFc5a1pXd29UVzlrWld4RGJHRjZlaWtnWVhNZ1VtVndienhVUGp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWTNKbFlYUmxVWFZsY25sU2IzVjBaWE5HY205dFVtVndiM05wZEc5eWVUeFVJR1Y0ZEdWdVpITWdUVzlrWld3OFltOXZiR1ZoYmo0K0tGeHVJQ0FnSUhCbGNuTnBjM1JsYm1ObE9pQlNaWEJ2UEZRK0lId2dUVzlrWld4VFpYSjJhV05sUEZRK0xGeHVJQ0FnSUhCeVpXWnBlRG9nYzNSeWFXNW5JRDBnVUdWeWMybHpkR1Z1WTJWTFpYbHpMbEZWUlZKWlhHNGdJQ2s2SUVOdmJuUnliMnhzWlhKRGIyNXpkSEoxWTNSdmNqeFVQaUI3WEc0Z0lDQWdZMjl1YzNRZ2NtVndiem9nVW1Wd2J6eFVQaUE5WEc0Z0lDQWdJQ0J3WlhKemFYTjBaVzVqWlNCcGJuTjBZVzVqWlc5bUlFMXZaR1ZzVTJWeWRtbGpaU0EvSUhCbGNuTnBjM1JsYm1ObExuSmxjRzhnT2lCd1pYSnphWE4wWlc1alpUdGNiaUFnSUNCamIyNXpkQ0JOYjJSbGJFTnZibk4wY2pvZ1EyOXVjM1J5ZFdOMGIzSWdQU0J5WlhCdkxtTnNZWE56TzF4dUlDQWdJR052Ym5OMElIRjFaWEo1VFdWMGFHOWtjem9nVW1WamIzSmtQSE4wY21sdVp5d2dleUJtYVdWc1pITS9PaUJ6ZEhKcGJtZGJYU0I4SUhWdVpHVm1hVzVsWkNCOVBpQTlYRzRnSUNBZ0lDQk5aWFJoWkdGMFlTNW5aWFFvWEc0Z0lDQWdJQ0FnSUhKbGNHOHVZMjl1YzNSeWRXTjBiM0lnWVhNZ1EyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJRTFsZEdGa1lYUmhMbXRsZVNoUVpYSnphWE4wWlc1alpVdGxlWE11VVZWRlVsa3BYRzRnSUNBZ0lDQXBJRDgvSUh0OU8xeHVYRzRnSUNBZ1kyOXVjM1FnY205MWRHVk5aWFJvYjJSek9pQlNaV052Y21ROGMzUnlhVzVuTENCaGJuaytJRDFjYmlBZ0lDQWdJRTFsZEdGa1lYUmhMbWRsZENoY2JpQWdJQ0FnSUNBZ2NHVnljMmx6ZEdWdVkyVXVZMjl1YzNSeWRXTjBiM0lnWVhNZ1EyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJRTFsZEdGa1lYUmhMbXRsZVNoRVJVTkJSbDlTVDFWVVJTbGNiaUFnSUNBZ0lDa2dQejhnZTMwN1hHNWNiaUFnSUNCamJHRnpjeUJSZFdWeWVVTnZiblJ5YjJ4c1pYSWdaWGgwWlc1a2N5QkVaV05oWmsxdlpHVnNRMjl1ZEhKdmJHeGxjanhVUGlCN1hHNGdJQ0FnSUNCdmRtVnljbWxrWlNCblpYUWdZMnhoYzNNb0tUb2dUVzlrWld4RGIyNXpkSEoxWTNSdmNqeFVQaUI3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWsxbGRHaHZaQ0J1YjNRZ2FXMXdiR1Z0Wlc1MFpXUXVYQ0lwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTI5dWMzUnlkV04wYjNJb1kyeHBaVzUwUTI5dWRHVjRkRG9nUkdWallXWlNaWEYxWlhOMFEyOXVkR1Y0ZEN3Z2JtRnRaVG9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUhOMWNHVnlLR05zYVdWdWRFTnZiblJsZUhRc0lHNWhiV1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnVzIxbGRHaHZaRTVoYldVc0lIQmhjbUZ0YzEwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb2NtOTFkR1ZOWlhSb2IyUnpLU2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjbTkxZEdWUVlYUm9JRDBnVzNCaGNtRnRjeTV3WVhSb0xuSmxjR3hoWTJVb0wxNWNYQzhyZkZ4Y0x5c2tMMmNzSUZ3aVhDSXBYVnh1SUNBZ0lDQWdJQ0F1Wm1sc2RHVnlLQ2h6WldkdFpXNTBPaUJ6ZEhKcGJtY3BJRDArSUhObFoyMWxiblFnSmlZZ2MyVm5iV1Z1ZEM1MGNtbHRLQ2twWEc0Z0lDQWdJQ0FnSUM1cWIybHVLRndpTDF3aUtUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2FHRnVaR3hsY2lBOUlFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZM0psWVhSbFEyOXRjR3hsZUZGMVpYSjVTR0Z1Wkd4bGNpaGNiaUFnSUNBZ0lDQWdiV1YwYUc5a1RtRnRaVnh1SUNBZ0lDQWdLU0JoY3lCaGJuazdYRzRnSUNBZ0lDQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbVJsWm1sdVpVMWxkR2h2WkNoY2JpQWdJQ0FnSUNBZ1VYVmxjbmxEYjI1MGNtOXNiR1Z5TEZ4dUlDQWdJQ0FnSUNCdFpYUm9iMlJPWVcxbExGeHVJQ0FnSUNBZ0lDQm9ZVzVrYkdWeVhHNGdJQ0FnSUNBcE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCb2RIUndSR1ZqYjNKaGRHOXlJRDBnU0hSMGNGWmxjbUpVYjBSbFkyOXlZWFJ2Y2lod1lYSmhiWE11YUhSMGNFMWxkR2h2WkNCaGN5QklkSFJ3Vm1WeVluTXBLSEp2ZFhSbFVHRjBhQ0I4ZkNCMWJtUmxabWx1WldRcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWkdWamIzSmhkRzl5Y3lBOUlFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVaMlYwVVhWbGNubEVaV052Y21GMGIzSnpLRnh1SUNBZ0lDQWdJQ0J0WlhSb2IyUk9ZVzFsTEZ4dUlDQWdJQ0FnSUNCeWIzVjBaVkJoZEdnc1hHNGdJQ0FnSUNBZ0lIQmhjbUZ0Y3k1b2RIUndUV1YwYUc5a1hHNGdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWhjSEJzZVVSbFkyOXlZWFJ2Y25Nb1hHNGdJQ0FnSUNBZ0lGRjFaWEo1UTI5dWRISnZiR3hsY2l4Y2JpQWdJQ0FnSUNBZ2JXVjBhRzlrVG1GdFpTeGNiaUFnSUNBZ0lDQWdXMmgwZEhCRVpXTnZjbUYwYjNJc0lDNHVMbVJsWTI5eVlYUnZjbk5kWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnVzIxbGRHaHZaRTVoYldVc0lHOWlhbFpoYkhWbGMxMGdiMllnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9jWFZsY25sTlpYUm9iMlJ6S1NrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWm1sbGJHUnpJRDBnYjJKcVZtRnNkV1Z6TG1acFpXeGtjeUEvUHlCYlhUdGNiaUFnSUNBZ0lHTnZibk4wSUhKdmRYUmxVR0YwYUNBOUlGdHdjbVZtYVhnc0lHMWxkR2h2WkU1aGJXVXNJQzR1TG1acFpXeGtjeTV0WVhBb0tHWXBJRDArSUdBNkpIdG1mV0FwWFZ4dUlDQWdJQ0FnSUNBdVptbHNkR1Z5S0NoelpXZHRaVzUwS1NBOVBpQnpaV2R0Wlc1MElDWW1JSE5sWjIxbGJuUXVkSEpwYlNncEtWeHVJQ0FnSUNBZ0lDQXVhbTlwYmloY0lpOWNJaWs3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR2hoYm1Sc1pYSWdQU0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1OeVpXRjBaVU52YlhCc1pYaFJkV1Z5ZVVoaGJtUnNaWElvWEc0Z0lDQWdJQ0FnSUcxbGRHaHZaRTVoYldWY2JpQWdJQ0FnSUNrZ1lYTWdZVzU1TzF4dUlDQWdJQ0FnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1a1pXWnBibVZOWlhSb2IyUW9YRzRnSUNBZ0lDQWdJRkYxWlhKNVEyOXVkSEp2Ykd4bGNpeGNiaUFnSUNBZ0lDQWdiV1YwYUc5a1RtRnRaU3hjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjbHh1SUNBZ0lDQWdLVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdhSFIwY0VSbFkyOXlZWFJ2Y2lBOUlFaDBkSEJXWlhKaVZHOUVaV052Y21GMGIzSW9YQ0pIUlZSY0lpQmhjeUJJZEhSd1ZtVnlZbk1wS0hKdmRYUmxVR0YwYUNCOGZDQjFibVJsWm1sdVpXUXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHVmpiM0poZEc5eWN5QTlJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WjJWMFVYVmxjbmxFWldOdmNtRjBiM0p6S0Z4dUlDQWdJQ0FnSUNCdFpYUm9iMlJPWVcxbExGeHVJQ0FnSUNBZ0lDQnliM1YwWlZCaGRHZ3NYRzRnSUNBZ0lDQWdJRndpUjBWVVhDSXNYRzRnSUNBZ0lDQWdJSFJ5ZFdWY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtRndjR3g1UkdWamIzSmhkRzl5Y3loY2JpQWdJQ0FnSUNBZ1VYVmxjbmxEYjI1MGNtOXNiR1Z5TEZ4dUlDQWdJQ0FnSUNCdFpYUm9iMlJPWVcxbExGeHVJQ0FnSUNBZ0lDQmJhSFIwY0VSbFkyOXlZWFJ2Y2l3Z0xpNHVaR1ZqYjNKaGRHOXljMTFjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlGRjFaWEo1UTI5dWRISnZiR3hsY2p0Y2JpQWdmVnh1WEc0Z0lITjBZWFJwWXlCamNtVmhkR1U4VkNCbGVIUmxibVJ6SUUxdlpHVnNQR0Z1ZVQ0K0tGeHVJQ0FnSUUxdlpHVnNRMjl1YzNSeU9pQk5iMlJsYkVOdmJuTjBjblZqZEc5eVBGUStMRnh1SUNBZ0lHMXZaSFZzWlVOdmJtWnBaMDkyWlhKeWFXUmxjejg2SUZKbFkyOXlaRHh6ZEhKcGJtY3NJRTF2WkdWc1EyOXVkSEp2Ykd4bGNrWmhZM1J2Y25sRGIyNW1hV2MrTEZ4dUlDQWdJR2RzYjJKaGJFUmxabUYxYkhSelB6b2dVR0Z5ZEdsaGJEeE5iMlJsYkVOdmJuUnliMnhzWlhKR1lXTjBiM0o1UTI5dVptbG5QbHh1SUNBcE9pQkRiMjUwY205c2JHVnlRMjl1YzNSeWRXTjBiM0k4VkQ0Z2UxeHVJQ0FnSUdOdmJuTjBJR3h2WnlBOUlFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXViRzluTG1admNpaEdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbU55WldGMFpTazdYRzRnSUNBZ1kyOXVjM1FnZEdGaWJHVk9ZVzFsSUQwZ1RXOWtaV3d1ZEdGaWJHVk9ZVzFsS0UxdlpHVnNRMjl1YzNSeUtUdGNiaUFnSUNCamIyNXpkQ0J5YjNWMFpWQmhkR2dnUFNCMGIwdGxZbUZpUTJGelpTaDBZV0pzWlU1aGJXVXBPMXh1SUNBZ0lHTnZibk4wSUcxdlpHVnNRMnhoZW5wT1lXMWxJRDBnVFc5a1pXeERiMjV6ZEhJdWJtRnRaVHRjYmlBZ0lDQmpiMjV6ZENCd1pYSnphWE4wWlc1alpTQTlJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WjJWMFVHVnljMmx6ZEdWdVkyVW9UVzlrWld4RGIyNXpkSElwTzF4dVhHNGdJQ0FnTHk4Z1YyaGxiaUJ3WlhKemFYTjBaVzVqWlNCcGN5QmhJRTF2WkdWc1UyVnlkbWxqWlN3Z2RHaGxJRUJ4ZFdWeWVTOUFjbTkxZEdVZ2JXVjBZV1JoZEdFZ2JHbDJaWE1nYjI1Y2JpQWdJQ0F2THlCMGFHVWdkVzVrWlhKc2VXbHVaeUJ5WlhCdmMybDBiM0o1SUdOc1lYTnpJQ2hqZFhOMGIyMGdjbVZ3Ynlrc0lHNXZkQ0J2YmlCTmIyUmxiRk5sY25acFkyVWdhWFJ6Wld4bUxseHVJQ0FnSUM4dklGQmhjM01nZEdobElISmxjRzhnZEc4Z2RHaGxJR1poWTNSdmNua2djMjhnWVdSa1EyOXRjR3hsZUZGMVpYSnBaWE1vS1NCallXNGdaR2x6WTI5MlpYSWdkR2hsYlM1Y2JpQWdJQ0JqYjI1emRDQm1ZV04wYjNKNVVHVnljMmx6ZEdWdVkyVWdQVnh1SUNBZ0lDQWdjR1Z5YzJsemRHVnVZMlVnYVc1emRHRnVZMlZ2WmlCTmIyUmxiRk5sY25acFkyVWdQeUJ3WlhKemFYTjBaVzVqWlM1eVpYQnZJRG9nY0dWeWMybHpkR1Z1WTJVN1hHNWNiaUFnSUNCamIyNXpkQ0JrWldOdmNtRjBiM0pEYjI1bWFXY2dQU0JOWlhSaFpHRjBZUzVuWlhRb1hHNGdJQ0FnSUNCTmIyUmxiRU52Ym5OMGNpeGNiaUFnSUNBZ0lFMWxkR0ZrWVhSaExtdGxlU2hFUlVOQlJsOURUMDVVVWs5TVRFVlNYME5QVGtaSlJ5bGNiaUFnSUNBcElHRnpJRTF2WkdWc1EyOXVkSEp2Ykd4bGNrWmhZM1J2Y25sRGIyNW1hV2NnZkNCMWJtUmxabWx1WldRN1hHNGdJQ0FnWTI5dWMzUWdiVzlrZFd4bFQzWmxjbkpwWkdVZ1BTQnRiMlIxYkdWRGIyNW1hV2RQZG1WeWNtbGtaWE0vTGx0TmIyUmxiRU52Ym5OMGNpNXVZVzFsWFR0Y2JpQWdJQ0JqYjI1emRDQnRaWEpuWldSRGIyNW1hV2M2SUUxdlpHVnNRMjl1ZEhKdmJHeGxja1poWTNSdmNubERiMjVtYVdjZ1BTQjdYRzRnSUNBZ0lDQXVMaTRvWjJ4dlltRnNSR1ZtWVhWc2RITWdmSHdnZTMwcExGeHVJQ0FnSUNBZ0xpNHVLR1JsWTI5eVlYUnZja052Ym1acFp5QjhmQ0I3ZlNrc1hHNGdJQ0FnSUNBdUxpNG9iVzlrZFd4bFQzWmxjbkpwWkdVZ2ZId2dlMzBwTEZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JqYjI1emRDQkdZV04wYjNKNVEyOXVkSEp2Ykd4bGNpQTlJRTF2WkdWc1EyOXVkSEp2Ykd4bGNrWmhZM1J2Y25rdVkzSmxZWFJsUEZRK0tGeHVJQ0FnSUNBZ1RXOWtaV3hEYjI1emRISXNYRzRnSUNBZ0lDQm1ZV04wYjNKNVVHVnljMmx6ZEdWdVkyVXNYRzRnSUNBZ0lDQnRaWEpuWldSRGIyNW1hV2RjYmlBZ0lDQXBPMXh1SUNBZ0lHTnZibk4wSUdaaFkzUnZjbmxTYjNWMFpYTWdQU0FvUm1GamRHOXllVU52Ym5SeWIyeHNaWElnWVhNZ1lXNTVLUzVmWDNKdmRYUmxjMTlmSUdGelhHNGdJQ0FnSUNCOElGTmxjblpsY2xKdmRYUmxXMTFjYmlBZ0lDQWdJSHdnZFc1a1pXWnBibVZrTzF4dVhHNGdJQ0FnWTI5dWMzUWdleUJuWlhSUVN5d2dZWEJwVUhKdmNHVnlkR2xsY3l3Z2NHRjBhRG9nY0d0UVlYUm9JSDBnUFZ4dUlDQWdJQ0FnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1blpYUlNiM1YwWlZCaGNtRnRaWFJsY25OR2NtOXRUVzlrWld3b1RXOWtaV3hEYjI1emRISXBPMXh1WEc0Z0lDQWdiRzluTG1SbFluVm5LRnh1SUNBZ0lDQWdZRU55WldGMGFXNW5JR052Ym5SeWIyeHNaWElnWm05eUlHMXZaR1ZzT2lBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlNCM2FYUm9JQ1I3Wm1GamRHOXllVkp2ZFhSbGN6OHViR1Z1WjNSb0lEOC9JREI5SUdaaFkzUnZjbmtnY205MWRHVnpZRnh1SUNBZ0lDazdYRzVjYmlBZ0lDQmpiMjV6ZENCaGRYUm9RMjl1Wm1sbk9pQkJkWFJvUTI5dVptbG5JSHdnZFc1a1pXWnBibVZrSUQwZ2JXVnlaMlZrUTI5dVptbG5MbUYxZEdnN1hHNWNiaUFnSUNCbWRXNWpkR2x2YmlCaGNIQnNlVU5zWVhOelFYVjBhQ2gwWVhKblpYUTZJR0Z1ZVNrZ2UxeHVJQ0FnSUNBZ2FXWWdLR0YxZEdoRGIyNW1hV2MvTG5CMVlteHBZeWtnZTF4dUlDQWdJQ0FnSUNCUWRXSnNhV01vS1NoMFlYSm5aWFFwTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoaGRYUm9RMjl1Wm1sblB5NXliMnhsY3o4dWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNBZ0lGSmxjWFZwY21WU2IyeGxjeWd1TGk1aGRYUm9RMjl1Wm1sbkxuSnZiR1Z6S1NoMFlYSm5aWFFwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnUVhWMGFDaE5iMlJsYkVOdmJuTjBjaWtvZEdGeVoyVjBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoaGRYUm9RMjl1Wm1sblB5NXphMmx3VFc5a1pXeFNiMnhsY3lrZ2UxeHVJQ0FnSUNBZ0lDQlRaWFJOWlhSaFpHRjBZU2hUUzBsUVgwMVBSRVZNWDFKUFRFVlRYMHRGV1N3Z2RISjFaU2tvZEdGeVoyVjBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQkFRMjl1ZEhKdmJHeGxjaWh5YjNWMFpWQmhkR2dwWEc0Z0lDQWdRRUZ3YVZSaFozTW9iVzlrWld4RGJHRjZlazVoYldVcFhHNGdJQ0FnUUVGd2FVVjRkSEpoVFc5a1pXeHpLRTF2WkdWc1EyOXVjM1J5S1Z4dUlDQWdJR05zWVhOeklFUjVibUZ0YVdOTmIyUmxiRU52Ym5SeWIyeHNaWElnWlhoMFpXNWtjeUJFWldOaFprMXZaR1ZzUTI5dWRISnZiR3hsY2p4VVBpQjdYRzRnSUNBZ0lDQndjbWwyWVhSbElISmxZV1J2Ym14NUlIQnJPaUJ6ZEhKcGJtY2dQU0JOYjJSbGJDNXdheWhOYjJSbGJFTnZibk4wY2lrZ1lYTWdjM1J5YVc1bk8xeHVYRzRnSUNBZ0lDQndjbTkwWldOMFpXUWdjM1JoZEdsaklHZGxkQ0JqYkdGemN5Z3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRTF2WkdWc1EyOXVjM1J5TzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCdmRtVnljbWxrWlNCblpYUWdZMnhoYzNNb0tUb2dUVzlrWld4RGIyNXpkSEoxWTNSdmNqeFVQaUI3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJOYjJSbGJFTnZibk4wY2p0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1kyOXVjM1J5ZFdOMGIzSW9ZMnhwWlc1MFEyOXVkR1Y0ZERvZ1JHVmpZV1pTWlhGMVpYTjBRMjl1ZEdWNGRDa2dlMXh1SUNBZ0lDQWdJQ0J6ZFhCbGNpaGpiR2xsYm5SRGIyNTBaWGgwTENCRWVXNWhiV2xqVFc5a1pXeERiMjUwY205c2JHVnlMbTVoYldVcE8xeHVJQ0FnSUNBZ0lDQnNiMmN1YVc1bWJ5aGNiaUFnSUNBZ0lDQWdJQ0JnVW1WbmFYTjBaWEpwYm1jZ1pIbHVZVzFwWXlCamIyNTBjbTlzYkdWeUlHWnZjaUJ0YjJSbGJEb2dKSHQwYUdsekxtTnNZWE56TG01aGJXVjlJSEp2ZFhSbE9pQXZKSHR5YjNWMFpWQmhkR2g5WUZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdGd2NHeDVRMnhoYzNOQmRYUm9LRVI1Ym1GdGFXTk5iMlJsYkVOdmJuUnliMnhzWlhJcE8xeHVYRzRnSUNBZ2FXWWdLR1poWTNSdmNubFNiM1YwWlhNcElIdGNiaUFnSUNBZ0lHTnZibk4wSUhOdmNuUmxaRkp2ZFhSbGN5QTlJRnN1TGk1bVlXTjBiM0o1VW05MWRHVnpYUzV6YjNKMEtDaGhMQ0JpS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHRlRaV2R0Wlc1MGN5QTlJR0V1Y0dGMGFDNXpjR3hwZENoY0lpOWNJaWt1Wm1sc2RHVnlLRUp2YjJ4bFlXNHBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmlVMlZuYldWdWRITWdQU0JpTG5CaGRHZ3VjM0JzYVhRb1hDSXZYQ0lwTG1acGJIUmxjaWhDYjI5c1pXRnVLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZVkJoY21GdFEyOTFiblFnUFNCaFUyVm5iV1Z1ZEhNdVptbHNkR1Z5S0NoektTQTlQaUJ6TG5OMFlYSjBjMWRwZEdnb1hDSTZYQ0lwS1M1c1pXNW5kR2c3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0pRWVhKaGJVTnZkVzUwSUQwZ1lsTmxaMjFsYm5SekxtWnBiSFJsY2lnb2N5a2dQVDRnY3k1emRHRnlkSE5YYVhSb0tGd2lPbHdpS1NrdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JoVEdsMFpYSmhiRU52ZFc1MElEMGdZVk5sWjIxbGJuUnpMbXhsYm1kMGFDQXRJR0ZRWVhKaGJVTnZkVzUwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0JpVEdsMFpYSmhiRU52ZFc1MElEMGdZbE5sWjIxbGJuUnpMbXhsYm1kMGFDQXRJR0pRWVhKaGJVTnZkVzUwTzF4dUlDQWdJQ0FnSUNCcFppQW9ZVXhwZEdWeVlXeERiM1Z1ZENBaFBUMGdZa3hwZEdWeVlXeERiM1Z1ZENsY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lreHBkR1Z5WVd4RGIzVnVkQ0F0SUdGTWFYUmxjbUZzUTI5MWJuUTdYRzRnSUNBZ0lDQWdJR2xtSUNoaFVHRnlZVzFEYjNWdWRDQWhQVDBnWWxCaGNtRnRRMjkxYm5RcFhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHRlFZWEpoYlVOdmRXNTBJQzBnWWxCaGNtRnRRMjkxYm5RN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlBd08xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQm1iM0lnS0dOdmJuTjBJSEp2ZFhSbElHOW1JSE52Y25SbFpGSnZkWFJsY3lrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCeVpXZHBjM1J5WVhScGIyNGdQU0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG0xaGRHTm9VbTkxZEdVb1hHNGdJQ0FnSUNBZ0lDQWdjbTkxZEdVc1hHNGdJQ0FnSUNBZ0lDQWdjR3RRWVhSb0xGeHVJQ0FnSUNBZ0lDQWdJR0Z3YVZCeWIzQmxjblJwWlhNc1hHNGdJQ0FnSUNBZ0lDQWdaMlYwVUVzc1hHNGdJQ0FnSUNBZ0lDQWdUVzlrWld4RGIyNXpkSElzWEc0Z0lDQWdJQ0FnSUNBZ2JXOWtaV3hEYkdGNmVrNWhiV1VzWEc0Z0lDQWdJQ0FnSUNBZ1ptRmpkRzl5ZVZCbGNuTnBjM1JsYm1ObFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQWdJR2xtSUNnaGNtVm5hWE4wY21GMGFXOXVLU0JqYjI1MGFXNTFaVHRjYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3SUcxbGRHaHZaRTVoYldVc0lHaGhibVJzWlhJc0lHUmxZMjl5WVhSdmNuTXNJSEJoY21GdFJHVmpiM0poZEc5eWN5QjlJRDFjYmlBZ0lDQWdJQ0FnSUNCeVpXZHBjM1J5WVhScGIyNDdYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaR1Z6WTNKcGNIUnZjaUE5SUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVpHVm1hVzVsVFdWMGFHOWtLRnh1SUNBZ0lDQWdJQ0FnSUVSNWJtRnRhV05OYjJSbGJFTnZiblJ5YjJ4c1pYSXNYRzRnSUNBZ0lDQWdJQ0FnYldWMGFHOWtUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQm9ZVzVrYkdWeVhHNGdJQ0FnSUNBZ0lDazdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHUmxjMk55YVhCMGIzSXBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JvZEhSd1JHVmpiM0poZEc5eUlEMGdTSFIwY0ZabGNtSlViMFJsWTI5eVlYUnZjaWh5YjNWMFpTNXRaWFJvYjJRZ1lYTWdTSFIwY0ZabGNtSnpLU2hjYmlBZ0lDQWdJQ0FnSUNBZ0lISnZkWFJsTG5CaGRHZ3VjbVZ3YkdGalpTZ3ZYbHhjTHl0OFhGd3ZLeVF2Wnl3Z1hDSmNJaWtnZkh3Z2RXNWtaV1pwYm1Wa1hHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtRndjR3g1UkdWamIzSmhkRzl5Y3loY2JpQWdJQ0FnSUNBZ0lDQWdJRVI1Ym1GdGFXTk5iMlJsYkVOdmJuUnliMnhzWlhJc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WlhSb2IyUk9ZVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdXMmgwZEhCRVpXTnZjbUYwYjNJc0lDNHVMbVJsWTI5eVlYUnZjbk5kTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjR0Z5WVcxRVpXTnZjbUYwYjNKelhHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQkVlVzVoYldsalRXOWtaV3hEYjI1MGNtOXNiR1Z5SUdGeklHRnVlVHRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUJuWlhSU2IzVjBaVkJoY21GdFpYUmxjbk5HY205dFRXOWtaV3c4VkNCbGVIUmxibVJ6SUUxdlpHVnNQR0Z1ZVQ0K0tGeHVJQ0FnSUUxdlpHVnNRMnhoZW5vNklFMXZaR1ZzUTI5dWMzUnlkV04wYjNJOFZENWNiaUFnS1RvZ2UxeHVJQ0FnSUhCaGRHZzZJSE4wY21sdVp6dGNiaUFnSUNCa1pYTmpjbWx3ZEdsdmJqb2djM1J5YVc1bk8xeHVJQ0FnSUdGd2FWQnliM0JsY25ScFpYTTZJRVJsWTJGbVFYQnBVSEp2Y0dWeWRIbGJYVHRjYmlBZ0lDQm5aWFJRU3pvZ0tDNHVMbkJoY21GdGN6b2dRWEp5WVhrOGMzUnlhVzVuSUh3Z2JuVnRZbVZ5UGlrZ1BUNGdjM1J5YVc1bk8xeHVJQ0I5SUh0Y2JpQWdJQ0JqYjI1emRDQndheUE5SUUxdlpHVnNMbkJyS0UxdlpHVnNRMnhoZW5vcElHRnpJR3RsZVc5bUlFMXZaR1ZzUEdGdWVUNDdYRzRnSUNBZ1kyOXVjM1FnWTI5dGNHOXpaV1FnUFNCTlpYUmhaR0YwWVM1blpYUW9YRzRnSUNBZ0lDQk5iMlJsYkVOc1lYcDZMRnh1SUNBZ0lDQWdUV1YwWVdSaGRHRXVhMlY1S0VSQ1MyVjVjeTVEVDAxUVQxTkZSQ3dnY0dzcFhHNGdJQ0FnS1R0Y2JpQWdJQ0JqYjI1emRDQmpiMjF3YjNObFpFdGxlWE1nUFNCamIyMXdiM05sWkQ4dVlYSm5jeUEvUHlCYlhUdGNibHh1SUNBZ0lHTnZibk4wSUhWdWFYRjFaVXRsZVhNZ1BWeHVJQ0FnSUNBZ1FYSnlZWGt1YVhOQmNuSmhlU2hqYjIxd2IzTmxaRXRsZVhNcElDWW1JR052YlhCdmMyVmtTMlY1Y3k1c1pXNW5kR2dnUGlBd1hHNGdJQ0FnSUNBZ0lEOGdRWEp5WVhrdVpuSnZiU2h1WlhjZ1UyVjBLRnN1TGk1amIyMXdiM05sWkV0bGVYTmRLU2xjYmlBZ0lDQWdJQ0FnT2lCQmNuSmhlUzVtY205dEtHNWxkeUJUWlhRb1czQnJYU2twTzF4dVhHNGdJQ0FnWTI5dWMzUWdaR1Z6WTNKcGNIUnBiMjRnUFNCTlpYUmhaR0YwWVM1a1pYTmpjbWx3ZEdsdmJpaE5iMlJsYkVOc1lYcDZLU0EvUHlCY0lsd2lPMXh1SUNBZ0lHTnZibk4wSUhCaGRHZ2dQU0JnT2lSN2RXNXBjWFZsUzJWNWN5NXFiMmx1S0Z3aUx6cGNJaWw5WUR0Y2JpQWdJQ0JqYjI1emRDQmhjR2xRY205d1pYSjBhV1Z6T2lCRVpXTmhaa0Z3YVZCeWIzQmxjblI1VzEwZ1BTQjFibWx4ZFdWTFpYbHpMbTFoY0Nnb2EyVjVLU0E5UGlCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNCdVlXMWxPaUJyWlhrc1hHNGdJQ0FnSUNBZ0lHUmxjMk55YVhCMGFXOXVPaUJOWlhSaFpHRjBZUzVrWlhOamNtbHdkR2x2YmloTmIyUmxiRU5zWVhwNkxDQnJaWGtwTEZ4dUlDQWdJQ0FnSUNCeVpYRjFhWEpsWkRvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnZEhsd1pUb2dVM1J5YVc1bkxGeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOUtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNCd1lYUm9MRnh1SUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjRzWEc0Z0lDQWdJQ0JoY0dsUWNtOXdaWEowYVdWekxGeHVJQ0FnSUNBZ1oyVjBVRXM2SUNndUxpNXdZWEpoYlhNNklFRnljbUY1UEhOMGNtbHVaeUI4SUc1MWJXSmxjajRwSUQwK1hHNGdJQ0FnSUNBZ0lHTnZiWEJ2YzJWa1B5NXpaWEJoY21GMGIzSWdQeUJ3WVhKaGJYTXVhbTlwYmloamIyMXdiM05sWkM1elpYQmhjbUYwYjNJcElEb2djR0Z5WVcxekxtcHZhVzRvWENKY0lpa3NYRzRnSUNBZ2ZUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHUmxabWx1WlUxbGRHaHZaQ2hjYmlBZ0lDQjBZWEpuWlhRNklHRnVlU3hjYmlBZ0lDQnRaWFJvYjJST1lXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2FHRnVaR3hsY2pvZ0tDNHVMbUZ5WjNNNklHRnVlVnRkS1NBOVBpQmhibmxjYmlBZ0tUb2dVSEp2Y0dWeWRIbEVaWE5qY21sd2RHOXlJSHdnZFc1a1pXWnBibVZrSUh0Y2JpQWdJQ0JQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb1hHNGdJQ0FnSUNCMFlYSm5aWFF1Y0hKdmRHOTBlWEJsSUh4OElIUmhjbWRsZEN4Y2JpQWdJQ0FnSUcxbGRHaHZaRTVoYldVc1hHNGdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lIWmhiSFZsT2lCb1lXNWtiR1Z5TEZ4dUlDQWdJQ0FnSUNCM2NtbDBZV0pzWlRvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUdOdmJtWnBaM1Z5WVdKc1pUb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1pXNTFiV1Z5WVdKc1pUb2dabUZzYzJVc1hHNGdJQ0FnSUNCOVhHNGdJQ0FnS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJQWW1wbFkzUXVaMlYwVDNkdVVISnZjR1Z5ZEhsRVpYTmpjbWx3ZEc5eUtGeHVJQ0FnSUNBZ2RHRnlaMlYwTG5CeWIzUnZkSGx3WlNCOGZDQjBZWEpuWlhRc1hHNGdJQ0FnSUNCdFpYUm9iMlJPWVcxbFhHNGdJQ0FnS1R0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdGd2NHeDVSR1ZqYjNKaGRHOXljeWhjYmlBZ0lDQjBZWEpuWlhRNklHRnVlU3hjYmlBZ0lDQnRaWFJvYjJST1lXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2JXVjBhRzlrUkdWamIzSmhkRzl5Y3pvZ1FYSnlZWGs4S0hSaGNtZGxkRG9nWVc1NUxDQnJaWGs2SUhOMGNtbHVaeXdnWkdWell6b2dZVzU1S1NBOVBpQjJiMmxrUGl4Y2JpQWdJQ0J3WVhKaGJVUmxZMjl5WVhSdmNuTTZJRUZ5Y21GNVBIc2daR1ZqYjNKaGRHOXlPaUJRWVhKaGJXVjBaWEpFWldOdmNtRjBiM0k3SUdsdVpHVjRPaUJ1ZFcxaVpYSWdmVDRnUFNCYlhWeHVJQ0FwSUh0Y2JpQWdJQ0JqYjI1emRDQndjbTkwYnlBOUlIUmhjbWRsZEQ4dWNISnZkRzkwZVhCbElEOC9JSFJoY21kbGREdGNiaUFnSUNCamIyNXpkQ0JrWlhOamNtbHdkRzl5SUQwZ1QySnFaV04wTG1kbGRFOTNibEJ5YjNCbGNuUjVSR1Z6WTNKcGNIUnZjaWh3Y205MGJ5d2diV1YwYUc5a1RtRnRaU2s3WEc0Z0lDQWdiV1YwYUc5a1JHVmpiM0poZEc5eWN5NW1iM0pGWVdOb0tDaGtLU0E5UGlCa0tIQnliM1J2TENCdFpYUm9iMlJPWVcxbExDQmtaWE5qY21sd2RHOXlLU2s3WEc0Z0lDQWdjR0Z5WVcxRVpXTnZjbUYwYjNKekxtWnZja1ZoWTJnb0tIc2daR1ZqYjNKaGRHOXlMQ0JwYm1SbGVDQjlLU0E5UGx4dUlDQWdJQ0FnWkdWamIzSmhkRzl5S0hCeWIzUnZMQ0J0WlhSb2IyUk9ZVzFsTENCcGJtUmxlQ2xjYmlBZ0lDQXBPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdiV0YwWTJoU2IzVjBaU2hjYmlBZ0lDQnliM1YwWlRvZ1UyVnlkbVZ5VW05MWRHVXNYRzRnSUNBZ2NHdFFZWFJvT2lCemRISnBibWNzWEc0Z0lDQWdZWEJwVUhKdmNHVnlkR2xsY3pvZ1JHVmpZV1pCY0dsUWNtOXdaWEowZVZ0ZExGeHVJQ0FnSUdkbGRGQkxPaUFvTGk0dWNEb2dRWEp5WVhrOGMzUnlhVzVuSUh3Z2JuVnRZbVZ5UGlrZ1BUNGdjM1J5YVc1bkxGeHVJQ0FnSUUxdlpHVnNRMjl1YzNSeU9pQk5iMlJsYkVOdmJuTjBjblZqZEc5eVBHRnVlVDRzWEc0Z0lDQWdiVzlrWld4RGJHRjZlazVoYldVNklITjBjbWx1Wnl4Y2JpQWdJQ0J3WlhKemFYTjBaVzVqWlQ4NklHRnVlVnh1SUNBcE9pQjdYRzRnSUNBZ2JXVjBhRzlrVG1GdFpUb2djM1J5YVc1bk8xeHVJQ0FnSUdoaGJtUnNaWEk2SUNndUxpNWhjbWR6T2lCaGJubGJYU2tnUFQ0Z1lXNTVPMXh1SUNBZ0lHUmxZMjl5WVhSdmNuTTZJRUZ5Y21GNVBDaDBZWEpuWlhRNklHRnVlU3dnYTJWNU9pQnpkSEpwYm1jc0lHUmxjMk02SUdGdWVTa2dQVDRnZG05cFpENDdYRzRnSUNBZ2NHRnlZVzFFWldOdmNtRjBiM0p6T2lCQmNuSmhlVHg3SUdSbFkyOXlZWFJ2Y2pvZ1VHRnlZVzFsZEdWeVJHVmpiM0poZEc5eU95QnBibVJsZURvZ2JuVnRZbVZ5SUgwK08xeHVJQ0I5SUh3Z2RXNWtaV1pwYm1Wa0lIdGNiaUFnSUNCamIyNXpkQ0I3SUcxbGRHaHZaQ3dnY0dGMGFDQjlJRDBnY205MWRHVTdYRzRnSUNBZ1kyOXVjM1FnYm05eWJXRnNhWHBsWkZCaGRHZ2dQU0J3WVhSb0xuSmxjR3hoWTJVb0wxNWNYQzhyZkZ4Y0x5c2tMMmNzSUZ3aVhDSXBPMXh1WEc0Z0lDQWdhV1lnS0cxbGRHaHZaQ0E5UFQwZ1hDSlFUMU5VWENJZ0ppWWdibTl5YldGc2FYcGxaRkJoZEdnZ1BUMDlJRndpWENJcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnlaV0YwWlZKbFoybHpkSEpoZEdsdmJpaGNiaUFnSUNBZ0lDQWdYQ0pqY21WaGRHVmNJaXhjYmlBZ0lDQWdJQ0FnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1amNtVmhkR1ZEY21WaGRHVklZVzVrYkdWeUtFMXZaR1ZzUTI5dWMzUnlMQ0J0YjJSbGJFTnNZWHA2VG1GdFpTa3NYRzRnSUNBZ0lDQWdJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WTNKbFlYUmxRM0psWVhSbFJHVmpiM0poZEc5eWN5aE5iMlJsYkVOdmJuTjBjaXdnYlc5a1pXeERiR0Y2ZWs1aGJXVXBMRnh1SUNBZ0lDQWdJQ0JiZXlCa1pXTnZjbUYwYjNJNklFUmxZMkZtUW05a2VTZ3BJR0Z6SUdGdWVTd2dhVzVrWlhnNklEQWdmU3dnZXlCa1pXTnZjbUYwYjNJNklGSmxjM0J2Ym5ObEtIc2djR0Z6YzNSb2NtOTFaMmc2SUhSeWRXVWdmU2tnWVhNZ1lXNTVMQ0JwYm1SbGVEb2dNU0I5WFZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2JXVjBhRzlrSUQwOVBTQmNJbEJQVTFSY0lpQW1KaUJ1YjNKdFlXeHBlbVZrVUdGMGFDQTlQVDBnWENKaWRXeHJYQ0lwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1OeVpXRjBaVkpsWjJsemRISmhkR2x2YmloY2JpQWdJQ0FnSUNBZ1hDSmpjbVZoZEdWQmJHeGNJaXhjYmlBZ0lDQWdJQ0FnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1amNtVmhkR1ZDZFd4clEzSmxZWFJsU0dGdVpHeGxjaWhOYjJSbGJFTnZibk4wY2l3Z2JXOWtaV3hEYkdGNmVrNWhiV1VwTEZ4dUlDQWdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtSjFiR3REY21WaGRHVkVaV052Y21GMGIzSnpLRTF2WkdWc1EyOXVjM1J5TENCdGIyUmxiRU5zWVhwNlRtRnRaU2tzWEc0Z0lDQWdJQ0FnSUZ0N0lHUmxZMjl5WVhSdmNqb2dSR1ZqWVdaQ2IyUjVLQ2tnWVhNZ1lXNTVMQ0JwYm1SbGVEb2dNQ0I5TENCN0lHUmxZMjl5WVhSdmNqb2dVbVZ6Y0c5dWMyVW9leUJ3WVhOemRHaHliM1ZuYURvZ2RISjFaU0I5S1NCaGN5QmhibmtzSUdsdVpHVjRPaUF4SUgxZFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHRaWFJvYjJRZ1BUMDlJRndpUjBWVVhDSWdKaVlnYm05eWJXRnNhWHBsWkZCaGRHZ2dQVDA5SUZ3aVluVnNhMXdpS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1amNtVmhkR1ZTWldkcGMzUnlZWFJwYjI0b1hHNGdJQ0FnSUNBZ0lGd2ljbVZoWkVGc2JGd2lMRnh1SUNBZ0lDQWdJQ0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1OeVpXRjBaVUoxYkd0U1pXRmtTR0Z1Wkd4bGNpaHRiMlJsYkVOc1lYcDZUbUZ0WlNrc1hHNGdJQ0FnSUNBZ0lFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZblZzYTFKbFlXUkVaV052Y21GMGIzSnpLRTF2WkdWc1EyOXVjM1J5TENCdGIyUmxiRU5zWVhwNlRtRnRaU2tzWEc0Z0lDQWdJQ0FnSUZ0N0lHUmxZMjl5WVhSdmNqb2dVWFZsY25rb1hDSnBaSE5jSWlrZ1lYTWdZVzU1TENCcGJtUmxlRG9nTUNCOVhWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iV1YwYUc5a0lEMDlQU0JjSWxCVlZGd2lJQ1ltSUc1dmNtMWhiR2w2WldSUVlYUm9JRDA5UFNCY0ltSjFiR3RjSWlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVkzSmxZWFJsVW1WbmFYTjBjbUYwYVc5dUtGeHVJQ0FnSUNBZ0lDQmNJblZ3WkdGMFpVRnNiRndpTEZ4dUlDQWdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnlaV0YwWlVKMWJHdFZjR1JoZEdWSVlXNWtiR1Z5S0cxdlpHVnNRMnhoZW5wT1lXMWxLU3hjYmlBZ0lDQWdJQ0FnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1aWRXeHJWWEJrWVhSbFJHVmpiM0poZEc5eWN5aE5iMlJsYkVOdmJuTjBjaXdnYlc5a1pXeERiR0Y2ZWs1aGJXVXNJR0Z3YVZCeWIzQmxjblJwWlhNcExGeHVJQ0FnSUNBZ0lDQmJleUJrWldOdmNtRjBiM0k2SUVSbFkyRm1RbTlrZVNncElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SURBZ2ZTd2dleUJrWldOdmNtRjBiM0k2SUZKbGMzQnZibk5sS0hzZ2NHRnpjM1JvY205MVoyZzZJSFJ5ZFdVZ2ZTa2dZWE1nWVc1NUxDQnBibVJsZURvZ01TQjlYVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYldWMGFHOWtJRDA5UFNCY0lrUkZURVZVUlZ3aUlDWW1JRzV2Y20xaGJHbDZaV1JRWVhSb0lEMDlQU0JjSW1KMWJHdGNJaWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WTNKbFlYUmxVbVZuYVhOMGNtRjBhVzl1S0Z4dUlDQWdJQ0FnSUNCY0ltUmxiR1YwWlVGc2JGd2lMRnh1SUNBZ0lDQWdJQ0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1OeVpXRjBaVUoxYkd0RVpXeGxkR1ZJWVc1a2JHVnlLRzF2WkdWc1EyeGhlbnBPWVcxbEtTeGNiaUFnSUNBZ0lDQWdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTVpZFd4clJHVnNaWFJsUkdWamIzSmhkRzl5Y3loTmIyUmxiRU52Ym5OMGNpd2diVzlrWld4RGJHRjZlazVoYldVc0lHRndhVkJ5YjNCbGNuUnBaWE1wTEZ4dUlDQWdJQ0FnSUNCYmV5QmtaV052Y21GMGIzSTZJRkYxWlhKNUtGd2lhV1J6WENJcElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SURBZ2ZTd2dleUJrWldOdmNtRjBiM0k2SUZKbGMzQnZibk5sS0hzZ2NHRnpjM1JvY205MVoyZzZJSFJ5ZFdVZ2ZTa2dZWE1nWVc1NUxDQnBibVJsZURvZ01TQjlYVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYldWMGFHOWtJRDA5UFNCY0lrZEZWRndpSUNZbUlHNXZjbTFoYkdsNlpXUlFZWFJvSUQwOVBTQndhMUJoZEdncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnlaV0YwWlZKbFoybHpkSEpoZEdsdmJpaGNiaUFnSUNBZ0lDQWdYQ0p5WldGa1hDSXNYRzRnSUNBZ0lDQWdJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WTNKbFlYUmxVbVZoWkVoaGJtUnNaWElvWjJWMFVFc3NJRzF2WkdWc1EyeGhlbnBPWVcxbEtTeGNiaUFnSUNBZ0lDQWdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTV5WldGa1JHVmpiM0poZEc5eWN5aE5iMlJsYkVOdmJuTjBjaXdnYlc5a1pXeERiR0Y2ZWs1aGJXVXNJR0Z3YVZCeWIzQmxjblJwWlhNc0lIQnJVR0YwYUNrc1hHNGdJQ0FnSUNBZ0lGdDdJR1JsWTI5eVlYUnZjam9nUkdWallXWlFZWEpoYlhNb1lYQnBVSEp2Y0dWeWRHbGxjeWtnWVhNZ1lXNTVMQ0JwYm1SbGVEb2dNQ0I5WFZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2JXVjBhRzlrSUQwOVBTQmNJbEJWVkZ3aUlDWW1JRzV2Y20xaGJHbDZaV1JRWVhSb0lEMDlQU0J3YTFCaGRHZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbU55WldGMFpWSmxaMmx6ZEhKaGRHbHZiaWhjYmlBZ0lDQWdJQ0FnWENKMWNHUmhkR1ZjSWl4Y2JpQWdJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWpjbVZoZEdWVmNHUmhkR1ZJWVc1a2JHVnlLR2RsZEZCTExDQk5iMlJsYkVOdmJuTjBjaXdnYlc5a1pXeERiR0Y2ZWs1aGJXVXBMRnh1SUNBZ0lDQWdJQ0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG5Wd1pHRjBaVVJsWTI5eVlYUnZjbk1vVFc5a1pXeERiMjV6ZEhJc0lHMXZaR1ZzUTJ4aGVucE9ZVzFsTENCaGNHbFFjbTl3WlhKMGFXVnpMQ0J3YTFCaGRHZ3BMRnh1SUNBZ0lDQWdJQ0JiWEc0Z0lDQWdJQ0FnSUNBZ2V5QmtaV052Y21GMGIzSTZJRVJsWTJGbVVHRnlZVzF6S0dGd2FWQnliM0JsY25ScFpYTXBJR0Z6SUdGdWVTd2dhVzVrWlhnNklEQWdmU3hjYmlBZ0lDQWdJQ0FnSUNCN0lHUmxZMjl5WVhSdmNqb2dSR1ZqWVdaQ2IyUjVLQ2tnWVhNZ1lXNTVMQ0JwYm1SbGVEb2dNU0I5TEZ4dUlDQWdJQ0FnSUNBZ0lIc2daR1ZqYjNKaGRHOXlPaUJTWlhOd2IyNXpaU2g3SUhCaGMzTjBhSEp2ZFdkb09pQjBjblZsSUgwcElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SURJZ2ZTeGNiaUFnSUNBZ0lDQWdYVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYldWMGFHOWtJRDA5UFNCY0lrUkZURVZVUlZ3aUlDWW1JRzV2Y20xaGJHbDZaV1JRWVhSb0lEMDlQU0J3YTFCaGRHZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbU55WldGMFpWSmxaMmx6ZEhKaGRHbHZiaWhjYmlBZ0lDQWdJQ0FnWENKa1pXeGxkR1ZjSWl4Y2JpQWdJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWpjbVZoZEdWRVpXeGxkR1ZJWVc1a2JHVnlLR2RsZEZCTExDQnRiMlJsYkVOc1lYcDZUbUZ0WlNrc1hHNGdJQ0FnSUNBZ0lFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVaR1ZzWlhSbFJHVmpiM0poZEc5eWN5aE5iMlJsYkVOdmJuTjBjaXdnYlc5a1pXeERiR0Y2ZWs1aGJXVXNJR0Z3YVZCeWIzQmxjblJwWlhNc0lIQnJVR0YwYUNrc1hHNGdJQ0FnSUNBZ0lGdGNiaUFnSUNBZ0lDQWdJQ0I3SUdSbFkyOXlZWFJ2Y2pvZ1JHVmpZV1pRWVhKaGJYTW9ZWEJwVUhKdmNHVnlkR2xsY3lrZ1lYTWdZVzU1TENCcGJtUmxlRG9nTUNCOUxGeHVJQ0FnSUNBZ0lDQWdJSHNnWkdWamIzSmhkRzl5T2lCU1pYTndiMjV6WlNoN0lIQmhjM04wYUhKdmRXZG9PaUIwY25WbElIMHBJR0Z6SUdGdWVTd2dhVzVrWlhnNklERWdmU3hjYmlBZ0lDQWdJQ0FnWFZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCRGIyMXdiM05sWkNCUVN5Qm1ZV3hzWW1GamF5QnliM1YwWlhNZ0tHWnBiSFJsY2tWdGNIUjVLU0RpZ0pRZ2NHRjBhQ0JrYVdabVpYSnpJR1p5YjIwZ2NHdFFZWFJvWEc0Z0lDQWdZMjl1YzNRZ1ptRnNiR0poWTJ0VFpXZHRaVzUwY3lBOUlHNXZjbTFoYkdsNlpXUlFZWFJvTG5Od2JHbDBLRndpTDF3aUtTNW1hV3gwWlhJb1FtOXZiR1ZoYmlrN1hHNGdJQ0FnWTI5dWMzUWdhWE5CYkd4UVlYSmhiWE1nUFNCbVlXeHNZbUZqYTFObFoyMWxiblJ6TG14bGJtZDBhQ0ErSURBZ0ppWWdabUZzYkdKaFkydFRaV2R0Wlc1MGN5NWxkbVZ5ZVNnb2N5a2dQVDRnY3k1emRHRnlkSE5YYVhSb0tGd2lPbHdpS1NrN1hHNGdJQ0FnYVdZZ0tHbHpRV3hzVUdGeVlXMXpJQ1ltSUc1dmNtMWhiR2w2WldSUVlYUm9JQ0U5UFNCd2ExQmhkR2dwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1poYkd4aVlXTnJRWEJwVUhKdmNITWdQU0JtWVd4c1ltRmphMU5sWjIxbGJuUnpMbTFoY0Nnb2N5a2dQVDRnY3k1emJHbGpaU2d4S1NrdWJXRndLQ2h1WVcxbEtTQTlQaUFvZTF4dUlDQWdJQ0FnSUNCdVlXMWxMRnh1SUNBZ0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1lDUjdibUZ0WlgwZ2NHRnlZVzFsZEdWeVlDeGNiaUFnSUNBZ0lDQWdjbVZ4ZFdseVpXUTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lIUjVjR1U2SUZOMGNtbHVaeXhjYmlBZ0lDQWdJSDBwS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJSE4xWm1acGVDQTlJR1poYkd4aVlXTnJVMlZuYldWdWRITXViV0Z3S0NoektTQTlQaUJ6TG5Oc2FXTmxLREVwS1M1cWIybHVLRndpUVc1a1hDSXBPMXh1SUNBZ0lDQWdhV1lnS0cxbGRHaHZaQ0E5UFQwZ1hDSkhSVlJjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWpjbVZoZEdWU1pXZHBjM1J5WVhScGIyNG9YRzRnSUNBZ0lDQWdJQ0FnWUhKbFlXUkNlU1I3YzNWbVptbDRmV0FzWEc0Z0lDQWdJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWpjbVZoZEdWU1pXRmtTR0Z1Wkd4bGNpaG5aWFJRU3l3Z2JXOWtaV3hEYkdGNmVrNWhiV1VwTEZ4dUlDQWdJQ0FnSUNBZ0lFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVjbVZoWkVSbFkyOXlZWFJ2Y25Nb1RXOWtaV3hEYjI1emRISXNJRzF2WkdWc1EyeGhlbnBPWVcxbExDQm1ZV3hzWW1GamEwRndhVkJ5YjNCekxDQnViM0p0WVd4cGVtVmtVR0YwYUNrc1hHNGdJQ0FnSUNBZ0lDQWdXM3NnWkdWamIzSmhkRzl5T2lCRVpXTmhabEJoY21GdGN5aG1ZV3hzWW1GamEwRndhVkJ5YjNCektTQmhjeUJoYm5rc0lHbHVaR1Y0T2lBd0lIMWRYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb2JXVjBhRzlrSUQwOVBTQmNJbEJWVkZ3aUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbU55WldGMFpWSmxaMmx6ZEhKaGRHbHZiaWhjYmlBZ0lDQWdJQ0FnSUNCZ2RYQmtZWFJsUW5ra2UzTjFabVpwZUgxZ0xGeHVJQ0FnSUNBZ0lDQWdJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WTNKbFlYUmxWWEJrWVhSbFNHRnVaR3hsY2loblpYUlFTeXdnVFc5a1pXeERiMjV6ZEhJc0lHMXZaR1ZzUTJ4aGVucE9ZVzFsS1N4Y2JpQWdJQ0FnSUNBZ0lDQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMblZ3WkdGMFpVUmxZMjl5WVhSdmNuTW9UVzlrWld4RGIyNXpkSElzSUcxdlpHVnNRMnhoZW5wT1lXMWxMQ0JtWVd4c1ltRmphMEZ3YVZCeWIzQnpMQ0J1YjNKdFlXeHBlbVZrVUdGMGFDa3NYRzRnSUNBZ0lDQWdJQ0FnVzF4dUlDQWdJQ0FnSUNBZ0lDQWdleUJrWldOdmNtRjBiM0k2SUVSbFkyRm1VR0Z5WVcxektHWmhiR3hpWVdOclFYQnBVSEp2Y0hNcElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SURBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUhzZ1pHVmpiM0poZEc5eU9pQkVaV05oWmtKdlpIa29LU0JoY3lCaGJua3NJR2x1WkdWNE9pQXhJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdJR1JsWTI5eVlYUnZjam9nVW1WemNHOXVjMlVvZXlCd1lYTnpkR2h5YjNWbmFEb2dkSEoxWlNCOUtTQmhjeUJoYm5rc0lHbHVaR1Y0T2lBeUlIMHNYRzRnSUNBZ0lDQWdJQ0FnWFZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLRzFsZEdodlpDQTlQVDBnWENKRVJVeEZWRVZjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWpjbVZoZEdWU1pXZHBjM1J5WVhScGIyNG9YRzRnSUNBZ0lDQWdJQ0FnWUdSbGJHVjBaVUo1Skh0emRXWm1hWGg5WUN4Y2JpQWdJQ0FnSUNBZ0lDQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbU55WldGMFpVUmxiR1YwWlVoaGJtUnNaWElvWjJWMFVFc3NJRzF2WkdWc1EyeGhlbnBPWVcxbEtTeGNiaUFnSUNBZ0lDQWdJQ0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1SbGJHVjBaVVJsWTI5eVlYUnZjbk1vVFc5a1pXeERiMjV6ZEhJc0lHMXZaR1ZzUTJ4aGVucE9ZVzFsTENCbVlXeHNZbUZqYTBGd2FWQnliM0J6TENCdWIzSnRZV3hwZW1Wa1VHRjBhQ2tzWEc0Z0lDQWdJQ0FnSUNBZ1cxeHVJQ0FnSUNBZ0lDQWdJQ0FnZXlCa1pXTnZjbUYwYjNJNklFUmxZMkZtVUdGeVlXMXpLR1poYkd4aVlXTnJRWEJwVUhKdmNITXBJR0Z6SUdGdWVTd2dhVzVrWlhnNklEQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIc2daR1ZqYjNKaGRHOXlPaUJTWlhOd2IyNXpaU2g3SUhCaGMzTjBhSEp2ZFdkb09pQjBjblZsSUgwcElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SURFZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0JkWEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHMWxkR2h2WkNBOVBUMGdYQ0pIUlZSY0lpQW1KaUJ1YjNKdFlXeHBlbVZrVUdGMGFDQTlQVDBnWENKemRHRjBaVzFsYm5Rdk9tMWxkR2h2WkM4cVlYSm5jMXdpS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1amNtVmhkR1ZTWldkcGMzUnlZWFJwYjI0b1hHNGdJQ0FnSUNBZ0lGd2ljM1JoZEdWdFpXNTBYQ0lzWEc0Z0lDQWdJQ0FnSUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVkzSmxZWFJsVTNSaGRHVnRaVzUwU0dGdVpHeGxjaWh0YjJSbGJFTnNZWHA2VG1GdFpTa3NYRzRnSUNBZ0lDQWdJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1YzNSaGRHVnRaVzUwUkdWamIzSmhkRzl5Y3loTmIyUmxiRU52Ym5OMGNpd2diVzlrWld4RGJHRjZlazVoYldVcExGeHVJQ0FnSUNBZ0lDQmJYRzRnSUNBZ0lDQWdJQ0FnZXlCa1pXTnZjbUYwYjNJNklGQmhjbUZ0S0Z3aWJXVjBhRzlrWENJcElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SURBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0I3SUdSbFkyOXlZWFJ2Y2pvZ1VHRnlZVzBvWENKaGNtZHpYQ0lwSUdGeklHRnVlU3dnYVc1a1pYZzZJREVnZlN4Y2JpQWdJQ0FnSUNBZ0lDQjdJR1JsWTI5eVlYUnZjam9nUkdWallXWlJkV1Z5ZVNncElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SURJZ2ZTeGNiaUFnSUNBZ0lDQWdYVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCemRHRjBaVzFsYm5SU2IzVjBaWE02SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSE4wY21sdVp6NGdQU0I3WEc0Z0lDQWdJQ0JjSW14cGMzUkNlUzg2YTJWNVhDSTZJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1TVNWTlVYMEpaTEZ4dUlDQWdJQ0FnWENKd1lXZHBibUYwWlVKNUx6cHJaWGt2T25CaFoyVmNJam9nVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxsQkJSMFZmUWxrc1hHNGdJQ0FnSUNCY0ltWnBibVF2T25aaGJIVmxYQ0k2SUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NUdTVTVFTEZ4dUlDQWdJQ0FnWENKd1lXZGxMenAyWVd4MVpWd2lPaUJRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVVFRkhSU3hjYmlBZ0lDQWdJRndpWm1sdVpFOXVaVUo1THpwclpYa3ZPblpoYkhWbFhDSTZJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1R1NVNUVYMDlPUlY5Q1dTeGNiaUFnSUNBZ0lGd2labWx1WkVKNUx6cHJaWGt2T25aaGJIVmxYQ0k2SUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NUdTVTVFWDBKWkxGeHVJQ0FnSUNBZ1hDSmpiM1Z1ZEU5bUx6cG1hV1ZzWkZ3aU9pQlFjbVZ3WVhKbFpGTjBZWFJsYldWdWRFdGxlWE11UTA5VlRsUmZUMFlzWEc0Z0lDQWdJQ0JjSW0xaGVFOW1MenBtYVdWc1pGd2lPaUJRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVRVRllYMDlHTEZ4dUlDQWdJQ0FnWENKdGFXNVBaaTg2Wm1sbGJHUmNJam9nVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxrMUpUbDlQUml4Y2JpQWdJQ0FnSUZ3aVlYWm5UMll2T21acFpXeGtYQ0k2SUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NUJWa2RmVDBZc1hHNGdJQ0FnSUNCY0luTjFiVTltTHpwbWFXVnNaRndpT2lCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXVVMVZOWDA5R0xGeHVJQ0FnSUNBZ1hDSmthWE4wYVc1amRFOW1MenBtYVdWc1pGd2lPaUJRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVJFbFRWRWxPUTFSZlQwWXNYRzRnSUNBZ0lDQmNJbWR5YjNWd1QyWXZPbVpwWld4a1hDSTZJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1SFVrOVZVRjlQUml4Y2JpQWdJQ0I5TzF4dVhHNGdJQ0FnWTI5dWMzUWdjM1JoZEdWdFpXNTBTMlY1SUQwZ2MzUmhkR1Z0Wlc1MFVtOTFkR1Z6VzI1dmNtMWhiR2w2WldSUVlYUm9YVHRjYmlBZ0lDQnBaaUFvYzNSaGRHVnRaVzUwUzJWNUlDWW1JRzFsZEdodlpDQTlQVDBnWENKSFJWUmNJaWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WTNKbFlYUmxVbVZuYVhOMGNtRjBhVzl1S0Z4dUlDQWdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxuTjBZWFJsYldWdWRFMWxkR2h2WkU1aGJXVW9ibTl5YldGc2FYcGxaRkJoZEdncExGeHVJQ0FnSUNBZ0lDQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbU55WldGMFpWTjBZWFJsYldWdWRGTm9iM0owWTNWMFNHRnVaR3hsY2loemRHRjBaVzFsYm5STFpYa3NJRzF2WkdWc1EyeGhlbnBPWVcxbEtTeGNiaUFnSUNBZ0lDQWdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTV6ZEdGMFpXMWxiblJUYUc5eWRHTjFkRVJsWTI5eVlYUnZjbk1vVFc5a1pXeERiMjV6ZEhJc0lHMXZaR1ZzUTJ4aGVucE9ZVzFsTENCdWIzSnRZV3hwZW1Wa1VHRjBhQ3dnYzNSaGRHVnRaVzUwUzJWNUtTeGNiaUFnSUNBZ0lDQWdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTV6ZEdGMFpXMWxiblJUYUc5eWRHTjFkRkJoY21GdGN5aHViM0p0WVd4cGVtVmtVR0YwYUNsY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHMWxkR2h2WkNBOVBUMGdYQ0pIUlZSY0lpQW1KaUJ1YjNKdFlXeHBlbVZrVUdGMGFDNXpkR0Z5ZEhOWGFYUm9LRndpY1hWbGNua3ZYQ0lwS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0J4ZFdWeWVVMWxkR2h2WkNBOUlHNXZjbTFoYkdsNlpXUlFZWFJvTG5KbGNHeGhZMlVvTDE1eGRXVnllVnhjTHk4c0lGd2lYQ0lwTG5Od2JHbDBLRndpTDF3aUtWc3dYVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbU55WldGMFpWSmxaMmx6ZEhKaGRHbHZiaWhjYmlBZ0lDQWdJQ0FnY1hWbGNubE5aWFJvYjJRc1hHNGdJQ0FnSUNBZ0lFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZM0psWVhSbFEyOXRjR3hsZUZGMVpYSjVTR0Z1Wkd4bGNpaHhkV1Z5ZVUxbGRHaHZaQ2tzWEc0Z0lDQWdJQ0FnSUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVoyVjBVWFZsY25sRVpXTnZjbUYwYjNKektIRjFaWEo1VFdWMGFHOWtMQ0J1YjNKdFlXeHBlbVZrVUdGMGFDd2dYQ0pIUlZSY0lpd2dkSEoxWlNrc1hHNGdJQ0FnSUNBZ0lFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZMjl0Y0d4bGVGRjFaWEo1VUdGeVlXMXpLRzV2Y20xaGJHbDZaV1JRWVhSb0tWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QkdZV3hzWW1GamF5Qm1iM0lnWTNWemRHOXRJRUJ5YjNWMFpTZ3BJSEJoZEdoeklDaGxMbWN1SUZ3aWJXVjBZV1JoZEdFdlptOXlMWEJ5YjJSMVkzUXZPbkJ5YjJSMVkzUkRiMlJsWENJcFhHNGdJQ0FnWTI5dWMzUWdjR0YwYUZObFoyMWxiblJ6SUQwZ2JtOXliV0ZzYVhwbFpGQmhkR2d1YzNCc2FYUW9YQ0l2WENJcExtWnBiSFJsY2loQ2IyOXNaV0Z1S1R0Y2JpQWdJQ0JqYjI1emRDQnJibTkzYmxCeVpXWnBlR1Z6SUQwZ2JtVjNJRk5sZER4emRISnBibWMrS0Z0Y2JpQWdJQ0FnSUZ3aWJHbHpkRUo1WENJc0lGd2labWx1WkVKNVhDSXNJRndpWm1sdVpFSjVVR0ZuYVc1aGRHVmNJaXdnWENKbWFXNWtUMjVsUW5sY0lpd2dYQ0p3WVdkcGJtRjBaVUo1WENJc1hHNGdJQ0FnSUNCY0ltWnBibVJjSWl3Z1hDSndZV2RsWENJc0lGd2lZMjkxYm5SUFpsd2lMQ0JjSW0xaGVFOW1YQ0lzSUZ3aWJXbHVUMlpjSWl3Z1hDSmhkbWRQWmx3aUxDQmNJbk4xYlU5bVhDSXNYRzRnSUNBZ0lDQmNJbVJwYzNScGJtTjBUMlpjSWl3Z1hDSm5jbTkxY0U5bVhDSXNJRndpYzNSaGRHVnRaVzUwWENJc0lGd2lZblZzYTF3aUxDQmNJbkYxWlhKNVhDSXNYRzRnSUNBZ1hTazdYRzRnSUNBZ2FXWWdLRnh1SUNBZ0lDQWdjR0YwYUZObFoyMWxiblJ6TG14bGJtZDBhQ0ErSURBZ0ppWmNiaUFnSUNBZ0lDRnViM0p0WVd4cGVtVmtVR0YwYUM1emRHRnlkSE5YYVhSb0tGd2ljWFZsY25rdlhDSXBJQ1ltWEc0Z0lDQWdJQ0FoYTI1dmQyNVFjbVZtYVhobGN5NW9ZWE1vY0dGMGFGTmxaMjFsYm5Seld6QmRLVnh1SUNBZ0lDa2dlMXh1SUNBZ0lDQWdMeThnVEc5dmF5QjFjQ0IwYUdVZ1lXTjBkV0ZzSUcxbGRHaHZaQ0J1WVcxbElHWnliMjBnUUhKdmRYUmxJRzFsZEdGa1lYUmhJR0o1SUcxaGRHTm9hVzVuSUhSb1pTQndZWFJvTGx4dUlDQWdJQ0FnTHk4Z1ZHaGxJRUJ5YjNWMFpTQmtaV052Y21GMGIzSWdjM1J2Y21WeklIc2djR0YwYUN3Z2FIUjBjRTFsZEdodlpDd2dhR0Z1Wkd4bGNpQjlJR3RsZVdWa0lHSjVJRzFsZEdodlpDQnVZVzFsWEc0Z0lDQWdJQ0F2THlCdmJpQjBhR1VnY21Wd2IzTnBkRzl5ZVNCamIyNXpkSEoxWTNSdmNpNWNiaUFnSUNBZ0lHTnZibk4wSUhKdmRYUmxUV1YwWVdSaGRHRTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lHRnVlVDRnUFZ4dUlDQWdJQ0FnSUNCTlpYUmhaR0YwWVM1blpYUW9YRzRnSUNBZ0lDQWdJQ0FnS0hCbGNuTnBjM1JsYm1ObElHRnpJR0Z1ZVNrL0xtTnZibk4wY25WamRHOXlMRnh1SUNBZ0lDQWdJQ0FnSUUxbGRHRmtZWFJoTG10bGVTaEVSVU5CUmw5U1QxVlVSU2xjYmlBZ0lDQWdJQ0FnS1NBL1B5QjdmVHRjYmlBZ0lDQWdJR052Ym5OMElHMWhkR05vWldSRmJuUnllU0E5SUU5aWFtVmpkQzVsYm5SeWFXVnpLSEp2ZFhSbFRXVjBZV1JoZEdFcExtWnBibVFvWEc0Z0lDQWdJQ0FnSUNoYkxDQnBibVp2WFNrZ1BUNWNiaUFnSUNBZ0lDQWdJQ0JwYm1adklDWW1YRzRnSUNBZ0lDQWdJQ0FnZEhsd1pXOW1JR2x1Wm04Z1BUMDlJRndpYjJKcVpXTjBYQ0lnSmlaY2JpQWdJQ0FnSUNBZ0lDQnBibVp2TG5CaGRHZy9MbkpsY0d4aFkyVW9MMTVjWEM4cmZGeGNMeXNrTDJjc0lGd2lYQ0lwSUQwOVBTQnViM0p0WVd4cGVtVmtVR0YwYUZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR0ZqZEhWaGJFMWxkR2h2WkU1aGJXVWdQU0J0WVhSamFHVmtSVzUwY25rL0xsc3dYU0I4ZkNCd1lYUm9VMlZuYldWdWRITmJNRjA3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJSEJoY21GdFUyVm5iV1Z1ZEhNZ1BTQndZWFJvVTJWbmJXVnVkSE11Wm1sc2RHVnlLQ2h6S1NBOVBpQnpMbk4wWVhKMGMxZHBkR2dvWENJNlhDSXBLVHRjYmlBZ0lDQWdJR052Ym5OMElHRndhVkJoZEdoUVlYSmhiWE1nUFNCd1lYSmhiVk5sWjIxbGJuUnpMbTFoY0Nnb2N5a2dQVDRnY3k1emJHbGpaU2d4S1NrdWJXRndLQ2h1WVcxbEtTQTlQaUFvZTF4dUlDQWdJQ0FnSUNCdVlXMWxMRnh1SUNBZ0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1lDUjdibUZ0WlgwZ2NHRnlZVzFsZEdWeUlHWnZjaUIwYUdVZ2NYVmxjbmxnTEZ4dUlDQWdJQ0FnSUNCeVpYRjFhWEpsWkRvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnZEhsd1pUb2dVM1J5YVc1bkxGeHVJQ0FnSUNBZ2ZTa3BPMXh1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTVqY21WaGRHVlNaV2RwYzNSeVlYUnBiMjRvWEc0Z0lDQWdJQ0FnSUdGamRIVmhiRTFsZEdodlpFNWhiV1VzWEc0Z0lDQWdJQ0FnSUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVkzSmxZWFJsUTNWemRHOXRVbTkxZEdWSVlXNWtiR1Z5S0dGamRIVmhiRTFsZEdodlpFNWhiV1VwTEZ4dUlDQWdJQ0FnSUNCYlhHNGdJQ0FnSUNBZ0lDQWdMaTR1WVhCcFVHRjBhRkJoY21GdGN5NXRZWEFvS0hBcElEMCtJRUZ3YVZCaGNtRnRLSEFwS1N4Y2JpQWdJQ0FnSUNBZ0lDQkJjR2xQY0dWeVlYUnBiMjRvZXlCemRXMXRZWEo1T2lCZ1VtVjBjbWxsZG1VZ2NtVmpiM0prY3lCMWMybHVaeUJjSWlSN1lXTjBkV0ZzVFdWMGFHOWtUbUZ0WlgxY0lpNWdJSDBwTEZ4dUlDQWdJQ0FnSUNBZ0lFRndhVTlyVW1WemNHOXVjMlVvZXlCa1pYTmpjbWx3ZEdsdmJqb2dYQ0pTWlhOMWJIUWdjM1ZqWTJWemMyWjFiR3g1SUhKbGRISnBaWFpsWkM1Y0lpQjlLU3hjYmlBZ0lDQWdJQ0FnSUNCQmNHbE9iME52Ym5SbGJuUlNaWE53YjI1elpTaDdJR1JsYzJOeWFYQjBhVzl1T2lCY0lrNXZJR052Ym5SbGJuUWdjbVYwZFhKdVpXUWdZbmtnZEdobElHMWxkR2h2WkM1Y0lpQjlLU3hjYmlBZ0lDQWdJQ0FnWFN4Y2JpQWdJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWpiMjF3YkdWNFVYVmxjbmxRWVhKaGJYTW9ibTl5YldGc2FYcGxaRkJoZEdncFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJqY21WaGRHVlNaV2RwYzNSeVlYUnBiMjRvWEc0Z0lDQWdiV1YwYUc5a1RtRnRaVG9nYzNSeWFXNW5MRnh1SUNBZ0lHaGhibVJzWlhJNklDZ3VMaTVoY21kek9pQmhibmxiWFNrZ1BUNGdZVzU1TEZ4dUlDQWdJR1JsWTI5eVlYUnZjbk02SUVGeWNtRjVQQ2gwWVhKblpYUTZJR0Z1ZVN3Z2EyVjVPaUJ6ZEhKcGJtY3NJR1JsYzJNNklHRnVlU2tnUFQ0Z2RtOXBaRDRzWEc0Z0lDQWdjR0Z5WVcxRVpXTnZjbUYwYjNKek9pQkJjbkpoZVR4N0lHUmxZMjl5WVhSdmNqb2dVR0Z5WVcxbGRHVnlSR1ZqYjNKaGRHOXlPeUJwYm1SbGVEb2diblZ0WW1WeUlIMCtYRzRnSUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUI3SUcxbGRHaHZaRTVoYldVc0lHaGhibVJzWlhJc0lHUmxZMjl5WVhSdmNuTXNJSEJoY21GdFJHVmpiM0poZEc5eWN5QjlPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdjM1JoZEdWdFpXNTBUV1YwYUc5a1RtRnRaU2h3WVhSb09pQnpkSEpwYm1jcE9pQnpkSEpwYm1jZ2UxeHVJQ0FnSUdOdmJuTjBJR1pwY25OMFUyVm5iV1Z1ZENBOUlIQmhkR2d1YzNCc2FYUW9YQ0l2WENJcFd6QmRPMXh1SUNBZ0lISmxkSFZ5YmlCbWFYSnpkRk5sWjIxbGJuUTdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5QnpkR0YwWlcxbGJuUlRhRzl5ZEdOMWRGQmhjbUZ0Y3loY2JpQWdJQ0J3WVhSb09pQnpkSEpwYm1kY2JpQWdLVG9nUVhKeVlYazhleUJrWldOdmNtRjBiM0k2SUZCaGNtRnRaWFJsY2tSbFkyOXlZWFJ2Y2pzZ2FXNWtaWGc2SUc1MWJXSmxjaUI5UGlCN1hHNGdJQ0FnWTI5dWMzUWdjMlZuYldWdWRITWdQU0J3WVhSb0xuTndiR2wwS0Z3aUwxd2lLUzVtYVd4MFpYSW9LSE1wSUQwK0lITXVjM1JoY25SelYybDBhQ2hjSWpwY0lpa3BPMXh1SUNBZ0lHTnZibk4wSUhCaGNtRnRjem9nUVhKeVlYazhleUJrWldOdmNtRjBiM0k2SUZCaGNtRnRaWFJsY2tSbFkyOXlZWFJ2Y2pzZ2FXNWtaWGc2SUc1MWJXSmxjaUI5UGlBOUlGdGRPMXh1SUNBZ0lITmxaMjFsYm5SekxtWnZja1ZoWTJnb0tITmxaeXdnYVNrZ1BUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JtRnRaU0E5SUhObFp5NXlaWEJzWVdObEtGd2lPbHdpTENCY0lsd2lLVHRjYmlBZ0lDQWdJSEJoY21GdGN5NXdkWE5vS0hzZ1pHVmpiM0poZEc5eU9pQlFZWEpoYlNodVlXMWxLU0JoY3lCaGJua3NJR2x1WkdWNE9pQnBJSDBwTzF4dUlDQWdJSDBwTzF4dUlDQWdJR2xtSUNoY2JpQWdJQ0FnSUhCaGRHZ3VjM1JoY25SelYybDBhQ2hjSW14cGMzUkNlUzljSWlrZ2ZIeGNiaUFnSUNBZ0lIQmhkR2d1YzNSaGNuUnpWMmwwYUNoY0luQmhaMmx1WVhSbFFua3ZYQ0lwSUh4OFhHNGdJQ0FnSUNCd1lYUm9Mbk4wWVhKMGMxZHBkR2dvWENKbWFXNWtMMXdpS1NCOGZGeHVJQ0FnSUNBZ2NHRjBhQzV6ZEdGeWRITlhhWFJvS0Z3aWNHRm5aUzljSWlsY2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUhCaGNtRnRjeTV3ZFhOb0tIc2daR1ZqYjNKaGRHOXlPaUJFWldOaFpsRjFaWEo1S0NrZ1lYTWdZVzU1TENCcGJtUmxlRG9nYzJWbmJXVnVkSE11YkdWdVozUm9JSDBwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2NHRnlZVzF6TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWTI5dGNHeGxlRkYxWlhKNVVHRnlZVzF6S0Z4dUlDQWdJSEJoZEdnNklITjBjbWx1WjF4dUlDQXBPaUJCY25KaGVUeDdJR1JsWTI5eVlYUnZjam9nVUdGeVlXMWxkR1Z5UkdWamIzSmhkRzl5T3lCcGJtUmxlRG9nYm5WdFltVnlJSDArSUh0Y2JpQWdJQ0JqYjI1emRDQnpaV2R0Wlc1MGN5QTlJSEJoZEdndWMzQnNhWFFvWENJdlhDSXBMbVpwYkhSbGNpZ29jeWtnUFQ0Z2N5NXpkR0Z5ZEhOWGFYUm9LRndpT2x3aUtTazdYRzRnSUNBZ1kyOXVjM1FnY0dGeVlXMXpPaUJCY25KaGVUeDdJR1JsWTI5eVlYUnZjam9nVUdGeVlXMWxkR1Z5UkdWamIzSmhkRzl5T3lCcGJtUmxlRG9nYm5WdFltVnlJSDArSUQwZ1cxMDdYRzRnSUNBZ2MyVm5iV1Z1ZEhNdVptOXlSV0ZqYUNnb2MyVm5MQ0JwS1NBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCdVlXMWxJRDBnYzJWbkxuSmxjR3hoWTJVb1hDSTZYQ0lzSUZ3aVhDSXBPMXh1SUNBZ0lDQWdjR0Z5WVcxekxuQjFjMmdvZXlCa1pXTnZjbUYwYjNJNklGQmhjbUZ0S0c1aGJXVXBJR0Z6SUdGdWVTd2dhVzVrWlhnNklHa2dmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdhV1lnS0hCaGRHZ3VjM1JoY25SelYybDBhQ2hjSW5GMVpYSjVMMXdpS1NrZ2UxeHVJQ0FnSUNBZ2NHRnlZVzF6TG5CMWMyZ29leUJrWldOdmNtRjBiM0k2SUVSbFkyRm1VWFZsY25rb0tTQmhjeUJoYm5rc0lHbHVaR1Y0T2lCelpXZHRaVzUwY3k1c1pXNW5kR2dnZlNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQndZWEpoYlhNN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCamNtVmhkR1ZEY21WaGRHVklZVzVrYkdWeUtGeHVJQ0FnSUUxdlpHVnNRMjl1YzNSeU9pQk5iMlJsYkVOdmJuTjBjblZqZEc5eVBHRnVlVDRzWEc0Z0lDQWdiVzlrWld4RGJHRjZlazVoYldVNklITjBjbWx1WjF4dUlDQXBJSHRjYmlBZ0lDQnlaWFIxY200Z1lYTjVibU1nWm5WdVkzUnBiMjRnWTNKbFlYUmxLRnh1SUNBZ0lDQWdkR2hwY3pvZ1lXNTVMRnh1SUNBZ0lDQWdaR0YwWVRvZ1lXNTVMRnh1SUNBZ0lDQWdjbVZ6Y0Q4NklHRnVlVnh1SUNBZ0lDazZJRkJ5YjIxcGMyVThUVzlrWld3OFlXNTVQajRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdleUJqZEhnc0lHeHZaeUI5SUQwZ0tGeHVJQ0FnSUNBZ0lDQmhkMkZwZENCMGFHbHpMbXh2WjBOMGVDaGJYU3dnVDNCbGNtRjBhVzl1UzJWNWN5NURVa1ZCVkVVc0lIUnlkV1VwWEc0Z0lDQWdJQ0FwTG1admNpaGpjbVZoZEdVcE8xeHVJQ0FnSUNBZ2JHOW5MblpsY21KdmMyVW9ZR055WldGMGFXNW5JRzVsZHlBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZldBcE8xeHVJQ0FnSUNBZ2JHVjBJR055WldGMFpXUTZJRTF2WkdWc08xeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnWTNKbFlYUmxaQ0E5SUdGM1lXbDBJSFJvYVhNdWNHVnljMmx6ZEdWdVkyVW9ZM1I0S1M1amNtVmhkR1VvWkdGMFlTd2dZM1I0S1R0Y2JpQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVNklIVnVhMjV2ZDI0cElIdGNiaUFnSUNBZ0lDQWdiRzluTG1WeWNtOXlLR0JHWVdsc1pXUWdkRzhnWTNKbFlYUmxJRzVsZHlBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZldBc0lHVWdZWE1nUlhKeWIzSXBPMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QmxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdiRzluTG1sdVptOG9ZR055WldGMFpXUWdibVYzSUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5SUhkcGRHZ2dhV1FnSkhzb1kzSmxZWFJsWkNCaGN5QmhibmtwVzNSb2FYTXVjR3RkZldBcE8xeHVJQ0FnSUNBZ2FXWWdLSEpsYzNBcElHTjBlQzUwYjFKbGMzQnZibk5sS0hKbGMzQXBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlHTnlaV0YwWldRN1hHNGdJQ0FnZlR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdOeVpXRjBaVUoxYkd0RGNtVmhkR1ZJWVc1a2JHVnlLRnh1SUNBZ0lFMXZaR1ZzUTI5dWMzUnlPaUJOYjJSbGJFTnZibk4wY25WamRHOXlQR0Z1ZVQ0c1hHNGdJQ0FnYlc5a1pXeERiR0Y2ZWs1aGJXVTZJSE4wY21sdVoxeHVJQ0FwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZWE41Ym1NZ1puVnVZM1JwYjI0Z1kzSmxZWFJsUVd4c0tGeHVJQ0FnSUNBZ2RHaHBjem9nWVc1NUxGeHVJQ0FnSUNBZ1pHRjBZVG9nWVc1NVcxMHNYRzRnSUNBZ0lDQnlaWE53UHpvZ1lXNTVYRzRnSUNBZ0tUb2dVSEp2YldselpUeE5iMlJsYkZ0ZFBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCN0lHTjBlQ3dnYkc5bklIMGdQU0FvWEc0Z0lDQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdWJHOW5RM1I0S0Z0ZExDQkNkV3hyUTNKMVpFOXdaWEpoZEdsdmJrdGxlWE11UTFKRlFWUkZYMEZNVEN3Z2RISjFaU2xjYmlBZ0lDQWdJQ2t1Wm05eUtHTnlaV0YwWlVGc2JDazdYRzRnSUNBZ0lDQnNiMmN1ZG1WeVltOXpaU2hnWTNKbFlYUnBibWNnYm1WM0lDUjdiVzlrWld4RGJHRjZlazVoYldWOVlDazdYRzRnSUNBZ0lDQnNaWFFnWTNKbFlYUmxaRG9nWVc1NVcxMDdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCamNtVmhkR1ZrSUQwZ1lYZGhhWFFnZEdocGN5NXdaWEp6YVhOMFpXNWpaU2hqZEhncExtTnlaV0YwWlVGc2JDaGNiaUFnSUNBZ0lDQWdJQ0JrWVhSaExtMWhjQ2dvWkNrZ1BUNGdibVYzSUUxdlpHVnNRMjl1YzNSeUtHUXBLU3hjYmlBZ0lDQWdJQ0FnSUNCamRIaGNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDBnWTJGMFkyZ2dLR1U2SUhWdWEyNXZkMjRwSUh0Y2JpQWdJQ0FnSUNBZ2JHOW5MbVZ5Y205eUtHQkdZV2xzWldRZ2RHOGdZM0psWVhSbElHNWxkeUFrZTIxdlpHVnNRMnhoZW5wT1lXMWxmV0FzSUdVZ1lYTWdSWEp5YjNJcE8xeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2JHOW5MbWx1Wm04b1lHTnlaV0YwWldRZ2JtVjNJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlJSGRwZEdnZ2FXUWdKSHNvWTNKbFlYUmxaQ0JoY3lCaGJua3BXM1JvYVhNdWNHdGRmV0FwTzF4dUlDQWdJQ0FnYVdZZ0tISmxjM0FwSUdOMGVDNTBiMUpsYzNCdmJuTmxLSEpsYzNBcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOeVpXRjBaV1E3WEc0Z0lDQWdmVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR055WldGMFpVSjFiR3RTWldGa1NHRnVaR3hsY2lodGIyUmxiRU5zWVhwNlRtRnRaVG9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHRnplVzVqSUdaMWJtTjBhVzl1SUhKbFlXUkJiR3dvWEc0Z0lDQWdJQ0IwYUdsek9pQmhibmtzWEc0Z0lDQWdJQ0JwWkhNNklITjBjbWx1WjF0ZFhHNGdJQ0FnS1RvZ1VISnZiV2x6WlR4TmIyUmxiRnRkUGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0I3SUdOMGVDd2diRzluSUgwZ1BTQW9YRzRnSUNBZ0lDQWdJR0YzWVdsMElIUm9hWE11Ykc5blEzUjRLRnRkTENCQ2RXeHJRM0oxWkU5d1pYSmhkR2x2Ymt0bGVYTXVVa1ZCUkY5QlRFd3NJSFJ5ZFdVcFhHNGdJQ0FnSUNBcExtWnZjaWh5WldGa1FXeHNLVHRjYmlBZ0lDQWdJR052Ym5OMElHNXZjbTFoYkdsNlpXUkpaSE1nUFNCQmNuSmhlUzVwYzBGeWNtRjVLR2xrY3lrZ1B5QnBaSE1nT2lCYmFXUnpYVHRjYmlBZ0lDQWdJR3hsZENCeVpXRmtPaUJOYjJSbGJGdGRPMXh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ2JHOW5MbVJsWW5WbktHQnlaV0ZrYVc1bklDUjdibTl5YldGc2FYcGxaRWxrYzMwZ0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgxZ0tUdGNiaUFnSUNBZ0lDQWdjbVZoWkNBOUlHRjNZV2wwSUhSb2FYTXVjR1Z5YzJsemRHVnVZMlVvWTNSNEtTNXlaV0ZrUVd4c0tHNXZjbTFoYkdsNlpXUkpaSE1nWVhNZ1lXNTVMQ0JqZEhncE8xeHVJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dkVzVyYm05M2Jpa2dlMXh1SUNBZ0lDQWdJQ0JzYjJjdVpYSnliM0lvWUVaaGFXeGxaQ0IwYnlCeVpXRmtJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlZQ3dnWlNCaGN5QkZjbkp2Y2lrN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCc2IyY3VhVzVtYnloZ2NtVmhaQ0FrZTNKbFlXUXViR1Z1WjNSb2ZTQWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZXQXBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlISmxZV1E3WEc0Z0lDQWdmVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR055WldGMFpVSjFiR3RWY0dSaGRHVklZVzVrYkdWeUtHMXZaR1ZzUTJ4aGVucE9ZVzFsT2lCemRISnBibWNwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZWE41Ym1NZ1puVnVZM1JwYjI0Z2RYQmtZWFJsUVd4c0tGeHVJQ0FnSUNBZ2RHaHBjem9nWVc1NUxGeHVJQ0FnSUNBZ1ltOWtlVG9nWVc1NVcxMHNYRzRnSUNBZ0lDQnlaWE53UHpvZ1lXNTVYRzRnSUNBZ0tUb2dVSEp2YldselpUeGhibmxiWFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZXlCamRIZ3NJR3h2WnlCOUlEMGdLRnh1SUNBZ0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG14dlowTjBlQ2hiWFN3Z1FuVnNhME55ZFdSUGNHVnlZWFJwYjI1TFpYbHpMbFZRUkVGVVJWOUJURXdzSUhSeWRXVXBYRzRnSUNBZ0lDQXBMbVp2Y2loMWNHUmhkR1ZCYkd3cE8xeHVJQ0FnSUNBZ2JHVjBJSFZ3WkdGMFpXUTZJR0Z1ZVZ0ZE8xeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnYkc5bkxtbHVabThvWUhWd1pHRjBhVzVuSUNSN1ltOWtlUzVzWlc1bmRHaDlJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlZQ2s3WEc0Z0lDQWdJQ0FnSUhWd1pHRjBaV1FnUFNCaGQyRnBkQ0IwYUdsekxuQmxjbk5wYzNSbGJtTmxLR04wZUNrdWRYQmtZWFJsUVd4c0tHSnZaSGtzSUdOMGVDazdYRzRnSUNBZ0lDQjlJR05oZEdOb0lDaGxPaUIxYm10dWIzZHVLU0I3WEc0Z0lDQWdJQ0FnSUd4dlp5NWxjbkp2Y2lobElHRnpJRVZ5Y205eUtUdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ1pUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2h5WlhOd0tTQmpkSGd1ZEc5U1pYTndiMjV6WlNoeVpYTndLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjFjR1JoZEdWa08xeHVJQ0FnSUgwN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCamNtVmhkR1ZDZFd4clJHVnNaWFJsU0dGdVpHeGxjaWh0YjJSbGJFTnNZWHA2VG1GdFpUb2djM1J5YVc1bktTQjdYRzRnSUNBZ2NtVjBkWEp1SUdGemVXNWpJR1oxYm1OMGFXOXVJR1JsYkdWMFpVRnNiQ2hjYmlBZ0lDQWdJSFJvYVhNNklHRnVlU3hjYmlBZ0lDQWdJR2xrY3pvZ2MzUnlhVzVuVzEwc1hHNGdJQ0FnSUNCeVpYTndQem9nWVc1NVhHNGdJQ0FnS1RvZ1VISnZiV2x6WlR4TmIyUmxiRnRkUGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0I3SUdOMGVDd2diRzluSUgwZ1BTQW9YRzRnSUNBZ0lDQWdJR0YzWVdsMElIUm9hWE11Ykc5blEzUjRLRnRkTENCQ2RXeHJRM0oxWkU5d1pYSmhkR2x2Ymt0bGVYTXVSRVZNUlZSRlgwRk1UQ3dnZEhKMVpTbGNiaUFnSUNBZ0lDa3VabTl5S0dSbGJHVjBaVUZzYkNrN1hHNGdJQ0FnSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrU1dSeklEMGdRWEp5WVhrdWFYTkJjbkpoZVNocFpITXBJRDhnYVdSeklEb2dXMmxrYzEwN1hHNGdJQ0FnSUNCc1pYUWdjbVZoWkRvZ1RXOWtaV3hiWFR0Y2JpQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJR3h2Wnk1a1pXSjFaeWhnWkdWc1pYUnBibWNnSkh0dWIzSnRZV3hwZW1Wa1NXUnpMbXhsYm1kMGFIMGdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMWdLVHRjYmlBZ0lDQWdJQ0FnY21WaFpDQTlJR0YzWVdsMElIUm9hWE11Y0dWeWMybHpkR1Z1WTJVb1kzUjRLUzVrWld4bGRHVkJiR3dvYm05eWJXRnNhWHBsWkVsa2N5d2dZM1I0S1R0Y2JpQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVNklIVnVhMjV2ZDI0cElIdGNiaUFnSUNBZ0lDQWdiRzluTG1WeWNtOXlLR0JHWVdsc1pXUWdkRzhnWkdWc1pYUmxJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlZQ3dnWlNCaGN5QkZjbkp2Y2lrN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCc2IyY3VhVzVtYnloZ1pHVnNaWFJsWkNBa2UzSmxZV1F1YkdWdVozUm9mU0FrZTIxdlpHVnNRMnhoZW5wT1lXMWxmV0FwTzF4dUlDQWdJQ0FnYVdZZ0tISmxjM0FwSUdOMGVDNTBiMUpsYzNCdmJuTmxLSEpsYzNBcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUhKbFlXUTdYRzRnSUNBZ2ZUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHTnlaV0YwWlZKbFlXUklZVzVrYkdWeUtGeHVJQ0FnSUdkbGRGQkxPaUFvTGk0dWNEb2dRWEp5WVhrOGMzUnlhVzVuSUh3Z2JuVnRZbVZ5UGlrZ1BUNGdjM1J5YVc1bkxGeHVJQ0FnSUcxdlpHVnNRMnhoZW5wT1lXMWxPaUJ6ZEhKcGJtZGNiaUFnS1NCN1hHNGdJQ0FnY21WMGRYSnVJR0Z6ZVc1aklHWjFibU4wYVc5dUlISmxZV1FvWEc0Z0lDQWdJQ0IwYUdsek9pQmhibmtzWEc0Z0lDQWdJQ0J5YjNWMFpWQmhjbUZ0Y3pvZ1lXNTVYRzRnSUNBZ0tUb2dVSEp2YldselpUeE5iMlJsYkQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZXlCamRIZ3NJR3h2WnlCOUlEMGdLRnh1SUNBZ0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG14dlowTjBlQ2hiWFN3Z1QzQmxjbUYwYVc5dVMyVjVjeTVTUlVGRUxDQjBjblZsS1Z4dUlDQWdJQ0FnS1M1bWIzSW9jbVZoWkNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JwWkNBOUlHZGxkRkJMS0M0dUxuSnZkWFJsVUdGeVlXMXpMblpoYkhWbGMwbHVUM0prWlhJcE8xeHVJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnBaQ0E5UFQwZ1hDSjFibVJsWm1sdVpXUmNJaWxjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZaaGJHbGtZWFJwYjI1RmNuSnZjaWhnVG04Z0pIdDBhR2x6TG5CcmZTQndjbTkyYVdSbFpHQXBPMXh1SUNBZ0lDQWdiR1YwSUhKbFlXUlNaWE4xYkhRNklFMXZaR1ZzTzF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdiRzluTG1SbFluVm5LR0J5WldGa2FXNW5JQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlJSGRwZEdnZ0pIdDBhR2x6TG5CcmZTQWtlMmxrZldBcE8xeHVJQ0FnSUNBZ0lDQnlaV0ZrVW1WemRXeDBJRDBnWVhkaGFYUWdkR2hwY3k1d1pYSnphWE4wWlc1alpTaGpkSGdwTG5KbFlXUW9hV1FzSUdOMGVDazdYRzRnSUNBZ0lDQjlJR05oZEdOb0lDaGxPaUIxYm10dWIzZHVLU0I3WEc0Z0lDQWdJQ0FnSUd4dlp5NWxjbkp2Y2loZ1JtRnBiR1ZrSUhSdklISmxZV1FnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnZDJsMGFDQnBaQ0FrZTJsa2ZXQXNJR1VnWVhNZ1JYSnliM0lwTzF4dUlDQWdJQ0FnSUNCMGFISnZkeUJsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYkc5bkxtbHVabThvWUhKbFlXUWdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdkMmwwYUNCcFpDQWtleWh5WldGa1VtVnpkV3gwSUdGeklHRnVlU2xiZEdocGN5NXdhMTE5WUNrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnY21WaFpGSmxjM1ZzZER0Y2JpQWdJQ0I5TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWTNKbFlYUmxWWEJrWVhSbFNHRnVaR3hsY2loY2JpQWdJQ0JuWlhSUVN6b2dLQzR1TG5BNklFRnljbUY1UEhOMGNtbHVaeUI4SUc1MWJXSmxjajRwSUQwK0lITjBjbWx1Wnl4Y2JpQWdJQ0JOYjJSbGJFTnZibk4wY2pvZ1RXOWtaV3hEYjI1emRISjFZM1J2Y2p4aGJuaytMRnh1SUNBZ0lHMXZaR1ZzUTJ4aGVucE9ZVzFsT2lCemRISnBibWRjYmlBZ0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUdGemVXNWpJR1oxYm1OMGFXOXVJSFZ3WkdGMFpTaGNiaUFnSUNBZ0lIUm9hWE02SUdGdWVTeGNiaUFnSUNBZ0lISnZkWFJsVUdGeVlXMXpPaUJoYm5rc1hHNGdJQ0FnSUNCaWIyUjVPaUJoYm5rc1hHNGdJQ0FnSUNCeVpYTndQem9nWVc1NVhHNGdJQ0FnS1RvZ1VISnZiV2x6WlR4aGJuaytJSHRjYmlBZ0lDQWdJR052Ym5OMElIc2dZM1I0TENCc2IyY2dmU0E5SUNoY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZEdocGN5NXNiMmREZEhnb1cxMHNJRTl3WlhKaGRHbHZia3RsZVhNdVZWQkVRVlJGTENCMGNuVmxLVnh1SUNBZ0lDQWdLUzVtYjNJb2RYQmtZWFJsS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR2xrSUQwZ1oyVjBVRXNvTGk0dWNtOTFkR1ZRWVhKaGJYTXVkbUZzZFdWelNXNVBjbVJsY2lrN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHbGtJRDA5UFNCY0luVnVaR1ZtYVc1bFpGd2lLVnh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnVm1Gc2FXUmhkR2x2YmtWeWNtOXlLR0JPYnlBa2UzUm9hWE11Y0d0OUlIQnliM1pwWkdWa1lDazdYRzRnSUNBZ0lDQnNaWFFnZFhCa1lYUmxaRG9nWVc1NU8xeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnYkc5bkxtbHVabThvWUhWd1pHRjBhVzVuSUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5SUhkcGRHZ2dKSHQwYUdsekxuQnJmU0FrZTJsa2ZXQXBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndZWGxzYjJGa0lEMGdTbE5QVGk1d1lYSnpaU2hLVTA5T0xuTjBjbWx1WjJsbWVTaGliMlI1S1NrN1hHNGdJQ0FnSUNBZ0lIVndaR0YwWldRZ1BTQmhkMkZwZENCMGFHbHpMbkJsY25OcGMzUmxibU5sS0dOMGVDa3VkWEJrWVhSbEtGeHVJQ0FnSUNBZ0lDQWdJRzVsZHlCTmIyUmxiRU52Ym5OMGNpaDdJQzR1TG5CaGVXeHZZV1FzSUZ0MGFHbHpMbkJyWFRvZ2FXUWdmU2tzWEc0Z0lDQWdJQ0FnSUNBZ1kzUjRYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5SUdOaGRHTm9JQ2hsT2lCMWJtdHViM2R1S1NCN1hHNGdJQ0FnSUNBZ0lHeHZaeTVsY25KdmNpaGxJR0Z6SUVWeWNtOXlLVHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2daVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoeVpYTndLU0JqZEhndWRHOVNaWE53YjI1elpTaHlaWE53S1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUIxY0dSaGRHVmtPMXh1SUNBZ0lIMDdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5QmpjbVZoZEdWRVpXeGxkR1ZJWVc1a2JHVnlLRnh1SUNBZ0lHZGxkRkJMT2lBb0xpNHVjRG9nUVhKeVlYazhjM1J5YVc1bklId2diblZ0WW1WeVBpa2dQVDRnYzNSeWFXNW5MRnh1SUNBZ0lHMXZaR1ZzUTJ4aGVucE9ZVzFsT2lCemRISnBibWRjYmlBZ0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUdGemVXNWpJR1oxYm1OMGFXOXVJSEpsYlc5MlpTaGNiaUFnSUNBZ0lIUm9hWE02SUdGdWVTeGNiaUFnSUNBZ0lISnZkWFJsVUdGeVlXMXpPaUJoYm5rc1hHNGdJQ0FnSUNCeVpYTndQem9nWVc1NVhHNGdJQ0FnS1RvZ1VISnZiV2x6WlR4TmIyUmxiRDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdleUJqZEhnc0lHeHZaeUI5SUQwZ0tGeHVJQ0FnSUNBZ0lDQmhkMkZwZENCMGFHbHpMbXh2WjBOMGVDaGJYU3dnVDNCbGNtRjBhVzl1UzJWNWN5NUVSVXhGVkVVc0lIUnlkV1VwWEc0Z0lDQWdJQ0FwTG1admNpaHlaVzF2ZG1VcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYVdRZ1BTQm5aWFJRU3lndUxpNXliM1YwWlZCaGNtRnRjeTUyWVd4MVpYTkpiazl5WkdWeUtUdGNiaUFnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdhV1FnUFQwOUlGd2lkVzVrWldacGJtVmtYQ0lwWEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCV1lXeHBaR0YwYVc5dVJYSnliM0lvWUU1dklDUjdkR2hwY3k1d2EzMGdjSEp2ZG1sa1pXUmdLVHRjYmlBZ0lDQWdJR3hsZENCa1pXdzZJRTF2WkdWc08xeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnYkc5bkxtUmxZblZuS0dCa1pXeGxkR2x1WnlBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlNCM2FYUm9JQ1I3ZEdocGN5NXdhMzBnSkh0cFpIMWdLVHRjYmlBZ0lDQWdJQ0FnWkdWc0lEMGdZWGRoYVhRZ2RHaHBjeTV3WlhKemFYTjBaVzVqWlNoamRIZ3BMbVJsYkdWMFpTaHBaQ3dnWTNSNEtUdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVTZJSFZ1YTI1dmQyNHBJSHRjYmlBZ0lDQWdJQ0FnYkc5bkxtVnljbTl5S0dCR1lXbHNaV1FnZEc4Z1pHVnNaWFJsSUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5SUhkcGRHZ2dhV1FnSkh0cFpIMWdMQ0JsSUdGeklFVnljbTl5S1R0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUd4dlp5NXBibVp2S0dCa1pXeGxkR1ZrSUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5SUhkcGRHZ2dhV1FnSkh0cFpIMWdLVHRjYmlBZ0lDQWdJR2xtSUNoeVpYTndLU0JqZEhndWRHOVNaWE53YjI1elpTaHlaWE53S1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJrWld3N1hHNGdJQ0FnZlR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdOeVpXRjBaVk4wWVhSbGJXVnVkRWhoYm1Sc1pYSW9iVzlrWld4RGJHRjZlazVoYldVNklITjBjbWx1WnlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJoYzNsdVl5Qm1kVzVqZEdsdmJpQnpkR0YwWlcxbGJuUW9YRzRnSUNBZ0lDQjBhR2x6T2lCaGJua3NYRzRnSUNBZ0lDQnVZVzFsT2lCemRISnBibWNzWEc0Z0lDQWdJQ0JoY21kek9pQW9jM1J5YVc1bklId2diblZ0WW1WeUtWdGRMRnh1SUNBZ0lDQWdaR1YwWVdsc2N6b2dSR2x5WldOMGFXOXVUR2x0YVhSUFptWnpaWFJjYmlBZ0lDQXBPaUJRY205dGFYTmxQR0Z1ZVQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZXlCamRIZ2dmU0E5SUNoY2JpQWdJQ0FnSUNBZ1lYZGhhWFFnZEdocGN5NXNiMmREZEhnb1cxMHNJRkJsY25OcGMzUmxibU5sUzJWNWN5NVRWRUZVUlUxRlRsUXNJSFJ5ZFdVcFhHNGdJQ0FnSUNBcExtWnZjaWh6ZEdGMFpXMWxiblFwTzF4dUlDQWdJQ0FnWTI5dWMzUWdleUJrYVhKbFkzUnBiMjRzSUc5bVpuTmxkQ3dnYkdsdGFYUXNJR0p2YjJ0dFlYSnJJSDBnUFNCa1pYUmhhV3h6TzF4dUlDQWdJQ0FnWVhKbmN5QTlJR0Z5WjNNdWJXRndLRnh1SUNBZ0lDQWdJQ0FvWVNrZ1BUNGdLSFI1Y0dWdlppQmhJRDA5UFNCY0luTjBjbWx1WjF3aUlEOGdjR0Z5YzJWSmJuUW9ZU0JoY3lCemRISnBibWNwSURvZ1lTa2dmSHdnWVZ4dUlDQWdJQ0FnS1NCaGN5QmhibmxiWFR0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJoZEdoRWFYSmxZM1JwYjI0Z1BTQmhjbWR6TG14bGJtZDBhQ0ErSURFZ1B5QmhjbWR6V3pGZElEb2dkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdZMjl1YzNRZ2NtVnpiMngyWldSRWFYSmxZM1JwYjI0Z1BTQW9aR2x5WldOMGFXOXVJRDgvSUhCaGRHaEVhWEpsWTNScGIyNHBJR0Z6WEc0Z0lDQWdJQ0FnSUh3Z2MzUnlhVzVuWEc0Z0lDQWdJQ0FnSUh3Z2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUNBZ2FXWWdLSEpsYzI5c2RtVmtSR2x5WldOMGFXOXVJQ1ltSUdGeVozTXViR1Z1WjNSb0lENGdNU2tnWVhKbmMxc3hYU0E5SUhKbGMyOXNkbVZrUkdseVpXTjBhVzl1TzF4dUlDQWdJQ0FnYzNkcGRHTm9JQ2h1WVcxbEtTQjdYRzRnSUNBZ0lDQWdJR05oYzJVZ1VISmxjR0Z5WldSVGRHRjBaVzFsYm5STFpYbHpMa1pKVGtRNlhHNGdJQ0FnSUNBZ0lHTmhjMlVnVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxrWkpUa1JmUWxrNlhHNGdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxreEpVMVJmUWxrNlhHNGdJQ0FnSUNBZ0lDQWdZWEpuY3k1d2RYTm9LR1JwY21WamRHbHZiaUJoY3lCemRISnBibWNwTzF4dUlDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNCallYTmxJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1UVFVZEZPbHh1SUNBZ0lDQWdJQ0JqWVhObElGQnlaWEJoY21Wa1UzUmhkR1Z0Wlc1MFMyVjVjeTVRUVVkRlgwSlpPbHh1SUNBZ0lDQWdJQ0FnSUdGeVozTWdQU0JiWEc0Z0lDQWdJQ0FnSUNBZ0lDQmhjbWR6V3pCZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WemIyeDJaV1JFYVhKbFkzUnBiMjRnWVhNZ1lXNTVMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2V5QnNhVzFwZEN3Z2IyWm1jMlYwTENCaWIyOXJiV0Z5YXlCOUxGeHVJQ0FnSUNBZ0lDQWdJRjA3WEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGtaSlRrUmZUMDVGWDBKWk9seHVJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NURUMVZPVkY5UFJqcGNiaUFnSUNBZ0lDQWdZMkZ6WlNCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXVUVUZZWDA5R09seHVJQ0FnSUNBZ0lDQmpZWE5sSUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NU5TVTVmVDBZNlhHNGdJQ0FnSUNBZ0lHTmhjMlVnVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxrRldSMTlQUmpwY2JpQWdJQ0FnSUNBZ1kyRnpaU0JRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVUxVk5YMDlHT2x4dUlDQWdJQ0FnSUNCallYTmxJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1RVNWTlVTVTVEVkY5UFJqcGNiaUFnSUNBZ0lDQWdZMkZ6WlNCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXVSMUpQVlZCZlQwWTZYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV3WlhKemFYTjBaVzVqWlNoamRIZ3BMbk4wWVhSbGJXVnVkQ2h1WVcxbExDQXVMaTVoY21kekxDQmpkSGdwTzF4dUlDQWdJSDA3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJqY21WaGRHVlRkR0YwWlcxbGJuUlRhRzl5ZEdOMWRFaGhibVJzWlhJb1hHNGdJQ0FnYzNSaGRHVnRaVzUwUzJWNU9pQnpkSEpwYm1jc1hHNGdJQ0FnYlc5a1pXeERiR0Y2ZWs1aGJXVTZJSE4wY21sdVoxeHVJQ0FwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZWE41Ym1NZ1puVnVZM1JwYjI0Z2MzUmhkR1Z0Wlc1MFUyaHZjblJqZFhRb1hHNGdJQ0FnSUNCMGFHbHpPaUJoYm5rc1hHNGdJQ0FnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBZ0lDazZJRkJ5YjIxcGMyVThZVzU1UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0I3SUdOMGVDQjlJRDBnS0Z4dUlDQWdJQ0FnSUNCaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoYlhTd2djM1JoZEdWdFpXNTBTMlY1TENCMGNuVmxLVnh1SUNBZ0lDQWdLUzVtYjNJb2MzUmhkR1Z0Wlc1MFUyaHZjblJqZFhRcE8xeHVYRzRnSUNBZ0lDQnpkMmwwWTJnZ0tITjBZWFJsYldWdWRFdGxlU2tnZTF4dUlDQWdJQ0FnSUNCallYTmxJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1TVNWTlVYMEpaT2lCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1cydGxlU3dnWkdWMFlXbHNjMTBnUFNCaGNtZHpPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuQmxjbk5wYzNSbGJtTmxLR04wZUNrdWJHbHpkRUo1S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdhMlY1TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdLR1JsZEdGcGJITWdZWE1nWVc1NUtUOHVaR2x5WldOMGFXOXVJR0Z6SUU5eVpHVnlSR2x5WldOMGFXOXVMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1kzUjRYRzRnSUNBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmpZWE5sSUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NVFRVWRGWDBKWk9pQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdXMnRsZVN3Z2NHRm5aU3dnWkdWMFlXbHNjMTBnUFNCaGNtZHpPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuQmxjbk5wYzNSbGJtTmxLR04wZUNrdWNHRm5hVzVoZEdWQ2VTaGNiaUFnSUNBZ0lDQWdJQ0FnSUd0bGVTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNoa1pYUmhhV3h6SUdGeklHRnVlU2svTG1ScGNtVmpkR2x2YmlCaGN5QlBjbVJsY2tScGNtVmpkR2x2Yml4Y2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiR2x0YVhRNklDaGtaWFJoYVd4eklHRnpJR0Z1ZVNrL0xteHBiV2wwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J2Wm1aelpYUTZJQ2hrWlhSaGFXeHpJR0Z6SUdGdWVTay9MbTltWm5ObGRDeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NHRm5aU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIMGdZWE1nWVc1NUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTNSNFhHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCallYTmxJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1R1NVNUVPaUI3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnVzNaaGJIVmxMQ0JrWlhSaGFXeHpYU0E5SUdGeVozTTdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdaR2x5WldOMGFXOXVJRDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDaGtaWFJoYVd4eklHRnpJR0Z1ZVNrL0xtUnBjbVZqZEdsdmJpQS9QeUJQY21SbGNrUnBjbVZqZEdsdmJpNUJVME03WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY0dWeWMybHpkR1Z1WTJVZ1BTQjBhR2x6TG5CbGNuTnBjM1JsYm1ObEtHTjBlQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQndaWEp6YVhOMFpXNWpaUzVtYVc1a0lEMDlQU0JjSW1aMWJtTjBhVzl1WENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjR1Z5YzJsemRHVnVZMlV1Wm1sdVpDaDJZV3gxWlN3Z1pHbHlaV04wYVc5dUxDQmpkSGdwTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd1pYSnphWE4wWlc1alpTNXpkR0YwWlcxbGJuUW9VSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGtaSlRrUXNJSFpoYkhWbExDQmthWEpsWTNScGIyNHNJR04wZUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdZMkZ6WlNCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXVVRUZIUlRvZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElGdDJZV3gxWlN3Z1pHVjBZV2xzYzEwZ1BTQmhjbWR6TzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhKbFppQTlJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZERvZ0tHUmxkR0ZwYkhNZ1lYTWdZVzU1S1Q4dWIyWm1jMlYwSUQ4L0lERXNYRzRnSUNBZ0lDQWdJQ0FnSUNCc2FXMXBkRG9nS0dSbGRHRnBiSE1nWVhNZ1lXNTVLVDh1YkdsdGFYUWdQejhnTVRBc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpYjI5cmJXRnlhem9nS0dSbGRHRnBiSE1nWVhNZ1lXNTVLVDh1WW05dmEyMWhjbXNzWEc0Z0lDQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQndaWEp6YVhOMFpXNWpaU0E5SUhSb2FYTXVjR1Z5YzJsemRHVnVZMlVvWTNSNEtUdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmthWEpsWTNScGIyNGdQU0FvWkdWMFlXbHNjeUJoY3lCaGJua3BQeTVrYVhKbFkzUnBiMjRnUHo4Z1QzSmtaWEpFYVhKbFkzUnBiMjR1UVZORE8xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnY0dWeWMybHpkR1Z1WTJVdWNHRm5aU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhCbGNuTnBjM1JsYm1ObExuQmhaMlVvZG1Gc2RXVXNJR1JwY21WamRHbHZiaXdnY21WbUxDQmpkSGdwTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd1pYSnphWE4wWlc1alpTNXpkR0YwWlcxbGJuUW9VSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGxCQlIwVXNJSFpoYkhWbExDQmthWEpsWTNScGIyNHNJSEpsWml3Z1kzUjRLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCallYTmxJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1R1NVNUVYMDlPUlY5Q1dUb2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRnRyWlhrc0lIWmhiSFZsWFNBOUlHRnlaM003WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjR1Z5YzJsemRHVnVZMlVvWTNSNEtTNW1hVzVrVDI1bFFua29hMlY1TENCMllXeDFaU3dnWTNSNEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JqWVhObElGQnlaWEJoY21Wa1UzUmhkR1Z0Wlc1MFMyVjVjeTVHU1U1RVgwSlpPaUI3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnVzJ0bGVTd2dkbUZzZFdWZElEMGdZWEpuY3p0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV3WlhKemFYTjBaVzVqWlNoamRIZ3BYRzRnSUNBZ0lDQWdJQ0FnSUNBdVptOXlLR04wZUM1MGIwOTJaWEp5YVdSbGN5Z3BLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0xtWnBibVJDZVNoclpYa3NJSFpoYkhWbExDQmpkSGdwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoZEdWdFpXNTBTMlY1SUQwOVBTQlFjbVZ3WVhKbFpGTjBZWFJsYldWdWRFdGxlWE11UTA5VlRsUmZUMFlnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4wWVhSbGJXVnVkRXRsZVNBOVBUMGdVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGsxQldGOVBSaUI4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoZEdWdFpXNTBTMlY1SUQwOVBTQlFjbVZ3WVhKbFpGTjBZWFJsYldWdWRFdGxlWE11VFVsT1gwOUdJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkR0YwWlcxbGJuUkxaWGtnUFQwOUlGQnlaWEJoY21Wa1UzUmhkR1Z0Wlc1MFMyVjVjeTVCVmtkZlQwWWdmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lITjBZWFJsYldWdWRFdGxlU0E5UFQwZ1VISmxjR0Z5WldSVGRHRjBaVzFsYm5STFpYbHpMbE5WVFY5UFJpQjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MzUmhkR1Z0Wlc1MFMyVjVJRDA5UFNCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXVSRWxUVkVsT1ExUmZUMFlnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4wWVhSbGJXVnVkRXRsZVNBOVBUMGdVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGtkU1QxVlFYMDlHWEc0Z0lDQWdJQ0FnSUNBZ0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JiWm1sbGJHUmRJRDBnWVhKbmN6dGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuQmxjbk5wYzNSbGJtTmxLR04wZUNrdWMzUmhkR1Z0Wlc1MEtITjBZWFJsYldWdWRFdGxlU3dnWm1sbGJHUXNJR04wZUNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhnVlc1cmJtOTNiaUJ6ZEdGMFpXMWxiblE2SUNSN2MzUmhkR1Z0Wlc1MFMyVjVmV0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDA3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJqY21WaGRHVkRiMjF3YkdWNFVYVmxjbmxJWVc1a2JHVnlLRzFsZEdodlpFNWhiV1U2SUhOMGNtbHVaeWtnZTF4dUlDQWdJSEpsZEhWeWJpQmhjM2x1WXlCbWRXNWpkR2x2YmlCamIyMXdiR1Y0VVhWbGNua29YRzRnSUNBZ0lDQjBhR2x6T2lCaGJua3NYRzRnSUNBZ0lDQXVMaTVoY21kek9pQmhibmxiWFZ4dUlDQWdJQ2s2SUZCeWIyMXBjMlU4WVc1NVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCc2IyYzZJR0Z1ZVNBOUlIUm9hWE11Ykc5blB5NW1iM0kvTGloamIyMXdiR1Y0VVhWbGNua3BPMXh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR3h2WnlrZ2JHOW5MbVJsWW5WbktHQkpiblp2YTJsdVp5QmpkWE4wYjIwZ2NYVmxjbmtnWENJa2UyMWxkR2h2WkU1aGJXVjlYQ0pnS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnZXlCamRIZ2dmU0E5SUNoY2JpQWdJQ0FnSUNBZ0lDQmhkMkZwZENCMGFHbHpMbXh2WjBOMGVDaGJYU3dnYldWMGFHOWtUbUZ0WlN3Z2RISjFaU2xjYmlBZ0lDQWdJQ0FnS1M1bWIzSW9ZMjl0Y0d4bGVGRjFaWEo1S1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY0dWeWMybHpkR1Z1WTJVZ1BTQjBhR2x6TG5CbGNuTnBjM1JsYm1ObEtHTjBlQ2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSE53Y21WaFpFRnlaM01nUFNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtVjRkSEpoWTNSUmRXVnllVUZ5WjNNb1lYSm5jeWs3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NHVnljMmx6ZEdWdVkyVmJiV1YwYUc5a1RtRnRaVjBnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd1pYSnphWE4wWlc1alpWdHRaWFJvYjJST1lXMWxYU2d1TGk1emNISmxZV1JCY21kekxDQmpkSGdwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdjR1Z5YzJsemRHVnVZMlV1YzNSaGRHVnRaVzUwSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NHVnljMmx6ZEdWdVkyVXVjM1JoZEdWdFpXNTBLRzFsZEdodlpFNWhiV1VzSUM0dUxuTndjbVZoWkVGeVozTXNJR04wZUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQWdJR0JRWlhKemFYTjBaVzVqWlNCdFpYUm9iMlFnWENJa2UyMWxkR2h2WkU1aGJXVjlYQ0lnYm05MElHWnZkVzVrSUc5dUlDUjdjR1Z5YzJsemRHVnVZMlUvTG1OdmJuTjBjblZqZEc5eVB5NXVZVzFsZldCY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVTZJR0Z1ZVNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYkc5bktTQnNiMmN1WlhKeWIzSW9ZRU4xYzNSdmJTQnhkV1Z5ZVNCY0lpUjdiV1YwYUc5a1RtRnRaWDFjSWlCbVlXbHNaV1JnTENCbEtUdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ1pUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ1kzSmxZWFJsUTNWemRHOXRVbTkxZEdWSVlXNWtiR1Z5S0cxbGRHaHZaRTVoYldVNklITjBjbWx1WnlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJoYzNsdVl5Qm1kVzVqZEdsdmJpQmpkWE4wYjIxU2IzVjBaU2hjYmlBZ0lDQWdJSFJvYVhNNklHRnVlU3hjYmlBZ0lDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ0FnS1RvZ1VISnZiV2x6WlR4aGJuaytJSHRjYmlBZ0lDQWdJR052Ym5OMElHeHZaem9nWVc1NUlEMGdkR2hwY3k1c2IyYy9MbVp2Y2o4dUtHTjFjM1J2YlZKdmRYUmxLVHRjYmlBZ0lDQWdJR052Ym5OMElIc2dZM1I0SUgwZ1BTQW9YRzRnSUNBZ0lDQWdJR0YzWVdsMElIUm9hWE11Ykc5blEzUjRLRnRkTENCdFpYUm9iMlJPWVcxbExDQjBjblZsS1Z4dUlDQWdJQ0FnS1M1bWIzSW9ZM1Z6ZEc5dFVtOTFkR1VwTzF4dUlDQWdJQ0FnWTI5dWMzUWdjR1Z5YzJsemRHVnVZMlVnUFNCMGFHbHpMbkJsY25OcGMzUmxibU5sS0dOMGVDazdYRzRnSUNBZ0lDQmpiMjV6ZENCemNISmxZV1JCY21keklEMGdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTVsZUhSeVlXTjBVWFZsY25sQmNtZHpLR0Z5WjNNcE8xeHVYRzRnSUNBZ0lDQXZMeUJVY25rZ2RHaGxJSEJsY25OcGMzUmxibU5sSUdScGNtVmpkR3g1SUNoM2IzSnJjeUIzYUdWdUlHbDBKM01nWVNCamRYTjBiMjBnVW1Wd2IzTnBkRzl5ZVNsY2JpQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NHVnljMmx6ZEdWdVkyVmJiV1YwYUc5a1RtRnRaVjBnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY0dWeWMybHpkR1Z1WTJWYmJXVjBhRzlrVG1GdFpWMG9MaTR1YzNCeVpXRmtRWEpuY3l3Z1kzUjRLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJQzh2SUZkb1pXNGdjR1Z5YzJsemRHVnVZMlVnYVhNZ1lTQk5iMlJsYkZObGNuWnBZMlVzSUhSb1pTQnRaWFJvYjJRZ2JHbDJaWE1nYjI0Z2RHaGxJSFZ1WkdWeWJIbHBibWNnY21Wd2IxeHVJQ0FnSUNBZ2FXWWdLSEJsY25OcGMzUmxibU5sUHk1eVpYQnZJQ1ltSUhSNWNHVnZaaUJ3WlhKemFYTjBaVzVqWlM1eVpYQnZXMjFsZEdodlpFNWhiV1ZkSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhCbGNuTnBjM1JsYm1ObExuSmxjRzliYldWMGFHOWtUbUZ0WlYwb0xpNHVjM0J5WldGa1FYSm5jeXdnWTNSNEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lDOHZJRVpoYkd3Z1ltRmpheUIwYnlCemRHRjBaVzFsYm5RZ1oyRjBaWGRoZVZ4dUlDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCd1pYSnphWE4wWlc1alpTNXpkR0YwWlcxbGJuUWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdjR1Z5YzJsemRHVnVZMlV1YzNSaGRHVnRaVzUwS0cxbGRHaHZaRTVoYldVc0lDNHVMbk53Y21WaFpFRnlaM01zSUdOMGVDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lHQk5aWFJvYjJRZ1hDSWtlMjFsZEdodlpFNWhiV1Y5WENJZ2JtOTBJR1p2ZFc1a0lHOXVJQ1I3Y0dWeWMybHpkR1Z1WTJVL0xtTnZibk4wY25WamRHOXlQeTV1WVcxbGZTQnZjaUJwZEhNZ2NtVndiMkJjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR1Y0ZEhKaFkzUlJkV1Z5ZVVGeVozTW9ZWEpuY3pvZ1lXNTVXMTBwT2lCaGJubGJYU0I3WEc0Z0lDQWdhV1lnS0dGeVozTXViR1Z1WjNSb0lEMDlQU0F3S1NCeVpYUjFjbTRnWVhKbmN6dGNiaUFnSUNCamIyNXpkQ0JzWVhOMElEMGdZWEpuYzF0aGNtZHpMbXhsYm1kMGFDQXRJREZkTzF4dUlDQWdJR2xtSUNoY2JpQWdJQ0FnSUd4aGMzUWdKaVpjYmlBZ0lDQWdJSFI1Y0dWdlppQnNZWE4wSUQwOVBTQmNJbTlpYW1WamRGd2lJQ1ltWEc0Z0lDQWdJQ0FoUVhKeVlYa3VhWE5CY25KaGVTaHNZWE4wS1Z4dUlDQWdJQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjWFZsY25sUFltb2dQU0JoY21kekxuQnZjQ2dwTzF4dUlDQWdJQ0FnWTI5dWMzUWdhR0Z6UkdseVpXTjBhVzl1SUQwZ2NYVmxjbmxQWW1vdVpHbHlaV04wYVc5dUlDRTlQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0JqYjI1emRDQm9ZWE5NYVcxcGRDQTlJSEYxWlhKNVQySnFMbXhwYldsMElDRTlQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0JqYjI1emRDQm9ZWE5QWm1aelpYUWdQU0J4ZFdWeWVVOWlhaTV2Wm1aelpYUWdJVDA5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0FnSUdsbUlDZ2hhR0Z6UkdseVpXTjBhVzl1SUNZbUlDRm9ZWE5NYVcxcGRDQW1KaUFoYUdGelQyWm1jMlYwS1NCeVpYUjFjbTRnWVhKbmN6dGNiaUFnSUNBZ0lHTnZibk4wSUdWNGRISmhjem9nWVc1NVcxMGdQU0JiWFR0Y2JpQWdJQ0FnSUdsbUlDaG9ZWE5FYVhKbFkzUnBiMjRwSUdWNGRISmhjeTV3ZFhOb0tIRjFaWEo1VDJKcUxtUnBjbVZqZEdsdmJpazdYRzRnSUNBZ0lDQmxiSE5sSUdsbUlDaG9ZWE5NYVcxcGRDQjhmQ0JvWVhOUFptWnpaWFFwSUdWNGRISmhjeTV3ZFhOb0tIVnVaR1ZtYVc1bFpDazdYRzRnSUNBZ0lDQnBaaUFvYUdGelRHbHRhWFFwSUdWNGRISmhjeTV3ZFhOb0tIRjFaWEo1VDJKcUxteHBiV2wwS1R0Y2JpQWdJQ0FnSUdsbUlDaG9ZWE5QWm1aelpYUXBJR1Y0ZEhKaGN5NXdkWE5vS0hGMVpYSjVUMkpxTG05bVpuTmxkQ2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdXeTR1TG1GeVozTXNJQzR1TG1WNGRISmhjMTA3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCaGNtZHpPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdZM0psWVhSbFEzSmxZWFJsUkdWamIzSmhkRzl5Y3loY2JpQWdJQ0JOYjJSbGJFTnZibk4wY2pvZ1RXOWtaV3hEYjI1emRISjFZM1J2Y2p4aGJuaytMRnh1SUNBZ0lHMXZaR1ZzUTJ4aGVucE9ZVzFsT2lCemRISnBibWRjYmlBZ0tUb2dRWEp5WVhrOEtIUmhjbWRsZERvZ1lXNTVMQ0JyWlhrNklITjBjbWx1Wnl3Z1pHVnpZem9nWVc1NUtTQTlQaUIyYjJsa1BpQjdYRzRnSUNBZ2NtVjBkWEp1SUZ0Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJrWnliMjFOYjJSbGJDaE5iMlJsYkVOdmJuTjBjaXdnWENKUVQxTlVYQ0lwTEZ4dUlDQWdJQ0FnUVhCcFQzQmxjbUYwYVc5dUtIc2djM1Z0YldGeWVUb2dZRU55WldGMFpTQmhJRzVsZHlBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlM1Z0lIMHBMRnh1SUNBZ0lDQWdRWEJwUW05a2VTaDdYRzRnSUNBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lCZ1VHRjViRzloWkNCbWIzSWdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMWdMRnh1SUNBZ0lDQWdJQ0IwZVhCbE9pQkVkRzlHYjNJb1QzQmxjbUYwYVc5dVMyVjVjeTVEVWtWQlZFVXNJRTF2WkdWc1EyOXVjM1J5S1N4Y2JpQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ1FYQnBRM0psWVhSbFpGSmxjM0J2Ym5ObEtIdGNiaUFnSUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUdBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlNCamNtVmhkR1ZrSUhOMVkyTmxjM05tZFd4c2VTNWdMRnh1SUNBZ0lDQWdJQ0J6WTJobGJXRTZJSHNnSkhKbFpqb2daMlYwVTJOb1pXMWhVR0YwYUNoTmIyUmxiRU52Ym5OMGNpa2dmU3hjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJQ0FnUVhCcFFtRmtVbVZ4ZFdWemRGSmxjM0J2Ym5ObEtIc2daR1Z6WTNKcGNIUnBiMjQ2SUZ3aVVHRjViRzloWkNCMllXeHBaR0YwYVc5dUlHWmhhV3hsWkM1Y0lpQjlLU3hjYmlBZ0lDQWdJRUZ3YVZWdWNISnZZMlZ6YzJGaWJHVkZiblJwZEhsU1pYTndiMjV6WlNoN1hHNGdJQ0FnSUNBZ0lHUmxjMk55YVhCMGFXOXVPaUJjSWxKbGNHOXphWFJ2Y25rZ2NtVnFaV04wWldRZ2RHaGxJSEJ5YjNacFpHVmtJSEJoZVd4dllXUXVYQ0lzWEc0Z0lDQWdJQ0I5S1N4Y2JpQWdJQ0JkTzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWW5Wc2EwTnlaV0YwWlVSbFkyOXlZWFJ2Y25Nb1hHNGdJQ0FnVFc5a1pXeERiMjV6ZEhJNklFMXZaR1ZzUTI5dWMzUnlkV04wYjNJOFlXNTVQaXhjYmlBZ0lDQnRiMlJsYkVOc1lYcDZUbUZ0WlRvZ2MzUnlhVzVuWEc0Z0lDazZJRUZ5Y21GNVBDaDBZWEpuWlhRNklHRnVlU3dnYTJWNU9pQnpkSEpwYm1jc0lHUmxjMk02SUdGdWVTa2dQVDRnZG05cFpENGdlMXh1SUNBZ0lISmxkSFZ5YmlCYlhHNGdJQ0FnSUNCQmNHbFBjR1Z5WVhScGIyNUdjbTl0VFc5a1pXd29UVzlrWld4RGIyNXpkSElzSUZ3aVVFOVRWRndpTENCY0ltSjFiR3RjSWlrc1hHNGdJQ0FnSUNCQmNHbFBjR1Z5WVhScGIyNG9leUJ6ZFcxdFlYSjVPaUJnUTNKbFlYUmxJR0VnYm1WM0lDUjdiVzlrWld4RGJHRjZlazVoYldWOUxtQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsQ2IyUjVLSHRjYmlBZ0lDQWdJQ0FnWkdWelkzSnBjSFJwYjI0NklHQlFZWGxzYjJGa0lHWnZjaUFrZTIxdlpHVnNRMnhoZW5wT1lXMWxmV0FzWEc0Z0lDQWdJQ0FnSUhOamFHVnRZVG9nZTF4dUlDQWdJQ0FnSUNBZ0lIUjVjR1U2SUZ3aVlYSnlZWGxjSWl4Y2JpQWdJQ0FnSUNBZ0lDQnBkR1Z0Y3pvZ2V5QWtjbVZtT2lCblpYUlRZMmhsYldGUVlYUm9LRTF2WkdWc1EyOXVjM1J5S1NCOUxGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsRGNtVmhkR1ZrVW1WemNHOXVjMlVvZTF4dUlDQWdJQ0FnSUNCa1pYTmpjbWx3ZEdsdmJqb2dZQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlJR055WldGMFpXUWdjM1ZqWTJWemMyWjFiR3g1TG1Bc1hHNGdJQ0FnSUNBZ0lITmphR1Z0WVRvZ2UxeHVJQ0FnSUNBZ0lDQWdJSFI1Y0dVNklGd2lZWEp5WVhsY0lpeGNiaUFnSUNBZ0lDQWdJQ0JwZEdWdGN6b2dleUFrY21WbU9pQm5aWFJUWTJobGJXRlFZWFJvS0UxdlpHVnNRMjl1YzNSeUtTQjlMRnh1SUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNCQmNHbENZV1JTWlhGMVpYTjBVbVZ6Y0c5dWMyVW9leUJrWlhOamNtbHdkR2x2YmpvZ1hDSlFZWGxzYjJGa0lIWmhiR2xrWVhScGIyNGdabUZwYkdWa0xsd2lJSDBwTEZ4dUlDQWdJQ0FnUVhCcFZXNXdjbTlqWlhOellXSnNaVVZ1ZEdsMGVWSmxjM0J2Ym5ObEtIdGNiaUFnSUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUZ3aVVtVndiM05wZEc5eWVTQnlaV3BsWTNSbFpDQjBhR1VnY0hKdmRtbGtaV1FnY0dGNWJHOWhaQzVjSWl4Y2JpQWdJQ0FnSUgwcExGeHVJQ0FnSUYwN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCaWRXeHJVbVZoWkVSbFkyOXlZWFJ2Y25Nb1hHNGdJQ0FnVFc5a1pXeERiMjV6ZEhJNklFMXZaR1ZzUTI5dWMzUnlkV04wYjNJOFlXNTVQaXhjYmlBZ0lDQnRiMlJsYkVOc1lYcDZUbUZ0WlRvZ2MzUnlhVzVuWEc0Z0lDazZJRUZ5Y21GNVBDaDBZWEpuWlhRNklHRnVlU3dnYTJWNU9pQnpkSEpwYm1jc0lHUmxjMk02SUdGdWVTa2dQVDRnZG05cFpENGdlMXh1SUNBZ0lISmxkSFZ5YmlCYlhHNGdJQ0FnSUNCQmNHbFBjR1Z5WVhScGIyNUdjbTl0VFc5a1pXd29UVzlrWld4RGIyNXpkSElzSUZ3aVIwVlVYQ0lzSUZ3aVluVnNhMXdpS1N4Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJpaDdJSE4xYlcxaGNuazZJR0JTWlhSeWFXVjJaU0FrZTIxdlpHVnNRMnhoZW5wT1lXMWxmU0J5WldOdmNtUnpJR0o1SUdsa2N5NWdJSDBwTEZ4dUlDQWdJQ0FnUVhCcFVYVmxjbmtvZXlCdVlXMWxPaUJjSW1sa2Mxd2lMQ0J5WlhGMWFYSmxaRG9nZEhKMVpTd2dkSGx3WlRvZ1hDSmhjbkpoZVZ3aUlIMHBMRnh1SUNBZ0lDQWdRWEJwVDJ0U1pYTndiMjV6WlNoN1hHNGdJQ0FnSUNBZ0lHUmxjMk55YVhCMGFXOXVPaUJnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnY21WMGNtbGxkbVZrSUhOMVkyTmxjM05tZFd4c2VTNWdMRnh1SUNBZ0lDQWdJQ0J6WTJobGJXRTZJSHRjYmlBZ0lDQWdJQ0FnSUNCMGVYQmxPaUJjSW1GeWNtRjVYQ0lzWEc0Z0lDQWdJQ0FnSUNBZ2FYUmxiWE02SUhzZ0pISmxaam9nWjJWMFUyTm9aVzFoVUdGMGFDaE5iMlJsYkVOdmJuTjBjaWtnZlN4Y2JpQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lIMHBMRnh1SUNBZ0lDQWdRWEJwVG05MFJtOTFibVJTWlhOd2IyNXpaU2g3WEc0Z0lDQWdJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmdUbThnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnY21WamIzSmtJRzFoZEdOb1pYTWdkR2hsSUhCeWIzWnBaR1ZrSUdsa1pXNTBhV1pwWlhJdVlDeGNiaUFnSUNBZ0lIMHBMRnh1SUNBZ0lGMDdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5QmlkV3hyVlhCa1lYUmxSR1ZqYjNKaGRHOXljeWhjYmlBZ0lDQk5iMlJsYkVOdmJuTjBjam9nVFc5a1pXeERiMjV6ZEhKMVkzUnZjanhoYm5rK0xGeHVJQ0FnSUcxdlpHVnNRMnhoZW5wT1lXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ1lYQnBVSEp2Y0dWeWRHbGxjem9nUkdWallXWkJjR2xRY205d1pYSjBlVnRkWEc0Z0lDazZJRUZ5Y21GNVBDaDBZWEpuWlhRNklHRnVlU3dnYTJWNU9pQnpkSEpwYm1jc0lHUmxjMk02SUdGdWVTa2dQVDRnZG05cFpENGdlMXh1SUNBZ0lISmxkSFZ5YmlCYlhHNGdJQ0FnSUNCQmNHbFBjR1Z5WVhScGIyNUdjbTl0VFc5a1pXd29UVzlrWld4RGIyNXpkSElzSUZ3aVVGVlVYQ0lzSUZ3aVluVnNhMXdpS1N4Y2JpQWdJQ0FnSUVGd2FWQmhjbUZ0YzBaeWIyMU5iMlJsYkNoaGNHbFFjbTl3WlhKMGFXVnpLU3hjYmlBZ0lDQWdJRUZ3YVU5d1pYSmhkR2x2YmloN1hHNGdJQ0FnSUNBZ0lITjFiVzFoY25rNklHQlNaWEJzWVdObElHVjRhWE4wYVc1bklDUjdiVzlrWld4RGJHRjZlazVoYldWOUlISmxZMjl5WkhNZ2QybDBhQ0J1WlhjZ2NHRjViRzloWkhNdVlDeGNiaUFnSUNBZ0lIMHBMRnh1SUNBZ0lDQWdRWEJwUW05a2VTaDdYRzRnSUNBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lCZ1VHRjViRzloWkNCbWIzSWdjbVZ3YkdGamFXNW5JR1Y0YVhOMGFXNW5JSEpsWTI5eVpITWdiMllnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDFnTEZ4dUlDQWdJQ0FnSUNCelkyaGxiV0U2SUh0Y2JpQWdJQ0FnSUNBZ0lDQjBlWEJsT2lCY0ltRnljbUY1WENJc1hHNGdJQ0FnSUNBZ0lDQWdKSEpsWmpvZ1oyVjBVMk5vWlcxaFVHRjBhQ2hFZEc5R2IzSW9UM0JsY21GMGFXOXVTMlY1Y3k1VlVFUkJWRVVzSUUxdlpHVnNRMjl1YzNSeUtTa3NYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0I5S1N4Y2JpQWdJQ0FnSUVGd2FVOXJVbVZ6Y0c5dWMyVW9lMXh1SUNBZ0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1lDUjdiVzlrWld4RGJHRjZlazVoYldWOUlIVndaR0YwWldRZ2MzVmpZMlZ6YzJaMWJHeDVMbUFzWEc0Z0lDQWdJQ0FnSUhOamFHVnRZVG9nZTF4dUlDQWdJQ0FnSUNBZ0lIUjVjR1U2SUZ3aVlYSnlZWGxjSWl4Y2JpQWdJQ0FnSUNBZ0lDQnBkR1Z0Y3pvZ2V5QWtjbVZtT2lCblpYUlRZMmhsYldGUVlYUm9LRTF2WkdWc1EyOXVjM1J5S1NCOUxGeHVJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsT2IzUkdiM1Z1WkZKbGMzQnZibk5sS0h0Y2JpQWdJQ0FnSUNBZ1pHVnpZM0pwY0hScGIyNDZJR0JPYnlBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlNCeVpXTnZjbVFnYldGMFkyaGxjeUIwYUdVZ2NISnZkbWxrWldRZ2FXUmxiblJwWm1sbGNpNWdMRnh1SUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsQ1lXUlNaWEYxWlhOMFVtVnpjRzl1YzJVb2V5QmtaWE5qY21sd2RHbHZiam9nWENKUVlYbHNiMkZrSUhaaGJHbGtZWFJwYjI0Z1ptRnBiR1ZrTGx3aUlIMHBMRnh1SUNBZ0lGMDdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5QmlkV3hyUkdWc1pYUmxSR1ZqYjNKaGRHOXljeWhjYmlBZ0lDQk5iMlJsYkVOdmJuTjBjam9nVFc5a1pXeERiMjV6ZEhKMVkzUnZjanhoYm5rK0xGeHVJQ0FnSUcxdlpHVnNRMnhoZW5wT1lXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ1lYQnBVSEp2Y0dWeWRHbGxjem9nUkdWallXWkJjR2xRY205d1pYSjBlVnRkWEc0Z0lDazZJRUZ5Y21GNVBDaDBZWEpuWlhRNklHRnVlU3dnYTJWNU9pQnpkSEpwYm1jc0lHUmxjMk02SUdGdWVTa2dQVDRnZG05cFpENGdlMXh1SUNBZ0lISmxkSFZ5YmlCYlhHNGdJQ0FnSUNCQmNHbFBjR1Z5WVhScGIyNUdjbTl0VFc5a1pXd29UVzlrWld4RGIyNXpkSElzSUZ3aVJFVk1SVlJGWENJc0lGd2lZblZzYTF3aUtTeGNiaUFnSUNBZ0lFRndhVkJoY21GdGMwWnliMjFOYjJSbGJDaGhjR2xRY205d1pYSjBhV1Z6S1N4Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJpaDdJSE4xYlcxaGNuazZJR0JFWld4bGRHVWdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdjbVZqYjNKa2N5QmllU0JwWkhNdVlDQjlLU3hjYmlBZ0lDQWdJRUZ3YVZGMVpYSjVLSHNnYm1GdFpUb2dYQ0pwWkhOY0lpd2djbVZ4ZFdseVpXUTZJSFJ5ZFdVc0lIUjVjR1U2SUZ3aVlYSnlZWGxjSWlCOUtTeGNiaUFnSUNBZ0lFRndhVTlyVW1WemNHOXVjMlVvZTF4dUlDQWdJQ0FnSUNCa1pYTmpjbWx3ZEdsdmJqb2dZQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlJR1JsYkdWMFpXUWdjM1ZqWTJWemMyWjFiR3g1TG1Bc1hHNGdJQ0FnSUNBZ0lITmphR1Z0WVRvZ2UxeHVJQ0FnSUNBZ0lDQWdJSFI1Y0dVNklGd2lZWEp5WVhsY0lpeGNiaUFnSUNBZ0lDQWdJQ0JwZEdWdGN6b2dleUFrY21WbU9pQm5aWFJUWTJobGJXRlFZWFJvS0UxdlpHVnNRMjl1YzNSeUtTQjlMRnh1SUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNCQmNHbE9iM1JHYjNWdVpGSmxjM0J2Ym5ObEtIdGNiaUFnSUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUdCT2J5QWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZTQnlaV052Y21RZ2JXRjBZMmhsY3lCMGFHVWdjSEp2ZG1sa1pXUWdhV1JsYm5ScFptbGxjaTVnTEZ4dUlDQWdJQ0FnZlNrc1hHNGdJQ0FnWFR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUhKbFlXUkVaV052Y21GMGIzSnpLRnh1SUNBZ0lFMXZaR1ZzUTI5dWMzUnlPaUJOYjJSbGJFTnZibk4wY25WamRHOXlQR0Z1ZVQ0c1hHNGdJQ0FnYlc5a1pXeERiR0Y2ZWs1aGJXVTZJSE4wY21sdVp5eGNiaUFnSUNCaGNHbFFjbTl3WlhKMGFXVnpPaUJFWldOaFprRndhVkJ5YjNCbGNuUjVXMTBzWEc0Z0lDQWdjR3RRWVhSb09pQnpkSEpwYm1kY2JpQWdLVG9nUVhKeVlYazhLSFJoY21kbGREb2dZVzU1TENCclpYazZJSE4wY21sdVp5d2daR1Z6WXpvZ1lXNTVLU0E5UGlCMmIybGtQaUI3WEc0Z0lDQWdjbVYwZFhKdUlGdGNiaUFnSUNBZ0lFRndhVTl3WlhKaGRHbHZia1p5YjIxTmIyUmxiQ2hOYjJSbGJFTnZibk4wY2l3Z1hDSkhSVlJjSWl3Z2NHdFFZWFJvS1N4Y2JpQWdJQ0FnSUVGd2FWQmhjbUZ0YzBaeWIyMU5iMlJsYkNoaGNHbFFjbTl3WlhKMGFXVnpLU3hjYmlBZ0lDQWdJRUZ3YVU5d1pYSmhkR2x2YmloN0lITjFiVzFoY25rNklHQlNaWFJ5YVdWMlpTQmhJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlJSEpsWTI5eVpDQmllU0JwWkM1Z0lIMHBMRnh1SUNBZ0lDQWdRWEJwVDJ0U1pYTndiMjV6WlNoN1hHNGdJQ0FnSUNBZ0lHUmxjMk55YVhCMGFXOXVPaUJnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnY21WMGNtbGxkbVZrSUhOMVkyTmxjM05tZFd4c2VTNWdMRnh1SUNBZ0lDQWdJQ0J6WTJobGJXRTZJSHNnSkhKbFpqb2daMlYwVTJOb1pXMWhVR0YwYUNoTmIyUmxiRU52Ym5OMGNpa2dmU3hjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJQ0FnUVhCcFRtOTBSbTkxYm1SU1pYTndiMjV6WlNoN1hHNGdJQ0FnSUNBZ0lHUmxjMk55YVhCMGFXOXVPaUJnVG04Z0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgwZ2NtVmpiM0prSUcxaGRHTm9aWE1nZEdobElIQnliM1pwWkdWa0lHbGtaVzUwYVdacFpYSXVZQ3hjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJRjA3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUIxY0dSaGRHVkVaV052Y21GMGIzSnpLRnh1SUNBZ0lFMXZaR1ZzUTI5dWMzUnlPaUJOYjJSbGJFTnZibk4wY25WamRHOXlQR0Z1ZVQ0c1hHNGdJQ0FnYlc5a1pXeERiR0Y2ZWs1aGJXVTZJSE4wY21sdVp5eGNiaUFnSUNCaGNHbFFjbTl3WlhKMGFXVnpPaUJFWldOaFprRndhVkJ5YjNCbGNuUjVXMTBzWEc0Z0lDQWdjR3RRWVhSb09pQnpkSEpwYm1kY2JpQWdLVG9nUVhKeVlYazhLSFJoY21kbGREb2dZVzU1TENCclpYazZJSE4wY21sdVp5d2daR1Z6WXpvZ1lXNTVLU0E5UGlCMmIybGtQaUI3WEc0Z0lDQWdjbVYwZFhKdUlGdGNiaUFnSUNBZ0lFRndhVTl3WlhKaGRHbHZia1p5YjIxTmIyUmxiQ2hOYjJSbGJFTnZibk4wY2l3Z1hDSlFWVlJjSWl3Z2NHdFFZWFJvS1N4Y2JpQWdJQ0FnSUVGd2FWQmhjbUZ0YzBaeWIyMU5iMlJsYkNoaGNHbFFjbTl3WlhKMGFXVnpLU3hjYmlBZ0lDQWdJRUZ3YVU5d1pYSmhkR2x2YmloN1hHNGdJQ0FnSUNBZ0lITjFiVzFoY25rNklHQlNaWEJzWVdObElHRnVJR1Y0YVhOMGFXNW5JQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlJSEpsWTI5eVpDQjNhWFJvSUdFZ2JtVjNJSEJoZVd4dllXUXVZQ3hjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJQ0FnUVhCcFFtOWtlU2g3WEc0Z0lDQWdJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmdVR0Y1Ykc5aFpDQm1iM0lnY21Wd2JHRmphVzVuSUdGdUlHVjRhWE4wYVc1bklISmxZMjl5WkNCdlppQWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZXQXNYRzRnSUNBZ0lDQWdJSFI1Y0dVNklFUjBiMFp2Y2loUGNHVnlZWFJwYjI1TFpYbHpMbFZRUkVGVVJTd2dUVzlrWld4RGIyNXpkSElwTEZ4dUlDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNCQmNHbFBhMUpsYzNCdmJuTmxLSHRjYmlBZ0lDQWdJQ0FnWkdWelkzSnBjSFJwYjI0NklHQWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZTQjFjR1JoZEdWa0lITjFZMk5sYzNObWRXeHNlUzVnTEZ4dUlDQWdJQ0FnSUNCelkyaGxiV0U2SUhzZ0pISmxaam9nWjJWMFUyTm9aVzFoVUdGMGFDaE5iMlJsYkVOdmJuTjBjaWtnZlN4Y2JpQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ1FYQnBUbTkwUm05MWJtUlNaWE53YjI1elpTaDdYRzRnSUNBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lCZ1RtOGdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdjbVZqYjNKa0lHMWhkR05vWlhNZ2RHaGxJSEJ5YjNacFpHVmtJR2xrWlc1MGFXWnBaWEl1WUN4Y2JpQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ1FYQnBRbUZrVW1WeGRXVnpkRkpsYzNCdmJuTmxLSHNnWkdWelkzSnBjSFJwYjI0NklGd2lVR0Y1Ykc5aFpDQjJZV3hwWkdGMGFXOXVJR1poYVd4bFpDNWNJaUI5S1N4Y2JpQWdJQ0JkTzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWkdWc1pYUmxSR1ZqYjNKaGRHOXljeWhjYmlBZ0lDQk5iMlJsYkVOdmJuTjBjam9nVFc5a1pXeERiMjV6ZEhKMVkzUnZjanhoYm5rK0xGeHVJQ0FnSUcxdlpHVnNRMnhoZW5wT1lXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ1lYQnBVSEp2Y0dWeWRHbGxjem9nUkdWallXWkJjR2xRY205d1pYSjBlVnRkTEZ4dUlDQWdJSEJyVUdGMGFEb2djM1J5YVc1blhHNGdJQ2s2SUVGeWNtRjVQQ2gwWVhKblpYUTZJR0Z1ZVN3Z2EyVjVPaUJ6ZEhKcGJtY3NJR1JsYzJNNklHRnVlU2tnUFQ0Z2RtOXBaRDRnZTF4dUlDQWdJSEpsZEhWeWJpQmJYRzRnSUNBZ0lDQkJjR2xQY0dWeVlYUnBiMjVHY205dFRXOWtaV3dvVFc5a1pXeERiMjV6ZEhJc0lGd2lSRVZNUlZSRlhDSXNJSEJyVUdGMGFDa3NYRzRnSUNBZ0lDQkJjR2xRWVhKaGJYTkdjbTl0VFc5a1pXd29ZWEJwVUhKdmNHVnlkR2xsY3lrc1hHNGdJQ0FnSUNCQmNHbFBjR1Z5WVhScGIyNG9leUJ6ZFcxdFlYSjVPaUJnUkdWc1pYUmxJR0VnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnY21WamIzSmtJR0o1SUdsa0xtQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsUGExSmxjM0J2Ym5ObEtIdGNiaUFnSUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUdBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlNCa1pXeGxkR1ZrSUhOMVkyTmxjM05tZFd4c2VTNWdMRnh1SUNBZ0lDQWdJQ0J6WTJobGJXRTZJSHNnSkhKbFpqb2daMlYwVTJOb1pXMWhVR0YwYUNoTmIyUmxiRU52Ym5OMGNpa2dmU3hjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJQ0FnUVhCcFRtOTBSbTkxYm1SU1pYTndiMjV6WlNoN1hHNGdJQ0FnSUNBZ0lHUmxjMk55YVhCMGFXOXVPaUJnVG04Z0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgwZ2NtVmpiM0prSUcxaGRHTm9aWE1nZEdobElIQnliM1pwWkdWa0lHbGtaVzUwYVdacFpYSXVZQ3hjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJRjA3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJ6ZEdGMFpXMWxiblJFWldOdmNtRjBiM0p6S0Z4dUlDQWdJRTF2WkdWc1EyOXVjM1J5T2lCTmIyUmxiRU52Ym5OMGNuVmpkRzl5UEdGdWVUNHNYRzRnSUNBZ2JXOWtaV3hEYkdGNmVrNWhiV1U2SUhOMGNtbHVaMXh1SUNBcE9pQkJjbkpoZVR3b2RHRnlaMlYwT2lCaGJua3NJR3RsZVRvZ2MzUnlhVzVuTENCa1pYTmpPaUJoYm5rcElEMCtJSFp2YVdRK0lIdGNiaUFnSUNCeVpYUjFjbTRnVzF4dUlDQWdJQ0FnUVhCcFQzQmxjbUYwYVc5dVJuSnZiVTF2WkdWc0tFMXZaR1ZzUTI5dWMzUnlMQ0JjSWtkRlZGd2lMQ0JjSW5OMFlYUmxiV1Z1ZEM4NmJXVjBhRzlrTHlwaGNtZHpYQ0lwTEZ4dUlDQWdJQ0FnUVhCcFQzQmxjbUYwYVc5dUtIdGNiaUFnSUNBZ0lDQWdjM1Z0YldGeWVUb2dZRVY0WldOMWRHVnpJR0VnY0hKbGNHRnlaV1FnYzNSaGRHVnRaVzUwSUc5dUlDUjdiVzlrWld4RGJHRjZlazVoYldWOUxtQXNYRzRnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJRUZ3YVZCaGNtRnRLSHNnYm1GdFpUb2dYQ0p0WlhSb2IyUmNJaXdnWkdWelkzSnBjSFJwYjI0NklGd2lkR2hsSUhCeVpYQmhjbVZrSUhOMFlYUmxiV1Z1ZENCMGJ5QmxlR1ZqZFhSbFhDSWdmU2tzWEc0Z0lDQWdJQ0JCY0dsUVlYSmhiU2g3WEc0Z0lDQWdJQ0FnSUc1aGJXVTZJRndpWVhKbmMxd2lMRnh1SUNBZ0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1hDSmpiMjVqWVhSbGJtRjBaV1FnYkdsemRDQnZaaUJoY21kMWJXVnVkSE1nZEdobElIQnlaWEJoY21Wa0lITjBZWFJsYldWdWRDQmpZVzRnWVdOalpYQjBYQ0lzWEc0Z0lDQWdJQ0I5S1N4Y2JpQWdJQ0FnSUVGd2FWRjFaWEo1S0h0Y2JpQWdJQ0FnSUNBZ2JtRnRaVG9nWENKa2FYSmxZM1JwYjI1Y0lpeGNiaUFnSUNBZ0lDQWdjbVZ4ZFdseVpXUTZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lHVnVkVzA2SUU5eVpHVnlSR2x5WldOMGFXOXVMRnh1SUNBZ0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1hDSjBhR1VnYzI5eWRDQnZjbVJsY2lCM2FHVnVJR0Z3Y0d4cFkyRmliR1ZjSWl4Y2JpQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ1FYQnBVWFZsY25rb2V5QnVZVzFsT2lCY0lteHBiV2wwWENJc0lISmxjWFZwY21Wa09pQjBjblZsTENCa1pYTmpjbWx3ZEdsdmJqb2dYQ0pzYVcxcGRDQnZjaUJ3WVdkbElITnBlbVVnZDJobGJpQmhjSEJzYVdOaFlteGxYQ0lnZlNrc1hHNGdJQ0FnSUNCQmNHbFJkV1Z5ZVNoN0lHNWhiV1U2SUZ3aWIyWm1jMlYwWENJc0lISmxjWFZwY21Wa09pQjBjblZsTENCa1pYTmpjbWx3ZEdsdmJqb2dYQ0p2Wm1aelpYUWdiM0lnWW05dmEyMWhjbXNnZDJobGJpQmhjSEJzYVdOaFlteGxYQ0lnZlNrc1hHNGdJQ0FnSUNCQmNHbFBhMUpsYzNCdmJuTmxLSHNnWkdWelkzSnBjSFJwYjI0NklHQWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZTQnNhWE4wWldRZ1ptOTFibVF1WUNCOUtTeGNiaUFnSUNBZ0lFRndhVTV2ZEVadmRXNWtVbVZ6Y0c5dWMyVW9lMXh1SUNBZ0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1lFNXZJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlJSEpsWTI5eVpDQnRZWFJqYUdWeklIUm9aU0J3Y205MmFXUmxaQ0JwWkdWdWRHbG1hV1Z5TG1Bc1hHNGdJQ0FnSUNCOUtTeGNiaUFnSUNCZE8xeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ2MzUmhkR1Z0Wlc1MFUyaHZjblJqZFhSRVpXTnZjbUYwYjNKektGeHVJQ0FnSUUxdlpHVnNRMjl1YzNSeU9pQk5iMlJsYkVOdmJuTjBjblZqZEc5eVBHRnVlVDRzWEc0Z0lDQWdiVzlrWld4RGJHRjZlazVoYldVNklITjBjbWx1Wnl4Y2JpQWdJQ0J3WVhSb09pQnpkSEpwYm1jc1hHNGdJQ0FnYzNSaGRHVnRaVzUwUzJWNU9pQnpkSEpwYm1kY2JpQWdLVG9nUVhKeVlYazhLSFJoY21kbGREb2dZVzU1TENCclpYazZJSE4wY21sdVp5d2daR1Z6WXpvZ1lXNTVLU0E5UGlCMmIybGtQaUI3WEc0Z0lDQWdZMjl1YzNRZ1ltRnpaVG9nUVhKeVlYazhLSFJoY21kbGREb2dZVzU1TENCclpYazZJSE4wY21sdVp5d2daR1Z6WXpvZ1lXNTVLU0E5UGlCMmIybGtQaUE5SUZ0Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJrWnliMjFOYjJSbGJDaE5iMlJsYkVOdmJuTjBjaXdnWENKSFJWUmNJaXdnY0dGMGFDa3NYRzRnSUNBZ0lDQkJjR2xQY0dWeVlYUnBiMjRvZXlCemRXMXRZWEo1T2lCZ1VtVjBjbWxsZG1VZ0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgwZ2NtVmpiM0prY3k1Z0lIMHBMRnh1SUNBZ0lDQWdRWEJwVDJ0U1pYTndiMjV6WlNoN0lHUmxjMk55YVhCMGFXOXVPaUJnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnY21WMGNtbGxkbVZrSUhOMVkyTmxjM05tZFd4c2VTNWdJSDBwTEZ4dUlDQWdJRjA3WEc1Y2JpQWdJQ0JqYjI1emRDQnpaV2R0Wlc1MGN5QTlJSEJoZEdndWMzQnNhWFFvWENJdlhDSXBMbVpwYkhSbGNpZ29jeWtnUFQ0Z2N5NXpkR0Z5ZEhOWGFYUm9LRndpT2x3aUtTazdYRzRnSUNBZ2MyVm5iV1Z1ZEhNdVptOXlSV0ZqYUNnb2MyVm5LU0E5UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0J1WVcxbElEMGdjMlZuTG5KbGNHeGhZMlVvWENJNlhDSXNJRndpWENJcE8xeHVJQ0FnSUNBZ1ltRnpaUzV3ZFhOb0tFRndhVkJoY21GdEtIc2dibUZ0WlN3Z1pHVnpZM0pwY0hScGIyNDZJR0JVYUdVZ0pIdHVZVzFsZlNCd1lYSmhiV1YwWlhKZ0lIMHBLVHRjYmlBZ0lDQjlLVHRjYmx4dUlDQWdJR2xtSUNoY2JpQWdJQ0FnSUhCaGRHZ3VjM1JoY25SelYybDBhQ2hjSW14cGMzUkNlUzljSWlrZ2ZIeGNiaUFnSUNBZ0lIQmhkR2d1YzNSaGNuUnpWMmwwYUNoY0luQmhaMmx1WVhSbFFua3ZYQ0lwSUh4OFhHNGdJQ0FnSUNCd1lYUm9Mbk4wWVhKMGMxZHBkR2dvWENKbWFXNWtMMXdpS1NCOGZGeHVJQ0FnSUNBZ2NHRjBhQzV6ZEdGeWRITlhhWFJvS0Z3aWNHRm5aUzljSWlsY2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUdKaGMyVXVjSFZ6YUNoY2JpQWdJQ0FnSUNBZ1FYQnBVWFZsY25rb2UxeHVJQ0FnSUNBZ0lDQWdJRzVoYldVNklGd2laR2x5WldOMGFXOXVYQ0lzWEc0Z0lDQWdJQ0FnSUNBZ2NtVnhkV2x5WldRNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNBZ1pXNTFiVG9nVDNKa1pYSkVhWEpsWTNScGIyNHNYRzRnSUNBZ0lDQWdJQ0FnWkdWelkzSnBjSFJwYjI0NklGd2lkR2hsSUhOdmNuUWdiM0prWlhKY0lpeGNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2h3WVhSb0xuTjBZWEowYzFkcGRHZ29YQ0p3WVdkcGJtRjBaVUo1TDF3aUtTQjhmQ0J3WVhSb0xuTjBZWEowYzFkcGRHZ29YQ0p3WVdkbEwxd2lLU2tnZTF4dUlDQWdJQ0FnWW1GelpTNXdkWE5vS0Z4dUlDQWdJQ0FnSUNCQmNHbFJkV1Z5ZVNoN0lHNWhiV1U2SUZ3aWJHbHRhWFJjSWl3Z2NtVnhkV2x5WldRNklHWmhiSE5sTENCa1pYTmpjbWx3ZEdsdmJqb2dYQ0p3WVdkbElITnBlbVZjSWlCOUtTeGNiaUFnSUNBZ0lDQWdRWEJwVVhWbGNua29leUJ1WVcxbE9pQmNJbTltWm5ObGRGd2lMQ0J5WlhGMWFYSmxaRG9nWm1Gc2MyVXNJR1JsYzJOeWFYQjBhVzl1T2lCY0luQmhaMlVnYm5WdFltVnlYQ0lnZlNrc1hHNGdJQ0FnSUNBZ0lFRndhVkYxWlhKNUtIc2dibUZ0WlRvZ1hDSmliMjlyYldGeWExd2lMQ0J5WlhGMWFYSmxaRG9nWm1Gc2MyVXNJR1JsYzJOeWFYQjBhVzl1T2lCY0ltSnZiMnR0WVhKcklHWnZjaUJqZFhKemIzSWdjR0ZuYVc1aGRHbHZibHdpSUgwcFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHdZWFJvTG5OMFlYSjBjMWRwZEdnb1hDSm1hVzVrVDI1bFFua3ZYQ0lwSUh4OElIQmhkR2d1YzNSaGNuUnpWMmwwYUNoY0ltWnBibVJDZVM5Y0lpa3BJSHRjYmlBZ0lDQWdJR0poYzJVdWNIVnphQ2hjYmlBZ0lDQWdJQ0FnUVhCcFRtOTBSbTkxYm1SU1pYTndiMjV6WlNoN1hHNGdJQ0FnSUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUdCT2J5QWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZTQnlaV052Y21RZ2JXRjBZMmhsY3lCMGFHVWdjSEp2ZG1sa1pXUWdhV1JsYm5ScFptbGxjaTVnTEZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQnpkR0YwWlcxbGJuUkxaWGtnUFQwOUlGQnlaWEJoY21Wa1UzUmhkR1Z0Wlc1MFMyVjVjeTVEVDFWT1ZGOVBSaUI4ZkZ4dUlDQWdJQ0FnYzNSaGRHVnRaVzUwUzJWNUlEMDlQU0JRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVFWWkhYMDlHSUh4OFhHNGdJQ0FnSUNCemRHRjBaVzFsYm5STFpYa2dQVDA5SUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NVRWVTFmVDBaY2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUdKaGMyVXVjSFZ6YUNoQmNHbFBhMUpsYzNCdmJuTmxLSHNnWkdWelkzSnBjSFJwYjI0NklHQlNaWE4xYkhRZ1ptOXlJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlMbUFzSUhSNWNHVTZJRTUxYldKbGNpQjlLU2s3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2h6ZEdGMFpXMWxiblJMWlhrZ1BUMDlJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1RVNWTlVTVTVEVkY5UFJpa2dlMXh1SUNBZ0lDQWdZbUZ6WlM1d2RYTm9LRUZ3YVU5clVtVnpjRzl1YzJVb2V5QmtaWE5qY21sd2RHbHZiam9nWUVScGMzUnBibU4wSUhaaGJIVmxjeUJtYjNJZ0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgwdVlDd2dkSGx3WlRvZ1cxTjBjbWx1WjEwZ2ZTa3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCaVlYTmxPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdaMlYwVVhWbGNubEVaV052Y21GMGIzSnpLRnh1SUNBZ0lHMWxkR2h2WkU1aGJXVTZJSE4wY21sdVp5eGNiaUFnSUNCeWIzVjBaVkJoZEdnNklITjBjbWx1Wnl4Y2JpQWdJQ0JvZEhSd1ZtVnlZam9nYzNSeWFXNW5MRnh1SUNBZ0lHbHVZMngxWkdWUmRXVnllVkJoY21GdGN6b2dZbTl2YkdWaGJpQTlJR1poYkhObFhHNGdJQ2s2SUVGeWNtRjVQQ2gwWVhKblpYUTZJR0Z1ZVN3Z2EyVjVPaUJ6ZEhKcGJtY3NJR1JsYzJNNklHRnVlU2tnUFQ0Z2RtOXBaRDRnZTF4dUlDQWdJR052Ym5OMElHVjRkSEpoWTNSUVlYUm9VR0Z5WVcxeklEMGdLSEE2SUhOMGNtbHVaeWs2SUhOMGNtbHVaMXRkSUQwK1hHNGdJQ0FnSUNCd0xuTndiR2wwS0Z3aUwxd2lLUzVtYVd4MFpYSW9LSE1wSUQwK0lITXVjM1JoY25SelYybDBhQ2hjSWpwY0lpa3BMbTFoY0Nnb2N5a2dQVDRnY3k1emJHbGpaU2d4S1NrN1hHNWNiaUFnSUNCamIyNXpkQ0JoY0dsUVlYUm9VR0Z5WVcxeklEMGdaWGgwY21GamRGQmhkR2hRWVhKaGJYTW9jbTkxZEdWUVlYUm9LUzV0WVhBb0tHNWhiV1VwSUQwK0lDaDdYRzRnSUNBZ0lDQnVZVzFsTEZ4dUlDQWdJQ0FnWkdWelkzSnBjSFJwYjI0NklHQWtlMjVoYldWOUlIQmhjbUZ0WlhSbGNpQm1iM0lnZEdobElIRjFaWEo1WUN4Y2JpQWdJQ0FnSUhKbGNYVnBjbVZrT2lCMGNuVmxMRnh1SUNBZ0lDQWdkSGx3WlRvZ1UzUnlhVzVuTEZ4dUlDQWdJSDBwS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR1JsWTI5eVlYUnZjbk02SUVGeWNtRjVQQ2gwWVhKblpYUTZJR0Z1ZVN3Z2EyVjVPaUJ6ZEhKcGJtY3NJR1JsYzJNNklHRnVlU2tnUFQ0Z2RtOXBaRDRnUFNCYlhHNGdJQ0FnSUNBdUxpNWhjR2xRWVhSb1VHRnlZVzF6TG0xaGNDZ29jQ2tnUFQ0Z1FYQnBVR0Z5WVcwb2NDa3BMRnh1SUNBZ0lDQWdRWEJwVDNCbGNtRjBhVzl1S0hzZ2MzVnRiV0Z5ZVRvZ1lGSmxkSEpwWlhabElISmxZMjl5WkhNZ2RYTnBibWNnWENJa2UyMWxkR2h2WkU1aGJXVjlYQ0l1WUNCOUtTeGNiaUFnSUNBZ0lFRndhVTlyVW1WemNHOXVjMlVvZXlCa1pYTmpjbWx3ZEdsdmJqb2dYQ0pTWlhOMWJIUWdjM1ZqWTJWemMyWjFiR3g1SUhKbGRISnBaWFpsWkM1Y0lpQjlLU3hjYmlBZ0lDQWdJRUZ3YVU1dlEyOXVkR1Z1ZEZKbGMzQnZibk5sS0hzZ1pHVnpZM0pwY0hScGIyNDZJRndpVG04Z1kyOXVkR1Z1ZENCeVpYUjFjbTVsWkNCaWVTQjBhR1VnYldWMGFHOWtMbHdpSUgwcExGeHVJQ0FnSUYwN1hHNWNiaUFnSUNCcFppQW9hSFIwY0ZabGNtSWdQVDA5SUZ3aVIwVlVYQ0lnSmlZZ2FXNWpiSFZrWlZGMVpYSjVVR0Z5WVcxektTQjdYRzRnSUNBZ0lDQmtaV052Y21GMGIzSnpMbkIxYzJnb1hHNGdJQ0FnSUNBZ0lFRndhVkYxWlhKNUtIdGNiaUFnSUNBZ0lDQWdJQ0J1WVcxbE9pQmNJbVJwY21WamRHbHZibHdpTEZ4dUlDQWdJQ0FnSUNBZ0lISmxjWFZwY21Wa09pQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQmxiblZ0T2lCUGNtUmxja1JwY21WamRHbHZiaXhjYmlBZ0lDQWdJQ0FnSUNCa1pYTmpjbWx3ZEdsdmJqb2dYQ0owYUdVZ2MyOXlkQ0J2Y21SbGNpQjNhR1Z1SUdGd2NHeHBZMkZpYkdWY0lpeGNiaUFnSUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0FnSUVGd2FWRjFaWEo1S0hzZ2JtRnRaVG9nWENKc2FXMXBkRndpTENCeVpYRjFhWEpsWkRvZ1ptRnNjMlVzSUdSbGMyTnlhWEIwYVc5dU9pQmNJbXhwYldsMElHOXlJSEJoWjJVZ2MybDZaVndpSUgwcExGeHVJQ0FnSUNBZ0lDQkJjR2xSZFdWeWVTaDdJRzVoYldVNklGd2liMlptYzJWMFhDSXNJSEpsY1hWcGNtVmtPaUJtWVd4elpTd2daR1Z6WTNKcGNIUnBiMjQ2SUZ3aWIyWm1jMlYwSUc5eUlHSnZiMnR0WVhKclhDSWdmU2xjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHUmxZMjl5WVhSdmNuTTdYRzRnSUgxY2JuMWNiaUpkZlE9PSJdfQ==