@cloudbase/js-sdk 3.4.6 → 3.4.7-beta.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 (778) hide show
  1. package/ai/dist/index.esm.js +2 -3
  2. package/ai/dist/index.esm.js.map +1 -0
  3. package/ai/dist/index.js +2 -21
  4. package/ai/dist/index.js.map +1 -0
  5. package/apis/dist/index.esm.js +2 -3
  6. package/apis/dist/index.esm.js.map +1 -0
  7. package/apis/dist/index.js +2 -21
  8. package/apis/dist/index.js.map +1 -0
  9. package/app/dist/index.esm.js +2 -11
  10. package/app/dist/index.esm.js.map +1 -0
  11. package/app/dist/index.js +2 -18
  12. package/app/dist/index.js.map +1 -0
  13. package/auth/dist/index.esm.js +3 -8
  14. package/auth/dist/index.esm.js.LICENSE.txt +12 -0
  15. package/auth/dist/index.esm.js.map +1 -0
  16. package/auth/dist/index.js +3 -13
  17. package/auth/dist/index.js.LICENSE.txt +12 -0
  18. package/auth/dist/index.js.map +1 -0
  19. package/cloudrun/dist/index.esm.js +2 -3
  20. package/cloudrun/dist/index.esm.js.map +1 -0
  21. package/cloudrun/dist/index.js +2 -21
  22. package/cloudrun/dist/index.js.map +1 -0
  23. package/container/dist/index.esm.js +2 -8
  24. package/container/dist/index.esm.js.map +1 -0
  25. package/container/dist/index.js +2 -13
  26. package/container/dist/index.js.map +1 -0
  27. package/database/package.json +34 -4
  28. package/dist/index.cjs.js +3 -38
  29. package/dist/index.cjs.js.LICENSE.txt +12 -0
  30. package/dist/index.cjs.js.map +1 -0
  31. package/dist/index.esm.js +3 -33
  32. package/dist/index.esm.js.LICENSE.txt +12 -0
  33. package/dist/index.esm.js.map +1 -0
  34. package/functions/dist/index.esm.js +2 -8
  35. package/functions/dist/index.esm.js.map +1 -0
  36. package/functions/dist/index.js +2 -13
  37. package/functions/dist/index.js.map +1 -0
  38. package/miniprogram_dist/ai.js +1 -1
  39. package/miniprogram_dist/apis.js +1 -1
  40. package/miniprogram_dist/app.js +1 -1
  41. package/miniprogram_dist/auth.js +1 -1
  42. package/miniprogram_dist/cloudrun.js +1 -1
  43. package/miniprogram_dist/container.js +1 -1
  44. package/miniprogram_dist/database.js +1 -1
  45. package/miniprogram_dist/functions.js +1 -1
  46. package/miniprogram_dist/index.js +1 -1
  47. package/miniprogram_dist/model.js +1 -1
  48. package/miniprogram_dist/mysql.js +1 -1
  49. package/miniprogram_dist/oauth.js +2 -1
  50. package/miniprogram_dist/realtime.js +1 -1
  51. package/miniprogram_dist/storage.js +1 -1
  52. package/model/dist/index.esm.js +2 -3
  53. package/model/dist/index.esm.js.map +1 -0
  54. package/model/dist/index.js +2 -21
  55. package/model/dist/index.js.map +1 -0
  56. package/mysql/dist/index.esm.js +2 -3
  57. package/mysql/dist/index.esm.js.map +1 -0
  58. package/mysql/dist/index.js +2 -21
  59. package/mysql/dist/index.js.map +1 -0
  60. package/oauth/dist/index.esm.js +3 -3
  61. package/oauth/dist/index.esm.js.LICENSE.txt +12 -0
  62. package/oauth/dist/index.esm.js.map +1 -0
  63. package/oauth/dist/index.js +3 -21
  64. package/oauth/dist/index.js.LICENSE.txt +12 -0
  65. package/oauth/dist/index.js.map +1 -0
  66. package/package.json +29 -47
  67. package/realtime/dist/index.esm.js +2 -8
  68. package/realtime/dist/index.esm.js.map +1 -0
  69. package/realtime/dist/index.js +2 -13
  70. package/realtime/dist/index.js.map +1 -0
  71. package/storage/dist/index.esm.js +2 -4
  72. package/storage/dist/index.esm.js.map +1 -0
  73. package/storage/dist/index.js +2 -9
  74. package/storage/dist/index.js.map +1 -0
  75. package/types/analytics.d.ts +51 -0
  76. package/types/container.d.ts +93 -0
  77. package/{node_modules/@cloudbase/types → types}/package.json +1 -1
  78. package/{node_modules/@cloudbase/utilities → utilities}/package.json +2 -2
  79. package/ai/src/index.d.ts +0 -1
  80. package/ai/src/index.ts +0 -1
  81. package/apis/src/index.d.ts +0 -1
  82. package/apis/src/index.ts +0 -1
  83. package/app/src/index.ts +0 -17
  84. package/auth/src/index.d.ts +0 -2
  85. package/auth/src/index.ts +0 -8
  86. package/cloudrun/src/index.d.ts +0 -1
  87. package/cloudrun/src/index.ts +0 -1
  88. package/container/src/index.d.ts +0 -2
  89. package/container/src/index.ts +0 -8
  90. package/database/dist/index.d.ts +0 -3
  91. package/database/dist/index.esm.js +0 -503
  92. package/database/dist/index.js +0 -509
  93. package/database/src/index.d.ts +0 -3
  94. package/database/src/index.ts +0 -486
  95. package/functions/src/index.d.ts +0 -2
  96. package/functions/src/index.ts +0 -8
  97. package/model/src/index.d.ts +0 -1
  98. package/model/src/index.ts +0 -1
  99. package/mysql/src/index.d.ts +0 -1
  100. package/mysql/src/index.ts +0 -1
  101. package/node_modules/@cloudbase/ai/.eslintrc.js +0 -15
  102. package/node_modules/@cloudbase/ai/dist/cjs/AI.d.ts +0 -27
  103. package/node_modules/@cloudbase/ai/dist/cjs/AI.js +0 -224
  104. package/node_modules/@cloudbase/ai/dist/cjs/bot/index.d.ts +0 -41
  105. package/node_modules/@cloudbase/ai/dist/cjs/bot/index.js +0 -376
  106. package/node_modules/@cloudbase/ai/dist/cjs/bot/types.d.ts +0 -144
  107. package/node_modules/@cloudbase/ai/dist/cjs/bot/types.js +0 -3
  108. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/index.d.ts +0 -2
  109. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/index.js +0 -6
  110. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/parse.d.ts +0 -2
  111. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/parse.js +0 -126
  112. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/stream.d.ts +0 -5
  113. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/stream.js +0 -40
  114. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/types.d.ts +0 -16
  115. package/node_modules/@cloudbase/ai/dist/cjs/eventsource_parser/types.js +0 -3
  116. package/node_modules/@cloudbase/ai/dist/cjs/index.d.ts +0 -40
  117. package/node_modules/@cloudbase/ai/dist/cjs/index.js +0 -187
  118. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/index.d.ts +0 -10
  119. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/index.js +0 -130
  120. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/type.d.ts +0 -71
  121. package/node_modules/@cloudbase/ai/dist/cjs/models/Ark/type.js +0 -3
  122. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/index.d.ts +0 -10
  123. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/index.js +0 -130
  124. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/type.d.ts +0 -74
  125. package/node_modules/@cloudbase/ai/dist/cjs/models/DashScope/type.js +0 -3
  126. package/node_modules/@cloudbase/ai/dist/cjs/models/DeepSeek/index.d.ts +0 -10
  127. package/node_modules/@cloudbase/ai/dist/cjs/models/DeepSeek/index.js +0 -126
  128. package/node_modules/@cloudbase/ai/dist/cjs/models/Default/index.d.ts +0 -10
  129. package/node_modules/@cloudbase/ai/dist/cjs/models/Default/index.js +0 -122
  130. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/index.d.ts +0 -10
  131. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/index.js +0 -135
  132. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/type.d.ts +0 -74
  133. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/type.js +0 -3
  134. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/util.d.ts +0 -4
  135. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuan/util.js +0 -56
  136. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanBeta/index.d.ts +0 -10
  137. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanBeta/index.js +0 -127
  138. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanExp/index.d.ts +0 -10
  139. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanExp/index.js +0 -125
  140. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanOpen/index.d.ts +0 -10
  141. package/node_modules/@cloudbase/ai/dist/cjs/models/HunYuanOpen/index.js +0 -127
  142. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/index.d.ts +0 -10
  143. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/index.js +0 -130
  144. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/type.d.ts +0 -85
  145. package/node_modules/@cloudbase/ai/dist/cjs/models/Moonshot/type.js +0 -3
  146. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/index.d.ts +0 -10
  147. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/index.js +0 -133
  148. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/type.d.ts +0 -75
  149. package/node_modules/@cloudbase/ai/dist/cjs/models/Yi/type.js +0 -3
  150. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/index.d.ts +0 -10
  151. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/index.js +0 -139
  152. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/type.d.ts +0 -71
  153. package/node_modules/@cloudbase/ai/dist/cjs/models/ZhiPu/type.js +0 -3
  154. package/node_modules/@cloudbase/ai/dist/cjs/models/image-model.d.ts +0 -18
  155. package/node_modules/@cloudbase/ai/dist/cjs/models/image-model.js +0 -85
  156. package/node_modules/@cloudbase/ai/dist/cjs/models/index.d.ts +0 -26
  157. package/node_modules/@cloudbase/ai/dist/cjs/models/index.js +0 -42
  158. package/node_modules/@cloudbase/ai/dist/cjs/models/model.d.ts +0 -40
  159. package/node_modules/@cloudbase/ai/dist/cjs/models/model.js +0 -481
  160. package/node_modules/@cloudbase/ai/dist/cjs/type.d.ts +0 -190
  161. package/node_modules/@cloudbase/ai/dist/cjs/type.js +0 -10
  162. package/node_modules/@cloudbase/ai/dist/cjs/utils.d.ts +0 -38
  163. package/node_modules/@cloudbase/ai/dist/cjs/utils.js +0 -263
  164. package/node_modules/@cloudbase/ai/dist/esm/AI.d.ts +0 -27
  165. package/node_modules/@cloudbase/ai/dist/esm/AI.js +0 -198
  166. package/node_modules/@cloudbase/ai/dist/esm/bot/index.d.ts +0 -41
  167. package/node_modules/@cloudbase/ai/dist/esm/bot/index.js +0 -373
  168. package/node_modules/@cloudbase/ai/dist/esm/bot/types.d.ts +0 -144
  169. package/node_modules/@cloudbase/ai/dist/esm/bot/types.js +0 -2
  170. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/index.d.ts +0 -2
  171. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/index.js +0 -2
  172. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/parse.d.ts +0 -2
  173. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/parse.js +0 -122
  174. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/stream.d.ts +0 -5
  175. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/stream.js +0 -37
  176. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/types.d.ts +0 -16
  177. package/node_modules/@cloudbase/ai/dist/esm/eventsource_parser/types.js +0 -2
  178. package/node_modules/@cloudbase/ai/dist/esm/index.d.ts +0 -40
  179. package/node_modules/@cloudbase/ai/dist/esm/index.js +0 -152
  180. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/index.d.ts +0 -10
  181. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/index.js +0 -127
  182. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/type.d.ts +0 -71
  183. package/node_modules/@cloudbase/ai/dist/esm/models/Ark/type.js +0 -2
  184. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/index.d.ts +0 -10
  185. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/index.js +0 -127
  186. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/type.d.ts +0 -74
  187. package/node_modules/@cloudbase/ai/dist/esm/models/DashScope/type.js +0 -2
  188. package/node_modules/@cloudbase/ai/dist/esm/models/DeepSeek/index.d.ts +0 -10
  189. package/node_modules/@cloudbase/ai/dist/esm/models/DeepSeek/index.js +0 -123
  190. package/node_modules/@cloudbase/ai/dist/esm/models/Default/index.d.ts +0 -10
  191. package/node_modules/@cloudbase/ai/dist/esm/models/Default/index.js +0 -119
  192. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/index.d.ts +0 -10
  193. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/index.js +0 -132
  194. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/type.d.ts +0 -74
  195. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/type.js +0 -2
  196. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/util.d.ts +0 -4
  197. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuan/util.js +0 -51
  198. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanBeta/index.d.ts +0 -10
  199. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanBeta/index.js +0 -124
  200. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanExp/index.d.ts +0 -10
  201. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanExp/index.js +0 -122
  202. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanOpen/index.d.ts +0 -10
  203. package/node_modules/@cloudbase/ai/dist/esm/models/HunYuanOpen/index.js +0 -124
  204. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/index.d.ts +0 -10
  205. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/index.js +0 -127
  206. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/type.d.ts +0 -85
  207. package/node_modules/@cloudbase/ai/dist/esm/models/Moonshot/type.js +0 -2
  208. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/index.d.ts +0 -10
  209. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/index.js +0 -130
  210. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/type.d.ts +0 -75
  211. package/node_modules/@cloudbase/ai/dist/esm/models/Yi/type.js +0 -2
  212. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/index.d.ts +0 -10
  213. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/index.js +0 -136
  214. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/type.d.ts +0 -71
  215. package/node_modules/@cloudbase/ai/dist/esm/models/ZhiPu/type.js +0 -2
  216. package/node_modules/@cloudbase/ai/dist/esm/models/image-model.d.ts +0 -18
  217. package/node_modules/@cloudbase/ai/dist/esm/models/image-model.js +0 -82
  218. package/node_modules/@cloudbase/ai/dist/esm/models/index.d.ts +0 -26
  219. package/node_modules/@cloudbase/ai/dist/esm/models/index.js +0 -27
  220. package/node_modules/@cloudbase/ai/dist/esm/models/model.d.ts +0 -40
  221. package/node_modules/@cloudbase/ai/dist/esm/models/model.js +0 -478
  222. package/node_modules/@cloudbase/ai/dist/esm/type.d.ts +0 -190
  223. package/node_modules/@cloudbase/ai/dist/esm/type.js +0 -7
  224. package/node_modules/@cloudbase/ai/dist/esm/utils.d.ts +0 -38
  225. package/node_modules/@cloudbase/ai/dist/esm/utils.js +0 -252
  226. package/node_modules/@cloudbase/ai/dist/miniprogram/index.js +0 -2
  227. package/node_modules/@cloudbase/ai/dist/miniprogram/index.js.LICENSE.txt +0 -22
  228. package/node_modules/@cloudbase/ai/package.json +0 -32
  229. package/node_modules/@cloudbase/apis/.eslintrc.js +0 -15
  230. package/node_modules/@cloudbase/apis/dist/cjs/callApis.d.ts +0 -20
  231. package/node_modules/@cloudbase/apis/dist/cjs/callApis.js +0 -154
  232. package/node_modules/@cloudbase/apis/dist/cjs/index.d.ts +0 -5
  233. package/node_modules/@cloudbase/apis/dist/cjs/index.js +0 -53
  234. package/node_modules/@cloudbase/apis/dist/cjs/type.d.ts +0 -14
  235. package/node_modules/@cloudbase/apis/dist/cjs/type.js +0 -3
  236. package/node_modules/@cloudbase/apis/dist/esm/callApis.d.ts +0 -20
  237. package/node_modules/@cloudbase/apis/dist/esm/callApis.js +0 -148
  238. package/node_modules/@cloudbase/apis/dist/esm/index.d.ts +0 -5
  239. package/node_modules/@cloudbase/apis/dist/esm/index.js +0 -35
  240. package/node_modules/@cloudbase/apis/dist/esm/type.d.ts +0 -14
  241. package/node_modules/@cloudbase/apis/dist/esm/type.js +0 -2
  242. package/node_modules/@cloudbase/apis/dist/miniprogram/index.js +0 -1
  243. package/node_modules/@cloudbase/apis/package.json +0 -28
  244. package/node_modules/@cloudbase/app/.eslintrc.js +0 -12
  245. package/node_modules/@cloudbase/app/dist/cjs/constants/common.d.ts +0 -38
  246. package/node_modules/@cloudbase/app/dist/cjs/constants/common.js +0 -103
  247. package/node_modules/@cloudbase/app/dist/cjs/index.d.ts +0 -65
  248. package/node_modules/@cloudbase/app/dist/cjs/index.js +0 -340
  249. package/node_modules/@cloudbase/app/dist/cjs/index.node.d.ts +0 -6
  250. package/node_modules/@cloudbase/app/dist/cjs/index.node.js +0 -27
  251. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/constants.d.ts +0 -33
  252. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/constants.js +0 -38
  253. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/context.d.ts +0 -17
  254. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/context.js +0 -189
  255. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/index.d.ts +0 -25
  256. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/index.js +0 -150
  257. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/metadata.d.ts +0 -14
  258. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/metadata.js +0 -130
  259. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/request.d.ts +0 -41
  260. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/request.js +0 -521
  261. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/tool.d.ts +0 -2
  262. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/tool.js +0 -354
  263. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/types.d.ts +0 -102
  264. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/types.js +0 -3
  265. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/utils.d.ts +0 -37
  266. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/utils.js +0 -286
  267. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/wx.d.ts +0 -39
  268. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/wx.js +0 -272
  269. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter.d.ts +0 -3
  270. package/node_modules/@cloudbase/app/dist/cjs/libs/adapter.js +0 -163
  271. package/node_modules/@cloudbase/app/dist/cjs/libs/cache.d.ts +0 -6
  272. package/node_modules/@cloudbase/app/dist/cjs/libs/cache.js +0 -38
  273. package/node_modules/@cloudbase/app/dist/cjs/libs/component.d.ts +0 -3
  274. package/node_modules/@cloudbase/app/dist/cjs/libs/component.js +0 -126
  275. package/node_modules/@cloudbase/app/dist/cjs/libs/lang.d.ts +0 -23
  276. package/node_modules/@cloudbase/app/dist/cjs/libs/lang.js +0 -59
  277. package/node_modules/@cloudbase/app/dist/cjs/libs/request.d.ts +0 -62
  278. package/node_modules/@cloudbase/app/dist/cjs/libs/request.js +0 -480
  279. package/node_modules/@cloudbase/app/dist/esm/constants/common.d.ts +0 -38
  280. package/node_modules/@cloudbase/app/dist/esm/constants/common.js +0 -91
  281. package/node_modules/@cloudbase/app/dist/esm/index.d.ts +0 -65
  282. package/node_modules/@cloudbase/app/dist/esm/index.js +0 -335
  283. package/node_modules/@cloudbase/app/dist/esm/index.node.d.ts +0 -6
  284. package/node_modules/@cloudbase/app/dist/esm/index.node.js +0 -19
  285. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/constants.d.ts +0 -33
  286. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/constants.js +0 -35
  287. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/context.d.ts +0 -17
  288. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/context.js +0 -181
  289. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/index.d.ts +0 -25
  290. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/index.js +0 -120
  291. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/metadata.d.ts +0 -14
  292. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/metadata.js +0 -123
  293. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/request.d.ts +0 -41
  294. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/request.js +0 -495
  295. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/tool.d.ts +0 -2
  296. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/tool.js +0 -350
  297. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/types.d.ts +0 -102
  298. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/types.js +0 -2
  299. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/utils.d.ts +0 -37
  300. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/utils.js +0 -264
  301. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/wx.d.ts +0 -39
  302. package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/wx.js +0 -237
  303. package/node_modules/@cloudbase/app/dist/esm/libs/adapter.d.ts +0 -3
  304. package/node_modules/@cloudbase/app/dist/esm/libs/adapter.js +0 -136
  305. package/node_modules/@cloudbase/app/dist/esm/libs/cache.d.ts +0 -6
  306. package/node_modules/@cloudbase/app/dist/esm/libs/cache.js +0 -32
  307. package/node_modules/@cloudbase/app/dist/esm/libs/component.d.ts +0 -3
  308. package/node_modules/@cloudbase/app/dist/esm/libs/component.js +0 -121
  309. package/node_modules/@cloudbase/app/dist/esm/libs/lang.d.ts +0 -23
  310. package/node_modules/@cloudbase/app/dist/esm/libs/lang.js +0 -54
  311. package/node_modules/@cloudbase/app/dist/esm/libs/request.d.ts +0 -62
  312. package/node_modules/@cloudbase/app/dist/esm/libs/request.js +0 -475
  313. package/node_modules/@cloudbase/app/dist/miniprogram/index.js +0 -2
  314. package/node_modules/@cloudbase/app/dist/miniprogram/index.js.LICENSE.txt +0 -7
  315. package/node_modules/@cloudbase/app/package.json +0 -59
  316. package/node_modules/@cloudbase/auth/.eslintrc.js +0 -15
  317. package/node_modules/@cloudbase/auth/dist/cjs/adapter.d.ts +0 -2
  318. package/node_modules/@cloudbase/auth/dist/cjs/adapter.js +0 -272
  319. package/node_modules/@cloudbase/auth/dist/cjs/index.d.ts +0 -283
  320. package/node_modules/@cloudbase/auth/dist/cjs/index.js +0 -3018
  321. package/node_modules/@cloudbase/auth/dist/cjs/type.d.ts +0 -258
  322. package/node_modules/@cloudbase/auth/dist/cjs/type.js +0 -6
  323. package/node_modules/@cloudbase/auth/dist/cjs/utilities.d.ts +0 -7
  324. package/node_modules/@cloudbase/auth/dist/cjs/utilities.js +0 -23
  325. package/node_modules/@cloudbase/auth/dist/cjs/utils.d.ts +0 -5
  326. package/node_modules/@cloudbase/auth/dist/cjs/utils.js +0 -60
  327. package/node_modules/@cloudbase/auth/dist/cjs/v1-compat.d.ts +0 -77
  328. package/node_modules/@cloudbase/auth/dist/cjs/v1-compat.js +0 -423
  329. package/node_modules/@cloudbase/auth/dist/esm/adapter.d.ts +0 -2
  330. package/node_modules/@cloudbase/auth/dist/esm/adapter.js +0 -268
  331. package/node_modules/@cloudbase/auth/dist/esm/index.d.ts +0 -283
  332. package/node_modules/@cloudbase/auth/dist/esm/index.js +0 -3008
  333. package/node_modules/@cloudbase/auth/dist/esm/type.d.ts +0 -258
  334. package/node_modules/@cloudbase/auth/dist/esm/type.js +0 -3
  335. package/node_modules/@cloudbase/auth/dist/esm/utilities.d.ts +0 -7
  336. package/node_modules/@cloudbase/auth/dist/esm/utilities.js +0 -8
  337. package/node_modules/@cloudbase/auth/dist/esm/utils.d.ts +0 -5
  338. package/node_modules/@cloudbase/auth/dist/esm/utils.js +0 -52
  339. package/node_modules/@cloudbase/auth/dist/esm/v1-compat.d.ts +0 -77
  340. package/node_modules/@cloudbase/auth/dist/esm/v1-compat.js +0 -419
  341. package/node_modules/@cloudbase/auth/dist/miniprogram/index.js +0 -1
  342. package/node_modules/@cloudbase/auth/package.json +0 -31
  343. package/node_modules/@cloudbase/cloudrun/.eslintrc.js +0 -15
  344. package/node_modules/@cloudbase/cloudrun/dist/cjs/index.d.ts +0 -4
  345. package/node_modules/@cloudbase/cloudrun/dist/cjs/index.js +0 -154
  346. package/node_modules/@cloudbase/cloudrun/dist/esm/index.d.ts +0 -4
  347. package/node_modules/@cloudbase/cloudrun/dist/esm/index.js +0 -149
  348. package/node_modules/@cloudbase/cloudrun/package.json +0 -30
  349. package/node_modules/@cloudbase/container/.eslintrc.js +0 -15
  350. package/node_modules/@cloudbase/container/.prettierrc.js +0 -41
  351. package/node_modules/@cloudbase/container/dist/cjs/constants/index.d.ts +0 -1
  352. package/node_modules/@cloudbase/container/dist/cjs/constants/index.js +0 -5
  353. package/node_modules/@cloudbase/container/dist/cjs/go_wams_exec.d.ts +0 -2
  354. package/node_modules/@cloudbase/container/dist/cjs/go_wams_exec.js +0 -538
  355. package/node_modules/@cloudbase/container/dist/cjs/index.d.ts +0 -13
  356. package/node_modules/@cloudbase/container/dist/cjs/index.js +0 -343
  357. package/node_modules/@cloudbase/container/dist/cjs/utils/index.d.ts +0 -3
  358. package/node_modules/@cloudbase/container/dist/cjs/utils/index.js +0 -83
  359. package/node_modules/@cloudbase/container/dist/cjs/utils/loader.d.ts +0 -8
  360. package/node_modules/@cloudbase/container/dist/cjs/utils/loader.js +0 -186
  361. package/node_modules/@cloudbase/container/dist/cjs/utils/request.d.ts +0 -12
  362. package/node_modules/@cloudbase/container/dist/cjs/utils/request.js +0 -106
  363. package/node_modules/@cloudbase/container/dist/esm/constants/index.d.ts +0 -1
  364. package/node_modules/@cloudbase/container/dist/esm/constants/index.js +0 -2
  365. package/node_modules/@cloudbase/container/dist/esm/go_wams_exec.d.ts +0 -2
  366. package/node_modules/@cloudbase/container/dist/esm/go_wams_exec.js +0 -536
  367. package/node_modules/@cloudbase/container/dist/esm/index.d.ts +0 -13
  368. package/node_modules/@cloudbase/container/dist/esm/index.js +0 -338
  369. package/node_modules/@cloudbase/container/dist/esm/utils/index.d.ts +0 -3
  370. package/node_modules/@cloudbase/container/dist/esm/utils/index.js +0 -77
  371. package/node_modules/@cloudbase/container/dist/esm/utils/loader.d.ts +0 -8
  372. package/node_modules/@cloudbase/container/dist/esm/utils/loader.js +0 -178
  373. package/node_modules/@cloudbase/container/dist/esm/utils/request.d.ts +0 -12
  374. package/node_modules/@cloudbase/container/dist/esm/utils/request.js +0 -102
  375. package/node_modules/@cloudbase/container/package.json +0 -30
  376. package/node_modules/@cloudbase/database/README.md +0 -119
  377. package/node_modules/@cloudbase/database/package.json +0 -36
  378. package/node_modules/@cloudbase/database/tsconfig.test.json +0 -15
  379. package/node_modules/@cloudbase/functions/.eslintrc.js +0 -15
  380. package/node_modules/@cloudbase/functions/dist/cjs/index.d.ts +0 -2
  381. package/node_modules/@cloudbase/functions/dist/cjs/index.js +0 -223
  382. package/node_modules/@cloudbase/functions/dist/esm/index.d.ts +0 -2
  383. package/node_modules/@cloudbase/functions/dist/esm/index.js +0 -219
  384. package/node_modules/@cloudbase/functions/package.json +0 -32
  385. package/node_modules/@cloudbase/model/.eslintrc.js +0 -15
  386. package/node_modules/@cloudbase/model/dist/cjs/index.d.ts +0 -5
  387. package/node_modules/@cloudbase/model/dist/cjs/index.js +0 -144
  388. package/node_modules/@cloudbase/model/dist/esm/index.d.ts +0 -5
  389. package/node_modules/@cloudbase/model/dist/esm/index.js +0 -125
  390. package/node_modules/@cloudbase/model/package.json +0 -29
  391. package/node_modules/@cloudbase/mysql/.eslintrc.js +0 -6
  392. package/node_modules/@cloudbase/mysql/dist/cjs/index.d.ts +0 -4
  393. package/node_modules/@cloudbase/mysql/dist/cjs/index.d.ts.map +0 -1
  394. package/node_modules/@cloudbase/mysql/dist/cjs/index.js +0 -173
  395. package/node_modules/@cloudbase/mysql/dist/esm/index.d.ts +0 -3
  396. package/node_modules/@cloudbase/mysql/dist/esm/index.js +0 -155
  397. package/node_modules/@cloudbase/mysql/package.json +0 -30
  398. package/node_modules/@cloudbase/oauth/.eslintrc.js +0 -15
  399. package/node_modules/@cloudbase/oauth/dist/cjs/auth/apis.d.ts +0 -142
  400. package/node_modules/@cloudbase/oauth/dist/cjs/auth/apis.js +0 -1280
  401. package/node_modules/@cloudbase/oauth/dist/cjs/auth/auth-error.d.ts +0 -22
  402. package/node_modules/@cloudbase/oauth/dist/cjs/auth/auth-error.js +0 -278
  403. package/node_modules/@cloudbase/oauth/dist/cjs/auth/consts.d.ts +0 -139
  404. package/node_modules/@cloudbase/oauth/dist/cjs/auth/consts.js +0 -147
  405. package/node_modules/@cloudbase/oauth/dist/cjs/auth/models.d.ts +0 -557
  406. package/node_modules/@cloudbase/oauth/dist/cjs/auth/models.js +0 -3
  407. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha-dom.d.ts +0 -3
  408. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha-dom.js +0 -223
  409. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha.d.ts +0 -42
  410. package/node_modules/@cloudbase/oauth/dist/cjs/captcha/captcha.js +0 -205
  411. package/node_modules/@cloudbase/oauth/dist/cjs/index.d.ts +0 -22
  412. package/node_modules/@cloudbase/oauth/dist/cjs/index.js +0 -107
  413. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/consts.d.ts +0 -20
  414. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/consts.js +0 -26
  415. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/interface.d.ts +0 -15
  416. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/interface.js +0 -10
  417. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/models.d.ts +0 -74
  418. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/models.js +0 -3
  419. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/oauth2client.d.ts +0 -129
  420. package/node_modules/@cloudbase/oauth/dist/cjs/oauth2client/oauth2client.js +0 -1174
  421. package/node_modules/@cloudbase/oauth/dist/cjs/utils/base64.d.ts +0 -9
  422. package/node_modules/@cloudbase/oauth/dist/cjs/utils/base64.js +0 -112
  423. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encrypt.d.ts +0 -4
  424. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encrypt.js +0 -26
  425. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encryptlong/index.d.ts +0 -546
  426. package/node_modules/@cloudbase/oauth/dist/cjs/utils/encryptlong/index.js +0 -2982
  427. package/node_modules/@cloudbase/oauth/dist/cjs/utils/function/single-promise.d.ts +0 -6
  428. package/node_modules/@cloudbase/oauth/dist/cjs/utils/function/single-promise.js +0 -94
  429. package/node_modules/@cloudbase/oauth/dist/cjs/utils/index.d.ts +0 -2
  430. package/node_modules/@cloudbase/oauth/dist/cjs/utils/index.js +0 -56
  431. package/node_modules/@cloudbase/oauth/dist/cjs/utils/mp.d.ts +0 -2
  432. package/node_modules/@cloudbase/oauth/dist/cjs/utils/mp.js +0 -66
  433. package/node_modules/@cloudbase/oauth/dist/cjs/utils/urlSearchParams.d.ts +0 -13
  434. package/node_modules/@cloudbase/oauth/dist/cjs/utils/urlSearchParams.js +0 -66
  435. package/node_modules/@cloudbase/oauth/dist/cjs/utils/uuid.d.ts +0 -1
  436. package/node_modules/@cloudbase/oauth/dist/cjs/utils/uuid.js +0 -12
  437. package/node_modules/@cloudbase/oauth/dist/esm/auth/apis.d.ts +0 -142
  438. package/node_modules/@cloudbase/oauth/dist/esm/auth/apis.js +0 -768
  439. package/node_modules/@cloudbase/oauth/dist/esm/auth/auth-error.d.ts +0 -22
  440. package/node_modules/@cloudbase/oauth/dist/esm/auth/auth-error.js +0 -255
  441. package/node_modules/@cloudbase/oauth/dist/esm/auth/consts.d.ts +0 -139
  442. package/node_modules/@cloudbase/oauth/dist/esm/auth/consts.js +0 -144
  443. package/node_modules/@cloudbase/oauth/dist/esm/auth/models.d.ts +0 -557
  444. package/node_modules/@cloudbase/oauth/dist/esm/auth/models.js +0 -2
  445. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha-dom.d.ts +0 -3
  446. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha-dom.js +0 -130
  447. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha.d.ts +0 -42
  448. package/node_modules/@cloudbase/oauth/dist/esm/captcha/captcha.js +0 -104
  449. package/node_modules/@cloudbase/oauth/dist/esm/index.d.ts +0 -22
  450. package/node_modules/@cloudbase/oauth/dist/esm/index.js +0 -64
  451. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/consts.d.ts +0 -20
  452. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/consts.js +0 -22
  453. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/interface.d.ts +0 -15
  454. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/interface.js +0 -3
  455. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/models.d.ts +0 -74
  456. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/models.js +0 -2
  457. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/oauth2client.d.ts +0 -129
  458. package/node_modules/@cloudbase/oauth/dist/esm/oauth2client/oauth2client.js +0 -711
  459. package/node_modules/@cloudbase/oauth/dist/esm/utils/base64.d.ts +0 -9
  460. package/node_modules/@cloudbase/oauth/dist/esm/utils/base64.js +0 -104
  461. package/node_modules/@cloudbase/oauth/dist/esm/utils/encrypt.d.ts +0 -4
  462. package/node_modules/@cloudbase/oauth/dist/esm/utils/encrypt.js +0 -18
  463. package/node_modules/@cloudbase/oauth/dist/esm/utils/encryptlong/index.d.ts +0 -546
  464. package/node_modules/@cloudbase/oauth/dist/esm/utils/encryptlong/index.js +0 -2953
  465. package/node_modules/@cloudbase/oauth/dist/esm/utils/function/single-promise.d.ts +0 -6
  466. package/node_modules/@cloudbase/oauth/dist/esm/utils/function/single-promise.js +0 -34
  467. package/node_modules/@cloudbase/oauth/dist/esm/utils/index.d.ts +0 -2
  468. package/node_modules/@cloudbase/oauth/dist/esm/utils/index.js +0 -51
  469. package/node_modules/@cloudbase/oauth/dist/esm/utils/mp.d.ts +0 -2
  470. package/node_modules/@cloudbase/oauth/dist/esm/utils/mp.js +0 -61
  471. package/node_modules/@cloudbase/oauth/dist/esm/utils/urlSearchParams.d.ts +0 -13
  472. package/node_modules/@cloudbase/oauth/dist/esm/utils/urlSearchParams.js +0 -58
  473. package/node_modules/@cloudbase/oauth/dist/esm/utils/uuid.d.ts +0 -1
  474. package/node_modules/@cloudbase/oauth/dist/esm/utils/uuid.js +0 -8
  475. package/node_modules/@cloudbase/oauth/dist/miniprogram/index.js +0 -1
  476. package/node_modules/@cloudbase/oauth/package.json +0 -20
  477. package/node_modules/@cloudbase/realtime/.eslintrc.js +0 -15
  478. package/node_modules/@cloudbase/realtime/dist/cjs/common.d.ts +0 -4
  479. package/node_modules/@cloudbase/realtime/dist/cjs/common.js +0 -22
  480. package/node_modules/@cloudbase/realtime/dist/cjs/error.d.ts +0 -36
  481. package/node_modules/@cloudbase/realtime/dist/cjs/error.js +0 -106
  482. package/node_modules/@cloudbase/realtime/dist/cjs/index.d.ts +0 -2
  483. package/node_modules/@cloudbase/realtime/dist/cjs/index.js +0 -36
  484. package/node_modules/@cloudbase/realtime/dist/cjs/listener.d.ts +0 -14
  485. package/node_modules/@cloudbase/realtime/dist/cjs/listener.js +0 -18
  486. package/node_modules/@cloudbase/realtime/dist/cjs/message.d.ts +0 -3
  487. package/node_modules/@cloudbase/realtime/dist/cjs/message.js +0 -13
  488. package/node_modules/@cloudbase/realtime/dist/cjs/snapshot.d.ts +0 -17
  489. package/node_modules/@cloudbase/realtime/dist/cjs/snapshot.js +0 -45
  490. package/node_modules/@cloudbase/realtime/dist/cjs/utils.d.ts +0 -1
  491. package/node_modules/@cloudbase/realtime/dist/cjs/utils.js +0 -9
  492. package/node_modules/@cloudbase/realtime/dist/cjs/virtual-websocket-client.d.ts +0 -62
  493. package/node_modules/@cloudbase/realtime/dist/cjs/virtual-websocket-client.js +0 -960
  494. package/node_modules/@cloudbase/realtime/dist/cjs/websocket-client.d.ts +0 -78
  495. package/node_modules/@cloudbase/realtime/dist/cjs/websocket-client.js +0 -750
  496. package/node_modules/@cloudbase/realtime/dist/cjs/ws-event.d.ts +0 -126
  497. package/node_modules/@cloudbase/realtime/dist/cjs/ws-event.js +0 -141
  498. package/node_modules/@cloudbase/realtime/dist/esm/common.d.ts +0 -4
  499. package/node_modules/@cloudbase/realtime/dist/esm/common.js +0 -15
  500. package/node_modules/@cloudbase/realtime/dist/esm/error.d.ts +0 -36
  501. package/node_modules/@cloudbase/realtime/dist/esm/error.js +0 -100
  502. package/node_modules/@cloudbase/realtime/dist/esm/index.d.ts +0 -2
  503. package/node_modules/@cloudbase/realtime/dist/esm/index.js +0 -32
  504. package/node_modules/@cloudbase/realtime/dist/esm/listener.d.ts +0 -14
  505. package/node_modules/@cloudbase/realtime/dist/esm/listener.js +0 -15
  506. package/node_modules/@cloudbase/realtime/dist/esm/message.d.ts +0 -3
  507. package/node_modules/@cloudbase/realtime/dist/esm/message.js +0 -8
  508. package/node_modules/@cloudbase/realtime/dist/esm/snapshot.d.ts +0 -17
  509. package/node_modules/@cloudbase/realtime/dist/esm/snapshot.js +0 -42
  510. package/node_modules/@cloudbase/realtime/dist/esm/utils.d.ts +0 -1
  511. package/node_modules/@cloudbase/realtime/dist/esm/utils.js +0 -5
  512. package/node_modules/@cloudbase/realtime/dist/esm/virtual-websocket-client.d.ts +0 -62
  513. package/node_modules/@cloudbase/realtime/dist/esm/virtual-websocket-client.js +0 -954
  514. package/node_modules/@cloudbase/realtime/dist/esm/websocket-client.d.ts +0 -78
  515. package/node_modules/@cloudbase/realtime/dist/esm/websocket-client.js +0 -747
  516. package/node_modules/@cloudbase/realtime/dist/esm/ws-event.d.ts +0 -126
  517. package/node_modules/@cloudbase/realtime/dist/esm/ws-event.js +0 -137
  518. package/node_modules/@cloudbase/realtime/package.json +0 -29
  519. package/node_modules/@cloudbase/storage/.eslintrc.js +0 -15
  520. package/node_modules/@cloudbase/storage/dist/cjs/index.d.ts +0 -195
  521. package/node_modules/@cloudbase/storage/dist/cjs/index.js +0 -1426
  522. package/node_modules/@cloudbase/storage/dist/cjs/supabase/errors.d.ts +0 -20
  523. package/node_modules/@cloudbase/storage/dist/cjs/supabase/errors.js +0 -65
  524. package/node_modules/@cloudbase/storage/dist/cjs/supabase/types.d.ts +0 -64
  525. package/node_modules/@cloudbase/storage/dist/cjs/supabase/types.js +0 -3
  526. package/node_modules/@cloudbase/storage/dist/esm/index.d.ts +0 -195
  527. package/node_modules/@cloudbase/storage/dist/esm/index.js +0 -1422
  528. package/node_modules/@cloudbase/storage/dist/esm/supabase/errors.d.ts +0 -20
  529. package/node_modules/@cloudbase/storage/dist/esm/supabase/errors.js +0 -61
  530. package/node_modules/@cloudbase/storage/dist/esm/supabase/types.d.ts +0 -64
  531. package/node_modules/@cloudbase/storage/dist/esm/supabase/types.js +0 -2
  532. package/node_modules/@cloudbase/storage/package.json +0 -28
  533. package/node_modules/@cloudbase/types/index.js +0 -1
  534. package/node_modules/@cloudbase/utilities/.eslintrc.js +0 -15
  535. package/oauth/src/index.d.ts +0 -1
  536. package/oauth/src/index.ts +0 -1
  537. package/realtime/src/index.d.ts +0 -2
  538. package/realtime/src/index.ts +0 -8
  539. package/storage/src/index.d.ts +0 -2
  540. package/storage/src/index.js +0 -5
  541. package/storage/src/index.ts +0 -4
  542. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/aggregate.d.ts +0 -0
  543. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/aggregate.js +0 -0
  544. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/collection.d.ts +0 -0
  545. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/collection.js +0 -0
  546. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/command.d.ts +0 -0
  547. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/command.js +0 -0
  548. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/commands/logic.d.ts +0 -0
  549. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/commands/logic.js +0 -0
  550. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/commands/query.d.ts +0 -0
  551. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/commands/query.js +0 -0
  552. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/commands/update.d.ts +0 -0
  553. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/commands/update.js +0 -0
  554. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/config/app.config.d.ts +0 -0
  555. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/config/app.config.js +0 -0
  556. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/config/error.config.d.ts +0 -0
  557. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/config/error.config.js +0 -0
  558. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/const/code.d.ts +0 -0
  559. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/const/code.js +0 -0
  560. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/constant.d.ts +0 -0
  561. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/constant.js +0 -0
  562. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/document.d.ts +0 -0
  563. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/document.js +0 -0
  564. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/index.d.ts +0 -0
  565. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/index.js +0 -0
  566. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/interface.d.ts +0 -0
  567. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/interface.js +0 -0
  568. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/lineString.d.ts +0 -0
  569. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/lineString.js +0 -0
  570. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/multiLineString.d.ts +0 -0
  571. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/multiLineString.js +0 -0
  572. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/multiPoint.d.ts +0 -0
  573. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/multiPoint.js +0 -0
  574. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/multiPolygon.d.ts +0 -0
  575. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/multiPolygon.js +0 -0
  576. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/point.d.ts +0 -0
  577. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/point.js +0 -0
  578. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/polygon.d.ts +0 -0
  579. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/geo/polygon.js +0 -0
  580. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/helper/symbol.d.ts +0 -0
  581. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/helper/symbol.js +0 -0
  582. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/index.d.ts +0 -0
  583. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/index.js +0 -0
  584. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/lib/util.d.ts +0 -0
  585. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/lib/util.js +0 -0
  586. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/operator-map.d.ts +0 -0
  587. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/operator-map.js +0 -0
  588. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/query.d.ts +0 -0
  589. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/query.js +0 -0
  590. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/regexp/index.d.ts +0 -0
  591. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/regexp/index.js +0 -0
  592. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serializer/common.d.ts +0 -0
  593. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serializer/common.js +0 -0
  594. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serializer/datatype.d.ts +0 -0
  595. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serializer/datatype.js +0 -0
  596. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serializer/query.d.ts +0 -0
  597. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serializer/query.js +0 -0
  598. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serializer/update.d.ts +0 -0
  599. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serializer/update.js +0 -0
  600. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serverDate/index.d.ts +0 -0
  601. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/serverDate/index.js +0 -0
  602. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/transaction/collection.d.ts +0 -0
  603. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/transaction/collection.js +0 -0
  604. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/transaction/document.d.ts +0 -0
  605. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/transaction/document.js +0 -0
  606. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/transaction/index.d.ts +0 -0
  607. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/transaction/index.js +0 -0
  608. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/transaction/query.d.ts +0 -0
  609. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/transaction/query.js +0 -0
  610. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/typings/index.d.ts +0 -0
  611. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/typings/index.js +0 -0
  612. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/typings/realtime.d.ts +0 -0
  613. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/typings/realtime.js +0 -0
  614. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/util.d.ts +0 -0
  615. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/util.js +0 -0
  616. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/error.d.ts +0 -0
  617. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/error.js +0 -0
  618. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/msg.d.ts +0 -0
  619. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/msg.js +0 -0
  620. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/symbol.d.ts +0 -0
  621. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/symbol.js +0 -0
  622. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/type.d.ts +0 -0
  623. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/type.js +0 -0
  624. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/utils.d.ts +0 -0
  625. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/utils/utils.js +0 -0
  626. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/validate.d.ts +0 -0
  627. /package/{node_modules/@cloudbase/database → database}/dist/commonjs/validate.js +0 -0
  628. /package/{node_modules/@cloudbase/database → database}/dist/esm/aggregate.d.ts +0 -0
  629. /package/{node_modules/@cloudbase/database → database}/dist/esm/aggregate.js +0 -0
  630. /package/{node_modules/@cloudbase/database → database}/dist/esm/collection.d.ts +0 -0
  631. /package/{node_modules/@cloudbase/database → database}/dist/esm/collection.js +0 -0
  632. /package/{node_modules/@cloudbase/database → database}/dist/esm/command.d.ts +0 -0
  633. /package/{node_modules/@cloudbase/database → database}/dist/esm/command.js +0 -0
  634. /package/{node_modules/@cloudbase/database → database}/dist/esm/commands/logic.d.ts +0 -0
  635. /package/{node_modules/@cloudbase/database → database}/dist/esm/commands/logic.js +0 -0
  636. /package/{node_modules/@cloudbase/database → database}/dist/esm/commands/query.d.ts +0 -0
  637. /package/{node_modules/@cloudbase/database → database}/dist/esm/commands/query.js +0 -0
  638. /package/{node_modules/@cloudbase/database → database}/dist/esm/commands/update.d.ts +0 -0
  639. /package/{node_modules/@cloudbase/database → database}/dist/esm/commands/update.js +0 -0
  640. /package/{node_modules/@cloudbase/database → database}/dist/esm/config/app.config.d.ts +0 -0
  641. /package/{node_modules/@cloudbase/database → database}/dist/esm/config/app.config.js +0 -0
  642. /package/{node_modules/@cloudbase/database → database}/dist/esm/config/error.config.d.ts +0 -0
  643. /package/{node_modules/@cloudbase/database → database}/dist/esm/config/error.config.js +0 -0
  644. /package/{node_modules/@cloudbase/database → database}/dist/esm/const/code.d.ts +0 -0
  645. /package/{node_modules/@cloudbase/database → database}/dist/esm/const/code.js +0 -0
  646. /package/{node_modules/@cloudbase/database → database}/dist/esm/constant.d.ts +0 -0
  647. /package/{node_modules/@cloudbase/database → database}/dist/esm/constant.js +0 -0
  648. /package/{node_modules/@cloudbase/database → database}/dist/esm/document.d.ts +0 -0
  649. /package/{node_modules/@cloudbase/database → database}/dist/esm/document.js +0 -0
  650. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/index.d.ts +0 -0
  651. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/index.js +0 -0
  652. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/interface.d.ts +0 -0
  653. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/interface.js +0 -0
  654. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/lineString.d.ts +0 -0
  655. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/lineString.js +0 -0
  656. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/multiLineString.d.ts +0 -0
  657. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/multiLineString.js +0 -0
  658. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/multiPoint.d.ts +0 -0
  659. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/multiPoint.js +0 -0
  660. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/multiPolygon.d.ts +0 -0
  661. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/multiPolygon.js +0 -0
  662. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/point.d.ts +0 -0
  663. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/point.js +0 -0
  664. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/polygon.d.ts +0 -0
  665. /package/{node_modules/@cloudbase/database → database}/dist/esm/geo/polygon.js +0 -0
  666. /package/{node_modules/@cloudbase/database → database}/dist/esm/helper/symbol.d.ts +0 -0
  667. /package/{node_modules/@cloudbase/database → database}/dist/esm/helper/symbol.js +0 -0
  668. /package/{node_modules/@cloudbase/database → database}/dist/esm/index.d.ts +0 -0
  669. /package/{node_modules/@cloudbase/database → database}/dist/esm/index.js +0 -0
  670. /package/{node_modules/@cloudbase/database → database}/dist/esm/lib/util.d.ts +0 -0
  671. /package/{node_modules/@cloudbase/database → database}/dist/esm/lib/util.js +0 -0
  672. /package/{node_modules/@cloudbase/database → database}/dist/esm/operator-map.d.ts +0 -0
  673. /package/{node_modules/@cloudbase/database → database}/dist/esm/operator-map.js +0 -0
  674. /package/{node_modules/@cloudbase/database → database}/dist/esm/query.d.ts +0 -0
  675. /package/{node_modules/@cloudbase/database → database}/dist/esm/query.js +0 -0
  676. /package/{node_modules/@cloudbase/database → database}/dist/esm/regexp/index.d.ts +0 -0
  677. /package/{node_modules/@cloudbase/database → database}/dist/esm/regexp/index.js +0 -0
  678. /package/{node_modules/@cloudbase/database → database}/dist/esm/serializer/common.d.ts +0 -0
  679. /package/{node_modules/@cloudbase/database → database}/dist/esm/serializer/common.js +0 -0
  680. /package/{node_modules/@cloudbase/database → database}/dist/esm/serializer/datatype.d.ts +0 -0
  681. /package/{node_modules/@cloudbase/database → database}/dist/esm/serializer/datatype.js +0 -0
  682. /package/{node_modules/@cloudbase/database → database}/dist/esm/serializer/query.d.ts +0 -0
  683. /package/{node_modules/@cloudbase/database → database}/dist/esm/serializer/query.js +0 -0
  684. /package/{node_modules/@cloudbase/database → database}/dist/esm/serializer/update.d.ts +0 -0
  685. /package/{node_modules/@cloudbase/database → database}/dist/esm/serializer/update.js +0 -0
  686. /package/{node_modules/@cloudbase/database → database}/dist/esm/serverDate/index.d.ts +0 -0
  687. /package/{node_modules/@cloudbase/database → database}/dist/esm/serverDate/index.js +0 -0
  688. /package/{node_modules/@cloudbase/database → database}/dist/esm/transaction/collection.d.ts +0 -0
  689. /package/{node_modules/@cloudbase/database → database}/dist/esm/transaction/collection.js +0 -0
  690. /package/{node_modules/@cloudbase/database → database}/dist/esm/transaction/document.d.ts +0 -0
  691. /package/{node_modules/@cloudbase/database → database}/dist/esm/transaction/document.js +0 -0
  692. /package/{node_modules/@cloudbase/database → database}/dist/esm/transaction/index.d.ts +0 -0
  693. /package/{node_modules/@cloudbase/database → database}/dist/esm/transaction/index.js +0 -0
  694. /package/{node_modules/@cloudbase/database → database}/dist/esm/transaction/query.d.ts +0 -0
  695. /package/{node_modules/@cloudbase/database → database}/dist/esm/transaction/query.js +0 -0
  696. /package/{node_modules/@cloudbase/database → database}/dist/esm/typings/index.d.ts +0 -0
  697. /package/{node_modules/@cloudbase/database → database}/dist/esm/typings/index.js +0 -0
  698. /package/{node_modules/@cloudbase/database → database}/dist/esm/typings/realtime.d.ts +0 -0
  699. /package/{node_modules/@cloudbase/database → database}/dist/esm/typings/realtime.js +0 -0
  700. /package/{node_modules/@cloudbase/database → database}/dist/esm/util.d.ts +0 -0
  701. /package/{node_modules/@cloudbase/database → database}/dist/esm/util.js +0 -0
  702. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/error.d.ts +0 -0
  703. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/error.js +0 -0
  704. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/msg.d.ts +0 -0
  705. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/msg.js +0 -0
  706. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/symbol.d.ts +0 -0
  707. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/symbol.js +0 -0
  708. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/type.d.ts +0 -0
  709. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/type.js +0 -0
  710. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/utils.d.ts +0 -0
  711. /package/{node_modules/@cloudbase/database → database}/dist/esm/utils/utils.js +0 -0
  712. /package/{node_modules/@cloudbase/database → database}/dist/esm/validate.d.ts +0 -0
  713. /package/{node_modules/@cloudbase/database → database}/dist/esm/validate.js +0 -0
  714. /package/{app/src → dist}/index.d.ts +0 -0
  715. /package/{node_modules/@cloudbase/types → types}/auth.d.ts +0 -0
  716. /package/{node_modules/@cloudbase/types → types}/cache.d.ts +0 -0
  717. /package/{node_modules/@cloudbase/types → types}/cloudrun.d.ts +0 -0
  718. /package/{node_modules/@cloudbase/types → types}/component.d.ts +0 -0
  719. /package/{node_modules/@cloudbase/types → types}/database.d.ts +0 -0
  720. /package/{node_modules/@cloudbase/types → types}/events.d.ts +0 -0
  721. /package/{node_modules/@cloudbase/types → types}/functions.d.ts +0 -0
  722. /package/{node_modules/@cloudbase/types → types}/index.d.ts +0 -0
  723. /package/{node_modules/@cloudbase/types → types}/realtime.d.ts +0 -0
  724. /package/{node_modules/@cloudbase/types → types}/request.d.ts +0 -0
  725. /package/{node_modules/@cloudbase/types → types}/storage.d.ts +0 -0
  726. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/adapters/index.d.ts +0 -0
  727. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/adapters/index.js +0 -0
  728. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/adapters/platforms/web.d.ts +0 -0
  729. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/adapters/platforms/web.js +0 -0
  730. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/constants/common.d.ts +0 -0
  731. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/constants/common.js +0 -0
  732. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/constants/errors.d.ts +0 -0
  733. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/constants/errors.js +0 -0
  734. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/constants/index.d.ts +0 -0
  735. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/constants/index.js +0 -0
  736. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/helpers/decorators.d.ts +0 -0
  737. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/helpers/decorators.js +0 -0
  738. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/helpers/index.d.ts +0 -0
  739. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/helpers/index.js +0 -0
  740. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/index.d.ts +0 -0
  741. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/index.js +0 -0
  742. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/abortController.d.ts +0 -0
  743. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/abortController.js +0 -0
  744. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/cache.d.ts +0 -0
  745. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/cache.js +0 -0
  746. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/events.d.ts +0 -0
  747. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/events.js +0 -0
  748. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/langEvent.d.ts +0 -0
  749. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/langEvent.js +0 -0
  750. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/util.d.ts +0 -0
  751. /package/{node_modules/@cloudbase/utilities → utilities}/dist/cjs/libs/util.js +0 -0
  752. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/adapters/index.d.ts +0 -0
  753. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/adapters/index.js +0 -0
  754. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/adapters/platforms/web.d.ts +0 -0
  755. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/adapters/platforms/web.js +0 -0
  756. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/constants/common.d.ts +0 -0
  757. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/constants/common.js +0 -0
  758. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/constants/errors.d.ts +0 -0
  759. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/constants/errors.js +0 -0
  760. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/constants/index.d.ts +0 -0
  761. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/constants/index.js +0 -0
  762. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/helpers/decorators.d.ts +0 -0
  763. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/helpers/decorators.js +0 -0
  764. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/helpers/index.d.ts +0 -0
  765. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/helpers/index.js +0 -0
  766. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/index.d.ts +0 -0
  767. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/index.js +0 -0
  768. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/abortController.d.ts +0 -0
  769. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/abortController.js +0 -0
  770. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/cache.d.ts +0 -0
  771. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/cache.js +0 -0
  772. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/events.d.ts +0 -0
  773. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/events.js +0 -0
  774. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/langEvent.d.ts +0 -0
  775. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/langEvent.js +0 -0
  776. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/util.d.ts +0 -0
  777. /package/{node_modules/@cloudbase/utilities → utilities}/dist/esm/libs/util.js +0 -0
  778. /package/{node_modules/@cloudbase/utilities → utilities}/dist/miniprogram/index.js +0 -0
