@esri/solutions-components 1.1.0-next.20250916 → 1.1.0-next.20250917.1

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 (2905) hide show
  1. package/dist/cdn/{DLVBAVQY.js → 22IQZT6J.js} +2 -2
  2. package/dist/cdn/{ZSHDAEHR.js → 254J2BPV.js} +2 -2
  3. package/dist/cdn/{NKB2LE2O.js → 26G745RA.js} +2 -2
  4. package/dist/cdn/{HGBMJ4CU.js → 26KCPR7N.js} +1 -1
  5. package/dist/cdn/{YNFPJ2LU.js → 2734ABSH.js} +1 -1
  6. package/dist/cdn/{XTK6I3AO.js → 277XJSTT.js} +2 -2
  7. package/dist/cdn/{MTUMX4JL.js → 2BHPIU3V.js} +2 -2
  8. package/dist/cdn/{Z56TZW33.js → 2BJ3YAJW.js} +2 -2
  9. package/dist/cdn/{TLIXZXAL.js → 2I2YENHT.js} +2 -2
  10. package/dist/cdn/{5RN26REC.js → 2JOMSPJR.js} +2 -2
  11. package/dist/cdn/{GQDYDBO5.js → 2KZEQYTV.js} +1 -1
  12. package/dist/cdn/{E6SZOM6H.js → 2LPFG2CT.js} +2 -2
  13. package/dist/cdn/2MEEZ5ZM.js +5 -0
  14. package/dist/cdn/{NVBJESUA.js → 2RPEDXDL.js} +2 -2
  15. package/dist/cdn/{6YL365ZT.js → 2SHTW2ZI.js} +2 -2
  16. package/dist/cdn/{DXDQ3CBG.js → 2SIN3G2L.js} +2 -2
  17. package/dist/cdn/{TDED7NN4.js → 2SSFOKDJ.js} +2 -2
  18. package/dist/cdn/{XD7XWS2A.js → 2TCRQXKW.js} +2 -2
  19. package/dist/cdn/{V3JBT2VO.js → 33TP7LEP.js} +2 -2
  20. package/dist/cdn/{JLRPGXSA.js → 3BGTO2BG.js} +2 -2
  21. package/dist/cdn/{SS65JOJS.js → 3DWQM643.js} +2 -2
  22. package/dist/cdn/{CZZBM7JR.js → 3EYWSHHH.js} +2 -2
  23. package/dist/cdn/{GG7ES4ED.js → 3IDRBBTI.js} +2 -2
  24. package/dist/cdn/{ZTVTWYQI.js → 3RJOS4SB.js} +2 -2
  25. package/dist/cdn/{JYZ6ZPQP.js → 3UJYMJ4M.js} +2 -2
  26. package/dist/cdn/{FREJ5YAJ.js → 3XYB36Q3.js} +1 -1
  27. package/dist/cdn/{EBPRZHTG.js → 442YTJO3.js} +1 -1
  28. package/dist/cdn/{GIGG6N7V.js → 4B26SMKT.js} +2 -2
  29. package/dist/cdn/{VC3YBN3V.js → 4MF7IEUO.js} +2 -2
  30. package/dist/cdn/{KEZL2CXB.js → 4QTP52XH.js} +1 -1
  31. package/dist/cdn/{QCRDAISM.js → 4YCVI3FS.js} +2 -2
  32. package/dist/cdn/{6KIHDCGW.js → 4YMGDWGC.js} +2 -2
  33. package/dist/cdn/{QHOJGFH5.js → 54Q55Y2U.js} +1 -1
  34. package/dist/cdn/{JLVOAZOX.js → 54VN5OXT.js} +1 -1
  35. package/dist/cdn/{XMVYDTZX.js → 55Y3NPXC.js} +2 -2
  36. package/dist/cdn/{NJQH46KQ.js → 57LAOXA6.js} +2 -2
  37. package/dist/cdn/{3CPOIEEA.js → 5C5B4QKH.js} +2 -2
  38. package/dist/cdn/{QTI5Y7Z6.js → 5DJFJXBS.js} +1 -1
  39. package/dist/cdn/{UCCX64WI.js → 5NQ7V4XP.js} +2 -2
  40. package/dist/cdn/{WIM65OI7.js → 5OQXQNJT.js} +2 -2
  41. package/dist/cdn/{FHLZLYCZ.js → 5S44Y56N.js} +2 -2
  42. package/dist/cdn/{YPWE4SGR.js → 5TISSUZK.js} +1 -1
  43. package/dist/cdn/{GYDZHSYW.js → 5WTH4MKL.js} +2 -2
  44. package/dist/cdn/{STXXNL2P.js → 63NOZPVZ.js} +2 -2
  45. package/dist/cdn/{2AKKLIVI.js → 65HGLJRC.js} +2 -2
  46. package/dist/cdn/6F5NYMCK.js +18 -0
  47. package/dist/cdn/{A3HQHLIF.js → 6GRO6IWG.js} +2 -2
  48. package/dist/cdn/{HFMPOVTM.js → 6H4R6H26.js} +2 -2
  49. package/dist/cdn/{LFWAEWBU.js → 6ICUBXEZ.js} +2 -2
  50. package/dist/cdn/{E7YWY4R6.js → 6M6B4G2D.js} +2 -2
  51. package/dist/cdn/{HXAK7ZQ2.js → 6NI3ICUC.js} +2 -2
  52. package/dist/cdn/{K3KJUCFR.js → 6R5GRVZ2.js} +2 -2
  53. package/dist/cdn/{6GLQSACD.js → 6RNO7D3E.js} +2 -2
  54. package/dist/cdn/{XCZQIL5K.js → 6ZGYZNIG.js} +2 -2
  55. package/dist/cdn/{H32U22XD.js → 74NSWBXK.js} +2 -2
  56. package/dist/cdn/{25NH2H4M.js → 77ZJA5MA.js} +2 -2
  57. package/dist/cdn/{QOI5XR63.js → 7AWMALHG.js} +2 -2
  58. package/dist/cdn/{IYVSBDE5.js → 7BISYZUI.js} +2 -2
  59. package/dist/cdn/{4PRICMGV.js → 7BTE7YBI.js} +2 -2
  60. package/dist/cdn/{QTI3CWLT.js → 7DVQAKKA.js} +1 -1
  61. package/dist/cdn/{HXD6TSC3.js → 7KOGLZ6A.js} +2 -2
  62. package/dist/cdn/{5BQSJZ37.js → 7LI47G6Q.js} +2 -2
  63. package/dist/cdn/{TLXN2R36.js → 7RMVNXMR.js} +2 -2
  64. package/dist/cdn/{DLNAYO43.js → 7RZYECSQ.js} +2 -2
  65. package/dist/cdn/{WSSXTZBW.js → 7S4DT77X.js} +2 -2
  66. package/dist/cdn/{RZMG6VLL.js → 7UP5RDKM.js} +2 -2
  67. package/dist/cdn/{4FJEAPWD.js → A7TK3HI4.js} +2 -2
  68. package/dist/cdn/{OQ3TMEOA.js → AETEXDRE.js} +2 -2
  69. package/dist/cdn/{V4T4FLBM.js → AFKJO6CL.js} +2 -2
  70. package/dist/cdn/{HSVOCCH5.js → AKYRMP2F.js} +1 -1
  71. package/dist/cdn/{JMTCSKBK.js → ATIGVK4O.js} +2 -2
  72. package/dist/cdn/{VQTUGW26.js → AV6ZHPKI.js} +1 -1
  73. package/dist/cdn/{K6BJODFM.js → B44JDUZ2.js} +2 -2
  74. package/dist/cdn/{W2TFJZ6H.js → BB7Q2E6F.js} +2 -2
  75. package/dist/cdn/{CP6AC5QD.js → BEWLFFYT.js} +2 -2
  76. package/dist/cdn/{T3V4CXZ5.js → BL3TWZBW.js} +2 -2
  77. package/dist/cdn/{P2X5TWZR.js → BNUMYUKI.js} +2 -2
  78. package/dist/cdn/{BDLFFSU5.js → BSK2FSTE.js} +2 -2
  79. package/dist/cdn/{LI4BIIDQ.js → BXXJOB4H.js} +1 -1
  80. package/dist/cdn/{QF52RJUT.js → BYKHJKXV.js} +2 -2
  81. package/dist/cdn/BZLBIIMX.js +4 -0
  82. package/dist/cdn/{AOBOA2TP.js → C37BWQGL.js} +2 -2
  83. package/dist/cdn/C434YNG2.js +4 -0
  84. package/dist/cdn/{DCTHQBJM.js → C5ODWBYI.js} +2 -2
  85. package/dist/cdn/{FANIEO2Z.js → C6FCTU5X.js} +2 -2
  86. package/dist/cdn/{ZKOXORB3.js → C6UJS3U4.js} +2 -2
  87. package/dist/cdn/{G73BR7DH.js → C6ZJEKKF.js} +2 -2
  88. package/dist/cdn/{ZW4HOB5Z.js → CGMQBOCQ.js} +2 -2
  89. package/dist/cdn/{NA7EWDYL.js → CI2DTN6B.js} +2 -2
  90. package/dist/cdn/{CFKMWGOT.js → CLNHIIST.js} +2 -2
  91. package/dist/cdn/{W2BOJNBA.js → CLYISB65.js} +2 -2
  92. package/dist/cdn/{CKTPS6ZG.js → CWBGX5QX.js} +2 -2
  93. package/dist/cdn/{Z3GF7PSG.js → CXA2GZLV.js} +2 -2
  94. package/dist/cdn/{JXVXFJCB.js → D2WEMOK5.js} +2 -2
  95. package/dist/cdn/{DSRC6JRP.js → D4NG2DKH.js} +2 -2
  96. package/dist/cdn/{7LYTYZFP.js → D6YOAMN6.js} +2 -2
  97. package/dist/cdn/{X67CXNGQ.js → D7MXZOLT.js} +2 -2
  98. package/dist/cdn/{2KNUXNKX.js → DAHTXMBD.js} +2 -2
  99. package/dist/cdn/{VRDXQ6BM.js → DAMQCKMB.js} +2 -2
  100. package/dist/cdn/{HMFZJ7XD.js → DGTWF7ZS.js} +2 -2
  101. package/dist/cdn/{NVCW7IH4.js → DHMOLLBL.js} +2 -2
  102. package/dist/cdn/{CNPTR6BK.js → DM4LW6Q4.js} +2 -2
  103. package/dist/cdn/{UJXTDRKH.js → DMHRAMQR.js} +2 -2
  104. package/dist/cdn/{HKKMAVAQ.js → DSIQEKMO.js} +2 -2
  105. package/dist/cdn/{6DBM64ZX.js → DTK3LA3J.js} +2 -2
  106. package/dist/cdn/{3L6WYDFP.js → DTO23XEP.js} +2 -2
  107. package/dist/cdn/{M4DI6L4H.js → DUPUWAGJ.js} +2 -2
  108. package/dist/cdn/{S7DMKSRD.js → DX6YFVFJ.js} +2 -2
  109. package/dist/cdn/{PHC4QVTF.js → DZPVXGGI.js} +2 -2
  110. package/dist/cdn/{4QKWUSGG.js → E2OUIXA6.js} +2 -2
  111. package/dist/cdn/{6QAM2D7S.js → E3IGEKXX.js} +2 -2
  112. package/dist/cdn/{JAZ4FXUV.js → E6VNYFTK.js} +2 -2
  113. package/dist/cdn/{CZR2QRLU.js → EBFEJ3UW.js} +2 -2
  114. package/dist/cdn/{RTFPQNFH.js → EE6BRKTG.js} +2 -2
  115. package/dist/cdn/{74TNTVEQ.js → EE6ZBEFP.js} +2 -2
  116. package/dist/cdn/{YNSWH2TV.js → EFAUQO4F.js} +2 -2
  117. package/dist/cdn/{YNFEL2C5.js → EHO67FFU.js} +1 -1
  118. package/dist/cdn/{ISTW7XRR.js → EHWB6OZE.js} +2 -2
  119. package/dist/cdn/EJ5MXJ4L.js +4 -0
  120. package/dist/cdn/{LXRDIGQ6.js → EPWJ5MH5.js} +2 -2
  121. package/dist/cdn/{OSEAEQLJ.js → EQN33NBW.js} +2 -2
  122. package/dist/cdn/{JVXUOFJU.js → ETXJCKXM.js} +2 -2
  123. package/dist/cdn/{JQZYDENI.js → EWVUFFYM.js} +2 -2
  124. package/dist/cdn/{TV3HM7KC.js → EX3YIW6I.js} +2 -2
  125. package/dist/cdn/{W3I3P3E3.js → F4JVAFDH.js} +2 -2
  126. package/dist/cdn/{XXOSG43E.js → F4QOXYGH.js} +2 -2
  127. package/dist/cdn/{AWAS35HL.js → FBGSINKC.js} +2 -2
  128. package/dist/cdn/{HD65J7C7.js → FC7NSA73.js} +2 -2
  129. package/dist/cdn/{XXOIDYE4.js → FFK53NKE.js} +2 -2
  130. package/dist/cdn/{LGCHZIZ3.js → FG24QZWE.js} +3 -3
  131. package/dist/cdn/{52GYJL23.js → FQD3MPL2.js} +2 -2
  132. package/dist/cdn/{SE7YYJ3P.js → FR7FDRQG.js} +2 -2
  133. package/dist/cdn/{Z47BL7RC.js → FSHGBGA7.js} +2 -2
  134. package/dist/cdn/{U2XTS5PX.js → FSOOQC6X.js} +2 -2
  135. package/dist/cdn/{BWHLDLC2.js → FYY3S3Z5.js} +2 -2
  136. package/dist/cdn/{BKOHDB3Q.js → FZFTTC2N.js} +2 -2
  137. package/dist/cdn/{HLQ5EYPY.js → G5FMCRUO.js} +2 -2
  138. package/dist/cdn/{LSKF3CQG.js → G7COFGFO.js} +2 -2
  139. package/dist/cdn/{6AZ4TFYV.js → GNIUPKE6.js} +2 -2
  140. package/dist/cdn/{N5YJZRU3.js → GOWTEL4L.js} +1 -1
  141. package/dist/cdn/{OCH4CHGK.js → GPOQA3W5.js} +2 -2
  142. package/dist/cdn/{2RYL4NBZ.js → GTAD2V3J.js} +2 -2
  143. package/dist/cdn/{O6ZND43H.js → GTPJDWLZ.js} +2 -2
  144. package/dist/cdn/{CUZKFOE5.js → GX6IUGMJ.js} +2 -2
  145. package/dist/cdn/{XY3O2MJN.js → H2G4MMVN.js} +2 -2
  146. package/dist/cdn/{LI7L4SBL.js → H7A7RVWX.js} +2 -2
  147. package/dist/cdn/{QIWB3K67.js → H7PCNI2B.js} +1 -1
  148. package/dist/cdn/{VTBEKVUE.js → HDHARZ7G.js} +2 -2
  149. package/dist/cdn/{CYM4UZ4V.js → HJ7JZJMY.js} +2 -2
  150. package/dist/cdn/{3ZC6PYQ7.js → HO6FTZFW.js} +2 -2
  151. package/dist/cdn/{NIURRJJU.js → HQCO6V6Y.js} +2 -2
  152. package/dist/cdn/{2QJXTRKE.js → HS6FHZDV.js} +2 -2
  153. package/dist/cdn/{IW3RX4NR.js → HYDLFNWZ.js} +2 -2
  154. package/dist/cdn/{4ADV4LHU.js → HZ655FWN.js} +2 -2
  155. package/dist/cdn/{UWFYVH4K.js → IGHDZ6NM.js} +2 -2
  156. package/dist/cdn/{KC7UR2GS.js → ITVEADGM.js} +2 -2
  157. package/dist/cdn/{62NKSV3T.js → IWRWVYE2.js} +2 -2
  158. package/dist/cdn/{UF63RRQG.js → J46JZ3HC.js} +2 -2
  159. package/dist/cdn/{WHWIQOTA.js → J5LUGGEM.js} +1 -1
  160. package/dist/cdn/{5ZHCUOM5.js → J7RBVELL.js} +2 -2
  161. package/dist/cdn/{XJKHNI3V.js → JB65YU3U.js} +1 -1
  162. package/dist/cdn/{VDKILCQU.js → JHDFGAEX.js} +2 -2
  163. package/dist/cdn/{5ROKBD6J.js → JK77IEXN.js} +2 -2
  164. package/dist/cdn/{26J5TW6F.js → JLI2QLLS.js} +2 -2
  165. package/dist/cdn/{E53TOR3H.js → JV5TACGL.js} +2 -2
  166. package/dist/cdn/{DYKHCXYT.js → KBZMR6Y4.js} +2 -2
  167. package/dist/cdn/{5GPCF54D.js → KF2ZU65S.js} +2 -2
  168. package/dist/cdn/{L4LOKPJ7.js → KHZSF3FD.js} +2 -2
  169. package/dist/cdn/{PKOD3YMJ.js → KKFYYIMR.js} +2 -2
  170. package/dist/cdn/{G262OMZ4.js → KOKAXSJ3.js} +2 -2
  171. package/dist/cdn/{MUXAGQOV.js → KRCQW7YP.js} +1 -1
  172. package/dist/cdn/{LIHASDL7.js → KS6K3G5I.js} +2 -2
  173. package/dist/cdn/{MLQBZ54R.js → KSDERO45.js} +2 -2
  174. package/dist/cdn/{AEZTEPNV.js → KSN3IAEH.js} +2 -2
  175. package/dist/cdn/{IEWOVPEN.js → KW323Y7Z.js} +2 -2
  176. package/dist/cdn/{MDVS7ZVF.js → KXKAKCTY.js} +2 -2
  177. package/dist/cdn/{QVLG4DIC.js → KY7MCT5Q.js} +1 -1
  178. package/dist/cdn/{3BS4RZZO.js → L4JMVIN2.js} +2 -2
  179. package/dist/cdn/{W7JJ5LBO.js → L4YIXDS2.js} +2 -2
  180. package/dist/cdn/{AKVV2HXN.js → LEAZKVUV.js} +2 -2
  181. package/dist/cdn/{DBIIJ3IL.js → LHUGR2M5.js} +2 -2
  182. package/dist/cdn/{F65R4DWK.js → LHZ3XERP.js} +2 -2
  183. package/dist/cdn/{KFDV4YXM.js → LJE5RVH3.js} +2 -2
  184. package/dist/cdn/{LCP6XACX.js → LJH64QDF.js} +2 -2
  185. package/dist/cdn/{PGKJC7ZA.js → LK7J2IL4.js} +2 -2
  186. package/dist/cdn/{O5DQGGJN.js → LNW7XNYY.js} +2 -2
  187. package/dist/cdn/{SX7HI2WN.js → LOUWTCCR.js} +2 -2
  188. package/dist/cdn/{3NP3YKXD.js → LP2V3LHC.js} +2 -2
  189. package/dist/cdn/{2NMCAAGG.js → LQQNPFDP.js} +2 -2
  190. package/dist/cdn/{ECJZMR4A.js → LQYMUUF3.js} +2 -2
  191. package/dist/cdn/{UR34PQM6.js → LWGB5XJM.js} +2 -2
  192. package/dist/cdn/{X6NRFLGH.js → M3RQ6YB2.js} +2 -2
  193. package/dist/cdn/{SDSYG75W.js → MB6SBDLQ.js} +2 -2
  194. package/dist/cdn/{VSVRHPO4.js → MDWAUWKR.js} +2 -2
  195. package/dist/cdn/{URWF25IM.js → MEIAZRM6.js} +1 -1
  196. package/dist/cdn/{LV3LHRPD.js → MIRER6VJ.js} +2 -2
  197. package/dist/cdn/{IPKRLWJF.js → MKZ36QS2.js} +2 -2
  198. package/dist/cdn/{KFLNFMJU.js → MLTILQN4.js} +2 -2
  199. package/dist/cdn/{PCUTOVRB.js → MS4KAGNH.js} +2 -2
  200. package/dist/cdn/{JHLMRWXJ.js → MSNUWHZX.js} +2 -2
  201. package/dist/cdn/{A3NP4BEW.js → MSQ4QY3M.js} +2 -2
  202. package/dist/cdn/{JJSTFIP5.js → MT6GA5XY.js} +3 -3
  203. package/dist/cdn/{RT4ZXNGS.js → MXLDJIIW.js} +2 -2
  204. package/dist/cdn/{LXJN6ZF2.js → N3YIDTVI.js} +2 -2
  205. package/dist/cdn/{D4JOFO5G.js → N5R7QFQV.js} +2 -2
  206. package/dist/cdn/NAGICQWY.js +4 -0
  207. package/dist/cdn/{4IEWBOKU.js → NBDKGDQ3.js} +2 -2
  208. package/dist/cdn/{HBS5J75X.js → NCADJUKG.js} +2 -2
  209. package/dist/cdn/{XHS53W7M.js → NJIUK7EX.js} +2 -2
  210. package/dist/cdn/{5FWLFUAE.js → NN3GLANP.js} +2 -2
  211. package/dist/cdn/{GT3BKET3.js → NNC5D3XW.js} +2 -2
  212. package/dist/cdn/{GD4TSWHT.js → NOXDRDHJ.js} +2 -2
  213. package/dist/cdn/{CTA5L6K5.js → NQ3M6L4H.js} +1 -1
  214. package/dist/cdn/{P24X2YJY.js → NX25NZSD.js} +1 -1
  215. package/dist/cdn/{3XCF36BA.js → NXUG2Y4D.js} +2 -2
  216. package/dist/cdn/{N74PTLJ6.js → NYQRE3PP.js} +2 -2
  217. package/dist/cdn/{3MRS5MYW.js → O5C3YLJE.js} +2 -2
  218. package/dist/cdn/{4TJNU6YE.js → O5OZCLSF.js} +2 -2
  219. package/dist/cdn/{NCUHE5T2.js → OAGFAKNI.js} +2 -2
  220. package/dist/cdn/{KDTI4XON.js → OAGQFGAF.js} +2 -2
  221. package/dist/cdn/{IW6HHO5A.js → OAONHDB7.js} +2 -2
  222. package/dist/cdn/{UQL623WY.js → OEI42XVX.js} +2 -2
  223. package/dist/cdn/{S2EMXUPX.js → OGCCPNWE.js} +2 -2
  224. package/dist/cdn/{QS6F3IWC.js → OHUDAWEX.js} +2 -2
  225. package/dist/cdn/{I4KG2DKP.js → OHYLULSL.js} +2 -2
  226. package/dist/cdn/{4H4RJGL3.js → OMJEC7PI.js} +1 -1
  227. package/dist/cdn/{MWVNCV4M.js → P5QKOX7P.js} +2 -2
  228. package/dist/cdn/{Y3QQP2G6.js → P72YRSGB.js} +2 -2
  229. package/dist/cdn/{LY2IY6BK.js → PAH2YDTS.js} +2 -2
  230. package/dist/cdn/{ZCVEHHZX.js → PBZRZP7G.js} +1 -1
  231. package/dist/cdn/{NUUIWFMZ.js → PD62JJHH.js} +2 -2
  232. package/dist/cdn/{VP6ATLIU.js → PEXKY6QE.js} +1 -1
  233. package/dist/cdn/{BLE2OBFY.js → PFJJL3K3.js} +1 -1
  234. package/dist/cdn/{GSH4TQSQ.js → PJISEH5O.js} +1 -1
  235. package/dist/cdn/{WITOBU6C.js → PKB6JNV7.js} +2 -2
  236. package/dist/cdn/{GEEIXDBK.js → PL5JEDPA.js} +2 -2
  237. package/dist/cdn/{GYWYILTV.js → POH5W7N2.js} +2 -2
  238. package/dist/cdn/{43EIKKNQ.js → PRTIGOIB.js} +4 -4
  239. package/dist/cdn/{EWMBCIAS.js → PU5PZCL4.js} +2 -2
  240. package/dist/cdn/{ENCUHP2W.js → PVWKBRMD.js} +2 -2
  241. package/dist/cdn/{YTZJN2OT.js → Q4KC5E7I.js} +2 -2
  242. package/dist/cdn/{BGZTILP5.js → Q5GYBZ6S.js} +2 -2
  243. package/dist/cdn/{TYLPNULJ.js → Q6WUDFS6.js} +2 -2
  244. package/dist/cdn/{2BFX7XCS.js → Q7HZZP5B.js} +2 -2
  245. package/dist/cdn/{DKCGBLJ7.js → Q7Z5NYII.js} +2 -2
  246. package/dist/cdn/{DBXRQYLV.js → QC7NZJ3S.js} +2 -2
  247. package/dist/cdn/QLFISHK2.js +4 -0
  248. package/dist/cdn/{MAAHAOFI.js → QN33I7LZ.js} +2 -2
  249. package/dist/cdn/{ORMEDKMM.js → QOFZ275H.js} +2 -2
  250. package/dist/cdn/{HEUACJCQ.js → QTWUBF6E.js} +2 -2
  251. package/dist/cdn/{V74WMMJB.js → QUOUTJQ3.js} +2 -2
  252. package/dist/cdn/{XXXOK2AN.js → QVIZVET7.js} +1 -1
  253. package/dist/cdn/{TMYV33RM.js → QWOKTIQO.js} +2 -2
  254. package/dist/cdn/QZFQNFNX.js +4 -0
  255. package/dist/cdn/{UGQ7A3AV.js → R26GJTBL.js} +2 -2
  256. package/dist/cdn/{I47YUBIO.js → RDLASZQL.js} +2 -2
  257. package/dist/cdn/RFZSMTAS.js +4 -0
  258. package/dist/cdn/{H3ZLPV6G.js → RGS23LVD.js} +2 -2
  259. package/dist/cdn/{XEOHQBGQ.js → RHJUIQ6M.js} +2 -2
  260. package/dist/cdn/{SFVC54W6.js → RIIZ7QQZ.js} +2 -2
  261. package/dist/cdn/{RPWIPJQA.js → RJ5O3HFW.js} +2 -2
  262. package/dist/cdn/{3YSB3RU7.js → RJJG2Z2Z.js} +2 -2
  263. package/dist/cdn/RJK57CKL.js +4 -0
  264. package/dist/cdn/{Z3RNLOPZ.js → RM6OJ6CC.js} +2 -2
  265. package/dist/cdn/{WV4LBTYJ.js → RPXT2OKO.js} +2 -2
  266. package/dist/cdn/{JJAMQ4WV.js → RSTLLF3I.js} +2 -2
  267. package/dist/cdn/{R6YV6SW3.js → RYT2CJ6F.js} +1 -1
  268. package/dist/cdn/{J5ECCNG4.js → RYYQGQBV.js} +2 -2
  269. package/dist/cdn/{GXMUQTZ6.js → RZDRPSVM.js} +2 -2
  270. package/dist/cdn/{HUXOAI3T.js → S2Y4WEKE.js} +2 -2
  271. package/dist/cdn/S4YZPPXH.js +18 -0
  272. package/dist/cdn/{L2P4PSVX.js → S64JEF4E.js} +1 -1
  273. package/dist/cdn/{AJZR4EZI.js → SAANCWI3.js} +2 -2
  274. package/dist/cdn/{NCG2CTFW.js → SEBUGPQK.js} +3 -3
  275. package/dist/cdn/{J3EFGQFC.js → SGKKUBUH.js} +2 -2
  276. package/dist/cdn/{654WFH6V.js → SIN56QR7.js} +2 -2
  277. package/dist/cdn/{ZDHGSMY4.js → SKXF2EYJ.js} +2 -2
  278. package/dist/cdn/{JJ5YUEQ7.js → STCGIBGD.js} +2 -2
  279. package/dist/cdn/{VT4PBX6Z.js → SXVHHNRC.js} +2 -2
  280. package/dist/cdn/{IXVMFBX6.js → T6G5VVOC.js} +2 -2
  281. package/dist/cdn/{WTPWH2ET.js → TD5NAM5H.js} +2 -2
  282. package/dist/cdn/{4IB6H45E.js → TFOR5IN2.js} +2 -2
  283. package/dist/cdn/{Y5B57EZE.js → TLGYR64Y.js} +1 -1
  284. package/dist/cdn/{NB26BX4K.js → TOGKYXTE.js} +2 -2
  285. package/dist/cdn/{6GFFWVTF.js → TP6Q7Q5F.js} +2 -2
  286. package/dist/cdn/{6N4CDXEZ.js → TV3E3QAW.js} +2 -2
  287. package/dist/cdn/{SLRB4XTI.js → TYOYY3PQ.js} +2 -2
  288. package/dist/cdn/{LYHZ35GH.js → U3D5OGPP.js} +2 -2
  289. package/dist/cdn/{HK5LTAJD.js → U42WTSOS.js} +2 -2
  290. package/dist/cdn/{7XJLNFSP.js → U4JBG65X.js} +2 -2
  291. package/dist/cdn/{GIULRKSE.js → UACNTGZ7.js} +2 -2
  292. package/dist/cdn/{C3H6OHA4.js → UBFQBYB3.js} +2 -2
  293. package/dist/cdn/{JPP3LPWG.js → UF6K5ZJL.js} +1 -1
  294. package/dist/cdn/{I4RKVCPE.js → UHUBSPUI.js} +2 -2
  295. package/dist/cdn/{6SHU6HZP.js → UJOAAHPG.js} +2 -2
  296. package/dist/cdn/{H2TEAILL.js → UK2A3ONQ.js} +2 -2
  297. package/dist/cdn/{XAPJBUP6.js → UMCRNTVU.js} +2 -2
  298. package/dist/cdn/{66SL6MO6.js → UOHDOMRU.js} +2 -2
  299. package/dist/cdn/{O4UEPX5U.js → UPCU2YNO.js} +2 -2
  300. package/dist/cdn/{P3TMI6SJ.js → UX2L75ED.js} +2 -2
  301. package/dist/cdn/{DJNIJZXV.js → V4YQJNMY.js} +2 -2
  302. package/dist/cdn/{GFGOOTDZ.js → V6KV2EKM.js} +2 -2
  303. package/dist/cdn/{4RZBOJMG.js → V7AWXEB3.js} +2 -2
  304. package/dist/cdn/{ZMR6JDJO.js → VA4HF6BT.js} +2 -2
  305. package/dist/cdn/{7OZOSSU4.js → VB6LKF6E.js} +2 -2
  306. package/dist/cdn/VJFEHP5L.js +4 -0
  307. package/dist/cdn/{JKAPZZYN.js → VL4YBUCG.js} +2 -2
  308. package/dist/cdn/{M42SHERO.js → VSK4SSCO.js} +1 -1
  309. package/dist/cdn/{I4TU5GZV.js → VZU32GLR.js} +2 -2
  310. package/dist/cdn/{ZCAXJDQM.js → WB6EVTKB.js} +2 -2
  311. package/dist/cdn/{SGHSHOZF.js → WBOFE34I.js} +2 -2
  312. package/dist/cdn/{DSKUVHJ7.js → WLSSLUAO.js} +2 -2
  313. package/dist/cdn/WUVU4M3M.js +4 -0
  314. package/dist/cdn/{6KI6JQCP.js → X5KH75KH.js} +2 -2
  315. package/dist/cdn/{DQELQJ2V.js → X7BVJ3FT.js} +2 -2
  316. package/dist/cdn/{7AUPIIQO.js → XGDUNKJK.js} +2 -2
  317. package/dist/cdn/{6F4TRMAR.js → XKSN7OZN.js} +2 -2
  318. package/dist/cdn/{5GQA7ZMT.js → XWLRY4IU.js} +2 -2
  319. package/dist/cdn/{736KNYAY.js → XYD5LQZ7.js} +2 -2
  320. package/dist/cdn/{QNYIPNQH.js → Y6OFLOPT.js} +2 -2
  321. package/dist/cdn/{6A4SVEAA.js → YFRFTNM4.js} +2 -2
  322. package/dist/cdn/{SJN4JWJ2.js → YOELOUHA.js} +2 -2
  323. package/dist/cdn/{FPA7NPFE.js → YOTK7QJY.js} +2 -2
  324. package/dist/cdn/{P77JKZLL.js → YQTNI3UI.js} +2 -2
  325. package/dist/cdn/{J5ZGFHP5.js → YVQHAXE6.js} +2 -2
  326. package/dist/cdn/{UANZUKDZ.js → Z4FRBC4G.js} +1 -1
  327. package/dist/cdn/{OBSOTBQX.js → Z6JQQJT2.js} +2 -2
  328. package/dist/cdn/{DLQKUUFF.js → Z7BHSA4E.js} +2 -2
  329. package/dist/cdn/{5DVDAPW6.js → Z7HUXWT7.js} +2 -2
  330. package/dist/cdn/{YC5XQ6ZJ.js → Z7IEGCD6.js} +2 -2
  331. package/dist/cdn/{ALVR5XSZ.js → ZBI4IGN5.js} +2 -2
  332. package/dist/cdn/{MN5CJ6GH.js → ZD4PAHDV.js} +2 -2
  333. package/dist/cdn/{7RMQ2FQW.js → ZHL4Y2JO.js} +2 -2
  334. package/dist/cdn/{6XKPEQRW.js → ZIGUL6LU.js} +2 -2
  335. package/dist/cdn/{QJ32P4G7.js → ZII5BUBB.js} +2 -2
  336. package/dist/cdn/{WZOYXSYY.js → ZKFVGATQ.js} +2 -2
  337. package/dist/cdn/{DBGEBPX5.js → ZN5AXSHK.js} +2 -2
  338. package/dist/cdn/{4LGPI4DO.js → ZOCHMKIS.js} +1 -1
  339. package/dist/cdn/{LSCDXQW3.js → ZSRLOM3Q.js} +1 -1
  340. package/dist/cdn/{OUYNXMB5.js → ZU6MGOIO.js} +2 -2
  341. package/dist/cdn/assets/arcgis-pdf-creator/labelFormats.json +191 -1
  342. package/dist/cdn/assets/buffer-tools/t9n/messages.ar.json +6 -1
  343. package/dist/cdn/assets/buffer-tools/t9n/messages.bg.json +6 -1
  344. package/dist/cdn/assets/buffer-tools/t9n/messages.bs.json +6 -1
  345. package/dist/cdn/assets/buffer-tools/t9n/messages.ca.json +6 -1
  346. package/dist/cdn/assets/buffer-tools/t9n/messages.cs.json +6 -1
  347. package/dist/cdn/assets/buffer-tools/t9n/messages.da.json +6 -1
  348. package/dist/cdn/assets/buffer-tools/t9n/messages.de.json +6 -1
  349. package/dist/cdn/assets/buffer-tools/t9n/messages.el.json +6 -1
  350. package/dist/cdn/assets/buffer-tools/t9n/messages.en.json +6 -1
  351. package/dist/cdn/assets/buffer-tools/t9n/messages.es.json +6 -1
  352. package/dist/cdn/assets/buffer-tools/t9n/messages.et.json +6 -1
  353. package/dist/cdn/assets/buffer-tools/t9n/messages.fi.json +6 -1
  354. package/dist/cdn/assets/buffer-tools/t9n/messages.fr.json +6 -1
  355. package/dist/cdn/assets/buffer-tools/t9n/messages.he.json +6 -1
  356. package/dist/cdn/assets/buffer-tools/t9n/messages.hr.json +6 -1
  357. package/dist/cdn/assets/buffer-tools/t9n/messages.hu.json +6 -1
  358. package/dist/cdn/assets/buffer-tools/t9n/messages.id.json +6 -1
  359. package/dist/cdn/assets/buffer-tools/t9n/messages.it.json +6 -1
  360. package/dist/cdn/assets/buffer-tools/t9n/messages.ja.json +6 -1
  361. package/dist/cdn/assets/buffer-tools/t9n/messages.json +6 -1
  362. package/dist/cdn/assets/buffer-tools/t9n/messages.ko.json +6 -1
  363. package/dist/cdn/assets/buffer-tools/t9n/messages.lt.json +6 -1
  364. package/dist/cdn/assets/buffer-tools/t9n/messages.lv.json +6 -1
  365. package/dist/cdn/assets/buffer-tools/t9n/messages.nb.json +6 -1
  366. package/dist/cdn/assets/buffer-tools/t9n/messages.nl.json +6 -1
  367. package/dist/cdn/assets/buffer-tools/t9n/messages.no.json +6 -1
  368. package/dist/cdn/assets/buffer-tools/t9n/messages.pl.json +6 -1
  369. package/dist/cdn/assets/buffer-tools/t9n/messages.pt-BR.json +6 -1
  370. package/dist/cdn/assets/buffer-tools/t9n/messages.pt-PT.json +6 -1
  371. package/dist/cdn/assets/buffer-tools/t9n/messages.ro.json +6 -1
  372. package/dist/cdn/assets/buffer-tools/t9n/messages.ru.json +6 -1
  373. package/dist/cdn/assets/buffer-tools/t9n/messages.sk.json +6 -1
  374. package/dist/cdn/assets/buffer-tools/t9n/messages.sl.json +6 -1
  375. package/dist/cdn/assets/buffer-tools/t9n/messages.sr.json +6 -1
  376. package/dist/cdn/assets/buffer-tools/t9n/messages.sv.json +6 -1
  377. package/dist/cdn/assets/buffer-tools/t9n/messages.th.json +6 -1
  378. package/dist/cdn/assets/buffer-tools/t9n/messages.tr.json +6 -1
  379. package/dist/cdn/assets/buffer-tools/t9n/messages.uk.json +6 -1
  380. package/dist/cdn/assets/buffer-tools/t9n/messages.vi.json +6 -1
  381. package/dist/cdn/assets/buffer-tools/t9n/messages.zh-CN.json +6 -1
  382. package/dist/cdn/assets/buffer-tools/t9n/messages.zh-HK.json +6 -1
  383. package/dist/cdn/assets/buffer-tools/t9n/messages.zh-TW.json +6 -1
  384. package/dist/cdn/assets/card-manager/t9n/messages.ar.json +7 -1
  385. package/dist/cdn/assets/card-manager/t9n/messages.bg.json +7 -1
  386. package/dist/cdn/assets/card-manager/t9n/messages.bs.json +7 -1
  387. package/dist/cdn/assets/card-manager/t9n/messages.ca.json +7 -1
  388. package/dist/cdn/assets/card-manager/t9n/messages.cs.json +7 -1
  389. package/dist/cdn/assets/card-manager/t9n/messages.da.json +7 -1
  390. package/dist/cdn/assets/card-manager/t9n/messages.de.json +7 -1
  391. package/dist/cdn/assets/card-manager/t9n/messages.el.json +7 -1
  392. package/dist/cdn/assets/card-manager/t9n/messages.en.json +7 -1
  393. package/dist/cdn/assets/card-manager/t9n/messages.es.json +7 -1
  394. package/dist/cdn/assets/card-manager/t9n/messages.et.json +7 -1
  395. package/dist/cdn/assets/card-manager/t9n/messages.fi.json +7 -1
  396. package/dist/cdn/assets/card-manager/t9n/messages.fr.json +7 -1
  397. package/dist/cdn/assets/card-manager/t9n/messages.he.json +7 -1
  398. package/dist/cdn/assets/card-manager/t9n/messages.hr.json +7 -1
  399. package/dist/cdn/assets/card-manager/t9n/messages.hu.json +7 -1
  400. package/dist/cdn/assets/card-manager/t9n/messages.id.json +7 -1
  401. package/dist/cdn/assets/card-manager/t9n/messages.it.json +7 -1
  402. package/dist/cdn/assets/card-manager/t9n/messages.ja.json +7 -1
  403. package/dist/cdn/assets/card-manager/t9n/messages.json +7 -1
  404. package/dist/cdn/assets/card-manager/t9n/messages.ko.json +7 -1
  405. package/dist/cdn/assets/card-manager/t9n/messages.lt.json +7 -1
  406. package/dist/cdn/assets/card-manager/t9n/messages.lv.json +7 -1
  407. package/dist/cdn/assets/card-manager/t9n/messages.nb.json +7 -1
  408. package/dist/cdn/assets/card-manager/t9n/messages.nl.json +7 -1
  409. package/dist/cdn/assets/card-manager/t9n/messages.no.json +7 -1
  410. package/dist/cdn/assets/card-manager/t9n/messages.pl.json +7 -1
  411. package/dist/cdn/assets/card-manager/t9n/messages.pt-BR.json +7 -1
  412. package/dist/cdn/assets/card-manager/t9n/messages.pt-PT.json +7 -1
  413. package/dist/cdn/assets/card-manager/t9n/messages.ro.json +7 -1
  414. package/dist/cdn/assets/card-manager/t9n/messages.ru.json +7 -1
  415. package/dist/cdn/assets/card-manager/t9n/messages.sk.json +7 -1
  416. package/dist/cdn/assets/card-manager/t9n/messages.sl.json +7 -1
  417. package/dist/cdn/assets/card-manager/t9n/messages.sr.json +7 -1
  418. package/dist/cdn/assets/card-manager/t9n/messages.sv.json +7 -1
  419. package/dist/cdn/assets/card-manager/t9n/messages.th.json +7 -1
  420. package/dist/cdn/assets/card-manager/t9n/messages.tr.json +7 -1
  421. package/dist/cdn/assets/card-manager/t9n/messages.uk.json +7 -1
  422. package/dist/cdn/assets/card-manager/t9n/messages.vi.json +7 -1
  423. package/dist/cdn/assets/card-manager/t9n/messages.zh-CN.json +7 -1
  424. package/dist/cdn/assets/card-manager/t9n/messages.zh-HK.json +7 -1
  425. package/dist/cdn/assets/card-manager/t9n/messages.zh-TW.json +7 -1
  426. package/dist/cdn/assets/consent-manager/t9n/messages.ar.json +5 -1
  427. package/dist/cdn/assets/consent-manager/t9n/messages.bg.json +5 -1
  428. package/dist/cdn/assets/consent-manager/t9n/messages.bs.json +5 -1
  429. package/dist/cdn/assets/consent-manager/t9n/messages.ca.json +5 -1
  430. package/dist/cdn/assets/consent-manager/t9n/messages.cs.json +5 -1
  431. package/dist/cdn/assets/consent-manager/t9n/messages.da.json +5 -1
  432. package/dist/cdn/assets/consent-manager/t9n/messages.de.json +5 -1
  433. package/dist/cdn/assets/consent-manager/t9n/messages.el.json +5 -1
  434. package/dist/cdn/assets/consent-manager/t9n/messages.en.json +5 -1
  435. package/dist/cdn/assets/consent-manager/t9n/messages.es.json +5 -1
  436. package/dist/cdn/assets/consent-manager/t9n/messages.et.json +5 -1
  437. package/dist/cdn/assets/consent-manager/t9n/messages.fi.json +5 -1
  438. package/dist/cdn/assets/consent-manager/t9n/messages.fr.json +5 -1
  439. package/dist/cdn/assets/consent-manager/t9n/messages.he.json +5 -1
  440. package/dist/cdn/assets/consent-manager/t9n/messages.hr.json +5 -1
  441. package/dist/cdn/assets/consent-manager/t9n/messages.hu.json +5 -1
  442. package/dist/cdn/assets/consent-manager/t9n/messages.id.json +5 -1
  443. package/dist/cdn/assets/consent-manager/t9n/messages.it.json +5 -1
  444. package/dist/cdn/assets/consent-manager/t9n/messages.ja.json +5 -1
  445. package/dist/cdn/assets/consent-manager/t9n/messages.json +5 -1
  446. package/dist/cdn/assets/consent-manager/t9n/messages.ko.json +5 -1
  447. package/dist/cdn/assets/consent-manager/t9n/messages.lt.json +5 -1
  448. package/dist/cdn/assets/consent-manager/t9n/messages.lv.json +5 -1
  449. package/dist/cdn/assets/consent-manager/t9n/messages.nb.json +5 -1
  450. package/dist/cdn/assets/consent-manager/t9n/messages.nl.json +5 -1
  451. package/dist/cdn/assets/consent-manager/t9n/messages.no.json +5 -1
  452. package/dist/cdn/assets/consent-manager/t9n/messages.pl.json +5 -1
  453. package/dist/cdn/assets/consent-manager/t9n/messages.pt-BR.json +5 -1
  454. package/dist/cdn/assets/consent-manager/t9n/messages.pt-PT.json +5 -1
  455. package/dist/cdn/assets/consent-manager/t9n/messages.ro.json +5 -1
  456. package/dist/cdn/assets/consent-manager/t9n/messages.ru.json +5 -1
  457. package/dist/cdn/assets/consent-manager/t9n/messages.sk.json +5 -1
  458. package/dist/cdn/assets/consent-manager/t9n/messages.sl.json +5 -1
  459. package/dist/cdn/assets/consent-manager/t9n/messages.sr.json +5 -1
  460. package/dist/cdn/assets/consent-manager/t9n/messages.sv.json +5 -1
  461. package/dist/cdn/assets/consent-manager/t9n/messages.th.json +5 -1
  462. package/dist/cdn/assets/consent-manager/t9n/messages.tr.json +5 -1
  463. package/dist/cdn/assets/consent-manager/t9n/messages.uk.json +5 -1
  464. package/dist/cdn/assets/consent-manager/t9n/messages.vi.json +5 -1
  465. package/dist/cdn/assets/consent-manager/t9n/messages.zh-CN.json +5 -1
  466. package/dist/cdn/assets/consent-manager/t9n/messages.zh-HK.json +5 -1
  467. package/dist/cdn/assets/consent-manager/t9n/messages.zh-TW.json +5 -1
  468. package/dist/cdn/assets/create-feature/t9n/messages.ar.json +7 -1
  469. package/dist/cdn/assets/create-feature/t9n/messages.bg.json +7 -1
  470. package/dist/cdn/assets/create-feature/t9n/messages.bs.json +7 -1
  471. package/dist/cdn/assets/create-feature/t9n/messages.ca.json +7 -1
  472. package/dist/cdn/assets/create-feature/t9n/messages.cs.json +7 -1
  473. package/dist/cdn/assets/create-feature/t9n/messages.da.json +7 -1
  474. package/dist/cdn/assets/create-feature/t9n/messages.de.json +7 -1
  475. package/dist/cdn/assets/create-feature/t9n/messages.el.json +7 -1
  476. package/dist/cdn/assets/create-feature/t9n/messages.en.json +7 -1
  477. package/dist/cdn/assets/create-feature/t9n/messages.es.json +7 -1
  478. package/dist/cdn/assets/create-feature/t9n/messages.et.json +7 -1
  479. package/dist/cdn/assets/create-feature/t9n/messages.fi.json +7 -1
  480. package/dist/cdn/assets/create-feature/t9n/messages.fr.json +7 -1
  481. package/dist/cdn/assets/create-feature/t9n/messages.he.json +7 -1
  482. package/dist/cdn/assets/create-feature/t9n/messages.hr.json +7 -1
  483. package/dist/cdn/assets/create-feature/t9n/messages.hu.json +7 -1
  484. package/dist/cdn/assets/create-feature/t9n/messages.id.json +7 -1
  485. package/dist/cdn/assets/create-feature/t9n/messages.it.json +7 -1
  486. package/dist/cdn/assets/create-feature/t9n/messages.ja.json +7 -1
  487. package/dist/cdn/assets/create-feature/t9n/messages.json +7 -1
  488. package/dist/cdn/assets/create-feature/t9n/messages.ko.json +7 -1
  489. package/dist/cdn/assets/create-feature/t9n/messages.lt.json +7 -1
  490. package/dist/cdn/assets/create-feature/t9n/messages.lv.json +7 -1
  491. package/dist/cdn/assets/create-feature/t9n/messages.nb.json +5 -1
  492. package/dist/cdn/assets/create-feature/t9n/messages.nl.json +7 -1
  493. package/dist/cdn/assets/create-feature/t9n/messages.no.json +7 -1
  494. package/dist/cdn/assets/create-feature/t9n/messages.pl.json +7 -1
  495. package/dist/cdn/assets/create-feature/t9n/messages.pt-BR.json +7 -1
  496. package/dist/cdn/assets/create-feature/t9n/messages.pt-PT.json +7 -1
  497. package/dist/cdn/assets/create-feature/t9n/messages.ro.json +7 -1
  498. package/dist/cdn/assets/create-feature/t9n/messages.ru.json +7 -1
  499. package/dist/cdn/assets/create-feature/t9n/messages.sk.json +7 -1
  500. package/dist/cdn/assets/create-feature/t9n/messages.sl.json +7 -1
  501. package/dist/cdn/assets/create-feature/t9n/messages.sr.json +7 -1
  502. package/dist/cdn/assets/create-feature/t9n/messages.sv.json +7 -1
  503. package/dist/cdn/assets/create-feature/t9n/messages.th.json +7 -1
  504. package/dist/cdn/assets/create-feature/t9n/messages.tr.json +7 -1
  505. package/dist/cdn/assets/create-feature/t9n/messages.uk.json +7 -1
  506. package/dist/cdn/assets/create-feature/t9n/messages.vi.json +7 -1
  507. package/dist/cdn/assets/create-feature/t9n/messages.zh-CN.json +7 -1
  508. package/dist/cdn/assets/create-feature/t9n/messages.zh-HK.json +7 -1
  509. package/dist/cdn/assets/create-feature/t9n/messages.zh-TW.json +7 -1
  510. package/dist/cdn/assets/create-related-feature/t9n/messages.ar.json +3 -1
  511. package/dist/cdn/assets/create-related-feature/t9n/messages.bg.json +3 -1
  512. package/dist/cdn/assets/create-related-feature/t9n/messages.bs.json +3 -1
  513. package/dist/cdn/assets/create-related-feature/t9n/messages.ca.json +3 -1
  514. package/dist/cdn/assets/create-related-feature/t9n/messages.cs.json +3 -1
  515. package/dist/cdn/assets/create-related-feature/t9n/messages.da.json +3 -1
  516. package/dist/cdn/assets/create-related-feature/t9n/messages.de.json +3 -1
  517. package/dist/cdn/assets/create-related-feature/t9n/messages.el.json +3 -1
  518. package/dist/cdn/assets/create-related-feature/t9n/messages.en.json +3 -1
  519. package/dist/cdn/assets/create-related-feature/t9n/messages.es.json +3 -1
  520. package/dist/cdn/assets/create-related-feature/t9n/messages.et.json +3 -1
  521. package/dist/cdn/assets/create-related-feature/t9n/messages.fi.json +3 -1
  522. package/dist/cdn/assets/create-related-feature/t9n/messages.fr.json +3 -1
  523. package/dist/cdn/assets/create-related-feature/t9n/messages.he.json +3 -1
  524. package/dist/cdn/assets/create-related-feature/t9n/messages.hr.json +3 -1
  525. package/dist/cdn/assets/create-related-feature/t9n/messages.hu.json +3 -1
  526. package/dist/cdn/assets/create-related-feature/t9n/messages.id.json +3 -1
  527. package/dist/cdn/assets/create-related-feature/t9n/messages.it.json +3 -1
  528. package/dist/cdn/assets/create-related-feature/t9n/messages.ja.json +3 -1
  529. package/dist/cdn/assets/create-related-feature/t9n/messages.json +3 -1
  530. package/dist/cdn/assets/create-related-feature/t9n/messages.ko.json +3 -1
  531. package/dist/cdn/assets/create-related-feature/t9n/messages.lt.json +3 -1
  532. package/dist/cdn/assets/create-related-feature/t9n/messages.lv.json +3 -1
  533. package/dist/cdn/assets/create-related-feature/t9n/messages.nb.json +3 -1
  534. package/dist/cdn/assets/create-related-feature/t9n/messages.nl.json +3 -1
  535. package/dist/cdn/assets/create-related-feature/t9n/messages.no.json +3 -1
  536. package/dist/cdn/assets/create-related-feature/t9n/messages.pl.json +3 -1
  537. package/dist/cdn/assets/create-related-feature/t9n/messages.pt-BR.json +3 -1
  538. package/dist/cdn/assets/create-related-feature/t9n/messages.pt-PT.json +3 -1
  539. package/dist/cdn/assets/create-related-feature/t9n/messages.ro.json +3 -1
  540. package/dist/cdn/assets/create-related-feature/t9n/messages.ru.json +3 -1
  541. package/dist/cdn/assets/create-related-feature/t9n/messages.sk.json +3 -1
  542. package/dist/cdn/assets/create-related-feature/t9n/messages.sl.json +3 -1
  543. package/dist/cdn/assets/create-related-feature/t9n/messages.sr.json +3 -1
  544. package/dist/cdn/assets/create-related-feature/t9n/messages.sv.json +3 -1
  545. package/dist/cdn/assets/create-related-feature/t9n/messages.th.json +3 -1
  546. package/dist/cdn/assets/create-related-feature/t9n/messages.tr.json +3 -1
  547. package/dist/cdn/assets/create-related-feature/t9n/messages.uk.json +3 -1
  548. package/dist/cdn/assets/create-related-feature/t9n/messages.vi.json +3 -1
  549. package/dist/cdn/assets/create-related-feature/t9n/messages.zh-CN.json +3 -1
  550. package/dist/cdn/assets/create-related-feature/t9n/messages.zh-HK.json +3 -1
  551. package/dist/cdn/assets/create-related-feature/t9n/messages.zh-TW.json +3 -1
  552. package/dist/cdn/assets/crowdsource-manager/t9n/messages.ar.json +15 -1
  553. package/dist/cdn/assets/crowdsource-manager/t9n/messages.bg.json +15 -1
  554. package/dist/cdn/assets/crowdsource-manager/t9n/messages.bs.json +15 -1
  555. package/dist/cdn/assets/crowdsource-manager/t9n/messages.ca.json +15 -1
  556. package/dist/cdn/assets/crowdsource-manager/t9n/messages.cs.json +15 -1
  557. package/dist/cdn/assets/crowdsource-manager/t9n/messages.da.json +15 -1
  558. package/dist/cdn/assets/crowdsource-manager/t9n/messages.de.json +15 -1
  559. package/dist/cdn/assets/crowdsource-manager/t9n/messages.el.json +15 -1
  560. package/dist/cdn/assets/crowdsource-manager/t9n/messages.en.json +15 -1
  561. package/dist/cdn/assets/crowdsource-manager/t9n/messages.es.json +15 -1
  562. package/dist/cdn/assets/crowdsource-manager/t9n/messages.et.json +15 -1
  563. package/dist/cdn/assets/crowdsource-manager/t9n/messages.fi.json +15 -1
  564. package/dist/cdn/assets/crowdsource-manager/t9n/messages.fr.json +15 -1
  565. package/dist/cdn/assets/crowdsource-manager/t9n/messages.he.json +15 -1
  566. package/dist/cdn/assets/crowdsource-manager/t9n/messages.hr.json +15 -1
  567. package/dist/cdn/assets/crowdsource-manager/t9n/messages.hu.json +15 -1
  568. package/dist/cdn/assets/crowdsource-manager/t9n/messages.id.json +15 -1
  569. package/dist/cdn/assets/crowdsource-manager/t9n/messages.it.json +15 -1
  570. package/dist/cdn/assets/crowdsource-manager/t9n/messages.ja.json +15 -1
  571. package/dist/cdn/assets/crowdsource-manager/t9n/messages.json +15 -1
  572. package/dist/cdn/assets/crowdsource-manager/t9n/messages.ko.json +15 -1
  573. package/dist/cdn/assets/crowdsource-manager/t9n/messages.lt.json +15 -1
  574. package/dist/cdn/assets/crowdsource-manager/t9n/messages.lv.json +15 -1
  575. package/dist/cdn/assets/crowdsource-manager/t9n/messages.nb.json +15 -1
  576. package/dist/cdn/assets/crowdsource-manager/t9n/messages.nl.json +15 -1
  577. package/dist/cdn/assets/crowdsource-manager/t9n/messages.no.json +15 -1
  578. package/dist/cdn/assets/crowdsource-manager/t9n/messages.pl.json +15 -1
  579. package/dist/cdn/assets/crowdsource-manager/t9n/messages.pt-BR.json +15 -1
  580. package/dist/cdn/assets/crowdsource-manager/t9n/messages.pt-PT.json +15 -1
  581. package/dist/cdn/assets/crowdsource-manager/t9n/messages.ro.json +15 -1
  582. package/dist/cdn/assets/crowdsource-manager/t9n/messages.ru.json +15 -1
  583. package/dist/cdn/assets/crowdsource-manager/t9n/messages.sk.json +15 -1
  584. package/dist/cdn/assets/crowdsource-manager/t9n/messages.sl.json +15 -1
  585. package/dist/cdn/assets/crowdsource-manager/t9n/messages.sr.json +15 -1
  586. package/dist/cdn/assets/crowdsource-manager/t9n/messages.sv.json +15 -1
  587. package/dist/cdn/assets/crowdsource-manager/t9n/messages.th.json +15 -1
  588. package/dist/cdn/assets/crowdsource-manager/t9n/messages.tr.json +15 -1
  589. package/dist/cdn/assets/crowdsource-manager/t9n/messages.uk.json +15 -1
  590. package/dist/cdn/assets/crowdsource-manager/t9n/messages.vi.json +15 -1
  591. package/dist/cdn/assets/crowdsource-manager/t9n/messages.zh-CN.json +15 -1
  592. package/dist/cdn/assets/crowdsource-manager/t9n/messages.zh-HK.json +15 -1
  593. package/dist/cdn/assets/crowdsource-manager/t9n/messages.zh-TW.json +15 -1
  594. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ar.json +32 -1
  595. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.bg.json +32 -1
  596. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.bs.json +32 -1
  597. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ca.json +32 -1
  598. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.cs.json +32 -1
  599. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.da.json +32 -1
  600. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.de.json +32 -1
  601. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.el.json +32 -1
  602. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.en.json +32 -1
  603. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.es.json +32 -1
  604. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.et.json +32 -1
  605. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.fi.json +32 -1
  606. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.fr.json +32 -1
  607. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.he.json +32 -1
  608. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.hr.json +32 -1
  609. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.hu.json +32 -1
  610. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.id.json +32 -1
  611. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.it.json +32 -1
  612. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ja.json +32 -1
  613. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.json +32 -1
  614. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ko.json +32 -1
  615. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.lt.json +32 -1
  616. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.lv.json +32 -1
  617. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.nb.json +32 -1
  618. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.nl.json +32 -1
  619. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.no.json +32 -1
  620. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.pl.json +32 -1
  621. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.pt-BR.json +32 -1
  622. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.pt-PT.json +32 -1
  623. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ro.json +32 -1
  624. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.ru.json +32 -1
  625. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.sk.json +32 -1
  626. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.sl.json +32 -1
  627. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.sr.json +32 -1
  628. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.sv.json +32 -1
  629. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.th.json +32 -1
  630. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.tr.json +32 -1
  631. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.uk.json +32 -1
  632. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.vi.json +32 -1
  633. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.zh-CN.json +32 -1
  634. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.zh-HK.json +32 -1
  635. package/dist/cdn/assets/crowdsource-reporter/t9n/messages.zh-TW.json +32 -1
  636. package/dist/cdn/assets/delete-button/t9n/messages.ar.json +8 -1
  637. package/dist/cdn/assets/delete-button/t9n/messages.bg.json +8 -1
  638. package/dist/cdn/assets/delete-button/t9n/messages.bs.json +8 -1
  639. package/dist/cdn/assets/delete-button/t9n/messages.ca.json +8 -1
  640. package/dist/cdn/assets/delete-button/t9n/messages.cs.json +8 -1
  641. package/dist/cdn/assets/delete-button/t9n/messages.da.json +8 -1
  642. package/dist/cdn/assets/delete-button/t9n/messages.de.json +8 -1
  643. package/dist/cdn/assets/delete-button/t9n/messages.el.json +8 -1
  644. package/dist/cdn/assets/delete-button/t9n/messages.en.json +8 -1
  645. package/dist/cdn/assets/delete-button/t9n/messages.es.json +8 -1
  646. package/dist/cdn/assets/delete-button/t9n/messages.et.json +8 -1
  647. package/dist/cdn/assets/delete-button/t9n/messages.fi.json +8 -1
  648. package/dist/cdn/assets/delete-button/t9n/messages.fr.json +8 -1
  649. package/dist/cdn/assets/delete-button/t9n/messages.he.json +8 -1
  650. package/dist/cdn/assets/delete-button/t9n/messages.hr.json +8 -1
  651. package/dist/cdn/assets/delete-button/t9n/messages.hu.json +8 -1
  652. package/dist/cdn/assets/delete-button/t9n/messages.id.json +8 -1
  653. package/dist/cdn/assets/delete-button/t9n/messages.it.json +8 -1
  654. package/dist/cdn/assets/delete-button/t9n/messages.ja.json +8 -1
  655. package/dist/cdn/assets/delete-button/t9n/messages.json +8 -1
  656. package/dist/cdn/assets/delete-button/t9n/messages.ko.json +8 -1
  657. package/dist/cdn/assets/delete-button/t9n/messages.lt.json +8 -1
  658. package/dist/cdn/assets/delete-button/t9n/messages.lv.json +8 -1
  659. package/dist/cdn/assets/delete-button/t9n/messages.nb.json +8 -1
  660. package/dist/cdn/assets/delete-button/t9n/messages.nl.json +8 -1
  661. package/dist/cdn/assets/delete-button/t9n/messages.no.json +8 -1
  662. package/dist/cdn/assets/delete-button/t9n/messages.pl.json +8 -1
  663. package/dist/cdn/assets/delete-button/t9n/messages.pt-BR.json +8 -1
  664. package/dist/cdn/assets/delete-button/t9n/messages.pt-PT.json +8 -1
  665. package/dist/cdn/assets/delete-button/t9n/messages.ro.json +8 -1
  666. package/dist/cdn/assets/delete-button/t9n/messages.ru.json +8 -1
  667. package/dist/cdn/assets/delete-button/t9n/messages.sk.json +8 -1
  668. package/dist/cdn/assets/delete-button/t9n/messages.sl.json +8 -1
  669. package/dist/cdn/assets/delete-button/t9n/messages.sr.json +8 -1
  670. package/dist/cdn/assets/delete-button/t9n/messages.sv.json +8 -1
  671. package/dist/cdn/assets/delete-button/t9n/messages.th.json +8 -1
  672. package/dist/cdn/assets/delete-button/t9n/messages.tr.json +8 -1
  673. package/dist/cdn/assets/delete-button/t9n/messages.uk.json +8 -1
  674. package/dist/cdn/assets/delete-button/t9n/messages.vi.json +8 -1
  675. package/dist/cdn/assets/delete-button/t9n/messages.zh-CN.json +8 -1
  676. package/dist/cdn/assets/delete-button/t9n/messages.zh-HK.json +8 -1
  677. package/dist/cdn/assets/delete-button/t9n/messages.zh-TW.json +8 -1
  678. package/dist/cdn/assets/delete-dialog/t9n/messages.ar.json +8 -1
  679. package/dist/cdn/assets/delete-dialog/t9n/messages.bg.json +8 -1
  680. package/dist/cdn/assets/delete-dialog/t9n/messages.bs.json +8 -1
  681. package/dist/cdn/assets/delete-dialog/t9n/messages.ca.json +8 -1
  682. package/dist/cdn/assets/delete-dialog/t9n/messages.cs.json +8 -1
  683. package/dist/cdn/assets/delete-dialog/t9n/messages.da.json +8 -1
  684. package/dist/cdn/assets/delete-dialog/t9n/messages.de.json +8 -1
  685. package/dist/cdn/assets/delete-dialog/t9n/messages.el.json +8 -1
  686. package/dist/cdn/assets/delete-dialog/t9n/messages.en.json +8 -1
  687. package/dist/cdn/assets/delete-dialog/t9n/messages.es.json +8 -1
  688. package/dist/cdn/assets/delete-dialog/t9n/messages.et.json +8 -1
  689. package/dist/cdn/assets/delete-dialog/t9n/messages.fi.json +8 -1
  690. package/dist/cdn/assets/delete-dialog/t9n/messages.fr.json +8 -1
  691. package/dist/cdn/assets/delete-dialog/t9n/messages.he.json +8 -1
  692. package/dist/cdn/assets/delete-dialog/t9n/messages.hr.json +8 -1
  693. package/dist/cdn/assets/delete-dialog/t9n/messages.hu.json +8 -1
  694. package/dist/cdn/assets/delete-dialog/t9n/messages.id.json +8 -1
  695. package/dist/cdn/assets/delete-dialog/t9n/messages.it.json +8 -1
  696. package/dist/cdn/assets/delete-dialog/t9n/messages.ja.json +8 -1
  697. package/dist/cdn/assets/delete-dialog/t9n/messages.json +8 -1
  698. package/dist/cdn/assets/delete-dialog/t9n/messages.ko.json +8 -1
  699. package/dist/cdn/assets/delete-dialog/t9n/messages.lt.json +8 -1
  700. package/dist/cdn/assets/delete-dialog/t9n/messages.lv.json +8 -1
  701. package/dist/cdn/assets/delete-dialog/t9n/messages.nb.json +8 -1
  702. package/dist/cdn/assets/delete-dialog/t9n/messages.nl.json +8 -1
  703. package/dist/cdn/assets/delete-dialog/t9n/messages.no.json +8 -1
  704. package/dist/cdn/assets/delete-dialog/t9n/messages.pl.json +8 -1
  705. package/dist/cdn/assets/delete-dialog/t9n/messages.pt-BR.json +8 -1
  706. package/dist/cdn/assets/delete-dialog/t9n/messages.pt-PT.json +8 -1
  707. package/dist/cdn/assets/delete-dialog/t9n/messages.ro.json +8 -1
  708. package/dist/cdn/assets/delete-dialog/t9n/messages.ru.json +8 -1
  709. package/dist/cdn/assets/delete-dialog/t9n/messages.sk.json +8 -1
  710. package/dist/cdn/assets/delete-dialog/t9n/messages.sl.json +8 -1
  711. package/dist/cdn/assets/delete-dialog/t9n/messages.sr.json +8 -1
  712. package/dist/cdn/assets/delete-dialog/t9n/messages.sv.json +8 -1
  713. package/dist/cdn/assets/delete-dialog/t9n/messages.th.json +8 -1
  714. package/dist/cdn/assets/delete-dialog/t9n/messages.tr.json +8 -1
  715. package/dist/cdn/assets/delete-dialog/t9n/messages.uk.json +8 -1
  716. package/dist/cdn/assets/delete-dialog/t9n/messages.vi.json +8 -1
  717. package/dist/cdn/assets/delete-dialog/t9n/messages.zh-CN.json +8 -1
  718. package/dist/cdn/assets/delete-dialog/t9n/messages.zh-HK.json +8 -1
  719. package/dist/cdn/assets/delete-dialog/t9n/messages.zh-TW.json +8 -1
  720. package/dist/cdn/assets/edit-card/t9n/messages.ar.json +3 -1
  721. package/dist/cdn/assets/edit-card/t9n/messages.bg.json +3 -1
  722. package/dist/cdn/assets/edit-card/t9n/messages.bs.json +3 -1
  723. package/dist/cdn/assets/edit-card/t9n/messages.ca.json +3 -1
  724. package/dist/cdn/assets/edit-card/t9n/messages.cs.json +3 -1
  725. package/dist/cdn/assets/edit-card/t9n/messages.da.json +3 -1
  726. package/dist/cdn/assets/edit-card/t9n/messages.de.json +3 -1
  727. package/dist/cdn/assets/edit-card/t9n/messages.el.json +3 -1
  728. package/dist/cdn/assets/edit-card/t9n/messages.en.json +3 -1
  729. package/dist/cdn/assets/edit-card/t9n/messages.es.json +3 -1
  730. package/dist/cdn/assets/edit-card/t9n/messages.et.json +3 -1
  731. package/dist/cdn/assets/edit-card/t9n/messages.fi.json +3 -1
  732. package/dist/cdn/assets/edit-card/t9n/messages.fr.json +3 -1
  733. package/dist/cdn/assets/edit-card/t9n/messages.he.json +3 -1
  734. package/dist/cdn/assets/edit-card/t9n/messages.hr.json +3 -1
  735. package/dist/cdn/assets/edit-card/t9n/messages.hu.json +3 -1
  736. package/dist/cdn/assets/edit-card/t9n/messages.id.json +3 -1
  737. package/dist/cdn/assets/edit-card/t9n/messages.it.json +3 -1
  738. package/dist/cdn/assets/edit-card/t9n/messages.ja.json +3 -1
  739. package/dist/cdn/assets/edit-card/t9n/messages.json +3 -1
  740. package/dist/cdn/assets/edit-card/t9n/messages.ko.json +3 -1
  741. package/dist/cdn/assets/edit-card/t9n/messages.lt.json +3 -1
  742. package/dist/cdn/assets/edit-card/t9n/messages.lv.json +3 -1
  743. package/dist/cdn/assets/edit-card/t9n/messages.nb.json +3 -1
  744. package/dist/cdn/assets/edit-card/t9n/messages.nl.json +3 -1
  745. package/dist/cdn/assets/edit-card/t9n/messages.no.json +3 -1
  746. package/dist/cdn/assets/edit-card/t9n/messages.pl.json +3 -1
  747. package/dist/cdn/assets/edit-card/t9n/messages.pt-BR.json +3 -1
  748. package/dist/cdn/assets/edit-card/t9n/messages.pt-PT.json +3 -1
  749. package/dist/cdn/assets/edit-card/t9n/messages.ro.json +3 -1
  750. package/dist/cdn/assets/edit-card/t9n/messages.ru.json +3 -1
  751. package/dist/cdn/assets/edit-card/t9n/messages.sk.json +3 -1
  752. package/dist/cdn/assets/edit-card/t9n/messages.sl.json +3 -1
  753. package/dist/cdn/assets/edit-card/t9n/messages.sr.json +3 -1
  754. package/dist/cdn/assets/edit-card/t9n/messages.sv.json +3 -1
  755. package/dist/cdn/assets/edit-card/t9n/messages.th.json +3 -1
  756. package/dist/cdn/assets/edit-card/t9n/messages.tr.json +3 -1
  757. package/dist/cdn/assets/edit-card/t9n/messages.uk.json +3 -1
  758. package/dist/cdn/assets/edit-card/t9n/messages.vi.json +3 -1
  759. package/dist/cdn/assets/edit-card/t9n/messages.zh-CN.json +3 -1
  760. package/dist/cdn/assets/edit-card/t9n/messages.zh-HK.json +3 -1
  761. package/dist/cdn/assets/edit-card/t9n/messages.zh-TW.json +3 -1
  762. package/dist/cdn/assets/feature-list/t9n/messages.ar.json +9 -1
  763. package/dist/cdn/assets/feature-list/t9n/messages.bg.json +9 -1
  764. package/dist/cdn/assets/feature-list/t9n/messages.bs.json +9 -1
  765. package/dist/cdn/assets/feature-list/t9n/messages.ca.json +9 -1
  766. package/dist/cdn/assets/feature-list/t9n/messages.cs.json +9 -1
  767. package/dist/cdn/assets/feature-list/t9n/messages.da.json +9 -1
  768. package/dist/cdn/assets/feature-list/t9n/messages.de.json +9 -1
  769. package/dist/cdn/assets/feature-list/t9n/messages.el.json +9 -1
  770. package/dist/cdn/assets/feature-list/t9n/messages.en.json +9 -1
  771. package/dist/cdn/assets/feature-list/t9n/messages.es.json +9 -1
  772. package/dist/cdn/assets/feature-list/t9n/messages.et.json +9 -1
  773. package/dist/cdn/assets/feature-list/t9n/messages.fi.json +9 -1
  774. package/dist/cdn/assets/feature-list/t9n/messages.fr.json +9 -1
  775. package/dist/cdn/assets/feature-list/t9n/messages.he.json +9 -1
  776. package/dist/cdn/assets/feature-list/t9n/messages.hr.json +9 -1
  777. package/dist/cdn/assets/feature-list/t9n/messages.hu.json +9 -1
  778. package/dist/cdn/assets/feature-list/t9n/messages.id.json +9 -1
  779. package/dist/cdn/assets/feature-list/t9n/messages.it.json +9 -1
  780. package/dist/cdn/assets/feature-list/t9n/messages.ja.json +9 -1
  781. package/dist/cdn/assets/feature-list/t9n/messages.json +9 -1
  782. package/dist/cdn/assets/feature-list/t9n/messages.ko.json +9 -1
  783. package/dist/cdn/assets/feature-list/t9n/messages.lt.json +9 -1
  784. package/dist/cdn/assets/feature-list/t9n/messages.lv.json +9 -1
  785. package/dist/cdn/assets/feature-list/t9n/messages.nb.json +8 -1
  786. package/dist/cdn/assets/feature-list/t9n/messages.nl.json +9 -1
  787. package/dist/cdn/assets/feature-list/t9n/messages.no.json +9 -1
  788. package/dist/cdn/assets/feature-list/t9n/messages.pl.json +9 -1
  789. package/dist/cdn/assets/feature-list/t9n/messages.pt-BR.json +9 -1
  790. package/dist/cdn/assets/feature-list/t9n/messages.pt-PT.json +9 -1
  791. package/dist/cdn/assets/feature-list/t9n/messages.ro.json +9 -1
  792. package/dist/cdn/assets/feature-list/t9n/messages.ru.json +9 -1
  793. package/dist/cdn/assets/feature-list/t9n/messages.sk.json +9 -1
  794. package/dist/cdn/assets/feature-list/t9n/messages.sl.json +9 -1
  795. package/dist/cdn/assets/feature-list/t9n/messages.sr.json +9 -1
  796. package/dist/cdn/assets/feature-list/t9n/messages.sv.json +9 -1
  797. package/dist/cdn/assets/feature-list/t9n/messages.th.json +9 -1
  798. package/dist/cdn/assets/feature-list/t9n/messages.tr.json +9 -1
  799. package/dist/cdn/assets/feature-list/t9n/messages.uk.json +9 -1
  800. package/dist/cdn/assets/feature-list/t9n/messages.vi.json +9 -1
  801. package/dist/cdn/assets/feature-list/t9n/messages.zh-CN.json +9 -1
  802. package/dist/cdn/assets/feature-list/t9n/messages.zh-HK.json +9 -1
  803. package/dist/cdn/assets/feature-list/t9n/messages.zh-TW.json +9 -1
  804. package/dist/cdn/assets/field-selection/t9n/messages.ar.json +18 -1
  805. package/dist/cdn/assets/field-selection/t9n/messages.bg.json +18 -1
  806. package/dist/cdn/assets/field-selection/t9n/messages.bs.json +18 -1
  807. package/dist/cdn/assets/field-selection/t9n/messages.ca.json +18 -1
  808. package/dist/cdn/assets/field-selection/t9n/messages.cs.json +18 -1
  809. package/dist/cdn/assets/field-selection/t9n/messages.da.json +18 -1
  810. package/dist/cdn/assets/field-selection/t9n/messages.de.json +18 -1
  811. package/dist/cdn/assets/field-selection/t9n/messages.el.json +18 -1
  812. package/dist/cdn/assets/field-selection/t9n/messages.en.json +18 -1
  813. package/dist/cdn/assets/field-selection/t9n/messages.es.json +18 -1
  814. package/dist/cdn/assets/field-selection/t9n/messages.et.json +18 -1
  815. package/dist/cdn/assets/field-selection/t9n/messages.fi.json +18 -1
  816. package/dist/cdn/assets/field-selection/t9n/messages.fr.json +18 -1
  817. package/dist/cdn/assets/field-selection/t9n/messages.he.json +18 -1
  818. package/dist/cdn/assets/field-selection/t9n/messages.hr.json +18 -1
  819. package/dist/cdn/assets/field-selection/t9n/messages.hu.json +18 -1
  820. package/dist/cdn/assets/field-selection/t9n/messages.id.json +18 -1
  821. package/dist/cdn/assets/field-selection/t9n/messages.it.json +18 -1
  822. package/dist/cdn/assets/field-selection/t9n/messages.ja.json +18 -1
  823. package/dist/cdn/assets/field-selection/t9n/messages.json +18 -1
  824. package/dist/cdn/assets/field-selection/t9n/messages.ko.json +18 -1
  825. package/dist/cdn/assets/field-selection/t9n/messages.lt.json +18 -1
  826. package/dist/cdn/assets/field-selection/t9n/messages.lv.json +18 -1
  827. package/dist/cdn/assets/field-selection/t9n/messages.nl.json +18 -1
  828. package/dist/cdn/assets/field-selection/t9n/messages.no.json +18 -1
  829. package/dist/cdn/assets/field-selection/t9n/messages.pl.json +18 -1
  830. package/dist/cdn/assets/field-selection/t9n/messages.pt-BR.json +18 -1
  831. package/dist/cdn/assets/field-selection/t9n/messages.pt-PT.json +18 -1
  832. package/dist/cdn/assets/field-selection/t9n/messages.ro.json +18 -1
  833. package/dist/cdn/assets/field-selection/t9n/messages.ru.json +18 -1
  834. package/dist/cdn/assets/field-selection/t9n/messages.sk.json +18 -1
  835. package/dist/cdn/assets/field-selection/t9n/messages.sl.json +18 -1
  836. package/dist/cdn/assets/field-selection/t9n/messages.sr.json +18 -1
  837. package/dist/cdn/assets/field-selection/t9n/messages.sv.json +18 -1
  838. package/dist/cdn/assets/field-selection/t9n/messages.th.json +18 -1
  839. package/dist/cdn/assets/field-selection/t9n/messages.tr.json +18 -1
  840. package/dist/cdn/assets/field-selection/t9n/messages.uk.json +18 -1
  841. package/dist/cdn/assets/field-selection/t9n/messages.vi.json +18 -1
  842. package/dist/cdn/assets/field-selection/t9n/messages.zh-CN.json +18 -1
  843. package/dist/cdn/assets/field-selection/t9n/messages.zh-HK.json +18 -1
  844. package/dist/cdn/assets/field-selection/t9n/messages.zh-TW.json +18 -1
  845. package/dist/cdn/assets/info-card/t9n/messages.ar.json +10 -1
  846. package/dist/cdn/assets/info-card/t9n/messages.bg.json +10 -1
  847. package/dist/cdn/assets/info-card/t9n/messages.bs.json +10 -1
  848. package/dist/cdn/assets/info-card/t9n/messages.ca.json +10 -1
  849. package/dist/cdn/assets/info-card/t9n/messages.cs.json +10 -1
  850. package/dist/cdn/assets/info-card/t9n/messages.da.json +10 -1
  851. package/dist/cdn/assets/info-card/t9n/messages.de.json +10 -1
  852. package/dist/cdn/assets/info-card/t9n/messages.el.json +10 -1
  853. package/dist/cdn/assets/info-card/t9n/messages.en.json +10 -1
  854. package/dist/cdn/assets/info-card/t9n/messages.es.json +10 -1
  855. package/dist/cdn/assets/info-card/t9n/messages.et.json +10 -1
  856. package/dist/cdn/assets/info-card/t9n/messages.fi.json +10 -1
  857. package/dist/cdn/assets/info-card/t9n/messages.fr.json +10 -1
  858. package/dist/cdn/assets/info-card/t9n/messages.he.json +10 -1
  859. package/dist/cdn/assets/info-card/t9n/messages.hr.json +10 -1
  860. package/dist/cdn/assets/info-card/t9n/messages.hu.json +10 -1
  861. package/dist/cdn/assets/info-card/t9n/messages.id.json +10 -1
  862. package/dist/cdn/assets/info-card/t9n/messages.it.json +10 -1
  863. package/dist/cdn/assets/info-card/t9n/messages.ja.json +10 -1
  864. package/dist/cdn/assets/info-card/t9n/messages.json +10 -1
  865. package/dist/cdn/assets/info-card/t9n/messages.ko.json +10 -1
  866. package/dist/cdn/assets/info-card/t9n/messages.lt.json +10 -1
  867. package/dist/cdn/assets/info-card/t9n/messages.lv.json +10 -1
  868. package/dist/cdn/assets/info-card/t9n/messages.nb.json +10 -1
  869. package/dist/cdn/assets/info-card/t9n/messages.nl.json +10 -1
  870. package/dist/cdn/assets/info-card/t9n/messages.no.json +10 -1
  871. package/dist/cdn/assets/info-card/t9n/messages.pl.json +10 -1
  872. package/dist/cdn/assets/info-card/t9n/messages.pt-BR.json +10 -1
  873. package/dist/cdn/assets/info-card/t9n/messages.pt-PT.json +10 -1
  874. package/dist/cdn/assets/info-card/t9n/messages.ro.json +10 -1
  875. package/dist/cdn/assets/info-card/t9n/messages.ru.json +10 -1
  876. package/dist/cdn/assets/info-card/t9n/messages.sk.json +10 -1
  877. package/dist/cdn/assets/info-card/t9n/messages.sl.json +10 -1
  878. package/dist/cdn/assets/info-card/t9n/messages.sr.json +10 -1
  879. package/dist/cdn/assets/info-card/t9n/messages.sv.json +10 -1
  880. package/dist/cdn/assets/info-card/t9n/messages.th.json +10 -1
  881. package/dist/cdn/assets/info-card/t9n/messages.tr.json +10 -1
  882. package/dist/cdn/assets/info-card/t9n/messages.uk.json +10 -1
  883. package/dist/cdn/assets/info-card/t9n/messages.vi.json +10 -1
  884. package/dist/cdn/assets/info-card/t9n/messages.zh-CN.json +10 -1
  885. package/dist/cdn/assets/info-card/t9n/messages.zh-HK.json +10 -1
  886. package/dist/cdn/assets/info-card/t9n/messages.zh-TW.json +10 -1
  887. package/dist/cdn/assets/json-editor/monaco-editor/bundleInfo.json +5370 -1
  888. package/dist/cdn/assets/json-editor/monaco-editor/nls.metadata.json +2627 -1
  889. package/dist/cdn/assets/json-editor/monaco-editor/package.json +63 -1
  890. package/dist/cdn/assets/json-editor/t9n/messages.ar.json +8 -1
  891. package/dist/cdn/assets/json-editor/t9n/messages.bg.json +8 -1
  892. package/dist/cdn/assets/json-editor/t9n/messages.bs.json +8 -1
  893. package/dist/cdn/assets/json-editor/t9n/messages.ca.json +8 -1
  894. package/dist/cdn/assets/json-editor/t9n/messages.cs.json +8 -1
  895. package/dist/cdn/assets/json-editor/t9n/messages.da.json +8 -1
  896. package/dist/cdn/assets/json-editor/t9n/messages.de.json +8 -1
  897. package/dist/cdn/assets/json-editor/t9n/messages.el.json +8 -1
  898. package/dist/cdn/assets/json-editor/t9n/messages.en.json +8 -1
  899. package/dist/cdn/assets/json-editor/t9n/messages.es.json +8 -1
  900. package/dist/cdn/assets/json-editor/t9n/messages.et.json +8 -1
  901. package/dist/cdn/assets/json-editor/t9n/messages.fi.json +8 -1
  902. package/dist/cdn/assets/json-editor/t9n/messages.fr.json +8 -1
  903. package/dist/cdn/assets/json-editor/t9n/messages.he.json +8 -1
  904. package/dist/cdn/assets/json-editor/t9n/messages.hr.json +8 -1
  905. package/dist/cdn/assets/json-editor/t9n/messages.hu.json +8 -1
  906. package/dist/cdn/assets/json-editor/t9n/messages.id.json +8 -1
  907. package/dist/cdn/assets/json-editor/t9n/messages.it.json +8 -1
  908. package/dist/cdn/assets/json-editor/t9n/messages.ja.json +8 -1
  909. package/dist/cdn/assets/json-editor/t9n/messages.json +8 -1
  910. package/dist/cdn/assets/json-editor/t9n/messages.ko.json +8 -1
  911. package/dist/cdn/assets/json-editor/t9n/messages.lt.json +8 -1
  912. package/dist/cdn/assets/json-editor/t9n/messages.lv.json +8 -1
  913. package/dist/cdn/assets/json-editor/t9n/messages.nl.json +8 -1
  914. package/dist/cdn/assets/json-editor/t9n/messages.no.json +8 -1
  915. package/dist/cdn/assets/json-editor/t9n/messages.pl.json +8 -1
  916. package/dist/cdn/assets/json-editor/t9n/messages.pt-BR.json +8 -1
  917. package/dist/cdn/assets/json-editor/t9n/messages.pt-PT.json +8 -1
  918. package/dist/cdn/assets/json-editor/t9n/messages.ro.json +8 -1
  919. package/dist/cdn/assets/json-editor/t9n/messages.ru.json +8 -1
  920. package/dist/cdn/assets/json-editor/t9n/messages.sk.json +8 -1
  921. package/dist/cdn/assets/json-editor/t9n/messages.sl.json +8 -1
  922. package/dist/cdn/assets/json-editor/t9n/messages.sr.json +8 -1
  923. package/dist/cdn/assets/json-editor/t9n/messages.sv.json +8 -1
  924. package/dist/cdn/assets/json-editor/t9n/messages.th.json +8 -1
  925. package/dist/cdn/assets/json-editor/t9n/messages.tr.json +8 -1
  926. package/dist/cdn/assets/json-editor/t9n/messages.uk.json +8 -1
  927. package/dist/cdn/assets/json-editor/t9n/messages.vi.json +8 -1
  928. package/dist/cdn/assets/json-editor/t9n/messages.zh-CN.json +8 -1
  929. package/dist/cdn/assets/json-editor/t9n/messages.zh-HK.json +8 -1
  930. package/dist/cdn/assets/json-editor/t9n/messages.zh-TW.json +8 -1
  931. package/dist/cdn/assets/layer-list/t9n/messages.ar.json +5 -1
  932. package/dist/cdn/assets/layer-list/t9n/messages.bg.json +5 -1
  933. package/dist/cdn/assets/layer-list/t9n/messages.bs.json +5 -1
  934. package/dist/cdn/assets/layer-list/t9n/messages.ca.json +5 -1
  935. package/dist/cdn/assets/layer-list/t9n/messages.cs.json +5 -1
  936. package/dist/cdn/assets/layer-list/t9n/messages.da.json +5 -1
  937. package/dist/cdn/assets/layer-list/t9n/messages.de.json +5 -1
  938. package/dist/cdn/assets/layer-list/t9n/messages.el.json +5 -1
  939. package/dist/cdn/assets/layer-list/t9n/messages.en.json +5 -1
  940. package/dist/cdn/assets/layer-list/t9n/messages.es.json +5 -1
  941. package/dist/cdn/assets/layer-list/t9n/messages.et.json +5 -1
  942. package/dist/cdn/assets/layer-list/t9n/messages.fi.json +5 -1
  943. package/dist/cdn/assets/layer-list/t9n/messages.fr.json +5 -1
  944. package/dist/cdn/assets/layer-list/t9n/messages.he.json +5 -1
  945. package/dist/cdn/assets/layer-list/t9n/messages.hr.json +5 -1
  946. package/dist/cdn/assets/layer-list/t9n/messages.hu.json +5 -1
  947. package/dist/cdn/assets/layer-list/t9n/messages.id.json +5 -1
  948. package/dist/cdn/assets/layer-list/t9n/messages.it.json +5 -1
  949. package/dist/cdn/assets/layer-list/t9n/messages.ja.json +5 -1
  950. package/dist/cdn/assets/layer-list/t9n/messages.json +5 -1
  951. package/dist/cdn/assets/layer-list/t9n/messages.ko.json +5 -1
  952. package/dist/cdn/assets/layer-list/t9n/messages.lt.json +5 -1
  953. package/dist/cdn/assets/layer-list/t9n/messages.lv.json +5 -1
  954. package/dist/cdn/assets/layer-list/t9n/messages.nb.json +4 -1
  955. package/dist/cdn/assets/layer-list/t9n/messages.nl.json +5 -1
  956. package/dist/cdn/assets/layer-list/t9n/messages.no.json +5 -1
  957. package/dist/cdn/assets/layer-list/t9n/messages.pl.json +5 -1
  958. package/dist/cdn/assets/layer-list/t9n/messages.pt-BR.json +5 -1
  959. package/dist/cdn/assets/layer-list/t9n/messages.pt-PT.json +5 -1
  960. package/dist/cdn/assets/layer-list/t9n/messages.ro.json +5 -1
  961. package/dist/cdn/assets/layer-list/t9n/messages.ru.json +5 -1
  962. package/dist/cdn/assets/layer-list/t9n/messages.sk.json +5 -1
  963. package/dist/cdn/assets/layer-list/t9n/messages.sl.json +5 -1
  964. package/dist/cdn/assets/layer-list/t9n/messages.sr.json +5 -1
  965. package/dist/cdn/assets/layer-list/t9n/messages.sv.json +5 -1
  966. package/dist/cdn/assets/layer-list/t9n/messages.th.json +5 -1
  967. package/dist/cdn/assets/layer-list/t9n/messages.tr.json +5 -1
  968. package/dist/cdn/assets/layer-list/t9n/messages.uk.json +5 -1
  969. package/dist/cdn/assets/layer-list/t9n/messages.vi.json +5 -1
  970. package/dist/cdn/assets/layer-list/t9n/messages.zh-CN.json +5 -1
  971. package/dist/cdn/assets/layer-list/t9n/messages.zh-HK.json +5 -1
  972. package/dist/cdn/assets/layer-list/t9n/messages.zh-TW.json +5 -1
  973. package/dist/cdn/assets/layer-table/t9n/messages.ar.json +27 -1
  974. package/dist/cdn/assets/layer-table/t9n/messages.bg.json +27 -1
  975. package/dist/cdn/assets/layer-table/t9n/messages.bs.json +27 -1
  976. package/dist/cdn/assets/layer-table/t9n/messages.ca.json +27 -1
  977. package/dist/cdn/assets/layer-table/t9n/messages.cs.json +27 -1
  978. package/dist/cdn/assets/layer-table/t9n/messages.da.json +27 -1
  979. package/dist/cdn/assets/layer-table/t9n/messages.de.json +27 -1
  980. package/dist/cdn/assets/layer-table/t9n/messages.el.json +27 -1
  981. package/dist/cdn/assets/layer-table/t9n/messages.en.json +27 -1
  982. package/dist/cdn/assets/layer-table/t9n/messages.es.json +27 -1
  983. package/dist/cdn/assets/layer-table/t9n/messages.et.json +27 -1
  984. package/dist/cdn/assets/layer-table/t9n/messages.fi.json +27 -1
  985. package/dist/cdn/assets/layer-table/t9n/messages.fr.json +27 -1
  986. package/dist/cdn/assets/layer-table/t9n/messages.he.json +27 -1
  987. package/dist/cdn/assets/layer-table/t9n/messages.hr.json +27 -1
  988. package/dist/cdn/assets/layer-table/t9n/messages.hu.json +27 -1
  989. package/dist/cdn/assets/layer-table/t9n/messages.id.json +27 -1
  990. package/dist/cdn/assets/layer-table/t9n/messages.it.json +27 -1
  991. package/dist/cdn/assets/layer-table/t9n/messages.ja.json +27 -1
  992. package/dist/cdn/assets/layer-table/t9n/messages.json +27 -1
  993. package/dist/cdn/assets/layer-table/t9n/messages.ko.json +27 -1
  994. package/dist/cdn/assets/layer-table/t9n/messages.lt.json +27 -1
  995. package/dist/cdn/assets/layer-table/t9n/messages.lv.json +27 -1
  996. package/dist/cdn/assets/layer-table/t9n/messages.nb.json +25 -1
  997. package/dist/cdn/assets/layer-table/t9n/messages.nl.json +27 -1
  998. package/dist/cdn/assets/layer-table/t9n/messages.no.json +27 -1
  999. package/dist/cdn/assets/layer-table/t9n/messages.pl.json +27 -1
  1000. package/dist/cdn/assets/layer-table/t9n/messages.pt-BR.json +27 -1
  1001. package/dist/cdn/assets/layer-table/t9n/messages.pt-PT.json +27 -1
  1002. package/dist/cdn/assets/layer-table/t9n/messages.ro.json +27 -1
  1003. package/dist/cdn/assets/layer-table/t9n/messages.ru.json +27 -1
  1004. package/dist/cdn/assets/layer-table/t9n/messages.sk.json +27 -1
  1005. package/dist/cdn/assets/layer-table/t9n/messages.sl.json +27 -1
  1006. package/dist/cdn/assets/layer-table/t9n/messages.sr.json +27 -1
  1007. package/dist/cdn/assets/layer-table/t9n/messages.sv.json +27 -1
  1008. package/dist/cdn/assets/layer-table/t9n/messages.th.json +27 -1
  1009. package/dist/cdn/assets/layer-table/t9n/messages.tr.json +27 -1
  1010. package/dist/cdn/assets/layer-table/t9n/messages.uk.json +27 -1
  1011. package/dist/cdn/assets/layer-table/t9n/messages.vi.json +27 -1
  1012. package/dist/cdn/assets/layer-table/t9n/messages.zh-CN.json +27 -1
  1013. package/dist/cdn/assets/layer-table/t9n/messages.zh-HK.json +27 -1
  1014. package/dist/cdn/assets/layer-table/t9n/messages.zh-TW.json +27 -1
  1015. package/dist/cdn/assets/map-card/t9n/messages.ar.json +11 -1
  1016. package/dist/cdn/assets/map-card/t9n/messages.bg.json +11 -1
  1017. package/dist/cdn/assets/map-card/t9n/messages.bs.json +11 -1
  1018. package/dist/cdn/assets/map-card/t9n/messages.ca.json +11 -1
  1019. package/dist/cdn/assets/map-card/t9n/messages.cs.json +11 -1
  1020. package/dist/cdn/assets/map-card/t9n/messages.da.json +11 -1
  1021. package/dist/cdn/assets/map-card/t9n/messages.de.json +11 -1
  1022. package/dist/cdn/assets/map-card/t9n/messages.el.json +11 -1
  1023. package/dist/cdn/assets/map-card/t9n/messages.en.json +11 -1
  1024. package/dist/cdn/assets/map-card/t9n/messages.es.json +11 -1
  1025. package/dist/cdn/assets/map-card/t9n/messages.et.json +11 -1
  1026. package/dist/cdn/assets/map-card/t9n/messages.fi.json +11 -1
  1027. package/dist/cdn/assets/map-card/t9n/messages.fr.json +11 -1
  1028. package/dist/cdn/assets/map-card/t9n/messages.he.json +11 -1
  1029. package/dist/cdn/assets/map-card/t9n/messages.hr.json +11 -1
  1030. package/dist/cdn/assets/map-card/t9n/messages.hu.json +11 -1
  1031. package/dist/cdn/assets/map-card/t9n/messages.id.json +11 -1
  1032. package/dist/cdn/assets/map-card/t9n/messages.it.json +11 -1
  1033. package/dist/cdn/assets/map-card/t9n/messages.ja.json +11 -1
  1034. package/dist/cdn/assets/map-card/t9n/messages.json +11 -1
  1035. package/dist/cdn/assets/map-card/t9n/messages.ko.json +11 -1
  1036. package/dist/cdn/assets/map-card/t9n/messages.lt.json +11 -1
  1037. package/dist/cdn/assets/map-card/t9n/messages.lv.json +11 -1
  1038. package/dist/cdn/assets/map-card/t9n/messages.nb.json +10 -1
  1039. package/dist/cdn/assets/map-card/t9n/messages.nl.json +11 -1
  1040. package/dist/cdn/assets/map-card/t9n/messages.no.json +11 -1
  1041. package/dist/cdn/assets/map-card/t9n/messages.pl.json +11 -1
  1042. package/dist/cdn/assets/map-card/t9n/messages.pt-BR.json +11 -1
  1043. package/dist/cdn/assets/map-card/t9n/messages.pt-PT.json +11 -1
  1044. package/dist/cdn/assets/map-card/t9n/messages.ro.json +11 -1
  1045. package/dist/cdn/assets/map-card/t9n/messages.ru.json +11 -1
  1046. package/dist/cdn/assets/map-card/t9n/messages.sk.json +11 -1
  1047. package/dist/cdn/assets/map-card/t9n/messages.sl.json +11 -1
  1048. package/dist/cdn/assets/map-card/t9n/messages.sr.json +11 -1
  1049. package/dist/cdn/assets/map-card/t9n/messages.sv.json +11 -1
  1050. package/dist/cdn/assets/map-card/t9n/messages.th.json +11 -1
  1051. package/dist/cdn/assets/map-card/t9n/messages.tr.json +11 -1
  1052. package/dist/cdn/assets/map-card/t9n/messages.uk.json +11 -1
  1053. package/dist/cdn/assets/map-card/t9n/messages.vi.json +11 -1
  1054. package/dist/cdn/assets/map-card/t9n/messages.zh-CN.json +11 -1
  1055. package/dist/cdn/assets/map-card/t9n/messages.zh-HK.json +11 -1
  1056. package/dist/cdn/assets/map-card/t9n/messages.zh-TW.json +11 -1
  1057. package/dist/cdn/assets/map-draw-tools/t9n/messages.ar.json +5 -1
  1058. package/dist/cdn/assets/map-draw-tools/t9n/messages.bg.json +5 -1
  1059. package/dist/cdn/assets/map-draw-tools/t9n/messages.bs.json +5 -1
  1060. package/dist/cdn/assets/map-draw-tools/t9n/messages.ca.json +5 -1
  1061. package/dist/cdn/assets/map-draw-tools/t9n/messages.cs.json +5 -1
  1062. package/dist/cdn/assets/map-draw-tools/t9n/messages.da.json +5 -1
  1063. package/dist/cdn/assets/map-draw-tools/t9n/messages.de.json +5 -1
  1064. package/dist/cdn/assets/map-draw-tools/t9n/messages.el.json +5 -1
  1065. package/dist/cdn/assets/map-draw-tools/t9n/messages.en.json +5 -1
  1066. package/dist/cdn/assets/map-draw-tools/t9n/messages.es.json +5 -1
  1067. package/dist/cdn/assets/map-draw-tools/t9n/messages.et.json +5 -1
  1068. package/dist/cdn/assets/map-draw-tools/t9n/messages.fi.json +5 -1
  1069. package/dist/cdn/assets/map-draw-tools/t9n/messages.fr.json +5 -1
  1070. package/dist/cdn/assets/map-draw-tools/t9n/messages.he.json +5 -1
  1071. package/dist/cdn/assets/map-draw-tools/t9n/messages.hr.json +5 -1
  1072. package/dist/cdn/assets/map-draw-tools/t9n/messages.hu.json +5 -1
  1073. package/dist/cdn/assets/map-draw-tools/t9n/messages.id.json +5 -1
  1074. package/dist/cdn/assets/map-draw-tools/t9n/messages.it.json +5 -1
  1075. package/dist/cdn/assets/map-draw-tools/t9n/messages.ja.json +5 -1
  1076. package/dist/cdn/assets/map-draw-tools/t9n/messages.json +5 -1
  1077. package/dist/cdn/assets/map-draw-tools/t9n/messages.ko.json +5 -1
  1078. package/dist/cdn/assets/map-draw-tools/t9n/messages.lt.json +5 -1
  1079. package/dist/cdn/assets/map-draw-tools/t9n/messages.lv.json +5 -1
  1080. package/dist/cdn/assets/map-draw-tools/t9n/messages.nb.json +5 -1
  1081. package/dist/cdn/assets/map-draw-tools/t9n/messages.nl.json +5 -1
  1082. package/dist/cdn/assets/map-draw-tools/t9n/messages.no.json +5 -1
  1083. package/dist/cdn/assets/map-draw-tools/t9n/messages.pl.json +5 -1
  1084. package/dist/cdn/assets/map-draw-tools/t9n/messages.pt-BR.json +5 -1
  1085. package/dist/cdn/assets/map-draw-tools/t9n/messages.pt-PT.json +5 -1
  1086. package/dist/cdn/assets/map-draw-tools/t9n/messages.ro.json +5 -1
  1087. package/dist/cdn/assets/map-draw-tools/t9n/messages.ru.json +5 -1
  1088. package/dist/cdn/assets/map-draw-tools/t9n/messages.sk.json +5 -1
  1089. package/dist/cdn/assets/map-draw-tools/t9n/messages.sl.json +5 -1
  1090. package/dist/cdn/assets/map-draw-tools/t9n/messages.sr.json +5 -1
  1091. package/dist/cdn/assets/map-draw-tools/t9n/messages.sv.json +5 -1
  1092. package/dist/cdn/assets/map-draw-tools/t9n/messages.th.json +5 -1
  1093. package/dist/cdn/assets/map-draw-tools/t9n/messages.tr.json +5 -1
  1094. package/dist/cdn/assets/map-draw-tools/t9n/messages.uk.json +5 -1
  1095. package/dist/cdn/assets/map-draw-tools/t9n/messages.vi.json +5 -1
  1096. package/dist/cdn/assets/map-draw-tools/t9n/messages.zh-CN.json +5 -1
  1097. package/dist/cdn/assets/map-draw-tools/t9n/messages.zh-HK.json +5 -1
  1098. package/dist/cdn/assets/map-draw-tools/t9n/messages.zh-TW.json +5 -1
  1099. package/dist/cdn/assets/map-layer-picker/t9n/messages.ar.json +5 -1
  1100. package/dist/cdn/assets/map-layer-picker/t9n/messages.bg.json +5 -1
  1101. package/dist/cdn/assets/map-layer-picker/t9n/messages.bs.json +5 -1
  1102. package/dist/cdn/assets/map-layer-picker/t9n/messages.ca.json +5 -1
  1103. package/dist/cdn/assets/map-layer-picker/t9n/messages.cs.json +5 -1
  1104. package/dist/cdn/assets/map-layer-picker/t9n/messages.da.json +5 -1
  1105. package/dist/cdn/assets/map-layer-picker/t9n/messages.de.json +5 -1
  1106. package/dist/cdn/assets/map-layer-picker/t9n/messages.el.json +5 -1
  1107. package/dist/cdn/assets/map-layer-picker/t9n/messages.en.json +5 -1
  1108. package/dist/cdn/assets/map-layer-picker/t9n/messages.es.json +5 -1
  1109. package/dist/cdn/assets/map-layer-picker/t9n/messages.et.json +5 -1
  1110. package/dist/cdn/assets/map-layer-picker/t9n/messages.fi.json +5 -1
  1111. package/dist/cdn/assets/map-layer-picker/t9n/messages.fr.json +5 -1
  1112. package/dist/cdn/assets/map-layer-picker/t9n/messages.he.json +5 -1
  1113. package/dist/cdn/assets/map-layer-picker/t9n/messages.hr.json +5 -1
  1114. package/dist/cdn/assets/map-layer-picker/t9n/messages.hu.json +5 -1
  1115. package/dist/cdn/assets/map-layer-picker/t9n/messages.id.json +5 -1
  1116. package/dist/cdn/assets/map-layer-picker/t9n/messages.it.json +5 -1
  1117. package/dist/cdn/assets/map-layer-picker/t9n/messages.ja.json +5 -1
  1118. package/dist/cdn/assets/map-layer-picker/t9n/messages.json +5 -1
  1119. package/dist/cdn/assets/map-layer-picker/t9n/messages.ko.json +5 -1
  1120. package/dist/cdn/assets/map-layer-picker/t9n/messages.lt.json +5 -1
  1121. package/dist/cdn/assets/map-layer-picker/t9n/messages.lv.json +5 -1
  1122. package/dist/cdn/assets/map-layer-picker/t9n/messages.nb.json +5 -1
  1123. package/dist/cdn/assets/map-layer-picker/t9n/messages.nl.json +5 -1
  1124. package/dist/cdn/assets/map-layer-picker/t9n/messages.no.json +5 -1
  1125. package/dist/cdn/assets/map-layer-picker/t9n/messages.pl.json +5 -1
  1126. package/dist/cdn/assets/map-layer-picker/t9n/messages.pt-BR.json +5 -1
  1127. package/dist/cdn/assets/map-layer-picker/t9n/messages.pt-PT.json +5 -1
  1128. package/dist/cdn/assets/map-layer-picker/t9n/messages.ro.json +5 -1
  1129. package/dist/cdn/assets/map-layer-picker/t9n/messages.ru.json +5 -1
  1130. package/dist/cdn/assets/map-layer-picker/t9n/messages.sk.json +5 -1
  1131. package/dist/cdn/assets/map-layer-picker/t9n/messages.sl.json +5 -1
  1132. package/dist/cdn/assets/map-layer-picker/t9n/messages.sr.json +5 -1
  1133. package/dist/cdn/assets/map-layer-picker/t9n/messages.sv.json +5 -1
  1134. package/dist/cdn/assets/map-layer-picker/t9n/messages.th.json +5 -1
  1135. package/dist/cdn/assets/map-layer-picker/t9n/messages.tr.json +5 -1
  1136. package/dist/cdn/assets/map-layer-picker/t9n/messages.uk.json +5 -1
  1137. package/dist/cdn/assets/map-layer-picker/t9n/messages.vi.json +5 -1
  1138. package/dist/cdn/assets/map-layer-picker/t9n/messages.zh-CN.json +5 -1
  1139. package/dist/cdn/assets/map-layer-picker/t9n/messages.zh-HK.json +5 -1
  1140. package/dist/cdn/assets/map-layer-picker/t9n/messages.zh-TW.json +5 -1
  1141. package/dist/cdn/assets/map-picker/t9n/messages.ar.json +3 -1
  1142. package/dist/cdn/assets/map-picker/t9n/messages.bg.json +3 -1
  1143. package/dist/cdn/assets/map-picker/t9n/messages.bs.json +3 -1
  1144. package/dist/cdn/assets/map-picker/t9n/messages.ca.json +3 -1
  1145. package/dist/cdn/assets/map-picker/t9n/messages.cs.json +3 -1
  1146. package/dist/cdn/assets/map-picker/t9n/messages.da.json +3 -1
  1147. package/dist/cdn/assets/map-picker/t9n/messages.de.json +3 -1
  1148. package/dist/cdn/assets/map-picker/t9n/messages.el.json +3 -1
  1149. package/dist/cdn/assets/map-picker/t9n/messages.en.json +3 -1
  1150. package/dist/cdn/assets/map-picker/t9n/messages.es.json +3 -1
  1151. package/dist/cdn/assets/map-picker/t9n/messages.et.json +3 -1
  1152. package/dist/cdn/assets/map-picker/t9n/messages.fi.json +3 -1
  1153. package/dist/cdn/assets/map-picker/t9n/messages.fr.json +3 -1
  1154. package/dist/cdn/assets/map-picker/t9n/messages.he.json +3 -1
  1155. package/dist/cdn/assets/map-picker/t9n/messages.hr.json +3 -1
  1156. package/dist/cdn/assets/map-picker/t9n/messages.hu.json +3 -1
  1157. package/dist/cdn/assets/map-picker/t9n/messages.id.json +3 -1
  1158. package/dist/cdn/assets/map-picker/t9n/messages.it.json +3 -1
  1159. package/dist/cdn/assets/map-picker/t9n/messages.ja.json +3 -1
  1160. package/dist/cdn/assets/map-picker/t9n/messages.json +3 -1
  1161. package/dist/cdn/assets/map-picker/t9n/messages.ko.json +3 -1
  1162. package/dist/cdn/assets/map-picker/t9n/messages.lt.json +3 -1
  1163. package/dist/cdn/assets/map-picker/t9n/messages.lv.json +3 -1
  1164. package/dist/cdn/assets/map-picker/t9n/messages.nb.json +3 -1
  1165. package/dist/cdn/assets/map-picker/t9n/messages.nl.json +3 -1
  1166. package/dist/cdn/assets/map-picker/t9n/messages.no.json +3 -1
  1167. package/dist/cdn/assets/map-picker/t9n/messages.pl.json +3 -1
  1168. package/dist/cdn/assets/map-picker/t9n/messages.pt-BR.json +3 -1
  1169. package/dist/cdn/assets/map-picker/t9n/messages.pt-PT.json +3 -1
  1170. package/dist/cdn/assets/map-picker/t9n/messages.ro.json +3 -1
  1171. package/dist/cdn/assets/map-picker/t9n/messages.ru.json +3 -1
  1172. package/dist/cdn/assets/map-picker/t9n/messages.sk.json +3 -1
  1173. package/dist/cdn/assets/map-picker/t9n/messages.sl.json +3 -1
  1174. package/dist/cdn/assets/map-picker/t9n/messages.sr.json +3 -1
  1175. package/dist/cdn/assets/map-picker/t9n/messages.sv.json +3 -1
  1176. package/dist/cdn/assets/map-picker/t9n/messages.th.json +3 -1
  1177. package/dist/cdn/assets/map-picker/t9n/messages.tr.json +3 -1
  1178. package/dist/cdn/assets/map-picker/t9n/messages.uk.json +3 -1
  1179. package/dist/cdn/assets/map-picker/t9n/messages.vi.json +3 -1
  1180. package/dist/cdn/assets/map-picker/t9n/messages.zh-CN.json +3 -1
  1181. package/dist/cdn/assets/map-picker/t9n/messages.zh-HK.json +3 -1
  1182. package/dist/cdn/assets/map-picker/t9n/messages.zh-TW.json +3 -1
  1183. package/dist/cdn/assets/map-search/t9n/messages.ar.json +3 -1
  1184. package/dist/cdn/assets/map-search/t9n/messages.bg.json +3 -1
  1185. package/dist/cdn/assets/map-search/t9n/messages.bs.json +3 -1
  1186. package/dist/cdn/assets/map-search/t9n/messages.ca.json +3 -1
  1187. package/dist/cdn/assets/map-search/t9n/messages.cs.json +3 -1
  1188. package/dist/cdn/assets/map-search/t9n/messages.da.json +3 -1
  1189. package/dist/cdn/assets/map-search/t9n/messages.de.json +3 -1
  1190. package/dist/cdn/assets/map-search/t9n/messages.el.json +3 -1
  1191. package/dist/cdn/assets/map-search/t9n/messages.en.json +3 -1
  1192. package/dist/cdn/assets/map-search/t9n/messages.es.json +3 -1
  1193. package/dist/cdn/assets/map-search/t9n/messages.et.json +3 -1
  1194. package/dist/cdn/assets/map-search/t9n/messages.fi.json +3 -1
  1195. package/dist/cdn/assets/map-search/t9n/messages.fr.json +3 -1
  1196. package/dist/cdn/assets/map-search/t9n/messages.he.json +3 -1
  1197. package/dist/cdn/assets/map-search/t9n/messages.hr.json +3 -1
  1198. package/dist/cdn/assets/map-search/t9n/messages.hu.json +3 -1
  1199. package/dist/cdn/assets/map-search/t9n/messages.id.json +3 -1
  1200. package/dist/cdn/assets/map-search/t9n/messages.it.json +3 -1
  1201. package/dist/cdn/assets/map-search/t9n/messages.ja.json +3 -1
  1202. package/dist/cdn/assets/map-search/t9n/messages.json +3 -1
  1203. package/dist/cdn/assets/map-search/t9n/messages.ko.json +3 -1
  1204. package/dist/cdn/assets/map-search/t9n/messages.lt.json +3 -1
  1205. package/dist/cdn/assets/map-search/t9n/messages.lv.json +3 -1
  1206. package/dist/cdn/assets/map-search/t9n/messages.nl.json +3 -1
  1207. package/dist/cdn/assets/map-search/t9n/messages.no.json +3 -1
  1208. package/dist/cdn/assets/map-search/t9n/messages.pl.json +3 -1
  1209. package/dist/cdn/assets/map-search/t9n/messages.pt-BR.json +3 -1
  1210. package/dist/cdn/assets/map-search/t9n/messages.pt-PT.json +3 -1
  1211. package/dist/cdn/assets/map-search/t9n/messages.ro.json +3 -1
  1212. package/dist/cdn/assets/map-search/t9n/messages.ru.json +3 -1
  1213. package/dist/cdn/assets/map-search/t9n/messages.sk.json +3 -1
  1214. package/dist/cdn/assets/map-search/t9n/messages.sl.json +3 -1
  1215. package/dist/cdn/assets/map-search/t9n/messages.sr.json +3 -1
  1216. package/dist/cdn/assets/map-search/t9n/messages.sv.json +3 -1
  1217. package/dist/cdn/assets/map-search/t9n/messages.th.json +3 -1
  1218. package/dist/cdn/assets/map-search/t9n/messages.tr.json +3 -1
  1219. package/dist/cdn/assets/map-search/t9n/messages.uk.json +3 -1
  1220. package/dist/cdn/assets/map-search/t9n/messages.vi.json +3 -1
  1221. package/dist/cdn/assets/map-search/t9n/messages.zh-CN.json +3 -1
  1222. package/dist/cdn/assets/map-search/t9n/messages.zh-HK.json +3 -1
  1223. package/dist/cdn/assets/map-search/t9n/messages.zh-TW.json +3 -1
  1224. package/dist/cdn/assets/map-select-tools/t9n/messages.ar.json +16 -1
  1225. package/dist/cdn/assets/map-select-tools/t9n/messages.bg.json +16 -1
  1226. package/dist/cdn/assets/map-select-tools/t9n/messages.bs.json +16 -1
  1227. package/dist/cdn/assets/map-select-tools/t9n/messages.ca.json +16 -1
  1228. package/dist/cdn/assets/map-select-tools/t9n/messages.cs.json +16 -1
  1229. package/dist/cdn/assets/map-select-tools/t9n/messages.da.json +16 -1
  1230. package/dist/cdn/assets/map-select-tools/t9n/messages.de.json +16 -1
  1231. package/dist/cdn/assets/map-select-tools/t9n/messages.el.json +16 -1
  1232. package/dist/cdn/assets/map-select-tools/t9n/messages.en.json +16 -1
  1233. package/dist/cdn/assets/map-select-tools/t9n/messages.es.json +16 -1
  1234. package/dist/cdn/assets/map-select-tools/t9n/messages.et.json +16 -1
  1235. package/dist/cdn/assets/map-select-tools/t9n/messages.fi.json +16 -1
  1236. package/dist/cdn/assets/map-select-tools/t9n/messages.fr.json +16 -1
  1237. package/dist/cdn/assets/map-select-tools/t9n/messages.he.json +16 -1
  1238. package/dist/cdn/assets/map-select-tools/t9n/messages.hr.json +16 -1
  1239. package/dist/cdn/assets/map-select-tools/t9n/messages.hu.json +16 -1
  1240. package/dist/cdn/assets/map-select-tools/t9n/messages.id.json +16 -1
  1241. package/dist/cdn/assets/map-select-tools/t9n/messages.it.json +16 -1
  1242. package/dist/cdn/assets/map-select-tools/t9n/messages.ja.json +16 -1
  1243. package/dist/cdn/assets/map-select-tools/t9n/messages.json +16 -1
  1244. package/dist/cdn/assets/map-select-tools/t9n/messages.ko.json +16 -1
  1245. package/dist/cdn/assets/map-select-tools/t9n/messages.lt.json +16 -1
  1246. package/dist/cdn/assets/map-select-tools/t9n/messages.lv.json +16 -1
  1247. package/dist/cdn/assets/map-select-tools/t9n/messages.nb.json +16 -1
  1248. package/dist/cdn/assets/map-select-tools/t9n/messages.nl.json +16 -1
  1249. package/dist/cdn/assets/map-select-tools/t9n/messages.no.json +16 -1
  1250. package/dist/cdn/assets/map-select-tools/t9n/messages.pl.json +16 -1
  1251. package/dist/cdn/assets/map-select-tools/t9n/messages.pt-BR.json +16 -1
  1252. package/dist/cdn/assets/map-select-tools/t9n/messages.pt-PT.json +16 -1
  1253. package/dist/cdn/assets/map-select-tools/t9n/messages.ro.json +16 -1
  1254. package/dist/cdn/assets/map-select-tools/t9n/messages.ru.json +16 -1
  1255. package/dist/cdn/assets/map-select-tools/t9n/messages.sk.json +16 -1
  1256. package/dist/cdn/assets/map-select-tools/t9n/messages.sl.json +16 -1
  1257. package/dist/cdn/assets/map-select-tools/t9n/messages.sr.json +16 -1
  1258. package/dist/cdn/assets/map-select-tools/t9n/messages.sv.json +16 -1
  1259. package/dist/cdn/assets/map-select-tools/t9n/messages.th.json +16 -1
  1260. package/dist/cdn/assets/map-select-tools/t9n/messages.tr.json +16 -1
  1261. package/dist/cdn/assets/map-select-tools/t9n/messages.uk.json +16 -1
  1262. package/dist/cdn/assets/map-select-tools/t9n/messages.vi.json +16 -1
  1263. package/dist/cdn/assets/map-select-tools/t9n/messages.zh-CN.json +16 -1
  1264. package/dist/cdn/assets/map-select-tools/t9n/messages.zh-HK.json +16 -1
  1265. package/dist/cdn/assets/map-select-tools/t9n/messages.zh-TW.json +16 -1
  1266. package/dist/cdn/assets/map-tools/t9n/messages.ar.json +12 -1
  1267. package/dist/cdn/assets/map-tools/t9n/messages.bg.json +12 -1
  1268. package/dist/cdn/assets/map-tools/t9n/messages.bs.json +12 -1
  1269. package/dist/cdn/assets/map-tools/t9n/messages.ca.json +12 -1
  1270. package/dist/cdn/assets/map-tools/t9n/messages.cs.json +12 -1
  1271. package/dist/cdn/assets/map-tools/t9n/messages.da.json +12 -1
  1272. package/dist/cdn/assets/map-tools/t9n/messages.de.json +12 -1
  1273. package/dist/cdn/assets/map-tools/t9n/messages.el.json +12 -1
  1274. package/dist/cdn/assets/map-tools/t9n/messages.en.json +12 -1
  1275. package/dist/cdn/assets/map-tools/t9n/messages.es.json +12 -1
  1276. package/dist/cdn/assets/map-tools/t9n/messages.et.json +12 -1
  1277. package/dist/cdn/assets/map-tools/t9n/messages.fi.json +12 -1
  1278. package/dist/cdn/assets/map-tools/t9n/messages.fr.json +12 -1
  1279. package/dist/cdn/assets/map-tools/t9n/messages.he.json +12 -1
  1280. package/dist/cdn/assets/map-tools/t9n/messages.hr.json +12 -1
  1281. package/dist/cdn/assets/map-tools/t9n/messages.hu.json +12 -1
  1282. package/dist/cdn/assets/map-tools/t9n/messages.id.json +12 -1
  1283. package/dist/cdn/assets/map-tools/t9n/messages.it.json +12 -1
  1284. package/dist/cdn/assets/map-tools/t9n/messages.ja.json +12 -1
  1285. package/dist/cdn/assets/map-tools/t9n/messages.json +12 -1
  1286. package/dist/cdn/assets/map-tools/t9n/messages.ko.json +12 -1
  1287. package/dist/cdn/assets/map-tools/t9n/messages.lt.json +12 -1
  1288. package/dist/cdn/assets/map-tools/t9n/messages.lv.json +12 -1
  1289. package/dist/cdn/assets/map-tools/t9n/messages.nb.json +10 -1
  1290. package/dist/cdn/assets/map-tools/t9n/messages.nl.json +12 -1
  1291. package/dist/cdn/assets/map-tools/t9n/messages.no.json +12 -1
  1292. package/dist/cdn/assets/map-tools/t9n/messages.pl.json +12 -1
  1293. package/dist/cdn/assets/map-tools/t9n/messages.pt-BR.json +12 -1
  1294. package/dist/cdn/assets/map-tools/t9n/messages.pt-PT.json +12 -1
  1295. package/dist/cdn/assets/map-tools/t9n/messages.ro.json +12 -1
  1296. package/dist/cdn/assets/map-tools/t9n/messages.ru.json +12 -1
  1297. package/dist/cdn/assets/map-tools/t9n/messages.sk.json +12 -1
  1298. package/dist/cdn/assets/map-tools/t9n/messages.sl.json +12 -1
  1299. package/dist/cdn/assets/map-tools/t9n/messages.sr.json +12 -1
  1300. package/dist/cdn/assets/map-tools/t9n/messages.sv.json +12 -1
  1301. package/dist/cdn/assets/map-tools/t9n/messages.th.json +12 -1
  1302. package/dist/cdn/assets/map-tools/t9n/messages.tr.json +12 -1
  1303. package/dist/cdn/assets/map-tools/t9n/messages.uk.json +12 -1
  1304. package/dist/cdn/assets/map-tools/t9n/messages.vi.json +12 -1
  1305. package/dist/cdn/assets/map-tools/t9n/messages.zh-CN.json +12 -1
  1306. package/dist/cdn/assets/map-tools/t9n/messages.zh-HK.json +12 -1
  1307. package/dist/cdn/assets/map-tools/t9n/messages.zh-TW.json +12 -1
  1308. package/dist/cdn/assets/pdf-download/data/labelFormats.json +191 -1
  1309. package/dist/cdn/assets/pdf-download/t9n/messages.ar.json +3 -1
  1310. package/dist/cdn/assets/pdf-download/t9n/messages.bg.json +3 -1
  1311. package/dist/cdn/assets/pdf-download/t9n/messages.bs.json +3 -1
  1312. package/dist/cdn/assets/pdf-download/t9n/messages.ca.json +3 -1
  1313. package/dist/cdn/assets/pdf-download/t9n/messages.cs.json +3 -1
  1314. package/dist/cdn/assets/pdf-download/t9n/messages.da.json +3 -1
  1315. package/dist/cdn/assets/pdf-download/t9n/messages.de.json +3 -1
  1316. package/dist/cdn/assets/pdf-download/t9n/messages.el.json +3 -1
  1317. package/dist/cdn/assets/pdf-download/t9n/messages.en.json +3 -1
  1318. package/dist/cdn/assets/pdf-download/t9n/messages.es.json +3 -1
  1319. package/dist/cdn/assets/pdf-download/t9n/messages.et.json +3 -1
  1320. package/dist/cdn/assets/pdf-download/t9n/messages.fi.json +3 -1
  1321. package/dist/cdn/assets/pdf-download/t9n/messages.fr.json +3 -1
  1322. package/dist/cdn/assets/pdf-download/t9n/messages.he.json +3 -1
  1323. package/dist/cdn/assets/pdf-download/t9n/messages.hr.json +3 -1
  1324. package/dist/cdn/assets/pdf-download/t9n/messages.hu.json +3 -1
  1325. package/dist/cdn/assets/pdf-download/t9n/messages.id.json +3 -1
  1326. package/dist/cdn/assets/pdf-download/t9n/messages.it.json +3 -1
  1327. package/dist/cdn/assets/pdf-download/t9n/messages.ja.json +3 -1
  1328. package/dist/cdn/assets/pdf-download/t9n/messages.json +3 -1
  1329. package/dist/cdn/assets/pdf-download/t9n/messages.ko.json +3 -1
  1330. package/dist/cdn/assets/pdf-download/t9n/messages.lt.json +3 -1
  1331. package/dist/cdn/assets/pdf-download/t9n/messages.lv.json +3 -1
  1332. package/dist/cdn/assets/pdf-download/t9n/messages.nb.json +3 -1
  1333. package/dist/cdn/assets/pdf-download/t9n/messages.nl.json +3 -1
  1334. package/dist/cdn/assets/pdf-download/t9n/messages.no.json +3 -1
  1335. package/dist/cdn/assets/pdf-download/t9n/messages.pl.json +3 -1
  1336. package/dist/cdn/assets/pdf-download/t9n/messages.pt-BR.json +3 -1
  1337. package/dist/cdn/assets/pdf-download/t9n/messages.pt-PT.json +3 -1
  1338. package/dist/cdn/assets/pdf-download/t9n/messages.ro.json +3 -1
  1339. package/dist/cdn/assets/pdf-download/t9n/messages.ru.json +3 -1
  1340. package/dist/cdn/assets/pdf-download/t9n/messages.sk.json +3 -1
  1341. package/dist/cdn/assets/pdf-download/t9n/messages.sl.json +3 -1
  1342. package/dist/cdn/assets/pdf-download/t9n/messages.sr.json +3 -1
  1343. package/dist/cdn/assets/pdf-download/t9n/messages.sv.json +3 -1
  1344. package/dist/cdn/assets/pdf-download/t9n/messages.th.json +3 -1
  1345. package/dist/cdn/assets/pdf-download/t9n/messages.tr.json +3 -1
  1346. package/dist/cdn/assets/pdf-download/t9n/messages.uk.json +3 -1
  1347. package/dist/cdn/assets/pdf-download/t9n/messages.vi.json +3 -1
  1348. package/dist/cdn/assets/pdf-download/t9n/messages.zh-CN.json +3 -1
  1349. package/dist/cdn/assets/pdf-download/t9n/messages.zh-HK.json +3 -1
  1350. package/dist/cdn/assets/pdf-download/t9n/messages.zh-TW.json +3 -1
  1351. package/dist/cdn/assets/public-notification/t9n/messages.ar.json +43 -1
  1352. package/dist/cdn/assets/public-notification/t9n/messages.bg.json +43 -1
  1353. package/dist/cdn/assets/public-notification/t9n/messages.bs.json +43 -1
  1354. package/dist/cdn/assets/public-notification/t9n/messages.ca.json +43 -1
  1355. package/dist/cdn/assets/public-notification/t9n/messages.cs.json +43 -1
  1356. package/dist/cdn/assets/public-notification/t9n/messages.da.json +43 -1
  1357. package/dist/cdn/assets/public-notification/t9n/messages.de.json +43 -1
  1358. package/dist/cdn/assets/public-notification/t9n/messages.el.json +43 -1
  1359. package/dist/cdn/assets/public-notification/t9n/messages.en.json +43 -1
  1360. package/dist/cdn/assets/public-notification/t9n/messages.es.json +43 -1
  1361. package/dist/cdn/assets/public-notification/t9n/messages.et.json +43 -1
  1362. package/dist/cdn/assets/public-notification/t9n/messages.fi.json +43 -1
  1363. package/dist/cdn/assets/public-notification/t9n/messages.fr.json +43 -1
  1364. package/dist/cdn/assets/public-notification/t9n/messages.he.json +43 -1
  1365. package/dist/cdn/assets/public-notification/t9n/messages.hr.json +43 -1
  1366. package/dist/cdn/assets/public-notification/t9n/messages.hu.json +43 -1
  1367. package/dist/cdn/assets/public-notification/t9n/messages.id.json +43 -1
  1368. package/dist/cdn/assets/public-notification/t9n/messages.it.json +43 -1
  1369. package/dist/cdn/assets/public-notification/t9n/messages.ja.json +43 -1
  1370. package/dist/cdn/assets/public-notification/t9n/messages.json +43 -1
  1371. package/dist/cdn/assets/public-notification/t9n/messages.ko.json +43 -1
  1372. package/dist/cdn/assets/public-notification/t9n/messages.lt.json +43 -1
  1373. package/dist/cdn/assets/public-notification/t9n/messages.lv.json +43 -1
  1374. package/dist/cdn/assets/public-notification/t9n/messages.nb.json +44 -1
  1375. package/dist/cdn/assets/public-notification/t9n/messages.nl.json +43 -1
  1376. package/dist/cdn/assets/public-notification/t9n/messages.no.json +43 -1
  1377. package/dist/cdn/assets/public-notification/t9n/messages.pl.json +43 -1
  1378. package/dist/cdn/assets/public-notification/t9n/messages.pt-BR.json +43 -1
  1379. package/dist/cdn/assets/public-notification/t9n/messages.pt-PT.json +43 -1
  1380. package/dist/cdn/assets/public-notification/t9n/messages.ro.json +43 -1
  1381. package/dist/cdn/assets/public-notification/t9n/messages.ru.json +43 -1
  1382. package/dist/cdn/assets/public-notification/t9n/messages.sk.json +43 -1
  1383. package/dist/cdn/assets/public-notification/t9n/messages.sl.json +43 -1
  1384. package/dist/cdn/assets/public-notification/t9n/messages.sr.json +43 -1
  1385. package/dist/cdn/assets/public-notification/t9n/messages.sv.json +43 -1
  1386. package/dist/cdn/assets/public-notification/t9n/messages.th.json +43 -1
  1387. package/dist/cdn/assets/public-notification/t9n/messages.tr.json +43 -1
  1388. package/dist/cdn/assets/public-notification/t9n/messages.uk.json +43 -1
  1389. package/dist/cdn/assets/public-notification/t9n/messages.vi.json +43 -1
  1390. package/dist/cdn/assets/public-notification/t9n/messages.zh-CN.json +43 -1
  1391. package/dist/cdn/assets/public-notification/t9n/messages.zh-HK.json +43 -1
  1392. package/dist/cdn/assets/public-notification/t9n/messages.zh-TW.json +43 -1
  1393. package/dist/cdn/assets/refine-selection/t9n/messages.ar.json +9 -1
  1394. package/dist/cdn/assets/refine-selection/t9n/messages.bg.json +9 -1
  1395. package/dist/cdn/assets/refine-selection/t9n/messages.bs.json +9 -1
  1396. package/dist/cdn/assets/refine-selection/t9n/messages.ca.json +9 -1
  1397. package/dist/cdn/assets/refine-selection/t9n/messages.cs.json +9 -1
  1398. package/dist/cdn/assets/refine-selection/t9n/messages.da.json +9 -1
  1399. package/dist/cdn/assets/refine-selection/t9n/messages.de.json +9 -1
  1400. package/dist/cdn/assets/refine-selection/t9n/messages.el.json +9 -1
  1401. package/dist/cdn/assets/refine-selection/t9n/messages.en.json +9 -1
  1402. package/dist/cdn/assets/refine-selection/t9n/messages.es.json +9 -1
  1403. package/dist/cdn/assets/refine-selection/t9n/messages.et.json +9 -1
  1404. package/dist/cdn/assets/refine-selection/t9n/messages.fi.json +9 -1
  1405. package/dist/cdn/assets/refine-selection/t9n/messages.fr.json +9 -1
  1406. package/dist/cdn/assets/refine-selection/t9n/messages.he.json +9 -1
  1407. package/dist/cdn/assets/refine-selection/t9n/messages.hr.json +9 -1
  1408. package/dist/cdn/assets/refine-selection/t9n/messages.hu.json +9 -1
  1409. package/dist/cdn/assets/refine-selection/t9n/messages.id.json +9 -1
  1410. package/dist/cdn/assets/refine-selection/t9n/messages.it.json +9 -1
  1411. package/dist/cdn/assets/refine-selection/t9n/messages.ja.json +9 -1
  1412. package/dist/cdn/assets/refine-selection/t9n/messages.json +9 -1
  1413. package/dist/cdn/assets/refine-selection/t9n/messages.ko.json +9 -1
  1414. package/dist/cdn/assets/refine-selection/t9n/messages.lt.json +9 -1
  1415. package/dist/cdn/assets/refine-selection/t9n/messages.lv.json +9 -1
  1416. package/dist/cdn/assets/refine-selection/t9n/messages.nb.json +9 -1
  1417. package/dist/cdn/assets/refine-selection/t9n/messages.nl.json +9 -1
  1418. package/dist/cdn/assets/refine-selection/t9n/messages.no.json +9 -1
  1419. package/dist/cdn/assets/refine-selection/t9n/messages.pl.json +9 -1
  1420. package/dist/cdn/assets/refine-selection/t9n/messages.pt-BR.json +9 -1
  1421. package/dist/cdn/assets/refine-selection/t9n/messages.pt-PT.json +9 -1
  1422. package/dist/cdn/assets/refine-selection/t9n/messages.ro.json +9 -1
  1423. package/dist/cdn/assets/refine-selection/t9n/messages.ru.json +9 -1
  1424. package/dist/cdn/assets/refine-selection/t9n/messages.sk.json +9 -1
  1425. package/dist/cdn/assets/refine-selection/t9n/messages.sl.json +9 -1
  1426. package/dist/cdn/assets/refine-selection/t9n/messages.sr.json +9 -1
  1427. package/dist/cdn/assets/refine-selection/t9n/messages.sv.json +9 -1
  1428. package/dist/cdn/assets/refine-selection/t9n/messages.th.json +9 -1
  1429. package/dist/cdn/assets/refine-selection/t9n/messages.tr.json +9 -1
  1430. package/dist/cdn/assets/refine-selection/t9n/messages.uk.json +9 -1
  1431. package/dist/cdn/assets/refine-selection/t9n/messages.vi.json +9 -1
  1432. package/dist/cdn/assets/refine-selection/t9n/messages.zh-CN.json +9 -1
  1433. package/dist/cdn/assets/refine-selection/t9n/messages.zh-HK.json +9 -1
  1434. package/dist/cdn/assets/refine-selection/t9n/messages.zh-TW.json +9 -1
  1435. package/dist/cdn/assets/solution-article-card/t9n/messages.ar.json +5 -1
  1436. package/dist/cdn/assets/solution-article-card/t9n/messages.bg.json +5 -1
  1437. package/dist/cdn/assets/solution-article-card/t9n/messages.bs.json +5 -1
  1438. package/dist/cdn/assets/solution-article-card/t9n/messages.ca.json +5 -1
  1439. package/dist/cdn/assets/solution-article-card/t9n/messages.cs.json +5 -1
  1440. package/dist/cdn/assets/solution-article-card/t9n/messages.da.json +5 -1
  1441. package/dist/cdn/assets/solution-article-card/t9n/messages.de.json +5 -1
  1442. package/dist/cdn/assets/solution-article-card/t9n/messages.el.json +5 -1
  1443. package/dist/cdn/assets/solution-article-card/t9n/messages.en.json +5 -1
  1444. package/dist/cdn/assets/solution-article-card/t9n/messages.es.json +5 -1
  1445. package/dist/cdn/assets/solution-article-card/t9n/messages.et.json +5 -1
  1446. package/dist/cdn/assets/solution-article-card/t9n/messages.fi.json +5 -1
  1447. package/dist/cdn/assets/solution-article-card/t9n/messages.fr.json +5 -1
  1448. package/dist/cdn/assets/solution-article-card/t9n/messages.he.json +5 -1
  1449. package/dist/cdn/assets/solution-article-card/t9n/messages.hr.json +5 -1
  1450. package/dist/cdn/assets/solution-article-card/t9n/messages.hu.json +5 -1
  1451. package/dist/cdn/assets/solution-article-card/t9n/messages.id.json +5 -1
  1452. package/dist/cdn/assets/solution-article-card/t9n/messages.it.json +5 -1
  1453. package/dist/cdn/assets/solution-article-card/t9n/messages.ja.json +5 -1
  1454. package/dist/cdn/assets/solution-article-card/t9n/messages.json +5 -1
  1455. package/dist/cdn/assets/solution-article-card/t9n/messages.ko.json +5 -1
  1456. package/dist/cdn/assets/solution-article-card/t9n/messages.lt.json +5 -1
  1457. package/dist/cdn/assets/solution-article-card/t9n/messages.lv.json +5 -1
  1458. package/dist/cdn/assets/solution-article-card/t9n/messages.nl.json +5 -1
  1459. package/dist/cdn/assets/solution-article-card/t9n/messages.no.json +5 -1
  1460. package/dist/cdn/assets/solution-article-card/t9n/messages.pl.json +5 -1
  1461. package/dist/cdn/assets/solution-article-card/t9n/messages.pt-BR.json +5 -1
  1462. package/dist/cdn/assets/solution-article-card/t9n/messages.pt-PT.json +5 -1
  1463. package/dist/cdn/assets/solution-article-card/t9n/messages.ro.json +5 -1
  1464. package/dist/cdn/assets/solution-article-card/t9n/messages.ru.json +5 -1
  1465. package/dist/cdn/assets/solution-article-card/t9n/messages.sk.json +5 -1
  1466. package/dist/cdn/assets/solution-article-card/t9n/messages.sl.json +5 -1
  1467. package/dist/cdn/assets/solution-article-card/t9n/messages.sr.json +5 -1
  1468. package/dist/cdn/assets/solution-article-card/t9n/messages.sv.json +5 -1
  1469. package/dist/cdn/assets/solution-article-card/t9n/messages.th.json +5 -1
  1470. package/dist/cdn/assets/solution-article-card/t9n/messages.tr.json +5 -1
  1471. package/dist/cdn/assets/solution-article-card/t9n/messages.uk.json +5 -1
  1472. package/dist/cdn/assets/solution-article-card/t9n/messages.vi.json +5 -1
  1473. package/dist/cdn/assets/solution-article-card/t9n/messages.zh-CN.json +5 -1
  1474. package/dist/cdn/assets/solution-article-card/t9n/messages.zh-HK.json +5 -1
  1475. package/dist/cdn/assets/solution-article-card/t9n/messages.zh-TW.json +5 -1
  1476. package/dist/cdn/assets/solution-configuration/t9n/messages.ar.json +15 -1
  1477. package/dist/cdn/assets/solution-configuration/t9n/messages.bg.json +15 -1
  1478. package/dist/cdn/assets/solution-configuration/t9n/messages.bs.json +15 -1
  1479. package/dist/cdn/assets/solution-configuration/t9n/messages.ca.json +15 -1
  1480. package/dist/cdn/assets/solution-configuration/t9n/messages.cs.json +15 -1
  1481. package/dist/cdn/assets/solution-configuration/t9n/messages.da.json +15 -1
  1482. package/dist/cdn/assets/solution-configuration/t9n/messages.de.json +15 -1
  1483. package/dist/cdn/assets/solution-configuration/t9n/messages.el.json +15 -1
  1484. package/dist/cdn/assets/solution-configuration/t9n/messages.en.json +15 -1
  1485. package/dist/cdn/assets/solution-configuration/t9n/messages.es.json +15 -1
  1486. package/dist/cdn/assets/solution-configuration/t9n/messages.et.json +15 -1
  1487. package/dist/cdn/assets/solution-configuration/t9n/messages.fi.json +15 -1
  1488. package/dist/cdn/assets/solution-configuration/t9n/messages.fr.json +15 -1
  1489. package/dist/cdn/assets/solution-configuration/t9n/messages.he.json +15 -1
  1490. package/dist/cdn/assets/solution-configuration/t9n/messages.hr.json +15 -1
  1491. package/dist/cdn/assets/solution-configuration/t9n/messages.hu.json +15 -1
  1492. package/dist/cdn/assets/solution-configuration/t9n/messages.id.json +15 -1
  1493. package/dist/cdn/assets/solution-configuration/t9n/messages.it.json +15 -1
  1494. package/dist/cdn/assets/solution-configuration/t9n/messages.ja.json +15 -1
  1495. package/dist/cdn/assets/solution-configuration/t9n/messages.json +15 -1
  1496. package/dist/cdn/assets/solution-configuration/t9n/messages.ko.json +15 -1
  1497. package/dist/cdn/assets/solution-configuration/t9n/messages.lt.json +15 -1
  1498. package/dist/cdn/assets/solution-configuration/t9n/messages.lv.json +15 -1
  1499. package/dist/cdn/assets/solution-configuration/t9n/messages.nl.json +15 -1
  1500. package/dist/cdn/assets/solution-configuration/t9n/messages.no.json +15 -1
  1501. package/dist/cdn/assets/solution-configuration/t9n/messages.pl.json +15 -1
  1502. package/dist/cdn/assets/solution-configuration/t9n/messages.pt-BR.json +15 -1
  1503. package/dist/cdn/assets/solution-configuration/t9n/messages.pt-PT.json +15 -1
  1504. package/dist/cdn/assets/solution-configuration/t9n/messages.ro.json +15 -1
  1505. package/dist/cdn/assets/solution-configuration/t9n/messages.ru.json +15 -1
  1506. package/dist/cdn/assets/solution-configuration/t9n/messages.sk.json +15 -1
  1507. package/dist/cdn/assets/solution-configuration/t9n/messages.sl.json +15 -1
  1508. package/dist/cdn/assets/solution-configuration/t9n/messages.sr.json +15 -1
  1509. package/dist/cdn/assets/solution-configuration/t9n/messages.sv.json +15 -1
  1510. package/dist/cdn/assets/solution-configuration/t9n/messages.th.json +15 -1
  1511. package/dist/cdn/assets/solution-configuration/t9n/messages.tr.json +15 -1
  1512. package/dist/cdn/assets/solution-configuration/t9n/messages.uk.json +15 -1
  1513. package/dist/cdn/assets/solution-configuration/t9n/messages.vi.json +15 -1
  1514. package/dist/cdn/assets/solution-configuration/t9n/messages.zh-CN.json +15 -1
  1515. package/dist/cdn/assets/solution-configuration/t9n/messages.zh-HK.json +15 -1
  1516. package/dist/cdn/assets/solution-configuration/t9n/messages.zh-TW.json +15 -1
  1517. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ar.json +43 -1
  1518. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.bg.json +43 -1
  1519. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.bs.json +43 -1
  1520. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ca.json +43 -1
  1521. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.cs.json +43 -1
  1522. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.da.json +43 -1
  1523. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.de.json +43 -1
  1524. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.el.json +43 -1
  1525. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.en.json +43 -1
  1526. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.es.json +43 -1
  1527. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.et.json +43 -1
  1528. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.fi.json +43 -1
  1529. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.fr.json +43 -1
  1530. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.he.json +43 -1
  1531. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.hr.json +43 -1
  1532. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.hu.json +43 -1
  1533. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.id.json +43 -1
  1534. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.it.json +43 -1
  1535. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ja.json +43 -1
  1536. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.json +43 -1
  1537. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ko.json +43 -1
  1538. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.lt.json +43 -1
  1539. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.lv.json +43 -1
  1540. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.nl.json +43 -1
  1541. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.no.json +43 -1
  1542. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.pl.json +43 -1
  1543. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.pt-BR.json +43 -1
  1544. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.pt-PT.json +43 -1
  1545. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ro.json +43 -1
  1546. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.ru.json +43 -1
  1547. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.sk.json +43 -1
  1548. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.sl.json +43 -1
  1549. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.sr.json +43 -1
  1550. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.sv.json +43 -1
  1551. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.th.json +43 -1
  1552. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.tr.json +43 -1
  1553. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.uk.json +43 -1
  1554. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.vi.json +43 -1
  1555. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.zh-CN.json +43 -1
  1556. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.zh-HK.json +43 -1
  1557. package/dist/cdn/assets/solution-configure-dialog/t9n/messages.zh-TW.json +43 -1
  1558. package/dist/cdn/assets/solution-configure-titles/t9n/messages.ar.json +13 -1
  1559. package/dist/cdn/assets/solution-configure-titles/t9n/messages.bg.json +13 -1
  1560. package/dist/cdn/assets/solution-configure-titles/t9n/messages.bs.json +13 -1
  1561. package/dist/cdn/assets/solution-configure-titles/t9n/messages.ca.json +13 -1
  1562. package/dist/cdn/assets/solution-configure-titles/t9n/messages.cs.json +13 -1
  1563. package/dist/cdn/assets/solution-configure-titles/t9n/messages.da.json +13 -1
  1564. package/dist/cdn/assets/solution-configure-titles/t9n/messages.de.json +13 -1
  1565. package/dist/cdn/assets/solution-configure-titles/t9n/messages.el.json +13 -1
  1566. package/dist/cdn/assets/solution-configure-titles/t9n/messages.en.json +13 -1
  1567. package/dist/cdn/assets/solution-configure-titles/t9n/messages.es.json +13 -1
  1568. package/dist/cdn/assets/solution-configure-titles/t9n/messages.et.json +13 -1
  1569. package/dist/cdn/assets/solution-configure-titles/t9n/messages.fi.json +13 -1
  1570. package/dist/cdn/assets/solution-configure-titles/t9n/messages.fr.json +13 -1
  1571. package/dist/cdn/assets/solution-configure-titles/t9n/messages.he.json +13 -1
  1572. package/dist/cdn/assets/solution-configure-titles/t9n/messages.hr.json +13 -1
  1573. package/dist/cdn/assets/solution-configure-titles/t9n/messages.hu.json +13 -1
  1574. package/dist/cdn/assets/solution-configure-titles/t9n/messages.id.json +13 -1
  1575. package/dist/cdn/assets/solution-configure-titles/t9n/messages.it.json +13 -1
  1576. package/dist/cdn/assets/solution-configure-titles/t9n/messages.ja.json +13 -1
  1577. package/dist/cdn/assets/solution-configure-titles/t9n/messages.json +13 -1
  1578. package/dist/cdn/assets/solution-configure-titles/t9n/messages.ko.json +13 -1
  1579. package/dist/cdn/assets/solution-configure-titles/t9n/messages.lt.json +13 -1
  1580. package/dist/cdn/assets/solution-configure-titles/t9n/messages.lv.json +13 -1
  1581. package/dist/cdn/assets/solution-configure-titles/t9n/messages.nl.json +13 -1
  1582. package/dist/cdn/assets/solution-configure-titles/t9n/messages.no.json +13 -1
  1583. package/dist/cdn/assets/solution-configure-titles/t9n/messages.pl.json +13 -1
  1584. package/dist/cdn/assets/solution-configure-titles/t9n/messages.pt-BR.json +13 -1
  1585. package/dist/cdn/assets/solution-configure-titles/t9n/messages.pt-PT.json +13 -1
  1586. package/dist/cdn/assets/solution-configure-titles/t9n/messages.ro.json +13 -1
  1587. package/dist/cdn/assets/solution-configure-titles/t9n/messages.ru.json +13 -1
  1588. package/dist/cdn/assets/solution-configure-titles/t9n/messages.sk.json +13 -1
  1589. package/dist/cdn/assets/solution-configure-titles/t9n/messages.sl.json +13 -1
  1590. package/dist/cdn/assets/solution-configure-titles/t9n/messages.sr.json +13 -1
  1591. package/dist/cdn/assets/solution-configure-titles/t9n/messages.sv.json +13 -1
  1592. package/dist/cdn/assets/solution-configure-titles/t9n/messages.th.json +13 -1
  1593. package/dist/cdn/assets/solution-configure-titles/t9n/messages.tr.json +13 -1
  1594. package/dist/cdn/assets/solution-configure-titles/t9n/messages.uk.json +13 -1
  1595. package/dist/cdn/assets/solution-configure-titles/t9n/messages.vi.json +13 -1
  1596. package/dist/cdn/assets/solution-configure-titles/t9n/messages.zh-CN.json +13 -1
  1597. package/dist/cdn/assets/solution-configure-titles/t9n/messages.zh-HK.json +13 -1
  1598. package/dist/cdn/assets/solution-configure-titles/t9n/messages.zh-TW.json +13 -1
  1599. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ar.json +11 -1
  1600. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.bg.json +11 -1
  1601. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.bs.json +11 -1
  1602. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ca.json +11 -1
  1603. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.cs.json +11 -1
  1604. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.da.json +11 -1
  1605. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.de.json +11 -1
  1606. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.el.json +11 -1
  1607. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.en.json +11 -1
  1608. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.es.json +11 -1
  1609. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.et.json +11 -1
  1610. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.fi.json +11 -1
  1611. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.fr.json +11 -1
  1612. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.he.json +11 -1
  1613. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.hr.json +11 -1
  1614. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.hu.json +11 -1
  1615. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.id.json +11 -1
  1616. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.it.json +11 -1
  1617. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ja.json +11 -1
  1618. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.json +11 -1
  1619. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ko.json +11 -1
  1620. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.lt.json +11 -1
  1621. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.lv.json +11 -1
  1622. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.nl.json +11 -1
  1623. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.no.json +11 -1
  1624. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.pl.json +11 -1
  1625. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.pt-BR.json +11 -1
  1626. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.pt-PT.json +11 -1
  1627. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ro.json +11 -1
  1628. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.ru.json +11 -1
  1629. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.sk.json +11 -1
  1630. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.sl.json +11 -1
  1631. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.sr.json +11 -1
  1632. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.sv.json +11 -1
  1633. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.th.json +11 -1
  1634. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.tr.json +11 -1
  1635. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.uk.json +11 -1
  1636. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.vi.json +11 -1
  1637. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.zh-CN.json +11 -1
  1638. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.zh-HK.json +11 -1
  1639. package/dist/cdn/assets/solution-delete-dialog/t9n/messages.zh-TW.json +11 -1
  1640. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ar.json +21 -1
  1641. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.bg.json +21 -1
  1642. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.bs.json +21 -1
  1643. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ca.json +21 -1
  1644. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.cs.json +21 -1
  1645. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.da.json +21 -1
  1646. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.de.json +21 -1
  1647. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.el.json +21 -1
  1648. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.en.json +21 -1
  1649. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.es.json +21 -1
  1650. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.et.json +21 -1
  1651. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.fi.json +21 -1
  1652. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.fr.json +21 -1
  1653. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.he.json +21 -1
  1654. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.hr.json +21 -1
  1655. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.hu.json +21 -1
  1656. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.id.json +21 -1
  1657. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.it.json +21 -1
  1658. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ja.json +21 -1
  1659. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.json +21 -1
  1660. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ko.json +21 -1
  1661. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.lt.json +21 -1
  1662. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.lv.json +21 -1
  1663. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.nl.json +21 -1
  1664. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.no.json +21 -1
  1665. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.pl.json +21 -1
  1666. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.pt-BR.json +21 -1
  1667. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.pt-PT.json +21 -1
  1668. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ro.json +21 -1
  1669. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.ru.json +21 -1
  1670. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.sk.json +21 -1
  1671. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.sl.json +21 -1
  1672. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.sr.json +21 -1
  1673. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.sv.json +21 -1
  1674. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.th.json +21 -1
  1675. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.tr.json +21 -1
  1676. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.uk.json +21 -1
  1677. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.vi.json +21 -1
  1678. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.zh-CN.json +21 -1
  1679. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.zh-HK.json +21 -1
  1680. package/dist/cdn/assets/solution-deploy-dialog/t9n/messages.zh-TW.json +21 -1
  1681. package/dist/cdn/assets/solution-deployed-card/t9n/messages.ar.json +13 -1
  1682. package/dist/cdn/assets/solution-deployed-card/t9n/messages.bg.json +13 -1
  1683. package/dist/cdn/assets/solution-deployed-card/t9n/messages.bs.json +13 -1
  1684. package/dist/cdn/assets/solution-deployed-card/t9n/messages.ca.json +13 -1
  1685. package/dist/cdn/assets/solution-deployed-card/t9n/messages.cs.json +13 -1
  1686. package/dist/cdn/assets/solution-deployed-card/t9n/messages.da.json +13 -1
  1687. package/dist/cdn/assets/solution-deployed-card/t9n/messages.de.json +13 -1
  1688. package/dist/cdn/assets/solution-deployed-card/t9n/messages.el.json +13 -1
  1689. package/dist/cdn/assets/solution-deployed-card/t9n/messages.en.json +13 -1
  1690. package/dist/cdn/assets/solution-deployed-card/t9n/messages.es.json +13 -1
  1691. package/dist/cdn/assets/solution-deployed-card/t9n/messages.et.json +13 -1
  1692. package/dist/cdn/assets/solution-deployed-card/t9n/messages.fi.json +13 -1
  1693. package/dist/cdn/assets/solution-deployed-card/t9n/messages.fr.json +13 -1
  1694. package/dist/cdn/assets/solution-deployed-card/t9n/messages.he.json +13 -1
  1695. package/dist/cdn/assets/solution-deployed-card/t9n/messages.hr.json +13 -1
  1696. package/dist/cdn/assets/solution-deployed-card/t9n/messages.hu.json +13 -1
  1697. package/dist/cdn/assets/solution-deployed-card/t9n/messages.id.json +13 -1
  1698. package/dist/cdn/assets/solution-deployed-card/t9n/messages.it.json +13 -1
  1699. package/dist/cdn/assets/solution-deployed-card/t9n/messages.ja.json +13 -1
  1700. package/dist/cdn/assets/solution-deployed-card/t9n/messages.json +13 -1
  1701. package/dist/cdn/assets/solution-deployed-card/t9n/messages.ko.json +13 -1
  1702. package/dist/cdn/assets/solution-deployed-card/t9n/messages.lt.json +13 -1
  1703. package/dist/cdn/assets/solution-deployed-card/t9n/messages.lv.json +13 -1
  1704. package/dist/cdn/assets/solution-deployed-card/t9n/messages.nl.json +13 -1
  1705. package/dist/cdn/assets/solution-deployed-card/t9n/messages.no.json +13 -1
  1706. package/dist/cdn/assets/solution-deployed-card/t9n/messages.pl.json +13 -1
  1707. package/dist/cdn/assets/solution-deployed-card/t9n/messages.pt-BR.json +13 -1
  1708. package/dist/cdn/assets/solution-deployed-card/t9n/messages.pt-PT.json +13 -1
  1709. package/dist/cdn/assets/solution-deployed-card/t9n/messages.ro.json +13 -1
  1710. package/dist/cdn/assets/solution-deployed-card/t9n/messages.ru.json +13 -1
  1711. package/dist/cdn/assets/solution-deployed-card/t9n/messages.sk.json +13 -1
  1712. package/dist/cdn/assets/solution-deployed-card/t9n/messages.sl.json +13 -1
  1713. package/dist/cdn/assets/solution-deployed-card/t9n/messages.sr.json +13 -1
  1714. package/dist/cdn/assets/solution-deployed-card/t9n/messages.sv.json +13 -1
  1715. package/dist/cdn/assets/solution-deployed-card/t9n/messages.th.json +13 -1
  1716. package/dist/cdn/assets/solution-deployed-card/t9n/messages.tr.json +13 -1
  1717. package/dist/cdn/assets/solution-deployed-card/t9n/messages.uk.json +13 -1
  1718. package/dist/cdn/assets/solution-deployed-card/t9n/messages.vi.json +13 -1
  1719. package/dist/cdn/assets/solution-deployed-card/t9n/messages.zh-CN.json +13 -1
  1720. package/dist/cdn/assets/solution-deployed-card/t9n/messages.zh-HK.json +13 -1
  1721. package/dist/cdn/assets/solution-deployed-card/t9n/messages.zh-TW.json +13 -1
  1722. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ar.json +16 -1
  1723. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.bg.json +16 -1
  1724. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.bs.json +16 -1
  1725. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ca.json +16 -1
  1726. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.cs.json +16 -1
  1727. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.da.json +16 -1
  1728. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.de.json +16 -1
  1729. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.el.json +16 -1
  1730. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.en.json +16 -1
  1731. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.es.json +16 -1
  1732. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.et.json +16 -1
  1733. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.fi.json +16 -1
  1734. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.fr.json +16 -1
  1735. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.he.json +16 -1
  1736. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.hr.json +16 -1
  1737. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.hu.json +16 -1
  1738. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.id.json +16 -1
  1739. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.it.json +16 -1
  1740. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ja.json +16 -1
  1741. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.json +16 -1
  1742. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ko.json +16 -1
  1743. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.lt.json +16 -1
  1744. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.lv.json +16 -1
  1745. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.nl.json +16 -1
  1746. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.no.json +16 -1
  1747. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.pl.json +16 -1
  1748. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.pt-BR.json +16 -1
  1749. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.pt-PT.json +16 -1
  1750. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ro.json +16 -1
  1751. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.ru.json +16 -1
  1752. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.sk.json +16 -1
  1753. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.sl.json +16 -1
  1754. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.sr.json +16 -1
  1755. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.sv.json +16 -1
  1756. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.th.json +16 -1
  1757. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.tr.json +16 -1
  1758. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.uk.json +16 -1
  1759. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.vi.json +16 -1
  1760. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.zh-CN.json +16 -1
  1761. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.zh-HK.json +16 -1
  1762. package/dist/cdn/assets/solution-deploying-dialog/t9n/messages.zh-TW.json +16 -1
  1763. package/dist/cdn/assets/solution-details-card/t9n/messages.ar.json +5 -1
  1764. package/dist/cdn/assets/solution-details-card/t9n/messages.bg.json +5 -1
  1765. package/dist/cdn/assets/solution-details-card/t9n/messages.bs.json +5 -1
  1766. package/dist/cdn/assets/solution-details-card/t9n/messages.ca.json +5 -1
  1767. package/dist/cdn/assets/solution-details-card/t9n/messages.cs.json +5 -1
  1768. package/dist/cdn/assets/solution-details-card/t9n/messages.da.json +5 -1
  1769. package/dist/cdn/assets/solution-details-card/t9n/messages.de.json +5 -1
  1770. package/dist/cdn/assets/solution-details-card/t9n/messages.el.json +5 -1
  1771. package/dist/cdn/assets/solution-details-card/t9n/messages.en.json +5 -1
  1772. package/dist/cdn/assets/solution-details-card/t9n/messages.es.json +5 -1
  1773. package/dist/cdn/assets/solution-details-card/t9n/messages.et.json +5 -1
  1774. package/dist/cdn/assets/solution-details-card/t9n/messages.fi.json +5 -1
  1775. package/dist/cdn/assets/solution-details-card/t9n/messages.fr.json +5 -1
  1776. package/dist/cdn/assets/solution-details-card/t9n/messages.he.json +5 -1
  1777. package/dist/cdn/assets/solution-details-card/t9n/messages.hr.json +5 -1
  1778. package/dist/cdn/assets/solution-details-card/t9n/messages.hu.json +5 -1
  1779. package/dist/cdn/assets/solution-details-card/t9n/messages.id.json +5 -1
  1780. package/dist/cdn/assets/solution-details-card/t9n/messages.it.json +5 -1
  1781. package/dist/cdn/assets/solution-details-card/t9n/messages.ja.json +5 -1
  1782. package/dist/cdn/assets/solution-details-card/t9n/messages.json +5 -1
  1783. package/dist/cdn/assets/solution-details-card/t9n/messages.ko.json +5 -1
  1784. package/dist/cdn/assets/solution-details-card/t9n/messages.lt.json +5 -1
  1785. package/dist/cdn/assets/solution-details-card/t9n/messages.lv.json +5 -1
  1786. package/dist/cdn/assets/solution-details-card/t9n/messages.nl.json +5 -1
  1787. package/dist/cdn/assets/solution-details-card/t9n/messages.no.json +5 -1
  1788. package/dist/cdn/assets/solution-details-card/t9n/messages.pl.json +5 -1
  1789. package/dist/cdn/assets/solution-details-card/t9n/messages.pt-BR.json +5 -1
  1790. package/dist/cdn/assets/solution-details-card/t9n/messages.pt-PT.json +5 -1
  1791. package/dist/cdn/assets/solution-details-card/t9n/messages.ro.json +5 -1
  1792. package/dist/cdn/assets/solution-details-card/t9n/messages.ru.json +5 -1
  1793. package/dist/cdn/assets/solution-details-card/t9n/messages.sk.json +5 -1
  1794. package/dist/cdn/assets/solution-details-card/t9n/messages.sl.json +5 -1
  1795. package/dist/cdn/assets/solution-details-card/t9n/messages.sr.json +5 -1
  1796. package/dist/cdn/assets/solution-details-card/t9n/messages.sv.json +5 -1
  1797. package/dist/cdn/assets/solution-details-card/t9n/messages.th.json +5 -1
  1798. package/dist/cdn/assets/solution-details-card/t9n/messages.tr.json +5 -1
  1799. package/dist/cdn/assets/solution-details-card/t9n/messages.uk.json +5 -1
  1800. package/dist/cdn/assets/solution-details-card/t9n/messages.vi.json +5 -1
  1801. package/dist/cdn/assets/solution-details-card/t9n/messages.zh-CN.json +5 -1
  1802. package/dist/cdn/assets/solution-details-card/t9n/messages.zh-HK.json +5 -1
  1803. package/dist/cdn/assets/solution-details-card/t9n/messages.zh-TW.json +5 -1
  1804. package/dist/cdn/assets/solution-details-panel/t9n/messages.ar.json +62 -1
  1805. package/dist/cdn/assets/solution-details-panel/t9n/messages.bg.json +62 -1
  1806. package/dist/cdn/assets/solution-details-panel/t9n/messages.bs.json +62 -1
  1807. package/dist/cdn/assets/solution-details-panel/t9n/messages.ca.json +62 -1
  1808. package/dist/cdn/assets/solution-details-panel/t9n/messages.cs.json +62 -1
  1809. package/dist/cdn/assets/solution-details-panel/t9n/messages.da.json +62 -1
  1810. package/dist/cdn/assets/solution-details-panel/t9n/messages.de.json +62 -1
  1811. package/dist/cdn/assets/solution-details-panel/t9n/messages.el.json +62 -1
  1812. package/dist/cdn/assets/solution-details-panel/t9n/messages.en.json +62 -1
  1813. package/dist/cdn/assets/solution-details-panel/t9n/messages.es.json +62 -1
  1814. package/dist/cdn/assets/solution-details-panel/t9n/messages.et.json +62 -1
  1815. package/dist/cdn/assets/solution-details-panel/t9n/messages.fi.json +62 -1
  1816. package/dist/cdn/assets/solution-details-panel/t9n/messages.fr.json +62 -1
  1817. package/dist/cdn/assets/solution-details-panel/t9n/messages.he.json +62 -1
  1818. package/dist/cdn/assets/solution-details-panel/t9n/messages.hr.json +62 -1
  1819. package/dist/cdn/assets/solution-details-panel/t9n/messages.hu.json +62 -1
  1820. package/dist/cdn/assets/solution-details-panel/t9n/messages.id.json +62 -1
  1821. package/dist/cdn/assets/solution-details-panel/t9n/messages.it.json +62 -1
  1822. package/dist/cdn/assets/solution-details-panel/t9n/messages.ja.json +62 -1
  1823. package/dist/cdn/assets/solution-details-panel/t9n/messages.json +62 -1
  1824. package/dist/cdn/assets/solution-details-panel/t9n/messages.ko.json +62 -1
  1825. package/dist/cdn/assets/solution-details-panel/t9n/messages.lt.json +62 -1
  1826. package/dist/cdn/assets/solution-details-panel/t9n/messages.lv.json +62 -1
  1827. package/dist/cdn/assets/solution-details-panel/t9n/messages.nl.json +62 -1
  1828. package/dist/cdn/assets/solution-details-panel/t9n/messages.no.json +62 -1
  1829. package/dist/cdn/assets/solution-details-panel/t9n/messages.pl.json +62 -1
  1830. package/dist/cdn/assets/solution-details-panel/t9n/messages.pt-BR.json +62 -1
  1831. package/dist/cdn/assets/solution-details-panel/t9n/messages.pt-PT.json +62 -1
  1832. package/dist/cdn/assets/solution-details-panel/t9n/messages.ro.json +62 -1
  1833. package/dist/cdn/assets/solution-details-panel/t9n/messages.ru.json +62 -1
  1834. package/dist/cdn/assets/solution-details-panel/t9n/messages.sk.json +62 -1
  1835. package/dist/cdn/assets/solution-details-panel/t9n/messages.sl.json +62 -1
  1836. package/dist/cdn/assets/solution-details-panel/t9n/messages.sr.json +62 -1
  1837. package/dist/cdn/assets/solution-details-panel/t9n/messages.sv.json +62 -1
  1838. package/dist/cdn/assets/solution-details-panel/t9n/messages.th.json +62 -1
  1839. package/dist/cdn/assets/solution-details-panel/t9n/messages.tr.json +62 -1
  1840. package/dist/cdn/assets/solution-details-panel/t9n/messages.uk.json +62 -1
  1841. package/dist/cdn/assets/solution-details-panel/t9n/messages.vi.json +62 -1
  1842. package/dist/cdn/assets/solution-details-panel/t9n/messages.zh-CN.json +62 -1
  1843. package/dist/cdn/assets/solution-details-panel/t9n/messages.zh-HK.json +62 -1
  1844. package/dist/cdn/assets/solution-details-panel/t9n/messages.zh-TW.json +62 -1
  1845. package/dist/cdn/assets/solution-item/t9n/messages.ar.json +8 -1
  1846. package/dist/cdn/assets/solution-item/t9n/messages.bg.json +8 -1
  1847. package/dist/cdn/assets/solution-item/t9n/messages.bs.json +8 -1
  1848. package/dist/cdn/assets/solution-item/t9n/messages.ca.json +8 -1
  1849. package/dist/cdn/assets/solution-item/t9n/messages.cs.json +8 -1
  1850. package/dist/cdn/assets/solution-item/t9n/messages.da.json +8 -1
  1851. package/dist/cdn/assets/solution-item/t9n/messages.de.json +8 -1
  1852. package/dist/cdn/assets/solution-item/t9n/messages.el.json +8 -1
  1853. package/dist/cdn/assets/solution-item/t9n/messages.en.json +8 -1
  1854. package/dist/cdn/assets/solution-item/t9n/messages.es.json +8 -1
  1855. package/dist/cdn/assets/solution-item/t9n/messages.et.json +8 -1
  1856. package/dist/cdn/assets/solution-item/t9n/messages.fi.json +8 -1
  1857. package/dist/cdn/assets/solution-item/t9n/messages.fr.json +8 -1
  1858. package/dist/cdn/assets/solution-item/t9n/messages.he.json +8 -1
  1859. package/dist/cdn/assets/solution-item/t9n/messages.hr.json +8 -1
  1860. package/dist/cdn/assets/solution-item/t9n/messages.hu.json +8 -1
  1861. package/dist/cdn/assets/solution-item/t9n/messages.id.json +8 -1
  1862. package/dist/cdn/assets/solution-item/t9n/messages.it.json +8 -1
  1863. package/dist/cdn/assets/solution-item/t9n/messages.ja.json +8 -1
  1864. package/dist/cdn/assets/solution-item/t9n/messages.json +8 -1
  1865. package/dist/cdn/assets/solution-item/t9n/messages.ko.json +8 -1
  1866. package/dist/cdn/assets/solution-item/t9n/messages.lt.json +8 -1
  1867. package/dist/cdn/assets/solution-item/t9n/messages.lv.json +8 -1
  1868. package/dist/cdn/assets/solution-item/t9n/messages.nl.json +8 -1
  1869. package/dist/cdn/assets/solution-item/t9n/messages.no.json +8 -1
  1870. package/dist/cdn/assets/solution-item/t9n/messages.pl.json +8 -1
  1871. package/dist/cdn/assets/solution-item/t9n/messages.pt-BR.json +8 -1
  1872. package/dist/cdn/assets/solution-item/t9n/messages.pt-PT.json +8 -1
  1873. package/dist/cdn/assets/solution-item/t9n/messages.ro.json +8 -1
  1874. package/dist/cdn/assets/solution-item/t9n/messages.ru.json +8 -1
  1875. package/dist/cdn/assets/solution-item/t9n/messages.sk.json +8 -1
  1876. package/dist/cdn/assets/solution-item/t9n/messages.sl.json +8 -1
  1877. package/dist/cdn/assets/solution-item/t9n/messages.sr.json +8 -1
  1878. package/dist/cdn/assets/solution-item/t9n/messages.sv.json +8 -1
  1879. package/dist/cdn/assets/solution-item/t9n/messages.th.json +8 -1
  1880. package/dist/cdn/assets/solution-item/t9n/messages.tr.json +8 -1
  1881. package/dist/cdn/assets/solution-item/t9n/messages.uk.json +8 -1
  1882. package/dist/cdn/assets/solution-item/t9n/messages.vi.json +8 -1
  1883. package/dist/cdn/assets/solution-item/t9n/messages.zh-CN.json +8 -1
  1884. package/dist/cdn/assets/solution-item/t9n/messages.zh-HK.json +8 -1
  1885. package/dist/cdn/assets/solution-item/t9n/messages.zh-TW.json +8 -1
  1886. package/dist/cdn/assets/solution-item-accordion/t9n/messages.ar.json +5 -1
  1887. package/dist/cdn/assets/solution-item-accordion/t9n/messages.bg.json +5 -1
  1888. package/dist/cdn/assets/solution-item-accordion/t9n/messages.bs.json +5 -1
  1889. package/dist/cdn/assets/solution-item-accordion/t9n/messages.ca.json +5 -1
  1890. package/dist/cdn/assets/solution-item-accordion/t9n/messages.cs.json +5 -1
  1891. package/dist/cdn/assets/solution-item-accordion/t9n/messages.da.json +5 -1
  1892. package/dist/cdn/assets/solution-item-accordion/t9n/messages.de.json +5 -1
  1893. package/dist/cdn/assets/solution-item-accordion/t9n/messages.el.json +5 -1
  1894. package/dist/cdn/assets/solution-item-accordion/t9n/messages.en.json +5 -1
  1895. package/dist/cdn/assets/solution-item-accordion/t9n/messages.es.json +5 -1
  1896. package/dist/cdn/assets/solution-item-accordion/t9n/messages.et.json +5 -1
  1897. package/dist/cdn/assets/solution-item-accordion/t9n/messages.fi.json +5 -1
  1898. package/dist/cdn/assets/solution-item-accordion/t9n/messages.fr.json +5 -1
  1899. package/dist/cdn/assets/solution-item-accordion/t9n/messages.he.json +5 -1
  1900. package/dist/cdn/assets/solution-item-accordion/t9n/messages.hr.json +5 -1
  1901. package/dist/cdn/assets/solution-item-accordion/t9n/messages.hu.json +5 -1
  1902. package/dist/cdn/assets/solution-item-accordion/t9n/messages.id.json +5 -1
  1903. package/dist/cdn/assets/solution-item-accordion/t9n/messages.it.json +5 -1
  1904. package/dist/cdn/assets/solution-item-accordion/t9n/messages.ja.json +5 -1
  1905. package/dist/cdn/assets/solution-item-accordion/t9n/messages.json +5 -1
  1906. package/dist/cdn/assets/solution-item-accordion/t9n/messages.ko.json +5 -1
  1907. package/dist/cdn/assets/solution-item-accordion/t9n/messages.lt.json +5 -1
  1908. package/dist/cdn/assets/solution-item-accordion/t9n/messages.lv.json +5 -1
  1909. package/dist/cdn/assets/solution-item-accordion/t9n/messages.nb.json +3 -1
  1910. package/dist/cdn/assets/solution-item-accordion/t9n/messages.nl.json +5 -1
  1911. package/dist/cdn/assets/solution-item-accordion/t9n/messages.no.json +5 -1
  1912. package/dist/cdn/assets/solution-item-accordion/t9n/messages.pl.json +5 -1
  1913. package/dist/cdn/assets/solution-item-accordion/t9n/messages.pt-BR.json +5 -1
  1914. package/dist/cdn/assets/solution-item-accordion/t9n/messages.pt-PT.json +5 -1
  1915. package/dist/cdn/assets/solution-item-accordion/t9n/messages.ro.json +5 -1
  1916. package/dist/cdn/assets/solution-item-accordion/t9n/messages.ru.json +5 -1
  1917. package/dist/cdn/assets/solution-item-accordion/t9n/messages.sk.json +5 -1
  1918. package/dist/cdn/assets/solution-item-accordion/t9n/messages.sl.json +5 -1
  1919. package/dist/cdn/assets/solution-item-accordion/t9n/messages.sr.json +5 -1
  1920. package/dist/cdn/assets/solution-item-accordion/t9n/messages.sv.json +5 -1
  1921. package/dist/cdn/assets/solution-item-accordion/t9n/messages.th.json +5 -1
  1922. package/dist/cdn/assets/solution-item-accordion/t9n/messages.tr.json +5 -1
  1923. package/dist/cdn/assets/solution-item-accordion/t9n/messages.uk.json +5 -1
  1924. package/dist/cdn/assets/solution-item-accordion/t9n/messages.vi.json +5 -1
  1925. package/dist/cdn/assets/solution-item-accordion/t9n/messages.zh-CN.json +5 -1
  1926. package/dist/cdn/assets/solution-item-accordion/t9n/messages.zh-HK.json +5 -1
  1927. package/dist/cdn/assets/solution-item-accordion/t9n/messages.zh-TW.json +5 -1
  1928. package/dist/cdn/assets/solution-item-details/t9n/messages.ar.json +8 -1
  1929. package/dist/cdn/assets/solution-item-details/t9n/messages.bg.json +8 -1
  1930. package/dist/cdn/assets/solution-item-details/t9n/messages.bs.json +8 -1
  1931. package/dist/cdn/assets/solution-item-details/t9n/messages.ca.json +8 -1
  1932. package/dist/cdn/assets/solution-item-details/t9n/messages.cs.json +8 -1
  1933. package/dist/cdn/assets/solution-item-details/t9n/messages.da.json +8 -1
  1934. package/dist/cdn/assets/solution-item-details/t9n/messages.de.json +8 -1
  1935. package/dist/cdn/assets/solution-item-details/t9n/messages.el.json +8 -1
  1936. package/dist/cdn/assets/solution-item-details/t9n/messages.en.json +8 -1
  1937. package/dist/cdn/assets/solution-item-details/t9n/messages.es.json +8 -1
  1938. package/dist/cdn/assets/solution-item-details/t9n/messages.et.json +8 -1
  1939. package/dist/cdn/assets/solution-item-details/t9n/messages.fi.json +8 -1
  1940. package/dist/cdn/assets/solution-item-details/t9n/messages.fr.json +8 -1
  1941. package/dist/cdn/assets/solution-item-details/t9n/messages.he.json +8 -1
  1942. package/dist/cdn/assets/solution-item-details/t9n/messages.hr.json +8 -1
  1943. package/dist/cdn/assets/solution-item-details/t9n/messages.hu.json +8 -1
  1944. package/dist/cdn/assets/solution-item-details/t9n/messages.id.json +8 -1
  1945. package/dist/cdn/assets/solution-item-details/t9n/messages.it.json +8 -1
  1946. package/dist/cdn/assets/solution-item-details/t9n/messages.ja.json +8 -1
  1947. package/dist/cdn/assets/solution-item-details/t9n/messages.json +8 -1
  1948. package/dist/cdn/assets/solution-item-details/t9n/messages.ko.json +8 -1
  1949. package/dist/cdn/assets/solution-item-details/t9n/messages.lt.json +8 -1
  1950. package/dist/cdn/assets/solution-item-details/t9n/messages.lv.json +8 -1
  1951. package/dist/cdn/assets/solution-item-details/t9n/messages.nl.json +8 -1
  1952. package/dist/cdn/assets/solution-item-details/t9n/messages.no.json +8 -1
  1953. package/dist/cdn/assets/solution-item-details/t9n/messages.pl.json +8 -1
  1954. package/dist/cdn/assets/solution-item-details/t9n/messages.pt-BR.json +8 -1
  1955. package/dist/cdn/assets/solution-item-details/t9n/messages.pt-PT.json +8 -1
  1956. package/dist/cdn/assets/solution-item-details/t9n/messages.ro.json +8 -1
  1957. package/dist/cdn/assets/solution-item-details/t9n/messages.ru.json +8 -1
  1958. package/dist/cdn/assets/solution-item-details/t9n/messages.sk.json +8 -1
  1959. package/dist/cdn/assets/solution-item-details/t9n/messages.sl.json +8 -1
  1960. package/dist/cdn/assets/solution-item-details/t9n/messages.sr.json +8 -1
  1961. package/dist/cdn/assets/solution-item-details/t9n/messages.sv.json +8 -1
  1962. package/dist/cdn/assets/solution-item-details/t9n/messages.th.json +8 -1
  1963. package/dist/cdn/assets/solution-item-details/t9n/messages.tr.json +8 -1
  1964. package/dist/cdn/assets/solution-item-details/t9n/messages.uk.json +8 -1
  1965. package/dist/cdn/assets/solution-item-details/t9n/messages.vi.json +8 -1
  1966. package/dist/cdn/assets/solution-item-details/t9n/messages.zh-CN.json +8 -1
  1967. package/dist/cdn/assets/solution-item-details/t9n/messages.zh-HK.json +8 -1
  1968. package/dist/cdn/assets/solution-item-details/t9n/messages.zh-TW.json +8 -1
  1969. package/dist/cdn/assets/solution-item-diagram/t9n/messages.ar.json +9 -1
  1970. package/dist/cdn/assets/solution-item-diagram/t9n/messages.bg.json +9 -1
  1971. package/dist/cdn/assets/solution-item-diagram/t9n/messages.bs.json +9 -1
  1972. package/dist/cdn/assets/solution-item-diagram/t9n/messages.ca.json +9 -1
  1973. package/dist/cdn/assets/solution-item-diagram/t9n/messages.cs.json +9 -1
  1974. package/dist/cdn/assets/solution-item-diagram/t9n/messages.da.json +9 -1
  1975. package/dist/cdn/assets/solution-item-diagram/t9n/messages.de.json +9 -1
  1976. package/dist/cdn/assets/solution-item-diagram/t9n/messages.el.json +9 -1
  1977. package/dist/cdn/assets/solution-item-diagram/t9n/messages.en.json +9 -1
  1978. package/dist/cdn/assets/solution-item-diagram/t9n/messages.es.json +9 -1
  1979. package/dist/cdn/assets/solution-item-diagram/t9n/messages.et.json +9 -1
  1980. package/dist/cdn/assets/solution-item-diagram/t9n/messages.fi.json +9 -1
  1981. package/dist/cdn/assets/solution-item-diagram/t9n/messages.fr.json +9 -1
  1982. package/dist/cdn/assets/solution-item-diagram/t9n/messages.he.json +9 -1
  1983. package/dist/cdn/assets/solution-item-diagram/t9n/messages.hr.json +9 -1
  1984. package/dist/cdn/assets/solution-item-diagram/t9n/messages.hu.json +9 -1
  1985. package/dist/cdn/assets/solution-item-diagram/t9n/messages.id.json +9 -1
  1986. package/dist/cdn/assets/solution-item-diagram/t9n/messages.it.json +9 -1
  1987. package/dist/cdn/assets/solution-item-diagram/t9n/messages.ja.json +9 -1
  1988. package/dist/cdn/assets/solution-item-diagram/t9n/messages.json +9 -1
  1989. package/dist/cdn/assets/solution-item-diagram/t9n/messages.ko.json +9 -1
  1990. package/dist/cdn/assets/solution-item-diagram/t9n/messages.lt.json +9 -1
  1991. package/dist/cdn/assets/solution-item-diagram/t9n/messages.lv.json +9 -1
  1992. package/dist/cdn/assets/solution-item-diagram/t9n/messages.nl.json +9 -1
  1993. package/dist/cdn/assets/solution-item-diagram/t9n/messages.no.json +9 -1
  1994. package/dist/cdn/assets/solution-item-diagram/t9n/messages.pl.json +9 -1
  1995. package/dist/cdn/assets/solution-item-diagram/t9n/messages.pt-BR.json +9 -1
  1996. package/dist/cdn/assets/solution-item-diagram/t9n/messages.pt-PT.json +9 -1
  1997. package/dist/cdn/assets/solution-item-diagram/t9n/messages.ro.json +9 -1
  1998. package/dist/cdn/assets/solution-item-diagram/t9n/messages.ru.json +9 -1
  1999. package/dist/cdn/assets/solution-item-diagram/t9n/messages.sk.json +9 -1
  2000. package/dist/cdn/assets/solution-item-diagram/t9n/messages.sl.json +9 -1
  2001. package/dist/cdn/assets/solution-item-diagram/t9n/messages.sr.json +9 -1
  2002. package/dist/cdn/assets/solution-item-diagram/t9n/messages.sv.json +9 -1
  2003. package/dist/cdn/assets/solution-item-diagram/t9n/messages.th.json +9 -1
  2004. package/dist/cdn/assets/solution-item-diagram/t9n/messages.tr.json +9 -1
  2005. package/dist/cdn/assets/solution-item-diagram/t9n/messages.uk.json +9 -1
  2006. package/dist/cdn/assets/solution-item-diagram/t9n/messages.vi.json +9 -1
  2007. package/dist/cdn/assets/solution-item-diagram/t9n/messages.zh-CN.json +9 -1
  2008. package/dist/cdn/assets/solution-item-diagram/t9n/messages.zh-HK.json +9 -1
  2009. package/dist/cdn/assets/solution-item-diagram/t9n/messages.zh-TW.json +9 -1
  2010. package/dist/cdn/assets/solution-item-sharing/t9n/messages.ar.json +3 -1
  2011. package/dist/cdn/assets/solution-item-sharing/t9n/messages.bg.json +3 -1
  2012. package/dist/cdn/assets/solution-item-sharing/t9n/messages.bs.json +3 -1
  2013. package/dist/cdn/assets/solution-item-sharing/t9n/messages.ca.json +3 -1
  2014. package/dist/cdn/assets/solution-item-sharing/t9n/messages.cs.json +3 -1
  2015. package/dist/cdn/assets/solution-item-sharing/t9n/messages.da.json +3 -1
  2016. package/dist/cdn/assets/solution-item-sharing/t9n/messages.de.json +3 -1
  2017. package/dist/cdn/assets/solution-item-sharing/t9n/messages.el.json +3 -1
  2018. package/dist/cdn/assets/solution-item-sharing/t9n/messages.en.json +3 -1
  2019. package/dist/cdn/assets/solution-item-sharing/t9n/messages.es.json +3 -1
  2020. package/dist/cdn/assets/solution-item-sharing/t9n/messages.et.json +3 -1
  2021. package/dist/cdn/assets/solution-item-sharing/t9n/messages.fi.json +3 -1
  2022. package/dist/cdn/assets/solution-item-sharing/t9n/messages.fr.json +3 -1
  2023. package/dist/cdn/assets/solution-item-sharing/t9n/messages.he.json +3 -1
  2024. package/dist/cdn/assets/solution-item-sharing/t9n/messages.hr.json +3 -1
  2025. package/dist/cdn/assets/solution-item-sharing/t9n/messages.hu.json +3 -1
  2026. package/dist/cdn/assets/solution-item-sharing/t9n/messages.id.json +3 -1
  2027. package/dist/cdn/assets/solution-item-sharing/t9n/messages.it.json +3 -1
  2028. package/dist/cdn/assets/solution-item-sharing/t9n/messages.ja.json +3 -1
  2029. package/dist/cdn/assets/solution-item-sharing/t9n/messages.json +3 -1
  2030. package/dist/cdn/assets/solution-item-sharing/t9n/messages.ko.json +3 -1
  2031. package/dist/cdn/assets/solution-item-sharing/t9n/messages.lt.json +3 -1
  2032. package/dist/cdn/assets/solution-item-sharing/t9n/messages.lv.json +3 -1
  2033. package/dist/cdn/assets/solution-item-sharing/t9n/messages.nl.json +3 -1
  2034. package/dist/cdn/assets/solution-item-sharing/t9n/messages.no.json +3 -1
  2035. package/dist/cdn/assets/solution-item-sharing/t9n/messages.pl.json +3 -1
  2036. package/dist/cdn/assets/solution-item-sharing/t9n/messages.pt-BR.json +3 -1
  2037. package/dist/cdn/assets/solution-item-sharing/t9n/messages.pt-PT.json +3 -1
  2038. package/dist/cdn/assets/solution-item-sharing/t9n/messages.ro.json +3 -1
  2039. package/dist/cdn/assets/solution-item-sharing/t9n/messages.ru.json +3 -1
  2040. package/dist/cdn/assets/solution-item-sharing/t9n/messages.sk.json +3 -1
  2041. package/dist/cdn/assets/solution-item-sharing/t9n/messages.sl.json +3 -1
  2042. package/dist/cdn/assets/solution-item-sharing/t9n/messages.sr.json +3 -1
  2043. package/dist/cdn/assets/solution-item-sharing/t9n/messages.sv.json +3 -1
  2044. package/dist/cdn/assets/solution-item-sharing/t9n/messages.th.json +3 -1
  2045. package/dist/cdn/assets/solution-item-sharing/t9n/messages.tr.json +3 -1
  2046. package/dist/cdn/assets/solution-item-sharing/t9n/messages.uk.json +3 -1
  2047. package/dist/cdn/assets/solution-item-sharing/t9n/messages.vi.json +3 -1
  2048. package/dist/cdn/assets/solution-item-sharing/t9n/messages.zh-CN.json +3 -1
  2049. package/dist/cdn/assets/solution-item-sharing/t9n/messages.zh-HK.json +3 -1
  2050. package/dist/cdn/assets/solution-item-sharing/t9n/messages.zh-TW.json +3 -1
  2051. package/dist/cdn/assets/solution-organization-variables/t9n/messages.ar.json +3 -1
  2052. package/dist/cdn/assets/solution-organization-variables/t9n/messages.bg.json +3 -1
  2053. package/dist/cdn/assets/solution-organization-variables/t9n/messages.bs.json +3 -1
  2054. package/dist/cdn/assets/solution-organization-variables/t9n/messages.ca.json +3 -1
  2055. package/dist/cdn/assets/solution-organization-variables/t9n/messages.cs.json +3 -1
  2056. package/dist/cdn/assets/solution-organization-variables/t9n/messages.da.json +3 -1
  2057. package/dist/cdn/assets/solution-organization-variables/t9n/messages.de.json +3 -1
  2058. package/dist/cdn/assets/solution-organization-variables/t9n/messages.el.json +3 -1
  2059. package/dist/cdn/assets/solution-organization-variables/t9n/messages.en.json +3 -1
  2060. package/dist/cdn/assets/solution-organization-variables/t9n/messages.es.json +3 -1
  2061. package/dist/cdn/assets/solution-organization-variables/t9n/messages.et.json +3 -1
  2062. package/dist/cdn/assets/solution-organization-variables/t9n/messages.fi.json +3 -1
  2063. package/dist/cdn/assets/solution-organization-variables/t9n/messages.fr.json +3 -1
  2064. package/dist/cdn/assets/solution-organization-variables/t9n/messages.he.json +3 -1
  2065. package/dist/cdn/assets/solution-organization-variables/t9n/messages.hr.json +3 -1
  2066. package/dist/cdn/assets/solution-organization-variables/t9n/messages.hu.json +3 -1
  2067. package/dist/cdn/assets/solution-organization-variables/t9n/messages.id.json +3 -1
  2068. package/dist/cdn/assets/solution-organization-variables/t9n/messages.it.json +3 -1
  2069. package/dist/cdn/assets/solution-organization-variables/t9n/messages.ja.json +3 -1
  2070. package/dist/cdn/assets/solution-organization-variables/t9n/messages.json +3 -1
  2071. package/dist/cdn/assets/solution-organization-variables/t9n/messages.ko.json +3 -1
  2072. package/dist/cdn/assets/solution-organization-variables/t9n/messages.lt.json +3 -1
  2073. package/dist/cdn/assets/solution-organization-variables/t9n/messages.lv.json +3 -1
  2074. package/dist/cdn/assets/solution-organization-variables/t9n/messages.nl.json +3 -1
  2075. package/dist/cdn/assets/solution-organization-variables/t9n/messages.no.json +3 -1
  2076. package/dist/cdn/assets/solution-organization-variables/t9n/messages.pl.json +3 -1
  2077. package/dist/cdn/assets/solution-organization-variables/t9n/messages.pt-BR.json +3 -1
  2078. package/dist/cdn/assets/solution-organization-variables/t9n/messages.pt-PT.json +3 -1
  2079. package/dist/cdn/assets/solution-organization-variables/t9n/messages.ro.json +3 -1
  2080. package/dist/cdn/assets/solution-organization-variables/t9n/messages.ru.json +3 -1
  2081. package/dist/cdn/assets/solution-organization-variables/t9n/messages.sk.json +3 -1
  2082. package/dist/cdn/assets/solution-organization-variables/t9n/messages.sl.json +3 -1
  2083. package/dist/cdn/assets/solution-organization-variables/t9n/messages.sr.json +3 -1
  2084. package/dist/cdn/assets/solution-organization-variables/t9n/messages.sv.json +3 -1
  2085. package/dist/cdn/assets/solution-organization-variables/t9n/messages.th.json +3 -1
  2086. package/dist/cdn/assets/solution-organization-variables/t9n/messages.tr.json +3 -1
  2087. package/dist/cdn/assets/solution-organization-variables/t9n/messages.uk.json +3 -1
  2088. package/dist/cdn/assets/solution-organization-variables/t9n/messages.vi.json +3 -1
  2089. package/dist/cdn/assets/solution-organization-variables/t9n/messages.zh-CN.json +3 -1
  2090. package/dist/cdn/assets/solution-organization-variables/t9n/messages.zh-HK.json +3 -1
  2091. package/dist/cdn/assets/solution-organization-variables/t9n/messages.zh-TW.json +3 -1
  2092. package/dist/cdn/assets/solution-resource-item/t9n/messages.ar.json +8 -1
  2093. package/dist/cdn/assets/solution-resource-item/t9n/messages.bg.json +8 -1
  2094. package/dist/cdn/assets/solution-resource-item/t9n/messages.bs.json +8 -1
  2095. package/dist/cdn/assets/solution-resource-item/t9n/messages.ca.json +8 -1
  2096. package/dist/cdn/assets/solution-resource-item/t9n/messages.cs.json +8 -1
  2097. package/dist/cdn/assets/solution-resource-item/t9n/messages.da.json +8 -1
  2098. package/dist/cdn/assets/solution-resource-item/t9n/messages.de.json +8 -1
  2099. package/dist/cdn/assets/solution-resource-item/t9n/messages.el.json +8 -1
  2100. package/dist/cdn/assets/solution-resource-item/t9n/messages.en.json +8 -1
  2101. package/dist/cdn/assets/solution-resource-item/t9n/messages.es.json +8 -1
  2102. package/dist/cdn/assets/solution-resource-item/t9n/messages.et.json +8 -1
  2103. package/dist/cdn/assets/solution-resource-item/t9n/messages.fi.json +8 -1
  2104. package/dist/cdn/assets/solution-resource-item/t9n/messages.fr.json +8 -1
  2105. package/dist/cdn/assets/solution-resource-item/t9n/messages.he.json +8 -1
  2106. package/dist/cdn/assets/solution-resource-item/t9n/messages.hr.json +8 -1
  2107. package/dist/cdn/assets/solution-resource-item/t9n/messages.hu.json +8 -1
  2108. package/dist/cdn/assets/solution-resource-item/t9n/messages.id.json +8 -1
  2109. package/dist/cdn/assets/solution-resource-item/t9n/messages.it.json +8 -1
  2110. package/dist/cdn/assets/solution-resource-item/t9n/messages.ja.json +8 -1
  2111. package/dist/cdn/assets/solution-resource-item/t9n/messages.json +8 -1
  2112. package/dist/cdn/assets/solution-resource-item/t9n/messages.ko.json +8 -1
  2113. package/dist/cdn/assets/solution-resource-item/t9n/messages.lt.json +8 -1
  2114. package/dist/cdn/assets/solution-resource-item/t9n/messages.lv.json +8 -1
  2115. package/dist/cdn/assets/solution-resource-item/t9n/messages.nl.json +8 -1
  2116. package/dist/cdn/assets/solution-resource-item/t9n/messages.no.json +8 -1
  2117. package/dist/cdn/assets/solution-resource-item/t9n/messages.pl.json +8 -1
  2118. package/dist/cdn/assets/solution-resource-item/t9n/messages.pt-BR.json +8 -1
  2119. package/dist/cdn/assets/solution-resource-item/t9n/messages.pt-PT.json +8 -1
  2120. package/dist/cdn/assets/solution-resource-item/t9n/messages.ro.json +8 -1
  2121. package/dist/cdn/assets/solution-resource-item/t9n/messages.ru.json +8 -1
  2122. package/dist/cdn/assets/solution-resource-item/t9n/messages.sk.json +8 -1
  2123. package/dist/cdn/assets/solution-resource-item/t9n/messages.sl.json +8 -1
  2124. package/dist/cdn/assets/solution-resource-item/t9n/messages.sr.json +8 -1
  2125. package/dist/cdn/assets/solution-resource-item/t9n/messages.sv.json +8 -1
  2126. package/dist/cdn/assets/solution-resource-item/t9n/messages.th.json +8 -1
  2127. package/dist/cdn/assets/solution-resource-item/t9n/messages.tr.json +8 -1
  2128. package/dist/cdn/assets/solution-resource-item/t9n/messages.uk.json +8 -1
  2129. package/dist/cdn/assets/solution-resource-item/t9n/messages.vi.json +8 -1
  2130. package/dist/cdn/assets/solution-resource-item/t9n/messages.zh-CN.json +8 -1
  2131. package/dist/cdn/assets/solution-resource-item/t9n/messages.zh-HK.json +8 -1
  2132. package/dist/cdn/assets/solution-resource-item/t9n/messages.zh-TW.json +8 -1
  2133. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ar.json +3 -1
  2134. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.bg.json +3 -1
  2135. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.bs.json +3 -1
  2136. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ca.json +3 -1
  2137. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.cs.json +3 -1
  2138. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.da.json +3 -1
  2139. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.de.json +3 -1
  2140. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.el.json +3 -1
  2141. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.en.json +3 -1
  2142. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.es.json +3 -1
  2143. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.et.json +3 -1
  2144. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.fi.json +3 -1
  2145. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.fr.json +3 -1
  2146. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.he.json +3 -1
  2147. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.hr.json +3 -1
  2148. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.hu.json +3 -1
  2149. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.id.json +3 -1
  2150. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.it.json +3 -1
  2151. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ja.json +3 -1
  2152. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.json +3 -1
  2153. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ko.json +3 -1
  2154. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.lt.json +3 -1
  2155. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.lv.json +3 -1
  2156. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.nl.json +3 -1
  2157. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.no.json +3 -1
  2158. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.pl.json +3 -1
  2159. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.pt-BR.json +3 -1
  2160. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.pt-PT.json +3 -1
  2161. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ro.json +3 -1
  2162. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.ru.json +3 -1
  2163. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.sk.json +3 -1
  2164. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.sl.json +3 -1
  2165. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.sr.json +3 -1
  2166. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.sv.json +3 -1
  2167. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.th.json +3 -1
  2168. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.tr.json +3 -1
  2169. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.uk.json +3 -1
  2170. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.vi.json +3 -1
  2171. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.zh-CN.json +3 -1
  2172. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.zh-HK.json +3 -1
  2173. package/dist/cdn/assets/solution-snapshot-gallery/t9n/messages.zh-TW.json +3 -1
  2174. package/dist/cdn/assets/solution-social-share/t9n/messages.ar.json +31 -1
  2175. package/dist/cdn/assets/solution-social-share/t9n/messages.bg.json +31 -1
  2176. package/dist/cdn/assets/solution-social-share/t9n/messages.bs.json +31 -1
  2177. package/dist/cdn/assets/solution-social-share/t9n/messages.ca.json +31 -1
  2178. package/dist/cdn/assets/solution-social-share/t9n/messages.cs.json +31 -1
  2179. package/dist/cdn/assets/solution-social-share/t9n/messages.da.json +31 -1
  2180. package/dist/cdn/assets/solution-social-share/t9n/messages.de.json +31 -1
  2181. package/dist/cdn/assets/solution-social-share/t9n/messages.el.json +31 -1
  2182. package/dist/cdn/assets/solution-social-share/t9n/messages.en.json +31 -1
  2183. package/dist/cdn/assets/solution-social-share/t9n/messages.es.json +31 -1
  2184. package/dist/cdn/assets/solution-social-share/t9n/messages.et.json +31 -1
  2185. package/dist/cdn/assets/solution-social-share/t9n/messages.fi.json +31 -1
  2186. package/dist/cdn/assets/solution-social-share/t9n/messages.fr.json +31 -1
  2187. package/dist/cdn/assets/solution-social-share/t9n/messages.he.json +31 -1
  2188. package/dist/cdn/assets/solution-social-share/t9n/messages.hr.json +31 -1
  2189. package/dist/cdn/assets/solution-social-share/t9n/messages.hu.json +31 -1
  2190. package/dist/cdn/assets/solution-social-share/t9n/messages.id.json +31 -1
  2191. package/dist/cdn/assets/solution-social-share/t9n/messages.it.json +31 -1
  2192. package/dist/cdn/assets/solution-social-share/t9n/messages.ja.json +31 -1
  2193. package/dist/cdn/assets/solution-social-share/t9n/messages.json +31 -1
  2194. package/dist/cdn/assets/solution-social-share/t9n/messages.ko.json +31 -1
  2195. package/dist/cdn/assets/solution-social-share/t9n/messages.lt.json +31 -1
  2196. package/dist/cdn/assets/solution-social-share/t9n/messages.lv.json +31 -1
  2197. package/dist/cdn/assets/solution-social-share/t9n/messages.nl.json +31 -1
  2198. package/dist/cdn/assets/solution-social-share/t9n/messages.no.json +31 -1
  2199. package/dist/cdn/assets/solution-social-share/t9n/messages.pl.json +31 -1
  2200. package/dist/cdn/assets/solution-social-share/t9n/messages.pt-BR.json +31 -1
  2201. package/dist/cdn/assets/solution-social-share/t9n/messages.pt-PT.json +31 -1
  2202. package/dist/cdn/assets/solution-social-share/t9n/messages.ro.json +31 -1
  2203. package/dist/cdn/assets/solution-social-share/t9n/messages.ru.json +31 -1
  2204. package/dist/cdn/assets/solution-social-share/t9n/messages.sk.json +31 -1
  2205. package/dist/cdn/assets/solution-social-share/t9n/messages.sl.json +31 -1
  2206. package/dist/cdn/assets/solution-social-share/t9n/messages.sr.json +31 -1
  2207. package/dist/cdn/assets/solution-social-share/t9n/messages.sv.json +31 -1
  2208. package/dist/cdn/assets/solution-social-share/t9n/messages.th.json +31 -1
  2209. package/dist/cdn/assets/solution-social-share/t9n/messages.tr.json +31 -1
  2210. package/dist/cdn/assets/solution-social-share/t9n/messages.uk.json +31 -1
  2211. package/dist/cdn/assets/solution-social-share/t9n/messages.vi.json +31 -1
  2212. package/dist/cdn/assets/solution-social-share/t9n/messages.zh-CN.json +31 -1
  2213. package/dist/cdn/assets/solution-social-share/t9n/messages.zh-HK.json +31 -1
  2214. package/dist/cdn/assets/solution-social-share/t9n/messages.zh-TW.json +31 -1
  2215. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ar.json +5 -1
  2216. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.bg.json +5 -1
  2217. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.bs.json +5 -1
  2218. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ca.json +5 -1
  2219. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.cs.json +5 -1
  2220. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.da.json +5 -1
  2221. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.de.json +5 -1
  2222. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.el.json +5 -1
  2223. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.en.json +5 -1
  2224. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.es.json +5 -1
  2225. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.et.json +5 -1
  2226. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.fi.json +5 -1
  2227. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.fr.json +5 -1
  2228. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.he.json +5 -1
  2229. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.hr.json +5 -1
  2230. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.hu.json +5 -1
  2231. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.id.json +5 -1
  2232. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.it.json +5 -1
  2233. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ja.json +5 -1
  2234. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.json +5 -1
  2235. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ko.json +5 -1
  2236. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.lt.json +5 -1
  2237. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.lv.json +5 -1
  2238. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.nl.json +5 -1
  2239. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.no.json +5 -1
  2240. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.pl.json +5 -1
  2241. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.pt-BR.json +5 -1
  2242. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.pt-PT.json +5 -1
  2243. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ro.json +5 -1
  2244. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.ru.json +5 -1
  2245. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.sk.json +5 -1
  2246. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.sl.json +5 -1
  2247. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.sr.json +5 -1
  2248. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.sv.json +5 -1
  2249. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.th.json +5 -1
  2250. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.tr.json +5 -1
  2251. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.uk.json +5 -1
  2252. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.vi.json +5 -1
  2253. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.zh-CN.json +5 -1
  2254. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.zh-HK.json +5 -1
  2255. package/dist/cdn/assets/solution-spatial-ref/t9n/messages.zh-TW.json +5 -1
  2256. package/dist/cdn/assets/solution-template-data/t9n/messages.ar.json +5 -1
  2257. package/dist/cdn/assets/solution-template-data/t9n/messages.bg.json +5 -1
  2258. package/dist/cdn/assets/solution-template-data/t9n/messages.bs.json +5 -1
  2259. package/dist/cdn/assets/solution-template-data/t9n/messages.ca.json +5 -1
  2260. package/dist/cdn/assets/solution-template-data/t9n/messages.cs.json +5 -1
  2261. package/dist/cdn/assets/solution-template-data/t9n/messages.da.json +5 -1
  2262. package/dist/cdn/assets/solution-template-data/t9n/messages.de.json +5 -1
  2263. package/dist/cdn/assets/solution-template-data/t9n/messages.el.json +5 -1
  2264. package/dist/cdn/assets/solution-template-data/t9n/messages.en.json +5 -1
  2265. package/dist/cdn/assets/solution-template-data/t9n/messages.es.json +5 -1
  2266. package/dist/cdn/assets/solution-template-data/t9n/messages.et.json +5 -1
  2267. package/dist/cdn/assets/solution-template-data/t9n/messages.fi.json +5 -1
  2268. package/dist/cdn/assets/solution-template-data/t9n/messages.fr.json +5 -1
  2269. package/dist/cdn/assets/solution-template-data/t9n/messages.he.json +5 -1
  2270. package/dist/cdn/assets/solution-template-data/t9n/messages.hr.json +5 -1
  2271. package/dist/cdn/assets/solution-template-data/t9n/messages.hu.json +5 -1
  2272. package/dist/cdn/assets/solution-template-data/t9n/messages.id.json +5 -1
  2273. package/dist/cdn/assets/solution-template-data/t9n/messages.it.json +5 -1
  2274. package/dist/cdn/assets/solution-template-data/t9n/messages.ja.json +5 -1
  2275. package/dist/cdn/assets/solution-template-data/t9n/messages.json +5 -1
  2276. package/dist/cdn/assets/solution-template-data/t9n/messages.ko.json +5 -1
  2277. package/dist/cdn/assets/solution-template-data/t9n/messages.lt.json +5 -1
  2278. package/dist/cdn/assets/solution-template-data/t9n/messages.lv.json +5 -1
  2279. package/dist/cdn/assets/solution-template-data/t9n/messages.nl.json +5 -1
  2280. package/dist/cdn/assets/solution-template-data/t9n/messages.no.json +5 -1
  2281. package/dist/cdn/assets/solution-template-data/t9n/messages.pl.json +5 -1
  2282. package/dist/cdn/assets/solution-template-data/t9n/messages.pt-BR.json +5 -1
  2283. package/dist/cdn/assets/solution-template-data/t9n/messages.pt-PT.json +5 -1
  2284. package/dist/cdn/assets/solution-template-data/t9n/messages.ro.json +5 -1
  2285. package/dist/cdn/assets/solution-template-data/t9n/messages.ru.json +5 -1
  2286. package/dist/cdn/assets/solution-template-data/t9n/messages.sk.json +5 -1
  2287. package/dist/cdn/assets/solution-template-data/t9n/messages.sl.json +5 -1
  2288. package/dist/cdn/assets/solution-template-data/t9n/messages.sr.json +5 -1
  2289. package/dist/cdn/assets/solution-template-data/t9n/messages.sv.json +5 -1
  2290. package/dist/cdn/assets/solution-template-data/t9n/messages.th.json +5 -1
  2291. package/dist/cdn/assets/solution-template-data/t9n/messages.tr.json +5 -1
  2292. package/dist/cdn/assets/solution-template-data/t9n/messages.uk.json +5 -1
  2293. package/dist/cdn/assets/solution-template-data/t9n/messages.vi.json +5 -1
  2294. package/dist/cdn/assets/solution-template-data/t9n/messages.zh-CN.json +5 -1
  2295. package/dist/cdn/assets/solution-template-data/t9n/messages.zh-HK.json +5 -1
  2296. package/dist/cdn/assets/solution-template-data/t9n/messages.zh-TW.json +5 -1
  2297. package/dist/cdn/assets/solution-variables/t9n/messages.ar.json +3 -1
  2298. package/dist/cdn/assets/solution-variables/t9n/messages.bg.json +3 -1
  2299. package/dist/cdn/assets/solution-variables/t9n/messages.bs.json +3 -1
  2300. package/dist/cdn/assets/solution-variables/t9n/messages.ca.json +3 -1
  2301. package/dist/cdn/assets/solution-variables/t9n/messages.cs.json +3 -1
  2302. package/dist/cdn/assets/solution-variables/t9n/messages.da.json +3 -1
  2303. package/dist/cdn/assets/solution-variables/t9n/messages.de.json +3 -1
  2304. package/dist/cdn/assets/solution-variables/t9n/messages.el.json +3 -1
  2305. package/dist/cdn/assets/solution-variables/t9n/messages.en.json +3 -1
  2306. package/dist/cdn/assets/solution-variables/t9n/messages.es.json +3 -1
  2307. package/dist/cdn/assets/solution-variables/t9n/messages.et.json +3 -1
  2308. package/dist/cdn/assets/solution-variables/t9n/messages.fi.json +3 -1
  2309. package/dist/cdn/assets/solution-variables/t9n/messages.fr.json +3 -1
  2310. package/dist/cdn/assets/solution-variables/t9n/messages.he.json +3 -1
  2311. package/dist/cdn/assets/solution-variables/t9n/messages.hr.json +3 -1
  2312. package/dist/cdn/assets/solution-variables/t9n/messages.hu.json +3 -1
  2313. package/dist/cdn/assets/solution-variables/t9n/messages.id.json +3 -1
  2314. package/dist/cdn/assets/solution-variables/t9n/messages.it.json +3 -1
  2315. package/dist/cdn/assets/solution-variables/t9n/messages.ja.json +3 -1
  2316. package/dist/cdn/assets/solution-variables/t9n/messages.json +3 -1
  2317. package/dist/cdn/assets/solution-variables/t9n/messages.ko.json +3 -1
  2318. package/dist/cdn/assets/solution-variables/t9n/messages.lt.json +3 -1
  2319. package/dist/cdn/assets/solution-variables/t9n/messages.lv.json +3 -1
  2320. package/dist/cdn/assets/solution-variables/t9n/messages.nl.json +3 -1
  2321. package/dist/cdn/assets/solution-variables/t9n/messages.no.json +3 -1
  2322. package/dist/cdn/assets/solution-variables/t9n/messages.pl.json +3 -1
  2323. package/dist/cdn/assets/solution-variables/t9n/messages.pt-BR.json +3 -1
  2324. package/dist/cdn/assets/solution-variables/t9n/messages.pt-PT.json +3 -1
  2325. package/dist/cdn/assets/solution-variables/t9n/messages.ro.json +3 -1
  2326. package/dist/cdn/assets/solution-variables/t9n/messages.ru.json +3 -1
  2327. package/dist/cdn/assets/solution-variables/t9n/messages.sk.json +3 -1
  2328. package/dist/cdn/assets/solution-variables/t9n/messages.sl.json +3 -1
  2329. package/dist/cdn/assets/solution-variables/t9n/messages.sr.json +3 -1
  2330. package/dist/cdn/assets/solution-variables/t9n/messages.sv.json +3 -1
  2331. package/dist/cdn/assets/solution-variables/t9n/messages.th.json +3 -1
  2332. package/dist/cdn/assets/solution-variables/t9n/messages.tr.json +3 -1
  2333. package/dist/cdn/assets/solution-variables/t9n/messages.uk.json +3 -1
  2334. package/dist/cdn/assets/solution-variables/t9n/messages.vi.json +3 -1
  2335. package/dist/cdn/assets/solution-variables/t9n/messages.zh-CN.json +3 -1
  2336. package/dist/cdn/assets/solution-variables/t9n/messages.zh-HK.json +3 -1
  2337. package/dist/cdn/assets/solution-variables/t9n/messages.zh-TW.json +3 -1
  2338. package/dist/cdn/assets/solutions-all-panel/t9n/messages.ar.json +4 -1
  2339. package/dist/cdn/assets/solutions-all-panel/t9n/messages.bg.json +4 -1
  2340. package/dist/cdn/assets/solutions-all-panel/t9n/messages.bs.json +4 -1
  2341. package/dist/cdn/assets/solutions-all-panel/t9n/messages.ca.json +4 -1
  2342. package/dist/cdn/assets/solutions-all-panel/t9n/messages.cs.json +4 -1
  2343. package/dist/cdn/assets/solutions-all-panel/t9n/messages.da.json +4 -1
  2344. package/dist/cdn/assets/solutions-all-panel/t9n/messages.de.json +4 -1
  2345. package/dist/cdn/assets/solutions-all-panel/t9n/messages.el.json +4 -1
  2346. package/dist/cdn/assets/solutions-all-panel/t9n/messages.en.json +4 -1
  2347. package/dist/cdn/assets/solutions-all-panel/t9n/messages.es.json +4 -1
  2348. package/dist/cdn/assets/solutions-all-panel/t9n/messages.et.json +4 -1
  2349. package/dist/cdn/assets/solutions-all-panel/t9n/messages.fi.json +4 -1
  2350. package/dist/cdn/assets/solutions-all-panel/t9n/messages.fr.json +4 -1
  2351. package/dist/cdn/assets/solutions-all-panel/t9n/messages.he.json +4 -1
  2352. package/dist/cdn/assets/solutions-all-panel/t9n/messages.hr.json +4 -1
  2353. package/dist/cdn/assets/solutions-all-panel/t9n/messages.hu.json +4 -1
  2354. package/dist/cdn/assets/solutions-all-panel/t9n/messages.id.json +4 -1
  2355. package/dist/cdn/assets/solutions-all-panel/t9n/messages.it.json +4 -1
  2356. package/dist/cdn/assets/solutions-all-panel/t9n/messages.ja.json +4 -1
  2357. package/dist/cdn/assets/solutions-all-panel/t9n/messages.json +4 -1
  2358. package/dist/cdn/assets/solutions-all-panel/t9n/messages.ko.json +4 -1
  2359. package/dist/cdn/assets/solutions-all-panel/t9n/messages.lt.json +4 -1
  2360. package/dist/cdn/assets/solutions-all-panel/t9n/messages.lv.json +4 -1
  2361. package/dist/cdn/assets/solutions-all-panel/t9n/messages.nl.json +4 -1
  2362. package/dist/cdn/assets/solutions-all-panel/t9n/messages.no.json +4 -1
  2363. package/dist/cdn/assets/solutions-all-panel/t9n/messages.pl.json +4 -1
  2364. package/dist/cdn/assets/solutions-all-panel/t9n/messages.pt-BR.json +4 -1
  2365. package/dist/cdn/assets/solutions-all-panel/t9n/messages.pt-PT.json +4 -1
  2366. package/dist/cdn/assets/solutions-all-panel/t9n/messages.ro.json +4 -1
  2367. package/dist/cdn/assets/solutions-all-panel/t9n/messages.ru.json +4 -1
  2368. package/dist/cdn/assets/solutions-all-panel/t9n/messages.sk.json +4 -1
  2369. package/dist/cdn/assets/solutions-all-panel/t9n/messages.sl.json +4 -1
  2370. package/dist/cdn/assets/solutions-all-panel/t9n/messages.sr.json +4 -1
  2371. package/dist/cdn/assets/solutions-all-panel/t9n/messages.sv.json +4 -1
  2372. package/dist/cdn/assets/solutions-all-panel/t9n/messages.th.json +4 -1
  2373. package/dist/cdn/assets/solutions-all-panel/t9n/messages.tr.json +4 -1
  2374. package/dist/cdn/assets/solutions-all-panel/t9n/messages.uk.json +4 -1
  2375. package/dist/cdn/assets/solutions-all-panel/t9n/messages.vi.json +4 -1
  2376. package/dist/cdn/assets/solutions-all-panel/t9n/messages.zh-CN.json +4 -1
  2377. package/dist/cdn/assets/solutions-all-panel/t9n/messages.zh-HK.json +4 -1
  2378. package/dist/cdn/assets/solutions-all-panel/t9n/messages.zh-TW.json +4 -1
  2379. package/dist/cdn/assets/solutions-all-shell/t9n/messages.ar.json +9 -1
  2380. package/dist/cdn/assets/solutions-all-shell/t9n/messages.bg.json +9 -1
  2381. package/dist/cdn/assets/solutions-all-shell/t9n/messages.bs.json +9 -1
  2382. package/dist/cdn/assets/solutions-all-shell/t9n/messages.ca.json +9 -1
  2383. package/dist/cdn/assets/solutions-all-shell/t9n/messages.cs.json +9 -1
  2384. package/dist/cdn/assets/solutions-all-shell/t9n/messages.da.json +9 -1
  2385. package/dist/cdn/assets/solutions-all-shell/t9n/messages.de.json +9 -1
  2386. package/dist/cdn/assets/solutions-all-shell/t9n/messages.el.json +9 -1
  2387. package/dist/cdn/assets/solutions-all-shell/t9n/messages.en.json +9 -1
  2388. package/dist/cdn/assets/solutions-all-shell/t9n/messages.es.json +9 -1
  2389. package/dist/cdn/assets/solutions-all-shell/t9n/messages.et.json +9 -1
  2390. package/dist/cdn/assets/solutions-all-shell/t9n/messages.fi.json +9 -1
  2391. package/dist/cdn/assets/solutions-all-shell/t9n/messages.fr.json +9 -1
  2392. package/dist/cdn/assets/solutions-all-shell/t9n/messages.he.json +9 -1
  2393. package/dist/cdn/assets/solutions-all-shell/t9n/messages.hr.json +9 -1
  2394. package/dist/cdn/assets/solutions-all-shell/t9n/messages.hu.json +9 -1
  2395. package/dist/cdn/assets/solutions-all-shell/t9n/messages.id.json +9 -1
  2396. package/dist/cdn/assets/solutions-all-shell/t9n/messages.it.json +9 -1
  2397. package/dist/cdn/assets/solutions-all-shell/t9n/messages.ja.json +9 -1
  2398. package/dist/cdn/assets/solutions-all-shell/t9n/messages.json +9 -1
  2399. package/dist/cdn/assets/solutions-all-shell/t9n/messages.ko.json +9 -1
  2400. package/dist/cdn/assets/solutions-all-shell/t9n/messages.lt.json +9 -1
  2401. package/dist/cdn/assets/solutions-all-shell/t9n/messages.lv.json +9 -1
  2402. package/dist/cdn/assets/solutions-all-shell/t9n/messages.nl.json +9 -1
  2403. package/dist/cdn/assets/solutions-all-shell/t9n/messages.no.json +9 -1
  2404. package/dist/cdn/assets/solutions-all-shell/t9n/messages.pl.json +9 -1
  2405. package/dist/cdn/assets/solutions-all-shell/t9n/messages.pt-BR.json +9 -1
  2406. package/dist/cdn/assets/solutions-all-shell/t9n/messages.pt-PT.json +9 -1
  2407. package/dist/cdn/assets/solutions-all-shell/t9n/messages.ro.json +9 -1
  2408. package/dist/cdn/assets/solutions-all-shell/t9n/messages.ru.json +9 -1
  2409. package/dist/cdn/assets/solutions-all-shell/t9n/messages.sk.json +9 -1
  2410. package/dist/cdn/assets/solutions-all-shell/t9n/messages.sl.json +9 -1
  2411. package/dist/cdn/assets/solutions-all-shell/t9n/messages.sr.json +9 -1
  2412. package/dist/cdn/assets/solutions-all-shell/t9n/messages.sv.json +9 -1
  2413. package/dist/cdn/assets/solutions-all-shell/t9n/messages.th.json +9 -1
  2414. package/dist/cdn/assets/solutions-all-shell/t9n/messages.tr.json +9 -1
  2415. package/dist/cdn/assets/solutions-all-shell/t9n/messages.uk.json +9 -1
  2416. package/dist/cdn/assets/solutions-all-shell/t9n/messages.vi.json +9 -1
  2417. package/dist/cdn/assets/solutions-all-shell/t9n/messages.zh-CN.json +9 -1
  2418. package/dist/cdn/assets/solutions-all-shell/t9n/messages.zh-HK.json +9 -1
  2419. package/dist/cdn/assets/solutions-all-shell/t9n/messages.zh-TW.json +9 -1
  2420. package/dist/cdn/assets/solutions-article-panel/t9n/messages.ar.json +3 -1
  2421. package/dist/cdn/assets/solutions-article-panel/t9n/messages.bg.json +3 -1
  2422. package/dist/cdn/assets/solutions-article-panel/t9n/messages.bs.json +3 -1
  2423. package/dist/cdn/assets/solutions-article-panel/t9n/messages.ca.json +3 -1
  2424. package/dist/cdn/assets/solutions-article-panel/t9n/messages.cs.json +3 -1
  2425. package/dist/cdn/assets/solutions-article-panel/t9n/messages.da.json +3 -1
  2426. package/dist/cdn/assets/solutions-article-panel/t9n/messages.de.json +3 -1
  2427. package/dist/cdn/assets/solutions-article-panel/t9n/messages.el.json +3 -1
  2428. package/dist/cdn/assets/solutions-article-panel/t9n/messages.en.json +3 -1
  2429. package/dist/cdn/assets/solutions-article-panel/t9n/messages.es.json +3 -1
  2430. package/dist/cdn/assets/solutions-article-panel/t9n/messages.et.json +3 -1
  2431. package/dist/cdn/assets/solutions-article-panel/t9n/messages.fi.json +3 -1
  2432. package/dist/cdn/assets/solutions-article-panel/t9n/messages.fr.json +3 -1
  2433. package/dist/cdn/assets/solutions-article-panel/t9n/messages.he.json +3 -1
  2434. package/dist/cdn/assets/solutions-article-panel/t9n/messages.hr.json +3 -1
  2435. package/dist/cdn/assets/solutions-article-panel/t9n/messages.hu.json +3 -1
  2436. package/dist/cdn/assets/solutions-article-panel/t9n/messages.id.json +3 -1
  2437. package/dist/cdn/assets/solutions-article-panel/t9n/messages.it.json +3 -1
  2438. package/dist/cdn/assets/solutions-article-panel/t9n/messages.ja.json +3 -1
  2439. package/dist/cdn/assets/solutions-article-panel/t9n/messages.json +3 -1
  2440. package/dist/cdn/assets/solutions-article-panel/t9n/messages.ko.json +3 -1
  2441. package/dist/cdn/assets/solutions-article-panel/t9n/messages.lt.json +3 -1
  2442. package/dist/cdn/assets/solutions-article-panel/t9n/messages.lv.json +3 -1
  2443. package/dist/cdn/assets/solutions-article-panel/t9n/messages.nl.json +3 -1
  2444. package/dist/cdn/assets/solutions-article-panel/t9n/messages.no.json +3 -1
  2445. package/dist/cdn/assets/solutions-article-panel/t9n/messages.pl.json +3 -1
  2446. package/dist/cdn/assets/solutions-article-panel/t9n/messages.pt-BR.json +3 -1
  2447. package/dist/cdn/assets/solutions-article-panel/t9n/messages.pt-PT.json +3 -1
  2448. package/dist/cdn/assets/solutions-article-panel/t9n/messages.ro.json +3 -1
  2449. package/dist/cdn/assets/solutions-article-panel/t9n/messages.ru.json +3 -1
  2450. package/dist/cdn/assets/solutions-article-panel/t9n/messages.sk.json +3 -1
  2451. package/dist/cdn/assets/solutions-article-panel/t9n/messages.sl.json +3 -1
  2452. package/dist/cdn/assets/solutions-article-panel/t9n/messages.sr.json +3 -1
  2453. package/dist/cdn/assets/solutions-article-panel/t9n/messages.sv.json +3 -1
  2454. package/dist/cdn/assets/solutions-article-panel/t9n/messages.th.json +3 -1
  2455. package/dist/cdn/assets/solutions-article-panel/t9n/messages.tr.json +3 -1
  2456. package/dist/cdn/assets/solutions-article-panel/t9n/messages.uk.json +3 -1
  2457. package/dist/cdn/assets/solutions-article-panel/t9n/messages.vi.json +3 -1
  2458. package/dist/cdn/assets/solutions-article-panel/t9n/messages.zh-CN.json +3 -1
  2459. package/dist/cdn/assets/solutions-article-panel/t9n/messages.zh-HK.json +3 -1
  2460. package/dist/cdn/assets/solutions-article-panel/t9n/messages.zh-TW.json +3 -1
  2461. package/dist/cdn/assets/solutions-articles/t9n/messages.ar.json +5 -1
  2462. package/dist/cdn/assets/solutions-articles/t9n/messages.bg.json +5 -1
  2463. package/dist/cdn/assets/solutions-articles/t9n/messages.bs.json +5 -1
  2464. package/dist/cdn/assets/solutions-articles/t9n/messages.ca.json +5 -1
  2465. package/dist/cdn/assets/solutions-articles/t9n/messages.cs.json +5 -1
  2466. package/dist/cdn/assets/solutions-articles/t9n/messages.da.json +5 -1
  2467. package/dist/cdn/assets/solutions-articles/t9n/messages.de.json +5 -1
  2468. package/dist/cdn/assets/solutions-articles/t9n/messages.el.json +5 -1
  2469. package/dist/cdn/assets/solutions-articles/t9n/messages.en.json +5 -1
  2470. package/dist/cdn/assets/solutions-articles/t9n/messages.es.json +5 -1
  2471. package/dist/cdn/assets/solutions-articles/t9n/messages.et.json +5 -1
  2472. package/dist/cdn/assets/solutions-articles/t9n/messages.fi.json +5 -1
  2473. package/dist/cdn/assets/solutions-articles/t9n/messages.fr.json +5 -1
  2474. package/dist/cdn/assets/solutions-articles/t9n/messages.he.json +5 -1
  2475. package/dist/cdn/assets/solutions-articles/t9n/messages.hr.json +5 -1
  2476. package/dist/cdn/assets/solutions-articles/t9n/messages.hu.json +5 -1
  2477. package/dist/cdn/assets/solutions-articles/t9n/messages.id.json +5 -1
  2478. package/dist/cdn/assets/solutions-articles/t9n/messages.it.json +5 -1
  2479. package/dist/cdn/assets/solutions-articles/t9n/messages.ja.json +5 -1
  2480. package/dist/cdn/assets/solutions-articles/t9n/messages.json +5 -1
  2481. package/dist/cdn/assets/solutions-articles/t9n/messages.ko.json +5 -1
  2482. package/dist/cdn/assets/solutions-articles/t9n/messages.lt.json +5 -1
  2483. package/dist/cdn/assets/solutions-articles/t9n/messages.lv.json +5 -1
  2484. package/dist/cdn/assets/solutions-articles/t9n/messages.nl.json +5 -1
  2485. package/dist/cdn/assets/solutions-articles/t9n/messages.no.json +5 -1
  2486. package/dist/cdn/assets/solutions-articles/t9n/messages.pl.json +5 -1
  2487. package/dist/cdn/assets/solutions-articles/t9n/messages.pt-BR.json +5 -1
  2488. package/dist/cdn/assets/solutions-articles/t9n/messages.pt-PT.json +5 -1
  2489. package/dist/cdn/assets/solutions-articles/t9n/messages.ro.json +5 -1
  2490. package/dist/cdn/assets/solutions-articles/t9n/messages.ru.json +5 -1
  2491. package/dist/cdn/assets/solutions-articles/t9n/messages.sk.json +5 -1
  2492. package/dist/cdn/assets/solutions-articles/t9n/messages.sl.json +5 -1
  2493. package/dist/cdn/assets/solutions-articles/t9n/messages.sr.json +5 -1
  2494. package/dist/cdn/assets/solutions-articles/t9n/messages.sv.json +5 -1
  2495. package/dist/cdn/assets/solutions-articles/t9n/messages.th.json +5 -1
  2496. package/dist/cdn/assets/solutions-articles/t9n/messages.tr.json +5 -1
  2497. package/dist/cdn/assets/solutions-articles/t9n/messages.uk.json +5 -1
  2498. package/dist/cdn/assets/solutions-articles/t9n/messages.vi.json +5 -1
  2499. package/dist/cdn/assets/solutions-articles/t9n/messages.zh-CN.json +5 -1
  2500. package/dist/cdn/assets/solutions-articles/t9n/messages.zh-HK.json +5 -1
  2501. package/dist/cdn/assets/solutions-articles/t9n/messages.zh-TW.json +5 -1
  2502. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ar.json +3 -1
  2503. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.bg.json +3 -1
  2504. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.bs.json +3 -1
  2505. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ca.json +3 -1
  2506. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.cs.json +3 -1
  2507. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.da.json +3 -1
  2508. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.de.json +3 -1
  2509. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.el.json +3 -1
  2510. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.en.json +3 -1
  2511. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.es.json +3 -1
  2512. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.et.json +3 -1
  2513. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.fi.json +3 -1
  2514. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.fr.json +3 -1
  2515. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.he.json +3 -1
  2516. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.hr.json +3 -1
  2517. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.hu.json +3 -1
  2518. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.id.json +3 -1
  2519. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.it.json +3 -1
  2520. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ja.json +3 -1
  2521. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.json +3 -1
  2522. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ko.json +3 -1
  2523. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.lt.json +3 -1
  2524. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.lv.json +3 -1
  2525. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.nl.json +3 -1
  2526. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.no.json +3 -1
  2527. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.pl.json +3 -1
  2528. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.pt-BR.json +3 -1
  2529. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.pt-PT.json +3 -1
  2530. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ro.json +3 -1
  2531. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.ru.json +3 -1
  2532. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.sk.json +3 -1
  2533. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.sl.json +3 -1
  2534. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.sr.json +3 -1
  2535. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.sv.json +3 -1
  2536. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.th.json +3 -1
  2537. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.tr.json +3 -1
  2538. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.uk.json +3 -1
  2539. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.vi.json +3 -1
  2540. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.zh-CN.json +3 -1
  2541. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.zh-HK.json +3 -1
  2542. package/dist/cdn/assets/solutions-articles-shell/t9n/messages.zh-TW.json +3 -1
  2543. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ar.json +6 -1
  2544. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.bg.json +6 -1
  2545. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.bs.json +6 -1
  2546. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ca.json +6 -1
  2547. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.cs.json +6 -1
  2548. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.da.json +6 -1
  2549. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.de.json +6 -1
  2550. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.el.json +6 -1
  2551. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.en.json +6 -1
  2552. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.es.json +6 -1
  2553. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.et.json +6 -1
  2554. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.fi.json +6 -1
  2555. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.fr.json +6 -1
  2556. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.he.json +6 -1
  2557. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.hr.json +6 -1
  2558. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.hu.json +6 -1
  2559. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.id.json +6 -1
  2560. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.it.json +6 -1
  2561. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ja.json +6 -1
  2562. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.json +6 -1
  2563. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ko.json +6 -1
  2564. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.lt.json +6 -1
  2565. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.lv.json +6 -1
  2566. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.nl.json +6 -1
  2567. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.no.json +6 -1
  2568. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.pl.json +6 -1
  2569. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.pt-BR.json +6 -1
  2570. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.pt-PT.json +6 -1
  2571. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ro.json +6 -1
  2572. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.ru.json +6 -1
  2573. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.sk.json +6 -1
  2574. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.sl.json +6 -1
  2575. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.sr.json +6 -1
  2576. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.sv.json +6 -1
  2577. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.th.json +6 -1
  2578. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.tr.json +6 -1
  2579. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.uk.json +6 -1
  2580. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.vi.json +6 -1
  2581. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.zh-CN.json +6 -1
  2582. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.zh-HK.json +6 -1
  2583. package/dist/cdn/assets/solutions-deploy-app/t9n/messages.zh-TW.json +6 -1
  2584. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ar.json +8 -1
  2585. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.bg.json +8 -1
  2586. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.bs.json +8 -1
  2587. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ca.json +8 -1
  2588. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.cs.json +8 -1
  2589. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.da.json +8 -1
  2590. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.de.json +8 -1
  2591. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.el.json +8 -1
  2592. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.en.json +8 -1
  2593. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.es.json +8 -1
  2594. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.et.json +8 -1
  2595. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.fi.json +8 -1
  2596. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.fr.json +8 -1
  2597. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.he.json +8 -1
  2598. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.hr.json +8 -1
  2599. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.hu.json +8 -1
  2600. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.id.json +8 -1
  2601. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.it.json +8 -1
  2602. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ja.json +8 -1
  2603. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.json +8 -1
  2604. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ko.json +8 -1
  2605. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.lt.json +8 -1
  2606. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.lv.json +8 -1
  2607. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.nl.json +8 -1
  2608. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.no.json +8 -1
  2609. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.pl.json +8 -1
  2610. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.pt-BR.json +8 -1
  2611. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.pt-PT.json +8 -1
  2612. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ro.json +8 -1
  2613. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.ru.json +8 -1
  2614. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.sk.json +8 -1
  2615. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.sl.json +8 -1
  2616. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.sr.json +8 -1
  2617. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.sv.json +8 -1
  2618. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.th.json +8 -1
  2619. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.tr.json +8 -1
  2620. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.uk.json +8 -1
  2621. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.vi.json +8 -1
  2622. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.zh-CN.json +8 -1
  2623. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.zh-HK.json +8 -1
  2624. package/dist/cdn/assets/solutions-deployed-filter-panel/t9n/messages.zh-TW.json +8 -1
  2625. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ar.json +7 -1
  2626. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.bg.json +7 -1
  2627. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.bs.json +7 -1
  2628. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ca.json +7 -1
  2629. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.cs.json +7 -1
  2630. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.da.json +7 -1
  2631. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.de.json +7 -1
  2632. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.el.json +7 -1
  2633. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.en.json +7 -1
  2634. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.es.json +7 -1
  2635. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.et.json +7 -1
  2636. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.fi.json +7 -1
  2637. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.fr.json +7 -1
  2638. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.he.json +7 -1
  2639. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.hr.json +7 -1
  2640. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.hu.json +7 -1
  2641. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.id.json +7 -1
  2642. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.it.json +7 -1
  2643. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ja.json +7 -1
  2644. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.json +7 -1
  2645. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ko.json +7 -1
  2646. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.lt.json +7 -1
  2647. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.lv.json +7 -1
  2648. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.nl.json +7 -1
  2649. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.no.json +7 -1
  2650. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.pl.json +7 -1
  2651. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.pt-BR.json +7 -1
  2652. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.pt-PT.json +7 -1
  2653. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ro.json +7 -1
  2654. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.ru.json +7 -1
  2655. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.sk.json +7 -1
  2656. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.sl.json +7 -1
  2657. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.sr.json +7 -1
  2658. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.sv.json +7 -1
  2659. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.th.json +7 -1
  2660. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.tr.json +7 -1
  2661. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.uk.json +7 -1
  2662. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.vi.json +7 -1
  2663. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.zh-CN.json +7 -1
  2664. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.zh-HK.json +7 -1
  2665. package/dist/cdn/assets/solutions-deployed-panel/t9n/messages.zh-TW.json +7 -1
  2666. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ar.json +7 -1
  2667. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.bg.json +7 -1
  2668. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.bs.json +7 -1
  2669. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ca.json +7 -1
  2670. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.cs.json +7 -1
  2671. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.da.json +7 -1
  2672. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.de.json +7 -1
  2673. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.el.json +7 -1
  2674. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.en.json +7 -1
  2675. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.es.json +7 -1
  2676. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.et.json +7 -1
  2677. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.fi.json +7 -1
  2678. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.fr.json +7 -1
  2679. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.he.json +7 -1
  2680. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.hr.json +7 -1
  2681. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.hu.json +7 -1
  2682. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.id.json +7 -1
  2683. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.it.json +7 -1
  2684. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ja.json +7 -1
  2685. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.json +7 -1
  2686. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ko.json +7 -1
  2687. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.lt.json +7 -1
  2688. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.lv.json +7 -1
  2689. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.nl.json +7 -1
  2690. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.no.json +7 -1
  2691. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.pl.json +7 -1
  2692. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.pt-BR.json +7 -1
  2693. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.pt-PT.json +7 -1
  2694. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ro.json +7 -1
  2695. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.ru.json +7 -1
  2696. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.sk.json +7 -1
  2697. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.sl.json +7 -1
  2698. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.sr.json +7 -1
  2699. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.sv.json +7 -1
  2700. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.th.json +7 -1
  2701. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.tr.json +7 -1
  2702. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.uk.json +7 -1
  2703. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.vi.json +7 -1
  2704. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.zh-CN.json +7 -1
  2705. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.zh-HK.json +7 -1
  2706. package/dist/cdn/assets/solutions-deployed-shell/t9n/messages.zh-TW.json +7 -1
  2707. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ar.json +49 -1
  2708. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.bg.json +49 -1
  2709. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.bs.json +49 -1
  2710. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ca.json +49 -1
  2711. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.cs.json +49 -1
  2712. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.da.json +49 -1
  2713. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.de.json +49 -1
  2714. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.el.json +49 -1
  2715. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.en.json +49 -1
  2716. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.es.json +49 -1
  2717. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.et.json +49 -1
  2718. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.fi.json +49 -1
  2719. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.fr.json +49 -1
  2720. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.he.json +49 -1
  2721. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.hr.json +49 -1
  2722. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.hu.json +49 -1
  2723. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.id.json +49 -1
  2724. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.it.json +49 -1
  2725. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ja.json +49 -1
  2726. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.json +49 -1
  2727. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ko.json +49 -1
  2728. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.lt.json +49 -1
  2729. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.lv.json +49 -1
  2730. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.nl.json +49 -1
  2731. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.no.json +49 -1
  2732. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.pl.json +49 -1
  2733. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.pt-BR.json +49 -1
  2734. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.pt-PT.json +49 -1
  2735. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ro.json +49 -1
  2736. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.ru.json +49 -1
  2737. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.sk.json +49 -1
  2738. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.sl.json +49 -1
  2739. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.sr.json +49 -1
  2740. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.sv.json +49 -1
  2741. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.th.json +49 -1
  2742. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.tr.json +49 -1
  2743. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.uk.json +49 -1
  2744. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.vi.json +49 -1
  2745. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.zh-CN.json +49 -1
  2746. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.zh-HK.json +49 -1
  2747. package/dist/cdn/assets/solutions-filter-panel/t9n/messages.zh-TW.json +49 -1
  2748. package/dist/cdn/assets/spatial-ref/t9n/messages.ar.json +3 -1
  2749. package/dist/cdn/assets/spatial-ref/t9n/messages.bg.json +3 -1
  2750. package/dist/cdn/assets/spatial-ref/t9n/messages.bs.json +3 -1
  2751. package/dist/cdn/assets/spatial-ref/t9n/messages.ca.json +3 -1
  2752. package/dist/cdn/assets/spatial-ref/t9n/messages.cs.json +3 -1
  2753. package/dist/cdn/assets/spatial-ref/t9n/messages.da.json +3 -1
  2754. package/dist/cdn/assets/spatial-ref/t9n/messages.de.json +3 -1
  2755. package/dist/cdn/assets/spatial-ref/t9n/messages.el.json +3 -1
  2756. package/dist/cdn/assets/spatial-ref/t9n/messages.en.json +3 -1
  2757. package/dist/cdn/assets/spatial-ref/t9n/messages.es.json +3 -1
  2758. package/dist/cdn/assets/spatial-ref/t9n/messages.et.json +3 -1
  2759. package/dist/cdn/assets/spatial-ref/t9n/messages.fi.json +3 -1
  2760. package/dist/cdn/assets/spatial-ref/t9n/messages.fr.json +3 -1
  2761. package/dist/cdn/assets/spatial-ref/t9n/messages.he.json +3 -1
  2762. package/dist/cdn/assets/spatial-ref/t9n/messages.hr.json +3 -1
  2763. package/dist/cdn/assets/spatial-ref/t9n/messages.hu.json +3 -1
  2764. package/dist/cdn/assets/spatial-ref/t9n/messages.id.json +3 -1
  2765. package/dist/cdn/assets/spatial-ref/t9n/messages.it.json +3 -1
  2766. package/dist/cdn/assets/spatial-ref/t9n/messages.ja.json +3 -1
  2767. package/dist/cdn/assets/spatial-ref/t9n/messages.json +3 -1
  2768. package/dist/cdn/assets/spatial-ref/t9n/messages.ko.json +3 -1
  2769. package/dist/cdn/assets/spatial-ref/t9n/messages.lt.json +3 -1
  2770. package/dist/cdn/assets/spatial-ref/t9n/messages.lv.json +3 -1
  2771. package/dist/cdn/assets/spatial-ref/t9n/messages.nl.json +3 -1
  2772. package/dist/cdn/assets/spatial-ref/t9n/messages.no.json +3 -1
  2773. package/dist/cdn/assets/spatial-ref/t9n/messages.pl.json +3 -1
  2774. package/dist/cdn/assets/spatial-ref/t9n/messages.pt-BR.json +3 -1
  2775. package/dist/cdn/assets/spatial-ref/t9n/messages.pt-PT.json +3 -1
  2776. package/dist/cdn/assets/spatial-ref/t9n/messages.ro.json +3 -1
  2777. package/dist/cdn/assets/spatial-ref/t9n/messages.ru.json +3 -1
  2778. package/dist/cdn/assets/spatial-ref/t9n/messages.sk.json +3 -1
  2779. package/dist/cdn/assets/spatial-ref/t9n/messages.sl.json +3 -1
  2780. package/dist/cdn/assets/spatial-ref/t9n/messages.sr.json +3 -1
  2781. package/dist/cdn/assets/spatial-ref/t9n/messages.sv.json +3 -1
  2782. package/dist/cdn/assets/spatial-ref/t9n/messages.th.json +3 -1
  2783. package/dist/cdn/assets/spatial-ref/t9n/messages.tr.json +3 -1
  2784. package/dist/cdn/assets/spatial-ref/t9n/messages.uk.json +3 -1
  2785. package/dist/cdn/assets/spatial-ref/t9n/messages.vi.json +3 -1
  2786. package/dist/cdn/assets/spatial-ref/t9n/messages.zh-CN.json +3 -1
  2787. package/dist/cdn/assets/spatial-ref/t9n/messages.zh-HK.json +3 -1
  2788. package/dist/cdn/assets/spatial-ref/t9n/messages.zh-TW.json +3 -1
  2789. package/dist/cdn/index.js +2 -2
  2790. package/dist/chunks/Auth.js +2 -1
  2791. package/dist/chunks/CardsFetcher.js +2 -1
  2792. package/dist/chunks/appConfig.js +2 -1
  2793. package/dist/chunks/cardFetchingUtils.js +6 -5
  2794. package/dist/chunks/cardsHelpers.js +2 -1
  2795. package/dist/chunks/common.js +2 -1
  2796. package/dist/chunks/deployAppContexts.js +2 -1
  2797. package/dist/chunks/downloadUtils.js +2 -1
  2798. package/dist/chunks/getItemIcon.js +2 -1
  2799. package/dist/chunks/helpers.js +13 -12
  2800. package/dist/chunks/interfaces.js +44 -39
  2801. package/dist/chunks/loadModules.js +2 -1
  2802. package/dist/chunks/mapViewUtils.js +7 -6
  2803. package/dist/chunks/pciUtils.js +2 -1
  2804. package/dist/chunks/popupUtils.js +2 -1
  2805. package/dist/chunks/prepareDataForSolutionDisplay.js +2 -1
  2806. package/dist/chunks/privilegeUtils.js +11 -10
  2807. package/dist/chunks/publicNotificationContext.js +2 -1
  2808. package/dist/chunks/queryUtils.js +2 -1
  2809. package/dist/chunks/runtime.js +2 -1
  2810. package/dist/chunks/solution-store.js +3 -2
  2811. package/dist/chunks/templates.js +2 -1
  2812. package/dist/chunks/useT9n.js +2 -1
  2813. package/dist/components/arcgis-solutions-assistant/customElement.js +2 -1
  2814. package/dist/components/basemap-gallery/customElement.js +2 -1
  2815. package/dist/components/buffer-tools/customElement.js +2 -1
  2816. package/dist/components/card-manager/customElement.js +2 -1
  2817. package/dist/components/consent-manager/customElement.js +2 -1
  2818. package/dist/components/create-feature/customElement.js +2 -1
  2819. package/dist/components/create-related-feature/customElement.js +2 -1
  2820. package/dist/components/crowdsource-manager/customElement.js +3 -2
  2821. package/dist/components/crowdsource-reporter/customElement.js +2 -1
  2822. package/dist/components/deduct-calculator/customElement.js +2 -1
  2823. package/dist/components/delete-button/customElement.js +2 -1
  2824. package/dist/components/delete-dialog/customElement.js +2 -1
  2825. package/dist/components/edit-card/customElement.js +2 -1
  2826. package/dist/components/feature-details/customElement.js +2 -1
  2827. package/dist/components/feature-list/customElement.js +2 -1
  2828. package/dist/components/field-selection/customElement.js +2 -1
  2829. package/dist/components/floor-filter/customElement.js +2 -1
  2830. package/dist/components/info-card/customElement.js +2 -1
  2831. package/dist/components/json-editor/customElement.js +2 -1
  2832. package/dist/components/layer-list/customElement.js +2 -1
  2833. package/dist/components/layer-table/customElement.js +3 -2
  2834. package/dist/components/map-card/customElement.js +3 -2
  2835. package/dist/components/map-draw-tools/customElement.js +3 -2
  2836. package/dist/components/map-fullscreen/customElement.js +2 -1
  2837. package/dist/components/map-layer-picker/customElement.js +2 -1
  2838. package/dist/components/map-legend/customElement.js +2 -1
  2839. package/dist/components/map-picker/customElement.js +2 -1
  2840. package/dist/components/map-search/customElement.js +2 -1
  2841. package/dist/components/map-select-tools/customElement.js +3 -2
  2842. package/dist/components/map-tools/customElement.js +2 -1
  2843. package/dist/components/pci-calculator/customElement.js +2 -1
  2844. package/dist/components/pdf-download/customElement.js +2 -1
  2845. package/dist/components/public-notification/customElement.js +3 -2
  2846. package/dist/components/refine-selection/customElement.js +3 -2
  2847. package/dist/components/selection-tool/customElement.js +2 -1
  2848. package/dist/components/solution-article-card/customElement.js +2 -1
  2849. package/dist/components/solution-configuration/customElement.js +2 -1
  2850. package/dist/components/solution-configure-dialog/customElement.js +2 -1
  2851. package/dist/components/solution-configure-titles/customElement.js +3 -2
  2852. package/dist/components/solution-contents/customElement.js +2 -1
  2853. package/dist/components/solution-delete-dialog/customElement.js +2 -1
  2854. package/dist/components/solution-deploy-dialog/customElement.js +2 -1
  2855. package/dist/components/solution-deployed-card/customElement.js +2 -1
  2856. package/dist/components/solution-deploying-dialog/customElement.js +2 -1
  2857. package/dist/components/solution-details-card/customElement.js +2 -1
  2858. package/dist/components/solution-details-panel/customElement.js +2 -1
  2859. package/dist/components/solution-item/customElement.js +2 -1
  2860. package/dist/components/solution-item-accordion/customElement.js +2 -1
  2861. package/dist/components/solution-item-details/customElement.js +2 -1
  2862. package/dist/components/solution-item-diagram/customElement.js +2 -1
  2863. package/dist/components/solution-item-icon/customElement.js +2 -1
  2864. package/dist/components/solution-item-sharing/customElement.js +2 -1
  2865. package/dist/components/solution-organization-variables/customElement.js +2 -1
  2866. package/dist/components/solution-resource-item/customElement.js +3 -2
  2867. package/dist/components/solution-snapshot-gallery/customElement.js +2 -1
  2868. package/dist/components/solution-social-share/customElement.js +2 -1
  2869. package/dist/components/solution-spatial-ref/customElement.js +15 -14
  2870. package/dist/components/solution-template-data/customElement.js +2 -1
  2871. package/dist/components/solution-variables/customElement.js +2 -1
  2872. package/dist/components/solutions-all-panel/customElement.js +3 -2
  2873. package/dist/components/solutions-all-shell/customElement.js +3 -6
  2874. package/dist/components/solutions-article-panel/customElement.js +2 -1
  2875. package/dist/components/solutions-articles/customElement.js +2 -1
  2876. package/dist/components/solutions-articles-shell/customElement.js +2 -1
  2877. package/dist/components/solutions-deploy-app/customElement.d.ts +2 -2
  2878. package/dist/components/solutions-deploy-app/customElement.js +8 -7
  2879. package/dist/components/solutions-deployed-filter-panel/customElement.js +3 -2
  2880. package/dist/components/solutions-deployed-panel/customElement.js +3 -2
  2881. package/dist/components/solutions-deployed-shell/customElement.js +6 -9
  2882. package/dist/components/solutions-filter-panel/customElement.js +3 -2
  2883. package/dist/components/spatial-ref/customElement.js +2 -1
  2884. package/dist/components/store-manager/customElement.js +2 -1
  2885. package/dist/docs/api.json +149 -182
  2886. package/dist/docs/docs.json +71 -91
  2887. package/dist/docs/vscode.html-custom-data.json +8 -8
  2888. package/dist/docs/web-types.json +75 -75
  2889. package/dist/index.d.ts +1 -0
  2890. package/dist/index.js +46 -6
  2891. package/dist/loader.js +2 -1
  2892. package/package.json +2 -2
  2893. package/dist/cdn/36MS2BZS.js +0 -18
  2894. package/dist/cdn/47SUOA55.js +0 -4
  2895. package/dist/cdn/52XH6FLN.js +0 -4
  2896. package/dist/cdn/AHZDNIWQ.js +0 -18
  2897. package/dist/cdn/DOB53IGQ.js +0 -5
  2898. package/dist/cdn/DV45UYZJ.js +0 -4
  2899. package/dist/cdn/J5RRCLIS.js +0 -4
  2900. package/dist/cdn/KWD4A5RO.js +0 -4
  2901. package/dist/cdn/MUYPLA6D.js +0 -4
  2902. package/dist/cdn/NHMXO6EQ.js +0 -4
  2903. package/dist/cdn/OXHHVSZR.js +0 -4
  2904. package/dist/cdn/PHZ4ZQM2.js +0 -4
  2905. package/dist/cdn/WQPG2JQH.js +0 -4
@@ -5,7 +5,7 @@ import { LitElement as y, nothing as p, safeStyleMap as a, safeClassMap as k } f
5
5
  import { createRef as r, ref as c } from "lit-html/directives/ref.js";
6
6
  /*! All material copyright Esri, All Rights Reserved, unless otherwise specified.
7
7
  See https://js.arcgis.com/1.1/esri/copyright.txt for details.
8
- v1.1.0-next.20250916 */
8
+ v1.1.0-next.20250917.1 */
9
9
  const x = b`/** @license
10
10
  * Copyright 2025 Esri
11
11
  *
@@ -176,3 +176,4 @@ w("solution-social-share", C);
176
176
  export {
177
177
  C as SolutionSocialShare
178
178
  };
179
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tRWxlbWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BhcmNnaXMvY29yZS1hZGFwdGVyL2Rpc3QvaW5kZXguanMiLCIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zb2x1dGlvbi1zb2NpYWwtc2hhcmUvc29sdXRpb24tc29jaWFsLXNoYXJlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc0FNRCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgXCIkYXJjZ2lzXCIgaW4gd2luZG93ICYmIHR5cGVvZiB3aW5kb3cuJGFyY2dpcyA9PT0gXCJvYmplY3RcIiAmJiBcImltcG9ydFwiIGluIHdpbmRvdy4kYXJjZ2lzICYmICEoXCJmb3JjZUVTTVwiIGluIHdpbmRvdy4kYXJjZ2lzKTtcbmZ1bmN0aW9uIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5kZWZhdWx0ICE9PSB2b2lkIDA7XG59XG5hc3luYyBmdW5jdGlvbiBsb2FkVW5kb2N1bWVudGVkTW9kdWxlKG1vZHVsZVBhdGgsIGRlZmVycmVkSW1wb3J0KSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQobW9kdWxlUGF0aCk7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgZGVmZXJyZWRJbXBvcnQoKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRJZGVudGl0eUlkZW50aXR5TWFuYWdlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvaWRlbnRpdHkvSWRlbnRpdHlNYW5hZ2VyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9pZGVudGl0eS9JZGVudGl0eU1hbmFnZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QmFzZW1hcCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvQmFzZW1hcFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvQmFzZW1hcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdCYXNlbWFwKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRCYXNlbWFwKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRDYW1lcmEoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL0NhbWVyYVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvQ2FtZXJhLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0NhbWVyYShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Q2FtZXJhKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRDYW1lcmFMYXlvdXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL0NhbWVyYUxheW91dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvQ2FtZXJhTGF5b3V0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0NhbWVyYUxheW91dChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Q2FtZXJhTGF5b3V0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRDb2xvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvQ29sb3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL0NvbG9yLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0NvbG9yKGNvbG9yKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Q29sb3IoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihjb2xvcik7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBbmFseXNpc0FuYWx5c2lzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9BbmFseXNpc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvQW5hbHlzaXMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3QW5hbHlzaXNBbmFseXNpcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0QW5hbHlzaXNBbmFseXNpcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QW5hbHlzaXNBcmVhTWVhc3VyZW1lbnRBbmFseXNpcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYW5hbHlzaXMvQXJlYU1lYXN1cmVtZW50QW5hbHlzaXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL0FyZWFNZWFzdXJlbWVudEFuYWx5c2lzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzQXJlYU1lYXN1cmVtZW50QW5hbHlzaXMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzQXJlYU1lYXN1cmVtZW50QW5hbHlzaXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzRGltZW5zaW9uQW5hbHlzaXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FuYWx5c2lzL0RpbWVuc2lvbkFuYWx5c2lzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hbmFseXNpcy9EaW1lbnNpb25BbmFseXNpcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc0RpbWVuc2lvbkFuYWx5c2lzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc0RpbWVuc2lvbkFuYWx5c2lzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBbmFseXNpc0RpbWVuc2lvblNpbXBsZVN0eWxlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9EaW1lbnNpb25TaW1wbGVTdHlsZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvRGltZW5zaW9uU2ltcGxlU3R5bGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3QW5hbHlzaXNEaW1lbnNpb25TaW1wbGVTdHlsZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0QW5hbHlzaXNEaW1lbnNpb25TaW1wbGVTdHlsZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QW5hbHlzaXNEaXJlY3RMaW5lTWVhc3VyZW1lbnRBbmFseXNpcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYW5hbHlzaXMvRGlyZWN0TGluZU1lYXN1cmVtZW50QW5hbHlzaXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL0RpcmVjdExpbmVNZWFzdXJlbWVudEFuYWx5c2lzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzRGlyZWN0TGluZU1lYXN1cmVtZW50QW5hbHlzaXMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzRGlyZWN0TGluZU1lYXN1cmVtZW50QW5hbHlzaXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUFuYWx5c2lzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlQW5hbHlzaXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL0VsZXZhdGlvblByb2ZpbGVBbmFseXNpcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVBbmFseXNpcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlQW5hbHlzaXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzTGVuZ3RoRGltZW5zaW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9MZW5ndGhEaW1lbnNpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL0xlbmd0aERpbWVuc2lvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc0xlbmd0aERpbWVuc2lvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0QW5hbHlzaXNMZW5ndGhEaW1lbnNpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzTGluZU9mU2lnaHRBbmFseXNpcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYW5hbHlzaXMvTGluZU9mU2lnaHRBbmFseXNpc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvTGluZU9mU2lnaHRBbmFseXNpcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc0xpbmVPZlNpZ2h0QW5hbHlzaXMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzTGluZU9mU2lnaHRBbmFseXNpcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzT2JzZXJ2ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FuYWx5c2lzL0xpbmVPZlNpZ2h0QW5hbHlzaXNPYnNlcnZlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvTGluZU9mU2lnaHRBbmFseXNpc09ic2VydmVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzTGluZU9mU2lnaHRBbmFseXNpc09ic2VydmVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc0xpbmVPZlNpZ2h0QW5hbHlzaXNPYnNlcnZlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzVGFyZ2V0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9MaW5lT2ZTaWdodEFuYWx5c2lzVGFyZ2V0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hbmFseXNpcy9MaW5lT2ZTaWdodEFuYWx5c2lzVGFyZ2V0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzTGluZU9mU2lnaHRBbmFseXNpc1RhcmdldChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0QW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzVGFyZ2V0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBbmFseXNpc1NsaWNlQW5hbHlzaXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FuYWx5c2lzL1NsaWNlQW5hbHlzaXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL1NsaWNlQW5hbHlzaXMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3QW5hbHlzaXNTbGljZUFuYWx5c2lzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc1NsaWNlQW5hbHlzaXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzU2xpY2VQbGFuZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYW5hbHlzaXMvU2xpY2VQbGFuZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvU2xpY2VQbGFuZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc1NsaWNlUGxhbmUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzU2xpY2VQbGFuZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QW5hbHlzaXNWaWV3c2hlZCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYW5hbHlzaXMvVmlld3NoZWRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL1ZpZXdzaGVkLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzVmlld3NoZWQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzVmlld3NoZWQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzVmlld3NoZWRBbmFseXNpcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYW5hbHlzaXMvVmlld3NoZWRBbmFseXNpc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvVmlld3NoZWRBbmFseXNpcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc1ZpZXdzaGVkQW5hbHlzaXMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzVmlld3NoZWRBbmFseXNpcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudEFuYWx5c2lzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9Wb2x1bWVNZWFzdXJlbWVudEFuYWx5c2lzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hbmFseXNpcy9Wb2x1bWVNZWFzdXJlbWVudEFuYWx5c2lzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRBbmFseXNpcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0QW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudEFuYWx5c2lzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlR3JvdW5kTGluZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYW5hbHlzaXMvRWxldmF0aW9uUHJvZmlsZS9FbGV2YXRpb25Qcm9maWxlR3JvdW5kTGluZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvRWxldmF0aW9uUHJvZmlsZS9FbGV2YXRpb25Qcm9maWxlR3JvdW5kTGluZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlR3JvdW5kTGluZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUdyb3VuZExpbmUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVJbnB1dExpbmUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FuYWx5c2lzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZUlucHV0TGluZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvRWxldmF0aW9uUHJvZmlsZS9FbGV2YXRpb25Qcm9maWxlSW5wdXRMaW5lLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVJbnB1dExpbmUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVJbnB1dExpbmUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVMaW5lXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVMaW5lLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUxpbmVDaGFydE9wdGlvbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FuYWx5c2lzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZUxpbmVDaGFydE9wdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZUxpbmVDaGFydE9wdGlvbnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUxpbmVDaGFydE9wdGlvbnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lQ2hhcnRPcHRpb25zKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZVZpZXdPcHRpb25zKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVMaW5lVmlld09wdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZUxpbmVWaWV3T3B0aW9ucy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZVZpZXdPcHRpb25zKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZVZpZXdPcHRpb25zKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlUXVlcnlMaW5lKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVRdWVyeUxpbmVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZVF1ZXJ5TGluZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlUXVlcnlMaW5lKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlUXVlcnlMaW5lKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlU2NlbmVMaW5lKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVTY2VuZUxpbmVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FuYWx5c2lzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZVNjZW5lTGluZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlU2NlbmVMaW5lKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlU2NlbmVMaW5lKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlVW5pdHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FuYWx5c2lzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZVVuaXRzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVVbml0cy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlVW5pdHMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVVbml0cygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVZpZXdPcHRpb25zKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVWaWV3T3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvRWxldmF0aW9uUHJvZmlsZS9FbGV2YXRpb25Qcm9maWxlVmlld09wdGlvbnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVZpZXdPcHRpb25zKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlVmlld09wdGlvbnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzU3VwcG9ydEFuYWx5c2lzT3JpZ2luV2ViU2NlbmUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FuYWx5c2lzL3N1cHBvcnQvQW5hbHlzaXNPcmlnaW5XZWJTY2VuZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvc3VwcG9ydC9BbmFseXNpc09yaWdpbldlYlNjZW5lLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzU3VwcG9ydEFuYWx5c2lzT3JpZ2luV2ViU2NlbmUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzU3VwcG9ydEFuYWx5c2lzT3JpZ2luV2ViU2NlbmUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRWb2x1bWVNZWFzdXJlbWVudEN1dEZpbGxPcHRpb25zKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9Wb2x1bWVNZWFzdXJlbWVudC9Wb2x1bWVNZWFzdXJlbWVudEN1dEZpbGxPcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hbmFseXNpcy9Wb2x1bWVNZWFzdXJlbWVudC9Wb2x1bWVNZWFzdXJlbWVudEN1dEZpbGxPcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRWb2x1bWVNZWFzdXJlbWVudEN1dEZpbGxPcHRpb25zKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc1ZvbHVtZU1lYXN1cmVtZW50Vm9sdW1lTWVhc3VyZW1lbnRDdXRGaWxsT3B0aW9ucygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudFZvbHVtZU1lYXN1cmVtZW50RGlzcGxheVVuaXRzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hbmFseXNpcy9Wb2x1bWVNZWFzdXJlbWVudC9Wb2x1bWVNZWFzdXJlbWVudERpc3BsYXlVbml0c1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvVm9sdW1lTWVhc3VyZW1lbnQvVm9sdW1lTWVhc3VyZW1lbnREaXNwbGF5VW5pdHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3QW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudFZvbHVtZU1lYXN1cmVtZW50RGlzcGxheVVuaXRzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRBbmFseXNpc1ZvbHVtZU1lYXN1cmVtZW50Vm9sdW1lTWVhc3VyZW1lbnREaXNwbGF5VW5pdHMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEFuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRWb2x1bWVNZWFzdXJlbWVudElucHV0VW5pdHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FuYWx5c2lzL1ZvbHVtZU1lYXN1cmVtZW50L1ZvbHVtZU1lYXN1cmVtZW50SW5wdXRVbml0c1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYW5hbHlzaXMvVm9sdW1lTWVhc3VyZW1lbnQvVm9sdW1lTWVhc3VyZW1lbnRJbnB1dFVuaXRzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0FuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRWb2x1bWVNZWFzdXJlbWVudElucHV0VW5pdHMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEFuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRWb2x1bWVNZWFzdXJlbWVudElucHV0VW5pdHMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydENvcmVBY2Nlc3NvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvY29yZS9BY2Nlc3NvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvY29yZS9BY2Nlc3Nvci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdDb3JlQWNjZXNzb3Iob2JqKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Q29yZUFjY2Vzc29yKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3Iob2JqKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydENvcmVDb2xsZWN0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL0NvbGxlY3Rpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2NvcmUvQ29sbGVjdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdDb3JlQ29sbGVjdGlvbih2YWx1ZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRDb3JlQ29sbGVjdGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHZhbHVlcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRDb3JlRXJyb3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2NvcmUvRXJyb3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2NvcmUvRXJyb3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Q29yZUVycm9yKG5hbWUsIG1lc3NhZ2UsIGRldGFpbHMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRDb3JlRXJyb3IoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3RvcihuYW1lLCBtZXNzYWdlLCBkZXRhaWxzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydENvcmVIYW5kbGVzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL0hhbmRsZXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2NvcmUvSGFuZGxlcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdDb3JlSGFuZGxlcygpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRDb3JlSGFuZGxlcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKCk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRDb3JlV29ya2Vyc0Nvbm5lY3Rpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2NvcmUvd29ya2Vycy9Db25uZWN0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9jb3JlL3dvcmtlcnMvQ29ubmVjdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdDb3JlV29ya2Vyc0Nvbm5lY3Rpb24oKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Q29yZVdvcmtlcnNDb25uZWN0aW9uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IoKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEVmZmVjdHNGb2N1c0FyZWFzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9lZmZlY3RzL0ZvY3VzQXJlYXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2VmZmVjdHMvRm9jdXNBcmVhcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdFZmZlY3RzRm9jdXNBcmVhcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0RWZmZWN0c0ZvY3VzQXJlYXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEVmZmVjdHNGb2N1c0FyZWEoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2VmZmVjdHMvRm9jdXNBcmVhXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9lZmZlY3RzL0ZvY3VzQXJlYS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdFZmZlY3RzRm9jdXNBcmVhKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRFZmZlY3RzRm9jdXNBcmVhKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRFZmZlY3RzRm9jdXNBcmVhT3V0bGluZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZWZmZWN0cy9Gb2N1c0FyZWFPdXRsaW5lXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9lZmZlY3RzL0ZvY3VzQXJlYU91dGxpbmUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3RWZmZWN0c0ZvY3VzQXJlYU91dGxpbmUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEVmZmVjdHNGb2N1c0FyZWFPdXRsaW5lKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRGb3JtRWxlbWVudHNBdHRhY2htZW50RWxlbWVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9BdHRhY2htZW50RWxlbWVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZm9ybS9lbGVtZW50cy9BdHRhY2htZW50RWxlbWVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNBdHRhY2htZW50RWxlbWVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Rm9ybUVsZW1lbnRzQXR0YWNobWVudEVsZW1lbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEZvcm1FbGVtZW50c0VsZW1lbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvRWxlbWVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZm9ybS9lbGVtZW50cy9FbGVtZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0Zvcm1FbGVtZW50c0VsZW1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c0VsZW1lbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEZvcm1FbGVtZW50c0ZpZWxkRWxlbWVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9GaWVsZEVsZW1lbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMvRmllbGRFbGVtZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0Zvcm1FbGVtZW50c0ZpZWxkRWxlbWVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Rm9ybUVsZW1lbnRzRmllbGRFbGVtZW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRGb3JtRWxlbWVudHNHcm91cEVsZW1lbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvR3JvdXBFbGVtZW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9mb3JtL2VsZW1lbnRzL0dyb3VwRWxlbWVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNHcm91cEVsZW1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c0dyb3VwRWxlbWVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzUmVsYXRpb25zaGlwRWxlbWVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9SZWxhdGlvbnNoaXBFbGVtZW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9mb3JtL2VsZW1lbnRzL1JlbGF0aW9uc2hpcEVsZW1lbnQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Rm9ybUVsZW1lbnRzUmVsYXRpb25zaGlwRWxlbWVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Rm9ybUVsZW1lbnRzUmVsYXRpb25zaGlwRWxlbWVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzVGV4dEVsZW1lbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvVGV4dEVsZW1lbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMvVGV4dEVsZW1lbnQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Rm9ybUVsZW1lbnRzVGV4dEVsZW1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c1RleHRFbGVtZW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRGb3JtRWxlbWVudHNVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uc0VsZW1lbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnNFbGVtZW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9mb3JtL2VsZW1lbnRzL1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zRWxlbWVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uc0VsZW1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zRWxlbWVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzQmFyY29kZVNjYW5uZXJJbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9pbnB1dHMvQmFyY29kZVNjYW5uZXJJbnB1dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZm9ybS9lbGVtZW50cy9pbnB1dHMvQmFyY29kZVNjYW5uZXJJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNJbnB1dHNCYXJjb2RlU2Nhbm5lcklucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNCYXJjb2RlU2Nhbm5lcklucHV0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNDb21ib0JveElucHV0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9mb3JtL2VsZW1lbnRzL2lucHV0cy9Db21ib0JveElucHV0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9mb3JtL2VsZW1lbnRzL2lucHV0cy9Db21ib0JveElucHV0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0Zvcm1FbGVtZW50c0lucHV0c0NvbWJvQm94SW5wdXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0NvbWJvQm94SW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0RhdGVQaWNrZXJJbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9pbnB1dHMvRGF0ZVBpY2tlcklucHV0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9mb3JtL2VsZW1lbnRzL2lucHV0cy9EYXRlUGlja2VySW5wdXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Rm9ybUVsZW1lbnRzSW5wdXRzRGF0ZVBpY2tlcklucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNEYXRlUGlja2VySW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0RhdGVUaW1lT2Zmc2V0UGlja2VySW5wdXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvaW5wdXRzL0RhdGVUaW1lT2Zmc2V0UGlja2VySW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMvaW5wdXRzL0RhdGVUaW1lT2Zmc2V0UGlja2VySW5wdXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Rm9ybUVsZW1lbnRzSW5wdXRzRGF0ZVRpbWVPZmZzZXRQaWNrZXJJbnB1dChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzRGF0ZVRpbWVPZmZzZXRQaWNrZXJJbnB1dCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzRGF0ZVRpbWVQaWNrZXJJbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9pbnB1dHMvRGF0ZVRpbWVQaWNrZXJJbnB1dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZm9ybS9lbGVtZW50cy9pbnB1dHMvRGF0ZVRpbWVQaWNrZXJJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNJbnB1dHNEYXRlVGltZVBpY2tlcklucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNEYXRlVGltZVBpY2tlcklucHV0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNSYWRpb0J1dHRvbnNJbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9pbnB1dHMvUmFkaW9CdXR0b25zSW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMvaW5wdXRzL1JhZGlvQnV0dG9uc0lucHV0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0Zvcm1FbGVtZW50c0lucHV0c1JhZGlvQnV0dG9uc0lucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNSYWRpb0J1dHRvbnNJbnB1dCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzU3dpdGNoSW5wdXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvaW5wdXRzL1N3aXRjaElucHV0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9mb3JtL2VsZW1lbnRzL2lucHV0cy9Td2l0Y2hJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNJbnB1dHNTd2l0Y2hJbnB1dChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzU3dpdGNoSW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEZvcm1FbGVtZW50c0lucHV0c1RleHRBcmVhSW5wdXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvaW5wdXRzL1RleHRBcmVhSW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMvaW5wdXRzL1RleHRBcmVhSW5wdXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Rm9ybUVsZW1lbnRzSW5wdXRzVGV4dEFyZWFJbnB1dChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzVGV4dEFyZWFJbnB1dCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzVGV4dEJveElucHV0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9mb3JtL2VsZW1lbnRzL2lucHV0cy9UZXh0Qm94SW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMvaW5wdXRzL1RleHRCb3hJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNJbnB1dHNUZXh0Qm94SW5wdXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c0lucHV0c1RleHRCb3hJbnB1dCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzVGltZVBpY2tlcklucHV0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9mb3JtL2VsZW1lbnRzL2lucHV0cy9UaW1lUGlja2VySW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMvaW5wdXRzL1RpbWVQaWNrZXJJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNJbnB1dHNUaW1lUGlja2VySW5wdXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c0lucHV0c1RpbWVQaWNrZXJJbnB1dCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzQXR0YWNobWVudHNBdHRhY2htZW50SW5wdXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvaW5wdXRzL2F0dGFjaG1lbnRzL0F0dGFjaG1lbnRJbnB1dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZm9ybS9lbGVtZW50cy9pbnB1dHMvYXR0YWNobWVudHMvQXR0YWNobWVudElucHV0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0Zvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzQXR0YWNobWVudElucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c0F0dGFjaG1lbnRJbnB1dCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzQXR0YWNobWVudHNBdWRpb0lucHV0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9mb3JtL2VsZW1lbnRzL2lucHV0cy9hdHRhY2htZW50cy9BdWRpb0lucHV0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9mb3JtL2VsZW1lbnRzL2lucHV0cy9hdHRhY2htZW50cy9BdWRpb0lucHV0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0Zvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzQXVkaW9JbnB1dChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzQXR0YWNobWVudHNBdWRpb0lucHV0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c0RvY3VtZW50SW5wdXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvaW5wdXRzL2F0dGFjaG1lbnRzL0RvY3VtZW50SW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMvaW5wdXRzL2F0dGFjaG1lbnRzL0RvY3VtZW50SW5wdXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Rm9ybUVsZW1lbnRzSW5wdXRzQXR0YWNobWVudHNEb2N1bWVudElucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c0RvY3VtZW50SW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzSW1hZ2VJbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9pbnB1dHMvYXR0YWNobWVudHMvSW1hZ2VJbnB1dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZm9ybS9lbGVtZW50cy9pbnB1dHMvYXR0YWNobWVudHMvSW1hZ2VJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c0ltYWdlSW5wdXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzSW1hZ2VJbnB1dCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzQXR0YWNobWVudHNTaWduYXR1cmVJbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9pbnB1dHMvYXR0YWNobWVudHMvU2lnbmF0dXJlSW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMvaW5wdXRzL2F0dGFjaG1lbnRzL1NpZ25hdHVyZUlucHV0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0Zvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzU2lnbmF0dXJlSW5wdXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzU2lnbmF0dXJlSW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzVmlkZW9JbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZm9ybS9lbGVtZW50cy9pbnB1dHMvYXR0YWNobWVudHMvVmlkZW9JbnB1dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZm9ybS9lbGVtZW50cy9pbnB1dHMvYXR0YWNobWVudHMvVmlkZW9JbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c1ZpZGVvSW5wdXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzVmlkZW9JbnB1dCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Rm9ybUV4cHJlc3Npb25JbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9mb3JtL0V4cHJlc3Npb25JbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9mb3JtL0V4cHJlc3Npb25JbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0Zvcm1FeHByZXNzaW9uSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Rm9ybUV4cHJlc3Npb25JbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRGb3JtRm9ybVRlbXBsYXRlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9mb3JtL0Zvcm1UZW1wbGF0ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZm9ybS9Gb3JtVGVtcGxhdGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Rm9ybUZvcm1UZW1wbGF0ZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Rm9ybUZvcm1UZW1wbGF0ZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlDaXJjbGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L0NpcmNsZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvQ2lyY2xlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5Q2lyY2xlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRHZW9tZXRyeUNpcmNsZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlFeHRlbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L0V4dGVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvRXh0ZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5RXh0ZW50KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRHZW9tZXRyeUV4dGVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlHZW9tZXRyeSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvR2VvbWV0cnlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L0dlb21ldHJ5LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5R2VvbWV0cnkocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEdlb21ldHJ5R2VvbWV0cnkoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5SGVpZ2h0TW9kZWxJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9IZWlnaHRNb2RlbEluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L0hlaWdodE1vZGVsSW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdHZW9tZXRyeUhlaWdodE1vZGVsSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R2VvbWV0cnlIZWlnaHRNb2RlbEluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5TWVzaCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvTWVzaFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvTWVzaC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdHZW9tZXRyeU1lc2gocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEdlb21ldHJ5TWVzaCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlNdWx0aXBvaW50KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9NdWx0aXBvaW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9NdWx0aXBvaW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5TXVsdGlwb2ludChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R2VvbWV0cnlNdWx0aXBvaW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeVBvaW50KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9Qb2ludFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvUG9pbnQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3R2VvbWV0cnlQb2ludChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R2VvbWV0cnlQb2ludCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlQb2x5Z29uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9Qb2x5Z29uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9Qb2x5Z29uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5UG9seWdvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R2VvbWV0cnlQb2x5Z29uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeVBvbHlsaW5lKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9Qb2x5bGluZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvUG9seWxpbmUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3R2VvbWV0cnlQb2x5bGluZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R2VvbWV0cnlQb2x5bGluZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlTcGF0aWFsUmVmZXJlbmNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9TcGF0aWFsUmVmZXJlbmNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9TcGF0aWFsUmVmZXJlbmNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5U3BhdGlhbFJlZmVyZW5jZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R2VvbWV0cnlTcGF0aWFsUmVmZXJlbmNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc1N1cHBvcnRHZW9ncmFwaGljVHJhbnNmb3JtYXRpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9zdXBwb3J0L0dlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL3N1cHBvcnQvR2VvZ3JhcGhpY1RyYW5zZm9ybWF0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5T3BlcmF0b3JzU3VwcG9ydEdlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNTdXBwb3J0R2VvZ3JhcGhpY1RyYW5zZm9ybWF0aW9uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc1N1cHBvcnRHZW9ncmFwaGljVHJhbnNmb3JtYXRpb25TdGVwKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvc3VwcG9ydC9HZW9ncmFwaGljVHJhbnNmb3JtYXRpb25TdGVwXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvc3VwcG9ydC9HZW9ncmFwaGljVHJhbnNmb3JtYXRpb25TdGVwLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5T3BlcmF0b3JzU3VwcG9ydEdlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvblN0ZXAocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzU3VwcG9ydEdlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvblN0ZXAoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzU3VwcG9ydFRyYW5zZm9ybWF0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvc3VwcG9ydC9UcmFuc2Zvcm1hdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL3N1cHBvcnQvVHJhbnNmb3JtYXRpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3R2VvbWV0cnlPcGVyYXRvcnNTdXBwb3J0VHJhbnNmb3JtYXRpb24oKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNTdXBwb3J0VHJhbnNmb3JtYXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3RvcigpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlTdXBwb3J0R2VvZ3JhcGhpY1RyYW5zZm9ybWF0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9zdXBwb3J0L0dlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvc3VwcG9ydC9HZW9ncmFwaGljVHJhbnNmb3JtYXRpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3R2VvbWV0cnlTdXBwb3J0R2VvZ3JhcGhpY1RyYW5zZm9ybWF0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRHZW9tZXRyeVN1cHBvcnRHZW9ncmFwaGljVHJhbnNmb3JtYXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5U3VwcG9ydEdlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvblN0ZXAoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L3N1cHBvcnQvR2VvZ3JhcGhpY1RyYW5zZm9ybWF0aW9uU3RlcFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvc3VwcG9ydC9HZW9ncmFwaGljVHJhbnNmb3JtYXRpb25TdGVwLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5U3VwcG9ydEdlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvblN0ZXAocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEdlb21ldHJ5U3VwcG9ydEdlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvblN0ZXAoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hDb21wb25lbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L3N1cHBvcnQvTWVzaENvbXBvbmVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvc3VwcG9ydC9NZXNoQ29tcG9uZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5U3VwcG9ydE1lc2hDb21wb25lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hDb21wb25lbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hHZW9yZWZlcmVuY2VkVmVydGV4U3BhY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L3N1cHBvcnQvTWVzaEdlb3JlZmVyZW5jZWRWZXJ0ZXhTcGFjZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvc3VwcG9ydC9NZXNoR2VvcmVmZXJlbmNlZFZlcnRleFNwYWNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5U3VwcG9ydE1lc2hHZW9yZWZlcmVuY2VkVmVydGV4U3BhY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hHZW9yZWZlcmVuY2VkVmVydGV4U3BhY2UoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hMb2NhbFZlcnRleFNwYWNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9zdXBwb3J0L01lc2hMb2NhbFZlcnRleFNwYWNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9zdXBwb3J0L01lc2hMb2NhbFZlcnRleFNwYWNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5U3VwcG9ydE1lc2hMb2NhbFZlcnRleFNwYWNlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRHZW9tZXRyeVN1cHBvcnRNZXNoTG9jYWxWZXJ0ZXhTcGFjZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlTdXBwb3J0TWVzaE1hdGVyaWFsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9zdXBwb3J0L01lc2hNYXRlcmlhbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvc3VwcG9ydC9NZXNoTWF0ZXJpYWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3R2VvbWV0cnlTdXBwb3J0TWVzaE1hdGVyaWFsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRHZW9tZXRyeVN1cHBvcnRNZXNoTWF0ZXJpYWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hNYXRlcmlhbE1ldGFsbGljUm91Z2huZXNzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9zdXBwb3J0L01lc2hNYXRlcmlhbE1ldGFsbGljUm91Z2huZXNzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9zdXBwb3J0L01lc2hNYXRlcmlhbE1ldGFsbGljUm91Z2huZXNzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5U3VwcG9ydE1lc2hNYXRlcmlhbE1ldGFsbGljUm91Z2huZXNzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRHZW9tZXRyeVN1cHBvcnRNZXNoTWF0ZXJpYWxNZXRhbGxpY1JvdWdobmVzcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlTdXBwb3J0TWVzaFRleHR1cmUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L3N1cHBvcnQvTWVzaFRleHR1cmVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L3N1cHBvcnQvTWVzaFRleHR1cmUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3R2VvbWV0cnlTdXBwb3J0TWVzaFRleHR1cmUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hUZXh0dXJlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeVN1cHBvcnRNZXNoVGV4dHVyZVRyYW5zZm9ybSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvc3VwcG9ydC9NZXNoVGV4dHVyZVRyYW5zZm9ybVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvc3VwcG9ydC9NZXNoVGV4dHVyZVRyYW5zZm9ybS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdHZW9tZXRyeVN1cHBvcnRNZXNoVGV4dHVyZVRyYW5zZm9ybShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R2VvbWV0cnlTdXBwb3J0TWVzaFRleHR1cmVUcmFuc2Zvcm0oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hUcmFuc2Zvcm0oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L3N1cHBvcnQvTWVzaFRyYW5zZm9ybVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvc3VwcG9ydC9NZXNoVHJhbnNmb3JtLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0dlb21ldHJ5U3VwcG9ydE1lc2hUcmFuc2Zvcm0ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hUcmFuc2Zvcm0oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdyYXBoaWNHcmFwaGljT3JpZ2luKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9ncmFwaGljL0dyYXBoaWNPcmlnaW5cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dyYXBoaWMvR3JhcGhpY09yaWdpbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdHcmFwaGljR3JhcGhpY09yaWdpbigpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRHcmFwaGljR3JhcGhpY09yaWdpbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKCk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHcmFwaGljVmVjdG9yVGlsZUdyYXBoaWNPcmlnaW4oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dyYXBoaWMvVmVjdG9yVGlsZUdyYXBoaWNPcmlnaW5cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dyYXBoaWMvVmVjdG9yVGlsZUdyYXBoaWNPcmlnaW4uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3R3JhcGhpY1ZlY3RvclRpbGVHcmFwaGljT3JpZ2luKGxheWVyLCBsYXllcklkLCBsYXllckluZGV4KSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R3JhcGhpY1ZlY3RvclRpbGVHcmFwaGljT3JpZ2luKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IobGF5ZXIsIGxheWVySWQsIGxheWVySW5kZXgpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QXR0cmlidXRlQmluc0dyYXBoaWMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL0F0dHJpYnV0ZUJpbnNHcmFwaGljXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9BdHRyaWJ1dGVCaW5zR3JhcGhpYy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdBdHRyaWJ1dGVCaW5zR3JhcGhpYyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0QXR0cmlidXRlQmluc0dyYXBoaWMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdyYXBoaWMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL0dyYXBoaWNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL0dyYXBoaWMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3R3JhcGhpYyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0R3JhcGhpYygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R3JvdW5kKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9Hcm91bmRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL0dyb3VuZC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdHcm91bmQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydEdyb3VuZCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0SWRlbnRpdHlDcmVkZW50aWFsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9pZGVudGl0eS9DcmVkZW50aWFsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9pZGVudGl0eS9DcmVkZW50aWFsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0lkZW50aXR5Q3JlZGVudGlhbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0SWRlbnRpdHlDcmVkZW50aWFsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRJZGVudGl0eU9BdXRoSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvaWRlbnRpdHkvT0F1dGhJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9pZGVudGl0eS9PQXV0aEluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3SWRlbnRpdHlPQXV0aEluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydElkZW50aXR5T0F1dGhJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRJZGVudGl0eVNlcnZlckluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2lkZW50aXR5L1NlcnZlckluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2lkZW50aXR5L1NlcnZlckluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3SWRlbnRpdHlTZXJ2ZXJJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRJZGVudGl0eVNlcnZlckluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc0Jhc2VEeW5hbWljTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9CYXNlRHluYW1pY0xheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvQmFzZUR5bmFtaWNMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNCYXNlRHluYW1pY0xheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNCYXNlRHluYW1pY0xheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNCYXNlRWxldmF0aW9uTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9CYXNlRWxldmF0aW9uTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9CYXNlRWxldmF0aW9uTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzQmFzZUVsZXZhdGlvbkxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNCYXNlRWxldmF0aW9uTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc0Jhc2VUaWxlTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9CYXNlVGlsZUxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvQmFzZVRpbGVMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNCYXNlVGlsZUxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNCYXNlVGlsZUxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNCaW5nTWFwc0xheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvQmluZ01hcHNMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL0JpbmdNYXBzTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzQmluZ01hcHNMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzQmluZ01hcHNMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzQnVpbGRpbmdTY2VuZUxheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvQnVpbGRpbmdTY2VuZUxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvQnVpbGRpbmdTY2VuZUxheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc0J1aWxkaW5nU2NlbmVMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzQnVpbGRpbmdTY2VuZUxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNCdWlsZGluZ1N1YmxheWVyc0J1aWxkaW5nQ29tcG9uZW50U3VibGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9idWlsZGluZ1N1YmxheWVycy9CdWlsZGluZ0NvbXBvbmVudFN1YmxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvYnVpbGRpbmdTdWJsYXllcnMvQnVpbGRpbmdDb21wb25lbnRTdWJsYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNCdWlsZGluZ1N1YmxheWVyc0J1aWxkaW5nQ29tcG9uZW50U3VibGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0J1aWxkaW5nU3VibGF5ZXJzQnVpbGRpbmdDb21wb25lbnRTdWJsYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzQnVpbGRpbmdTdWJsYXllcnNCdWlsZGluZ0dyb3VwU3VibGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9idWlsZGluZ1N1YmxheWVycy9CdWlsZGluZ0dyb3VwU3VibGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9idWlsZGluZ1N1YmxheWVycy9CdWlsZGluZ0dyb3VwU3VibGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzQnVpbGRpbmdTdWJsYXllcnNCdWlsZGluZ0dyb3VwU3VibGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0J1aWxkaW5nU3VibGF5ZXJzQnVpbGRpbmdHcm91cFN1YmxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNCdWlsZGluZ1N1YmxheWVyc0J1aWxkaW5nU3VibGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9idWlsZGluZ1N1YmxheWVycy9CdWlsZGluZ1N1YmxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvYnVpbGRpbmdTdWJsYXllcnMvQnVpbGRpbmdTdWJsYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNCdWlsZGluZ1N1YmxheWVyc0J1aWxkaW5nU3VibGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0J1aWxkaW5nU3VibGF5ZXJzQnVpbGRpbmdTdWJsYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzQ2F0YWxvZ0xheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvQ2F0YWxvZ0xheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvQ2F0YWxvZ0xheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc0NhdGFsb2dMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzQ2F0YWxvZ0xheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNDYXRhbG9nQ2F0YWxvZ0R5bmFtaWNHcm91cExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvY2F0YWxvZy9DYXRhbG9nRHluYW1pY0dyb3VwTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9jYXRhbG9nL0NhdGFsb2dEeW5hbWljR3JvdXBMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNDYXRhbG9nQ2F0YWxvZ0R5bmFtaWNHcm91cExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNDYXRhbG9nQ2F0YWxvZ0R5bmFtaWNHcm91cExheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNDYXRhbG9nQ2F0YWxvZ0Zvb3RwcmludExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvY2F0YWxvZy9DYXRhbG9nRm9vdHByaW50TGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9jYXRhbG9nL0NhdGFsb2dGb290cHJpbnRMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNDYXRhbG9nQ2F0YWxvZ0Zvb3RwcmludExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNDYXRhbG9nQ2F0YWxvZ0Zvb3RwcmludExheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNDU1ZMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL0NTVkxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvQ1NWTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzQ1NWTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0NTVkxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNEaW1lbnNpb25MYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL0RpbWVuc2lvbkxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvRGltZW5zaW9uTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzRGltZW5zaW9uTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0RpbWVuc2lvbkxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNFbGV2YXRpb25MYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL0VsZXZhdGlvbkxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvRWxldmF0aW9uTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzRWxldmF0aW9uTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0VsZXZhdGlvbkxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNGZWF0dXJlTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9GZWF0dXJlTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9GZWF0dXJlTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzRmVhdHVyZUxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNGZWF0dXJlTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc0dlb0pTT05MYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL0dlb0pTT05MYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL0dlb0pTT05MYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNHZW9KU09OTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0dlb0pTT05MYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzR2VvUlNTTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9HZW9SU1NMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL0dlb1JTU0xheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc0dlb1JTU0xheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNHZW9SU1NMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzR3JhcGhpY3NMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL0dyYXBoaWNzTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9HcmFwaGljc0xheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc0dyYXBoaWNzTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0dyYXBoaWNzTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc0dyb3VwTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9Hcm91cExheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvR3JvdXBMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNHcm91cExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNHcm91cExheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNJbWFnZXJ5TGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9JbWFnZXJ5TGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9JbWFnZXJ5TGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzSW1hZ2VyeUxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNJbWFnZXJ5TGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc0ltYWdlcnlUaWxlTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9JbWFnZXJ5VGlsZUxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvSW1hZ2VyeVRpbGVMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNJbWFnZXJ5VGlsZUxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNJbWFnZXJ5VGlsZUxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNJbnRlZ3JhdGVkTWVzaExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvSW50ZWdyYXRlZE1lc2hMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL0ludGVncmF0ZWRNZXNoTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzSW50ZWdyYXRlZE1lc2hMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzSW50ZWdyYXRlZE1lc2hMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzSW50ZWdyYXRlZE1lc2gzRFRpbGVzTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9JbnRlZ3JhdGVkTWVzaDNEVGlsZXNMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL0ludGVncmF0ZWRNZXNoM0RUaWxlc0xheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc0ludGVncmF0ZWRNZXNoM0RUaWxlc0xheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNJbnRlZ3JhdGVkTWVzaDNEVGlsZXNMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzS01MTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9LTUxMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL0tNTExheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc0tNTExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNLTUxMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzS25vd2xlZGdlR3JhcGhMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL0tub3dsZWRnZUdyYXBoTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9Lbm93bGVkZ2VHcmFwaExheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc0tub3dsZWRnZUdyYXBoTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0tub3dsZWRnZUdyYXBoTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc0tub3dsZWRnZUdyYXBoS25vd2xlZGdlR3JhcGhTdWJsYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL2tub3dsZWRnZUdyYXBoL0tub3dsZWRnZUdyYXBoU3VibGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9rbm93bGVkZ2VHcmFwaC9Lbm93bGVkZ2VHcmFwaFN1YmxheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc0tub3dsZWRnZUdyYXBoS25vd2xlZGdlR3JhcGhTdWJsYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzS25vd2xlZGdlR3JhcGhLbm93bGVkZ2VHcmFwaFN1YmxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL0xheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc0xheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNMaW5lT2ZTaWdodExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvTGluZU9mU2lnaHRMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL0xpbmVPZlNpZ2h0TGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzTGluZU9mU2lnaHRMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzTGluZU9mU2lnaHRMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzTGlua0NoYXJ0TGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9MaW5rQ2hhcnRMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL0xpbmtDaGFydExheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc0xpbmtDaGFydExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNMaW5rQ2hhcnRMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzTWFwSW1hZ2VMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL01hcEltYWdlTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9NYXBJbWFnZUxheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc01hcEltYWdlTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc01hcEltYWdlTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc01hcE5vdGVzTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9NYXBOb3Rlc0xheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvTWFwTm90ZXNMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNNYXBOb3Rlc0xheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNNYXBOb3Rlc0xheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNNZWRpYUxheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvTWVkaWFMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL01lZGlhTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzTWVkaWFMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzTWVkaWFMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzT0dDRmVhdHVyZUxheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvT0dDRmVhdHVyZUxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvT0dDRmVhdHVyZUxheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc09HQ0ZlYXR1cmVMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzT0dDRmVhdHVyZUxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNPcGVuU3RyZWV0TWFwTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9PcGVuU3RyZWV0TWFwTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9PcGVuU3RyZWV0TWFwTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzT3BlblN0cmVldE1hcExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNPcGVuU3RyZWV0TWFwTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc09yaWVudGVkSW1hZ2VyeUxheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvT3JpZW50ZWRJbWFnZXJ5TGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9PcmllbnRlZEltYWdlcnlMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNPcmllbnRlZEltYWdlcnlMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzT3JpZW50ZWRJbWFnZXJ5TGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1BvaW50Q2xvdWRGaWx0ZXJzUG9pbnRDbG91ZEZpbHRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3BvaW50Q2xvdWRGaWx0ZXJzL1BvaW50Q2xvdWRGaWx0ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9wb2ludENsb3VkRmlsdGVycy9Qb2ludENsb3VkRmlsdGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1BvaW50Q2xvdWRGaWx0ZXJzUG9pbnRDbG91ZEZpbHRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzUG9pbnRDbG91ZEZpbHRlcnNQb2ludENsb3VkRmlsdGVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNQb2ludENsb3VkRmlsdGVyc1BvaW50Q2xvdWRSZXR1cm5GaWx0ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9wb2ludENsb3VkRmlsdGVycy9Qb2ludENsb3VkUmV0dXJuRmlsdGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvcG9pbnRDbG91ZEZpbHRlcnMvUG9pbnRDbG91ZFJldHVybkZpbHRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNQb2ludENsb3VkRmlsdGVyc1BvaW50Q2xvdWRSZXR1cm5GaWx0ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1BvaW50Q2xvdWRGaWx0ZXJzUG9pbnRDbG91ZFJldHVybkZpbHRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzUG9pbnRDbG91ZEZpbHRlcnNQb2ludENsb3VkVmFsdWVGaWx0ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9wb2ludENsb3VkRmlsdGVycy9Qb2ludENsb3VkVmFsdWVGaWx0ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9wb2ludENsb3VkRmlsdGVycy9Qb2ludENsb3VkVmFsdWVGaWx0ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzUG9pbnRDbG91ZEZpbHRlcnNQb2ludENsb3VkVmFsdWVGaWx0ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1BvaW50Q2xvdWRGaWx0ZXJzUG9pbnRDbG91ZFZhbHVlRmlsdGVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNQb2ludENsb3VkRmlsdGVyc1BvaW50Q2xvdWRCaXRmaWVsZEZpbHRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3BvaW50Q2xvdWRGaWx0ZXJzL1BvaW50Q2xvdWRCaXRmaWVsZEZpbHRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3BvaW50Q2xvdWRGaWx0ZXJzL1BvaW50Q2xvdWRCaXRmaWVsZEZpbHRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNQb2ludENsb3VkRmlsdGVyc1BvaW50Q2xvdWRCaXRmaWVsZEZpbHRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzUG9pbnRDbG91ZEZpbHRlcnNQb2ludENsb3VkQml0ZmllbGRGaWx0ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1BhcnF1ZXRMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL1BhcnF1ZXRMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL1BhcnF1ZXRMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNQYXJxdWV0TGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1BhcnF1ZXRMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzUG9pbnRDbG91ZExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvUG9pbnRDbG91ZExheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvUG9pbnRDbG91ZExheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1BvaW50Q2xvdWRMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzUG9pbnRDbG91ZExheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNSb3V0ZUxheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvUm91dGVMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL1JvdXRlTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzUm91dGVMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzUm91dGVMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU2NlbmVMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL1NjZW5lTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9TY2VuZUxheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1NjZW5lTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1NjZW5lTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N0cmVhbUxheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvU3RyZWFtTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9TdHJlYW1MYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdHJlYW1MYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3RyZWFtTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1YnR5cGVHcm91cExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvU3VidHlwZUdyb3VwTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9TdWJ0eXBlR3JvdXBMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdWJ0eXBlR3JvdXBMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VidHlwZUdyb3VwTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRBZ2dyZWdhdGVGaWVsZCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvQWdncmVnYXRlRmllbGRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0FnZ3JlZ2F0ZUZpZWxkLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRBZ2dyZWdhdGVGaWVsZChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydEFnZ3JlZ2F0ZUZpZWxkKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0QnVpbGRpbmdGaWx0ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0J1aWxkaW5nRmlsdGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9CdWlsZGluZ0ZpbHRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0QnVpbGRpbmdGaWx0ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRCdWlsZGluZ0ZpbHRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydEJ1aWxkaW5nU3VtbWFyeVN0YXRpc3RpY3MoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0J1aWxkaW5nU3VtbWFyeVN0YXRpc3RpY3NcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0J1aWxkaW5nU3VtbWFyeVN0YXRpc3RpY3MuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydEJ1aWxkaW5nU3VtbWFyeVN0YXRpc3RpY3MocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRCdWlsZGluZ1N1bW1hcnlTdGF0aXN0aWNzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0Q29kZWRWYWx1ZURvbWFpbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvQ29kZWRWYWx1ZURvbWFpblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvQ29kZWRWYWx1ZURvbWFpbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0Q29kZWRWYWx1ZURvbWFpbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydENvZGVkVmFsdWVEb21haW4oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRDb250cm9sUG9pbnRzR2VvcmVmZXJlbmNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9Db250cm9sUG9pbnRzR2VvcmVmZXJlbmNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9Db250cm9sUG9pbnRzR2VvcmVmZXJlbmNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRDb250cm9sUG9pbnRzR2VvcmVmZXJlbmNlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0Q29udHJvbFBvaW50c0dlb3JlZmVyZW5jZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydENvcm5lcnNHZW9yZWZlcmVuY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0Nvcm5lcnNHZW9yZWZlcmVuY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0Nvcm5lcnNHZW9yZWZlcmVuY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydENvcm5lcnNHZW9yZWZlcmVuY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRDb3JuZXJzR2VvcmVmZXJlbmNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0RGltZW5zaW9uYWxEZWZpbml0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9EaW1lbnNpb25hbERlZmluaXRpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0RpbWVuc2lvbmFsRGVmaW5pdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0RGltZW5zaW9uYWxEZWZpbml0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0RGltZW5zaW9uYWxEZWZpbml0aW9uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0RGlzcGxheUZpbHRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvRGlzcGxheUZpbHRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvRGlzcGxheUZpbHRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0RGlzcGxheUZpbHRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydERpc3BsYXlGaWx0ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnREaXNwbGF5RmlsdGVySW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvRGlzcGxheUZpbHRlckluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0Rpc3BsYXlGaWx0ZXJJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnREaXNwbGF5RmlsdGVySW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydERpc3BsYXlGaWx0ZXJJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0RG9tYWluKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9Eb21haW5cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0RvbWFpbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0RG9tYWluKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0RG9tYWluKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0RWxldmF0aW9uU2FtcGxlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvRWxldmF0aW9uU2FtcGxlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvRWxldmF0aW9uU2FtcGxlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0RWxldmF0aW9uU2FtcGxlcigpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0RWxldmF0aW9uU2FtcGxlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKCk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0RXhwcmVzc2lvbkluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0V4cHJlc3Npb25JbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9FeHByZXNzaW9uSW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0RXhwcmVzc2lvbkluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRFeHByZXNzaW9uSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydEV4dGVudEFuZFJvdGF0aW9uR2VvcmVmZXJlbmNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9FeHRlbnRBbmRSb3RhdGlvbkdlb3JlZmVyZW5jZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvRXh0ZW50QW5kUm90YXRpb25HZW9yZWZlcmVuY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydEV4dGVudEFuZFJvdGF0aW9uR2VvcmVmZXJlbmNlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0RXh0ZW50QW5kUm90YXRpb25HZW9yZWZlcmVuY2UoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRGYWNpbGl0eUxheWVySW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvRmFjaWxpdHlMYXllckluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0ZhY2lsaXR5TGF5ZXJJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRGYWNpbGl0eUxheWVySW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydEZhY2lsaXR5TGF5ZXJJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0RmVhdHVyZUVmZmVjdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvRmVhdHVyZUVmZmVjdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvRmVhdHVyZUVmZmVjdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0RmVhdHVyZUVmZmVjdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydEZlYXR1cmVFZmZlY3QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRGZWF0dXJlRmlsdGVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9GZWF0dXJlRmlsdGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9GZWF0dXJlRmlsdGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRGZWF0dXJlRmlsdGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0RmVhdHVyZUZpbHRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydEZlYXR1cmVSZWR1Y3Rpb25CaW5uaW5nKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9GZWF0dXJlUmVkdWN0aW9uQmlubmluZ1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvRmVhdHVyZVJlZHVjdGlvbkJpbm5pbmcuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydEZlYXR1cmVSZWR1Y3Rpb25CaW5uaW5nKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0RmVhdHVyZVJlZHVjdGlvbkJpbm5pbmcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRGZWF0dXJlUmVkdWN0aW9uQ2x1c3RlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvRmVhdHVyZVJlZHVjdGlvbkNsdXN0ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0ZlYXR1cmVSZWR1Y3Rpb25DbHVzdGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRGZWF0dXJlUmVkdWN0aW9uQ2x1c3Rlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydEZlYXR1cmVSZWR1Y3Rpb25DbHVzdGVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0RmVhdHVyZVJlZHVjdGlvblNlbGVjdGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvRmVhdHVyZVJlZHVjdGlvblNlbGVjdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvRmVhdHVyZVJlZHVjdGlvblNlbGVjdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0RmVhdHVyZVJlZHVjdGlvblNlbGVjdGlvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydEZlYXR1cmVSZWR1Y3Rpb25TZWxlY3Rpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRGZWF0dXJlVGVtcGxhdGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0ZlYXR1cmVUZW1wbGF0ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvRmVhdHVyZVRlbXBsYXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRGZWF0dXJlVGVtcGxhdGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRGZWF0dXJlVGVtcGxhdGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRGZWF0dXJlVHlwZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvRmVhdHVyZVR5cGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0ZlYXR1cmVUeXBlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRGZWF0dXJlVHlwZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydEZlYXR1cmVUeXBlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0RmllbGQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0ZpZWxkXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9GaWVsZC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0RmllbGQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRGaWVsZCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydEZpZWxkc0luZGV4KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9GaWVsZHNJbmRleFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvRmllbGRzSW5kZXguanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydEZpZWxkc0luZGV4KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0RmllbGRzSW5kZXgoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRHZW9tZXRyeUZpZWxkc0luZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0dlb21ldHJ5RmllbGRzSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvR2VvbWV0cnlGaWVsZHNJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRHZW9tZXRyeUZpZWxkc0luZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRHZW9tZXRyeUZpZWxkc0luZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRJbWFnZUVsZW1lbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0ltYWdlRWxlbWVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvSW1hZ2VFbGVtZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRJbWFnZUVsZW1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRJbWFnZUVsZW1lbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRJbmhlcml0ZWREb21haW4oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0luaGVyaXRlZERvbWFpblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvSW5oZXJpdGVkRG9tYWluLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRJbmhlcml0ZWREb21haW4ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRJbmhlcml0ZWREb21haW4oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRLTUxTdWJsYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvS01MU3VibGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0tNTFN1YmxheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRLTUxTdWJsYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydEtNTFN1YmxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0TGFiZWxDbGFzcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvTGFiZWxDbGFzc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvTGFiZWxDbGFzcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0TGFiZWxDbGFzcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydExhYmVsQ2xhc3MoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRMYXllckZsb29ySW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvTGF5ZXJGbG9vckluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L0xheWVyRmxvb3JJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRMYXllckZsb29ySW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydExheWVyRmxvb3JJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0TGV2ZWxMYXllckluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0xldmVsTGF5ZXJJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9MZXZlbExheWVySW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0TGV2ZWxMYXllckluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRMZXZlbExheWVySW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydExvY2FsTWVkaWFFbGVtZW50U291cmNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9Mb2NhbE1lZGlhRWxlbWVudFNvdXJjZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvTG9jYWxNZWRpYUVsZW1lbnRTb3VyY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydExvY2FsTWVkaWFFbGVtZW50U291cmNlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0TG9jYWxNZWRpYUVsZW1lbnRTb3VyY2UoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRMT0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L0xPRFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvTE9ELmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRMT0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRMT0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRNYXBJbWFnZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvTWFwSW1hZ2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L01hcEltYWdlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRNYXBJbWFnZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydE1hcEltYWdlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0TW9zYWljUnVsZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvTW9zYWljUnVsZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvTW9zYWljUnVsZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0TW9zYWljUnVsZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydE1vc2FpY1J1bGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRNdWx0aWRpbWVuc2lvbmFsU3Vic2V0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9NdWx0aWRpbWVuc2lvbmFsU3Vic2V0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9NdWx0aWRpbWVuc2lvbmFsU3Vic2V0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRNdWx0aWRpbWVuc2lvbmFsU3Vic2V0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0TXVsdGlkaW1lbnNpb25hbFN1YnNldCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydE9yZGVyQnlJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9PcmRlckJ5SW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvT3JkZXJCeUluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydE9yZGVyQnlJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0T3JkZXJCeUluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRQYXJxdWV0RW5jb2RpbmdMb2NhdGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvUGFycXVldEVuY29kaW5nTG9jYXRpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1BhcnF1ZXRFbmNvZGluZ0xvY2F0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRQYXJxdWV0RW5jb2RpbmdMb2NhdGlvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFBhcnF1ZXRFbmNvZGluZ0xvY2F0aW9uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0UGFycXVldEVuY29kaW5nV2tiKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9QYXJxdWV0RW5jb2RpbmdXa2JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1BhcnF1ZXRFbmNvZGluZ1drYi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0UGFycXVldEVuY29kaW5nV2tiKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0UGFycXVldEVuY29kaW5nV2tiKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0UGl4ZWxCbG9jaygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvUGl4ZWxCbG9ja1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvUGl4ZWxCbG9jay5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0UGl4ZWxCbG9jayhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFBpeGVsQmxvY2soKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRQbGF5YmFja0luZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L1BsYXliYWNrSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvUGxheWJhY2tJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRQbGF5YmFja0luZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRQbGF5YmFja0luZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRQdWJsaXNoaW5nSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvUHVibGlzaGluZ0luZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1B1Ymxpc2hpbmdJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRQdWJsaXNoaW5nSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFB1Ymxpc2hpbmdJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0UmFuZ2VEb21haW4oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L1JhbmdlRG9tYWluXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9SYW5nZURvbWFpbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0UmFuZ2VEb21haW4ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRSYW5nZURvbWFpbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydFJhc3RlckJhbmRJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9SYXN0ZXJCYW5kSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvUmFzdGVyQmFuZEluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydFJhc3RlckJhbmRJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0UmFzdGVyQmFuZEluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRSYXN0ZXJGdW5jdGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvUmFzdGVyRnVuY3Rpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1Jhc3RlckZ1bmN0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRSYXN0ZXJGdW5jdGlvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFJhc3RlckZ1bmN0aW9uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0UmFzdGVySW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvUmFzdGVySW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvUmFzdGVySW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0UmFzdGVySW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFJhc3RlckluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRSYXN0ZXJTZW5zb3JJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9SYXN0ZXJTZW5zb3JJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9SYXN0ZXJTZW5zb3JJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRSYXN0ZXJTZW5zb3JJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0UmFzdGVyU2Vuc29ySW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydFJlbGF0aW9uc2hpcCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvUmVsYXRpb25zaGlwXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9SZWxhdGlvbnNoaXAuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydFJlbGF0aW9uc2hpcChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFJlbGF0aW9uc2hpcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydFJvdXRlU3RvcFN5bWJvbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L1JvdXRlU3RvcFN5bWJvbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1JvdXRlU3RvcFN5bWJvbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydFJvdXRlU3RvcFN5bWJvbHMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRSb3V0ZVN0b3BTeW1ib2xzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0Um91dGVTeW1ib2xzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9Sb3V0ZVN5bWJvbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1JvdXRlU3ltYm9scy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0Um91dGVTeW1ib2xzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0Um91dGVTeW1ib2xzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0U2NlbmVGaWx0ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L1NjZW5lRmlsdGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9TY2VuZUZpbHRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0U2NlbmVGaWx0ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRTY2VuZUZpbHRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydFNjZW5lTW9kaWZpY2F0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9TY2VuZU1vZGlmaWNhdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvU2NlbmVNb2RpZmljYXRpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydFNjZW5lTW9kaWZpY2F0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0U2NlbmVNb2RpZmljYXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRTY2VuZU1vZGlmaWNhdGlvbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L1NjZW5lTW9kaWZpY2F0aW9uc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvU2NlbmVNb2RpZmljYXRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRTY2VuZU1vZGlmaWNhdGlvbnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRTY2VuZU1vZGlmaWNhdGlvbnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRTaXRlTGF5ZXJJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9TaXRlTGF5ZXJJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9TaXRlTGF5ZXJJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRTaXRlTGF5ZXJJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0U2l0ZUxheWVySW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydFN1YmxheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9TdWJsYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvU3VibGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydFN1YmxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0U3VibGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRTdWJ0eXBlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9TdWJ0eXBlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9TdWJ0eXBlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRTdWJ0eXBlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0U3VidHlwZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydFN1YnR5cGVTdWJsYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvU3VidHlwZVN1YmxheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9TdWJ0eXBlU3VibGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydFN1YnR5cGVTdWJsYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFN1YnR5cGVTdWJsYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzU3VwcG9ydFRlbGVtZXRyeURhdGEoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L1RlbGVtZXRyeURhdGFcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1RlbGVtZXRyeURhdGEuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzU3VwcG9ydFRlbGVtZXRyeURhdGEocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRUZWxlbWV0cnlEYXRhKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0VGVsZW1ldHJ5RGlzcGxheSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvVGVsZW1ldHJ5RGlzcGxheVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvVGVsZW1ldHJ5RGlzcGxheS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0VGVsZW1ldHJ5RGlzcGxheShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFRlbGVtZXRyeURpc3BsYXkoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRUaWxlSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvVGlsZUluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1RpbGVJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRUaWxlSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFRpbGVJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0VGlsZU1hdHJpeFNldCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvVGlsZU1hdHJpeFNldFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvVGlsZU1hdHJpeFNldC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0VGlsZU1hdHJpeFNldChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFRpbGVNYXRyaXhTZXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRUaW1lSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvVGltZUluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1RpbWVJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRUaW1lSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFRpbWVJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0VHJhY2tJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9UcmFja0luZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1RyYWNrSW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0VHJhY2tJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0VHJhY2tJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0VHJhY2tQYXJ0SW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvVHJhY2tQYXJ0SW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvVHJhY2tQYXJ0SW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0VHJhY2tQYXJ0SW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFRyYWNrUGFydEluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRWaWRlb0VsZW1lbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L1ZpZGVvRWxlbWVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvVmlkZW9FbGVtZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRWaWRlb0VsZW1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRWaWRlb0VsZW1lbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRWaWRlb1RpbWVFeHRlbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L1ZpZGVvVGltZUV4dGVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvVmlkZW9UaW1lRXh0ZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRWaWRlb1RpbWVFeHRlbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1N1cHBvcnRWaWRlb1RpbWVFeHRlbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1ZpZXdzaGVkTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9WaWV3c2hlZExheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvVmlld3NoZWRMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNWaWV3c2hlZExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNWaWV3c2hlZExheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNWb3hlbFZveGVsRHluYW1pY1NlY3Rpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy92b3hlbC9Wb3hlbER5bmFtaWNTZWN0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvdm94ZWwvVm94ZWxEeW5hbWljU2VjdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNWb3hlbFZveGVsRHluYW1pY1NlY3Rpb24ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1ZveGVsVm94ZWxEeW5hbWljU2VjdGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzVm94ZWxWb3hlbFNsaWNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvdm94ZWwvVm94ZWxTbGljZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3ZveGVsL1ZveGVsU2xpY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzVm94ZWxWb3hlbFNsaWNlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNWb3hlbFZveGVsU2xpY2UoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1ZveGVsVm94ZWxUcmFuc2ZlckZ1bmN0aW9uU3R5bGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy92b3hlbC9Wb3hlbFRyYW5zZmVyRnVuY3Rpb25TdHlsZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3ZveGVsL1ZveGVsVHJhbnNmZXJGdW5jdGlvblN0eWxlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1ZveGVsVm94ZWxUcmFuc2ZlckZ1bmN0aW9uU3R5bGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1ZveGVsVm94ZWxUcmFuc2ZlckZ1bmN0aW9uU3R5bGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1ZveGVsVm94ZWxWYXJpYWJsZVN0eWxlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvdm94ZWwvVm94ZWxWYXJpYWJsZVN0eWxlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvdm94ZWwvVm94ZWxWYXJpYWJsZVN0eWxlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1ZveGVsVm94ZWxWYXJpYWJsZVN0eWxlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNWb3hlbFZveGVsVmFyaWFibGVTdHlsZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzVm94ZWxWb3hlbFZvbHVtZVN0eWxlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvdm94ZWwvVm94ZWxWb2x1bWVTdHlsZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3ZveGVsL1ZveGVsVm9sdW1lU3R5bGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzVm94ZWxWb3hlbFZvbHVtZVN0eWxlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNWb3hlbFZveGVsVm9sdW1lU3R5bGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRXTVNTdWJsYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvV01TU3VibGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1dNU1N1YmxheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1N1cHBvcnRXTVNTdWJsYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzU3VwcG9ydFdNU1N1YmxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0V01UU1N0eWxlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9XTVRTU3R5bGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1dNVFNTdHlsZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0V01UU1N0eWxlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0V01UU1N0eWxlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNTdXBwb3J0V01UU1N1YmxheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9XTVRTU3VibGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L1dNVFNTdWJsYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNTdXBwb3J0V01UU1N1YmxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNTdXBwb3J0V01UU1N1YmxheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNUaWxlTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9UaWxlTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9UaWxlTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzVGlsZUxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNUaWxlTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1Vua25vd25MYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL1Vua25vd25MYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL1Vua25vd25MYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNVbmtub3duTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1Vua25vd25MYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzVW5zdXBwb3J0ZWRMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL1Vuc3VwcG9ydGVkTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9VbnN1cHBvcnRlZExheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1Vuc3VwcG9ydGVkTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1Vuc3VwcG9ydGVkTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1ZlY3RvclRpbGVMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL1ZlY3RvclRpbGVMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL1ZlY3RvclRpbGVMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNWZWN0b3JUaWxlTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1ZlY3RvclRpbGVMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzVmlkZW9MYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL1ZpZGVvTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9WaWRlb0xheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xheWVyc1ZpZGVvTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1ZpZGVvTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1ZveGVsTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9Wb3hlbExheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvVm94ZWxMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNWb3hlbExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNWb3hlbExheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNXQ1NMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL1dDU0xheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvV0NTTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzV0NTTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1dDU0xheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNXZWJUaWxlTGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9XZWJUaWxlTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9XZWJUaWxlTGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGF5ZXJzV2ViVGlsZUxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMYXllcnNXZWJUaWxlTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1dGU0xheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvV0ZTTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9XRlNMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNXRlNMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzV0ZTTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1dNU0xheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvV01TTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9XTVNMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNXTVNMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGF5ZXJzV01TTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1dNVFNMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL1dNVFNMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL1dNVFNMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdMYXllcnNXTVRTTGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExheWVyc1dNVFNMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGlua0NoYXJ0Q2hyb25vbG9naWNhbExheW91dFNldHRpbmdzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9saW5rQ2hhcnQvQ2hyb25vbG9naWNhbExheW91dFNldHRpbmdzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9saW5rQ2hhcnQvQ2hyb25vbG9naWNhbExheW91dFNldHRpbmdzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xpbmtDaGFydENocm9ub2xvZ2ljYWxMYXlvdXRTZXR0aW5ncyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGlua0NoYXJ0Q2hyb25vbG9naWNhbExheW91dFNldHRpbmdzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMaW5rQ2hhcnRMYXlvdXRTZXR0aW5ncygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGlua0NoYXJ0L0xheW91dFNldHRpbmdzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9saW5rQ2hhcnQvTGF5b3V0U2V0dGluZ3MuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGlua0NoYXJ0TGF5b3V0U2V0dGluZ3MocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydExpbmtDaGFydExheW91dFNldHRpbmdzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMaW5rQ2hhcnRMaW5rQ2hhcnRQcm9wZXJ0aWVzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9saW5rQ2hhcnQvTGlua0NoYXJ0UHJvcGVydGllc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGlua0NoYXJ0L0xpbmtDaGFydFByb3BlcnRpZXMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGlua0NoYXJ0TGlua0NoYXJ0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGlua0NoYXJ0TGlua0NoYXJ0UHJvcGVydGllcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGlua0NoYXJ0Tm9uc3BhdGlhbERhdGFEaXNwbGF5KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9saW5rQ2hhcnQvTm9uc3BhdGlhbERhdGFEaXNwbGF5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9saW5rQ2hhcnQvTm9uc3BhdGlhbERhdGFEaXNwbGF5LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld0xpbmtDaGFydE5vbnNwYXRpYWxEYXRhRGlzcGxheShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TGlua0NoYXJ0Tm9uc3BhdGlhbERhdGFEaXNwbGF5KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMaW5rQ2hhcnRPcmdhbmljTGF5b3V0U2V0dGluZ3MoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xpbmtDaGFydC9PcmdhbmljTGF5b3V0U2V0dGluZ3NcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xpbmtDaGFydC9PcmdhbmljTGF5b3V0U2V0dGluZ3MuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TGlua0NoYXJ0T3JnYW5pY0xheW91dFNldHRpbmdzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRMaW5rQ2hhcnRPcmdhbmljTGF5b3V0U2V0dGluZ3MoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydE1hcCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvTWFwXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9NYXAuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TWFwKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRNYXAoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydE5ldHdvcmtzTmV0d29yaygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbmV0d29ya3MvTmV0d29ya1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbmV0d29ya3MvTmV0d29yay5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdOZXR3b3Jrc05ldHdvcmsocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydE5ldHdvcmtzTmV0d29yaygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TmV0d29ya3NVdGlsaXR5TmV0d29yaygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbmV0d29ya3MvVXRpbGl0eU5ldHdvcmtcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL25ldHdvcmtzL1V0aWxpdHlOZXR3b3JrLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld05ldHdvcmtzVXRpbGl0eU5ldHdvcmsocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydE5ldHdvcmtzVXRpbGl0eU5ldHdvcmsoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydE5ldHdvcmtzU3VwcG9ydE5hbWVkVHJhY2VDb25maWd1cmF0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9uZXR3b3Jrcy9zdXBwb3J0L05hbWVkVHJhY2VDb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9uZXR3b3Jrcy9zdXBwb3J0L05hbWVkVHJhY2VDb25maWd1cmF0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld05ldHdvcmtzU3VwcG9ydE5hbWVkVHJhY2VDb25maWd1cmF0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnROZXR3b3Jrc1N1cHBvcnROYW1lZFRyYWNlQ29uZmlndXJhdGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TmV0d29ya3NTdXBwb3J0TmV0d29ya1N5c3RlbUxheWVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbmV0d29ya3Mvc3VwcG9ydC9OZXR3b3JrU3lzdGVtTGF5ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9uZXR3b3Jrcy9zdXBwb3J0L05ldHdvcmtTeXN0ZW1MYXllcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TmV0d29ya3NTdXBwb3J0TmV0d29ya1N5c3RlbUxheWVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TmV0d29ya3NTdXBwb3J0TmV0d29ya1N5c3RlbUxheWVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TmV0d29ya3NTdXBwb3J0VGVybWluYWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL25ldHdvcmtzL3N1cHBvcnQvVGVybWluYWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL25ldHdvcmtzL3N1cHBvcnQvVGVybWluYWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TmV0d29ya3NTdXBwb3J0VGVybWluYWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydE5ldHdvcmtzU3VwcG9ydFRlcm1pbmFsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnROZXR3b3Jrc1N1cHBvcnRUZXJtaW5hbENvbmZpZ3VyYXRpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL25ldHdvcmtzL3N1cHBvcnQvVGVybWluYWxDb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9uZXR3b3Jrcy9zdXBwb3J0L1Rlcm1pbmFsQ29uZmlndXJhdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdOZXR3b3Jrc1N1cHBvcnRUZXJtaW5hbENvbmZpZ3VyYXRpb24ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydE5ldHdvcmtzU3VwcG9ydFRlcm1pbmFsQ29uZmlndXJhdGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TmV0d29ya3NTdXBwb3J0VG9wb2xvZ3lWYWxpZGF0aW9uSm9iSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbmV0d29ya3Mvc3VwcG9ydC9Ub3BvbG9neVZhbGlkYXRpb25Kb2JJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9uZXR3b3Jrcy9zdXBwb3J0L1RvcG9sb2d5VmFsaWRhdGlvbkpvYkluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TmV0d29ya3NTdXBwb3J0VG9wb2xvZ3lWYWxpZGF0aW9uSm9iSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TmV0d29ya3NTdXBwb3J0VG9wb2xvZ3lWYWxpZGF0aW9uSm9iSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TmV0d29ya3NTdXBwb3J0VHJhY2VDb25maWd1cmF0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9uZXR3b3Jrcy9zdXBwb3J0L1RyYWNlQ29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbmV0d29ya3Mvc3VwcG9ydC9UcmFjZUNvbmZpZ3VyYXRpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3TmV0d29ya3NTdXBwb3J0VHJhY2VDb25maWd1cmF0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnROZXR3b3Jrc1N1cHBvcnRUcmFjZUNvbmZpZ3VyYXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydE5ldHdvcmtzU3VwcG9ydFRyYWNlSm9iSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbmV0d29ya3Mvc3VwcG9ydC9UcmFjZUpvYkluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL25ldHdvcmtzL3N1cHBvcnQvVHJhY2VKb2JJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld05ldHdvcmtzU3VwcG9ydFRyYWNlSm9iSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TmV0d29ya3NTdXBwb3J0VHJhY2VKb2JJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnROZXR3b3Jrc1N1cHBvcnRVTlRyYWNlQ29uZmlndXJhdGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbmV0d29ya3Mvc3VwcG9ydC9VTlRyYWNlQ29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbmV0d29ya3Mvc3VwcG9ydC9VTlRyYWNlQ29uZmlndXJhdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdOZXR3b3Jrc1N1cHBvcnRVTlRyYWNlQ29uZmlndXJhdGlvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0TmV0d29ya3NTdXBwb3J0VU5UcmFjZUNvbmZpZ3VyYXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvcHVwQ29udGVudEF0dGFjaG1lbnRzQ29udGVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvY29udGVudC9BdHRhY2htZW50c0NvbnRlbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcHVwL2NvbnRlbnQvQXR0YWNobWVudHNDb250ZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwQ29udGVudEF0dGFjaG1lbnRzQ29udGVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBDb250ZW50QXR0YWNobWVudHNDb250ZW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3B1cENvbnRlbnRCYXJDaGFydE1lZGlhSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvY29udGVudC9CYXJDaGFydE1lZGlhSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvY29udGVudC9CYXJDaGFydE1lZGlhSW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3B1cENvbnRlbnRCYXJDaGFydE1lZGlhSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBDb250ZW50QmFyQ2hhcnRNZWRpYUluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvcHVwQ29udGVudENvbHVtbkNoYXJ0TWVkaWFJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3B1cC9jb250ZW50L0NvbHVtbkNoYXJ0TWVkaWFJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3B1cC9jb250ZW50L0NvbHVtbkNoYXJ0TWVkaWFJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwQ29udGVudENvbHVtbkNoYXJ0TWVkaWFJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cENvbnRlbnRDb2x1bW5DaGFydE1lZGlhSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBDb250ZW50Q29udGVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvY29udGVudC9Db250ZW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3B1cC9jb250ZW50L0NvbnRlbnQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9wdXBDb250ZW50Q29udGVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBDb250ZW50Q29udGVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBDb250ZW50Q3VzdG9tQ29udGVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvY29udGVudC9DdXN0b21Db250ZW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3B1cC9jb250ZW50L0N1c3RvbUNvbnRlbnQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9wdXBDb250ZW50Q3VzdG9tQ29udGVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBDb250ZW50Q3VzdG9tQ29udGVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBDb250ZW50RXhwcmVzc2lvbkNvbnRlbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcHVwL2NvbnRlbnQvRXhwcmVzc2lvbkNvbnRlbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcHVwL2NvbnRlbnQvRXhwcmVzc2lvbkNvbnRlbnQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9wdXBDb250ZW50RXhwcmVzc2lvbkNvbnRlbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFBvcHVwQ29udGVudEV4cHJlc3Npb25Db250ZW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3B1cENvbnRlbnRGaWVsZHNDb250ZW50KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3B1cC9jb250ZW50L0ZpZWxkc0NvbnRlbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcHVwL2NvbnRlbnQvRmllbGRzQ29udGVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3B1cENvbnRlbnRGaWVsZHNDb250ZW50KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cENvbnRlbnRGaWVsZHNDb250ZW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3B1cENvbnRlbnRJbWFnZU1lZGlhSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvY29udGVudC9JbWFnZU1lZGlhSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvY29udGVudC9JbWFnZU1lZGlhSW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3B1cENvbnRlbnRJbWFnZU1lZGlhSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBDb250ZW50SW1hZ2VNZWRpYUluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvcHVwQ29udGVudExpbmVDaGFydE1lZGlhSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvY29udGVudC9MaW5lQ2hhcnRNZWRpYUluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcHVwL2NvbnRlbnQvTGluZUNoYXJ0TWVkaWFJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwQ29udGVudExpbmVDaGFydE1lZGlhSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBDb250ZW50TGluZUNoYXJ0TWVkaWFJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3B1cENvbnRlbnRNZWRpYUNvbnRlbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcHVwL2NvbnRlbnQvTWVkaWFDb250ZW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3B1cC9jb250ZW50L01lZGlhQ29udGVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3B1cENvbnRlbnRNZWRpYUNvbnRlbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFBvcHVwQ29udGVudE1lZGlhQ29udGVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBDb250ZW50UGllQ2hhcnRNZWRpYUluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcHVwL2NvbnRlbnQvUGllQ2hhcnRNZWRpYUluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcHVwL2NvbnRlbnQvUGllQ2hhcnRNZWRpYUluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9wdXBDb250ZW50UGllQ2hhcnRNZWRpYUluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFBvcHVwQ29udGVudFBpZUNoYXJ0TWVkaWFJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3B1cENvbnRlbnRSZWxhdGlvbnNoaXBDb250ZW50KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3B1cC9jb250ZW50L1JlbGF0aW9uc2hpcENvbnRlbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcHVwL2NvbnRlbnQvUmVsYXRpb25zaGlwQ29udGVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3B1cENvbnRlbnRSZWxhdGlvbnNoaXBDb250ZW50KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cENvbnRlbnRSZWxhdGlvbnNoaXBDb250ZW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3B1cENvbnRlbnRTdXBwb3J0Q2hhcnRNZWRpYUluZm9WYWx1ZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvY29udGVudC9zdXBwb3J0L0NoYXJ0TWVkaWFJbmZvVmFsdWVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcHVwL2NvbnRlbnQvc3VwcG9ydC9DaGFydE1lZGlhSW5mb1ZhbHVlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwQ29udGVudFN1cHBvcnRDaGFydE1lZGlhSW5mb1ZhbHVlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cENvbnRlbnRTdXBwb3J0Q2hhcnRNZWRpYUluZm9WYWx1ZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBDb250ZW50U3VwcG9ydENoYXJ0TWVkaWFJbmZvVmFsdWVTZXJpZXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcHVwL2NvbnRlbnQvc3VwcG9ydC9DaGFydE1lZGlhSW5mb1ZhbHVlU2VyaWVzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3B1cC9jb250ZW50L3N1cHBvcnQvQ2hhcnRNZWRpYUluZm9WYWx1ZVNlcmllcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3B1cENvbnRlbnRTdXBwb3J0Q2hhcnRNZWRpYUluZm9WYWx1ZVNlcmllcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBDb250ZW50U3VwcG9ydENoYXJ0TWVkaWFJbmZvVmFsdWVTZXJpZXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvcHVwQ29udGVudFN1cHBvcnRJbWFnZU1lZGlhSW5mb1ZhbHVlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3B1cC9jb250ZW50L3N1cHBvcnQvSW1hZ2VNZWRpYUluZm9WYWx1ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvY29udGVudC9zdXBwb3J0L0ltYWdlTWVkaWFJbmZvVmFsdWUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9wdXBDb250ZW50U3VwcG9ydEltYWdlTWVkaWFJbmZvVmFsdWUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFBvcHVwQ29udGVudFN1cHBvcnRJbWFnZU1lZGlhSW5mb1ZhbHVlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3B1cENvbnRlbnRUZXh0Q29udGVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvY29udGVudC9UZXh0Q29udGVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvY29udGVudC9UZXh0Q29udGVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3B1cENvbnRlbnRUZXh0Q29udGVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBDb250ZW50VGV4dENvbnRlbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvcHVwQ29udGVudFV0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zQ29udGVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvY29udGVudC9VdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uc0NvbnRlbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcHVwL2NvbnRlbnQvVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnNDb250ZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwQ29udGVudFV0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zQ29udGVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBDb250ZW50VXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnNDb250ZW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3B1cEVsZW1lbnRFeHByZXNzaW9uSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvRWxlbWVudEV4cHJlc3Npb25JbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3B1cC9FbGVtZW50RXhwcmVzc2lvbkluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9wdXBFbGVtZW50RXhwcmVzc2lvbkluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFBvcHVwRWxlbWVudEV4cHJlc3Npb25JbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3B1cEV4cHJlc3Npb25JbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3B1cC9FeHByZXNzaW9uSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvRXhwcmVzc2lvbkluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9wdXBFeHByZXNzaW9uSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBFeHByZXNzaW9uSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBGaWVsZEluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcHVwL0ZpZWxkSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvRmllbGRJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwRmllbGRJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cEZpZWxkSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBMYXllck9wdGlvbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcHVwL0xheWVyT3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvTGF5ZXJPcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwTGF5ZXJPcHRpb25zKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cExheWVyT3B0aW9ucygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBSZWxhdGVkUmVjb3Jkc0luZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcHVwL1JlbGF0ZWRSZWNvcmRzSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvUmVsYXRlZFJlY29yZHNJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwUmVsYXRlZFJlY29yZHNJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cFJlbGF0ZWRSZWNvcmRzSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBTdXBwb3J0QXR0YWNobWVudHNPcmRlckJ5SW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9wdXAvc3VwcG9ydC9BdHRhY2htZW50c09yZGVyQnlJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3B1cC9zdXBwb3J0L0F0dGFjaG1lbnRzT3JkZXJCeUluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9wdXBTdXBwb3J0QXR0YWNobWVudHNPcmRlckJ5SW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9wdXBTdXBwb3J0QXR0YWNobWVudHNPcmRlckJ5SW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBTdXBwb3J0RmllbGRJbmZvRm9ybWF0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3B1cC9zdXBwb3J0L0ZpZWxkSW5mb0Zvcm1hdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvc3VwcG9ydC9GaWVsZEluZm9Gb3JtYXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9wdXBTdXBwb3J0RmllbGRJbmZvRm9ybWF0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cFN1cHBvcnRGaWVsZEluZm9Gb3JtYXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvcHVwU3VwcG9ydFJlbGF0ZWRSZWNvcmRzSW5mb0ZpZWxkT3JkZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcHVwL3N1cHBvcnQvUmVsYXRlZFJlY29yZHNJbmZvRmllbGRPcmRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9wdXAvc3VwcG9ydC9SZWxhdGVkUmVjb3Jkc0luZm9GaWVsZE9yZGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwU3VwcG9ydFJlbGF0ZWRSZWNvcmRzSW5mb0ZpZWxkT3JkZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFBvcHVwU3VwcG9ydFJlbGF0ZWRSZWNvcmRzSW5mb0ZpZWxkT3JkZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvcHVwU3VwcG9ydFV0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25UeXBlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3B1cC9zdXBwb3J0L1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25UeXBlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3B1cC9zdXBwb3J0L1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25UeXBlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcHVwU3VwcG9ydFV0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25UeXBlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cFN1cHBvcnRVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uVHlwZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBUZW1wbGF0ZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvUG9wdXBUZW1wbGF0ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvUG9wdXBUZW1wbGF0ZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3B1cFRlbXBsYXRlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3B1cFRlbXBsYXRlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3J0YWxQb3J0YWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcnRhbC9Qb3J0YWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcnRhbC9Qb3J0YWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9ydGFsUG9ydGFsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3J0YWxQb3J0YWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvcnRhbFBvcnRhbEZvbGRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9ydGFsL1BvcnRhbEZvbGRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9ydGFsL1BvcnRhbEZvbGRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3J0YWxQb3J0YWxGb2xkZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFBvcnRhbFBvcnRhbEZvbGRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9ydGFsUG9ydGFsR3JvdXAoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcnRhbC9Qb3J0YWxHcm91cFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9ydGFsL1BvcnRhbEdyb3VwLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcnRhbFBvcnRhbEdyb3VwKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3J0YWxQb3J0YWxHcm91cCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9ydGFsUG9ydGFsSXRlbSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9ydGFsL1BvcnRhbEl0ZW1cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvcnRhbC9Qb3J0YWxJdGVtLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcnRhbFBvcnRhbEl0ZW0ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFBvcnRhbFBvcnRhbEl0ZW0oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvcnRhbFBvcnRhbEl0ZW1SZXNvdXJjZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcG9ydGFsL1BvcnRhbEl0ZW1SZXNvdXJjZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9ydGFsL1BvcnRhbEl0ZW1SZXNvdXJjZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdQb3J0YWxQb3J0YWxJdGVtUmVzb3VyY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFBvcnRhbFBvcnRhbEl0ZW1SZXNvdXJjZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9ydGFsUG9ydGFsUXVlcnlQYXJhbXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcnRhbC9Qb3J0YWxRdWVyeVBhcmFtc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9ydGFsL1BvcnRhbFF1ZXJ5UGFyYW1zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcnRhbFBvcnRhbFF1ZXJ5UGFyYW1zKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3J0YWxQb3J0YWxRdWVyeVBhcmFtcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9ydGFsUG9ydGFsUXVlcnlSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvcnRhbC9Qb3J0YWxRdWVyeVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9ydGFsL1BvcnRhbFF1ZXJ5UmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcnRhbFBvcnRhbFF1ZXJ5UmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRQb3J0YWxQb3J0YWxRdWVyeVJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9ydGFsUG9ydGFsUmF0aW5nKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3J0YWwvUG9ydGFsUmF0aW5nXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3J0YWwvUG9ydGFsUmF0aW5nLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1BvcnRhbFBvcnRhbFJhdGluZyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9ydGFsUG9ydGFsUmF0aW5nKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRQb3J0YWxQb3J0YWxVc2VyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3J0YWwvUG9ydGFsVXNlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcG9ydGFsL1BvcnRhbFVzZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UG9ydGFsUG9ydGFsVXNlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UG9ydGFsUG9ydGFsVXNlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzQ2xhc3NCcmVha3NSZW5kZXJlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL0NsYXNzQnJlYWtzUmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9DbGFzc0JyZWFrc1JlbmRlcmVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc0NsYXNzQnJlYWtzUmVuZGVyZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc0NsYXNzQnJlYWtzUmVuZGVyZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc0RpY3Rpb25hcnlSZW5kZXJlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL0RpY3Rpb25hcnlSZW5kZXJlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL0RpY3Rpb25hcnlSZW5kZXJlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNEaWN0aW9uYXJ5UmVuZGVyZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc0RpY3Rpb25hcnlSZW5kZXJlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzRG90RGVuc2l0eVJlbmRlcmVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvRG90RGVuc2l0eVJlbmRlcmVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvRG90RGVuc2l0eVJlbmRlcmVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc0RvdERlbnNpdHlSZW5kZXJlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzRG90RGVuc2l0eVJlbmRlcmVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNGbG93UmVuZGVyZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy9GbG93UmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9GbG93UmVuZGVyZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzRmxvd1JlbmRlcmVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNGbG93UmVuZGVyZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc0hlYXRtYXBSZW5kZXJlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL0hlYXRtYXBSZW5kZXJlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL0hlYXRtYXBSZW5kZXJlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNIZWF0bWFwUmVuZGVyZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc0hlYXRtYXBSZW5kZXJlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzUGllQ2hhcnRSZW5kZXJlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL1BpZUNoYXJ0UmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9QaWVDaGFydFJlbmRlcmVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1BpZUNoYXJ0UmVuZGVyZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1BpZUNoYXJ0UmVuZGVyZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1BvaW50Q2xvdWRDbGFzc0JyZWFrc1JlbmRlcmVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvUG9pbnRDbG91ZENsYXNzQnJlYWtzUmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9Qb2ludENsb3VkQ2xhc3NCcmVha3NSZW5kZXJlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNQb2ludENsb3VkQ2xhc3NCcmVha3NSZW5kZXJlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzUG9pbnRDbG91ZENsYXNzQnJlYWtzUmVuZGVyZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1BvaW50Q2xvdWRSZW5kZXJlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL1BvaW50Q2xvdWRSZW5kZXJlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL1BvaW50Q2xvdWRSZW5kZXJlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNQb2ludENsb3VkUmVuZGVyZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1BvaW50Q2xvdWRSZW5kZXJlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzUG9pbnRDbG91ZFJHQlJlbmRlcmVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvUG9pbnRDbG91ZFJHQlJlbmRlcmVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvUG9pbnRDbG91ZFJHQlJlbmRlcmVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1BvaW50Q2xvdWRSR0JSZW5kZXJlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzUG9pbnRDbG91ZFJHQlJlbmRlcmVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNQb2ludENsb3VkU3RyZXRjaFJlbmRlcmVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvUG9pbnRDbG91ZFN0cmV0Y2hSZW5kZXJlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL1BvaW50Q2xvdWRTdHJldGNoUmVuZGVyZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzUG9pbnRDbG91ZFN0cmV0Y2hSZW5kZXJlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzUG9pbnRDbG91ZFN0cmV0Y2hSZW5kZXJlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzUG9pbnRDbG91ZFVuaXF1ZVZhbHVlUmVuZGVyZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy9Qb2ludENsb3VkVW5pcXVlVmFsdWVSZW5kZXJlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL1BvaW50Q2xvdWRVbmlxdWVWYWx1ZVJlbmRlcmVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1BvaW50Q2xvdWRVbmlxdWVWYWx1ZVJlbmRlcmVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNQb2ludENsb3VkVW5pcXVlVmFsdWVSZW5kZXJlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzUmFzdGVyQ29sb3JtYXBSZW5kZXJlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL1Jhc3RlckNvbG9ybWFwUmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9SYXN0ZXJDb2xvcm1hcFJlbmRlcmVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1Jhc3RlckNvbG9ybWFwUmVuZGVyZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1Jhc3RlckNvbG9ybWFwUmVuZGVyZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRSYXN0ZXJQcmVzZXRSZW5kZXJlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL3N1cHBvcnQvUmFzdGVyUHJlc2V0UmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9zdXBwb3J0L1Jhc3RlclByZXNldFJlbmRlcmVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1N1cHBvcnRSYXN0ZXJQcmVzZXRSZW5kZXJlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzU3VwcG9ydFJhc3RlclByZXNldFJlbmRlcmVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNSYXN0ZXJTaGFkZWRSZWxpZWZSZW5kZXJlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL1Jhc3RlclNoYWRlZFJlbGllZlJlbmRlcmVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvUmFzdGVyU2hhZGVkUmVsaWVmUmVuZGVyZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzUmFzdGVyU2hhZGVkUmVsaWVmUmVuZGVyZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1Jhc3RlclNoYWRlZFJlbGllZlJlbmRlcmVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNSYXN0ZXJTdHJldGNoUmVuZGVyZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy9SYXN0ZXJTdHJldGNoUmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9SYXN0ZXJTdHJldGNoUmVuZGVyZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzUmFzdGVyU3RyZXRjaFJlbmRlcmVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNSYXN0ZXJTdHJldGNoUmVuZGVyZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1JlbmRlcmVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvUmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9SZW5kZXJlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNSZW5kZXJlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzUmVuZGVyZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1NpbXBsZVJlbmRlcmVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvU2ltcGxlUmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9TaW1wbGVSZW5kZXJlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNTaW1wbGVSZW5kZXJlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzU2ltcGxlUmVuZGVyZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRBdHRyaWJ1dGVDb2xvckluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy9zdXBwb3J0L0F0dHJpYnV0ZUNvbG9ySW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL3N1cHBvcnQvQXR0cmlidXRlQ29sb3JJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1N1cHBvcnRBdHRyaWJ1dGVDb2xvckluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1N1cHBvcnRBdHRyaWJ1dGVDb2xvckluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRBdXRob3JpbmdJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvc3VwcG9ydC9BdXRob3JpbmdJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvc3VwcG9ydC9BdXRob3JpbmdJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1N1cHBvcnRBdXRob3JpbmdJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0QXV0aG9yaW5nSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzU3VwcG9ydEF1dGhvcmluZ0luZm9WaXN1YWxWYXJpYWJsZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL3N1cHBvcnQvQXV0aG9yaW5nSW5mb1Zpc3VhbFZhcmlhYmxlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvc3VwcG9ydC9BdXRob3JpbmdJbmZvVmlzdWFsVmFyaWFibGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzU3VwcG9ydEF1dGhvcmluZ0luZm9WaXN1YWxWYXJpYWJsZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzU3VwcG9ydEF1dGhvcmluZ0luZm9WaXN1YWxWYXJpYWJsZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzU3VwcG9ydENsYXNzQnJlYWtJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvc3VwcG9ydC9DbGFzc0JyZWFrSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL3N1cHBvcnQvQ2xhc3NCcmVha0luZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzU3VwcG9ydENsYXNzQnJlYWtJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0Q2xhc3NCcmVha0luZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRDb2xvcm1hcEluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy9zdXBwb3J0L0NvbG9ybWFwSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL3N1cHBvcnQvQ29sb3JtYXBJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1N1cHBvcnRDb2xvcm1hcEluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1N1cHBvcnRDb2xvcm1hcEluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRIZWF0bWFwQ29sb3JTdG9wKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvc3VwcG9ydC9IZWF0bWFwQ29sb3JTdG9wXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvc3VwcG9ydC9IZWF0bWFwQ29sb3JTdG9wLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1N1cHBvcnRIZWF0bWFwQ29sb3JTdG9wKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0SGVhdG1hcENvbG9yU3RvcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzU3VwcG9ydFVuaXF1ZVZhbHVlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvc3VwcG9ydC9VbmlxdWVWYWx1ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL3N1cHBvcnQvVW5pcXVlVmFsdWUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzU3VwcG9ydFVuaXF1ZVZhbHVlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0VW5pcXVlVmFsdWUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRVbmlxdWVWYWx1ZUNsYXNzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvc3VwcG9ydC9VbmlxdWVWYWx1ZUNsYXNzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvc3VwcG9ydC9VbmlxdWVWYWx1ZUNsYXNzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1N1cHBvcnRVbmlxdWVWYWx1ZUNsYXNzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0VW5pcXVlVmFsdWVDbGFzcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzU3VwcG9ydFVuaXF1ZVZhbHVlR3JvdXAoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy9zdXBwb3J0L1VuaXF1ZVZhbHVlR3JvdXBcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9zdXBwb3J0L1VuaXF1ZVZhbHVlR3JvdXAuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzU3VwcG9ydFVuaXF1ZVZhbHVlR3JvdXAocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1N1cHBvcnRVbmlxdWVWYWx1ZUdyb3VwKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0VW5pcXVlVmFsdWVJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvc3VwcG9ydC9VbmlxdWVWYWx1ZUluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9zdXBwb3J0L1VuaXF1ZVZhbHVlSW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNTdXBwb3J0VW5pcXVlVmFsdWVJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0VW5pcXVlVmFsdWVJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNVbmlxdWVWYWx1ZVJlbmRlcmVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvVW5pcXVlVmFsdWVSZW5kZXJlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL1VuaXF1ZVZhbHVlUmVuZGVyZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzVW5pcXVlVmFsdWVSZW5kZXJlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzVW5pcXVlVmFsdWVSZW5kZXJlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzVmVjdG9yRmllbGRSZW5kZXJlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL1ZlY3RvckZpZWxkUmVuZGVyZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9WZWN0b3JGaWVsZFJlbmRlcmVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1ZlY3RvckZpZWxkUmVuZGVyZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1ZlY3RvckZpZWxkUmVuZGVyZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc0NvbG9yVmFyaWFibGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvQ29sb3JWYXJpYWJsZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVuZGVyZXJzL3Zpc3VhbFZhcmlhYmxlcy9Db2xvclZhcmlhYmxlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc0NvbG9yVmFyaWFibGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc0NvbG9yVmFyaWFibGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc09wYWNpdHlWYXJpYWJsZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVuZGVyZXJzL3Zpc3VhbFZhcmlhYmxlcy9PcGFjaXR5VmFyaWFibGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvT3BhY2l0eVZhcmlhYmxlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1JlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc09wYWNpdHlWYXJpYWJsZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzT3BhY2l0eVZhcmlhYmxlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNSb3RhdGlvblZhcmlhYmxlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvdmlzdWFsVmFyaWFibGVzL1JvdGF0aW9uVmFyaWFibGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvUm90YXRpb25WYXJpYWJsZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNSb3RhdGlvblZhcmlhYmxlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNSb3RhdGlvblZhcmlhYmxlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNTaXplVmFyaWFibGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvU2l6ZVZhcmlhYmxlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvdmlzdWFsVmFyaWFibGVzL1NpemVWYXJpYWJsZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNTaXplVmFyaWFibGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1NpemVWYXJpYWJsZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzU3VwcG9ydENvbG9yU2l6ZVN0b3AoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvc3VwcG9ydC9Db2xvclNpemVTdG9wXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvdmlzdWFsVmFyaWFibGVzL3N1cHBvcnQvQ29sb3JTaXplU3RvcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNTdXBwb3J0Q29sb3JTaXplU3RvcChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzU3VwcG9ydENvbG9yU2l6ZVN0b3AoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1N1cHBvcnRDb2xvclN0b3AoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvc3VwcG9ydC9Db2xvclN0b3BcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvc3VwcG9ydC9Db2xvclN0b3AuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzU3VwcG9ydENvbG9yU3RvcChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzU3VwcG9ydENvbG9yU3RvcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzU3VwcG9ydE9wYWNpdHlTdG9wKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvdmlzdWFsVmFyaWFibGVzL3N1cHBvcnQvT3BhY2l0eVN0b3BcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvc3VwcG9ydC9PcGFjaXR5U3RvcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNTdXBwb3J0T3BhY2l0eVN0b3AocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1N1cHBvcnRPcGFjaXR5U3RvcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzU3VwcG9ydFNpemVTdG9wKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvdmlzdWFsVmFyaWFibGVzL3N1cHBvcnQvU2l6ZVN0b3BcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvc3VwcG9ydC9TaXplU3RvcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNTdXBwb3J0U2l6ZVN0b3AocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1N1cHBvcnRTaXplU3RvcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzVmlzdWFsVmFyaWFibGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvVmlzdWFsVmFyaWFibGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy92aXN1YWxWYXJpYWJsZXMvVmlzdWFsVmFyaWFibGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzVmlzdWFsVmFyaWFibGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1Zpc3VhbFZhcmlhYmxlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0RmVhdHVyZVNlcnZpY2VGZWF0dXJlU2VydmljZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9mZWF0dXJlU2VydmljZS9GZWF0dXJlU2VydmljZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9mZWF0dXJlU2VydmljZS9GZWF0dXJlU2VydmljZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0RmVhdHVyZVNlcnZpY2VGZWF0dXJlU2VydmljZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEZlYXR1cmVTZXJ2aWNlRmVhdHVyZVNlcnZpY2UoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaERhdGFNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9EYXRhTW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvRGF0YU1vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaERhdGFNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoRGF0YU1vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhFbnRpdHkoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvRW50aXR5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0VudGl0eS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhFbnRpdHkocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEVudGl0eSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoRW50aXR5VHlwZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9FbnRpdHlUeXBlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0VudGl0eVR5cGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoRW50aXR5VHlwZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoRW50aXR5VHlwZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoRmllbGRJbmRleCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9GaWVsZEluZGV4XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0ZpZWxkSW5kZXguanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoRmllbGRJbmRleChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoRmllbGRJbmRleCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhBZGROYW1lZFR5cGVzUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoQWRkTmFtZWRUeXBlc1Jlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaEFkZE5hbWVkVHlwZXNSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhBZGROYW1lZFR5cGVzUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFkZE5hbWVkVHlwZXNSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoQWRkRmllbGRJbmRleFJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaEFkZEZpZWxkSW5kZXhSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhBZGRGaWVsZEluZGV4UmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaEdyYXBoQWRkRmllbGRJbmRleFJlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhBZGRGaWVsZEluZGV4UmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFkZFByb3BlcnR5UmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoQWRkUHJvcGVydHlSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhBZGRQcm9wZXJ0eVJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFkZFByb3BlcnR5UmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFkZFByb3BlcnR5UmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFwcGx5RWRpdHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhBcHBseUVkaXRzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoQXBwbHlFZGl0cy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFwcGx5RWRpdHMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoQXBwbHlFZGl0cygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhBcHBseUVkaXRzUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoQXBwbHlFZGl0c1Jlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaEFwcGx5RWRpdHNSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhBcHBseUVkaXRzUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFwcGx5RWRpdHNSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoRGF0YU1vZGVsT3BlcmF0aW9uUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoRGF0YU1vZGVsT3BlcmF0aW9uUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoRGF0YU1vZGVsT3BlcmF0aW9uUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaEdyYXBoRGF0YU1vZGVsT3BlcmF0aW9uUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaERhdGFNb2RlbE9wZXJhdGlvblJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhEZWxldGVGaWVsZEluZGV4UmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoRGVsZXRlRmllbGRJbmRleFJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaERlbGV0ZUZpZWxkSW5kZXhSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhEZWxldGVGaWVsZEluZGV4UmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaERlbGV0ZUZpZWxkSW5kZXhSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoRGVsZXRlTmFtZWRUeXBlUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoRGVsZXRlTmFtZWRUeXBlUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoRGVsZXRlTmFtZWRUeXBlUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaEdyYXBoRGVsZXRlTmFtZWRUeXBlUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaERlbGV0ZU5hbWVkVHlwZVJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhEZWxldGVQcm9wZXJ0eVJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaERlbGV0ZVByb3BlcnR5UmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoRGVsZXRlUHJvcGVydHlSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhEZWxldGVQcm9wZXJ0eVJlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhEZWxldGVQcm9wZXJ0eVJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhOYW1lZE9iamVjdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaE5hbWVkT2JqZWN0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoTmFtZWRPYmplY3QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhOYW1lZE9iamVjdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhOYW1lZE9iamVjdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhPYmplY3QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhPYmplY3RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhPYmplY3QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhPYmplY3QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoT2JqZWN0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaE9iamVjdFR5cGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhPYmplY3RUeXBlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoT2JqZWN0VHlwZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaE9iamVjdFR5cGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoT2JqZWN0VHlwZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhQcm9wZXJ0eSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaFByb3BlcnR5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoUHJvcGVydHkuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhQcm9wZXJ0eShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhQcm9wZXJ0eSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaFF1ZXJ5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoUXVlcnkuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaFF1ZXJ5UmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoUXVlcnlSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVJlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVJlc3VsdEhlYWRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaFF1ZXJ5UmVzdWx0SGVhZGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoUXVlcnlSZXN1bHRIZWFkZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVJlc3VsdEhlYWRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVJlc3VsdEhlYWRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVN0cmVhbWluZygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaFF1ZXJ5U3RyZWFtaW5nXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoUXVlcnlTdHJlYW1pbmcuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVN0cmVhbWluZyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVN0cmVhbWluZygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVN0cmVhbWluZ1Jlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaFF1ZXJ5U3RyZWFtaW5nUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoUXVlcnlTdHJlYW1pbmdSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVN0cmVhbWluZ1Jlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhRdWVyeVN0cmVhbWluZ1Jlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhTZWFyY2goKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhTZWFyY2hcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhTZWFyY2guanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhTZWFyY2gocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoU2VhcmNoKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFNlYXJjaFN0cmVhbWluZygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaFNlYXJjaFN0cmVhbWluZ1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaFNlYXJjaFN0cmVhbWluZy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFNlYXJjaFN0cmVhbWluZyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhTZWFyY2hTdHJlYW1pbmcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoVXBkYXRlTmFtZWRUeXBlc1Jlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9HcmFwaFVwZGF0ZU5hbWVkVHlwZXNSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhVcGRhdGVOYW1lZFR5cGVzUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaEdyYXBoVXBkYXRlTmFtZWRUeXBlc1Jlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhVcGRhdGVOYW1lZFR5cGVzUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFVwZGF0ZVByb3BlcnR5UmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoVXBkYXRlUHJvcGVydHlSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhVcGRhdGVQcm9wZXJ0eVJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFVwZGF0ZVByb3BlcnR5UmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFVwZGF0ZVByb3BlcnR5UmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFVwZGF0ZVNlYXJjaEluZGV4UmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL0dyYXBoVXBkYXRlU2VhcmNoSW5kZXhSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvR3JhcGhVcGRhdGVTZWFyY2hJbmRleFJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFVwZGF0ZVNlYXJjaEluZGV4UmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFVwZGF0ZVNlYXJjaEluZGV4UmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhJbnB1dFF1YW50aXphdGlvblBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvSW5wdXRRdWFudGl6YXRpb25QYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL0lucHV0UXVhbnRpemF0aW9uUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhJbnB1dFF1YW50aXphdGlvblBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaElucHV0UXVhbnRpemF0aW9uUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoS25vd2xlZGdlR3JhcGgoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvS25vd2xlZGdlR3JhcGhcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvS25vd2xlZGdlR3JhcGguanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoS25vd2xlZGdlR3JhcGgocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEtub3dsZWRnZUdyYXBoKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhPdXRwdXRRdWFudGl6YXRpb25QYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL091dHB1dFF1YW50aXphdGlvblBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvT3V0cHV0UXVhbnRpemF0aW9uUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhPdXRwdXRRdWFudGl6YXRpb25QYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhPdXRwdXRRdWFudGl6YXRpb25QYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhQYXRoKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL1BhdGhcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvUGF0aC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhQYXRoKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhQYXRoKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhSZWxhdGlvbnNoaXAoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvUmVsYXRpb25zaGlwXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL1JlbGF0aW9uc2hpcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhSZWxhdGlvbnNoaXAocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFJlbGF0aW9uc2hpcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoUmVsYXRpb25zaGlwVHlwZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9SZWxhdGlvbnNoaXBUeXBlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL1JlbGF0aW9uc2hpcFR5cGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoUmVsYXRpb25zaGlwVHlwZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoUmVsYXRpb25zaGlwVHlwZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoU2VhcmNoSW5kZXgoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvU2VhcmNoSW5kZXhcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvU2VhcmNoSW5kZXguanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoU2VhcmNoSW5kZXgocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFNlYXJjaEluZGV4KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhTZXJ2aWNlRGVmaW5pdGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC9TZXJ2aWNlRGVmaW5pdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9rbm93bGVkZ2VHcmFwaC9TZXJ2aWNlRGVmaW5pdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhTZXJ2aWNlRGVmaW5pdGlvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoU2VydmljZURlZmluaXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFNvdXJjZVR5cGVWYWx1ZUJlaGF2aW9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL1NvdXJjZVR5cGVWYWx1ZUJlaGF2aW9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL1NvdXJjZVR5cGVWYWx1ZUJlaGF2aW9yLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaFNvdXJjZVR5cGVWYWx1ZUJlaGF2aW9yKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhTb3VyY2VUeXBlVmFsdWVCZWhhdmlvcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoVG9vbFNlcnZpY2VGaW5kUGF0aHNDSU1GaWx0ZXJlZEZpbmRQYXRoc0NvbmZpZ3VyYXRpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvdG9vbFNlcnZpY2UvZmluZFBhdGhzL0NJTUZpbHRlcmVkRmluZFBhdGhzQ29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9rbm93bGVkZ2VHcmFwaC90b29sU2VydmljZS9maW5kUGF0aHMvQ0lNRmlsdGVyZWRGaW5kUGF0aHNDb25maWd1cmF0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaFRvb2xTZXJ2aWNlRmluZFBhdGhzQ0lNRmlsdGVyZWRGaW5kUGF0aHNDb25maWd1cmF0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhUb29sU2VydmljZUZpbmRQYXRoc0NJTUZpbHRlcmVkRmluZFBhdGhzQ29uZmlndXJhdGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoVG9vbFNlcnZpY2VGaW5kUGF0aHNDSU1GaWx0ZXJlZEZpbmRQYXRoc0VudGl0eSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC90b29sU2VydmljZS9maW5kUGF0aHMvQ0lNRmlsdGVyZWRGaW5kUGF0aHNFbnRpdHlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvdG9vbFNlcnZpY2UvZmluZFBhdGhzL0NJTUZpbHRlcmVkRmluZFBhdGhzRW50aXR5LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaFRvb2xTZXJ2aWNlRmluZFBhdGhzQ0lNRmlsdGVyZWRGaW5kUGF0aHNFbnRpdHkocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFRvb2xTZXJ2aWNlRmluZFBhdGhzQ0lNRmlsdGVyZWRGaW5kUGF0aHNFbnRpdHkoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFRvb2xTZXJ2aWNlRmluZFBhdGhzQ0lNRmlsdGVyZWRGaW5kUGF0aHNQYXRoRmlsdGVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2tub3dsZWRnZUdyYXBoL3Rvb2xTZXJ2aWNlL2ZpbmRQYXRocy9DSU1GaWx0ZXJlZEZpbmRQYXRoc1BhdGhGaWx0ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qva25vd2xlZGdlR3JhcGgvdG9vbFNlcnZpY2UvZmluZFBhdGhzL0NJTUZpbHRlcmVkRmluZFBhdGhzUGF0aEZpbHRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhUb29sU2VydmljZUZpbmRQYXRoc0NJTUZpbHRlcmVkRmluZFBhdGhzUGF0aEZpbHRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoVG9vbFNlcnZpY2VGaW5kUGF0aHNDSU1GaWx0ZXJlZEZpbmRQYXRoc1BhdGhGaWx0ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFRvb2xTZXJ2aWNlRmluZFBhdGhzQ0lNS0dUcmF2ZXJzYWxEaXJlY3Rpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGgvdG9vbFNlcnZpY2UvZmluZFBhdGhzL0NJTUtHVHJhdmVyc2FsRGlyZWN0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL3Rvb2xTZXJ2aWNlL2ZpbmRQYXRocy9DSU1LR1RyYXZlcnNhbERpcmVjdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0S25vd2xlZGdlR3JhcGhUb29sU2VydmljZUZpbmRQYXRoc0NJTUtHVHJhdmVyc2FsRGlyZWN0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhUb29sU2VydmljZUZpbmRQYXRoc0NJTUtHVHJhdmVyc2FsRGlyZWN0aW9uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhUb29sU2VydmljZUZpbmRQYXRoc0ZpbmRQYXRoc1Rvb2xTZXR0aW5ncygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9rbm93bGVkZ2VHcmFwaC90b29sU2VydmljZS9maW5kUGF0aHMvRmluZFBhdGhzVG9vbFNldHRpbmdzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoL3Rvb2xTZXJ2aWNlL2ZpbmRQYXRocy9GaW5kUGF0aHNUb29sU2V0dGluZ3MuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdEtub3dsZWRnZUdyYXBoVG9vbFNlcnZpY2VGaW5kUGF0aHNGaW5kUGF0aHNUb29sU2V0dGluZ3MocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFRvb2xTZXJ2aWNlRmluZFBhdGhzRmluZFBhdGhzVG9vbFNldHRpbmdzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0QWdncmVnYXRlZEdlb21ldHJ5KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L25ldHdvcmtzL3N1cHBvcnQvQWdncmVnYXRlZEdlb21ldHJ5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L25ldHdvcmtzL3N1cHBvcnQvQWdncmVnYXRlZEdlb21ldHJ5LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRBZ2dyZWdhdGVkR2VvbWV0cnkocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnRBZ2dyZWdhdGVkR2VvbWV0cnkoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnRBc3NvY2lhdGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L0Fzc29jaWF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L25ldHdvcmtzL3N1cHBvcnQvQXNzb2NpYXRpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdE5ldHdvcmtzU3VwcG9ydEFzc29jaWF0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0QXNzb2NpYXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnRBc3NvY2lhdGlvbkdlb21ldHJpZXNSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvbmV0d29ya3Mvc3VwcG9ydC9Bc3NvY2lhdGlvbkdlb21ldHJpZXNSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvbmV0d29ya3Mvc3VwcG9ydC9Bc3NvY2lhdGlvbkdlb21ldHJpZXNSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdE5ldHdvcmtzU3VwcG9ydEFzc29jaWF0aW9uR2VvbWV0cmllc1Jlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydEFzc29jaWF0aW9uR2VvbWV0cmllc1Jlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydEZ1bmN0aW9uUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L25ldHdvcmtzL3N1cHBvcnQvRnVuY3Rpb25SZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvbmV0d29ya3Mvc3VwcG9ydC9GdW5jdGlvblJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0TmV0d29ya3NTdXBwb3J0RnVuY3Rpb25SZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnRGdW5jdGlvblJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydE5ldHdvcmtFbGVtZW50KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L25ldHdvcmtzL3N1cHBvcnQvTmV0d29ya0VsZW1lbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvbmV0d29ya3Mvc3VwcG9ydC9OZXR3b3JrRWxlbWVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0TmV0d29ya3NTdXBwb3J0TmV0d29ya0VsZW1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnROZXR3b3JrRWxlbWVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydFF1ZXJ5QXNzb2NpYXRpb25zUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L1F1ZXJ5QXNzb2NpYXRpb25zUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L1F1ZXJ5QXNzb2NpYXRpb25zUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0TmV0d29ya3NTdXBwb3J0UXVlcnlBc3NvY2lhdGlvbnNQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0UXVlcnlBc3NvY2lhdGlvbnNQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0UXVlcnlBc3NvY2lhdGlvbnNSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvbmV0d29ya3Mvc3VwcG9ydC9RdWVyeUFzc29jaWF0aW9uc1Jlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L1F1ZXJ5QXNzb2NpYXRpb25zUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRRdWVyeUFzc29jaWF0aW9uc1Jlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydFF1ZXJ5QXNzb2NpYXRpb25zUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0U3ludGhlc2l6ZUFzc29jaWF0aW9uR2VvbWV0cmllc1BhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvbmV0d29ya3Mvc3VwcG9ydC9TeW50aGVzaXplQXNzb2NpYXRpb25HZW9tZXRyaWVzUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L1N5bnRoZXNpemVBc3NvY2lhdGlvbkdlb21ldHJpZXNQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRTeW50aGVzaXplQXNzb2NpYXRpb25HZW9tZXRyaWVzUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydFN5bnRoZXNpemVBc3NvY2lhdGlvbkdlb21ldHJpZXNQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0VHJhY2VMb2NhdGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L1RyYWNlTG9jYXRpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvbmV0d29ya3Mvc3VwcG9ydC9UcmFjZUxvY2F0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRUcmFjZUxvY2F0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0VHJhY2VMb2NhdGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydFRyYWNlUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L1RyYWNlUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L1RyYWNlUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0TmV0d29ya3NTdXBwb3J0VHJhY2VQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0VHJhY2VQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0VHJhY2VSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvbmV0d29ya3Mvc3VwcG9ydC9UcmFjZVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L1RyYWNlUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRUcmFjZVJlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydFRyYWNlUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0VmFsaWRhdGVOZXR3b3JrVG9wb2xvZ3lQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L25ldHdvcmtzL3N1cHBvcnQvVmFsaWRhdGVOZXR3b3JrVG9wb2xvZ3lQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L25ldHdvcmtzL3N1cHBvcnQvVmFsaWRhdGVOZXR3b3JrVG9wb2xvZ3lQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRWYWxpZGF0ZU5ldHdvcmtUb3BvbG9neVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnRWYWxpZGF0ZU5ldHdvcmtUb3BvbG9neVBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RRdWVyeVN1cHBvcnRBdHRhY2htZW50SW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9xdWVyeS9zdXBwb3J0L0F0dGFjaG1lbnRJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3F1ZXJ5L3N1cHBvcnQvQXR0YWNobWVudEluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFF1ZXJ5U3VwcG9ydEF0dGFjaG1lbnRJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0UXVlcnlTdXBwb3J0QXR0YWNobWVudEluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0QWRkcmVzc0NhbmRpZGF0ZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0FkZHJlc3NDYW5kaWRhdGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9BZGRyZXNzQ2FuZGlkYXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0QWRkcmVzc0NhbmRpZGF0ZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRBZGRyZXNzQ2FuZGlkYXRlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNGZWF0dXJlU2V0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvQXR0cmlidXRlQmluc0ZlYXR1cmVTZXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9BdHRyaWJ1dGVCaW5zRmVhdHVyZVNldC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNGZWF0dXJlU2V0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNGZWF0dXJlU2V0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNRdWVyeSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0F0dHJpYnV0ZUJpbnNRdWVyeVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0F0dHJpYnV0ZUJpbnNRdWVyeS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNRdWVyeShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRBdHRyaWJ1dGVCaW5zUXVlcnkoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0QXR0cmlidXRlQmluc0dyb3VwaW5nKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvQXR0cmlidXRlQmluc0dyb3VwaW5nXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvQXR0cmlidXRlQmluc0dyb3VwaW5nLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0QXR0cmlidXRlQmluc0dyb3VwaW5nKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNHcm91cGluZygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRBdXRvSW50ZXJ2YWxCaW5QYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvQXV0b0ludGVydmFsQmluUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0F1dG9JbnRlcnZhbEJpblBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRBdXRvSW50ZXJ2YWxCaW5QYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEF1dG9JbnRlcnZhbEJpblBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0Rml4ZWRCb3VuZGFyaWVzQmluUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0ZpeGVkQm91bmRhcmllc0JpblBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9GaXhlZEJvdW5kYXJpZXNCaW5QYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0Rml4ZWRCb3VuZGFyaWVzQmluUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRGaXhlZEJvdW5kYXJpZXNCaW5QYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEZpeGVkSW50ZXJ2YWxCaW5QYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvRml4ZWRJbnRlcnZhbEJpblBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9GaXhlZEludGVydmFsQmluUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEZpeGVkSW50ZXJ2YWxCaW5QYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEZpeGVkSW50ZXJ2YWxCaW5QYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydERhdGVCaW5QYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvRGF0ZUJpblBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9EYXRlQmluUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydERhdGVCaW5QYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydERhdGVCaW5QYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydERhdGVCaW5UaW1lSW50ZXJ2YWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9EYXRlQmluVGltZUludGVydmFsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvRGF0ZUJpblRpbWVJbnRlcnZhbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydERhdGVCaW5UaW1lSW50ZXJ2YWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0RGF0ZUJpblRpbWVJbnRlcnZhbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRBbGdvcml0aG1pY0NvbG9yUmFtcCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0FsZ29yaXRobWljQ29sb3JSYW1wXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvQWxnb3JpdGhtaWNDb2xvclJhbXAuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRBbGdvcml0aG1pY0NvbG9yUmFtcChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRBbGdvcml0aG1pY0NvbG9yUmFtcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRBcmVhbFVuaXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9BcmVhbFVuaXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9BcmVhbFVuaXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRBcmVhbFVuaXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0QXJlYWxVbml0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEFyZWFzQW5kTGVuZ3Roc1BhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9BcmVhc0FuZExlbmd0aHNQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvQXJlYXNBbmRMZW5ndGhzUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEFyZWFzQW5kTGVuZ3Roc1BhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0QXJlYXNBbmRMZW5ndGhzUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRBdHRhY2htZW50UXVlcnkoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9BdHRhY2htZW50UXVlcnlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9BdHRhY2htZW50UXVlcnkuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRBdHRhY2htZW50UXVlcnkocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0QXR0YWNobWVudFF1ZXJ5KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEJhc2VJbWFnZU1lYXN1cmVQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvQmFzZUltYWdlTWVhc3VyZVBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9CYXNlSW1hZ2VNZWFzdXJlUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEJhc2VJbWFnZU1lYXN1cmVQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEJhc2VJbWFnZU1lYXN1cmVQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEJhc2VJbWFnZU1lYXN1cmVSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9CYXNlSW1hZ2VNZWFzdXJlUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvQmFzZUltYWdlTWVhc3VyZVJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEJhc2VJbWFnZU1lYXN1cmVSZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0QmFzZUltYWdlTWVhc3VyZVJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRCdWZmZXJQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvQnVmZmVyUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0J1ZmZlclBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRCdWZmZXJQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEJ1ZmZlclBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0Q2FtZXJhSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0NhbWVyYUluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9DYW1lcmFJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0Q2FtZXJhSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRDYW1lcmFJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydENsb3Nlc3RGYWNpbGl0eVBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9DbG9zZXN0RmFjaWxpdHlQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvQ2xvc2VzdEZhY2lsaXR5UGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydENsb3Nlc3RGYWNpbGl0eVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0Q2xvc2VzdEZhY2lsaXR5UGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRDbG9zZXN0RmFjaWxpdHlTb2x2ZVJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0Nsb3Nlc3RGYWNpbGl0eVNvbHZlUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvQ2xvc2VzdEZhY2lsaXR5U29sdmVSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRDbG9zZXN0RmFjaWxpdHlTb2x2ZVJlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRDbG9zZXN0RmFjaWxpdHlTb2x2ZVJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRDb2xvclJhbXAoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9Db2xvclJhbXBcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9Db2xvclJhbXAuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRDb2xvclJhbXAocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0Q29sb3JSYW1wKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydERhdGFGaWxlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvRGF0YUZpbGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9EYXRhRmlsZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydERhdGFGaWxlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydERhdGFGaWxlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydERhdGFMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0RhdGFMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0RhdGFMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydERhdGFMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnREYXRhTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0RGVuc2lmeVBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9EZW5zaWZ5UGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0RlbnNpZnlQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0RGVuc2lmeVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0RGVuc2lmeVBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0RGlyZWN0aW9uTGluZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0RpcmVjdGlvbkxpbmVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9EaXJlY3Rpb25MaW5lLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0RGlyZWN0aW9uTGluZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnREaXJlY3Rpb25MaW5lKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydERpcmVjdGlvblBvaW50KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvRGlyZWN0aW9uUG9pbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9EaXJlY3Rpb25Qb2ludC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydERpcmVjdGlvblBvaW50KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydERpcmVjdGlvblBvaW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydERpcmVjdGlvbnNFdmVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0RpcmVjdGlvbnNFdmVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0RpcmVjdGlvbnNFdmVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydERpcmVjdGlvbnNFdmVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnREaXJlY3Rpb25zRXZlbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0RGlyZWN0aW9uc0ZlYXR1cmUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9EaXJlY3Rpb25zRmVhdHVyZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0RpcmVjdGlvbnNGZWF0dXJlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0RGlyZWN0aW9uc0ZlYXR1cmUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0RGlyZWN0aW9uc0ZlYXR1cmUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0RGlyZWN0aW9uc0ZlYXR1cmVTZXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9EaXJlY3Rpb25zRmVhdHVyZVNldFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0RpcmVjdGlvbnNGZWF0dXJlU2V0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0RGlyZWN0aW9uc0ZlYXR1cmVTZXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0RGlyZWN0aW9uc0ZlYXR1cmVTZXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0RGlzdGFuY2VQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvRGlzdGFuY2VQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvRGlzdGFuY2VQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0RGlzdGFuY2VQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydERpc3RhbmNlUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRGZWF0dXJlU2V0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvRmVhdHVyZVNldFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ZlYXR1cmVTZXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRGZWF0dXJlU2V0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEZlYXR1cmVTZXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0RmV0Y2hQbGFjZVBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9GZXRjaFBsYWNlUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ZldGNoUGxhY2VQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0RmV0Y2hQbGFjZVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0RmV0Y2hQbGFjZVBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0RmluZEltYWdlc1BhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9GaW5kSW1hZ2VzUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ZpbmRJbWFnZXNQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0RmluZEltYWdlc1BhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0RmluZEltYWdlc1BhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0RmluZEltYWdlc1Jlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0ZpbmRJbWFnZXNSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9GaW5kSW1hZ2VzUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0RmluZEltYWdlc1Jlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRGaW5kSW1hZ2VzUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEZpbmRQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvRmluZFBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9GaW5kUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEZpbmRQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEZpbmRQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEZpbmRSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9GaW5kUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvRmluZFJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEZpbmRSZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0RmluZFJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRHZW5lcmFsaXplUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0dlbmVyYWxpemVQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvR2VuZXJhbGl6ZVBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRHZW5lcmFsaXplUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRHZW5lcmFsaXplUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRHUE1lc3NhZ2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9HUE1lc3NhZ2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9HUE1lc3NhZ2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRHUE1lc3NhZ2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0R1BNZXNzYWdlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydElkZW50aWZ5UGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0lkZW50aWZ5UGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0lkZW50aWZ5UGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydElkZW50aWZ5UGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRJZGVudGlmeVBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0SWRlbnRpZnlSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JZGVudGlmeVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0lkZW50aWZ5UmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0SWRlbnRpZnlSZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SWRlbnRpZnlSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VBbmdsZVBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZUFuZ2xlUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ltYWdlQW5nbGVQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0SW1hZ2VBbmdsZVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VBbmdsZVBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VBbmdsZVJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0ltYWdlQW5nbGVSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZUFuZ2xlUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0SW1hZ2VBbmdsZVJlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZUFuZ2xlUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlQXJlYVBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZUFyZWFQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VBcmVhUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlQXJlYVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VBcmVhUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZUFyZWFSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZUFyZWFSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZUFyZWFSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZUFyZWFSZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VBcmVhUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlQm91bmRhcnlQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VCb3VuZGFyeVBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZUJvdW5kYXJ5UGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlQm91bmRhcnlQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlQm91bmRhcnlQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlQm91bmRhcnlSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZUJvdW5kYXJ5UmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VCb3VuZGFyeVJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlQm91bmRhcnlSZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VCb3VuZGFyeVJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZURpc3RhbmNlUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0ltYWdlRGlzdGFuY2VQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VEaXN0YW5jZVBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZURpc3RhbmNlUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZURpc3RhbmNlUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZURpc3RhbmNlUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VEaXN0YW5jZVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ltYWdlRGlzdGFuY2VSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZURpc3RhbmNlUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlRGlzdGFuY2VSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VHUFNJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VHUFNJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VHUFNJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0SW1hZ2VHUFNJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlR1BTSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZUdQU0luZm9QYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VHUFNJbmZvUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ltYWdlR1BTSW5mb1BhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZUdQU0luZm9QYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlR1BTSW5mb1BhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VHUFNJbmZvUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VHUFNJbmZvUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VHUFNJbmZvUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0SW1hZ2VHUFNJbmZvUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlR1BTSW5mb1Jlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZUhlaWdodFBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZUhlaWdodFBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZUhlaWdodFBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZUhlaWdodFBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VIZWlnaHRQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlSGVpZ2h0UmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VIZWlnaHRSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZUhlaWdodFJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlSGVpZ2h0UmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlSGVpZ2h0UmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlSGlzdG9ncmFtUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0ltYWdlSGlzdG9ncmFtUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ltYWdlSGlzdG9ncmFtUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlSGlzdG9ncmFtUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZUhpc3RvZ3JhbVBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VJZGVudGlmeVBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZUlkZW50aWZ5UGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ltYWdlSWRlbnRpZnlQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0SW1hZ2VJZGVudGlmeVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VJZGVudGlmeVBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VJZGVudGlmeVJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0ltYWdlSWRlbnRpZnlSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZUlkZW50aWZ5UmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0SW1hZ2VJZGVudGlmeVJlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZUlkZW50aWZ5UmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlSW5zcGVjdGlvbkluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZUluc3BlY3Rpb25JbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VJbnNwZWN0aW9uSW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlSW5zcGVjdGlvbkluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VJbnNwZWN0aW9uSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZVBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZVBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlUGl4ZWxMb2NhdGlvblBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZVBpeGVsTG9jYXRpb25QYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VQaXhlbExvY2F0aW9uUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlUGl4ZWxMb2NhdGlvblBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VQaXhlbExvY2F0aW9uUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVBpeGVsTG9jYXRpb25SZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZVBpeGVsTG9jYXRpb25SZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZVBpeGVsTG9jYXRpb25SZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZVBpeGVsTG9jYXRpb25SZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VQaXhlbExvY2F0aW9uUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlUG9pbnRQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VQb2ludFBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZVBvaW50UGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlUG9pbnRQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlUG9pbnRQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlUG9pbnRSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZVBvaW50UmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VQb2ludFJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlUG9pbnRSZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VQb2ludFJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVNhbXBsZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0ltYWdlU2FtcGxlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VTYW1wbGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZVNhbXBsZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVNhbXBsZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVNhbXBsZVBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZVNhbXBsZVBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZVNhbXBsZVBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZVNhbXBsZVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VTYW1wbGVQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlU2FtcGxlUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VTYW1wbGVSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZVNhbXBsZVJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlU2FtcGxlUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlU2FtcGxlUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlVG9NYXBNdWx0aXJheVBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZVRvTWFwTXVsdGlyYXlQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VUb01hcE11bHRpcmF5UGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlVG9NYXBNdWx0aXJheVBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VUb01hcE11bHRpcmF5UGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVRvTWFwUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0ltYWdlVG9NYXBQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvSW1hZ2VUb01hcFBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZVRvTWFwUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVRvTWFwUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVVybFBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZVVybFBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZVVybFBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRJbWFnZVVybFBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VVcmxQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlVXJsUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VVcmxSZXN1bHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZVVybFJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlVXJsUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlVXJsUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlVm9sdW1lKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvSW1hZ2VWb2x1bWVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9JbWFnZVZvbHVtZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlVm9sdW1lKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydEltYWdlVm9sdW1lKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydEltYWdlVm9sdW1lUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0ltYWdlVm9sdW1lUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ltYWdlVm9sdW1lUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydEltYWdlVm9sdW1lUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVZvbHVtZVBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VWb2x1bWVSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9JbWFnZVZvbHVtZVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L0ltYWdlVm9sdW1lUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0SW1hZ2VWb2x1bWVSZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VWb2x1bWVSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0Sm9iSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L0pvYkluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9Kb2JJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0Sm9iSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRKb2JJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydExhc3RNaWxlRGVsaXZlcnlQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvTGFzdE1pbGVEZWxpdmVyeVBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9MYXN0TWlsZURlbGl2ZXJ5UGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydExhc3RNaWxlRGVsaXZlcnlQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydExhc3RNaWxlRGVsaXZlcnlQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydExlZ2VuZExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvTGVnZW5kTGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9MZWdlbmRMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydExlZ2VuZExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydExlZ2VuZExheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydExlbmd0aHNQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvTGVuZ3Roc1BhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9MZW5ndGhzUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydExlbmd0aHNQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydExlbmd0aHNQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydExpbmVhclVuaXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9MaW5lYXJVbml0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvTGluZWFyVW5pdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydExpbmVhclVuaXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0TGluZWFyVW5pdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRNYXBUb0ltYWdlUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L01hcFRvSW1hZ2VQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvTWFwVG9JbWFnZVBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRNYXBUb0ltYWdlUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRNYXBUb0ltYWdlUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRNZWFzdXJlQXJlYUZyb21JbWFnZVJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L01lYXN1cmVBcmVhRnJvbUltYWdlUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvTWVhc3VyZUFyZWFGcm9tSW1hZ2VSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRNZWFzdXJlQXJlYUZyb21JbWFnZVJlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRNZWFzdXJlQXJlYUZyb21JbWFnZVJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRNZWFzdXJlRnJvbUltYWdlUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L01lYXN1cmVGcm9tSW1hZ2VQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvTWVhc3VyZUZyb21JbWFnZVBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRNZWFzdXJlRnJvbUltYWdlUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRNZWFzdXJlRnJvbUltYWdlUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRNZWFzdXJlTGVuZ3RoRnJvbUltYWdlUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvTWVhc3VyZUxlbmd0aEZyb21JbWFnZVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L01lYXN1cmVMZW5ndGhGcm9tSW1hZ2VSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRNZWFzdXJlTGVuZ3RoRnJvbUltYWdlUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydE1lYXN1cmVMZW5ndGhGcm9tSW1hZ2VSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0TXVsdGlwYXJ0Q29sb3JSYW1wKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvTXVsdGlwYXJ0Q29sb3JSYW1wXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvTXVsdGlwYXJ0Q29sb3JSYW1wLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0TXVsdGlwYXJ0Q29sb3JSYW1wKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydE11bHRpcGFydENvbG9yUmFtcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnROQU1lc3NhZ2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9OQU1lc3NhZ2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9OQU1lc3NhZ2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnROQU1lc3NhZ2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0TkFNZXNzYWdlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydE5ldHdvcmtGZWF0dXJlU2V0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvTmV0d29ya0ZlYXR1cmVTZXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9OZXR3b3JrRmVhdHVyZVNldC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydE5ldHdvcmtGZWF0dXJlU2V0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydE5ldHdvcmtGZWF0dXJlU2V0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydE5ldHdvcmtVcmwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9OZXR3b3JrVXJsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvTmV0d29ya1VybC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydE5ldHdvcmtVcmwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0TmV0d29ya1VybCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRPZmZzZXRQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvT2Zmc2V0UGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L09mZnNldFBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRPZmZzZXRQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydE9mZnNldFBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0UGFyYW1ldGVyVmFsdWUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9QYXJhbWV0ZXJWYWx1ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1BhcmFtZXRlclZhbHVlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0UGFyYW1ldGVyVmFsdWUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0UGFyYW1ldGVyVmFsdWUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0UGxhY2VSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9QbGFjZVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1BsYWNlUmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0UGxhY2VSZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0UGxhY2VSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0UGxhY2VzUGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L1BsYWNlc1BhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9QbGFjZXNQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0UGxhY2VzUGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRQbGFjZXNQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydFBsYWNlc1F1ZXJ5UGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L1BsYWNlc1F1ZXJ5UGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1BsYWNlc1F1ZXJ5UGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydFBsYWNlc1F1ZXJ5UGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRQbGFjZXNRdWVyeVBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0UGxhY2VzUXVlcnlSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9QbGFjZXNRdWVyeVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1BsYWNlc1F1ZXJ5UmVzdWx0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0UGxhY2VzUXVlcnlSZXN1bHQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0UGxhY2VzUXVlcnlSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0UG9pbnRCYXJyaWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvUG9pbnRCYXJyaWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvUG9pbnRCYXJyaWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0UG9pbnRCYXJyaWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFBvaW50QmFycmllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRQb2x5Z29uQmFycmllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L1BvbHlnb25CYXJyaWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvUG9seWdvbkJhcnJpZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRQb2x5Z29uQmFycmllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRQb2x5Z29uQmFycmllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRQb2x5bGluZUJhcnJpZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9Qb2x5bGluZUJhcnJpZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9Qb2x5bGluZUJhcnJpZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRQb2x5bGluZUJhcnJpZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0UG9seWxpbmVCYXJyaWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydFByaW50UGFyYW1ldGVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L1ByaW50UGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1ByaW50UGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydFByaW50UGFyYW1ldGVycyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRQcmludFBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0UHJpbnRUZW1wbGF0ZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L1ByaW50VGVtcGxhdGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9QcmludFRlbXBsYXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0UHJpbnRUZW1wbGF0ZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRQcmludFRlbXBsYXRlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydFByb2plY3RQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvUHJvamVjdFBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9Qcm9qZWN0UGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydFByb2plY3RQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFByb2plY3RQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydFF1ZXJ5KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvUXVlcnlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9RdWVyeS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydFF1ZXJ5KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFF1ZXJ5KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydFJhc3RlckRhdGEoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9SYXN0ZXJEYXRhXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvUmFzdGVyRGF0YS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydFJhc3RlckRhdGEocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0UmFzdGVyRGF0YSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRSZWxhdGlvblBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9SZWxhdGlvblBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9SZWxhdGlvblBhcmFtZXRlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRSZWxhdGlvblBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0UmVsYXRpb25QYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydFJlbGF0aW9uc2hpcFF1ZXJ5KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvUmVsYXRpb25zaGlwUXVlcnlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9SZWxhdGlvbnNoaXBRdWVyeS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydFJlbGF0aW9uc2hpcFF1ZXJ5KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFJlbGF0aW9uc2hpcFF1ZXJ5KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydFJvdXRlSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L1JvdXRlSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1JvdXRlSW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydFJvdXRlSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRSb3V0ZUluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0Um91dGVQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvUm91dGVQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvUm91dGVQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0Um91dGVQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFJvdXRlUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRSb3V0ZVJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L1JvdXRlUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvUm91dGVSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRSb3V0ZVJlc3VsdChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRSb3V0ZVJlc3VsdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRSb3V0ZVNvbHZlUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvUm91dGVTb2x2ZVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1JvdXRlU29sdmVSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRSb3V0ZVNvbHZlUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFJvdXRlU29sdmVSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0U2VydmljZUFyZWFQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvU2VydmljZUFyZWFQYXJhbWV0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvU2VydmljZUFyZWFQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0U2VydmljZUFyZWFQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFNlcnZpY2VBcmVhUGFyYW1ldGVycygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRTZXJ2aWNlQXJlYVNvbHZlUmVzdWx0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvU2VydmljZUFyZWFTb2x2ZVJlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1NlcnZpY2VBcmVhU29sdmVSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRTZXJ2aWNlQXJlYVNvbHZlUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFNlcnZpY2VBcmVhU29sdmVSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0U3RhdGlzdGljRGVmaW5pdGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9zdXBwb3J0L1N0YXRpc3RpY0RlZmluaXRpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc3VwcG9ydC9TdGF0aXN0aWNEZWZpbml0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0U3RhdGlzdGljRGVmaW5pdGlvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0UmVzdFN1cHBvcnRTdGF0aXN0aWNEZWZpbml0aW9uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U3VwcG9ydFN0b3AoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9TdG9wXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvU3RvcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdSZXN0U3VwcG9ydFN0b3AocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0U3RvcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRUb3BGZWF0dXJlc1F1ZXJ5KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvVG9wRmVhdHVyZXNRdWVyeVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1RvcEZlYXR1cmVzUXVlcnkuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRUb3BGZWF0dXJlc1F1ZXJ5KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFRvcEZlYXR1cmVzUXVlcnkoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0VG9wRmlsdGVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvVG9wRmlsdGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3N1cHBvcnQvVG9wRmlsdGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0VG9wRmlsdGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFRvcEZpbHRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN1cHBvcnRUcmF2ZWxNb2RlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3N1cHBvcnQvVHJhdmVsTW9kZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1RyYXZlbE1vZGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3UmVzdFN1cHBvcnRUcmF2ZWxNb2RlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRSZXN0U3VwcG9ydFRyYXZlbE1vZGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RTdXBwb3J0VHJpbUV4dGVuZFBhcmFtZXRlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3VwcG9ydC9UcmltRXh0ZW5kUGFyYW1ldGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zdXBwb3J0L1RyaW1FeHRlbmRQYXJhbWV0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1Jlc3RTdXBwb3J0VHJpbUV4dGVuZFBhcmFtZXRlcnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFJlc3RTdXBwb3J0VHJpbUV4dGVuZFBhcmFtZXRlcnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN1cHBvcnRBY3Rpb25zQWN0aW9uQmFzZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3VwcG9ydC9hY3Rpb25zL0FjdGlvbkJhc2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N1cHBvcnQvYWN0aW9ucy9BY3Rpb25CYXNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N1cHBvcnRBY3Rpb25zQWN0aW9uQmFzZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3VwcG9ydEFjdGlvbnNBY3Rpb25CYXNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTdXBwb3J0QWN0aW9uc0FjdGlvbkJ1dHRvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3VwcG9ydC9hY3Rpb25zL0FjdGlvbkJ1dHRvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3VwcG9ydC9hY3Rpb25zL0FjdGlvbkJ1dHRvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTdXBwb3J0QWN0aW9uc0FjdGlvbkJ1dHRvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3VwcG9ydEFjdGlvbnNBY3Rpb25CdXR0b24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN1cHBvcnRBY3Rpb25zQWN0aW9uVG9nZ2xlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zdXBwb3J0L2FjdGlvbnMvQWN0aW9uVG9nZ2xlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zdXBwb3J0L2FjdGlvbnMvQWN0aW9uVG9nZ2xlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N1cHBvcnRBY3Rpb25zQWN0aW9uVG9nZ2xlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTdXBwb3J0QWN0aW9uc0FjdGlvblRvZ2dsZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3VwcG9ydEJhc2VtYXBTdHlsZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3VwcG9ydC9CYXNlbWFwU3R5bGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N1cHBvcnQvQmFzZW1hcFN0eWxlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N1cHBvcnRCYXNlbWFwU3R5bGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN1cHBvcnRCYXNlbWFwU3R5bGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN1cHBvcnRNYXBGbG9vckluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N1cHBvcnQvTWFwRmxvb3JJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zdXBwb3J0L01hcEZsb29ySW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTdXBwb3J0TWFwRmxvb3JJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTdXBwb3J0TWFwRmxvb3JJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzQ2FsbG91dHNDYWxsb3V0M0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvY2FsbG91dHMvQ2FsbG91dDNEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL2NhbGxvdXRzL0NhbGxvdXQzRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzQ2FsbG91dHNDYWxsb3V0M0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNDYWxsb3V0c0NhbGxvdXQzRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc0NhbGxvdXRzTGluZUNhbGxvdXQzRCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9jYWxsb3V0cy9MaW5lQ2FsbG91dDNEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL2NhbGxvdXRzL0xpbmVDYWxsb3V0M0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc0NhbGxvdXRzTGluZUNhbGxvdXQzRChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc0NhbGxvdXRzTGluZUNhbGxvdXQzRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc0NJTVN5bWJvbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9DSU1TeW1ib2xcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvQ0lNU3ltYm9sLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNDSU1TeW1ib2wocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNDSU1TeW1ib2woKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNFZGdlc0VkZ2VzM0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvZWRnZXMvRWRnZXMzRFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9lZGdlcy9FZGdlczNELmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNFZGdlc0VkZ2VzM0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNFZGdlc0VkZ2VzM0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNFZGdlc1NrZXRjaEVkZ2VzM0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvZWRnZXMvU2tldGNoRWRnZXMzRFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9lZGdlcy9Ta2V0Y2hFZGdlczNELmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNFZGdlc1NrZXRjaEVkZ2VzM0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNFZGdlc1NrZXRjaEVkZ2VzM0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNFZGdlc1NvbGlkRWRnZXMzRCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9lZGdlcy9Tb2xpZEVkZ2VzM0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvZWRnZXMvU29saWRFZGdlczNELmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNFZGdlc1NvbGlkRWRnZXMzRChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc0VkZ2VzU29saWRFZGdlczNEKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzRXh0cnVkZVN5bWJvbDNETGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvRXh0cnVkZVN5bWJvbDNETGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvRXh0cnVkZVN5bWJvbDNETGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc0V4dHJ1ZGVTeW1ib2wzRExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzRXh0cnVkZVN5bWJvbDNETGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNGaWxsU3ltYm9sKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL0ZpbGxTeW1ib2xcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvRmlsbFN5bWJvbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzRmlsbFN5bWJvbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc0ZpbGxTeW1ib2woKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNGaWxsU3ltYm9sM0RMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9GaWxsU3ltYm9sM0RMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9GaWxsU3ltYm9sM0RMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzRmlsbFN5bWJvbDNETGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNGaWxsU3ltYm9sM0RMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc0ZvbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvRm9udFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9Gb250LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNGb250KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzRm9udCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc0ljb25TeW1ib2wzRExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL0ljb25TeW1ib2wzRExheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL0ljb25TeW1ib2wzRExheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNJY29uU3ltYm9sM0RMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc0ljb25TeW1ib2wzRExheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzTGFiZWxTeW1ib2wzRCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9MYWJlbFN5bWJvbDNEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL0xhYmVsU3ltYm9sM0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc0xhYmVsU3ltYm9sM0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNMYWJlbFN5bWJvbDNEKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzTGluZVN0eWxlTWFya2VyM0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvTGluZVN0eWxlTWFya2VyM0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvTGluZVN0eWxlTWFya2VyM0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc0xpbmVTdHlsZU1hcmtlcjNEKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzTGluZVN0eWxlTWFya2VyM0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNMaW5lU3ltYm9sKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL0xpbmVTeW1ib2xcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvTGluZVN5bWJvbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzTGluZVN5bWJvbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc0xpbmVTeW1ib2woKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNMaW5lU3ltYm9sM0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvTGluZVN5bWJvbDNEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL0xpbmVTeW1ib2wzRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzTGluZVN5bWJvbDNEKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzTGluZVN5bWJvbDNEKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzTGluZVN5bWJvbDNETGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvTGluZVN5bWJvbDNETGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvTGluZVN5bWJvbDNETGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc0xpbmVTeW1ib2wzRExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzTGluZVN5bWJvbDNETGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNMaW5lU3ltYm9sTWFya2VyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL0xpbmVTeW1ib2xNYXJrZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvTGluZVN5bWJvbE1hcmtlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzTGluZVN5bWJvbE1hcmtlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc0xpbmVTeW1ib2xNYXJrZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNNYXJrZXJTeW1ib2woKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvTWFya2VyU3ltYm9sXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL01hcmtlclN5bWJvbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzTWFya2VyU3ltYm9sKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzTWFya2VyU3ltYm9sKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzTWVzaFN5bWJvbDNEKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL01lc2hTeW1ib2wzRFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9NZXNoU3ltYm9sM0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc01lc2hTeW1ib2wzRChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc01lc2hTeW1ib2wzRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc09iamVjdFN5bWJvbDNETGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvT2JqZWN0U3ltYm9sM0RMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9PYmplY3RTeW1ib2wzRExheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNPYmplY3RTeW1ib2wzRExheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzT2JqZWN0U3ltYm9sM0RMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc1BhdGhTeW1ib2wzRExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL1BhdGhTeW1ib2wzRExheWVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL1BhdGhTeW1ib2wzRExheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNQYXRoU3ltYm9sM0RMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc1BhdGhTeW1ib2wzRExheWVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzUGF0dGVybnNMaW5lU3R5bGVQYXR0ZXJuM0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvcGF0dGVybnMvTGluZVN0eWxlUGF0dGVybjNEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL3BhdHRlcm5zL0xpbmVTdHlsZVBhdHRlcm4zRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzUGF0dGVybnNMaW5lU3R5bGVQYXR0ZXJuM0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNQYXR0ZXJuc0xpbmVTdHlsZVBhdHRlcm4zRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc1BhdHRlcm5zU3R5bGVQYXR0ZXJuM0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvcGF0dGVybnMvU3R5bGVQYXR0ZXJuM0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvcGF0dGVybnMvU3R5bGVQYXR0ZXJuM0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc1BhdHRlcm5zU3R5bGVQYXR0ZXJuM0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNQYXR0ZXJuc1N0eWxlUGF0dGVybjNEKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzUGljdHVyZUZpbGxTeW1ib2woKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvUGljdHVyZUZpbGxTeW1ib2xcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvUGljdHVyZUZpbGxTeW1ib2wuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc1BpY3R1cmVGaWxsU3ltYm9sKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzUGljdHVyZUZpbGxTeW1ib2woKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNQaWN0dXJlTWFya2VyU3ltYm9sKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL1BpY3R1cmVNYXJrZXJTeW1ib2xcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvUGljdHVyZU1hcmtlclN5bWJvbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzUGljdHVyZU1hcmtlclN5bWJvbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc1BpY3R1cmVNYXJrZXJTeW1ib2woKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNQb2ludFN5bWJvbDNEKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL1BvaW50U3ltYm9sM0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvUG9pbnRTeW1ib2wzRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzUG9pbnRTeW1ib2wzRChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc1BvaW50U3ltYm9sM0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNQb2x5Z29uU3ltYm9sM0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvUG9seWdvblN5bWJvbDNEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL1BvbHlnb25TeW1ib2wzRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzUG9seWdvblN5bWJvbDNEKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzUG9seWdvblN5bWJvbDNEKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzU2ltcGxlRmlsbFN5bWJvbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9TaW1wbGVGaWxsU3ltYm9sXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL1NpbXBsZUZpbGxTeW1ib2wuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc1NpbXBsZUZpbGxTeW1ib2wocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNTaW1wbGVGaWxsU3ltYm9sKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzU2ltcGxlTGluZVN5bWJvbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9TaW1wbGVMaW5lU3ltYm9sXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL1NpbXBsZUxpbmVTeW1ib2wuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc1NpbXBsZUxpbmVTeW1ib2wocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNTaW1wbGVMaW5lU3ltYm9sKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzU2ltcGxlTWFya2VyU3ltYm9sKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL1NpbXBsZU1hcmtlclN5bWJvbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9TaW1wbGVNYXJrZXJTeW1ib2wuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc1NpbXBsZU1hcmtlclN5bWJvbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc1NpbXBsZU1hcmtlclN5bWJvbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc1N1cHBvcnRFbGV2YXRpb25JbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL3N1cHBvcnQvRWxldmF0aW9uSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9zdXBwb3J0L0VsZXZhdGlvbkluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc1N1cHBvcnRFbGV2YXRpb25JbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzU3VwcG9ydEVsZXZhdGlvbkluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNTdXBwb3J0RmVhdHVyZUV4cHJlc3Npb25JbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL3N1cHBvcnQvRmVhdHVyZUV4cHJlc3Npb25JbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL3N1cHBvcnQvRmVhdHVyZUV4cHJlc3Npb25JbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNTdXBwb3J0RmVhdHVyZUV4cHJlc3Npb25JbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzU3VwcG9ydEZlYXR1cmVFeHByZXNzaW9uSW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc1N1cHBvcnRTdHlsZU9yaWdpbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9zdXBwb3J0L1N0eWxlT3JpZ2luXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL3N1cHBvcnQvU3R5bGVPcmlnaW4uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc1N1cHBvcnRTdHlsZU9yaWdpbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc1N1cHBvcnRTdHlsZU9yaWdpbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc1N1cHBvcnRTeW1ib2wzRFZlcnRpY2FsT2Zmc2V0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL3N1cHBvcnQvU3ltYm9sM0RWZXJ0aWNhbE9mZnNldFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9zdXBwb3J0L1N5bWJvbDNEVmVydGljYWxPZmZzZXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc1N1cHBvcnRTeW1ib2wzRFZlcnRpY2FsT2Zmc2V0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzU3VwcG9ydFN5bWJvbDNEVmVydGljYWxPZmZzZXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNTeW1ib2woKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvU3ltYm9sXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zeW1ib2xzL1N5bWJvbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzU3ltYm9sKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzU3ltYm9sKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzU3ltYm9sM0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3N5bWJvbHMvU3ltYm9sM0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvU3ltYm9sM0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3U3ltYm9sc1N5bWJvbDNEKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRTeW1ib2xzU3ltYm9sM0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNTeW1ib2wzRExheWVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL1N5bWJvbDNETGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvU3ltYm9sM0RMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzU3ltYm9sM0RMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc1N5bWJvbDNETGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNUZXh0U3ltYm9sKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL1RleHRTeW1ib2xcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvVGV4dFN5bWJvbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzVGV4dFN5bWJvbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0U3ltYm9sc1RleHRTeW1ib2woKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNUZXh0U3ltYm9sM0RMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9UZXh0U3ltYm9sM0RMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9UZXh0U3ltYm9sM0RMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzVGV4dFN5bWJvbDNETGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNUZXh0U3ltYm9sM0RMYXllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9sc1dhdGVyU3ltYm9sM0RMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9XYXRlclN5bWJvbDNETGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvV2F0ZXJTeW1ib2wzRExheWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1N5bWJvbHNXYXRlclN5bWJvbDNETGF5ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNXYXRlclN5bWJvbDNETGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN5bWJvbHNXZWJTdHlsZVN5bWJvbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9XZWJTdHlsZVN5bWJvbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9XZWJTdHlsZVN5bWJvbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdTeW1ib2xzV2ViU3R5bGVTeW1ib2wocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFN5bWJvbHNXZWJTdHlsZVN5bWJvbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0VGFibGVzQXR0cmlidXRlVGFibGVUZW1wbGF0ZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdGFibGVzL0F0dHJpYnV0ZVRhYmxlVGVtcGxhdGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3RhYmxlcy9BdHRyaWJ1dGVUYWJsZVRlbXBsYXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1RhYmxlc0F0dHJpYnV0ZVRhYmxlVGVtcGxhdGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFRhYmxlc0F0dHJpYnV0ZVRhYmxlVGVtcGxhdGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFRhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVBdHRhY2htZW50RWxlbWVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdGFibGVzL2VsZW1lbnRzL0F0dHJpYnV0ZVRhYmxlQXR0YWNobWVudEVsZW1lbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3RhYmxlcy9lbGVtZW50cy9BdHRyaWJ1dGVUYWJsZUF0dGFjaG1lbnRFbGVtZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1RhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVBdHRhY2htZW50RWxlbWVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0VGFibGVzRWxlbWVudHNBdHRyaWJ1dGVUYWJsZUF0dGFjaG1lbnRFbGVtZW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRUYWJsZXNFbGVtZW50c0F0dHJpYnV0ZVRhYmxlRWxlbWVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdGFibGVzL2VsZW1lbnRzL0F0dHJpYnV0ZVRhYmxlRWxlbWVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdGFibGVzL2VsZW1lbnRzL0F0dHJpYnV0ZVRhYmxlRWxlbWVudC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdUYWJsZXNFbGVtZW50c0F0dHJpYnV0ZVRhYmxlRWxlbWVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0VGFibGVzRWxlbWVudHNBdHRyaWJ1dGVUYWJsZUVsZW1lbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFRhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVHcm91cEVsZW1lbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3RhYmxlcy9lbGVtZW50cy9BdHRyaWJ1dGVUYWJsZUdyb3VwRWxlbWVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdGFibGVzL2VsZW1lbnRzL0F0dHJpYnV0ZVRhYmxlR3JvdXBFbGVtZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1RhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVHcm91cEVsZW1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFRhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVHcm91cEVsZW1lbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFRhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVGaWVsZEVsZW1lbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3RhYmxlcy9lbGVtZW50cy9BdHRyaWJ1dGVUYWJsZUZpZWxkRWxlbWVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdGFibGVzL2VsZW1lbnRzL0F0dHJpYnV0ZVRhYmxlRmllbGRFbGVtZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1RhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVGaWVsZEVsZW1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFRhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVGaWVsZEVsZW1lbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFRhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVSZWxhdGlvbnNoaXBFbGVtZW50KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS90YWJsZXMvZWxlbWVudHMvQXR0cmlidXRlVGFibGVSZWxhdGlvbnNoaXBFbGVtZW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS90YWJsZXMvZWxlbWVudHMvQXR0cmlidXRlVGFibGVSZWxhdGlvbnNoaXBFbGVtZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1RhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVSZWxhdGlvbnNoaXBFbGVtZW50KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRUYWJsZXNFbGVtZW50c0F0dHJpYnV0ZVRhYmxlUmVsYXRpb25zaGlwRWxlbWVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0VGltZVRpbWVFeHRlbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3RpbWUvVGltZUV4dGVudFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdGltZS9UaW1lRXh0ZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1RpbWVUaW1lRXh0ZW50KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRUaW1lVGltZUV4dGVudCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0VGltZVRpbWVJbnRlcnZhbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdGltZS9UaW1lSW50ZXJ2YWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3RpbWUvVGltZUludGVydmFsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1RpbWVUaW1lSW50ZXJ2YWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFRpbWVUaW1lSW50ZXJ2YWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZlcnNpb25NYW5hZ2VtZW50VmVyc2lvbmluZ1N0YXRlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92ZXJzaW9uTWFuYWdlbWVudC9WZXJzaW9uaW5nU3RhdGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZlcnNpb25NYW5hZ2VtZW50L1ZlcnNpb25pbmdTdGF0ZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWZXJzaW9uTWFuYWdlbWVudFZlcnNpb25pbmdTdGF0ZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0VmVyc2lvbk1hbmFnZW1lbnRWZXJzaW9uaW5nU3RhdGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZlcnNpb25NYW5hZ2VtZW50VmVyc2lvbk1hbmFnZW1lbnRTZXJ2aWNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92ZXJzaW9uTWFuYWdlbWVudC9WZXJzaW9uTWFuYWdlbWVudFNlcnZpY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZlcnNpb25NYW5hZ2VtZW50L1ZlcnNpb25NYW5hZ2VtZW50U2VydmljZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWZXJzaW9uTWFuYWdlbWVudFZlcnNpb25NYW5hZ2VtZW50U2VydmljZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0VmVyc2lvbk1hbmFnZW1lbnRWZXJzaW9uTWFuYWdlbWVudFNlcnZpY2UoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdwb2ludCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvVmlld3BvaW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9WaWV3cG9pbnQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3BvaW50KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3cG9pbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzQmFzZW1hcFZpZXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL0Jhc2VtYXBWaWV3XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9CYXNlbWFwVmlldy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3c0Jhc2VtYXBWaWV3KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0Jhc2VtYXBWaWV3KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c0dyb3VuZFZpZXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL0dyb3VuZFZpZXdcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzL0dyb3VuZFZpZXcuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NHcm91bmRWaWV3KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0dyb3VuZFZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzMmRWaWV3U3RhdGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzLzJkL1ZpZXdTdGF0ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvMmQvVmlld1N0YXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzMmRWaWV3U3RhdGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzMmRWaWV3U3RhdGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzMmRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVBbmFseXNpc1ZpZXcyRCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvMmQvYW5hbHlzaXMvRWxldmF0aW9uUHJvZmlsZUFuYWx5c2lzVmlldzJEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8yZC9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlQW5hbHlzaXNWaWV3MkQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3MyZEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUFuYWx5c2lzVmlldzJEKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3czJkQW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlQW5hbHlzaXNWaWV3MkQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzMmRMYXllcnNCYXNlTGF5ZXJWaWV3MkQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzLzJkL2xheWVycy9CYXNlTGF5ZXJWaWV3MkRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzLzJkL2xheWVycy9CYXNlTGF5ZXJWaWV3MkQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3MyZExheWVyc0Jhc2VMYXllclZpZXcyRChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3MyZExheWVyc0Jhc2VMYXllclZpZXcyRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3MyZExheWVyc0Jhc2VMYXllclZpZXdHTDJEKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8yZC9sYXllcnMvQmFzZUxheWVyVmlld0dMMkRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzLzJkL2xheWVycy9CYXNlTGF5ZXJWaWV3R0wyRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3czJkTGF5ZXJzQmFzZUxheWVyVmlld0dMMkQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzMmRMYXllcnNCYXNlTGF5ZXJWaWV3R0wyRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3MzZEFuYWx5c2lzQXJlYU1lYXN1cmVtZW50QW5hbHlzaXNWaWV3M0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzLzNkL2FuYWx5c2lzL0FyZWFNZWFzdXJlbWVudEFuYWx5c2lzVmlldzNEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC9hbmFseXNpcy9BcmVhTWVhc3VyZW1lbnRBbmFseXNpc1ZpZXczRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3czNkQW5hbHlzaXNBcmVhTWVhc3VyZW1lbnRBbmFseXNpc1ZpZXczRChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3MzZEFuYWx5c2lzQXJlYU1lYXN1cmVtZW50QW5hbHlzaXNWaWV3M0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RBbmFseXNpc0RpbWVuc2lvbkFuYWx5c2lzVmlldzNEKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC9hbmFseXNpcy9EaW1lbnNpb25BbmFseXNpc1ZpZXczRFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvM2QvYW5hbHlzaXMvRGltZW5zaW9uQW5hbHlzaXNWaWV3M0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3MzZEFuYWx5c2lzRGltZW5zaW9uQW5hbHlzaXNWaWV3M0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzM2RBbmFseXNpc0RpbWVuc2lvbkFuYWx5c2lzVmlldzNEKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3czNkQW5hbHlzaXNEaXJlY3RMaW5lTWVhc3VyZW1lbnRBbmFseXNpc1ZpZXczRCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvM2QvYW5hbHlzaXMvRGlyZWN0TGluZU1lYXN1cmVtZW50QW5hbHlzaXNWaWV3M0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzLzNkL2FuYWx5c2lzL0RpcmVjdExpbmVNZWFzdXJlbWVudEFuYWx5c2lzVmlldzNELmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzM2RBbmFseXNpc0RpcmVjdExpbmVNZWFzdXJlbWVudEFuYWx5c2lzVmlldzNEKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3czNkQW5hbHlzaXNEaXJlY3RMaW5lTWVhc3VyZW1lbnRBbmFseXNpc1ZpZXczRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3MzZEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUFuYWx5c2lzVmlldzNEKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlQW5hbHlzaXNWaWV3M0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzLzNkL2FuYWx5c2lzL0VsZXZhdGlvblByb2ZpbGVBbmFseXNpc1ZpZXczRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3czNkQW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlQW5hbHlzaXNWaWV3M0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzM2RBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVBbmFseXNpc1ZpZXczRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3MzZEFuYWx5c2lzTGluZU9mU2lnaHRBbmFseXNpc1Jlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvM2QvYW5hbHlzaXMvTGluZU9mU2lnaHRBbmFseXNpc1Jlc3VsdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvM2QvYW5hbHlzaXMvTGluZU9mU2lnaHRBbmFseXNpc1Jlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3czNkQW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3czNkQW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzUmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3czNkQW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzVmlldzNEKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC9hbmFseXNpcy9MaW5lT2ZTaWdodEFuYWx5c2lzVmlldzNEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC9hbmFseXNpcy9MaW5lT2ZTaWdodEFuYWx5c2lzVmlldzNELmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzM2RBbmFseXNpc0xpbmVPZlNpZ2h0QW5hbHlzaXNWaWV3M0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzM2RBbmFseXNpc0xpbmVPZlNpZ2h0QW5hbHlzaXNWaWV3M0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RBbmFseXNpc1NsaWNlQW5hbHlzaXNWaWV3M0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzLzNkL2FuYWx5c2lzL1NsaWNlQW5hbHlzaXNWaWV3M0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzLzNkL2FuYWx5c2lzL1NsaWNlQW5hbHlzaXNWaWV3M0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3MzZEFuYWx5c2lzU2xpY2VBbmFseXNpc1ZpZXczRChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3MzZEFuYWx5c2lzU2xpY2VBbmFseXNpc1ZpZXczRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3MzZEFuYWx5c2lzVmlld3NoZWRBbmFseXNpc1ZpZXczRCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvM2QvYW5hbHlzaXMvVmlld3NoZWRBbmFseXNpc1ZpZXczRFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvM2QvYW5hbHlzaXMvVmlld3NoZWRBbmFseXNpc1ZpZXczRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3czNkQW5hbHlzaXNWaWV3c2hlZEFuYWx5c2lzVmlldzNEKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3czNkQW5hbHlzaXNWaWV3c2hlZEFuYWx5c2lzVmlldzNEKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3czNkQW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudEFuYWx5c2lzVmlldzNEKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC9hbmFseXNpcy9Wb2x1bWVNZWFzdXJlbWVudEFuYWx5c2lzVmlldzNEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC9hbmFseXNpcy9Wb2x1bWVNZWFzdXJlbWVudEFuYWx5c2lzVmlldzNELmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzM2RBbmFseXNpc1ZvbHVtZU1lYXN1cmVtZW50QW5hbHlzaXNWaWV3M0QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzM2RBbmFseXNpc1ZvbHVtZU1lYXN1cmVtZW50QW5hbHlzaXNWaWV3M0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RBbmFseXNpc1ZvbHVtZU1lYXN1cmVtZW50Vm9sdW1lTWVhc3VyZW1lbnRSZXN1bHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzLzNkL2FuYWx5c2lzL1ZvbHVtZU1lYXN1cmVtZW50L1ZvbHVtZU1lYXN1cmVtZW50UmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC9hbmFseXNpcy9Wb2x1bWVNZWFzdXJlbWVudC9Wb2x1bWVNZWFzdXJlbWVudFJlc3VsdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3czNkQW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudFZvbHVtZU1lYXN1cmVtZW50UmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3czNkQW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudFZvbHVtZU1lYXN1cmVtZW50UmVzdWx0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3czNkRW52aXJvbm1lbnRDbG91ZHlXZWF0aGVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC9lbnZpcm9ubWVudC9DbG91ZHlXZWF0aGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC9lbnZpcm9ubWVudC9DbG91ZHlXZWF0aGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzM2RFbnZpcm9ubWVudENsb3VkeVdlYXRoZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzM2RFbnZpcm9ubWVudENsb3VkeVdlYXRoZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RFbnZpcm9ubWVudEZvZ2d5V2VhdGhlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvM2QvZW52aXJvbm1lbnQvRm9nZ3lXZWF0aGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC9lbnZpcm9ubWVudC9Gb2dneVdlYXRoZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3MzZEVudmlyb25tZW50Rm9nZ3lXZWF0aGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3czNkRW52aXJvbm1lbnRGb2dneVdlYXRoZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RFbnZpcm9ubWVudFJhaW55V2VhdGhlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvM2QvZW52aXJvbm1lbnQvUmFpbnlXZWF0aGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC9lbnZpcm9ubWVudC9SYWlueVdlYXRoZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3MzZEVudmlyb25tZW50UmFpbnlXZWF0aGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3czNkRW52aXJvbm1lbnRSYWlueVdlYXRoZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RFbnZpcm9ubWVudFNub3d5V2VhdGhlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvM2QvZW52aXJvbm1lbnQvU25vd3lXZWF0aGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC9lbnZpcm9ubWVudC9Tbm93eVdlYXRoZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3MzZEVudmlyb25tZW50U25vd3lXZWF0aGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3czNkRW52aXJvbm1lbnRTbm93eVdlYXRoZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RFbnZpcm9ubWVudFN1bkxpZ2h0aW5nKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC9lbnZpcm9ubWVudC9TdW5MaWdodGluZ1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvM2QvZW52aXJvbm1lbnQvU3VuTGlnaHRpbmcuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3MzZEVudmlyb25tZW50U3VuTGlnaHRpbmcocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzM2RFbnZpcm9ubWVudFN1bkxpZ2h0aW5nKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3czNkRW52aXJvbm1lbnRTdW5ueVdlYXRoZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzLzNkL2Vudmlyb25tZW50L1N1bm55V2VhdGhlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvM2QvZW52aXJvbm1lbnQvU3VubnlXZWF0aGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzM2RFbnZpcm9ubWVudFN1bm55V2VhdGhlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3MzZEVudmlyb25tZW50U3VubnlXZWF0aGVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3czNkRW52aXJvbm1lbnRWaXJ0dWFsTGlnaHRpbmcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzLzNkL2Vudmlyb25tZW50L1ZpcnR1YWxMaWdodGluZ1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvM2QvZW52aXJvbm1lbnQvVmlydHVhbExpZ2h0aW5nLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzM2RFbnZpcm9ubWVudFZpcnR1YWxMaWdodGluZyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3MzZEVudmlyb25tZW50VmlydHVhbExpZ2h0aW5nKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3czNkV2ViZ2xSZW5kZXJOb2RlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC93ZWJnbC9SZW5kZXJOb2RlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC93ZWJnbC9SZW5kZXJOb2RlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzM2RXZWJnbFJlbmRlck5vZGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzM2RXZWJnbFJlbmRlck5vZGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzQW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvYW5hbHlzaXMvRWxldmF0aW9uUHJvZmlsZS9FbGV2YXRpb25Qcm9maWxlUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9hbmFseXNpcy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlUmVzdWx0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0FuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVSZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzRHJhd0RyYXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2RyYXcvRHJhd1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvZHJhdy9EcmF3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzRHJhd0RyYXcocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzRHJhd0RyYXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzRHJhd0RyYXdBY3Rpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2RyYXcvRHJhd0FjdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvZHJhdy9EcmF3QWN0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzRHJhd0RyYXdBY3Rpb24ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzRHJhd0RyYXdBY3Rpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzRHJhd011bHRpcG9pbnREcmF3QWN0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9kcmF3L011bHRpcG9pbnREcmF3QWN0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9kcmF3L011bHRpcG9pbnREcmF3QWN0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzRHJhd011bHRpcG9pbnREcmF3QWN0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0RyYXdNdWx0aXBvaW50RHJhd0FjdGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NEcmF3UG9pbnREcmF3QWN0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9kcmF3L1BvaW50RHJhd0FjdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvZHJhdy9Qb2ludERyYXdBY3Rpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NEcmF3UG9pbnREcmF3QWN0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0RyYXdQb2ludERyYXdBY3Rpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzRHJhd1BvbHlnb25EcmF3QWN0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9kcmF3L1BvbHlnb25EcmF3QWN0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9kcmF3L1BvbHlnb25EcmF3QWN0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzRHJhd1BvbHlnb25EcmF3QWN0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0RyYXdQb2x5Z29uRHJhd0FjdGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NEcmF3UG9seWxpbmVEcmF3QWN0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9kcmF3L1BvbHlsaW5lRHJhd0FjdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvZHJhdy9Qb2x5bGluZURyYXdBY3Rpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NEcmF3UG9seWxpbmVEcmF3QWN0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0RyYXdQb2x5bGluZURyYXdBY3Rpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzRHJhd1NlZ21lbnREcmF3QWN0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9kcmF3L1NlZ21lbnREcmF3QWN0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9kcmF3L1NlZ21lbnREcmF3QWN0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzRHJhd1NlZ21lbnREcmF3QWN0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0RyYXdTZWdtZW50RHJhd0FjdGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NJbnB1dElucHV0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9pbnB1dC9JbnB1dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvaW5wdXQvSW5wdXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NJbnB1dElucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0lucHV0SW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzSW5wdXRHYW1lcGFkR2FtZXBhZElucHV0RGV2aWNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9pbnB1dC9nYW1lcGFkL0dhbWVwYWRJbnB1dERldmljZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvaW5wdXQvZ2FtZXBhZC9HYW1lcGFkSW5wdXREZXZpY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NJbnB1dEdhbWVwYWRHYW1lcGFkSW5wdXREZXZpY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzSW5wdXRHYW1lcGFkR2FtZXBhZElucHV0RGV2aWNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c0lucHV0R2FtZXBhZEdhbWVwYWRTZXR0aW5ncygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvaW5wdXQvZ2FtZXBhZC9HYW1lcGFkU2V0dGluZ3NcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzL2lucHV0L2dhbWVwYWQvR2FtZXBhZFNldHRpbmdzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzSW5wdXRHYW1lcGFkR2FtZXBhZFNldHRpbmdzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0lucHV0R2FtZXBhZEdhbWVwYWRTZXR0aW5ncygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NJbnRlcmFjdGl2ZVNrZXRjaFNrZXRjaExhYmVsT3B0aW9ucygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvaW50ZXJhY3RpdmUvc2tldGNoL1NrZXRjaExhYmVsT3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvaW50ZXJhY3RpdmUvc2tldGNoL1NrZXRjaExhYmVsT3B0aW9ucy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3c0ludGVyYWN0aXZlU2tldGNoU2tldGNoTGFiZWxPcHRpb25zKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0ludGVyYWN0aXZlU2tldGNoU2tldGNoTGFiZWxPcHRpb25zKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c0ludGVyYWN0aXZlU2tldGNoU2tldGNoVG9vbHRpcE9wdGlvbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2ludGVyYWN0aXZlL3NrZXRjaC9Ta2V0Y2hUb29sdGlwT3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvaW50ZXJhY3RpdmUvc2tldGNoL1NrZXRjaFRvb2x0aXBPcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzSW50ZXJhY3RpdmVTa2V0Y2hTa2V0Y2hUb29sdGlwT3B0aW9ucyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NJbnRlcmFjdGl2ZVNrZXRjaFNrZXRjaFRvb2x0aXBPcHRpb25zKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c0ludGVyYWN0aXZlU2tldGNoU2tldGNoVmFsdWVPcHRpb25zKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9pbnRlcmFjdGl2ZS9za2V0Y2gvU2tldGNoVmFsdWVPcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9pbnRlcmFjdGl2ZS9za2V0Y2gvU2tldGNoVmFsdWVPcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzSW50ZXJhY3RpdmVTa2V0Y2hTa2V0Y2hWYWx1ZU9wdGlvbnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzSW50ZXJhY3RpdmVTa2V0Y2hTa2V0Y2hWYWx1ZU9wdGlvbnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzSW50ZXJhY3RpdmVTbmFwcGluZ0ZlYXR1cmVTbmFwcGluZ0xheWVyU291cmNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9pbnRlcmFjdGl2ZS9zbmFwcGluZy9GZWF0dXJlU25hcHBpbmdMYXllclNvdXJjZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvaW50ZXJhY3RpdmUvc25hcHBpbmcvRmVhdHVyZVNuYXBwaW5nTGF5ZXJTb3VyY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NJbnRlcmFjdGl2ZVNuYXBwaW5nRmVhdHVyZVNuYXBwaW5nTGF5ZXJTb3VyY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzSW50ZXJhY3RpdmVTbmFwcGluZ0ZlYXR1cmVTbmFwcGluZ0xheWVyU291cmNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c0ludGVyYWN0aXZlU25hcHBpbmdTbmFwcGluZ09wdGlvbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2ludGVyYWN0aXZlL3NuYXBwaW5nL1NuYXBwaW5nT3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvaW50ZXJhY3RpdmUvc25hcHBpbmcvU25hcHBpbmdPcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzSW50ZXJhY3RpdmVTbmFwcGluZ1NuYXBwaW5nT3B0aW9ucyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NJbnRlcmFjdGl2ZVNuYXBwaW5nU25hcHBpbmdPcHRpb25zKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c0ludGVyYWN0aXZlVG9vbHRpcCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvaW50ZXJhY3RpdmUvVG9vbHRpcFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvaW50ZXJhY3RpdmUvVG9vbHRpcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3c0ludGVyYWN0aXZlVG9vbHRpcChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NJbnRlcmFjdGl2ZVRvb2x0aXAoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTGF5ZXJzQnVpbGRpbmdDb21wb25lbnRTdWJsYXllclZpZXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2xheWVycy9CdWlsZGluZ0NvbXBvbmVudFN1YmxheWVyVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbGF5ZXJzL0J1aWxkaW5nQ29tcG9uZW50U3VibGF5ZXJWaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTGF5ZXJzQnVpbGRpbmdDb21wb25lbnRTdWJsYXllclZpZXcocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTGF5ZXJzQnVpbGRpbmdDb21wb25lbnRTdWJsYXllclZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTGF5ZXJzQnVpbGRpbmdTY2VuZUxheWVyVmlldygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvbGF5ZXJzL0J1aWxkaW5nU2NlbmVMYXllclZpZXdcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzL2xheWVycy9CdWlsZGluZ1NjZW5lTGF5ZXJWaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTGF5ZXJzQnVpbGRpbmdTY2VuZUxheWVyVmlldyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NMYXllcnNCdWlsZGluZ1NjZW5lTGF5ZXJWaWV3KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c0xheWVyc0RpbWVuc2lvbkxheWVyVmlldygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvbGF5ZXJzL0RpbWVuc2lvbkxheWVyVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbGF5ZXJzL0RpbWVuc2lvbkxheWVyVmlldy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3c0xheWVyc0RpbWVuc2lvbkxheWVyVmlldyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NMYXllcnNEaW1lbnNpb25MYXllclZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTGF5ZXJzR3JvdXBMYXllclZpZXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2xheWVycy9Hcm91cExheWVyVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbGF5ZXJzL0dyb3VwTGF5ZXJWaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTGF5ZXJzR3JvdXBMYXllclZpZXcocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTGF5ZXJzR3JvdXBMYXllclZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTGF5ZXJzSW1hZ2VyeUxheWVyVmlldygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvbGF5ZXJzL0ltYWdlcnlMYXllclZpZXdcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzL2xheWVycy9JbWFnZXJ5TGF5ZXJWaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTGF5ZXJzSW1hZ2VyeUxheWVyVmlldyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NMYXllcnNJbWFnZXJ5TGF5ZXJWaWV3KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c0xheWVyc0ltYWdlcnlUaWxlTGF5ZXJWaWV3KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9sYXllcnMvSW1hZ2VyeVRpbGVMYXllclZpZXdcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzL2xheWVycy9JbWFnZXJ5VGlsZUxheWVyVmlldy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3c0xheWVyc0ltYWdlcnlUaWxlTGF5ZXJWaWV3KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c0xheWVyc0ltYWdlcnlUaWxlTGF5ZXJWaWV3KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c0xheWVyc0xheWVyVmlldygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvbGF5ZXJzL0xheWVyVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbGF5ZXJzL0xheWVyVmlldy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3c0xheWVyc0xheWVyVmlldyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NMYXllcnNMYXllclZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTGF5ZXJzTGluZU9mU2lnaHRMYXllclZpZXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2xheWVycy9MaW5lT2ZTaWdodExheWVyVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbGF5ZXJzL0xpbmVPZlNpZ2h0TGF5ZXJWaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTGF5ZXJzTGluZU9mU2lnaHRMYXllclZpZXcocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTGF5ZXJzTGluZU9mU2lnaHRMYXllclZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTGF5ZXJzTWVkaWFMYXllclZpZXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2xheWVycy9NZWRpYUxheWVyVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbGF5ZXJzL01lZGlhTGF5ZXJWaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTGF5ZXJzTWVkaWFMYXllclZpZXcocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTGF5ZXJzTWVkaWFMYXllclZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTGF5ZXJzU2NlbmVMYXllclZpZXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2xheWVycy9TY2VuZUxheWVyVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbGF5ZXJzL1NjZW5lTGF5ZXJWaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTGF5ZXJzU2NlbmVMYXllclZpZXcocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTGF5ZXJzU2NlbmVMYXllclZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTGF5ZXJzVmlld3NoZWRMYXllclZpZXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL2xheWVycy9WaWV3c2hlZExheWVyVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbGF5ZXJzL1ZpZXdzaGVkTGF5ZXJWaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTGF5ZXJzVmlld3NoZWRMYXllclZpZXcocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTGF5ZXJzVmlld3NoZWRMYXllclZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTGlua0NoYXJ0VmlldygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvTGlua0NoYXJ0Vmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvTGlua0NoYXJ0Vmlldy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3c0xpbmtDaGFydFZpZXcocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTGlua0NoYXJ0VmlldygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NNYWduaWZpZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL01hZ25pZmllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvTWFnbmlmaWVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTWFnbmlmaWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c01hZ25pZmllcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NNYXBWaWV3KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9NYXBWaWV3XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9NYXBWaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTWFwVmlldyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NNYXBWaWV3KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c05hdmlnYXRpb25HYW1lcGFkR2FtZXBhZFNldHRpbmdzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9uYXZpZ2F0aW9uL2dhbWVwYWQvR2FtZXBhZFNldHRpbmdzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9uYXZpZ2F0aW9uL2dhbWVwYWQvR2FtZXBhZFNldHRpbmdzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTmF2aWdhdGlvbkdhbWVwYWRHYW1lcGFkU2V0dGluZ3MocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTmF2aWdhdGlvbkdhbWVwYWRHYW1lcGFkU2V0dGluZ3MoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTmF2aWdhdGlvbk5hdmlnYXRpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL25hdmlnYXRpb24vTmF2aWdhdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbmF2aWdhdGlvbi9OYXZpZ2F0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTmF2aWdhdGlvbk5hdmlnYXRpb24ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTmF2aWdhdGlvbk5hdmlnYXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzTmF2aWdhdGlvbk5hdmlnYXRpb25BY3Rpb25NYXAoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL25hdmlnYXRpb24vTmF2aWdhdGlvbkFjdGlvbk1hcFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvbmF2aWdhdGlvbi9OYXZpZ2F0aW9uQWN0aW9uTWFwLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzTmF2aWdhdGlvbk5hdmlnYXRpb25BY3Rpb25NYXAocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzTmF2aWdhdGlvbk5hdmlnYXRpb25BY3Rpb25NYXAoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzU2NlbmVWaWV3KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9TY2VuZVZpZXdcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzL1NjZW5lVmlldy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdWaWV3c1NjZW5lVmlldyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NTY2VuZVZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzU3VwcG9ydEhpZ2hsaWdodE9wdGlvbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL3N1cHBvcnQvSGlnaGxpZ2h0T3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3Mvc3VwcG9ydC9IaWdobGlnaHRPcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzU3VwcG9ydEhpZ2hsaWdodE9wdGlvbnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzU3VwcG9ydEhpZ2hsaWdodE9wdGlvbnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzVWlEZWZhdWx0VUkoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL3VpL0RlZmF1bHRVSVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvdWkvRGVmYXVsdFVJLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzVWlEZWZhdWx0VUkocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzVWlEZWZhdWx0VUkoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzVWlVSSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvdWkvVUlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzL3VpL1VJLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzVWlVSShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NVaVVJKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c1RoZW1lKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9UaGVtZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvVGhlbWUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NUaGVtZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NUaGVtZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NWaWRlb1ZpZXcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL1ZpZGVvVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvVmlkZW9WaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzVmlkZW9WaWV3KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c1ZpZGVvVmlldygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NWaWV3KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy9WaWV3XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9WaWV3LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1ZpZXdzVmlldyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0Vmlld3NWaWV3KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c1ZpZXcyRCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvVmlldzJEXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9WaWV3MkQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NWaWV3MkQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFZpZXdzVmlldzJEKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3c1ZpZXdBbmltYXRpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzL1ZpZXdBbmltYXRpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzL1ZpZXdBbmltYXRpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3Vmlld3NWaWV3QW5pbWF0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRWaWV3c1ZpZXdBbmltYXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYmRvY0FwcGxpY2F0aW9uUHJvcGVydGllc1NlYXJjaCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2ViZG9jL2FwcGxpY2F0aW9uUHJvcGVydGllcy9TZWFyY2hcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9hcHBsaWNhdGlvblByb3BlcnRpZXMvU2VhcmNoLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYmRvY0FwcGxpY2F0aW9uUHJvcGVydGllc1NlYXJjaChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzU2VhcmNoKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NBcHBsaWNhdGlvblByb3BlcnRpZXNTZWFyY2hMYXllcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2ViZG9jL2FwcGxpY2F0aW9uUHJvcGVydGllcy9TZWFyY2hMYXllclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2ViZG9jL2FwcGxpY2F0aW9uUHJvcGVydGllcy9TZWFyY2hMYXllci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NBcHBsaWNhdGlvblByb3BlcnRpZXNTZWFyY2hMYXllcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzU2VhcmNoTGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYmRvY0FwcGxpY2F0aW9uUHJvcGVydGllc1NlYXJjaExheWVyRmllbGQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYmRvYy9hcHBsaWNhdGlvblByb3BlcnRpZXMvU2VhcmNoTGF5ZXJGaWVsZFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2ViZG9jL2FwcGxpY2F0aW9uUHJvcGVydGllcy9TZWFyY2hMYXllckZpZWxkLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYmRvY0FwcGxpY2F0aW9uUHJvcGVydGllc1NlYXJjaExheWVyRmllbGQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYmRvY0FwcGxpY2F0aW9uUHJvcGVydGllc1NlYXJjaExheWVyRmllbGQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYmRvY0FwcGxpY2F0aW9uUHJvcGVydGllc1NlYXJjaFRhYmxlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJkb2MvYXBwbGljYXRpb25Qcm9wZXJ0aWVzL1NlYXJjaFRhYmxlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJkb2MvYXBwbGljYXRpb25Qcm9wZXJ0aWVzL1NlYXJjaFRhYmxlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYmRvY0FwcGxpY2F0aW9uUHJvcGVydGllc1NlYXJjaFRhYmxlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJkb2NBcHBsaWNhdGlvblByb3BlcnRpZXNTZWFyY2hUYWJsZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzU2VhcmNoVGFibGVGaWVsZCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2ViZG9jL2FwcGxpY2F0aW9uUHJvcGVydGllcy9TZWFyY2hUYWJsZUZpZWxkXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJkb2MvYXBwbGljYXRpb25Qcm9wZXJ0aWVzL1NlYXJjaFRhYmxlRmllbGQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzU2VhcmNoVGFibGVGaWVsZChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzU2VhcmNoVGFibGVGaWVsZCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzVmlld2luZygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2ViZG9jL2FwcGxpY2F0aW9uUHJvcGVydGllcy9WaWV3aW5nXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJkb2MvYXBwbGljYXRpb25Qcm9wZXJ0aWVzL1ZpZXdpbmcuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzVmlld2luZyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzVmlld2luZygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2ViZG9jR2VvdHJpZ2dlcnNJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJkb2MvR2VvdHJpZ2dlcnNJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJkb2MvR2VvdHJpZ2dlcnNJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYmRvY0dlb3RyaWdnZXJzSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2ViZG9jR2VvdHJpZ2dlcnNJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9EZXZpY2VMb2NhdGlvbkZlZWQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYmRvYy9nZW90cmlnZ2Vyc0luZm8vRGV2aWNlTG9jYXRpb25GZWVkXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJkb2MvZ2VvdHJpZ2dlcnNJbmZvL0RldmljZUxvY2F0aW9uRmVlZC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NHZW90cmlnZ2Vyc0luZm9EZXZpY2VMb2NhdGlvbkZlZWQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYmRvY0dlb3RyaWdnZXJzSW5mb0RldmljZUxvY2F0aW9uRmVlZCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2ViZG9jR2VvdHJpZ2dlcnNJbmZvRXhwcmVzc2lvbkluZm8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYmRvYy9nZW90cmlnZ2Vyc0luZm8vRXhwcmVzc2lvbkluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9nZW90cmlnZ2Vyc0luZm8vRXhwcmVzc2lvbkluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2ViZG9jR2VvdHJpZ2dlcnNJbmZvRXhwcmVzc2lvbkluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYmRvY0dlb3RyaWdnZXJzSW5mb0V4cHJlc3Npb25JbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmVuY2VQYXJhbWV0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJkb2MvZ2VvdHJpZ2dlcnNJbmZvL0ZlYXR1cmVGZW5jZVBhcmFtZXRlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9nZW90cmlnZ2Vyc0luZm8vRmVhdHVyZUZlbmNlUGFyYW1ldGVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmVuY2VQYXJhbWV0ZXJzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmVuY2VQYXJhbWV0ZXJzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmlsdGVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJkb2MvZ2VvdHJpZ2dlcnNJbmZvL0ZlYXR1cmVGaWx0ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9nZW90cmlnZ2Vyc0luZm8vRmVhdHVyZUZpbHRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmlsdGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmlsdGVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlTGF5ZXJTb3VyY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYmRvYy9nZW90cmlnZ2Vyc0luZm8vRmVhdHVyZUxheWVyU291cmNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJkb2MvZ2VvdHJpZ2dlcnNJbmZvL0ZlYXR1cmVMYXllclNvdXJjZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlTGF5ZXJTb3VyY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYmRvY0dlb3RyaWdnZXJzSW5mb0ZlYXR1cmVMYXllclNvdXJjZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2ViZG9jR2VvdHJpZ2dlcnNJbmZvRmVuY2VHZW90cmlnZ2VyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJkb2MvZ2VvdHJpZ2dlcnNJbmZvL0ZlbmNlR2VvdHJpZ2dlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2ViZG9jL2dlb3RyaWdnZXJzSW5mby9GZW5jZUdlb3RyaWdnZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2ViZG9jR2VvdHJpZ2dlcnNJbmZvRmVuY2VHZW90cmlnZ2VyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZW5jZUdlb3RyaWdnZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYmRvY0dlb3RyaWdnZXJzSW5mb0dlb3RyaWdnZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYmRvYy9nZW90cmlnZ2Vyc0luZm8vR2VvdHJpZ2dlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2ViZG9jL2dlb3RyaWdnZXJzSW5mby9HZW90cmlnZ2VyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYmRvY0dlb3RyaWdnZXJzSW5mb0dlb3RyaWdnZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYmRvY0dlb3RyaWdnZXJzSW5mb0dlb3RyaWdnZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYmRvY0dlb3RyaWdnZXJzSW5mb0dlb3RyaWdnZXJOb3RpZmljYXRpb25PcHRpb25zKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJkb2MvZ2VvdHJpZ2dlcnNJbmZvL0dlb3RyaWdnZXJOb3RpZmljYXRpb25PcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJkb2MvZ2VvdHJpZ2dlcnNJbmZvL0dlb3RyaWdnZXJOb3RpZmljYXRpb25PcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYmRvY0dlb3RyaWdnZXJzSW5mb0dlb3RyaWdnZXJOb3RpZmljYXRpb25PcHRpb25zKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9HZW90cmlnZ2VyTm90aWZpY2F0aW9uT3B0aW9ucygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2ViZG9jSVBTSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2ViZG9jL0lQU0luZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9JUFNJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYmRvY0lQU0luZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYmRvY0lQU0luZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYmRvY0lwc1Bvc2l0aW9uaW5nU2VydmljZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2ViZG9jL2lwcy9Qb3NpdGlvbmluZ1NlcnZpY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9pcHMvUG9zaXRpb25pbmdTZXJ2aWNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYmRvY0lwc1Bvc2l0aW9uaW5nU2VydmljZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2ViZG9jSXBzUG9zaXRpb25pbmdTZXJ2aWNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NJcHNDb25maWd1cmF0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJkb2MvaXBzL0NvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9pcHMvQ29uZmlndXJhdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NJcHNDb25maWd1cmF0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJkb2NJcHNDb25maWd1cmF0aW9uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NJcHNBcHBsZUlQU1Byb3BlcnRpZXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYmRvYy9pcHMvQXBwbGVJUFNQcm9wZXJ0aWVzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJkb2MvaXBzL0FwcGxlSVBTUHJvcGVydGllcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NJcHNBcHBsZUlQU1Byb3BlcnRpZXMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYmRvY0lwc0FwcGxlSVBTUHJvcGVydGllcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2ViZG9jSXBzR05TU1Byb3BlcnRpZXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYmRvYy9pcHMvR05TU1Byb3BlcnRpZXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9pcHMvR05TU1Byb3BlcnRpZXMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2ViZG9jSXBzR05TU1Byb3BlcnRpZXMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYmRvY0lwc0dOU1NQcm9wZXJ0aWVzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NJcHNQYXRoU25hcHBpbmdQcm9wZXJ0aWVzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJkb2MvaXBzL1BhdGhTbmFwcGluZ1Byb3BlcnRpZXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9pcHMvUGF0aFNuYXBwaW5nUHJvcGVydGllcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NJcHNQYXRoU25hcHBpbmdQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJkb2NJcHNQYXRoU25hcHBpbmdQcm9wZXJ0aWVzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NJcHNTbW9vdGhpbmdQcm9wZXJ0aWVzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJkb2MvaXBzL1Ntb290aGluZ1Byb3BlcnRpZXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYmRvYy9pcHMvU21vb3RoaW5nUHJvcGVydGllcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NJcHNTbW9vdGhpbmdQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJkb2NJcHNTbW9vdGhpbmdQcm9wZXJ0aWVzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJkb2NXaWRnZXRzVGltZVNsaWRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2ViZG9jL3dpZGdldHMvVGltZVNsaWRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2ViZG9jL3dpZGdldHMvVGltZVNsaWRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJkb2NXaWRnZXRzVGltZVNsaWRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2ViZG9jV2lkZ2V0c1RpbWVTbGlkZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYkRvY3VtZW50MkQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL1dlYkRvY3VtZW50MkRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL1dlYkRvY3VtZW50MkQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2ViRG9jdW1lbnQyRChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2ViRG9jdW1lbnQyRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2ViTGlua0NoYXJ0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9XZWJMaW5rQ2hhcnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL1dlYkxpbmtDaGFydC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJMaW5rQ2hhcnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYkxpbmtDaGFydCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2ViTWFwKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9XZWJNYXBcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL1dlYk1hcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJNYXAocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYk1hcCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2VibWFwQXBwbGljYXRpb25Qcm9wZXJ0aWVzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJtYXAvQXBwbGljYXRpb25Qcm9wZXJ0aWVzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJtYXAvQXBwbGljYXRpb25Qcm9wZXJ0aWVzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYm1hcEFwcGxpY2F0aW9uUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2VibWFwQXBwbGljYXRpb25Qcm9wZXJ0aWVzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJtYXBCYWNrZ3JvdW5kQ29sb3JCYWNrZ3JvdW5kKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJtYXAvYmFja2dyb3VuZC9Db2xvckJhY2tncm91bmRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYm1hcC9iYWNrZ3JvdW5kL0NvbG9yQmFja2dyb3VuZC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJtYXBCYWNrZ3JvdW5kQ29sb3JCYWNrZ3JvdW5kKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJtYXBCYWNrZ3JvdW5kQ29sb3JCYWNrZ3JvdW5kKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJtYXBCb29rbWFyaygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2VibWFwL0Jvb2ttYXJrXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJtYXAvQm9va21hcmsuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2VibWFwQm9va21hcmsocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYm1hcEJvb2ttYXJrKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJtYXBJbml0aWFsVmlld1Byb3BlcnRpZXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYm1hcC9Jbml0aWFsVmlld1Byb3BlcnRpZXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYm1hcC9Jbml0aWFsVmlld1Byb3BlcnRpZXMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2VibWFwSW5pdGlhbFZpZXdQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJtYXBJbml0aWFsVmlld1Byb3BlcnRpZXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYlNjZW5lKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9XZWJTY2VuZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvV2ViU2NlbmUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2ViU2NlbmUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYlNjZW5lKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJzY2VuZUFwcGxpY2F0aW9uUHJvcGVydGllcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2Vic2NlbmUvQXBwbGljYXRpb25Qcm9wZXJ0aWVzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJzY2VuZS9BcHBsaWNhdGlvblByb3BlcnRpZXMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2Vic2NlbmVBcHBsaWNhdGlvblByb3BlcnRpZXMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYnNjZW5lQXBwbGljYXRpb25Qcm9wZXJ0aWVzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJzY2VuZUJhY2tncm91bmRCYWNrZ3JvdW5kKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJzY2VuZS9iYWNrZ3JvdW5kL0JhY2tncm91bmRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYnNjZW5lL2JhY2tncm91bmQvQmFja2dyb3VuZC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJzY2VuZUJhY2tncm91bmRCYWNrZ3JvdW5kKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJzY2VuZUJhY2tncm91bmRCYWNrZ3JvdW5kKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJzY2VuZUJhY2tncm91bmRDb2xvckJhY2tncm91bmQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYnNjZW5lL2JhY2tncm91bmQvQ29sb3JCYWNrZ3JvdW5kXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJzY2VuZS9iYWNrZ3JvdW5kL0NvbG9yQmFja2dyb3VuZC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJzY2VuZUJhY2tncm91bmRDb2xvckJhY2tncm91bmQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYnNjZW5lQmFja2dyb3VuZENvbG9yQmFja2dyb3VuZCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2Vic2NlbmVFbnZpcm9ubWVudCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2Vic2NlbmUvRW52aXJvbm1lbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYnNjZW5lL0Vudmlyb25tZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYnNjZW5lRW52aXJvbm1lbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYnNjZW5lRW52aXJvbm1lbnQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYnNjZW5lSW5pdGlhbFZpZXdQcm9wZXJ0aWVzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJzY2VuZS9Jbml0aWFsVmlld1Byb3BlcnRpZXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYnNjZW5lL0luaXRpYWxWaWV3UHJvcGVydGllcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJzY2VuZUluaXRpYWxWaWV3UHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2Vic2NlbmVJbml0aWFsVmlld1Byb3BlcnRpZXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYnNjZW5lUHJlc2VudGF0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJzY2VuZS9QcmVzZW50YXRpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYnNjZW5lL1ByZXNlbnRhdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJzY2VuZVByZXNlbnRhdGlvbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2Vic2NlbmVQcmVzZW50YXRpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYnNjZW5lU2xpZGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYnNjZW5lL1NsaWRlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJzY2VuZS9TbGlkZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJzY2VuZVNsaWRlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJzY2VuZVNsaWRlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJzY2VuZVNsaWRlTGVnZW5kSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2Vic2NlbmUvU2xpZGVMZWdlbmRJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJzY2VuZS9TbGlkZUxlZ2VuZEluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2Vic2NlbmVTbGlkZUxlZ2VuZEluZm8ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYnNjZW5lU2xpZGVMZWdlbmRJbmZvKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJzY2VuZVN1bkxpZ2h0aW5nKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJzY2VuZS9TdW5MaWdodGluZ1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2Vic2NlbmUvU3VuTGlnaHRpbmcuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2Vic2NlbmVTdW5MaWdodGluZyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2Vic2NlbmVTdW5MaWdodGluZygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2Vic2NlbmVWaXJ0dWFsTGlnaHRpbmcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYnNjZW5lL1ZpcnR1YWxMaWdodGluZ1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2Vic2NlbmUvVmlydHVhbExpZ2h0aW5nLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYnNjZW5lVmlydHVhbExpZ2h0aW5nKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJzY2VuZVZpcnR1YWxMaWdodGluZygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZUdsb2JhbElkKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJzY2VuZS9zdXBwb3J0L0ZlYXR1cmVSZWZlcmVuY2VHbG9iYWxJZFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2Vic2NlbmUvc3VwcG9ydC9GZWF0dXJlUmVmZXJlbmNlR2xvYmFsSWQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZUdsb2JhbElkKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJzY2VuZVN1cHBvcnRGZWF0dXJlUmVmZXJlbmNlR2xvYmFsSWQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdlYnNjZW5lU3VwcG9ydEZlYXR1cmVSZWZlcmVuY2VJZCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2Vic2NlbmUvc3VwcG9ydC9GZWF0dXJlUmVmZXJlbmNlSWRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYnNjZW5lL3N1cHBvcnQvRmVhdHVyZVJlZmVyZW5jZUlkLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dlYnNjZW5lU3VwcG9ydEZlYXR1cmVSZWZlcmVuY2VJZChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZUlkKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJzY2VuZVN1cHBvcnRGZWF0dXJlUmVmZXJlbmNlT2JqZWN0SWQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYnNjZW5lL3N1cHBvcnQvRmVhdHVyZVJlZmVyZW5jZU9iamVjdElkXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJzY2VuZS9zdXBwb3J0L0ZlYXR1cmVSZWZlcmVuY2VPYmplY3RJZC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJzY2VuZVN1cHBvcnRGZWF0dXJlUmVmZXJlbmNlT2JqZWN0SWQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYnNjZW5lU3VwcG9ydEZlYXR1cmVSZWZlcmVuY2VPYmplY3RJZCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2Vic2NlbmUvc3VwcG9ydC9GZWF0dXJlUmVmZXJlbmNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93ZWJzY2VuZS9zdXBwb3J0L0ZlYXR1cmVSZWZlcmVuY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2Vic2NlbmVTdXBwb3J0TGF5ZXJSZWZlcmVuY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dlYnNjZW5lL3N1cHBvcnQvTGF5ZXJSZWZlcmVuY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYnNjZW5lL3N1cHBvcnQvTGF5ZXJSZWZlcmVuY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2Vic2NlbmVTdXBwb3J0TGF5ZXJSZWZlcmVuY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdlYnNjZW5lU3VwcG9ydExheWVyUmVmZXJlbmNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJzY2VuZVN1cHBvcnRTbGlkZUVsZW1lbnRzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93ZWJzY2VuZS9zdXBwb3J0L1NsaWRlRWxlbWVudHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dlYnNjZW5lL3N1cHBvcnQvU2xpZGVFbGVtZW50cy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJzY2VuZVN1cHBvcnRTbGlkZUVsZW1lbnRzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXZWJzY2VuZVN1cHBvcnRTbGlkZUVsZW1lbnRzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXZWJzY2VuZVN1cHBvcnRTbGlkZVBvcHVwSW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2Vic2NlbmUvc3VwcG9ydC9TbGlkZVBvcHVwSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2Vic2NlbmUvc3VwcG9ydC9TbGlkZVBvcHVwSW5mby5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXZWJzY2VuZVN1cHBvcnRTbGlkZVBvcHVwSW5mbyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2Vic2NlbmVTdXBwb3J0U2xpZGVQb3B1cEluZm8oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNBcmVhTWVhc3VyZW1lbnQyRCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9BcmVhTWVhc3VyZW1lbnQyRFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9BcmVhTWVhc3VyZW1lbnQyRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQXJlYU1lYXN1cmVtZW50MkQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNBcmVhTWVhc3VyZW1lbnQyRCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0FyZWFNZWFzdXJlbWVudDJEQXJlYU1lYXN1cmVtZW50MkRWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQXJlYU1lYXN1cmVtZW50MkQvQXJlYU1lYXN1cmVtZW50MkRWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQXJlYU1lYXN1cmVtZW50MkQvQXJlYU1lYXN1cmVtZW50MkRWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0FyZWFNZWFzdXJlbWVudDJEQXJlYU1lYXN1cmVtZW50MkRWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNBcmVhTWVhc3VyZW1lbnQyREFyZWFNZWFzdXJlbWVudDJEVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQXJlYU1lYXN1cmVtZW50M0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQXJlYU1lYXN1cmVtZW50M0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQXJlYU1lYXN1cmVtZW50M0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0FyZWFNZWFzdXJlbWVudDNEKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQXJlYU1lYXN1cmVtZW50M0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNBcmVhTWVhc3VyZW1lbnQzREFyZWFNZWFzdXJlbWVudDNEVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0FyZWFNZWFzdXJlbWVudDNEL0FyZWFNZWFzdXJlbWVudDNEVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0FyZWFNZWFzdXJlbWVudDNEL0FyZWFNZWFzdXJlbWVudDNEVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNBcmVhTWVhc3VyZW1lbnQzREFyZWFNZWFzdXJlbWVudDNEVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQXJlYU1lYXN1cmVtZW50M0RBcmVhTWVhc3VyZW1lbnQzRFZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0F0dGFjaG1lbnRzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0F0dGFjaG1lbnRzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0F0dGFjaG1lbnRzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNBdHRhY2htZW50cyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0F0dGFjaG1lbnRzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQXR0YWNobWVudHNBdHRhY2htZW50c1ZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9BdHRhY2htZW50cy9BdHRhY2htZW50c1ZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9BdHRhY2htZW50cy9BdHRhY2htZW50c1ZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQXR0YWNobWVudHNBdHRhY2htZW50c1ZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0F0dGFjaG1lbnRzQXR0YWNobWVudHNWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNBdHRyaWJ1dGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9BdHRyaWJ1dGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9BdHRyaWJ1dGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQXR0cmlidXRpb24ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNBdHRyaWJ1dGlvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0F0dHJpYnV0aW9uQXR0cmlidXRpb25WaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQXR0cmlidXRpb24vQXR0cmlidXRpb25WaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQXR0cmlidXRpb24vQXR0cmlidXRpb25WaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0F0dHJpYnV0aW9uQXR0cmlidXRpb25WaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNBdHRyaWJ1dGlvbkF0dHJpYnV0aW9uVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQmFzZW1hcEdhbGxlcnkoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQmFzZW1hcEdhbGxlcnlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQmFzZW1hcEdhbGxlcnkuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0Jhc2VtYXBHYWxsZXJ5KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQmFzZW1hcEdhbGxlcnkoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNCYXNlbWFwR2FsbGVyeUJhc2VtYXBHYWxsZXJ5Vmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0Jhc2VtYXBHYWxsZXJ5L0Jhc2VtYXBHYWxsZXJ5Vmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0Jhc2VtYXBHYWxsZXJ5L0Jhc2VtYXBHYWxsZXJ5Vmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNCYXNlbWFwR2FsbGVyeUJhc2VtYXBHYWxsZXJ5Vmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQmFzZW1hcEdhbGxlcnlCYXNlbWFwR2FsbGVyeVZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0Jhc2VtYXBHYWxsZXJ5U3VwcG9ydEJhc2VtYXBHYWxsZXJ5SXRlbSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9CYXNlbWFwR2FsbGVyeS9zdXBwb3J0L0Jhc2VtYXBHYWxsZXJ5SXRlbVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9CYXNlbWFwR2FsbGVyeS9zdXBwb3J0L0Jhc2VtYXBHYWxsZXJ5SXRlbS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQmFzZW1hcEdhbGxlcnlTdXBwb3J0QmFzZW1hcEdhbGxlcnlJdGVtKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQmFzZW1hcEdhbGxlcnlTdXBwb3J0QmFzZW1hcEdhbGxlcnlJdGVtKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQmFzZW1hcEdhbGxlcnlTdXBwb3J0TG9jYWxCYXNlbWFwc1NvdXJjZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9CYXNlbWFwR2FsbGVyeS9zdXBwb3J0L0xvY2FsQmFzZW1hcHNTb3VyY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQmFzZW1hcEdhbGxlcnkvc3VwcG9ydC9Mb2NhbEJhc2VtYXBzU291cmNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNCYXNlbWFwR2FsbGVyeVN1cHBvcnRMb2NhbEJhc2VtYXBzU291cmNlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQmFzZW1hcEdhbGxlcnlTdXBwb3J0TG9jYWxCYXNlbWFwc1NvdXJjZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0Jhc2VtYXBHYWxsZXJ5U3VwcG9ydFBvcnRhbEJhc2VtYXBzU291cmNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0Jhc2VtYXBHYWxsZXJ5L3N1cHBvcnQvUG9ydGFsQmFzZW1hcHNTb3VyY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQmFzZW1hcEdhbGxlcnkvc3VwcG9ydC9Qb3J0YWxCYXNlbWFwc1NvdXJjZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQmFzZW1hcEdhbGxlcnlTdXBwb3J0UG9ydGFsQmFzZW1hcHNTb3VyY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNCYXNlbWFwR2FsbGVyeVN1cHBvcnRQb3J0YWxCYXNlbWFwc1NvdXJjZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0Jhc2VtYXBMYXllckxpc3QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQmFzZW1hcExheWVyTGlzdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9CYXNlbWFwTGF5ZXJMaXN0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNCYXNlbWFwTGF5ZXJMaXN0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQmFzZW1hcExheWVyTGlzdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0Jhc2VtYXBMYXllckxpc3RCYXNlbWFwTGF5ZXJMaXN0Vmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0Jhc2VtYXBMYXllckxpc3QvQmFzZW1hcExheWVyTGlzdFZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9CYXNlbWFwTGF5ZXJMaXN0L0Jhc2VtYXBMYXllckxpc3RWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0Jhc2VtYXBMYXllckxpc3RCYXNlbWFwTGF5ZXJMaXN0Vmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQmFzZW1hcExheWVyTGlzdEJhc2VtYXBMYXllckxpc3RWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNCYXNlbWFwVG9nZ2xlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0Jhc2VtYXBUb2dnbGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQmFzZW1hcFRvZ2dsZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQmFzZW1hcFRvZ2dsZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0Jhc2VtYXBUb2dnbGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNCYXNlbWFwVG9nZ2xlQmFzZW1hcFRvZ2dsZVZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9CYXNlbWFwVG9nZ2xlL0Jhc2VtYXBUb2dnbGVWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQmFzZW1hcFRvZ2dsZS9CYXNlbWFwVG9nZ2xlVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNCYXNlbWFwVG9nZ2xlQmFzZW1hcFRvZ2dsZVZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0Jhc2VtYXBUb2dnbGVCYXNlbWFwVG9nZ2xlVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQmF0Y2hBdHRyaWJ1dGVGb3JtKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0JhdGNoQXR0cmlidXRlRm9ybVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9CYXRjaEF0dHJpYnV0ZUZvcm0uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUJhdGNoQXR0cmlidXRlRm9ybVZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9CYXRjaEF0dHJpYnV0ZUZvcm0vQmF0Y2hBdHRyaWJ1dGVGb3JtVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0JhdGNoQXR0cmlidXRlRm9ybS9CYXRjaEF0dHJpYnV0ZUZvcm1WaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUJhdGNoQXR0cmlidXRlRm9ybVZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUJhdGNoQXR0cmlidXRlRm9ybVZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUlucHV0c0JhdGNoRm9ybUlucHV0cygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9CYXRjaEF0dHJpYnV0ZUZvcm0vaW5wdXRzL0JhdGNoRm9ybUlucHV0c1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9CYXRjaEF0dHJpYnV0ZUZvcm0vaW5wdXRzL0JhdGNoRm9ybUlucHV0cy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQmF0Y2hBdHRyaWJ1dGVGb3JtSW5wdXRzQmF0Y2hGb3JtSW5wdXRzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQmF0Y2hBdHRyaWJ1dGVGb3JtSW5wdXRzQmF0Y2hGb3JtSW5wdXRzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQmF0Y2hBdHRyaWJ1dGVGb3JtSW5wdXRzRmllbGRJbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9CYXRjaEF0dHJpYnV0ZUZvcm0vaW5wdXRzL0ZpZWxkSW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQmF0Y2hBdHRyaWJ1dGVGb3JtL2lucHV0cy9GaWVsZElucHV0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNCYXRjaEF0dHJpYnV0ZUZvcm1JbnB1dHNGaWVsZElucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQmF0Y2hBdHRyaWJ1dGVGb3JtSW5wdXRzRmllbGRJbnB1dCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUlucHV0c0dyb3VwSW5wdXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQmF0Y2hBdHRyaWJ1dGVGb3JtL2lucHV0cy9Hcm91cElucHV0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0JhdGNoQXR0cmlidXRlRm9ybS9pbnB1dHMvR3JvdXBJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQmF0Y2hBdHRyaWJ1dGVGb3JtSW5wdXRzR3JvdXBJbnB1dChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUlucHV0c0dyb3VwSW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNCb29rbWFya3MoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQm9va21hcmtzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0Jvb2ttYXJrcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQm9va21hcmtzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQm9va21hcmtzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQm9va21hcmtzQm9va21hcmtzVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0Jvb2ttYXJrcy9Cb29rbWFya3NWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQm9va21hcmtzL0Jvb2ttYXJrc1ZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQm9va21hcmtzQm9va21hcmtzVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQm9va21hcmtzQm9va21hcmtzVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQnVpbGRpbmdFeHBsb3JlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9CdWlsZGluZ0V4cGxvcmVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0J1aWxkaW5nRXhwbG9yZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0J1aWxkaW5nRXhwbG9yZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNCdWlsZGluZ0V4cGxvcmVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQnVpbGRpbmdFeHBsb3JlckJ1aWxkaW5nRXhwbG9yZXJWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQnVpbGRpbmdFeHBsb3Jlci9CdWlsZGluZ0V4cGxvcmVyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0J1aWxkaW5nRXhwbG9yZXIvQnVpbGRpbmdFeHBsb3JlclZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQnVpbGRpbmdFeHBsb3JlckJ1aWxkaW5nRXhwbG9yZXJWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNCdWlsZGluZ0V4cGxvcmVyQnVpbGRpbmdFeHBsb3JlclZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0J1aWxkaW5nRXhwbG9yZXJCdWlsZGluZ0xldmVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0J1aWxkaW5nRXhwbG9yZXIvQnVpbGRpbmdMZXZlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9CdWlsZGluZ0V4cGxvcmVyL0J1aWxkaW5nTGV2ZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0J1aWxkaW5nRXhwbG9yZXJCdWlsZGluZ0xldmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQnVpbGRpbmdFeHBsb3JlckJ1aWxkaW5nTGV2ZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNCdWlsZGluZ0V4cGxvcmVyQnVpbGRpbmdQaGFzZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9CdWlsZGluZ0V4cGxvcmVyL0J1aWxkaW5nUGhhc2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQnVpbGRpbmdFeHBsb3Jlci9CdWlsZGluZ1BoYXNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNCdWlsZGluZ0V4cGxvcmVyQnVpbGRpbmdQaGFzZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0J1aWxkaW5nRXhwbG9yZXJCdWlsZGluZ1BoYXNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQ2F0YWxvZ0xheWVyTGlzdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9DYXRhbG9nTGF5ZXJMaXN0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0NhdGFsb2dMYXllckxpc3QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0NhdGFsb2dMYXllckxpc3QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNDYXRhbG9nTGF5ZXJMaXN0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQ2F0YWxvZ0xheWVyTGlzdENhdGFsb2dMYXllckxpc3RWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQ2F0YWxvZ0xheWVyTGlzdC9DYXRhbG9nTGF5ZXJMaXN0Vmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0NhdGFsb2dMYXllckxpc3QvQ2F0YWxvZ0xheWVyTGlzdFZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQ2F0YWxvZ0xheWVyTGlzdENhdGFsb2dMYXllckxpc3RWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNDYXRhbG9nTGF5ZXJMaXN0Q2F0YWxvZ0xheWVyTGlzdFZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0NvbXBhc3MoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQ29tcGFzc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9Db21wYXNzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNDb21wYXNzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQ29tcGFzcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0NvbXBhc3NDb21wYXNzVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0NvbXBhc3MvQ29tcGFzc1ZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9Db21wYXNzL0NvbXBhc3NWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0NvbXBhc3NDb21wYXNzVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQ29tcGFzc0NvbXBhc3NWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNDb29yZGluYXRlQ29udmVyc2lvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9Db29yZGluYXRlQ29udmVyc2lvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9Db29yZGluYXRlQ29udmVyc2lvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQ29vcmRpbmF0ZUNvbnZlcnNpb24ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNDb29yZGluYXRlQ29udmVyc2lvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0Nvb3JkaW5hdGVDb252ZXJzaW9uQ29vcmRpbmF0ZUNvbnZlcnNpb25WaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvQ29vcmRpbmF0ZUNvbnZlcnNpb24vQ29vcmRpbmF0ZUNvbnZlcnNpb25WaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQ29vcmRpbmF0ZUNvbnZlcnNpb24vQ29vcmRpbmF0ZUNvbnZlcnNpb25WaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0Nvb3JkaW5hdGVDb252ZXJzaW9uQ29vcmRpbmF0ZUNvbnZlcnNpb25WaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNDb29yZGluYXRlQ29udmVyc2lvbkNvb3JkaW5hdGVDb252ZXJzaW9uVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzQ29vcmRpbmF0ZUNvbnZlcnNpb25TdXBwb3J0Q29udmVyc2lvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9Db29yZGluYXRlQ29udmVyc2lvbi9zdXBwb3J0L0NvbnZlcnNpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvQ29vcmRpbmF0ZUNvbnZlcnNpb24vc3VwcG9ydC9Db252ZXJzaW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNDb29yZGluYXRlQ29udmVyc2lvblN1cHBvcnRDb252ZXJzaW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQ29vcmRpbmF0ZUNvbnZlcnNpb25TdXBwb3J0Q29udmVyc2lvbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0Nvb3JkaW5hdGVDb252ZXJzaW9uU3VwcG9ydEZvcm1hdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9Db29yZGluYXRlQ29udmVyc2lvbi9zdXBwb3J0L0Zvcm1hdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9Db29yZGluYXRlQ29udmVyc2lvbi9zdXBwb3J0L0Zvcm1hdC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzQ29vcmRpbmF0ZUNvbnZlcnNpb25TdXBwb3J0Rm9ybWF0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzQ29vcmRpbmF0ZUNvbnZlcnNpb25TdXBwb3J0Rm9ybWF0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRGF5bGlnaHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRGF5bGlnaHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRGF5bGlnaHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0RheWxpZ2h0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRGF5bGlnaHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNEYXlsaWdodERheWxpZ2h0Vmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0RheWxpZ2h0L0RheWxpZ2h0Vmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0RheWxpZ2h0L0RheWxpZ2h0Vmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNEYXlsaWdodERheWxpZ2h0Vmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRGF5bGlnaHREYXlsaWdodFZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0RpcmVjdGlvbmFsUGFkKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0RpcmVjdGlvbmFsUGFkXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0RpcmVjdGlvbmFsUGFkLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNEaXJlY3Rpb25hbFBhZChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0RpcmVjdGlvbmFsUGFkKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRGlyZWN0aW9uYWxQYWREaXJlY3Rpb25hbFBhZFZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9EaXJlY3Rpb25hbFBhZC9EaXJlY3Rpb25hbFBhZFZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9EaXJlY3Rpb25hbFBhZC9EaXJlY3Rpb25hbFBhZFZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRGlyZWN0aW9uYWxQYWREaXJlY3Rpb25hbFBhZFZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0RpcmVjdGlvbmFsUGFkRGlyZWN0aW9uYWxQYWRWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNEaXJlY3Rpb25zKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0RpcmVjdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRGlyZWN0aW9ucy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRGlyZWN0aW9ucyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0RpcmVjdGlvbnMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNEaXJlY3Rpb25zRGlyZWN0aW9uc1ZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9EaXJlY3Rpb25zL0RpcmVjdGlvbnNWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRGlyZWN0aW9ucy9EaXJlY3Rpb25zVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNEaXJlY3Rpb25zRGlyZWN0aW9uc1ZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0RpcmVjdGlvbnNEaXJlY3Rpb25zVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRGlyZWN0TGluZU1lYXN1cmVtZW50M0QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRGlyZWN0TGluZU1lYXN1cmVtZW50M0RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRGlyZWN0TGluZU1lYXN1cmVtZW50M0QuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0RpcmVjdExpbmVNZWFzdXJlbWVudDNEKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRGlyZWN0TGluZU1lYXN1cmVtZW50M0QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNEaXJlY3RMaW5lTWVhc3VyZW1lbnQzRERpcmVjdExpbmVNZWFzdXJlbWVudDNEVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0RpcmVjdExpbmVNZWFzdXJlbWVudDNEL0RpcmVjdExpbmVNZWFzdXJlbWVudDNEVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0RpcmVjdExpbmVNZWFzdXJlbWVudDNEL0RpcmVjdExpbmVNZWFzdXJlbWVudDNEVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNEaXJlY3RMaW5lTWVhc3VyZW1lbnQzRERpcmVjdExpbmVNZWFzdXJlbWVudDNEVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRGlyZWN0TGluZU1lYXN1cmVtZW50M0REaXJlY3RMaW5lTWVhc3VyZW1lbnQzRFZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0Rpc3RhbmNlTWVhc3VyZW1lbnQyRCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9EaXN0YW5jZU1lYXN1cmVtZW50MkRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRGlzdGFuY2VNZWFzdXJlbWVudDJELmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNEaXN0YW5jZU1lYXN1cmVtZW50MkQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNEaXN0YW5jZU1lYXN1cmVtZW50MkQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNEaXN0YW5jZU1lYXN1cmVtZW50MkREaXN0YW5jZU1lYXN1cmVtZW50MkRWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRGlzdGFuY2VNZWFzdXJlbWVudDJEL0Rpc3RhbmNlTWVhc3VyZW1lbnQyRFZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9EaXN0YW5jZU1lYXN1cmVtZW50MkQvRGlzdGFuY2VNZWFzdXJlbWVudDJEVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNEaXN0YW5jZU1lYXN1cmVtZW50MkREaXN0YW5jZU1lYXN1cmVtZW50MkRWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNEaXN0YW5jZU1lYXN1cmVtZW50MkREaXN0YW5jZU1lYXN1cmVtZW50MkRWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNFZGl0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRWRpdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0VkaXRvci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRWRpdG9yKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRWRpdG9yKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRWRpdG9yQ3JlYXRlRmVhdHVyZXNXb3JrZmxvdygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9FZGl0b3IvQ3JlYXRlRmVhdHVyZXNXb3JrZmxvd1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9FZGl0b3IvQ3JlYXRlRmVhdHVyZXNXb3JrZmxvdy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRWRpdG9yQ3JlYXRlRmVhdHVyZXNXb3JrZmxvdyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0VkaXRvckNyZWF0ZUZlYXR1cmVzV29ya2Zsb3coKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNFZGl0b3JDcmVhdGVGZWF0dXJlc1dvcmtmbG93RGF0YSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9FZGl0b3IvQ3JlYXRlRmVhdHVyZXNXb3JrZmxvd0RhdGFcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRWRpdG9yL0NyZWF0ZUZlYXR1cmVzV29ya2Zsb3dEYXRhLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNFZGl0b3JDcmVhdGVGZWF0dXJlc1dvcmtmbG93RGF0YShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0VkaXRvckNyZWF0ZUZlYXR1cmVzV29ya2Zsb3dEYXRhKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRWRpdG9yRWRpdG9yVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0VkaXRvci9FZGl0b3JWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRWRpdG9yL0VkaXRvclZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRWRpdG9yRWRpdG9yVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRWRpdG9yRWRpdG9yVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRWRpdG9yRWRpdHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRWRpdG9yL0VkaXRzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0VkaXRvci9FZGl0cy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRWRpdG9yRWRpdHMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNFZGl0b3JFZGl0cygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0VkaXRvclVwZGF0ZUZlYXR1cmVzV29ya2Zsb3dEYXRhKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0VkaXRvci9VcGRhdGVGZWF0dXJlc1dvcmtmbG93RGF0YVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9FZGl0b3IvVXBkYXRlRmVhdHVyZXNXb3JrZmxvd0RhdGEuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0VkaXRvclVwZGF0ZUZlYXR1cmVzV29ya2Zsb3dEYXRhKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRWRpdG9yVXBkYXRlRmVhdHVyZXNXb3JrZmxvd0RhdGEoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNFZGl0b3JVcGRhdGVXb3JrZmxvdygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9FZGl0b3IvVXBkYXRlV29ya2Zsb3dcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRWRpdG9yL1VwZGF0ZVdvcmtmbG93LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNFZGl0b3JVcGRhdGVXb3JrZmxvdyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0VkaXRvclVwZGF0ZVdvcmtmbG93KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRWRpdG9yVXBkYXRlV29ya2Zsb3dEYXRhKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0VkaXRvci9VcGRhdGVXb3JrZmxvd0RhdGFcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRWRpdG9yL1VwZGF0ZVdvcmtmbG93RGF0YS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRWRpdG9yVXBkYXRlV29ya2Zsb3dEYXRhKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRWRpdG9yVXBkYXRlV29ya2Zsb3dEYXRhKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRWRpdG9yV29ya2Zsb3coKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRWRpdG9yL1dvcmtmbG93XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0VkaXRvci9Xb3JrZmxvdy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRWRpdG9yV29ya2Zsb3cocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNFZGl0b3JXb3JrZmxvdygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0VkaXRvclN1cHBvcnRFZGl0b3JJdGVtKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0VkaXRvci9zdXBwb3J0L0VkaXRvckl0ZW1cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRWRpdG9yL3N1cHBvcnQvRWRpdG9ySXRlbS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRWRpdG9yU3VwcG9ydEVkaXRvckl0ZW0ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNFZGl0b3JTdXBwb3J0RWRpdG9ySXRlbSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRWxldmF0aW9uUHJvZmlsZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9FbGV2YXRpb25Qcm9maWxlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNFbGV2YXRpb25Qcm9maWxlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRWxldmF0aW9uUHJvZmlsZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVMaW5lXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZUxpbmUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUdyb3VuZCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVMaW5lR3JvdW5kXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZUxpbmVHcm91bmQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUdyb3VuZChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUdyb3VuZCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUlucHV0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0VsZXZhdGlvblByb2ZpbGUvRWxldmF0aW9uUHJvZmlsZUxpbmVJbnB1dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVMaW5lSW5wdXQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUlucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lSW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUxpbmVRdWVyeSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVMaW5lUXVlcnlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRWxldmF0aW9uUHJvZmlsZS9FbGV2YXRpb25Qcm9maWxlTGluZVF1ZXJ5LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUxpbmVRdWVyeShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZVF1ZXJ5KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lVmlldygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVMaW5lVmlld1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVMaW5lVmlldy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lVmlldyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZVZpZXcoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9FbGV2YXRpb25Qcm9maWxlL0VsZXZhdGlvblByb2ZpbGVWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRWxldmF0aW9uUHJvZmlsZS9FbGV2YXRpb25Qcm9maWxlVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRXhwYW5kKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0V4cGFuZFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9FeHBhbmQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0V4cGFuZChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0V4cGFuZCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0V4cGFuZEV4cGFuZFZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9FeHBhbmQvRXhwYW5kVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0V4cGFuZC9FeHBhbmRWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0V4cGFuZEV4cGFuZFZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0V4cGFuZEV4cGFuZFZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0ZlYXR1cmUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0ZlYXR1cmVGZWF0dXJlVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmUvRmVhdHVyZVZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlL0ZlYXR1cmVWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0ZlYXR1cmVGZWF0dXJlVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZUZlYXR1cmVWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlRm9ybVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlRm9ybS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZUZvcm0ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0ZlYXR1cmVGb3JtRmVhdHVyZUZvcm1WaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZUZvcm0vRmVhdHVyZUZvcm1WaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZUZvcm0vRmVhdHVyZUZvcm1WaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0ZlYXR1cmVGb3JtRmVhdHVyZUZvcm1WaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybUZlYXR1cmVGb3JtVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZUZvcm1GaWVsZElucHV0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVGb3JtL0ZpZWxkSW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZUZvcm0vRmllbGRJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZUZvcm1GaWVsZElucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZUZvcm1GaWVsZElucHV0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZUZvcm1Hcm91cElucHV0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVGb3JtL0dyb3VwSW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZUZvcm0vR3JvdXBJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZUZvcm1Hcm91cElucHV0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZUZvcm1Hcm91cElucHV0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZUZvcm1SZWxhdGlvbnNoaXBJbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlRm9ybS9SZWxhdGlvbnNoaXBJbnB1dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlRm9ybS9SZWxhdGlvbnNoaXBJbnB1dC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZUZvcm1SZWxhdGlvbnNoaXBJbnB1dChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVGb3JtUmVsYXRpb25zaGlwSW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybVRleHRFbGVtZW50SW5wdXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZUZvcm0vVGV4dEVsZW1lbnRJbnB1dFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlRm9ybS9UZXh0RWxlbWVudElucHV0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlRm9ybVRleHRFbGVtZW50SW5wdXQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybVRleHRFbGVtZW50SW5wdXQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybVV0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25JbnB1dCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlRm9ybS9VdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uSW5wdXRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZUZvcm0vVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbklucHV0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlRm9ybVV0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25JbnB1dChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVGb3JtVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbklucHV0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZXMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0ZlYXR1cmVzKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlc0ZlYXR1cmVzVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVzL0ZlYXR1cmVzVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0ZlYXR1cmVzL0ZlYXR1cmVzVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlc0ZlYXR1cmVzVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZXNGZWF0dXJlc1ZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlVGFibGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZVRhYmxlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGFibGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVBdHRhY2htZW50c0NvbHVtbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlVGFibGUvQXR0YWNobWVudHNDb2x1bW5cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZVRhYmxlL0F0dGFjaG1lbnRzQ29sdW1uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGFibGVBdHRhY2htZW50c0NvbHVtbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUF0dGFjaG1lbnRzQ29sdW1uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlQWN0aW9uQ29sdW1uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9BY3Rpb25Db2x1bW5cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZVRhYmxlL0FjdGlvbkNvbHVtbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlQWN0aW9uQ29sdW1uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlQWN0aW9uQ29sdW1uKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlRmVhdHVyZVRhYmxlVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9GZWF0dXJlVGFibGVWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZVRhYmxlL0ZlYXR1cmVUYWJsZVZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlRmVhdHVyZVRhYmxlVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlRmVhdHVyZVRhYmxlVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlRmllbGRDb2x1bW4oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVRhYmxlL0ZpZWxkQ29sdW1uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9GaWVsZENvbHVtbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlRmllbGRDb2x1bW4ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVGaWVsZENvbHVtbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZVJlbGF0aW9uc2hpcENvbHVtbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlVGFibGUvUmVsYXRpb25zaGlwQ29sdW1uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9SZWxhdGlvbnNoaXBDb2x1bW4uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZVJlbGF0aW9uc2hpcENvbHVtbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZVJlbGF0aW9uc2hpcENvbHVtbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRDb2x1bW4oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVRhYmxlL0dyaWQvQ29sdW1uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9HcmlkL0NvbHVtbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlR3JpZENvbHVtbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRDb2x1bW4oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVHcmlkR3JvdXBDb2x1bW4oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVRhYmxlL0dyaWQvR3JvdXBDb2x1bW5cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZVRhYmxlL0dyaWQvR3JvdXBDb2x1bW4uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRHcm91cENvbHVtbihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRHcm91cENvbHVtbigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRTdXBwb3J0QnV0dG9uTWVudSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlVGFibGUvR3JpZC9zdXBwb3J0L0J1dHRvbk1lbnVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZVRhYmxlL0dyaWQvc3VwcG9ydC9CdXR0b25NZW51LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGFibGVHcmlkU3VwcG9ydEJ1dHRvbk1lbnUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVHcmlkU3VwcG9ydEJ1dHRvbk1lbnUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVHcmlkU3VwcG9ydEJ1dHRvbk1lbnVJdGVtKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9HcmlkL3N1cHBvcnQvQnV0dG9uTWVudUl0ZW1cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZVRhYmxlL0dyaWQvc3VwcG9ydC9CdXR0b25NZW51SXRlbS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlR3JpZFN1cHBvcnRCdXR0b25NZW51SXRlbShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRTdXBwb3J0QnV0dG9uTWVudUl0ZW0oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVHcmlkU3VwcG9ydEJ1dHRvbk1lbnVWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVRhYmxlL0dyaWQvc3VwcG9ydC9CdXR0b25NZW51Vmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9HcmlkL3N1cHBvcnQvQnV0dG9uTWVudVZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlR3JpZFN1cHBvcnRCdXR0b25NZW51Vmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlR3JpZFN1cHBvcnRCdXR0b25NZW51Vmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydEF0dGFjaG1lbnRzQ29sdW1uVGVtcGxhdGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVRhYmxlL3N1cHBvcnQvQXR0YWNobWVudHNDb2x1bW5UZW1wbGF0ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlVGFibGUvc3VwcG9ydC9BdHRhY2htZW50c0NvbHVtblRlbXBsYXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0QXR0YWNobWVudHNDb2x1bW5UZW1wbGF0ZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRBdHRhY2htZW50c0NvbHVtblRlbXBsYXRlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydEF0dGFjaG1lbnRzVmlld09wdGlvbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVRhYmxlL3N1cHBvcnQvQXR0YWNobWVudHNWaWV3T3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlVGFibGUvc3VwcG9ydC9BdHRhY2htZW50c1ZpZXdPcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0QXR0YWNobWVudHNWaWV3T3B0aW9ucyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRBdHRhY2htZW50c1ZpZXdPcHRpb25zKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydENvbHVtblRlbXBsYXRlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9zdXBwb3J0L0NvbHVtblRlbXBsYXRlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9zdXBwb3J0L0NvbHVtblRlbXBsYXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0Q29sdW1uVGVtcGxhdGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0Q29sdW1uVGVtcGxhdGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0Q29sdW1uVGVtcGxhdGVCYXNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9zdXBwb3J0L0NvbHVtblRlbXBsYXRlQmFzZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlVGFibGUvc3VwcG9ydC9Db2x1bW5UZW1wbGF0ZUJhc2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRDb2x1bW5UZW1wbGF0ZUJhc2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0Q29sdW1uVGVtcGxhdGVCYXNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydEZpZWxkQ29sdW1uVGVtcGxhdGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVRhYmxlL3N1cHBvcnQvRmllbGRDb2x1bW5UZW1wbGF0ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlVGFibGUvc3VwcG9ydC9GaWVsZENvbHVtblRlbXBsYXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0RmllbGRDb2x1bW5UZW1wbGF0ZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRGaWVsZENvbHVtblRlbXBsYXRlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydEdyb3VwQ29sdW1uVGVtcGxhdGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVRhYmxlL3N1cHBvcnQvR3JvdXBDb2x1bW5UZW1wbGF0ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlVGFibGUvc3VwcG9ydC9Hcm91cENvbHVtblRlbXBsYXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0R3JvdXBDb2x1bW5UZW1wbGF0ZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRHcm91cENvbHVtblRlbXBsYXRlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydFJlbGF0aW9uc2hpcENvbHVtblRlbXBsYXRlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9zdXBwb3J0L1JlbGF0aW9uc2hpcENvbHVtblRlbXBsYXRlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9zdXBwb3J0L1JlbGF0aW9uc2hpcENvbHVtblRlbXBsYXRlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0UmVsYXRpb25zaGlwQ29sdW1uVGVtcGxhdGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0UmVsYXRpb25zaGlwQ29sdW1uVGVtcGxhdGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0VGFibGVUZW1wbGF0ZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlVGFibGUvc3VwcG9ydC9UYWJsZVRlbXBsYXRlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0ZlYXR1cmVUYWJsZS9zdXBwb3J0L1RhYmxlVGVtcGxhdGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRUYWJsZVRlbXBsYXRlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydFRhYmxlVGVtcGxhdGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlVGVtcGxhdGVzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0ZlYXR1cmVUZW1wbGF0ZXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZVRlbXBsYXRlcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZVRlbXBsYXRlcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUZW1wbGF0ZXMoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlVGVtcGxhdGVzRmVhdHVyZVRlbXBsYXRlc1ZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlVGVtcGxhdGVzL0ZlYXR1cmVUZW1wbGF0ZXNWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmVhdHVyZVRlbXBsYXRlcy9GZWF0dXJlVGVtcGxhdGVzVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGVtcGxhdGVzRmVhdHVyZVRlbXBsYXRlc1ZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUZW1wbGF0ZXNGZWF0dXJlVGVtcGxhdGVzVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRmVhdHVyZVRlbXBsYXRlc1RlbXBsYXRlSXRlbSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GZWF0dXJlVGVtcGxhdGVzL1RlbXBsYXRlSXRlbVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlVGVtcGxhdGVzL1RlbXBsYXRlSXRlbS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmVhdHVyZVRlbXBsYXRlc1RlbXBsYXRlSXRlbShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUZW1wbGF0ZXNUZW1wbGF0ZUl0ZW0oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGZWF0dXJlVGVtcGxhdGVzVGVtcGxhdGVJdGVtR3JvdXAoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmVhdHVyZVRlbXBsYXRlcy9UZW1wbGF0ZUl0ZW1Hcm91cFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GZWF0dXJlVGVtcGxhdGVzL1RlbXBsYXRlSXRlbUdyb3VwLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNGZWF0dXJlVGVtcGxhdGVzVGVtcGxhdGVJdGVtR3JvdXAocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGZWF0dXJlVGVtcGxhdGVzVGVtcGxhdGVJdGVtR3JvdXAoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNGbG9vckZpbHRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GbG9vckZpbHRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9GbG9vckZpbHRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRmxvb3JGaWx0ZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGbG9vckZpbHRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0Zsb29yRmlsdGVyRmxvb3JGaWx0ZXJWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRmxvb3JGaWx0ZXIvRmxvb3JGaWx0ZXJWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvRmxvb3JGaWx0ZXIvRmxvb3JGaWx0ZXJWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0Zsb29yRmlsdGVyRmxvb3JGaWx0ZXJWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGbG9vckZpbHRlckZsb29yRmlsdGVyVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRnVsbHNjcmVlbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9GdWxsc2NyZWVuXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0Z1bGxzY3JlZW4uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0Z1bGxzY3JlZW4ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGdWxsc2NyZWVuKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzRnVsbHNjcmVlbkZ1bGxzY3JlZW5WaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvRnVsbHNjcmVlbi9GdWxsc2NyZWVuVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0Z1bGxzY3JlZW4vRnVsbHNjcmVlblZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzRnVsbHNjcmVlbkZ1bGxzY3JlZW5WaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNGdWxsc2NyZWVuRnVsbHNjcmVlblZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0hpc3RvZ3JhbSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9IaXN0b2dyYW1cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvSGlzdG9ncmFtLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNIaXN0b2dyYW0ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNIaXN0b2dyYW0oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNIaXN0b2dyYW1IaXN0b2dyYW1WaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvSGlzdG9ncmFtL0hpc3RvZ3JhbVZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9IaXN0b2dyYW0vSGlzdG9ncmFtVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNIaXN0b2dyYW1IaXN0b2dyYW1WaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNIaXN0b2dyYW1IaXN0b2dyYW1WaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNIaXN0b2dyYW1SYW5nZVNsaWRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9IaXN0b2dyYW1SYW5nZVNsaWRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9IaXN0b2dyYW1SYW5nZVNsaWRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzSGlzdG9ncmFtUmFuZ2VTbGlkZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNIaXN0b2dyYW1SYW5nZVNsaWRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0hpc3RvZ3JhbVJhbmdlU2xpZGVySGlzdG9ncmFtUmFuZ2VTbGlkZXJWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvSGlzdG9ncmFtUmFuZ2VTbGlkZXIvSGlzdG9ncmFtUmFuZ2VTbGlkZXJWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvSGlzdG9ncmFtUmFuZ2VTbGlkZXIvSGlzdG9ncmFtUmFuZ2VTbGlkZXJWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0hpc3RvZ3JhbVJhbmdlU2xpZGVySGlzdG9ncmFtUmFuZ2VTbGlkZXJWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNIaXN0b2dyYW1SYW5nZVNsaWRlckhpc3RvZ3JhbVJhbmdlU2xpZGVyVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzSG9tZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9Ib21lXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0hvbWUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0hvbWUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNIb21lKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzSG9tZUhvbWVWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvSG9tZS9Ib21lVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0hvbWUvSG9tZVZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzSG9tZUhvbWVWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNIb21lSG9tZVZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0xheWVyTGlzdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9MYXllckxpc3RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvTGF5ZXJMaXN0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNMYXllckxpc3QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNMYXllckxpc3QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNMYXllckxpc3RMYXllckxpc3RWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvTGF5ZXJMaXN0L0xheWVyTGlzdFZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9MYXllckxpc3QvTGF5ZXJMaXN0Vmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNMYXllckxpc3RMYXllckxpc3RWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNMYXllckxpc3RMYXllckxpc3RWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNMYXllckxpc3RMaXN0SXRlbSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9MYXllckxpc3QvTGlzdEl0ZW1cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvTGF5ZXJMaXN0L0xpc3RJdGVtLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNMYXllckxpc3RMaXN0SXRlbShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0xheWVyTGlzdExpc3RJdGVtKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzTGF5ZXJMaXN0TGlzdEl0ZW1QYW5lbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9MYXllckxpc3QvTGlzdEl0ZW1QYW5lbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9MYXllckxpc3QvTGlzdEl0ZW1QYW5lbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzTGF5ZXJMaXN0TGlzdEl0ZW1QYW5lbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0xheWVyTGlzdExpc3RJdGVtUGFuZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNMZWdlbmQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvTGVnZW5kXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0xlZ2VuZC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzTGVnZW5kKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzTGVnZW5kKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzTGVnZW5kTGVnZW5kVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0xlZ2VuZC9MZWdlbmRWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvTGVnZW5kL0xlZ2VuZFZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzTGVnZW5kTGVnZW5kVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzTGVnZW5kTGVnZW5kVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzTGVnZW5kU3VwcG9ydEFjdGl2ZUxheWVySW5mbygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9MZWdlbmQvc3VwcG9ydC9BY3RpdmVMYXllckluZm9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvTGVnZW5kL3N1cHBvcnQvQWN0aXZlTGF5ZXJJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNMZWdlbmRTdXBwb3J0QWN0aXZlTGF5ZXJJbmZvKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzTGVnZW5kU3VwcG9ydEFjdGl2ZUxheWVySW5mbygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0xpbmtDaGFydExheW91dFN3aXRjaGVyTGlua0NoYXJ0TGF5b3V0U3dpdGNoZXJWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvTGlua0NoYXJ0TGF5b3V0U3dpdGNoZXIvTGlua0NoYXJ0TGF5b3V0U3dpdGNoZXJWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvTGlua0NoYXJ0TGF5b3V0U3dpdGNoZXIvTGlua0NoYXJ0TGF5b3V0U3dpdGNoZXJWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0xpbmtDaGFydExheW91dFN3aXRjaGVyTGlua0NoYXJ0TGF5b3V0U3dpdGNoZXJWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNMaW5rQ2hhcnRMYXlvdXRTd2l0Y2hlckxpbmtDaGFydExheW91dFN3aXRjaGVyVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzTGluZU9mU2lnaHQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvTGluZU9mU2lnaHRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvTGluZU9mU2lnaHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0xpbmVPZlNpZ2h0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzTGluZU9mU2lnaHQoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNMaW5lT2ZTaWdodExpbmVPZlNpZ2h0VGFyZ2V0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0xpbmVPZlNpZ2h0L0xpbmVPZlNpZ2h0VGFyZ2V0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0xpbmVPZlNpZ2h0L0xpbmVPZlNpZ2h0VGFyZ2V0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNMaW5lT2ZTaWdodExpbmVPZlNpZ2h0VGFyZ2V0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzTGluZU9mU2lnaHRMaW5lT2ZTaWdodFRhcmdldCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0xpbmVPZlNpZ2h0TGluZU9mU2lnaHRWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvTGluZU9mU2lnaHQvTGluZU9mU2lnaHRWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvTGluZU9mU2lnaHQvTGluZU9mU2lnaHRWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0xpbmVPZlNpZ2h0TGluZU9mU2lnaHRWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNMaW5lT2ZTaWdodExpbmVPZlNpZ2h0Vmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzTG9jYXRlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL0xvY2F0ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9Mb2NhdGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0xvY2F0ZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0xvY2F0ZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c0xvY2F0ZUxvY2F0ZVZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9Mb2NhdGUvTG9jYXRlVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL0xvY2F0ZS9Mb2NhdGVWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c0xvY2F0ZUxvY2F0ZVZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c0xvY2F0ZUxvY2F0ZVZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c01lYXN1cmVtZW50KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL01lYXN1cmVtZW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL01lYXN1cmVtZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNNZWFzdXJlbWVudChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c01lYXN1cmVtZW50KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzTWVhc3VyZW1lbnRNZWFzdXJlbWVudFZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9NZWFzdXJlbWVudC9NZWFzdXJlbWVudFZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9NZWFzdXJlbWVudC9NZWFzdXJlbWVudFZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzTWVhc3VyZW1lbnRNZWFzdXJlbWVudFZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c01lYXN1cmVtZW50TWVhc3VyZW1lbnRWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNOYXZpZ2F0aW9uVG9nZ2xlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL05hdmlnYXRpb25Ub2dnbGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvTmF2aWdhdGlvblRvZ2dsZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzTmF2aWdhdGlvblRvZ2dsZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c05hdmlnYXRpb25Ub2dnbGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNOYXZpZ2F0aW9uVG9nZ2xlTmF2aWdhdGlvblRvZ2dsZVZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9OYXZpZ2F0aW9uVG9nZ2xlL05hdmlnYXRpb25Ub2dnbGVWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvTmF2aWdhdGlvblRvZ2dsZS9OYXZpZ2F0aW9uVG9nZ2xlVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNOYXZpZ2F0aW9uVG9nZ2xlTmF2aWdhdGlvblRvZ2dsZVZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c05hdmlnYXRpb25Ub2dnbGVOYXZpZ2F0aW9uVG9nZ2xlVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzT3JpZW50ZWRJbWFnZXJ5Vmlld2VyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL09yaWVudGVkSW1hZ2VyeVZpZXdlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9PcmllbnRlZEltYWdlcnlWaWV3ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c09yaWVudGVkSW1hZ2VyeVZpZXdlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c09yaWVudGVkSW1hZ2VyeVZpZXdlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c09yaWVudGVkSW1hZ2VyeVZpZXdlck9yaWVudGVkSW1hZ2VyeVZpZXdlclZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9PcmllbnRlZEltYWdlcnlWaWV3ZXIvT3JpZW50ZWRJbWFnZXJ5Vmlld2VyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL09yaWVudGVkSW1hZ2VyeVZpZXdlci9PcmllbnRlZEltYWdlcnlWaWV3ZXJWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c09yaWVudGVkSW1hZ2VyeVZpZXdlck9yaWVudGVkSW1hZ2VyeVZpZXdlclZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c09yaWVudGVkSW1hZ2VyeVZpZXdlck9yaWVudGVkSW1hZ2VyeVZpZXdlclZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1BvcHVwKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1BvcHVwXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1BvcHVwLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNQb3B1cChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1BvcHVwKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzUG9wdXBQb3B1cFZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9Qb3B1cC9Qb3B1cFZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9Qb3B1cC9Qb3B1cFZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzUG9wdXBQb3B1cFZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1BvcHVwUG9wdXBWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNQcmludCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9QcmludFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9QcmludC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzUHJpbnQocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNQcmludCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1ByaW50Q3VzdG9tVGVtcGxhdGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvUHJpbnQvQ3VzdG9tVGVtcGxhdGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvUHJpbnQvQ3VzdG9tVGVtcGxhdGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1ByaW50Q3VzdG9tVGVtcGxhdGUocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNQcmludEN1c3RvbVRlbXBsYXRlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzUHJpbnRQcmludFZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9QcmludC9QcmludFZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9QcmludC9QcmludFZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzUHJpbnRQcmludFZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1ByaW50UHJpbnRWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNQcmludFRlbXBsYXRlT3B0aW9ucygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9QcmludC9UZW1wbGF0ZU9wdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvUHJpbnQvVGVtcGxhdGVPcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNQcmludFRlbXBsYXRlT3B0aW9ucyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1ByaW50VGVtcGxhdGVPcHRpb25zKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU2NhbGVCYXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2NhbGVCYXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvU2NhbGVCYXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NjYWxlQmFyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU2NhbGVCYXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTY2FsZUJhclNjYWxlQmFyVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1NjYWxlQmFyL1NjYWxlQmFyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NjYWxlQmFyL1NjYWxlQmFyVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTY2FsZUJhclNjYWxlQmFyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU2NhbGVCYXJTY2FsZUJhclZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NjYWxlUmFuZ2VTbGlkZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2NhbGVSYW5nZVNsaWRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9TY2FsZVJhbmdlU2xpZGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTY2FsZVJhbmdlU2xpZGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU2NhbGVSYW5nZVNsaWRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NjYWxlUmFuZ2VTbGlkZXJTY2FsZVJhbmdlcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9TY2FsZVJhbmdlU2xpZGVyL1NjYWxlUmFuZ2VzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NjYWxlUmFuZ2VTbGlkZXIvU2NhbGVSYW5nZXMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NjYWxlUmFuZ2VTbGlkZXJTY2FsZVJhbmdlcyhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NjYWxlUmFuZ2VTbGlkZXJTY2FsZVJhbmdlcygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NjYWxlUmFuZ2VTbGlkZXJTY2FsZVJhbmdlU2xpZGVyVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1NjYWxlUmFuZ2VTbGlkZXIvU2NhbGVSYW5nZVNsaWRlclZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9TY2FsZVJhbmdlU2xpZGVyL1NjYWxlUmFuZ2VTbGlkZXJWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NjYWxlUmFuZ2VTbGlkZXJTY2FsZVJhbmdlU2xpZGVyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU2NhbGVSYW5nZVNsaWRlclNjYWxlUmFuZ2VTbGlkZXJWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTZWFyY2goKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2VhcmNoXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NlYXJjaC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU2VhcmNoKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU2VhcmNoKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU2VhcmNoTGF5ZXJTZWFyY2hTb3VyY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2VhcmNoL0xheWVyU2VhcmNoU291cmNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NlYXJjaC9MYXllclNlYXJjaFNvdXJjZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU2VhcmNoTGF5ZXJTZWFyY2hTb3VyY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTZWFyY2hMYXllclNlYXJjaFNvdXJjZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NlYXJjaExvY2F0b3JTZWFyY2hTb3VyY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2VhcmNoL0xvY2F0b3JTZWFyY2hTb3VyY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvU2VhcmNoL0xvY2F0b3JTZWFyY2hTb3VyY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NlYXJjaExvY2F0b3JTZWFyY2hTb3VyY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTZWFyY2hMb2NhdG9yU2VhcmNoU291cmNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU2VhcmNoU2VhcmNoUmVzdWx0UmVuZGVyZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2VhcmNoL1NlYXJjaFJlc3VsdFJlbmRlcmVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NlYXJjaC9TZWFyY2hSZXN1bHRSZW5kZXJlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU2VhcmNoU2VhcmNoUmVzdWx0UmVuZGVyZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTZWFyY2hTZWFyY2hSZXN1bHRSZW5kZXJlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NlYXJjaFNlYXJjaFNvdXJjZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9TZWFyY2gvU2VhcmNoU291cmNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NlYXJjaC9TZWFyY2hTb3VyY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NlYXJjaFNlYXJjaFNvdXJjZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NlYXJjaFNlYXJjaFNvdXJjZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NlYXJjaFNlYXJjaFZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9TZWFyY2gvU2VhcmNoVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NlYXJjaC9TZWFyY2hWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NlYXJjaFNlYXJjaFZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NlYXJjaFNlYXJjaFZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NoYWRvd0Nhc3QoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2hhZG93Q2FzdFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9TaGFkb3dDYXN0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTaGFkb3dDYXN0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU2hhZG93Q2FzdCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NoYWRvd0Nhc3RTaGFkb3dDYXN0Vmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1NoYWRvd0Nhc3QvU2hhZG93Q2FzdFZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9TaGFkb3dDYXN0L1NoYWRvd0Nhc3RWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NoYWRvd0Nhc3RTaGFkb3dDYXN0Vmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU2hhZG93Q2FzdFNoYWRvd0Nhc3RWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTaGFkb3dDYXN0RGlzY3JldGVPcHRpb25zKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1NoYWRvd0Nhc3QvRGlzY3JldGVPcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NoYWRvd0Nhc3QvRGlzY3JldGVPcHRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTaGFkb3dDYXN0RGlzY3JldGVPcHRpb25zKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU2hhZG93Q2FzdERpc2NyZXRlT3B0aW9ucygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NoYWRvd0Nhc3REdXJhdGlvbk9wdGlvbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2hhZG93Q2FzdC9EdXJhdGlvbk9wdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvU2hhZG93Q2FzdC9EdXJhdGlvbk9wdGlvbnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NoYWRvd0Nhc3REdXJhdGlvbk9wdGlvbnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTaGFkb3dDYXN0RHVyYXRpb25PcHRpb25zKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU2hhZG93Q2FzdFRocmVzaG9sZE9wdGlvbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2hhZG93Q2FzdC9UaHJlc2hvbGRPcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NoYWRvd0Nhc3QvVGhyZXNob2xkT3B0aW9ucy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU2hhZG93Q2FzdFRocmVzaG9sZE9wdGlvbnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTaGFkb3dDYXN0VGhyZXNob2xkT3B0aW9ucygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NrZXRjaCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9Ta2V0Y2hcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvU2tldGNoLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTa2V0Y2gocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTa2V0Y2goKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTa2V0Y2hTa2V0Y2hWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2tldGNoL1NrZXRjaFZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9Ta2V0Y2gvU2tldGNoVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTa2V0Y2hTa2V0Y2hWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTa2V0Y2hTa2V0Y2hWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTbGljZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9TbGljZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9TbGljZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU2xpY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTbGljZSgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NsaWNlU2xpY2VWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU2xpY2UvU2xpY2VWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvU2xpY2UvU2xpY2VWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NsaWNlU2xpY2VWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTbGljZVNsaWNlVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU2xpZGVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1NsaWRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9TbGlkZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NsaWRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NsaWRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NsaWRlclNsaWRlclZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9TbGlkZXIvU2xpZGVyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1NsaWRlci9TbGlkZXJWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NsaWRlclNsaWRlclZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NsaWRlclNsaWRlclZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0JpbmFyeUNvbG9yU2l6ZVNsaWRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zbWFydE1hcHBpbmcvQmluYXJ5Q29sb3JTaXplU2xpZGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3NtYXJ0TWFwcGluZy9CaW5hcnlDb2xvclNpemVTbGlkZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NtYXJ0TWFwcGluZ0JpbmFyeUNvbG9yU2l6ZVNsaWRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0JpbmFyeUNvbG9yU2l6ZVNsaWRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0JpbmFyeUNvbG9yU2l6ZVNsaWRlckJpbmFyeUNvbG9yU2l6ZVNsaWRlclZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zbWFydE1hcHBpbmcvQmluYXJ5Q29sb3JTaXplU2xpZGVyL0JpbmFyeUNvbG9yU2l6ZVNsaWRlclZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9zbWFydE1hcHBpbmcvQmluYXJ5Q29sb3JTaXplU2xpZGVyL0JpbmFyeUNvbG9yU2l6ZVNsaWRlclZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU21hcnRNYXBwaW5nQmluYXJ5Q29sb3JTaXplU2xpZGVyQmluYXJ5Q29sb3JTaXplU2xpZGVyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nQmluYXJ5Q29sb3JTaXplU2xpZGVyQmluYXJ5Q29sb3JTaXplU2xpZGVyVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nQ2xhc3NlZENvbG9yU2xpZGVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL3NtYXJ0TWFwcGluZy9DbGFzc2VkQ29sb3JTbGlkZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvc21hcnRNYXBwaW5nL0NsYXNzZWRDb2xvclNsaWRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU21hcnRNYXBwaW5nQ2xhc3NlZENvbG9yU2xpZGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nQ2xhc3NlZENvbG9yU2xpZGVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nQ2xhc3NlZENvbG9yU2xpZGVyQ2xhc3NlZENvbG9yU2xpZGVyVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL3NtYXJ0TWFwcGluZy9DbGFzc2VkQ29sb3JTbGlkZXIvQ2xhc3NlZENvbG9yU2xpZGVyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3NtYXJ0TWFwcGluZy9DbGFzc2VkQ29sb3JTbGlkZXIvQ2xhc3NlZENvbG9yU2xpZGVyVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkQ29sb3JTbGlkZXJDbGFzc2VkQ29sb3JTbGlkZXJWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkQ29sb3JTbGlkZXJDbGFzc2VkQ29sb3JTbGlkZXJWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkU2l6ZVNsaWRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zbWFydE1hcHBpbmcvQ2xhc3NlZFNpemVTbGlkZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvc21hcnRNYXBwaW5nL0NsYXNzZWRTaXplU2xpZGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkU2l6ZVNsaWRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0NsYXNzZWRTaXplU2xpZGVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nQ2xhc3NlZFNpemVTbGlkZXJDbGFzc2VkU2l6ZVNsaWRlclZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zbWFydE1hcHBpbmcvQ2xhc3NlZFNpemVTbGlkZXIvQ2xhc3NlZFNpemVTbGlkZXJWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvc21hcnRNYXBwaW5nL0NsYXNzZWRTaXplU2xpZGVyL0NsYXNzZWRTaXplU2xpZGVyVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkU2l6ZVNsaWRlckNsYXNzZWRTaXplU2xpZGVyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nQ2xhc3NlZFNpemVTbGlkZXJDbGFzc2VkU2l6ZVNsaWRlclZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0NvbG9yU2l6ZVNsaWRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zbWFydE1hcHBpbmcvQ29sb3JTaXplU2xpZGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3NtYXJ0TWFwcGluZy9Db2xvclNpemVTbGlkZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NtYXJ0TWFwcGluZ0NvbG9yU2l6ZVNsaWRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0NvbG9yU2l6ZVNsaWRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0NvbG9yU2l6ZVNsaWRlckNvbG9yU2l6ZVNsaWRlclZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zbWFydE1hcHBpbmcvQ29sb3JTaXplU2xpZGVyL0NvbG9yU2l6ZVNsaWRlclZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9zbWFydE1hcHBpbmcvQ29sb3JTaXplU2xpZGVyL0NvbG9yU2l6ZVNsaWRlclZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU21hcnRNYXBwaW5nQ29sb3JTaXplU2xpZGVyQ29sb3JTaXplU2xpZGVyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nQ29sb3JTaXplU2xpZGVyQ29sb3JTaXplU2xpZGVyVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nQ29sb3JTbGlkZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvc21hcnRNYXBwaW5nL0NvbG9yU2xpZGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3NtYXJ0TWFwcGluZy9Db2xvclNsaWRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU21hcnRNYXBwaW5nQ29sb3JTbGlkZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdDb2xvclNsaWRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0NvbG9yU2xpZGVyQ29sb3JTbGlkZXJWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvc21hcnRNYXBwaW5nL0NvbG9yU2xpZGVyL0NvbG9yU2xpZGVyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3NtYXJ0TWFwcGluZy9Db2xvclNsaWRlci9Db2xvclNsaWRlclZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU21hcnRNYXBwaW5nQ29sb3JTbGlkZXJDb2xvclNsaWRlclZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0NvbG9yU2xpZGVyQ29sb3JTbGlkZXJWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdIZWF0bWFwU2xpZGVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL3NtYXJ0TWFwcGluZy9IZWF0bWFwU2xpZGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3NtYXJ0TWFwcGluZy9IZWF0bWFwU2xpZGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTbWFydE1hcHBpbmdIZWF0bWFwU2xpZGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nSGVhdG1hcFNsaWRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0hlYXRtYXBTbGlkZXJIZWF0bWFwU2xpZGVyVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL3NtYXJ0TWFwcGluZy9IZWF0bWFwU2xpZGVyL0hlYXRtYXBTbGlkZXJWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvc21hcnRNYXBwaW5nL0hlYXRtYXBTbGlkZXIvSGVhdG1hcFNsaWRlclZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU21hcnRNYXBwaW5nSGVhdG1hcFNsaWRlckhlYXRtYXBTbGlkZXJWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdIZWF0bWFwU2xpZGVySGVhdG1hcFNsaWRlclZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ09wYWNpdHlTbGlkZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvc21hcnRNYXBwaW5nL09wYWNpdHlTbGlkZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvc21hcnRNYXBwaW5nL09wYWNpdHlTbGlkZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NtYXJ0TWFwcGluZ09wYWNpdHlTbGlkZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdPcGFjaXR5U2xpZGVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nT3BhY2l0eVNsaWRlck9wYWNpdHlTbGlkZXJWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvc21hcnRNYXBwaW5nL09wYWNpdHlTbGlkZXIvT3BhY2l0eVNsaWRlclZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9zbWFydE1hcHBpbmcvT3BhY2l0eVNsaWRlci9PcGFjaXR5U2xpZGVyVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTbWFydE1hcHBpbmdPcGFjaXR5U2xpZGVyT3BhY2l0eVNsaWRlclZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ09wYWNpdHlTbGlkZXJPcGFjaXR5U2xpZGVyVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nU2l6ZVNsaWRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zbWFydE1hcHBpbmcvU2l6ZVNsaWRlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9zbWFydE1hcHBpbmcvU2l6ZVNsaWRlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU21hcnRNYXBwaW5nU2l6ZVNsaWRlcihwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ1NpemVTbGlkZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdTaXplU2xpZGVyU2l6ZVNsaWRlclZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zbWFydE1hcHBpbmcvU2l6ZVNsaWRlci9TaXplU2xpZGVyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3NtYXJ0TWFwcGluZy9TaXplU2xpZGVyL1NpemVTbGlkZXJWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NtYXJ0TWFwcGluZ1NpemVTbGlkZXJTaXplU2xpZGVyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nU2l6ZVNsaWRlclNpemVTbGlkZXJWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdTbWFydE1hcHBpbmdQcmltYXJ5SGFuZGxlU2xpZGVyVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL3NtYXJ0TWFwcGluZy9TbWFydE1hcHBpbmdQcmltYXJ5SGFuZGxlU2xpZGVyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3NtYXJ0TWFwcGluZy9TbWFydE1hcHBpbmdQcmltYXJ5SGFuZGxlU2xpZGVyVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTbWFydE1hcHBpbmdTbWFydE1hcHBpbmdQcmltYXJ5SGFuZGxlU2xpZGVyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nU21hcnRNYXBwaW5nUHJpbWFyeUhhbmRsZVNsaWRlclZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ1NtYXJ0TWFwcGluZ1NsaWRlckJhc2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvc21hcnRNYXBwaW5nL1NtYXJ0TWFwcGluZ1NsaWRlckJhc2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvc21hcnRNYXBwaW5nL1NtYXJ0TWFwcGluZ1NsaWRlckJhc2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1NtYXJ0TWFwcGluZ1NtYXJ0TWFwcGluZ1NsaWRlckJhc2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdTbWFydE1hcHBpbmdTbGlkZXJCYXNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nU21hcnRNYXBwaW5nU2xpZGVyVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL3NtYXJ0TWFwcGluZy9TbWFydE1hcHBpbmdTbGlkZXJWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvc21hcnRNYXBwaW5nL1NtYXJ0TWFwcGluZ1NsaWRlclZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU21hcnRNYXBwaW5nU21hcnRNYXBwaW5nU2xpZGVyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nU21hcnRNYXBwaW5nU2xpZGVyVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU3VwcG9ydFNuYXBwaW5nQ29udHJvbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvc3VwcG9ydC9TbmFwcGluZ0NvbnRyb2xzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3N1cHBvcnQvU25hcHBpbmdDb250cm9scy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzU3VwcG9ydFNuYXBwaW5nQ29udHJvbHMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTdXBwb3J0U25hcHBpbmdDb250cm9scygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1N1cHBvcnRHcmlkQ29udHJvbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvc3VwcG9ydC9HcmlkQ29udHJvbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvc3VwcG9ydC9HcmlkQ29udHJvbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1N1cHBvcnRHcmlkQ29udHJvbHMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTdXBwb3J0R3JpZENvbnRyb2xzKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU3VwcG9ydFNuYXBwaW5nQ29udHJvbHNTbmFwcGluZ0NvbnRyb2xzVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL3N1cHBvcnQvU25hcHBpbmdDb250cm9scy9TbmFwcGluZ0NvbnRyb2xzVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL3N1cHBvcnQvU25hcHBpbmdDb250cm9scy9TbmFwcGluZ0NvbnRyb2xzVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTdXBwb3J0U25hcHBpbmdDb250cm9sc1NuYXBwaW5nQ29udHJvbHNWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTdXBwb3J0U25hcHBpbmdDb250cm9sc1NuYXBwaW5nQ29udHJvbHNWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTdXBwb3J0R3JpZENvbnRyb2xzR3JpZENvbnRyb2xzVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL3N1cHBvcnQvR3JpZENvbnRyb2xzL0dyaWRDb250cm9sc1ZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9zdXBwb3J0L0dyaWRDb250cm9scy9HcmlkQ29udHJvbHNWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1N1cHBvcnRHcmlkQ29udHJvbHNHcmlkQ29udHJvbHNWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNTdXBwb3J0R3JpZENvbnRyb2xzR3JpZENvbnRyb2xzVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU3dpcGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvU3dpcGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvU3dpcGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1N3aXBlKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU3dpcGUoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNTd2lwZVN3aXBlVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1N3aXBlL1N3aXBlVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1N3aXBlL1N3aXBlVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNTd2lwZVN3aXBlVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzU3dpcGVTd2lwZVZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1RhYmxlTGlzdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9UYWJsZUxpc3RcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvVGFibGVMaXN0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNUYWJsZUxpc3QocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNUYWJsZUxpc3QoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNUYWJsZUxpc3RMaXN0SXRlbSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9UYWJsZUxpc3QvTGlzdEl0ZW1cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvVGFibGVMaXN0L0xpc3RJdGVtLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNUYWJsZUxpc3RMaXN0SXRlbSgpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzVGFibGVMaXN0TGlzdEl0ZW0oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3RvcigpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1RhYmxlTGlzdExpc3RJdGVtUGFuZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVGFibGVMaXN0L0xpc3RJdGVtUGFuZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvVGFibGVMaXN0L0xpc3RJdGVtUGFuZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1RhYmxlTGlzdExpc3RJdGVtUGFuZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNUYWJsZUxpc3RMaXN0SXRlbVBhbmVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzVGFibGVMaXN0VGFibGVMaXN0Vmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1RhYmxlTGlzdC9UYWJsZUxpc3RWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvVGFibGVMaXN0L1RhYmxlTGlzdFZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzVGFibGVMaXN0VGFibGVMaXN0Vmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzVGFibGVMaXN0VGFibGVMaXN0Vmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzVGltZVNsaWRlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9UaW1lU2xpZGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1RpbWVTbGlkZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1RpbWVTbGlkZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNUaW1lU2xpZGVyKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzVGltZVNsaWRlclRpbWVTbGlkZXJWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVGltZVNsaWRlci9UaW1lU2xpZGVyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1RpbWVTbGlkZXIvVGltZVNsaWRlclZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzVGltZVNsaWRlclRpbWVTbGlkZXJWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNUaW1lU2xpZGVyVGltZVNsaWRlclZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1RpbWVab25lTGFiZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVGltZVpvbmVMYWJlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9UaW1lWm9uZUxhYmVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNUaW1lWm9uZUxhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzVGltZVpvbmVMYWJlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1RyYWNrKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1RyYWNrXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1RyYWNrLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNUcmFjayhwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1RyYWNrKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzVHJhY2tUcmFja1ZpZXdNb2RlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9UcmFjay9UcmFja1ZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9UcmFjay9UcmFja1ZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzVHJhY2tUcmFja1ZpZXdNb2RlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IE1vZENvbnN0cnVjdG9yID0gYXdhaXQgaW1wb3J0V2lkZ2V0c1RyYWNrVHJhY2tWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9ucygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9VdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9VdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9ucy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnMocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9ucygpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnNWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnMvVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnNWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnMvVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnNWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnNWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uc1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzVXRpbGl0eU5ldHdvcmtUcmFjZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9VdGlsaXR5TmV0d29ya1RyYWNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1V0aWxpdHlOZXR3b3JrVHJhY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1V0aWxpdHlOZXR3b3JrVHJhY2UocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya1RyYWNlKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzVXRpbGl0eU5ldHdvcmtUcmFjZUFuYWx5c2lzVXRpbGl0eU5ldHdvcmtUcmFjZUFuYWx5c2lzVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1V0aWxpdHlOZXR3b3JrVHJhY2VBbmFseXNpcy9VdGlsaXR5TmV0d29ya1RyYWNlQW5hbHlzaXNWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvVXRpbGl0eU5ldHdvcmtUcmFjZUFuYWx5c2lzL1V0aWxpdHlOZXR3b3JrVHJhY2VBbmFseXNpc1ZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzVXRpbGl0eU5ldHdvcmtUcmFjZUFuYWx5c2lzVXRpbGl0eU5ldHdvcmtUcmFjZUFuYWx5c2lzVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzVXRpbGl0eU5ldHdvcmtUcmFjZUFuYWx5c2lzVXRpbGl0eU5ldHdvcmtUcmFjZUFuYWx5c2lzVmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzVXRpbGl0eU5ldHdvcmtUcmFjZVV0aWxpdHlOZXR3b3JrVHJhY2VWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVXRpbGl0eU5ldHdvcmtUcmFjZS9VdGlsaXR5TmV0d29ya1RyYWNlVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1V0aWxpdHlOZXR3b3JrVHJhY2UvVXRpbGl0eU5ldHdvcmtUcmFjZVZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzVXRpbGl0eU5ldHdvcmtUcmFjZVV0aWxpdHlOZXR3b3JrVHJhY2VWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya1RyYWNlVXRpbGl0eU5ldHdvcmtUcmFjZVZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1V0aWxpdHlOZXR3b3JrVmFsaWRhdGVUb3BvbG9neSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9VdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3lcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvVXRpbGl0eU5ldHdvcmtWYWxpZGF0ZVRvcG9sb2d5LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNVdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3kocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3koKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3lVdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3lWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVXRpbGl0eU5ldHdvcmtWYWxpZGF0ZVRvcG9sb2d5L1V0aWxpdHlOZXR3b3JrVmFsaWRhdGVUb3BvbG9neVZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9VdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3kvVXRpbGl0eU5ldHdvcmtWYWxpZGF0ZVRvcG9sb2d5Vmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNVdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3lVdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3lWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3lVdGlsaXR5TmV0d29ya1ZhbGlkYXRlVG9wb2xvZ3lWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9WYWx1ZVBpY2tlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9WYWx1ZVBpY2tlci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzVmFsdWVQaWNrZXIocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1ZhbHVlUGlja2VyVmFsdWVQaWNrZXJDb2xsZWN0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1ZhbHVlUGlja2VyL1ZhbHVlUGlja2VyQ29sbGVjdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9WYWx1ZVBpY2tlci9WYWx1ZVBpY2tlckNvbGxlY3Rpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1ZhbHVlUGlja2VyVmFsdWVQaWNrZXJDb2xsZWN0aW9uKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzVmFsdWVQaWNrZXJWYWx1ZVBpY2tlckNvbGxlY3Rpb24oKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyQ29tYm9ib3goKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVmFsdWVQaWNrZXIvVmFsdWVQaWNrZXJDb21ib2JveFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9WYWx1ZVBpY2tlci9WYWx1ZVBpY2tlckNvbWJvYm94LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyQ29tYm9ib3gocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyQ29tYm9ib3goKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyTGFiZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVmFsdWVQaWNrZXIvVmFsdWVQaWNrZXJMYWJlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9WYWx1ZVBpY2tlci9WYWx1ZVBpY2tlckxhYmVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyTGFiZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyTGFiZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyU2xpZGVyKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1ZhbHVlUGlja2VyL1ZhbHVlUGlja2VyU2xpZGVyXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1ZhbHVlUGlja2VyL1ZhbHVlUGlja2VyU2xpZGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyU2xpZGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzVmFsdWVQaWNrZXJWYWx1ZVBpY2tlclNsaWRlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1ZlcnNpb25NYW5hZ2VtZW50VmVyc2lvbk1hbmFnZW1lbnRWaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVmVyc2lvbk1hbmFnZW1lbnQvVmVyc2lvbk1hbmFnZW1lbnRWaWV3TW9kZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvVmVyc2lvbk1hbmFnZW1lbnQvVmVyc2lvbk1hbmFnZW1lbnRWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1ZlcnNpb25NYW5hZ2VtZW50VmVyc2lvbk1hbmFnZW1lbnRWaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNWZXJzaW9uTWFuYWdlbWVudFZlcnNpb25NYW5hZ2VtZW50Vmlld01vZGVsKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzVmlkZW9QbGF5ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvVmlkZW9QbGF5ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3dpZGdldHMvVmlkZW9QbGF5ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1ZpZGVvUGxheWVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzVmlkZW9QbGF5ZXIoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNWaWRlb1BsYXllclZpZGVvUGxheWVyVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1ZpZGVvUGxheWVyL1ZpZGVvUGxheWVyVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1ZpZGVvUGxheWVyL1ZpZGVvUGxheWVyVmlld01vZGVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNWaWRlb1BsYXllclZpZGVvUGxheWVyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzVmlkZW9QbGF5ZXJWaWRlb1BsYXllclZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1dlYXRoZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvV2VhdGhlclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9XZWF0aGVyLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG5ld1dpZGdldHNXZWF0aGVyKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzV2VhdGhlcigpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1dlYXRoZXJXZWF0aGVyVmlld01vZGVsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS93aWRnZXRzL1dlYXRoZXIvV2VhdGhlclZpZXdNb2RlbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9XZWF0aGVyL1dlYXRoZXJWaWV3TW9kZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1dlYXRoZXJXZWF0aGVyVmlld01vZGVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzV2VhdGhlcldlYXRoZXJWaWV3TW9kZWwoKTtcbiAgcmV0dXJuIG5ldyBNb2RDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFdpZGdldHNXaWRnZXQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvV2lkZ2V0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1dpZGdldC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzV2lkZ2V0KHByb3BlcnRpZXMpIHtcbiAgY29uc3QgTW9kQ29uc3RydWN0b3IgPSBhd2FpdCBpbXBvcnRXaWRnZXRzV2lkZ2V0KCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzWm9vbSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9ab29tXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1pvb20uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gbmV3V2lkZ2V0c1pvb20ocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNab29tKCk7XG4gIHJldHVybiBuZXcgTW9kQ29uc3RydWN0b3IocHJvcGVydGllcyk7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzWm9vbVpvb21WaWV3TW9kZWwoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3dpZGdldHMvWm9vbS9ab29tVmlld01vZGVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS93aWRnZXRzL1pvb20vWm9vbVZpZXdNb2RlbC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBuZXdXaWRnZXRzWm9vbVpvb21WaWV3TW9kZWwocHJvcGVydGllcykge1xuICBjb25zdCBNb2RDb25zdHJ1Y3RvciA9IGF3YWl0IGltcG9ydFdpZGdldHNab29tWm9vbVZpZXdNb2RlbCgpO1xuICByZXR1cm4gbmV3IE1vZENvbnN0cnVjdG9yKHByb3BlcnRpZXMpO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0QXJjYWRlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcmNhZGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FyY2FkZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRDb25maWcoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2NvbmZpZ1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvY29uZmlnLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydENvcmVBY2Nlc3NvclN1cHBvcnREZWNvcmF0b3JzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL2FjY2Vzc29yU3VwcG9ydC9kZWNvcmF0b3JzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9jb3JlL2FjY2Vzc29yU3VwcG9ydC9kZWNvcmF0b3JzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydENvcmVMYW5nKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL2xhbmdcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2NvcmUvbGFuZy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRDb3JlUHJvbWlzZVV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL3Byb21pc2VVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvY29yZS9wcm9taXNlVXRpbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Q29yZVJlYWN0aXZlVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2NvcmUvcmVhY3RpdmVVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvY29yZS9yZWFjdGl2ZVV0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydENvcmVTY2hlZHVsaW5nKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL3NjaGVkdWxpbmdcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2NvcmUvc2NoZWR1bGluZy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRDb3JlU3FsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL3NxbFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvY29yZS9zcWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Q29yZVNxbFdoZXJlQ2xhdXNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL3NxbC9XaGVyZUNsYXVzZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvY29yZS9zcWwvV2hlcmVDbGF1c2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Q29yZVVybFV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL3VybFV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9jb3JlL3VybFV0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydENvcmVXb3JrZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9jb3JlL3dvcmtlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2NvcmUvd29ya2Vycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRFZGl0aW5nU2hhcmVkVGVtcGxhdGVzU2hhcmVkVGVtcGxhdGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2VkaXRpbmcvc2hhcmVkVGVtcGxhdGVzL1NoYXJlZFRlbXBsYXRlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9lZGl0aW5nL3NoYXJlZFRlbXBsYXRlcy9TaGFyZWRUZW1wbGF0ZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRFZGl0aW5nU2hhcmVkVGVtcGxhdGVzU2hhcmVkVGVtcGxhdGVNZXRhZGF0YSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZWRpdGluZy9zaGFyZWRUZW1wbGF0ZXMvU2hhcmVkVGVtcGxhdGVNZXRhZGF0YVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZWRpdGluZy9zaGFyZWRUZW1wbGF0ZXMvU2hhcmVkVGVtcGxhdGVNZXRhZGF0YS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHMvaW5wdXRzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9mb3JtL2VsZW1lbnRzL2lucHV0cy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRGb3JtRWxlbWVudHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2Zvcm0vZWxlbWVudHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2Zvcm0vZWxlbWVudHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnkoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeUNvb3JkaW5hdGVGb3JtYXR0ZXIoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L2Nvb3JkaW5hdGVGb3JtYXR0ZXJcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L2Nvb3JkaW5hdGVGb3JtYXR0ZXIuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlHZW9tZXRyeUVuZ2luZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvZ2VvbWV0cnlFbmdpbmVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L2dlb21ldHJ5RW5naW5lLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEdlb21ldHJ5R2VvbWV0cnlFbmdpbmVBc3luYygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvZ2VvbWV0cnlFbmdpbmVBc3luY1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvZ2VvbWV0cnlFbmdpbmVBc3luYy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeVByb2plY3Rpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L3Byb2plY3Rpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L3Byb2plY3Rpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNBZmZpbmVUcmFuc2Zvcm1PcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2FmZmluZVRyYW5zZm9ybU9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvYWZmaW5lVHJhbnNmb3JtT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNBbHBoYVNoYXBlT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9hbHBoYVNoYXBlT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9hbHBoYVNoYXBlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNBcmVhT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9hcmVhT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9hcmVhT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNBdXRvQ29tcGxldGVPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2F1dG9Db21wbGV0ZU9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvYXV0b0NvbXBsZXRlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNCb3VuZGFyeU9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvYm91bmRhcnlPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL2JvdW5kYXJ5T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNCdWZmZXJPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2J1ZmZlck9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvYnVmZmVyT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNDZW50cm9pZE9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvY2VudHJvaWRPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL2NlbnRyb2lkT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNDbGlwT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9jbGlwT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9jbGlwT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNDb250YWluc09wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvY29udGFpbnNPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL2NvbnRhaW5zT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNDb252ZXhIdWxsT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9jb252ZXhIdWxsT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9jb252ZXhIdWxsT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNDcm9zc2VzT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9jcm9zc2VzT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9jcm9zc2VzT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNDdXRPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2N1dE9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvY3V0T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNEZW5zaWZ5T3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9kZW5zaWZ5T3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9kZW5zaWZ5T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNEaWZmZXJlbmNlT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9kaWZmZXJlbmNlT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9kaWZmZXJlbmNlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNEaXNqb2ludE9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvZGlzam9pbnRPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL2Rpc2pvaW50T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNEaXN0YW5jZU9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvZGlzdGFuY2VPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL2Rpc3RhbmNlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNFcXVhbHNPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2VxdWFsc09wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvZXF1YWxzT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNFeHRlbmRPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2V4dGVuZE9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvZXh0ZW5kT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHZW5lcmFsaXplT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9nZW5lcmFsaXplT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9nZW5lcmFsaXplT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHZW9kZXNpY0J1ZmZlck9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvZ2VvZGVzaWNCdWZmZXJPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL2dlb2Rlc2ljQnVmZmVyT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHZW9kZXNpY1Byb3hpbWl0eU9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvZ2VvZGVzaWNQcm94aW1pdHlPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL2dlb2Rlc2ljUHJveGltaXR5T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHZW9kZXRpY0FyZWFPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2dlb2RldGljQXJlYU9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvZ2VvZGV0aWNBcmVhT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHZW9kZXRpY0RlbnNpZnlPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2dlb2RldGljRGVuc2lmeU9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvZ2VvZGV0aWNEZW5zaWZ5T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHZW9kZXRpY0Rpc3RhbmNlT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9nZW9kZXRpY0Rpc3RhbmNlT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9nZW9kZXRpY0Rpc3RhbmNlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHZW9kZXRpY0xlbmd0aE9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvZ2VvZGV0aWNMZW5ndGhPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL2dlb2RldGljTGVuZ3RoT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHZW9kZXRpY1V0aWxzT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9nZW9kZXRpY1V0aWxzT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9nZW9kZXRpY1V0aWxzT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHcmFwaGljQnVmZmVyT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9ncmFwaGljQnVmZmVyT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9ncmFwaGljQnVmZmVyT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNJbnRlZ3JhdGVPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2ludGVncmF0ZU9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvaW50ZWdyYXRlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNJbnRlcnNlY3Rpb25PcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2ludGVyc2VjdGlvbk9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvaW50ZXJzZWN0aW9uT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNJbnRlcnNlY3RzT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9pbnRlcnNlY3RzT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9pbnRlcnNlY3RzT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNJc05lYXJPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2lzTmVhck9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvaXNOZWFyT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNMYWJlbFBvaW50T3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9sYWJlbFBvaW50T3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9sYWJlbFBvaW50T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNMZW5ndGhPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2xlbmd0aE9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvbGVuZ3RoT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNMaW5lc1RvUG9seWdvbnNPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL2xpbmVzVG9Qb2x5Z29uc09wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvbGluZXNUb1BvbHlnb25zT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNMb2NhdGVCZXR3ZWVuT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9sb2NhdGVCZXR3ZWVuT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9sb2NhdGVCZXR3ZWVuT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNNaW5pbXVtQm91bmRpbmdDaXJjbGVPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL21pbmltdW1Cb3VuZGluZ0NpcmNsZU9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvbWluaW11bUJvdW5kaW5nQ2lyY2xlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNNdWx0aVBhcnRUb1NpbmdsZVBhcnRPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL211bHRpUGFydFRvU2luZ2xlUGFydE9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvbXVsdGlQYXJ0VG9TaW5nbGVQYXJ0T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNPZmZzZXRPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL29mZnNldE9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvb2Zmc2V0T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNPdmVybGFwc09wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvb3ZlcmxhcHNPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL292ZXJsYXBzT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNQb2x5Z29uT3ZlcmxheU9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvcG9seWdvbk92ZXJsYXlPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL3BvbHlnb25PdmVybGF5T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNQb2x5Z29uU2xpY2VyT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9wb2x5Z29uU2xpY2VyT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9wb2x5Z29uU2xpY2VyT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNQcm9qZWN0T3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9wcm9qZWN0T3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9wcm9qZWN0T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNQcm94aW1pdHlPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL3Byb3hpbWl0eU9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvcHJveGltaXR5T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNSZWxhdGVPcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL3JlbGF0ZU9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvcmVsYXRlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNSZXNoYXBlT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9yZXNoYXBlT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9yZXNoYXBlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNTaGFwZVByZXNlcnZpbmdQcm9qZWN0T3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9zaGFwZVByZXNlcnZpbmdQcm9qZWN0T3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9zaGFwZVByZXNlcnZpbmdQcm9qZWN0T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNTaW1wbGlmeU9HQ09wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvc2ltcGxpZnlPR0NPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL3NpbXBsaWZ5T0dDT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNTaW1wbGlmeU9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvc2ltcGxpZnlPcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL3NpbXBsaWZ5T3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNTeW1tZXRyaWNEaWZmZXJlbmNlT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9zeW1tZXRyaWNEaWZmZXJlbmNlT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy9zeW1tZXRyaWNEaWZmZXJlbmNlT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNUb3VjaGVzT3BlcmF0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy90b3VjaGVzT3BlcmF0b3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L29wZXJhdG9ycy90b3VjaGVzT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNVbmlvbk9wZXJhdG9yKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9vcGVyYXRvcnMvdW5pb25PcGVyYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvb3BlcmF0b3JzL3VuaW9uT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNXaXRoaW5PcGVyYXRvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvb3BlcmF0b3JzL3dpdGhpbk9wZXJhdG9yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvd2l0aGluT3BlcmF0b3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNTdXBwb3J0R2VvZ3JhcGhpY1RyYW5zZm9ybWF0aW9uVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L29wZXJhdG9ycy9zdXBwb3J0L2dlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvblV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9vcGVyYXRvcnMvc3VwcG9ydC9nZW9ncmFwaGljVHJhbnNmb3JtYXRpb25VdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeVN1cHBvcnRHZW9kZXNpY1V0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9zdXBwb3J0L2dlb2Rlc2ljVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L3N1cHBvcnQvZ2VvZGVzaWNVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeVN1cHBvcnRKc29uVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L3N1cHBvcnQvanNvblV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9zdXBwb3J0L2pzb25VdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeVN1cHBvcnRNZXNoVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2dlb21ldHJ5L3N1cHBvcnQvbWVzaFV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9nZW9tZXRyeS9zdXBwb3J0L21lc2hVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeVN1cHBvcnROb3JtYWxpemVVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvZ2VvbWV0cnkvc3VwcG9ydC9ub3JtYWxpemVVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvZ2VvbWV0cnkvc3VwcG9ydC9ub3JtYWxpemVVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHZW9tZXRyeVN1cHBvcnRXZWJNZXJjYXRvclV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9nZW9tZXRyeS9zdXBwb3J0L3dlYk1lcmNhdG9yVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2dlb21ldHJ5L3N1cHBvcnQvd2ViTWVyY2F0b3JVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRJbnRsKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9pbnRsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9pbnRsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydEtlcm5lbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkva2VybmVsXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9rZXJuZWwuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzQ2F0YWxvZ0NhdGFsb2dVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL2NhdGFsb2cvY2F0YWxvZ1V0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvY2F0YWxvZy9jYXRhbG9nVXRpbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzT2djV2ZzVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9vZ2Mvd2ZzVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9vZ2Mvd2ZzVXRpbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzT2djV2NzVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9vZ2Mvd2NzVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9vZ2Mvd2NzVXRpbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0TGF5ZXJzT3JpZW50ZWRJbWFnZXJ5VHJhbnNmb3JtYXRpb25zV29ybGRUb0ltYWdlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvb3JpZW50ZWRJbWFnZXJ5L3RyYW5zZm9ybWF0aW9ucy93b3JsZFRvSW1hZ2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9vcmllbnRlZEltYWdlcnkvdHJhbnNmb3JtYXRpb25zL3dvcmxkVG9JbWFnZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRMYXllcnNPcmllbnRlZEltYWdlcnlUcmFuc2Zvcm1hdGlvbnNJbWFnZVRvV29ybGQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9vcmllbnRlZEltYWdlcnkvdHJhbnNmb3JtYXRpb25zL2ltYWdlVG9Xb3JsZFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL29yaWVudGVkSW1hZ2VyeS90cmFuc2Zvcm1hdGlvbnMvaW1hZ2VUb1dvcmxkLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRBcmNhZGVVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvYXJjYWRlVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L2FyY2FkZVV0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRDc3ZVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvY3N2VXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L2NzdlV0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRGaWVsZFV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9maWVsZFV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9maWVsZFV0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRQYXJxdWV0VXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy9zdXBwb3J0L3BhcnF1ZXRVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3N1cHBvcnQvcGFycXVldFV0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRSYXN0ZXJGdW5jdGlvbkNvbnN0YW50cygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3N1cHBvcnQvcmFzdGVyRnVuY3Rpb25Db25zdGFudHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy9zdXBwb3J0L3Jhc3RlckZ1bmN0aW9uQ29uc3RhbnRzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRSYXN0ZXJGdW5jdGlvblV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9yYXN0ZXJGdW5jdGlvblV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9yYXN0ZXJGdW5jdGlvblV0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1N1cHBvcnRTdHJlYW1Db25uZWN0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9sYXllcnMvc3VwcG9ydC9TdHJlYW1Db25uZWN0aW9uXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9sYXllcnMvc3VwcG9ydC9TdHJlYW1Db25uZWN0aW9uLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1ZveGVsVm94ZWxWYXJpYWJsZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvbGF5ZXJzL3ZveGVsL1ZveGVsVmFyaWFibGVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2xheWVycy92b3hlbC9Wb3hlbFZhcmlhYmxlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydExheWVyc1ZveGVsVm94ZWxWb2x1bWUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2xheWVycy92b3hlbC9Wb3hlbFZvbHVtZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvbGF5ZXJzL3ZveGVsL1ZveGVsVm9sdW1lLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBvaW50Q2xvdWRSZW5kZXJlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3BvaW50Q2xvdWRSZW5kZXJlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3BvaW50Q2xvdWRSZW5kZXJlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UG9wdXBDb250ZW50KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9wb3B1cC9jb250ZW50XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9wb3B1cC9jb250ZW50LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJhc3RlclJlbmRlcmVycygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmFzdGVyUmVuZGVyZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yYXN0ZXJSZW5kZXJlcnMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVuZGVyZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0SnNvblV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZW5kZXJlcnMvc3VwcG9ydC9qc29uVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3JlbmRlcmVycy9zdXBwb3J0L2pzb25VdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0VXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3JlbmRlcmVycy9zdXBwb3J0L3V0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZW5kZXJlcnMvc3VwcG9ydC91dGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXF1ZXN0KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXF1ZXN0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXF1ZXN0LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RDbG9zZXN0RmFjaWxpdHkoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvY2xvc2VzdEZhY2lsaXR5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2Nsb3Nlc3RGYWNpbGl0eS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0RmVhdHVyZVNlcnZpY2VVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9mZWF0dXJlU2VydmljZS91dGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9mZWF0dXJlU2VydmljZS91dGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0RmluZCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9maW5kXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2ZpbmQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEdlb21ldHJ5U2VydmljZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9nZW9tZXRyeVNlcnZpY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvZ2VvbWV0cnlTZXJ2aWNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RHZW9wcm9jZXNzb3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvZ2VvcHJvY2Vzc29yXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2dlb3Byb2Nlc3Nvci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0R2VvcHJvY2Vzc29yR1BPcHRpb25zKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L2dlb3Byb2Nlc3Nvci9HUE9wdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvZ2VvcHJvY2Vzc29yL0dQT3B0aW9ucy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0SWRlbnRpZnkoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvaWRlbnRpZnlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvaWRlbnRpZnkuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdEltYWdlU2VydmljZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9pbWFnZVNlcnZpY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvaW1hZ2VTZXJ2aWNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFNlcnZpY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qva25vd2xlZGdlR3JhcGhTZXJ2aWNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2tub3dsZWRnZUdyYXBoU2VydmljZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0TGFzdE1pbGVEZWxpdmVyeSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9sYXN0TWlsZURlbGl2ZXJ5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L2xhc3RNaWxlRGVsaXZlcnkuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdExvY2F0b3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvbG9jYXRvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9sb2NhdG9yLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3ROZXR3b3Jrc1F1ZXJ5QXNzb2NpYXRpb25zKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L25ldHdvcmtzL3F1ZXJ5QXNzb2NpYXRpb25zXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L25ldHdvcmtzL3F1ZXJ5QXNzb2NpYXRpb25zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnRWYWxpZGF0ZU5ldHdvcmtUb3BvbG9neVJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9uZXR3b3Jrcy9zdXBwb3J0L1ZhbGlkYXRlTmV0d29ya1RvcG9sb2d5UmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L25ldHdvcmtzL3N1cHBvcnQvVmFsaWRhdGVOZXR3b3JrVG9wb2xvZ3lSZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdE5ldHdvcmtzU3ludGhlc2l6ZUFzc29jaWF0aW9uR2VvbWV0cmllcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9uZXR3b3Jrcy9zeW50aGVzaXplQXNzb2NpYXRpb25HZW9tZXRyaWVzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L25ldHdvcmtzL3N5bnRoZXNpemVBc3NvY2lhdGlvbkdlb21ldHJpZXMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdE5ldHdvcmtzVHJhY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvbmV0d29ya3MvdHJhY2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvbmV0d29ya3MvdHJhY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdE5ldHdvcmtTZXJ2aWNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L25ldHdvcmtTZXJ2aWNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L25ldHdvcmtTZXJ2aWNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RQbGFjZXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvcGxhY2VzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3BsYWNlcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0UHJpbnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3QvcHJpbnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3QvcHJpbnQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFF1ZXJ5KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9yZXN0L3F1ZXJ5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9yZXN0L3F1ZXJ5LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFJlc3RSb3V0ZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvcmVzdC9yb3V0ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9yb3V0ZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRSZXN0U2VydmljZUFyZWEoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc2VydmljZUFyZWFcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3Jlc3Qvc2VydmljZUFyZWEuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0UmVzdFN5bWJvbFNlcnZpY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3Jlc3Qvc3ltYm9sU2VydmljZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvcmVzdC9zeW1ib2xTZXJ2aWNlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ0hldXJpc3RpY3NCaW5MZXZlbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL2hldXJpc3RpY3MvYmluTGV2ZWxcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9oZXVyaXN0aWNzL2JpbkxldmVsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ0hldXJpc3RpY3NTY2FsZVJhbmdlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvaGV1cmlzdGljcy9zY2FsZVJhbmdlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvaGV1cmlzdGljcy9zY2FsZVJhbmdlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ0hldXJpc3RpY3NTaXplUmFuZ2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9oZXVyaXN0aWNzL3NpemVSYW5nZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL2hldXJpc3RpY3Mvc2l6ZVJhbmdlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ0xhYmVsc0JpbnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9sYWJlbHMvYmluc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL2xhYmVscy9iaW5zLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ0xhYmVsc0NsdXN0ZXJzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvbGFiZWxzL2NsdXN0ZXJzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvbGFiZWxzL2NsdXN0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1BvcHVwQ2x1c3RlcnMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9wb3B1cC9jbHVzdGVyc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3BvcHVwL2NsdXN0ZXJzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1BvcHVwVGVtcGxhdGVzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvcG9wdXAvdGVtcGxhdGVzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcG9wdXAvdGVtcGxhdGVzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1Jhc3RlclJlbmRlcmVyc0NsYXNzQnJlYWtzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy9jbGFzc0JyZWFrc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3Jhc3Rlci9yZW5kZXJlcnMvY2xhc3NCcmVha3MuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmFzdGVyUmVuZGVyZXJzQ29sb3JtYXAoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9yYXN0ZXIvcmVuZGVyZXJzL2NvbG9ybWFwXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy9jb2xvcm1hcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdSYXN0ZXJSZW5kZXJlcnNGbG93KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy9mbG93XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy9mbG93LmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1Jhc3RlclJlbmRlcmVyc1JnYigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3Jhc3Rlci9yZW5kZXJlcnMvcmdiXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy9yZ2IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmFzdGVyUmVuZGVyZXJzU2hhZGVkUmVsaWVmKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy9zaGFkZWRSZWxpZWZcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9yYXN0ZXIvcmVuZGVyZXJzL3NoYWRlZFJlbGllZi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdSYXN0ZXJSZW5kZXJlcnNTdHJldGNoKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy9zdHJldGNoXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy9zdHJldGNoLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1Jhc3RlclJlbmRlcmVyc1VuaXF1ZVZhbHVlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy91bmlxdWVWYWx1ZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3Jhc3Rlci9yZW5kZXJlcnMvdW5pcXVlVmFsdWUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmFzdGVyUmVuZGVyZXJzVmVjdG9yRmllbGQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9yYXN0ZXIvcmVuZGVyZXJzL3ZlY3RvckZpZWxkXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmFzdGVyL3JlbmRlcmVycy92ZWN0b3JGaWVsZC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdSYXN0ZXJTdXBwb3J0Q29sb3JSYW1wcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3Jhc3Rlci9zdXBwb3J0L2NvbG9yUmFtcHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9yYXN0ZXIvc3VwcG9ydC9jb2xvclJhbXBzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1Jhc3RlclN1cHBvcnRVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3Jhc3Rlci9zdXBwb3J0L3V0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmFzdGVyL3N1cHBvcnQvdXRpbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzQ29sb3IoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9yZW5kZXJlcnMvY29sb3JcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9yZW5kZXJlcnMvY29sb3IuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzRG90RGVuc2l0eSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3JlbmRlcmVycy9kb3REZW5zaXR5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmVuZGVyZXJzL2RvdERlbnNpdHkuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzSGVhdG1hcCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3JlbmRlcmVycy9oZWF0bWFwXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmVuZGVyZXJzL2hlYXRtYXAuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzTG9jYXRpb24oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9yZW5kZXJlcnMvbG9jYXRpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9yZW5kZXJlcnMvbG9jYXRpb24uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzT3BhY2l0eSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3JlbmRlcmVycy9vcGFjaXR5XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmVuZGVyZXJzL29wYWNpdHkuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzUGllQ2hhcnQoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9yZW5kZXJlcnMvcGllQ2hhcnRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9yZW5kZXJlcnMvcGllQ2hhcnQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzUHJlZG9taW5hbmNlKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvcmVuZGVyZXJzL3ByZWRvbWluYW5jZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3JlbmRlcmVycy9wcmVkb21pbmFuY2UuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzUmVsYXRpb25zaGlwKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvcmVuZGVyZXJzL3JlbGF0aW9uc2hpcFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3JlbmRlcmVycy9yZWxhdGlvbnNoaXAuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzU2l6ZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3JlbmRlcmVycy9zaXplXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmVuZGVyZXJzL3NpemUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzVHlwZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3JlbmRlcmVycy90eXBlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmVuZGVyZXJzL3R5cGUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzVW5pdmFyaWF0ZUNvbG9yU2l6ZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3JlbmRlcmVycy91bml2YXJpYXRlQ29sb3JTaXplXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmVuZGVyZXJzL3VuaXZhcmlhdGVDb2xvclNpemUuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzU3VwcG9ydFJlbmRlcmVyVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9yZW5kZXJlcnMvc3VwcG9ydC9yZW5kZXJlclV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvcmVuZGVyZXJzL3N1cHBvcnQvcmVuZGVyZXJVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdSZW5kZXJlcnNTdXBwb3J0U3Bpa2VVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3JlbmRlcmVycy9zdXBwb3J0L3NwaWtlVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9yZW5kZXJlcnMvc3VwcG9ydC9zcGlrZVV0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1N0YXRpc3RpY3NDbGFzc0JyZWFrcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3N0YXRpc3RpY3MvY2xhc3NCcmVha3NcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zdGF0aXN0aWNzL2NsYXNzQnJlYWtzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1N0YXRpc3RpY3NIZWF0bWFwU3RhdGlzdGljcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3N0YXRpc3RpY3MvaGVhdG1hcFN0YXRpc3RpY3NcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zdGF0aXN0aWNzL2hlYXRtYXBTdGF0aXN0aWNzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1N0YXRpc3RpY3NIaXN0b2dyYW0oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9zdGF0aXN0aWNzL2hpc3RvZ3JhbVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3N0YXRpc3RpY3MvaGlzdG9ncmFtLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1N0YXRpc3RpY3NQcmVkb21pbmFudENhdGVnb3JpZXMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9zdGF0aXN0aWNzL3ByZWRvbWluYW50Q2F0ZWdvcmllc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3N0YXRpc3RpY3MvcHJlZG9taW5hbnRDYXRlZ29yaWVzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1N0YXRpc3RpY3NTdW1tYXJ5U3RhdGlzdGljcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3N0YXRpc3RpY3Mvc3VtbWFyeVN0YXRpc3RpY3NcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zdGF0aXN0aWNzL3N1bW1hcnlTdGF0aXN0aWNzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1N0YXRpc3RpY3NTdW1tYXJ5U3RhdGlzdGljc0ZvckFnZSgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3N0YXRpc3RpY3Mvc3VtbWFyeVN0YXRpc3RpY3NGb3JBZ2VcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zdGF0aXN0aWNzL3N1bW1hcnlTdGF0aXN0aWNzRm9yQWdlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1N0YXRpc3RpY3NTdXBwb3J0QWdlVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9zdGF0aXN0aWNzL3N1cHBvcnQvYWdlVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zdGF0aXN0aWNzL3N1cHBvcnQvYWdlVXRpbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U21hcnRNYXBwaW5nU3RhdGlzdGljc1N1cHBvcnRQcmVkb21pbmFuY2VVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3N0YXRpc3RpY3Mvc3VwcG9ydC9wcmVkb21pbmFuY2VVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3N0YXRpc3RpY3Mvc3VwcG9ydC9wcmVkb21pbmFuY2VVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTdGF0aXN0aWNzVW5pcXVlVmFsdWVzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvc3RhdGlzdGljcy91bmlxdWVWYWx1ZXNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zdGF0aXN0aWNzL3VuaXF1ZVZhbHVlcy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lDb2xvcigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3N5bWJvbG9neS9jb2xvclwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3N5bWJvbG9neS9jb2xvci5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lEb3REZW5zaXR5KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvc3ltYm9sb2d5L2RvdERlbnNpdHlcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zeW1ib2xvZ3kvZG90RGVuc2l0eS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lGbG93KCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvc3ltYm9sb2d5L2Zsb3dcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zeW1ib2xvZ3kvZmxvdy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lIZWF0bWFwKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvc3ltYm9sb2d5L2hlYXRtYXBcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zeW1ib2xvZ3kvaGVhdG1hcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lMb2NhdGlvbigpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3N5bWJvbG9neS9sb2NhdGlvblwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3N5bWJvbG9neS9sb2NhdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lQaWVDaGFydCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3N5bWJvbG9neS9waWVDaGFydFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3N5bWJvbG9neS9waWVDaGFydC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lQcmVkb21pbmFuY2UoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9zeW1ib2xvZ3kvcHJlZG9taW5hbmNlXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvc3ltYm9sb2d5L3ByZWRvbWluYW5jZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lSZWxhdGlvbnNoaXAoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9zeW1ib2xvZ3kvcmVsYXRpb25zaGlwXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9zbWFydE1hcHBpbmcvc3ltYm9sb2d5L3JlbGF0aW9uc2hpcC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lTaXplKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zbWFydE1hcHBpbmcvc3ltYm9sb2d5L3NpemVcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zeW1ib2xvZ3kvc2l6ZS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lTdXBwb3J0Q29sb3JSYW1wcygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc21hcnRNYXBwaW5nL3N5bWJvbG9neS9zdXBwb3J0L2NvbG9yUmFtcHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3NtYXJ0TWFwcGluZy9zeW1ib2xvZ3kvc3VwcG9ydC9jb2xvclJhbXBzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFNtYXJ0TWFwcGluZ1N5bWJvbG9neVR5cGUoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3NtYXJ0TWFwcGluZy9zeW1ib2xvZ3kvdHlwZVwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc21hcnRNYXBwaW5nL3N5bWJvbG9neS90eXBlLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFN1cHBvcnRQb3B1cFV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zdXBwb3J0L3BvcHVwVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N1cHBvcnQvcG9wdXBVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTdXBwb3J0VGltZVV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zdXBwb3J0L3RpbWVVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3VwcG9ydC90aW1lVXRpbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0U3ltYm9scygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9sc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzU3VwcG9ydENpbUNvbnZlcnNpb25VdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9zdXBwb3J0L2NpbUNvbnZlcnNpb25VdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9zdXBwb3J0L2NpbUNvbnZlcnNpb25VdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzU3VwcG9ydENpbVN5bWJvbFV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL3N1cHBvcnQvY2ltU3ltYm9sVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvc3VwcG9ydC9jaW1TeW1ib2xVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzU3VwcG9ydEpzb25VdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvc3ltYm9scy9zdXBwb3J0L2pzb25VdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvc3ltYm9scy9zdXBwb3J0L2pzb25VdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRTeW1ib2xzU3VwcG9ydFN5bWJvbFV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9zeW1ib2xzL3N1cHBvcnQvc3ltYm9sVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3N5bWJvbHMvc3VwcG9ydC9zeW1ib2xVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRUYWJsZXNFbGVtZW50cygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdGFibGVzL2VsZW1lbnRzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS90YWJsZXMvZWxlbWVudHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0VmVyc2lvbk1hbmFnZW1lbnRVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmVyc2lvbk1hbmFnZW1lbnQvdXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZlcnNpb25NYW5hZ2VtZW50L3V0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZlcnNpb25NYW5hZ2VtZW50VmVyc2lvbkFkYXB0ZXJzVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZlcnNpb25NYW5hZ2VtZW50L3ZlcnNpb25BZGFwdGVycy91dGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmVyc2lvbk1hbmFnZW1lbnQvdmVyc2lvbkFkYXB0ZXJzL3V0aWxzLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RXZWJnbCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvM2Qvd2ViZ2xcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzLzNkL3dlYmdsLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RXZWJnbE1hbmFnZWRGQk8oKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL3ZpZXdzLzNkL3dlYmdsL01hbmFnZWRGQk9cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzLzNkL3dlYmdsL01hbmFnZWRGQk8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3MzZFdlYmdsUmVuZGVyQ2FtZXJhKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC93ZWJnbC9SZW5kZXJDYW1lcmFcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL3ZpZXdzLzNkL3dlYmdsL1JlbmRlckNhbWVyYS5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRWaWV3czNkU3VwcG9ydExheWVyUGVyZm9ybWFuY2VJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC9zdXBwb3J0L0xheWVyUGVyZm9ybWFuY2VJbmZvXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy8zZC9zdXBwb3J0L0xheWVyUGVyZm9ybWFuY2VJbmZvLmpzXCIpO1xuICByZXR1cm4gaXNEZWZhdWx0TW9kdWxlKG1vZHVsZSkgPyBtb2R1bGUuZGVmYXVsdCA6IG1vZHVsZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFZpZXdzM2RTdXBwb3J0U2NlbmVWaWV3UGVyZm9ybWFuY2VJbmZvKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS92aWV3cy8zZC9zdXBwb3J0L1NjZW5lVmlld1BlcmZvcm1hbmNlSW5mb1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvdmlld3MvM2Qvc3VwcG9ydC9TY2VuZVZpZXdQZXJmb3JtYW5jZUluZm8uanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NBbmFseXNpc0xlbmd0aERpbWVuc2lvblJlc3VsdCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3MvYW5hbHlzaXMvTGVuZ3RoRGltZW5zaW9uUmVzdWx0XCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9hbmFseXNpcy9MZW5ndGhEaW1lbnNpb25SZXN1bHQuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0Vmlld3NTdXBwb3J0Q29sb3JVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvdmlld3Mvc3VwcG9ydC9jb2xvclV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS92aWV3cy9zdXBwb3J0L2NvbG9yVXRpbHMuanNcIik7XG4gIHJldHVybiBpc0RlZmF1bHRNb2R1bGUobW9kdWxlKSA/IG1vZHVsZS5kZWZhdWx0IDogbW9kdWxlO1xufVxuYXN5bmMgZnVuY3Rpb24gaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ1N1cHBvcnRVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zbWFydE1hcHBpbmcvc3VwcG9ydC91dGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9zbWFydE1hcHBpbmcvc3VwcG9ydC91dGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRXaWRnZXRzU3VwcG9ydFdpZGdldCgpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvd2lkZ2V0cy9zdXBwb3J0L3dpZGdldFwiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvd2lkZ2V0cy9zdXBwb3J0L3dpZGdldC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzQWN0aW9uVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2FjdGlvblV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9hY3Rpb25VdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzQW5hbHlzaXNVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvYW5hbHlzaXNVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvYW5hbHlzaXNVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzQXJjYWRlRmVhdHVyZVV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9hcmNhZGVGZWF0dXJlVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2FyY2FkZUZlYXR1cmVVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzQmFzZW1hcFV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9iYXNlbWFwVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2Jhc2VtYXBVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzRHJhd1V0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9kcmF3VXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2RyYXdVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzRmVhdHVyZVV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9mZWF0dXJlVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2ZlYXR1cmVVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzRm9udFV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9mb250VXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2ZvbnRVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzRm9ybWF0VXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2Zvcm1hdFV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9mb3JtYXRVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzR2V0RGVmYXVsdFVuaXRzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9nZXREZWZhdWx0VW5pdHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2dldERlZmF1bHRVbml0cy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzR2Z4VXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2dmeFV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9nZnhVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzSW1hZ2VyeVV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9pbWFnZXJ5VXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL2ltYWdlcnlVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzTGF5ZXJPcmlnaW5VdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvbGF5ZXJPcmlnaW5VdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvbGF5ZXJPcmlnaW5VdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzTGF5ZXJzRWZmZWN0c0pzb25VdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvbGF5ZXJzRWZmZWN0c0pzb25VdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvbGF5ZXJzRWZmZWN0c0pzb25VdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzUHJldmlld1N5bWJvbDJEKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9wcmV2aWV3U3ltYm9sMkRcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL3ByZXZpZXdTeW1ib2wyRC5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzUmVhY3RpdmVVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvcmVhY3RpdmVVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvcmVhY3RpdmVVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzU2FuaXRpemVyVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL3Nhbml0aXplclV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9zYW5pdGl6ZXJVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzU2VsZWN0aW9uT3BlcmF0aW9uKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9TZWxlY3Rpb25PcGVyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL1NlbGVjdGlvbk9wZXJhdGlvbi5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzU2tldGNoVG9vbHRpcENvbnRyb2xzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9Ta2V0Y2hUb29sdGlwQ29udHJvbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL1NrZXRjaFRvb2x0aXBDb250cm9scy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzU3RyaW5nVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL3N0cmluZ1V0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9zdHJpbmdVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzU3R5bGVVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvc3R5bGVVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvc3R5bGVVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzU3ZnVXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL3N2Z1V0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy9zdmdVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzVmlld1V0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvQ29tcG9uZW50cy92aWV3VXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9Db21wb25lbnRzL3ZpZXdVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzV2ViU3R5bGVTeW1ib2xVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvd2ViU3R5bGVTeW1ib2xVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYXBwbGljYXRpb25zL0NvbXBvbmVudHMvd2ViU3R5bGVTeW1ib2xVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNFeHBlcmllbmNlQnVpbGRlclNrZXRjaFV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvRXhwZXJpZW5jZUJ1aWxkZXIvc2tldGNoVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9FeHBlcmllbmNlQnVpbGRlci9za2V0Y2hVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNNYXBWaWV3ZXJUZW1wbGF0ZVV0aWxzKCkge1xuICBpZiAoaXNBTUQpIHtcbiAgICByZXR1cm4gYXdhaXQgd2luZG93LiRhcmNnaXMuaW1wb3J0KFwiZXNyaS9hcHBsaWNhdGlvbnMvTWFwVmlld2VyL3RlbXBsYXRlVXRpbHNcIik7XG4gIH1cbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGFyY2dpcy9jb3JlL2FwcGxpY2F0aW9ucy9NYXBWaWV3ZXIvdGVtcGxhdGVVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNTY2VuZVZpZXdlckRldkVudmlyb25tZW50VXRpbHMoKSB7XG4gIGlmIChpc0FNRCkge1xuICAgIHJldHVybiBhd2FpdCB3aW5kb3cuJGFyY2dpcy5pbXBvcnQoXCJlc3JpL2FwcGxpY2F0aW9ucy9TY2VuZVZpZXdlci9kZXZFbnZpcm9ubWVudFV0aWxzXCIpO1xuICB9XG4gIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydChcIkBhcmNnaXMvY29yZS9hcHBsaWNhdGlvbnMvU2NlbmVWaWV3ZXIvZGV2RW52aXJvbm1lbnRVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5hc3luYyBmdW5jdGlvbiBpbXBvcnRBcHBsaWNhdGlvbnNXZWJFZGl0b3JTa2V0Y2hVdGlscygpIHtcbiAgaWYgKGlzQU1EKSB7XG4gICAgcmV0dXJuIGF3YWl0IHdpbmRvdy4kYXJjZ2lzLmltcG9ydChcImVzcmkvYXBwbGljYXRpb25zL1dlYkVkaXRvci9za2V0Y2hVdGlsc1wiKTtcbiAgfVxuICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAYXJjZ2lzL2NvcmUvYXBwbGljYXRpb25zL1dlYkVkaXRvci9za2V0Y2hVdGlscy5qc1wiKTtcbiAgcmV0dXJuIGlzRGVmYXVsdE1vZHVsZShtb2R1bGUpID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5leHBvcnQge1xuICBpbXBvcnRBbmFseXNpc0FuYWx5c2lzLFxuICBpbXBvcnRBbmFseXNpc0FyZWFNZWFzdXJlbWVudEFuYWx5c2lzLFxuICBpbXBvcnRBbmFseXNpc0RpbWVuc2lvbkFuYWx5c2lzLFxuICBpbXBvcnRBbmFseXNpc0RpbWVuc2lvblNpbXBsZVN0eWxlLFxuICBpbXBvcnRBbmFseXNpc0RpcmVjdExpbmVNZWFzdXJlbWVudEFuYWx5c2lzLFxuICBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVBbmFseXNpcyxcbiAgaW1wb3J0QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUdyb3VuZExpbmUsXG4gIGltcG9ydEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVJbnB1dExpbmUsXG4gIGltcG9ydEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lLFxuICBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUNoYXJ0T3B0aW9ucyxcbiAgaW1wb3J0QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUxpbmVWaWV3T3B0aW9ucyxcbiAgaW1wb3J0QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVF1ZXJ5TGluZSxcbiAgaW1wb3J0QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVNjZW5lTGluZSxcbiAgaW1wb3J0QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVVuaXRzLFxuICBpbXBvcnRBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlVmlld09wdGlvbnMsXG4gIGltcG9ydEFuYWx5c2lzTGVuZ3RoRGltZW5zaW9uLFxuICBpbXBvcnRBbmFseXNpc0xpbmVPZlNpZ2h0QW5hbHlzaXMsXG4gIGltcG9ydEFuYWx5c2lzTGluZU9mU2lnaHRBbmFseXNpc09ic2VydmVyLFxuICBpbXBvcnRBbmFseXNpc0xpbmVPZlNpZ2h0QW5hbHlzaXNUYXJnZXQsXG4gIGltcG9ydEFuYWx5c2lzU2xpY2VBbmFseXNpcyxcbiAgaW1wb3J0QW5hbHlzaXNTbGljZVBsYW5lLFxuICBpbXBvcnRBbmFseXNpc1N1cHBvcnRBbmFseXNpc09yaWdpbldlYlNjZW5lLFxuICBpbXBvcnRBbmFseXNpc1ZpZXdzaGVkLFxuICBpbXBvcnRBbmFseXNpc1ZpZXdzaGVkQW5hbHlzaXMsXG4gIGltcG9ydEFuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRBbmFseXNpcyxcbiAgaW1wb3J0QW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudFZvbHVtZU1lYXN1cmVtZW50Q3V0RmlsbE9wdGlvbnMsXG4gIGltcG9ydEFuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRWb2x1bWVNZWFzdXJlbWVudERpc3BsYXlVbml0cyxcbiAgaW1wb3J0QW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudFZvbHVtZU1lYXN1cmVtZW50SW5wdXRVbml0cyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c0FjdGlvblV0aWxzLFxuICBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzQW5hbHlzaXNVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c0FyY2FkZUZlYXR1cmVVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c0Jhc2VtYXBVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c0RyYXdVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c0ZlYXR1cmVVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c0ZvbnRVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c0Zvcm1hdFV0aWxzLFxuICBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzR2V0RGVmYXVsdFVuaXRzLFxuICBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzR2Z4VXRpbHMsXG4gIGltcG9ydEFwcGxpY2F0aW9uc0NvbXBvbmVudHNJbWFnZXJ5VXRpbHMsXG4gIGltcG9ydEFwcGxpY2F0aW9uc0NvbXBvbmVudHNMYXllck9yaWdpblV0aWxzLFxuICBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzTGF5ZXJzRWZmZWN0c0pzb25VdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c1ByZXZpZXdTeW1ib2wyRCxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c1JlYWN0aXZlVXRpbHMsXG4gIGltcG9ydEFwcGxpY2F0aW9uc0NvbXBvbmVudHNTYW5pdGl6ZXJVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c1NlbGVjdGlvbk9wZXJhdGlvbixcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c1NrZXRjaFRvb2x0aXBDb250cm9scyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c1N0cmluZ1V0aWxzLFxuICBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzU3R5bGVVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zQ29tcG9uZW50c1N2Z1V0aWxzLFxuICBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzVmlld1V0aWxzLFxuICBpbXBvcnRBcHBsaWNhdGlvbnNDb21wb25lbnRzV2ViU3R5bGVTeW1ib2xVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zRXhwZXJpZW5jZUJ1aWxkZXJTa2V0Y2hVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zTWFwVmlld2VyVGVtcGxhdGVVdGlscyxcbiAgaW1wb3J0QXBwbGljYXRpb25zU2NlbmVWaWV3ZXJEZXZFbnZpcm9ubWVudFV0aWxzLFxuICBpbXBvcnRBcHBsaWNhdGlvbnNXZWJFZGl0b3JTa2V0Y2hVdGlscyxcbiAgaW1wb3J0QXJjYWRlLFxuICBpbXBvcnRBdHRyaWJ1dGVCaW5zR3JhcGhpYyxcbiAgaW1wb3J0QmFzZW1hcCxcbiAgaW1wb3J0Q2FtZXJhLFxuICBpbXBvcnRDYW1lcmFMYXlvdXQsXG4gIGltcG9ydENvbG9yLFxuICBpbXBvcnRDb25maWcsXG4gIGltcG9ydENvcmVBY2Nlc3NvcixcbiAgaW1wb3J0Q29yZUFjY2Vzc29yU3VwcG9ydERlY29yYXRvcnMsXG4gIGltcG9ydENvcmVDb2xsZWN0aW9uLFxuICBpbXBvcnRDb3JlRXJyb3IsXG4gIGltcG9ydENvcmVIYW5kbGVzLFxuICBpbXBvcnRDb3JlTGFuZyxcbiAgaW1wb3J0Q29yZVByb21pc2VVdGlscyxcbiAgaW1wb3J0Q29yZVJlYWN0aXZlVXRpbHMsXG4gIGltcG9ydENvcmVTY2hlZHVsaW5nLFxuICBpbXBvcnRDb3JlU3FsLFxuICBpbXBvcnRDb3JlU3FsV2hlcmVDbGF1c2UsXG4gIGltcG9ydENvcmVVcmxVdGlscyxcbiAgaW1wb3J0Q29yZVdvcmtlcnMsXG4gIGltcG9ydENvcmVXb3JrZXJzQ29ubmVjdGlvbixcbiAgaW1wb3J0RWRpdGluZ1NoYXJlZFRlbXBsYXRlc1NoYXJlZFRlbXBsYXRlLFxuICBpbXBvcnRFZGl0aW5nU2hhcmVkVGVtcGxhdGVzU2hhcmVkVGVtcGxhdGVNZXRhZGF0YSxcbiAgaW1wb3J0RWZmZWN0c0ZvY3VzQXJlYSxcbiAgaW1wb3J0RWZmZWN0c0ZvY3VzQXJlYU91dGxpbmUsXG4gIGltcG9ydEVmZmVjdHNGb2N1c0FyZWFzLFxuICBpbXBvcnRGb3JtRWxlbWVudHMsXG4gIGltcG9ydEZvcm1FbGVtZW50c0F0dGFjaG1lbnRFbGVtZW50LFxuICBpbXBvcnRGb3JtRWxlbWVudHNFbGVtZW50LFxuICBpbXBvcnRGb3JtRWxlbWVudHNGaWVsZEVsZW1lbnQsXG4gIGltcG9ydEZvcm1FbGVtZW50c0dyb3VwRWxlbWVudCxcbiAgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzLFxuICBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c0F0dGFjaG1lbnRJbnB1dCxcbiAgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzQXR0YWNobWVudHNBdWRpb0lucHV0LFxuICBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c0RvY3VtZW50SW5wdXQsXG4gIGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzSW1hZ2VJbnB1dCxcbiAgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzQXR0YWNobWVudHNTaWduYXR1cmVJbnB1dCxcbiAgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzQXR0YWNobWVudHNWaWRlb0lucHV0LFxuICBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNCYXJjb2RlU2Nhbm5lcklucHV0LFxuICBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNDb21ib0JveElucHV0LFxuICBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNEYXRlUGlja2VySW5wdXQsXG4gIGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0RhdGVUaW1lT2Zmc2V0UGlja2VySW5wdXQsXG4gIGltcG9ydEZvcm1FbGVtZW50c0lucHV0c0RhdGVUaW1lUGlja2VySW5wdXQsXG4gIGltcG9ydEZvcm1FbGVtZW50c0lucHV0c1JhZGlvQnV0dG9uc0lucHV0LFxuICBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNTd2l0Y2hJbnB1dCxcbiAgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzVGV4dEFyZWFJbnB1dCxcbiAgaW1wb3J0Rm9ybUVsZW1lbnRzSW5wdXRzVGV4dEJveElucHV0LFxuICBpbXBvcnRGb3JtRWxlbWVudHNJbnB1dHNUaW1lUGlja2VySW5wdXQsXG4gIGltcG9ydEZvcm1FbGVtZW50c1JlbGF0aW9uc2hpcEVsZW1lbnQsXG4gIGltcG9ydEZvcm1FbGVtZW50c1RleHRFbGVtZW50LFxuICBpbXBvcnRGb3JtRWxlbWVudHNVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uc0VsZW1lbnQsXG4gIGltcG9ydEZvcm1FeHByZXNzaW9uSW5mbyxcbiAgaW1wb3J0Rm9ybUZvcm1UZW1wbGF0ZSxcbiAgaW1wb3J0R2VvbWV0cnksXG4gIGltcG9ydEdlb21ldHJ5Q2lyY2xlLFxuICBpbXBvcnRHZW9tZXRyeUNvb3JkaW5hdGVGb3JtYXR0ZXIsXG4gIGltcG9ydEdlb21ldHJ5RXh0ZW50LFxuICBpbXBvcnRHZW9tZXRyeUdlb21ldHJ5LFxuICBpbXBvcnRHZW9tZXRyeUdlb21ldHJ5RW5naW5lLFxuICBpbXBvcnRHZW9tZXRyeUdlb21ldHJ5RW5naW5lQXN5bmMsXG4gIGltcG9ydEdlb21ldHJ5SGVpZ2h0TW9kZWxJbmZvLFxuICBpbXBvcnRHZW9tZXRyeU1lc2gsXG4gIGltcG9ydEdlb21ldHJ5TXVsdGlwb2ludCxcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNBZmZpbmVUcmFuc2Zvcm1PcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNBbHBoYVNoYXBlT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzQXJlYU9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0F1dG9Db21wbGV0ZU9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0JvdW5kYXJ5T3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzQnVmZmVyT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzQ2VudHJvaWRPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNDbGlwT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzQ29udGFpbnNPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNDb252ZXhIdWxsT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzQ3Jvc3Nlc09wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0N1dE9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0RlbnNpZnlPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNEaWZmZXJlbmNlT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzRGlzam9pbnRPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNEaXN0YW5jZU9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0VxdWFsc09wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0V4dGVuZE9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0dlbmVyYWxpemVPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNHZW9kZXNpY0J1ZmZlck9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0dlb2Rlc2ljUHJveGltaXR5T3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzR2VvZGV0aWNBcmVhT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzR2VvZGV0aWNEZW5zaWZ5T3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzR2VvZGV0aWNEaXN0YW5jZU9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0dlb2RldGljTGVuZ3RoT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzR2VvZGV0aWNVdGlsc09wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0dyYXBoaWNCdWZmZXJPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNJbnRlZ3JhdGVPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNJbnRlcnNlY3Rpb25PcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNJbnRlcnNlY3RzT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzSXNOZWFyT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzTGFiZWxQb2ludE9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0xlbmd0aE9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0xpbmVzVG9Qb2x5Z29uc09wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc0xvY2F0ZUJldHdlZW5PcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNNaW5pbXVtQm91bmRpbmdDaXJjbGVPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNNdWx0aVBhcnRUb1NpbmdsZVBhcnRPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNPZmZzZXRPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNPdmVybGFwc09wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc1BvbHlnb25PdmVybGF5T3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzUG9seWdvblNsaWNlck9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc1Byb2plY3RPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNQcm94aW1pdHlPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNSZWxhdGVPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNSZXNoYXBlT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzU2hhcGVQcmVzZXJ2aW5nUHJvamVjdE9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc1NpbXBsaWZ5T0dDT3BlcmF0b3IsXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzU2ltcGxpZnlPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNTdXBwb3J0R2VvZ3JhcGhpY1RyYW5zZm9ybWF0aW9uLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc1N1cHBvcnRHZW9ncmFwaGljVHJhbnNmb3JtYXRpb25TdGVwLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc1N1cHBvcnRHZW9ncmFwaGljVHJhbnNmb3JtYXRpb25VdGlscyxcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNTdXBwb3J0VHJhbnNmb3JtYXRpb24sXG4gIGltcG9ydEdlb21ldHJ5T3BlcmF0b3JzU3ltbWV0cmljRGlmZmVyZW5jZU9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc1RvdWNoZXNPcGVyYXRvcixcbiAgaW1wb3J0R2VvbWV0cnlPcGVyYXRvcnNVbmlvbk9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeU9wZXJhdG9yc1dpdGhpbk9wZXJhdG9yLFxuICBpbXBvcnRHZW9tZXRyeVBvaW50LFxuICBpbXBvcnRHZW9tZXRyeVBvbHlnb24sXG4gIGltcG9ydEdlb21ldHJ5UG9seWxpbmUsXG4gIGltcG9ydEdlb21ldHJ5UHJvamVjdGlvbixcbiAgaW1wb3J0R2VvbWV0cnlTcGF0aWFsUmVmZXJlbmNlLFxuICBpbXBvcnRHZW9tZXRyeVN1cHBvcnRHZW9kZXNpY1V0aWxzLFxuICBpbXBvcnRHZW9tZXRyeVN1cHBvcnRHZW9ncmFwaGljVHJhbnNmb3JtYXRpb24sXG4gIGltcG9ydEdlb21ldHJ5U3VwcG9ydEdlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvblN0ZXAsXG4gIGltcG9ydEdlb21ldHJ5U3VwcG9ydEpzb25VdGlscyxcbiAgaW1wb3J0R2VvbWV0cnlTdXBwb3J0TWVzaENvbXBvbmVudCxcbiAgaW1wb3J0R2VvbWV0cnlTdXBwb3J0TWVzaEdlb3JlZmVyZW5jZWRWZXJ0ZXhTcGFjZSxcbiAgaW1wb3J0R2VvbWV0cnlTdXBwb3J0TWVzaExvY2FsVmVydGV4U3BhY2UsXG4gIGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hNYXRlcmlhbCxcbiAgaW1wb3J0R2VvbWV0cnlTdXBwb3J0TWVzaE1hdGVyaWFsTWV0YWxsaWNSb3VnaG5lc3MsXG4gIGltcG9ydEdlb21ldHJ5U3VwcG9ydE1lc2hUZXh0dXJlLFxuICBpbXBvcnRHZW9tZXRyeVN1cHBvcnRNZXNoVGV4dHVyZVRyYW5zZm9ybSxcbiAgaW1wb3J0R2VvbWV0cnlTdXBwb3J0TWVzaFRyYW5zZm9ybSxcbiAgaW1wb3J0R2VvbWV0cnlTdXBwb3J0TWVzaFV0aWxzLFxuICBpbXBvcnRHZW9tZXRyeVN1cHBvcnROb3JtYWxpemVVdGlscyxcbiAgaW1wb3J0R2VvbWV0cnlTdXBwb3J0V2ViTWVyY2F0b3JVdGlscyxcbiAgaW1wb3J0R3JhcGhpYyxcbiAgaW1wb3J0R3JhcGhpY0dyYXBoaWNPcmlnaW4sXG4gIGltcG9ydEdyYXBoaWNWZWN0b3JUaWxlR3JhcGhpY09yaWdpbixcbiAgaW1wb3J0R3JvdW5kLFxuICBpbXBvcnRJZGVudGl0eUNyZWRlbnRpYWwsXG4gIGltcG9ydElkZW50aXR5SWRlbnRpdHlNYW5hZ2VyLFxuICBpbXBvcnRJZGVudGl0eU9BdXRoSW5mbyxcbiAgaW1wb3J0SWRlbnRpdHlTZXJ2ZXJJbmZvLFxuICBpbXBvcnRJbnRsLFxuICBpbXBvcnRLZXJuZWwsXG4gIGltcG9ydExheWVyc0Jhc2VEeW5hbWljTGF5ZXIsXG4gIGltcG9ydExheWVyc0Jhc2VFbGV2YXRpb25MYXllcixcbiAgaW1wb3J0TGF5ZXJzQmFzZVRpbGVMYXllcixcbiAgaW1wb3J0TGF5ZXJzQmluZ01hcHNMYXllcixcbiAgaW1wb3J0TGF5ZXJzQnVpbGRpbmdTY2VuZUxheWVyLFxuICBpbXBvcnRMYXllcnNCdWlsZGluZ1N1YmxheWVyc0J1aWxkaW5nQ29tcG9uZW50U3VibGF5ZXIsXG4gIGltcG9ydExheWVyc0J1aWxkaW5nU3VibGF5ZXJzQnVpbGRpbmdHcm91cFN1YmxheWVyLFxuICBpbXBvcnRMYXllcnNCdWlsZGluZ1N1YmxheWVyc0J1aWxkaW5nU3VibGF5ZXIsXG4gIGltcG9ydExheWVyc0NTVkxheWVyLFxuICBpbXBvcnRMYXllcnNDYXRhbG9nQ2F0YWxvZ0R5bmFtaWNHcm91cExheWVyLFxuICBpbXBvcnRMYXllcnNDYXRhbG9nQ2F0YWxvZ0Zvb3RwcmludExheWVyLFxuICBpbXBvcnRMYXllcnNDYXRhbG9nQ2F0YWxvZ1V0aWxzLFxuICBpbXBvcnRMYXllcnNDYXRhbG9nTGF5ZXIsXG4gIGltcG9ydExheWVyc0RpbWVuc2lvbkxheWVyLFxuICBpbXBvcnRMYXllcnNFbGV2YXRpb25MYXllcixcbiAgaW1wb3J0TGF5ZXJzRmVhdHVyZUxheWVyLFxuICBpbXBvcnRMYXllcnNHZW9KU09OTGF5ZXIsXG4gIGltcG9ydExheWVyc0dlb1JTU0xheWVyLFxuICBpbXBvcnRMYXllcnNHcmFwaGljc0xheWVyLFxuICBpbXBvcnRMYXllcnNHcm91cExheWVyLFxuICBpbXBvcnRMYXllcnNJbWFnZXJ5TGF5ZXIsXG4gIGltcG9ydExheWVyc0ltYWdlcnlUaWxlTGF5ZXIsXG4gIGltcG9ydExheWVyc0ludGVncmF0ZWRNZXNoM0RUaWxlc0xheWVyLFxuICBpbXBvcnRMYXllcnNJbnRlZ3JhdGVkTWVzaExheWVyLFxuICBpbXBvcnRMYXllcnNLTUxMYXllcixcbiAgaW1wb3J0TGF5ZXJzS25vd2xlZGdlR3JhcGhLbm93bGVkZ2VHcmFwaFN1YmxheWVyLFxuICBpbXBvcnRMYXllcnNLbm93bGVkZ2VHcmFwaExheWVyLFxuICBpbXBvcnRMYXllcnNMYXllcixcbiAgaW1wb3J0TGF5ZXJzTGluZU9mU2lnaHRMYXllcixcbiAgaW1wb3J0TGF5ZXJzTGlua0NoYXJ0TGF5ZXIsXG4gIGltcG9ydExheWVyc01hcEltYWdlTGF5ZXIsXG4gIGltcG9ydExheWVyc01hcE5vdGVzTGF5ZXIsXG4gIGltcG9ydExheWVyc01lZGlhTGF5ZXIsXG4gIGltcG9ydExheWVyc09HQ0ZlYXR1cmVMYXllcixcbiAgaW1wb3J0TGF5ZXJzT2djV2NzVXRpbHMsXG4gIGltcG9ydExheWVyc09nY1dmc1V0aWxzLFxuICBpbXBvcnRMYXllcnNPcGVuU3RyZWV0TWFwTGF5ZXIsXG4gIGltcG9ydExheWVyc09yaWVudGVkSW1hZ2VyeUxheWVyLFxuICBpbXBvcnRMYXllcnNPcmllbnRlZEltYWdlcnlUcmFuc2Zvcm1hdGlvbnNJbWFnZVRvV29ybGQsXG4gIGltcG9ydExheWVyc09yaWVudGVkSW1hZ2VyeVRyYW5zZm9ybWF0aW9uc1dvcmxkVG9JbWFnZSxcbiAgaW1wb3J0TGF5ZXJzUGFycXVldExheWVyLFxuICBpbXBvcnRMYXllcnNQb2ludENsb3VkRmlsdGVyc1BvaW50Q2xvdWRCaXRmaWVsZEZpbHRlcixcbiAgaW1wb3J0TGF5ZXJzUG9pbnRDbG91ZEZpbHRlcnNQb2ludENsb3VkRmlsdGVyLFxuICBpbXBvcnRMYXllcnNQb2ludENsb3VkRmlsdGVyc1BvaW50Q2xvdWRSZXR1cm5GaWx0ZXIsXG4gIGltcG9ydExheWVyc1BvaW50Q2xvdWRGaWx0ZXJzUG9pbnRDbG91ZFZhbHVlRmlsdGVyLFxuICBpbXBvcnRMYXllcnNQb2ludENsb3VkTGF5ZXIsXG4gIGltcG9ydExheWVyc1JvdXRlTGF5ZXIsXG4gIGltcG9ydExheWVyc1NjZW5lTGF5ZXIsXG4gIGltcG9ydExheWVyc1N0cmVhbUxheWVyLFxuICBpbXBvcnRMYXllcnNTdWJ0eXBlR3JvdXBMYXllcixcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEFnZ3JlZ2F0ZUZpZWxkLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0QXJjYWRlVXRpbHMsXG4gIGltcG9ydExheWVyc1N1cHBvcnRCdWlsZGluZ0ZpbHRlcixcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEJ1aWxkaW5nU3VtbWFyeVN0YXRpc3RpY3MsXG4gIGltcG9ydExheWVyc1N1cHBvcnRDb2RlZFZhbHVlRG9tYWluLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0Q29udHJvbFBvaW50c0dlb3JlZmVyZW5jZSxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydENvcm5lcnNHZW9yZWZlcmVuY2UsXG4gIGltcG9ydExheWVyc1N1cHBvcnRDc3ZVdGlscyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydERpbWVuc2lvbmFsRGVmaW5pdGlvbixcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydERpc3BsYXlGaWx0ZXIsXG4gIGltcG9ydExheWVyc1N1cHBvcnREaXNwbGF5RmlsdGVySW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydERvbWFpbixcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEVsZXZhdGlvblNhbXBsZXIsXG4gIGltcG9ydExheWVyc1N1cHBvcnRFeHByZXNzaW9uSW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEV4dGVudEFuZFJvdGF0aW9uR2VvcmVmZXJlbmNlLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0RmFjaWxpdHlMYXllckluZm8sXG4gIGltcG9ydExheWVyc1N1cHBvcnRGZWF0dXJlRWZmZWN0LFxuICBpbXBvcnRMYXllcnNTdXBwb3J0RmVhdHVyZUZpbHRlcixcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEZlYXR1cmVSZWR1Y3Rpb25CaW5uaW5nLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0RmVhdHVyZVJlZHVjdGlvbkNsdXN0ZXIsXG4gIGltcG9ydExheWVyc1N1cHBvcnRGZWF0dXJlUmVkdWN0aW9uU2VsZWN0aW9uLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0RmVhdHVyZVRlbXBsYXRlLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0RmVhdHVyZVR5cGUsXG4gIGltcG9ydExheWVyc1N1cHBvcnRGaWVsZCxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEZpZWxkVXRpbHMsXG4gIGltcG9ydExheWVyc1N1cHBvcnRGaWVsZHNJbmRleCxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEdlb21ldHJ5RmllbGRzSW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEltYWdlRWxlbWVudCxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEluaGVyaXRlZERvbWFpbixcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydEtNTFN1YmxheWVyLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0TE9ELFxuICBpbXBvcnRMYXllcnNTdXBwb3J0TGFiZWxDbGFzcyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydExheWVyRmxvb3JJbmZvLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0TGV2ZWxMYXllckluZm8sXG4gIGltcG9ydExheWVyc1N1cHBvcnRMb2NhbE1lZGlhRWxlbWVudFNvdXJjZSxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydE1hcEltYWdlLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0TW9zYWljUnVsZSxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydE11bHRpZGltZW5zaW9uYWxTdWJzZXQsXG4gIGltcG9ydExheWVyc1N1cHBvcnRPcmRlckJ5SW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFBhcnF1ZXRFbmNvZGluZ0xvY2F0aW9uLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0UGFycXVldEVuY29kaW5nV2tiLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0UGFycXVldFV0aWxzLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0UGl4ZWxCbG9jayxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFBsYXliYWNrSW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFB1Ymxpc2hpbmdJbmZvLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0UmFuZ2VEb21haW4sXG4gIGltcG9ydExheWVyc1N1cHBvcnRSYXN0ZXJCYW5kSW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFJhc3RlckZ1bmN0aW9uLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0UmFzdGVyRnVuY3Rpb25Db25zdGFudHMsXG4gIGltcG9ydExheWVyc1N1cHBvcnRSYXN0ZXJGdW5jdGlvblV0aWxzLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0UmFzdGVySW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFJhc3RlclNlbnNvckluZm8sXG4gIGltcG9ydExheWVyc1N1cHBvcnRSZWxhdGlvbnNoaXAsXG4gIGltcG9ydExheWVyc1N1cHBvcnRSb3V0ZVN0b3BTeW1ib2xzLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0Um91dGVTeW1ib2xzLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0U2NlbmVGaWx0ZXIsXG4gIGltcG9ydExheWVyc1N1cHBvcnRTY2VuZU1vZGlmaWNhdGlvbixcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFNjZW5lTW9kaWZpY2F0aW9ucyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFNpdGVMYXllckluZm8sXG4gIGltcG9ydExheWVyc1N1cHBvcnRTdHJlYW1Db25uZWN0aW9uLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0U3VibGF5ZXIsXG4gIGltcG9ydExheWVyc1N1cHBvcnRTdWJ0eXBlLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0U3VidHlwZVN1YmxheWVyLFxuICBpbXBvcnRMYXllcnNTdXBwb3J0VGVsZW1ldHJ5RGF0YSxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFRlbGVtZXRyeURpc3BsYXksXG4gIGltcG9ydExheWVyc1N1cHBvcnRUaWxlSW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFRpbGVNYXRyaXhTZXQsXG4gIGltcG9ydExheWVyc1N1cHBvcnRUaW1lSW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFRyYWNrSW5mbyxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFRyYWNrUGFydEluZm8sXG4gIGltcG9ydExheWVyc1N1cHBvcnRWaWRlb0VsZW1lbnQsXG4gIGltcG9ydExheWVyc1N1cHBvcnRWaWRlb1RpbWVFeHRlbnQsXG4gIGltcG9ydExheWVyc1N1cHBvcnRXTVNTdWJsYXllcixcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFdNVFNTdHlsZSxcbiAgaW1wb3J0TGF5ZXJzU3VwcG9ydFdNVFNTdWJsYXllcixcbiAgaW1wb3J0TGF5ZXJzVGlsZUxheWVyLFxuICBpbXBvcnRMYXllcnNVbmtub3duTGF5ZXIsXG4gIGltcG9ydExheWVyc1Vuc3VwcG9ydGVkTGF5ZXIsXG4gIGltcG9ydExheWVyc1ZlY3RvclRpbGVMYXllcixcbiAgaW1wb3J0TGF5ZXJzVmlkZW9MYXllcixcbiAgaW1wb3J0TGF5ZXJzVmlld3NoZWRMYXllcixcbiAgaW1wb3J0TGF5ZXJzVm94ZWxMYXllcixcbiAgaW1wb3J0TGF5ZXJzVm94ZWxWb3hlbER5bmFtaWNTZWN0aW9uLFxuICBpbXBvcnRMYXllcnNWb3hlbFZveGVsU2xpY2UsXG4gIGltcG9ydExheWVyc1ZveGVsVm94ZWxUcmFuc2ZlckZ1bmN0aW9uU3R5bGUsXG4gIGltcG9ydExheWVyc1ZveGVsVm94ZWxWYXJpYWJsZSxcbiAgaW1wb3J0TGF5ZXJzVm94ZWxWb3hlbFZhcmlhYmxlU3R5bGUsXG4gIGltcG9ydExheWVyc1ZveGVsVm94ZWxWb2x1bWUsXG4gIGltcG9ydExheWVyc1ZveGVsVm94ZWxWb2x1bWVTdHlsZSxcbiAgaW1wb3J0TGF5ZXJzV0NTTGF5ZXIsXG4gIGltcG9ydExheWVyc1dGU0xheWVyLFxuICBpbXBvcnRMYXllcnNXTVNMYXllcixcbiAgaW1wb3J0TGF5ZXJzV01UU0xheWVyLFxuICBpbXBvcnRMYXllcnNXZWJUaWxlTGF5ZXIsXG4gIGltcG9ydExpbmtDaGFydENocm9ub2xvZ2ljYWxMYXlvdXRTZXR0aW5ncyxcbiAgaW1wb3J0TGlua0NoYXJ0TGF5b3V0U2V0dGluZ3MsXG4gIGltcG9ydExpbmtDaGFydExpbmtDaGFydFByb3BlcnRpZXMsXG4gIGltcG9ydExpbmtDaGFydE5vbnNwYXRpYWxEYXRhRGlzcGxheSxcbiAgaW1wb3J0TGlua0NoYXJ0T3JnYW5pY0xheW91dFNldHRpbmdzLFxuICBpbXBvcnRNYXAsXG4gIGltcG9ydE5ldHdvcmtzTmV0d29yayxcbiAgaW1wb3J0TmV0d29ya3NTdXBwb3J0TmFtZWRUcmFjZUNvbmZpZ3VyYXRpb24sXG4gIGltcG9ydE5ldHdvcmtzU3VwcG9ydE5ldHdvcmtTeXN0ZW1MYXllcnMsXG4gIGltcG9ydE5ldHdvcmtzU3VwcG9ydFRlcm1pbmFsLFxuICBpbXBvcnROZXR3b3Jrc1N1cHBvcnRUZXJtaW5hbENvbmZpZ3VyYXRpb24sXG4gIGltcG9ydE5ldHdvcmtzU3VwcG9ydFRvcG9sb2d5VmFsaWRhdGlvbkpvYkluZm8sXG4gIGltcG9ydE5ldHdvcmtzU3VwcG9ydFRyYWNlQ29uZmlndXJhdGlvbixcbiAgaW1wb3J0TmV0d29ya3NTdXBwb3J0VHJhY2VKb2JJbmZvLFxuICBpbXBvcnROZXR3b3Jrc1N1cHBvcnRVTlRyYWNlQ29uZmlndXJhdGlvbixcbiAgaW1wb3J0TmV0d29ya3NVdGlsaXR5TmV0d29yayxcbiAgaW1wb3J0UG9pbnRDbG91ZFJlbmRlcmVycyxcbiAgaW1wb3J0UG9wdXBDb250ZW50LFxuICBpbXBvcnRQb3B1cENvbnRlbnRBdHRhY2htZW50c0NvbnRlbnQsXG4gIGltcG9ydFBvcHVwQ29udGVudEJhckNoYXJ0TWVkaWFJbmZvLFxuICBpbXBvcnRQb3B1cENvbnRlbnRDb2x1bW5DaGFydE1lZGlhSW5mbyxcbiAgaW1wb3J0UG9wdXBDb250ZW50Q29udGVudCxcbiAgaW1wb3J0UG9wdXBDb250ZW50Q3VzdG9tQ29udGVudCxcbiAgaW1wb3J0UG9wdXBDb250ZW50RXhwcmVzc2lvbkNvbnRlbnQsXG4gIGltcG9ydFBvcHVwQ29udGVudEZpZWxkc0NvbnRlbnQsXG4gIGltcG9ydFBvcHVwQ29udGVudEltYWdlTWVkaWFJbmZvLFxuICBpbXBvcnRQb3B1cENvbnRlbnRMaW5lQ2hhcnRNZWRpYUluZm8sXG4gIGltcG9ydFBvcHVwQ29udGVudE1lZGlhQ29udGVudCxcbiAgaW1wb3J0UG9wdXBDb250ZW50UGllQ2hhcnRNZWRpYUluZm8sXG4gIGltcG9ydFBvcHVwQ29udGVudFJlbGF0aW9uc2hpcENvbnRlbnQsXG4gIGltcG9ydFBvcHVwQ29udGVudFN1cHBvcnRDaGFydE1lZGlhSW5mb1ZhbHVlLFxuICBpbXBvcnRQb3B1cENvbnRlbnRTdXBwb3J0Q2hhcnRNZWRpYUluZm9WYWx1ZVNlcmllcyxcbiAgaW1wb3J0UG9wdXBDb250ZW50U3VwcG9ydEltYWdlTWVkaWFJbmZvVmFsdWUsXG4gIGltcG9ydFBvcHVwQ29udGVudFRleHRDb250ZW50LFxuICBpbXBvcnRQb3B1cENvbnRlbnRVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uc0NvbnRlbnQsXG4gIGltcG9ydFBvcHVwRWxlbWVudEV4cHJlc3Npb25JbmZvLFxuICBpbXBvcnRQb3B1cEV4cHJlc3Npb25JbmZvLFxuICBpbXBvcnRQb3B1cEZpZWxkSW5mbyxcbiAgaW1wb3J0UG9wdXBMYXllck9wdGlvbnMsXG4gIGltcG9ydFBvcHVwUmVsYXRlZFJlY29yZHNJbmZvLFxuICBpbXBvcnRQb3B1cFN1cHBvcnRBdHRhY2htZW50c09yZGVyQnlJbmZvLFxuICBpbXBvcnRQb3B1cFN1cHBvcnRGaWVsZEluZm9Gb3JtYXQsXG4gIGltcG9ydFBvcHVwU3VwcG9ydFJlbGF0ZWRSZWNvcmRzSW5mb0ZpZWxkT3JkZXIsXG4gIGltcG9ydFBvcHVwU3VwcG9ydFV0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25UeXBlLFxuICBpbXBvcnRQb3B1cFRlbXBsYXRlLFxuICBpbXBvcnRQb3J0YWxQb3J0YWwsXG4gIGltcG9ydFBvcnRhbFBvcnRhbEZvbGRlcixcbiAgaW1wb3J0UG9ydGFsUG9ydGFsR3JvdXAsXG4gIGltcG9ydFBvcnRhbFBvcnRhbEl0ZW0sXG4gIGltcG9ydFBvcnRhbFBvcnRhbEl0ZW1SZXNvdXJjZSxcbiAgaW1wb3J0UG9ydGFsUG9ydGFsUXVlcnlQYXJhbXMsXG4gIGltcG9ydFBvcnRhbFBvcnRhbFF1ZXJ5UmVzdWx0LFxuICBpbXBvcnRQb3J0YWxQb3J0YWxSYXRpbmcsXG4gIGltcG9ydFBvcnRhbFBvcnRhbFVzZXIsXG4gIGltcG9ydFJhc3RlclJlbmRlcmVycyxcbiAgaW1wb3J0UmVuZGVyZXJzLFxuICBpbXBvcnRSZW5kZXJlcnNDbGFzc0JyZWFrc1JlbmRlcmVyLFxuICBpbXBvcnRSZW5kZXJlcnNEaWN0aW9uYXJ5UmVuZGVyZXIsXG4gIGltcG9ydFJlbmRlcmVyc0RvdERlbnNpdHlSZW5kZXJlcixcbiAgaW1wb3J0UmVuZGVyZXJzRmxvd1JlbmRlcmVyLFxuICBpbXBvcnRSZW5kZXJlcnNIZWF0bWFwUmVuZGVyZXIsXG4gIGltcG9ydFJlbmRlcmVyc1BpZUNoYXJ0UmVuZGVyZXIsXG4gIGltcG9ydFJlbmRlcmVyc1BvaW50Q2xvdWRDbGFzc0JyZWFrc1JlbmRlcmVyLFxuICBpbXBvcnRSZW5kZXJlcnNQb2ludENsb3VkUkdCUmVuZGVyZXIsXG4gIGltcG9ydFJlbmRlcmVyc1BvaW50Q2xvdWRSZW5kZXJlcixcbiAgaW1wb3J0UmVuZGVyZXJzUG9pbnRDbG91ZFN0cmV0Y2hSZW5kZXJlcixcbiAgaW1wb3J0UmVuZGVyZXJzUG9pbnRDbG91ZFVuaXF1ZVZhbHVlUmVuZGVyZXIsXG4gIGltcG9ydFJlbmRlcmVyc1Jhc3RlckNvbG9ybWFwUmVuZGVyZXIsXG4gIGltcG9ydFJlbmRlcmVyc1Jhc3RlclNoYWRlZFJlbGllZlJlbmRlcmVyLFxuICBpbXBvcnRSZW5kZXJlcnNSYXN0ZXJTdHJldGNoUmVuZGVyZXIsXG4gIGltcG9ydFJlbmRlcmVyc1JlbmRlcmVyLFxuICBpbXBvcnRSZW5kZXJlcnNTaW1wbGVSZW5kZXJlcixcbiAgaW1wb3J0UmVuZGVyZXJzU3VwcG9ydEF0dHJpYnV0ZUNvbG9ySW5mbyxcbiAgaW1wb3J0UmVuZGVyZXJzU3VwcG9ydEF1dGhvcmluZ0luZm8sXG4gIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRBdXRob3JpbmdJbmZvVmlzdWFsVmFyaWFibGUsXG4gIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRDbGFzc0JyZWFrSW5mbyxcbiAgaW1wb3J0UmVuZGVyZXJzU3VwcG9ydENvbG9ybWFwSW5mbyxcbiAgaW1wb3J0UmVuZGVyZXJzU3VwcG9ydEhlYXRtYXBDb2xvclN0b3AsXG4gIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRKc29uVXRpbHMsXG4gIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRSYXN0ZXJQcmVzZXRSZW5kZXJlcixcbiAgaW1wb3J0UmVuZGVyZXJzU3VwcG9ydFVuaXF1ZVZhbHVlLFxuICBpbXBvcnRSZW5kZXJlcnNTdXBwb3J0VW5pcXVlVmFsdWVDbGFzcyxcbiAgaW1wb3J0UmVuZGVyZXJzU3VwcG9ydFVuaXF1ZVZhbHVlR3JvdXAsXG4gIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRVbmlxdWVWYWx1ZUluZm8sXG4gIGltcG9ydFJlbmRlcmVyc1N1cHBvcnRVdGlscyxcbiAgaW1wb3J0UmVuZGVyZXJzVW5pcXVlVmFsdWVSZW5kZXJlcixcbiAgaW1wb3J0UmVuZGVyZXJzVmVjdG9yRmllbGRSZW5kZXJlcixcbiAgaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzQ29sb3JWYXJpYWJsZSxcbiAgaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzT3BhY2l0eVZhcmlhYmxlLFxuICBpbXBvcnRSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNSb3RhdGlvblZhcmlhYmxlLFxuICBpbXBvcnRSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNTaXplVmFyaWFibGUsXG4gIGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1N1cHBvcnRDb2xvclNpemVTdG9wLFxuICBpbXBvcnRSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNTdXBwb3J0Q29sb3JTdG9wLFxuICBpbXBvcnRSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNTdXBwb3J0T3BhY2l0eVN0b3AsXG4gIGltcG9ydFJlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1N1cHBvcnRTaXplU3RvcCxcbiAgaW1wb3J0UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzVmlzdWFsVmFyaWFibGUsXG4gIGltcG9ydFJlcXVlc3QsXG4gIGltcG9ydFJlc3RDbG9zZXN0RmFjaWxpdHksXG4gIGltcG9ydFJlc3RGZWF0dXJlU2VydmljZUZlYXR1cmVTZXJ2aWNlLFxuICBpbXBvcnRSZXN0RmVhdHVyZVNlcnZpY2VVdGlscyxcbiAgaW1wb3J0UmVzdEZpbmQsXG4gIGltcG9ydFJlc3RHZW9tZXRyeVNlcnZpY2UsXG4gIGltcG9ydFJlc3RHZW9wcm9jZXNzb3IsXG4gIGltcG9ydFJlc3RHZW9wcm9jZXNzb3JHUE9wdGlvbnMsXG4gIGltcG9ydFJlc3RJZGVudGlmeSxcbiAgaW1wb3J0UmVzdEltYWdlU2VydmljZSxcbiAgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoRGF0YU1vZGVsLFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhFbnRpdHksXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEVudGl0eVR5cGUsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEZpZWxkSW5kZXgsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoQWRkRmllbGRJbmRleFJlc3VsdCxcbiAgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhBZGROYW1lZFR5cGVzUmVzdWx0LFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFkZFByb3BlcnR5UmVzdWx0LFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFwcGx5RWRpdHMsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoQXBwbHlFZGl0c1Jlc3VsdCxcbiAgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhEYXRhTW9kZWxPcGVyYXRpb25SZXN1bHQsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoRGVsZXRlRmllbGRJbmRleFJlc3VsdCxcbiAgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhEZWxldGVOYW1lZFR5cGVSZXN1bHQsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoRGVsZXRlUHJvcGVydHlSZXN1bHQsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoTmFtZWRPYmplY3QsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoT2JqZWN0LFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaE9iamVjdFR5cGUsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoUHJvcGVydHksXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoUXVlcnksXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoUXVlcnlSZXN1bHQsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoUXVlcnlSZXN1bHRIZWFkZXIsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoUXVlcnlTdHJlYW1pbmcsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoUXVlcnlTdHJlYW1pbmdSZXN1bHQsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEdyYXBoU2VhcmNoLFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFNlYXJjaFN0cmVhbWluZyxcbiAgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhVcGRhdGVOYW1lZFR5cGVzUmVzdWx0LFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFVwZGF0ZVByb3BlcnR5UmVzdWx0LFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFVwZGF0ZVNlYXJjaEluZGV4UmVzdWx0LFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhJbnB1dFF1YW50aXphdGlvblBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaEtub3dsZWRnZUdyYXBoLFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhPdXRwdXRRdWFudGl6YXRpb25QYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhQYXRoLFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhSZWxhdGlvbnNoaXAsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFJlbGF0aW9uc2hpcFR5cGUsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFNlYXJjaEluZGV4LFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhTZXJ2aWNlLFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhTZXJ2aWNlRGVmaW5pdGlvbixcbiAgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoU291cmNlVHlwZVZhbHVlQmVoYXZpb3IsXG4gIGltcG9ydFJlc3RLbm93bGVkZ2VHcmFwaFRvb2xTZXJ2aWNlRmluZFBhdGhzQ0lNRmlsdGVyZWRGaW5kUGF0aHNDb25maWd1cmF0aW9uLFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhUb29sU2VydmljZUZpbmRQYXRoc0NJTUZpbHRlcmVkRmluZFBhdGhzRW50aXR5LFxuICBpbXBvcnRSZXN0S25vd2xlZGdlR3JhcGhUb29sU2VydmljZUZpbmRQYXRoc0NJTUZpbHRlcmVkRmluZFBhdGhzUGF0aEZpbHRlcixcbiAgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoVG9vbFNlcnZpY2VGaW5kUGF0aHNDSU1LR1RyYXZlcnNhbERpcmVjdGlvbixcbiAgaW1wb3J0UmVzdEtub3dsZWRnZUdyYXBoVG9vbFNlcnZpY2VGaW5kUGF0aHNGaW5kUGF0aHNUb29sU2V0dGluZ3MsXG4gIGltcG9ydFJlc3RMYXN0TWlsZURlbGl2ZXJ5LFxuICBpbXBvcnRSZXN0TG9jYXRvcixcbiAgaW1wb3J0UmVzdE5ldHdvcmtTZXJ2aWNlLFxuICBpbXBvcnRSZXN0TmV0d29ya3NRdWVyeUFzc29jaWF0aW9ucyxcbiAgaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydEFnZ3JlZ2F0ZWRHZW9tZXRyeSxcbiAgaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydEFzc29jaWF0aW9uLFxuICBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0QXNzb2NpYXRpb25HZW9tZXRyaWVzUmVzdWx0LFxuICBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0RnVuY3Rpb25SZXN1bHQsXG4gIGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnROZXR3b3JrRWxlbWVudCxcbiAgaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydFF1ZXJ5QXNzb2NpYXRpb25zUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdE5ldHdvcmtzU3VwcG9ydFF1ZXJ5QXNzb2NpYXRpb25zUmVzdWx0LFxuICBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0U3ludGhlc2l6ZUFzc29jaWF0aW9uR2VvbWV0cmllc1BhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnRUcmFjZUxvY2F0aW9uLFxuICBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0VHJhY2VQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0TmV0d29ya3NTdXBwb3J0VHJhY2VSZXN1bHQsXG4gIGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnRWYWxpZGF0ZU5ldHdvcmtUb3BvbG9neVBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3ROZXR3b3Jrc1N1cHBvcnRWYWxpZGF0ZU5ldHdvcmtUb3BvbG9neVJlc3VsdCxcbiAgaW1wb3J0UmVzdE5ldHdvcmtzU3ludGhlc2l6ZUFzc29jaWF0aW9uR2VvbWV0cmllcyxcbiAgaW1wb3J0UmVzdE5ldHdvcmtzVHJhY2UsXG4gIGltcG9ydFJlc3RQbGFjZXMsXG4gIGltcG9ydFJlc3RQcmludCxcbiAgaW1wb3J0UmVzdFF1ZXJ5LFxuICBpbXBvcnRSZXN0UXVlcnlTdXBwb3J0QXR0YWNobWVudEluZm8sXG4gIGltcG9ydFJlc3RSb3V0ZSxcbiAgaW1wb3J0UmVzdFNlcnZpY2VBcmVhLFxuICBpbXBvcnRSZXN0U3VwcG9ydEFkZHJlc3NDYW5kaWRhdGUsXG4gIGltcG9ydFJlc3RTdXBwb3J0QWxnb3JpdGhtaWNDb2xvclJhbXAsXG4gIGltcG9ydFJlc3RTdXBwb3J0QXJlYWxVbml0LFxuICBpbXBvcnRSZXN0U3VwcG9ydEFyZWFzQW5kTGVuZ3Roc1BhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0QXR0YWNobWVudFF1ZXJ5LFxuICBpbXBvcnRSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNGZWF0dXJlU2V0LFxuICBpbXBvcnRSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNHcm91cGluZyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRBdHRyaWJ1dGVCaW5zUXVlcnksXG4gIGltcG9ydFJlc3RTdXBwb3J0QXV0b0ludGVydmFsQmluUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRCYXNlSW1hZ2VNZWFzdXJlUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRCYXNlSW1hZ2VNZWFzdXJlUmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydEJ1ZmZlclBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0Q2FtZXJhSW5mbyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRDbG9zZXN0RmFjaWxpdHlQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydENsb3Nlc3RGYWNpbGl0eVNvbHZlUmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydENvbG9yUmFtcCxcbiAgaW1wb3J0UmVzdFN1cHBvcnREYXRhRmlsZSxcbiAgaW1wb3J0UmVzdFN1cHBvcnREYXRhTGF5ZXIsXG4gIGltcG9ydFJlc3RTdXBwb3J0RGF0ZUJpblBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0RGF0ZUJpblRpbWVJbnRlcnZhbCxcbiAgaW1wb3J0UmVzdFN1cHBvcnREZW5zaWZ5UGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnREaXJlY3Rpb25MaW5lLFxuICBpbXBvcnRSZXN0U3VwcG9ydERpcmVjdGlvblBvaW50LFxuICBpbXBvcnRSZXN0U3VwcG9ydERpcmVjdGlvbnNFdmVudCxcbiAgaW1wb3J0UmVzdFN1cHBvcnREaXJlY3Rpb25zRmVhdHVyZSxcbiAgaW1wb3J0UmVzdFN1cHBvcnREaXJlY3Rpb25zRmVhdHVyZVNldCxcbiAgaW1wb3J0UmVzdFN1cHBvcnREaXN0YW5jZVBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0RmVhdHVyZVNldCxcbiAgaW1wb3J0UmVzdFN1cHBvcnRGZXRjaFBsYWNlUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRGaW5kSW1hZ2VzUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRGaW5kSW1hZ2VzUmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydEZpbmRQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydEZpbmRSZXN1bHQsXG4gIGltcG9ydFJlc3RTdXBwb3J0Rml4ZWRCb3VuZGFyaWVzQmluUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRGaXhlZEludGVydmFsQmluUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRHUE1lc3NhZ2UsXG4gIGltcG9ydFJlc3RTdXBwb3J0R2VuZXJhbGl6ZVBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0SWRlbnRpZnlQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydElkZW50aWZ5UmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydEltYWdlQW5nbGVQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydEltYWdlQW5nbGVSZXN1bHQsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VBcmVhUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZUFyZWFSZXN1bHQsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VCb3VuZGFyeVBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VCb3VuZGFyeVJlc3VsdCxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZURpc3RhbmNlUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZURpc3RhbmNlUmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydEltYWdlR1BTSW5mbyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZUdQU0luZm9QYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydEltYWdlR1BTSW5mb1Jlc3VsdCxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZUhlaWdodFBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VIZWlnaHRSZXN1bHQsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VIaXN0b2dyYW1QYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydEltYWdlSWRlbnRpZnlQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydEltYWdlSWRlbnRpZnlSZXN1bHQsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VJbnNwZWN0aW9uSW5mbyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VQaXhlbExvY2F0aW9uUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVBpeGVsTG9jYXRpb25SZXN1bHQsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VQb2ludFBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VQb2ludFJlc3VsdCxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVNhbXBsZSxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVNhbXBsZVBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VTYW1wbGVSZXN1bHQsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VUb01hcE11bHRpcmF5UGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVRvTWFwUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRJbWFnZVVybFBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VVcmxSZXN1bHQsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VWb2x1bWUsXG4gIGltcG9ydFJlc3RTdXBwb3J0SW1hZ2VWb2x1bWVQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydEltYWdlVm9sdW1lUmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydEpvYkluZm8sXG4gIGltcG9ydFJlc3RTdXBwb3J0TGFzdE1pbGVEZWxpdmVyeVBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0TGVnZW5kTGF5ZXIsXG4gIGltcG9ydFJlc3RTdXBwb3J0TGVuZ3Roc1BhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0TGluZWFyVW5pdCxcbiAgaW1wb3J0UmVzdFN1cHBvcnRNYXBUb0ltYWdlUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRNZWFzdXJlQXJlYUZyb21JbWFnZVJlc3VsdCxcbiAgaW1wb3J0UmVzdFN1cHBvcnRNZWFzdXJlRnJvbUltYWdlUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRNZWFzdXJlTGVuZ3RoRnJvbUltYWdlUmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydE11bHRpcGFydENvbG9yUmFtcCxcbiAgaW1wb3J0UmVzdFN1cHBvcnROQU1lc3NhZ2UsXG4gIGltcG9ydFJlc3RTdXBwb3J0TmV0d29ya0ZlYXR1cmVTZXQsXG4gIGltcG9ydFJlc3RTdXBwb3J0TmV0d29ya1VybCxcbiAgaW1wb3J0UmVzdFN1cHBvcnRPZmZzZXRQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydFBhcmFtZXRlclZhbHVlLFxuICBpbXBvcnRSZXN0U3VwcG9ydFBsYWNlUmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydFBsYWNlc1BhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0UGxhY2VzUXVlcnlQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydFBsYWNlc1F1ZXJ5UmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydFBvaW50QmFycmllcixcbiAgaW1wb3J0UmVzdFN1cHBvcnRQb2x5Z29uQmFycmllcixcbiAgaW1wb3J0UmVzdFN1cHBvcnRQb2x5bGluZUJhcnJpZXIsXG4gIGltcG9ydFJlc3RTdXBwb3J0UHJpbnRQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3VwcG9ydFByaW50VGVtcGxhdGUsXG4gIGltcG9ydFJlc3RTdXBwb3J0UHJvamVjdFBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0UXVlcnksXG4gIGltcG9ydFJlc3RTdXBwb3J0UmFzdGVyRGF0YSxcbiAgaW1wb3J0UmVzdFN1cHBvcnRSZWxhdGlvblBhcmFtZXRlcnMsXG4gIGltcG9ydFJlc3RTdXBwb3J0UmVsYXRpb25zaGlwUXVlcnksXG4gIGltcG9ydFJlc3RTdXBwb3J0Um91dGVJbmZvLFxuICBpbXBvcnRSZXN0U3VwcG9ydFJvdXRlUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRSb3V0ZVJlc3VsdCxcbiAgaW1wb3J0UmVzdFN1cHBvcnRSb3V0ZVNvbHZlUmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydFNlcnZpY2VBcmVhUGFyYW1ldGVycyxcbiAgaW1wb3J0UmVzdFN1cHBvcnRTZXJ2aWNlQXJlYVNvbHZlUmVzdWx0LFxuICBpbXBvcnRSZXN0U3VwcG9ydFN0YXRpc3RpY0RlZmluaXRpb24sXG4gIGltcG9ydFJlc3RTdXBwb3J0U3RvcCxcbiAgaW1wb3J0UmVzdFN1cHBvcnRUb3BGZWF0dXJlc1F1ZXJ5LFxuICBpbXBvcnRSZXN0U3VwcG9ydFRvcEZpbHRlcixcbiAgaW1wb3J0UmVzdFN1cHBvcnRUcmF2ZWxNb2RlLFxuICBpbXBvcnRSZXN0U3VwcG9ydFRyaW1FeHRlbmRQYXJhbWV0ZXJzLFxuICBpbXBvcnRSZXN0U3ltYm9sU2VydmljZSxcbiAgaW1wb3J0U21hcnRNYXBwaW5nSGV1cmlzdGljc0JpbkxldmVsLFxuICBpbXBvcnRTbWFydE1hcHBpbmdIZXVyaXN0aWNzU2NhbGVSYW5nZSxcbiAgaW1wb3J0U21hcnRNYXBwaW5nSGV1cmlzdGljc1NpemVSYW5nZSxcbiAgaW1wb3J0U21hcnRNYXBwaW5nTGFiZWxzQmlucyxcbiAgaW1wb3J0U21hcnRNYXBwaW5nTGFiZWxzQ2x1c3RlcnMsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1BvcHVwQ2x1c3RlcnMsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1BvcHVwVGVtcGxhdGVzLFxuICBpbXBvcnRTbWFydE1hcHBpbmdSYXN0ZXJSZW5kZXJlcnNDbGFzc0JyZWFrcyxcbiAgaW1wb3J0U21hcnRNYXBwaW5nUmFzdGVyUmVuZGVyZXJzQ29sb3JtYXAsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1Jhc3RlclJlbmRlcmVyc0Zsb3csXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1Jhc3RlclJlbmRlcmVyc1JnYixcbiAgaW1wb3J0U21hcnRNYXBwaW5nUmFzdGVyUmVuZGVyZXJzU2hhZGVkUmVsaWVmLFxuICBpbXBvcnRTbWFydE1hcHBpbmdSYXN0ZXJSZW5kZXJlcnNTdHJldGNoLFxuICBpbXBvcnRTbWFydE1hcHBpbmdSYXN0ZXJSZW5kZXJlcnNVbmlxdWVWYWx1ZSxcbiAgaW1wb3J0U21hcnRNYXBwaW5nUmFzdGVyUmVuZGVyZXJzVmVjdG9yRmllbGQsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1Jhc3RlclN1cHBvcnRDb2xvclJhbXBzLFxuICBpbXBvcnRTbWFydE1hcHBpbmdSYXN0ZXJTdXBwb3J0VXRpbHMsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1JlbmRlcmVyc0NvbG9yLFxuICBpbXBvcnRTbWFydE1hcHBpbmdSZW5kZXJlcnNEb3REZW5zaXR5LFxuICBpbXBvcnRTbWFydE1hcHBpbmdSZW5kZXJlcnNIZWF0bWFwLFxuICBpbXBvcnRTbWFydE1hcHBpbmdSZW5kZXJlcnNMb2NhdGlvbixcbiAgaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzT3BhY2l0eSxcbiAgaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzUGllQ2hhcnQsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1JlbmRlcmVyc1ByZWRvbWluYW5jZSxcbiAgaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzUmVsYXRpb25zaGlwLFxuICBpbXBvcnRTbWFydE1hcHBpbmdSZW5kZXJlcnNTaXplLFxuICBpbXBvcnRTbWFydE1hcHBpbmdSZW5kZXJlcnNTdXBwb3J0UmVuZGVyZXJVdGlscyxcbiAgaW1wb3J0U21hcnRNYXBwaW5nUmVuZGVyZXJzU3VwcG9ydFNwaWtlVXRpbHMsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1JlbmRlcmVyc1R5cGUsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1JlbmRlcmVyc1VuaXZhcmlhdGVDb2xvclNpemUsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1N0YXRpc3RpY3NDbGFzc0JyZWFrcyxcbiAgaW1wb3J0U21hcnRNYXBwaW5nU3RhdGlzdGljc0hlYXRtYXBTdGF0aXN0aWNzLFxuICBpbXBvcnRTbWFydE1hcHBpbmdTdGF0aXN0aWNzSGlzdG9ncmFtLFxuICBpbXBvcnRTbWFydE1hcHBpbmdTdGF0aXN0aWNzUHJlZG9taW5hbnRDYXRlZ29yaWVzLFxuICBpbXBvcnRTbWFydE1hcHBpbmdTdGF0aXN0aWNzU3VtbWFyeVN0YXRpc3RpY3MsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1N0YXRpc3RpY3NTdW1tYXJ5U3RhdGlzdGljc0ZvckFnZSxcbiAgaW1wb3J0U21hcnRNYXBwaW5nU3RhdGlzdGljc1N1cHBvcnRBZ2VVdGlscyxcbiAgaW1wb3J0U21hcnRNYXBwaW5nU3RhdGlzdGljc1N1cHBvcnRQcmVkb21pbmFuY2VVdGlscyxcbiAgaW1wb3J0U21hcnRNYXBwaW5nU3RhdGlzdGljc1VuaXF1ZVZhbHVlcyxcbiAgaW1wb3J0U21hcnRNYXBwaW5nU3ltYm9sb2d5Q29sb3IsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1N5bWJvbG9neURvdERlbnNpdHksXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1N5bWJvbG9neUZsb3csXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1N5bWJvbG9neUhlYXRtYXAsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1N5bWJvbG9neUxvY2F0aW9uLFxuICBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lQaWVDaGFydCxcbiAgaW1wb3J0U21hcnRNYXBwaW5nU3ltYm9sb2d5UHJlZG9taW5hbmNlLFxuICBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lSZWxhdGlvbnNoaXAsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1N5bWJvbG9neVNpemUsXG4gIGltcG9ydFNtYXJ0TWFwcGluZ1N5bWJvbG9neVN1cHBvcnRDb2xvclJhbXBzLFxuICBpbXBvcnRTbWFydE1hcHBpbmdTeW1ib2xvZ3lUeXBlLFxuICBpbXBvcnRTdXBwb3J0QWN0aW9uc0FjdGlvbkJhc2UsXG4gIGltcG9ydFN1cHBvcnRBY3Rpb25zQWN0aW9uQnV0dG9uLFxuICBpbXBvcnRTdXBwb3J0QWN0aW9uc0FjdGlvblRvZ2dsZSxcbiAgaW1wb3J0U3VwcG9ydEJhc2VtYXBTdHlsZSxcbiAgaW1wb3J0U3VwcG9ydE1hcEZsb29ySW5mbyxcbiAgaW1wb3J0U3VwcG9ydFBvcHVwVXRpbHMsXG4gIGltcG9ydFN1cHBvcnRUaW1lVXRpbHMsXG4gIGltcG9ydFN5bWJvbHMsXG4gIGltcG9ydFN5bWJvbHNDSU1TeW1ib2wsXG4gIGltcG9ydFN5bWJvbHNDYWxsb3V0c0NhbGxvdXQzRCxcbiAgaW1wb3J0U3ltYm9sc0NhbGxvdXRzTGluZUNhbGxvdXQzRCxcbiAgaW1wb3J0U3ltYm9sc0VkZ2VzRWRnZXMzRCxcbiAgaW1wb3J0U3ltYm9sc0VkZ2VzU2tldGNoRWRnZXMzRCxcbiAgaW1wb3J0U3ltYm9sc0VkZ2VzU29saWRFZGdlczNELFxuICBpbXBvcnRTeW1ib2xzRXh0cnVkZVN5bWJvbDNETGF5ZXIsXG4gIGltcG9ydFN5bWJvbHNGaWxsU3ltYm9sLFxuICBpbXBvcnRTeW1ib2xzRmlsbFN5bWJvbDNETGF5ZXIsXG4gIGltcG9ydFN5bWJvbHNGb250LFxuICBpbXBvcnRTeW1ib2xzSWNvblN5bWJvbDNETGF5ZXIsXG4gIGltcG9ydFN5bWJvbHNMYWJlbFN5bWJvbDNELFxuICBpbXBvcnRTeW1ib2xzTGluZVN0eWxlTWFya2VyM0QsXG4gIGltcG9ydFN5bWJvbHNMaW5lU3ltYm9sLFxuICBpbXBvcnRTeW1ib2xzTGluZVN5bWJvbDNELFxuICBpbXBvcnRTeW1ib2xzTGluZVN5bWJvbDNETGF5ZXIsXG4gIGltcG9ydFN5bWJvbHNMaW5lU3ltYm9sTWFya2VyLFxuICBpbXBvcnRTeW1ib2xzTWFya2VyU3ltYm9sLFxuICBpbXBvcnRTeW1ib2xzTWVzaFN5bWJvbDNELFxuICBpbXBvcnRTeW1ib2xzT2JqZWN0U3ltYm9sM0RMYXllcixcbiAgaW1wb3J0U3ltYm9sc1BhdGhTeW1ib2wzRExheWVyLFxuICBpbXBvcnRTeW1ib2xzUGF0dGVybnNMaW5lU3R5bGVQYXR0ZXJuM0QsXG4gIGltcG9ydFN5bWJvbHNQYXR0ZXJuc1N0eWxlUGF0dGVybjNELFxuICBpbXBvcnRTeW1ib2xzUGljdHVyZUZpbGxTeW1ib2wsXG4gIGltcG9ydFN5bWJvbHNQaWN0dXJlTWFya2VyU3ltYm9sLFxuICBpbXBvcnRTeW1ib2xzUG9pbnRTeW1ib2wzRCxcbiAgaW1wb3J0U3ltYm9sc1BvbHlnb25TeW1ib2wzRCxcbiAgaW1wb3J0U3ltYm9sc1NpbXBsZUZpbGxTeW1ib2wsXG4gIGltcG9ydFN5bWJvbHNTaW1wbGVMaW5lU3ltYm9sLFxuICBpbXBvcnRTeW1ib2xzU2ltcGxlTWFya2VyU3ltYm9sLFxuICBpbXBvcnRTeW1ib2xzU3VwcG9ydENpbUNvbnZlcnNpb25VdGlscyxcbiAgaW1wb3J0U3ltYm9sc1N1cHBvcnRDaW1TeW1ib2xVdGlscyxcbiAgaW1wb3J0U3ltYm9sc1N1cHBvcnRFbGV2YXRpb25JbmZvLFxuICBpbXBvcnRTeW1ib2xzU3VwcG9ydEZlYXR1cmVFeHByZXNzaW9uSW5mbyxcbiAgaW1wb3J0U3ltYm9sc1N1cHBvcnRKc29uVXRpbHMsXG4gIGltcG9ydFN5bWJvbHNTdXBwb3J0U3R5bGVPcmlnaW4sXG4gIGltcG9ydFN5bWJvbHNTdXBwb3J0U3ltYm9sM0RWZXJ0aWNhbE9mZnNldCxcbiAgaW1wb3J0U3ltYm9sc1N1cHBvcnRTeW1ib2xVdGlscyxcbiAgaW1wb3J0U3ltYm9sc1N5bWJvbCxcbiAgaW1wb3J0U3ltYm9sc1N5bWJvbDNELFxuICBpbXBvcnRTeW1ib2xzU3ltYm9sM0RMYXllcixcbiAgaW1wb3J0U3ltYm9sc1RleHRTeW1ib2wsXG4gIGltcG9ydFN5bWJvbHNUZXh0U3ltYm9sM0RMYXllcixcbiAgaW1wb3J0U3ltYm9sc1dhdGVyU3ltYm9sM0RMYXllcixcbiAgaW1wb3J0U3ltYm9sc1dlYlN0eWxlU3ltYm9sLFxuICBpbXBvcnRUYWJsZXNBdHRyaWJ1dGVUYWJsZVRlbXBsYXRlLFxuICBpbXBvcnRUYWJsZXNFbGVtZW50cyxcbiAgaW1wb3J0VGFibGVzRWxlbWVudHNBdHRyaWJ1dGVUYWJsZUF0dGFjaG1lbnRFbGVtZW50LFxuICBpbXBvcnRUYWJsZXNFbGVtZW50c0F0dHJpYnV0ZVRhYmxlRWxlbWVudCxcbiAgaW1wb3J0VGFibGVzRWxlbWVudHNBdHRyaWJ1dGVUYWJsZUZpZWxkRWxlbWVudCxcbiAgaW1wb3J0VGFibGVzRWxlbWVudHNBdHRyaWJ1dGVUYWJsZUdyb3VwRWxlbWVudCxcbiAgaW1wb3J0VGFibGVzRWxlbWVudHNBdHRyaWJ1dGVUYWJsZVJlbGF0aW9uc2hpcEVsZW1lbnQsXG4gIGltcG9ydFRpbWVUaW1lRXh0ZW50LFxuICBpbXBvcnRUaW1lVGltZUludGVydmFsLFxuICBpbXBvcnRWZXJzaW9uTWFuYWdlbWVudFV0aWxzLFxuICBpbXBvcnRWZXJzaW9uTWFuYWdlbWVudFZlcnNpb25BZGFwdGVyc1V0aWxzLFxuICBpbXBvcnRWZXJzaW9uTWFuYWdlbWVudFZlcnNpb25NYW5hZ2VtZW50U2VydmljZSxcbiAgaW1wb3J0VmVyc2lvbk1hbmFnZW1lbnRWZXJzaW9uaW5nU3RhdGUsXG4gIGltcG9ydFZpZXdwb2ludCxcbiAgaW1wb3J0Vmlld3MyZEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUFuYWx5c2lzVmlldzJELFxuICBpbXBvcnRWaWV3czJkTGF5ZXJzQmFzZUxheWVyVmlldzJELFxuICBpbXBvcnRWaWV3czJkTGF5ZXJzQmFzZUxheWVyVmlld0dMMkQsXG4gIGltcG9ydFZpZXdzMmRWaWV3U3RhdGUsXG4gIGltcG9ydFZpZXdzM2RBbmFseXNpc0FyZWFNZWFzdXJlbWVudEFuYWx5c2lzVmlldzNELFxuICBpbXBvcnRWaWV3czNkQW5hbHlzaXNEaW1lbnNpb25BbmFseXNpc1ZpZXczRCxcbiAgaW1wb3J0Vmlld3MzZEFuYWx5c2lzRGlyZWN0TGluZU1lYXN1cmVtZW50QW5hbHlzaXNWaWV3M0QsXG4gIGltcG9ydFZpZXdzM2RBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVBbmFseXNpc1ZpZXczRCxcbiAgaW1wb3J0Vmlld3MzZEFuYWx5c2lzTGluZU9mU2lnaHRBbmFseXNpc1Jlc3VsdCxcbiAgaW1wb3J0Vmlld3MzZEFuYWx5c2lzTGluZU9mU2lnaHRBbmFseXNpc1ZpZXczRCxcbiAgaW1wb3J0Vmlld3MzZEFuYWx5c2lzU2xpY2VBbmFseXNpc1ZpZXczRCxcbiAgaW1wb3J0Vmlld3MzZEFuYWx5c2lzVmlld3NoZWRBbmFseXNpc1ZpZXczRCxcbiAgaW1wb3J0Vmlld3MzZEFuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRBbmFseXNpc1ZpZXczRCxcbiAgaW1wb3J0Vmlld3MzZEFuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRWb2x1bWVNZWFzdXJlbWVudFJlc3VsdCxcbiAgaW1wb3J0Vmlld3MzZEVudmlyb25tZW50Q2xvdWR5V2VhdGhlcixcbiAgaW1wb3J0Vmlld3MzZEVudmlyb25tZW50Rm9nZ3lXZWF0aGVyLFxuICBpbXBvcnRWaWV3czNkRW52aXJvbm1lbnRSYWlueVdlYXRoZXIsXG4gIGltcG9ydFZpZXdzM2RFbnZpcm9ubWVudFNub3d5V2VhdGhlcixcbiAgaW1wb3J0Vmlld3MzZEVudmlyb25tZW50U3VuTGlnaHRpbmcsXG4gIGltcG9ydFZpZXdzM2RFbnZpcm9ubWVudFN1bm55V2VhdGhlcixcbiAgaW1wb3J0Vmlld3MzZEVudmlyb25tZW50VmlydHVhbExpZ2h0aW5nLFxuICBpbXBvcnRWaWV3czNkU3VwcG9ydExheWVyUGVyZm9ybWFuY2VJbmZvLFxuICBpbXBvcnRWaWV3czNkU3VwcG9ydFNjZW5lVmlld1BlcmZvcm1hbmNlSW5mbyxcbiAgaW1wb3J0Vmlld3MzZFdlYmdsLFxuICBpbXBvcnRWaWV3czNkV2ViZ2xNYW5hZ2VkRkJPLFxuICBpbXBvcnRWaWV3czNkV2ViZ2xSZW5kZXJDYW1lcmEsXG4gIGltcG9ydFZpZXdzM2RXZWJnbFJlbmRlck5vZGUsXG4gIGltcG9ydFZpZXdzQW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVJlc3VsdCxcbiAgaW1wb3J0Vmlld3NBbmFseXNpc0xlbmd0aERpbWVuc2lvblJlc3VsdCxcbiAgaW1wb3J0Vmlld3NCYXNlbWFwVmlldyxcbiAgaW1wb3J0Vmlld3NEcmF3RHJhdyxcbiAgaW1wb3J0Vmlld3NEcmF3RHJhd0FjdGlvbixcbiAgaW1wb3J0Vmlld3NEcmF3TXVsdGlwb2ludERyYXdBY3Rpb24sXG4gIGltcG9ydFZpZXdzRHJhd1BvaW50RHJhd0FjdGlvbixcbiAgaW1wb3J0Vmlld3NEcmF3UG9seWdvbkRyYXdBY3Rpb24sXG4gIGltcG9ydFZpZXdzRHJhd1BvbHlsaW5lRHJhd0FjdGlvbixcbiAgaW1wb3J0Vmlld3NEcmF3U2VnbWVudERyYXdBY3Rpb24sXG4gIGltcG9ydFZpZXdzR3JvdW5kVmlldyxcbiAgaW1wb3J0Vmlld3NJbnB1dEdhbWVwYWRHYW1lcGFkSW5wdXREZXZpY2UsXG4gIGltcG9ydFZpZXdzSW5wdXRHYW1lcGFkR2FtZXBhZFNldHRpbmdzLFxuICBpbXBvcnRWaWV3c0lucHV0SW5wdXQsXG4gIGltcG9ydFZpZXdzSW50ZXJhY3RpdmVTa2V0Y2hTa2V0Y2hMYWJlbE9wdGlvbnMsXG4gIGltcG9ydFZpZXdzSW50ZXJhY3RpdmVTa2V0Y2hTa2V0Y2hUb29sdGlwT3B0aW9ucyxcbiAgaW1wb3J0Vmlld3NJbnRlcmFjdGl2ZVNrZXRjaFNrZXRjaFZhbHVlT3B0aW9ucyxcbiAgaW1wb3J0Vmlld3NJbnRlcmFjdGl2ZVNuYXBwaW5nRmVhdHVyZVNuYXBwaW5nTGF5ZXJTb3VyY2UsXG4gIGltcG9ydFZpZXdzSW50ZXJhY3RpdmVTbmFwcGluZ1NuYXBwaW5nT3B0aW9ucyxcbiAgaW1wb3J0Vmlld3NJbnRlcmFjdGl2ZVRvb2x0aXAsXG4gIGltcG9ydFZpZXdzTGF5ZXJzQnVpbGRpbmdDb21wb25lbnRTdWJsYXllclZpZXcsXG4gIGltcG9ydFZpZXdzTGF5ZXJzQnVpbGRpbmdTY2VuZUxheWVyVmlldyxcbiAgaW1wb3J0Vmlld3NMYXllcnNEaW1lbnNpb25MYXllclZpZXcsXG4gIGltcG9ydFZpZXdzTGF5ZXJzR3JvdXBMYXllclZpZXcsXG4gIGltcG9ydFZpZXdzTGF5ZXJzSW1hZ2VyeUxheWVyVmlldyxcbiAgaW1wb3J0Vmlld3NMYXllcnNJbWFnZXJ5VGlsZUxheWVyVmlldyxcbiAgaW1wb3J0Vmlld3NMYXllcnNMYXllclZpZXcsXG4gIGltcG9ydFZpZXdzTGF5ZXJzTGluZU9mU2lnaHRMYXllclZpZXcsXG4gIGltcG9ydFZpZXdzTGF5ZXJzTWVkaWFMYXllclZpZXcsXG4gIGltcG9ydFZpZXdzTGF5ZXJzU2NlbmVMYXllclZpZXcsXG4gIGltcG9ydFZpZXdzTGF5ZXJzVmlld3NoZWRMYXllclZpZXcsXG4gIGltcG9ydFZpZXdzTGlua0NoYXJ0VmlldyxcbiAgaW1wb3J0Vmlld3NNYWduaWZpZXIsXG4gIGltcG9ydFZpZXdzTWFwVmlldyxcbiAgaW1wb3J0Vmlld3NOYXZpZ2F0aW9uR2FtZXBhZEdhbWVwYWRTZXR0aW5ncyxcbiAgaW1wb3J0Vmlld3NOYXZpZ2F0aW9uTmF2aWdhdGlvbixcbiAgaW1wb3J0Vmlld3NOYXZpZ2F0aW9uTmF2aWdhdGlvbkFjdGlvbk1hcCxcbiAgaW1wb3J0Vmlld3NTY2VuZVZpZXcsXG4gIGltcG9ydFZpZXdzU3VwcG9ydENvbG9yVXRpbHMsXG4gIGltcG9ydFZpZXdzU3VwcG9ydEhpZ2hsaWdodE9wdGlvbnMsXG4gIGltcG9ydFZpZXdzVGhlbWUsXG4gIGltcG9ydFZpZXdzVWlEZWZhdWx0VUksXG4gIGltcG9ydFZpZXdzVWlVSSxcbiAgaW1wb3J0Vmlld3NWaWRlb1ZpZXcsXG4gIGltcG9ydFZpZXdzVmlldyxcbiAgaW1wb3J0Vmlld3NWaWV3MkQsXG4gIGltcG9ydFZpZXdzVmlld0FuaW1hdGlvbixcbiAgaW1wb3J0V2ViRG9jdW1lbnQyRCxcbiAgaW1wb3J0V2ViTGlua0NoYXJ0LFxuICBpbXBvcnRXZWJNYXAsXG4gIGltcG9ydFdlYlNjZW5lLFxuICBpbXBvcnRXZWJkb2NBcHBsaWNhdGlvblByb3BlcnRpZXNTZWFyY2gsXG4gIGltcG9ydFdlYmRvY0FwcGxpY2F0aW9uUHJvcGVydGllc1NlYXJjaExheWVyLFxuICBpbXBvcnRXZWJkb2NBcHBsaWNhdGlvblByb3BlcnRpZXNTZWFyY2hMYXllckZpZWxkLFxuICBpbXBvcnRXZWJkb2NBcHBsaWNhdGlvblByb3BlcnRpZXNTZWFyY2hUYWJsZSxcbiAgaW1wb3J0V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzU2VhcmNoVGFibGVGaWVsZCxcbiAgaW1wb3J0V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzVmlld2luZyxcbiAgaW1wb3J0V2ViZG9jR2VvdHJpZ2dlcnNJbmZvLFxuICBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9EZXZpY2VMb2NhdGlvbkZlZWQsXG4gIGltcG9ydFdlYmRvY0dlb3RyaWdnZXJzSW5mb0V4cHJlc3Npb25JbmZvLFxuICBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmVuY2VQYXJhbWV0ZXJzLFxuICBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmlsdGVyLFxuICBpbXBvcnRXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlTGF5ZXJTb3VyY2UsXG4gIGltcG9ydFdlYmRvY0dlb3RyaWdnZXJzSW5mb0ZlbmNlR2VvdHJpZ2dlcixcbiAgaW1wb3J0V2ViZG9jR2VvdHJpZ2dlcnNJbmZvR2VvdHJpZ2dlcixcbiAgaW1wb3J0V2ViZG9jR2VvdHJpZ2dlcnNJbmZvR2VvdHJpZ2dlck5vdGlmaWNhdGlvbk9wdGlvbnMsXG4gIGltcG9ydFdlYmRvY0lQU0luZm8sXG4gIGltcG9ydFdlYmRvY0lwc0FwcGxlSVBTUHJvcGVydGllcyxcbiAgaW1wb3J0V2ViZG9jSXBzQ29uZmlndXJhdGlvbixcbiAgaW1wb3J0V2ViZG9jSXBzR05TU1Byb3BlcnRpZXMsXG4gIGltcG9ydFdlYmRvY0lwc1BhdGhTbmFwcGluZ1Byb3BlcnRpZXMsXG4gIGltcG9ydFdlYmRvY0lwc1Bvc2l0aW9uaW5nU2VydmljZSxcbiAgaW1wb3J0V2ViZG9jSXBzU21vb3RoaW5nUHJvcGVydGllcyxcbiAgaW1wb3J0V2ViZG9jV2lkZ2V0c1RpbWVTbGlkZXIsXG4gIGltcG9ydFdlYm1hcEFwcGxpY2F0aW9uUHJvcGVydGllcyxcbiAgaW1wb3J0V2VibWFwQmFja2dyb3VuZENvbG9yQmFja2dyb3VuZCxcbiAgaW1wb3J0V2VibWFwQm9va21hcmssXG4gIGltcG9ydFdlYm1hcEluaXRpYWxWaWV3UHJvcGVydGllcyxcbiAgaW1wb3J0V2Vic2NlbmVBcHBsaWNhdGlvblByb3BlcnRpZXMsXG4gIGltcG9ydFdlYnNjZW5lQmFja2dyb3VuZEJhY2tncm91bmQsXG4gIGltcG9ydFdlYnNjZW5lQmFja2dyb3VuZENvbG9yQmFja2dyb3VuZCxcbiAgaW1wb3J0V2Vic2NlbmVFbnZpcm9ubWVudCxcbiAgaW1wb3J0V2Vic2NlbmVJbml0aWFsVmlld1Byb3BlcnRpZXMsXG4gIGltcG9ydFdlYnNjZW5lUHJlc2VudGF0aW9uLFxuICBpbXBvcnRXZWJzY2VuZVNsaWRlLFxuICBpbXBvcnRXZWJzY2VuZVNsaWRlTGVnZW5kSW5mbyxcbiAgaW1wb3J0V2Vic2NlbmVTdW5MaWdodGluZyxcbiAgaW1wb3J0V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZSxcbiAgaW1wb3J0V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZUdsb2JhbElkLFxuICBpbXBvcnRXZWJzY2VuZVN1cHBvcnRGZWF0dXJlUmVmZXJlbmNlSWQsXG4gIGltcG9ydFdlYnNjZW5lU3VwcG9ydEZlYXR1cmVSZWZlcmVuY2VPYmplY3RJZCxcbiAgaW1wb3J0V2Vic2NlbmVTdXBwb3J0TGF5ZXJSZWZlcmVuY2UsXG4gIGltcG9ydFdlYnNjZW5lU3VwcG9ydFNsaWRlRWxlbWVudHMsXG4gIGltcG9ydFdlYnNjZW5lU3VwcG9ydFNsaWRlUG9wdXBJbmZvLFxuICBpbXBvcnRXZWJzY2VuZVZpcnR1YWxMaWdodGluZyxcbiAgaW1wb3J0V2lkZ2V0c0FyZWFNZWFzdXJlbWVudDJELFxuICBpbXBvcnRXaWRnZXRzQXJlYU1lYXN1cmVtZW50MkRBcmVhTWVhc3VyZW1lbnQyRFZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0FyZWFNZWFzdXJlbWVudDNELFxuICBpbXBvcnRXaWRnZXRzQXJlYU1lYXN1cmVtZW50M0RBcmVhTWVhc3VyZW1lbnQzRFZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0F0dGFjaG1lbnRzLFxuICBpbXBvcnRXaWRnZXRzQXR0YWNobWVudHNBdHRhY2htZW50c1ZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0F0dHJpYnV0aW9uLFxuICBpbXBvcnRXaWRnZXRzQXR0cmlidXRpb25BdHRyaWJ1dGlvblZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0Jhc2VtYXBHYWxsZXJ5LFxuICBpbXBvcnRXaWRnZXRzQmFzZW1hcEdhbGxlcnlCYXNlbWFwR2FsbGVyeVZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0Jhc2VtYXBHYWxsZXJ5U3VwcG9ydEJhc2VtYXBHYWxsZXJ5SXRlbSxcbiAgaW1wb3J0V2lkZ2V0c0Jhc2VtYXBHYWxsZXJ5U3VwcG9ydExvY2FsQmFzZW1hcHNTb3VyY2UsXG4gIGltcG9ydFdpZGdldHNCYXNlbWFwR2FsbGVyeVN1cHBvcnRQb3J0YWxCYXNlbWFwc1NvdXJjZSxcbiAgaW1wb3J0V2lkZ2V0c0Jhc2VtYXBMYXllckxpc3QsXG4gIGltcG9ydFdpZGdldHNCYXNlbWFwTGF5ZXJMaXN0QmFzZW1hcExheWVyTGlzdFZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0Jhc2VtYXBUb2dnbGUsXG4gIGltcG9ydFdpZGdldHNCYXNlbWFwVG9nZ2xlQmFzZW1hcFRvZ2dsZVZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybSxcbiAgaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUJhdGNoQXR0cmlidXRlRm9ybVZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUlucHV0c0JhdGNoRm9ybUlucHV0cyxcbiAgaW1wb3J0V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUlucHV0c0ZpZWxkSW5wdXQsXG4gIGltcG9ydFdpZGdldHNCYXRjaEF0dHJpYnV0ZUZvcm1JbnB1dHNHcm91cElucHV0LFxuICBpbXBvcnRXaWRnZXRzQm9va21hcmtzLFxuICBpbXBvcnRXaWRnZXRzQm9va21hcmtzQm9va21hcmtzVmlld01vZGVsLFxuICBpbXBvcnRXaWRnZXRzQnVpbGRpbmdFeHBsb3JlcixcbiAgaW1wb3J0V2lkZ2V0c0J1aWxkaW5nRXhwbG9yZXJCdWlsZGluZ0V4cGxvcmVyVmlld01vZGVsLFxuICBpbXBvcnRXaWRnZXRzQnVpbGRpbmdFeHBsb3JlckJ1aWxkaW5nTGV2ZWwsXG4gIGltcG9ydFdpZGdldHNCdWlsZGluZ0V4cGxvcmVyQnVpbGRpbmdQaGFzZSxcbiAgaW1wb3J0V2lkZ2V0c0NhdGFsb2dMYXllckxpc3QsXG4gIGltcG9ydFdpZGdldHNDYXRhbG9nTGF5ZXJMaXN0Q2F0YWxvZ0xheWVyTGlzdFZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0NvbXBhc3MsXG4gIGltcG9ydFdpZGdldHNDb21wYXNzQ29tcGFzc1ZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0Nvb3JkaW5hdGVDb252ZXJzaW9uLFxuICBpbXBvcnRXaWRnZXRzQ29vcmRpbmF0ZUNvbnZlcnNpb25Db29yZGluYXRlQ29udmVyc2lvblZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0Nvb3JkaW5hdGVDb252ZXJzaW9uU3VwcG9ydENvbnZlcnNpb24sXG4gIGltcG9ydFdpZGdldHNDb29yZGluYXRlQ29udmVyc2lvblN1cHBvcnRGb3JtYXQsXG4gIGltcG9ydFdpZGdldHNEYXlsaWdodCxcbiAgaW1wb3J0V2lkZ2V0c0RheWxpZ2h0RGF5bGlnaHRWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNEaXJlY3RMaW5lTWVhc3VyZW1lbnQzRCxcbiAgaW1wb3J0V2lkZ2V0c0RpcmVjdExpbmVNZWFzdXJlbWVudDNERGlyZWN0TGluZU1lYXN1cmVtZW50M0RWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNEaXJlY3Rpb25hbFBhZCxcbiAgaW1wb3J0V2lkZ2V0c0RpcmVjdGlvbmFsUGFkRGlyZWN0aW9uYWxQYWRWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNEaXJlY3Rpb25zLFxuICBpbXBvcnRXaWRnZXRzRGlyZWN0aW9uc0RpcmVjdGlvbnNWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNEaXN0YW5jZU1lYXN1cmVtZW50MkQsXG4gIGltcG9ydFdpZGdldHNEaXN0YW5jZU1lYXN1cmVtZW50MkREaXN0YW5jZU1lYXN1cmVtZW50MkRWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNFZGl0b3IsXG4gIGltcG9ydFdpZGdldHNFZGl0b3JDcmVhdGVGZWF0dXJlc1dvcmtmbG93LFxuICBpbXBvcnRXaWRnZXRzRWRpdG9yQ3JlYXRlRmVhdHVyZXNXb3JrZmxvd0RhdGEsXG4gIGltcG9ydFdpZGdldHNFZGl0b3JFZGl0b3JWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNFZGl0b3JFZGl0cyxcbiAgaW1wb3J0V2lkZ2V0c0VkaXRvclN1cHBvcnRFZGl0b3JJdGVtLFxuICBpbXBvcnRXaWRnZXRzRWRpdG9yVXBkYXRlRmVhdHVyZXNXb3JrZmxvd0RhdGEsXG4gIGltcG9ydFdpZGdldHNFZGl0b3JVcGRhdGVXb3JrZmxvdyxcbiAgaW1wb3J0V2lkZ2V0c0VkaXRvclVwZGF0ZVdvcmtmbG93RGF0YSxcbiAgaW1wb3J0V2lkZ2V0c0VkaXRvcldvcmtmbG93LFxuICBpbXBvcnRXaWRnZXRzRWxldmF0aW9uUHJvZmlsZSxcbiAgaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZSxcbiAgaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUdyb3VuZCxcbiAgaW1wb3J0V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUlucHV0LFxuICBpbXBvcnRXaWRnZXRzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lUXVlcnksXG4gIGltcG9ydFdpZGdldHNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUxpbmVWaWV3LFxuICBpbXBvcnRXaWRnZXRzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNFeHBhbmQsXG4gIGltcG9ydFdpZGdldHNFeHBhbmRFeHBhbmRWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlLFxuICBpbXBvcnRXaWRnZXRzRmVhdHVyZUZlYXR1cmVWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybSxcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVGb3JtRmVhdHVyZUZvcm1WaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybUZpZWxkSW5wdXQsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybUdyb3VwSW5wdXQsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlRm9ybVJlbGF0aW9uc2hpcElucHV0LFxuICBpbXBvcnRXaWRnZXRzRmVhdHVyZUZvcm1UZXh0RWxlbWVudElucHV0LFxuICBpbXBvcnRXaWRnZXRzRmVhdHVyZUZvcm1VdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uSW5wdXQsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGUsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVBY3Rpb25Db2x1bW4sXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVBdHRhY2htZW50c0NvbHVtbixcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUZlYXR1cmVUYWJsZVZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUZpZWxkQ29sdW1uLFxuICBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlR3JpZENvbHVtbixcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRHcm91cENvbHVtbixcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRTdXBwb3J0QnV0dG9uTWVudSxcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRTdXBwb3J0QnV0dG9uTWVudUl0ZW0sXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVHcmlkU3VwcG9ydEJ1dHRvbk1lbnVWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVSZWxhdGlvbnNoaXBDb2x1bW4sXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0QXR0YWNobWVudHNDb2x1bW5UZW1wbGF0ZSxcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRBdHRhY2htZW50c1ZpZXdPcHRpb25zLFxuICBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydENvbHVtblRlbXBsYXRlLFxuICBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydENvbHVtblRlbXBsYXRlQmFzZSxcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRGaWVsZENvbHVtblRlbXBsYXRlLFxuICBpbXBvcnRXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydEdyb3VwQ29sdW1uVGVtcGxhdGUsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0UmVsYXRpb25zaGlwQ29sdW1uVGVtcGxhdGUsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0VGFibGVUZW1wbGF0ZSxcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUZW1wbGF0ZXMsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGVtcGxhdGVzRmVhdHVyZVRlbXBsYXRlc1ZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVUZW1wbGF0ZXNUZW1wbGF0ZUl0ZW0sXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlVGVtcGxhdGVzVGVtcGxhdGVJdGVtR3JvdXAsXG4gIGltcG9ydFdpZGdldHNGZWF0dXJlcyxcbiAgaW1wb3J0V2lkZ2V0c0ZlYXR1cmVzRmVhdHVyZXNWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNGbG9vckZpbHRlcixcbiAgaW1wb3J0V2lkZ2V0c0Zsb29yRmlsdGVyRmxvb3JGaWx0ZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNGdWxsc2NyZWVuLFxuICBpbXBvcnRXaWRnZXRzRnVsbHNjcmVlbkZ1bGxzY3JlZW5WaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNIaXN0b2dyYW0sXG4gIGltcG9ydFdpZGdldHNIaXN0b2dyYW1IaXN0b2dyYW1WaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNIaXN0b2dyYW1SYW5nZVNsaWRlcixcbiAgaW1wb3J0V2lkZ2V0c0hpc3RvZ3JhbVJhbmdlU2xpZGVySGlzdG9ncmFtUmFuZ2VTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNIb21lLFxuICBpbXBvcnRXaWRnZXRzSG9tZUhvbWVWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNMYXllckxpc3QsXG4gIGltcG9ydFdpZGdldHNMYXllckxpc3RMYXllckxpc3RWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNMYXllckxpc3RMaXN0SXRlbSxcbiAgaW1wb3J0V2lkZ2V0c0xheWVyTGlzdExpc3RJdGVtUGFuZWwsXG4gIGltcG9ydFdpZGdldHNMZWdlbmQsXG4gIGltcG9ydFdpZGdldHNMZWdlbmRMZWdlbmRWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNMZWdlbmRTdXBwb3J0QWN0aXZlTGF5ZXJJbmZvLFxuICBpbXBvcnRXaWRnZXRzTGluZU9mU2lnaHQsXG4gIGltcG9ydFdpZGdldHNMaW5lT2ZTaWdodExpbmVPZlNpZ2h0VGFyZ2V0LFxuICBpbXBvcnRXaWRnZXRzTGluZU9mU2lnaHRMaW5lT2ZTaWdodFZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c0xpbmtDaGFydExheW91dFN3aXRjaGVyTGlua0NoYXJ0TGF5b3V0U3dpdGNoZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNMb2NhdGUsXG4gIGltcG9ydFdpZGdldHNMb2NhdGVMb2NhdGVWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNNZWFzdXJlbWVudCxcbiAgaW1wb3J0V2lkZ2V0c01lYXN1cmVtZW50TWVhc3VyZW1lbnRWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNOYXZpZ2F0aW9uVG9nZ2xlLFxuICBpbXBvcnRXaWRnZXRzTmF2aWdhdGlvblRvZ2dsZU5hdmlnYXRpb25Ub2dnbGVWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNPcmllbnRlZEltYWdlcnlWaWV3ZXIsXG4gIGltcG9ydFdpZGdldHNPcmllbnRlZEltYWdlcnlWaWV3ZXJPcmllbnRlZEltYWdlcnlWaWV3ZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNQb3B1cCxcbiAgaW1wb3J0V2lkZ2V0c1BvcHVwUG9wdXBWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNQcmludCxcbiAgaW1wb3J0V2lkZ2V0c1ByaW50Q3VzdG9tVGVtcGxhdGUsXG4gIGltcG9ydFdpZGdldHNQcmludFByaW50Vmlld01vZGVsLFxuICBpbXBvcnRXaWRnZXRzUHJpbnRUZW1wbGF0ZU9wdGlvbnMsXG4gIGltcG9ydFdpZGdldHNTY2FsZUJhcixcbiAgaW1wb3J0V2lkZ2V0c1NjYWxlQmFyU2NhbGVCYXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTY2FsZVJhbmdlU2xpZGVyLFxuICBpbXBvcnRXaWRnZXRzU2NhbGVSYW5nZVNsaWRlclNjYWxlUmFuZ2VTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTY2FsZVJhbmdlU2xpZGVyU2NhbGVSYW5nZXMsXG4gIGltcG9ydFdpZGdldHNTZWFyY2gsXG4gIGltcG9ydFdpZGdldHNTZWFyY2hMYXllclNlYXJjaFNvdXJjZSxcbiAgaW1wb3J0V2lkZ2V0c1NlYXJjaExvY2F0b3JTZWFyY2hTb3VyY2UsXG4gIGltcG9ydFdpZGdldHNTZWFyY2hTZWFyY2hSZXN1bHRSZW5kZXJlcixcbiAgaW1wb3J0V2lkZ2V0c1NlYXJjaFNlYXJjaFNvdXJjZSxcbiAgaW1wb3J0V2lkZ2V0c1NlYXJjaFNlYXJjaFZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c1NoYWRvd0Nhc3QsXG4gIGltcG9ydFdpZGdldHNTaGFkb3dDYXN0RGlzY3JldGVPcHRpb25zLFxuICBpbXBvcnRXaWRnZXRzU2hhZG93Q2FzdER1cmF0aW9uT3B0aW9ucyxcbiAgaW1wb3J0V2lkZ2V0c1NoYWRvd0Nhc3RTaGFkb3dDYXN0Vmlld01vZGVsLFxuICBpbXBvcnRXaWRnZXRzU2hhZG93Q2FzdFRocmVzaG9sZE9wdGlvbnMsXG4gIGltcG9ydFdpZGdldHNTa2V0Y2gsXG4gIGltcG9ydFdpZGdldHNTa2V0Y2hTa2V0Y2hWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbGljZSxcbiAgaW1wb3J0V2lkZ2V0c1NsaWNlU2xpY2VWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbGlkZXIsXG4gIGltcG9ydFdpZGdldHNTbGlkZXJTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdCaW5hcnlDb2xvclNpemVTbGlkZXIsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdCaW5hcnlDb2xvclNpemVTbGlkZXJCaW5hcnlDb2xvclNpemVTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkQ29sb3JTbGlkZXIsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkQ29sb3JTbGlkZXJDbGFzc2VkQ29sb3JTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkU2l6ZVNsaWRlcixcbiAgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0NsYXNzZWRTaXplU2xpZGVyQ2xhc3NlZFNpemVTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdDb2xvclNpemVTbGlkZXIsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdDb2xvclNpemVTbGlkZXJDb2xvclNpemVTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdDb2xvclNsaWRlcixcbiAgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ0NvbG9yU2xpZGVyQ29sb3JTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdIZWF0bWFwU2xpZGVyLFxuICBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nSGVhdG1hcFNsaWRlckhlYXRtYXBTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdPcGFjaXR5U2xpZGVyLFxuICBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nT3BhY2l0eVNsaWRlck9wYWNpdHlTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdTaXplU2xpZGVyLFxuICBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nU2l6ZVNsaWRlclNpemVTbGlkZXJWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTbWFydE1hcHBpbmdTbWFydE1hcHBpbmdQcmltYXJ5SGFuZGxlU2xpZGVyVmlld01vZGVsLFxuICBpbXBvcnRXaWRnZXRzU21hcnRNYXBwaW5nU21hcnRNYXBwaW5nU2xpZGVyQmFzZSxcbiAgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ1NtYXJ0TWFwcGluZ1NsaWRlclZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c1NtYXJ0TWFwcGluZ1N1cHBvcnRVdGlscyxcbiAgaW1wb3J0V2lkZ2V0c1N1cHBvcnRHcmlkQ29udHJvbHMsXG4gIGltcG9ydFdpZGdldHNTdXBwb3J0R3JpZENvbnRyb2xzR3JpZENvbnRyb2xzVmlld01vZGVsLFxuICBpbXBvcnRXaWRnZXRzU3VwcG9ydFNuYXBwaW5nQ29udHJvbHMsXG4gIGltcG9ydFdpZGdldHNTdXBwb3J0U25hcHBpbmdDb250cm9sc1NuYXBwaW5nQ29udHJvbHNWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNTdXBwb3J0V2lkZ2V0LFxuICBpbXBvcnRXaWRnZXRzU3dpcGUsXG4gIGltcG9ydFdpZGdldHNTd2lwZVN3aXBlVmlld01vZGVsLFxuICBpbXBvcnRXaWRnZXRzVGFibGVMaXN0LFxuICBpbXBvcnRXaWRnZXRzVGFibGVMaXN0TGlzdEl0ZW0sXG4gIGltcG9ydFdpZGdldHNUYWJsZUxpc3RMaXN0SXRlbVBhbmVsLFxuICBpbXBvcnRXaWRnZXRzVGFibGVMaXN0VGFibGVMaXN0Vmlld01vZGVsLFxuICBpbXBvcnRXaWRnZXRzVGltZVNsaWRlcixcbiAgaW1wb3J0V2lkZ2V0c1RpbWVTbGlkZXJUaW1lU2xpZGVyVmlld01vZGVsLFxuICBpbXBvcnRXaWRnZXRzVGltZVpvbmVMYWJlbCxcbiAgaW1wb3J0V2lkZ2V0c1RyYWNrLFxuICBpbXBvcnRXaWRnZXRzVHJhY2tUcmFja1ZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zLFxuICBpbXBvcnRXaWRnZXRzVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnNVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uc1ZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c1V0aWxpdHlOZXR3b3JrVHJhY2UsXG4gIGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya1RyYWNlQW5hbHlzaXNVdGlsaXR5TmV0d29ya1RyYWNlQW5hbHlzaXNWaWV3TW9kZWwsXG4gIGltcG9ydFdpZGdldHNVdGlsaXR5TmV0d29ya1RyYWNlVXRpbGl0eU5ldHdvcmtUcmFjZVZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c1V0aWxpdHlOZXR3b3JrVmFsaWRhdGVUb3BvbG9neSxcbiAgaW1wb3J0V2lkZ2V0c1V0aWxpdHlOZXR3b3JrVmFsaWRhdGVUb3BvbG9neVV0aWxpdHlOZXR3b3JrVmFsaWRhdGVUb3BvbG9neVZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c1ZhbHVlUGlja2VyLFxuICBpbXBvcnRXaWRnZXRzVmFsdWVQaWNrZXJWYWx1ZVBpY2tlckNvbGxlY3Rpb24sXG4gIGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyQ29tYm9ib3gsXG4gIGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyTGFiZWwsXG4gIGltcG9ydFdpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyU2xpZGVyLFxuICBpbXBvcnRXaWRnZXRzVmVyc2lvbk1hbmFnZW1lbnRWZXJzaW9uTWFuYWdlbWVudFZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c1ZpZGVvUGxheWVyLFxuICBpbXBvcnRXaWRnZXRzVmlkZW9QbGF5ZXJWaWRlb1BsYXllclZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c1dlYXRoZXIsXG4gIGltcG9ydFdpZGdldHNXZWF0aGVyV2VhdGhlclZpZXdNb2RlbCxcbiAgaW1wb3J0V2lkZ2V0c1dpZGdldCxcbiAgaW1wb3J0V2lkZ2V0c1pvb20sXG4gIGltcG9ydFdpZGdldHNab29tWm9vbVZpZXdNb2RlbCxcbiAgbG9hZFVuZG9jdW1lbnRlZE1vZHVsZSxcbiAgbmV3QW5hbHlzaXNBbmFseXNpcyxcbiAgbmV3QW5hbHlzaXNBcmVhTWVhc3VyZW1lbnRBbmFseXNpcyxcbiAgbmV3QW5hbHlzaXNEaW1lbnNpb25BbmFseXNpcyxcbiAgbmV3QW5hbHlzaXNEaW1lbnNpb25TaW1wbGVTdHlsZSxcbiAgbmV3QW5hbHlzaXNEaXJlY3RMaW5lTWVhc3VyZW1lbnRBbmFseXNpcyxcbiAgbmV3QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlQW5hbHlzaXMsXG4gIG5ld0FuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVHcm91bmRMaW5lLFxuICBuZXdBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlSW5wdXRMaW5lLFxuICBuZXdBbmFseXNpc0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZSxcbiAgbmV3QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUxpbmVDaGFydE9wdGlvbnMsXG4gIG5ld0FuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lVmlld09wdGlvbnMsXG4gIG5ld0FuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVRdWVyeUxpbmUsXG4gIG5ld0FuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVTY2VuZUxpbmUsXG4gIG5ld0FuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVVbml0cyxcbiAgbmV3QW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVZpZXdPcHRpb25zLFxuICBuZXdBbmFseXNpc0xlbmd0aERpbWVuc2lvbixcbiAgbmV3QW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzLFxuICBuZXdBbmFseXNpc0xpbmVPZlNpZ2h0QW5hbHlzaXNPYnNlcnZlcixcbiAgbmV3QW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzVGFyZ2V0LFxuICBuZXdBbmFseXNpc1NsaWNlQW5hbHlzaXMsXG4gIG5ld0FuYWx5c2lzU2xpY2VQbGFuZSxcbiAgbmV3QW5hbHlzaXNTdXBwb3J0QW5hbHlzaXNPcmlnaW5XZWJTY2VuZSxcbiAgbmV3QW5hbHlzaXNWaWV3c2hlZCxcbiAgbmV3QW5hbHlzaXNWaWV3c2hlZEFuYWx5c2lzLFxuICBuZXdBbmFseXNpc1ZvbHVtZU1lYXN1cmVtZW50QW5hbHlzaXMsXG4gIG5ld0FuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRWb2x1bWVNZWFzdXJlbWVudEN1dEZpbGxPcHRpb25zLFxuICBuZXdBbmFseXNpc1ZvbHVtZU1lYXN1cmVtZW50Vm9sdW1lTWVhc3VyZW1lbnREaXNwbGF5VW5pdHMsXG4gIG5ld0FuYWx5c2lzVm9sdW1lTWVhc3VyZW1lbnRWb2x1bWVNZWFzdXJlbWVudElucHV0VW5pdHMsXG4gIG5ld0F0dHJpYnV0ZUJpbnNHcmFwaGljLFxuICBuZXdCYXNlbWFwLFxuICBuZXdDYW1lcmEsXG4gIG5ld0NhbWVyYUxheW91dCxcbiAgbmV3Q29sb3IsXG4gIG5ld0NvcmVBY2Nlc3NvcixcbiAgbmV3Q29yZUNvbGxlY3Rpb24sXG4gIG5ld0NvcmVFcnJvcixcbiAgbmV3Q29yZUhhbmRsZXMsXG4gIG5ld0NvcmVXb3JrZXJzQ29ubmVjdGlvbixcbiAgbmV3RWZmZWN0c0ZvY3VzQXJlYSxcbiAgbmV3RWZmZWN0c0ZvY3VzQXJlYU91dGxpbmUsXG4gIG5ld0VmZmVjdHNGb2N1c0FyZWFzLFxuICBuZXdGb3JtRWxlbWVudHNBdHRhY2htZW50RWxlbWVudCxcbiAgbmV3Rm9ybUVsZW1lbnRzRWxlbWVudCxcbiAgbmV3Rm9ybUVsZW1lbnRzRmllbGRFbGVtZW50LFxuICBuZXdGb3JtRWxlbWVudHNHcm91cEVsZW1lbnQsXG4gIG5ld0Zvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzQXR0YWNobWVudElucHV0LFxuICBuZXdGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c0F1ZGlvSW5wdXQsXG4gIG5ld0Zvcm1FbGVtZW50c0lucHV0c0F0dGFjaG1lbnRzRG9jdW1lbnRJbnB1dCxcbiAgbmV3Rm9ybUVsZW1lbnRzSW5wdXRzQXR0YWNobWVudHNJbWFnZUlucHV0LFxuICBuZXdGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c1NpZ25hdHVyZUlucHV0LFxuICBuZXdGb3JtRWxlbWVudHNJbnB1dHNBdHRhY2htZW50c1ZpZGVvSW5wdXQsXG4gIG5ld0Zvcm1FbGVtZW50c0lucHV0c0JhcmNvZGVTY2FubmVySW5wdXQsXG4gIG5ld0Zvcm1FbGVtZW50c0lucHV0c0NvbWJvQm94SW5wdXQsXG4gIG5ld0Zvcm1FbGVtZW50c0lucHV0c0RhdGVQaWNrZXJJbnB1dCxcbiAgbmV3Rm9ybUVsZW1lbnRzSW5wdXRzRGF0ZVRpbWVPZmZzZXRQaWNrZXJJbnB1dCxcbiAgbmV3Rm9ybUVsZW1lbnRzSW5wdXRzRGF0ZVRpbWVQaWNrZXJJbnB1dCxcbiAgbmV3Rm9ybUVsZW1lbnRzSW5wdXRzUmFkaW9CdXR0b25zSW5wdXQsXG4gIG5ld0Zvcm1FbGVtZW50c0lucHV0c1N3aXRjaElucHV0LFxuICBuZXdGb3JtRWxlbWVudHNJbnB1dHNUZXh0QXJlYUlucHV0LFxuICBuZXdGb3JtRWxlbWVudHNJbnB1dHNUZXh0Qm94SW5wdXQsXG4gIG5ld0Zvcm1FbGVtZW50c0lucHV0c1RpbWVQaWNrZXJJbnB1dCxcbiAgbmV3Rm9ybUVsZW1lbnRzUmVsYXRpb25zaGlwRWxlbWVudCxcbiAgbmV3Rm9ybUVsZW1lbnRzVGV4dEVsZW1lbnQsXG4gIG5ld0Zvcm1FbGVtZW50c1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zRWxlbWVudCxcbiAgbmV3Rm9ybUV4cHJlc3Npb25JbmZvLFxuICBuZXdGb3JtRm9ybVRlbXBsYXRlLFxuICBuZXdHZW9tZXRyeUNpcmNsZSxcbiAgbmV3R2VvbWV0cnlFeHRlbnQsXG4gIG5ld0dlb21ldHJ5R2VvbWV0cnksXG4gIG5ld0dlb21ldHJ5SGVpZ2h0TW9kZWxJbmZvLFxuICBuZXdHZW9tZXRyeU1lc2gsXG4gIG5ld0dlb21ldHJ5TXVsdGlwb2ludCxcbiAgbmV3R2VvbWV0cnlPcGVyYXRvcnNTdXBwb3J0R2VvZ3JhcGhpY1RyYW5zZm9ybWF0aW9uLFxuICBuZXdHZW9tZXRyeU9wZXJhdG9yc1N1cHBvcnRHZW9ncmFwaGljVHJhbnNmb3JtYXRpb25TdGVwLFxuICBuZXdHZW9tZXRyeU9wZXJhdG9yc1N1cHBvcnRUcmFuc2Zvcm1hdGlvbixcbiAgbmV3R2VvbWV0cnlQb2ludCxcbiAgbmV3R2VvbWV0cnlQb2x5Z29uLFxuICBuZXdHZW9tZXRyeVBvbHlsaW5lLFxuICBuZXdHZW9tZXRyeVNwYXRpYWxSZWZlcmVuY2UsXG4gIG5ld0dlb21ldHJ5U3VwcG9ydEdlb2dyYXBoaWNUcmFuc2Zvcm1hdGlvbixcbiAgbmV3R2VvbWV0cnlTdXBwb3J0R2VvZ3JhcGhpY1RyYW5zZm9ybWF0aW9uU3RlcCxcbiAgbmV3R2VvbWV0cnlTdXBwb3J0TWVzaENvbXBvbmVudCxcbiAgbmV3R2VvbWV0cnlTdXBwb3J0TWVzaEdlb3JlZmVyZW5jZWRWZXJ0ZXhTcGFjZSxcbiAgbmV3R2VvbWV0cnlTdXBwb3J0TWVzaExvY2FsVmVydGV4U3BhY2UsXG4gIG5ld0dlb21ldHJ5U3VwcG9ydE1lc2hNYXRlcmlhbCxcbiAgbmV3R2VvbWV0cnlTdXBwb3J0TWVzaE1hdGVyaWFsTWV0YWxsaWNSb3VnaG5lc3MsXG4gIG5ld0dlb21ldHJ5U3VwcG9ydE1lc2hUZXh0dXJlLFxuICBuZXdHZW9tZXRyeVN1cHBvcnRNZXNoVGV4dHVyZVRyYW5zZm9ybSxcbiAgbmV3R2VvbWV0cnlTdXBwb3J0TWVzaFRyYW5zZm9ybSxcbiAgbmV3R3JhcGhpYyxcbiAgbmV3R3JhcGhpY0dyYXBoaWNPcmlnaW4sXG4gIG5ld0dyYXBoaWNWZWN0b3JUaWxlR3JhcGhpY09yaWdpbixcbiAgbmV3R3JvdW5kLFxuICBuZXdJZGVudGl0eUNyZWRlbnRpYWwsXG4gIG5ld0lkZW50aXR5T0F1dGhJbmZvLFxuICBuZXdJZGVudGl0eVNlcnZlckluZm8sXG4gIG5ld0xheWVyc0Jhc2VEeW5hbWljTGF5ZXIsXG4gIG5ld0xheWVyc0Jhc2VFbGV2YXRpb25MYXllcixcbiAgbmV3TGF5ZXJzQmFzZVRpbGVMYXllcixcbiAgbmV3TGF5ZXJzQmluZ01hcHNMYXllcixcbiAgbmV3TGF5ZXJzQnVpbGRpbmdTY2VuZUxheWVyLFxuICBuZXdMYXllcnNCdWlsZGluZ1N1YmxheWVyc0J1aWxkaW5nQ29tcG9uZW50U3VibGF5ZXIsXG4gIG5ld0xheWVyc0J1aWxkaW5nU3VibGF5ZXJzQnVpbGRpbmdHcm91cFN1YmxheWVyLFxuICBuZXdMYXllcnNCdWlsZGluZ1N1YmxheWVyc0J1aWxkaW5nU3VibGF5ZXIsXG4gIG5ld0xheWVyc0NTVkxheWVyLFxuICBuZXdMYXllcnNDYXRhbG9nQ2F0YWxvZ0R5bmFtaWNHcm91cExheWVyLFxuICBuZXdMYXllcnNDYXRhbG9nQ2F0YWxvZ0Zvb3RwcmludExheWVyLFxuICBuZXdMYXllcnNDYXRhbG9nTGF5ZXIsXG4gIG5ld0xheWVyc0RpbWVuc2lvbkxheWVyLFxuICBuZXdMYXllcnNFbGV2YXRpb25MYXllcixcbiAgbmV3TGF5ZXJzRmVhdHVyZUxheWVyLFxuICBuZXdMYXllcnNHZW9KU09OTGF5ZXIsXG4gIG5ld0xheWVyc0dlb1JTU0xheWVyLFxuICBuZXdMYXllcnNHcmFwaGljc0xheWVyLFxuICBuZXdMYXllcnNHcm91cExheWVyLFxuICBuZXdMYXllcnNJbWFnZXJ5TGF5ZXIsXG4gIG5ld0xheWVyc0ltYWdlcnlUaWxlTGF5ZXIsXG4gIG5ld0xheWVyc0ludGVncmF0ZWRNZXNoM0RUaWxlc0xheWVyLFxuICBuZXdMYXllcnNJbnRlZ3JhdGVkTWVzaExheWVyLFxuICBuZXdMYXllcnNLTUxMYXllcixcbiAgbmV3TGF5ZXJzS25vd2xlZGdlR3JhcGhLbm93bGVkZ2VHcmFwaFN1YmxheWVyLFxuICBuZXdMYXllcnNLbm93bGVkZ2VHcmFwaExheWVyLFxuICBuZXdMYXllcnNMYXllcixcbiAgbmV3TGF5ZXJzTGluZU9mU2lnaHRMYXllcixcbiAgbmV3TGF5ZXJzTGlua0NoYXJ0TGF5ZXIsXG4gIG5ld0xheWVyc01hcEltYWdlTGF5ZXIsXG4gIG5ld0xheWVyc01hcE5vdGVzTGF5ZXIsXG4gIG5ld0xheWVyc01lZGlhTGF5ZXIsXG4gIG5ld0xheWVyc09HQ0ZlYXR1cmVMYXllcixcbiAgbmV3TGF5ZXJzT3BlblN0cmVldE1hcExheWVyLFxuICBuZXdMYXllcnNPcmllbnRlZEltYWdlcnlMYXllcixcbiAgbmV3TGF5ZXJzUGFycXVldExheWVyLFxuICBuZXdMYXllcnNQb2ludENsb3VkRmlsdGVyc1BvaW50Q2xvdWRCaXRmaWVsZEZpbHRlcixcbiAgbmV3TGF5ZXJzUG9pbnRDbG91ZEZpbHRlcnNQb2ludENsb3VkRmlsdGVyLFxuICBuZXdMYXllcnNQb2ludENsb3VkRmlsdGVyc1BvaW50Q2xvdWRSZXR1cm5GaWx0ZXIsXG4gIG5ld0xheWVyc1BvaW50Q2xvdWRGaWx0ZXJzUG9pbnRDbG91ZFZhbHVlRmlsdGVyLFxuICBuZXdMYXllcnNQb2ludENsb3VkTGF5ZXIsXG4gIG5ld0xheWVyc1JvdXRlTGF5ZXIsXG4gIG5ld0xheWVyc1NjZW5lTGF5ZXIsXG4gIG5ld0xheWVyc1N0cmVhbUxheWVyLFxuICBuZXdMYXllcnNTdWJ0eXBlR3JvdXBMYXllcixcbiAgbmV3TGF5ZXJzU3VwcG9ydEFnZ3JlZ2F0ZUZpZWxkLFxuICBuZXdMYXllcnNTdXBwb3J0QnVpbGRpbmdGaWx0ZXIsXG4gIG5ld0xheWVyc1N1cHBvcnRCdWlsZGluZ1N1bW1hcnlTdGF0aXN0aWNzLFxuICBuZXdMYXllcnNTdXBwb3J0Q29kZWRWYWx1ZURvbWFpbixcbiAgbmV3TGF5ZXJzU3VwcG9ydENvbnRyb2xQb2ludHNHZW9yZWZlcmVuY2UsXG4gIG5ld0xheWVyc1N1cHBvcnRDb3JuZXJzR2VvcmVmZXJlbmNlLFxuICBuZXdMYXllcnNTdXBwb3J0RGltZW5zaW9uYWxEZWZpbml0aW9uLFxuICBuZXdMYXllcnNTdXBwb3J0RGlzcGxheUZpbHRlcixcbiAgbmV3TGF5ZXJzU3VwcG9ydERpc3BsYXlGaWx0ZXJJbmZvLFxuICBuZXdMYXllcnNTdXBwb3J0RG9tYWluLFxuICBuZXdMYXllcnNTdXBwb3J0RWxldmF0aW9uU2FtcGxlcixcbiAgbmV3TGF5ZXJzU3VwcG9ydEV4cHJlc3Npb25JbmZvLFxuICBuZXdMYXllcnNTdXBwb3J0RXh0ZW50QW5kUm90YXRpb25HZW9yZWZlcmVuY2UsXG4gIG5ld0xheWVyc1N1cHBvcnRGYWNpbGl0eUxheWVySW5mbyxcbiAgbmV3TGF5ZXJzU3VwcG9ydEZlYXR1cmVFZmZlY3QsXG4gIG5ld0xheWVyc1N1cHBvcnRGZWF0dXJlRmlsdGVyLFxuICBuZXdMYXllcnNTdXBwb3J0RmVhdHVyZVJlZHVjdGlvbkJpbm5pbmcsXG4gIG5ld0xheWVyc1N1cHBvcnRGZWF0dXJlUmVkdWN0aW9uQ2x1c3RlcixcbiAgbmV3TGF5ZXJzU3VwcG9ydEZlYXR1cmVSZWR1Y3Rpb25TZWxlY3Rpb24sXG4gIG5ld0xheWVyc1N1cHBvcnRGZWF0dXJlVGVtcGxhdGUsXG4gIG5ld0xheWVyc1N1cHBvcnRGZWF0dXJlVHlwZSxcbiAgbmV3TGF5ZXJzU3VwcG9ydEZpZWxkLFxuICBuZXdMYXllcnNTdXBwb3J0RmllbGRzSW5kZXgsXG4gIG5ld0xheWVyc1N1cHBvcnRHZW9tZXRyeUZpZWxkc0luZm8sXG4gIG5ld0xheWVyc1N1cHBvcnRJbWFnZUVsZW1lbnQsXG4gIG5ld0xheWVyc1N1cHBvcnRJbmhlcml0ZWREb21haW4sXG4gIG5ld0xheWVyc1N1cHBvcnRLTUxTdWJsYXllcixcbiAgbmV3TGF5ZXJzU3VwcG9ydExPRCxcbiAgbmV3TGF5ZXJzU3VwcG9ydExhYmVsQ2xhc3MsXG4gIG5ld0xheWVyc1N1cHBvcnRMYXllckZsb29ySW5mbyxcbiAgbmV3TGF5ZXJzU3VwcG9ydExldmVsTGF5ZXJJbmZvLFxuICBuZXdMYXllcnNTdXBwb3J0TG9jYWxNZWRpYUVsZW1lbnRTb3VyY2UsXG4gIG5ld0xheWVyc1N1cHBvcnRNYXBJbWFnZSxcbiAgbmV3TGF5ZXJzU3VwcG9ydE1vc2FpY1J1bGUsXG4gIG5ld0xheWVyc1N1cHBvcnRNdWx0aWRpbWVuc2lvbmFsU3Vic2V0LFxuICBuZXdMYXllcnNTdXBwb3J0T3JkZXJCeUluZm8sXG4gIG5ld0xheWVyc1N1cHBvcnRQYXJxdWV0RW5jb2RpbmdMb2NhdGlvbixcbiAgbmV3TGF5ZXJzU3VwcG9ydFBhcnF1ZXRFbmNvZGluZ1drYixcbiAgbmV3TGF5ZXJzU3VwcG9ydFBpeGVsQmxvY2ssXG4gIG5ld0xheWVyc1N1cHBvcnRQbGF5YmFja0luZm8sXG4gIG5ld0xheWVyc1N1cHBvcnRQdWJsaXNoaW5nSW5mbyxcbiAgbmV3TGF5ZXJzU3VwcG9ydFJhbmdlRG9tYWluLFxuICBuZXdMYXllcnNTdXBwb3J0UmFzdGVyQmFuZEluZm8sXG4gIG5ld0xheWVyc1N1cHBvcnRSYXN0ZXJGdW5jdGlvbixcbiAgbmV3TGF5ZXJzU3VwcG9ydFJhc3RlckluZm8sXG4gIG5ld0xheWVyc1N1cHBvcnRSYXN0ZXJTZW5zb3JJbmZvLFxuICBuZXdMYXllcnNTdXBwb3J0UmVsYXRpb25zaGlwLFxuICBuZXdMYXllcnNTdXBwb3J0Um91dGVTdG9wU3ltYm9scyxcbiAgbmV3TGF5ZXJzU3VwcG9ydFJvdXRlU3ltYm9scyxcbiAgbmV3TGF5ZXJzU3VwcG9ydFNjZW5lRmlsdGVyLFxuICBuZXdMYXllcnNTdXBwb3J0U2NlbmVNb2RpZmljYXRpb24sXG4gIG5ld0xheWVyc1N1cHBvcnRTY2VuZU1vZGlmaWNhdGlvbnMsXG4gIG5ld0xheWVyc1N1cHBvcnRTaXRlTGF5ZXJJbmZvLFxuICBuZXdMYXllcnNTdXBwb3J0U3VibGF5ZXIsXG4gIG5ld0xheWVyc1N1cHBvcnRTdWJ0eXBlLFxuICBuZXdMYXllcnNTdXBwb3J0U3VidHlwZVN1YmxheWVyLFxuICBuZXdMYXllcnNTdXBwb3J0VGVsZW1ldHJ5RGF0YSxcbiAgbmV3TGF5ZXJzU3VwcG9ydFRlbGVtZXRyeURpc3BsYXksXG4gIG5ld0xheWVyc1N1cHBvcnRUaWxlSW5mbyxcbiAgbmV3TGF5ZXJzU3VwcG9ydFRpbGVNYXRyaXhTZXQsXG4gIG5ld0xheWVyc1N1cHBvcnRUaW1lSW5mbyxcbiAgbmV3TGF5ZXJzU3VwcG9ydFRyYWNrSW5mbyxcbiAgbmV3TGF5ZXJzU3VwcG9ydFRyYWNrUGFydEluZm8sXG4gIG5ld0xheWVyc1N1cHBvcnRWaWRlb0VsZW1lbnQsXG4gIG5ld0xheWVyc1N1cHBvcnRWaWRlb1RpbWVFeHRlbnQsXG4gIG5ld0xheWVyc1N1cHBvcnRXTVNTdWJsYXllcixcbiAgbmV3TGF5ZXJzU3VwcG9ydFdNVFNTdHlsZSxcbiAgbmV3TGF5ZXJzU3VwcG9ydFdNVFNTdWJsYXllcixcbiAgbmV3TGF5ZXJzVGlsZUxheWVyLFxuICBuZXdMYXllcnNVbmtub3duTGF5ZXIsXG4gIG5ld0xheWVyc1Vuc3VwcG9ydGVkTGF5ZXIsXG4gIG5ld0xheWVyc1ZlY3RvclRpbGVMYXllcixcbiAgbmV3TGF5ZXJzVmlkZW9MYXllcixcbiAgbmV3TGF5ZXJzVmlld3NoZWRMYXllcixcbiAgbmV3TGF5ZXJzVm94ZWxMYXllcixcbiAgbmV3TGF5ZXJzVm94ZWxWb3hlbER5bmFtaWNTZWN0aW9uLFxuICBuZXdMYXllcnNWb3hlbFZveGVsU2xpY2UsXG4gIG5ld0xheWVyc1ZveGVsVm94ZWxUcmFuc2ZlckZ1bmN0aW9uU3R5bGUsXG4gIG5ld0xheWVyc1ZveGVsVm94ZWxWYXJpYWJsZVN0eWxlLFxuICBuZXdMYXllcnNWb3hlbFZveGVsVm9sdW1lU3R5bGUsXG4gIG5ld0xheWVyc1dDU0xheWVyLFxuICBuZXdMYXllcnNXRlNMYXllcixcbiAgbmV3TGF5ZXJzV01TTGF5ZXIsXG4gIG5ld0xheWVyc1dNVFNMYXllcixcbiAgbmV3TGF5ZXJzV2ViVGlsZUxheWVyLFxuICBuZXdMaW5rQ2hhcnRDaHJvbm9sb2dpY2FsTGF5b3V0U2V0dGluZ3MsXG4gIG5ld0xpbmtDaGFydExheW91dFNldHRpbmdzLFxuICBuZXdMaW5rQ2hhcnRMaW5rQ2hhcnRQcm9wZXJ0aWVzLFxuICBuZXdMaW5rQ2hhcnROb25zcGF0aWFsRGF0YURpc3BsYXksXG4gIG5ld0xpbmtDaGFydE9yZ2FuaWNMYXlvdXRTZXR0aW5ncyxcbiAgbmV3TWFwLFxuICBuZXdOZXR3b3Jrc05ldHdvcmssXG4gIG5ld05ldHdvcmtzU3VwcG9ydE5hbWVkVHJhY2VDb25maWd1cmF0aW9uLFxuICBuZXdOZXR3b3Jrc1N1cHBvcnROZXR3b3JrU3lzdGVtTGF5ZXJzLFxuICBuZXdOZXR3b3Jrc1N1cHBvcnRUZXJtaW5hbCxcbiAgbmV3TmV0d29ya3NTdXBwb3J0VGVybWluYWxDb25maWd1cmF0aW9uLFxuICBuZXdOZXR3b3Jrc1N1cHBvcnRUb3BvbG9neVZhbGlkYXRpb25Kb2JJbmZvLFxuICBuZXdOZXR3b3Jrc1N1cHBvcnRUcmFjZUNvbmZpZ3VyYXRpb24sXG4gIG5ld05ldHdvcmtzU3VwcG9ydFRyYWNlSm9iSW5mbyxcbiAgbmV3TmV0d29ya3NTdXBwb3J0VU5UcmFjZUNvbmZpZ3VyYXRpb24sXG4gIG5ld05ldHdvcmtzVXRpbGl0eU5ldHdvcmssXG4gIG5ld1BvcHVwQ29udGVudEF0dGFjaG1lbnRzQ29udGVudCxcbiAgbmV3UG9wdXBDb250ZW50QmFyQ2hhcnRNZWRpYUluZm8sXG4gIG5ld1BvcHVwQ29udGVudENvbHVtbkNoYXJ0TWVkaWFJbmZvLFxuICBuZXdQb3B1cENvbnRlbnRDb250ZW50LFxuICBuZXdQb3B1cENvbnRlbnRDdXN0b21Db250ZW50LFxuICBuZXdQb3B1cENvbnRlbnRFeHByZXNzaW9uQ29udGVudCxcbiAgbmV3UG9wdXBDb250ZW50RmllbGRzQ29udGVudCxcbiAgbmV3UG9wdXBDb250ZW50SW1hZ2VNZWRpYUluZm8sXG4gIG5ld1BvcHVwQ29udGVudExpbmVDaGFydE1lZGlhSW5mbyxcbiAgbmV3UG9wdXBDb250ZW50TWVkaWFDb250ZW50LFxuICBuZXdQb3B1cENvbnRlbnRQaWVDaGFydE1lZGlhSW5mbyxcbiAgbmV3UG9wdXBDb250ZW50UmVsYXRpb25zaGlwQ29udGVudCxcbiAgbmV3UG9wdXBDb250ZW50U3VwcG9ydENoYXJ0TWVkaWFJbmZvVmFsdWUsXG4gIG5ld1BvcHVwQ29udGVudFN1cHBvcnRDaGFydE1lZGlhSW5mb1ZhbHVlU2VyaWVzLFxuICBuZXdQb3B1cENvbnRlbnRTdXBwb3J0SW1hZ2VNZWRpYUluZm9WYWx1ZSxcbiAgbmV3UG9wdXBDb250ZW50VGV4dENvbnRlbnQsXG4gIG5ld1BvcHVwQ29udGVudFV0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zQ29udGVudCxcbiAgbmV3UG9wdXBFbGVtZW50RXhwcmVzc2lvbkluZm8sXG4gIG5ld1BvcHVwRXhwcmVzc2lvbkluZm8sXG4gIG5ld1BvcHVwRmllbGRJbmZvLFxuICBuZXdQb3B1cExheWVyT3B0aW9ucyxcbiAgbmV3UG9wdXBSZWxhdGVkUmVjb3Jkc0luZm8sXG4gIG5ld1BvcHVwU3VwcG9ydEF0dGFjaG1lbnRzT3JkZXJCeUluZm8sXG4gIG5ld1BvcHVwU3VwcG9ydEZpZWxkSW5mb0Zvcm1hdCxcbiAgbmV3UG9wdXBTdXBwb3J0UmVsYXRlZFJlY29yZHNJbmZvRmllbGRPcmRlcixcbiAgbmV3UG9wdXBTdXBwb3J0VXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvblR5cGUsXG4gIG5ld1BvcHVwVGVtcGxhdGUsXG4gIG5ld1BvcnRhbFBvcnRhbCxcbiAgbmV3UG9ydGFsUG9ydGFsRm9sZGVyLFxuICBuZXdQb3J0YWxQb3J0YWxHcm91cCxcbiAgbmV3UG9ydGFsUG9ydGFsSXRlbSxcbiAgbmV3UG9ydGFsUG9ydGFsSXRlbVJlc291cmNlLFxuICBuZXdQb3J0YWxQb3J0YWxRdWVyeVBhcmFtcyxcbiAgbmV3UG9ydGFsUG9ydGFsUXVlcnlSZXN1bHQsXG4gIG5ld1BvcnRhbFBvcnRhbFJhdGluZyxcbiAgbmV3UG9ydGFsUG9ydGFsVXNlcixcbiAgbmV3UmVuZGVyZXJzQ2xhc3NCcmVha3NSZW5kZXJlcixcbiAgbmV3UmVuZGVyZXJzRGljdGlvbmFyeVJlbmRlcmVyLFxuICBuZXdSZW5kZXJlcnNEb3REZW5zaXR5UmVuZGVyZXIsXG4gIG5ld1JlbmRlcmVyc0Zsb3dSZW5kZXJlcixcbiAgbmV3UmVuZGVyZXJzSGVhdG1hcFJlbmRlcmVyLFxuICBuZXdSZW5kZXJlcnNQaWVDaGFydFJlbmRlcmVyLFxuICBuZXdSZW5kZXJlcnNQb2ludENsb3VkQ2xhc3NCcmVha3NSZW5kZXJlcixcbiAgbmV3UmVuZGVyZXJzUG9pbnRDbG91ZFJHQlJlbmRlcmVyLFxuICBuZXdSZW5kZXJlcnNQb2ludENsb3VkUmVuZGVyZXIsXG4gIG5ld1JlbmRlcmVyc1BvaW50Q2xvdWRTdHJldGNoUmVuZGVyZXIsXG4gIG5ld1JlbmRlcmVyc1BvaW50Q2xvdWRVbmlxdWVWYWx1ZVJlbmRlcmVyLFxuICBuZXdSZW5kZXJlcnNSYXN0ZXJDb2xvcm1hcFJlbmRlcmVyLFxuICBuZXdSZW5kZXJlcnNSYXN0ZXJTaGFkZWRSZWxpZWZSZW5kZXJlcixcbiAgbmV3UmVuZGVyZXJzUmFzdGVyU3RyZXRjaFJlbmRlcmVyLFxuICBuZXdSZW5kZXJlcnNSZW5kZXJlcixcbiAgbmV3UmVuZGVyZXJzU2ltcGxlUmVuZGVyZXIsXG4gIG5ld1JlbmRlcmVyc1N1cHBvcnRBdHRyaWJ1dGVDb2xvckluZm8sXG4gIG5ld1JlbmRlcmVyc1N1cHBvcnRBdXRob3JpbmdJbmZvLFxuICBuZXdSZW5kZXJlcnNTdXBwb3J0QXV0aG9yaW5nSW5mb1Zpc3VhbFZhcmlhYmxlLFxuICBuZXdSZW5kZXJlcnNTdXBwb3J0Q2xhc3NCcmVha0luZm8sXG4gIG5ld1JlbmRlcmVyc1N1cHBvcnRDb2xvcm1hcEluZm8sXG4gIG5ld1JlbmRlcmVyc1N1cHBvcnRIZWF0bWFwQ29sb3JTdG9wLFxuICBuZXdSZW5kZXJlcnNTdXBwb3J0UmFzdGVyUHJlc2V0UmVuZGVyZXIsXG4gIG5ld1JlbmRlcmVyc1N1cHBvcnRVbmlxdWVWYWx1ZSxcbiAgbmV3UmVuZGVyZXJzU3VwcG9ydFVuaXF1ZVZhbHVlQ2xhc3MsXG4gIG5ld1JlbmRlcmVyc1N1cHBvcnRVbmlxdWVWYWx1ZUdyb3VwLFxuICBuZXdSZW5kZXJlcnNTdXBwb3J0VW5pcXVlVmFsdWVJbmZvLFxuICBuZXdSZW5kZXJlcnNVbmlxdWVWYWx1ZVJlbmRlcmVyLFxuICBuZXdSZW5kZXJlcnNWZWN0b3JGaWVsZFJlbmRlcmVyLFxuICBuZXdSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNDb2xvclZhcmlhYmxlLFxuICBuZXdSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNPcGFjaXR5VmFyaWFibGUsXG4gIG5ld1JlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1JvdGF0aW9uVmFyaWFibGUsXG4gIG5ld1JlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1NpemVWYXJpYWJsZSxcbiAgbmV3UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzU3VwcG9ydENvbG9yU2l6ZVN0b3AsXG4gIG5ld1JlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1N1cHBvcnRDb2xvclN0b3AsXG4gIG5ld1JlbmRlcmVyc1Zpc3VhbFZhcmlhYmxlc1N1cHBvcnRPcGFjaXR5U3RvcCxcbiAgbmV3UmVuZGVyZXJzVmlzdWFsVmFyaWFibGVzU3VwcG9ydFNpemVTdG9wLFxuICBuZXdSZW5kZXJlcnNWaXN1YWxWYXJpYWJsZXNWaXN1YWxWYXJpYWJsZSxcbiAgbmV3UmVzdEZlYXR1cmVTZXJ2aWNlRmVhdHVyZVNlcnZpY2UsXG4gIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaERhdGFNb2RlbCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoRW50aXR5LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhFbnRpdHlUeXBlLFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhGaWVsZEluZGV4LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFkZEZpZWxkSW5kZXhSZXN1bHQsXG4gIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaEdyYXBoQWRkTmFtZWRUeXBlc1Jlc3VsdCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhBZGRQcm9wZXJ0eVJlc3VsdCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhBcHBseUVkaXRzLFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaEFwcGx5RWRpdHNSZXN1bHQsXG4gIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaEdyYXBoRGF0YU1vZGVsT3BlcmF0aW9uUmVzdWx0LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaERlbGV0ZUZpZWxkSW5kZXhSZXN1bHQsXG4gIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaEdyYXBoRGVsZXRlTmFtZWRUeXBlUmVzdWx0LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaERlbGV0ZVByb3BlcnR5UmVzdWx0LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaE5hbWVkT2JqZWN0LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaE9iamVjdCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhPYmplY3RUeXBlLFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFByb3BlcnR5LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFF1ZXJ5LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFF1ZXJ5UmVzdWx0LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFF1ZXJ5UmVzdWx0SGVhZGVyLFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFF1ZXJ5U3RyZWFtaW5nLFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFF1ZXJ5U3RyZWFtaW5nUmVzdWx0LFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhHcmFwaFNlYXJjaCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhTZWFyY2hTdHJlYW1pbmcsXG4gIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaEdyYXBoVXBkYXRlTmFtZWRUeXBlc1Jlc3VsdCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhVcGRhdGVQcm9wZXJ0eVJlc3VsdCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoR3JhcGhVcGRhdGVTZWFyY2hJbmRleFJlc3VsdCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoSW5wdXRRdWFudGl6YXRpb25QYXJhbWV0ZXJzLFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhLbm93bGVkZ2VHcmFwaCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoT3V0cHV0UXVhbnRpemF0aW9uUGFyYW1ldGVycyxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoUGF0aCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoUmVsYXRpb25zaGlwLFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhSZWxhdGlvbnNoaXBUeXBlLFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhTZWFyY2hJbmRleCxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoU2VydmljZURlZmluaXRpb24sXG4gIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaFNvdXJjZVR5cGVWYWx1ZUJlaGF2aW9yLFxuICBuZXdSZXN0S25vd2xlZGdlR3JhcGhUb29sU2VydmljZUZpbmRQYXRoc0NJTUZpbHRlcmVkRmluZFBhdGhzQ29uZmlndXJhdGlvbixcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoVG9vbFNlcnZpY2VGaW5kUGF0aHNDSU1GaWx0ZXJlZEZpbmRQYXRoc0VudGl0eSxcbiAgbmV3UmVzdEtub3dsZWRnZUdyYXBoVG9vbFNlcnZpY2VGaW5kUGF0aHNDSU1GaWx0ZXJlZEZpbmRQYXRoc1BhdGhGaWx0ZXIsXG4gIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaFRvb2xTZXJ2aWNlRmluZFBhdGhzQ0lNS0dUcmF2ZXJzYWxEaXJlY3Rpb24sXG4gIG5ld1Jlc3RLbm93bGVkZ2VHcmFwaFRvb2xTZXJ2aWNlRmluZFBhdGhzRmluZFBhdGhzVG9vbFNldHRpbmdzLFxuICBuZXdSZXN0TmV0d29ya3NTdXBwb3J0QWdncmVnYXRlZEdlb21ldHJ5LFxuICBuZXdSZXN0TmV0d29ya3NTdXBwb3J0QXNzb2NpYXRpb24sXG4gIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRBc3NvY2lhdGlvbkdlb21ldHJpZXNSZXN1bHQsXG4gIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRGdW5jdGlvblJlc3VsdCxcbiAgbmV3UmVzdE5ldHdvcmtzU3VwcG9ydE5ldHdvcmtFbGVtZW50LFxuICBuZXdSZXN0TmV0d29ya3NTdXBwb3J0UXVlcnlBc3NvY2lhdGlvbnNQYXJhbWV0ZXJzLFxuICBuZXdSZXN0TmV0d29ya3NTdXBwb3J0UXVlcnlBc3NvY2lhdGlvbnNSZXN1bHQsXG4gIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRTeW50aGVzaXplQXNzb2NpYXRpb25HZW9tZXRyaWVzUGFyYW1ldGVycyxcbiAgbmV3UmVzdE5ldHdvcmtzU3VwcG9ydFRyYWNlTG9jYXRpb24sXG4gIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRUcmFjZVBhcmFtZXRlcnMsXG4gIG5ld1Jlc3ROZXR3b3Jrc1N1cHBvcnRUcmFjZVJlc3VsdCxcbiAgbmV3UmVzdE5ldHdvcmtzU3VwcG9ydFZhbGlkYXRlTmV0d29ya1RvcG9sb2d5UGFyYW1ldGVycyxcbiAgbmV3UmVzdFF1ZXJ5U3VwcG9ydEF0dGFjaG1lbnRJbmZvLFxuICBuZXdSZXN0U3VwcG9ydEFkZHJlc3NDYW5kaWRhdGUsXG4gIG5ld1Jlc3RTdXBwb3J0QWxnb3JpdGhtaWNDb2xvclJhbXAsXG4gIG5ld1Jlc3RTdXBwb3J0QXJlYWxVbml0LFxuICBuZXdSZXN0U3VwcG9ydEFyZWFzQW5kTGVuZ3Roc1BhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0QXR0YWNobWVudFF1ZXJ5LFxuICBuZXdSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNGZWF0dXJlU2V0LFxuICBuZXdSZXN0U3VwcG9ydEF0dHJpYnV0ZUJpbnNHcm91cGluZyxcbiAgbmV3UmVzdFN1cHBvcnRBdHRyaWJ1dGVCaW5zUXVlcnksXG4gIG5ld1Jlc3RTdXBwb3J0QXV0b0ludGVydmFsQmluUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRCYXNlSW1hZ2VNZWFzdXJlUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRCYXNlSW1hZ2VNZWFzdXJlUmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydEJ1ZmZlclBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0Q2FtZXJhSW5mbyxcbiAgbmV3UmVzdFN1cHBvcnRDbG9zZXN0RmFjaWxpdHlQYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydENsb3Nlc3RGYWNpbGl0eVNvbHZlUmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydENvbG9yUmFtcCxcbiAgbmV3UmVzdFN1cHBvcnREYXRhRmlsZSxcbiAgbmV3UmVzdFN1cHBvcnREYXRhTGF5ZXIsXG4gIG5ld1Jlc3RTdXBwb3J0RGF0ZUJpblBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0RGF0ZUJpblRpbWVJbnRlcnZhbCxcbiAgbmV3UmVzdFN1cHBvcnREZW5zaWZ5UGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnREaXJlY3Rpb25MaW5lLFxuICBuZXdSZXN0U3VwcG9ydERpcmVjdGlvblBvaW50LFxuICBuZXdSZXN0U3VwcG9ydERpcmVjdGlvbnNFdmVudCxcbiAgbmV3UmVzdFN1cHBvcnREaXJlY3Rpb25zRmVhdHVyZSxcbiAgbmV3UmVzdFN1cHBvcnREaXJlY3Rpb25zRmVhdHVyZVNldCxcbiAgbmV3UmVzdFN1cHBvcnREaXN0YW5jZVBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0RmVhdHVyZVNldCxcbiAgbmV3UmVzdFN1cHBvcnRGZXRjaFBsYWNlUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRGaW5kSW1hZ2VzUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRGaW5kSW1hZ2VzUmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydEZpbmRQYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydEZpbmRSZXN1bHQsXG4gIG5ld1Jlc3RTdXBwb3J0Rml4ZWRCb3VuZGFyaWVzQmluUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRGaXhlZEludGVydmFsQmluUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRHUE1lc3NhZ2UsXG4gIG5ld1Jlc3RTdXBwb3J0R2VuZXJhbGl6ZVBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0SWRlbnRpZnlQYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydElkZW50aWZ5UmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydEltYWdlQW5nbGVQYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydEltYWdlQW5nbGVSZXN1bHQsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VBcmVhUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZUFyZWFSZXN1bHQsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VCb3VuZGFyeVBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VCb3VuZGFyeVJlc3VsdCxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZURpc3RhbmNlUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZURpc3RhbmNlUmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydEltYWdlR1BTSW5mbyxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZUdQU0luZm9QYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydEltYWdlR1BTSW5mb1Jlc3VsdCxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZUhlaWdodFBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VIZWlnaHRSZXN1bHQsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VIaXN0b2dyYW1QYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydEltYWdlSWRlbnRpZnlQYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydEltYWdlSWRlbnRpZnlSZXN1bHQsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VJbnNwZWN0aW9uSW5mbyxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZVBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VQaXhlbExvY2F0aW9uUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZVBpeGVsTG9jYXRpb25SZXN1bHQsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VQb2ludFBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VQb2ludFJlc3VsdCxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZVNhbXBsZSxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZVNhbXBsZVBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VTYW1wbGVSZXN1bHQsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VUb01hcE11bHRpcmF5UGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZVRvTWFwUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRJbWFnZVVybFBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VVcmxSZXN1bHQsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VWb2x1bWUsXG4gIG5ld1Jlc3RTdXBwb3J0SW1hZ2VWb2x1bWVQYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydEltYWdlVm9sdW1lUmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydEpvYkluZm8sXG4gIG5ld1Jlc3RTdXBwb3J0TGFzdE1pbGVEZWxpdmVyeVBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0TGVnZW5kTGF5ZXIsXG4gIG5ld1Jlc3RTdXBwb3J0TGVuZ3Roc1BhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0TGluZWFyVW5pdCxcbiAgbmV3UmVzdFN1cHBvcnRNYXBUb0ltYWdlUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRNZWFzdXJlQXJlYUZyb21JbWFnZVJlc3VsdCxcbiAgbmV3UmVzdFN1cHBvcnRNZWFzdXJlRnJvbUltYWdlUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRNZWFzdXJlTGVuZ3RoRnJvbUltYWdlUmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydE11bHRpcGFydENvbG9yUmFtcCxcbiAgbmV3UmVzdFN1cHBvcnROQU1lc3NhZ2UsXG4gIG5ld1Jlc3RTdXBwb3J0TmV0d29ya0ZlYXR1cmVTZXQsXG4gIG5ld1Jlc3RTdXBwb3J0TmV0d29ya1VybCxcbiAgbmV3UmVzdFN1cHBvcnRPZmZzZXRQYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydFBhcmFtZXRlclZhbHVlLFxuICBuZXdSZXN0U3VwcG9ydFBsYWNlUmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydFBsYWNlc1BhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0UGxhY2VzUXVlcnlQYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydFBsYWNlc1F1ZXJ5UmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydFBvaW50QmFycmllcixcbiAgbmV3UmVzdFN1cHBvcnRQb2x5Z29uQmFycmllcixcbiAgbmV3UmVzdFN1cHBvcnRQb2x5bGluZUJhcnJpZXIsXG4gIG5ld1Jlc3RTdXBwb3J0UHJpbnRQYXJhbWV0ZXJzLFxuICBuZXdSZXN0U3VwcG9ydFByaW50VGVtcGxhdGUsXG4gIG5ld1Jlc3RTdXBwb3J0UHJvamVjdFBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0UXVlcnksXG4gIG5ld1Jlc3RTdXBwb3J0UmFzdGVyRGF0YSxcbiAgbmV3UmVzdFN1cHBvcnRSZWxhdGlvblBhcmFtZXRlcnMsXG4gIG5ld1Jlc3RTdXBwb3J0UmVsYXRpb25zaGlwUXVlcnksXG4gIG5ld1Jlc3RTdXBwb3J0Um91dGVJbmZvLFxuICBuZXdSZXN0U3VwcG9ydFJvdXRlUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRSb3V0ZVJlc3VsdCxcbiAgbmV3UmVzdFN1cHBvcnRSb3V0ZVNvbHZlUmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydFNlcnZpY2VBcmVhUGFyYW1ldGVycyxcbiAgbmV3UmVzdFN1cHBvcnRTZXJ2aWNlQXJlYVNvbHZlUmVzdWx0LFxuICBuZXdSZXN0U3VwcG9ydFN0YXRpc3RpY0RlZmluaXRpb24sXG4gIG5ld1Jlc3RTdXBwb3J0U3RvcCxcbiAgbmV3UmVzdFN1cHBvcnRUb3BGZWF0dXJlc1F1ZXJ5LFxuICBuZXdSZXN0U3VwcG9ydFRvcEZpbHRlcixcbiAgbmV3UmVzdFN1cHBvcnRUcmF2ZWxNb2RlLFxuICBuZXdSZXN0U3VwcG9ydFRyaW1FeHRlbmRQYXJhbWV0ZXJzLFxuICBuZXdTdXBwb3J0QWN0aW9uc0FjdGlvbkJhc2UsXG4gIG5ld1N1cHBvcnRBY3Rpb25zQWN0aW9uQnV0dG9uLFxuICBuZXdTdXBwb3J0QWN0aW9uc0FjdGlvblRvZ2dsZSxcbiAgbmV3U3VwcG9ydEJhc2VtYXBTdHlsZSxcbiAgbmV3U3VwcG9ydE1hcEZsb29ySW5mbyxcbiAgbmV3U3ltYm9sc0NJTVN5bWJvbCxcbiAgbmV3U3ltYm9sc0NhbGxvdXRzQ2FsbG91dDNELFxuICBuZXdTeW1ib2xzQ2FsbG91dHNMaW5lQ2FsbG91dDNELFxuICBuZXdTeW1ib2xzRWRnZXNFZGdlczNELFxuICBuZXdTeW1ib2xzRWRnZXNTa2V0Y2hFZGdlczNELFxuICBuZXdTeW1ib2xzRWRnZXNTb2xpZEVkZ2VzM0QsXG4gIG5ld1N5bWJvbHNFeHRydWRlU3ltYm9sM0RMYXllcixcbiAgbmV3U3ltYm9sc0ZpbGxTeW1ib2wsXG4gIG5ld1N5bWJvbHNGaWxsU3ltYm9sM0RMYXllcixcbiAgbmV3U3ltYm9sc0ZvbnQsXG4gIG5ld1N5bWJvbHNJY29uU3ltYm9sM0RMYXllcixcbiAgbmV3U3ltYm9sc0xhYmVsU3ltYm9sM0QsXG4gIG5ld1N5bWJvbHNMaW5lU3R5bGVNYXJrZXIzRCxcbiAgbmV3U3ltYm9sc0xpbmVTeW1ib2wsXG4gIG5ld1N5bWJvbHNMaW5lU3ltYm9sM0QsXG4gIG5ld1N5bWJvbHNMaW5lU3ltYm9sM0RMYXllcixcbiAgbmV3U3ltYm9sc0xpbmVTeW1ib2xNYXJrZXIsXG4gIG5ld1N5bWJvbHNNYXJrZXJTeW1ib2wsXG4gIG5ld1N5bWJvbHNNZXNoU3ltYm9sM0QsXG4gIG5ld1N5bWJvbHNPYmplY3RTeW1ib2wzRExheWVyLFxuICBuZXdTeW1ib2xzUGF0aFN5bWJvbDNETGF5ZXIsXG4gIG5ld1N5bWJvbHNQYXR0ZXJuc0xpbmVTdHlsZVBhdHRlcm4zRCxcbiAgbmV3U3ltYm9sc1BhdHRlcm5zU3R5bGVQYXR0ZXJuM0QsXG4gIG5ld1N5bWJvbHNQaWN0dXJlRmlsbFN5bWJvbCxcbiAgbmV3U3ltYm9sc1BpY3R1cmVNYXJrZXJTeW1ib2wsXG4gIG5ld1N5bWJvbHNQb2ludFN5bWJvbDNELFxuICBuZXdTeW1ib2xzUG9seWdvblN5bWJvbDNELFxuICBuZXdTeW1ib2xzU2ltcGxlRmlsbFN5bWJvbCxcbiAgbmV3U3ltYm9sc1NpbXBsZUxpbmVTeW1ib2wsXG4gIG5ld1N5bWJvbHNTaW1wbGVNYXJrZXJTeW1ib2wsXG4gIG5ld1N5bWJvbHNTdXBwb3J0RWxldmF0aW9uSW5mbyxcbiAgbmV3U3ltYm9sc1N1cHBvcnRGZWF0dXJlRXhwcmVzc2lvbkluZm8sXG4gIG5ld1N5bWJvbHNTdXBwb3J0U3R5bGVPcmlnaW4sXG4gIG5ld1N5bWJvbHNTdXBwb3J0U3ltYm9sM0RWZXJ0aWNhbE9mZnNldCxcbiAgbmV3U3ltYm9sc1N5bWJvbCxcbiAgbmV3U3ltYm9sc1N5bWJvbDNELFxuICBuZXdTeW1ib2xzU3ltYm9sM0RMYXllcixcbiAgbmV3U3ltYm9sc1RleHRTeW1ib2wsXG4gIG5ld1N5bWJvbHNUZXh0U3ltYm9sM0RMYXllcixcbiAgbmV3U3ltYm9sc1dhdGVyU3ltYm9sM0RMYXllcixcbiAgbmV3U3ltYm9sc1dlYlN0eWxlU3ltYm9sLFxuICBuZXdUYWJsZXNBdHRyaWJ1dGVUYWJsZVRlbXBsYXRlLFxuICBuZXdUYWJsZXNFbGVtZW50c0F0dHJpYnV0ZVRhYmxlQXR0YWNobWVudEVsZW1lbnQsXG4gIG5ld1RhYmxlc0VsZW1lbnRzQXR0cmlidXRlVGFibGVFbGVtZW50LFxuICBuZXdUYWJsZXNFbGVtZW50c0F0dHJpYnV0ZVRhYmxlRmllbGRFbGVtZW50LFxuICBuZXdUYWJsZXNFbGVtZW50c0F0dHJpYnV0ZVRhYmxlR3JvdXBFbGVtZW50LFxuICBuZXdUYWJsZXNFbGVtZW50c0F0dHJpYnV0ZVRhYmxlUmVsYXRpb25zaGlwRWxlbWVudCxcbiAgbmV3VGltZVRpbWVFeHRlbnQsXG4gIG5ld1RpbWVUaW1lSW50ZXJ2YWwsXG4gIG5ld1ZlcnNpb25NYW5hZ2VtZW50VmVyc2lvbk1hbmFnZW1lbnRTZXJ2aWNlLFxuICBuZXdWZXJzaW9uTWFuYWdlbWVudFZlcnNpb25pbmdTdGF0ZSxcbiAgbmV3Vmlld3BvaW50LFxuICBuZXdWaWV3czJkQW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlQW5hbHlzaXNWaWV3MkQsXG4gIG5ld1ZpZXdzMmRMYXllcnNCYXNlTGF5ZXJWaWV3MkQsXG4gIG5ld1ZpZXdzMmRMYXllcnNCYXNlTGF5ZXJWaWV3R0wyRCxcbiAgbmV3Vmlld3MyZFZpZXdTdGF0ZSxcbiAgbmV3Vmlld3MzZEFuYWx5c2lzQXJlYU1lYXN1cmVtZW50QW5hbHlzaXNWaWV3M0QsXG4gIG5ld1ZpZXdzM2RBbmFseXNpc0RpbWVuc2lvbkFuYWx5c2lzVmlldzNELFxuICBuZXdWaWV3czNkQW5hbHlzaXNEaXJlY3RMaW5lTWVhc3VyZW1lbnRBbmFseXNpc1ZpZXczRCxcbiAgbmV3Vmlld3MzZEFuYWx5c2lzRWxldmF0aW9uUHJvZmlsZUFuYWx5c2lzVmlldzNELFxuICBuZXdWaWV3czNkQW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzUmVzdWx0LFxuICBuZXdWaWV3czNkQW5hbHlzaXNMaW5lT2ZTaWdodEFuYWx5c2lzVmlldzNELFxuICBuZXdWaWV3czNkQW5hbHlzaXNTbGljZUFuYWx5c2lzVmlldzNELFxuICBuZXdWaWV3czNkQW5hbHlzaXNWaWV3c2hlZEFuYWx5c2lzVmlldzNELFxuICBuZXdWaWV3czNkQW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudEFuYWx5c2lzVmlldzNELFxuICBuZXdWaWV3czNkQW5hbHlzaXNWb2x1bWVNZWFzdXJlbWVudFZvbHVtZU1lYXN1cmVtZW50UmVzdWx0LFxuICBuZXdWaWV3czNkRW52aXJvbm1lbnRDbG91ZHlXZWF0aGVyLFxuICBuZXdWaWV3czNkRW52aXJvbm1lbnRGb2dneVdlYXRoZXIsXG4gIG5ld1ZpZXdzM2RFbnZpcm9ubWVudFJhaW55V2VhdGhlcixcbiAgbmV3Vmlld3MzZEVudmlyb25tZW50U25vd3lXZWF0aGVyLFxuICBuZXdWaWV3czNkRW52aXJvbm1lbnRTdW5MaWdodGluZyxcbiAgbmV3Vmlld3MzZEVudmlyb25tZW50U3VubnlXZWF0aGVyLFxuICBuZXdWaWV3czNkRW52aXJvbm1lbnRWaXJ0dWFsTGlnaHRpbmcsXG4gIG5ld1ZpZXdzM2RXZWJnbFJlbmRlck5vZGUsXG4gIG5ld1ZpZXdzQW5hbHlzaXNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZVJlc3VsdCxcbiAgbmV3Vmlld3NCYXNlbWFwVmlldyxcbiAgbmV3Vmlld3NEcmF3RHJhdyxcbiAgbmV3Vmlld3NEcmF3RHJhd0FjdGlvbixcbiAgbmV3Vmlld3NEcmF3TXVsdGlwb2ludERyYXdBY3Rpb24sXG4gIG5ld1ZpZXdzRHJhd1BvaW50RHJhd0FjdGlvbixcbiAgbmV3Vmlld3NEcmF3UG9seWdvbkRyYXdBY3Rpb24sXG4gIG5ld1ZpZXdzRHJhd1BvbHlsaW5lRHJhd0FjdGlvbixcbiAgbmV3Vmlld3NEcmF3U2VnbWVudERyYXdBY3Rpb24sXG4gIG5ld1ZpZXdzR3JvdW5kVmlldyxcbiAgbmV3Vmlld3NJbnB1dEdhbWVwYWRHYW1lcGFkSW5wdXREZXZpY2UsXG4gIG5ld1ZpZXdzSW5wdXRHYW1lcGFkR2FtZXBhZFNldHRpbmdzLFxuICBuZXdWaWV3c0lucHV0SW5wdXQsXG4gIG5ld1ZpZXdzSW50ZXJhY3RpdmVTa2V0Y2hTa2V0Y2hMYWJlbE9wdGlvbnMsXG4gIG5ld1ZpZXdzSW50ZXJhY3RpdmVTa2V0Y2hTa2V0Y2hUb29sdGlwT3B0aW9ucyxcbiAgbmV3Vmlld3NJbnRlcmFjdGl2ZVNrZXRjaFNrZXRjaFZhbHVlT3B0aW9ucyxcbiAgbmV3Vmlld3NJbnRlcmFjdGl2ZVNuYXBwaW5nRmVhdHVyZVNuYXBwaW5nTGF5ZXJTb3VyY2UsXG4gIG5ld1ZpZXdzSW50ZXJhY3RpdmVTbmFwcGluZ1NuYXBwaW5nT3B0aW9ucyxcbiAgbmV3Vmlld3NJbnRlcmFjdGl2ZVRvb2x0aXAsXG4gIG5ld1ZpZXdzTGF5ZXJzQnVpbGRpbmdDb21wb25lbnRTdWJsYXllclZpZXcsXG4gIG5ld1ZpZXdzTGF5ZXJzQnVpbGRpbmdTY2VuZUxheWVyVmlldyxcbiAgbmV3Vmlld3NMYXllcnNEaW1lbnNpb25MYXllclZpZXcsXG4gIG5ld1ZpZXdzTGF5ZXJzR3JvdXBMYXllclZpZXcsXG4gIG5ld1ZpZXdzTGF5ZXJzSW1hZ2VyeUxheWVyVmlldyxcbiAgbmV3Vmlld3NMYXllcnNJbWFnZXJ5VGlsZUxheWVyVmlldyxcbiAgbmV3Vmlld3NMYXllcnNMYXllclZpZXcsXG4gIG5ld1ZpZXdzTGF5ZXJzTGluZU9mU2lnaHRMYXllclZpZXcsXG4gIG5ld1ZpZXdzTGF5ZXJzTWVkaWFMYXllclZpZXcsXG4gIG5ld1ZpZXdzTGF5ZXJzU2NlbmVMYXllclZpZXcsXG4gIG5ld1ZpZXdzTGF5ZXJzVmlld3NoZWRMYXllclZpZXcsXG4gIG5ld1ZpZXdzTGlua0NoYXJ0VmlldyxcbiAgbmV3Vmlld3NNYWduaWZpZXIsXG4gIG5ld1ZpZXdzTWFwVmlldyxcbiAgbmV3Vmlld3NOYXZpZ2F0aW9uR2FtZXBhZEdhbWVwYWRTZXR0aW5ncyxcbiAgbmV3Vmlld3NOYXZpZ2F0aW9uTmF2aWdhdGlvbixcbiAgbmV3Vmlld3NOYXZpZ2F0aW9uTmF2aWdhdGlvbkFjdGlvbk1hcCxcbiAgbmV3Vmlld3NTY2VuZVZpZXcsXG4gIG5ld1ZpZXdzU3VwcG9ydEhpZ2hsaWdodE9wdGlvbnMsXG4gIG5ld1ZpZXdzVGhlbWUsXG4gIG5ld1ZpZXdzVWlEZWZhdWx0VUksXG4gIG5ld1ZpZXdzVWlVSSxcbiAgbmV3Vmlld3NWaWRlb1ZpZXcsXG4gIG5ld1ZpZXdzVmlldyxcbiAgbmV3Vmlld3NWaWV3MkQsXG4gIG5ld1ZpZXdzVmlld0FuaW1hdGlvbixcbiAgbmV3V2ViRG9jdW1lbnQyRCxcbiAgbmV3V2ViTGlua0NoYXJ0LFxuICBuZXdXZWJNYXAsXG4gIG5ld1dlYlNjZW5lLFxuICBuZXdXZWJkb2NBcHBsaWNhdGlvblByb3BlcnRpZXNTZWFyY2gsXG4gIG5ld1dlYmRvY0FwcGxpY2F0aW9uUHJvcGVydGllc1NlYXJjaExheWVyLFxuICBuZXdXZWJkb2NBcHBsaWNhdGlvblByb3BlcnRpZXNTZWFyY2hMYXllckZpZWxkLFxuICBuZXdXZWJkb2NBcHBsaWNhdGlvblByb3BlcnRpZXNTZWFyY2hUYWJsZSxcbiAgbmV3V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzU2VhcmNoVGFibGVGaWVsZCxcbiAgbmV3V2ViZG9jQXBwbGljYXRpb25Qcm9wZXJ0aWVzVmlld2luZyxcbiAgbmV3V2ViZG9jR2VvdHJpZ2dlcnNJbmZvLFxuICBuZXdXZWJkb2NHZW90cmlnZ2Vyc0luZm9EZXZpY2VMb2NhdGlvbkZlZWQsXG4gIG5ld1dlYmRvY0dlb3RyaWdnZXJzSW5mb0V4cHJlc3Npb25JbmZvLFxuICBuZXdXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmVuY2VQYXJhbWV0ZXJzLFxuICBuZXdXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlRmlsdGVyLFxuICBuZXdXZWJkb2NHZW90cmlnZ2Vyc0luZm9GZWF0dXJlTGF5ZXJTb3VyY2UsXG4gIG5ld1dlYmRvY0dlb3RyaWdnZXJzSW5mb0ZlbmNlR2VvdHJpZ2dlcixcbiAgbmV3V2ViZG9jR2VvdHJpZ2dlcnNJbmZvR2VvdHJpZ2dlcixcbiAgbmV3V2ViZG9jR2VvdHJpZ2dlcnNJbmZvR2VvdHJpZ2dlck5vdGlmaWNhdGlvbk9wdGlvbnMsXG4gIG5ld1dlYmRvY0lQU0luZm8sXG4gIG5ld1dlYmRvY0lwc0FwcGxlSVBTUHJvcGVydGllcyxcbiAgbmV3V2ViZG9jSXBzQ29uZmlndXJhdGlvbixcbiAgbmV3V2ViZG9jSXBzR05TU1Byb3BlcnRpZXMsXG4gIG5ld1dlYmRvY0lwc1BhdGhTbmFwcGluZ1Byb3BlcnRpZXMsXG4gIG5ld1dlYmRvY0lwc1Bvc2l0aW9uaW5nU2VydmljZSxcbiAgbmV3V2ViZG9jSXBzU21vb3RoaW5nUHJvcGVydGllcyxcbiAgbmV3V2ViZG9jV2lkZ2V0c1RpbWVTbGlkZXIsXG4gIG5ld1dlYm1hcEFwcGxpY2F0aW9uUHJvcGVydGllcyxcbiAgbmV3V2VibWFwQmFja2dyb3VuZENvbG9yQmFja2dyb3VuZCxcbiAgbmV3V2VibWFwQm9va21hcmssXG4gIG5ld1dlYm1hcEluaXRpYWxWaWV3UHJvcGVydGllcyxcbiAgbmV3V2Vic2NlbmVBcHBsaWNhdGlvblByb3BlcnRpZXMsXG4gIG5ld1dlYnNjZW5lQmFja2dyb3VuZEJhY2tncm91bmQsXG4gIG5ld1dlYnNjZW5lQmFja2dyb3VuZENvbG9yQmFja2dyb3VuZCxcbiAgbmV3V2Vic2NlbmVFbnZpcm9ubWVudCxcbiAgbmV3V2Vic2NlbmVJbml0aWFsVmlld1Byb3BlcnRpZXMsXG4gIG5ld1dlYnNjZW5lUHJlc2VudGF0aW9uLFxuICBuZXdXZWJzY2VuZVNsaWRlLFxuICBuZXdXZWJzY2VuZVNsaWRlTGVnZW5kSW5mbyxcbiAgbmV3V2Vic2NlbmVTdW5MaWdodGluZyxcbiAgbmV3V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZSxcbiAgbmV3V2Vic2NlbmVTdXBwb3J0RmVhdHVyZVJlZmVyZW5jZUdsb2JhbElkLFxuICBuZXdXZWJzY2VuZVN1cHBvcnRGZWF0dXJlUmVmZXJlbmNlSWQsXG4gIG5ld1dlYnNjZW5lU3VwcG9ydEZlYXR1cmVSZWZlcmVuY2VPYmplY3RJZCxcbiAgbmV3V2Vic2NlbmVTdXBwb3J0TGF5ZXJSZWZlcmVuY2UsXG4gIG5ld1dlYnNjZW5lU3VwcG9ydFNsaWRlRWxlbWVudHMsXG4gIG5ld1dlYnNjZW5lU3VwcG9ydFNsaWRlUG9wdXBJbmZvLFxuICBuZXdXZWJzY2VuZVZpcnR1YWxMaWdodGluZyxcbiAgbmV3V2lkZ2V0c0FyZWFNZWFzdXJlbWVudDJELFxuICBuZXdXaWRnZXRzQXJlYU1lYXN1cmVtZW50MkRBcmVhTWVhc3VyZW1lbnQyRFZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0FyZWFNZWFzdXJlbWVudDNELFxuICBuZXdXaWRnZXRzQXJlYU1lYXN1cmVtZW50M0RBcmVhTWVhc3VyZW1lbnQzRFZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0F0dGFjaG1lbnRzLFxuICBuZXdXaWRnZXRzQXR0YWNobWVudHNBdHRhY2htZW50c1ZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0F0dHJpYnV0aW9uLFxuICBuZXdXaWRnZXRzQXR0cmlidXRpb25BdHRyaWJ1dGlvblZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0Jhc2VtYXBHYWxsZXJ5LFxuICBuZXdXaWRnZXRzQmFzZW1hcEdhbGxlcnlCYXNlbWFwR2FsbGVyeVZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0Jhc2VtYXBHYWxsZXJ5U3VwcG9ydEJhc2VtYXBHYWxsZXJ5SXRlbSxcbiAgbmV3V2lkZ2V0c0Jhc2VtYXBHYWxsZXJ5U3VwcG9ydExvY2FsQmFzZW1hcHNTb3VyY2UsXG4gIG5ld1dpZGdldHNCYXNlbWFwR2FsbGVyeVN1cHBvcnRQb3J0YWxCYXNlbWFwc1NvdXJjZSxcbiAgbmV3V2lkZ2V0c0Jhc2VtYXBMYXllckxpc3QsXG4gIG5ld1dpZGdldHNCYXNlbWFwTGF5ZXJMaXN0QmFzZW1hcExheWVyTGlzdFZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0Jhc2VtYXBUb2dnbGUsXG4gIG5ld1dpZGdldHNCYXNlbWFwVG9nZ2xlQmFzZW1hcFRvZ2dsZVZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybSxcbiAgbmV3V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUJhdGNoQXR0cmlidXRlRm9ybVZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUlucHV0c0JhdGNoRm9ybUlucHV0cyxcbiAgbmV3V2lkZ2V0c0JhdGNoQXR0cmlidXRlRm9ybUlucHV0c0ZpZWxkSW5wdXQsXG4gIG5ld1dpZGdldHNCYXRjaEF0dHJpYnV0ZUZvcm1JbnB1dHNHcm91cElucHV0LFxuICBuZXdXaWRnZXRzQm9va21hcmtzLFxuICBuZXdXaWRnZXRzQm9va21hcmtzQm9va21hcmtzVmlld01vZGVsLFxuICBuZXdXaWRnZXRzQnVpbGRpbmdFeHBsb3JlcixcbiAgbmV3V2lkZ2V0c0J1aWxkaW5nRXhwbG9yZXJCdWlsZGluZ0V4cGxvcmVyVmlld01vZGVsLFxuICBuZXdXaWRnZXRzQnVpbGRpbmdFeHBsb3JlckJ1aWxkaW5nTGV2ZWwsXG4gIG5ld1dpZGdldHNCdWlsZGluZ0V4cGxvcmVyQnVpbGRpbmdQaGFzZSxcbiAgbmV3V2lkZ2V0c0NhdGFsb2dMYXllckxpc3QsXG4gIG5ld1dpZGdldHNDYXRhbG9nTGF5ZXJMaXN0Q2F0YWxvZ0xheWVyTGlzdFZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0NvbXBhc3MsXG4gIG5ld1dpZGdldHNDb21wYXNzQ29tcGFzc1ZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0Nvb3JkaW5hdGVDb252ZXJzaW9uLFxuICBuZXdXaWRnZXRzQ29vcmRpbmF0ZUNvbnZlcnNpb25Db29yZGluYXRlQ29udmVyc2lvblZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0Nvb3JkaW5hdGVDb252ZXJzaW9uU3VwcG9ydENvbnZlcnNpb24sXG4gIG5ld1dpZGdldHNDb29yZGluYXRlQ29udmVyc2lvblN1cHBvcnRGb3JtYXQsXG4gIG5ld1dpZGdldHNEYXlsaWdodCxcbiAgbmV3V2lkZ2V0c0RheWxpZ2h0RGF5bGlnaHRWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNEaXJlY3RMaW5lTWVhc3VyZW1lbnQzRCxcbiAgbmV3V2lkZ2V0c0RpcmVjdExpbmVNZWFzdXJlbWVudDNERGlyZWN0TGluZU1lYXN1cmVtZW50M0RWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNEaXJlY3Rpb25hbFBhZCxcbiAgbmV3V2lkZ2V0c0RpcmVjdGlvbmFsUGFkRGlyZWN0aW9uYWxQYWRWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNEaXJlY3Rpb25zLFxuICBuZXdXaWRnZXRzRGlyZWN0aW9uc0RpcmVjdGlvbnNWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNEaXN0YW5jZU1lYXN1cmVtZW50MkQsXG4gIG5ld1dpZGdldHNEaXN0YW5jZU1lYXN1cmVtZW50MkREaXN0YW5jZU1lYXN1cmVtZW50MkRWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNFZGl0b3IsXG4gIG5ld1dpZGdldHNFZGl0b3JDcmVhdGVGZWF0dXJlc1dvcmtmbG93LFxuICBuZXdXaWRnZXRzRWRpdG9yQ3JlYXRlRmVhdHVyZXNXb3JrZmxvd0RhdGEsXG4gIG5ld1dpZGdldHNFZGl0b3JFZGl0b3JWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNFZGl0b3JFZGl0cyxcbiAgbmV3V2lkZ2V0c0VkaXRvclN1cHBvcnRFZGl0b3JJdGVtLFxuICBuZXdXaWRnZXRzRWRpdG9yVXBkYXRlRmVhdHVyZXNXb3JrZmxvd0RhdGEsXG4gIG5ld1dpZGdldHNFZGl0b3JVcGRhdGVXb3JrZmxvdyxcbiAgbmV3V2lkZ2V0c0VkaXRvclVwZGF0ZVdvcmtmbG93RGF0YSxcbiAgbmV3V2lkZ2V0c0VkaXRvcldvcmtmbG93LFxuICBuZXdXaWRnZXRzRWxldmF0aW9uUHJvZmlsZSxcbiAgbmV3V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZSxcbiAgbmV3V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUdyb3VuZCxcbiAgbmV3V2lkZ2V0c0VsZXZhdGlvblByb2ZpbGVFbGV2YXRpb25Qcm9maWxlTGluZUlucHV0LFxuICBuZXdXaWRnZXRzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVMaW5lUXVlcnksXG4gIG5ld1dpZGdldHNFbGV2YXRpb25Qcm9maWxlRWxldmF0aW9uUHJvZmlsZUxpbmVWaWV3LFxuICBuZXdXaWRnZXRzRWxldmF0aW9uUHJvZmlsZUVsZXZhdGlvblByb2ZpbGVWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNFeHBhbmQsXG4gIG5ld1dpZGdldHNFeHBhbmRFeHBhbmRWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNGZWF0dXJlLFxuICBuZXdXaWRnZXRzRmVhdHVyZUZlYXR1cmVWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNGZWF0dXJlRm9ybSxcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVGb3JtRmVhdHVyZUZvcm1WaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNGZWF0dXJlRm9ybUZpZWxkSW5wdXQsXG4gIG5ld1dpZGdldHNGZWF0dXJlRm9ybUdyb3VwSW5wdXQsXG4gIG5ld1dpZGdldHNGZWF0dXJlRm9ybVJlbGF0aW9uc2hpcElucHV0LFxuICBuZXdXaWRnZXRzRmVhdHVyZUZvcm1UZXh0RWxlbWVudElucHV0LFxuICBuZXdXaWRnZXRzRmVhdHVyZUZvcm1VdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uSW5wdXQsXG4gIG5ld1dpZGdldHNGZWF0dXJlVGFibGUsXG4gIG5ld1dpZGdldHNGZWF0dXJlVGFibGVBY3Rpb25Db2x1bW4sXG4gIG5ld1dpZGdldHNGZWF0dXJlVGFibGVBdHRhY2htZW50c0NvbHVtbixcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZUZlYXR1cmVUYWJsZVZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZUZpZWxkQ29sdW1uLFxuICBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlR3JpZENvbHVtbixcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRHcm91cENvbHVtbixcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRTdXBwb3J0QnV0dG9uTWVudSxcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZUdyaWRTdXBwb3J0QnV0dG9uTWVudUl0ZW0sXG4gIG5ld1dpZGdldHNGZWF0dXJlVGFibGVHcmlkU3VwcG9ydEJ1dHRvbk1lbnVWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNGZWF0dXJlVGFibGVSZWxhdGlvbnNoaXBDb2x1bW4sXG4gIG5ld1dpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0QXR0YWNobWVudHNDb2x1bW5UZW1wbGF0ZSxcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRBdHRhY2htZW50c1ZpZXdPcHRpb25zLFxuICBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydENvbHVtblRlbXBsYXRlLFxuICBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydENvbHVtblRlbXBsYXRlQmFzZSxcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVUYWJsZVN1cHBvcnRGaWVsZENvbHVtblRlbXBsYXRlLFxuICBuZXdXaWRnZXRzRmVhdHVyZVRhYmxlU3VwcG9ydEdyb3VwQ29sdW1uVGVtcGxhdGUsXG4gIG5ld1dpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0UmVsYXRpb25zaGlwQ29sdW1uVGVtcGxhdGUsXG4gIG5ld1dpZGdldHNGZWF0dXJlVGFibGVTdXBwb3J0VGFibGVUZW1wbGF0ZSxcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVUZW1wbGF0ZXMsXG4gIG5ld1dpZGdldHNGZWF0dXJlVGVtcGxhdGVzRmVhdHVyZVRlbXBsYXRlc1ZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVUZW1wbGF0ZXNUZW1wbGF0ZUl0ZW0sXG4gIG5ld1dpZGdldHNGZWF0dXJlVGVtcGxhdGVzVGVtcGxhdGVJdGVtR3JvdXAsXG4gIG5ld1dpZGdldHNGZWF0dXJlcyxcbiAgbmV3V2lkZ2V0c0ZlYXR1cmVzRmVhdHVyZXNWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNGbG9vckZpbHRlcixcbiAgbmV3V2lkZ2V0c0Zsb29yRmlsdGVyRmxvb3JGaWx0ZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNGdWxsc2NyZWVuLFxuICBuZXdXaWRnZXRzRnVsbHNjcmVlbkZ1bGxzY3JlZW5WaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNIaXN0b2dyYW0sXG4gIG5ld1dpZGdldHNIaXN0b2dyYW1IaXN0b2dyYW1WaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNIaXN0b2dyYW1SYW5nZVNsaWRlcixcbiAgbmV3V2lkZ2V0c0hpc3RvZ3JhbVJhbmdlU2xpZGVySGlzdG9ncmFtUmFuZ2VTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNIb21lLFxuICBuZXdXaWRnZXRzSG9tZUhvbWVWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNMYXllckxpc3QsXG4gIG5ld1dpZGdldHNMYXllckxpc3RMYXllckxpc3RWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNMYXllckxpc3RMaXN0SXRlbSxcbiAgbmV3V2lkZ2V0c0xheWVyTGlzdExpc3RJdGVtUGFuZWwsXG4gIG5ld1dpZGdldHNMZWdlbmQsXG4gIG5ld1dpZGdldHNMZWdlbmRMZWdlbmRWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNMZWdlbmRTdXBwb3J0QWN0aXZlTGF5ZXJJbmZvLFxuICBuZXdXaWRnZXRzTGluZU9mU2lnaHQsXG4gIG5ld1dpZGdldHNMaW5lT2ZTaWdodExpbmVPZlNpZ2h0VGFyZ2V0LFxuICBuZXdXaWRnZXRzTGluZU9mU2lnaHRMaW5lT2ZTaWdodFZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c0xpbmtDaGFydExheW91dFN3aXRjaGVyTGlua0NoYXJ0TGF5b3V0U3dpdGNoZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNMb2NhdGUsXG4gIG5ld1dpZGdldHNMb2NhdGVMb2NhdGVWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNNZWFzdXJlbWVudCxcbiAgbmV3V2lkZ2V0c01lYXN1cmVtZW50TWVhc3VyZW1lbnRWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNOYXZpZ2F0aW9uVG9nZ2xlLFxuICBuZXdXaWRnZXRzTmF2aWdhdGlvblRvZ2dsZU5hdmlnYXRpb25Ub2dnbGVWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNPcmllbnRlZEltYWdlcnlWaWV3ZXIsXG4gIG5ld1dpZGdldHNPcmllbnRlZEltYWdlcnlWaWV3ZXJPcmllbnRlZEltYWdlcnlWaWV3ZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNQb3B1cCxcbiAgbmV3V2lkZ2V0c1BvcHVwUG9wdXBWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNQcmludCxcbiAgbmV3V2lkZ2V0c1ByaW50Q3VzdG9tVGVtcGxhdGUsXG4gIG5ld1dpZGdldHNQcmludFByaW50Vmlld01vZGVsLFxuICBuZXdXaWRnZXRzUHJpbnRUZW1wbGF0ZU9wdGlvbnMsXG4gIG5ld1dpZGdldHNTY2FsZUJhcixcbiAgbmV3V2lkZ2V0c1NjYWxlQmFyU2NhbGVCYXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTY2FsZVJhbmdlU2xpZGVyLFxuICBuZXdXaWRnZXRzU2NhbGVSYW5nZVNsaWRlclNjYWxlUmFuZ2VTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTY2FsZVJhbmdlU2xpZGVyU2NhbGVSYW5nZXMsXG4gIG5ld1dpZGdldHNTZWFyY2gsXG4gIG5ld1dpZGdldHNTZWFyY2hMYXllclNlYXJjaFNvdXJjZSxcbiAgbmV3V2lkZ2V0c1NlYXJjaExvY2F0b3JTZWFyY2hTb3VyY2UsXG4gIG5ld1dpZGdldHNTZWFyY2hTZWFyY2hSZXN1bHRSZW5kZXJlcixcbiAgbmV3V2lkZ2V0c1NlYXJjaFNlYXJjaFNvdXJjZSxcbiAgbmV3V2lkZ2V0c1NlYXJjaFNlYXJjaFZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c1NoYWRvd0Nhc3QsXG4gIG5ld1dpZGdldHNTaGFkb3dDYXN0RGlzY3JldGVPcHRpb25zLFxuICBuZXdXaWRnZXRzU2hhZG93Q2FzdER1cmF0aW9uT3B0aW9ucyxcbiAgbmV3V2lkZ2V0c1NoYWRvd0Nhc3RTaGFkb3dDYXN0Vmlld01vZGVsLFxuICBuZXdXaWRnZXRzU2hhZG93Q2FzdFRocmVzaG9sZE9wdGlvbnMsXG4gIG5ld1dpZGdldHNTa2V0Y2gsXG4gIG5ld1dpZGdldHNTa2V0Y2hTa2V0Y2hWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbGljZSxcbiAgbmV3V2lkZ2V0c1NsaWNlU2xpY2VWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbGlkZXIsXG4gIG5ld1dpZGdldHNTbGlkZXJTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdCaW5hcnlDb2xvclNpemVTbGlkZXIsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdCaW5hcnlDb2xvclNpemVTbGlkZXJCaW5hcnlDb2xvclNpemVTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkQ29sb3JTbGlkZXIsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkQ29sb3JTbGlkZXJDbGFzc2VkQ29sb3JTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdDbGFzc2VkU2l6ZVNsaWRlcixcbiAgbmV3V2lkZ2V0c1NtYXJ0TWFwcGluZ0NsYXNzZWRTaXplU2xpZGVyQ2xhc3NlZFNpemVTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdDb2xvclNpemVTbGlkZXIsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdDb2xvclNpemVTbGlkZXJDb2xvclNpemVTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdDb2xvclNsaWRlcixcbiAgbmV3V2lkZ2V0c1NtYXJ0TWFwcGluZ0NvbG9yU2xpZGVyQ29sb3JTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdIZWF0bWFwU2xpZGVyLFxuICBuZXdXaWRnZXRzU21hcnRNYXBwaW5nSGVhdG1hcFNsaWRlckhlYXRtYXBTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdPcGFjaXR5U2xpZGVyLFxuICBuZXdXaWRnZXRzU21hcnRNYXBwaW5nT3BhY2l0eVNsaWRlck9wYWNpdHlTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdTaXplU2xpZGVyLFxuICBuZXdXaWRnZXRzU21hcnRNYXBwaW5nU2l6ZVNsaWRlclNpemVTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTbWFydE1hcHBpbmdTbWFydE1hcHBpbmdQcmltYXJ5SGFuZGxlU2xpZGVyVmlld01vZGVsLFxuICBuZXdXaWRnZXRzU21hcnRNYXBwaW5nU21hcnRNYXBwaW5nU2xpZGVyQmFzZSxcbiAgbmV3V2lkZ2V0c1NtYXJ0TWFwcGluZ1NtYXJ0TWFwcGluZ1NsaWRlclZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c1N1cHBvcnRHcmlkQ29udHJvbHMsXG4gIG5ld1dpZGdldHNTdXBwb3J0R3JpZENvbnRyb2xzR3JpZENvbnRyb2xzVmlld01vZGVsLFxuICBuZXdXaWRnZXRzU3VwcG9ydFNuYXBwaW5nQ29udHJvbHMsXG4gIG5ld1dpZGdldHNTdXBwb3J0U25hcHBpbmdDb250cm9sc1NuYXBwaW5nQ29udHJvbHNWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNTd2lwZSxcbiAgbmV3V2lkZ2V0c1N3aXBlU3dpcGVWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNUYWJsZUxpc3QsXG4gIG5ld1dpZGdldHNUYWJsZUxpc3RMaXN0SXRlbSxcbiAgbmV3V2lkZ2V0c1RhYmxlTGlzdExpc3RJdGVtUGFuZWwsXG4gIG5ld1dpZGdldHNUYWJsZUxpc3RUYWJsZUxpc3RWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNUaW1lU2xpZGVyLFxuICBuZXdXaWRnZXRzVGltZVNsaWRlclRpbWVTbGlkZXJWaWV3TW9kZWwsXG4gIG5ld1dpZGdldHNUaW1lWm9uZUxhYmVsLFxuICBuZXdXaWRnZXRzVHJhY2ssXG4gIG5ld1dpZGdldHNUcmFja1RyYWNrVmlld01vZGVsLFxuICBuZXdXaWRnZXRzVXRpbGl0eU5ldHdvcmtBc3NvY2lhdGlvbnMsXG4gIG5ld1dpZGdldHNVdGlsaXR5TmV0d29ya0Fzc29jaWF0aW9uc1V0aWxpdHlOZXR3b3JrQXNzb2NpYXRpb25zVmlld01vZGVsLFxuICBuZXdXaWRnZXRzVXRpbGl0eU5ldHdvcmtUcmFjZSxcbiAgbmV3V2lkZ2V0c1V0aWxpdHlOZXR3b3JrVHJhY2VBbmFseXNpc1V0aWxpdHlOZXR3b3JrVHJhY2VBbmFseXNpc1ZpZXdNb2RlbCxcbiAgbmV3V2lkZ2V0c1V0aWxpdHlOZXR3b3JrVHJhY2VVdGlsaXR5TmV0d29ya1RyYWNlVmlld01vZGVsLFxuICBuZXdXaWRnZXRzVXRpbGl0eU5ldHdvcmtWYWxpZGF0ZVRvcG9sb2d5LFxuICBuZXdXaWRnZXRzVXRpbGl0eU5ldHdvcmtWYWxpZGF0ZVRvcG9sb2d5VXRpbGl0eU5ldHdvcmtWYWxpZGF0ZVRvcG9sb2d5Vmlld01vZGVsLFxuICBuZXdXaWRnZXRzVmFsdWVQaWNrZXIsXG4gIG5ld1dpZGdldHNWYWx1ZVBpY2tlclZhbHVlUGlja2VyQ29sbGVjdGlvbixcbiAgbmV3V2lkZ2V0c1ZhbHVlUGlja2VyVmFsdWVQaWNrZXJDb21ib2JveCxcbiAgbmV3V2lkZ2V0c1ZhbHVlUGlja2VyVmFsdWVQaWNrZXJMYWJlbCxcbiAgbmV3V2lkZ2V0c1ZhbHVlUGlja2VyVmFsdWVQaWNrZXJTbGlkZXIsXG4gIG5ld1dpZGdldHNWZXJzaW9uTWFuYWdlbWVudFZlcnNpb25NYW5hZ2VtZW50Vmlld01vZGVsLFxuICBuZXdXaWRnZXRzVmlkZW9QbGF5ZXIsXG4gIG5ld1dpZGdldHNWaWRlb1BsYXllclZpZGVvUGxheWVyVmlld01vZGVsLFxuICBuZXdXaWRnZXRzV2VhdGhlcixcbiAgbmV3V2lkZ2V0c1dlYXRoZXJXZWF0aGVyVmlld01vZGVsLFxuICBuZXdXaWRnZXRzV2lkZ2V0LFxuICBuZXdXaWRnZXRzWm9vbSxcbiAgbmV3V2lkZ2V0c1pvb21ab29tVmlld01vZGVsXG59O1xuIiwiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCAyMDI1IEVzcmlcclxuICpcclxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7XHJcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAqXHJcbiAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKlxyXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXHJcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gKi9cclxuXHJcbmltcG9ydCB0eXBlIFQ5blN0cmluZ3MgZnJvbSAnLi9hc3NldHMvdDluL21lc3NhZ2VzLmVuLmpzb24nO1xyXG5pbXBvcnQgeyB1c2VUOW4gfSBmcm9tICcuLi8uLi9jb250cm9sbGVycy91c2VUOW4nO1xyXG5pbXBvcnQge1xyXG4gIEZyYWdtZW50LFxyXG4gIExpdEVsZW1lbnQsXHJcbiAgaCxcclxuICBwcm9wZXJ0eSxcclxuICBzdGF0ZSxcclxufSBmcm9tICdAYXJjZ2lzL2x1bWluYSc7XHJcbmltcG9ydCB0eXBlIHtcclxuICBKc3hOb2RlLFxyXG59IGZyb20gJ0BhcmNnaXMvbHVtaW5hJztcclxuaW1wb3J0IHsgc3R5bGVzIH0gZnJvbSAnLi9zb2x1dGlvbi1zb2NpYWwtc2hhcmUuY3NzJztcclxuaW1wb3J0IHR5cGUgeyBMb2dpY2FsUGxhY2VtZW50IH0gZnJvbSAnLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Blc3JpL2NhbGNpdGUtY29tcG9uZW50cy9kaXN0L3V0aWxzL2Zsb2F0aW5nLXVpJztcclxuaW1wb3J0IHsgY3JlYXRlUmVmIH0gZnJvbSAnbGl0LWh0bWwvZGlyZWN0aXZlcy9yZWYuanMnO1xyXG5pbXBvcnQge1xyXG4gIGltcG9ydEludGwsXHJcbiAgaW1wb3J0UmVxdWVzdCxcclxufSBmcm9tICdAYXJjZ2lzL2NvcmUtYWRhcHRlcic7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIERlY2xhcmVFbGVtZW50cyB7XHJcbiAgICAnc29sdXRpb24tc29jaWFsLXNoYXJlJzogU29sdXRpb25Tb2NpYWxTaGFyZTtcclxuICB9XHJcbn1cclxuXHJcbnR5cGUgU2hhcmVJdGVtT3B0aW9ucyA9ICdibHVlc2t5JyB8ICdmYWNlYm9vaycgfCAnbGluaycgfCAnbGlua2VkSW4nIHwgJ3gnO1xyXG5cclxuY29uc3QgQ0FMQ0lURV9NT0RFX0RBUksgPSAnLmNhbGNpdGUtbW9kZS1kYXJrJztcclxuXHJcbmNvbnN0IFNPQ0lBTF9VUkxfVEVNUExBVEVTID0ge1xyXG4gIGZhY2Vib29rOiAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3NoYXJlci9zaGFyZXIucGhwP3U9e3VybH0nLFxyXG4gIHg6ICdodHRwczovL3guY29tL2ludGVudC9wb3N0P3VybD17dXJsfScsXHJcbiAgbGlua2VkSW46ICdodHRwczovL3d3dy5saW5rZWRpbi5jb20vc2hhcmluZy9zaGFyZS1vZmZzaXRlLz91cmw9e3VybH0nLFxyXG4gIGJsdWVza3k6ICdodHRwczovL2Jza3kuYXBwL2ludGVudC9jb21wb3NlP3RleHQ9e3VybH0nLFxyXG59O1xyXG5cclxuY29uc3QgU0hPUlRFTl9BUEkgPSAnaHR0cHM6Ly9hcmNnLmlzL3Byb2Qvc2hvcnRlbic7XHJcblxyXG5leHBvcnQgY2xhc3MgU29sdXRpb25Tb2NpYWxTaGFyZSBleHRlbmRzIExpdEVsZW1lbnQge1xyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgT3ZlcnJpZGVzIChpbnRlcm5hbClcclxuICAvL1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgc3RhdGljIG92ZXJyaWRlIHN0eWxlcyA9IHN0eWxlcztcclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLy8gIFByb3BlcnRpZXMgKHB1YmxpYylcclxuICAvL1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqIENvbnRyb2wgdGhlIGFwcGVyYW5jZSBvZiB0aGUgYWN0aW9uICovXHJcbiAgQHByb3BlcnR5KCkgYWN0aW9uQXBwZXJhbmNlOiAnc29saWQnIHwgJ3RyYW5zcGFyZW50JyB8IHVuZGVmaW5lZCA9ICd0cmFuc3BhcmVudCc7XHJcblxyXG4gIC8qKiBBdXRvIHVwZGF0ZSBzaGFyZSBVUkwuICovXHJcbiAgQHByb3BlcnR5KCkgYXV0b1VwZGF0ZVNoYXJlVXJsID0gdHJ1ZTtcclxuXHJcbiAgLyoqIENvbnRyb2wgdGhlIGFwcGVyYW5jZSBvZiB0aGUgYnV0dG9uICAqL1xyXG4gIEBwcm9wZXJ0eSgpIGJ1dHRvbkFwcGVhcmFuY2U6ICdvdXRsaW5lJyB8ICdvdXRsaW5lLWZpbGwnIHwgJ3NvbGlkJyB8ICd0cmFuc3BhcmVudCcgfCB1bmRlZmluZWQgPSAndHJhbnNwYXJlbnQnO1xyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmVzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHN1Y2Nlc3MgbWVzc2FnZSBwb3BvdmVyIGZvciB0aGUgJ0NvcHkgTGluaycgYnV0dG9uLlxyXG4gICAqIFNlZSBvcHRpb25zIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Fc3JpL2NhbGNpdGUtY29tcG9uZW50cy9ibG9iL3YxLjAuMC1iZXRhLjgzL3NyYy91dGlscy9wb3BwZXIudHMjTDM0XHJcbiAgICovXHJcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBpbmxpbmVTdWNjZXNzUG9wb3ZlclBsYWNlbWVudDogTG9naWNhbFBsYWNlbWVudCA9ICd0cmFpbGluZyc7XHJcblxyXG4gIC8qKiBSZW5kZXJzIHRvb2wgYXMgYSBwb3BvdmVyIHdpdGggYSB0cmlnZ2VyIGJ1dHRvbiwgb3IgaW5saW5lIHRvIHBsYWNlIGluIGEgY3VzdG9tIGNvbnRhaW5lci4gKi9cclxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIG1vZGU6ICdpbmxpbmUnIHwgJ3BvcG92ZXInID0gJ3BvcG92ZXInO1xyXG5cclxuICAvKiogQWRqdXN0cyB0aGUgc2NhbGUgb2YgdGhlIHBvcG92ZXIgYnV0dG9uIGljb24uICovXHJcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwb3BvdmVyQnV0dG9uSWNvblNjYWxlOiAnbCcgfCAnbScgfCAncycgPSAnbSc7XHJcblxyXG4gIC8qKiBBZGp1c3RzIHRoZSBvdmVybGF5LXBvc2l0aW9uaW5nIG9mIHRoZSBwb3BvdmVyLiAqL1xyXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcG9wb3ZlclBvc2l0aW9uaW5nOiAnYWJzb2x1dGUnIHwgJ2ZpeGVkJyA9ICdhYnNvbHV0ZSc7XHJcblxyXG4gIC8qKiBSZW1vdmUgdGhlIHBvaW50ZXIgYW5kIHNldCB0aGUgdmVydGljYWwgb2Zmc2V0IHRvIDAgZm9yIHRoZSBwb3BvdmVyLiAqL1xyXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcmVtb3ZlUG9wb3Zlck9mZnNldCA9IGZhbHNlO1xyXG5cclxuICAvKiogQWRqdXN0cyB0aGUgc2NhbGUgb2YgdGhlIGNvbXBvbmVudC4gKi9cclxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHNjYWxlOiAnbCcgfCAnbScgfCAncycgPSAncyc7XHJcblxyXG4gIC8qKiBSZW5kZXJzIHNoYXJlIGJ1dHRvbiB3aXRoICdpbnZlcnNlJyB8ICduZXV0cmFsJyB8ICdicmFuZCBvcHRpb24gICovXHJcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBzaGFyZUJ1dHRvbktpbmQ6ICdpbnZlcnNlJyB8ICduZXV0cmFsJyB8ICdicmFuZCcgPSAnbmV1dHJhbCc7XHJcblxyXG4gIC8qKiBBZGp1c3Qgc2NhbGUgb2YgcG9wb3ZlciBidXR0b24gKi9cclxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHNoYXJlQnV0dG9uU2NhbGU6ICdsJyB8ICdtJyB8ICdzJyA9ICdtJztcclxuXHJcbiAgLyoqIFRleHQgdG8gZGlzcGxheSBpbiBzaGFyZSBidXR0b24sIG5vdCB2YWxpZCB3aGVuIHNoYXJlQnV0dG9uVHlwZSA9ICdhY3Rpb24nICovXHJcbiAgQHByb3BlcnR5KCkgc2hhcmVCdXR0b25UZXh0ID0gJyc7XHJcblxyXG4gIC8qKiBSZW5kZXJzIHRvb2wgaW4gcG9wb3ZlciBtb2RlIHdpdGggYSB0cmlnZ2VyIGJ1dHRvbiBvciBhY3Rpb24gKi9cclxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHNoYXJlQnV0dG9uVHlwZTogJ2FjdGlvbicgfCAnYnV0dG9uJyA9ICdidXR0b24nO1xyXG5cclxuICAvKiogRGlzcGxheSB0aGUgc2hhcmUgaWNvbnMgaW4gYSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsIGxheW91dC4gKi9cclxuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHNoYXJlSWNvbnNMYXlvdXQ6ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAndmVydGljYWwnO1xyXG5cclxuICAvKiogQWRkaXRpb25hbCB0ZXh0IHRvIGRpc3BsYXkgd2hlbiBzaGFyaW5nIHRvIGEgc29jaWFsIG9wdGlvbiAqL1xyXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgc2hhcmVUZXh0ID0gJyc7XHJcblxyXG4gIC8qKiBHZW5lcmF0ZWQgc2hhcmUgVVJMLiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBhcHBlbmQgY3VzdG9tIFVSTCBwYXJhbWV0ZXJzIGlmIG5lZWRlZC4gKi9cclxuICBAcHJvcGVydHkoKSBzaGFyZVVybDogc3RyaW5nID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcblxyXG4gIC8qKiBTaG9ydGVucyBnZW5lcmF0ZWQgVVJMLiAqL1xyXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgc2hvcnRlblNoYXJlVXJsID0gdHJ1ZTtcclxuXHJcbiAgLyoqIFNob3cvaGlkZSBzb2NpYWwgbWVkaWEgaWNvbnMuICovXHJcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBzb2NpYWxNZWRpYSA9IHRydWU7XHJcblxyXG4gIC8qKiBQcm92aWRlcyBhbiBhbHRlcm5hdGUgdG8gdGhlIHN1Y2Nlc3MudXJsIG1lc3NhZ2UgJ0FwcCBVUkwgY29waWVkIHRvIGNsaXBib2FyZC4nICovXHJcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBzdWNjZXNzTWVzc2FnZSA9ICcnO1xyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgU3RhdGUgKGludGVybmFsKVxyXG4gIC8vXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKiogV2hlbiB0cnVlIHRoZSB1cmwgaXMgY29waWVkIGFwcGxpZXMgdG8gbW9kZSA9ICdwb3BvdmVyJyAqL1xyXG4gIEBzdGF0ZSgpIF9jb3BpZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqIFdoZW4gdHJ1ZSB0aGUgbGluayBpcyBvcGVuZWQgYXBwbGllcyB0byBtb2RlID0gJ2lubGluZScgKi9cclxuICBAc3RhdGUoKSBfaW5saW5lQ29weUxpbmtPcGVuZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqIFdoZW4gdHJ1ZSB0aGUgcG9wb3ZlciBpcyBvcGVuZWQgYXBwbGllcyB0byBtb2RlID0gJ3BvcG92ZXInICovXHJcbiAgQHN0YXRlKCkgX29wZW5lZCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDb250YWlucyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGlzIGNvbXBvbmVudC5cclxuICAgKiBBbGwgVUkgc3RyaW5ncyBzaG91bGQgYmUgZGVmaW5lZCBoZXJlLlxyXG4gICAqL1xyXG4gIEBzdGF0ZSgpIF90cmFuc2xhdGlvbnMgPSB1c2VUOW48dHlwZW9mIFQ5blN0cmluZ3M+KHsgbmFtZTogJ3NvbHV0aW9uLXNvY2lhbC1zaGFyZScsIGJsb2NraW5nOiB0cnVlIH0pO1xyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgUHJvcGVydGllcyAocHJpdmF0ZSlcclxuICAvL1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqIFJlZmVyZW5jZSBlbGVtZW50IGZvciB0aGUgY29weSBsaW5rIHBvcG92ZXIgKi9cclxuICBwcml2YXRlIF9jb3B5TGlua1BvcG92ZXJSZWYgPSBjcmVhdGVSZWY8SFRNTENhbGNpdGVQb3BvdmVyRWxlbWVudD4oKTtcclxuXHJcbiAgLyoqIFJlZmVyZW5jZSBlbGVtZW50IGZvciB0aGUgZGlhbG9nICovXHJcbiAgcHJpdmF0ZSBfZGlhbG9nQ29udGVudFJlZiA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuXHJcbiAgLyoqIFJlZmVyZW5jZSBlbGVtZW50IGZvciBwb3BvdmVyIGFjdGlvbiAqL1xyXG4gIHByaXZhdGUgX3BvcG92ZXJBY3Rpb25SZWYgPSBjcmVhdGVSZWY8SFRNTENhbGNpdGVBY3Rpb25FbGVtZW50PigpO1xyXG5cclxuICAvKiogUmVmZXJlbmNlIGVsZW1lbnQgZm9yIHBvcG92ZXIgYnV0dG9uKi9cclxuICBwcml2YXRlIF9wb3BvdmVyQnV0dG9uUmVmID0gY3JlYXRlUmVmPEhUTUxDYWxjaXRlQnV0dG9uRWxlbWVudD4oKTtcclxuXHJcbiAgLyoqIFJlZmVyZW5jZSBlbGVtZW50IGZvciB0aGUgcG9wb3ZlciAqL1xyXG4gIHByaXZhdGUgX3BvcG92ZXJSZWYgPSBjcmVhdGVSZWY8SFRNTENhbGNpdGVQb3BvdmVyRWxlbWVudD4oKTtcclxuXHJcbiAgLyoqIFJlZmVyZW5jZSBlbGVtZW50IGZvciBzaGFyZSBsaXN0ICovXHJcbiAgcHJpdmF0ZSBfc2hhcmVMaXN0UmVmID0gY3JlYXRlUmVmPEhUTUxVTGlzdEVsZW1lbnQ+KCk7XHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICBXYXRjaCBoYW5kbGVyc1xyXG4gIC8vXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgTWV0aG9kcyAocHVibGljKVxyXG4gIC8vXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvLyAgRXZlbnRzIChwdWJsaWMpXHJcbiAgLy9cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICBGdW5jdGlvbnMgKGxpZmVjeWNsZSlcclxuICAvL1xyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqIENhbGxlZCBvbmNlIGFmdGVyIHRoZSBmaXJzdCB1cGRhdGVkKCkgY29tcGxldGVzICovXHJcbiAgbG9hZGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2V0dXBBdXRvQ2xvc2VMaXN0ZW5lcnMoKTtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdwb3BvdmVyJyAmJiB0aGlzLl9wb3BvdmVyUmVmLnZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLl9vcGVuZWQpIHtcclxuICAgICAgICB0aGlzLl9wb3BvdmVyUmVmLnZhbHVlLm9wZW4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGlzdGVuT24odGhpcy5fcG9wb3ZlclJlZi52YWx1ZSwgJ2NhbGNpdGVQb3BvdmVyT3BlbicsICgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3NoYXJlTGlzdFJlZi52YWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaXJzdE5vZGUgPSB0aGlzLl9zaGFyZUxpc3RSZWYudmFsdWUuY2hpbGRyZW5bMF0gYXMgSFRNTExJRWxlbWVudDtcclxuICAgICAgICBmaXJzdE5vZGUuZm9jdXMoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubGlzdGVuT24odGhpcy5fcG9wb3ZlclJlZi52YWx1ZSwgJ2tleWRvd24nLCB0aGlzLl9oYW5kbGVQb3BvdmVyUmVmS2V5RG93bik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogUmVuZGVycyB0aGUgY29tcG9uZW50LiAqL1xyXG4gIG92ZXJyaWRlIHJlbmRlcigpOiBKc3hOb2RlIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPVxyXG4gICAgICB0aGlzLl9jb3BpZWQgJiYgdGhpcy5tb2RlID09PSAncG9wb3ZlcicgPyAoXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyU3VjY2VzcygpXHJcbiAgICAgICkgOiAoXHJcbiAgICAgICAgPGRpdiBjbGFzcz17J3NvbHV0aW9ucy1zb2NpYWwtc2hhcmVfX2RpYWxvZy1jb250ZW50J30+XHJcbiAgICAgICAgICB7dGhpcy5fcmVuZGVyT3B0aW9ucygpfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbnN0IGxheW91dENsYXNzID0gdGhpcy5zaGFyZUljb25zTGF5b3V0ID09PSAndmVydGljYWwnID9cclxuICAgICAgYCAkeydzb2x1dGlvbnMtc29jaWFsLXNoYXJlX19sYXlvdXQtLXZlcnRpY2FsJ31gIDogYCAkeydzb2x1dGlvbnMtc29jaWFsLXNoYXJlX19sYXlvdXQtLWhvcml6b250YWwnfWA7XHJcblxyXG4gICAgY29uc3QgbW9kZSA9IGAgY2FsY2l0ZS1tb2RlLSR7ISF0aGlzLmVsLmNsb3Nlc3QoQ0FMQ0lURV9NT0RFX0RBUkspID8gJ2RhcmsnIDogJ2xpZ2h0J31gO1xyXG5cclxuICAgIGNvbnN0IGRpYWxvZ0NvbnRlbnQgPSAoXHJcbiAgICAgIDxkaXZcclxuICAgICAgICByZWY9e3RoaXMuX2RpYWxvZ0NvbnRlbnRSZWZ9XHJcbiAgICAgICAgY2xhc3M9e2Akeydzb2x1dGlvbnMtc29jaWFsLXNoYXJlX19kaWFsb2cnfSR7bGF5b3V0Q2xhc3N9JHttb2RlfWB9XHJcbiAgICAgID5cclxuICAgICAgICB7Y29udGVudH1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gICAgY29uc3QgZGVmYXVsdE9mZnNldCA9IDY7XHJcbiAgICBjb25zdCBvZmZzZXREaXN0YW5jZSA9IHRoaXMucmVtb3ZlUG9wb3Zlck9mZnNldCA/IDAgOiBkZWZhdWx0T2Zmc2V0O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICB7dGhpcy5tb2RlID09PSAncG9wb3ZlcidcclxuICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICA8Y2FsY2l0ZS1wb3BvdmVyXHJcbiAgICAgICAgICAgICAgcmVmPXt0aGlzLl9wb3BvdmVyUmVmfVxyXG4gICAgICAgICAgICAgIGxhYmVsPXt0aGlzLl90cmFuc2xhdGlvbnMuc2hhcmU/LmxhYmVsID8/ICcnfVxyXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQ9J3NoYXJlQnV0dG9uJ1xyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD0nYm90dG9tLXN0YXJ0J1xyXG4gICAgICAgICAgICAgIHNjYWxlPXt0aGlzLnNjYWxlfVxyXG4gICAgICAgICAgICAgIG92ZXJsYXktcG9zaXRpb25pbmc9e3RoaXMucG9wb3ZlclBvc2l0aW9uaW5nfVxyXG4gICAgICAgICAgICAgIG9mZnNldC1kaXN0YW5jZT17b2Zmc2V0RGlzdGFuY2V9XHJcbiAgICAgICAgICAgICAgcG9pbnRlci1kaXNhYmxlZD17dGhpcy5yZW1vdmVQb3BvdmVyT2Zmc2V0fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge2RpYWxvZ0NvbnRlbnR9XHJcbiAgICAgICAgICAgIDwvY2FsY2l0ZS1wb3BvdmVyPixcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyQnV0dG9uKCksXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgICA6IFtcclxuICAgICAgICAgICAgZGlhbG9nQ29udGVudCxcclxuICAgICAgICAgICAgPGNhbGNpdGUtcG9wb3ZlclxyXG4gICAgICAgICAgICAgIHJlZj17dGhpcy5fY29weUxpbmtQb3BvdmVyUmVmfVxyXG4gICAgICAgICAgICAgIGxhYmVsPXt0aGlzLl90cmFuc2xhdGlvbnMuc2hhcmU/LmxhYmVsID8/ICcnfVxyXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQ9J2NvcHlUb0NsaXBib2FyZCdcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9e3RoaXMuaW5saW5lU3VjY2Vzc1BvcG92ZXJQbGFjZW1lbnR9XHJcbiAgICAgICAgICAgICAgc2NhbGU9e3RoaXMuc2NhbGV9XHJcbiAgICAgICAgICAgICAgb3ZlcmxheVBvc2l0aW9uaW5nPSdmaXhlZCdcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHt0aGlzLl9yZW5kZXJTdWNjZXNzKCl9XHJcbiAgICAgICAgICAgIDwvY2FsY2l0ZS1wb3BvdmVyPixcclxuICAgICAgICAgIF19XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8vICBGdW5jdGlvbnMgKHByaXZhdGUpXHJcbiAgLy9cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBBZGQgYXV0byBjbG9zZSBsaXN0ZW5lcnMgKi9cclxuICBwcml2YXRlIF9zZXR1cEF1dG9DbG9zZUxpc3RlbmVycygpOiB2b2lkIHtcclxuICAgIHRoaXMubGlzdGVuT24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnY2xpY2snLCB0aGlzLl9hdXRvQ2xvc2VDYWxsYmFjayk7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAncG9wb3ZlcicgJiYgdGhpcy5fcG9wb3ZlclJlZi52YWx1ZSkge1xyXG4gICAgICB0aGlzLmxpc3Rlbk9uKHRoaXMuX3BvcG92ZXJSZWYudmFsdWUsICdjbGljaycsIHRoaXMuX3N0b3BQcm9wYWdhdGlvbkNhbGxiYWNrKTtcclxuICAgICAgdGhpcy5saXN0ZW5Pbih0aGlzLl9wb3BvdmVyUmVmLnZhbHVlLCAnY2FsY2l0ZVBvcG92ZXJDbG9zZScsIHRoaXMuX3Jlc2V0UG9wb3ZlckNvcHlTdGF0ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fZGlhbG9nQ29udGVudFJlZi52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubGlzdGVuT24odGhpcy5fZGlhbG9nQ29udGVudFJlZi52YWx1ZSwgJ2NsaWNrJywgdGhpcy5fc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2spO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogSGFuZGxlIGtleWRvd24gZm9yIHBvcG92ZXIgKi9cclxuICBwcml2YXRlIF9oYW5kbGVQb3BvdmVyUmVmS2V5RG93bihcclxuICAgIGU6IEtleWJvYXJkRXZlbnRcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChlLmNvZGUgPT09ICdUYWInKSB7XHJcbiAgICAgIGlmICghdGhpcy5fc2hhcmVMaXN0UmVmLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5vZGUgPSBlLnRhcmdldDtcclxuICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGVFbCA9IHRoaXMuX3NoYXJlTGlzdFJlZi52YWx1ZS5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29uc3QgbGFzdEZvY3VzYWJsZUVsID0gdGhpcy5fc2hhcmVMaXN0UmVmLnZhbHVlLmNoaWxkcmVuW3RoaXMuX3NoYXJlTGlzdFJlZi52YWx1ZS5jaGlsZHJlbi5sZW5ndGggLSAxXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGUuc2hpZnRLZXkgJiYgbm9kZSA9PT0gZmlyc3RGb2N1c2FibGVFbCkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBsYXN0Rm9jdXNhYmxlRWwuZm9jdXMoKTtcclxuICAgICAgfSBlbHNlIGlmICghZS5zaGlmdEtleSAmJiBub2RlID09PSBsYXN0Rm9jdXNhYmxlRWwpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZmlyc3RGb2N1c2FibGVFbC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGUuY29kZSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdGhpcy5fY2xvc2VQb3BvdmVyKCk7XHJcbiAgICAgIGlmICh0aGlzLnNoYXJlQnV0dG9uVHlwZSA9PT0gJ2J1dHRvbicpIHtcclxuICAgICAgICB0aGlzLl9wb3BvdmVyQnV0dG9uUmVmLnZhbHVlPy5zZXRGb2N1cygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3BvcG92ZXJBY3Rpb25SZWYudmFsdWU/LnNldEZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBIYW5kbGUgYXV0byBjbG9zZSAqL1xyXG4gIHByaXZhdGUgX2F1dG9DbG9zZUNhbGxiYWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3BvcG92ZXInKSB7XHJcbiAgICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9wb3BvdmVyUmVmLnZhbHVlIS5vcGVuID0gdGhpcy5fb3BlbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX2NvcHlMaW5rUG9wb3ZlclJlZi52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2NvcHlMaW5rUG9wb3ZlclJlZi52YWx1ZS5vcGVuID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5faW5saW5lQ29weUxpbmtPcGVuZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gc3RvcCBldmVudCBwcm9wYWdhdGlvbiAqL1xyXG4gIHByaXZhdGUgX3N0b3BQcm9wYWdhdGlvbkNhbGxiYWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKiogUmVzZXQgdGhlIHBvcG92ZXIgY29weSBzdGF0ZSAqL1xyXG4gIHByaXZhdGUgX3Jlc2V0UG9wb3ZlckNvcHlTdGF0ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNoYXJlQnV0dG9uVHlwZSA9PT0gJ2J1dHRvbicpIHtcclxuICAgICAgdGhpcy5fcG9wb3ZlckJ1dHRvblJlZi52YWx1ZT8uc2V0Rm9jdXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3BvcG92ZXJBY3Rpb25SZWYudmFsdWU/LnNldEZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fY29waWVkID0gZmFsc2U7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlbmRlciB0aGUgc2hhcmUgYnV0dG9uIG9yIGFjdGlvbiAqL1xyXG4gIHByaXZhdGUgX3JlbmRlckJ1dHRvbigpOiBKc3hOb2RlIHtcclxuICAgIGNvbnN0IHNjYWxlID0gdGhpcy5zaGFyZUJ1dHRvblNjYWxlICE9IG51bGwgPyB0aGlzLnNoYXJlQnV0dG9uU2NhbGUgOiB0aGlzLnNjYWxlO1xyXG4gICAgcmV0dXJuIHRoaXMuc2hhcmVCdXR0b25UeXBlID09PSAnYnV0dG9uJyA/IChcclxuICAgICAgPGNhbGNpdGUtYnV0dG9uXHJcbiAgICAgICAgYXBwZWFyYW5jZT17dGhpcy5idXR0b25BcHBlYXJhbmNlfVxyXG4gICAgICAgIGNsYXNzPXsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9fcG9wb3Zlci1idXR0b24nfVxyXG4gICAgICAgIGljb25FbmQ9J3NoYXJlJ1xyXG4gICAgICAgIGlkPSdzaGFyZUJ1dHRvbidcclxuICAgICAgICBraW5kPXt0aGlzLnNoYXJlQnV0dG9uS2luZH1cclxuICAgICAgICBsYWJlbD17dGhpcy5fdHJhbnNsYXRpb25zLnNoYXJlPy5sYWJlbH1cclxuICAgICAgICBvbkNsaWNrPXt0aGlzLl90b2dnbGVQb3BvdmVyLmJpbmQodGhpcyl9XHJcbiAgICAgICAgcmVmPXt0aGlzLl9wb3BvdmVyQnV0dG9uUmVmfVxyXG4gICAgICAgIHNjYWxlPXtzY2FsZX1cclxuICAgICAgICB0aXRsZT17dGhpcy5fdHJhbnNsYXRpb25zLnNoYXJlPy5sYWJlbH1cclxuICAgICAgPlxyXG4gICAgICAgIHt0aGlzLnNoYXJlQnV0dG9uVGV4dH1cclxuICAgICAgPC9jYWxjaXRlLWJ1dHRvbj5cclxuICAgICkgOiAoXHJcbiAgICAgIDxjYWxjaXRlLWFjdGlvblxyXG4gICAgICAgIGFsaWdubWVudD0nY2VudGVyJ1xyXG4gICAgICAgIGFwcGVhcmFuY2U9e3RoaXMuYWN0aW9uQXBwZXJhbmNlfVxyXG4gICAgICAgIGNsYXNzPXsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9fcG9wb3Zlci1idXR0b24nfVxyXG4gICAgICAgIGlkPSdzaGFyZUJ1dHRvbidcclxuICAgICAgICBsYWJlbD17dGhpcy5fdHJhbnNsYXRpb25zLnNoYXJlPy5sYWJlbH1cclxuICAgICAgICBvbkNsaWNrPXt0aGlzLl90b2dnbGVQb3BvdmVyLmJpbmQodGhpcyl9XHJcbiAgICAgICAgcmVmPXt0aGlzLl9wb3BvdmVyQWN0aW9uUmVmfVxyXG4gICAgICAgIHNjYWxlPXtzY2FsZX1cclxuICAgICAgICB0ZXh0PScnXHJcbiAgICAgICAgdGl0bGU9e3RoaXMuX3RyYW5zbGF0aW9ucy5zaGFyZT8ubGFiZWx9XHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPXsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9faWNvbi1jb250YWluZXInfT5cclxuICAgICAgICAgIDxjYWxjaXRlLWljb25cclxuICAgICAgICAgICAgaWNvbj0nc2hhcmUnXHJcbiAgICAgICAgICAgIHNjYWxlPXt0aGlzLnBvcG92ZXJCdXR0b25JY29uU2NhbGV9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2NhbGNpdGUtYWN0aW9uPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZW5kZXIgdGhlIHN1Y2Nlc3MgbWVzc2FnZSAqL1xyXG4gIHByaXZhdGUgX3JlbmRlclN1Y2Nlc3MoKSB7XHJcbiAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5fdHJhbnNsYXRpb25zLnN1Y2Nlc3M7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzPXsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9fc3VjY2Vzcyd9PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPXsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9fc3VjY2Vzcy1oZWFkZXInfT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPXsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9fc3VjY2Vzcy1pY29uJ30+XHJcbiAgICAgICAgICAgIDxjYWxjaXRlLWljb25cclxuICAgICAgICAgICAgICBpY29uPSdjaGVjay1jaXJjbGUtZidcclxuICAgICAgICAgICAgICBzY2FsZT17dGhpcy5zY2FsZX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIHtzdWNjZXNzPy5sYWJlbH1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9eydzb2x1dGlvbnMtc29jaWFsLXNoYXJlX19zdWNjZXNzLW1lc3NhZ2UnfT5cclxuICAgICAgICAgIHt0aGlzLnN1Y2Nlc3NNZXNzYWdlIHx8IHN1Y2Nlc3M/LnVybH1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZW5kZXIgdGhlIHNoYXJlIG9wdGlvbnMgKi9cclxuICBwcml2YXRlIF9yZW5kZXJPcHRpb25zKCk6IEpzeE5vZGUge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX3RyYW5zbGF0aW9ucy5vcHRpb25zO1xyXG4gICAgY29uc3Qgb3B0aW9uVGV4dF9SVEwgPSBkb2N1bWVudC5kaXIgPT09ICdydGwnID8gYCAkeydzb2x1dGlvbnMtc29jaWFsLXNoYXJlX19vcHRpb24tdGV4dC0tcnRsJ31gIDogJyc7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8dWxcclxuICAgICAgICByZWY9e3RoaXMuX3NoYXJlTGlzdFJlZn1cclxuICAgICAgICBjbGFzcz17J3NvbHV0aW9ucy1zb2NpYWwtc2hhcmVfX29wdGlvbnMnfVxyXG4gICAgICAgIHJvbGU9J21lbnUnXHJcbiAgICAgID5cclxuICAgICAgICA8bGlcclxuICAgICAgICAgIGlkPSdjb3B5VG9DbGlwYm9hcmQnXHJcbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLl9oYW5kbGVTaGFyZUl0ZW0uYmluZCh0aGlzLCAnbGluaycpfVxyXG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLl9oYW5kbGVPcHRpb25LZXlEb3duKCdsaW5rJyl9XHJcbiAgICAgICAgICByb2xlPSdtZW51aXRlbSdcclxuICAgICAgICAgIHRhYkluZGV4PScwJ1xyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPXsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9faWNvbid9PlxyXG4gICAgICAgICAgICA8Y2FsY2l0ZS1pY29uXHJcbiAgICAgICAgICAgICAgaWNvbj0nbGluaydcclxuICAgICAgICAgICAgICBzY2FsZT17dGhpcy5zY2FsZX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9fb3B0aW9uLXRleHQnfSR7b3B0aW9uVGV4dF9SVEx9YH0+XHJcbiAgICAgICAgICAgIHtvcHRpb25zPy5saW5rPy5sYWJlbH1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIHt0aGlzLnNvY2lhbE1lZGlhXHJcbiAgICAgICAgICA/IFtcclxuICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5faGFuZGxlU2hhcmVJdGVtLmJpbmQodGhpcywgJ2ZhY2Vib29rJyl9XHJcbiAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLl9oYW5kbGVPcHRpb25LZXlEb3duKCdmYWNlYm9vaycpfVxyXG4gICAgICAgICAgICAgIHJvbGU9J21lbnVpdGVtJ1xyXG4gICAgICAgICAgICAgIHRhYkluZGV4PScwJ1xyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9eydzb2x1dGlvbnMtc29jaWFsLXNoYXJlX19pY29uJ30+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5fcmVuZGVyRmFjZWJvb2tJY29uKCl9XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9fb3B0aW9uLXRleHQnfSR7b3B0aW9uVGV4dF9SVEx9YH0+XHJcbiAgICAgICAgICAgICAgICB7b3B0aW9ucz8uZmFjZWJvb2s/LmxhYmVsfVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT4sXHJcbiAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuX2hhbmRsZVNoYXJlSXRlbS5iaW5kKHRoaXMsICd4Jyl9XHJcbiAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLl9oYW5kbGVPcHRpb25LZXlEb3duKCd4Jyl9XHJcbiAgICAgICAgICAgICAgcm9sZT0nbWVudWl0ZW0nXHJcbiAgICAgICAgICAgICAgdGFiSW5kZXg9JzAnXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17J3NvbHV0aW9ucy1zb2NpYWwtc2hhcmVfX2ljb24nfT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLl9yZW5kZXJYSWNvbigpfVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YCR7J3NvbHV0aW9ucy1zb2NpYWwtc2hhcmVfX29wdGlvbi10ZXh0J30ke29wdGlvblRleHRfUlRMfWB9PlxyXG4gICAgICAgICAgICAgICAgWFxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9saT4sXHJcbiAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuX2hhbmRsZVNoYXJlSXRlbS5iaW5kKHRoaXMsICdsaW5rZWRJbicpfVxyXG4gICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5faGFuZGxlT3B0aW9uS2V5RG93bignbGlua2VkSW4nKX1cclxuICAgICAgICAgICAgICByb2xlPSdtZW51aXRlbSdcclxuICAgICAgICAgICAgICB0YWJJbmRleD0nMCdcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXsnc29sdXRpb25zLXNvY2lhbC1zaGFyZV9faWNvbid9PlxyXG4gICAgICAgICAgICAgICAge3RoaXMuX3JlbmRlckxpbmtlZEluSWNvbigpfVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YCR7J3NvbHV0aW9ucy1zb2NpYWwtc2hhcmVfX29wdGlvbi10ZXh0J30ke29wdGlvblRleHRfUlRMfWB9PlxyXG4gICAgICAgICAgICAgICAge29wdGlvbnM/LmxpbmtlZEluPy5sYWJlbH1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGk+LFxyXG4gICAgICAgICAgICA8bGlcclxuICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLl9oYW5kbGVTaGFyZUl0ZW0uYmluZCh0aGlzLCAnYmx1ZXNreScpfVxyXG4gICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5faGFuZGxlT3B0aW9uS2V5RG93bignYmx1ZXNreScpfVxyXG4gICAgICAgICAgICAgIHJvbGU9J21lbnVpdGVtJ1xyXG4gICAgICAgICAgICAgIHRhYkluZGV4PScwJ1xyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9eydzb2x1dGlvbnMtc29jaWFsLXNoYXJlX19pY29uJ30+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5fcmVuZGVyQmx1ZVNreUljb24oKX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2Akeydzb2x1dGlvbnMtc29jaWFsLXNoYXJlX19vcHRpb24tdGV4dCd9JHtvcHRpb25UZXh0X1JUTH1gfT5cclxuICAgICAgICAgICAgICAgIHtvcHRpb25zPy5ibHVlU2t5Py5sYWJlbH1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGk+LFxyXG4gICAgICAgICAgXVxyXG4gICAgICAgICAgOiBudWxsfVxyXG4gICAgICA8L3VsPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBIYW5kbGUgdGhlIGtleWRvd24gb3B0aW9uICovXHJcbiAgcHJpdmF0ZSBfaGFuZGxlT3B0aW9uS2V5RG93bihcclxuICAgIHR5cGU6IFNoYXJlSXRlbU9wdGlvbnNcclxuICApIHtcclxuICAgIHJldHVybiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG4gICAgICBjb25zdCBrZXlDb2RlID0gZS5jb2RlO1xyXG4gICAgICBjb25zdCBjYW5BY3RpdmF0ZSA9IGtleUNvZGUgPT09ICdTcGFjZScgfHwga2V5Q29kZSA9PT0gJ0VudGVyJztcclxuICAgICAgaWYgKCFjYW5BY3RpdmF0ZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9oYW5kbGVTaGFyZUl0ZW0odHlwZSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlbmRlciB0aGUgZmFjZWJvb2sgaWNvbiAqL1xyXG4gIHByaXZhdGUgX3JlbmRlckZhY2Vib29rSWNvbigpOiBKc3hOb2RlIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxzdmdcclxuICAgICAgICBoZWlnaHQ9JzEwMCUnXHJcbiAgICAgICAgc3R5bGU9e3sgZmlsbFJ1bGU6ICdldmVub2RkJywgY2xpcFJ1bGU6ICdldmVub2RkJywgc3Ryb2tlTGluZWpvaW46ICdyb3VuZCcsIHN0cm9rZU1pdGVybGltaXQ6ICcyJyB9fVxyXG4gICAgICAgIHZlcnNpb249JzEuMSdcclxuICAgICAgICB2aWV3Qm94PScwIDAgNTEyIDUxMidcclxuICAgICAgICB3aWR0aD0nMTAwJSdcclxuICAgICAgICB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnXHJcbiAgICAgID5cclxuICAgICAgICA8Zz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9J001MTIsMjU2YzAsLTE0MS4zODUgLTExNC42MTUsLTI1NiAtMjU2LC0yNTZjLTE0MS4zODUsMCAtMjU2LDExNC42MTUgLTI1NiwyNTZjMCwxMjcuNzc3IDkzLjYxNiwyMzMuNjg1IDIxNiwyNTIuODlsMCwtMTc4Ljg5bC02NSwwbDAsLTc0bDY1LDBsMCwtNTYuNGMwLC02NC4xNiAzOC4yMTksLTk5LjYgOTYuNjk1LC05OS42YzI4LjAwOSwwIDU3LjMwNSw1IDU3LjMwNSw1bDAsNjNsLTMyLjI4MSwwYy0zMS44MDEsMCAtNDEuNzE5LDE5LjczMyAtNDEuNzE5LDM5Ljk3OGwwLDQ4LjAyMmw3MSwwbC0xMS4zNSw3NGwtNTkuNjUsMGwwLDE3OC44OWMxMjIuMzg1LC0xOS4yMDUgMjE2LC0xMjUuMTEzIDIxNiwtMjUyLjg5WidcclxuICAgICAgICAgICAgc3R5bGU9e3sgZmlsbDogJyMxODc3ZjInLCBmaWxsUnVsZTogJ25vbnplcm8nIH19XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD0nTTM1NS42NSwzMzBsMTEuMzUsLTc0bC03MSwwbDAsLTQ4LjAyMmMwLC0yMC4yNDUgOS45MTcsLTM5Ljk3OCA0MS43MTksLTM5Ljk3OGwzMi4yODEsMGwwLC02M2MwLDAgLTI5LjI5NywtNSAtNTcuMzA1LC01Yy01OC40NzYsMCAtOTYuNjk1LDM1LjQ0IC05Ni42OTUsOTkuNmwwLDU2LjRsLTY1LDBsMCw3NGw2NSwwbDAsMTc4Ljg5YzEzLjAzMywyLjA0NSAyNi4zOTIsMy4xMSA0MCwzLjExYzEzLjYwOCwwIDI2Ljk2NiwtMS4wNjUgNDAsLTMuMTFsMCwtMTc4Ljg5bDU5LjY1LDBaJ1xyXG4gICAgICAgICAgICBzdHlsZT17eyBmaWxsOiAnI2ZmZicsIGZpbGxSdWxlOiAnbm9uemVybycgfX1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9nPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogUmVuZGVyIHRoZSB4IGljb24gKi9cclxuICBwcml2YXRlIF9yZW5kZXJYSWNvbigpOiBKc3hOb2RlIHtcclxuICAgIGNvbnN0IGlzQ2FsY2l0ZU1vZGVEYXJrID0gISF0aGlzLmVsLmNsb3Nlc3QoQ0FMQ0lURV9NT0RFX0RBUkspO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPHN2Z1xyXG4gICAgICAgIGNsYXNzPXtpc0NhbGNpdGVNb2RlRGFyayA/ICdzb2x1dGlvbnMtc29jaWFsLXNoYXJlX194LWxvZ28tLWRhcmsnIDogJ3NvbHV0aW9ucy1zb2NpYWwtc2hhcmVfX3gtbG9nby0tbGlnaHQnfVxyXG4gICAgICAgIHZpZXdCb3g9JzAgMCAxMjAwIDEyMjcnXHJcbiAgICAgICAgZmlsbD0nbm9uZSdcclxuICAgICAgICB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnXHJcbiAgICAgID5cclxuICAgICAgICA8cmVjdFxyXG4gICAgICAgICAgaGVpZ2h0PSc0MDAnXHJcbiAgICAgICAgICBzdHlsZT17eyBmaWxsOiAnbm9uZScgfX1cclxuICAgICAgICAgIHdpZHRoPSc0MDAnXHJcbiAgICAgICAgICB4PSc1NidcclxuICAgICAgICAgIHk9JzU2J1xyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9J003MTQuMTYzIDUxOS4yODRMMTE2MC44OSAwSDEwNTUuMDNMNjY3LjEzNyA0NTAuODg3TDM1Ny4zMjggMEgwTDQ2OC40OTIgNjgxLjgyMUwwIDEyMjYuMzdIMTA1Ljg2Nkw1MTUuNDkxIDc1MC4yMThMODQyLjY3MiAxMjI2LjM3SDEyMDBMNzE0LjEzNyA1MTkuMjg0SDcxNC4xNjNaTTU2OS4xNjUgNjg3LjgyOEw1MjEuNjk3IDYxOS45MzRMMTQ0LjAxMSA3OS42OTQ0SDMwNi42MTVMNjExLjQxMiA1MTUuNjg1TDY1OC44OCA1ODMuNTc5TDEwNTUuMDggMTE1MC4zSDg5Mi40NzZMNTY5LjE2NSA2ODcuODU0VjY4Ny44MjhaJ1xyXG4gICAgICAgICAgZmlsbD17aXNDYWxjaXRlTW9kZURhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJ31cclxuICAgICAgICAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogUmVuZGVyIHRoZSBibHVlc2t5IGljb24gKi9cclxuICBwcml2YXRlIF9yZW5kZXJCbHVlU2t5SWNvbigpOiBKc3hOb2RlIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxzdmdcclxuICAgICAgICBmaWxsPScjMGY4NWZlJ1xyXG4gICAgICAgIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZydcclxuICAgICAgICB2aWV3Qm94PScwIDAgNTEyIDUxMidcclxuICAgICAgPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPSdNMTExLjggNjIuMkMxNzAuMiAxMDUuOSAyMzMgMTk0LjcgMjU2IDI0Mi40YzIzLTQ3LjYgODUuOC0xMzYuNCAxNDQuMi0xODAuMmM0Mi4xLTMxLjYgMTEwLjMtNTYgMTEwLjMgMjEuOGMwIDE1LjUtOC45IDEzMC41LTE0LjEgMTQ5LjJDNDc4LjIgMjk4IDQxMiAzMTQuNiAzNTMuMSAzMDQuNWMxMDIuOSAxNy41IDEyOS4xIDc1LjUgNzIuNSAxMzMuNWMtMTA3LjQgMTEwLjItMTU0LjMtMjcuNi0xNjYuMy02Mi45bDAgMGMtMS43LTQuOS0yLjYtNy44LTMuMy03LjhzLTEuNiAzLTMuMyA3LjhsMCAwYy0xMiAzNS4zLTU5IDE3My4xLTE2Ni4zIDYyLjljLTU2LjUtNTgtMzAuNC0xMTYgNzIuNS0xMzMuNUMxMDAgMzE0LjYgMzMuOCAyOTggMTUuNyAyMzMuMUMxMC40IDIxNC40IDEuNSA5OS40IDEuNSA4My45YzAtNzcuOCA2OC4yLTUzLjQgMTEwLjMtMjEuOHonXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlbmRlciB0aGUgbGlua2VkaW4gaWNvbiAqL1xyXG4gIHByaXZhdGUgX3JlbmRlckxpbmtlZEluSWNvbigpOiBKc3hOb2RlIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxzdmdcclxuICAgICAgICBoZWlnaHQ9JzEwMCUnXHJcbiAgICAgICAgc3R5bGU9e3sgZmlsbFJ1bGU6ICdldmVub2RkJywgY2xpcFJ1bGU6ICdldmVub2RkJywgc3Ryb2tlTGluZWpvaW46ICdyb3VuZCcsIHN0cm9rZU1pdGVybGltaXQ6ICcyJyB9fVxyXG4gICAgICAgIHZlcnNpb249JzEuMSdcclxuICAgICAgICB2aWV3Qm94PScwIDAgNTEyIDUxMidcclxuICAgICAgICB3aWR0aD0nMTAwJSdcclxuICAgICAgICB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnXHJcbiAgICAgID5cclxuICAgICAgICA8ZyBpZD0nZzU4OTEnPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD0nTTUxMiw2NGMwLC0zNS4zMjMgLTI4LjY3NywtNjQgLTY0LC02NGwtMzg0LDBjLTM1LjMyMywwIC02NCwyOC42NzcgLTY0LDY0bDAsMzg0YzAsMzUuMzIzIDI4LjY3Nyw2NCA2NCw2NGwzODQsMGMzNS4zMjMsMCA2NCwtMjguNjc3IDY0LC02NGwwLC0zODRaJ1xyXG4gICAgICAgICAgICBpZD0nYmFja2dyb3VuZCdcclxuICAgICAgICAgICAgc3R5bGU9e3sgZmlsbDogJyMyODY3YjInIH19XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPGcgaWQ9J3NoYXBlcyc+XHJcbiAgICAgICAgICAgIDxyZWN0XHJcbiAgICAgICAgICAgICAgaGVpZ2h0PScyNTcuOTYyJ1xyXG4gICAgICAgICAgICAgIGlkPSdyZWN0MTEnXHJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgZmlsbDogJyNmZmYnIH19XHJcbiAgICAgICAgICAgICAgd2lkdGg9Jzg1Ljc2J1xyXG4gICAgICAgICAgICAgIHg9JzYxLjA1MydcclxuICAgICAgICAgICAgICB5PScxNzguNjY3J1xyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9J00xMDQuNTEyLDU0LjI4Yy0yOS4zNDEsMCAtNDguNTEyLDE5LjI5IC00OC41MTIsNDQuNTczYzAsMjQuNzUyIDE4LjU4OCw0NC41NzQgNDcuMzc3LDQ0LjU3NGwwLjU1NCwwYzI5LjkwMywwIDQ4LjUxNiwtMTkuODIyIDQ4LjUxNiwtNDQuNTc0Yy0wLjU1NSwtMjUuMjgzIC0xOC42MTEsLTQ0LjU3MyAtNDcuOTM1LC00NC41NzNaJ1xyXG4gICAgICAgICAgICAgIGlkPSdwYXRoMTMtMCdcclxuICAgICAgICAgICAgICBzdHlsZT17eyBmaWxsOiAnI2ZmZicsIGZpbGxSdWxlOiAnbm9uemVybycgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPSdNMzU3LjI3OCwxNzIuNjAxYy00NS40OSwwIC02NS44NjYsMjUuMDE3IC03Ny4yNzYsNDIuNTg5bDAsLTM2LjUyM2wtODUuNzM4LDBjMS4xMzcsMjQuMTk3IDAsMjU3Ljk2MSAwLDI1Ny45NjFsODUuNzM3LDBsMCwtMTQ0LjA2NGMwLC03LjcxMSAwLjU1NCwtMTUuNDIgMi44MjcsLTIwLjkzMWM2LjE4OCwtMTUuNCAyMC4zMDUsLTMxLjM1MiA0My45OTMsLTMxLjM1MmMzMS4wMTIsMCA0My40MzYsMjMuNjY0IDQzLjQzNiw1OC4zMjdsMCwxMzguMDJsODUuNzQxLDBsMCwtMTQ3LjkzYzAsLTc5LjIzNyAtNDIuMzA1LC0xMTYuMDk3IC05OC43MiwtMTE2LjA5N1onXHJcbiAgICAgICAgICAgICAgaWQ9J3BhdGgxNSdcclxuICAgICAgICAgICAgICBzdHlsZT17eyBmaWxsOiAnI2ZmZicsIGZpbGxSdWxlOiAnbm9uemVybycgfX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZz5cclxuICAgICAgICA8L2c+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBUb2dnbGUgdGhlIHBvcG92ZXIgKi9cclxuICBwcml2YXRlIF90b2dnbGVQb3BvdmVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLl9vcGVuZWQgPSAhdGhpcy5fb3BlbmVkO1xyXG4gICAgdGhpcy5fcG9wb3ZlclJlZi52YWx1ZSEub3BlbiA9IHRoaXMuX29wZW5lZDtcclxuICB9XHJcblxyXG4gIC8qKiBDbG9zZSB0aGUgcG9wb3ZlciAqL1xyXG4gIHByaXZhdGUgX2Nsb3NlUG9wb3ZlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcG9wb3ZlclJlZi52YWx1ZSEub3BlbiA9IHRoaXMuX29wZW5lZDtcclxuICB9XHJcblxyXG4gIC8qKiBTaGFyZSB0aGUgdXJsIGFuZCByZXR1cm4gYSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIHdoZW4gdGhlIHNoYXJlIGlzIGNvbXBsZXRlICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlU2hhcmVJdGVtKFxyXG4gICAgdHlwZTogU2hhcmVJdGVtT3B0aW9uc1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zaGFyZVVybCA9IGF3YWl0IHRoaXMuX2dlbmVyYXRlU2hhcmVVcmwoKTtcclxuICAgIGxldCBzaG9ydGVuZWRVcmwgPSBudWxsO1xyXG5cclxuICAgIC8vIERldGVjdHMgU2FmYXJpIC0gSWYgU2FmYXJpLCBkbyBub3Qgc2hvcnRlbiBVUkwgZHVlIHRvIFNhZmFyaSBub3QgYWxsb3dpbmcgY2xpcGJvYXJkIGNvcHkgYWZ0ZXIgbmV0d29yayByZXF1ZXN0c1xyXG4gICAgY29uc3QgaXNDaHJvbWUgPSBuYXZpZ2F0b3I/LnVzZXJBZ2VudD8uaW5jbHVkZXMoJ0Nocm9tZScpID8/IGZhbHNlO1xyXG4gICAgY29uc3QgaXNTYWZhcmkgPSAobmF2aWdhdG9yPy51c2VyQWdlbnQ/LmluY2x1ZGVzKCdTYWZhcmknKSA/PyBmYWxzZSkgJiYgIWlzQ2hyb21lO1xyXG4gICAgaWYgKCFpc1NhZmFyaSAmJiB0aGlzLnNob3J0ZW5TaGFyZVVybCkge1xyXG4gICAgICBzaG9ydGVuZWRVcmwgPSBhd2FpdCB0aGlzLl9zaG9ydGVuVXJsKHRoaXMuc2hhcmVVcmwpO1xyXG4gICAgfVxyXG4gICAgbGV0IHVybFRvVXNlID0gc2hvcnRlbmVkVXJsID8gc2hvcnRlbmVkVXJsIDogdGhpcy5zaGFyZVVybDtcclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnbGluayc6XHJcbiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodXJsVG9Vc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdpbmxpbmUnKSB7XHJcbiAgICAgICAgICB0aGlzLl9jb3B5TGlua1BvcG92ZXJSZWYudmFsdWUhLm9wZW4gPSB0cnVlO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5fY29weUxpbmtQb3BvdmVyUmVmLnZhbHVlIS5vcGVuID0gZmFsc2UpLCAzMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faW5saW5lQ29weUxpbmtPcGVuZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2NvcGllZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3BvcG92ZXInKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2Nsb3NlUG9wb3ZlcigpLCAyMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBjYXNlICdmYWNlYm9vayc6XHJcbiAgICAgIGNhc2UgJ2JsdWVza3knOlxyXG4gICAgICBjYXNlICd4JzpcclxuICAgICAgY2FzZSAnbGlua2VkSW4nOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxldCBzb2NpYWxXaW47XHJcbiAgICAgICAgICBpZiAoaXNTYWZhcmkpIHtcclxuICAgICAgICAgICAgc29jaWFsV2luID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvcnRlblNoYXJlVXJsKSB7XHJcbiAgICAgICAgICAgICAgdXJsVG9Vc2UgPSAoYXdhaXQgdGhpcy5fc2hvcnRlblVybCh0aGlzLnNoYXJlVXJsKSkgfHwgdXJsVG9Vc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHVybERhdGEgPSB7XHJcbiAgICAgICAgICAgIHVybDogZW5jb2RlVVJJKHVybFRvVXNlKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gdHlwZSA9PT0gJ3gnID8geyAuLi51cmxEYXRhLCB0ZXh0OiB0aGlzLnNoYXJlVGV4dCB9IDogdXJsRGF0YTtcclxuICAgICAgICAgIGNvbnN0IGludGwgPSBhd2FpdCBpbXBvcnRJbnRsKCk7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBpbnRsLnN1YnN0aXR1dGUoU09DSUFMX1VSTF9URU1QTEFURVNbdHlwZV0sIGRhdGEpO1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3BvcG92ZXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlUG9wb3ZlcigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFdpdGggU2FmYXJpLCBuZWVkIHRvIG9wZW4gbmV3IHRhYiB1c2luZyB0aGUgdHJpZ2dlcmluZyBldmVudCwgc28gYWRkIHNob3J0ZW5lZCBVUkwgYWZ0ZXIgb3BlbmluZy5cclxuICAgICAgICAgIC8vIFNhZmFyaSB0cnVuY2F0ZXMgVVJMIHdpdGhvdXQgdGhpcyBhcHByb2FjaC5cclxuICAgICAgICAgIGlmIChpc1NhZmFyaSAmJiBzb2NpYWxXaW4pIHtcclxuICAgICAgICAgICAgc29jaWFsV2luLmxvY2F0aW9uID0gdXJsO1xyXG4gICAgICAgICAgICBzb2NpYWxXaW4uZm9jdXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGVuY29kZVVSSSh1cmwpLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBHZW5lcmF0ZSB0aGUgc2hvcnQgdXJsICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2hvcnRlblVybChcclxuICAgIHVybDogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCB2b2lkPiB7XHJcbiAgICBjb25zdCBlc3JpUmVxdWVzdCA9IGF3YWl0IGltcG9ydFJlcXVlc3QoKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSBhd2FpdCBlc3JpUmVxdWVzdChTSE9SVEVOX0FQSSwge1xyXG4gICAgICBxdWVyeToge1xyXG4gICAgICAgIGxvbmdVcmw6IHVybCxcclxuICAgICAgICBmOiAnanNvbicsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzaG9ydFVybCA9IHJlcXVlc3Q/LmRhdGE/LmRhdGE/LnVybDtcclxuICAgIGlmIChzaG9ydFVybCkge1xyXG4gICAgICByZXR1cm4gc2hvcnRVcmwucmVwbGFjZSgnaHR0cDovLycsICdodHRwczovLycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFVwZGF0ZSBzaGFyZVVybCBhcyBpdCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBjb21wb25lbnQgd2FzIGxvYWRlZCAqL1xyXG4gIHByaXZhdGUgX2dlbmVyYXRlU2hhcmVVcmwoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmF1dG9VcGRhdGVTaGFyZVVybCkge1xyXG4gICAgICB0aGlzLnNoYXJlVXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zaGFyZVVybDtcclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbImlzQU1EIiwiaXNEZWZhdWx0TW9kdWxlIiwibW9kdWxlIiwiaW1wb3J0SW50bCIsImltcG9ydFJlcXVlc3QiLCJDQUxDSVRFX01PREVfREFSSyIsIlNPQ0lBTF9VUkxfVEVNUExBVEVTIiwiU0hPUlRFTl9BUEkiLCJTb2x1dGlvblNvY2lhbFNoYXJlIiwiTGl0RWxlbWVudCIsInVzZVQ5biIsImNyZWF0ZVJlZiIsInN0eWxlcyIsImNvbnRlbnQiLCJodG1sIiwibGF5b3V0Q2xhc3MiLCJtb2RlIiwiZGlhbG9nQ29udGVudCIsIm9mZnNldERpc3RhbmNlIiwibm90aGluZyIsInJlZiRqc3giLCJlIiwibm9kZSIsImZpcnN0Rm9jdXNhYmxlRWwiLCJsYXN0Rm9jdXNhYmxlRWwiLCJldmVudCIsInNjYWxlIiwic3VjY2VzcyIsIm9wdGlvbnMiLCJvcHRpb25UZXh0X1JUTCIsInR5cGUiLCJrZXlDb2RlIiwic3ZnJGpzeCIsInNhZmVTdHlsZU1hcCIsImlzQ2FsY2l0ZU1vZGVEYXJrIiwic2FmZUNsYXNzTWFwIiwic2hvcnRlbmVkVXJsIiwiaXNDaHJvbWUiLCJpc1NhZmFyaSIsInVybFRvVXNlIiwic29jaWFsV2luIiwidXJsRGF0YSIsImRhdGEiLCJ1cmwiLCJzaG9ydFVybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztreklBQU1BLElBQVEsT0FBTyxTQUFXLE9BQWUsYUFBYSxVQUFVLE9BQU8sT0FBTyxXQUFZLFlBQVksWUFBWSxPQUFPLFdBQVcsRUFBRSxjQUFjLE9BQU87QUFDakssU0FBU0MsRUFBZ0JDLEdBQVE7QUFDL0IsU0FBT0EsRUFBTyxZQUFZO0FBQzVCO0FBNDFUQSxlQUFlQyxJQUFhO0FBQzFCLE1BQUlIO0FBQ0YsV0FBTyxNQUFNLE9BQU8sUUFBUSxPQUFPLFdBQVc7QUFFaEQsUUFBTUUsSUFBUyxNQUFNLE9BQU8sc0JBQXNCO0FBQ2xELFNBQU9ELEVBQWdCQyxDQUFNLElBQUlBLEVBQU8sVUFBVUE7QUFDcEQ7QUFvSkEsZUFBZUUsSUFBZ0I7QUFDN0IsTUFBSUo7QUFDRixXQUFPLE1BQU0sT0FBTyxRQUFRLE9BQU8sY0FBYztBQUVuRCxRQUFNRSxJQUFTLE1BQU0sT0FBTyx5QkFBeUI7QUFDckQsU0FBT0QsRUFBZ0JDLENBQU0sSUFBSUEsRUFBTyxVQUFVQTtBQUNwRDtBQ2w5VEEsTUFBTUcsSUFBb0Isc0JBRXBCQyxJQUF1QjtBQUFBLEVBQzNCLFVBQVU7QUFBQSxFQUNWLEdBQUc7QUFBQSxFQUNILFVBQVU7QUFBQSxFQUNWLFNBQVM7R0FHTEMsSUFBYztBQUVkLE1BQU9DLFVBQTRCQyxFQUFVO0FBQUEsRUFBN0MsY0FBQTtBQUFBLFVBQUEsR0FBQSxTQUFBLEdBaUJRLEtBQUEsa0JBQXVELGVBR3ZELEtBQUEscUJBQXFCLElBR3JCLEtBQUEsbUJBQXFGLGVBTXBFLEtBQUEsZ0NBQWtELFlBR2xELEtBQUEsT0FBNkIsV0FHN0IsS0FBQSx5QkFBMEMsS0FHMUMsS0FBQSxxQkFBMkMsWUFHM0MsS0FBQSxzQkFBc0IsSUFHdEIsS0FBQSxRQUF5QixLQUd6QixLQUFBLGtCQUFtRCxXQUduRCxLQUFBLG1CQUFvQyxLQUdyRCxLQUFBLGtCQUFrQixJQUdELEtBQUEsa0JBQXVDLFVBR3ZDLEtBQUEsbUJBQThDLFlBRzlDLEtBQUEsWUFBWSxJQUc3QixLQUFBLFdBQW1CLE9BQU8sU0FBUyxNQUdsQixLQUFBLGtCQUFrQixJQUdsQixLQUFBLGNBQWMsSUFHZCxLQUFBLGlCQUFpQixJQVNyQyxLQUFBLFVBQVUsSUFHVixLQUFBLHdCQUF3QixJQUd4QixLQUFBLFVBQVUsSUFNVixLQUFBLGdCQUFnQkMsRUFBMEIsRUFBRSxNQUFNLHlCQUF5QixVQUFVLElBQU0sR0FTcEcsS0FBUSxzQkFBc0JDLEVBQUEsR0FHOUIsS0FBUSxvQkFBb0JBLEVBQUEsR0FHNUIsS0FBUSxvQkFBb0JBLEVBQUEsR0FHNUIsS0FBUSxvQkFBb0JBLEVBQUEsR0FHNUIsS0FBUSxjQUFjQSxFQUFBLEdBR3RCLEtBQVEsZ0JBQWdCQSxFQUFBO0FBQUE7Ozs7RUEvR3hCLE9BQUE7QUFBQSxTQUFnQixTQUFTQztBQUFBLEVBQUE7QUFBQSxFQTBJekIsU0FBYztBQUNaLFNBQUsseUJBQUEsR0FDRCxLQUFLLFNBQVMsYUFBYSxLQUFLLFlBQVksVUFDMUMsS0FBSyxZQUNQLEtBQUssWUFBWSxNQUFNLE9BQU8sS0FFaEMsS0FBSyxTQUFTLEtBQUssWUFBWSxPQUFPLHNCQUFzQixNQUFLO0FBQy9ELFVBQUksQ0FBQyxLQUFLLGNBQWM7QUFDdEI7QUFHRixNQURrQixLQUFLLGNBQWMsTUFBTSxTQUFTLENBQUMsRUFDM0MsTUFBQTtBQUFBLElBQ1osQ0FBQyxHQUNELEtBQUssU0FBUyxLQUFLLFlBQVksT0FBTyxXQUFXLEtBQUssd0JBQXdCO0FBQUEsRUFFbEY7QUFBQSxFQUdTLFNBQWlCO0FBQ3hCLFVBQU1DLElBQ0osS0FBSyxXQUFXLEtBQUssU0FBUyxZQUM1QixLQUFLLGVBQUEsSUFDSEMsc0RBRUMsS0FBSyxlQUFBLENBQWdCLFVBSXRCQyxJQUFjLEtBQUsscUJBQXFCLGFBQzVDLDhDQUFtRCwrQ0FFL0NDLElBQU8saUJBQW1CLEtBQUssR0FBRyxRQUFRWCxDQUFpQixJQUFJLFNBQVMsT0FBTyxJQUUvRVksSUFBZ0JILGVBR1gsaUNBQXNDQyxDQUFXLEdBQUdDLENBQUksRUFBRSxNQUQ1RCxLQUFLLGlCQUFpQixDQUFBLElBRzFCSCxDQUFPLFVBSU5LLElBQWlCLEtBQUssc0JBQXNCLElBRDVCO0FBRXRCLFdBRUssS0FBSyxTQUFTLFlBQ1g7QUFBQSxrQ0FHUyxLQUFLLGNBQWMsT0FBTyxTQUFTLEVBQUUsZ0VBR3JDLEtBQUssS0FBSyx3QkFDSSxLQUFLLHNCQUFrQkMsQ0FBQSxvQkFDM0JELEtBQWNDLENBQUEscUJBQ2IsS0FBSyx1QkFBbUJBLENBQUEsSUFBQUMsRUFQckMsS0FBSyxXQUFXLENBQUEsSUFTcEJILENBQWE7QUFBQSxNQUVoQixLQUFLLGNBQUE7QUFBQSxJQUFhLElBRWxCO0FBQUEsTUFDQUE7QUFBQSxrQ0FHUyxLQUFLLGNBQWMsT0FBTyxTQUFTLEVBQUUsaURBRWpDLEtBQUssNkJBQTZCLFdBQ3RDLEtBQUssS0FBSyw4QkFBQUcsRUFKWixLQUFLLG1CQUFtQixDQUFBLElBTzVCLEtBQUssZ0JBQWdCO0FBQUEsSUFBQTtBQUFBLEVBS2xDO0FBQUEsRUFTUSwyQkFBZ0M7QUFDdEMsU0FBSyxTQUFTLFNBQVMsaUJBQWlCLFNBQVMsS0FBSyxrQkFBa0IsR0FDcEUsS0FBSyxTQUFTLGFBQWEsS0FBSyxZQUFZLFNBQzlDLEtBQUssU0FBUyxLQUFLLFlBQVksT0FBTyxTQUFTLEtBQUssd0JBQXdCLEdBQzVFLEtBQUssU0FBUyxLQUFLLFlBQVksT0FBTyx1QkFBdUIsS0FBSyxzQkFBc0IsS0FFcEYsS0FBSyxrQkFBa0IsU0FDekIsS0FBSyxTQUFTLEtBQUssa0JBQWtCLE9BQU8sU0FBUyxLQUFLLHdCQUF3QjtBQUFBLEVBR3hGO0FBQUEsRUFHUSx5QkFDTkMsR0FDSztBQUNMLFFBQUlBLEVBQUUsU0FBUyxPQUFPO0FBQ3BCLFVBQUksQ0FBQyxLQUFLLGNBQWM7QUFDdEI7QUFFRixZQUFNQyxJQUFPRCxFQUFFLFFBQ1RFLElBQW1CLEtBQUssY0FBYyxNQUFNLFNBQVMsQ0FBQyxHQUN0REMsSUFBa0IsS0FBSyxjQUFjLE1BQU0sU0FBUyxLQUFLLGNBQWMsTUFBTSxTQUFTLFNBQVMsQ0FBQztBQUN0RyxNQUFJSCxFQUFFLFlBQVlDLE1BQVNDLEtBQ3pCRixFQUFFLGVBQUEsR0FDRkcsRUFBZ0IsTUFBQSxLQUNQLENBQUNILEVBQUUsWUFBWUMsTUFBU0UsTUFDakNILEVBQUUsZUFBQSxHQUNGRSxFQUFpQixNQUFBO0FBQUEsSUFFckIsTUFBQSxDQUFXRixFQUFFLFNBQVMsYUFDcEIsS0FBSyxjQUFBLEdBQ0QsS0FBSyxvQkFBb0IsV0FDM0IsS0FBSyxrQkFBa0IsT0FBTyxTQUFBLElBRTlCLEtBQUssa0JBQWtCLE9BQU8sU0FBQTtBQUFBLEVBR3BDO0FBQUEsRUFHUSxxQkFBMEI7QUFDaEMsSUFBSSxLQUFLLFNBQVMsYUFDaEIsS0FBSyxVQUFVLElBQ2YsS0FBSyxZQUFZLE1BQU8sT0FBTyxLQUFLLFlBRWhDLEtBQUssb0JBQW9CLFVBQzNCLEtBQUssb0JBQW9CLE1BQU0sT0FBTyxLQUV4QyxLQUFLLHdCQUF3QjtBQUFBLEVBRWpDO0FBQUEsRUFHUSx5QkFBeUJJLEdBQVk7QUFDM0MsSUFBQUEsRUFBTSxnQkFBQTtBQUFBLEVBQ1I7QUFBQSxFQUdRLHlCQUE4QjtBQUNwQyxJQUFJLEtBQUssb0JBQW9CLFdBQzNCLEtBQUssa0JBQWtCLE9BQU8sU0FBQSxJQUU5QixLQUFLLGtCQUFrQixPQUFPLFNBQUEsR0FFaEMsV0FBVyxNQUFLO0FBQ2QsV0FBSyxVQUFVO0FBQUEsSUFDakIsR0FBRyxHQUFHO0FBQUEsRUFDUjtBQUFBLEVBR1EsZ0JBQXdCO0FBQzlCLFVBQU1DLElBQVEsS0FBSyxvQkFBb0IsT0FBTyxLQUFLLG1CQUFtQixLQUFLO0FBQzNFLFdBQU8sS0FBSyxvQkFBb0IsV0FBV1osZ0NBRTNCLEtBQUssZ0JBQWdCLHFGQUkzQixLQUFLLGVBQWUsV0FDbkIsS0FBSyxjQUFjLE9BQU8sS0FBSyxXQUM3QixLQUFLLGVBQWUsS0FBSyxJQUFJLENBQUMsV0FFaENZLENBQUssVUFDTCxLQUFLLGNBQWMsT0FBTyxTQUFLUCxDQUFBLElBQUFDLEVBRmpDLEtBQUssaUJBQWlCLEtBSTFCLEtBQUssZUFBZSxzQkFFckJOLGlEQUdZLEtBQUssZUFBZSx1RUFHekIsS0FBSyxjQUFjLE9BQU8sS0FBSyxXQUM3QixLQUFLLGVBQWUsS0FBSyxJQUFJLENBQUMsV0FFaENZLENBQUssZUFFTCxLQUFLLGNBQWMsT0FBTyxTQUFLUCxDQUFBLElBQUFDLEVBSGpDLEtBQUssaUJBQWlCLHVGQVFoQixLQUFLLHNCQUFzQjtBQUFBLEVBSzVDO0FBQUEsRUFHUSxpQkFBYztBQUNwQixVQUFNTyxJQUFVLEtBQUssY0FBYztBQUNuQyx1TUFNaUIsS0FBSyxLQUFLLDBCQUdwQkEsR0FBUyxLQUFLLDhEQUdkLEtBQUssa0JBQWtCQSxHQUFTLEdBQUc7QUFBQSxFQUk1QztBQUFBLEVBR1EsaUJBQXlCO0FBQy9CLFVBQU1DLElBQVUsS0FBSyxjQUFjLFNBQzdCQyxJQUFpQixTQUFTLFFBQVEsUUFBUSw4Q0FBbUQ7QUFDbkcscUVBRVMsS0FBSyxhQUFhLENBQUEsa0NBTVosS0FBSyxpQkFBaUIsS0FBSyxNQUFNLE1BQU0sQ0FBQyxhQUN0QyxLQUFLLHFCQUFxQixNQUFNLENBQUMscUdBT2pDLEtBQUssS0FBSyxzQ0FHUixzQ0FBMkNBLENBQWMsRUFBRSxJQUNyRUQsR0FBUyxNQUFNLEtBQUssZUFHeEIsS0FBSyxjQUNGO0FBQUEsTUFFV2QsZUFBQSxLQUFLLGlCQUFpQixLQUFLLE1BQU0sVUFBVSxDQUFDLGFBQzFDLEtBQUsscUJBQXFCLFVBQVUsQ0FBQyxzRUFLN0MsS0FBSyxvQkFBQSxDQUFxQixzQkFFaEIsc0NBQTJDZSxDQUFjLEVBQUUsSUFDckVELEdBQVMsVUFBVSxLQUFLO0FBQUEscUJBSWxCLEtBQUssaUJBQWlCLEtBQUssTUFBTSxHQUFHLENBQUMsYUFDbkMsS0FBSyxxQkFBcUIsR0FBRyxDQUFDLHNFQUt0QyxLQUFLLGFBQUEsQ0FBYyxzQkFFVCxzQ0FBMkNDLENBQWMsRUFBRTtBQUFBLE1BSy9EZixlQUFBLEtBQUssaUJBQWlCLEtBQUssTUFBTSxVQUFVLENBQUMsYUFDMUMsS0FBSyxxQkFBcUIsVUFBVSxDQUFDLHNFQUs3QyxLQUFLLG9CQUFBLENBQXFCLHNCQUVoQixzQ0FBMkNlLENBQWMsRUFBRSxJQUNyRUQsR0FBUyxVQUFVLEtBQUs7QUFBQSxNQUlsQmQsZUFBQSxLQUFLLGlCQUFpQixLQUFLLE1BQU0sU0FBUyxDQUFDLGFBQ3pDLEtBQUsscUJBQXFCLFNBQVMsQ0FBQyxzRUFLNUMsS0FBSyxtQkFBQSxDQUFvQixzQkFFZixzQ0FBMkNlLENBQWMsRUFBRSxJQUNyRUQsR0FBUyxTQUFTLEtBQUs7QUFBQSxJQUFBLElBSTVCLElBQUk7QUFBQSxFQUdkO0FBQUEsRUFHUSxxQkFDTkUsR0FBc0I7QUFFdEIsV0FBTyxDQUFDVCxNQUFvQjtBQUMxQixZQUFNVSxJQUFVVixFQUFFO0FBRWxCLE9BRG9CVSxNQUFZLFdBQVdBLE1BQVksWUFJdkQsS0FBSyxpQkFBaUJELENBQUk7QUFBQSxJQUM1QjtBQUFBLEVBQ0Y7QUFBQSxFQUdRLHNCQUE4QjtBQUNwQyx3Q0FHVyxFQUFFLFVBQVUsV0FBVyxVQUFVLFdBQVcsZ0JBQWdCLFNBQVMsa0JBQWtCLElBQUEsQ0FBSyxDQUFBLGtGQUFBRSxvWEFBQUMsRUFTeEYsRUFBRSxNQUFNLFdBQVcsVUFBVSxVQUFBLENBQVcsQ0FBQSxxU0FBQUEsRUFJeEMsRUFBRSxNQUFNLFFBQVEsVUFBVSxVQUFBLENBQVc7RUFLdEQ7QUFBQSxFQUdRLGVBQXVCO0FBQzdCLFVBQU1DLElBQW9CLENBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUTdCLENBQWlCO0FBQzdELFdBQU9TLGVBQUFxQixFQUVJRCxJQUFvQix5Q0FBeUMsdUNBQXVDLENBQUEsdUVBQUFGLDJCQUFBQyxFQU9sRyxFQUFFLE1BQU0sUUFBUSxDQUFBLCtVQU9qQkMsSUFBb0IsVUFBVSxPQUFPLEtBQUE7QUFBQSxFQUluRDtBQUFBLEVBR1EscUJBQTZCO0FBQ25DO0VBV0Y7QUFBQSxFQUdRLHNCQUE4QjtBQUNwQyxXQUFPcEIsMkJBQUFtQixFQUdJLEVBQUUsVUFBVSxXQUFXLFVBQVUsV0FBVyxnQkFBZ0IsU0FBUyxrQkFBa0IsS0FBSyxvUkFVeEYsRUFBRSxNQUFNLFVBQUEsQ0FBVyxDQUFBLHdEQUFBQSxFQU1qQixFQUFFLE1BQU0sT0FBQSxDQUFRLENBQUEsMlBBQUFBLEVBUWhCLEVBQUUsTUFBTSxRQUFRLFVBQVUsVUFBQSxDQUFXLENBQUEsNFZBQUFBLEVBS3JDLEVBQUUsTUFBTSxRQUFRLFVBQVUsV0FBVyxDQUFBLGFBQUE7QUFBQSxFQU14RDtBQUFBLEVBR1EsZUFBZVIsR0FBbUI7QUFDeEMsSUFBQUEsRUFBTSxnQkFBQSxHQUNOLEtBQUssVUFBVSxDQUFDLEtBQUssU0FDckIsS0FBSyxZQUFZLE1BQU8sT0FBTyxLQUFLO0FBQUEsRUFDdEM7QUFBQSxFQUdRLGdCQUFxQjtBQUMzQixTQUFLLFVBQVUsSUFDZixLQUFLLFlBQVksTUFBTyxPQUFPLEtBQUs7QUFBQSxFQUN0QztBQUFBLEVBR0EsTUFBYyxpQkFDWkssR0FDYztBQUNkLFNBQUssV0FBVyxNQUFNLEtBQUssa0JBQUE7QUFDM0IsUUFBSU0sSUFBZTtBQUduQixVQUFNQyxJQUFXLFdBQVcsV0FBVyxTQUFTLFFBQVEsS0FBSyxJQUN2REMsS0FBWSxXQUFXLFdBQVcsU0FBUyxRQUFRLEtBQUssT0FBVSxDQUFDRDtBQUN6RSxJQUFJLENBQUNDLEtBQVksS0FBSyxvQkFDcEJGLElBQWUsTUFBTSxLQUFLLFlBQVksS0FBSyxRQUFRO0FBRXJELFFBQUlHLElBQVdILEtBQThCLEtBQUs7QUFFbEQsWUFBUU4sR0FBQTtBQUFBLE1BQ04sS0FBSztBQUNILGtCQUFVLFVBQVUsVUFBVVMsQ0FBUSxHQUNsQyxLQUFLLFNBQVMsYUFDaEIsS0FBSyxvQkFBb0IsTUFBTyxPQUFPLElBQ3ZDLFdBQVcsTUFBTyxLQUFLLG9CQUFvQixNQUFPLE9BQU8sSUFBUSxHQUFJLElBRXZFLEtBQUssd0JBQXdCLElBQzdCLEtBQUssVUFBVSxJQUNYLEtBQUssU0FBUyxhQUNoQixXQUFXLE1BQU0sS0FBSyxjQUFBLEdBQWlCLEdBQUk7QUFFN0M7QUFBQSxNQUNGLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSDtBQUNFLGNBQUlDO0FBQ0osVUFBSUYsTUFDRkUsSUFBWSxPQUFPLEtBQUssSUFBSSxRQUFRLEdBQ2hDLEtBQUssb0JBQ1BELElBQVksTUFBTSxLQUFLLFlBQVksS0FBSyxRQUFRLEtBQU1BO0FBRzFELGdCQUFNRSxJQUFVO0FBQUEsWUFDZCxLQUFLLFVBQVVGLENBQVE7QUFBQSxVQUFBLEdBRW5CRyxJQUFPWixNQUFTLE1BQU0sRUFBRSxHQUFHVyxHQUFTLE1BQU0sS0FBSyxVQUFBLElBQWNBLEdBRTdERSxLQURPLE1BQU14QyxFQUFBLEdBQ0YsV0FBV0csRUFBcUJ3QixDQUFJLEdBQUdZLENBQUk7QUFDNUQsVUFBSSxLQUFLLFNBQVMsYUFDaEIsS0FBSyxjQUFBLEdBS0hKLEtBQVlFLEtBQ2RBLEVBQVUsV0FBV0csR0FDckJILEVBQVUsTUFBQSxLQUVWLE9BQU8sS0FBSyxVQUFVRyxDQUFHLEdBQUcsUUFBUTtBQUFBLFFBRXhDO0FBQ0E7QUFBQSxJQUFBO0FBQUEsRUFFTjtBQUFBLEVBR0EsTUFBYyxZQUNaQSxHQUN1QjtBQVN2QixVQUFNQyxLQVBVLE9BREksTUFBTXhDLEVBQUEsR0FDUUcsR0FBYTtBQUFBLE1BQzdDLE9BQU87QUFBQSxRQUNMLFNBQVNvQztBQUFBLFFBQ1QsR0FBRztBQUFBLE1BQUE7QUFBQSxJQUNKLENBQ0YsSUFFeUIsTUFBTSxNQUFNO0FBQ3RDLFFBQUlDO0FBQ0YsYUFBT0EsRUFBUyxRQUFRLFdBQVcsVUFBVTtBQUFBLEVBSWpEO0FBQUEsRUFHUSxvQkFBMkI7QUFDakMsV0FBSSxLQUFLLHVCQUNQLEtBQUssV0FBVyxPQUFPLFNBQVMsT0FFM0IsS0FBSztBQUFBLEVBQ2Q7QUFDRDs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdfQ==