@ironm00n/pyret-lang 0.0.1 → 0.0.3

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 (3061) hide show
  1. package/package.json +4 -7
  2. package/src/arr/trove/charts.arr +88 -39
  3. package/src/arr/trove/csv.arr +35 -8
  4. package/src/arr/trove/error.arr +44 -0
  5. package/src/arr/trove/starter2024.arr +510 -0
  6. package/src/js/trove/charts-lib.js +180 -12
  7. package/src/js/trove/csv-lib.js +11 -4
  8. package/src/js/trove/ffi.js +6 -0
  9. package/src/js/trove/filelib.js +24 -3
  10. package/src/js/trove/make-image.js +1 -1
  11. package/src/js/trove/string-dict.js +3 -1
  12. package/src/js/trove/table.js +11 -5
  13. package/.github/workflows/build-and-test.yml +0 -29
  14. package/examples/ahoy-right-back.arr +0 -7
  15. package/examples/ahoy-world.arr +0 -3
  16. package/examples/call-flat-local.arr +0 -37
  17. package/examples/concat-strings.arr +0 -7
  18. package/examples/exit-code/failure.arr +0 -19
  19. package/examples/exit-code/success.arr +0 -19
  20. package/examples/heap.arr +0 -275
  21. package/examples/htdp/arithmetic.arr +0 -6
  22. package/examples/htdp/boolean.arr +0 -11
  23. package/examples/htdp/conversions.arr +0 -7
  24. package/examples/htdp/def.arr +0 -9
  25. package/examples/htdp/more-arithmetic.arr +0 -14
  26. package/examples/htdp/string.arr +0 -10
  27. package/examples/htdp/struct.arr +0 -23
  28. package/examples/htdp/types.arr +0 -15
  29. package/examples/loop.arr +0 -112
  30. package/examples/object-patterns/check.arr +0 -42
  31. package/examples/object-patterns/mixin-class.arr +0 -44
  32. package/examples/object-patterns/mixin-extend.arr +0 -25
  33. package/examples/object-patterns/mixin-java.arr +0 -205
  34. package/examples/object-patterns/mixin-mutable.arr +0 -36
  35. package/examples/object-patterns/mixin-seal.arr +0 -24
  36. package/examples/object-patterns/seal.arr +0 -51
  37. package/examples/object-patterns/shadow.arr +0 -58
  38. package/examples/parse-and-print.arr +0 -29
  39. package/examples/point.arr +0 -73
  40. package/examples/queue.arr +0 -52
  41. package/examples/ralist.arr +0 -645
  42. package/examples/world/2048.arr +0 -399
  43. package/examples/world/boids-web.arr +0 -227
  44. package/examples/world/boids.arr +0 -215
  45. package/examples/world/echo-keystrokes.arr +0 -12
  46. package/examples/world/image2.arr +0 -66
  47. package/examples/world/mouse-location.arr +0 -17
  48. package/examples/world/ufo.arr +0 -65
  49. package/examples/world/ufo.png +0 -0
  50. package/node_modules/JSONStream/.travis.yml +0 -8
  51. package/node_modules/JSONStream/LICENSE.APACHE2 +0 -15
  52. package/node_modules/JSONStream/LICENSE.MIT +0 -24
  53. package/node_modules/JSONStream/bin.js +0 -12
  54. package/node_modules/JSONStream/examples/all_docs.js +0 -13
  55. package/node_modules/JSONStream/index.js +0 -247
  56. package/node_modules/JSONStream/package.json +0 -40
  57. package/node_modules/JSONStream/readme.markdown +0 -207
  58. package/node_modules/JSONStream/test/bool.js +0 -41
  59. package/node_modules/JSONStream/test/browser.js +0 -18
  60. package/node_modules/JSONStream/test/destroy_missing.js +0 -27
  61. package/node_modules/JSONStream/test/doubledot1.js +0 -29
  62. package/node_modules/JSONStream/test/doubledot2.js +0 -30
  63. package/node_modules/JSONStream/test/empty.js +0 -44
  64. package/node_modules/JSONStream/test/error_contents.js +0 -45
  65. package/node_modules/JSONStream/test/fixtures/all_npm.json +0 -4030
  66. package/node_modules/JSONStream/test/fixtures/couch_sample.json +0 -18
  67. package/node_modules/JSONStream/test/fixtures/depth.json +0 -15
  68. package/node_modules/JSONStream/test/fixtures/error.json +0 -1
  69. package/node_modules/JSONStream/test/fixtures/header_footer.json +0 -19
  70. package/node_modules/JSONStream/test/fn.js +0 -39
  71. package/node_modules/JSONStream/test/gen.js +0 -135
  72. package/node_modules/JSONStream/test/header_footer.js +0 -55
  73. package/node_modules/JSONStream/test/issues.js +0 -34
  74. package/node_modules/JSONStream/test/keys.js +0 -105
  75. package/node_modules/JSONStream/test/map.js +0 -40
  76. package/node_modules/JSONStream/test/multiple_objects.js +0 -36
  77. package/node_modules/JSONStream/test/multiple_objects_error.js +0 -29
  78. package/node_modules/JSONStream/test/null.js +0 -28
  79. package/node_modules/JSONStream/test/parsejson.js +0 -29
  80. package/node_modules/JSONStream/test/run.js +0 -13
  81. package/node_modules/JSONStream/test/stringify.js +0 -41
  82. package/node_modules/JSONStream/test/stringify_object.js +0 -47
  83. package/node_modules/JSONStream/test/test.js +0 -35
  84. package/node_modules/JSONStream/test/test2.js +0 -29
  85. package/node_modules/JSONStream/test/two-ways.js +0 -41
  86. package/node_modules/acorn/CHANGELOG.md +0 -620
  87. package/node_modules/acorn/LICENSE +0 -21
  88. package/node_modules/acorn/README.md +0 -269
  89. package/node_modules/acorn/bin/acorn +0 -4
  90. package/node_modules/acorn/dist/acorn.d.ts +0 -209
  91. package/node_modules/acorn/dist/acorn.js +0 -5186
  92. package/node_modules/acorn/dist/acorn.js.map +0 -1
  93. package/node_modules/acorn/dist/acorn.mjs +0 -5155
  94. package/node_modules/acorn/dist/acorn.mjs.d.ts +0 -2
  95. package/node_modules/acorn/dist/acorn.mjs.map +0 -1
  96. package/node_modules/acorn/dist/bin.js +0 -64
  97. package/node_modules/acorn/package.json +0 -35
  98. package/node_modules/acorn-node/.travis.yml +0 -22
  99. package/node_modules/acorn-node/CHANGELOG.md +0 -94
  100. package/node_modules/acorn-node/LICENSE.md +0 -95
  101. package/node_modules/acorn-node/README.md +0 -65
  102. package/node_modules/acorn-node/build.js +0 -36
  103. package/node_modules/acorn-node/index.js +0 -38
  104. package/node_modules/acorn-node/lib/bigint/index.js +0 -71
  105. package/node_modules/acorn-node/lib/class-fields/index.js +0 -70
  106. package/node_modules/acorn-node/lib/dynamic-import/index.js +0 -86
  107. package/node_modules/acorn-node/lib/export-ns-from/index.js +0 -43
  108. package/node_modules/acorn-node/lib/import-meta/index.js +0 -55
  109. package/node_modules/acorn-node/lib/numeric-separator/index.js +0 -61
  110. package/node_modules/acorn-node/lib/private-class-elements/index.js +0 -135
  111. package/node_modules/acorn-node/lib/static-class-features/index.js +0 -139
  112. package/node_modules/acorn-node/package.json +0 -51
  113. package/node_modules/acorn-node/test/index.js +0 -154
  114. package/node_modules/acorn-node/walk.js +0 -57
  115. package/node_modules/acorn-walk/CHANGELOG.md +0 -131
  116. package/node_modules/acorn-walk/LICENSE +0 -19
  117. package/node_modules/acorn-walk/README.md +0 -126
  118. package/node_modules/acorn-walk/dist/walk.d.ts +0 -112
  119. package/node_modules/acorn-walk/dist/walk.js +0 -463
  120. package/node_modules/acorn-walk/dist/walk.js.map +0 -1
  121. package/node_modules/acorn-walk/dist/walk.mjs +0 -443
  122. package/node_modules/acorn-walk/dist/walk.mjs.map +0 -1
  123. package/node_modules/acorn-walk/package.json +0 -34
  124. package/node_modules/asn1.js/README.md +0 -100
  125. package/node_modules/asn1.js/lib/asn1/api.js +0 -61
  126. package/node_modules/asn1.js/lib/asn1/base/buffer.js +0 -116
  127. package/node_modules/asn1.js/lib/asn1/base/index.js +0 -6
  128. package/node_modules/asn1.js/lib/asn1/base/node.js +0 -634
  129. package/node_modules/asn1.js/lib/asn1/base/reporter.js +0 -121
  130. package/node_modules/asn1.js/lib/asn1/constants/der.js +0 -42
  131. package/node_modules/asn1.js/lib/asn1/constants/index.js +0 -19
  132. package/node_modules/asn1.js/lib/asn1/decoders/der.js +0 -324
  133. package/node_modules/asn1.js/lib/asn1/decoders/index.js +0 -4
  134. package/node_modules/asn1.js/lib/asn1/decoders/pem.js +0 -49
  135. package/node_modules/asn1.js/lib/asn1/encoders/der.js +0 -295
  136. package/node_modules/asn1.js/lib/asn1/encoders/index.js +0 -4
  137. package/node_modules/asn1.js/lib/asn1/encoders/pem.js +0 -21
  138. package/node_modules/asn1.js/lib/asn1.js +0 -9
  139. package/node_modules/asn1.js/node_modules/bn.js/LICENSE +0 -19
  140. package/node_modules/asn1.js/node_modules/bn.js/README.md +0 -200
  141. package/node_modules/asn1.js/node_modules/bn.js/lib/bn.js +0 -3447
  142. package/node_modules/asn1.js/node_modules/bn.js/package.json +0 -36
  143. package/node_modules/asn1.js/node_modules/bn.js/util/genCombMulTo.js +0 -65
  144. package/node_modules/asn1.js/node_modules/bn.js/util/genCombMulTo10.js +0 -65
  145. package/node_modules/asn1.js/package.json +0 -31
  146. package/node_modules/assert/.github/FUNDING.yml +0 -12
  147. package/node_modules/assert/.github/SECURITY.md +0 -10
  148. package/node_modules/assert/.travis.yml +0 -30
  149. package/node_modules/assert/.zuul.yml +0 -13
  150. package/node_modules/assert/CHANGELOG.md +0 -11
  151. package/node_modules/assert/LICENSE +0 -18
  152. package/node_modules/assert/README.md +0 -105
  153. package/node_modules/assert/assert.js +0 -506
  154. package/node_modules/assert/node_modules/inherits/LICENSE +0 -16
  155. package/node_modules/assert/node_modules/inherits/README.md +0 -42
  156. package/node_modules/assert/node_modules/inherits/inherits.js +0 -7
  157. package/node_modules/assert/node_modules/inherits/inherits_browser.js +0 -23
  158. package/node_modules/assert/node_modules/inherits/package.json +0 -29
  159. package/node_modules/assert/node_modules/util/LICENSE +0 -18
  160. package/node_modules/assert/node_modules/util/README.md +0 -15
  161. package/node_modules/assert/node_modules/util/package.json +0 -35
  162. package/node_modules/assert/node_modules/util/support/isBuffer.js +0 -3
  163. package/node_modules/assert/node_modules/util/support/isBufferBrowser.js +0 -6
  164. package/node_modules/assert/node_modules/util/util.js +0 -586
  165. package/node_modules/assert/package.json +0 -32
  166. package/node_modules/assert/test.js +0 -360
  167. package/node_modules/available-typed-arrays/.eslintrc +0 -5
  168. package/node_modules/available-typed-arrays/.github/FUNDING.yml +0 -12
  169. package/node_modules/available-typed-arrays/.nycrc +0 -9
  170. package/node_modules/available-typed-arrays/CHANGELOG.md +0 -100
  171. package/node_modules/available-typed-arrays/LICENSE +0 -21
  172. package/node_modules/available-typed-arrays/README.md +0 -55
  173. package/node_modules/available-typed-arrays/index.d.ts +0 -8
  174. package/node_modules/available-typed-arrays/index.js +0 -17
  175. package/node_modules/available-typed-arrays/package.json +0 -93
  176. package/node_modules/available-typed-arrays/test/index.js +0 -18
  177. package/node_modules/available-typed-arrays/tsconfig.json +0 -49
  178. package/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  179. package/node_modules/balanced-match/LICENSE.md +0 -21
  180. package/node_modules/balanced-match/README.md +0 -97
  181. package/node_modules/balanced-match/index.js +0 -62
  182. package/node_modules/balanced-match/package.json +0 -48
  183. package/node_modules/base64-js/LICENSE +0 -21
  184. package/node_modules/base64-js/README.md +0 -34
  185. package/node_modules/base64-js/base64js.min.js +0 -1
  186. package/node_modules/base64-js/index.d.ts +0 -3
  187. package/node_modules/base64-js/index.js +0 -150
  188. package/node_modules/base64-js/package.json +0 -47
  189. package/node_modules/bn.js/LICENSE +0 -19
  190. package/node_modules/bn.js/README.md +0 -214
  191. package/node_modules/bn.js/lib/bn.js +0 -3548
  192. package/node_modules/bn.js/package.json +0 -39
  193. package/node_modules/brace-expansion/LICENSE +0 -21
  194. package/node_modules/brace-expansion/README.md +0 -129
  195. package/node_modules/brace-expansion/index.js +0 -201
  196. package/node_modules/brace-expansion/package.json +0 -50
  197. package/node_modules/brorand/.npmignore +0 -2
  198. package/node_modules/brorand/README.md +0 -26
  199. package/node_modules/brorand/index.js +0 -65
  200. package/node_modules/brorand/package.json +0 -31
  201. package/node_modules/brorand/test/api-test.js +0 -8
  202. package/node_modules/browser-pack/.travis.yml +0 -9
  203. package/node_modules/browser-pack/CHANGELOG.md +0 -10
  204. package/node_modules/browser-pack/LICENSE +0 -18
  205. package/node_modules/browser-pack/_prelude.js +0 -1
  206. package/node_modules/browser-pack/bin/cmd.js +0 -4
  207. package/node_modules/browser-pack/bin/prepublish.js +0 -21
  208. package/node_modules/browser-pack/example/input.json +0 -13
  209. package/node_modules/browser-pack/example/output.js +0 -1
  210. package/node_modules/browser-pack/example/sourcemap/input.json +0 -15
  211. package/node_modules/browser-pack/example/sourcemap/output.js +0 -6
  212. package/node_modules/browser-pack/index.js +0 -127
  213. package/node_modules/browser-pack/package.json +0 -63
  214. package/node_modules/browser-pack/prelude.js +0 -50
  215. package/node_modules/browser-pack/readme.markdown +0 -97
  216. package/node_modules/browser-pack/test/comment.js +0 -33
  217. package/node_modules/browser-pack/test/empty.js +0 -33
  218. package/node_modules/browser-pack/test/not_found.js +0 -34
  219. package/node_modules/browser-pack/test/only_execute_entries.js +0 -26
  220. package/node_modules/browser-pack/test/order.js +0 -38
  221. package/node_modules/browser-pack/test/pack.js +0 -28
  222. package/node_modules/browser-pack/test/raw.js +0 -32
  223. package/node_modules/browser-pack/test/source-maps-existing.js +0 -59
  224. package/node_modules/browser-pack/test/source-maps.js +0 -221
  225. package/node_modules/browser-pack/test/this.js +0 -24
  226. package/node_modules/browser-pack/test/unicode.js +0 -32
  227. package/node_modules/browser-resolve/CHANGELOG.md +0 -8
  228. package/node_modules/browser-resolve/LICENSE +0 -21
  229. package/node_modules/browser-resolve/README.md +0 -165
  230. package/node_modules/browser-resolve/empty.js +0 -0
  231. package/node_modules/browser-resolve/index.js +0 -345
  232. package/node_modules/browser-resolve/package.json +0 -29
  233. package/node_modules/browserify/.github/FUNDING.yml +0 -12
  234. package/node_modules/browserify/.travis.yml +0 -23
  235. package/node_modules/browserify/LICENSE +0 -21
  236. package/node_modules/browserify/appveyor.yml +0 -27
  237. package/node_modules/browserify/assets/browserify.png +0 -0
  238. package/node_modules/browserify/assets/logo.png +0 -0
  239. package/node_modules/browserify/bin/advanced.txt +0 -117
  240. package/node_modules/browserify/bin/args.js +0 -260
  241. package/node_modules/browserify/bin/cmd.js +0 -91
  242. package/node_modules/browserify/bin/usage.txt +0 -34
  243. package/node_modules/browserify/changelog.markdown +0 -1393
  244. package/node_modules/browserify/code-of-conduct.md +0 -78
  245. package/node_modules/browserify/example/api/browser/bar.js +0 -1
  246. package/node_modules/browserify/example/api/browser/foo.js +0 -5
  247. package/node_modules/browserify/example/api/browser/main.js +0 -2
  248. package/node_modules/browserify/example/api/build.js +0 -4
  249. package/node_modules/browserify/example/multiple_bundles/beep.js +0 -2
  250. package/node_modules/browserify/example/multiple_bundles/boop.js +0 -2
  251. package/node_modules/browserify/example/multiple_bundles/build.sh +0 -4
  252. package/node_modules/browserify/example/multiple_bundles/robot.js +0 -1
  253. package/node_modules/browserify/example/multiple_bundles/static/beep.html +0 -2
  254. package/node_modules/browserify/example/multiple_bundles/static/boop.html +0 -2
  255. package/node_modules/browserify/example/source_maps/build.js +0 -13
  256. package/node_modules/browserify/example/source_maps/build.sh +0 -4
  257. package/node_modules/browserify/example/source_maps/index.html +0 -11
  258. package/node_modules/browserify/example/source_maps/js/build/bundle.js +0 -28
  259. package/node_modules/browserify/example/source_maps/js/foo.js +0 -7
  260. package/node_modules/browserify/example/source_maps/js/main.js +0 -4
  261. package/node_modules/browserify/example/source_maps/js/wunder/bar.js +0 -8
  262. package/node_modules/browserify/index.js +0 -876
  263. package/node_modules/browserify/lib/_empty.js +0 -0
  264. package/node_modules/browserify/lib/builtins.js +0 -41
  265. package/node_modules/browserify/node_modules/buffer/AUTHORS.md +0 -55
  266. package/node_modules/browserify/node_modules/buffer/LICENSE +0 -21
  267. package/node_modules/browserify/node_modules/buffer/README.md +0 -409
  268. package/node_modules/browserify/node_modules/buffer/index.d.ts +0 -185
  269. package/node_modules/browserify/node_modules/buffer/index.js +0 -1777
  270. package/node_modules/browserify/node_modules/buffer/package.json +0 -79
  271. package/node_modules/browserify/package.json +0 -99
  272. package/node_modules/browserify/readme.markdown +0 -831
  273. package/node_modules/browserify/security.md +0 -10
  274. package/node_modules/browserify/test/args.js +0 -72
  275. package/node_modules/browserify/test/array/one.js +0 -1
  276. package/node_modules/browserify/test/array/three.js +0 -1
  277. package/node_modules/browserify/test/array/two.js +0 -1
  278. package/node_modules/browserify/test/array.js +0 -74
  279. package/node_modules/browserify/test/async/src.js +0 -8
  280. package/node_modules/browserify/test/async.js +0 -24
  281. package/node_modules/browserify/test/backbone.js +0 -23
  282. package/node_modules/browserify/test/bare/dirname-filename.js +0 -4
  283. package/node_modules/browserify/test/bare/main.js +0 -7
  284. package/node_modules/browserify/test/bare.js +0 -173
  285. package/node_modules/browserify/test/bare_shebang.js +0 -37
  286. package/node_modules/browserify/test/bin.js +0 -31
  287. package/node_modules/browserify/test/bin_entry.js +0 -31
  288. package/node_modules/browserify/test/bin_tr_error/main.js +0 -1
  289. package/node_modules/browserify/test/bin_tr_error/tr.js +0 -12
  290. package/node_modules/browserify/test/bin_tr_error.js +0 -27
  291. package/node_modules/browserify/test/bom/hello.js +0 -1
  292. package/node_modules/browserify/test/bom.js +0 -19
  293. package/node_modules/browserify/test/browser_field_file/package.json +0 -5
  294. package/node_modules/browserify/test/browser_field_file/wow.js +0 -1
  295. package/node_modules/browserify/test/browser_field_file.js +0 -13
  296. package/node_modules/browserify/test/browser_field_resolve/a/main.js +0 -1
  297. package/node_modules/browserify/test/browser_field_resolve/a/package.json +0 -5
  298. package/node_modules/browserify/test/browser_field_resolve/b/main.js +0 -1
  299. package/node_modules/browserify/test/browser_field_resolve/b/package.json +0 -5
  300. package/node_modules/browserify/test/browser_field_resolve/b/x.js +0 -1
  301. package/node_modules/browserify/test/browser_field_resolve/c/main.js +0 -1
  302. package/node_modules/browserify/test/browser_field_resolve/c/package.json +0 -5
  303. package/node_modules/browserify/test/browser_field_resolve/c/x.js +0 -1
  304. package/node_modules/browserify/test/browser_field_resolve/d/main.js +0 -1
  305. package/node_modules/browserify/test/browser_field_resolve/d/package.json +0 -5
  306. package/node_modules/browserify/test/browser_field_resolve/d/x.js +0 -1
  307. package/node_modules/browserify/test/browser_field_resolve/e/main.js +0 -1
  308. package/node_modules/browserify/test/browser_field_resolve/e/package.json +0 -5
  309. package/node_modules/browserify/test/browser_field_resolve/e/x.js +0 -1
  310. package/node_modules/browserify/test/browser_field_resolve/f/main.js +0 -1
  311. package/node_modules/browserify/test/browser_field_resolve/f/package.json +0 -5
  312. package/node_modules/browserify/test/browser_field_resolve/f/x.js +0 -1
  313. package/node_modules/browserify/test/browser_field_resolve/g/main.js +0 -2
  314. package/node_modules/browserify/test/browser_field_resolve/g/package.json +0 -5
  315. package/node_modules/browserify/test/browser_field_resolve/g/x.js +0 -1
  316. package/node_modules/browserify/test/browser_field_resolve/h/main.js +0 -2
  317. package/node_modules/browserify/test/browser_field_resolve/h/package.json +0 -5
  318. package/node_modules/browserify/test/browser_field_resolve/h/x.js +0 -1
  319. package/node_modules/browserify/test/browser_field_resolve/i/browser.js +0 -1
  320. package/node_modules/browserify/test/browser_field_resolve/i/main.js +0 -2
  321. package/node_modules/browserify/test/browser_field_resolve/i/package.json +0 -5
  322. package/node_modules/browserify/test/browser_field_resolve/i/x.js +0 -1
  323. package/node_modules/browserify/test/browser_field_resolve/j/browser.js +0 -1
  324. package/node_modules/browserify/test/browser_field_resolve/j/main.js +0 -2
  325. package/node_modules/browserify/test/browser_field_resolve/j/package.json +0 -5
  326. package/node_modules/browserify/test/browser_field_resolve/j/x.js +0 -1
  327. package/node_modules/browserify/test/browser_field_resolve/k/main.js +0 -2
  328. package/node_modules/browserify/test/browser_field_resolve/l/main.js +0 -2
  329. package/node_modules/browserify/test/browser_field_resolve.js +0 -124
  330. package/node_modules/browserify/test/buffer.js +0 -144
  331. package/node_modules/browserify/test/bundle-bundle-external/bar.js +0 -2
  332. package/node_modules/browserify/test/bundle-bundle-external/baz.js +0 -3
  333. package/node_modules/browserify/test/bundle-bundle-external/foo.js +0 -5
  334. package/node_modules/browserify/test/bundle-bundle-external.js +0 -31
  335. package/node_modules/browserify/test/bundle-stream.js +0 -18
  336. package/node_modules/browserify/test/bundle.js +0 -33
  337. package/node_modules/browserify/test/bundle_external/boop.js +0 -4
  338. package/node_modules/browserify/test/bundle_external/main.js +0 -4
  339. package/node_modules/browserify/test/bundle_external/robot.js +0 -1
  340. package/node_modules/browserify/test/bundle_external.js +0 -26
  341. package/node_modules/browserify/test/bundle_external_global.js +0 -24
  342. package/node_modules/browserify/test/bundle_sourcemap.js +0 -32
  343. package/node_modules/browserify/test/catch/main.js +0 -1
  344. package/node_modules/browserify/test/catch.js +0 -22
  345. package/node_modules/browserify/test/circular/a.js +0 -3
  346. package/node_modules/browserify/test/circular/b.js +0 -1
  347. package/node_modules/browserify/test/circular/main.js +0 -1
  348. package/node_modules/browserify/test/circular.js +0 -34
  349. package/node_modules/browserify/test/coffee_bin/main.coffee +0 -2
  350. package/node_modules/browserify/test/coffee_bin/x.coffee +0 -1
  351. package/node_modules/browserify/test/coffee_bin.js +0 -36
  352. package/node_modules/browserify/test/coffeeify/main.coffee +0 -2
  353. package/node_modules/browserify/test/coffeeify.js +0 -19
  354. package/node_modules/browserify/test/comment/main.js +0 -2
  355. package/node_modules/browserify/test/comment.js +0 -16
  356. package/node_modules/browserify/test/constants.js +0 -18
  357. package/node_modules/browserify/test/crypto.js +0 -43
  358. package/node_modules/browserify/test/crypto_ig.js +0 -43
  359. package/node_modules/browserify/test/cycle/README.md +0 -16
  360. package/node_modules/browserify/test/cycle/entry.js +0 -15
  361. package/node_modules/browserify/test/cycle/mod1/a.js +0 -1
  362. package/node_modules/browserify/test/cycle/mod1/b.js +0 -1
  363. package/node_modules/browserify/test/cycle/mod2/a.js +0 -1
  364. package/node_modules/browserify/test/cycle/mod2/b.js +0 -1
  365. package/node_modules/browserify/test/cycle.js +0 -13
  366. package/node_modules/browserify/test/debug_standalone/x.js +0 -1
  367. package/node_modules/browserify/test/debug_standalone.js +0 -64
  368. package/node_modules/browserify/test/dedupe-deps.js +0 -59
  369. package/node_modules/browserify/test/dedupe-nomap.js +0 -64
  370. package/node_modules/browserify/test/delay/diverted.js +0 -1
  371. package/node_modules/browserify/test/delay/main.js +0 -1
  372. package/node_modules/browserify/test/delay.js +0 -25
  373. package/node_modules/browserify/test/dep.js +0 -25
  374. package/node_modules/browserify/test/dollar/dollar/index.js +0 -7
  375. package/node_modules/browserify/test/dollar.js +0 -17
  376. package/node_modules/browserify/test/double_buffer/explicit.js +0 -1
  377. package/node_modules/browserify/test/double_buffer/implicit.js +0 -1
  378. package/node_modules/browserify/test/double_buffer/main.js +0 -4
  379. package/node_modules/browserify/test/double_buffer.js +0 -16
  380. package/node_modules/browserify/test/double_bundle.js +0 -24
  381. package/node_modules/browserify/test/double_bundle_error/main.js +0 -1
  382. package/node_modules/browserify/test/double_bundle_error/needs_three.js +0 -1
  383. package/node_modules/browserify/test/double_bundle_error/one.js +0 -1
  384. package/node_modules/browserify/test/double_bundle_error/package.json +0 -5
  385. package/node_modules/browserify/test/double_bundle_error/three.js +0 -3
  386. package/node_modules/browserify/test/double_bundle_error/two.js +0 -1
  387. package/node_modules/browserify/test/double_bundle_error.js +0 -17
  388. package/node_modules/browserify/test/double_bundle_json/a.json +0 -1
  389. package/node_modules/browserify/test/double_bundle_json/b.json +0 -1
  390. package/node_modules/browserify/test/double_bundle_json/index.js +0 -5
  391. package/node_modules/browserify/test/double_bundle_json.js +0 -37
  392. package/node_modules/browserify/test/double_bundle_parallel.js +0 -33
  393. package/node_modules/browserify/test/double_bundle_parallel_cache.js +0 -35
  394. package/node_modules/browserify/test/dup/foo-dup.js +0 -4
  395. package/node_modules/browserify/test/dup/foo.js +0 -4
  396. package/node_modules/browserify/test/dup/index.js +0 -5
  397. package/node_modules/browserify/test/entry/main.js +0 -1
  398. package/node_modules/browserify/test/entry/needs_three.js +0 -1
  399. package/node_modules/browserify/test/entry/one.js +0 -1
  400. package/node_modules/browserify/test/entry/package.json +0 -5
  401. package/node_modules/browserify/test/entry/three.js +0 -1
  402. package/node_modules/browserify/test/entry/two.js +0 -1
  403. package/node_modules/browserify/test/entry.js +0 -43
  404. package/node_modules/browserify/test/entry_exec/fail.js +0 -1
  405. package/node_modules/browserify/test/entry_exec/main.js +0 -1
  406. package/node_modules/browserify/test/entry_exec.js +0 -15
  407. package/node_modules/browserify/test/entry_expose/main.js +0 -2
  408. package/node_modules/browserify/test/entry_expose.js +0 -18
  409. package/node_modules/browserify/test/entry_relative.js +0 -45
  410. package/node_modules/browserify/test/error_code/src.js +0 -2
  411. package/node_modules/browserify/test/error_code.js +0 -28
  412. package/node_modules/browserify/test/exclude/array.js +0 -2
  413. package/node_modules/browserify/test/exclude/skip.js +0 -1
  414. package/node_modules/browserify/test/exclude/skip2.js +0 -1
  415. package/node_modules/browserify/test/exclude.js +0 -21
  416. package/node_modules/browserify/test/export/entry.js +0 -1
  417. package/node_modules/browserify/test/export.js +0 -35
  418. package/node_modules/browserify/test/external/main.js +0 -2
  419. package/node_modules/browserify/test/external/x.js +0 -3
  420. package/node_modules/browserify/test/external.js +0 -20
  421. package/node_modules/browserify/test/external_args/main.js +0 -10
  422. package/node_modules/browserify/test/external_shim/bundle1.js +0 -1
  423. package/node_modules/browserify/test/external_shim/bundle2.js +0 -1
  424. package/node_modules/browserify/test/external_shim/package.json +0 -5
  425. package/node_modules/browserify/test/external_shim/shim.js +0 -0
  426. package/node_modules/browserify/test/external_shim.js +0 -27
  427. package/node_modules/browserify/test/externalize/beep.js +0 -2
  428. package/node_modules/browserify/test/externalize/boop.js +0 -2
  429. package/node_modules/browserify/test/externalize/robot.js +0 -1
  430. package/node_modules/browserify/test/externalize.js +0 -59
  431. package/node_modules/browserify/test/fake/fake_fs.js +0 -1
  432. package/node_modules/browserify/test/fake/main.js +0 -2
  433. package/node_modules/browserify/test/fake.js +0 -15
  434. package/node_modules/browserify/test/field/miss.js +0 -1
  435. package/node_modules/browserify/test/field/object.js +0 -1
  436. package/node_modules/browserify/test/field/string.js +0 -1
  437. package/node_modules/browserify/test/field/sub.js +0 -1
  438. package/node_modules/browserify/test/field.js +0 -72
  439. package/node_modules/browserify/test/file_event.js +0 -33
  440. package/node_modules/browserify/test/five_bundle.js +0 -30
  441. package/node_modules/browserify/test/full_paths.js +0 -58
  442. package/node_modules/browserify/test/glob/a.js +0 -6
  443. package/node_modules/browserify/test/glob/b.js +0 -5
  444. package/node_modules/browserify/test/glob/lib/z.js +0 -1
  445. package/node_modules/browserify/test/glob/vendor/x.js +0 -1
  446. package/node_modules/browserify/test/glob/vendor/y.js +0 -1
  447. package/node_modules/browserify/test/glob.js +0 -29
  448. package/node_modules/browserify/test/global/buffer.js +0 -2
  449. package/node_modules/browserify/test/global/filename.js +0 -2
  450. package/node_modules/browserify/test/global/main.js +0 -2
  451. package/node_modules/browserify/test/global/tick.js +0 -3
  452. package/node_modules/browserify/test/global.js +0 -92
  453. package/node_modules/browserify/test/global_coffeeify.js +0 -19
  454. package/node_modules/browserify/test/global_noparse.js +0 -102
  455. package/node_modules/browserify/test/global_recorder/main.js +0 -1
  456. package/node_modules/browserify/test/global_recorder.js +0 -22
  457. package/node_modules/browserify/test/hash/foo/other.js +0 -1
  458. package/node_modules/browserify/test/hash/foo/two.js +0 -2
  459. package/node_modules/browserify/test/hash/main.js +0 -2
  460. package/node_modules/browserify/test/hash/one.js +0 -2
  461. package/node_modules/browserify/test/hash/other.js +0 -1
  462. package/node_modules/browserify/test/hash.js +0 -15
  463. package/node_modules/browserify/test/hash_instance_context/main.js +0 -17
  464. package/node_modules/browserify/test/hash_instance_context/one/dir/f.js +0 -3
  465. package/node_modules/browserify/test/hash_instance_context/one/dir/g.js +0 -2
  466. package/node_modules/browserify/test/hash_instance_context/one/f.js +0 -3
  467. package/node_modules/browserify/test/hash_instance_context/one/g.js +0 -2
  468. package/node_modules/browserify/test/hash_instance_context/three/dir/f.js +0 -3
  469. package/node_modules/browserify/test/hash_instance_context/three/dir/g.js +0 -2
  470. package/node_modules/browserify/test/hash_instance_context/three/dir/h.js +0 -2
  471. package/node_modules/browserify/test/hash_instance_context/three/f.js +0 -3
  472. package/node_modules/browserify/test/hash_instance_context/three/g.js +0 -2
  473. package/node_modules/browserify/test/hash_instance_context/three/h.js +0 -2
  474. package/node_modules/browserify/test/hash_instance_context/two/dir/f.js +0 -3
  475. package/node_modules/browserify/test/hash_instance_context/two/dir/g.js +0 -2
  476. package/node_modules/browserify/test/hash_instance_context/two/dir/h.js +0 -2
  477. package/node_modules/browserify/test/hash_instance_context/two/f.js +0 -3
  478. package/node_modules/browserify/test/hash_instance_context/two/g.js +0 -2
  479. package/node_modules/browserify/test/hash_instance_context/two/h.js +0 -2
  480. package/node_modules/browserify/test/hash_instance_context.js +0 -25
  481. package/node_modules/browserify/test/identical/main.js +0 -6
  482. package/node_modules/browserify/test/identical/x.js +0 -2
  483. package/node_modules/browserify/test/identical/y.js +0 -2
  484. package/node_modules/browserify/test/identical.js +0 -19
  485. package/node_modules/browserify/test/identical_different/main.js +0 -6
  486. package/node_modules/browserify/test/identical_different/wow/y.js +0 -3
  487. package/node_modules/browserify/test/identical_different/x.js +0 -3
  488. package/node_modules/browserify/test/identical_different.js +0 -19
  489. package/node_modules/browserify/test/ignore/array.js +0 -2
  490. package/node_modules/browserify/test/ignore/by-id.js +0 -3
  491. package/node_modules/browserify/test/ignore/by-relative.js +0 -5
  492. package/node_modules/browserify/test/ignore/double-skip/index.js +0 -1
  493. package/node_modules/browserify/test/ignore/double-skip/skip.js +0 -5
  494. package/node_modules/browserify/test/ignore/double-skip.js +0 -2
  495. package/node_modules/browserify/test/ignore/ignored/skip.js +0 -1
  496. package/node_modules/browserify/test/ignore/main.js +0 -1
  497. package/node_modules/browserify/test/ignore/relative/index.js +0 -1
  498. package/node_modules/browserify/test/ignore/skip.js +0 -1
  499. package/node_modules/browserify/test/ignore/skip2.js +0 -1
  500. package/node_modules/browserify/test/ignore.js +0 -91
  501. package/node_modules/browserify/test/ignore_browser_field/main.js +0 -2
  502. package/node_modules/browserify/test/ignore_browser_field.js +0 -21
  503. package/node_modules/browserify/test/ignore_missing/main.js +0 -1
  504. package/node_modules/browserify/test/ignore_missing.js +0 -41
  505. package/node_modules/browserify/test/ignore_transform_key/main.js +0 -3
  506. package/node_modules/browserify/test/ignore_transform_key.js +0 -17
  507. package/node_modules/browserify/test/json/beep.json +0 -4
  508. package/node_modules/browserify/test/json/evil-chars.json +0 -3
  509. package/node_modules/browserify/test/json/evil.js +0 -2
  510. package/node_modules/browserify/test/json/invalid.js +0 -2
  511. package/node_modules/browserify/test/json/invalid.json +0 -3
  512. package/node_modules/browserify/test/json/main.js +0 -2
  513. package/node_modules/browserify/test/json.js +0 -57
  514. package/node_modules/browserify/test/leak.js +0 -59
  515. package/node_modules/browserify/test/maxlisteners/main.js +0 -3
  516. package/node_modules/browserify/test/maxlisteners.js +0 -13
  517. package/node_modules/browserify/test/multi_bundle/_prelude.js +0 -1
  518. package/node_modules/browserify/test/multi_bundle/a.js +0 -3
  519. package/node_modules/browserify/test/multi_bundle/b.js +0 -5
  520. package/node_modules/browserify/test/multi_bundle/c.js +0 -4
  521. package/node_modules/browserify/test/multi_bundle.js +0 -86
  522. package/node_modules/browserify/test/multi_bundle_unique.js +0 -56
  523. package/node_modules/browserify/test/multi_entry/a.js +0 -2
  524. package/node_modules/browserify/test/multi_entry/b.js +0 -2
  525. package/node_modules/browserify/test/multi_entry/c.js +0 -2
  526. package/node_modules/browserify/test/multi_entry.js +0 -122
  527. package/node_modules/browserify/test/multi_entry_cross_require/a.js +0 -8
  528. package/node_modules/browserify/test/multi_entry_cross_require/c.js +0 -7
  529. package/node_modules/browserify/test/multi_entry_cross_require/lib/b.js +0 -5
  530. package/node_modules/browserify/test/multi_entry_cross_require.js +0 -93
  531. package/node_modules/browserify/test/multi_require/a.js +0 -3
  532. package/node_modules/browserify/test/multi_require/main.js +0 -4
  533. package/node_modules/browserify/test/multi_require.js +0 -18
  534. package/node_modules/browserify/test/multi_symlink/main.js +0 -2
  535. package/node_modules/browserify/test/multi_symlink/x.js +0 -1
  536. package/node_modules/browserify/test/multi_symlink.js +0 -13
  537. package/node_modules/browserify/test/no_builtins/extra/fs.js +0 -1
  538. package/node_modules/browserify/test/no_builtins/extra/tls.js +0 -1
  539. package/node_modules/browserify/test/no_builtins/main.js +0 -4
  540. package/node_modules/browserify/test/no_builtins/x.txt +0 -1
  541. package/node_modules/browserify/test/no_builtins.js +0 -66
  542. package/node_modules/browserify/test/noparse/a.js +0 -4
  543. package/node_modules/browserify/test/noparse/b.js +0 -5
  544. package/node_modules/browserify/test/noparse/dir1/1.js +0 -4
  545. package/node_modules/browserify/test/noparse/dir1/dir2/2.js +0 -3
  546. package/node_modules/browserify/test/noparse.js +0 -59
  547. package/node_modules/browserify/test/pack.js +0 -33
  548. package/node_modules/browserify/test/paths/main.js +0 -3
  549. package/node_modules/browserify/test/paths/x/aaa/index.js +0 -1
  550. package/node_modules/browserify/test/paths/x/ccc/index.js +0 -1
  551. package/node_modules/browserify/test/paths/y/bbb/index.js +0 -1
  552. package/node_modules/browserify/test/paths/y/ccc/index.js +0 -1
  553. package/node_modules/browserify/test/paths.js +0 -32
  554. package/node_modules/browserify/test/paths_transform.js +0 -76
  555. package/node_modules/browserify/test/pipeline_deps/bar.js +0 -3
  556. package/node_modules/browserify/test/pipeline_deps/foo.js +0 -5
  557. package/node_modules/browserify/test/pipeline_deps/main.js +0 -2
  558. package/node_modules/browserify/test/pipeline_deps/xyz.js +0 -2
  559. package/node_modules/browserify/test/pipeline_deps.js +0 -22
  560. package/node_modules/browserify/test/pkg/main.js +0 -1
  561. package/node_modules/browserify/test/pkg/package.json +0 -1
  562. package/node_modules/browserify/test/pkg.js +0 -20
  563. package/node_modules/browserify/test/pkg_event/main.js +0 -1
  564. package/node_modules/browserify/test/pkg_event/package.json +0 -3
  565. package/node_modules/browserify/test/pkg_event.js +0 -31
  566. package/node_modules/browserify/test/plugin/main.js +0 -1
  567. package/node_modules/browserify/test/plugin.js +0 -28
  568. package/node_modules/browserify/test/preserve-symlinks.js +0 -27
  569. package/node_modules/browserify/test/preserve_symlinks/a/index.js +0 -1
  570. package/node_modules/browserify/test/preserve_symlinks/b/index.js +0 -1
  571. package/node_modules/browserify/test/process/main.js +0 -3
  572. package/node_modules/browserify/test/process/one.js +0 -1
  573. package/node_modules/browserify/test/process/two.js +0 -1
  574. package/node_modules/browserify/test/process.js +0 -21
  575. package/node_modules/browserify/test/quotes/backtick.js +0 -1
  576. package/node_modules/browserify/test/quotes/main.js +0 -1
  577. package/node_modules/browserify/test/quotes/one.js +0 -1
  578. package/node_modules/browserify/test/quotes/three.js +0 -1
  579. package/node_modules/browserify/test/quotes/two.js +0 -1
  580. package/node_modules/browserify/test/quotes.js +0 -38
  581. package/node_modules/browserify/test/relative_dedupe/a/a.js +0 -3
  582. package/node_modules/browserify/test/relative_dedupe/a/b.js +0 -3
  583. package/node_modules/browserify/test/relative_dedupe/a/index.js +0 -4
  584. package/node_modules/browserify/test/relative_dedupe/b/a.js +0 -3
  585. package/node_modules/browserify/test/relative_dedupe/b/b.js +0 -3
  586. package/node_modules/browserify/test/relative_dedupe/b/index.js +0 -4
  587. package/node_modules/browserify/test/relative_dedupe/index.js +0 -4
  588. package/node_modules/browserify/test/relative_dedupe/main.js +0 -5
  589. package/node_modules/browserify/test/relative_dedupe.js +0 -17
  590. package/node_modules/browserify/test/require_cache.js +0 -19
  591. package/node_modules/browserify/test/require_expose/main.js +0 -1
  592. package/node_modules/browserify/test/require_expose/some_dep.js +0 -1
  593. package/node_modules/browserify/test/require_expose.js +0 -53
  594. package/node_modules/browserify/test/reset.js +0 -31
  595. package/node_modules/browserify/test/resolve_exposed/main.js +0 -2
  596. package/node_modules/browserify/test/resolve_exposed/x.js +0 -1
  597. package/node_modules/browserify/test/resolve_exposed/y/index.js +0 -1
  598. package/node_modules/browserify/test/resolve_exposed.js +0 -88
  599. package/node_modules/browserify/test/retarget.js +0 -25
  600. package/node_modules/browserify/test/reverse_multi_bundle/app.js +0 -22
  601. package/node_modules/browserify/test/reverse_multi_bundle/arbitrary.js +0 -6
  602. package/node_modules/browserify/test/reverse_multi_bundle/lazy.js +0 -9
  603. package/node_modules/browserify/test/reverse_multi_bundle/shared.js +0 -6
  604. package/node_modules/browserify/test/reverse_multi_bundle.js +0 -47
  605. package/node_modules/browserify/test/shared_symlink/app/index.js +0 -1
  606. package/node_modules/browserify/test/shared_symlink/main.js +0 -1
  607. package/node_modules/browserify/test/shared_symlink/shared/index.js +0 -1
  608. package/node_modules/browserify/test/shared_symlink.js +0 -17
  609. package/node_modules/browserify/test/shebang/foo.js +0 -2
  610. package/node_modules/browserify/test/shebang/main.js +0 -4
  611. package/node_modules/browserify/test/shebang.js +0 -11
  612. package/node_modules/browserify/test/spread/main.js +0 -1
  613. package/node_modules/browserify/test/spread.js +0 -14
  614. package/node_modules/browserify/test/standalone/main.js +0 -3
  615. package/node_modules/browserify/test/standalone/one.js +0 -1
  616. package/node_modules/browserify/test/standalone/two.js +0 -1
  617. package/node_modules/browserify/test/standalone.js +0 -85
  618. package/node_modules/browserify/test/standalone_events.js +0 -19
  619. package/node_modules/browserify/test/standalone_sourcemap.js +0 -55
  620. package/node_modules/browserify/test/stdin.js +0 -35
  621. package/node_modules/browserify/test/stream/bar.js +0 -1
  622. package/node_modules/browserify/test/stream/foo.js +0 -1
  623. package/node_modules/browserify/test/stream/main.js +0 -2
  624. package/node_modules/browserify/test/stream.js +0 -15
  625. package/node_modules/browserify/test/stream_file.js +0 -29
  626. package/node_modules/browserify/test/subdep/index.js +0 -1
  627. package/node_modules/browserify/test/subdep/package.json +0 -6
  628. package/node_modules/browserify/test/subdep.js +0 -16
  629. package/node_modules/browserify/test/symlink_dedupe/main.js +0 -6
  630. package/node_modules/browserify/test/symlink_dedupe/one/f.js +0 -3
  631. package/node_modules/browserify/test/symlink_dedupe/one/g.js +0 -2
  632. package/node_modules/browserify/test/symlink_dedupe.js +0 -16
  633. package/node_modules/browserify/test/syntax_cache/invalid.js +0 -2
  634. package/node_modules/browserify/test/syntax_cache/valid.js +0 -2
  635. package/node_modules/browserify/test/syntax_cache.js +0 -47
  636. package/node_modules/browserify/test/tr/f.js +0 -2
  637. package/node_modules/browserify/test/tr/main.js +0 -9
  638. package/node_modules/browserify/test/tr/package.json +0 -5
  639. package/node_modules/browserify/test/tr/subdir/g.js +0 -1
  640. package/node_modules/browserify/test/tr.js +0 -28
  641. package/node_modules/browserify/test/tr_args/main.js +0 -1
  642. package/node_modules/browserify/test/tr_args/tr.js +0 -12
  643. package/node_modules/browserify/test/tr_args.js +0 -24
  644. package/node_modules/browserify/test/tr_error.js +0 -33
  645. package/node_modules/browserify/test/tr_flags.js +0 -36
  646. package/node_modules/browserify/test/tr_global/main.js +0 -1
  647. package/node_modules/browserify/test/tr_global.js +0 -17
  648. package/node_modules/browserify/test/tr_no_entry/main.js +0 -1
  649. package/node_modules/browserify/test/tr_no_entry.js +0 -20
  650. package/node_modules/browserify/test/tr_once/main.js +0 -1
  651. package/node_modules/browserify/test/tr_once.js +0 -21
  652. package/node_modules/browserify/test/tr_order/replace_aaa.js +0 -10
  653. package/node_modules/browserify/test/tr_order/replace_bbb.js +0 -11
  654. package/node_modules/browserify/test/tr_order.js +0 -23
  655. package/node_modules/browserify/test/tr_symlink/a-module/index.js +0 -1
  656. package/node_modules/browserify/test/tr_symlink/app/main.js +0 -6
  657. package/node_modules/browserify/test/tr_symlink/app/package.json +0 -5
  658. package/node_modules/browserify/test/tr_symlink/b-module/ext.js +0 -1
  659. package/node_modules/browserify/test/tr_symlink/b-module/index.js +0 -2
  660. package/node_modules/browserify/test/tr_symlink.js +0 -27
  661. package/node_modules/browserify/test/unicode/main.js +0 -1
  662. package/node_modules/browserify/test/unicode/one.js +0 -1
  663. package/node_modules/browserify/test/unicode/two.js +0 -1
  664. package/node_modules/browserify/test/unicode.js +0 -19
  665. package/node_modules/browserify/test/util.js +0 -64
  666. package/node_modules/browserify/test/yield/f.js +0 -5
  667. package/node_modules/browserify/test/yield/main.js +0 -4
  668. package/node_modules/browserify/test/yield.js +0 -20
  669. package/node_modules/browserify-aes/.travis.yml +0 -15
  670. package/node_modules/browserify-aes/LICENSE +0 -21
  671. package/node_modules/browserify-aes/README.md +0 -19
  672. package/node_modules/browserify-aes/aes.js +0 -228
  673. package/node_modules/browserify-aes/authCipher.js +0 -117
  674. package/node_modules/browserify-aes/browser.js +0 -13
  675. package/node_modules/browserify-aes/decrypter.js +0 -124
  676. package/node_modules/browserify-aes/encrypter.js +0 -114
  677. package/node_modules/browserify-aes/ghash.js +0 -89
  678. package/node_modules/browserify-aes/incr32.js +0 -15
  679. package/node_modules/browserify-aes/index.js +0 -7
  680. package/node_modules/browserify-aes/modes/cbc.js +0 -17
  681. package/node_modules/browserify-aes/modes/cfb.js +0 -33
  682. package/node_modules/browserify-aes/modes/cfb1.js +0 -42
  683. package/node_modules/browserify-aes/modes/cfb8.js +0 -25
  684. package/node_modules/browserify-aes/modes/ctr.js +0 -30
  685. package/node_modules/browserify-aes/modes/ecb.js +0 -7
  686. package/node_modules/browserify-aes/modes/index.js +0 -18
  687. package/node_modules/browserify-aes/modes/list.json +0 -191
  688. package/node_modules/browserify-aes/modes/ofb.js +0 -16
  689. package/node_modules/browserify-aes/package.json +0 -43
  690. package/node_modules/browserify-aes/streamCipher.js +0 -27
  691. package/node_modules/browserify-cipher/.travis.yml +0 -14
  692. package/node_modules/browserify-cipher/LICENSE +0 -21
  693. package/node_modules/browserify-cipher/README.md +0 -7
  694. package/node_modules/browserify-cipher/browser.js +0 -67
  695. package/node_modules/browserify-cipher/index.js +0 -7
  696. package/node_modules/browserify-cipher/package.json +0 -26
  697. package/node_modules/browserify-cipher/test.js +0 -55
  698. package/node_modules/browserify-des/.travis.yml +0 -8
  699. package/node_modules/browserify-des/index.js +0 -50
  700. package/node_modules/browserify-des/license +0 -21
  701. package/node_modules/browserify-des/modes.js +0 -24
  702. package/node_modules/browserify-des/package.json +0 -30
  703. package/node_modules/browserify-des/readme.md +0 -6
  704. package/node_modules/browserify-des/test.js +0 -81
  705. package/node_modules/browserify-rsa/CHANGELOG.md +0 -98
  706. package/node_modules/browserify-rsa/LICENSE +0 -21
  707. package/node_modules/browserify-rsa/README.md +0 -15
  708. package/node_modules/browserify-rsa/index.js +0 -38
  709. package/node_modules/browserify-rsa/package.json +0 -66
  710. package/node_modules/browserify-sign/LICENSE +0 -13
  711. package/node_modules/browserify-sign/README.md +0 -13
  712. package/node_modules/browserify-sign/algos.js +0 -3
  713. package/node_modules/browserify-sign/browser/algorithms.json +0 -152
  714. package/node_modules/browserify-sign/browser/curves.json +0 -8
  715. package/node_modules/browserify-sign/browser/index.js +0 -92
  716. package/node_modules/browserify-sign/browser/sign.js +0 -150
  717. package/node_modules/browserify-sign/browser/verify.js +0 -86
  718. package/node_modules/browserify-sign/index.js +0 -9
  719. package/node_modules/browserify-sign/package.json +0 -72
  720. package/node_modules/browserify-zlib/.npmignore +0 -7
  721. package/node_modules/browserify-zlib/.travis.yml +0 -16
  722. package/node_modules/browserify-zlib/LICENSE +0 -70
  723. package/node_modules/browserify-zlib/README.md +0 -24
  724. package/node_modules/browserify-zlib/karma.conf.js +0 -11
  725. package/node_modules/browserify-zlib/lib/binding.js +0 -409
  726. package/node_modules/browserify-zlib/lib/index.js +0 -609
  727. package/node_modules/browserify-zlib/package.json +0 -64
  728. package/node_modules/browserify-zlib/src/binding.js +0 -432
  729. package/node_modules/browserify-zlib/src/index.js +0 -650
  730. package/node_modules/buffer-from/LICENSE +0 -21
  731. package/node_modules/buffer-from/index.js +0 -72
  732. package/node_modules/buffer-from/package.json +0 -19
  733. package/node_modules/buffer-from/readme.md +0 -69
  734. package/node_modules/buffer-xor/.npmignore +0 -1
  735. package/node_modules/buffer-xor/.travis.yml +0 -9
  736. package/node_modules/buffer-xor/LICENSE +0 -21
  737. package/node_modules/buffer-xor/README.md +0 -41
  738. package/node_modules/buffer-xor/index.js +0 -10
  739. package/node_modules/buffer-xor/inline.js +0 -1
  740. package/node_modules/buffer-xor/inplace.js +0 -9
  741. package/node_modules/buffer-xor/package.json +0 -37
  742. package/node_modules/buffer-xor/test/fixtures.json +0 -23
  743. package/node_modules/buffer-xor/test/index.js +0 -38
  744. package/node_modules/builtin-status-codes/browser.js +0 -64
  745. package/node_modules/builtin-status-codes/build.js +0 -8
  746. package/node_modules/builtin-status-codes/index.js +0 -3
  747. package/node_modules/builtin-status-codes/license +0 -21
  748. package/node_modules/builtin-status-codes/package.json +0 -39
  749. package/node_modules/builtin-status-codes/readme.md +0 -31
  750. package/node_modules/cached-path-relative/History.md +0 -0
  751. package/node_modules/cached-path-relative/Makefile +0 -20
  752. package/node_modules/cached-path-relative/Readme.md +0 -41
  753. package/node_modules/cached-path-relative/lib/index.js +0 -43
  754. package/node_modules/cached-path-relative/package.json +0 -13
  755. package/node_modules/cached-path-relative/shim.js +0 -12
  756. package/node_modules/cached-path-relative/test/index.js +0 -17
  757. package/node_modules/call-bind/.eslintignore +0 -1
  758. package/node_modules/call-bind/.eslintrc +0 -16
  759. package/node_modules/call-bind/.github/FUNDING.yml +0 -12
  760. package/node_modules/call-bind/.nycrc +0 -9
  761. package/node_modules/call-bind/CHANGELOG.md +0 -106
  762. package/node_modules/call-bind/LICENSE +0 -21
  763. package/node_modules/call-bind/README.md +0 -64
  764. package/node_modules/call-bind/callBound.js +0 -15
  765. package/node_modules/call-bind/index.js +0 -24
  766. package/node_modules/call-bind/package.json +0 -93
  767. package/node_modules/call-bind/test/callBound.js +0 -54
  768. package/node_modules/call-bind/test/index.js +0 -74
  769. package/node_modules/call-bind-apply-helpers/.eslintrc +0 -17
  770. package/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +0 -12
  771. package/node_modules/call-bind-apply-helpers/.nycrc +0 -9
  772. package/node_modules/call-bind-apply-helpers/CHANGELOG.md +0 -30
  773. package/node_modules/call-bind-apply-helpers/LICENSE +0 -21
  774. package/node_modules/call-bind-apply-helpers/README.md +0 -62
  775. package/node_modules/call-bind-apply-helpers/actualApply.d.ts +0 -1
  776. package/node_modules/call-bind-apply-helpers/actualApply.js +0 -10
  777. package/node_modules/call-bind-apply-helpers/applyBind.d.ts +0 -19
  778. package/node_modules/call-bind-apply-helpers/applyBind.js +0 -10
  779. package/node_modules/call-bind-apply-helpers/functionApply.d.ts +0 -1
  780. package/node_modules/call-bind-apply-helpers/functionApply.js +0 -4
  781. package/node_modules/call-bind-apply-helpers/functionCall.d.ts +0 -1
  782. package/node_modules/call-bind-apply-helpers/functionCall.js +0 -4
  783. package/node_modules/call-bind-apply-helpers/index.d.ts +0 -64
  784. package/node_modules/call-bind-apply-helpers/index.js +0 -15
  785. package/node_modules/call-bind-apply-helpers/package.json +0 -85
  786. package/node_modules/call-bind-apply-helpers/reflectApply.d.ts +0 -3
  787. package/node_modules/call-bind-apply-helpers/reflectApply.js +0 -4
  788. package/node_modules/call-bind-apply-helpers/test/index.js +0 -63
  789. package/node_modules/call-bind-apply-helpers/tsconfig.json +0 -9
  790. package/node_modules/call-bound/.eslintrc +0 -13
  791. package/node_modules/call-bound/.github/FUNDING.yml +0 -12
  792. package/node_modules/call-bound/.nycrc +0 -9
  793. package/node_modules/call-bound/CHANGELOG.md +0 -42
  794. package/node_modules/call-bound/LICENSE +0 -21
  795. package/node_modules/call-bound/README.md +0 -53
  796. package/node_modules/call-bound/index.d.ts +0 -94
  797. package/node_modules/call-bound/index.js +0 -19
  798. package/node_modules/call-bound/package.json +0 -99
  799. package/node_modules/call-bound/test/index.js +0 -61
  800. package/node_modules/call-bound/tsconfig.json +0 -10
  801. package/node_modules/cipher-base/.eslintrc +0 -26
  802. package/node_modules/cipher-base/.github/FUNDING.yml +0 -12
  803. package/node_modules/cipher-base/CHANGELOG.md +0 -66
  804. package/node_modules/cipher-base/LICENSE +0 -21
  805. package/node_modules/cipher-base/README.md +0 -17
  806. package/node_modules/cipher-base/index.js +0 -167
  807. package/node_modules/cipher-base/package.json +0 -62
  808. package/node_modules/cipher-base/test/index.js +0 -221
  809. package/node_modules/combine-source-map/.npmignore +0 -16
  810. package/node_modules/combine-source-map/.travis.yml +0 -8
  811. package/node_modules/combine-source-map/LICENSE +0 -23
  812. package/node_modules/combine-source-map/README.md +0 -111
  813. package/node_modules/combine-source-map/example/two-files-short.js +0 -26
  814. package/node_modules/combine-source-map/example/two-files.js +0 -46
  815. package/node_modules/combine-source-map/index.js +0 -155
  816. package/node_modules/combine-source-map/lib/mappings-from-map.js +0 -30
  817. package/node_modules/combine-source-map/lib/path-is-absolute.js +0 -20
  818. package/node_modules/combine-source-map/lib/path-is-absolute.license +0 -21
  819. package/node_modules/combine-source-map/package.json +0 -42
  820. package/node_modules/combine-source-map/test/combine-source-map.js +0 -347
  821. package/node_modules/concat-map/.travis.yml +0 -4
  822. package/node_modules/concat-map/LICENSE +0 -18
  823. package/node_modules/concat-map/README.markdown +0 -62
  824. package/node_modules/concat-map/example/map.js +0 -6
  825. package/node_modules/concat-map/index.js +0 -13
  826. package/node_modules/concat-map/package.json +0 -43
  827. package/node_modules/concat-map/test/map.js +0 -39
  828. package/node_modules/concat-stream/LICENSE +0 -24
  829. package/node_modules/concat-stream/index.js +0 -144
  830. package/node_modules/concat-stream/package.json +0 -55
  831. package/node_modules/concat-stream/readme.md +0 -102
  832. package/node_modules/console-browserify/.testem.json +0 -14
  833. package/node_modules/console-browserify/.travis.yml +0 -11
  834. package/node_modules/console-browserify/CHANGELOG.md +0 -10
  835. package/node_modules/console-browserify/LICENCE +0 -19
  836. package/node_modules/console-browserify/README.md +0 -42
  837. package/node_modules/console-browserify/index.js +0 -87
  838. package/node_modules/console-browserify/package.json +0 -59
  839. package/node_modules/console-browserify/test/index.js +0 -67
  840. package/node_modules/console-browserify/test/static/index.html +0 -12
  841. package/node_modules/console-browserify/test/static/test-adapter.js +0 -53
  842. package/node_modules/constants-browserify/README.md +0 -54
  843. package/node_modules/constants-browserify/build.sh +0 -1
  844. package/node_modules/constants-browserify/constants.json +0 -209
  845. package/node_modules/constants-browserify/package.json +0 -34
  846. package/node_modules/constants-browserify/test.js +0 -18
  847. package/node_modules/convert-source-map/.npmignore +0 -16
  848. package/node_modules/convert-source-map/.travis.yml +0 -5
  849. package/node_modules/convert-source-map/LICENSE +0 -23
  850. package/node_modules/convert-source-map/README.md +0 -121
  851. package/node_modules/convert-source-map/example/comment-to-json.js +0 -15
  852. package/node_modules/convert-source-map/index.js +0 -156
  853. package/node_modules/convert-source-map/package.json +0 -36
  854. package/node_modules/convert-source-map/test/comment-regex.js +0 -138
  855. package/node_modules/convert-source-map/test/convert-source-map.js +0 -207
  856. package/node_modules/convert-source-map/test/fixtures/map-file-comment-double-slash.css +0 -14
  857. package/node_modules/convert-source-map/test/fixtures/map-file-comment-inline.css +0 -14
  858. package/node_modules/convert-source-map/test/fixtures/map-file-comment.css +0 -14
  859. package/node_modules/convert-source-map/test/fixtures/map-file-comment.css.map +0 -6
  860. package/node_modules/convert-source-map/test/map-file-comment.js +0 -70
  861. package/node_modules/core-util-is/LICENSE +0 -19
  862. package/node_modules/core-util-is/README.md +0 -3
  863. package/node_modules/core-util-is/lib/util.js +0 -107
  864. package/node_modules/core-util-is/package.json +0 -38
  865. package/node_modules/create-ecdh/.travis.yml +0 -7
  866. package/node_modules/create-ecdh/LICENSE +0 -21
  867. package/node_modules/create-ecdh/browser.js +0 -124
  868. package/node_modules/create-ecdh/index.js +0 -3
  869. package/node_modules/create-ecdh/node_modules/bn.js/LICENSE +0 -19
  870. package/node_modules/create-ecdh/node_modules/bn.js/README.md +0 -200
  871. package/node_modules/create-ecdh/node_modules/bn.js/lib/bn.js +0 -3447
  872. package/node_modules/create-ecdh/node_modules/bn.js/package.json +0 -36
  873. package/node_modules/create-ecdh/node_modules/bn.js/util/genCombMulTo.js +0 -65
  874. package/node_modules/create-ecdh/node_modules/bn.js/util/genCombMulTo10.js +0 -65
  875. package/node_modules/create-ecdh/package.json +0 -35
  876. package/node_modules/create-ecdh/readme.md +0 -4
  877. package/node_modules/create-hash/.travis.yml +0 -17
  878. package/node_modules/create-hash/LICENSE +0 -21
  879. package/node_modules/create-hash/README.md +0 -19
  880. package/node_modules/create-hash/browser.js +0 -30
  881. package/node_modules/create-hash/index.js +0 -1
  882. package/node_modules/create-hash/md5.js +0 -5
  883. package/node_modules/create-hash/package.json +0 -39
  884. package/node_modules/create-hash/test.js +0 -41
  885. package/node_modules/create-hmac/LICENSE +0 -21
  886. package/node_modules/create-hmac/README.md +0 -20
  887. package/node_modules/create-hmac/browser.js +0 -62
  888. package/node_modules/create-hmac/index.js +0 -1
  889. package/node_modules/create-hmac/legacy.js +0 -46
  890. package/node_modules/create-hmac/package.json +0 -45
  891. package/node_modules/crypto-browserify/.eslintrc +0 -24
  892. package/node_modules/crypto-browserify/.github/FUNDING.yml +0 -12
  893. package/node_modules/crypto-browserify/.github/workflows/node-aught.yml +0 -12
  894. package/node_modules/crypto-browserify/.github/workflows/node-pretest.yml +0 -9
  895. package/node_modules/crypto-browserify/.github/workflows/node-tens.yml +0 -11
  896. package/node_modules/crypto-browserify/.github/workflows/rebase.yml +0 -9
  897. package/node_modules/crypto-browserify/.github/workflows/require-allow-edits.yml +0 -12
  898. package/node_modules/crypto-browserify/.nycrc +0 -9
  899. package/node_modules/crypto-browserify/.travis.yml +0 -18
  900. package/node_modules/crypto-browserify/LICENSE +0 -24
  901. package/node_modules/crypto-browserify/README.md +0 -67
  902. package/node_modules/crypto-browserify/example/bundle.js +0 -605
  903. package/node_modules/crypto-browserify/example/index.html +0 -12
  904. package/node_modules/crypto-browserify/example/test.js +0 -6
  905. package/node_modules/crypto-browserify/index.js +0 -103
  906. package/node_modules/crypto-browserify/package.json +0 -54
  907. package/node_modules/crypto-browserify/test/aes.js +0 -54
  908. package/node_modules/crypto-browserify/test/create-hash.js +0 -51
  909. package/node_modules/crypto-browserify/test/create-hmac.js +0 -54
  910. package/node_modules/crypto-browserify/test/dh.js +0 -60
  911. package/node_modules/crypto-browserify/test/ecdh.js +0 -62
  912. package/node_modules/crypto-browserify/test/index.js +0 -22
  913. package/node_modules/crypto-browserify/test/node/dh.js +0 -69
  914. package/node_modules/crypto-browserify/test/pbkdf2.js +0 -23
  915. package/node_modules/crypto-browserify/test/public-encrypt.js +0 -39
  916. package/node_modules/crypto-browserify/test/random-bytes.js +0 -65
  917. package/node_modules/crypto-browserify/test/random-fill.js +0 -55
  918. package/node_modules/crypto-browserify/test/sign.js +0 -61
  919. package/node_modules/dash-ast/.travis.yml +0 -7
  920. package/node_modules/dash-ast/CHANGELOG.md +0 -8
  921. package/node_modules/dash-ast/LICENSE.md +0 -15
  922. package/node_modules/dash-ast/README.md +0 -58
  923. package/node_modules/dash-ast/bench/index.js +0 -71
  924. package/node_modules/dash-ast/index.js +0 -84
  925. package/node_modules/dash-ast/package.json +0 -39
  926. package/node_modules/dash-ast/test/index.js +0 -38
  927. package/node_modules/define-data-property/.eslintrc +0 -24
  928. package/node_modules/define-data-property/.github/FUNDING.yml +0 -12
  929. package/node_modules/define-data-property/.nycrc +0 -13
  930. package/node_modules/define-data-property/CHANGELOG.md +0 -70
  931. package/node_modules/define-data-property/LICENSE +0 -21
  932. package/node_modules/define-data-property/README.md +0 -67
  933. package/node_modules/define-data-property/index.d.ts +0 -12
  934. package/node_modules/define-data-property/index.js +0 -56
  935. package/node_modules/define-data-property/package.json +0 -106
  936. package/node_modules/define-data-property/test/index.js +0 -392
  937. package/node_modules/define-data-property/tsconfig.json +0 -59
  938. package/node_modules/define-properties/.editorconfig +0 -13
  939. package/node_modules/define-properties/.eslintrc +0 -19
  940. package/node_modules/define-properties/.github/FUNDING.yml +0 -12
  941. package/node_modules/define-properties/.nycrc +0 -9
  942. package/node_modules/define-properties/CHANGELOG.md +0 -91
  943. package/node_modules/define-properties/LICENSE +0 -21
  944. package/node_modules/define-properties/README.md +0 -84
  945. package/node_modules/define-properties/index.js +0 -47
  946. package/node_modules/define-properties/package.json +0 -88
  947. package/node_modules/defined/.eslintrc +0 -19
  948. package/node_modules/defined/.github/FUNDING.yml +0 -12
  949. package/node_modules/defined/CHANGELOG.md +0 -46
  950. package/node_modules/defined/LICENSE +0 -18
  951. package/node_modules/defined/README.md +0 -72
  952. package/node_modules/defined/example/defined.js +0 -6
  953. package/node_modules/defined/index.js +0 -9
  954. package/node_modules/defined/package.json +0 -93
  955. package/node_modules/defined/test/def.js +0 -24
  956. package/node_modules/defined/test/falsy.js +0 -11
  957. package/node_modules/deps-sort/.travis.yml +0 -17
  958. package/node_modules/deps-sort/LICENSE +0 -21
  959. package/node_modules/deps-sort/bin/cmd.js +0 -10
  960. package/node_modules/deps-sort/example/sort.js +0 -6
  961. package/node_modules/deps-sort/index.js +0 -122
  962. package/node_modules/deps-sort/package.json +0 -42
  963. package/node_modules/deps-sort/readme.markdown +0 -107
  964. package/node_modules/deps-sort/test/dedupe-deps-of-deps.js +0 -71
  965. package/node_modules/deps-sort/test/dedupe.js +0 -39
  966. package/node_modules/deps-sort/test/dedupe_index.js +0 -56
  967. package/node_modules/deps-sort/test/dedupe_undef.js +0 -37
  968. package/node_modules/deps-sort/test/expose.js +0 -38
  969. package/node_modules/deps-sort/test/expose_str.js +0 -44
  970. package/node_modules/deps-sort/test/indexed.js +0 -38
  971. package/node_modules/deps-sort/test/sort.js +0 -23
  972. package/node_modules/des.js/.jscsrc +0 -46
  973. package/node_modules/des.js/.jshintrc +0 -89
  974. package/node_modules/des.js/README.md +0 -26
  975. package/node_modules/des.js/lib/des/cbc.js +0 -65
  976. package/node_modules/des.js/lib/des/cipher.js +0 -142
  977. package/node_modules/des.js/lib/des/des.js +0 -150
  978. package/node_modules/des.js/lib/des/ede.js +0 -54
  979. package/node_modules/des.js/lib/des/utils.js +0 -256
  980. package/node_modules/des.js/lib/des.js +0 -7
  981. package/node_modules/des.js/package.json +0 -33
  982. package/node_modules/des.js/test/cbc-test.js +0 -73
  983. package/node_modules/des.js/test/des-test.js +0 -139
  984. package/node_modules/des.js/test/ede-test.js +0 -106
  985. package/node_modules/des.js/test/fixtures.js +0 -5
  986. package/node_modules/des.js/test/utils-test.js +0 -169
  987. package/node_modules/detective/.travis.yml +0 -17
  988. package/node_modules/detective/CHANGELOG.md +0 -26
  989. package/node_modules/detective/LICENSE +0 -18
  990. package/node_modules/detective/bench/detect.js +0 -7
  991. package/node_modules/detective/bench/esprima_v_acorn.txt +0 -18
  992. package/node_modules/detective/bin/detective.js +0 -11
  993. package/node_modules/detective/example/strings.js +0 -6
  994. package/node_modules/detective/example/strings_src.js +0 -3
  995. package/node_modules/detective/index.js +0 -80
  996. package/node_modules/detective/package.json +0 -37
  997. package/node_modules/detective/readme.markdown +0 -81
  998. package/node_modules/detective/test/both.js +0 -26
  999. package/node_modules/detective/test/chained.js +0 -9
  1000. package/node_modules/detective/test/complicated.js +0 -58
  1001. package/node_modules/detective/test/es2019.js +0 -15
  1002. package/node_modules/detective/test/es6-module.js +0 -9
  1003. package/node_modules/detective/test/files/both.js +0 -4
  1004. package/node_modules/detective/test/files/chained.js +0 -5
  1005. package/node_modules/detective/test/files/es6-module.js +0 -5
  1006. package/node_modules/detective/test/files/for-await.js +0 -5
  1007. package/node_modules/detective/test/files/generators.js +0 -5
  1008. package/node_modules/detective/test/files/isrequire.js +0 -14
  1009. package/node_modules/detective/test/files/nested.js +0 -22
  1010. package/node_modules/detective/test/files/optional-catch.js +0 -4
  1011. package/node_modules/detective/test/files/rest-spread.js +0 -9
  1012. package/node_modules/detective/test/files/set-in-object-pattern.js +0 -10
  1013. package/node_modules/detective/test/files/shebang.js +0 -5
  1014. package/node_modules/detective/test/files/sparse-array.js +0 -3
  1015. package/node_modules/detective/test/files/strings.js +0 -13
  1016. package/node_modules/detective/test/files/word.js +0 -13
  1017. package/node_modules/detective/test/files/yield.js +0 -4
  1018. package/node_modules/detective/test/generators.js +0 -9
  1019. package/node_modules/detective/test/isrequire.js +0 -20
  1020. package/node_modules/detective/test/nested.js +0 -9
  1021. package/node_modules/detective/test/noargs.js +0 -26
  1022. package/node_modules/detective/test/parseopts.js +0 -62
  1023. package/node_modules/detective/test/rest-spread.js +0 -9
  1024. package/node_modules/detective/test/return.js +0 -9
  1025. package/node_modules/detective/test/set-in-object-pattern.js +0 -12
  1026. package/node_modules/detective/test/shebang.js +0 -9
  1027. package/node_modules/detective/test/sparse-array.js +0 -14
  1028. package/node_modules/detective/test/strings.js +0 -9
  1029. package/node_modules/detective/test/word.js +0 -12
  1030. package/node_modules/detective/test/yield.js +0 -9
  1031. package/node_modules/diffie-hellman/.travis.yml +0 -10
  1032. package/node_modules/diffie-hellman/LICENSE +0 -19
  1033. package/node_modules/diffie-hellman/browser.js +0 -42
  1034. package/node_modules/diffie-hellman/index.js +0 -10
  1035. package/node_modules/diffie-hellman/lib/dh.js +0 -164
  1036. package/node_modules/diffie-hellman/lib/generatePrime.js +0 -105
  1037. package/node_modules/diffie-hellman/lib/primes.json +0 -34
  1038. package/node_modules/diffie-hellman/node_modules/bn.js/LICENSE +0 -19
  1039. package/node_modules/diffie-hellman/node_modules/bn.js/README.md +0 -200
  1040. package/node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js +0 -3447
  1041. package/node_modules/diffie-hellman/node_modules/bn.js/package.json +0 -36
  1042. package/node_modules/diffie-hellman/node_modules/bn.js/util/genCombMulTo.js +0 -65
  1043. package/node_modules/diffie-hellman/node_modules/bn.js/util/genCombMulTo10.js +0 -65
  1044. package/node_modules/diffie-hellman/package.json +0 -35
  1045. package/node_modules/diffie-hellman/readme.md +0 -4
  1046. package/node_modules/domain-browser/HISTORY.md +0 -46
  1047. package/node_modules/domain-browser/LICENSE.md +0 -23
  1048. package/node_modules/domain-browser/README.md +0 -121
  1049. package/node_modules/domain-browser/package.json +0 -120
  1050. package/node_modules/domain-browser/source/index.js +0 -70
  1051. package/node_modules/dunder-proto/.eslintrc +0 -5
  1052. package/node_modules/dunder-proto/.github/FUNDING.yml +0 -12
  1053. package/node_modules/dunder-proto/.nycrc +0 -13
  1054. package/node_modules/dunder-proto/CHANGELOG.md +0 -24
  1055. package/node_modules/dunder-proto/LICENSE +0 -21
  1056. package/node_modules/dunder-proto/README.md +0 -54
  1057. package/node_modules/dunder-proto/get.d.ts +0 -5
  1058. package/node_modules/dunder-proto/get.js +0 -30
  1059. package/node_modules/dunder-proto/package.json +0 -76
  1060. package/node_modules/dunder-proto/set.d.ts +0 -5
  1061. package/node_modules/dunder-proto/set.js +0 -35
  1062. package/node_modules/dunder-proto/test/get.js +0 -34
  1063. package/node_modules/dunder-proto/test/index.js +0 -4
  1064. package/node_modules/dunder-proto/test/set.js +0 -50
  1065. package/node_modules/dunder-proto/tsconfig.json +0 -9
  1066. package/node_modules/duplexer2/LICENSE.md +0 -26
  1067. package/node_modules/duplexer2/README.md +0 -115
  1068. package/node_modules/duplexer2/index.js +0 -76
  1069. package/node_modules/duplexer2/package.json +0 -28
  1070. package/node_modules/elliptic/README.md +0 -238
  1071. package/node_modules/elliptic/lib/elliptic/curve/base.js +0 -381
  1072. package/node_modules/elliptic/lib/elliptic/curve/edwards.js +0 -435
  1073. package/node_modules/elliptic/lib/elliptic/curve/index.js +0 -8
  1074. package/node_modules/elliptic/lib/elliptic/curve/mont.js +0 -178
  1075. package/node_modules/elliptic/lib/elliptic/curve/short.js +0 -938
  1076. package/node_modules/elliptic/lib/elliptic/curves.js +0 -206
  1077. package/node_modules/elliptic/lib/elliptic/ec/index.js +0 -278
  1078. package/node_modules/elliptic/lib/elliptic/ec/key.js +0 -121
  1079. package/node_modules/elliptic/lib/elliptic/ec/signature.js +0 -176
  1080. package/node_modules/elliptic/lib/elliptic/eddsa/index.js +0 -121
  1081. package/node_modules/elliptic/lib/elliptic/eddsa/key.js +0 -95
  1082. package/node_modules/elliptic/lib/elliptic/eddsa/signature.js +0 -66
  1083. package/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js +0 -780
  1084. package/node_modules/elliptic/lib/elliptic/utils.js +0 -122
  1085. package/node_modules/elliptic/lib/elliptic.js +0 -13
  1086. package/node_modules/elliptic/node_modules/bn.js/LICENSE +0 -19
  1087. package/node_modules/elliptic/node_modules/bn.js/README.md +0 -200
  1088. package/node_modules/elliptic/node_modules/bn.js/lib/bn.js +0 -3447
  1089. package/node_modules/elliptic/node_modules/bn.js/package.json +0 -36
  1090. package/node_modules/elliptic/node_modules/bn.js/util/genCombMulTo.js +0 -65
  1091. package/node_modules/elliptic/node_modules/bn.js/util/genCombMulTo10.js +0 -65
  1092. package/node_modules/elliptic/package.json +0 -56
  1093. package/node_modules/es-define-property/.eslintrc +0 -13
  1094. package/node_modules/es-define-property/.github/FUNDING.yml +0 -12
  1095. package/node_modules/es-define-property/.nycrc +0 -9
  1096. package/node_modules/es-define-property/CHANGELOG.md +0 -29
  1097. package/node_modules/es-define-property/LICENSE +0 -21
  1098. package/node_modules/es-define-property/README.md +0 -49
  1099. package/node_modules/es-define-property/index.d.ts +0 -3
  1100. package/node_modules/es-define-property/index.js +0 -14
  1101. package/node_modules/es-define-property/package.json +0 -81
  1102. package/node_modules/es-define-property/test/index.js +0 -56
  1103. package/node_modules/es-define-property/tsconfig.json +0 -10
  1104. package/node_modules/es-errors/.eslintrc +0 -5
  1105. package/node_modules/es-errors/.github/FUNDING.yml +0 -12
  1106. package/node_modules/es-errors/CHANGELOG.md +0 -40
  1107. package/node_modules/es-errors/LICENSE +0 -21
  1108. package/node_modules/es-errors/README.md +0 -55
  1109. package/node_modules/es-errors/eval.d.ts +0 -3
  1110. package/node_modules/es-errors/eval.js +0 -4
  1111. package/node_modules/es-errors/index.d.ts +0 -3
  1112. package/node_modules/es-errors/index.js +0 -4
  1113. package/node_modules/es-errors/package.json +0 -80
  1114. package/node_modules/es-errors/range.d.ts +0 -3
  1115. package/node_modules/es-errors/range.js +0 -4
  1116. package/node_modules/es-errors/ref.d.ts +0 -3
  1117. package/node_modules/es-errors/ref.js +0 -4
  1118. package/node_modules/es-errors/syntax.d.ts +0 -3
  1119. package/node_modules/es-errors/syntax.js +0 -4
  1120. package/node_modules/es-errors/test/index.js +0 -19
  1121. package/node_modules/es-errors/tsconfig.json +0 -49
  1122. package/node_modules/es-errors/type.d.ts +0 -3
  1123. package/node_modules/es-errors/type.js +0 -4
  1124. package/node_modules/es-errors/uri.d.ts +0 -3
  1125. package/node_modules/es-errors/uri.js +0 -4
  1126. package/node_modules/es-object-atoms/.eslintrc +0 -16
  1127. package/node_modules/es-object-atoms/.github/FUNDING.yml +0 -12
  1128. package/node_modules/es-object-atoms/CHANGELOG.md +0 -37
  1129. package/node_modules/es-object-atoms/LICENSE +0 -21
  1130. package/node_modules/es-object-atoms/README.md +0 -63
  1131. package/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +0 -3
  1132. package/node_modules/es-object-atoms/RequireObjectCoercible.js +0 -11
  1133. package/node_modules/es-object-atoms/ToObject.d.ts +0 -7
  1134. package/node_modules/es-object-atoms/ToObject.js +0 -10
  1135. package/node_modules/es-object-atoms/index.d.ts +0 -3
  1136. package/node_modules/es-object-atoms/index.js +0 -4
  1137. package/node_modules/es-object-atoms/isObject.d.ts +0 -3
  1138. package/node_modules/es-object-atoms/isObject.js +0 -6
  1139. package/node_modules/es-object-atoms/package.json +0 -80
  1140. package/node_modules/es-object-atoms/test/index.js +0 -38
  1141. package/node_modules/es-object-atoms/tsconfig.json +0 -6
  1142. package/node_modules/events/.airtap.yml +0 -15
  1143. package/node_modules/events/.github/FUNDING.yml +0 -12
  1144. package/node_modules/events/.travis.yml +0 -18
  1145. package/node_modules/events/History.md +0 -118
  1146. package/node_modules/events/LICENSE +0 -22
  1147. package/node_modules/events/Readme.md +0 -50
  1148. package/node_modules/events/events.js +0 -497
  1149. package/node_modules/events/package.json +0 -37
  1150. package/node_modules/events/security.md +0 -10
  1151. package/node_modules/events/tests/add-listeners.js +0 -111
  1152. package/node_modules/events/tests/check-listener-leaks.js +0 -101
  1153. package/node_modules/events/tests/common.js +0 -104
  1154. package/node_modules/events/tests/errors.js +0 -13
  1155. package/node_modules/events/tests/events-list.js +0 -28
  1156. package/node_modules/events/tests/events-once.js +0 -234
  1157. package/node_modules/events/tests/index.js +0 -64
  1158. package/node_modules/events/tests/legacy-compat.js +0 -16
  1159. package/node_modules/events/tests/listener-count.js +0 -37
  1160. package/node_modules/events/tests/listeners-side-effects.js +0 -56
  1161. package/node_modules/events/tests/listeners.js +0 -168
  1162. package/node_modules/events/tests/max-listeners.js +0 -47
  1163. package/node_modules/events/tests/method-names.js +0 -35
  1164. package/node_modules/events/tests/modify-in-emit.js +0 -90
  1165. package/node_modules/events/tests/num-args.js +0 -60
  1166. package/node_modules/events/tests/once.js +0 -83
  1167. package/node_modules/events/tests/prepend.js +0 -31
  1168. package/node_modules/events/tests/remove-all-listeners.js +0 -133
  1169. package/node_modules/events/tests/remove-listeners.js +0 -212
  1170. package/node_modules/events/tests/set-max-listeners-side-effects.js +0 -31
  1171. package/node_modules/events/tests/special-event-names.js +0 -45
  1172. package/node_modules/events/tests/subclass.js +0 -66
  1173. package/node_modules/events/tests/symbols.js +0 -25
  1174. package/node_modules/evp_bytestokey/LICENSE +0 -21
  1175. package/node_modules/evp_bytestokey/README.md +0 -51
  1176. package/node_modules/evp_bytestokey/index.js +0 -45
  1177. package/node_modules/evp_bytestokey/package.json +0 -45
  1178. package/node_modules/fast-safe-stringify/.travis.yml +0 -8
  1179. package/node_modules/fast-safe-stringify/CHANGELOG.md +0 -17
  1180. package/node_modules/fast-safe-stringify/LICENSE +0 -23
  1181. package/node_modules/fast-safe-stringify/benchmark.js +0 -137
  1182. package/node_modules/fast-safe-stringify/index.d.ts +0 -23
  1183. package/node_modules/fast-safe-stringify/index.js +0 -229
  1184. package/node_modules/fast-safe-stringify/package.json +0 -46
  1185. package/node_modules/fast-safe-stringify/readme.md +0 -170
  1186. package/node_modules/fast-safe-stringify/test-stable.js +0 -404
  1187. package/node_modules/fast-safe-stringify/test.js +0 -397
  1188. package/node_modules/for-each/.editorconfig +0 -20
  1189. package/node_modules/for-each/.eslintrc +0 -30
  1190. package/node_modules/for-each/.github/FUNDING.yml +0 -12
  1191. package/node_modules/for-each/.github/SECURITY.md +0 -3
  1192. package/node_modules/for-each/.nycrc +0 -8
  1193. package/node_modules/for-each/CHANGELOG.md +0 -107
  1194. package/node_modules/for-each/LICENSE +0 -22
  1195. package/node_modules/for-each/README.md +0 -39
  1196. package/node_modules/for-each/index.d.ts +0 -35
  1197. package/node_modules/for-each/index.js +0 -69
  1198. package/node_modules/for-each/package.json +0 -76
  1199. package/node_modules/for-each/test/test.js +0 -224
  1200. package/node_modules/for-each/tsconfig.json +0 -8
  1201. package/node_modules/fs.realpath/LICENSE +0 -43
  1202. package/node_modules/fs.realpath/README.md +0 -33
  1203. package/node_modules/fs.realpath/index.js +0 -66
  1204. package/node_modules/fs.realpath/old.js +0 -303
  1205. package/node_modules/fs.realpath/package.json +0 -26
  1206. package/node_modules/function-bind/.eslintrc +0 -21
  1207. package/node_modules/function-bind/.github/FUNDING.yml +0 -12
  1208. package/node_modules/function-bind/.github/SECURITY.md +0 -3
  1209. package/node_modules/function-bind/.nycrc +0 -13
  1210. package/node_modules/function-bind/CHANGELOG.md +0 -136
  1211. package/node_modules/function-bind/LICENSE +0 -20
  1212. package/node_modules/function-bind/README.md +0 -46
  1213. package/node_modules/function-bind/implementation.js +0 -84
  1214. package/node_modules/function-bind/index.js +0 -5
  1215. package/node_modules/function-bind/package.json +0 -87
  1216. package/node_modules/function-bind/test/.eslintrc +0 -9
  1217. package/node_modules/function-bind/test/index.js +0 -252
  1218. package/node_modules/get-assigned-identifiers/.travis.yml +0 -8
  1219. package/node_modules/get-assigned-identifiers/CHANGELOG.md +0 -17
  1220. package/node_modules/get-assigned-identifiers/LICENSE.md +0 -15
  1221. package/node_modules/get-assigned-identifiers/README.md +0 -45
  1222. package/node_modules/get-assigned-identifiers/index.js +0 -57
  1223. package/node_modules/get-assigned-identifiers/package.json +0 -33
  1224. package/node_modules/get-assigned-identifiers/test/index.js +0 -122
  1225. package/node_modules/get-intrinsic/.eslintrc +0 -42
  1226. package/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
  1227. package/node_modules/get-intrinsic/.nycrc +0 -9
  1228. package/node_modules/get-intrinsic/CHANGELOG.md +0 -186
  1229. package/node_modules/get-intrinsic/LICENSE +0 -21
  1230. package/node_modules/get-intrinsic/README.md +0 -71
  1231. package/node_modules/get-intrinsic/index.js +0 -378
  1232. package/node_modules/get-intrinsic/package.json +0 -97
  1233. package/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
  1234. package/node_modules/get-proto/.eslintrc +0 -10
  1235. package/node_modules/get-proto/.github/FUNDING.yml +0 -12
  1236. package/node_modules/get-proto/.nycrc +0 -9
  1237. package/node_modules/get-proto/CHANGELOG.md +0 -21
  1238. package/node_modules/get-proto/LICENSE +0 -21
  1239. package/node_modules/get-proto/Object.getPrototypeOf.d.ts +0 -5
  1240. package/node_modules/get-proto/Object.getPrototypeOf.js +0 -6
  1241. package/node_modules/get-proto/README.md +0 -50
  1242. package/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +0 -3
  1243. package/node_modules/get-proto/Reflect.getPrototypeOf.js +0 -4
  1244. package/node_modules/get-proto/index.d.ts +0 -5
  1245. package/node_modules/get-proto/index.js +0 -27
  1246. package/node_modules/get-proto/package.json +0 -81
  1247. package/node_modules/get-proto/test/index.js +0 -68
  1248. package/node_modules/get-proto/tsconfig.json +0 -9
  1249. package/node_modules/glob/LICENSE +0 -21
  1250. package/node_modules/glob/README.md +0 -378
  1251. package/node_modules/glob/common.js +0 -238
  1252. package/node_modules/glob/glob.js +0 -790
  1253. package/node_modules/glob/package.json +0 -55
  1254. package/node_modules/glob/sync.js +0 -486
  1255. package/node_modules/gopd/.eslintrc +0 -16
  1256. package/node_modules/gopd/.github/FUNDING.yml +0 -12
  1257. package/node_modules/gopd/CHANGELOG.md +0 -45
  1258. package/node_modules/gopd/LICENSE +0 -21
  1259. package/node_modules/gopd/README.md +0 -40
  1260. package/node_modules/gopd/gOPD.d.ts +0 -1
  1261. package/node_modules/gopd/gOPD.js +0 -4
  1262. package/node_modules/gopd/index.d.ts +0 -5
  1263. package/node_modules/gopd/index.js +0 -15
  1264. package/node_modules/gopd/package.json +0 -77
  1265. package/node_modules/gopd/test/index.js +0 -36
  1266. package/node_modules/gopd/tsconfig.json +0 -9
  1267. package/node_modules/has-property-descriptors/.eslintrc +0 -13
  1268. package/node_modules/has-property-descriptors/.github/FUNDING.yml +0 -12
  1269. package/node_modules/has-property-descriptors/.nycrc +0 -9
  1270. package/node_modules/has-property-descriptors/CHANGELOG.md +0 -35
  1271. package/node_modules/has-property-descriptors/LICENSE +0 -21
  1272. package/node_modules/has-property-descriptors/README.md +0 -43
  1273. package/node_modules/has-property-descriptors/index.js +0 -22
  1274. package/node_modules/has-property-descriptors/package.json +0 -77
  1275. package/node_modules/has-property-descriptors/test/index.js +0 -57
  1276. package/node_modules/has-symbols/.eslintrc +0 -11
  1277. package/node_modules/has-symbols/.github/FUNDING.yml +0 -12
  1278. package/node_modules/has-symbols/.nycrc +0 -9
  1279. package/node_modules/has-symbols/CHANGELOG.md +0 -91
  1280. package/node_modules/has-symbols/LICENSE +0 -21
  1281. package/node_modules/has-symbols/README.md +0 -46
  1282. package/node_modules/has-symbols/index.d.ts +0 -3
  1283. package/node_modules/has-symbols/index.js +0 -14
  1284. package/node_modules/has-symbols/package.json +0 -111
  1285. package/node_modules/has-symbols/shams.d.ts +0 -3
  1286. package/node_modules/has-symbols/shams.js +0 -45
  1287. package/node_modules/has-symbols/test/index.js +0 -22
  1288. package/node_modules/has-symbols/test/shams/core-js.js +0 -29
  1289. package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -29
  1290. package/node_modules/has-symbols/test/tests.js +0 -58
  1291. package/node_modules/has-symbols/tsconfig.json +0 -10
  1292. package/node_modules/has-tostringtag/.eslintrc +0 -5
  1293. package/node_modules/has-tostringtag/.github/FUNDING.yml +0 -12
  1294. package/node_modules/has-tostringtag/.nycrc +0 -13
  1295. package/node_modules/has-tostringtag/CHANGELOG.md +0 -42
  1296. package/node_modules/has-tostringtag/LICENSE +0 -21
  1297. package/node_modules/has-tostringtag/README.md +0 -46
  1298. package/node_modules/has-tostringtag/index.d.ts +0 -3
  1299. package/node_modules/has-tostringtag/index.js +0 -8
  1300. package/node_modules/has-tostringtag/package.json +0 -108
  1301. package/node_modules/has-tostringtag/shams.d.ts +0 -3
  1302. package/node_modules/has-tostringtag/shams.js +0 -8
  1303. package/node_modules/has-tostringtag/test/index.js +0 -21
  1304. package/node_modules/has-tostringtag/test/shams/core-js.js +0 -31
  1305. package/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js +0 -30
  1306. package/node_modules/has-tostringtag/test/tests.js +0 -15
  1307. package/node_modules/has-tostringtag/tsconfig.json +0 -49
  1308. package/node_modules/hash-base/LICENSE +0 -21
  1309. package/node_modules/hash-base/README.md +0 -48
  1310. package/node_modules/hash-base/index.js +0 -138
  1311. package/node_modules/hash-base/package.json +0 -42
  1312. package/node_modules/hash.js/.eslintrc.js +0 -41
  1313. package/node_modules/hash.js/.travis.yml +0 -10
  1314. package/node_modules/hash.js/README.md +0 -48
  1315. package/node_modules/hash.js/lib/hash/common.js +0 -92
  1316. package/node_modules/hash.js/lib/hash/hmac.js +0 -47
  1317. package/node_modules/hash.js/lib/hash/ripemd.js +0 -146
  1318. package/node_modules/hash.js/lib/hash/sha/1.js +0 -74
  1319. package/node_modules/hash.js/lib/hash/sha/224.js +0 -30
  1320. package/node_modules/hash.js/lib/hash/sha/256.js +0 -105
  1321. package/node_modules/hash.js/lib/hash/sha/384.js +0 -35
  1322. package/node_modules/hash.js/lib/hash/sha/512.js +0 -330
  1323. package/node_modules/hash.js/lib/hash/sha/common.js +0 -49
  1324. package/node_modules/hash.js/lib/hash/sha.js +0 -7
  1325. package/node_modules/hash.js/lib/hash/utils.js +0 -278
  1326. package/node_modules/hash.js/lib/hash.d.ts +0 -106
  1327. package/node_modules/hash.js/lib/hash.js +0 -15
  1328. package/node_modules/hash.js/package.json +0 -35
  1329. package/node_modules/hash.js/test/hash-test.js +0 -140
  1330. package/node_modules/hash.js/test/hmac-test.js +0 -62
  1331. package/node_modules/hasown/.eslintrc +0 -5
  1332. package/node_modules/hasown/.github/FUNDING.yml +0 -12
  1333. package/node_modules/hasown/.nycrc +0 -13
  1334. package/node_modules/hasown/CHANGELOG.md +0 -40
  1335. package/node_modules/hasown/LICENSE +0 -21
  1336. package/node_modules/hasown/README.md +0 -40
  1337. package/node_modules/hasown/index.d.ts +0 -3
  1338. package/node_modules/hasown/index.js +0 -8
  1339. package/node_modules/hasown/package.json +0 -92
  1340. package/node_modules/hasown/tsconfig.json +0 -6
  1341. package/node_modules/hmac-drbg/.npmignore +0 -2
  1342. package/node_modules/hmac-drbg/.travis.yml +0 -11
  1343. package/node_modules/hmac-drbg/README.md +0 -48
  1344. package/node_modules/hmac-drbg/lib/hmac-drbg.js +0 -113
  1345. package/node_modules/hmac-drbg/package.json +0 -32
  1346. package/node_modules/hmac-drbg/test/drbg-test.js +0 -91
  1347. package/node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json +0 -332
  1348. package/node_modules/htmlescape/.npmignore +0 -4
  1349. package/node_modules/htmlescape/CHANGELOG.md +0 -9
  1350. package/node_modules/htmlescape/LICENSE +0 -9
  1351. package/node_modules/htmlescape/README.md +0 -30
  1352. package/node_modules/htmlescape/htmlescape.js +0 -42
  1353. package/node_modules/htmlescape/package.json +0 -30
  1354. package/node_modules/https-browserify/LICENSE +0 -20
  1355. package/node_modules/https-browserify/index.js +0 -31
  1356. package/node_modules/https-browserify/package.json +0 -28
  1357. package/node_modules/https-browserify/readme.markdown +0 -22
  1358. package/node_modules/ieee754/LICENSE +0 -11
  1359. package/node_modules/ieee754/README.md +0 -51
  1360. package/node_modules/ieee754/index.d.ts +0 -10
  1361. package/node_modules/ieee754/index.js +0 -85
  1362. package/node_modules/ieee754/package.json +0 -52
  1363. package/node_modules/inflight/LICENSE +0 -15
  1364. package/node_modules/inflight/README.md +0 -37
  1365. package/node_modules/inflight/inflight.js +0 -54
  1366. package/node_modules/inflight/package.json +0 -29
  1367. package/node_modules/inherits/LICENSE +0 -16
  1368. package/node_modules/inherits/README.md +0 -42
  1369. package/node_modules/inherits/inherits.js +0 -9
  1370. package/node_modules/inherits/inherits_browser.js +0 -27
  1371. package/node_modules/inherits/package.json +0 -29
  1372. package/node_modules/inline-source-map/.github/workflows/node-test.js.yml +0 -43
  1373. package/node_modules/inline-source-map/LICENSE +0 -23
  1374. package/node_modules/inline-source-map/README.md +0 -89
  1375. package/node_modules/inline-source-map/example/foo-bar.js +0 -8
  1376. package/node_modules/inline-source-map/index.js +0 -138
  1377. package/node_modules/inline-source-map/package.json +0 -43
  1378. package/node_modules/inline-source-map/test/inline-source-map.js +0 -345
  1379. package/node_modules/inline-source-map/test/source-content.js +0 -146
  1380. package/node_modules/insert-module-globals/.travis.yml +0 -5
  1381. package/node_modules/insert-module-globals/CHANGELOG.md +0 -6
  1382. package/node_modules/insert-module-globals/LICENSE +0 -18
  1383. package/node_modules/insert-module-globals/appveyor.yml +0 -18
  1384. package/node_modules/insert-module-globals/bench/.gitattributes +0 -1
  1385. package/node_modules/insert-module-globals/bench/index.js +0 -15
  1386. package/node_modules/insert-module-globals/bin/cmd.js +0 -26
  1387. package/node_modules/insert-module-globals/example/files/foo/index.js +0 -6
  1388. package/node_modules/insert-module-globals/example/files/main.js +0 -6
  1389. package/node_modules/insert-module-globals/example/insert.js +0 -12
  1390. package/node_modules/insert-module-globals/index.js +0 -197
  1391. package/node_modules/insert-module-globals/package.json +0 -53
  1392. package/node_modules/insert-module-globals/readme.markdown +0 -146
  1393. package/node_modules/insert-module-globals/test/always/collision.js +0 -2
  1394. package/node_modules/insert-module-globals/test/always/custom_globals_without_defaults.js +0 -7
  1395. package/node_modules/insert-module-globals/test/always/hidden_from_quick_test.js +0 -1
  1396. package/node_modules/insert-module-globals/test/always/main.js +0 -10
  1397. package/node_modules/insert-module-globals/test/always.js +0 -136
  1398. package/node_modules/insert-module-globals/test/global/filename.js +0 -2
  1399. package/node_modules/insert-module-globals/test/global/main.js +0 -2
  1400. package/node_modules/insert-module-globals/test/global.js +0 -64
  1401. package/node_modules/insert-module-globals/test/immediate/main.js +0 -8
  1402. package/node_modules/insert-module-globals/test/immediate.js +0 -30
  1403. package/node_modules/insert-module-globals/test/insert/buffer.js +0 -1
  1404. package/node_modules/insert-module-globals/test/insert/foo/buf.js +0 -4
  1405. package/node_modules/insert-module-globals/test/insert/foo/index.js +0 -4
  1406. package/node_modules/insert-module-globals/test/insert/main.js +0 -4
  1407. package/node_modules/insert-module-globals/test/insert.js +0 -46
  1408. package/node_modules/insert-module-globals/test/isbuffer/both.js +0 -6
  1409. package/node_modules/insert-module-globals/test/isbuffer/main.js +0 -3
  1410. package/node_modules/insert-module-globals/test/isbuffer/new.js +0 -6
  1411. package/node_modules/insert-module-globals/test/isbuffer.js +0 -64
  1412. package/node_modules/insert-module-globals/test/return/foo/index.js +0 -4
  1413. package/node_modules/insert-module-globals/test/return/main.js +0 -6
  1414. package/node_modules/insert-module-globals/test/return.js +0 -27
  1415. package/node_modules/insert-module-globals/test/roots/main.js +0 -1
  1416. package/node_modules/insert-module-globals/test/roots.js +0 -35
  1417. package/node_modules/insert-module-globals/test/sourcemap/main.js +0 -3
  1418. package/node_modules/insert-module-globals/test/sourcemap/main_es6.js +0 -1
  1419. package/node_modules/insert-module-globals/test/sourcemap.js +0 -41
  1420. package/node_modules/insert-module-globals/test/subdir/main.js +0 -1
  1421. package/node_modules/insert-module-globals/test/subdir.js +0 -37
  1422. package/node_modules/insert-module-globals/test/unprefix/hello.js +0 -2
  1423. package/node_modules/insert-module-globals/test/unprefix/main.js +0 -3
  1424. package/node_modules/insert-module-globals/test/unprefix.js +0 -34
  1425. package/node_modules/is-arguments/.editorconfig +0 -20
  1426. package/node_modules/is-arguments/.eslintrc +0 -9
  1427. package/node_modules/is-arguments/.github/FUNDING.yml +0 -12
  1428. package/node_modules/is-arguments/.nycrc +0 -9
  1429. package/node_modules/is-arguments/CHANGELOG.md +0 -201
  1430. package/node_modules/is-arguments/LICENSE +0 -20
  1431. package/node_modules/is-arguments/README.md +0 -47
  1432. package/node_modules/is-arguments/index.d.ts +0 -6
  1433. package/node_modules/is-arguments/index.js +0 -44
  1434. package/node_modules/is-arguments/package.json +0 -105
  1435. package/node_modules/is-arguments/test/index.js +0 -47
  1436. package/node_modules/is-arguments/tsconfig.json +0 -9
  1437. package/node_modules/is-buffer/LICENSE +0 -21
  1438. package/node_modules/is-buffer/README.md +0 -53
  1439. package/node_modules/is-buffer/index.js +0 -21
  1440. package/node_modules/is-buffer/package.json +0 -51
  1441. package/node_modules/is-buffer/test/basic.js +0 -24
  1442. package/node_modules/is-callable/.editorconfig +0 -31
  1443. package/node_modules/is-callable/.eslintrc +0 -10
  1444. package/node_modules/is-callable/.github/FUNDING.yml +0 -12
  1445. package/node_modules/is-callable/.nycrc +0 -9
  1446. package/node_modules/is-callable/CHANGELOG.md +0 -158
  1447. package/node_modules/is-callable/LICENSE +0 -22
  1448. package/node_modules/is-callable/README.md +0 -83
  1449. package/node_modules/is-callable/index.js +0 -101
  1450. package/node_modules/is-callable/package.json +0 -106
  1451. package/node_modules/is-callable/test/index.js +0 -244
  1452. package/node_modules/is-core-module/.eslintrc +0 -18
  1453. package/node_modules/is-core-module/.nycrc +0 -9
  1454. package/node_modules/is-core-module/CHANGELOG.md +0 -218
  1455. package/node_modules/is-core-module/LICENSE +0 -20
  1456. package/node_modules/is-core-module/README.md +0 -40
  1457. package/node_modules/is-core-module/core.json +0 -162
  1458. package/node_modules/is-core-module/index.js +0 -69
  1459. package/node_modules/is-core-module/package.json +0 -76
  1460. package/node_modules/is-core-module/test/index.js +0 -157
  1461. package/node_modules/is-generator-function/.eslintrc +0 -9
  1462. package/node_modules/is-generator-function/.nvmrc +0 -1
  1463. package/node_modules/is-generator-function/.nycrc +0 -9
  1464. package/node_modules/is-generator-function/CHANGELOG.md +0 -237
  1465. package/node_modules/is-generator-function/LICENSE +0 -20
  1466. package/node_modules/is-generator-function/README.md +0 -40
  1467. package/node_modules/is-generator-function/index.d.ts +0 -3
  1468. package/node_modules/is-generator-function/index.js +0 -47
  1469. package/node_modules/is-generator-function/package.json +0 -106
  1470. package/node_modules/is-generator-function/test/corejs.js +0 -6
  1471. package/node_modules/is-generator-function/test/index.js +0 -80
  1472. package/node_modules/is-generator-function/test/uglified.js +0 -9
  1473. package/node_modules/is-generator-function/tsconfig.json +0 -9
  1474. package/node_modules/is-regex/.editorconfig +0 -23
  1475. package/node_modules/is-regex/.eslintrc +0 -10
  1476. package/node_modules/is-regex/.nycrc +0 -10
  1477. package/node_modules/is-regex/CHANGELOG.md +0 -233
  1478. package/node_modules/is-regex/LICENSE +0 -20
  1479. package/node_modules/is-regex/README.md +0 -52
  1480. package/node_modules/is-regex/index.d.ts +0 -3
  1481. package/node_modules/is-regex/index.js +0 -69
  1482. package/node_modules/is-regex/package.json +0 -104
  1483. package/node_modules/is-regex/test/index.js +0 -121
  1484. package/node_modules/is-regex/tsconfig.json +0 -9
  1485. package/node_modules/is-typed-array/.editorconfig +0 -20
  1486. package/node_modules/is-typed-array/.eslintrc +0 -13
  1487. package/node_modules/is-typed-array/.github/FUNDING.yml +0 -12
  1488. package/node_modules/is-typed-array/.nycrc +0 -9
  1489. package/node_modules/is-typed-array/CHANGELOG.md +0 -166
  1490. package/node_modules/is-typed-array/LICENSE +0 -22
  1491. package/node_modules/is-typed-array/README.md +0 -70
  1492. package/node_modules/is-typed-array/index.d.ts +0 -9
  1493. package/node_modules/is-typed-array/index.js +0 -8
  1494. package/node_modules/is-typed-array/package.json +0 -129
  1495. package/node_modules/is-typed-array/test/index.js +0 -111
  1496. package/node_modules/is-typed-array/tsconfig.json +0 -6
  1497. package/node_modules/isarray/.npmignore +0 -1
  1498. package/node_modules/isarray/.travis.yml +0 -4
  1499. package/node_modules/isarray/Makefile +0 -6
  1500. package/node_modules/isarray/README.md +0 -60
  1501. package/node_modules/isarray/component.json +0 -19
  1502. package/node_modules/isarray/index.js +0 -5
  1503. package/node_modules/isarray/package.json +0 -45
  1504. package/node_modules/isarray/test.js +0 -20
  1505. package/node_modules/jsonparse/.npmignore +0 -1
  1506. package/node_modules/jsonparse/LICENSE +0 -24
  1507. package/node_modules/jsonparse/README.markdown +0 -11
  1508. package/node_modules/jsonparse/bench.js +0 -26
  1509. package/node_modules/jsonparse/examples/twitterfeed.js +0 -30
  1510. package/node_modules/jsonparse/jsonparse.js +0 -413
  1511. package/node_modules/jsonparse/package.json +0 -22
  1512. package/node_modules/jsonparse/samplejson/basic.json +0 -167
  1513. package/node_modules/jsonparse/samplejson/basic2.json +0 -180
  1514. package/node_modules/jsonparse/test/big-token.js +0 -24
  1515. package/node_modules/jsonparse/test/boundary.js +0 -110
  1516. package/node_modules/jsonparse/test/offset.js +0 -67
  1517. package/node_modules/jsonparse/test/primitives.js +0 -57
  1518. package/node_modules/jsonparse/test/surrogate.js +0 -26
  1519. package/node_modules/jsonparse/test/unvalid.js +0 -15
  1520. package/node_modules/jsonparse/test/utf8.js +0 -38
  1521. package/node_modules/labeled-stream-splicer/.travis.yml +0 -16
  1522. package/node_modules/labeled-stream-splicer/LICENSE +0 -21
  1523. package/node_modules/labeled-stream-splicer/example/browser/bar.js +0 -3
  1524. package/node_modules/labeled-stream-splicer/example/browser/foo.js +0 -5
  1525. package/node_modules/labeled-stream-splicer/example/browser/main.js +0 -2
  1526. package/node_modules/labeled-stream-splicer/example/browser/xyz.js +0 -2
  1527. package/node_modules/labeled-stream-splicer/example/bundle.js +0 -19
  1528. package/node_modules/labeled-stream-splicer/index.js +0 -64
  1529. package/node_modules/labeled-stream-splicer/package.json +0 -38
  1530. package/node_modules/labeled-stream-splicer/readme.markdown +0 -124
  1531. package/node_modules/labeled-stream-splicer/test/bundle/bar.js +0 -3
  1532. package/node_modules/labeled-stream-splicer/test/bundle/foo.js +0 -5
  1533. package/node_modules/labeled-stream-splicer/test/bundle/main.js +0 -2
  1534. package/node_modules/labeled-stream-splicer/test/bundle/xyz.js +0 -2
  1535. package/node_modules/labeled-stream-splicer/test/bundle.js +0 -29
  1536. package/node_modules/lodash.memoize/LICENSE.txt +0 -22
  1537. package/node_modules/lodash.memoize/README.md +0 -20
  1538. package/node_modules/lodash.memoize/index.js +0 -167
  1539. package/node_modules/lodash.memoize/package.json +0 -19
  1540. package/node_modules/math-intrinsics/.eslintrc +0 -16
  1541. package/node_modules/math-intrinsics/.github/FUNDING.yml +0 -12
  1542. package/node_modules/math-intrinsics/CHANGELOG.md +0 -24
  1543. package/node_modules/math-intrinsics/LICENSE +0 -21
  1544. package/node_modules/math-intrinsics/README.md +0 -50
  1545. package/node_modules/math-intrinsics/abs.d.ts +0 -1
  1546. package/node_modules/math-intrinsics/abs.js +0 -4
  1547. package/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +0 -3
  1548. package/node_modules/math-intrinsics/constants/maxArrayLength.js +0 -4
  1549. package/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +0 -3
  1550. package/node_modules/math-intrinsics/constants/maxSafeInteger.js +0 -5
  1551. package/node_modules/math-intrinsics/constants/maxValue.d.ts +0 -3
  1552. package/node_modules/math-intrinsics/constants/maxValue.js +0 -5
  1553. package/node_modules/math-intrinsics/floor.d.ts +0 -1
  1554. package/node_modules/math-intrinsics/floor.js +0 -4
  1555. package/node_modules/math-intrinsics/isFinite.d.ts +0 -3
  1556. package/node_modules/math-intrinsics/isFinite.js +0 -12
  1557. package/node_modules/math-intrinsics/isInteger.d.ts +0 -3
  1558. package/node_modules/math-intrinsics/isInteger.js +0 -16
  1559. package/node_modules/math-intrinsics/isNaN.d.ts +0 -1
  1560. package/node_modules/math-intrinsics/isNaN.js +0 -6
  1561. package/node_modules/math-intrinsics/isNegativeZero.d.ts +0 -3
  1562. package/node_modules/math-intrinsics/isNegativeZero.js +0 -6
  1563. package/node_modules/math-intrinsics/max.d.ts +0 -1
  1564. package/node_modules/math-intrinsics/max.js +0 -4
  1565. package/node_modules/math-intrinsics/min.d.ts +0 -1
  1566. package/node_modules/math-intrinsics/min.js +0 -4
  1567. package/node_modules/math-intrinsics/mod.d.ts +0 -3
  1568. package/node_modules/math-intrinsics/mod.js +0 -9
  1569. package/node_modules/math-intrinsics/package.json +0 -86
  1570. package/node_modules/math-intrinsics/pow.d.ts +0 -1
  1571. package/node_modules/math-intrinsics/pow.js +0 -4
  1572. package/node_modules/math-intrinsics/round.d.ts +0 -1
  1573. package/node_modules/math-intrinsics/round.js +0 -4
  1574. package/node_modules/math-intrinsics/sign.d.ts +0 -3
  1575. package/node_modules/math-intrinsics/sign.js +0 -11
  1576. package/node_modules/math-intrinsics/test/index.js +0 -192
  1577. package/node_modules/math-intrinsics/tsconfig.json +0 -3
  1578. package/node_modules/md5.js/LICENSE +0 -21
  1579. package/node_modules/md5.js/README.md +0 -29
  1580. package/node_modules/md5.js/index.js +0 -146
  1581. package/node_modules/md5.js/package.json +0 -38
  1582. package/node_modules/miller-rabin/.npmignore +0 -2
  1583. package/node_modules/miller-rabin/1.js +0 -7
  1584. package/node_modules/miller-rabin/README.md +0 -26
  1585. package/node_modules/miller-rabin/bin/miller-rabin +0 -29
  1586. package/node_modules/miller-rabin/lib/mr.js +0 -115
  1587. package/node_modules/miller-rabin/node_modules/bn.js/LICENSE +0 -19
  1588. package/node_modules/miller-rabin/node_modules/bn.js/README.md +0 -200
  1589. package/node_modules/miller-rabin/node_modules/bn.js/lib/bn.js +0 -3447
  1590. package/node_modules/miller-rabin/node_modules/bn.js/package.json +0 -36
  1591. package/node_modules/miller-rabin/node_modules/bn.js/util/genCombMulTo.js +0 -65
  1592. package/node_modules/miller-rabin/node_modules/bn.js/util/genCombMulTo10.js +0 -65
  1593. package/node_modules/miller-rabin/package.json +0 -32
  1594. package/node_modules/miller-rabin/test/api-test.js +0 -18
  1595. package/node_modules/miller-rabin/test.js +0 -25
  1596. package/node_modules/minimalistic-assert/LICENSE +0 -13
  1597. package/node_modules/minimalistic-assert/index.js +0 -11
  1598. package/node_modules/minimalistic-assert/package.json +0 -19
  1599. package/node_modules/minimalistic-assert/readme.md +0 -4
  1600. package/node_modules/minimalistic-crypto-utils/.npmignore +0 -2
  1601. package/node_modules/minimalistic-crypto-utils/.travis.yml +0 -11
  1602. package/node_modules/minimalistic-crypto-utils/README.md +0 -47
  1603. package/node_modules/minimalistic-crypto-utils/lib/utils.js +0 -58
  1604. package/node_modules/minimalistic-crypto-utils/package.json +0 -27
  1605. package/node_modules/minimalistic-crypto-utils/test/utils-test.js +0 -28
  1606. package/node_modules/minimatch/LICENSE +0 -15
  1607. package/node_modules/minimatch/README.md +0 -230
  1608. package/node_modules/minimatch/minimatch.js +0 -947
  1609. package/node_modules/minimatch/package.json +0 -33
  1610. package/node_modules/minimist/.eslintrc +0 -29
  1611. package/node_modules/minimist/.github/FUNDING.yml +0 -12
  1612. package/node_modules/minimist/.nycrc +0 -14
  1613. package/node_modules/minimist/CHANGELOG.md +0 -298
  1614. package/node_modules/minimist/LICENSE +0 -18
  1615. package/node_modules/minimist/README.md +0 -121
  1616. package/node_modules/minimist/example/parse.js +0 -4
  1617. package/node_modules/minimist/index.js +0 -263
  1618. package/node_modules/minimist/package.json +0 -75
  1619. package/node_modules/minimist/test/all_bool.js +0 -34
  1620. package/node_modules/minimist/test/bool.js +0 -177
  1621. package/node_modules/minimist/test/dash.js +0 -43
  1622. package/node_modules/minimist/test/default_bool.js +0 -37
  1623. package/node_modules/minimist/test/dotted.js +0 -24
  1624. package/node_modules/minimist/test/kv_short.js +0 -32
  1625. package/node_modules/minimist/test/long.js +0 -33
  1626. package/node_modules/minimist/test/num.js +0 -38
  1627. package/node_modules/minimist/test/parse.js +0 -209
  1628. package/node_modules/minimist/test/parse_modified.js +0 -11
  1629. package/node_modules/minimist/test/proto.js +0 -64
  1630. package/node_modules/minimist/test/short.js +0 -69
  1631. package/node_modules/minimist/test/stop_early.js +0 -17
  1632. package/node_modules/minimist/test/unknown.js +0 -104
  1633. package/node_modules/minimist/test/whitespace.js +0 -10
  1634. package/node_modules/mkdirp-classic/LICENSE +0 -21
  1635. package/node_modules/mkdirp-classic/README.md +0 -18
  1636. package/node_modules/mkdirp-classic/index.js +0 -98
  1637. package/node_modules/mkdirp-classic/package.json +0 -18
  1638. package/node_modules/module-deps/.travis.yml +0 -19
  1639. package/node_modules/module-deps/CHANGELOG.md +0 -41
  1640. package/node_modules/module-deps/LICENSE +0 -18
  1641. package/node_modules/module-deps/appveyor.yml +0 -29
  1642. package/node_modules/module-deps/bin/cmd.js +0 -28
  1643. package/node_modules/module-deps/bin/usage.txt +0 -9
  1644. package/node_modules/module-deps/example/deps.js +0 -6
  1645. package/node_modules/module-deps/example/files/bar.js +0 -3
  1646. package/node_modules/module-deps/example/files/foo.js +0 -5
  1647. package/node_modules/module-deps/example/files/main.js +0 -2
  1648. package/node_modules/module-deps/example/files/xyz.js +0 -2
  1649. package/node_modules/module-deps/index.js +0 -635
  1650. package/node_modules/module-deps/package.json +0 -56
  1651. package/node_modules/module-deps/readme.markdown +0 -312
  1652. package/node_modules/module-deps/test/bundle.js +0 -23
  1653. package/node_modules/module-deps/test/cache.js +0 -50
  1654. package/node_modules/module-deps/test/cache_expose.js +0 -54
  1655. package/node_modules/module-deps/test/cache_partial.js +0 -47
  1656. package/node_modules/module-deps/test/cache_partial_expose.js +0 -104
  1657. package/node_modules/module-deps/test/cache_persistent/error_transform.js +0 -6
  1658. package/node_modules/module-deps/test/cache_persistent.js +0 -122
  1659. package/node_modules/module-deps/test/cycle/bar.js +0 -3
  1660. package/node_modules/module-deps/test/cycle/foo.js +0 -4
  1661. package/node_modules/module-deps/test/cycle/main.js +0 -4
  1662. package/node_modules/module-deps/test/cycle.js +0 -19
  1663. package/node_modules/module-deps/test/deps.js +0 -49
  1664. package/node_modules/module-deps/test/detect.js +0 -32
  1665. package/node_modules/module-deps/test/dotdot/abc/index.js +0 -2
  1666. package/node_modules/module-deps/test/dotdot/index.js +0 -1
  1667. package/node_modules/module-deps/test/dotdot.js +0 -20
  1668. package/node_modules/module-deps/test/expose/bar.js +0 -1
  1669. package/node_modules/module-deps/test/expose/foo.js +0 -1
  1670. package/node_modules/module-deps/test/expose/lib/abc.js +0 -1
  1671. package/node_modules/module-deps/test/expose/lib/xyz.js +0 -2
  1672. package/node_modules/module-deps/test/expose/main.js +0 -3
  1673. package/node_modules/module-deps/test/expose.js +0 -41
  1674. package/node_modules/module-deps/test/file_cache.js +0 -58
  1675. package/node_modules/module-deps/test/files/bar.js +0 -3
  1676. package/node_modules/module-deps/test/files/extra.js +0 -1
  1677. package/node_modules/module-deps/test/files/filterable.js +0 -10
  1678. package/node_modules/module-deps/test/files/foo.js +0 -5
  1679. package/node_modules/module-deps/test/files/main.js +0 -2
  1680. package/node_modules/module-deps/test/files/pkg_filter/one.js +0 -1
  1681. package/node_modules/module-deps/test/files/pkg_filter/package.json +0 -3
  1682. package/node_modules/module-deps/test/files/pkg_filter/test.js +0 -1
  1683. package/node_modules/module-deps/test/files/pkg_filter/two.js +0 -1
  1684. package/node_modules/module-deps/test/files/quotes/bar.js +0 -1
  1685. package/node_modules/module-deps/test/files/quotes/baz.js +0 -1
  1686. package/node_modules/module-deps/test/files/quotes/foo.js +0 -1
  1687. package/node_modules/module-deps/test/files/quotes/main.js +0 -3
  1688. package/node_modules/module-deps/test/files/resolve/bar/bar.js +0 -5
  1689. package/node_modules/module-deps/test/files/resolve/bar/bar2.js +0 -3
  1690. package/node_modules/module-deps/test/files/resolve/foo/baz/baz.js +0 -3
  1691. package/node_modules/module-deps/test/files/resolve/foo/foo.js +0 -6
  1692. package/node_modules/module-deps/test/files/syntax_error.js +0 -2
  1693. package/node_modules/module-deps/test/files/tr_2dep_module/f.js +0 -1
  1694. package/node_modules/module-deps/test/files/tr_2dep_module/main.js +0 -7
  1695. package/node_modules/module-deps/test/files/tr_global/main.js +0 -1
  1696. package/node_modules/module-deps/test/files/tr_global/package.json +0 -5
  1697. package/node_modules/module-deps/test/files/tr_module/f.js +0 -1
  1698. package/node_modules/module-deps/test/files/tr_module/index.js +0 -8
  1699. package/node_modules/module-deps/test/files/tr_module/main.js +0 -8
  1700. package/node_modules/module-deps/test/files/tr_module/package.json +0 -5
  1701. package/node_modules/module-deps/test/files/tr_module/xxx.js +0 -8
  1702. package/node_modules/module-deps/test/files/tr_no_entry/main.js +0 -1
  1703. package/node_modules/module-deps/test/files/tr_rel/package.json +0 -5
  1704. package/node_modules/module-deps/test/files/tr_rel/subdir/main.js +0 -1
  1705. package/node_modules/module-deps/test/files/tr_rel/xxx.js +0 -8
  1706. package/node_modules/module-deps/test/files/tr_sh/f.js +0 -1
  1707. package/node_modules/module-deps/test/files/tr_sh/main.js +0 -7
  1708. package/node_modules/module-deps/test/files/tr_sh/tr_a.js +0 -7
  1709. package/node_modules/module-deps/test/files/tr_sh/tr_b.js +0 -7
  1710. package/node_modules/module-deps/test/files/tr_whole_package/f.js +0 -3
  1711. package/node_modules/module-deps/test/files/tr_whole_package/main.js +0 -3
  1712. package/node_modules/module-deps/test/files/transformdeps.js +0 -1
  1713. package/node_modules/module-deps/test/files/unicode/bar.js +0 -3
  1714. package/node_modules/module-deps/test/files/unicode/foo.js +0 -5
  1715. package/node_modules/module-deps/test/files/unicode/main.js +0 -2
  1716. package/node_modules/module-deps/test/files/xyz.js +0 -2
  1717. package/node_modules/module-deps/test/filter.js +0 -36
  1718. package/node_modules/module-deps/test/ignore_missing/main.js +0 -1
  1719. package/node_modules/module-deps/test/ignore_missing/other.js +0 -1
  1720. package/node_modules/module-deps/test/ignore_missing.js +0 -60
  1721. package/node_modules/module-deps/test/ignore_missing_cache.js +0 -52
  1722. package/node_modules/module-deps/test/invalid_pkg/file.js +0 -1
  1723. package/node_modules/module-deps/test/invalid_pkg/index.js +0 -1
  1724. package/node_modules/module-deps/test/invalid_pkg/package.json +0 -1
  1725. package/node_modules/module-deps/test/invalid_pkg.js +0 -16
  1726. package/node_modules/module-deps/test/noparse.js +0 -43
  1727. package/node_modules/module-deps/test/noparse_row.js +0 -39
  1728. package/node_modules/module-deps/test/pkg/main.js +0 -2
  1729. package/node_modules/module-deps/test/pkg/package.json +0 -4
  1730. package/node_modules/module-deps/test/pkg.js +0 -20
  1731. package/node_modules/module-deps/test/pkg_filter.js +0 -28
  1732. package/node_modules/module-deps/test/quotes.js +0 -42
  1733. package/node_modules/module-deps/test/resolve.js +0 -121
  1734. package/node_modules/module-deps/test/row_expose.js +0 -24
  1735. package/node_modules/module-deps/test/row_expose_name_is_file_transform.js +0 -32
  1736. package/node_modules/module-deps/test/row_expose_transform.js +0 -31
  1737. package/node_modules/module-deps/test/source.js +0 -61
  1738. package/node_modules/module-deps/test/syntax.js +0 -23
  1739. package/node_modules/module-deps/test/tr_2dep_module.js +0 -23
  1740. package/node_modules/module-deps/test/tr_deps.js +0 -60
  1741. package/node_modules/module-deps/test/tr_err.js +0 -21
  1742. package/node_modules/module-deps/test/tr_flags/empty.js +0 -0
  1743. package/node_modules/module-deps/test/tr_flags.js +0 -44
  1744. package/node_modules/module-deps/test/tr_fn.js +0 -32
  1745. package/node_modules/module-deps/test/tr_global.js +0 -29
  1746. package/node_modules/module-deps/test/tr_module.js +0 -23
  1747. package/node_modules/module-deps/test/tr_no_entry.js +0 -31
  1748. package/node_modules/module-deps/test/tr_opts/main.js +0 -1
  1749. package/node_modules/module-deps/test/tr_opts/package.json +0 -7
  1750. package/node_modules/module-deps/test/tr_opts.js +0 -21
  1751. package/node_modules/module-deps/test/tr_rel.js +0 -24
  1752. package/node_modules/module-deps/test/tr_sh.js +0 -23
  1753. package/node_modules/module-deps/test/tr_whole_package.js +0 -22
  1754. package/node_modules/module-deps/test/tr_write/main.js +0 -1
  1755. package/node_modules/module-deps/test/tr_write.js +0 -32
  1756. package/node_modules/module-deps/test/undef_file.js +0 -49
  1757. package/node_modules/module-deps/test/unicode.js +0 -49
  1758. package/node_modules/object-inspect/.eslintrc +0 -53
  1759. package/node_modules/object-inspect/.github/FUNDING.yml +0 -12
  1760. package/node_modules/object-inspect/.nycrc +0 -13
  1761. package/node_modules/object-inspect/CHANGELOG.md +0 -424
  1762. package/node_modules/object-inspect/LICENSE +0 -21
  1763. package/node_modules/object-inspect/example/all.js +0 -23
  1764. package/node_modules/object-inspect/example/circular.js +0 -6
  1765. package/node_modules/object-inspect/example/fn.js +0 -5
  1766. package/node_modules/object-inspect/example/inspect.js +0 -10
  1767. package/node_modules/object-inspect/index.js +0 -544
  1768. package/node_modules/object-inspect/package-support.json +0 -20
  1769. package/node_modules/object-inspect/package.json +0 -105
  1770. package/node_modules/object-inspect/readme.markdown +0 -84
  1771. package/node_modules/object-inspect/test/bigint.js +0 -58
  1772. package/node_modules/object-inspect/test/browser/dom.js +0 -15
  1773. package/node_modules/object-inspect/test/circular.js +0 -16
  1774. package/node_modules/object-inspect/test/deep.js +0 -12
  1775. package/node_modules/object-inspect/test/element.js +0 -53
  1776. package/node_modules/object-inspect/test/err.js +0 -48
  1777. package/node_modules/object-inspect/test/fakes.js +0 -29
  1778. package/node_modules/object-inspect/test/fn.js +0 -76
  1779. package/node_modules/object-inspect/test/global.js +0 -17
  1780. package/node_modules/object-inspect/test/has.js +0 -15
  1781. package/node_modules/object-inspect/test/holes.js +0 -15
  1782. package/node_modules/object-inspect/test/indent-option.js +0 -271
  1783. package/node_modules/object-inspect/test/inspect.js +0 -139
  1784. package/node_modules/object-inspect/test/lowbyte.js +0 -12
  1785. package/node_modules/object-inspect/test/number.js +0 -58
  1786. package/node_modules/object-inspect/test/quoteStyle.js +0 -26
  1787. package/node_modules/object-inspect/test/toStringTag.js +0 -40
  1788. package/node_modules/object-inspect/test/undef.js +0 -12
  1789. package/node_modules/object-inspect/test/values.js +0 -261
  1790. package/node_modules/object-inspect/test-core-js.js +0 -26
  1791. package/node_modules/object-inspect/util.inspect.js +0 -1
  1792. package/node_modules/object-keys/.editorconfig +0 -13
  1793. package/node_modules/object-keys/.eslintrc +0 -17
  1794. package/node_modules/object-keys/.travis.yml +0 -277
  1795. package/node_modules/object-keys/CHANGELOG.md +0 -232
  1796. package/node_modules/object-keys/LICENSE +0 -21
  1797. package/node_modules/object-keys/README.md +0 -76
  1798. package/node_modules/object-keys/implementation.js +0 -122
  1799. package/node_modules/object-keys/index.js +0 -32
  1800. package/node_modules/object-keys/isArguments.js +0 -17
  1801. package/node_modules/object-keys/package.json +0 -88
  1802. package/node_modules/object-keys/test/index.js +0 -5
  1803. package/node_modules/object.assign/.editorconfig +0 -20
  1804. package/node_modules/object.assign/.eslintrc +0 -28
  1805. package/node_modules/object.assign/.github/FUNDING.yml +0 -12
  1806. package/node_modules/object.assign/.nycrc +0 -9
  1807. package/node_modules/object.assign/CHANGELOG.md +0 -246
  1808. package/node_modules/object.assign/LICENSE +0 -21
  1809. package/node_modules/object.assign/README.md +0 -136
  1810. package/node_modules/object.assign/auto.js +0 -3
  1811. package/node_modules/object.assign/dist/browser.js +0 -1304
  1812. package/node_modules/object.assign/hasSymbols.js +0 -43
  1813. package/node_modules/object.assign/implementation.js +0 -46
  1814. package/node_modules/object.assign/index.js +0 -22
  1815. package/node_modules/object.assign/package.json +0 -96
  1816. package/node_modules/object.assign/polyfill.js +0 -55
  1817. package/node_modules/object.assign/shim.js +0 -14
  1818. package/node_modules/object.assign/test/implementation.js +0 -19
  1819. package/node_modules/object.assign/test/index.js +0 -17
  1820. package/node_modules/object.assign/test/native.js +0 -49
  1821. package/node_modules/object.assign/test/ses-compat.js +0 -12
  1822. package/node_modules/object.assign/test/shimmed.js +0 -52
  1823. package/node_modules/object.assign/test/tests.js +0 -232
  1824. package/node_modules/once/LICENSE +0 -15
  1825. package/node_modules/once/README.md +0 -79
  1826. package/node_modules/once/once.js +0 -42
  1827. package/node_modules/once/package.json +0 -33
  1828. package/node_modules/os-browserify/.npmignore +0 -14
  1829. package/node_modules/os-browserify/LICENSE +0 -21
  1830. package/node_modules/os-browserify/README.md +0 -5
  1831. package/node_modules/os-browserify/browser.js +0 -49
  1832. package/node_modules/os-browserify/main.js +0 -1
  1833. package/node_modules/os-browserify/package.json +0 -20
  1834. package/node_modules/pako/CHANGELOG.md +0 -164
  1835. package/node_modules/pako/LICENSE +0 -21
  1836. package/node_modules/pako/README.md +0 -191
  1837. package/node_modules/pako/dist/pako.js +0 -6818
  1838. package/node_modules/pako/dist/pako.min.js +0 -1
  1839. package/node_modules/pako/dist/pako_deflate.js +0 -3997
  1840. package/node_modules/pako/dist/pako_deflate.min.js +0 -1
  1841. package/node_modules/pako/dist/pako_inflate.js +0 -3300
  1842. package/node_modules/pako/dist/pako_inflate.min.js +0 -1
  1843. package/node_modules/pako/index.js +0 -14
  1844. package/node_modules/pako/lib/deflate.js +0 -400
  1845. package/node_modules/pako/lib/inflate.js +0 -423
  1846. package/node_modules/pako/lib/utils/common.js +0 -105
  1847. package/node_modules/pako/lib/utils/strings.js +0 -187
  1848. package/node_modules/pako/lib/zlib/README +0 -59
  1849. package/node_modules/pako/lib/zlib/adler32.js +0 -51
  1850. package/node_modules/pako/lib/zlib/constants.js +0 -68
  1851. package/node_modules/pako/lib/zlib/crc32.js +0 -59
  1852. package/node_modules/pako/lib/zlib/deflate.js +0 -1874
  1853. package/node_modules/pako/lib/zlib/gzheader.js +0 -58
  1854. package/node_modules/pako/lib/zlib/inffast.js +0 -345
  1855. package/node_modules/pako/lib/zlib/inflate.js +0 -1556
  1856. package/node_modules/pako/lib/zlib/inftrees.js +0 -343
  1857. package/node_modules/pako/lib/zlib/messages.js +0 -32
  1858. package/node_modules/pako/lib/zlib/trees.js +0 -1222
  1859. package/node_modules/pako/lib/zlib/zstream.js +0 -47
  1860. package/node_modules/pako/package.json +0 -44
  1861. package/node_modules/parents/.travis.yml +0 -4
  1862. package/node_modules/parents/LICENSE +0 -18
  1863. package/node_modules/parents/example/dirname.js +0 -3
  1864. package/node_modules/parents/example/win32.js +0 -5
  1865. package/node_modules/parents/index.js +0 -48
  1866. package/node_modules/parents/package.json +0 -38
  1867. package/node_modules/parents/readme.markdown +0 -75
  1868. package/node_modules/parents/test/dirname.js +0 -20
  1869. package/node_modules/parents/test/win32.js +0 -34
  1870. package/node_modules/parse-asn1/.eslintrc +0 -34
  1871. package/node_modules/parse-asn1/.github/FUNDING.yml +0 -12
  1872. package/node_modules/parse-asn1/CHANGELOG.md +0 -188
  1873. package/node_modules/parse-asn1/LICENSE +0 -13
  1874. package/node_modules/parse-asn1/README.md +0 -8
  1875. package/node_modules/parse-asn1/aesid.json +0 -13
  1876. package/node_modules/parse-asn1/asn1.js +0 -123
  1877. package/node_modules/parse-asn1/certificate.js +0 -89
  1878. package/node_modules/parse-asn1/fixProc.js +0 -33
  1879. package/node_modules/parse-asn1/index.js +0 -111
  1880. package/node_modules/parse-asn1/package.json +0 -59
  1881. package/node_modules/path-browserify/.github/FUNDING.yml +0 -12
  1882. package/node_modules/path-browserify/.travis.yml +0 -16
  1883. package/node_modules/path-browserify/CHANGELOG.md +0 -20
  1884. package/node_modules/path-browserify/LICENSE +0 -20
  1885. package/node_modules/path-browserify/README.md +0 -45
  1886. package/node_modules/path-browserify/index.js +0 -529
  1887. package/node_modules/path-browserify/package.json +0 -30
  1888. package/node_modules/path-browserify/security.md +0 -10
  1889. package/node_modules/path-browserify/test/index.js +0 -9
  1890. package/node_modules/path-browserify/test/test-path-basename.js +0 -79
  1891. package/node_modules/path-browserify/test/test-path-dirname.js +0 -58
  1892. package/node_modules/path-browserify/test/test-path-extname.js +0 -96
  1893. package/node_modules/path-browserify/test/test-path-isabsolute.js +0 -33
  1894. package/node_modules/path-browserify/test/test-path-join.js +0 -126
  1895. package/node_modules/path-browserify/test/test-path-parse-format.js +0 -235
  1896. package/node_modules/path-browserify/test/test-path-relative.js +0 -66
  1897. package/node_modules/path-browserify/test/test-path-resolve.js +0 -45
  1898. package/node_modules/path-browserify/test/test-path-zero-length-strings.js +0 -53
  1899. package/node_modules/path-browserify/test/test-path.js +0 -107
  1900. package/node_modules/path-is-absolute/index.js +0 -20
  1901. package/node_modules/path-is-absolute/license +0 -21
  1902. package/node_modules/path-is-absolute/package.json +0 -43
  1903. package/node_modules/path-is-absolute/readme.md +0 -59
  1904. package/node_modules/path-parse/LICENSE +0 -21
  1905. package/node_modules/path-parse/README.md +0 -42
  1906. package/node_modules/path-parse/index.js +0 -75
  1907. package/node_modules/path-parse/package.json +0 -33
  1908. package/node_modules/path-platform/LICENSE +0 -3
  1909. package/node_modules/path-platform/README.md +0 -5
  1910. package/node_modules/path-platform/package.json +0 -25
  1911. package/node_modules/path-platform/path.js +0 -643
  1912. package/node_modules/pbkdf2/.eslintrc +0 -45
  1913. package/node_modules/pbkdf2/.github/FUNDING.yml +0 -12
  1914. package/node_modules/pbkdf2/.nycrc +0 -10
  1915. package/node_modules/pbkdf2/CHANGELOG.md +0 -345
  1916. package/node_modules/pbkdf2/LICENSE +0 -21
  1917. package/node_modules/pbkdf2/README.md +0 -48
  1918. package/node_modules/pbkdf2/browser.js +0 -4
  1919. package/node_modules/pbkdf2/index.js +0 -43
  1920. package/node_modules/pbkdf2/lib/async.js +0 -122
  1921. package/node_modules/pbkdf2/lib/default-encoding.js +0 -14
  1922. package/node_modules/pbkdf2/lib/precondition.js +0 -21
  1923. package/node_modules/pbkdf2/lib/sync-browser.js +0 -131
  1924. package/node_modules/pbkdf2/lib/sync.js +0 -73
  1925. package/node_modules/pbkdf2/lib/to-buffer.js +0 -20
  1926. package/node_modules/pbkdf2/node_modules/create-hash/.npmignore +0 -1
  1927. package/node_modules/pbkdf2/node_modules/create-hash/.travis.yml +0 -15
  1928. package/node_modules/pbkdf2/node_modules/create-hash/browser.js +0 -52
  1929. package/node_modules/pbkdf2/node_modules/create-hash/index.js +0 -1
  1930. package/node_modules/pbkdf2/node_modules/create-hash/make-hash.js +0 -30
  1931. package/node_modules/pbkdf2/node_modules/create-hash/md5.js +0 -151
  1932. package/node_modules/pbkdf2/node_modules/create-hash/package.json +0 -37
  1933. package/node_modules/pbkdf2/node_modules/create-hash/readme.md +0 -19
  1934. package/node_modules/pbkdf2/node_modules/create-hash/test.js +0 -40
  1935. package/node_modules/pbkdf2/node_modules/hash-base/README.md +0 -38
  1936. package/node_modules/pbkdf2/node_modules/hash-base/index.js +0 -83
  1937. package/node_modules/pbkdf2/node_modules/hash-base/package.json +0 -37
  1938. package/node_modules/pbkdf2/node_modules/ripemd160/CHANGELOG.md +0 -72
  1939. package/node_modules/pbkdf2/node_modules/ripemd160/LICENSE.md +0 -21
  1940. package/node_modules/pbkdf2/node_modules/ripemd160/README.md +0 -27
  1941. package/node_modules/pbkdf2/node_modules/ripemd160/index.js +0 -291
  1942. package/node_modules/pbkdf2/node_modules/ripemd160/package.json +0 -37
  1943. package/node_modules/pbkdf2/package.json +0 -77
  1944. package/node_modules/possible-typed-array-names/.eslintrc +0 -5
  1945. package/node_modules/possible-typed-array-names/.github/FUNDING.yml +0 -12
  1946. package/node_modules/possible-typed-array-names/CHANGELOG.md +0 -29
  1947. package/node_modules/possible-typed-array-names/LICENSE +0 -21
  1948. package/node_modules/possible-typed-array-names/README.md +0 -50
  1949. package/node_modules/possible-typed-array-names/index.d.ts +0 -16
  1950. package/node_modules/possible-typed-array-names/index.js +0 -17
  1951. package/node_modules/possible-typed-array-names/package.json +0 -84
  1952. package/node_modules/possible-typed-array-names/test/index.js +0 -19
  1953. package/node_modules/possible-typed-array-names/tsconfig.json +0 -9
  1954. package/node_modules/process/.eslintrc +0 -21
  1955. package/node_modules/process/LICENSE +0 -22
  1956. package/node_modules/process/README.md +0 -26
  1957. package/node_modules/process/browser.js +0 -184
  1958. package/node_modules/process/index.js +0 -2
  1959. package/node_modules/process/package.json +0 -27
  1960. package/node_modules/process/test.js +0 -199
  1961. package/node_modules/process-nextick-args/index.js +0 -45
  1962. package/node_modules/process-nextick-args/license.md +0 -19
  1963. package/node_modules/process-nextick-args/package.json +0 -25
  1964. package/node_modules/process-nextick-args/readme.md +0 -18
  1965. package/node_modules/public-encrypt/.travis.yml +0 -6
  1966. package/node_modules/public-encrypt/LICENSE +0 -19
  1967. package/node_modules/public-encrypt/browser.js +0 -10
  1968. package/node_modules/public-encrypt/index.js +0 -18
  1969. package/node_modules/public-encrypt/mgf.js +0 -19
  1970. package/node_modules/public-encrypt/node_modules/bn.js/LICENSE +0 -19
  1971. package/node_modules/public-encrypt/node_modules/bn.js/README.md +0 -200
  1972. package/node_modules/public-encrypt/node_modules/bn.js/lib/bn.js +0 -3447
  1973. package/node_modules/public-encrypt/node_modules/bn.js/package.json +0 -36
  1974. package/node_modules/public-encrypt/node_modules/bn.js/util/genCombMulTo.js +0 -65
  1975. package/node_modules/public-encrypt/node_modules/bn.js/util/genCombMulTo10.js +0 -65
  1976. package/node_modules/public-encrypt/package.json +0 -37
  1977. package/node_modules/public-encrypt/privateDecrypt.js +0 -105
  1978. package/node_modules/public-encrypt/publicEncrypt.js +0 -88
  1979. package/node_modules/public-encrypt/readme.md +0 -8
  1980. package/node_modules/public-encrypt/test/1024.priv +0 -16
  1981. package/node_modules/public-encrypt/test/1024.pub +0 -6
  1982. package/node_modules/public-encrypt/test/ec.pass.priv +0 -7
  1983. package/node_modules/public-encrypt/test/ec.priv +0 -5
  1984. package/node_modules/public-encrypt/test/ec.pub +0 -4
  1985. package/node_modules/public-encrypt/test/index.js +0 -113
  1986. package/node_modules/public-encrypt/test/nodeTests.js +0 -51
  1987. package/node_modules/public-encrypt/test/pass.1024.priv +0 -18
  1988. package/node_modules/public-encrypt/test/pass.1024.pub +0 -6
  1989. package/node_modules/public-encrypt/test/rsa.1024.priv +0 -15
  1990. package/node_modules/public-encrypt/test/rsa.1024.pub +0 -5
  1991. package/node_modules/public-encrypt/test/rsa.2028.priv +0 -27
  1992. package/node_modules/public-encrypt/test/rsa.2028.pub +0 -8
  1993. package/node_modules/public-encrypt/test/rsa.pass.priv +0 -30
  1994. package/node_modules/public-encrypt/test/rsa.pass.pub +0 -9
  1995. package/node_modules/public-encrypt/test/test_cert.pem +0 -20
  1996. package/node_modules/public-encrypt/test/test_key.pem +0 -15
  1997. package/node_modules/public-encrypt/test/test_rsa_privkey.pem +0 -15
  1998. package/node_modules/public-encrypt/test/test_rsa_privkey_encrypted.pem +0 -18
  1999. package/node_modules/public-encrypt/test/test_rsa_pubkey.pem +0 -6
  2000. package/node_modules/public-encrypt/withPublic.js +0 -12
  2001. package/node_modules/public-encrypt/xor.js +0 -8
  2002. package/node_modules/punycode/LICENSE-MIT.txt +0 -20
  2003. package/node_modules/punycode/README.md +0 -176
  2004. package/node_modules/punycode/package.json +0 -60
  2005. package/node_modules/punycode/punycode.js +0 -533
  2006. package/node_modules/qs/.editorconfig +0 -46
  2007. package/node_modules/qs/.eslintrc +0 -39
  2008. package/node_modules/qs/.github/FUNDING.yml +0 -12
  2009. package/node_modules/qs/.nycrc +0 -13
  2010. package/node_modules/qs/CHANGELOG.md +0 -622
  2011. package/node_modules/qs/LICENSE.md +0 -29
  2012. package/node_modules/qs/README.md +0 -733
  2013. package/node_modules/qs/dist/qs.js +0 -141
  2014. package/node_modules/qs/lib/formats.js +0 -23
  2015. package/node_modules/qs/lib/index.js +0 -11
  2016. package/node_modules/qs/lib/parse.js +0 -328
  2017. package/node_modules/qs/lib/stringify.js +0 -356
  2018. package/node_modules/qs/lib/utils.js +0 -268
  2019. package/node_modules/qs/package.json +0 -93
  2020. package/node_modules/qs/test/empty-keys-cases.js +0 -267
  2021. package/node_modules/qs/test/parse.js +0 -1276
  2022. package/node_modules/qs/test/stringify.js +0 -1306
  2023. package/node_modules/qs/test/utils.js +0 -262
  2024. package/node_modules/querystring-es3/.travis.yml +0 -4
  2025. package/node_modules/querystring-es3/History.md +0 -20
  2026. package/node_modules/querystring-es3/License.md +0 -19
  2027. package/node_modules/querystring-es3/Readme.md +0 -15
  2028. package/node_modules/querystring-es3/decode.js +0 -84
  2029. package/node_modules/querystring-es3/encode.js +0 -85
  2030. package/node_modules/querystring-es3/index.js +0 -4
  2031. package/node_modules/querystring-es3/package.json +0 -65
  2032. package/node_modules/querystring-es3/test/common-index.js +0 -3
  2033. package/node_modules/querystring-es3/test/index.js +0 -210
  2034. package/node_modules/querystring-es3/test/tap-index.js +0 -3
  2035. package/node_modules/randombytes/.travis.yml +0 -15
  2036. package/node_modules/randombytes/.zuul.yml +0 -1
  2037. package/node_modules/randombytes/LICENSE +0 -21
  2038. package/node_modules/randombytes/README.md +0 -14
  2039. package/node_modules/randombytes/browser.js +0 -50
  2040. package/node_modules/randombytes/index.js +0 -1
  2041. package/node_modules/randombytes/package.json +0 -36
  2042. package/node_modules/randombytes/test.js +0 -81
  2043. package/node_modules/randomfill/.travis.yml +0 -15
  2044. package/node_modules/randomfill/.zuul.yml +0 -1
  2045. package/node_modules/randomfill/LICENSE +0 -21
  2046. package/node_modules/randomfill/README.md +0 -15
  2047. package/node_modules/randomfill/browser.js +0 -108
  2048. package/node_modules/randomfill/index.js +0 -7
  2049. package/node_modules/randomfill/package.json +0 -37
  2050. package/node_modules/randomfill/test.js +0 -28
  2051. package/node_modules/read-only-stream/.travis.yml +0 -6
  2052. package/node_modules/read-only-stream/LICENSE +0 -18
  2053. package/node_modules/read-only-stream/example/main.js +0 -3
  2054. package/node_modules/read-only-stream/example/wrap.js +0 -8
  2055. package/node_modules/read-only-stream/index.js +0 -30
  2056. package/node_modules/read-only-stream/package.json +0 -35
  2057. package/node_modules/read-only-stream/readme.markdown +0 -60
  2058. package/node_modules/read-only-stream/test/error.js +0 -15
  2059. package/node_modules/read-only-stream/test/ro.js +0 -22
  2060. package/node_modules/read-only-stream/test/streams1.js +0 -21
  2061. package/node_modules/readable-stream/.travis.yml +0 -34
  2062. package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  2063. package/node_modules/readable-stream/GOVERNANCE.md +0 -136
  2064. package/node_modules/readable-stream/LICENSE +0 -47
  2065. package/node_modules/readable-stream/README.md +0 -58
  2066. package/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
  2067. package/node_modules/readable-stream/duplex-browser.js +0 -1
  2068. package/node_modules/readable-stream/duplex.js +0 -1
  2069. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
  2070. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
  2071. package/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
  2072. package/node_modules/readable-stream/lib/_stream_transform.js +0 -214
  2073. package/node_modules/readable-stream/lib/_stream_writable.js +0 -685
  2074. package/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -78
  2075. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -84
  2076. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  2077. package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  2078. package/node_modules/readable-stream/node_modules/safe-buffer/LICENSE +0 -21
  2079. package/node_modules/readable-stream/node_modules/safe-buffer/README.md +0 -584
  2080. package/node_modules/readable-stream/node_modules/safe-buffer/index.d.ts +0 -187
  2081. package/node_modules/readable-stream/node_modules/safe-buffer/index.js +0 -62
  2082. package/node_modules/readable-stream/node_modules/safe-buffer/package.json +0 -37
  2083. package/node_modules/readable-stream/node_modules/string_decoder/.travis.yml +0 -50
  2084. package/node_modules/readable-stream/node_modules/string_decoder/LICENSE +0 -48
  2085. package/node_modules/readable-stream/node_modules/string_decoder/README.md +0 -47
  2086. package/node_modules/readable-stream/node_modules/string_decoder/lib/string_decoder.js +0 -296
  2087. package/node_modules/readable-stream/node_modules/string_decoder/package.json +0 -31
  2088. package/node_modules/readable-stream/package.json +0 -52
  2089. package/node_modules/readable-stream/passthrough.js +0 -1
  2090. package/node_modules/readable-stream/readable-browser.js +0 -7
  2091. package/node_modules/readable-stream/readable.js +0 -19
  2092. package/node_modules/readable-stream/transform.js +0 -1
  2093. package/node_modules/readable-stream/writable-browser.js +0 -1
  2094. package/node_modules/readable-stream/writable.js +0 -8
  2095. package/node_modules/resolve/.editorconfig +0 -37
  2096. package/node_modules/resolve/.eslintrc +0 -65
  2097. package/node_modules/resolve/.github/FUNDING.yml +0 -12
  2098. package/node_modules/resolve/LICENSE +0 -21
  2099. package/node_modules/resolve/SECURITY.md +0 -3
  2100. package/node_modules/resolve/async.js +0 -3
  2101. package/node_modules/resolve/bin/resolve +0 -50
  2102. package/node_modules/resolve/example/async.js +0 -5
  2103. package/node_modules/resolve/example/sync.js +0 -3
  2104. package/node_modules/resolve/index.js +0 -6
  2105. package/node_modules/resolve/lib/async.js +0 -329
  2106. package/node_modules/resolve/lib/caller.js +0 -8
  2107. package/node_modules/resolve/lib/core.js +0 -12
  2108. package/node_modules/resolve/lib/core.json +0 -162
  2109. package/node_modules/resolve/lib/homedir.js +0 -24
  2110. package/node_modules/resolve/lib/is-core.js +0 -5
  2111. package/node_modules/resolve/lib/node-modules-paths.js +0 -42
  2112. package/node_modules/resolve/lib/normalize-options.js +0 -10
  2113. package/node_modules/resolve/lib/sync.js +0 -208
  2114. package/node_modules/resolve/package.json +0 -75
  2115. package/node_modules/resolve/readme.markdown +0 -301
  2116. package/node_modules/resolve/sync.js +0 -3
  2117. package/node_modules/resolve/test/core.js +0 -88
  2118. package/node_modules/resolve/test/dotdot/abc/index.js +0 -2
  2119. package/node_modules/resolve/test/dotdot/index.js +0 -1
  2120. package/node_modules/resolve/test/dotdot.js +0 -29
  2121. package/node_modules/resolve/test/faulty_basedir.js +0 -29
  2122. package/node_modules/resolve/test/filter.js +0 -34
  2123. package/node_modules/resolve/test/filter_sync.js +0 -33
  2124. package/node_modules/resolve/test/home_paths.js +0 -127
  2125. package/node_modules/resolve/test/home_paths_sync.js +0 -114
  2126. package/node_modules/resolve/test/mock.js +0 -315
  2127. package/node_modules/resolve/test/mock_sync.js +0 -214
  2128. package/node_modules/resolve/test/module_dir/xmodules/aaa/index.js +0 -1
  2129. package/node_modules/resolve/test/module_dir/ymodules/aaa/index.js +0 -1
  2130. package/node_modules/resolve/test/module_dir/zmodules/bbb/main.js +0 -1
  2131. package/node_modules/resolve/test/module_dir/zmodules/bbb/package.json +0 -3
  2132. package/node_modules/resolve/test/module_dir.js +0 -56
  2133. package/node_modules/resolve/test/node-modules-paths.js +0 -143
  2134. package/node_modules/resolve/test/node_path/x/aaa/index.js +0 -1
  2135. package/node_modules/resolve/test/node_path/x/ccc/index.js +0 -1
  2136. package/node_modules/resolve/test/node_path/y/bbb/index.js +0 -1
  2137. package/node_modules/resolve/test/node_path/y/ccc/index.js +0 -1
  2138. package/node_modules/resolve/test/node_path.js +0 -70
  2139. package/node_modules/resolve/test/nonstring.js +0 -9
  2140. package/node_modules/resolve/test/pathfilter/deep_ref/main.js +0 -0
  2141. package/node_modules/resolve/test/pathfilter.js +0 -75
  2142. package/node_modules/resolve/test/precedence/aaa/index.js +0 -1
  2143. package/node_modules/resolve/test/precedence/aaa/main.js +0 -1
  2144. package/node_modules/resolve/test/precedence/aaa.js +0 -1
  2145. package/node_modules/resolve/test/precedence/bbb/main.js +0 -1
  2146. package/node_modules/resolve/test/precedence/bbb.js +0 -1
  2147. package/node_modules/resolve/test/precedence.js +0 -23
  2148. package/node_modules/resolve/test/resolver/baz/doom.js +0 -0
  2149. package/node_modules/resolve/test/resolver/baz/package.json +0 -4
  2150. package/node_modules/resolve/test/resolver/baz/quux.js +0 -1
  2151. package/node_modules/resolve/test/resolver/browser_field/a.js +0 -0
  2152. package/node_modules/resolve/test/resolver/browser_field/b.js +0 -0
  2153. package/node_modules/resolve/test/resolver/browser_field/package.json +0 -5
  2154. package/node_modules/resolve/test/resolver/cup.coffee +0 -1
  2155. package/node_modules/resolve/test/resolver/dot_main/index.js +0 -1
  2156. package/node_modules/resolve/test/resolver/dot_main/package.json +0 -3
  2157. package/node_modules/resolve/test/resolver/dot_slash_main/index.js +0 -1
  2158. package/node_modules/resolve/test/resolver/dot_slash_main/package.json +0 -3
  2159. package/node_modules/resolve/test/resolver/false_main/index.js +0 -0
  2160. package/node_modules/resolve/test/resolver/false_main/package.json +0 -4
  2161. package/node_modules/resolve/test/resolver/foo.js +0 -1
  2162. package/node_modules/resolve/test/resolver/incorrect_main/index.js +0 -2
  2163. package/node_modules/resolve/test/resolver/incorrect_main/package.json +0 -3
  2164. package/node_modules/resolve/test/resolver/invalid_main/package.json +0 -7
  2165. package/node_modules/resolve/test/resolver/mug.coffee +0 -0
  2166. package/node_modules/resolve/test/resolver/mug.js +0 -0
  2167. package/node_modules/resolve/test/resolver/multirepo/lerna.json +0 -6
  2168. package/node_modules/resolve/test/resolver/multirepo/package.json +0 -20
  2169. package/node_modules/resolve/test/resolver/multirepo/packages/package-a/index.js +0 -35
  2170. package/node_modules/resolve/test/resolver/multirepo/packages/package-a/package.json +0 -14
  2171. package/node_modules/resolve/test/resolver/multirepo/packages/package-b/index.js +0 -0
  2172. package/node_modules/resolve/test/resolver/multirepo/packages/package-b/package.json +0 -14
  2173. package/node_modules/resolve/test/resolver/nested_symlinks/mylib/async.js +0 -26
  2174. package/node_modules/resolve/test/resolver/nested_symlinks/mylib/package.json +0 -15
  2175. package/node_modules/resolve/test/resolver/nested_symlinks/mylib/sync.js +0 -12
  2176. package/node_modules/resolve/test/resolver/other_path/lib/other-lib.js +0 -0
  2177. package/node_modules/resolve/test/resolver/other_path/root.js +0 -0
  2178. package/node_modules/resolve/test/resolver/quux/foo/index.js +0 -1
  2179. package/node_modules/resolve/test/resolver/same_names/foo/index.js +0 -1
  2180. package/node_modules/resolve/test/resolver/same_names/foo.js +0 -1
  2181. package/node_modules/resolve/test/resolver/symlinked/_/node_modules/foo.js +0 -0
  2182. package/node_modules/resolve/test/resolver/symlinked/_/symlink_target/.gitkeep +0 -0
  2183. package/node_modules/resolve/test/resolver/symlinked/package/bar.js +0 -1
  2184. package/node_modules/resolve/test/resolver/symlinked/package/package.json +0 -3
  2185. package/node_modules/resolve/test/resolver/without_basedir/main.js +0 -5
  2186. package/node_modules/resolve/test/resolver.js +0 -597
  2187. package/node_modules/resolve/test/resolver_sync.js +0 -730
  2188. package/node_modules/resolve/test/shadowed_core/node_modules/util/index.js +0 -0
  2189. package/node_modules/resolve/test/shadowed_core.js +0 -54
  2190. package/node_modules/resolve/test/subdirs.js +0 -13
  2191. package/node_modules/resolve/test/symlinks.js +0 -176
  2192. package/node_modules/ripemd160/CHANGELOG.md +0 -72
  2193. package/node_modules/ripemd160/LICENSE +0 -21
  2194. package/node_modules/ripemd160/README.md +0 -27
  2195. package/node_modules/ripemd160/index.js +0 -163
  2196. package/node_modules/ripemd160/package.json +0 -37
  2197. package/node_modules/safe-buffer/LICENSE +0 -21
  2198. package/node_modules/safe-buffer/README.md +0 -584
  2199. package/node_modules/safe-buffer/index.d.ts +0 -187
  2200. package/node_modules/safe-buffer/index.js +0 -65
  2201. package/node_modules/safe-buffer/package.json +0 -51
  2202. package/node_modules/safe-regex-test/.eslintrc +0 -9
  2203. package/node_modules/safe-regex-test/.github/FUNDING.yml +0 -12
  2204. package/node_modules/safe-regex-test/.nycrc +0 -13
  2205. package/node_modules/safe-regex-test/CHANGELOG.md +0 -55
  2206. package/node_modules/safe-regex-test/LICENSE +0 -21
  2207. package/node_modules/safe-regex-test/README.md +0 -46
  2208. package/node_modules/safe-regex-test/index.d.ts +0 -3
  2209. package/node_modules/safe-regex-test/index.js +0 -17
  2210. package/node_modules/safe-regex-test/package.json +0 -87
  2211. package/node_modules/safe-regex-test/test/index.js +0 -41
  2212. package/node_modules/safe-regex-test/tsconfig.json +0 -9
  2213. package/node_modules/set-function-length/.eslintrc +0 -27
  2214. package/node_modules/set-function-length/.github/FUNDING.yml +0 -12
  2215. package/node_modules/set-function-length/.nycrc +0 -13
  2216. package/node_modules/set-function-length/CHANGELOG.md +0 -70
  2217. package/node_modules/set-function-length/LICENSE +0 -21
  2218. package/node_modules/set-function-length/README.md +0 -56
  2219. package/node_modules/set-function-length/env.d.ts +0 -9
  2220. package/node_modules/set-function-length/env.js +0 -25
  2221. package/node_modules/set-function-length/index.d.ts +0 -7
  2222. package/node_modules/set-function-length/index.js +0 -42
  2223. package/node_modules/set-function-length/package.json +0 -102
  2224. package/node_modules/set-function-length/tsconfig.json +0 -9
  2225. package/node_modules/sha.js/.eslintrc +0 -76
  2226. package/node_modules/sha.js/CHANGELOG.md +0 -423
  2227. package/node_modules/sha.js/LICENSE +0 -49
  2228. package/node_modules/sha.js/README.md +0 -44
  2229. package/node_modules/sha.js/bin.js +0 -44
  2230. package/node_modules/sha.js/hash.js +0 -84
  2231. package/node_modules/sha.js/index.js +0 -19
  2232. package/node_modules/sha.js/package.json +0 -58
  2233. package/node_modules/sha.js/sha.js +0 -104
  2234. package/node_modules/sha.js/sha1.js +0 -109
  2235. package/node_modules/sha.js/sha224.js +0 -55
  2236. package/node_modules/sha.js/sha256.js +0 -189
  2237. package/node_modules/sha.js/sha384.js +0 -59
  2238. package/node_modules/sha.js/sha512.js +0 -382
  2239. package/node_modules/sha.js/test/hash.js +0 -80
  2240. package/node_modules/sha.js/test/test.js +0 -138
  2241. package/node_modules/sha.js/test/vectors.js +0 -72
  2242. package/node_modules/shasum-object/.travis.yml +0 -13
  2243. package/node_modules/shasum-object/CHANGELOG.md +0 -8
  2244. package/node_modules/shasum-object/CODE_OF_CONDUCT.md +0 -74
  2245. package/node_modules/shasum-object/LICENSE.md +0 -15
  2246. package/node_modules/shasum-object/README.md +0 -48
  2247. package/node_modules/shasum-object/bin.js +0 -15
  2248. package/node_modules/shasum-object/index.js +0 -12
  2249. package/node_modules/shasum-object/package.json +0 -34
  2250. package/node_modules/shasum-object/test/index.js +0 -39
  2251. package/node_modules/shell-quote/.eslintrc +0 -30
  2252. package/node_modules/shell-quote/.github/FUNDING.yml +0 -12
  2253. package/node_modules/shell-quote/.nycrc +0 -14
  2254. package/node_modules/shell-quote/LICENSE +0 -24
  2255. package/node_modules/shell-quote/README.md +0 -161
  2256. package/node_modules/shell-quote/index.js +0 -4
  2257. package/node_modules/shell-quote/package.json +0 -72
  2258. package/node_modules/shell-quote/parse.js +0 -226
  2259. package/node_modules/shell-quote/print.py +0 -3
  2260. package/node_modules/shell-quote/quote.js +0 -19
  2261. package/node_modules/shell-quote/security.md +0 -11
  2262. package/node_modules/shell-quote/test/comment.js +0 -16
  2263. package/node_modules/shell-quote/test/env.js +0 -52
  2264. package/node_modules/shell-quote/test/env_fn.js +0 -21
  2265. package/node_modules/shell-quote/test/op.js +0 -102
  2266. package/node_modules/shell-quote/test/parse.js +0 -44
  2267. package/node_modules/shell-quote/test/quote.js +0 -60
  2268. package/node_modules/shell-quote/test/set.js +0 -31
  2269. package/node_modules/side-channel/.editorconfig +0 -9
  2270. package/node_modules/side-channel/.eslintrc +0 -12
  2271. package/node_modules/side-channel/.github/FUNDING.yml +0 -12
  2272. package/node_modules/side-channel/.nycrc +0 -13
  2273. package/node_modules/side-channel/CHANGELOG.md +0 -110
  2274. package/node_modules/side-channel/LICENSE +0 -21
  2275. package/node_modules/side-channel/README.md +0 -61
  2276. package/node_modules/side-channel/index.d.ts +0 -14
  2277. package/node_modules/side-channel/index.js +0 -43
  2278. package/node_modules/side-channel/package.json +0 -85
  2279. package/node_modules/side-channel/test/index.js +0 -104
  2280. package/node_modules/side-channel/tsconfig.json +0 -9
  2281. package/node_modules/side-channel-list/.editorconfig +0 -9
  2282. package/node_modules/side-channel-list/.eslintrc +0 -11
  2283. package/node_modules/side-channel-list/.github/FUNDING.yml +0 -12
  2284. package/node_modules/side-channel-list/.nycrc +0 -13
  2285. package/node_modules/side-channel-list/CHANGELOG.md +0 -15
  2286. package/node_modules/side-channel-list/LICENSE +0 -21
  2287. package/node_modules/side-channel-list/README.md +0 -62
  2288. package/node_modules/side-channel-list/index.d.ts +0 -13
  2289. package/node_modules/side-channel-list/index.js +0 -113
  2290. package/node_modules/side-channel-list/list.d.ts +0 -14
  2291. package/node_modules/side-channel-list/package.json +0 -77
  2292. package/node_modules/side-channel-list/test/index.js +0 -104
  2293. package/node_modules/side-channel-list/tsconfig.json +0 -9
  2294. package/node_modules/side-channel-map/.editorconfig +0 -9
  2295. package/node_modules/side-channel-map/.eslintrc +0 -11
  2296. package/node_modules/side-channel-map/.github/FUNDING.yml +0 -12
  2297. package/node_modules/side-channel-map/.nycrc +0 -13
  2298. package/node_modules/side-channel-map/CHANGELOG.md +0 -22
  2299. package/node_modules/side-channel-map/LICENSE +0 -21
  2300. package/node_modules/side-channel-map/README.md +0 -62
  2301. package/node_modules/side-channel-map/index.d.ts +0 -15
  2302. package/node_modules/side-channel-map/index.js +0 -68
  2303. package/node_modules/side-channel-map/package.json +0 -80
  2304. package/node_modules/side-channel-map/test/index.js +0 -114
  2305. package/node_modules/side-channel-map/tsconfig.json +0 -9
  2306. package/node_modules/side-channel-weakmap/.editorconfig +0 -9
  2307. package/node_modules/side-channel-weakmap/.eslintrc +0 -12
  2308. package/node_modules/side-channel-weakmap/.github/FUNDING.yml +0 -12
  2309. package/node_modules/side-channel-weakmap/.nycrc +0 -13
  2310. package/node_modules/side-channel-weakmap/CHANGELOG.md +0 -28
  2311. package/node_modules/side-channel-weakmap/LICENSE +0 -21
  2312. package/node_modules/side-channel-weakmap/README.md +0 -62
  2313. package/node_modules/side-channel-weakmap/index.d.ts +0 -15
  2314. package/node_modules/side-channel-weakmap/index.js +0 -84
  2315. package/node_modules/side-channel-weakmap/package.json +0 -87
  2316. package/node_modules/side-channel-weakmap/test/index.js +0 -114
  2317. package/node_modules/side-channel-weakmap/tsconfig.json +0 -9
  2318. package/node_modules/simple-concat/.travis.yml +0 -3
  2319. package/node_modules/simple-concat/LICENSE +0 -20
  2320. package/node_modules/simple-concat/README.md +0 -44
  2321. package/node_modules/simple-concat/index.js +0 -15
  2322. package/node_modules/simple-concat/package.json +0 -47
  2323. package/node_modules/simple-concat/test/basic.js +0 -41
  2324. package/node_modules/source-map/CHANGELOG.md +0 -301
  2325. package/node_modules/source-map/LICENSE +0 -28
  2326. package/node_modules/source-map/README.md +0 -729
  2327. package/node_modules/source-map/dist/source-map.debug.js +0 -3091
  2328. package/node_modules/source-map/dist/source-map.js +0 -3090
  2329. package/node_modules/source-map/dist/source-map.min.js +0 -2
  2330. package/node_modules/source-map/dist/source-map.min.js.map +0 -1
  2331. package/node_modules/source-map/lib/array-set.js +0 -121
  2332. package/node_modules/source-map/lib/base64-vlq.js +0 -140
  2333. package/node_modules/source-map/lib/base64.js +0 -67
  2334. package/node_modules/source-map/lib/binary-search.js +0 -111
  2335. package/node_modules/source-map/lib/mapping-list.js +0 -79
  2336. package/node_modules/source-map/lib/quick-sort.js +0 -114
  2337. package/node_modules/source-map/lib/source-map-consumer.js +0 -1082
  2338. package/node_modules/source-map/lib/source-map-generator.js +0 -416
  2339. package/node_modules/source-map/lib/source-node.js +0 -413
  2340. package/node_modules/source-map/lib/util.js +0 -417
  2341. package/node_modules/source-map/package.json +0 -72
  2342. package/node_modules/source-map/source-map.js +0 -8
  2343. package/node_modules/stream-browserify/.airtap.yml +0 -20
  2344. package/node_modules/stream-browserify/.github/FUNDING.yml +0 -12
  2345. package/node_modules/stream-browserify/.travis.yml +0 -24
  2346. package/node_modules/stream-browserify/CHANGELOG.md +0 -8
  2347. package/node_modules/stream-browserify/LICENSE +0 -20
  2348. package/node_modules/stream-browserify/index.js +0 -129
  2349. package/node_modules/stream-browserify/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  2350. package/node_modules/stream-browserify/node_modules/readable-stream/GOVERNANCE.md +0 -136
  2351. package/node_modules/stream-browserify/node_modules/readable-stream/LICENSE +0 -47
  2352. package/node_modules/stream-browserify/node_modules/readable-stream/README.md +0 -106
  2353. package/node_modules/stream-browserify/node_modules/readable-stream/errors-browser.js +0 -127
  2354. package/node_modules/stream-browserify/node_modules/readable-stream/errors.js +0 -116
  2355. package/node_modules/stream-browserify/node_modules/readable-stream/experimentalWarning.js +0 -17
  2356. package/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  2357. package/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  2358. package/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  2359. package/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  2360. package/node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  2361. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  2362. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  2363. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  2364. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  2365. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  2366. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  2367. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  2368. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  2369. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  2370. package/node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  2371. package/node_modules/stream-browserify/node_modules/readable-stream/package.json +0 -68
  2372. package/node_modules/stream-browserify/node_modules/readable-stream/readable-browser.js +0 -9
  2373. package/node_modules/stream-browserify/node_modules/readable-stream/readable.js +0 -16
  2374. package/node_modules/stream-browserify/package.json +0 -54
  2375. package/node_modules/stream-browserify/readme.markdown +0 -32
  2376. package/node_modules/stream-browserify/security.md +0 -10
  2377. package/node_modules/stream-browserify/test/buf.js +0 -33
  2378. package/node_modules/stream-browserify/test/index.js +0 -2
  2379. package/node_modules/stream-browserify/test/pipeline.js +0 -38
  2380. package/node_modules/stream-browserify/test/use-stream.js +0 -4
  2381. package/node_modules/stream-combiner2/.npmignore +0 -3
  2382. package/node_modules/stream-combiner2/.travis.yml +0 -6
  2383. package/node_modules/stream-combiner2/LICENSE +0 -22
  2384. package/node_modules/stream-combiner2/README.md +0 -37
  2385. package/node_modules/stream-combiner2/index.js +0 -68
  2386. package/node_modules/stream-combiner2/package.json +0 -23
  2387. package/node_modules/stream-combiner2/test/index.js +0 -98
  2388. package/node_modules/stream-http/LICENSE +0 -24
  2389. package/node_modules/stream-http/README.md +0 -134
  2390. package/node_modules/stream-http/index.js +0 -85
  2391. package/node_modules/stream-http/lib/capability.js +0 -59
  2392. package/node_modules/stream-http/lib/request.js +0 -352
  2393. package/node_modules/stream-http/lib/response.js +0 -211
  2394. package/node_modules/stream-http/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  2395. package/node_modules/stream-http/node_modules/readable-stream/GOVERNANCE.md +0 -136
  2396. package/node_modules/stream-http/node_modules/readable-stream/LICENSE +0 -47
  2397. package/node_modules/stream-http/node_modules/readable-stream/README.md +0 -106
  2398. package/node_modules/stream-http/node_modules/readable-stream/errors-browser.js +0 -127
  2399. package/node_modules/stream-http/node_modules/readable-stream/errors.js +0 -116
  2400. package/node_modules/stream-http/node_modules/readable-stream/experimentalWarning.js +0 -17
  2401. package/node_modules/stream-http/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  2402. package/node_modules/stream-http/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  2403. package/node_modules/stream-http/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  2404. package/node_modules/stream-http/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  2405. package/node_modules/stream-http/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  2406. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  2407. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  2408. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  2409. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  2410. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  2411. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  2412. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  2413. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  2414. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  2415. package/node_modules/stream-http/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  2416. package/node_modules/stream-http/node_modules/readable-stream/package.json +0 -68
  2417. package/node_modules/stream-http/node_modules/readable-stream/readable-browser.js +0 -9
  2418. package/node_modules/stream-http/node_modules/readable-stream/readable.js +0 -16
  2419. package/node_modules/stream-http/package.json +0 -47
  2420. package/node_modules/stream-splicer/.travis.yml +0 -16
  2421. package/node_modules/stream-splicer/LICENSE +0 -21
  2422. package/node_modules/stream-splicer/example/header.js +0 -22
  2423. package/node_modules/stream-splicer/index.js +0 -196
  2424. package/node_modules/stream-splicer/package.json +0 -36
  2425. package/node_modules/stream-splicer/readme.markdown +0 -139
  2426. package/node_modules/stream-splicer/test/combiner.js +0 -31
  2427. package/node_modules/stream-splicer/test/combiner_stream.js +0 -29
  2428. package/node_modules/stream-splicer/test/empty.js +0 -17
  2429. package/node_modules/stream-splicer/test/empty_no_data.js +0 -13
  2430. package/node_modules/stream-splicer/test/get.js +0 -41
  2431. package/node_modules/stream-splicer/test/multipush.js +0 -31
  2432. package/node_modules/stream-splicer/test/multiunshift.js +0 -31
  2433. package/node_modules/stream-splicer/test/nested.js +0 -36
  2434. package/node_modules/stream-splicer/test/nested_middle.js +0 -42
  2435. package/node_modules/stream-splicer/test/pop.js +0 -46
  2436. package/node_modules/stream-splicer/test/push.js +0 -57
  2437. package/node_modules/stream-splicer/test/shift.js +0 -46
  2438. package/node_modules/stream-splicer/test/splice.js +0 -58
  2439. package/node_modules/stream-splicer/test/unshift.js +0 -46
  2440. package/node_modules/string_decoder/LICENSE +0 -48
  2441. package/node_modules/string_decoder/README.md +0 -47
  2442. package/node_modules/string_decoder/lib/string_decoder.js +0 -296
  2443. package/node_modules/string_decoder/package.json +0 -34
  2444. package/node_modules/subarg/.travis.yml +0 -4
  2445. package/node_modules/subarg/LICENSE +0 -18
  2446. package/node_modules/subarg/example/show.js +0 -3
  2447. package/node_modules/subarg/index.js +0 -35
  2448. package/node_modules/subarg/package.json +0 -47
  2449. package/node_modules/subarg/readme.markdown +0 -55
  2450. package/node_modules/subarg/test/arg.js +0 -31
  2451. package/node_modules/subarg/test/recursive.js +0 -24
  2452. package/node_modules/supports-preserve-symlinks-flag/.eslintrc +0 -14
  2453. package/node_modules/supports-preserve-symlinks-flag/.github/FUNDING.yml +0 -12
  2454. package/node_modules/supports-preserve-symlinks-flag/.nycrc +0 -9
  2455. package/node_modules/supports-preserve-symlinks-flag/CHANGELOG.md +0 -22
  2456. package/node_modules/supports-preserve-symlinks-flag/LICENSE +0 -21
  2457. package/node_modules/supports-preserve-symlinks-flag/README.md +0 -42
  2458. package/node_modules/supports-preserve-symlinks-flag/browser.js +0 -3
  2459. package/node_modules/supports-preserve-symlinks-flag/index.js +0 -9
  2460. package/node_modules/supports-preserve-symlinks-flag/package.json +0 -70
  2461. package/node_modules/supports-preserve-symlinks-flag/test/index.js +0 -29
  2462. package/node_modules/syntax-error/.travis.yml +0 -12
  2463. package/node_modules/syntax-error/LICENSE +0 -18
  2464. package/node_modules/syntax-error/example/check.js +0 -12
  2465. package/node_modules/syntax-error/example/src.js +0 -9
  2466. package/node_modules/syntax-error/index.js +0 -57
  2467. package/node_modules/syntax-error/package.json +0 -37
  2468. package/node_modules/syntax-error/readme.markdown +0 -90
  2469. package/node_modules/syntax-error/test/check.js +0 -17
  2470. package/node_modules/syntax-error/test/esm.js +0 -23
  2471. package/node_modules/syntax-error/test/html.js +0 -16
  2472. package/node_modules/syntax-error/test/ok.js +0 -13
  2473. package/node_modules/syntax-error/test/run.js +0 -12
  2474. package/node_modules/syntax-error/test/run2.js +0 -12
  2475. package/node_modules/syntax-error/test/shebang.js +0 -13
  2476. package/node_modules/syntax-error/test/sources/check.js +0 -9
  2477. package/node_modules/syntax-error/test/sources/esm.js +0 -2
  2478. package/node_modules/syntax-error/test/sources/ok.js +0 -1
  2479. package/node_modules/syntax-error/test/sources/run.js +0 -1
  2480. package/node_modules/syntax-error/test/sources/run2.js +0 -3
  2481. package/node_modules/syntax-error/test/sources/shebang.js +0 -2
  2482. package/node_modules/syntax-error/test/sources/spread.js +0 -2
  2483. package/node_modules/syntax-error/test/sources/yield.js +0 -13
  2484. package/node_modules/syntax-error/test/spread.js +0 -13
  2485. package/node_modules/syntax-error/test/yield.js +0 -13
  2486. package/node_modules/through/.travis.yml +0 -5
  2487. package/node_modules/through/LICENSE.APACHE2 +0 -15
  2488. package/node_modules/through/LICENSE.MIT +0 -24
  2489. package/node_modules/through/index.js +0 -108
  2490. package/node_modules/through/package.json +0 -36
  2491. package/node_modules/through/readme.markdown +0 -64
  2492. package/node_modules/through/test/async.js +0 -28
  2493. package/node_modules/through/test/auto-destroy.js +0 -30
  2494. package/node_modules/through/test/buffering.js +0 -71
  2495. package/node_modules/through/test/end.js +0 -45
  2496. package/node_modules/through/test/index.js +0 -133
  2497. package/node_modules/through2/LICENSE.md +0 -9
  2498. package/node_modules/through2/README.md +0 -134
  2499. package/node_modules/through2/package.json +0 -33
  2500. package/node_modules/through2/through2.js +0 -96
  2501. package/node_modules/timers-browserify/.npmignore +0 -2
  2502. package/node_modules/timers-browserify/CHANGELOG.md +0 -58
  2503. package/node_modules/timers-browserify/LICENSE.md +0 -46
  2504. package/node_modules/timers-browserify/README.md +0 -40
  2505. package/node_modules/timers-browserify/example/enroll/build.sh +0 -3
  2506. package/node_modules/timers-browserify/example/enroll/index.html +0 -8
  2507. package/node_modules/timers-browserify/example/enroll/js/browserify.js +0 -233
  2508. package/node_modules/timers-browserify/example/enroll/js/main.js +0 -14
  2509. package/node_modules/timers-browserify/example/enroll/server.js +0 -11
  2510. package/node_modules/timers-browserify/main.js +0 -76
  2511. package/node_modules/timers-browserify/package.json +0 -51
  2512. package/node_modules/to-buffer/.eslintrc +0 -16
  2513. package/node_modules/to-buffer/.github/FUNDING.yml +0 -12
  2514. package/node_modules/to-buffer/.nycrc +0 -9
  2515. package/node_modules/to-buffer/CHANGELOG.md +0 -72
  2516. package/node_modules/to-buffer/LICENSE +0 -21
  2517. package/node_modules/to-buffer/README.md +0 -44
  2518. package/node_modules/to-buffer/index.js +0 -109
  2519. package/node_modules/to-buffer/node_modules/isarray/LICENSE +0 -21
  2520. package/node_modules/to-buffer/node_modules/isarray/README.md +0 -38
  2521. package/node_modules/to-buffer/node_modules/isarray/index.js +0 -5
  2522. package/node_modules/to-buffer/node_modules/isarray/package.json +0 -48
  2523. package/node_modules/to-buffer/package.json +0 -60
  2524. package/node_modules/tty-browserify/LICENSE +0 -18
  2525. package/node_modules/tty-browserify/index.js +0 -11
  2526. package/node_modules/tty-browserify/package.json +0 -29
  2527. package/node_modules/tty-browserify/readme.markdown +0 -1
  2528. package/node_modules/typed-array-buffer/.eslintrc +0 -13
  2529. package/node_modules/typed-array-buffer/.github/FUNDING.yml +0 -12
  2530. package/node_modules/typed-array-buffer/.nycrc +0 -13
  2531. package/node_modules/typed-array-buffer/CHANGELOG.md +0 -50
  2532. package/node_modules/typed-array-buffer/LICENSE +0 -21
  2533. package/node_modules/typed-array-buffer/README.md +0 -42
  2534. package/node_modules/typed-array-buffer/index.d.ts +0 -9
  2535. package/node_modules/typed-array-buffer/index.js +0 -19
  2536. package/node_modules/typed-array-buffer/package.json +0 -82
  2537. package/node_modules/typed-array-buffer/test/index.js +0 -23
  2538. package/node_modules/typed-array-buffer/tsconfig.json +0 -9
  2539. package/node_modules/typedarray/.travis.yml +0 -4
  2540. package/node_modules/typedarray/LICENSE +0 -35
  2541. package/node_modules/typedarray/example/tarray.js +0 -4
  2542. package/node_modules/typedarray/index.js +0 -630
  2543. package/node_modules/typedarray/package.json +0 -55
  2544. package/node_modules/typedarray/readme.markdown +0 -61
  2545. package/node_modules/typedarray/test/server/undef_globals.js +0 -19
  2546. package/node_modules/typedarray/test/tarray.js +0 -10
  2547. package/node_modules/umd/HISTORY.md +0 -64
  2548. package/node_modules/umd/LICENSE +0 -19
  2549. package/node_modules/umd/README.md +0 -82
  2550. package/node_modules/umd/bin/cli.js +0 -43
  2551. package/node_modules/umd/index.js +0 -78
  2552. package/node_modules/umd/package.json +0 -28
  2553. package/node_modules/undeclared-identifiers/.travis.yml +0 -9
  2554. package/node_modules/undeclared-identifiers/CHANGELOG.md +0 -22
  2555. package/node_modules/undeclared-identifiers/LICENSE.md +0 -15
  2556. package/node_modules/undeclared-identifiers/README.md +0 -55
  2557. package/node_modules/undeclared-identifiers/bench/index.js +0 -57
  2558. package/node_modules/undeclared-identifiers/bin.js +0 -29
  2559. package/node_modules/undeclared-identifiers/index.js +0 -146
  2560. package/node_modules/undeclared-identifiers/package.json +0 -44
  2561. package/node_modules/undeclared-identifiers/test/index.js +0 -258
  2562. package/node_modules/url/.eslintignore +0 -1
  2563. package/node_modules/url/.eslintrc +0 -38
  2564. package/node_modules/url/.nycrc +0 -9
  2565. package/node_modules/url/LICENSE +0 -21
  2566. package/node_modules/url/README.md +0 -108
  2567. package/node_modules/url/package.json +0 -42
  2568. package/node_modules/url/test/index.js +0 -2080
  2569. package/node_modules/url/test/mocha.opts +0 -2
  2570. package/node_modules/url/url.js +0 -776
  2571. package/node_modules/util/LICENSE +0 -18
  2572. package/node_modules/util/README.md +0 -48
  2573. package/node_modules/util/package.json +0 -50
  2574. package/node_modules/util/support/isBuffer.js +0 -3
  2575. package/node_modules/util/support/isBufferBrowser.js +0 -6
  2576. package/node_modules/util/support/types.js +0 -334
  2577. package/node_modules/util/util.js +0 -715
  2578. package/node_modules/util-deprecate/History.md +0 -16
  2579. package/node_modules/util-deprecate/LICENSE +0 -24
  2580. package/node_modules/util-deprecate/README.md +0 -53
  2581. package/node_modules/util-deprecate/browser.js +0 -67
  2582. package/node_modules/util-deprecate/node.js +0 -6
  2583. package/node_modules/util-deprecate/package.json +0 -27
  2584. package/node_modules/vm-browserify/.github/FUNDING.yml +0 -12
  2585. package/node_modules/vm-browserify/.travis.yml +0 -8
  2586. package/node_modules/vm-browserify/CHANGELOG.md +0 -23
  2587. package/node_modules/vm-browserify/LICENSE +0 -18
  2588. package/node_modules/vm-browserify/example/run/bundle.js +0 -160
  2589. package/node_modules/vm-browserify/example/run/entry.js +0 -6
  2590. package/node_modules/vm-browserify/example/run/index.html +0 -8
  2591. package/node_modules/vm-browserify/example/run/server.js +0 -6
  2592. package/node_modules/vm-browserify/index.js +0 -149
  2593. package/node_modules/vm-browserify/package.json +0 -30
  2594. package/node_modules/vm-browserify/readme.markdown +0 -66
  2595. package/node_modules/vm-browserify/security.md +0 -10
  2596. package/node_modules/vm-browserify/test/vm.js +0 -35
  2597. package/node_modules/which-typed-array/.editorconfig +0 -20
  2598. package/node_modules/which-typed-array/.eslintrc +0 -10
  2599. package/node_modules/which-typed-array/.github/FUNDING.yml +0 -12
  2600. package/node_modules/which-typed-array/.nycrc +0 -13
  2601. package/node_modules/which-typed-array/CHANGELOG.md +0 -261
  2602. package/node_modules/which-typed-array/LICENSE +0 -22
  2603. package/node_modules/which-typed-array/README.md +0 -70
  2604. package/node_modules/which-typed-array/index.d.ts +0 -62
  2605. package/node_modules/which-typed-array/index.js +0 -117
  2606. package/node_modules/which-typed-array/package.json +0 -130
  2607. package/node_modules/which-typed-array/test/index.js +0 -105
  2608. package/node_modules/which-typed-array/tsconfig.json +0 -9
  2609. package/node_modules/wrappy/LICENSE +0 -15
  2610. package/node_modules/wrappy/README.md +0 -36
  2611. package/node_modules/wrappy/package.json +0 -29
  2612. package/node_modules/wrappy/wrappy.js +0 -33
  2613. package/node_modules/xtend/.jshintrc +0 -30
  2614. package/node_modules/xtend/LICENSE +0 -20
  2615. package/node_modules/xtend/README.md +0 -32
  2616. package/node_modules/xtend/immutable.js +0 -19
  2617. package/node_modules/xtend/mutable.js +0 -17
  2618. package/node_modules/xtend/package.json +0 -55
  2619. package/node_modules/xtend/test.js +0 -103
  2620. package/pitometer/README.md +0 -11
  2621. package/pitometer/bench-programs.js +0 -52
  2622. package/pitometer/config.json +0 -7
  2623. package/pitometer/count-lines.js +0 -22
  2624. package/pitometer/full-config.json +0 -9
  2625. package/pitometer/measurements.js +0 -11
  2626. package/pitometer/programs/0_empty.arr +0 -0
  2627. package/pitometer/programs/1_empty-with-comments.arr +0 -4767
  2628. package/pitometer/programs/adding-ones-2000.arr +0 -2
  2629. package/pitometer/programs/anf-loop-compiler.arr +0 -1817
  2630. package/pitometer/programs/ast.arr +0 -3271
  2631. package/pitometer/programs/bignum-factorial-2000.arr +0 -7
  2632. package/pitometer/programs/bignum-factorial-20000.arr +0 -7
  2633. package/pitometer/programs/boids-loop.arr +0 -189
  2634. package/pitometer/programs/edits.arr +0 -39
  2635. package/pitometer/programs/inner-function-1000.arr +0 -15
  2636. package/pitometer/programs/inner-function-10000.arr +0 -15
  2637. package/pitometer/programs/list-set-const-1000.arr +0 -5
  2638. package/pitometer/programs/list-set-const-10000.arr +0 -5
  2639. package/pitometer/programs/list-set-const-1000000.arr +0 -5
  2640. package/pitometer/programs/list-set-grow-1000.arr +0 -5
  2641. package/pitometer/programs/many-links-100000.arr +0 -2
  2642. package/pitometer/programs/many-links-constr-100000.arr +0 -8
  2643. package/pitometer/programs/method-calls-10000.arr +0 -3
  2644. package/pitometer/programs/method-calls-nolists-10000.arr +0 -10
  2645. package/pitometer/programs/method-calls-nolists-1000000.arr +0 -10
  2646. package/pitometer/programs/mutable-string-dict-const-10000.arr +0 -6
  2647. package/pitometer/programs/mutable-string-dict-const-100000.arr +0 -6
  2648. package/pitometer/programs/mutable-string-dict-grow-10000.arr +0 -6
  2649. package/pitometer/programs/mutable-string-dict-grow-100000.arr +0 -6
  2650. package/pitometer/programs/propcheck.arr +0 -284
  2651. package/pitometer/programs/recursion-triangle-20000.arr +0 -7
  2652. package/pitometer/programs/recursion-triangle-2000000.arr +0 -7
  2653. package/pitometer/programs/recursion-triangle-annotated-20000.arr +0 -7
  2654. package/pitometer/programs/recursion-triangle-annotated-2000000.arr +0 -7
  2655. package/pitometer/programs/recursive-calls-10000.arr +0 -3
  2656. package/pitometer/programs/string-allocation-10000.arr +0 -2
  2657. package/pitometer/programs/string-dict-const-10000.arr +0 -5
  2658. package/pitometer/programs/string-dict-grow-10000.arr +0 -5
  2659. package/pitometer/programs/tail-sum-10000.arr +0 -7
  2660. package/pitometer/programs/tail-sum-1000000.arr +0 -7
  2661. package/pitometer/programs/tree-set-const-10000.arr +0 -5
  2662. package/pitometer/programs/tree-set-grow-10000.arr +0 -5
  2663. package/pitometer/run-measurements.js +0 -89
  2664. package/pitometer/time-helpers.js +0 -22
  2665. package/pitometer/time-phases.js +0 -40
  2666. package/tests/all.arr +0 -4
  2667. package/tests/io-tests/README.md +0 -62
  2668. package/tests/io-tests/io.test.js +0 -129
  2669. package/tests/io-tests/tests/animals-ds-2024.csv +0 -33
  2670. package/tests/io-tests/tests/library-code.arr +0 -5
  2671. package/tests/io-tests/tests/nested/library-code.arr +0 -5
  2672. package/tests/io-tests/tests/test-csv-table-url.arr +0 -46
  2673. package/tests/io-tests/tests/test-import-url-both-present-all-remote.arr +0 -9
  2674. package/tests/io-tests/tests/test-import-url-both-present.arr +0 -9
  2675. package/tests/io-tests/tests/test-import-url-remote-fail.arr +0 -9
  2676. package/tests/io-tests/tests/test-import-url-remote.arr +0 -8
  2677. package/tests/io-tests/tests/test-import-url.arr +0 -5
  2678. package/tests/io-tests/tests/test-input-empty-prompt.arr +0 -6
  2679. package/tests/io-tests/tests/test-input-incorrect-prompt-input-type.arr +0 -5
  2680. package/tests/io-tests/tests/test-input-missing-prompt-input.arr +0 -5
  2681. package/tests/io-tests/tests/test-input-non-empty-prompt.arr +0 -6
  2682. package/tests/lib-test/lib-test-main.arr +0 -3
  2683. package/tests/parse/parse.js +0 -831
  2684. package/tests/pyret/main.arr +0 -36
  2685. package/tests/pyret/main2.arr +0 -70
  2686. package/tests/pyret/regression/anf-of-vars.arr +0 -15
  2687. package/tests/pyret/regression/bogus-global-type-name.arr +0 -15
  2688. package/tests/pyret/regression/cases-expr-parse.arr +0 -7
  2689. package/tests/pyret/regression/check-scope.arr +0 -13
  2690. package/tests/pyret/regression/curried-funs.arr +0 -7
  2691. package/tests/pyret/regression/double-desugar-extend.arr +0 -13
  2692. package/tests/pyret/regression/duplicate-check-block-report.arr +0 -26
  2693. package/tests/pyret/regression/empty-check-block.arr +0 -16
  2694. package/tests/pyret/regression/empty-concat-list-and-block.arr +0 -24
  2695. package/tests/pyret/regression/escaping-module-uris.arr +0 -48
  2696. package/tests/pyret/regression/flat-refinement.arr +0 -28
  2697. package/tests/pyret/regression/get-assignments-var-as-expr.arr +0 -14
  2698. package/tests/pyret/regression/immediate-app-return-ann.arr +0 -5
  2699. package/tests/pyret/regression/import-module-defining-but-not-exporting-data.arr +0 -5
  2700. package/tests/pyret/regression/is-not-uses-equal-always.arr +0 -3
  2701. package/tests/pyret/regression/map4_n.arr +0 -10
  2702. package/tests/pyret/regression/method-scope.arr +0 -17
  2703. package/tests/pyret/regression/named-arrow-ann.arr +0 -15
  2704. package/tests/pyret/regression/parens-after-comments.arr +0 -45
  2705. package/tests/pyret/regression/pretty-print-instantiate.arr +0 -6
  2706. package/tests/pyret/regression/proto-fields.arr +0 -23
  2707. package/tests/pyret/regression/provides-less-than-data.arr +0 -8
  2708. package/tests/pyret/regression/random-arg-typecheck.arr +0 -4
  2709. package/tests/pyret/regression/random-bogus-range.arr +0 -6
  2710. package/tests/pyret/regression/render-reason-wrong-op.arr +0 -19
  2711. package/tests/pyret/regression/seq-of-lettable.arr +0 -57
  2712. package/tests/pyret/regression/sloppy-list-filter.arr +0 -7
  2713. package/tests/pyret/regression/stack-safe-each-loop.arr +0 -11
  2714. package/tests/pyret/regression/string-dict-equality.arr +0 -15
  2715. package/tests/pyret/regression/table-reduce.arr +0 -20
  2716. package/tests/pyret/regression/tail-recursion-arg-order.arr +0 -74
  2717. package/tests/pyret/regression/tc-internal-err.arr +0 -8
  2718. package/tests/pyret/regression/toplevel-data.arr +0 -57
  2719. package/tests/pyret/regression/using-spy-with-var.arr +0 -6
  2720. package/tests/pyret/regression/var-statement.arr +0 -9
  2721. package/tests/pyret/regression/weave-tuple.arr +0 -23
  2722. package/tests/pyret/regression/zero.arr +0 -6
  2723. package/tests/pyret/regression.arr +0 -35
  2724. package/tests/pyret/standalone/importer.arr +0 -52
  2725. package/tests/pyret/test-compile-helper.arr +0 -174
  2726. package/tests/pyret/test-parse-helper.arr +0 -50
  2727. package/tests/pyret/tests/csvs/animals-ds-2024.csv +0 -33
  2728. package/tests/pyret/tests/data1.arr +0 -4
  2729. package/tests/pyret/tests/data2.arr +0 -4
  2730. package/tests/pyret/tests/defines-vars.arr +0 -11
  2731. package/tests/pyret/tests/exporter.arr +0 -14
  2732. package/tests/pyret/tests/modules/alias-x.arr +0 -2
  2733. package/tests/pyret/tests/modules/aliased-name-re-provided.arr +0 -6
  2734. package/tests/pyret/tests/modules/aliased-names-same-type.arr +0 -10
  2735. package/tests/pyret/tests/modules/double-rename.arr +0 -12
  2736. package/tests/pyret/tests/modules/import-data.arr +0 -15
  2737. package/tests/pyret/tests/modules/import-datatype-as-type-alias.arr +0 -6
  2738. package/tests/pyret/tests/modules/import-re-provided.arr +0 -35
  2739. package/tests/pyret/tests/modules/include-shadow-same.arr +0 -8
  2740. package/tests/pyret/tests/modules/provide-arrow-using-datatype.arr +0 -9
  2741. package/tests/pyret/tests/modules/provide-as-simple.arr +0 -2
  2742. package/tests/pyret/tests/modules/provide-data-star.arr +0 -14
  2743. package/tests/pyret/tests/modules/provide-data-with-provide-star.arr +0 -9
  2744. package/tests/pyret/tests/modules/provide-data.arr +0 -8
  2745. package/tests/pyret/tests/modules/provide-datatype-as-type-alias.arr +0 -6
  2746. package/tests/pyret/tests/modules/provide-provide-x.arr +0 -2
  2747. package/tests/pyret/tests/modules/provide-type-as-simple.arr +0 -3
  2748. package/tests/pyret/tests/modules/provide-x.arr +0 -5
  2749. package/tests/pyret/tests/modules/re-provide-data.arr +0 -5
  2750. package/tests/pyret/tests/modules/re-re-provide-data.arr +0 -5
  2751. package/tests/pyret/tests/modules/test-aliased-names-same-type.arr +0 -17
  2752. package/tests/pyret/tests/modules/test-double-rename.arr +0 -26
  2753. package/tests/pyret/tests/modules/test-import-arrow-using-datatype.arr +0 -6
  2754. package/tests/pyret/tests/modules/test-import-data-from-data-star.arr +0 -54
  2755. package/tests/pyret/tests/modules/test-import-re-provided-data.arr +0 -16
  2756. package/tests/pyret/tests/modules/test-import-re-re-provide-data.arr +0 -16
  2757. package/tests/pyret/tests/modules/test-provide-as-simple.arr +0 -5
  2758. package/tests/pyret/tests/modules/test-provide-data-with-provide-star.arr +0 -14
  2759. package/tests/pyret/tests/modules/test-provide-type-as-simple.arr +0 -10
  2760. package/tests/pyret/tests/provide-modules.arr +0 -18
  2761. package/tests/pyret/tests/provider.arr +0 -8
  2762. package/tests/pyret/tests/test-adaptive-simpson.arr +0 -81
  2763. package/tests/pyret/tests/test-array.arr +0 -413
  2764. package/tests/pyret/tests/test-bar-chart.arr +0 -141
  2765. package/tests/pyret/tests/test-binops.arr +0 -44
  2766. package/tests/pyret/tests/test-builtin-locator.arr +0 -96
  2767. package/tests/pyret/tests/test-cases.arr +0 -24
  2768. package/tests/pyret/tests/test-compile-errors.arr +0 -132
  2769. package/tests/pyret/tests/test-compile-lib.arr +0 -491
  2770. package/tests/pyret/tests/test-constants-scope.arr +0 -8
  2771. package/tests/pyret/tests/test-constants.arr +0 -5
  2772. package/tests/pyret/tests/test-constructors.arr +0 -141
  2773. package/tests/pyret/tests/test-contracts.arr +0 -461
  2774. package/tests/pyret/tests/test-csv-table.arr +0 -131
  2775. package/tests/pyret/tests/test-dup-names.arr +0 -7
  2776. package/tests/pyret/tests/test-each-loop.arr +0 -20
  2777. package/tests/pyret/tests/test-each-loop.js +0 -27
  2778. package/tests/pyret/tests/test-equality.arr +0 -364
  2779. package/tests/pyret/tests/test-error-rendering.arr +0 -75
  2780. package/tests/pyret/tests/test-errors.arr +0 -373
  2781. package/tests/pyret/tests/test-examples.arr +0 -5
  2782. package/tests/pyret/tests/test-file-locators.arr +0 -114
  2783. package/tests/pyret/tests/test-file.arr +0 -17
  2784. package/tests/pyret/tests/test-filesystem.arr +0 -54
  2785. package/tests/pyret/tests/test-flatness.arr +0 -257
  2786. package/tests/pyret/tests/test-format.arr +0 -5
  2787. package/tests/pyret/tests/test-images.arr +0 -250
  2788. package/tests/pyret/tests/test-import-variable.arr +0 -31
  2789. package/tests/pyret/tests/test-import.arr +0 -21
  2790. package/tests/pyret/tests/test-include-block.arr +0 -27
  2791. package/tests/pyret/tests/test-include.arr +0 -219
  2792. package/tests/pyret/tests/test-json.arr +0 -91
  2793. package/tests/pyret/tests/test-letrec.arr +0 -50
  2794. package/tests/pyret/tests/test-lists.arr +0 -328
  2795. package/tests/pyret/tests/test-match.arr +0 -32
  2796. package/tests/pyret/tests/test-math.arr +0 -40
  2797. package/tests/pyret/tests/test-matrices.arr +0 -755
  2798. package/tests/pyret/tests/test-matrices2.arr +0 -865
  2799. package/tests/pyret/tests/test-module-syntax.arr +0 -18
  2800. package/tests/pyret/tests/test-modules.arr +0 -483
  2801. package/tests/pyret/tests/test-npm-import.arr +0 -9
  2802. package/tests/pyret/tests/test-numbers.arr +0 -345
  2803. package/tests/pyret/tests/test-output.arr +0 -112
  2804. package/tests/pyret/tests/test-parse-errors.arr +0 -139
  2805. package/tests/pyret/tests/test-parse.arr +0 -607
  2806. package/tests/pyret/tests/test-path.arr +0 -18
  2807. package/tests/pyret/tests/test-pprint.arr +0 -64
  2808. package/tests/pyret/tests/test-reactor.arr +0 -99
  2809. package/tests/pyret/tests/test-rec.arr +0 -81
  2810. package/tests/pyret/tests/test-record-concat.arr +0 -44
  2811. package/tests/pyret/tests/test-refined-refs.arr +0 -42
  2812. package/tests/pyret/tests/test-refs.arr +0 -101
  2813. package/tests/pyret/tests/test-repl.arr +0 -426
  2814. package/tests/pyret/tests/test-roughnum.arr +0 -181
  2815. package/tests/pyret/tests/test-rounding.arr +0 -281
  2816. package/tests/pyret/tests/test-s-exp.arr +0 -182
  2817. package/tests/pyret/tests/test-sets.arr +0 -171
  2818. package/tests/pyret/tests/test-statistics.arr +0 -172
  2819. package/tests/pyret/tests/test-str-dict.arr +0 -696
  2820. package/tests/pyret/tests/test-string-dict.arr +0 -266
  2821. package/tests/pyret/tests/test-strings.arr +0 -220
  2822. package/tests/pyret/tests/test-tables.arr +0 -787
  2823. package/tests/pyret/tests/test-tail-call.arr +0 -153
  2824. package/tests/pyret/tests/test-timing.arr +0 -27
  2825. package/tests/pyret/tests/test-tuple.arr +0 -239
  2826. package/tests/pyret/tests/test-well-formed.arr +0 -491
  2827. package/tests/pyret/tests/test-within.arr +0 -183
  2828. package/tests/pyret/tests/use/test-essentials.arr +0 -6
  2829. package/tests/pyret/tests/use/test-simple-use.arr +0 -6
  2830. package/tests/type-check/bad/_plus-missing.arr +0 -3
  2831. package/tests/type-check/bad/a-pred.arr +0 -9
  2832. package/tests/type-check/bad/ask.arr +0 -16
  2833. package/tests/type-check/bad/bad-make.arr +0 -8
  2834. package/tests/type-check/bad/bad-reactor.arr +0 -6
  2835. package/tests/type-check/bad/bad-tuple-access.arr +0 -1
  2836. package/tests/type-check/bad/bad-type-instantiation.arr +0 -10
  2837. package/tests/type-check/bad/cases-on-number.arr +0 -5
  2838. package/tests/type-check/bad/cases-singleton-1.arr +0 -9
  2839. package/tests/type-check/bad/cases-singleton-2.arr +0 -9
  2840. package/tests/type-check/bad/data-extra-bindings.arr +0 -11
  2841. package/tests/type-check/bad/data-is-object.arr +0 -10
  2842. package/tests/type-check/bad/data-missing-branch.arr +0 -10
  2843. package/tests/type-check/bad/data-unify-methods.arr +0 -19
  2844. package/tests/type-check/bad/data-unncessary-constructor.arr +0 -12
  2845. package/tests/type-check/bad/data-unncessary-else.arr +0 -12
  2846. package/tests/type-check/bad/dot-doesnt-deref-check.arr +0 -7
  2847. package/tests/type-check/bad/dot-doesnt-deref-synth.arr +0 -8
  2848. package/tests/type-check/bad/error-in-array.arr +0 -11
  2849. package/tests/type-check/bad/forall-lub.arr +0 -12
  2850. package/tests/type-check/bad/fun.arr +0 -7
  2851. package/tests/type-check/bad/function-number-not-tuple.arr +0 -5
  2852. package/tests/type-check/bad/function-tuple-any-to-bool.arr +0 -3
  2853. package/tests/type-check/bad/function-tuple-not-function.arr +0 -5
  2854. package/tests/type-check/bad/function-tuple-string-to-bool.arr +0 -3
  2855. package/tests/type-check/bad/import-refined-data1.arr +0 -4
  2856. package/tests/type-check/bad/import-refined-data2.arr +0 -4
  2857. package/tests/type-check/bad/lambda-instantiate.arr +0 -19
  2858. package/tests/type-check/bad/let.arr +0 -2
  2859. package/tests/type-check/bad/letrec.arr +0 -2
  2860. package/tests/type-check/bad/lib/provide-data.arr +0 -10
  2861. package/tests/type-check/bad/list-of-options-conflict-2.arr +0 -12
  2862. package/tests/type-check/bad/list-of-options-conflict.arr +0 -12
  2863. package/tests/type-check/bad/list.arr +0 -17
  2864. package/tests/type-check/bad/local-function.arr +0 -10
  2865. package/tests/type-check/bad/local-import.arr +0 -5
  2866. package/tests/type-check/bad/magic-plus-1.arr +0 -1
  2867. package/tests/type-check/bad/magic-plus-2.arr +0 -1
  2868. package/tests/type-check/bad/maker-for-non-object.arr +0 -2
  2869. package/tests/type-check/bad/multiple-errors.arr +0 -5
  2870. package/tests/type-check/bad/mutual-rec.arr +0 -10
  2871. package/tests/type-check/bad/newtype.arr +0 -5
  2872. package/tests/type-check/bad/no-maker.arr +0 -4
  2873. package/tests/type-check/bad/number-is-not-tuple.arr +0 -1
  2874. package/tests/type-check/bad/obj-check.arr +0 -4
  2875. package/tests/type-check/bad/obj-glb.arr +0 -12
  2876. package/tests/type-check/bad/obj-infer.arr +0 -4
  2877. package/tests/type-check/bad/obj-lub.arr +0 -8
  2878. package/tests/type-check/bad/obj-update-incorrect-type.arr +0 -7
  2879. package/tests/type-check/bad/obj-update-non-ref.arr +0 -7
  2880. package/tests/type-check/bad/plus-in-fun.arr +0 -7
  2881. package/tests/type-check/bad/raw-array.arr +0 -8
  2882. package/tests/type-check/bad/ref-fail.arr +0 -6
  2883. package/tests/type-check/bad/ref-not-ref.arr +0 -6
  2884. package/tests/type-check/bad/str-dict.arr +0 -9
  2885. package/tests/type-check/bad/str-dict2.arr +0 -4
  2886. package/tests/type-check/bad/test-inference.arr +0 -12
  2887. package/tests/type-check/bad/test-is.arr +0 -5
  2888. package/tests/type-check/bad/test-raises.arr +0 -5
  2889. package/tests/type-check/bad/test-refinement.arr +0 -5
  2890. package/tests/type-check/bad/too-few-args.arr +0 -6
  2891. package/tests/type-check/bad/too-many-args.arr +0 -6
  2892. package/tests/type-check/bad/tuple-is-not-booleans.arr +0 -1
  2893. package/tests/type-check/bad/tuple-is-not-num.arr +0 -2
  2894. package/tests/type-check/bad/tuple-length-binding.arr +0 -4
  2895. package/tests/type-check/bad/tuple-wrong-types.arr +0 -5
  2896. package/tests/type-check/good/_plus.arr +0 -54
  2897. package/tests/type-check/good/a-pred.arr +0 -8
  2898. package/tests/type-check/good/ann-in-case-branch.arr +0 -9
  2899. package/tests/type-check/good/basic-check.arr +0 -9
  2900. package/tests/type-check/good/blank-arg.arr +0 -5
  2901. package/tests/type-check/good/closure.arr +0 -15
  2902. package/tests/type-check/good/d-dx.arr +0 -16
  2903. package/tests/type-check/good/data-basic-infer.arr +0 -16
  2904. package/tests/type-check/good/data-basic-only-else.arr +0 -13
  2905. package/tests/type-check/good/data-basic-uses-else.arr +0 -14
  2906. package/tests/type-check/good/data-basic.arr +0 -14
  2907. package/tests/type-check/good/data-common-field.arr +0 -8
  2908. package/tests/type-check/good/data-constructorAsFun-infer.arr +0 -29
  2909. package/tests/type-check/good/data-constructorAsFun-instantiate.arr +0 -31
  2910. package/tests/type-check/good/data-constructorAsSingleton-infer.arr +0 -29
  2911. package/tests/type-check/good/data-constructorAsSingleton-instantiate.arr +0 -31
  2912. package/tests/type-check/good/data-covariant.arr +0 -14
  2913. package/tests/type-check/good/data-higherOrder-infer.arr +0 -25
  2914. package/tests/type-check/good/data-higherOrder-instantiate.arr +0 -25
  2915. package/tests/type-check/good/data-methods.arr +0 -40
  2916. package/tests/type-check/good/data-polymorphic-infer.arr +0 -9
  2917. package/tests/type-check/good/data-polymorphic-instantiate.arr +0 -14
  2918. package/tests/type-check/good/data-polymorphic-recursive-infer.arr +0 -16
  2919. package/tests/type-check/good/data-polymorphic-recursive-instantiate.arr +0 -16
  2920. package/tests/type-check/good/data-polymorphic-ref.arr +0 -6
  2921. package/tests/type-check/good/data-recursive.arr +0 -11
  2922. package/tests/type-check/good/data-sharing-non-method.arr +0 -8
  2923. package/tests/type-check/good/data-unify-methods.arr +0 -0
  2924. package/tests/type-check/good/double-rename.arr +0 -12
  2925. package/tests/type-check/good/empty-data-definition.arr +0 -2
  2926. package/tests/type-check/good/equality.arr +0 -4
  2927. package/tests/type-check/good/export.arr +0 -39
  2928. package/tests/type-check/good/fact.arr +0 -13
  2929. package/tests/type-check/good/forall-lub.arr +0 -12
  2930. package/tests/type-check/good/fun.arr +0 -7
  2931. package/tests/type-check/good/function-tuple-bool-to-any.arr +0 -3
  2932. package/tests/type-check/good/good-reactor.arr +0 -19
  2933. package/tests/type-check/good/id.arr +0 -10
  2934. package/tests/type-check/good/if.arr +0 -7
  2935. package/tests/type-check/good/import-refined-data.arr +0 -5
  2936. package/tests/type-check/good/imports.arr +0 -40
  2937. package/tests/type-check/good/int-list-map.arr +0 -16
  2938. package/tests/type-check/good/lam-forall-check.arr +0 -6
  2939. package/tests/type-check/good/lam.arr +0 -7
  2940. package/tests/type-check/good/lazy-lists.arr +0 -55
  2941. package/tests/type-check/good/lazy-maker.arr +0 -7
  2942. package/tests/type-check/good/let.arr +0 -8
  2943. package/tests/type-check/good/letrec.arr +0 -3
  2944. package/tests/type-check/good/list-of-options.arr +0 -12
  2945. package/tests/type-check/good/list.arr +0 -17
  2946. package/tests/type-check/good/local-import.arr +0 -11
  2947. package/tests/type-check/good/magic-plus.arr +0 -58
  2948. package/tests/type-check/good/map.arr +0 -21
  2949. package/tests/type-check/good/module-alias.arr +0 -9
  2950. package/tests/type-check/good/numbers.arr +0 -55
  2951. package/tests/type-check/good/obj-check.arr +0 -5
  2952. package/tests/type-check/good/obj-fun-check.arr +0 -12
  2953. package/tests/type-check/good/obj-infer.arr +0 -4
  2954. package/tests/type-check/good/obj-lub.arr +0 -8
  2955. package/tests/type-check/good/obj-methods.arr +0 -20
  2956. package/tests/type-check/good/occurrence-typing.arr +0 -27
  2957. package/tests/type-check/good/option-and-then.arr +0 -1
  2958. package/tests/type-check/good/option.arr +0 -7
  2959. package/tests/type-check/good/polymorphic-data-field-access.arr +0 -7
  2960. package/tests/type-check/good/polymorphic-newtype.arr +0 -21
  2961. package/tests/type-check/good/polymorphic-type-alias-application.arr +0 -5
  2962. package/tests/type-check/good/polymorphic-type-alias-chain.arr +0 -7
  2963. package/tests/type-check/good/polymorphic-type-alias-transitive-application.arr +0 -6
  2964. package/tests/type-check/good/provide-data.arr +0 -10
  2965. package/tests/type-check/good/raw-array.arr +0 -30
  2966. package/tests/type-check/good/ref-set.arr +0 -6
  2967. package/tests/type-check/good/references.arr +0 -22
  2968. package/tests/type-check/good/set-include.arr +0 -5
  2969. package/tests/type-check/good/sets.arr +0 -1
  2970. package/tests/type-check/good/shadowing-doesnt-change-type.arr +0 -7
  2971. package/tests/type-check/good/simple.arr +0 -2
  2972. package/tests/type-check/good/spy.arr +0 -56
  2973. package/tests/type-check/good/str-dict.arr +0 -9
  2974. package/tests/type-check/good/string-dict-keys-type.arr +0 -7
  2975. package/tests/type-check/good/string-dict.arr +0 -16
  2976. package/tests/type-check/good/string-to-number.arr +0 -9
  2977. package/tests/type-check/good/subtyping-and-bottom.arr +0 -33
  2978. package/tests/type-check/good/table.arr +0 -13
  2979. package/tests/type-check/good/test-double-rename.arr +0 -26
  2980. package/tests/type-check/good/test-inference.arr +0 -33
  2981. package/tests/type-check/good/tests-because.arr +0 -43
  2982. package/tests/type-check/good/tests.arr +0 -27
  2983. package/tests/type-check/good/tuple-matches-function-ann.arr +0 -5
  2984. package/tests/type-check/good/tuple-regression.arr +0 -148
  2985. package/tests/type-check/good/type-instantiation.arr +0 -11
  2986. package/tests/type-check/good/underscore.arr +0 -6
  2987. package/tests/type-check/good/unqualified-forall-data.arr +0 -6
  2988. package/tests/type-check/good/use-param.arr +0 -10
  2989. package/tests/type-check/good/where.arr +0 -6
  2990. package/tests/type-check/main.arr +0 -156
  2991. package/tests/type-check/should/dot-bottom.arr +0 -9
  2992. package/tests/type-check/should/image.arr +0 -5
  2993. package/tests/type-check/should/lambda-infer.arr +0 -9
  2994. package/tests/type-check/should/lambda-instantiate.arr +0 -19
  2995. package/tests/type-check/should/lambda-test-inference.arr +0 -11
  2996. package/tests/type-check/should/obj-glb.arr +0 -12
  2997. package/tests/type-check/should/underscore.arr +0 -9
  2998. package/tests/type-check/should-not/basic-check.arr +0 -4
  2999. package/tests/type-check/should-not/data-contravariant.arr +0 -45
  3000. package/tests/type-check/should-not/data-covariant.arr +0 -11
  3001. package/tests/type-check/should-not/data-invariant.arr +0 -14
  3002. package/tests/type-check/should-not/data-phantom.arr +0 -8
  3003. package/tests/type-check/should-not/methods-contested-extension.arr +0 -7
  3004. package/tests/type-check/should-not/obj-update.arr +0 -10
  3005. package/tools/benchmark/.jshintrc +0 -8
  3006. package/tools/benchmark/Makefile +0 -15
  3007. package/tools/benchmark/README.md +0 -61
  3008. package/tools/benchmark/auto-report-code.js +0 -58
  3009. package/tools/benchmark/auto-report-programs/0_empty.arr +0 -0
  3010. package/tools/benchmark/auto-report-programs/1_empty-with-comments.arr +0 -4767
  3011. package/tools/benchmark/auto-report-programs/adding-ones-2000.arr +0 -2
  3012. package/tools/benchmark/auto-report-programs/bignum-factorial-2000.arr +0 -7
  3013. package/tools/benchmark/auto-report-programs/inner-function-1000.arr +0 -15
  3014. package/tools/benchmark/auto-report-programs/join-str-naive.arr +0 -9
  3015. package/tools/benchmark/auto-report-programs/list-set-const-1000.arr +0 -5
  3016. package/tools/benchmark/auto-report-programs/list-set-grow-1000.arr +0 -5
  3017. package/tools/benchmark/auto-report-programs/many-links-100000.arr +0 -2
  3018. package/tools/benchmark/auto-report-programs/method-calls-10000.arr +0 -3
  3019. package/tools/benchmark/auto-report-programs/mutable-string-dict-const-10000.arr +0 -6
  3020. package/tools/benchmark/auto-report-programs/mutable-string-dict-grow-10000.arr +0 -6
  3021. package/tools/benchmark/auto-report-programs/recursion-no-tail-call.arr +0 -6
  3022. package/tools/benchmark/auto-report-programs/recursion-tail-call.arr +0 -9
  3023. package/tools/benchmark/auto-report-programs/recursion-triangle-20000.arr +0 -7
  3024. package/tools/benchmark/auto-report-programs/recursion-triangle-annotated-20000.arr +0 -7
  3025. package/tools/benchmark/auto-report-programs/recursive-calls-10000.arr +0 -3
  3026. package/tools/benchmark/auto-report-programs/string-allocation-10000.arr +0 -2
  3027. package/tools/benchmark/auto-report-programs/string-dict-const-10000.arr +0 -5
  3028. package/tools/benchmark/auto-report-programs/string-dict-grow-10000.arr +0 -5
  3029. package/tools/benchmark/auto-report-programs/tree-set-const-10000.arr +0 -5
  3030. package/tools/benchmark/auto-report-programs/tree-set-grow-10000.arr +0 -5
  3031. package/tools/benchmark/auto-report.csv +0 -2
  3032. package/tools/benchmark/auto-report.js +0 -12
  3033. package/tools/benchmark/benchmark-pyret.js +0 -436
  3034. package/tools/benchmark/examples-code.js +0 -43
  3035. package/tools/benchmark/examples.js +0 -11
  3036. package/tools/benchmark/measure-program-code.js +0 -26
  3037. package/tools/benchmark/measure-program.js +0 -11
  3038. package/tools/benchmark/tests/benchmark.js +0 -316
  3039. package/tools/benchmark/tests/require-test-runner/all-spec.js +0 -26
  3040. package/tools/benchmark/tests/test.js +0 -16
  3041. package/tools/benchmark/type-check-compare-code.js +0 -14
  3042. package/tools/benchmark/type-check-compare.js +0 -11
  3043. package/tools/emacs/pyret-debug-mode.el +0 -171
  3044. package/tools/emacs/pyret.el +0 -1901
  3045. package/tools/profiling/.jshintrc +0 -8
  3046. package/tools/profiling/Makefile +0 -51
  3047. package/tools/profiling/README.md +0 -74
  3048. package/tools/profiling/analyze-callgrind.js +0 -295
  3049. package/tools/profiling/auto-report-jobs.txt +0 -5
  3050. package/tools/profiling/auto-report.sh +0 -4
  3051. package/tools/profiling/config.js +0 -11
  3052. package/tools/profiling/fix-times.js +0 -26
  3053. package/tools/profiling/profiling-run.js +0 -41
  3054. package/tools/profiling/profiling.js +0 -21
  3055. package/tools/scroll.arr +0 -97
  3056. package/tools/sublime/pyret.YAML-tmLanguage +0 -88
  3057. package/tools/sublime/pyret.tmLanguage +0 -169
  3058. package/tools/sublime/readme.md +0 -21
  3059. package/tools/vim/README.md +0 -15
  3060. package/tools/vim/indent/pyret.vim +0 -123
  3061. package/tools/vim/syntax/pyret.vim +0 -61
@@ -1,3091 +0,0 @@
1
- (function webpackUniversalModuleDefinition(root, factory) {
2
- if(typeof exports === 'object' && typeof module === 'object')
3
- module.exports = factory();
4
- else if(typeof define === 'function' && define.amd)
5
- define([], factory);
6
- else if(typeof exports === 'object')
7
- exports["sourceMap"] = factory();
8
- else
9
- root["sourceMap"] = factory();
10
- })(this, function() {
11
- return /******/ (function(modules) { // webpackBootstrap
12
- /******/ // The module cache
13
- /******/ var installedModules = {};
14
- /******/
15
- /******/ // The require function
16
- /******/ function __webpack_require__(moduleId) {
17
- /******/
18
- /******/ // Check if module is in cache
19
- /******/ if(installedModules[moduleId])
20
- /******/ return installedModules[moduleId].exports;
21
- /******/
22
- /******/ // Create a new module (and put it into the cache)
23
- /******/ var module = installedModules[moduleId] = {
24
- /******/ exports: {},
25
- /******/ id: moduleId,
26
- /******/ loaded: false
27
- /******/ };
28
- /******/
29
- /******/ // Execute the module function
30
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
- /******/
32
- /******/ // Flag the module as loaded
33
- /******/ module.loaded = true;
34
- /******/
35
- /******/ // Return the exports of the module
36
- /******/ return module.exports;
37
- /******/ }
38
- /******/
39
- /******/
40
- /******/ // expose the modules object (__webpack_modules__)
41
- /******/ __webpack_require__.m = modules;
42
- /******/
43
- /******/ // expose the module cache
44
- /******/ __webpack_require__.c = installedModules;
45
- /******/
46
- /******/ // __webpack_public_path__
47
- /******/ __webpack_require__.p = "";
48
- /******/
49
- /******/ // Load entry module and return exports
50
- /******/ return __webpack_require__(0);
51
- /******/ })
52
- /************************************************************************/
53
- /******/ ([
54
- /* 0 */
55
- /***/ (function(module, exports, __webpack_require__) {
56
-
57
- /*
58
- * Copyright 2009-2011 Mozilla Foundation and contributors
59
- * Licensed under the New BSD license. See LICENSE.txt or:
60
- * http://opensource.org/licenses/BSD-3-Clause
61
- */
62
- exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
63
- exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;
64
- exports.SourceNode = __webpack_require__(10).SourceNode;
65
-
66
-
67
- /***/ }),
68
- /* 1 */
69
- /***/ (function(module, exports, __webpack_require__) {
70
-
71
- /* -*- Mode: js; js-indent-level: 2; -*- */
72
- /*
73
- * Copyright 2011 Mozilla Foundation and contributors
74
- * Licensed under the New BSD license. See LICENSE or:
75
- * http://opensource.org/licenses/BSD-3-Clause
76
- */
77
-
78
- var base64VLQ = __webpack_require__(2);
79
- var util = __webpack_require__(4);
80
- var ArraySet = __webpack_require__(5).ArraySet;
81
- var MappingList = __webpack_require__(6).MappingList;
82
-
83
- /**
84
- * An instance of the SourceMapGenerator represents a source map which is
85
- * being built incrementally. You may pass an object with the following
86
- * properties:
87
- *
88
- * - file: The filename of the generated source.
89
- * - sourceRoot: A root for all relative URLs in this source map.
90
- */
91
- function SourceMapGenerator(aArgs) {
92
- if (!aArgs) {
93
- aArgs = {};
94
- }
95
- this._file = util.getArg(aArgs, 'file', null);
96
- this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
97
- this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
98
- this._sources = new ArraySet();
99
- this._names = new ArraySet();
100
- this._mappings = new MappingList();
101
- this._sourcesContents = null;
102
- }
103
-
104
- SourceMapGenerator.prototype._version = 3;
105
-
106
- /**
107
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
108
- *
109
- * @param aSourceMapConsumer The SourceMap.
110
- */
111
- SourceMapGenerator.fromSourceMap =
112
- function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
113
- var sourceRoot = aSourceMapConsumer.sourceRoot;
114
- var generator = new SourceMapGenerator({
115
- file: aSourceMapConsumer.file,
116
- sourceRoot: sourceRoot
117
- });
118
- aSourceMapConsumer.eachMapping(function (mapping) {
119
- var newMapping = {
120
- generated: {
121
- line: mapping.generatedLine,
122
- column: mapping.generatedColumn
123
- }
124
- };
125
-
126
- if (mapping.source != null) {
127
- newMapping.source = mapping.source;
128
- if (sourceRoot != null) {
129
- newMapping.source = util.relative(sourceRoot, newMapping.source);
130
- }
131
-
132
- newMapping.original = {
133
- line: mapping.originalLine,
134
- column: mapping.originalColumn
135
- };
136
-
137
- if (mapping.name != null) {
138
- newMapping.name = mapping.name;
139
- }
140
- }
141
-
142
- generator.addMapping(newMapping);
143
- });
144
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
145
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
146
- if (content != null) {
147
- generator.setSourceContent(sourceFile, content);
148
- }
149
- });
150
- return generator;
151
- };
152
-
153
- /**
154
- * Add a single mapping from original source line and column to the generated
155
- * source's line and column for this source map being created. The mapping
156
- * object should have the following properties:
157
- *
158
- * - generated: An object with the generated line and column positions.
159
- * - original: An object with the original line and column positions.
160
- * - source: The original source file (relative to the sourceRoot).
161
- * - name: An optional original token name for this mapping.
162
- */
163
- SourceMapGenerator.prototype.addMapping =
164
- function SourceMapGenerator_addMapping(aArgs) {
165
- var generated = util.getArg(aArgs, 'generated');
166
- var original = util.getArg(aArgs, 'original', null);
167
- var source = util.getArg(aArgs, 'source', null);
168
- var name = util.getArg(aArgs, 'name', null);
169
-
170
- if (!this._skipValidation) {
171
- this._validateMapping(generated, original, source, name);
172
- }
173
-
174
- if (source != null) {
175
- source = String(source);
176
- if (!this._sources.has(source)) {
177
- this._sources.add(source);
178
- }
179
- }
180
-
181
- if (name != null) {
182
- name = String(name);
183
- if (!this._names.has(name)) {
184
- this._names.add(name);
185
- }
186
- }
187
-
188
- this._mappings.add({
189
- generatedLine: generated.line,
190
- generatedColumn: generated.column,
191
- originalLine: original != null && original.line,
192
- originalColumn: original != null && original.column,
193
- source: source,
194
- name: name
195
- });
196
- };
197
-
198
- /**
199
- * Set the source content for a source file.
200
- */
201
- SourceMapGenerator.prototype.setSourceContent =
202
- function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
203
- var source = aSourceFile;
204
- if (this._sourceRoot != null) {
205
- source = util.relative(this._sourceRoot, source);
206
- }
207
-
208
- if (aSourceContent != null) {
209
- // Add the source content to the _sourcesContents map.
210
- // Create a new _sourcesContents map if the property is null.
211
- if (!this._sourcesContents) {
212
- this._sourcesContents = Object.create(null);
213
- }
214
- this._sourcesContents[util.toSetString(source)] = aSourceContent;
215
- } else if (this._sourcesContents) {
216
- // Remove the source file from the _sourcesContents map.
217
- // If the _sourcesContents map is empty, set the property to null.
218
- delete this._sourcesContents[util.toSetString(source)];
219
- if (Object.keys(this._sourcesContents).length === 0) {
220
- this._sourcesContents = null;
221
- }
222
- }
223
- };
224
-
225
- /**
226
- * Applies the mappings of a sub-source-map for a specific source file to the
227
- * source map being generated. Each mapping to the supplied source file is
228
- * rewritten using the supplied source map. Note: The resolution for the
229
- * resulting mappings is the minimium of this map and the supplied map.
230
- *
231
- * @param aSourceMapConsumer The source map to be applied.
232
- * @param aSourceFile Optional. The filename of the source file.
233
- * If omitted, SourceMapConsumer's file property will be used.
234
- * @param aSourceMapPath Optional. The dirname of the path to the source map
235
- * to be applied. If relative, it is relative to the SourceMapConsumer.
236
- * This parameter is needed when the two source maps aren't in the same
237
- * directory, and the source map to be applied contains relative source
238
- * paths. If so, those relative source paths need to be rewritten
239
- * relative to the SourceMapGenerator.
240
- */
241
- SourceMapGenerator.prototype.applySourceMap =
242
- function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
243
- var sourceFile = aSourceFile;
244
- // If aSourceFile is omitted, we will use the file property of the SourceMap
245
- if (aSourceFile == null) {
246
- if (aSourceMapConsumer.file == null) {
247
- throw new Error(
248
- 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
249
- 'or the source map\'s "file" property. Both were omitted.'
250
- );
251
- }
252
- sourceFile = aSourceMapConsumer.file;
253
- }
254
- var sourceRoot = this._sourceRoot;
255
- // Make "sourceFile" relative if an absolute Url is passed.
256
- if (sourceRoot != null) {
257
- sourceFile = util.relative(sourceRoot, sourceFile);
258
- }
259
- // Applying the SourceMap can add and remove items from the sources and
260
- // the names array.
261
- var newSources = new ArraySet();
262
- var newNames = new ArraySet();
263
-
264
- // Find mappings for the "sourceFile"
265
- this._mappings.unsortedForEach(function (mapping) {
266
- if (mapping.source === sourceFile && mapping.originalLine != null) {
267
- // Check if it can be mapped by the source map, then update the mapping.
268
- var original = aSourceMapConsumer.originalPositionFor({
269
- line: mapping.originalLine,
270
- column: mapping.originalColumn
271
- });
272
- if (original.source != null) {
273
- // Copy mapping
274
- mapping.source = original.source;
275
- if (aSourceMapPath != null) {
276
- mapping.source = util.join(aSourceMapPath, mapping.source)
277
- }
278
- if (sourceRoot != null) {
279
- mapping.source = util.relative(sourceRoot, mapping.source);
280
- }
281
- mapping.originalLine = original.line;
282
- mapping.originalColumn = original.column;
283
- if (original.name != null) {
284
- mapping.name = original.name;
285
- }
286
- }
287
- }
288
-
289
- var source = mapping.source;
290
- if (source != null && !newSources.has(source)) {
291
- newSources.add(source);
292
- }
293
-
294
- var name = mapping.name;
295
- if (name != null && !newNames.has(name)) {
296
- newNames.add(name);
297
- }
298
-
299
- }, this);
300
- this._sources = newSources;
301
- this._names = newNames;
302
-
303
- // Copy sourcesContents of applied map.
304
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
305
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
306
- if (content != null) {
307
- if (aSourceMapPath != null) {
308
- sourceFile = util.join(aSourceMapPath, sourceFile);
309
- }
310
- if (sourceRoot != null) {
311
- sourceFile = util.relative(sourceRoot, sourceFile);
312
- }
313
- this.setSourceContent(sourceFile, content);
314
- }
315
- }, this);
316
- };
317
-
318
- /**
319
- * A mapping can have one of the three levels of data:
320
- *
321
- * 1. Just the generated position.
322
- * 2. The Generated position, original position, and original source.
323
- * 3. Generated and original position, original source, as well as a name
324
- * token.
325
- *
326
- * To maintain consistency, we validate that any new mapping being added falls
327
- * in to one of these categories.
328
- */
329
- SourceMapGenerator.prototype._validateMapping =
330
- function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
331
- aName) {
332
- // When aOriginal is truthy but has empty values for .line and .column,
333
- // it is most likely a programmer error. In this case we throw a very
334
- // specific error message to try to guide them the right way.
335
- // For example: https://github.com/Polymer/polymer-bundler/pull/519
336
- if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
337
- throw new Error(
338
- 'original.line and original.column are not numbers -- you probably meant to omit ' +
339
- 'the original mapping entirely and only map the generated position. If so, pass ' +
340
- 'null for the original mapping instead of an object with empty or null values.'
341
- );
342
- }
343
-
344
- if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
345
- && aGenerated.line > 0 && aGenerated.column >= 0
346
- && !aOriginal && !aSource && !aName) {
347
- // Case 1.
348
- return;
349
- }
350
- else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
351
- && aOriginal && 'line' in aOriginal && 'column' in aOriginal
352
- && aGenerated.line > 0 && aGenerated.column >= 0
353
- && aOriginal.line > 0 && aOriginal.column >= 0
354
- && aSource) {
355
- // Cases 2 and 3.
356
- return;
357
- }
358
- else {
359
- throw new Error('Invalid mapping: ' + JSON.stringify({
360
- generated: aGenerated,
361
- source: aSource,
362
- original: aOriginal,
363
- name: aName
364
- }));
365
- }
366
- };
367
-
368
- /**
369
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
370
- * specified by the source map format.
371
- */
372
- SourceMapGenerator.prototype._serializeMappings =
373
- function SourceMapGenerator_serializeMappings() {
374
- var previousGeneratedColumn = 0;
375
- var previousGeneratedLine = 1;
376
- var previousOriginalColumn = 0;
377
- var previousOriginalLine = 0;
378
- var previousName = 0;
379
- var previousSource = 0;
380
- var result = '';
381
- var next;
382
- var mapping;
383
- var nameIdx;
384
- var sourceIdx;
385
-
386
- var mappings = this._mappings.toArray();
387
- for (var i = 0, len = mappings.length; i < len; i++) {
388
- mapping = mappings[i];
389
- next = ''
390
-
391
- if (mapping.generatedLine !== previousGeneratedLine) {
392
- previousGeneratedColumn = 0;
393
- while (mapping.generatedLine !== previousGeneratedLine) {
394
- next += ';';
395
- previousGeneratedLine++;
396
- }
397
- }
398
- else {
399
- if (i > 0) {
400
- if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
401
- continue;
402
- }
403
- next += ',';
404
- }
405
- }
406
-
407
- next += base64VLQ.encode(mapping.generatedColumn
408
- - previousGeneratedColumn);
409
- previousGeneratedColumn = mapping.generatedColumn;
410
-
411
- if (mapping.source != null) {
412
- sourceIdx = this._sources.indexOf(mapping.source);
413
- next += base64VLQ.encode(sourceIdx - previousSource);
414
- previousSource = sourceIdx;
415
-
416
- // lines are stored 0-based in SourceMap spec version 3
417
- next += base64VLQ.encode(mapping.originalLine - 1
418
- - previousOriginalLine);
419
- previousOriginalLine = mapping.originalLine - 1;
420
-
421
- next += base64VLQ.encode(mapping.originalColumn
422
- - previousOriginalColumn);
423
- previousOriginalColumn = mapping.originalColumn;
424
-
425
- if (mapping.name != null) {
426
- nameIdx = this._names.indexOf(mapping.name);
427
- next += base64VLQ.encode(nameIdx - previousName);
428
- previousName = nameIdx;
429
- }
430
- }
431
-
432
- result += next;
433
- }
434
-
435
- return result;
436
- };
437
-
438
- SourceMapGenerator.prototype._generateSourcesContent =
439
- function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
440
- return aSources.map(function (source) {
441
- if (!this._sourcesContents) {
442
- return null;
443
- }
444
- if (aSourceRoot != null) {
445
- source = util.relative(aSourceRoot, source);
446
- }
447
- var key = util.toSetString(source);
448
- return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
449
- ? this._sourcesContents[key]
450
- : null;
451
- }, this);
452
- };
453
-
454
- /**
455
- * Externalize the source map.
456
- */
457
- SourceMapGenerator.prototype.toJSON =
458
- function SourceMapGenerator_toJSON() {
459
- var map = {
460
- version: this._version,
461
- sources: this._sources.toArray(),
462
- names: this._names.toArray(),
463
- mappings: this._serializeMappings()
464
- };
465
- if (this._file != null) {
466
- map.file = this._file;
467
- }
468
- if (this._sourceRoot != null) {
469
- map.sourceRoot = this._sourceRoot;
470
- }
471
- if (this._sourcesContents) {
472
- map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
473
- }
474
-
475
- return map;
476
- };
477
-
478
- /**
479
- * Render the source map being generated to a string.
480
- */
481
- SourceMapGenerator.prototype.toString =
482
- function SourceMapGenerator_toString() {
483
- return JSON.stringify(this.toJSON());
484
- };
485
-
486
- exports.SourceMapGenerator = SourceMapGenerator;
487
-
488
-
489
- /***/ }),
490
- /* 2 */
491
- /***/ (function(module, exports, __webpack_require__) {
492
-
493
- /* -*- Mode: js; js-indent-level: 2; -*- */
494
- /*
495
- * Copyright 2011 Mozilla Foundation and contributors
496
- * Licensed under the New BSD license. See LICENSE or:
497
- * http://opensource.org/licenses/BSD-3-Clause
498
- *
499
- * Based on the Base 64 VLQ implementation in Closure Compiler:
500
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
501
- *
502
- * Copyright 2011 The Closure Compiler Authors. All rights reserved.
503
- * Redistribution and use in source and binary forms, with or without
504
- * modification, are permitted provided that the following conditions are
505
- * met:
506
- *
507
- * * Redistributions of source code must retain the above copyright
508
- * notice, this list of conditions and the following disclaimer.
509
- * * Redistributions in binary form must reproduce the above
510
- * copyright notice, this list of conditions and the following
511
- * disclaimer in the documentation and/or other materials provided
512
- * with the distribution.
513
- * * Neither the name of Google Inc. nor the names of its
514
- * contributors may be used to endorse or promote products derived
515
- * from this software without specific prior written permission.
516
- *
517
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
518
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
519
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
520
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
521
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
522
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
523
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
524
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
525
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
526
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
527
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
528
- */
529
-
530
- var base64 = __webpack_require__(3);
531
-
532
- // A single base 64 digit can contain 6 bits of data. For the base 64 variable
533
- // length quantities we use in the source map spec, the first bit is the sign,
534
- // the next four bits are the actual value, and the 6th bit is the
535
- // continuation bit. The continuation bit tells us whether there are more
536
- // digits in this value following this digit.
537
- //
538
- // Continuation
539
- // | Sign
540
- // | |
541
- // V V
542
- // 101011
543
-
544
- var VLQ_BASE_SHIFT = 5;
545
-
546
- // binary: 100000
547
- var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
548
-
549
- // binary: 011111
550
- var VLQ_BASE_MASK = VLQ_BASE - 1;
551
-
552
- // binary: 100000
553
- var VLQ_CONTINUATION_BIT = VLQ_BASE;
554
-
555
- /**
556
- * Converts from a two-complement value to a value where the sign bit is
557
- * placed in the least significant bit. For example, as decimals:
558
- * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
559
- * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
560
- */
561
- function toVLQSigned(aValue) {
562
- return aValue < 0
563
- ? ((-aValue) << 1) + 1
564
- : (aValue << 1) + 0;
565
- }
566
-
567
- /**
568
- * Converts to a two-complement value from a value where the sign bit is
569
- * placed in the least significant bit. For example, as decimals:
570
- * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
571
- * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
572
- */
573
- function fromVLQSigned(aValue) {
574
- var isNegative = (aValue & 1) === 1;
575
- var shifted = aValue >> 1;
576
- return isNegative
577
- ? -shifted
578
- : shifted;
579
- }
580
-
581
- /**
582
- * Returns the base 64 VLQ encoded value.
583
- */
584
- exports.encode = function base64VLQ_encode(aValue) {
585
- var encoded = "";
586
- var digit;
587
-
588
- var vlq = toVLQSigned(aValue);
589
-
590
- do {
591
- digit = vlq & VLQ_BASE_MASK;
592
- vlq >>>= VLQ_BASE_SHIFT;
593
- if (vlq > 0) {
594
- // There are still more digits in this value, so we must make sure the
595
- // continuation bit is marked.
596
- digit |= VLQ_CONTINUATION_BIT;
597
- }
598
- encoded += base64.encode(digit);
599
- } while (vlq > 0);
600
-
601
- return encoded;
602
- };
603
-
604
- /**
605
- * Decodes the next base 64 VLQ value from the given string and returns the
606
- * value and the rest of the string via the out parameter.
607
- */
608
- exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
609
- var strLen = aStr.length;
610
- var result = 0;
611
- var shift = 0;
612
- var continuation, digit;
613
-
614
- do {
615
- if (aIndex >= strLen) {
616
- throw new Error("Expected more digits in base 64 VLQ value.");
617
- }
618
-
619
- digit = base64.decode(aStr.charCodeAt(aIndex++));
620
- if (digit === -1) {
621
- throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
622
- }
623
-
624
- continuation = !!(digit & VLQ_CONTINUATION_BIT);
625
- digit &= VLQ_BASE_MASK;
626
- result = result + (digit << shift);
627
- shift += VLQ_BASE_SHIFT;
628
- } while (continuation);
629
-
630
- aOutParam.value = fromVLQSigned(result);
631
- aOutParam.rest = aIndex;
632
- };
633
-
634
-
635
- /***/ }),
636
- /* 3 */
637
- /***/ (function(module, exports) {
638
-
639
- /* -*- Mode: js; js-indent-level: 2; -*- */
640
- /*
641
- * Copyright 2011 Mozilla Foundation and contributors
642
- * Licensed under the New BSD license. See LICENSE or:
643
- * http://opensource.org/licenses/BSD-3-Clause
644
- */
645
-
646
- var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
647
-
648
- /**
649
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
650
- */
651
- exports.encode = function (number) {
652
- if (0 <= number && number < intToCharMap.length) {
653
- return intToCharMap[number];
654
- }
655
- throw new TypeError("Must be between 0 and 63: " + number);
656
- };
657
-
658
- /**
659
- * Decode a single base 64 character code digit to an integer. Returns -1 on
660
- * failure.
661
- */
662
- exports.decode = function (charCode) {
663
- var bigA = 65; // 'A'
664
- var bigZ = 90; // 'Z'
665
-
666
- var littleA = 97; // 'a'
667
- var littleZ = 122; // 'z'
668
-
669
- var zero = 48; // '0'
670
- var nine = 57; // '9'
671
-
672
- var plus = 43; // '+'
673
- var slash = 47; // '/'
674
-
675
- var littleOffset = 26;
676
- var numberOffset = 52;
677
-
678
- // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
679
- if (bigA <= charCode && charCode <= bigZ) {
680
- return (charCode - bigA);
681
- }
682
-
683
- // 26 - 51: abcdefghijklmnopqrstuvwxyz
684
- if (littleA <= charCode && charCode <= littleZ) {
685
- return (charCode - littleA + littleOffset);
686
- }
687
-
688
- // 52 - 61: 0123456789
689
- if (zero <= charCode && charCode <= nine) {
690
- return (charCode - zero + numberOffset);
691
- }
692
-
693
- // 62: +
694
- if (charCode == plus) {
695
- return 62;
696
- }
697
-
698
- // 63: /
699
- if (charCode == slash) {
700
- return 63;
701
- }
702
-
703
- // Invalid base64 digit.
704
- return -1;
705
- };
706
-
707
-
708
- /***/ }),
709
- /* 4 */
710
- /***/ (function(module, exports) {
711
-
712
- /* -*- Mode: js; js-indent-level: 2; -*- */
713
- /*
714
- * Copyright 2011 Mozilla Foundation and contributors
715
- * Licensed under the New BSD license. See LICENSE or:
716
- * http://opensource.org/licenses/BSD-3-Clause
717
- */
718
-
719
- /**
720
- * This is a helper function for getting values from parameter/options
721
- * objects.
722
- *
723
- * @param args The object we are extracting values from
724
- * @param name The name of the property we are getting.
725
- * @param defaultValue An optional value to return if the property is missing
726
- * from the object. If this is not specified and the property is missing, an
727
- * error will be thrown.
728
- */
729
- function getArg(aArgs, aName, aDefaultValue) {
730
- if (aName in aArgs) {
731
- return aArgs[aName];
732
- } else if (arguments.length === 3) {
733
- return aDefaultValue;
734
- } else {
735
- throw new Error('"' + aName + '" is a required argument.');
736
- }
737
- }
738
- exports.getArg = getArg;
739
-
740
- var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
741
- var dataUrlRegexp = /^data:.+\,.+$/;
742
-
743
- function urlParse(aUrl) {
744
- var match = aUrl.match(urlRegexp);
745
- if (!match) {
746
- return null;
747
- }
748
- return {
749
- scheme: match[1],
750
- auth: match[2],
751
- host: match[3],
752
- port: match[4],
753
- path: match[5]
754
- };
755
- }
756
- exports.urlParse = urlParse;
757
-
758
- function urlGenerate(aParsedUrl) {
759
- var url = '';
760
- if (aParsedUrl.scheme) {
761
- url += aParsedUrl.scheme + ':';
762
- }
763
- url += '//';
764
- if (aParsedUrl.auth) {
765
- url += aParsedUrl.auth + '@';
766
- }
767
- if (aParsedUrl.host) {
768
- url += aParsedUrl.host;
769
- }
770
- if (aParsedUrl.port) {
771
- url += ":" + aParsedUrl.port
772
- }
773
- if (aParsedUrl.path) {
774
- url += aParsedUrl.path;
775
- }
776
- return url;
777
- }
778
- exports.urlGenerate = urlGenerate;
779
-
780
- /**
781
- * Normalizes a path, or the path portion of a URL:
782
- *
783
- * - Replaces consecutive slashes with one slash.
784
- * - Removes unnecessary '.' parts.
785
- * - Removes unnecessary '<dir>/..' parts.
786
- *
787
- * Based on code in the Node.js 'path' core module.
788
- *
789
- * @param aPath The path or url to normalize.
790
- */
791
- function normalize(aPath) {
792
- var path = aPath;
793
- var url = urlParse(aPath);
794
- if (url) {
795
- if (!url.path) {
796
- return aPath;
797
- }
798
- path = url.path;
799
- }
800
- var isAbsolute = exports.isAbsolute(path);
801
-
802
- var parts = path.split(/\/+/);
803
- for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
804
- part = parts[i];
805
- if (part === '.') {
806
- parts.splice(i, 1);
807
- } else if (part === '..') {
808
- up++;
809
- } else if (up > 0) {
810
- if (part === '') {
811
- // The first part is blank if the path is absolute. Trying to go
812
- // above the root is a no-op. Therefore we can remove all '..' parts
813
- // directly after the root.
814
- parts.splice(i + 1, up);
815
- up = 0;
816
- } else {
817
- parts.splice(i, 2);
818
- up--;
819
- }
820
- }
821
- }
822
- path = parts.join('/');
823
-
824
- if (path === '') {
825
- path = isAbsolute ? '/' : '.';
826
- }
827
-
828
- if (url) {
829
- url.path = path;
830
- return urlGenerate(url);
831
- }
832
- return path;
833
- }
834
- exports.normalize = normalize;
835
-
836
- /**
837
- * Joins two paths/URLs.
838
- *
839
- * @param aRoot The root path or URL.
840
- * @param aPath The path or URL to be joined with the root.
841
- *
842
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
843
- * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
844
- * first.
845
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
846
- * is updated with the result and aRoot is returned. Otherwise the result
847
- * is returned.
848
- * - If aPath is absolute, the result is aPath.
849
- * - Otherwise the two paths are joined with a slash.
850
- * - Joining for example 'http://' and 'www.example.com' is also supported.
851
- */
852
- function join(aRoot, aPath) {
853
- if (aRoot === "") {
854
- aRoot = ".";
855
- }
856
- if (aPath === "") {
857
- aPath = ".";
858
- }
859
- var aPathUrl = urlParse(aPath);
860
- var aRootUrl = urlParse(aRoot);
861
- if (aRootUrl) {
862
- aRoot = aRootUrl.path || '/';
863
- }
864
-
865
- // `join(foo, '//www.example.org')`
866
- if (aPathUrl && !aPathUrl.scheme) {
867
- if (aRootUrl) {
868
- aPathUrl.scheme = aRootUrl.scheme;
869
- }
870
- return urlGenerate(aPathUrl);
871
- }
872
-
873
- if (aPathUrl || aPath.match(dataUrlRegexp)) {
874
- return aPath;
875
- }
876
-
877
- // `join('http://', 'www.example.com')`
878
- if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
879
- aRootUrl.host = aPath;
880
- return urlGenerate(aRootUrl);
881
- }
882
-
883
- var joined = aPath.charAt(0) === '/'
884
- ? aPath
885
- : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
886
-
887
- if (aRootUrl) {
888
- aRootUrl.path = joined;
889
- return urlGenerate(aRootUrl);
890
- }
891
- return joined;
892
- }
893
- exports.join = join;
894
-
895
- exports.isAbsolute = function (aPath) {
896
- return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);
897
- };
898
-
899
- /**
900
- * Make a path relative to a URL or another path.
901
- *
902
- * @param aRoot The root path or URL.
903
- * @param aPath The path or URL to be made relative to aRoot.
904
- */
905
- function relative(aRoot, aPath) {
906
- if (aRoot === "") {
907
- aRoot = ".";
908
- }
909
-
910
- aRoot = aRoot.replace(/\/$/, '');
911
-
912
- // It is possible for the path to be above the root. In this case, simply
913
- // checking whether the root is a prefix of the path won't work. Instead, we
914
- // need to remove components from the root one by one, until either we find
915
- // a prefix that fits, or we run out of components to remove.
916
- var level = 0;
917
- while (aPath.indexOf(aRoot + '/') !== 0) {
918
- var index = aRoot.lastIndexOf("/");
919
- if (index < 0) {
920
- return aPath;
921
- }
922
-
923
- // If the only part of the root that is left is the scheme (i.e. http://,
924
- // file:///, etc.), one or more slashes (/), or simply nothing at all, we
925
- // have exhausted all components, so the path is not relative to the root.
926
- aRoot = aRoot.slice(0, index);
927
- if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
928
- return aPath;
929
- }
930
-
931
- ++level;
932
- }
933
-
934
- // Make sure we add a "../" for each component we removed from the root.
935
- return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
936
- }
937
- exports.relative = relative;
938
-
939
- var supportsNullProto = (function () {
940
- var obj = Object.create(null);
941
- return !('__proto__' in obj);
942
- }());
943
-
944
- function identity (s) {
945
- return s;
946
- }
947
-
948
- /**
949
- * Because behavior goes wacky when you set `__proto__` on objects, we
950
- * have to prefix all the strings in our set with an arbitrary character.
951
- *
952
- * See https://github.com/mozilla/source-map/pull/31 and
953
- * https://github.com/mozilla/source-map/issues/30
954
- *
955
- * @param String aStr
956
- */
957
- function toSetString(aStr) {
958
- if (isProtoString(aStr)) {
959
- return '$' + aStr;
960
- }
961
-
962
- return aStr;
963
- }
964
- exports.toSetString = supportsNullProto ? identity : toSetString;
965
-
966
- function fromSetString(aStr) {
967
- if (isProtoString(aStr)) {
968
- return aStr.slice(1);
969
- }
970
-
971
- return aStr;
972
- }
973
- exports.fromSetString = supportsNullProto ? identity : fromSetString;
974
-
975
- function isProtoString(s) {
976
- if (!s) {
977
- return false;
978
- }
979
-
980
- var length = s.length;
981
-
982
- if (length < 9 /* "__proto__".length */) {
983
- return false;
984
- }
985
-
986
- if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
987
- s.charCodeAt(length - 2) !== 95 /* '_' */ ||
988
- s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
989
- s.charCodeAt(length - 4) !== 116 /* 't' */ ||
990
- s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
991
- s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
992
- s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
993
- s.charCodeAt(length - 8) !== 95 /* '_' */ ||
994
- s.charCodeAt(length - 9) !== 95 /* '_' */) {
995
- return false;
996
- }
997
-
998
- for (var i = length - 10; i >= 0; i--) {
999
- if (s.charCodeAt(i) !== 36 /* '$' */) {
1000
- return false;
1001
- }
1002
- }
1003
-
1004
- return true;
1005
- }
1006
-
1007
- /**
1008
- * Comparator between two mappings where the original positions are compared.
1009
- *
1010
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
1011
- * mappings with the same original source/line/column, but different generated
1012
- * line and column the same. Useful when searching for a mapping with a
1013
- * stubbed out mapping.
1014
- */
1015
- function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
1016
- var cmp = mappingA.source - mappingB.source;
1017
- if (cmp !== 0) {
1018
- return cmp;
1019
- }
1020
-
1021
- cmp = mappingA.originalLine - mappingB.originalLine;
1022
- if (cmp !== 0) {
1023
- return cmp;
1024
- }
1025
-
1026
- cmp = mappingA.originalColumn - mappingB.originalColumn;
1027
- if (cmp !== 0 || onlyCompareOriginal) {
1028
- return cmp;
1029
- }
1030
-
1031
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
1032
- if (cmp !== 0) {
1033
- return cmp;
1034
- }
1035
-
1036
- cmp = mappingA.generatedLine - mappingB.generatedLine;
1037
- if (cmp !== 0) {
1038
- return cmp;
1039
- }
1040
-
1041
- return mappingA.name - mappingB.name;
1042
- }
1043
- exports.compareByOriginalPositions = compareByOriginalPositions;
1044
-
1045
- /**
1046
- * Comparator between two mappings with deflated source and name indices where
1047
- * the generated positions are compared.
1048
- *
1049
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
1050
- * mappings with the same generated line and column, but different
1051
- * source/name/original line and column the same. Useful when searching for a
1052
- * mapping with a stubbed out mapping.
1053
- */
1054
- function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
1055
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
1056
- if (cmp !== 0) {
1057
- return cmp;
1058
- }
1059
-
1060
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
1061
- if (cmp !== 0 || onlyCompareGenerated) {
1062
- return cmp;
1063
- }
1064
-
1065
- cmp = mappingA.source - mappingB.source;
1066
- if (cmp !== 0) {
1067
- return cmp;
1068
- }
1069
-
1070
- cmp = mappingA.originalLine - mappingB.originalLine;
1071
- if (cmp !== 0) {
1072
- return cmp;
1073
- }
1074
-
1075
- cmp = mappingA.originalColumn - mappingB.originalColumn;
1076
- if (cmp !== 0) {
1077
- return cmp;
1078
- }
1079
-
1080
- return mappingA.name - mappingB.name;
1081
- }
1082
- exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
1083
-
1084
- function strcmp(aStr1, aStr2) {
1085
- if (aStr1 === aStr2) {
1086
- return 0;
1087
- }
1088
-
1089
- if (aStr1 > aStr2) {
1090
- return 1;
1091
- }
1092
-
1093
- return -1;
1094
- }
1095
-
1096
- /**
1097
- * Comparator between two mappings with inflated source and name strings where
1098
- * the generated positions are compared.
1099
- */
1100
- function compareByGeneratedPositionsInflated(mappingA, mappingB) {
1101
- var cmp = mappingA.generatedLine - mappingB.generatedLine;
1102
- if (cmp !== 0) {
1103
- return cmp;
1104
- }
1105
-
1106
- cmp = mappingA.generatedColumn - mappingB.generatedColumn;
1107
- if (cmp !== 0) {
1108
- return cmp;
1109
- }
1110
-
1111
- cmp = strcmp(mappingA.source, mappingB.source);
1112
- if (cmp !== 0) {
1113
- return cmp;
1114
- }
1115
-
1116
- cmp = mappingA.originalLine - mappingB.originalLine;
1117
- if (cmp !== 0) {
1118
- return cmp;
1119
- }
1120
-
1121
- cmp = mappingA.originalColumn - mappingB.originalColumn;
1122
- if (cmp !== 0) {
1123
- return cmp;
1124
- }
1125
-
1126
- return strcmp(mappingA.name, mappingB.name);
1127
- }
1128
- exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
1129
-
1130
-
1131
- /***/ }),
1132
- /* 5 */
1133
- /***/ (function(module, exports, __webpack_require__) {
1134
-
1135
- /* -*- Mode: js; js-indent-level: 2; -*- */
1136
- /*
1137
- * Copyright 2011 Mozilla Foundation and contributors
1138
- * Licensed under the New BSD license. See LICENSE or:
1139
- * http://opensource.org/licenses/BSD-3-Clause
1140
- */
1141
-
1142
- var util = __webpack_require__(4);
1143
- var has = Object.prototype.hasOwnProperty;
1144
- var hasNativeMap = typeof Map !== "undefined";
1145
-
1146
- /**
1147
- * A data structure which is a combination of an array and a set. Adding a new
1148
- * member is O(1), testing for membership is O(1), and finding the index of an
1149
- * element is O(1). Removing elements from the set is not supported. Only
1150
- * strings are supported for membership.
1151
- */
1152
- function ArraySet() {
1153
- this._array = [];
1154
- this._set = hasNativeMap ? new Map() : Object.create(null);
1155
- }
1156
-
1157
- /**
1158
- * Static method for creating ArraySet instances from an existing array.
1159
- */
1160
- ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
1161
- var set = new ArraySet();
1162
- for (var i = 0, len = aArray.length; i < len; i++) {
1163
- set.add(aArray[i], aAllowDuplicates);
1164
- }
1165
- return set;
1166
- };
1167
-
1168
- /**
1169
- * Return how many unique items are in this ArraySet. If duplicates have been
1170
- * added, than those do not count towards the size.
1171
- *
1172
- * @returns Number
1173
- */
1174
- ArraySet.prototype.size = function ArraySet_size() {
1175
- return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
1176
- };
1177
-
1178
- /**
1179
- * Add the given string to this set.
1180
- *
1181
- * @param String aStr
1182
- */
1183
- ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
1184
- var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
1185
- var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
1186
- var idx = this._array.length;
1187
- if (!isDuplicate || aAllowDuplicates) {
1188
- this._array.push(aStr);
1189
- }
1190
- if (!isDuplicate) {
1191
- if (hasNativeMap) {
1192
- this._set.set(aStr, idx);
1193
- } else {
1194
- this._set[sStr] = idx;
1195
- }
1196
- }
1197
- };
1198
-
1199
- /**
1200
- * Is the given string a member of this set?
1201
- *
1202
- * @param String aStr
1203
- */
1204
- ArraySet.prototype.has = function ArraySet_has(aStr) {
1205
- if (hasNativeMap) {
1206
- return this._set.has(aStr);
1207
- } else {
1208
- var sStr = util.toSetString(aStr);
1209
- return has.call(this._set, sStr);
1210
- }
1211
- };
1212
-
1213
- /**
1214
- * What is the index of the given string in the array?
1215
- *
1216
- * @param String aStr
1217
- */
1218
- ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
1219
- if (hasNativeMap) {
1220
- var idx = this._set.get(aStr);
1221
- if (idx >= 0) {
1222
- return idx;
1223
- }
1224
- } else {
1225
- var sStr = util.toSetString(aStr);
1226
- if (has.call(this._set, sStr)) {
1227
- return this._set[sStr];
1228
- }
1229
- }
1230
-
1231
- throw new Error('"' + aStr + '" is not in the set.');
1232
- };
1233
-
1234
- /**
1235
- * What is the element at the given index?
1236
- *
1237
- * @param Number aIdx
1238
- */
1239
- ArraySet.prototype.at = function ArraySet_at(aIdx) {
1240
- if (aIdx >= 0 && aIdx < this._array.length) {
1241
- return this._array[aIdx];
1242
- }
1243
- throw new Error('No element indexed by ' + aIdx);
1244
- };
1245
-
1246
- /**
1247
- * Returns the array representation of this set (which has the proper indices
1248
- * indicated by indexOf). Note that this is a copy of the internal array used
1249
- * for storing the members so that no one can mess with internal state.
1250
- */
1251
- ArraySet.prototype.toArray = function ArraySet_toArray() {
1252
- return this._array.slice();
1253
- };
1254
-
1255
- exports.ArraySet = ArraySet;
1256
-
1257
-
1258
- /***/ }),
1259
- /* 6 */
1260
- /***/ (function(module, exports, __webpack_require__) {
1261
-
1262
- /* -*- Mode: js; js-indent-level: 2; -*- */
1263
- /*
1264
- * Copyright 2014 Mozilla Foundation and contributors
1265
- * Licensed under the New BSD license. See LICENSE or:
1266
- * http://opensource.org/licenses/BSD-3-Clause
1267
- */
1268
-
1269
- var util = __webpack_require__(4);
1270
-
1271
- /**
1272
- * Determine whether mappingB is after mappingA with respect to generated
1273
- * position.
1274
- */
1275
- function generatedPositionAfter(mappingA, mappingB) {
1276
- // Optimized for most common case
1277
- var lineA = mappingA.generatedLine;
1278
- var lineB = mappingB.generatedLine;
1279
- var columnA = mappingA.generatedColumn;
1280
- var columnB = mappingB.generatedColumn;
1281
- return lineB > lineA || lineB == lineA && columnB >= columnA ||
1282
- util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
1283
- }
1284
-
1285
- /**
1286
- * A data structure to provide a sorted view of accumulated mappings in a
1287
- * performance conscious manner. It trades a neglibable overhead in general
1288
- * case for a large speedup in case of mappings being added in order.
1289
- */
1290
- function MappingList() {
1291
- this._array = [];
1292
- this._sorted = true;
1293
- // Serves as infimum
1294
- this._last = {generatedLine: -1, generatedColumn: 0};
1295
- }
1296
-
1297
- /**
1298
- * Iterate through internal items. This method takes the same arguments that
1299
- * `Array.prototype.forEach` takes.
1300
- *
1301
- * NOTE: The order of the mappings is NOT guaranteed.
1302
- */
1303
- MappingList.prototype.unsortedForEach =
1304
- function MappingList_forEach(aCallback, aThisArg) {
1305
- this._array.forEach(aCallback, aThisArg);
1306
- };
1307
-
1308
- /**
1309
- * Add the given source mapping.
1310
- *
1311
- * @param Object aMapping
1312
- */
1313
- MappingList.prototype.add = function MappingList_add(aMapping) {
1314
- if (generatedPositionAfter(this._last, aMapping)) {
1315
- this._last = aMapping;
1316
- this._array.push(aMapping);
1317
- } else {
1318
- this._sorted = false;
1319
- this._array.push(aMapping);
1320
- }
1321
- };
1322
-
1323
- /**
1324
- * Returns the flat, sorted array of mappings. The mappings are sorted by
1325
- * generated position.
1326
- *
1327
- * WARNING: This method returns internal data without copying, for
1328
- * performance. The return value must NOT be mutated, and should be treated as
1329
- * an immutable borrow. If you want to take ownership, you must make your own
1330
- * copy.
1331
- */
1332
- MappingList.prototype.toArray = function MappingList_toArray() {
1333
- if (!this._sorted) {
1334
- this._array.sort(util.compareByGeneratedPositionsInflated);
1335
- this._sorted = true;
1336
- }
1337
- return this._array;
1338
- };
1339
-
1340
- exports.MappingList = MappingList;
1341
-
1342
-
1343
- /***/ }),
1344
- /* 7 */
1345
- /***/ (function(module, exports, __webpack_require__) {
1346
-
1347
- /* -*- Mode: js; js-indent-level: 2; -*- */
1348
- /*
1349
- * Copyright 2011 Mozilla Foundation and contributors
1350
- * Licensed under the New BSD license. See LICENSE or:
1351
- * http://opensource.org/licenses/BSD-3-Clause
1352
- */
1353
-
1354
- var util = __webpack_require__(4);
1355
- var binarySearch = __webpack_require__(8);
1356
- var ArraySet = __webpack_require__(5).ArraySet;
1357
- var base64VLQ = __webpack_require__(2);
1358
- var quickSort = __webpack_require__(9).quickSort;
1359
-
1360
- function SourceMapConsumer(aSourceMap) {
1361
- var sourceMap = aSourceMap;
1362
- if (typeof aSourceMap === 'string') {
1363
- sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
1364
- }
1365
-
1366
- return sourceMap.sections != null
1367
- ? new IndexedSourceMapConsumer(sourceMap)
1368
- : new BasicSourceMapConsumer(sourceMap);
1369
- }
1370
-
1371
- SourceMapConsumer.fromSourceMap = function(aSourceMap) {
1372
- return BasicSourceMapConsumer.fromSourceMap(aSourceMap);
1373
- }
1374
-
1375
- /**
1376
- * The version of the source mapping spec that we are consuming.
1377
- */
1378
- SourceMapConsumer.prototype._version = 3;
1379
-
1380
- // `__generatedMappings` and `__originalMappings` are arrays that hold the
1381
- // parsed mapping coordinates from the source map's "mappings" attribute. They
1382
- // are lazily instantiated, accessed via the `_generatedMappings` and
1383
- // `_originalMappings` getters respectively, and we only parse the mappings
1384
- // and create these arrays once queried for a source location. We jump through
1385
- // these hoops because there can be many thousands of mappings, and parsing
1386
- // them is expensive, so we only want to do it if we must.
1387
- //
1388
- // Each object in the arrays is of the form:
1389
- //
1390
- // {
1391
- // generatedLine: The line number in the generated code,
1392
- // generatedColumn: The column number in the generated code,
1393
- // source: The path to the original source file that generated this
1394
- // chunk of code,
1395
- // originalLine: The line number in the original source that
1396
- // corresponds to this chunk of generated code,
1397
- // originalColumn: The column number in the original source that
1398
- // corresponds to this chunk of generated code,
1399
- // name: The name of the original symbol which generated this chunk of
1400
- // code.
1401
- // }
1402
- //
1403
- // All properties except for `generatedLine` and `generatedColumn` can be
1404
- // `null`.
1405
- //
1406
- // `_generatedMappings` is ordered by the generated positions.
1407
- //
1408
- // `_originalMappings` is ordered by the original positions.
1409
-
1410
- SourceMapConsumer.prototype.__generatedMappings = null;
1411
- Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
1412
- get: function () {
1413
- if (!this.__generatedMappings) {
1414
- this._parseMappings(this._mappings, this.sourceRoot);
1415
- }
1416
-
1417
- return this.__generatedMappings;
1418
- }
1419
- });
1420
-
1421
- SourceMapConsumer.prototype.__originalMappings = null;
1422
- Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
1423
- get: function () {
1424
- if (!this.__originalMappings) {
1425
- this._parseMappings(this._mappings, this.sourceRoot);
1426
- }
1427
-
1428
- return this.__originalMappings;
1429
- }
1430
- });
1431
-
1432
- SourceMapConsumer.prototype._charIsMappingSeparator =
1433
- function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
1434
- var c = aStr.charAt(index);
1435
- return c === ";" || c === ",";
1436
- };
1437
-
1438
- /**
1439
- * Parse the mappings in a string in to a data structure which we can easily
1440
- * query (the ordered arrays in the `this.__generatedMappings` and
1441
- * `this.__originalMappings` properties).
1442
- */
1443
- SourceMapConsumer.prototype._parseMappings =
1444
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
1445
- throw new Error("Subclasses must implement _parseMappings");
1446
- };
1447
-
1448
- SourceMapConsumer.GENERATED_ORDER = 1;
1449
- SourceMapConsumer.ORIGINAL_ORDER = 2;
1450
-
1451
- SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
1452
- SourceMapConsumer.LEAST_UPPER_BOUND = 2;
1453
-
1454
- /**
1455
- * Iterate over each mapping between an original source/line/column and a
1456
- * generated line/column in this source map.
1457
- *
1458
- * @param Function aCallback
1459
- * The function that is called with each mapping.
1460
- * @param Object aContext
1461
- * Optional. If specified, this object will be the value of `this` every
1462
- * time that `aCallback` is called.
1463
- * @param aOrder
1464
- * Either `SourceMapConsumer.GENERATED_ORDER` or
1465
- * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
1466
- * iterate over the mappings sorted by the generated file's line/column
1467
- * order or the original's source/line/column order, respectively. Defaults to
1468
- * `SourceMapConsumer.GENERATED_ORDER`.
1469
- */
1470
- SourceMapConsumer.prototype.eachMapping =
1471
- function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
1472
- var context = aContext || null;
1473
- var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
1474
-
1475
- var mappings;
1476
- switch (order) {
1477
- case SourceMapConsumer.GENERATED_ORDER:
1478
- mappings = this._generatedMappings;
1479
- break;
1480
- case SourceMapConsumer.ORIGINAL_ORDER:
1481
- mappings = this._originalMappings;
1482
- break;
1483
- default:
1484
- throw new Error("Unknown order of iteration.");
1485
- }
1486
-
1487
- var sourceRoot = this.sourceRoot;
1488
- mappings.map(function (mapping) {
1489
- var source = mapping.source === null ? null : this._sources.at(mapping.source);
1490
- if (source != null && sourceRoot != null) {
1491
- source = util.join(sourceRoot, source);
1492
- }
1493
- return {
1494
- source: source,
1495
- generatedLine: mapping.generatedLine,
1496
- generatedColumn: mapping.generatedColumn,
1497
- originalLine: mapping.originalLine,
1498
- originalColumn: mapping.originalColumn,
1499
- name: mapping.name === null ? null : this._names.at(mapping.name)
1500
- };
1501
- }, this).forEach(aCallback, context);
1502
- };
1503
-
1504
- /**
1505
- * Returns all generated line and column information for the original source,
1506
- * line, and column provided. If no column is provided, returns all mappings
1507
- * corresponding to a either the line we are searching for or the next
1508
- * closest line that has any mappings. Otherwise, returns all mappings
1509
- * corresponding to the given line and either the column we are searching for
1510
- * or the next closest column that has any offsets.
1511
- *
1512
- * The only argument is an object with the following properties:
1513
- *
1514
- * - source: The filename of the original source.
1515
- * - line: The line number in the original source.
1516
- * - column: Optional. the column number in the original source.
1517
- *
1518
- * and an array of objects is returned, each with the following properties:
1519
- *
1520
- * - line: The line number in the generated source, or null.
1521
- * - column: The column number in the generated source, or null.
1522
- */
1523
- SourceMapConsumer.prototype.allGeneratedPositionsFor =
1524
- function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
1525
- var line = util.getArg(aArgs, 'line');
1526
-
1527
- // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
1528
- // returns the index of the closest mapping less than the needle. By
1529
- // setting needle.originalColumn to 0, we thus find the last mapping for
1530
- // the given line, provided such a mapping exists.
1531
- var needle = {
1532
- source: util.getArg(aArgs, 'source'),
1533
- originalLine: line,
1534
- originalColumn: util.getArg(aArgs, 'column', 0)
1535
- };
1536
-
1537
- if (this.sourceRoot != null) {
1538
- needle.source = util.relative(this.sourceRoot, needle.source);
1539
- }
1540
- if (!this._sources.has(needle.source)) {
1541
- return [];
1542
- }
1543
- needle.source = this._sources.indexOf(needle.source);
1544
-
1545
- var mappings = [];
1546
-
1547
- var index = this._findMapping(needle,
1548
- this._originalMappings,
1549
- "originalLine",
1550
- "originalColumn",
1551
- util.compareByOriginalPositions,
1552
- binarySearch.LEAST_UPPER_BOUND);
1553
- if (index >= 0) {
1554
- var mapping = this._originalMappings[index];
1555
-
1556
- if (aArgs.column === undefined) {
1557
- var originalLine = mapping.originalLine;
1558
-
1559
- // Iterate until either we run out of mappings, or we run into
1560
- // a mapping for a different line than the one we found. Since
1561
- // mappings are sorted, this is guaranteed to find all mappings for
1562
- // the line we found.
1563
- while (mapping && mapping.originalLine === originalLine) {
1564
- mappings.push({
1565
- line: util.getArg(mapping, 'generatedLine', null),
1566
- column: util.getArg(mapping, 'generatedColumn', null),
1567
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
1568
- });
1569
-
1570
- mapping = this._originalMappings[++index];
1571
- }
1572
- } else {
1573
- var originalColumn = mapping.originalColumn;
1574
-
1575
- // Iterate until either we run out of mappings, or we run into
1576
- // a mapping for a different line than the one we were searching for.
1577
- // Since mappings are sorted, this is guaranteed to find all mappings for
1578
- // the line we are searching for.
1579
- while (mapping &&
1580
- mapping.originalLine === line &&
1581
- mapping.originalColumn == originalColumn) {
1582
- mappings.push({
1583
- line: util.getArg(mapping, 'generatedLine', null),
1584
- column: util.getArg(mapping, 'generatedColumn', null),
1585
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
1586
- });
1587
-
1588
- mapping = this._originalMappings[++index];
1589
- }
1590
- }
1591
- }
1592
-
1593
- return mappings;
1594
- };
1595
-
1596
- exports.SourceMapConsumer = SourceMapConsumer;
1597
-
1598
- /**
1599
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
1600
- * query for information about the original file positions by giving it a file
1601
- * position in the generated source.
1602
- *
1603
- * The only parameter is the raw source map (either as a JSON string, or
1604
- * already parsed to an object). According to the spec, source maps have the
1605
- * following attributes:
1606
- *
1607
- * - version: Which version of the source map spec this map is following.
1608
- * - sources: An array of URLs to the original source files.
1609
- * - names: An array of identifiers which can be referrenced by individual mappings.
1610
- * - sourceRoot: Optional. The URL root from which all sources are relative.
1611
- * - sourcesContent: Optional. An array of contents of the original source files.
1612
- * - mappings: A string of base64 VLQs which contain the actual mappings.
1613
- * - file: Optional. The generated file this source map is associated with.
1614
- *
1615
- * Here is an example source map, taken from the source map spec[0]:
1616
- *
1617
- * {
1618
- * version : 3,
1619
- * file: "out.js",
1620
- * sourceRoot : "",
1621
- * sources: ["foo.js", "bar.js"],
1622
- * names: ["src", "maps", "are", "fun"],
1623
- * mappings: "AA,AB;;ABCDE;"
1624
- * }
1625
- *
1626
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
1627
- */
1628
- function BasicSourceMapConsumer(aSourceMap) {
1629
- var sourceMap = aSourceMap;
1630
- if (typeof aSourceMap === 'string') {
1631
- sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
1632
- }
1633
-
1634
- var version = util.getArg(sourceMap, 'version');
1635
- var sources = util.getArg(sourceMap, 'sources');
1636
- // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
1637
- // requires the array) to play nice here.
1638
- var names = util.getArg(sourceMap, 'names', []);
1639
- var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
1640
- var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
1641
- var mappings = util.getArg(sourceMap, 'mappings');
1642
- var file = util.getArg(sourceMap, 'file', null);
1643
-
1644
- // Once again, Sass deviates from the spec and supplies the version as a
1645
- // string rather than a number, so we use loose equality checking here.
1646
- if (version != this._version) {
1647
- throw new Error('Unsupported version: ' + version);
1648
- }
1649
-
1650
- sources = sources
1651
- .map(String)
1652
- // Some source maps produce relative source paths like "./foo.js" instead of
1653
- // "foo.js". Normalize these first so that future comparisons will succeed.
1654
- // See bugzil.la/1090768.
1655
- .map(util.normalize)
1656
- // Always ensure that absolute sources are internally stored relative to
1657
- // the source root, if the source root is absolute. Not doing this would
1658
- // be particularly problematic when the source root is a prefix of the
1659
- // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
1660
- .map(function (source) {
1661
- return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
1662
- ? util.relative(sourceRoot, source)
1663
- : source;
1664
- });
1665
-
1666
- // Pass `true` below to allow duplicate names and sources. While source maps
1667
- // are intended to be compressed and deduplicated, the TypeScript compiler
1668
- // sometimes generates source maps with duplicates in them. See Github issue
1669
- // #72 and bugzil.la/889492.
1670
- this._names = ArraySet.fromArray(names.map(String), true);
1671
- this._sources = ArraySet.fromArray(sources, true);
1672
-
1673
- this.sourceRoot = sourceRoot;
1674
- this.sourcesContent = sourcesContent;
1675
- this._mappings = mappings;
1676
- this.file = file;
1677
- }
1678
-
1679
- BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
1680
- BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
1681
-
1682
- /**
1683
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
1684
- *
1685
- * @param SourceMapGenerator aSourceMap
1686
- * The source map that will be consumed.
1687
- * @returns BasicSourceMapConsumer
1688
- */
1689
- BasicSourceMapConsumer.fromSourceMap =
1690
- function SourceMapConsumer_fromSourceMap(aSourceMap) {
1691
- var smc = Object.create(BasicSourceMapConsumer.prototype);
1692
-
1693
- var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
1694
- var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
1695
- smc.sourceRoot = aSourceMap._sourceRoot;
1696
- smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
1697
- smc.sourceRoot);
1698
- smc.file = aSourceMap._file;
1699
-
1700
- // Because we are modifying the entries (by converting string sources and
1701
- // names to indices into the sources and names ArraySets), we have to make
1702
- // a copy of the entry or else bad things happen. Shared mutable state
1703
- // strikes again! See github issue #191.
1704
-
1705
- var generatedMappings = aSourceMap._mappings.toArray().slice();
1706
- var destGeneratedMappings = smc.__generatedMappings = [];
1707
- var destOriginalMappings = smc.__originalMappings = [];
1708
-
1709
- for (var i = 0, length = generatedMappings.length; i < length; i++) {
1710
- var srcMapping = generatedMappings[i];
1711
- var destMapping = new Mapping;
1712
- destMapping.generatedLine = srcMapping.generatedLine;
1713
- destMapping.generatedColumn = srcMapping.generatedColumn;
1714
-
1715
- if (srcMapping.source) {
1716
- destMapping.source = sources.indexOf(srcMapping.source);
1717
- destMapping.originalLine = srcMapping.originalLine;
1718
- destMapping.originalColumn = srcMapping.originalColumn;
1719
-
1720
- if (srcMapping.name) {
1721
- destMapping.name = names.indexOf(srcMapping.name);
1722
- }
1723
-
1724
- destOriginalMappings.push(destMapping);
1725
- }
1726
-
1727
- destGeneratedMappings.push(destMapping);
1728
- }
1729
-
1730
- quickSort(smc.__originalMappings, util.compareByOriginalPositions);
1731
-
1732
- return smc;
1733
- };
1734
-
1735
- /**
1736
- * The version of the source mapping spec that we are consuming.
1737
- */
1738
- BasicSourceMapConsumer.prototype._version = 3;
1739
-
1740
- /**
1741
- * The list of original sources.
1742
- */
1743
- Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
1744
- get: function () {
1745
- return this._sources.toArray().map(function (s) {
1746
- return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
1747
- }, this);
1748
- }
1749
- });
1750
-
1751
- /**
1752
- * Provide the JIT with a nice shape / hidden class.
1753
- */
1754
- function Mapping() {
1755
- this.generatedLine = 0;
1756
- this.generatedColumn = 0;
1757
- this.source = null;
1758
- this.originalLine = null;
1759
- this.originalColumn = null;
1760
- this.name = null;
1761
- }
1762
-
1763
- /**
1764
- * Parse the mappings in a string in to a data structure which we can easily
1765
- * query (the ordered arrays in the `this.__generatedMappings` and
1766
- * `this.__originalMappings` properties).
1767
- */
1768
- BasicSourceMapConsumer.prototype._parseMappings =
1769
- function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
1770
- var generatedLine = 1;
1771
- var previousGeneratedColumn = 0;
1772
- var previousOriginalLine = 0;
1773
- var previousOriginalColumn = 0;
1774
- var previousSource = 0;
1775
- var previousName = 0;
1776
- var length = aStr.length;
1777
- var index = 0;
1778
- var cachedSegments = {};
1779
- var temp = {};
1780
- var originalMappings = [];
1781
- var generatedMappings = [];
1782
- var mapping, str, segment, end, value;
1783
-
1784
- while (index < length) {
1785
- if (aStr.charAt(index) === ';') {
1786
- generatedLine++;
1787
- index++;
1788
- previousGeneratedColumn = 0;
1789
- }
1790
- else if (aStr.charAt(index) === ',') {
1791
- index++;
1792
- }
1793
- else {
1794
- mapping = new Mapping();
1795
- mapping.generatedLine = generatedLine;
1796
-
1797
- // Because each offset is encoded relative to the previous one,
1798
- // many segments often have the same encoding. We can exploit this
1799
- // fact by caching the parsed variable length fields of each segment,
1800
- // allowing us to avoid a second parse if we encounter the same
1801
- // segment again.
1802
- for (end = index; end < length; end++) {
1803
- if (this._charIsMappingSeparator(aStr, end)) {
1804
- break;
1805
- }
1806
- }
1807
- str = aStr.slice(index, end);
1808
-
1809
- segment = cachedSegments[str];
1810
- if (segment) {
1811
- index += str.length;
1812
- } else {
1813
- segment = [];
1814
- while (index < end) {
1815
- base64VLQ.decode(aStr, index, temp);
1816
- value = temp.value;
1817
- index = temp.rest;
1818
- segment.push(value);
1819
- }
1820
-
1821
- if (segment.length === 2) {
1822
- throw new Error('Found a source, but no line and column');
1823
- }
1824
-
1825
- if (segment.length === 3) {
1826
- throw new Error('Found a source and line, but no column');
1827
- }
1828
-
1829
- cachedSegments[str] = segment;
1830
- }
1831
-
1832
- // Generated column.
1833
- mapping.generatedColumn = previousGeneratedColumn + segment[0];
1834
- previousGeneratedColumn = mapping.generatedColumn;
1835
-
1836
- if (segment.length > 1) {
1837
- // Original source.
1838
- mapping.source = previousSource + segment[1];
1839
- previousSource += segment[1];
1840
-
1841
- // Original line.
1842
- mapping.originalLine = previousOriginalLine + segment[2];
1843
- previousOriginalLine = mapping.originalLine;
1844
- // Lines are stored 0-based
1845
- mapping.originalLine += 1;
1846
-
1847
- // Original column.
1848
- mapping.originalColumn = previousOriginalColumn + segment[3];
1849
- previousOriginalColumn = mapping.originalColumn;
1850
-
1851
- if (segment.length > 4) {
1852
- // Original name.
1853
- mapping.name = previousName + segment[4];
1854
- previousName += segment[4];
1855
- }
1856
- }
1857
-
1858
- generatedMappings.push(mapping);
1859
- if (typeof mapping.originalLine === 'number') {
1860
- originalMappings.push(mapping);
1861
- }
1862
- }
1863
- }
1864
-
1865
- quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
1866
- this.__generatedMappings = generatedMappings;
1867
-
1868
- quickSort(originalMappings, util.compareByOriginalPositions);
1869
- this.__originalMappings = originalMappings;
1870
- };
1871
-
1872
- /**
1873
- * Find the mapping that best matches the hypothetical "needle" mapping that
1874
- * we are searching for in the given "haystack" of mappings.
1875
- */
1876
- BasicSourceMapConsumer.prototype._findMapping =
1877
- function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
1878
- aColumnName, aComparator, aBias) {
1879
- // To return the position we are searching for, we must first find the
1880
- // mapping for the given position and then return the opposite position it
1881
- // points to. Because the mappings are sorted, we can use binary search to
1882
- // find the best mapping.
1883
-
1884
- if (aNeedle[aLineName] <= 0) {
1885
- throw new TypeError('Line must be greater than or equal to 1, got '
1886
- + aNeedle[aLineName]);
1887
- }
1888
- if (aNeedle[aColumnName] < 0) {
1889
- throw new TypeError('Column must be greater than or equal to 0, got '
1890
- + aNeedle[aColumnName]);
1891
- }
1892
-
1893
- return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
1894
- };
1895
-
1896
- /**
1897
- * Compute the last column for each generated mapping. The last column is
1898
- * inclusive.
1899
- */
1900
- BasicSourceMapConsumer.prototype.computeColumnSpans =
1901
- function SourceMapConsumer_computeColumnSpans() {
1902
- for (var index = 0; index < this._generatedMappings.length; ++index) {
1903
- var mapping = this._generatedMappings[index];
1904
-
1905
- // Mappings do not contain a field for the last generated columnt. We
1906
- // can come up with an optimistic estimate, however, by assuming that
1907
- // mappings are contiguous (i.e. given two consecutive mappings, the
1908
- // first mapping ends where the second one starts).
1909
- if (index + 1 < this._generatedMappings.length) {
1910
- var nextMapping = this._generatedMappings[index + 1];
1911
-
1912
- if (mapping.generatedLine === nextMapping.generatedLine) {
1913
- mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
1914
- continue;
1915
- }
1916
- }
1917
-
1918
- // The last mapping for each line spans the entire line.
1919
- mapping.lastGeneratedColumn = Infinity;
1920
- }
1921
- };
1922
-
1923
- /**
1924
- * Returns the original source, line, and column information for the generated
1925
- * source's line and column positions provided. The only argument is an object
1926
- * with the following properties:
1927
- *
1928
- * - line: The line number in the generated source.
1929
- * - column: The column number in the generated source.
1930
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
1931
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
1932
- * closest element that is smaller than or greater than the one we are
1933
- * searching for, respectively, if the exact element cannot be found.
1934
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
1935
- *
1936
- * and an object is returned with the following properties:
1937
- *
1938
- * - source: The original source file, or null.
1939
- * - line: The line number in the original source, or null.
1940
- * - column: The column number in the original source, or null.
1941
- * - name: The original identifier, or null.
1942
- */
1943
- BasicSourceMapConsumer.prototype.originalPositionFor =
1944
- function SourceMapConsumer_originalPositionFor(aArgs) {
1945
- var needle = {
1946
- generatedLine: util.getArg(aArgs, 'line'),
1947
- generatedColumn: util.getArg(aArgs, 'column')
1948
- };
1949
-
1950
- var index = this._findMapping(
1951
- needle,
1952
- this._generatedMappings,
1953
- "generatedLine",
1954
- "generatedColumn",
1955
- util.compareByGeneratedPositionsDeflated,
1956
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
1957
- );
1958
-
1959
- if (index >= 0) {
1960
- var mapping = this._generatedMappings[index];
1961
-
1962
- if (mapping.generatedLine === needle.generatedLine) {
1963
- var source = util.getArg(mapping, 'source', null);
1964
- if (source !== null) {
1965
- source = this._sources.at(source);
1966
- if (this.sourceRoot != null) {
1967
- source = util.join(this.sourceRoot, source);
1968
- }
1969
- }
1970
- var name = util.getArg(mapping, 'name', null);
1971
- if (name !== null) {
1972
- name = this._names.at(name);
1973
- }
1974
- return {
1975
- source: source,
1976
- line: util.getArg(mapping, 'originalLine', null),
1977
- column: util.getArg(mapping, 'originalColumn', null),
1978
- name: name
1979
- };
1980
- }
1981
- }
1982
-
1983
- return {
1984
- source: null,
1985
- line: null,
1986
- column: null,
1987
- name: null
1988
- };
1989
- };
1990
-
1991
- /**
1992
- * Return true if we have the source content for every source in the source
1993
- * map, false otherwise.
1994
- */
1995
- BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
1996
- function BasicSourceMapConsumer_hasContentsOfAllSources() {
1997
- if (!this.sourcesContent) {
1998
- return false;
1999
- }
2000
- return this.sourcesContent.length >= this._sources.size() &&
2001
- !this.sourcesContent.some(function (sc) { return sc == null; });
2002
- };
2003
-
2004
- /**
2005
- * Returns the original source content. The only argument is the url of the
2006
- * original source file. Returns null if no original source content is
2007
- * available.
2008
- */
2009
- BasicSourceMapConsumer.prototype.sourceContentFor =
2010
- function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
2011
- if (!this.sourcesContent) {
2012
- return null;
2013
- }
2014
-
2015
- if (this.sourceRoot != null) {
2016
- aSource = util.relative(this.sourceRoot, aSource);
2017
- }
2018
-
2019
- if (this._sources.has(aSource)) {
2020
- return this.sourcesContent[this._sources.indexOf(aSource)];
2021
- }
2022
-
2023
- var url;
2024
- if (this.sourceRoot != null
2025
- && (url = util.urlParse(this.sourceRoot))) {
2026
- // XXX: file:// URIs and absolute paths lead to unexpected behavior for
2027
- // many users. We can help them out when they expect file:// URIs to
2028
- // behave like it would if they were running a local HTTP server. See
2029
- // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
2030
- var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
2031
- if (url.scheme == "file"
2032
- && this._sources.has(fileUriAbsPath)) {
2033
- return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
2034
- }
2035
-
2036
- if ((!url.path || url.path == "/")
2037
- && this._sources.has("/" + aSource)) {
2038
- return this.sourcesContent[this._sources.indexOf("/" + aSource)];
2039
- }
2040
- }
2041
-
2042
- // This function is used recursively from
2043
- // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
2044
- // don't want to throw if we can't find the source - we just want to
2045
- // return null, so we provide a flag to exit gracefully.
2046
- if (nullOnMissing) {
2047
- return null;
2048
- }
2049
- else {
2050
- throw new Error('"' + aSource + '" is not in the SourceMap.');
2051
- }
2052
- };
2053
-
2054
- /**
2055
- * Returns the generated line and column information for the original source,
2056
- * line, and column positions provided. The only argument is an object with
2057
- * the following properties:
2058
- *
2059
- * - source: The filename of the original source.
2060
- * - line: The line number in the original source.
2061
- * - column: The column number in the original source.
2062
- * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
2063
- * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
2064
- * closest element that is smaller than or greater than the one we are
2065
- * searching for, respectively, if the exact element cannot be found.
2066
- * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
2067
- *
2068
- * and an object is returned with the following properties:
2069
- *
2070
- * - line: The line number in the generated source, or null.
2071
- * - column: The column number in the generated source, or null.
2072
- */
2073
- BasicSourceMapConsumer.prototype.generatedPositionFor =
2074
- function SourceMapConsumer_generatedPositionFor(aArgs) {
2075
- var source = util.getArg(aArgs, 'source');
2076
- if (this.sourceRoot != null) {
2077
- source = util.relative(this.sourceRoot, source);
2078
- }
2079
- if (!this._sources.has(source)) {
2080
- return {
2081
- line: null,
2082
- column: null,
2083
- lastColumn: null
2084
- };
2085
- }
2086
- source = this._sources.indexOf(source);
2087
-
2088
- var needle = {
2089
- source: source,
2090
- originalLine: util.getArg(aArgs, 'line'),
2091
- originalColumn: util.getArg(aArgs, 'column')
2092
- };
2093
-
2094
- var index = this._findMapping(
2095
- needle,
2096
- this._originalMappings,
2097
- "originalLine",
2098
- "originalColumn",
2099
- util.compareByOriginalPositions,
2100
- util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
2101
- );
2102
-
2103
- if (index >= 0) {
2104
- var mapping = this._originalMappings[index];
2105
-
2106
- if (mapping.source === needle.source) {
2107
- return {
2108
- line: util.getArg(mapping, 'generatedLine', null),
2109
- column: util.getArg(mapping, 'generatedColumn', null),
2110
- lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
2111
- };
2112
- }
2113
- }
2114
-
2115
- return {
2116
- line: null,
2117
- column: null,
2118
- lastColumn: null
2119
- };
2120
- };
2121
-
2122
- exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
2123
-
2124
- /**
2125
- * An IndexedSourceMapConsumer instance represents a parsed source map which
2126
- * we can query for information. It differs from BasicSourceMapConsumer in
2127
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
2128
- * input.
2129
- *
2130
- * The only parameter is a raw source map (either as a JSON string, or already
2131
- * parsed to an object). According to the spec for indexed source maps, they
2132
- * have the following attributes:
2133
- *
2134
- * - version: Which version of the source map spec this map is following.
2135
- * - file: Optional. The generated file this source map is associated with.
2136
- * - sections: A list of section definitions.
2137
- *
2138
- * Each value under the "sections" field has two fields:
2139
- * - offset: The offset into the original specified at which this section
2140
- * begins to apply, defined as an object with a "line" and "column"
2141
- * field.
2142
- * - map: A source map definition. This source map could also be indexed,
2143
- * but doesn't have to be.
2144
- *
2145
- * Instead of the "map" field, it's also possible to have a "url" field
2146
- * specifying a URL to retrieve a source map from, but that's currently
2147
- * unsupported.
2148
- *
2149
- * Here's an example source map, taken from the source map spec[0], but
2150
- * modified to omit a section which uses the "url" field.
2151
- *
2152
- * {
2153
- * version : 3,
2154
- * file: "app.js",
2155
- * sections: [{
2156
- * offset: {line:100, column:10},
2157
- * map: {
2158
- * version : 3,
2159
- * file: "section.js",
2160
- * sources: ["foo.js", "bar.js"],
2161
- * names: ["src", "maps", "are", "fun"],
2162
- * mappings: "AAAA,E;;ABCDE;"
2163
- * }
2164
- * }],
2165
- * }
2166
- *
2167
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
2168
- */
2169
- function IndexedSourceMapConsumer(aSourceMap) {
2170
- var sourceMap = aSourceMap;
2171
- if (typeof aSourceMap === 'string') {
2172
- sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
2173
- }
2174
-
2175
- var version = util.getArg(sourceMap, 'version');
2176
- var sections = util.getArg(sourceMap, 'sections');
2177
-
2178
- if (version != this._version) {
2179
- throw new Error('Unsupported version: ' + version);
2180
- }
2181
-
2182
- this._sources = new ArraySet();
2183
- this._names = new ArraySet();
2184
-
2185
- var lastOffset = {
2186
- line: -1,
2187
- column: 0
2188
- };
2189
- this._sections = sections.map(function (s) {
2190
- if (s.url) {
2191
- // The url field will require support for asynchronicity.
2192
- // See https://github.com/mozilla/source-map/issues/16
2193
- throw new Error('Support for url field in sections not implemented.');
2194
- }
2195
- var offset = util.getArg(s, 'offset');
2196
- var offsetLine = util.getArg(offset, 'line');
2197
- var offsetColumn = util.getArg(offset, 'column');
2198
-
2199
- if (offsetLine < lastOffset.line ||
2200
- (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
2201
- throw new Error('Section offsets must be ordered and non-overlapping.');
2202
- }
2203
- lastOffset = offset;
2204
-
2205
- return {
2206
- generatedOffset: {
2207
- // The offset fields are 0-based, but we use 1-based indices when
2208
- // encoding/decoding from VLQ.
2209
- generatedLine: offsetLine + 1,
2210
- generatedColumn: offsetColumn + 1
2211
- },
2212
- consumer: new SourceMapConsumer(util.getArg(s, 'map'))
2213
- }
2214
- });
2215
- }
2216
-
2217
- IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
2218
- IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
2219
-
2220
- /**
2221
- * The version of the source mapping spec that we are consuming.
2222
- */
2223
- IndexedSourceMapConsumer.prototype._version = 3;
2224
-
2225
- /**
2226
- * The list of original sources.
2227
- */
2228
- Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
2229
- get: function () {
2230
- var sources = [];
2231
- for (var i = 0; i < this._sections.length; i++) {
2232
- for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
2233
- sources.push(this._sections[i].consumer.sources[j]);
2234
- }
2235
- }
2236
- return sources;
2237
- }
2238
- });
2239
-
2240
- /**
2241
- * Returns the original source, line, and column information for the generated
2242
- * source's line and column positions provided. The only argument is an object
2243
- * with the following properties:
2244
- *
2245
- * - line: The line number in the generated source.
2246
- * - column: The column number in the generated source.
2247
- *
2248
- * and an object is returned with the following properties:
2249
- *
2250
- * - source: The original source file, or null.
2251
- * - line: The line number in the original source, or null.
2252
- * - column: The column number in the original source, or null.
2253
- * - name: The original identifier, or null.
2254
- */
2255
- IndexedSourceMapConsumer.prototype.originalPositionFor =
2256
- function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
2257
- var needle = {
2258
- generatedLine: util.getArg(aArgs, 'line'),
2259
- generatedColumn: util.getArg(aArgs, 'column')
2260
- };
2261
-
2262
- // Find the section containing the generated position we're trying to map
2263
- // to an original position.
2264
- var sectionIndex = binarySearch.search(needle, this._sections,
2265
- function(needle, section) {
2266
- var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
2267
- if (cmp) {
2268
- return cmp;
2269
- }
2270
-
2271
- return (needle.generatedColumn -
2272
- section.generatedOffset.generatedColumn);
2273
- });
2274
- var section = this._sections[sectionIndex];
2275
-
2276
- if (!section) {
2277
- return {
2278
- source: null,
2279
- line: null,
2280
- column: null,
2281
- name: null
2282
- };
2283
- }
2284
-
2285
- return section.consumer.originalPositionFor({
2286
- line: needle.generatedLine -
2287
- (section.generatedOffset.generatedLine - 1),
2288
- column: needle.generatedColumn -
2289
- (section.generatedOffset.generatedLine === needle.generatedLine
2290
- ? section.generatedOffset.generatedColumn - 1
2291
- : 0),
2292
- bias: aArgs.bias
2293
- });
2294
- };
2295
-
2296
- /**
2297
- * Return true if we have the source content for every source in the source
2298
- * map, false otherwise.
2299
- */
2300
- IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
2301
- function IndexedSourceMapConsumer_hasContentsOfAllSources() {
2302
- return this._sections.every(function (s) {
2303
- return s.consumer.hasContentsOfAllSources();
2304
- });
2305
- };
2306
-
2307
- /**
2308
- * Returns the original source content. The only argument is the url of the
2309
- * original source file. Returns null if no original source content is
2310
- * available.
2311
- */
2312
- IndexedSourceMapConsumer.prototype.sourceContentFor =
2313
- function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
2314
- for (var i = 0; i < this._sections.length; i++) {
2315
- var section = this._sections[i];
2316
-
2317
- var content = section.consumer.sourceContentFor(aSource, true);
2318
- if (content) {
2319
- return content;
2320
- }
2321
- }
2322
- if (nullOnMissing) {
2323
- return null;
2324
- }
2325
- else {
2326
- throw new Error('"' + aSource + '" is not in the SourceMap.');
2327
- }
2328
- };
2329
-
2330
- /**
2331
- * Returns the generated line and column information for the original source,
2332
- * line, and column positions provided. The only argument is an object with
2333
- * the following properties:
2334
- *
2335
- * - source: The filename of the original source.
2336
- * - line: The line number in the original source.
2337
- * - column: The column number in the original source.
2338
- *
2339
- * and an object is returned with the following properties:
2340
- *
2341
- * - line: The line number in the generated source, or null.
2342
- * - column: The column number in the generated source, or null.
2343
- */
2344
- IndexedSourceMapConsumer.prototype.generatedPositionFor =
2345
- function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
2346
- for (var i = 0; i < this._sections.length; i++) {
2347
- var section = this._sections[i];
2348
-
2349
- // Only consider this section if the requested source is in the list of
2350
- // sources of the consumer.
2351
- if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
2352
- continue;
2353
- }
2354
- var generatedPosition = section.consumer.generatedPositionFor(aArgs);
2355
- if (generatedPosition) {
2356
- var ret = {
2357
- line: generatedPosition.line +
2358
- (section.generatedOffset.generatedLine - 1),
2359
- column: generatedPosition.column +
2360
- (section.generatedOffset.generatedLine === generatedPosition.line
2361
- ? section.generatedOffset.generatedColumn - 1
2362
- : 0)
2363
- };
2364
- return ret;
2365
- }
2366
- }
2367
-
2368
- return {
2369
- line: null,
2370
- column: null
2371
- };
2372
- };
2373
-
2374
- /**
2375
- * Parse the mappings in a string in to a data structure which we can easily
2376
- * query (the ordered arrays in the `this.__generatedMappings` and
2377
- * `this.__originalMappings` properties).
2378
- */
2379
- IndexedSourceMapConsumer.prototype._parseMappings =
2380
- function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
2381
- this.__generatedMappings = [];
2382
- this.__originalMappings = [];
2383
- for (var i = 0; i < this._sections.length; i++) {
2384
- var section = this._sections[i];
2385
- var sectionMappings = section.consumer._generatedMappings;
2386
- for (var j = 0; j < sectionMappings.length; j++) {
2387
- var mapping = sectionMappings[j];
2388
-
2389
- var source = section.consumer._sources.at(mapping.source);
2390
- if (section.consumer.sourceRoot !== null) {
2391
- source = util.join(section.consumer.sourceRoot, source);
2392
- }
2393
- this._sources.add(source);
2394
- source = this._sources.indexOf(source);
2395
-
2396
- var name = section.consumer._names.at(mapping.name);
2397
- this._names.add(name);
2398
- name = this._names.indexOf(name);
2399
-
2400
- // The mappings coming from the consumer for the section have
2401
- // generated positions relative to the start of the section, so we
2402
- // need to offset them to be relative to the start of the concatenated
2403
- // generated file.
2404
- var adjustedMapping = {
2405
- source: source,
2406
- generatedLine: mapping.generatedLine +
2407
- (section.generatedOffset.generatedLine - 1),
2408
- generatedColumn: mapping.generatedColumn +
2409
- (section.generatedOffset.generatedLine === mapping.generatedLine
2410
- ? section.generatedOffset.generatedColumn - 1
2411
- : 0),
2412
- originalLine: mapping.originalLine,
2413
- originalColumn: mapping.originalColumn,
2414
- name: name
2415
- };
2416
-
2417
- this.__generatedMappings.push(adjustedMapping);
2418
- if (typeof adjustedMapping.originalLine === 'number') {
2419
- this.__originalMappings.push(adjustedMapping);
2420
- }
2421
- }
2422
- }
2423
-
2424
- quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
2425
- quickSort(this.__originalMappings, util.compareByOriginalPositions);
2426
- };
2427
-
2428
- exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
2429
-
2430
-
2431
- /***/ }),
2432
- /* 8 */
2433
- /***/ (function(module, exports) {
2434
-
2435
- /* -*- Mode: js; js-indent-level: 2; -*- */
2436
- /*
2437
- * Copyright 2011 Mozilla Foundation and contributors
2438
- * Licensed under the New BSD license. See LICENSE or:
2439
- * http://opensource.org/licenses/BSD-3-Clause
2440
- */
2441
-
2442
- exports.GREATEST_LOWER_BOUND = 1;
2443
- exports.LEAST_UPPER_BOUND = 2;
2444
-
2445
- /**
2446
- * Recursive implementation of binary search.
2447
- *
2448
- * @param aLow Indices here and lower do not contain the needle.
2449
- * @param aHigh Indices here and higher do not contain the needle.
2450
- * @param aNeedle The element being searched for.
2451
- * @param aHaystack The non-empty array being searched.
2452
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
2453
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
2454
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
2455
- * closest element that is smaller than or greater than the one we are
2456
- * searching for, respectively, if the exact element cannot be found.
2457
- */
2458
- function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
2459
- // This function terminates when one of the following is true:
2460
- //
2461
- // 1. We find the exact element we are looking for.
2462
- //
2463
- // 2. We did not find the exact element, but we can return the index of
2464
- // the next-closest element.
2465
- //
2466
- // 3. We did not find the exact element, and there is no next-closest
2467
- // element than the one we are searching for, so we return -1.
2468
- var mid = Math.floor((aHigh - aLow) / 2) + aLow;
2469
- var cmp = aCompare(aNeedle, aHaystack[mid], true);
2470
- if (cmp === 0) {
2471
- // Found the element we are looking for.
2472
- return mid;
2473
- }
2474
- else if (cmp > 0) {
2475
- // Our needle is greater than aHaystack[mid].
2476
- if (aHigh - mid > 1) {
2477
- // The element is in the upper half.
2478
- return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
2479
- }
2480
-
2481
- // The exact needle element was not found in this haystack. Determine if
2482
- // we are in termination case (3) or (2) and return the appropriate thing.
2483
- if (aBias == exports.LEAST_UPPER_BOUND) {
2484
- return aHigh < aHaystack.length ? aHigh : -1;
2485
- } else {
2486
- return mid;
2487
- }
2488
- }
2489
- else {
2490
- // Our needle is less than aHaystack[mid].
2491
- if (mid - aLow > 1) {
2492
- // The element is in the lower half.
2493
- return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
2494
- }
2495
-
2496
- // we are in termination case (3) or (2) and return the appropriate thing.
2497
- if (aBias == exports.LEAST_UPPER_BOUND) {
2498
- return mid;
2499
- } else {
2500
- return aLow < 0 ? -1 : aLow;
2501
- }
2502
- }
2503
- }
2504
-
2505
- /**
2506
- * This is an implementation of binary search which will always try and return
2507
- * the index of the closest element if there is no exact hit. This is because
2508
- * mappings between original and generated line/col pairs are single points,
2509
- * and there is an implicit region between each of them, so a miss just means
2510
- * that you aren't on the very start of a region.
2511
- *
2512
- * @param aNeedle The element you are looking for.
2513
- * @param aHaystack The array that is being searched.
2514
- * @param aCompare A function which takes the needle and an element in the
2515
- * array and returns -1, 0, or 1 depending on whether the needle is less
2516
- * than, equal to, or greater than the element, respectively.
2517
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
2518
- * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
2519
- * closest element that is smaller than or greater than the one we are
2520
- * searching for, respectively, if the exact element cannot be found.
2521
- * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
2522
- */
2523
- exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
2524
- if (aHaystack.length === 0) {
2525
- return -1;
2526
- }
2527
-
2528
- var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
2529
- aCompare, aBias || exports.GREATEST_LOWER_BOUND);
2530
- if (index < 0) {
2531
- return -1;
2532
- }
2533
-
2534
- // We have found either the exact element, or the next-closest element than
2535
- // the one we are searching for. However, there may be more than one such
2536
- // element. Make sure we always return the smallest of these.
2537
- while (index - 1 >= 0) {
2538
- if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
2539
- break;
2540
- }
2541
- --index;
2542
- }
2543
-
2544
- return index;
2545
- };
2546
-
2547
-
2548
- /***/ }),
2549
- /* 9 */
2550
- /***/ (function(module, exports) {
2551
-
2552
- /* -*- Mode: js; js-indent-level: 2; -*- */
2553
- /*
2554
- * Copyright 2011 Mozilla Foundation and contributors
2555
- * Licensed under the New BSD license. See LICENSE or:
2556
- * http://opensource.org/licenses/BSD-3-Clause
2557
- */
2558
-
2559
- // It turns out that some (most?) JavaScript engines don't self-host
2560
- // `Array.prototype.sort`. This makes sense because C++ will likely remain
2561
- // faster than JS when doing raw CPU-intensive sorting. However, when using a
2562
- // custom comparator function, calling back and forth between the VM's C++ and
2563
- // JIT'd JS is rather slow *and* loses JIT type information, resulting in
2564
- // worse generated code for the comparator function than would be optimal. In
2565
- // fact, when sorting with a comparator, these costs outweigh the benefits of
2566
- // sorting in C++. By using our own JS-implemented Quick Sort (below), we get
2567
- // a ~3500ms mean speed-up in `bench/bench.html`.
2568
-
2569
- /**
2570
- * Swap the elements indexed by `x` and `y` in the array `ary`.
2571
- *
2572
- * @param {Array} ary
2573
- * The array.
2574
- * @param {Number} x
2575
- * The index of the first item.
2576
- * @param {Number} y
2577
- * The index of the second item.
2578
- */
2579
- function swap(ary, x, y) {
2580
- var temp = ary[x];
2581
- ary[x] = ary[y];
2582
- ary[y] = temp;
2583
- }
2584
-
2585
- /**
2586
- * Returns a random integer within the range `low .. high` inclusive.
2587
- *
2588
- * @param {Number} low
2589
- * The lower bound on the range.
2590
- * @param {Number} high
2591
- * The upper bound on the range.
2592
- */
2593
- function randomIntInRange(low, high) {
2594
- return Math.round(low + (Math.random() * (high - low)));
2595
- }
2596
-
2597
- /**
2598
- * The Quick Sort algorithm.
2599
- *
2600
- * @param {Array} ary
2601
- * An array to sort.
2602
- * @param {function} comparator
2603
- * Function to use to compare two items.
2604
- * @param {Number} p
2605
- * Start index of the array
2606
- * @param {Number} r
2607
- * End index of the array
2608
- */
2609
- function doQuickSort(ary, comparator, p, r) {
2610
- // If our lower bound is less than our upper bound, we (1) partition the
2611
- // array into two pieces and (2) recurse on each half. If it is not, this is
2612
- // the empty array and our base case.
2613
-
2614
- if (p < r) {
2615
- // (1) Partitioning.
2616
- //
2617
- // The partitioning chooses a pivot between `p` and `r` and moves all
2618
- // elements that are less than or equal to the pivot to the before it, and
2619
- // all the elements that are greater than it after it. The effect is that
2620
- // once partition is done, the pivot is in the exact place it will be when
2621
- // the array is put in sorted order, and it will not need to be moved
2622
- // again. This runs in O(n) time.
2623
-
2624
- // Always choose a random pivot so that an input array which is reverse
2625
- // sorted does not cause O(n^2) running time.
2626
- var pivotIndex = randomIntInRange(p, r);
2627
- var i = p - 1;
2628
-
2629
- swap(ary, pivotIndex, r);
2630
- var pivot = ary[r];
2631
-
2632
- // Immediately after `j` is incremented in this loop, the following hold
2633
- // true:
2634
- //
2635
- // * Every element in `ary[p .. i]` is less than or equal to the pivot.
2636
- //
2637
- // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
2638
- for (var j = p; j < r; j++) {
2639
- if (comparator(ary[j], pivot) <= 0) {
2640
- i += 1;
2641
- swap(ary, i, j);
2642
- }
2643
- }
2644
-
2645
- swap(ary, i + 1, j);
2646
- var q = i + 1;
2647
-
2648
- // (2) Recurse on each half.
2649
-
2650
- doQuickSort(ary, comparator, p, q - 1);
2651
- doQuickSort(ary, comparator, q + 1, r);
2652
- }
2653
- }
2654
-
2655
- /**
2656
- * Sort the given array in-place with the given comparator function.
2657
- *
2658
- * @param {Array} ary
2659
- * An array to sort.
2660
- * @param {function} comparator
2661
- * Function to use to compare two items.
2662
- */
2663
- exports.quickSort = function (ary, comparator) {
2664
- doQuickSort(ary, comparator, 0, ary.length - 1);
2665
- };
2666
-
2667
-
2668
- /***/ }),
2669
- /* 10 */
2670
- /***/ (function(module, exports, __webpack_require__) {
2671
-
2672
- /* -*- Mode: js; js-indent-level: 2; -*- */
2673
- /*
2674
- * Copyright 2011 Mozilla Foundation and contributors
2675
- * Licensed under the New BSD license. See LICENSE or:
2676
- * http://opensource.org/licenses/BSD-3-Clause
2677
- */
2678
-
2679
- var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;
2680
- var util = __webpack_require__(4);
2681
-
2682
- // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
2683
- // operating systems these days (capturing the result).
2684
- var REGEX_NEWLINE = /(\r?\n)/;
2685
-
2686
- // Newline character code for charCodeAt() comparisons
2687
- var NEWLINE_CODE = 10;
2688
-
2689
- // Private symbol for identifying `SourceNode`s when multiple versions of
2690
- // the source-map library are loaded. This MUST NOT CHANGE across
2691
- // versions!
2692
- var isSourceNode = "$$$isSourceNode$$$";
2693
-
2694
- /**
2695
- * SourceNodes provide a way to abstract over interpolating/concatenating
2696
- * snippets of generated JavaScript source code while maintaining the line and
2697
- * column information associated with the original source code.
2698
- *
2699
- * @param aLine The original line number.
2700
- * @param aColumn The original column number.
2701
- * @param aSource The original source's filename.
2702
- * @param aChunks Optional. An array of strings which are snippets of
2703
- * generated JS, or other SourceNodes.
2704
- * @param aName The original identifier.
2705
- */
2706
- function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
2707
- this.children = [];
2708
- this.sourceContents = {};
2709
- this.line = aLine == null ? null : aLine;
2710
- this.column = aColumn == null ? null : aColumn;
2711
- this.source = aSource == null ? null : aSource;
2712
- this.name = aName == null ? null : aName;
2713
- this[isSourceNode] = true;
2714
- if (aChunks != null) this.add(aChunks);
2715
- }
2716
-
2717
- /**
2718
- * Creates a SourceNode from generated code and a SourceMapConsumer.
2719
- *
2720
- * @param aGeneratedCode The generated code
2721
- * @param aSourceMapConsumer The SourceMap for the generated code
2722
- * @param aRelativePath Optional. The path that relative sources in the
2723
- * SourceMapConsumer should be relative to.
2724
- */
2725
- SourceNode.fromStringWithSourceMap =
2726
- function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
2727
- // The SourceNode we want to fill with the generated code
2728
- // and the SourceMap
2729
- var node = new SourceNode();
2730
-
2731
- // All even indices of this array are one line of the generated code,
2732
- // while all odd indices are the newlines between two adjacent lines
2733
- // (since `REGEX_NEWLINE` captures its match).
2734
- // Processed fragments are accessed by calling `shiftNextLine`.
2735
- var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
2736
- var remainingLinesIndex = 0;
2737
- var shiftNextLine = function() {
2738
- var lineContents = getNextLine();
2739
- // The last line of a file might not have a newline.
2740
- var newLine = getNextLine() || "";
2741
- return lineContents + newLine;
2742
-
2743
- function getNextLine() {
2744
- return remainingLinesIndex < remainingLines.length ?
2745
- remainingLines[remainingLinesIndex++] : undefined;
2746
- }
2747
- };
2748
-
2749
- // We need to remember the position of "remainingLines"
2750
- var lastGeneratedLine = 1, lastGeneratedColumn = 0;
2751
-
2752
- // The generate SourceNodes we need a code range.
2753
- // To extract it current and last mapping is used.
2754
- // Here we store the last mapping.
2755
- var lastMapping = null;
2756
-
2757
- aSourceMapConsumer.eachMapping(function (mapping) {
2758
- if (lastMapping !== null) {
2759
- // We add the code from "lastMapping" to "mapping":
2760
- // First check if there is a new line in between.
2761
- if (lastGeneratedLine < mapping.generatedLine) {
2762
- // Associate first line with "lastMapping"
2763
- addMappingWithCode(lastMapping, shiftNextLine());
2764
- lastGeneratedLine++;
2765
- lastGeneratedColumn = 0;
2766
- // The remaining code is added without mapping
2767
- } else {
2768
- // There is no new line in between.
2769
- // Associate the code between "lastGeneratedColumn" and
2770
- // "mapping.generatedColumn" with "lastMapping"
2771
- var nextLine = remainingLines[remainingLinesIndex];
2772
- var code = nextLine.substr(0, mapping.generatedColumn -
2773
- lastGeneratedColumn);
2774
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
2775
- lastGeneratedColumn);
2776
- lastGeneratedColumn = mapping.generatedColumn;
2777
- addMappingWithCode(lastMapping, code);
2778
- // No more remaining code, continue
2779
- lastMapping = mapping;
2780
- return;
2781
- }
2782
- }
2783
- // We add the generated code until the first mapping
2784
- // to the SourceNode without any mapping.
2785
- // Each line is added as separate string.
2786
- while (lastGeneratedLine < mapping.generatedLine) {
2787
- node.add(shiftNextLine());
2788
- lastGeneratedLine++;
2789
- }
2790
- if (lastGeneratedColumn < mapping.generatedColumn) {
2791
- var nextLine = remainingLines[remainingLinesIndex];
2792
- node.add(nextLine.substr(0, mapping.generatedColumn));
2793
- remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
2794
- lastGeneratedColumn = mapping.generatedColumn;
2795
- }
2796
- lastMapping = mapping;
2797
- }, this);
2798
- // We have processed all mappings.
2799
- if (remainingLinesIndex < remainingLines.length) {
2800
- if (lastMapping) {
2801
- // Associate the remaining code in the current line with "lastMapping"
2802
- addMappingWithCode(lastMapping, shiftNextLine());
2803
- }
2804
- // and add the remaining lines without any mapping
2805
- node.add(remainingLines.splice(remainingLinesIndex).join(""));
2806
- }
2807
-
2808
- // Copy sourcesContent into SourceNode
2809
- aSourceMapConsumer.sources.forEach(function (sourceFile) {
2810
- var content = aSourceMapConsumer.sourceContentFor(sourceFile);
2811
- if (content != null) {
2812
- if (aRelativePath != null) {
2813
- sourceFile = util.join(aRelativePath, sourceFile);
2814
- }
2815
- node.setSourceContent(sourceFile, content);
2816
- }
2817
- });
2818
-
2819
- return node;
2820
-
2821
- function addMappingWithCode(mapping, code) {
2822
- if (mapping === null || mapping.source === undefined) {
2823
- node.add(code);
2824
- } else {
2825
- var source = aRelativePath
2826
- ? util.join(aRelativePath, mapping.source)
2827
- : mapping.source;
2828
- node.add(new SourceNode(mapping.originalLine,
2829
- mapping.originalColumn,
2830
- source,
2831
- code,
2832
- mapping.name));
2833
- }
2834
- }
2835
- };
2836
-
2837
- /**
2838
- * Add a chunk of generated JS to this source node.
2839
- *
2840
- * @param aChunk A string snippet of generated JS code, another instance of
2841
- * SourceNode, or an array where each member is one of those things.
2842
- */
2843
- SourceNode.prototype.add = function SourceNode_add(aChunk) {
2844
- if (Array.isArray(aChunk)) {
2845
- aChunk.forEach(function (chunk) {
2846
- this.add(chunk);
2847
- }, this);
2848
- }
2849
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
2850
- if (aChunk) {
2851
- this.children.push(aChunk);
2852
- }
2853
- }
2854
- else {
2855
- throw new TypeError(
2856
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
2857
- );
2858
- }
2859
- return this;
2860
- };
2861
-
2862
- /**
2863
- * Add a chunk of generated JS to the beginning of this source node.
2864
- *
2865
- * @param aChunk A string snippet of generated JS code, another instance of
2866
- * SourceNode, or an array where each member is one of those things.
2867
- */
2868
- SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
2869
- if (Array.isArray(aChunk)) {
2870
- for (var i = aChunk.length-1; i >= 0; i--) {
2871
- this.prepend(aChunk[i]);
2872
- }
2873
- }
2874
- else if (aChunk[isSourceNode] || typeof aChunk === "string") {
2875
- this.children.unshift(aChunk);
2876
- }
2877
- else {
2878
- throw new TypeError(
2879
- "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
2880
- );
2881
- }
2882
- return this;
2883
- };
2884
-
2885
- /**
2886
- * Walk over the tree of JS snippets in this node and its children. The
2887
- * walking function is called once for each snippet of JS and is passed that
2888
- * snippet and the its original associated source's line/column location.
2889
- *
2890
- * @param aFn The traversal function.
2891
- */
2892
- SourceNode.prototype.walk = function SourceNode_walk(aFn) {
2893
- var chunk;
2894
- for (var i = 0, len = this.children.length; i < len; i++) {
2895
- chunk = this.children[i];
2896
- if (chunk[isSourceNode]) {
2897
- chunk.walk(aFn);
2898
- }
2899
- else {
2900
- if (chunk !== '') {
2901
- aFn(chunk, { source: this.source,
2902
- line: this.line,
2903
- column: this.column,
2904
- name: this.name });
2905
- }
2906
- }
2907
- }
2908
- };
2909
-
2910
- /**
2911
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
2912
- * each of `this.children`.
2913
- *
2914
- * @param aSep The separator.
2915
- */
2916
- SourceNode.prototype.join = function SourceNode_join(aSep) {
2917
- var newChildren;
2918
- var i;
2919
- var len = this.children.length;
2920
- if (len > 0) {
2921
- newChildren = [];
2922
- for (i = 0; i < len-1; i++) {
2923
- newChildren.push(this.children[i]);
2924
- newChildren.push(aSep);
2925
- }
2926
- newChildren.push(this.children[i]);
2927
- this.children = newChildren;
2928
- }
2929
- return this;
2930
- };
2931
-
2932
- /**
2933
- * Call String.prototype.replace on the very right-most source snippet. Useful
2934
- * for trimming whitespace from the end of a source node, etc.
2935
- *
2936
- * @param aPattern The pattern to replace.
2937
- * @param aReplacement The thing to replace the pattern with.
2938
- */
2939
- SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
2940
- var lastChild = this.children[this.children.length - 1];
2941
- if (lastChild[isSourceNode]) {
2942
- lastChild.replaceRight(aPattern, aReplacement);
2943
- }
2944
- else if (typeof lastChild === 'string') {
2945
- this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
2946
- }
2947
- else {
2948
- this.children.push(''.replace(aPattern, aReplacement));
2949
- }
2950
- return this;
2951
- };
2952
-
2953
- /**
2954
- * Set the source content for a source file. This will be added to the SourceMapGenerator
2955
- * in the sourcesContent field.
2956
- *
2957
- * @param aSourceFile The filename of the source file
2958
- * @param aSourceContent The content of the source file
2959
- */
2960
- SourceNode.prototype.setSourceContent =
2961
- function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
2962
- this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
2963
- };
2964
-
2965
- /**
2966
- * Walk over the tree of SourceNodes. The walking function is called for each
2967
- * source file content and is passed the filename and source content.
2968
- *
2969
- * @param aFn The traversal function.
2970
- */
2971
- SourceNode.prototype.walkSourceContents =
2972
- function SourceNode_walkSourceContents(aFn) {
2973
- for (var i = 0, len = this.children.length; i < len; i++) {
2974
- if (this.children[i][isSourceNode]) {
2975
- this.children[i].walkSourceContents(aFn);
2976
- }
2977
- }
2978
-
2979
- var sources = Object.keys(this.sourceContents);
2980
- for (var i = 0, len = sources.length; i < len; i++) {
2981
- aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
2982
- }
2983
- };
2984
-
2985
- /**
2986
- * Return the string representation of this source node. Walks over the tree
2987
- * and concatenates all the various snippets together to one string.
2988
- */
2989
- SourceNode.prototype.toString = function SourceNode_toString() {
2990
- var str = "";
2991
- this.walk(function (chunk) {
2992
- str += chunk;
2993
- });
2994
- return str;
2995
- };
2996
-
2997
- /**
2998
- * Returns the string representation of this source node along with a source
2999
- * map.
3000
- */
3001
- SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
3002
- var generated = {
3003
- code: "",
3004
- line: 1,
3005
- column: 0
3006
- };
3007
- var map = new SourceMapGenerator(aArgs);
3008
- var sourceMappingActive = false;
3009
- var lastOriginalSource = null;
3010
- var lastOriginalLine = null;
3011
- var lastOriginalColumn = null;
3012
- var lastOriginalName = null;
3013
- this.walk(function (chunk, original) {
3014
- generated.code += chunk;
3015
- if (original.source !== null
3016
- && original.line !== null
3017
- && original.column !== null) {
3018
- if(lastOriginalSource !== original.source
3019
- || lastOriginalLine !== original.line
3020
- || lastOriginalColumn !== original.column
3021
- || lastOriginalName !== original.name) {
3022
- map.addMapping({
3023
- source: original.source,
3024
- original: {
3025
- line: original.line,
3026
- column: original.column
3027
- },
3028
- generated: {
3029
- line: generated.line,
3030
- column: generated.column
3031
- },
3032
- name: original.name
3033
- });
3034
- }
3035
- lastOriginalSource = original.source;
3036
- lastOriginalLine = original.line;
3037
- lastOriginalColumn = original.column;
3038
- lastOriginalName = original.name;
3039
- sourceMappingActive = true;
3040
- } else if (sourceMappingActive) {
3041
- map.addMapping({
3042
- generated: {
3043
- line: generated.line,
3044
- column: generated.column
3045
- }
3046
- });
3047
- lastOriginalSource = null;
3048
- sourceMappingActive = false;
3049
- }
3050
- for (var idx = 0, length = chunk.length; idx < length; idx++) {
3051
- if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
3052
- generated.line++;
3053
- generated.column = 0;
3054
- // Mappings end at eol
3055
- if (idx + 1 === length) {
3056
- lastOriginalSource = null;
3057
- sourceMappingActive = false;
3058
- } else if (sourceMappingActive) {
3059
- map.addMapping({
3060
- source: original.source,
3061
- original: {
3062
- line: original.line,
3063
- column: original.column
3064
- },
3065
- generated: {
3066
- line: generated.line,
3067
- column: generated.column
3068
- },
3069
- name: original.name
3070
- });
3071
- }
3072
- } else {
3073
- generated.column++;
3074
- }
3075
- }
3076
- });
3077
- this.walkSourceContents(function (sourceFile, sourceContent) {
3078
- map.setSourceContent(sourceFile, sourceContent);
3079
- });
3080
-
3081
- return { code: generated.code, map: map };
3082
- };
3083
-
3084
- exports.SourceNode = SourceNode;
3085
-
3086
-
3087
- /***/ })
3088
- /******/ ])
3089
- });
3090
- ;
3091
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBlNDczOGZjNzJhN2IyMzAzOTg4OSIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTBDLFNBQVM7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDL1pBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUEyRDtBQUMzRCxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7Ozs7Ozs7QUMzSUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCLGlCQUFnQjs7QUFFaEIsb0JBQW1CO0FBQ25CLHFCQUFvQjs7QUFFcEIsaUJBQWdCO0FBQ2hCLGlCQUFnQjs7QUFFaEIsaUJBQWdCO0FBQ2hCLGtCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNsRUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNoYUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXNDLFNBQVM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQzlFQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxvQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLHdDQUF3QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLG1CQUFtQixFQUFFO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE2QixNQUFNO0FBQ25DO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBLElBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUMsc0JBQXFCLCtDQUErQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsMkJBQTJCO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBLHNCQUFxQiw0QkFBNEI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDempDQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQzlHQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ2pIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUF5QyxTQUFTO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNEMsY0FBYztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBLFlBQVc7QUFDWDtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUc7O0FBRUgsV0FBVTtBQUNWOztBQUVBIiwiZmlsZSI6InNvdXJjZS1tYXAuZGVidWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzb3VyY2VNYXBcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGU0NzM4ZmM3MmE3YjIzMDM5ODg5IiwiLypcbiAqIENvcHlyaWdodCAyMDA5LTIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLnR4dCBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5leHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2Utbm9kZScpLlNvdXJjZU5vZGU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NvdXJjZS1tYXAuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBNYXBwaW5nTGlzdCA9IHJlcXVpcmUoJy4vbWFwcGluZy1saXN0JykuTWFwcGluZ0xpc3Q7XG5cbi8qKlxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICogYmVpbmcgYnVpbHQgaW5jcmVtZW50YWxseS4gWW91IG1heSBwYXNzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAqIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGZpbGU6IFRoZSBmaWxlbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBzb3VyY2VSb290OiBBIHJvb3QgZm9yIGFsbCByZWxhdGl2ZSBVUkxzIGluIHRoaXMgc291cmNlIG1hcC5cbiAqL1xuZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKSB7XG4gIGlmICghYUFyZ3MpIHtcbiAgICBhQXJncyA9IHt9O1xuICB9XG4gIHRoaXMuX2ZpbGUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2ZpbGUnLCBudWxsKTtcbiAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB0aGlzLl9za2lwVmFsaWRhdGlvbiA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc2tpcFZhbGlkYXRpb24nLCBmYWxzZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbWFwcGluZ3MgPSBuZXcgTWFwcGluZ0xpc3QoKTtcbiAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbn1cblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgIHZhciBnZW5lcmF0b3IgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6IGFTb3VyY2VNYXBDb25zdW1lci5maWxlLFxuICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgIG5ld01hcHBpbmcuc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3TWFwcGluZy5vcmlnaW5hbCA9IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLm5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZ2VuZXJhdG9yLmFkZE1hcHBpbmcobmV3TWFwcGluZyk7XG4gICAgfSk7XG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfTtcblxuLyoqXG4gKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIGZvciB0aGlzIHNvdXJjZSBtYXAgYmVpbmcgY3JlYXRlZC4gVGhlIG1hcHBpbmdcbiAqIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGdlbmVyYXRlZDogQW4gb2JqZWN0IHdpdGggdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zLlxuICogICAtIG9yaWdpbmFsOiBBbiBvYmplY3Qgd2l0aCB0aGUgb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICogICAtIG5hbWU6IEFuIG9wdGlvbmFsIG9yaWdpbmFsIHRva2VuIG5hbWUgZm9yIHRoaXMgbWFwcGluZy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FkZE1hcHBpbmcoYUFyZ3MpIHtcbiAgICB2YXIgZ2VuZXJhdGVkID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdnZW5lcmF0ZWQnKTtcbiAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJywgbnVsbCk7XG4gICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhhQXJncywgJ25hbWUnLCBudWxsKTtcblxuICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlTWFwcGluZyhnZW5lcmF0ZWQsIG9yaWdpbmFsLCBzb3VyY2UsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gU3RyaW5nKHNvdXJjZSk7XG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgICAgaWYgKCF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX21hcHBpbmdzLmFkZCh7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogZ2VuZXJhdGVkLmNvbHVtbixcbiAgICAgIG9yaWdpbmFsTGluZTogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5saW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBuYW1lOiBuYW1lXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgdmFyIHNvdXJjZSA9IGFTb3VyY2VGaWxlO1xuICAgIGlmICh0aGlzLl9zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoYVNvdXJjZUNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgX3NvdXJjZXNDb250ZW50cyBtYXAgaWYgdGhlIHByb3BlcnR5IGlzIG51bGwuXG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoc291cmNlKV0gPSBhU291cmNlQ29udGVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgIC8vIElmIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcCBpcyBlbXB0eSwgc2V0IHRoZSBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gKiBzb3VyY2UgbWFwIGJlaW5nIGdlbmVyYXRlZC4gRWFjaCBtYXBwaW5nIHRvIHRoZSBzdXBwbGllZCBzb3VyY2UgZmlsZSBpc1xuICogcmV3cml0dGVuIHVzaW5nIHRoZSBzdXBwbGllZCBzb3VyY2UgbWFwLiBOb3RlOiBUaGUgcmVzb2x1dGlvbiBmb3IgdGhlXG4gKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAqICAgICAgICBJZiBvbWl0dGVkLCBTb3VyY2VNYXBDb25zdW1lcidzIGZpbGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGFTb3VyY2VNYXBQYXRoIE9wdGlvbmFsLiBUaGUgZGlybmFtZSBvZiB0aGUgcGF0aCB0byB0aGUgc291cmNlIG1hcFxuICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgbmVlZGVkIHdoZW4gdGhlIHR3byBzb3VyY2UgbWFwcyBhcmVuJ3QgaW4gdGhlIHNhbWVcbiAqICAgICAgICBkaXJlY3RvcnksIGFuZCB0aGUgc291cmNlIG1hcCB0byBiZSBhcHBsaWVkIGNvbnRhaW5zIHJlbGF0aXZlIHNvdXJjZVxuICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gKiAgICAgICAgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hcHBseVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIsIGFTb3VyY2VGaWxlLCBhU291cmNlTWFwUGF0aCkge1xuICAgIHZhciBzb3VyY2VGaWxlID0gYVNvdXJjZUZpbGU7XG4gICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgIGlmIChhU291cmNlRmlsZSA9PSBudWxsKSB7XG4gICAgICBpZiAoYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgcmVxdWlyZXMgZWl0aGVyIGFuIGV4cGxpY2l0IHNvdXJjZSBmaWxlLCAnICtcbiAgICAgICAgICAnb3IgdGhlIHNvdXJjZSBtYXBcXCdzIFwiZmlsZVwiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzb3VyY2VGaWxlID0gYVNvdXJjZU1hcENvbnN1bWVyLmZpbGU7XG4gICAgfVxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9vdDtcbiAgICAvLyBNYWtlIFwic291cmNlRmlsZVwiIHJlbGF0aXZlIGlmIGFuIGFic29sdXRlIFVybCBpcyBwYXNzZWQuXG4gICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlRmlsZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgfVxuICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgLy8gdGhlIG5hbWVzIGFycmF5LlxuICAgIHZhciBuZXdTb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAvLyBGaW5kIG1hcHBpbmdzIGZvciB0aGUgXCJzb3VyY2VGaWxlXCJcbiAgICB0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGNhbiBiZSBtYXBwZWQgYnkgdGhlIHNvdXJjZSBtYXAsIHRoZW4gdXBkYXRlIHRoZSBtYXBwaW5nLlxuICAgICAgICB2YXIgb3JpZ2luYWwgPSBhU291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb3B5IG1hcHBpbmdcbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIG1hcHBpbmcuc291cmNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgICAgICBpZiAob3JpZ2luYWwubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgIW5ld1NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgbmV3TmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5fc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXdOYW1lcztcblxuICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhU291cmNlTWFwUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAqXG4gKiAgIDEuIEp1c3QgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi5cbiAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIDMuIEdlbmVyYXRlZCBhbmQgb3JpZ2luYWwgcG9zaXRpb24sIG9yaWdpbmFsIHNvdXJjZSwgYXMgd2VsbCBhcyBhIG5hbWVcbiAqICAgICAgdG9rZW4uXG4gKlxuICogVG8gbWFpbnRhaW4gY29uc2lzdGVuY3ksIHdlIHZhbGlkYXRlIHRoYXQgYW55IG5ldyBtYXBwaW5nIGJlaW5nIGFkZGVkIGZhbGxzXG4gKiBpbiB0byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGVNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3ZhbGlkYXRlTWFwcGluZyhhR2VuZXJhdGVkLCBhT3JpZ2luYWwsIGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAvLyBXaGVuIGFPcmlnaW5hbCBpcyB0cnV0aHkgYnV0IGhhcyBlbXB0eSB2YWx1ZXMgZm9yIC5saW5lIGFuZCAuY29sdW1uLFxuICAgIC8vIGl0IGlzIG1vc3QgbGlrZWx5IGEgcHJvZ3JhbW1lciBlcnJvci4gSW4gdGhpcyBjYXNlIHdlIHRocm93IGEgdmVyeVxuICAgIC8vIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgdG8gdHJ5IHRvIGd1aWRlIHRoZW0gdGhlIHJpZ2h0IHdheS5cbiAgICAvLyBGb3IgZXhhbXBsZTogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcG9seW1lci1idW5kbGVyL3B1bGwvNTE5XG4gICAgaWYgKGFPcmlnaW5hbCAmJiB0eXBlb2YgYU9yaWdpbmFsLmxpbmUgIT09ICdudW1iZXInICYmIHR5cGVvZiBhT3JpZ2luYWwuY29sdW1uICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnb3JpZ2luYWwubGluZSBhbmQgb3JpZ2luYWwuY29sdW1uIGFyZSBub3QgbnVtYmVycyAtLSB5b3UgcHJvYmFibHkgbWVhbnQgdG8gb21pdCAnICtcbiAgICAgICAgICAgICd0aGUgb3JpZ2luYWwgbWFwcGluZyBlbnRpcmVseSBhbmQgb25seSBtYXAgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi4gSWYgc28sIHBhc3MgJyArXG4gICAgICAgICAgICAnbnVsbCBmb3IgdGhlIG9yaWdpbmFsIG1hcHBpbmcgaW5zdGVhZCBvZiBhbiBvYmplY3Qgd2l0aCBlbXB0eSBvciBudWxsIHZhbHVlcy4nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgJiYgIWFPcmlnaW5hbCAmJiAhYVNvdXJjZSAmJiAhYU5hbWUpIHtcbiAgICAgIC8vIENhc2UgMS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoYUdlbmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVkXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsLmxpbmUgPiAwICYmIGFPcmlnaW5hbC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgIC8vIENhc2VzIDIgYW5kIDMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hcHBpbmc6ICcgKyBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgc291cmNlOiBhU291cmNlLFxuICAgICAgICBvcmlnaW5hbDogYU9yaWdpbmFsLFxuICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGFjY3VtdWxhdGVkIG1hcHBpbmdzIGluIHRvIHRoZSBzdHJlYW0gb2YgYmFzZSA2NCBWTFFzXG4gKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBuZXh0O1xuICAgIHZhciBtYXBwaW5nO1xuICAgIHZhciBuYW1lSWR4O1xuICAgIHZhciBzb3VyY2VJZHg7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9tYXBwaW5ncy50b0FycmF5KCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG4gICAgICBuZXh0ID0gJydcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbmV4dCArPSAnOyc7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBpZiAoIXV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZywgbWFwcGluZ3NbaSAtIDFdKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQgKz0gJywnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbik7XG4gICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VJZHggPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUoc291cmNlSWR4IC0gcHJldmlvdXNTb3VyY2UpO1xuICAgICAgICBwcmV2aW91c1NvdXJjZSA9IHNvdXJjZUlkeDtcblxuICAgICAgICAvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmUgLSAxO1xuXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbENvbHVtbik7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5hbWVJZHggPSB0aGlzLl9uYW1lcy5pbmRleE9mKG1hcHBpbmcubmFtZSk7XG4gICAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG5hbWVJZHggLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgIHByZXZpb3VzTmFtZSA9IG5hbWVJZHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IG5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgIHJldHVybiBhU291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoYVNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgdmFyIGtleSA9IHV0aWwudG9TZXRTdHJpbmcoc291cmNlKTtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLCBrZXkpXG4gICAgICAgID8gdGhpcy5fc291cmNlc0NvbnRlbnRzW2tleV1cbiAgICAgICAgOiBudWxsO1xuICAgIH0sIHRoaXMpO1xuICB9O1xuXG4vKipcbiAqIEV4dGVybmFsaXplIHRoZSBzb3VyY2UgbWFwLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl90b0pTT04oKSB7XG4gICAgdmFyIG1hcCA9IHtcbiAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICBzb3VyY2VzOiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgIG5hbWVzOiB0aGlzLl9uYW1lcy50b0FycmF5KCksXG4gICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgIH07XG4gICAgaWYgKHRoaXMuX2ZpbGUgIT0gbnVsbCkge1xuICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9O1xuXG4vKipcbiAqIFJlbmRlciB0aGUgc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQgdG8gYSBzdHJpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUudG9TdHJpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IFNvdXJjZU1hcEdlbmVyYXRvcjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LXZscS5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvcXVpY2stc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF07XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW5vZGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=