velocious 1.0.449 → 1.0.450

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 (630) hide show
  1. package/build/application.js +4 -4
  2. package/build/authorization/ability.js +8 -8
  3. package/build/authorization/base-resource.js +4 -4
  4. package/build/background-jobs/cron-expression.js +1 -1
  5. package/build/background-jobs/forked-runner-child.js +1 -1
  6. package/build/background-jobs/job-registry.js +1 -1
  7. package/build/background-jobs/job-runner.js +1 -1
  8. package/build/background-jobs/job.js +1 -1
  9. package/build/background-jobs/json-socket.js +4 -4
  10. package/build/background-jobs/main.js +21 -21
  11. package/build/background-jobs/scheduler.js +7 -7
  12. package/build/background-jobs/store.js +7 -7
  13. package/build/background-jobs/web/controller.js +2 -2
  14. package/build/background-jobs/worker.js +12 -12
  15. package/build/beacon/client.js +11 -8
  16. package/build/beacon/in-process-broker.js +2 -2
  17. package/build/beacon/in-process-client.js +2 -2
  18. package/build/beacon/server.js +3 -3
  19. package/build/cli/browser-cli.js +1 -1
  20. package/build/cli/commands/db/base-command.js +2 -2
  21. package/build/cli/index.js +2 -2
  22. package/build/cli/tenant-database-command-helper.js +3 -3
  23. package/build/cli/use-browser-cli.js +1 -1
  24. package/build/configuration.js +38 -38
  25. package/build/controller.js +8 -8
  26. package/build/current-configuration.js +1 -1
  27. package/build/database/annotations-async-hooks.js +2 -2
  28. package/build/database/annotations.js +3 -3
  29. package/build/database/drivers/base-column.js +1 -1
  30. package/build/database/drivers/base-foreign-key.js +1 -1
  31. package/build/database/drivers/base-table.js +1 -1
  32. package/build/database/drivers/base.js +10 -10
  33. package/build/database/drivers/mssql/index.js +1 -1
  34. package/build/database/drivers/mssql/table.js +1 -1
  35. package/build/database/drivers/mysql/index.js +3 -3
  36. package/build/database/drivers/mysql/query.js +1 -1
  37. package/build/database/drivers/mysql/table.js +1 -1
  38. package/build/database/drivers/pgsql/index.js +2 -2
  39. package/build/database/drivers/sqlite/base.js +16 -16
  40. package/build/database/drivers/sqlite/index.js +11 -11
  41. package/build/database/drivers/sqlite/index.native.js +1 -1
  42. package/build/database/drivers/sqlite/index.web.js +3 -3
  43. package/build/database/drivers/sqlite/query.js +1 -1
  44. package/build/database/drivers/sqlite/query.web.js +1 -1
  45. package/build/database/drivers/sqlite/sql/alter-table.js +2 -2
  46. package/build/database/drivers/sqlite/table.js +1 -1
  47. package/build/database/migrator/files-finder.js +1 -1
  48. package/build/database/migrator.js +6 -6
  49. package/build/database/pool/async-tracked-multi-connection.js +27 -27
  50. package/build/database/pool/base-methods-forward.js +4 -4
  51. package/build/database/pool/base.js +8 -8
  52. package/build/database/query/from-base.js +1 -1
  53. package/build/database/query/index.js +10 -10
  54. package/build/database/query/join-object.js +3 -3
  55. package/build/database/query/model-class-query.js +39 -39
  56. package/build/database/query/preloader/belongs-to.js +22 -22
  57. package/build/database/query/preloader/has-many.js +20 -20
  58. package/build/database/query/preloader/has-one.js +8 -8
  59. package/build/database/query/preloader/selection.js +3 -3
  60. package/build/database/query/preloader.js +8 -8
  61. package/build/database/query/query-data.js +9 -9
  62. package/build/database/query/where-model-class-hash.js +7 -7
  63. package/build/database/query/with-count.js +9 -9
  64. package/build/database/record/acts-as-list.js +15 -15
  65. package/build/database/record/attachments/handle.js +2 -2
  66. package/build/database/record/attachments/normalize-input.js +12 -12
  67. package/build/database/record/attachments/storage-drivers/s3.js +6 -6
  68. package/build/database/record/attachments/store.js +13 -13
  69. package/build/database/record/index.js +115 -121
  70. package/build/database/record/instance-relationships/base.js +11 -11
  71. package/build/database/record/instance-relationships/belongs-to.js +3 -3
  72. package/build/database/record/instance-relationships/has-many.js +8 -8
  73. package/build/database/record/instance-relationships/has-one.js +7 -7
  74. package/build/database/record/relationships/base.js +2 -2
  75. package/build/database/record/state-machine.js +7 -7
  76. package/build/database/record/validators/presence.js +1 -1
  77. package/build/database/record/validators/uniqueness.js +5 -5
  78. package/build/database/table-data/index.js +4 -4
  79. package/build/environment-handlers/base.js +2 -2
  80. package/build/environment-handlers/browser.js +7 -7
  81. package/build/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
  82. package/build/environment-handlers/node/cli/commands/console.js +4 -4
  83. package/build/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
  84. package/build/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
  85. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +55 -17
  86. package/build/environment-handlers/node.js +6 -6
  87. package/build/frontend-model-controller.js +81 -82
  88. package/build/frontend-model-resource/base-resource.js +78 -115
  89. package/build/frontend-models/base.js +162 -149
  90. package/build/frontend-models/clear-pending-debounced-callback.js +1 -1
  91. package/build/frontend-models/event-hook-models.js +2 -2
  92. package/build/frontend-models/outgoing-event-buffer.js +2 -2
  93. package/build/frontend-models/preloader.js +5 -5
  94. package/build/frontend-models/query.js +43 -38
  95. package/build/frontend-models/resource-definition.js +6 -6
  96. package/build/frontend-models/transport-serialization.js +11 -11
  97. package/build/frontend-models/use-destroyed-event.js +10 -10
  98. package/build/frontend-models/use-model-class-event.js +11 -11
  99. package/build/frontend-models/use-updated-event.js +11 -11
  100. package/build/frontend-models/websocket-channel.js +26 -17
  101. package/build/frontend-models/websocket-publishers.js +9 -9
  102. package/build/http-client/response.js +2 -2
  103. package/build/http-server/client/index.js +8 -8
  104. package/build/http-server/client/params-to-object.js +10 -10
  105. package/build/http-server/client/request-buffer/form-data-part.js +2 -2
  106. package/build/http-server/client/request-buffer/index.js +8 -8
  107. package/build/http-server/client/request-parser.js +3 -3
  108. package/build/http-server/client/request-runner.js +6 -6
  109. package/build/http-server/client/request-timing.js +5 -5
  110. package/build/http-server/client/request.js +1 -1
  111. package/build/http-server/client/response.js +5 -5
  112. package/build/http-server/client/websocket-request.js +4 -4
  113. package/build/http-server/client/websocket-session.js +18 -18
  114. package/build/http-server/development-reloader.js +5 -5
  115. package/build/http-server/index.js +12 -12
  116. package/build/http-server/remote-address.js +4 -4
  117. package/build/http-server/server-client.js +3 -3
  118. package/build/http-server/server-lock.js +4 -4
  119. package/build/http-server/websocket-channel-subscribers.js +3 -3
  120. package/build/http-server/websocket-channel.js +1 -1
  121. package/build/http-server/websocket-connection.js +1 -1
  122. package/build/http-server/websocket-event-log-store.js +6 -6
  123. package/build/http-server/websocket-events-host.js +2 -2
  124. package/build/http-server/worker-handler/in-process.js +7 -7
  125. package/build/http-server/worker-handler/index.js +4 -4
  126. package/build/http-server/worker-handler/worker-thread.js +3 -3
  127. package/build/logger/outputs/array-output.js +3 -3
  128. package/build/logger/outputs/console-output.js +1 -1
  129. package/build/logger/outputs/file-output.js +4 -4
  130. package/build/logger/outputs/stdout-output.js +1 -1
  131. package/build/logger.js +10 -10
  132. package/build/mailer/backends/smtp.js +3 -3
  133. package/build/mailer/base.js +8 -8
  134. package/build/mailer/delivery.js +4 -4
  135. package/build/plugins/sqljs-wasm-route-controller.js +1 -1
  136. package/build/routes/base-route.js +6 -6
  137. package/build/routes/basic-route.js +1 -1
  138. package/build/routes/hooks/frontend-model-command-route-hook.js +1 -1
  139. package/build/routes/index.js +1 -1
  140. package/build/routes/plugin-routes.js +1 -1
  141. package/build/routes/resolver.js +11 -11
  142. package/build/routes/resource-route.js +1 -1
  143. package/build/src/application.d.ts +3 -3
  144. package/build/src/application.d.ts.map +1 -1
  145. package/build/src/application.js +5 -5
  146. package/build/src/authorization/ability.d.ts +7 -7
  147. package/build/src/authorization/ability.d.ts.map +1 -1
  148. package/build/src/authorization/ability.js +9 -9
  149. package/build/src/authorization/base-resource.d.ts +1 -1
  150. package/build/src/authorization/base-resource.d.ts.map +1 -1
  151. package/build/src/authorization/base-resource.js +5 -5
  152. package/build/src/background-jobs/cron-expression.js +2 -2
  153. package/build/src/background-jobs/forked-runner-child.js +2 -2
  154. package/build/src/background-jobs/job-registry.d.ts +1 -1
  155. package/build/src/background-jobs/job-registry.d.ts.map +1 -1
  156. package/build/src/background-jobs/job-registry.js +2 -2
  157. package/build/src/background-jobs/job-runner.js +2 -2
  158. package/build/src/background-jobs/job.js +2 -2
  159. package/build/src/background-jobs/json-socket.d.ts +4 -4
  160. package/build/src/background-jobs/json-socket.d.ts.map +1 -1
  161. package/build/src/background-jobs/json-socket.js +5 -5
  162. package/build/src/background-jobs/main.d.ts +18 -18
  163. package/build/src/background-jobs/main.d.ts.map +1 -1
  164. package/build/src/background-jobs/main.js +22 -22
  165. package/build/src/background-jobs/scheduler.d.ts +5 -5
  166. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  167. package/build/src/background-jobs/scheduler.js +8 -8
  168. package/build/src/background-jobs/store.js +8 -8
  169. package/build/src/background-jobs/web/controller.js +3 -3
  170. package/build/src/background-jobs/worker.d.ts +6 -6
  171. package/build/src/background-jobs/worker.d.ts.map +1 -1
  172. package/build/src/background-jobs/worker.js +13 -13
  173. package/build/src/beacon/client.d.ts +4 -4
  174. package/build/src/beacon/client.d.ts.map +1 -1
  175. package/build/src/beacon/client.js +12 -9
  176. package/build/src/beacon/in-process-broker.d.ts.map +1 -1
  177. package/build/src/beacon/in-process-broker.js +3 -3
  178. package/build/src/beacon/in-process-client.d.ts +1 -1
  179. package/build/src/beacon/in-process-client.d.ts.map +1 -1
  180. package/build/src/beacon/in-process-client.js +3 -3
  181. package/build/src/beacon/server.d.ts +2 -2
  182. package/build/src/beacon/server.d.ts.map +1 -1
  183. package/build/src/beacon/server.js +4 -4
  184. package/build/src/cli/browser-cli.js +2 -2
  185. package/build/src/cli/commands/db/base-command.d.ts +2 -2
  186. package/build/src/cli/commands/db/base-command.d.ts.map +1 -1
  187. package/build/src/cli/commands/db/base-command.js +3 -3
  188. package/build/src/cli/index.js +3 -3
  189. package/build/src/cli/tenant-database-command-helper.d.ts +1 -1
  190. package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
  191. package/build/src/cli/tenant-database-command-helper.js +4 -4
  192. package/build/src/cli/use-browser-cli.js +2 -2
  193. package/build/src/configuration.d.ts +14 -14
  194. package/build/src/configuration.d.ts.map +1 -1
  195. package/build/src/configuration.js +39 -39
  196. package/build/src/controller.js +10 -10
  197. package/build/src/current-configuration.js +2 -2
  198. package/build/src/database/annotations-async-hooks.js +3 -3
  199. package/build/src/database/annotations.d.ts.map +1 -1
  200. package/build/src/database/annotations.js +4 -4
  201. package/build/src/database/drivers/base-column.d.ts +1 -1
  202. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  203. package/build/src/database/drivers/base-column.js +2 -2
  204. package/build/src/database/drivers/base-foreign-key.d.ts +1 -1
  205. package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
  206. package/build/src/database/drivers/base-foreign-key.js +2 -2
  207. package/build/src/database/drivers/base-table.d.ts +1 -1
  208. package/build/src/database/drivers/base-table.d.ts.map +1 -1
  209. package/build/src/database/drivers/base-table.js +2 -2
  210. package/build/src/database/drivers/base.d.ts +6 -6
  211. package/build/src/database/drivers/base.d.ts.map +1 -1
  212. package/build/src/database/drivers/base.js +11 -11
  213. package/build/src/database/drivers/mssql/index.js +2 -2
  214. package/build/src/database/drivers/mssql/table.js +2 -2
  215. package/build/src/database/drivers/mysql/index.js +4 -4
  216. package/build/src/database/drivers/mysql/query.js +2 -2
  217. package/build/src/database/drivers/mysql/table.js +2 -2
  218. package/build/src/database/drivers/pgsql/index.js +3 -3
  219. package/build/src/database/drivers/sqlite/base.d.ts +3 -3
  220. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  221. package/build/src/database/drivers/sqlite/base.js +17 -17
  222. package/build/src/database/drivers/sqlite/index.d.ts +4 -4
  223. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  224. package/build/src/database/drivers/sqlite/index.js +12 -12
  225. package/build/src/database/drivers/sqlite/index.native.js +2 -2
  226. package/build/src/database/drivers/sqlite/index.web.d.ts +2 -2
  227. package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
  228. package/build/src/database/drivers/sqlite/index.web.js +4 -4
  229. package/build/src/database/drivers/sqlite/query.js +2 -2
  230. package/build/src/database/drivers/sqlite/query.web.js +2 -2
  231. package/build/src/database/drivers/sqlite/sql/alter-table.js +3 -3
  232. package/build/src/database/drivers/sqlite/table.js +2 -2
  233. package/build/src/database/migrator/files-finder.js +2 -2
  234. package/build/src/database/migrator.d.ts +1 -1
  235. package/build/src/database/migrator.d.ts.map +1 -1
  236. package/build/src/database/migrator.js +7 -7
  237. package/build/src/database/pool/async-tracked-multi-connection.d.ts +9 -9
  238. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  239. package/build/src/database/pool/async-tracked-multi-connection.js +28 -28
  240. package/build/src/database/pool/base-methods-forward.js +7 -7
  241. package/build/src/database/pool/base.d.ts +1 -1
  242. package/build/src/database/pool/base.d.ts.map +1 -1
  243. package/build/src/database/pool/base.js +9 -9
  244. package/build/src/database/query/from-base.d.ts +1 -1
  245. package/build/src/database/query/from-base.d.ts.map +1 -1
  246. package/build/src/database/query/from-base.js +2 -2
  247. package/build/src/database/query/index.d.ts +4 -4
  248. package/build/src/database/query/index.d.ts.map +1 -1
  249. package/build/src/database/query/index.js +11 -11
  250. package/build/src/database/query/join-object.js +4 -4
  251. package/build/src/database/query/model-class-query.d.ts +4 -4
  252. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  253. package/build/src/database/query/model-class-query.js +40 -40
  254. package/build/src/database/query/preloader/belongs-to.js +23 -23
  255. package/build/src/database/query/preloader/has-many.js +21 -21
  256. package/build/src/database/query/preloader/has-one.js +9 -9
  257. package/build/src/database/query/preloader/selection.js +4 -4
  258. package/build/src/database/query/preloader.js +9 -9
  259. package/build/src/database/query/query-data.js +10 -10
  260. package/build/src/database/query/where-model-class-hash.js +8 -8
  261. package/build/src/database/query/with-count.js +10 -10
  262. package/build/src/database/record/acts-as-list.js +20 -20
  263. package/build/src/database/record/attachments/handle.d.ts +1 -1
  264. package/build/src/database/record/attachments/handle.d.ts.map +1 -1
  265. package/build/src/database/record/attachments/handle.js +3 -3
  266. package/build/src/database/record/attachments/normalize-input.js +15 -15
  267. package/build/src/database/record/attachments/storage-drivers/s3.js +7 -7
  268. package/build/src/database/record/attachments/store.d.ts +2 -2
  269. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  270. package/build/src/database/record/attachments/store.js +14 -14
  271. package/build/src/database/record/index.d.ts +18 -25
  272. package/build/src/database/record/index.d.ts.map +1 -1
  273. package/build/src/database/record/index.js +135 -141
  274. package/build/src/database/record/instance-relationships/base.d.ts +3 -3
  275. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  276. package/build/src/database/record/instance-relationships/base.js +13 -13
  277. package/build/src/database/record/instance-relationships/belongs-to.js +4 -4
  278. package/build/src/database/record/instance-relationships/has-many.js +9 -9
  279. package/build/src/database/record/instance-relationships/has-one.d.ts +1 -1
  280. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  281. package/build/src/database/record/instance-relationships/has-one.js +8 -8
  282. package/build/src/database/record/relationships/base.js +4 -4
  283. package/build/src/database/record/state-machine.js +8 -8
  284. package/build/src/database/record/validators/presence.js +2 -2
  285. package/build/src/database/record/validators/uniqueness.js +6 -6
  286. package/build/src/database/table-data/index.d.ts +4 -4
  287. package/build/src/database/table-data/index.d.ts.map +1 -1
  288. package/build/src/database/table-data/index.js +5 -5
  289. package/build/src/environment-handlers/base.js +3 -3
  290. package/build/src/environment-handlers/browser.d.ts +3 -3
  291. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  292. package/build/src/environment-handlers/browser.js +8 -8
  293. package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +2 -2
  294. package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
  295. package/build/src/environment-handlers/node/cli/commands/console.js +5 -5
  296. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts +1 -1
  297. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts.map +1 -1
  298. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +2 -2
  299. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts +1 -1
  300. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
  301. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +4 -4
  302. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +16 -1
  303. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  304. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +51 -17
  305. package/build/src/environment-handlers/node.d.ts +2 -2
  306. package/build/src/environment-handlers/node.d.ts.map +1 -1
  307. package/build/src/environment-handlers/node.js +7 -7
  308. package/build/src/frontend-model-controller.d.ts +5 -6
  309. package/build/src/frontend-model-controller.d.ts.map +1 -1
  310. package/build/src/frontend-model-controller.js +88 -89
  311. package/build/src/frontend-model-resource/base-resource.d.ts +36 -27
  312. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  313. package/build/src/frontend-model-resource/base-resource.js +67 -120
  314. package/build/src/frontend-models/base.d.ts +66 -58
  315. package/build/src/frontend-models/base.d.ts.map +1 -1
  316. package/build/src/frontend-models/base.js +171 -158
  317. package/build/src/frontend-models/clear-pending-debounced-callback.js +2 -2
  318. package/build/src/frontend-models/event-hook-models.d.ts.map +1 -1
  319. package/build/src/frontend-models/event-hook-models.js +3 -3
  320. package/build/src/frontend-models/outgoing-event-buffer.d.ts +1 -1
  321. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  322. package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
  323. package/build/src/frontend-models/preloader.js +6 -6
  324. package/build/src/frontend-models/query.d.ts +16 -8
  325. package/build/src/frontend-models/query.d.ts.map +1 -1
  326. package/build/src/frontend-models/query.js +43 -39
  327. package/build/src/frontend-models/resource-definition.js +7 -7
  328. package/build/src/frontend-models/transport-serialization.js +12 -12
  329. package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
  330. package/build/src/frontend-models/use-destroyed-event.js +11 -11
  331. package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
  332. package/build/src/frontend-models/use-model-class-event.js +12 -12
  333. package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
  334. package/build/src/frontend-models/use-updated-event.js +12 -12
  335. package/build/src/frontend-models/websocket-channel.d.ts +6 -1
  336. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  337. package/build/src/frontend-models/websocket-channel.js +26 -18
  338. package/build/src/frontend-models/websocket-publishers.js +11 -11
  339. package/build/src/http-client/response.d.ts +2 -2
  340. package/build/src/http-client/response.d.ts.map +1 -1
  341. package/build/src/http-client/response.js +3 -3
  342. package/build/src/http-server/client/index.d.ts +1 -1
  343. package/build/src/http-server/client/index.d.ts.map +1 -1
  344. package/build/src/http-server/client/index.js +9 -9
  345. package/build/src/http-server/client/params-to-object.js +11 -11
  346. package/build/src/http-server/client/request-buffer/form-data-part.d.ts +2 -2
  347. package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
  348. package/build/src/http-server/client/request-buffer/form-data-part.js +3 -3
  349. package/build/src/http-server/client/request-buffer/index.d.ts +4 -4
  350. package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
  351. package/build/src/http-server/client/request-buffer/index.js +9 -9
  352. package/build/src/http-server/client/request-parser.d.ts +1 -1
  353. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  354. package/build/src/http-server/client/request-parser.js +4 -4
  355. package/build/src/http-server/client/request-runner.js +7 -7
  356. package/build/src/http-server/client/request-timing.d.ts +5 -5
  357. package/build/src/http-server/client/request-timing.d.ts.map +1 -1
  358. package/build/src/http-server/client/request-timing.js +6 -6
  359. package/build/src/http-server/client/request.js +2 -2
  360. package/build/src/http-server/client/response.d.ts +3 -3
  361. package/build/src/http-server/client/response.d.ts.map +1 -1
  362. package/build/src/http-server/client/response.js +6 -6
  363. package/build/src/http-server/client/websocket-request.d.ts +3 -3
  364. package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
  365. package/build/src/http-server/client/websocket-request.js +5 -5
  366. package/build/src/http-server/client/websocket-session.d.ts +6 -6
  367. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  368. package/build/src/http-server/client/websocket-session.js +19 -19
  369. package/build/src/http-server/development-reloader.d.ts +3 -3
  370. package/build/src/http-server/development-reloader.d.ts.map +1 -1
  371. package/build/src/http-server/development-reloader.js +6 -6
  372. package/build/src/http-server/index.d.ts +7 -7
  373. package/build/src/http-server/index.d.ts.map +1 -1
  374. package/build/src/http-server/index.js +13 -13
  375. package/build/src/http-server/remote-address.js +6 -6
  376. package/build/src/http-server/server-client.js +4 -4
  377. package/build/src/http-server/server-lock.js +5 -5
  378. package/build/src/http-server/websocket-channel-subscribers.d.ts +1 -1
  379. package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
  380. package/build/src/http-server/websocket-channel-subscribers.js +4 -4
  381. package/build/src/http-server/websocket-channel.d.ts +1 -1
  382. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  383. package/build/src/http-server/websocket-channel.js +2 -2
  384. package/build/src/http-server/websocket-connection.d.ts +1 -1
  385. package/build/src/http-server/websocket-connection.d.ts.map +1 -1
  386. package/build/src/http-server/websocket-connection.js +2 -2
  387. package/build/src/http-server/websocket-event-log-store.d.ts +1 -1
  388. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  389. package/build/src/http-server/websocket-event-log-store.js +7 -7
  390. package/build/src/http-server/websocket-events-host.d.ts +1 -1
  391. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  392. package/build/src/http-server/websocket-events-host.js +3 -3
  393. package/build/src/http-server/worker-handler/in-process.d.ts +3 -3
  394. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  395. package/build/src/http-server/worker-handler/in-process.js +9 -9
  396. package/build/src/http-server/worker-handler/index.d.ts +4 -4
  397. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  398. package/build/src/http-server/worker-handler/index.js +5 -5
  399. package/build/src/http-server/worker-handler/worker-thread.d.ts +2 -2
  400. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  401. package/build/src/http-server/worker-handler/worker-thread.js +4 -4
  402. package/build/src/logger/outputs/array-output.d.ts +3 -3
  403. package/build/src/logger/outputs/array-output.d.ts.map +1 -1
  404. package/build/src/logger/outputs/array-output.js +4 -4
  405. package/build/src/logger/outputs/console-output.d.ts +1 -1
  406. package/build/src/logger/outputs/console-output.d.ts.map +1 -1
  407. package/build/src/logger/outputs/console-output.js +2 -2
  408. package/build/src/logger/outputs/file-output.d.ts +4 -4
  409. package/build/src/logger/outputs/file-output.d.ts.map +1 -1
  410. package/build/src/logger/outputs/file-output.js +5 -5
  411. package/build/src/logger/outputs/stdout-output.d.ts.map +1 -1
  412. package/build/src/logger/outputs/stdout-output.js +2 -2
  413. package/build/src/logger.d.ts.map +1 -1
  414. package/build/src/logger.js +11 -11
  415. package/build/src/mailer/backends/smtp.d.ts.map +1 -1
  416. package/build/src/mailer/backends/smtp.js +5 -5
  417. package/build/src/mailer/base.js +11 -11
  418. package/build/src/mailer/delivery.d.ts +3 -3
  419. package/build/src/mailer/delivery.d.ts.map +1 -1
  420. package/build/src/mailer/delivery.js +5 -5
  421. package/build/src/plugins/sqljs-wasm-route-controller.js +2 -2
  422. package/build/src/routes/base-route.d.ts +6 -6
  423. package/build/src/routes/base-route.d.ts.map +1 -1
  424. package/build/src/routes/base-route.js +7 -7
  425. package/build/src/routes/basic-route.js +2 -2
  426. package/build/src/routes/hooks/frontend-model-command-route-hook.js +2 -2
  427. package/build/src/routes/index.js +2 -2
  428. package/build/src/routes/plugin-routes.js +2 -2
  429. package/build/src/routes/resolver.d.ts +1 -1
  430. package/build/src/routes/resolver.d.ts.map +1 -1
  431. package/build/src/routes/resolver.js +13 -13
  432. package/build/src/routes/resource-route.d.ts +1 -1
  433. package/build/src/routes/resource-route.d.ts.map +1 -1
  434. package/build/src/routes/resource-route.js +2 -2
  435. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
  436. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +8 -8
  437. package/build/src/testing/expect-utils.js +13 -13
  438. package/build/src/testing/expect.d.ts +1 -1
  439. package/build/src/testing/expect.d.ts.map +1 -1
  440. package/build/src/testing/expect.js +9 -9
  441. package/build/src/testing/test-files-finder.d.ts +8 -8
  442. package/build/src/testing/test-files-finder.d.ts.map +1 -1
  443. package/build/src/testing/test-files-finder.js +9 -9
  444. package/build/src/testing/test-filter-parser.js +3 -3
  445. package/build/src/testing/test-runner.d.ts +2 -2
  446. package/build/src/testing/test-runner.d.ts.map +1 -1
  447. package/build/src/testing/test-runner.js +17 -17
  448. package/build/src/testing/test-suite-splitter.js +2 -2
  449. package/build/src/testing/test.d.ts +2 -2
  450. package/build/src/testing/test.d.ts.map +1 -1
  451. package/build/src/testing/test.js +16 -16
  452. package/build/src/utils/backtrace-cleaner.d.ts +1 -1
  453. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  454. package/build/src/utils/backtrace-cleaner.js +2 -2
  455. package/build/src/utils/format-value.js +2 -2
  456. package/build/src/utils/model-scope.js +2 -2
  457. package/build/src/utils/ransack.js +27 -27
  458. package/build/src/utils/with-tracked-stack-async-hooks.js +8 -8
  459. package/build/src/utils/with-tracked-stack.js +4 -4
  460. package/build/testing/browser-frontend-model-event-hook-scenarios.js +7 -7
  461. package/build/testing/expect-utils.js +11 -11
  462. package/build/testing/expect.js +7 -7
  463. package/build/testing/test-files-finder.js +8 -8
  464. package/build/testing/test-filter-parser.js +2 -2
  465. package/build/testing/test-runner.js +16 -16
  466. package/build/testing/test-suite-splitter.js +1 -1
  467. package/build/testing/test.js +15 -15
  468. package/build/utils/backtrace-cleaner.js +1 -1
  469. package/build/utils/format-value.js +1 -1
  470. package/build/utils/model-scope.js +1 -1
  471. package/build/utils/ransack.js +26 -26
  472. package/build/utils/with-tracked-stack-async-hooks.js +7 -7
  473. package/build/utils/with-tracked-stack.js +3 -3
  474. package/package.json +2 -1
  475. package/src/application.js +4 -4
  476. package/src/authorization/ability.js +8 -8
  477. package/src/authorization/base-resource.js +4 -4
  478. package/src/background-jobs/cron-expression.js +1 -1
  479. package/src/background-jobs/forked-runner-child.js +1 -1
  480. package/src/background-jobs/job-registry.js +1 -1
  481. package/src/background-jobs/job-runner.js +1 -1
  482. package/src/background-jobs/job.js +1 -1
  483. package/src/background-jobs/json-socket.js +4 -4
  484. package/src/background-jobs/main.js +21 -21
  485. package/src/background-jobs/scheduler.js +7 -7
  486. package/src/background-jobs/store.js +7 -7
  487. package/src/background-jobs/web/controller.js +2 -2
  488. package/src/background-jobs/worker.js +12 -12
  489. package/src/beacon/client.js +11 -8
  490. package/src/beacon/in-process-broker.js +2 -2
  491. package/src/beacon/in-process-client.js +2 -2
  492. package/src/beacon/server.js +3 -3
  493. package/src/cli/browser-cli.js +1 -1
  494. package/src/cli/commands/db/base-command.js +2 -2
  495. package/src/cli/index.js +2 -2
  496. package/src/cli/tenant-database-command-helper.js +3 -3
  497. package/src/cli/use-browser-cli.js +1 -1
  498. package/src/configuration.js +38 -38
  499. package/src/controller.js +8 -8
  500. package/src/current-configuration.js +1 -1
  501. package/src/database/annotations-async-hooks.js +2 -2
  502. package/src/database/annotations.js +3 -3
  503. package/src/database/drivers/base-column.js +1 -1
  504. package/src/database/drivers/base-foreign-key.js +1 -1
  505. package/src/database/drivers/base-table.js +1 -1
  506. package/src/database/drivers/base.js +10 -10
  507. package/src/database/drivers/mssql/index.js +1 -1
  508. package/src/database/drivers/mssql/table.js +1 -1
  509. package/src/database/drivers/mysql/index.js +3 -3
  510. package/src/database/drivers/mysql/query.js +1 -1
  511. package/src/database/drivers/mysql/table.js +1 -1
  512. package/src/database/drivers/pgsql/index.js +2 -2
  513. package/src/database/drivers/sqlite/base.js +16 -16
  514. package/src/database/drivers/sqlite/index.js +11 -11
  515. package/src/database/drivers/sqlite/index.native.js +1 -1
  516. package/src/database/drivers/sqlite/index.web.js +3 -3
  517. package/src/database/drivers/sqlite/query.js +1 -1
  518. package/src/database/drivers/sqlite/query.web.js +1 -1
  519. package/src/database/drivers/sqlite/sql/alter-table.js +2 -2
  520. package/src/database/drivers/sqlite/table.js +1 -1
  521. package/src/database/migrator/files-finder.js +1 -1
  522. package/src/database/migrator.js +6 -6
  523. package/src/database/pool/async-tracked-multi-connection.js +27 -27
  524. package/src/database/pool/base-methods-forward.js +4 -4
  525. package/src/database/pool/base.js +8 -8
  526. package/src/database/query/from-base.js +1 -1
  527. package/src/database/query/index.js +10 -10
  528. package/src/database/query/join-object.js +3 -3
  529. package/src/database/query/model-class-query.js +39 -39
  530. package/src/database/query/preloader/belongs-to.js +22 -22
  531. package/src/database/query/preloader/has-many.js +20 -20
  532. package/src/database/query/preloader/has-one.js +8 -8
  533. package/src/database/query/preloader/selection.js +3 -3
  534. package/src/database/query/preloader.js +8 -8
  535. package/src/database/query/query-data.js +9 -9
  536. package/src/database/query/where-model-class-hash.js +7 -7
  537. package/src/database/query/with-count.js +9 -9
  538. package/src/database/record/acts-as-list.js +15 -15
  539. package/src/database/record/attachments/handle.js +2 -2
  540. package/src/database/record/attachments/normalize-input.js +12 -12
  541. package/src/database/record/attachments/storage-drivers/s3.js +6 -6
  542. package/src/database/record/attachments/store.js +13 -13
  543. package/src/database/record/index.js +115 -121
  544. package/src/database/record/instance-relationships/base.js +11 -11
  545. package/src/database/record/instance-relationships/belongs-to.js +3 -3
  546. package/src/database/record/instance-relationships/has-many.js +8 -8
  547. package/src/database/record/instance-relationships/has-one.js +7 -7
  548. package/src/database/record/relationships/base.js +2 -2
  549. package/src/database/record/state-machine.js +7 -7
  550. package/src/database/record/validators/presence.js +1 -1
  551. package/src/database/record/validators/uniqueness.js +5 -5
  552. package/src/database/table-data/index.js +4 -4
  553. package/src/environment-handlers/base.js +2 -2
  554. package/src/environment-handlers/browser.js +7 -7
  555. package/src/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
  556. package/src/environment-handlers/node/cli/commands/console.js +4 -4
  557. package/src/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
  558. package/src/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
  559. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +55 -17
  560. package/src/environment-handlers/node.js +6 -6
  561. package/src/frontend-model-controller.js +81 -82
  562. package/src/frontend-model-resource/base-resource.js +78 -115
  563. package/src/frontend-models/base.js +162 -149
  564. package/src/frontend-models/clear-pending-debounced-callback.js +1 -1
  565. package/src/frontend-models/event-hook-models.js +2 -2
  566. package/src/frontend-models/outgoing-event-buffer.js +2 -2
  567. package/src/frontend-models/preloader.js +5 -5
  568. package/src/frontend-models/query.js +43 -38
  569. package/src/frontend-models/resource-definition.js +6 -6
  570. package/src/frontend-models/transport-serialization.js +11 -11
  571. package/src/frontend-models/use-destroyed-event.js +10 -10
  572. package/src/frontend-models/use-model-class-event.js +11 -11
  573. package/src/frontend-models/use-updated-event.js +11 -11
  574. package/src/frontend-models/websocket-channel.js +26 -17
  575. package/src/frontend-models/websocket-publishers.js +9 -9
  576. package/src/http-client/response.js +2 -2
  577. package/src/http-server/client/index.js +8 -8
  578. package/src/http-server/client/params-to-object.js +10 -10
  579. package/src/http-server/client/request-buffer/form-data-part.js +2 -2
  580. package/src/http-server/client/request-buffer/index.js +8 -8
  581. package/src/http-server/client/request-parser.js +3 -3
  582. package/src/http-server/client/request-runner.js +6 -6
  583. package/src/http-server/client/request-timing.js +5 -5
  584. package/src/http-server/client/request.js +1 -1
  585. package/src/http-server/client/response.js +5 -5
  586. package/src/http-server/client/websocket-request.js +4 -4
  587. package/src/http-server/client/websocket-session.js +18 -18
  588. package/src/http-server/development-reloader.js +5 -5
  589. package/src/http-server/index.js +12 -12
  590. package/src/http-server/remote-address.js +4 -4
  591. package/src/http-server/server-client.js +3 -3
  592. package/src/http-server/server-lock.js +4 -4
  593. package/src/http-server/websocket-channel-subscribers.js +3 -3
  594. package/src/http-server/websocket-channel.js +1 -1
  595. package/src/http-server/websocket-connection.js +1 -1
  596. package/src/http-server/websocket-event-log-store.js +6 -6
  597. package/src/http-server/websocket-events-host.js +2 -2
  598. package/src/http-server/worker-handler/in-process.js +7 -7
  599. package/src/http-server/worker-handler/index.js +4 -4
  600. package/src/http-server/worker-handler/worker-thread.js +3 -3
  601. package/src/logger/outputs/array-output.js +3 -3
  602. package/src/logger/outputs/console-output.js +1 -1
  603. package/src/logger/outputs/file-output.js +4 -4
  604. package/src/logger/outputs/stdout-output.js +1 -1
  605. package/src/logger.js +10 -10
  606. package/src/mailer/backends/smtp.js +3 -3
  607. package/src/mailer/base.js +8 -8
  608. package/src/mailer/delivery.js +4 -4
  609. package/src/plugins/sqljs-wasm-route-controller.js +1 -1
  610. package/src/routes/base-route.js +6 -6
  611. package/src/routes/basic-route.js +1 -1
  612. package/src/routes/hooks/frontend-model-command-route-hook.js +1 -1
  613. package/src/routes/index.js +1 -1
  614. package/src/routes/plugin-routes.js +1 -1
  615. package/src/routes/resolver.js +11 -11
  616. package/src/routes/resource-route.js +1 -1
  617. package/src/testing/browser-frontend-model-event-hook-scenarios.js +7 -7
  618. package/src/testing/expect-utils.js +11 -11
  619. package/src/testing/expect.js +7 -7
  620. package/src/testing/test-files-finder.js +8 -8
  621. package/src/testing/test-filter-parser.js +2 -2
  622. package/src/testing/test-runner.js +16 -16
  623. package/src/testing/test-suite-splitter.js +1 -1
  624. package/src/testing/test.js +15 -15
  625. package/src/utils/backtrace-cleaner.js +1 -1
  626. package/src/utils/format-value.js +1 -1
  627. package/src/utils/model-scope.js +1 -1
  628. package/src/utils/ransack.js +26 -26
  629. package/src/utils/with-tracked-stack-async-hooks.js +7 -7
  630. package/src/utils/with-tracked-stack.js +3 -3