@@ -1,1174 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
21
- };
22
- var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
- function verb(n) { return function (v) { return step([n, v]); }; }
26
- function step(op) {
27
- if (f) throw new TypeError("Generator is already executing.");
28
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
- if (y = 0, t) op = [op[0] & 2, t.value];
31
- switch (op[0]) {
32
- case 0: case 1: t = op; break;
33
- case 4: _.label++; return { value: op[1], done: false };
34
- case 5: _.label++; y = op[1]; op = [0]; continue;
35
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
- default:
37
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
- if (t[2]) _.ops.pop();
42
- _.trys.pop(); continue;
43
- }
44
- op = body.call(thisArg, _);
45
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
- }
48
- };
49
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
- if (ar || !(i in from)) {
52
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
- ar[i] = from[i];
54
- }
55
- }
56
- return to.concat(ar || Array.prototype.slice.call(from));
57
- };
58
- Object.defineProperty(exports, "__esModule", { value: true });
59
- exports.OAuth2Client = exports.defaultStorage = exports.generateRequestId = exports.toResponseError = exports.defaultRequest = void 0;
60
- var consts_1 = require("./consts");
61
- var consts_2 = require("../auth/consts");
62
- var uuid_1 = require("../utils/uuid");
63
- var index_1 = require("../utils/index");
64
- var single_promise_1 = require("../utils/function/single-promise");
65
- var base64_1 = require("../utils/base64");
66
- var mp_1 = require("../utils/mp");
67
- var utilities_1 = require("@cloudbase/utilities");
68
- var RequestIdHeaderName = 'x-request-id';
69
- var DeviceIdHeaderName = 'x-device-id';
70
- var DeviceIdSectionName = 'device_id';
71
- var defaultRequest = function (url, options) {
72
- return __awaiter(this, void 0, void 0, function () {
73
- var result, responseError, copyOptions, responseResult, jsonResponse, error_1;
74
- return __generator(this, function (_a) {
75
- switch (_a.label) {
76
- case 0:
77
- result = null;
78
- responseError = null;
79
- _a.label = 1;
80
- case 1:
81
- _a.trys.push([1, 4, , 5]);
82
- copyOptions = Object.assign({}, options);
83
- if (!copyOptions.method) {
84
- copyOptions.method = 'GET';
85
- }
86
- if (copyOptions.body && typeof copyOptions.body !== 'string') {
87
- copyOptions.body = JSON.stringify(copyOptions.body);
88
- }
89
- return [4, fetch(url, copyOptions)];
90
- case 2:
91
- responseResult = _a.sent();
92
- return [4, responseResult.json()];
93
- case 3:
94
- jsonResponse = _a.sent();
95
- if (jsonResponse === null || jsonResponse === void 0 ? void 0 : jsonResponse.error) {
96
- responseError = jsonResponse;
97
- responseError.error_uri = new URL(url).pathname;
98
- }
99
- else {
100
- result = jsonResponse;
101
- }
102
- return [3, 5];
103
- case 4:
104
- error_1 = _a.sent();
105
- responseError = {
106
- error: consts_1.ErrorType.UNREACHABLE,
107
- error_description: error_1.message,
108
- error_uri: new URL(url).pathname,
109
- };
110
- return [3, 5];
111
- case 5:
112
- if (responseError) {
113
- throw responseError;
114
- }
115
- else {
116
- return [2, result];
117
- }
118
- return [2];
119
- }
120
- });
121
- });
122
- };
123
- exports.defaultRequest = defaultRequest;
124
- var toResponseError = function (error, options) {
125
- var responseError;
126
- var formatOptions = options || {};
127
- if (error instanceof Error) {
128
- responseError = {
129
- error: formatOptions.error || consts_1.ErrorType.LOCAL,
130
- error_description: formatOptions.error_description || error.message,
131
- error_uri: formatOptions.error_uri,
132
- details: formatOptions.details || error.stack,
133
- };
134
- }
135
- else {
136
- var formatError = error || {};
137
- responseError = {
138
- error: formatOptions.error || formatError.error || consts_1.ErrorType.LOCAL,
139
- error_description: formatOptions.error_description || formatError.error_description,
140
- error_uri: formatOptions.error_uri || formatError.error_uri,
141
- details: formatOptions.details || formatError.details,
142
- };
143
- }
144
- return responseError;
145
- };
146
- exports.toResponseError = toResponseError;
147
- function generateRequestId() {
148
- return (0, uuid_1.uuidv4)();
149
- }
150
- exports.generateRequestId = generateRequestId;
151
- var DefaultStorage = (function () {
152
- function DefaultStorage(opts) {
153
- this._env = (opts === null || opts === void 0 ? void 0 : opts.env) || '';
154
- }
155
- DefaultStorage.prototype.getItem = function (key) {
156
- return __awaiter(this, void 0, void 0, function () {
157
- return __generator(this, function (_a) {
158
- return [2, window.localStorage.getItem("".concat(key).concat(this._env))];
159
- });
160
- });
161
- };
162
- DefaultStorage.prototype.removeItem = function (key) {
163
- return __awaiter(this, void 0, void 0, function () {
164
- return __generator(this, function (_a) {
165
- window.localStorage.removeItem("".concat(key).concat(this._env));
166
- return [2];
167
- });
168
- });
169
- };
170
- DefaultStorage.prototype.setItem = function (key, value) {
171
- return __awaiter(this, void 0, void 0, function () {
172
- return __generator(this, function (_a) {
173
- window.localStorage.setItem("".concat(key).concat(this._env), value);
174
- return [2];
175
- });
176
- });
177
- };
178
- DefaultStorage.prototype.getItemSync = function (key) {
179
- return window.localStorage.getItem("".concat(key).concat(this._env));
180
- };
181
- DefaultStorage.prototype.removeItemSync = function (key) {
182
- window.localStorage.removeItem("".concat(key).concat(this._env));
183
- };
184
- DefaultStorage.prototype.setItemSync = function (key, value) {
185
- window.localStorage.setItem("".concat(key).concat(this._env), value);
186
- };
187
- return DefaultStorage;
188
- }());
189
- exports.defaultStorage = new DefaultStorage();
190
- function isCredentialsExpired(credentials) {
191
- var isExpired = true;
192
- if ((credentials === null || credentials === void 0 ? void 0 : credentials.expires_at) && (credentials === null || credentials === void 0 ? void 0 : credentials.access_token)) {
193
- isExpired = credentials.expires_at < new Date();
194
- }
195
- return isExpired;
196
- }
197
- var LocalCredentials = (function () {
198
- function LocalCredentials(options) {
199
- this.credentials = null;
200
- this.accessKeyCredentials = null;
201
- this.singlePromise = null;
202
- this.tokenSectionName = options.tokenSectionName;
203
- this.storage = options.storage;
204
- this.clientId = options.clientId;
205
- this.singlePromise = new single_promise_1.SinglePromise({ clientId: this.clientId });
206
- this.credentials = options.credentials || null;
207
- }
208
- LocalCredentials.prototype.getStorageCredentialsSync = function () {
209
- var credentials = null;
210
- var tokenStr = this.storage.getItemSync(this.tokenSectionName);
211
- if (tokenStr !== undefined && tokenStr !== null) {
212
- try {
213
- credentials = JSON.parse(tokenStr);
214
- if (credentials === null || credentials === void 0 ? void 0 : credentials.expires_at) {
215
- credentials.expires_at = new Date(credentials.expires_at);
216
- }
217
- }
218
- catch (error) {
219
- this.storage.removeItem(this.tokenSectionName);
220
- credentials = null;
221
- }
222
- }
223
- return credentials;
224
- };
225
- LocalCredentials.prototype.setCredentials = function (credentials) {
226
- return __awaiter(this, void 0, void 0, function () {
227
- var tokenStr;
228
- return __generator(this, function (_a) {
229
- switch (_a.label) {
230
- case 0:
231
- if (!(credentials === null || credentials === void 0 ? void 0 : credentials.expires_in)) return [3, 3];
232
- if (!(credentials === null || credentials === void 0 ? void 0 : credentials.expires_at)) {
233
- credentials.expires_at = new Date(Date.now() + (credentials.expires_in - 30) * 1000);
234
- }
235
- if (!this.storage) return [3, 2];
236
- tokenStr = JSON.stringify(credentials);
237
- return [4, this.storage.setItem(this.tokenSectionName, tokenStr)];
238
- case 1:
239
- _a.sent();
240
- _a.label = 2;
241
- case 2:
242
- this.credentials = credentials;
243
- return [3, 6];
244
- case 3:
245
- if (!this.storage) return [3, 5];
246
- return [4, this.storage.removeItem(this.tokenSectionName)];
247
- case 4:
248
- _a.sent();
249
- _a.label = 5;
250
- case 5:
251
- this.credentials = null;
252
- _a.label = 6;
253
- case 6: return [2];
254
- }
255
- });
256
- });
257
- };
258
- LocalCredentials.prototype.setAccessKeyCredentials = function (credentials) {
259
- this.accessKeyCredentials = credentials;
260
- if (credentials.scope === consts_2.DEFAULT_NODE_ACCESS_SCOPE) {
261
- this.credentials = credentials;
262
- }
263
- };
264
- LocalCredentials.prototype.getCredentials = function () {
265
- return __awaiter(this, void 0, void 0, function () {
266
- var _this = this;
267
- return __generator(this, function (_a) {
268
- return [2, this.singlePromise.run('getCredentials', function () { return __awaiter(_this, void 0, void 0, function () {
269
- var _a, credentials, isAccessKeyCredentials;
270
- return __generator(this, function (_b) {
271
- switch (_b.label) {
272
- case 0:
273
- if (!isCredentialsExpired(this.credentials)) return [3, 2];
274
- return [4, this.getStorageCredentials()];
275
- case 1:
276
- _a = _b.sent(), credentials = _a.credentials, isAccessKeyCredentials = _a.isAccessKeyCredentials;
277
- if (isAccessKeyCredentials) {
278
- return [2, credentials];
279
- }
280
- this.credentials = credentials;
281
- _b.label = 2;
282
- case 2: return [2, this.credentials];
283
- }
284
- });
285
- }); })];
286
- });
287
- });
288
- };
289
- LocalCredentials.prototype.getStorageCredentials = function () {
290
- return __awaiter(this, void 0, void 0, function () {
291
- var _this = this;
292
- return __generator(this, function (_a) {
293
- return [2, this.singlePromise.run('_getStorageCredentials', function () { return __awaiter(_this, void 0, void 0, function () {
294
- var credentials, isAccessKeyCredentials, tokenStr, error_2;
295
- return __generator(this, function (_a) {
296
- switch (_a.label) {
297
- case 0:
298
- credentials = null;
299
- isAccessKeyCredentials = false;
300
- return [4, this.storage.getItem(this.tokenSectionName)];
301
- case 1:
302
- tokenStr = _a.sent();
303
- if (!!!tokenStr) return [3, 6];
304
- _a.label = 2;
305
- case 2:
306
- _a.trys.push([2, 3, , 5]);
307
- credentials = JSON.parse(tokenStr);
308
- if (credentials === null || credentials === void 0 ? void 0 : credentials.expires_at) {
309
- credentials.expires_at = new Date(credentials.expires_at);
310
- }
311
- return [3, 5];
312
- case 3:
313
- error_2 = _a.sent();
314
- return [4, this.storage.removeItem(this.tokenSectionName)];
315
- case 4:
316
- _a.sent();
317
- credentials = null;
318
- return [3, 5];
319
- case 5: return [3, 7];
320
- case 6:
321
- credentials = this.accessKeyCredentials || null;
322
- isAccessKeyCredentials = true;
323
- _a.label = 7;
324
- case 7: return [2, { credentials: credentials, isAccessKeyCredentials: isAccessKeyCredentials }];
325
- }
326
- });
327
- }); })];
328
- });
329
- });
330
- };
331
- return LocalCredentials;
332
- }());
333
- var OAuth2Client = exports.OAuth2Client = (function () {
334
- function OAuth2Client(options) {
335
- var _this = this;
336
- var _a;
337
- this.initializePromise = null;
338
- this.lockAcquired = false;
339
- this.pendingInLock = [];
340
- this.singlePromise = null;
341
- if (!options.clientSecret) {
342
- options.clientSecret = '';
343
- }
344
- if (!options.clientId && options.env) {
345
- options.clientId = options.env;
346
- }
347
- this.apiOrigin = options.apiOrigin;
348
- this.apiPath = options.apiPath || consts_2.AUTH_API_PREFIX;
349
- this.clientId = options.clientId;
350
- this.i18n = options.i18n;
351
- this.eventBus = options.eventBus;
352
- this.singlePromise = new single_promise_1.SinglePromise({ clientId: this.clientId });
353
- this.retry = this.formatRetry(options.retry, OAuth2Client.defaultRetry);
354
- if (options.baseRequest) {
355
- this.baseRequest = options.baseRequest;
356
- }
357
- else {
358
- this.baseRequest = exports.defaultRequest;
359
- }
360
- this.tokenInURL = options.tokenInURL;
361
- this.headers = options.headers;
362
- this.storage = options.storage || exports.defaultStorage;
363
- this.localCredentials = new LocalCredentials({
364
- tokenSectionName: "credentials_".concat(options.clientId),
365
- storage: this.storage,
366
- clientId: options.clientId,
367
- });
368
- this.clientSecret = options.clientSecret;
369
- if (options.clientId) {
370
- this.basicAuth = "Basic ".concat((0, base64_1.weBtoa)("".concat(options.clientId, ":").concat(this.clientSecret)));
371
- }
372
- this.wxCloud = options.wxCloud;
373
- try {
374
- if ((0, mp_1.isMp)()) {
375
- this.useWxCloud = options.useWxCloud;
376
- if (this.wxCloud === undefined && options.env) {
377
- wx.cloud.init({ env: options.env });
378
- this.wxCloud = wx.cloud;
379
- }
380
- }
381
- }
382
- catch (error) {
383
- }
384
- this.refreshTokenFunc = options.refreshTokenFunc || this.defaultRefreshTokenFunc;
385
- this.anonymousSignInFunc = options.anonymousSignInFunc;
386
- this.onCredentialsError = options.onCredentialsError;
387
- this.getInitialSession = options.getInitialSession;
388
- this.onInitialSessionObtained = options.onInitialSessionObtained;
389
- this.logDebugMessages = (_a = options.debug) !== null && _a !== void 0 ? _a : false;
390
- utilities_1.langEvent.bus.on(utilities_1.langEvent.LANG_CHANGE_EVENT, function (params) {
391
- var _a;
392
- _this.i18n = ((_a = params.data) === null || _a === void 0 ? void 0 : _a.i18n) || _this.i18n;
393
- });
394
- }
395
- OAuth2Client.prototype.setGetInitialSession = function (callback) {
396
- this.getInitialSession = callback;
397
- };
398
- OAuth2Client.prototype.setOnInitialSessionObtained = function (callback) {
399
- this.onInitialSessionObtained = callback;
400
- };
401
- OAuth2Client.prototype.initialize = function (func) {
402
- return __awaiter(this, void 0, void 0, function () {
403
- var _this = this;
404
- return __generator(this, function (_a) {
405
- switch (_a.label) {
406
- case 0:
407
- if (!this.initializePromise) return [3, 2];
408
- return [4, this.initializePromise];
409
- case 1: return [2, _a.sent()];
410
- case 2:
411
- if (!(func !== undefined)) return [3, 4];
412
- this.initializePromise = func;
413
- return [4, this.initializePromise];
414
- case 3: return [2, _a.sent()];
415
- case 4:
416
- this.initializePromise = (function () { return __awaiter(_this, void 0, void 0, function () {
417
- var _this = this;
418
- return __generator(this, function (_a) {
419
- switch (_a.label) {
420
- case 0: return [4, this._acquireLock(-1, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
421
- switch (_a.label) {
422
- case 0: return [4, this._initialize()];
423
- case 1: return [2, _a.sent()];
424
- }
425
- }); }); })];
426
- case 1: return [2, _a.sent()];
427
- }
428
- });
429
- }); })();
430
- return [4, this.initializePromise];
431
- case 5: return [2, _a.sent()];
432
- }
433
- });
434
- });
435
- };
436
- OAuth2Client.prototype.setCredentials = function (credentials) {
437
- return __awaiter(this, void 0, void 0, function () {
438
- var _this = this;
439
- return __generator(this, function (_a) {
440
- switch (_a.label) {
441
- case 0: return [4, this.initializePromise];
442
- case 1:
443
- _a.sent();
444
- return [2, this._acquireLock(-1, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
445
- return [2, this.localCredentials.setCredentials(credentials)];
446
- }); }); })];
447
- }
448
- });
449
- });
450
- };
451
- OAuth2Client.prototype.setAccessKeyCredentials = function (credentials) {
452
- return this.localCredentials.setAccessKeyCredentials(credentials);
453
- };
454
- OAuth2Client.prototype.getAccessToken = function () {
455
- return __awaiter(this, void 0, void 0, function () {
456
- var credentials, respErr;
457
- return __generator(this, function (_a) {
458
- switch (_a.label) {
459
- case 0: return [4, this.initializePromise];
460
- case 1:
461
- _a.sent();
462
- return [4, this.getCredentials()];
463
- case 2:
464
- credentials = _a.sent();
465
- if ((credentials === null || credentials === void 0 ? void 0 : credentials.scope) === consts_2.DEFAULT_NODE_ACCESS_SCOPE) {
466
- return [2, Promise.resolve(credentials.access_token)];
467
- }
468
- if (credentials === null || credentials === void 0 ? void 0 : credentials.access_token) {
469
- return [2, Promise.resolve(credentials.access_token)];
470
- }
471
- respErr = { error: consts_1.ErrorType.UNAUTHENTICATED };
472
- return [2, Promise.reject(respErr)];
473
- }
474
- });
475
- });
476
- };
477
- OAuth2Client.prototype.request = function (url, options) {
478
- var _a, _b;
479
- return __awaiter(this, void 0, void 0, function () {
480
- var retry, deviceId, credentials, _c, response, maxRequestTimes, requestTime, responseError_1;
481
- var _d;
482
- return __generator(this, function (_f) {
483
- switch (_f.label) {
484
- case 0:
485
- if (!options) {
486
- options = {};
487
- }
488
- retry = this.formatRetry(options.retry, this.retry);
489
- options.headers = __assign(__assign({}, options.headers), (_d = {}, _d[(_a = this.i18n) === null || _a === void 0 ? void 0 : _a.LANG_HEADER_KEY] = (_b = this.i18n) === null || _b === void 0 ? void 0 : _b.lang, _d));
490
- if (this.headers) {
491
- options.headers = __assign(__assign({}, this.headers), options.headers);
492
- }
493
- if (!options.headers[RequestIdHeaderName]) {
494
- options.headers[RequestIdHeaderName] = generateRequestId();
495
- }
496
- if (!!options.headers[DeviceIdHeaderName]) return [3, 2];
497
- return [4, this.getDeviceId()];
498
- case 1:
499
- deviceId = _f.sent();
500
- options.headers[DeviceIdHeaderName] = deviceId;
501
- _f.label = 2;
502
- case 2:
503
- if ((options === null || options === void 0 ? void 0 : options.withBasicAuth) && this.basicAuth) {
504
- options.headers.Authorization = this.basicAuth;
505
- }
506
- if (!(options === null || options === void 0 ? void 0 : options.withCredentials)) return [3, 7];
507
- if (!options.getCredentials) return [3, 4];
508
- return [4, options.getCredentials()];
509
- case 3:
510
- _c = _f.sent();
511
- return [3, 6];
512
- case 4: return [4, this.getCredentials()];
513
- case 5:
514
- _c = _f.sent();
515
- _f.label = 6;
516
- case 6:
517
- credentials = _c;
518
- if (credentials) {
519
- if (this.tokenInURL) {
520
- if (url.indexOf('?') < 0) {
521
- url += '?';
522
- }
523
- url += "access_token=".concat(credentials.access_token);
524
- }
525
- else {
526
- options.headers.Authorization = "".concat(credentials.token_type, " ").concat(credentials.access_token);
527
- }
528
- }
529
- return [3, 8];
530
- case 7:
531
- if (this.clientId && url.indexOf('client_id') < 0) {
532
- url += url.indexOf('?') < 0 ? '?' : '&';
533
- url += "client_id=".concat(this.clientId);
534
- }
535
- _f.label = 8;
536
- case 8:
537
- if (url.startsWith('/')) {
538
- url = "".concat(this.apiOrigin).concat(this.apiPath).concat(url);
539
- }
540
- response = null;
541
- maxRequestTimes = retry + 1;
542
- requestTime = 0;
543
- _f.label = 9;
544
- case 9:
545
- if (!(requestTime < maxRequestTimes)) return [3, 21];
546
- _f.label = 10;
547
- case 10:
548
- _f.trys.push([10, 15, , 18]);
549
- if (!(options.useWxCloud || this.useWxCloud)) return [3, 12];
550
- return [4, this.wxCloudCallFunction(url, options)];
551
- case 11:
552
- response = _f.sent();
553
- return [3, 14];
554
- case 12: return [4, this.baseRequest(url, options)];
555
- case 13:
556
- response = _f.sent();
557
- _f.label = 14;
558
- case 14:
559
- if (!!(response === null || response === void 0 ? void 0 : response.code)) {
560
- throw {
561
- error: response.code,
562
- error_description: response.message,
563
- error_uri: new URL(url).pathname,
564
- };
565
- }
566
- return [3, 21];
567
- case 15:
568
- responseError_1 = _f.sent();
569
- try {
570
- responseError_1.requestId = responseError_1.requestId || options.headers[RequestIdHeaderName] || '';
571
- }
572
- catch (error) { }
573
- if (!(options.withCredentials && responseError_1 && responseError_1.error === consts_1.ErrorType.UNAUTHENTICATED)) return [3, 17];
574
- return [4, this.setCredentials(null)];
575
- case 16:
576
- _f.sent();
577
- return [2, Promise.reject(responseError_1)];
578
- case 17:
579
- if (requestTime === retry || !responseError_1 || responseError_1.error !== 'unreachable') {
580
- return [2, Promise.reject(responseError_1)];
581
- }
582
- return [3, 18];
583
- case 18: return [4, this.sleep(OAuth2Client.retryInterval)];
584
- case 19:
585
- _f.sent();
586
- _f.label = 20;
587
- case 20:
588
- requestTime++;
589
- return [3, 9];
590
- case 21: return [2, response];
591
- }
592
- });
593
- });
594
- };
595
- OAuth2Client.prototype.wxCloudCallFunction = function (url, options) {
596
- var _a;
597
- return __awaiter(this, void 0, void 0, function () {
598
- var result, responseError, userAgent, error_3, responseResult, error_4;
599
- return __generator(this, function (_b) {
600
- switch (_b.label) {
601
- case 0:
602
- result = null;
603
- responseError = null;
604
- _b.label = 1;
605
- case 1:
606
- _b.trys.push([1, 7, , 8]);
607
- userAgent = '';
608
- _b.label = 2;
609
- case 2:
610
- _b.trys.push([2, 4, , 5]);
611
- return [4, wx.getRendererUserAgent()];
612
- case 3:
613
- userAgent = _b.sent();
614
- return [3, 5];
615
- case 4:
616
- error_3 = _b.sent();
617
- return [3, 5];
618
- case 5: return [4, this.wxCloud.callFunction({
619
- name: 'httpOverCallFunction',
620
- data: {
621
- url: url,
622
- method: options.method,
623
- headers: __assign({ origin: 'https://servicewechat.com', 'User-Agent': userAgent }, options.headers),
624
- body: options.body,
625
- },
626
- })];
627
- case 6:
628
- responseResult = (_b.sent()).result;
629
- if ((_a = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body) === null || _a === void 0 ? void 0 : _a.error_code) {
630
- responseError = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body;
631
- responseError.error_uri = (0, index_1.getPathName)(url);
632
- }
633
- else {
634
- result = responseResult === null || responseResult === void 0 ? void 0 : responseResult.body;
635
- }
636
- return [3, 8];
637
- case 7:
638
- error_4 = _b.sent();
639
- responseError = {
640
- error: consts_1.ErrorType.UNREACHABLE,
641
- error_description: error_4.message,
642
- error_uri: (0, index_1.getPathName)(url),
643
- };
644
- return [3, 8];
645
- case 8:
646
- if (responseError) {
647
- throw responseError;
648
- }
649
- else {
650
- return [2, result];
651
- }
652
- return [2];
653
- }
654
- });
655
- });
656
- };
657
- OAuth2Client.prototype.getCredentials = function () {
658
- return __awaiter(this, void 0, void 0, function () {
659
- var _this = this;
660
- return __generator(this, function (_a) {
661
- switch (_a.label) {
662
- case 0: return [4, this.initializePromise];
663
- case 1:
664
- _a.sent();
665
- return [2, this._acquireLock(-1, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
666
- return [2, this._getCredentials()];
667
- }); }); })];
668
- }
669
- });
670
- });
671
- };
672
- OAuth2Client.prototype.getCredentialsSync = function () {
673
- var credentials = this.localCredentials.getStorageCredentialsSync();
674
- return credentials;
675
- };
676
- OAuth2Client.prototype.getCredentialsAsync = function () {
677
- return this.getCredentials();
678
- };
679
- OAuth2Client.prototype.getScope = function () {
680
- var _a;
681
- return __awaiter(this, void 0, void 0, function () {
682
- var credentials, msg;
683
- return __generator(this, function (_b) {
684
- switch (_b.label) {
685
- case 0: return [4, this.localCredentials.getCredentials()];
686
- case 1:
687
- credentials = _b.sent();
688
- if (!credentials) {
689
- msg = 'credentials not found';
690
- (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
691
- return [2, this.unAuthenticatedError(msg)];
692
- }
693
- return [2, credentials.scope];
694
- }
695
- });
696
- });
697
- };
698
- OAuth2Client.prototype.getGroups = function () {
699
- var _a;
700
- return __awaiter(this, void 0, void 0, function () {
701
- var credentials, msg;
702
- return __generator(this, function (_b) {
703
- switch (_b.label) {
704
- case 0: return [4, this.localCredentials.getCredentials()];
705
- case 1:
706
- credentials = _b.sent();
707
- if (!credentials) {
708
- msg = 'credentials not found';
709
- (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
710
- return [2, this.unAuthenticatedError(msg)];
711
- }
712
- return [2, credentials.groups];
713
- }
714
- });
715
- });
716
- };
717
- OAuth2Client.prototype.refreshToken = function (credentials, options) {
718
- return __awaiter(this, void 0, void 0, function () {
719
- var _this = this;
720
- return __generator(this, function (_a) {
721
- switch (_a.label) {
722
- case 0: return [4, this.initializePromise];
723
- case 1:
724
- _a.sent();
725
- return [2, this._acquireLock(-1, function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
726
- return [2, this._refreshToken(credentials, options)];
727
- }); }); })];
728
- }
729
- });
730
- });
731
- };
732
- OAuth2Client.prototype._refreshToken = function (credentials, options) {
733
- return __awaiter(this, void 0, void 0, function () {
734
- var _this = this;
735
- return __generator(this, function (_a) {
736
- return [2, this.singlePromise.run('_refreshToken', function () { return __awaiter(_this, void 0, void 0, function () {
737
- var msg, newCredentials, error_5, msg;
738
- var _a, _b, _c, _d;
739
- return __generator(this, function (_f) {
740
- switch (_f.label) {
741
- case 0:
742
- if ((credentials === null || credentials === void 0 ? void 0 : credentials.scope) === consts_2.DEFAULT_NODE_ACCESS_SCOPE) {
743
- return [2, credentials];
744
- }
745
- if (!credentials || !credentials.refresh_token) {
746
- msg = 'no refresh token found in credentials';
747
- (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
748
- return [2, this.unAuthenticatedError(msg)];
749
- }
750
- _f.label = 1;
751
- case 1:
752
- _f.trys.push([1, 4, , 7]);
753
- return [4, this.refreshTokenFunc(credentials.refresh_token, credentials)];
754
- case 2:
755
- newCredentials = _f.sent();
756
- return [4, this.localCredentials.setCredentials(newCredentials)];
757
- case 3:
758
- _f.sent();
759
- (_b = this.eventBus) === null || _b === void 0 ? void 0 : _b.fire(consts_2.EVENTS.AUTH_STATE_CHANGED, { event: consts_2.AUTH_STATE_CHANGED_TYPE.TOKEN_REFRESHED });
760
- return [2, newCredentials];
761
- case 4:
762
- error_5 = _f.sent();
763
- if (options === null || options === void 0 ? void 0 : options.throwError) {
764
- throw error_5;
765
- }
766
- if (!(error_5.error === consts_1.ErrorType.INVALID_GRANT)) return [3, 6];
767
- return [4, this.localCredentials.setCredentials(null)];
768
- case 5:
769
- _f.sent();
770
- msg = error_5.error_description;
771
- (_c = this.onCredentialsError) === null || _c === void 0 ? void 0 : _c.call(this, { msg: msg });
772
- return [2, this.unAuthenticatedError(msg)];
773
- case 6:
774
- (_d = this.onCredentialsError) === null || _d === void 0 ? void 0 : _d.call(this, { msg: error_5.error_description });
775
- return [2, Promise.reject(error_5)];
776
- case 7: return [2];
777
- }
778
- });
779
- }); })];
780
- });
781
- });
782
- };
783
- OAuth2Client.prototype.anonymousLogin = function (credentials) {
784
- return __awaiter(this, void 0, void 0, function () {
785
- var _this = this;
786
- return __generator(this, function (_a) {
787
- return [2, this.singlePromise.run('_anonymousLogin', function () { return __awaiter(_this, void 0, void 0, function () {
788
- var c, _a;
789
- return __generator(this, function (_b) {
790
- switch (_b.label) {
791
- case 0:
792
- if (!this.anonymousSignInFunc) return [3, 4];
793
- return [4, this.anonymousSignInFunc(credentials)];
794
- case 1:
795
- c = _b.sent();
796
- _a = c;
797
- if (_a) return [3, 3];
798
- return [4, this.localCredentials.getCredentials()];
799
- case 2:
800
- _a = (_b.sent());
801
- _b.label = 3;
802
- case 3:
803
- credentials = _a;
804
- return [3, 6];
805
- case 4: return [4, this.anonymousSignIn(credentials)];
806
- case 5:
807
- credentials = _b.sent();
808
- _b.label = 6;
809
- case 6: return [2, credentials];
810
- }
811
- });
812
- }); })];
813
- });
814
- });
815
- };
816
- OAuth2Client.prototype.checkRetry = function (retry) {
817
- var responseError = null;
818
- if (typeof retry !== 'number' || retry < OAuth2Client.minRetry || retry > OAuth2Client.maxRetry) {
819
- responseError = {
820
- error: consts_1.ErrorType.UNREACHABLE,
821
- error_description: 'wrong options param: retry',
822
- };
823
- }
824
- if (responseError) {
825
- throw responseError;
826
- }
827
- return retry;
828
- };
829
- OAuth2Client.prototype.formatRetry = function (retry, defaultVale) {
830
- if (typeof retry === 'undefined') {
831
- return defaultVale;
832
- }
833
- return this.checkRetry(retry);
834
- };
835
- OAuth2Client.prototype.sleep = function (ms) {
836
- return __awaiter(this, void 0, void 0, function () {
837
- return __generator(this, function (_a) {
838
- return [2, new Promise(function (resolve) {
839
- setTimeout(function () {
840
- resolve();
841
- }, ms);
842
- })];
843
- });
844
- });
845
- };
846
- OAuth2Client.prototype.anonymousSignIn = function (credentials) {
847
- return __awaiter(this, void 0, void 0, function () {
848
- var _this = this;
849
- return __generator(this, function (_a) {
850
- return [2, this.singlePromise.run('_anonymous', function () { return __awaiter(_this, void 0, void 0, function () {
851
- var newCredentials, error_6;
852
- return __generator(this, function (_a) {
853
- switch (_a.label) {
854
- case 0:
855
- if (!credentials || credentials.scope !== 'anonymous') {
856
- return [2, this.unAuthenticatedError('no anonymous in credentials')];
857
- }
858
- _a.label = 1;
859
- case 1:
860
- _a.trys.push([1, 4, , 7]);
861
- return [4, this.request(consts_2.ApiUrls.AUTH_SIGN_IN_ANONYMOUSLY_URL, {
862
- method: 'POST',
863
- withBasicAuth: true,
864
- body: {},
865
- })];
866
- case 2:
867
- newCredentials = _a.sent();
868
- return [4, this.localCredentials.setCredentials(newCredentials)];
869
- case 3:
870
- _a.sent();
871
- return [2, newCredentials];
872
- case 4:
873
- error_6 = _a.sent();
874
- if (!(error_6.error === consts_1.ErrorType.INVALID_GRANT)) return [3, 6];
875
- return [4, this.localCredentials.setCredentials(null)];
876
- case 5:
877
- _a.sent();
878
- return [2, this.unAuthenticatedError(error_6.error_description)];
879
- case 6: return [2, Promise.reject(error_6)];
880
- case 7: return [2];
881
- }
882
- });
883
- }); })];
884
- });
885
- });
886
- };
887
- OAuth2Client.prototype.defaultRefreshTokenFunc = function (refreshToken, credentials) {
888
- var _a;
889
- return __awaiter(this, void 0, void 0, function () {
890
- var msg, url, newCredentials;
891
- return __generator(this, function (_b) {
892
- switch (_b.label) {
893
- case 0:
894
- if (refreshToken === undefined || refreshToken === '') {
895
- msg = 'refresh token not found';
896
- (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
897
- return [2, this.unAuthenticatedError(msg)];
898
- }
899
- url = consts_2.ApiUrls.AUTH_TOKEN_URL;
900
- if ((credentials === null || credentials === void 0 ? void 0 : credentials.version) === 'v2') {
901
- url = consts_2.ApiUrlsV2.AUTH_TOKEN_URL;
902
- }
903
- return [4, this.request(url, {
904
- method: 'POST',
905
- body: {
906
- client_id: this.clientId,
907
- client_secret: this.clientSecret,
908
- grant_type: 'refresh_token',
909
- refresh_token: refreshToken,
910
- },
911
- })];
912
- case 1:
913
- newCredentials = _b.sent();
914
- return [2, __assign(__assign({}, newCredentials), { version: (credentials === null || credentials === void 0 ? void 0 : credentials.version) || 'v1' })];
915
- }
916
- });
917
- });
918
- };
919
- OAuth2Client.prototype.getDeviceId = function () {
920
- return __awaiter(this, void 0, void 0, function () {
921
- var deviceId;
922
- return __generator(this, function (_a) {
923
- switch (_a.label) {
924
- case 0:
925
- if (this.deviceID) {
926
- return [2, this.deviceID];
927
- }
928
- return [4, this.storage.getItem(DeviceIdSectionName)];
929
- case 1:
930
- deviceId = _a.sent();
931
- if (!!(typeof deviceId === 'string' && deviceId.length >= 16 && deviceId.length <= 48)) return [3, 3];
932
- deviceId = (0, uuid_1.uuidv4)();
933
- return [4, this.storage.setItem(DeviceIdSectionName, deviceId)];
934
- case 2:
935
- _a.sent();
936
- _a.label = 3;
937
- case 3:
938
- this.deviceID = deviceId;
939
- return [2, deviceId];
940
- }
941
- });
942
- });
943
- };
944
- OAuth2Client.prototype.unAuthenticatedError = function (err) {
945
- var respErr = {
946
- error: consts_1.ErrorType.UNAUTHENTICATED,
947
- error_description: err,
948
- };
949
- return Promise.reject(respErr);
950
- };
951
- OAuth2Client.prototype._debug = function () {
952
- var args = [];
953
- for (var _i = 0; _i < arguments.length; _i++) {
954
- args[_i] = arguments[_i];
955
- }
956
- if (this.logDebugMessages) {
957
- console.log.apply(console, __spreadArray(['[OAuth2Client]'], args, false));
958
- }
959
- };
960
- OAuth2Client.prototype._initialize = function () {
961
- return __awaiter(this, void 0, void 0, function () {
962
- var data, error, callbackError_1, err_1, error_7;
963
- var _a;
964
- return __generator(this, function (_b) {
965
- switch (_b.label) {
966
- case 0:
967
- _b.trys.push([0, 11, 12, 13]);
968
- if (!this.getInitialSession) {
969
- this._debug('#_initialize()', 'no getInitialSession callback set, skipping');
970
- return [2, { error: null }];
971
- }
972
- this._debug('#_initialize()', 'calling getInitialSession callback');
973
- _b.label = 1;
974
- case 1:
975
- _b.trys.push([1, 9, , 10]);
976
- return [4, this.getInitialSession()];
977
- case 2:
978
- data = (_a = _b.sent(), _a.data), error = _a.error;
979
- if (!(data === null || data === void 0 ? void 0 : data.session)) return [3, 4];
980
- this._debug('#_initialize()', 'session obtained from getInitialSession', data.session);
981
- return [4, this.localCredentials.setCredentials(data === null || data === void 0 ? void 0 : data.session)];
982
- case 3:
983
- _b.sent();
984
- _b.label = 4;
985
- case 4:
986
- if (!this.onInitialSessionObtained) return [3, 8];
987
- this._debug('#_initialize()', 'calling onInitialSessionObtained callback');
988
- _b.label = 5;
989
- case 5:
990
- _b.trys.push([5, 7, , 8]);
991
- return [4, this.onInitialSessionObtained(data, error)];
992
- case 6:
993
- _b.sent();
994
- return [3, 8];
995
- case 7:
996
- callbackError_1 = _b.sent();
997
- this._debug('#_initialize()', 'error in onInitialSessionObtained', callbackError_1);
998
- return [3, 8];
999
- case 8:
1000
- if (error) {
1001
- this._debug('#_initialize()', 'error from getInitialSession', error);
1002
- return [2, { error: error }];
1003
- }
1004
- return [2, { error: null }];
1005
- case 9:
1006
- err_1 = _b.sent();
1007
- this._debug('#_initialize()', 'exception during getInitialSession', err_1);
1008
- return [2, { error: err_1 instanceof Error ? err_1 : new Error(String(err_1)) }];
1009
- case 10: return [3, 13];
1010
- case 11:
1011
- error_7 = _b.sent();
1012
- this._debug('#_initialize()', 'unexpected error', error_7);
1013
- return [2, { error: error_7 instanceof Error ? error_7 : new Error(String(error_7)) }];
1014
- case 12:
1015
- this._debug('#_initialize()', 'end');
1016
- return [7];
1017
- case 13: return [2];
1018
- }
1019
- });
1020
- });
1021
- };
1022
- OAuth2Client.prototype._acquireLock = function (acquireTimeout, fn) {
1023
- return __awaiter(this, void 0, void 0, function () {
1024
- var last_1, result_1, result_2, waitOn;
1025
- var _this = this;
1026
- return __generator(this, function (_a) {
1027
- switch (_a.label) {
1028
- case 0:
1029
- this._debug('#_acquireLock', 'begin', acquireTimeout);
1030
- _a.label = 1;
1031
- case 1:
1032
- _a.trys.push([1, , 10, 11]);
1033
- if (this.lockAcquired) {
1034
- last_1 = this.pendingInLock.length ? this.pendingInLock[this.pendingInLock.length - 1] : Promise.resolve();
1035
- result_1 = (function () { return __awaiter(_this, void 0, void 0, function () {
1036
- return __generator(this, function (_a) {
1037
- switch (_a.label) {
1038
- case 0: return [4, last_1];
1039
- case 1:
1040
- _a.sent();
1041
- return [4, fn()];
1042
- case 2: return [2, _a.sent()];
1043
- }
1044
- });
1045
- }); })();
1046
- this.pendingInLock.push((function () { return __awaiter(_this, void 0, void 0, function () {
1047
- var _e_1;
1048
- return __generator(this, function (_a) {
1049
- switch (_a.label) {
1050
- case 0:
1051
- _a.trys.push([0, 2, , 3]);
1052
- return [4, result_1];
1053
- case 1:
1054
- _a.sent();
1055
- return [3, 3];
1056
- case 2:
1057
- _e_1 = _a.sent();
1058
- return [3, 3];
1059
- case 3: return [2];
1060
- }
1061
- });
1062
- }); })());
1063
- return [2, result_1];
1064
- }
1065
- this._debug('#_acquireLock', 'acquiring lock for client', this.clientId);
1066
- _a.label = 2;
1067
- case 2:
1068
- _a.trys.push([2, , 8, 9]);
1069
- this.lockAcquired = true;
1070
- result_2 = fn();
1071
- this.pendingInLock.push((function () { return __awaiter(_this, void 0, void 0, function () {
1072
- var _e_2;
1073
- return __generator(this, function (_a) {
1074
- switch (_a.label) {
1075
- case 0:
1076
- _a.trys.push([0, 2, , 3]);
1077
- return [4, result_2];
1078
- case 1:
1079
- _a.sent();
1080
- return [3, 3];
1081
- case 2:
1082
- _e_2 = _a.sent();
1083
- return [3, 3];
1084
- case 3: return [2];
1085
- }
1086
- });
1087
- }); })());
1088
- return [4, result_2];
1089
- case 3:
1090
- _a.sent();
1091
- _a.label = 4;
1092
- case 4:
1093
- if (!this.pendingInLock.length) return [3, 6];
1094
- waitOn = __spreadArray([], this.pendingInLock, true);
1095
- return [4, Promise.all(waitOn)];
1096
- case 5:
1097
- _a.sent();
1098
- this.pendingInLock.splice(0, waitOn.length);
1099
- return [3, 4];
1100
- case 6: return [4, result_2];
1101
- case 7: return [2, _a.sent()];
1102
- case 8:
1103
- this._debug('#_acquireLock', 'releasing lock for client', this.clientId);
1104
- this.lockAcquired = false;
1105
- return [7];
1106
- case 9: return [3, 11];
1107
- case 10:
1108
- this._debug('#_acquireLock', 'end');
1109
- return [7];
1110
- case 11: return [2];
1111
- }
1112
- });
1113
- });
1114
- };
1115
- OAuth2Client.prototype._getCredentials = function () {
1116
- var _a, _b, _c;
1117
- return __awaiter(this, void 0, void 0, function () {
1118
- var credentials, msg, error_8, msg;
1119
- return __generator(this, function (_d) {
1120
- switch (_d.label) {
1121
- case 0: return [4, this.localCredentials.getCredentials()];
1122
- case 1:
1123
- credentials = _d.sent();
1124
- if ((credentials === null || credentials === void 0 ? void 0 : credentials.scope) === consts_2.DEFAULT_NODE_ACCESS_SCOPE) {
1125
- return [2, credentials];
1126
- }
1127
- if (!credentials) {
1128
- msg = 'credentials not found';
1129
- (_a = this.onCredentialsError) === null || _a === void 0 ? void 0 : _a.call(this, { msg: msg });
1130
- return [2, this.unAuthenticatedError(msg)];
1131
- }
1132
- if (!isCredentialsExpired(credentials)) return [3, 12];
1133
- if (!credentials.refresh_token) return [3, 9];
1134
- _d.label = 2;
1135
- case 2:
1136
- _d.trys.push([2, 4, , 8]);
1137
- return [4, this._refreshToken(credentials)];
1138
- case 3:
1139
- credentials = _d.sent();
1140
- return [3, 8];
1141
- case 4:
1142
- error_8 = _d.sent();
1143
- if (!(credentials.scope === 'anonymous')) return [3, 6];
1144
- return [4, this.anonymousLogin(credentials)];
1145
- case 5:
1146
- credentials = _d.sent();
1147
- return [3, 7];
1148
- case 6:
1149
- (_b = this.onCredentialsError) === null || _b === void 0 ? void 0 : _b.call(this, { msg: error_8.error_description });
1150
- return [2, Promise.reject(error_8)];
1151
- case 7: return [3, 8];
1152
- case 8: return [3, 12];
1153
- case 9:
1154
- if (!(credentials.scope === 'anonymous')) return [3, 11];
1155
- return [4, this.anonymousLogin(credentials)];
1156
- case 10:
1157
- credentials = _d.sent();
1158
- return [3, 12];
1159
- case 11:
1160
- msg = 'no refresh token found in credentials';
1161
- (_c = this.onCredentialsError) === null || _c === void 0 ? void 0 : _c.call(this, { msg: msg });
1162
- return [2, this.unAuthenticatedError(msg)];
1163
- case 12: return [2, credentials];
1164
- }
1165
- });
1166
- });
1167
- };
1168
- OAuth2Client.defaultRetry = 2;
1169
- OAuth2Client.minRetry = 0;
1170
- OAuth2Client.maxRetry = 5;
1171
- OAuth2Client.retryInterval = 1000;
1172
- return OAuth2Client;
1173
- }());
1174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBb0M7QUFDcEMseUNBT3VCO0FBYXZCLHNDQUFzQztBQUN0Qyx3Q0FBNEM7QUFFNUMsbUVBQWdFO0FBQ2hFLDBDQUF3QztBQUN4QyxrQ0FBa0M7QUFHbEMsa0RBQWdEO0FBRWhELElBQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFBO0FBQzFDLElBQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFBO0FBQ3hDLElBQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFBO0FBV2hDLElBQU0sY0FBYyxHQUFvQixVQUFtQixHQUFXLEVBQUUsT0FBd0I7Ozs7OztvQkFDakcsTUFBTSxHQUFhLElBQUksQ0FBQTtvQkFDdkIsYUFBYSxHQUF5QixJQUFJLENBQUE7Ozs7b0JBR3RDLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtvQkFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7d0JBQ3ZCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO3FCQUMzQjtvQkFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksT0FBTyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDNUQsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtxQkFDcEQ7b0JBQ2dDLFdBQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBQTs7b0JBQXhELGNBQWMsR0FBYSxTQUE2QjtvQkFDekMsV0FBTSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUE7O29C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QUE7d0JBQzNELFdBQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFLLENBQUMsRUFBQTs7Ozs2QkFHdkIsQ0FBQSxXQUFXLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQSxFQUFqQyxlQUFpQzt3QkFDNUIsV0FBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFBOzt3QkFBcEQsV0FBVyxHQUFHLFNBQXNDLENBQUE7Ozt3QkFFOUMsR0FBRyxHQUFHLHVDQUF1QyxDQUFBO3dCQUNuRCxNQUFBLElBQUksQ0FBQyxrQkFBa0IscURBQUcsRUFBRSxHQUFHLEtBQUEsRUFBRSxDQUFDLENBQUE7d0JBQ2xDLFdBQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFBOzZCQUd6QyxXQUFPLFdBQVcsRUFBQTs7OztLQUNuQjtJQTVzQmMseUJBQVksR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNoQixxQkFBUSxHQUFHLENBQUMsQUFBSixDQUFJO0lBQ1oscUJBQVEsR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNaLDBCQUFhLEdBQUcsSUFBSSxBQUFQLENBQU87SUEwc0JyQyxtQkFBQztDQUFBLEFBOXNCRCxJQThzQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFcnJvclR5cGUgfSBmcm9tICcuL2NvbnN0cydcbmltcG9ydCB7XG4gIEFwaVVybHMsXG4gIEFwaVVybHNWMixcbiAgQVVUSF9BUElfUFJFRklYLFxuICBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRSxcbiAgREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRSxcbiAgRVZFTlRTLFxufSBmcm9tICcuLi9hdXRoL2NvbnN0cydcblxuaW1wb3J0IHsgQXV0aENsaWVudCwgU2ltcGxlU3RvcmFnZSB9IGZyb20gJy4vaW50ZXJmYWNlJ1xuXG5pbXBvcnQge1xuICBDcmVkZW50aWFscyxcbiAgUmVzcG9uc2VFcnJvcixcbiAgUmVxdWVzdE9wdGlvbnMsXG4gIFJlcXVlc3RGdW5jdGlvbixcbiAgT0F1dGgyQ2xpZW50T3B0aW9ucyxcbiAgQXV0aENsaWVudFJlcXVlc3RPcHRpb25zLFxufSBmcm9tICcuL21vZGVscydcblxuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSAnLi4vdXRpbHMvdXVpZCdcbmltcG9ydCB7IGdldFBhdGhOYW1lIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXgnXG5cbmltcG9ydCB7IFNpbmdsZVByb21pc2UgfSBmcm9tICcuLi91dGlscy9mdW5jdGlvbi9zaW5nbGUtcHJvbWlzZSdcbmltcG9ydCB7IHdlQnRvYSB9IGZyb20gJy4uL3V0aWxzL2Jhc2U2NCdcbmltcG9ydCB7IGlzTXAgfSBmcm9tICcuLi91dGlscy9tcCdcbmltcG9ydCB7IEF1dGhPcHRpb25zIH0gZnJvbSAnLi4vYXV0aC9hcGlzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbmZpZyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgeyBsYW5nRXZlbnQgfSBmcm9tICdAY2xvdWRiYXNlL3V0aWxpdGllcydcblxuY29uc3QgUmVxdWVzdElkSGVhZGVyTmFtZSA9ICd4LXJlcXVlc3QtaWQnXG5jb25zdCBEZXZpY2VJZEhlYWRlck5hbWUgPSAneC1kZXZpY2UtaWQnXG5jb25zdCBEZXZpY2VJZFNlY3Rpb25OYW1lID0gJ2RldmljZV9pZCdcblxuZGVjbGFyZSBjb25zdCB3eDogYW55XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9SZXNwb25zZUVycm9yT3B0aW9ucyB7XG4gIGVycm9yPzogRXJyb3JUeXBlXG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbFxuICBlcnJvcl91cmk/OiBzdHJpbmcgfCBudWxsXG4gIGRldGFpbHM/OiBhbnkgfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0UmVxdWVzdDogUmVxdWVzdEZ1bmN0aW9uID0gYXN5bmMgZnVuY3Rpb24gPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgbGV0IHJlc3VsdDogVCB8IG51bGwgPSBudWxsXG4gIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgdHJ5IHtcbiAgICAvLyBPYmplY3RzIG11c3QgYmUgY29waWVkIHRvIHByZXZlbnQgbW9kaWZpY2F0aW9uIG9mIGRhdGEgc3VjaCBhcyBib2R5LlxuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucylcbiAgICBpZiAoIWNvcHlPcHRpb25zLm1ldGhvZCkge1xuICAgICAgY29weU9wdGlvbnMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgaWYgKGNvcHlPcHRpb25zLmJvZHkgJiYgdHlwZW9mIGNvcHlPcHRpb25zLmJvZHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb3B5T3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoY29weU9wdGlvbnMuYm9keSlcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2VSZXN1bHQ6IFJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBjb3B5T3B0aW9ucylcbiAgICBjb25zdCBqc29uUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZVJlc3VsdC5qc29uKClcbiAgICBpZiAoanNvblJlc3BvbnNlPy5lcnJvcikge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IGpzb25SZXNwb25zZSBhcyBSZXNwb25zZUVycm9yXG4gICAgICByZXNwb25zZUVycm9yLmVycm9yX3VyaSA9IG5ldyBVUkwodXJsKS5wYXRobmFtZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBqc29uUmVzcG9uc2UgYXMgVFxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuICAgICAgZXJyb3JfdXJpOiBuZXcgVVJMKHVybCkucGF0aG5hbWUsXG4gICAgfVxuICB9XG4gIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdG9SZXNwb25zZUVycm9yID0gKGVycm9yOiBSZXNwb25zZUVycm9yIHwgRXJyb3IsIG9wdGlvbnM/OiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zKTogUmVzcG9uc2VFcnJvciA9PiB7XG4gIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yXG4gIGNvbnN0IGZvcm1hdE9wdGlvbnM6IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IGZvcm1hdE9wdGlvbnMuZXJyb3JfdXJpLFxuICAgICAgZGV0YWlsczogZm9ybWF0T3B0aW9ucy5kZXRhaWxzIHx8IGVycm9yLnN0YWNrLFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmb3JtYXRFcnJvcjogVG9SZXNwb25zZUVycm9yT3B0aW9ucyA9IGVycm9yIHx8IHt9XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBmb3JtYXRPcHRpb25zLmVycm9yIHx8IGZvcm1hdEVycm9yLmVycm9yIHx8IEVycm9yVHlwZS5MT0NBTCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBmb3JtYXRPcHRpb25zLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGZvcm1hdEVycm9yLmVycm9yX2Rlc2NyaXB0aW9uLFxuICAgICAgZXJyb3JfdXJpOiBmb3JtYXRPcHRpb25zLmVycm9yX3VyaSB8fCBmb3JtYXRFcnJvci5lcnJvcl91cmksXG4gICAgICBkZXRhaWxzOiBmb3JtYXRPcHRpb25zLmRldGFpbHMgfHwgZm9ybWF0RXJyb3IuZGV0YWlscyxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlRXJyb3Jcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSByZXF1ZXN0IGlkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSZXF1ZXN0SWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHV1aWR2NCgpXG59XG5cbi8qKlxuICogRGVmYXVsdCBTdG9yYWdlLlxuICovXG5jbGFzcyBEZWZhdWx0U3RvcmFnZSBpbXBsZW1lbnRzIFNpbXBsZVN0b3JhZ2Uge1xuICAvKipcbiAgICog57yT5a2Ya2V557uf5LiA5L2/55So5ZCO57yA5Yy65YiGXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vudjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Iob3B0cz86IHsgZW52OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuX2VudiA9IG9wdHM/LmVudiB8fCAnJ1xuICB9XG4gIC8qKlxuICAgKiBHZXQgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgYXN5bmMgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIGFzeW5jIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogU2V0IGl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqL1xuICBhc3luYyBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gLCB2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBnZXRJdGVtU3luYyhrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGl0ZW0gc3luYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgcmVtb3ZlSXRlbVN5bmMoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogU2V0IGl0ZW0gc3luYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICovXG4gIHNldEl0ZW1TeW5jKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gLCB2YWx1ZSlcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFN0b3JhZ2UgPSBuZXcgRGVmYXVsdFN0b3JhZ2UoKVxuXG5pbnRlcmZhY2UgTG9jYWxDcmVkZW50aWFsc09wdGlvbnMge1xuICB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcbiAgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBjbGllbnRJZDogc3RyaW5nXG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBjcmVkZW50aWFscyBpcyBleHBpcmVkLlxuICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ3JlZGVudGlhbHNFeHBpcmVkKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IGJvb2xlYW4ge1xuICBsZXQgaXNFeHBpcmVkID0gdHJ1ZVxuICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQgJiYgY3JlZGVudGlhbHM/LmFjY2Vzc190b2tlbikge1xuICAgIGlzRXhwaXJlZCA9IGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQgPCBuZXcgRGF0ZSgpXG4gIH1cbiAgcmV0dXJuIGlzRXhwaXJlZFxufVxuXG4vKipcbiAqIExvY2FsIGNyZWRlbnRpYWxzLlxuICogTG9jYWwgY3JlZGVudGlhbHMsIHdpdGggbWVtb3J5IGNhY2hlIGFuZCBzdG9yYWdlIGNhY2hlLlxuICogSWYgdGhlIG1lbW9yeSBjYWNoZSBleHBpcmVzLCB0aGUgc3RvcmFnZSBjYWNoZSBpcyBhdXRvbWF0aWNhbGx5IGxvYWRlZC5cbiAqL1xuY2xhc3MgTG9jYWxDcmVkZW50aWFscyB7XG4gIHByaXZhdGUgdG9rZW5TZWN0aW9uTmFtZTogc3RyaW5nXG5cbiAgcHJpdmF0ZSBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG5cbiAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nXG5cbiAgcHJpdmF0ZSBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCBudWxsID0gbnVsbFxuICAvLyDmnaXoh6phY2Nlc3NLZXnnmoTouqvku73vvIzkuI3mjIHkuYXljJZcbiAgcHJpdmF0ZSBhY2Nlc3NLZXlDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCBudWxsID0gbnVsbFxuXG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG51bGxcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtMb2NhbENyZWRlbnRpYWxzT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTG9jYWxDcmVkZW50aWFsc09wdGlvbnMpIHtcbiAgICB0aGlzLnRva2VuU2VjdGlvbk5hbWUgPSBvcHRpb25zLnRva2VuU2VjdGlvbk5hbWVcbiAgICB0aGlzLnN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2VcbiAgICB0aGlzLmNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZFxuICAgIHRoaXMuc2luZ2xlUHJvbWlzZSA9IG5ldyBTaW5nbGVQcm9taXNlKHsgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQgfSlcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCBudWxsXG4gIH1cblxuICBwdWJsaWMgZ2V0U3RvcmFnZUNyZWRlbnRpYWxzU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBudWxsXG4gICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtU3luYyh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgaWYgKHRva2VuU3RyICE9PSB1bmRlZmluZWQgJiYgdG9rZW5TdHIgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2F0KSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgY3JlZGVudGlhbHMgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLyoqXG4gICAqIHNldENyZWRlbnRpYWxzIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfaW4pIHtcbiAgICAgIGlmICghY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAoY3JlZGVudGlhbHMuZXhwaXJlc19pbiAtIDMwKSAqIDEwMDApXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjcmVkZW50aWFscylcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lLCB0b2tlblN0cilcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsc1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNldCBjcmVkZW50aWFscyBmcm9tIGFjY2Vzc0tleVxuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIHNldEFjY2Vzc0tleUNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLmFjY2Vzc0tleUNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHNcbiAgICAvLyBub2RlIHNkayDlnLrmma/kuIvnm7TmjqXkvb/nlKhhY2Nlc3NLZXnouqvku71cbiAgICBpZiAoY3JlZGVudGlhbHMuc2NvcGUgPT09IERFRkFVTFRfTk9ERV9BQ0NFU1NfU0NPUEUpIHtcbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3JlZGVudGlhbHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdnZXRDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZCh0aGlzLmNyZWRlbnRpYWxzKSkge1xuICAgICAgICBjb25zdCB7IGNyZWRlbnRpYWxzLCBpc0FjY2Vzc0tleUNyZWRlbnRpYWxzIH0gPSBhd2FpdCB0aGlzLmdldFN0b3JhZ2VDcmVkZW50aWFscygpXG4gICAgICAgIGlmIChpc0FjY2Vzc0tleUNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0b3JhZ2UgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFN0b3JhZ2VDcmVkZW50aWFscygpOiBQcm9taXNlPHsgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgbnVsbDsgaXNBY2Nlc3NLZXlDcmVkZW50aWFsczogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19nZXRTdG9yYWdlQ3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgICAgbGV0IGlzQWNjZXNzS2V5Q3JlZGVudGlhbHMgPSBmYWxzZVxuICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIGlmICghIXRva2VuU3RyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSB0aGlzLmFjY2Vzc0tleUNyZWRlbnRpYWxzIHx8IG51bGxcbiAgICAgICAgaXNBY2Nlc3NLZXlDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGNyZWRlbnRpYWxzLCBpc0FjY2Vzc0tleUNyZWRlbnRpYWxzIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogT0F1dGgyQ2xpZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBPQXV0aDJDbGllbnQgaW1wbGVtZW50cyBBdXRoQ2xpZW50IHtcbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdFJldHJ5ID0gMlxuICBwcml2YXRlIHN0YXRpYyBtaW5SZXRyeSA9IDBcbiAgcHJpdmF0ZSBzdGF0aWMgbWF4UmV0cnkgPSA1XG4gIHByaXZhdGUgc3RhdGljIHJldHJ5SW50ZXJ2YWwgPSAxMDAwXG5cbiAgcHVibGljIGxvY2FsQ3JlZGVudGlhbHM6IExvY2FsQ3JlZGVudGlhbHNcbiAgLyoqXG4gICAqIEtlZXBzIHRyYWNrIG9mIHRoZSBhc3luYyBjbGllbnQgaW5pdGlhbGl6YXRpb24uXG4gICAqIFdoZW4gbnVsbCBvciBub3QgeWV0IHJlc29sdmVkIHRoZSBhdXRoIHN0YXRlIGlzIGB1bmtub3duYFxuICAgKiBPbmNlIHJlc29sdmVkIHRoZSBhdXRoIHN0YXRlIGlzIGtub3duIGFuZCBpdCdzIHNhZmUgdG8gY2FsbCBhbnkgZnVydGhlciBjbGllbnQgbWV0aG9kcy5cbiAgICovXG4gIHB1YmxpYyBpbml0aWFsaXplUHJvbWlzZTogUHJvbWlzZTx7IGVycm9yOiBFcnJvciB8IG51bGwgfT4gfCBudWxsID0gbnVsbFxuICBwcm90ZWN0ZWQgbG9ja0FjcXVpcmVkID0gZmFsc2VcbiAgcHJvdGVjdGVkIHBlbmRpbmdJbkxvY2s6IFByb21pc2U8YW55PltdID0gW11cbiAgcHJvdGVjdGVkIGxvZ0RlYnVnTWVzc2FnZXM6IGJvb2xlYW5cbiAgcHJvdGVjdGVkIGdldEluaXRpYWxTZXNzaW9uPzogKCkgPT4gUHJvbWlzZTx7XG4gICAgZGF0YTogeyBzZXNzaW9uOiBDcmVkZW50aWFsczsgdXNlcj86IGFueSB9IHwgbnVsbFxuICAgIGVycm9yOiBFcnJvciB8IG51bGxcbiAgfT5cbiAgcHJpdmF0ZSBhcGlPcmlnaW46IHN0cmluZ1xuICBwcml2YXRlIGFwaVBhdGg6IHN0cmluZ1xuICBwcml2YXRlIGNsaWVudElkOiBzdHJpbmdcbiAgcHJpdmF0ZSBpMThuOiBJQ2xvdWRiYXNlQ29uZmlnWydpMThuJ11cbiAgcHJpdmF0ZSByZXRyeTogbnVtYmVyXG4gIHByaXZhdGUgY2xpZW50U2VjcmV0Pzogc3RyaW5nXG4gIHByaXZhdGUgYmFzZVJlcXVlc3Q6IDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFQ+XG4gIHByaXZhdGUgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBwcml2YXRlIGRldmljZUlEPzogc3RyaW5nXG4gIHByaXZhdGUgdG9rZW5JblVSTD86IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5GdW5jOiAocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzPlxuICBwcml2YXRlIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG51bGxcbiAgcHJpdmF0ZSBhbm9ueW1vdXNTaWduSW5GdW5jOiAoQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHMgfCB2b2lkPlxuICBwcml2YXRlIHd4Q2xvdWQ6IGFueVxuICBwcml2YXRlIHVzZVd4Q2xvdWQ6IGJvb2xlYW5cbiAgcHJpdmF0ZSBldmVudEJ1czogYW55XG4gIHByaXZhdGUgYmFzaWNBdXRoOiBzdHJpbmdcbiAgcHJpdmF0ZSBvbkNyZWRlbnRpYWxzRXJyb3I6IEF1dGhPcHRpb25zWydvbkNyZWRlbnRpYWxzRXJyb3InXSB8IHVuZGVmaW5lZFxuICBwcml2YXRlIG9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZD86IChkYXRhOiB7IHNlc3Npb246IENyZWRlbnRpYWxzOyB1c2VyPzogYW55IH0sIGVycm9yPzogYW55KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge09BdXRoMkNsaWVudE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9BdXRoMkNsaWVudE9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMuY2xpZW50U2VjcmV0KSB7XG4gICAgICBvcHRpb25zLmNsaWVudFNlY3JldCA9ICcnXG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmNsaWVudElkICYmIG9wdGlvbnMuZW52KSB7XG4gICAgICBvcHRpb25zLmNsaWVudElkID0gb3B0aW9ucy5lbnZcbiAgICB9XG5cbiAgICB0aGlzLmFwaU9yaWdpbiA9IG9wdGlvbnMuYXBpT3JpZ2luXG4gICAgdGhpcy5hcGlQYXRoID0gb3B0aW9ucy5hcGlQYXRoIHx8IEFVVEhfQVBJX1BSRUZJWFxuICAgIHRoaXMuY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkXG4gICAgdGhpcy5pMThuID0gb3B0aW9ucy5pMThuXG4gICAgdGhpcy5ldmVudEJ1cyA9IG9wdGlvbnMuZXZlbnRCdXNcbiAgICB0aGlzLnNpbmdsZVByb21pc2UgPSBuZXcgU2luZ2xlUHJvbWlzZSh7IGNsaWVudElkOiB0aGlzLmNsaWVudElkIH0pXG4gICAgdGhpcy5yZXRyeSA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgT0F1dGgyQ2xpZW50LmRlZmF1bHRSZXRyeSlcbiAgICBpZiAob3B0aW9ucy5iYXNlUmVxdWVzdCkge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IG9wdGlvbnMuYmFzZVJlcXVlc3RcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IGRlZmF1bHRSZXF1ZXN0XG4gICAgfVxuICAgIHRoaXMudG9rZW5JblVSTCA9IG9wdGlvbnMudG9rZW5JblVSTFxuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVyc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2UgfHwgZGVmYXVsdFN0b3JhZ2VcbiAgICB0aGlzLmxvY2FsQ3JlZGVudGlhbHMgPSBuZXcgTG9jYWxDcmVkZW50aWFscyh7XG4gICAgICB0b2tlblNlY3Rpb25OYW1lOiBgY3JlZGVudGlhbHNfJHtvcHRpb25zLmNsaWVudElkfWAsXG4gICAgICBzdG9yYWdlOiB0aGlzLnN0b3JhZ2UsXG4gICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZCxcbiAgICB9KVxuXG4gICAgdGhpcy5jbGllbnRTZWNyZXQgPSBvcHRpb25zLmNsaWVudFNlY3JldFxuICAgIGlmIChvcHRpb25zLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmJhc2ljQXV0aCA9IGBCYXNpYyAke3dlQnRvYShgJHtvcHRpb25zLmNsaWVudElkfToke3RoaXMuY2xpZW50U2VjcmV0fWApfWBcbiAgICB9XG4gICAgdGhpcy53eENsb3VkID0gb3B0aW9ucy53eENsb3VkXG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc01wKCkpIHtcbiAgICAgICAgdGhpcy51c2VXeENsb3VkID0gb3B0aW9ucy51c2VXeENsb3VkXG4gICAgICAgIGlmICh0aGlzLnd4Q2xvdWQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmVudikge1xuICAgICAgICAgIHd4LmNsb3VkLmluaXQoeyBlbnY6IG9wdGlvbnMuZW52IH0pXG4gICAgICAgICAgdGhpcy53eENsb3VkID0gd3guY2xvdWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvL1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hUb2tlbkZ1bmMgPSBvcHRpb25zLnJlZnJlc2hUb2tlbkZ1bmMgfHwgdGhpcy5kZWZhdWx0UmVmcmVzaFRva2VuRnVuY1xuICAgIHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYyA9IG9wdGlvbnMuYW5vbnltb3VzU2lnbkluRnVuY1xuICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yID0gb3B0aW9ucy5vbkNyZWRlbnRpYWxzRXJyb3JcblxuICAgIC8vIE5ldyBvcHRpb25zIGZvciBzZXNzaW9uIGRldGVjdGlvblxuICAgIHRoaXMuZ2V0SW5pdGlhbFNlc3Npb24gPSBvcHRpb25zLmdldEluaXRpYWxTZXNzaW9uXG4gICAgdGhpcy5vbkluaXRpYWxTZXNzaW9uT2J0YWluZWQgPSBvcHRpb25zLm9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZFxuICAgIHRoaXMubG9nRGVidWdNZXNzYWdlcyA9IG9wdGlvbnMuZGVidWcgPz8gZmFsc2VcblxuICAgIGxhbmdFdmVudC5idXMub24obGFuZ0V2ZW50LkxBTkdfQ0hBTkdFX0VWRU5ULCAocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuaTE4biA9IHBhcmFtcy5kYXRhPy5pMThuIHx8IHRoaXMuaTE4blxuICAgIH0pXG5cbiAgICAvLyBOb3RlOiBBdXRvLWluaXRpYWxpemUgaXMgTk9UIGNhbGxlZCBoZXJlIHRvIGFsbG93IENsb3VkYmFzZU9BdXRoIHRvIHNldCBnZXRJbml0aWFsU2Vzc2lvbiBmaXJzdFxuICAgIC8vIENsb3VkYmFzZU9BdXRoLmNvbnN0cnVjdG9yIHdpbGwgY2FsbCBpbml0aWFsaXplKCkgYWZ0ZXIgc2V0dGluZyB1cCB0aGUgY2FsbGJhY2tcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnZXRJbml0aWFsU2Vzc2lvbiBjYWxsYmFjay5cbiAgICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemUoKSB0byBnZXQgdGhlIGluaXRpYWwgc2Vzc2lvbiAoZS5nLiwgZnJvbSBPQXV0aCBjYWxsYmFjayBpbiBVUkwpLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGdldCBpbml0aWFsIHNlc3Npb25cbiAgICovXG4gIHB1YmxpYyBzZXRHZXRJbml0aWFsU2Vzc2lvbihjYWxsYmFjazogKCkgPT4gUHJvbWlzZTx7XG4gICAgZGF0YTogeyBzZXNzaW9uOiBDcmVkZW50aWFsczsgdXNlcj86IGFueSB9IHwgbnVsbFxuICAgIGVycm9yOiBFcnJvciB8IG51bGxcbiAgfT4sKTogdm9pZCB7XG4gICAgdGhpcy5nZXRJbml0aWFsU2Vzc2lvbiA9IGNhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgb25Jbml0aWFsU2Vzc2lvbk9idGFpbmVkIGNhbGxiYWNrLlxuICAgKiBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgYWZ0ZXIgaW5pdGlhbCBzZXNzaW9uIGlzIG9idGFpbmVkIGFuZCBzdG9yZWQsXG4gICAqIGFsbG93aW5nIHVwcGVyIGxheWVycyB0byBoYW5kbGUgdXNlciBpbmZvIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHNlc3Npb24gYW5kIHVzZXIgZGF0YVxuICAgKi9cbiAgcHVibGljIHNldE9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZChjYWxsYmFjazogKGRhdGE6IHsgc2Vzc2lvbjogQ3JlZGVudGlhbHM7IHVzZXI/OiBhbnkgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sKTogdm9pZCB7XG4gICAgdGhpcy5vbkluaXRpYWxTZXNzaW9uT2J0YWluZWQgPSBjYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjbGllbnQgc2Vzc2lvbiBlaXRoZXIgZnJvbSB0aGUgdXJsIG9yIGZyb20gc3RvcmFnZS5cbiAgICogVGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBjbGllbnQgd2l0aCBkZXRlY3RTZXNzaW9uSW5Vcmw9dHJ1ZSxcbiAgICogYnV0IHNob3VsZCBhbHNvIGJlIGNhbGxlZCBtYW51YWxseSB3aGVuIGNoZWNraW5nIGZvciBhbiBlcnJvciBmcm9tIGFuIGF1dGggcmVkaXJlY3QuXG4gICAqIEBwYXJhbSBvbkluaXRpYWxTZXNzaW9uT2J0YWluZWQgT3B0aW9uYWwgY2FsbGJhY2sgdG8gc2V0IGJlZm9yZSBpbml0aWFsaXphdGlvbiBzdGFydHNcbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemUoZnVuYz86IFByb21pc2U8eyBlcnJvcjogRXJyb3IgfCBudWxsIH0+KTogUHJvbWlzZTx7IGVycm9yOiBFcnJvciB8IG51bGwgfT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZVxuICAgIH1cblxuICAgIGlmIChmdW5jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVByb21pc2UgPSBmdW5jXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZVxuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZVByb21pc2UgPSAoYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX2luaXRpYWxpemUoKSkpKClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3JlZGVudGlhbHMgUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElmIGluaXRpYWxpemF0aW9uIGlzIGluIHByb2dyZXNzLCB3YWl0IGZvciBpdCBmaXJzdFxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2VcbiAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscykpXG4gIH1cblxuICAvKipcbiAgICogc2V0IGNyZWRlbnRpYWxzIGZyb20gYWNjZXNzS2V5XG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqL1xuICBwdWJsaWMgc2V0QWNjZXNzS2V5Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscykge1xuICAgIHJldHVybiB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0QWNjZXNzS2V5Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogZ2V0QWNjZXNzVG9rZW4gcmV0dXJuIGEgdmFsaWRhdGUgYWNjZXNzIHRva2VuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBpcyBpbiBwcm9ncmVzcywgd2FpdCBmb3IgaXQgZmlyc3RcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlXG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgLy8gbm9kZSBzZGsg5Zy65pmv5LiL55u05o6l6L+U5ZueYWNjZXNzX3Rva2VuXG4gICAgaWYgKGNyZWRlbnRpYWxzPy5zY29wZSA9PT0gREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4pXG4gICAgfVxuICAgIGlmIChjcmVkZW50aWFscz8uYWNjZXNzX3Rva2VuKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbilcbiAgICB9XG4gICAgY29uc3QgcmVzcEVycjogUmVzcG9uc2VFcnJvciA9IHsgZXJyb3I6IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQgfVxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwRXJyKVxuICB9XG5cbiAgLyoqXG4gICAqIHJlcXVlc3QgaHR0cCBsaWtlIHNpbXBsZSBmZXRjaCBhcGksIGV4cDpyZXF1ZXN0KCcvdjEvdXNlci9tZScsIHt3aXRoQ3JlZGVudGlhbHM6dHJ1ZX0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogQXV0aENsaWVudFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG4gICAgY29uc3QgcmV0cnk6IG51bWJlciA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgdGhpcy5yZXRyeSlcbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7IC4uLm9wdGlvbnMuaGVhZGVycywgW3RoaXMuaTE4bj8uTEFOR19IRUFERVJfS0VZXTogdGhpcy5pMThuPy5sYW5nIH1cbiAgICBpZiAodGhpcy5oZWFkZXJzKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tSZXF1ZXN0SWRIZWFkZXJOYW1lXSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdID0gZ2VuZXJhdGVSZXF1ZXN0SWQoKVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tEZXZpY2VJZEhlYWRlck5hbWVdKSB7XG4gICAgICBjb25zdCBkZXZpY2VJZCA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlSWQoKVxuICAgICAgb3B0aW9ucy5oZWFkZXJzW0RldmljZUlkSGVhZGVyTmFtZV0gPSBkZXZpY2VJZFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aEJhc2ljQXV0aCAmJiB0aGlzLmJhc2ljQXV0aCkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSB0aGlzLmJhc2ljQXV0aFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAvLyBVc2UgY3VzdG9tIGdldENyZWRlbnRpYWxzIGZ1bmN0aW9uIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgdXNlIGRlZmF1bHRcbiAgICAgIC8vIEN1c3RvbSBnZXRDcmVkZW50aWFscyBhdm9pZHMgZGVmYXVsdCBnZXRDcmVkZW50aWFscygpIGNhbGwgd2hpY2ggbWF5IGNhdXNlIGRlYWRsb2NrIGR1cmluZyBpbml0aWFsaXphdGlvblxuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBvcHRpb25zLmdldENyZWRlbnRpYWxzID8gYXdhaXQgb3B0aW9ucy5nZXRDcmVkZW50aWFscygpIDogYXdhaXQgdGhpcy5nZXRDcmVkZW50aWFscygpXG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5JblVSTCkge1xuICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xuICAgICAgICAgICAgdXJsICs9ICc/J1xuICAgICAgICAgIH1cbiAgICAgICAgICB1cmwgKz0gYGFjY2Vzc190b2tlbj0ke2NyZWRlbnRpYWxzLmFjY2Vzc190b2tlbn1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHtjcmVkZW50aWFscy50b2tlbl90eXBlfSAke2NyZWRlbnRpYWxzLmFjY2Vzc190b2tlbn1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY2xpZW50SWQgJiYgdXJsLmluZGV4T2YoJ2NsaWVudF9pZCcpIDwgMCkge1xuICAgICAgICB1cmwgKz0gdXJsLmluZGV4T2YoJz8nKSA8IDAgPyAnPycgOiAnJidcbiAgICAgICAgdXJsICs9IGBjbGllbnRfaWQ9JHt0aGlzLmNsaWVudElkfWBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHVybCA9IGAke3RoaXMuYXBpT3JpZ2lufSR7dGhpcy5hcGlQYXRofSR7dXJsfWBcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlOiBUIHwgbnVsbCA9IG51bGxcbiAgICBjb25zdCBtYXhSZXF1ZXN0VGltZXM6IG51bWJlciA9IHJldHJ5ICsgMVxuICAgIGZvciAobGV0IHJlcXVlc3RUaW1lID0gMDsgcmVxdWVzdFRpbWUgPCBtYXhSZXF1ZXN0VGltZXM7IHJlcXVlc3RUaW1lKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZVd4Q2xvdWQgfHwgdGhpcy51c2VXeENsb3VkKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnd4Q2xvdWRDYWxsRnVuY3Rpb248VD4odXJsLCBvcHRpb25zKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iYXNlUmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISEocmVzcG9uc2UgYXMgYW55KT8uY29kZSkge1xuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIGVycm9yOiAocmVzcG9uc2UgYXMgYW55KS5jb2RlLFxuICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IChyZXNwb25zZSBhcyBhbnkpLm1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcl91cmk6IG5ldyBVUkwodXJsKS5wYXRobmFtZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAocmVzcG9uc2VFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3BvbnNlRXJyb3IucmVxdWVzdElkID0gcmVzcG9uc2VFcnJvci5yZXF1ZXN0SWQgfHwgb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdIHx8ICcnXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICBpZiAob3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgJiYgcmVzcG9uc2VFcnJvciAmJiByZXNwb25zZUVycm9yLmVycm9yID09PSBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZUVycm9yKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RUaW1lID09PSByZXRyeSB8fCAhcmVzcG9uc2VFcnJvciB8fCByZXNwb25zZUVycm9yLmVycm9yICE9PSAndW5yZWFjaGFibGUnKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlRXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuc2xlZXAoT0F1dGgyQ2xpZW50LnJldHJ5SW50ZXJ2YWwpXG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHd4Q2xvdWRDYWxsRnVuY3Rpb248VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGxldCByZXN1bHQ6IFQgfCBudWxsID0gbnVsbFxuICAgIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgICB0cnkge1xuICAgICAgbGV0IHVzZXJBZ2VudCA9ICcnXG4gICAgICB0cnkge1xuICAgICAgICB1c2VyQWdlbnQgPSBhd2FpdCB3eC5nZXRSZW5kZXJlclVzZXJBZ2VudCgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgIGNvbnN0IHsgcmVzdWx0OiByZXNwb25zZVJlc3VsdCB9ID0gYXdhaXQgdGhpcy53eENsb3VkLmNhbGxGdW5jdGlvbih7XG4gICAgICAgIG5hbWU6ICdodHRwT3ZlckNhbGxGdW5jdGlvbicsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBvcmlnaW46ICdodHRwczovL3NlcnZpY2V3ZWNoYXQuY29tJyxcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogdXNlckFnZW50LFxuICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogb3B0aW9ucy5ib2R5LFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlc3BvbnNlUmVzdWx0Py5ib2R5Py5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHJlc3BvbnNlRXJyb3IgPSByZXNwb25zZVJlc3VsdD8uYm9keSBhcyBSZXNwb25zZUVycm9yXG4gICAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gZ2V0UGF0aE5hbWUodXJsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2VSZXN1bHQ/LmJvZHkgYXMgVFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgZXJyb3JfdXJpOiBnZXRQYXRoTmFtZSh1cmwpLFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgLy8gSWYgaW5pdGlhbGl6YXRpb24gaXMgaW4gcHJvZ3Jlc3MsIHdhaXQgZm9yIGl0IGZpcnN0XG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZVxuXG4gICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVMb2NrKC0xLCBhc3luYyAoKSA9PiB0aGlzLl9nZXRDcmVkZW50aWFscygpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIOW6n+W8g+aOpeWPo++8jOWLv+eUqC4g5aaC6ZyA6I635Y+W5Yet6K+B5L+h5oGv6K+35L2/55SoIGdldENyZWRlbnRpYWxzIOaWueazlVxuICAgKi9cbiAgcHVibGljIGdldENyZWRlbnRpYWxzU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRTdG9yYWdlQ3JlZGVudGlhbHNTeW5jKClcbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFsc0FzeW5jKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNjb3BlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBtc2cgPSAnY3JlZGVudGlhbHMgbm90IGZvdW5kJ1xuICAgICAgdGhpcy5vbkNyZWRlbnRpYWxzRXJyb3I/Lih7IG1zZyB9KVxuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHMuc2NvcGVcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgbXNnID0gJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCdcbiAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKG1zZylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzLmdyb3Vwc1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggZXhwaXJlZCB0b2tlbi5cbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscywgb3B0aW9ucz86IHsgdGhyb3dFcnJvcj86IGJvb2xlYW4gfSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBpcyBpbiBwcm9ncmVzcywgd2FpdCBmb3IgaXQgZmlyc3RcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlXG5cbiAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUxvY2soLTEsIGFzeW5jICgpID0+IHRoaXMuX3JlZnJlc2hUb2tlbihjcmVkZW50aWFscywgb3B0aW9ucykpXG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgcmVmcmVzaCB0b2tlbiBtZXRob2QgKGNhbGxlZCB3aXRoaW4gbG9jaylcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX3JlZnJlc2hUb2tlbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMsIG9wdGlvbnM/OiB7IHRocm93RXJyb3I/OiBib29sZWFuIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19yZWZyZXNoVG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBub2RlIHNkayDlnLrmma/kuIvkuI3pnIDopoHliLfmlrAgdG9rZW5cbiAgICAgIGlmIChjcmVkZW50aWFscz8uc2NvcGUgPT09IERFRkFVTFRfTk9ERV9BQ0NFU1NfU0NPUEUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgICB9XG5cbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgIWNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgY29uc3QgbXNnID0gJ25vIHJlZnJlc2ggdG9rZW4gZm91bmQgaW4gY3JlZGVudGlhbHMnXG4gICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5GdW5jKGNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4sIGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG5cbiAgICAgICAgdGhpcy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5UT0tFTl9SRUZSRVNIRUQgfSlcblxuICAgICAgICByZXR1cm4gbmV3Q3JlZGVudGlhbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChvcHRpb25zPy50aHJvd0Vycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5JTlZBTElEX0dSQU5UKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyb3IuZXJyb3JfZGVzY3JpcHRpb25cbiAgICAgICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnIH0pXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2c6IGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uIH0pXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhbm9ueW1vdXNMb2dpbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX2Fub255bW91c0xvZ2luJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYykge1xuICAgICAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5hbm9ueW1vdXNTaWduSW5GdW5jKGNyZWRlbnRpYWxzKVxuICAgICAgICBjcmVkZW50aWFscyA9IGMgfHwgKGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbihjcmVkZW50aWFscylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayByZXRyeSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHByaXZhdGUgY2hlY2tSZXRyeShyZXRyeTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gICAgaWYgKHR5cGVvZiByZXRyeSAhPT0gJ251bWJlcicgfHwgcmV0cnkgPCBPQXV0aDJDbGllbnQubWluUmV0cnkgfHwgcmV0cnkgPiBPQXV0aDJDbGllbnQubWF4UmV0cnkpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5SRUFDSEFCTEUsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAnd3Jvbmcgb3B0aW9ucyBwYXJhbTogcmV0cnknLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICAgIH1cbiAgICByZXR1cm4gcmV0cnlcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgcmV0cnkgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZXRyeVxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbGVcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRSZXRyeShyZXRyeTogbnVtYmVyLCBkZWZhdWx0VmFsZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIHJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWxlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoZWNrUmV0cnkocmV0cnkpXG4gIH1cblxuICAvKipcbiAgICogU2xlZXAuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9LCBtcylcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGFub255bW91cyBzaWduSW5cbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFub255bW91c1NpZ25JbihjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19hbm9ueW1vdXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8IGNyZWRlbnRpYWxzLnNjb3BlICE9PSAnYW5vbnltb3VzJykge1xuICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcignbm8gYW5vbnltb3VzIGluIGNyZWRlbnRpYWxzJylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVxdWVzdChBcGlVcmxzLkFVVEhfU0lHTl9JTl9BTk9OWU1PVVNMWV9VUkwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICB3aXRoQmFzaWNBdXRoOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IHt9LFxuICAgICAgICB9KVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG4gICAgICAgIHJldHVybiBuZXdDcmVkZW50aWFsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmVycm9yID09PSBFcnJvclR5cGUuSU5WQUxJRF9HUkFOVCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcmVmcmVzaCB0b2tlbiBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hUb2tlblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVmYXVsdFJlZnJlc2hUb2tlbkZ1bmMocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGlmIChyZWZyZXNoVG9rZW4gPT09IHVuZGVmaW5lZCB8fCByZWZyZXNoVG9rZW4gPT09ICcnKSB7XG4gICAgICBjb25zdCBtc2cgPSAncmVmcmVzaCB0b2tlbiBub3QgZm91bmQnXG4gICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnIH0pXG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihtc2cpXG4gICAgfVxuXG4gICAgbGV0IHVybDogc3RyaW5nID0gQXBpVXJscy5BVVRIX1RPS0VOX1VSTFxuXG4gICAgaWYgKGNyZWRlbnRpYWxzPy52ZXJzaW9uID09PSAndjInKSB7XG4gICAgICB1cmwgPSBBcGlVcmxzVjIuQVVUSF9UT0tFTl9VUkxcbiAgICB9XG5cbiAgICBjb25zdCBuZXdDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudFNlY3JldCxcbiAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4geyAuLi5uZXdDcmVkZW50aWFscywgdmVyc2lvbjogY3JlZGVudGlhbHM/LnZlcnNpb24gfHwgJ3YxJyB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRldmljZUlkXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERldmljZUlkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuZGV2aWNlSUQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRldmljZUlEXG4gICAgfVxuICAgIGxldCBkZXZpY2VJZDogc3RyaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldEl0ZW0oRGV2aWNlSWRTZWN0aW9uTmFtZSlcbiAgICBpZiAoISh0eXBlb2YgZGV2aWNlSWQgPT09ICdzdHJpbmcnICYmIGRldmljZUlkLmxlbmd0aCA+PSAxNiAmJiBkZXZpY2VJZC5sZW5ndGggPD0gNDgpKSB7XG4gICAgICBkZXZpY2VJZCA9IHV1aWR2NCgpXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShEZXZpY2VJZFNlY3Rpb25OYW1lLCBkZXZpY2VJZClcbiAgICB9XG4gICAgdGhpcy5kZXZpY2VJRCA9IGRldmljZUlkXG4gICAgcmV0dXJuIGRldmljZUlkXG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuQXV0aGVudGljYXRlZCBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVyclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFQ+fVxuICAgKi9cbiAgcHJpdmF0ZSB1bkF1dGhlbnRpY2F0ZWRFcnJvcjxUPihlcnI/OiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwRXJyOiBSZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyLFxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcEVycilcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWJ1ZyBsb2dnaW5nIGhlbHBlclxuICAgKi9cbiAgcHJpdmF0ZSBfZGVidWcoLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2dEZWJ1Z01lc3NhZ2VzKSB7XG4gICAgICBjb25zb2xlLmxvZygnW09BdXRoMkNsaWVudF0nLCAuLi5hcmdzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJTVBPUlRBTlQ6XG4gICAqIDEuIE5ldmVyIHRocm93IGluIHRoaXMgbWV0aG9kLCBhcyBpdCBpcyBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3JcbiAgICogMi4gTmV2ZXIgcmV0dXJuIGEgc2Vzc2lvbiBmcm9tIHRoaXMgbWV0aG9kIGFzIGl0IHdvdWxkIGJlIGNhY2hlZCBvdmVyXG4gICAqICAgIHRoZSB3aG9sZSBsaWZldGltZSBvZiB0aGUgY2xpZW50XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9pbml0aWFsaXplKCk6IFByb21pc2U8eyBlcnJvcjogRXJyb3IgfCBudWxsIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gSWYgbm8gZ2V0SW5pdGlhbFNlc3Npb24gY2FsbGJhY2sgaXMgc2V0LCBub3RoaW5nIHRvIGRvXG4gICAgICBpZiAoIXRoaXMuZ2V0SW5pdGlhbFNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5fZGVidWcoJyNfaW5pdGlhbGl6ZSgpJywgJ25vIGdldEluaXRpYWxTZXNzaW9uIGNhbGxiYWNrIHNldCwgc2tpcHBpbmcnKVxuICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdjYWxsaW5nIGdldEluaXRpYWxTZXNzaW9uIGNhbGxiYWNrJylcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5nZXRJbml0aWFsU2Vzc2lvbigpXG5cbiAgICAgICAgaWYgKGRhdGE/LnNlc3Npb24pIHtcbiAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnc2Vzc2lvbiBvYnRhaW5lZCBmcm9tIGdldEluaXRpYWxTZXNzaW9uJywgZGF0YS5zZXNzaW9uKVxuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhkYXRhPy5zZXNzaW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW52b2tlIGNhbGxiYWNrIGZvciB1cHBlciBsYXllciB0byBoYW5kbGUgdXNlciBzdG9yYWdlXG4gICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIEJFRk9SRSBsb2NrIGlzIHJlbGVhc2VkIHNvIHVzZXIgc3RvcmFnZSBpcyBhdG9taWMgd2l0aCBzZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLm9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZCkge1xuICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdjYWxsaW5nIG9uSW5pdGlhbFNlc3Npb25PYnRhaW5lZCBjYWxsYmFjaycpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25Jbml0aWFsU2Vzc2lvbk9idGFpbmVkKGRhdGEsIGVycm9yKVxuICAgICAgICAgIH0gY2F0Y2ggKGNhbGxiYWNrRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdlcnJvciBpbiBvbkluaXRpYWxTZXNzaW9uT2J0YWluZWQnLCBjYWxsYmFja0Vycm9yKVxuICAgICAgICAgICAgLy8gRG9uJ3QgZmFpbCBpbml0aWFsaXphdGlvbiBpZiBjYWxsYmFjayBmYWlsc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnZXJyb3IgZnJvbSBnZXRJbml0aWFsU2Vzc2lvbicsIGVycm9yKVxuICAgICAgICAgIHJldHVybiB7IGVycm9yIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGVycm9yOiBudWxsIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnZXhjZXB0aW9uIGR1cmluZyBnZXRJbml0aWFsU2Vzc2lvbicsIGVycilcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKSB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICd1bmV4cGVjdGVkIGVycm9yJywgZXJyb3IpXG4gICAgICByZXR1cm4geyBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fZGVidWcoJyNfaW5pdGlhbGl6ZSgpJywgJ2VuZCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjcXVpcmVzIGEgZ2xvYmFsIGxvY2sgYmFzZWQgb24gdGhlIGNsaWVudCBJRC5cbiAgICogVGhpcyBlbnN1cmVzIHRoYXQgb25seSBvbmUgb3BlcmF0aW9uIGNhbiBtb2RpZnkgY3JlZGVudGlhbHMgYXQgYSB0aW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfYWNxdWlyZUxvY2s8Uj4oYWNxdWlyZVRpbWVvdXQ6IG51bWJlciwgZm46ICgpID0+IFByb21pc2U8Uj4pOiBQcm9taXNlPFI+IHtcbiAgICB0aGlzLl9kZWJ1ZygnI19hY3F1aXJlTG9jaycsICdiZWdpbicsIGFjcXVpcmVUaW1lb3V0KVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmxvY2tBY3F1aXJlZCkge1xuICAgICAgICAvLyBMb2NrIGlzIGFscmVhZHkgYWNxdWlyZWQsIHF1ZXVlIHRoZSBvcGVyYXRpb25cbiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMucGVuZGluZ0luTG9jay5sZW5ndGggPyB0aGlzLnBlbmRpbmdJbkxvY2tbdGhpcy5wZW5kaW5nSW5Mb2NrLmxlbmd0aCAtIDFdIDogUHJvbWlzZS5yZXNvbHZlKClcblxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGxhc3RcbiAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKVxuICAgICAgICB9KSgpXG5cbiAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgcmVzdWx0XG4gICAgICAgICAgfSBjYXRjaCAoX2U6IGFueSkge1xuICAgICAgICAgICAgLy8gd2UganVzdCBjYXJlIGlmIGl0IGZpbmlzaGVkXG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLClcblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9XG5cbiAgICAgIC8vIEFjcXVpcmUgdGhlIGxvY2tcbiAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2FjcXVpcmluZyBsb2NrIGZvciBjbGllbnQnLCB0aGlzLmNsaWVudElkKVxuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvY2tBY3F1aXJlZCA9IHRydWVcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBmbigpXG5cbiAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgcmVzdWx0XG4gICAgICAgICAgfSBjYXRjaCAoX2U6IGFueSkge1xuICAgICAgICAgICAgLy8gd2UganVzdCBjYXJlIGlmIGl0IGZpbmlzaGVkXG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLClcblxuICAgICAgICBhd2FpdCByZXN1bHRcblxuICAgICAgICAvLyBrZWVwIGRyYWluaW5nIHRoZSBxdWV1ZSB1bnRpbCB0aGVyZSdzIG5vdGhpbmcgdG8gd2FpdCBvblxuICAgICAgICB3aGlsZSAodGhpcy5wZW5kaW5nSW5Mb2NrLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHdhaXRPbiA9IFsuLi50aGlzLnBlbmRpbmdJbkxvY2tdXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwod2FpdE9uKVxuICAgICAgICAgIHRoaXMucGVuZGluZ0luTG9jay5zcGxpY2UoMCwgd2FpdE9uLmxlbmd0aClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCByZXN1bHRcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ3JlbGVhc2luZyBsb2NrIGZvciBjbGllbnQnLCB0aGlzLmNsaWVudElkKVxuICAgICAgICB0aGlzLmxvY2tBY3F1aXJlZCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2RlYnVnKCcjX2FjcXVpcmVMb2NrJywgJ2VuZCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBnZXQgY3JlZGVudGlhbHMgKGNhbGxlZCB3aXRoaW4gbG9jaylcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX2dldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgLy8gbm9kZSBhZGFwdGVyIOWcuuaZr+S4i++8jHNjb3BlIOS4uiBERUZBVUxUX05PREVfQUNDRVNTX1NDT1BF77yM5LiN6ZyA6KaB5Yi35pawIHRva2VuXG4gICAgaWYgKGNyZWRlbnRpYWxzPy5zY29wZSA9PT0gREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRSkge1xuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgfVxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IG1zZyA9ICdjcmVkZW50aWFscyBub3QgZm91bmQnXG4gICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnIH0pXG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihtc2cpXG4gICAgfVxuICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFscykpIHtcbiAgICAgIGlmIChjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLl9yZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGNyZWRlbnRpYWxzLnNjb3BlID09PSAnYW5vbnltb3VzJykge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c0xvZ2luKGNyZWRlbnRpYWxzKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uQ3JlZGVudGlhbHNFcnJvcj8uKHsgbXNnOiBlcnJvci5lcnJvcl9kZXNjcmlwdGlvbiB9KVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjcmVkZW50aWFscy5zY29wZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmFub255bW91c0xvZ2luKGNyZWRlbnRpYWxzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbXNnID0gJ25vIHJlZnJlc2ggdG9rZW4gZm91bmQgaW4gY3JlZGVudGlhbHMnXG4gICAgICAgIHRoaXMub25DcmVkZW50aWFsc0Vycm9yPy4oeyBtc2cgfSlcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IobXNnKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxufVxuIl19