@aerokit/sdk 12.44.0

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 (399) hide show
  1. package/LICENSE +277 -0
  2. package/README.md +170 -0
  3. package/dist/cjs/bpm/deployer.js +57 -0
  4. package/dist/cjs/bpm/index.js +35 -0
  5. package/dist/cjs/bpm/process.js +636 -0
  6. package/dist/cjs/bpm/tasks.js +973 -0
  7. package/dist/cjs/bpm/values.js +82 -0
  8. package/dist/cjs/cache/cache.js +64 -0
  9. package/dist/cjs/cache/index.js +26 -0
  10. package/dist/cjs/cms/cmis.js +689 -0
  11. package/dist/cjs/cms/index.js +26 -0
  12. package/dist/cjs/component/decorators.js +126 -0
  13. package/dist/cjs/component/index.js +36 -0
  14. package/dist/cjs/core/configurations.js +110 -0
  15. package/dist/cjs/core/context.js +47 -0
  16. package/dist/cjs/core/env.js +45 -0
  17. package/dist/cjs/core/globals.js +54 -0
  18. package/dist/cjs/core/index.js +35 -0
  19. package/dist/cjs/db/dao.js +795 -0
  20. package/dist/cjs/db/database.js +904 -0
  21. package/dist/cjs/db/decorators.js +167 -0
  22. package/dist/cjs/db/index.js +72 -0
  23. package/dist/cjs/db/insert.js +51 -0
  24. package/dist/cjs/db/orm.js +245 -0
  25. package/dist/cjs/db/ormstatements.js +243 -0
  26. package/dist/cjs/db/procedure.js +112 -0
  27. package/dist/cjs/db/query.js +57 -0
  28. package/dist/cjs/db/repository.js +148 -0
  29. package/dist/cjs/db/sequence.js +59 -0
  30. package/dist/cjs/db/sql.js +516 -0
  31. package/dist/cjs/db/store.js +172 -0
  32. package/dist/cjs/db/translator.js +100 -0
  33. package/dist/cjs/db/update.js +43 -0
  34. package/dist/cjs/etcd/client.js +174 -0
  35. package/dist/cjs/etcd/index.js +26 -0
  36. package/dist/cjs/extensions/decorators.js +40 -0
  37. package/dist/cjs/extensions/extensions.js +108 -0
  38. package/dist/cjs/extensions/index.js +39 -0
  39. package/dist/cjs/git/client.js +277 -0
  40. package/dist/cjs/git/index.js +26 -0
  41. package/dist/cjs/http/client-async.js +224 -0
  42. package/dist/cjs/http/client.js +145 -0
  43. package/dist/cjs/http/decorators.js +76 -0
  44. package/dist/cjs/http/errors/ForbiddenError.js +41 -0
  45. package/dist/cjs/http/errors/ValidationError.js +41 -0
  46. package/dist/cjs/http/errors.js +26 -0
  47. package/dist/cjs/http/index.js +59 -0
  48. package/dist/cjs/http/request.js +281 -0
  49. package/dist/cjs/http/response.js +452 -0
  50. package/dist/cjs/http/rs/resource-common.js +32 -0
  51. package/dist/cjs/http/rs/resource-http-controller.js +306 -0
  52. package/dist/cjs/http/rs/resource-mappings.js +130 -0
  53. package/dist/cjs/http/rs/resource-method.js +218 -0
  54. package/dist/cjs/http/rs/resource.js +232 -0
  55. package/dist/cjs/http/rs.js +31 -0
  56. package/dist/cjs/http/session.js +124 -0
  57. package/dist/cjs/http/upload.js +144 -0
  58. package/dist/cjs/http/utils.js +106 -0
  59. package/dist/cjs/index.js +1 -0
  60. package/dist/cjs/indexing/index.js +29 -0
  61. package/dist/cjs/indexing/searcher.js +70 -0
  62. package/dist/cjs/indexing/writer.js +45 -0
  63. package/dist/cjs/integrations/index.js +26 -0
  64. package/dist/cjs/integrations/integrations.js +55 -0
  65. package/dist/cjs/io/bytes.js +101 -0
  66. package/dist/cjs/io/files.js +344 -0
  67. package/dist/cjs/io/image.js +43 -0
  68. package/dist/cjs/io/index.js +38 -0
  69. package/dist/cjs/io/streams.js +243 -0
  70. package/dist/cjs/io/zip.js +251 -0
  71. package/dist/cjs/job/decorators.js +40 -0
  72. package/dist/cjs/job/index.js +39 -0
  73. package/dist/cjs/job/scheduler.js +347 -0
  74. package/dist/cjs/junit/index.js +18 -0
  75. package/dist/cjs/junit/junit.js +67 -0
  76. package/dist/cjs/kafka/consumer.js +70 -0
  77. package/dist/cjs/kafka/index.js +29 -0
  78. package/dist/cjs/kafka/producer.js +70 -0
  79. package/dist/cjs/log/index.js +26 -0
  80. package/dist/cjs/log/logging.js +174 -0
  81. package/dist/cjs/mail/client.js +153 -0
  82. package/dist/cjs/mail/index.js +26 -0
  83. package/dist/cjs/messaging/consumer.js +83 -0
  84. package/dist/cjs/messaging/decorators.js +40 -0
  85. package/dist/cjs/messaging/index.js +42 -0
  86. package/dist/cjs/messaging/producer.js +81 -0
  87. package/dist/cjs/mongodb/client.js +627 -0
  88. package/dist/cjs/mongodb/dao.js +390 -0
  89. package/dist/cjs/mongodb/index.js +36 -0
  90. package/dist/cjs/net/decorators.js +40 -0
  91. package/dist/cjs/net/index.js +42 -0
  92. package/dist/cjs/net/soap.js +228 -0
  93. package/dist/cjs/net/websockets.js +151 -0
  94. package/dist/cjs/net/wrappers/onClose.js +2 -0
  95. package/dist/cjs/net/wrappers/onError.js +2 -0
  96. package/dist/cjs/net/wrappers/onMessage.js +2 -0
  97. package/dist/cjs/net/wrappers/onOpen.js +2 -0
  98. package/dist/cjs/pdf/index.js +26 -0
  99. package/dist/cjs/pdf/pdf.js +160 -0
  100. package/dist/cjs/platform/command.js +47 -0
  101. package/dist/cjs/platform/engines.js +70 -0
  102. package/dist/cjs/platform/index.js +47 -0
  103. package/dist/cjs/platform/lifecycle.js +49 -0
  104. package/dist/cjs/platform/os.js +51 -0
  105. package/dist/cjs/platform/problems.js +127 -0
  106. package/dist/cjs/platform/registry.js +319 -0
  107. package/dist/cjs/platform/repository.js +498 -0
  108. package/dist/cjs/platform/workspace.js +574 -0
  109. package/dist/cjs/qldb/index.js +26 -0
  110. package/dist/cjs/qldb/qldb.js +24 -0
  111. package/dist/cjs/rabbitmq/consumer.js +50 -0
  112. package/dist/cjs/rabbitmq/index.js +29 -0
  113. package/dist/cjs/rabbitmq/producer.js +38 -0
  114. package/dist/cjs/redis/client.js +190 -0
  115. package/dist/cjs/redis/index.js +26 -0
  116. package/dist/cjs/security/decorators.js +48 -0
  117. package/dist/cjs/security/index.js +40 -0
  118. package/dist/cjs/security/oauth.js +75 -0
  119. package/dist/cjs/security/user.js +88 -0
  120. package/dist/cjs/template/engines.js +139 -0
  121. package/dist/cjs/template/index.js +26 -0
  122. package/dist/cjs/utils/alphanumeric.js +107 -0
  123. package/dist/cjs/utils/base64.js +104 -0
  124. package/dist/cjs/utils/converter.js +78 -0
  125. package/dist/cjs/utils/digest.js +167 -0
  126. package/dist/cjs/utils/escape.js +160 -0
  127. package/dist/cjs/utils/hex.js +104 -0
  128. package/dist/cjs/utils/index.js +68 -0
  129. package/dist/cjs/utils/jsonpath.js +489 -0
  130. package/dist/cjs/utils/qrcode.js +41 -0
  131. package/dist/cjs/utils/url.js +82 -0
  132. package/dist/cjs/utils/utf8.js +61 -0
  133. package/dist/cjs/utils/uuid.js +48 -0
  134. package/dist/cjs/utils/xml.js +57 -0
  135. package/dist/dts/bpm/deployer.d.ts +29 -0
  136. package/dist/dts/bpm/index.d.ts +8 -0
  137. package/dist/dts/bpm/process.d.ts +433 -0
  138. package/dist/dts/bpm/tasks.d.ts +2022 -0
  139. package/dist/dts/bpm/values.d.ts +38 -0
  140. package/dist/dts/cache/cache.d.ts +30 -0
  141. package/dist/dts/cache/index.d.ts +2 -0
  142. package/dist/dts/cms/cmis.d.ts +413 -0
  143. package/dist/dts/cms/index.d.ts +2 -0
  144. package/dist/dts/component/decorators.d.ts +52 -0
  145. package/dist/dts/component/index.d.ts +2 -0
  146. package/dist/dts/core/configurations.d.ts +65 -0
  147. package/dist/dts/core/context.d.ts +19 -0
  148. package/dist/dts/core/env.d.ts +23 -0
  149. package/dist/dts/core/globals.d.ts +30 -0
  150. package/dist/dts/core/index.d.ts +8 -0
  151. package/dist/dts/db/dao.d.ts +8 -0
  152. package/dist/dts/db/database.d.ts +507 -0
  153. package/dist/dts/db/decorators.d.ts +89 -0
  154. package/dist/dts/db/index.d.ts +25 -0
  155. package/dist/dts/db/insert.d.ts +32 -0
  156. package/dist/dts/db/orm.d.ts +44 -0
  157. package/dist/dts/db/ormstatements.d.ts +4 -0
  158. package/dist/dts/db/procedure.d.ts +25 -0
  159. package/dist/dts/db/query.d.ts +48 -0
  160. package/dist/dts/db/repository.d.ts +64 -0
  161. package/dist/dts/db/sequence.d.ts +34 -0
  162. package/dist/dts/db/sql.d.ts +267 -0
  163. package/dist/dts/db/store.d.ts +138 -0
  164. package/dist/dts/db/translator.d.ts +26 -0
  165. package/dist/dts/db/update.d.ts +21 -0
  166. package/dist/dts/etcd/client.d.ts +92 -0
  167. package/dist/dts/etcd/index.d.ts +2 -0
  168. package/dist/dts/extensions/decorators.d.ts +11 -0
  169. package/dist/dts/extensions/extensions.d.ts +41 -0
  170. package/dist/dts/extensions/index.d.ts +4 -0
  171. package/dist/dts/git/client.d.ts +478 -0
  172. package/dist/dts/git/index.d.ts +2 -0
  173. package/dist/dts/http/client-async.d.ts +158 -0
  174. package/dist/dts/http/client.d.ts +180 -0
  175. package/dist/dts/http/decorators.d.ts +11 -0
  176. package/dist/dts/http/errors/ForbiddenError.d.ts +20 -0
  177. package/dist/dts/http/errors/ValidationError.d.ts +20 -0
  178. package/dist/dts/http/errors.d.ts +2 -0
  179. package/dist/dts/http/index.d.ts +16 -0
  180. package/dist/dts/http/request.d.ts +158 -0
  181. package/dist/dts/http/response.d.ts +281 -0
  182. package/dist/dts/http/rs/resource-common.d.ts +11 -0
  183. package/dist/dts/http/rs/resource-http-controller.d.ts +43 -0
  184. package/dist/dts/http/rs/resource-mappings.d.ts +70 -0
  185. package/dist/dts/http/rs/resource-method.d.ts +206 -0
  186. package/dist/dts/http/rs/resource.d.ts +126 -0
  187. package/dist/dts/http/rs.d.ts +4 -0
  188. package/dist/dts/http/session.d.ts +81 -0
  189. package/dist/dts/http/upload.d.ts +100 -0
  190. package/dist/dts/http/utils.d.ts +54 -0
  191. package/dist/dts/index.d.ts +0 -0
  192. package/dist/dts/indexing/index.d.ts +4 -0
  193. package/dist/dts/indexing/searcher.d.ts +47 -0
  194. package/dist/dts/indexing/writer.d.ts +22 -0
  195. package/dist/dts/integrations/index.d.ts +2 -0
  196. package/dist/dts/integrations/integrations.d.ts +118 -0
  197. package/dist/dts/io/bytes.d.ts +56 -0
  198. package/dist/dts/io/files.d.ts +261 -0
  199. package/dist/dts/io/image.d.ts +22 -0
  200. package/dist/dts/io/index.d.ts +10 -0
  201. package/dist/dts/io/streams.d.ts +172 -0
  202. package/dist/dts/io/zip.d.ts +178 -0
  203. package/dist/dts/job/decorators.d.ts +11 -0
  204. package/dist/dts/job/index.d.ts +4 -0
  205. package/dist/dts/job/scheduler.d.ts +250 -0
  206. package/dist/dts/junit/index.d.ts +1 -0
  207. package/dist/dts/junit/junit.d.ts +50 -0
  208. package/dist/dts/kafka/consumer.d.ts +48 -0
  209. package/dist/dts/kafka/index.d.ts +4 -0
  210. package/dist/dts/kafka/producer.d.ts +50 -0
  211. package/dist/dts/log/index.d.ts +2 -0
  212. package/dist/dts/log/logging.d.ts +102 -0
  213. package/dist/dts/mail/client.d.ts +90 -0
  214. package/dist/dts/mail/index.d.ts +2 -0
  215. package/dist/dts/messaging/consumer.d.ts +61 -0
  216. package/dist/dts/messaging/decorators.d.ts +11 -0
  217. package/dist/dts/messaging/index.d.ts +6 -0
  218. package/dist/dts/messaging/producer.d.ts +59 -0
  219. package/dist/dts/mongodb/client.d.ts +367 -0
  220. package/dist/dts/mongodb/dao.d.ts +24 -0
  221. package/dist/dts/mongodb/index.d.ts +2 -0
  222. package/dist/dts/net/decorators.d.ts +11 -0
  223. package/dist/dts/net/index.d.ts +6 -0
  224. package/dist/dts/net/soap.d.ts +115 -0
  225. package/dist/dts/net/websockets.d.ts +100 -0
  226. package/dist/dts/net/wrappers/onClose.d.ts +0 -0
  227. package/dist/dts/net/wrappers/onError.d.ts +0 -0
  228. package/dist/dts/net/wrappers/onMessage.d.ts +0 -0
  229. package/dist/dts/net/wrappers/onOpen.d.ts +0 -0
  230. package/dist/dts/pdf/index.d.ts +2 -0
  231. package/dist/dts/pdf/pdf.d.ts +72 -0
  232. package/dist/dts/platform/command.d.ts +41 -0
  233. package/dist/dts/platform/engines.d.ts +35 -0
  234. package/dist/dts/platform/index.d.ts +16 -0
  235. package/dist/dts/platform/lifecycle.d.ts +22 -0
  236. package/dist/dts/platform/os.d.ts +23 -0
  237. package/dist/dts/platform/problems.d.ts +114 -0
  238. package/dist/dts/platform/registry.d.ts +227 -0
  239. package/dist/dts/platform/repository.d.ts +354 -0
  240. package/dist/dts/platform/workspace.d.ts +421 -0
  241. package/dist/dts/qldb/index.d.ts +2 -0
  242. package/dist/dts/qldb/qldb.d.ts +1 -0
  243. package/dist/dts/rabbitmq/consumer.d.ts +25 -0
  244. package/dist/dts/rabbitmq/index.d.ts +4 -0
  245. package/dist/dts/rabbitmq/producer.d.ts +15 -0
  246. package/dist/dts/redis/client.d.ts +134 -0
  247. package/dist/dts/redis/index.d.ts +2 -0
  248. package/dist/dts/security/decorators.d.ts +4 -0
  249. package/dist/dts/security/index.d.ts +5 -0
  250. package/dist/dts/security/oauth.d.ts +39 -0
  251. package/dist/dts/security/user.d.ts +51 -0
  252. package/dist/dts/template/engines.d.ts +98 -0
  253. package/dist/dts/template/index.d.ts +2 -0
  254. package/dist/dts/utils/alphanumeric.d.ts +39 -0
  255. package/dist/dts/utils/base64.d.ts +48 -0
  256. package/dist/dts/utils/converter.d.ts +44 -0
  257. package/dist/dts/utils/digest.d.ts +50 -0
  258. package/dist/dts/utils/escape.d.ts +110 -0
  259. package/dist/dts/utils/hex.d.ts +48 -0
  260. package/dist/dts/utils/index.d.ts +23 -0
  261. package/dist/dts/utils/jsonpath.d.ts +22 -0
  262. package/dist/dts/utils/qrcode.d.ts +16 -0
  263. package/dist/dts/utils/url.d.ts +50 -0
  264. package/dist/dts/utils/utf8.d.ts +33 -0
  265. package/dist/dts/utils/uuid.d.ts +21 -0
  266. package/dist/dts/utils/xml.d.ts +22 -0
  267. package/dist/esm/bpm/deployer.mjs +38 -0
  268. package/dist/esm/bpm/index.mjs +15 -0
  269. package/dist/esm/bpm/process.mjs +617 -0
  270. package/dist/esm/bpm/tasks.mjs +954 -0
  271. package/dist/esm/bpm/values.mjs +63 -0
  272. package/dist/esm/cache/cache.mjs +45 -0
  273. package/dist/esm/cache/index.mjs +6 -0
  274. package/dist/esm/cms/cmis.mjs +660 -0
  275. package/dist/esm/cms/index.mjs +6 -0
  276. package/dist/esm/component/decorators.mjs +107 -0
  277. package/dist/esm/component/index.mjs +6 -0
  278. package/dist/esm/core/configurations.mjs +91 -0
  279. package/dist/esm/core/context.mjs +28 -0
  280. package/dist/esm/core/env.mjs +26 -0
  281. package/dist/esm/core/globals.mjs +35 -0
  282. package/dist/esm/core/index.mjs +15 -0
  283. package/dist/esm/db/dao.mjs +775 -0
  284. package/dist/esm/db/database.mjs +885 -0
  285. package/dist/esm/db/decorators.mjs +148 -0
  286. package/dist/esm/db/index.mjs +42 -0
  287. package/dist/esm/db/insert.mjs +32 -0
  288. package/dist/esm/db/orm.mjs +225 -0
  289. package/dist/esm/db/ormstatements.mjs +223 -0
  290. package/dist/esm/db/procedure.mjs +93 -0
  291. package/dist/esm/db/query.mjs +38 -0
  292. package/dist/esm/db/repository.mjs +129 -0
  293. package/dist/esm/db/sequence.mjs +40 -0
  294. package/dist/esm/db/sql.mjs +497 -0
  295. package/dist/esm/db/store.mjs +153 -0
  296. package/dist/esm/db/translator.mjs +81 -0
  297. package/dist/esm/db/update.mjs +24 -0
  298. package/dist/esm/etcd/client.mjs +155 -0
  299. package/dist/esm/etcd/index.mjs +6 -0
  300. package/dist/esm/extensions/decorators.mjs +21 -0
  301. package/dist/esm/extensions/extensions.mjs +89 -0
  302. package/dist/esm/extensions/index.mjs +9 -0
  303. package/dist/esm/git/client.mjs +258 -0
  304. package/dist/esm/git/index.mjs +6 -0
  305. package/dist/esm/http/client-async.mjs +205 -0
  306. package/dist/esm/http/client.mjs +126 -0
  307. package/dist/esm/http/decorators.mjs +47 -0
  308. package/dist/esm/http/errors/ForbiddenError.mjs +22 -0
  309. package/dist/esm/http/errors/ValidationError.mjs +22 -0
  310. package/dist/esm/http/errors.mjs +7 -0
  311. package/dist/esm/http/index.mjs +29 -0
  312. package/dist/esm/http/request.mjs +262 -0
  313. package/dist/esm/http/response.mjs +433 -0
  314. package/dist/esm/http/rs/resource-common.mjs +13 -0
  315. package/dist/esm/http/rs/resource-http-controller.mjs +287 -0
  316. package/dist/esm/http/rs/resource-mappings.mjs +111 -0
  317. package/dist/esm/http/rs/resource-method.mjs +199 -0
  318. package/dist/esm/http/rs/resource.mjs +213 -0
  319. package/dist/esm/http/rs.mjs +12 -0
  320. package/dist/esm/http/session.mjs +105 -0
  321. package/dist/esm/http/upload.mjs +125 -0
  322. package/dist/esm/http/utils.mjs +87 -0
  323. package/dist/esm/index.mjs +1 -0
  324. package/dist/esm/indexing/index.mjs +9 -0
  325. package/dist/esm/indexing/searcher.mjs +51 -0
  326. package/dist/esm/indexing/writer.mjs +26 -0
  327. package/dist/esm/integrations/index.mjs +6 -0
  328. package/dist/esm/integrations/integrations.mjs +36 -0
  329. package/dist/esm/io/bytes.mjs +82 -0
  330. package/dist/esm/io/files.mjs +325 -0
  331. package/dist/esm/io/image.mjs +24 -0
  332. package/dist/esm/io/index.mjs +18 -0
  333. package/dist/esm/io/streams.mjs +224 -0
  334. package/dist/esm/io/zip.mjs +232 -0
  335. package/dist/esm/job/decorators.mjs +21 -0
  336. package/dist/esm/job/index.mjs +9 -0
  337. package/dist/esm/job/scheduler.mjs +328 -0
  338. package/dist/esm/junit/index.mjs +2 -0
  339. package/dist/esm/junit/junit.mjs +48 -0
  340. package/dist/esm/kafka/consumer.mjs +51 -0
  341. package/dist/esm/kafka/index.mjs +9 -0
  342. package/dist/esm/kafka/producer.mjs +51 -0
  343. package/dist/esm/log/index.mjs +6 -0
  344. package/dist/esm/log/logging.mjs +155 -0
  345. package/dist/esm/mail/client.mjs +134 -0
  346. package/dist/esm/mail/index.mjs +6 -0
  347. package/dist/esm/messaging/consumer.mjs +64 -0
  348. package/dist/esm/messaging/decorators.mjs +21 -0
  349. package/dist/esm/messaging/index.mjs +12 -0
  350. package/dist/esm/messaging/producer.mjs +62 -0
  351. package/dist/esm/mongodb/client.mjs +608 -0
  352. package/dist/esm/mongodb/dao.mjs +360 -0
  353. package/dist/esm/mongodb/index.mjs +7 -0
  354. package/dist/esm/net/decorators.mjs +21 -0
  355. package/dist/esm/net/index.mjs +12 -0
  356. package/dist/esm/net/soap.mjs +209 -0
  357. package/dist/esm/net/websockets.mjs +132 -0
  358. package/dist/esm/net/wrappers/onClose.mjs +2 -0
  359. package/dist/esm/net/wrappers/onError.mjs +2 -0
  360. package/dist/esm/net/wrappers/onMessage.mjs +2 -0
  361. package/dist/esm/net/wrappers/onOpen.mjs +2 -0
  362. package/dist/esm/pdf/index.mjs +6 -0
  363. package/dist/esm/pdf/pdf.mjs +141 -0
  364. package/dist/esm/platform/command.mjs +28 -0
  365. package/dist/esm/platform/engines.mjs +51 -0
  366. package/dist/esm/platform/index.mjs +27 -0
  367. package/dist/esm/platform/lifecycle.mjs +30 -0
  368. package/dist/esm/platform/os.mjs +32 -0
  369. package/dist/esm/platform/problems.mjs +108 -0
  370. package/dist/esm/platform/registry.mjs +300 -0
  371. package/dist/esm/platform/repository.mjs +479 -0
  372. package/dist/esm/platform/workspace.mjs +555 -0
  373. package/dist/esm/qldb/index.mjs +6 -0
  374. package/dist/esm/qldb/qldb.mjs +5 -0
  375. package/dist/esm/rabbitmq/consumer.mjs +31 -0
  376. package/dist/esm/rabbitmq/index.mjs +9 -0
  377. package/dist/esm/rabbitmq/producer.mjs +19 -0
  378. package/dist/esm/redis/client.mjs +171 -0
  379. package/dist/esm/redis/index.mjs +6 -0
  380. package/dist/esm/security/decorators.mjs +29 -0
  381. package/dist/esm/security/index.mjs +10 -0
  382. package/dist/esm/security/oauth.mjs +56 -0
  383. package/dist/esm/security/user.mjs +69 -0
  384. package/dist/esm/template/engines.mjs +120 -0
  385. package/dist/esm/template/index.mjs +6 -0
  386. package/dist/esm/utils/alphanumeric.mjs +88 -0
  387. package/dist/esm/utils/base64.mjs +85 -0
  388. package/dist/esm/utils/converter.mjs +59 -0
  389. package/dist/esm/utils/digest.mjs +148 -0
  390. package/dist/esm/utils/escape.mjs +141 -0
  391. package/dist/esm/utils/hex.mjs +85 -0
  392. package/dist/esm/utils/index.mjs +38 -0
  393. package/dist/esm/utils/jsonpath.mjs +470 -0
  394. package/dist/esm/utils/qrcode.mjs +22 -0
  395. package/dist/esm/utils/url.mjs +63 -0
  396. package/dist/esm/utils/utf8.mjs +42 -0
  397. package/dist/esm/utils/uuid.mjs +29 -0
  398. package/dist/esm/utils/xml.mjs +38 -0
  399. package/package.json +58 -0
