lean4monaco 1.0.35 → 1.0.37

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 (598) hide show
  1. package/README.md +1 -1
  2. package/dist/css/custom.css +13 -0
  3. package/dist/css/vscode_webview.css +106 -0
  4. package/dist/infowebview.js +3 -0
  5. package/dist/{lean4-infoview → vscode-lean4/lean4-infoview/dist}/index.css +213 -8
  6. package/dist/vscode-lean4/lean4-infoview/src/infoview/highlightjs.css +210 -0
  7. package/dist/vscode-lean4/lean4-unicode-input/dist/abbreviations.json +1829 -0
  8. package/dist/vscode-lean4/vscode-lean4/dist/lean4-infoview/codicon.ttf +0 -0
  9. package/dist/vscode-lean4/vscode-lean4/dist/lean4-infoview/index.css +4366 -0
  10. package/dist/vscode-lean4/vscode-lean4/dist/loogleview/static/codicons/codicon.css +571 -0
  11. package/dist/vscode-lean4/vscode-lean4/dist/loogleview/static/codicons/codicon.svg +1 -0
  12. package/dist/vscode-lean4/vscode-lean4/dist/loogleview/static/codicons/codicon.ttf +0 -0
  13. package/dist/vscode-lean4/vscode-lean4/dist/loogleview/static/index.css +97 -0
  14. package/dist/vscode-lean4/vscode-lean4/dist/moogleview/static/codicons/codicon.css +571 -0
  15. package/dist/vscode-lean4/vscode-lean4/dist/moogleview/static/codicons/codicon.svg +1 -0
  16. package/dist/vscode-lean4/vscode-lean4/dist/moogleview/static/codicons/codicon.ttf +0 -0
  17. package/dist/vscode-lean4/vscode-lean4/dist/moogleview/static/index.css +198 -0
  18. package/dist/vscode-lean4/vscode-lean4/moogleview/static/index.css +198 -0
  19. package/dist/vscode-lean4/vscode-lean4/moogleview/tsconfig.json +10 -0
  20. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/keywords.transforms.json +83 -0
  21. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/keywords.variables.json +47 -0
  22. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/manifest.json +36 -0
  23. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/manifest.transforms.json +368 -0
  24. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/_iconCloud/manifest.variables.json +149 -0
  25. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/dist/codicon.css +629 -0
  26. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/dist/codicon.svg +1 -0
  27. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/dist/codicon.ttf +0 -0
  28. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/package.json +35 -0
  29. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/account.svg +1 -0
  30. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/activate-breakpoints.svg +1 -0
  31. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/add.svg +1 -0
  32. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/archive.svg +1 -0
  33. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-both.svg +1 -0
  34. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-circle-down.svg +1 -0
  35. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-circle-left.svg +1 -0
  36. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-circle-right.svg +1 -0
  37. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-circle-up.svg +1 -0
  38. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-down.svg +1 -0
  39. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-left.svg +1 -0
  40. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-right.svg +1 -0
  41. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-small-down.svg +1 -0
  42. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-small-left.svg +1 -0
  43. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-small-right.svg +1 -0
  44. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-small-up.svg +1 -0
  45. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-swap.svg +1 -0
  46. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/arrow-up.svg +1 -0
  47. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/azure-devops.svg +1 -0
  48. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/azure.svg +1 -0
  49. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/beaker-stop.svg +1 -0
  50. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/beaker.svg +1 -0
  51. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bell-dot.svg +1 -0
  52. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bell-slash-dot.svg +1 -0
  53. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bell-slash.svg +1 -0
  54. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bell.svg +1 -0
  55. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/blank.svg +1 -0
  56. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bold.svg +1 -0
  57. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/book.svg +1 -0
  58. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bookmark.svg +1 -0
  59. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bracket-dot.svg +1 -0
  60. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bracket-error.svg +1 -0
  61. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/briefcase.svg +1 -0
  62. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/broadcast.svg +1 -0
  63. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/browser.svg +1 -0
  64. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/bug.svg +1 -0
  65. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/calendar.svg +1 -0
  66. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/call-incoming.svg +1 -0
  67. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/call-outgoing.svg +1 -0
  68. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/case-sensitive.svg +1 -0
  69. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/check-all.svg +1 -0
  70. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/check.svg +1 -0
  71. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/checklist.svg +1 -0
  72. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chevron-down.svg +1 -0
  73. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chevron-left.svg +1 -0
  74. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chevron-right.svg +1 -0
  75. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chevron-up.svg +1 -0
  76. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chip.svg +1 -0
  77. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chrome-close.svg +1 -0
  78. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chrome-maximize.svg +1 -0
  79. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chrome-minimize.svg +1 -0
  80. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/chrome-restore.svg +1 -0
  81. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-filled.svg +1 -0
  82. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-large-filled.svg +1 -0
  83. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-large.svg +1 -0
  84. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-slash.svg +1 -0
  85. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-small-filled.svg +1 -0
  86. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle-small.svg +1 -0
  87. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circle.svg +1 -0
  88. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/circuit-board.svg +1 -0
  89. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/clear-all.svg +1 -0
  90. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/clippy.svg +1 -0
  91. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/close-all.svg +1 -0
  92. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/close.svg +1 -0
  93. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/cloud-download.svg +1 -0
  94. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/cloud-upload.svg +1 -0
  95. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/cloud.svg +1 -0
  96. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/code-oss.svg +1 -0
  97. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/code.svg +1 -0
  98. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/coffee.svg +1 -0
  99. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/collapse-all.svg +1 -0
  100. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/color-mode.svg +1 -0
  101. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/combine.svg +1 -0
  102. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/comment-discussion.svg +1 -0
  103. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/comment-draft.svg +1 -0
  104. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/comment-unresolved.svg +1 -0
  105. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/comment.svg +1 -0
  106. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/compass-active.svg +1 -0
  107. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/compass-dot.svg +1 -0
  108. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/compass.svg +1 -0
  109. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/copilot.svg +1 -0
  110. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/copy.svg +1 -0
  111. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/coverage.svg +1 -0
  112. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/credit-card.svg +1 -0
  113. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/dash.svg +1 -0
  114. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/dashboard.svg +1 -0
  115. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/database.svg +1 -0
  116. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-all.svg +1 -0
  117. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-alt-small.svg +1 -0
  118. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-alt.svg +1 -0
  119. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-conditional-unverified.svg +1 -0
  120. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-conditional.svg +1 -0
  121. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-data-unverified.svg +1 -0
  122. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-data.svg +1 -0
  123. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-function-unverified.svg +1 -0
  124. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-function.svg +1 -0
  125. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-log-unverified.svg +1 -0
  126. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-log.svg +1 -0
  127. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-breakpoint-unsupported.svg +1 -0
  128. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-console.svg +1 -0
  129. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-continue-small.svg +1 -0
  130. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-continue.svg +1 -0
  131. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-coverage.svg +1 -0
  132. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-disconnect.svg +1 -0
  133. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-line-by-line.svg +1 -0
  134. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-pause.svg +1 -0
  135. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-rerun.svg +1 -0
  136. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-restart-frame.svg +1 -0
  137. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-restart.svg +1 -0
  138. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-reverse-continue.svg +1 -0
  139. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-stackframe-active.svg +1 -0
  140. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-stackframe.svg +1 -0
  141. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-start.svg +1 -0
  142. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-step-back.svg +1 -0
  143. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-step-into.svg +1 -0
  144. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-step-out.svg +1 -0
  145. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-step-over.svg +1 -0
  146. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug-stop.svg +1 -0
  147. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/debug.svg +1 -0
  148. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/desktop-download.svg +1 -0
  149. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/device-camera-video.svg +1 -0
  150. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/device-camera.svg +1 -0
  151. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/device-mobile.svg +1 -0
  152. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-added.svg +1 -0
  153. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-ignored.svg +1 -0
  154. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-modified.svg +1 -0
  155. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-multiple.svg +1 -0
  156. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-removed.svg +1 -0
  157. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-renamed.svg +1 -0
  158. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff-single.svg +1 -0
  159. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/diff.svg +1 -0
  160. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/discard.svg +1 -0
  161. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/edit.svg +1 -0
  162. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/editor-layout.svg +1 -0
  163. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/ellipsis.svg +1 -0
  164. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/empty-window.svg +1 -0
  165. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/error-small.svg +1 -0
  166. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/error.svg +1 -0
  167. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/exclude.svg +1 -0
  168. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/expand-all.svg +1 -0
  169. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/export.svg +1 -0
  170. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/extensions.svg +1 -0
  171. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/eye-closed.svg +1 -0
  172. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/eye.svg +1 -0
  173. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/feedback.svg +1 -0
  174. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-binary.svg +1 -0
  175. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-code.svg +1 -0
  176. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-media.svg +1 -0
  177. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-pdf.svg +1 -0
  178. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-submodule.svg +1 -0
  179. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-symlink-directory.svg +1 -0
  180. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-symlink-file.svg +1 -0
  181. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file-zip.svg +1 -0
  182. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/file.svg +1 -0
  183. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/files.svg +1 -0
  184. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/filter-filled.svg +1 -0
  185. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/filter.svg +1 -0
  186. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/flame.svg +1 -0
  187. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/fold-down.svg +1 -0
  188. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/fold-up.svg +1 -0
  189. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/fold.svg +1 -0
  190. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/folder-active.svg +1 -0
  191. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/folder-library.svg +1 -0
  192. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/folder-opened.svg +1 -0
  193. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/folder.svg +1 -0
  194. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/game.svg +1 -0
  195. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gear.svg +1 -0
  196. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gift.svg +1 -0
  197. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gist-secret.svg +1 -0
  198. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gist.svg +1 -0
  199. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-commit.svg +1 -0
  200. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-compare.svg +1 -0
  201. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-fetch.svg +1 -0
  202. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-merge.svg +1 -0
  203. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-closed.svg +1 -0
  204. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-create.svg +1 -0
  205. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-draft.svg +1 -0
  206. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-go-to-changes.svg +1 -0
  207. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request-new-changes.svg +1 -0
  208. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-pull-request.svg +1 -0
  209. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-stash-apply.svg +1 -0
  210. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-stash-pop.svg +1 -0
  211. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/git-stash.svg +1 -0
  212. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github-action.svg +1 -0
  213. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github-alt.svg +1 -0
  214. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github-inverted.svg +1 -0
  215. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github-project.svg +1 -0
  216. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/github.svg +1 -0
  217. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/globe.svg +1 -0
  218. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/go-to-file.svg +1 -0
  219. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/go-to-search.svg +1 -0
  220. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/grabber.svg +1 -0
  221. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/graph-left.svg +1 -0
  222. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/graph-line.svg +1 -0
  223. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/graph-scatter.svg +1 -0
  224. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/graph.svg +1 -0
  225. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/gripper.svg +1 -0
  226. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/group-by-ref-type.svg +1 -0
  227. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/heart-filled.svg +1 -0
  228. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/heart.svg +1 -0
  229. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/history.svg +1 -0
  230. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/home.svg +1 -0
  231. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/horizontal-rule.svg +1 -0
  232. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/hubot.svg +1 -0
  233. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/inbox.svg +1 -0
  234. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/indent.svg +1 -0
  235. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/info.svg +1 -0
  236. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/insert.svg +1 -0
  237. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/inspect.svg +1 -0
  238. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/issue-draft.svg +1 -0
  239. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/issue-reopened.svg +1 -0
  240. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/issues.svg +1 -0
  241. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/italic.svg +1 -0
  242. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/jersey.svg +1 -0
  243. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/json.svg +1 -0
  244. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/kebab-vertical.svg +1 -0
  245. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/key.svg +1 -0
  246. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/law.svg +1 -0
  247. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layers-active.svg +1 -0
  248. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layers-dot.svg +1 -0
  249. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layers.svg +1 -0
  250. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-activitybar-left.svg +1 -0
  251. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-activitybar-right.svg +1 -0
  252. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-centered.svg +1 -0
  253. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-menubar.svg +1 -0
  254. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-center.svg +1 -0
  255. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-justify.svg +1 -0
  256. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-left.svg +1 -0
  257. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-off.svg +1 -0
  258. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel-right.svg +1 -0
  259. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-panel.svg +1 -0
  260. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-sidebar-left-off.svg +1 -0
  261. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-sidebar-left.svg +1 -0
  262. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-sidebar-right-off.svg +1 -0
  263. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-sidebar-right.svg +1 -0
  264. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout-statusbar.svg +1 -0
  265. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/layout.svg +1 -0
  266. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/library.svg +1 -0
  267. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lightbulb-autofix.svg +1 -0
  268. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lightbulb-sparkle.svg +1 -0
  269. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lightbulb.svg +1 -0
  270. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/link-external.svg +1 -0
  271. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/link.svg +1 -0
  272. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-filter.svg +1 -0
  273. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-flat.svg +1 -0
  274. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-ordered.svg +1 -0
  275. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-selection.svg +1 -0
  276. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-tree.svg +1 -0
  277. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/list-unordered.svg +1 -0
  278. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/live-share.svg +1 -0
  279. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/loading.svg +1 -0
  280. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/location.svg +1 -0
  281. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lock-small.svg +1 -0
  282. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/lock.svg +1 -0
  283. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/magnet.svg +1 -0
  284. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mail-read.svg +1 -0
  285. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mail.svg +1 -0
  286. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/map-filled.svg +1 -0
  287. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/map-vertical-filled.svg +1 -0
  288. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/map-vertical.svg +1 -0
  289. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/map.svg +1 -0
  290. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/markdown.svg +1 -0
  291. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/megaphone.svg +1 -0
  292. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mention.svg +1 -0
  293. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/menu.svg +1 -0
  294. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/merge.svg +1 -0
  295. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mic-filled.svg +1 -0
  296. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mic.svg +1 -0
  297. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/milestone.svg +1 -0
  298. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mirror.svg +1 -0
  299. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mortar-board.svg +1 -0
  300. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/move.svg +1 -0
  301. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/multiple-windows.svg +1 -0
  302. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/music.svg +1 -0
  303. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/mute.svg +1 -0
  304. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/new-file.svg +1 -0
  305. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/new-folder.svg +1 -0
  306. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/newline.svg +1 -0
  307. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/no-newline.svg +1 -0
  308. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/note.svg +1 -0
  309. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/notebook-template.svg +1 -0
  310. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/notebook.svg +1 -0
  311. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/octoface.svg +1 -0
  312. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/open-preview.svg +1 -0
  313. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/organization.svg +1 -0
  314. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/output.svg +1 -0
  315. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/package.svg +1 -0
  316. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/paintcan.svg +1 -0
  317. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pass-filled.svg +1 -0
  318. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pass.svg +1 -0
  319. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/percentage.svg +1 -0
  320. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/person-add.svg +1 -0
  321. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/person.svg +1 -0
  322. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/piano.svg +1 -0
  323. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pie-chart.svg +1 -0
  324. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pin.svg +1 -0
  325. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pinned-dirty.svg +1 -0
  326. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pinned.svg +1 -0
  327. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/play-circle.svg +1 -0
  328. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/play.svg +1 -0
  329. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/plug.svg +1 -0
  330. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/preserve-case.svg +1 -0
  331. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/preview.svg +1 -0
  332. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/primitive-square.svg +1 -0
  333. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/project.svg +1 -0
  334. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/pulse.svg +1 -0
  335. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/question.svg +1 -0
  336. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/quote.svg +1 -0
  337. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/radio-tower.svg +1 -0
  338. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/reactions.svg +1 -0
  339. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/record-keys.svg +1 -0
  340. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/record-small.svg +1 -0
  341. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/record.svg +1 -0
  342. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/redo.svg +1 -0
  343. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/references.svg +1 -0
  344. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/refresh.svg +1 -0
  345. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/regex.svg +1 -0
  346. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/remote-explorer.svg +1 -0
  347. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/remote.svg +1 -0
  348. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/remove.svg +1 -0
  349. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/replace-all.svg +1 -0
  350. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/replace.svg +1 -0
  351. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/reply.svg +1 -0
  352. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-clone.svg +1 -0
  353. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-fetch.svg +1 -0
  354. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-force-push.svg +1 -0
  355. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-forked.svg +1 -0
  356. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-pull.svg +1 -0
  357. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo-push.svg +1 -0
  358. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/repo.svg +1 -0
  359. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/report.svg +1 -0
  360. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/request-changes.svg +1 -0
  361. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/robot.svg +1 -0
  362. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/rocket.svg +1 -0
  363. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/root-folder-opened.svg +1 -0
  364. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/root-folder.svg +1 -0
  365. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/rss.svg +1 -0
  366. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/ruby.svg +1 -0
  367. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-above.svg +1 -0
  368. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-all-coverage.svg +1 -0
  369. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-all.svg +1 -0
  370. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-below.svg +1 -0
  371. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-coverage.svg +1 -0
  372. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/run-errors.svg +1 -0
  373. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/save-all.svg +1 -0
  374. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/save-as.svg +1 -0
  375. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/save.svg +1 -0
  376. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/screen-full.svg +1 -0
  377. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/screen-normal.svg +1 -0
  378. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/search-fuzzy.svg +1 -0
  379. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/search-stop.svg +1 -0
  380. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/search.svg +1 -0
  381. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/send.svg +1 -0
  382. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/server-environment.svg +1 -0
  383. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/server-process.svg +1 -0
  384. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/server.svg +1 -0
  385. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/settings-gear.svg +1 -0
  386. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/settings.svg +1 -0
  387. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/share.svg +1 -0
  388. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/shield.svg +1 -0
  389. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sign-in.svg +1 -0
  390. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sign-out.svg +1 -0
  391. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/smiley.svg +1 -0
  392. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/snake.svg +1 -0
  393. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sort-precedence.svg +1 -0
  394. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/source-control.svg +1 -0
  395. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sparkle-filled.svg +1 -0
  396. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sparkle.svg +1 -0
  397. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/split-horizontal.svg +1 -0
  398. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/split-vertical.svg +1 -0
  399. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/squirrel.svg +1 -0
  400. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/star-empty.svg +1 -0
  401. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/star-full.svg +1 -0
  402. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/star-half.svg +1 -0
  403. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/stop-circle.svg +1 -0
  404. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/surround-with.svg +1 -0
  405. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-array.svg +1 -0
  406. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-boolean.svg +1 -0
  407. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-class.svg +1 -0
  408. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-color.svg +1 -0
  409. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-constant.svg +1 -0
  410. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-enum-member.svg +1 -0
  411. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-enum.svg +1 -0
  412. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-event.svg +1 -0
  413. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-field.svg +1 -0
  414. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-file.svg +1 -0
  415. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-interface.svg +1 -0
  416. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-key.svg +1 -0
  417. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-keyword.svg +1 -0
  418. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-method.svg +1 -0
  419. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-misc.svg +1 -0
  420. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-namespace.svg +1 -0
  421. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-numeric.svg +1 -0
  422. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-operator.svg +1 -0
  423. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-parameter.svg +1 -0
  424. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-property.svg +1 -0
  425. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-ruler.svg +1 -0
  426. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-snippet.svg +1 -0
  427. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-string.svg +1 -0
  428. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-structure.svg +1 -0
  429. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/symbol-variable.svg +1 -0
  430. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sync-ignored.svg +1 -0
  431. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/sync.svg +1 -0
  432. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/table.svg +1 -0
  433. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/tag.svg +1 -0
  434. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/target.svg +1 -0
  435. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/tasklist.svg +1 -0
  436. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/telescope.svg +1 -0
  437. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-bash.svg +1 -0
  438. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-cmd.svg +1 -0
  439. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-debian.svg +1 -0
  440. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-linux.svg +1 -0
  441. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-powershell.svg +1 -0
  442. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-tmux.svg +1 -0
  443. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal-ubuntu.svg +1 -0
  444. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/terminal.svg +1 -0
  445. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/text-size.svg +1 -0
  446. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/three-bars.svg +1 -0
  447. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/thumbsdown-filled.svg +1 -0
  448. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/thumbsdown.svg +1 -0
  449. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/thumbsup-filled.svg +1 -0
  450. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/thumbsup.svg +1 -0
  451. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/tools.svg +1 -0
  452. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/trash.svg +1 -0
  453. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/triangle-down.svg +1 -0
  454. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/triangle-left.svg +1 -0
  455. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/triangle-right.svg +1 -0
  456. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/triangle-up.svg +1 -0
  457. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/twitter.svg +1 -0
  458. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/type-hierarchy-sub.svg +1 -0
  459. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/type-hierarchy-super.svg +1 -0
  460. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/type-hierarchy.svg +1 -0
  461. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/unfold.svg +1 -0
  462. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/ungroup-by-ref-type.svg +1 -0
  463. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/unlock.svg +1 -0
  464. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/unmute.svg +1 -0
  465. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/unverified.svg +1 -0
  466. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/variable-group.svg +1 -0
  467. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/verified-filled.svg +1 -0
  468. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/verified.svg +1 -0
  469. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/versions.svg +1 -0
  470. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm-active.svg +1 -0
  471. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm-connect.svg +1 -0
  472. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm-outline.svg +1 -0
  473. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm-running.svg +1 -0
  474. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vm.svg +1 -0
  475. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vr.svg +1 -0
  476. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vscode-insiders.svg +1 -0
  477. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/vscode.svg +1 -0
  478. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/wand.svg +1 -0
  479. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/warning.svg +1 -0
  480. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/watch.svg +1 -0
  481. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/whitespace.svg +1 -0
  482. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/whole-word.svg +1 -0
  483. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/window.svg +1 -0
  484. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/word-wrap.svg +1 -0
  485. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/workspace-trusted.svg +1 -0
  486. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/workspace-unknown.svg +1 -0
  487. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/workspace-untrusted.svg +1 -0
  488. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/zoom-in.svg +1 -0
  489. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/icons/zoom-out.svg +1 -0
  490. package/dist/vscode-lean4/vscode-lean4/node_modules/@vscode/codicons/src/template/mapping.json +571 -0
  491. package/dist/vscode-lean4/vscode-lean4/node_modules/glob/dist/commonjs/package.json +3 -0
  492. package/dist/vscode-lean4/vscode-lean4/node_modules/glob/dist/esm/package.json +3 -0
  493. package/dist/vscode-lean4/vscode-lean4/node_modules/glob/package.json +98 -0
  494. package/dist/vscode-lean4/vscode-lean4/node_modules/jackspeak/dist/commonjs/package.json +3 -0
  495. package/dist/vscode-lean4/vscode-lean4/node_modules/jackspeak/dist/esm/package.json +3 -0
  496. package/dist/vscode-lean4/vscode-lean4/node_modules/jackspeak/package.json +94 -0
  497. package/dist/vscode-lean4/vscode-lean4/node_modules/lru-cache/dist/commonjs/package.json +3 -0
  498. package/dist/vscode-lean4/vscode-lean4/node_modules/lru-cache/dist/esm/package.json +3 -0
  499. package/dist/vscode-lean4/vscode-lean4/node_modules/lru-cache/package.json +115 -0
  500. package/dist/vscode-lean4/vscode-lean4/node_modules/minimatch/dist/commonjs/package.json +3 -0
  501. package/dist/vscode-lean4/vscode-lean4/node_modules/minimatch/dist/esm/package.json +3 -0
  502. package/dist/vscode-lean4/vscode-lean4/node_modules/minimatch/package.json +80 -0
  503. package/dist/vscode-lean4/vscode-lean4/node_modules/path-scurry/dist/commonjs/package.json +3 -0
  504. package/dist/vscode-lean4/vscode-lean4/node_modules/path-scurry/dist/esm/package.json +3 -0
  505. package/dist/vscode-lean4/vscode-lean4/node_modules/path-scurry/package.json +88 -0
  506. package/dist/{monaco-lean4/vscode-lean4/src/utils/batch.d.ts → vscode-lean4/vscode-lean4/src/utils/batchBasics.d.ts} +11 -8
  507. package/dist/vscode-lean4/vscode-lean4/src/utils/batchBasics.js +48 -0
  508. package/dist/vscode-lean4/vscode-lean4/src/utils/batchTypes.d.ts +14 -0
  509. package/dist/vscode-lean4/vscode-lean4/src/utils/batchTypes.js +22 -0
  510. package/dist/vscode-lean4/vscode-lean4/src/utils/groupBy.d.ts +2 -0
  511. package/dist/vscode-lean4/vscode-lean4/src/utils/groupBy.js +17 -0
  512. package/dist/vscode-lean4/vscode-lean4/src/utils/leanCmdRunner.d.ts +34 -0
  513. package/dist/vscode-lean4/vscode-lean4/src/utils/leanCmdRunner.js +249 -0
  514. package/dist/vscode-lean4/vscode-lean4/src/utils/leanEditorProvider.d.ts +83 -0
  515. package/dist/vscode-lean4/vscode-lean4/src/utils/leanEditorProvider.js +323 -0
  516. package/dist/vscode-lean4/vscode-lean4/src/utils/viewColumn.d.ts +3 -0
  517. package/dist/vscode-lean4/vscode-lean4/src/utils/viewColumn.js +22 -0
  518. package/package.json +1 -1
  519. package/dist/JuliaMono-Regular.ttf +0 -0
  520. package/dist/lean4-infoview/esm-shims/react-dom.d.ts +0 -5
  521. package/dist/lean4-infoview/esm-shims/react-jsx-runtime.d.ts +0 -5
  522. package/dist/lean4-infoview/esm-shims/react.d.ts +0 -5
  523. package/dist/lean4-infoview/index.d.ts +0 -16
  524. package/dist/lean4-infoview/index.development.js +0 -37312
  525. package/dist/lean4-infoview/index.production.min.js +0 -1528
  526. package/dist/lean4-infoview/infoview/collapsing.d.ts +0 -12
  527. package/dist/lean4-infoview/infoview/contexts.d.ts +0 -10
  528. package/dist/lean4-infoview/infoview/editorConnection.d.ts +0 -22
  529. package/dist/lean4-infoview/infoview/errors.d.ts +0 -14
  530. package/dist/lean4-infoview/infoview/event.d.ts +0 -33
  531. package/dist/lean4-infoview/infoview/goalLocation.d.ts +0 -61
  532. package/dist/lean4-infoview/infoview/goals.d.ts +0 -46
  533. package/dist/lean4-infoview/infoview/info.d.ts +0 -18
  534. package/dist/lean4-infoview/infoview/infos.d.ts +0 -2
  535. package/dist/lean4-infoview/infoview/interactiveCode.d.ts +0 -19
  536. package/dist/lean4-infoview/infoview/main.d.ts +0 -13
  537. package/dist/lean4-infoview/infoview/messages.d.ts +0 -19
  538. package/dist/lean4-infoview/infoview/rpcSessions.d.ts +0 -11
  539. package/dist/lean4-infoview/infoview/serverVersion.d.ts +0 -10
  540. package/dist/lean4-infoview/infoview/tooltips.d.ts +0 -32
  541. package/dist/lean4-infoview/infoview/traceExplorer.d.ts +0 -11
  542. package/dist/lean4-infoview/infoview/userWidget.d.ts +0 -39
  543. package/dist/lean4-infoview/infoview/util.d.ts +0 -144
  544. package/dist/lean4-infoview/loader.d.ts +0 -20
  545. package/dist/lean4-infoview/loader.development.js +0 -1006
  546. package/dist/lean4-infoview/loader.production.min.js +0 -1
  547. package/dist/lean4-infoview/react-dom.development.js +0 -30537
  548. package/dist/lean4-infoview/react-dom.production.min.js +0 -21
  549. package/dist/lean4-infoview/react-jsx-runtime.development.js +0 -1362
  550. package/dist/lean4-infoview/react-jsx-runtime.production.min.js +0 -1
  551. package/dist/lean4-infoview/react.development.js +0 -2823
  552. package/dist/lean4-infoview/react.production.min.js +0 -1
  553. package/dist/monaco-lean4/vscode-lean4/package.json +0 -944
  554. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.d.ts +0 -9
  555. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationFeature.js +0 -20
  556. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationHoverProvider.d.ts +0 -12
  557. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationHoverProvider.js +0 -40
  558. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.d.ts +0 -20
  559. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/AbbreviationRewriterFeature.js +0 -79
  560. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationConfig.d.ts +0 -13
  561. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationConfig.js +0 -29
  562. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.d.ts +0 -28
  563. package/dist/monaco-lean4/vscode-lean4/src/abbreviation/VSCodeAbbreviationRewriter.js +0 -124
  564. package/dist/monaco-lean4/vscode-lean4/src/config.d.ts +0 -33
  565. package/dist/monaco-lean4/vscode-lean4/src/config.js +0 -119
  566. package/dist/monaco-lean4/vscode-lean4/src/diagnostics/setupNotifs.d.ts +0 -27
  567. package/dist/monaco-lean4/vscode-lean4/src/diagnostics/setupNotifs.js +0 -133
  568. package/dist/monaco-lean4/vscode-lean4/src/infoview.d.ts +0 -69
  569. package/dist/monaco-lean4/vscode-lean4/src/infoview.js +0 -711
  570. package/dist/monaco-lean4/vscode-lean4/src/leanclient.d.ts +0 -67
  571. package/dist/monaco-lean4/vscode-lean4/src/leanclient.js +0 -443
  572. package/dist/monaco-lean4/vscode-lean4/src/rpc.d.ts +0 -16
  573. package/dist/monaco-lean4/vscode-lean4/src/rpc.js +0 -102
  574. package/dist/monaco-lean4/vscode-lean4/src/taskgutter.d.ts +0 -11
  575. package/dist/monaco-lean4/vscode-lean4/src/taskgutter.js +0 -130
  576. package/dist/monaco-lean4/vscode-lean4/src/utils/batch.js +0 -203
  577. package/dist/monaco-lean4/vscode-lean4/src/utils/clientProvider.d.ts +0 -41
  578. package/dist/monaco-lean4/vscode-lean4/src/utils/clientProvider.js +0 -205
  579. package/dist/monaco-lean4/vscode-lean4/src/utils/converters.d.ts +0 -16
  580. package/dist/monaco-lean4/vscode-lean4/src/utils/converters.js +0 -129
  581. package/dist/monaco-lean4/vscode-lean4/src/utils/elan.d.ts +0 -3
  582. package/dist/monaco-lean4/vscode-lean4/src/utils/elan.js +0 -4
  583. package/dist/monaco-lean4/vscode-lean4/src/utils/envPath.d.ts +0 -21
  584. package/dist/monaco-lean4/vscode-lean4/src/utils/envPath.js +0 -53
  585. package/dist/monaco-lean4/vscode-lean4/src/utils/exturi.d.ts +0 -35
  586. package/dist/monaco-lean4/vscode-lean4/src/utils/exturi.js +0 -136
  587. package/dist/monaco-lean4/vscode-lean4/src/utils/fsHelper.d.ts +0 -17
  588. package/dist/monaco-lean4/vscode-lean4/src/utils/fsHelper.js +0 -36
  589. package/dist/monaco-lean4/vscode-lean4/src/utils/leanInstaller.d.ts +0 -37
  590. package/dist/monaco-lean4/vscode-lean4/src/utils/leanInstaller.js +0 -210
  591. package/dist/monaco-lean4/vscode-lean4/src/utils/logger.d.ts +0 -7
  592. package/dist/monaco-lean4/vscode-lean4/src/utils/logger.js +0 -20
  593. package/dist/monaco-lean4/vscode-lean4/src/utils/notifs.d.ts +0 -24
  594. package/dist/monaco-lean4/vscode-lean4/src/utils/notifs.js +0 -110
  595. package/dist/monaco-lean4/vscode-lean4/src/utils/projectInfo.d.ts +0 -9
  596. package/dist/monaco-lean4/vscode-lean4/src/utils/projectInfo.js +0 -125
  597. package/dist/vscode.css +0 -7
  598. /package/dist/{lean4-infoview → vscode-lean4/lean4-infoview/dist}/codicon.ttf +0 -0