@@ -9,13 +9,13 @@ import useUpdatedEvent from "../frontend-models/use-updated-event.js";
9
9
  import wait from "awaitery/build/wait.js";
10
10
  /**
11
11
  * FrontendModelResourceConfig type.
12
- @typedef {import("../frontend-models/base.js").FrontendModelResourceConfig} FrontendModelResourceConfig */
12
+ * @typedef {import("../frontend-models/base.js").FrontendModelResourceConfig} FrontendModelResourceConfig */
13
13
  /**
14
14
  * Defines this typedef.
15
- @typedef {{id: string, model: FrontendModelBase}} FrontendModelHookTestCreateUpdatePayload */
15
+ * @typedef {{id: string, model: FrontendModelBase}} FrontendModelHookTestCreateUpdatePayload */
16
16
  /**
17
17
  * Defines this typedef.
18
- @typedef {{id: string}} FrontendModelHookTestDestroyPayload */
18
+ * @typedef {{id: string}} FrontendModelHookTestDestroyPayload */
19
19
  /**
20
20
  * FakeSubscriptions type.
21
21
  * @typedef {object} FakeSubscriptions
@@ -219,7 +219,7 @@ async function classLifecycleScenario() {
219
219
  const eventModel = buildFakeModel("1", buildFakeSubscriptions());
220
220
  /**
221
221
  * Received events.
222
- @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
222
+ * @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
223
223
  const receivedEvents = [];
224
224
  let connectedCount = 0;
225
225
  /**
@@ -263,7 +263,7 @@ async function instanceLifecycleScenario() {
263
263
  const model = buildFakeModel("task-1", subscriptions);
264
264
  /**
265
265
  * Received events.
266
- @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
266
+ * @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
267
267
  const receivedEvents = [];
268
268
  let connectedCount = 0;
269
269
  /**
@@ -354,7 +354,7 @@ async function debounceUnmountScenario() {
354
354
  const model = buildFakeModel("task-1", instanceSubscriptions);
355
355
  /**
356
356
  * Received events.
357
- @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
357
+ * @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
358
358
  const receivedEvents = [];
359
359
  /**
360
360
  * Runs test component.
@@ -386,7 +386,7 @@ async function resubscribeInstanceScenario() {
386
386
  const secondModel = buildFakeModel("task-1", secondSubscriptions);
387
387
  /**
388
388
  * Received events.
389
- @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
389
+ * @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
390
390
  const receivedEvents = [];
391
391
  /**
392
392
  * Runs test component.
@@ -441,4 +441,4 @@ export default async function runFrontendModelEventHookScenario(scenarioName) {
441
441
  throw new Error(`Unknown frontend model event hook scenario: ${scenarioName}`);
442
442
  return await scenario();
443
443
  }
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1mcm9udGVuZC1tb2RlbC1ldmVudC1ob29rLXNjZW5hcmlvcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL2Jyb3dzZXItZnJvbnRlbmQtbW9kZWwtZXZlbnQtaG9vay1zY2VuYXJpb3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFFM0MsT0FBTyxpQkFBaUIsTUFBTSwyQ0FBMkMsQ0FBQTtBQUN6RSxPQUFPLGVBQWUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNyRSxPQUFPLGlCQUFpQixNQUFNLDRCQUE0QixDQUFBO0FBQzFELE9BQU8sa0JBQWtCLE1BQU0sNkNBQTZDLENBQUE7QUFDNUUsT0FBTyxlQUFlLE1BQU0seUNBQXlDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sd0JBQXdCLENBQUE7QUFFekM7OzRHQUU0RztBQUM1Rzs7K0ZBRStGO0FBQy9GOztnRUFFZ0U7QUFDaEU7Ozs7Ozs7R0FPRztBQUVIOzs7R0FHRztBQUNILEtBQUssVUFBVSxZQUFZO0lBQ3pCLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3ZCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN4RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxPQUFPLENBQUMsUUFBUTtJQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFNUIsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLElBQUk7WUFBRSxPQUFNO1FBRXpDLE1B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VSxpQ0FBaUMsQ0FBQyxZQUFZO0lBQzFFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUV4QyxJQUFJLENBQUMsUUFBUTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLFlBQVksRUFBRSxDQUFDLENBQUE7SUFFN0YsT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFBO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2NyZWF0ZVJvb3R9IGZyb20gXCJyZWFjdC1kb20vY2xpZW50XCJcblxuaW1wb3J0IHVzZURlc3Ryb3llZEV2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLWRlc3Ryb3llZC1ldmVudC5qc1wiXG5pbXBvcnQgdXNlQ3JlYXRlZEV2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLWNyZWF0ZWQtZXZlbnQuanNcIlxuaW1wb3J0IEZyb250ZW5kTW9kZWxCYXNlIGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiXG5pbXBvcnQgdXNlTW9kZWxDbGFzc0V2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzXCJcbmltcG9ydCB1c2VVcGRhdGVkRXZlbnQgZnJvbSBcIi4uL2Zyb250ZW5kLW1vZGVscy91c2UtdXBkYXRlZC1ldmVudC5qc1wiXG5pbXBvcnQgd2FpdCBmcm9tIFwiYXdhaXRlcnkvYnVpbGQvd2FpdC5qc1wiXG5cbi8qKlxuICogRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlnIHR5cGUuXG4gIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZyAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoaXMgdHlwZWRlZi5cbiAgQHR5cGVkZWYge3tpZDogc3RyaW5nLCBtb2RlbDogRnJvbnRlbmRNb2RlbEJhc2V9fSBGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkICovXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICBAdHlwZWRlZiB7e2lkOiBzdHJpbmd9fSBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCAqL1xuLyoqXG4gKiBGYWtlU3Vic2NyaXB0aW9ucyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gRmFrZVN1YnNjcmlwdGlvbnNcbiAqIEBwcm9wZXJ0eSB7U2V0PChwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkKSA9PiB2b2lkPn0gY3JlYXRlIC0gQ3JlYXRlIGNhbGxiYWNrcy5cbiAqIEBwcm9wZXJ0eSB7U2V0PChwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCkgPT4gdm9pZD59IGRlc3Ryb3kgLSBEZXN0cm95IGNhbGxiYWNrcy5cbiAqIEBwcm9wZXJ0eSB7e2NyZWF0ZTogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3RbXSwgZGVzdHJveTogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3RbXSwgdXBkYXRlOiBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdFtdfX0gb3B0aW9ucyAtIFN1YnNjcmlwdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtTZXQ8KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWQ+fSB1cGRhdGUgLSBVcGRhdGUgY2FsbGJhY2tzLlxuICovXG5cbi8qKlxuICogUnVucyBmbHVzaCBlZmZlY3RzLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgUmVhY3QgZWZmZWN0cyBoYXZlIHJ1bi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmx1c2hFZmZlY3RzKCkge1xuICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSlcbn1cblxuLyoqXG4gKiBSdW5zIHdhaXQgZm9yLlxuICogQHBhcmFtIHsoKSA9PiBib29sZWFufSBjYWxsYmFjayAtIFByZWRpY2F0ZSB0byB3YWl0IGZvci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIHByZWRpY2F0ZSByZXR1cm5zIHRydWUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3IoY2FsbGJhY2spIHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKVxuXG4gIHdoaWxlICghY2FsbGJhY2soKSkge1xuICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0ID4gMTAwMCkgcmV0dXJuXG5cbiAgICBhd2FpdCB3YWl0KDEwKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBidWlsZCBmYWtlIHN1YnNjcmlwdGlvbnMuXG4gKiBAcmV0dXJucyB7RmFrZVN1YnNjcmlwdGlvbnN9IC0gRW1wdHkgZmFrZSBzdWJzY3JpcHRpb24gc3RvcmUuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKSB7XG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBuZXcgU2V0KCksXG4gICAgZGVzdHJveTogbmV3IFNldCgpLFxuICAgIG9wdGlvbnM6IHtjcmVhdGU6IFtdLCBkZXN0cm95OiBbXSwgdXBkYXRlOiBbXX0sXG4gICAgdXBkYXRlOiBuZXcgU2V0KClcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgZmFrZSByZXNvdXJjZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIC0gRmFrZSBmcm9udGVuZCBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ30gLSBNaW5pbWFsIHJlc291cmNlIGNvbmZpZyBmb3IgZmFrZSBzdWJjbGFzc2VzLlxuICovXG5mdW5jdGlvbiBmYWtlUmVzb3VyY2VDb25maWcobW9kZWxOYW1lKSB7XG4gIHJldHVybiB7XG4gICAgYXR0cmlidXRlczogW1wiaWRcIl0sXG4gICAgbW9kZWxOYW1lLFxuICAgIHByaW1hcnlLZXk6IFwiaWRcIlxuICB9XG59XG5cbi8qKlxuICogUnVucyByZW5kZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7UmVhY3QuUmVhY3RFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZW5kZXIuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7cmVyZW5kZXI6IChuZXh0RWxlbWVudDogUmVhY3QuUmVhY3RFbGVtZW50KSA9PiBQcm9taXNlPHZvaWQ+LCB1bm1vdW50OiAoKSA9PiBQcm9taXNlPHZvaWQ+fT59IC0gUmVuZGVyIGNvbnRyb2xzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZW5kZXJFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgY29uc3Qgcm9vdCA9IGNyZWF0ZVJvb3QoY29udGFpbmVyKVxuXG4gIHJvb3QucmVuZGVyKGVsZW1lbnQpXG4gIGF3YWl0IGZsdXNoRWZmZWN0cygpXG5cbiAgcmV0dXJuIHtcbiAgICByZXJlbmRlcjogYXN5bmMgKG5leHRFbGVtZW50KSA9PiB7XG4gICAgICByb290LnJlbmRlcihuZXh0RWxlbWVudClcbiAgICAgIGF3YWl0IGZsdXNoRWZmZWN0cygpXG4gICAgfSxcbiAgICB1bm1vdW50OiBhc3luYyAoKSA9PiB7XG4gICAgICByb290LnVubW91bnQoKVxuICAgICAgY29udGFpbmVyLnJlbW92ZSgpXG4gICAgICBhd2FpdCBmbHVzaEVmZmVjdHMoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYnVpbGQgZmFrZSBtb2RlbCBjbGFzcy5cbiAqIEByZXR1cm5zIHt7TW9kZWxDbGFzczogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbENsYXNzPEZyb250ZW5kTW9kZWxCYXNlPiwgc3Vic2NyaXB0aW9uczogRmFrZVN1YnNjcmlwdGlvbnN9fSAtIEZha2UgbW9kZWwgY2xhc3Mgc2V0dXAuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmFrZU1vZGVsQ2xhc3MoKSB7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBidWlsZEZha2VTdWJzY3JpcHRpb25zKClcblxuICBjbGFzcyBGYWtlTW9kZWxDbGFzcyBleHRlbmRzIEZyb250ZW5kTW9kZWxCYXNlIHtcbiAgICAvKipcbiAgICAgKiBSdW5zIHJlc291cmNlIGNvbmZpZy5cbiAgICAgKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlnfSAtIEZha2UgcmVzb3VyY2UgY29uZmlnLlxuICAgICAqL1xuICAgIHN0YXRpYyByZXNvdXJjZUNvbmZpZygpIHtcbiAgICAgIHJldHVybiBmYWtlUmVzb3VyY2VDb25maWcoXCJIb29rRmFrZUNsYXNzTW9kZWxcIilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIG9uIGNyZWF0ZS5cbiAgICAgKiBAcGFyYW0geyhwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkKSA9PiB2b2lkfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3R9IFtvcHRpb25zXSAtIEV2ZW50IHF1ZXJ5IG9yIHByb2plY3Rpb24gb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTwoKSA9PiB2b2lkPn0gLSBVbnN1YnNjcmliZSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgb25DcmVhdGUoY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICAgICAgc3Vic2NyaXB0aW9ucy5jcmVhdGUuYWRkKGNhbGxiYWNrKVxuICAgICAgc3Vic2NyaXB0aW9ucy5vcHRpb25zLmNyZWF0ZS5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb25zLmNyZWF0ZS5kZWxldGUoY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBvbiBkZXN0cm95LlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdERlc3Ryb3lQYXlsb2FkKSA9PiB2b2lkfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3R9IFtvcHRpb25zXSAtIEV2ZW50IHF1ZXJ5IG9yIHByb2plY3Rpb24gb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTwoKSA9PiB2b2lkPn0gLSBVbnN1YnNjcmliZSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgb25EZXN0cm95KGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMuZGVzdHJveS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMuZGVzdHJveS5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgb24gdXBkYXRlLlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWR9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdH0gW29wdGlvbnNdIC0gRXZlbnQgcXVlcnkgb3IgcHJvamVjdGlvbiBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCgpID0+IHZvaWQ+fSAtIFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBvblVwZGF0ZShjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICBzdWJzY3JpcHRpb25zLnVwZGF0ZS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMudXBkYXRlLnB1c2gob3B0aW9ucylcblxuICAgICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbnMudXBkYXRlLmRlbGV0ZShjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge01vZGVsQ2xhc3M6IEZha2VNb2RlbENsYXNzLCBzdWJzY3JpcHRpb25zfVxufVxuXG4vKipcbiAqIFJ1bnMgZW1pdCBldmVudC5cbiAqIEBwYXJhbSB7RmFrZVN1YnNjcmlwdGlvbnN9IHN1YnNjcmlwdGlvbnMgLSBDYWxsYmFjayBzZXRzLlxuICogQHBhcmFtIHtcImNyZWF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcInVwZGF0ZVwifSBldmVudE5hbWUgLSBFdmVudCBuYW1lLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWR9IHBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBldmVudE5hbWUsIHBheWxvYWQpIHtcbiAgaWYgKGV2ZW50TmFtZSA9PT0gXCJkZXN0cm95XCIpIHtcbiAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHN1YnNjcmlwdGlvbnMuZGVzdHJveSkge1xuICAgICAgY2FsbGJhY2soe2lkOiBwYXlsb2FkLmlkfSlcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghKFwibW9kZWxcIiBpbiBwYXlsb2FkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbW9kZWwgcGF5bG9hZCBmb3IgJHtldmVudE5hbWV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2Ygc3Vic2NyaXB0aW9uc1tldmVudE5hbWVdKSB7XG4gICAgY2FsbGJhY2socGF5bG9hZClcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYnVpbGQgZmFrZSBtb2RlbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIE1vZGVsIGlkLlxuICogQHBhcmFtIHtGYWtlU3Vic2NyaXB0aW9uc30gc3Vic2NyaXB0aW9ucyAtIENhbGxiYWNrIHNldHMuXG4gKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbEJhc2V9IC0gRmFrZSBtb2RlbCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRGYWtlTW9kZWwoaWQsIHN1YnNjcmlwdGlvbnMpIHtcbiAgY2xhc3MgRmFrZU1vZGVsIGV4dGVuZHMgRnJvbnRlbmRNb2RlbEJhc2Uge1xuICAgIC8qKlxuICAgICAqIFJ1bnMgcmVzb3VyY2UgY29uZmlnLlxuICAgICAqIEByZXR1cm5zIHtGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd9IC0gRmFrZSByZXNvdXJjZSBjb25maWcuXG4gICAgICovXG4gICAgc3RhdGljIHJlc291cmNlQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIGZha2VSZXNvdXJjZUNvbmZpZyhcIkhvb2tGYWtlSW5zdGFuY2VNb2RlbFwiKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgb24gZGVzdHJveS5cbiAgICAgKiBAcGFyYW0geyhwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCkgPT4gdm9pZH0gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRPcHRpb25zT2JqZWN0fSBbb3B0aW9uc10gLSBFdmVudCBxdWVyeSBvciBwcm9qZWN0aW9uIG9wdGlvbnMuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8KCkgPT4gdm9pZD59IC0gVW5zdWJzY3JpYmUgY2FsbGJhY2suXG4gICAgICovXG4gICAgYXN5bmMgb25EZXN0cm95KGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMuZGVzdHJveS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMuZGVzdHJveS5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgb24gdXBkYXRlLlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWR9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdH0gW29wdGlvbnNdIC0gRXZlbnQgcXVlcnkgb3IgcHJvamVjdGlvbiBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCgpID0+IHZvaWQ+fSAtIFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIGFzeW5jIG9uVXBkYXRlKGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMudXBkYXRlLmFkZChjYWxsYmFjaylcbiAgICAgIHN1YnNjcmlwdGlvbnMub3B0aW9ucy51cGRhdGUucHVzaChvcHRpb25zKVxuXG4gICAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9ucy51cGRhdGUuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgcHJpbWFyeSBrZXkgdmFsdWUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSBQcmltYXJ5IGtleSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcmltYXJ5S2V5VmFsdWUoKSB7XG4gICAgICByZXR1cm4gaWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IEZha2VNb2RlbCh7aWR9KVxufVxuXG4vKipcbiAqIFJ1bnMgY2xhc3MgbGlmZWN5Y2xlIHNjZW5hcmlvLlxuICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj59IC0gU2NlbmFyaW8gcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiBjbGFzc0xpZmVjeWNsZVNjZW5hcmlvKCkge1xuICBjb25zdCB7TW9kZWxDbGFzcywgc3Vic2NyaXB0aW9uc30gPSBidWlsZEZha2VNb2RlbENsYXNzKClcbiAgY29uc3QgZXZlbnRNb2RlbCA9IGJ1aWxkRmFrZU1vZGVsKFwiMVwiLCBidWlsZEZha2VTdWJzY3JpcHRpb25zKCkpXG4gIC8qKlxuICAgKiBSZWNlaXZlZCBldmVudHMuXG4gICAgQHR5cGUge0FycmF5PEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQgfCBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZD59ICovXG4gIGNvbnN0IHJlY2VpdmVkRXZlbnRzID0gW11cbiAgbGV0IGNvbm5lY3RlZENvdW50ID0gMFxuXG4gIC8qKlxuICAgKiBSdW5zIHRlc3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyB7UmVhY3QuUmVhY3RFbGVtZW50fSAtIFRlc3QgZWxlbWVudC5cbiAgICovXG4gIGZ1bmN0aW9uIFRlc3RDb21wb25lbnQoKSB7XG4gICAgdXNlTW9kZWxDbGFzc0V2ZW50KE1vZGVsQ2xhc3MsIFtcImNyZWF0ZVwiLCBcInVwZGF0ZVwiXSwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtcbiAgICAgIG9uQ29ubmVjdGVkOiAoKSA9PiB7IGNvbm5lY3RlZENvdW50ICs9IDEgfVxuICAgIH0pXG4gICAgdXNlQ3JlYXRlZEV2ZW50KE1vZGVsQ2xhc3MsIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpKVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgfVxuXG4gIGNvbnN0IGNvbnRyb2xzID0gYXdhaXQgcmVuZGVyRWxlbWVudChSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RDb21wb25lbnQpKVxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IHN1YnNjcmlwdGlvbnMuY3JlYXRlLnNpemUgPT09IDIgJiYgc3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSlcblxuICBjb25zdCBtb3VudGVkQ3JlYXRlU3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnMuY3JlYXRlLnNpemVcbiAgY29uc3QgbW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplXG4gIGNvbnN0IG1vdW50ZWREZXN0cm95U3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplXG4gIGNvbnN0IG1vdW50ZWRDb25uZWN0ZWRDb3VudCA9IGNvbm5lY3RlZENvdW50XG5cbiAgZW1pdEV2ZW50KHN1YnNjcmlwdGlvbnMsIFwiY3JlYXRlXCIsIHtpZDogXCIxXCIsIG1vZGVsOiBldmVudE1vZGVsfSlcbiAgZW1pdEV2ZW50KHN1YnNjcmlwdGlvbnMsIFwidXBkYXRlXCIsIHtpZDogXCIxXCIsIG1vZGVsOiBldmVudE1vZGVsfSlcbiAgZW1pdEV2ZW50KHN1YnNjcmlwdGlvbnMsIFwiZGVzdHJveVwiLCB7aWQ6IFwiMVwifSlcblxuICBjb25zdCByZWNlaXZlZEV2ZW50c0FmdGVyRW1pdCA9IHJlY2VpdmVkRXZlbnRzLmxlbmd0aFxuXG4gIGF3YWl0IGNvbnRyb2xzLnVubW91bnQoKVxuXG4gIHJldHVybiB7XG4gICAgbW91bnRlZENvbm5lY3RlZENvdW50LFxuICAgIG1vdW50ZWRDcmVhdGVTdWJzY3JpcHRpb25zLFxuICAgIG1vdW50ZWREZXN0cm95U3Vic2NyaXB0aW9ucyxcbiAgICBtb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9ucyxcbiAgICByZWNlaXZlZEV2ZW50c0FmdGVyRW1pdCxcbiAgICB1bm1vdW50ZWRDcmVhdGVTdWJzY3JpcHRpb25zOiBzdWJzY3JpcHRpb25zLmNyZWF0ZS5zaXplLFxuICAgIHVubW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnM6IHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgaW5zdGFuY2UgbGlmZWN5Y2xlIHNjZW5hcmlvLlxuICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj59IC0gU2NlbmFyaW8gcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiBpbnN0YW5jZUxpZmVjeWNsZVNjZW5hcmlvKCkge1xuICBjb25zdCBzdWJzY3JpcHRpb25zID0gYnVpbGRGYWtlU3Vic2NyaXB0aW9ucygpXG4gIGNvbnN0IG1vZGVsID0gYnVpbGRGYWtlTW9kZWwoXCJ0YXNrLTFcIiwgc3Vic2NyaXB0aW9ucylcbiAgLyoqXG4gICAqIFJlY2VpdmVkIGV2ZW50cy5cbiAgICBAdHlwZSB7QXJyYXk8RnJvbnRlbmRNb2RlbEhvb2tUZXN0Q3JlYXRlVXBkYXRlUGF5bG9hZCB8IEZyb250ZW5kTW9kZWxIb29rVGVzdERlc3Ryb3lQYXlsb2FkPn0gKi9cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHMgPSBbXVxuICBsZXQgY29ubmVjdGVkQ291bnQgPSAwXG5cbiAgLyoqXG4gICAqIFJ1bnMgdGVzdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9IC0gVGVzdCBlbGVtZW50LlxuICAgKi9cbiAgZnVuY3Rpb24gVGVzdENvbXBvbmVudCgpIHtcbiAgICB1c2VVcGRhdGVkRXZlbnQobW9kZWwsIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpLCB7XG4gICAgICBvbkNvbm5lY3RlZDogKCkgPT4geyBjb25uZWN0ZWRDb3VudCArPSAxIH1cbiAgICB9KVxuICAgIHVzZURlc3Ryb3llZEV2ZW50KFttb2RlbF0sIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpLCB7XG4gICAgICBvbkNvbm5lY3RlZDogKCkgPT4geyBjb25uZWN0ZWRDb3VudCArPSAxIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgfVxuXG4gIGNvbnN0IGNvbnRyb2xzID0gYXdhaXQgcmVuZGVyRWxlbWVudChSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RDb21wb25lbnQpKVxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEgJiYgc3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemUgPT09IDEpXG5cbiAgY29uc3QgbW91bnRlZENvbm5lY3RlZENvdW50ID0gY29ubmVjdGVkQ291bnRcbiAgY29uc3QgbW91bnRlZERlc3Ryb3lTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemVcbiAgY29uc3QgbW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplXG5cbiAgZW1pdEV2ZW50KHN1YnNjcmlwdGlvbnMsIFwidXBkYXRlXCIsIHtpZDogXCJ0YXNrLTFcIiwgbW9kZWx9KVxuICBlbWl0RXZlbnQoc3Vic2NyaXB0aW9ucywgXCJkZXN0cm95XCIsIHtpZDogXCJ0YXNrLTFcIn0pXG5cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQgPSByZWNlaXZlZEV2ZW50cy5sZW5ndGhcblxuICBhd2FpdCBjb250cm9scy51bm1vdW50KClcblxuICByZXR1cm4ge1xuICAgIG1vdW50ZWRDb25uZWN0ZWRDb3VudCxcbiAgICBtb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMsXG4gICAgbW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMsXG4gICAgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQsXG4gICAgdW5tb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnM6IHN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplLFxuICAgIHVubW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnM6IHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgcHJvamVjdGlvbiBvcHRpb25zIHNjZW5hcmlvLlxuICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj59IC0gU2NlbmFyaW8gcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiBwcm9qZWN0aW9uT3B0aW9uc1NjZW5hcmlvKCkge1xuICBjb25zdCB7TW9kZWxDbGFzcywgc3Vic2NyaXB0aW9uczogY2xhc3NTdWJzY3JpcHRpb25zfSA9IGJ1aWxkRmFrZU1vZGVsQ2xhc3MoKVxuICBjb25zdCBpbnN0YW5jZVN1YnNjcmlwdGlvbnMgPSBidWlsZEZha2VTdWJzY3JpcHRpb25zKClcbiAgY29uc3QgbW9kZWwgPSBidWlsZEZha2VNb2RlbChcInRhc2stMVwiLCBpbnN0YW5jZVN1YnNjcmlwdGlvbnMpXG4gIGNvbnN0IGNsYXNzUXVlcnkgPSBNb2RlbENsYXNzXG4gICAgLndoZXJlKHtpZDogXCJ0YXNrLTFcIn0pXG4gICAgLnNlbGVjdChbXCJpZFwiXSlcblxuICAvKipcbiAgICogUnVucyB0ZXN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0LlJlYWN0RWxlbWVudH0gLSBUZXN0IGVsZW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBUZXN0Q29tcG9uZW50KCkge1xuICAgIHVzZUNyZWF0ZWRFdmVudChNb2RlbENsYXNzLCAoKSA9PiB7fSwge1xuICAgICAgcHJlbG9hZDogXCJwcm9qZWN0XCIsXG4gICAgICBxdWVyeTogY2xhc3NRdWVyeSxcbiAgICAgIHNlbGVjdDoge1Rhc2s6IFtcImlkXCIsIFwibmFtZVVwcGVyY2FzZVwiXX1cbiAgICB9KVxuICAgIHVzZVVwZGF0ZWRFdmVudChtb2RlbCwgKCkgPT4ge30sIHtcbiAgICAgIHNlbGVjdDogW1wiaWRcIl0sXG4gICAgICB3aXRoQ291bnQ6IFwiY29tbWVudHNcIlxuICAgIH0pXG4gICAgdXNlRGVzdHJveWVkRXZlbnQobW9kZWwsICgpID0+IHt9LCB7XG4gICAgICBwcmVsb2FkOiBcInByb2plY3RcIixcbiAgICAgIHNlbGVjdDogW1wiaWRcIl1cbiAgICB9KVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgfVxuXG4gIGNvbnN0IGNvbnRyb2xzID0gYXdhaXQgcmVuZGVyRWxlbWVudChSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RDb21wb25lbnQpKVxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IGNsYXNzU3Vic2NyaXB0aW9ucy5jcmVhdGUuc2l6ZSA9PT0gMSAmJiBpbnN0YW5jZVN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEgJiYgaW5zdGFuY2VTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZSA9PT0gMSlcblxuICBjb25zdCBjcmVhdGVPcHRpb25zID0gY2xhc3NTdWJzY3JpcHRpb25zLm9wdGlvbnMuY3JlYXRlWzBdIHx8IHt9XG4gIGNvbnN0IHVwZGF0ZU9wdGlvbnMgPSBpbnN0YW5jZVN1YnNjcmlwdGlvbnMub3B0aW9ucy51cGRhdGVbMF0gfHwge31cbiAgY29uc3QgZGVzdHJveU9wdGlvbnMgPSBpbnN0YW5jZVN1YnNjcmlwdGlvbnMub3B0aW9ucy5kZXN0cm95WzBdIHx8IHt9XG5cbiAgYXdhaXQgY29udHJvbHMudW5tb3VudCgpXG5cbiAgcmV0dXJuIHtcbiAgICBjbGFzc0NyZWF0ZVByZWxvYWRQcm9qZWN0OiBjcmVhdGVPcHRpb25zLnByZWxvYWQgPT09IFwicHJvamVjdFwiID8gMSA6IDAsXG4gICAgY2xhc3NDcmVhdGVRdWVyeVBhc3NlZDogY3JlYXRlT3B0aW9ucy5xdWVyeSA9PT0gY2xhc3NRdWVyeSA/IDEgOiAwLFxuICAgIGNsYXNzQ3JlYXRlU2VsZWN0Q291bnQ6IGNyZWF0ZU9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBjcmVhdGVPcHRpb25zLnNlbGVjdCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjcmVhdGVPcHRpb25zLnNlbGVjdCkgJiYgQXJyYXkuaXNBcnJheShjcmVhdGVPcHRpb25zLnNlbGVjdC5UYXNrKSA/IGNyZWF0ZU9wdGlvbnMuc2VsZWN0LlRhc2subGVuZ3RoIDogMCxcbiAgICBpbnN0YW5jZURlc3Ryb3lQcmVsb2FkUHJvamVjdDogZGVzdHJveU9wdGlvbnMucHJlbG9hZCA9PT0gXCJwcm9qZWN0XCIgPyAxIDogMCxcbiAgICBpbnN0YW5jZURlc3Ryb3lTZWxlY3RDb3VudDogQXJyYXkuaXNBcnJheShkZXN0cm95T3B0aW9ucy5zZWxlY3QpID8gZGVzdHJveU9wdGlvbnMuc2VsZWN0Lmxlbmd0aCA6IDAsXG4gICAgaW5zdGFuY2VVcGRhdGVTZWxlY3RDb3VudDogQXJyYXkuaXNBcnJheSh1cGRhdGVPcHRpb25zLnNlbGVjdCkgPyB1cGRhdGVPcHRpb25zLnNlbGVjdC5sZW5ndGggOiAwLFxuICAgIGluc3RhbmNlVXBkYXRlV2l0aENvdW50Q29tbWVudHM6IHVwZGF0ZU9wdGlvbnMud2l0aENvdW50ID09PSBcImNvbW1lbnRzXCIgPyAxIDogMFxuICB9XG59XG5cbi8qKlxuICogUnVucyBkZWJvdW5jZSB1bm1vdW50IHNjZW5hcmlvLlxuICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj59IC0gU2NlbmFyaW8gcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiBkZWJvdW5jZVVubW91bnRTY2VuYXJpbygpIHtcbiAgY29uc3Qge01vZGVsQ2xhc3MsIHN1YnNjcmlwdGlvbnM6IGNsYXNzU3Vic2NyaXB0aW9uc30gPSBidWlsZEZha2VNb2RlbENsYXNzKClcbiAgY29uc3QgaW5zdGFuY2VTdWJzY3JpcHRpb25zID0gYnVpbGRGYWtlU3Vic2NyaXB0aW9ucygpXG4gIGNvbnN0IG1vZGVsID0gYnVpbGRGYWtlTW9kZWwoXCJ0YXNrLTFcIiwgaW5zdGFuY2VTdWJzY3JpcHRpb25zKVxuICAvKipcbiAgICogUmVjZWl2ZWQgZXZlbnRzLlxuICAgIEB0eXBlIHtBcnJheTxGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWQ+fSAqL1xuICBjb25zdCByZWNlaXZlZEV2ZW50cyA9IFtdXG5cbiAgLyoqXG4gICAqIFJ1bnMgdGVzdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9IC0gVGVzdCBlbGVtZW50LlxuICAgKi9cbiAgZnVuY3Rpb24gVGVzdENvbXBvbmVudCgpIHtcbiAgICB1c2VNb2RlbENsYXNzRXZlbnQoTW9kZWxDbGFzcywgXCJ1cGRhdGVcIiwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtkZWJvdW5jZTogMjB9KVxuICAgIHVzZVVwZGF0ZWRFdmVudChtb2RlbCwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtkZWJvdW5jZTogMjB9KVxuICAgIHVzZURlc3Ryb3llZEV2ZW50KG1vZGVsLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSwge2RlYm91bmNlOiAyMH0pXG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICB9XG5cbiAgY29uc3QgY29udHJvbHMgPSBhd2FpdCByZW5kZXJFbGVtZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gY2xhc3NTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplID09PSAxICYmIGluc3RhbmNlU3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSAmJiBpbnN0YW5jZVN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplID09PSAxKVxuXG4gIGVtaXRFdmVudChjbGFzc1N1YnNjcmlwdGlvbnMsIFwidXBkYXRlXCIsIHtpZDogXCJ0YXNrLTFcIiwgbW9kZWx9KVxuICBlbWl0RXZlbnQoaW5zdGFuY2VTdWJzY3JpcHRpb25zLCBcInVwZGF0ZVwiLCB7aWQ6IFwidGFzay0xXCIsIG1vZGVsfSlcbiAgZW1pdEV2ZW50KGluc3RhbmNlU3Vic2NyaXB0aW9ucywgXCJkZXN0cm95XCIsIHtpZDogXCJ0YXNrLTFcIn0pXG5cbiAgYXdhaXQgY29udHJvbHMudW5tb3VudCgpXG4gIGF3YWl0IHdhaXQoMzApXG5cbiAgcmV0dXJuIHtyZWNlaXZlZEV2ZW50c0FmdGVyRGVib3VuY2VXaW5kb3c6IHJlY2VpdmVkRXZlbnRzLmxlbmd0aH1cbn1cblxuLyoqXG4gKiBSdW5zIHJlc3Vic2NyaWJlIGluc3RhbmNlIHNjZW5hcmlvLlxuICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj59IC0gU2NlbmFyaW8gcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXN1YnNjcmliZUluc3RhbmNlU2NlbmFyaW8oKSB7XG4gIGNvbnN0IGZpcnN0U3Vic2NyaXB0aW9ucyA9IGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKVxuICBjb25zdCBzZWNvbmRTdWJzY3JpcHRpb25zID0gYnVpbGRGYWtlU3Vic2NyaXB0aW9ucygpXG4gIGNvbnN0IGZpcnN0TW9kZWwgPSBidWlsZEZha2VNb2RlbChcInRhc2stMVwiLCBmaXJzdFN1YnNjcmlwdGlvbnMpXG4gIGNvbnN0IHNlY29uZE1vZGVsID0gYnVpbGRGYWtlTW9kZWwoXCJ0YXNrLTFcIiwgc2Vjb25kU3Vic2NyaXB0aW9ucylcbiAgLyoqXG4gICAqIFJlY2VpdmVkIGV2ZW50cy5cbiAgICBAdHlwZSB7QXJyYXk8RnJvbnRlbmRNb2RlbEhvb2tUZXN0Q3JlYXRlVXBkYXRlUGF5bG9hZCB8IEZyb250ZW5kTW9kZWxIb29rVGVzdERlc3Ryb3lQYXlsb2FkPn0gKi9cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHMgPSBbXVxuXG4gIC8qKlxuICAgKiBSdW5zIHRlc3QgY29tcG9uZW50LlxuICAgKiBAcGFyYW0ge3ttb2RlbDogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuZGVmYXVsdH19IHByb3BzIC0gQ29tcG9uZW50IHByb3BzLlxuICAgKiBAcmV0dXJucyB7UmVhY3QuUmVhY3RFbGVtZW50fSAtIFRlc3QgZWxlbWVudC5cbiAgICovXG4gIGZ1bmN0aW9uIFRlc3RDb21wb25lbnQoe21vZGVsfSkge1xuICAgIHVzZVVwZGF0ZWRFdmVudChtb2RlbCwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCkpXG4gICAgdXNlRGVzdHJveWVkRXZlbnQobW9kZWwsIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpKVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgfVxuXG4gIGNvbnN0IGNvbnRyb2xzID0gYXdhaXQgcmVuZGVyRWxlbWVudChSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RDb21wb25lbnQsIHttb2RlbDogZmlyc3RNb2RlbH0pKVxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IGZpcnN0U3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSAmJiBmaXJzdFN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplID09PSAxKVxuXG4gIGNvbnN0IGZpcnN0TW91bnRlZERlc3Ryb3lTdWJzY3JpcHRpb25zID0gZmlyc3RTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZVxuICBjb25zdCBmaXJzdE1vdW50ZWRVcGRhdGVTdWJzY3JpcHRpb25zID0gZmlyc3RTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplXG5cbiAgYXdhaXQgY29udHJvbHMucmVyZW5kZXIoUmVhY3QuY3JlYXRlRWxlbWVudChUZXN0Q29tcG9uZW50LCB7bW9kZWw6IHNlY29uZE1vZGVsfSkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gZmlyc3RTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplID09PSAwICYmIGZpcnN0U3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemUgPT09IDAgJiYgc2Vjb25kU3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSAmJiBzZWNvbmRTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZSA9PT0gMSlcblxuICBjb25zdCBmaXJzdEFmdGVyUmVyZW5kZXJEZXN0cm95U3Vic2NyaXB0aW9ucyA9IGZpcnN0U3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemVcbiAgY29uc3QgZmlyc3RBZnRlclJlcmVuZGVyVXBkYXRlU3Vic2NyaXB0aW9ucyA9IGZpcnN0U3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZVxuICBjb25zdCBzZWNvbmRBZnRlclJlcmVuZGVyRGVzdHJveVN1YnNjcmlwdGlvbnMgPSBzZWNvbmRTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZVxuICBjb25zdCBzZWNvbmRBZnRlclJlcmVuZGVyVXBkYXRlU3Vic2NyaXB0aW9ucyA9IHNlY29uZFN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcblxuICBlbWl0RXZlbnQoZmlyc3RTdWJzY3JpcHRpb25zLCBcInVwZGF0ZVwiLCB7aWQ6IFwidGFzay0xXCIsIG1vZGVsOiBmaXJzdE1vZGVsfSlcbiAgZW1pdEV2ZW50KHNlY29uZFN1YnNjcmlwdGlvbnMsIFwidXBkYXRlXCIsIHtpZDogXCJ0YXNrLTFcIiwgbW9kZWw6IHNlY29uZE1vZGVsfSlcbiAgZW1pdEV2ZW50KHNlY29uZFN1YnNjcmlwdGlvbnMsIFwiZGVzdHJveVwiLCB7aWQ6IFwidGFzay0xXCJ9KVxuXG4gIGNvbnN0IHJlY2VpdmVkRXZlbnRzQWZ0ZXJFbWl0ID0gcmVjZWl2ZWRFdmVudHMubGVuZ3RoXG5cbiAgYXdhaXQgY29udHJvbHMudW5tb3VudCgpXG5cbiAgcmV0dXJuIHtcbiAgICBmaXJzdEFmdGVyUmVyZW5kZXJEZXN0cm95U3Vic2NyaXB0aW9ucyxcbiAgICBmaXJzdEFmdGVyUmVyZW5kZXJVcGRhdGVTdWJzY3JpcHRpb25zLFxuICAgIGZpcnN0TW91bnRlZERlc3Ryb3lTdWJzY3JpcHRpb25zLFxuICAgIGZpcnN0TW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMsXG4gICAgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQsXG4gICAgc2Vjb25kQWZ0ZXJSZXJlbmRlckRlc3Ryb3lTdWJzY3JpcHRpb25zLFxuICAgIHNlY29uZEFmdGVyUmVyZW5kZXJVcGRhdGVTdWJzY3JpcHRpb25zXG4gIH1cbn1cblxuY29uc3Qgc2NlbmFyaW9zID0ge1xuICBjbGFzc0xpZmVjeWNsZTogY2xhc3NMaWZlY3ljbGVTY2VuYXJpbyxcbiAgZGVib3VuY2VVbm1vdW50OiBkZWJvdW5jZVVubW91bnRTY2VuYXJpbyxcbiAgaW5zdGFuY2VMaWZlY3ljbGU6IGluc3RhbmNlTGlmZWN5Y2xlU2NlbmFyaW8sXG4gIHByb2plY3Rpb25PcHRpb25zOiBwcm9qZWN0aW9uT3B0aW9uc1NjZW5hcmlvLFxuICByZXN1YnNjcmliZUluc3RhbmNlOiByZXN1YnNjcmliZUluc3RhbmNlU2NlbmFyaW9cbn1cblxuLyoqXG4gKiBSdW5zIHJ1biBmcm9udGVuZCBtb2RlbCBldmVudCBob29rIHNjZW5hcmlvLlxuICogQHBhcmFtIHtrZXlvZiB0eXBlb2Ygc2NlbmFyaW9zfSBzY2VuYXJpb05hbWUgLSBTY2VuYXJpbyBuYW1lLlxuICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj59IC0gU2NlbmFyaW8gcmVzdWx0LlxuICovXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBydW5Gcm9udGVuZE1vZGVsRXZlbnRIb29rU2NlbmFyaW8oc2NlbmFyaW9OYW1lKSB7XG4gIGNvbnN0IHNjZW5hcmlvID0gc2NlbmFyaW9zW3NjZW5hcmlvTmFtZV1cblxuICBpZiAoIXNjZW5hcmlvKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZnJvbnRlbmQgbW9kZWwgZXZlbnQgaG9vayBzY2VuYXJpbzogJHtzY2VuYXJpb05hbWV9YClcblxuICByZXR1cm4gYXdhaXQgc2NlbmFyaW8oKVxufVxuIl19
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1mcm9udGVuZC1tb2RlbC1ldmVudC1ob29rLXNjZW5hcmlvcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL2Jyb3dzZXItZnJvbnRlbmQtbW9kZWwtZXZlbnQtaG9vay1zY2VuYXJpb3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFFM0MsT0FBTyxpQkFBaUIsTUFBTSwyQ0FBMkMsQ0FBQTtBQUN6RSxPQUFPLGVBQWUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNyRSxPQUFPLGlCQUFpQixNQUFNLDRCQUE0QixDQUFBO0FBQzFELE9BQU8sa0JBQWtCLE1BQU0sNkNBQTZDLENBQUE7QUFDNUUsT0FBTyxlQUFlLE1BQU0seUNBQXlDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sd0JBQXdCLENBQUE7QUFFekM7OzZHQUU2RztBQUM3Rzs7Z0dBRWdHO0FBQ2hHOztpRUFFaUU7QUFDakU7Ozs7Ozs7R0FPRztBQUVIOzs7R0FHRztBQUNILEtBQUssVUFBVSxZQUFZO0lBQ3pCLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3ZCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN4RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxPQUFPLENBQUMsUUFBUTtJQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFNUIsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLElBQUk7WUFBRSxPQUFNO1FBRXpDLE1B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VSxpQ0FBaUMsQ0FBQyxZQUFZO0lBQzFFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUV4QyxJQUFJLENBQUMsUUFBUTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLFlBQVksRUFBRSxDQUFDLENBQUE7SUFFN0YsT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFBO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2NyZWF0ZVJvb3R9IGZyb20gXCJyZWFjdC1kb20vY2xpZW50XCJcblxuaW1wb3J0IHVzZURlc3Ryb3llZEV2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLWRlc3Ryb3llZC1ldmVudC5qc1wiXG5pbXBvcnQgdXNlQ3JlYXRlZEV2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLWNyZWF0ZWQtZXZlbnQuanNcIlxuaW1wb3J0IEZyb250ZW5kTW9kZWxCYXNlIGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiXG5pbXBvcnQgdXNlTW9kZWxDbGFzc0V2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzXCJcbmltcG9ydCB1c2VVcGRhdGVkRXZlbnQgZnJvbSBcIi4uL2Zyb250ZW5kLW1vZGVscy91c2UtdXBkYXRlZC1ldmVudC5qc1wiXG5pbXBvcnQgd2FpdCBmcm9tIFwiYXdhaXRlcnkvYnVpbGQvd2FpdC5qc1wiXG5cbi8qKlxuICogRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlnIHR5cGUuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlnfSBGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWcgKi9cbi8qKlxuICogRGVmaW5lcyB0aGlzIHR5cGVkZWYuXG4gKiBAdHlwZWRlZiB7e2lkOiBzdHJpbmcsIG1vZGVsOiBGcm9udGVuZE1vZGVsQmFzZX19IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQgKi9cbi8qKlxuICogRGVmaW5lcyB0aGlzIHR5cGVkZWYuXG4gKiBAdHlwZWRlZiB7e2lkOiBzdHJpbmd9fSBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCAqL1xuLyoqXG4gKiBGYWtlU3Vic2NyaXB0aW9ucyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gRmFrZVN1YnNjcmlwdGlvbnNcbiAqIEBwcm9wZXJ0eSB7U2V0PChwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkKSA9PiB2b2lkPn0gY3JlYXRlIC0gQ3JlYXRlIGNhbGxiYWNrcy5cbiAqIEBwcm9wZXJ0eSB7U2V0PChwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCkgPT4gdm9pZD59IGRlc3Ryb3kgLSBEZXN0cm95IGNhbGxiYWNrcy5cbiAqIEBwcm9wZXJ0eSB7e2NyZWF0ZTogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3RbXSwgZGVzdHJveTogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3RbXSwgdXBkYXRlOiBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdFtdfX0gb3B0aW9ucyAtIFN1YnNjcmlwdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtTZXQ8KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWQ+fSB1cGRhdGUgLSBVcGRhdGUgY2FsbGJhY2tzLlxuICovXG5cbi8qKlxuICogUnVucyBmbHVzaCBlZmZlY3RzLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgUmVhY3QgZWZmZWN0cyBoYXZlIHJ1bi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmx1c2hFZmZlY3RzKCkge1xuICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSlcbn1cblxuLyoqXG4gKiBSdW5zIHdhaXQgZm9yLlxuICogQHBhcmFtIHsoKSA9PiBib29sZWFufSBjYWxsYmFjayAtIFByZWRpY2F0ZSB0byB3YWl0IGZvci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIHByZWRpY2F0ZSByZXR1cm5zIHRydWUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3IoY2FsbGJhY2spIHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKVxuXG4gIHdoaWxlICghY2FsbGJhY2soKSkge1xuICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0ID4gMTAwMCkgcmV0dXJuXG5cbiAgICBhd2FpdCB3YWl0KDEwKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBidWlsZCBmYWtlIHN1YnNjcmlwdGlvbnMuXG4gKiBAcmV0dXJucyB7RmFrZVN1YnNjcmlwdGlvbnN9IC0gRW1wdHkgZmFrZSBzdWJzY3JpcHRpb24gc3RvcmUuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKSB7XG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBuZXcgU2V0KCksXG4gICAgZGVzdHJveTogbmV3IFNldCgpLFxuICAgIG9wdGlvbnM6IHtjcmVhdGU6IFtdLCBkZXN0cm95OiBbXSwgdXBkYXRlOiBbXX0sXG4gICAgdXBkYXRlOiBuZXcgU2V0KClcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgZmFrZSByZXNvdXJjZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIC0gRmFrZSBmcm9udGVuZCBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ30gLSBNaW5pbWFsIHJlc291cmNlIGNvbmZpZyBmb3IgZmFrZSBzdWJjbGFzc2VzLlxuICovXG5mdW5jdGlvbiBmYWtlUmVzb3VyY2VDb25maWcobW9kZWxOYW1lKSB7XG4gIHJldHVybiB7XG4gICAgYXR0cmlidXRlczogW1wiaWRcIl0sXG4gICAgbW9kZWxOYW1lLFxuICAgIHByaW1hcnlLZXk6IFwiaWRcIlxuICB9XG59XG5cbi8qKlxuICogUnVucyByZW5kZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7UmVhY3QuUmVhY3RFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZW5kZXIuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7cmVyZW5kZXI6IChuZXh0RWxlbWVudDogUmVhY3QuUmVhY3RFbGVtZW50KSA9PiBQcm9taXNlPHZvaWQ+LCB1bm1vdW50OiAoKSA9PiBQcm9taXNlPHZvaWQ+fT59IC0gUmVuZGVyIGNvbnRyb2xzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZW5kZXJFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgY29uc3Qgcm9vdCA9IGNyZWF0ZVJvb3QoY29udGFpbmVyKVxuXG4gIHJvb3QucmVuZGVyKGVsZW1lbnQpXG4gIGF3YWl0IGZsdXNoRWZmZWN0cygpXG5cbiAgcmV0dXJuIHtcbiAgICByZXJlbmRlcjogYXN5bmMgKG5leHRFbGVtZW50KSA9PiB7XG4gICAgICByb290LnJlbmRlcihuZXh0RWxlbWVudClcbiAgICAgIGF3YWl0IGZsdXNoRWZmZWN0cygpXG4gICAgfSxcbiAgICB1bm1vdW50OiBhc3luYyAoKSA9PiB7XG4gICAgICByb290LnVubW91bnQoKVxuICAgICAgY29udGFpbmVyLnJlbW92ZSgpXG4gICAgICBhd2FpdCBmbHVzaEVmZmVjdHMoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYnVpbGQgZmFrZSBtb2RlbCBjbGFzcy5cbiAqIEByZXR1cm5zIHt7TW9kZWxDbGFzczogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbENsYXNzPEZyb250ZW5kTW9kZWxCYXNlPiwgc3Vic2NyaXB0aW9uczogRmFrZVN1YnNjcmlwdGlvbnN9fSAtIEZha2UgbW9kZWwgY2xhc3Mgc2V0dXAuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmFrZU1vZGVsQ2xhc3MoKSB7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBidWlsZEZha2VTdWJzY3JpcHRpb25zKClcblxuICBjbGFzcyBGYWtlTW9kZWxDbGFzcyBleHRlbmRzIEZyb250ZW5kTW9kZWxCYXNlIHtcbiAgICAvKipcbiAgICAgKiBSdW5zIHJlc291cmNlIGNvbmZpZy5cbiAgICAgKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlnfSAtIEZha2UgcmVzb3VyY2UgY29uZmlnLlxuICAgICAqL1xuICAgIHN0YXRpYyByZXNvdXJjZUNvbmZpZygpIHtcbiAgICAgIHJldHVybiBmYWtlUmVzb3VyY2VDb25maWcoXCJIb29rRmFrZUNsYXNzTW9kZWxcIilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIG9uIGNyZWF0ZS5cbiAgICAgKiBAcGFyYW0geyhwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkKSA9PiB2b2lkfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3R9IFtvcHRpb25zXSAtIEV2ZW50IHF1ZXJ5IG9yIHByb2plY3Rpb24gb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTwoKSA9PiB2b2lkPn0gLSBVbnN1YnNjcmliZSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgb25DcmVhdGUoY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICAgICAgc3Vic2NyaXB0aW9ucy5jcmVhdGUuYWRkKGNhbGxiYWNrKVxuICAgICAgc3Vic2NyaXB0aW9ucy5vcHRpb25zLmNyZWF0ZS5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb25zLmNyZWF0ZS5kZWxldGUoY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBvbiBkZXN0cm95LlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdERlc3Ryb3lQYXlsb2FkKSA9PiB2b2lkfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3R9IFtvcHRpb25zXSAtIEV2ZW50IHF1ZXJ5IG9yIHByb2plY3Rpb24gb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTwoKSA9PiB2b2lkPn0gLSBVbnN1YnNjcmliZSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgb25EZXN0cm95KGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMuZGVzdHJveS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMuZGVzdHJveS5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgb24gdXBkYXRlLlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWR9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdH0gW29wdGlvbnNdIC0gRXZlbnQgcXVlcnkgb3IgcHJvamVjdGlvbiBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCgpID0+IHZvaWQ+fSAtIFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBvblVwZGF0ZShjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICBzdWJzY3JpcHRpb25zLnVwZGF0ZS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMudXBkYXRlLnB1c2gob3B0aW9ucylcblxuICAgICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbnMudXBkYXRlLmRlbGV0ZShjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge01vZGVsQ2xhc3M6IEZha2VNb2RlbENsYXNzLCBzdWJzY3JpcHRpb25zfVxufVxuXG4vKipcbiAqIFJ1bnMgZW1pdCBldmVudC5cbiAqIEBwYXJhbSB7RmFrZVN1YnNjcmlwdGlvbnN9IHN1YnNjcmlwdGlvbnMgLSBDYWxsYmFjayBzZXRzLlxuICogQHBhcmFtIHtcImNyZWF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcInVwZGF0ZVwifSBldmVudE5hbWUgLSBFdmVudCBuYW1lLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWR9IHBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBldmVudE5hbWUsIHBheWxvYWQpIHtcbiAgaWYgKGV2ZW50TmFtZSA9PT0gXCJkZXN0cm95XCIpIHtcbiAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHN1YnNjcmlwdGlvbnMuZGVzdHJveSkge1xuICAgICAgY2FsbGJhY2soe2lkOiBwYXlsb2FkLmlkfSlcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghKFwibW9kZWxcIiBpbiBwYXlsb2FkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbW9kZWwgcGF5bG9hZCBmb3IgJHtldmVudE5hbWV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2Ygc3Vic2NyaXB0aW9uc1tldmVudE5hbWVdKSB7XG4gICAgY2FsbGJhY2socGF5bG9hZClcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYnVpbGQgZmFrZSBtb2RlbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIE1vZGVsIGlkLlxuICogQHBhcmFtIHtGYWtlU3Vic2NyaXB0aW9uc30gc3Vic2NyaXB0aW9ucyAtIENhbGxiYWNrIHNldHMuXG4gKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbEJhc2V9IC0gRmFrZSBtb2RlbCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRGYWtlTW9kZWwoaWQsIHN1YnNjcmlwdGlvbnMpIHtcbiAgY2xhc3MgRmFrZU1vZGVsIGV4dGVuZHMgRnJvbnRlbmRNb2RlbEJhc2Uge1xuICAgIC8qKlxuICAgICAqIFJ1bnMgcmVzb3VyY2UgY29uZmlnLlxuICAgICAqIEByZXR1cm5zIHtGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd9IC0gRmFrZSByZXNvdXJjZSBjb25maWcuXG4gICAgICovXG4gICAgc3RhdGljIHJlc291cmNlQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIGZha2VSZXNvdXJjZUNvbmZpZyhcIkhvb2tGYWtlSW5zdGFuY2VNb2RlbFwiKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgb24gZGVzdHJveS5cbiAgICAgKiBAcGFyYW0geyhwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCkgPT4gdm9pZH0gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRPcHRpb25zT2JqZWN0fSBbb3B0aW9uc10gLSBFdmVudCBxdWVyeSBvciBwcm9qZWN0aW9uIG9wdGlvbnMuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8KCkgPT4gdm9pZD59IC0gVW5zdWJzY3JpYmUgY2FsbGJhY2suXG4gICAgICovXG4gICAgYXN5bmMgb25EZXN0cm95KGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMuZGVzdHJveS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMuZGVzdHJveS5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgb24gdXBkYXRlLlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWR9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdH0gW29wdGlvbnNdIC0gRXZlbnQgcXVlcnkgb3IgcHJvamVjdGlvbiBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCgpID0+IHZvaWQ+fSAtIFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIGFzeW5jIG9uVXBkYXRlKGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMudXBkYXRlLmFkZChjYWxsYmFjaylcbiAgICAgIHN1YnNjcmlwdGlvbnMub3B0aW9ucy51cGRhdGUucHVzaChvcHRpb25zKVxuXG4gICAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9ucy51cGRhdGUuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgcHJpbWFyeSBrZXkgdmFsdWUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSBQcmltYXJ5IGtleSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcmltYXJ5S2V5VmFsdWUoKSB7XG4gICAgICByZXR1cm4gaWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IEZha2VNb2RlbCh7aWR9KVxufVxuXG4vKipcbiAqIFJ1bnMgY2xhc3MgbGlmZWN5Y2xlIHNjZW5hcmlvLlxuICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj59IC0gU2NlbmFyaW8gcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiBjbGFzc0xpZmVjeWNsZVNjZW5hcmlvKCkge1xuICBjb25zdCB7TW9kZWxDbGFzcywgc3Vic2NyaXB0aW9uc30gPSBidWlsZEZha2VNb2RlbENsYXNzKClcbiAgY29uc3QgZXZlbnRNb2RlbCA9IGJ1aWxkRmFrZU1vZGVsKFwiMVwiLCBidWlsZEZha2VTdWJzY3JpcHRpb25zKCkpXG4gIC8qKlxuICAgKiBSZWNlaXZlZCBldmVudHMuXG4gICAqIEB0eXBlIHtBcnJheTxGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWQ+fSAqL1xuICBjb25zdCByZWNlaXZlZEV2ZW50cyA9IFtdXG4gIGxldCBjb25uZWN0ZWRDb3VudCA9IDBcblxuICAvKipcbiAgICogUnVucyB0ZXN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0LlJlYWN0RWxlbWVudH0gLSBUZXN0IGVsZW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBUZXN0Q29tcG9uZW50KCkge1xuICAgIHVzZU1vZGVsQ2xhc3NFdmVudChNb2RlbENsYXNzLCBbXCJjcmVhdGVcIiwgXCJ1cGRhdGVcIl0sIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpLCB7XG4gICAgICBvbkNvbm5lY3RlZDogKCkgPT4geyBjb25uZWN0ZWRDb3VudCArPSAxIH1cbiAgICB9KVxuICAgIHVzZUNyZWF0ZWRFdmVudChNb2RlbENsYXNzLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSlcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gIH1cblxuICBjb25zdCBjb250cm9scyA9IGF3YWl0IHJlbmRlckVsZW1lbnQoUmVhY3QuY3JlYXRlRWxlbWVudChUZXN0Q29tcG9uZW50KSlcbiAgYXdhaXQgd2FpdEZvcigoKSA9PiBzdWJzY3JpcHRpb25zLmNyZWF0ZS5zaXplID09PSAyICYmIHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEpXG5cbiAgY29uc3QgbW91bnRlZENyZWF0ZVN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLmNyZWF0ZS5zaXplXG4gIGNvbnN0IG1vdW50ZWRVcGRhdGVTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZVxuICBjb25zdCBtb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZVxuICBjb25zdCBtb3VudGVkQ29ubmVjdGVkQ291bnQgPSBjb25uZWN0ZWRDb3VudFxuXG4gIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBcImNyZWF0ZVwiLCB7aWQ6IFwiMVwiLCBtb2RlbDogZXZlbnRNb2RlbH0pXG4gIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBcInVwZGF0ZVwiLCB7aWQ6IFwiMVwiLCBtb2RlbDogZXZlbnRNb2RlbH0pXG4gIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBcImRlc3Ryb3lcIiwge2lkOiBcIjFcIn0pXG5cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQgPSByZWNlaXZlZEV2ZW50cy5sZW5ndGhcblxuICBhd2FpdCBjb250cm9scy51bm1vdW50KClcblxuICByZXR1cm4ge1xuICAgIG1vdW50ZWRDb25uZWN0ZWRDb3VudCxcbiAgICBtb3VudGVkQ3JlYXRlU3Vic2NyaXB0aW9ucyxcbiAgICBtb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMsXG4gICAgbW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMsXG4gICAgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQsXG4gICAgdW5tb3VudGVkQ3JlYXRlU3Vic2NyaXB0aW9uczogc3Vic2NyaXB0aW9ucy5jcmVhdGUuc2l6ZSxcbiAgICB1bm1vdW50ZWRVcGRhdGVTdWJzY3JpcHRpb25zOiBzdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGluc3RhbmNlIGxpZmVjeWNsZSBzY2VuYXJpby5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+fSAtIFNjZW5hcmlvIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFuY2VMaWZlY3ljbGVTY2VuYXJpbygpIHtcbiAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKVxuICBjb25zdCBtb2RlbCA9IGJ1aWxkRmFrZU1vZGVsKFwidGFzay0xXCIsIHN1YnNjcmlwdGlvbnMpXG4gIC8qKlxuICAgKiBSZWNlaXZlZCBldmVudHMuXG4gICAqIEB0eXBlIHtBcnJheTxGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWQ+fSAqL1xuICBjb25zdCByZWNlaXZlZEV2ZW50cyA9IFtdXG4gIGxldCBjb25uZWN0ZWRDb3VudCA9IDBcblxuICAvKipcbiAgICogUnVucyB0ZXN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0LlJlYWN0RWxlbWVudH0gLSBUZXN0IGVsZW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBUZXN0Q29tcG9uZW50KCkge1xuICAgIHVzZVVwZGF0ZWRFdmVudChtb2RlbCwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtcbiAgICAgIG9uQ29ubmVjdGVkOiAoKSA9PiB7IGNvbm5lY3RlZENvdW50ICs9IDEgfVxuICAgIH0pXG4gICAgdXNlRGVzdHJveWVkRXZlbnQoW21vZGVsXSwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtcbiAgICAgIG9uQ29ubmVjdGVkOiAoKSA9PiB7IGNvbm5lY3RlZENvdW50ICs9IDEgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICB9XG5cbiAgY29uc3QgY29udHJvbHMgPSBhd2FpdCByZW5kZXJFbGVtZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gc3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSAmJiBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZSA9PT0gMSlcblxuICBjb25zdCBtb3VudGVkQ29ubmVjdGVkQ291bnQgPSBjb25uZWN0ZWRDb3VudFxuICBjb25zdCBtb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZVxuICBjb25zdCBtb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcblxuICBlbWl0RXZlbnQoc3Vic2NyaXB0aW9ucywgXCJ1cGRhdGVcIiwge2lkOiBcInRhc2stMVwiLCBtb2RlbH0pXG4gIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBcImRlc3Ryb3lcIiwge2lkOiBcInRhc2stMVwifSlcblxuICBjb25zdCByZWNlaXZlZEV2ZW50c0FmdGVyRW1pdCA9IHJlY2VpdmVkRXZlbnRzLmxlbmd0aFxuXG4gIGF3YWl0IGNvbnRyb2xzLnVubW91bnQoKVxuXG4gIHJldHVybiB7XG4gICAgbW91bnRlZENvbm5lY3RlZENvdW50LFxuICAgIG1vdW50ZWREZXN0cm95U3Vic2NyaXB0aW9ucyxcbiAgICBtb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9ucyxcbiAgICByZWNlaXZlZEV2ZW50c0FmdGVyRW1pdCxcbiAgICB1bm1vdW50ZWREZXN0cm95U3Vic2NyaXB0aW9uczogc3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemUsXG4gICAgdW5tb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9uczogc3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZVxuICB9XG59XG5cbi8qKlxuICogUnVucyBwcm9qZWN0aW9uIG9wdGlvbnMgc2NlbmFyaW8uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2plY3Rpb25PcHRpb25zU2NlbmFyaW8oKSB7XG4gIGNvbnN0IHtNb2RlbENsYXNzLCBzdWJzY3JpcHRpb25zOiBjbGFzc1N1YnNjcmlwdGlvbnN9ID0gYnVpbGRGYWtlTW9kZWxDbGFzcygpXG4gIGNvbnN0IGluc3RhbmNlU3Vic2NyaXB0aW9ucyA9IGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKVxuICBjb25zdCBtb2RlbCA9IGJ1aWxkRmFrZU1vZGVsKFwidGFzay0xXCIsIGluc3RhbmNlU3Vic2NyaXB0aW9ucylcbiAgY29uc3QgY2xhc3NRdWVyeSA9IE1vZGVsQ2xhc3NcbiAgICAud2hlcmUoe2lkOiBcInRhc2stMVwifSlcbiAgICAuc2VsZWN0KFtcImlkXCJdKVxuXG4gIC8qKlxuICAgKiBSdW5zIHRlc3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyB7UmVhY3QuUmVhY3RFbGVtZW50fSAtIFRlc3QgZWxlbWVudC5cbiAgICovXG4gIGZ1bmN0aW9uIFRlc3RDb21wb25lbnQoKSB7XG4gICAgdXNlQ3JlYXRlZEV2ZW50KE1vZGVsQ2xhc3MsICgpID0+IHt9LCB7XG4gICAgICBwcmVsb2FkOiBcInByb2plY3RcIixcbiAgICAgIHF1ZXJ5OiBjbGFzc1F1ZXJ5LFxuICAgICAgc2VsZWN0OiB7VGFzazogW1wiaWRcIiwgXCJuYW1lVXBwZXJjYXNlXCJdfVxuICAgIH0pXG4gICAgdXNlVXBkYXRlZEV2ZW50KG1vZGVsLCAoKSA9PiB7fSwge1xuICAgICAgc2VsZWN0OiBbXCJpZFwiXSxcbiAgICAgIHdpdGhDb3VudDogXCJjb21tZW50c1wiXG4gICAgfSlcbiAgICB1c2VEZXN0cm95ZWRFdmVudChtb2RlbCwgKCkgPT4ge30sIHtcbiAgICAgIHByZWxvYWQ6IFwicHJvamVjdFwiLFxuICAgICAgc2VsZWN0OiBbXCJpZFwiXVxuICAgIH0pXG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICB9XG5cbiAgY29uc3QgY29udHJvbHMgPSBhd2FpdCByZW5kZXJFbGVtZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gY2xhc3NTdWJzY3JpcHRpb25zLmNyZWF0ZS5zaXplID09PSAxICYmIGluc3RhbmNlU3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSAmJiBpbnN0YW5jZVN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplID09PSAxKVxuXG4gIGNvbnN0IGNyZWF0ZU9wdGlvbnMgPSBjbGFzc1N1YnNjcmlwdGlvbnMub3B0aW9ucy5jcmVhdGVbMF0gfHwge31cbiAgY29uc3QgdXBkYXRlT3B0aW9ucyA9IGluc3RhbmNlU3Vic2NyaXB0aW9ucy5vcHRpb25zLnVwZGF0ZVswXSB8fCB7fVxuICBjb25zdCBkZXN0cm95T3B0aW9ucyA9IGluc3RhbmNlU3Vic2NyaXB0aW9ucy5vcHRpb25zLmRlc3Ryb3lbMF0gfHwge31cblxuICBhd2FpdCBjb250cm9scy51bm1vdW50KClcblxuICByZXR1cm4ge1xuICAgIGNsYXNzQ3JlYXRlUHJlbG9hZFByb2plY3Q6IGNyZWF0ZU9wdGlvbnMucHJlbG9hZCA9PT0gXCJwcm9qZWN0XCIgPyAxIDogMCxcbiAgICBjbGFzc0NyZWF0ZVF1ZXJ5UGFzc2VkOiBjcmVhdGVPcHRpb25zLnF1ZXJ5ID09PSBjbGFzc1F1ZXJ5ID8gMSA6IDAsXG4gICAgY2xhc3NDcmVhdGVTZWxlY3RDb3VudDogY3JlYXRlT3B0aW9ucy5zZWxlY3QgJiYgdHlwZW9mIGNyZWF0ZU9wdGlvbnMuc2VsZWN0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGNyZWF0ZU9wdGlvbnMuc2VsZWN0KSAmJiBBcnJheS5pc0FycmF5KGNyZWF0ZU9wdGlvbnMuc2VsZWN0LlRhc2spID8gY3JlYXRlT3B0aW9ucy5zZWxlY3QuVGFzay5sZW5ndGggOiAwLFxuICAgIGluc3RhbmNlRGVzdHJveVByZWxvYWRQcm9qZWN0OiBkZXN0cm95T3B0aW9ucy5wcmVsb2FkID09PSBcInByb2plY3RcIiA/IDEgOiAwLFxuICAgIGluc3RhbmNlRGVzdHJveVNlbGVjdENvdW50OiBBcnJheS5pc0FycmF5KGRlc3Ryb3lPcHRpb25zLnNlbGVjdCkgPyBkZXN0cm95T3B0aW9ucy5zZWxlY3QubGVuZ3RoIDogMCxcbiAgICBpbnN0YW5jZVVwZGF0ZVNlbGVjdENvdW50OiBBcnJheS5pc0FycmF5KHVwZGF0ZU9wdGlvbnMuc2VsZWN0KSA/IHVwZGF0ZU9wdGlvbnMuc2VsZWN0Lmxlbmd0aCA6IDAsXG4gICAgaW5zdGFuY2VVcGRhdGVXaXRoQ291bnRDb21tZW50czogdXBkYXRlT3B0aW9ucy53aXRoQ291bnQgPT09IFwiY29tbWVudHNcIiA/IDEgOiAwXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGRlYm91bmNlIHVubW91bnQgc2NlbmFyaW8uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlYm91bmNlVW5tb3VudFNjZW5hcmlvKCkge1xuICBjb25zdCB7TW9kZWxDbGFzcywgc3Vic2NyaXB0aW9uczogY2xhc3NTdWJzY3JpcHRpb25zfSA9IGJ1aWxkRmFrZU1vZGVsQ2xhc3MoKVxuICBjb25zdCBpbnN0YW5jZVN1YnNjcmlwdGlvbnMgPSBidWlsZEZha2VTdWJzY3JpcHRpb25zKClcbiAgY29uc3QgbW9kZWwgPSBidWlsZEZha2VNb2RlbChcInRhc2stMVwiLCBpbnN0YW5jZVN1YnNjcmlwdGlvbnMpXG4gIC8qKlxuICAgKiBSZWNlaXZlZCBldmVudHMuXG4gICAqIEB0eXBlIHtBcnJheTxGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWQ+fSAqL1xuICBjb25zdCByZWNlaXZlZEV2ZW50cyA9IFtdXG5cbiAgLyoqXG4gICAqIFJ1bnMgdGVzdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9IC0gVGVzdCBlbGVtZW50LlxuICAgKi9cbiAgZnVuY3Rpb24gVGVzdENvbXBvbmVudCgpIHtcbiAgICB1c2VNb2RlbENsYXNzRXZlbnQoTW9kZWxDbGFzcywgXCJ1cGRhdGVcIiwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtkZWJvdW5jZTogMjB9KVxuICAgIHVzZVVwZGF0ZWRFdmVudChtb2RlbCwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtkZWJvdW5jZTogMjB9KVxuICAgIHVzZURlc3Ryb3llZEV2ZW50KG1vZGVsLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSwge2RlYm91bmNlOiAyMH0pXG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICB9XG5cbiAgY29uc3QgY29udHJvbHMgPSBhd2FpdCByZW5kZXJFbGVtZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gY2xhc3NTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplID09PSAxICYmIGluc3RhbmNlU3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSAmJiBpbnN0YW5jZVN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplID09PSAxKVxuXG4gIGVtaXRFdmVudChjbGFzc1N1YnNjcmlwdGlvbnMsIFwidXBkYXRlXCIsIHtpZDogXCJ0YXNrLTFcIiwgbW9kZWx9KVxuICBlbWl0RXZlbnQoaW5zdGFuY2VTdWJzY3JpcHRpb25zLCBcInVwZGF0ZVwiLCB7aWQ6IFwidGFzay0xXCIsIG1vZGVsfSlcbiAgZW1pdEV2ZW50KGluc3RhbmNlU3Vic2NyaXB0aW9ucywgXCJkZXN0cm95XCIsIHtpZDogXCJ0YXNrLTFcIn0pXG5cbiAgYXdhaXQgY29udHJvbHMudW5tb3VudCgpXG4gIGF3YWl0IHdhaXQoMzApXG5cbiAgcmV0dXJuIHtyZWNlaXZlZEV2ZW50c0FmdGVyRGVib3VuY2VXaW5kb3c6IHJlY2VpdmVkRXZlbnRzLmxlbmd0aH1cbn1cblxuLyoqXG4gKiBSdW5zIHJlc3Vic2NyaWJlIGluc3RhbmNlIHNjZW5hcmlvLlxuICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj59IC0gU2NlbmFyaW8gcmVzdWx0LlxuICovXG5hc3luYyBmdW5jdGlvbiByZXN1YnNjcmliZUluc3RhbmNlU2NlbmFyaW8oKSB7XG4gIGNvbnN0IGZpcnN0U3Vic2NyaXB0aW9ucyA9IGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKVxuICBjb25zdCBzZWNvbmRTdWJzY3JpcHRpb25zID0gYnVpbGRGYWtlU3Vic2NyaXB0aW9ucygpXG4gIGNvbnN0IGZpcnN0TW9kZWwgPSBidWlsZEZha2VNb2RlbChcInRhc2stMVwiLCBmaXJzdFN1YnNjcmlwdGlvbnMpXG4gIGNvbnN0IHNlY29uZE1vZGVsID0gYnVpbGRGYWtlTW9kZWwoXCJ0YXNrLTFcIiwgc2Vjb25kU3Vic2NyaXB0aW9ucylcbiAgLyoqXG4gICAqIFJlY2VpdmVkIGV2ZW50cy5cbiAgICogQHR5cGUge0FycmF5PEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQgfCBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZD59ICovXG4gIGNvbnN0IHJlY2VpdmVkRXZlbnRzID0gW11cblxuICAvKipcbiAgICogUnVucyB0ZXN0IGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHt7bW9kZWw6IGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLmRlZmF1bHR9fSBwcm9wcyAtIENvbXBvbmVudCBwcm9wcy5cbiAgICogQHJldHVybnMge1JlYWN0LlJlYWN0RWxlbWVudH0gLSBUZXN0IGVsZW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBUZXN0Q29tcG9uZW50KHttb2RlbH0pIHtcbiAgICB1c2VVcGRhdGVkRXZlbnQobW9kZWwsIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpKVxuICAgIHVzZURlc3Ryb3llZEV2ZW50KG1vZGVsLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSlcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gIH1cblxuICBjb25zdCBjb250cm9scyA9IGF3YWl0IHJlbmRlckVsZW1lbnQoUmVhY3QuY3JlYXRlRWxlbWVudChUZXN0Q29tcG9uZW50LCB7bW9kZWw6IGZpcnN0TW9kZWx9KSlcbiAgYXdhaXQgd2FpdEZvcigoKSA9PiBmaXJzdFN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEgJiYgZmlyc3RTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZSA9PT0gMSlcblxuICBjb25zdCBmaXJzdE1vdW50ZWREZXN0cm95U3Vic2NyaXB0aW9ucyA9IGZpcnN0U3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemVcbiAgY29uc3QgZmlyc3RNb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9ucyA9IGZpcnN0U3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZVxuXG4gIGF3YWl0IGNvbnRyb2xzLnJlcmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCwge21vZGVsOiBzZWNvbmRNb2RlbH0pKVxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IGZpcnN0U3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMCAmJiBmaXJzdFN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplID09PSAwICYmIHNlY29uZFN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEgJiYgc2Vjb25kU3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemUgPT09IDEpXG5cbiAgY29uc3QgZmlyc3RBZnRlclJlcmVuZGVyRGVzdHJveVN1YnNjcmlwdGlvbnMgPSBmaXJzdFN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplXG4gIGNvbnN0IGZpcnN0QWZ0ZXJSZXJlbmRlclVwZGF0ZVN1YnNjcmlwdGlvbnMgPSBmaXJzdFN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcbiAgY29uc3Qgc2Vjb25kQWZ0ZXJSZXJlbmRlckRlc3Ryb3lTdWJzY3JpcHRpb25zID0gc2Vjb25kU3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemVcbiAgY29uc3Qgc2Vjb25kQWZ0ZXJSZXJlbmRlclVwZGF0ZVN1YnNjcmlwdGlvbnMgPSBzZWNvbmRTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplXG5cbiAgZW1pdEV2ZW50KGZpcnN0U3Vic2NyaXB0aW9ucywgXCJ1cGRhdGVcIiwge2lkOiBcInRhc2stMVwiLCBtb2RlbDogZmlyc3RNb2RlbH0pXG4gIGVtaXRFdmVudChzZWNvbmRTdWJzY3JpcHRpb25zLCBcInVwZGF0ZVwiLCB7aWQ6IFwidGFzay0xXCIsIG1vZGVsOiBzZWNvbmRNb2RlbH0pXG4gIGVtaXRFdmVudChzZWNvbmRTdWJzY3JpcHRpb25zLCBcImRlc3Ryb3lcIiwge2lkOiBcInRhc2stMVwifSlcblxuICBjb25zdCByZWNlaXZlZEV2ZW50c0FmdGVyRW1pdCA9IHJlY2VpdmVkRXZlbnRzLmxlbmd0aFxuXG4gIGF3YWl0IGNvbnRyb2xzLnVubW91bnQoKVxuXG4gIHJldHVybiB7XG4gICAgZmlyc3RBZnRlclJlcmVuZGVyRGVzdHJveVN1YnNjcmlwdGlvbnMsXG4gICAgZmlyc3RBZnRlclJlcmVuZGVyVXBkYXRlU3Vic2NyaXB0aW9ucyxcbiAgICBmaXJzdE1vdW50ZWREZXN0cm95U3Vic2NyaXB0aW9ucyxcbiAgICBmaXJzdE1vdW50ZWRVcGRhdGVTdWJzY3JpcHRpb25zLFxuICAgIHJlY2VpdmVkRXZlbnRzQWZ0ZXJFbWl0LFxuICAgIHNlY29uZEFmdGVyUmVyZW5kZXJEZXN0cm95U3Vic2NyaXB0aW9ucyxcbiAgICBzZWNvbmRBZnRlclJlcmVuZGVyVXBkYXRlU3Vic2NyaXB0aW9uc1xuICB9XG59XG5cbmNvbnN0IHNjZW5hcmlvcyA9IHtcbiAgY2xhc3NMaWZlY3ljbGU6IGNsYXNzTGlmZWN5Y2xlU2NlbmFyaW8sXG4gIGRlYm91bmNlVW5tb3VudDogZGVib3VuY2VVbm1vdW50U2NlbmFyaW8sXG4gIGluc3RhbmNlTGlmZWN5Y2xlOiBpbnN0YW5jZUxpZmVjeWNsZVNjZW5hcmlvLFxuICBwcm9qZWN0aW9uT3B0aW9uczogcHJvamVjdGlvbk9wdGlvbnNTY2VuYXJpbyxcbiAgcmVzdWJzY3JpYmVJbnN0YW5jZTogcmVzdWJzY3JpYmVJbnN0YW5jZVNjZW5hcmlvXG59XG5cbi8qKlxuICogUnVucyBydW4gZnJvbnRlbmQgbW9kZWwgZXZlbnQgaG9vayBzY2VuYXJpby5cbiAqIEBwYXJhbSB7a2V5b2YgdHlwZW9mIHNjZW5hcmlvc30gc2NlbmFyaW9OYW1lIC0gU2NlbmFyaW8gbmFtZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+fSAtIFNjZW5hcmlvIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcnVuRnJvbnRlbmRNb2RlbEV2ZW50SG9va1NjZW5hcmlvKHNjZW5hcmlvTmFtZSkge1xuICBjb25zdCBzY2VuYXJpbyA9IHNjZW5hcmlvc1tzY2VuYXJpb05hbWVdXG5cbiAgaWYgKCFzY2VuYXJpbykgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZyb250ZW5kIG1vZGVsIGV2ZW50IGhvb2sgc2NlbmFyaW86ICR7c2NlbmFyaW9OYW1lfWApXG5cbiAgcmV0dXJuIGF3YWl0IHNjZW5hcmlvKClcbn1cbiJdfQ==
@@ -44,7 +44,7 @@ function isObjectLike(value) {
44
44
  function isArrayContaining(value) {
45
45
  return !!value && typeof value === "object" && ( /**
46
46
  * Narrows the runtime value to the documented type.
47
- @type {?} */(value)).__velociousMatcher === "arrayContaining";
47
+ * @type {?} */(value)).__velociousMatcher === "arrayContaining";
48
48
  }
