@angular/common 19.0.0-next.1 → 19.0.0-next.10

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 (3015) hide show
  1. package/LICENSE +21 -0
  2. package/fesm2022/common.mjs +183 -170
  3. package/fesm2022/common.mjs.map +1 -1
  4. package/fesm2022/http/testing.mjs +8 -8
  5. package/fesm2022/http/testing.mjs.map +1 -1
  6. package/fesm2022/http.mjs +56 -49
  7. package/fesm2022/http.mjs.map +1 -1
  8. package/fesm2022/testing.mjs +31 -27
  9. package/fesm2022/testing.mjs.map +1 -1
  10. package/fesm2022/upgrade.mjs +5 -5
  11. package/fesm2022/upgrade.mjs.map +1 -1
  12. package/http/index.d.ts +2 -1
  13. package/http/testing/index.d.ts +1 -1
  14. package/index.d.ts +65 -5
  15. package/locales/af-NA.d.ts +1 -1
  16. package/locales/af-NA.mjs +2 -2
  17. package/locales/af.d.ts +1 -1
  18. package/locales/af.mjs +2 -2
  19. package/locales/agq.d.ts +1 -1
  20. package/locales/agq.mjs +2 -2
  21. package/locales/ak.d.ts +1 -1
  22. package/locales/ak.mjs +2 -2
  23. package/locales/am.d.ts +1 -1
  24. package/locales/am.mjs +2 -2
  25. package/locales/ar-AE.d.ts +1 -1
  26. package/locales/ar-AE.mjs +2 -2
  27. package/locales/ar-BH.d.ts +1 -1
  28. package/locales/ar-BH.mjs +2 -2
  29. package/locales/ar-DJ.d.ts +1 -1
  30. package/locales/ar-DJ.mjs +2 -2
  31. package/locales/ar-DZ.d.ts +1 -1
  32. package/locales/ar-DZ.mjs +2 -2
  33. package/locales/ar-EG.d.ts +1 -1
  34. package/locales/ar-EG.mjs +2 -2
  35. package/locales/ar-EH.d.ts +1 -1
  36. package/locales/ar-EH.mjs +2 -2
  37. package/locales/ar-ER.d.ts +1 -1
  38. package/locales/ar-ER.mjs +2 -2
  39. package/locales/ar-IL.d.ts +1 -1
  40. package/locales/ar-IL.mjs +2 -2
  41. package/locales/ar-IQ.d.ts +1 -1
  42. package/locales/ar-IQ.mjs +2 -2
  43. package/locales/ar-JO.d.ts +1 -1
  44. package/locales/ar-JO.mjs +2 -2
  45. package/locales/ar-KM.d.ts +1 -1
  46. package/locales/ar-KM.mjs +2 -2
  47. package/locales/ar-KW.d.ts +1 -1
  48. package/locales/ar-KW.mjs +2 -2
  49. package/locales/ar-LB.d.ts +1 -1
  50. package/locales/ar-LB.mjs +2 -2
  51. package/locales/ar-LY.d.ts +1 -1
  52. package/locales/ar-LY.mjs +2 -2
  53. package/locales/ar-MA.d.ts +1 -1
  54. package/locales/ar-MA.mjs +2 -2
  55. package/locales/ar-MR.d.ts +1 -1
  56. package/locales/ar-MR.mjs +2 -2
  57. package/locales/ar-OM.d.ts +1 -1
  58. package/locales/ar-OM.mjs +2 -2
  59. package/locales/ar-PS.d.ts +1 -1
  60. package/locales/ar-PS.mjs +2 -2
  61. package/locales/ar-QA.d.ts +1 -1
  62. package/locales/ar-QA.mjs +2 -2
  63. package/locales/ar-SA.d.ts +1 -1
  64. package/locales/ar-SA.mjs +2 -2
  65. package/locales/ar-SD.d.ts +1 -1
  66. package/locales/ar-SD.mjs +2 -2
  67. package/locales/ar-SO.d.ts +1 -1
  68. package/locales/ar-SO.mjs +2 -2
  69. package/locales/ar-SS.d.ts +1 -1
  70. package/locales/ar-SS.mjs +2 -2
  71. package/locales/ar-SY.d.ts +1 -1
  72. package/locales/ar-SY.mjs +2 -2
  73. package/locales/ar-TD.d.ts +1 -1
  74. package/locales/ar-TD.mjs +2 -2
  75. package/locales/ar-TN.d.ts +1 -1
  76. package/locales/ar-TN.mjs +2 -2
  77. package/locales/ar-YE.d.ts +1 -1
  78. package/locales/ar-YE.mjs +2 -2
  79. package/locales/ar.d.ts +1 -1
  80. package/locales/ar.mjs +2 -2
  81. package/locales/as.d.ts +1 -1
  82. package/locales/as.mjs +2 -2
  83. package/locales/asa.d.ts +1 -1
  84. package/locales/asa.mjs +2 -2
  85. package/locales/ast.d.ts +1 -1
  86. package/locales/ast.mjs +2 -2
  87. package/locales/az-Cyrl.d.ts +1 -1
  88. package/locales/az-Cyrl.mjs +2 -2
  89. package/locales/az-Latn.d.ts +1 -1
  90. package/locales/az-Latn.mjs +2 -2
  91. package/locales/az.d.ts +1 -1
  92. package/locales/az.mjs +2 -2
  93. package/locales/bas.d.ts +1 -1
  94. package/locales/bas.mjs +2 -2
  95. package/locales/be-tarask.d.ts +1 -1
  96. package/locales/be-tarask.mjs +2 -2
  97. package/locales/be.d.ts +1 -1
  98. package/locales/be.mjs +2 -2
  99. package/locales/bem.d.ts +1 -1
  100. package/locales/bem.mjs +2 -2
  101. package/locales/bez.d.ts +1 -1
  102. package/locales/bez.mjs +2 -2
  103. package/locales/bg.d.ts +1 -1
  104. package/locales/bg.mjs +2 -2
  105. package/locales/bm.d.ts +1 -1
  106. package/locales/bm.mjs +2 -2
  107. package/locales/bn-IN.d.ts +1 -1
  108. package/locales/bn-IN.mjs +2 -2
  109. package/locales/bn.d.ts +1 -1
  110. package/locales/bn.mjs +2 -2
  111. package/locales/bo-IN.d.ts +1 -1
  112. package/locales/bo-IN.mjs +2 -2
  113. package/locales/bo.d.ts +1 -1
  114. package/locales/bo.mjs +2 -2
  115. package/locales/br.d.ts +1 -1
  116. package/locales/br.mjs +2 -2
  117. package/locales/brx.d.ts +1 -1
  118. package/locales/brx.mjs +2 -2
  119. package/locales/bs-Cyrl.d.ts +1 -1
  120. package/locales/bs-Cyrl.mjs +2 -2
  121. package/locales/bs-Latn.d.ts +1 -1
  122. package/locales/bs-Latn.mjs +2 -2
  123. package/locales/bs.d.ts +1 -1
  124. package/locales/bs.mjs +2 -2
  125. package/locales/ca-AD.d.ts +1 -1
  126. package/locales/ca-AD.mjs +2 -2
  127. package/locales/ca-ES-valencia.d.ts +1 -1
  128. package/locales/ca-ES-valencia.mjs +2 -2
  129. package/locales/ca-FR.d.ts +1 -1
  130. package/locales/ca-FR.mjs +2 -2
  131. package/locales/ca-IT.d.ts +1 -1
  132. package/locales/ca-IT.mjs +2 -2
  133. package/locales/ca.d.ts +1 -1
  134. package/locales/ca.mjs +2 -2
  135. package/locales/ccp-IN.d.ts +1 -1
  136. package/locales/ccp-IN.mjs +2 -2
  137. package/locales/ccp.d.ts +1 -1
  138. package/locales/ccp.mjs +2 -2
  139. package/locales/ce.d.ts +1 -1
  140. package/locales/ce.mjs +2 -2
  141. package/locales/ceb.d.ts +1 -1
  142. package/locales/ceb.mjs +2 -2
  143. package/locales/cgg.d.ts +1 -1
  144. package/locales/cgg.mjs +2 -2
  145. package/locales/chr.d.ts +1 -1
  146. package/locales/chr.mjs +2 -2
  147. package/locales/ckb-IR.d.ts +1 -1
  148. package/locales/ckb-IR.mjs +2 -2
  149. package/locales/ckb.d.ts +1 -1
  150. package/locales/ckb.mjs +2 -2
  151. package/locales/cs.d.ts +1 -1
  152. package/locales/cs.mjs +2 -2
  153. package/locales/cy.d.ts +1 -1
  154. package/locales/cy.mjs +2 -2
  155. package/locales/da-GL.d.ts +1 -1
  156. package/locales/da-GL.mjs +2 -2
  157. package/locales/da.d.ts +1 -1
  158. package/locales/da.mjs +2 -2
  159. package/locales/dav.d.ts +1 -1
  160. package/locales/dav.mjs +2 -2
  161. package/locales/de-AT.d.ts +1 -1
  162. package/locales/de-AT.mjs +2 -2
  163. package/locales/de-BE.d.ts +1 -1
  164. package/locales/de-BE.mjs +2 -2
  165. package/locales/de-CH.d.ts +1 -1
  166. package/locales/de-CH.mjs +2 -2
  167. package/locales/de-IT.d.ts +1 -1
  168. package/locales/de-IT.mjs +2 -2
  169. package/locales/de-LI.d.ts +1 -1
  170. package/locales/de-LI.mjs +2 -2
  171. package/locales/de-LU.d.ts +1 -1
  172. package/locales/de-LU.mjs +2 -2
  173. package/locales/de.d.ts +1 -1
  174. package/locales/de.mjs +2 -2
  175. package/locales/dje.d.ts +1 -1
  176. package/locales/dje.mjs +2 -2
  177. package/locales/doi.d.ts +1 -1
  178. package/locales/doi.mjs +2 -2
  179. package/locales/dsb.d.ts +1 -1
  180. package/locales/dsb.mjs +2 -2
  181. package/locales/dua.d.ts +1 -1
  182. package/locales/dua.mjs +2 -2
  183. package/locales/dyo.d.ts +1 -1
  184. package/locales/dyo.mjs +2 -2
  185. package/locales/dz.d.ts +1 -1
  186. package/locales/dz.mjs +2 -2
  187. package/locales/ebu.d.ts +1 -1
  188. package/locales/ebu.mjs +2 -2
  189. package/locales/ee-TG.d.ts +1 -1
  190. package/locales/ee-TG.mjs +2 -2
  191. package/locales/ee.d.ts +1 -1
  192. package/locales/ee.mjs +2 -2
  193. package/locales/el-CY.d.ts +1 -1
  194. package/locales/el-CY.mjs +2 -2
  195. package/locales/el.d.ts +1 -1
  196. package/locales/el.mjs +2 -2
  197. package/locales/en-001.d.ts +1 -1
  198. package/locales/en-001.mjs +2 -2
  199. package/locales/en-150.d.ts +1 -1
  200. package/locales/en-150.mjs +2 -2
  201. package/locales/en-AE.d.ts +1 -1
  202. package/locales/en-AE.mjs +2 -2
  203. package/locales/en-AG.d.ts +1 -1
  204. package/locales/en-AG.mjs +2 -2
  205. package/locales/en-AI.d.ts +1 -1
  206. package/locales/en-AI.mjs +2 -2
  207. package/locales/en-AS.d.ts +1 -1
  208. package/locales/en-AS.mjs +2 -2
  209. package/locales/en-AT.d.ts +1 -1
  210. package/locales/en-AT.mjs +2 -2
  211. package/locales/en-AU.d.ts +1 -1
  212. package/locales/en-AU.mjs +2 -2
  213. package/locales/en-BB.d.ts +1 -1
  214. package/locales/en-BB.mjs +2 -2
  215. package/locales/en-BE.d.ts +1 -1
  216. package/locales/en-BE.mjs +2 -2
  217. package/locales/en-BI.d.ts +1 -1
  218. package/locales/en-BI.mjs +2 -2
  219. package/locales/en-BM.d.ts +1 -1
  220. package/locales/en-BM.mjs +2 -2
  221. package/locales/en-BS.d.ts +1 -1
  222. package/locales/en-BS.mjs +2 -2
  223. package/locales/en-BW.d.ts +1 -1
  224. package/locales/en-BW.mjs +2 -2
  225. package/locales/en-BZ.d.ts +1 -1
  226. package/locales/en-BZ.mjs +2 -2
  227. package/locales/en-CA.d.ts +1 -1
  228. package/locales/en-CA.mjs +2 -2
  229. package/locales/en-CC.d.ts +1 -1
  230. package/locales/en-CC.mjs +2 -2
  231. package/locales/en-CH.d.ts +1 -1
  232. package/locales/en-CH.mjs +2 -2
  233. package/locales/en-CK.d.ts +1 -1
  234. package/locales/en-CK.mjs +2 -2
  235. package/locales/en-CM.d.ts +1 -1
  236. package/locales/en-CM.mjs +2 -2
  237. package/locales/en-CX.d.ts +1 -1
  238. package/locales/en-CX.mjs +2 -2
  239. package/locales/en-CY.d.ts +1 -1
  240. package/locales/en-CY.mjs +2 -2
  241. package/locales/en-DE.d.ts +1 -1
  242. package/locales/en-DE.mjs +2 -2
  243. package/locales/en-DG.d.ts +1 -1
  244. package/locales/en-DG.mjs +2 -2
  245. package/locales/en-DK.d.ts +1 -1
  246. package/locales/en-DK.mjs +2 -2
  247. package/locales/en-DM.d.ts +1 -1
  248. package/locales/en-DM.mjs +2 -2
  249. package/locales/en-ER.d.ts +1 -1
  250. package/locales/en-ER.mjs +2 -2
  251. package/locales/en-FI.d.ts +1 -1
  252. package/locales/en-FI.mjs +2 -2
  253. package/locales/en-FJ.d.ts +1 -1
  254. package/locales/en-FJ.mjs +2 -2
  255. package/locales/en-FK.d.ts +1 -1
  256. package/locales/en-FK.mjs +2 -2
  257. package/locales/en-FM.d.ts +1 -1
  258. package/locales/en-FM.mjs +2 -2
  259. package/locales/en-GB.d.ts +1 -1
  260. package/locales/en-GB.mjs +2 -2
  261. package/locales/en-GD.d.ts +1 -1
  262. package/locales/en-GD.mjs +2 -2
  263. package/locales/en-GG.d.ts +1 -1
  264. package/locales/en-GG.mjs +2 -2
  265. package/locales/en-GH.d.ts +1 -1
  266. package/locales/en-GH.mjs +2 -2
  267. package/locales/en-GI.d.ts +1 -1
  268. package/locales/en-GI.mjs +2 -2
  269. package/locales/en-GM.d.ts +1 -1
  270. package/locales/en-GM.mjs +2 -2
  271. package/locales/en-GU.d.ts +1 -1
  272. package/locales/en-GU.mjs +2 -2
  273. package/locales/en-GY.d.ts +1 -1
  274. package/locales/en-GY.mjs +2 -2
  275. package/locales/en-HK.d.ts +1 -1
  276. package/locales/en-HK.mjs +2 -2
  277. package/locales/en-IE.d.ts +1 -1
  278. package/locales/en-IE.mjs +2 -2
  279. package/locales/en-IL.d.ts +1 -1
  280. package/locales/en-IL.mjs +2 -2
  281. package/locales/en-IM.d.ts +1 -1
  282. package/locales/en-IM.mjs +2 -2
  283. package/locales/en-IN.d.ts +1 -1
  284. package/locales/en-IN.mjs +2 -2
  285. package/locales/en-IO.d.ts +1 -1
  286. package/locales/en-IO.mjs +2 -2
  287. package/locales/en-JE.d.ts +1 -1
  288. package/locales/en-JE.mjs +2 -2
  289. package/locales/en-JM.d.ts +1 -1
  290. package/locales/en-JM.mjs +2 -2
  291. package/locales/en-KE.d.ts +1 -1
  292. package/locales/en-KE.mjs +2 -2
  293. package/locales/en-KI.d.ts +1 -1
  294. package/locales/en-KI.mjs +2 -2
  295. package/locales/en-KN.d.ts +1 -1
  296. package/locales/en-KN.mjs +2 -2
  297. package/locales/en-KY.d.ts +1 -1
  298. package/locales/en-KY.mjs +2 -2
  299. package/locales/en-LC.d.ts +1 -1
  300. package/locales/en-LC.mjs +2 -2
  301. package/locales/en-LR.d.ts +1 -1
  302. package/locales/en-LR.mjs +2 -2
  303. package/locales/en-LS.d.ts +1 -1
  304. package/locales/en-LS.mjs +2 -2
  305. package/locales/en-MG.d.ts +1 -1
  306. package/locales/en-MG.mjs +2 -2
  307. package/locales/en-MH.d.ts +1 -1
  308. package/locales/en-MH.mjs +2 -2
  309. package/locales/en-MO.d.ts +1 -1
  310. package/locales/en-MO.mjs +2 -2
  311. package/locales/en-MP.d.ts +1 -1
  312. package/locales/en-MP.mjs +2 -2
  313. package/locales/en-MS.d.ts +1 -1
  314. package/locales/en-MS.mjs +2 -2
  315. package/locales/en-MT.d.ts +1 -1
  316. package/locales/en-MT.mjs +2 -2
  317. package/locales/en-MU.d.ts +1 -1
  318. package/locales/en-MU.mjs +2 -2
  319. package/locales/en-MV.d.ts +1 -1
  320. package/locales/en-MV.mjs +2 -2
  321. package/locales/en-MW.d.ts +1 -1
  322. package/locales/en-MW.mjs +2 -2
  323. package/locales/en-MY.d.ts +1 -1
  324. package/locales/en-MY.mjs +2 -2
  325. package/locales/en-NA.d.ts +1 -1
  326. package/locales/en-NA.mjs +2 -2
  327. package/locales/en-NF.d.ts +1 -1
  328. package/locales/en-NF.mjs +2 -2
  329. package/locales/en-NG.d.ts +1 -1
  330. package/locales/en-NG.mjs +2 -2
  331. package/locales/en-NL.d.ts +1 -1
  332. package/locales/en-NL.mjs +2 -2
  333. package/locales/en-NR.d.ts +1 -1
  334. package/locales/en-NR.mjs +2 -2
  335. package/locales/en-NU.d.ts +1 -1
  336. package/locales/en-NU.mjs +2 -2
  337. package/locales/en-NZ.d.ts +1 -1
  338. package/locales/en-NZ.mjs +2 -2
  339. package/locales/en-PG.d.ts +1 -1
  340. package/locales/en-PG.mjs +2 -2
  341. package/locales/en-PH.d.ts +1 -1
  342. package/locales/en-PH.mjs +2 -2
  343. package/locales/en-PK.d.ts +1 -1
  344. package/locales/en-PK.mjs +2 -2
  345. package/locales/en-PN.d.ts +1 -1
  346. package/locales/en-PN.mjs +2 -2
  347. package/locales/en-PR.d.ts +1 -1
  348. package/locales/en-PR.mjs +2 -2
  349. package/locales/en-PW.d.ts +1 -1
  350. package/locales/en-PW.mjs +2 -2
  351. package/locales/en-RW.d.ts +1 -1
  352. package/locales/en-RW.mjs +2 -2
  353. package/locales/en-SB.d.ts +1 -1
  354. package/locales/en-SB.mjs +2 -2
  355. package/locales/en-SC.d.ts +1 -1
  356. package/locales/en-SC.mjs +2 -2
  357. package/locales/en-SD.d.ts +1 -1
  358. package/locales/en-SD.mjs +2 -2
  359. package/locales/en-SE.d.ts +1 -1
  360. package/locales/en-SE.mjs +2 -2
  361. package/locales/en-SG.d.ts +1 -1
  362. package/locales/en-SG.mjs +2 -2
  363. package/locales/en-SH.d.ts +1 -1
  364. package/locales/en-SH.mjs +2 -2
  365. package/locales/en-SI.d.ts +1 -1
  366. package/locales/en-SI.mjs +2 -2
  367. package/locales/en-SL.d.ts +1 -1
  368. package/locales/en-SL.mjs +2 -2
  369. package/locales/en-SS.d.ts +1 -1
  370. package/locales/en-SS.mjs +2 -2
  371. package/locales/en-SX.d.ts +1 -1
  372. package/locales/en-SX.mjs +2 -2
  373. package/locales/en-SZ.d.ts +1 -1
  374. package/locales/en-SZ.mjs +2 -2
  375. package/locales/en-TC.d.ts +1 -1
  376. package/locales/en-TC.mjs +2 -2
  377. package/locales/en-TK.d.ts +1 -1
  378. package/locales/en-TK.mjs +2 -2
  379. package/locales/en-TO.d.ts +1 -1
  380. package/locales/en-TO.mjs +2 -2
  381. package/locales/en-TT.d.ts +1 -1
  382. package/locales/en-TT.mjs +2 -2
  383. package/locales/en-TV.d.ts +1 -1
  384. package/locales/en-TV.mjs +2 -2
  385. package/locales/en-TZ.d.ts +1 -1
  386. package/locales/en-TZ.mjs +2 -2
  387. package/locales/en-UG.d.ts +1 -1
  388. package/locales/en-UG.mjs +2 -2
  389. package/locales/en-UM.d.ts +1 -1
  390. package/locales/en-UM.mjs +2 -2
  391. package/locales/en-VC.d.ts +1 -1
  392. package/locales/en-VC.mjs +2 -2
  393. package/locales/en-VG.d.ts +1 -1
  394. package/locales/en-VG.mjs +2 -2
  395. package/locales/en-VI.d.ts +1 -1
  396. package/locales/en-VI.mjs +2 -2
  397. package/locales/en-VU.d.ts +1 -1
  398. package/locales/en-VU.mjs +2 -2
  399. package/locales/en-WS.d.ts +1 -1
  400. package/locales/en-WS.mjs +2 -2
  401. package/locales/en-ZA.d.ts +1 -1
  402. package/locales/en-ZA.mjs +2 -2
  403. package/locales/en-ZM.d.ts +1 -1
  404. package/locales/en-ZM.mjs +2 -2
  405. package/locales/en-ZW.d.ts +1 -1
  406. package/locales/en-ZW.mjs +2 -2
  407. package/locales/en.d.ts +1 -1
  408. package/locales/en.mjs +2 -2
  409. package/locales/eo.d.ts +1 -1
  410. package/locales/eo.mjs +2 -2
  411. package/locales/es-419.d.ts +1 -1
  412. package/locales/es-419.mjs +2 -2
  413. package/locales/es-AR.d.ts +1 -1
  414. package/locales/es-AR.mjs +2 -2
  415. package/locales/es-BO.d.ts +1 -1
  416. package/locales/es-BO.mjs +2 -2
  417. package/locales/es-BR.d.ts +1 -1
  418. package/locales/es-BR.mjs +2 -2
  419. package/locales/es-BZ.d.ts +1 -1
  420. package/locales/es-BZ.mjs +2 -2
  421. package/locales/es-CL.d.ts +1 -1
  422. package/locales/es-CL.mjs +2 -2
  423. package/locales/es-CO.d.ts +1 -1
  424. package/locales/es-CO.mjs +2 -2
  425. package/locales/es-CR.d.ts +1 -1
  426. package/locales/es-CR.mjs +2 -2
  427. package/locales/es-CU.d.ts +1 -1
  428. package/locales/es-CU.mjs +2 -2
  429. package/locales/es-DO.d.ts +1 -1
  430. package/locales/es-DO.mjs +2 -2
  431. package/locales/es-EA.d.ts +1 -1
  432. package/locales/es-EA.mjs +2 -2
  433. package/locales/es-EC.d.ts +1 -1
  434. package/locales/es-EC.mjs +2 -2
  435. package/locales/es-GQ.d.ts +1 -1
  436. package/locales/es-GQ.mjs +2 -2
  437. package/locales/es-GT.d.ts +1 -1
  438. package/locales/es-GT.mjs +2 -2
  439. package/locales/es-HN.d.ts +1 -1
  440. package/locales/es-HN.mjs +2 -2
  441. package/locales/es-IC.d.ts +1 -1
  442. package/locales/es-IC.mjs +2 -2
  443. package/locales/es-MX.d.ts +1 -1
  444. package/locales/es-MX.mjs +2 -2
  445. package/locales/es-NI.d.ts +1 -1
  446. package/locales/es-NI.mjs +2 -2
  447. package/locales/es-PA.d.ts +1 -1
  448. package/locales/es-PA.mjs +2 -2
  449. package/locales/es-PE.d.ts +1 -1
  450. package/locales/es-PE.mjs +2 -2
  451. package/locales/es-PH.d.ts +1 -1
  452. package/locales/es-PH.mjs +2 -2
  453. package/locales/es-PR.d.ts +1 -1
  454. package/locales/es-PR.mjs +2 -2
  455. package/locales/es-PY.d.ts +1 -1
  456. package/locales/es-PY.mjs +2 -2
  457. package/locales/es-SV.d.ts +1 -1
  458. package/locales/es-SV.mjs +2 -2
  459. package/locales/es-US.d.ts +1 -1
  460. package/locales/es-US.mjs +2 -2
  461. package/locales/es-UY.d.ts +1 -1
  462. package/locales/es-UY.mjs +2 -2
  463. package/locales/es-VE.d.ts +1 -1
  464. package/locales/es-VE.mjs +2 -2
  465. package/locales/es.d.ts +1 -1
  466. package/locales/es.mjs +2 -2
  467. package/locales/et.d.ts +1 -1
  468. package/locales/et.mjs +2 -2
  469. package/locales/eu.d.ts +1 -1
  470. package/locales/eu.mjs +2 -2
  471. package/locales/ewo.d.ts +1 -1
  472. package/locales/ewo.mjs +2 -2
  473. package/locales/extra/af-NA.d.ts +1 -1
  474. package/locales/extra/af-NA.mjs +2 -2
  475. package/locales/extra/af.d.ts +1 -1
  476. package/locales/extra/af.mjs +2 -2
  477. package/locales/extra/agq.d.ts +1 -1
  478. package/locales/extra/agq.mjs +2 -2
  479. package/locales/extra/ak.d.ts +1 -1
  480. package/locales/extra/ak.mjs +2 -2
  481. package/locales/extra/am.d.ts +1 -1
  482. package/locales/extra/am.mjs +2 -2
  483. package/locales/extra/ar-AE.d.ts +1 -1
  484. package/locales/extra/ar-AE.mjs +2 -2
  485. package/locales/extra/ar-BH.d.ts +1 -1
  486. package/locales/extra/ar-BH.mjs +2 -2
  487. package/locales/extra/ar-DJ.d.ts +1 -1
  488. package/locales/extra/ar-DJ.mjs +2 -2
  489. package/locales/extra/ar-DZ.d.ts +1 -1
  490. package/locales/extra/ar-DZ.mjs +2 -2
  491. package/locales/extra/ar-EG.d.ts +1 -1
  492. package/locales/extra/ar-EG.mjs +2 -2
  493. package/locales/extra/ar-EH.d.ts +1 -1
  494. package/locales/extra/ar-EH.mjs +2 -2
  495. package/locales/extra/ar-ER.d.ts +1 -1
  496. package/locales/extra/ar-ER.mjs +2 -2
  497. package/locales/extra/ar-IL.d.ts +1 -1
  498. package/locales/extra/ar-IL.mjs +2 -2
  499. package/locales/extra/ar-IQ.d.ts +1 -1
  500. package/locales/extra/ar-IQ.mjs +2 -2
  501. package/locales/extra/ar-JO.d.ts +1 -1
  502. package/locales/extra/ar-JO.mjs +2 -2
  503. package/locales/extra/ar-KM.d.ts +1 -1
  504. package/locales/extra/ar-KM.mjs +2 -2
  505. package/locales/extra/ar-KW.d.ts +1 -1
  506. package/locales/extra/ar-KW.mjs +2 -2
  507. package/locales/extra/ar-LB.d.ts +1 -1
  508. package/locales/extra/ar-LB.mjs +2 -2
  509. package/locales/extra/ar-LY.d.ts +1 -1
  510. package/locales/extra/ar-LY.mjs +2 -2
  511. package/locales/extra/ar-MA.d.ts +1 -1
  512. package/locales/extra/ar-MA.mjs +2 -2
  513. package/locales/extra/ar-MR.d.ts +1 -1
  514. package/locales/extra/ar-MR.mjs +2 -2
  515. package/locales/extra/ar-OM.d.ts +1 -1
  516. package/locales/extra/ar-OM.mjs +2 -2
  517. package/locales/extra/ar-PS.d.ts +1 -1
  518. package/locales/extra/ar-PS.mjs +2 -2
  519. package/locales/extra/ar-QA.d.ts +1 -1
  520. package/locales/extra/ar-QA.mjs +2 -2
  521. package/locales/extra/ar-SA.d.ts +1 -1
  522. package/locales/extra/ar-SA.mjs +2 -2
  523. package/locales/extra/ar-SD.d.ts +1 -1
  524. package/locales/extra/ar-SD.mjs +2 -2
  525. package/locales/extra/ar-SO.d.ts +1 -1
  526. package/locales/extra/ar-SO.mjs +2 -2
  527. package/locales/extra/ar-SS.d.ts +1 -1
  528. package/locales/extra/ar-SS.mjs +2 -2
  529. package/locales/extra/ar-SY.d.ts +1 -1
  530. package/locales/extra/ar-SY.mjs +2 -2
  531. package/locales/extra/ar-TD.d.ts +1 -1
  532. package/locales/extra/ar-TD.mjs +2 -2
  533. package/locales/extra/ar-TN.d.ts +1 -1
  534. package/locales/extra/ar-TN.mjs +2 -2
  535. package/locales/extra/ar-YE.d.ts +1 -1
  536. package/locales/extra/ar-YE.mjs +2 -2
  537. package/locales/extra/ar.d.ts +1 -1
  538. package/locales/extra/ar.mjs +2 -2
  539. package/locales/extra/as.d.ts +1 -1
  540. package/locales/extra/as.mjs +2 -2
  541. package/locales/extra/asa.d.ts +1 -1
  542. package/locales/extra/asa.mjs +2 -2
  543. package/locales/extra/ast.d.ts +1 -1
  544. package/locales/extra/ast.mjs +2 -2
  545. package/locales/extra/az-Cyrl.d.ts +1 -1
  546. package/locales/extra/az-Cyrl.mjs +2 -2
  547. package/locales/extra/az-Latn.d.ts +1 -1
  548. package/locales/extra/az-Latn.mjs +2 -2
  549. package/locales/extra/az.d.ts +1 -1
  550. package/locales/extra/az.mjs +2 -2
  551. package/locales/extra/bas.d.ts +1 -1
  552. package/locales/extra/bas.mjs +2 -2
  553. package/locales/extra/be-tarask.d.ts +1 -1
  554. package/locales/extra/be-tarask.mjs +2 -2
  555. package/locales/extra/be.d.ts +1 -1
  556. package/locales/extra/be.mjs +2 -2
  557. package/locales/extra/bem.d.ts +1 -1
  558. package/locales/extra/bem.mjs +2 -2
  559. package/locales/extra/bez.d.ts +1 -1
  560. package/locales/extra/bez.mjs +2 -2
  561. package/locales/extra/bg.d.ts +1 -1
  562. package/locales/extra/bg.mjs +2 -2
  563. package/locales/extra/bm.d.ts +1 -1
  564. package/locales/extra/bm.mjs +2 -2
  565. package/locales/extra/bn-IN.d.ts +1 -1
  566. package/locales/extra/bn-IN.mjs +2 -2
  567. package/locales/extra/bn.d.ts +1 -1
  568. package/locales/extra/bn.mjs +2 -2
  569. package/locales/extra/bo-IN.d.ts +1 -1
  570. package/locales/extra/bo-IN.mjs +2 -2
  571. package/locales/extra/bo.d.ts +1 -1
  572. package/locales/extra/bo.mjs +2 -2
  573. package/locales/extra/br.d.ts +1 -1
  574. package/locales/extra/br.mjs +2 -2
  575. package/locales/extra/brx.d.ts +1 -1
  576. package/locales/extra/brx.mjs +2 -2
  577. package/locales/extra/bs-Cyrl.d.ts +1 -1
  578. package/locales/extra/bs-Cyrl.mjs +2 -2
  579. package/locales/extra/bs-Latn.d.ts +1 -1
  580. package/locales/extra/bs-Latn.mjs +2 -2
  581. package/locales/extra/bs.d.ts +1 -1
  582. package/locales/extra/bs.mjs +2 -2
  583. package/locales/extra/ca-AD.d.ts +1 -1
  584. package/locales/extra/ca-AD.mjs +2 -2
  585. package/locales/extra/ca-ES-valencia.d.ts +1 -1
  586. package/locales/extra/ca-ES-valencia.mjs +2 -2
  587. package/locales/extra/ca-FR.d.ts +1 -1
  588. package/locales/extra/ca-FR.mjs +2 -2
  589. package/locales/extra/ca-IT.d.ts +1 -1
  590. package/locales/extra/ca-IT.mjs +2 -2
  591. package/locales/extra/ca.d.ts +1 -1
  592. package/locales/extra/ca.mjs +2 -2
  593. package/locales/extra/ccp-IN.d.ts +1 -1
  594. package/locales/extra/ccp-IN.mjs +2 -2
  595. package/locales/extra/ccp.d.ts +1 -1
  596. package/locales/extra/ccp.mjs +2 -2
  597. package/locales/extra/ce.d.ts +1 -1
  598. package/locales/extra/ce.mjs +2 -2
  599. package/locales/extra/ceb.d.ts +1 -1
  600. package/locales/extra/ceb.mjs +2 -2
  601. package/locales/extra/cgg.d.ts +1 -1
  602. package/locales/extra/cgg.mjs +2 -2
  603. package/locales/extra/chr.d.ts +1 -1
  604. package/locales/extra/chr.mjs +2 -2
  605. package/locales/extra/ckb-IR.d.ts +1 -1
  606. package/locales/extra/ckb-IR.mjs +2 -2
  607. package/locales/extra/ckb.d.ts +1 -1
  608. package/locales/extra/ckb.mjs +2 -2
  609. package/locales/extra/cs.d.ts +1 -1
  610. package/locales/extra/cs.mjs +2 -2
  611. package/locales/extra/cy.d.ts +1 -1
  612. package/locales/extra/cy.mjs +2 -2
  613. package/locales/extra/da-GL.d.ts +1 -1
  614. package/locales/extra/da-GL.mjs +2 -2
  615. package/locales/extra/da.d.ts +1 -1
  616. package/locales/extra/da.mjs +2 -2
  617. package/locales/extra/dav.d.ts +1 -1
  618. package/locales/extra/dav.mjs +2 -2
  619. package/locales/extra/de-AT.d.ts +1 -1
  620. package/locales/extra/de-AT.mjs +2 -2
  621. package/locales/extra/de-BE.d.ts +1 -1
  622. package/locales/extra/de-BE.mjs +2 -2
  623. package/locales/extra/de-CH.d.ts +1 -1
  624. package/locales/extra/de-CH.mjs +2 -2
  625. package/locales/extra/de-IT.d.ts +1 -1
  626. package/locales/extra/de-IT.mjs +2 -2
  627. package/locales/extra/de-LI.d.ts +1 -1
  628. package/locales/extra/de-LI.mjs +2 -2
  629. package/locales/extra/de-LU.d.ts +1 -1
  630. package/locales/extra/de-LU.mjs +2 -2
  631. package/locales/extra/de.d.ts +1 -1
  632. package/locales/extra/de.mjs +2 -2
  633. package/locales/extra/dje.d.ts +1 -1
  634. package/locales/extra/dje.mjs +2 -2
  635. package/locales/extra/doi.d.ts +1 -1
  636. package/locales/extra/doi.mjs +2 -2
  637. package/locales/extra/dsb.d.ts +1 -1
  638. package/locales/extra/dsb.mjs +2 -2
  639. package/locales/extra/dua.d.ts +1 -1
  640. package/locales/extra/dua.mjs +2 -2
  641. package/locales/extra/dyo.d.ts +1 -1
  642. package/locales/extra/dyo.mjs +2 -2
  643. package/locales/extra/dz.d.ts +1 -1
  644. package/locales/extra/dz.mjs +2 -2
  645. package/locales/extra/ebu.d.ts +1 -1
  646. package/locales/extra/ebu.mjs +2 -2
  647. package/locales/extra/ee-TG.d.ts +1 -1
  648. package/locales/extra/ee-TG.mjs +2 -2
  649. package/locales/extra/ee.d.ts +1 -1
  650. package/locales/extra/ee.mjs +2 -2
  651. package/locales/extra/el-CY.d.ts +1 -1
  652. package/locales/extra/el-CY.mjs +2 -2
  653. package/locales/extra/el.d.ts +1 -1
  654. package/locales/extra/el.mjs +2 -2
  655. package/locales/extra/en-001.d.ts +1 -1
  656. package/locales/extra/en-001.mjs +2 -2
  657. package/locales/extra/en-150.d.ts +1 -1
  658. package/locales/extra/en-150.mjs +2 -2
  659. package/locales/extra/en-AE.d.ts +1 -1
  660. package/locales/extra/en-AE.mjs +2 -2
  661. package/locales/extra/en-AG.d.ts +1 -1
  662. package/locales/extra/en-AG.mjs +2 -2
  663. package/locales/extra/en-AI.d.ts +1 -1
  664. package/locales/extra/en-AI.mjs +2 -2
  665. package/locales/extra/en-AS.d.ts +1 -1
  666. package/locales/extra/en-AS.mjs +2 -2
  667. package/locales/extra/en-AT.d.ts +1 -1
  668. package/locales/extra/en-AT.mjs +2 -2
  669. package/locales/extra/en-AU.d.ts +1 -1
  670. package/locales/extra/en-AU.mjs +2 -2
  671. package/locales/extra/en-BB.d.ts +1 -1
  672. package/locales/extra/en-BB.mjs +2 -2
  673. package/locales/extra/en-BE.d.ts +1 -1
  674. package/locales/extra/en-BE.mjs +2 -2
  675. package/locales/extra/en-BI.d.ts +1 -1
  676. package/locales/extra/en-BI.mjs +2 -2
  677. package/locales/extra/en-BM.d.ts +1 -1
  678. package/locales/extra/en-BM.mjs +2 -2
  679. package/locales/extra/en-BS.d.ts +1 -1
  680. package/locales/extra/en-BS.mjs +2 -2
  681. package/locales/extra/en-BW.d.ts +1 -1
  682. package/locales/extra/en-BW.mjs +2 -2
  683. package/locales/extra/en-BZ.d.ts +1 -1
  684. package/locales/extra/en-BZ.mjs +2 -2
  685. package/locales/extra/en-CA.d.ts +1 -1
  686. package/locales/extra/en-CA.mjs +2 -2
  687. package/locales/extra/en-CC.d.ts +1 -1
  688. package/locales/extra/en-CC.mjs +2 -2
  689. package/locales/extra/en-CH.d.ts +1 -1
  690. package/locales/extra/en-CH.mjs +2 -2
  691. package/locales/extra/en-CK.d.ts +1 -1
  692. package/locales/extra/en-CK.mjs +2 -2
  693. package/locales/extra/en-CM.d.ts +1 -1
  694. package/locales/extra/en-CM.mjs +2 -2
  695. package/locales/extra/en-CX.d.ts +1 -1
  696. package/locales/extra/en-CX.mjs +2 -2
  697. package/locales/extra/en-CY.d.ts +1 -1
  698. package/locales/extra/en-CY.mjs +2 -2
  699. package/locales/extra/en-DE.d.ts +1 -1
  700. package/locales/extra/en-DE.mjs +2 -2
  701. package/locales/extra/en-DG.d.ts +1 -1
  702. package/locales/extra/en-DG.mjs +2 -2
  703. package/locales/extra/en-DK.d.ts +1 -1
  704. package/locales/extra/en-DK.mjs +2 -2
  705. package/locales/extra/en-DM.d.ts +1 -1
  706. package/locales/extra/en-DM.mjs +2 -2
  707. package/locales/extra/en-ER.d.ts +1 -1
  708. package/locales/extra/en-ER.mjs +2 -2
  709. package/locales/extra/en-FI.d.ts +1 -1
  710. package/locales/extra/en-FI.mjs +2 -2
  711. package/locales/extra/en-FJ.d.ts +1 -1
  712. package/locales/extra/en-FJ.mjs +2 -2
  713. package/locales/extra/en-FK.d.ts +1 -1
  714. package/locales/extra/en-FK.mjs +2 -2
  715. package/locales/extra/en-FM.d.ts +1 -1
  716. package/locales/extra/en-FM.mjs +2 -2
  717. package/locales/extra/en-GB.d.ts +1 -1
  718. package/locales/extra/en-GB.mjs +2 -2
  719. package/locales/extra/en-GD.d.ts +1 -1
  720. package/locales/extra/en-GD.mjs +2 -2
  721. package/locales/extra/en-GG.d.ts +1 -1
  722. package/locales/extra/en-GG.mjs +2 -2
  723. package/locales/extra/en-GH.d.ts +1 -1
  724. package/locales/extra/en-GH.mjs +2 -2
  725. package/locales/extra/en-GI.d.ts +1 -1
  726. package/locales/extra/en-GI.mjs +2 -2
  727. package/locales/extra/en-GM.d.ts +1 -1
  728. package/locales/extra/en-GM.mjs +2 -2
  729. package/locales/extra/en-GU.d.ts +1 -1
  730. package/locales/extra/en-GU.mjs +2 -2
  731. package/locales/extra/en-GY.d.ts +1 -1
  732. package/locales/extra/en-GY.mjs +2 -2
  733. package/locales/extra/en-HK.d.ts +1 -1
  734. package/locales/extra/en-HK.mjs +2 -2
  735. package/locales/extra/en-IE.d.ts +1 -1
  736. package/locales/extra/en-IE.mjs +2 -2
  737. package/locales/extra/en-IL.d.ts +1 -1
  738. package/locales/extra/en-IL.mjs +2 -2
  739. package/locales/extra/en-IM.d.ts +1 -1
  740. package/locales/extra/en-IM.mjs +2 -2
  741. package/locales/extra/en-IN.d.ts +1 -1
  742. package/locales/extra/en-IN.mjs +2 -2
  743. package/locales/extra/en-IO.d.ts +1 -1
  744. package/locales/extra/en-IO.mjs +2 -2
  745. package/locales/extra/en-JE.d.ts +1 -1
  746. package/locales/extra/en-JE.mjs +2 -2
  747. package/locales/extra/en-JM.d.ts +1 -1
  748. package/locales/extra/en-JM.mjs +2 -2
  749. package/locales/extra/en-KE.d.ts +1 -1
  750. package/locales/extra/en-KE.mjs +2 -2
  751. package/locales/extra/en-KI.d.ts +1 -1
  752. package/locales/extra/en-KI.mjs +2 -2
  753. package/locales/extra/en-KN.d.ts +1 -1
  754. package/locales/extra/en-KN.mjs +2 -2
  755. package/locales/extra/en-KY.d.ts +1 -1
  756. package/locales/extra/en-KY.mjs +2 -2
  757. package/locales/extra/en-LC.d.ts +1 -1
  758. package/locales/extra/en-LC.mjs +2 -2
  759. package/locales/extra/en-LR.d.ts +1 -1
  760. package/locales/extra/en-LR.mjs +2 -2
  761. package/locales/extra/en-LS.d.ts +1 -1
  762. package/locales/extra/en-LS.mjs +2 -2
  763. package/locales/extra/en-MG.d.ts +1 -1
  764. package/locales/extra/en-MG.mjs +2 -2
  765. package/locales/extra/en-MH.d.ts +1 -1
  766. package/locales/extra/en-MH.mjs +2 -2
  767. package/locales/extra/en-MO.d.ts +1 -1
  768. package/locales/extra/en-MO.mjs +2 -2
  769. package/locales/extra/en-MP.d.ts +1 -1
  770. package/locales/extra/en-MP.mjs +2 -2
  771. package/locales/extra/en-MS.d.ts +1 -1
  772. package/locales/extra/en-MS.mjs +2 -2
  773. package/locales/extra/en-MT.d.ts +1 -1
  774. package/locales/extra/en-MT.mjs +2 -2
  775. package/locales/extra/en-MU.d.ts +1 -1
  776. package/locales/extra/en-MU.mjs +2 -2
  777. package/locales/extra/en-MV.d.ts +1 -1
  778. package/locales/extra/en-MV.mjs +2 -2
  779. package/locales/extra/en-MW.d.ts +1 -1
  780. package/locales/extra/en-MW.mjs +2 -2
  781. package/locales/extra/en-MY.d.ts +1 -1
  782. package/locales/extra/en-MY.mjs +2 -2
  783. package/locales/extra/en-NA.d.ts +1 -1
  784. package/locales/extra/en-NA.mjs +2 -2
  785. package/locales/extra/en-NF.d.ts +1 -1
  786. package/locales/extra/en-NF.mjs +2 -2
  787. package/locales/extra/en-NG.d.ts +1 -1
  788. package/locales/extra/en-NG.mjs +2 -2
  789. package/locales/extra/en-NL.d.ts +1 -1
  790. package/locales/extra/en-NL.mjs +2 -2
  791. package/locales/extra/en-NR.d.ts +1 -1
  792. package/locales/extra/en-NR.mjs +2 -2
  793. package/locales/extra/en-NU.d.ts +1 -1
  794. package/locales/extra/en-NU.mjs +2 -2
  795. package/locales/extra/en-NZ.d.ts +1 -1
  796. package/locales/extra/en-NZ.mjs +2 -2
  797. package/locales/extra/en-PG.d.ts +1 -1
  798. package/locales/extra/en-PG.mjs +2 -2
  799. package/locales/extra/en-PH.d.ts +1 -1
  800. package/locales/extra/en-PH.mjs +2 -2
  801. package/locales/extra/en-PK.d.ts +1 -1
  802. package/locales/extra/en-PK.mjs +2 -2
  803. package/locales/extra/en-PN.d.ts +1 -1
  804. package/locales/extra/en-PN.mjs +2 -2
  805. package/locales/extra/en-PR.d.ts +1 -1
  806. package/locales/extra/en-PR.mjs +2 -2
  807. package/locales/extra/en-PW.d.ts +1 -1
  808. package/locales/extra/en-PW.mjs +2 -2
  809. package/locales/extra/en-RW.d.ts +1 -1
  810. package/locales/extra/en-RW.mjs +2 -2
  811. package/locales/extra/en-SB.d.ts +1 -1
  812. package/locales/extra/en-SB.mjs +2 -2
  813. package/locales/extra/en-SC.d.ts +1 -1
  814. package/locales/extra/en-SC.mjs +2 -2
  815. package/locales/extra/en-SD.d.ts +1 -1
  816. package/locales/extra/en-SD.mjs +2 -2
  817. package/locales/extra/en-SE.d.ts +1 -1
  818. package/locales/extra/en-SE.mjs +2 -2
  819. package/locales/extra/en-SG.d.ts +1 -1
  820. package/locales/extra/en-SG.mjs +2 -2
  821. package/locales/extra/en-SH.d.ts +1 -1
  822. package/locales/extra/en-SH.mjs +2 -2
  823. package/locales/extra/en-SI.d.ts +1 -1
  824. package/locales/extra/en-SI.mjs +2 -2
  825. package/locales/extra/en-SL.d.ts +1 -1
  826. package/locales/extra/en-SL.mjs +2 -2
  827. package/locales/extra/en-SS.d.ts +1 -1
  828. package/locales/extra/en-SS.mjs +2 -2
  829. package/locales/extra/en-SX.d.ts +1 -1
  830. package/locales/extra/en-SX.mjs +2 -2
  831. package/locales/extra/en-SZ.d.ts +1 -1
  832. package/locales/extra/en-SZ.mjs +2 -2
  833. package/locales/extra/en-TC.d.ts +1 -1
  834. package/locales/extra/en-TC.mjs +2 -2
  835. package/locales/extra/en-TK.d.ts +1 -1
  836. package/locales/extra/en-TK.mjs +2 -2
  837. package/locales/extra/en-TO.d.ts +1 -1
  838. package/locales/extra/en-TO.mjs +2 -2
  839. package/locales/extra/en-TT.d.ts +1 -1
  840. package/locales/extra/en-TT.mjs +2 -2
  841. package/locales/extra/en-TV.d.ts +1 -1
  842. package/locales/extra/en-TV.mjs +2 -2
  843. package/locales/extra/en-TZ.d.ts +1 -1
  844. package/locales/extra/en-TZ.mjs +2 -2
  845. package/locales/extra/en-UG.d.ts +1 -1
  846. package/locales/extra/en-UG.mjs +2 -2
  847. package/locales/extra/en-UM.d.ts +1 -1
  848. package/locales/extra/en-UM.mjs +2 -2
  849. package/locales/extra/en-VC.d.ts +1 -1
  850. package/locales/extra/en-VC.mjs +2 -2
  851. package/locales/extra/en-VG.d.ts +1 -1
  852. package/locales/extra/en-VG.mjs +2 -2
  853. package/locales/extra/en-VI.d.ts +1 -1
  854. package/locales/extra/en-VI.mjs +2 -2
  855. package/locales/extra/en-VU.d.ts +1 -1
  856. package/locales/extra/en-VU.mjs +2 -2
  857. package/locales/extra/en-WS.d.ts +1 -1
  858. package/locales/extra/en-WS.mjs +2 -2
  859. package/locales/extra/en-ZA.d.ts +1 -1
  860. package/locales/extra/en-ZA.mjs +2 -2
  861. package/locales/extra/en-ZM.d.ts +1 -1
  862. package/locales/extra/en-ZM.mjs +2 -2
  863. package/locales/extra/en-ZW.d.ts +1 -1
  864. package/locales/extra/en-ZW.mjs +2 -2
  865. package/locales/extra/en.d.ts +1 -1
  866. package/locales/extra/en.mjs +2 -2
  867. package/locales/extra/eo.d.ts +1 -1
  868. package/locales/extra/eo.mjs +2 -2
  869. package/locales/extra/es-419.d.ts +1 -1
  870. package/locales/extra/es-419.mjs +2 -2
  871. package/locales/extra/es-AR.d.ts +1 -1
  872. package/locales/extra/es-AR.mjs +2 -2
  873. package/locales/extra/es-BO.d.ts +1 -1
  874. package/locales/extra/es-BO.mjs +2 -2
  875. package/locales/extra/es-BR.d.ts +1 -1
  876. package/locales/extra/es-BR.mjs +2 -2
  877. package/locales/extra/es-BZ.d.ts +1 -1
  878. package/locales/extra/es-BZ.mjs +2 -2
  879. package/locales/extra/es-CL.d.ts +1 -1
  880. package/locales/extra/es-CL.mjs +2 -2
  881. package/locales/extra/es-CO.d.ts +1 -1
  882. package/locales/extra/es-CO.mjs +2 -2
  883. package/locales/extra/es-CR.d.ts +1 -1
  884. package/locales/extra/es-CR.mjs +2 -2
  885. package/locales/extra/es-CU.d.ts +1 -1
  886. package/locales/extra/es-CU.mjs +2 -2
  887. package/locales/extra/es-DO.d.ts +1 -1
  888. package/locales/extra/es-DO.mjs +2 -2
  889. package/locales/extra/es-EA.d.ts +1 -1
  890. package/locales/extra/es-EA.mjs +2 -2
  891. package/locales/extra/es-EC.d.ts +1 -1
  892. package/locales/extra/es-EC.mjs +2 -2
  893. package/locales/extra/es-GQ.d.ts +1 -1
  894. package/locales/extra/es-GQ.mjs +2 -2
  895. package/locales/extra/es-GT.d.ts +1 -1
  896. package/locales/extra/es-GT.mjs +2 -2
  897. package/locales/extra/es-HN.d.ts +1 -1
  898. package/locales/extra/es-HN.mjs +2 -2
  899. package/locales/extra/es-IC.d.ts +1 -1
  900. package/locales/extra/es-IC.mjs +2 -2
  901. package/locales/extra/es-MX.d.ts +1 -1
  902. package/locales/extra/es-MX.mjs +2 -2
  903. package/locales/extra/es-NI.d.ts +1 -1
  904. package/locales/extra/es-NI.mjs +2 -2
  905. package/locales/extra/es-PA.d.ts +1 -1
  906. package/locales/extra/es-PA.mjs +2 -2
  907. package/locales/extra/es-PE.d.ts +1 -1
  908. package/locales/extra/es-PE.mjs +2 -2
  909. package/locales/extra/es-PH.d.ts +1 -1
  910. package/locales/extra/es-PH.mjs +2 -2
  911. package/locales/extra/es-PR.d.ts +1 -1
  912. package/locales/extra/es-PR.mjs +2 -2
  913. package/locales/extra/es-PY.d.ts +1 -1
  914. package/locales/extra/es-PY.mjs +2 -2
  915. package/locales/extra/es-SV.d.ts +1 -1
  916. package/locales/extra/es-SV.mjs +2 -2
  917. package/locales/extra/es-US.d.ts +1 -1
  918. package/locales/extra/es-US.mjs +2 -2
  919. package/locales/extra/es-UY.d.ts +1 -1
  920. package/locales/extra/es-UY.mjs +2 -2
  921. package/locales/extra/es-VE.d.ts +1 -1
  922. package/locales/extra/es-VE.mjs +2 -2
  923. package/locales/extra/es.d.ts +1 -1
  924. package/locales/extra/es.mjs +2 -2
  925. package/locales/extra/et.d.ts +1 -1
  926. package/locales/extra/et.mjs +2 -2
  927. package/locales/extra/eu.d.ts +1 -1
  928. package/locales/extra/eu.mjs +2 -2
  929. package/locales/extra/ewo.d.ts +1 -1
  930. package/locales/extra/ewo.mjs +2 -2
  931. package/locales/extra/fa-AF.d.ts +1 -1
  932. package/locales/extra/fa-AF.mjs +2 -2
  933. package/locales/extra/fa.d.ts +1 -1
  934. package/locales/extra/fa.mjs +2 -2
  935. package/locales/extra/ff-Adlm-BF.d.ts +1 -1
  936. package/locales/extra/ff-Adlm-BF.mjs +2 -2
  937. package/locales/extra/ff-Adlm-CM.d.ts +1 -1
  938. package/locales/extra/ff-Adlm-CM.mjs +2 -2
  939. package/locales/extra/ff-Adlm-GH.d.ts +1 -1
  940. package/locales/extra/ff-Adlm-GH.mjs +2 -2
  941. package/locales/extra/ff-Adlm-GM.d.ts +1 -1
  942. package/locales/extra/ff-Adlm-GM.mjs +2 -2
  943. package/locales/extra/ff-Adlm-GW.d.ts +1 -1
  944. package/locales/extra/ff-Adlm-GW.mjs +2 -2
  945. package/locales/extra/ff-Adlm-LR.d.ts +1 -1
  946. package/locales/extra/ff-Adlm-LR.mjs +2 -2
  947. package/locales/extra/ff-Adlm-MR.d.ts +1 -1
  948. package/locales/extra/ff-Adlm-MR.mjs +2 -2
  949. package/locales/extra/ff-Adlm-NE.d.ts +1 -1
  950. package/locales/extra/ff-Adlm-NE.mjs +2 -2
  951. package/locales/extra/ff-Adlm-NG.d.ts +1 -1
  952. package/locales/extra/ff-Adlm-NG.mjs +2 -2
  953. package/locales/extra/ff-Adlm-SL.d.ts +1 -1
  954. package/locales/extra/ff-Adlm-SL.mjs +2 -2
  955. package/locales/extra/ff-Adlm-SN.d.ts +1 -1
  956. package/locales/extra/ff-Adlm-SN.mjs +2 -2
  957. package/locales/extra/ff-Adlm.d.ts +1 -1
  958. package/locales/extra/ff-Adlm.mjs +2 -2
  959. package/locales/extra/ff-CM.d.ts +1 -1
  960. package/locales/extra/ff-CM.mjs +2 -2
  961. package/locales/extra/ff-GN.d.ts +1 -1
  962. package/locales/extra/ff-GN.mjs +2 -2
  963. package/locales/extra/ff-Latn-BF.d.ts +1 -1
  964. package/locales/extra/ff-Latn-BF.mjs +2 -2
  965. package/locales/extra/ff-Latn-CM.d.ts +1 -1
  966. package/locales/extra/ff-Latn-CM.mjs +2 -2
  967. package/locales/extra/ff-Latn-GH.d.ts +1 -1
  968. package/locales/extra/ff-Latn-GH.mjs +2 -2
  969. package/locales/extra/ff-Latn-GM.d.ts +1 -1
  970. package/locales/extra/ff-Latn-GM.mjs +2 -2
  971. package/locales/extra/ff-Latn-GN.d.ts +1 -1
  972. package/locales/extra/ff-Latn-GN.mjs +2 -2
  973. package/locales/extra/ff-Latn-GW.d.ts +1 -1
  974. package/locales/extra/ff-Latn-GW.mjs +2 -2
  975. package/locales/extra/ff-Latn-LR.d.ts +1 -1
  976. package/locales/extra/ff-Latn-LR.mjs +2 -2
  977. package/locales/extra/ff-Latn-MR.d.ts +1 -1
  978. package/locales/extra/ff-Latn-MR.mjs +2 -2
  979. package/locales/extra/ff-Latn-NE.d.ts +1 -1
  980. package/locales/extra/ff-Latn-NE.mjs +2 -2
  981. package/locales/extra/ff-Latn-NG.d.ts +1 -1
  982. package/locales/extra/ff-Latn-NG.mjs +2 -2
  983. package/locales/extra/ff-Latn-SL.d.ts +1 -1
  984. package/locales/extra/ff-Latn-SL.mjs +2 -2
  985. package/locales/extra/ff-Latn.d.ts +1 -1
  986. package/locales/extra/ff-Latn.mjs +2 -2
  987. package/locales/extra/ff-MR.d.ts +1 -1
  988. package/locales/extra/ff-MR.mjs +2 -2
  989. package/locales/extra/ff.d.ts +1 -1
  990. package/locales/extra/ff.mjs +2 -2
  991. package/locales/extra/fi.d.ts +1 -1
  992. package/locales/extra/fi.mjs +2 -2
  993. package/locales/extra/fil.d.ts +1 -1
  994. package/locales/extra/fil.mjs +2 -2
  995. package/locales/extra/fo-DK.d.ts +1 -1
  996. package/locales/extra/fo-DK.mjs +2 -2
  997. package/locales/extra/fo.d.ts +1 -1
  998. package/locales/extra/fo.mjs +2 -2
  999. package/locales/extra/fr-BE.d.ts +1 -1
  1000. package/locales/extra/fr-BE.mjs +2 -2
  1001. package/locales/extra/fr-BF.d.ts +1 -1
  1002. package/locales/extra/fr-BF.mjs +2 -2
  1003. package/locales/extra/fr-BI.d.ts +1 -1
  1004. package/locales/extra/fr-BI.mjs +2 -2
  1005. package/locales/extra/fr-BJ.d.ts +1 -1
  1006. package/locales/extra/fr-BJ.mjs +2 -2
  1007. package/locales/extra/fr-BL.d.ts +1 -1
  1008. package/locales/extra/fr-BL.mjs +2 -2
  1009. package/locales/extra/fr-CA.d.ts +1 -1
  1010. package/locales/extra/fr-CA.mjs +2 -2
  1011. package/locales/extra/fr-CD.d.ts +1 -1
  1012. package/locales/extra/fr-CD.mjs +2 -2
  1013. package/locales/extra/fr-CF.d.ts +1 -1
  1014. package/locales/extra/fr-CF.mjs +2 -2
  1015. package/locales/extra/fr-CG.d.ts +1 -1
  1016. package/locales/extra/fr-CG.mjs +2 -2
  1017. package/locales/extra/fr-CH.d.ts +1 -1
  1018. package/locales/extra/fr-CH.mjs +2 -2
  1019. package/locales/extra/fr-CI.d.ts +1 -1
  1020. package/locales/extra/fr-CI.mjs +2 -2
  1021. package/locales/extra/fr-CM.d.ts +1 -1
  1022. package/locales/extra/fr-CM.mjs +2 -2
  1023. package/locales/extra/fr-DJ.d.ts +1 -1
  1024. package/locales/extra/fr-DJ.mjs +2 -2
  1025. package/locales/extra/fr-DZ.d.ts +1 -1
  1026. package/locales/extra/fr-DZ.mjs +2 -2
  1027. package/locales/extra/fr-GA.d.ts +1 -1
  1028. package/locales/extra/fr-GA.mjs +2 -2
  1029. package/locales/extra/fr-GF.d.ts +1 -1
  1030. package/locales/extra/fr-GF.mjs +2 -2
  1031. package/locales/extra/fr-GN.d.ts +1 -1
  1032. package/locales/extra/fr-GN.mjs +2 -2
  1033. package/locales/extra/fr-GP.d.ts +1 -1
  1034. package/locales/extra/fr-GP.mjs +2 -2
  1035. package/locales/extra/fr-GQ.d.ts +1 -1
  1036. package/locales/extra/fr-GQ.mjs +2 -2
  1037. package/locales/extra/fr-HT.d.ts +1 -1
  1038. package/locales/extra/fr-HT.mjs +2 -2
  1039. package/locales/extra/fr-KM.d.ts +1 -1
  1040. package/locales/extra/fr-KM.mjs +2 -2
  1041. package/locales/extra/fr-LU.d.ts +1 -1
  1042. package/locales/extra/fr-LU.mjs +2 -2
  1043. package/locales/extra/fr-MA.d.ts +1 -1
  1044. package/locales/extra/fr-MA.mjs +2 -2
  1045. package/locales/extra/fr-MC.d.ts +1 -1
  1046. package/locales/extra/fr-MC.mjs +2 -2
  1047. package/locales/extra/fr-MF.d.ts +1 -1
  1048. package/locales/extra/fr-MF.mjs +2 -2
  1049. package/locales/extra/fr-MG.d.ts +1 -1
  1050. package/locales/extra/fr-MG.mjs +2 -2
  1051. package/locales/extra/fr-ML.d.ts +1 -1
  1052. package/locales/extra/fr-ML.mjs +2 -2
  1053. package/locales/extra/fr-MQ.d.ts +1 -1
  1054. package/locales/extra/fr-MQ.mjs +2 -2
  1055. package/locales/extra/fr-MR.d.ts +1 -1
  1056. package/locales/extra/fr-MR.mjs +2 -2
  1057. package/locales/extra/fr-MU.d.ts +1 -1
  1058. package/locales/extra/fr-MU.mjs +2 -2
  1059. package/locales/extra/fr-NC.d.ts +1 -1
  1060. package/locales/extra/fr-NC.mjs +2 -2
  1061. package/locales/extra/fr-NE.d.ts +1 -1
  1062. package/locales/extra/fr-NE.mjs +2 -2
  1063. package/locales/extra/fr-PF.d.ts +1 -1
  1064. package/locales/extra/fr-PF.mjs +2 -2
  1065. package/locales/extra/fr-PM.d.ts +1 -1
  1066. package/locales/extra/fr-PM.mjs +2 -2
  1067. package/locales/extra/fr-RE.d.ts +1 -1
  1068. package/locales/extra/fr-RE.mjs +2 -2
  1069. package/locales/extra/fr-RW.d.ts +1 -1
  1070. package/locales/extra/fr-RW.mjs +2 -2
  1071. package/locales/extra/fr-SC.d.ts +1 -1
  1072. package/locales/extra/fr-SC.mjs +2 -2
  1073. package/locales/extra/fr-SN.d.ts +1 -1
  1074. package/locales/extra/fr-SN.mjs +2 -2
  1075. package/locales/extra/fr-SY.d.ts +1 -1
  1076. package/locales/extra/fr-SY.mjs +2 -2
  1077. package/locales/extra/fr-TD.d.ts +1 -1
  1078. package/locales/extra/fr-TD.mjs +2 -2
  1079. package/locales/extra/fr-TG.d.ts +1 -1
  1080. package/locales/extra/fr-TG.mjs +2 -2
  1081. package/locales/extra/fr-TN.d.ts +1 -1
  1082. package/locales/extra/fr-TN.mjs +2 -2
  1083. package/locales/extra/fr-VU.d.ts +1 -1
  1084. package/locales/extra/fr-VU.mjs +2 -2
  1085. package/locales/extra/fr-WF.d.ts +1 -1
  1086. package/locales/extra/fr-WF.mjs +2 -2
  1087. package/locales/extra/fr-YT.d.ts +1 -1
  1088. package/locales/extra/fr-YT.mjs +2 -2
  1089. package/locales/extra/fr.d.ts +1 -1
  1090. package/locales/extra/fr.mjs +2 -2
  1091. package/locales/extra/fur.d.ts +1 -1
  1092. package/locales/extra/fur.mjs +2 -2
  1093. package/locales/extra/fy.d.ts +1 -1
  1094. package/locales/extra/fy.mjs +2 -2
  1095. package/locales/extra/ga-GB.d.ts +1 -1
  1096. package/locales/extra/ga-GB.mjs +2 -2
  1097. package/locales/extra/ga.d.ts +1 -1
  1098. package/locales/extra/ga.mjs +2 -2
  1099. package/locales/extra/gd.d.ts +1 -1
  1100. package/locales/extra/gd.mjs +2 -2
  1101. package/locales/extra/gl.d.ts +1 -1
  1102. package/locales/extra/gl.mjs +2 -2
  1103. package/locales/extra/gsw-FR.d.ts +1 -1
  1104. package/locales/extra/gsw-FR.mjs +2 -2
  1105. package/locales/extra/gsw-LI.d.ts +1 -1
  1106. package/locales/extra/gsw-LI.mjs +2 -2
  1107. package/locales/extra/gsw.d.ts +1 -1
  1108. package/locales/extra/gsw.mjs +2 -2
  1109. package/locales/extra/gu.d.ts +1 -1
  1110. package/locales/extra/gu.mjs +2 -2
  1111. package/locales/extra/guz.d.ts +1 -1
  1112. package/locales/extra/guz.mjs +2 -2
  1113. package/locales/extra/gv.d.ts +1 -1
  1114. package/locales/extra/gv.mjs +2 -2
  1115. package/locales/extra/ha-GH.d.ts +1 -1
  1116. package/locales/extra/ha-GH.mjs +2 -2
  1117. package/locales/extra/ha-NE.d.ts +1 -1
  1118. package/locales/extra/ha-NE.mjs +2 -2
  1119. package/locales/extra/ha.d.ts +1 -1
  1120. package/locales/extra/ha.mjs +2 -2
  1121. package/locales/extra/haw.d.ts +1 -1
  1122. package/locales/extra/haw.mjs +2 -2
  1123. package/locales/extra/he.d.ts +1 -1
  1124. package/locales/extra/he.mjs +2 -2
  1125. package/locales/extra/hi-Latn.d.ts +1 -1
  1126. package/locales/extra/hi-Latn.mjs +2 -2
  1127. package/locales/extra/hi.d.ts +1 -1
  1128. package/locales/extra/hi.mjs +2 -2
  1129. package/locales/extra/hr-BA.d.ts +1 -1
  1130. package/locales/extra/hr-BA.mjs +2 -2
  1131. package/locales/extra/hr.d.ts +1 -1
  1132. package/locales/extra/hr.mjs +2 -2
  1133. package/locales/extra/hsb.d.ts +1 -1
  1134. package/locales/extra/hsb.mjs +2 -2
  1135. package/locales/extra/hu.d.ts +1 -1
  1136. package/locales/extra/hu.mjs +2 -2
  1137. package/locales/extra/hy.d.ts +1 -1
  1138. package/locales/extra/hy.mjs +2 -2
  1139. package/locales/extra/ia.d.ts +1 -1
  1140. package/locales/extra/ia.mjs +2 -2
  1141. package/locales/extra/id.d.ts +1 -1
  1142. package/locales/extra/id.mjs +2 -2
  1143. package/locales/extra/ig.d.ts +1 -1
  1144. package/locales/extra/ig.mjs +2 -2
  1145. package/locales/extra/ii.d.ts +1 -1
  1146. package/locales/extra/ii.mjs +2 -2
  1147. package/locales/extra/is.d.ts +1 -1
  1148. package/locales/extra/is.mjs +2 -2
  1149. package/locales/extra/it-CH.d.ts +1 -1
  1150. package/locales/extra/it-CH.mjs +2 -2
  1151. package/locales/extra/it-SM.d.ts +1 -1
  1152. package/locales/extra/it-SM.mjs +2 -2
  1153. package/locales/extra/it-VA.d.ts +1 -1
  1154. package/locales/extra/it-VA.mjs +2 -2
  1155. package/locales/extra/it.d.ts +1 -1
  1156. package/locales/extra/it.mjs +2 -2
  1157. package/locales/extra/ja.d.ts +1 -1
  1158. package/locales/extra/ja.mjs +2 -2
  1159. package/locales/extra/jgo.d.ts +1 -1
  1160. package/locales/extra/jgo.mjs +2 -2
  1161. package/locales/extra/jmc.d.ts +1 -1
  1162. package/locales/extra/jmc.mjs +2 -2
  1163. package/locales/extra/jv.d.ts +1 -1
  1164. package/locales/extra/jv.mjs +2 -2
  1165. package/locales/extra/ka.d.ts +1 -1
  1166. package/locales/extra/ka.mjs +2 -2
  1167. package/locales/extra/kab.d.ts +1 -1
  1168. package/locales/extra/kab.mjs +2 -2
  1169. package/locales/extra/kam.d.ts +1 -1
  1170. package/locales/extra/kam.mjs +2 -2
  1171. package/locales/extra/kde.d.ts +1 -1
  1172. package/locales/extra/kde.mjs +2 -2
  1173. package/locales/extra/kea.d.ts +1 -1
  1174. package/locales/extra/kea.mjs +2 -2
  1175. package/locales/extra/kgp.d.ts +1 -1
  1176. package/locales/extra/kgp.mjs +2 -2
  1177. package/locales/extra/khq.d.ts +1 -1
  1178. package/locales/extra/khq.mjs +2 -2
  1179. package/locales/extra/ki.d.ts +1 -1
  1180. package/locales/extra/ki.mjs +2 -2
  1181. package/locales/extra/kk.d.ts +1 -1
  1182. package/locales/extra/kk.mjs +2 -2
  1183. package/locales/extra/kkj.d.ts +1 -1
  1184. package/locales/extra/kkj.mjs +2 -2
  1185. package/locales/extra/kl.d.ts +1 -1
  1186. package/locales/extra/kl.mjs +2 -2
  1187. package/locales/extra/kln.d.ts +1 -1
  1188. package/locales/extra/kln.mjs +2 -2
  1189. package/locales/extra/km.d.ts +1 -1
  1190. package/locales/extra/km.mjs +2 -2
  1191. package/locales/extra/kn.d.ts +1 -1
  1192. package/locales/extra/kn.mjs +2 -2
  1193. package/locales/extra/ko-KP.d.ts +1 -1
  1194. package/locales/extra/ko-KP.mjs +2 -2
  1195. package/locales/extra/ko.d.ts +1 -1
  1196. package/locales/extra/ko.mjs +2 -2
  1197. package/locales/extra/kok.d.ts +1 -1
  1198. package/locales/extra/kok.mjs +2 -2
  1199. package/locales/extra/ks-Arab.d.ts +1 -1
  1200. package/locales/extra/ks-Arab.mjs +2 -2
  1201. package/locales/extra/ks-Deva.d.ts +1 -1
  1202. package/locales/extra/ks-Deva.mjs +2 -2
  1203. package/locales/extra/ks.d.ts +1 -1
  1204. package/locales/extra/ks.mjs +2 -2
  1205. package/locales/extra/ksb.d.ts +1 -1
  1206. package/locales/extra/ksb.mjs +2 -2
  1207. package/locales/extra/ksf.d.ts +1 -1
  1208. package/locales/extra/ksf.mjs +2 -2
  1209. package/locales/extra/ksh.d.ts +1 -1
  1210. package/locales/extra/ksh.mjs +2 -2
  1211. package/locales/extra/ku.d.ts +1 -1
  1212. package/locales/extra/ku.mjs +2 -2
  1213. package/locales/extra/kw.d.ts +1 -1
  1214. package/locales/extra/kw.mjs +2 -2
  1215. package/locales/extra/ky.d.ts +1 -1
  1216. package/locales/extra/ky.mjs +2 -2
  1217. package/locales/extra/lag.d.ts +1 -1
  1218. package/locales/extra/lag.mjs +2 -2
  1219. package/locales/extra/lb.d.ts +1 -1
  1220. package/locales/extra/lb.mjs +2 -2
  1221. package/locales/extra/lg.d.ts +1 -1
  1222. package/locales/extra/lg.mjs +2 -2
  1223. package/locales/extra/lkt.d.ts +1 -1
  1224. package/locales/extra/lkt.mjs +2 -2
  1225. package/locales/extra/ln-AO.d.ts +1 -1
  1226. package/locales/extra/ln-AO.mjs +2 -2
  1227. package/locales/extra/ln-CF.d.ts +1 -1
  1228. package/locales/extra/ln-CF.mjs +2 -2
  1229. package/locales/extra/ln-CG.d.ts +1 -1
  1230. package/locales/extra/ln-CG.mjs +2 -2
  1231. package/locales/extra/ln.d.ts +1 -1
  1232. package/locales/extra/ln.mjs +2 -2
  1233. package/locales/extra/lo.d.ts +1 -1
  1234. package/locales/extra/lo.mjs +2 -2
  1235. package/locales/extra/lrc-IQ.d.ts +1 -1
  1236. package/locales/extra/lrc-IQ.mjs +2 -2
  1237. package/locales/extra/lrc.d.ts +1 -1
  1238. package/locales/extra/lrc.mjs +2 -2
  1239. package/locales/extra/lt.d.ts +1 -1
  1240. package/locales/extra/lt.mjs +2 -2
  1241. package/locales/extra/lu.d.ts +1 -1
  1242. package/locales/extra/lu.mjs +2 -2
  1243. package/locales/extra/luo.d.ts +1 -1
  1244. package/locales/extra/luo.mjs +2 -2
  1245. package/locales/extra/luy.d.ts +1 -1
  1246. package/locales/extra/luy.mjs +2 -2
  1247. package/locales/extra/lv.d.ts +1 -1
  1248. package/locales/extra/lv.mjs +2 -2
  1249. package/locales/extra/mai.d.ts +1 -1
  1250. package/locales/extra/mai.mjs +2 -2
  1251. package/locales/extra/mas-TZ.d.ts +1 -1
  1252. package/locales/extra/mas-TZ.mjs +2 -2
  1253. package/locales/extra/mas.d.ts +1 -1
  1254. package/locales/extra/mas.mjs +2 -2
  1255. package/locales/extra/mer.d.ts +1 -1
  1256. package/locales/extra/mer.mjs +2 -2
  1257. package/locales/extra/mfe.d.ts +1 -1
  1258. package/locales/extra/mfe.mjs +2 -2
  1259. package/locales/extra/mg.d.ts +1 -1
  1260. package/locales/extra/mg.mjs +2 -2
  1261. package/locales/extra/mgh.d.ts +1 -1
  1262. package/locales/extra/mgh.mjs +2 -2
  1263. package/locales/extra/mgo.d.ts +1 -1
  1264. package/locales/extra/mgo.mjs +2 -2
  1265. package/locales/extra/mi.d.ts +1 -1
  1266. package/locales/extra/mi.mjs +2 -2
  1267. package/locales/extra/mk.d.ts +1 -1
  1268. package/locales/extra/mk.mjs +2 -2
  1269. package/locales/extra/ml.d.ts +1 -1
  1270. package/locales/extra/ml.mjs +2 -2
  1271. package/locales/extra/mn.d.ts +1 -1
  1272. package/locales/extra/mn.mjs +2 -2
  1273. package/locales/extra/mni-Beng.d.ts +1 -1
  1274. package/locales/extra/mni-Beng.mjs +2 -2
  1275. package/locales/extra/mni.d.ts +1 -1
  1276. package/locales/extra/mni.mjs +2 -2
  1277. package/locales/extra/mr.d.ts +1 -1
  1278. package/locales/extra/mr.mjs +2 -2
  1279. package/locales/extra/ms-BN.d.ts +1 -1
  1280. package/locales/extra/ms-BN.mjs +2 -2
  1281. package/locales/extra/ms-ID.d.ts +1 -1
  1282. package/locales/extra/ms-ID.mjs +2 -2
  1283. package/locales/extra/ms-SG.d.ts +1 -1
  1284. package/locales/extra/ms-SG.mjs +2 -2
  1285. package/locales/extra/ms.d.ts +1 -1
  1286. package/locales/extra/ms.mjs +2 -2
  1287. package/locales/extra/mt.d.ts +1 -1
  1288. package/locales/extra/mt.mjs +2 -2
  1289. package/locales/extra/mua.d.ts +1 -1
  1290. package/locales/extra/mua.mjs +2 -2
  1291. package/locales/extra/my.d.ts +1 -1
  1292. package/locales/extra/my.mjs +2 -2
  1293. package/locales/extra/mzn.d.ts +1 -1
  1294. package/locales/extra/mzn.mjs +2 -2
  1295. package/locales/extra/naq.d.ts +1 -1
  1296. package/locales/extra/naq.mjs +2 -2
  1297. package/locales/extra/nb-SJ.d.ts +1 -1
  1298. package/locales/extra/nb-SJ.mjs +2 -2
  1299. package/locales/extra/nb.d.ts +1 -1
  1300. package/locales/extra/nb.mjs +2 -2
  1301. package/locales/extra/nd.d.ts +1 -1
  1302. package/locales/extra/nd.mjs +2 -2
  1303. package/locales/extra/nds-NL.d.ts +1 -1
  1304. package/locales/extra/nds-NL.mjs +2 -2
  1305. package/locales/extra/nds.d.ts +1 -1
  1306. package/locales/extra/nds.mjs +2 -2
  1307. package/locales/extra/ne-IN.d.ts +1 -1
  1308. package/locales/extra/ne-IN.mjs +2 -2
  1309. package/locales/extra/ne.d.ts +1 -1
  1310. package/locales/extra/ne.mjs +2 -2
  1311. package/locales/extra/nl-AW.d.ts +1 -1
  1312. package/locales/extra/nl-AW.mjs +2 -2
  1313. package/locales/extra/nl-BE.d.ts +1 -1
  1314. package/locales/extra/nl-BE.mjs +2 -2
  1315. package/locales/extra/nl-BQ.d.ts +1 -1
  1316. package/locales/extra/nl-BQ.mjs +2 -2
  1317. package/locales/extra/nl-CW.d.ts +1 -1
  1318. package/locales/extra/nl-CW.mjs +2 -2
  1319. package/locales/extra/nl-SR.d.ts +1 -1
  1320. package/locales/extra/nl-SR.mjs +2 -2
  1321. package/locales/extra/nl-SX.d.ts +1 -1
  1322. package/locales/extra/nl-SX.mjs +2 -2
  1323. package/locales/extra/nl.d.ts +1 -1
  1324. package/locales/extra/nl.mjs +2 -2
  1325. package/locales/extra/nmg.d.ts +1 -1
  1326. package/locales/extra/nmg.mjs +2 -2
  1327. package/locales/extra/nn.d.ts +1 -1
  1328. package/locales/extra/nn.mjs +2 -2
  1329. package/locales/extra/nnh.d.ts +1 -1
  1330. package/locales/extra/nnh.mjs +2 -2
  1331. package/locales/extra/no.d.ts +1 -1
  1332. package/locales/extra/no.mjs +2 -2
  1333. package/locales/extra/nus.d.ts +1 -1
  1334. package/locales/extra/nus.mjs +2 -2
  1335. package/locales/extra/nyn.d.ts +1 -1
  1336. package/locales/extra/nyn.mjs +2 -2
  1337. package/locales/extra/om-KE.d.ts +1 -1
  1338. package/locales/extra/om-KE.mjs +2 -2
  1339. package/locales/extra/om.d.ts +1 -1
  1340. package/locales/extra/om.mjs +2 -2
  1341. package/locales/extra/or.d.ts +1 -1
  1342. package/locales/extra/or.mjs +2 -2
  1343. package/locales/extra/os-RU.d.ts +1 -1
  1344. package/locales/extra/os-RU.mjs +2 -2
  1345. package/locales/extra/os.d.ts +1 -1
  1346. package/locales/extra/os.mjs +2 -2
  1347. package/locales/extra/pa-Arab.d.ts +1 -1
  1348. package/locales/extra/pa-Arab.mjs +2 -2
  1349. package/locales/extra/pa-Guru.d.ts +1 -1
  1350. package/locales/extra/pa-Guru.mjs +2 -2
  1351. package/locales/extra/pa.d.ts +1 -1
  1352. package/locales/extra/pa.mjs +2 -2
  1353. package/locales/extra/pcm.d.ts +1 -1
  1354. package/locales/extra/pcm.mjs +2 -2
  1355. package/locales/extra/pl.d.ts +1 -1
  1356. package/locales/extra/pl.mjs +2 -2
  1357. package/locales/extra/ps-PK.d.ts +1 -1
  1358. package/locales/extra/ps-PK.mjs +2 -2
  1359. package/locales/extra/ps.d.ts +1 -1
  1360. package/locales/extra/ps.mjs +2 -2
  1361. package/locales/extra/pt-AO.d.ts +1 -1
  1362. package/locales/extra/pt-AO.mjs +2 -2
  1363. package/locales/extra/pt-CH.d.ts +1 -1
  1364. package/locales/extra/pt-CH.mjs +2 -2
  1365. package/locales/extra/pt-CV.d.ts +1 -1
  1366. package/locales/extra/pt-CV.mjs +2 -2
  1367. package/locales/extra/pt-GQ.d.ts +1 -1
  1368. package/locales/extra/pt-GQ.mjs +2 -2
  1369. package/locales/extra/pt-GW.d.ts +1 -1
  1370. package/locales/extra/pt-GW.mjs +2 -2
  1371. package/locales/extra/pt-LU.d.ts +1 -1
  1372. package/locales/extra/pt-LU.mjs +2 -2
  1373. package/locales/extra/pt-MO.d.ts +1 -1
  1374. package/locales/extra/pt-MO.mjs +2 -2
  1375. package/locales/extra/pt-MZ.d.ts +1 -1
  1376. package/locales/extra/pt-MZ.mjs +2 -2
  1377. package/locales/extra/pt-PT.d.ts +1 -1
  1378. package/locales/extra/pt-PT.mjs +2 -2
  1379. package/locales/extra/pt-ST.d.ts +1 -1
  1380. package/locales/extra/pt-ST.mjs +2 -2
  1381. package/locales/extra/pt-TL.d.ts +1 -1
  1382. package/locales/extra/pt-TL.mjs +2 -2
  1383. package/locales/extra/pt.d.ts +1 -1
  1384. package/locales/extra/pt.mjs +2 -2
  1385. package/locales/extra/qu-BO.d.ts +1 -1
  1386. package/locales/extra/qu-BO.mjs +2 -2
  1387. package/locales/extra/qu-EC.d.ts +1 -1
  1388. package/locales/extra/qu-EC.mjs +2 -2
  1389. package/locales/extra/qu.d.ts +1 -1
  1390. package/locales/extra/qu.mjs +2 -2
  1391. package/locales/extra/rm.d.ts +1 -1
  1392. package/locales/extra/rm.mjs +2 -2
  1393. package/locales/extra/rn.d.ts +1 -1
  1394. package/locales/extra/rn.mjs +2 -2
  1395. package/locales/extra/ro-MD.d.ts +1 -1
  1396. package/locales/extra/ro-MD.mjs +2 -2
  1397. package/locales/extra/ro.d.ts +1 -1
  1398. package/locales/extra/ro.mjs +2 -2
  1399. package/locales/extra/rof.d.ts +1 -1
  1400. package/locales/extra/rof.mjs +2 -2
  1401. package/locales/extra/ru-BY.d.ts +1 -1
  1402. package/locales/extra/ru-BY.mjs +2 -2
  1403. package/locales/extra/ru-KG.d.ts +1 -1
  1404. package/locales/extra/ru-KG.mjs +2 -2
  1405. package/locales/extra/ru-KZ.d.ts +1 -1
  1406. package/locales/extra/ru-KZ.mjs +2 -2
  1407. package/locales/extra/ru-MD.d.ts +1 -1
  1408. package/locales/extra/ru-MD.mjs +2 -2
  1409. package/locales/extra/ru-UA.d.ts +1 -1
  1410. package/locales/extra/ru-UA.mjs +2 -2
  1411. package/locales/extra/ru.d.ts +1 -1
  1412. package/locales/extra/ru.mjs +2 -2
  1413. package/locales/extra/rw.d.ts +1 -1
  1414. package/locales/extra/rw.mjs +2 -2
  1415. package/locales/extra/rwk.d.ts +1 -1
  1416. package/locales/extra/rwk.mjs +2 -2
  1417. package/locales/extra/sa.d.ts +1 -1
  1418. package/locales/extra/sa.mjs +2 -2
  1419. package/locales/extra/sah.d.ts +1 -1
  1420. package/locales/extra/sah.mjs +2 -2
  1421. package/locales/extra/saq.d.ts +1 -1
  1422. package/locales/extra/saq.mjs +2 -2
  1423. package/locales/extra/sat-Olck.d.ts +1 -1
  1424. package/locales/extra/sat-Olck.mjs +2 -2
  1425. package/locales/extra/sat.d.ts +1 -1
  1426. package/locales/extra/sat.mjs +2 -2
  1427. package/locales/extra/sbp.d.ts +1 -1
  1428. package/locales/extra/sbp.mjs +2 -2
  1429. package/locales/extra/sc.d.ts +1 -1
  1430. package/locales/extra/sc.mjs +2 -2
  1431. package/locales/extra/sd-Arab.d.ts +1 -1
  1432. package/locales/extra/sd-Arab.mjs +2 -2
  1433. package/locales/extra/sd-Deva.d.ts +1 -1
  1434. package/locales/extra/sd-Deva.mjs +2 -2
  1435. package/locales/extra/sd.d.ts +1 -1
  1436. package/locales/extra/sd.mjs +2 -2
  1437. package/locales/extra/se-FI.d.ts +1 -1
  1438. package/locales/extra/se-FI.mjs +2 -2
  1439. package/locales/extra/se-SE.d.ts +1 -1
  1440. package/locales/extra/se-SE.mjs +2 -2
  1441. package/locales/extra/se.d.ts +1 -1
  1442. package/locales/extra/se.mjs +2 -2
  1443. package/locales/extra/seh.d.ts +1 -1
  1444. package/locales/extra/seh.mjs +2 -2
  1445. package/locales/extra/ses.d.ts +1 -1
  1446. package/locales/extra/ses.mjs +2 -2
  1447. package/locales/extra/sg.d.ts +1 -1
  1448. package/locales/extra/sg.mjs +2 -2
  1449. package/locales/extra/shi-Latn.d.ts +1 -1
  1450. package/locales/extra/shi-Latn.mjs +2 -2
  1451. package/locales/extra/shi-Tfng.d.ts +1 -1
  1452. package/locales/extra/shi-Tfng.mjs +2 -2
  1453. package/locales/extra/shi.d.ts +1 -1
  1454. package/locales/extra/shi.mjs +2 -2
  1455. package/locales/extra/si.d.ts +1 -1
  1456. package/locales/extra/si.mjs +2 -2
  1457. package/locales/extra/sk.d.ts +1 -1
  1458. package/locales/extra/sk.mjs +2 -2
  1459. package/locales/extra/sl.d.ts +1 -1
  1460. package/locales/extra/sl.mjs +2 -2
  1461. package/locales/extra/smn.d.ts +1 -1
  1462. package/locales/extra/smn.mjs +2 -2
  1463. package/locales/extra/sn.d.ts +1 -1
  1464. package/locales/extra/sn.mjs +2 -2
  1465. package/locales/extra/so-DJ.d.ts +1 -1
  1466. package/locales/extra/so-DJ.mjs +2 -2
  1467. package/locales/extra/so-ET.d.ts +1 -1
  1468. package/locales/extra/so-ET.mjs +2 -2
  1469. package/locales/extra/so-KE.d.ts +1 -1
  1470. package/locales/extra/so-KE.mjs +2 -2
  1471. package/locales/extra/so.d.ts +1 -1
  1472. package/locales/extra/so.mjs +2 -2
  1473. package/locales/extra/sq-MK.d.ts +1 -1
  1474. package/locales/extra/sq-MK.mjs +2 -2
  1475. package/locales/extra/sq-XK.d.ts +1 -1
  1476. package/locales/extra/sq-XK.mjs +2 -2
  1477. package/locales/extra/sq.d.ts +1 -1
  1478. package/locales/extra/sq.mjs +2 -2
  1479. package/locales/extra/sr-Cyrl-BA.d.ts +1 -1
  1480. package/locales/extra/sr-Cyrl-BA.mjs +2 -2
  1481. package/locales/extra/sr-Cyrl-ME.d.ts +1 -1
  1482. package/locales/extra/sr-Cyrl-ME.mjs +2 -2
  1483. package/locales/extra/sr-Cyrl-XK.d.ts +1 -1
  1484. package/locales/extra/sr-Cyrl-XK.mjs +2 -2
  1485. package/locales/extra/sr-Cyrl.d.ts +1 -1
  1486. package/locales/extra/sr-Cyrl.mjs +2 -2
  1487. package/locales/extra/sr-Latn-BA.d.ts +1 -1
  1488. package/locales/extra/sr-Latn-BA.mjs +2 -2
  1489. package/locales/extra/sr-Latn-ME.d.ts +1 -1
  1490. package/locales/extra/sr-Latn-ME.mjs +2 -2
  1491. package/locales/extra/sr-Latn-XK.d.ts +1 -1
  1492. package/locales/extra/sr-Latn-XK.mjs +2 -2
  1493. package/locales/extra/sr-Latn.d.ts +1 -1
  1494. package/locales/extra/sr-Latn.mjs +2 -2
  1495. package/locales/extra/sr.d.ts +1 -1
  1496. package/locales/extra/sr.mjs +2 -2
  1497. package/locales/extra/su-Latn.d.ts +1 -1
  1498. package/locales/extra/su-Latn.mjs +2 -2
  1499. package/locales/extra/su.d.ts +1 -1
  1500. package/locales/extra/su.mjs +2 -2
  1501. package/locales/extra/sv-AX.d.ts +1 -1
  1502. package/locales/extra/sv-AX.mjs +2 -2
  1503. package/locales/extra/sv-FI.d.ts +1 -1
  1504. package/locales/extra/sv-FI.mjs +2 -2
  1505. package/locales/extra/sv.d.ts +1 -1
  1506. package/locales/extra/sv.mjs +2 -2
  1507. package/locales/extra/sw-CD.d.ts +1 -1
  1508. package/locales/extra/sw-CD.mjs +2 -2
  1509. package/locales/extra/sw-KE.d.ts +1 -1
  1510. package/locales/extra/sw-KE.mjs +2 -2
  1511. package/locales/extra/sw-UG.d.ts +1 -1
  1512. package/locales/extra/sw-UG.mjs +2 -2
  1513. package/locales/extra/sw.d.ts +1 -1
  1514. package/locales/extra/sw.mjs +2 -2
  1515. package/locales/extra/ta-LK.d.ts +1 -1
  1516. package/locales/extra/ta-LK.mjs +2 -2
  1517. package/locales/extra/ta-MY.d.ts +1 -1
  1518. package/locales/extra/ta-MY.mjs +2 -2
  1519. package/locales/extra/ta-SG.d.ts +1 -1
  1520. package/locales/extra/ta-SG.mjs +2 -2
  1521. package/locales/extra/ta.d.ts +1 -1
  1522. package/locales/extra/ta.mjs +2 -2
  1523. package/locales/extra/te.d.ts +1 -1
  1524. package/locales/extra/te.mjs +2 -2
  1525. package/locales/extra/teo-KE.d.ts +1 -1
  1526. package/locales/extra/teo-KE.mjs +2 -2
  1527. package/locales/extra/teo.d.ts +1 -1
  1528. package/locales/extra/teo.mjs +2 -2
  1529. package/locales/extra/tg.d.ts +1 -1
  1530. package/locales/extra/tg.mjs +2 -2
  1531. package/locales/extra/th.d.ts +1 -1
  1532. package/locales/extra/th.mjs +2 -2
  1533. package/locales/extra/ti-ER.d.ts +1 -1
  1534. package/locales/extra/ti-ER.mjs +2 -2
  1535. package/locales/extra/ti.d.ts +1 -1
  1536. package/locales/extra/ti.mjs +2 -2
  1537. package/locales/extra/tk.d.ts +1 -1
  1538. package/locales/extra/tk.mjs +2 -2
  1539. package/locales/extra/to.d.ts +1 -1
  1540. package/locales/extra/to.mjs +2 -2
  1541. package/locales/extra/tr-CY.d.ts +1 -1
  1542. package/locales/extra/tr-CY.mjs +2 -2
  1543. package/locales/extra/tr.d.ts +1 -1
  1544. package/locales/extra/tr.mjs +2 -2
  1545. package/locales/extra/tt.d.ts +1 -1
  1546. package/locales/extra/tt.mjs +2 -2
  1547. package/locales/extra/twq.d.ts +1 -1
  1548. package/locales/extra/twq.mjs +2 -2
  1549. package/locales/extra/tzm.d.ts +1 -1
  1550. package/locales/extra/tzm.mjs +2 -2
  1551. package/locales/extra/ug.d.ts +1 -1
  1552. package/locales/extra/ug.mjs +2 -2
  1553. package/locales/extra/uk.d.ts +1 -1
  1554. package/locales/extra/uk.mjs +2 -2
  1555. package/locales/extra/und.d.ts +1 -1
  1556. package/locales/extra/und.mjs +2 -2
  1557. package/locales/extra/ur-IN.d.ts +1 -1
  1558. package/locales/extra/ur-IN.mjs +2 -2
  1559. package/locales/extra/ur.d.ts +1 -1
  1560. package/locales/extra/ur.mjs +2 -2
  1561. package/locales/extra/uz-Arab.d.ts +1 -1
  1562. package/locales/extra/uz-Arab.mjs +2 -2
  1563. package/locales/extra/uz-Cyrl.d.ts +1 -1
  1564. package/locales/extra/uz-Cyrl.mjs +2 -2
  1565. package/locales/extra/uz-Latn.d.ts +1 -1
  1566. package/locales/extra/uz-Latn.mjs +2 -2
  1567. package/locales/extra/uz.d.ts +1 -1
  1568. package/locales/extra/uz.mjs +2 -2
  1569. package/locales/extra/vai-Latn.d.ts +1 -1
  1570. package/locales/extra/vai-Latn.mjs +2 -2
  1571. package/locales/extra/vai-Vaii.d.ts +1 -1
  1572. package/locales/extra/vai-Vaii.mjs +2 -2
  1573. package/locales/extra/vai.d.ts +1 -1
  1574. package/locales/extra/vai.mjs +2 -2
  1575. package/locales/extra/vi.d.ts +1 -1
  1576. package/locales/extra/vi.mjs +2 -2
  1577. package/locales/extra/vun.d.ts +1 -1
  1578. package/locales/extra/vun.mjs +2 -2
  1579. package/locales/extra/wae.d.ts +1 -1
  1580. package/locales/extra/wae.mjs +2 -2
  1581. package/locales/extra/wo.d.ts +1 -1
  1582. package/locales/extra/wo.mjs +2 -2
  1583. package/locales/extra/xh.d.ts +1 -1
  1584. package/locales/extra/xh.mjs +2 -2
  1585. package/locales/extra/xog.d.ts +1 -1
  1586. package/locales/extra/xog.mjs +2 -2
  1587. package/locales/extra/yav.d.ts +1 -1
  1588. package/locales/extra/yav.mjs +2 -2
  1589. package/locales/extra/yi.d.ts +1 -1
  1590. package/locales/extra/yi.mjs +2 -2
  1591. package/locales/extra/yo-BJ.d.ts +1 -1
  1592. package/locales/extra/yo-BJ.mjs +2 -2
  1593. package/locales/extra/yo.d.ts +1 -1
  1594. package/locales/extra/yo.mjs +2 -2
  1595. package/locales/extra/yrl-CO.d.ts +1 -1
  1596. package/locales/extra/yrl-CO.mjs +2 -2
  1597. package/locales/extra/yrl-VE.d.ts +1 -1
  1598. package/locales/extra/yrl-VE.mjs +2 -2
  1599. package/locales/extra/yrl.d.ts +1 -1
  1600. package/locales/extra/yrl.mjs +2 -2
  1601. package/locales/extra/yue-Hans.d.ts +1 -1
  1602. package/locales/extra/yue-Hans.mjs +2 -2
  1603. package/locales/extra/yue-Hant.d.ts +1 -1
  1604. package/locales/extra/yue-Hant.mjs +2 -2
  1605. package/locales/extra/yue.d.ts +1 -1
  1606. package/locales/extra/yue.mjs +2 -2
  1607. package/locales/extra/zgh.d.ts +1 -1
  1608. package/locales/extra/zgh.mjs +2 -2
  1609. package/locales/extra/zh-Hans-HK.d.ts +1 -1
  1610. package/locales/extra/zh-Hans-HK.mjs +2 -2
  1611. package/locales/extra/zh-Hans-MO.d.ts +1 -1
  1612. package/locales/extra/zh-Hans-MO.mjs +2 -2
  1613. package/locales/extra/zh-Hans-SG.d.ts +1 -1
  1614. package/locales/extra/zh-Hans-SG.mjs +2 -2
  1615. package/locales/extra/zh-Hans.d.ts +1 -1
  1616. package/locales/extra/zh-Hans.mjs +2 -2
  1617. package/locales/extra/zh-Hant-HK.d.ts +1 -1
  1618. package/locales/extra/zh-Hant-HK.mjs +2 -2
  1619. package/locales/extra/zh-Hant-MO.d.ts +1 -1
  1620. package/locales/extra/zh-Hant-MO.mjs +2 -2
  1621. package/locales/extra/zh-Hant.d.ts +1 -1
  1622. package/locales/extra/zh-Hant.mjs +2 -2
  1623. package/locales/extra/zh.d.ts +1 -1
  1624. package/locales/extra/zh.mjs +2 -2
  1625. package/locales/extra/zu.d.ts +1 -1
  1626. package/locales/extra/zu.mjs +2 -2
  1627. package/locales/fa-AF.d.ts +1 -1
  1628. package/locales/fa-AF.mjs +2 -2
  1629. package/locales/fa.d.ts +1 -1
  1630. package/locales/fa.mjs +2 -2
  1631. package/locales/ff-Adlm-BF.d.ts +1 -1
  1632. package/locales/ff-Adlm-BF.mjs +2 -2
  1633. package/locales/ff-Adlm-CM.d.ts +1 -1
  1634. package/locales/ff-Adlm-CM.mjs +2 -2
  1635. package/locales/ff-Adlm-GH.d.ts +1 -1
  1636. package/locales/ff-Adlm-GH.mjs +2 -2
  1637. package/locales/ff-Adlm-GM.d.ts +1 -1
  1638. package/locales/ff-Adlm-GM.mjs +2 -2
  1639. package/locales/ff-Adlm-GW.d.ts +1 -1
  1640. package/locales/ff-Adlm-GW.mjs +2 -2
  1641. package/locales/ff-Adlm-LR.d.ts +1 -1
  1642. package/locales/ff-Adlm-LR.mjs +2 -2
  1643. package/locales/ff-Adlm-MR.d.ts +1 -1
  1644. package/locales/ff-Adlm-MR.mjs +2 -2
  1645. package/locales/ff-Adlm-NE.d.ts +1 -1
  1646. package/locales/ff-Adlm-NE.mjs +2 -2
  1647. package/locales/ff-Adlm-NG.d.ts +1 -1
  1648. package/locales/ff-Adlm-NG.mjs +2 -2
  1649. package/locales/ff-Adlm-SL.d.ts +1 -1
  1650. package/locales/ff-Adlm-SL.mjs +2 -2
  1651. package/locales/ff-Adlm-SN.d.ts +1 -1
  1652. package/locales/ff-Adlm-SN.mjs +2 -2
  1653. package/locales/ff-Adlm.d.ts +1 -1
  1654. package/locales/ff-Adlm.mjs +2 -2
  1655. package/locales/ff-CM.d.ts +1 -1
  1656. package/locales/ff-CM.mjs +2 -2
  1657. package/locales/ff-GN.d.ts +1 -1
  1658. package/locales/ff-GN.mjs +2 -2
  1659. package/locales/ff-Latn-BF.d.ts +1 -1
  1660. package/locales/ff-Latn-BF.mjs +2 -2
  1661. package/locales/ff-Latn-CM.d.ts +1 -1
  1662. package/locales/ff-Latn-CM.mjs +2 -2
  1663. package/locales/ff-Latn-GH.d.ts +1 -1
  1664. package/locales/ff-Latn-GH.mjs +2 -2
  1665. package/locales/ff-Latn-GM.d.ts +1 -1
  1666. package/locales/ff-Latn-GM.mjs +2 -2
  1667. package/locales/ff-Latn-GN.d.ts +1 -1
  1668. package/locales/ff-Latn-GN.mjs +2 -2
  1669. package/locales/ff-Latn-GW.d.ts +1 -1
  1670. package/locales/ff-Latn-GW.mjs +2 -2
  1671. package/locales/ff-Latn-LR.d.ts +1 -1
  1672. package/locales/ff-Latn-LR.mjs +2 -2
  1673. package/locales/ff-Latn-MR.d.ts +1 -1
  1674. package/locales/ff-Latn-MR.mjs +2 -2
  1675. package/locales/ff-Latn-NE.d.ts +1 -1
  1676. package/locales/ff-Latn-NE.mjs +2 -2
  1677. package/locales/ff-Latn-NG.d.ts +1 -1
  1678. package/locales/ff-Latn-NG.mjs +2 -2
  1679. package/locales/ff-Latn-SL.d.ts +1 -1
  1680. package/locales/ff-Latn-SL.mjs +2 -2
  1681. package/locales/ff-Latn.d.ts +1 -1
  1682. package/locales/ff-Latn.mjs +2 -2
  1683. package/locales/ff-MR.d.ts +1 -1
  1684. package/locales/ff-MR.mjs +2 -2
  1685. package/locales/ff.d.ts +1 -1
  1686. package/locales/ff.mjs +2 -2
  1687. package/locales/fi.d.ts +1 -1
  1688. package/locales/fi.mjs +2 -2
  1689. package/locales/fil.d.ts +1 -1
  1690. package/locales/fil.mjs +2 -2
  1691. package/locales/fo-DK.d.ts +1 -1
  1692. package/locales/fo-DK.mjs +2 -2
  1693. package/locales/fo.d.ts +1 -1
  1694. package/locales/fo.mjs +2 -2
  1695. package/locales/fr-BE.d.ts +1 -1
  1696. package/locales/fr-BE.mjs +2 -2
  1697. package/locales/fr-BF.d.ts +1 -1
  1698. package/locales/fr-BF.mjs +2 -2
  1699. package/locales/fr-BI.d.ts +1 -1
  1700. package/locales/fr-BI.mjs +2 -2
  1701. package/locales/fr-BJ.d.ts +1 -1
  1702. package/locales/fr-BJ.mjs +2 -2
  1703. package/locales/fr-BL.d.ts +1 -1
  1704. package/locales/fr-BL.mjs +2 -2
  1705. package/locales/fr-CA.d.ts +1 -1
  1706. package/locales/fr-CA.mjs +2 -2
  1707. package/locales/fr-CD.d.ts +1 -1
  1708. package/locales/fr-CD.mjs +2 -2
  1709. package/locales/fr-CF.d.ts +1 -1
  1710. package/locales/fr-CF.mjs +2 -2
  1711. package/locales/fr-CG.d.ts +1 -1
  1712. package/locales/fr-CG.mjs +2 -2
  1713. package/locales/fr-CH.d.ts +1 -1
  1714. package/locales/fr-CH.mjs +2 -2
  1715. package/locales/fr-CI.d.ts +1 -1
  1716. package/locales/fr-CI.mjs +2 -2
  1717. package/locales/fr-CM.d.ts +1 -1
  1718. package/locales/fr-CM.mjs +2 -2
  1719. package/locales/fr-DJ.d.ts +1 -1
  1720. package/locales/fr-DJ.mjs +2 -2
  1721. package/locales/fr-DZ.d.ts +1 -1
  1722. package/locales/fr-DZ.mjs +2 -2
  1723. package/locales/fr-GA.d.ts +1 -1
  1724. package/locales/fr-GA.mjs +2 -2
  1725. package/locales/fr-GF.d.ts +1 -1
  1726. package/locales/fr-GF.mjs +2 -2
  1727. package/locales/fr-GN.d.ts +1 -1
  1728. package/locales/fr-GN.mjs +2 -2
  1729. package/locales/fr-GP.d.ts +1 -1
  1730. package/locales/fr-GP.mjs +2 -2
  1731. package/locales/fr-GQ.d.ts +1 -1
  1732. package/locales/fr-GQ.mjs +2 -2
  1733. package/locales/fr-HT.d.ts +1 -1
  1734. package/locales/fr-HT.mjs +2 -2
  1735. package/locales/fr-KM.d.ts +1 -1
  1736. package/locales/fr-KM.mjs +2 -2
  1737. package/locales/fr-LU.d.ts +1 -1
  1738. package/locales/fr-LU.mjs +2 -2
  1739. package/locales/fr-MA.d.ts +1 -1
  1740. package/locales/fr-MA.mjs +2 -2
  1741. package/locales/fr-MC.d.ts +1 -1
  1742. package/locales/fr-MC.mjs +2 -2
  1743. package/locales/fr-MF.d.ts +1 -1
  1744. package/locales/fr-MF.mjs +2 -2
  1745. package/locales/fr-MG.d.ts +1 -1
  1746. package/locales/fr-MG.mjs +2 -2
  1747. package/locales/fr-ML.d.ts +1 -1
  1748. package/locales/fr-ML.mjs +2 -2
  1749. package/locales/fr-MQ.d.ts +1 -1
  1750. package/locales/fr-MQ.mjs +2 -2
  1751. package/locales/fr-MR.d.ts +1 -1
  1752. package/locales/fr-MR.mjs +2 -2
  1753. package/locales/fr-MU.d.ts +1 -1
  1754. package/locales/fr-MU.mjs +2 -2
  1755. package/locales/fr-NC.d.ts +1 -1
  1756. package/locales/fr-NC.mjs +2 -2
  1757. package/locales/fr-NE.d.ts +1 -1
  1758. package/locales/fr-NE.mjs +2 -2
  1759. package/locales/fr-PF.d.ts +1 -1
  1760. package/locales/fr-PF.mjs +2 -2
  1761. package/locales/fr-PM.d.ts +1 -1
  1762. package/locales/fr-PM.mjs +2 -2
  1763. package/locales/fr-RE.d.ts +1 -1
  1764. package/locales/fr-RE.mjs +2 -2
  1765. package/locales/fr-RW.d.ts +1 -1
  1766. package/locales/fr-RW.mjs +2 -2
  1767. package/locales/fr-SC.d.ts +1 -1
  1768. package/locales/fr-SC.mjs +2 -2
  1769. package/locales/fr-SN.d.ts +1 -1
  1770. package/locales/fr-SN.mjs +2 -2
  1771. package/locales/fr-SY.d.ts +1 -1
  1772. package/locales/fr-SY.mjs +2 -2
  1773. package/locales/fr-TD.d.ts +1 -1
  1774. package/locales/fr-TD.mjs +2 -2
  1775. package/locales/fr-TG.d.ts +1 -1
  1776. package/locales/fr-TG.mjs +2 -2
  1777. package/locales/fr-TN.d.ts +1 -1
  1778. package/locales/fr-TN.mjs +2 -2
  1779. package/locales/fr-VU.d.ts +1 -1
  1780. package/locales/fr-VU.mjs +2 -2
  1781. package/locales/fr-WF.d.ts +1 -1
  1782. package/locales/fr-WF.mjs +2 -2
  1783. package/locales/fr-YT.d.ts +1 -1
  1784. package/locales/fr-YT.mjs +2 -2
  1785. package/locales/fr.d.ts +1 -1
  1786. package/locales/fr.mjs +2 -2
  1787. package/locales/fur.d.ts +1 -1
  1788. package/locales/fur.mjs +2 -2
  1789. package/locales/fy.d.ts +1 -1
  1790. package/locales/fy.mjs +2 -2
  1791. package/locales/ga-GB.d.ts +1 -1
  1792. package/locales/ga-GB.mjs +2 -2
  1793. package/locales/ga.d.ts +1 -1
  1794. package/locales/ga.mjs +2 -2
  1795. package/locales/gd.d.ts +1 -1
  1796. package/locales/gd.mjs +2 -2
  1797. package/locales/gl.d.ts +1 -1
  1798. package/locales/gl.mjs +2 -2
  1799. package/locales/global/af-NA.js +1 -1
  1800. package/locales/global/af.js +1 -1
  1801. package/locales/global/agq.js +1 -1
  1802. package/locales/global/ak.js +1 -1
  1803. package/locales/global/am.js +1 -1
  1804. package/locales/global/ar-AE.js +1 -1
  1805. package/locales/global/ar-BH.js +1 -1
  1806. package/locales/global/ar-DJ.js +1 -1
  1807. package/locales/global/ar-DZ.js +1 -1
  1808. package/locales/global/ar-EG.js +1 -1
  1809. package/locales/global/ar-EH.js +1 -1
  1810. package/locales/global/ar-ER.js +1 -1
  1811. package/locales/global/ar-IL.js +1 -1
  1812. package/locales/global/ar-IQ.js +1 -1
  1813. package/locales/global/ar-JO.js +1 -1
  1814. package/locales/global/ar-KM.js +1 -1
  1815. package/locales/global/ar-KW.js +1 -1
  1816. package/locales/global/ar-LB.js +1 -1
  1817. package/locales/global/ar-LY.js +1 -1
  1818. package/locales/global/ar-MA.js +1 -1
  1819. package/locales/global/ar-MR.js +1 -1
  1820. package/locales/global/ar-OM.js +1 -1
  1821. package/locales/global/ar-PS.js +1 -1
  1822. package/locales/global/ar-QA.js +1 -1
  1823. package/locales/global/ar-SA.js +1 -1
  1824. package/locales/global/ar-SD.js +1 -1
  1825. package/locales/global/ar-SO.js +1 -1
  1826. package/locales/global/ar-SS.js +1 -1
  1827. package/locales/global/ar-SY.js +1 -1
  1828. package/locales/global/ar-TD.js +1 -1
  1829. package/locales/global/ar-TN.js +1 -1
  1830. package/locales/global/ar-YE.js +1 -1
  1831. package/locales/global/ar.js +1 -1
  1832. package/locales/global/as.js +1 -1
  1833. package/locales/global/asa.js +1 -1
  1834. package/locales/global/ast.js +1 -1
  1835. package/locales/global/az-Cyrl.js +1 -1
  1836. package/locales/global/az-Latn.js +1 -1
  1837. package/locales/global/az.js +1 -1
  1838. package/locales/global/bas.js +1 -1
  1839. package/locales/global/be-tarask.js +1 -1
  1840. package/locales/global/be.js +1 -1
  1841. package/locales/global/bem.js +1 -1
  1842. package/locales/global/bez.js +1 -1
  1843. package/locales/global/bg.js +1 -1
  1844. package/locales/global/bm.js +1 -1
  1845. package/locales/global/bn-IN.js +1 -1
  1846. package/locales/global/bn.js +1 -1
  1847. package/locales/global/bo-IN.js +1 -1
  1848. package/locales/global/bo.js +1 -1
  1849. package/locales/global/br.js +1 -1
  1850. package/locales/global/brx.js +1 -1
  1851. package/locales/global/bs-Cyrl.js +1 -1
  1852. package/locales/global/bs-Latn.js +1 -1
  1853. package/locales/global/bs.js +1 -1
  1854. package/locales/global/ca-AD.js +1 -1
  1855. package/locales/global/ca-ES-valencia.js +1 -1
  1856. package/locales/global/ca-FR.js +1 -1
  1857. package/locales/global/ca-IT.js +1 -1
  1858. package/locales/global/ca.js +1 -1
  1859. package/locales/global/ccp-IN.js +1 -1
  1860. package/locales/global/ccp.js +1 -1
  1861. package/locales/global/ce.js +1 -1
  1862. package/locales/global/ceb.js +1 -1
  1863. package/locales/global/cgg.js +1 -1
  1864. package/locales/global/chr.js +1 -1
  1865. package/locales/global/ckb-IR.js +1 -1
  1866. package/locales/global/ckb.js +1 -1
  1867. package/locales/global/cs.js +1 -1
  1868. package/locales/global/cy.js +1 -1
  1869. package/locales/global/da-GL.js +1 -1
  1870. package/locales/global/da.js +1 -1
  1871. package/locales/global/dav.js +1 -1
  1872. package/locales/global/de-AT.js +1 -1
  1873. package/locales/global/de-BE.js +1 -1
  1874. package/locales/global/de-CH.js +1 -1
  1875. package/locales/global/de-IT.js +1 -1
  1876. package/locales/global/de-LI.js +1 -1
  1877. package/locales/global/de-LU.js +1 -1
  1878. package/locales/global/de.js +1 -1
  1879. package/locales/global/dje.js +1 -1
  1880. package/locales/global/doi.js +1 -1
  1881. package/locales/global/dsb.js +1 -1
  1882. package/locales/global/dua.js +1 -1
  1883. package/locales/global/dyo.js +1 -1
  1884. package/locales/global/dz.js +1 -1
  1885. package/locales/global/ebu.js +1 -1
  1886. package/locales/global/ee-TG.js +1 -1
  1887. package/locales/global/ee.js +1 -1
  1888. package/locales/global/el-CY.js +1 -1
  1889. package/locales/global/el.js +1 -1
  1890. package/locales/global/en-001.js +1 -1
  1891. package/locales/global/en-150.js +1 -1
  1892. package/locales/global/en-AE.js +1 -1
  1893. package/locales/global/en-AG.js +1 -1
  1894. package/locales/global/en-AI.js +1 -1
  1895. package/locales/global/en-AS.js +1 -1
  1896. package/locales/global/en-AT.js +1 -1
  1897. package/locales/global/en-AU.js +1 -1
  1898. package/locales/global/en-BB.js +1 -1
  1899. package/locales/global/en-BE.js +1 -1
  1900. package/locales/global/en-BI.js +1 -1
  1901. package/locales/global/en-BM.js +1 -1
  1902. package/locales/global/en-BS.js +1 -1
  1903. package/locales/global/en-BW.js +1 -1
  1904. package/locales/global/en-BZ.js +1 -1
  1905. package/locales/global/en-CA.js +1 -1
  1906. package/locales/global/en-CC.js +1 -1
  1907. package/locales/global/en-CH.js +1 -1
  1908. package/locales/global/en-CK.js +1 -1
  1909. package/locales/global/en-CM.js +1 -1
  1910. package/locales/global/en-CX.js +1 -1
  1911. package/locales/global/en-CY.js +1 -1
  1912. package/locales/global/en-DE.js +1 -1
  1913. package/locales/global/en-DG.js +1 -1
  1914. package/locales/global/en-DK.js +1 -1
  1915. package/locales/global/en-DM.js +1 -1
  1916. package/locales/global/en-ER.js +1 -1
  1917. package/locales/global/en-FI.js +1 -1
  1918. package/locales/global/en-FJ.js +1 -1
  1919. package/locales/global/en-FK.js +1 -1
  1920. package/locales/global/en-FM.js +1 -1
  1921. package/locales/global/en-GB.js +1 -1
  1922. package/locales/global/en-GD.js +1 -1
  1923. package/locales/global/en-GG.js +1 -1
  1924. package/locales/global/en-GH.js +1 -1
  1925. package/locales/global/en-GI.js +1 -1
  1926. package/locales/global/en-GM.js +1 -1
  1927. package/locales/global/en-GU.js +1 -1
  1928. package/locales/global/en-GY.js +1 -1
  1929. package/locales/global/en-HK.js +1 -1
  1930. package/locales/global/en-IE.js +1 -1
  1931. package/locales/global/en-IL.js +1 -1
  1932. package/locales/global/en-IM.js +1 -1
  1933. package/locales/global/en-IN.js +1 -1
  1934. package/locales/global/en-IO.js +1 -1
  1935. package/locales/global/en-JE.js +1 -1
  1936. package/locales/global/en-JM.js +1 -1
  1937. package/locales/global/en-KE.js +1 -1
  1938. package/locales/global/en-KI.js +1 -1
  1939. package/locales/global/en-KN.js +1 -1
  1940. package/locales/global/en-KY.js +1 -1
  1941. package/locales/global/en-LC.js +1 -1
  1942. package/locales/global/en-LR.js +1 -1
  1943. package/locales/global/en-LS.js +1 -1
  1944. package/locales/global/en-MG.js +1 -1
  1945. package/locales/global/en-MH.js +1 -1
  1946. package/locales/global/en-MO.js +1 -1
  1947. package/locales/global/en-MP.js +1 -1
  1948. package/locales/global/en-MS.js +1 -1
  1949. package/locales/global/en-MT.js +1 -1
  1950. package/locales/global/en-MU.js +1 -1
  1951. package/locales/global/en-MV.js +1 -1
  1952. package/locales/global/en-MW.js +1 -1
  1953. package/locales/global/en-MY.js +1 -1
  1954. package/locales/global/en-NA.js +1 -1
  1955. package/locales/global/en-NF.js +1 -1
  1956. package/locales/global/en-NG.js +1 -1
  1957. package/locales/global/en-NL.js +1 -1
  1958. package/locales/global/en-NR.js +1 -1
  1959. package/locales/global/en-NU.js +1 -1
  1960. package/locales/global/en-NZ.js +1 -1
  1961. package/locales/global/en-PG.js +1 -1
  1962. package/locales/global/en-PH.js +1 -1
  1963. package/locales/global/en-PK.js +1 -1
  1964. package/locales/global/en-PN.js +1 -1
  1965. package/locales/global/en-PR.js +1 -1
  1966. package/locales/global/en-PW.js +1 -1
  1967. package/locales/global/en-RW.js +1 -1
  1968. package/locales/global/en-SB.js +1 -1
  1969. package/locales/global/en-SC.js +1 -1
  1970. package/locales/global/en-SD.js +1 -1
  1971. package/locales/global/en-SE.js +1 -1
  1972. package/locales/global/en-SG.js +1 -1
  1973. package/locales/global/en-SH.js +1 -1
  1974. package/locales/global/en-SI.js +1 -1
  1975. package/locales/global/en-SL.js +1 -1
  1976. package/locales/global/en-SS.js +1 -1
  1977. package/locales/global/en-SX.js +1 -1
  1978. package/locales/global/en-SZ.js +1 -1
  1979. package/locales/global/en-TC.js +1 -1
  1980. package/locales/global/en-TK.js +1 -1
  1981. package/locales/global/en-TO.js +1 -1
  1982. package/locales/global/en-TT.js +1 -1
  1983. package/locales/global/en-TV.js +1 -1
  1984. package/locales/global/en-TZ.js +1 -1
  1985. package/locales/global/en-UG.js +1 -1
  1986. package/locales/global/en-UM.js +1 -1
  1987. package/locales/global/en-VC.js +1 -1
  1988. package/locales/global/en-VG.js +1 -1
  1989. package/locales/global/en-VI.js +1 -1
  1990. package/locales/global/en-VU.js +1 -1
  1991. package/locales/global/en-WS.js +1 -1
  1992. package/locales/global/en-ZA.js +1 -1
  1993. package/locales/global/en-ZM.js +1 -1
  1994. package/locales/global/en-ZW.js +1 -1
  1995. package/locales/global/en.js +1 -1
  1996. package/locales/global/eo.js +1 -1
  1997. package/locales/global/es-419.js +1 -1
  1998. package/locales/global/es-AR.js +1 -1
  1999. package/locales/global/es-BO.js +1 -1
  2000. package/locales/global/es-BR.js +1 -1
  2001. package/locales/global/es-BZ.js +1 -1
  2002. package/locales/global/es-CL.js +1 -1
  2003. package/locales/global/es-CO.js +1 -1
  2004. package/locales/global/es-CR.js +1 -1
  2005. package/locales/global/es-CU.js +1 -1
  2006. package/locales/global/es-DO.js +1 -1
  2007. package/locales/global/es-EA.js +1 -1
  2008. package/locales/global/es-EC.js +1 -1
  2009. package/locales/global/es-GQ.js +1 -1
  2010. package/locales/global/es-GT.js +1 -1
  2011. package/locales/global/es-HN.js +1 -1
  2012. package/locales/global/es-IC.js +1 -1
  2013. package/locales/global/es-MX.js +1 -1
  2014. package/locales/global/es-NI.js +1 -1
  2015. package/locales/global/es-PA.js +1 -1
  2016. package/locales/global/es-PE.js +1 -1
  2017. package/locales/global/es-PH.js +1 -1
  2018. package/locales/global/es-PR.js +1 -1
  2019. package/locales/global/es-PY.js +1 -1
  2020. package/locales/global/es-SV.js +1 -1
  2021. package/locales/global/es-US.js +1 -1
  2022. package/locales/global/es-UY.js +1 -1
  2023. package/locales/global/es-VE.js +1 -1
  2024. package/locales/global/es.js +1 -1
  2025. package/locales/global/et.js +1 -1
  2026. package/locales/global/eu.js +1 -1
  2027. package/locales/global/ewo.js +1 -1
  2028. package/locales/global/fa-AF.js +1 -1
  2029. package/locales/global/fa.js +1 -1
  2030. package/locales/global/ff-Adlm-BF.js +1 -1
  2031. package/locales/global/ff-Adlm-CM.js +1 -1
  2032. package/locales/global/ff-Adlm-GH.js +1 -1
  2033. package/locales/global/ff-Adlm-GM.js +1 -1
  2034. package/locales/global/ff-Adlm-GW.js +1 -1
  2035. package/locales/global/ff-Adlm-LR.js +1 -1
  2036. package/locales/global/ff-Adlm-MR.js +1 -1
  2037. package/locales/global/ff-Adlm-NE.js +1 -1
  2038. package/locales/global/ff-Adlm-NG.js +1 -1
  2039. package/locales/global/ff-Adlm-SL.js +1 -1
  2040. package/locales/global/ff-Adlm-SN.js +1 -1
  2041. package/locales/global/ff-Adlm.js +1 -1
  2042. package/locales/global/ff-CM.js +1 -1
  2043. package/locales/global/ff-GN.js +1 -1
  2044. package/locales/global/ff-Latn-BF.js +1 -1
  2045. package/locales/global/ff-Latn-CM.js +1 -1
  2046. package/locales/global/ff-Latn-GH.js +1 -1
  2047. package/locales/global/ff-Latn-GM.js +1 -1
  2048. package/locales/global/ff-Latn-GN.js +1 -1
  2049. package/locales/global/ff-Latn-GW.js +1 -1
  2050. package/locales/global/ff-Latn-LR.js +1 -1
  2051. package/locales/global/ff-Latn-MR.js +1 -1
  2052. package/locales/global/ff-Latn-NE.js +1 -1
  2053. package/locales/global/ff-Latn-NG.js +1 -1
  2054. package/locales/global/ff-Latn-SL.js +1 -1
  2055. package/locales/global/ff-Latn.js +1 -1
  2056. package/locales/global/ff-MR.js +1 -1
  2057. package/locales/global/ff.js +1 -1
  2058. package/locales/global/fi.js +1 -1
  2059. package/locales/global/fil.js +1 -1
  2060. package/locales/global/fo-DK.js +1 -1
  2061. package/locales/global/fo.js +1 -1
  2062. package/locales/global/fr-BE.js +1 -1
  2063. package/locales/global/fr-BF.js +1 -1
  2064. package/locales/global/fr-BI.js +1 -1
  2065. package/locales/global/fr-BJ.js +1 -1
  2066. package/locales/global/fr-BL.js +1 -1
  2067. package/locales/global/fr-CA.js +1 -1
  2068. package/locales/global/fr-CD.js +1 -1
  2069. package/locales/global/fr-CF.js +1 -1
  2070. package/locales/global/fr-CG.js +1 -1
  2071. package/locales/global/fr-CH.js +1 -1
  2072. package/locales/global/fr-CI.js +1 -1
  2073. package/locales/global/fr-CM.js +1 -1
  2074. package/locales/global/fr-DJ.js +1 -1
  2075. package/locales/global/fr-DZ.js +1 -1
  2076. package/locales/global/fr-GA.js +1 -1
  2077. package/locales/global/fr-GF.js +1 -1
  2078. package/locales/global/fr-GN.js +1 -1
  2079. package/locales/global/fr-GP.js +1 -1
  2080. package/locales/global/fr-GQ.js +1 -1
  2081. package/locales/global/fr-HT.js +1 -1
  2082. package/locales/global/fr-KM.js +1 -1
  2083. package/locales/global/fr-LU.js +1 -1
  2084. package/locales/global/fr-MA.js +1 -1
  2085. package/locales/global/fr-MC.js +1 -1
  2086. package/locales/global/fr-MF.js +1 -1
  2087. package/locales/global/fr-MG.js +1 -1
  2088. package/locales/global/fr-ML.js +1 -1
  2089. package/locales/global/fr-MQ.js +1 -1
  2090. package/locales/global/fr-MR.js +1 -1
  2091. package/locales/global/fr-MU.js +1 -1
  2092. package/locales/global/fr-NC.js +1 -1
  2093. package/locales/global/fr-NE.js +1 -1
  2094. package/locales/global/fr-PF.js +1 -1
  2095. package/locales/global/fr-PM.js +1 -1
  2096. package/locales/global/fr-RE.js +1 -1
  2097. package/locales/global/fr-RW.js +1 -1
  2098. package/locales/global/fr-SC.js +1 -1
  2099. package/locales/global/fr-SN.js +1 -1
  2100. package/locales/global/fr-SY.js +1 -1
  2101. package/locales/global/fr-TD.js +1 -1
  2102. package/locales/global/fr-TG.js +1 -1
  2103. package/locales/global/fr-TN.js +1 -1
  2104. package/locales/global/fr-VU.js +1 -1
  2105. package/locales/global/fr-WF.js +1 -1
  2106. package/locales/global/fr-YT.js +1 -1
  2107. package/locales/global/fr.js +1 -1
  2108. package/locales/global/fur.js +1 -1
  2109. package/locales/global/fy.js +1 -1
  2110. package/locales/global/ga-GB.js +1 -1
  2111. package/locales/global/ga.js +1 -1
  2112. package/locales/global/gd.js +1 -1
  2113. package/locales/global/gl.js +1 -1
  2114. package/locales/global/gsw-FR.js +1 -1
  2115. package/locales/global/gsw-LI.js +1 -1
  2116. package/locales/global/gsw.js +1 -1
  2117. package/locales/global/gu.js +1 -1
  2118. package/locales/global/guz.js +1 -1
  2119. package/locales/global/gv.js +1 -1
  2120. package/locales/global/ha-GH.js +1 -1
  2121. package/locales/global/ha-NE.js +1 -1
  2122. package/locales/global/ha.js +1 -1
  2123. package/locales/global/haw.js +1 -1
  2124. package/locales/global/he.js +1 -1
  2125. package/locales/global/hi-Latn.js +1 -1
  2126. package/locales/global/hi.js +1 -1
  2127. package/locales/global/hr-BA.js +1 -1
  2128. package/locales/global/hr.js +1 -1
  2129. package/locales/global/hsb.js +1 -1
  2130. package/locales/global/hu.js +1 -1
  2131. package/locales/global/hy.js +1 -1
  2132. package/locales/global/ia.js +1 -1
  2133. package/locales/global/id.js +1 -1
  2134. package/locales/global/ig.js +1 -1
  2135. package/locales/global/ii.js +1 -1
  2136. package/locales/global/is.js +1 -1
  2137. package/locales/global/it-CH.js +1 -1
  2138. package/locales/global/it-SM.js +1 -1
  2139. package/locales/global/it-VA.js +1 -1
  2140. package/locales/global/it.js +1 -1
  2141. package/locales/global/ja.js +1 -1
  2142. package/locales/global/jgo.js +1 -1
  2143. package/locales/global/jmc.js +1 -1
  2144. package/locales/global/jv.js +1 -1
  2145. package/locales/global/ka.js +1 -1
  2146. package/locales/global/kab.js +1 -1
  2147. package/locales/global/kam.js +1 -1
  2148. package/locales/global/kde.js +1 -1
  2149. package/locales/global/kea.js +1 -1
  2150. package/locales/global/kgp.js +1 -1
  2151. package/locales/global/khq.js +1 -1
  2152. package/locales/global/ki.js +1 -1
  2153. package/locales/global/kk.js +1 -1
  2154. package/locales/global/kkj.js +1 -1
  2155. package/locales/global/kl.js +1 -1
  2156. package/locales/global/kln.js +1 -1
  2157. package/locales/global/km.js +1 -1
  2158. package/locales/global/kn.js +1 -1
  2159. package/locales/global/ko-KP.js +1 -1
  2160. package/locales/global/ko.js +1 -1
  2161. package/locales/global/kok.js +1 -1
  2162. package/locales/global/ks-Arab.js +1 -1
  2163. package/locales/global/ks-Deva.js +1 -1
  2164. package/locales/global/ks.js +1 -1
  2165. package/locales/global/ksb.js +1 -1
  2166. package/locales/global/ksf.js +1 -1
  2167. package/locales/global/ksh.js +1 -1
  2168. package/locales/global/ku.js +1 -1
  2169. package/locales/global/kw.js +1 -1
  2170. package/locales/global/ky.js +1 -1
  2171. package/locales/global/lag.js +1 -1
  2172. package/locales/global/lb.js +1 -1
  2173. package/locales/global/lg.js +1 -1
  2174. package/locales/global/lkt.js +1 -1
  2175. package/locales/global/ln-AO.js +1 -1
  2176. package/locales/global/ln-CF.js +1 -1
  2177. package/locales/global/ln-CG.js +1 -1
  2178. package/locales/global/ln.js +1 -1
  2179. package/locales/global/lo.js +1 -1
  2180. package/locales/global/lrc-IQ.js +1 -1
  2181. package/locales/global/lrc.js +1 -1
  2182. package/locales/global/lt.js +1 -1
  2183. package/locales/global/lu.js +1 -1
  2184. package/locales/global/luo.js +1 -1
  2185. package/locales/global/luy.js +1 -1
  2186. package/locales/global/lv.js +1 -1
  2187. package/locales/global/mai.js +1 -1
  2188. package/locales/global/mas-TZ.js +1 -1
  2189. package/locales/global/mas.js +1 -1
  2190. package/locales/global/mer.js +1 -1
  2191. package/locales/global/mfe.js +1 -1
  2192. package/locales/global/mg.js +1 -1
  2193. package/locales/global/mgh.js +1 -1
  2194. package/locales/global/mgo.js +1 -1
  2195. package/locales/global/mi.js +1 -1
  2196. package/locales/global/mk.js +1 -1
  2197. package/locales/global/ml.js +1 -1
  2198. package/locales/global/mn.js +1 -1
  2199. package/locales/global/mni-Beng.js +1 -1
  2200. package/locales/global/mni.js +1 -1
  2201. package/locales/global/mr.js +1 -1
  2202. package/locales/global/ms-BN.js +1 -1
  2203. package/locales/global/ms-ID.js +1 -1
  2204. package/locales/global/ms-SG.js +1 -1
  2205. package/locales/global/ms.js +1 -1
  2206. package/locales/global/mt.js +1 -1
  2207. package/locales/global/mua.js +1 -1
  2208. package/locales/global/my.js +1 -1
  2209. package/locales/global/mzn.js +1 -1
  2210. package/locales/global/naq.js +1 -1
  2211. package/locales/global/nb-SJ.js +1 -1
  2212. package/locales/global/nb.js +1 -1
  2213. package/locales/global/nd.js +1 -1
  2214. package/locales/global/nds-NL.js +1 -1
  2215. package/locales/global/nds.js +1 -1
  2216. package/locales/global/ne-IN.js +1 -1
  2217. package/locales/global/ne.js +1 -1
  2218. package/locales/global/nl-AW.js +1 -1
  2219. package/locales/global/nl-BE.js +1 -1
  2220. package/locales/global/nl-BQ.js +1 -1
  2221. package/locales/global/nl-CW.js +1 -1
  2222. package/locales/global/nl-SR.js +1 -1
  2223. package/locales/global/nl-SX.js +1 -1
  2224. package/locales/global/nl.js +1 -1
  2225. package/locales/global/nmg.js +1 -1
  2226. package/locales/global/nn.js +1 -1
  2227. package/locales/global/nnh.js +1 -1
  2228. package/locales/global/no.js +1 -1
  2229. package/locales/global/nus.js +1 -1
  2230. package/locales/global/nyn.js +1 -1
  2231. package/locales/global/om-KE.js +1 -1
  2232. package/locales/global/om.js +1 -1
  2233. package/locales/global/or.js +1 -1
  2234. package/locales/global/os-RU.js +1 -1
  2235. package/locales/global/os.js +1 -1
  2236. package/locales/global/pa-Arab.js +1 -1
  2237. package/locales/global/pa-Guru.js +1 -1
  2238. package/locales/global/pa.js +1 -1
  2239. package/locales/global/pcm.js +1 -1
  2240. package/locales/global/pl.js +1 -1
  2241. package/locales/global/ps-PK.js +1 -1
  2242. package/locales/global/ps.js +1 -1
  2243. package/locales/global/pt-AO.js +1 -1
  2244. package/locales/global/pt-CH.js +1 -1
  2245. package/locales/global/pt-CV.js +1 -1
  2246. package/locales/global/pt-GQ.js +1 -1
  2247. package/locales/global/pt-GW.js +1 -1
  2248. package/locales/global/pt-LU.js +1 -1
  2249. package/locales/global/pt-MO.js +1 -1
  2250. package/locales/global/pt-MZ.js +1 -1
  2251. package/locales/global/pt-PT.js +1 -1
  2252. package/locales/global/pt-ST.js +1 -1
  2253. package/locales/global/pt-TL.js +1 -1
  2254. package/locales/global/pt.js +1 -1
  2255. package/locales/global/qu-BO.js +1 -1
  2256. package/locales/global/qu-EC.js +1 -1
  2257. package/locales/global/qu.js +1 -1
  2258. package/locales/global/rm.js +1 -1
  2259. package/locales/global/rn.js +1 -1
  2260. package/locales/global/ro-MD.js +1 -1
  2261. package/locales/global/ro.js +1 -1
  2262. package/locales/global/rof.js +1 -1
  2263. package/locales/global/ru-BY.js +1 -1
  2264. package/locales/global/ru-KG.js +1 -1
  2265. package/locales/global/ru-KZ.js +1 -1
  2266. package/locales/global/ru-MD.js +1 -1
  2267. package/locales/global/ru-UA.js +1 -1
  2268. package/locales/global/ru.js +1 -1
  2269. package/locales/global/rw.js +1 -1
  2270. package/locales/global/rwk.js +1 -1
  2271. package/locales/global/sa.js +1 -1
  2272. package/locales/global/sah.js +1 -1
  2273. package/locales/global/saq.js +1 -1
  2274. package/locales/global/sat-Olck.js +1 -1
  2275. package/locales/global/sat.js +1 -1
  2276. package/locales/global/sbp.js +1 -1
  2277. package/locales/global/sc.js +1 -1
  2278. package/locales/global/sd-Arab.js +1 -1
  2279. package/locales/global/sd-Deva.js +1 -1
  2280. package/locales/global/sd.js +1 -1
  2281. package/locales/global/se-FI.js +1 -1
  2282. package/locales/global/se-SE.js +1 -1
  2283. package/locales/global/se.js +1 -1
  2284. package/locales/global/seh.js +1 -1
  2285. package/locales/global/ses.js +1 -1
  2286. package/locales/global/sg.js +1 -1
  2287. package/locales/global/shi-Latn.js +1 -1
  2288. package/locales/global/shi-Tfng.js +1 -1
  2289. package/locales/global/shi.js +1 -1
  2290. package/locales/global/si.js +1 -1
  2291. package/locales/global/sk.js +1 -1
  2292. package/locales/global/sl.js +1 -1
  2293. package/locales/global/smn.js +1 -1
  2294. package/locales/global/sn.js +1 -1
  2295. package/locales/global/so-DJ.js +1 -1
  2296. package/locales/global/so-ET.js +1 -1
  2297. package/locales/global/so-KE.js +1 -1
  2298. package/locales/global/so.js +1 -1
  2299. package/locales/global/sq-MK.js +1 -1
  2300. package/locales/global/sq-XK.js +1 -1
  2301. package/locales/global/sq.js +1 -1
  2302. package/locales/global/sr-Cyrl-BA.js +1 -1
  2303. package/locales/global/sr-Cyrl-ME.js +1 -1
  2304. package/locales/global/sr-Cyrl-XK.js +1 -1
  2305. package/locales/global/sr-Cyrl.js +1 -1
  2306. package/locales/global/sr-Latn-BA.js +1 -1
  2307. package/locales/global/sr-Latn-ME.js +1 -1
  2308. package/locales/global/sr-Latn-XK.js +1 -1
  2309. package/locales/global/sr-Latn.js +1 -1
  2310. package/locales/global/sr.js +1 -1
  2311. package/locales/global/su-Latn.js +1 -1
  2312. package/locales/global/su.js +1 -1
  2313. package/locales/global/sv-AX.js +1 -1
  2314. package/locales/global/sv-FI.js +1 -1
  2315. package/locales/global/sv.js +1 -1
  2316. package/locales/global/sw-CD.js +1 -1
  2317. package/locales/global/sw-KE.js +1 -1
  2318. package/locales/global/sw-UG.js +1 -1
  2319. package/locales/global/sw.js +1 -1
  2320. package/locales/global/ta-LK.js +1 -1
  2321. package/locales/global/ta-MY.js +1 -1
  2322. package/locales/global/ta-SG.js +1 -1
  2323. package/locales/global/ta.js +1 -1
  2324. package/locales/global/te.js +1 -1
  2325. package/locales/global/teo-KE.js +1 -1
  2326. package/locales/global/teo.js +1 -1
  2327. package/locales/global/tg.js +1 -1
  2328. package/locales/global/th.js +1 -1
  2329. package/locales/global/ti-ER.js +1 -1
  2330. package/locales/global/ti.js +1 -1
  2331. package/locales/global/tk.js +1 -1
  2332. package/locales/global/to.js +1 -1
  2333. package/locales/global/tr-CY.js +1 -1
  2334. package/locales/global/tr.js +1 -1
  2335. package/locales/global/tt.js +1 -1
  2336. package/locales/global/twq.js +1 -1
  2337. package/locales/global/tzm.js +1 -1
  2338. package/locales/global/ug.js +1 -1
  2339. package/locales/global/uk.js +1 -1
  2340. package/locales/global/und.js +1 -1
  2341. package/locales/global/ur-IN.js +1 -1
  2342. package/locales/global/ur.js +1 -1
  2343. package/locales/global/uz-Arab.js +1 -1
  2344. package/locales/global/uz-Cyrl.js +1 -1
  2345. package/locales/global/uz-Latn.js +1 -1
  2346. package/locales/global/uz.js +1 -1
  2347. package/locales/global/vai-Latn.js +1 -1
  2348. package/locales/global/vai-Vaii.js +1 -1
  2349. package/locales/global/vai.js +1 -1
  2350. package/locales/global/vi.js +1 -1
  2351. package/locales/global/vun.js +1 -1
  2352. package/locales/global/wae.js +1 -1
  2353. package/locales/global/wo.js +1 -1
  2354. package/locales/global/xh.js +1 -1
  2355. package/locales/global/xog.js +1 -1
  2356. package/locales/global/yav.js +1 -1
  2357. package/locales/global/yi.js +1 -1
  2358. package/locales/global/yo-BJ.js +1 -1
  2359. package/locales/global/yo.js +1 -1
  2360. package/locales/global/yrl-CO.js +1 -1
  2361. package/locales/global/yrl-VE.js +1 -1
  2362. package/locales/global/yrl.js +1 -1
  2363. package/locales/global/yue-Hans.js +1 -1
  2364. package/locales/global/yue-Hant.js +1 -1
  2365. package/locales/global/yue.js +1 -1
  2366. package/locales/global/zgh.js +1 -1
  2367. package/locales/global/zh-Hans-HK.js +1 -1
  2368. package/locales/global/zh-Hans-MO.js +1 -1
  2369. package/locales/global/zh-Hans-SG.js +1 -1
  2370. package/locales/global/zh-Hans.js +1 -1
  2371. package/locales/global/zh-Hant-HK.js +1 -1
  2372. package/locales/global/zh-Hant-MO.js +1 -1
  2373. package/locales/global/zh-Hant.js +1 -1
  2374. package/locales/global/zh.js +1 -1
  2375. package/locales/global/zu.js +1 -1
  2376. package/locales/gsw-FR.d.ts +1 -1
  2377. package/locales/gsw-FR.mjs +2 -2
  2378. package/locales/gsw-LI.d.ts +1 -1
  2379. package/locales/gsw-LI.mjs +2 -2
  2380. package/locales/gsw.d.ts +1 -1
  2381. package/locales/gsw.mjs +2 -2
  2382. package/locales/gu.d.ts +1 -1
  2383. package/locales/gu.mjs +2 -2
  2384. package/locales/guz.d.ts +1 -1
  2385. package/locales/guz.mjs +2 -2
  2386. package/locales/gv.d.ts +1 -1
  2387. package/locales/gv.mjs +2 -2
  2388. package/locales/ha-GH.d.ts +1 -1
  2389. package/locales/ha-GH.mjs +2 -2
  2390. package/locales/ha-NE.d.ts +1 -1
  2391. package/locales/ha-NE.mjs +2 -2
  2392. package/locales/ha.d.ts +1 -1
  2393. package/locales/ha.mjs +2 -2
  2394. package/locales/haw.d.ts +1 -1
  2395. package/locales/haw.mjs +2 -2
  2396. package/locales/he.d.ts +1 -1
  2397. package/locales/he.mjs +2 -2
  2398. package/locales/hi-Latn.d.ts +1 -1
  2399. package/locales/hi-Latn.mjs +2 -2
  2400. package/locales/hi.d.ts +1 -1
  2401. package/locales/hi.mjs +2 -2
  2402. package/locales/hr-BA.d.ts +1 -1
  2403. package/locales/hr-BA.mjs +2 -2
  2404. package/locales/hr.d.ts +1 -1
  2405. package/locales/hr.mjs +2 -2
  2406. package/locales/hsb.d.ts +1 -1
  2407. package/locales/hsb.mjs +2 -2
  2408. package/locales/hu.d.ts +1 -1
  2409. package/locales/hu.mjs +2 -2
  2410. package/locales/hy.d.ts +1 -1
  2411. package/locales/hy.mjs +2 -2
  2412. package/locales/ia.d.ts +1 -1
  2413. package/locales/ia.mjs +2 -2
  2414. package/locales/id.d.ts +1 -1
  2415. package/locales/id.mjs +2 -2
  2416. package/locales/ig.d.ts +1 -1
  2417. package/locales/ig.mjs +2 -2
  2418. package/locales/ii.d.ts +1 -1
  2419. package/locales/ii.mjs +2 -2
  2420. package/locales/is.d.ts +1 -1
  2421. package/locales/is.mjs +2 -2
  2422. package/locales/it-CH.d.ts +1 -1
  2423. package/locales/it-CH.mjs +2 -2
  2424. package/locales/it-SM.d.ts +1 -1
  2425. package/locales/it-SM.mjs +2 -2
  2426. package/locales/it-VA.d.ts +1 -1
  2427. package/locales/it-VA.mjs +2 -2
  2428. package/locales/it.d.ts +1 -1
  2429. package/locales/it.mjs +2 -2
  2430. package/locales/ja.d.ts +1 -1
  2431. package/locales/ja.mjs +2 -2
  2432. package/locales/jgo.d.ts +1 -1
  2433. package/locales/jgo.mjs +2 -2
  2434. package/locales/jmc.d.ts +1 -1
  2435. package/locales/jmc.mjs +2 -2
  2436. package/locales/jv.d.ts +1 -1
  2437. package/locales/jv.mjs +2 -2
  2438. package/locales/ka.d.ts +1 -1
  2439. package/locales/ka.mjs +2 -2
  2440. package/locales/kab.d.ts +1 -1
  2441. package/locales/kab.mjs +2 -2
  2442. package/locales/kam.d.ts +1 -1
  2443. package/locales/kam.mjs +2 -2
  2444. package/locales/kde.d.ts +1 -1
  2445. package/locales/kde.mjs +2 -2
  2446. package/locales/kea.d.ts +1 -1
  2447. package/locales/kea.mjs +2 -2
  2448. package/locales/kgp.d.ts +1 -1
  2449. package/locales/kgp.mjs +2 -2
  2450. package/locales/khq.d.ts +1 -1
  2451. package/locales/khq.mjs +2 -2
  2452. package/locales/ki.d.ts +1 -1
  2453. package/locales/ki.mjs +2 -2
  2454. package/locales/kk.d.ts +1 -1
  2455. package/locales/kk.mjs +2 -2
  2456. package/locales/kkj.d.ts +1 -1
  2457. package/locales/kkj.mjs +2 -2
  2458. package/locales/kl.d.ts +1 -1
  2459. package/locales/kl.mjs +2 -2
  2460. package/locales/kln.d.ts +1 -1
  2461. package/locales/kln.mjs +2 -2
  2462. package/locales/km.d.ts +1 -1
  2463. package/locales/km.mjs +2 -2
  2464. package/locales/kn.d.ts +1 -1
  2465. package/locales/kn.mjs +2 -2
  2466. package/locales/ko-KP.d.ts +1 -1
  2467. package/locales/ko-KP.mjs +2 -2
  2468. package/locales/ko.d.ts +1 -1
  2469. package/locales/ko.mjs +2 -2
  2470. package/locales/kok.d.ts +1 -1
  2471. package/locales/kok.mjs +2 -2
  2472. package/locales/ks-Arab.d.ts +1 -1
  2473. package/locales/ks-Arab.mjs +2 -2
  2474. package/locales/ks-Deva.d.ts +1 -1
  2475. package/locales/ks-Deva.mjs +2 -2
  2476. package/locales/ks.d.ts +1 -1
  2477. package/locales/ks.mjs +2 -2
  2478. package/locales/ksb.d.ts +1 -1
  2479. package/locales/ksb.mjs +2 -2
  2480. package/locales/ksf.d.ts +1 -1
  2481. package/locales/ksf.mjs +2 -2
  2482. package/locales/ksh.d.ts +1 -1
  2483. package/locales/ksh.mjs +2 -2
  2484. package/locales/ku.d.ts +1 -1
  2485. package/locales/ku.mjs +2 -2
  2486. package/locales/kw.d.ts +1 -1
  2487. package/locales/kw.mjs +2 -2
  2488. package/locales/ky.d.ts +1 -1
  2489. package/locales/ky.mjs +2 -2
  2490. package/locales/lag.d.ts +1 -1
  2491. package/locales/lag.mjs +2 -2
  2492. package/locales/lb.d.ts +1 -1
  2493. package/locales/lb.mjs +2 -2
  2494. package/locales/lg.d.ts +1 -1
  2495. package/locales/lg.mjs +2 -2
  2496. package/locales/lkt.d.ts +1 -1
  2497. package/locales/lkt.mjs +2 -2
  2498. package/locales/ln-AO.d.ts +1 -1
  2499. package/locales/ln-AO.mjs +2 -2
  2500. package/locales/ln-CF.d.ts +1 -1
  2501. package/locales/ln-CF.mjs +2 -2
  2502. package/locales/ln-CG.d.ts +1 -1
  2503. package/locales/ln-CG.mjs +2 -2
  2504. package/locales/ln.d.ts +1 -1
  2505. package/locales/ln.mjs +2 -2
  2506. package/locales/lo.d.ts +1 -1
  2507. package/locales/lo.mjs +2 -2
  2508. package/locales/lrc-IQ.d.ts +1 -1
  2509. package/locales/lrc-IQ.mjs +2 -2
  2510. package/locales/lrc.d.ts +1 -1
  2511. package/locales/lrc.mjs +2 -2
  2512. package/locales/lt.d.ts +1 -1
  2513. package/locales/lt.mjs +2 -2
  2514. package/locales/lu.d.ts +1 -1
  2515. package/locales/lu.mjs +2 -2
  2516. package/locales/luo.d.ts +1 -1
  2517. package/locales/luo.mjs +2 -2
  2518. package/locales/luy.d.ts +1 -1
  2519. package/locales/luy.mjs +2 -2
  2520. package/locales/lv.d.ts +1 -1
  2521. package/locales/lv.mjs +2 -2
  2522. package/locales/mai.d.ts +1 -1
  2523. package/locales/mai.mjs +2 -2
  2524. package/locales/mas-TZ.d.ts +1 -1
  2525. package/locales/mas-TZ.mjs +2 -2
  2526. package/locales/mas.d.ts +1 -1
  2527. package/locales/mas.mjs +2 -2
  2528. package/locales/mer.d.ts +1 -1
  2529. package/locales/mer.mjs +2 -2
  2530. package/locales/mfe.d.ts +1 -1
  2531. package/locales/mfe.mjs +2 -2
  2532. package/locales/mg.d.ts +1 -1
  2533. package/locales/mg.mjs +2 -2
  2534. package/locales/mgh.d.ts +1 -1
  2535. package/locales/mgh.mjs +2 -2
  2536. package/locales/mgo.d.ts +1 -1
  2537. package/locales/mgo.mjs +2 -2
  2538. package/locales/mi.d.ts +1 -1
  2539. package/locales/mi.mjs +2 -2
  2540. package/locales/mk.d.ts +1 -1
  2541. package/locales/mk.mjs +2 -2
  2542. package/locales/ml.d.ts +1 -1
  2543. package/locales/ml.mjs +2 -2
  2544. package/locales/mn.d.ts +1 -1
  2545. package/locales/mn.mjs +2 -2
  2546. package/locales/mni-Beng.d.ts +1 -1
  2547. package/locales/mni-Beng.mjs +2 -2
  2548. package/locales/mni.d.ts +1 -1
  2549. package/locales/mni.mjs +2 -2
  2550. package/locales/mr.d.ts +1 -1
  2551. package/locales/mr.mjs +2 -2
  2552. package/locales/ms-BN.d.ts +1 -1
  2553. package/locales/ms-BN.mjs +2 -2
  2554. package/locales/ms-ID.d.ts +1 -1
  2555. package/locales/ms-ID.mjs +2 -2
  2556. package/locales/ms-SG.d.ts +1 -1
  2557. package/locales/ms-SG.mjs +2 -2
  2558. package/locales/ms.d.ts +1 -1
  2559. package/locales/ms.mjs +2 -2
  2560. package/locales/mt.d.ts +1 -1
  2561. package/locales/mt.mjs +2 -2
  2562. package/locales/mua.d.ts +1 -1
  2563. package/locales/mua.mjs +2 -2
  2564. package/locales/my.d.ts +1 -1
  2565. package/locales/my.mjs +2 -2
  2566. package/locales/mzn.d.ts +1 -1
  2567. package/locales/mzn.mjs +2 -2
  2568. package/locales/naq.d.ts +1 -1
  2569. package/locales/naq.mjs +2 -2
  2570. package/locales/nb-SJ.d.ts +1 -1
  2571. package/locales/nb-SJ.mjs +2 -2
  2572. package/locales/nb.d.ts +1 -1
  2573. package/locales/nb.mjs +2 -2
  2574. package/locales/nd.d.ts +1 -1
  2575. package/locales/nd.mjs +2 -2
  2576. package/locales/nds-NL.d.ts +1 -1
  2577. package/locales/nds-NL.mjs +2 -2
  2578. package/locales/nds.d.ts +1 -1
  2579. package/locales/nds.mjs +2 -2
  2580. package/locales/ne-IN.d.ts +1 -1
  2581. package/locales/ne-IN.mjs +2 -2
  2582. package/locales/ne.d.ts +1 -1
  2583. package/locales/ne.mjs +2 -2
  2584. package/locales/nl-AW.d.ts +1 -1
  2585. package/locales/nl-AW.mjs +2 -2
  2586. package/locales/nl-BE.d.ts +1 -1
  2587. package/locales/nl-BE.mjs +2 -2
  2588. package/locales/nl-BQ.d.ts +1 -1
  2589. package/locales/nl-BQ.mjs +2 -2
  2590. package/locales/nl-CW.d.ts +1 -1
  2591. package/locales/nl-CW.mjs +2 -2
  2592. package/locales/nl-SR.d.ts +1 -1
  2593. package/locales/nl-SR.mjs +2 -2
  2594. package/locales/nl-SX.d.ts +1 -1
  2595. package/locales/nl-SX.mjs +2 -2
  2596. package/locales/nl.d.ts +1 -1
  2597. package/locales/nl.mjs +2 -2
  2598. package/locales/nmg.d.ts +1 -1
  2599. package/locales/nmg.mjs +2 -2
  2600. package/locales/nn.d.ts +1 -1
  2601. package/locales/nn.mjs +2 -2
  2602. package/locales/nnh.d.ts +1 -1
  2603. package/locales/nnh.mjs +2 -2
  2604. package/locales/no.d.ts +1 -1
  2605. package/locales/no.mjs +2 -2
  2606. package/locales/nus.d.ts +1 -1
  2607. package/locales/nus.mjs +2 -2
  2608. package/locales/nyn.d.ts +1 -1
  2609. package/locales/nyn.mjs +2 -2
  2610. package/locales/om-KE.d.ts +1 -1
  2611. package/locales/om-KE.mjs +2 -2
  2612. package/locales/om.d.ts +1 -1
  2613. package/locales/om.mjs +2 -2
  2614. package/locales/or.d.ts +1 -1
  2615. package/locales/or.mjs +2 -2
  2616. package/locales/os-RU.d.ts +1 -1
  2617. package/locales/os-RU.mjs +2 -2
  2618. package/locales/os.d.ts +1 -1
  2619. package/locales/os.mjs +2 -2
  2620. package/locales/pa-Arab.d.ts +1 -1
  2621. package/locales/pa-Arab.mjs +2 -2
  2622. package/locales/pa-Guru.d.ts +1 -1
  2623. package/locales/pa-Guru.mjs +2 -2
  2624. package/locales/pa.d.ts +1 -1
  2625. package/locales/pa.mjs +2 -2
  2626. package/locales/pcm.d.ts +1 -1
  2627. package/locales/pcm.mjs +2 -2
  2628. package/locales/pl.d.ts +1 -1
  2629. package/locales/pl.mjs +2 -2
  2630. package/locales/ps-PK.d.ts +1 -1
  2631. package/locales/ps-PK.mjs +2 -2
  2632. package/locales/ps.d.ts +1 -1
  2633. package/locales/ps.mjs +2 -2
  2634. package/locales/pt-AO.d.ts +1 -1
  2635. package/locales/pt-AO.mjs +2 -2
  2636. package/locales/pt-CH.d.ts +1 -1
  2637. package/locales/pt-CH.mjs +2 -2
  2638. package/locales/pt-CV.d.ts +1 -1
  2639. package/locales/pt-CV.mjs +2 -2
  2640. package/locales/pt-GQ.d.ts +1 -1
  2641. package/locales/pt-GQ.mjs +2 -2
  2642. package/locales/pt-GW.d.ts +1 -1
  2643. package/locales/pt-GW.mjs +2 -2
  2644. package/locales/pt-LU.d.ts +1 -1
  2645. package/locales/pt-LU.mjs +2 -2
  2646. package/locales/pt-MO.d.ts +1 -1
  2647. package/locales/pt-MO.mjs +2 -2
  2648. package/locales/pt-MZ.d.ts +1 -1
  2649. package/locales/pt-MZ.mjs +2 -2
  2650. package/locales/pt-PT.d.ts +1 -1
  2651. package/locales/pt-PT.mjs +2 -2
  2652. package/locales/pt-ST.d.ts +1 -1
  2653. package/locales/pt-ST.mjs +2 -2
  2654. package/locales/pt-TL.d.ts +1 -1
  2655. package/locales/pt-TL.mjs +2 -2
  2656. package/locales/pt.d.ts +1 -1
  2657. package/locales/pt.mjs +2 -2
  2658. package/locales/qu-BO.d.ts +1 -1
  2659. package/locales/qu-BO.mjs +2 -2
  2660. package/locales/qu-EC.d.ts +1 -1
  2661. package/locales/qu-EC.mjs +2 -2
  2662. package/locales/qu.d.ts +1 -1
  2663. package/locales/qu.mjs +2 -2
  2664. package/locales/rm.d.ts +1 -1
  2665. package/locales/rm.mjs +2 -2
  2666. package/locales/rn.d.ts +1 -1
  2667. package/locales/rn.mjs +2 -2
  2668. package/locales/ro-MD.d.ts +1 -1
  2669. package/locales/ro-MD.mjs +2 -2
  2670. package/locales/ro.d.ts +1 -1
  2671. package/locales/ro.mjs +2 -2
  2672. package/locales/rof.d.ts +1 -1
  2673. package/locales/rof.mjs +2 -2
  2674. package/locales/ru-BY.d.ts +1 -1
  2675. package/locales/ru-BY.mjs +2 -2
  2676. package/locales/ru-KG.d.ts +1 -1
  2677. package/locales/ru-KG.mjs +2 -2
  2678. package/locales/ru-KZ.d.ts +1 -1
  2679. package/locales/ru-KZ.mjs +2 -2
  2680. package/locales/ru-MD.d.ts +1 -1
  2681. package/locales/ru-MD.mjs +2 -2
  2682. package/locales/ru-UA.d.ts +1 -1
  2683. package/locales/ru-UA.mjs +2 -2
  2684. package/locales/ru.d.ts +1 -1
  2685. package/locales/ru.mjs +2 -2
  2686. package/locales/rw.d.ts +1 -1
  2687. package/locales/rw.mjs +2 -2
  2688. package/locales/rwk.d.ts +1 -1
  2689. package/locales/rwk.mjs +2 -2
  2690. package/locales/sa.d.ts +1 -1
  2691. package/locales/sa.mjs +2 -2
  2692. package/locales/sah.d.ts +1 -1
  2693. package/locales/sah.mjs +2 -2
  2694. package/locales/saq.d.ts +1 -1
  2695. package/locales/saq.mjs +2 -2
  2696. package/locales/sat-Olck.d.ts +1 -1
  2697. package/locales/sat-Olck.mjs +2 -2
  2698. package/locales/sat.d.ts +1 -1
  2699. package/locales/sat.mjs +2 -2
  2700. package/locales/sbp.d.ts +1 -1
  2701. package/locales/sbp.mjs +2 -2
  2702. package/locales/sc.d.ts +1 -1
  2703. package/locales/sc.mjs +2 -2
  2704. package/locales/sd-Arab.d.ts +1 -1
  2705. package/locales/sd-Arab.mjs +2 -2
  2706. package/locales/sd-Deva.d.ts +1 -1
  2707. package/locales/sd-Deva.mjs +2 -2
  2708. package/locales/sd.d.ts +1 -1
  2709. package/locales/sd.mjs +2 -2
  2710. package/locales/se-FI.d.ts +1 -1
  2711. package/locales/se-FI.mjs +2 -2
  2712. package/locales/se-SE.d.ts +1 -1
  2713. package/locales/se-SE.mjs +2 -2
  2714. package/locales/se.d.ts +1 -1
  2715. package/locales/se.mjs +2 -2
  2716. package/locales/seh.d.ts +1 -1
  2717. package/locales/seh.mjs +2 -2
  2718. package/locales/ses.d.ts +1 -1
  2719. package/locales/ses.mjs +2 -2
  2720. package/locales/sg.d.ts +1 -1
  2721. package/locales/sg.mjs +2 -2
  2722. package/locales/shi-Latn.d.ts +1 -1
  2723. package/locales/shi-Latn.mjs +2 -2
  2724. package/locales/shi-Tfng.d.ts +1 -1
  2725. package/locales/shi-Tfng.mjs +2 -2
  2726. package/locales/shi.d.ts +1 -1
  2727. package/locales/shi.mjs +2 -2
  2728. package/locales/si.d.ts +1 -1
  2729. package/locales/si.mjs +2 -2
  2730. package/locales/sk.d.ts +1 -1
  2731. package/locales/sk.mjs +2 -2
  2732. package/locales/sl.d.ts +1 -1
  2733. package/locales/sl.mjs +2 -2
  2734. package/locales/smn.d.ts +1 -1
  2735. package/locales/smn.mjs +2 -2
  2736. package/locales/sn.d.ts +1 -1
  2737. package/locales/sn.mjs +2 -2
  2738. package/locales/so-DJ.d.ts +1 -1
  2739. package/locales/so-DJ.mjs +2 -2
  2740. package/locales/so-ET.d.ts +1 -1
  2741. package/locales/so-ET.mjs +2 -2
  2742. package/locales/so-KE.d.ts +1 -1
  2743. package/locales/so-KE.mjs +2 -2
  2744. package/locales/so.d.ts +1 -1
  2745. package/locales/so.mjs +2 -2
  2746. package/locales/sq-MK.d.ts +1 -1
  2747. package/locales/sq-MK.mjs +2 -2
  2748. package/locales/sq-XK.d.ts +1 -1
  2749. package/locales/sq-XK.mjs +2 -2
  2750. package/locales/sq.d.ts +1 -1
  2751. package/locales/sq.mjs +2 -2
  2752. package/locales/sr-Cyrl-BA.d.ts +1 -1
  2753. package/locales/sr-Cyrl-BA.mjs +2 -2
  2754. package/locales/sr-Cyrl-ME.d.ts +1 -1
  2755. package/locales/sr-Cyrl-ME.mjs +2 -2
  2756. package/locales/sr-Cyrl-XK.d.ts +1 -1
  2757. package/locales/sr-Cyrl-XK.mjs +2 -2
  2758. package/locales/sr-Cyrl.d.ts +1 -1
  2759. package/locales/sr-Cyrl.mjs +2 -2
  2760. package/locales/sr-Latn-BA.d.ts +1 -1
  2761. package/locales/sr-Latn-BA.mjs +2 -2
  2762. package/locales/sr-Latn-ME.d.ts +1 -1
  2763. package/locales/sr-Latn-ME.mjs +2 -2
  2764. package/locales/sr-Latn-XK.d.ts +1 -1
  2765. package/locales/sr-Latn-XK.mjs +2 -2
  2766. package/locales/sr-Latn.d.ts +1 -1
  2767. package/locales/sr-Latn.mjs +2 -2
  2768. package/locales/sr.d.ts +1 -1
  2769. package/locales/sr.mjs +2 -2
  2770. package/locales/su-Latn.d.ts +1 -1
  2771. package/locales/su-Latn.mjs +2 -2
  2772. package/locales/su.d.ts +1 -1
  2773. package/locales/su.mjs +2 -2
  2774. package/locales/sv-AX.d.ts +1 -1
  2775. package/locales/sv-AX.mjs +2 -2
  2776. package/locales/sv-FI.d.ts +1 -1
  2777. package/locales/sv-FI.mjs +2 -2
  2778. package/locales/sv.d.ts +1 -1
  2779. package/locales/sv.mjs +2 -2
  2780. package/locales/sw-CD.d.ts +1 -1
  2781. package/locales/sw-CD.mjs +2 -2
  2782. package/locales/sw-KE.d.ts +1 -1
  2783. package/locales/sw-KE.mjs +2 -2
  2784. package/locales/sw-UG.d.ts +1 -1
  2785. package/locales/sw-UG.mjs +2 -2
  2786. package/locales/sw.d.ts +1 -1
  2787. package/locales/sw.mjs +2 -2
  2788. package/locales/ta-LK.d.ts +1 -1
  2789. package/locales/ta-LK.mjs +2 -2
  2790. package/locales/ta-MY.d.ts +1 -1
  2791. package/locales/ta-MY.mjs +2 -2
  2792. package/locales/ta-SG.d.ts +1 -1
  2793. package/locales/ta-SG.mjs +2 -2
  2794. package/locales/ta.d.ts +1 -1
  2795. package/locales/ta.mjs +2 -2
  2796. package/locales/te.d.ts +1 -1
  2797. package/locales/te.mjs +2 -2
  2798. package/locales/teo-KE.d.ts +1 -1
  2799. package/locales/teo-KE.mjs +2 -2
  2800. package/locales/teo.d.ts +1 -1
  2801. package/locales/teo.mjs +2 -2
  2802. package/locales/tg.d.ts +1 -1
  2803. package/locales/tg.mjs +2 -2
  2804. package/locales/th.d.ts +1 -1
  2805. package/locales/th.mjs +2 -2
  2806. package/locales/ti-ER.d.ts +1 -1
  2807. package/locales/ti-ER.mjs +2 -2
  2808. package/locales/ti.d.ts +1 -1
  2809. package/locales/ti.mjs +2 -2
  2810. package/locales/tk.d.ts +1 -1
  2811. package/locales/tk.mjs +2 -2
  2812. package/locales/to.d.ts +1 -1
  2813. package/locales/to.mjs +2 -2
  2814. package/locales/tr-CY.d.ts +1 -1
  2815. package/locales/tr-CY.mjs +2 -2
  2816. package/locales/tr.d.ts +1 -1
  2817. package/locales/tr.mjs +2 -2
  2818. package/locales/tt.d.ts +1 -1
  2819. package/locales/tt.mjs +2 -2
  2820. package/locales/twq.d.ts +1 -1
  2821. package/locales/twq.mjs +2 -2
  2822. package/locales/tzm.d.ts +1 -1
  2823. package/locales/tzm.mjs +2 -2
  2824. package/locales/ug.d.ts +1 -1
  2825. package/locales/ug.mjs +2 -2
  2826. package/locales/uk.d.ts +1 -1
  2827. package/locales/uk.mjs +2 -2
  2828. package/locales/und.d.ts +1 -1
  2829. package/locales/und.mjs +2 -2
  2830. package/locales/ur-IN.d.ts +1 -1
  2831. package/locales/ur-IN.mjs +2 -2
  2832. package/locales/ur.d.ts +1 -1
  2833. package/locales/ur.mjs +2 -2
  2834. package/locales/uz-Arab.d.ts +1 -1
  2835. package/locales/uz-Arab.mjs +2 -2
  2836. package/locales/uz-Cyrl.d.ts +1 -1
  2837. package/locales/uz-Cyrl.mjs +2 -2
  2838. package/locales/uz-Latn.d.ts +1 -1
  2839. package/locales/uz-Latn.mjs +2 -2
  2840. package/locales/uz.d.ts +1 -1
  2841. package/locales/uz.mjs +2 -2
  2842. package/locales/vai-Latn.d.ts +1 -1
  2843. package/locales/vai-Latn.mjs +2 -2
  2844. package/locales/vai-Vaii.d.ts +1 -1
  2845. package/locales/vai-Vaii.mjs +2 -2
  2846. package/locales/vai.d.ts +1 -1
  2847. package/locales/vai.mjs +2 -2
  2848. package/locales/vi.d.ts +1 -1
  2849. package/locales/vi.mjs +2 -2
  2850. package/locales/vun.d.ts +1 -1
  2851. package/locales/vun.mjs +2 -2
  2852. package/locales/wae.d.ts +1 -1
  2853. package/locales/wae.mjs +2 -2
  2854. package/locales/wo.d.ts +1 -1
  2855. package/locales/wo.mjs +2 -2
  2856. package/locales/xh.d.ts +1 -1
  2857. package/locales/xh.mjs +2 -2
  2858. package/locales/xog.d.ts +1 -1
  2859. package/locales/xog.mjs +2 -2
  2860. package/locales/yav.d.ts +1 -1
  2861. package/locales/yav.mjs +2 -2
  2862. package/locales/yi.d.ts +1 -1
  2863. package/locales/yi.mjs +2 -2
  2864. package/locales/yo-BJ.d.ts +1 -1
  2865. package/locales/yo-BJ.mjs +2 -2
  2866. package/locales/yo.d.ts +1 -1
  2867. package/locales/yo.mjs +2 -2
  2868. package/locales/yrl-CO.d.ts +1 -1
  2869. package/locales/yrl-CO.mjs +2 -2
  2870. package/locales/yrl-VE.d.ts +1 -1
  2871. package/locales/yrl-VE.mjs +2 -2
  2872. package/locales/yrl.d.ts +1 -1
  2873. package/locales/yrl.mjs +2 -2
  2874. package/locales/yue-Hans.d.ts +1 -1
  2875. package/locales/yue-Hans.mjs +2 -2
  2876. package/locales/yue-Hant.d.ts +1 -1
  2877. package/locales/yue-Hant.mjs +2 -2
  2878. package/locales/yue.d.ts +1 -1
  2879. package/locales/yue.mjs +2 -2
  2880. package/locales/zgh.d.ts +1 -1
  2881. package/locales/zgh.mjs +2 -2
  2882. package/locales/zh-Hans-HK.d.ts +1 -1
  2883. package/locales/zh-Hans-HK.mjs +2 -2
  2884. package/locales/zh-Hans-MO.d.ts +1 -1
  2885. package/locales/zh-Hans-MO.mjs +2 -2
  2886. package/locales/zh-Hans-SG.d.ts +1 -1
  2887. package/locales/zh-Hans-SG.mjs +2 -2
  2888. package/locales/zh-Hans.d.ts +1 -1
  2889. package/locales/zh-Hans.mjs +2 -2
  2890. package/locales/zh-Hant-HK.d.ts +1 -1
  2891. package/locales/zh-Hant-HK.mjs +2 -2
  2892. package/locales/zh-Hant-MO.d.ts +1 -1
  2893. package/locales/zh-Hant-MO.mjs +2 -2
  2894. package/locales/zh-Hant.d.ts +1 -1
  2895. package/locales/zh-Hant.mjs +2 -2
  2896. package/locales/zh.d.ts +1 -1
  2897. package/locales/zh.mjs +2 -2
  2898. package/locales/zu.d.ts +1 -1
  2899. package/locales/zu.mjs +2 -2
  2900. package/package.json +2 -12
  2901. package/testing/index.d.ts +1 -1
  2902. package/upgrade/index.d.ts +1 -1
  2903. package/esm2022/common.mjs +0 -5
  2904. package/esm2022/http/http.mjs +0 -5
  2905. package/esm2022/http/index.mjs +0 -13
  2906. package/esm2022/http/public_api.mjs +0 -25
  2907. package/esm2022/http/src/backend.mjs +0 -34
  2908. package/esm2022/http/src/client.mjs +0 -325
  2909. package/esm2022/http/src/context.mjs +0 -108
  2910. package/esm2022/http/src/errors.mjs +0 -9
  2911. package/esm2022/http/src/fetch.mjs +0 -241
  2912. package/esm2022/http/src/headers.mjs +0 -247
  2913. package/esm2022/http/src/interceptor.mjs +0 -136
  2914. package/esm2022/http/src/jsonp.mjs +0 -254
  2915. package/esm2022/http/src/module.mjs +0 -124
  2916. package/esm2022/http/src/params.mjs +0 -276
  2917. package/esm2022/http/src/private_export.mjs +0 -9
  2918. package/esm2022/http/src/provider.mjs +0 -238
  2919. package/esm2022/http/src/request.mjs +0 -286
  2920. package/esm2022/http/src/response.mjs +0 -237
  2921. package/esm2022/http/src/transfer_cache.mjs +0 -280
  2922. package/esm2022/http/src/xhr.mjs +0 -298
  2923. package/esm2022/http/src/xsrf.mjs +0 -108
  2924. package/esm2022/http/testing/index.mjs +0 -9
  2925. package/esm2022/http/testing/public_api.mjs +0 -12
  2926. package/esm2022/http/testing/src/api.mjs +0 -16
  2927. package/esm2022/http/testing/src/backend.mjs +0 -148
  2928. package/esm2022/http/testing/src/module.mjs +0 -33
  2929. package/esm2022/http/testing/src/provider.mjs +0 -19
  2930. package/esm2022/http/testing/src/request.mjs +0 -177
  2931. package/esm2022/http/testing/testing.mjs +0 -5
  2932. package/esm2022/index.mjs +0 -13
  2933. package/esm2022/public_api.mjs +0 -15
  2934. package/esm2022/src/common.mjs +0 -31
  2935. package/esm2022/src/common_module.mjs +0 -51
  2936. package/esm2022/src/cookie.mjs +0 -19
  2937. package/esm2022/src/directives/index.mjs +0 -34
  2938. package/esm2022/src/directives/ng_class.mjs +0 -163
  2939. package/esm2022/src/directives/ng_component_outlet.mjs +0 -190
  2940. package/esm2022/src/directives/ng_for_of.mjs +0 -291
  2941. package/esm2022/src/directives/ng_if.mjs +0 -244
  2942. package/esm2022/src/directives/ng_optimized_image/asserts.mjs +0 -20
  2943. package/esm2022/src/directives/ng_optimized_image/error_helper.mjs +0 -15
  2944. package/esm2022/src/directives/ng_optimized_image/image_loaders/cloudflare_loader.mjs +0 -35
  2945. package/esm2022/src/directives/ng_optimized_image/image_loaders/cloudinary_loader.mjs +0 -56
  2946. package/esm2022/src/directives/ng_optimized_image/image_loaders/constants.mjs +0 -12
  2947. package/esm2022/src/directives/ng_optimized_image/image_loaders/image_loader.mjs +0 -74
  2948. package/esm2022/src/directives/ng_optimized_image/image_loaders/imagekit_loader.mjs +0 -52
  2949. package/esm2022/src/directives/ng_optimized_image/image_loaders/imgix_loader.mjs +0 -47
  2950. package/esm2022/src/directives/ng_optimized_image/image_loaders/netlify_loader.mjs +0 -89
  2951. package/esm2022/src/directives/ng_optimized_image/index.mjs +0 -18
  2952. package/esm2022/src/directives/ng_optimized_image/lcp_image_observer.mjs +0 -128
  2953. package/esm2022/src/directives/ng_optimized_image/ng_optimized_image.mjs +0 -1035
  2954. package/esm2022/src/directives/ng_optimized_image/preconnect_link_checker.mjs +0 -136
  2955. package/esm2022/src/directives/ng_optimized_image/preload-link-creator.mjs +0 -75
  2956. package/esm2022/src/directives/ng_optimized_image/tokens.mjs +0 -27
  2957. package/esm2022/src/directives/ng_optimized_image/url.mjs +0 -42
  2958. package/esm2022/src/directives/ng_plural.mjs +0 -124
  2959. package/esm2022/src/directives/ng_style.mjs +0 -96
  2960. package/esm2022/src/directives/ng_switch.mjs +0 -261
  2961. package/esm2022/src/directives/ng_template_outlet.mjs +0 -116
  2962. package/esm2022/src/dom_adapter.mjs +0 -24
  2963. package/esm2022/src/dom_tokens.mjs +0 -17
  2964. package/esm2022/src/errors.mjs +0 -9
  2965. package/esm2022/src/i18n/currencies.mjs +0 -10
  2966. package/esm2022/src/i18n/format_date.mjs +0 -764
  2967. package/esm2022/src/i18n/format_number.mjs +0 -396
  2968. package/esm2022/src/i18n/locale_data.mjs +0 -21
  2969. package/esm2022/src/i18n/locale_data_api.mjs +0 -722
  2970. package/esm2022/src/i18n/localization.mjs +0 -81
  2971. package/esm2022/src/location/hash_location_strategy.mjs +0 -101
  2972. package/esm2022/src/location/index.mjs +0 -12
  2973. package/esm2022/src/location/location.mjs +0 -291
  2974. package/esm2022/src/location/location_strategy.mjs +0 -160
  2975. package/esm2022/src/location/platform_location.mjs +0 -131
  2976. package/esm2022/src/location/util.mjs +0 -64
  2977. package/esm2022/src/navigation/navigation_types.mjs +0 -9
  2978. package/esm2022/src/navigation/platform_navigation.mjs +0 -22
  2979. package/esm2022/src/pipes/async_pipe.mjs +0 -154
  2980. package/esm2022/src/pipes/case_conversion_pipes.mjs +0 -117
  2981. package/esm2022/src/pipes/date_pipe.mjs +0 -251
  2982. package/esm2022/src/pipes/date_pipe_config.mjs +0 -13
  2983. package/esm2022/src/pipes/i18n_plural_pipe.mjs +0 -58
  2984. package/esm2022/src/pipes/i18n_select_pipe.mjs +0 -58
  2985. package/esm2022/src/pipes/index.mjs +0 -41
  2986. package/esm2022/src/pipes/invalid_pipe_argument_error.mjs +0 -12
  2987. package/esm2022/src/pipes/json_pipe.mjs +0 -43
  2988. package/esm2022/src/pipes/keyvalue_pipe.mjs +0 -100
  2989. package/esm2022/src/pipes/number_pipe.mjs +0 -295
  2990. package/esm2022/src/pipes/slice_pipe.mjs +0 -69
  2991. package/esm2022/src/platform_id.mjs +0 -24
  2992. package/esm2022/src/private_export.mjs +0 -10
  2993. package/esm2022/src/version.mjs +0 -18
  2994. package/esm2022/src/viewport_scroller.mjs +0 -163
  2995. package/esm2022/src/xhr.mjs +0 -15
  2996. package/esm2022/testing/index.mjs +0 -13
  2997. package/esm2022/testing/public_api.mjs +0 -15
  2998. package/esm2022/testing/src/location_mock.mjs +0 -176
  2999. package/esm2022/testing/src/mock_location_strategy.mjs +0 -92
  3000. package/esm2022/testing/src/mock_platform_location.mjs +0 -299
  3001. package/esm2022/testing/src/navigation/fake_navigation.mjs +0 -667
  3002. package/esm2022/testing/src/navigation/navigation_types.mjs +0 -9
  3003. package/esm2022/testing/src/navigation/provide_fake_platform_navigation.mjs +0 -29
  3004. package/esm2022/testing/src/private_export.mjs +0 -9
  3005. package/esm2022/testing/src/provide_location_mocks.mjs +0 -23
  3006. package/esm2022/testing/src/testing.mjs +0 -18
  3007. package/esm2022/testing/testing.mjs +0 -5
  3008. package/esm2022/upgrade/index.mjs +0 -13
  3009. package/esm2022/upgrade/public_api.mjs +0 -15
  3010. package/esm2022/upgrade/src/index.mjs +0 -11
  3011. package/esm2022/upgrade/src/location_shim.mjs +0 -561
  3012. package/esm2022/upgrade/src/location_upgrade_module.mjs +0 -84
  3013. package/esm2022/upgrade/src/params.mjs +0 -221
  3014. package/esm2022/upgrade/src/utils.mjs +0 -33
  3015. package/esm2022/upgrade/upgrade.mjs +0 -5
@@ -1,1035 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { booleanAttribute, Directive, ElementRef, inject, Injector, Input, NgZone, numberAttribute, PLATFORM_ID, Renderer2, ɵformatRuntimeError as formatRuntimeError, ɵIMAGE_CONFIG as IMAGE_CONFIG, ɵIMAGE_CONFIG_DEFAULTS as IMAGE_CONFIG_DEFAULTS, ɵperformanceMarkFeature as performanceMarkFeature, ɵRuntimeError as RuntimeError, ɵunwrapSafeValue as unwrapSafeValue, ChangeDetectorRef, ApplicationRef, ɵwhenStable as whenStable, } from '@angular/core';
9
- import { isPlatformServer } from '../../platform_id';
10
- import { imgDirectiveDetails } from './error_helper';
11
- import { cloudinaryLoaderInfo } from './image_loaders/cloudinary_loader';
12
- import { IMAGE_LOADER, noopImageLoader, } from './image_loaders/image_loader';
13
- import { imageKitLoaderInfo } from './image_loaders/imagekit_loader';
14
- import { imgixLoaderInfo } from './image_loaders/imgix_loader';
15
- import { netlifyLoaderInfo } from './image_loaders/netlify_loader';
16
- import { LCPImageObserver } from './lcp_image_observer';
17
- import { PreconnectLinkChecker } from './preconnect_link_checker';
18
- import { PreloadLinkCreator } from './preload-link-creator';
19
- import * as i0 from "@angular/core";
20
- /**
21
- * When a Base64-encoded image is passed as an input to the `NgOptimizedImage` directive,
22
- * an error is thrown. The image content (as a string) might be very long, thus making
23
- * it hard to read an error message if the entire string is included. This const defines
24
- * the number of characters that should be included into the error message. The rest
25
- * of the content is truncated.
26
- */
27
- const BASE64_IMG_MAX_LENGTH_IN_ERROR = 50;
28
- /**
29
- * RegExpr to determine whether a src in a srcset is using width descriptors.
30
- * Should match something like: "100w, 200w".
31
- */
32
- const VALID_WIDTH_DESCRIPTOR_SRCSET = /^((\s*\d+w\s*(,|$)){1,})$/;
33
- /**
34
- * RegExpr to determine whether a src in a srcset is using density descriptors.
35
- * Should match something like: "1x, 2x, 50x". Also supports decimals like "1.5x, 1.50x".
36
- */
37
- const VALID_DENSITY_DESCRIPTOR_SRCSET = /^((\s*\d+(\.\d+)?x\s*(,|$)){1,})$/;
38
- /**
39
- * Srcset values with a density descriptor higher than this value will actively
40
- * throw an error. Such densities are not permitted as they cause image sizes
41
- * to be unreasonably large and slow down LCP.
42
- */
43
- export const ABSOLUTE_SRCSET_DENSITY_CAP = 3;
44
- /**
45
- * Used only in error message text to communicate best practices, as we will
46
- * only throw based on the slightly more conservative ABSOLUTE_SRCSET_DENSITY_CAP.
47
- */
48
- export const RECOMMENDED_SRCSET_DENSITY_CAP = 2;
49
- /**
50
- * Used in generating automatic density-based srcsets
51
- */
52
- const DENSITY_SRCSET_MULTIPLIERS = [1, 2];
53
- /**
54
- * Used to determine which breakpoints to use on full-width images
55
- */
56
- const VIEWPORT_BREAKPOINT_CUTOFF = 640;
57
- /**
58
- * Used to determine whether two aspect ratios are similar in value.
59
- */
60
- const ASPECT_RATIO_TOLERANCE = 0.1;
61
- /**
62
- * Used to determine whether the image has been requested at an overly
63
- * large size compared to the actual rendered image size (after taking
64
- * into account a typical device pixel ratio). In pixels.
65
- */
66
- const OVERSIZED_IMAGE_TOLERANCE = 1000;
67
- /**
68
- * Used to limit automatic srcset generation of very large sources for
69
- * fixed-size images. In pixels.
70
- */
71
- const FIXED_SRCSET_WIDTH_LIMIT = 1920;
72
- const FIXED_SRCSET_HEIGHT_LIMIT = 1080;
73
- /**
74
- * Default blur radius of the CSS filter used on placeholder images, in pixels
75
- */
76
- export const PLACEHOLDER_BLUR_AMOUNT = 15;
77
- /**
78
- * Placeholder dimension (height or width) limit in pixels. Angular produces a warning
79
- * when this limit is crossed.
80
- */
81
- const PLACEHOLDER_DIMENSION_LIMIT = 1000;
82
- /**
83
- * Used to warn or error when the user provides an overly large dataURL for the placeholder
84
- * attribute.
85
- * Character count of Base64 images is 1 character per byte, and base64 encoding is approximately
86
- * 33% larger than base images, so 4000 characters is around 3KB on disk and 10000 characters is
87
- * around 7.7KB. Experimentally, 4000 characters is about 20x20px in PNG or medium-quality JPEG
88
- * format, and 10,000 is around 50x50px, but there's quite a bit of variation depending on how the
89
- * image is saved.
90
- */
91
- export const DATA_URL_WARN_LIMIT = 4000;
92
- export const DATA_URL_ERROR_LIMIT = 10000;
93
- /** Info about built-in loaders we can test for. */
94
- export const BUILT_IN_LOADERS = [
95
- imgixLoaderInfo,
96
- imageKitLoaderInfo,
97
- cloudinaryLoaderInfo,
98
- netlifyLoaderInfo,
99
- ];
100
- /**
101
- * Threshold for the PRIORITY_TRUE_COUNT
102
- */
103
- const PRIORITY_COUNT_THRESHOLD = 10;
104
- /**
105
- * This count is used to log a devMode warning
106
- * when the count of directive instances with priority=true
107
- * exceeds the threshold PRIORITY_COUNT_THRESHOLD
108
- */
109
- let IMGS_WITH_PRIORITY_ATTR_COUNT = 0;
110
- /**
111
- * This function is for testing purpose.
112
- */
113
- export function resetImagePriorityCount() {
114
- IMGS_WITH_PRIORITY_ATTR_COUNT = 0;
115
- }
116
- /**
117
- * Directive that improves image loading performance by enforcing best practices.
118
- *
119
- * `NgOptimizedImage` ensures that the loading of the Largest Contentful Paint (LCP) image is
120
- * prioritized by:
121
- * - Automatically setting the `fetchpriority` attribute on the `<img>` tag
122
- * - Lazy loading non-priority images by default
123
- * - Automatically generating a preconnect link tag in the document head
124
- *
125
- * In addition, the directive:
126
- * - Generates appropriate asset URLs if a corresponding `ImageLoader` function is provided
127
- * - Automatically generates a srcset
128
- * - Requires that `width` and `height` are set
129
- * - Warns if `width` or `height` have been set incorrectly
130
- * - Warns if the image will be visually distorted when rendered
131
- *
132
- * @usageNotes
133
- * The `NgOptimizedImage` directive is marked as [standalone](guide/components/importing) and can
134
- * be imported directly.
135
- *
136
- * Follow the steps below to enable and use the directive:
137
- * 1. Import it into the necessary NgModule or a standalone Component.
138
- * 2. Optionally provide an `ImageLoader` if you use an image hosting service.
139
- * 3. Update the necessary `<img>` tags in templates and replace `src` attributes with `ngSrc`.
140
- * Using a `ngSrc` allows the directive to control when the `src` gets set, which triggers an image
141
- * download.
142
- *
143
- * Step 1: import the `NgOptimizedImage` directive.
144
- *
145
- * ```typescript
146
- * import { NgOptimizedImage } from '@angular/common';
147
- *
148
- * // Include it into the necessary NgModule
149
- * @NgModule({
150
- * imports: [NgOptimizedImage],
151
- * })
152
- * class AppModule {}
153
- *
154
- * // ... or a standalone Component
155
- * @Component({
156
- * standalone: true
157
- * imports: [NgOptimizedImage],
158
- * })
159
- * class MyStandaloneComponent {}
160
- * ```
161
- *
162
- * Step 2: configure a loader.
163
- *
164
- * To use the **default loader**: no additional code changes are necessary. The URL returned by the
165
- * generic loader will always match the value of "src". In other words, this loader applies no
166
- * transformations to the resource URL and the value of the `ngSrc` attribute will be used as is.
167
- *
168
- * To use an existing loader for a **third-party image service**: add the provider factory for your
169
- * chosen service to the `providers` array. In the example below, the Imgix loader is used:
170
- *
171
- * ```typescript
172
- * import {provideImgixLoader} from '@angular/common';
173
- *
174
- * // Call the function and add the result to the `providers` array:
175
- * providers: [
176
- * provideImgixLoader("https://my.base.url/"),
177
- * ],
178
- * ```
179
- *
180
- * The `NgOptimizedImage` directive provides the following functions:
181
- * - `provideCloudflareLoader`
182
- * - `provideCloudinaryLoader`
183
- * - `provideImageKitLoader`
184
- * - `provideImgixLoader`
185
- *
186
- * If you use a different image provider, you can create a custom loader function as described
187
- * below.
188
- *
189
- * To use a **custom loader**: provide your loader function as a value for the `IMAGE_LOADER` DI
190
- * token.
191
- *
192
- * ```typescript
193
- * import {IMAGE_LOADER, ImageLoaderConfig} from '@angular/common';
194
- *
195
- * // Configure the loader using the `IMAGE_LOADER` token.
196
- * providers: [
197
- * {
198
- * provide: IMAGE_LOADER,
199
- * useValue: (config: ImageLoaderConfig) => {
200
- * return `https://example.com/${config.src}-${config.width}.jpg}`;
201
- * }
202
- * },
203
- * ],
204
- * ```
205
- *
206
- * Step 3: update `<img>` tags in templates to use `ngSrc` instead of `src`.
207
- *
208
- * ```
209
- * <img ngSrc="logo.png" width="200" height="100">
210
- * ```
211
- *
212
- * @publicApi
213
- */
214
- export class NgOptimizedImage {
215
- constructor() {
216
- this.imageLoader = inject(IMAGE_LOADER);
217
- this.config = processConfig(inject(IMAGE_CONFIG));
218
- this.renderer = inject(Renderer2);
219
- this.imgElement = inject(ElementRef).nativeElement;
220
- this.injector = inject(Injector);
221
- this.isServer = isPlatformServer(inject(PLATFORM_ID));
222
- this.preloadLinkCreator = inject(PreloadLinkCreator);
223
- // a LCP image observer - should be injected only in the dev mode
224
- this.lcpObserver = ngDevMode ? this.injector.get(LCPImageObserver) : null;
225
- /**
226
- * Calculate the rewritten `src` once and store it.
227
- * This is needed to avoid repetitive calculations and make sure the directive cleanup in the
228
- * `ngOnDestroy` does not rely on the `IMAGE_LOADER` logic (which in turn can rely on some other
229
- * instance that might be already destroyed).
230
- */
231
- this._renderedSrc = null;
232
- /**
233
- * Indicates whether this image should have a high priority.
234
- */
235
- this.priority = false;
236
- /**
237
- * Disables automatic srcset generation for this image.
238
- */
239
- this.disableOptimizedSrcset = false;
240
- /**
241
- * Sets the image to "fill mode", which eliminates the height/width requirement and adds
242
- * styles such that the image fills its containing element.
243
- */
244
- this.fill = false;
245
- }
246
- /** @nodoc */
247
- ngOnInit() {
248
- performanceMarkFeature('NgOptimizedImage');
249
- if (ngDevMode) {
250
- const ngZone = this.injector.get(NgZone);
251
- assertNonEmptyInput(this, 'ngSrc', this.ngSrc);
252
- assertValidNgSrcset(this, this.ngSrcset);
253
- assertNoConflictingSrc(this);
254
- if (this.ngSrcset) {
255
- assertNoConflictingSrcset(this);
256
- }
257
- assertNotBase64Image(this);
258
- assertNotBlobUrl(this);
259
- if (this.fill) {
260
- assertEmptyWidthAndHeight(this);
261
- // This leaves the Angular zone to avoid triggering unnecessary change detection cycles when
262
- // `load` tasks are invoked on images.
263
- ngZone.runOutsideAngular(() => assertNonZeroRenderedHeight(this, this.imgElement, this.renderer));
264
- }
265
- else {
266
- assertNonEmptyWidthAndHeight(this);
267
- if (this.height !== undefined) {
268
- assertGreaterThanZero(this, this.height, 'height');
269
- }
270
- if (this.width !== undefined) {
271
- assertGreaterThanZero(this, this.width, 'width');
272
- }
273
- // Only check for distorted images when not in fill mode, where
274
- // images may be intentionally stretched, cropped or letterboxed.
275
- ngZone.runOutsideAngular(() => assertNoImageDistortion(this, this.imgElement, this.renderer));
276
- }
277
- assertValidLoadingInput(this);
278
- if (!this.ngSrcset) {
279
- assertNoComplexSizes(this);
280
- }
281
- assertValidPlaceholder(this, this.imageLoader);
282
- assertNotMissingBuiltInLoader(this.ngSrc, this.imageLoader);
283
- assertNoNgSrcsetWithoutLoader(this, this.imageLoader);
284
- assertNoLoaderParamsWithoutLoader(this, this.imageLoader);
285
- if (this.lcpObserver !== null) {
286
- const ngZone = this.injector.get(NgZone);
287
- ngZone.runOutsideAngular(() => {
288
- this.lcpObserver.registerImage(this.getRewrittenSrc(), this.ngSrc, this.priority);
289
- });
290
- }
291
- if (this.priority) {
292
- const checker = this.injector.get(PreconnectLinkChecker);
293
- checker.assertPreconnect(this.getRewrittenSrc(), this.ngSrc);
294
- if (!this.isServer) {
295
- const applicationRef = this.injector.get(ApplicationRef);
296
- assetPriorityCountBelowThreshold(applicationRef);
297
- }
298
- }
299
- }
300
- if (this.placeholder) {
301
- this.removePlaceholderOnLoad(this.imgElement);
302
- }
303
- this.setHostAttributes();
304
- }
305
- setHostAttributes() {
306
- // Must set width/height explicitly in case they are bound (in which case they will
307
- // only be reflected and not found by the browser)
308
- if (this.fill) {
309
- this.sizes ||= '100vw';
310
- }
311
- else {
312
- this.setHostAttribute('width', this.width.toString());
313
- this.setHostAttribute('height', this.height.toString());
314
- }
315
- this.setHostAttribute('loading', this.getLoadingBehavior());
316
- this.setHostAttribute('fetchpriority', this.getFetchPriority());
317
- // The `data-ng-img` attribute flags an image as using the directive, to allow
318
- // for analysis of the directive's performance.
319
- this.setHostAttribute('ng-img', 'true');
320
- // The `src` and `srcset` attributes should be set last since other attributes
321
- // could affect the image's loading behavior.
322
- const rewrittenSrcset = this.updateSrcAndSrcset();
323
- if (this.sizes) {
324
- this.setHostAttribute('sizes', this.sizes);
325
- }
326
- if (this.isServer && this.priority) {
327
- this.preloadLinkCreator.createPreloadLinkTag(this.renderer, this.getRewrittenSrc(), rewrittenSrcset, this.sizes);
328
- }
329
- }
330
- /** @nodoc */
331
- ngOnChanges(changes) {
332
- if (ngDevMode) {
333
- assertNoPostInitInputChange(this, changes, [
334
- 'ngSrcset',
335
- 'width',
336
- 'height',
337
- 'priority',
338
- 'fill',
339
- 'loading',
340
- 'sizes',
341
- 'loaderParams',
342
- 'disableOptimizedSrcset',
343
- ]);
344
- }
345
- if (changes['ngSrc'] && !changes['ngSrc'].isFirstChange()) {
346
- const oldSrc = this._renderedSrc;
347
- this.updateSrcAndSrcset(true);
348
- const newSrc = this._renderedSrc;
349
- if (this.lcpObserver !== null && oldSrc && newSrc && oldSrc !== newSrc) {
350
- const ngZone = this.injector.get(NgZone);
351
- ngZone.runOutsideAngular(() => {
352
- this.lcpObserver?.updateImage(oldSrc, newSrc);
353
- });
354
- }
355
- }
356
- if (ngDevMode && changes['placeholder']?.currentValue && !this.isServer) {
357
- assertPlaceholderDimensions(this, this.imgElement);
358
- }
359
- }
360
- callImageLoader(configWithoutCustomParams) {
361
- let augmentedConfig = configWithoutCustomParams;
362
- if (this.loaderParams) {
363
- augmentedConfig.loaderParams = this.loaderParams;
364
- }
365
- return this.imageLoader(augmentedConfig);
366
- }
367
- getLoadingBehavior() {
368
- if (!this.priority && this.loading !== undefined) {
369
- return this.loading;
370
- }
371
- return this.priority ? 'eager' : 'lazy';
372
- }
373
- getFetchPriority() {
374
- return this.priority ? 'high' : 'auto';
375
- }
376
- getRewrittenSrc() {
377
- // ImageLoaderConfig supports setting a width property. However, we're not setting width here
378
- // because if the developer uses rendered width instead of intrinsic width in the HTML width
379
- // attribute, the image requested may be too small for 2x+ screens.
380
- if (!this._renderedSrc) {
381
- const imgConfig = { src: this.ngSrc };
382
- // Cache calculated image src to reuse it later in the code.
383
- this._renderedSrc = this.callImageLoader(imgConfig);
384
- }
385
- return this._renderedSrc;
386
- }
387
- getRewrittenSrcset() {
388
- const widthSrcSet = VALID_WIDTH_DESCRIPTOR_SRCSET.test(this.ngSrcset);
389
- const finalSrcs = this.ngSrcset
390
- .split(',')
391
- .filter((src) => src !== '')
392
- .map((srcStr) => {
393
- srcStr = srcStr.trim();
394
- const width = widthSrcSet ? parseFloat(srcStr) : parseFloat(srcStr) * this.width;
395
- return `${this.callImageLoader({ src: this.ngSrc, width })} ${srcStr}`;
396
- });
397
- return finalSrcs.join(', ');
398
- }
399
- getAutomaticSrcset() {
400
- if (this.sizes) {
401
- return this.getResponsiveSrcset();
402
- }
403
- else {
404
- return this.getFixedSrcset();
405
- }
406
- }
407
- getResponsiveSrcset() {
408
- const { breakpoints } = this.config;
409
- let filteredBreakpoints = breakpoints;
410
- if (this.sizes?.trim() === '100vw') {
411
- // Since this is a full-screen-width image, our srcset only needs to include
412
- // breakpoints with full viewport widths.
413
- filteredBreakpoints = breakpoints.filter((bp) => bp >= VIEWPORT_BREAKPOINT_CUTOFF);
414
- }
415
- const finalSrcs = filteredBreakpoints.map((bp) => `${this.callImageLoader({ src: this.ngSrc, width: bp })} ${bp}w`);
416
- return finalSrcs.join(', ');
417
- }
418
- updateSrcAndSrcset(forceSrcRecalc = false) {
419
- if (forceSrcRecalc) {
420
- // Reset cached value, so that the followup `getRewrittenSrc()` call
421
- // will recalculate it and update the cache.
422
- this._renderedSrc = null;
423
- }
424
- const rewrittenSrc = this.getRewrittenSrc();
425
- this.setHostAttribute('src', rewrittenSrc);
426
- let rewrittenSrcset = undefined;
427
- if (this.ngSrcset) {
428
- rewrittenSrcset = this.getRewrittenSrcset();
429
- }
430
- else if (this.shouldGenerateAutomaticSrcset()) {
431
- rewrittenSrcset = this.getAutomaticSrcset();
432
- }
433
- if (rewrittenSrcset) {
434
- this.setHostAttribute('srcset', rewrittenSrcset);
435
- }
436
- return rewrittenSrcset;
437
- }
438
- getFixedSrcset() {
439
- const finalSrcs = DENSITY_SRCSET_MULTIPLIERS.map((multiplier) => `${this.callImageLoader({
440
- src: this.ngSrc,
441
- width: this.width * multiplier,
442
- })} ${multiplier}x`);
443
- return finalSrcs.join(', ');
444
- }
445
- shouldGenerateAutomaticSrcset() {
446
- let oversizedImage = false;
447
- if (!this.sizes) {
448
- oversizedImage =
449
- this.width > FIXED_SRCSET_WIDTH_LIMIT || this.height > FIXED_SRCSET_HEIGHT_LIMIT;
450
- }
451
- return (!this.disableOptimizedSrcset &&
452
- !this.srcset &&
453
- this.imageLoader !== noopImageLoader &&
454
- !oversizedImage);
455
- }
456
- /**
457
- * Returns an image url formatted for use with the CSS background-image property. Expects one of:
458
- * * A base64 encoded image, which is wrapped and passed through.
459
- * * A boolean. If true, calls the image loader to generate a small placeholder url.
460
- */
461
- generatePlaceholder(placeholderInput) {
462
- const { placeholderResolution } = this.config;
463
- if (placeholderInput === true) {
464
- return `url(${this.callImageLoader({
465
- src: this.ngSrc,
466
- width: placeholderResolution,
467
- isPlaceholder: true,
468
- })})`;
469
- }
470
- else if (typeof placeholderInput === 'string') {
471
- return `url(${placeholderInput})`;
472
- }
473
- return null;
474
- }
475
- /**
476
- * Determines if blur should be applied, based on an optional boolean
477
- * property `blur` within the optional configuration object `placeholderConfig`.
478
- */
479
- shouldBlurPlaceholder(placeholderConfig) {
480
- if (!placeholderConfig || !placeholderConfig.hasOwnProperty('blur')) {
481
- return true;
482
- }
483
- return Boolean(placeholderConfig.blur);
484
- }
485
- removePlaceholderOnLoad(img) {
486
- const callback = () => {
487
- const changeDetectorRef = this.injector.get(ChangeDetectorRef);
488
- removeLoadListenerFn();
489
- removeErrorListenerFn();
490
- this.placeholder = false;
491
- changeDetectorRef.markForCheck();
492
- };
493
- const removeLoadListenerFn = this.renderer.listen(img, 'load', callback);
494
- const removeErrorListenerFn = this.renderer.listen(img, 'error', callback);
495
- }
496
- /** @nodoc */
497
- ngOnDestroy() {
498
- if (ngDevMode) {
499
- if (!this.priority && this._renderedSrc !== null && this.lcpObserver !== null) {
500
- this.lcpObserver.unregisterImage(this._renderedSrc);
501
- }
502
- }
503
- }
504
- setHostAttribute(name, value) {
505
- this.renderer.setAttribute(this.imgElement, name, value);
506
- }
507
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.1", ngImport: i0, type: NgOptimizedImage, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
508
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-next.1", type: NgOptimizedImage, isStandalone: true, selector: "img[ngSrc]", inputs: { ngSrc: ["ngSrc", "ngSrc", unwrapSafeUrl], ngSrcset: "ngSrcset", sizes: "sizes", width: ["width", "width", numberAttribute], height: ["height", "height", numberAttribute], loading: "loading", priority: ["priority", "priority", booleanAttribute], loaderParams: "loaderParams", disableOptimizedSrcset: ["disableOptimizedSrcset", "disableOptimizedSrcset", booleanAttribute], fill: ["fill", "fill", booleanAttribute], placeholder: ["placeholder", "placeholder", booleanOrUrlAttribute], placeholderConfig: "placeholderConfig", src: "src", srcset: "srcset" }, host: { properties: { "style.position": "fill ? \"absolute\" : null", "style.width": "fill ? \"100%\" : null", "style.height": "fill ? \"100%\" : null", "style.inset": "fill ? \"0\" : null", "style.background-size": "placeholder ? \"cover\" : null", "style.background-position": "placeholder ? \"50% 50%\" : null", "style.background-repeat": "placeholder ? \"no-repeat\" : null", "style.background-image": "placeholder ? generatePlaceholder(placeholder) : null", "style.filter": "placeholder && shouldBlurPlaceholder(placeholderConfig) ? \"blur(15px)\" : null" } }, usesOnChanges: true, ngImport: i0 }); }
509
- }
510
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.1", ngImport: i0, type: NgOptimizedImage, decorators: [{
511
- type: Directive,
512
- args: [{
513
- standalone: true,
514
- selector: 'img[ngSrc]',
515
- host: {
516
- '[style.position]': 'fill ? "absolute" : null',
517
- '[style.width]': 'fill ? "100%" : null',
518
- '[style.height]': 'fill ? "100%" : null',
519
- '[style.inset]': 'fill ? "0" : null',
520
- '[style.background-size]': 'placeholder ? "cover" : null',
521
- '[style.background-position]': 'placeholder ? "50% 50%" : null',
522
- '[style.background-repeat]': 'placeholder ? "no-repeat" : null',
523
- '[style.background-image]': 'placeholder ? generatePlaceholder(placeholder) : null',
524
- '[style.filter]': `placeholder && shouldBlurPlaceholder(placeholderConfig) ? "blur(${PLACEHOLDER_BLUR_AMOUNT}px)" : null`,
525
- },
526
- }]
527
- }], propDecorators: { ngSrc: [{
528
- type: Input,
529
- args: [{ required: true, transform: unwrapSafeUrl }]
530
- }], ngSrcset: [{
531
- type: Input
532
- }], sizes: [{
533
- type: Input
534
- }], width: [{
535
- type: Input,
536
- args: [{ transform: numberAttribute }]
537
- }], height: [{
538
- type: Input,
539
- args: [{ transform: numberAttribute }]
540
- }], loading: [{
541
- type: Input
542
- }], priority: [{
543
- type: Input,
544
- args: [{ transform: booleanAttribute }]
545
- }], loaderParams: [{
546
- type: Input
547
- }], disableOptimizedSrcset: [{
548
- type: Input,
549
- args: [{ transform: booleanAttribute }]
550
- }], fill: [{
551
- type: Input,
552
- args: [{ transform: booleanAttribute }]
553
- }], placeholder: [{
554
- type: Input,
555
- args: [{ transform: booleanOrUrlAttribute }]
556
- }], placeholderConfig: [{
557
- type: Input
558
- }], src: [{
559
- type: Input
560
- }], srcset: [{
561
- type: Input
562
- }] } });
563
- /***** Helpers *****/
564
- /**
565
- * Sorts provided config breakpoints and uses defaults.
566
- */
567
- function processConfig(config) {
568
- let sortedBreakpoints = {};
569
- if (config.breakpoints) {
570
- sortedBreakpoints.breakpoints = config.breakpoints.sort((a, b) => a - b);
571
- }
572
- return Object.assign({}, IMAGE_CONFIG_DEFAULTS, config, sortedBreakpoints);
573
- }
574
- /***** Assert functions *****/
575
- /**
576
- * Verifies that there is no `src` set on a host element.
577
- */
578
- function assertNoConflictingSrc(dir) {
579
- if (dir.src) {
580
- throw new RuntimeError(2950 /* RuntimeErrorCode.UNEXPECTED_SRC_ATTR */, `${imgDirectiveDetails(dir.ngSrc)} both \`src\` and \`ngSrc\` have been set. ` +
581
- `Supplying both of these attributes breaks lazy loading. ` +
582
- `The NgOptimizedImage directive sets \`src\` itself based on the value of \`ngSrc\`. ` +
583
- `To fix this, please remove the \`src\` attribute.`);
584
- }
585
- }
586
- /**
587
- * Verifies that there is no `srcset` set on a host element.
588
- */
589
- function assertNoConflictingSrcset(dir) {
590
- if (dir.srcset) {
591
- throw new RuntimeError(2951 /* RuntimeErrorCode.UNEXPECTED_SRCSET_ATTR */, `${imgDirectiveDetails(dir.ngSrc)} both \`srcset\` and \`ngSrcset\` have been set. ` +
592
- `Supplying both of these attributes breaks lazy loading. ` +
593
- `The NgOptimizedImage directive sets \`srcset\` itself based on the value of ` +
594
- `\`ngSrcset\`. To fix this, please remove the \`srcset\` attribute.`);
595
- }
596
- }
597
- /**
598
- * Verifies that the `ngSrc` is not a Base64-encoded image.
599
- */
600
- function assertNotBase64Image(dir) {
601
- let ngSrc = dir.ngSrc.trim();
602
- if (ngSrc.startsWith('data:')) {
603
- if (ngSrc.length > BASE64_IMG_MAX_LENGTH_IN_ERROR) {
604
- ngSrc = ngSrc.substring(0, BASE64_IMG_MAX_LENGTH_IN_ERROR) + '...';
605
- }
606
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \`ngSrc\` is a Base64-encoded string ` +
607
- `(${ngSrc}). NgOptimizedImage does not support Base64-encoded strings. ` +
608
- `To fix this, disable the NgOptimizedImage directive for this element ` +
609
- `by removing \`ngSrc\` and using a standard \`src\` attribute instead.`);
610
- }
611
- }
612
- /**
613
- * Verifies that the 'sizes' only includes responsive values.
614
- */
615
- function assertNoComplexSizes(dir) {
616
- let sizes = dir.sizes;
617
- if (sizes?.match(/((\)|,)\s|^)\d+px/)) {
618
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \`sizes\` was set to a string including ` +
619
- `pixel values. For automatic \`srcset\` generation, \`sizes\` must only include responsive ` +
620
- `values, such as \`sizes="50vw"\` or \`sizes="(min-width: 768px) 50vw, 100vw"\`. ` +
621
- `To fix this, modify the \`sizes\` attribute, or provide your own \`ngSrcset\` value directly.`);
622
- }
623
- }
624
- function assertValidPlaceholder(dir, imageLoader) {
625
- assertNoPlaceholderConfigWithoutPlaceholder(dir);
626
- assertNoRelativePlaceholderWithoutLoader(dir, imageLoader);
627
- assertNoOversizedDataUrl(dir);
628
- }
629
- /**
630
- * Verifies that placeholderConfig isn't being used without placeholder
631
- */
632
- function assertNoPlaceholderConfigWithoutPlaceholder(dir) {
633
- if (dir.placeholderConfig && !dir.placeholder) {
634
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc, false)} \`placeholderConfig\` options were provided for an ` +
635
- `image that does not use the \`placeholder\` attribute, and will have no effect.`);
636
- }
637
- }
638
- /**
639
- * Warns if a relative URL placeholder is specified, but no loader is present to provide the small
640
- * image.
641
- */
642
- function assertNoRelativePlaceholderWithoutLoader(dir, imageLoader) {
643
- if (dir.placeholder === true && imageLoader === noopImageLoader) {
644
- throw new RuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to true but ` +
645
- `no image loader is configured (i.e. the default one is being used), ` +
646
- `which would result in the same image being used for the primary image and its placeholder. ` +
647
- `To fix this, provide a loader or remove the \`placeholder\` attribute from the image.`);
648
- }
649
- }
650
- /**
651
- * Warns or throws an error if an oversized dataURL placeholder is provided.
652
- */
653
- function assertNoOversizedDataUrl(dir) {
654
- if (dir.placeholder &&
655
- typeof dir.placeholder === 'string' &&
656
- dir.placeholder.startsWith('data:')) {
657
- if (dir.placeholder.length > DATA_URL_ERROR_LIMIT) {
658
- throw new RuntimeError(2965 /* RuntimeErrorCode.OVERSIZED_PLACEHOLDER */, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to a data URL which is longer ` +
659
- `than ${DATA_URL_ERROR_LIMIT} characters. This is strongly discouraged, as large inline placeholders ` +
660
- `directly increase the bundle size of Angular and hurt page load performance. To fix this, generate ` +
661
- `a smaller data URL placeholder.`);
662
- }
663
- if (dir.placeholder.length > DATA_URL_WARN_LIMIT) {
664
- console.warn(formatRuntimeError(2965 /* RuntimeErrorCode.OVERSIZED_PLACEHOLDER */, `${imgDirectiveDetails(dir.ngSrc)} the \`placeholder\` attribute is set to a data URL which is longer ` +
665
- `than ${DATA_URL_WARN_LIMIT} characters. This is discouraged, as large inline placeholders ` +
666
- `directly increase the bundle size of Angular and hurt page load performance. For better loading performance, ` +
667
- `generate a smaller data URL placeholder.`));
668
- }
669
- }
670
- }
671
- /**
672
- * Verifies that the `ngSrc` is not a Blob URL.
673
- */
674
- function assertNotBlobUrl(dir) {
675
- const ngSrc = dir.ngSrc.trim();
676
- if (ngSrc.startsWith('blob:')) {
677
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \`ngSrc\` was set to a blob URL (${ngSrc}). ` +
678
- `Blob URLs are not supported by the NgOptimizedImage directive. ` +
679
- `To fix this, disable the NgOptimizedImage directive for this element ` +
680
- `by removing \`ngSrc\` and using a regular \`src\` attribute instead.`);
681
- }
682
- }
683
- /**
684
- * Verifies that the input is set to a non-empty string.
685
- */
686
- function assertNonEmptyInput(dir, name, value) {
687
- const isString = typeof value === 'string';
688
- const isEmptyString = isString && value.trim() === '';
689
- if (!isString || isEmptyString) {
690
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \`${name}\` has an invalid value ` +
691
- `(\`${value}\`). To fix this, change the value to a non-empty string.`);
692
- }
693
- }
694
- /**
695
- * Verifies that the `ngSrcset` is in a valid format, e.g. "100w, 200w" or "1x, 2x".
696
- */
697
- export function assertValidNgSrcset(dir, value) {
698
- if (value == null)
699
- return;
700
- assertNonEmptyInput(dir, 'ngSrcset', value);
701
- const stringVal = value;
702
- const isValidWidthDescriptor = VALID_WIDTH_DESCRIPTOR_SRCSET.test(stringVal);
703
- const isValidDensityDescriptor = VALID_DENSITY_DESCRIPTOR_SRCSET.test(stringVal);
704
- if (isValidDensityDescriptor) {
705
- assertUnderDensityCap(dir, stringVal);
706
- }
707
- const isValidSrcset = isValidWidthDescriptor || isValidDensityDescriptor;
708
- if (!isValidSrcset) {
709
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \`ngSrcset\` has an invalid value (\`${value}\`). ` +
710
- `To fix this, supply \`ngSrcset\` using a comma-separated list of one or more width ` +
711
- `descriptors (e.g. "100w, 200w") or density descriptors (e.g. "1x, 2x").`);
712
- }
713
- }
714
- function assertUnderDensityCap(dir, value) {
715
- const underDensityCap = value
716
- .split(',')
717
- .every((num) => num === '' || parseFloat(num) <= ABSOLUTE_SRCSET_DENSITY_CAP);
718
- if (!underDensityCap) {
719
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` contains an unsupported image density:` +
720
- `\`${value}\`. NgOptimizedImage generally recommends a max image density of ` +
721
- `${RECOMMENDED_SRCSET_DENSITY_CAP}x but supports image densities up to ` +
722
- `${ABSOLUTE_SRCSET_DENSITY_CAP}x. The human eye cannot distinguish between image densities ` +
723
- `greater than ${RECOMMENDED_SRCSET_DENSITY_CAP}x - which makes them unnecessary for ` +
724
- `most use cases. Images that will be pinch-zoomed are typically the primary use case for ` +
725
- `${ABSOLUTE_SRCSET_DENSITY_CAP}x images. Please remove the high density descriptor and try again.`);
726
- }
727
- }
728
- /**
729
- * Creates a `RuntimeError` instance to represent a situation when an input is set after
730
- * the directive has initialized.
731
- */
732
- function postInitInputChangeError(dir, inputName) {
733
- let reason;
734
- if (inputName === 'width' || inputName === 'height') {
735
- reason =
736
- `Changing \`${inputName}\` may result in different attribute value ` +
737
- `applied to the underlying image element and cause layout shifts on a page.`;
738
- }
739
- else {
740
- reason =
741
- `Changing the \`${inputName}\` would have no effect on the underlying ` +
742
- `image element, because the resource loading has already occurred.`;
743
- }
744
- return new RuntimeError(2953 /* RuntimeErrorCode.UNEXPECTED_INPUT_CHANGE */, `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` was updated after initialization. ` +
745
- `The NgOptimizedImage directive will not react to this input change. ${reason} ` +
746
- `To fix this, either switch \`${inputName}\` to a static value ` +
747
- `or wrap the image element in an *ngIf that is gated on the necessary value.`);
748
- }
749
- /**
750
- * Verify that none of the listed inputs has changed.
751
- */
752
- function assertNoPostInitInputChange(dir, changes, inputs) {
753
- inputs.forEach((input) => {
754
- const isUpdated = changes.hasOwnProperty(input);
755
- if (isUpdated && !changes[input].isFirstChange()) {
756
- if (input === 'ngSrc') {
757
- // When the `ngSrc` input changes, we detect that only in the
758
- // `ngOnChanges` hook, thus the `ngSrc` is already set. We use
759
- // `ngSrc` in the error message, so we use a previous value, but
760
- // not the updated one in it.
761
- dir = { ngSrc: changes[input].previousValue };
762
- }
763
- throw postInitInputChangeError(dir, input);
764
- }
765
- });
766
- }
767
- /**
768
- * Verifies that a specified input is a number greater than 0.
769
- */
770
- function assertGreaterThanZero(dir, inputValue, inputName) {
771
- const validNumber = typeof inputValue === 'number' && inputValue > 0;
772
- const validString = typeof inputValue === 'string' && /^\d+$/.test(inputValue.trim()) && parseInt(inputValue) > 0;
773
- if (!validNumber && !validString) {
774
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} \`${inputName}\` has an invalid value. ` +
775
- `To fix this, provide \`${inputName}\` as a number greater than 0.`);
776
- }
777
- }
778
- /**
779
- * Verifies that the rendered image is not visually distorted. Effectively this is checking:
780
- * - Whether the "width" and "height" attributes reflect the actual dimensions of the image.
781
- * - Whether image styling is "correct" (see below for a longer explanation).
782
- */
783
- function assertNoImageDistortion(dir, img, renderer) {
784
- const removeLoadListenerFn = renderer.listen(img, 'load', () => {
785
- removeLoadListenerFn();
786
- removeErrorListenerFn();
787
- const computedStyle = window.getComputedStyle(img);
788
- let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));
789
- let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));
790
- const boxSizing = computedStyle.getPropertyValue('box-sizing');
791
- if (boxSizing === 'border-box') {
792
- const paddingTop = computedStyle.getPropertyValue('padding-top');
793
- const paddingRight = computedStyle.getPropertyValue('padding-right');
794
- const paddingBottom = computedStyle.getPropertyValue('padding-bottom');
795
- const paddingLeft = computedStyle.getPropertyValue('padding-left');
796
- renderedWidth -= parseFloat(paddingRight) + parseFloat(paddingLeft);
797
- renderedHeight -= parseFloat(paddingTop) + parseFloat(paddingBottom);
798
- }
799
- const renderedAspectRatio = renderedWidth / renderedHeight;
800
- const nonZeroRenderedDimensions = renderedWidth !== 0 && renderedHeight !== 0;
801
- const intrinsicWidth = img.naturalWidth;
802
- const intrinsicHeight = img.naturalHeight;
803
- const intrinsicAspectRatio = intrinsicWidth / intrinsicHeight;
804
- const suppliedWidth = dir.width;
805
- const suppliedHeight = dir.height;
806
- const suppliedAspectRatio = suppliedWidth / suppliedHeight;
807
- // Tolerance is used to account for the impact of subpixel rendering.
808
- // Due to subpixel rendering, the rendered, intrinsic, and supplied
809
- // aspect ratios of a correctly configured image may not exactly match.
810
- // For example, a `width=4030 height=3020` image might have a rendered
811
- // size of "1062w, 796.48h". (An aspect ratio of 1.334... vs. 1.333...)
812
- const inaccurateDimensions = Math.abs(suppliedAspectRatio - intrinsicAspectRatio) > ASPECT_RATIO_TOLERANCE;
813
- const stylingDistortion = nonZeroRenderedDimensions &&
814
- Math.abs(intrinsicAspectRatio - renderedAspectRatio) > ASPECT_RATIO_TOLERANCE;
815
- if (inaccurateDimensions) {
816
- console.warn(formatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the image does not match ` +
817
- `the aspect ratio indicated by the width and height attributes. ` +
818
- `\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` +
819
- `(aspect-ratio: ${round(intrinsicAspectRatio)}). \nSupplied width and height attributes: ` +
820
- `${suppliedWidth}w x ${suppliedHeight}h (aspect-ratio: ${round(suppliedAspectRatio)}). ` +
821
- `\nTo fix this, update the width and height attributes.`));
822
- }
823
- else if (stylingDistortion) {
824
- console.warn(formatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the aspect ratio of the rendered image ` +
825
- `does not match the image's intrinsic aspect ratio. ` +
826
- `\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h ` +
827
- `(aspect-ratio: ${round(intrinsicAspectRatio)}). \nRendered image size: ` +
828
- `${renderedWidth}w x ${renderedHeight}h (aspect-ratio: ` +
829
- `${round(renderedAspectRatio)}). \nThis issue can occur if "width" and "height" ` +
830
- `attributes are added to an image without updating the corresponding ` +
831
- `image styling. To fix this, adjust image styling. In most cases, ` +
832
- `adding "height: auto" or "width: auto" to the image styling will fix ` +
833
- `this issue.`));
834
- }
835
- else if (!dir.ngSrcset && nonZeroRenderedDimensions) {
836
- // If `ngSrcset` hasn't been set, sanity check the intrinsic size.
837
- const recommendedWidth = RECOMMENDED_SRCSET_DENSITY_CAP * renderedWidth;
838
- const recommendedHeight = RECOMMENDED_SRCSET_DENSITY_CAP * renderedHeight;
839
- const oversizedWidth = intrinsicWidth - recommendedWidth >= OVERSIZED_IMAGE_TOLERANCE;
840
- const oversizedHeight = intrinsicHeight - recommendedHeight >= OVERSIZED_IMAGE_TOLERANCE;
841
- if (oversizedWidth || oversizedHeight) {
842
- console.warn(formatRuntimeError(2960 /* RuntimeErrorCode.OVERSIZED_IMAGE */, `${imgDirectiveDetails(dir.ngSrc)} the intrinsic image is significantly ` +
843
- `larger than necessary. ` +
844
- `\nRendered image size: ${renderedWidth}w x ${renderedHeight}h. ` +
845
- `\nIntrinsic image size: ${intrinsicWidth}w x ${intrinsicHeight}h. ` +
846
- `\nRecommended intrinsic image size: ${recommendedWidth}w x ${recommendedHeight}h. ` +
847
- `\nNote: Recommended intrinsic image size is calculated assuming a maximum DPR of ` +
848
- `${RECOMMENDED_SRCSET_DENSITY_CAP}. To improve loading time, resize the image ` +
849
- `or consider using the "ngSrcset" and "sizes" attributes.`));
850
- }
851
- }
852
- });
853
- // We only listen to the `error` event to remove the `load` event listener because it will not be
854
- // fired if the image fails to load. This is done to prevent memory leaks in development mode
855
- // because image elements aren't garbage-collected properly. It happens because zone.js stores the
856
- // event listener directly on the element and closures capture `dir`.
857
- const removeErrorListenerFn = renderer.listen(img, 'error', () => {
858
- removeLoadListenerFn();
859
- removeErrorListenerFn();
860
- });
861
- }
862
- /**
863
- * Verifies that a specified input is set.
864
- */
865
- function assertNonEmptyWidthAndHeight(dir) {
866
- let missingAttributes = [];
867
- if (dir.width === undefined)
868
- missingAttributes.push('width');
869
- if (dir.height === undefined)
870
- missingAttributes.push('height');
871
- if (missingAttributes.length > 0) {
872
- throw new RuntimeError(2954 /* RuntimeErrorCode.REQUIRED_INPUT_MISSING */, `${imgDirectiveDetails(dir.ngSrc)} these required attributes ` +
873
- `are missing: ${missingAttributes.map((attr) => `"${attr}"`).join(', ')}. ` +
874
- `Including "width" and "height" attributes will prevent image-related layout shifts. ` +
875
- `To fix this, include "width" and "height" attributes on the image tag or turn on ` +
876
- `"fill" mode with the \`fill\` attribute.`);
877
- }
878
- }
879
- /**
880
- * Verifies that width and height are not set. Used in fill mode, where those attributes don't make
881
- * sense.
882
- */
883
- function assertEmptyWidthAndHeight(dir) {
884
- if (dir.width || dir.height) {
885
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the attributes \`height\` and/or \`width\` are present ` +
886
- `along with the \`fill\` attribute. Because \`fill\` mode causes an image to fill its containing ` +
887
- `element, the size attributes have no effect and should be removed.`);
888
- }
889
- }
890
- /**
891
- * Verifies that the rendered image has a nonzero height. If the image is in fill mode, provides
892
- * guidance that this can be caused by the containing element's CSS position property.
893
- */
894
- function assertNonZeroRenderedHeight(dir, img, renderer) {
895
- const removeLoadListenerFn = renderer.listen(img, 'load', () => {
896
- removeLoadListenerFn();
897
- removeErrorListenerFn();
898
- const renderedHeight = img.clientHeight;
899
- if (dir.fill && renderedHeight === 0) {
900
- console.warn(formatRuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the height of the fill-mode image is zero. ` +
901
- `This is likely because the containing element does not have the CSS 'position' ` +
902
- `property set to one of the following: "relative", "fixed", or "absolute". ` +
903
- `To fix this problem, make sure the container element has the CSS 'position' ` +
904
- `property defined and the height of the element is not zero.`));
905
- }
906
- });
907
- // See comments in the `assertNoImageDistortion`.
908
- const removeErrorListenerFn = renderer.listen(img, 'error', () => {
909
- removeLoadListenerFn();
910
- removeErrorListenerFn();
911
- });
912
- }
913
- /**
914
- * Verifies that the `loading` attribute is set to a valid input &
915
- * is not used on priority images.
916
- */
917
- function assertValidLoadingInput(dir) {
918
- if (dir.loading && dir.priority) {
919
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute ` +
920
- `was used on an image that was marked "priority". ` +
921
- `Setting \`loading\` on priority images is not allowed ` +
922
- `because these images will always be eagerly loaded. ` +
923
- `To fix this, remove the “loading” attribute from the priority image.`);
924
- }
925
- const validInputs = ['auto', 'eager', 'lazy'];
926
- if (typeof dir.loading === 'string' && !validInputs.includes(dir.loading)) {
927
- throw new RuntimeError(2952 /* RuntimeErrorCode.INVALID_INPUT */, `${imgDirectiveDetails(dir.ngSrc)} the \`loading\` attribute ` +
928
- `has an invalid value (\`${dir.loading}\`). ` +
929
- `To fix this, provide a valid value ("lazy", "eager", or "auto").`);
930
- }
931
- }
932
- /**
933
- * Warns if NOT using a loader (falling back to the generic loader) and
934
- * the image appears to be hosted on one of the image CDNs for which
935
- * we do have a built-in image loader. Suggests switching to the
936
- * built-in loader.
937
- *
938
- * @param ngSrc Value of the ngSrc attribute
939
- * @param imageLoader ImageLoader provided
940
- */
941
- function assertNotMissingBuiltInLoader(ngSrc, imageLoader) {
942
- if (imageLoader === noopImageLoader) {
943
- let builtInLoaderName = '';
944
- for (const loader of BUILT_IN_LOADERS) {
945
- if (loader.testUrl(ngSrc)) {
946
- builtInLoaderName = loader.name;
947
- break;
948
- }
949
- }
950
- if (builtInLoaderName) {
951
- console.warn(formatRuntimeError(2962 /* RuntimeErrorCode.MISSING_BUILTIN_LOADER */, `NgOptimizedImage: It looks like your images may be hosted on the ` +
952
- `${builtInLoaderName} CDN, but your app is not using Angular's ` +
953
- `built-in loader for that CDN. We recommend switching to use ` +
954
- `the built-in by calling \`provide${builtInLoaderName}Loader()\` ` +
955
- `in your \`providers\` and passing it your instance's base URL. ` +
956
- `If you don't want to use the built-in loader, define a custom ` +
957
- `loader function using IMAGE_LOADER to silence this warning.`));
958
- }
959
- }
960
- }
961
- /**
962
- * Warns if ngSrcset is present and no loader is configured (i.e. the default one is being used).
963
- */
964
- function assertNoNgSrcsetWithoutLoader(dir, imageLoader) {
965
- if (dir.ngSrcset && imageLoader === noopImageLoader) {
966
- console.warn(formatRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \`ngSrcset\` attribute is present but ` +
967
- `no image loader is configured (i.e. the default one is being used), ` +
968
- `which would result in the same image being used for all configured sizes. ` +
969
- `To fix this, provide a loader or remove the \`ngSrcset\` attribute from the image.`));
970
- }
971
- }
972
- /**
973
- * Warns if loaderParams is present and no loader is configured (i.e. the default one is being
974
- * used).
975
- */
976
- function assertNoLoaderParamsWithoutLoader(dir, imageLoader) {
977
- if (dir.loaderParams && imageLoader === noopImageLoader) {
978
- console.warn(formatRuntimeError(2963 /* RuntimeErrorCode.MISSING_NECESSARY_LOADER */, `${imgDirectiveDetails(dir.ngSrc)} the \`loaderParams\` attribute is present but ` +
979
- `no image loader is configured (i.e. the default one is being used), ` +
980
- `which means that the loaderParams data will not be consumed and will not affect the URL. ` +
981
- `To fix this, provide a custom loader or remove the \`loaderParams\` attribute from the image.`));
982
- }
983
- }
984
- /**
985
- * Warns if the priority attribute is used too often on page load
986
- */
987
- async function assetPriorityCountBelowThreshold(appRef) {
988
- if (IMGS_WITH_PRIORITY_ATTR_COUNT === 0) {
989
- IMGS_WITH_PRIORITY_ATTR_COUNT++;
990
- await whenStable(appRef);
991
- if (IMGS_WITH_PRIORITY_ATTR_COUNT > PRIORITY_COUNT_THRESHOLD) {
992
- console.warn(formatRuntimeError(2966 /* RuntimeErrorCode.TOO_MANY_PRIORITY_ATTRIBUTES */, `NgOptimizedImage: The "priority" attribute is set to true more than ${PRIORITY_COUNT_THRESHOLD} times (${IMGS_WITH_PRIORITY_ATTR_COUNT} times). ` +
993
- `Marking too many images as "high" priority can hurt your application's LCP (https://web.dev/lcp). ` +
994
- `"Priority" should only be set on the image expected to be the page's LCP element.`));
995
- }
996
- }
997
- else {
998
- IMGS_WITH_PRIORITY_ATTR_COUNT++;
999
- }
1000
- }
1001
- /**
1002
- * Warns if placeholder's dimension are over a threshold.
1003
- *
1004
- * This assert function is meant to only run on the browser.
1005
- */
1006
- function assertPlaceholderDimensions(dir, imgElement) {
1007
- const computedStyle = window.getComputedStyle(imgElement);
1008
- let renderedWidth = parseFloat(computedStyle.getPropertyValue('width'));
1009
- let renderedHeight = parseFloat(computedStyle.getPropertyValue('height'));
1010
- if (renderedWidth > PLACEHOLDER_DIMENSION_LIMIT || renderedHeight > PLACEHOLDER_DIMENSION_LIMIT) {
1011
- console.warn(formatRuntimeError(2967 /* RuntimeErrorCode.PLACEHOLDER_DIMENSION_LIMIT_EXCEEDED */, `${imgDirectiveDetails(dir.ngSrc)} it uses a placeholder image, but at least one ` +
1012
- `of the dimensions attribute (height or width) exceeds the limit of ${PLACEHOLDER_DIMENSION_LIMIT}px. ` +
1013
- `To fix this, use a smaller image as a placeholder.`));
1014
- }
1015
- }
1016
- function round(input) {
1017
- return Number.isInteger(input) ? input : input.toFixed(2);
1018
- }
1019
- // Transform function to handle SafeValue input for ngSrc. This doesn't do any sanitization,
1020
- // as that is not needed for img.src and img.srcset. This transform is purely for compatibility.
1021
- function unwrapSafeUrl(value) {
1022
- if (typeof value === 'string') {
1023
- return value;
1024
- }
1025
- return unwrapSafeValue(value);
1026
- }
1027
- // Transform function to handle inputs which may be booleans, strings, or string representations
1028
- // of boolean values. Used for the placeholder attribute.
1029
- export function booleanOrUrlAttribute(value) {
1030
- if (typeof value === 'string' && value !== 'true' && value !== 'false' && value !== '') {
1031
- return value;
1032
- }
1033
- return booleanAttribute(value);
1034
- }
1035
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdfb3B0aW1pemVkX2ltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9kaXJlY3RpdmVzL25nX29wdGltaXplZF9pbWFnZS9uZ19vcHRpbWl6ZWRfaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBSWYsV0FBVyxFQUNYLFNBQVMsRUFFVCxtQkFBbUIsSUFBSSxrQkFBa0IsRUFDekMsYUFBYSxJQUFJLFlBQVksRUFDN0Isc0JBQXNCLElBQUkscUJBQXFCLEVBRS9DLHVCQUF1QixJQUFJLHNCQUFzQixFQUNqRCxhQUFhLElBQUksWUFBWSxFQUU3QixnQkFBZ0IsSUFBSSxlQUFlLEVBQ25DLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxJQUFJLFVBQVUsR0FDMUIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUNMLFlBQVksRUFHWixlQUFlLEdBQ2hCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9B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S0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxnR0FBZ0c7QUFDaEcseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUF1QjtJQUMzRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJLEtBQUssS0FBSyxPQUFPLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIGluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgybVmb3JtYXRSdW50aW1lRXJyb3IgYXMgZm9ybWF0UnVudGltZUVycm9yLFxuICDJtUlNQUdFX0NPTkZJRyBhcyBJTUFHRV9DT05GSUcsXG4gIMm1SU1BR0VfQ09ORklHX0RFRkFVTFRTIGFzIElNQUdFX0NPTkZJR19ERUZBVUxUUyxcbiAgybVJbWFnZUNvbmZpZyBhcyBJbWFnZUNvbmZpZyxcbiAgybVwZXJmb3JtYW5jZU1hcmtGZWF0dXJlIGFzIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUsXG4gIMm1UnVudGltZUVycm9yIGFzIFJ1bnRpbWVFcnJvcixcbiAgybVTYWZlVmFsdWUgYXMgU2FmZVZhbHVlLFxuICDJtXVud3JhcFNhZmVWYWx1ZSBhcyB1bndyYXBTYWZlVmFsdWUsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBBcHBsaWNhdGlvblJlZixcbiAgybV3aGVuU3RhYmxlIGFzIHdoZW5TdGFibGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1J1bnRpbWVFcnJvckNvZGV9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQge2lzUGxhdGZvcm1TZXJ2ZXJ9IGZyb20gJy4uLy4uL3BsYXRmb3JtX2lkJztcblxuaW1wb3J0IHtpbWdEaXJlY3RpdmVEZXRhaWxzfSBmcm9tICcuL2Vycm9yX2hlbHBlcic7XG5pbXBvcnQge2Nsb3VkaW5hcnlMb2FkZXJJbmZvfSBmcm9tICcuL2ltYWdlX2xvYWRlcnMvY2xvdWRpbmFyeV9sb2FkZXInO1xuaW1wb3J0IHtcbiAgSU1BR0VfTE9BREVSLFxuICBJbWFnZUxvYWRlcixcbiAgSW1hZ2VMb2FkZXJDb25maWcsXG4gIG5vb3BJbWFnZUxvYWRlcixcbn0gZnJvbSAnLi9pbWFnZV9sb2FkZXJzL2ltYWdlX2xvYWRlcic7XG5pbXBvcnQge2ltYWdlS2l0TG9hZGVySW5mb30gZnJvbSAnLi9pbWFnZV9sb2FkZXJzL2ltYWdla2l0X2xvYWRlcic7XG5pbXBvcnQge2ltZ2l4TG9hZGVySW5mb30gZnJvbSAnLi9pbWFnZV9sb2FkZXJzL2ltZ2l4X2xvYWRlcic7XG5pbXBvcnQge25ldGxpZnlMb2FkZXJJbmZvfSBmcm9tICcuL2ltYWdlX2xvYWRlcnMvbmV0bGlmeV9sb2FkZXInO1xuaW1wb3J0IHtMQ1BJbWFnZU9ic2VydmVyfSBmcm9tICcuL2xjcF9pbWFnZV9vYnNlcnZlcic7XG5pbXBvcnQge1ByZWNvbm5lY3RMaW5rQ2hlY2tlcn0gZnJvbSAnLi9wcmVjb25uZWN0X2xpbmtfY2hlY2tlcic7XG5pbXBvcnQge1ByZWxvYWRMaW5rQ3JlYXRvcn0gZnJvbSAnLi9wcmVsb2FkLWxpbmstY3JlYXRvcic7XG5cbi8qKlxuICogV2hlbiBhIEJhc2U2NC1lbmNvZGVkIGltYWdlIGlzIHBhc3NlZCBhcyBhbiBpbnB1dCB0byB0aGUgYE5nT3B0aW1pemVkSW1hZ2VgIGRpcmVjdGl2ZSxcbiAqIGFuIGVycm9yIGlzIHRocm93bi4gVGhlIGltYWdlIGNvbnRlbnQgKGFzIGEgc3RyaW5nKSBtaWdodCBiZSB2ZXJ5IGxvbmcsIHRodXMgbWFraW5nXG4gKiBpdCBoYXJkIHRvIHJlYWQgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZW50aXJlIHN0cmluZyBpcyBpbmNsdWRlZC4gVGhpcyBjb25zdCBkZWZpbmVzXG4gKiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW50byB0aGUgZXJyb3IgbWVzc2FnZS4gVGhlIHJlc3RcbiAqIG9mIHRoZSBjb250ZW50IGlzIHRydW5jYXRlZC5cbiAqL1xuY29uc3QgQkFTRTY0X0lNR19NQVhfTEVOR1RIX0lOX0VSUk9SID0gNTA7XG5cbi8qKlxuICogUmVnRXhwciB0byBkZXRlcm1pbmUgd2hldGhlciBhIHNyYyBpbiBhIHNyY3NldCBpcyB1c2luZyB3aWR0aCBkZXNjcmlwdG9ycy5cbiAqIFNob3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZTogXCIxMDB3LCAyMDB3XCIuXG4gKi9cbmNvbnN0IFZBTElEX1dJRFRIX0RFU0NSSVBUT1JfU1JDU0VUID0gL14oKFxccypcXGQrd1xccyooLHwkKSl7MSx9KSQvO1xuXG4vKipcbiAqIFJlZ0V4cHIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzcmMgaW4gYSBzcmNzZXQgaXMgdXNpbmcgZGVuc2l0eSBkZXNjcmlwdG9ycy5cbiAqIFNob3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZTogXCIxeCwgMngsIDUweFwiLiBBbHNvIHN1cHBvcnRzIGRlY2ltYWxzIGxpa2UgXCIxLjV4LCAxLjUweFwiLlxuICovXG5jb25zdCBWQUxJRF9ERU5TSVRZX0RFU0NSSVBUT1JfU1JDU0VUID0gL14oKFxccypcXGQrKFxcLlxcZCspP3hcXHMqKCx8JCkpezEsfSkkLztcblxuLyoqXG4gKiBTcmNzZXQgdmFsdWVzIHdpdGggYSBkZW5zaXR5IGRlc2NyaXB0b3IgaGlnaGVyIHRoYW4gdGhpcyB2YWx1ZSB3aWxsIGFjdGl2ZWx5XG4gKiB0aHJvdyBhbiBlcnJvci4gU3VjaCBkZW5zaXRpZXMgYXJlIG5vdCBwZXJtaXR0ZWQgYXMgdGhleSBjYXVzZSBpbWFnZSBzaXplc1xuICogdG8gYmUgdW5yZWFzb25hYmx5IGxhcmdlIGFuZCBzbG93IGRvd24gTENQLlxuICovXG5leHBvcnQgY29uc3QgQUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQID0gMztcblxuLyoqXG4gKiBVc2VkIG9ubHkgaW4gZXJyb3IgbWVzc2FnZSB0ZXh0IHRvIGNvbW11bmljYXRlIGJlc3QgcHJhY3RpY2VzLCBhcyB3ZSB3aWxsXG4gKiBvbmx5IHRocm93IGJhc2VkIG9uIHRoZSBzbGlnaHRseSBtb3JlIGNvbnNlcnZhdGl2ZSBBQlNPTFVURV9TUkNTRVRfREVOU0lUWV9DQVAuXG4gKi9cbmV4cG9ydCBjb25zdCBSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVAgPSAyO1xuXG4vKipcbiAqIFVzZWQgaW4gZ2VuZXJhdGluZyBhdXRvbWF0aWMgZGVuc2l0eS1iYXNlZCBzcmNzZXRzXG4gKi9cbmNvbnN0IERFTlNJVFlfU1JDU0VUX01VTFRJUExJRVJTID0gWzEsIDJdO1xuXG4vKipcbiAqIFVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyZWFrcG9pbnRzIHRvIHVzZSBvbiBmdWxsLXdpZHRoIGltYWdlc1xuICovXG5jb25zdCBWSUVXUE9SVF9CUkVBS1BPSU5UX0NVVE9GRiA9IDY0MDtcbi8qKlxuICogVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0d28gYXNwZWN0IHJhdGlvcyBhcmUgc2ltaWxhciBpbiB2YWx1ZS5cbiAqL1xuY29uc3QgQVNQRUNUX1JBVElPX1RPTEVSQU5DRSA9IDAuMTtcblxuLyoqXG4gKiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgYmVlbiByZXF1ZXN0ZWQgYXQgYW4gb3Zlcmx5XG4gKiBsYXJnZSBzaXplIGNvbXBhcmVkIHRvIHRoZSBhY3R1YWwgcmVuZGVyZWQgaW1hZ2Ugc2l6ZSAoYWZ0ZXIgdGFraW5nXG4gKiBpbnRvIGFjY291bnQgYSB0eXBpY2FsIGRldmljZSBwaXhlbCByYXRpbykuIEluIHBpeGVscy5cbiAqL1xuY29uc3QgT1ZFUlNJWkVEX0lNQUdFX1RPTEVSQU5DRSA9IDEwMDA7XG5cbi8qKlxuICogVXNlZCB0byBsaW1pdCBhdXRvbWF0aWMgc3Jjc2V0IGdlbmVyYXRpb24gb2YgdmVyeSBsYXJnZSBzb3VyY2VzIGZvclxuICogZml4ZWQtc2l6ZSBpbWFnZXMuIEluIHBpeGVscy5cbiAqL1xuY29uc3QgRklYRURfU1JDU0VUX1dJRFRIX0xJTUlUID0gMTkyMDtcbmNvbnN0IEZJWEVEX1NSQ1NFVF9IRUlHSFRfTElNSVQgPSAxMDgwO1xuXG4vKipcbiAqIERlZmF1bHQgYmx1ciByYWRpdXMgb2YgdGhlIENTUyBmaWx0ZXIgdXNlZCBvbiBwbGFjZWhvbGRlciBpbWFnZXMsIGluIHBpeGVsc1xuICovXG5leHBvcnQgY29uc3QgUExBQ0VIT0xERVJfQkxVUl9BTU9VTlQgPSAxNTtcblxuLyoqXG4gKiBQbGFjZWhvbGRlciBkaW1lbnNpb24gKGhlaWdodCBvciB3aWR0aCkgbGltaXQgaW4gcGl4ZWxzLiBBbmd1bGFyIHByb2R1Y2VzIGEgd2FybmluZ1xuICogd2hlbiB0aGlzIGxpbWl0IGlzIGNyb3NzZWQuXG4gKi9cbmNvbnN0IFBMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVCA9IDEwMDA7XG5cbi8qKlxuICogVXNlZCB0byB3YXJuIG9yIGVycm9yIHdoZW4gdGhlIHVzZXIgcHJvdmlkZXMgYW4gb3Zlcmx5IGxhcmdlIGRhdGFVUkwgZm9yIHRoZSBwbGFjZWhvbGRlclxuICogYXR0cmlidXRlLlxuICogQ2hhcmFjdGVyIGNvdW50IG9mIEJhc2U2NCBpbWFnZXMgaXMgMSBjaGFyYWN0ZXIgcGVyIGJ5dGUsIGFuZCBiYXNlNjQgZW5jb2RpbmcgaXMgYXBwcm94aW1hdGVseVxuICogMzMlIGxhcmdlciB0aGFuIGJhc2UgaW1hZ2VzLCBzbyA0MDAwIGNoYXJhY3RlcnMgaXMgYXJvdW5kIDNLQiBvbiBkaXNrIGFuZCAxMDAwMCBjaGFyYWN0ZXJzIGlzXG4gKiBhcm91bmQgNy43S0IuIEV4cGVyaW1lbnRhbGx5LCA0MDAwIGNoYXJhY3RlcnMgaXMgYWJvdXQgMjB4MjBweCBpbiBQTkcgb3IgbWVkaXVtLXF1YWxpdHkgSlBFR1xuICogZm9ybWF0LCBhbmQgMTAsMDAwIGlzIGFyb3VuZCA1MHg1MHB4LCBidXQgdGhlcmUncyBxdWl0ZSBhIGJpdCBvZiB2YXJpYXRpb24gZGVwZW5kaW5nIG9uIGhvdyB0aGVcbiAqIGltYWdlIGlzIHNhdmVkLlxuICovXG5leHBvcnQgY29uc3QgREFUQV9VUkxfV0FSTl9MSU1JVCA9IDQwMDA7XG5leHBvcnQgY29uc3QgREFUQV9VUkxfRVJST1JfTElNSVQgPSAxMDAwMDtcblxuLyoqIEluZm8gYWJvdXQgYnVpbHQtaW4gbG9hZGVycyB3ZSBjYW4gdGVzdCBmb3IuICovXG5leHBvcnQgY29uc3QgQlVJTFRfSU5fTE9BREVSUyA9IFtcbiAgaW1naXhMb2FkZXJJbmZvLFxuICBpbWFnZUtpdExvYWRlckluZm8sXG4gIGNsb3VkaW5hcnlMb2FkZXJJbmZvLFxuICBuZXRsaWZ5TG9hZGVySW5mbyxcbl07XG5cbi8qKlxuICogVGhyZXNob2xkIGZvciB0aGUgUFJJT1JJVFlfVFJVRV9DT1VOVFxuICovXG5jb25zdCBQUklPUklUWV9DT1VOVF9USFJFU0hPTEQgPSAxMDtcblxuLyoqXG4gKiBUaGlzIGNvdW50IGlzIHVzZWQgdG8gbG9nIGEgZGV2TW9kZSB3YXJuaW5nXG4gKiB3aGVuIHRoZSBjb3VudCBvZiBkaXJlY3RpdmUgaW5zdGFuY2VzIHdpdGggcHJpb3JpdHk9dHJ1ZVxuICogZXhjZWVkcyB0aGUgdGhyZXNob2xkIFBSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRFxuICovXG5sZXQgSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQgPSAwO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHRlc3RpbmcgcHVycG9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0SW1hZ2VQcmlvcml0eUNvdW50KCkge1xuICBJTUdTX1dJVEhfUFJJT1JJVFlfQVRUUl9DT1VOVCA9IDA7XG59XG5cbi8qKlxuICogQ29uZmlnIG9wdGlvbnMgdXNlZCBpbiByZW5kZXJpbmcgcGxhY2Vob2xkZXIgaW1hZ2VzLlxuICpcbiAqIEBzZWUge0BsaW5rIE5nT3B0aW1pemVkSW1hZ2V9XG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VQbGFjZWhvbGRlckNvbmZpZyB7XG4gIGJsdXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIERpcmVjdGl2ZSB0aGF0IGltcHJvdmVzIGltYWdlIGxvYWRpbmcgcGVyZm9ybWFuY2UgYnkgZW5mb3JjaW5nIGJlc3QgcHJhY3RpY2VzLlxuICpcbiAqIGBOZ09wdGltaXplZEltYWdlYCBlbnN1cmVzIHRoYXQgdGhlIGxvYWRpbmcgb2YgdGhlIExhcmdlc3QgQ29udGVudGZ1bCBQYWludCAoTENQKSBpbWFnZSBpc1xuICogcHJpb3JpdGl6ZWQgYnk6XG4gKiAtIEF1dG9tYXRpY2FsbHkgc2V0dGluZyB0aGUgYGZldGNocHJpb3JpdHlgIGF0dHJpYnV0ZSBvbiB0aGUgYDxpbWc+YCB0YWdcbiAqIC0gTGF6eSBsb2FkaW5nIG5vbi1wcmlvcml0eSBpbWFnZXMgYnkgZGVmYXVsdFxuICogLSBBdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgYSBwcmVjb25uZWN0IGxpbmsgdGFnIGluIHRoZSBkb2N1bWVudCBoZWFkXG4gKlxuICogSW4gYWRkaXRpb24sIHRoZSBkaXJlY3RpdmU6XG4gKiAtIEdlbmVyYXRlcyBhcHByb3ByaWF0ZSBhc3NldCBVUkxzIGlmIGEgY29ycmVzcG9uZGluZyBgSW1hZ2VMb2FkZXJgIGZ1bmN0aW9uIGlzIHByb3ZpZGVkXG4gKiAtIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGEgc3Jjc2V0XG4gKiAtIFJlcXVpcmVzIHRoYXQgYHdpZHRoYCBhbmQgYGhlaWdodGAgYXJlIHNldFxuICogLSBXYXJucyBpZiBgd2lkdGhgIG9yIGBoZWlnaHRgIGhhdmUgYmVlbiBzZXQgaW5jb3JyZWN0bHlcbiAqIC0gV2FybnMgaWYgdGhlIGltYWdlIHdpbGwgYmUgdmlzdWFsbHkgZGlzdG9ydGVkIHdoZW4gcmVuZGVyZWRcbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICogVGhlIGBOZ09wdGltaXplZEltYWdlYCBkaXJlY3RpdmUgaXMgbWFya2VkIGFzIFtzdGFuZGFsb25lXShndWlkZS9jb21wb25lbnRzL2ltcG9ydGluZykgYW5kIGNhblxuICogYmUgaW1wb3J0ZWQgZGlyZWN0bHkuXG4gKlxuICogRm9sbG93IHRoZSBzdGVwcyBiZWxvdyB0byBlbmFibGUgYW5kIHVzZSB0aGUgZGlyZWN0aXZlOlxuICogMS4gSW1wb3J0IGl0IGludG8gdGhlIG5lY2Vzc2FyeSBOZ01vZHVsZSBvciBhIHN0YW5kYWxvbmUgQ29tcG9uZW50LlxuICogMi4gT3B0aW9uYWxseSBwcm92aWRlIGFuIGBJbWFnZUxvYWRlcmAgaWYgeW91IHVzZSBhbiBpbWFnZSBob3N0aW5nIHNlcnZpY2UuXG4gKiAzLiBVcGRhdGUgdGhlIG5lY2Vzc2FyeSBgPGltZz5gIHRhZ3MgaW4gdGVtcGxhdGVzIGFuZCByZXBsYWNlIGBzcmNgIGF0dHJpYnV0ZXMgd2l0aCBgbmdTcmNgLlxuICogVXNpbmcgYSBgbmdTcmNgIGFsbG93cyB0aGUgZGlyZWN0aXZlIHRvIGNvbnRyb2wgd2hlbiB0aGUgYHNyY2AgZ2V0cyBzZXQsIHdoaWNoIHRyaWdnZXJzIGFuIGltYWdlXG4gKiBkb3dubG9hZC5cbiAqXG4gKiBTdGVwIDE6IGltcG9ydCB0aGUgYE5nT3B0aW1pemVkSW1hZ2VgIGRpcmVjdGl2ZS5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBOZ09wdGltaXplZEltYWdlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbiAqXG4gKiAvLyBJbmNsdWRlIGl0IGludG8gdGhlIG5lY2Vzc2FyeSBOZ01vZHVsZVxuICogQE5nTW9kdWxlKHtcbiAqICAgaW1wb3J0czogW05nT3B0aW1pemVkSW1hZ2VdLFxuICogfSlcbiAqIGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIC4uLiBvciBhIHN0YW5kYWxvbmUgQ29tcG9uZW50XG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc3RhbmRhbG9uZTogdHJ1ZVxuICogICBpbXBvcnRzOiBbTmdPcHRpbWl6ZWRJbWFnZV0sXG4gKiB9KVxuICogY2xhc3MgTXlTdGFuZGFsb25lQ29tcG9uZW50IHt9XG4gKiBgYGBcbiAqXG4gKiBTdGVwIDI6IGNvbmZpZ3VyZSBhIGxvYWRlci5cbiAqXG4gKiBUbyB1c2UgdGhlICoqZGVmYXVsdCBsb2FkZXIqKjogbm8gYWRkaXRpb25hbCBjb2RlIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeS4gVGhlIFVSTCByZXR1cm5lZCBieSB0aGVcbiAqIGdlbmVyaWMgbG9hZGVyIHdpbGwgYWx3YXlzIG1hdGNoIHRoZSB2YWx1ZSBvZiBcInNyY1wiLiBJbiBvdGhlciB3b3JkcywgdGhpcyBsb2FkZXIgYXBwbGllcyBub1xuICogdHJhbnNmb3JtYXRpb25zIHRvIHRoZSByZXNvdXJjZSBVUkwgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgYG5nU3JjYCBhdHRyaWJ1dGUgd2lsbCBiZSB1c2VkIGFzIGlzLlxuICpcbiAqIFRvIHVzZSBhbiBleGlzdGluZyBsb2FkZXIgZm9yIGEgKip0aGlyZC1wYXJ0eSBpbWFnZSBzZXJ2aWNlKio6IGFkZCB0aGUgcHJvdmlkZXIgZmFjdG9yeSBmb3IgeW91clxuICogY2hvc2VuIHNlcnZpY2UgdG8gdGhlIGBwcm92aWRlcnNgIGFycmF5LiBJbiB0aGUgZXhhbXBsZSBiZWxvdywgdGhlIEltZ2l4IGxvYWRlciBpcyB1c2VkOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7cHJvdmlkZUltZ2l4TG9hZGVyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICpcbiAqIC8vIENhbGwgdGhlIGZ1bmN0aW9uIGFuZCBhZGQgdGhlIHJlc3VsdCB0byB0aGUgYHByb3ZpZGVyc2AgYXJyYXk6XG4gKiBwcm92aWRlcnM6IFtcbiAqICAgcHJvdmlkZUltZ2l4TG9hZGVyKFwiaHR0cHM6Ly9teS5iYXNlLnVybC9cIiksXG4gKiBdLFxuICogYGBgXG4gKlxuICogVGhlIGBOZ09wdGltaXplZEltYWdlYCBkaXJlY3RpdmUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6XG4gKiAtIGBwcm92aWRlQ2xvdWRmbGFyZUxvYWRlcmBcbiAqIC0gYHByb3ZpZGVDbG91ZGluYXJ5TG9hZGVyYFxuICogLSBgcHJvdmlkZUltYWdlS2l0TG9hZGVyYFxuICogLSBgcHJvdmlkZUltZ2l4TG9hZGVyYFxuICpcbiAqIElmIHlvdSB1c2UgYSBkaWZmZXJlbnQgaW1hZ2UgcHJvdmlkZXIsIHlvdSBjYW4gY3JlYXRlIGEgY3VzdG9tIGxvYWRlciBmdW5jdGlvbiBhcyBkZXNjcmliZWRcbiAqIGJlbG93LlxuICpcbiAqIFRvIHVzZSBhICoqY3VzdG9tIGxvYWRlcioqOiBwcm92aWRlIHlvdXIgbG9hZGVyIGZ1bmN0aW9uIGFzIGEgdmFsdWUgZm9yIHRoZSBgSU1BR0VfTE9BREVSYCBESVxuICogdG9rZW4uXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHtJTUFHRV9MT0FERVIsIEltYWdlTG9hZGVyQ29uZmlnfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuICpcbiAqIC8vIENvbmZpZ3VyZSB0aGUgbG9hZGVyIHVzaW5nIHRoZSBgSU1BR0VfTE9BREVSYCB0b2tlbi5cbiAqIHByb3ZpZGVyczogW1xuICogICB7XG4gKiAgICAgIHByb3ZpZGU6IElNQUdFX0xPQURFUixcbiAqICAgICAgdXNlVmFsdWU6IChjb25maWc6IEltYWdlTG9hZGVyQ29uZmlnKSA9PiB7XG4gKiAgICAgICAgcmV0dXJuIGBodHRwczovL2V4YW1wbGUuY29tLyR7Y29uZmlnLnNyY30tJHtjb25maWcud2lkdGh9LmpwZ31gO1xuICogICAgICB9XG4gKiAgIH0sXG4gKiBdLFxuICogYGBgXG4gKlxuICogU3RlcCAzOiB1cGRhdGUgYDxpbWc+YCB0YWdzIGluIHRlbXBsYXRlcyB0byB1c2UgYG5nU3JjYCBpbnN0ZWFkIG9mIGBzcmNgLlxuICpcbiAqIGBgYFxuICogPGltZyBuZ1NyYz1cImxvZ28ucG5nXCIgd2lkdGg9XCIyMDBcIiBoZWlnaHQ9XCIxMDBcIj5cbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaW1nW25nU3JjXScsXG4gIGhvc3Q6IHtcbiAgICAnW3N0eWxlLnBvc2l0aW9uXSc6ICdmaWxsID8gXCJhYnNvbHV0ZVwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS53aWR0aF0nOiAnZmlsbCA/IFwiMTAwJVwiIDogbnVsbCcsXG4gICAgJ1tzdHlsZS5oZWlnaHRdJzogJ2ZpbGwgPyBcIjEwMCVcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuaW5zZXRdJzogJ2ZpbGwgPyBcIjBcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1zaXplXSc6ICdwbGFjZWhvbGRlciA/IFwiY292ZXJcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1wb3NpdGlvbl0nOiAncGxhY2Vob2xkZXIgPyBcIjUwJSA1MCVcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1yZXBlYXRdJzogJ3BsYWNlaG9sZGVyID8gXCJuby1yZXBlYXRcIiA6IG51bGwnLFxuICAgICdbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV0nOiAncGxhY2Vob2xkZXIgPyBnZW5lcmF0ZVBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyKSA6IG51bGwnLFxuICAgICdbc3R5bGUuZmlsdGVyXSc6IGBwbGFjZWhvbGRlciAmJiBzaG91bGRCbHVyUGxhY2Vob2xkZXIocGxhY2Vob2xkZXJDb25maWcpID8gXCJibHVyKCR7UExBQ0VIT0xERVJfQkxVUl9BTU9VTlR9cHgpXCIgOiBudWxsYCxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgTmdPcHRpbWl6ZWRJbWFnZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGltYWdlTG9hZGVyID0gaW5qZWN0KElNQUdFX0xPQURFUik7XG4gIHByaXZhdGUgY29uZmlnOiBJbWFnZUNvbmZpZyA9IHByb2Nlc3NDb25maWcoaW5qZWN0KElNQUdFX0NPTkZJRykpO1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgaW1nRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50O1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1NlcnZlciA9IGlzUGxhdGZvcm1TZXJ2ZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlbG9hZExpbmtDcmVhdG9yID0gaW5qZWN0KFByZWxvYWRMaW5rQ3JlYXRvcik7XG5cbiAgLy8gYSBMQ1AgaW1hZ2Ugb2JzZXJ2ZXIgLSBzaG91bGQgYmUgaW5qZWN0ZWQgb25seSBpbiB0aGUgZGV2IG1vZGVcbiAgcHJpdmF0ZSBsY3BPYnNlcnZlciA9IG5nRGV2TW9kZSA/IHRoaXMuaW5qZWN0b3IuZ2V0KExDUEltYWdlT2JzZXJ2ZXIpIDogbnVsbDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSByZXdyaXR0ZW4gYHNyY2Agb25jZSBhbmQgc3RvcmUgaXQuXG4gICAqIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHJlcGV0aXRpdmUgY2FsY3VsYXRpb25zIGFuZCBtYWtlIHN1cmUgdGhlIGRpcmVjdGl2ZSBjbGVhbnVwIGluIHRoZVxuICAgKiBgbmdPbkRlc3Ryb3lgIGRvZXMgbm90IHJlbHkgb24gdGhlIGBJTUFHRV9MT0FERVJgIGxvZ2ljICh3aGljaCBpbiB0dXJuIGNhbiByZWx5IG9uIHNvbWUgb3RoZXJcbiAgICogaW5zdGFuY2UgdGhhdCBtaWdodCBiZSBhbHJlYWR5IGRlc3Ryb3llZCkuXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJlZFNyYzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNvdXJjZSBpbWFnZS5cbiAgICogSW1hZ2UgbmFtZSB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGUgaW1hZ2UgbG9hZGVyIGFuZCB0aGUgZmluYWwgVVJMIHdpbGwgYmUgYXBwbGllZCBhcyB0aGUgYHNyY2BcbiAgICogcHJvcGVydHkgb2YgdGhlIGltYWdlLlxuICAgKi9cbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZSwgdHJhbnNmb3JtOiB1bndyYXBTYWZlVXJsfSkgbmdTcmMhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygd2lkdGggb3IgZGVuc2l0eSBkZXNjcmlwdG9ycy5cbiAgICogVGhlIGltYWdlIG5hbWUgd2lsbCBiZSB0YWtlbiBmcm9tIGBuZ1NyY2AgYW5kIGNvbWJpbmVkIHdpdGggdGhlIGxpc3Qgb2Ygd2lkdGggb3IgZGVuc2l0eVxuICAgKiBkZXNjcmlwdG9ycyB0byBnZW5lcmF0ZSB0aGUgZmluYWwgYHNyY3NldGAgcHJvcGVydHkgb2YgdGhlIGltYWdlLlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGBcbiAgICogPGltZyBuZ1NyYz1cImhlbGxvLmpwZ1wiIG5nU3Jjc2V0PVwiMTAwdywgMjAwd1wiIC8+ICA9PlxuICAgKiA8aW1nIHNyYz1cInBhdGgvaGVsbG8uanBnXCIgc3Jjc2V0PVwicGF0aC9oZWxsby5qcGc/dz0xMDAgMTAwdywgcGF0aC9oZWxsby5qcGc/dz0yMDAgMjAwd1wiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCkgbmdTcmNzZXQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGBzaXplc2AgYXR0cmlidXRlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBgPGltZz5gIGVsZW1lbnQuXG4gICAqIFByb3ZpZGluZyBzaXplcyBjYXVzZXMgdGhlIGltYWdlIHRvIGNyZWF0ZSBhbiBhdXRvbWF0aWMgcmVzcG9uc2l2ZSBzcmNzZXQuXG4gICAqL1xuICBASW5wdXQoKSBzaXplcz86IHN0cmluZztcblxuICAvKipcbiAgICogRm9yIHJlc3BvbnNpdmUgaW1hZ2VzOiB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuXG4gICAqIEZvciBmaXhlZCBzaXplIGltYWdlczogdGhlIGRlc2lyZWQgcmVuZGVyZWQgd2lkdGggb2YgdGhlIGltYWdlIGluIHBpeGVscy5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGV9KSB3aWR0aDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBGb3IgcmVzcG9uc2l2ZSBpbWFnZXM6IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuXG4gICAqIEZvciBmaXhlZCBzaXplIGltYWdlczogdGhlIGRlc2lyZWQgcmVuZGVyZWQgaGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlfSkgaGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIGxvYWRpbmcgYmVoYXZpb3IgKGxhenksIGVhZ2VyLCBvciBhdXRvKS4gRGVmYXVsdHMgdG8gYGxhenlgLFxuICAgKiB3aGljaCBpcyByZWNvbW1lbmRlZCBmb3IgbW9zdCBpbWFnZXMuXG4gICAqXG4gICAqIFdhcm5pbmc6IFNldHRpbmcgaW1hZ2VzIGFzIGxvYWRpbmc9XCJlYWdlclwiIG9yIGxvYWRpbmc9XCJhdXRvXCIgbWFya3MgdGhlbVxuICAgKiBhcyBub24tcHJpb3JpdHkgaW1hZ2VzIGFuZCBjYW4gaHVydCBsb2FkaW5nIHBlcmZvcm1hbmNlLiBGb3IgaW1hZ2VzIHdoaWNoXG4gICAqIG1heSBiZSB0aGUgTENQIGVsZW1lbnQsIHVzZSB0aGUgYHByaW9yaXR5YCBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBgbG9hZGluZ2AuXG4gICAqL1xuICBASW5wdXQoKSBsb2FkaW5nPzogJ2xhenknIHwgJ2VhZ2VyJyB8ICdhdXRvJztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpbWFnZSBzaG91bGQgaGF2ZSBhIGhpZ2ggcHJpb3JpdHkuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pIHByaW9yaXR5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERhdGEgdG8gcGFzcyB0aHJvdWdoIHRvIGN1c3RvbSBsb2FkZXJzLlxuICAgKi9cbiAgQElucHV0KCkgbG9hZGVyUGFyYW1zPzoge1trZXk6IHN0cmluZ106IGFueX07XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIGF1dG9tYXRpYyBzcmNzZXQgZ2VuZXJhdGlvbiBmb3IgdGhpcyBpbWFnZS5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSkgZGlzYWJsZU9wdGltaXplZFNyY3NldCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbWFnZSB0byBcImZpbGwgbW9kZVwiLCB3aGljaCBlbGltaW5hdGVzIHRoZSBoZWlnaHQvd2lkdGggcmVxdWlyZW1lbnQgYW5kIGFkZHNcbiAgICogc3R5bGVzIHN1Y2ggdGhhdCB0aGUgaW1hZ2UgZmlsbHMgaXRzIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSkgZmlsbCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIFVSTCBvciBkYXRhIFVSTCBmb3IgYW4gaW1hZ2UgdG8gYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIHdoaWxlIHRoaXMgaW1hZ2UgbG9hZHMuXG4gICAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbk9yVXJsQXR0cmlidXRlfSkgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgcGxhY2Vob2xkZXIgc2V0dGluZ3MuIE9wdGlvbnM6XG4gICAqICAgKiBibHVyOiBTZXR0aW5nIHRoaXMgdG8gZmFsc2UgZGlzYWJsZXMgdGhlIGF1dG9tYXRpYyBDU1MgYmx1ci5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyQ29uZmlnPzogSW1hZ2VQbGFjZWhvbGRlckNvbmZpZztcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGBzcmNgIGF0dHJpYnV0ZSBpZiBzZXQgb24gdGhlIGhvc3QgYDxpbWc+YCBlbGVtZW50LlxuICAgKiBUaGlzIGlucHV0IGlzIGV4Y2x1c2l2ZWx5IHJlYWQgdG8gYXNzZXJ0IHRoYXQgYHNyY2AgaXMgbm90IHNldCBpbiBjb25mbGljdFxuICAgKiB3aXRoIGBuZ1NyY2AgYW5kIHRoYXQgaW1hZ2VzIGRvbid0IHN0YXJ0IHRvIGxvYWQgdW50aWwgYSBsYXp5IGxvYWRpbmcgc3RyYXRlZ3kgaXMgc2V0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpIHNyYz86IHN0cmluZztcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGBzcmNzZXRgIGF0dHJpYnV0ZSBpZiBzZXQgb24gdGhlIGhvc3QgYDxpbWc+YCBlbGVtZW50LlxuICAgKiBUaGlzIGlucHV0IGlzIGV4Y2x1c2l2ZWx5IHJlYWQgdG8gYXNzZXJ0IHRoYXQgYHNyY3NldGAgaXMgbm90IHNldCBpbiBjb25mbGljdFxuICAgKiB3aXRoIGBuZ1NyY3NldGAgYW5kIHRoYXQgaW1hZ2VzIGRvbid0IHN0YXJ0IHRvIGxvYWQgdW50aWwgYSBsYXp5IGxvYWRpbmcgc3RyYXRlZ3kgaXMgc2V0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpIHNyY3NldD86IHN0cmluZztcblxuICAvKiogQG5vZG9jICovXG4gIG5nT25Jbml0KCkge1xuICAgIHBlcmZvcm1hbmNlTWFya0ZlYXR1cmUoJ05nT3B0aW1pemVkSW1hZ2UnKTtcblxuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGNvbnN0IG5nWm9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgICBhc3NlcnROb25FbXB0eUlucHV0KHRoaXMsICduZ1NyYycsIHRoaXMubmdTcmMpO1xuICAgICAgYXNzZXJ0VmFsaWROZ1NyY3NldCh0aGlzLCB0aGlzLm5nU3Jjc2V0KTtcbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdTcmModGhpcyk7XG4gICAgICBpZiAodGhpcy5uZ1NyY3NldCkge1xuICAgICAgICBhc3NlcnROb0NvbmZsaWN0aW5nU3Jjc2V0KHRoaXMpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0Tm90QmFzZTY0SW1hZ2UodGhpcyk7XG4gICAgICBhc3NlcnROb3RCbG9iVXJsKHRoaXMpO1xuICAgICAgaWYgKHRoaXMuZmlsbCkge1xuICAgICAgICBhc3NlcnRFbXB0eVdpZHRoQW5kSGVpZ2h0KHRoaXMpO1xuICAgICAgICAvLyBUaGlzIGxlYXZlcyB0aGUgQW5ndWxhciB6b25lIHRvIGF2b2lkIHRyaWdnZXJpbmcgdW5uZWNlc3NhcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZXMgd2hlblxuICAgICAgICAvLyBgbG9hZGAgdGFza3MgYXJlIGludm9rZWQgb24gaW1hZ2VzLlxuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICBhc3NlcnROb25aZXJvUmVuZGVyZWRIZWlnaHQodGhpcywgdGhpcy5pbWdFbGVtZW50LCB0aGlzLnJlbmRlcmVyKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydE5vbkVtcHR5V2lkdGhBbmRIZWlnaHQodGhpcyk7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXNzZXJ0R3JlYXRlclRoYW5aZXJvKHRoaXMsIHRoaXMuaGVpZ2h0LCAnaGVpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFzc2VydEdyZWF0ZXJUaGFuWmVybyh0aGlzLCB0aGlzLndpZHRoLCAnd2lkdGgnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IGNoZWNrIGZvciBkaXN0b3J0ZWQgaW1hZ2VzIHdoZW4gbm90IGluIGZpbGwgbW9kZSwgd2hlcmVcbiAgICAgICAgLy8gaW1hZ2VzIG1heSBiZSBpbnRlbnRpb25hbGx5IHN0cmV0Y2hlZCwgY3JvcHBlZCBvciBsZXR0ZXJib3hlZC5cbiAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgYXNzZXJ0Tm9JbWFnZURpc3RvcnRpb24odGhpcywgdGhpcy5pbWdFbGVtZW50LCB0aGlzLnJlbmRlcmVyKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydFZhbGlkTG9hZGluZ0lucHV0KHRoaXMpO1xuICAgICAgaWYgKCF0aGlzLm5nU3Jjc2V0KSB7XG4gICAgICAgIGFzc2VydE5vQ29tcGxleFNpemVzKHRoaXMpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0VmFsaWRQbGFjZWhvbGRlcih0aGlzLCB0aGlzLmltYWdlTG9hZGVyKTtcbiAgICAgIGFzc2VydE5vdE1pc3NpbmdCdWlsdEluTG9hZGVyKHRoaXMubmdTcmMsIHRoaXMuaW1hZ2VMb2FkZXIpO1xuICAgICAgYXNzZXJ0Tm9OZ1NyY3NldFdpdGhvdXRMb2FkZXIodGhpcywgdGhpcy5pbWFnZUxvYWRlcik7XG4gICAgICBhc3NlcnROb0xvYWRlclBhcmFtc1dpdGhvdXRMb2FkZXIodGhpcywgdGhpcy5pbWFnZUxvYWRlcik7XG5cbiAgICAgIGlmICh0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG5nWm9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgICAgIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sY3BPYnNlcnZlciEucmVnaXN0ZXJJbWFnZSh0aGlzLmdldFJld3JpdHRlblNyYygpLCB0aGlzLm5nU3JjLCB0aGlzLnByaW9yaXR5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByaW9yaXR5KSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSB0aGlzLmluamVjdG9yLmdldChQcmVjb25uZWN0TGlua0NoZWNrZXIpO1xuICAgICAgICBjaGVja2VyLmFzc2VydFByZWNvbm5lY3QodGhpcy5nZXRSZXdyaXR0ZW5TcmMoKSwgdGhpcy5uZ1NyYyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU2VydmVyKSB7XG4gICAgICAgICAgY29uc3QgYXBwbGljYXRpb25SZWYgPSB0aGlzLmluamVjdG9yLmdldChBcHBsaWNhdGlvblJlZik7XG4gICAgICAgICAgYXNzZXRQcmlvcml0eUNvdW50QmVsb3dUaHJlc2hvbGQoYXBwbGljYXRpb25SZWYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnJlbW92ZVBsYWNlaG9sZGVyT25Mb2FkKHRoaXMuaW1nRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SG9zdEF0dHJpYnV0ZXMoKSB7XG4gICAgLy8gTXVzdCBzZXQgd2lkdGgvaGVpZ2h0IGV4cGxpY2l0bHkgaW4gY2FzZSB0aGV5IGFyZSBib3VuZCAoaW4gd2hpY2ggY2FzZSB0aGV5IHdpbGxcbiAgICAvLyBvbmx5IGJlIHJlZmxlY3RlZCBhbmQgbm90IGZvdW5kIGJ5IHRoZSBicm93c2VyKVxuICAgIGlmICh0aGlzLmZpbGwpIHtcbiAgICAgIHRoaXMuc2l6ZXMgfHw9ICcxMDB2dyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnd2lkdGgnLCB0aGlzLndpZHRoIS50b1N0cmluZygpKTtcbiAgICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnaGVpZ2h0JywgdGhpcy5oZWlnaHQhLnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnbG9hZGluZycsIHRoaXMuZ2V0TG9hZGluZ0JlaGF2aW9yKCkpO1xuICAgIHRoaXMuc2V0SG9zdEF0dHJpYnV0ZSgnZmV0Y2hwcmlvcml0eScsIHRoaXMuZ2V0RmV0Y2hQcmlvcml0eSgpKTtcblxuICAgIC8vIFRoZSBgZGF0YS1uZy1pbWdgIGF0dHJpYnV0ZSBmbGFncyBhbiBpbWFnZSBhcyB1c2luZyB0aGUgZGlyZWN0aXZlLCB0byBhbGxvd1xuICAgIC8vIGZvciBhbmFseXNpcyBvZiB0aGUgZGlyZWN0aXZlJ3MgcGVyZm9ybWFuY2UuXG4gICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCduZy1pbWcnLCAndHJ1ZScpO1xuXG4gICAgLy8gVGhlIGBzcmNgIGFuZCBgc3Jjc2V0YCBhdHRyaWJ1dGVzIHNob3VsZCBiZSBzZXQgbGFzdCBzaW5jZSBvdGhlciBhdHRyaWJ1dGVzXG4gICAgLy8gY291bGQgYWZmZWN0IHRoZSBpbWFnZSdzIGxvYWRpbmcgYmVoYXZpb3IuXG4gICAgY29uc3QgcmV3cml0dGVuU3Jjc2V0ID0gdGhpcy51cGRhdGVTcmNBbmRTcmNzZXQoKTtcblxuICAgIGlmICh0aGlzLnNpemVzKSB7XG4gICAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ3NpemVzJywgdGhpcy5zaXplcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VydmVyICYmIHRoaXMucHJpb3JpdHkpIHtcbiAgICAgIHRoaXMucHJlbG9hZExpbmtDcmVhdG9yLmNyZWF0ZVByZWxvYWRMaW5rVGFnKFxuICAgICAgICB0aGlzLnJlbmRlcmVyLFxuICAgICAgICB0aGlzLmdldFJld3JpdHRlblNyYygpLFxuICAgICAgICByZXdyaXR0ZW5TcmNzZXQsXG4gICAgICAgIHRoaXMuc2l6ZXMsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAbm9kb2MgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGFzc2VydE5vUG9zdEluaXRJbnB1dENoYW5nZSh0aGlzLCBjaGFuZ2VzLCBbXG4gICAgICAgICduZ1NyY3NldCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAncHJpb3JpdHknLFxuICAgICAgICAnZmlsbCcsXG4gICAgICAgICdsb2FkaW5nJyxcbiAgICAgICAgJ3NpemVzJyxcbiAgICAgICAgJ2xvYWRlclBhcmFtcycsXG4gICAgICAgICdkaXNhYmxlT3B0aW1pemVkU3Jjc2V0JyxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snbmdTcmMnXSAmJiAhY2hhbmdlc1snbmdTcmMnXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIGNvbnN0IG9sZFNyYyA9IHRoaXMuX3JlbmRlcmVkU3JjO1xuICAgICAgdGhpcy51cGRhdGVTcmNBbmRTcmNzZXQodHJ1ZSk7XG4gICAgICBjb25zdCBuZXdTcmMgPSB0aGlzLl9yZW5kZXJlZFNyYztcbiAgICAgIGlmICh0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsICYmIG9sZFNyYyAmJiBuZXdTcmMgJiYgb2xkU3JjICE9PSBuZXdTcmMpIHtcbiAgICAgICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxjcE9ic2VydmVyPy51cGRhdGVJbWFnZShvbGRTcmMsIG5ld1NyYyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZ0Rldk1vZGUgJiYgY2hhbmdlc1sncGxhY2Vob2xkZXInXT8uY3VycmVudFZhbHVlICYmICF0aGlzLmlzU2VydmVyKSB7XG4gICAgICBhc3NlcnRQbGFjZWhvbGRlckRpbWVuc2lvbnModGhpcywgdGhpcy5pbWdFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbGxJbWFnZUxvYWRlcihcbiAgICBjb25maWdXaXRob3V0Q3VzdG9tUGFyYW1zOiBPbWl0PEltYWdlTG9hZGVyQ29uZmlnLCAnbG9hZGVyUGFyYW1zJz4sXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGF1Z21lbnRlZENvbmZpZzogSW1hZ2VMb2FkZXJDb25maWcgPSBjb25maWdXaXRob3V0Q3VzdG9tUGFyYW1zO1xuICAgIGlmICh0aGlzLmxvYWRlclBhcmFtcykge1xuICAgICAgYXVnbWVudGVkQ29uZmlnLmxvYWRlclBhcmFtcyA9IHRoaXMubG9hZGVyUGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbWFnZUxvYWRlcihhdWdtZW50ZWRDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2FkaW5nQmVoYXZpb3IoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucHJpb3JpdHkgJiYgdGhpcy5sb2FkaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByaW9yaXR5ID8gJ2VhZ2VyJyA6ICdsYXp5JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmV0Y2hQcmlvcml0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByaW9yaXR5ID8gJ2hpZ2gnIDogJ2F1dG8nO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXdyaXR0ZW5TcmMoKTogc3RyaW5nIHtcbiAgICAvLyBJbWFnZUxvYWRlckNvbmZpZyBzdXBwb3J0cyBzZXR0aW5nIGEgd2lkdGggcHJvcGVydHkuIEhvd2V2ZXIsIHdlJ3JlIG5vdCBzZXR0aW5nIHdpZHRoIGhlcmVcbiAgICAvLyBiZWNhdXNlIGlmIHRoZSBkZXZlbG9wZXIgdXNlcyByZW5kZXJlZCB3aWR0aCBpbnN0ZWFkIG9mIGludHJpbnNpYyB3aWR0aCBpbiB0aGUgSFRNTCB3aWR0aFxuICAgIC8vIGF0dHJpYnV0ZSwgdGhlIGltYWdlIHJlcXVlc3RlZCBtYXkgYmUgdG9vIHNtYWxsIGZvciAyeCsgc2NyZWVucy5cbiAgICBpZiAoIXRoaXMuX3JlbmRlcmVkU3JjKSB7XG4gICAgICBjb25zdCBpbWdDb25maWcgPSB7c3JjOiB0aGlzLm5nU3JjfTtcbiAgICAgIC8vIENhY2hlIGNhbGN1bGF0ZWQgaW1hZ2Ugc3JjIHRvIHJldXNlIGl0IGxhdGVyIGluIHRoZSBjb2RlLlxuICAgICAgdGhpcy5fcmVuZGVyZWRTcmMgPSB0aGlzLmNhbGxJbWFnZUxvYWRlcihpbWdDb25maWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyZWRTcmM7XG4gIH1cblxuICBwcml2YXRlIGdldFJld3JpdHRlblNyY3NldCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHdpZHRoU3JjU2V0ID0gVkFMSURfV0lEVEhfREVTQ1JJUFRPUl9TUkNTRVQudGVzdCh0aGlzLm5nU3Jjc2V0KTtcbiAgICBjb25zdCBmaW5hbFNyY3MgPSB0aGlzLm5nU3Jjc2V0XG4gICAgICAuc3BsaXQoJywnKVxuICAgICAgLmZpbHRlcigoc3JjKSA9PiBzcmMgIT09ICcnKVxuICAgICAgLm1hcCgoc3JjU3RyKSA9PiB7XG4gICAgICAgIHNyY1N0ciA9IHNyY1N0ci50cmltKCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gd2lkdGhTcmNTZXQgPyBwYXJzZUZsb2F0KHNyY1N0cikgOiBwYXJzZUZsb2F0KHNyY1N0cikgKiB0aGlzLndpZHRoITtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY2FsbEltYWdlTG9hZGVyKHtzcmM6IHRoaXMubmdTcmMsIHdpZHRofSl9ICR7c3JjU3RyfWA7XG4gICAgICB9KTtcbiAgICByZXR1cm4gZmluYWxTcmNzLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldEF1dG9tYXRpY1NyY3NldCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnNpemVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNwb25zaXZlU3Jjc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpeGVkU3Jjc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXNwb25zaXZlU3Jjc2V0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qge2JyZWFrcG9pbnRzfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgbGV0IGZpbHRlcmVkQnJlYWtwb2ludHMgPSBicmVha3BvaW50cyE7XG4gICAgaWYgKHRoaXMuc2l6ZXM/LnRyaW0oKSA9PT0gJzEwMHZ3Jykge1xuICAgICAgLy8gU2luY2UgdGhpcyBpcyBhIGZ1bGwtc2NyZWVuLXdpZHRoIGltYWdlLCBvdXIgc3Jjc2V0IG9ubHkgbmVlZHMgdG8gaW5jbHVkZVxuICAgICAgLy8gYnJlYWtwb2ludHMgd2l0aCBmdWxsIHZpZXdwb3J0IHdpZHRocy5cbiAgICAgIGZpbHRlcmVkQnJlYWtwb2ludHMgPSBicmVha3BvaW50cyEuZmlsdGVyKChicCkgPT4gYnAgPj0gVklFV1BPUlRfQlJFQUtQT0lOVF9DVVRPRkYpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsU3JjcyA9IGZpbHRlcmVkQnJlYWtwb2ludHMubWFwKFxuICAgICAgKGJwKSA9PiBgJHt0aGlzLmNhbGxJbWFnZUxvYWRlcih7c3JjOiB0aGlzLm5nU3JjLCB3aWR0aDogYnB9KX0gJHticH13YCxcbiAgICApO1xuICAgIHJldHVybiBmaW5hbFNyY3Muam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3JjQW5kU3Jjc2V0KGZvcmNlU3JjUmVjYWxjID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChmb3JjZVNyY1JlY2FsYykge1xuICAgICAgLy8gUmVzZXQgY2FjaGVkIHZhbHVlLCBzbyB0aGF0IHRoZSBmb2xsb3d1cCBgZ2V0UmV3cml0dGVuU3JjKClgIGNhbGxcbiAgICAgIC8vIHdpbGwgcmVjYWxjdWxhdGUgaXQgYW5kIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICB0aGlzLl9yZW5kZXJlZFNyYyA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmV3cml0dGVuU3JjID0gdGhpcy5nZXRSZXdyaXR0ZW5TcmMoKTtcbiAgICB0aGlzLnNldEhvc3RBdHRyaWJ1dGUoJ3NyYycsIHJld3JpdHRlblNyYyk7XG5cbiAgICBsZXQgcmV3cml0dGVuU3Jjc2V0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubmdTcmNzZXQpIHtcbiAgICAgIHJld3JpdHRlblNyY3NldCA9IHRoaXMuZ2V0UmV3cml0dGVuU3Jjc2V0KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNob3VsZEdlbmVyYXRlQXV0b21hdGljU3Jjc2V0KCkpIHtcbiAgICAgIHJld3JpdHRlblNyY3NldCA9IHRoaXMuZ2V0QXV0b21hdGljU3Jjc2V0KCk7XG4gICAgfVxuXG4gICAgaWYgKHJld3JpdHRlblNyY3NldCkge1xuICAgICAgdGhpcy5zZXRIb3N0QXR0cmlidXRlKCdzcmNzZXQnLCByZXdyaXR0ZW5TcmNzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmV3cml0dGVuU3Jjc2V0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaXhlZFNyY3NldCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbmFsU3JjcyA9IERFTlNJVFlfU1JDU0VUX01VTFRJUExJRVJTLm1hcChcbiAgICAgIChtdWx0aXBsaWVyKSA9PlxuICAgICAgICBgJHt0aGlzLmNhbGxJbWFnZUxvYWRlcih7XG4gICAgICAgICAgc3JjOiB0aGlzLm5nU3JjLFxuICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoISAqIG11bHRpcGxpZXIsXG4gICAgICAgIH0pfSAke211bHRpcGxpZXJ9eGAsXG4gICAgKTtcbiAgICByZXR1cm4gZmluYWxTcmNzLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZEdlbmVyYXRlQXV0b21hdGljU3Jjc2V0KCk6IGJvb2xlYW4ge1xuICAgIGxldCBvdmVyc2l6ZWRJbWFnZSA9IGZhbHNlO1xuICAgIGlmICghdGhpcy5zaXplcykge1xuICAgICAgb3ZlcnNpemVkSW1hZ2UgPVxuICAgICAgICB0aGlzLndpZHRoISA+IEZJWEVEX1NSQ1NFVF9XSURUSF9MSU1JVCB8fCB0aGlzLmhlaWdodCEgPiBGSVhFRF9TUkNTRVRfSEVJR0hUX0xJTUlUO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuZGlzYWJsZU9wdGltaXplZFNyY3NldCAmJlxuICAgICAgIXRoaXMuc3Jjc2V0ICYmXG4gICAgICB0aGlzLmltYWdlTG9hZGVyICE9PSBub29wSW1hZ2VMb2FkZXIgJiZcbiAgICAgICFvdmVyc2l6ZWRJbWFnZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBpbWFnZSB1cmwgZm9ybWF0dGVkIGZvciB1c2Ugd2l0aCB0aGUgQ1NTIGJhY2tncm91bmQtaW1hZ2UgcHJvcGVydHkuIEV4cGVjdHMgb25lIG9mOlxuICAgKiAqIEEgYmFzZTY0IGVuY29kZWQgaW1hZ2UsIHdoaWNoIGlzIHdyYXBwZWQgYW5kIHBhc3NlZCB0aHJvdWdoLlxuICAgKiAqIEEgYm9vbGVhbi4gSWYgdHJ1ZSwgY2FsbHMgdGhlIGltYWdlIGxvYWRlciB0byBnZW5lcmF0ZSBhIHNtYWxsIHBsYWNlaG9sZGVyIHVybC5cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVQbGFjZWhvbGRlcihwbGFjZWhvbGRlcklucHV0OiBzdHJpbmcgfCBib29sZWFuKTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwge1xuICAgIGNvbnN0IHtwbGFjZWhvbGRlclJlc29sdXRpb259ID0gdGhpcy5jb25maWc7XG4gICAgaWYgKHBsYWNlaG9sZGVySW5wdXQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBgdXJsKCR7dGhpcy5jYWxsSW1hZ2VMb2FkZXIoe1xuICAgICAgICBzcmM6IHRoaXMubmdTcmMsXG4gICAgICAgIHdpZHRoOiBwbGFjZWhvbGRlclJlc29sdXRpb24sXG4gICAgICAgIGlzUGxhY2Vob2xkZXI6IHRydWUsXG4gICAgICB9KX0pYDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbGFjZWhvbGRlcklucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGB1cmwoJHtwbGFjZWhvbGRlcklucHV0fSlgO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGJsdXIgc2hvdWxkIGJlIGFwcGxpZWQsIGJhc2VkIG9uIGFuIG9wdGlvbmFsIGJvb2xlYW5cbiAgICogcHJvcGVydHkgYGJsdXJgIHdpdGhpbiB0aGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgYHBsYWNlaG9sZGVyQ29uZmlnYC5cbiAgICovXG4gIHByaXZhdGUgc2hvdWxkQmx1clBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyQ29uZmlnPzogSW1hZ2VQbGFjZWhvbGRlckNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICghcGxhY2Vob2xkZXJDb25maWcgfHwgIXBsYWNlaG9sZGVyQ29uZmlnLmhhc093blByb3BlcnR5KCdibHVyJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbihwbGFjZWhvbGRlckNvbmZpZy5ibHVyKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUGxhY2Vob2xkZXJPbkxvYWQoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VEZXRlY3RvclJlZiA9IHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICAgIGNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGltZywgJ2xvYWQnLCBjYWxsYmFjayk7XG4gICAgY29uc3QgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKiogQG5vZG9jICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGlmICghdGhpcy5wcmlvcml0eSAmJiB0aGlzLl9yZW5kZXJlZFNyYyAhPT0gbnVsbCAmJiB0aGlzLmxjcE9ic2VydmVyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubGNwT2JzZXJ2ZXIudW5yZWdpc3RlckltYWdlKHRoaXMuX3JlbmRlcmVkU3JjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEhvc3RBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pbWdFbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqKioqIEhlbHBlcnMgKioqKiovXG5cbi8qKlxuICogU29ydHMgcHJvdmlkZWQgY29uZmlnIGJyZWFrcG9pbnRzIGFuZCB1c2VzIGRlZmF1bHRzLlxuICovXG5mdW5jdGlvbiBwcm9jZXNzQ29uZmlnKGNvbmZpZzogSW1hZ2VDb25maWcpOiBJbWFnZUNvbmZpZyB7XG4gIGxldCBzb3J0ZWRCcmVha3BvaW50czoge2JyZWFrcG9pbnRzPzogbnVtYmVyW119ID0ge307XG4gIGlmIChjb25maWcuYnJlYWtwb2ludHMpIHtcbiAgICBzb3J0ZWRCcmVha3BvaW50cy5icmVha3BvaW50cyA9IGNvbmZpZy5icmVha3BvaW50cy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIElNQUdFX0NPTkZJR19ERUZBVUxUUywgY29uZmlnLCBzb3J0ZWRCcmVha3BvaW50cyk7XG59XG5cbi8qKioqKiBBc3NlcnQgZnVuY3Rpb25zICoqKioqL1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlcmUgaXMgbm8gYHNyY2Agc2V0IG9uIGEgaG9zdCBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nU3JjKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLnNyYykge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLlVORVhQRUNURURfU1JDX0FUVFIsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IGJvdGggXFxgc3JjXFxgIGFuZCBcXGBuZ1NyY1xcYCBoYXZlIGJlZW4gc2V0LiBgICtcbiAgICAgICAgYFN1cHBseWluZyBib3RoIG9mIHRoZXNlIGF0dHJpYnV0ZXMgYnJlYWtzIGxhenkgbG9hZGluZy4gYCArXG4gICAgICAgIGBUaGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgc2V0cyBcXGBzcmNcXGAgaXRzZWxmIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBcXGBuZ1NyY1xcYC4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcGxlYXNlIHJlbW92ZSB0aGUgXFxgc3JjXFxgIGF0dHJpYnV0ZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZXJlIGlzIG5vIGBzcmNzZXRgIHNldCBvbiBhIGhvc3QgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Db25mbGljdGluZ1NyY3NldChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKGRpci5zcmNzZXQpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5VTkVYUEVDVEVEX1NSQ1NFVF9BVFRSLFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBib3RoIFxcYHNyY3NldFxcYCBhbmQgXFxgbmdTcmNzZXRcXGAgaGF2ZSBiZWVuIHNldC4gYCArXG4gICAgICAgIGBTdXBwbHlpbmcgYm90aCBvZiB0aGVzZSBhdHRyaWJ1dGVzIGJyZWFrcyBsYXp5IGxvYWRpbmcuIGAgK1xuICAgICAgICBgVGhlIE5nT3B0aW1pemVkSW1hZ2UgZGlyZWN0aXZlIHNldHMgXFxgc3Jjc2V0XFxgIGl0c2VsZiBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYCArXG4gICAgICAgIGBcXGBuZ1NyY3NldFxcYC4gVG8gZml4IHRoaXMsIHBsZWFzZSByZW1vdmUgdGhlIFxcYHNyY3NldFxcYCBhdHRyaWJ1dGUuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYG5nU3JjYCBpcyBub3QgYSBCYXNlNjQtZW5jb2RlZCBpbWFnZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm90QmFzZTY0SW1hZ2UoZGlyOiBOZ09wdGltaXplZEltYWdlKSB7XG4gIGxldCBuZ1NyYyA9IGRpci5uZ1NyYy50cmltKCk7XG4gIGlmIChuZ1NyYy5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgaWYgKG5nU3JjLmxlbmd0aCA+IEJBU0U2NF9JTUdfTUFYX0xFTkdUSF9JTl9FUlJPUikge1xuICAgICAgbmdTcmMgPSBuZ1NyYy5zdWJzdHJpbmcoMCwgQkFTRTY0X0lNR19NQVhfTEVOR1RIX0lOX0VSUk9SKSArICcuLi4nO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMsIGZhbHNlKX0gXFxgbmdTcmNcXGAgaXMgYSBCYXNlNjQtZW5jb2RlZCBzdHJpbmcgYCArXG4gICAgICAgIGAoJHtuZ1NyY30pLiBOZ09wdGltaXplZEltYWdlIGRvZXMgbm90IHN1cHBvcnQgQmFzZTY0LWVuY29kZWQgc3RyaW5ncy4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICtcbiAgICAgICAgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHN0YW5kYXJkIFxcYHNyY1xcYCBhdHRyaWJ1dGUgaW5zdGVhZC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSAnc2l6ZXMnIG9ubHkgaW5jbHVkZXMgcmVzcG9uc2l2ZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29tcGxleFNpemVzKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBsZXQgc2l6ZXMgPSBkaXIuc2l6ZXM7XG4gIGlmIChzaXplcz8ubWF0Y2goLygoXFwpfCwpXFxzfF4pXFxkK3B4LykpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMsIGZhbHNlKX0gXFxgc2l6ZXNcXGAgd2FzIHNldCB0byBhIHN0cmluZyBpbmNsdWRpbmcgYCArXG4gICAgICAgIGBwaXhlbCB2YWx1ZXMuIEZvciBhdXRvbWF0aWMgXFxgc3Jjc2V0XFxgIGdlbmVyYXRpb24sIFxcYHNpemVzXFxgIG11c3Qgb25seSBpbmNsdWRlIHJlc3BvbnNpdmUgYCArXG4gICAgICAgIGB2YWx1ZXMsIHN1Y2ggYXMgXFxgc2l6ZXM9XCI1MHZ3XCJcXGAgb3IgXFxgc2l6ZXM9XCIobWluLXdpZHRoOiA3NjhweCkgNTB2dywgMTAwdndcIlxcYC4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgbW9kaWZ5IHRoZSBcXGBzaXplc1xcYCBhdHRyaWJ1dGUsIG9yIHByb3ZpZGUgeW91ciBvd24gXFxgbmdTcmNzZXRcXGAgdmFsdWUgZGlyZWN0bHkuYCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGxhY2Vob2xkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgYXNzZXJ0Tm9QbGFjZWhvbGRlckNvbmZpZ1dpdGhvdXRQbGFjZWhvbGRlcihkaXIpO1xuICBhc3NlcnROb1JlbGF0aXZlUGxhY2Vob2xkZXJXaXRob3V0TG9hZGVyKGRpciwgaW1hZ2VMb2FkZXIpO1xuICBhc3NlcnROb092ZXJzaXplZERhdGFVcmwoZGlyKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHBsYWNlaG9sZGVyQ29uZmlnIGlzbid0IGJlaW5nIHVzZWQgd2l0aG91dCBwbGFjZWhvbGRlclxuICovXG5mdW5jdGlvbiBhc3NlcnROb1BsYWNlaG9sZGVyQ29uZmlnV2l0aG91dFBsYWNlaG9sZGVyKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLnBsYWNlaG9sZGVyQ29uZmlnICYmICFkaXIucGxhY2Vob2xkZXIpIHtcbiAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhcbiAgICAgICAgZGlyLm5nU3JjLFxuICAgICAgICBmYWxzZSxcbiAgICAgICl9IFxcYHBsYWNlaG9sZGVyQ29uZmlnXFxgIG9wdGlvbnMgd2VyZSBwcm92aWRlZCBmb3IgYW4gYCArXG4gICAgICAgIGBpbWFnZSB0aGF0IGRvZXMgbm90IHVzZSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlLCBhbmQgd2lsbCBoYXZlIG5vIGVmZmVjdC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBhIHJlbGF0aXZlIFVSTCBwbGFjZWhvbGRlciBpcyBzcGVjaWZpZWQsIGJ1dCBubyBsb2FkZXIgaXMgcHJlc2VudCB0byBwcm92aWRlIHRoZSBzbWFsbFxuICogaW1hZ2UuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUmVsYXRpdmVQbGFjZWhvbGRlcldpdGhvdXRMb2FkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGRpci5wbGFjZWhvbGRlciA9PT0gdHJ1ZSAmJiBpbWFnZUxvYWRlciA9PT0gbm9vcEltYWdlTG9hZGVyKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuTUlTU0lOR19ORUNFU1NBUllfTE9BREVSLFxuICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlIGJ1dCBgICtcbiAgICAgICAgYG5vIGltYWdlIGxvYWRlciBpcyBjb25maWd1cmVkIChpLmUuIHRoZSBkZWZhdWx0IG9uZSBpcyBiZWluZyB1c2VkKSwgYCArXG4gICAgICAgIGB3aGljaCB3b3VsZCByZXN1bHQgaW4gdGhlIHNhbWUgaW1hZ2UgYmVpbmcgdXNlZCBmb3IgdGhlIHByaW1hcnkgaW1hZ2UgYW5kIGl0cyBwbGFjZWhvbGRlci4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgcHJvdmlkZSBhIGxvYWRlciBvciByZW1vdmUgdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbWFnZS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBvciB0aHJvd3MgYW4gZXJyb3IgaWYgYW4gb3ZlcnNpemVkIGRhdGFVUkwgcGxhY2Vob2xkZXIgaXMgcHJvdmlkZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vT3ZlcnNpemVkRGF0YVVybChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKFxuICAgIGRpci5wbGFjZWhvbGRlciAmJlxuICAgIHR5cGVvZiBkaXIucGxhY2Vob2xkZXIgPT09ICdzdHJpbmcnICYmXG4gICAgZGlyLnBsYWNlaG9sZGVyLnN0YXJ0c1dpdGgoJ2RhdGE6JylcbiAgKSB7XG4gICAgaWYgKGRpci5wbGFjZWhvbGRlci5sZW5ndGggPiBEQVRBX1VSTF9FUlJPUl9MSU1JVCkge1xuICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5PVkVSU0laRURfUExBQ0VIT0xERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoXG4gICAgICAgICAgZGlyLm5nU3JjLFxuICAgICAgICApfSB0aGUgXFxgcGxhY2Vob2xkZXJcXGAgYXR0cmlidXRlIGlzIHNldCB0byBhIGRhdGEgVVJMIHdoaWNoIGlzIGxvbmdlciBgICtcbiAgICAgICAgICBgdGhhbiAke0RBVEFfVVJMX0VSUk9SX0xJTUlUfSBjaGFyYWN0ZXJzLiBUaGlzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLCBhcyBsYXJnZSBpbmxpbmUgcGxhY2Vob2xkZXJzIGAgK1xuICAgICAgICAgIGBkaXJlY3RseSBpbmNyZWFzZSB0aGUgYnVuZGxlIHNpemUgb2YgQW5ndWxhciBhbmQgaHVydCBwYWdlIGxvYWQgcGVyZm9ybWFuY2UuIFRvIGZpeCB0aGlzLCBnZW5lcmF0ZSBgICtcbiAgICAgICAgICBgYSBzbWFsbGVyIGRhdGEgVVJMIHBsYWNlaG9sZGVyLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGlyLnBsYWNlaG9sZGVyLmxlbmd0aCA+IERBVEFfVVJMX1dBUk5fTElNSVQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuT1ZFUlNJWkVEX1BMQUNFSE9MREVSLFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoXG4gICAgICAgICAgICBkaXIubmdTcmMsXG4gICAgICAgICAgKX0gdGhlIFxcYHBsYWNlaG9sZGVyXFxgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYSBkYXRhIFVSTCB3aGljaCBpcyBsb25nZXIgYCArXG4gICAgICAgICAgICBgdGhhbiAke0RBVEFfVVJMX1dBUk5fTElNSVR9IGNoYXJhY3RlcnMuIFRoaXMgaXMgZGlzY291cmFnZWQsIGFzIGxhcmdlIGlubGluZSBwbGFjZWhvbGRlcnMgYCArXG4gICAgICAgICAgICBgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIGJ1bmRsZSBzaXplIG9mIEFuZ3VsYXIgYW5kIGh1cnQgcGFnZSBsb2FkIHBlcmZvcm1hbmNlLiBGb3IgYmV0dGVyIGxvYWRpbmcgcGVyZm9ybWFuY2UsIGAgK1xuICAgICAgICAgICAgYGdlbmVyYXRlIGEgc21hbGxlciBkYXRhIFVSTCBwbGFjZWhvbGRlci5gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSBgbmdTcmNgIGlzIG5vdCBhIEJsb2IgVVJMLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb3RCbG9iVXJsKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBjb25zdCBuZ1NyYyA9IGRpci5uZ1NyYy50cmltKCk7XG4gIGlmIChuZ1NyYy5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgbmdTcmNcXGAgd2FzIHNldCB0byBhIGJsb2IgVVJMICgke25nU3JjfSkuIGAgK1xuICAgICAgICBgQmxvYiBVUkxzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZS4gYCArXG4gICAgICAgIGBUbyBmaXggdGhpcywgZGlzYWJsZSB0aGUgTmdPcHRpbWl6ZWRJbWFnZSBkaXJlY3RpdmUgZm9yIHRoaXMgZWxlbWVudCBgICtcbiAgICAgICAgYGJ5IHJlbW92aW5nIFxcYG5nU3JjXFxgIGFuZCB1c2luZyBhIHJlZ3VsYXIgXFxgc3JjXFxgIGF0dHJpYnV0ZSBpbnN0ZWFkLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGlucHV0IGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5SW5wdXQoZGlyOiBOZ09wdGltaXplZEltYWdlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgY29uc3QgaXNFbXB0eVN0cmluZyA9IGlzU3RyaW5nICYmIHZhbHVlLnRyaW0oKSA9PT0gJyc7XG4gIGlmICghaXNTdHJpbmcgfHwgaXNFbXB0eVN0cmluZykge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IFxcYCR7bmFtZX1cXGAgaGFzIGFuIGludmFsaWQgdmFsdWUgYCArXG4gICAgICAgIGAoXFxgJHt2YWx1ZX1cXGApLiBUbyBmaXggdGhpcywgY2hhbmdlIHRoZSB2YWx1ZSB0byBhIG5vbi1lbXB0eSBzdHJpbmcuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYG5nU3Jjc2V0YCBpcyBpbiBhIHZhbGlkIGZvcm1hdCwgZS5nLiBcIjEwMHcsIDIwMHdcIiBvciBcIjF4LCAyeFwiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWROZ1NyY3NldChkaXI6IE5nT3B0aW1pemVkSW1hZ2UsIHZhbHVlOiB1bmtub3duKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47XG4gIGFzc2VydE5vbkVtcHR5SW5wdXQoZGlyLCAnbmdTcmNzZXQnLCB2YWx1ZSk7XG4gIGNvbnN0IHN0cmluZ1ZhbCA9IHZhbHVlIGFzIHN0cmluZztcbiAgY29uc3QgaXNWYWxpZFdpZHRoRGVzY3JpcHRvciA9IFZBTElEX1dJRFRIX0RFU0NSSVBUT1JfU1JDU0VULnRlc3Qoc3RyaW5nVmFsKTtcbiAgY29uc3QgaXNWYWxpZERlbnNpdHlEZXNjcmlwdG9yID0gVkFMSURfREVOU0lUWV9ERVNDUklQVE9SX1NSQ1NFVC50ZXN0KHN0cmluZ1ZhbCk7XG5cbiAgaWYgKGlzVmFsaWREZW5zaXR5RGVzY3JpcHRvcikge1xuICAgIGFzc2VydFVuZGVyRGVuc2l0eUNhcChkaXIsIHN0cmluZ1ZhbCk7XG4gIH1cblxuICBjb25zdCBpc1ZhbGlkU3Jjc2V0ID0gaXNWYWxpZFdpZHRoRGVzY3JpcHRvciB8fCBpc1ZhbGlkRGVuc2l0eURlc2NyaXB0b3I7XG4gIGlmICghaXNWYWxpZFNyY3NldCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IFxcYG5nU3Jjc2V0XFxgIGhhcyBhbiBpbnZhbGlkIHZhbHVlIChcXGAke3ZhbHVlfVxcYCkuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHN1cHBseSBcXGBuZ1NyY3NldFxcYCB1c2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9uZSBvciBtb3JlIHdpZHRoIGAgK1xuICAgICAgICBgZGVzY3JpcHRvcnMgKGUuZy4gXCIxMDB3LCAyMDB3XCIpIG9yIGRlbnNpdHkgZGVzY3JpcHRvcnMgKGUuZy4gXCIxeCwgMnhcIikuYCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFVuZGVyRGVuc2l0eUNhcChkaXI6IE5nT3B0aW1pemVkSW1hZ2UsIHZhbHVlOiBzdHJpbmcpIHtcbiAgY29uc3QgdW5kZXJEZW5zaXR5Q2FwID0gdmFsdWVcbiAgICAuc3BsaXQoJywnKVxuICAgIC5ldmVyeSgobnVtKSA9PiBudW0gPT09ICcnIHx8IHBhcnNlRmxvYXQobnVtKSA8PSBBQlNPTFVURV9TUkNTRVRfREVOU0lUWV9DQVApO1xuICBpZiAoIXVuZGVyRGVuc2l0eUNhcCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBuZ1NyY3NldFxcYCBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBpbWFnZSBkZW5zaXR5OmAgK1xuICAgICAgICBgXFxgJHt2YWx1ZX1cXGAuIE5nT3B0aW1pemVkSW1hZ2UgZ2VuZXJhbGx5IHJlY29tbWVuZHMgYSBtYXggaW1hZ2UgZGVuc2l0eSBvZiBgICtcbiAgICAgICAgYCR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggYnV0IHN1cHBvcnRzIGltYWdlIGRlbnNpdGllcyB1cCB0byBgICtcbiAgICAgICAgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXguIFRoZSBodW1hbiBleWUgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gaW1hZ2UgZGVuc2l0aWVzIGAgK1xuICAgICAgICBgZ3JlYXRlciB0aGFuICR7UkVDT01NRU5ERURfU1JDU0VUX0RFTlNJVFlfQ0FQfXggLSB3aGljaCBtYWtlcyB0aGVtIHVubmVjZXNzYXJ5IGZvciBgICtcbiAgICAgICAgYG1vc3QgdXNlIGNhc2VzLiBJbWFnZXMgdGhhdCB3aWxsIGJlIHBpbmNoLXpvb21lZCBhcmUgdHlwaWNhbGx5IHRoZSBwcmltYXJ5IHVzZSBjYXNlIGZvciBgICtcbiAgICAgICAgYCR7QUJTT0xVVEVfU1JDU0VUX0RFTlNJVFlfQ0FQfXggaW1hZ2VzLiBQbGVhc2UgcmVtb3ZlIHRoZSBoaWdoIGRlbnNpdHkgZGVzY3JpcHRvciBhbmQgdHJ5IGFnYWluLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBgUnVudGltZUVycm9yYCBpbnN0YW5jZSB0byByZXByZXNlbnQgYSBzaXR1YXRpb24gd2hlbiBhbiBpbnB1dCBpcyBzZXQgYWZ0ZXJcbiAqIHRoZSBkaXJlY3RpdmUgaGFzIGluaXRpYWxpemVkLlxuICovXG5mdW5jdGlvbiBwb3N0SW5pdElucHV0Q2hhbmdlRXJyb3IoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbnB1dE5hbWU6IHN0cmluZyk6IHt9IHtcbiAgbGV0IHJlYXNvbiE6IHN0cmluZztcbiAgaWYgKGlucHV0TmFtZSA9PT0gJ3dpZHRoJyB8fCBpbnB1dE5hbWUgPT09ICdoZWlnaHQnKSB7XG4gICAgcmVhc29uID1cbiAgICAgIGBDaGFuZ2luZyBcXGAke2lucHV0TmFtZX1cXGAgbWF5IHJlc3VsdCBpbiBkaWZmZXJlbnQgYXR0cmlidXRlIHZhbHVlIGAgK1xuICAgICAgYGFwcGxpZWQgdG8gdGhlIHVuZGVybHlpbmcgaW1hZ2UgZWxlbWVudCBhbmQgY2F1c2UgbGF5b3V0IHNoaWZ0cyBvbiBhIHBhZ2UuYDtcbiAgfSBlbHNlIHtcbiAgICByZWFzb24gPVxuICAgICAgYENoYW5naW5nIHRoZSBcXGAke2lucHV0TmFtZX1cXGAgd291bGQgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHVuZGVybHlpbmcgYCArXG4gICAgICBgaW1hZ2UgZWxlbWVudCwgYmVjYXVzZSB0aGUgcmVzb3VyY2UgbG9hZGluZyBoYXMgYWxyZWFkeSBvY2N1cnJlZC5gO1xuICB9XG4gIHJldHVybiBuZXcgUnVudGltZUVycm9yKFxuICAgIFJ1bnRpbWVFcnJvckNvZGUuVU5FWFBFQ1RFRF9JTlBVVF9DSEFOR0UsXG4gICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBcXGAke2lucHV0TmFtZX1cXGAgd2FzIHVwZGF0ZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIGAgK1xuICAgICAgYFRoZSBOZ09wdGltaXplZEltYWdlIGRpcmVjdGl2ZSB3aWxsIG5vdCByZWFjdCB0byB0aGlzIGlucHV0IGNoYW5nZS4gJHtyZWFzb259IGAgK1xuICAgICAgYFRvIGZpeCB0aGlzLCBlaXRoZXIgc3dpdGNoIFxcYCR7aW5wdXROYW1lfVxcYCB0byBhIHN0YXRpYyB2YWx1ZSBgICtcbiAgICAgIGBvciB3cmFwIHRoZSBpbWFnZSBlbGVtZW50IGluIGFuICpuZ0lmIHRoYXQgaXMgZ2F0ZWQgb24gdGhlIG5lY2Vzc2FyeSB2YWx1ZS5gLFxuICApO1xufVxuXG4vKipcbiAqIFZlcmlmeSB0aGF0IG5vbmUgb2YgdGhlIGxpc3RlZCBpbnB1dHMgaGFzIGNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vUG9zdEluaXRJbnB1dENoYW5nZShcbiAgZGlyOiBOZ09wdGltaXplZEltYWdlLFxuICBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzLFxuICBpbnB1dHM6IHN0cmluZ1tdLFxuKSB7XG4gIGlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGlzVXBkYXRlZCA9IGNoYW5nZXMuaGFzT3duUHJvcGVydHkoaW5wdXQpO1xuICAgIGlmIChpc1VwZGF0ZWQgJiYgIWNoYW5nZXNbaW5wdXRdLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgaWYgKGlucHV0ID09PSAnbmdTcmMnKSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGBuZ1NyY2AgaW5wdXQgY2hhbmdlcywgd2UgZGV0ZWN0IHRoYXQgb25seSBpbiB0aGVcbiAgICAgICAgLy8gYG5nT25DaGFuZ2VzYCBob29rLCB0aHVzIHRoZSBgbmdTcmNgIGlzIGFscmVhZHkgc2V0LiBXZSB1c2VcbiAgICAgICAgLy8gYG5nU3JjYCBpbiB0aGUgZXJyb3IgbWVzc2FnZSwgc28gd2UgdXNlIGEgcHJldmlvdXMgdmFsdWUsIGJ1dFxuICAgICAgICAvLyBub3QgdGhlIHVwZGF0ZWQgb25lIGluIGl0LlxuICAgICAgICBkaXIgPSB7bmdTcmM6IGNoYW5nZXNbaW5wdXRdLnByZXZpb3VzVmFsdWV9IGFzIE5nT3B0aW1pemVkSW1hZ2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBwb3N0SW5pdElucHV0Q2hhbmdlRXJyb3IoZGlyLCBpbnB1dCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IGEgc3BlY2lmaWVkIGlucHV0IGlzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5mdW5jdGlvbiBhc3NlcnRHcmVhdGVyVGhhblplcm8oZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbnB1dFZhbHVlOiB1bmtub3duLCBpbnB1dE5hbWU6IHN0cmluZykge1xuICBjb25zdCB2YWxpZE51bWJlciA9IHR5cGVvZiBpbnB1dFZhbHVlID09PSAnbnVtYmVyJyAmJiBpbnB1dFZhbHVlID4gMDtcbiAgY29uc3QgdmFsaWRTdHJpbmcgPVxuICAgIHR5cGVvZiBpbnB1dFZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KGlucHV0VmFsdWUudHJpbSgpKSAmJiBwYXJzZUludChpbnB1dFZhbHVlKSA+IDA7XG4gIGlmICghdmFsaWROdW1iZXIgJiYgIXZhbGlkU3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gXFxgJHtpbnB1dE5hbWV9XFxgIGhhcyBhbiBpbnZhbGlkIHZhbHVlLiBgICtcbiAgICAgICAgYFRvIGZpeCB0aGlzLCBwcm92aWRlIFxcYCR7aW5wdXROYW1lfVxcYCBhcyBhIG51bWJlciBncmVhdGVyIHRoYW4gMC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSByZW5kZXJlZCBpbWFnZSBpcyBub3QgdmlzdWFsbHkgZGlzdG9ydGVkLiBFZmZlY3RpdmVseSB0aGlzIGlzIGNoZWNraW5nOlxuICogLSBXaGV0aGVyIHRoZSBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYXR0cmlidXRlcyByZWZsZWN0IHRoZSBhY3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgaW1hZ2UuXG4gKiAtIFdoZXRoZXIgaW1hZ2Ugc3R5bGluZyBpcyBcImNvcnJlY3RcIiAoc2VlIGJlbG93IGZvciBhIGxvbmdlciBleHBsYW5hdGlvbikuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vSW1hZ2VEaXN0b3J0aW9uKFxuICBkaXI6IE5nT3B0aW1pemVkSW1hZ2UsXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbikge1xuICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHJlbmRlcmVyLmxpc3RlbihpbWcsICdsb2FkJywgKCkgPT4ge1xuICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuKCk7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGltZyk7XG4gICAgbGV0IHJlbmRlcmVkV2lkdGggPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkdGgnKSk7XG4gICAgbGV0IHJlbmRlcmVkSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpKTtcbiAgICBjb25zdCBib3hTaXppbmcgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcblxuICAgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgY29uc3QgcGFkZGluZ1RvcCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1yaWdodCcpO1xuICAgICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWxlZnQnKTtcbiAgICAgIHJlbmRlcmVkV2lkdGggLT0gcGFyc2VGbG9hdChwYWRkaW5nUmlnaHQpICsgcGFyc2VGbG9hdChwYWRkaW5nTGVmdCk7XG4gICAgICByZW5kZXJlZEhlaWdodCAtPSBwYXJzZUZsb2F0KHBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChwYWRkaW5nQm90dG9tKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZEFzcGVjdFJhdGlvID0gcmVuZGVyZWRXaWR0aCAvIHJlbmRlcmVkSGVpZ2h0O1xuICAgIGNvbnN0IG5vblplcm9SZW5kZXJlZERpbWVuc2lvbnMgPSByZW5kZXJlZFdpZHRoICE9PSAwICYmIHJlbmRlcmVkSGVpZ2h0ICE9PSAwO1xuXG4gICAgY29uc3QgaW50cmluc2ljV2lkdGggPSBpbWcubmF0dXJhbFdpZHRoO1xuICAgIGNvbnN0IGludHJpbnNpY0hlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0O1xuICAgIGNvbnN0IGludHJpbnNpY0FzcGVjdFJhdGlvID0gaW50cmluc2ljV2lkdGggLyBpbnRyaW5zaWNIZWlnaHQ7XG5cbiAgICBjb25zdCBzdXBwbGllZFdpZHRoID0gZGlyLndpZHRoITtcbiAgICBjb25zdCBzdXBwbGllZEhlaWdodCA9IGRpci5oZWlnaHQhO1xuICAgIGNvbnN0IHN1cHBsaWVkQXNwZWN0UmF0aW8gPSBzdXBwbGllZFdpZHRoIC8gc3VwcGxpZWRIZWlnaHQ7XG5cbiAgICAvLyBUb2xlcmFuY2UgaXMgdXNlZCB0byBhY2NvdW50IGZvciB0aGUgaW1wYWN0IG9mIHN1YnBpeGVsIHJlbmRlcmluZy5cbiAgICAvLyBEdWUgdG8gc3VicGl4ZWwgcmVuZGVyaW5nLCB0aGUgcmVuZGVyZWQsIGludHJpbnNpYywgYW5kIHN1cHBsaWVkXG4gICAgLy8gYXNwZWN0IHJhdGlvcyBvZiBhIGNvcnJlY3RseSBjb25maWd1cmVkIGltYWdlIG1heSBub3QgZXhhY3RseSBtYXRjaC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgYSBgd2lkdGg9NDAzMCBoZWlnaHQ9MzAyMGAgaW1hZ2UgbWlnaHQgaGF2ZSBhIHJlbmRlcmVkXG4gICAgLy8gc2l6ZSBvZiBcIjEwNjJ3LCA3OTYuNDhoXCIuIChBbiBhc3BlY3QgcmF0aW8gb2YgMS4zMzQuLi4gdnMuIDEuMzMzLi4uKVxuICAgIGNvbnN0IGluYWNjdXJhdGVEaW1lbnNpb25zID1cbiAgICAgIE1hdGguYWJzKHN1cHBsaWVkQXNwZWN0UmF0aW8gLSBpbnRyaW5zaWNBc3BlY3RSYXRpbykgPiBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFO1xuICAgIGNvbnN0IHN0eWxpbmdEaXN0b3J0aW9uID1cbiAgICAgIG5vblplcm9SZW5kZXJlZERpbWVuc2lvbnMgJiZcbiAgICAgIE1hdGguYWJzKGludHJpbnNpY0FzcGVjdFJhdGlvIC0gcmVuZGVyZWRBc3BlY3RSYXRpbykgPiBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFO1xuXG4gICAgaWYgKGluYWNjdXJhdGVEaW1lbnNpb25zKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBpbWFnZSBkb2VzIG5vdCBtYXRjaCBgICtcbiAgICAgICAgICAgIGB0aGUgYXNwZWN0IHJhdGlvIGluZGljYXRlZCBieSB0aGUgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzLiBgICtcbiAgICAgICAgICAgIGBcXG5JbnRyaW5zaWMgaW1hZ2Ugc2l6ZTogJHtpbnRyaW5zaWNXaWR0aH13IHggJHtpbnRyaW5zaWNIZWlnaHR9aCBgICtcbiAgICAgICAgICAgIGAoYXNwZWN0LXJhdGlvOiAke3JvdW5kKFxuICAgICAgICAgICAgICBpbnRyaW5zaWNBc3BlY3RSYXRpbyxcbiAgICAgICAgICAgICl9KS4gXFxuU3VwcGxpZWQgd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzOiBgICtcbiAgICAgICAgICAgIGAke3N1cHBsaWVkV2lkdGh9dyB4ICR7c3VwcGxpZWRIZWlnaHR9aCAoYXNwZWN0LXJhdGlvOiAke3JvdW5kKFxuICAgICAgICAgICAgICBzdXBwbGllZEFzcGVjdFJhdGlvLFxuICAgICAgICAgICAgKX0pLiBgICtcbiAgICAgICAgICAgIGBcXG5UbyBmaXggdGhpcywgdXBkYXRlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZXMuYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChzdHlsaW5nRGlzdG9ydGlvbikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRSdW50aW1lRXJyb3IoXG4gICAgICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgcmVuZGVyZWQgaW1hZ2UgYCArXG4gICAgICAgICAgICBgZG9lcyBub3QgbWF0Y2ggdGhlIGltYWdlJ3MgaW50cmluc2ljIGFzcGVjdCByYXRpby4gYCArXG4gICAgICAgICAgICBgXFxuSW50cmluc2ljIGltYWdlIHNpemU6ICR7aW50cmluc2ljV2lkdGh9dyB4ICR7aW50cmluc2ljSGVpZ2h0fWggYCArXG4gICAgICAgICAgICBgKGFzcGVjdC1yYXRpbzogJHtyb3VuZChpbnRyaW5zaWNBc3BlY3RSYXRpbyl9KS4gXFxuUmVuZGVyZWQgaW1hZ2Ugc2l6ZTogYCArXG4gICAgICAgICAgICBgJHtyZW5kZXJlZFdpZHRofXcgeCAke3JlbmRlcmVkSGVpZ2h0fWggKGFzcGVjdC1yYXRpbzogYCArXG4gICAgICAgICAgICBgJHtyb3VuZChyZW5kZXJlZEFzcGVjdFJhdGlvKX0pLiBcXG5UaGlzIGlzc3VlIGNhbiBvY2N1ciBpZiBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYCArXG4gICAgICAgICAgICBgYXR0cmlidXRlcyBhcmUgYWRkZWQgdG8gYW4gaW1hZ2Ugd2l0aG91dCB1cGRhdGluZyB0aGUgY29ycmVzcG9uZGluZyBgICtcbiAgICAgICAgICAgIGBpbWFnZSBzdHlsaW5nLiBUbyBmaXggdGhpcywgYWRqdXN0IGltYWdlIHN0eWxpbmcuIEluIG1vc3QgY2FzZXMsIGAgK1xuICAgICAgICAgICAgYGFkZGluZyBcImhlaWdodDogYXV0b1wiIG9yIFwid2lkdGg6IGF1dG9cIiB0byB0aGUgaW1hZ2Ugc3R5bGluZyB3aWxsIGZpeCBgICtcbiAgICAgICAgICAgIGB0aGlzIGlzc3VlLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWRpci5uZ1NyY3NldCAmJiBub25aZXJvUmVuZGVyZWREaW1lbnNpb25zKSB7XG4gICAgICAvLyBJZiBgbmdTcmNzZXRgIGhhc24ndCBiZWVuIHNldCwgc2FuaXR5IGNoZWNrIHRoZSBpbnRyaW5zaWMgc2l6ZS5cbiAgICAgIGNvbnN0IHJlY29tbWVuZGVkV2lkdGggPSBSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVAgKiByZW5kZXJlZFdpZHRoO1xuICAgICAgY29uc3QgcmVjb21tZW5kZWRIZWlnaHQgPSBSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVAgKiByZW5kZXJlZEhlaWdodDtcbiAgICAgIGNvbnN0IG92ZXJzaXplZFdpZHRoID0gaW50cmluc2ljV2lkdGggLSByZWNvbW1lbmRlZFdpZHRoID49IE9WRVJTSVpFRF9JTUFHRV9UT0xFUkFOQ0U7XG4gICAgICBjb25zdCBvdmVyc2l6ZWRIZWlnaHQgPSBpbnRyaW5zaWNIZWlnaHQgLSByZWNvbW1lbmRlZEhlaWdodCA+PSBPVkVSU0laRURfSU1BR0VfVE9MRVJBTkNFO1xuICAgICAgaWYgKG92ZXJzaXplZFdpZHRoIHx8IG92ZXJzaXplZEhlaWdodCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICAgICAgUnVudGltZUVycm9yQ29kZS5PVkVSU0laRURfSU1BR0UsXG4gICAgICAgICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBpbnRyaW5zaWMgaW1hZ2UgaXMgc2lnbmlmaWNhbnRseSBgICtcbiAgICAgICAgICAgICAgYGxhcmdlciB0aGFuIG5lY2Vzc2FyeS4gYCArXG4gICAgICAgICAgICAgIGBcXG5SZW5kZXJlZCBpbWFnZSBzaXplOiAke3JlbmRlcmVkV2lkdGh9dyB4ICR7cmVuZGVyZWRIZWlnaHR9aC4gYCArXG4gICAgICAgICAgICAgIGBcXG5JbnRyaW5zaWMgaW1hZ2Ugc2l6ZTogJHtpbnRyaW5zaWNXaWR0aH13IHggJHtpbnRyaW5zaWNIZWlnaHR9aC4gYCArXG4gICAgICAgICAgICAgIGBcXG5SZWNvbW1lbmRlZCBpbnRyaW5zaWMgaW1hZ2Ugc2l6ZTogJHtyZWNvbW1lbmRlZFdpZHRofXcgeCAke3JlY29tbWVuZGVkSGVpZ2h0fWguIGAgK1xuICAgICAgICAgICAgICBgXFxuTm90ZTogUmVjb21tZW5kZWQgaW50cmluc2ljIGltYWdlIHNpemUgaXMgY2FsY3VsYXRlZCBhc3N1bWluZyBhIG1heGltdW0gRFBSIG9mIGAgK1xuICAgICAgICAgICAgICBgJHtSRUNPTU1FTkRFRF9TUkNTRVRfREVOU0lUWV9DQVB9LiBUbyBpbXByb3ZlIGxvYWRpbmcgdGltZSwgcmVzaXplIHRoZSBpbWFnZSBgICtcbiAgICAgICAgICAgICAgYG9yIGNvbnNpZGVyIHVzaW5nIHRoZSBcIm5nU3Jjc2V0XCIgYW5kIFwic2l6ZXNcIiBhdHRyaWJ1dGVzLmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIC8vIFdlIG9ubHkgbGlzdGVuIHRvIHRoZSBgZXJyb3JgIGV2ZW50IHRvIHJlbW92ZSB0aGUgYGxvYWRgIGV2ZW50IGxpc3RlbmVyIGJlY2F1c2UgaXQgd2lsbCBub3QgYmVcbiAgLy8gZmlyZWQgaWYgdGhlIGltYWdlIGZhaWxzIHRvIGxvYWQuIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBkZXZlbG9wbWVudCBtb2RlXG4gIC8vIGJlY2F1c2UgaW1hZ2UgZWxlbWVudHMgYXJlbid0IGdhcmJhZ2UtY29sbGVjdGVkIHByb3Blcmx5LiBJdCBoYXBwZW5zIGJlY2F1c2Ugem9uZS5qcyBzdG9yZXMgdGhlXG4gIC8vIGV2ZW50IGxpc3RlbmVyIGRpcmVjdGx5IG9uIHRoZSBlbGVtZW50IGFuZCBjbG9zdXJlcyBjYXB0dXJlIGBkaXJgLlxuICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSByZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCBhIHNwZWNpZmllZCBpbnB1dCBpcyBzZXQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5V2lkdGhBbmRIZWlnaHQoZGlyOiBOZ09wdGltaXplZEltYWdlKSB7XG4gIGxldCBtaXNzaW5nQXR0cmlidXRlcyA9IFtdO1xuICBpZiAoZGlyLndpZHRoID09PSB1bmRlZmluZWQpIG1pc3NpbmdBdHRyaWJ1dGVzLnB1c2goJ3dpZHRoJyk7XG4gIGlmIChkaXIuaGVpZ2h0ID09PSB1bmRlZmluZWQpIG1pc3NpbmdBdHRyaWJ1dGVzLnB1c2goJ2hlaWdodCcpO1xuICBpZiAobWlzc2luZ0F0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLlJFUVVJUkVEX0lOUFVUX01JU1NJTkcsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZXNlIHJlcXVpcmVkIGF0dHJpYnV0ZXMgYCArXG4gICAgICAgIGBhcmUgbWlzc2luZzogJHttaXNzaW5nQXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGBcIiR7YXR0cn1cImApLmpvaW4oJywgJyl9LiBgICtcbiAgICAgICAgYEluY2x1ZGluZyBcIndpZHRoXCIgYW5kIFwiaGVpZ2h0XCIgYXR0cmlidXRlcyB3aWxsIHByZXZlbnQgaW1hZ2UtcmVsYXRlZCBsYXlvdXQgc2hpZnRzLiBgICtcbiAgICAgICAgYFRvIGZpeCB0aGlzLCBpbmNsdWRlIFwid2lkdGhcIiBhbmQgXCJoZWlnaHRcIiBhdHRyaWJ1dGVzIG9uIHRoZSBpbWFnZSB0YWcgb3IgdHVybiBvbiBgICtcbiAgICAgICAgYFwiZmlsbFwiIG1vZGUgd2l0aCB0aGUgXFxgZmlsbFxcYCBhdHRyaWJ1dGUuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBub3Qgc2V0LiBVc2VkIGluIGZpbGwgbW9kZSwgd2hlcmUgdGhvc2UgYXR0cmlidXRlcyBkb24ndCBtYWtlXG4gKiBzZW5zZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0RW1wdHlXaWR0aEFuZEhlaWdodChkaXI6IE5nT3B0aW1pemVkSW1hZ2UpIHtcbiAgaWYgKGRpci53aWR0aCB8fCBkaXIuaGVpZ2h0KSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGF0dHJpYnV0ZXMgXFxgaGVpZ2h0XFxgIGFuZC9vciBcXGB3aWR0aFxcYCBhcmUgcHJlc2VudCBgICtcbiAgICAgICAgYGFsb25nIHdpdGggdGhlIFxcYGZpbGxcXGAgYXR0cmlidXRlLiBCZWNhdXNlIFxcYGZpbGxcXGAgbW9kZSBjYXVzZXMgYW4gaW1hZ2UgdG8gZmlsbCBpdHMgY29udGFpbmluZyBgICtcbiAgICAgICAgYGVsZW1lbnQsIHRoZSBzaXplIGF0dHJpYnV0ZXMgaGF2ZSBubyBlZmZlY3QgYW5kIHNob3VsZCBiZSByZW1vdmVkLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIHJlbmRlcmVkIGltYWdlIGhhcyBhIG5vbnplcm8gaGVpZ2h0LiBJZiB0aGUgaW1hZ2UgaXMgaW4gZmlsbCBtb2RlLCBwcm92aWRlc1xuICogZ3VpZGFuY2UgdGhhdCB0aGlzIGNhbiBiZSBjYXVzZWQgYnkgdGhlIGNvbnRhaW5pbmcgZWxlbWVudCdzIENTUyBwb3NpdGlvbiBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9uWmVyb1JlbmRlcmVkSGVpZ2h0KFxuICBkaXI6IE5nT3B0aW1pemVkSW1hZ2UsXG4gIGltZzogSFRNTEltYWdlRWxlbWVudCxcbiAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbikge1xuICBjb25zdCByZW1vdmVMb2FkTGlzdGVuZXJGbiA9IHJlbmRlcmVyLmxpc3RlbihpbWcsICdsb2FkJywgKCkgPT4ge1xuICAgIHJlbW92ZUxvYWRMaXN0ZW5lckZuKCk7XG4gICAgcmVtb3ZlRXJyb3JMaXN0ZW5lckZuKCk7XG4gICAgY29uc3QgcmVuZGVyZWRIZWlnaHQgPSBpbWcuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChkaXIuZmlsbCAmJiByZW5kZXJlZEhlaWdodCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRSdW50aW1lRXJyb3IoXG4gICAgICAgICAgUnVudGltZUVycm9yQ29kZS5JTlZBTElEX0lOUFVULFxuICAgICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIGhlaWdodCBvZiB0aGUgZmlsbC1tb2RlIGltYWdlIGlzIHplcm8uIGAgK1xuICAgICAgICAgICAgYFRoaXMgaXMgbGlrZWx5IGJlY2F1c2UgdGhlIGNvbnRhaW5pbmcgZWxlbWVudCBkb2VzIG5vdCBoYXZlIHRoZSBDU1MgJ3Bvc2l0aW9uJyBgICtcbiAgICAgICAgICAgIGBwcm9wZXJ0eSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6IFwicmVsYXRpdmVcIiwgXCJmaXhlZFwiLCBvciBcImFic29sdXRlXCIuIGAgK1xuICAgICAgICAgICAgYFRvIGZpeCB0aGlzIHByb2JsZW0sIG1ha2Ugc3VyZSB0aGUgY29udGFpbmVyIGVsZW1lbnQgaGFzIHRoZSBDU1MgJ3Bvc2l0aW9uJyBgICtcbiAgICAgICAgICAgIGBwcm9wZXJ0eSBkZWZpbmVkIGFuZCB0aGUgaGVpZ2h0IG9mIHRoZSBlbGVtZW50IGlzIG5vdCB6ZXJvLmAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2VlIGNvbW1lbnRzIGluIHRoZSBgYXNzZXJ0Tm9JbWFnZURpc3RvcnRpb25gLlxuICBjb25zdCByZW1vdmVFcnJvckxpc3RlbmVyRm4gPSByZW5kZXJlci5saXN0ZW4oaW1nLCAnZXJyb3InLCAoKSA9PiB7XG4gICAgcmVtb3ZlTG9hZExpc3RlbmVyRm4oKTtcbiAgICByZW1vdmVFcnJvckxpc3RlbmVyRm4oKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgYGxvYWRpbmdgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYSB2YWxpZCBpbnB1dCAmXG4gKiBpcyBub3QgdXNlZCBvbiBwcmlvcml0eSBpbWFnZXMuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFZhbGlkTG9hZGluZ0lucHV0KGRpcjogTmdPcHRpbWl6ZWRJbWFnZSkge1xuICBpZiAoZGlyLmxvYWRpbmcgJiYgZGlyLnByaW9yaXR5KSB7XG4gICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgIFJ1bnRpbWVFcnJvckNvZGUuSU5WQUxJRF9JTlBVVCxcbiAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYGxvYWRpbmdcXGAgYXR0cmlidXRlIGAgK1xuICAgICAgICBgd2FzIHVzZWQgb24gYW4gaW1hZ2UgdGhhdCB3YXMgbWFya2VkIFwicHJpb3JpdHlcIi4gYCArXG4gICAgICAgIGBTZXR0aW5nIFxcYGxvYWRpbmdcXGAgb24gcHJpb3JpdHkgaW1hZ2VzIGlzIG5vdCBhbGxvd2VkIGAgK1xuICAgICAgICBgYmVjYXVzZSB0aGVzZSBpbWFnZXMgd2lsbCBhbHdheXMgYmUgZWFnZXJseSBsb2FkZWQuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHJlbW92ZSB0aGUg4oCcbG9hZGluZ+KAnSBhdHRyaWJ1dGUgZnJvbSB0aGUgcHJpb3JpdHkgaW1hZ2UuYCxcbiAgICApO1xuICB9XG4gIGNvbnN0IHZhbGlkSW5wdXRzID0gWydhdXRvJywgJ2VhZ2VyJywgJ2xhenknXTtcbiAgaWYgKHR5cGVvZiBkaXIubG9hZGluZyA9PT0gJ3N0cmluZycgJiYgIXZhbGlkSW5wdXRzLmluY2x1ZGVzKGRpci5sb2FkaW5nKSkge1xuICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoXG4gICAgICBSdW50aW1lRXJyb3JDb2RlLklOVkFMSURfSU5QVVQsXG4gICAgICBgJHtpbWdEaXJlY3RpdmVEZXRhaWxzKGRpci5uZ1NyYyl9IHRoZSBcXGBsb2FkaW5nXFxgIGF0dHJpYnV0ZSBgICtcbiAgICAgICAgYGhhcyBhbiBpbnZhbGlkIHZhbHVlIChcXGAke2Rpci5sb2FkaW5nfVxcYCkuIGAgK1xuICAgICAgICBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSB2YWxpZCB2YWx1ZSAoXCJsYXp5XCIsIFwiZWFnZXJcIiwgb3IgXCJhdXRvXCIpLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIE5PVCB1c2luZyBhIGxvYWRlciAoZmFsbGluZyBiYWNrIHRvIHRoZSBnZW5lcmljIGxvYWRlcikgYW5kXG4gKiB0aGUgaW1hZ2UgYXBwZWFycyB0byBiZSBob3N0ZWQgb24gb25lIG9mIHRoZSBpbWFnZSBDRE5zIGZvciB3aGljaFxuICogd2UgZG8gaGF2ZSBhIGJ1aWx0LWluIGltYWdlIGxvYWRlci4gU3VnZ2VzdHMgc3dpdGNoaW5nIHRvIHRoZVxuICogYnVpbHQtaW4gbG9hZGVyLlxuICpcbiAqIEBwYXJhbSBuZ1NyYyBWYWx1ZSBvZiB0aGUgbmdTcmMgYXR0cmlidXRlXG4gKiBAcGFyYW0gaW1hZ2VMb2FkZXIgSW1hZ2VMb2FkZXIgcHJvdmlkZWRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm90TWlzc2luZ0J1aWx0SW5Mb2FkZXIobmdTcmM6IHN0cmluZywgaW1hZ2VMb2FkZXI6IEltYWdlTG9hZGVyKSB7XG4gIGlmIChpbWFnZUxvYWRlciA9PT0gbm9vcEltYWdlTG9hZGVyKSB7XG4gICAgbGV0IGJ1aWx0SW5Mb2FkZXJOYW1lID0gJyc7XG4gICAgZm9yIChjb25zdCBsb2FkZXIgb2YgQlVJTFRfSU5fTE9BREVSUykge1xuICAgICAgaWYgKGxvYWRlci50ZXN0VXJsKG5nU3JjKSkge1xuICAgICAgICBidWlsdEluTG9hZGVyTmFtZSA9IGxvYWRlci5uYW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJ1aWx0SW5Mb2FkZXJOYW1lKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLk1JU1NJTkdfQlVJTFRJTl9MT0FERVIsXG4gICAgICAgICAgYE5nT3B0aW1pemVkSW1hZ2U6IEl0IGxvb2tzIGxpa2UgeW91ciBpbWFnZXMgbWF5IGJlIGhvc3RlZCBvbiB0aGUgYCArXG4gICAgICAgICAgICBgJHtidWlsdEluTG9hZGVyTmFtZX0gQ0ROLCBidXQgeW91ciBhcHAgaXMgbm90IHVzaW5nIEFuZ3VsYXIncyBgICtcbiAgICAgICAgICAgIGBidWlsdC1pbiBsb2FkZXIgZm9yIHRoYXQgQ0ROLiBXZSByZWNvbW1lbmQgc3dpdGNoaW5nIHRvIHVzZSBgICtcbiAgICAgICAgICAgIGB0aGUgYnVpbHQtaW4gYnkgY2FsbGluZyBcXGBwcm92aWRlJHtidWlsdEluTG9hZGVyTmFtZX1Mb2FkZXIoKVxcYCBgICtcbiAgICAgICAgICAgIGBpbiB5b3VyIFxcYHByb3ZpZGVyc1xcYCBhbmQgcGFzc2luZyBpdCB5b3VyIGluc3RhbmNlJ3MgYmFzZSBVUkwuIGAgK1xuICAgICAgICAgICAgYElmIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGUgYnVpbHQtaW4gbG9hZGVyLCBkZWZpbmUgYSBjdXN0b20gYCArXG4gICAgICAgICAgICBgbG9hZGVyIGZ1bmN0aW9uIHVzaW5nIElNQUdFX0xPQURFUiB0byBzaWxlbmNlIHRoaXMgd2FybmluZy5gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBuZ1NyY3NldCBpcyBwcmVzZW50IGFuZCBubyBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmcgdXNlZCkuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vTmdTcmNzZXRXaXRob3V0TG9hZGVyKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSwgaW1hZ2VMb2FkZXI6IEltYWdlTG9hZGVyKSB7XG4gIGlmIChkaXIubmdTcmNzZXQgJiYgaW1hZ2VMb2FkZXIgPT09IG5vb3BJbWFnZUxvYWRlcikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5NSVNTSU5HX05FQ0VTU0FSWV9MT0FERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYG5nU3Jjc2V0XFxgIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGJ1dCBgICtcbiAgICAgICAgICBgbm8gaW1hZ2UgbG9hZGVyIGlzIGNvbmZpZ3VyZWQgKGkuZS4gdGhlIGRlZmF1bHQgb25lIGlzIGJlaW5nIHVzZWQpLCBgICtcbiAgICAgICAgICBgd2hpY2ggd291bGQgcmVzdWx0IGluIHRoZSBzYW1lIGltYWdlIGJlaW5nIHVzZWQgZm9yIGFsbCBjb25maWd1cmVkIHNpemVzLiBgICtcbiAgICAgICAgICBgVG8gZml4IHRoaXMsIHByb3ZpZGUgYSBsb2FkZXIgb3IgcmVtb3ZlIHRoZSBcXGBuZ1NyY3NldFxcYCBhdHRyaWJ1dGUgZnJvbSB0aGUgaW1hZ2UuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIGxvYWRlclBhcmFtcyBpcyBwcmVzZW50IGFuZCBubyBsb2FkZXIgaXMgY29uZmlndXJlZCAoaS5lLiB0aGUgZGVmYXVsdCBvbmUgaXMgYmVpbmdcbiAqIHVzZWQpLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb0xvYWRlclBhcmFtc1dpdGhvdXRMb2FkZXIoZGlyOiBOZ09wdGltaXplZEltYWdlLCBpbWFnZUxvYWRlcjogSW1hZ2VMb2FkZXIpIHtcbiAgaWYgKGRpci5sb2FkZXJQYXJhbXMgJiYgaW1hZ2VMb2FkZXIgPT09IG5vb3BJbWFnZUxvYWRlcikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgUnVudGltZUVycm9yQ29kZS5NSVNTSU5HX05FQ0VTU0FSWV9MT0FERVIsXG4gICAgICAgIGAke2ltZ0RpcmVjdGl2ZURldGFpbHMoZGlyLm5nU3JjKX0gdGhlIFxcYGxvYWRlclBhcmFtc1xcYCBhdHRyaWJ1dGUgaXMgcHJlc2VudCBidXQgYCArXG4gICAgICAgICAgYG5vIGltYWdlIGxvYWRlciBpcyBjb25maWd1cmVkIChpLmUuIHRoZSBkZWZhdWx0IG9uZSBpcyBiZWluZyB1c2VkKSwgYCArXG4gICAgICAgICAgYHdoaWNoIG1lYW5zIHRoYXQgdGhlIGxvYWRlclBhcmFtcyBkYXRhIHdpbGwgbm90IGJlIGNvbnN1bWVkIGFuZCB3aWxsIG5vdCBhZmZlY3QgdGhlIFVSTC4gYCArXG4gICAgICAgICAgYFRvIGZpeCB0aGlzLCBwcm92aWRlIGEgY3VzdG9tIGxvYWRlciBvciByZW1vdmUgdGhlIFxcYGxvYWRlclBhcmFtc1xcYCBhdHRyaWJ1dGUgZnJvbSB0aGUgaW1hZ2UuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm5zIGlmIHRoZSBwcmlvcml0eSBhdHRyaWJ1dGUgaXMgdXNlZCB0b28gb2Z0ZW4gb24gcGFnZSBsb2FkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzc2V0UHJpb3JpdHlDb3VudEJlbG93VGhyZXNob2xkKGFwcFJlZjogQXBwbGljYXRpb25SZWYpIHtcbiAgaWYgKElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UID09PSAwKSB7XG4gICAgSU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlQrKztcbiAgICBhd2FpdCB3aGVuU3RhYmxlKGFwcFJlZik7XG4gICAgaWYgKElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UID4gUFJJT1JJVFlfQ09VTlRfVEhSRVNIT0xEKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICBSdW50aW1lRXJyb3JDb2RlLlRPT19NQU5ZX1BSSU9SSVRZX0FUVFJJQlVURVMsXG4gICAgICAgICAgYE5nT3B0aW1pemVkSW1hZ2U6IFRoZSBcInByaW9yaXR5XCIgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlIG1vcmUgdGhhbiAke1BSSU9SSVRZX0NPVU5UX1RIUkVTSE9MRH0gdGltZXMgKCR7SU1HU19XSVRIX1BSSU9SSVRZX0FUVFJfQ09VTlR9IHRpbWVzKS4gYCArXG4gICAgICAgICAgICBgTWFya2luZyB0b28gbWFueSBpbWFnZXMgYXMgXCJoaWdoXCIgcHJpb3JpdHkgY2FuIGh1cnQgeW91ciBhcHBsaWNhdGlvbidzIExDUCAoaHR0cHM6Ly93ZWIuZGV2L2xjcCkuIGAgK1xuICAgICAgICAgICAgYFwiUHJpb3JpdHlcIiBzaG91bGQgb25seSBiZSBzZXQgb24gdGhlIGltYWdlIGV4cGVjdGVkIHRvIGJlIHRoZSBwYWdlJ3MgTENQIGVsZW1lbnQuYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIElNR1NfV0lUSF9QUklPUklUWV9BVFRSX0NPVU5UKys7XG4gIH1cbn1cblxuLyoqXG4gKiBXYXJucyBpZiBwbGFjZWhvbGRlcidzIGRpbWVuc2lvbiBhcmUgb3ZlciBhIHRocmVzaG9sZC5cbiAqXG4gKiBUaGlzIGFzc2VydCBmdW5jdGlvbiBpcyBtZWFudCB0byBvbmx5IHJ1biBvbiB0aGUgYnJvd3Nlci5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UGxhY2Vob2xkZXJEaW1lbnNpb25zKGRpcjogTmdPcHRpbWl6ZWRJbWFnZSwgaW1nRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCkge1xuICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW1nRWxlbWVudCk7XG4gIGxldCByZW5kZXJlZFdpZHRoID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJykpO1xuICBsZXQgcmVuZGVyZWRIZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JykpO1xuXG4gIGlmIChyZW5kZXJlZFdpZHRoID4gUExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUIHx8IHJlbmRlcmVkSGVpZ2h0ID4gUExBQ0VIT0xERVJfRElNRU5TSU9OX0xJTUlUKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgZm9ybWF0UnVudGltZUVycm9yKFxuICAgICAgICBSdW50aW1lRXJyb3JDb2RlLlBMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVF9FWENFRURFRCxcbiAgICAgICAgYCR7aW1nRGlyZWN0aXZlRGV0YWlscyhkaXIubmdTcmMpfSBpdCB1c2VzIGEgcGxhY2Vob2xkZXIgaW1hZ2UsIGJ1dCBhdCBsZWFzdCBvbmUgYCArXG4gICAgICAgICAgYG9mIHRoZSBkaW1lbnNpb25zIGF0dHJpYnV0ZSAoaGVpZ2h0IG9yIHdpZHRoKSBleGNlZWRzIHRoZSBsaW1pdCBvZiAke1BMQUNFSE9MREVSX0RJTUVOU0lPTl9MSU1JVH1weC4gYCArXG4gICAgICAgICAgYFRvIGZpeCB0aGlzLCB1c2UgYSBzbWFsbGVyIGltYWdlIGFzIGEgcGxhY2Vob2xkZXIuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByb3VuZChpbnB1dDogbnVtYmVyKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoaW5wdXQpID8gaW5wdXQgOiBpbnB1dC50b0ZpeGVkKDIpO1xufVxuXG4vLyBUcmFuc2Zvcm0gZnVuY3Rpb24gdG8gaGFuZGxlIFNhZmVWYWx1ZSBpbnB1dCBmb3IgbmdTcmMuIFRoaXMgZG9lc24ndCBkbyBhbnkgc2FuaXRpemF0aW9uLFxuLy8gYXMgdGhhdCBpcyBub3QgbmVlZGVkIGZvciBpbWcuc3JjIGFuZCBpbWcuc3Jjc2V0LiBUaGlzIHRyYW5zZm9ybSBpcyBwdXJlbHkgZm9yIGNvbXBhdGliaWxpdHkuXG5mdW5jdGlvbiB1bndyYXBTYWZlVXJsKHZhbHVlOiBzdHJpbmcgfCBTYWZlVmFsdWUpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdW53cmFwU2FmZVZhbHVlKHZhbHVlKTtcbn1cblxuLy8gVHJhbnNmb3JtIGZ1bmN0aW9uIHRvIGhhbmRsZSBpbnB1dHMgd2hpY2ggbWF5IGJlIGJvb2xlYW5zLCBzdHJpbmdzLCBvciBzdHJpbmcgcmVwcmVzZW50YXRpb25zXG4vLyBvZiBib29sZWFuIHZhbHVlcy4gVXNlZCBmb3IgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZS5cbmV4cG9ydCBmdW5jdGlvbiBib29sZWFuT3JVcmxBdHRyaWJ1dGUodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpOiBib29sZWFuIHwgc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICd0cnVlJyAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJyAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGJvb2xlYW5BdHRyaWJ1dGUodmFsdWUpO1xufVxuIl19