@flyfish-group/file-viewer 1.0.13 → 1.0.14

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 (211) hide show
  1. package/README.md +109 -30
  2. package/dist/components/3MFLoader.js +1 -0
  3. package/dist/components/AMFLoader.js +1 -0
  4. package/dist/components/ArchiveViewer.js +1 -0
  5. package/dist/components/AudioViewer.js +1 -0
  6. package/dist/components/CadViewer.js +1 -1
  7. package/dist/components/CodeViewer.js +1 -1
  8. package/dist/components/ColladaLoader.js +1 -0
  9. package/dist/components/DrawingViewer.js +1 -0
  10. package/dist/components/EdaViewer.js +1 -0
  11. package/dist/components/EmailViewer.js +1 -0
  12. package/dist/components/EpubViewer.js +1 -0
  13. package/dist/components/FBXLoader.js +1 -0
  14. package/dist/components/GLTFLoader.js +1 -0
  15. package/dist/components/ImageViewer.js +1 -1
  16. package/dist/components/KMZLoader.js +1 -0
  17. package/dist/components/MarkdownViewer.js +1 -1
  18. package/dist/components/ModelViewer.js +26885 -0
  19. package/dist/components/OBJLoader.js +1 -0
  20. package/dist/components/OfdViewer.js +1 -1
  21. package/dist/components/PCDLoader.js +1 -0
  22. package/dist/components/PLYLoader.js +1 -0
  23. package/dist/components/PdfView.js +30722 -1
  24. package/dist/components/PptxRender.js +1 -1
  25. package/dist/components/STLLoader.js +1 -0
  26. package/dist/components/TDSLoader.js +1 -0
  27. package/dist/components/USDLoader.js +1 -0
  28. package/dist/components/UmdViewer.js +2 -0
  29. package/dist/components/VRMLLoader.js +1 -0
  30. package/dist/components/VTKLoader.js +1 -0
  31. package/dist/components/XYZLoader.js +1 -0
  32. package/dist/components/XlsxTable.js +1 -1
  33. package/dist/components/___vite-browser-external_commonjs-proxy.js +1 -0
  34. package/dist/components/_commonjs-dynamic-modules.js +1 -0
  35. package/dist/components/_commonjsHelpers.js +1 -1
  36. package/dist/components/ar-SA-G6X2FPQ2.js +1 -0
  37. package/dist/components/arc.js +1 -0
  38. package/dist/components/architecture-7EHR7CIX.js +1 -0
  39. package/dist/components/architectureDiagram-3BPJPVTR.js +1 -0
  40. package/dist/components/az-AZ-76LH7QW2.js +1 -0
  41. package/dist/components/bg-BG-XCXSNQG7.js +1 -0
  42. package/dist/components/blockDiagram-GPEHLZMM.js +1 -0
  43. package/dist/components/bn-BD-2XOGV67Q.js +1 -0
  44. package/dist/components/c4Diagram-AAUBKEIU.js +1 -0
  45. package/dist/components/ca-ES-6MX7JW3Y.js +1 -0
  46. package/dist/components/cfb.js +1 -0
  47. package/dist/components/channel.js +1 -0
  48. package/dist/components/chunk-2J33WTMH.js +1 -0
  49. package/dist/components/chunk-4BX2VUAB.js +1 -0
  50. package/dist/components/chunk-55IACEB6.js +1 -0
  51. package/dist/components/chunk-727SXJPM.js +1 -0
  52. package/dist/components/chunk-AQP2D5EJ.js +1 -0
  53. package/dist/components/chunk-EIO257PC.js +1722 -0
  54. package/dist/components/chunk-FMBD7UC4.js +1 -0
  55. package/dist/components/chunk-ND2GUHAM.js +1 -0
  56. package/dist/components/chunk-QZHKN3VN.js +1 -0
  57. package/dist/components/classDiagram-4FO5ZUOK.js +1 -0
  58. package/dist/components/classDiagram-v2-Q7XG4LA2.js +1 -0
  59. package/dist/components/cose-bilkent-S5V4N54A.js +1 -0
  60. package/dist/components/cs-CZ-2BRQDIVT.js +1 -0
  61. package/dist/components/cytoscape.esm.js +1 -0
  62. package/dist/components/da-DK-5WZEPLOC.js +1 -0
  63. package/dist/components/dagre-BM42HDAG.js +1 -0
  64. package/dist/components/de-DE-XR44H4JA.js +1 -0
  65. package/dist/components/defaultLocale.js +1 -0
  66. package/dist/components/diagram-2AECGRRQ.js +1 -0
  67. package/dist/components/diagram-5GNKFQAL.js +1 -0
  68. package/dist/components/diagram-KO2AKTUF.js +1 -0
  69. package/dist/components/diagram-LMA3HP47.js +1 -0
  70. package/dist/components/diagram-OG6HWLK6.js +1 -0
  71. package/dist/components/directory-open-01563666.js +1 -0
  72. package/dist/components/directory-open-4ed118d0.js +1 -0
  73. package/dist/components/docx-preview.js +2 -2
  74. package/dist/components/el-GR-BZB4AONW.js +1 -0
  75. package/dist/components/en-B4ZKOASM.js +1 -0
  76. package/dist/components/erDiagram-TEJ5UH35.js +1 -0
  77. package/dist/components/es-ES-U4NZUMDT.js +1 -0
  78. package/dist/components/eu-ES-A7QVB2H4.js +1 -0
  79. package/dist/components/eventmodeling-FCH6USID.js +1 -0
  80. package/dist/components/fa-IR-HGAKTJCU.js +1 -0
  81. package/dist/components/fflate.module.js +1 -0
  82. package/dist/components/fi-FI-Z5N7JZ37.js +1 -0
  83. package/dist/components/file-open-002ab408.js +1 -0
  84. package/dist/components/file-open-7c801643.js +1 -0
  85. package/dist/components/file-save-3189631c.js +1 -0
  86. package/dist/components/file-save-745eba88.js +1 -0
  87. package/dist/components/flowDiagram-I6XJVG4X.js +1 -0
  88. package/dist/components/fr-FR-RHASNOE6.js +1 -0
  89. package/dist/components/ganttDiagram-6RSMTGT7.js +1 -0
  90. package/dist/components/gitGraph-WXDBUCRP.js +1 -0
  91. package/dist/components/gitGraphDiagram-PVQCEYII.js +1 -0
  92. package/dist/components/gl-ES-HMX3MZ6V.js +1 -0
  93. package/dist/components/graph.js +1 -0
  94. package/dist/components/he-IL-6SHJWFNN.js +1 -0
  95. package/dist/components/hi-IN-IWLTKZ5I.js +1 -0
  96. package/dist/components/hu-HU-A5ZG7DT2.js +1 -0
  97. package/dist/components/id-ID-SAP4L64H.js +1 -0
  98. package/dist/components/image-GAAHSSAO.js +1 -0
  99. package/dist/components/image-blob-reduce.esm.js +2 -0
  100. package/dist/components/index.js +23989 -1
  101. package/dist/components/index10.js +1 -0
  102. package/dist/components/index11.js +1 -0
  103. package/dist/components/index12.js +1 -0
  104. package/dist/components/index13.js +1 -0
  105. package/dist/components/index14.js +1 -0
  106. package/dist/components/index15.js +1 -0
  107. package/dist/components/index16.js +1 -0
  108. package/dist/components/index17.js +1 -0
  109. package/dist/components/index18.js +1 -0
  110. package/dist/components/index19.js +1 -0
  111. package/dist/components/index2.js +1 -1
  112. package/dist/components/index20.js +1 -0
  113. package/dist/components/index21.js +2 -0
  114. package/dist/components/index22.js +1 -0
  115. package/dist/components/index23.js +1 -0
  116. package/dist/components/index24.js +1 -0
  117. package/dist/components/index3.js +1 -0
  118. package/dist/components/index4.js +1 -0
  119. package/dist/components/index5.js +1 -0
  120. package/dist/components/index6.js +1 -0
  121. package/dist/components/index7.js +1 -0
  122. package/dist/components/index8.js +1 -0
  123. package/dist/components/index9.js +1 -0
  124. package/dist/components/info-J43DQDTF.js +1 -0
  125. package/dist/components/infoDiagram-5YYISTIA.js +1 -0
  126. package/dist/components/init.js +1 -0
  127. package/dist/components/ishikawaDiagram-YF4QCWOH.js +1 -0
  128. package/dist/components/it-IT-JPQ66NNP.js +1 -0
  129. package/dist/components/ja-JP-DBVTYXUO.js +1 -0
  130. package/dist/components/journeyDiagram-JHISSGLW.js +1 -0
  131. package/dist/components/jszip.min.js +1 -1
  132. package/dist/components/kaa-6HZHGXH3.js +1 -0
  133. package/dist/components/kab-KAB-ZGHBKWFO.js +1 -0
  134. package/dist/components/kanban-definition-UN3LZRKU.js +1 -0
  135. package/dist/components/katex.js +1 -0
  136. package/dist/components/kk-KZ-P5N5QNE5.js +1 -0
  137. package/dist/components/km-KH-HSX4SM5Z.js +1 -0
  138. package/dist/components/ko-KR-MTYHY66A.js +1 -0
  139. package/dist/components/ku-TR-6OUDTVRD.js +1 -0
  140. package/dist/components/layout.js +1 -0
  141. package/dist/components/libarchive.js +6 -0
  142. package/dist/components/linear.js +1 -0
  143. package/dist/components/lt-LT-XHIRWOB4.js +1 -0
  144. package/dist/components/lv-LV-5QDEKY6T.js +1 -0
  145. package/dist/components/mermaid-parser.core.js +14 -0
  146. package/dist/components/mindmap-definition-RKZ34NQL.js +1 -0
  147. package/dist/components/mr-IN-CRQNXWMA.js +1 -0
  148. package/dist/components/my-MM-5M5IBNSE.js +1 -0
  149. package/dist/components/nb-NO-T6EIAALU.js +1 -0
  150. package/dist/components/nestedRender.js +1 -0
  151. package/dist/components/nl-NL-IS3SIHDZ.js +1 -0
  152. package/dist/components/nn-NO-6E72VCQL.js +1 -0
  153. package/dist/components/oc-FR-POXYY2M6.js +1 -0
  154. package/dist/components/ofd.js +1 -1
  155. package/dist/components/ordinal.js +1 -0
  156. package/dist/components/pa-IN-N4M65BXN.js +1 -0
  157. package/dist/components/packet-YPE3B663.js +1 -0
  158. package/dist/components/percentages-BXMCSKIN.js +1 -0
  159. package/dist/components/pica.js +1 -0
  160. package/dist/components/pie-LRSECV5Y.js +1 -0
  161. package/dist/components/pie.js +1 -0
  162. package/dist/components/pieDiagram-4H26LBE5.js +1 -0
  163. package/dist/components/pl-PL-T2D74RX3.js +1 -0
  164. package/dist/components/postal-mime.js +1 -0
  165. package/dist/components/pt-BR-5N22H2LF.js +1 -0
  166. package/dist/components/pt-PT-UZXXM6DQ.js +1 -0
  167. package/dist/components/quadrantDiagram-W4KKPZXB.js +1 -0
  168. package/dist/components/radar-GUYGQ44K.js +1 -0
  169. package/dist/components/requirementDiagram-4Y6WPE33.js +1 -0
  170. package/dist/components/ro-RO-JPDTUUEW.js +1 -0
  171. package/dist/components/rough.esm.js +1 -0
  172. package/dist/components/roundRect.js +1 -0
  173. package/dist/components/ru-RU-B4JR7IUQ.js +1 -0
  174. package/dist/components/sankeyDiagram-5OEKKPKP.js +1 -0
  175. package/dist/components/sequenceDiagram-3UESZ5HK.js +1 -0
  176. package/dist/components/si-LK-N5RQ5JYF.js +1 -0
  177. package/dist/components/sk-SK-C5VTKIMK.js +1 -0
  178. package/dist/components/sl-SI-NN7IZMDC.js +1 -0
  179. package/dist/components/stateDiagram-AJRCARHV.js +1 -0
  180. package/dist/components/stateDiagram-v2-BHNVJYJU.js +1 -0
  181. package/dist/components/subset-shared.chunk.js +1 -0
  182. package/dist/components/subset-worker.chunk.js +1 -0
  183. package/dist/components/sv-SE-XGPEYMSR.js +1 -0
  184. package/dist/components/ta-IN-2NMHFXQM.js +1 -0
  185. package/dist/components/th-TH-HPSO5L25.js +1 -0
  186. package/dist/components/time.js +1 -0
  187. package/dist/components/timeline-definition-PNZ67QCA.js +1 -0
  188. package/dist/components/tr-TR-DEFEU3FU.js +1 -0
  189. package/dist/components/transform.js +1 -0
  190. package/dist/components/treeView-BLDUP644.js +1 -0
  191. package/dist/components/treemap-LRROVOQU.js +1 -0
  192. package/dist/components/uk-UA-QMV73CPH.js +1 -0
  193. package/dist/components/vennDiagram-CIIHVFJN.js +1 -0
  194. package/dist/components/vi-VN-M7AON7JQ.js +1 -0
  195. package/dist/components/wardley-L42UT6IY.js +1 -0
  196. package/dist/components/wardleyDiagram-YWT4CUSO.js +1 -0
  197. package/dist/components/worker-bundle.js +1 -0
  198. package/dist/components/worker-ref.js +1 -1
  199. package/dist/components/xychartDiagram-2RQKCTM6.js +1 -0
  200. package/dist/components/zh-CN-LNUGB5OW.js +1 -0
  201. package/dist/components/zh-HK-E62DVLB3.js +1 -0
  202. package/dist/components/zh-TW-RAJ6MFWO.js +1 -0
  203. package/dist/index.d.ts +74 -3
  204. package/dist/index.mjs +1 -1
  205. package/dist/package/index.d.ts +10 -3
  206. package/dist/style.css +11 -11
  207. package/dist/worker/pptx.worker.js +1 -1
  208. package/package.json +17 -3
  209. package/dist/index.umd.js +0 -7
  210. package/dist/worker/pdf.worker.js +0 -1
  211. package/dist/worker/sheet.worker.js +0 -1