49
49
  /**
50
50
  * Runs is object containing.
@@ -54,7 +54,7 @@ function isArrayContaining(value) {
54
54
  function isObjectContaining(value) {
55
55
  return !!value && typeof value === "object" && ( /**
56
56
  * Narrows the runtime value to the documented type.
57
- @type {?} */(value)).__velociousMatcher === "objectContaining";
57
+ * @type {?} */(value)).__velociousMatcher === "objectContaining";
58
58
  }
59
59
  /**
60
60
  * Runs is plain object.
@@ -94,15 +94,15 @@ function collectMatchDifferences(actual, expected, path, differences) {
94
94
  if (isObjectContaining(expected)) {
95
95
  collectMatchDifferences(actual, /**
96
96
  * Narrows the runtime value to the documented type.
97
- @type {?} */ (expected).value, path, differences);
97
+ * @type {?} */ (expected).value, path, differences);
98
98
  return;
99
99
  }
100
100
  if (isArrayContaining(expected)) {
101
101
  const { matches } = matchArrayContaining(actual, /**
102
102
  * Narrows the runtime value to the documented type.
103
- @type {Array<?>} */ ( /**
104
- * Narrows the runtime value to the documented type.
105
- @type {?} */(expected).value));
103
+ * @type {Array<?>} */ ( /**
104
+ * Narrows the runtime value to the documented type.
105
+ * @type {?} */(expected).value));
106
106
  if (!matches) {
107
107
  differences[path || "$"] = [expected, actual];
108
108
  }