@@ -1,1362 +0,0 @@
1
- import require$$0 from 'react';
2
-
3
- function _mergeNamespaces(n, m) {
4
- m.forEach(function (e) {
5
- e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {
6
- if (k !== 'default' && !(k in n)) {
7
- var d = Object.getOwnPropertyDescriptor(e, k);
8
- Object.defineProperty(n, k, d.get ? d : {
9
- enumerable: true,
10
- get: function () { return e[k]; }
11
- });
12
- }
13
- });
14
- });
15
- return Object.freeze(n);
16
- }
17
-
18
- function getDefaultExportFromCjs (x) {
19
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
20
- }
21
-
22
- var jsxRuntimeExports = {};
23
- var jsxRuntime$1 = {
24
- get exports(){ return jsxRuntimeExports; },
25
- set exports(v){ jsxRuntimeExports = v; },
26
- };
27
-
28
- var reactJsxRuntime_development = {};
29
-
30
- /**
31
- * @license React
32
- * react-jsx-runtime.development.js
33
- *
34
- * Copyright (c) Facebook, Inc. and its affiliates.
35
- *
36
- * This source code is licensed under the MIT license found in the
37
- * LICENSE file in the root directory of this source tree.
38
- */
39
-
40
- {
41
- (function() {
42
-
43
- var React = require$$0;
44
-
45
- // ATTENTION
46
- // When adding new symbols to this file,
47
- // Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
48
- // The Symbol used to tag the ReactElement-like types.
49
- var REACT_ELEMENT_TYPE = Symbol.for('react.element');
50
- var REACT_PORTAL_TYPE = Symbol.for('react.portal');
51
- var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');
52
- var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
53
- var REACT_PROFILER_TYPE = Symbol.for('react.profiler');
54
- var REACT_PROVIDER_TYPE = Symbol.for('react.provider');
55
- var REACT_CONTEXT_TYPE = Symbol.for('react.context');
56
- var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
57
- var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
58
- var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
59
- var REACT_MEMO_TYPE = Symbol.for('react.memo');
60
- var REACT_LAZY_TYPE = Symbol.for('react.lazy');
61
- var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');
62
- var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
63
- var FAUX_ITERATOR_SYMBOL = '@@iterator';
64
- function getIteratorFn(maybeIterable) {
65
- if (maybeIterable === null || typeof maybeIterable !== 'object') {
66
- return null;
67
- }
68
-
69
- var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
70
-
71
- if (typeof maybeIterator === 'function') {
72
- return maybeIterator;
73
- }
74
-
75
- return null;
76
- }
77
-
78
- var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
79
-
80
- function error(format) {
81
- {
82
- {
83
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
84
- args[_key2 - 1] = arguments[_key2];
85
- }
86
-
87
- printWarning('error', format, args);
88
- }
89
- }
90
- }
91
-
92
- function printWarning(level, format, args) {
93
- // When changing this logic, you might want to also
94
- // update consoleWithStackDev.www.js as well.
95
- {
96
- var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
97
- var stack = ReactDebugCurrentFrame.getStackAddendum();
98
-
99
- if (stack !== '') {
100
- format += '%s';
101
- args = args.concat([stack]);
102
- } // eslint-disable-next-line react-internal/safe-string-coercion
103
-
104
-
105
- var argsWithFormat = args.map(function (item) {
106
- return String(item);
107
- }); // Careful: RN currently depends on this prefix
108
-
109
- argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
110
- // breaks IE9: https://github.com/facebook/react/issues/13610
111
- // eslint-disable-next-line react-internal/no-production-logging
112
-
113
- Function.prototype.apply.call(console[level], console, argsWithFormat);
114
- }
115
- }
116
-
117
- // -----------------------------------------------------------------------------
118
-
119
- var enableScopeAPI = false; // Experimental Create Event Handle API.
120
- var enableCacheElement = false;
121
- var enableTransitionTracing = false; // No known bugs, but needs performance testing
122
-
123
- var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber
124
- // stuff. Intended to enable React core members to more easily debug scheduling
125
- // issues in DEV builds.
126
-
127
- var enableDebugTracing = false; // Track which Fiber(s) schedule render work.
128
-
129
- var REACT_MODULE_REFERENCE;
130
-
131
- {
132
- REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');
133
- }
134
-
135
- function isValidElementType(type) {
136
- if (typeof type === 'string' || typeof type === 'function') {
137
- return true;
138
- } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
139
-
140
-
141
- if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {
142
- return true;
143
- }
144
-
145
- if (typeof type === 'object' && type !== null) {
146
- if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
147
- // types supported by any Flight configuration anywhere since
148
- // we don't know which Flight build this will end up being used
149
- // with.
150
- type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {
151
- return true;
152
- }
153
- }
154
-
155
- return false;
156
- }
157
-
158
- function getWrappedName(outerType, innerType, wrapperName) {
159
- var displayName = outerType.displayName;
160
-
161
- if (displayName) {
162
- return displayName;
163
- }
164
-
165
- var functionName = innerType.displayName || innerType.name || '';
166
- return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName;
167
- } // Keep in sync with react-reconciler/getComponentNameFromFiber
168
-
169
-
170
- function getContextName(type) {
171
- return type.displayName || 'Context';
172
- } // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.
173
-
174
-
175
- function getComponentNameFromType(type) {
176
- if (type == null) {
177
- // Host root, text node or just invalid type.
178
- return null;
179
- }
180
-
181
- {
182
- if (typeof type.tag === 'number') {
183
- error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');
184
- }
185
- }
186
-
187
- if (typeof type === 'function') {
188
- return type.displayName || type.name || null;
189
- }
190
-
191
- if (typeof type === 'string') {
192
- return type;
193
- }
194
-
195
- switch (type) {
196
- case REACT_FRAGMENT_TYPE:
197
- return 'Fragment';
198
-
199
- case REACT_PORTAL_TYPE:
200
- return 'Portal';
201
-
202
- case REACT_PROFILER_TYPE:
203
- return 'Profiler';
204
-
205
- case REACT_STRICT_MODE_TYPE:
206
- return 'StrictMode';
207
-
208
- case REACT_SUSPENSE_TYPE:
209
- return 'Suspense';
210
-
211
- case REACT_SUSPENSE_LIST_TYPE:
212
- return 'SuspenseList';
213
-
214
- }
215
-
216
- if (typeof type === 'object') {
217
- switch (type.$$typeof) {
218
- case REACT_CONTEXT_TYPE:
219
- var context = type;
220
- return getContextName(context) + '.Consumer';
221
-
222
- case REACT_PROVIDER_TYPE:
223
- var provider = type;
224
- return getContextName(provider._context) + '.Provider';
225
-
226
- case REACT_FORWARD_REF_TYPE:
227
- return getWrappedName(type, type.render, 'ForwardRef');
228
-
229
- case REACT_MEMO_TYPE:
230
- var outerName = type.displayName || null;
231
-
232
- if (outerName !== null) {
233
- return outerName;
234
- }
235
-
236
- return getComponentNameFromType(type.type) || 'Memo';
237
-
238
- case REACT_LAZY_TYPE:
239
- {
240
- var lazyComponent = type;
241
- var payload = lazyComponent._payload;
242
- var init = lazyComponent._init;
243
-
244
- try {
245
- return getComponentNameFromType(init(payload));
246
- } catch (x) {
247
- return null;
248
- }
249
- }
250
-
251
- // eslint-disable-next-line no-fallthrough
252
- }
253
- }
254
-
255
- return null;
256
- }
257
-
258
- var assign = Object.assign;
259
-
260
- // Helpers to patch console.logs to avoid logging during side-effect free
261
- // replaying on render function. This currently only patches the object
262
- // lazily which won't cover if the log function was extracted eagerly.
263
- // We could also eagerly patch the method.
264
- var disabledDepth = 0;
265
- var prevLog;
266
- var prevInfo;
267
- var prevWarn;
268
- var prevError;
269
- var prevGroup;
270
- var prevGroupCollapsed;
271
- var prevGroupEnd;
272
-
273
- function disabledLog() {}
274
-
275
- disabledLog.__reactDisabledLog = true;
276
- function disableLogs() {
277
- {
278
- if (disabledDepth === 0) {
279
- /* eslint-disable react-internal/no-production-logging */
280
- prevLog = console.log;
281
- prevInfo = console.info;
282
- prevWarn = console.warn;
283
- prevError = console.error;
284
- prevGroup = console.group;
285
- prevGroupCollapsed = console.groupCollapsed;
286
- prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099
287
-
288
- var props = {
289
- configurable: true,
290
- enumerable: true,
291
- value: disabledLog,
292
- writable: true
293
- }; // $FlowFixMe Flow thinks console is immutable.
294
-
295
- Object.defineProperties(console, {
296
- info: props,
297
- log: props,
298
- warn: props,
299
- error: props,
300
- group: props,
301
- groupCollapsed: props,
302
- groupEnd: props
303
- });
304
- /* eslint-enable react-internal/no-production-logging */
305
- }
306
-
307
- disabledDepth++;
308
- }
309
- }
310
- function reenableLogs() {
311
- {
312
- disabledDepth--;
313
-
314
- if (disabledDepth === 0) {
315
- /* eslint-disable react-internal/no-production-logging */
316
- var props = {
317
- configurable: true,
318
- enumerable: true,
319
- writable: true
320
- }; // $FlowFixMe Flow thinks console is immutable.
321
-
322
- Object.defineProperties(console, {
323
- log: assign({}, props, {
324
- value: prevLog
325
- }),
326
- info: assign({}, props, {
327
- value: prevInfo
328
- }),
329
- warn: assign({}, props, {
330
- value: prevWarn
331
- }),
332
- error: assign({}, props, {
333
- value: prevError
334
- }),
335
- group: assign({}, props, {
336
- value: prevGroup
337
- }),
338
- groupCollapsed: assign({}, props, {
339
- value: prevGroupCollapsed
340
- }),
341
- groupEnd: assign({}, props, {
342
- value: prevGroupEnd
343
- })
344
- });
345
- /* eslint-enable react-internal/no-production-logging */
346
- }
347
-
348
- if (disabledDepth < 0) {
349
- error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
350
- }
351
- }
352
- }
353
-
354
- var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
355
- var prefix;
356
- function describeBuiltInComponentFrame(name, source, ownerFn) {
357
- {
358
- if (prefix === undefined) {
359
- // Extract the VM specific prefix used by each line.
360
- try {
361
- throw Error();
362
- } catch (x) {
363
- var match = x.stack.trim().match(/\n( *(at )?)/);
364
- prefix = match && match[1] || '';
365
- }
366
- } // We use the prefix to ensure our stacks line up with native stack frames.
367
-
368
-
369
- return '\n' + prefix + name;
370
- }
371
- }
372
- var reentry = false;
373
- var componentFrameCache;
374
-
375
- {
376
- var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
377
- componentFrameCache = new PossiblyWeakMap();
378
- }
379
-
380
- function describeNativeComponentFrame(fn, construct) {
381
- // If something asked for a stack inside a fake render, it should get ignored.
382
- if ( !fn || reentry) {
383
- return '';
384
- }
385
-
386
- {
387
- var frame = componentFrameCache.get(fn);
388
-
389
- if (frame !== undefined) {
390
- return frame;
391
- }
392
- }
393
-
394
- var control;
395
- reentry = true;
396
- var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.
397
-
398
- Error.prepareStackTrace = undefined;
399
- var previousDispatcher;
400
-
401
- {
402
- previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function
403
- // for warnings.
404
-
405
- ReactCurrentDispatcher.current = null;
406
- disableLogs();
407
- }
408
-
409
- try {
410
- // This should throw.
411
- if (construct) {
412
- // Something should be setting the props in the constructor.
413
- var Fake = function () {
414
- throw Error();
415
- }; // $FlowFixMe
416
-
417
-
418
- Object.defineProperty(Fake.prototype, 'props', {
419
- set: function () {
420
- // We use a throwing setter instead of frozen or non-writable props
421
- // because that won't throw in a non-strict mode function.
422
- throw Error();
423
- }
424
- });
425
-
426
- if (typeof Reflect === 'object' && Reflect.construct) {
427
- // We construct a different control for this case to include any extra
428
- // frames added by the construct call.
429
- try {
430
- Reflect.construct(Fake, []);
431
- } catch (x) {
432
- control = x;
433
- }
434
-
435
- Reflect.construct(fn, [], Fake);
436
- } else {
437
- try {
438
- Fake.call();
439
- } catch (x) {
440
- control = x;
441
- }
442
-
443
- fn.call(Fake.prototype);
444
- }
445
- } else {
446
- try {
447
- throw Error();
448
- } catch (x) {
449
- control = x;
450
- }
451
-
452
- fn();
453
- }
454
- } catch (sample) {
455
- // This is inlined manually because closure doesn't do it for us.
456
- if (sample && control && typeof sample.stack === 'string') {
457
- // This extracts the first frame from the sample that isn't also in the control.
458
- // Skipping one frame that we assume is the frame that calls the two.
459
- var sampleLines = sample.stack.split('\n');
460
- var controlLines = control.stack.split('\n');
461
- var s = sampleLines.length - 1;
462
- var c = controlLines.length - 1;
463
-
464
- while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
465
- // We expect at least one stack frame to be shared.
466
- // Typically this will be the root most one. However, stack frames may be
467
- // cut off due to maximum stack limits. In this case, one maybe cut off
468
- // earlier than the other. We assume that the sample is longer or the same
469
- // and there for cut off earlier. So we should find the root most frame in
470
- // the sample somewhere in the control.
471
- c--;
472
- }
473
-
474
- for (; s >= 1 && c >= 0; s--, c--) {
475
- // Next we find the first one that isn't the same which should be the
476
- // frame that called our sample function and the control.
477
- if (sampleLines[s] !== controlLines[c]) {
478
- // In V8, the first line is describing the message but other VMs don't.
479
- // If we're about to return the first line, and the control is also on the same
480
- // line, that's a pretty good indicator that our sample threw at same line as
481
- // the control. I.e. before we entered the sample frame. So we ignore this result.
482
- // This can happen if you passed a class to function component, or non-function.
483
- if (s !== 1 || c !== 1) {
484
- do {
485
- s--;
486
- c--; // We may still have similar intermediate frames from the construct call.
487
- // The next one that isn't the same should be our match though.
488
-
489
- if (c < 0 || sampleLines[s] !== controlLines[c]) {
490
- // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
491
- var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "<anonymous>"
492
- // but we have a user-provided "displayName"
493
- // splice it in to make the stack more readable.
494
-
495
-
496
- if (fn.displayName && _frame.includes('<anonymous>')) {
497
- _frame = _frame.replace('<anonymous>', fn.displayName);
498
- }
499
-
500
- {
501
- if (typeof fn === 'function') {
502
- componentFrameCache.set(fn, _frame);
503
- }
504
- } // Return the line we found.
505
-
506
-
507
- return _frame;
508
- }
509
- } while (s >= 1 && c >= 0);
510
- }
511
-
512
- break;
513
- }
514
- }
515
- }
516
- } finally {
517
- reentry = false;
518
-
519
- {
520
- ReactCurrentDispatcher.current = previousDispatcher;
521
- reenableLogs();
522
- }
523
-
524
- Error.prepareStackTrace = previousPrepareStackTrace;
525
- } // Fallback to just using the name if we couldn't make it throw.
526
-
527
-
528
- var name = fn ? fn.displayName || fn.name : '';
529
- var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';
530
-
531
- {
532
- if (typeof fn === 'function') {
533
- componentFrameCache.set(fn, syntheticFrame);
534
- }
535
- }
536
-
537
- return syntheticFrame;
538
- }
539
- function describeFunctionComponentFrame(fn, source, ownerFn) {
540
- {
541
- return describeNativeComponentFrame(fn, false);
542
- }
543
- }
544
-
545
- function shouldConstruct(Component) {
546
- var prototype = Component.prototype;
547
- return !!(prototype && prototype.isReactComponent);
548
- }
549
-
550
- function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
551
-
552
- if (type == null) {
553
- return '';
554
- }
555
-
556
- if (typeof type === 'function') {
557
- {
558
- return describeNativeComponentFrame(type, shouldConstruct(type));
559
- }
560
- }
561
-
562
- if (typeof type === 'string') {
563
- return describeBuiltInComponentFrame(type);
564
- }
565
-
566
- switch (type) {
567
- case REACT_SUSPENSE_TYPE:
568
- return describeBuiltInComponentFrame('Suspense');
569
-
570
- case REACT_SUSPENSE_LIST_TYPE:
571
- return describeBuiltInComponentFrame('SuspenseList');
572
- }
573
-
574
- if (typeof type === 'object') {
575
- switch (type.$$typeof) {
576
- case REACT_FORWARD_REF_TYPE:
577
- return describeFunctionComponentFrame(type.render);
578
-
579
- case REACT_MEMO_TYPE:
580
- // Memo may contain any component type so we recursively resolve it.
581
- return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
582
-
583
- case REACT_LAZY_TYPE:
584
- {
585
- var lazyComponent = type;
586
- var payload = lazyComponent._payload;
587
- var init = lazyComponent._init;
588
-
589
- try {
590
- // Lazy may contain any component type so we recursively resolve it.
591
- return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
592
- } catch (x) {}
593
- }
594
- }
595
- }
596
-
597
- return '';
598
- }
599
-
600
- var hasOwnProperty = Object.prototype.hasOwnProperty;
601
-
602
- var loggedTypeFailures = {};
603
- var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
604
-
605
- function setCurrentlyValidatingElement(element) {
606
- {
607
- if (element) {
608
- var owner = element._owner;
609
- var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
610
- ReactDebugCurrentFrame.setExtraStackFrame(stack);
611
- } else {
612
- ReactDebugCurrentFrame.setExtraStackFrame(null);
613
- }
614
- }
615
- }
616
-
617
- function checkPropTypes(typeSpecs, values, location, componentName, element) {
618
- {
619
- // $FlowFixMe This is okay but Flow doesn't know it.
620
- var has = Function.call.bind(hasOwnProperty);
621
-
622
- for (var typeSpecName in typeSpecs) {
623
- if (has(typeSpecs, typeSpecName)) {
624
- var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
625
- // fail the render phase where it didn't fail before. So we log it.
626
- // After these have been cleaned up, we'll let them throw.
627
-
628
- try {
629
- // This is intentionally an invariant that gets caught. It's the same
630
- // behavior as without this statement except with a better message.
631
- if (typeof typeSpecs[typeSpecName] !== 'function') {
632
- // eslint-disable-next-line react-internal/prod-error-codes
633
- var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
634
- err.name = 'Invariant Violation';
635
- throw err;
636
- }
637
-
638
- error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
639
- } catch (ex) {
640
- error$1 = ex;
641
- }
642
-
643
- if (error$1 && !(error$1 instanceof Error)) {
644
- setCurrentlyValidatingElement(element);
645
-
646
- error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);
647
-
648
- setCurrentlyValidatingElement(null);
649
- }
650
-
651
- if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
652
- // Only monitor this failure once because there tends to be a lot of the
653
- // same error.
654
- loggedTypeFailures[error$1.message] = true;
655
- setCurrentlyValidatingElement(element);
656
-
657
- error('Failed %s type: %s', location, error$1.message);
658
-
659
- setCurrentlyValidatingElement(null);
660
- }
661
- }
662
- }
663
- }
664
- }
665
-
666
- var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare
667
-
668
- function isArray(a) {
669
- return isArrayImpl(a);
670
- }
671
-
672
- /*
673
- * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol
674
- * and Temporal.* types. See https://github.com/facebook/react/pull/22064.
675
- *
676
- * The functions in this module will throw an easier-to-understand,
677
- * easier-to-debug exception with a clear errors message message explaining the
678
- * problem. (Instead of a confusing exception thrown inside the implementation
679
- * of the `value` object).
680
- */
681
- // $FlowFixMe only called in DEV, so void return is not possible.
682
- function typeName(value) {
683
- {
684
- // toStringTag is needed for namespaced types like Temporal.Instant
685
- var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;
686
- var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';
687
- return type;
688
- }
689
- } // $FlowFixMe only called in DEV, so void return is not possible.
690
-
691
-
692
- function willCoercionThrow(value) {
693
- {
694
- try {
695
- testStringCoercion(value);
696
- return false;
697
- } catch (e) {
698
- return true;
699
- }
700
- }
701
- }
702
-
703
- function testStringCoercion(value) {
704
- // If you ended up here by following an exception call stack, here's what's
705
- // happened: you supplied an object or symbol value to React (as a prop, key,
706
- // DOM attribute, CSS property, string ref, etc.) and when React tried to
707
- // coerce it to a string using `'' + value`, an exception was thrown.
708
- //
709
- // The most common types that will cause this exception are `Symbol` instances
710
- // and Temporal objects like `Temporal.Instant`. But any object that has a
711
- // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this
712
- // exception. (Library authors do this to prevent users from using built-in
713
- // numeric operators like `+` or comparison operators like `>=` because custom
714
- // methods are needed to perform accurate arithmetic or comparison.)
715
- //
716
- // To fix the problem, coerce this object or symbol value to a string before
717
- // passing it to React. The most reliable way is usually `String(value)`.
718
- //
719
- // To find which value is throwing, check the browser or debugger console.
720
- // Before this exception was thrown, there should be `console.error` output
721
- // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the
722
- // problem and how that type was used: key, atrribute, input value prop, etc.
723
- // In most cases, this console output also shows the component and its
724
- // ancestor components where the exception happened.
725
- //
726
- // eslint-disable-next-line react-internal/safe-string-coercion
727
- return '' + value;
728
- }
729
- function checkKeyStringCoercion(value) {
730
- {
731
- if (willCoercionThrow(value)) {
732
- error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));
733
-
734
- return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
735
- }
736
- }
737
- }
738
-
739
- var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
740
- var RESERVED_PROPS = {
741
- key: true,
742
- ref: true,
743
- __self: true,
744
- __source: true
745
- };
746
- var specialPropKeyWarningShown;
747
- var specialPropRefWarningShown;
748
- var didWarnAboutStringRefs;
749
-
750
- {
751
- didWarnAboutStringRefs = {};
752
- }
753
-
754
- function hasValidRef(config) {
755
- {
756
- if (hasOwnProperty.call(config, 'ref')) {
757
- var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
758
-
759
- if (getter && getter.isReactWarning) {
760
- return false;
761
- }
762
- }
763
- }
764
-
765
- return config.ref !== undefined;
766
- }
767
-
768
- function hasValidKey(config) {
769
- {
770
- if (hasOwnProperty.call(config, 'key')) {
771
- var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
772
-
773
- if (getter && getter.isReactWarning) {
774
- return false;
775
- }
776
- }
777
- }
778
-
779
- return config.key !== undefined;
780
- }
781
-
782
- function warnIfStringRefCannotBeAutoConverted(config, self) {
783
- {
784
- if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {
785
- var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);
786
-
787
- if (!didWarnAboutStringRefs[componentName]) {
788
- error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);
789
-
790
- didWarnAboutStringRefs[componentName] = true;
791
- }
792
- }
793
- }
794
- }
795
-
796
- function defineKeyPropWarningGetter(props, displayName) {
797
- {
798
- var warnAboutAccessingKey = function () {
799
- if (!specialPropKeyWarningShown) {
800
- specialPropKeyWarningShown = true;
801
-
802
- error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
803
- }
804
- };
805
-
806
- warnAboutAccessingKey.isReactWarning = true;
807
- Object.defineProperty(props, 'key', {
808
- get: warnAboutAccessingKey,
809
- configurable: true
810
- });
811
- }
812
- }
813
-
814
- function defineRefPropWarningGetter(props, displayName) {
815
- {
816
- var warnAboutAccessingRef = function () {
817
- if (!specialPropRefWarningShown) {
818
- specialPropRefWarningShown = true;
819
-
820
- error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
821
- }
822
- };
823
-
824
- warnAboutAccessingRef.isReactWarning = true;
825
- Object.defineProperty(props, 'ref', {
826
- get: warnAboutAccessingRef,
827
- configurable: true
828
- });
829
- }
830
- }
831
- /**
832
- * Factory method to create a new React element. This no longer adheres to
833
- * the class pattern, so do not use new to call it. Also, instanceof check
834
- * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
835
- * if something is a React Element.
836
- *
837
- * @param {*} type
838
- * @param {*} props
839
- * @param {*} key
840
- * @param {string|object} ref
841
- * @param {*} owner
842
- * @param {*} self A *temporary* helper to detect places where `this` is
843
- * different from the `owner` when React.createElement is called, so that we
844
- * can warn. We want to get rid of owner and replace string `ref`s with arrow
845
- * functions, and as long as `this` and owner are the same, there will be no
846
- * change in behavior.
847
- * @param {*} source An annotation object (added by a transpiler or otherwise)
848
- * indicating filename, line number, and/or other information.
849
- * @internal
850
- */
851
-
852
-
853
- var ReactElement = function (type, key, ref, self, source, owner, props) {
854
- var element = {
855
- // This tag allows us to uniquely identify this as a React Element
856
- $$typeof: REACT_ELEMENT_TYPE,
857
- // Built-in properties that belong on the element
858
- type: type,
859
- key: key,
860
- ref: ref,
861
- props: props,
862
- // Record the component responsible for creating this element.
863
- _owner: owner
864
- };
865
-
866
- {
867
- // The validation flag is currently mutative. We put it on
868
- // an external backing store so that we can freeze the whole object.
869
- // This can be replaced with a WeakMap once they are implemented in
870
- // commonly used development environments.
871
- element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
872
- // the validation flag non-enumerable (where possible, which should
873
- // include every environment we run tests in), so the test framework
874
- // ignores it.
875
-
876
- Object.defineProperty(element._store, 'validated', {
877
- configurable: false,
878
- enumerable: false,
879
- writable: true,
880
- value: false
881
- }); // self and source are DEV only properties.
882
-
883
- Object.defineProperty(element, '_self', {
884
- configurable: false,
885
- enumerable: false,
886
- writable: false,
887
- value: self
888
- }); // Two elements created in two different places should be considered
889
- // equal for testing purposes and therefore we hide it from enumeration.
890
-
891
- Object.defineProperty(element, '_source', {
892
- configurable: false,
893
- enumerable: false,
894
- writable: false,
895
- value: source
896
- });
897
-
898
- if (Object.freeze) {
899
- Object.freeze(element.props);
900
- Object.freeze(element);
901
- }
902
- }
903
-
904
- return element;
905
- };
906
- /**
907
- * https://github.com/reactjs/rfcs/pull/107
908
- * @param {*} type
909
- * @param {object} props
910
- * @param {string} key
911
- */
912
-
913
- function jsxDEV(type, config, maybeKey, source, self) {
914
- {
915
- var propName; // Reserved names are extracted
916
-
917
- var props = {};
918
- var key = null;
919
- var ref = null; // Currently, key can be spread in as a prop. This causes a potential
920
- // issue if key is also explicitly declared (ie. <div {...props} key="Hi" />
921
- // or <div key="Hi" {...props} /> ). We want to deprecate key spread,
922
- // but as an intermediary step, we will use jsxDEV for everything except
923
- // <div {...props} key="Hi" />, because we aren't currently able to tell if
924
- // key is explicitly declared to be undefined or not.
925
-
926
- if (maybeKey !== undefined) {
927
- {
928
- checkKeyStringCoercion(maybeKey);
929
- }
930
-
931
- key = '' + maybeKey;
932
- }
933
-
934
- if (hasValidKey(config)) {
935
- {
936
- checkKeyStringCoercion(config.key);
937
- }
938
-
939
- key = '' + config.key;
940
- }
941
-
942
- if (hasValidRef(config)) {
943
- ref = config.ref;
944
- warnIfStringRefCannotBeAutoConverted(config, self);
945
- } // Remaining properties are added to a new props object
946
-
947
-
948
- for (propName in config) {
949
- if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
950
- props[propName] = config[propName];
951
- }
952
- } // Resolve default props
953
-
954
-
955
- if (type && type.defaultProps) {
956
- var defaultProps = type.defaultProps;
957
-
958
- for (propName in defaultProps) {
959
- if (props[propName] === undefined) {
960
- props[propName] = defaultProps[propName];
961
- }
962
- }
963
- }
964
-
965
- if (key || ref) {
966
- var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
967
-
968
- if (key) {
969
- defineKeyPropWarningGetter(props, displayName);
970
- }
971
-
972
- if (ref) {
973
- defineRefPropWarningGetter(props, displayName);
974
- }
975
- }
976
-
977
- return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
978
- }
979
- }
980
-
981
- var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
982
- var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
983
-
984
- function setCurrentlyValidatingElement$1(element) {
985
- {
986
- if (element) {
987
- var owner = element._owner;
988
- var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
989
- ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
990
- } else {
991
- ReactDebugCurrentFrame$1.setExtraStackFrame(null);
992
- }
993
- }
994
- }
995
-
996
- var propTypesMisspellWarningShown;
997
-
998
- {
999
- propTypesMisspellWarningShown = false;
1000
- }
1001
- /**
1002
- * Verifies the object is a ReactElement.
1003
- * See https://reactjs.org/docs/react-api.html#isvalidelement
1004
- * @param {?object} object
1005
- * @return {boolean} True if `object` is a ReactElement.
1006
- * @final
1007
- */
1008
-
1009
-
1010
- function isValidElement(object) {
1011
- {
1012
- return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
1013
- }
1014
- }
1015
-
1016
- function getDeclarationErrorAddendum() {
1017
- {
1018
- if (ReactCurrentOwner$1.current) {
1019
- var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);
1020
-
1021
- if (name) {
1022
- return '\n\nCheck the render method of `' + name + '`.';
1023
- }
1024
- }
1025
-
1026
- return '';
1027
- }
1028
- }
1029
-
1030
- function getSourceInfoErrorAddendum(source) {
1031
- {
1032
- if (source !== undefined) {
1033
- var fileName = source.fileName.replace(/^.*[\\\/]/, '');
1034
- var lineNumber = source.lineNumber;
1035
- return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
1036
- }
1037
-
1038
- return '';
1039
- }
1040
- }
1041
- /**
1042
- * Warn if there's no key explicitly set on dynamic arrays of children or
1043
- * object keys are not valid. This allows us to keep track of children between
1044
- * updates.
1045
- */
1046
-
1047
-
1048
- var ownerHasKeyUseWarning = {};
1049
-
1050
- function getCurrentComponentErrorInfo(parentType) {
1051
- {
1052
- var info = getDeclarationErrorAddendum();
1053
-
1054
- if (!info) {
1055
- var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
1056
-
1057
- if (parentName) {
1058
- info = "\n\nCheck the top-level render call using <" + parentName + ">.";
1059
- }
1060
- }
1061
-
1062
- return info;
1063
- }
1064
- }
1065
- /**
1066
- * Warn if the element doesn't have an explicit key assigned to it.
1067
- * This element is in an array. The array could grow and shrink or be
1068
- * reordered. All children that haven't already been validated are required to
1069
- * have a "key" property assigned to it. Error statuses are cached so a warning
1070
- * will only be shown once.
1071
- *
1072
- * @internal
1073
- * @param {ReactElement} element Element that requires a key.
1074
- * @param {*} parentType element's parent's type.
1075
- */
1076
-
1077
-
1078
- function validateExplicitKey(element, parentType) {
1079
- {
1080
- if (!element._store || element._store.validated || element.key != null) {
1081
- return;
1082
- }
1083
-
1084
- element._store.validated = true;
1085
- var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
1086
-
1087
- if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
1088
- return;
1089
- }
1090
-
1091
- ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
1092
- // property, it may be the creator of the child that's responsible for
1093
- // assigning it a key.
1094
-
1095
- var childOwner = '';
1096
-
1097
- if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {
1098
- // Give the component that originally created this child.
1099
- childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + ".";
1100
- }
1101
-
1102
- setCurrentlyValidatingElement$1(element);
1103
-
1104
- error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);
1105
-
1106
- setCurrentlyValidatingElement$1(null);
1107
- }
1108
- }
1109
- /**
1110
- * Ensure that every element either is passed in a static location, in an
1111
- * array with an explicit keys property defined, or in an object literal
1112
- * with valid key property.
1113
- *
1114
- * @internal
1115
- * @param {ReactNode} node Statically passed child of any type.
1116
- * @param {*} parentType node's parent's type.
1117
- */
1118
-
1119
-
1120
- function validateChildKeys(node, parentType) {
1121
- {
1122
- if (typeof node !== 'object') {
1123
- return;
1124
- }
1125
-
1126
- if (isArray(node)) {
1127
- for (var i = 0; i < node.length; i++) {
1128
- var child = node[i];
1129
-
1130
- if (isValidElement(child)) {
1131
- validateExplicitKey(child, parentType);
1132
- }
1133
- }
1134
- } else if (isValidElement(node)) {
1135
- // This element was passed in a valid location.
1136
- if (node._store) {
1137
- node._store.validated = true;
1138
- }
1139
- } else if (node) {
1140
- var iteratorFn = getIteratorFn(node);
1141
-
1142
- if (typeof iteratorFn === 'function') {
1143
- // Entry iterators used to provide implicit keys,
1144
- // but now we print a separate warning for them later.
1145
- if (iteratorFn !== node.entries) {
1146
- var iterator = iteratorFn.call(node);
1147
- var step;
1148
-
1149
- while (!(step = iterator.next()).done) {
1150
- if (isValidElement(step.value)) {
1151
- validateExplicitKey(step.value, parentType);
1152
- }
1153
- }
1154
- }
1155
- }
1156
- }
1157
- }
1158
- }
1159
- /**
1160
- * Given an element, validate that its props follow the propTypes definition,
1161
- * provided by the type.
1162
- *
1163
- * @param {ReactElement} element
1164
- */
1165
-
1166
-
1167
- function validatePropTypes(element) {
1168
- {
1169
- var type = element.type;
1170
-
1171
- if (type === null || type === undefined || typeof type === 'string') {
1172
- return;
1173
- }
1174
-
1175
- var propTypes;
1176
-
1177
- if (typeof type === 'function') {
1178
- propTypes = type.propTypes;
1179
- } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
1180
- // Inner props are checked in the reconciler.
1181
- type.$$typeof === REACT_MEMO_TYPE)) {
1182
- propTypes = type.propTypes;
1183
- } else {
1184
- return;
1185
- }
1186
-
1187
- if (propTypes) {
1188
- // Intentionally inside to avoid triggering lazy initializers:
1189
- var name = getComponentNameFromType(type);
1190
- checkPropTypes(propTypes, element.props, 'prop', name, element);
1191
- } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
1192
- propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:
1193
-
1194
- var _name = getComponentNameFromType(type);
1195
-
1196
- error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');
1197
- }
1198
-
1199
- if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
1200
- error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
1201
- }
1202
- }
1203
- }
1204
- /**
1205
- * Given a fragment, validate that it can only be provided with fragment props
1206
- * @param {ReactElement} fragment
1207
- */
1208
-
1209
-
1210
- function validateFragmentProps(fragment) {
1211
- {
1212
- var keys = Object.keys(fragment.props);
1213
-
1214
- for (var i = 0; i < keys.length; i++) {
1215
- var key = keys[i];
1216
-
1217
- if (key !== 'children' && key !== 'key') {
1218
- setCurrentlyValidatingElement$1(fragment);
1219
-
1220
- error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
1221
-
1222
- setCurrentlyValidatingElement$1(null);
1223
- break;
1224
- }
1225
- }
1226
-
1227
- if (fragment.ref !== null) {
1228
- setCurrentlyValidatingElement$1(fragment);
1229
-
1230
- error('Invalid attribute `ref` supplied to `React.Fragment`.');
1231
-
1232
- setCurrentlyValidatingElement$1(null);
1233
- }
1234
- }
1235
- }
1236
-
1237
- function jsxWithValidation(type, props, key, isStaticChildren, source, self) {
1238
- {
1239
- var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
1240
- // succeed and there will likely be errors in render.
1241
-
1242
- if (!validType) {
1243
- var info = '';
1244
-
1245
- if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
1246
- info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
1247
- }
1248
-
1249
- var sourceInfo = getSourceInfoErrorAddendum(source);
1250
-
1251
- if (sourceInfo) {
1252
- info += sourceInfo;
1253
- } else {
1254
- info += getDeclarationErrorAddendum();
1255
- }
1256
-
1257
- var typeString;
1258
-
1259
- if (type === null) {
1260
- typeString = 'null';
1261
- } else if (isArray(type)) {
1262
- typeString = 'array';
1263
- } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
1264
- typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />";
1265
- info = ' Did you accidentally export a JSX literal instead of a component?';
1266
- } else {
1267
- typeString = typeof type;
1268
- }
1269
-
1270
- error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
1271
- }
1272
-
1273
- var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.
1274
- // TODO: Drop this when these are no longer allowed as the type argument.
1275
-
1276
- if (element == null) {
1277
- return element;
1278
- } // Skip key warning if the type isn't valid since our key validation logic
1279
- // doesn't expect a non-string/function type and can throw confusing errors.
1280
- // We don't want exception behavior to differ between dev and prod.
1281
- // (Rendering will throw with a helpful message and as soon as the type is
1282
- // fixed, the key warnings will appear.)
1283
-
1284
-
1285
- if (validType) {
1286
- var children = props.children;
1287
-
1288
- if (children !== undefined) {
1289
- if (isStaticChildren) {
1290
- if (isArray(children)) {
1291
- for (var i = 0; i < children.length; i++) {
1292
- validateChildKeys(children[i], type);
1293
- }
1294
-
1295
- if (Object.freeze) {
1296
- Object.freeze(children);
1297
- }
1298
- } else {
1299
- error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');
1300
- }
1301
- } else {
1302
- validateChildKeys(children, type);
1303
- }
1304
- }
1305
- }
1306
-
1307
- if (type === REACT_FRAGMENT_TYPE) {
1308
- validateFragmentProps(element);
1309
- } else {
1310
- validatePropTypes(element);
1311
- }
1312
-
1313
- return element;
1314
- }
1315
- } // These two functions exist to still get child warnings in dev
1316
- // even with the prod transform. This means that jsxDEV is purely
1317
- // opt-in behavior for better messages but that we won't stop
1318
- // giving you warnings if you use production apis.
1319
-
1320
- function jsxWithValidationStatic(type, props, key) {
1321
- {
1322
- return jsxWithValidation(type, props, key, true);
1323
- }
1324
- }
1325
- function jsxWithValidationDynamic(type, props, key) {
1326
- {
1327
- return jsxWithValidation(type, props, key, false);
1328
- }
1329
- }
1330
-
1331
- var jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.
1332
- // for now we can ship identical prod functions
1333
-
1334
- var jsxs = jsxWithValidationStatic ;
1335
-
1336
- reactJsxRuntime_development.Fragment = REACT_FRAGMENT_TYPE;
1337
- reactJsxRuntime_development.jsx = jsx;
1338
- reactJsxRuntime_development.jsxs = jsxs;
1339
- })();
1340
- }
1341
-
1342
- (function (module) {
1343
-
1344
- {
1345
- module.exports = reactJsxRuntime_development;
1346
- }
1347
- } (jsxRuntime$1));
1348
-
1349
- var jsxRuntime = /*@__PURE__*/getDefaultExportFromCjs(jsxRuntimeExports);
1350
-
1351
- var Jsx = /*#__PURE__*/_mergeNamespaces({
1352
- __proto__: null,
1353
- default: jsxRuntime
1354
- }, [jsxRuntimeExports]);
1355
-
1356
- /** @module See `rollup.config.js` for what this file does. */
1357
-
1358
- var Fragment = jsxRuntimeExports.Fragment;
1359
- var jsx = jsxRuntimeExports.jsx;
1360
- var jsxs = jsxRuntimeExports.jsxs;
1361
- export { Fragment, Jsx as default, jsx, jsxs };
1362
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCIuLi9zcmMvZXNtLXNoaW1zL3JlYWN0LWpzeC1ydW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0Jyk7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKTtcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5Jyk7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGl0ZW0pO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cbnZhciBlbmFibGVDYWNoZUVsZW1lbnQgPSBmYWxzZTtcbnZhciBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyA9IGZhbHNlOyAvLyBObyBrbm93biBidWdzLCBidXQgbmVlZHMgcGVyZm9ybWFuY2UgdGVzdGluZ1xuXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxuLy8gc3R1ZmYuIEludGVuZGVkIHRvIGVuYWJsZSBSZWFjdCBjb3JlIG1lbWJlcnMgdG8gbW9yZSBlYXNpbHkgZGVidWcgc2NoZWR1bGluZ1xuLy8gaXNzdWVzIGluIERFViBidWlsZHMuXG5cbnZhciBlbmFibGVEZWJ1Z1RyYWNpbmcgPSBmYWxzZTsgLy8gVHJhY2sgd2hpY2ggRmliZXIocykgc2NoZWR1bGUgcmVuZGVyIHdvcmsuXG5cbnZhciBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFO1xuXG57XG4gIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKCdyZWFjdC5tb2R1bGUucmVmZXJlbmNlJyk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCBlbmFibGVEZWJ1Z1RyYWNpbmcgIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgZW5hYmxlTGVnYWN5SGlkZGVuICB8fCB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSAgfHwgZW5hYmxlQ2FjaGVFbGVtZW50ICB8fCBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01PRFVMRV9SRUZFUkVOQ0UgfHwgdHlwZS5nZXRNb2R1bGVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuXG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgdmFyIG91dGVyTmFtZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbDtcblxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG91dGVyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnTWVtbyc7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCAhZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChoYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYSkge1xuICByZXR1cm4gaXNBcnJheUltcGwoYSk7XG59XG5cbi8qXG4gKiBUaGUgYCcnICsgdmFsdWVgIHBhdHRlcm4gKHVzZWQgaW4gaW4gcGVyZi1zZW5zaXRpdmUgY29kZSkgdGhyb3dzIGZvciBTeW1ib2xcbiAqIGFuZCBUZW1wb3JhbC4qIHR5cGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMjIwNjQuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB3aWxsIHRocm93IGFuIGVhc2llci10by11bmRlcnN0YW5kLFxuICogZWFzaWVyLXRvLWRlYnVnIGV4Y2VwdGlvbiB3aXRoIGEgY2xlYXIgZXJyb3JzIG1lc3NhZ2UgbWVzc2FnZSBleHBsYWluaW5nIHRoZVxuICogcHJvYmxlbS4gKEluc3RlYWQgb2YgYSBjb25mdXNpbmcgZXhjZXB0aW9uIHRocm93biBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uXG4gKiBvZiB0aGUgYHZhbHVlYCBvYmplY3QpLlxuICovXG4vLyAkRmxvd0ZpeE1lIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcbiAge1xuICAgIC8vIHRvU3RyaW5nVGFnIGlzIG5lZWRlZCBmb3IgbmFtZXNwYWNlZCB0eXBlcyBsaWtlIFRlbXBvcmFsLkluc3RhbnRcbiAgICB2YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZztcbiAgICB2YXIgdHlwZSA9IGhhc1RvU3RyaW5nVGFnICYmIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fCAnT2JqZWN0JztcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCB0eXBlTmFtZSh2YWx1ZSkpO1xuXG4gICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvcHVsbC8xMDdcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cblxuZnVuY3Rpb24ganN4REVWKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIga2V5ID0gbnVsbDtcbiAgICB2YXIgcmVmID0gbnVsbDsgLy8gQ3VycmVudGx5LCBrZXkgY2FuIGJlIHNwcmVhZCBpbiBhcyBhIHByb3AuIFRoaXMgY2F1c2VzIGEgcG90ZW50aWFsXG4gICAgLy8gaXNzdWUgaWYga2V5IGlzIGFsc28gZXhwbGljaXRseSBkZWNsYXJlZCAoaWUuIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+XG4gICAgLy8gb3IgPGRpdiBrZXk9XCJIaVwiIHsuLi5wcm9wc30gLz4gKS4gV2Ugd2FudCB0byBkZXByZWNhdGUga2V5IHNwcmVhZCxcbiAgICAvLyBidXQgYXMgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAsIHdlIHdpbGwgdXNlIGpzeERFViBmb3IgZXZlcnl0aGluZyBleGNlcHRcbiAgICAvLyA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPiwgYmVjYXVzZSB3ZSBhcmVuJ3QgY3VycmVudGx5IGFibGUgdG8gdGVsbCBpZlxuICAgIC8vIGtleSBpcyBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIHVuZGVmaW5lZCBvciBub3QuXG5cbiAgICBpZiAobWF5YmVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBtYXliZUtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAge1xuICAgIGlmIChSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQpIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpIHtcbiAge1xuICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFxcXFwvXS8sICcnKTtcbiAgICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB7XG4gICAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcblxuICAgIGlmICghaW5mbykge1xuICAgICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5mbztcbiAgfVxufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gICAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICAgIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50KSB7XG4gICAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcblxuICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5Qcm9wVHlwZXMgIT09IHVuZGVmaW5lZCAmJiAhcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24pIHtcbiAgICAgIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gdHJ1ZTsgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcblxuICAgICAgdmFyIF9uYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgaXNTdGF0aWNDaGlsZHJlbiwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgICBpZiAoIXZhbGlkVHlwZSkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpO1xuXG4gICAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZVN0cmluZztcblxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IGpzeERFVih0eXBlLCBwcm9wcywga2V5LCBzb3VyY2UsIHNlbGYpOyAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLlxuICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gICAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgICBpZiAodmFsaWRUeXBlKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59IC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgZXhpc3QgdG8gc3RpbGwgZ2V0IGNoaWxkIHdhcm5pbmdzIGluIGRldlxuLy8gZXZlbiB3aXRoIHRoZSBwcm9kIHRyYW5zZm9ybS4gVGhpcyBtZWFucyB0aGF0IGpzeERFViBpcyBwdXJlbHlcbi8vIG9wdC1pbiBiZWhhdmlvciBmb3IgYmV0dGVyIG1lc3NhZ2VzIGJ1dCB0aGF0IHdlIHdvbid0IHN0b3Bcbi8vIGdpdmluZyB5b3Ugd2FybmluZ3MgaWYgeW91IHVzZSBwcm9kdWN0aW9uIGFwaXMuXG5cbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uU3RhdGljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25EeW5hbWljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGpzeCA9ICBqc3hXaXRoVmFsaWRhdGlvbkR5bmFtaWMgOyAvLyB3ZSBtYXkgd2FudCB0byBzcGVjaWFsIGNhc2UganN4cyBpbnRlcm5hbGx5IHRvIHRha2UgYWR2YW50YWdlIG9mIHN0YXRpYyBjaGlsZHJlbi5cbi8vIGZvciBub3cgd2UgY2FuIHNoaXAgaWRlbnRpY2FsIHByb2QgZnVuY3Rpb25zXG5cbnZhciBqc3hzID0gIGpzeFdpdGhWYWxpZGF0aW9uU3RhdGljIDtcblxuZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG5leHBvcnRzLmpzeCA9IGpzeDtcbmV4cG9ydHMuanN4cyA9IGpzeHM7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIi8qKiBAbW9kdWxlIFNlZSBgcm9sbHVwLmNvbmZpZy5qc2AgZm9yIHdoYXQgdGhpcyBmaWxlIGRvZXMuICovXG5pbXBvcnQgKiBhcyBKc3ggZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgXG4vLyBAdHMtaWdub3JlXG5GcmFnbWVudCwgXG4vLyBAdHMtaWdub3JlXG5qc3gsIFxuLy8gQHRzLWlnbm9yZVxuanN4cywgfSBmcm9tICdyZWFjdC9qc3gtcnVudGltZSc7XG5leHBvcnQgZGVmYXVsdCBKc3g7XG5leHBvcnQgeyBGcmFnbWVudCwganN4LCBqc3hzIH07XG4iXSwibmFtZXMiOlsicmVxdWlyZSQkMCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUMyQztBQUMzQyxFQUFFLENBQUMsV0FBVztBQUVkO0FBQ0EsSUFBSSxLQUFLLEdBQUcsVUFBZ0IsQ0FBQztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3JELElBQUksaUJBQWlCLEdBQUcsTUFBTSxD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