@@ -0,0 +1 @@
1
+ function a(){const j=['2318928EutzAo','5687320EBUkfc','20cjYPgq','3156HWrgGg','4075628EGplHO','161VzshJw','375762YdkKHF','4404660kFcaaS','data:application/javascript;base64,LyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICovCmNvbnN0IGU9U3ltYm9sKCJDb21saW5rLnByb3h5Iikscj1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSx0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxuPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxvPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxhPWU9PiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlLHM9bmV3IE1hcChbWyJwcm94eSIse2NhbkhhbmRsZTpyPT5hKHIpJiZyW2VdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaShlLHIpLFt0LFt0XV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksZihlLFtdLHIpO3ZhciByfX1dLFsidGhyb3ciLHtjYW5IYW5kbGU6ZT0+YShlKSYmbyBpbiBlLHNlcmlhbGl6ZSh7dmFsdWU6ZX0pe2xldCByO3JldHVybiByPWUgaW5zdGFuY2VvZiBFcnJvcj97aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTplLm1lc3NhZ2UsbmFtZTplLm5hbWUsc3RhY2s6ZS5zdGFja319Ontpc0Vycm9yOiExLHZhbHVlOmV9LFtyLFtdXX0sZGVzZXJpYWxpemUoZSl7aWYoZS5pc0Vycm9yKXRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGUudmFsdWUubWVzc2FnZSksZS52YWx1ZSk7dGhyb3cgZS52YWx1ZX19XV0pO2Z1bmN0aW9uIGkocix0PWdsb2JhbFRoaXMsYT1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoZnVuY3Rpb24gcyhsKXtpZighbHx8IWwuZGF0YSlyZXR1cm47aWYoIWZ1bmN0aW9uKGUscil7Zm9yKGNvbnN0IHQgb2YgZSl7aWYocj09PXR8fCIqIj09PXQpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KHIpKXJldHVybiEwfXJldHVybiExfShhLGwub3JpZ2luKSlyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke2wub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtjb25zdHtpZDpjLHR5cGU6ZCxwYXRoOmh9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGwuZGF0YSksZj0obC5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcCh3KTtsZXQgbTt0cnl7Y29uc3QgdD1oLnNsaWNlKDAsLTEpLnJlZHVjZSgoKGUscik9PmVbcl0pLHIpLG49aC5yZWR1Y2UoKChlLHIpPT5lW3JdKSxyKTtzd2l0Y2goZCl7Y2FzZSJHRVQiOm09bjticmVhaztjYXNlIlNFVCI6dFtoLnNsaWNlKC0xKVswXV09dyhsLmRhdGEudmFsdWUpLG09ITA7YnJlYWs7Y2FzZSJBUFBMWSI6bT1uLmFwcGx5KHQsZik7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOm09ZnVuY3Rpb24ocil7cmV0dXJuIE9iamVjdC5hc3NpZ24ocix7W2VdOiEwfSl9KG5ldyBuKC4uLmYpKTticmVhaztjYXNlIkVORFBPSU5UIjp7Y29uc3R7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7aShyLHQpLG09ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcC5zZXQoZSxyKSxlfShlLFtlXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjptPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goZSl7bT17dmFsdWU6ZSxbb106MH19UHJvbWlzZS5yZXNvbHZlKG0pLmNhdGNoKChlPT4oe3ZhbHVlOmUsW29dOjB9KSkpLnRoZW4oKGU9Pntjb25zdFtvLGFdPXYoZSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse2lkOmN9KSxhKSwiUkVMRUFTRSI9PT1kJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSx1KHQpLG4gaW4gciYmImZ1bmN0aW9uIj09dHlwZW9mIHJbbl0mJnJbbl0oKSl9KSkuY2F0Y2goKGU9Pntjb25zdFtyLG5dPXYoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtvXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scikse2lkOmN9KSxuKX0pKX0pKSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gdShlKXsoZnVuY3Rpb24oZSl7cmV0dXJuIk1lc3NhZ2VQb3J0Ij09PWUuY29uc3RydWN0b3IubmFtZX0pKGUpJiZlLmNsb3NlKCl9ZnVuY3Rpb24gbChlKXtpZihlKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZyhlLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCgpPT57dShlKX0pKX1jb25zdCBkPW5ldyBXZWFrTWFwLGg9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoZT0+e2NvbnN0IHI9KGQuZ2V0KGUpfHwwKS0xO2Quc2V0KGUsciksMD09PXImJmMoZSl9KSk7ZnVuY3Rpb24gZihlLG49W10sbz1mdW5jdGlvbigpe30pe2xldCBhPSExO2NvbnN0IHM9bmV3IFByb3h5KG8se2dldChyLG8pe2lmKGwoYSksbz09PXQpcmV0dXJuKCk9PnshZnVuY3Rpb24oZSl7aCYmaC51bnJlZ2lzdGVyKGUpfShzKSxjKGUpLGE9ITB9O2lmKCJ0aGVuIj09PW8pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm57dGhlbjooKT0+c307Y29uc3Qgcj1nKGUse3R5cGU6IkdFVCIscGF0aDpuLm1hcCgoZT0+ZS50b1N0cmluZygpKSl9KS50aGVuKHcpO3JldHVybiByLnRoZW4uYmluZChyKX1yZXR1cm4gZihlLFsuLi5uLG9dKX0sc2V0KHIsdCxvKXtsKGEpO2NvbnN0W3MsaV09dihvKTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLm4sdF0ubWFwKChlPT5lLnRvU3RyaW5nKCkpKSx2YWx1ZTpzfSxpKS50aGVuKHcpfSxhcHBseSh0LG8scyl7bChhKTtjb25zdCBpPW5bbi5sZW5ndGgtMV07aWYoaT09PXIpcmV0dXJuIGcoZSx7dHlwZToiRU5EUE9JTlQifSkudGhlbih3KTtpZigiYmluZCI9PT1pKXJldHVybiBmKGUsbi5zbGljZSgwLC0xKSk7Y29uc3RbdSxjXT1tKHMpO3JldHVybiBnKGUse3R5cGU6IkFQUExZIixwYXRoOm4ubWFwKChlPT5lLnRvU3RyaW5nKCkpKSxhcmd1bWVudExpc3Q6dX0sYykudGhlbih3KX0sY29uc3RydWN0KHIsdCl7bChhKTtjb25zdFtvLHNdPW0odCk7cmV0dXJuIGcoZSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOm4ubWFwKChlPT5lLnRvU3RyaW5nKCkpKSxhcmd1bWVudExpc3Q6b30scykudGhlbih3KX19KTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtjb25zdCB0PShkLmdldChyKXx8MCkrMTtkLnNldChyLHQpLGgmJmgucmVnaXN0ZXIoZSxyLGUpfShzLGUpLHN9ZnVuY3Rpb24gbShlKXtjb25zdCByPWUubWFwKHYpO3JldHVybltyLm1hcCgoZT0+ZVswXSkpLCh0PXIubWFwKChlPT5lWzFdKSksQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KSldO3ZhciB0fWNvbnN0IHA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdihlKXtmb3IoY29uc3Rbcix0XW9mIHMpaWYodC5jYW5IYW5kbGUoZSkpe2NvbnN0W24sb109dC5zZXJpYWxpemUoZSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnIsdmFsdWU6bn0sb119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOmV9LHAuZ2V0KGUpfHxbXV19ZnVuY3Rpb24gdyhlKXtzd2l0Y2goZS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBzLmdldChlLm5hbWUpLmRlc2VyaWFsaXplKGUudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gZS52YWx1ZX19ZnVuY3Rpb24gZyhlLHIsdCl7cmV0dXJuIG5ldyBQcm9taXNlKChuPT57Y29uc3Qgbz1uZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkpLmpvaW4oIi0iKTtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLChmdW5jdGlvbiByKHQpe3QuZGF0YSYmdC5kYXRhLmlkJiZ0LmRhdGEuaWQ9PT1vJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxuKHQuZGF0YSkpfSkpLGUuc3RhcnQmJmUuc3RhcnQoKSxlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm99LHIpLHQpfSkpfWNvbnN0IF89ezMyNzY4OiJGSUxFIiwxNjM4NDoiRElSIiw0MDk2MDoiU1lNQk9MSUNfTElOSyIsNDkxNTI6IlNPQ0tFVCIsODE5MjoiQ0hBUkFDVEVSX0RFVklDRSIsMjQ1NzY6IkJMT0NLX0RFVklDRSIsNDA5NjoiTkFNRURfUElQRSJ9O2NsYXNzIHl7Y29uc3RydWN0b3IoZSl7dGhpcy5fd2FzbU1vZHVsZT1lLHRoaXMuX3J1bkNvZGU9ZS5ydW5Db2RlLHRoaXMuX2ZpbGU9bnVsbCx0aGlzLl9wYXNzcGhyYXNlPW51bGwsdGhpcy5fbG9jYWxlPSJlbl9VUy5VVEYtOCJ9YXN5bmMgb3BlbihlKXtudWxsIT09dGhpcy5fZmlsZSYmKGNvbnNvbGUud2FybigiQ2xvc2luZyBwcmV2aW91cyBmaWxlIiksdGhpcy5jbG9zZSgpKTtjb25zdCByPWF3YWl0IHRoaXMuX2xvYWRGaWxlKGUpO3RoaXMuX2ZpbGVMZW5ndGg9ci5sZW5ndGgsdGhpcy5fZmlsZVB0cj1yLnB0cn1jbG9zZSgpe3RoaXMuX3J1bkNvZGUuY2xvc2VBcmNoaXZlKHRoaXMuX2FyY2hpdmUpLHRoaXMuX3dhc21Nb2R1bGUuX2ZyZWUodGhpcy5fZmlsZVB0ciksdGhpcy5fZmlsZT1udWxsLHRoaXMuX2ZpbGVQdHI9bnVsbCx0aGlzLl9hcmNoaXZlPW51bGx9aGFzRW5jcnlwdGVkRGF0YSgpe3RoaXMuX2FyY2hpdmU9dGhpcy5fcnVuQ29kZS5vcGVuQXJjaGl2ZSh0aGlzLl9maWxlUHRyLHRoaXMuX2ZpbGVMZW5ndGgsdGhpcy5fcGFzc3BocmFzZSx0aGlzLl9sb2NhbGUpLHRoaXMuX3J1bkNvZGUuZ2V0TmV4dEVudHJ5KHRoaXMuX2FyY2hpdmUpO2NvbnN0IGU9dGhpcy5fcnVuQ29kZS5oYXNFbmNyeXB0ZWRFbnRyaWVzKHRoaXMuX2FyY2hpdmUpO3JldHVybiAwIT09ZSYmKGU+MHx8bnVsbCl9c2V0UGFzc3BocmFzZShlKXt0aGlzLl9wYXNzcGhyYXNlPWV9c2V0TG9jYWxlKGUpe3RoaXMuX2xvY2FsZT1lfSplbnRyaWVzKGU9ITEscj1udWxsKXtsZXQgdDtmb3IodGhpcy5fYXJjaGl2ZT10aGlzLl9ydW5Db2RlLm9wZW5BcmNoaXZlKHRoaXMuX2ZpbGVQdHIsdGhpcy5fZmlsZUxlbmd0aCx0aGlzLl9wYXNzcGhyYXNlLHRoaXMuX2xvY2FsZSk7dD10aGlzLl9ydW5Db2RlLmdldE5leHRFbnRyeSh0aGlzLl9hcmNoaXZlKSwwIT09dDspe2NvbnN0IG49e3NpemU6dGhpcy5fcnVuQ29kZS5nZXRFbnRyeVNpemUodCkscGF0aDp0aGlzLl9ydW5Db2RlLmdldEVudHJ5TmFtZSh0KSx0eXBlOl9bdGhpcy5fcnVuQ29kZS5nZXRFbnRyeVR5cGUodCldLGxhc3RNb2RpZmllZDp0aGlzLl9ydW5Db2RlLmdldEVudHJ5TGFzdE1vZGlmaWVkKHQpLHJlZjp0fTtpZigiRklMRSI9PT1uLnR5cGUpe2xldCBlPW4ucGF0aC5zcGxpdCgiLyIpO24uZmlsZU5hbWU9ZVtlLmxlbmd0aC0xXX1pZihlJiZyIT09bi5wYXRoKXRoaXMuX3J1bkNvZGUuc2tpcEVudHJ5KHRoaXMuX2FyY2hpdmUpO2Vsc2V7Y29uc3QgZT10aGlzLl9ydW5Db2RlLmdldEZpbGVEYXRhKHRoaXMuX2FyY2hpdmUsbi5zaXplKTtpZihlPDApdGhyb3cgbmV3IEVycm9yKHRoaXMuX3J1bkNvZGUuZ2V0RXJyb3IodGhpcy5fYXJjaGl2ZSkpO24uZmlsZURhdGE9dGhpcy5fd2FzbU1vZHVsZS5IRUFQVTguc2xpY2UoZSxlK24uc2l6ZSksdGhpcy5fd2FzbU1vZHVsZS5fZnJlZShlKX15aWVsZCBufX1hc3luYyBfbG9hZEZpbGUoZSl7Y29uc3Qgcj1hd2FpdCBlLmFycmF5QnVmZmVyKCksdD1uZXcgVWludDhBcnJheShyKSxuPXRoaXMuX3J1bkNvZGUubWFsbG9jKHQubGVuZ3RoKTtyZXR1cm4gdGhpcy5fd2FzbU1vZHVsZS5IRUFQVTguc2V0KHQsbikse3B0cjpuLGxlbmd0aDp0Lmxlbmd0aH19fWNsYXNzIEV7Y29uc3RydWN0b3IoZSl7dGhpcy5fd2FzbU1vZHVsZT1lLHRoaXMuX3J1bkNvZGU9ZS5ydW5Db2RlLHRoaXMuX3Bhc3NwaHJhc2U9bnVsbCx0aGlzLl9sb2NhbGU9ImVuX1VTLlVURi04In1hc3luYyB3cml0ZShlLHIsdCxuPW51bGwpe2xldCBvPWUucmVkdWNlKCgoZSx7ZmlsZTpyfSk9PmUrci5zaXplKzEyOCksMCkrMTI4O2NvbnN0IGE9dGhpcy5fcnVuQ29kZS5tYWxsb2Mobykscz10aGlzLl9ydW5Db2RlLm1hbGxvYyh0aGlzLl9ydW5Db2RlLnNpemVPZlNpemVUKCkpLGk9dGhpcy5fcnVuQ29kZS5zdGFydEFyY2hpdmVXcml0ZShyLHQsYSxvLHMsbik7Zm9yKGNvbnN0e2ZpbGU6cixwYXRobmFtZTp0fW9mIGUpe2NvbnN0IGU9YXdhaXQgdGhpcy5fbG9hZEZpbGUocik7dGhpcy5fcnVuQ29kZS53cml0ZUFyY2hpdmVGaWxlKGksdHx8ci5uYW1lLGUubGVuZ3RoLGUucHRyKSx0aGlzLl9ydW5Db2RlLmZyZWUoZS5wdHIpfWNvbnN0IHU9dGhpcy5fcnVuQ29kZS5maW5pc2hBcmNoaXZlV3JpdGUoaSxzKTtpZih1PDApdGhyb3cgbmV3IEVycm9yKHRoaXMuX3J1bkNvZGUuZ2V0RXJyb3IoaSkpO3JldHVybiB0aGlzLl93YXNtTW9kdWxlLkhFQVBVOC5zbGljZShhLGErdSl9YXN5bmMgX2xvYWRGaWxlKGUpe2NvbnN0IHI9YXdhaXQgZS5hcnJheUJ1ZmZlcigpLHQ9bmV3IFVpbnQ4QXJyYXkociksbj10aGlzLl9ydW5Db2RlLm1hbGxvYyh0Lmxlbmd0aCk7cmV0dXJuIHRoaXMuX3dhc21Nb2R1bGUuSEVBUFU4LnNldCh0LG4pLHtwdHI6bixsZW5ndGg6dC5sZW5ndGh9fX12YXIgYixrPShiPWltcG9ydC5tZXRhLnVybCxhc3luYyBmdW5jdGlvbihlPXt9KXt2YXIgcix0LG49ZTtuLnJlYWR5PW5ldyBQcm9taXNlKCgoZSxuKT0+e3I9ZSx0PW59KSk7dmFyIG8sYSxzLGk9T2JqZWN0LmFzc2lnbih7fSxuKSx1PSIuL3RoaXMucHJvZ3JhbSIsbD0oZSxyKT0+e3Rocm93IHJ9LGM9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3csZD0iZnVuY3Rpb24iPT10eXBlb2YgaW1wb3J0U2NyaXB0cyxoPSJvYmplY3QiPT10eXBlb2YgcHJvY2VzcyYmIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zJiYic3RyaW5nIj09dHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSxmPSIiO2lmKGgpe2NvbnN0e2NyZWF0ZVJlcXVpcmU6ZX09YXdhaXQgaW1wb3J0KCJtb2R1bGUiKTt2YXIgbT1lKGltcG9ydC5tZXRhLnVybCkscD1tKCJmcyIpLHY9bSgicGF0aCIpO2Y9ZD92LmRpcm5hbWUoZikrIi8iOm0oInVybCIpLmZpbGVVUkxUb1BhdGgobmV3IFVSTCgiLi8iLGltcG9ydC5tZXRhLnVybCkpLG89KGUscik9PihlPVkoZSk/bmV3IFVSTChlKTp2Lm5vcm1hbGl6ZShlKSxwLnJlYWRGaWxlU3luYyhlLHI/dm9pZCAwOiJ1dGY4IikpLHM9ZT0+e3ZhciByPW8oZSwhMCk7cmV0dXJuIHIuYnVmZmVyfHwocj1uZXcgVWludDhBcnJheShyKSkscn0sYT0oZSxyLHQsbj0hMCk9PntlPVkoZSk/bmV3IFVSTChlKTp2Lm5vcm1hbGl6ZShlKSxwLnJlYWRGaWxlKGUsbj92b2lkIDA6InV0ZjgiLCgoZSxvKT0+e2U/dChlKTpyKG4/by5idWZmZXI6byl9KSl9LCFuLnRoaXNQcm9ncmFtJiZwcm9jZXNzLmFyZ3YubGVuZ3RoPjEmJih1PXByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikpLHByb2Nlc3MuYXJndi5zbGljZSgyKSxsPShlLHIpPT57dGhyb3cgcHJvY2Vzcy5leGl0Q29kZT1lLHJ9LG4uaW5zcGVjdD0oKT0+IltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdIn1lbHNlKGN8fGQpJiYoZD9mPXNlbGYubG9jYXRpb24uaHJlZjoidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoZj1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksYiYmKGY9YiksZj0wIT09Zi5pbmRleE9mKCJibG9iOiIpP2Yuc3Vic3RyKDAsZi5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOiIiLG89ZT0+e3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLGUsITEpLHIuc2VuZChudWxsKSxyLnJlc3BvbnNlVGV4dH0sZCYmKHM9ZT0+e3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLGUsITEpLHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsci5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KHIucmVzcG9uc2UpfSksYT0oZSxyLHQpPT57dmFyIG49bmV3IFhNTEh0dHBSZXF1ZXN0O24ub3BlbigiR0VUIixlLCEwKSxuLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLG4ub25sb2FkPSgpPT57MjAwPT1uLnN0YXR1c3x8MD09bi5zdGF0dXMmJm4ucmVzcG9uc2U/cihuLnJlc3BvbnNlKTp0KCl9LG4ub25lcnJvcj10LG4uc2VuZChudWxsKX0pO3ZhciB3LGcsXz1uLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHk9bi5wcmludEVycnx8Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24obixpKSxpPW51bGwsbi5hcmd1bWVudHMmJm4uYXJndW1lbnRzLG4udGhpc1Byb2dyYW0mJih1PW4udGhpc1Byb2dyYW0pLG4ucXVpdCYmKGw9bi5xdWl0KSxuLndhc21CaW5hcnkmJih3PW4ud2FzbUJpbmFyeSksIm9iamVjdCIhPXR5cGVvZiBXZWJBc3NlbWJseSYmTygibm8gbmF0aXZlIHdhc20gc3VwcG9ydCBkZXRlY3RlZCIpO3ZhciBFLGssUyxGLEQsTT0hMTtmdW5jdGlvbiBBKGUscil7ZXx8TyhyKX1mdW5jdGlvbiBDKCl7dmFyIGU9Zy5idWZmZXI7bi5IRUFQOD1FPW5ldyBJbnQ4QXJyYXkoZSksbi5IRUFQMTY9Uz1uZXcgSW50MTZBcnJheShlKSxuLkhFQVBVOD1rPW5ldyBVaW50OEFycmF5KGUpLG4uSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoZSksbi5IRUFQMzI9Rj1uZXcgSW50MzJBcnJheShlKSxuLkhFQVBVMzI9RD1uZXcgVWludDMyQXJyYXkoZSksbi5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoZSksbi5IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkoZSl9dmFyIFA9W10sVD1bXSxSPVtdLHo9MCxVPW51bGw7ZnVuY3Rpb24gTChlKXt6Kyssbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzPy4oeil9ZnVuY3Rpb24geChlKXtpZih6LS0sbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzPy4oeiksMD09eiYmVSl7dmFyIHI9VTtVPW51bGwscigpfX1mdW5jdGlvbiBPKGUpe24ub25BYm9ydD8uKGUpLHkoZT0iQWJvcnRlZCgiK2UrIikiKSxNPSEwLGUrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgcj1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKGUpO3Rocm93IHQocikscn12YXIgTixCLGosSSxIPWU9PmUuc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpLFk9ZT0+ZS5zdGFydHNXaXRoKCJmaWxlOi8vIik7ZnVuY3Rpb24gVyhlKXtpZihlPT1OJiZ3KXJldHVybiBuZXcgVWludDhBcnJheSh3KTtpZihzKXJldHVybiBzKGUpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1mdW5jdGlvbiBLKGUscix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoIXcmJihjfHxkKSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGZldGNoJiYhWShlKSlyZXR1cm4gZmV0Y2goZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oKHI9PntpZighci5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2UrIiciO3JldHVybiByLmFycmF5QnVmZmVyKCl9KSkuY2F0Y2goKCgpPT5XKGUpKSk7aWYoYSlyZXR1cm4gbmV3IFByb21pc2UoKChyLHQpPT57YShlLChlPT5yKG5ldyBVaW50OEFycmF5KGUpKSksdCl9KSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCgpPT5XKGUpKSl9KGUpLnRoZW4oKGU9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGUscikpKS50aGVuKChlPT5lKSkudGhlbih0LChlPT57eShgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHtlfWApLE8oZSl9KSl9ZnVuY3Rpb24gcShlKXt0aGlzLm5hbWU9IkV4aXRTdGF0dXMiLHRoaXMubWVzc2FnZT1gUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke2V9KWAsdGhpcy5zdGF0dXM9ZX1uLmxvY2F0ZUZpbGU/SChOPSJsaWJhcmNoaXZlLndhc20iKXx8KEI9TixOPW4ubG9jYXRlRmlsZT9uLmxvY2F0ZUZpbGUoQixmKTpmK0IpOk49bmV3IFVSTCgibGliYXJjaGl2ZS53YXNtIixpbXBvcnQubWV0YS51cmwpLmhyZWY7dmFyICQ9ZT0+e2Zvcig7ZS5sZW5ndGg+MDspZS5zaGlmdCgpKG4pfSxYPW4ubm9FeGl0UnVudGltZXx8ITAsWj17aXNBYnM6ZT0+Ii8iPT09ZS5jaGFyQXQoMCksc3BsaXRQYXRoOmU9Pi9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKGUpLnNsaWNlKDEpLG5vcm1hbGl6ZUFycmF5OihlLHIpPT57Zm9yKHZhciB0PTAsbj1lLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgbz1lW25dOyIuIj09PW8/ZS5zcGxpY2UobiwxKToiLi4iPT09bz8oZS5zcGxpY2UobiwxKSx0KyspOnQmJihlLnNwbGljZShuLDEpLHQtLSl9aWYocilmb3IoO3Q7dC0tKWUudW5zaGlmdCgiLi4iKTtyZXR1cm4gZX0sbm9ybWFsaXplOmU9Pnt2YXIgcj1aLmlzQWJzKGUpLHQ9Ii8iPT09ZS5zdWJzdHIoLTEpO3JldHVybihlPVoubm9ybWFsaXplQXJyYXkoZS5zcGxpdCgiLyIpLmZpbHRlcigoZT0+ISFlKSksIXIpLmpvaW4oIi8iKSl8fHJ8fChlPSIuIiksZSYmdCYmKGUrPSIvIiksKHI/Ii8iOiIiKStlfSxkaXJuYW1lOmU9Pnt2YXIgcj1aLnNwbGl0UGF0aChlKSx0PXJbMF0sbj1yWzFdO3JldHVybiB0fHxuPyhuJiYobj1uLnN1YnN0cigwLG4ubGVuZ3RoLTEpKSx0K24pOiIuIn0sYmFzZW5hbWU6ZT0+e2lmKCIvIj09PWUpcmV0dXJuIi8iO3ZhciByPShlPShlPVoubm9ybWFsaXplKGUpKS5yZXBsYWNlKC9cLyQvLCIiKSkubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PXI/ZTplLnN1YnN0cihyKzEpfSxqb2luOmZ1bmN0aW9uKCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gWi5ub3JtYWxpemUoZS5qb2luKCIvIikpfSxqb2luMjooZSxyKT0+Wi5ub3JtYWxpemUoZSsiLyIrcil9LEc9ZT0+KEc9KCgpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXJldHVybiBlPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpO2lmKGgpdHJ5e3ZhciBlPW0oImNyeXB0byIpO2lmKGUucmFuZG9tRmlsbFN5bmMpcmV0dXJuIHI9PmUucmFuZG9tRmlsbFN5bmMocik7dmFyIHI9ZS5yYW5kb21CeXRlcztyZXR1cm4gZT0+KGUuc2V0KHIoZS5ieXRlTGVuZ3RoKSksZSl9Y2F0Y2goZSl7fU8oImluaXRSYW5kb21EZXZpY2UiKX0pKCkpKGUpLFY9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIscj0hMSx0PWFyZ3VtZW50cy5sZW5ndGgtMTt0Pj0tMSYmIXI7dC0tKXt2YXIgbj10Pj0wP2FyZ3VtZW50c1t0XTpsZS5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighbilyZXR1cm4iIjtlPW4rIi8iK2Uscj1aLmlzQWJzKG4pfXJldHVybihyPyIvIjoiIikrKGU9Wi5ub3JtYWxpemVBcnJheShlLnNwbGl0KCIvIikuZmlsdGVyKChlPT4hIWUpKSwhcikuam9pbigiLyIpKXx8Ii4ifSxyZWxhdGl2ZTooZSxyKT0+e2Z1bmN0aW9uIHQoZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aCYmIiI9PT1lW3JdO3IrKyk7Zm9yKHZhciB0PWUubGVuZ3RoLTE7dD49MCYmIiI9PT1lW3RdO3QtLSk7cmV0dXJuIHI+dD9bXTplLnNsaWNlKHIsdC1yKzEpfWU9Vi5yZXNvbHZlKGUpLnN1YnN0cigxKSxyPVYucmVzb2x2ZShyKS5zdWJzdHIoMSk7Zm9yKHZhciBuPXQoZS5zcGxpdCgiLyIpKSxvPXQoci5zcGxpdCgiLyIpKSxhPU1hdGgubWluKG4ubGVuZ3RoLG8ubGVuZ3RoKSxzPWEsaT0wO2k8YTtpKyspaWYobltpXSE9PW9baV0pe3M9aTticmVha312YXIgdT1bXTtmb3IoaT1zO2k8bi5sZW5ndGg7aSsrKXUucHVzaCgiLi4iKTtyZXR1cm4odT11LmNvbmNhdChvLnNsaWNlKHMpKSkuam9pbigiLyIpfX0sSj0idW5kZWZpbmVkIiE9dHlwZW9mIFRleHREZWNvZGVyP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMCxRPShlLHIsdCk9Pntmb3IodmFyIG49cit0LG89cjtlW29dJiYhKG8+PW4pOykrK287aWYoby1yPjE2JiZlLmJ1ZmZlciYmSilyZXR1cm4gSi5kZWNvZGUoZS5zdWJhcnJheShyLG8pKTtmb3IodmFyIGE9IiI7cjxvOyl7dmFyIHM9ZVtyKytdO2lmKDEyOCZzKXt2YXIgaT02MyZlW3IrK107aWYoMTkyIT0oMjI0JnMpKXt2YXIgdT02MyZlW3IrK107aWYoKHM9MjI0PT0oMjQwJnMpPygxNSZzKTw8MTJ8aTw8Nnx1Oig3JnMpPDwxOHxpPDwxMnx1PDw2fDYzJmVbcisrXSk8NjU1MzYpYSs9U3RyaW5nLmZyb21DaGFyQ29kZShzKTtlbHNle3ZhciBsPXMtNjU1MzY7YSs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxsPj4xMCw1NjMyMHwxMDIzJmwpfX1lbHNlIGErPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMxJnMpPDw2fGkpfWVsc2UgYSs9U3RyaW5nLmZyb21DaGFyQ29kZShzKX1yZXR1cm4gYX0sZWU9W10scmU9ZT0+e2Zvcih2YXIgcj0wLHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO248PTEyNz9yKys6bjw9MjA0Nz9yKz0yOm4+PTU1Mjk2JiZuPD01NzM0Mz8ocis9NCwrK3QpOnIrPTN9cmV0dXJuIHJ9LHRlPShlLHIsdCxuKT0+e2lmKCEobj4wKSlyZXR1cm4gMDtmb3IodmFyIG89dCxhPXQrbi0xLHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGk9ZS5jaGFyQ29kZUF0KHMpO2lmKGk+PTU1Mjk2JiZpPD01NzM0MyYmKGk9NjU1MzYrKCgxMDIzJmkpPDwxMCl8MTAyMyZlLmNoYXJDb2RlQXQoKytzKSksaTw9MTI3KXtpZih0Pj1hKWJyZWFrO3JbdCsrXT1pfWVsc2UgaWYoaTw9MjA0Nyl7aWYodCsxPj1hKWJyZWFrO3JbdCsrXT0xOTJ8aT4+NixyW3QrK109MTI4fDYzJml9ZWxzZSBpZihpPD02NTUzNSl7aWYodCsyPj1hKWJyZWFrO3JbdCsrXT0yMjR8aT4+MTIsclt0KytdPTEyOHxpPj42JjYzLHJbdCsrXT0xMjh8NjMmaX1lbHNle2lmKHQrMz49YSlicmVhaztyW3QrK109MjQwfGk+PjE4LHJbdCsrXT0xMjh8aT4+MTImNjMsclt0KytdPTEyOHxpPj42JjYzLHJbdCsrXT0xMjh8NjMmaX19cmV0dXJuIHJbdF09MCx0LW99O2Z1bmN0aW9uIG5lKGUscix0KXt2YXIgbj10PjA/dDpyZShlKSsxLG89bmV3IEFycmF5KG4pLGE9dGUoZSxvLDAsby5sZW5ndGgpO3JldHVybiByJiYoby5sZW5ndGg9YSksb312YXIgb2U9e3R0eXM6W10saW5pdCgpe30sc2h1dGRvd24oKXt9LHJlZ2lzdGVyKGUscil7b2UudHR5c1tlXT17aW5wdXQ6W10sb3V0cHV0OltdLG9wczpyfSxsZS5yZWdpc3RlckRldmljZShlLG9lLnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuKGUpe3ZhciByPW9lLnR0eXNbZS5ub2RlLnJkZXZdO2lmKCFyKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQzKTtlLnR0eT1yLGUuc2Vla2FibGU9ITF9LGNsb3NlKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LGZzeW5jKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LHJlYWQoZSxyLHQsbixvKXtpZighZS50dHl8fCFlLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjApO2Zvcih2YXIgYT0wLHM9MDtzPG47cysrKXt2YXIgaTt0cnl7aT1lLnR0eS5vcHMuZ2V0X2NoYXIoZS50dHkpfWNhdGNoKGUpe3Rocm93IG5ldyBsZS5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1pJiYwPT09YSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig2KTtpZihudWxsPT1pKWJyZWFrO2ErKyxyW3Qrc109aX1yZXR1cm4gYSYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksYX0sd3JpdGUoZSxyLHQsbixvKXtpZighZS50dHl8fCFlLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIGE9MDthPG47YSsrKWUudHR5Lm9wcy5wdXRfY2hhcihlLnR0eSxyW3QrYV0pfWNhdGNoKGUpe3Rocm93IG5ldyBsZS5FcnJub0Vycm9yKDI5KX1yZXR1cm4gbiYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksYX19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6ZT0+KCgpPT57aWYoIWVlLmxlbmd0aCl7dmFyIGU9bnVsbDtpZihoKXt2YXIgcj1CdWZmZXIuYWxsb2MoMjU2KSx0PTAsbj1wcm9jZXNzLnN0ZGluLmZkO3RyeXt0PXAucmVhZFN5bmMobixyKX1jYXRjaChlKXtpZighZS50b1N0cmluZygpLmluY2x1ZGVzKCJFT0YiKSl0aHJvdyBlO3Q9MH1lPXQ+MD9yLnNsaWNlKDAsdCkudG9TdHJpbmcoInV0Zi04Iik6bnVsbH1lbHNlInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cucHJvbXB0P251bGwhPT0oZT13aW5kb3cucHJvbXB0KCJJbnB1dDogIikpJiYoZSs9IlxuIik6ImZ1bmN0aW9uIj09dHlwZW9mIHJlYWRsaW5lJiZudWxsIT09KGU9cmVhZGxpbmUoKSkmJihlKz0iXG4iKTtpZighZSlyZXR1cm4gbnVsbDtlZT1uZShlLCEwKX1yZXR1cm4gZWUuc2hpZnQoKX0pKCkscHV0X2NoYXIoZSxyKXtudWxsPT09cnx8MTA9PT1yPyhfKFEoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKTowIT1yJiZlLm91dHB1dC5wdXNoKHIpfSxmc3luYyhlKXtlLm91dHB1dCYmZS5vdXRwdXQubGVuZ3RoPjAmJihfKFEoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKX0saW9jdGxfdGNnZXRzOmU9Pih7Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2NjOlszLDI4LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF19KSxpb2N0bF90Y3NldHM6KGUscix0KT0+MCxpb2N0bF90aW9jZ3dpbnN6OmU9PlsyNCw4MF19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKGUscil7bnVsbD09PXJ8fDEwPT09cj8oeShRKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSk6MCE9ciYmZS5vdXRwdXQucHVzaChyKX0sZnN5bmMoZSl7ZS5vdXRwdXQmJmUub3V0cHV0Lmxlbmd0aD4wJiYoeShRKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSl9fX0sYWU9ZT0+e08oKX0sc2U9e29wc190YWJsZTpudWxsLG1vdW50OmU9PnNlLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCksY3JlYXRlTm9kZShlLHIsdCxuKXtpZihsZS5pc0Jsa2Rldih0KXx8bGUuaXNGSUZPKHQpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtzZS5vcHNfdGFibGV8fD17ZGlyOntub2RlOntnZXRhdHRyOnNlLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpzZS5ub2RlX29wcy5zZXRhdHRyLGxvb2t1cDpzZS5ub2RlX29wcy5sb29rdXAsbWtub2Q6c2Uubm9kZV9vcHMubWtub2QscmVuYW1lOnNlLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6c2Uubm9kZV9vcHMudW5saW5rLHJtZGlyOnNlLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6c2Uubm9kZV9vcHMucmVhZGRpcixzeW1saW5rOnNlLm5vZGVfb3BzLnN5bWxpbmt9LHN0cmVhbTp7bGxzZWVrOnNlLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjpzZS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6c2Uubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6c2Uuc3RyZWFtX29wcy5sbHNlZWsscmVhZDpzZS5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6c2Uuc3RyZWFtX29wcy53cml0ZSxhbGxvY2F0ZTpzZS5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6c2Uuc3RyZWFtX29wcy5tbWFwLG1zeW5jOnNlLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOnNlLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpzZS5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOnNlLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJlYW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjpzZS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6c2Uubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOmxlLmNocmRldl9zdHJlYW1fb3BzfX07dmFyIG89bGUuY3JlYXRlTm9kZShlLHIsdCxuKTtyZXR1cm4gbGUuaXNEaXIoby5tb2RlKT8oby5ub2RlX29wcz1zZS5vcHNfdGFibGUuZGlyLm5vZGUsby5zdHJlYW1fb3BzPXNlLm9wc190YWJsZS5kaXIuc3RyZWFtLG8uY29udGVudHM9e30pOmxlLmlzRmlsZShvLm1vZGUpPyhvLm5vZGVfb3BzPXNlLm9wc190YWJsZS5maWxlLm5vZGUsby5zdHJlYW1fb3BzPXNlLm9wc190YWJsZS5maWxlLnN0cmVhbSxvLnVzZWRCeXRlcz0wLG8uY29udGVudHM9bnVsbCk6bGUuaXNMaW5rKG8ubW9kZSk/KG8ubm9kZV9vcHM9c2Uub3BzX3RhYmxlLmxpbmsubm9kZSxvLnN0cmVhbV9vcHM9c2Uub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpsZS5pc0NocmRldihvLm1vZGUpJiYoby5ub2RlX29wcz1zZS5vcHNfdGFibGUuY2hyZGV2Lm5vZGUsby5zdHJlYW1fb3BzPXNlLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSxvLnRpbWVzdGFtcD1EYXRlLm5vdygpLGUmJihlLmNvbnRlbnRzW3JdPW8sZS50aW1lc3RhbXA9by50aW1lc3RhbXApLG99LGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OmU9PmUuY29udGVudHM/ZS5jb250ZW50cy5zdWJhcnJheT9lLmNvbnRlbnRzLnN1YmFycmF5KDAsZS51c2VkQnl0ZXMpOm5ldyBVaW50OEFycmF5KGUuY29udGVudHMpOm5ldyBVaW50OEFycmF5KDApLGV4cGFuZEZpbGVTdG9yYWdlKGUscil7dmFyIHQ9ZS5jb250ZW50cz9lLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEodD49cikpe3I9TWF0aC5tYXgocix0Kih0PDEwNDg1NzY/MjoxLjEyNSk+Pj4wKSwwIT10JiYocj1NYXRoLm1heChyLDI1NikpO3ZhciBuPWUuY29udGVudHM7ZS5jb250ZW50cz1uZXcgVWludDhBcnJheShyKSxlLnVzZWRCeXRlcz4wJiZlLmNvbnRlbnRzLnNldChuLnN1YmFycmF5KDAsZS51c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2UoZSxyKXtpZihlLnVzZWRCeXRlcyE9cilpZigwPT1yKWUuY29udGVudHM9bnVsbCxlLnVzZWRCeXRlcz0wO2Vsc2V7dmFyIHQ9ZS5jb250ZW50cztlLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KHIpLHQmJmUuY29udGVudHMuc2V0KHQuc3ViYXJyYXkoMCxNYXRoLm1pbihyLGUudXNlZEJ5dGVzKSkpLGUudXNlZEJ5dGVzPXJ9fSxub2RlX29wczp7Z2V0YXR0cihlKXt2YXIgcj17fTtyZXR1cm4gci5kZXY9bGUuaXNDaHJkZXYoZS5tb2RlKT9lLmlkOjEsci5pbm89ZS5pZCxyLm1vZGU9ZS5tb2RlLHIubmxpbms9MSxyLnVpZD0wLHIuZ2lkPTAsci5yZGV2PWUucmRldixsZS5pc0RpcihlLm1vZGUpP3Iuc2l6ZT00MDk2OmxlLmlzRmlsZShlLm1vZGUpP3Iuc2l6ZT1lLnVzZWRCeXRlczpsZS5pc0xpbmsoZS5tb2RlKT9yLnNpemU9ZS5saW5rLmxlbmd0aDpyLnNpemU9MCxyLmF0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLm10aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmN0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmJsa3NpemU9NDA5NixyLmJsb2Nrcz1NYXRoLmNlaWwoci5zaXplL3IuYmxrc2l6ZSkscn0sc2V0YXR0cihlLHIpe3ZvaWQgMCE9PXIubW9kZSYmKGUubW9kZT1yLm1vZGUpLHZvaWQgMCE9PXIudGltZXN0YW1wJiYoZS50aW1lc3RhbXA9ci50aW1lc3RhbXApLHZvaWQgMCE9PXIuc2l6ZSYmc2UucmVzaXplRmlsZVN0b3JhZ2UoZSxyLnNpemUpfSxsb29rdXAoZSxyKXt0aHJvdyBsZS5nZW5lcmljRXJyb3JzWzQ0XX0sbWtub2Q6KGUscix0LG4pPT5zZS5jcmVhdGVOb2RlKGUscix0LG4pLHJlbmFtZShlLHIsdCl7aWYobGUuaXNEaXIoZS5tb2RlKSl7dmFyIG47dHJ5e249bGUubG9va3VwTm9kZShyLHQpfWNhdGNoKGUpe31pZihuKWZvcih2YXIgbyBpbiBuLmNvbnRlbnRzKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU1KX1kZWxldGUgZS5wYXJlbnQuY29udGVudHNbZS5uYW1lXSxlLnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxlLm5hbWU9dCxyLmNvbnRlbnRzW3RdPWUsci50aW1lc3RhbXA9ZS5wYXJlbnQudGltZXN0YW1wLGUucGFyZW50PXJ9LHVubGluayhlLHIpe2RlbGV0ZSBlLmNvbnRlbnRzW3JdLGUudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKGUscil7dmFyIHQ9bGUubG9va3VwTm9kZShlLHIpO2Zvcih2YXIgbiBpbiB0LmNvbnRlbnRzKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU1KTtkZWxldGUgZS5jb250ZW50c1tyXSxlLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxyZWFkZGlyKGUpe3ZhciByPVsiLiIsIi4uIl07Zm9yKHZhciB0IG9mIE9iamVjdC5rZXlzKGUuY29udGVudHMpKXIucHVzaCh0KTtyZXR1cm4gcn0sc3ltbGluayhlLHIsdCl7dmFyIG49c2UuY3JlYXRlTm9kZShlLHIsNDE0NzEsMCk7cmV0dXJuIG4ubGluaz10LG59LHJlYWRsaW5rKGUpe2lmKCFsZS5pc0xpbmsoZS5tb2RlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7cmV0dXJuIGUubGlua319LHN0cmVhbV9vcHM6e3JlYWQoZSxyLHQsbixvKXt2YXIgYT1lLm5vZGUuY29udGVudHM7aWYobz49ZS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgcz1NYXRoLm1pbihlLm5vZGUudXNlZEJ5dGVzLW8sbik7aWYocz44JiZhLnN1YmFycmF5KXIuc2V0KGEuc3ViYXJyYXkobyxvK3MpLHQpO2Vsc2UgZm9yKHZhciBpPTA7aTxzO2krKylyW3QraV09YVtvK2ldO3JldHVybiBzfSx3cml0ZShlLHIsdCxuLG8sYSl7aWYoci5idWZmZXI9PT1FLmJ1ZmZlciYmKGE9ITEpLCFuKXJldHVybiAwO3ZhciBzPWUubm9kZTtpZihzLnRpbWVzdGFtcD1EYXRlLm5vdygpLHIuc3ViYXJyYXkmJighcy5jb250ZW50c3x8cy5jb250ZW50cy5zdWJhcnJheSkpe2lmKGEpcmV0dXJuIHMuY29udGVudHM9ci5zdWJhcnJheSh0LHQrbikscy51c2VkQnl0ZXM9bixuO2lmKDA9PT1zLnVzZWRCeXRlcyYmMD09PW8pcmV0dXJuIHMuY29udGVudHM9ci5zbGljZSh0LHQrbikscy51c2VkQnl0ZXM9bixuO2lmKG8rbjw9cy51c2VkQnl0ZXMpcmV0dXJuIHMuY29udGVudHMuc2V0KHIuc3ViYXJyYXkodCx0K24pLG8pLG59aWYoc2UuZXhwYW5kRmlsZVN0b3JhZ2UocyxvK24pLHMuY29udGVudHMuc3ViYXJyYXkmJnIuc3ViYXJyYXkpcy5jb250ZW50cy5zZXQoci5zdWJhcnJheSh0LHQrbiksbyk7ZWxzZSBmb3IodmFyIGk9MDtpPG47aSsrKXMuY29udGVudHNbbytpXT1yW3QraV07cmV0dXJuIHMudXNlZEJ5dGVzPU1hdGgubWF4KHMudXNlZEJ5dGVzLG8rbiksbn0sbGxzZWVrKGUscix0KXt2YXIgbj1yO2lmKDE9PT10P24rPWUucG9zaXRpb246Mj09PXQmJmxlLmlzRmlsZShlLm5vZGUubW9kZSkmJihuKz1lLm5vZGUudXNlZEJ5dGVzKSxuPDApdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjgpO3JldHVybiBufSxhbGxvY2F0ZShlLHIsdCl7c2UuZXhwYW5kRmlsZVN0b3JhZ2UoZS5ub2RlLHIrdCksZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChlLm5vZGUudXNlZEJ5dGVzLHIrdCl9LG1tYXAoZSxyLHQsbixvKXtpZighbGUuaXNGaWxlKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0Myk7dmFyIGEscyxpPWUubm9kZS5jb250ZW50cztpZigyJm98fGkuYnVmZmVyIT09RS5idWZmZXIpe2lmKCh0PjB8fHQrcjxpLmxlbmd0aCkmJihpPWkuc3ViYXJyYXk/aS5zdWJhcnJheSh0LHQrcik6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSx0LHQrcikpLHM9ITAsIShhPWFlKCkpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQ4KTtFLnNldChpLGEpfWVsc2Ugcz0hMSxhPWkuYnl0ZU9mZnNldDtyZXR1cm57cHRyOmEsYWxsb2NhdGVkOnN9fSxtc3luYzooZSxyLHQsbixvKT0+KHNlLnN0cmVhbV9vcHMud3JpdGUoZSxyLDAsbix0LCExKSwwKX19LGllPW4ucHJlbG9hZFBsdWdpbnN8fFtdLHVlPShlLHIpPT57dmFyIHQ9MDtyZXR1cm4gZSYmKHR8PTM2NSksciYmKHR8PTE0NiksdH0sbGU9e3Jvb3Q6bnVsbCxtb3VudHM6W10sZGV2aWNlczp7fSxzdHJlYW1zOltdLG5leHRJbm9kZToxLG5hbWVUYWJsZTpudWxsLGN1cnJlbnRQYXRoOiIvIixpbml0aWFsaXplZDohMSxpZ25vcmVQZXJtaXNzaW9uczohMCxFcnJub0Vycm9yOm51bGwsZ2VuZXJpY0Vycm9yczp7fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAsbG9va3VwUGF0aChlLHI9e30pe2lmKCEoZT1WLnJlc29sdmUoZSkpKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07aWYoKHI9T2JqZWN0LmFzc2lnbih7Zm9sbG93X21vdW50OiEwLHJlY3Vyc2VfY291bnQ6MH0scikpLnJlY3Vyc2VfY291bnQ+OCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigzMik7Zm9yKHZhciB0PWUuc3BsaXQoIi8iKS5maWx0ZXIoKGU9PiEhZSkpLG49bGUucm9vdCxvPSIvIixhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPWE9PT10Lmxlbmd0aC0xO2lmKHMmJnIucGFyZW50KWJyZWFrO2lmKG49bGUubG9va3VwTm9kZShuLHRbYV0pLG89Wi5qb2luMihvLHRbYV0pLGxlLmlzTW91bnRwb2ludChuKSYmKCFzfHxzJiZyLmZvbGxvd19tb3VudCkmJihuPW4ubW91bnRlZC5yb290KSwhc3x8ci5mb2xsb3cpZm9yKHZhciBpPTA7bGUuaXNMaW5rKG4ubW9kZSk7KXt2YXIgdT1sZS5yZWFkbGluayhvKTtpZihvPVYucmVzb2x2ZShaLmRpcm5hbWUobyksdSksbj1sZS5sb29rdXBQYXRoKG8se3JlY3Vyc2VfY291bnQ6ci5yZWN1cnNlX2NvdW50KzF9KS5ub2RlLGkrKz40MCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOm8sbm9kZTpufX0sZ2V0UGF0aChlKXtmb3IodmFyIHI7Oyl7aWYobGUuaXNSb290KGUpKXt2YXIgdD1lLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIHI/Ii8iIT09dFt0Lmxlbmd0aC0xXT9gJHt0fS8ke3J9YDp0K3I6dH1yPXI/YCR7ZS5uYW1lfS8ke3J9YDplLm5hbWUsZT1lLnBhcmVudH19LGhhc2hOYW1lKGUscil7Zm9yKHZhciB0PTAsbj0wO248ci5sZW5ndGg7bisrKXQ9KHQ8PDUpLXQrci5jaGFyQ29kZUF0KG4pfDA7cmV0dXJuKGUrdD4+PjApJWxlLm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hBZGROb2RlKGUpe3ZhciByPWxlLmhhc2hOYW1lKGUucGFyZW50LmlkLGUubmFtZSk7ZS5uYW1lX25leHQ9bGUubmFtZVRhYmxlW3JdLGxlLm5hbWVUYWJsZVtyXT1lfSxoYXNoUmVtb3ZlTm9kZShlKXt2YXIgcj1sZS5oYXNoTmFtZShlLnBhcmVudC5pZCxlLm5hbWUpO2lmKGxlLm5hbWVUYWJsZVtyXT09PWUpbGUubmFtZVRhYmxlW3JdPWUubmFtZV9uZXh0O2Vsc2UgZm9yKHZhciB0PWxlLm5hbWVUYWJsZVtyXTt0Oyl7aWYodC5uYW1lX25leHQ9PT1lKXt0Lm5hbWVfbmV4dD1lLm5hbWVfbmV4dDticmVha310PXQubmFtZV9uZXh0fX0sbG9va3VwTm9kZShlLHIpe3ZhciB0PWxlLm1heUxvb2t1cChlKTtpZih0KXRocm93IG5ldyBsZS5FcnJub0Vycm9yKHQsZSk7Zm9yKHZhciBuPWxlLmhhc2hOYW1lKGUuaWQsciksbz1sZS5uYW1lVGFibGVbbl07bztvPW8ubmFtZV9uZXh0KXt2YXIgYT1vLm5hbWU7aWYoby5wYXJlbnQuaWQ9PT1lLmlkJiZhPT09cilyZXR1cm4gb31yZXR1cm4gbGUubG9va3VwKGUscil9LGNyZWF0ZU5vZGUoZSxyLHQsbil7dmFyIG89bmV3IGxlLkZTTm9kZShlLHIsdCxuKTtyZXR1cm4gbGUuaGFzaEFkZE5vZGUobyksb30sZGVzdHJveU5vZGUoZSl7bGUuaGFzaFJlbW92ZU5vZGUoZSl9LGlzUm9vdDplPT5lPT09ZS5wYXJlbnQsaXNNb3VudHBvaW50OmU9PiEhZS5tb3VudGVkLGlzRmlsZTplPT4zMjc2OD09KDYxNDQwJmUpLGlzRGlyOmU9PjE2Mzg0PT0oNjE0NDAmZSksaXNMaW5rOmU9PjQwOTYwPT0oNjE0NDAmZSksaXNDaHJkZXY6ZT0+ODE5Mj09KDYxNDQwJmUpLGlzQmxrZGV2OmU9PjI0NTc2PT0oNjE0NDAmZSksaXNGSUZPOmU9PjQwOTY9PSg2MTQ0MCZlKSxpc1NvY2tldDplPT40OTE1Mj09KDQ5MTUyJmUpLGZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGUpe3ZhciByPVsiciIsInciLCJydyJdWzMmZV07cmV0dXJuIDUxMiZlJiYocis9InciKSxyfSxub2RlUGVybWlzc2lvbnM6KGUscik9PmxlLmlnbm9yZVBlcm1pc3Npb25zfHwoIXIuaW5jbHVkZXMoInIiKXx8MjkyJmUubW9kZSkmJighci5pbmNsdWRlcygidyIpfHwxNDYmZS5tb2RlKSYmKCFyLmluY2x1ZGVzKCJ4Iil8fDczJmUubW9kZSk/MDoyLG1heUxvb2t1cChlKXt2YXIgcj1sZS5ub2RlUGVybWlzc2lvbnMoZSwieCIpO3JldHVybiByfHwoZS5ub2RlX29wcy5sb29rdXA/MDoyKX0sbWF5Q3JlYXRlKGUscil7dHJ5e3JldHVybiBsZS5sb29rdXBOb2RlKGUsciksMjB9Y2F0Y2goZSl7fXJldHVybiBsZS5ub2RlUGVybWlzc2lvbnMoZSwid3giKX0sbWF5RGVsZXRlKGUscix0KXt2YXIgbjt0cnl7bj1sZS5sb29rdXBOb2RlKGUscil9Y2F0Y2goZSl7cmV0dXJuIGUuZXJybm99dmFyIG89bGUubm9kZVBlcm1pc3Npb25zKGUsInd4Iik7aWYobylyZXR1cm4gbztpZih0KXtpZighbGUuaXNEaXIobi5tb2RlKSlyZXR1cm4gNTQ7aWYobGUuaXNSb290KG4pfHxsZS5nZXRQYXRoKG4pPT09bGUuY3dkKCkpcmV0dXJuIDEwfWVsc2UgaWYobGUuaXNEaXIobi5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW46KGUscik9PmU/bGUuaXNMaW5rKGUubW9kZSk/MzI6bGUuaXNEaXIoZS5tb2RlKSYmKCJyIiE9PWxlLmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHIpfHw1MTImcik/MzE6bGUubm9kZVBlcm1pc3Npb25zKGUsbGUuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcocikpOjQ0LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZCgpe2Zvcih2YXIgZT0wO2U8PWxlLk1BWF9PUEVOX0ZEUztlKyspaWYoIWxlLnN0cmVhbXNbZV0pcmV0dXJuIGU7dGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMzMpfSxnZXRTdHJlYW1DaGVja2VkKGUpe3ZhciByPWxlLmdldFN0cmVhbShlKTtpZighcil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtyZXR1cm4gcn0sZ2V0U3RyZWFtOmU9PmxlLnN0cmVhbXNbZV0sY3JlYXRlU3RyZWFtOihlLHI9LTEpPT4obGUuRlNTdHJlYW18fChsZS5GU1N0cmVhbT1mdW5jdGlvbigpe3RoaXMuc2hhcmVkPXt9fSxsZS5GU1N0cmVhbS5wcm90b3R5cGU9e30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGUuRlNTdHJlYW0ucHJvdG90eXBlLHtvYmplY3Q6e2dldCgpe3JldHVybiB0aGlzLm5vZGV9LHNldChlKXt0aGlzLm5vZGU9ZX19LGlzUmVhZDp7Z2V0KCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNXcml0ZTp7Z2V0KCl7cmV0dXJuIDAhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfX0saXNBcHBlbmQ6e2dldCgpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9fSxmbGFnczp7Z2V0KCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfSxzZXQoZSl7dGhpcy5zaGFyZWQuZmxhZ3M9ZX19LHBvc2l0aW9uOntnZXQoKXtyZXR1cm4gdGhpcy5zaGFyZWQucG9zaXRpb259LHNldChlKXt0aGlzLnNoYXJlZC5wb3NpdGlvbj1lfX19KSksZT1PYmplY3QuYXNzaWduKG5ldyBsZS5GU1N0cmVhbSxlKSwtMT09ciYmKHI9bGUubmV4dGZkKCkpLGUuZmQ9cixsZS5zdHJlYW1zW3JdPWUsZSksY2xvc2VTdHJlYW0oZSl7bGUuc3RyZWFtc1tlXT1udWxsfSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbihlKXt2YXIgcj1sZS5nZXREZXZpY2UoZS5ub2RlLnJkZXYpO2Uuc3RyZWFtX29wcz1yLnN0cmVhbV9vcHMsZS5zdHJlYW1fb3BzLm9wZW4/LihlKX0sbGxzZWVrKCl7dGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNzApfX0sbWFqb3I6ZT0+ZT4+OCxtaW5vcjplPT4yNTUmZSxtYWtlZGV2OihlLHIpPT5lPDw4fHIscmVnaXN0ZXJEZXZpY2UoZSxyKXtsZS5kZXZpY2VzW2VdPXtzdHJlYW1fb3BzOnJ9fSxnZXREZXZpY2U6ZT0+bGUuZGV2aWNlc1tlXSxnZXRNb3VudHMoZSl7Zm9yKHZhciByPVtdLHQ9W2VdO3QubGVuZ3RoOyl7dmFyIG49dC5wb3AoKTtyLnB1c2gobiksdC5wdXNoLmFwcGx5KHQsbi5tb3VudHMpfXJldHVybiByfSxzeW5jZnMoZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPSExKSxsZS5zeW5jRlNSZXF1ZXN0cysrLGxlLnN5bmNGU1JlcXVlc3RzPjEmJnkoYHdhcm5pbmc6ICR7bGUuc3luY0ZTUmVxdWVzdHN9IEZTLnN5bmNmcyBvcGVyYXRpb25zIGluIGZsaWdodCBhdCBvbmNlLCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmtgKTt2YXIgdD1sZS5nZXRNb3VudHMobGUucm9vdC5tb3VudCksbj0wO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGxlLnN5bmNGU1JlcXVlc3RzLS0scihlKX1mdW5jdGlvbiBhKGUpe2lmKGUpcmV0dXJuIGEuZXJyb3JlZD92b2lkIDA6KGEuZXJyb3JlZD0hMCxvKGUpKTsrK24+PXQubGVuZ3RoJiZvKG51bGwpfXQuZm9yRWFjaCgocj0+e2lmKCFyLnR5cGUuc3luY2ZzKXJldHVybiBhKG51bGwpO3IudHlwZS5zeW5jZnMocixlLGEpfSkpfSxtb3VudChlLHIsdCl7dmFyIG4sbz0iLyI9PT10LGE9IXQ7aWYobyYmbGUucm9vdCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigxMCk7aWYoIW8mJiFhKXt2YXIgcz1sZS5sb29rdXBQYXRoKHQse2ZvbGxvd19tb3VudDohMX0pO2lmKHQ9cy5wYXRoLG49cy5ub2RlLGxlLmlzTW91bnRwb2ludChuKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigxMCk7aWYoIWxlLmlzRGlyKG4ubW9kZSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNTQpfXZhciBpPXt0eXBlOmUsb3B0czpyLG1vdW50cG9pbnQ6dCxtb3VudHM6W119LHU9ZS5tb3VudChpKTtyZXR1cm4gdS5tb3VudD1pLGkucm9vdD11LG8/bGUucm9vdD11Om4mJihuLm1vdW50ZWQ9aSxuLm1vdW50JiZuLm1vdW50Lm1vdW50cy5wdXNoKGkpKSx1fSx1bm1vdW50KGUpe3ZhciByPWxlLmxvb2t1cFBhdGgoZSx7Zm9sbG93X21vdW50OiExfSk7aWYoIWxlLmlzTW91bnRwb2ludChyLm5vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTt2YXIgdD1yLm5vZGUsbj10Lm1vdW50ZWQsbz1sZS5nZXRNb3VudHMobik7T2JqZWN0LmtleXMobGUubmFtZVRhYmxlKS5mb3JFYWNoKChlPT57Zm9yKHZhciByPWxlLm5hbWVUYWJsZVtlXTtyOyl7dmFyIHQ9ci5uYW1lX25leHQ7by5pbmNsdWRlcyhyLm1vdW50KSYmbGUuZGVzdHJveU5vZGUocikscj10fX0pKSx0Lm1vdW50ZWQ9bnVsbDt2YXIgYT10Lm1vdW50Lm1vdW50cy5pbmRleE9mKG4pO3QubW91bnQubW91bnRzLnNwbGljZShhLDEpfSxsb29rdXA6KGUscik9PmUubm9kZV9vcHMubG9va3VwKGUsciksbWtub2QoZSxyLHQpe3ZhciBuPWxlLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZSxvPVouYmFzZW5hbWUoZSk7aWYoIW98fCIuIj09PW98fCIuLiI9PT1vKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTt2YXIgYT1sZS5tYXlDcmVhdGUobixvKTtpZihhKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKGEpO2lmKCFuLm5vZGVfb3BzLm1rbm9kKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtyZXR1cm4gbi5ub2RlX29wcy5ta25vZChuLG8scix0KX0sY3JlYXRlOihlLHIpPT4ocj12b2lkIDAhPT1yP3I6NDM4LHImPTQwOTUscnw9MzI3NjgsbGUubWtub2QoZSxyLDApKSxta2RpcjooZSxyKT0+KHI9dm9pZCAwIT09cj9yOjUxMSxyJj0xMDIzLHJ8PTE2Mzg0LGxlLm1rbm9kKGUsciwwKSksbWtkaXJUcmVlKGUscil7Zm9yKHZhciB0PWUuc3BsaXQoIi8iKSxuPSIiLG89MDtvPHQubGVuZ3RoOysrbylpZih0W29dKXtuKz0iLyIrdFtvXTt0cnl7bGUubWtkaXIobixyKX1jYXRjaChlKXtpZigyMCE9ZS5lcnJubyl0aHJvdyBlfX19LG1rZGV2OihlLHIsdCk9Pih2b2lkIDA9PT10JiYodD1yLHI9NDM4KSxyfD04MTkyLGxlLm1rbm9kKGUscix0KSksc3ltbGluayhlLHIpe2lmKCFWLnJlc29sdmUoZSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNDQpO3ZhciB0PWxlLmxvb2t1cFBhdGgocix7cGFyZW50OiEwfSkubm9kZTtpZighdCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7dmFyIG49Wi5iYXNlbmFtZShyKSxvPWxlLm1heUNyZWF0ZSh0LG4pO2lmKG8pdGhyb3cgbmV3IGxlLkVycm5vRXJyb3Iobyk7aWYoIXQubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig2Myk7cmV0dXJuIHQubm9kZV9vcHMuc3ltbGluayh0LG4sZSl9LHJlbmFtZShlLHIpe3ZhciB0LG4sbz1aLmRpcm5hbWUoZSksYT1aLmRpcm5hbWUocikscz1aLmJhc2VuYW1lKGUpLGk9Wi5iYXNlbmFtZShyKTtpZih0PWxlLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZSxuPWxlLmxvb2t1cFBhdGgocix7cGFyZW50OiEwfSkubm9kZSwhdHx8IW4pdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNDQpO2lmKHQubW91bnQhPT1uLm1vdW50KXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDc1KTt2YXIgdSxsPWxlLmxvb2t1cE5vZGUodCxzKSxjPVYucmVsYXRpdmUoZSxhKTtpZigiLiIhPT1jLmNoYXJBdCgwKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7aWYoIi4iIT09KGM9Vi5yZWxhdGl2ZShyLG8pKS5jaGFyQXQoMCkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNTUpO3RyeXt1PWxlLmxvb2t1cE5vZGUobixpKX1jYXRjaChlKXt9aWYobCE9PXUpe3ZhciBkPWxlLmlzRGlyKGwubW9kZSksaD1sZS5tYXlEZWxldGUodCxzLGQpO2lmKGgpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoaCk7aWYoaD11P2xlLm1heURlbGV0ZShuLGksZCk6bGUubWF5Q3JlYXRlKG4saSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoaCk7aWYoIXQubm9kZV9vcHMucmVuYW1lKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtpZihsZS5pc01vdW50cG9pbnQobCl8fHUmJmxlLmlzTW91bnRwb2ludCh1KSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigxMCk7aWYobiE9PXQmJihoPWxlLm5vZGVQZXJtaXNzaW9ucyh0LCJ3IikpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKGgpO2xlLmhhc2hSZW1vdmVOb2RlKGwpO3RyeXt0Lm5vZGVfb3BzLnJlbmFtZShsLG4saSl9Y2F0Y2goZSl7dGhyb3cgZX1maW5hbGx5e2xlLmhhc2hBZGROb2RlKGwpfX19LHJtZGlyKGUpe3ZhciByPWxlLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZSx0PVouYmFzZW5hbWUoZSksbj1sZS5sb29rdXBOb2RlKHIsdCksbz1sZS5tYXlEZWxldGUocix0LCEwKTtpZihvKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKG8pO2lmKCFyLm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtpZihsZS5pc01vdW50cG9pbnQobikpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMTApO3Iubm9kZV9vcHMucm1kaXIocix0KSxsZS5kZXN0cm95Tm9kZShuKX0scmVhZGRpcihlKXt2YXIgcj1sZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLm5vZGU7aWYoIXIubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig1NCk7cmV0dXJuIHIubm9kZV9vcHMucmVhZGRpcihyKX0sdW5saW5rKGUpe3ZhciByPWxlLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSkubm9kZTtpZighcil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7dmFyIHQ9Wi5iYXNlbmFtZShlKSxuPWxlLmxvb2t1cE5vZGUocix0KSxvPWxlLm1heURlbGV0ZShyLHQsITEpO2lmKG8pdGhyb3cgbmV3IGxlLkVycm5vRXJyb3Iobyk7aWYoIXIubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYzKTtpZihsZS5pc01vdW50cG9pbnQobikpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMTApO3Iubm9kZV9vcHMudW5saW5rKHIsdCksbGUuZGVzdHJveU5vZGUobil9LHJlYWRsaW5rKGUpe3ZhciByPWxlLmxvb2t1cFBhdGgoZSkubm9kZTtpZighcil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7aWYoIXIubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjgpO3JldHVybiBWLnJlc29sdmUobGUuZ2V0UGF0aChyLnBhcmVudCksci5ub2RlX29wcy5yZWFkbGluayhyKSl9LHN0YXQoZSxyKXt2YXIgdD1sZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohcn0pLm5vZGU7aWYoIXQpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNDQpO2lmKCF0Lm5vZGVfb3BzLmdldGF0dHIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjMpO3JldHVybiB0Lm5vZGVfb3BzLmdldGF0dHIodCl9LGxzdGF0OmU9PmxlLnN0YXQoZSwhMCksY2htb2QoZSxyLHQpe3ZhciBuO2lmKCEobj0ic3RyaW5nIj09dHlwZW9mIGU/bGUubG9va3VwUGF0aChlLHtmb2xsb3c6IXR9KS5ub2RlOmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjMpO24ubm9kZV9vcHMuc2V0YXR0cihuLHttb2RlOjQwOTUmcnwtNDA5NiZuLm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kKGUscil7bGUuY2htb2QoZSxyLCEwKX0sZmNobW9kKGUscil7dmFyIHQ9bGUuZ2V0U3RyZWFtQ2hlY2tlZChlKTtsZS5jaG1vZCh0Lm5vZGUscil9LGNob3duKGUscix0LG4pe3ZhciBvO2lmKCEobz0ic3RyaW5nIj09dHlwZW9mIGU/bGUubG9va3VwUGF0aChlLHtmb2xsb3c6IW59KS5ub2RlOmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNjMpO28ubm9kZV9vcHMuc2V0YXR0cihvLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd24oZSxyLHQpe2xlLmNob3duKGUscix0LCEwKX0sZmNob3duKGUscix0KXt2YXIgbj1sZS5nZXRTdHJlYW1DaGVja2VkKGUpO2xlLmNob3duKG4ubm9kZSxyLHQpfSx0cnVuY2F0ZShlLHIpe2lmKHI8MCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7dmFyIHQ7aWYoISh0PSJzdHJpbmciPT10eXBlb2YgZT9sZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLm5vZGU6ZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig2Myk7aWYobGUuaXNEaXIodC5tb2RlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigzMSk7aWYoIWxlLmlzRmlsZSh0Lm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTt2YXIgbj1sZS5ub2RlUGVybWlzc2lvbnModCwidyIpO2lmKG4pdGhyb3cgbmV3IGxlLkVycm5vRXJyb3Iobik7dC5ub2RlX29wcy5zZXRhdHRyKHQse3NpemU6cix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxmdHJ1bmNhdGUoZSxyKXt2YXIgdD1sZS5nZXRTdHJlYW1DaGVja2VkKGUpO2lmKDA9PSgyMDk3MTU1JnQuZmxhZ3MpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTtsZS50cnVuY2F0ZSh0Lm5vZGUscil9LHV0aW1lKGUscix0KXt2YXIgbj1sZS5sb29rdXBQYXRoKGUse2ZvbGxvdzohMH0pLm5vZGU7bi5ub2RlX29wcy5zZXRhdHRyKG4se3RpbWVzdGFtcDpNYXRoLm1heChyLHQpfSl9LG9wZW4oZSxyLHQpe2lmKCIiPT09ZSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7dmFyIG87aWYodD12b2lkIDA9PT10PzQzODp0LHQ9NjQmKHI9InN0cmluZyI9PXR5cGVvZiByPyhlPT57dmFyIHI9e3I6MCwicisiOjIsdzo1NzcsIncrIjo1NzgsYToxMDg5LCJhKyI6MTA5MH1bZV07aWYodm9pZCAwPT09cil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7ZX1gKTtyZXR1cm4gcn0pKHIpOnIpPzQwOTUmdHwzMjc2ODowLCJvYmplY3QiPT10eXBlb2YgZSlvPWU7ZWxzZXtlPVoubm9ybWFsaXplKGUpO3RyeXtvPWxlLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEoMTMxMDcyJnIpfSkubm9kZX1jYXRjaChlKXt9fXZhciBhPSExO2lmKDY0JnIpaWYobyl7aWYoMTI4JnIpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjApfWVsc2Ugbz1sZS5ta25vZChlLHQsMCksYT0hMDtpZighbyl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7aWYobGUuaXNDaHJkZXYoby5tb2RlKSYmKHImPS01MTMpLDY1NTM2JnImJiFsZS5pc0RpcihvLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU0KTtpZighYSl7dmFyIHM9bGUubWF5T3BlbihvLHIpO2lmKHMpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3Iocyl9NTEyJnImJiFhJiZsZS50cnVuY2F0ZShvLDApLHImPS0xMzE3MTM7dmFyIGk9bGUuY3JlYXRlU3RyZWFtKHtub2RlOm8scGF0aDpsZS5nZXRQYXRoKG8pLGZsYWdzOnIsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOm8uc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBpLnN0cmVhbV9vcHMub3BlbiYmaS5zdHJlYW1fb3BzLm9wZW4oaSksIW4ubG9nUmVhZEZpbGVzfHwxJnJ8fChsZS5yZWFkRmlsZXN8fChsZS5yZWFkRmlsZXM9e30pLGUgaW4gbGUucmVhZEZpbGVzfHwobGUucmVhZEZpbGVzW2VdPTEpKSxpfSxjbG9zZShlKXtpZihsZS5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtlLmdldGRlbnRzJiYoZS5nZXRkZW50cz1udWxsKTt0cnl7ZS5zdHJlYW1fb3BzLmNsb3NlJiZlLnN0cmVhbV9vcHMuY2xvc2UoZSl9Y2F0Y2goZSl7dGhyb3cgZX1maW5hbGx5e2xlLmNsb3NlU3RyZWFtKGUuZmQpfWUuZmQ9bnVsbH0saXNDbG9zZWQ6ZT0+bnVsbD09PWUuZmQsbGxzZWVrKGUscix0KXtpZihsZS5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtpZighZS5zZWVrYWJsZXx8IWUuc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNzApO2lmKDAhPXQmJjEhPXQmJjIhPXQpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjgpO3JldHVybiBlLnBvc2l0aW9uPWUuc3RyZWFtX29wcy5sbHNlZWsoZSxyLHQpLGUudW5nb3R0ZW49W10sZS5wb3NpdGlvbn0scmVhZChlLHIsdCxuLG8pe2lmKG48MHx8bzwwKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTtpZihsZS5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5NzE1NSZlLmZsYWdzKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtpZihsZS5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMzEpO2lmKCFlLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7dmFyIGE9dm9pZCAwIT09bztpZihhKXtpZighZS5zZWVrYWJsZSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig3MCl9ZWxzZSBvPWUucG9zaXRpb247dmFyIHM9ZS5zdHJlYW1fb3BzLnJlYWQoZSxyLHQsbixvKTtyZXR1cm4gYXx8KGUucG9zaXRpb24rPXMpLHN9LHdyaXRlKGUscix0LG4sbyxhKXtpZihuPDB8fG88MCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOCk7aWYobGUuaXNDbG9zZWQoZSkpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoOCk7aWYoMD09KDIwOTcxNTUmZS5mbGFncykpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoOCk7aWYobGUuaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDMxKTtpZighZS5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDI4KTtlLnNlZWthYmxlJiYxMDI0JmUuZmxhZ3MmJmxlLmxsc2VlayhlLDAsMik7dmFyIHM9dm9pZCAwIT09bztpZihzKXtpZighZS5zZWVrYWJsZSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig3MCl9ZWxzZSBvPWUucG9zaXRpb247dmFyIGk9ZS5zdHJlYW1fb3BzLndyaXRlKGUscix0LG4sbyxhKTtyZXR1cm4gc3x8KGUucG9zaXRpb24rPWkpLGl9LGFsbG9jYXRlKGUscix0KXtpZihsZS5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig4KTtpZihyPDB8fHQ8PTApdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjgpO2lmKDA9PSgyMDk3MTU1JmUuZmxhZ3MpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDgpO2lmKCFsZS5pc0ZpbGUoZS5ub2RlLm1vZGUpJiYhbGUuaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQzKTtpZighZS5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDEzOCk7ZS5zdHJlYW1fb3BzLmFsbG9jYXRlKGUscix0KX0sbW1hcChlLHIsdCxuLG8pe2lmKDAhPSgyJm4pJiYwPT0oMiZvKSYmMiE9KDIwOTcxNTUmZS5mbGFncykpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMik7aWYoMT09KDIwOTcxNTUmZS5mbGFncykpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMik7aWYoIWUuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQzKTtyZXR1cm4gZS5zdHJlYW1fb3BzLm1tYXAoZSxyLHQsbixvKX0sbXN5bmM6KGUscix0LG4sbyk9PmUuc3RyZWFtX29wcy5tc3luYz9lLnN0cmVhbV9vcHMubXN5bmMoZSxyLHQsbixvKTowLG11bm1hcDplPT4wLGlvY3RsKGUscix0KXtpZighZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU5KTtyZXR1cm4gZS5zdHJlYW1fb3BzLmlvY3RsKGUscix0KX0scmVhZEZpbGUoZSxyPXt9KXtpZihyLmZsYWdzPXIuZmxhZ3N8fDAsci5lbmNvZGluZz1yLmVuY29kaW5nfHwiYmluYXJ5IiwidXRmOCIhPT1yLmVuY29kaW5nJiYiYmluYXJ5IiE9PXIuZW5jb2RpbmcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVuY29kaW5nIHR5cGUgIiR7ci5lbmNvZGluZ30iYCk7dmFyIHQsbj1sZS5vcGVuKGUsci5mbGFncyksbz1sZS5zdGF0KGUpLnNpemUsYT1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gbGUucmVhZChuLGEsMCxvLDApLCJ1dGY4Ij09PXIuZW5jb2Rpbmc/dD1RKGEsMCk6ImJpbmFyeSI9PT1yLmVuY29kaW5nJiYodD1hKSxsZS5jbG9zZShuKSx0fSx3cml0ZUZpbGUoZSxyLHQ9e30pe3QuZmxhZ3M9dC5mbGFnc3x8NTc3O3ZhciBuPWxlLm9wZW4oZSx0LmZsYWdzLHQubW9kZSk7aWYoInN0cmluZyI9PXR5cGVvZiByKXt2YXIgbz1uZXcgVWludDhBcnJheShyZShyKSsxKSxhPXRlKHIsbywwLG8ubGVuZ3RoKTtsZS53cml0ZShuLG8sMCxhLHZvaWQgMCx0LmNhbk93bil9ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KHIpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIik7bGUud3JpdGUobixyLDAsci5ieXRlTGVuZ3RoLHZvaWQgMCx0LmNhbk93bil9bGUuY2xvc2Uobil9LGN3ZDooKT0+bGUuY3VycmVudFBhdGgsY2hkaXIoZSl7dmFyIHI9bGUubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KTtpZihudWxsPT09ci5ub2RlKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQ0KTtpZighbGUuaXNEaXIoci5ub2RlLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDU0KTt2YXIgdD1sZS5ub2RlUGVybWlzc2lvbnMoci5ub2RlLCJ4Iik7aWYodCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcih0KTtsZS5jdXJyZW50UGF0aD1yLnBhdGh9LGNyZWF0ZURlZmF1bHREaXJlY3Rvcmllcygpe2xlLm1rZGlyKCIvdG1wIiksbGUubWtkaXIoIi9ob21lIiksbGUubWtkaXIoIi9ob21lL3dlYl91c2VyIil9LGNyZWF0ZURlZmF1bHREZXZpY2VzKCl7bGUubWtkaXIoIi9kZXYiKSxsZS5yZWdpc3RlckRldmljZShsZS5tYWtlZGV2KDEsMykse3JlYWQ6KCk9PjAsd3JpdGU6KGUscix0LG4sbyk9Pm59KSxsZS5ta2RldigiL2Rldi9udWxsIixsZS5tYWtlZGV2KDEsMykpLG9lLnJlZ2lzdGVyKGxlLm1ha2VkZXYoNSwwKSxvZS5kZWZhdWx0X3R0eV9vcHMpLG9lLnJlZ2lzdGVyKGxlLm1ha2VkZXYoNiwwKSxvZS5kZWZhdWx0X3R0eTFfb3BzKSxsZS5ta2RldigiL2Rldi90dHkiLGxlLm1ha2VkZXYoNSwwKSksbGUubWtkZXYoIi9kZXYvdHR5MSIsbGUubWFrZWRldig2LDApKTt2YXIgZT1uZXcgVWludDhBcnJheSgxMDI0KSxyPTAsdD0oKT0+KDA9PT1yJiYocj1HKGUpLmJ5dGVMZW5ndGgpLGVbLS1yXSk7bGUuY3JlYXRlRGV2aWNlKCIvZGV2IiwicmFuZG9tIix0KSxsZS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIix0KSxsZS5ta2RpcigiL2Rldi9zaG0iKSxsZS5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3Rvcmllcygpe2xlLm1rZGlyKCIvcHJvYyIpO3ZhciBlPWxlLm1rZGlyKCIvcHJvYy9zZWxmIik7bGUubWtkaXIoIi9wcm9jL3NlbGYvZmQiKSxsZS5tb3VudCh7bW91bnQoKXt2YXIgcj1sZS5jcmVhdGVOb2RlKGUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIHIubm9kZV9vcHM9e2xvb2t1cChlLHIpe3ZhciB0PStyLG49bGUuZ2V0U3RyZWFtQ2hlY2tlZCh0KSxvPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazooKT0+bi5wYXRofX07cmV0dXJuIG8ucGFyZW50PW8sb319LHJ9fSx7fSwiL3Byb2Mvc2VsZi9mZCIpfSxjcmVhdGVTdGFuZGFyZFN0cmVhbXMoKXtuLnN0ZGluP2xlLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGluIixuLnN0ZGluKTpsZS5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxuLnN0ZG91dD9sZS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsbi5zdGRvdXQpOmxlLnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxuLnN0ZGVycj9sZS5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsbi5zdGRlcnIpOmxlLnN5bWxpbmsoIi9kZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiksbGUub3BlbigiL2Rldi9zdGRpbiIsMCksbGUub3BlbigiL2Rldi9zdGRvdXQiLDEpLGxlLm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sZW5zdXJlRXJybm9FcnJvcigpe2xlLkVycm5vRXJyb3J8fChsZS5FcnJub0Vycm9yPWZ1bmN0aW9uKGUscil7dGhpcy5uYW1lPSJFcnJub0Vycm9yIix0aGlzLm5vZGU9cix0aGlzLnNldEVycm5vPWZ1bmN0aW9uKGUpe3RoaXMuZXJybm89ZX0sdGhpcy5zZXRFcnJubyhlKSx0aGlzLm1lc3NhZ2U9IkZTIGVycm9yIn0sbGUuRXJybm9FcnJvci5wcm90b3R5cGU9bmV3IEVycm9yLGxlLkVycm5vRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPWxlLkVycm5vRXJyb3IsWzQ0XS5mb3JFYWNoKChlPT57bGUuZ2VuZXJpY0Vycm9yc1tlXT1uZXcgbGUuRXJybm9FcnJvcihlKSxsZS5nZW5lcmljRXJyb3JzW2VdLnN0YWNrPSI8Z2VuZXJpYyBlcnJvciwgbm8gc3RhY2s+In0pKSl9LHN0YXRpY0luaXQoKXtsZS5lbnN1cmVFcnJub0Vycm9yKCksbGUubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxsZS5tb3VudChzZSx7fSwiLyIpLGxlLmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLGxlLmNyZWF0ZURlZmF1bHREZXZpY2VzKCksbGUuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksbGUuZmlsZXN5c3RlbXM9e01FTUZTOnNlfX0saW5pdChlLHIsdCl7bGUuaW5pdC5pbml0aWFsaXplZD0hMCxsZS5lbnN1cmVFcnJub0Vycm9yKCksbi5zdGRpbj1lfHxuLnN0ZGluLG4uc3Rkb3V0PXJ8fG4uc3Rkb3V0LG4uc3RkZXJyPXR8fG4uc3RkZXJyLGxlLmNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0KCl7bGUuaW5pdC5pbml0aWFsaXplZD0hMTtmb3IodmFyIGU9MDtlPGxlLnN0cmVhbXMubGVuZ3RoO2UrKyl7dmFyIHI9bGUuc3RyZWFtc1tlXTtyJiZsZS5jbG9zZShyKX19LGZpbmRPYmplY3QoZSxyKXt2YXIgdD1sZS5hbmFseXplUGF0aChlLHIpO3JldHVybiB0LmV4aXN0cz90Lm9iamVjdDpudWxsfSxhbmFseXplUGF0aChlLHIpe3RyeXtlPShuPWxlLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiFyfSkpLnBhdGh9Y2F0Y2goZSl7fXZhciB0PXtpc1Jvb3Q6ITEsZXhpc3RzOiExLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ITEscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVjdDpudWxsfTt0cnl7dmFyIG49bGUubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KTt0LnBhcmVudEV4aXN0cz0hMCx0LnBhcmVudFBhdGg9bi5wYXRoLHQucGFyZW50T2JqZWN0PW4ubm9kZSx0Lm5hbWU9Wi5iYXNlbmFtZShlKSxuPWxlLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiFyfSksdC5leGlzdHM9ITAsdC5wYXRoPW4ucGF0aCx0Lm9iamVjdD1uLm5vZGUsdC5uYW1lPW4ubm9kZS5uYW1lLHQuaXNSb290PSIvIj09PW4ucGF0aH1jYXRjaChlKXt0LmVycm9yPWUuZXJybm99cmV0dXJuIHR9LGNyZWF0ZVBhdGgoZSxyLHQsbil7ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpsZS5nZXRQYXRoKGUpO2Zvcih2YXIgbz1yLnNwbGl0KCIvIikucmV2ZXJzZSgpO28ubGVuZ3RoOyl7dmFyIGE9by5wb3AoKTtpZihhKXt2YXIgcz1aLmpvaW4yKGUsYSk7dHJ5e2xlLm1rZGlyKHMpfWNhdGNoKGUpe31lPXN9fXJldHVybiBzfSxjcmVhdGVGaWxlKGUscix0LG4sbyl7dmFyIGE9Wi5qb2luMigic3RyaW5nIj09dHlwZW9mIGU/ZTpsZS5nZXRQYXRoKGUpLHIpLHM9dWUobixvKTtyZXR1cm4gbGUuY3JlYXRlKGEscyl9LGNyZWF0ZURhdGFGaWxlKGUscix0LG4sbyxhKXt2YXIgcz1yO2UmJihlPSJzdHJpbmciPT10eXBlb2YgZT9lOmxlLmdldFBhdGgoZSkscz1yP1ouam9pbjIoZSxyKTplKTt2YXIgaT11ZShuLG8pLHU9bGUuY3JlYXRlKHMsaSk7aWYodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtmb3IodmFyIGw9bmV3IEFycmF5KHQubGVuZ3RoKSxjPTAsZD10Lmxlbmd0aDtjPGQ7KytjKWxbY109dC5jaGFyQ29kZUF0KGMpO3Q9bH1sZS5jaG1vZCh1LDE0NnxpKTt2YXIgaD1sZS5vcGVuKHUsNTc3KTtsZS53cml0ZShoLHQsMCx0Lmxlbmd0aCwwLGEpLGxlLmNsb3NlKGgpLGxlLmNobW9kKHUsaSl9fSxjcmVhdGVEZXZpY2UoZSxyLHQsbil7dmFyIG89Wi5qb2luMigic3RyaW5nIj09dHlwZW9mIGU/ZTpsZS5nZXRQYXRoKGUpLHIpLGE9dWUoISF0LCEhbik7bGUuY3JlYXRlRGV2aWNlLm1ham9yfHwobGUuY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgcz1sZS5tYWtlZGV2KGxlLmNyZWF0ZURldmljZS5tYWpvcisrLDApO3JldHVybiBsZS5yZWdpc3RlckRldmljZShzLHtvcGVuKGUpe2Uuc2Vla2FibGU9ITF9LGNsb3NlKGUpe24/LmJ1ZmZlcj8ubGVuZ3RoJiZuKDEwKX0scmVhZChlLHIsbixvLGEpe2Zvcih2YXIgcz0wLGk9MDtpPG87aSsrKXt2YXIgdTt0cnl7dT10KCl9Y2F0Y2goZSl7dGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PXUmJjA9PT1zKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDYpO2lmKG51bGw9PXUpYnJlYWs7cysrLHJbbitpXT11fXJldHVybiBzJiYoZS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxzfSx3cml0ZShlLHIsdCxvLGEpe2Zvcih2YXIgcz0wO3M8bztzKyspdHJ5e24oclt0K3NdKX1jYXRjaChlKXt0aHJvdyBuZXcgbGUuRXJybm9FcnJvcigyOSl9cmV0dXJuIG8mJihlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLHN9fSksbGUubWtkZXYobyxhLHMpfSxmb3JjZUxvYWRGaWxlKGUpe2lmKGUuaXNEZXZpY2V8fGUuaXNGb2xkZXJ8fGUubGlua3x8ZS5jb250ZW50cylyZXR1cm4hMDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0KXRocm93IG5ldyBFcnJvcigiTGF6eSBsb2FkaW5nIHNob3VsZCBoYXZlIGJlZW4gcGVyZm9ybWVkIChjb250ZW50cyBzZXQpIGluIGNyZWF0ZUxhenlGaWxlLCBidXQgaXQgd2FzIG5vdC4gTGF6eSBsb2FkaW5nIG9ubHkgd29ya3MgaW4gd2ViIHdvcmtlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyBvbiB0aGUgbWFpbiB0aHJlYWQuIik7aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKTt0cnl7ZS5jb250ZW50cz1uZShvKGUudXJsKSwhMCksZS51c2VkQnl0ZXM9ZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2goZSl7dGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjkpfX0sY3JlYXRlTGF6eUZpbGUoZSxyLHQsbixvKXtmdW5jdGlvbiBhKCl7dGhpcy5sZW5ndGhLbm93bj0hMSx0aGlzLmNodW5rcz1bXX1pZihhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7aWYoIShlPnRoaXMubGVuZ3RoLTF8fGU8MCkpe3ZhciByPWUldGhpcy5jaHVua1NpemUsdD1lL3RoaXMuY2h1bmtTaXplfDA7cmV0dXJuIHRoaXMuZ2V0dGVyKHQpW3JdfX0sYS5wcm90b3R5cGUuc2V0RGF0YUdldHRlcj1mdW5jdGlvbihlKXt0aGlzLmdldHRlcj1lfSxhLnByb3RvdHlwZS5jYWNoZUxlbmd0aD1mdW5jdGlvbigpe3ZhciBlPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLm9wZW4oIkhFQUQiLHQsITEpLGUuc2VuZChudWxsKSwhKGUuc3RhdHVzPj0yMDAmJmUuc3RhdHVzPDMwMHx8MzA0PT09ZS5zdGF0dXMpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3QrIi4gU3RhdHVzOiAiK2Uuc3RhdHVzKTt2YXIgcixuPU51bWJlcihlLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LWxlbmd0aCIpKSxvPShyPWUuZ2V0UmVzcG9uc2VIZWFkZXIoIkFjY2VwdC1SYW5nZXMiKSkmJiJieXRlcyI9PT1yLGE9KHI9ZS5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmImd6aXAiPT09cixzPTEwNDg1NzY7b3x8KHM9bik7dmFyIGk9dGhpcztpLnNldERhdGFHZXR0ZXIoKGU9Pnt2YXIgcj1lKnMsbz0oZSsxKSpzLTE7aWYobz1NYXRoLm1pbihvLG4tMSksdm9pZCAwPT09aS5jaHVua3NbZV0mJihpLmNodW5rc1tlXT0oKGUscik9PntpZihlPnIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHJhbmdlICgiK2UrIiwgIityKyIpIG9yIG5vIGJ5dGVzIHJlcXVlc3RlZCEiKTtpZihyPm4tMSl0aHJvdyBuZXcgRXJyb3IoIm9ubHkgIituKyIgYnl0ZXMgYXZhaWxhYmxlISBwcm9ncmFtbWVyIGVycm9yISIpO3ZhciBvPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihvLm9wZW4oIkdFVCIsdCwhMSksbiE9PXMmJm8uc2V0UmVxdWVzdEhlYWRlcigiUmFuZ2UiLCJieXRlcz0iK2UrIi0iK3IpLG8ucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsby5vdmVycmlkZU1pbWVUeXBlJiZvLm92ZXJyaWRlTWltZVR5cGUoInRleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQiKSxvLnNlbmQobnVsbCksIShvLnN0YXR1cz49MjAwJiZvLnN0YXR1czwzMDB8fDMwND09PW8uc3RhdHVzKSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIit0KyIuIFN0YXR1czogIitvLnN0YXR1cyk7cmV0dXJuIHZvaWQgMCE9PW8ucmVzcG9uc2U/bmV3IFVpbnQ4QXJyYXkoby5yZXNwb25zZXx8W10pOm5lKG8ucmVzcG9uc2VUZXh0fHwiIiwhMCl9KShyLG8pKSx2b2lkIDA9PT1pLmNodW5rc1tlXSl0aHJvdyBuZXcgRXJyb3IoImRvWEhSIGZhaWxlZCEiKTtyZXR1cm4gaS5jaHVua3NbZV19KSksIWEmJm58fChzPW49MSxuPXRoaXMuZ2V0dGVyKDApLmxlbmd0aCxzPW4sXygiTGF6eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD1uLHRoaXMuX2NodW5rU2l6ZT1zLHRoaXMubGVuZ3RoS25vd249ITB9LCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3Qpe2lmKCFkKXRocm93IkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiO3ZhciBzPW5ldyBhO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHMse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoS25vd258fHRoaXMuY2FjaGVMZW5ndGgoKSx0aGlzLl9sZW5ndGh9fSxjaHVua1NpemU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fY2h1bmtTaXplfX19KTt2YXIgaT17aXNEZXZpY2U6ITEsY29udGVudHM6c319ZWxzZSBpPXtpc0RldmljZTohMSx1cmw6dH07dmFyIHU9bGUuY3JlYXRlRmlsZShlLHIsaSxuLG8pO2kuY29udGVudHM/dS5jb250ZW50cz1pLmNvbnRlbnRzOmkudXJsJiYodS5jb250ZW50cz1udWxsLHUudXJsPWkudXJsKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh1LHt1c2VkQnl0ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnRzLmxlbmd0aH19fSk7dmFyIGw9e307ZnVuY3Rpb24gYyhlLHIsdCxuLG8pe3ZhciBhPWUubm9kZS5jb250ZW50cztpZihvPj1hLmxlbmd0aClyZXR1cm4gMDt2YXIgcz1NYXRoLm1pbihhLmxlbmd0aC1vLG4pO2lmKGEuc2xpY2UpZm9yKHZhciBpPTA7aTxzO2krKylyW3QraV09YVtvK2ldO2Vsc2UgZm9yKGk9MDtpPHM7aSsrKXJbdCtpXT1hLmdldChvK2kpO3JldHVybiBzfXJldHVybiBPYmplY3Qua2V5cyh1LnN0cmVhbV9vcHMpLmZvckVhY2goKGU9Pnt2YXIgcj11LnN0cmVhbV9vcHNbZV07bFtlXT1mdW5jdGlvbigpe3JldHVybiBsZS5mb3JjZUxvYWRGaWxlKHUpLHIuYXBwbHkobnVsbCxhcmd1bWVudHMpfX0pKSxsLnJlYWQ9KGUscix0LG4sbyk9PihsZS5mb3JjZUxvYWRGaWxlKHUpLGMoZSxyLHQsbixvKSksbC5tbWFwPShlLHIsdCxuLG8pPT57bGUuZm9yY2VMb2FkRmlsZSh1KTt2YXIgYT1hZSgpO2lmKCFhKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gYyhlLEUsYSxyLHQpLHtwdHI6YSxhbGxvY2F0ZWQ6ITB9fSx1LnN0cmVhbV9vcHM9bCx1fX0sY2U9KGUscik9PmU/UShrLGUscik6IiIsZGU9e0RFRkFVTFRfUE9MTE1BU0s6NSxjYWxjdWxhdGVBdChlLHIsdCl7aWYoWi5pc0FicyhyKSlyZXR1cm4gcjt2YXIgbjtpZihuPS0xMDA9PT1lP2xlLmN3ZCgpOmRlLmdldFN0cmVhbUZyb21GRChlKS5wYXRoLDA9PXIubGVuZ3RoKXtpZighdCl0aHJvdyBuZXcgbGUuRXJybm9FcnJvcig0NCk7cmV0dXJuIG59cmV0dXJuIFouam9pbjIobixyKX0sZG9TdGF0KGUscix0KXt0cnl7dmFyIG49ZShyKX1jYXRjaChlKXtpZihlJiZlLm5vZGUmJloubm9ybWFsaXplKHIpIT09Wi5ub3JtYWxpemUobGUuZ2V0UGF0aChlLm5vZGUpKSlyZXR1cm4tNTQ7dGhyb3cgZX1GW3Q+PjJdPW4uZGV2LEZbdCs0Pj4yXT1uLm1vZGUsRFt0Kzg+PjJdPW4ubmxpbmssRlt0KzEyPj4yXT1uLnVpZCxGW3QrMTY+PjJdPW4uZ2lkLEZbdCsyMD4+Ml09bi5yZGV2LEk9W24uc2l6ZT4+PjAsKGo9bi5zaXplLCtNYXRoLmFicyhqKT49MT9qPjA/K01hdGguZmxvb3Ioai80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqLSsofn5qPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sRlt0KzI0Pj4yXT1JWzBdLEZbdCsyOD4+Ml09SVsxXSxGW3QrMzI+PjJdPTQwOTYsRlt0KzM2Pj4yXT1uLmJsb2Nrczt2YXIgbz1uLmF0aW1lLmdldFRpbWUoKSxhPW4ubXRpbWUuZ2V0VGltZSgpLHM9bi5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIEk9W01hdGguZmxvb3Ioby8xZTMpPj4+MCwoaj1NYXRoLmZsb29yKG8vMWUzKSwrTWF0aC5hYnMoaik+PTE/aj4wPytNYXRoLmZsb29yKGovNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoai0rKH5+aj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEZbdCs0MD4+Ml09SVswXSxGW3QrNDQ+PjJdPUlbMV0sRFt0KzQ4Pj4yXT1vJTFlMyoxZTMsST1bTWF0aC5mbG9vcihhLzFlMyk+Pj4wLChqPU1hdGguZmxvb3IoYS8xZTMpLCtNYXRoLmFicyhqKT49MT9qPjA/K01hdGguZmxvb3Ioai80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqLSsofn5qPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sRlt0KzU2Pj4yXT1JWzBdLEZbdCs2MD4+Ml09SVsxXSxEW3QrNjQ+PjJdPWElMWUzKjFlMyxJPVtNYXRoLmZsb29yKHMvMWUzKT4+PjAsKGo9TWF0aC5mbG9vcihzLzFlMyksK01hdGguYWJzKGopPj0xP2o+MD8rTWF0aC5mbG9vcihqLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGotKyh+fmo+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxGW3QrNzI+PjJdPUlbMF0sRlt0Kzc2Pj4yXT1JWzFdLERbdCs4MD4+Ml09cyUxZTMqMWUzLEk9W24uaW5vPj4+MCwoaj1uLmlubywrTWF0aC5hYnMoaik+PTE/aj4wPytNYXRoLmZsb29yKGovNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoai0rKH5+aj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEZbdCs4OD4+Ml09SVswXSxGW3QrOTI+PjJdPUlbMV0sMH0sZG9Nc3luYyhlLHIsdCxuLG8pe2lmKCFsZS5pc0ZpbGUoci5ub2RlLm1vZGUpKXRocm93IG5ldyBsZS5FcnJub0Vycm9yKDQzKTtpZigyJm4pcmV0dXJuIDA7dmFyIGE9ay5zbGljZShlLGUrdCk7bGUubXN5bmMocixhLG8sdCxuKX0sdmFyYXJnczp2b2lkIDAsZ2V0KCl7dmFyIGU9RlsrZGUudmFyYXJncz4+Ml07cmV0dXJuIGRlLnZhcmFyZ3MrPTQsZX0sZ2V0cDooKT0+ZGUuZ2V0KCksZ2V0U3RyOmU9PmNlKGUpLGdldFN0cmVhbUZyb21GRDplPT5sZS5nZXRTdHJlYW1DaGVja2VkKGUpfSxoZT1lPT4oRltPZSgpPj4yXT1lLGUpLGZlPXtCVUNLRVRfQlVGRkVSX1NJWkU6ODE5Mixtb3VudDplPT5sZS5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApLGNyZWF0ZVBpcGUoKXt2YXIgZT17YnVja2V0czpbXSxyZWZjbnQ6Mn07ZS5idWNrZXRzLnB1c2goe2J1ZmZlcjpuZXcgVWludDhBcnJheShmZS5CVUNLRVRfQlVGRkVSX1NJWkUpLG9mZnNldDowLHJvZmZzZXQ6MH0pO3ZhciByPWZlLm5leHRuYW1lKCksdD1mZS5uZXh0bmFtZSgpLG49bGUuY3JlYXRlTm9kZShmZS5yb290LHIsNDA5NiwwKSxvPWxlLmNyZWF0ZU5vZGUoZmUucm9vdCx0LDQwOTYsMCk7bi5waXBlPWUsby5waXBlPWU7dmFyIGE9bGUuY3JlYXRlU3RyZWFtKHtwYXRoOnIsbm9kZTpuLGZsYWdzOjAsc2Vla2FibGU6ITEsc3RyZWFtX29wczpmZS5zdHJlYW1fb3BzfSk7bi5zdHJlYW09YTt2YXIgcz1sZS5jcmVhdGVTdHJlYW0oe3BhdGg6dCxub2RlOm8sZmxhZ3M6MSxzZWVrYWJsZTohMSxzdHJlYW1fb3BzOmZlLnN0cmVhbV9vcHN9KTtyZXR1cm4gby5zdHJlYW09cyx7cmVhZGFibGVfZmQ6YS5mZCx3cml0YWJsZV9mZDpzLmZkfX0sc3RyZWFtX29wczp7cG9sbChlKXt2YXIgcj1lLm5vZGUucGlwZTtpZigxPT0oMjA5NzE1NSZlLmZsYWdzKSlyZXR1cm4gMjYwO2lmKHIuYnVja2V0cy5sZW5ndGg+MClmb3IodmFyIHQ9MDt0PHIuYnVja2V0cy5sZW5ndGg7dCsrKXt2YXIgbj1yLmJ1Y2tldHNbdF07aWYobi5vZmZzZXQtbi5yb2Zmc2V0PjApcmV0dXJuIDY1fXJldHVybiAwfSxpb2N0bDooZSxyLHQpPT4yOCxmc3luYzplPT4yOCxyZWFkKGUscix0LG4sbyl7Zm9yKHZhciBhPWUubm9kZS5waXBlLHM9MCxpPTA7aTxhLmJ1Y2tldHMubGVuZ3RoO2krKyl7dmFyIHU9YS5idWNrZXRzW2ldO3MrPXUub2Zmc2V0LXUucm9mZnNldH12YXIgbD1yLnN1YmFycmF5KHQsdCtuKTtpZihuPD0wKXJldHVybiAwO2lmKDA9PXMpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoNik7dmFyIGM9TWF0aC5taW4ocyxuKSxkPWMsaD0wO2ZvcihpPTA7aTxhLmJ1Y2tldHMubGVuZ3RoO2krKyl7dmFyIGY9YS5idWNrZXRzW2ldLG09Zi5vZmZzZXQtZi5yb2Zmc2V0O2lmKGM8PW0pe3ZhciBwPWYuYnVmZmVyLnN1YmFycmF5KGYucm9mZnNldCxmLm9mZnNldCk7YzxtPyhwPXAuc3ViYXJyYXkoMCxjKSxmLnJvZmZzZXQrPWMpOmgrKyxsLnNldChwKTticmVha31wPWYuYnVmZmVyLnN1YmFycmF5KGYucm9mZnNldCxmLm9mZnNldCksbC5zZXQocCksbD1sLnN1YmFycmF5KHAuYnl0ZUxlbmd0aCksYy09cC5ieXRlTGVuZ3RoLGgrK31yZXR1cm4gaCYmaD09YS5idWNrZXRzLmxlbmd0aCYmKGgtLSxhLmJ1Y2tldHNbaF0ub2Zmc2V0PTAsYS5idWNrZXRzW2hdLnJvZmZzZXQ9MCksYS5idWNrZXRzLnNwbGljZSgwLGgpLGR9LHdyaXRlKGUscix0LG4sbyl7dmFyIGE9ZS5ub2RlLnBpcGUscz1yLnN1YmFycmF5KHQsdCtuKSxpPXMuYnl0ZUxlbmd0aDtpZihpPD0wKXJldHVybiAwO3ZhciB1PW51bGw7MD09YS5idWNrZXRzLmxlbmd0aD8odT17YnVmZmVyOm5ldyBVaW50OEFycmF5KGZlLkJVQ0tFVF9CVUZGRVJfU0laRSksb2Zmc2V0OjAscm9mZnNldDowfSxhLmJ1Y2tldHMucHVzaCh1KSk6dT1hLmJ1Y2tldHNbYS5idWNrZXRzLmxlbmd0aC0xXSxBKHUub2Zmc2V0PD1mZS5CVUNLRVRfQlVGRkVSX1NJWkUpO3ZhciBsPWZlLkJVQ0tFVF9CVUZGRVJfU0laRS11Lm9mZnNldDtpZihsPj1pKXJldHVybiB1LmJ1ZmZlci5zZXQocyx1Lm9mZnNldCksdS5vZmZzZXQrPWksaTtsPjAmJih1LmJ1ZmZlci5zZXQocy5zdWJhcnJheSgwLGwpLHUub2Zmc2V0KSx1Lm9mZnNldCs9bCxzPXMuc3ViYXJyYXkobCxzLmJ5dGVMZW5ndGgpKTtmb3IodmFyIGM9cy5ieXRlTGVuZ3RoL2ZlLkJVQ0tFVF9CVUZGRVJfU0laRXwwLGQ9cy5ieXRlTGVuZ3RoJWZlLkJVQ0tFVF9CVUZGRVJfU0laRSxoPTA7aDxjO2grKyl7dmFyIGY9e2J1ZmZlcjpuZXcgVWludDhBcnJheShmZS5CVUNLRVRfQlVGRkVSX1NJWkUpLG9mZnNldDpmZS5CVUNLRVRfQlVGRkVSX1NJWkUscm9mZnNldDowfTthLmJ1Y2tldHMucHVzaChmKSxmLmJ1ZmZlci5zZXQocy5zdWJhcnJheSgwLGZlLkJVQ0tFVF9CVUZGRVJfU0laRSkpLHM9cy5zdWJhcnJheShmZS5CVUNLRVRfQlVGRkVSX1NJWkUscy5ieXRlTGVuZ3RoKX1yZXR1cm4gZD4wJiYoZj17YnVmZmVyOm5ldyBVaW50OEFycmF5KGZlLkJVQ0tFVF9CVUZGRVJfU0laRSksb2Zmc2V0OnMuYnl0ZUxlbmd0aCxyb2Zmc2V0OjB9LGEuYnVja2V0cy5wdXNoKGYpLGYuYnVmZmVyLnNldChzKSksaX0sY2xvc2UoZSl7dmFyIHI9ZS5ub2RlLnBpcGU7ci5yZWZjbnQtLSwwPT09ci5yZWZjbnQmJihyLmJ1Y2tldHM9bnVsbCl9fSxuZXh0bmFtZTooKT0+KGZlLm5leHRuYW1lLmN1cnJlbnR8fChmZS5uZXh0bmFtZS5jdXJyZW50PTApLCJwaXBlWyIrZmUubmV4dG5hbWUuY3VycmVudCsrKyJdIil9LG1lPShlLHIpPT5yKzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFlPyhlPj4+MCkrNDI5NDk2NzI5NipyOk5hTixwZT1lPT5lJTQ9PTAmJihlJTEwMCE9MHx8ZSU0MDA9PTApLHZlPVswLDMxLDYwLDkxLDEyMSwxNTIsMTgyLDIxMywyNDQsMjc0LDMwNSwzMzVdLHdlPVswLDMxLDU5LDkwLDEyMCwxNTEsMTgxLDIxMiwyNDMsMjczLDMwNCwzMzRdLGdlPWU9PihwZShlLmdldEZ1bGxZZWFyKCkpP3ZlOndlKVtlLmdldE1vbnRoKCldK2UuZ2V0RGF0ZSgpLTEsX2U9KGUscix0KT0+dGUoZSxrLHIsdCkseWU9ZT0+e3ZhciByPXJlKGUpKzEsdD14ZShyKTtyZXR1cm4gdCYmX2UoZSx0LHIpLHR9LEVlPWU9Pnt2YXIgcj0oZS1nLmJ1ZmZlci5ieXRlTGVuZ3RoKzY1NTM1KS82NTUzNjt0cnl7cmV0dXJuIGcuZ3JvdyhyKSxDKCksMX1jYXRjaChlKXt9fSxiZT17fSxrZT0oKT0+e2lmKCFrZS5zdHJpbmdzKXt2YXIgZT17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLF86dXx8Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZhciByIGluIGJlKXZvaWQgMD09PWJlW3JdP2RlbGV0ZSBlW3JdOmVbcl09YmVbcl07dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKGAke3J9PSR7ZVtyXX1gKTtrZS5zdHJpbmdzPXR9cmV0dXJuIGtlLnN0cmluZ3N9LFNlPWU9PntYfHwobi5vbkV4aXQ/LihlKSxNPSEwKSxsKGUsbmV3IHEoZSkpfSxGZT0oZSxyKT0+e1NlKGUpfSxEZT1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLE1lPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sQWU9KGUscik9PntFLnNldChlLHIpfSxDZT1lPT5uWyJfIitlXSxQZT0oZSxyLHQsbixvKT0+e3ZhciBhPXtzdHJpbmc6ZT0+e3ZhciByPTA7cmV0dXJuIG51bGwhPWUmJjAhPT1lJiYocj0oZT0+e3ZhciByPXJlKGUpKzEsdD1IZShyKTtyZXR1cm4gX2UoZSx0LHIpLHR9KShlKSkscn0sYXJyYXk6ZT0+e3ZhciByPUhlKGUubGVuZ3RoKTtyZXR1cm4gQWUoZSxyKSxyfX0scz1DZShlKSxpPVtdLHU9MDtpZihuKWZvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1hW3RbbF1dO2M/KDA9PT11JiYodT1qZSgpKSxpW2xdPWMobltsXSkpOmlbbF09bltsXX12YXIgZD1zLmFwcGx5KG51bGwsaSk7cmV0dXJuIGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT11JiZJZSh1KSxmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09PXI/Y2UoZSk6ImJvb2xlYW4iPT09cj9Cb29sZWFuKGUpOmV9KGUpfShkKX0sVGU9ZnVuY3Rpb24oZSxyLHQsbil7ZXx8KGU9dGhpcyksdGhpcy5wYXJlbnQ9ZSx0aGlzLm1vdW50PWUubW91bnQsdGhpcy5tb3VudGVkPW51bGwsdGhpcy5pZD1sZS5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9cix0aGlzLm1vZGU9dCx0aGlzLm5vZGVfb3BzPXt9LHRoaXMuc3RyZWFtX29wcz17fSx0aGlzLnJkZXY9bn0sUmU9MzY1LHplPTE0NjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZS5wcm90b3R5cGUse3JlYWQ6e2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLm1vZGUmUmUpPT09UmV9LHNldDpmdW5jdGlvbihlKXtlP3RoaXMubW9kZXw9UmU6dGhpcy5tb2RlJj0tMzY2fX0sd3JpdGU6e2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLm1vZGUmemUpPT09emV9LHNldDpmdW5jdGlvbihlKXtlP3RoaXMubW9kZXw9emU6dGhpcy5tb2RlJj0tMTQ3fX0saXNGb2xkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBsZS5pc0Rpcih0aGlzLm1vZGUpfX0saXNEZXZpY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBsZS5pc0NocmRldih0aGlzLm1vZGUpfX19KSxsZS5GU05vZGU9VGUsbGUuY3JlYXRlUHJlbG9hZGVkRmlsZT0oZSxyLHQsbixvLHMsaSx1LGwsYyk9Pnt2YXIgZD1yP1YucmVzb2x2ZShaLmpvaW4yKGUscikpOmU7ZnVuY3Rpb24gaCh0KXtmdW5jdGlvbiBhKHQpe2M/LigpLHV8fCgoZSxyLHQsbixvLGEpPT57bGUuY3JlYXRlRGF0YUZpbGUoZSxyLHQsbixvLGEpfSkoZSxyLHQsbixvLGwpLHM/LigpLHgoKX0oKGUscix0LG4pPT57InVuZGVmaW5lZCIhPXR5cGVvZiBCcm93c2VyJiZCcm93c2VyLmluaXQoKTt2YXIgbz0hMTtyZXR1cm4gaWUuZm9yRWFjaCgoYT0+e298fGEuY2FuSGFuZGxlKHIpJiYoYS5oYW5kbGUoZSxyLHQsbiksbz0hMCl9KSksb30pKHQsZCxhLCgoKT0+e2k/LigpLHgoKX0pKXx8YSh0KX1MKCksInN0cmluZyI9PXR5cGVvZiB0PygoZSxyLHQsbik9Pnt2YXIgbz1uPyIiOmBhbCAke2V9YDthKGUsKHQ9PntBKHQsYExvYWRpbmcgZGF0YSBmaWxlICIke2V9IiBmYWlsZWQgKG5vIGFycmF5QnVmZmVyKS5gKSxyKG5ldyBVaW50OEFycmF5KHQpKSxvJiZ4KCl9KSwocj0+e2lmKCF0KXRocm93YExvYWRpbmcgZGF0YSBmaWxlICIke2V9IiBmYWlsZWQuYDt0KCl9KSksbyYmTCgpfSkodCwoZT0+aChlKSksaSk6aCh0KX0sbGUuc3RhdGljSW5pdCgpO3ZhciBVZT17aTpmdW5jdGlvbihlKXt0cnl7dmFyIHI9ZGUuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBsZS5jcmVhdGVTdHJlYW0ocikuZmR9Y2F0Y2goZSl7aWYodm9pZCAwPT09bGV8fCJFcnJub0Vycm9yIiE9PWUubmFtZSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sYTpmdW5jdGlvbihlLHIsdCl7ZGUudmFyYXJncz10O3RyeXt2YXIgbj1kZS5nZXRTdHJlYW1Gcm9tRkQoZSk7c3dpdGNoKHIpe2Nhc2UgMDppZigobz1kZS5nZXQoKSk8MClyZXR1cm4tMjg7Zm9yKDtsZS5zdHJlYW1zW29dOylvKys7cmV0dXJuIGxlLmNyZWF0ZVN0cmVhbShuLG8pLmZkO2Nhc2UgMTpjYXNlIDI6Y2FzZSA2OmNhc2UgNzpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIG4uZmxhZ3M7Y2FzZSA0OnZhciBvPWRlLmdldCgpO3JldHVybiBuLmZsYWdzfD1vLDA7Y2FzZSA1OnJldHVybiBvPWRlLmdldHAoKSxTW28rMD4+MV09MiwwO2Nhc2UgMTY6Y2FzZSA4OmRlZmF1bHQ6cmV0dXJuLTI4O2Nhc2UgOTpyZXR1cm4gaGUoMjgpLC0xfX1jYXRjaChlKXtpZih2b2lkIDA9PT1sZXx8IkVycm5vRXJyb3IiIT09ZS5uYW1lKXRocm93IGU7cmV0dXJuLWUuZXJybm99fSx4OmZ1bmN0aW9uKGUscil7dHJ5e3ZhciB0PWRlLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gZGUuZG9TdGF0KGxlLnN0YXQsdC5wYXRoLHIpfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LHU6ZnVuY3Rpb24oZSxyKXt0cnl7cmV0dXJuIGU9ZGUuZ2V0U3RyKGUpLGRlLmRvU3RhdChsZS5sc3RhdCxlLHIpfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LHY6ZnVuY3Rpb24oZSxyLHQsbil7dHJ5e3I9ZGUuZ2V0U3RyKHIpO3ZhciBvPTI1NiZuLGE9NDA5NiZuO3JldHVybiBuJj0tNjQwMSxyPWRlLmNhbGN1bGF0ZUF0KGUscixhKSxkZS5kb1N0YXQobz9sZS5sc3RhdDpsZS5zdGF0LHIsdCl9Y2F0Y2goZSl7aWYodm9pZCAwPT09bGV8fCJFcnJub0Vycm9yIiE9PWUubmFtZSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0seTpmdW5jdGlvbihlLHIsdCxuKXtkZS52YXJhcmdzPW47dHJ5e3I9ZGUuZ2V0U3RyKHIpLHI9ZGUuY2FsY3VsYXRlQXQoZSxyKTt2YXIgbz1uP2RlLmdldCgpOjA7cmV0dXJuIGxlLm9wZW4ocix0LG8pLmZkfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LHQ6ZnVuY3Rpb24oZSl7dHJ5e2lmKDA9PWUpdGhyb3cgbmV3IGxlLkVycm5vRXJyb3IoMjEpO3ZhciByPWZlLmNyZWF0ZVBpcGUoKTtyZXR1cm4gRltlPj4yXT1yLnJlYWRhYmxlX2ZkLEZbZSs0Pj4yXT1yLndyaXRhYmxlX2ZkLDB9Y2F0Y2goZSl7aWYodm9pZCAwPT09bGV8fCJFcnJub0Vycm9yIiE9PWUubmFtZSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0sczpmdW5jdGlvbihlLHIsdCl7dHJ5e2Zvcih2YXIgbj0wLG89MDtvPHI7bysrKXt2YXIgYT1lKzgqbyxzPUZbYT4+Ml0saT1TW2ErND4+MV0sdT0zMixsPWxlLmdldFN0cmVhbShzKTtsJiYodT1kZS5ERUZBVUxUX1BPTExNQVNLLGwuc3RyZWFtX29wcy5wb2xsJiYodT1sLnN0cmVhbV9vcHMucG9sbChsLC0xKSkpLCh1Jj0yNHxpKSYmbisrLFNbYSs2Pj4xXT11fXJldHVybiBufWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LHc6ZnVuY3Rpb24oZSxyKXt0cnl7cmV0dXJuIGU9ZGUuZ2V0U3RyKGUpLGRlLmRvU3RhdChsZS5zdGF0LGUscil9Y2F0Y2goZSl7aWYodm9pZCAwPT09bGV8fCJFcnJub0Vycm9yIiE9PWUubmFtZSl0aHJvdyBlO3JldHVybi1lLmVycm5vfX0scTpmdW5jdGlvbihlLHIsdCl7dHJ5e3JldHVybiByPWRlLmdldFN0cihyKSxyPWRlLmNhbGN1bGF0ZUF0KGUsciksMD09PXQ/bGUudW5saW5rKHIpOjUxMj09PXQ/bGUucm1kaXIocik6TygiSW52YWxpZCBmbGFncyBwYXNzZWQgdG8gdW5saW5rYXQiKSwwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4tZS5lcnJub319LEI6KCk9PjEsazpmdW5jdGlvbihlLHIsdCl7dmFyIG49bWUoZSxyKSxvPW5ldyBEYXRlKDFlMypuKTtGW3Q+PjJdPW8uZ2V0VVRDU2Vjb25kcygpLEZbdCs0Pj4yXT1vLmdldFVUQ01pbnV0ZXMoKSxGW3QrOD4+Ml09by5nZXRVVENIb3VycygpLEZbdCsxMj4+Ml09by5nZXRVVENEYXRlKCksRlt0KzE2Pj4yXT1vLmdldFVUQ01vbnRoKCksRlt0KzIwPj4yXT1vLmdldFVUQ0Z1bGxZZWFyKCktMTkwMCxGW3QrMjQ+PjJdPW8uZ2V0VVRDRGF5KCk7dmFyIGE9RGF0ZS5VVEMoby5nZXRVVENGdWxsWWVhcigpLDAsMSwwLDAsMCwwKSxzPShvLmdldFRpbWUoKS1hKS84NjRlNXwwO0ZbdCsyOD4+Ml09c30sbDpmdW5jdGlvbihlLHIsdCl7dmFyIG49bWUoZSxyKSxvPW5ldyBEYXRlKDFlMypuKTtGW3Q+PjJdPW8uZ2V0U2Vjb25kcygpLEZbdCs0Pj4yXT1vLmdldE1pbnV0ZXMoKSxGW3QrOD4+Ml09by5nZXRIb3VycygpLEZbdCsxMj4+Ml09by5nZXREYXRlKCksRlt0KzE2Pj4yXT1vLmdldE1vbnRoKCksRlt0KzIwPj4yXT1vLmdldEZ1bGxZZWFyKCktMTkwMCxGW3QrMjQ+PjJdPW8uZ2V0RGF5KCk7dmFyIGE9MHxnZShvKTtGW3QrMjg+PjJdPWEsRlt0KzM2Pj4yXT0tNjAqby5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBzPW5ldyBEYXRlKG8uZ2V0RnVsbFllYXIoKSwwLDEpLGk9bmV3IERhdGUoby5nZXRGdWxsWWVhcigpLDYsMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSx1PXMuZ2V0VGltZXpvbmVPZmZzZXQoKSxsPTB8KGkhPXUmJm8uZ2V0VGltZXpvbmVPZmZzZXQoKT09TWF0aC5taW4odSxpKSk7Rlt0KzMyPj4yXT1sfSxtOmZ1bmN0aW9uKGUpe3ZhciByPSgoKT0+e3ZhciByPW5ldyBEYXRlKEZbZSsyMD4+Ml0rMTkwMCxGW2UrMTY+PjJdLEZbZSsxMj4+Ml0sRltlKzg+PjJdLEZbZSs0Pj4yXSxGW2U+PjJdLDApLHQ9RltlKzMyPj4yXSxuPXIuZ2V0VGltZXpvbmVPZmZzZXQoKSxvPW5ldyBEYXRlKHIuZ2V0RnVsbFllYXIoKSwwLDEpLGE9bmV3IERhdGUoci5nZXRGdWxsWWVhcigpLDYsMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxzPW8uZ2V0VGltZXpvbmVPZmZzZXQoKSxpPU1hdGgubWluKHMsYSk7aWYodDwwKUZbZSszMj4+Ml09TnVtYmVyKGEhPXMmJmk9PW4pO2Vsc2UgaWYodD4wIT0oaT09bikpe3ZhciB1PU1hdGgubWF4KHMsYSksbD10PjA/aTp1O3Iuc2V0VGltZShyLmdldFRpbWUoKSs2ZTQqKGwtbikpfUZbZSsyND4+Ml09ci5nZXREYXkoKTt2YXIgYz0wfGdlKHIpO0ZbZSsyOD4+Ml09YyxGW2U+PjJdPXIuZ2V0U2Vjb25kcygpLEZbZSs0Pj4yXT1yLmdldE1pbnV0ZXMoKSxGW2UrOD4+Ml09ci5nZXRIb3VycygpLEZbZSsxMj4+Ml09ci5nZXREYXRlKCksRltlKzE2Pj4yXT1yLmdldE1vbnRoKCksRltlKzIwPj4yXT1yLmdldFllYXIoKTt2YXIgZD1yLmdldFRpbWUoKTtyZXR1cm4gaXNOYU4oZCk/KGhlKDYxKSwtMSk6ZC8xZTN9KSgpO3JldHVybiBCZSgoaj1yLCtNYXRoLmFicyhqKT49MT9qPjA/K01hdGguZmxvb3Ioai80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChqLSsofn5qPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKSkscj4+PjB9LG46ZnVuY3Rpb24oZSl7dmFyIHI9KCgpPT57dmFyIHI9RGF0ZS5VVEMoRltlKzIwPj4yXSsxOTAwLEZbZSsxNj4+Ml0sRltlKzEyPj4yXSxGW2UrOD4+Ml0sRltlKzQ+PjJdLEZbZT4+Ml0sMCksdD1uZXcgRGF0ZShyKTtGW2UrMjQ+PjJdPXQuZ2V0VVRDRGF5KCk7dmFyIG49RGF0ZS5VVEModC5nZXRVVENGdWxsWWVhcigpLDAsMSwwLDAsMCwwKSxvPSh0LmdldFRpbWUoKS1uKS84NjRlNXwwO3JldHVybiBGW2UrMjg+PjJdPW8sdC5nZXRUaW1lKCkvMWUzfSkoKTtyZXR1cm4gQmUoKGo9ciwrTWF0aC5hYnMoaik+PTE/aj4wPytNYXRoLmZsb29yKGovNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoai0rKH5+aj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCkpLHI+Pj4wfSxyOihlLHIsdCk9Pnt2YXIgbj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksbz1uZXcgRGF0ZShuLDAsMSksYT1uZXcgRGF0ZShuLDYsMSkscz1vLmdldFRpbWV6b25lT2Zmc2V0KCksaT1hLmdldFRpbWV6b25lT2Zmc2V0KCksdT1NYXRoLm1heChzLGkpO2Z1bmN0aW9uIGwoZSl7dmFyIHI9ZS50b1RpbWVTdHJpbmcoKS5tYXRjaCgvXCgoW0EtWmEteiBdKylcKSQvKTtyZXR1cm4gcj9yWzFdOiJHTVQifURbZT4+Ml09NjAqdSxGW3I+PjJdPU51bWJlcihzIT1pKTt2YXIgYz1sKG8pLGQ9bChhKSxoPXllKGMpLGY9eWUoZCk7aTxzPyhEW3Q+PjJdPWgsRFt0KzQ+PjJdPWYpOihEW3Q+PjJdPWYsRFt0KzQ+PjJdPWgpfSxiOigpPT57TygiIil9LGM6KCk9PkRhdGUubm93KCksaDooZSxyLHQpPT5rLmNvcHlXaXRoaW4oZSxyLHIrdCkscDplPT57dmFyIHI9ay5sZW5ndGgsdD0yMTQ3NDgzNjQ4O2lmKChlPj4+PTApPnQpcmV0dXJuITE7Zm9yKHZhciBuLG8sYT0xO2E8PTQ7YSo9Mil7dmFyIHM9ciooMSsuMi9hKTtzPU1hdGgubWluKHMsZSsxMDA2NjMyOTYpO3ZhciBpPU1hdGgubWluKHQsKG49TWF0aC5tYXgoZSxzKSkrKChvPTY1NTM2KS1uJW8pJW8pO2lmKEVlKGkpKXJldHVybiEwfXJldHVybiExfSx6OihlLHIpPT57dmFyIHQ9MDtyZXR1cm4ga2UoKS5mb3JFYWNoKCgobixvKT0+e3ZhciBhPXIrdDtEW2UrNCpvPj4yXT1hLCgoZSxyKT0+e2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7Kyt0KUVbcisrPj4wXT1lLmNoYXJDb2RlQXQodCk7RVtyPj4wXT0wfSkobixhKSx0Kz1uLmxlbmd0aCsxfSkpLDB9LEE6KGUscik9Pnt2YXIgdD1rZSgpO0RbZT4+Ml09dC5sZW5ndGg7dmFyIG49MDtyZXR1cm4gdC5mb3JFYWNoKChlPT5uKz1lLmxlbmd0aCsxKSksRFtyPj4yXT1uLDB9LGc6RmUsZTpmdW5jdGlvbihlKXt0cnl7dmFyIHI9ZGUuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBsZS5jbG9zZShyKSwwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LGo6ZnVuY3Rpb24oZSxyLHQsbil7dHJ5e3ZhciBvPSgoZSxyLHQsbik9Pntmb3IodmFyIG89MCxhPTA7YTx0O2ErKyl7dmFyIHM9RFtyPj4yXSxpPURbcis0Pj4yXTtyKz04O3ZhciB1PWxlLnJlYWQoZSxFLHMsaSxuKTtpZih1PDApcmV0dXJuLTE7aWYobys9dSx1PGkpYnJlYWs7dm9pZCAwIT09biYmKG4rPXUpfXJldHVybiBvfSkoZGUuZ2V0U3RyZWFtRnJvbUZEKGUpLHIsdCk7cmV0dXJuIERbbj4+Ml09bywwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LG86ZnVuY3Rpb24oZSxyLHQsbixvKXt2YXIgYT1tZShyLHQpO3RyeXtpZihpc05hTihhKSlyZXR1cm4gNjE7dmFyIHM9ZGUuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBsZS5sbHNlZWsocyxhLG4pLEk9W3MucG9zaXRpb24+Pj4wLChqPXMucG9zaXRpb24sK01hdGguYWJzKGopPj0xP2o+MD8rTWF0aC5mbG9vcihqLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKGotKyh+fmo+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxGW28+PjJdPUlbMF0sRltvKzQ+PjJdPUlbMV0scy5nZXRkZW50cyYmMD09PWEmJjA9PT1uJiYocy5nZXRkZW50cz1udWxsKSwwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LGQ6ZnVuY3Rpb24oZSxyLHQsbil7dHJ5e3ZhciBvPSgoZSxyLHQsbik9Pntmb3IodmFyIG89MCxhPTA7YTx0O2ErKyl7dmFyIHM9RFtyPj4yXSxpPURbcis0Pj4yXTtyKz04O3ZhciB1PWxlLndyaXRlKGUsRSxzLGksbik7aWYodTwwKXJldHVybi0xO28rPXUsdm9pZCAwIT09biYmKG4rPXUpfXJldHVybiBvfSkoZGUuZ2V0U3RyZWFtRnJvbUZEKGUpLHIsdCk7cmV0dXJuIERbbj4+Ml09bywwfWNhdGNoKGUpe2lmKHZvaWQgMD09PWxlfHwiRXJybm9FcnJvciIhPT1lLm5hbWUpdGhyb3cgZTtyZXR1cm4gZS5lcnJub319LGY6KGUscix0LG4pPT57dmFyIG89RFtuKzQwPj4yXSxhPXt0bV9zZWM6RltuPj4yXSx0bV9taW46RltuKzQ+PjJdLHRtX2hvdXI6RltuKzg+PjJdLHRtX21kYXk6RltuKzEyPj4yXSx0bV9tb246RltuKzE2Pj4yXSx0bV95ZWFyOkZbbisyMD4+Ml0sdG1fd2RheTpGW24rMjQ+PjJdLHRtX3lkYXk6RltuKzI4Pj4yXSx0bV9pc2RzdDpGW24rMzI+PjJdLHRtX2dtdG9mZjpGW24rMzY+PjJdLHRtX3pvbmU6bz9jZShvKToiIn0scz1jZSh0KSxpPXsiJWMiOiIlYSAlYiAlZCAlSDolTTolUyAlWSIsIiVEIjoiJW0vJWQvJXkiLCIlRiI6IiVZLSVtLSVkIiwiJWgiOiIlYiIsIiVyIjoiJUk6JU06JVMgJXAiLCIlUiI6IiVIOiVNIiwiJVQiOiIlSDolTTolUyIsIiV4IjoiJW0vJWQvJXkiLCIlWCI6IiVIOiVNOiVTIiwiJUVjIjoiJWMiLCIlRUMiOiIlQyIsIiVFeCI6IiVtLyVkLyV5IiwiJUVYIjoiJUg6JU06JVMiLCIlRXkiOiIleSIsIiVFWSI6IiVZIiwiJU9kIjoiJWQiLCIlT2UiOiIlZSIsIiVPSCI6IiVIIiwiJU9JIjoiJUkiLCIlT20iOiIlbSIsIiVPTSI6IiVNIiwiJU9TIjoiJVMiLCIlT3UiOiIldSIsIiVPVSI6IiVVIiwiJU9WIjoiJVYiLCIlT3ciOiIldyIsIiVPVyI6IiVXIiwiJU95IjoiJXkifTtmb3IodmFyIHUgaW4gaSlzPXMucmVwbGFjZShuZXcgUmVnRXhwKHUsImciKSxpW3VdKTt2YXIgbD1bIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sYz1bIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl07ZnVuY3Rpb24gZChlLHIsdCl7Zm9yKHZhciBuPSJudW1iZXIiPT10eXBlb2YgZT9lLnRvU3RyaW5nKCk6ZXx8IiI7bi5sZW5ndGg8cjspbj10WzBdK247cmV0dXJuIG59ZnVuY3Rpb24gaChlLHIpe3JldHVybiBkKGUsciwiMCIpfWZ1bmN0aW9uIGYoZSxyKXtmdW5jdGlvbiB0KGUpe3JldHVybiBlPDA/LTE6ZT4wPzE6MH12YXIgbjtyZXR1cm4gMD09PShuPXQoZS5nZXRGdWxsWWVhcigpLXIuZ2V0RnVsbFllYXIoKSkpJiYwPT09KG49dChlLmdldE1vbnRoKCktci5nZXRNb250aCgpKSkmJihuPXQoZS5nZXREYXRlKCktci5nZXREYXRlKCkpKSxufWZ1bmN0aW9uIG0oZSl7c3dpdGNoKGUuZ2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLTEsMTEsMjkpO2Nhc2UgMTpyZXR1cm4gZTtjYXNlIDI6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsMik7Y2FzZSA0OnJldHVybiBuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCwxKTtjYXNlIDU6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKS0xLDExLDMxKTtjYXNlIDY6cmV0dXJuIG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKS0xLDExLDMwKX19ZnVuY3Rpb24gcChlKXt2YXIgcj0oKGUscik9Pntmb3IodmFyIHQ9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3I+MDspe3ZhciBuPXBlKHQuZ2V0RnVsbFllYXIoKSksbz10LmdldE1vbnRoKCksYT0obj9EZTpNZSlbb107aWYoIShyPmEtdC5nZXREYXRlKCkpKXJldHVybiB0LnNldERhdGUodC5nZXREYXRlKCkrciksdDtyLT1hLXQuZ2V0RGF0ZSgpKzEsdC5zZXREYXRlKDEpLG88MTE/dC5zZXRNb250aChvKzEpOih0LnNldE1vbnRoKDApLHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpKzEpKX1yZXR1cm4gdH0pKG5ldyBEYXRlKGUudG1feWVhcisxOTAwLDAsMSksZS50bV95ZGF5KSx0PW5ldyBEYXRlKHIuZ2V0RnVsbFllYXIoKSwwLDQpLG49bmV3IERhdGUoci5nZXRGdWxsWWVhcigpKzEsMCw0KSxvPW0odCksYT1tKG4pO3JldHVybiBmKG8scik8PTA/ZihhLHIpPD0wP3IuZ2V0RnVsbFllYXIoKSsxOnIuZ2V0RnVsbFllYXIoKTpyLmdldEZ1bGxZZWFyKCktMX12YXIgdj17IiVhIjplPT5sW2UudG1fd2RheV0uc3Vic3RyaW5nKDAsMyksIiVBIjplPT5sW2UudG1fd2RheV0sIiViIjplPT5jW2UudG1fbW9uXS5zdWJzdHJpbmcoMCwzKSwiJUIiOmU9PmNbZS50bV9tb25dLCIlQyI6ZT0+aCgoZS50bV95ZWFyKzE5MDApLzEwMHwwLDIpLCIlZCI6ZT0+aChlLnRtX21kYXksMiksIiVlIjplPT5kKGUudG1fbWRheSwyLCIgIiksIiVnIjplPT5wKGUpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLCIlRyI6ZT0+cChlKSwiJUgiOmU9PmgoZS50bV9ob3VyLDIpLCIlSSI6ZT0+e3ZhciByPWUudG1faG91cjtyZXR1cm4gMD09cj9yPTEyOnI+MTImJihyLT0xMiksaChyLDIpfSwiJWoiOmU9PmgoZS50bV9tZGF5KygoZSxyKT0+e2Zvcih2YXIgdD0wLG49MDtuPD1yO3QrPWVbbisrXSk7cmV0dXJuIHR9KShwZShlLnRtX3llYXIrMTkwMCk/RGU6TWUsZS50bV9tb24tMSksMyksIiVtIjplPT5oKGUudG1fbW9uKzEsMiksIiVNIjplPT5oKGUudG1fbWluLDIpLCIlbiI6KCk9PiJcbiIsIiVwIjplPT5lLnRtX2hvdXI+PTAmJmUudG1faG91cjwxMj8iQU0iOiJQTSIsIiVTIjplPT5oKGUudG1fc2VjLDIpLCIldCI6KCk9PiJcdCIsIiV1IjplPT5lLnRtX3dkYXl8fDcsIiVVIjplPT57dmFyIHI9ZS50bV95ZGF5KzctZS50bV93ZGF5O3JldHVybiBoKE1hdGguZmxvb3Ioci83KSwyKX0sIiVWIjplPT57dmFyIHI9TWF0aC5mbG9vcigoZS50bV95ZGF5KzctKGUudG1fd2RheSs2KSU3KS83KTtpZigoZS50bV93ZGF5KzM3MS1lLnRtX3lkYXktMiklNzw9MiYmcisrLHIpe2lmKDUzPT1yKXt2YXIgdD0oZS50bV93ZGF5KzM3MS1lLnRtX3lkYXkpJTc7ND09dHx8Mz09dCYmcGUoZS50bV95ZWFyKXx8KHI9MSl9fWVsc2V7cj01Mjt2YXIgbj0oZS50bV93ZGF5KzctZS50bV95ZGF5LTEpJTc7KDQ9PW58fDU9PW4mJnBlKGUudG1feWVhciU0MDAtMSkpJiZyKyt9cmV0dXJuIGgociwyKX0sIiV3IjplPT5lLnRtX3dkYXksIiVXIjplPT57dmFyIHI9ZS50bV95ZGF5KzctKGUudG1fd2RheSs2KSU3O3JldHVybiBoKE1hdGguZmxvb3Ioci83KSwyKX0sIiV5IjplPT4oZS50bV95ZWFyKzE5MDApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLCIlWSI6ZT0+ZS50bV95ZWFyKzE5MDAsIiV6IjplPT57dmFyIHI9ZS50bV9nbXRvZmYsdD1yPj0wO3JldHVybiByPShyPU1hdGguYWJzKHIpLzYwKS82MCoxMDArciU2MCwodD8iKyI6Ii0iKStTdHJpbmcoIjAwMDAiK3IpLnNsaWNlKC00KX0sIiVaIjplPT5lLnRtX3pvbmUsIiUlIjooKT0+IiUifTtmb3IodmFyIHUgaW4gcz1zLnJlcGxhY2UoLyUlL2csIlwwXDAiKSx2KXMuaW5jbHVkZXModSkmJihzPXMucmVwbGFjZShuZXcgUmVnRXhwKHUsImciKSx2W3VdKGEpKSk7dmFyIHc9bmUocz1zLnJlcGxhY2UoL1wwXDAvZywiJSIpLCExKTtyZXR1cm4gdy5sZW5ndGg+cj8wOihBZSh3LGUpLHcubGVuZ3RoLTEpfX0sTGU9ZnVuY3Rpb24oKXt2YXIgZSxyLG8sYSxzPXthOlVlfTtmdW5jdGlvbiBpKGUscil7dmFyIHQ7cmV0dXJuIExlPWUuZXhwb3J0cyxnPUxlLkMsQygpLHQ9TGUuRCxULnVuc2hpZnQodCkseCgpLExlfWlmKEwoKSxuLmluc3RhbnRpYXRlV2FzbSl0cnl7cmV0dXJuIG4uaW5zdGFudGlhdGVXYXNtKHMsaSl9Y2F0Y2goZSl7eShgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtlfWApLHQoZSl9cmV0dXJuKGU9dyxyPU4sbz1zLGE9ZnVuY3Rpb24oZSl7aShlLmluc3RhbmNlKX0sZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHxIKHIpfHxZKHIpfHxofHwiZnVuY3Rpb24iIT10eXBlb2YgZmV0Y2g/SyhyLG8sYSk6ZmV0Y2gocix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oKGU9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGUsbykudGhlbihhLChmdW5jdGlvbihlKXtyZXR1cm4geShgd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICR7ZX1gKSx5KCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLEsocixvLGEpfSkpKSkpLmNhdGNoKHQpLHt9fSgpO24uX2dldF92ZXJzaW9uPSgpPT4obi5fZ2V0X3ZlcnNpb249TGUuRSkoKSxuLl9hcmNoaXZlX29wZW49KGUscix0LG8pPT4obi5fYXJjaGl2ZV9vcGVuPUxlLkYpKGUscix0LG8pLG4uX2FyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZT0oZSxyKT0+KG4uX2FyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZT1MZS5HKShlLHIpLG4uX2FyY2hpdmVfZXJyb3Jfc3RyaW5nPWU9PihuLl9hcmNoaXZlX2Vycm9yX3N0cmluZz1MZS5IKShlKSxuLl9nZXRfbmV4dF9lbnRyeT1lPT4obi5fZ2V0X25leHRfZW50cnk9TGUuSSkoZSksbi5fZ2V0X2ZpbGVkYXRhPShlLHIpPT4obi5fZ2V0X2ZpbGVkYXRhPUxlLkopKGUscik7dmFyIHhlPW4uX21hbGxvYz1lPT4oeGU9bi5fbWFsbG9jPUxlLkspKGUpO24uX2FyY2hpdmVfY2xvc2U9ZT0+KG4uX2FyY2hpdmVfY2xvc2U9TGUuTCkoZSksbi5fc3RhcnRfYXJjaGl2ZV93cml0ZT0oZSxyLHQsbyxhLHMpPT4obi5fc3RhcnRfYXJjaGl2ZV93cml0ZT1MZS5NKShlLHIsdCxvLGEscyksbi5fd3JpdGVfYXJjaGl2ZV9maWxlPShlLHIsdCxvKT0+KG4uX3dyaXRlX2FyY2hpdmVfZmlsZT1MZS5OKShlLHIsdCxvKSxuLl9zaXplX29mX3NpemVfdD0oKT0+KG4uX3NpemVfb2Zfc2l6ZV90PUxlLk8pKCksbi5fZmluaXNoX2FyY2hpdmVfd3JpdGU9KGUscik9PihuLl9maW5pc2hfYXJjaGl2ZV93cml0ZT1MZS5QKShlLHIpLG4uX2ZyZWU9ZT0+KG4uX2ZyZWU9TGUuUSkoZSk7dmFyIE9lPSgpPT4oT2U9TGUuUikoKTtuLl9hcmNoaXZlX2VudHJ5X2JpcnRodGltZV9uc2VjPWU9PihuLl9hcmNoaXZlX2VudHJ5X2JpcnRodGltZV9uc2VjPUxlLlMpKGUpLG4uX2FyY2hpdmVfZW50cnlfZmlsZXR5cGU9ZT0+KG4uX2FyY2hpdmVfZW50cnlfZmlsZXR5cGU9TGUuVCkoZSksbi5fYXJjaGl2ZV9lbnRyeV9tdGltZV9uc2VjPWU9PihuLl9hcmNoaXZlX2VudHJ5X210aW1lX25zZWM9TGUuVSkoZSksbi5fYXJjaGl2ZV9lbnRyeV9wYXRobmFtZT1lPT4obi5fYXJjaGl2ZV9lbnRyeV9wYXRobmFtZT1MZS5WKShlKSxuLl9hcmNoaXZlX2VudHJ5X3BhdGhuYW1lX3V0Zjg9ZT0+KG4uX2FyY2hpdmVfZW50cnlfcGF0aG5hbWVfdXRmOD1MZS5XKShlKSxuLl9hcmNoaXZlX2VudHJ5X3NpemU9ZT0+KG4uX2FyY2hpdmVfZW50cnlfc2l6ZT1MZS5YKShlKSxuLl9hcmNoaXZlX2VudHJ5X2lzX2VuY3J5cHRlZD1lPT4obi5fYXJjaGl2ZV9lbnRyeV9pc19lbmNyeXB0ZWQ9TGUuWSkoZSksbi5fYXJjaGl2ZV9yZWFkX2hhc19lbmNyeXB0ZWRfZW50cmllcz1lPT4obi5fYXJjaGl2ZV9yZWFkX2hhc19lbmNyeXB0ZWRfZW50cmllcz1MZS5aKShlKSxuLl9hcmNoaXZlX3JlYWRfZGF0YV9za2lwPWU9PihuLl9hcmNoaXZlX3JlYWRfZGF0YV9za2lwPUxlLl8pKGUpO3ZhciBOZSxCZT1lPT4oQmU9TGUuYWEpKGUpLGplPSgpPT4oamU9TGUuYmEpKCksSWU9ZT0+KEllPUxlLmNhKShlKSxIZT1lPT4oSGU9TGUuZGEpKGUpO2Z1bmN0aW9uIFllKCl7ZnVuY3Rpb24gZSgpe05lfHwoTmU9ITAsbi5jYWxsZWRSdW49ITAsTXx8KG4ubm9GU0luaXR8fGxlLmluaXQuaW5pdGlhbGl6ZWR8fGxlLmluaXQoKSxsZS5pZ25vcmVQZXJtaXNzaW9ucz0hMSxmZS5yb290PWxlLm1vdW50KGZlLHt9LG51bGwpLCQoVCkscihuKSxuLm9uUnVudGltZUluaXRpYWxpemVkJiZuLm9uUnVudGltZUluaXRpYWxpemVkKCksZnVuY3Rpb24oKXtpZihuLnBvc3RSdW4pZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBuLnBvc3RSdW4mJihuLnBvc3RSdW49W24ucG9zdFJ1bl0pO24ucG9zdFJ1bi5sZW5ndGg7KWU9bi5wb3N0UnVuLnNoaWZ0KCksUi51bnNoaWZ0KGUpO3ZhciBlOyQoUil9KCkpKX16PjB8fChmdW5jdGlvbigpe2lmKG4ucHJlUnVuKWZvcigiZnVuY3Rpb24iPT10eXBlb2Ygbi5wcmVSdW4mJihuLnByZVJ1bj1bbi5wcmVSdW5dKTtuLnByZVJ1bi5sZW5ndGg7KWU9bi5wcmVSdW4uc2hpZnQoKSxQLnVuc2hpZnQoZSk7dmFyIGU7JChQKX0oKSx6PjB8fChuLnNldFN0YXR1cz8obi5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5zZXRTdGF0dXMoIiIpfSksMSksZSgpfSksMSkpOmUoKSkpfWlmKG4uY3dyYXA9KGUscix0LG4pPT57dmFyIG89IXR8fHQuZXZlcnkoKGU9PiJudW1iZXIiPT09ZXx8ImJvb2xlYW4iPT09ZSkpO3JldHVybiJzdHJpbmciIT09ciYmbyYmIW4/Q2UoZSk6ZnVuY3Rpb24oKXtyZXR1cm4gUGUoZSxyLHQsYXJndW1lbnRzKX19LG4uYWxsb2NhdGU9KGUscik9Pnt2YXIgdDtyZXR1cm4gdD0xPT1yP0hlKGUubGVuZ3RoKTp4ZShlLmxlbmd0aCksZS5zdWJhcnJheXx8ZS5zbGljZXx8KGU9bmV3IFVpbnQ4QXJyYXkoZSkpLGsuc2V0KGUsdCksdH0sVT1mdW5jdGlvbiBlKCl7TmV8fFllKCksTmV8fChVPWUpfSxuLnByZUluaXQpZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBuLnByZUluaXQmJihuLnByZUluaXQ9W24ucHJlSW5pdF0pO24ucHJlSW5pdC5sZW5ndGg+MDspbi5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIFllKCksZS5yZWFkeX0pO2NsYXNzIFN7Y29uc3RydWN0b3IoKXt0aGlzLnByZVJ1bj1bXSx0aGlzLnBvc3RSdW49W10sdGhpcy50b3RhbERlcGVuZGVuY2llcz0wfXByaW50KC4uLmUpe2NvbnNvbGUubG9nKGUpfXByaW50RXJyKC4uLmUpe2NvbnNvbGUuZXJyb3IoZSl9aW5pdEZ1bmN0aW9ucygpe3RoaXMucnVuQ29kZT17Z2V0VmVyc2lvbjp0aGlzLmN3cmFwKCJnZXRfdmVyc2lvbiIsInN0cmluZyIsW10pLG9wZW5BcmNoaXZlOnRoaXMuY3dyYXAoImFyY2hpdmVfb3BlbiIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJzdHJpbmciLCJzdHJpbmciXSksZ2V0TmV4dEVudHJ5OnRoaXMuY3dyYXAoImdldF9uZXh0X2VudHJ5IiwibnVtYmVyIixbIm51bWJlciJdKSxnZXRGaWxlRGF0YTp0aGlzLmN3cmFwKCJnZXRfZmlsZWRhdGEiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0pLHNraXBFbnRyeTp0aGlzLmN3cmFwKCJhcmNoaXZlX3JlYWRfZGF0YV9za2lwIiwibnVtYmVyIixbIm51bWJlciJdKSxjbG9zZUFyY2hpdmU6dGhpcy5jd3JhcCgiYXJjaGl2ZV9jbG9zZSIsbnVsbCxbIm51bWJlciJdKSxnZXRFbnRyeVNpemU6dGhpcy5jd3JhcCgiYXJjaGl2ZV9lbnRyeV9zaXplIiwibnVtYmVyIixbIm51bWJlciJdKSxnZXRFbnRyeU5hbWU6dGhpcy5jd3JhcCgiYXJjaGl2ZV9lbnRyeV9wYXRobmFtZSIsInN0cmluZyIsWyJudW1iZXIiXSksZ2V0RW50cnlUeXBlOnRoaXMuY3dyYXAoImFyY2hpdmVfZW50cnlfZmlsZXR5cGUiLCJudW1iZXIiLFsibnVtYmVyIl0pLGdldEVudHJ5TGFzdE1vZGlmaWVkOnRoaXMuY3dyYXAoImFyY2hpdmVfZW50cnlfbXRpbWVfbnNlYyIsIm51bWJlciIsWyJudW1iZXIiXSksZ2V0RXJyb3I6dGhpcy5jd3JhcCgiYXJjaGl2ZV9lcnJvcl9zdHJpbmciLCJzdHJpbmciLFsibnVtYmVyIl0pLHN0YXJ0QXJjaGl2ZVdyaXRlOnRoaXMuY3dyYXAoInN0YXJ0X2FyY2hpdmVfd3JpdGUiLCJudW1iZXIiLFsic3RyaW5nIiwic3RyaW5nIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwic3RyaW5nIl0pLHdyaXRlQXJjaGl2ZUZpbGU6dGhpcy5jd3JhcCgid3JpdGVfYXJjaGl2ZV9maWxlIixudWxsLFsibnVtYmVyIiwic3RyaW5nIiwibnVtYmVyIiwibnVtYmVyIl0pLGZpbmlzaEFyY2hpdmVXcml0ZTp0aGlzLmN3cmFwKCJmaW5pc2hfYXJjaGl2ZV93cml0ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSksZW50cnlJc0VuY3J5cHRlZDp0aGlzLmN3cmFwKCJhcmNoaXZlX2VudHJ5X2lzX2VuY3J5cHRlZCIsIm51bWJlciIsWyJudW1iZXIiXSksaGFzRW5jcnlwdGVkRW50cmllczp0aGlzLmN3cmFwKCJhcmNoaXZlX3JlYWRfaGFzX2VuY3J5cHRlZF9lbnRyaWVzIiwibnVtYmVyIixbIm51bWJlciJdKSxhZGRQYXNzcGhyYXNlOnRoaXMuY3dyYXAoImFyY2hpdmVfcmVhZF9hZGRfcGFzc3BocmFzZSIsIm51bWJlciIsWyJudW1iZXIiLCJzdHJpbmciXSksc3RyaW5nOmU9PnRoaXMuYWxsb2NhdGUodGhpcy5pbnRBcnJheUZyb21TdHJpbmcoZSksImk4IiwwKSxtYWxsb2M6dGhpcy5jd3JhcCgibWFsbG9jIiwibnVtYmVyIixbIm51bWJlciJdKSxmcmVlOnRoaXMuY3dyYXAoImZyZWUiLG51bGwsWyJudW1iZXIiXSksc2l6ZU9mU2l6ZVQ6dGhpcy5jd3JhcCgic2l6ZV9vZl9zaXplX3QiLCJudW1iZXIiLFtdKX19bW9uaXRvclJ1bkRlcGVuZGVuY2llcygpe319bGV0IEY9bnVsbCxEPW51bGwsTT0hMTtjbGFzcyBBe2NvbnN0cnVjdG9yKGUpe0EucmVhZHlDYWxsYmFjaz1lLE0mJnNldFRpbWVvdXQoKCgpPT5lKCkpLDApfW9wZW4oZSxyKXtGLm9wZW4oZSkudGhlbigoKCk9PnIoKSkpfWxpc3RGaWxlcygpe2xldCBlPVtdO2Zvcihjb25zdCByIG9mIEYuZW50cmllcyghMCkpZS5wdXNoKHIpO3JldHVybiBlfWV4dHJhY3RGaWxlcygpe2xldCBlPVtdO2Zvcihjb25zdCByIG9mIEYuZW50cmllcyghMSkpZS5wdXNoKHIpO3JldHVybiBlfWV4dHJhY3RTaW5nbGVGaWxlKGUpe2Zvcihjb25zdCByIG9mIEYuZW50cmllcyghMCxlKSlpZihyLmZpbGVEYXRhKXJldHVybiByfWhhc0VuY3J5cHRlZERhdGEoKXtyZXR1cm4gRi5oYXNFbmNyeXB0ZWREYXRhKCl9dXNlUGFzc3dvcmQoZSl7Ri5zZXRQYXNzcGhyYXNlKGUpfXNldExvY2FsZShlKXtGLnNldExvY2FsZShlKX13cml0ZUFyY2hpdmUoZSxyLHQsbil7cmV0dXJuIEQud3JpdGUoZSxyLHQsbil9Y2xvc2UoKXtGLmNsb3NlKCl9fXZhciBDO0M9ZT0+e0Y9bmV3IHkoZSksRD1uZXcgRShlKSxBPy5yZWFkeUNhbGxiYWNrPy4oKSxNPSEwfSxrKG5ldyBTKS50aGVuKChlPT57ZS5pbml0RnVuY3Rpb25zKCksQyhlKX0pKSxpKEEpOwo=','35764425tdnbtO'];a=function(){return j;};return a();}const i=b;function b(c,d){c=c-0x147;const e=a();let f=e[c];return f;}(function(c,d){const h=b,e=c();while(!![]){try{const f=parseInt(h(0x148))/0x1*(parseInt(h(0x149))/0x2)+parseInt(h(0x150))/0x3+-parseInt(h(0x14a))/0x4+-parseInt(h(0x14d))/0x5+-parseInt(h(0x14c))/0x6*(parseInt(h(0x14b))/0x7)+-parseInt(h(0x147))/0x8+parseInt(h(0x14f))/0x9;if(f===d)break;else e['push'](e['shift']());}catch(g){e['push'](e['shift']());}}}(a,0xb1892));const Z=i(0x14e);export{Z as default};
@@ -1 +1 @@
1
- var k=b;(function(d,e){var j=b,f=d();while(!![]){try{var g=parseInt(j(0xbc))/0x1*(-parseInt(j(0xbb))/0x2)+-parseInt(j(0xbd))/0x3*(parseInt(j(0xc2))/0x4)+parseInt(j(0xc1))/0x5+parseInt(j(0xc7))/0x6*(parseInt(j(0xc5))/0x7)+parseInt(j(0xc0))/0x8*(-parseInt(j(0xbf))/0x9)+-parseInt(j(0xc4))/0xa+-parseInt(j(0xc6))/0xb*(-parseInt(j(0xbe))/0xc);if(g===e)break;else f['push'](f['shift']());}catch(h){f['push'](f['shift']());}}}(a,0x72d95));var s=Object[k(0xc8)],n=(d,f,g)=>f in d?s(d,f,{'enumerable':!0x0,'configurable':!0x0,'writable':!0x0,'value':g}):d[f]=g,l=(d,f,g)=>(n(d,typeof f!='symbol'?f+'':f,g),g);const u='/node_modules/@flyfish-group/file-viewer/dist/worker/';function b(c,d){c=c-0xbb;var e=a();var f=e[c];return f;}class i{constructor(d){var m=k;l(this,m(0xc3),null),this['worker']=d;}['defaults'](d){return this['worker']||d();}}function c(d,f=!0x1){var o=k;let g=null;const h=''+u+d;return g=new Worker(new URL(h,import.meta.url),{'type':f?'module':o(0xc9)}),new i(g);}function a(){var p=['2808585wKhXtX','32hrEpCV','worker','226720zyxfch','178619aDcLjc','3570347Uacabf','18XSsAlB','defineProperty','classic','4978nleDBQ','161HqMDSc','71835AxxKds','24VduzGw','227295nWGekw','64yevdvJ'];a=function(){return p;};return a();}export{c as r};
1
+ (function(c,d){var h=b,e=c();while(!![]){try{var f=-parseInt(h(0xe9))/0x1*(parseInt(h(0xef))/0x2)+parseInt(h(0xe8))/0x3+-parseInt(h(0xeb))/0x4+-parseInt(h(0xec))/0x5*(parseInt(h(0xe7))/0x6)+parseInt(h(0xed))/0x7*(-parseInt(h(0xf1))/0x8)+-parseInt(h(0xee))/0x9+parseInt(h(0xea))/0xa*(parseInt(h(0xf0))/0xb);if(f===d)break;else e['push'](e['shift']());}catch(g){e['push'](e['shift']());}}}(a,0xeb85d));class o{['worker']=null;constructor(c){this['worker']=c;}['defaults'](c){return this['worker']||c();}}function b(c,d){c=c-0xe7;var e=a();var f=e[c];return f;}function a(){var i=['1011485vFiClw','112UxLOBN','16686324EyocgL','10bcFRcb','113157okqGiD','123592RBEOFk','6KMvzVA','3782223tykxuP','281287ZvqLIb','3860gVyzvi','2227480gfkPtK'];a=function(){return i;};return a();}function l(c,d=!0x1){return new o(null);}export{l as r};
@@ -0,0 +1 @@
1
+ const bu=c;(function(z,B){const aT=c,C=z();while(!![]){try{const D=-parseInt(aT(0x11e))/0x1*(parseInt(aT(0xf7))/0x2)+-parseInt(aT(0xf2))/0x3+parseInt(aT(0x158))/0x4*(-parseInt(aT(0xba))/0x5)+parseInt(aT(0xd4))/0x6+-parseInt(aT(0x114))/0x7+parseInt(aT(0xce))/0x8*(parseInt(aT(0x116))/0x9)+parseInt(aT(0x134))/0xa*(parseInt(aT(0xcd))/0xb);if(D===B)break;else C['push'](C['shift']());}catch(E){C['push'](C['shift']());}}}(b,0x869c3));import{_ as d,a3 as e,l as f,N as g,H as h,G as i,F as j,i as k,o as l,s as m,g as n,n as o,b as p,c as r,v as s,L as t,j as u}from'./index21.js';import{l as v}from'./transform.js';import{i as w}from'./init.js';import{o as x}from'./ordinal.js';import{l as y}from'./linear.js';import'./_commonjsHelpers.js';import'./rough.esm.js';import'./defaultLocale.js';function Ri(z,B,C){const aU=c;z=+z,B=+B,C=(E=arguments[aU(0xe4)])<0x2?(B=z,z=0x0,0x1):E<0x3?0x1:+C;for(var D=-0x1,E=Math['max'](0x0,Math['ceil']((B-z)/C))|0x0,F=new Array(E);++D<E;)F[D]=z+D*C;return F;}function bt(){const aV=c;var z=x()[aV(0x128)](void 0x0),B=z[aV(0xf3)],C=z['range'],D=0x0,E=0x1,F,G,H=!0x1,I=0x0,M=0x0,N=0.5;delete z[aV(0x128)];function O(){const aW=aV;var Q=B()['length'],R=E<D,S=R?E:D,U=R?D:E;F=(U-S)/Math['max'](0x1,Q-I+M*0x2),H&&(F=Math['floor'](F)),S+=(U-S-F*(Q-I))*N,G=F*(0x1-I),H&&(S=Math[aW(0x130)](S),G=Math[aW(0x130)](G));var V=Ri(Q)['map'](function(W){return S+F*W;});return C(R?V['reverse']():V);}return z['domain']=function(P){return arguments['length']?(B(P),O()):B();},z[aV(0xcf)]=function(P){const aX=aV;return arguments[aX(0xe4)]?([D,E]=P,D=+D,E=+E,O()):[D,E];},z['rangeRound']=function(P){return[D,E]=P,D=+D,E=+E,H=!0x0,O();},z['bandwidth']=function(){return G;},z[aV(0xde)]=function(){return F;},z['round']=function(P){const aY=aV;return arguments[aY(0xe4)]?(H=!!P,O()):H;},z['padding']=function(P){return arguments['length']?(I=Math['min'](0x1,M=+P),O()):I;},z['paddingInner']=function(P){return arguments['length']?(I=Math['min'](0x1,P),O()):I;},z['paddingOuter']=function(P){const aZ=aV;return arguments[aZ(0xe4)]?(M=+P,O()):M;},z[aV(0xd8)]=function(P){return arguments['length']?(N=Math['max'](0x0,Math['min'](0x1,P)),O()):N;},z['copy']=function(){const b0=aV;return bt(B(),[D,E])[b0(0x130)](H)['paddingInner'](I)['paddingOuter'](M)[b0(0xd8)](N);},w['apply'](O(),arguments);}var At=(function(){const b1=c;var z=d(function(an,ao,ap,aq){for(ap=ap||{},aq=an['length'];aq--;ap[an[aq]]=ao);return ap;},'o'),B=[0x1,0xa,0xc,0xe,0x10,0x12,0x13,0x15,0x17],C=[0x2,0x6],D=[0x1,0x3],F=[0x1,0x5],G=[0x1,0x6],I=[0x1,0x7],N=[0x1,0x5,0xa,0xc,0xe,0x10,0x12,0x13,0x15,0x17,0x22,0x23,0x24],Q=[0x1,0x19],a0=[0x1,0x1a],a1=[0x1,0x1c],a2=[0x1,0x1d],a3=[0x1,0x1e],a4=[0x1,0x1f],a5=[0x1,0x20],a6=[0x1,0x21],a7=[0x1,0x22],a8=[0x1,0x23],a9=[0x1,0x24],aa=[0x1,0x25],ab=[0x1,0x2b],ac=[0x1,0x2a],ad=[0x1,0x2f],ae=[0x1,0x32],af=[0x1,0xa,0xc,0xe,0x10,0x12,0x13,0x15,0x17,0x22,0x23,0x24],ag=[0x1,0xa,0xc,0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1b,0x1c,0x22,0x23,0x24],ah=[0x1,0xa,0xc,0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1b,0x1c,0x22,0x23,0x24,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32],aj=[0x1,0x40],ak={'trace':d(function(){},'trace'),'yy':{},'symbols_':{'error':0x2,'start':0x3,'eol':0x4,'XYCHART':0x5,'chartConfig':0x6,'document':0x7,'CHART_ORIENTATION':0x8,'statement':0x9,'title':0xa,'text':0xb,'X_AXIS':0xc,'parseXAxis':0xd,'Y_AXIS':0xe,'parseYAxis':0xf,'LINE':0x10,'plotData':0x11,'BAR':0x12,'acc_title':0x13,'acc_title_value':0x14,'acc_descr':0x15,'acc_descr_value':0x16,'acc_descr_multiline_value':0x17,'SQUARE_BRACES_START':0x18,'commaSeparatedNumbers':0x19,'SQUARE_BRACES_END':0x1a,'NUMBER_WITH_DECIMAL':0x1b,'COMMA':0x1c,'xAxisData':0x1d,'bandData':0x1e,'ARROW_DELIMITER':0x1f,'commaSeparatedTexts':0x20,'yAxisData':0x21,'NEWLINE':0x22,'SEMI':0x23,'EOF':0x24,'alphaNum':0x25,'STR':0x26,'MD_STR':0x27,'alphaNumToken':0x28,'AMP':0x29,'NUM':0x2a,'ALPHA':0x2b,'PLUS':0x2c,'EQUALS':0x2d,'MULT':0x2e,'DOT':0x2f,'BRKT':0x30,'MINUS':0x31,'UNDERSCORE':0x32,'$accept':0x0,'$end':0x1},'terminals_':{0x2:b1(0x150),0x5:b1(0x138),0x8:b1(0x133),0xa:'title',0xc:'X_AXIS',0xe:'Y_AXIS',0x10:'LINE',0x12:'BAR',0x13:'acc_title',0x14:'acc_title_value',0x15:'acc_descr',0x16:'acc_descr_value',0x17:b1(0xd0),0x18:b1(0x14b),0x1a:'SQUARE_BRACES_END',0x1b:b1(0xe1),0x1c:'COMMA',0x1f:'ARROW_DELIMITER',0x22:'NEWLINE',0x23:'SEMI',0x24:'EOF',0x26:b1(0xf4),0x27:b1(0xf6),0x29:b1(0xbc),0x2a:'NUM',0x2b:'ALPHA',0x2c:'PLUS',0x2d:'EQUALS',0x2e:'MULT',0x2f:'DOT',0x30:'BRKT',0x31:'MINUS',0x32:'UNDERSCORE'},'productions_':[0x0,[0x3,0x2],[0x3,0x3],[0x3,0x2],[0x3,0x1],[0x6,0x1],[0x7,0x0],[0x7,0x2],[0x9,0x2],[0x9,0x2],[0x9,0x2],[0x9,0x2],[0x9,0x2],[0x9,0x3],[0x9,0x2],[0x9,0x3],[0x9,0x2],[0x9,0x2],[0x9,0x1],[0x11,0x3],[0x19,0x3],[0x19,0x1],[0xd,0x1],[0xd,0x2],[0xd,0x1],[0x1d,0x1],[0x1d,0x3],[0x1e,0x3],[0x20,0x3],[0x20,0x1],[0xf,0x1],[0xf,0x2],[0xf,0x1],[0x21,0x3],[0x4,0x1],[0x4,0x1],[0x4,0x1],[0xb,0x1],[0xb,0x1],[0xb,0x1],[0x25,0x1],[0x25,0x2],[0x28,0x1],[0x28,0x1],[0x28,0x1],[0x28,0x1],[0x28,0x1],[0x28,0x1],[0x28,0x1],[0x28,0x1],[0x28,0x1],[0x28,0x1]],'performAction':d(function(an,ao,ap,aq,ar,as,au){const b2=b1;var av=as['length']-0x1;switch(ar){case 0x5:aq['setOrientation'](as[av]);break;case 0x9:aq[b2(0x11c)](as[av][b2(0x108)]['trim']());break;case 0xc:aq['setLineData']({'text':'','type':'text'},as[av]);break;case 0xd:aq['setLineData'](as[av-0x1],as[av]);break;case 0xe:aq['setBarData']({'text':'','type':b2(0x108)},as[av]);break;case 0xf:aq['setBarData'](as[av-0x1],as[av]);break;case 0x10:this['$']=as[av]['trim'](),aq[b2(0x132)](this['$']);break;case 0x11:case 0x12:this['$']=as[av]['trim'](),aq['setAccDescription'](this['$']);break;case 0x13:this['$']=as[av-0x1];break;case 0x14:this['$']=[Number(as[av-0x2]),...as[av]];break;case 0x15:this['$']=[Number(as[av])];break;case 0x16:aq['setXAxisTitle'](as[av]);break;case 0x17:aq['setXAxisTitle'](as[av-0x1]);break;case 0x18:aq[b2(0x149)]({'type':'text','text':''});break;case 0x19:aq[b2(0x148)](as[av]);break;case 0x1a:aq[b2(0xbe)](Number(as[av-0x2]),Number(as[av]));break;case 0x1b:this['$']=as[av-0x1];break;case 0x1c:this['$']=[as[av-0x2],...as[av]];break;case 0x1d:this['$']=[as[av]];break;case 0x1e:aq['setYAxisTitle'](as[av]);break;case 0x1f:aq[b2(0xea)](as[av-0x1]);break;case 0x20:aq['setYAxisTitle']({'type':b2(0x108),'text':''});break;case 0x21:aq['setYAxisRangeData'](Number(as[av-0x2]),Number(as[av]));break;case 0x25:this['$']={'text':as[av],'type':'text'};break;case 0x26:this['$']={'text':as[av],'type':'text'};break;case 0x27:this['$']={'text':as[av],'type':'markdown'};break;case 0x28:this['$']=as[av];break;case 0x29:this['$']=as[av-0x1]+''+as[av];break;}},'anonymous'),'table':[z(B,C,{0x3:0x1,0x4:0x2,0x7:0x4,0x5:D,0x22:F,0x23:G,0x24:I}),{0x1:[0x3]},z(B,C,{0x4:0x2,0x7:0x4,0x3:0x8,0x5:D,0x22:F,0x23:G,0x24:I}),z(B,C,{0x4:0x2,0x7:0x4,0x6:0x9,0x3:0xa,0x5:D,0x8:[0x1,0xb],0x22:F,0x23:G,0x24:I}),{0x1:[0x2,0x4],0x9:0xc,0xa:[0x1,0xd],0xc:[0x1,0xe],0xe:[0x1,0xf],0x10:[0x1,0x10],0x12:[0x1,0x11],0x13:[0x1,0x12],0x15:[0x1,0x13],0x17:[0x1,0x14]},z(N,[0x2,0x22]),z(N,[0x2,0x23]),z(N,[0x2,0x24]),{0x1:[0x2,0x1]},z(B,C,{0x4:0x2,0x7:0x4,0x3:0x15,0x5:D,0x22:F,0x23:G,0x24:I}),{0x1:[0x2,0x3]},z(N,[0x2,0x5]),z(B,[0x2,0x7],{0x4:0x16,0x22:F,0x23:G,0x24:I}),{0xb:0x17,0x25:0x18,0x26:Q,0x27:a0,0x28:0x1b,0x29:a1,0x2a:a2,0x2b:a3,0x2c:a4,0x2d:a5,0x2e:a6,0x2f:a7,0x30:a8,0x31:a9,0x32:aa},{0xb:0x27,0xd:0x26,0x18:ab,0x1b:ac,0x1d:0x28,0x1e:0x29,0x25:0x18,0x26:Q,0x27:a0,0x28:0x1b,0x29:a1,0x2a:a2,0x2b:a3,0x2c:a4,0x2d:a5,0x2e:a6,0x2f:a7,0x30:a8,0x31:a9,0x32:aa},{0xb:0x2d,0xf:0x2c,0x1b:ad,0x21:0x2e,0x25:0x18,0x26:Q,0x27:a0,0x28:0x1b,0x29:a1,0x2a:a2,0x2b:a3,0x2c:a4,0x2d:a5,0x2e:a6,0x2f:a7,0x30:a8,0x31:a9,0x32:aa},{0xb:0x31,0x11:0x30,0x18:ae,0x25:0x18,0x26:Q,0x27:a0,0x28:0x1b,0x29:a1,0x2a:a2,0x2b:a3,0x2c:a4,0x2d:a5,0x2e:a6,0x2f:a7,0x30:a8,0x31:a9,0x32:aa},{0xb:0x34,0x11:0x33,0x18:ae,0x25:0x18,0x26:Q,0x27:a0,0x28:0x1b,0x29:a1,0x2a:a2,0x2b:a3,0x2c:a4,0x2d:a5,0x2e:a6,0x2f:a7,0x30:a8,0x31:a9,0x32:aa},{0x14:[0x1,0x35]},{0x16:[0x1,0x36]},z(af,[0x2,0x12]),{0x1:[0x2,0x2]},z(af,[0x2,0x8]),z(af,[0x2,0x9]),z(ag,[0x2,0x25],{0x28:0x37,0x29:a1,0x2a:a2,0x2b:a3,0x2c:a4,0x2d:a5,0x2e:a6,0x2f:a7,0x30:a8,0x31:a9,0x32:aa}),z(ag,[0x2,0x26]),z(ag,[0x2,0x27]),z(ah,[0x2,0x28]),z(ah,[0x2,0x2a]),z(ah,[0x2,0x2b]),z(ah,[0x2,0x2c]),z(ah,[0x2,0x2d]),z(ah,[0x2,0x2e]),z(ah,[0x2,0x2f]),z(ah,[0x2,0x30]),z(ah,[0x2,0x31]),z(ah,[0x2,0x32]),z(ah,[0x2,0x33]),z(af,[0x2,0xa]),z(af,[0x2,0x16],{0x1e:0x29,0x1d:0x38,0x18:ab,0x1b:ac}),z(af,[0x2,0x18]),z(af,[0x2,0x19]),{0x1f:[0x1,0x39]},{0xb:0x3b,0x20:0x3a,0x25:0x18,0x26:Q,0x27:a0,0x28:0x1b,0x29:a1,0x2a:a2,0x2b:a3,0x2c:a4,0x2d:a5,0x2e:a6,0x2f:a7,0x30:a8,0x31:a9,0x32:aa},z(af,[0x2,0xb]),z(af,[0x2,0x1e],{0x21:0x3c,0x1b:ad}),z(af,[0x2,0x20]),{0x1f:[0x1,0x3d]},z(af,[0x2,0xc]),{0x11:0x3e,0x18:ae},{0x19:0x3f,0x1b:aj},z(af,[0x2,0xe]),{0x11:0x41,0x18:ae},z(af,[0x2,0x10]),z(af,[0x2,0x11]),z(ah,[0x2,0x29]),z(af,[0x2,0x17]),{0x1b:[0x1,0x42]},{0x1a:[0x1,0x43]},{0x1a:[0x2,0x1d],0x1c:[0x1,0x44]},z(af,[0x2,0x1f]),{0x1b:[0x1,0x45]},z(af,[0x2,0xd]),{0x1a:[0x1,0x46]},{0x1a:[0x2,0x15],0x1c:[0x1,0x47]},z(af,[0x2,0xf]),z(af,[0x2,0x1a]),z(af,[0x2,0x1b]),{0xb:0x3b,0x20:0x48,0x25:0x18,0x26:Q,0x27:a0,0x28:0x1b,0x29:a1,0x2a:a2,0x2b:a3,0x2c:a4,0x2d:a5,0x2e:a6,0x2f:a7,0x30:a8,0x31:a9,0x32:aa},z(af,[0x2,0x21]),z(af,[0x2,0x13]),{0x19:0x49,0x1b:aj},{0x1a:[0x2,0x1c]},{0x1a:[0x2,0x14]}],'defaultActions':{0x8:[0x2,0x1],0xa:[0x2,0x3],0x15:[0x2,0x2],0x48:[0x2,0x1c],0x49:[0x2,0x14]},'parseError':d(function(an,ao){if(ao['recoverable'])this['trace'](an);else{var ap=new Error(an);throw ap['hash']=ao,ap;}},'parseError'),'parse':d(function(an){const b3=b1;var ao=this,ap=[0x0],aq=[],ar=[null],as=[],au=this[b3(0x101)],av='',aw=0x0,ax=0x0,ay=0x2,az=0x1,aA=as['slice']['call'](arguments,0x1),aB=Object['create'](this['lexer']),aC={'yy':{}};for(var aD in this['yy'])Object['prototype'][b3(0x126)]['call'](this['yy'],aD)&&(aC['yy'][aD]=this['yy'][aD]);aB[b3(0x14f)](an,aC['yy']),aC['yy']['lexer']=aB,aC['yy'][b3(0xb9)]=this,typeof aB['yylloc']>'u'&&(aB[b3(0x155)]={});var aE=aB['yylloc'];as['push'](aE);var aF=aB['options']&&aB['options']['ranges'];typeof aC['yy']['parseError']=='function'?this['parseError']=aC['yy'][b3(0x143)]:this[b3(0x143)]=Object['getPrototypeOf'](this)['parseError'];function aG(aS){ap['length']=ap['length']-0x2*aS,ar['length']=ar['length']-aS,as['length']=as['length']-aS;}d(aG,'popStack');function aH(){const b4=b3;var aS;return aS=aq['pop']()||aB['lex']()||az,typeof aS!='number'&&(aS instanceof Array&&(aq=aS,aS=aq['pop']()),aS=ao[b4(0x112)][aS]||aS),aS;}d(aH,'lex');for(var aI,aJ,aK,aL,aM={},aN,aO,aP,aQ;;){if(aJ=ap[ap['length']-0x1],this['defaultActions'][aJ]?aK=this[b3(0x15e)][aJ]:((aI===null||typeof aI>'u')&&(aI=aH()),aK=au[aJ]&&au[aJ][aI]),typeof aK>'u'||!aK['length']||!aK[0x0]){var aR='';aQ=[];for(aN in au[aJ])this['terminals_'][aN]&&aN>ay&&aQ['push']('\x27'+this['terminals_'][aN]+'\x27');aB['showPosition']?aR='Parse\x20error\x20on\x20line\x20'+(aw+0x1)+':\x0a'+aB[b3(0xda)]()+'\x0aExpecting\x20'+aQ['join'](',\x20')+',\x20got\x20\x27'+(this[b3(0x13a)][aI]||aI)+'\x27':aR='Parse\x20error\x20on\x20line\x20'+(aw+0x1)+':\x20Unexpected\x20'+(aI==az?'end\x20of\x20input':'\x27'+(this['terminals_'][aI]||aI)+'\x27'),this['parseError'](aR,{'text':aB[b3(0xe5)],'token':this['terminals_'][aI]||aI,'line':aB['yylineno'],'loc':aE,'expected':aQ});}if(aK[0x0]instanceof Array&&aK['length']>0x1)throw new Error(b3(0x11b)+aJ+',\x20token:\x20'+aI);switch(aK[0x0]){case 0x1:ap['push'](aI),ar['push'](aB[b3(0x124)]),as['push'](aB['yylloc']),ap['push'](aK[0x1]),aI=null,ax=aB['yyleng'],av=aB['yytext'],aw=aB['yylineno'],aE=aB['yylloc'];break;case 0x2:if(aO=this['productions_'][aK[0x1]][0x1],aM['$']=ar[ar[b3(0xe4)]-aO],aM['_$']={'first_line':as[as['length']-(aO||0x1)]['first_line'],'last_line':as[as['length']-0x1]['last_line'],'first_column':as[as['length']-(aO||0x1)][b3(0x142)],'last_column':as[as['length']-0x1]['last_column']},aF&&(aM['_$']['range']=[as[as['length']-(aO||0x1)][b3(0xcf)][0x0],as[as[b3(0xe4)]-0x1]['range'][0x1]]),aL=this['performAction']['apply'](aM,[av,ax,aw,aC['yy'],aK[0x1],ar,as]['concat'](aA)),typeof aL<'u')return aL;aO&&(ap=ap['slice'](0x0,-0x1*aO*0x2),ar=ar['slice'](0x0,-0x1*aO),as=as['slice'](0x0,-0x1*aO)),ap[b3(0x147)](this['productions_'][aK[0x1]][0x0]),ar['push'](aM['$']),as['push'](aM['_$']),aP=au[ap[ap['length']-0x2]][ap[ap['length']-0x1]],ap['push'](aP);break;case 0x3:return!0x0;}}return!0x0;},'parse')},al=(function(){const b7=b1;var an={'EOF':0x1,'parseError':d(function(ao,ap){if(this['yy']['parser'])this['yy']['parser']['parseError'](ao,ap);else throw new Error(ao);},'parseError'),'setInput':d(function(ao,ap){const b5=c;return this['yy']=ap||this['yy']||{},this['_input']=ao,this['_more']=this[b5(0xcb)]=this[b5(0x12b)]=!0x1,this['yylineno']=this['yyleng']=0x0,this[b5(0x124)]=this[b5(0x136)]=this['match']='',this[b5(0x14c)]=['INITIAL'],this[b5(0x155)]={'first_line':0x1,'first_column':0x0,'last_line':0x1,'last_column':0x0},this[b5(0xec)]['ranges']&&(this['yylloc'][b5(0xcf)]=[0x0,0x0]),this['offset']=0x0,this;},'setInput'),'input':d(function(){const b6=c;var ao=this['_input'][0x0];this['yytext']+=ao,this['yyleng']++,this['offset']++,this['match']+=ao,this['matched']+=ao;var ap=ao['match'](/(?:\r\n?|\n).*/g);return ap?(this['yylineno']++,this['yylloc']['last_line']++):this[b6(0x155)]['last_column']++,this['options']['ranges']&&this['yylloc'][b6(0xcf)][0x1]++,this[b6(0x10f)]=this['_input']['slice'](0x1),ao;},b7(0xc0)),'unput':d(function(ao){const b8=b7;var ap=ao['length'],aq=ao['split'](/(?:\r\n?|\n)/g);this['_input']=ao+this['_input'],this[b8(0x124)]=this['yytext'][b8(0xfc)](0x0,this['yytext'][b8(0xe4)]-ap),this['offset']-=ap;var ar=this['match']['split'](/(?:\r\n?|\n)/g);this['match']=this['match']['substr'](0x0,this[b8(0xe5)]['length']-0x1),this['matched']=this[b8(0x136)]['substr'](0x0,this['matched']['length']-0x1),aq['length']-0x1&&(this['yylineno']-=aq['length']-0x1);var as=this['yylloc']['range'];return this['yylloc']={'first_line':this['yylloc'][b8(0x14a)],'last_line':this[b8(0x15c)]+0x1,'first_column':this['yylloc'][b8(0x142)],'last_column':aq?(aq[b8(0xe4)]===ar['length']?this['yylloc']['first_column']:0x0)+ar[ar['length']-aq['length']][b8(0xe4)]-aq[0x0]['length']:this['yylloc']['first_column']-ap},this['options'][b8(0xff)]&&(this['yylloc']['range']=[as[0x0],as[0x0]+this['yyleng']-ap]),this['yyleng']=this['yytext']['length'],this;},'unput'),'more':d(function(){const b9=b7;return this[b9(0x168)]=!0x0,this;},'more'),'reject':d(function(){const ba=b7;if(this['options']['backtrack_lexer'])this['_backtrack']=!0x0;else return this['parseError']('Lexical\x20error\x20on\x20line\x20'+(this['yylineno']+0x1)+ba(0x16a)+this['showPosition'](),{'text':'','token':null,'line':this['yylineno']});return this;},'reject'),'less':d(function(ao){const bb=b7;this[bb(0x12f)](this['match']['slice'](ao));},'less'),'pastInput':d(function(){const bc=b7;var ao=this['matched']['substr'](0x0,this['matched'][bc(0xe4)]-this['match'][bc(0xe4)]);return(ao['length']>0x14?bc(0x11a):'')+ao['substr'](-0x14)['replace'](/\n/g,'');},'pastInput'),'upcomingInput':d(function(){const bd=b7;var ao=this['match'];return ao['length']<0x14&&(ao+=this['_input']['substr'](0x0,0x14-ao['length'])),(ao['substr'](0x0,0x14)+(ao['length']>0x14?bd(0x11a):''))['replace'](/\n/g,'');},'upcomingInput'),'showPosition':d(function(){const be=b7;var ao=this['pastInput'](),ap=new Array(ao[be(0xe4)]+0x1)[be(0x16f)]('-');return ao+this['upcomingInput']()+'\x0a'+ap+'^';},'showPosition'),'test_match':d(function(ao,ap){const bf=b7;var aq,ar,as;if(this[bf(0xec)][bf(0x135)]&&(as={'yylineno':this['yylineno'],'yylloc':{'first_line':this['yylloc']['first_line'],'last_line':this['last_line'],'first_column':this['yylloc']['first_column'],'last_column':this[bf(0x155)][bf(0xf5)]},'yytext':this['yytext'],'match':this['match'],'matches':this['matches'],'matched':this['matched'],'yyleng':this['yyleng'],'offset':this['offset'],'_more':this['_more'],'_input':this['_input'],'yy':this['yy'],'conditionStack':this['conditionStack']['slice'](0x0),'done':this['done']},this['options']['ranges']&&(as['yylloc']['range']=this['yylloc']['range']['slice'](0x0))),ar=ao[0x0]['match'](/(?:\r\n?|\n).*/g),ar&&(this['yylineno']+=ar['length']),this['yylloc']={'first_line':this[bf(0x155)][bf(0x137)],'last_line':this['yylineno']+0x1,'first_column':this['yylloc']['last_column'],'last_column':ar?ar[ar['length']-0x1]['length']-ar[ar['length']-0x1]['match'](/\r?\n?/)[0x0]['length']:this['yylloc']['last_column']+ao[0x0]['length']},this['yytext']+=ao[0x0],this['match']+=ao[0x0],this['matches']=ao,this['yyleng']=this['yytext']['length'],this['options']['ranges']&&(this['yylloc'][bf(0xcf)]=[this['offset'],this['offset']+=this['yyleng']]),this[bf(0x168)]=!0x1,this['_backtrack']=!0x1,this['_input']=this['_input']['slice'](ao[0x0]['length']),this['matched']+=ao[0x0],aq=this['performAction'][bf(0x109)](this,this['yy'],this,ap,this['conditionStack'][this['conditionStack']['length']-0x1]),this['done']&&this['_input']&&(this[bf(0x12b)]=!0x1),aq)return aq;if(this['_backtrack']){for(var au in as)this[au]=as[au];return!0x1;}return!0x1;},'test_match'),'next':d(function(){const bg=b7;if(this[bg(0x12b)])return this['EOF'];this['_input']||(this['done']=!0x0);var ao,ap,aq,ar;this[bg(0x168)]||(this['yytext']='',this['match']='');for(var as=this['_currentRules'](),au=0x0;au<as['length'];au++)if(aq=this['_input']['match'](this['rules'][as[au]]),aq&&(!ap||aq[0x0]['length']>ap[0x0][bg(0xe4)])){if(ap=aq,ar=au,this[bg(0xec)]['backtrack_lexer']){if(ao=this['test_match'](aq,as[au]),ao!==!0x1)return ao;if(this[bg(0xcb)]){ap=!0x1;continue;}else return!0x1;}else{if(!this['options'][bg(0x113)])break;}}return ap?(ao=this['test_match'](ap,as[ar]),ao!==!0x1?ao:!0x1):this[bg(0x10f)]===''?this[bg(0x11f)]:this['parseError']('Lexical\x20error\x20on\x20line\x20'+(this['yylineno']+0x1)+bg(0xdf)+this[bg(0xda)](),{'text':'','token':null,'line':this['yylineno']});},b7(0xca)),'lex':d(function(){var ao=this['next']();return ao||this['lex']();},'lex'),'begin':d(function(ao){const bh=b7;this[bh(0x14c)]['push'](ao);},'begin'),'popState':d(function(){var ao=this['conditionStack']['length']-0x1;return ao>0x0?this['conditionStack']['pop']():this['conditionStack'][0x0];},'popState'),'_currentRules':d(function(){const bj=b7;return this['conditionStack'][bj(0xe4)]&&this['conditionStack'][this['conditionStack']['length']-0x1]?this[bj(0x12e)][this['conditionStack'][this['conditionStack']['length']-0x1]][bj(0x10e)]:this['conditions'][bj(0x122)][bj(0x10e)];},'_currentRules'),'topState':d(function(ao){return ao=this['conditionStack']['length']-0x1-Math['abs'](ao||0x0),ao>=0x0?this['conditionStack'][ao]:'INITIAL';},'topState'),'pushState':d(function(ao){this['begin'](ao);},'pushState'),'stateStackSize':d(function(){return this['conditionStack']['length'];},b7(0xfb)),'options':{'case-insensitive':!0x0},'performAction':d(function(ao,ap,aq,ar){const bk=b7;switch(aq){case 0x0:break;case 0x1:break;case 0x2:return this['popState'](),0x22;case 0x3:return this[bk(0xe3)](),0x22;case 0x4:return 0x22;case 0x5:break;case 0x6:return 0xa;case 0x7:return this[bk(0x131)]('acc_title'),0x13;case 0x8:return this['popState'](),'acc_title_value';case 0x9:return this['pushState']('acc_descr'),0x15;case 0xa:return this['popState'](),bk(0xeb);case 0xb:this['pushState']('acc_descr_multiline');break;case 0xc:this['popState']();break;case 0xd:return'acc_descr_multiline_value';case 0xe:return 0x5;case 0xf:return 0x5;case 0x10:return 0x8;case 0x11:return this['pushState'](bk(0x152)),'X_AXIS';case 0x12:return this['pushState']('axis_data'),bk(0x107);case 0x13:return this['pushState']('axis_band_data'),0x18;case 0x14:return 0x1f;case 0x15:return this[bk(0x131)]('data'),0x10;case 0x16:return this['pushState'](bk(0xd6)),0x12;case 0x17:return this[bk(0x131)]('data_inner'),0x18;case 0x18:return 0x1b;case 0x19:return this[bk(0xe3)](),0x1a;case 0x1a:this[bk(0xe3)]();break;case 0x1b:this['pushState']('string');break;case 0x1c:this['popState']();break;case 0x1d:return'STR';case 0x1e:return 0x18;case 0x1f:return 0x1a;case 0x20:return 0x2b;case 0x21:return'COLON';case 0x22:return 0x2c;case 0x23:return 0x1c;case 0x24:return 0x2d;case 0x25:return 0x2e;case 0x26:return 0x30;case 0x27:return 0x32;case 0x28:return 0x2f;case 0x29:return 0x29;case 0x2a:return 0x31;case 0x2b:return 0x2a;case 0x2c:break;case 0x2d:return 0x23;case 0x2e:return 0x24;}},'anonymous'),'rules':[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\})/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:xychart\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n<md_string>\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n<md_string>\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],'conditions':{'data_inner':{'rules':[0x0,0x1,0x4,0x5,0x6,0x7,0x9,0xb,0xe,0xf,0x10,0x11,0x12,0x15,0x16,0x18,0x19,0x1a,0x1b,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e],'inclusive':!0x0},'data':{'rules':[0x0,0x1,0x3,0x4,0x5,0x6,0x7,0x9,0xb,0xe,0xf,0x10,0x11,0x12,0x15,0x16,0x17,0x1a,0x1b,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e],'inclusive':!0x0},'axis_band_data':{'rules':[0x0,0x1,0x4,0x5,0x6,0x7,0x9,0xb,0xe,0xf,0x10,0x11,0x12,0x15,0x16,0x19,0x1a,0x1b,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e],'inclusive':!0x0},'axis_data':{'rules':[0x0,0x1,0x2,0x4,0x5,0x6,0x7,0x9,0xb,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x18,0x1a,0x1b,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e],'inclusive':!0x0},'acc_descr_multiline':{'rules':[0xc,0xd],'inclusive':!0x1},'acc_descr':{'rules':[0xa],'inclusive':!0x1},'acc_title':{'rules':[0x8],'inclusive':!0x1},'title':{'rules':[],'inclusive':!0x1},'md_string':{'rules':[],'inclusive':!0x1},'string':{'rules':[0x1c,0x1d],'inclusive':!0x1},'INITIAL':{'rules':[0x0,0x1,0x4,0x5,0x6,0x7,0x9,0xb,0xe,0xf,0x10,0x11,0x12,0x15,0x16,0x1a,0x1b,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e],'inclusive':!0x0}}};return an;}());ak[b1(0x141)]=al;function am(){this['yy']={};}return d(am,'Parser'),am['prototype']=ak,ak['Parser']=am,new am();}());At['parser']=At;var Ti=At;function wt(z){const bl=c;return z['type']===bl(0x160);}d(wt,'isBarPlot');function kt(z){return z['type']==='band';}d(kt,'isBandAxisData');function q(z){const bm=c;return z[bm(0xc7)]===bm(0x16d);}d(q,'isLinearAxisData');var tt,Ht=(tt=class{constructor(z){this['parentGroup']=z;}['getMaxDimension'](z,B){const bn=c;if(!this[bn(0x13d)])return{'width':z['reduce']((E,F)=>Math['max'](F['length'],E),0x0)*B,'height':B};const C={'width':0x0,'height':0x0},D=this['parentGroup'][bn(0x104)]('g')['attr'](bn(0xe0),'hidden')[bn(0x123)]('font-size',B);for(const E of z){const F=e(D,0x1,E),G=F?F['width']:E['length']*B,H=F?F['height']:B;C['width']=Math['max'](C['width'],G),C['height']=Math['max'](C['height'],H);}return D['remove'](),C;}},d(tt,'TextDimensionCalculatorWithFont'),tt),Ot=0.7,Ft=0.2,it,Ut=(it=class{constructor(z,B,C,D){const bo=c;this['axisConfig']=z,this['title']=B,this['textDimensionCalculator']=C,this['axisThemeConfig']=D,this['boundingRect']={'x':0x0,'y':0x0,'width':0x0,'height':0x0},this['axisPosition']='left',this[bo(0xed)]=!0x1,this['showLabel']=!0x1,this['showTick']=!0x1,this['showAxisLine']=!0x1,this['outerPadding']=0x0,this['titleTextHeight']=0x0,this['labelTextHeight']=0x0,this['range']=[0x0,0xa],this['boundingRect']={'x':0x0,'y':0x0,'width':0x0,'height':0x0},this[bo(0xf9)]='left';}['setRange'](z){const bp=c;this['range']=z,this['axisPosition']==='left'||this['axisPosition']==='right'?this[bp(0xc5)][bp(0x13c)]=z[0x1]-z[0x0]:this['boundingRect']['width']=z[0x1]-z[0x0],this['recalculateScale']();}['getRange'](){const bq=c;return[this['range'][0x0]+this[bq(0x13f)],this['range'][0x1]-this['outerPadding']];}['setAxisPosition'](z){const br=c;this[br(0xf9)]=z,this['setRange'](this['range']);}['getTickDistance'](){const bs=c,z=this[bs(0x10c)]();return Math[bs(0xef)](z[0x0]-z[0x1])/this['getTickValues']()['length'];}[bu(0x118)](){return this['outerPadding'];}['getLabelDimension'](){return this['textDimensionCalculator']['getMaxDimension'](this['getTickValues']()['map'](z=>z['toString']()),this['axisConfig']['labelFontSize']);}['recalculateOuterPaddingToDrawBar'](){Ot*this['getTickDistance']()>this['outerPadding']*0x2&&(this['outerPadding']=Math['floor'](Ot*this['getTickDistance']()/0x2)),this['recalculateScale']();}['calculateSpaceIfDrawnHorizontally'](z){const bv=bu;let B=z['height'];if(this['axisConfig']['showAxisLine']&&B>this['axisConfig']['axisLineWidth']&&(B-=this['axisConfig']['axisLineWidth'],this['showAxisLine']=!0x0),this['axisConfig']['showLabel']){const C=this['getLabelDimension'](),D=Ft*z['width'];this['outerPadding']=Math['min'](C['width']/0x2,D);const E=C['height']+this['axisConfig'][bv(0x159)]*0x2;this['labelTextHeight']=C[bv(0x13c)],E<=B&&(B-=E,this[bv(0xd9)]=!0x0);}if(this['axisConfig']['showTick']&&B>=this[bv(0x117)]['tickLength']&&(this['showTick']=!0x0,B-=this[bv(0x117)]['tickLength']),this[bv(0x117)]['showTitle']&&this['title']){const F=this[bv(0x163)]['getMaxDimension']([this['title']],this['axisConfig']['titleFontSize']),G=F['height']+this['axisConfig']['titlePadding']*0x2;this['titleTextHeight']=F['height'],G<=B&&(B-=G,this[bv(0xed)]=!0x0);}this[bv(0xc5)]['width']=z['width'],this['boundingRect']['height']=z['height']-B;}['calculateSpaceIfDrawnVertical'](z){const bw=bu;let B=z['width'];if(this[bw(0x117)]['showAxisLine']&&B>this['axisConfig']['axisLineWidth']&&(B-=this['axisConfig']['axisLineWidth'],this['showAxisLine']=!0x0),this['axisConfig']['showLabel']){const C=this['getLabelDimension'](),D=Ft*z['height'];this['outerPadding']=Math[bw(0x106)](C['height']/0x2,D);const E=C['width']+this['axisConfig']['labelPadding']*0x2;E<=B&&(B-=E,this['showLabel']=!0x0);}if(this['axisConfig']['showTick']&&B>=this[bw(0x117)]['tickLength']&&(this['showTick']=!0x0,B-=this['axisConfig']['tickLength']),this['axisConfig']['showTitle']&&this[bw(0x16c)]){const F=this['textDimensionCalculator']['getMaxDimension']([this['title']],this['axisConfig'][bw(0x12c)]),G=F['height']+this['axisConfig']['titlePadding']*0x2;this['titleTextHeight']=F['height'],G<=B&&(B-=G,this['showTitle']=!0x0);}this['boundingRect']['width']=z['width']-B,this['boundingRect']['height']=z['height'];}['calculateSpace'](z){const bx=bu;return this['axisPosition']==='left'||this['axisPosition']===bx(0xf0)?this['calculateSpaceIfDrawnVertical'](z):this['calculateSpaceIfDrawnHorizontally'](z),this['recalculateScale'](),{'width':this['boundingRect']['width'],'height':this['boundingRect']['height']};}['setBoundingBoxXY'](z){const by=bu;this['boundingRect']['x']=z['x'],this[by(0xc5)]['y']=z['y'];}[bu(0x146)](){const bz=bu,z=[];if(this['showAxisLine']){const B=this[bz(0xc5)]['x']+this['boundingRect']['width']-this['axisConfig'][bz(0x140)]/0x2;z['push']({'type':'path','groupTexts':[bz(0x157),bz(0xfe)],'data':[{'path':'M\x20'+B+','+this['boundingRect']['y']+bz(0xd2)+B+','+(this[bz(0xc5)]['y']+this['boundingRect']['height'])+'\x20','strokeFill':this['axisThemeConfig']['axisLineColor'],'strokeWidth':this[bz(0x117)]['axisLineWidth']}]});}if(this['showLabel']&&z[bz(0x147)]({'type':'text','groupTexts':['left-axis','label'],'data':this['getTickValues']()['map'](C=>({'text':C['toString'](),'x':this['boundingRect']['x']+this['boundingRect']['width']-(this['showLabel']?this['axisConfig']['labelPadding']:0x0)-(this['showTick']?this['axisConfig']['tickLength']:0x0)-(this['showAxisLine']?this['axisConfig'][bz(0x140)]:0x0),'y':this['getScaleValue'](C),'fill':this['axisThemeConfig']['labelColor'],'fontSize':this[bz(0x117)]['labelFontSize'],'rotation':0x0,'verticalPos':'middle','horizontalPos':'right'}))}),this['showTick']){const C=this['boundingRect']['x']+this[bz(0xc5)]['width']-(this['showAxisLine']?this['axisConfig']['axisLineWidth']:0x0);z['push']({'type':'path','groupTexts':['left-axis',bz(0x110)],'data':this['getTickValues']()['map'](D=>({'path':'M\x20'+C+','+this['getScaleValue'](D)+'\x20L\x20'+(C-this['axisConfig']['tickLength'])+','+this['getScaleValue'](D),'strokeFill':this[bz(0xd1)]['tickColor'],'strokeWidth':this['axisConfig']['tickWidth']}))});}return this[bz(0xed)]&&z['push']({'type':bz(0x108),'groupTexts':['left-axis','title'],'data':[{'text':this['title'],'x':this['boundingRect']['x']+this[bz(0x117)]['titlePadding'],'y':this['boundingRect']['y']+this['boundingRect']['height']/0x2,'fill':this['axisThemeConfig']['titleColor'],'fontSize':this['axisConfig']['titleFontSize'],'rotation':0x10e,'verticalPos':bz(0x127),'horizontalPos':'center'}]}),z;}['getDrawableElementsForBottomAxis'](){const bA=bu,z=[];if(this['showAxisLine']){const B=this['boundingRect']['y']+this['axisConfig']['axisLineWidth']/0x2;z['push']({'type':'path','groupTexts':['bottom-axis','axis-line'],'data':[{'path':'M\x20'+this['boundingRect']['x']+','+B+'\x20L\x20'+(this['boundingRect']['x']+this[bA(0xc5)][bA(0x169)])+','+B,'strokeFill':this[bA(0xd1)]['axisLineColor'],'strokeWidth':this['axisConfig']['axisLineWidth']}]});}if(this['showLabel']&&z['push']({'type':'text','groupTexts':['bottom-axis','label'],'data':this['getTickValues']()['map'](C=>({'text':C['toString'](),'x':this['getScaleValue'](C),'y':this['boundingRect']['y']+this[bA(0x117)]['labelPadding']+(this['showTick']?this['axisConfig']['tickLength']:0x0)+(this[bA(0x166)]?this['axisConfig']['axisLineWidth']:0x0),'fill':this['axisThemeConfig'][bA(0xfa)],'fontSize':this[bA(0x117)]['labelFontSize'],'rotation':0x0,'verticalPos':'top','horizontalPos':'center'}))}),this[bA(0xc1)]){const C=this[bA(0xc5)]['y']+(this['showAxisLine']?this['axisConfig'][bA(0x140)]:0x0);z['push']({'type':'path','groupTexts':['bottom-axis','ticks'],'data':this['getTickValues']()['map'](D=>({'path':'M\x20'+this['getScaleValue'](D)+','+C+'\x20L\x20'+this['getScaleValue'](D)+','+(C+this['axisConfig'][bA(0x144)]),'strokeFill':this['axisThemeConfig']['tickColor'],'strokeWidth':this['axisConfig']['tickWidth']}))});}return this['showTitle']&&z[bA(0x147)]({'type':'text','groupTexts':['bottom-axis','title'],'data':[{'text':this[bA(0x16c)],'x':this['range'][0x0]+(this['range'][0x1]-this['range'][0x0])/0x2,'y':this['boundingRect']['y']+this['boundingRect']['height']-this[bA(0x117)]['titlePadding']-this['titleTextHeight'],'fill':this['axisThemeConfig']['titleColor'],'fontSize':this['axisConfig']['titleFontSize'],'rotation':0x0,'verticalPos':bA(0x127),'horizontalPos':'center'}]}),z;}['getDrawableElementsForTopAxis'](){const bB=bu,z=[];if(this['showAxisLine']){const B=this['boundingRect']['y']+this[bB(0xc5)]['height']-this['axisConfig']['axisLineWidth']/0x2;z['push']({'type':bB(0xe2),'groupTexts':['top-axis','axis-line'],'data':[{'path':'M\x20'+this['boundingRect']['x']+','+B+bB(0xd2)+(this['boundingRect']['x']+this['boundingRect']['width'])+','+B,'strokeFill':this['axisThemeConfig']['axisLineColor'],'strokeWidth':this['axisConfig']['axisLineWidth']}]});}if(this[bB(0xd9)]&&z['push']({'type':'text','groupTexts':['top-axis','label'],'data':this['getTickValues']()['map'](C=>({'text':C['toString'](),'x':this['getScaleValue'](C),'y':this['boundingRect']['y']+(this['showTitle']?this['titleTextHeight']+this['axisConfig'][bB(0x119)]*0x2:0x0)+this['axisConfig']['labelPadding'],'fill':this['axisThemeConfig']['labelColor'],'fontSize':this['axisConfig'][bB(0xc3)],'rotation':0x0,'verticalPos':bB(0x127),'horizontalPos':'center'}))}),this[bB(0xc1)]){const C=this['boundingRect']['y'];z['push']({'type':'path','groupTexts':['top-axis',bB(0x110)],'data':this['getTickValues']()['map'](D=>({'path':'M\x20'+this['getScaleValue'](D)+','+(C+this[bB(0xc5)]['height']-(this['showAxisLine']?this['axisConfig']['axisLineWidth']:0x0))+'\x20L\x20'+this['getScaleValue'](D)+','+(C+this['boundingRect']['height']-this['axisConfig']['tickLength']-(this['showAxisLine']?this['axisConfig'][bB(0x140)]:0x0)),'strokeFill':this['axisThemeConfig']['tickColor'],'strokeWidth':this[bB(0x117)]['tickWidth']}))});}return this['showTitle']&&z['push']({'type':'text','groupTexts':['top-axis','title'],'data':[{'text':this['title'],'x':this['boundingRect']['x']+this['boundingRect']['width']/0x2,'y':this[bB(0xc5)]['y']+this['axisConfig']['titlePadding'],'fill':this[bB(0xd1)]['titleColor'],'fontSize':this['axisConfig']['titleFontSize'],'rotation':0x0,'verticalPos':'top','horizontalPos':'center'}]}),z;}[bu(0x11d)](){const bC=bu;if(this['axisPosition']==='left')return this['getDrawableElementsForLeftAxis']();if(this['axisPosition']==='right')throw Error('Drawing\x20of\x20right\x20axis\x20is\x20not\x20implemented');return this['axisPosition']==='bottom'?this['getDrawableElementsForBottomAxis']():this['axisPosition']==='top'?this[bC(0x102)]():[];}},d(it,bu(0x12d)),it),et,Di=(et=class extends Ut{constructor(z,B,C,D,E){const bD=bu;super(z,D,E,B),this['categories']=C,this[bD(0x14e)]=bt()['domain'](this['categories'])[bD(0xcf)](this['getRange']());}['setRange'](z){super['setRange'](z);}['recalculateScale'](){const bE=bu;this['scale']=bt()[bE(0xf3)](this['categories'])[bE(0xcf)](this['getRange']())['paddingInner'](0x1)['paddingOuter'](0x0)['align'](0.5),f['trace']('BandAxis\x20axis\x20final\x20categories,\x20range:\x20',this['categories'],this['getRange']());}['getTickValues'](){return this['categories'];}['getScaleValue'](z){return this['scale'](z)??this['getRange']()[0x0];}},d(et,'BandAxis'),et),st,vi=(st=class extends Ut{constructor(z,B,C,D,E){const bF=bu;super(z,D,E,B),this['domain']=C,this[bF(0x14e)]=y()['domain'](this['domain'])['range'](this[bF(0x10c)]());}['getTickValues'](){return this['scale']['ticks']();}['recalculateScale'](){const bG=bu,z=[...this['domain']];this['axisPosition']==='left'&&z[bG(0x10b)](),this['scale']=y()['domain'](z)['range'](this['getRange']());}['getScaleValue'](z){return this['scale'](z);}},d(st,'LinearAxis'),st);function Ct(z,B,C,D){const bH=bu,E=new Ht(D);return kt(z)?new Di(B,C,z['categories'],z['title'],E):new vi(B,C,[z['min'],z[bH(0x12a)]],z['title'],E);}d(Ct,'getAxis');var nt,Li=(nt=class{constructor(z,B,C,D){const bI=bu;this['textDimensionCalculator']=z,this['chartConfig']=B,this['chartData']=C,this['chartThemeConfig']=D,this['boundingRect']={'x':0x0,'y':0x0,'width':0x0,'height':0x0},this[bI(0x15a)]=!0x1;}[bu(0x139)](z){this['boundingRect']['x']=z['x'],this['boundingRect']['y']=z['y'];}['calculateSpace'](z){const bJ=bu,B=this['textDimensionCalculator']['getMaxDimension']([this['chartData']['title']],this['chartConfig'][bJ(0x12c)]),C=Math[bJ(0x12a)](B[bJ(0x169)],z['width']),D=B['height']+0x2*this['chartConfig']['titlePadding'];return B[bJ(0x169)]<=C&&B[bJ(0x13c)]<=D&&this['chartConfig']['showTitle']&&this['chartData']['title']&&(this['boundingRect']['width']=C,this['boundingRect']['height']=D,this['showChartTitle']=!0x0),{'width':this[bJ(0xc5)]['width'],'height':this['boundingRect']['height']};}['getDrawableElements'](){const bK=bu,z=[];return this['showChartTitle']&&z[bK(0x147)]({'groupTexts':['chart-title'],'type':'text','data':[{'fontSize':this[bK(0xf1)]['titleFontSize'],'text':this['chartData']['title'],'verticalPos':'middle','horizontalPos':'center','x':this['boundingRect']['x']+this['boundingRect']['width']/0x2,'y':this['boundingRect']['y']+this['boundingRect']['height']/0x2,'fill':this['chartThemeConfig']['titleColor'],'rotation':0x0}]}),z;}},d(nt,'ChartTitle'),nt);function $t(z,B,C,D){const E=new Ht(D);return new Li(E,z,B,C);}d($t,'getChartTitleComponent');var at,Pi=(at=class{constructor(z,B,C,D,E){this['plotData']=z,this['xAxis']=B,this['yAxis']=C,this['orientation']=D,this['plotIndex']=E;}[bu(0xe6)](){const bL=bu,z=this['plotData']['data']['map'](C=>[this[bL(0x16b)]['getScaleValue'](C[0x0]),this['yAxis'][bL(0x162)](C[0x1])]);let B;return this['orientation']===bL(0xd7)?B=v()['y'](C=>C[0x0])['x'](C=>C[0x1])(z):B=v()['x'](C=>C[0x0])['y'](C=>C[0x1])(z),B?[{'groupTexts':['plot','line-plot-'+this['plotIndex']],'type':'path','data':[{'path':B,'strokeFill':this['plotData']['strokeFill'],'strokeWidth':this['plotData']['strokeWidth']}]}]:[];}},d(at,'LinePlot'),at),ot,Ei=(ot=class{constructor(z,B,C,D,E,F){const bM=bu;this[bM(0xf8)]=z,this['boundingRect']=B,this['xAxis']=C,this[bM(0x14d)]=D,this['orientation']=E,this['plotIndex']=F;}[bu(0xe6)](){const bN=bu,z=this['barData']['data']['map'](E=>[this['xAxis']['getScaleValue'](E[0x0]),this[bN(0x14d)]['getScaleValue'](E[0x1])]),B=0.05,C=Math['min'](this['xAxis']['getAxisOuterPadding']()*0x2,this['xAxis'][bN(0xc4)]())*(0x1-B),D=C/0x2;return this[bN(0x125)]===bN(0xd7)?[{'groupTexts':['plot','bar-plot-'+this['plotIndex']],'type':'rect','data':z[bN(0x121)](E=>({'x':this[bN(0xc5)]['x'],'y':E[0x0]-D,'height':C,'width':E[0x1]-this['boundingRect']['x'],'fill':this['barData'][bN(0xdd)],'strokeWidth':0x0,'strokeFill':this['barData']['fill']}))}]:[{'groupTexts':[bN(0xe8),bN(0xee)+this['plotIndex']],'type':'rect','data':z[bN(0x121)](E=>({'x':E[0x0]-D,'y':E[0x1],'width':C,'height':this['boundingRect']['y']+this['boundingRect']['height']-E[0x1],'fill':this['barData']['fill'],'strokeWidth':0x0,'strokeFill':this['barData'][bN(0xdd)]}))}];}},d(ot,'BarPlot'),ot),rt,Mi=(rt=class{constructor(z,B,C){const bO=bu;this['chartConfig']=z,this['chartData']=B,this[bO(0xd5)]=C,this[bO(0xc5)]={'x':0x0,'y':0x0,'width':0x0,'height':0x0};}['setAxes'](z,B){const bP=bu;this['xAxis']=z,this[bP(0x14d)]=B;}['setBoundingBoxXY'](z){this['boundingRect']['x']=z['x'],this['boundingRect']['y']=z['y'];}['calculateSpace'](z){const bQ=bu;return this['boundingRect'][bQ(0x169)]=z['width'],this['boundingRect']['height']=z['height'],{'width':this['boundingRect'][bQ(0x169)],'height':this['boundingRect']['height']};}['getDrawableElements'](){const bR=bu;if(!(this['xAxis']&&this['yAxis']))throw Error('Axes\x20must\x20be\x20passed\x20to\x20render\x20Plots');const z=[];for(const [B,C]of this['chartData']['plots']['entries']())switch(C['type']){case'line':{const D=new Pi(C,this['xAxis'],this['yAxis'],this['chartConfig']['chartOrientation'],B);z[bR(0x147)](...D['getDrawableElement']());}break;case'bar':{const E=new Ei(C,this['boundingRect'],this['xAxis'],this['yAxis'],this['chartConfig']['chartOrientation'],B);z['push'](...E['getDrawableElement']());}break;}return z;}},d(rt,bu(0xc9)),rt);function Gt(z,B,C){return new Mi(z,B,C);}d(Gt,'getPlotComponent');var ht,Ii=(ht=class{constructor(z,B,C,D){const bS=bu;this['chartConfig']=z,this[bS(0xbd)]=B,this['componentStore']={'title':$t(z,B,C,D),'plot':Gt(z,B,C),'xAxis':Ct(B['xAxis'],z['xAxis'],{'titleColor':C['xAxisTitleColor'],'labelColor':C['xAxisLabelColor'],'tickColor':C['xAxisTickColor'],'axisLineColor':C['xAxisLineColor']},D),'yAxis':Ct(B[bS(0x14d)],z['yAxis'],{'titleColor':C['yAxisTitleColor'],'labelColor':C['yAxisLabelColor'],'tickColor':C['yAxisTickColor'],'axisLineColor':C[bS(0x15f)]},D)};}[bu(0x120)](){const bT=bu;let z=this[bT(0xf1)]['width'],B=this['chartConfig']['height'],C=0x0,D=0x0,E=Math['floor'](z*this[bT(0xf1)]['plotReservedSpacePercent']/0x64),F=Math['floor'](B*this['chartConfig']['plotReservedSpacePercent']/0x64),G=this[bT(0x115)]['plot']['calculateSpace']({'width':E,'height':F});z-=G['width'],B-=G['height'],G=this['componentStore']['title']['calculateSpace']({'width':this['chartConfig']['width'],'height':B}),D=G['height'],B-=G['height'],this['componentStore']['xAxis']['setAxisPosition'](bT(0x154)),G=this['componentStore']['xAxis']['calculateSpace']({'width':z,'height':B}),B-=G['height'],this[bT(0x115)]['yAxis'][bT(0xbf)]('left'),G=this['componentStore']['yAxis']['calculateSpace']({'width':z,'height':B}),C=G['width'],z-=G['width'],z>0x0&&(E+=z,z=0x0),B>0x0&&(F+=B,B=0x0),this['componentStore']['plot']['calculateSpace']({'width':E,'height':F}),this['componentStore']['plot']['setBoundingBoxXY']({'x':C,'y':D}),this['componentStore']['xAxis']['setRange']([C,C+E]),this[bT(0x115)]['xAxis']['setBoundingBoxXY']({'x':C,'y':D+F}),this['componentStore']['yAxis'][bT(0x170)]([D,D+F]),this['componentStore']['yAxis']['setBoundingBoxXY']({'x':0x0,'y':D}),this['chartData']['plots']['some'](H=>wt(H))&&this['componentStore']['xAxis']['recalculateOuterPaddingToDrawBar']();}['calculateHorizontalSpace'](){const bU=bu;let z=this[bU(0xf1)]['width'],B=this['chartConfig']['height'],C=0x0,D=0x0,E=0x0,F=Math['floor'](z*this['chartConfig'][bU(0x105)]/0x64),G=Math['floor'](B*this['chartConfig'][bU(0x105)]/0x64),H=this['componentStore']['plot']['calculateSpace']({'width':F,'height':G});z-=H['width'],B-=H['height'],H=this['componentStore'][bU(0x16c)]['calculateSpace']({'width':this['chartConfig']['width'],'height':B}),C=H['height'],B-=H['height'],this['componentStore']['xAxis']['setAxisPosition']('left'),H=this['componentStore']['xAxis']['calculateSpace']({'width':z,'height':B}),z-=H['width'],D=H['width'],this['componentStore']['yAxis'][bU(0xbf)]('top'),H=this['componentStore'][bU(0x14d)]['calculateSpace']({'width':z,'height':B}),B-=H['height'],E=C+H['height'],z>0x0&&(F+=z,z=0x0),B>0x0&&(G+=B,B=0x0),this['componentStore']['plot']['calculateSpace']({'width':F,'height':G}),this['componentStore']['plot']['setBoundingBoxXY']({'x':D,'y':E}),this['componentStore']['yAxis']['setRange']([D,D+F]),this['componentStore']['yAxis'][bU(0x139)]({'x':D,'y':C}),this['componentStore'][bU(0x16b)]['setRange']([E,E+G]),this['componentStore']['xAxis'][bU(0x139)]({'x':0x0,'y':E}),this['chartData'][bU(0x165)]['some'](I=>wt(I))&&this[bU(0x115)]['xAxis'][bU(0x167)]();}[bu(0x10a)](){const bV=bu;this['chartConfig']['chartOrientation']==='horizontal'?this[bV(0xfd)]():this[bV(0x120)]();}[bu(0xe6)](){const bW=bu;this[bW(0x10a)]();const z=[];this['componentStore']['plot'][bW(0xd3)](this['componentStore']['xAxis'],this['componentStore']['yAxis']);for(const B of Object[bW(0x156)](this[bW(0x115)]))z['push'](...B['getDrawableElements']());return z;}},d(ht,bu(0xe7)),ht),lt,Vi=(lt=class{static['build'](z,B,C,D){return new Ii(z,B,C,D)['getDrawableElement']();}},d(lt,'XYChartBuilder'),lt),K=0x0,jt,Z=Dt(),J=Tt(),A=vt(),St=J['plotColorPalette'][bu(0xc2)](',')['map'](z=>z[bu(0xdb)]()),xt=!0x1,Rt=!0x1;function Tt(){const bX=bu,z=g(),B=h();return i(z['xyChart'],B['themeVariables'][bX(0xc8)]);}d(Tt,bu(0xc6));function Dt(){const bY=bu,z=h();return i(j['xyChart'],z[bY(0xc8)]);}d(Dt,'getChartDefaultConfig');function vt(){return{'yAxis':{'type':'linear','title':'','min':0x1/0x0,'max':-0x1/0x0},'xAxis':{'type':'band','title':'','categories':[]},'title':'','plots':[]};}d(vt,'getChartDefaultData');function dt(z){const B=h();return k(z['trim'](),B);}d(dt,'textSanitizer');function qt(z){jt=z;}d(qt,'setTmpSVGG');function Qt(z){const bZ=bu;z==='horizontal'?Z['chartOrientation']=bZ(0xd7):Z['chartOrientation']='vertical';}d(Qt,'setOrientation');function Kt(z){const c0=bu;A[c0(0x16b)]['title']=dt(z['text']);}d(Kt,'setXAxisTitle');function Lt(z,B){A['xAxis']={'type':'linear','title':A['xAxis']['title'],'min':z,'max':B},xt=!0x0;}d(Lt,bu(0xbe));function Zt(z){const c1=bu;A[c1(0x16b)]={'type':'band','title':A[c1(0x16b)]['title'],'categories':z['map'](B=>dt(B[c1(0x108)]))},xt=!0x0;}d(Zt,'setXAxisBand');function Jt(z){A['yAxis']['title']=dt(z['text']);}d(Jt,bu(0xea));function ti(z,B){const c2=bu;A['yAxis']={'type':'linear','title':A['yAxis'][c2(0x16c)],'min':z,'max':B},Rt=!0x0;}d(ti,'setYAxisRangeData');function ii(z){const c3=bu,B=Math['min'](...z),C=Math['max'](...z),D=q(A['yAxis'])?A['yAxis'][c3(0x106)]:0x1/0x0,E=q(A[c3(0x14d)])?A[c3(0x14d)]['max']:-0x1/0x0;A['yAxis']={'type':'linear','title':A['yAxis']['title'],'min':Math['min'](D,B),'max':Math['max'](E,C)};}function b(){const cd=['.\x20Unrecognized\x20text.\x0a','visibility','NUMBER_WITH_DECIMAL','path','popState','length','match','getDrawableElement','Orchestrator','plot','rect','setYAxisTitle','acc_descr_value','options','showTitle','bar-plot-','abs','right','chartConfig','2123472pMJKFJ','domain','STR','last_column','MD_STR','797626lNQBjt','barData','axisPosition','labelColor','stateStackSize','substr','calculateHorizontalSpace','axisl-line','ranges','toString','table','getDrawableElementsForTopAxis','Rendering\x20xychart\x20chart\x0a','append','plotReservedSpacePercent','min','Y_AXIS','text','call','calculateSpace','reverse','getRange','enter','rules','_input','ticks','text-anchor','symbols_','flex','2800476mXzKAA','componentStore','413064iQzSsG','axisConfig','getAxisOuterPadding','titlePadding','...','Parse\x20Error:\x20multiple\x20actions\x20possible\x20at\x20state:\x20','setDiagramTitle','getDrawableElements','1xhihFf','EOF','calculateVerticalSpace','map','INITIAL','attr','yytext','orientation','hasOwnProperty','top','unknown','dominant-baseline','max','done','titleFontSize','BaseAxis','conditions','unput','round','pushState','setAccTitle','CHART_ORIENTATION','540710VdefiL','backtrack_lexer','matched','last_line','XYCHART','setBoundingBoxXY','terminals_','getPlotColorFromPalette','height','parentGroup','dataLabelColor','outerPadding','axisLineWidth','lexer','first_column','parseError','tickLength','horizontalPos','getDrawableElementsForLeftAxis','push','setXAxisBand','setXAxisTitle','first_line','SQUARE_BRACES_START','conditionStack','yAxis','scale','setInput','error','selectAll','axis_data','label','bottom','yylloc','values','left-axis','300iprlHH','labelPadding','showChartTitle','getTextAnchor','yylineno','strokeFill','defaultActions','yAxisLineColor','bar','build','getScaleValue','textDimensionCalculator','getXYChartData','plots','showAxisLine','recalculateOuterPaddingToDrawBar','_more','width','.\x20You\x20can\x20only\x20invoke\x20reject()\x20in\x20the\x20lexer\x20when\x20the\x20lexer\x20is\x20of\x20the\x20backtracking\x20persuasion\x20(options.backtrack_lexer\x20=\x20true).\x0a','xAxis','title','linear','getDrawableElem','join','setRange','line','parser','7680TayRnV','transform','AMP','chartData','setXAxisRangeData','setAxisPosition','input','showTick','split','labelFontSize','getTickDistance','boundingRect','getChartDefaultThemeConfig','type','xyChart','BasePlot','next','_backtrack','showDataLabelOutsideBar','341LmSQWr','40APMJzx','range','acc_descr_multiline_value','axisThemeConfig','\x20L\x20','setAxes','1605522bQNZrD','chartThemeConfig','data','horizontal','align','showLabel','showPosition','trim','middle','fill','step'];b=function(){return cd;};return b();}d(ii,'setYAxisRangeFromPlotData');function Pt(z){const c4=bu;let B=[];if(z['length']===0x0)return B;if(!xt){const C=q(A['xAxis'])?A['xAxis'][c4(0x106)]:0x1/0x0,D=q(A['xAxis'])?A[c4(0x16b)]['max']:-0x1/0x0;Lt(Math['min'](C,0x1),Math['max'](D,z['length']));}if(Rt||ii(z),kt(A['xAxis'])&&(B=A['xAxis']['categories'][c4(0x121)]((E,F)=>[E,z[F]])),q(A['xAxis'])){const E=A['xAxis'][c4(0x106)],F=A['xAxis'][c4(0x12a)],G=(F-E)/(z['length']-0x1),H=[];for(let I=E;I<=F;I+=G)H['push'](''+I);B=H['map']((L,M)=>[L,z[M]]);}return B;}d(Pt,'transformDataWithoutCategory');function Et(z){return St[z===0x0?0x0:z%St['length']];}d(Et,bu(0x13b));function ei(z,B){const c5=bu,C=Pt(B);A['plots']['push']({'type':c5(0x171),'strokeFill':Et(K),'strokeWidth':0x2,'data':C}),K++;}d(ei,'setLineData');function si(z,B){const c6=bu,C=Pt(B);A['plots'][c6(0x147)]({'type':'bar','fill':Et(K),'data':C}),K++;}function c(a,d){a=a-0xb9;const e=b();let f=e[a];return f;}d(si,'setBarData');function ni(){const c7=bu;if(A['plots']['length']===0x0)throw Error('No\x20Plot\x20to\x20render,\x20please\x20provide\x20a\x20plot\x20with\x20some\x20data');return A['title']=l(),Vi[c7(0x161)](Z,A,J,jt);}d(ni,'getDrawableElem');function ai(){return J;}d(ai,'getChartThemeConfig');function oi(){return Z;}d(oi,'getChartConfig');function ri(){return A;}d(ri,bu(0x164));var Bi=d(function(){s(),K=0x0,Z=Dt(),A=vt(),J=Tt(),St=J['plotColorPalette']['split'](',')['map'](z=>z['trim']()),xt=!0x1,Rt=!0x1;},'clear'),Wi={'getDrawableElem':ni,'clear':Bi,'setAccTitle':m,'getAccTitle':n,'setDiagramTitle':o,'getDiagramTitle':l,'getAccDescription':p,'setAccDescription':r,'setOrientation':Qt,'setXAxisTitle':Kt,'setXAxisRangeData':Lt,'setXAxisBand':Zt,'setYAxisTitle':Jt,'setYAxisRangeData':ti,'setLineData':ei,'setBarData':si,'setTmpSVGG':qt,'getChartThemeConfig':ai,'getChartConfig':oi,'getXYChartData':ri},zi=d((z,B,C,D)=>{const c8=bu,F=D['db'],G=F['getChartThemeConfig'](),H=F['getChartConfig'](),I=F['getXYChartData']()[c8(0x165)][0x0]['data']['map'](a6=>a6[0x1]);function N(a6){return a6==='top'?'text-before-edge':'middle';}d(N,'getDominantBaseLine');function Q(a6){const c9=c8;return a6==='left'?'start':a6===c9(0xf0)?'end':'middle';}d(Q,c8(0x15b));function V(a6){return'translate('+a6['x']+',\x20'+a6['y']+')\x20rotate('+(a6['rotation']||0x0)+')';}d(V,'getTextTransformation'),f['debug'](c8(0x103)+z);const a0=t(B),a1=a0['append']('g')['attr']('class','main'),a2=a1['append']('rect')[c8(0x123)]('width',H['width'])[c8(0x123)]('height',H['height'])['attr']('class','background');u(a0,H['height'],H['width'],!0x0),a0[c8(0x123)]('viewBox','0\x200\x20'+H['width']+'\x20'+H[c8(0x13c)]),a2['attr']('fill',G['backgroundColor']),F['setTmpSVGG'](a0['append']('g')['attr']('class','mermaid-tmp-group'));const a3=F[c8(0x16e)](),a4={};function a5(a6){let a7=a1,a8='';for(const [a9]of a6['entries']()){let aa=a1;a9>0x0&&a4[a8]&&(aa=a4[a8]),a8+=a6[a9],a7=a4[a8],a7||(a7=a4[a8]=aa['append']('g')['attr']('class',a6[a9]));}return a7;}d(a5,'getGroup');for(const a6 of a3){if(a6['data']['length']===0x0)continue;const a7=a5(a6['groupTexts']);switch(a6['type']){case'rect':if(a7['selectAll'](c8(0xe9))['data'](a6['data'])[c8(0x10d)]()['append']('rect')['attr']('x',a8=>a8['x'])['attr']('y',a8=>a8['y'])['attr']('width',a8=>a8[c8(0x169)])['attr']('height',a8=>a8[c8(0x13c)])['attr']('fill',a8=>a8['fill'])['attr']('stroke',a8=>a8['strokeFill'])['attr']('stroke-width',a8=>a8['strokeWidth']),H['showDataLabel']){const a8=H[c8(0xcc)];if(H['chartOrientation']==='horizontal'){let a9=function(ag,ah){const {data:aj,label:ak}=ag;return ah*ak['length']*aa<=aj['width']-ab;};d(a9,'fitsHorizontally');const aa=0.7,ab=0xa,ac=a6['data']['map']((ag,ah)=>({'data':ag,'label':I[ah]['toString']()}))['filter'](ag=>ag['data']['width']>0x0&&ag[c8(0xd6)]['height']>0x0),ad=ac['map'](ag=>{const ca=c8,{data:ah}=ag;let aj=ah[ca(0x13c)]*0.7;for(;!a9(ag,aj)&&aj>0x0;)aj-=0x1;return aj;}),ae=Math['floor'](Math['min'](...ad)),af=d(ag=>a8?ag['data']['x']+ag['data']['width']+ab:ag['data']['x']+ag['data'][c8(0x169)]-ab,'determineLabelXPosition');a7[c8(0x151)]('text')['data'](ac)['enter']()[c8(0x104)]('text')['attr']('x',af)['attr']('y',ag=>ag['data']['y']+ag['data'][c8(0x13c)]/0x2)[c8(0x123)](c8(0x111),a8?'start':'end')['attr'](c8(0x129),c8(0xdc))['attr']('fill',G['dataLabelColor'])['attr']('font-size',ae+'px')['text'](ag=>ag[c8(0x153)]);}else{let ag=function(an,ao,ap){const cb=c8,{data:aq,label:ar}=an,as=0.7,au=ao*ar[cb(0xe4)]*as,av=aq['x']+aq['width']/0x2,aw=av-au/0x2,ax=av+au/0x2,ay=aw>=aq['x']&&ax<=aq['x']+aq['width'],az=aq['y']+ap+ao<=aq['y']+aq[cb(0x13c)];return ay&&az;};d(ag,'fitsInBar');const ah=0xa,aj=a6['data']['map']((an,ao)=>({'data':an,'label':I[ao][c8(0x100)]()}))['filter'](an=>an[c8(0xd6)]['width']>0x0&&an['data']['height']>0x0),ak=aj['map'](an=>{const cc=c8,{data:ao,label:ap}=an;let aq=ao['width']/(ap[cc(0xe4)]*0.7);for(;!ag(an,aq,ah)&&aq>0x0;)aq-=0x1;return aq;}),al=Math['floor'](Math['min'](...ak)),am=d(an=>a8?an['data']['y']-ah:an['data']['y']+ah,'determineLabelYPosition');a7[c8(0x151)](c8(0x108))['data'](aj)['enter']()['append']('text')['attr']('x',an=>an['data']['x']+an['data'][c8(0x169)]/0x2)[c8(0x123)]('y',am)[c8(0x123)](c8(0x111),'middle')['attr']('dominant-baseline',a8?'auto':'hanging')['attr']('fill',G[c8(0x13e)])['attr']('font-size',al+'px')['text'](an=>an['label']);}}break;case c8(0x108):a7['selectAll']('text')['data'](a6['data'])['enter']()['append'](c8(0x108))[c8(0x123)]('x',0x0)['attr']('y',0x0)['attr']('fill',an=>an['fill'])['attr']('font-size',an=>an['fontSize'])['attr']('dominant-baseline',an=>N(an['verticalPos']))['attr']('text-anchor',an=>Q(an[c8(0x145)]))['attr'](c8(0xbb),an=>V(an))['text'](an=>an['text']);break;case'path':a7['selectAll']('path')['data'](a6[c8(0xd6)])['enter']()['append'](c8(0xe2))['attr']('d',an=>an['path'])['attr']('fill',an=>an['fill']?an['fill']:'none')['attr']('stroke',an=>an[c8(0x15d)])[c8(0x123)]('stroke-width',an=>an['strokeWidth']);break;}}},'draw'),Oi={'draw':zi},ji={'parser':Ti,'db':Wi,'renderer':Oi};export{ji as diagram};
@@ -0,0 +1 @@
1
+ var I=j;(function(q,v){var H=j,x=q();while(!![]){try{var z=parseInt(H(0xde))/0x1*(-parseInt(H(0xe0))/0x2)+parseInt(H(0xad))/0x3+-parseInt(H(0xe8))/0x4*(-parseInt(H(0xce))/0x5)+-parseInt(H(0xcd))/0x6+-parseInt(H(0xc7))/0x7+parseInt(H(0xe1))/0x8*(parseInt(H(0xb3))/0x9)+parseInt(H(0xda))/0xa*(parseInt(H(0xa9))/0xb);if(z===v)break;else x['push'](x['shift']());}catch(G){x['push'](x['shift']());}}}(f,0xa9f5e));import'./index.js';import'./_commonjsHelpers.js';function f(){var J=['缩小字体大小','这将添加\x20{{numShapes}}\x20个形状到您的素材库中。您确定吗?','文件已保存。','垂直翻转','垂直居中','48591IQACAQ','目前仅支持<flowchartLink>流程图</flowchartLink>、<sequenceLink>序列图</sequenceLink>和<classLink>类图</classLink>。其他类型在\x20Excalidraw\x20中将以图像呈现。','介绍您的素材库,让人们了解其用途','点虚线','保存到...','谢谢你\x20{{authorName}}。您的素材库已被提交审核。请点击<link>此处</link>跟进此次提交的状态','要移动画布,请按住鼠标滚轮或空格键同时拖拽鼠标,或使用抓手工具。','素材库名称','详细统计信息','编辑器','导出链接','快捷键和帮助','将画布保存到您的\x20Excalidraw+\x20工作区。','水平等距分布','我们不久将支持添加图片到素材库','无法保存到后端数据库,画布似乎过大。您应该保存文件到本地,以确保您的工作不会丢失。','无法创建共享链接','无标题','保存为文件','浅色模式','6301211ZpNFmy','Mermaid\x20至\x20Excalidraw','此颜色没有可用的明暗变化','导出为图片','编辑线条','文字至图表','441936dfFMNs','17165xwLLEq','粘贴图表','创建链接与嵌入','无法连接到实时协作服务器。请重新加载页面并重试。','底端对齐','选择工具并开始绘图!','放大字体大小','Mermaid\x20语法','添加或编辑文本','画布数据将被保存到导出的\x20PNG/SVG\x20文件,以便恢复。\x0a将会增加导出文件的大小。','垂直等距分布','显示网格','50nnebPI','别担心,该会话使用端到端加密,无论绘制什么都将保持私密,甚至连我们的服务器也无法查看。','无法插入\x20SVG\x20图像。该\x20SVG\x20标记似乎是无效的。','PNG','240367JXVBWb','从后端导入失败。','2uzneJy','1224dcnSGR','输入一个有效的URL','暂时无法导出到\x20Excalidraw+\x20...','您个人网站的或任意的链接(可选)','取消文本绑定','包含画布数据','从文件加载','764QqtrEu','双击或按回车键以编辑文本','禁用箭头吸附','链接与嵌入','图,化繁为简。','置于顶层','字体大小','拷贝样式','提交后,您的素材库将被包含在<link>公共素材库广场</link>以供其他人在绘图中使用。','添加到素材库中','分离出画框中的所有元素','510103dqDwPu','透明度','禅模式','三角箭头','590217mOhQcq'];f=function(){return J;};return f();}var u={'paste':'粘贴','pasteAsPlaintext':'粘贴为纯文本','pasteCharts':I(0xcf),'selectAll':'全部选中','multiSelect':'添加元素到选区','moveCanvas':'移动画布','cut':'剪切','copy':'拷贝','copyAsPng':'复制为\x20PNG\x20到剪贴板','copyAsSvg':'复制为\x20SVG\x20到剪贴板','copyText':'复制文本到剪贴板','copySource':'复制源码到剪贴板','convertToCode':'转换成代码','bringForward':'上移一层','sendToBack':'置于底层','bringToFront':I(0xed),'sendBackward':'下移一层','delete':'删除','copyStyles':I(0xa5),'pasteStyles':'粘贴样式','stroke':'描边','background':'背景','fill':'填充','strokeWidth':'描边宽度','strokeStyle':'边框样式','strokeStyle_solid':'实线','strokeStyle_dashed':'虚线','strokeStyle_dotted':I(0xb6),'sloppiness':'线条风格','opacity':I(0xaa),'textAlign':'文本对齐','edges':'边角','sharp':'尖锐','round':'圆润','arrowheads':'端点','arrowhead_none':'无','arrowhead_arrow':'箭头','arrowhead_bar':'条状','arrowhead_circle':'圆点','arrowhead_circle_outline':'圆点(空心)','arrowhead_triangle':I(0xac),'arrowhead_triangle_outline':'三角箭头(空心)','arrowhead_diamond':'菱形','arrowhead_diamond_outline':'菱形(空心)','fontSize':I(0xee),'fontFamily':'字体','addWatermark':'添加\x20“使用\x20Excalidraw\x20创建”\x20水印','handDrawn':'手写','normal':'普通','code':'代码','small':'小','medium':'中','large':'大','veryLarge':'加大','solid':'实心','hachure':'线条','zigzag':'之字形折线','crossHatch':'交叉线条','thin':'细','bold':'粗','left':'左对齐','center':'居中','right':'右对齐','extraBold':'特粗','architect':'朴素','artist':'艺术','cartoonist':'漫画家','fileTitle':'文件名','colorPicker':'取色器','canvasColors':'画布上的','canvasBackground':'画布背景','drawingCanvas':'绘制\x20Canvas','layers':'图层','actions':'操作','language':'语言','liveCollaboration':'实时协作...','duplicateSelection':'复制','untitled':I(0xc4),'name':'名字','yourName':'您的姓名','madeWithExcalidraw':'使用\x20Excalidraw\x20创建','group':'编组','ungroup':'解除编组','collaborators':'协作者','showGrid':I(0xd9),'addToLibrary':I(0xa7),'removeFromLibrary':'从素材库中移除','libraryLoadingMessage':'正在加载素材库…','libraries':'浏览素材库','loadingScene':'正在加载绘图…','align':'对齐','alignTop':'顶部对齐','alignBottom':I(0xd2),'alignLeft':'左对齐','alignRight':'右对齐','centerVertically':I(0xb2),'centerHorizontally':'水平居中','distributeHorizontally':I(0xc0),'distributeVertically':I(0xd8),'flipHorizontal':'水平翻转','flipVertical':I(0xb1),'viewMode':'查看模式','share':'分享','showStroke':'显示描边颜色选择器','showBackground':'显示背景颜色选择器','toggleTheme':'切换主题','personalLib':'个人素材库','excalidrawLib':'Excalidraw\x20素材库','decreaseFontSize':I(0xae),'increaseFontSize':I(0xd4),'unbindText':I(0xe5),'bindText':'将文本绑定到容器','createContainerFromText':'将文本包围在容器中','link':{'edit':'编辑链接','editEmbed':'编辑链接与嵌入','create':'新建链接','createEmbed':I(0xd0),'label':'链接','labelEmbed':I(0xeb),'empty':'未设定链接'},'lineEditor':{'edit':I(0xcb),'exit':'退出线条编辑'},'elementLock':{'lock':'锁定','unlock':'解除锁定','lockAll':'全部锁定','unlockAll':'全部解锁'},'statusPublished':'已发布','sidebarLock':'侧边栏常驻','selectAllElementsInFrame':'选择画框中的所有元素','removeAllElementsFromFrame':I(0xa8),'eyeDropper':'从画布上取色','textToDiagram':I(0xcc),'prompt':'Prompt'},F={'noItems':'尚未添加任何项目……','hint_emptyLibrary':'选中画布上的项目添加到此处,或从下方的公共素材库中导入。','hint_emptyPrivateLibrary':'选中画布上的项目添加到此处。'},E={'clearReset':'重置画布','exportJSON':'导出为文件','exportImage':'导出图片...','export':I(0xb7),'copyToClipboard':'复制到剪贴板','save':'保存至当前文件','saveAs':'保存为','load':'打开','getShareableLink':'获取共享链接','close':'关闭','selectLanguage':'选择语言','scrollBackToContent':'滚动回到内容','zoomIn':'放大','zoomOut':'缩小','resetZoom':'重置缩放','menu':'菜单','done':'完成','edit':'编辑','undo':'撤销','redo':'重做','resetLibrary':'重置素材库','createNewRoom':'新建会议室','fullScreen':'全屏','darkMode':'深色模式','lightMode':I(0xc6),'zenMode':I(0xab),'objectsSnapMode':'吸附至对象','exitZenMode':'退出禅模式','cancel':'取消','clear':'清除','remove':'删除','embed':'切换嵌入','publishLibrary':'发布','submit':'提交','confirm':'确定','embeddableInteractionButton':'点击以开始交互'},e={'clearReset':'这将会清除整个画布。您是否要继续?','couldNotCreateShareableLink':I(0xc3),'couldNotCreateShareableLinkTooBig':'无法创建可共享链接:画布过大','couldNotLoadInvalidFile':'无法加载无效的文件','importBackendFailed':I(0xdf),'cannotExportEmptyCanvas':'无法导出空白画布。','couldNotCopyToClipboard':'无法复制到剪贴板。','decryptFailed':'无法解密数据。','uploadedSecurly':'上传已被端到端加密保护,这意味着\x20Excalidraw\x20的服务器和第三方都无法读取内容。','loadSceneOverridePrompt':'加载外部绘图将取代您现有的内容。您想要继续吗?','collabStopOverridePrompt':'停止会话将覆盖您先前本地存储的绘图。\x20您确定吗?\x0a\x0a(如果您想保持本地绘图,只需关闭浏览器选项卡。)','errorAddingToLibrary':'无法将项目添加到素材库中','errorRemovingFromLibrary':'无法从素材库中移除项目','confirmAddLibrary':I(0xaf),'imageDoesNotContainScene':'此图像似乎不包含任何画布数据。您是否在导出时启用了画布嵌入功能?','cannotRestoreFromImage':'无法从此图像文件恢复画布','invalidSceneUrl':'无法从提供的\x20URL\x20导入场景。它或者格式不正确,或者不包含有效的\x20Excalidraw\x20JSON\x20数据。','resetLibrary':'这将会清除你的素材库。你确定要这么做吗?','removeItemsFromsLibrary':'确定要从素材库中删除\x20{{count}}\x20个项目吗?','invalidEncryptionKey':'密钥必须包含22个字符。实时协作已被禁用。','collabOfflineWarning':'无网络连接。\x0a您的改动将不会被保存!'},D={'unsupportedFileType':'不支持的文件格式。','imageInsertError':'无法插入图像。请稍后再试……','fileTooBig':'文件过大。最大允许的大小为\x20{{maxSize}}。','svgImageInsertError':I(0xdc),'failedToFetchImage':'无法获取图片。','invalidSVGString':'无效的\x20SVG。','cannotResolveCollabServer':I(0xd1),'importLibraryError':'无法加载素材库','collabSaveFailed':'无法保存到后端数据库。如果问题持续存在,您应该保存文件到本地,以确保您的工作不会丢失。','collabSaveFailed_sizeExceeded':I(0xc2),'imageToolNotSupported':'图片已被禁用。','brave_measure_text_error':{'line1':'您似乎正在使用\x20Brave\x20浏览器并启用了<bold>积极阻止指纹识别</bold>的设置。','line2':'这可能会破坏绘图中的\x20<bold>文本元素</bold>。','line3':'我们强烈建议禁用此设置。您可以按照<link>这些步骤</link>来设置。','line4':'如果禁用此设置无法修复文本元素的显示,请在\x20GitHub\x20上提交一个\x20<issueLink>issue</issueLink>\x20,或者在\x20<discordLink>Discord</discordLink>\x20上反馈'},'libraryElementTypeError':{'embeddable':'嵌入的元素不能被添加到素材库。','iframe':'不能将\x20IFrame\x20元素添加到素材库中。','image':I(0xc1)},'asyncPasteFailedOnRead':'无法粘贴(无法读取系统剪贴板)。','asyncPasteFailedOnParse':'无法粘贴。','copyToSystemClipboardFailed':'无法复制到剪贴板。'},B={'selection':'选择','image':'插入图像','rectangle':'矩形','diamond':'菱形','ellipse':'椭圆','arrow':'箭头','line':'线条','freedraw':'自由书写','text':'文字','library':'素材库','lock':'绘制后保持所选的工具栏状态','penMode':'笔模式\x20–\x20避免误触','link':'为选中的形状添加/更新链接','eraser':'橡皮','frame':'画框工具','magicframe':'线框图至代码','embeddable':'嵌入网页','laser':'激光笔','hand':'抓手(平移工具)','extraTools':'更多工具','mermaidToExcalidraw':I(0xc8),'magicSettings':'AI\x20设置'},C={'canvasActions':'画布动作','selectedShapeActions':'选定形状操作','shapes':'形状'},a={'canvasPanning':I(0xb9),'linearElement':'点击创建多个点\x20拖动创建直线','freeDraw':'点击并拖动,完成时松开','text':'提示:您也可以使用选择工具双击任意位置来添加文字','embeddable':'点击并拖动以创建嵌入网页','text_selected':I(0xe9),'text_editing':'按下\x20Escape\x20或\x20CtrlOrCmd+ENTER\x20完成编辑','linearElementMulti':'点击最后一个点或按下\x20Esc/Enter\x20来完成','lockAngle':'可以按住\x20Shift\x20来约束角度','resize':'您可以按住SHIFT来限制比例大小,\x0a按住ALT来调整中心大小','resizeImage':'按住SHIFT可以自由缩放,\x0a按住ALT可以从中间缩放','rotate':'旋转时可以按住\x20Shift\x20来约束角度','lineEditor_info':'按住\x20CtrlOrCmd\x20并双击或按\x20CtrlOrCmd\x20+\x20Enter\x20来编辑点','lineEditor_pointSelected':'按下\x20Delete\x20移除点,CtrlOrCmd+D\x20以复制,拖动以移动','lineEditor_nothingSelected':'选择要编辑的点\x20(按住\x20SHIFT\x20选择多个),\x0a或按住\x20Alt\x20并点击以添加新点','placeImage':'点击放置图像,或者点击并拖动以手动设置图像大小','publishLibrary':'发布您自己的素材库','bindTextToElement':'按下\x20Enter\x20以添加文本','deepBoxSelect':'按住\x20CtrlOrCmd\x20以深度选择,并避免拖拽','eraserRevert':'按住\x20Alt\x20以反选被标记删除的元素','firefox_clipboard_write':'将高级配置首选项“dom.events.asyncClipboard.clipboardItem”设置为“true”可以启用此功能。要更改\x20Firefox\x20的高级配置首选项,请前往“about:config”页面。','disableSnapping':'按住\x20Ctrl\x20或\x20Cmd\x20以禁用吸附'},r={'cannotShowPreview':'无法显示预览','canvasTooBig':'画布可能过大。','canvasTooBigTip':'提示:尝试将最远的元素移动到和其它元素更近一些。'},A={'headingMain':'遇到异常。请尝试<button>重新加载页面</button>。','clearCanvasMessage':'如果重新加载页面无效,请尝试<button>清除画布</button>。','clearCanvasCaveat':'这会造成当前工作丢失','trackedToSentry':'标识符为{{eventId}}的错误已在我们的系统中被记录','openIssueMessage':'我们非常谨慎地处理错误信息,您的画布内容不会被包含在错误报告中。如果您的画布内容不需要保持私密,请考虑在我们的\x20<button>bug\x20跟踪系统</button>上提供更多信息。请复制粘贴以下信息到\x20GitHub\x20Issue\x20中。','sceneContent':'画布内容:'},t={'desc_intro':'你可以邀请其他人到目前的画面中与你协作。','desc_privacy':I(0xdb),'button_startSession':'开始会话','button_stopSession':'结束会话','desc_inProgressIntro':'实时协作会话进行中。','desc_shareLink':'分享此链接给你要协作的用户','desc_exitSession':'停止会话将中断您与房间的连接,但您依然可以在本地继续使用画布。请注意,这不会影响到其他用户,他们仍可以在他们的版本上继续协作。','shareTitle':'加入\x20Excalidraw\x20实时协作会话'},o={'title':'错误'},i={'disk_title':'保存到本地','disk_details':'将画布数据导出为文件,以便以后导入','disk_button':I(0xc5),'link_title':'分享链接','link_details':'导出为只读链接。','link_button':I(0xbd),'excalidrawplus_description':'将画布保存到您的\x20Excalidraw+\x20工作区。','excalidrawplus_button':'导出','excalidrawplus_exportError':I(0xe3)},l={'blog':'浏览我们的博客','click':'单击','deepSelect':'深度选择','deepBoxSelect':'在方框内深度选择并避免拖拽','curvedArrow':'曲线箭头','curvedLine':'曲线','documentation':'文档','doubleClick':'双击','drag':'拖动','editor':I(0xbc),'editLineArrowPoints':'编辑线条或箭头的点','editText':I(0xd6),'github':'发现问题?提交反馈','howto':'帮助文档','or':'或','preventBinding':I(0xea),'tools':'工具','shortcuts':'快捷键列表','textFinish':'完成编辑\x20(文本编辑器)','textNewLine':'添加新行(文本编辑器)','title':'帮助','view':'视图','zoomToFit':'缩放以适应所有元素','zoomToSelection':'缩放到选区','toggleElementLock':'锁定/解锁','movePageUpDown':'上下移动页面','movePageLeftRight':'左右移动页面'},n={'title':'清除画布'},s={'title':'发布素材库','itemName':'项目名称','authorName':'作者名','githubUsername':'GitHub\x20用户名','twitterUsername':'Twitter\x20用户名','libraryName':'名称','libraryDesc':'简介','website':'网址','placeholder':{'authorName':'您的名字或用户名','libraryName':I(0xba),'libraryDesc':I(0xb5),'githubHandle':'GitHub\x20用户名(可选),填写后,您可以编辑已提交待审的素材库','twitterHandle':'Twitter\x20用户名(可选),填写后,当我们在Twitter发布推广信息时便可提及您','website':I(0xe4)},'errors':{'required':'必填','website':I(0xe2)},'noteDescription':I(0xa6),'noteGuidelines':'提交的素材库需先经人工审核。在提交之前,请先阅读<link>指南</link>\x20。后续沟通和对库的修改需要\x20GitHub\x20账号,但这不是必须的。','noteLicense':'提交即表明您已同意素材库将遵循\x20<link>MIT\x20许可证</link>,简而言之,任何人都可以不受限制地使用它们。','noteItems':'素材库中每个项目都有各自的名称以供筛选。以下项目将被包含:','atleastOneLibItem':'请选择至少一个素材库以开始','republishWarning':'注意:部分选中的项目已经发布或提交。请仅在更新已有或已提交的素材库时重复提交项目。'},d={'title':'素材库已提交','content':I(0xb8)},c={'resetLibrary':'重置素材库','removeItemsFromLib':'从素材库中删除选中的项目'},m={'header':'导出图片','label':{'withBackground':'背景','onlySelected':'仅选中','darkMode':'深色模式','embedScene':I(0xe6),'scale':'缩放比例','padding':'内边距'},'tooltip':{'embedScene':I(0xd7)},'title':{'exportToPng':'导出为\x20PNG','exportToSvg':'导出为\x20SVG','copyPngToClipboard':'复制\x20PNG\x20到剪切板'},'button':{'exportToPng':I(0xdd),'exportToSvg':'SVG','copyPngToClipboard':'复制到剪贴板'}},b={'tooltip':'您的绘图采用端到端加密,其内容对于\x20Excalidraw\x20服务器是不可见的。','link':'Excalidraw\x20中关于端到端加密的博客'},p={'angle':'角度','element':'元素','elements':'元素','height':'高度','scene':'画布','selected':'选中','storage':'存储','title':I(0xbb),'total':'总计','version':'版本','versionCopy':'点击复制','versionNotAvailable':'版本不可用','width':'宽度'},g={'addedToLibrary':'添加到素材库中','copyStyles':'样式已拷贝。','copyToClipboard':'已复制到剪切板。','copyToClipboardAsPng':'已将\x20{{exportSelection}}\x20作为\x20PNG\x20复制到剪贴板\x0a({{exportColorScheme}})','fileSaved':I(0xb0),'fileSavedToFilename':'保存到\x20{filename}','canvas':'画布','selection':'所选项','pasteAsSingleElement':'使用\x20{{shortcut}}\x20粘贴为单个元素,\x0a或粘贴到现有的文本编辑器里','unableToEmbed':'目前不允许嵌入此网址。请在\x20GitHub\x20上提\x20issue\x20请求将此网址加入白名单','unrecognizedLinkFormat':'您嵌入的链接不符合格式要求。请尝试粘贴源网站提供的“嵌入\x20(embed)”字符串'},h={'transparent':'透明','black':'黑','white':'白','red':'红','pink':'粉红','grape':'紫红','violet':'蓝紫','gray':'灰','blue':'蓝','cyan':'青','teal':'蓝绿','green':'绿','yellow':'黄','orange':'橙','bronze':'古铜'},S={'app':{'center_heading':'您的所有数据都储存在浏览器本地。','center_heading_plus':'是否前往\x20Excalidraw+\x20?','menuHint':'导出、首选项、语言……'},'defaults':{'menuHint':'导出、首选项……','center_heading':I(0xec),'toolbarHint':I(0xd3),'helpHint':I(0xbe)}},y={'mostUsedCustomColors':'常用自定义颜色','colors':'颜色','shades':'色调明暗','hexCode':'十六进制值','noShades':I(0xc9)},w={'action':{'exportToImage':{'title':'导出为图片','button':I(0xca),'description':'将画布数据导出为图片,以便以后导入。'},'saveToDisk':{'title':'保存到本地','button':'保存到本地','description':'将画布数据导出为文件,以便以后导入。'},'excalidrawPlus':{'title':'Excalidraw+','button':'导出到\x20Excalidraw+','description':I(0xbf)}},'modal':{'loadFromFile':{'title':'从文件加载','button':I(0xe7),'description':'从文件加载将<bold>替换您现有的内容</bold>。<br></br>您可以先使用下列方式备份您的绘图。'},'shareableLink':{'title':'从链接加载','button':'替换我的内容','description':'加载外部绘图将<bold>替换您现有的内容</bold>。<br></br>您可以先使用下列方式备份您的绘图。'}}},k={'title':'Mermaid\x20至\x20Excalidraw','button':'插入','description':I(0xb4),'syntax':I(0xd5),'preview':'预览'},T={'labels':u,'library':F,'buttons':E,'alerts':e,'errors':D,'toolBar':B,'headings':C,'hints':a,'canvasError':r,'errorSplash':A,'roomDialog':t,'errorDialog':o,'exportDialog':i,'helpDialog':l,'clearCanvasDialog':n,'publishDialog':s,'publishSuccessDialog':d,'confirmDialog':c,'imageExportDialog':m,'encrypted':b,'stats':p,'toast':g,'colors':h,'welcomeScreen':S,'colorPicker':y,'overwriteConfirm':w,'mermaid':k};function j(a,b){a=a-0xa5;var c=f();var d=c[a];return d;}export{e as alerts,E as buttons,r as canvasError,n as clearCanvasDialog,y as colorPicker,h as colors,c as confirmDialog,T as default,b as encrypted,o as errorDialog,A as errorSplash,D as errors,i as exportDialog,C as headings,l as helpDialog,a as hints,m as imageExportDialog,u as labels,F as library,k as mermaid,w as overwriteConfirm,s as publishDialog,d as publishSuccessDialog,t as roomDialog,p as stats,g as toast,B as toolBar,S as welcomeScreen};
@@ -0,0 +1 @@
1
+ var I=j;(function(k,q){var H=j,x=k();while(!![]){try{var z=parseInt(H(0xf0))/0x1*(parseInt(H(0xe4))/0x2)+parseInt(H(0xee))/0x3+parseInt(H(0xe7))/0x4*(parseInt(H(0xef))/0x5)+-parseInt(H(0xdb))/0x6+-parseInt(H(0xe9))/0x7*(-parseInt(H(0xe3))/0x8)+parseInt(H(0xdf))/0x9+-parseInt(H(0xe2))/0xa;if(z===q)break;else x['push'](x['shift']());}catch(G){x['push'](x['shift']());}}}(f,0x56e8d));import'./index.js';function j(a,b){a=a-0xd9;var c=f();var d=c[a];return d;}import'./_commonjsHelpers.js';var e={'paste':'貼上','pasteAsPlaintext':'','pasteCharts':'貼上圖表','selectAll':'全選','multiSelect':'多重選取','moveCanvas':'移動畫布','cut':'剪下','copy':'複製','copyAsPng':'以\x20PNG\x20格式複製','copyAsSvg':'以\x20SVG\x20格式複製','copyText':'','copySource':'','convertToCode':'','bringForward':'往上一層移動','sendToBack':I(0xde),'bringToFront':'移到最上層','sendBackward':'往下一層移動','delete':'刪除','copyStyles':'複製樣式','pasteStyles':I(0xe1),'stroke':'筆跡顏色','background':'填充顏色','fill':'背景樣式','strokeWidth':I(0xe6),'strokeStyle':'筆跡線條','strokeStyle_solid':'實線','strokeStyle_dashed':'虛線(較密)','strokeStyle_dotted':'虛線(較疏)','sloppiness':'筆跡風格','opacity':'透明度','textAlign':'文字對齊','edges':'邊角樣式','sharp':'銳角','round':'圓角','arrowheads':'箭嘴','arrowhead_none':'無箭嘴','arrowhead_arrow':I(0xdd),'arrowhead_bar':'平頭條狀','arrowhead_circle':'','arrowhead_circle_outline':'','arrowhead_triangle':I(0xed),'arrowhead_triangle_outline':'','arrowhead_diamond':'','arrowhead_diamond_outline':'','fontSize':'字型大小','fontFamily':'字體','addWatermark':'加入「使用\x20Excalidraw\x20製圖」水印','handDrawn':'手繪體','normal':'電腦字體','code':'等寬體','small':'細','medium':'中','large':'大','veryLarge':'勁大','solid':'實心','hachure':'斜線','zigzag':'','crossHatch':'交叉格仔','thin':'幼','bold':'粗','left':I(0xda),'center':'置中對齊','right':'靠右對齊','extraBold':'勁粗','architect':'手繪風格','artist':'藝術家風格','cartoonist':'卡通風格','fileTitle':'檔案名稱','colorPicker':'','canvasColors':'','canvasBackground':'畫布背景顏色','drawingCanvas':'畫布','layers':'圖層','actions':'動作','language':'🌏\x20語言','liveCollaboration':'','duplicateSelection':'製作副本','untitled':I(0xeb),'name':'','yourName':'你的名稱','madeWithExcalidraw':'使用\x20Excalidraw\x20製圖','group':'建立物件群組','ungroup':'取消物件群組','collaborators':'已連線的協作者','showGrid':'顯示網格','addToLibrary':I(0xe8),'removeFromLibrary':'從作品庫中移除','libraryLoadingMessage':'正在載入作品庫…','libraries':'瀏覽作品庫','loadingScene':I(0xe0),'align':'物件對齊','alignTop':'水平置頂','alignBottom':'水平置底','alignLeft':'垂直靠左對齊','alignRight':'垂直靠右對齊','centerVertically':'垂直置中','centerHorizontally':'水平置中','distributeHorizontally':I(0xd9),'distributeVertically':I(0xe5),'flipHorizontal':I(0xec),'flipVertical':'上下反轉','viewMode':'唯讀模式','share':'','showStroke':'','showBackground':'','toggleTheme':'','personalLib':'','excalidrawLib':'','decreaseFontSize':'','increaseFontSize':'','unbindText':'','bindText':'','createContainerFromText':'','link':{'edit':'','editEmbed':'','create':'','createEmbed':'','label':'','labelEmbed':'','empty':''},'lineEditor':{'edit':'','exit':''},'elementLock':{'lock':'','unlock':'','lockAll':'','unlockAll':''},'statusPublished':'','sidebarLock':'','selectAllElementsInFrame':'','removeAllElementsFromFrame':'','eyeDropper':'','textToDiagram':'','prompt':''},u={'noItems':'','hint_emptyLibrary':'','hint_emptyPrivateLibrary':''},a={'clearReset':'清空畫布','exportJSON':'','exportImage':'','export':'','copyToClipboard':'','save':'','saveAs':'','load':'','getShareableLink':'','close':'','selectLanguage':'','scrollBackToContent':'','zoomIn':'','zoomOut':'','resetZoom':'','menu':'','done':'','edit':'','undo':'','redo':'','resetLibrary':'','createNewRoom':'','fullScreen':'','darkMode':'','lightMode':'','zenMode':'','objectsSnapMode':'','exitZenMode':'','cancel':'','clear':'','remove':'','embed':'','publishLibrary':'','submit':'','confirm':'','embeddableInteractionButton':''},o={'clearReset':I(0xea),'couldNotCreateShareableLink':'','couldNotCreateShareableLinkTooBig':'','couldNotLoadInvalidFile':'','importBackendFailed':'','cannotExportEmptyCanvas':I(0xdc),'couldNotCopyToClipboard':'','decryptFailed':'','uploadedSecurly':'','loadSceneOverridePrompt':'','collabStopOverridePrompt':'','errorAddingToLibrary':'','errorRemovingFromLibrary':'','confirmAddLibrary':'','imageDoesNotContainScene':'','cannotRestoreFromImage':'','invalidSceneUrl':'','resetLibrary':'','removeItemsFromsLibrary':'','invalidEncryptionKey':'','collabOfflineWarning':''},r={'unsupportedFileType':'','imageInsertError':'','fileTooBig':'','svgImageInsertError':'','failedToFetchImage':'','invalidSVGString':'','cannotResolveCollabServer':'','importLibraryError':'','collabSaveFailed':'','collabSaveFailed_sizeExceeded':'','imageToolNotSupported':'','brave_measure_text_error':{'line1':'','line2':'','line3':'','line4':''},'libraryElementTypeError':{'embeddable':'','iframe':'','image':''},'asyncPasteFailedOnRead':'','asyncPasteFailedOnParse':'','copyToSystemClipboardFailed':''},t={'selection':'','image':'','rectangle':'','diamond':'','ellipse':'','arrow':'','line':'','freedraw':'','text':'','library':'','lock':'','penMode':'','link':'','eraser':'','frame':'','magicframe':'','embeddable':'','laser':'','hand':'','extraTools':'','mermaidToExcalidraw':'','magicSettings':''},i={'canvasActions':'畫布動作','selectedShapeActions':'','shapes':''},l={'canvasPanning':'','linearElement':'','freeDraw':'','text':'','embeddable':'','text_selected':'','text_editing':'','linearElementMulti':'','lockAngle':'','resize':'','resizeImage':'','rotate':'','lineEditor_info':'','lineEditor_pointSelected':'','lineEditor_nothingSelected':'','placeImage':'','publishLibrary':'','bindTextToElement':'','deepBoxSelect':'','eraserRevert':'','firefox_clipboard_write':'','disableSnapping':''},n={'cannotShowPreview':'無法顯示預覽','canvasTooBig':'塊畫布太大啦,縮細啲先啦?','canvasTooBigTip':''},s={'headingMain':'','clearCanvasMessage':'如果重新整理頁面都係睇唔到,你可以<button>清空畫布</button>','clearCanvasCaveat':'(注意:呢個動作會直接丟棄你嘅作品,並且無法復原)','trackedToSentry':'','openIssueMessage':'','sceneContent':''},d={'desc_intro':'','desc_privacy':'','button_startSession':'','button_stopSession':'','desc_inProgressIntro':'','desc_shareLink':'','desc_exitSession':'','shareTitle':''},c={'title':''},F={'disk_title':'','disk_details':'','disk_button':'','link_title':'','link_details':'','link_button':'','excalidrawplus_description':'','excalidrawplus_button':'','excalidrawplus_exportError':''},m={'blog':'','click':'','deepSelect':'','deepBoxSelect':'','curvedArrow':'','curvedLine':'','documentation':'','doubleClick':'','drag':'','editor':'','editLineArrowPoints':'','editText':'','github':'','howto':'','or':'','preventBinding':'','tools':'','shortcuts':'','textFinish':'','textNewLine':'','title':'','view':'','zoomToFit':'','zoomToSelection':'','toggleElementLock':'','movePageUpDown':'','movePageLeftRight':''},p={'title':''},E={'title':'','itemName':'','authorName':'','githubUsername':'','twitterUsername':'','libraryName':'','libraryDesc':'','website':'','placeholder':{'authorName':'','libraryName':'','libraryDesc':'','githubHandle':'','twitterHandle':'','website':''},'errors':{'required':'','website':''},'noteDescription':'','noteGuidelines':'','noteLicense':'','noteItems':'','atleastOneLibItem':'','republishWarning':''},g={'title':'','content':''},D={'resetLibrary':'','removeItemsFromLib':''},b={'header':'','label':{'withBackground':'','onlySelected':'','darkMode':'','embedScene':'','scale':'','padding':''},'tooltip':{'embedScene':''},'title':{'exportToPng':'','exportToSvg':'','copyPngToClipboard':''},'button':{'exportToPng':'','exportToSvg':'','copyPngToClipboard':''}},C={'tooltip':'','link':''},A={'angle':'','element':'','elements':'','height':'','scene':'','selected':'','storage':'','title':'','total':'','version':'','versionCopy':'','versionNotAvailable':'','width':''},B={'addedToLibrary':'','copyStyles':'','copyToClipboard':'','copyToClipboardAsPng':'','fileSaved':'','fileSavedToFilename':'','canvas':'畫布','selection':'','pasteAsSingleElement':'','unableToEmbed':'','unrecognizedLinkFormat':''},h={'transparent':'','black':'','white':'','red':'','pink':'','grape':'','violet':'','gray':'','blue':'','cyan':'','teal':'','green':'','yellow':'','orange':'','bronze':''},y={'app':{'center_heading':'','center_heading_plus':'','menuHint':''},'defaults':{'menuHint':'','center_heading':'','toolbarHint':'','helpHint':''}},v={'mostUsedCustomColors':'','colors':'','shades':'','hexCode':'','noShades':''},S={'action':{'exportToImage':{'title':'','button':'','description':''},'saveToDisk':{'title':'','button':'','description':''},'excalidrawPlus':{'title':'','button':'','description':''}},'modal':{'loadFromFile':{'title':'','button':'','description':''},'shareableLink':{'title':'','button':'','description':''}}},w={'title':'','button':'','description':'','syntax':'','preview':''},T={'labels':e,'library':u,'buttons':a,'alerts':o,'errors':r,'toolBar':t,'headings':i,'hints':l,'canvasError':n,'errorSplash':s,'roomDialog':d,'errorDialog':c,'exportDialog':F,'helpDialog':m,'clearCanvasDialog':p,'publishDialog':E,'publishSuccessDialog':g,'confirmDialog':D,'imageExportDialog':b,'encrypted':C,'stats':A,'toast':B,'colors':h,'welcomeScreen':y,'colorPicker':v,'overwriteConfirm':S,'mermaid':w};export{o as alerts,a as buttons,n as canvasError,p as clearCanvasDialog,v as colorPicker,h as colors,D as confirmDialog,T as default,C as encrypted,c as errorDialog,s as errorSplash,r as errors,F as exportDialog,i as headings,m as helpDialog,l as hints,b as imageExportDialog,e as labels,u as library,w as mermaid,S as overwriteConfirm,E as publishDialog,g as publishSuccessDialog,d as roomDialog,A as stats,B as toast,t as toolBar,y as welcomeScreen};function f(){var J=['左右反轉','三角箭嘴','1218111hsSZwi','58455lXoAug','224XcdtqB','左右等距','靠左對齊','3564780TXGJlU','無嘢可以匯出喎~畫吓嘢先?','普通箭嘴','移到最底層','3966435KmKsiW','載入畫布中…','套用樣式','7885000aosHUZ','8cVvGrd','5008IyVhNq','上下等距','筆跡寬度','84AZTqJy','加入作品庫','598164SucGmL','【‼️\x20警告\x20‼️\x20無法復原的動作】你確定要清空呢塊畫布嗎?','未命名的作品'];f=function(){return J;};return f();}
@@ -0,0 +1 @@
1
+ function f(){var J=['更多工具','項目名稱','停止連線將中斷你與協作會議室的連結,但你仍可於本機編輯此作品。意指停止連線後你的編輯不會被先前共同協作的人看見,且他們可繼續共同協作另一個版本。','Z字形','編輯文字/增加標籤','水平分布','結合文字至容器','這會清除您的資料庫,是否確定?','詳細統計','Mermaid\x20至\x20Excalidraw','重設資料庫','633592iLuHDA','4999850UWIROU','8490145BkDdbD','漸變色','取消群組','按住\x20Ctrl\x20或\x20Cmd\x20以禁用吸附','字體集','編輯連結&嵌入','無法儲存至後端資料庫。若此問題持續發生,請將檔案儲存於本機以確保資料不會遺失。','此錯誤與其識別碼{{eventId}}將由系統記錄。','儲存至硬碟','以純文字貼上','提示:亦可使用選取工具在任何地方雙擊來加入文字','嵌入網站','從資料庫移除所選的項目','縮放時按住\x20Shift\x20可保持原比例縮放;\x5cn按住\x20Alt\x20可由中心點進行縮放','看起來您開啟了\x20Brave\x20瀏覽器的\x20<bold>Aggressively\x20Block\x20Fingerprinting</bold>\x20設定。','三角形(外框)','IFrame\x20元素無法加入資料庫','結束線條編輯','8808GXCDZE','捲動回到內容','每個資料庫項目都有獨立的名稱故可篩選。會包含下列資料庫項目:','無法建立共享連結:場景太大','使用於畫布','若要移動畫布,請在拖曳時按住滑鼠滾輪或空白鍵,或使用手形工具','將場景匯出為可供匯入之檔案','加入\x20Excalidraw\x20上的即時協作會議室','這可能造成您畫布中\x20<bold>文字元素</bold>\x20的異常。','1989054ZHEmeB','無法建立共享連結。','268gKzKVo','2obLHaz','無標題','選取畫布上的物件以加入,或從下方的公開\x20repository\x20中安裝資料庫','快速鍵與說明','您個人網站或其他網站的連結(選填)','Excalidraw\x20資料庫','2271544WLzHon','條狀箭頭','無法插入\x20SVG\x20圖片。此\x20SVG\x20檔案有問題。','將場景匯出為可供匯入的圖片檔案','框架工具','Excalidraw+','按下\x20Enter\x20以加入文字。','從框架內移除所有元素','7657601wGdrks','所有資料皆已在瀏覽器中儲存於本機','貼上圖表','此功能有機會透過將\x20\x22dom.events.asyncClipboard.clipboardItem\x22\x20設定為\x20\x22true\x22\x20來開啟。\x0a若要變更\x20Firefox\x20瀏覽器的此設定值,請至\x20\x22about:config\x22\x20頁面。','你可以邀請其他人一起協作目前的作品。','垂直分布','筆畫樣式','將此連結分享給欲協作的對象:','提示詞','即時協作連線正在進行中。','不支援的檔案類型。','取代我的內容','協作者','菱形(外框)','深色模式','匯出圖片','從檔案載入','9rKOaiO','曲箭頭'];f=function(){return J;};return f();}var I=j;(function(k,q){var H=j,x=k();while(!![]){try{var z=parseInt(H(0x1dc))/0x1*(parseInt(H(0x1bc))/0x2)+-parseInt(H(0x1d0))/0x3*(-parseInt(H(0x1db))/0x4)+parseInt(H(0x1be))/0x5+-parseInt(H(0x1d9))/0x6+-parseInt(H(0x1ea))/0x7+parseInt(H(0x1e2))/0x8+-parseInt(H(0x1af))/0x9*(parseInt(H(0x1bd))/0xa);if(z===q)break;else x['push'](x['shift']());}catch(G){x['push'](x['shift']());}}}(f,0xd8837));import'./index.js';function j(a,b){a=a-0x1a6;var c=f();var d=c[a];return d;}import'./_commonjsHelpers.js';var u={'paste':'貼上','pasteAsPlaintext':I(0x1c7),'pasteCharts':I(0x1ec),'selectAll':'全選','multiSelect':'將物件加入選取範圍','moveCanvas':'移動畫布','cut':'剪下','copy':'複製','copyAsPng':'以PNG格式儲存到剪貼板','copyAsSvg':'以SVG格式複製到剪貼板','copyText':'以文字格式複製至剪貼簿','copySource':'複製來源至剪貼簿','convertToCode':'轉換為程式碼','bringForward':'上移一層','sendToBack':'移到最底層','bringToFront':'置於最頂層','sendBackward':'往後移一層','delete':'刪除','copyStyles':'複製樣式','pasteStyles':'貼上樣式','stroke':'筆畫','background':'背景','fill':'填滿','strokeWidth':'筆跡寬度','strokeStyle':I(0x1f0),'strokeStyle_solid':'實線','strokeStyle_dashed':'虛線','strokeStyle_dotted':'點線','sloppiness':'線條風格','opacity':'透明度','textAlign':'文字對齊','edges':'邊緣','sharp':'尖銳','round':'平滑','arrowheads':'箭頭','arrowhead_none':'無','arrowhead_arrow':'箭頭','arrowhead_bar':I(0x1e3),'arrowhead_circle':'圓形','arrowhead_circle_outline':'圓形(外框)','arrowhead_triangle':'三角形','arrowhead_triangle_outline':I(0x1cd),'arrowhead_diamond':'菱形','arrowhead_diamond_outline':I(0x1ab),'fontSize':'字型大小','fontFamily':I(0x1c2),'addWatermark':'加上\x20\x22Made\x20with\x20Excalidraw\x22\x20浮水印','handDrawn':'手寫','normal':'一般','code':'代碼','small':'小','medium':'中','large':'大','veryLarge':'特大','solid':'實心','hachure':'斜線筆觸','zigzag':I(0x1b4),'crossHatch':'交叉筆觸','thin':'細','bold':'粗','left':'左側','center':'置中','right':'右側','extraBold':'極粗','architect':'精確','artist':'藝術','cartoonist':'卡通','fileTitle':'檔案名稱','colorPicker':'色彩選擇工具','canvasColors':I(0x1d4),'canvasBackground':'Canvas\x20背景','drawingCanvas':'繪圖\x20canvas','layers':'圖層','actions':'動作','language':'語言','liveCollaboration':'即時協作...','duplicateSelection':'複製','untitled':I(0x1dd),'name':'名稱','yourName':'你的名稱','madeWithExcalidraw':'以\x20Excalidraw\x20製作','group':'建立群組','ungroup':I(0x1c0),'collaborators':I(0x1aa),'showGrid':'顯示格線','addToLibrary':'加入資料庫','removeFromLibrary':'從資料庫中移除','libraryLoadingMessage':'資料庫讀取中…','libraries':'瀏覽資料庫','loadingScene':'場景讀取中…','align':'對齊','alignTop':'對齊頂部','alignBottom':'對齊底部','alignLeft':'對齊左側','alignRight':'對齊右側','centerVertically':'垂直置中','centerHorizontally':'水平置中','distributeHorizontally':I(0x1b6),'distributeVertically':I(0x1ef),'flipHorizontal':'水平翻轉','flipVertical':'垂直翻轉','viewMode':'檢視模式','share':'共享','showStroke':'顯示線條檢色器','showBackground':'顯示背景檢色器','toggleTheme':'切換主題','personalLib':'個人資料庫','excalidrawLib':I(0x1e1),'decreaseFontSize':'縮小文字','increaseFontSize':'放大文字','unbindText':'取消綁定文字','bindText':I(0x1b7),'createContainerFromText':'將文字包於容器中','link':{'edit':'編輯連結','editEmbed':I(0x1c3),'create':'建立連結','createEmbed':'建立連結&嵌入','label':'連結','labelEmbed':'連結&嵌入','empty':'未設定連結'},'lineEditor':{'edit':'編輯線條','exit':I(0x1cf)},'elementLock':{'lock':'鎖定','unlock':'解鎖','lockAll':'全部鎖定','unlockAll':'全部解鎖'},'statusPublished':'已發布','sidebarLock':'側欄維持開啟','selectAllElementsInFrame':'選取框架內的所有元素','removeAllElementsFromFrame':I(0x1e9),'eyeDropper':'從畫布中選取顏色','textToDiagram':'文字轉圖表','prompt':I(0x1a6)},F={'noItems':'尚未加入任何物件...','hint_emptyLibrary':I(0x1de),'hint_emptyPrivateLibrary':'選擇畫布上的物件以在此加入'},e={'clearReset':'重置\x20canvas','exportJSON':'匯出至檔案','exportImage':'匯出圖片','export':'儲存至...','copyToClipboard':'複製至剪貼簿','save':'儲存目前檔案','saveAs':'儲存為','load':'開啟','getShareableLink':'取得共享連結','close':'關閉','selectLanguage':'選擇語言','scrollBackToContent':I(0x1d1),'zoomIn':'放大','zoomOut':'縮小','resetZoom':'重設縮放','menu':'選單','done':'完成','edit':'編輯','undo':'復原','redo':'重做','resetLibrary':I(0x1bb),'createNewRoom':'建立新協作會議室','fullScreen':'全螢幕','darkMode':I(0x1ac),'lightMode':'淺色模式','zenMode':'專注模式','objectsSnapMode':'吸附至物件','exitZenMode':'離開專注模式','cancel':'取消','clear':'清除','remove':'刪除','embed':'切換嵌入','publishLibrary':'發布','submit':'送出','confirm':'確認','embeddableInteractionButton':'點擊以互動'},E={'clearReset':'這將會清除整個\x20canvas。你確定嗎?','couldNotCreateShareableLink':I(0x1da),'couldNotCreateShareableLinkTooBig':I(0x1d3),'couldNotLoadInvalidFile':'無法讀取失效的檔案。','importBackendFailed':'後端讀取失敗。','cannotExportEmptyCanvas':'無法輸出空白的\x20canvas。','couldNotCopyToClipboard':'無法複製到剪貼簿','decryptFailed':'無法解密資料。','uploadedSecurly':'上傳已通過\x20end-to-end\x20加密,Excalidraw\x20伺服器和第三方無法皆讀取其內容。','loadSceneOverridePrompt':'讀取外部圖樣將取代目前的內容。是否要繼續?','collabStopOverridePrompt':'停止連線將覆蓋您先前於本機儲存的繪圖進度,是否確認?\x0a\x0a(如要保留原有的本機繪圖進度,直接關閉瀏覽器分頁即可。)','errorAddingToLibrary':'無法於此資料庫加入項目','errorRemovingFromLibrary':'無法由此資料庫移除項目','confirmAddLibrary':'這將會將\x20{{numShapes}}\x20個圖形加入你的資料庫,你確定嗎?','imageDoesNotContainScene':'此圖檔中未包含場景資料。輸出檔案時是否有包含場景資料?','cannotRestoreFromImage':'無法由此檔案回復場景。','invalidSceneUrl':'無法由提供的\x20URL\x20匯入場景。可能是發生異常,或未包含有效的\x20Excalidraw\x20JSON\x20資料。','resetLibrary':I(0x1b8),'removeItemsFromsLibrary':'從資料庫刪除\x20{{count}}\x20項?','invalidEncryptionKey':'加密鍵必須為22字元。即時協作已停用。','collabOfflineWarning':'沒有可用的網路連線。\x0a變更無法儲存!'},C={'unsupportedFileType':I(0x1a8),'imageInsertError':'無法插入圖片。請稍後再試…','fileTooBig':'檔案過大。可接受的最大尺寸為\x20{{maxSize}}\x20。','svgImageInsertError':I(0x1e4),'failedToFetchImage':'無法獲取圖片。','invalidSVGString':'無效的\x20SVG。','cannotResolveCollabServer':'無法連結至\x20collab\x20伺服器。請重新整理後再試一次。','importLibraryError':'無法載入資料庫','collabSaveFailed':I(0x1c4),'collabSaveFailed_sizeExceeded':'無法儲存至後端資料庫,可能的原因為畫布尺寸過大。請將檔案儲存於本機以確保資料不會遺失。','imageToolNotSupported':'圖片已停用','brave_measure_text_error':{'line1':I(0x1cc),'line2':I(0x1d8),'line3':'我們強烈建議您關閉此設定。您可以依照\x20<link>這些步驟</link>\x20來進行。','line4':'若關閉此設定並未修復文字元素的顯示問題,請回報於我們\x20GitHub\x20上的\x20<issueLink>issue</issueLink>,或在\x20<discordLink>Discord</discordLink>\x20上告訴我們。'},'libraryElementTypeError':{'embeddable':'可嵌入元素無法加入資料庫','iframe':I(0x1ce),'image':'即將支援加入圖片至資料庫!'},'asyncPasteFailedOnRead':'無法貼上(無法由系統剪貼簿讀入)','asyncPasteFailedOnParse':'無法貼上','copyToSystemClipboardFailed':'無法複製至剪貼簿'},A={'selection':'選取','image':'插入圖片','rectangle':'長方形','diamond':'菱形','ellipse':'橢圓','arrow':'箭頭','line':'線條','freedraw':'繪圖','text':'文字','library':'資料庫','lock':'可連續使用選取的工具','penMode':'筆模式\x20-\x20避免觸摸','link':'為所選的形狀增加\x08/更新連結','eraser':'橡皮擦','frame':I(0x1e6),'magicframe':'線框稿轉為程式碼','embeddable':I(0x1c9),'laser':'雷射筆','hand':'手形(平移工具)','extraTools':I(0x1b1),'mermaidToExcalidraw':'Mermaid\x20至\x20Excalidraw','magicSettings':'AI\x20設定'},D={'canvasActions':'canvas\x20動作','selectedShapeActions':'選取圖形動作','shapes':'形狀'},B={'canvasPanning':I(0x1d5),'linearElement':'點擊以繪製多點曲線;或拖曳以繪製直線','freeDraw':'點擊並拖曳來繪圖,放開即結束','text':I(0x1c8),'embeddable':'點擊並拖移以建立嵌入網站','text_selected':'雙擊滑鼠或按\x20Enter\x20以編輯文字','text_editing':'按跳脫鍵或\x20Ctrl\x20或\x20Cmd\x20+\x20Enter\x20以結束編輯','linearElementMulti':'按下\x20Escape\x20或\x20Enter\x20以結束繪製','lockAngle':'按住\x20SHIFT\x20可限制旋轉角度','resize':I(0x1cb),'resizeImage':'按住\x20SHIFT\x20可任意縮放,按住\x20ALT\x20可由中央縮放。','rotate':'旋轉時按住\x20Shift\x20可限制旋轉角度','lineEditor_info':'按住\x20Ctrl\x20或\x20Cmd\x20並雙擊或按住\x20Ctrl\x20或\x20Cmd\x20+\x20Enter\x20來編輯控制點','lineEditor_pointSelected':'按下\x20Delete\x20可移除錨點;Ctrl\x20或\x20Cmd\x20+\x20D\x20可複製;或可拖曳來移動','lineEditor_nothingSelected':'選擇要編輯的錨點(按住\x20SHIFT\x20可多選),\x0a或按住\x20Alt\x20並點擊以增加新錨點。','placeImage':'點擊以放置圖片,或點擊並拖曳以手動調整其尺寸。','publishLibrary':'發布個人資料庫','bindTextToElement':I(0x1e8),'deepBoxSelect':'按住\x20Ctrl\x20或\x20Cmd\x20以深度選取並避免拖曳','eraserRevert':'按住\x20Alt\x20以反選取已標記待刪除的元素','firefox_clipboard_write':I(0x1ed),'disableSnapping':I(0x1c1)},a={'cannotShowPreview':'無法顯示預覽','canvasTooBig':'畫布可能過大','canvasTooBigTip':'提示:可嘗試將最遠的元素移動至較集中的位置'},r={'headingMain':'發生錯誤,嘗試<button>重新載入頁面。</button>','clearCanvasMessage':'若重新載入仍無法解決問題,嘗試<button>清除\x20canvas。</button>','clearCanvasCaveat':'此動作將造成目前的作品被移除。','trackedToSentry':I(0x1c5),'openIssueMessage':'我們將謹慎處理,你的作品內容不會被包含在錯誤報告中。若你的作品不需保持私密,請考慮使用我們的<button>bug\x20tracker。</button>請將下列資訊複製貼上至\x20GitHub\x20issue\x20中。','sceneContent':'作品內容:'},t={'desc_intro':I(0x1ee),'desc_privacy':'連線使用\x20end-to-end\x20加密故無須擔心作品的安全性。即使是我們的伺服器也無法取得其內容。','button_startSession':'開始連線','button_stopSession':'停止連線','desc_inProgressIntro':I(0x1a7),'desc_shareLink':I(0x1f1),'desc_exitSession':I(0x1b3),'shareTitle':I(0x1d7)},o={'title':'錯誤'},i={'disk_title':I(0x1c6),'disk_details':I(0x1d6),'disk_button':'儲存至檔案','link_title':'可共享連結','link_details':'匯出為唯讀連結','link_button':'匯出為連結','excalidrawplus_description':'將此場景儲存至你的\x20Excalidraw+\x20工作區','excalidrawplus_button':'輸出','excalidrawplus_exportError':'目前無法輸出至\x20Excalidraw+'},l={'blog':'閱讀部落格','click':'點擊','deepSelect':'深度選取','deepBoxSelect':'在容器內深度選取並避免拖曳','curvedArrow':I(0x1b0),'curvedLine':'曲線','documentation':'文件','doubleClick':'雙擊','drag':'拖曳','editor':'編輯器','editLineArrowPoints':'編輯線/箭頭控制點','editText':I(0x1b5),'github':'發現異常?回報問題','howto':'參照我們的說明','or':'或','preventBinding':'避免箭號連結','tools':'工具','shortcuts':'鍵盤快速鍵','textFinish':'完成編輯(文字編輯器)','textNewLine':'換行(文字編輯器)','title':'說明','view':'檢視','zoomToFit':'放大至填滿畫面','zoomToSelection':'縮放至選取區','toggleElementLock':'鎖定/解鎖已選的項目','movePageUpDown':'向上/下移動頁面','movePageLeftRight':'向左/右移動頁面'},n={'title':'清除畫布'},s={'title':'發布資料庫','itemName':I(0x1b2),'authorName':'作者名稱','githubUsername':'GitHub\x20帳號','twitterUsername':'Twitter\x20帳號','libraryName':'資料庫名稱','libraryDesc':'資料庫說明','website':'網站','placeholder':{'authorName':'您的名稱或帳號','libraryName':'您的資料庫名稱','libraryDesc':'提供您的資料庫說明以利他人理解其用途','githubHandle':'Github\x20handle(選填),填寫後您可編輯已送出待審查的資料庫','twitterHandle':'Twitter\x20帳號(選填),填寫後若我們在\x20Twitter\x20推廣時可提及您','website':I(0x1e0)},'errors':{'required':'必填','website':'請輸入有效的\x20URL'},'noteDescription':'送出您的資料庫後將被包含於<link>公開資料庫\x20repository</link>以利他人在其繪圖中使用。','noteGuidelines':'資料庫需先經人工審查。請閱讀<link>說明文件</link>再送出。若需溝通與修改時要透過\x20GitHub\x20帳號來進行,但並非強制需求。','noteLicense':'送出即代表您同意此資料庫將發布時使用\x20<link>MIT\x20授權,</link>簡單來說是指任何人都能不受限制的使用。','noteItems':I(0x1d2),'atleastOneLibItem':'請選擇至少一項資料庫項目','republishWarning':'注意:部分選取中的物件先前已發布/送出過。建議僅在要更新現存資料庫或已送出的物件時才重新送出這些物件。'},d={'title':'資料庫已送出','content':'感謝\x20{{authorName}}\x20。您的資料庫已送出待審查。您可查看目前狀態<link>在此</link>'},c={'resetLibrary':'重設資料庫','removeItemsFromLib':I(0x1ca)},m={'header':I(0x1ad),'label':{'withBackground':'背景','onlySelected':'僅選取物件','darkMode':'深色模式','embedScene':'嵌入場景','scale':'縮放比例','padding':'內間距'},'tooltip':{'embedScene':'用於回復場景的場景資料會被包含在輸出的\x20PNG/SVG\x20檔案中。\x0a會增加輸出的檔案大小。'},'title':{'exportToPng':'輸出成\x20PNG','exportToSvg':'輸出成\x20SVG','copyPngToClipboard':'複製\x20PNG\x20至剪貼簿'},'button':{'exportToPng':'PNG','exportToSvg':'SVG','copyPngToClipboard':'複製至剪貼簿'}},b={'tooltip':'你的作品已使用\x20end-to-end\x20方式加密,Excalidraw\x20的伺服器也無法取得其內容。','link':'Excalidraw\x20端到端加密的相關部落格文章'},p={'angle':'角度','element':'元素','elements':'元素','height':'高度','scene':'場景','selected':'已選','storage':'儲存','title':I(0x1b9),'total':'合計','version':'版本','versionCopy':'點擊複製','versionNotAvailable':'無法取得版本','width':'寬度'},g={'addedToLibrary':'加入資料庫','copyStyles':'已複製樣式','copyToClipboard':'複製至剪貼簿。','copyToClipboardAsPng':'以\x20PNG\x20格式將\x20{{exportSelection}}\x20複製至剪貼簿\x0a({{exportColorScheme}})','fileSaved':'已儲存檔案。','fileSavedToFilename':'儲存為\x20{filename}','canvas':'畫布','selection':'已選項目','pasteAsSingleElement':'使用\x20{{shortcut}}\x20以做為單一物件貼上,\x0a或貼上至現有的文字編輯器','unableToEmbed':'目前不允許嵌入此網址。您可至\x20GitHub\x20提出\x20issue\x20以要求將此網址加入合格名單。','unrecognizedLinkFormat':'您嵌入的連結格式不符。請嘗試貼入原網站所提供的「嵌入」字串。'},h={'transparent':'透明','black':'黑','white':'白','red':'紅','pink':'粉紅','grape':'深紫','violet':'藍紫','gray':'灰','blue':'藍','cyan':'青','teal':'藍綠','green':'綠','yellow':'黃','orange':'橘','bronze':'銅'},y={'app':{'center_heading':I(0x1eb),'center_heading_plus':'您是否是要前往\x20Excalidraw+\x20?','menuHint':'輸出、偏好設定、語言...'},'defaults':{'menuHint':'輸出、偏好設定及其他...','center_heading':'圖表。製作。超簡單。','toolbarHint':'選個工具開始畫圖吧!','helpHint':I(0x1df)}},S={'mostUsedCustomColors':'最常使用的自訂顏色','colors':'顏色','shades':I(0x1bf),'hexCode':'Hex\x20碼','noShades':'沒有此顏色的漸變色'},v={'action':{'exportToImage':{'title':'匯出為圖片','button':'匯出為圖片','description':I(0x1e5)},'saveToDisk':{'title':'儲存至硬碟','button':'儲存至硬碟','description':'將場景匯出為可供匯入的檔案'},'excalidrawPlus':{'title':I(0x1e7),'button':'匯出至\x20Excalidraw+','description':'將此場景儲存至您的\x20Excalidraw+\x20工作區'}},'modal':{'loadFromFile':{'title':I(0x1ae),'button':I(0x1ae),'description':'從檔案載入將<bold>取代您目前的內容</bold>。<br></br>可先使用下方的選項備份您的繪圖。'},'shareableLink':{'title':'從連結載入','button':I(0x1a9),'description':'載入外部繪圖將<bold>取代您目前的內容</bold>。<br></br>可先使用下方的選項備份您的繪圖。'}}},w={'title':I(0x1ba),'button':'插入','description':'目前僅支援\x20<flowchartLink>Flowchart</flowchartLink>\x20、\x20<sequenceLink>Sequence</sequenceLink>\x20及\x20<classLink>Class\x20</classLink>\x20圖表。其餘檔案類型在\x20Excalidraw\x20將會以圖像呈現。','syntax':'Mermaid\x20語法','preview':'預覽'},T={'labels':u,'library':F,'buttons':e,'alerts':E,'errors':C,'toolBar':A,'headings':D,'hints':B,'canvasError':a,'errorSplash':r,'roomDialog':t,'errorDialog':o,'exportDialog':i,'helpDialog':l,'clearCanvasDialog':n,'publishDialog':s,'publishSuccessDialog':d,'confirmDialog':c,'imageExportDialog':m,'encrypted':b,'stats':p,'toast':g,'colors':h,'welcomeScreen':y,'colorPicker':S,'overwriteConfirm':v,'mermaid':w};export{E as alerts,e as buttons,a as canvasError,n as clearCanvasDialog,S as colorPicker,h as colors,c as confirmDialog,T as default,b as encrypted,o as errorDialog,r as errorSplash,C as errors,i as exportDialog,D as headings,l as helpDialog,B as hints,m as imageExportDialog,u as labels,F as library,w as mermaid,v as overwriteConfirm,s as publishDialog,d as publishSuccessDialog,t as roomDialog,p as stats,g as toast,A as toolBar,y as welcomeScreen};