@@ -0,0 +1,636 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var process_exports = {};
19
+ __export(process_exports, {
20
+ Process: () => Process
21
+ });
22
+ module.exports = __toCommonJS(process_exports);
23
+ var import_values = require("@aerokit/sdk/bpm/values");
24
+ const BpmFacade = Java.type("org.eclipse.dirigible.components.api.bpm.BpmFacade");
25
+ class Process {
26
+ /**
27
+ * Starts a new process instance for a given process definition key.
28
+ *
29
+ * @param key The process definition key (ID) of the process to start.
30
+ * @param businessKey An optional business key to associate with the process instance. Defaults to an empty string.
31
+ * @param parameters An optional map of process variables to pass to the process instance upon starting. Defaults to an empty object.
32
+ * @returns The unique ID of the newly started process instance.
33
+ */
34
+ static start(key, businessKey = "", parameters = {}) {
35
+ return BpmFacade.startProcess(key, businessKey, JSON.stringify(parameters));
36
+ }
37
+ /**
38
+ * Sets a human-readable name for an existing process instance.
39
+ *
40
+ * @param processInstanceId The ID of the process instance to update.
41
+ * @param name The new name for the process instance.
42
+ */
43
+ static setProcessInstanceName(processInstanceId, name) {
44
+ BpmFacade.setProcessInstanceName(processInstanceId, name);
45
+ }
46
+ /**
47
+ * Updates the business key of an existing process instance.
48
+ *
49
+ * @param processInstanceId The ID of the process instance to update.
50
+ * @param businessKey The new business key.
51
+ */
52
+ static updateBusinessKey(processInstanceId, businessKey) {
53
+ BpmFacade.updateBusinessKey(processInstanceId, businessKey);
54
+ }
55
+ /**
56
+ * Updates the business status of an existing process instance.
57
+ *
58
+ * @param processInstanceId The ID of the process instance to update.
59
+ * @param businessStatus The new business status.
60
+ */
61
+ static updateBusinessStatus(processInstanceId, businessStatus) {
62
+ BpmFacade.updateBusinessStatus(processInstanceId, businessStatus);
63
+ }
64
+ /**
65
+ * Retrieves the value of a specific variable from a process instance.
66
+ *
67
+ * @param processInstanceId The ID of the process instance.
68
+ * @param variableName The name of the variable to retrieve.
69
+ * @returns The value of the variable, or `null` if the variable does not exist. The type is `any` as it depends on the stored value.
70
+ */
71
+ static getVariable(processInstanceId, variableName) {
72
+ return BpmFacade.getVariable(processInstanceId, variableName);
73
+ }
74
+ /**
75
+ * Retrieves all variables associated with a process instance.
76
+ *
77
+ * @param processInstanceId The ID of the process instance.
78
+ * @returns An object containing all variables for the process instance, where keys are variable names and values are the variable values.
79
+ */
80
+ static getVariables(processInstanceId) {
81
+ return BpmFacade.getVariables(processInstanceId);
82
+ }
83
+ /**
84
+ * Sets or updates the value of a variable in a process instance.
85
+ *
86
+ * @param processInstanceId The ID of the process instance.
87
+ * @param variableName The name of the variable to set.
88
+ * @param value The new value for the variable. The type is `any` to accommodate different data types.
89
+ */
90
+ static setVariable(processInstanceId, variableName, value) {
91
+ BpmFacade.setVariable(processInstanceId, variableName, value);
92
+ }
93
+ /**
94
+ * Removes a variable from a process instance.
95
+ *
96
+ * @param processInstanceId The ID of the process instance.
97
+ * @param variableName The name of the variable to remove.
98
+ */
99
+ static removeVariable(processInstanceId, variableName) {
100
+ BpmFacade.removeVariable(processInstanceId, variableName);
101
+ }
102
+ /**
103
+ * Correlates a message event with a running process instance.
104
+ *
105
+ * @param processInstanceId The ID of the process instance to correlate the message to.
106
+ * @param messageName The name of the message event defined in the BPMN process.
107
+ * @param variables A map of variables (`Map<string, any>`) to pass along with the message event.
108
+ */
109
+ static correlateMessageEvent(processInstanceId, messageName, variables) {
110
+ BpmFacade.correlateMessageEvent(processInstanceId, messageName, import_values.Values.stringifyValuesMap(variables));
111
+ }
112
+ /**
113
+ * Retrieves the current execution context object, typically used within an execution listener or service task.
114
+ *
115
+ * @returns A new instance of the `ExecutionContext` containing details about the current process execution path.
116
+ */
117
+ static getExecutionContext() {
118
+ return new ExecutionContext();
119
+ }
120
+ }
121
+ class ExecutionContext {
122
+ constructor() {
123
+ this.execution = __context.get("execution");
124
+ }
125
+ /**
126
+ * Unique id of this path of execution that can be used as a handle to provide external signals back into the engine after wait states.
127
+ *
128
+ * @returns The unique ID of the current execution.
129
+ */
130
+ getId() {
131
+ return this.execution.getId();
132
+ }
133
+ /**
134
+ * Reference to the overall process instance.
135
+ * @returns The ID of the process instance.
136
+ */
137
+ getProcessInstanceId() {
138
+ return this.execution.getProcessInstanceId();
139
+ }
140
+ /**
141
+ * The 'root' process instance. When using call activity for example, the processInstance set will not always be the root. This method returns the topmost process instance.
142
+ *
143
+ * @returns The ID of the root process instance.
144
+ */
145
+ getRootProcessInstanceId() {
146
+ return this.execution.getRootProcessInstanceId();
147
+ }
148
+ /**
149
+ * Will contain the event name in case this execution is passed in for an {@link ExecutionListener}.
150
+ * @returns The current event name, or `null`/empty string if not executing an event listener.
151
+ */
152
+ getEventName() {
153
+ return this.execution.getEventName();
154
+ }
155
+ /**
156
+ * Sets the current event (typically when execution an {@link ExecutionListener}).
157
+ *
158
+ * @param eventName The name of the event.
159
+ */
160
+ setEventName(eventName) {
161
+ this.execution.setEventName(eventName);
162
+ }
163
+ /**
164
+ * The business key for the process instance this execution is associated with.
165
+ * @returns The business key.
166
+ */
167
+ getProcessInstanceBusinessKey() {
168
+ return this.execution.getProcessInstanceBusinessKey();
169
+ }
170
+ /**
171
+ * The business status for the process instance this execution is associated with.
172
+ * @returns The business status.
173
+ */
174
+ getProcessInstanceBusinessStatus() {
175
+ return this.execution.getProcessInstanceBusinessStatus();
176
+ }
177
+ /**
178
+ * The process definition key for the process instance this execution is associated with.
179
+ * @returns The process definition ID.
180
+ */
181
+ getProcessDefinitionId() {
182
+ return this.execution.getProcessDefinitionId();
183
+ }
184
+ /**
185
+ * If this execution runs in the context of a case and stage, this method returns it's closest parent stage instance id (the stage plan item instance id to be
186
+ * precise).
187
+ *
188
+ * @returns The stage instance id this execution belongs to or `null`, if this execution is not part of a case at all or is not a child element of a stage.
189
+ */
190
+ getPropagatedStageInstanceId() {
191
+ return this.execution.getPropagatedStageInstanceId();
192
+ }
193
+ /**
194
+ * Gets the id of the parent of this execution. If null, the execution represents a process-instance.
195
+ * @returns The parent execution ID, or `null`.
196
+ */
197
+ getParentId() {
198
+ return this.execution.getParentId();
199
+ }
200
+ /**
201
+ * Gets the id of the calling execution. If not null, the execution is part of a subprocess.
202
+ * @returns The super execution ID, or `null`.
203
+ */
204
+ getSuperExecutionId() {
205
+ return this.execution.getSuperExecutionId();
206
+ }
207
+ /**
208
+ * Gets the id of the current activity.
209
+ * @returns The current activity ID.
210
+ */
211
+ getCurrentActivityId() {
212
+ return this.execution.getCurrentActivityId();
213
+ }
214
+ /**
215
+ * Returns the tenant id, if any is set before on the process definition or process instance.
216
+ * @returns The tenant ID, or `null`/empty string.
217
+ */
218
+ getTenantId() {
219
+ return this.execution.getTenantId();
220
+ }
221
+ /**
222
+ * The BPMN element where the execution currently is at.
223
+ * @returns The current flow element object (type is Java object).
224
+ */
225
+ getCurrentFlowElement() {
226
+ return this.execution.getCurrentFlowElement();
227
+ }
228
+ /**
229
+ * Change the current BPMN element the execution is at.
230
+ * @param flowElement The new flow element object (Java type).
231
+ */
232
+ setCurrentFlowElement(flowElement) {
233
+ this.execution.setCurrentFlowElement(flowElement);
234
+ }
235
+ /**
236
+ * Returns the {@link FlowableListener} instance matching an {@link ExecutionListener} if currently an execution listener is being execution. Returns null otherwise.
237
+ * @returns The current Flowable Listener object (Java type), or `null`.
238
+ */
239
+ getCurrentFlowableListener() {
240
+ return this.execution.getCurrentFlowableListener();
241
+ }
242
+ /**
243
+ * Called when an {@link ExecutionListener} is being executed.
244
+ * @param currentListener The current listener object (Java type).
245
+ */
246
+ setCurrentFlowableListener(currentListener) {
247
+ this.execution.setCurrentFlowableListener(currentListener);
248
+ }
249
+ /**
250
+ * Create a snapshot read only delegate execution of this delegate execution.
251
+ *
252
+ * @returns A {@link ReadOnlyDelegateExecution} object (Java type).
253
+ */
254
+ snapshotReadOnly() {
255
+ return this.execution.snapshotReadOnly();
256
+ }
257
+ /**
258
+ * returns the parent of this execution, or null if there no parent.
259
+ * @returns The parent execution object (Java type), or `null`.
260
+ */
261
+ getParent() {
262
+ return this.execution.getParent();
263
+ }
264
+ /**
265
+ * returns the list of execution of which this execution the parent of.
266
+ * @returns An array of child execution objects (Java type).
267
+ */
268
+ getExecutions() {
269
+ return this.execution.getExecutions();
270
+ }
271
+ /**
272
+ * makes this execution active or inactive.
273
+ * @param isActive A boolean indicating whether the execution should be active.
274
+ */
275
+ setActive(isActive) {
276
+ this.execution.setActive(isActive);
277
+ }
278
+ /**
279
+ * returns whether this execution is currently active.
280
+ * @returns `true` if active, `false` otherwise.
281
+ */
282
+ isActive() {
283
+ return this.execution.isActive();
284
+ }
285
+ /**
286
+ * returns whether this execution has ended or not.
287
+ * @returns `true` if ended, `false` otherwise.
288
+ */
289
+ isEnded() {
290
+ return this.execution.isEnded();
291
+ }
292
+ /**
293
+ * changes the concurrent indicator on this execution.
294
+ * @param isConcurrent A boolean indicating whether the execution should be concurrent.
295
+ */
296
+ setConcurrent(isConcurrent) {
297
+ this.execution.setConcurrent(isConcurrent);
298
+ }
299
+ /**
300
+ * returns whether this execution is concurrent or not.
301
+ * @returns `true` if concurrent, `false` otherwise.
302
+ */
303
+ isConcurrent() {
304
+ return this.execution.isConcurrent();
305
+ }
306
+ /**
307
+ * returns whether this execution is a process instance or not.
308
+ * @returns `true` if it's a process instance, `false` otherwise.
309
+ */
310
+ isProcessInstanceType() {
311
+ return this.execution.isProcessInstanceType();
312
+ }
313
+ /**
314
+ * Inactivates this execution. This is useful for example in a join: the execution still exists, but it is not longer active.
315
+ */
316
+ inactivate() {
317
+ this.execution.inactivate();
318
+ }
319
+ /**
320
+ * Returns whether this execution is a scope.
321
+ * @returns `true` if it is a scope, `false` otherwise.
322
+ */
323
+ isScope() {
324
+ return this.execution.isScope();
325
+ }
326
+ /**
327
+ * Changes whether this execution is a scope or not.
328
+ * @param isScope A boolean indicating whether the execution should be a scope.
329
+ */
330
+ setScope(isScope) {
331
+ this.execution.setScope(isScope);
332
+ }
333
+ /**
334
+ * Returns whether this execution is the root of a multi instance execution.
335
+ * @returns `true` if it's a multi instance root, `false` otherwise.
336
+ */
337
+ isMultiInstanceRoot() {
338
+ return this.execution.isMultiInstanceRoot();
339
+ }
340
+ /**
341
+ * Changes whether this execution is a multi instance root or not.
342
+ * @param isMultiInstanceRoot A boolean indicating whether the execution is the root of a multi-instance execution.
343
+ */
344
+ setMultiInstanceRoot(isMultiInstanceRoot) {
345
+ this.execution.setMultiInstanceRoot(isMultiInstanceRoot);
346
+ }
347
+ /**
348
+ * Returns all variables. This will include all variables of parent scopes too.
349
+ * @returns A Map of variable names (`string`) to variable values (`any`).
350
+ */
351
+ getVariables() {
352
+ const variables = this.execution.getVariables();
353
+ for (const [key, value] of variables) {
354
+ variables.set(key, import_values.Values.parseValue(value));
355
+ }
356
+ return variables;
357
+ }
358
+ /**
359
+ * Returns all variables, as instances of the {@link VariableInstance} interface, which gives more information than only the value (type, execution id, etc.)
360
+ * @returns A Map of variable names (`string`) to {@link VariableInstance} objects (Java type).
361
+ */
362
+ getVariableInstances() {
363
+ return this.execution.getVariableInstances();
364
+ }
365
+ /**
366
+ * Returns the variable local to this scope only. So, in contrary to {@link #getVariables()}, the variables from the parent scope won't be returned.
367
+ * @returns A Map of variable names (`string`) to local variable values (`any`).
368
+ */
369
+ getVariablesLocal() {
370
+ const variablesLocal = this.execution.getVariablesLocal();
371
+ for (const [key, value] of variablesLocal) {
372
+ variablesLocal.set(key, import_values.Values.parseValue(value));
373
+ }
374
+ return variablesLocal;
375
+ }
376
+ /**
377
+ * Returns the variables local to this scope as instances of the {@link VariableInstance} interface, which provided additional information about the variable.
378
+ * @returns A Map of variable names (`string`) to local {@link VariableInstance} objects (Java type).
379
+ */
380
+ getVariableInstancesLocal() {
381
+ return this.execution.getVariableInstancesLocal();
382
+ }
383
+ /**
384
+ * Returns the variable value for one specific variable. Will look in parent scopes when the variable does not exist on this particular scope.
385
+ * @param variableName The name of the variable to retrieve.
386
+ * @returns The value of the variable (`any`), or `null` if not found.
387
+ */
388
+ getVariable(variableName) {
389
+ return import_values.Values.parseValue(this.execution.getVariable(variableName));
390
+ }
391
+ /**
392
+ * Similar to {@link #getVariable(String)}, but returns a {@link VariableInstance} instance, which contains more information than just the value.
393
+ * @param variableName The name of the variable to retrieve.
394
+ * @returns The {@link VariableInstance} object (Java type), or `null`.
395
+ */
396
+ getVariableInstance(variableName) {
397
+ return this.execution.getVariableInstance(variableName);
398
+ }
399
+ /**
400
+ * Returns the value for the specific variable and only checks this scope and not any parent scope.
401
+ * @param variableName The name of the local variable to retrieve.
402
+ * @returns The value of the local variable (`any`), or `null` if not found locally.
403
+ */
404
+ getVariableLocal(variableName) {
405
+ return import_values.Values.parseValue(this.execution.getVariableLocal(variableName));
406
+ }
407
+ /**
408
+ * Similar to {@link #getVariableLocal(String)}, but returns an instance of {@link VariableInstance}, which has some additional information beyond the value.
409
+ * @param variableName The name of the local variable to retrieve.
410
+ * @returns The local {@link VariableInstance} object (Java type), or `null`.
411
+ */
412
+ getVariableInstanceLocal(variableName) {
413
+ return this.execution.getVariableInstanceLocal(variableName);
414
+ }
415
+ /**
416
+ * Returns all the names of the variables for this scope and all parent scopes.
417
+ * @returns A Set of all variable names (`string`).
418
+ */
419
+ getVariableNames() {
420
+ const variableNames = /* @__PURE__ */ new Set();
421
+ for (const next of this.execution.getVariableNames().toArray()) {
422
+ variableNames.add(next);
423
+ }
424
+ return variableNames;
425
+ }
426
+ /**
427
+ * Returns all the names of the variables for this scope (no parent scopes).
428
+ * @returns A Set of local variable names (`string`).
429
+ */
430
+ getVariableNamesLocal() {
431
+ const variableNamesLocal = /* @__PURE__ */ new Set();
432
+ for (const next of this.execution.getVariableNamesLocal().toArray()) {
433
+ variableNamesLocal.add(next);
434
+ }
435
+ return variableNamesLocal;
436
+ }
437
+ /**
438
+ * Sets the variable with the provided name to the provided value. It checks parent scopes for an existing variable before setting on the current scope.
439
+ * @param variableName The name of the variable to be set.
440
+ * @param value The value of the variable to be set (`any`).
441
+ */
442
+ setVariable(variableName, value) {
443
+ this.execution.setVariable(variableName, import_values.Values.stringifyValue(value));
444
+ }
445
+ /**
446
+ * Similar to {@link #setVariable(String, Object)}, but the variable is set to this scope specifically (local variable).
447
+ * @param variableName The name of the variable to be set locally.
448
+ * @param value The value of the variable to be set (`any`).
449
+ * @returns The old value of the local variable (Java type), or `null`.
450
+ */
451
+ setVariableLocal(variableName, value) {
452
+ return this.execution.setVariableLocal(variableName, import_values.Values.stringifyValue(value));
453
+ }
454
+ /**
455
+ * Sets the provided variables to the variable scope, using the default scoping algorithm.
456
+ * @param variables A map of keys (`string`) and values (`any`) for the variables to be set.
457
+ */
458
+ setVariables(variables) {
459
+ for (const [key, value] of variables) {
460
+ variables.set(key, import_values.Values.stringifyValue(value));
461
+ }
462
+ this.execution.setVariables(variables);
463
+ }
464
+ /**
465
+ * Similar to {@link #setVariables(Map)}, but the variables are set on this scope specifically (local variables).
466
+ * @param variables A map of keys (`string`) and values (`any`) for the local variables to be set.
467
+ */
468
+ setVariablesLocal(variables) {
469
+ for (const [key, value] of variables) {
470
+ variables.set(key, import_values.Values.stringifyValue(value));
471
+ }
472
+ this.execution.setVariablesLocal(variables);
473
+ }
474
+ /**
475
+ * Returns whether this scope or any parent scope has variables.
476
+ * @returns `true` if variables exist in scope hierarchy, `false` otherwise.
477
+ */
478
+ hasVariables() {
479
+ return this.execution.hasVariables();
480
+ }
481
+ /**
482
+ * Returns whether this scope has variables.
483
+ * @returns `true` if local variables exist, `false` otherwise.
484
+ */
485
+ hasVariablesLocal() {
486
+ return this.execution.hasVariablesLocal();
487
+ }
488
+ /**
489
+ * Returns whether this scope or any parent scope has a specific variable.
490
+ * @param variableName The name of the variable to check.
491
+ * @returns `true` if the variable is found in the scope hierarchy, `false` otherwise.
492
+ */
493
+ hasVariable(variableName) {
494
+ return this.execution.hasVariable(variableName);
495
+ }
496
+ /**
497
+ * Returns whether this scope has a specific variable.
498
+ * @param variableName The name of the local variable to check.
499
+ * @returns `true` if the variable is found locally, `false` otherwise.
500
+ */
501
+ hasVariableLocal(variableName) {
502
+ return this.execution.hasVariableLocal(variableName);
503
+ }
504
+ /**
505
+ * Removes the variable from the process instance and creates a new HistoricVariableUpdate. Searches up the scope hierarchy.
506
+ * @param variableName The name of the variable to remove.
507
+ */
508
+ removeVariable(variableName) {
509
+ this.execution.removeVariable(variableName);
510
+ }
511
+ /**
512
+ * Removes the local variable and creates a new HistoricVariableUpdate.
513
+ * @param variableName The name of the local variable to remove.
514
+ */
515
+ removeVariableLocal(variableName) {
516
+ this.execution.removeVariableLocal(variableName);
517
+ }
518
+ /**
519
+ * Removes the variables and creates a new HistoricVariableUpdate for each of them. Searches up the scope hierarchy.
520
+ * @param variableNames An array of variable names (`string[]`) to remove.
521
+ */
522
+ removeVariables(variableNames) {
523
+ this.execution.removeVariables(variableNames);
524
+ }
525
+ /**
526
+ * Removes the local variables and creates a new HistoricVariableUpdate for each of them.
527
+ * @param variableNames An array of local variable names (`string[]`) to remove.
528
+ */
529
+ removeVariablesLocal(variableNames) {
530
+ this.execution.removeVariablesLocal(variableNames);
531
+ }
532
+ /**
533
+ * Sets a transient variable using the default scoping mechanism (up the hierarchy). Transient variables have no history and are cleared at wait states.
534
+ * @param variableName The name of the transient variable.
535
+ * @param variableValue The value of the transient variable (`any`).
536
+ */
537
+ setTransientVariable(variableName, variableValue) {
538
+ this.execution.setTransientVariable(variableName, import_values.Values.stringifyValue(variableValue));
539
+ }
540
+ /**
541
+ * Sets a local transient variable. Transient variables have no history and are cleared at wait states.
542
+ * @param variableName The name of the local transient variable.
543
+ * @param variableValue The value of the local transient variable (`any`).
544
+ */
545
+ setTransientVariableLocal(variableName, variableValue) {
546
+ this.execution.setTransientVariableLocal(variableName, import_values.Values.stringifyValue(variableValue));
547
+ }
548
+ /**
549
+ * Sets multiple transient variables using the default scoping mechanism (up the hierarchy).
550
+ * @param transientVariables A map of keys (`string`) and values (`any`) for the transient variables to be set.
551
+ */
552
+ setTransientVariables(transientVariables) {
553
+ for (const [key, value] of transientVariables) {
554
+ transientVariables.set(key, import_values.Values.stringifyValue(value));
555
+ }
556
+ this.execution.setTransientVariables(transientVariables);
557
+ }
558
+ /**
559
+ * Retrieves the value of a transient variable, searching up the parent scopes.
560
+ * @param variableName The name of the transient variable to retrieve.
561
+ * @returns The value of the transient variable (`any`), or `null` if not found.
562
+ */
563
+ getTransientVariable(variableName) {
564
+ return import_values.Values.parseValue(this.execution.getTransientVariable(variableName));
565
+ }
566
+ /**
567
+ * Retrieves all transient variables in the current scope hierarchy.
568
+ * @returns A Map of transient variable names (`string`) to values (`any`).
569
+ */
570
+ getTransientVariables() {
571
+ const transientVariables = this.execution.getTransientVariables();
572
+ for (const [key, value] of transientVariables) {
573
+ transientVariables.set(key, import_values.Values.parseValue(value));
574
+ }
575
+ return transientVariables;
576
+ }
577
+ /**
578
+ * Sets multiple local transient variables.
579
+ * @param transientVariables A map of keys (`string`) and values (`any`) for the local transient variables to be set.
580
+ */
581
+ setTransientVariablesLocal(transientVariables) {
582
+ for (const [key, value] of transientVariables) {
583
+ transientVariables.set(key, import_values.Values.stringifyValue(value));
584
+ }
585
+ this.execution.setTransientVariablesLocal(transientVariables);
586
+ }
587
+ /**
588
+ * Retrieves the value of a local transient variable.
589
+ * @param variableName The name of the local transient variable to retrieve.
590
+ * @returns The value of the local transient variable (`any`), or `null` if not found.
591
+ */
592
+ getTransientVariableLocal(variableName) {
593
+ return import_values.Values.parseValue(this.execution.getTransientVariableLocal(variableName));
594
+ }
595
+ /**
596
+ * Retrieves all local transient variables.
597
+ * @returns A Map of local transient variable names (`string`) to values (`any`).
598
+ */
599
+ getTransientVariablesLocal() {
600
+ const transientVariablesLocal = this.execution.getTransientVariablesLocal();
601
+ for (const [key, value] of transientVariablesLocal) {
602
+ transientVariablesLocal.set(key, import_values.Values.parseValue(value));
603
+ }
604
+ return transientVariablesLocal;
605
+ }
606
+ /**
607
+ * Removes a specific local transient variable.
608
+ * @param variableName The name of the local transient variable to remove.
609
+ */
610
+ removeTransientVariableLocal(variableName) {
611
+ this.execution.removeTransientVariableLocal(variableName);
612
+ }
613
+ /**
614
+ * Removes a specific transient variable, searching up the scope hierarchy.
615
+ * @param variableName The name of the transient variable to remove.
616
+ */
617
+ removeTransientVariable(variableName) {
618
+ this.execution.removeTransientVariable(variableName);
619
+ }
620
+ /**
621
+ * Remove all transient variables of this scope and its parent scopes.
622
+ */
623
+ removeTransientVariables() {
624
+ this.execution.removeTransientVariables();
625
+ }
626
+ /**
627
+ * Removes all local transient variables.
628
+ */
629
+ removeTransientVariablesLocal() {
630
+ this.execution.removeTransientVariablesLocal();
631
+ }
632
+ }
633
+ if (typeof module !== "undefined") {
634
+ module.exports = Process;
635
+ }
636
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2JwbS9wcm9jZXNzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBQcm9jZXNzXG4gKiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggcHJvY2VzcyBpbnN0YW5jZXMsXG4gKiBpbmNsdWRpbmcgc3RhcnRpbmcsIHVwZGF0aW5nIG1ldGFkYXRhLCBhbmQgbWFuYWdpbmcgdmFyaWFibGVzLlxuICovXG5cbmltcG9ydCB7IFZhbHVlcyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvYnBtL3ZhbHVlc1wiO1xuXG5jb25zdCBCcG1GYWNhZGUgPSBKYXZhLnR5cGUoXCJvcmcuZWNsaXBzZS5kaXJpZ2libGUuY29tcG9uZW50cy5hcGkuYnBtLkJwbUZhY2FkZVwiKTtcblxuZXhwb3J0IGNsYXNzIFByb2Nlc3Mge1xuXG5cdC8qKlxuXHQgKiBTdGFydHMgYSBuZXcgcHJvY2VzcyBpbnN0YW5jZSBmb3IgYSBnaXZlbiBwcm9jZXNzIGRlZmluaXRpb24ga2V5LlxuXHQgKlxuXHQgKiBAcGFyYW0ga2V5IFRoZSBwcm9jZXNzIGRlZmluaXRpb24ga2V5IChJRCkgb2YgdGhlIHByb2Nlc3MgdG8gc3RhcnQuXG5cdCAqIEBwYXJhbSBidXNpbmVzc0tleSBBbiBvcHRpb25hbCBidXNpbmVzcyBrZXkgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByb2Nlc3MgaW5zdGFuY2UuIERlZmF1bHRzIHRvIGFuIGVtcHR5IHN0cmluZy5cblx0ICogQHBhcmFtIHBhcmFtZXRlcnMgQW4gb3B0aW9uYWwgbWFwIG9mIHByb2Nlc3MgdmFyaWFibGVzIHRvIHBhc3MgdG8gdGhlIHByb2Nlc3MgaW5zdGFuY2UgdXBvbiBzdGFydGluZy4gRGVmYXVsdHMgdG8gYW4gZW1wdHkgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBUaGUgdW5pcXVlIElEIG9mIHRoZSBuZXdseSBzdGFydGVkIHByb2Nlc3MgaW5zdGFuY2UuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHN0YXJ0KGtleTogc3RyaW5nLCBidXNpbmVzc0tleTogc3RyaW5nID0gJycsIHBhcmFtZXRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEJwbUZhY2FkZS5zdGFydFByb2Nlc3Moa2V5LCBidXNpbmVzc0tleSwgSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBodW1hbi1yZWFkYWJsZSBuYW1lIGZvciBhbiBleGlzdGluZyBwcm9jZXNzIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvY2Vzc0luc3RhbmNlSWQgVGhlIElEIG9mIHRoZSBwcm9jZXNzIGluc3RhbmNlIHRvIHVwZGF0ZS5cblx0ICogQHBhcmFtIG5hbWUgVGhlIG5ldyBuYW1lIGZvciB0aGUgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgc2V0UHJvY2Vzc0luc3RhbmNlTmFtZShwcm9jZXNzSW5zdGFuY2VJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRCcG1GYWNhZGUuc2V0UHJvY2Vzc0luc3RhbmNlTmFtZShwcm9jZXNzSW5zdGFuY2VJZCwgbmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgYnVzaW5lc3Mga2V5IG9mIGFuIGV4aXN0aW5nIHByb2Nlc3MgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9jZXNzSW5zdGFuY2VJZCBUaGUgSUQgb2YgdGhlIHByb2Nlc3MgaW5zdGFuY2UgdG8gdXBkYXRlLlxuXHQgKiBAcGFyYW0gYnVzaW5lc3NLZXkgVGhlIG5ldyBidXNpbmVzcyBrZXkuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHVwZGF0ZUJ1c2luZXNzS2V5KHByb2Nlc3NJbnN0YW5jZUlkOiBzdHJpbmcsIGJ1c2luZXNzS2V5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRCcG1GYWNhZGUudXBkYXRlQnVzaW5lc3NLZXkocHJvY2Vzc0luc3RhbmNlSWQsIGJ1c2luZXNzS2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBidXNpbmVzcyBzdGF0dXMgb2YgYW4gZXhpc3RpbmcgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHByb2Nlc3NJbnN0YW5jZUlkIFRoZSBJRCBvZiB0aGUgcHJvY2VzcyBpbnN0YW5jZSB0byB1cGRhdGUuXG5cdCAqIEBwYXJhbSBidXNpbmVzc1N0YXR1cyBUaGUgbmV3IGJ1c2luZXNzIHN0YXR1cy5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgdXBkYXRlQnVzaW5lc3NTdGF0dXMocHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZywgYnVzaW5lc3NTdGF0dXM6IHN0cmluZyk6IHZvaWQge1xuXHRcdEJwbUZhY2FkZS51cGRhdGVCdXNpbmVzc1N0YXR1cyhwcm9jZXNzSW5zdGFuY2VJZCwgYnVzaW5lc3NTdGF0dXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpYyB2YXJpYWJsZSBmcm9tIGEgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHByb2Nlc3NJbnN0YW5jZUlkIFRoZSBJRCBvZiB0aGUgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gcmV0cmlldmUuXG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIG9yIGBudWxsYCBpZiB0aGUgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QuIFRoZSB0eXBlIGlzIGBhbnlgIGFzIGl0IGRlcGVuZHMgb24gdGhlIHN0b3JlZCB2YWx1ZS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZ2V0VmFyaWFibGUocHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZywgdmFyaWFibGVOYW1lOiBzdHJpbmcpOiBhbnkge1xuXHRcdHJldHVybiBCcG1GYWNhZGUuZ2V0VmFyaWFibGUocHJvY2Vzc0luc3RhbmNlSWQsIHZhcmlhYmxlTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFsbCB2YXJpYWJsZXMgYXNzb2NpYXRlZCB3aXRoIGEgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHByb2Nlc3NJbnN0YW5jZUlkIFRoZSBJRCBvZiB0aGUgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHZhcmlhYmxlcyBmb3IgdGhlIHByb2Nlc3MgaW5zdGFuY2UsIHdoZXJlIGtleXMgYXJlIHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRoZSB2YXJpYWJsZSB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldFZhcmlhYmxlcyhwcm9jZXNzSW5zdGFuY2VJZDogc3RyaW5nKTogYW55IHtcblx0XHRyZXR1cm4gQnBtRmFjYWRlLmdldFZhcmlhYmxlcyhwcm9jZXNzSW5zdGFuY2VJZCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBvciB1cGRhdGVzIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGluIGEgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHByb2Nlc3NJbnN0YW5jZUlkIFRoZSBJRCBvZiB0aGUgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gc2V0LlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHZhcmlhYmxlLiBUaGUgdHlwZSBpcyBgYW55YCB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgZGF0YSB0eXBlcy5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgc2V0VmFyaWFibGUocHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZywgdmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcblx0XHRCcG1GYWNhZGUuc2V0VmFyaWFibGUocHJvY2Vzc0luc3RhbmNlSWQsIHZhcmlhYmxlTmFtZSwgdmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSB2YXJpYWJsZSBmcm9tIGEgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHByb2Nlc3NJbnN0YW5jZUlkIFRoZSBJRCBvZiB0aGUgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gcmVtb3ZlLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyByZW1vdmVWYXJpYWJsZShwcm9jZXNzSW5zdGFuY2VJZDogc3RyaW5nLCB2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdEJwbUZhY2FkZS5yZW1vdmVWYXJpYWJsZShwcm9jZXNzSW5zdGFuY2VJZCwgdmFyaWFibGVOYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb3JyZWxhdGVzIGEgbWVzc2FnZSBldmVudCB3aXRoIGEgcnVubmluZyBwcm9jZXNzIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvY2Vzc0luc3RhbmNlSWQgVGhlIElEIG9mIHRoZSBwcm9jZXNzIGluc3RhbmNlIHRvIGNvcnJlbGF0ZSB0aGUgbWVzc2FnZSB0by5cblx0ICogQHBhcmFtIG1lc3NhZ2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBtZXNzYWdlIGV2ZW50IGRlZmluZWQgaW4gdGhlIEJQTU4gcHJvY2Vzcy5cblx0ICogQHBhcmFtIHZhcmlhYmxlcyBBIG1hcCBvZiB2YXJpYWJsZXMgKGBNYXA8c3RyaW5nLCBhbnk+YCkgdG8gcGFzcyBhbG9uZyB3aXRoIHRoZSBtZXNzYWdlIGV2ZW50LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBjb3JyZWxhdGVNZXNzYWdlRXZlbnQocHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZywgbWVzc2FnZU5hbWU6IHN0cmluZywgdmFyaWFibGVzOiBNYXA8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG5cdFx0QnBtRmFjYWRlLmNvcnJlbGF0ZU1lc3NhZ2VFdmVudChwcm9jZXNzSW5zdGFuY2VJZCwgbWVzc2FnZU5hbWUsIFZhbHVlcy5zdHJpbmdpZnlWYWx1ZXNNYXAodmFyaWFibGVzKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0IG9iamVjdCwgdHlwaWNhbGx5IHVzZWQgd2l0aGluIGFuIGV4ZWN1dGlvbiBsaXN0ZW5lciBvciBzZXJ2aWNlIHRhc2suXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgbmV3IGluc3RhbmNlIG9mIHRoZSBgRXhlY3V0aW9uQ29udGV4dGAgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSBjdXJyZW50IHByb2Nlc3MgZXhlY3V0aW9uIHBhdGguXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldEV4ZWN1dGlvbkNvbnRleHQoKSB7XG5cdFx0cmV0dXJuIG5ldyBFeGVjdXRpb25Db250ZXh0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBFeGVjdXRpb25Db250ZXh0IG9iamVjdFxuICogKiBQcm92aWRlcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhbmQgY29udHJvbCBvdmVyIHRoZSBjdXJyZW50IHByb2Nlc3MgZXhlY3V0aW9uIHBhdGguXG4gKi9cbmNsYXNzIEV4ZWN1dGlvbkNvbnRleHQge1xuXG5cdHByaXZhdGUgZXhlY3V0aW9uOiBhbnk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5leGVjdXRpb24gPSBfX2NvbnRleHQuZ2V0KCdleGVjdXRpb24nKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbmlxdWUgaWQgb2YgdGhpcyBwYXRoIG9mIGV4ZWN1dGlvbiB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgaGFuZGxlIHRvIHByb3ZpZGUgZXh0ZXJuYWwgc2lnbmFscyBiYWNrIGludG8gdGhlIGVuZ2luZSBhZnRlciB3YWl0IHN0YXRlcy5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHVuaXF1ZSBJRCBvZiB0aGUgY3VycmVudCBleGVjdXRpb24uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIG92ZXJhbGwgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBwcm9jZXNzIGluc3RhbmNlLlxuXHQgKi9cblx0cHVibGljIGdldFByb2Nlc3NJbnN0YW5jZUlkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldFByb2Nlc3NJbnN0YW5jZUlkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlICdyb290JyBwcm9jZXNzIGluc3RhbmNlLiBXaGVuIHVzaW5nIGNhbGwgYWN0aXZpdHkgZm9yIGV4YW1wbGUsIHRoZSBwcm9jZXNzSW5zdGFuY2Ugc2V0IHdpbGwgbm90IGFsd2F5cyBiZSB0aGUgcm9vdC4gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdG9wbW9zdCBwcm9jZXNzIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIHJvb3QgcHJvY2VzcyBpbnN0YW5jZS5cblx0ICovXG5cdHB1YmxpYyBnZXRSb290UHJvY2Vzc0luc3RhbmNlSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uZ2V0Um9vdFByb2Nlc3NJbnN0YW5jZUlkKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjb250YWluIHRoZSBldmVudCBuYW1lIGluIGNhc2UgdGhpcyBleGVjdXRpb24gaXMgcGFzc2VkIGluIGZvciBhbiB7QGxpbmsgRXhlY3V0aW9uTGlzdGVuZXJ9LlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBldmVudCBuYW1lLCBvciBgbnVsbGAvZW1wdHkgc3RyaW5nIGlmIG5vdCBleGVjdXRpbmcgYW4gZXZlbnQgbGlzdGVuZXIuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0RXZlbnROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldEV2ZW50TmFtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGN1cnJlbnQgZXZlbnQgKHR5cGljYWxseSB3aGVuIGV4ZWN1dGlvbiBhbiB7QGxpbmsgRXhlY3V0aW9uTGlzdGVuZXJ9KS5cblx0ICpcblx0ICogQHBhcmFtIGV2ZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG5cdCAqL1xuXHRwdWJsaWMgc2V0RXZlbnROYW1lKGV2ZW50TmFtZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5leGVjdXRpb24uc2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1c2luZXNzIGtleSBmb3IgdGhlIHByb2Nlc3MgaW5zdGFuY2UgdGhpcyBleGVjdXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoLlxuXHQgKiBAcmV0dXJucyBUaGUgYnVzaW5lc3Mga2V5LlxuXHQgKi9cblx0cHVibGljIGdldFByb2Nlc3NJbnN0YW5jZUJ1c2luZXNzS2V5KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldFByb2Nlc3NJbnN0YW5jZUJ1c2luZXNzS2V5KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1c2luZXNzIHN0YXR1cyBmb3IgdGhlIHByb2Nlc3MgaW5zdGFuY2UgdGhpcyBleGVjdXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoLlxuXHQgKiBAcmV0dXJucyBUaGUgYnVzaW5lc3Mgc3RhdHVzLlxuXHQgKi9cblx0cHVibGljIGdldFByb2Nlc3NJbnN0YW5jZUJ1c2luZXNzU3RhdHVzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldFByb2Nlc3NJbnN0YW5jZUJ1c2luZXNzU3RhdHVzKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHByb2Nlc3MgZGVmaW5pdGlvbiBrZXkgZm9yIHRoZSBwcm9jZXNzIGluc3RhbmNlIHRoaXMgZXhlY3V0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aC5cblx0ICogQHJldHVybnMgVGhlIHByb2Nlc3MgZGVmaW5pdGlvbiBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRQcm9jZXNzRGVmaW5pdGlvbklkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldFByb2Nlc3NEZWZpbml0aW9uSWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB0aGlzIGV4ZWN1dGlvbiBydW5zIGluIHRoZSBjb250ZXh0IG9mIGEgY2FzZSBhbmQgc3RhZ2UsIHRoaXMgbWV0aG9kIHJldHVybnMgaXQncyBjbG9zZXN0IHBhcmVudCBzdGFnZSBpbnN0YW5jZSBpZCAodGhlIHN0YWdlIHBsYW4gaXRlbSBpbnN0YW5jZSBpZCB0byBiZVxuXHQgKiBwcmVjaXNlKS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YWdlIGluc3RhbmNlIGlkIHRoaXMgZXhlY3V0aW9uIGJlbG9uZ3MgdG8gb3IgYG51bGxgLCBpZiB0aGlzIGV4ZWN1dGlvbiBpcyBub3QgcGFydCBvZiBhIGNhc2UgYXQgYWxsIG9yIGlzIG5vdCBhIGNoaWxkIGVsZW1lbnQgb2YgYSBzdGFnZS5cblx0ICovXG5cdHB1YmxpYyBnZXRQcm9wYWdhdGVkU3RhZ2VJbnN0YW5jZUlkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldFByb3BhZ2F0ZWRTdGFnZUluc3RhbmNlSWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpZCBvZiB0aGUgcGFyZW50IG9mIHRoaXMgZXhlY3V0aW9uLiBJZiBudWxsLCB0aGUgZXhlY3V0aW9uIHJlcHJlc2VudHMgYSBwcm9jZXNzLWluc3RhbmNlLlxuXHQgKiBAcmV0dXJucyBUaGUgcGFyZW50IGV4ZWN1dGlvbiBJRCwgb3IgYG51bGxgLlxuXHQgKi9cblx0cHVibGljIGdldFBhcmVudElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldFBhcmVudElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaWQgb2YgdGhlIGNhbGxpbmcgZXhlY3V0aW9uLiBJZiBub3QgbnVsbCwgdGhlIGV4ZWN1dGlvbiBpcyBwYXJ0IG9mIGEgc3VicHJvY2Vzcy5cblx0ICogQHJldHVybnMgVGhlIHN1cGVyIGV4ZWN1dGlvbiBJRCwgb3IgYG51bGxgLlxuXHQgKi9cblx0cHVibGljIGdldFN1cGVyRXhlY3V0aW9uSWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uZ2V0U3VwZXJFeGVjdXRpb25JZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGlkIG9mIHRoZSBjdXJyZW50IGFjdGl2aXR5LlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBhY3Rpdml0eSBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRDdXJyZW50QWN0aXZpdHlJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGlvbi5nZXRDdXJyZW50QWN0aXZpdHlJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRlbmFudCBpZCwgaWYgYW55IGlzIHNldCBiZWZvcmUgb24gdGhlIHByb2Nlc3MgZGVmaW5pdGlvbiBvciBwcm9jZXNzIGluc3RhbmNlLlxuXHQgKiBAcmV0dXJucyBUaGUgdGVuYW50IElELCBvciBgbnVsbGAvZW1wdHkgc3RyaW5nLlxuXHQgKi9cblx0cHVibGljIGdldFRlbmFudElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldFRlbmFudElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJQTU4gZWxlbWVudCB3aGVyZSB0aGUgZXhlY3V0aW9uIGN1cnJlbnRseSBpcyBhdC5cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZmxvdyBlbGVtZW50IG9iamVjdCAodHlwZSBpcyBKYXZhIG9iamVjdCkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q3VycmVudEZsb3dFbGVtZW50KCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldEN1cnJlbnRGbG93RWxlbWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZSB0aGUgY3VycmVudCBCUE1OIGVsZW1lbnQgdGhlIGV4ZWN1dGlvbiBpcyBhdC5cblx0ICogQHBhcmFtIGZsb3dFbGVtZW50IFRoZSBuZXcgZmxvdyBlbGVtZW50IG9iamVjdCAoSmF2YSB0eXBlKS5cblx0ICovXG5cdHB1YmxpYyBzZXRDdXJyZW50Rmxvd0VsZW1lbnQoZmxvd0VsZW1lbnQ6IGFueSk6IHZvaWQge1xuXHRcdHRoaXMuZXhlY3V0aW9uLnNldEN1cnJlbnRGbG93RWxlbWVudChmbG93RWxlbWVudCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUge0BsaW5rIEZsb3dhYmxlTGlzdGVuZXJ9IGluc3RhbmNlIG1hdGNoaW5nIGFuIHtAbGluayBFeGVjdXRpb25MaXN0ZW5lcn0gaWYgY3VycmVudGx5IGFuIGV4ZWN1dGlvbiBsaXN0ZW5lciBpcyBiZWluZyBleGVjdXRpb24uIFJldHVybnMgbnVsbCBvdGhlcndpc2UuXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IEZsb3dhYmxlIExpc3RlbmVyIG9iamVjdCAoSmF2YSB0eXBlKSwgb3IgYG51bGxgLlxuXHQgKi9cblx0cHVibGljIGdldEN1cnJlbnRGbG93YWJsZUxpc3RlbmVyKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldEN1cnJlbnRGbG93YWJsZUxpc3RlbmVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gYW4ge0BsaW5rIEV4ZWN1dGlvbkxpc3RlbmVyfSBpcyBiZWluZyBleGVjdXRlZC5cblx0ICogQHBhcmFtIGN1cnJlbnRMaXN0ZW5lciBUaGUgY3VycmVudCBsaXN0ZW5lciBvYmplY3QgKEphdmEgdHlwZSkuXG5cdCAqL1xuXHRwdWJsaWMgc2V0Q3VycmVudEZsb3dhYmxlTGlzdGVuZXIoY3VycmVudExpc3RlbmVyOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLmV4ZWN1dGlvbi5zZXRDdXJyZW50Rmxvd2FibGVMaXN0ZW5lcihjdXJyZW50TGlzdGVuZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhIHNuYXBzaG90IHJlYWQgb25seSBkZWxlZ2F0ZSBleGVjdXRpb24gb2YgdGhpcyBkZWxlZ2F0ZSBleGVjdXRpb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIFJlYWRPbmx5RGVsZWdhdGVFeGVjdXRpb259IG9iamVjdCAoSmF2YSB0eXBlKS5cblx0ICovXG5cdHB1YmxpYyBzbmFwc2hvdFJlYWRPbmx5KCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLnNuYXBzaG90UmVhZE9ubHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBwYXJlbnQgb2YgdGhpcyBleGVjdXRpb24sIG9yIG51bGwgaWYgdGhlcmUgbm8gcGFyZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgcGFyZW50IGV4ZWN1dGlvbiBvYmplY3QgKEphdmEgdHlwZSksIG9yIGBudWxsYC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXJlbnQoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uZ2V0UGFyZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyB0aGUgbGlzdCBvZiBleGVjdXRpb24gb2Ygd2hpY2ggdGhpcyBleGVjdXRpb24gdGhlIHBhcmVudCBvZi5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgY2hpbGQgZXhlY3V0aW9uIG9iamVjdHMgKEphdmEgdHlwZSkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0RXhlY3V0aW9ucygpOiBhbnlbXSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldEV4ZWN1dGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBtYWtlcyB0aGlzIGV4ZWN1dGlvbiBhY3RpdmUgb3IgaW5hY3RpdmUuXG5cdCAqIEBwYXJhbSBpc0FjdGl2ZSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBleGVjdXRpb24gc2hvdWxkIGJlIGFjdGl2ZS5cblx0ICovXG5cdHB1YmxpYyBzZXRBY3RpdmUoaXNBY3RpdmU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLmV4ZWN1dGlvbi5zZXRBY3RpdmUoaXNBY3RpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgd2hldGhlciB0aGlzIGV4ZWN1dGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYWN0aXZlLCBgZmFsc2VgIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uaXNBY3RpdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHdoZXRoZXIgdGhpcyBleGVjdXRpb24gaGFzIGVuZGVkIG9yIG5vdC5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIGVuZGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc0VuZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGlvbi5pc0VuZGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogY2hhbmdlcyB0aGUgY29uY3VycmVudCBpbmRpY2F0b3Igb24gdGhpcyBleGVjdXRpb24uXG5cdCAqIEBwYXJhbSBpc0NvbmN1cnJlbnQgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZXhlY3V0aW9uIHNob3VsZCBiZSBjb25jdXJyZW50LlxuXHQgKi9cblx0cHVibGljIHNldENvbmN1cnJlbnQoaXNDb25jdXJyZW50OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5leGVjdXRpb24uc2V0Q29uY3VycmVudChpc0NvbmN1cnJlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgd2hldGhlciB0aGlzIGV4ZWN1dGlvbiBpcyBjb25jdXJyZW50IG9yIG5vdC5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIGNvbmN1cnJlbnQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzQ29uY3VycmVudCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uaXNDb25jdXJyZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyB3aGV0aGVyIHRoaXMgZXhlY3V0aW9uIGlzIGEgcHJvY2VzcyBpbnN0YW5jZSBvciBub3QuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCdzIGEgcHJvY2VzcyBpbnN0YW5jZSwgYGZhbHNlYCBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaXNQcm9jZXNzSW5zdGFuY2VUeXBlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGlvbi5pc1Byb2Nlc3NJbnN0YW5jZVR5cGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbmFjdGl2YXRlcyB0aGlzIGV4ZWN1dGlvbi4gVGhpcyBpcyB1c2VmdWwgZm9yIGV4YW1wbGUgaW4gYSBqb2luOiB0aGUgZXhlY3V0aW9uIHN0aWxsIGV4aXN0cywgYnV0IGl0IGlzIG5vdCBsb25nZXIgYWN0aXZlLlxuXHQgKi9cblx0cHVibGljIGluYWN0aXZhdGUoKTogdm9pZCB7XG5cdFx0dGhpcy5leGVjdXRpb24uaW5hY3RpdmF0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgd2hldGhlciB0aGlzIGV4ZWN1dGlvbiBpcyBhIHNjb3BlLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBzY29wZSwgYGZhbHNlYCBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaXNTY29wZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uaXNTY29wZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZXMgd2hldGhlciB0aGlzIGV4ZWN1dGlvbiBpcyBhIHNjb3BlIG9yIG5vdC5cblx0ICogQHBhcmFtIGlzU2NvcGUgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZXhlY3V0aW9uIHNob3VsZCBiZSBhIHNjb3BlLlxuXHQgKi9cblx0cHVibGljIHNldFNjb3BlKGlzU2NvcGU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLmV4ZWN1dGlvbi5zZXRTY29wZShpc1Njb3BlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBleGVjdXRpb24gaXMgdGhlIHJvb3Qgb2YgYSBtdWx0aSBpbnN0YW5jZSBleGVjdXRpb24uXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCdzIGEgbXVsdGkgaW5zdGFuY2Ugcm9vdCwgYGZhbHNlYCBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaXNNdWx0aUluc3RhbmNlUm9vdCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uaXNNdWx0aUluc3RhbmNlUm9vdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZXMgd2hldGhlciB0aGlzIGV4ZWN1dGlvbiBpcyBhIG11bHRpIGluc3RhbmNlIHJvb3Qgb3Igbm90LlxuXHQgKiBAcGFyYW0gaXNNdWx0aUluc3RhbmNlUm9vdCBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBleGVjdXRpb24gaXMgdGhlIHJvb3Qgb2YgYSBtdWx0aS1pbnN0YW5jZSBleGVjdXRpb24uXG5cdCAqL1xuXHRwdWJsaWMgc2V0TXVsdGlJbnN0YW5jZVJvb3QoaXNNdWx0aUluc3RhbmNlUm9vdDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuZXhlY3V0aW9uLnNldE11bHRpSW5zdGFuY2VSb290KGlzTXVsdGlJbnN0YW5jZVJvb3QpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYWxsIHZhcmlhYmxlcy4gVGhpcyB3aWxsIGluY2x1ZGUgYWxsIHZhcmlhYmxlcyBvZiBwYXJlbnQgc2NvcGVzIHRvby5cblx0ICogQHJldHVybnMgQSBNYXAgb2YgdmFyaWFibGUgbmFtZXMgKGBzdHJpbmdgKSB0byB2YXJpYWJsZSB2YWx1ZXMgKGBhbnlgKS5cblx0ICovXG5cdHB1YmxpYyBnZXRWYXJpYWJsZXMoKTogTWFwPHN0cmluZywgYW55PiB7XG5cdFx0Y29uc3QgdmFyaWFibGVzID0gdGhpcy5leGVjdXRpb24uZ2V0VmFyaWFibGVzKCk7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdmFyaWFibGVzKSB7XG5cdFx0XHR2YXJpYWJsZXMuc2V0KGtleSwgVmFsdWVzLnBhcnNlVmFsdWUodmFsdWUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhcmlhYmxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFsbCB2YXJpYWJsZXMsIGFzIGluc3RhbmNlcyBvZiB0aGUge0BsaW5rIFZhcmlhYmxlSW5zdGFuY2V9IGludGVyZmFjZSwgd2hpY2ggZ2l2ZXMgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIG9ubHkgdGhlIHZhbHVlICh0eXBlLCBleGVjdXRpb24gaWQsIGV0Yy4pXG5cdCAqIEByZXR1cm5zIEEgTWFwIG9mIHZhcmlhYmxlIG5hbWVzIChgc3RyaW5nYCkgdG8ge0BsaW5rIFZhcmlhYmxlSW5zdGFuY2V9IG9iamVjdHMgKEphdmEgdHlwZSkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VmFyaWFibGVJbnN0YW5jZXMoKTogTWFwPHN0cmluZywgYW55PiB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldFZhcmlhYmxlSW5zdGFuY2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdmFyaWFibGUgbG9jYWwgdG8gdGhpcyBzY29wZSBvbmx5LiBTbywgaW4gY29udHJhcnkgdG8ge0BsaW5rICNnZXRWYXJpYWJsZXMoKX0sIHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgcGFyZW50IHNjb3BlIHdvbid0IGJlIHJldHVybmVkLlxuXHQgKiBAcmV0dXJucyBBIE1hcCBvZiB2YXJpYWJsZSBuYW1lcyAoYHN0cmluZ2ApIHRvIGxvY2FsIHZhcmlhYmxlIHZhbHVlcyAoYGFueWApLlxuXHQgKi9cblx0cHVibGljIGdldFZhcmlhYmxlc0xvY2FsKCk6IE1hcDxzdHJpbmcsIGFueT4ge1xuXHRcdGNvbnN0IHZhcmlhYmxlc0xvY2FsID0gdGhpcy5leGVjdXRpb24uZ2V0VmFyaWFibGVzTG9jYWwoKTtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB2YXJpYWJsZXNMb2NhbCkge1xuXHRcdFx0dmFyaWFibGVzTG9jYWwuc2V0KGtleSwgVmFsdWVzLnBhcnNlVmFsdWUodmFsdWUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhcmlhYmxlc0xvY2FsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHZhcmlhYmxlcyBsb2NhbCB0byB0aGlzIHNjb3BlIGFzIGluc3RhbmNlcyBvZiB0aGUge0BsaW5rIFZhcmlhYmxlSW5zdGFuY2V9IGludGVyZmFjZSwgd2hpY2ggcHJvdmlkZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFyaWFibGUuXG5cdCAqIEByZXR1cm5zIEEgTWFwIG9mIHZhcmlhYmxlIG5hbWVzIChgc3RyaW5nYCkgdG8gbG9jYWwge0BsaW5rIFZhcmlhYmxlSW5zdGFuY2V9IG9iamVjdHMgKEphdmEgdHlwZSkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VmFyaWFibGVJbnN0YW5jZXNMb2NhbCgpOiBNYXA8c3RyaW5nLCBhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uZ2V0VmFyaWFibGVJbnN0YW5jZXNMb2NhbCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHZhcmlhYmxlIHZhbHVlIGZvciBvbmUgc3BlY2lmaWMgdmFyaWFibGUuIFdpbGwgbG9vayBpbiBwYXJlbnQgc2NvcGVzIHdoZW4gdGhlIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgcGFydGljdWxhciBzY29wZS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gcmV0cmlldmUuXG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgKGBhbnlgKSwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdHB1YmxpYyBnZXRWYXJpYWJsZSh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IGFueSB7XG5cdFx0cmV0dXJuIFZhbHVlcy5wYXJzZVZhbHVlKHRoaXMuZXhlY3V0aW9uLmdldFZhcmlhYmxlKHZhcmlhYmxlTmFtZSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNpbWlsYXIgdG8ge0BsaW5rICNnZXRWYXJpYWJsZShTdHJpbmcpfSwgYnV0IHJldHVybnMgYSB7QGxpbmsgVmFyaWFibGVJbnN0YW5jZX0gaW5zdGFuY2UsIHdoaWNoIGNvbnRhaW5zIG1vcmUgaW5mb3JtYXRpb24gdGhhbiBqdXN0IHRoZSB2YWx1ZS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gcmV0cmlldmUuXG5cdCAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVmFyaWFibGVJbnN0YW5jZX0gb2JqZWN0IChKYXZhIHR5cGUpLCBvciBgbnVsbGAuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VmFyaWFibGVJbnN0YW5jZSh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmdldFZhcmlhYmxlSW5zdGFuY2UodmFyaWFibGVOYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmljIHZhcmlhYmxlIGFuZCBvbmx5IGNoZWNrcyB0aGlzIHNjb3BlIGFuZCBub3QgYW55IHBhcmVudCBzY29wZS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9jYWwgdmFyaWFibGUgdG8gcmV0cmlldmUuXG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgbG9jYWwgdmFyaWFibGUgKGBhbnlgKSwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZCBsb2NhbGx5LlxuXHQgKi9cblx0cHVibGljIGdldFZhcmlhYmxlTG9jYWwodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBhbnkge1xuXHRcdHJldHVybiBWYWx1ZXMucGFyc2VWYWx1ZSh0aGlzLmV4ZWN1dGlvbi5nZXRWYXJpYWJsZUxvY2FsKHZhcmlhYmxlTmFtZSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNpbWlsYXIgdG8ge0BsaW5rICNnZXRWYXJpYWJsZUxvY2FsKFN0cmluZyl9LCBidXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgVmFyaWFibGVJbnN0YW5jZX0sIHdoaWNoIGhhcyBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYmV5b25kIHRoZSB2YWx1ZS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9jYWwgdmFyaWFibGUgdG8gcmV0cmlldmUuXG5cdCAqIEByZXR1cm5zIFRoZSBsb2NhbCB7QGxpbmsgVmFyaWFibGVJbnN0YW5jZX0gb2JqZWN0IChKYXZhIHR5cGUpLCBvciBgbnVsbGAuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VmFyaWFibGVJbnN0YW5jZUxvY2FsKHZhcmlhYmxlTmFtZTogc3RyaW5nKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uZ2V0VmFyaWFibGVJbnN0YW5jZUxvY2FsKHZhcmlhYmxlTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbGwgdGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgZm9yIHRoaXMgc2NvcGUgYW5kIGFsbCBwYXJlbnQgc2NvcGVzLlxuXHQgKiBAcmV0dXJucyBBIFNldCBvZiBhbGwgdmFyaWFibGUgbmFtZXMgKGBzdHJpbmdgKS5cblx0ICovXG5cdHB1YmxpYyBnZXRWYXJpYWJsZU5hbWVzKCk6IFNldDxzdHJpbmc+IHtcblx0XHRjb25zdCB2YXJpYWJsZU5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdFx0Zm9yIChjb25zdCBuZXh0IG9mIHRoaXMuZXhlY3V0aW9uLmdldFZhcmlhYmxlTmFtZXMoKS50b0FycmF5KCkpIHtcblx0XHRcdHZhcmlhYmxlTmFtZXMuYWRkKG5leHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFyaWFibGVOYW1lcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFsbCB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlcyBmb3IgdGhpcyBzY29wZSAobm8gcGFyZW50IHNjb3BlcykuXG5cdCAqIEByZXR1cm5zIEEgU2V0IG9mIGxvY2FsIHZhcmlhYmxlIG5hbWVzIChgc3RyaW5nYCkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VmFyaWFibGVOYW1lc0xvY2FsKCk6IFNldDxzdHJpbmc+IHtcblx0XHRjb25zdCB2YXJpYWJsZU5hbWVzTG9jYWwgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0XHRmb3IgKGNvbnN0IG5leHQgb2YgdGhpcy5leGVjdXRpb24uZ2V0VmFyaWFibGVOYW1lc0xvY2FsKCkudG9BcnJheSgpKSB7XG5cdFx0XHR2YXJpYWJsZU5hbWVzTG9jYWwuYWRkKG5leHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFyaWFibGVOYW1lc0xvY2FsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhcmlhYmxlIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgdG8gdGhlIHByb3ZpZGVkIHZhbHVlLiBJdCBjaGVja3MgcGFyZW50IHNjb3BlcyBmb3IgYW4gZXhpc3RpbmcgdmFyaWFibGUgYmVmb3JlIHNldHRpbmcgb24gdGhlIGN1cnJlbnQgc2NvcGUuXG5cdCAqIEBwYXJhbSB2YXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIHNldC5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgdG8gYmUgc2V0IChgYW55YCkuXG5cdCAqL1xuXHRwdWJsaWMgc2V0VmFyaWFibGUodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLmV4ZWN1dGlvbi5zZXRWYXJpYWJsZSh2YXJpYWJsZU5hbWUsIFZhbHVlcy5zdHJpbmdpZnlWYWx1ZSh2YWx1ZSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNpbWlsYXIgdG8ge0BsaW5rICNzZXRWYXJpYWJsZShTdHJpbmcsIE9iamVjdCl9LCBidXQgdGhlIHZhcmlhYmxlIGlzIHNldCB0byB0aGlzIHNjb3BlIHNwZWNpZmljYWxseSAobG9jYWwgdmFyaWFibGUpLlxuXHQgKiBAcGFyYW0gdmFyaWFibGVOYW1lIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBiZSBzZXQgbG9jYWxseS5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgdG8gYmUgc2V0IChgYW55YCkuXG5cdCAqIEByZXR1cm5zIFRoZSBvbGQgdmFsdWUgb2YgdGhlIGxvY2FsIHZhcmlhYmxlIChKYXZhIHR5cGUpLCBvciBgbnVsbGAuXG5cdCAqL1xuXHRwdWJsaWMgc2V0VmFyaWFibGVMb2NhbCh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLnNldFZhcmlhYmxlTG9jYWwodmFyaWFibGVOYW1lLCBWYWx1ZXMuc3RyaW5naWZ5VmFsdWUodmFsdWUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBwcm92aWRlZCB2YXJpYWJsZXMgdG8gdGhlIHZhcmlhYmxlIHNjb3BlLCB1c2luZyB0aGUgZGVmYXVsdCBzY29waW5nIGFsZ29yaXRobS5cblx0ICogQHBhcmFtIHZhcmlhYmxlcyBBIG1hcCBvZiBrZXlzIChgc3RyaW5nYCkgYW5kIHZhbHVlcyAoYGFueWApIGZvciB0aGUgdmFyaWFibGVzIHRvIGJlIHNldC5cblx0ICovXG5cdHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBNYXA8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdmFyaWFibGVzKSB7XG5cdFx0XHR2YXJpYWJsZXMuc2V0KGtleSwgVmFsdWVzLnN0cmluZ2lmeVZhbHVlKHZhbHVlKSk7XG5cdFx0fVxuXHRcdHRoaXMuZXhlY3V0aW9uLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNpbWlsYXIgdG8ge0BsaW5rICNzZXRWYXJpYWJsZXMoTWFwKX0sIGJ1dCB0aGUgdmFyaWFibGVzIGFyZSBzZXQgb24gdGhpcyBzY29wZSBzcGVjaWZpY2FsbHkgKGxvY2FsIHZhcmlhYmxlcykuXG5cdCAqIEBwYXJhbSB2YXJpYWJsZXMgQSBtYXAgb2Yga2V5cyAoYHN0cmluZ2ApIGFuZCB2YWx1ZXMgKGBhbnlgKSBmb3IgdGhlIGxvY2FsIHZhcmlhYmxlcyB0byBiZSBzZXQuXG5cdCAqL1xuXHRwdWJsaWMgc2V0VmFyaWFibGVzTG9jYWwodmFyaWFibGVzOiBNYXA8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdmFyaWFibGVzKSB7XG5cdFx0XHR2YXJpYWJsZXMuc2V0KGtleSwgVmFsdWVzLnN0cmluZ2lmeVZhbHVlKHZhbHVlKSk7XG5cdFx0fVxuXHRcdHRoaXMuZXhlY3V0aW9uLnNldFZhcmlhYmxlc0xvY2FsKHZhcmlhYmxlcyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIHRoaXMgc2NvcGUgb3IgYW55IHBhcmVudCBzY29wZSBoYXMgdmFyaWFibGVzLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdmFyaWFibGVzIGV4aXN0IGluIHNjb3BlIGhpZXJhcmNoeSwgYGZhbHNlYCBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaGFzVmFyaWFibGVzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGlvbi5oYXNWYXJpYWJsZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBzY29wZSBoYXMgdmFyaWFibGVzLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbG9jYWwgdmFyaWFibGVzIGV4aXN0LCBgZmFsc2VgIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBoYXNWYXJpYWJsZXNMb2NhbCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5leGVjdXRpb24uaGFzVmFyaWFibGVzTG9jYWwoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBzY29wZSBvciBhbnkgcGFyZW50IHNjb3BlIGhhcyBhIHNwZWNpZmljIHZhcmlhYmxlLlxuXHQgKiBAcGFyYW0gdmFyaWFibGVOYW1lIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBjaGVjay5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YXJpYWJsZSBpcyBmb3VuZCBpbiB0aGUgc2NvcGUgaGllcmFyY2h5LCBgZmFsc2VgIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBoYXNWYXJpYWJsZSh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGlvbi5oYXNWYXJpYWJsZSh2YXJpYWJsZU5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgd2hldGhlciB0aGlzIHNjb3BlIGhhcyBhIHNwZWNpZmljIHZhcmlhYmxlLlxuXHQgKiBAcGFyYW0gdmFyaWFibGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBsb2NhbCB2YXJpYWJsZSB0byBjaGVjay5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YXJpYWJsZSBpcyBmb3VuZCBsb2NhbGx5LCBgZmFsc2VgIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBoYXNWYXJpYWJsZUxvY2FsKHZhcmlhYmxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0aW9uLmhhc1ZhcmlhYmxlTG9jYWwodmFyaWFibGVOYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSB2YXJpYWJsZSBmcm9tIHRoZSBwcm9jZXNzIGluc3RhbmNlIGFuZCBjcmVhdGVzIGEgbmV3IEhpc3RvcmljVmFyaWFibGVVcGRhdGUuIFNlYXJjaGVzIHVwIHRoZSBzY29wZSBoaWVyYXJjaHkuXG5cdCAqIEBwYXJhbSB2YXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIHJlbW92ZS5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVWYXJpYWJsZSh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZXhlY3V0aW9uLnJlbW92ZVZhcmlhYmxlKHZhcmlhYmxlTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbG9jYWwgdmFyaWFibGUgYW5kIGNyZWF0ZXMgYSBuZXcgSGlzdG9yaWNWYXJpYWJsZVVwZGF0ZS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9jYWwgdmFyaWFibGUgdG8gcmVtb3ZlLlxuXHQgKi9cblx0cHVibGljIHJlbW92ZVZhcmlhYmxlTG9jYWwodmFyaWFibGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLmV4ZWN1dGlvbi5yZW1vdmVWYXJpYWJsZUxvY2FsKHZhcmlhYmxlTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgdmFyaWFibGVzIGFuZCBjcmVhdGVzIGEgbmV3IEhpc3RvcmljVmFyaWFibGVVcGRhdGUgZm9yIGVhY2ggb2YgdGhlbS4gU2VhcmNoZXMgdXAgdGhlIHNjb3BlIGhpZXJhcmNoeS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZXMgQW4gYXJyYXkgb2YgdmFyaWFibGUgbmFtZXMgKGBzdHJpbmdbXWApIHRvIHJlbW92ZS5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVWYXJpYWJsZXModmFyaWFibGVOYW1lczogc3RyaW5nW10pOiB2b2lkIHtcblx0XHR0aGlzLmV4ZWN1dGlvbi5yZW1vdmVWYXJpYWJsZXModmFyaWFibGVOYW1lcyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbG9jYWwgdmFyaWFibGVzIGFuZCBjcmVhdGVzIGEgbmV3IEhpc3RvcmljVmFyaWFibGVVcGRhdGUgZm9yIGVhY2ggb2YgdGhlbS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZXMgQW4gYXJyYXkgb2YgbG9jYWwgdmFyaWFibGUgbmFtZXMgKGBzdHJpbmdbXWApIHRvIHJlbW92ZS5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVWYXJpYWJsZXNMb2NhbCh2YXJpYWJsZU5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdHRoaXMuZXhlY3V0aW9uLnJlbW92ZVZhcmlhYmxlc0xvY2FsKHZhcmlhYmxlTmFtZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSB0cmFuc2llbnQgdmFyaWFibGUgdXNpbmcgdGhlIGRlZmF1bHQgc2NvcGluZyBtZWNoYW5pc20gKHVwIHRoZSBoaWVyYXJjaHkpLiBUcmFuc2llbnQgdmFyaWFibGVzIGhhdmUgbm8gaGlzdG9yeSBhbmQgYXJlIGNsZWFyZWQgYXQgd2FpdCBzdGF0ZXMuXG5cdCAqIEBwYXJhbSB2YXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHRyYW5zaWVudCB2YXJpYWJsZS5cblx0ICogQHBhcmFtIHZhcmlhYmxlVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSB0cmFuc2llbnQgdmFyaWFibGUgKGBhbnlgKS5cblx0ICovXG5cdHB1YmxpYyBzZXRUcmFuc2llbnRWYXJpYWJsZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFyaWFibGVWYWx1ZTogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5leGVjdXRpb24uc2V0VHJhbnNpZW50VmFyaWFibGUodmFyaWFibGVOYW1lLCBWYWx1ZXMuc3RyaW5naWZ5VmFsdWUodmFyaWFibGVWYWx1ZSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgYSBsb2NhbCB0cmFuc2llbnQgdmFyaWFibGUuIFRyYW5zaWVudCB2YXJpYWJsZXMgaGF2ZSBubyBoaXN0b3J5IGFuZCBhcmUgY2xlYXJlZCBhdCB3YWl0IHN0YXRlcy5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbG9jYWwgdHJhbnNpZW50IHZhcmlhYmxlLlxuXHQgKiBAcGFyYW0gdmFyaWFibGVWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGxvY2FsIHRyYW5zaWVudCB2YXJpYWJsZSAoYGFueWApLlxuXHQgKi9cblx0cHVibGljIHNldFRyYW5zaWVudFZhcmlhYmxlTG9jYWwodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhcmlhYmxlVmFsdWU6IGFueSk6IHZvaWQge1xuXHRcdHRoaXMuZXhlY3V0aW9uLnNldFRyYW5zaWVudFZhcmlhYmxlTG9jYWwodmFyaWFibGVOYW1lLCBWYWx1ZXMuc3RyaW5naWZ5VmFsdWUodmFyaWFibGVWYWx1ZSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgbXVsdGlwbGUgdHJhbnNpZW50IHZhcmlhYmxlcyB1c2luZyB0aGUgZGVmYXVsdCBzY29waW5nIG1lY2hhbmlzbSAodXAgdGhlIGhpZXJhcmNoeSkuXG5cdCAqIEBwYXJhbSB0cmFuc2llbnRWYXJpYWJsZXMgQSBtYXAgb2Yga2V5cyAoYHN0cmluZ2ApIGFuZCB2YWx1ZXMgKGBhbnlgKSBmb3IgdGhlIHRyYW5zaWVudCB2YXJpYWJsZXMgdG8gYmUgc2V0LlxuXHQgKi9cblx0cHVibGljIHNldFRyYW5zaWVudFZhcmlhYmxlcyh0cmFuc2llbnRWYXJpYWJsZXM6IE1hcDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0cmFuc2llbnRWYXJpYWJsZXMpIHtcblx0XHRcdHRyYW5zaWVudFZhcmlhYmxlcy5zZXQoa2V5LCBWYWx1ZXMuc3RyaW5naWZ5VmFsdWUodmFsdWUpKTtcblx0XHR9XG5cdFx0dGhpcy5leGVjdXRpb24uc2V0VHJhbnNpZW50VmFyaWFibGVzKHRyYW5zaWVudFZhcmlhYmxlcyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIHRyYW5zaWVudCB2YXJpYWJsZSwgc2VhcmNoaW5nIHVwIHRoZSBwYXJlbnQgc2NvcGVzLlxuXHQgKiBAcGFyYW0gdmFyaWFibGVOYW1lIFRoZSBuYW1lIG9mIHRoZSB0cmFuc2llbnQgdmFyaWFibGUgdG8gcmV0cmlldmUuXG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgdHJhbnNpZW50IHZhcmlhYmxlIChgYW55YCksIG9yIGBudWxsYCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VHJhbnNpZW50VmFyaWFibGUodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBhbnkge1xuXHRcdHJldHVybiBWYWx1ZXMucGFyc2VWYWx1ZSh0aGlzLmV4ZWN1dGlvbi5nZXRUcmFuc2llbnRWYXJpYWJsZSh2YXJpYWJsZU5hbWUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgYWxsIHRyYW5zaWVudCB2YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQgc2NvcGUgaGllcmFyY2h5LlxuXHQgKiBAcmV0dXJucyBBIE1hcCBvZiB0cmFuc2llbnQgdmFyaWFibGUgbmFtZXMgKGBzdHJpbmdgKSB0byB2YWx1ZXMgKGBhbnlgKS5cblx0ICovXG5cdHB1YmxpYyBnZXRUcmFuc2llbnRWYXJpYWJsZXMoKTogTWFwPHN0cmluZywgYW55PiB7XG5cdFx0Y29uc3QgdHJhbnNpZW50VmFyaWFibGVzID0gdGhpcy5leGVjdXRpb24uZ2V0VHJhbnNpZW50VmFyaWFibGVzKCk7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdHJhbnNpZW50VmFyaWFibGVzKSB7XG5cdFx0XHR0cmFuc2llbnRWYXJpYWJsZXMuc2V0KGtleSwgVmFsdWVzLnBhcnNlVmFsdWUodmFsdWUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5zaWVudFZhcmlhYmxlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIG11bHRpcGxlIGxvY2FsIHRyYW5zaWVudCB2YXJpYWJsZXMuXG5cdCAqIEBwYXJhbSB0cmFuc2llbnRWYXJpYWJsZXMgQSBtYXAgb2Yga2V5cyAoYHN0cmluZ2ApIGFuZCB2YWx1ZXMgKGBhbnlgKSBmb3IgdGhlIGxvY2FsIHRyYW5zaWVudCB2YXJpYWJsZXMgdG8gYmUgc2V0LlxuXHQgKi9cblx0cHVibGljIHNldFRyYW5zaWVudFZhcmlhYmxlc0xvY2FsKHRyYW5zaWVudFZhcmlhYmxlczogTWFwPHN0cmluZywgYW55Pik6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRyYW5zaWVudFZhcmlhYmxlcykge1xuXHRcdFx0dHJhbnNpZW50VmFyaWFibGVzLnNldChrZXksIFZhbHVlcy5zdHJpbmdpZnlWYWx1ZSh2YWx1ZSkpO1xuXHRcdH1cblx0XHR0aGlzLmV4ZWN1dGlvbi5zZXRUcmFuc2llbnRWYXJpYWJsZXNMb2NhbCh0cmFuc2llbnRWYXJpYWJsZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBsb2NhbCB0cmFuc2llbnQgdmFyaWFibGUuXG5cdCAqIEBwYXJhbSB2YXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGxvY2FsIHRyYW5zaWVudCB2YXJpYWJsZSB0byByZXRyaWV2ZS5cblx0ICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSBsb2NhbCB0cmFuc2llbnQgdmFyaWFibGUgKGBhbnlgKSwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdHB1YmxpYyBnZXRUcmFuc2llbnRWYXJpYWJsZUxvY2FsKHZhcmlhYmxlTmFtZTogc3RyaW5nKTogYW55IHtcblx0XHRyZXR1cm4gVmFsdWVzLnBhcnNlVmFsdWUodGhpcy5leGVjdXRpb24uZ2V0VHJhbnNpZW50VmFyaWFibGVMb2NhbCh2YXJpYWJsZU5hbWUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgYWxsIGxvY2FsIHRyYW5zaWVudCB2YXJpYWJsZXMuXG5cdCAqIEByZXR1cm5zIEEgTWFwIG9mIGxvY2FsIHRyYW5zaWVudCB2YXJpYWJsZSBuYW1lcyAoYHN0cmluZ2ApIHRvIHZhbHVlcyAoYGFueWApLlxuXHQgKi9cblx0cHVibGljIGdldFRyYW5zaWVudFZhcmlhYmxlc0xvY2FsKCk6IE1hcDxzdHJpbmcsIGFueT4ge1xuXHRcdGNvbnN0IHRyYW5zaWVudFZhcmlhYmxlc0xvY2FsID0gdGhpcy5leGVjdXRpb24uZ2V0VHJhbnNpZW50VmFyaWFibGVzTG9jYWwoKTtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0cmFuc2llbnRWYXJpYWJsZXNMb2NhbCkge1xuXHRcdFx0dHJhbnNpZW50VmFyaWFibGVzTG9jYWwuc2V0KGtleSwgVmFsdWVzLnBhcnNlVmFsdWUodmFsdWUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRyYW5zaWVudFZhcmlhYmxlc0xvY2FsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBzcGVjaWZpYyBsb2NhbCB0cmFuc2llbnQgdmFyaWFibGUuXG5cdCAqIEBwYXJhbSB2YXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGxvY2FsIHRyYW5zaWVudCB2YXJpYWJsZSB0byByZW1vdmUuXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlVHJhbnNpZW50VmFyaWFibGVMb2NhbCh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZXhlY3V0aW9uLnJlbW92ZVRyYW5zaWVudFZhcmlhYmxlTG9jYWwodmFyaWFibGVOYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgc3BlY2lmaWMgdHJhbnNpZW50IHZhcmlhYmxlLCBzZWFyY2hpbmcgdXAgdGhlIHNjb3BlIGhpZXJhcmNoeS5cblx0ICogQHBhcmFtIHZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgdHJhbnNpZW50IHZhcmlhYmxlIHRvIHJlbW92ZS5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVUcmFuc2llbnRWYXJpYWJsZSh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZXhlY3V0aW9uLnJlbW92ZVRyYW5zaWVudFZhcmlhYmxlKHZhcmlhYmxlTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIGFsbCB0cmFuc2llbnQgdmFyaWFibGVzIG9mIHRoaXMgc2NvcGUgYW5kIGl0cyBwYXJlbnQgc2NvcGVzLlxuXHQgKi9cblx0cHVibGljIHJlbW92ZVRyYW5zaWVudFZhcmlhYmxlcygpOiB2b2lkIHtcblx0XHR0aGlzLmV4ZWN1dGlvbi5yZW1vdmVUcmFuc2llbnRWYXJpYWJsZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGFsbCBsb2NhbCB0cmFuc2llbnQgdmFyaWFibGVzLlxuXHQgKi9cblx0cHVibGljIHJlbW92ZVRyYW5zaWVudFZhcmlhYmxlc0xvY2FsKCk6IHZvaWQge1xuXHRcdHRoaXMuZXhlY3V0aW9uLnJlbW92ZVRyYW5zaWVudFZhcmlhYmxlc0xvY2FsKCk7XG5cdH1cblxufVxuXG4vLyBAdHMtaWdub3JlXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRtb2R1bGUuZXhwb3J0cyA9IFByb2Nlc3M7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxvQkFBdUI7QUFFdkIsTUFBTSxZQUFZLEtBQUssS0FBSyxvREFBb0Q7QUFFekUsTUFBTSxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVXBCLE9BQWMsTUFBTSxLQUFhLGNBQXNCLElBQUksYUFBcUMsQ0FBQyxHQUFXO0FBQzNHLFdBQU8sVUFBVSxhQUFhLEtBQUssYUFBYSxLQUFLLFVBQVUsVUFBVSxDQUFDO0FBQUEsRUFDM0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE9BQWMsdUJBQXVCLG1CQUEyQixNQUFvQjtBQUNuRixjQUFVLHVCQUF1QixtQkFBbUIsSUFBSTtBQUFBLEVBQ3pEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxPQUFjLGtCQUFrQixtQkFBMkIsYUFBMkI7QUFDckYsY0FBVSxr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