@@ -126,10 +126,10 @@ function collectMatchDifferences(actual, expected, path, differences) {
126
126
  }
127
127
  const expectedObject = /**
128
128
  * Narrows the runtime value to the documented type.
129
- @type {Record<string, ?>} */ (expected);
129
+ * @type {Record<string, ?>} */ (expected);
130
130
  const actualObject = /**
131
131
  * Narrows the runtime value to the documented type.
132
- @type {Record<string, ?>} */ (actual);
132
+ * @type {Record<string, ?>} */ (actual);
133
133
  for (const key of Object.keys(expectedObject)) {
134
134
  const nextPath = path ? `${path}.${key}` : key;
135
135
  if (!Object.prototype.hasOwnProperty.call(actualObject, key)) {
@@ -153,7 +153,7 @@ function collectMatchDifferences(actual, expected, path, differences) {
153
153
  function matchObject(actual, expected) {
154
154
  /**
155
155
  * Differences.
156
- @type {Record<string, Array<?>>} */
156
+ * @type {Record<string, Array<?>>} */
157
157
  const differences = {};
158
158
  collectMatchDifferences(actual, expected, "", differences);
159
159
  return {
@@ -170,7 +170,7 @@ function matchObject(actual, expected) {
170
170
  function matchArrayContaining(actual, expected) {
171
171
  /**
172
172
  * Differences.
173
- @type {Record<string, Array<?>>} */
173
+ * @type {Record<string, Array<?>>} */
174
174
  const differences = {};
175
175
  if (!Array.isArray(actual)) {
176
176
  differences["$"] = [expected, actual];
@@ -185,7 +185,7 @@ function matchArrayContaining(actual, expected) {
185
185
  if (isObjectContaining(expectedItem)) {
186
186
  const { matches } = matchObject(actual[i], /**
187
187
  * Narrows the runtime value to the documented type.
188
- @type {?} */ (expectedItem).value);
188
+ * @type {?} */ (expectedItem).value);
189
189
  if (matches) {
190
190
  matchedIndex = i;
191
191
  break;
@@ -195,7 +195,7 @@ function matchArrayContaining(actual, expected) {
195
195
  if (isArrayContaining(expectedItem)) {
196
196
  const { matches } = matchArrayContaining(actual[i], /**
197
197
  * Narrows the runtime value to the documented type.
198
- @type {?} */ (expectedItem).value);
198
+ * @type {?} */ (expectedItem).value);
199
199
  if (matches) {
200
200
  matchedIndex = i;
201
201
  break;
@@ -221,4 +221,4 @@ function matchArrayContaining(actual, expected) {
221
221
  };
222
222
  }
223
223
  export { arrayContaining, isArrayContaining, isObjectContaining, matchArrayContaining, matchObject, objectContaining };
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3RpbmcvZXhwZWN0LXV0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQTtBQUV2RTs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFLO0lBQzdCLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixPQUFPLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVELE9BQU87UUFDTCxrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsS0FBSztLQUNOLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUs7SUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixPQUFPLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELE9BQU87UUFDTCxrQkFBa0IsRUFBRSxpQkFBaUI7UUFDckMsS0FBSztLQUNOLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQUs7SUFDekIsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQTtBQUNwRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsaUJBQWlCLENBQUMsS0FBSztJQUM5QixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEVBQUM7O2tFQUVlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsS0FBSyxpQkFBaUIsQ0FBQTtBQUNsSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUMsS0FBSztJQUMvQixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEVBQUM7O2tFQUVlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsS0FBSyxrQkFBa0IsQ0FBQTtBQUNuSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQUs7SUFDMUIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFckQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU5QyxPQUFPLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUE7QUFDN0QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVE7SUFDbkMsSUFBSSxNQUFNLFlBQVksSUFBSSxJQUFJLFFBQVEsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUN2RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDaEQsQ0FBQztJQUVELElBQUksTUFBTSxZQUFZLE1BQU0sSUFBSSxRQUFRLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDM0QsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFBO0lBQzdFLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQ3BDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXO0lBQ2xFLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNqQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUU7O3NEQUVjLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQ25GLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUU7OzRFQUVxQixDQUFDLEVBQUM7OzJDQUVlLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUV2RyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixXQUFXLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQy9DLENBQUM7UUFFRCxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0IsV0FBVyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUM3QyxPQUFNO1FBQ1IsQ0FBQztRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUE7WUFDaEMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDeEUsQ0FBQztRQUVELE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsV0FBVyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUM3QyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHOzs2REFFOEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2hFLE1BQU0sWUFBWSxHQUFHOzsyREFFOEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRTVELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtZQUU5QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUE7Z0JBQ3hELFNBQVE7WUFDVixDQUFDO1lBRUQsdUJBQXVCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDeEYsQ0FBQztRQUVELE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxXQUFXLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQy9DLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUTtJQUNuQzs7eUNBRXFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtJQUV0Qix1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUUxRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDOUMsV0FBVztLQUNaLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxRQUFRO0lBQzVDOzt5Q0FFcUM7SUFDckMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFBO0lBRXRCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDM0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3JDLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRTdCLEtBQUssTUFBTSxZQUFZLElBQUksUUFBUSxFQUFFLENBQUM7UUFDcEMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFFckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUFFLFNBQVE7WUFFaEMsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLEVBQUMsT0FBTyxFQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTs7dUVBRWMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUM3RSxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLFlBQVksR0FBRyxDQUFDLENBQUE7b0JBQ2hCLE1BQUs7Z0JBQ1AsQ0FBQztnQkFDRCxTQUFRO1lBQ1YsQ0FBQztZQUVELElBQUksaUJBQWlCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0ZBRWMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUN0RixJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLFlBQVksR0FBRyxDQUFDLENBQUE7b0JBQ2hCLE1BQUs7Z0JBQ1AsQ0FBQztnQkFDRCxTQUFRO1lBQ1YsQ0FBQztZQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsWUFBWSxHQUFHLENBQUMsQ0FBQTtnQkFDaEIsTUFBSztZQUNQLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUNyQyxNQUFLO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDOUMsV0FBVztLQUNaLENBQUE7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2pCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHthbnl0aGluZ0RpZmZlcmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL2RpZmYtdXRpbHMuanNcIlxuXG4vKipcbiAqIFJ1bnMgb2JqZWN0IGNvbnRhaW5pbmcuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gVmFsdWUuXG4gKiBAcmV0dXJucyB7e19fdmVsb2Npb3VzTWF0Y2hlcjogc3RyaW5nLCB2YWx1ZTogP319IC0gTWF0Y2hlciB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiBvYmplY3RDb250YWluaW5nKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIG9iamVjdCBidXQgZ290ICR7dHlwZW9mIHZhbHVlfWApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIF9fdmVsb2Npb3VzTWF0Y2hlcjogXCJvYmplY3RDb250YWluaW5nXCIsXG4gICAgdmFsdWVcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYXJyYXkgY29udGFpbmluZy5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBWYWx1ZS5cbiAqIEByZXR1cm5zIHt7X192ZWxvY2lvdXNNYXRjaGVyOiBzdHJpbmcsIHZhbHVlOiA/fX0gLSBNYXRjaGVyIHdyYXBwZXIuXG4gKi9cbmZ1bmN0aW9uIGFycmF5Q29udGFpbmluZyh2YWx1ZSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSBidXQgZ290ICR7dHlwZW9mIHZhbHVlfWApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIF9fdmVsb2Npb3VzTWF0Y2hlcjogXCJhcnJheUNvbnRhaW5pbmdcIixcbiAgICB2YWx1ZVxuICB9XG59XG5cbi8qKlxuICogUnVucyBpcyBvYmplY3QgbGlrZS5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBWYWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb2JqZWN0LWxpa2UuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiXG59XG5cbi8qKlxuICogUnVucyBpcyBhcnJheSBjb250YWluaW5nLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIFZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBhcnJheUNvbnRhaW5pbmcgbWF0Y2hlci5cbiAqL1xuZnVuY3Rpb24gaXNBcnJheUNvbnRhaW5pbmcodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICgvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHs/fSAqLyAodmFsdWUpKS5fX3ZlbG9jaW91c01hdGNoZXIgPT09IFwiYXJyYXlDb250YWluaW5nXCJcbn1cblxuLyoqXG4gKiBSdW5zIGlzIG9iamVjdCBjb250YWluaW5nLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIFZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvYmplY3RDb250YWluaW5nIG1hdGNoZXIuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0Q29udGFpbmluZyh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgKC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUgez99ICovICh2YWx1ZSkpLl9fdmVsb2Npb3VzTWF0Y2hlciA9PT0gXCJvYmplY3RDb250YWluaW5nXCJcbn1cblxuLyoqXG4gKiBSdW5zIGlzIHBsYWluIG9iamVjdC5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBWYWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpXG5cbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90b3R5cGUgPT09IG51bGxcbn1cblxuLyoqXG4gKiBSdW5zIHZhbHVlcyBlcXVhbC5cbiAqIEBwYXJhbSB7P30gYWN0dWFsIC0gQWN0dWFsIHZhbHVlLlxuICogQHBhcmFtIHs/fSBleHBlY3RlZCAtIEV4cGVjdGVkIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB2YWx1ZXMgYXJlIGVxdWFsLlxuICovXG5mdW5jdGlvbiB2YWx1ZXNFcXVhbChhY3R1YWwsIGV4cGVjdGVkKSB7XG4gIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKClcbiAgfVxuXG4gIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBSZWdFeHAgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gYWN0dWFsLnNvdXJjZSA9PT0gZXhwZWN0ZWQuc291cmNlICYmIGFjdHVhbC5mbGFncyA9PT0gZXhwZWN0ZWQuZmxhZ3NcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuaXMoYWN0dWFsLCBleHBlY3RlZClcbn1cblxuLyoqXG4gKiBSdW5zIGNvbGxlY3QgbWF0Y2ggZGlmZmVyZW5jZXMuXG4gKiBAcGFyYW0gez99IGFjdHVhbCAtIEFjdHVhbCB2YWx1ZS5cbiAqIEBwYXJhbSB7P30gZXhwZWN0ZWQgLSBFeHBlY3RlZCB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gUGF0aC5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgQXJyYXk8Pz4+fSBkaWZmZXJlbmNlcyAtIERpZmZlcmVuY2VzLlxuICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0TWF0Y2hEaWZmZXJlbmNlcyhhY3R1YWwsIGV4cGVjdGVkLCBwYXRoLCBkaWZmZXJlbmNlcykge1xuICBpZiAoaXNPYmplY3RDb250YWluaW5nKGV4cGVjdGVkKSkge1xuICAgIGNvbGxlY3RNYXRjaERpZmZlcmVuY2VzKGFjdHVhbCwgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHs/fSAqLyAoZXhwZWN0ZWQpLnZhbHVlLCBwYXRoLCBkaWZmZXJlbmNlcylcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChpc0FycmF5Q29udGFpbmluZyhleHBlY3RlZCkpIHtcbiAgICBjb25zdCB7bWF0Y2hlc30gPSBtYXRjaEFycmF5Q29udGFpbmluZyhhY3R1YWwsIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7QXJyYXk8Pz59ICovICgvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHs/fSAqLyAoZXhwZWN0ZWQpLnZhbHVlKSlcblxuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgZGlmZmVyZW5jZXNbcGF0aCB8fCBcIiRcIl0gPSBbZXhwZWN0ZWQsIGFjdHVhbF1cbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdGVkKSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhY3R1YWwpKSB7XG4gICAgICBkaWZmZXJlbmNlc1twYXRoIHx8IFwiJFwiXSA9IFtleHBlY3RlZCwgYWN0dWFsXVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbmV4dFBhdGggPSBgJHtwYXRofVske2l9XWBcbiAgICAgIGNvbGxlY3RNYXRjaERpZmZlcmVuY2VzKGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0sIG5leHRQYXRoLCBkaWZmZXJlbmNlcylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgIGlmICghaXNPYmplY3RMaWtlKGFjdHVhbCkpIHtcbiAgICAgIGRpZmZlcmVuY2VzW3BhdGggfHwgXCIkXCJdID0gW2V4cGVjdGVkLCBhY3R1YWxdXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZE9iamVjdCA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChleHBlY3RlZClcbiAgICBjb25zdCBhY3R1YWxPYmplY3QgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChhY3R1YWwpXG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhleHBlY3RlZE9iamVjdCkpIHtcbiAgICAgIGNvbnN0IG5leHRQYXRoID0gcGF0aCA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXlcblxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0dWFsT2JqZWN0LCBrZXkpKSB7XG4gICAgICAgIGRpZmZlcmVuY2VzW25leHRQYXRoXSA9IFtleHBlY3RlZE9iamVjdFtrZXldLCB1bmRlZmluZWRdXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbGxlY3RNYXRjaERpZmZlcmVuY2VzKGFjdHVhbE9iamVjdFtrZXldLCBleHBlY3RlZE9iamVjdFtrZXldLCBuZXh0UGF0aCwgZGlmZmVyZW5jZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIXZhbHVlc0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgZGlmZmVyZW5jZXNbcGF0aCB8fCBcIiRcIl0gPSBbZXhwZWN0ZWQsIGFjdHVhbF1cbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgbWF0Y2ggb2JqZWN0LlxuICogQHBhcmFtIHs/fSBhY3R1YWwgLSBBY3R1YWwgdmFsdWUuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+IHwgQXJyYXk8Pz59IGV4cGVjdGVkIC0gRXhwZWN0ZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7e21hdGNoZXM6IGJvb2xlYW4sIGRpZmZlcmVuY2VzOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTw/Pj59fSAtIE1hdGNoIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hPYmplY3QoYWN0dWFsLCBleHBlY3RlZCkge1xuICAvKipcbiAgICogRGlmZmVyZW5jZXMuXG4gICAgQHR5cGUge1JlY29yZDxzdHJpbmcsIEFycmF5PD8+Pn0gKi9cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSB7fVxuXG4gIGNvbGxlY3RNYXRjaERpZmZlcmVuY2VzKGFjdHVhbCwgZXhwZWN0ZWQsIFwiXCIsIGRpZmZlcmVuY2VzKVxuXG4gIHJldHVybiB7XG4gICAgbWF0Y2hlczogT2JqZWN0LmtleXMoZGlmZmVyZW5jZXMpLmxlbmd0aCA9PT0gMCxcbiAgICBkaWZmZXJlbmNlc1xuICB9XG59XG5cbi8qKlxuICogUnVucyBtYXRjaCBhcnJheSBjb250YWluaW5nLlxuICogQHBhcmFtIHs/fSBhY3R1YWwgLSBBY3R1YWwgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5PD8+fSBleHBlY3RlZCAtIEV4cGVjdGVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHt7bWF0Y2hlczogYm9vbGVhbiwgZGlmZmVyZW5jZXM6IFJlY29yZDxzdHJpbmcsIEFycmF5PD8+Pn19IC0gTWF0Y2ggcmVzdWx0LlxuICovXG5mdW5jdGlvbiBtYXRjaEFycmF5Q29udGFpbmluZyhhY3R1YWwsIGV4cGVjdGVkKSB7XG4gIC8qKlxuICAgKiBEaWZmZXJlbmNlcy5cbiAgICBAdHlwZSB7UmVjb3JkPHN0cmluZywgQXJyYXk8Pz4+fSAqL1xuICBjb25zdCBkaWZmZXJlbmNlcyA9IHt9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFjdHVhbCkpIHtcbiAgICBkaWZmZXJlbmNlc1tcIiRcIl0gPSBbZXhwZWN0ZWQsIGFjdHVhbF1cbiAgICByZXR1cm4ge21hdGNoZXM6IGZhbHNlLCBkaWZmZXJlbmNlc31cbiAgfVxuXG4gIGNvbnN0IHVzZWRJbmRleGVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBleHBlY3RlZEl0ZW0gb2YgZXhwZWN0ZWQpIHtcbiAgICBsZXQgbWF0Y2hlZEluZGV4ID0gLTFcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodXNlZEluZGV4ZXMuaGFzKGkpKSBjb250aW51ZVxuXG4gICAgICBpZiAoaXNPYmplY3RDb250YWluaW5nKGV4cGVjdGVkSXRlbSkpIHtcbiAgICAgICAgY29uc3Qge21hdGNoZXN9ID0gbWF0Y2hPYmplY3QoYWN0dWFsW2ldLCAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7P30gKi8gKGV4cGVjdGVkSXRlbSkudmFsdWUpXG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgbWF0Y2hlZEluZGV4ID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXlDb250YWluaW5nKGV4cGVjdGVkSXRlbSkpIHtcbiAgICAgICAgY29uc3Qge21hdGNoZXN9ID0gbWF0Y2hBcnJheUNvbnRhaW5pbmcoYWN0dWFsW2ldLCAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7P30gKi8gKGV4cGVjdGVkSXRlbSkudmFsdWUpXG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgbWF0Y2hlZEluZGV4ID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnl0aGluZ0RpZmZlcmVudChhY3R1YWxbaV0sIGV4cGVjdGVkSXRlbSkpIHtcbiAgICAgICAgbWF0Y2hlZEluZGV4ID0gaVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXRjaGVkSW5kZXggPj0gMCkge1xuICAgICAgdXNlZEluZGV4ZXMuYWRkKG1hdGNoZWRJbmRleClcbiAgICB9IGVsc2Uge1xuICAgICAgZGlmZmVyZW5jZXNbXCIkXCJdID0gW2V4cGVjdGVkLCBhY3R1YWxdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWF0Y2hlczogT2JqZWN0LmtleXMoZGlmZmVyZW5jZXMpLmxlbmd0aCA9PT0gMCxcbiAgICBkaWZmZXJlbmNlc1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIGFycmF5Q29udGFpbmluZyxcbiAgaXNBcnJheUNvbnRhaW5pbmcsXG4gIGlzT2JqZWN0Q29udGFpbmluZyxcbiAgbWF0Y2hBcnJheUNvbnRhaW5pbmcsXG4gIG1hdGNoT2JqZWN0LFxuICBvYmplY3RDb250YWluaW5nXG59XG4iXX0=
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3RpbmcvZXhwZWN0LXV0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQTtBQUV2RTs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFLO0lBQzdCLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixPQUFPLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVELE9BQU87UUFDTCxrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsS0FBSztLQUNOLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUs7SUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixPQUFPLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELE9BQU87UUFDTCxrQkFBa0IsRUFBRSxpQkFBaUI7UUFDckMsS0FBSztLQUNOLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQUs7SUFDekIsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQTtBQUNwRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsaUJBQWlCLENBQUMsS0FBSztJQUM5QixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEVBQUM7O21FQUVnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEtBQUssaUJB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WCxnQkFBZ0IsRUFDakIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2FueXRoaW5nRGlmZmVyZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvZGlmZi11dGlscy5qc1wiXG5cbi8qKlxuICogUnVucyBvYmplY3QgY29udGFpbmluZy5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBWYWx1ZS5cbiAqIEByZXR1cm5zIHt7X192ZWxvY2lvdXNNYXRjaGVyOiBzdHJpbmcsIHZhbHVlOiA/fX0gLSBNYXRjaGVyIHdyYXBwZXIuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdENvbnRhaW5pbmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb2JqZWN0IGJ1dCBnb3QgJHt0eXBlb2YgdmFsdWV9YClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX192ZWxvY2lvdXNNYXRjaGVyOiBcIm9iamVjdENvbnRhaW5pbmdcIixcbiAgICB2YWx1ZVxuICB9XG59XG5cbi8qKlxuICogUnVucyBhcnJheSBjb250YWluaW5nLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIFZhbHVlLlxuICogQHJldHVybnMge3tfX3ZlbG9jaW91c01hdGNoZXI6IHN0cmluZywgdmFsdWU6ID99fSAtIE1hdGNoZXIgd3JhcHBlci5cbiAqL1xuZnVuY3Rpb24gYXJyYXlDb250YWluaW5nKHZhbHVlKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFycmF5IGJ1dCBnb3QgJHt0eXBlb2YgdmFsdWV9YClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX192ZWxvY2lvdXNNYXRjaGVyOiBcImFycmF5Q29udGFpbmluZ1wiLFxuICAgIHZhbHVlXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGlzIG9iamVjdCBsaWtlLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIFZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvYmplY3QtbGlrZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCJcbn1cblxuLyoqXG4gKiBSdW5zIGlzIGFycmF5IGNvbnRhaW5pbmcuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gVmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGFycmF5Q29udGFpbmluZyBtYXRjaGVyLlxuICovXG5mdW5jdGlvbiBpc0FycmF5Q29udGFpbmluZyh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgKC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHs/fSAqLyAodmFsdWUpKS5fX3ZlbG9jaW91c01hdGNoZXIgPT09IFwiYXJyYXlDb250YWluaW5nXCJcbn1cblxuLyoqXG4gKiBSdW5zIGlzIG9iamVjdCBjb250YWluaW5nLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIFZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvYmplY3RDb250YWluaW5nIG1hdGNoZXIuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0Q29udGFpbmluZyh2YWx1ZSkge1xuICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgKC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHs/fSAqLyAodmFsdWUpKS5fX3ZlbG9jaW91c01hdGNoZXIgPT09IFwib2JqZWN0Q29udGFpbmluZ1wiXG59XG5cbi8qKlxuICogUnVucyBpcyBwbGFpbiBvYmplY3QuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gVmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHBsYWluIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuXG4gIHJldHVybiBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG90eXBlID09PSBudWxsXG59XG5cbi8qKlxuICogUnVucyB2YWx1ZXMgZXF1YWwuXG4gKiBAcGFyYW0gez99IGFjdHVhbCAtIEFjdHVhbCB2YWx1ZS5cbiAqIEBwYXJhbSB7P30gZXhwZWN0ZWQgLSBFeHBlY3RlZCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmFsdWVzIGFyZSBlcXVhbC5cbiAqL1xuZnVuY3Rpb24gdmFsdWVzRXF1YWwoYWN0dWFsLCBleHBlY3RlZCkge1xuICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpXG4gIH1cblxuICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgUmVnRXhwICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5zb3VyY2UgPT09IGV4cGVjdGVkLnNvdXJjZSAmJiBhY3R1YWwuZmxhZ3MgPT09IGV4cGVjdGVkLmZsYWdzXG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmlzKGFjdHVhbCwgZXhwZWN0ZWQpXG59XG5cbi8qKlxuICogUnVucyBjb2xsZWN0IG1hdGNoIGRpZmZlcmVuY2VzLlxuICogQHBhcmFtIHs/fSBhY3R1YWwgLSBBY3R1YWwgdmFsdWUuXG4gKiBAcGFyYW0gez99IGV4cGVjdGVkIC0gRXhwZWN0ZWQgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFBhdGguXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIEFycmF5PD8+Pn0gZGlmZmVyZW5jZXMgLSBEaWZmZXJlbmNlcy5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdE1hdGNoRGlmZmVyZW5jZXMoYWN0dWFsLCBleHBlY3RlZCwgcGF0aCwgZGlmZmVyZW5jZXMpIHtcbiAgaWYgKGlzT2JqZWN0Q29udGFpbmluZyhleHBlY3RlZCkpIHtcbiAgICBjb2xsZWN0TWF0Y2hEaWZmZXJlbmNlcyhhY3R1YWwsIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUgez99ICovIChleHBlY3RlZCkudmFsdWUsIHBhdGgsIGRpZmZlcmVuY2VzKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGlzQXJyYXlDb250YWluaW5nKGV4cGVjdGVkKSkge1xuICAgIGNvbnN0IHttYXRjaGVzfSA9IG1hdGNoQXJyYXlDb250YWluaW5nKGFjdHVhbCwgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7QXJyYXk8Pz59ICovICgvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7P30gKi8gKGV4cGVjdGVkKS52YWx1ZSkpXG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIGRpZmZlcmVuY2VzW3BhdGggfHwgXCIkXCJdID0gW2V4cGVjdGVkLCBhY3R1YWxdXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWN0dWFsKSkge1xuICAgICAgZGlmZmVyZW5jZXNbcGF0aCB8fCBcIiRcIl0gPSBbZXhwZWN0ZWQsIGFjdHVhbF1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5leHRQYXRoID0gYCR7cGF0aH1bJHtpfV1gXG4gICAgICBjb2xsZWN0TWF0Y2hEaWZmZXJlbmNlcyhhY3R1YWxbaV0sIGV4cGVjdGVkW2ldLCBuZXh0UGF0aCwgZGlmZmVyZW5jZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoaXNQbGFpbk9iamVjdChleHBlY3RlZCkpIHtcbiAgICBpZiAoIWlzT2JqZWN0TGlrZShhY3R1YWwpKSB7XG4gICAgICBkaWZmZXJlbmNlc1twYXRoIHx8IFwiJFwiXSA9IFtleHBlY3RlZCwgYWN0dWFsXVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWRPYmplY3QgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi8gKGV4cGVjdGVkKVxuICAgIGNvbnN0IGFjdHVhbE9iamVjdCA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChhY3R1YWwpXG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhleHBlY3RlZE9iamVjdCkpIHtcbiAgICAgIGNvbnN0IG5leHRQYXRoID0gcGF0aCA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXlcblxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0dWFsT2JqZWN0LCBrZXkpKSB7XG4gICAgICAgIGRpZmZlcmVuY2VzW25leHRQYXRoXSA9IFtleHBlY3RlZE9iamVjdFtrZXldLCB1bmRlZmluZWRdXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbGxlY3RNYXRjaERpZmZlcmVuY2VzKGFjdHVhbE9iamVjdFtrZXldLCBleHBlY3RlZE9iamVjdFtrZXldLCBuZXh0UGF0aCwgZGlmZmVyZW5jZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIXZhbHVlc0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgZGlmZmVyZW5jZXNbcGF0aCB8fCBcIiRcIl0gPSBbZXhwZWN0ZWQsIGFjdHVhbF1cbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgbWF0Y2ggb2JqZWN0LlxuICogQHBhcmFtIHs/fSBhY3R1YWwgLSBBY3R1YWwgdmFsdWUuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+IHwgQXJyYXk8Pz59IGV4cGVjdGVkIC0gRXhwZWN0ZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7e21hdGNoZXM6IGJvb2xlYW4sIGRpZmZlcmVuY2VzOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTw/Pj59fSAtIE1hdGNoIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hPYmplY3QoYWN0dWFsLCBleHBlY3RlZCkge1xuICAvKipcbiAgICogRGlmZmVyZW5jZXMuXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBBcnJheTw/Pj59ICovXG4gIGNvbnN0IGRpZmZlcmVuY2VzID0ge31cblxuICBjb2xsZWN0TWF0Y2hEaWZmZXJlbmNlcyhhY3R1YWwsIGV4cGVjdGVkLCBcIlwiLCBkaWZmZXJlbmNlcylcblxuICByZXR1cm4ge1xuICAgIG1hdGNoZXM6IE9iamVjdC5rZXlzKGRpZmZlcmVuY2VzKS5sZW5ndGggPT09IDAsXG4gICAgZGlmZmVyZW5jZXNcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgbWF0Y2ggYXJyYXkgY29udGFpbmluZy5cbiAqIEBwYXJhbSB7P30gYWN0dWFsIC0gQWN0dWFsIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheTw/Pn0gZXhwZWN0ZWQgLSBFeHBlY3RlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7e21hdGNoZXM6IGJvb2xlYW4sIGRpZmZlcmVuY2VzOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTw/Pj59fSAtIE1hdGNoIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hBcnJheUNvbnRhaW5pbmcoYWN0dWFsLCBleHBlY3RlZCkge1xuICAvKipcbiAgICogRGlmZmVyZW5jZXMuXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBBcnJheTw/Pj59ICovXG4gIGNvbnN0IGRpZmZlcmVuY2VzID0ge31cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoYWN0dWFsKSkge1xuICAgIGRpZmZlcmVuY2VzW1wiJFwiXSA9IFtleHBlY3RlZCwgYWN0dWFsXVxuICAgIHJldHVybiB7bWF0Y2hlczogZmFsc2UsIGRpZmZlcmVuY2VzfVxuICB9XG5cbiAgY29uc3QgdXNlZEluZGV4ZXMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IGV4cGVjdGVkSXRlbSBvZiBleHBlY3RlZCkge1xuICAgIGxldCBtYXRjaGVkSW5kZXggPSAtMVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh1c2VkSW5kZXhlcy5oYXMoaSkpIGNvbnRpbnVlXG5cbiAgICAgIGlmIChpc09iamVjdENvbnRhaW5pbmcoZXhwZWN0ZWRJdGVtKSkge1xuICAgICAgICBjb25zdCB7bWF0Y2hlc30gPSBtYXRjaE9iamVjdChhY3R1YWxbaV0sIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7P30gKi8gKGV4cGVjdGVkSXRlbSkudmFsdWUpXG4gICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgbWF0Y2hlZEluZGV4ID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXlDb250YWluaW5nKGV4cGVjdGVkSXRlbSkpIHtcbiAgICAgICAgY29uc3Qge21hdGNoZXN9ID0gbWF0Y2hBcnJheUNvbnRhaW5pbmcoYWN0dWFsW2ldLCAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUgez99ICovIChleHBlY3RlZEl0ZW0pLnZhbHVlKVxuICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgIG1hdGNoZWRJbmRleCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICghYW55dGhpbmdEaWZmZXJlbnQoYWN0dWFsW2ldLCBleHBlY3RlZEl0ZW0pKSB7XG4gICAgICAgIG1hdGNoZWRJbmRleCA9IGlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hlZEluZGV4ID49IDApIHtcbiAgICAgIHVzZWRJbmRleGVzLmFkZChtYXRjaGVkSW5kZXgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZmZlcmVuY2VzW1wiJFwiXSA9IFtleHBlY3RlZCwgYWN0dWFsXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hdGNoZXM6IE9iamVjdC5rZXlzKGRpZmZlcmVuY2VzKS5sZW5ndGggPT09IDAsXG4gICAgZGlmZmVyZW5jZXNcbiAgfVxufVxuXG5leHBvcnQge1xuICBhcnJheUNvbnRhaW5pbmcsXG4gIGlzQXJyYXlDb250YWluaW5nLFxuICBpc09iamVjdENvbnRhaW5pbmcsXG4gIG1hdGNoQXJyYXlDb250YWluaW5nLFxuICBtYXRjaE9iamVjdCxcbiAgb2JqZWN0Q29udGFpbmluZ1xufVxuIl19
@@ -7,7 +7,7 @@ export default class Expect extends BaseExpect {
7
7
  _object: any;
8
8
  /**
9
9
  * Narrows the runtime value to the documented type.
10
- @type {Array<Expect | ExpectToChange>} */
10
+ * @type {Array<Expect | ExpectToChange>} */
11
11
  expectations: Array<Expect | ExpectToChange>;
12
12
  /**
13
13
  * Runs and change.
@@ -1 +1 @@
1
- {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../../../src/testing/expect.js"],"names":[],"mappings":"AAaA;IACE;;;OAGG;IACH,oBAFW,OAAC,EAUX;IANC,aAAqB;IAErB;;+CAE2C;IAC3C,cADS,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CACjB;IAGxB;;;;OAIG;IACH,0BAHW,MAAY,OAAO,CAAC,MAAM,CAAC,GACzB,cAAc,CAI1B;IAED;;;OAGG;IACH,WAFa,IAAI,CAMhB;IAHC,0BAAgB;IAKlB;;;;OAIG;IACH,aAHW,OAAC,GACC,IAAI,CAkBhB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;;OAIG;IACH,wBAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;;;OAKG;IACH,oBAJW,MAAM,cACN,MAAM,GACJ,IAAI,CA8BhB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;OAGG;IACH,eAFa,IAAI,CAgBhB;IAED;;;;OAIG;IACH,sBAHW,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC,GAC1B,IAAI,CAQhB;IAED;;;OAGG;IACH,aAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,YAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,iBAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,YAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,cAFa,IAAI,CAchB;IAED;;;;OAIG;IACH,yBAHW,MAAY,OAAO,CAAC,MAAM,CAAC,GACzB,cAAc,CAU1B;IAED;;;;OAIG;IACH,0BAHW,OAAC,GACC,IAAI,CAsChB;IAED;;;;OAIG;IACH,+BAHW,OAAC,GACC,IAAI,CAoBhB;IAED;;;;OAIG;IACH,0BAHW,OAAC,GACC,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,OAAC,GACC,IAAI,CAkIhB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,IAAI,CAmBhB;IAED;;;;OAIG;IACH,wBAHW,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GAAG,KAAK,CAAC,OAAC,CAAC,GAC1B,IAAI,CAoBhB;IAED;;;;;OAKG;IACH,aAJa,CAAC,iBACH,MAAM,GAAC,CAAC,GACN,OAAO,CAAC,IAAI,CAAC,CAwCzB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GAAC,MAAM,GAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GACtD,OAAO,CAAC,IAAI,CAAC,CA4DzB;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,OAAC,CAAC,CAsBtB;IAED;;;;OAIG;IACH,yBAHW,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,IAAI,CA8BhB;CACF;uBA/vBsB,kBAAkB;2BACd,uBAAuB"}
1
+ {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../../../src/testing/expect.js"],"names":[],"mappings":"AAaA;IACE;;;OAGG;IACH,oBAFW,OAAC,EAUX;IANC,aAAqB;IAErB;;gDAE4C;IAC5C,cADU,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAClB;IAGxB;;;;OAIG;IACH,0BAHW,MAAY,OAAO,CAAC,MAAM,CAAC,GACzB,cAAc,CAI1B;IAED;;;OAGG;IACH,WAFa,IAAI,CAMhB;IAHC,0BAAgB;IAKlB;;;;OAIG;IACH,aAHW,OAAC,GACC,IAAI,CAkBhB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;;OAIG;IACH,wBAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;;;OAKG;IACH,oBAJW,MAAM,cACN,MAAM,GACJ,IAAI,CA8BhB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,IAAI,CAsBhB;IAED;;;OAGG;IACH,eAFa,IAAI,CAgBhB;IAED;;;;OAIG;IACH,sBAHW,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC,GAC1B,IAAI,CAQhB;IAED;;;OAGG;IACH,aAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,YAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,iBAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,YAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,cAFa,IAAI,CAchB;IAED;;;;OAIG;IACH,yBAHW,MAAY,OAAO,CAAC,MAAM,CAAC,GACzB,cAAc,CAU1B;IAED;;;;OAIG;IACH,0BAHW,OAAC,GACC,IAAI,CAsChB;IAED;;;;OAIG;IACH,+BAHW,OAAC,GACC,IAAI,CAoBhB;IAED;;;;OAIG;IACH,0BAHW,OAAC,GACC,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,OAAC,GACC,IAAI,CAkIhB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,IAAI,CAmBhB;IAED;;;;OAIG;IACH,wBAHW,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GAAG,KAAK,CAAC,OAAC,CAAC,GAC1B,IAAI,CAoBhB;IAED;;;;;OAKG;IACH,aAJa,CAAC,iBACH,MAAM,GAAC,CAAC,GACN,OAAO,CAAC,IAAI,CAAC,CAwCzB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GAAC,MAAM,GAAC,KAAK,GAAC,CAAC,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GACtD,OAAO,CAAC,IAAI,CAAC,CA4DzB;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,OAAC,CAAC,CAsBtB;IAED;;;;OAIG;IACH,yBAHW,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,IAAI,CA8BhB;CACF;uBA/vBsB,kBAAkB;2BACd,uBAAuB"}